@discordeno/rest 21.0.1-next.979f1a2 → 21.0.1-next.97c657c

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.
@@ -704,9 +704,6 @@ function createRestManager(options) {
704
704
  async deleteGlobalApplicationCommand (commandId) {
705
705
  await rest.delete(rest.routes.interactions.commands.command(rest.applicationId, commandId));
706
706
  },
707
- async deleteGuild (guildId) {
708
- await rest.delete(rest.routes.guilds.guild(guildId));
709
- },
710
707
  async deleteGuildApplicationCommand (commandId, guildId) {
711
708
  await rest.delete(rest.routes.interactions.commands.guilds.one(rest.applicationId, guildId, commandId));
712
709
  },
@@ -867,14 +864,6 @@ function createRestManager(options) {
867
864
  body
868
865
  });
869
866
  },
870
- async editGuildMfaLevel (guildId, mfaLevel, reason) {
871
- await rest.post(rest.routes.guilds.mfa(guildId), {
872
- body: {
873
- level: mfaLevel
874
- },
875
- reason
876
- });
877
- },
878
867
  async editGuildSticker (guildId, stickerId, body, reason) {
879
868
  return await rest.patch(rest.routes.guilds.sticker(guildId, stickerId), {
880
869
  body,
@@ -1627,4 +1616,4 @@ var HttpResponseCode = /*#__PURE__*/ function(HttpResponseCode) {
1627
1616
  return HttpResponseCode;
1628
1617
  }(HttpResponseCode || {});
1629
1618
 
1630
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHsgdHlwZSBJbnNwZWN0T3B0aW9ucywgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHtcbiAgQmlnU3RyaW5nLFxuICBDYW1lbGl6ZSxcbiAgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIERpc2NvcmRBY3Rpdml0eUluc3RhbmNlLFxuICBEaXNjb3JkQXBwbGljYXRpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgRGlzY29yZEd1aWxkT25ib2FyZGluZyxcbiAgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncyxcbiAgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZSxcbiAgRGlzY29yZEludml0ZSxcbiAgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkTG9iYnksXG4gIERpc2NvcmRMb2JieU1lbWJlcixcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU2t1LFxuICBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgRGlzY29yZFdlYmhvb2ssXG4gIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBNZmFMZXZlbHMsXG4gIE1vZGlmeUd1aWxkVGVtcGxhdGUsXG59IGZyb20gJ0BkaXNjb3JkZW5vL3R5cGVzJ1xuaW1wb3J0IHtcbiAgRElTQ09SREVOT19WRVJTSU9OLFxuICBjYWxjdWxhdGVCaXRzLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBjYW1lbGl6ZSxcbiAgZGVsYXksXG4gIGdldEJvdElkRnJvbVRva2VuLFxuICBoYXNQcm9wZXJ0eSxcbiAgbG9nZ2VyLFxuICBwcm9jZXNzUmVhY3Rpb25TdHJpbmcsXG4gIHVybFRvQmFzZTY0LFxufSBmcm9tICdAZGlzY29yZGVuby91dGlscydcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVzIH0gZnJvbSAnLi9yb3V0ZXMuanMnXG5pbXBvcnQgdHlwZSB7IENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBNYWtlUmVxdWVzdE9wdGlvbnMsIFJlc3RNYW5hZ2VyLCBTZW5kUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzLmpzJ1xuXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVkVSU0lPTiA9IDEwXG5leHBvcnQgY29uc3QgRElTQ09SRF9BUElfVVJMID0gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJ1xuXG5leHBvcnQgY29uc3QgQVVESVRfTE9HX1JFQVNPTl9IRUFERVIgPSAneC1hdWRpdC1sb2ctcmVhc29uJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1yZW1haW5pbmcnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIgPSAneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWdsb2JhbCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIgPSAneC1yYXRlbGltaXQtYnVja2V0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfTElNSVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWxpbWl0J1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfU0NPUEVfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXNjb3BlJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICBjb25zdCBhcHBsaWNhdGlvbklkID0gb3B0aW9ucy5hcHBsaWNhdGlvbklkID8gQmlnSW50KG9wdGlvbnMuYXBwbGljYXRpb25JZCkgOiBnZXRCb3RJZEZyb21Ub2tlbihvcHRpb25zLnRva2VuKVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLnByb3h5Py5iYXNlVXJsID8/IERJU0NPUkRfQVBJX1VSTFxuICAvLyBEaXNjb3JkIGVycm9yIGNhbiBnZXQgbmVzdGVkIGEgbG90LCBzbyB3ZSB1c2UgYSBjdXN0b20gaW5zcGVjdCB0byBjaGFuZ2UgdGhlIGRlcHRoIHRvIEluZmluaXR5XG4gIGNvbnN0IGJhc2VFcnJvclByb3RvdHlwZSA9IHtcbiAgICBbaW5zcGVjdC5jdXN0b21dKF9kZXB0aDogbnVtYmVyLCBvcHRpb25zOiBJbnNwZWN0T3B0aW9ucywgX2luc3BlY3Q6IHR5cGVvZiBpbnNwZWN0KSB7XG4gICAgICByZXR1cm4gX2luc3BlY3QodGhpcywge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBkZXB0aDogSW5maW5pdHksXG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbGwgaW5zcGVjdCBvbiBvdXJzZWxmLCB3ZSBuZWVkIHRvIGRpc2FibGUgdGhlIGNhbGxzIHRvIHRoZSBpbnNwZWN0LmN1c3RvbSBzeW1ib2wgb3IgZWxzZSBpdCB3aWxsIGNhdXNlIGFuIGluZmluaXRlIGxvb3AuXG4gICAgICAgIGN1c3RvbUluc3BlY3Q6IGZhbHNlLFxuICAgICAgfSlcbiAgICB9LFxuICB9XG5cbiAgY29uc3QgcmVzdDogUmVzdE1hbmFnZXIgPSB7XG4gICAgYXBwbGljYXRpb25JZCxcbiAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uLFxuICAgIGF1dGhvcml6YXRpb25IZWFkZXI6IG9wdGlvbnMucHJveHk/LmF1dGhvcml6YXRpb25IZWFkZXIgPz8gJ2F1dGhvcml6YXRpb24nLFxuICAgIGJhc2VVcmwsXG4gICAgZGVsZXRlUXVldWVEZWxheTogNjAwMDAsXG4gICAgZ2xvYmFsbHlSYXRlTGltaXRlZDogZmFsc2UsXG4gICAgaW52YWxpZEJ1Y2tldDogY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQoeyBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyIH0pLFxuICAgIGlzUHJveGllZDogIWJhc2VVcmwuc3RhcnRzV2l0aChESVNDT1JEX0FQSV9VUkwpLFxuICAgIHVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQ6IG9wdGlvbnMucHJveHk/LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQsXG4gICAgbWF4UmV0cnlDb3VudDogSW5maW5pdHksXG4gICAgcHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHM6IGZhbHNlLFxuICAgIHF1ZXVlczogbmV3IE1hcCgpLFxuICAgIHJhdGVMaW1pdGVkUGF0aHM6IG5ldyBNYXAoKSxcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gRElTQ09SRF9BUElfVkVSU0lPTixcbiAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyID8/IGxvZ2dlcixcblxuICAgIHJvdXRlczogY3JlYXRlUm91dGVzKCksXG5cbiAgICBjcmVhdGVCYXNlSGVhZGVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke0RJU0NPUkRFTk9fVkVSU0lPTn0pYCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hlY2tSYXRlTGltaXRzKHVybCwgaWRlbnRpZmllcikge1xuICAgICAgY29uc3QgcmF0ZWxpbWl0ZWQgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVUb2tlblF1ZXVlcyhvbGRUb2tlbiwgbmV3VG9rZW4pIHtcbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAoIXJlc3QudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIFwiVGhlICdwcm94eS51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50JyBvcHRpb24gbmVlZHMgdG8gYmUgc2V0IHdoZW4gdXNpbmcgYSByZXN0IHByb3h5IGFuZCBuZWVkZWQgdG8gY2FsbCAndXBkYXRlVG9rZW5RdWV1ZXMnXCIsXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cblxuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBoZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vJHtyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnR9YCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIG9sZFRva2VuLFxuICAgICAgICAgICAgbmV3VG9rZW4sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3SWRlbnRpZmllciA9IGBCZWFyZXIgJHtuZXdUb2tlbn1gXG5cbiAgICAgIC8vIFVwZGF0ZSBhbGwgdGhlIHF1ZXVlc1xuICAgICAgZm9yIChjb25zdCBba2V5LCBxdWV1ZV0gb2YgcmVzdC5xdWV1ZXMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucXVldWVzLmRlbGV0ZShrZXkpXG4gICAgICAgIHF1ZXVlLmlkZW50aWZpZXIgPSBuZXdJZGVudGlmaWVyXG5cbiAgICAgICAgY29uc3QgbmV3S2V5ID0gYCR7bmV3SWRlbnRpZmllcn0ke3F1ZXVlLnVybH1gXG4gICAgICAgIGNvbnN0IG5ld1F1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KG5ld0tleSlcblxuICAgICAgICAvLyBNZXJnZSB0aGUgcXVldWVzXG4gICAgICAgIGlmIChuZXdRdWV1ZSkge1xuICAgICAgICAgIG5ld1F1ZXVlLndhaXRpbmcudW5zaGlmdCguLi5xdWV1ZS53YWl0aW5nKVxuICAgICAgICAgIG5ld1F1ZXVlLnBlbmRpbmcudW5zaGlmdCguLi5xdWV1ZS5wZW5kaW5nKVxuXG4gICAgICAgICAgcXVldWUud2FpdGluZyA9IFtdXG4gICAgICAgICAgcXVldWUucGVuZGluZyA9IFtdXG5cbiAgICAgICAgICBxdWV1ZS5jbGVhbnVwKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN0LnF1ZXVlcy5zZXQobmV3S2V5LCBxdWV1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHJhdGVsaW1pdFBhdGhdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aChgQmVhcmVyICR7b2xkVG9rZW59YCkpIGNvbnRpbnVlXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtuZXdJZGVudGlmaWVyfSR7cmF0ZWxpbWl0UGF0aC51cmx9YCwgcmF0ZWxpbWl0UGF0aClcblxuICAgICAgICBpZiAocmF0ZWxpbWl0UGF0aC5idWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGguYnVja2V0SWR9YCwgcmF0ZWxpbWl0UGF0aClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV1cblxuICAgICAgICAgIC8vIElmIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiBzbmFrZV9jYXNlIHdlIGNhbiBhc3N1bWUgaXQgaXMgYWxyZWFkeSBpbiB0aGUgZGlzY29yZCBmb3JtYXQuXG4gICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygnXycpKSB7XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHZhbHVlXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNvbWUgZmFsc3kgdmFsdWVzIHNob3VsZCBiZSBhbGxvd2VkIGxpa2UgbnVsbCBvciAwXG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Blcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgY2FzZSAnYWxsb3cnOlxuICAgICAgICAgICAgICBjYXNlICdkZW55JzpcbiAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6IGNhbGN1bGF0ZUJpdHModmFsdWUpXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVmYXVsdE1lbWJlclBlcm1pc3Npb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVmYXVsdF9tZW1iZXJfcGVybWlzc2lvbnMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ25hbWVMb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmoubmFtZV9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbkxvY2FsaXphdGlvbnMnOlxuICAgICAgICAgICAgICAgIG5ld09iai5kZXNjcmlwdGlvbl9sb2NhbGl6YXRpb25zID0gdmFsdWVcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5jcmVhdGVCYXNlSGVhZGVycygpXG5cbiAgICAgIGlmIChvcHRpb25zPy51bmF1dGhvcml6ZWQgIT09IHRydWUpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zPy5yZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBoZWFkZXJzW0FVRElUX0xPR19SRUFTT05fSEVBREVSXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zPy5yZWFzb24pXG4gICAgICB9XG5cbiAgICAgIGxldCBib2R5OiBzdHJpbmcgfCBGb3JtRGF0YSB8IHVuZGVmaW5lZFxuXG4gICAgICAvLyBUT0RPOiBjaGVjayBpZiB3ZSBuZWVkIHRvIGFkZCBzcGVjaWZpYyBjaGVjayBmb3IgR0VUIG1ldGhvZFxuICAgICAgLy8gU2luY2UgR0VUIGRvZXMgbm90IGFsbG93IGJvZGllc1xuXG4gICAgICAvLyBIYXZlIHRvIGNoZWNrIGZvciBhdHRhY2htZW50cyBmaXJzdCwgc2luY2UgYm9keSB0aGVuIGhhcyB0byBiZSBzZW5kIGluIGEgZGlmZmVyZW50IHdheS5cbiAgICAgIGlmIChvcHRpb25zPy5maWxlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuZmlsZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZXNbJHtpfV1gLCBvcHRpb25zLmZpbGVzW2ldLmJsb2IsIG9wdGlvbnMuZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEhhdmUgdG8gdXNlIGNoYW5nZVRvRGlzY29yZEZvcm1hdCBvciBlbHNlIEpTT04uc3RyaW5naWZ5IG1heSB0aHJvdyBhbiBlcnJvciBmb3IgdGhlIHByZXNlbmNlIG9mIEJpZ0ludChzKSBpbiB0aGUganNvblxuICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoeyAuLi5vcHRpb25zLmJvZHksIGZpbGVzOiB1bmRlZmluZWQgfSkpKVxuXG4gICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgYm9keSA9IGZvcm1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uYm9keSAmJiBvcHRpb25zLmhlYWRlcnMgJiYgb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9PT0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpIHtcbiAgICAgICAgLy8gT0F1dGgyIGJvZHkgaGFuZGxpbmdcbiAgICAgICAgY29uc3QgZm9ybUJvZHk6IHN0cmluZ1tdID0gW11cblxuICAgICAgICBjb25zdCBkaXNjb3JkQm9keSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9wdGlvbnMuYm9keSlcblxuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZGlzY29yZEJvZHkpIHtcbiAgICAgICAgICBmb3JtQm9keS5wdXNoKGAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGlzY29yZEJvZHlbcHJvcF0pfWApXG4gICAgICAgIH1cblxuICAgICAgICBib2R5ID0gZm9ybUJvZHkuam9pbignJicpXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICAgICAgICBib2R5ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgICAgLy8gTm8gbmVlZCB0byBzZXQgdGhlIGBjb250ZW50LXR5cGVgIGhlYWRlciBzaW5jZSBgZmV0Y2hgIGRvZXMgdGhhdCBhdXRvbWF0aWNhbGx5IGZvciB1cyB3aGVuIHdlIHVzZSBhIGBGb3JtRGF0YWAgb2JqZWN0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKVxuICAgICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gYGFwcGxpY2F0aW9uL2pzb25gXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICBPYmplY3QuYXNzaWduKGhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycylcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgbWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycywgaWRlbnRpZmllcikge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSKVxuICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoUkFURV9MSU1JVF9HTE9CQUxfSEVBREVSKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfQlVDS0VUX0hFQURFUikgPz8gdW5kZWZpbmVkXG4gICAgICBjb25zdCBsaW1pdCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfTElNSVRfSEVBREVSKVxuXG4gICAgICAvLyBJZiB3ZSBkaWRuJ3QgcmVjZWl2ZWQgdGhlIGlkZW50aWZpZXIsIGZhbGxiYWNrIHRvIHRoZSBib3QgdG9rZW5cbiAgICAgIGlkZW50aWZpZXIgPz89IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KGAke2lkZW50aWZpZXJ9JHt1cmx9YCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7dXJsfWAsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke2lkZW50aWZpZXJ9JHtidWNrZXRJZH1gLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBOdW1iZXIoaGVhZGVycy5nZXQoJ3JldHJ5LWFmdGVyJykpICogMTAwMFxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyByZXRyeUFmdGVyXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgcmV0cnlBZnRlcilcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChpZGVudGlmaWVyLCB7XG4gICAgICAgICAgICB1cmw6ICdnbG9iYWwnLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmF0ZUxpbWl0ZWQgJiYgIXJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMpIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmF0ZUxpbWl0ZWQgPyBidWNrZXRJZCA6IHVuZGVmaW5lZFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke29wdGlvbnMucm91dGV9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkob3B0aW9ucy5tZXRob2QsIG9wdGlvbnMucmVxdWVzdEJvZHlPcHRpb25zKVxuXG4gICAgICBjb25zdCBsb2dnaW5nSGVhZGVycyA9IHsgLi4ucGF5bG9hZC5oZWFkZXJzIH1cblxuICAgICAgaWYgKHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6YXRpb25TY2hlbWUgPSBwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbj8uc3BsaXQoJyAnKVswXVxuICAgICAgICBsb2dnaW5nSGVhZGVycy5hdXRob3JpemF0aW9uID0gYCR7YXV0aG9yaXphdGlvblNjaGVtZX0gdG9rZW5oZXJlYFxuICAgICAgfVxuXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiBsb2dnaW5nSGVhZGVycyB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICByZXN0LmxvZ2dlci5lcnJvcihlcnJvcilcbiAgICAgICAgLy8gTWFyayByZXF1ZXN0IGFuZCBjb21wbGV0ZWRcbiAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QoOTk5LCBmYWxzZSlcbiAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICBzdGF0dXM6IDk5OSxcbiAgICAgICAgICBlcnJvcjogJ1Bvc3NpYmxlIG5ldHdvcmsgb3IgcmVxdWVzdCBzaGFwZSBpc3N1ZSBvY2N1cnJlZC4gSWYgdGhpcyBpcyByYXJlLCBpdHMgYSBuZXR3b3JrIGdsaXRjaC4gSWYgaXQgb2NjdXJzIGEgbG90IHNvbWV0aGluZyBpcyB3cm9uZy4nLFxuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfSlcbiAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfU0NPUEVfSEVBREVSKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMucm91dGUsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycywgcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24pXG5cbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCBIdHRwUmVzcG9uc2VDb2RlLlN1Y2Nlc3MgfHwgcmVzcG9uc2Uuc3RhdHVzID49IEh0dHBSZXNwb25zZUNvZGUuRXJyb3IpIHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IEh0dHBSZXNwb25zZUNvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nID8gKChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIG9iamVjdCkgOiBhd2FpdCByZXNwb25zZS50ZXh0KClcblxuICAgICAgICAgIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCwgYm9keSB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uc3VtZSB0aGUgcmVzcG9uc2UgYm9keSB0byBhdm9pZCBsZWFraW5nIG1lbW9yeVxuICAgICAgICBhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG5cbiAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAvLyBUb28gbWFueSBhdHRlbXB0cywgZ2V0IHJpZCBvZiByZXF1ZXN0IGZyb20gcXVldWUuXG4gICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZyhgW1JFU1QgLSBSZXRyaWVzTWF4ZWRdICR7SlNPTi5zdHJpbmdpZnkob3B0aW9ucyl9YClcbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgICBlcnJvcjogJ1RoZSByZXF1ZXN0IHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMucmV0cnlDb3VudCArPSAxXG5cbiAgICAgICAgY29uc3QgcmVzZXRBZnRlciA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSKVxuICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcblxuICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICAvLyBEaXNjb3JkIHNvbWV0aW1lcyBzZW5kcyBubyByZXNwb25zZSB3aXRoIG5vIGNvbnRlbnQuXG4gICAgICBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IHJlc3BvbnNlLnN0YXR1cyA9PT0gSHR0cFJlc3BvbnNlQ29kZS5Ob0NvbnRlbnQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS50ZXh0KCkgfSlcbiAgICB9LFxuXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdXJsLnNwbGl0KCcvJylcbiAgICAgIGNvbnN0IHNlY29uZExhc3RQYXJ0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl1cblxuICAgICAgaWYgKHNlY29uZExhc3RQYXJ0ID09PSAnY2hhbm5lbHMnIHx8IHNlY29uZExhc3RQYXJ0ID09PSAnZ3VpbGRzJykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgICB9XG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ3JlYWN0aW9ucycgfHwgcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gPT09ICdAbWUnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgICAgcGFydHMucHVzaCgncmVhY3Rpb25zJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMSlcbiAgICAgICAgcGFydHMucHVzaCgneCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJ0c1twYXJ0cy5sZW5ndGggLSAzXSA9PT0gJ3JlYWN0aW9ucycpIHtcbiAgICAgICAgcGFydHMuc3BsaWNlKC0yKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiBzZWNvbmRMYXN0UGFydCA9PT0gJ21lc3NhZ2VzJykge1xuICAgICAgICByZXR1cm4gYEQke3BhcnRzLmpvaW4oJy8nKX1gXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCB1cmwgPSByZXN0LnNpbXBsaWZ5VXJsKHJlcXVlc3Qucm91dGUsIHJlcXVlc3QubWV0aG9kKVxuXG4gICAgICBpZiAocmVxdWVzdC5ydW5UaHJvdWdoUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3QocmVxdWVzdClcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UgdGhlIHJlcXVlc3QgaGFzIGEgdG9rZW4sIHVzZSBpdFxuICAgICAgLy8gRWxzZSBmYWxsYmFjayB0byBwcmVmaXggd2l0aCB0aGUgYm90IHRva2VuXG4gICAgICBjb25zdCBxdWV1ZUlkZW50aWZpZXIgPSByZXF1ZXN0LnJlcXVlc3RCb2R5T3B0aW9ucz8uaGVhZGVycz8uYXV0aG9yaXphdGlvbiA/PyBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIGNvbnN0IHF1ZXVlID0gcmVzdC5xdWV1ZXMuZ2V0KGAke3F1ZXVlSWRlbnRpZmllcn0ke3VybH1gKVxuXG4gICAgICBpZiAocXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ1JFQVRFUyBBIE5FVyBRVUVVRVxuICAgICAgICBjb25zdCBidWNrZXRRdWV1ZSA9IG5ldyBRdWV1ZShyZXN0LCB7IHVybCwgZGVsZXRlUXVldWVEZWxheTogcmVzdC5kZWxldGVRdWV1ZURlbGF5LCBpZGVudGlmaWVyOiBxdWV1ZUlkZW50aWZpZXIgfSlcblxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YCwgYnVja2V0UXVldWUpXG5cbiAgICAgICAgLy8gQWRkIHJlcXVlc3QgdG8gcXVldWVcbiAgICAgICAgYnVja2V0UXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbWFrZVJlcXVlc3QobWV0aG9kLCByb3V0ZSwgb3B0aW9ucykge1xuICAgICAgLy8gVGhpcyBlcnJvciBuZWVkcyB0byBiZSBjcmVhdGVkIGhlcmUgYmVjYXVzZSBvZiBob3cgc3RhY2sgdHJhY2VzIGdldCBjYWxjdWxhdGVkXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpXG5cbiAgICAgIGlmIChyZXN0LmlzUHJveGllZCkge1xuICAgICAgICBpZiAocmVzdC5hdXRob3JpemF0aW9uKSB7XG4gICAgICAgICAgb3B0aW9ucyA/Pz0ge31cbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzW3Jlc3QuYXV0aG9yaXphdGlvbkhlYWRlcl0gPSByZXN0LmF1dGhvcml6YXRpb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoKGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7cm91dGV9YCwgcmVzdC5jcmVhdGVSZXF1ZXN0Qm9keShtZXRob2QsIG9wdGlvbnMpKVxuXG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgLy8gU29tZXRpbWUgdGhlIENvbnRlbnQtVHlwZSBtYXkgYmUgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIGZvciB0aGlzIHJlYXNvbiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBzdGFydCBvZiB0aGUgaGVhZGVyXG4gICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IChyZXN1bHQuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykgPyByZXN1bHQuanNvbigpIDogcmVzdWx0LnRleHQoKSkuY2F0Y2goKCkgPT4gbnVsbClcblxuICAgICAgICAgIGVycm9yLmNhdXNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJhc2VFcnJvclByb3RvdHlwZSksIHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyAhPT0gMjA0ID8gYXdhaXQgcmVzdWx0Lmpzb24oKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgICAgcm91dGUsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIHJlcXVlc3RCb2R5T3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgKHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/IEpTT04ucGFyc2UoZGF0YS5ib2R5ID8/ICd7fScpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAocmVhc29uKSA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JUZXh0OiBzdHJpbmdcblxuICAgICAgICAgICAgc3dpdGNoIChyZWFzb24uc3RhdHVzKSB7XG4gICAgICAgICAgICAgIGNhc2UgNDAwOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIG9wdGlvbnMgd2FzIGltcHJvcGVybHkgZm9ybWF0dGVkLCBvciB0aGUgc2VydmVyIGNvdWxkbid0IHVuZGVyc3RhbmQgaXQuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHdhcyBtaXNzaW5nIG9yIGludmFsaWQuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgQXV0aG9yaXphdGlvbiB0b2tlbiB5b3UgcGFzc2VkIGRpZCBub3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHRoZSByZXNvdXJjZS4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJUaGUgcmVzb3VyY2UgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBkb2Vzbid0IGV4aXN0LlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDU6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBIVFRQIG1ldGhvZCB1c2VkIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGxvY2F0aW9uIHNwZWNpZmllZC4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0Mjk6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gXCJZb3UncmUgYmVpbmcgcmF0ZWxpbWl0ZWQuXCJcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDUwMjpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlcmUgd2FzIG5vdCBhIGdhdGV3YXkgYXZhaWxhYmxlIHRvIHByb2Nlc3MgeW91ciBvcHRpb25zLiBXYWl0IGEgYml0IGFuZCByZXRyeS4nXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSByZWFzb24uc3RhdHVzVGV4dCA/PyAnVW5rbm93biBlcnJvcidcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBbJHtyZWFzb24uc3RhdHVzfV0gJHtlcnJvclRleHR9YFxuXG4gICAgICAgICAgICAvLyBJZiBkaXNjb3JkIHNlbnQgdXMgSlNPTiwgaXQgaXMgcHJvYmFibHkgZ29pbmcgdG8gYmUgYW4gZXJyb3IgbWVzc2FnZSBmcm9tIHdoaWNoIHdlIGNhbiBnZXQgYW5kIGFkZCBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvciB0byB0aGUgZXJyb3IgbWVzc2FnZSwgdGhlIGZ1bGwgYm9keSB3aWxsIGJlIGluIHRoZSBlcnJvci5jYXVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVmZXJlbmNlI2Vycm9yLW1lc3NhZ2VzXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJlYXNvbi5ib2R5ID09PSAnb2JqZWN0JyAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ2NvZGUnKSAmJiBoYXNQcm9wZXJ0eShyZWFzb24uYm9keSwgJ21lc3NhZ2UnKSkge1xuICAgICAgICAgICAgICBlcnJvci5tZXNzYWdlICs9IGBcXG5EaXNjb3JkIGVycm9yOiBbJHtyZWFzb24uYm9keS5jb2RlfV0gJHtyZWFzb24uYm9keS5tZXNzYWdlfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXJyb3IuY2F1c2UgPSBPYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUoYmFzZUVycm9yUHJvdG90eXBlKSwgcmVhc29uKVxuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBvcHRpb25zPy5ydW5UaHJvdWdoUXVldWUsXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BVVCcsIHVybCwgb3B0aW9ucykpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQ2hhbm5lbChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlQXBwbGljYXRpb25FbW9qaShib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaXMocmVzdC5hcHBsaWNhdGlvbklkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChib2R5LCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkU3RpY2tlcihndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBvcHRpb25zLmZpbGUuYmxvYiwgb3B0aW9ucy5maWxlLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMubmFtZSlcbiAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuZGVzY3JpcHRpb24pXG4gICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMudGFncylcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCB7IGJvZHk6IGZvcm0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCB7IGJvZHksIGZpbGVzOiBib2R5LmZpbGVzLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgYm9keSA9IHt9LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2UoYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZXMoKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlV2ViaG9vayhjaGFubmVsSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWwoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBcHBsaWNhdGlvbkVtb2ppKGlkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgeyB1bmF1dGhvcml6ZWQ6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNBbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVVc2VyUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHVzZXJJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIHtcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIHBlcm1pc3Npb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICBwZXJtaXNzaW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRCb3RQcm9maWxlKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF2YXRhciA9IG9wdGlvbnM/LmJvdEF2YXRhclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEF2YXRhclVSTCkgOiBvcHRpb25zPy5ib3RBdmF0YXJVUkxcbiAgICAgIGNvbnN0IGJhbm5lciA9IG9wdGlvbnM/LmJvdEJhbm5lclVSTCA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnM/LmJvdEJhbm5lclVSTCkgOiBvcHRpb25zPy5ib3RCYW5uZXJVUkxcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgICAgYXZhdGFyLFxuICAgICAgICAgIGJhbm5lcixcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIGJvZHkuaWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkVtb2ppKGlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamkocmVzdC5hcHBsaWNhdGlvbklkLCBpZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICBmaWxlczogYm9keS5maWxlcyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZChndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuZ3VpbGRzLm1mYShndWlsZElkKSwgeyBib2R5OiB7IGxldmVsOiBtZmFMZXZlbCB9LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHJlcXVlc3RUb1NwZWFrVGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCB0b3BpYywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyBib2R5OiB7IHRvcGljIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHdlYmhvb2tDaGFubmVsSWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuYXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uSW5mbyhib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8odG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5jdXJyZW50QXV0aG9yaXphdGlvbigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYm9keS5ncmFudFR5cGUgPT09ICdjbGllbnRfY3JlZGVudGlhbHMnKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLmJvZHkuc2NvcGUgPSBib2R5LnNjb3BlLmpvaW4oJyAnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPihyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5FeGNoYW5nZSgpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV2b2tlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuUmV2b2tlKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5OiB7IHJlY2lwaWVudElkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaShlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamlzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRFbW9qaVtdIH0+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFBhcnRpYWw8RGlzY29yZEd1aWxkPltdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldChyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEluY2lkZW50c0RhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uW10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb24+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFNvdW5kYm9hcmRTb3VuZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLnNlbmRTb3VuZChjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmxpc3REZWZhdWx0KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRTb3VuZGJvYXJkU291bmRbXSB9PihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUxvYmJ5KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5jcmVhdGUoKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TG9iYnkobG9iYnlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUxvYmJ5KGxvYmJ5SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUxvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkTWVtYmVyVG9Mb2JieShsb2JieUlkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkTG9iYnlNZW1iZXI+KHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVNZW1iZXJGcm9tTG9iYnkobG9iYnlJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubWVtYmVyKGxvYmJ5SWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sZWF2ZShsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpbmtDaGFubmVsVG9Mb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5saW5rKGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5saW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiRElTQ09SRF9BUElfVVJMIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJnZXRCb3RJZEZyb21Ub2tlbiIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwiYmFzZUVycm9yUHJvdG90eXBlIiwiaW5zcGVjdCIsImN1c3RvbSIsIl9kZXB0aCIsIl9pbnNwZWN0IiwiZGVwdGgiLCJJbmZpbml0eSIsImN1c3RvbUluc3BlY3QiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsImxvZ2dlciIsImlzUHJveGllZCIsInN0YXJ0c1dpdGgiLCJ1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50IiwibWF4UmV0cnlDb3VudCIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInZlcnNpb24iLCJyb3V0ZXMiLCJjcmVhdGVSb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiY2FsY3VsYXRlQml0cyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsImNhbWVsVG9TbmFrZUNhc2UiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsImRlYnVnIiwicmVzcG9uc2UiLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic2ltcGxpZnlVcmwiLCJqc29uIiwidGV4dCIsImFycmF5QnVmZmVyIiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJkZWxheSIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJyZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWVJZGVudGlmaWVyIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsIlF1ZXVlIiwicmVzdWx0IiwiY2F1c2UiLCJjcmVhdGUiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwiZXJyb3JUZXh0IiwibWVzc2FnZSIsImhhc1Byb3BlcnR5IiwiY29kZSIsImNhbWVsaXplIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJtZXNzYWdlSWQiLCJyZWFjdGlvbiIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsInRlbXBsYXRlcyIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRzIiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsInVybFRvQmFzZTY0IiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJvbmUiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJzdGlja2VySWQiLCJzdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImRlbGV0ZUludGVncmF0aW9uIiwiaW50ZWdyYXRpb25JZCIsImludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiaW52aXRlQ29kZSIsImludml0ZSIsImRlbGV0ZU1lc3NhZ2UiLCJkZWxldGVNZXNzYWdlcyIsIm1lc3NhZ2VJZHMiLCJidWxrIiwibWVzc2FnZXMiLCJzbGljZSIsImRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsIm9yaWdpbmFsIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImV2ZW50SWQiLCJldmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJzdGFnZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJ3ZWJob29rSWQiLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJ3ZWJob29rIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiZWRpdEF1dG9tb2RSdWxlIiwiZWRpdEJvdFByb2ZpbGUiLCJib3RBdmF0YXJVUkwiLCJiYW5uZXIiLCJib3RCYW5uZXJVUkwiLCJjdXJyZW50VXNlciIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0QXBwbGljYXRpb25FbW9qaSIsImVkaXRGb2xsb3d1cE1lc3NhZ2UiLCJlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkIiwiZWRpdEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZWRpdEd1aWxkTWZhTGV2ZWwiLCJtZmFMZXZlbCIsIm1mYSIsImxldmVsIiwiZWRpdEd1aWxkU3RpY2tlciIsImVkaXRHdWlsZFRlbXBsYXRlIiwiZWRpdE1lc3NhZ2UiLCJlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJ2b2ljZSIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwidG9JU09TdHJpbmciLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsImVkaXRXZWJob29rIiwiZWRpdFdlYmhvb2tNZXNzYWdlIiwiZWRpdFdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0V2VsY29tZVNjcmVlbiIsIndlbGNvbWUiLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJ3aWRnZXQiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsImZvbGxvdyIsIndlYmhvb2tDaGFubmVsSWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiYWN0aXZlIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImFjY2Vzc1Rva2VuIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJvYXV0aDIiLCJhcHBsaWNhdGlvbiIsImVkaXRBcHBsaWNhdGlvbkluZm8iLCJnZXRDdXJyZW50QXV0aGVudGljYXRpb25JbmZvIiwiY3VycmVudEF1dGhvcml6YXRpb24iLCJleGNoYW5nZVRva2VuIiwiY2xpZW50SWQiLCJjbGllbnRTZWNyZXQiLCJiYXNpY0NyZWRlbnRpYWxzIiwiQnVmZmVyIiwiZnJvbSIsImdyYW50VHlwZSIsInNjb3BlIiwidG9rZW5FeGNoYW5nZSIsInJldm9rZVRva2VuIiwidG9rZW5SZXZva2UiLCJnZXRBdWRpdExvZyIsImF1ZGl0bG9ncyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwicmVnaW9ucyIsImdldEJhbiIsIm1lbWJlcnMiLCJiYW4iLCJnZXRCYW5zIiwiYmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwiZG0iLCJyZWNpcGllbnRJZCIsImdldEdyb3VwRG1DaGFubmVsIiwiZ2V0RW1vamkiLCJlbW9qaUlkIiwiZ2V0QXBwbGljYXRpb25FbW9qaSIsImdldEVtb2ppcyIsImdldEFwcGxpY2F0aW9uRW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdhdGV3YXlCb3QiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGQiLCJjb3VudHMiLCJnZXRHdWlsZHMiLCJtYWtlUmVxdWVzdE9wdGlvbnMiLCJ1c2VyR3VpbGRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJwcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXRTdGlja2VyUGFjayIsInN0aWNrZXJQYWNrSWQiLCJzdGlja2VyUGFjayIsImdldFN0aWNrZXJQYWNrcyIsInN0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldENoYW5uZWxQaW5zIiwibWVzc2FnZVBpbnMiLCJnZXRQaW5uZWRNZXNzYWdlcyIsInBpbnMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwicHJpdmF0ZSIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJqb2luZWQiLCJnZXRQcnVuZUNvdW50IiwicHJ1bmUiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJwdWJsaWMiLCJnZXRSb2xlcyIsImdldFJvbGUiLCJnZXRTY2hlZHVsZWRFdmVudCIsIndpdGhVc2VyQ291bnQiLCJnZXRTY2hlZHVsZWRFdmVudHMiLCJnZXRTY2hlZHVsZWRFdmVudFVzZXJzIiwidXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRPd25Wb2ljZVN0YXRlIiwiZ2V0VXNlclZvaWNlU3RhdGUiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFVzZXIiLCJnZXRUaHJlYWRNZW1iZXJzIiwiZ2V0UmVhY3Rpb25zIiwiZ2V0Q3VycmVudFVzZXIiLCJnZXRVc2VyQ29ubmVjdGlvbnMiLCJjb25uZWN0aW9ucyIsImdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uIiwicm9sZUNvbm5lY3Rpb25zIiwiZ2V0VmFuaXR5VXJsIiwidmFuaXR5IiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJ3aWRnZXRKc29uIiwiZ2V0V2lkZ2V0U2V0dGluZ3MiLCJqb2luVGhyZWFkIiwibWUiLCJsZWF2ZUd1aWxkIiwibGVhdmUiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwiY3Jvc3Nwb3N0IiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInJlbW92ZURtUmVjaXBpZW50Iiwic2VuZEZvbGxvd3VwTWVzc2FnZSIsInNlbmRJbnRlcmFjdGlvblJlc3BvbnNlIiwiaW50ZXJhY3Rpb25JZCIsInBhcmFtcyIsImNhbGxiYWNrIiwic2VuZE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSIsImdldFBvbGxBbnN3ZXJWb3RlcnMiLCJhbnN3ZXJJZCIsInBvbGxzIiwidm90ZXMiLCJlbmRQb2xsIiwiZXhwaXJlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJidWxrQmFuTWVtYmVycyIsImJ1bGtCYW4iLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldEN1cnJlbnRNZW1iZXIiLCJjdXJyZW50TWVtYmVyIiwiZ2V0TWVtYmVycyIsImdldEFwcGxpY2F0aW9uQWN0aXZpdHlJbnN0YW5jZSIsImluc3RhbmNlSWQiLCJhcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsIm1lc3NhZ2VQaW4iLCJwcnVuZU1lbWJlcnMiLCJzZWFyY2hNZW1iZXJzIiwicXVlcnkiLCJzZWFyY2giLCJnZXRHdWlsZE9uYm9hcmRpbmciLCJvbmJvYXJkaW5nIiwiZWRpdEd1aWxkT25ib2FyZGluZyIsIm1vZGlmeUd1aWxkSW5jaWRlbnRBY3Rpb25zIiwiaW5jaWRlbnRBY3Rpb25zIiwidW5iYW5NZW1iZXIiLCJ1bnBpbk1lc3NhZ2UiLCJ0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yIiwidHlwaW5nIiwidXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsInVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyIsImVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsImFkZEd1aWxkTWVtYmVyIiwiY3JlYXRlVGVzdEVudGl0bGVtZW50IiwibW9uZXRpemF0aW9uIiwiZW50aXRsZW1lbnRzIiwibGlzdEVudGl0bGVtZW50cyIsImdldEVudGl0bGVtZW50IiwiZW50aXRsZW1lbnRJZCIsImVudGl0bGVtZW50IiwiZGVsZXRlVGVzdEVudGl0bGVtZW50IiwiY29uc3VtZUVudGl0bGVtZW50IiwibGlzdFNrdXMiLCJza3VzIiwibGlzdFN1YnNjcmlwdGlvbnMiLCJza3VJZCIsInN1YnNjcmlwdGlvbnMiLCJnZXRTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb25JZCIsInN1YnNjcmlwdGlvbiIsInNlbmRTb3VuZGJvYXJkU291bmQiLCJzb3VuZGJvYXJkIiwic2VuZFNvdW5kIiwibGlzdERlZmF1bHRTb3VuZGJvYXJkU291bmRzIiwibGlzdERlZmF1bHQiLCJsaXN0R3VpbGRTb3VuZGJvYXJkU291bmRzIiwiZ3VpbGRTb3VuZHMiLCJnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZCIsInNvdW5kSWQiLCJndWlsZFNvdW5kIiwiY3JlYXRlR3VpbGRTb3VuZGJvYXJkU291bmQiLCJtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibGlzdEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhIiwidXBkYXRlQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMiLCJjcmVhdGVMb2JieSIsImxvYmJ5IiwiZ2V0TG9iYnkiLCJsb2JieUlkIiwibW9kaWZ5TG9iYnkiLCJkZWxldGVMb2JieSIsImFkZE1lbWJlclRvTG9iYnkiLCJyZW1vdmVNZW1iZXJGcm9tTG9iYnkiLCJsZWF2ZUxvYmJ5IiwibGlua0NoYW5uZWxUb0xvYmJ5IiwibGluayIsInVubGlua0NoYW5uZWxUb0xvYmJ5IiwicHJlZmVyU25ha2VDYXNlIiwiZW5hYmxlZCIsImNhbWVsaXplciIsIngiLCJIdHRwUmVzcG9uc2VDb2RlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQWlGYUE7ZUFBQUE7O1FBRkFDO2VBQUFBOztRQURBQztlQUFBQTs7UUFPQUM7ZUFBQUE7O1FBREFDO2VBQUFBOztRQUVBQztlQUFBQTs7UUFKQUM7ZUFBQUE7O1FBQ0FDO2VBQUFBOztRQUlBQztlQUFBQTs7UUFFR0M7ZUFBQUE7Ozs0QkF6Rk87MEJBQ3NCO3VCQXVFdEM7K0JBQ29DO3VCQUNyQjt3QkFDTztBQUd0QixNQUFNUCxzQkFBc0I7QUFDNUIsTUFBTUQsa0JBQWtCO0FBRXhCLE1BQU1ELDBCQUEwQjtBQUNoQyxNQUFNTSw4QkFBOEI7QUFDcEMsTUFBTUMsZ0NBQWdDO0FBQ3RDLE1BQU1ILDJCQUEyQjtBQUNqQyxNQUFNRCwyQkFBMkI7QUFDakMsTUFBTUUsMEJBQTBCO0FBQ2hDLE1BQU1HLDBCQUEwQjtBQUVoQyxTQUFTQyxrQkFBa0JDLE9BQWlDO0lBQ2pFLE1BQU1DLGdCQUFnQkQsUUFBUUMsYUFBYSxHQUFHQyxPQUFPRixRQUFRQyxhQUFhLElBQUlFLElBQUFBLHdCQUFpQixFQUFDSCxRQUFRSSxLQUFLO0lBRTdHLE1BQU1DLFVBQVVMLFFBQVFNLEtBQUssRUFBRUQsV0FBV2Q7SUFDMUMsaUdBQWlHO0lBQ2pHLE1BQU1nQixxQkFBcUI7UUFDekIsQ0FBQ0MsaUJBQU8sQ0FBQ0MsTUFBTSxDQUFDLEVBQUNDLE1BQWMsRUFBRVYsT0FBdUIsRUFBRVcsUUFBd0I7WUFDaEYsT0FBT0EsU0FBUyxJQUFJLEVBQUU7Z0JBQ3BCLEdBQUdYLE9BQU87Z0JBQ1ZZLE9BQU9DO2dCQUNQLHNJQUFzSTtnQkFDdElDLGVBQWU7WUFDakI7UUFD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
1619
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gJ25vZGU6YnVmZmVyJ1xuaW1wb3J0IHsgdHlwZSBJbnNwZWN0T3B0aW9ucywgaW5zcGVjdCB9IGZyb20gJ25vZGU6dXRpbCdcbmltcG9ydCB0eXBlIHtcbiAgQmlnU3RyaW5nLFxuICBDYW1lbGl6ZSxcbiAgRGlzY29yZEFjY2Vzc1Rva2VuUmVzcG9uc2UsXG4gIERpc2NvcmRBY3Rpdml0eUluc3RhbmNlLFxuICBEaXNjb3JkQXBwbGljYXRpb24sXG4gIERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uLFxuICBEaXNjb3JkQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRCdWxrQmFuLFxuICBEaXNjb3JkQ2hhbm5lbCxcbiAgRGlzY29yZENvbm5lY3Rpb24sXG4gIERpc2NvcmRDdXJyZW50QXV0aG9yaXphdGlvbixcbiAgRGlzY29yZEVtb2ppLFxuICBEaXNjb3JkRW50aXRsZW1lbnQsXG4gIERpc2NvcmRGb2xsb3dlZENoYW5uZWwsXG4gIERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyxcbiAgRGlzY29yZEd1aWxkT25ib2FyZGluZyxcbiAgRGlzY29yZEd1aWxkUHJldmlldyxcbiAgRGlzY29yZEd1aWxkV2lkZ2V0LFxuICBEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncyxcbiAgRGlzY29yZEluY2lkZW50c0RhdGEsXG4gIERpc2NvcmRJbnRlZ3JhdGlvbixcbiAgRGlzY29yZEludGVyYWN0aW9uQ2FsbGJhY2tSZXNwb25zZSxcbiAgRGlzY29yZEludml0ZSxcbiAgRGlzY29yZEludml0ZU1ldGFkYXRhLFxuICBEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkTG9iYnksXG4gIERpc2NvcmRMb2JieU1lbWJlcixcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU2t1LFxuICBEaXNjb3JkU291bmRib2FyZFNvdW5kLFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFN1YnNjcmlwdGlvbixcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkVm9pY2VTdGF0ZSxcbiAgRGlzY29yZFdlYmhvb2ssXG4gIERpc2NvcmRXZWxjb21lU2NyZWVuLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIERJU0NPUkRFTk9fVkVSU0lPTixcbiAgY2FsY3VsYXRlQml0cyxcbiAgY2FtZWxUb1NuYWtlQ2FzZSxcbiAgY2FtZWxpemUsXG4gIGRlbGF5LFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaGFzUHJvcGVydHksXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCB9IGZyb20gJy4vaW52YWxpZEJ1Y2tldC5qcydcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSAnLi9xdWV1ZS5qcydcbmltcG9ydCB7IGNyZWF0ZVJvdXRlcyB9IGZyb20gJy4vcm91dGVzLmpzJ1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucywgTWFrZVJlcXVlc3RPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1ZFUlNJT04gPSAxMFxuZXhwb3J0IGNvbnN0IERJU0NPUkRfQVBJX1VSTCA9ICdodHRwczovL2Rpc2NvcmQuY29tL2FwaSdcblxuZXhwb3J0IGNvbnN0IEFVRElUX0xPR19SRUFTT05fSEVBREVSID0gJ3gtYXVkaXQtbG9nLXJlYXNvbidcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1JFTUFJTklOR19IRUFERVIgPSAneC1yYXRlbGltaXQtcmVtYWluaW5nJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfUkVTRVRfQUZURVJfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJ1xuZXhwb3J0IGNvbnN0IFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1nbG9iYWwnXG5leHBvcnQgY29uc3QgUkFURV9MSU1JVF9CVUNLRVRfSEVBREVSID0gJ3gtcmF0ZWxpbWl0LWJ1Y2tldCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX0xJTUlUX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1saW1pdCdcbmV4cG9ydCBjb25zdCBSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiA9ICd4LXJhdGVsaW1pdC1zY29wZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgY29uc3QgYXBwbGljYXRpb25JZCA9IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbilcblxuICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5wcm94eT8uYmFzZVVybCA/PyBESVNDT1JEX0FQSV9VUkxcbiAgLy8gRGlzY29yZCBlcnJvciBjYW4gZ2V0IG5lc3RlZCBhIGxvdCwgc28gd2UgdXNlIGEgY3VzdG9tIGluc3BlY3QgdG8gY2hhbmdlIHRoZSBkZXB0aCB0byBJbmZpbml0eVxuICBjb25zdCBiYXNlRXJyb3JQcm90b3R5cGUgPSB7XG4gICAgW2luc3BlY3QuY3VzdG9tXShfZGVwdGg6IG51bWJlciwgb3B0aW9uczogSW5zcGVjdE9wdGlvbnMsIF9pbnNwZWN0OiB0eXBlb2YgaW5zcGVjdCkge1xuICAgICAgcmV0dXJuIF9pbnNwZWN0KHRoaXMsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZGVwdGg6IEluZmluaXR5LFxuICAgICAgICAvLyBTaW5jZSB3ZSBjYWxsIGluc3BlY3Qgb24gb3Vyc2VsZiwgd2UgbmVlZCB0byBkaXNhYmxlIHRoZSBjYWxscyB0byB0aGUgaW5zcGVjdC5jdXN0b20gc3ltYm9sIG9yIGVsc2UgaXQgd2lsbCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wLlxuICAgICAgICBjdXN0b21JbnNwZWN0OiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfSxcbiAgfVxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIGFwcGxpY2F0aW9uSWQsXG4gICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5wcm94eT8uYXV0aG9yaXphdGlvbixcbiAgICBhdXRob3JpemF0aW9uSGVhZGVyOiBvcHRpb25zLnByb3h5Py5hdXRob3JpemF0aW9uSGVhZGVyID8/ICdhdXRob3JpemF0aW9uJyxcbiAgICBiYXNlVXJsLFxuICAgIGRlbGV0ZVF1ZXVlRGVsYXk6IDYwMDAwLFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHsgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciB9KSxcbiAgICBpc1Byb3hpZWQ6ICFiYXNlVXJsLnN0YXJ0c1dpdGgoRElTQ09SRF9BUElfVVJMKSxcbiAgICB1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50OiBvcHRpb25zLnByb3h5Py51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50LFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgdG9rZW46IG9wdGlvbnMudG9rZW4sXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IERJU0NPUkRfQVBJX1ZFUlNJT04sXG4gICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlciA/PyBsb2dnZXIsXG5cbiAgICByb3V0ZXM6IGNyZWF0ZVJvdXRlcygpLFxuXG4gICAgY3JlYXRlQmFzZUhlYWRlcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHtESVNDT1JERU5PX1ZFUlNJT059KWAsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwsIGlkZW50aWZpZXIpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApXG5cbiAgICAgIGNvbnN0IGdsb2JhbCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQoJ2dsb2JhbCcpXG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGlmIChyYXRlbGltaXRlZCAmJiBub3cgPCByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgaWYgKGdsb2JhbCAmJiBub3cgPCBnbG9iYWwucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlVG9rZW5RdWV1ZXMob2xkVG9rZW4sIG5ld1Rva2VuKSB7XG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKCFyZXN0LnVwZGF0ZUJlYXJlclRva2VuRW5kcG9pbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIlRoZSAncHJveHkudXBkYXRlQmVhcmVyVG9rZW5FbmRwb2ludCcgb3B0aW9uIG5lZWRzIHRvIGJlIHNldCB3aGVuIHVzaW5nIGEgcmVzdCBwcm94eSBhbmQgbmVlZGVkIHRvIGNhbGwgJ3VwZGF0ZVRva2VuUXVldWVzJ1wiLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG5cbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9LyR7cmVzdC51cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50fWAsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBvbGRUb2tlbixcbiAgICAgICAgICAgIG5ld1Rva2VuLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgIH0pXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld0lkZW50aWZpZXIgPSBgQmVhcmVyICR7bmV3VG9rZW59YFxuXG4gICAgICAvLyBVcGRhdGUgYWxsIHRoZSBxdWV1ZXNcbiAgICAgIGZvciAoY29uc3QgW2tleSwgcXVldWVdIG9mIHJlc3QucXVldWVzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoIWtleS5zdGFydHNXaXRoKGBCZWFyZXIgJHtvbGRUb2tlbn1gKSkgY29udGludWVcblxuICAgICAgICByZXN0LnF1ZXVlcy5kZWxldGUoa2V5KVxuICAgICAgICBxdWV1ZS5pZGVudGlmaWVyID0gbmV3SWRlbnRpZmllclxuXG4gICAgICAgIGNvbnN0IG5ld0tleSA9IGAke25ld0lkZW50aWZpZXJ9JHtxdWV1ZS51cmx9YFxuICAgICAgICBjb25zdCBuZXdRdWV1ZSA9IHJlc3QucXVldWVzLmdldChuZXdLZXkpXG5cbiAgICAgICAgLy8gTWVyZ2UgdGhlIHF1ZXVlc1xuICAgICAgICBpZiAobmV3UXVldWUpIHtcbiAgICAgICAgICBuZXdRdWV1ZS53YWl0aW5nLnVuc2hpZnQoLi4ucXVldWUud2FpdGluZylcbiAgICAgICAgICBuZXdRdWV1ZS5wZW5kaW5nLnVuc2hpZnQoLi4ucXVldWUucGVuZGluZylcblxuICAgICAgICAgIHF1ZXVlLndhaXRpbmcgPSBbXVxuICAgICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBbXVxuXG4gICAgICAgICAgcXVldWUuY2xlYW51cCgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdC5xdWV1ZXMuc2V0KG5ld0tleSwgcXVldWUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCByYXRlbGltaXRQYXRoXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoYEJlYXJlciAke29sZFRva2VufWApKSBjb250aW51ZVxuXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7bmV3SWRlbnRpZmllcn0ke3JhdGVsaW1pdFBhdGgudXJsfWAsIHJhdGVsaW1pdFBhdGgpXG5cbiAgICAgICAgaWYgKHJhdGVsaW1pdFBhdGguYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGAke25ld0lkZW50aWZpZXJ9JHtyYXRlbGltaXRQYXRoLmJ1Y2tldElkfWAsIHJhdGVsaW1pdFBhdGgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2hhbmdlVG9EaXNjb3JkRm9ybWF0KG9iajogYW55KTogYW55IHtcbiAgICAgIGlmIChvYmogPT09IG51bGwpIHJldHVybiBudWxsXG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICAgICAgcmV0dXJuIG9iai5tYXAoKGl0ZW0pID0+IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KGl0ZW0pKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3T2JqOiBhbnkgPSB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iaikpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldXG5cbiAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIGFscmVhZHkgaW4gc25ha2VfY2FzZSB3ZSBjYW4gYXNzdW1lIGl0IGlzIGFscmVhZHkgaW4gdGhlIGRpc2NvcmQgZm9ybWF0LlxuICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ18nKSkge1xuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB2YWx1ZVxuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTb21lIGZhbHN5IHZhbHVlcyBzaG91bGQgYmUgYWxsb3dlZCBsaWtlIG51bGwgb3IgMFxuICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICBjYXNlICdwZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgIGNhc2UgJ2FsbG93JzpcbiAgICAgICAgICAgICAgY2FzZSAnZGVueSc6XG4gICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiBjYWxjdWxhdGVCaXRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNhc2UgJ2RlZmF1bHRNZW1iZXJQZXJtaXNzaW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLmRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogY2FsY3VsYXRlQml0cyh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICBjYXNlICduYW1lTG9jYWxpemF0aW9ucyc6XG4gICAgICAgICAgICAgICAgbmV3T2JqLm5hbWVfbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgY2FzZSAnZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25zJzpcbiAgICAgICAgICAgICAgICBuZXdPYmouZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyA9IHZhbHVlXG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPYmpbY2FtZWxUb1NuYWtlQ2FzZShrZXkpXSA9IHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHZhbHVlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld09ialxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHJldHVybiBvYmoudG9TdHJpbmcoKVxuXG4gICAgICByZXR1cm4gb2JqXG4gICAgfSxcblxuICAgIGNyZWF0ZVJlcXVlc3RCb2R5KG1ldGhvZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMuY3JlYXRlQmFzZUhlYWRlcnMoKVxuXG4gICAgICBpZiAob3B0aW9ucz8udW5hdXRob3JpemVkICE9PSB0cnVlKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIElGIEEgUkVBU09OIElTIFBST1ZJREVEIEVOQ09ERSBJVCBJTiBIRUFERVJTXG4gICAgICBpZiAob3B0aW9ucz8ucmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVhZGVyc1tBVURJVF9MT0dfUkVBU09OX0hFQURFUl0gPSBlbmNvZGVVUklDb21wb25lbnQob3B0aW9ucz8ucmVhc29uKVxuICAgICAgfVxuXG4gICAgICBsZXQgYm9keTogc3RyaW5nIHwgRm9ybURhdGEgfCB1bmRlZmluZWRcblxuICAgICAgLy8gVE9ETzogY2hlY2sgaWYgd2UgbmVlZCB0byBhZGQgc3BlY2lmaWMgY2hlY2sgZm9yIEdFVCBtZXRob2RcbiAgICAgIC8vIFNpbmNlIEdFVCBkb2VzIG5vdCBhbGxvdyBib2RpZXNcblxuICAgICAgLy8gSGF2ZSB0byBjaGVjayBmb3IgYXR0YWNobWVudHMgZmlyc3QsIHNpbmNlIGJvZHkgdGhlbiBoYXMgdG8gYmUgc2VuZCBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICAgICBpZiAob3B0aW9ucz8uZmlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmZpbGVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGVzWyR7aX1dYCwgb3B0aW9ucy5maWxlc1tpXS5ibG9iLCBvcHRpb25zLmZpbGVzW2ldLm5hbWUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYXZlIHRvIHVzZSBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQgb3IgZWxzZSBKU09OLnN0cmluZ2lmeSBtYXkgdGhyb3cgYW4gZXJyb3IgZm9yIHRoZSBwcmVzZW5jZSBvZiBCaWdJbnQocykgaW4gdGhlIGpzb25cbiAgICAgICAgZm9ybS5hcHBlbmQoJ3BheWxvYWRfanNvbicsIEpTT04uc3RyaW5naWZ5KHJlc3QuY2hhbmdlVG9EaXNjb3JkRm9ybWF0KHsgLi4ub3B0aW9ucy5ib2R5LCBmaWxlczogdW5kZWZpbmVkIH0pKSlcblxuICAgICAgICAvLyBObyBuZWVkIHRvIHNldCB0aGUgYGNvbnRlbnQtdHlwZWAgaGVhZGVyIHNpbmNlIGBmZXRjaGAgZG9lcyB0aGF0IGF1dG9tYXRpY2FsbHkgZm9yIHVzIHdoZW4gd2UgdXNlIGEgYEZvcm1EYXRhYCBvYmplY3QuXG4gICAgICAgIGJvZHkgPSBmb3JtXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmJvZHkgJiYgb3B0aW9ucy5oZWFkZXJzICYmIG9wdGlvbnMuaGVhZGVyc1snY29udGVudC10eXBlJ10gPT09ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKSB7XG4gICAgICAgIC8vIE9BdXRoMiBib2R5IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IGZvcm1Cb2R5OiBzdHJpbmdbXSA9IFtdXG5cbiAgICAgICAgY29uc3QgZGlzY29yZEJvZHkgPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpXG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIGRpc2NvcmRCb2R5KSB7XG4gICAgICAgICAgZm9ybUJvZHkucHVzaChgJHtlbmNvZGVVUklDb21wb25lbnQocHJvcCl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpc2NvcmRCb2R5W3Byb3BdKX1gKVxuICAgICAgICB9XG5cbiAgICAgICAgYm9keSA9IGZvcm1Cb2R5LmpvaW4oJyYnKVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5ib2R5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgYm9keSA9IG9wdGlvbnMuYm9keVxuICAgICAgICAgIC8vIE5vIG5lZWQgdG8gc2V0IHRoZSBgY29udGVudC10eXBlYCBoZWFkZXIgc2luY2UgYGZldGNoYCBkb2VzIHRoYXQgYXV0b21hdGljYWxseSBmb3IgdXMgd2hlbiB3ZSB1c2UgYSBgRm9ybURhdGFgIG9iamVjdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSlcbiAgICAgICAgICBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IGBhcHBsaWNhdGlvbi9qc29uYFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihoZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKSB7XG4gICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpXG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5lbnRyaWVzKCkpIHtcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBmb3Igb2YgbG9vcC4gJHtcbiAgICAgICAgLy8gICB2YWx1ZS5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgICAvLyB9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgLy8gSWYgdGhlIHRpbWUgaGFzIG5vdCByZWFjaGVkIGNhbmNlbFxuICAgICAgICBpZiAodmFsdWUucmVzZXRUaW1lc3RhbXAgPiBub3cpIGNvbnRpbnVlXG5cbiAgICAgICAgLy8gUmF0ZSBsaW1pdCBpcyBvdmVyLCBkZWxldGUgdGhlIHJhdGUgbGltaXRlclxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZGVsZXRlKGtleSlcbiAgICAgICAgLy8gSWYgaXQgd2FzIGdsb2JhbCwgYWxzbyBtYXJrIHRoZSBnbG9iYWwgdmFsdWUgYXMgZmFsc2VcbiAgICAgICAgaWYgKGtleSA9PT0gJ2dsb2JhbCcpIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIEFMTCBQQVRIUyBBUkUgQ0xFQVJFRCBDQU4gQ0FOQ0VMIE9VVCFcbiAgICAgIGlmIChyZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2l6ZSA9PT0gMCkge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSB0cnVlXG4gICAgICAgIC8vIFJFQ0hFQ0sgSU4gMSBTRUNPTkRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLy8gcmVzdC5kZWJ1ZygnW1JFU1QgLSBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRoc10gUnVubmluZyBzZXRUaW1lb3V0LicpXG4gICAgICAgICAgcmVzdC5wcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpXG4gICAgICAgIH0sIDEwMDApXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKiBQcm9jZXNzZXMgdGhlIHJhdGUgbGltaXQgaGVhZGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBpdCBuZWVkcyB0byBiZSByYXRlIGxpbWl0ZWQgYW5kIHJldHVybnMgdGhlIGJ1Y2tldCBpZCBpZiBhdmFpbGFibGUgKi9cbiAgICBwcm9jZXNzSGVhZGVycyh1cmwsIGhlYWRlcnMsIGlkZW50aWZpZXIpIHtcbiAgICAgIGxldCByYXRlTGltaXRlZCA9IGZhbHNlXG5cbiAgICAgIC8vIEdFVCBBTEwgTkVDRVNTQVJZIEhFQURFUlNcbiAgICAgIGNvbnN0IHJlbWFpbmluZyA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfUkVNQUlOSU5HX0hFQURFUilcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KFJBVEVfTElNSVRfR0xPQkFMX0hFQURFUilcbiAgICAgIC8vIHVuZGVmaW5lZCBvdmVycmlkZSBudWxsIG5lZWRlZCBmb3IgdHlwaW5nc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0JVQ0tFVF9IRUFERVIpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldChSQVRFX0xJTUlUX0xJTUlUX0hFQURFUilcblxuICAgICAgLy8gSWYgd2UgZGlkbid0IHJlY2VpdmVkIHRoZSBpZGVudGlmaWVyLCBmYWxsYmFjayB0byB0aGUgYm90IHRva2VuXG4gICAgICBpZGVudGlmaWVyID8/PSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIHJlc3QucXVldWVzLmdldChgJHtpZGVudGlmaWVyfSR7dXJsfWApPy5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KHtcbiAgICAgICAgcmVtYWluaW5nOiByZW1haW5pbmcgPyBOdW1iZXIocmVtYWluaW5nKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgaW50ZXJ2YWw6IHJldHJ5QWZ0ZXIgPyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IGxpbWl0ID8gTnVtYmVyKGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pXG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBSQVRFIExJTUlULCBNQVJLIElUIEFTIFJBVEUgTElNSVRFRFxuICAgICAgaWYgKHJlbWFpbmluZyA9PT0gJzAnKSB7XG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIFVSTCBBUyBMSU1JVEVELCBJTVBPUlRBTlQgRk9SIE5FVyBSRVFVRVNUUyBCWSBVU0VSIFdJVEhPVVQgQlVDS0VUXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYCR7aWRlbnRpZmllcn0ke3VybH1gLCB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTQVZFIFRIRSBCVUNLRVQgQVMgTElNSVRFRCBTSU5DRSBESUZGRVJFTlQgVVJMUyBNQVkgU0hBUkUgQSBCVUNLRVRcbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChgJHtpZGVudGlmaWVyfSR7YnVja2V0SWR9YCwge1xuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgR0xPQkFMIExJTUlULCBNQVJLIElUIFJBVEUgTElNSVRFRCBHTE9CQUxMWVxuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBjb25zdCByZXRyeUFmdGVyID0gTnVtYmVyKGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpKSAqIDEwMDBcbiAgICAgICAgY29uc3QgZ2xvYmFsUmVzZXQgPSBEYXRlLm5vdygpICsgcmV0cnlBZnRlclxuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCA9IEdsb2JhbGx5IFJhdGUgTGltaXRlZF0gVVJMOiAke3VybH0gfCBHbG9iYWwgUmVzdDogJHtnbG9iYWxSZXNldH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSB0cnVlXG4gICAgICAgIHJhdGVMaW1pdGVkID0gdHJ1ZVxuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IGZhbHNlXG4gICAgICAgIH0sIHJldHJ5QWZ0ZXIpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoaWRlbnRpZmllciwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnJvdXRlfWBcbiAgICAgIGNvbnN0IHBheWxvYWQgPSByZXN0LmNyZWF0ZVJlcXVlc3RCb2R5KG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnJlcXVlc3RCb2R5T3B0aW9ucylcblxuICAgICAgY29uc3QgbG9nZ2luZ0hlYWRlcnMgPSB7IC4uLnBheWxvYWQuaGVhZGVycyB9XG5cbiAgICAgIGlmIChwYXlsb2FkLmhlYWRlcnMuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBjb25zdCBhdXRob3JpemF0aW9uU2NoZW1lID0gcGF5bG9hZC5oZWFkZXJzLmF1dGhvcml6YXRpb24/LnNwbGl0KCcgJylbMF1cbiAgICAgICAgbG9nZ2luZ0hlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGAke2F1dGhvcml6YXRpb25TY2hlbWV9IHRva2VuaGVyZWBcbiAgICAgIH1cblxuICAgICAgcmVzdC5sb2dnZXIuZGVidWcoYHNlbmRpbmcgcmVxdWVzdCB0byAke3VybH1gLCAnd2l0aCBwYXlsb2FkOicsIHsgLi4ucGF5bG9hZCwgaGVhZGVyczogbG9nZ2luZ0hlYWRlcnMgfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVzdC5sb2dnZXIuZXJyb3IoZXJyb3IpXG4gICAgICAgIC8vIE1hcmsgcmVxdWVzdCBhbmQgY29tcGxldGVkXG4gICAgICAgIHJlc3QuaW52YWxpZEJ1Y2tldC5oYW5kbGVDb21wbGV0ZWRSZXF1ZXN0KDk5OSwgZmFsc2UpXG4gICAgICAgIG9wdGlvbnMucmVqZWN0KHtcbiAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgc3RhdHVzOiA5OTksXG4gICAgICAgICAgZXJyb3I6ICdQb3NzaWJsZSBuZXR3b3JrIG9yIHJlcXVlc3Qgc2hhcGUgaXNzdWUgb2NjdXJyZWQuIElmIHRoaXMgaXMgcmFyZSwgaXRzIGEgbmV0d29yayBnbGl0Y2guIElmIGl0IG9jY3VycyBhIGxvdCBzb21ldGhpbmcgaXMgd3JvbmcuJyxcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG4gICAgICByZXN0LmxvZ2dlci5kZWJ1ZyhgcmVxdWVzdCBmZXRjaGVkIGZyb20gJHt1cmx9IHdpdGggc3RhdHVzICR7cmVzcG9uc2Uuc3RhdHVzfSAmICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKVxuXG4gICAgICAvLyBNYXJrIHJlcXVlc3QgYW5kIGNvbXBsZXRlZFxuICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1NDT1BFX0hFQURFUikgPT09ICdzaGFyZWQnKVxuXG4gICAgICAvLyBTZXQgdGhlIGJ1Y2tldCBpZCBpZiBpdCB3YXMgYXZhaWxhYmxlIG9uIHRoZSBoZWFkZXJzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IHJlc3QucHJvY2Vzc0hlYWRlcnMocmVzdC5zaW1wbGlmeVVybChvcHRpb25zLnJvdXRlLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMsIHBheWxvYWQuaGVhZGVycy5hdXRob3JpemF0aW9uKVxuXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgSHR0cFJlc3BvbnNlQ29kZS5TdWNjZXNzIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSBIdHRwUmVzcG9uc2VDb2RlLkVycm9yKSB7XG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSBIdHRwUmVzcG9uc2VDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykgPT09ICdhcHBsaWNhdGlvbi9qc29uJyA/ICgoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBvYmplY3QpIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpXG5cbiAgICAgICAgICBvcHRpb25zLnJlamVjdCh7IG9rOiBmYWxzZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsIGJvZHkgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnN1bWUgdGhlIHJlc3BvbnNlIGJvZHkgdG8gYXZvaWQgbGVha2luZyBtZW1vcnlcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKVxuXG4gICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZWxpbWl0ZWQuYClcbiAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50ID49IHJlc3QubWF4UmV0cnlDb3VudCkge1xuICAgICAgICAgIHJlc3QubG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBleGNlZWRlZCB0aGUgbWF4aW11bSBhbGxvd2VkIHJldHJpZXMuYCwgJ3dpdGggcGF5bG9hZDonLCBwYXlsb2FkKVxuICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgb2s6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgZXJyb3I6ICdUaGUgcmVxdWVzdCB3YXMgcmF0ZSBsaW1pdGVkIGFuZCBpdCBtYXhlZCBvdXQgdGhlIHJldHJpZXMgbGltaXQuJyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBvcHRpb25zLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldChSQVRFX0xJTUlUX1JFU0VUX0FGVEVSX0hFQURFUilcbiAgICAgICAgaWYgKHJlc2V0QWZ0ZXIpIGF3YWl0IGRlbGF5KE51bWJlcihyZXNldEFmdGVyKSAqIDEwMDApXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IG9wdGlvbnMucmV0cnlSZXF1ZXN0Py4ob3B0aW9ucylcbiAgICAgIH1cblxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCBubyBjb250ZW50LlxuICAgICAgb3B0aW9ucy5yZXNvbHZlKHsgb2s6IHRydWUsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiByZXNwb25zZS5zdGF0dXMgPT09IEh0dHBSZXNwb25zZUNvZGUuTm9Db250ZW50ID8gdW5kZWZpbmVkIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpIH0pXG4gICAgfSxcblxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBjb25zdCBwYXJ0cyA9IHVybC5zcGxpdCgnLycpXG4gICAgICBjb25zdCBzZWNvbmRMYXN0UGFydCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdXG5cbiAgICAgIGlmIChzZWNvbmRMYXN0UGFydCA9PT0gJ2NoYW5uZWxzJyB8fCBzZWNvbmRMYXN0UGFydCA9PT0gJ2d1aWxkcycpIHtcbiAgICAgICAgcmV0dXJuIHVybFxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vjb25kTGFzdFBhcnQgPT09ICdyZWFjdGlvbnMnIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdID09PSAnQG1lJykge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTIpXG4gICAgICAgIHBhcnRzLnB1c2goJ3JlYWN0aW9ucycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoLTEpXG4gICAgICAgIHBhcnRzLnB1c2goJ3gnKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydHNbcGFydHMubGVuZ3RoIC0gM10gPT09ICdyZWFjdGlvbnMnKSB7XG4gICAgICAgIHBhcnRzLnNwbGljZSgtMilcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgc2Vjb25kTGFzdFBhcnQgPT09ICdtZXNzYWdlcycpIHtcbiAgICAgICAgcmV0dXJuIGBEJHtwYXJ0cy5qb2luKCcvJyl9YFxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignLycpXG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NSZXF1ZXN0KHJlcXVlc3Q6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnJvdXRlLCByZXF1ZXN0Lm1ldGhvZClcblxuICAgICAgaWYgKHJlcXVlc3QucnVuVGhyb3VnaFF1ZXVlID09PSBmYWxzZSkge1xuICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIHRoZSByZXF1ZXN0IGhhcyBhIHRva2VuLCB1c2UgaXRcbiAgICAgIC8vIEVsc2UgZmFsbGJhY2sgdG8gcHJlZml4IHdpdGggdGhlIGJvdCB0b2tlblxuICAgICAgY29uc3QgcXVldWVJZGVudGlmaWVyID0gcmVxdWVzdC5yZXF1ZXN0Qm9keU9wdGlvbnM/LmhlYWRlcnM/LmF1dGhvcml6YXRpb24gPz8gYEJvdCAke3Jlc3QudG9rZW59YFxuXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldChgJHtxdWV1ZUlkZW50aWZpZXJ9JHt1cmx9YClcblxuICAgICAgaWYgKHF1ZXVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENSRUFURVMgQSBORVcgUVVFVUVcbiAgICAgICAgY29uc3QgYnVja2V0UXVldWUgPSBuZXcgUXVldWUocmVzdCwgeyB1cmwsIGRlbGV0ZVF1ZXVlRGVsYXk6IHJlc3QuZGVsZXRlUXVldWVEZWxheSwgaWRlbnRpZmllcjogcXVldWVJZGVudGlmaWVyIH0pXG5cbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQoYCR7cXVldWVJZGVudGlmaWVyfSR7dXJsfWAsIGJ1Y2tldFF1ZXVlKVxuXG4gICAgICAgIC8vIEFkZCByZXF1ZXN0IHRvIHF1ZXVlXG4gICAgICAgIGJ1Y2tldFF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG1ha2VSZXF1ZXN0KG1ldGhvZCwgcm91dGUsIG9wdGlvbnMpIHtcbiAgICAgIC8vIFRoaXMgZXJyb3IgbmVlZHMgdG8gYmUgY3JlYXRlZCBoZXJlIGJlY2F1c2Ugb2YgaG93IHN0YWNrIHRyYWNlcyBnZXQgY2FsY3VsYXRlZFxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKVxuXG4gICAgICBpZiAocmVzdC5pc1Byb3hpZWQpIHtcbiAgICAgICAgaWYgKHJlc3QuYXV0aG9yaXphdGlvbikge1xuICAgICAgICAgIG9wdGlvbnMgPz89IHt9XG4gICAgICAgICAgb3B0aW9ucy5oZWFkZXJzID8/PSB7fVxuICAgICAgICAgIG9wdGlvbnMuaGVhZGVyc1tyZXN0LmF1dGhvcml6YXRpb25IZWFkZXJdID0gcmVzdC5hdXRob3JpemF0aW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaChgJHtyZXN0LmJhc2VVcmx9L3Yke3Jlc3QudmVyc2lvbn0ke3JvdXRlfWAsIHJlc3QuY3JlYXRlUmVxdWVzdEJvZHkobWV0aG9kLCBvcHRpb25zKSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIC8vIFNvbWV0aW1lIHRoZSBDb250ZW50LVR5cGUgbWF5IGJlIFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCBmb3IgdGhpcyByZWFzb24gd2UgbmVlZCB0byBjaGVjayB0aGUgc3RhcnQgb2YgdGhlIGhlYWRlclxuICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCAocmVzdWx0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uc3RhcnRzV2l0aCgnYXBwbGljYXRpb24vanNvbicpID8gcmVzdWx0Lmpzb24oKSA6IHJlc3VsdC50ZXh0KCkpLmNhdGNoKCgpID0+IG51bGwpXG5cbiAgICAgICAgICBlcnJvci5jYXVzZSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShiYXNlRXJyb3JQcm90b3R5cGUpLCB7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICBib2R5LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgIT09IDIwNCA/IGF3YWl0IHJlc3VsdC5qc29uKCkgOiB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZDogU2VuZFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgIHJvdXRlLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICByZXF1ZXN0Qm9keU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIChwYXlsb2FkOiBTZW5kUmVxdWVzdE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlamVjdDogKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yVGV4dDogc3RyaW5nXG5cbiAgICAgICAgICAgIHN3aXRjaCAocmVhc29uLnN0YXR1cykge1xuICAgICAgICAgICAgICBjYXNlIDQwMDpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSBcIlRoZSBvcHRpb25zIHdhcyBpbXByb3Blcmx5IGZvcm1hdHRlZCwgb3IgdGhlIHNlcnZlciBjb3VsZG4ndCB1bmRlcnN0YW5kIGl0LlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA0MDE6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZSBBdXRob3JpemF0aW9uIGhlYWRlciB3YXMgbWlzc2luZyBvciBpbnZhbGlkLidcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICAgICAgICBlcnJvclRleHQgPSAnVGhlIEF1dGhvcml6YXRpb24gdG9rZW4geW91IHBhc3NlZCBkaWQgbm90IGhhdmUgcGVybWlzc2lvbiB0byB0aGUgcmVzb3VyY2UuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiVGhlIHJlc291cmNlIGF0IHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgZG9lc24ndCBleGlzdC5cIlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDA1OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9ICdUaGUgSFRUUCBtZXRob2QgdXNlZCBpcyBub3QgdmFsaWQgZm9yIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgNDI5OlxuICAgICAgICAgICAgICAgIGVycm9yVGV4dCA9IFwiWW91J3JlIGJlaW5nIHJhdGVsaW1pdGVkLlwiXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSA1MDI6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gJ1RoZXJlIHdhcyBub3QgYSBnYXRld2F5IGF2YWlsYWJsZSB0byBwcm9jZXNzIHlvdXIgb3B0aW9ucy4gV2FpdCBhIGJpdCBhbmQgcmV0cnkuJ1xuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZXJyb3JUZXh0ID0gcmVhc29uLnN0YXR1c1RleHQgPz8gJ1Vua25vd24gZXJyb3InXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgWyR7cmVhc29uLnN0YXR1c31dICR7ZXJyb3JUZXh0fWBcblxuICAgICAgICAgICAgLy8gSWYgZGlzY29yZCBzZW50IHVzIEpTT04sIGl0IGlzIHByb2JhYmx5IGdvaW5nIHRvIGJlIGFuIGVycm9yIG1lc3NhZ2UgZnJvbSB3aGljaCB3ZSBjYW4gZ2V0IGFuZCBhZGQgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgdG8gdGhlIGVycm9yIG1lc3NhZ2UsIHRoZSBmdWxsIGJvZHkgd2lsbCBiZSBpbiB0aGUgZXJyb3IuY2F1c2VcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3JlZmVyZW5jZSNlcnJvci1tZXNzYWdlc1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWFzb24uYm9keSA9PT0gJ29iamVjdCcgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdjb2RlJykgJiYgaGFzUHJvcGVydHkocmVhc29uLmJvZHksICdtZXNzYWdlJykpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgXFxuRGlzY29yZCBlcnJvcjogWyR7cmVhc29uLmJvZHkuY29kZX1dICR7cmVhc29uLmJvZHkubWVzc2FnZX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yLmNhdXNlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGJhc2VFcnJvclByb3RvdHlwZSksIHJlYXNvbilcbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJ1blRocm91Z2hRdWV1ZTogb3B0aW9ucz8ucnVuVGhyb3VnaFF1ZXVlLFxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcmVzdC5wcm9jZXNzUmVxdWVzdChwYXlsb2FkKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnR0VUJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcG9zdDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BPU1QnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSB7XG4gICAgICBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwYXRjaDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcHV0PFQgPSB2b2lkPih1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb25zLCBvcmRlcmVkID0gZmFsc2UpIHtcbiAgICAgIGlmICghb3JkZXJlZCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICByZWFjdGlvbnMubWFwKGFzeW5jIChyZWFjdGlvbikgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgcmVhY3Rpb24gb2YgcmVhY3Rpb25zKSB7XG4gICAgICAgIGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZERtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5kbVJlY2lwaWVudChjaGFubmVsSWQsIHVzZXJJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBdXRvbW9kUnVsZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUNoYW5uZWwoZ3VpbGRJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUVtb2ppKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUFwcGxpY2F0aW9uRW1vamkoYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoYm9keSwgZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgY29uc3QgcmVzdE9wdGlvbnM6IE1ha2VSZXF1ZXN0T3B0aW9ucyA9IHsgYm9keSB9XG5cbiAgICAgIGlmIChvcHRpb25zPy5iZWFyZXJUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYmVhcmVyVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIHJlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgIGZvcm0uYXBwZW5kKCdmaWxlJywgb3B0aW9ucy5maWxlLmJsb2IsIG9wdGlvbnMuZmlsZS5uYW1lKVxuICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLm5hbWUpXG4gICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmRlc2NyaXB0aW9uKVxuICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLnRhZ3MpXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgeyBib2R5OiBmb3JtLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVGb3J1bVRocmVhZChjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgeyBib2R5LCBmaWxlczogYm9keS5maWxlcywgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUludml0ZShjaGFubmVsSWQsIGJvZHkgPSB7fSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBhdmF0YXI6IG9wdGlvbnMuYXZhdGFyID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucy5hdmF0YXIpIDogdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHtcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQXBwbGljYXRpb25FbW9qaShpZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVJbnZpdGUoaW52aXRlQ29kZSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZHMsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLmJ1bGsoY2hhbm5lbElkKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VJZHMuc2xpY2UoMCwgMTAwKS5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVPd25SZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0FsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmFsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0Vtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5lbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSb2xlKGd1aWxkSWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVVzZXJSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgdXNlcklkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy51c2VyKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIHsgdW5hdXRob3JpemVkOiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCwgY29tbWFuZElkLCBiZWFyZXJUb2tlbiwgcGVybWlzc2lvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAge1xuICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCB9LFxuICAgICAgICB9LFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFByb2ZpbGUob3B0aW9ucykge1xuICAgICAgY29uc3QgYXZhdGFyID0gb3B0aW9ucz8uYm90QXZhdGFyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QXZhdGFyVVJMKSA6IG9wdGlvbnM/LmJvdEF2YXRhclVSTFxuICAgICAgY29uc3QgYmFubmVyID0gb3B0aW9ucz8uYm90QmFubmVyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QmFubmVyVVJMKSA6IG9wdGlvbnM/LmJvdEJhbm5lclVSTFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMuY3VycmVudFVzZXIoKSwge1xuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWU/LnRyaW0oKSxcbiAgICAgICAgICBhdmF0YXIsXG4gICAgICAgICAgYmFubmVyLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWwoY2hhbm5lbElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGNoYW5uZWxJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyhjaGFubmVsSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgYm9keS5pZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUG9zaXRpb25zKGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEVtb2ppKGd1aWxkSWQsIGlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uRW1vamkoaWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25FbW9qaShyZXN0LmFwcGxpY2F0aW9uSWQsIGlkKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGZpbGVzOiBib2R5LmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpLCB7IGJvZHkgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBib2R5OiBNb2RpZnlHdWlsZFRlbXBsYXRlKTogUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGVtcGxhdGU+PiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSwgeyBib2R5IH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbiwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgZmlsZXM6IGJvZHkuZmlsZXMsXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPd25Wb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgIHJlcXVlc3RUb1NwZWFrVGltZXN0YW1wOiBvcHRpb25zLnJlcXVlc3RUb1NwZWFrVGltZXN0YW1wXG4gICAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGUoZ3VpbGRJZCwgcm9sZUlkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCB0b3BpYywgcmVhc29uPzogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyBib2R5OiB7IHRvcGljIH0sIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCwgb3B0aW9ucy51c2VySWQpLCB7IGJvZHk6IG9wdGlvbnMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSwge1xuICAgICAgICBib2R5LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGV4ZWN1dGVXZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIHdlYmhvb2tDaGFubmVsSWQ6IHRhcmdldENoYW5uZWxJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgICAgcmVzdE9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBPbWl0PE1ha2VSZXF1ZXN0T3B0aW9ucywgJ2JvZHknPiA9IHt9XG5cbiAgICAgIGlmIChvcHRpb25zPy5hY2Nlc3NUb2tlbikge1xuICAgICAgICByZXN0T3B0aW9ucy51bmF1dGhvcml6ZWQgPSB0cnVlXG4gICAgICAgIHJlc3RPcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke29wdGlvbnMuYWNjZXNzVG9rZW59YCxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9ucyhvcHRpb25zPy5hcHBsaWNhdGlvbklkID8/IHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksXG4gICAgICAgIHJlc3RPcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIuYXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uSW5mbyhib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRBdXRoZW50aWNhdGlvbkluZm8odG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ3VycmVudEF1dGhvcml6YXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5jdXJyZW50QXV0aG9yaXphdGlvbigpLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhjaGFuZ2VUb2tlbihjbGllbnRJZCwgY2xpZW50U2VjcmV0LCBib2R5KSB7XG4gICAgICBjb25zdCBiYXNpY0NyZWRlbnRpYWxzID0gQnVmZmVyLmZyb20oYCR7Y2xpZW50SWR9OiR7Y2xpZW50U2VjcmV0fWApXG5cbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWNDcmVkZW50aWFscy50b1N0cmluZygnYmFzZTY0Jyl9YCxcbiAgICAgICAgfSxcbiAgICAgICAgcnVuVGhyb3VnaFF1ZXVlOiBmYWxzZSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBpZiAoYm9keS5ncmFudFR5cGUgPT09ICdjbGllbnRfY3JlZGVudGlhbHMnKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLmJvZHkuc2NvcGUgPSBib2R5LnNjb3BlLmpvaW4oJyAnKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBY2Nlc3NUb2tlblJlc3BvbnNlPihyZXN0LnJvdXRlcy5vYXV0aDIudG9rZW5FeGNoYW5nZSgpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgcmV2b2tlVG9rZW4oY2xpZW50SWQsIGNsaWVudFNlY3JldCwgYm9keSkge1xuICAgICAgY29uc3QgYmFzaWNDcmVkZW50aWFscyA9IEJ1ZmZlci5mcm9tKGAke2NsaWVudElkfToke2NsaWVudFNlY3JldH1gKVxuXG4gICAgICBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMub2F1dGgyLnRva2VuUmV2b2tlKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY0NyZWRlbnRpYWxzLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdWRpdExvZyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1ZGl0TG9nPihyZXN0LnJvdXRlcy5ndWlsZHMuYXVkaXRsb2dzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlKGd1aWxkSWQsIHJ1bGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuYXV0b21vZC5ydWxlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWb2ljZVJlZ2lvbltdPihyZXN0LnJvdXRlcy5yZWdpb25zKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW5zKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsSW52aXRlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVscyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZENoYW5uZWxbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsV2ViaG9va3MoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RG1DaGFubmVsKHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZG0oKSwge1xuICAgICAgICBib2R5OiB7IHJlY2lwaWVudElkOiB1c2VySWQgfSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdyb3VwRG1DaGFubmVsKGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25FbW9qaShlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkVtb2ppKHJlc3QuYXBwbGljYXRpb25JZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uRW1vamlzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRFbW9qaVtdIH0+KHJlc3Qucm91dGVzLmFwcGxpY2F0aW9uRW1vamlzKHJlc3QuYXBwbGljYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkcyh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgY29uc3QgbWFrZVJlcXVlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgfCB1bmRlZmluZWQgPSB0b2tlblxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PFBhcnRpYWw8RGlzY29yZEd1aWxkPltdPihyZXN0LnJvdXRlcy5ndWlsZHMudXNlckd1aWxkcyhvcHRpb25zKSwgbWFrZVJlcXVlc3RPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLmFsbChyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFByZXZpZXcoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFByZXZpZXc+KHJlc3Qucm91dGVzLmd1aWxkcy5wcmV2aWV3KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlKHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5jb2RlKHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkV2ViaG9va3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWJob29rcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW50ZWdyYXRpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW50ZWdyYXRpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludGVncmF0aW9ucyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZXMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFjaz4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2soc3RpY2tlclBhY2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFN0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMuc3RpY2tlclBhY2tzKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7IHVuYXV0aG9yaXplZDogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRDaGFubmVsUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldChyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGlucyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQaW5uZWRNZXNzYWdlcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5waW5zKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHJpdmF0ZShjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmpvaW5lZChjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcnVuZUNvdW50KGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUHJ1bmVkQ291bnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5wcnVuZShndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnB1YmxpYyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRSb2xlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3duVm9pY2VTdGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlU3RhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuZ2V0VXNlcihjaGFubmVsSWQsIHVzZXJJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEN1cnJlbnRVc2VyKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLmN1cnJlbnRVc2VyKCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyQ29ubmVjdGlvbnModG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ29ubmVjdGlvbltdPihyZXN0LnJvdXRlcy5vYXV0aDIuY29ubmVjdGlvbnMoKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXJBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uKHRva2VuLCBhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24+KHJlc3Qucm91dGVzLm9hdXRoMi5yb2xlQ29ubmVjdGlvbnMoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgICAgICB9LFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCB7XG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlbGNvbWVTY3JlZW4oZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXQ+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXRKc29uKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXRTZXR0aW5ncyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KHJlc3Qucm91dGVzLmd1aWxkcy53aWRnZXQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGpvaW5UaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcHVibGlzaE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNyb3NzcG9zdChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlRG1SZWNpcGllbnQoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtUmVjaXBpZW50KGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmZpbGVzLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZShpbnRlcmFjdGlvbklkLCB0b2tlbiwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHZvaWQgfCBEaXNjb3JkSW50ZXJhY3Rpb25DYWxsYmFja1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLmNhbGxiYWNrKGludGVyYWN0aW9uSWQsIHRva2VuLCBwYXJhbXMpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGZpbGVzOiBvcHRpb25zLmRhdGE/LmZpbGVzLFxuICAgICAgICBydW5UaHJvdWdoUXVldWU6IGZhbHNlLFxuICAgICAgICB1bmF1dGhvcml6ZWQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIGJvZHkpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIHsgYm9keSwgZmlsZXM6IGJvZHkuZmlsZXMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc3RhcnRUaHJlYWRXaXRoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQb2xsQW5zd2VyVm90ZXJzKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBhbnN3ZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRBbnN3ZXJWb3Rlc1Jlc3BvbnNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy52b3RlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgYW5zd2VySWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBlbmRQb2xsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5wb2xscy5leHBpcmUoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgeyBib2R5LCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYnVsa0Jhbk1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucywgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRCdWxrQmFuPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5idWxrQmFuKGd1aWxkSWQpLCB7IGJvZHk6IG9wdGlvbnMsIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIGJvZHksIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lbWJlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYm90KGd1aWxkSWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgYm9keSwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7IGJvZHksIHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q3VycmVudE1lbWJlcihndWlsZElkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuY3VycmVudE1lbWJlcihndWlsZElkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBY3Rpdml0eUluc3RhbmNlPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UoYXBwbGljYXRpb25JZCwgaW5zdGFuY2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZVBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBib2R5LCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8eyBwcnVuZWQ6IG51bWJlciB8IG51bGwgfT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMucHJ1bmUoZ3VpbGRJZCksIHsgYm9keSwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlYXJjaE1lbWJlcnMoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuc2VhcmNoKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRPbmJvYXJkaW5nKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkT25ib2FyZGluZyhndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkR3VpbGRPbmJvYXJkaW5nPihyZXN0LnJvdXRlcy5ndWlsZHMub25ib2FyZGluZyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEluY2lkZW50c0RhdGE+KHJlc3Qucm91dGVzLmd1aWxkcy5pbmNpZGVudEFjdGlvbnMoZ3VpbGRJZCksIHsgYm9keTogb3B0aW9ucyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHVucGluTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhc29uKSB7XG4gICAgICBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlUGluKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdHJpZ2dlclR5cGluZ0luZGljYXRvcihjaGFubmVsSWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhib2R5LCBvcHRpb25zKSB7XG4gICAgICBjb25zdCByZXN0T3B0aW9uczogTWFrZVJlcXVlc3RPcHRpb25zID0geyBib2R5IH1cblxuICAgICAgaWYgKG9wdGlvbnM/LmJlYXJlclRva2VuKSB7XG4gICAgICAgIHJlc3RPcHRpb25zLnVuYXV0aG9yaXplZCA9IHRydWVcbiAgICAgICAgcmVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7b3B0aW9ucy5iZWFyZXJUb2tlbn1gLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCByZXN0T3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlc3RPcHRpb25zOiBNYWtlUmVxdWVzdE9wdGlvbnMgPSB7IGJvZHkgfVxuXG4gICAgICBpZiAob3B0aW9ucz8uYmVhcmVyVG9rZW4pIHtcbiAgICAgICAgcmVzdE9wdGlvbnMudW5hdXRob3JpemVkID0gdHJ1ZVxuICAgICAgICByZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAgIGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtvcHRpb25zLmJlYXJlclRva2VufWAsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgcmVzdE9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbih0b2tlbiwgYXBwbGljYXRpb25JZCwgYm9keSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uPihyZXN0LnJvdXRlcy5vYXV0aDIucm9sZUNvbm5lY3Rpb25zKGFwcGxpY2F0aW9uSWQpLCB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkR3VpbGRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIHtcbiAgICAgICAgYm9keSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVRlc3RFbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBib2R5KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbnRpdGxlbWVudD4ocmVzdC5yb3V0ZXMubW9uZXRpemF0aW9uLmVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkKSwge1xuICAgICAgICBib2R5LFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdEVudGl0bGVtZW50cyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVudGl0bGVtZW50W10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudHMoYXBwbGljYXRpb25JZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW50aXRsZW1lbnQ+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVGVzdEVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5lbnRpdGxlbWVudChhcHBsaWNhdGlvbklkLCBlbnRpdGxlbWVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uY29uc3VtZUVudGl0bGVtZW50KGFwcGxpY2F0aW9uSWQsIGVudGl0bGVtZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0U2t1cyhhcHBsaWNhdGlvbklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNrdVtdPihyZXN0LnJvdXRlcy5tb25ldGl6YXRpb24uc2t1cyhhcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGlzdFN1YnNjcmlwdGlvbnMoc2t1SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3Vic2NyaXB0aW9uW10+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb25zKHNrdUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3Vic2NyaXB0aW9uKHNrdUlkLCBzdWJzY3JpcHRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdWJzY3JpcHRpb24+KHJlc3Qucm91dGVzLm1vbmV0aXphdGlvbi5zdWJzY3JpcHRpb24oc2t1SWQsIHN1YnNjcmlwdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFNvdW5kYm9hcmRTb3VuZChjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLnNlbmRTb3VuZChjaGFubmVsSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0RGVmYXVsdFNvdW5kYm9hcmRTb3VuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZFtdPihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmxpc3REZWZhdWx0KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxpc3RHdWlsZFNvdW5kYm9hcmRTb3VuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PHsgaXRlbXM6IERpc2NvcmRTb3VuZGJvYXJkU291bmRbXSB9PihyZXN0LnJvdXRlcy5zb3VuZGJvYXJkLmd1aWxkU291bmRzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kcyhndWlsZElkKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBtb2RpZnlHdWlsZFNvdW5kYm9hcmRTb3VuZChndWlsZElkLCBzb3VuZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFNvdW5kYm9hcmRTb3VuZD4ocmVzdC5yb3V0ZXMuc291bmRib2FyZC5ndWlsZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkU291bmRib2FyZFNvdW5kKGd1aWxkSWQsIHNvdW5kSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLnNvdW5kYm9hcmQuZ3VpbGRTb3VuZChndWlsZElkLCBzb3VuZElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBsaXN0QXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbnNNZXRhZGF0YVJlY29yZHMoYXBwbGljYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuYXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbk1ldGFkYXRhKGFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cGRhdGVBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyhhcHBsaWNhdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5hcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uTWV0YWRhdGEoYXBwbGljYXRpb25JZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUxvYmJ5KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5jcmVhdGUoKSwge1xuICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TG9iYnkobG9iYnlJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIG1vZGlmeUxvYmJ5KGxvYmJ5SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubG9iYnkobG9iYnlJZCksIHtcbiAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUxvYmJ5KGxvYmJ5SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sb2JieShsb2JieUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkTWVtYmVyVG9Mb2JieShsb2JieUlkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkTG9iYnlNZW1iZXI+KHJlc3Qucm91dGVzLmxvYmJ5Lm1lbWJlcihsb2JieUlkLCB1c2VySWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVNZW1iZXJGcm9tTG9iYnkobG9iYnlJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMubG9iYnkubWVtYmVyKGxvYmJ5SWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5sb2JieS5sZWF2ZShsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGxpbmtDaGFubmVsVG9Mb2JieShsb2JieUlkLCBiZWFyZXJUb2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZExvYmJ5PihyZXN0LnJvdXRlcy5sb2JieS5saW5rKGxvYmJ5SWQpLCB7XG4gICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7YmVhcmVyVG9rZW59YCxcbiAgICAgICAgfSxcbiAgICAgICAgdW5hdXRob3JpemVkOiB0cnVlLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5saW5rQ2hhbm5lbFRvTG9iYnkobG9iYnlJZCwgYmVhcmVyVG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRMb2JieT4ocmVzdC5yb3V0ZXMubG9iYnkubGluayhsb2JieUlkKSwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAsXG4gICAgICAgIH0sXG4gICAgICAgIHVuYXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHByZWZlclNuYWtlQ2FzZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICBjb25zdCBjYW1lbGl6ZXIgPSBlbmFibGVkID8gKHg6IGFueSkgPT4geCA6IGNhbWVsaXplXG5cbiAgICAgIHJlc3QuZ2V0ID0gYXN5bmMgKHVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCwgb3B0aW9ucykpXG4gICAgICB9XG5cbiAgICAgIHJlc3QucG9zdCA9IGFzeW5jICh1cmw6IHN0cmluZywgb3B0aW9ucz86IE9taXQ8Q3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zLCAnYm9keScgfCAnbWV0aG9kJz4pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5kZWxldGUgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIGNhbWVsaXplcihhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIG9wdGlvbnMpKVxuICAgICAgfVxuXG4gICAgICByZXN0LnBhdGNoID0gYXN5bmMgKHVybDogc3RyaW5nLCBvcHRpb25zPzogT21pdDxDcmVhdGVSZXF1ZXN0Qm9keU9wdGlvbnMsICdib2R5JyB8ICdtZXRob2QnPikgPT4ge1xuICAgICAgICByZXR1cm4gY2FtZWxpemVyKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmVzdC5wdXQgPSBhc3luYyAodXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucywgJ2JvZHknIHwgJ21ldGhvZCc+KSA9PiB7XG4gICAgICAgIHJldHVybiBjYW1lbGl6ZXIoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBvcHRpb25zKSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3RcbiAgICB9LFxuICB9XG5cbiAgcmV0dXJuIHJlc3Rcbn1cblxuZW51bSBIdHRwUmVzcG9uc2VDb2RlIHtcbiAgLyoqIE1pbmltdW0gdmFsdWUgb2YgYSBjb2RlIGluIG9kZXIgdG8gY29uc2lkZXIgdGhhdCBpdCB3YXMgc3VjY2Vzc2Z1bC4gKi9cbiAgU3VjY2VzcyA9IDIwMCxcbiAgLyoqIFJlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgYnV0IERpc2NvcmQgcmV0dXJuZWQgYW4gZW1wdHkgYm9keS4gKi9cbiAgTm9Db250ZW50ID0gMjA0LFxuICAvKiogTWluaW11bSB2YWx1ZSBvZiBhIGNvZGUgaW4gb3JkZXIgdG8gY29uc2lkZXIgdGhhdCBzb21ldGhpbmcgd2VudCB3cm9uZy4gKi9cbiAgRXJyb3IgPSA0MDAsXG4gIC8qKiBUaGlzIHJlcXVlc3QgZ290IHJhdGUgbGltaXRlZC4gKi9cbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxufVxuIl0sIm5hbWVzIjpbIkFVRElUX0xPR19SRUFTT05fSEVBREVSIiwiRElTQ09SRF9BUElfVVJMIiwiRElTQ09SRF9BUElfVkVSU0lPTiIsIlJBVEVfTElNSVRfQlVDS0VUX0hFQURFUiIsIlJBVEVfTElNSVRfR0xPQkFMX0hFQURFUiIsIlJBVEVfTElNSVRfTElNSVRfSEVBREVSIiwiUkFURV9MSU1JVF9SRU1BSU5JTkdfSEVBREVSIiwiUkFURV9MSU1JVF9SRVNFVF9BRlRFUl9IRUFERVIiLCJSQVRFX0xJTUlUX1NDT1BFX0hFQURFUiIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsImFwcGxpY2F0aW9uSWQiLCJCaWdJbnQiLCJnZXRCb3RJZEZyb21Ub2tlbiIsInRva2VuIiwiYmFzZVVybCIsInByb3h5IiwiYmFzZUVycm9yUHJvdG90eXBlIiwiaW5zcGVjdCIsImN1c3RvbSIsIl9kZXB0aCIsIl9pbnNwZWN0IiwiZGVwdGgiLCJJbmZpbml0eSIsImN1c3RvbUluc3BlY3QiLCJyZXN0IiwiYXV0aG9yaXphdGlvbiIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJkZWxldGVRdWV1ZURlbGF5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsImludmFsaWRCdWNrZXQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsImxvZ2dlciIsImlzUHJveGllZCIsInN0YXJ0c1dpdGgiLCJ1cGRhdGVCZWFyZXJUb2tlbkVuZHBvaW50IiwibWF4UmV0cnlDb3VudCIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsInZlcnNpb24iLCJyb3V0ZXMiLCJjcmVhdGVSb3V0ZXMiLCJjcmVhdGVCYXNlSGVhZGVycyIsIkRJU0NPUkRFTk9fVkVSU0lPTiIsImNoZWNrUmF0ZUxpbWl0cyIsInVybCIsImlkZW50aWZpZXIiLCJyYXRlbGltaXRlZCIsImdldCIsImdsb2JhbCIsIm5vdyIsIkRhdGUiLCJyZXNldFRpbWVzdGFtcCIsInVwZGF0ZVRva2VuUXVldWVzIiwib2xkVG9rZW4iLCJuZXdUb2tlbiIsIkVycm9yIiwiaGVhZGVycyIsInVuZGVmaW5lZCIsImZldGNoIiwibWV0aG9kIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXdJZGVudGlmaWVyIiwia2V5IiwicXVldWUiLCJlbnRyaWVzIiwiZGVsZXRlIiwibmV3S2V5IiwibmV3UXVldWUiLCJ3YWl0aW5nIiwidW5zaGlmdCIsInBlbmRpbmciLCJjbGVhbnVwIiwic2V0IiwicmF0ZWxpbWl0UGF0aCIsImJ1Y2tldElkIiwiY2hhbmdlVG9EaXNjb3JkRm9ybWF0Iiwib2JqIiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwiaXRlbSIsIm5ld09iaiIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZSIsImluY2x1ZGVzIiwiY2FsY3VsYXRlQml0cyIsImRlZmF1bHRfbWVtYmVyX3Blcm1pc3Npb25zIiwibmFtZV9sb2NhbGl6YXRpb25zIiwiZGVzY3JpcHRpb25fbG9jYWxpemF0aW9ucyIsImNhbWVsVG9TbmFrZUNhc2UiLCJ0b1N0cmluZyIsImNyZWF0ZVJlcXVlc3RCb2R5IiwidW5hdXRob3JpemVkIiwicmVhc29uIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZmlsZXMiLCJmb3JtIiwiRm9ybURhdGEiLCJpIiwibGVuZ3RoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJmb3JtQm9keSIsImRpc2NvcmRCb2R5IiwicHJvcCIsInB1c2giLCJqb2luIiwiYXNzaWduIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJsaW1pdCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJyb3V0ZSIsInBheWxvYWQiLCJyZXF1ZXN0Qm9keU9wdGlvbnMiLCJsb2dnaW5nSGVhZGVycyIsImF1dGhvcml6YXRpb25TY2hlbWUiLCJzcGxpdCIsImRlYnVnIiwicmVzcG9uc2UiLCJjYXRjaCIsImVycm9yIiwicmVqZWN0Iiwib2siLCJzdGF0dXMiLCJzdGF0dXNUZXh0Iiwic2ltcGxpZnlVcmwiLCJqc29uIiwidGV4dCIsImFycmF5QnVmZmVyIiwicmV0cnlDb3VudCIsInJlc2V0QWZ0ZXIiLCJkZWxheSIsInJldHJ5UmVxdWVzdCIsInJlc29sdmUiLCJwYXJ0cyIsInNlY29uZExhc3RQYXJ0Iiwic3BsaWNlIiwicHJvY2Vzc1JlcXVlc3QiLCJyZXF1ZXN0IiwicnVuVGhyb3VnaFF1ZXVlIiwicXVldWVJZGVudGlmaWVyIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsIlF1ZXVlIiwicmVzdWx0IiwiY2F1c2UiLCJjcmVhdGUiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwiZXJyb3JUZXh0IiwibWVzc2FnZSIsImhhc1Byb3BlcnR5IiwiY29kZSIsImNhbWVsaXplIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJjaGFubmVsSWQiLCJtZXNzYWdlSWQiLCJyZWFjdGlvbiIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsImNoYW5uZWxzIiwicmVhY3Rpb25zIiwiYm90IiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFsbCIsImFkZFJvbGUiLCJndWlsZElkIiwidXNlcklkIiwicm9sZUlkIiwiZ3VpbGRzIiwicm9sZXMiLCJtZW1iZXIiLCJhZGRUaHJlYWRNZW1iZXIiLCJ0aHJlYWRzIiwidXNlciIsImFkZERtUmVjaXBpZW50IiwiZG1SZWNpcGllbnQiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImF1dG9tb2QiLCJydWxlcyIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImVtb2ppcyIsImNyZWF0ZUFwcGxpY2F0aW9uRW1vamkiLCJhcHBsaWNhdGlvbkVtb2ppcyIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsInJlc3RPcHRpb25zIiwiYmVhcmVyVG9rZW4iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiZmlsZSIsImRlc2NyaXB0aW9uIiwidGFncyIsInN0aWNrZXJzIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsInRlbXBsYXRlcyIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiZm9ydW0iLCJjcmVhdGVJbnZpdGUiLCJpbnZpdGVzIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiZXZlbnRzIiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsInN0YWdlcyIsImNyZWF0ZVdlYmhvb2siLCJ3ZWJob29rcyIsImF2YXRhciIsInVybFRvQmFzZTY0IiwiZGVsZXRlQXV0b21vZFJ1bGUiLCJydWxlSWQiLCJydWxlIiwiZGVsZXRlQ2hhbm5lbCIsImNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwib3ZlcndyaXRlSWQiLCJvdmVyd3JpdGUiLCJkZWxldGVFbW9qaSIsImlkIiwiZW1vamkiLCJkZWxldGVBcHBsaWNhdGlvbkVtb2ppIiwiYXBwbGljYXRpb25FbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsInJlc3BvbnNlcyIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNvbW1hbmRJZCIsImNvbW1hbmQiLCJkZWxldGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsIm9uZSIsImRlbGV0ZUd1aWxkU3RpY2tlciIsInN0aWNrZXJJZCIsInN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwidGVtcGxhdGVDb2RlIiwiZ3VpbGQiLCJkZWxldGVJbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbiIsImRlbGV0ZUludml0ZSIsImludml0ZUNvZGUiLCJpbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwiYnVsayIsIm1lc3NhZ2VzIiwic2xpY2UiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJvcmlnaW5hbCIsImRlbGV0ZU93blJlYWN0aW9uIiwiZGVsZXRlUmVhY3Rpb25zQWxsIiwiZGVsZXRlUmVhY3Rpb25zRW1vamkiLCJkZWxldGVSb2xlIiwiZGVsZXRlU2NoZWR1bGVkRXZlbnQiLCJldmVudElkIiwiZXZlbnQiLCJkZWxldGVTdGFnZUluc3RhbmNlIiwic3RhZ2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwid2ViaG9va0lkIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwid2ViaG9vayIsImVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwiYmFubmVyIiwiYm90QmFubmVyVVJMIiwiY3VycmVudFVzZXIiLCJ1c2VybmFtZSIsInRyaW0iLCJlZGl0Q2hhbm5lbCIsImVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlcyIsImVkaXRDaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEFwcGxpY2F0aW9uRW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPd25Wb2ljZVN0YXRlIiwidm9pY2UiLCJyZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCIsInRvSVNPU3RyaW5nIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJ3ZWxjb21lIiwiZWRpdFdpZGdldFNldHRpbmdzIiwid2lkZ2V0IiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJmb2xsb3ciLCJ3ZWJob29rQ2hhbm5lbElkIiwiZ2V0QWN0aXZlVGhyZWFkcyIsImFjdGl2ZSIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb24iLCJhY2Nlc3NUb2tlbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwib2F1dGgyIiwiYXBwbGljYXRpb24iLCJlZGl0QXBwbGljYXRpb25JbmZvIiwiZ2V0Q3VycmVudEF1dGhlbnRpY2F0aW9uSW5mbyIsImN1cnJlbnRBdXRob3JpemF0aW9uIiwiZXhjaGFuZ2VUb2tlbiIsImNsaWVudElkIiwiY2xpZW50U2VjcmV0IiwiYmFzaWNDcmVkZW50aWFscyIsIkJ1ZmZlciIsImZyb20iLCJncmFudFR5cGUiLCJzY29wZSIsInRva2VuRXhjaGFuZ2UiLCJyZXZva2VUb2tlbiIsInRva2VuUmV2b2tlIiwiZ2V0QXVkaXRMb2ciLCJhdWRpdGxvZ3MiLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsInJlZ2lvbnMiLCJnZXRCYW4iLCJtZW1iZXJzIiwiYmFuIiwiZ2V0QmFucyIsImJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsImRtIiwicmVjaXBpZW50SWQiLCJnZXRHcm91cERtQ2hhbm5lbCIsImdldEVtb2ppIiwiZW1vamlJZCIsImdldEFwcGxpY2F0aW9uRW1vamkiLCJnZXRFbW9qaXMiLCJnZXRBcHBsaWNhdGlvbkVtb2ppcyIsImdldEZvbGxvd3VwTWVzc2FnZSIsImdldEdhdGV3YXlCb3QiLCJnYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkIiwiY291bnRzIiwiZ2V0R3VpbGRzIiwibWFrZVJlcXVlc3RPcHRpb25zIiwidXNlckd1aWxkcyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwicHJldmlldyIsImdldEd1aWxkVGVtcGxhdGUiLCJnZXRHdWlsZFRlbXBsYXRlcyIsImdldEd1aWxkV2ViaG9va3MiLCJnZXRJbnRlZ3JhdGlvbnMiLCJpbnRlZ3JhdGlvbnMiLCJnZXRJbnZpdGUiLCJnZXRJbnZpdGVzIiwiZ2V0TWVzc2FnZSIsImdldE1lc3NhZ2VzIiwiZ2V0U3RpY2tlclBhY2siLCJzdGlja2VyUGFja0lkIiwic3RpY2tlclBhY2siLCJnZXRTdGlja2VyUGFja3MiLCJzdGlja2VyUGFja3MiLCJnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJnZXRDaGFubmVsUGlucyIsIm1lc3NhZ2VQaW5zIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJwaW5zIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsInByaXZhdGUiLCJnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzIiwiam9pbmVkIiwiZ2V0UHJ1bmVDb3VudCIsInBydW5lIiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwicHVibGljIiwiZ2V0Um9sZXMiLCJnZXRSb2xlIiwiZ2V0U2NoZWR1bGVkRXZlbnQiLCJ3aXRoVXNlckNvdW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsInVzZXJzIiwiZ2V0U2Vzc2lvbkluZm8iLCJnZXRTdGFnZUluc3RhbmNlIiwiZ2V0T3duVm9pY2VTdGF0ZSIsImdldFVzZXJWb2ljZVN0YXRlIiwiZ2V0U3RpY2tlciIsImdldEd1aWxkU3RpY2tlciIsImdldEd1aWxkU3RpY2tlcnMiLCJnZXRUaHJlYWRNZW1iZXIiLCJnZXRVc2VyIiwiZ2V0VGhyZWFkTWVtYmVycyIsImdldFJlYWN0aW9ucyIsImdldEN1cnJlbnRVc2VyIiwiZ2V0VXNlckNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbnMiLCJnZXRVc2VyQXBwbGljYXRpb25Sb2xlQ29ubmVjdGlvbiIsInJvbGVDb25uZWN0aW9ucyIsImdldFZhbml0eVVybCIsInZhbml0eSIsImdldFZvaWNlUmVnaW9ucyIsImdldFdlYmhvb2siLCJnZXRXZWJob29rTWVzc2FnZSIsImdldFdlYmhvb2tXaXRoVG9rZW4iLCJnZXRXZWxjb21lU2NyZWVuIiwiZ2V0V2lkZ2V0Iiwid2lkZ2V0SnNvbiIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsIm1lIiwibGVhdmVHdWlsZCIsImxlYXZlIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsImNyb3NzcG9zdCIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJyZW1vdmVEbVJlY2lwaWVudCIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsImludGVyYWN0aW9uSWQiLCJwYXJhbXMiLCJjYWxsYmFjayIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJnZXRQb2xsQW5zd2VyVm90ZXJzIiwiYW5zd2VySWQiLCJwb2xscyIsInZvdGVzIiwiZW5kUG9sbCIsImV4cGlyZSIsInN5bmNHdWlsZFRlbXBsYXRlIiwiYmFuTWVtYmVyIiwiYnVsa0Jhbk1lbWJlcnMiLCJidWxrQmFuIiwiZWRpdEJvdE1lbWJlciIsImVkaXRNZW1iZXIiLCJnZXRNZW1iZXIiLCJnZXRDdXJyZW50TWVtYmVyIiwiY3VycmVudE1lbWJlciIsImdldE1lbWJlcnMiLCJnZXRBcHBsaWNhdGlvbkFjdGl2aXR5SW5zdGFuY2UiLCJpbnN0YW5jZUlkIiwiYXBwbGljYXRpb25BY3Rpdml0eUluc3RhbmNlIiwia2lja01lbWJlciIsInBpbk1lc3NhZ2UiLCJtZXNzYWdlUGluIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInF1ZXJ5Iiwic2VhcmNoIiwiZ2V0R3VpbGRPbmJvYXJkaW5nIiwib25ib2FyZGluZyIsImVkaXRHdWlsZE9uYm9hcmRpbmciLCJtb2RpZnlHdWlsZEluY2lkZW50QWN0aW9ucyIsImluY2lkZW50QWN0aW9ucyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInR5cGluZyIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJlZGl0VXNlckFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb24iLCJhZGRHdWlsZE1lbWJlciIsImNyZWF0ZVRlc3RFbnRpdGxlbWVudCIsIm1vbmV0aXphdGlvbiIsImVudGl0bGVtZW50cyIsImxpc3RFbnRpdGxlbWVudHMiLCJnZXRFbnRpdGxlbWVudCIsImVudGl0bGVtZW50SWQiLCJlbnRpdGxlbWVudCIsImRlbGV0ZVRlc3RFbnRpdGxlbWVudCIsImNvbnN1bWVFbnRpdGxlbWVudCIsImxpc3RTa3VzIiwic2t1cyIsImxpc3RTdWJzY3JpcHRpb25zIiwic2t1SWQiLCJzdWJzY3JpcHRpb25zIiwiZ2V0U3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uSWQiLCJzdWJzY3JpcHRpb24iLCJzZW5kU291bmRib2FyZFNvdW5kIiwic291bmRib2FyZCIsInNlbmRTb3VuZCIsImxpc3REZWZhdWx0U291bmRib2FyZFNvdW5kcyIsImxpc3REZWZhdWx0IiwibGlzdEd1aWxkU291bmRib2FyZFNvdW5kcyIsImd1aWxkU291bmRzIiwiZ2V0R3VpbGRTb3VuZGJvYXJkU291bmQiLCJzb3VuZElkIiwiZ3VpbGRTb3VuZCIsImNyZWF0ZUd1aWxkU291bmRib2FyZFNvdW5kIiwibW9kaWZ5R3VpbGRTb3VuZGJvYXJkU291bmQiLCJkZWxldGVHdWlsZFNvdW5kYm9hcmRTb3VuZCIsImxpc3RBcHBsaWNhdGlvblJvbGVDb25uZWN0aW9uc01ldGFkYXRhUmVjb3JkcyIsImFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25NZXRhZGF0YSIsInVwZGF0ZUFwcGxpY2F0aW9uUm9sZUNvbm5lY3Rpb25zTWV0YWRhdGFSZWNvcmRzIiwiY3JlYXRlTG9iYnkiLCJsb2JieSIsImdldExvYmJ5IiwibG9iYnlJZCIsIm1vZGlmeUxvYmJ5IiwiZGVsZXRlTG9iYnkiLCJhZGRNZW1iZXJUb0xvYmJ5IiwicmVtb3ZlTWVtYmVyRnJvbUxvYmJ5IiwibGVhdmVMb2JieSIsImxpbmtDaGFubmVsVG9Mb2JieSIsImxpbmsiLCJ1bmxpbmtDaGFubmVsVG9Mb2JieSIsInByZWZlclNuYWtlQ2FzZSIsImVuYWJsZWQiLCJjYW1lbGl6ZXIiLCJ4IiwiSHR0cFJlc3BvbnNlQ29kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFnRmFBO2VBQUFBOztRQUZBQztlQUFBQTs7UUFEQUM7ZUFBQUE7O1FBT0FDO2VBQUFBOztRQURBQztlQUFBQTs7UUFFQUM7ZUFBQUE7O1FBSkFDO2VBQUFBOztRQUNBQztlQUFBQTs7UUFJQUM7ZUFBQUE7O1FBRUdDO2VBQUFBOzs7NEJBeEZPOzBCQUNzQjt1QkFzRXRDOytCQUNvQzt1QkFDckI7d0JBQ087QUFHdEIsTUFB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