appium 2.0.0-beta.41 → 2.0.0-beta.44

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.
Files changed (50) hide show
  1. package/build/lib/appium.d.ts +0 -1
  2. package/build/lib/appium.d.ts.map +1 -1
  3. package/build/lib/appium.js +1 -1
  4. package/build/lib/cli/args.js +2 -2
  5. package/build/lib/cli/driver-command.d.ts +2 -1
  6. package/build/lib/cli/driver-command.d.ts.map +1 -1
  7. package/build/lib/cli/driver-command.js +5 -3
  8. package/build/lib/cli/extension-command.d.ts +5 -1
  9. package/build/lib/cli/extension-command.d.ts.map +1 -1
  10. package/build/lib/cli/extension-command.js +5 -4
  11. package/build/lib/cli/extension.d.ts +8 -4
  12. package/build/lib/cli/extension.d.ts.map +1 -1
  13. package/build/lib/cli/extension.js +2 -1
  14. package/build/lib/cli/parser.d.ts +5 -1
  15. package/build/lib/cli/parser.d.ts.map +1 -1
  16. package/build/lib/cli/parser.js +19 -6
  17. package/build/lib/cli/plugin-command.d.ts +2 -1
  18. package/build/lib/cli/plugin-command.d.ts.map +1 -1
  19. package/build/lib/cli/plugin-command.js +5 -3
  20. package/build/lib/config-file.d.ts.map +1 -1
  21. package/build/lib/config-file.js +5 -3
  22. package/build/lib/config.d.ts +1 -0
  23. package/build/lib/config.d.ts.map +1 -1
  24. package/build/lib/config.js +19 -4
  25. package/build/lib/main.d.ts.map +1 -1
  26. package/build/lib/main.js +21 -31
  27. package/build/lib/schema/cli-transformers.d.ts.map +1 -1
  28. package/build/lib/schema/cli-transformers.js +2 -2
  29. package/build/lib/utils.d.ts +8 -0
  30. package/build/lib/utils.d.ts.map +1 -1
  31. package/build/lib/utils.js +62 -1
  32. package/build/tsconfig.tsbuildinfo +1 -1
  33. package/build/types/cli.d.ts +12 -0
  34. package/build/types/cli.d.ts.map +1 -1
  35. package/lib/appium.js +5 -0
  36. package/lib/cli/args.js +2 -2
  37. package/lib/cli/driver-command.js +2 -2
  38. package/lib/cli/extension-command.js +5 -3
  39. package/lib/cli/extension.js +16 -4
  40. package/lib/cli/parser.js +27 -5
  41. package/lib/cli/plugin-command.js +2 -2
  42. package/lib/config-file.js +4 -2
  43. package/lib/config.js +22 -2
  44. package/lib/main.js +25 -31
  45. package/lib/schema/cli-transformers.js +3 -2
  46. package/lib/utils.js +60 -0
  47. package/package.json +15 -16
  48. package/types/cli.ts +15 -0
  49. package/test.d.ts +0 -7
  50. package/test.js +0 -13
@@ -197,7 +197,6 @@ export class AppiumDriver extends DriverCore implements SessionHandler {
197
197
  protocol: any;
198
198
  }>;
199
199
  proxyActive(sessionId: any): boolean;
200
- getProxyAvoidList(sessionId: any): [string, RegExp][];
201
200
  canProxy(sessionId: any): boolean;
202
201
  }
203
202
  import { DriverCore } from "@appium/base-driver";
@@ -1 +1 @@
1
- {"version":3,"file":"appium.d.ts","sourceRoot":"","sources":["../../lib/appium.js"],"names":[],"mappings":"AAkyBA;;;GAGG;AACH;IAME,cAOC;IAZD;;OAEG;IACH,MAFU,SAAS,MAAM,CAAC,CAEgB;CAU3C;6BAKY,OAAO,eAAe,EAAE,cAAc;qBACtC,OAAO,eAAe,EAAE,MAAM;0BAC9B,OAAO,eAAe,EAAE,WAAW;8BACnC,OAAO,eAAe,EAAE,eAAe;yBACvC,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;0BAClC,OAAO,eAAe,EAAE,WAAW;2BACnC,OAAO,eAAe,EAAE,YAAY;4BACpC,OAAO,eAAe,EAAE,aAAa;2BACrC,OAAO,2BAA2B,EAAE,YAAY;qBAChD,OAAO,eAAe,EAAE,MAAM;0BAC9B,OAAO,eAAe,EAAE,WAAW;yBACnC,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;6BAClC,OAAO,eAAe,EAAE,cAAc,CAAC,qBAAqB,GAAG,EAAE,CAAC,EAAC,qBAAqB,IAAI,CAAC,CAAC;;;;;;;;;;AAnyB3G;;GAEG;AACH;IAqDE;;OAEG;IACH,kBAFW,UAAU,EAwBpB;IA7ED;;;;;OAKG;IACH,UAFU,OAAO,MAAM,EAAC,cAAc,CAAC,CAEzB;IAEd;;;;;OAKG;IACH,gBAFU,OAAO,MAAM,EAAC,cAAc,EAAE,CAAC,CAErB;IASpB;;;OAGG;IACH,eAFU,IAAI,WAAW,EAAC,MAAM,CAAC,CAEnB;IAEd;;;OAGG;IACH,gBAFU,OAAO,MAAM,EAAC,aAAa,WAAW,CAAC,EAAE,CAAC,CAEhC;IAEpB;;;OAGG;IACH,oBAFU,aAAa,WAAW,CAAC,EAAE,CAEb;IAExB,2BAA2B;IAC3B,cADW,YAAY,CACV;IAEb,2BAA2B;IAC3B,QADW,YAAY,CAChB;IAEP,qEAAqD;IAErD,yBAAyB;IACzB,MADW,UAAU,CAChB;IA+CL,uCAGC;IAED,yEAEC;IAGD;;OAIC;IAGD;;;;;SAKC;IAED,+FAiBC;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,OAAO,MAAM,EAAC,OAAO,CAAC,CAIlC;IAED;;;;;;;;OAQG;IACH,6BAHW,MAAM,GACJ,OAAO,MAAM,EAAC,OAAO,CAAC,GAAC,SAAS,CAgB5C;IAED;;;;;;OAMG;IACH,0BALW,eAAe,WACf,eAAe,mBACf,eAAe;;;;;;;;OAuKzB;IAED;;;;OAIG;IACH,wCAHW,MAAM,kBACN,MAAM,QAsChB;IAED;;;;OAIG;IAEH,qCAJW,WAAW,GACT,QAAQ,UAAU,EAAE,CAAC,CAkBjC;IAED;;OAEG;IACH,yBAFW,MAAM;;;;;;;;OA0ChB;IAED,4CAqBC;IAED;;;;;OAKG;IACH,8BAHY,MAAM,gBAejB;IAED;;;;;;;;;OASG;IACH,wBAJW,MAAM,cACL,MAAM,gBASjB;IAED;;;OAGG;IACH,yBAFa,MAAM,EAAE,CAWpB;IAED;;;;;OAKG;IACH,oBAJW,MAAM,WACF,GAAG,kBA+HjB;IAED;;;;;;;YAwBC;IAED;;;aAoBC;IAED;;;;;;;OAwBC;IAED,qCAGC;IAED,sDAGC;IAED,kCAGC;CACF"}
1
+ {"version":3,"file":"appium.d.ts","sourceRoot":"","sources":["../../lib/appium.js"],"names":[],"mappings":"AAuyBA;;;GAGG;AACH;IAME,cAOC;IAZD;;OAEG;IACH,MAFU,SAAS,MAAM,CAAC,CAEgB;CAU3C;6BAKY,OAAO,eAAe,EAAE,cAAc;qBACtC,OAAO,eAAe,EAAE,MAAM;0BAC9B,OAAO,eAAe,EAAE,WAAW;8BACnC,OAAO,eAAe,EAAE,eAAe;yBACvC,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;0BAClC,OAAO,eAAe,EAAE,WAAW;2BACnC,OAAO,eAAe,EAAE,YAAY;4BACpC,OAAO,eAAe,EAAE,aAAa;2BACrC,OAAO,2BAA2B,EAAE,YAAY;qBAChD,OAAO,eAAe,EAAE,MAAM;0BAC9B,OAAO,eAAe,EAAE,WAAW;yBACnC,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;6BAClC,OAAO,eAAe,EAAE,cAAc,CAAC,qBAAqB,GAAG,EAAE,CAAC,EAAC,qBAAqB,IAAI,CAAC,CAAC;;;;;;;;;;AAxyB3G;;GAEG;AACH;IAqDE;;OAEG;IACH,kBAFW,UAAU,EAwBpB;IA7ED;;;;;OAKG;IACH,UAFU,OAAO,MAAM,EAAC,cAAc,CAAC,CAEzB;IAEd;;;;;OAKG;IACH,gBAFU,OAAO,MAAM,EAAC,cAAc,EAAE,CAAC,CAErB;IASpB;;;OAGG;IACH,eAFU,IAAI,WAAW,EAAC,MAAM,CAAC,CAEnB;IAEd;;;OAGG;IACH,gBAFU,OAAO,MAAM,EAAC,aAAa,WAAW,CAAC,EAAE,CAAC,CAEhC;IAEpB;;;OAGG;IACH,oBAFU,aAAa,WAAW,CAAC,EAAE,CAEb;IAExB,2BAA2B;IAC3B,cADW,YAAY,CACV;IAEb,2BAA2B;IAC3B,QADW,YAAY,CAChB;IAEP,qEAAqD;IAErD,yBAAyB;IACzB,MADW,UAAU,CAChB;IA+CL,uCAGC;IAED,yEAEC;IAGD;;OAIC;IAGD;;;;;SAKC;IAED,+FAiBC;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,OAAO,MAAM,EAAC,OAAO,CAAC,CAIlC;IAED;;;;;;;;OAQG;IACH,6BAHW,MAAM,GACJ,OAAO,MAAM,EAAC,OAAO,CAAC,GAAC,SAAS,CAgB5C;IAED;;;;;;OAMG;IACH,0BALW,eAAe,WACf,eAAe,mBACf,eAAe;;;;;;;;OAuKzB;IAED;;;;OAIG;IACH,wCAHW,MAAM,kBACN,MAAM,QAsChB;IAED;;;;OAIG;IAEH,qCAJW,WAAW,GACT,QAAQ,UAAU,EAAE,CAAC,CAkBjC;IAED;;OAEG;IACH,yBAFW,MAAM;;;;;;;;OA0ChB;IAED,4CAqBC;IAED;;;;;OAKG;IACH,8BAHY,MAAM,gBAejB;IAED;;;;;;;;;OASG;IACH,wBAJW,MAAM,cACL,MAAM,gBASjB;IAED;;;OAGG;IACH,yBAFa,MAAM,EAAE,CAWpB;IAED;;;;;OAKG;IACH,oBAJW,MAAM,WACF,GAAG,kBA+HjB;IAED;;;;;;;YAwBC;IAED;;;aAoBC;IAED;;;;;;;OAwBC;IAED,qCAGC;IAYD,kCAGC;CACF"}
@@ -581,4 +581,4 @@ class NoDriverProxyCommandError extends Error {
581
581
  }
582
582
 
583
583
  exports.NoDriverProxyCommandError = NoDriverProxyCommandError;
584
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwiT2JqZWN0IiwiZnJlZXplIiwiYXV0b21hdGlvbk5hbWUiLCJwcmVzZW5jZSIsImlzU3RyaW5nIiwicGxhdGZvcm1OYW1lIiwic2Vzc2lvbnNMaXN0R3VhcmQiLCJBc3luY0xvY2siLCJwZW5kaW5nRHJpdmVyc0d1YXJkIiwiQXBwaXVtRHJpdmVyIiwiRHJpdmVyQ29yZSIsInNlc3Npb25zIiwicGVuZGluZ0RyaXZlcnMiLCJuZXdDb21tYW5kVGltZW91dE1zIiwicGx1Z2luQ2xhc3NlcyIsInNlc3Npb25QbHVnaW5zIiwic2Vzc2lvbmxlc3NQbHVnaW5zIiwiZHJpdmVyQ29uZmlnIiwic2VydmVyIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiYXJncyIsImNvbnN0cnVjdG9yIiwib3B0cyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsInVwZGF0ZUJ1aWxkSW5mbyIsImUiLCJsb2ciLCJkZWJ1ZyIsIm1lc3NhZ2UiLCJfbG9nIiwiaW5zdGFuY2VOYW1lIiwibmFtZSIsIm5vZGUiLCJnZXRPYmplY3RJZCIsInN1YnN0cmluZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQiLCJzZXNzaW9uRXhpc3RzIiwic2Vzc2lvbklkIiwiZHN0U2Vzc2lvbiIsImRyaXZlckZvclNlc3Npb24iLCJnZXRTdGF0dXMiLCJidWlsZCIsIl8iLCJjbG9uZSIsImdldEJ1aWxkSW5mbyIsImdldFNlc3Npb25zIiwidG9QYWlycyIsIm1hcCIsImlkIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiY2FwcyIsInByaW50TmV3U2Vzc2lvbkFubm91bmNlbWVudCIsImRyaXZlck5hbWUiLCJkcml2ZXJWZXJzaW9uIiwiZHJpdmVyQmFzZVZlcnNpb24iLCJpbmZvIiwiQVBQSVVNX1ZFUiIsImJhc2VWZXJzaW9uIiwiZ2V0Q2xpQXJnc0ZvclBsdWdpbiIsImV4dE5hbWUiLCJwbHVnaW4iLCJnZXRDbGlBcmdzRm9yRHJpdmVyIiwiYWxsQ2xpQXJnc0ZvckV4dCIsImlzRW1wdHkiLCJkZWZhdWx0cyIsImdldERlZmF1bHRzRm9yRXh0ZW5zaW9uIiwiRFJJVkVSX1RZUEUiLCJjbGlBcmdzIiwib21pdEJ5IiwidmFsdWUiLCJrZXkiLCJpc0VxdWFsIiwiY3JlYXRlU2Vzc2lvbiIsImpzb253cENhcHMiLCJyZXFDYXBzIiwidzNjQ2FwYWJpbGl0aWVzIiwiZHJpdmVyRGF0YSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJjbG9uZURlZXAiLCJkZWZhdWx0U2V0dGluZ3MiLCJwdWxsU2V0dGluZ3MiLCJqd3BTZXR0aW5ncyIsInczY1NldHRpbmdzIiwiYWx3YXlzTWF0Y2giLCJmaXJzdE1hdGNoRW50cnkiLCJmaXJzdE1hdGNoIiwiYXNzaWduIiwicHJvdG9jb2wiLCJpbm5lclNlc3Npb25JZCIsImRDYXBzIiwicGFyc2VkQ2FwcyIsInBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyIiwiZGVzaXJlZENhcHMiLCJwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMiLCJwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMiLCJlcnJvciIsIklubmVyRHJpdmVyIiwidmVyc2lvbiIsImZpbmRNYXRjaGluZ0RyaXZlciIsInNlc3Npb25PdmVycmlkZSIsImRlbGV0ZUFsbFNlc3Npb25zIiwicnVubmluZ0RyaXZlcnNEYXRhIiwib3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEiLCJkcml2ZXJJbnN0YW5jZSIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJkZW55SW5zZWN1cmUiLCJhIiwiYWxsb3dJbnNlY3VyZSIsInNlcnZlckhvc3QiLCJhZGRyZXNzIiwic2VydmVyUG9ydCIsInBvcnQiLCJzZXJ2ZXJQYXRoIiwiYmFzZVBhdGgiLCJjdXJTZXNzaW9uRGF0YUZvckRyaXZlciIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJhY3F1aXJlIiwiY29tcGFjdCIsImRydiIsInB1c2giLCJwdWxsIiwiYXR0YWNoVW5leHBlY3RlZFNodXRkb3duSGFuZGxlciIsInN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQiLCJpc1czQ1Byb3RvY29sIiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZVNldHRpbmdzIiwiaXNNanNvbndwUHJvdG9jb2wiLCJvblNodXRkb3duIiwiY2F1c2UiLCJFcnJvciIsIndhcm4iLCJpc0Z1bmN0aW9uIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJkYXRhIiwidmFsdWVzIiwiZmlsdGVyIiwicyIsImRhdHVtIiwiZGVsZXRlU2Vzc2lvbiIsIm90aGVyU2Vzc2lvbnNEYXRhIiwiY3VyQ29uc3RydWN0b3JOYW1lIiwic2Vzc2lvbnNDb3VudCIsInNpemUiLCJmb3JjZSIsInJlYXNvbiIsInV0aWwiLCJwbHVyYWxpemUiLCJjbGVhbnVwUHJvbWlzZXMiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJjbGVhbnVwUHJvbWlzZSIsInBsdWdpbnNGb3JTZXNzaW9uIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2VzIiwicGx1Z2luc1RvSGFuZGxlQ21kIiwiY21kIiwicCIsImhhbmRsZSIsInBsdWdpbkluc3RhbmNlcyIsIlBsdWdpbkNsYXNzIiwiZW50cmllcyIsImV4ZWN1dGVDb21tYW5kIiwiaXNHZXRTdGF0dXMiLCJHRVRfU1RBVFVTX0NPTU1BTkQiLCJpc1VtYnJlbGxhQ21kIiwiaXNBcHBpdW1Ecml2ZXJDb21tYW5kIiwiaXNTZXNzaW9uQ21kIiwiaXNTZXNzaW9uQ29tbWFuZCIsInJlcUZvclByb3h5IiwibGFzdCIsInBvcCIsInBsdWdpbnMiLCJjbWRIYW5kbGVkQnkiLCJkZWZhdWx0IiwiZGVmYXVsdEJlaGF2aW9yIiwibGVuZ3RoIiwicHJveHlDb21tYW5kIiwiTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvciIsIm9yaWdpbmFsVXJsIiwibWV0aG9kIiwiYm9keSIsIkJhc2VEcml2ZXIiLCJwcm90b3R5cGUiLCJjYWxsIiwid3JhcHBlZENtZCIsIndyYXBDb21tYW5kV2l0aFBsdWdpbnMiLCJuZXh0IiwicmVzIiwiZXhlY3V0ZVdyYXBwZWRDb21tYW5kIiwibG9nUGx1Z2luSGFuZGxlclJlcG9ydCIsIkNSRUFURV9TRVNTSU9OX0NPTU1BTkQiLCJmaXJzdCIsIl9uZXh0IiwiZGlkSGFuZGxlIiwiayIsImRpZG50SGFuZGxlIiwiY21kUmVzIiwiY21kRXJyIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsIkRFTEVURV9TRVNTSU9OX0NPTU1BTkQiLCJjb2RlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcGl1bS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7Z2V0QnVpbGRJbmZvLCB1cGRhdGVCdWlsZEluZm8sIEFQUElVTV9WRVJ9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIEJhc2VEcml2ZXIsXG4gIERyaXZlckNvcmUsXG4gIGVycm9ycyxcbiAgaXNTZXNzaW9uQ29tbWFuZCxcbiAgQ1JFQVRFX1NFU1NJT05fQ09NTUFORCxcbiAgREVMRVRFX1NFU1NJT05fQ09NTUFORCxcbiAgR0VUX1NUQVRVU19DT01NQU5ELFxufSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQge3BhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBwdWxsU2V0dGluZ3N9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHt1dGlsLCBub2RlLCBsb2dnZXJ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2dldERlZmF1bHRzRm9yRXh0ZW5zaW9ufSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQge0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRX0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEludmFyaWFudCBzZXQgb2YgYmFzZSBjb25zdHJhaW50c1xuICogQHR5cGUge1JlYWRvbmx5PENvbnN0cmFpbnRzPn1cbiAqL1xuY29uc3QgZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyA9IE9iamVjdC5mcmVlemUoe1xuICBhdXRvbWF0aW9uTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBwbGF0Zm9ybU5hbWU6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5jb25zdCBzZXNzaW9uc0xpc3RHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IHBlbmRpbmdEcml2ZXJzR3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbi8qKlxuICogQGltcGxlbWVudHMge1Nlc3Npb25IYW5kbGVyfVxuICovXG5jbGFzcyBBcHBpdW1Ecml2ZXIgZXh0ZW5kcyBEcml2ZXJDb3JlIHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0byBzZXNzaW9ucyBsaXN0IG11c3QgYmUgZ3VhcmRlZCB3aXRoIGEgU2VtYXBob3JlLCBiZWNhdXNlXG4gICAqIGl0IG1pZ2h0IGJlIGNoYW5nZWQgYnkgb3RoZXIgYXN5bmMgY2FsbHMgYXQgYW55IHRpbWVcbiAgICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsRXh0ZXJuYWxEcml2ZXI+fVxuICAgKi9cbiAgc2Vzc2lvbnMgPSB7fTtcblxuICAvKipcbiAgICogQWNjZXNzIHRvIHBlbmRpbmcgZHJpdmVycyBsaXN0IG11c3QgYmUgZ3VhcmRlZCB3aXRoIGEgU2VtYXBob3JlLCBiZWNhdXNlXG4gICAqIGl0IG1pZ2h0IGJlIGNoYW5nZWQgYnkgb3RoZXIgYXN5bmMgY2FsbHMgYXQgYW55IHRpbWVcbiAgICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsRXh0ZXJuYWxEcml2ZXJbXT59XG4gICAqL1xuICBwZW5kaW5nRHJpdmVycyA9IHt9O1xuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQge0BsaW5rY29kZSBBcHBpdW1Ecml2ZXJ9IGhhcyBubyBgbmV3Q29tbWFuZFRpbWVvdXRgIG1ldGhvZC5cbiAgICogYEFwcGl1bURyaXZlcmAgZG9lcyBub3Qgc2V0IGFuZCBvYnNlcnZlIGl0cyBvd24gdGltZW91dHM7IGluZGl2aWR1YWxcbiAgICogc2Vzc2lvbnMgKG1hbmFnZWQgZHJpdmVycykgZG8gaW5zdGVhZC5cbiAgICovXG4gIG5ld0NvbW1hbmRUaW1lb3V0TXMgPSAwO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFjdGl2ZSBwbHVnaW5zXG4gICAqIEB0eXBlIHtNYXA8UGx1Z2luQ2xhc3Msc3RyaW5nPn1cbiAgICovXG4gIHBsdWdpbkNsYXNzZXM7XG5cbiAgLyoqXG4gICAqIG1hcCBvZiBzZXNzaW9ucyB0byBhY3R1YWwgcGx1Z2luIGluc3RhbmNlcyBwZXIgc2Vzc2lvblxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxJbnN0YW5jZVR5cGU8UGx1Z2luQ2xhc3M+W10+fVxuICAgKi9cbiAgc2Vzc2lvblBsdWdpbnMgPSB7fTtcblxuICAvKipcbiAgICogc29tZSBjb21tYW5kcyBhcmUgc2Vzc2lvbmxlc3MsIHNvIHdlIG5lZWQgYSBzZXQgb2YgcGx1Z2lucyBmb3IgdGhlbVxuICAgKiBAdHlwZSB7SW5zdGFuY2VUeXBlPFBsdWdpbkNsYXNzPltdfVxuICAgKi9cbiAgc2Vzc2lvbmxlc3NQbHVnaW5zID0gW107XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJDb25maWd9ICovXG4gIGRyaXZlckNvbmZpZztcblxuICAvKiogQHR5cGUge0FwcGl1bVNlcnZlcn0gKi9cbiAgc2VydmVyO1xuXG4gIGRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHM7XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJPcHRzfSAqL1xuICBhcmdzO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RyaXZlck9wdHN9IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gc2V0IGAtLXRtcGAgaGVyZSBzaW5jZSBpdCBzaG91bGQgYmUgc2V0IHRvXG4gICAgLy8gcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgb25jZSBhdCBhbiBpbml0aWFsIHBvaW50IGluIHRoZSBBcHBpdW0gbGlmZWN5Y2xlLlxuICAgIC8vIFRoZSBwcm9jZXNzIGFyZ3VtZW50IHdpbGwgYmUgcmVmZXJlbmNlZCBieSBCYXNlRHJpdmVyLlxuICAgIC8vIFBsZWFzZSBjYWxsIEBhcHBpdW0vc3VwcG9ydC50ZW1wRGlyIG1vZHVsZSB0byBhcHBseSB0aGlzIGJlbmVmaXQuXG4gICAgaWYgKG9wdHMudG1wRGlyKSB7XG4gICAgICBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiA9IG9wdHMudG1wRGlyO1xuICAgIH1cblxuICAgIHN1cGVyKG9wdHMpO1xuXG4gICAgdGhpcy5hcmdzID0gey4uLm9wdHN9O1xuXG4gICAgLy8gYWxsb3cgdGhpcyB0byBoYXBwZW4gaW4gdGhlIGJhY2tncm91bmQsIHNvIG5vIGBhd2FpdGBcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBjYXRjaCBhbnkgcG9zc2libGUgZXJyb3JzIHRvIGF2b2lkIHVuaGFuZGxlZCByZWplY3Rpb25zXG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDYW5ub3QgZmV0Y2ggQXBwaXVtIGJ1aWxkIGluZm86ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGxvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGN1cnJlbnQgdW1icmVsbGEgZHJpdmVyIGluc3RhbmNlXG4gICAqL1xuICBnZXQgbG9nKCkge1xuICAgIGlmICghdGhpcy5fbG9nKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9QCR7bm9kZS5nZXRPYmplY3RJZCh0aGlzKS5zdWJzdHJpbmcoMCwgNCl9YDtcbiAgICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoaW5zdGFuY2VOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2xvZztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgY29tbWFuZHMgcXVldWVpbmcgZm9yIHRoZSB1bWJyZWxsYSBBcHBpdW0gZHJpdmVyXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXNzaW9uRXhpc3RzKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5zZXNzaW9uSWQgIT09IG51bGw7XG4gIH1cblxuICBkcml2ZXJGb3JTZXNzaW9uKHNlc3Npb25JZCkge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuICBhc3luYyBnZXRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkOiBfLmNsb25lKGdldEJ1aWxkSW5mbygpKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbiAgYXN5bmMgZ2V0U2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIF8udG9QYWlycyh0aGlzLnNlc3Npb25zKS5tYXAoKFtpZCwgZHJpdmVyXSkgPT4gKHtcbiAgICAgIGlkLFxuICAgICAgY2FwYWJpbGl0aWVzOiBkcml2ZXIuY2FwcyxcbiAgICB9KSk7XG4gIH1cblxuICBwcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoZHJpdmVyTmFtZSwgZHJpdmVyVmVyc2lvbiwgZHJpdmVyQmFzZVZlcnNpb24pIHtcbiAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgZHJpdmVyVmVyc2lvblxuICAgICAgICA/IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gKHYke2RyaXZlclZlcnNpb259KSBzZXNzaW9uYFxuICAgICAgICA6IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gc2Vzc2lvbmBcbiAgICApO1xuICAgIHRoaXMubG9nLmluZm8oYENoZWNraW5nIEJhc2VEcml2ZXIgdmVyc2lvbnMgZm9yIEFwcGl1bSBhbmQgJHtkcml2ZXJOYW1lfWApO1xuICAgIHRoaXMubG9nLmluZm8oXG4gICAgICBBcHBpdW1Ecml2ZXIuYmFzZVZlcnNpb25cbiAgICAgICAgPyBgQXBwaXVtJ3MgQmFzZURyaXZlciB2ZXJzaW9uIGlzICR7QXBwaXVtRHJpdmVyLmJhc2VWZXJzaW9ufWBcbiAgICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSBBcHBpdW0ncyBCYXNlRHJpdmVyIHZlcnNpb25gXG4gICAgKTtcbiAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgZHJpdmVyQmFzZVZlcnNpb25cbiAgICAgICAgPyBgJHtkcml2ZXJOYW1lfSdzIEJhc2VEcml2ZXIgdmVyc2lvbiBpcyAke2RyaXZlckJhc2VWZXJzaW9ufWBcbiAgICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSAke2RyaXZlck5hbWV9J3MgQmFzZURyaXZlciB2ZXJzaW9uYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBDTEkgYXJndW1lbnRzIGZvciBhIHNwZWNpZmljIHBsdWdpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBQbHVnaW4gbmFtZVxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gQXJndW1lbnRzIG9iamVjdC4gSWYgbm9uZSwgYW4gZW1wdHkgb2JqZWN0LlxuICAgKi9cbiAgZ2V0Q2xpQXJnc0ZvclBsdWdpbihleHROYW1lKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gKi8gKHRoaXMuYXJncy5wbHVnaW4/LltleHROYW1lXSA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIENMSSBhcmdzIGZvciBhIHNwZWNpZmljIGRyaXZlci5cbiAgICpcbiAgICogX0FueSBhcmcgd2hpY2ggaXMgZXF1YWwgdG8gaXRzIGRlZmF1bHQgdmFsdWUgd2lsbCBub3QgYmUgcHJlc2VudCBpbiB0aGUgcmV0dXJuZWQgb2JqZWN0Ll9cbiAgICpcbiAgICogX05vdGUgdGhhdCB0aGlzIGJlaGF2aW9yIGN1cnJlbnRseSAoTWF5IDE4IDIwMjIpIGRpZmZlcnMgZnJvbSBob3cgcGx1Z2lucyBhcmUgaGFuZGxlZF8gKHNlZSB7QGxpbmtjb2RlIEFwcGl1bURyaXZlci5nZXRDbGlBcmdzRm9yUGx1Z2lufSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRHJpdmVyIG5hbWVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsdW5rbm93bj58dW5kZWZpbmVkfSBBcmd1bWVudHMgb2JqZWN0LiBJZiBub25lLCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgZ2V0Q2xpQXJnc0ZvckRyaXZlcihleHROYW1lKSB7XG4gICAgY29uc3QgYWxsQ2xpQXJnc0ZvckV4dCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyx1bmtub3duPnx1bmRlZmluZWR9ICovIChcbiAgICAgIHRoaXMuYXJncy5kcml2ZXI/LltleHROYW1lXVxuICAgICk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eShhbGxDbGlBcmdzRm9yRXh0KSkge1xuICAgICAgY29uc3QgZGVmYXVsdHMgPSBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbihEUklWRVJfVFlQRSwgZXh0TmFtZSk7XG4gICAgICBjb25zdCBjbGlBcmdzID0gXy5pc0VtcHR5KGRlZmF1bHRzKVxuICAgICAgICA/IGFsbENsaUFyZ3NGb3JFeHRcbiAgICAgICAgOiBfLm9taXRCeShhbGxDbGlBcmdzRm9yRXh0LCAodmFsdWUsIGtleSkgPT4gXy5pc0VxdWFsKGRlZmF1bHRzW2tleV0sIHZhbHVlKSk7XG4gICAgICBpZiAoIV8uaXNFbXB0eShjbGlBcmdzKSkge1xuICAgICAgICByZXR1cm4gY2xpQXJncztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHNlc3Npb25cbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IGpzb253cENhcHMgSlNPTldQIGZvcm1hdHRlZCBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllc30gcmVxQ2FwcyBSZXF1aXJlZCBjYXBhYmlsaXRpZXMgKEpTT05XUCBzdGFuZGFyZClcbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcGFiaWxpdGllcyBXM0MgY2FwYWJpbGl0aWVzXG4gICAqIEBwYXJhbSB7RHJpdmVyRGF0YVtdfSBbZHJpdmVyRGF0YV1cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24oanNvbndwQ2FwcywgcmVxQ2FwcywgdzNjQ2FwYWJpbGl0aWVzLCBkcml2ZXJEYXRhKSB7XG4gICAgY29uc3QgZGVmYXVsdENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHRoaXMuYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKTtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSBwdWxsU2V0dGluZ3MoZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gICAganNvbndwQ2FwcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcHMpO1xuICAgIGNvbnN0IGp3cFNldHRpbmdzID0gey4uLmRlZmF1bHRTZXR0aW5ncywgLi4ucHVsbFNldHRpbmdzKGpzb253cENhcHMpfTtcbiAgICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBvbmx5IHByb3ZpZGVzIGNhcHMgdXNpbmcgSlNPTldQIHN0YW5kYXJkLFxuICAgIC8vIGFsdGhvdWdoIGZpcnN0TWF0Y2gvYWx3YXlzTWF0Y2ggcHJvcGVydGllcyBhcmUgc3RpbGwgcHJlc2VudC5cbiAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgYXNzdW1lIHRoZSBjbGllbnQgdW5kZXJzdGFuZHMgVzNDIHByb3RvY29sIGFuZCBtZXJnZSB0aGUgZ2l2ZW5cbiAgICAvLyBKU09OV1AgY2FwcyB0byBXM0MgY2Fwc1xuICAgIGNvbnN0IHczY1NldHRpbmdzID0ge1xuICAgICAgLi4uandwU2V0dGluZ3MsXG4gICAgICAuLi5wdWxsU2V0dGluZ3MoKHczY0NhcGFiaWxpdGllcyA/PyB7fSkuYWx3YXlzTWF0Y2ggPz8ge30pLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgKHczY0NhcGFiaWxpdGllcyA/PyB7fSkuZmlyc3RNYXRjaCA/PyBbXSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih3M2NTZXR0aW5ncywgcHVsbFNldHRpbmdzKGZpcnN0TWF0Y2hFbnRyeSkpO1xuICAgIH1cblxuICAgIGxldCBwcm90b2NvbDtcbiAgICBsZXQgaW5uZXJTZXNzaW9uSWQsIGRDYXBzO1xuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSB0aGUgY2FwcyBpbnRvIGEgZm9ybWF0IHRoYXQgdGhlIElubmVyRHJpdmVyIHdpbGwgYWNjZXB0XG4gICAgICBjb25zdCBwYXJzZWRDYXBzID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoXG4gICAgICAgIGpzb253cENhcHMsXG4gICAgICAgIHczY0NhcGFiaWxpdGllcyxcbiAgICAgICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMsXG4gICAgICAgIGRlZmF1bHRDYXBhYmlsaXRpZXNcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHtkZXNpcmVkQ2FwcywgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXN9ID1cbiAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdXRpbHMnKS5QYXJzZWREcml2ZXJDYXBzfSAqLyAocGFyc2VkQ2Fwcyk7XG4gICAgICBwcm90b2NvbCA9IHBhcnNlZENhcHMucHJvdG9jb2w7XG4gICAgICBjb25zdCBlcnJvciA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuL3V0aWxzJykuSW52YWxpZENhcHN9ICovIChwYXJzZWRDYXBzKS5lcnJvcjtcbiAgICAgIC8vIElmIHRoZSBwYXJzaW5nIG9mIHRoZSBjYXBzIHByb2R1Y2VkIGFuIGVycm9yLCB0aHJvdyBpdCBpbiBoZXJlXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZHJpdmVyOiBJbm5lckRyaXZlcixcbiAgICAgICAgdmVyc2lvbjogZHJpdmVyVmVyc2lvbixcbiAgICAgICAgZHJpdmVyTmFtZSxcbiAgICAgIH0gPSB0aGlzLmRyaXZlckNvbmZpZy5maW5kTWF0Y2hpbmdEcml2ZXIoZGVzaXJlZENhcHMpO1xuICAgICAgdGhpcy5wcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoSW5uZXJEcml2ZXIubmFtZSwgZHJpdmVyVmVyc2lvbiwgSW5uZXJEcml2ZXIuYmFzZVZlcnNpb24pO1xuXG4gICAgICBpZiAodGhpcy5hcmdzLnNlc3Npb25PdmVycmlkZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbFNlc3Npb25zKCk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0RyaXZlckRhdGFbXX1cbiAgICAgICAqL1xuICAgICAgbGV0IHJ1bm5pbmdEcml2ZXJzRGF0YSA9IFtdO1xuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7RHJpdmVyRGF0YVtdfVxuICAgICAgICovXG4gICAgICBsZXQgb3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEgPSBbXTtcblxuICAgICAgY29uc3QgZHJpdmVySW5zdGFuY2UgPSBuZXcgSW5uZXJEcml2ZXIodGhpcy5hcmdzLCB0cnVlKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBhc3NpZ24gc2VjdXJpdHkgdmFsdWVzIGRpcmVjdGx5IG9uIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXJcbiAgICAgIC8vIHNob3VsZCBub3QgcmVhZCBzZWN1cml0eSB2YWx1ZXMgZnJvbSBgdGhpcy5vcHRzYCBiZWNhdXNlIHRob3NlIHZhbHVlc1xuICAgICAgLy8gY291bGQgaGF2ZSBiZWVuIHNldCBieSBhIG1hbGljaW91cyB1c2VyIHZpYSBjYXBhYmlsaXRpZXMsIHdoZXJlYXMgd2VcbiAgICAgIC8vIHdhbnQgYSBndWFyYW50ZWUgdGhlIHZhbHVlcyB3ZXJlIHNldCBieSB0aGUgYXBwaXVtIHNlcnZlciBhZG1pblxuICAgICAgaWYgKHRoaXMuYXJncy5yZWxheGVkU2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgYEFwcGx5aW5nIHJlbGF4ZWQgc2VjdXJpdHkgdG8gJyR7SW5uZXJEcml2ZXIubmFtZX0nIGFzIHBlciBgICtcbiAgICAgICAgICAgIGBzZXJ2ZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBBbGwgaW5zZWN1cmUgZmVhdHVyZXMgd2lsbCBiZSBgICtcbiAgICAgICAgICAgIGBlbmFibGVkIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkIGJ5IC0tZGVueS1pbnNlY3VyZWBcbiAgICAgICAgKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuYXJncy5kZW55SW5zZWN1cmUpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0V4cGxpY2l0bHkgcHJldmVudGluZyB1c2Ugb2YgaW5zZWN1cmUgZmVhdHVyZXM6Jyk7XG4gICAgICAgIHRoaXMuYXJncy5kZW55SW5zZWN1cmUubWFwKChhKSA9PiB0aGlzLmxvZy5pbmZvKGAgICAgJHthfWApKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UuZGVueUluc2VjdXJlID0gdGhpcy5hcmdzLmRlbnlJbnNlY3VyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5hcmdzLmFsbG93SW5zZWN1cmUpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0V4cGxpY2l0bHkgZW5hYmxpbmcgdXNlIG9mIGluc2VjdXJlIGZlYXR1cmVzOicpO1xuICAgICAgICB0aGlzLmFyZ3MuYWxsb3dJbnNlY3VyZS5tYXAoKGEpID0+IHRoaXMubG9nLmluZm8oYCAgICAke2F9YCkpO1xuICAgICAgICBkcml2ZXJJbnN0YW5jZS5hbGxvd0luc2VjdXJlID0gdGhpcy5hcmdzLmFsbG93SW5zZWN1cmU7XG4gICAgICB9XG5cbiAgICAgIC8vIExpa2V3aXNlLCBhbnkgZHJpdmVyLXNwZWNpZmljIENMSSBhcmdzIHRoYXQgd2VyZSBwYXNzZWQgaW4gc2hvdWxkIGJlIGFzc2lnbmVkIGRpcmVjdGx5IHRvXG4gICAgICAvLyB0aGUgZHJpdmVyIHNvIHRoYXQgdGhleSBjYW5ub3QgYmUgbWltaWNrZWQgYnkgYSBtYWxpY2lvdXMgdXNlciBzZW5kaW5nIGluIGNhcGFiaWxpdGllc1xuICAgICAgY29uc3QgY2xpQXJncyA9IHRoaXMuZ2V0Q2xpQXJnc0ZvckRyaXZlcihkcml2ZXJOYW1lKTtcbiAgICAgIGlmICghXy5pc0VtcHR5KGNsaUFyZ3MpKSB7XG4gICAgICAgIGRyaXZlckluc3RhbmNlLmNsaUFyZ3MgPSBjbGlBcmdzO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGFzc2lnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3Qgd2ViIHNvY2tldHMgZnVuY3Rpb25hbGl0eSBpbnNpZGUgdGhlIGRyaXZlclxuICAgICAgLy8gRHJpdmVycy9wbHVnaW5zIG1pZ2h0IGFsc28gd2FudCB0byBrbm93IHdoZXJlIHRoZXkgYXJlIGhvc3RlZFxuXG4gICAgICAvLyBYWFg6IHRlbXBvcmFyeSBoYWNrIHRvIHdvcmsgYXJvdW5kICMxNjc0N1xuICAgICAgZHJpdmVySW5zdGFuY2Uuc2VydmVyID0gdGhpcy5zZXJ2ZXI7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJIb3N0ID0gdGhpcy5hcmdzLmFkZHJlc3M7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQb3J0ID0gdGhpcy5hcmdzLnBvcnQ7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQYXRoID0gdGhpcy5hcmdzLmJhc2VQYXRoO1xuXG4gICAgICB0cnkge1xuICAgICAgICBydW5uaW5nRHJpdmVyc0RhdGEgPSAoYXdhaXQgdGhpcy5jdXJTZXNzaW9uRGF0YUZvckRyaXZlcihJbm5lckRyaXZlcikpID8/IFtdO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdID0gdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXSB8fCBbXTtcbiAgICAgICAgb3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEgPSBfLmNvbXBhY3QoXG4gICAgICAgICAgdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXS5tYXAoKGRydikgPT4gZHJ2LmRyaXZlckRhdGEpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0ucHVzaChkcml2ZXJJbnN0YW5jZSk7XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgW2lubmVyU2Vzc2lvbklkLCBkQ2Fwc10gPSBhd2FpdCBkcml2ZXJJbnN0YW5jZS5jcmVhdGVTZXNzaW9uKFxuICAgICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgICByZXFDYXBzLFxuICAgICAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICAgICAgICBbLi4ucnVubmluZ0RyaXZlcnNEYXRhLCAuLi5vdGhlclBlbmRpbmdEcml2ZXJzRGF0YV1cbiAgICAgICAgKTtcbiAgICAgICAgcHJvdG9jb2wgPSBkcml2ZXJJbnN0YW5jZS5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF0gPSBkcml2ZXJJbnN0YW5jZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICAgIF8ucHVsbCh0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdLCBkcml2ZXJJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIoZHJpdmVySW5zdGFuY2UsIGlubmVyU2Vzc2lvbklkKTtcblxuICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgYE5ldyAke0lubmVyRHJpdmVyLm5hbWV9IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHksIHNlc3Npb24gYCArXG4gICAgICAgICAgYCR7aW5uZXJTZXNzaW9uSWR9IGFkZGVkIHRvIG1hc3RlciBzZXNzaW9uIGxpc3RgXG4gICAgICApO1xuXG4gICAgICAvLyBzZXQgdGhlIE5ldyBDb21tYW5kIFRpbWVvdXQgZm9yIHRoZSBpbm5lciBkcml2ZXJcbiAgICAgIGRyaXZlckluc3RhbmNlLnN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgICAgLy8gYXBwbHkgaW5pdGlhbCB2YWx1ZXMgdG8gQXBwaXVtIHNldHRpbmdzIChpZiBwcm92aWRlZClcbiAgICAgIGlmIChkcml2ZXJJbnN0YW5jZS5pc1czQ1Byb3RvY29sKCkgJiYgIV8uaXNFbXB0eSh3M2NTZXR0aW5ncykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgICBgQXBwbHlpbmcgdGhlIGluaXRpYWwgdmFsdWVzIHRvIEFwcGl1bSBzZXR0aW5ncyBwYXJzZWQgZnJvbSBXM0MgY2FwczogYCArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh3M2NTZXR0aW5ncylcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgZHJpdmVySW5zdGFuY2UudXBkYXRlU2V0dGluZ3ModzNjU2V0dGluZ3MpO1xuICAgICAgfSBlbHNlIGlmIChkcml2ZXJJbnN0YW5jZS5pc01qc29ud3BQcm90b2NvbCgpICYmICFfLmlzRW1wdHkoandwU2V0dGluZ3MpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgYEFwcGx5aW5nIHRoZSBpbml0aWFsIHZhbHVlcyB0byBBcHBpdW0gc2V0dGluZ3MgcGFyc2VkIGZyb20gTUpTT05XUCBjYXBzOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGp3cFNldHRpbmdzKVxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBkcml2ZXJJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyhqd3BTZXR0aW5ncyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBlcnJvcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmFsdWU6IFtpbm5lclNlc3Npb25JZCwgZENhcHMsIHByb3RvY29sXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RHJpdmVyfSBkcml2ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlubmVyU2Vzc2lvbklkXG4gICAqL1xuICBhdHRhY2hVbmV4cGVjdGVkU2h1dGRvd25IYW5kbGVyKGRyaXZlciwgaW5uZXJTZXNzaW9uSWQpIHtcbiAgICBjb25zdCBvblNodXRkb3duID0gKGNhdXNlID0gbmV3IEVycm9yKCdVbmtub3duIGVycm9yJykpID0+IHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEVuZGluZyBzZXNzaW9uLCBjYXVzZSB3YXMgJyR7Y2F1c2UubWVzc2FnZX0nYCk7XG5cbiAgICAgIGlmICh0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgICAgICAgIGBQbHVnaW4gJHtwbHVnaW4ubmFtZX0gZGVmaW5lcyBhbiB1bmV4cGVjdGVkIHNodXRkb3duIGhhbmRsZXI7IGNhbGxpbmcgaXQgbm93YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHBsdWdpbi5vblVuZXhwZWN0ZWRTaHV0ZG93bihkcml2ZXIsIGNhdXNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2cud2FybihcbiAgICAgICAgICAgICAgICBgR290IGFuIGVycm9yIHdoZW4gcnVubmluZyBwbHVnaW4gJHtwbHVnaW4ubmFtZX0gc2h1dGRvd24gaGFuZGxlcjogJHtlfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFBsdWdpbiAke3BsdWdpbi5uYW1lfSBkb2VzIG5vdCBkZWZpbmUgYW4gdW5leHBlY3RlZCBzaHV0ZG93biBoYW5kbGVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYFJlbW92aW5nIHNlc3Npb24gJyR7aW5uZXJTZXNzaW9uSWR9JyBmcm9tIG91ciBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF07XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uUGx1Z2luc1tpbm5lclNlc3Npb25JZF07XG4gICAgfTtcblxuICAgIGlmIChfLmlzRnVuY3Rpb24oZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKG9uU2h1dGRvd24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy53YXJuKFxuICAgICAgICBgRmFpbGVkIHRvIGF0dGFjaCB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biBsaXN0ZW5lci4gYCArXG4gICAgICAgICAgYElzICdvblVuZXhwZWN0ZWRTaHV0ZG93bicgbWV0aG9kIGF2YWlsYWJsZSBmb3IgJyR7ZHJpdmVyLmNvbnN0cnVjdG9yLm5hbWV9Jz9gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0RyaXZlckNsYXNzfSBJbm5lckRyaXZlclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEcml2ZXJEYXRhW10+fX1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG4gIGFzeW5jIGN1clNlc3Npb25EYXRhRm9yRHJpdmVyKElubmVyRHJpdmVyKSB7XG4gICAgY29uc3QgZGF0YSA9IF8uY29tcGFjdChcbiAgICAgIF8udmFsdWVzKHRoaXMuc2Vzc2lvbnMpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMuY29uc3RydWN0b3IubmFtZSA9PT0gSW5uZXJEcml2ZXIubmFtZSlcbiAgICAgICAgLm1hcCgocykgPT4gcy5kcml2ZXJEYXRhKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBkYXR1bSBvZiBkYXRhKSB7XG4gICAgICBpZiAoIWRhdHVtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUHJvYmxlbSBnZXR0aW5nIHNlc3Npb24gZGF0YSBmb3IgZHJpdmVyIHR5cGUgYCArXG4gICAgICAgICAgICBgJHtJbm5lckRyaXZlci5uYW1lfTsgZG9lcyBpdCBpbXBsZW1lbnQgJ2dldCBkcml2ZXJEYXRhJz9gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWRcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24oc2Vzc2lvbklkKSB7XG4gICAgbGV0IHByb3RvY29sO1xuICAgIHRyeSB7XG4gICAgICBsZXQgb3RoZXJTZXNzaW9uc0RhdGE7XG4gICAgICBjb25zdCBkc3RTZXNzaW9uID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJDb25zdHJ1Y3Rvck5hbWUgPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF0uY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgb3RoZXJTZXNzaW9uc0RhdGEgPSBfLnRvUGFpcnModGhpcy5zZXNzaW9ucylcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUuY29uc3RydWN0b3IubmFtZSA9PT0gY3VyQ29uc3RydWN0b3JOYW1lICYmIGtleSAhPT0gc2Vzc2lvbklkXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUuZHJpdmVyRGF0YSk7XG4gICAgICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgICAgIHByb3RvY29sID0gZHN0U2Vzc2lvbi5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmVtb3Zpbmcgc2Vzc2lvbiAke3Nlc3Npb25JZH0gZnJvbSBvdXIgbWFzdGVyIHNlc3Npb24gbGlzdGApO1xuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGRlbGV0ZVNlc3Npb24gY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBvciBub3RcbiAgICAgICAgLy8gbWFrZSB0aGUgc2Vzc2lvbiB1bmF2YWlsYWJsZSwgYmVjYXVzZSB3aG8ga25vd3Mgd2hhdCBzdGF0ZSBpdCBtaWdodFxuICAgICAgICAvLyBiZSBpbiBvdGhlcndpc2VcbiAgICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXTtcbiAgICAgICAgcmV0dXJuIGRzdFNlc3Npb247XG4gICAgICB9KTtcbiAgICAgIC8vIHRoaXMgbWF5IG5vdCBiZSBjb3JyZWN0LCBidXQgaWYgYGRzdFNlc3Npb25gIHdhcyBmYWxzeSwgdGhlIGNhbGwgdG8gYGRlbGV0ZVNlc3Npb24oKWAgd291bGRcbiAgICAgIC8vIHRocm93IGFueXdheS5cbiAgICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gbm90IGZvdW5kJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmFsdWU6IGF3YWl0IGRzdFNlc3Npb24uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQsIG90aGVyU2Vzc2lvbnNEYXRhKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoYEhhZCB0cm91YmxlIGVuZGluZyBzZXNzaW9uICR7c2Vzc2lvbklkfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3I6IGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbFNlc3Npb25zKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHNlc3Npb25zQ291bnQgPSBfLnNpemUodGhpcy5zZXNzaW9ucyk7XG4gICAgaWYgKDAgPT09IHNlc3Npb25zQ291bnQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdUaGVyZSBhcmUgbm8gYWN0aXZlIHNlc3Npb25zIGZvciBjbGVhbnVwJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2ZvcmNlID0gZmFsc2UsIHJlYXNvbn0gPSBvcHRzO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB1cCAke3V0aWwucGx1cmFsaXplKCdhY3RpdmUgc2Vzc2lvbicsIHNlc3Npb25zQ291bnQsIHRydWUpfWApO1xuICAgIGNvbnN0IGNsZWFudXBQcm9taXNlcyA9IGZvcmNlXG4gICAgICA/IF8udmFsdWVzKHRoaXMuc2Vzc2lvbnMpLm1hcCgoZHJ2KSA9PlxuICAgICAgICAgIGRydi5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihyZWFzb24gJiYgbmV3IEVycm9yKHJlYXNvbikpXG4gICAgICAgIClcbiAgICAgIDogXy5rZXlzKHRoaXMuc2Vzc2lvbnMpLm1hcCgoaWQpID0+IHRoaXMuZGVsZXRlU2Vzc2lvbihpZCkpO1xuICAgIGZvciAoY29uc3QgY2xlYW51cFByb21pc2Ugb2YgY2xlYW51cFByb21pc2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjbGVhbnVwUHJvbWlzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXBwcm9wcmlhdGUgcGx1Z2lucyBmb3IgYSBzZXNzaW9uIChvciBzZXNzaW9ubGVzcyBwbHVnaW5zKVxuICAgKlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBzZXNzaW9uSWQgKG9yIG51bGwpIHRvIHVzZSB0byBmaW5kIHBsdWdpbnNcbiAgICogQHJldHVybnMge0FycmF5fSAtIGFycmF5IG9mIHBsdWdpbiBpbnN0YW5jZXNcbiAgICovXG4gIHBsdWdpbnNGb3JTZXNzaW9uKHNlc3Npb25JZCA9IG51bGwpIHtcbiAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICB0aGlzLnNlc3Npb25QbHVnaW5zW3Nlc3Npb25JZF0gPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zKSkge1xuICAgICAgdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnMgPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnM7XG4gIH1cblxuICAvKipcbiAgICogVG8gZ2V0IHBsdWdpbnMgZm9yIGEgY29tbWFuZCwgd2UgZWl0aGVyIGdldCB0aGUgcGx1Z2luIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAqIHBhcnRpY3VsYXIgY29tbWFuZCdzIHNlc3Npb24sIG9yIGluIHRoZSBjYXNlIG9mIHNlc3Npb25sZXNzIHBsdWdpbnMsIHB1bGwgZnJvbSB0aGUgc2V0IG9mXG4gICAqIHBsdWdpbiBpbnN0YW5jZXMgcmVzZXJ2ZWQgZm9yIHNlc3Npb25sZXNzIGNvbW1hbmRzIChhbmQgd2UgbGF6aWx5IGNyZWF0ZSBwbHVnaW4gaW5zdGFuY2VzIG9uXG4gICAqIGZpcnN0IHVzZSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNtZCAtIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRvIGZpbmQgYSBwbHVnaW4gdG8gaGFuZGxlXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIHBhcnRpY3VsYXIgc2Vzc2lvbiBmb3Igd2hpY2ggdG8gZmluZCBhIHBsdWdpbiwgb3IgbnVsbCBpZlxuICAgKiBzZXNzaW9ubGVzc1xuICAgKi9cbiAgcGx1Z2luc1RvSGFuZGxlQ21kKGNtZCwgc2Vzc2lvbklkID0gbnVsbCkge1xuICAgIC8vIHRvIGhhbmRsZSBhIGdpdmVuIGNvbW1hbmQsIGEgcGx1Z2luIHNob3VsZCBlaXRoZXIgaW1wbGVtZW50IHRoYXQgY29tbWFuZCBhcyBhIHBsdWdpblxuICAgIC8vIGluc3RhbmNlIG1ldGhvZCBvciBpdCBzaG91bGQgaW1wbGVtZW50IGEgZ2VuZXJpYyAnaGFuZGxlJyBtZXRob2RcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5zRm9yU2Vzc2lvbihzZXNzaW9uSWQpLmZpbHRlcihcbiAgICAgIChwKSA9PiBfLmlzRnVuY3Rpb24ocFtjbWRdKSB8fCBfLmlzRnVuY3Rpb24ocC5oYW5kbGUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGluc3RhbmNlcyBvZiBhbGwgb2YgdGhlIGVuYWJsZWQgUGx1Z2luIGNsYXNzZXNcbiAgICogQHJldHVybnMge1BsdWdpbltdfVxuICAgKi9cbiAgY3JlYXRlUGx1Z2luSW5zdGFuY2VzKCkge1xuICAgIC8qKiBAdHlwZSB7UGx1Z2luW119ICovXG4gICAgY29uc3QgcGx1Z2luSW5zdGFuY2VzID0gW107XG4gICAgZm9yIChjb25zdCBbUGx1Z2luQ2xhc3MsIG5hbWVdIG9mIHRoaXMucGx1Z2luQ2xhc3Nlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaUFyZ3MgPSB0aGlzLmdldENsaUFyZ3NGb3JQbHVnaW4obmFtZSk7XG4gICAgICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luQ2xhc3MobmFtZSwgY2xpQXJncyk7XG4gICAgICBwbHVnaW5JbnN0YW5jZXMucHVzaChwbHVnaW4pO1xuICAgIH1cbiAgICByZXR1cm4gcGx1Z2luSW5zdGFuY2VzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtICB7Li4uYW55fSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHt2YWx1ZTogYW55LCBlcnJvcj86IEVycm9yLCBwcm90b2NvbDogc3RyaW5nfSB8IGltcG9ydCgndHlwZS1mZXN0JykuQXN5bmNSZXR1cm5UeXBlPERyaXZlclsnZXhlY3V0ZUNvbW1hbmQnXT4+fVxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gV2UgaGF2ZSBiYXNpY2FsbHkgdGhyZWUgY2FzZXMgZm9yIGhvdyB0byBoYW5kbGUgY29tbWFuZHM6XG4gICAgLy8gMS4gaGFuZGxlIGdldFN0YXR1cyAod2UgZG8gdGhpcyBhcyBhIHNwZWNpYWwgb3V0IG9mIGJhbmQgY2FzZSBzbyBpdCBkb2Vzbid0IGdldCBhZGRlZCB0byBhblxuICAgIC8vICAgIGV4ZWN1dGlvbiBxdWV1ZSwgYW5kIGNhbiBiZSBjYWxsZWQgd2hpbGUgZS5nLiBjcmVhdGVTZXNzaW9uIGlzIGluIHByb2dyZXNzKVxuICAgIC8vIDIuIGhhbmRsZSBjb21tYW5kcyB0aGF0IHRoaXMgdW1icmVsbGEgZHJpdmVyIHNob3VsZCBoYW5kbGUsIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2Vzc2lvblxuICAgIC8vICAgIGRyaXZlciAoZm9yIGV4YW1wbGUsIGRlbGV0ZVNlc3Npb24sIG9yIG90aGVyIG5vbi1zZXNzaW9uIGNvbW1hbmRzKVxuICAgIC8vIDMuIGhhbmRsZSBzZXNzaW9uIGRyaXZlciBjb21tYW5kcy5cbiAgICAvLyBUaGUgdHJpY2t5IHBhcnQgaXMgdGhhdCBiZWNhdXNlIHdlIHN1cHBvcnQgY29tbWFuZCBwbHVnaW5zLCB3ZSBuZWVkIHRvIHdyYXAgYW55IG9mIHRoZXNlXG4gICAgLy8gY2FzZXMgd2l0aCBwbHVnaW4gaGFuZGxpbmcuXG5cbiAgICBjb25zdCBpc0dldFN0YXR1cyA9IGNtZCA9PT0gR0VUX1NUQVRVU19DT01NQU5EO1xuICAgIGNvbnN0IGlzVW1icmVsbGFDbWQgPSBpc0FwcGl1bURyaXZlckNvbW1hbmQoY21kKTtcbiAgICBjb25zdCBpc1Nlc3Npb25DbWQgPSBpc1Nlc3Npb25Db21tYW5kKGNtZCk7XG5cbiAgICAvLyBpZiBhIHBsdWdpbiBvdmVycmlkZSBwcm94eWluZyBmb3IgdGhpcyBjb21tYW5kIGFuZCB0aGF0IGlzIHdoeSB3ZSBhcmUgaGVyZSBpbnN0ZWFkIG9mIGp1c3RcbiAgICAvLyBsZXR0aW5nIHRoZSBwcm90b2NvbCBwcm94eSB0aGUgY29tbWFuZCBlbnRpcmVseSwgZGV0ZXJtaW5lIHRoYXQsIGdldCB0aGUgcmVxdWVzdCBvYmplY3QgZm9yXG4gICAgLy8gdXNlIGxhdGVyIG9uLCB0aGVuIGNsZWFuIHVwIHRoZSBhcmdzXG4gICAgY29uc3QgcmVxRm9yUHJveHkgPSBfLmxhc3QoYXJncyk/LnJlcUZvclByb3h5O1xuICAgIGlmIChyZXFGb3JQcm94eSkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCBkbyBzb21lIGVycm9yIGNoZWNraW5nLiBJZiB3ZSdyZSByZXF1ZXN0aW5nIGEgc2Vzc2lvbiBjb21tYW5kIGV4ZWN1dGlvbiwgdGhlbiBtYWtlXG4gICAgLy8gc3VyZSB0aGF0IHNlc3Npb24gYWN0dWFsbHkgZXhpc3RzIG9uIHRoZSBzZXNzaW9uIGRyaXZlciwgYW5kIHNldCB0aGUgc2Vzc2lvbiBkcml2ZXIgaXRzZWxmXG4gICAgbGV0IHNlc3Npb25JZCA9IG51bGw7XG4gICAgbGV0IGRzdFNlc3Npb24gPSBudWxsO1xuICAgIGxldCBwcm90b2NvbCA9IG51bGw7XG4gICAgLyoqIEB0eXBlIHt0aGlzIHwgRXh0ZXJuYWxEcml2ZXJ9ICovXG4gICAgbGV0IGRyaXZlciA9IHRoaXM7XG4gICAgaWYgKGlzU2Vzc2lvbkNtZCkge1xuICAgICAgc2Vzc2lvbklkID0gXy5sYXN0KGFyZ3MpO1xuICAgICAgZHN0U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXNzaW9uIHdpdGggaWQgJyR7c2Vzc2lvbklkfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgIH1cbiAgICAgIC8vIG5vdyBzYXZlIHRoZSByZXNwb25zZSBwcm90b2NvbCBnaXZlbiB0aGF0IHRoZSBzZXNzaW9uIGRyaXZlcidzIHByb3RvY29sIG1pZ2h0IGRpZmZlclxuICAgICAgcHJvdG9jb2wgPSBkc3RTZXNzaW9uLnByb3RvY29sO1xuICAgICAgaWYgKCFpc1VtYnJlbGxhQ21kKSB7XG4gICAgICAgIGRyaXZlciA9IGRzdFNlc3Npb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFueSBwbHVnaW5zIHdoaWNoIGFyZSByZWdpc3RlcmVkIGFzIGhhbmRsaW5nIHRoaXMgY29tbWFuZFxuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnNUb0hhbmRsZUNtZChjbWQsIHNlc3Npb25JZCk7XG5cbiAgICAvLyBub3cgd2UgZGVmaW5lIGEgJ2NtZEhhbmRsZWRCeScgb2JqZWN0IHdoaWNoIHdpbGwga2VlcCB0cmFjayBvZiB3aGljaCBwbHVnaW5zIGhhdmUgaGFuZGxlZCB0aGlzXG4gICAgLy8gY29tbWFuZC4gd2UgY2FyZSBhYm91dCB0aGlzIGJlY2F1c2UgKGEpIG11bHRpcGxlIHBsdWdpbnMgY2FuIGhhbmRsZSB0aGUgc2FtZSBjb21tYW5kLCBhbmRcbiAgICAvLyAoYikgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCBhIHBsdWdpbiB3aWxsIGFjdHVhbGx5IGNhbGwgdGhlIG5leHQoKSBtZXRob2Qgd2hpY2ggcnVucyB0aGVcbiAgICAvLyBvcmlnaW5hbCBjb21tYW5kIGV4ZWN1dGlvbi4gVGhpcyByZXN1bHRzIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBjb21tYW5kIG1pZ2h0IGJlIGhhbmRsZWRcbiAgICAvLyBieSBzb21lIGJ1dCBub3QgYWxsIHBsdWdpbnMsIG9yIGJ5IHBsdWdpbihzKSBidXQgbm90IGJ5IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBTbyBzdGFydCBvdXRcbiAgICAvLyB0aGlzIG9iamVjdCBkZWNsYXJpbmcgdGhhdCB0aGUgZGVmYXVsdCBoYW5kbGVyIGhhcyBub3QgYmVlbiBleGVjdXRlZC5cbiAgICBjb25zdCBjbWRIYW5kbGVkQnkgPSB7ZGVmYXVsdDogZmFsc2V9O1xuXG4gICAgLy8gbm93IHdlIGRlZmluZSBhbiBhc3luYyBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBwbHVnaW5zLCBhbmQgc3VjY2Vzc2l2ZWx5IHdyYXBwZWRcbiAgICAvLyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBsdWdpbiB0aGF0IGNhbiBoYW5kbGUgdGhlIGNvbW1hbmQuIFRvIHN0YXJ0IG9mZiB3aXRoLCB0aGUgYXN5bmNcbiAgICAvLyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGNhbGxpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIGkuZS4sIHdoaWNoZXZlciBvZiB0aGUgMyBjYXNlcyBhYm92ZSBpc1xuICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBvbmVcbiAgICBjb25zdCBkZWZhdWx0QmVoYXZpb3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBpZiB3ZSdyZSBydW5uaW5nIHdpdGggcGx1Z2lucywgbWFrZSBzdXJlIHdlIGxvZyB0aGF0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGFjdHVhbGx5XG4gICAgICAvLyBoYXBwZW5pbmcgc28gd2UgY2FuIHRlbGwgd2hlbiB0aGUgcGx1Z2luIGNhbGwgY2hhaW4gaXMgdW53cmFwcGluZyB0byB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgICAgLy8gaWYgdGhhdCdzIHdoYXQgaGFwcGVuc1xuICAgICAgcGx1Z2lucy5sZW5ndGggJiYgdGhpcy5sb2cuaW5mbyhgRXhlY3V0aW5nIGRlZmF1bHQgaGFuZGxpbmcgYmVoYXZpb3IgZm9yIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgICAgLy8gaWYgd2UgbWFrZSBpdCBoZXJlLCB3ZSBrbm93IHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgaGFuZGxlZFxuICAgICAgY21kSGFuZGxlZEJ5LmRlZmF1bHQgPSB0cnVlO1xuXG4gICAgICBpZiAocmVxRm9yUHJveHkpIHtcbiAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSBwcm94aWVkIHRoaXMgY29tbWFuZCBoYWQgYSBwbHVnaW4gbm90IGhhbmRsZWQgaXQsIHNvIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAgICAgIC8vIGlzIHRvIGRvIHRoZSBwcm94eSBhbmQgcmV0cmlldmUgdGhlIHJlc3VsdCBpbnRlcm5hbGx5IHNvIGl0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBsdWdpblxuICAgICAgICAvLyBpbiBjYXNlIGl0IGNhbGxzICdhd2FpdCBuZXh0KCknLiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGRyaXZlciBoYXZlIGRlZmluZWRcbiAgICAgICAgLy8gJ3Byb3h5Q29tbWFuZCcgYW5kIG5vdCBqdXN0ICdwcm94eVJlcVJlcycuXG4gICAgICAgIGlmICghZHN0U2Vzc2lvbi5wcm94eUNvbW1hbmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBkc3RTZXNzaW9uLnByb3h5Q29tbWFuZChcbiAgICAgICAgICByZXFGb3JQcm94eS5vcmlnaW5hbFVybCxcbiAgICAgICAgICByZXFGb3JQcm94eS5tZXRob2QsXG4gICAgICAgICAgcmVxRm9yUHJveHkuYm9keVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNHZXRTdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1VtYnJlbGxhQ21kKSB7XG4gICAgICAgIC8vIHNvbWUgY29tbWFuZHMsIGxpa2UgZGVsZXRlU2Vzc2lvbiwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdG8gaGFuZGxlIG9uICp0aGlzKiBkcml2ZXIsXG4gICAgICAgIC8vIG5vdCB0aGUgcGxhdGZvcm0gZHJpdmVyXG4gICAgICAgIHJldHVybiBhd2FpdCBCYXNlRHJpdmVyLnByb3RvdHlwZS5leGVjdXRlQ29tbWFuZC5jYWxsKHRoaXMsIGNtZCwgLi4uYXJncyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGhlcmUgd2Uga25vdyB0aGF0IHdlIGFyZSBleGVjdXRpbmcgYSBzZXNzaW9uIGNvbW1hbmQsIGFuZCBoYXZlIGEgdmFsaWQgc2Vzc2lvbiBkcml2ZXJcbiAgICAgIHJldHVybiBhd2FpdCBkc3RTZXNzaW9uLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gICAgfTtcblxuICAgIC8vIG5vdyB0YWtlIG91ciBkZWZhdWx0IGJlaGF2aW9yLCB3cmFwIGl0IHdpdGggYW55IG51bWJlciBvZiBwbHVnaW4gYmVoYXZpb3JzLCBhbmQgcnVuIGl0XG4gICAgY29uc3Qgd3JhcHBlZENtZCA9IHRoaXMud3JhcENvbW1hbmRXaXRoUGx1Z2lucyh7XG4gICAgICBkcml2ZXIsXG4gICAgICBjbWQsXG4gICAgICBhcmdzLFxuICAgICAgcGx1Z2lucyxcbiAgICAgIGNtZEhhbmRsZWRCeSxcbiAgICAgIG5leHQ6IGRlZmF1bHRCZWhhdmlvcixcbiAgICB9KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVXcmFwcGVkQ29tbWFuZCh7d3JhcHBlZENtZCwgcHJvdG9jb2x9KTtcblxuICAgIC8vIGlmIHdlIGhhZCBwbHVnaW5zLCBtYWtlIHN1cmUgdG8gbG9nIG91dCB0aGUgaGVscGZ1bCByZXBvcnQgYWJvdXQgd2hpY2ggcGx1Z2lucyBlbmRlZCB1cFxuICAgIC8vIGhhbmRsaW5nIHRoZSBjb21tYW5kIGFuZCB3aGljaCBkaWRuJ3RcbiAgICB0aGlzLmxvZ1BsdWdpbkhhbmRsZXJSZXBvcnQocGx1Z2lucywge2NtZCwgY21kSGFuZGxlZEJ5fSk7XG5cbiAgICAvLyBBbmQgZmluYWxseSwgaWYgdGhlIGNvbW1hbmQgd2FzIGNyZWF0ZVNlc3Npb24sIHdlIHdhbnQgdG8gbWlncmF0ZSBhbnkgcGx1Z2lucyB3aGljaCB3ZXJlXG4gICAgLy8gcHJldmlvdXNseSBzZXNzaW9ubGVzcyB0byB1c2UgdGhlIG5ldyBzZXNzaW9uSWQsIHNvIHRoYXQgcGx1Z2lucyBjYW4gc2hhcmUgc3RhdGUgYmV0d2VlblxuICAgIC8vIHRoZWlyIGNyZWF0ZVNlc3Npb24gbWV0aG9kIGFuZCBvdGhlciBpbnN0YW5jZSBtZXRob2RzXG4gICAgaWYgKGNtZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCAmJiB0aGlzLnNlc3Npb25sZXNzUGx1Z2lucy5sZW5ndGggJiYgIXJlcy5lcnJvcikge1xuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gXy5maXJzdChyZXMudmFsdWUpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgYFByb21vdGluZyAke3RoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zLmxlbmd0aH0gc2Vzc2lvbmxlc3MgcGx1Z2lucyB0byBiZSBhdHRhY2hlZCBgICtcbiAgICAgICAgICBgdG8gc2Vzc2lvbiBJRCAke3Nlc3Npb25JZH1gXG4gICAgICApO1xuICAgICAgdGhpcy5zZXNzaW9uUGx1Z2luc1tzZXNzaW9uSWRdID0gdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnM7XG4gICAgICB0aGlzLnNlc3Npb25sZXNzUGx1Z2lucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICB3cmFwQ29tbWFuZFdpdGhQbHVnaW5zKHtkcml2ZXIsIGNtZCwgYXJncywgbmV4dCwgY21kSGFuZGxlZEJ5LCBwbHVnaW5zfSkge1xuICAgIHBsdWdpbnMubGVuZ3RoICYmXG4gICAgICB0aGlzLmxvZy5pbmZvKGBQbHVnaW5zIHdoaWNoIGNhbiBoYW5kbGUgY21kICcke2NtZH0nOiAke3BsdWdpbnMubWFwKChwKSA9PiBwLm5hbWUpfWApO1xuXG4gICAgLy8gbm93IHdlIGNhbiBnbyB0aHJvdWdoIGVhY2ggcGx1Z2luIGFuZCB3cmFwIGBuZXh0YCBhcm91bmQgaXRzIG93biBoYW5kbGVyLCBwYXNzaW5nIHRoZSAqb2xkKlxuICAgIC8vIG5leHQgaW4gc28gdGhhdCBpdCBjYW4gY2FsbCBpdCBpZiBpdCB3YW50cyB0b1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIC8vIG5lZWQgYW4gSUlGRSBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdmFsdWUgb2YgbmV4dCB0aGF0J3MgcGFzc2VkIHRvIHBsdWdpbi5oYW5kbGUgdG8gYmVcbiAgICAgIC8vIGV4YWN0bHkgdGhlIHZhbHVlIG9mIG5leHQgaGVyZSBiZWZvcmUgcmVhc3NpZ25tZW50OyB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIGxhemlseVxuICAgICAgLy8gZXZhbHVhdGVkLCBvdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggaW5maW5pdGUgcmVjdXJzaW9uIG9mIHRoZSBsYXN0IGBuZXh0YCB0byBiZSBkZWZpbmVkLlxuICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IGZhbHNlOyAvLyB3ZSBzZWUgYSBuZXcgcGx1Z2luLCBzbyBhZGQgaXQgdG8gdGhlICdjbWRIYW5kbGVkQnknIG9iamVjdFxuICAgICAgbmV4dCA9ICgoX25leHQpID0+IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUGx1Z2luICR7cGx1Z2luLm5hbWV9IGlzIG5vdyBoYW5kbGluZyBjbWQgJyR7Y21kfSdgKTtcbiAgICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IHRydWU7IC8vIGlmIHdlIG1ha2UgaXQgaGVyZSwgdGhpcyBwbHVnaW4gaGFzIGF0dGVtcHRlZCB0byBoYW5kbGUgY21kXG4gICAgICAgIC8vIGZpcnN0IGF0dGVtcHQgdG8gaGFuZGxlIHRoZSBjb21tYW5kIHZpYSBhIGNvbW1hbmQtc3BlY2lmaWMgaGFuZGxlciBvbiB0aGUgcGx1Z2luXG4gICAgICAgIGlmIChwbHVnaW5bY21kXSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW5bY21kXShfbmV4dCwgZHJpdmVyLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGNhbGwgdGhlIGdlbmVyaWMgJ2hhbmRsZScgbWV0aG9kXG4gICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW4uaGFuZGxlKF9uZXh0LCBkcml2ZXIsIGNtZCwgLi4uYXJncyk7XG4gICAgICB9KShuZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIGxvZ1BsdWdpbkhhbmRsZXJSZXBvcnQocGx1Z2lucywge2NtZCwgY21kSGFuZGxlZEJ5fSkge1xuICAgIGlmICghcGx1Z2lucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBkYXksIHdlIGhhdmUgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB3aGljaCBwbHVnaW5zIGVuZGVkIHVwIGdldHRpbmdcbiAgICAvLyB0aGVpciBjb2RlIHJ1biBhcyBwYXJ0IG9mIGhhbmRsaW5nIHRoaXMgY29tbWFuZC4gQmVjYXVzZSBwbHVnaW5zIGNhbiBjaG9vc2UgKm5vdCogdG9cbiAgICAvLyBwYXNzIGNvbnRyb2wgdG8gb3RoZXIgcGx1Z2lucyBvciB0byB0aGUgZGVmYXVsdCBkcml2ZXIgYmVoYXZpb3IsIHRoaXMgaXMgaW5mb3JtYXRpb25cbiAgICAvLyB3aGljaCBpcyBwcm9iYWJseSB1c2VmdWwgdG8gdGhlIHVzZXIgKGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBwbHVnaW5zIG1pZ2h0IG5vdFxuICAgIC8vIGludGVyYWN0IHdlbGwgdG9nZXRoZXIsIGFuZCBpdCB3b3VsZCBiZSBoYXJkIHRvIGRlYnVnIG90aGVyd2lzZSB3aXRob3V0IHRoaXMga2luZCBvZlxuICAgIC8vIG1lc3NhZ2UpLlxuICAgIGNvbnN0IGRpZEhhbmRsZSA9IE9iamVjdC5rZXlzKGNtZEhhbmRsZWRCeSkuZmlsdGVyKChrKSA9PiBjbWRIYW5kbGVkQnlba10pO1xuICAgIGNvbnN0IGRpZG50SGFuZGxlID0gT2JqZWN0LmtleXMoY21kSGFuZGxlZEJ5KS5maWx0ZXIoKGspID0+ICFjbWRIYW5kbGVkQnlba10pO1xuICAgIGlmIChkaWRudEhhbmRsZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgICBgQ29tbWFuZCAnJHtjbWR9JyB3YXMgKm5vdCogaGFuZGxlZCBieSB0aGUgZm9sbG93aW5nIGJlaGF2aW91cnMgb3IgcGx1Z2lucywgZXZlbiBgICtcbiAgICAgICAgICBgdGhvdWdoIHRoZXkgd2VyZSByZWdpc3RlcmVkIHRvIGhhbmRsZSBpdDogJHtKU09OLnN0cmluZ2lmeShkaWRudEhhbmRsZSl9LiBUaGUgYCArXG4gICAgICAgICAgYGNvbW1hbmQgKndhcyogaGFuZGxlZCBieSB0aGVzZTogJHtKU09OLnN0cmluZ2lmeShkaWRIYW5kbGUpfS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVXcmFwcGVkQ29tbWFuZCh7d3JhcHBlZENtZCwgcHJvdG9jb2x9KSB7XG4gICAgbGV0IGNtZFJlcyxcbiAgICAgIGNtZEVycixcbiAgICAgIHJlcyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyBBdCB0aGlzIHBvaW50LCBgd3JhcHBlZENtZGAgZGVmaW5lcyBhIHdob2xlIHNlcXVlbmNlIG9mIHBsdWdpbiBoYW5kbGVycywgY3VsbWluYXRpbmcgaW5cbiAgICAgIC8vIG91ciBkZWZhdWx0IGhhbmRsZXIuIFdoYXRldmVyIGl0IHJldHVybnMgaXMgd2hhdCB3ZSdyZSBnb2luZyB0byB3YW50IHRvIHNlbmQgYmFjayB0byB0aGVcbiAgICAgIC8vIHVzZXIuXG4gICAgICBjbWRSZXMgPSBhd2FpdCB3cmFwcGVkQ21kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY21kRXJyID0gZTtcbiAgICB9XG5cbiAgICAvLyBTYWRseSwgd2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQga2luZCBvZiBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4gSXQgd2lsbCBlaXRoZXIgYmUgYSBiYXJlXG4gICAgLy8gb2JqZWN0LCBvciBhIHByb3RvY29sLWF3YXJlIG9iamVjdCB3aXRoIHByb3RvY29sIGFuZCBlcnJvci92YWx1ZSBrZXlzLiBTbyB3ZSBuZWVkIHRvIHNuaWZmXG4gICAgLy8gaXQgYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBkb3VibGUtd3JhcCBpdCBpZiBpdCdzIHRoZSBsYXR0ZXIga2luZC5cbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNtZFJlcykgJiYgXy5oYXMoY21kUmVzLCAncHJvdG9jb2wnKSkge1xuICAgICAgcmVzID0gY21kUmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBjbWRSZXM7XG4gICAgICByZXMuZXJyb3IgPSBjbWRFcnI7XG4gICAgICByZXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3h5QWN0aXZlKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgXy5pc0Z1bmN0aW9uKGRzdFNlc3Npb24ucHJveHlBY3RpdmUpICYmIGRzdFNlc3Npb24ucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcbiAgfVxuXG4gIGdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gPyBkc3RTZXNzaW9uLmdldFByb3h5QXZvaWRMaXN0KCkgOiBbXTtcbiAgfVxuXG4gIGNhblByb3h5KHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5jYW5Qcm94eShzZXNzaW9uSWQpO1xuICB9XG59XG5cbi8vIGhlbHAgZGVjaWRlIHdoaWNoIGNvbW1hbmRzIHNob3VsZCBiZSBwcm94aWVkIHRvIHN1Yi1kcml2ZXJzIGFuZCB3aGljaFxuLy8gc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhpcywgb3VyIHVtYnJlbGxhIGRyaXZlclxuZnVuY3Rpb24gaXNBcHBpdW1Ecml2ZXJDb21tYW5kKGNtZCkge1xuICByZXR1cm4gIWlzU2Vzc2lvbkNvbW1hbmQoY21kKSB8fCBjbWQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQ7XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gQXBwaXVtIHRyaWVkIHRvIHByb3h5IGEgY29tbWFuZCB1c2luZyBhIGRyaXZlcidzIGBwcm94eUNvbW1hbmRgIG1ldGhvZCBidXQgdGhlXG4gKiBtZXRob2QgZGlkIG5vdCBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgY29kZSA9ICdBUFBJVU1FUlJfTk9fRFJJVkVSX1BST1hZQ09NTUFORCc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBgVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoaXMgY29tbWFuZCB3YXMgdG8gcHJveHksIGJ1dCB0aGUgZHJpdmVyIGAgK1xuICAgICAgICBgZGlkIG5vdCBoYXZlIHRoZSAncHJveHlDb21tYW5kJyBtZXRob2QgZGVmaW5lZC4gVG8gZnVsbHkgc3VwcG9ydCBgICtcbiAgICAgICAgYHBsdWdpbnMsIGRyaXZlcnMgc2hvdWxkIGhhdmUgJ3Byb3h5Q29tbWFuZCcgc2V0IHRvIGEgandwUHJveHkgb2JqZWN0J3MgYCArXG4gICAgICAgIGAnY29tbWFuZCgpJyBtZXRob2QsIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgJ3Byb3h5UmVxUmVzJ2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCB7QXBwaXVtRHJpdmVyfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXh0ZXJuYWxEcml2ZXJ9IEV4dGVybmFsRHJpdmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyfSBEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJDbGFzc30gRHJpdmVyQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckRhdGF9IERyaXZlckRhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXJ2ZXJBcmdzfSBEcml2ZXJPcHRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IENvbnN0cmFpbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtU2VydmVyfSBBcHBpdW1TZXJ2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2V4dGVuc2lvbi9kcml2ZXItY29uZmlnJykuRHJpdmVyQ29uZmlnfSBEcml2ZXJDb25maWdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5QbHVnaW59IFBsdWdpblxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuU2Vzc2lvbkhhbmRsZXI8U2Vzc2lvbkhhbmRsZXJSZXN1bHQ8YW55W10+LFNlc3Npb25IYW5kbGVyUmVzdWx0PHZvaWQ+Pn0gU2Vzc2lvbkhhbmRsZXJcbiAqL1xuXG4vKipcbiAqIFVzZWQgYnkge0BsaW5rY29kZSBBcHBpdW1Ecml2ZXIuY3JlYXRlU2Vzc2lvbn0gYW5kIHtAbGlua2NvZGUgQXBwaXVtRHJpdmVyLmRlbGV0ZVNlc3Npb259IHRvIGRlc2NyaWJlXG4gKiByZXN1bHQuXG4gKiBAdGVtcGxhdGUgVlxuICogQHR5cGVkZWYgU2Vzc2lvbkhhbmRsZXJSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7Vn0gW3ZhbHVlXVxuICogQHByb3BlcnR5IHtFcnJvcn0gW2Vycm9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcm90b2NvbF1cbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQVNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BLE1BQU1BLDRCQUE0QixHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztFQUNqREMsY0FBYyxFQUFFO0lBQ2RDLFFBQVEsRUFBRSxJQURJO0lBRWRDLFFBQVEsRUFBRTtFQUZJLENBRGlDO0VBS2pEQyxZQUFZLEVBQUU7SUFDWkYsUUFBUSxFQUFFLElBREU7SUFFWkMsUUFBUSxFQUFFO0VB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
584
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNpcmVkQ2FwYWJpbGl0eUNvbnN0cmFpbnRzIiwiT2JqZWN0IiwiZnJlZXplIiwiYXV0b21hdGlvbk5hbWUiLCJwcmVzZW5jZSIsImlzU3RyaW5nIiwicGxhdGZvcm1OYW1lIiwic2Vzc2lvbnNMaXN0R3VhcmQiLCJBc3luY0xvY2siLCJwZW5kaW5nRHJpdmVyc0d1YXJkIiwiQXBwaXVtRHJpdmVyIiwiRHJpdmVyQ29yZSIsInNlc3Npb25zIiwicGVuZGluZ0RyaXZlcnMiLCJuZXdDb21tYW5kVGltZW91dE1zIiwicGx1Z2luQ2xhc3NlcyIsInNlc3Npb25QbHVnaW5zIiwic2Vzc2lvbmxlc3NQbHVnaW5zIiwiZHJpdmVyQ29uZmlnIiwic2VydmVyIiwiZGVzaXJlZENhcENvbnN0cmFpbnRzIiwiYXJncyIsImNvbnN0cnVjdG9yIiwib3B0cyIsInRtcERpciIsInByb2Nlc3MiLCJlbnYiLCJBUFBJVU1fVE1QX0RJUiIsInVwZGF0ZUJ1aWxkSW5mbyIsImUiLCJsb2ciLCJkZWJ1ZyIsIm1lc3NhZ2UiLCJfbG9nIiwiaW5zdGFuY2VOYW1lIiwibmFtZSIsIm5vZGUiLCJnZXRPYmplY3RJZCIsInN1YnN0cmluZyIsImxvZ2dlciIsImdldExvZ2dlciIsImlzQ29tbWFuZHNRdWV1ZUVuYWJsZWQiLCJzZXNzaW9uRXhpc3RzIiwic2Vzc2lvbklkIiwiZHN0U2Vzc2lvbiIsImRyaXZlckZvclNlc3Npb24iLCJnZXRTdGF0dXMiLCJidWlsZCIsIl8iLCJjbG9uZSIsImdldEJ1aWxkSW5mbyIsImdldFNlc3Npb25zIiwidG9QYWlycyIsIm1hcCIsImlkIiwiZHJpdmVyIiwiY2FwYWJpbGl0aWVzIiwiY2FwcyIsInByaW50TmV3U2Vzc2lvbkFubm91bmNlbWVudCIsImRyaXZlck5hbWUiLCJkcml2ZXJWZXJzaW9uIiwiZHJpdmVyQmFzZVZlcnNpb24iLCJpbmZvIiwiQVBQSVVNX1ZFUiIsImJhc2VWZXJzaW9uIiwiZ2V0Q2xpQXJnc0ZvclBsdWdpbiIsImV4dE5hbWUiLCJwbHVnaW4iLCJnZXRDbGlBcmdzRm9yRHJpdmVyIiwiYWxsQ2xpQXJnc0ZvckV4dCIsImlzRW1wdHkiLCJkZWZhdWx0cyIsImdldERlZmF1bHRzRm9yRXh0ZW5zaW9uIiwiRFJJVkVSX1RZUEUiLCJjbGlBcmdzIiwib21pdEJ5IiwidmFsdWUiLCJrZXkiLCJpc0VxdWFsIiwiY3JlYXRlU2Vzc2lvbiIsImpzb253cENhcHMiLCJyZXFDYXBzIiwidzNjQ2FwYWJpbGl0aWVzIiwiZHJpdmVyRGF0YSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJjbG9uZURlZXAiLCJkZWZhdWx0U2V0dGluZ3MiLCJwdWxsU2V0dGluZ3MiLCJqd3BTZXR0aW5ncyIsInczY1NldHRpbmdzIiwiYWx3YXlzTWF0Y2giLCJmaXJzdE1hdGNoRW50cnkiLCJmaXJzdE1hdGNoIiwiYXNzaWduIiwicHJvdG9jb2wiLCJpbm5lclNlc3Npb25JZCIsImRDYXBzIiwicGFyc2VkQ2FwcyIsInBhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyIiwiZGVzaXJlZENhcHMiLCJwcm9jZXNzZWRKc29ud3BDYXBhYmlsaXRpZXMiLCJwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXMiLCJlcnJvciIsIklubmVyRHJpdmVyIiwidmVyc2lvbiIsImZpbmRNYXRjaGluZ0RyaXZlciIsInNlc3Npb25PdmVycmlkZSIsImRlbGV0ZUFsbFNlc3Npb25zIiwicnVubmluZ0RyaXZlcnNEYXRhIiwib3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEiLCJkcml2ZXJJbnN0YW5jZSIsInJlbGF4ZWRTZWN1cml0eUVuYWJsZWQiLCJkZW55SW5zZWN1cmUiLCJhIiwiYWxsb3dJbnNlY3VyZSIsInNlcnZlckhvc3QiLCJhZGRyZXNzIiwic2VydmVyUG9ydCIsInBvcnQiLCJzZXJ2ZXJQYXRoIiwiYmFzZVBhdGgiLCJjdXJTZXNzaW9uRGF0YUZvckRyaXZlciIsImVycm9ycyIsIlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IiLCJhY3F1aXJlIiwiY29tcGFjdCIsImRydiIsInB1c2giLCJwdWxsIiwiYXR0YWNoVW5leHBlY3RlZFNodXRkb3duSGFuZGxlciIsInN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQiLCJpc1czQ1Byb3RvY29sIiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZVNldHRpbmdzIiwiaXNNanNvbndwUHJvdG9jb2wiLCJvblNodXRkb3duIiwiY2F1c2UiLCJFcnJvciIsIndhcm4iLCJpc0Z1bmN0aW9uIiwib25VbmV4cGVjdGVkU2h1dGRvd24iLCJkYXRhIiwidmFsdWVzIiwiZmlsdGVyIiwicyIsImRhdHVtIiwiZGVsZXRlU2Vzc2lvbiIsIm90aGVyU2Vzc2lvbnNEYXRhIiwiY3VyQ29uc3RydWN0b3JOYW1lIiwic2Vzc2lvbnNDb3VudCIsInNpemUiLCJmb3JjZSIsInJlYXNvbiIsInV0aWwiLCJwbHVyYWxpemUiLCJjbGVhbnVwUHJvbWlzZXMiLCJzdGFydFVuZXhwZWN0ZWRTaHV0ZG93biIsImtleXMiLCJjbGVhbnVwUHJvbWlzZSIsInBsdWdpbnNGb3JTZXNzaW9uIiwiY3JlYXRlUGx1Z2luSW5zdGFuY2VzIiwicGx1Z2luc1RvSGFuZGxlQ21kIiwiY21kIiwicCIsImhhbmRsZSIsInBsdWdpbkluc3RhbmNlcyIsIlBsdWdpbkNsYXNzIiwiZW50cmllcyIsImV4ZWN1dGVDb21tYW5kIiwiaXNHZXRTdGF0dXMiLCJHRVRfU1RBVFVTX0NPTU1BTkQiLCJpc1VtYnJlbGxhQ21kIiwiaXNBcHBpdW1Ecml2ZXJDb21tYW5kIiwiaXNTZXNzaW9uQ21kIiwiaXNTZXNzaW9uQ29tbWFuZCIsInJlcUZvclByb3h5IiwibGFzdCIsInBvcCIsInBsdWdpbnMiLCJjbWRIYW5kbGVkQnkiLCJkZWZhdWx0IiwiZGVmYXVsdEJlaGF2aW9yIiwibGVuZ3RoIiwicHJveHlDb21tYW5kIiwiTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvciIsIm9yaWdpbmFsVXJsIiwibWV0aG9kIiwiYm9keSIsIkJhc2VEcml2ZXIiLCJwcm90b3R5cGUiLCJjYWxsIiwid3JhcHBlZENtZCIsIndyYXBDb21tYW5kV2l0aFBsdWdpbnMiLCJuZXh0IiwicmVzIiwiZXhlY3V0ZVdyYXBwZWRDb21tYW5kIiwibG9nUGx1Z2luSGFuZGxlclJlcG9ydCIsIkNSRUFURV9TRVNTSU9OX0NPTU1BTkQiLCJmaXJzdCIsIl9uZXh0IiwiZGlkSGFuZGxlIiwiayIsImRpZG50SGFuZGxlIiwiY21kUmVzIiwiY21kRXJyIiwiaXNQbGFpbk9iamVjdCIsImhhcyIsInByb3h5QWN0aXZlIiwiZ2V0UHJveHlBdm9pZExpc3QiLCJjYW5Qcm94eSIsIkRFTEVURV9TRVNTSU9OX0NPTU1BTkQiLCJjb2RlIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcGl1bS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7Z2V0QnVpbGRJbmZvLCB1cGRhdGVCdWlsZEluZm8sIEFQUElVTV9WRVJ9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIEJhc2VEcml2ZXIsXG4gIERyaXZlckNvcmUsXG4gIGVycm9ycyxcbiAgaXNTZXNzaW9uQ29tbWFuZCxcbiAgQ1JFQVRFX1NFU1NJT05fQ09NTUFORCxcbiAgREVMRVRFX1NFU1NJT05fQ09NTUFORCxcbiAgR0VUX1NUQVRVU19DT01NQU5ELFxufSBmcm9tICdAYXBwaXVtL2Jhc2UtZHJpdmVyJztcbmltcG9ydCBBc3luY0xvY2sgZnJvbSAnYXN5bmMtbG9jayc7XG5pbXBvcnQge3BhcnNlQ2Fwc0ZvcklubmVyRHJpdmVyLCBwdWxsU2V0dGluZ3N9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHt1dGlsLCBub2RlLCBsb2dnZXJ9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQge2dldERlZmF1bHRzRm9yRXh0ZW5zaW9ufSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQge0RSSVZFUl9UWVBFLCBQTFVHSU5fVFlQRX0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG4vKipcbiAqIEludmFyaWFudCBzZXQgb2YgYmFzZSBjb25zdHJhaW50c1xuICogQHR5cGUge1JlYWRvbmx5PENvbnN0cmFpbnRzPn1cbiAqL1xuY29uc3QgZGVzaXJlZENhcGFiaWxpdHlDb25zdHJhaW50cyA9IE9iamVjdC5mcmVlemUoe1xuICBhdXRvbWF0aW9uTmFtZToge1xuICAgIHByZXNlbmNlOiB0cnVlLFxuICAgIGlzU3RyaW5nOiB0cnVlLFxuICB9LFxuICBwbGF0Zm9ybU5hbWU6IHtcbiAgICBwcmVzZW5jZTogdHJ1ZSxcbiAgICBpc1N0cmluZzogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5jb25zdCBzZXNzaW9uc0xpc3RHdWFyZCA9IG5ldyBBc3luY0xvY2soKTtcbmNvbnN0IHBlbmRpbmdEcml2ZXJzR3VhcmQgPSBuZXcgQXN5bmNMb2NrKCk7XG5cbi8qKlxuICogQGltcGxlbWVudHMge1Nlc3Npb25IYW5kbGVyfVxuICovXG5jbGFzcyBBcHBpdW1Ecml2ZXIgZXh0ZW5kcyBEcml2ZXJDb3JlIHtcbiAgLyoqXG4gICAqIEFjY2VzcyB0byBzZXNzaW9ucyBsaXN0IG11c3QgYmUgZ3VhcmRlZCB3aXRoIGEgU2VtYXBob3JlLCBiZWNhdXNlXG4gICAqIGl0IG1pZ2h0IGJlIGNoYW5nZWQgYnkgb3RoZXIgYXN5bmMgY2FsbHMgYXQgYW55IHRpbWVcbiAgICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsRXh0ZXJuYWxEcml2ZXI+fVxuICAgKi9cbiAgc2Vzc2lvbnMgPSB7fTtcblxuICAvKipcbiAgICogQWNjZXNzIHRvIHBlbmRpbmcgZHJpdmVycyBsaXN0IG11c3QgYmUgZ3VhcmRlZCB3aXRoIGEgU2VtYXBob3JlLCBiZWNhdXNlXG4gICAqIGl0IG1pZ2h0IGJlIGNoYW5nZWQgYnkgb3RoZXIgYXN5bmMgY2FsbHMgYXQgYW55IHRpbWVcbiAgICogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFjY2VzcyB0aGlzIHByb3BlcnR5IGRpcmVjdGx5IGZyb20gdGhlIG91dHNpZGVcbiAgICogQHR5cGUge1JlY29yZDxzdHJpbmcsRXh0ZXJuYWxEcml2ZXJbXT59XG4gICAqL1xuICBwZW5kaW5nRHJpdmVycyA9IHt9O1xuXG4gIC8qKlxuICAgKiBOb3RlIHRoYXQge0BsaW5rY29kZSBBcHBpdW1Ecml2ZXJ9IGhhcyBubyBgbmV3Q29tbWFuZFRpbWVvdXRgIG1ldGhvZC5cbiAgICogYEFwcGl1bURyaXZlcmAgZG9lcyBub3Qgc2V0IGFuZCBvYnNlcnZlIGl0cyBvd24gdGltZW91dHM7IGluZGl2aWR1YWxcbiAgICogc2Vzc2lvbnMgKG1hbmFnZWQgZHJpdmVycykgZG8gaW5zdGVhZC5cbiAgICovXG4gIG5ld0NvbW1hbmRUaW1lb3V0TXMgPSAwO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGFjdGl2ZSBwbHVnaW5zXG4gICAqIEB0eXBlIHtNYXA8UGx1Z2luQ2xhc3Msc3RyaW5nPn1cbiAgICovXG4gIHBsdWdpbkNsYXNzZXM7XG5cbiAgLyoqXG4gICAqIG1hcCBvZiBzZXNzaW9ucyB0byBhY3R1YWwgcGx1Z2luIGluc3RhbmNlcyBwZXIgc2Vzc2lvblxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZyxJbnN0YW5jZVR5cGU8UGx1Z2luQ2xhc3M+W10+fVxuICAgKi9cbiAgc2Vzc2lvblBsdWdpbnMgPSB7fTtcblxuICAvKipcbiAgICogc29tZSBjb21tYW5kcyBhcmUgc2Vzc2lvbmxlc3MsIHNvIHdlIG5lZWQgYSBzZXQgb2YgcGx1Z2lucyBmb3IgdGhlbVxuICAgKiBAdHlwZSB7SW5zdGFuY2VUeXBlPFBsdWdpbkNsYXNzPltdfVxuICAgKi9cbiAgc2Vzc2lvbmxlc3NQbHVnaW5zID0gW107XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJDb25maWd9ICovXG4gIGRyaXZlckNvbmZpZztcblxuICAvKiogQHR5cGUge0FwcGl1bVNlcnZlcn0gKi9cbiAgc2VydmVyO1xuXG4gIGRlc2lyZWRDYXBDb25zdHJhaW50cyA9IGRlc2lyZWRDYXBhYmlsaXR5Q29uc3RyYWludHM7XG5cbiAgLyoqIEB0eXBlIHtEcml2ZXJPcHRzfSAqL1xuICBhcmdzO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RyaXZlck9wdHN9IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdHMpIHtcbiAgICAvLyBJdCBpcyBuZWNlc3NhcnkgdG8gc2V0IGAtLXRtcGAgaGVyZSBzaW5jZSBpdCBzaG91bGQgYmUgc2V0IHRvXG4gICAgLy8gcHJvY2Vzcy5lbnYuQVBQSVVNX1RNUF9ESVIgb25jZSBhdCBhbiBpbml0aWFsIHBvaW50IGluIHRoZSBBcHBpdW0gbGlmZWN5Y2xlLlxuICAgIC8vIFRoZSBwcm9jZXNzIGFyZ3VtZW50IHdpbGwgYmUgcmVmZXJlbmNlZCBieSBCYXNlRHJpdmVyLlxuICAgIC8vIFBsZWFzZSBjYWxsIEBhcHBpdW0vc3VwcG9ydC50ZW1wRGlyIG1vZHVsZSB0byBhcHBseSB0aGlzIGJlbmVmaXQuXG4gICAgaWYgKG9wdHMudG1wRGlyKSB7XG4gICAgICBwcm9jZXNzLmVudi5BUFBJVU1fVE1QX0RJUiA9IG9wdHMudG1wRGlyO1xuICAgIH1cblxuICAgIHN1cGVyKG9wdHMpO1xuXG4gICAgdGhpcy5hcmdzID0gey4uLm9wdHN9O1xuXG4gICAgLy8gYWxsb3cgdGhpcyB0byBoYXBwZW4gaW4gdGhlIGJhY2tncm91bmQsIHNvIG5vIGBhd2FpdGBcbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdXBkYXRlQnVpbGRJbmZvKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBjYXRjaCBhbnkgcG9zc2libGUgZXJyb3JzIHRvIGF2b2lkIHVuaGFuZGxlZCByZWplY3Rpb25zXG4gICAgICAgIHRoaXMubG9nLmRlYnVnKGBDYW5ub3QgZmV0Y2ggQXBwaXVtIGJ1aWxkIGluZm86ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGxvZ2dlciBpbnN0YW5jZSBmb3IgdGhlIGN1cnJlbnQgdW1icmVsbGEgZHJpdmVyIGluc3RhbmNlXG4gICAqL1xuICBnZXQgbG9nKCkge1xuICAgIGlmICghdGhpcy5fbG9nKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZU5hbWUgPSBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9QCR7bm9kZS5nZXRPYmplY3RJZCh0aGlzKS5zdWJzdHJpbmcoMCwgNCl9YDtcbiAgICAgIHRoaXMuX2xvZyA9IGxvZ2dlci5nZXRMb2dnZXIoaW5zdGFuY2VOYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2xvZztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgY29tbWFuZHMgcXVldWVpbmcgZm9yIHRoZSB1bWJyZWxsYSBBcHBpdW0gZHJpdmVyXG4gICAqL1xuICBnZXQgaXNDb21tYW5kc1F1ZXVlRW5hYmxlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZXNzaW9uRXhpc3RzKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5zZXNzaW9uSWQgIT09IG51bGw7XG4gIH1cblxuICBkcml2ZXJGb3JTZXNzaW9uKHNlc3Npb25JZCkge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hd2FpdFxuICBhc3luYyBnZXRTdGF0dXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1aWxkOiBfLmNsb25lKGdldEJ1aWxkSW5mbygpKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXdhaXRcbiAgYXN5bmMgZ2V0U2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIF8udG9QYWlycyh0aGlzLnNlc3Npb25zKS5tYXAoKFtpZCwgZHJpdmVyXSkgPT4gKHtcbiAgICAgIGlkLFxuICAgICAgY2FwYWJpbGl0aWVzOiBkcml2ZXIuY2FwcyxcbiAgICB9KSk7XG4gIH1cblxuICBwcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoZHJpdmVyTmFtZSwgZHJpdmVyVmVyc2lvbiwgZHJpdmVyQmFzZVZlcnNpb24pIHtcbiAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgZHJpdmVyVmVyc2lvblxuICAgICAgICA/IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gKHYke2RyaXZlclZlcnNpb259KSBzZXNzaW9uYFxuICAgICAgICA6IGBBcHBpdW0gdiR7QVBQSVVNX1ZFUn0gY3JlYXRpbmcgbmV3ICR7ZHJpdmVyTmFtZX0gc2Vzc2lvbmBcbiAgICApO1xuICAgIHRoaXMubG9nLmluZm8oYENoZWNraW5nIEJhc2VEcml2ZXIgdmVyc2lvbnMgZm9yIEFwcGl1bSBhbmQgJHtkcml2ZXJOYW1lfWApO1xuICAgIHRoaXMubG9nLmluZm8oXG4gICAgICBBcHBpdW1Ecml2ZXIuYmFzZVZlcnNpb25cbiAgICAgICAgPyBgQXBwaXVtJ3MgQmFzZURyaXZlciB2ZXJzaW9uIGlzICR7QXBwaXVtRHJpdmVyLmJhc2VWZXJzaW9ufWBcbiAgICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSBBcHBpdW0ncyBCYXNlRHJpdmVyIHZlcnNpb25gXG4gICAgKTtcbiAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgZHJpdmVyQmFzZVZlcnNpb25cbiAgICAgICAgPyBgJHtkcml2ZXJOYW1lfSdzIEJhc2VEcml2ZXIgdmVyc2lvbiBpcyAke2RyaXZlckJhc2VWZXJzaW9ufWBcbiAgICAgICAgOiBgQ291bGQgbm90IGRldGVybWluZSAke2RyaXZlck5hbWV9J3MgQmFzZURyaXZlciB2ZXJzaW9uYFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBDTEkgYXJndW1lbnRzIGZvciBhIHNwZWNpZmljIHBsdWdpbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4dE5hbWUgLSBQbHVnaW4gbmFtZVxuICAgKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gQXJndW1lbnRzIG9iamVjdC4gSWYgbm9uZSwgYW4gZW1wdHkgb2JqZWN0LlxuICAgKi9cbiAgZ2V0Q2xpQXJnc0ZvclBsdWdpbihleHROYW1lKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyx1bmtub3duPn0gKi8gKHRoaXMuYXJncy5wbHVnaW4/LltleHROYW1lXSA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIENMSSBhcmdzIGZvciBhIHNwZWNpZmljIGRyaXZlci5cbiAgICpcbiAgICogX0FueSBhcmcgd2hpY2ggaXMgZXF1YWwgdG8gaXRzIGRlZmF1bHQgdmFsdWUgd2lsbCBub3QgYmUgcHJlc2VudCBpbiB0aGUgcmV0dXJuZWQgb2JqZWN0Ll9cbiAgICpcbiAgICogX05vdGUgdGhhdCB0aGlzIGJlaGF2aW9yIGN1cnJlbnRseSAoTWF5IDE4IDIwMjIpIGRpZmZlcnMgZnJvbSBob3cgcGx1Z2lucyBhcmUgaGFuZGxlZF8gKHNlZSB7QGxpbmtjb2RlIEFwcGl1bURyaXZlci5nZXRDbGlBcmdzRm9yUGx1Z2lufSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRHJpdmVyIG5hbWVcbiAgICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsdW5rbm93bj58dW5kZWZpbmVkfSBBcmd1bWVudHMgb2JqZWN0LiBJZiBub25lLCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgZ2V0Q2xpQXJnc0ZvckRyaXZlcihleHROYW1lKSB7XG4gICAgY29uc3QgYWxsQ2xpQXJnc0ZvckV4dCA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyx1bmtub3duPnx1bmRlZmluZWR9ICovIChcbiAgICAgIHRoaXMuYXJncy5kcml2ZXI/LltleHROYW1lXVxuICAgICk7XG5cbiAgICBpZiAoIV8uaXNFbXB0eShhbGxDbGlBcmdzRm9yRXh0KSkge1xuICAgICAgY29uc3QgZGVmYXVsdHMgPSBnZXREZWZhdWx0c0ZvckV4dGVuc2lvbihEUklWRVJfVFlQRSwgZXh0TmFtZSk7XG4gICAgICBjb25zdCBjbGlBcmdzID0gXy5pc0VtcHR5KGRlZmF1bHRzKVxuICAgICAgICA/IGFsbENsaUFyZ3NGb3JFeHRcbiAgICAgICAgOiBfLm9taXRCeShhbGxDbGlBcmdzRm9yRXh0LCAodmFsdWUsIGtleSkgPT4gXy5pc0VxdWFsKGRlZmF1bHRzW2tleV0sIHZhbHVlKSk7XG4gICAgICBpZiAoIV8uaXNFbXB0eShjbGlBcmdzKSkge1xuICAgICAgICByZXR1cm4gY2xpQXJncztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IHNlc3Npb25cbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IGpzb253cENhcHMgSlNPTldQIGZvcm1hdHRlZCBkZXNpcmVkIGNhcGFiaWxpdGllc1xuICAgKiBAcGFyYW0ge1czQ0NhcGFiaWxpdGllc30gcmVxQ2FwcyBSZXF1aXJlZCBjYXBhYmlsaXRpZXMgKEpTT05XUCBzdGFuZGFyZClcbiAgICogQHBhcmFtIHtXM0NDYXBhYmlsaXRpZXN9IHczY0NhcGFiaWxpdGllcyBXM0MgY2FwYWJpbGl0aWVzXG4gICAqIEBwYXJhbSB7RHJpdmVyRGF0YVtdfSBbZHJpdmVyRGF0YV1cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb24oanNvbndwQ2FwcywgcmVxQ2FwcywgdzNjQ2FwYWJpbGl0aWVzLCBkcml2ZXJEYXRhKSB7XG4gICAgY29uc3QgZGVmYXVsdENhcGFiaWxpdGllcyA9IF8uY2xvbmVEZWVwKHRoaXMuYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKTtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSBwdWxsU2V0dGluZ3MoZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gICAganNvbndwQ2FwcyA9IF8uY2xvbmVEZWVwKGpzb253cENhcHMpO1xuICAgIGNvbnN0IGp3cFNldHRpbmdzID0gey4uLmRlZmF1bHRTZXR0aW5ncywgLi4ucHVsbFNldHRpbmdzKGpzb253cENhcHMpfTtcbiAgICB3M2NDYXBhYmlsaXRpZXMgPSBfLmNsb25lRGVlcCh3M2NDYXBhYmlsaXRpZXMpO1xuICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBvbmx5IHByb3ZpZGVzIGNhcHMgdXNpbmcgSlNPTldQIHN0YW5kYXJkLFxuICAgIC8vIGFsdGhvdWdoIGZpcnN0TWF0Y2gvYWx3YXlzTWF0Y2ggcHJvcGVydGllcyBhcmUgc3RpbGwgcHJlc2VudC5cbiAgICAvLyBJbiBzdWNoIGNhc2Ugd2UgYXNzdW1lIHRoZSBjbGllbnQgdW5kZXJzdGFuZHMgVzNDIHByb3RvY29sIGFuZCBtZXJnZSB0aGUgZ2l2ZW5cbiAgICAvLyBKU09OV1AgY2FwcyB0byBXM0MgY2Fwc1xuICAgIGNvbnN0IHczY1NldHRpbmdzID0ge1xuICAgICAgLi4uandwU2V0dGluZ3MsXG4gICAgICAuLi5wdWxsU2V0dGluZ3MoKHczY0NhcGFiaWxpdGllcyA/PyB7fSkuYWx3YXlzTWF0Y2ggPz8ge30pLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBmaXJzdE1hdGNoRW50cnkgb2YgKHczY0NhcGFiaWxpdGllcyA/PyB7fSkuZmlyc3RNYXRjaCA/PyBbXSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih3M2NTZXR0aW5ncywgcHVsbFNldHRpbmdzKGZpcnN0TWF0Y2hFbnRyeSkpO1xuICAgIH1cblxuICAgIGxldCBwcm90b2NvbDtcbiAgICBsZXQgaW5uZXJTZXNzaW9uSWQsIGRDYXBzO1xuICAgIHRyeSB7XG4gICAgICAvLyBQYXJzZSB0aGUgY2FwcyBpbnRvIGEgZm9ybWF0IHRoYXQgdGhlIElubmVyRHJpdmVyIHdpbGwgYWNjZXB0XG4gICAgICBjb25zdCBwYXJzZWRDYXBzID0gcGFyc2VDYXBzRm9ySW5uZXJEcml2ZXIoXG4gICAgICAgIGpzb253cENhcHMsXG4gICAgICAgIHczY0NhcGFiaWxpdGllcyxcbiAgICAgICAgdGhpcy5kZXNpcmVkQ2FwQ29uc3RyYWludHMsXG4gICAgICAgIGRlZmF1bHRDYXBhYmlsaXRpZXNcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHtkZXNpcmVkQ2FwcywgcHJvY2Vzc2VkSnNvbndwQ2FwYWJpbGl0aWVzLCBwcm9jZXNzZWRXM0NDYXBhYmlsaXRpZXN9ID1cbiAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4vdXRpbHMnKS5QYXJzZWREcml2ZXJDYXBzfSAqLyAocGFyc2VkQ2Fwcyk7XG4gICAgICBwcm90b2NvbCA9IHBhcnNlZENhcHMucHJvdG9jb2w7XG4gICAgICBjb25zdCBlcnJvciA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuL3V0aWxzJykuSW52YWxpZENhcHN9ICovIChwYXJzZWRDYXBzKS5lcnJvcjtcbiAgICAgIC8vIElmIHRoZSBwYXJzaW5nIG9mIHRoZSBjYXBzIHByb2R1Y2VkIGFuIGVycm9yLCB0aHJvdyBpdCBpbiBoZXJlXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZHJpdmVyOiBJbm5lckRyaXZlcixcbiAgICAgICAgdmVyc2lvbjogZHJpdmVyVmVyc2lvbixcbiAgICAgICAgZHJpdmVyTmFtZSxcbiAgICAgIH0gPSB0aGlzLmRyaXZlckNvbmZpZy5maW5kTWF0Y2hpbmdEcml2ZXIoZGVzaXJlZENhcHMpO1xuICAgICAgdGhpcy5wcmludE5ld1Nlc3Npb25Bbm5vdW5jZW1lbnQoSW5uZXJEcml2ZXIubmFtZSwgZHJpdmVyVmVyc2lvbiwgSW5uZXJEcml2ZXIuYmFzZVZlcnNpb24pO1xuXG4gICAgICBpZiAodGhpcy5hcmdzLnNlc3Npb25PdmVycmlkZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFsbFNlc3Npb25zKCk7XG4gICAgICB9XG5cbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0RyaXZlckRhdGFbXX1cbiAgICAgICAqL1xuICAgICAgbGV0IHJ1bm5pbmdEcml2ZXJzRGF0YSA9IFtdO1xuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7RHJpdmVyRGF0YVtdfVxuICAgICAgICovXG4gICAgICBsZXQgb3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEgPSBbXTtcblxuICAgICAgY29uc3QgZHJpdmVySW5zdGFuY2UgPSBuZXcgSW5uZXJEcml2ZXIodGhpcy5hcmdzLCB0cnVlKTtcblxuICAgICAgLy8gV2Ugd2FudCB0byBhc3NpZ24gc2VjdXJpdHkgdmFsdWVzIGRpcmVjdGx5IG9uIHRoZSBkcml2ZXIuIFRoZSBkcml2ZXJcbiAgICAgIC8vIHNob3VsZCBub3QgcmVhZCBzZWN1cml0eSB2YWx1ZXMgZnJvbSBgdGhpcy5vcHRzYCBiZWNhdXNlIHRob3NlIHZhbHVlc1xuICAgICAgLy8gY291bGQgaGF2ZSBiZWVuIHNldCBieSBhIG1hbGljaW91cyB1c2VyIHZpYSBjYXBhYmlsaXRpZXMsIHdoZXJlYXMgd2VcbiAgICAgIC8vIHdhbnQgYSBndWFyYW50ZWUgdGhlIHZhbHVlcyB3ZXJlIHNldCBieSB0aGUgYXBwaXVtIHNlcnZlciBhZG1pblxuICAgICAgaWYgKHRoaXMuYXJncy5yZWxheGVkU2VjdXJpdHlFbmFibGVkKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgYEFwcGx5aW5nIHJlbGF4ZWQgc2VjdXJpdHkgdG8gJyR7SW5uZXJEcml2ZXIubmFtZX0nIGFzIHBlciBgICtcbiAgICAgICAgICAgIGBzZXJ2ZXIgY29tbWFuZCBsaW5lIGFyZ3VtZW50LiBBbGwgaW5zZWN1cmUgZmVhdHVyZXMgd2lsbCBiZSBgICtcbiAgICAgICAgICAgIGBlbmFibGVkIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkIGJ5IC0tZGVueS1pbnNlY3VyZWBcbiAgICAgICAgKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UucmVsYXhlZFNlY3VyaXR5RW5hYmxlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghXy5pc0VtcHR5KHRoaXMuYXJncy5kZW55SW5zZWN1cmUpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0V4cGxpY2l0bHkgcHJldmVudGluZyB1c2Ugb2YgaW5zZWN1cmUgZmVhdHVyZXM6Jyk7XG4gICAgICAgIHRoaXMuYXJncy5kZW55SW5zZWN1cmUubWFwKChhKSA9PiB0aGlzLmxvZy5pbmZvKGAgICAgJHthfWApKTtcbiAgICAgICAgZHJpdmVySW5zdGFuY2UuZGVueUluc2VjdXJlID0gdGhpcy5hcmdzLmRlbnlJbnNlY3VyZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfLmlzRW1wdHkodGhpcy5hcmdzLmFsbG93SW5zZWN1cmUpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oJ0V4cGxpY2l0bHkgZW5hYmxpbmcgdXNlIG9mIGluc2VjdXJlIGZlYXR1cmVzOicpO1xuICAgICAgICB0aGlzLmFyZ3MuYWxsb3dJbnNlY3VyZS5tYXAoKGEpID0+IHRoaXMubG9nLmluZm8oYCAgICAke2F9YCkpO1xuICAgICAgICBkcml2ZXJJbnN0YW5jZS5hbGxvd0luc2VjdXJlID0gdGhpcy5hcmdzLmFsbG93SW5zZWN1cmU7XG4gICAgICB9XG5cbiAgICAgIC8vIExpa2V3aXNlLCBhbnkgZHJpdmVyLXNwZWNpZmljIENMSSBhcmdzIHRoYXQgd2VyZSBwYXNzZWQgaW4gc2hvdWxkIGJlIGFzc2lnbmVkIGRpcmVjdGx5IHRvXG4gICAgICAvLyB0aGUgZHJpdmVyIHNvIHRoYXQgdGhleSBjYW5ub3QgYmUgbWltaWNrZWQgYnkgYSBtYWxpY2lvdXMgdXNlciBzZW5kaW5nIGluIGNhcGFiaWxpdGllc1xuICAgICAgY29uc3QgY2xpQXJncyA9IHRoaXMuZ2V0Q2xpQXJnc0ZvckRyaXZlcihkcml2ZXJOYW1lKTtcbiAgICAgIGlmICghXy5pc0VtcHR5KGNsaUFyZ3MpKSB7XG4gICAgICAgIGRyaXZlckluc3RhbmNlLmNsaUFyZ3MgPSBjbGlBcmdzO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIGFzc2lnbm1lbnQgaXMgcmVxdWlyZWQgZm9yIGNvcnJlY3Qgd2ViIHNvY2tldHMgZnVuY3Rpb25hbGl0eSBpbnNpZGUgdGhlIGRyaXZlclxuICAgICAgLy8gRHJpdmVycy9wbHVnaW5zIG1pZ2h0IGFsc28gd2FudCB0byBrbm93IHdoZXJlIHRoZXkgYXJlIGhvc3RlZFxuXG4gICAgICAvLyBYWFg6IHRlbXBvcmFyeSBoYWNrIHRvIHdvcmsgYXJvdW5kICMxNjc0N1xuICAgICAgZHJpdmVySW5zdGFuY2Uuc2VydmVyID0gdGhpcy5zZXJ2ZXI7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJIb3N0ID0gdGhpcy5hcmdzLmFkZHJlc3M7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQb3J0ID0gdGhpcy5hcmdzLnBvcnQ7XG4gICAgICBkcml2ZXJJbnN0YW5jZS5zZXJ2ZXJQYXRoID0gdGhpcy5hcmdzLmJhc2VQYXRoO1xuXG4gICAgICB0cnkge1xuICAgICAgICBydW5uaW5nRHJpdmVyc0RhdGEgPSAoYXdhaXQgdGhpcy5jdXJTZXNzaW9uRGF0YUZvckRyaXZlcihJbm5lckRyaXZlcikpID8/IFtdO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgZXJyb3JzLlNlc3Npb25Ob3RDcmVhdGVkRXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICB0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdID0gdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXSB8fCBbXTtcbiAgICAgICAgb3RoZXJQZW5kaW5nRHJpdmVyc0RhdGEgPSBfLmNvbXBhY3QoXG4gICAgICAgICAgdGhpcy5wZW5kaW5nRHJpdmVyc1tJbm5lckRyaXZlci5uYW1lXS5tYXAoKGRydikgPT4gZHJ2LmRyaXZlckRhdGEpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGVuZGluZ0RyaXZlcnNbSW5uZXJEcml2ZXIubmFtZV0ucHVzaChkcml2ZXJJbnN0YW5jZSk7XG4gICAgICB9KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgW2lubmVyU2Vzc2lvbklkLCBkQ2Fwc10gPSBhd2FpdCBkcml2ZXJJbnN0YW5jZS5jcmVhdGVTZXNzaW9uKFxuICAgICAgICAgIHByb2Nlc3NlZEpzb253cENhcGFiaWxpdGllcyxcbiAgICAgICAgICByZXFDYXBzLFxuICAgICAgICAgIHByb2Nlc3NlZFczQ0NhcGFiaWxpdGllcyxcbiAgICAgICAgICBbLi4ucnVubmluZ0RyaXZlcnNEYXRhLCAuLi5vdGhlclBlbmRpbmdEcml2ZXJzRGF0YV1cbiAgICAgICAgKTtcbiAgICAgICAgcHJvdG9jb2wgPSBkcml2ZXJJbnN0YW5jZS5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF0gPSBkcml2ZXJJbnN0YW5jZTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHBlbmRpbmdEcml2ZXJzR3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICAgIF8ucHVsbCh0aGlzLnBlbmRpbmdEcml2ZXJzW0lubmVyRHJpdmVyLm5hbWVdLCBkcml2ZXJJbnN0YW5jZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmF0dGFjaFVuZXhwZWN0ZWRTaHV0ZG93bkhhbmRsZXIoZHJpdmVySW5zdGFuY2UsIGlubmVyU2Vzc2lvbklkKTtcblxuICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgYE5ldyAke0lubmVyRHJpdmVyLm5hbWV9IHNlc3Npb24gY3JlYXRlZCBzdWNjZXNzZnVsbHksIHNlc3Npb24gYCArXG4gICAgICAgICAgYCR7aW5uZXJTZXNzaW9uSWR9IGFkZGVkIHRvIG1hc3RlciBzZXNzaW9uIGxpc3RgXG4gICAgICApO1xuXG4gICAgICAvLyBzZXQgdGhlIE5ldyBDb21tYW5kIFRpbWVvdXQgZm9yIHRoZSBpbm5lciBkcml2ZXJcbiAgICAgIGRyaXZlckluc3RhbmNlLnN0YXJ0TmV3Q29tbWFuZFRpbWVvdXQoKTtcblxuICAgICAgLy8gYXBwbHkgaW5pdGlhbCB2YWx1ZXMgdG8gQXBwaXVtIHNldHRpbmdzIChpZiBwcm92aWRlZClcbiAgICAgIGlmIChkcml2ZXJJbnN0YW5jZS5pc1czQ1Byb3RvY29sKCkgJiYgIV8uaXNFbXB0eSh3M2NTZXR0aW5ncykpIHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgICBgQXBwbHlpbmcgdGhlIGluaXRpYWwgdmFsdWVzIHRvIEFwcGl1bSBzZXR0aW5ncyBwYXJzZWQgZnJvbSBXM0MgY2FwczogYCArXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh3M2NTZXR0aW5ncylcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgZHJpdmVySW5zdGFuY2UudXBkYXRlU2V0dGluZ3ModzNjU2V0dGluZ3MpO1xuICAgICAgfSBlbHNlIGlmIChkcml2ZXJJbnN0YW5jZS5pc01qc29ud3BQcm90b2NvbCgpICYmICFfLmlzRW1wdHkoandwU2V0dGluZ3MpKSB7XG4gICAgICAgIHRoaXMubG9nLmluZm8oXG4gICAgICAgICAgYEFwcGx5aW5nIHRoZSBpbml0aWFsIHZhbHVlcyB0byBBcHBpdW0gc2V0dGluZ3MgcGFyc2VkIGZyb20gTUpTT05XUCBjYXBzOiBgICtcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGp3cFNldHRpbmdzKVxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBkcml2ZXJJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyhqd3BTZXR0aW5ncyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBlcnJvcixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmFsdWU6IFtpbm5lclNlc3Npb25JZCwgZENhcHMsIHByb3RvY29sXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RHJpdmVyfSBkcml2ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlubmVyU2Vzc2lvbklkXG4gICAqL1xuICBhdHRhY2hVbmV4cGVjdGVkU2h1dGRvd25IYW5kbGVyKGRyaXZlciwgaW5uZXJTZXNzaW9uSWQpIHtcbiAgICBjb25zdCBvblNodXRkb3duID0gKGNhdXNlID0gbmV3IEVycm9yKCdVbmtub3duIGVycm9yJykpID0+IHtcbiAgICAgIHRoaXMubG9nLndhcm4oYEVuZGluZyBzZXNzaW9uLCBjYXVzZSB3YXMgJyR7Y2F1c2UubWVzc2FnZX0nYCk7XG5cbiAgICAgIGlmICh0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnNlc3Npb25QbHVnaW5zW2lubmVyU2Vzc2lvbklkXSkge1xuICAgICAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoXG4gICAgICAgICAgICAgIGBQbHVnaW4gJHtwbHVnaW4ubmFtZX0gZGVmaW5lcyBhbiB1bmV4cGVjdGVkIHNodXRkb3duIGhhbmRsZXI7IGNhbGxpbmcgaXQgbm93YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHBsdWdpbi5vblVuZXhwZWN0ZWRTaHV0ZG93bihkcml2ZXIsIGNhdXNlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5sb2cud2FybihcbiAgICAgICAgICAgICAgICBgR290IGFuIGVycm9yIHdoZW4gcnVubmluZyBwbHVnaW4gJHtwbHVnaW4ubmFtZX0gc2h1dGRvd24gaGFuZGxlcjogJHtlfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2cuZGVidWcoYFBsdWdpbiAke3BsdWdpbi5uYW1lfSBkb2VzIG5vdCBkZWZpbmUgYW4gdW5leHBlY3RlZCBzaHV0ZG93biBoYW5kbGVyYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nLmluZm8oYFJlbW92aW5nIHNlc3Npb24gJyR7aW5uZXJTZXNzaW9uSWR9JyBmcm9tIG91ciBtYXN0ZXIgc2Vzc2lvbiBsaXN0YCk7XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uc1tpbm5lclNlc3Npb25JZF07XG4gICAgICBkZWxldGUgdGhpcy5zZXNzaW9uUGx1Z2luc1tpbm5lclNlc3Npb25JZF07XG4gICAgfTtcblxuICAgIGlmIChfLmlzRnVuY3Rpb24oZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKSkge1xuICAgICAgZHJpdmVyLm9uVW5leHBlY3RlZFNodXRkb3duKG9uU2h1dGRvd24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvZy53YXJuKFxuICAgICAgICBgRmFpbGVkIHRvIGF0dGFjaCB0aGUgdW5leHBlY3RlZCBzaHV0ZG93biBsaXN0ZW5lci4gYCArXG4gICAgICAgICAgYElzICdvblVuZXhwZWN0ZWRTaHV0ZG93bicgbWV0aG9kIGF2YWlsYWJsZSBmb3IgJyR7ZHJpdmVyLmNvbnN0cnVjdG9yLm5hbWV9Jz9gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0RyaXZlckNsYXNzfSBJbm5lckRyaXZlclxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEcml2ZXJEYXRhW10+fX1cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF3YWl0XG4gIGFzeW5jIGN1clNlc3Npb25EYXRhRm9yRHJpdmVyKElubmVyRHJpdmVyKSB7XG4gICAgY29uc3QgZGF0YSA9IF8uY29tcGFjdChcbiAgICAgIF8udmFsdWVzKHRoaXMuc2Vzc2lvbnMpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMuY29uc3RydWN0b3IubmFtZSA9PT0gSW5uZXJEcml2ZXIubmFtZSlcbiAgICAgICAgLm1hcCgocykgPT4gcy5kcml2ZXJEYXRhKVxuICAgICk7XG4gICAgZm9yIChjb25zdCBkYXR1bSBvZiBkYXRhKSB7XG4gICAgICBpZiAoIWRhdHVtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgUHJvYmxlbSBnZXR0aW5nIHNlc3Npb24gZGF0YSBmb3IgZHJpdmVyIHR5cGUgYCArXG4gICAgICAgICAgICBgJHtJbm5lckRyaXZlci5uYW1lfTsgZG9lcyBpdCBpbXBsZW1lbnQgJ2dldCBkcml2ZXJEYXRhJz9gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXNzaW9uSWRcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVNlc3Npb24oc2Vzc2lvbklkKSB7XG4gICAgbGV0IHByb3RvY29sO1xuICAgIHRyeSB7XG4gICAgICBsZXQgb3RoZXJTZXNzaW9uc0RhdGE7XG4gICAgICBjb25zdCBkc3RTZXNzaW9uID0gYXdhaXQgc2Vzc2lvbnNMaXN0R3VhcmQuYWNxdWlyZShBcHBpdW1Ecml2ZXIubmFtZSwgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJDb25zdHJ1Y3Rvck5hbWUgPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF0uY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgb3RoZXJTZXNzaW9uc0RhdGEgPSBfLnRvUGFpcnModGhpcy5zZXNzaW9ucylcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKFtrZXksIHZhbHVlXSkgPT4gdmFsdWUuY29uc3RydWN0b3IubmFtZSA9PT0gY3VyQ29uc3RydWN0b3JOYW1lICYmIGtleSAhPT0gc2Vzc2lvbklkXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKFssIHZhbHVlXSkgPT4gdmFsdWUuZHJpdmVyRGF0YSk7XG4gICAgICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgICAgIHByb3RvY29sID0gZHN0U2Vzc2lvbi5wcm90b2NvbDtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUmVtb3Zpbmcgc2Vzc2lvbiAke3Nlc3Npb25JZH0gZnJvbSBvdXIgbWFzdGVyIHNlc3Npb24gbGlzdGApO1xuICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGRlbGV0ZVNlc3Npb24gY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBvciBub3RcbiAgICAgICAgLy8gbWFrZSB0aGUgc2Vzc2lvbiB1bmF2YWlsYWJsZSwgYmVjYXVzZSB3aG8ga25vd3Mgd2hhdCBzdGF0ZSBpdCBtaWdodFxuICAgICAgICAvLyBiZSBpbiBvdGhlcndpc2VcbiAgICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXTtcbiAgICAgICAgcmV0dXJuIGRzdFNlc3Npb247XG4gICAgICB9KTtcbiAgICAgIC8vIHRoaXMgbWF5IG5vdCBiZSBjb3JyZWN0LCBidXQgaWYgYGRzdFNlc3Npb25gIHdhcyBmYWxzeSwgdGhlIGNhbGwgdG8gYGRlbGV0ZVNlc3Npb24oKWAgd291bGRcbiAgICAgIC8vIHRocm93IGFueXdheS5cbiAgICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nlc3Npb24gbm90IGZvdW5kJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgdmFsdWU6IGF3YWl0IGRzdFNlc3Npb24uZGVsZXRlU2Vzc2lvbihzZXNzaW9uSWQsIG90aGVyU2Vzc2lvbnNEYXRhKSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoYEhhZCB0cm91YmxlIGVuZGluZyBzZXNzaW9uICR7c2Vzc2lvbklkfTogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgZXJyb3I6IGUsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFsbFNlc3Npb25zKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHNlc3Npb25zQ291bnQgPSBfLnNpemUodGhpcy5zZXNzaW9ucyk7XG4gICAgaWYgKDAgPT09IHNlc3Npb25zQ291bnQpIHtcbiAgICAgIHRoaXMubG9nLmRlYnVnKCdUaGVyZSBhcmUgbm8gYWN0aXZlIHNlc3Npb25zIGZvciBjbGVhbnVwJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2ZvcmNlID0gZmFsc2UsIHJlYXNvbn0gPSBvcHRzO1xuICAgIHRoaXMubG9nLmRlYnVnKGBDbGVhbmluZyB1cCAke3V0aWwucGx1cmFsaXplKCdhY3RpdmUgc2Vzc2lvbicsIHNlc3Npb25zQ291bnQsIHRydWUpfWApO1xuICAgIGNvbnN0IGNsZWFudXBQcm9taXNlcyA9IGZvcmNlXG4gICAgICA/IF8udmFsdWVzKHRoaXMuc2Vzc2lvbnMpLm1hcCgoZHJ2KSA9PlxuICAgICAgICAgIGRydi5zdGFydFVuZXhwZWN0ZWRTaHV0ZG93bihyZWFzb24gJiYgbmV3IEVycm9yKHJlYXNvbikpXG4gICAgICAgIClcbiAgICAgIDogXy5rZXlzKHRoaXMuc2Vzc2lvbnMpLm1hcCgoaWQpID0+IHRoaXMuZGVsZXRlU2Vzc2lvbihpZCkpO1xuICAgIGZvciAoY29uc3QgY2xlYW51cFByb21pc2Ugb2YgY2xlYW51cFByb21pc2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjbGVhbnVwUHJvbWlzZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2cuZGVidWcoZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXBwcm9wcmlhdGUgcGx1Z2lucyBmb3IgYSBzZXNzaW9uIChvciBzZXNzaW9ubGVzcyBwbHVnaW5zKVxuICAgKlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IHNlc3Npb25JZCAtIHRoZSBzZXNzaW9uSWQgKG9yIG51bGwpIHRvIHVzZSB0byBmaW5kIHBsdWdpbnNcbiAgICogQHJldHVybnMge0FycmF5fSAtIGFycmF5IG9mIHBsdWdpbiBpbnN0YW5jZXNcbiAgICovXG4gIHBsdWdpbnNGb3JTZXNzaW9uKHNlc3Npb25JZCA9IG51bGwpIHtcbiAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICBpZiAoIXRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXSkge1xuICAgICAgICB0aGlzLnNlc3Npb25QbHVnaW5zW3Nlc3Npb25JZF0gPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvblBsdWdpbnNbc2Vzc2lvbklkXTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0VtcHR5KHRoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zKSkge1xuICAgICAgdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnMgPSB0aGlzLmNyZWF0ZVBsdWdpbkluc3RhbmNlcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnM7XG4gIH1cblxuICAvKipcbiAgICogVG8gZ2V0IHBsdWdpbnMgZm9yIGEgY29tbWFuZCwgd2UgZWl0aGVyIGdldCB0aGUgcGx1Z2luIGluc3RhbmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG4gICAqIHBhcnRpY3VsYXIgY29tbWFuZCdzIHNlc3Npb24sIG9yIGluIHRoZSBjYXNlIG9mIHNlc3Npb25sZXNzIHBsdWdpbnMsIHB1bGwgZnJvbSB0aGUgc2V0IG9mXG4gICAqIHBsdWdpbiBpbnN0YW5jZXMgcmVzZXJ2ZWQgZm9yIHNlc3Npb25sZXNzIGNvbW1hbmRzIChhbmQgd2UgbGF6aWx5IGNyZWF0ZSBwbHVnaW4gaW5zdGFuY2VzIG9uXG4gICAqIGZpcnN0IHVzZSlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNtZCAtIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIHRvIGZpbmQgYSBwbHVnaW4gdG8gaGFuZGxlXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gc2Vzc2lvbklkIC0gdGhlIHBhcnRpY3VsYXIgc2Vzc2lvbiBmb3Igd2hpY2ggdG8gZmluZCBhIHBsdWdpbiwgb3IgbnVsbCBpZlxuICAgKiBzZXNzaW9ubGVzc1xuICAgKi9cbiAgcGx1Z2luc1RvSGFuZGxlQ21kKGNtZCwgc2Vzc2lvbklkID0gbnVsbCkge1xuICAgIC8vIHRvIGhhbmRsZSBhIGdpdmVuIGNvbW1hbmQsIGEgcGx1Z2luIHNob3VsZCBlaXRoZXIgaW1wbGVtZW50IHRoYXQgY29tbWFuZCBhcyBhIHBsdWdpblxuICAgIC8vIGluc3RhbmNlIG1ldGhvZCBvciBpdCBzaG91bGQgaW1wbGVtZW50IGEgZ2VuZXJpYyAnaGFuZGxlJyBtZXRob2RcbiAgICByZXR1cm4gdGhpcy5wbHVnaW5zRm9yU2Vzc2lvbihzZXNzaW9uSWQpLmZpbHRlcihcbiAgICAgIChwKSA9PiBfLmlzRnVuY3Rpb24ocFtjbWRdKSB8fCBfLmlzRnVuY3Rpb24ocC5oYW5kbGUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGluc3RhbmNlcyBvZiBhbGwgb2YgdGhlIGVuYWJsZWQgUGx1Z2luIGNsYXNzZXNcbiAgICogQHJldHVybnMge1BsdWdpbltdfVxuICAgKi9cbiAgY3JlYXRlUGx1Z2luSW5zdGFuY2VzKCkge1xuICAgIC8qKiBAdHlwZSB7UGx1Z2luW119ICovXG4gICAgY29uc3QgcGx1Z2luSW5zdGFuY2VzID0gW107XG4gICAgZm9yIChjb25zdCBbUGx1Z2luQ2xhc3MsIG5hbWVdIG9mIHRoaXMucGx1Z2luQ2xhc3Nlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaUFyZ3MgPSB0aGlzLmdldENsaUFyZ3NGb3JQbHVnaW4obmFtZSk7XG4gICAgICBjb25zdCBwbHVnaW4gPSBuZXcgUGx1Z2luQ2xhc3MobmFtZSwgY2xpQXJncyk7XG4gICAgICBwbHVnaW5JbnN0YW5jZXMucHVzaChwbHVnaW4pO1xuICAgIH1cbiAgICByZXR1cm4gcGx1Z2luSW5zdGFuY2VzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbWRcbiAgICogQHBhcmFtICB7Li4uYW55fSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHt2YWx1ZTogYW55LCBlcnJvcj86IEVycm9yLCBwcm90b2NvbDogc3RyaW5nfSB8IGltcG9ydCgndHlwZS1mZXN0JykuQXN5bmNSZXR1cm5UeXBlPERyaXZlclsnZXhlY3V0ZUNvbW1hbmQnXT4+fVxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUNvbW1hbmQoY21kLCAuLi5hcmdzKSB7XG4gICAgLy8gV2UgaGF2ZSBiYXNpY2FsbHkgdGhyZWUgY2FzZXMgZm9yIGhvdyB0byBoYW5kbGUgY29tbWFuZHM6XG4gICAgLy8gMS4gaGFuZGxlIGdldFN0YXR1cyAod2UgZG8gdGhpcyBhcyBhIHNwZWNpYWwgb3V0IG9mIGJhbmQgY2FzZSBzbyBpdCBkb2Vzbid0IGdldCBhZGRlZCB0byBhblxuICAgIC8vICAgIGV4ZWN1dGlvbiBxdWV1ZSwgYW5kIGNhbiBiZSBjYWxsZWQgd2hpbGUgZS5nLiBjcmVhdGVTZXNzaW9uIGlzIGluIHByb2dyZXNzKVxuICAgIC8vIDIuIGhhbmRsZSBjb21tYW5kcyB0aGF0IHRoaXMgdW1icmVsbGEgZHJpdmVyIHNob3VsZCBoYW5kbGUsIHJhdGhlciB0aGFuIHRoZSBhY3R1YWwgc2Vzc2lvblxuICAgIC8vICAgIGRyaXZlciAoZm9yIGV4YW1wbGUsIGRlbGV0ZVNlc3Npb24sIG9yIG90aGVyIG5vbi1zZXNzaW9uIGNvbW1hbmRzKVxuICAgIC8vIDMuIGhhbmRsZSBzZXNzaW9uIGRyaXZlciBjb21tYW5kcy5cbiAgICAvLyBUaGUgdHJpY2t5IHBhcnQgaXMgdGhhdCBiZWNhdXNlIHdlIHN1cHBvcnQgY29tbWFuZCBwbHVnaW5zLCB3ZSBuZWVkIHRvIHdyYXAgYW55IG9mIHRoZXNlXG4gICAgLy8gY2FzZXMgd2l0aCBwbHVnaW4gaGFuZGxpbmcuXG5cbiAgICBjb25zdCBpc0dldFN0YXR1cyA9IGNtZCA9PT0gR0VUX1NUQVRVU19DT01NQU5EO1xuICAgIGNvbnN0IGlzVW1icmVsbGFDbWQgPSBpc0FwcGl1bURyaXZlckNvbW1hbmQoY21kKTtcbiAgICBjb25zdCBpc1Nlc3Npb25DbWQgPSBpc1Nlc3Npb25Db21tYW5kKGNtZCk7XG5cbiAgICAvLyBpZiBhIHBsdWdpbiBvdmVycmlkZSBwcm94eWluZyBmb3IgdGhpcyBjb21tYW5kIGFuZCB0aGF0IGlzIHdoeSB3ZSBhcmUgaGVyZSBpbnN0ZWFkIG9mIGp1c3RcbiAgICAvLyBsZXR0aW5nIHRoZSBwcm90b2NvbCBwcm94eSB0aGUgY29tbWFuZCBlbnRpcmVseSwgZGV0ZXJtaW5lIHRoYXQsIGdldCB0aGUgcmVxdWVzdCBvYmplY3QgZm9yXG4gICAgLy8gdXNlIGxhdGVyIG9uLCB0aGVuIGNsZWFuIHVwIHRoZSBhcmdzXG4gICAgY29uc3QgcmVxRm9yUHJveHkgPSBfLmxhc3QoYXJncyk/LnJlcUZvclByb3h5O1xuICAgIGlmIChyZXFGb3JQcm94eSkge1xuICAgICAgYXJncy5wb3AoKTtcbiAgICB9XG5cbiAgICAvLyBmaXJzdCBkbyBzb21lIGVycm9yIGNoZWNraW5nLiBJZiB3ZSdyZSByZXF1ZXN0aW5nIGEgc2Vzc2lvbiBjb21tYW5kIGV4ZWN1dGlvbiwgdGhlbiBtYWtlXG4gICAgLy8gc3VyZSB0aGF0IHNlc3Npb24gYWN0dWFsbHkgZXhpc3RzIG9uIHRoZSBzZXNzaW9uIGRyaXZlciwgYW5kIHNldCB0aGUgc2Vzc2lvbiBkcml2ZXIgaXRzZWxmXG4gICAgbGV0IHNlc3Npb25JZCA9IG51bGw7XG4gICAgbGV0IGRzdFNlc3Npb24gPSBudWxsO1xuICAgIGxldCBwcm90b2NvbCA9IG51bGw7XG4gICAgLyoqIEB0eXBlIHt0aGlzIHwgRXh0ZXJuYWxEcml2ZXJ9ICovXG4gICAgbGV0IGRyaXZlciA9IHRoaXM7XG4gICAgaWYgKGlzU2Vzc2lvbkNtZCkge1xuICAgICAgc2Vzc2lvbklkID0gXy5sYXN0KGFyZ3MpO1xuICAgICAgZHN0U2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbnNbc2Vzc2lvbklkXTtcbiAgICAgIGlmICghZHN0U2Vzc2lvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzZXNzaW9uIHdpdGggaWQgJyR7c2Vzc2lvbklkfScgZG9lcyBub3QgZXhpc3RgKTtcbiAgICAgIH1cbiAgICAgIC8vIG5vdyBzYXZlIHRoZSByZXNwb25zZSBwcm90b2NvbCBnaXZlbiB0aGF0IHRoZSBzZXNzaW9uIGRyaXZlcidzIHByb3RvY29sIG1pZ2h0IGRpZmZlclxuICAgICAgcHJvdG9jb2wgPSBkc3RTZXNzaW9uLnByb3RvY29sO1xuICAgICAgaWYgKCFpc1VtYnJlbGxhQ21kKSB7XG4gICAgICAgIGRyaXZlciA9IGRzdFNlc3Npb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZ2V0IGFueSBwbHVnaW5zIHdoaWNoIGFyZSByZWdpc3RlcmVkIGFzIGhhbmRsaW5nIHRoaXMgY29tbWFuZFxuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnNUb0hhbmRsZUNtZChjbWQsIHNlc3Npb25JZCk7XG5cbiAgICAvLyBub3cgd2UgZGVmaW5lIGEgJ2NtZEhhbmRsZWRCeScgb2JqZWN0IHdoaWNoIHdpbGwga2VlcCB0cmFjayBvZiB3aGljaCBwbHVnaW5zIGhhdmUgaGFuZGxlZCB0aGlzXG4gICAgLy8gY29tbWFuZC4gd2UgY2FyZSBhYm91dCB0aGlzIGJlY2F1c2UgKGEpIG11bHRpcGxlIHBsdWdpbnMgY2FuIGhhbmRsZSB0aGUgc2FtZSBjb21tYW5kLCBhbmRcbiAgICAvLyAoYikgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCBhIHBsdWdpbiB3aWxsIGFjdHVhbGx5IGNhbGwgdGhlIG5leHQoKSBtZXRob2Qgd2hpY2ggcnVucyB0aGVcbiAgICAvLyBvcmlnaW5hbCBjb21tYW5kIGV4ZWN1dGlvbi4gVGhpcyByZXN1bHRzIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBjb21tYW5kIG1pZ2h0IGJlIGhhbmRsZWRcbiAgICAvLyBieSBzb21lIGJ1dCBub3QgYWxsIHBsdWdpbnMsIG9yIGJ5IHBsdWdpbihzKSBidXQgbm90IGJ5IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBTbyBzdGFydCBvdXRcbiAgICAvLyB0aGlzIG9iamVjdCBkZWNsYXJpbmcgdGhhdCB0aGUgZGVmYXVsdCBoYW5kbGVyIGhhcyBub3QgYmVlbiBleGVjdXRlZC5cbiAgICBjb25zdCBjbWRIYW5kbGVkQnkgPSB7ZGVmYXVsdDogZmFsc2V9O1xuXG4gICAgLy8gbm93IHdlIGRlZmluZSBhbiBhc3luYyBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byBwbHVnaW5zLCBhbmQgc3VjY2Vzc2l2ZWx5IHdyYXBwZWRcbiAgICAvLyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBsdWdpbiB0aGF0IGNhbiBoYW5kbGUgdGhlIGNvbW1hbmQuIFRvIHN0YXJ0IG9mZiB3aXRoLCB0aGUgYXN5bmNcbiAgICAvLyBmdW5jdGlvbiBpcyBkZWZpbmVkIGFzIGNhbGxpbmcgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIGkuZS4sIHdoaWNoZXZlciBvZiB0aGUgMyBjYXNlcyBhYm92ZSBpc1xuICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBvbmVcbiAgICBjb25zdCBkZWZhdWx0QmVoYXZpb3IgPSBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBpZiB3ZSdyZSBydW5uaW5nIHdpdGggcGx1Z2lucywgbWFrZSBzdXJlIHdlIGxvZyB0aGF0IHRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIGFjdHVhbGx5XG4gICAgICAvLyBoYXBwZW5pbmcgc28gd2UgY2FuIHRlbGwgd2hlbiB0aGUgcGx1Z2luIGNhbGwgY2hhaW4gaXMgdW53cmFwcGluZyB0byB0aGUgZGVmYXVsdCBiZWhhdmlvclxuICAgICAgLy8gaWYgdGhhdCdzIHdoYXQgaGFwcGVuc1xuICAgICAgcGx1Z2lucy5sZW5ndGggJiYgdGhpcy5sb2cuaW5mbyhgRXhlY3V0aW5nIGRlZmF1bHQgaGFuZGxpbmcgYmVoYXZpb3IgZm9yIGNvbW1hbmQgJyR7Y21kfSdgKTtcblxuICAgICAgLy8gaWYgd2UgbWFrZSBpdCBoZXJlLCB3ZSBrbm93IHRoYXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgaGFuZGxlZFxuICAgICAgY21kSGFuZGxlZEJ5LmRlZmF1bHQgPSB0cnVlO1xuXG4gICAgICBpZiAocmVxRm9yUHJveHkpIHtcbiAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSBwcm94aWVkIHRoaXMgY29tbWFuZCBoYWQgYSBwbHVnaW4gbm90IGhhbmRsZWQgaXQsIHNvIHRoZSBkZWZhdWx0IGJlaGF2aW9yXG4gICAgICAgIC8vIGlzIHRvIGRvIHRoZSBwcm94eSBhbmQgcmV0cmlldmUgdGhlIHJlc3VsdCBpbnRlcm5hbGx5IHNvIGl0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBsdWdpblxuICAgICAgICAvLyBpbiBjYXNlIGl0IGNhbGxzICdhd2FpdCBuZXh0KCknLiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGRyaXZlciBoYXZlIGRlZmluZWRcbiAgICAgICAgLy8gJ3Byb3h5Q29tbWFuZCcgYW5kIG5vdCBqdXN0ICdwcm94eVJlcVJlcycuXG4gICAgICAgIGlmICghZHN0U2Vzc2lvbi5wcm94eUNvbW1hbmQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCBkc3RTZXNzaW9uLnByb3h5Q29tbWFuZChcbiAgICAgICAgICByZXFGb3JQcm94eS5vcmlnaW5hbFVybCxcbiAgICAgICAgICByZXFGb3JQcm94eS5tZXRob2QsXG4gICAgICAgICAgcmVxRm9yUHJveHkuYm9keVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNHZXRTdGF0dXMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpc1VtYnJlbGxhQ21kKSB7XG4gICAgICAgIC8vIHNvbWUgY29tbWFuZHMsIGxpa2UgZGVsZXRlU2Vzc2lvbiwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdG8gaGFuZGxlIG9uICp0aGlzKiBkcml2ZXIsXG4gICAgICAgIC8vIG5vdCB0aGUgcGxhdGZvcm0gZHJpdmVyXG4gICAgICAgIHJldHVybiBhd2FpdCBCYXNlRHJpdmVyLnByb3RvdHlwZS5leGVjdXRlQ29tbWFuZC5jYWxsKHRoaXMsIGNtZCwgLi4uYXJncyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGhlcmUgd2Uga25vdyB0aGF0IHdlIGFyZSBleGVjdXRpbmcgYSBzZXNzaW9uIGNvbW1hbmQsIGFuZCBoYXZlIGEgdmFsaWQgc2Vzc2lvbiBkcml2ZXJcbiAgICAgIHJldHVybiBhd2FpdCBkc3RTZXNzaW9uLmV4ZWN1dGVDb21tYW5kKGNtZCwgLi4uYXJncyk7XG4gICAgfTtcblxuICAgIC8vIG5vdyB0YWtlIG91ciBkZWZhdWx0IGJlaGF2aW9yLCB3cmFwIGl0IHdpdGggYW55IG51bWJlciBvZiBwbHVnaW4gYmVoYXZpb3JzLCBhbmQgcnVuIGl0XG4gICAgY29uc3Qgd3JhcHBlZENtZCA9IHRoaXMud3JhcENvbW1hbmRXaXRoUGx1Z2lucyh7XG4gICAgICBkcml2ZXIsXG4gICAgICBjbWQsXG4gICAgICBhcmdzLFxuICAgICAgcGx1Z2lucyxcbiAgICAgIGNtZEhhbmRsZWRCeSxcbiAgICAgIG5leHQ6IGRlZmF1bHRCZWhhdmlvcixcbiAgICB9KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGVXcmFwcGVkQ29tbWFuZCh7d3JhcHBlZENtZCwgcHJvdG9jb2x9KTtcblxuICAgIC8vIGlmIHdlIGhhZCBwbHVnaW5zLCBtYWtlIHN1cmUgdG8gbG9nIG91dCB0aGUgaGVscGZ1bCByZXBvcnQgYWJvdXQgd2hpY2ggcGx1Z2lucyBlbmRlZCB1cFxuICAgIC8vIGhhbmRsaW5nIHRoZSBjb21tYW5kIGFuZCB3aGljaCBkaWRuJ3RcbiAgICB0aGlzLmxvZ1BsdWdpbkhhbmRsZXJSZXBvcnQocGx1Z2lucywge2NtZCwgY21kSGFuZGxlZEJ5fSk7XG5cbiAgICAvLyBBbmQgZmluYWxseSwgaWYgdGhlIGNvbW1hbmQgd2FzIGNyZWF0ZVNlc3Npb24sIHdlIHdhbnQgdG8gbWlncmF0ZSBhbnkgcGx1Z2lucyB3aGljaCB3ZXJlXG4gICAgLy8gcHJldmlvdXNseSBzZXNzaW9ubGVzcyB0byB1c2UgdGhlIG5ldyBzZXNzaW9uSWQsIHNvIHRoYXQgcGx1Z2lucyBjYW4gc2hhcmUgc3RhdGUgYmV0d2VlblxuICAgIC8vIHRoZWlyIGNyZWF0ZVNlc3Npb24gbWV0aG9kIGFuZCBvdGhlciBpbnN0YW5jZSBtZXRob2RzXG4gICAgaWYgKGNtZCA9PT0gQ1JFQVRFX1NFU1NJT05fQ09NTUFORCAmJiB0aGlzLnNlc3Npb25sZXNzUGx1Z2lucy5sZW5ndGggJiYgIXJlcy5lcnJvcikge1xuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gXy5maXJzdChyZXMudmFsdWUpO1xuICAgICAgdGhpcy5sb2cuaW5mbyhcbiAgICAgICAgYFByb21vdGluZyAke3RoaXMuc2Vzc2lvbmxlc3NQbHVnaW5zLmxlbmd0aH0gc2Vzc2lvbmxlc3MgcGx1Z2lucyB0byBiZSBhdHRhY2hlZCBgICtcbiAgICAgICAgICBgdG8gc2Vzc2lvbiBJRCAke3Nlc3Npb25JZH1gXG4gICAgICApO1xuICAgICAgdGhpcy5zZXNzaW9uUGx1Z2luc1tzZXNzaW9uSWRdID0gdGhpcy5zZXNzaW9ubGVzc1BsdWdpbnM7XG4gICAgICB0aGlzLnNlc3Npb25sZXNzUGx1Z2lucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICB3cmFwQ29tbWFuZFdpdGhQbHVnaW5zKHtkcml2ZXIsIGNtZCwgYXJncywgbmV4dCwgY21kSGFuZGxlZEJ5LCBwbHVnaW5zfSkge1xuICAgIHBsdWdpbnMubGVuZ3RoICYmXG4gICAgICB0aGlzLmxvZy5pbmZvKGBQbHVnaW5zIHdoaWNoIGNhbiBoYW5kbGUgY21kICcke2NtZH0nOiAke3BsdWdpbnMubWFwKChwKSA9PiBwLm5hbWUpfWApO1xuXG4gICAgLy8gbm93IHdlIGNhbiBnbyB0aHJvdWdoIGVhY2ggcGx1Z2luIGFuZCB3cmFwIGBuZXh0YCBhcm91bmQgaXRzIG93biBoYW5kbGVyLCBwYXNzaW5nIHRoZSAqb2xkKlxuICAgIC8vIG5leHQgaW4gc28gdGhhdCBpdCBjYW4gY2FsbCBpdCBpZiBpdCB3YW50cyB0b1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIC8vIG5lZWQgYW4gSUlGRSBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdmFsdWUgb2YgbmV4dCB0aGF0J3MgcGFzc2VkIHRvIHBsdWdpbi5oYW5kbGUgdG8gYmVcbiAgICAgIC8vIGV4YWN0bHkgdGhlIHZhbHVlIG9mIG5leHQgaGVyZSBiZWZvcmUgcmVhc3NpZ25tZW50OyB3ZSBkb24ndCB3YW50IGl0IHRvIGJlIGxhemlseVxuICAgICAgLy8gZXZhbHVhdGVkLCBvdGhlcndpc2Ugd2UgZW5kIHVwIHdpdGggaW5maW5pdGUgcmVjdXJzaW9uIG9mIHRoZSBsYXN0IGBuZXh0YCB0byBiZSBkZWZpbmVkLlxuICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IGZhbHNlOyAvLyB3ZSBzZWUgYSBuZXcgcGx1Z2luLCBzbyBhZGQgaXQgdG8gdGhlICdjbWRIYW5kbGVkQnknIG9iamVjdFxuICAgICAgbmV4dCA9ICgoX25leHQpID0+IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2cuaW5mbyhgUGx1Z2luICR7cGx1Z2luLm5hbWV9IGlzIG5vdyBoYW5kbGluZyBjbWQgJyR7Y21kfSdgKTtcbiAgICAgICAgY21kSGFuZGxlZEJ5W3BsdWdpbi5uYW1lXSA9IHRydWU7IC8vIGlmIHdlIG1ha2UgaXQgaGVyZSwgdGhpcyBwbHVnaW4gaGFzIGF0dGVtcHRlZCB0byBoYW5kbGUgY21kXG4gICAgICAgIC8vIGZpcnN0IGF0dGVtcHQgdG8gaGFuZGxlIHRoZSBjb21tYW5kIHZpYSBhIGNvbW1hbmQtc3BlY2lmaWMgaGFuZGxlciBvbiB0aGUgcGx1Z2luXG4gICAgICAgIGlmIChwbHVnaW5bY21kXSkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW5bY21kXShfbmV4dCwgZHJpdmVyLCAuLi5hcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGhlcndpc2UsIGNhbGwgdGhlIGdlbmVyaWMgJ2hhbmRsZScgbWV0aG9kXG4gICAgICAgIHJldHVybiBhd2FpdCBwbHVnaW4uaGFuZGxlKF9uZXh0LCBkcml2ZXIsIGNtZCwgLi4uYXJncyk7XG4gICAgICB9KShuZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIGxvZ1BsdWdpbkhhbmRsZXJSZXBvcnQocGx1Z2lucywge2NtZCwgY21kSGFuZGxlZEJ5fSkge1xuICAgIGlmICghcGx1Z2lucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBkYXksIHdlIGhhdmUgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB3aGljaCBwbHVnaW5zIGVuZGVkIHVwIGdldHRpbmdcbiAgICAvLyB0aGVpciBjb2RlIHJ1biBhcyBwYXJ0IG9mIGhhbmRsaW5nIHRoaXMgY29tbWFuZC4gQmVjYXVzZSBwbHVnaW5zIGNhbiBjaG9vc2UgKm5vdCogdG9cbiAgICAvLyBwYXNzIGNvbnRyb2wgdG8gb3RoZXIgcGx1Z2lucyBvciB0byB0aGUgZGVmYXVsdCBkcml2ZXIgYmVoYXZpb3IsIHRoaXMgaXMgaW5mb3JtYXRpb25cbiAgICAvLyB3aGljaCBpcyBwcm9iYWJseSB1c2VmdWwgdG8gdGhlIHVzZXIgKGVzcGVjaWFsbHkgaW4gc2l0dWF0aW9ucyB3aGVyZSBwbHVnaW5zIG1pZ2h0IG5vdFxuICAgIC8vIGludGVyYWN0IHdlbGwgdG9nZXRoZXIsIGFuZCBpdCB3b3VsZCBiZSBoYXJkIHRvIGRlYnVnIG90aGVyd2lzZSB3aXRob3V0IHRoaXMga2luZCBvZlxuICAgIC8vIG1lc3NhZ2UpLlxuICAgIGNvbnN0IGRpZEhhbmRsZSA9IE9iamVjdC5rZXlzKGNtZEhhbmRsZWRCeSkuZmlsdGVyKChrKSA9PiBjbWRIYW5kbGVkQnlba10pO1xuICAgIGNvbnN0IGRpZG50SGFuZGxlID0gT2JqZWN0LmtleXMoY21kSGFuZGxlZEJ5KS5maWx0ZXIoKGspID0+ICFjbWRIYW5kbGVkQnlba10pO1xuICAgIGlmIChkaWRudEhhbmRsZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmxvZy5pbmZvKFxuICAgICAgICBgQ29tbWFuZCAnJHtjbWR9JyB3YXMgKm5vdCogaGFuZGxlZCBieSB0aGUgZm9sbG93aW5nIGJlaGF2aW91cnMgb3IgcGx1Z2lucywgZXZlbiBgICtcbiAgICAgICAgICBgdGhvdWdoIHRoZXkgd2VyZSByZWdpc3RlcmVkIHRvIGhhbmRsZSBpdDogJHtKU09OLnN0cmluZ2lmeShkaWRudEhhbmRsZSl9LiBUaGUgYCArXG4gICAgICAgICAgYGNvbW1hbmQgKndhcyogaGFuZGxlZCBieSB0aGVzZTogJHtKU09OLnN0cmluZ2lmeShkaWRIYW5kbGUpfS5gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVXcmFwcGVkQ29tbWFuZCh7d3JhcHBlZENtZCwgcHJvdG9jb2x9KSB7XG4gICAgbGV0IGNtZFJlcyxcbiAgICAgIGNtZEVycixcbiAgICAgIHJlcyA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyBBdCB0aGlzIHBvaW50LCBgd3JhcHBlZENtZGAgZGVmaW5lcyBhIHdob2xlIHNlcXVlbmNlIG9mIHBsdWdpbiBoYW5kbGVycywgY3VsbWluYXRpbmcgaW5cbiAgICAgIC8vIG91ciBkZWZhdWx0IGhhbmRsZXIuIFdoYXRldmVyIGl0IHJldHVybnMgaXMgd2hhdCB3ZSdyZSBnb2luZyB0byB3YW50IHRvIHNlbmQgYmFjayB0byB0aGVcbiAgICAgIC8vIHVzZXIuXG4gICAgICBjbWRSZXMgPSBhd2FpdCB3cmFwcGVkQ21kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY21kRXJyID0gZTtcbiAgICB9XG5cbiAgICAvLyBTYWRseSwgd2UgZG9uJ3Qga25vdyBleGFjdGx5IHdoYXQga2luZCBvZiBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC4gSXQgd2lsbCBlaXRoZXIgYmUgYSBiYXJlXG4gICAgLy8gb2JqZWN0LCBvciBhIHByb3RvY29sLWF3YXJlIG9iamVjdCB3aXRoIHByb3RvY29sIGFuZCBlcnJvci92YWx1ZSBrZXlzLiBTbyB3ZSBuZWVkIHRvIHNuaWZmXG4gICAgLy8gaXQgYW5kIG1ha2Ugc3VyZSB3ZSBkb24ndCBkb3VibGUtd3JhcCBpdCBpZiBpdCdzIHRoZSBsYXR0ZXIga2luZC5cbiAgICBpZiAoXy5pc1BsYWluT2JqZWN0KGNtZFJlcykgJiYgXy5oYXMoY21kUmVzLCAncHJvdG9jb2wnKSkge1xuICAgICAgcmVzID0gY21kUmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBjbWRSZXM7XG4gICAgICByZXMuZXJyb3IgPSBjbWRFcnI7XG4gICAgICByZXMucHJvdG9jb2wgPSBwcm90b2NvbDtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByb3h5QWN0aXZlKHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgXy5pc0Z1bmN0aW9uKGRzdFNlc3Npb24ucHJveHlBY3RpdmUpICYmIGRzdFNlc3Npb24ucHJveHlBY3RpdmUoc2Vzc2lvbklkKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2Vzc2lvbklkXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Sb3V0ZU1hdGNoZXJbXX1cbiAgICovXG4gIGdldFByb3h5QXZvaWRMaXN0KHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gPyBkc3RTZXNzaW9uLmdldFByb3h5QXZvaWRMaXN0KCkgOiBbXTtcbiAgfVxuXG4gIGNhblByb3h5KHNlc3Npb25JZCkge1xuICAgIGNvbnN0IGRzdFNlc3Npb24gPSB0aGlzLnNlc3Npb25zW3Nlc3Npb25JZF07XG4gICAgcmV0dXJuIGRzdFNlc3Npb24gJiYgZHN0U2Vzc2lvbi5jYW5Qcm94eShzZXNzaW9uSWQpO1xuICB9XG59XG5cbi8vIGhlbHAgZGVjaWRlIHdoaWNoIGNvbW1hbmRzIHNob3VsZCBiZSBwcm94aWVkIHRvIHN1Yi1kcml2ZXJzIGFuZCB3aGljaFxuLy8gc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhpcywgb3VyIHVtYnJlbGxhIGRyaXZlclxuZnVuY3Rpb24gaXNBcHBpdW1Ecml2ZXJDb21tYW5kKGNtZCkge1xuICByZXR1cm4gIWlzU2Vzc2lvbkNvbW1hbmQoY21kKSB8fCBjbWQgPT09IERFTEVURV9TRVNTSU9OX0NPTU1BTkQ7XG59XG5cbi8qKlxuICogVGhyb3duIHdoZW4gQXBwaXVtIHRyaWVkIHRvIHByb3h5IGEgY29tbWFuZCB1c2luZyBhIGRyaXZlcidzIGBwcm94eUNvbW1hbmRgIG1ldGhvZCBidXQgdGhlXG4gKiBtZXRob2QgZGlkIG5vdCBleGlzdFxuICovXG5leHBvcnQgY2xhc3MgTm9Ecml2ZXJQcm94eUNvbW1hbmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgY29kZSA9ICdBUFBJVU1FUlJfTk9fRFJJVkVSX1BST1hZQ09NTUFORCc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBgVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIHRoaXMgY29tbWFuZCB3YXMgdG8gcHJveHksIGJ1dCB0aGUgZHJpdmVyIGAgK1xuICAgICAgICBgZGlkIG5vdCBoYXZlIHRoZSAncHJveHlDb21tYW5kJyBtZXRob2QgZGVmaW5lZC4gVG8gZnVsbHkgc3VwcG9ydCBgICtcbiAgICAgICAgYHBsdWdpbnMsIGRyaXZlcnMgc2hvdWxkIGhhdmUgJ3Byb3h5Q29tbWFuZCcgc2V0IHRvIGEgandwUHJveHkgb2JqZWN0J3MgYCArXG4gICAgICAgIGAnY29tbWFuZCgpJyBtZXRob2QsIGluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgJ3Byb3h5UmVxUmVzJ2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCB7QXBwaXVtRHJpdmVyfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRXh0ZXJuYWxEcml2ZXJ9IEV4dGVybmFsRHJpdmVyXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuRHJpdmVyfSBEcml2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJDbGFzc30gRHJpdmVyQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5XM0NDYXBhYmlsaXRpZXN9IFczQ0NhcGFiaWxpdGllc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckRhdGF9IERyaXZlckRhdGFcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5TZXJ2ZXJBcmdzfSBEcml2ZXJPcHRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQ29uc3RyYWludHN9IENvbnN0cmFpbnRzXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuQXBwaXVtU2VydmVyfSBBcHBpdW1TZXJ2ZXJcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuL2V4dGVuc2lvbi9kcml2ZXItY29uZmlnJykuRHJpdmVyQ29uZmlnfSBEcml2ZXJDb25maWdcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5QbHVnaW59IFBsdWdpblxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpblR5cGV9IFBsdWdpblR5cGVcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuU2Vzc2lvbkhhbmRsZXI8U2Vzc2lvbkhhbmRsZXJSZXN1bHQ8YW55W10+LFNlc3Npb25IYW5kbGVyUmVzdWx0PHZvaWQ+Pn0gU2Vzc2lvbkhhbmRsZXJcbiAqL1xuXG4vKipcbiAqIFVzZWQgYnkge0BsaW5rY29kZSBBcHBpdW1Ecml2ZXIuY3JlYXRlU2Vzc2lvbn0gYW5kIHtAbGlua2NvZGUgQXBwaXVtRHJpdmVyLmRlbGV0ZVNlc3Npb259IHRvIGRlc2NyaWJlXG4gKiByZXN1bHQuXG4gKiBAdGVtcGxhdGUgVlxuICogQHR5cGVkZWYgU2Vzc2lvbkhhbmRsZXJSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7Vn0gW3ZhbHVlXVxuICogQHByb3BlcnR5IHtFcnJvcn0gW2Vycm9yXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwcm90b2NvbF1cbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQVNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BLE1BQU1BLDRCQUE0QixHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBYztFQUNqREMsY0FBYyxF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
@@ -109,7 +109,7 @@ function makeRunArgs(type) {
109
109
  }], [['scriptName'], {
110
110
  default: null,
111
111
  type: 'str',
112
- help: `Name of the script to run from the ${type}. The script name must be cached ` + `inside the "scripts" field under "appium" inside the ${type}'s "package.json" file`
112
+ help: `Name of the script to run from the ${type}. The script name must be a key ` + `inside the "appium.scripts" field inside the ${type}'s "package.json" file`
113
113
  }]]);
114
114
  }
115
115
 
@@ -141,4 +141,4 @@ const serverArgsDisallowedInConfig = new Map([[['--shell'], {
141
141
  required: false,
142
142
  help: 'Explicit path to Appium configuration file'
143
143
  }]]);
144
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEUklWRVJfRVhBTVBMRSIsIlBMVUdJTl9FWEFNUExFIiwiSU5TVEFMTF9UWVBFU19BUlJBWSIsIklOU1RBTExfVFlQRVMiLCJFWFRFTlNJT05fVFlQRVMiLCJTZXQiLCJEUklWRVJfVFlQRSIsIlBMVUdJTl9UWVBFIiwiZ2xvYmFsRXh0ZW5zaW9uQXJncyIsIk1hcCIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImFjdGlvbiIsImhlbHAiLCJkZXN0IiwiZ2V0RXh0ZW5zaW9uQXJncyIsIl8iLCJtZW1vaXplIiwiZXh0ZW5zaW9uQXJncyIsInR5cGUiLCJFWFRfU1VCQ09NTUFORF9MSVNUIiwibWFrZUxpc3RBcmdzIiwiRVhUX1NVQkNPTU1BTkRfSU5TVEFMTCIsIm1ha2VJbnN0YWxsQXJncyIsIkVYVF9TVUJDT01NQU5EX1VOSU5TVEFMTCIsIm1ha2VVbmluc3RhbGxBcmdzIiwiRVhUX1NVQkNPTU1BTkRfVVBEQVRFIiwibWFrZVVwZGF0ZUFyZ3MiLCJFWFRfU1VCQ09NTUFORF9SVU4iLCJtYWtlUnVuQXJncyIsImNob2ljZXMiLCJqb2luIiwiZ2V0U2VydmVyQXJncyIsInRvUGFyc2VyQXJncyIsInNlcnZlckFyZ3NEaXNhbGxvd2VkSW5Db25maWciLCJjb25zdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvYXJncy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgRFJJVkVSX1RZUEUsXG4gIFBMVUdJTl9UWVBFLFxuICBFWFRfU1VCQ09NTUFORF9JTlNUQUxMLFxuICBFWFRfU1VCQ09NTUFORF9MSVNULFxuICBFWFRfU1VCQ09NTUFORF9SVU4sXG4gIEVYVF9TVUJDT01NQU5EX1VOSU5TVEFMTCxcbiAgRVhUX1NVQkNPTU1BTkRfVVBEQVRFLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtJTlNUQUxMX1RZUEVTfSBmcm9tICcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge3RvUGFyc2VyQXJnc30gZnJvbSAnLi4vc2NoZW1hL2NsaS1hcmdzJztcbmNvbnN0IERSSVZFUl9FWEFNUExFID0gJ3hjdWl0ZXN0JztcbmNvbnN0IFBMVUdJTl9FWEFNUExFID0gJ2ZpbmRfYnlfaW1hZ2UnO1xuXG4vKipcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgcGFzcyB0aGUgYXJyYXkgaW50byBgYXJncGFyc2VgLiBgYXJncGFyc2VgIGlzIGJhZCBhbmQgbXV0YXRlcyB0aGluZ3MuIFdlIGRvbid0IHdhbnQgdGhhdC5cbiAqIEJhZCBgYXJncGFyc2VgISBCYWQhXG4gKi9cbmNvbnN0IElOU1RBTExfVFlQRVNfQVJSQVkgPSBbLi4uSU5TVEFMTF9UWVBFU107XG5cbi8qKiBAdHlwZSB7U2V0PEV4dGVuc2lvblR5cGU+fSAqL1xuY29uc3QgRVhURU5TSU9OX1RZUEVTID0gbmV3IFNldChbRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFXSk7XG5cbi8vIHRoaXMgc2V0IG9mIGFyZ3Mgd29ya3MgZm9yIGJvdGggZHJpdmVycyBhbmQgcGx1Z2lucyAoJ2V4dGVuc2lvbnMnKVxuLyoqIEB0eXBlIHtBcmd1bWVudERlZmluaXRpb25zfSAqL1xuY29uc3QgZ2xvYmFsRXh0ZW5zaW9uQXJncyA9IG5ldyBNYXAoW1xuICBbXG4gICAgWyctLWpzb24nXSxcbiAgICB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgaGVscDogJ1VzZSBKU09OIGZvciBvdXRwdXQgZm9ybWF0JyxcbiAgICAgIGRlc3Q6ICdqc29uJyxcbiAgICB9LFxuICBdLFxuXSk7XG5cbi8qKlxuICogQnVpbGRzIGEgUmVjb3JkIG9mIGV4dGVuc2lvbiB0eXBlcyB0byBhIFJlY29yZCBvZiBzdWJjb21tYW5kcyB0byB0aGVpciBhcmd1bWVudCBkZWZpbml0aW9uc1xuICovXG5jb25zdCBnZXRFeHRlbnNpb25BcmdzID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldEV4dGVuc2lvbkFyZ3MoKSB7XG4gIGNvbnN0IGV4dGVuc2lvbkFyZ3MgPSB7fTtcbiAgZm9yIChjb25zdCB0eXBlIG9mIEVYVEVOU0lPTl9UWVBFUykge1xuICAgIGV4dGVuc2lvbkFyZ3NbdHlwZV0gPSB7XG4gICAgICBbRVhUX1NVQkNPTU1BTkRfTElTVF06IG1ha2VMaXN0QXJncyh0eXBlKSxcbiAgICAgIFtFWFRfU1VCQ09NTUFORF9JTlNUQUxMXTogbWFrZUluc3RhbGxBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1VOSU5TVEFMTF06IG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1VQREFURV06IG1ha2VVcGRhdGVBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1JVTl06IG1ha2VSdW5BcmdzKHR5cGUpLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPEV4dGVuc2lvblR5cGUsIFJlY29yZDxpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkNsaUV4dGVuc2lvblN1YmNvbW1hbmQsQXJndW1lbnREZWZpbml0aW9ucz4+fSAqLyAoXG4gICAgZXh0ZW5zaW9uQXJnc1xuICApO1xufSk7XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgbGlzdGAgc3ViY29tbWFuZCBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VMaXN0QXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFsnLS1pbnN0YWxsZWQnXSxcbiAgICAgIHtcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgICAgIGhlbHA6IGBMaXN0IG9ubHkgaW5zdGFsbGVkICR7dHlwZX1zYCxcbiAgICAgICAgZGVzdDogJ3Nob3dJbnN0YWxsZWQnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIFtcbiAgICAgIFsnLS11cGRhdGVzJ10sXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgICBoZWxwOiAnU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBuZXdlciB2ZXJzaW9ucycsXG4gICAgICAgIGRlc3Q6ICdzaG93VXBkYXRlcycsXG4gICAgICB9LFxuICAgIF0sXG4gIF0pO1xufVxuXG4vKipcbiAqIE1ha2VzIHRoZSBvcHRzIGZvciB0aGUgYGluc3RhbGxgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VJbnN0YWxsQXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFt0eXBlXSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gaW5zdGFsbCwgZm9yIGV4YW1wbGU6IGAgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJy0tc291cmNlJ10sXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgY2hvaWNlczogSU5TVEFMTF9UWVBFU19BUlJBWSxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgV2hlcmUgdG8gbG9vayBmb3IgdGhlICR7dHlwZX0gaWYgaXQgaXMgbm90IG9uZSBvZiBBcHBpdW0ncyB2ZXJpZmllZCBgICtcbiAgICAgICAgICBgJHt0eXBlfXMuIFBvc3NpYmxlIHZhbHVlczogJHtJTlNUQUxMX1RZUEVTX0FSUkFZLmpvaW4oJywgJyl9YCxcbiAgICAgICAgZGVzdDogJ2luc3RhbGxUeXBlJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJy0tcGFja2FnZSddLFxuICAgICAge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgICBoZWxwOlxuICAgICAgICAgIGBJZiBpbnN0YWxsaW5nIGZyb20gR2l0IG9yIEdpdEh1YiwgdGhlIHBhY2thZ2UgbmFtZSwgYXMgZGVmaW5lZCBpbiB0aGUgcGx1Z2luJ3MgYCArXG4gICAgICAgICAgYHBhY2thZ2UuanNvbiBmaWxlIGluIHRoZSBcIm5hbWVcIiBmaWVsZCwgY2Fubm90IGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSwgYW5kIGAgK1xuICAgICAgICAgIGBzaG91bGQgYmUgcmVwb3J0ZWQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBpbnN0YWxsIHdpbGwgcHJvYmFibHkgZmFpbC5gLFxuICAgICAgICBkZXN0OiAncGFja2FnZU5hbWUnLFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGB1bmluc3RhbGxgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpIHtcbiAgcmV0dXJuIG5ldyBNYXAoW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1xuICAgICAgW3R5cGVdLFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RyJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICAnTmFtZSBvZiB0aGUgZHJpdmVyIHRvIHVuaW5zdGFsbCwgZm9yIGV4YW1wbGU6ICcgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgdXBkYXRlYCBzdWJjb21tYW5kIGZvciBlYWNoIGV4dGVuc2lvbiB0eXBlXG4gKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IHR5cGVcbiAqIEByZXR1cm5zIHtBcmd1bWVudERlZmluaXRpb25zfVxuICovXG5mdW5jdGlvbiBtYWtlVXBkYXRlQXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFt0eXBlXSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gdXBkYXRlLCBvciB0aGUgd29yZCBcImluc3RhbGxlZFwiIHRvIHVwZGF0ZSBhbGwgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgYCR7dHlwZX1zLiBUbyBzZWUgYXZhaWxhYmxlIHVwZGF0ZXMsIHJ1biBcImFwcGl1bSAke3R5cGV9IGxpc3QgLS1pbnN0YWxsZWQgLS11cGRhdGVzXCIuIGAgK1xuICAgICAgICAgICAgJ0ZvciBleGFtcGxlOiAnICtcbiAgICAgICAgICAgIHR5cGUgPT09XG4gICAgICAgICAgRFJJVkVSX1RZUEVcbiAgICAgICAgICAgID8gRFJJVkVSX0VYQU1QTEVcbiAgICAgICAgICAgIDogUExVR0lOX0VYQU1QTEUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgW1xuICAgICAgWyctLXVuc2FmZSddLFxuICAgICAge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgSW5jbHVkZSB1cGRhdGVzIHRoYXQgbWlnaHQgaGF2ZSBhIG5ldyBtYWpvciByZXZpc2lvbiwgYW5kIHBvdGVudGlhbGx5IGluY2x1ZGUgYCArXG4gICAgICAgICAgYGJyZWFraW5nIGNoYW5nZXNgLFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGBydW5gIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VSdW5BcmdzKHR5cGUpIHtcbiAgcmV0dXJuIG5ldyBNYXAoW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1xuICAgICAgW3R5cGVdLFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RyJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgTmFtZSBvZiB0aGUgJHt0eXBlfSB0byBydW4gYSBzY3JpcHQgZnJvbSwgZm9yIGV4YW1wbGU6IGAgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJ3NjcmlwdE5hbWUnXSxcbiAgICAgIHtcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW4gZnJvbSB0aGUgJHt0eXBlfS4gVGhlIHNjcmlwdCBuYW1lIG11c3QgYmUgY2FjaGVkIGAgK1xuICAgICAgICAgIGBpbnNpZGUgdGhlIFwic2NyaXB0c1wiIGZpZWxkIHVuZGVyIFwiYXBwaXVtXCIgaW5zaWRlIHRoZSAke3R5cGV9J3MgXCJwYWNrYWdlLmpzb25cIiBmaWxlYCxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59XG5cbi8qKlxuICogRGVyaXZlcyB0aGUgb3B0aW9ucyBmb3IgdGhlIGBzZXJ2ZXJgIGNvbW1hbmQgZnJvbSB0aGUgc2NoZW1hLCBhbmQgYWRkcyB0aGUgYXJndW1lbnRzXG4gKiB3aGljaCBhcmUgZGlzYWxsb3dlZCBpbiB0aGUgY29uZmlnIGZpbGUuXG4gKiBAcmV0dXJucyB7QXJndW1lbnREZWZpbml0aW9uc31cbiAqL1xuZnVuY3Rpb24gZ2V0U2VydmVyQXJncygpIHtcbiAgcmV0dXJuIG5ldyBNYXAoWy4uLnRvUGFyc2VyQXJncygpLCAuLi5zZXJ2ZXJBcmdzRGlzYWxsb3dlZEluQ29uZmlnXSk7XG59XG5cbi8qKlxuICogVGhlc2UgZG9uJ3QgbWFrZSBzZW5zZSBpbiB0aGUgY29udGV4dCBvZiBhIGNvbmZpZyBmaWxlIGZvciBvYnZpb3VzIHJlYXNvbnMuXG4gKiBAdHlwZSB7QXJndW1lbnREZWZpbml0aW9uc31cbiAqL1xuY29uc3Qgc2VydmVyQXJnc0Rpc2FsbG93ZWRJbkNvbmZpZyA9IG5ldyBNYXAoW1xuICBbXG4gICAgWyctLXNoZWxsJ10sXG4gICAge1xuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscDogJ0VudGVyIFJFUEwgbW9kZScsXG4gICAgICBhY3Rpb246ICdzdG9yZV9jb25zdCcsXG4gICAgICBjb25zdDogdHJ1ZSxcbiAgICAgIGRlc3Q6ICdzaGVsbCcsXG4gICAgfSxcbiAgXSxcbiAgW1xuICAgIFsnLS1zaG93LWJ1aWxkLWluZm8nXSxcbiAgICB7XG4gICAgICBkZXN0OiAnc2hvd0J1aWxkSW5mbycsXG4gICAgICBhY3Rpb246ICdzdG9yZV9jb25zdCcsXG4gICAgICBjb25zdDogdHJ1ZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGhlbHA6ICdTaG93IGluZm8gYWJvdXQgdGhlIEFwcGl1bSBidWlsZCBhbmQgZXhpdCcsXG4gICAgfSxcbiAgXSxcbiAgW1xuICAgIFsnLS1zaG93LWNvbmZpZyddLFxuICAgIHtcbiAgICAgIGRlc3Q6ICdzaG93Q29uZmlnJyxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX2NvbnN0JyxcbiAgICAgIGNvbnN0OiB0cnVlLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscDogJ1Nob3cgdGhlIGN1cnJlbnQgQXBwaXVtIGNvbmZpZ3VyYXRpb24gYW5kIGV4aXQnLFxuICAgIH0sXG4gIF0sXG4gIFtcbiAgICBbJy0tY29uZmlnJ10sXG4gICAge1xuICAgICAgZGVzdDogJ2NvbmZpZ0ZpbGUnLFxuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBoZWxwOiAnRXhwbGljaXQgcGF0aCB0byBBcHBpdW0gY29uZmlndXJhdGlvbiBmaWxlJyxcbiAgICB9LFxuICBdLFxuXSk7XG5cbmV4cG9ydCB7Z2V0U2VydmVyQXJncywgZ2V0RXh0ZW5zaW9uQXJnc307XG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkV4dGVuc2lvblR5cGV9IEV4dGVuc2lvblR5cGVcbiAqL1xuXG4vKipcbiAqIEEgdHVwbGUgb2YgYXJndW1lbnQgYWxpYXNlcyBhbmQgYXJndW1lbnQgb3B0aW9uc1xuICogQHR5cGVkZWYge01hcDxzdHJpbmdbXSxpbXBvcnQoJ2FyZ3BhcnNlJykuQXJndW1lbnRPcHRpb25zPn0gQXJndW1lbnREZWZpbml0aW9uc1xuICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQVNB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
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEUklWRVJfRVhBTVBMRSIsIlBMVUdJTl9FWEFNUExFIiwiSU5TVEFMTF9UWVBFU19BUlJBWSIsIklOU1RBTExfVFlQRVMiLCJFWFRFTlNJT05fVFlQRVMiLCJTZXQiLCJEUklWRVJfVFlQRSIsIlBMVUdJTl9UWVBFIiwiZ2xvYmFsRXh0ZW5zaW9uQXJncyIsIk1hcCIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImFjdGlvbiIsImhlbHAiLCJkZXN0IiwiZ2V0RXh0ZW5zaW9uQXJncyIsIl8iLCJtZW1vaXplIiwiZXh0ZW5zaW9uQXJncyIsInR5cGUiLCJFWFRfU1VCQ09NTUFORF9MSVNUIiwibWFrZUxpc3RBcmdzIiwiRVhUX1NVQkNPTU1BTkRfSU5TVEFMTCIsIm1ha2VJbnN0YWxsQXJncyIsIkVYVF9TVUJDT01NQU5EX1VOSU5TVEFMTCIsIm1ha2VVbmluc3RhbGxBcmdzIiwiRVhUX1NVQkNPTU1BTkRfVVBEQVRFIiwibWFrZVVwZGF0ZUFyZ3MiLCJFWFRfU1VCQ09NTUFORF9SVU4iLCJtYWtlUnVuQXJncyIsImNob2ljZXMiLCJqb2luIiwiZ2V0U2VydmVyQXJncyIsInRvUGFyc2VyQXJncyIsInNlcnZlckFyZ3NEaXNhbGxvd2VkSW5Db25maWciLCJjb25zdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvYXJncy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgRFJJVkVSX1RZUEUsXG4gIFBMVUdJTl9UWVBFLFxuICBFWFRfU1VCQ09NTUFORF9JTlNUQUxMLFxuICBFWFRfU1VCQ09NTUFORF9MSVNULFxuICBFWFRfU1VCQ09NTUFORF9SVU4sXG4gIEVYVF9TVUJDT01NQU5EX1VOSU5TVEFMTCxcbiAgRVhUX1NVQkNPTU1BTkRfVVBEQVRFLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtJTlNUQUxMX1RZUEVTfSBmcm9tICcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZyc7XG5pbXBvcnQge3RvUGFyc2VyQXJnc30gZnJvbSAnLi4vc2NoZW1hL2NsaS1hcmdzJztcbmNvbnN0IERSSVZFUl9FWEFNUExFID0gJ3hjdWl0ZXN0JztcbmNvbnN0IFBMVUdJTl9FWEFNUExFID0gJ2ZpbmRfYnlfaW1hZ2UnO1xuXG4vKipcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgcGFzcyB0aGUgYXJyYXkgaW50byBgYXJncGFyc2VgLiBgYXJncGFyc2VgIGlzIGJhZCBhbmQgbXV0YXRlcyB0aGluZ3MuIFdlIGRvbid0IHdhbnQgdGhhdC5cbiAqIEJhZCBgYXJncGFyc2VgISBCYWQhXG4gKi9cbmNvbnN0IElOU1RBTExfVFlQRVNfQVJSQVkgPSBbLi4uSU5TVEFMTF9UWVBFU107XG5cbi8qKiBAdHlwZSB7U2V0PEV4dGVuc2lvblR5cGU+fSAqL1xuY29uc3QgRVhURU5TSU9OX1RZUEVTID0gbmV3IFNldChbRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFXSk7XG5cbi8vIHRoaXMgc2V0IG9mIGFyZ3Mgd29ya3MgZm9yIGJvdGggZHJpdmVycyBhbmQgcGx1Z2lucyAoJ2V4dGVuc2lvbnMnKVxuLyoqIEB0eXBlIHtBcmd1bWVudERlZmluaXRpb25zfSAqL1xuY29uc3QgZ2xvYmFsRXh0ZW5zaW9uQXJncyA9IG5ldyBNYXAoW1xuICBbXG4gICAgWyctLWpzb24nXSxcbiAgICB7XG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgaGVscDogJ1VzZSBKU09OIGZvciBvdXRwdXQgZm9ybWF0JyxcbiAgICAgIGRlc3Q6ICdqc29uJyxcbiAgICB9LFxuICBdLFxuXSk7XG5cbi8qKlxuICogQnVpbGRzIGEgUmVjb3JkIG9mIGV4dGVuc2lvbiB0eXBlcyB0byBhIFJlY29yZCBvZiBzdWJjb21tYW5kcyB0byB0aGVpciBhcmd1bWVudCBkZWZpbml0aW9uc1xuICovXG5jb25zdCBnZXRFeHRlbnNpb25BcmdzID0gXy5tZW1vaXplKGZ1bmN0aW9uIGdldEV4dGVuc2lvbkFyZ3MoKSB7XG4gIGNvbnN0IGV4dGVuc2lvbkFyZ3MgPSB7fTtcbiAgZm9yIChjb25zdCB0eXBlIG9mIEVYVEVOU0lPTl9UWVBFUykge1xuICAgIGV4dGVuc2lvbkFyZ3NbdHlwZV0gPSB7XG4gICAgICBbRVhUX1NVQkNPTU1BTkRfTElTVF06IG1ha2VMaXN0QXJncyh0eXBlKSxcbiAgICAgIFtFWFRfU1VCQ09NTUFORF9JTlNUQUxMXTogbWFrZUluc3RhbGxBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1VOSU5TVEFMTF06IG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1VQREFURV06IG1ha2VVcGRhdGVBcmdzKHR5cGUpLFxuICAgICAgW0VYVF9TVUJDT01NQU5EX1JVTl06IG1ha2VSdW5BcmdzKHR5cGUpLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIC8qKiBAdHlwZSB7UmVjb3JkPEV4dGVuc2lvblR5cGUsIFJlY29yZDxpbXBvcnQoJ2FwcGl1bS90eXBlcycpLkNsaUV4dGVuc2lvblN1YmNvbW1hbmQsQXJndW1lbnREZWZpbml0aW9ucz4+fSAqLyAoXG4gICAgZXh0ZW5zaW9uQXJnc1xuICApO1xufSk7XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgbGlzdGAgc3ViY29tbWFuZCBmb3IgZWFjaCBleHRlbnNpb24gdHlwZS5cbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VMaXN0QXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFsnLS1pbnN0YWxsZWQnXSxcbiAgICAgIHtcbiAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgYWN0aW9uOiAnc3RvcmVfdHJ1ZScsXG4gICAgICAgIGhlbHA6IGBMaXN0IG9ubHkgaW5zdGFsbGVkICR7dHlwZX1zYCxcbiAgICAgICAgZGVzdDogJ3Nob3dJbnN0YWxsZWQnLFxuICAgICAgfSxcbiAgICBdLFxuICAgIFtcbiAgICAgIFsnLS11cGRhdGVzJ10sXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGFjdGlvbjogJ3N0b3JlX3RydWUnLFxuICAgICAgICBoZWxwOiAnU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBuZXdlciB2ZXJzaW9ucycsXG4gICAgICAgIGRlc3Q6ICdzaG93VXBkYXRlcycsXG4gICAgICB9LFxuICAgIF0sXG4gIF0pO1xufVxuXG4vKipcbiAqIE1ha2VzIHRoZSBvcHRzIGZvciB0aGUgYGluc3RhbGxgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VJbnN0YWxsQXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFt0eXBlXSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gaW5zdGFsbCwgZm9yIGV4YW1wbGU6IGAgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJy0tc291cmNlJ10sXG4gICAgICB7XG4gICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgY2hvaWNlczogSU5TVEFMTF9UWVBFU19BUlJBWSxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgV2hlcmUgdG8gbG9vayBmb3IgdGhlICR7dHlwZX0gaWYgaXQgaXMgbm90IG9uZSBvZiBBcHBpdW0ncyB2ZXJpZmllZCBgICtcbiAgICAgICAgICBgJHt0eXBlfXMuIFBvc3NpYmxlIHZhbHVlczogJHtJTlNUQUxMX1RZUEVTX0FSUkFZLmpvaW4oJywgJyl9YCxcbiAgICAgICAgZGVzdDogJ2luc3RhbGxUeXBlJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJy0tcGFja2FnZSddLFxuICAgICAge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIHR5cGU6ICdzdHInLFxuICAgICAgICBoZWxwOlxuICAgICAgICAgIGBJZiBpbnN0YWxsaW5nIGZyb20gR2l0IG9yIEdpdEh1YiwgdGhlIHBhY2thZ2UgbmFtZSwgYXMgZGVmaW5lZCBpbiB0aGUgcGx1Z2luJ3MgYCArXG4gICAgICAgICAgYHBhY2thZ2UuanNvbiBmaWxlIGluIHRoZSBcIm5hbWVcIiBmaWVsZCwgY2Fubm90IGJlIGRldGVybWluZWQgYXV0b21hdGljYWxseSwgYW5kIGAgK1xuICAgICAgICAgIGBzaG91bGQgYmUgcmVwb3J0ZWQgaGVyZSwgb3RoZXJ3aXNlIHRoZSBpbnN0YWxsIHdpbGwgcHJvYmFibHkgZmFpbC5gLFxuICAgICAgICBkZXN0OiAncGFja2FnZU5hbWUnLFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGB1bmluc3RhbGxgIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VVbmluc3RhbGxBcmdzKHR5cGUpIHtcbiAgcmV0dXJuIG5ldyBNYXAoW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1xuICAgICAgW3R5cGVdLFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RyJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICAnTmFtZSBvZiB0aGUgZHJpdmVyIHRvIHVuaW5zdGFsbCwgZm9yIGV4YW1wbGU6ICcgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgXSk7XG59XG5cbi8qKlxuICogTWFrZXMgdGhlIG9wdHMgZm9yIHRoZSBgdXBkYXRlYCBzdWJjb21tYW5kIGZvciBlYWNoIGV4dGVuc2lvbiB0eXBlXG4gKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IHR5cGVcbiAqIEByZXR1cm5zIHtBcmd1bWVudERlZmluaXRpb25zfVxuICovXG5mdW5jdGlvbiBtYWtlVXBkYXRlQXJncyh0eXBlKSB7XG4gIHJldHVybiBuZXcgTWFwKFtcbiAgICAuLi5nbG9iYWxFeHRlbnNpb25BcmdzLFxuICAgIFtcbiAgICAgIFt0eXBlXSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlICR7dHlwZX0gdG8gdXBkYXRlLCBvciB0aGUgd29yZCBcImluc3RhbGxlZFwiIHRvIHVwZGF0ZSBhbGwgaW5zdGFsbGVkIGAgK1xuICAgICAgICAgICAgYCR7dHlwZX1zLiBUbyBzZWUgYXZhaWxhYmxlIHVwZGF0ZXMsIHJ1biBcImFwcGl1bSAke3R5cGV9IGxpc3QgLS1pbnN0YWxsZWQgLS11cGRhdGVzXCIuIGAgK1xuICAgICAgICAgICAgJ0ZvciBleGFtcGxlOiAnICtcbiAgICAgICAgICAgIHR5cGUgPT09XG4gICAgICAgICAgRFJJVkVSX1RZUEVcbiAgICAgICAgICAgID8gRFJJVkVSX0VYQU1QTEVcbiAgICAgICAgICAgIDogUExVR0lOX0VYQU1QTEUsXG4gICAgICB9LFxuICAgIF0sXG4gICAgW1xuICAgICAgWyctLXVuc2FmZSddLFxuICAgICAge1xuICAgICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBhY3Rpb246ICdzdG9yZV90cnVlJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgSW5jbHVkZSB1cGRhdGVzIHRoYXQgbWlnaHQgaGF2ZSBhIG5ldyBtYWpvciByZXZpc2lvbiwgYW5kIHBvdGVudGlhbGx5IGluY2x1ZGUgYCArXG4gICAgICAgICAgYGJyZWFraW5nIGNoYW5nZXNgLFxuICAgICAgfSxcbiAgICBdLFxuICBdKTtcbn1cblxuLyoqXG4gKiBNYWtlcyB0aGUgb3B0cyBmb3IgdGhlIGBydW5gIHN1YmNvbW1hbmQgZm9yIGVhY2ggZXh0ZW5zaW9uIHR5cGVcbiAqIEBwYXJhbSB7RXh0ZW5zaW9uVHlwZX0gdHlwZVxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIG1ha2VSdW5BcmdzKHR5cGUpIHtcbiAgcmV0dXJuIG5ldyBNYXAoW1xuICAgIC4uLmdsb2JhbEV4dGVuc2lvbkFyZ3MsXG4gICAgW1xuICAgICAgW3R5cGVdLFxuICAgICAge1xuICAgICAgICB0eXBlOiAnc3RyJyxcbiAgICAgICAgaGVscDpcbiAgICAgICAgICBgTmFtZSBvZiB0aGUgJHt0eXBlfSB0byBydW4gYSBzY3JpcHQgZnJvbSwgZm9yIGV4YW1wbGU6IGAgKyB0eXBlID09PSBEUklWRVJfVFlQRVxuICAgICAgICAgICAgPyBEUklWRVJfRVhBTVBMRVxuICAgICAgICAgICAgOiBQTFVHSU5fRVhBTVBMRSxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBbXG4gICAgICBbJ3NjcmlwdE5hbWUnXSxcbiAgICAgIHtcbiAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgdHlwZTogJ3N0cicsXG4gICAgICAgIGhlbHA6XG4gICAgICAgICAgYE5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW4gZnJvbSB0aGUgJHt0eXBlfS4gVGhlIHNjcmlwdCBuYW1lIG11c3QgYmUgYSBrZXkgYCArXG4gICAgICAgICAgYGluc2lkZSB0aGUgXCJhcHBpdW0uc2NyaXB0c1wiIGZpZWxkIGluc2lkZSB0aGUgJHt0eXBlfSdzIFwicGFja2FnZS5qc29uXCIgZmlsZWAsXG4gICAgICB9LFxuICAgIF0sXG4gIF0pO1xufVxuXG4vKipcbiAqIERlcml2ZXMgdGhlIG9wdGlvbnMgZm9yIHRoZSBgc2VydmVyYCBjb21tYW5kIGZyb20gdGhlIHNjaGVtYSwgYW5kIGFkZHMgdGhlIGFyZ3VtZW50c1xuICogd2hpY2ggYXJlIGRpc2FsbG93ZWQgaW4gdGhlIGNvbmZpZyBmaWxlLlxuICogQHJldHVybnMge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmZ1bmN0aW9uIGdldFNlcnZlckFyZ3MoKSB7XG4gIHJldHVybiBuZXcgTWFwKFsuLi50b1BhcnNlckFyZ3MoKSwgLi4uc2VydmVyQXJnc0Rpc2FsbG93ZWRJbkNvbmZpZ10pO1xufVxuXG4vKipcbiAqIFRoZXNlIGRvbid0IG1ha2Ugc2Vuc2UgaW4gdGhlIGNvbnRleHQgb2YgYSBjb25maWcgZmlsZSBmb3Igb2J2aW91cyByZWFzb25zLlxuICogQHR5cGUge0FyZ3VtZW50RGVmaW5pdGlvbnN9XG4gKi9cbmNvbnN0IHNlcnZlckFyZ3NEaXNhbGxvd2VkSW5Db25maWcgPSBuZXcgTWFwKFtcbiAgW1xuICAgIFsnLS1zaGVsbCddLFxuICAgIHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGhlbHA6ICdFbnRlciBSRVBMIG1vZGUnLFxuICAgICAgYWN0aW9uOiAnc3RvcmVfY29uc3QnLFxuICAgICAgY29uc3Q6IHRydWUsXG4gICAgICBkZXN0OiAnc2hlbGwnLFxuICAgIH0sXG4gIF0sXG4gIFtcbiAgICBbJy0tc2hvdy1idWlsZC1pbmZvJ10sXG4gICAge1xuICAgICAgZGVzdDogJ3Nob3dCdWlsZEluZm8nLFxuICAgICAgYWN0aW9uOiAnc3RvcmVfY29uc3QnLFxuICAgICAgY29uc3Q6IHRydWUsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBoZWxwOiAnU2hvdyBpbmZvIGFib3V0IHRoZSBBcHBpdW0gYnVpbGQgYW5kIGV4aXQnLFxuICAgIH0sXG4gIF0sXG4gIFtcbiAgICBbJy0tc2hvdy1jb25maWcnXSxcbiAgICB7XG4gICAgICBkZXN0OiAnc2hvd0NvbmZpZycsXG4gICAgICBhY3Rpb246ICdzdG9yZV9jb25zdCcsXG4gICAgICBjb25zdDogdHJ1ZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGhlbHA6ICdTaG93IHRoZSBjdXJyZW50IEFwcGl1bSBjb25maWd1cmF0aW9uIGFuZCBleGl0JyxcbiAgICB9LFxuICBdLFxuICBbXG4gICAgWyctLWNvbmZpZyddLFxuICAgIHtcbiAgICAgIGRlc3Q6ICdjb25maWdGaWxlJyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgaGVscDogJ0V4cGxpY2l0IHBhdGggdG8gQXBwaXVtIGNvbmZpZ3VyYXRpb24gZmlsZScsXG4gICAgfSxcbiAgXSxcbl0pO1xuXG5leHBvcnQge2dldFNlcnZlckFyZ3MsIGdldEV4dGVuc2lvbkFyZ3N9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuLyoqXG4gKiBBIHR1cGxlIG9mIGFyZ3VtZW50IGFsaWFzZXMgYW5kIGFyZ3VtZW50IG9wdGlvbnNcbiAqIEB0eXBlZGVmIHtNYXA8c3RyaW5nW10saW1wb3J0KCdhcmdwYXJzZScpLkFyZ3VtZW50T3B0aW9ucz59IEFyZ3VtZW50RGVmaW5pdGlvbnNcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFTQTs7QUFDQTs7QUFD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
@@ -18,9 +18,10 @@ export default class DriverCommand extends ExtensionCommand<"driver"> {
18
18
  driver: any;
19
19
  unsafe: any;
20
20
  }): Promise<import("./extension-command").ExtensionUpdateResult>;
21
- run({ driver, scriptName }: {
21
+ run({ driver, scriptName, extraArgs }: {
22
22
  driver: any;
23
23
  scriptName: any;
24
+ extraArgs: any;
24
25
  }): Promise<import("./extension-command").RunOutput>;
25
26
  getPostInstallText({ extName, extData }: {
26
27
  extName: any;
@@ -1 +1 @@
1
- {"version":3,"file":"driver-command.d.ts","sourceRoot":"","sources":["../../../lib/cli/driver-command.js"],"names":[],"mappings":"AAOA;;GAEG;AACH;IACE;;OAEG;IACH,8BAFW,OAAO,qBAAqB,EAAE,uBAAuB,CAAC,UAAU,CAAC,EAK3E;IAED;;;;mEAMC;IAED;;mEAEC;IAED;;;qEAEC;IAED;;;yDAEC;IAED;;;eAMC;CAwBF;;YAIa,OAAO,+BAA+B,EAAE,eAAe,CAAC,UAAU,CAAC;UACnE,OAAO;;yBAIR,OAAO,eAAe,EAAE,UAAU"}
1
+ {"version":3,"file":"driver-command.d.ts","sourceRoot":"","sources":["../../../lib/cli/driver-command.js"],"names":[],"mappings":"AAOA;;GAEG;AACH;IACE;;OAEG;IACH,8BAFW,OAAO,qBAAqB,EAAE,uBAAuB,CAAC,UAAU,CAAC,EAK3E;IAED;;;;mEAMC;IAED;;mEAEC;IAED;;;qEAEC;IAED;;;;yDAEC;IAED;;;eAMC;CAwBF;;YAIa,OAAO,+BAA+B,EAAE,eAAe,CAAC,UAAU,CAAC;UACnE,OAAO;;yBAIR,OAAO,eAAe,EAAE,UAAU"}
@@ -63,11 +63,13 @@ class DriverCommand extends _extensionCommand.default {
63
63
 
64
64
  async run({
65
65
  driver,
66
- scriptName
66
+ scriptName,
67
+ extraArgs
67
68
  }) {
68
69
  return await super._run({
69
70
  installSpec: driver,
70
- scriptName
71
+ scriptName,
72
+ extraArgs
71
73
  });
72
74
  }
73
75
 
@@ -89,4 +91,4 @@ class DriverCommand extends _extensionCommand.default {
89
91
  }
90
92
 
91
93
  exports.default = DriverCommand;
92
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRVFfRFJJVkVSX0ZJRUxEUyIsIkRyaXZlckNvbW1hbmQiLCJFeHRlbnNpb25Db21tYW5kIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJqc29uIiwia25vd25FeHRlbnNpb25zIiwiS05PV05fRFJJVkVSUyIsImluc3RhbGwiLCJkcml2ZXIiLCJpbnN0YWxsVHlwZSIsInBhY2thZ2VOYW1lIiwiX2luc3RhbGwiLCJpbnN0YWxsU3BlYyIsInVuaW5zdGFsbCIsIl91bmluc3RhbGwiLCJ1cGRhdGUiLCJ1bnNhZmUiLCJfdXBkYXRlIiwicnVuIiwic2NyaXB0TmFtZSIsIl9ydW4iLCJnZXRQb3N0SW5zdGFsbFRleHQiLCJleHROYW1lIiwiZXh0RGF0YSIsInZlcnNpb24iLCJncmVlbiIsImF1dG9tYXRpb25OYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInBsYXRmb3JtTmFtZXMiLCJ2YWxpZGF0ZUV4dGVuc2lvbkZpZWxkcyIsImRyaXZlck1ldGFkYXRhIiwibWlzc2luZ0ZpZWxkcyIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwiXyIsImlzRW1wdHkiLCJFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvZHJpdmVyLWNvbW1hbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db21tYW5kIGZyb20gJy4vZXh0ZW5zaW9uLWNvbW1hbmQnO1xuaW1wb3J0IHtLTk9XTl9EUklWRVJTfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0ICdAY29sb3JzL2NvbG9ycyc7XG5cbmNvbnN0IFJFUV9EUklWRVJfRklFTERTID0gWydkcml2ZXJOYW1lJywgJ2F1dG9tYXRpb25OYW1lJywgJ3BsYXRmb3JtTmFtZXMnLCAnbWFpbkNsYXNzJ107XG5cbi8qKlxuICogQGV4dGVuZHMge0V4dGVuc2lvbkNvbW1hbmQ8RHJpdmVyVHlwZT59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlckNvbW1hbmQgZXh0ZW5kcyBFeHRlbnNpb25Db21tYW5kIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL2V4dGVuc2lvbi1jb21tYW5kJykuRXh0ZW5zaW9uQ29tbWFuZE9wdGlvbnM8RHJpdmVyVHlwZT59IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWcsIGpzb259KSB7XG4gICAgc3VwZXIoe2NvbmZpZywganNvbn0pO1xuICAgIHRoaXMua25vd25FeHRlbnNpb25zID0gS05PV05fRFJJVkVSUztcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGwoe2RyaXZlciwgaW5zdGFsbFR5cGUsIHBhY2thZ2VOYW1lfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5faW5zdGFsbCh7XG4gICAgICBpbnN0YWxsU3BlYzogZHJpdmVyLFxuICAgICAgaW5zdGFsbFR5cGUsXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbCh7ZHJpdmVyfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5fdW5pbnN0YWxsKHtpbnN0YWxsU3BlYzogZHJpdmVyfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoe2RyaXZlciwgdW5zYWZlfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5fdXBkYXRlKHtpbnN0YWxsU3BlYzogZHJpdmVyLCB1bnNhZmV9KTtcbiAgfVxuXG4gIGFzeW5jIHJ1bih7ZHJpdmVyLCBzY3JpcHROYW1lfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5fcnVuKHtpbnN0YWxsU3BlYzogZHJpdmVyLCBzY3JpcHROYW1lfSk7XG4gIH1cblxuICBnZXRQb3N0SW5zdGFsbFRleHQoe2V4dE5hbWUsIGV4dERhdGF9KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGBEcml2ZXIgJHtleHROYW1lfUAke2V4dERhdGEudmVyc2lvbn0gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZFxcbmAuZ3JlZW4gK1xuICAgICAgYC0gYXV0b21hdGlvbk5hbWU6ICR7ZXh0RGF0YS5hdXRvbWF0aW9uTmFtZS5ncmVlbn1cXG5gICtcbiAgICAgIGAtIHBsYXRmb3JtTmFtZXM6ICR7SlNPTi5zdHJpbmdpZnkoZXh0RGF0YS5wbGF0Zm9ybU5hbWVzKS5ncmVlbn1gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgZmllbGRzIGluIGBhcHBpdW1gIGZpZWxkIG9mIGBkcml2ZXJNZXRhZGF0YWBcbiAgICpcbiAgICogRm9yIGFueSBgcGFja2FnZS5qc29uYCBmaWVsZHMgd2hpY2ggYSBkcml2ZXIgcmVxdWlyZXMsIHZhbGlkYXRlIHRoZSB0eXBlIG9mXG4gICAqIHRob3NlIGZpZWxkcyBvbiB0aGUgYHBhY2thZ2UuanNvbmAgZGF0YSwgdGhyb3dpbmcgYW4gZXJyb3IgaWYgYW55dGhpbmcgaXNcbiAgICogYW1pc3MuXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdhcHBpdW0vdHlwZXMnKS5FeHRNZXRhZGF0YTxEcml2ZXJUeXBlPn0gZHJpdmVyTWV0YWRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IGluc3RhbGxTcGVjXG4gICAqL1xuICB2YWxpZGF0ZUV4dGVuc2lvbkZpZWxkcyhkcml2ZXJNZXRhZGF0YSwgaW5zdGFsbFNwZWMpIHtcbiAgICBjb25zdCBtaXNzaW5nRmllbGRzID0gUkVRX0RSSVZFUl9GSUVMRFMucmVkdWNlKFxuICAgICAgKGFjYywgZmllbGQpID0+IChkcml2ZXJNZXRhZGF0YVtmaWVsZF0gPyBhY2MgOiBbLi4uYWNjLCBmaWVsZF0pLFxuICAgICAgW11cbiAgICApO1xuXG4gICAgaWYgKCFfLmlzRW1wdHkobWlzc2luZ0ZpZWxkcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYERyaXZlciBcIiR7aW5zdGFsbFNwZWN9XCIgZGlkIG5vdCBleHBvc2UgY29ycmVjdCBmaWVsZHMgZm9yIGNvbXBhYmlsaXR5IGAgK1xuICAgICAgICAgIGB3aXRoIEFwcGl1bS4gTWlzc2luZyBmaWVsZHM6ICR7SlNPTi5zdHJpbmdpZnkobWlzc2luZ0ZpZWxkcyl9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiBEcml2ZXJDb21tYW5kT3B0aW9uc1xuICogQHByb3BlcnR5IHtpbXBvcnQoJy4uL2V4dGVuc2lvbi9leHRlbnNpb24tY29uZmlnJykuRXh0ZW5zaW9uQ29uZmlnPERyaXZlclR5cGU+fSBjb25maWdcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0ganNvblxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlclR5cGV9IERyaXZlclR5cGVcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU1BLGlCQUFpQixHQUFHLENBQUMsWUFBRCxFQUFlLGdCQUFmLEVBQWlDLGVBQWpDLEVBQWtELFdBQWxELENBQTFCOztBQUtlLE1BQU1DLGFBQU4sU0FBNEJDLHlCQUE1QixDQUE2QztFQUkxREMsV0FBVyxDQUFDO0lBQUNDLE1BQUQ7SUFBU0M7RUFBVCxDQUFELEVBQWlCO0lBQzFCLE1BQU07TUFBQ0QsTUFBRDtNQUFTQztJQUFULENBQU47SUFDQSxLQUFLQyxlQUFMLEdBQXVCQyx3QkFBdkI7RUFDRDs7RUFFWSxNQUFQQyxPQUFPLENBQUM7SUFBQ0MsTUFBRDtJQUFTQyxXQUFUO0lBQXNCQztFQUF0QixDQUFELEVBQXFDO0lBQ2hELE9BQU8sTUFBTSxNQUFNQyxRQUFOLENBQWU7TUFDMUJDLFdBQVcsRUFBRUosTUFEYTtNQUUxQkMsV0FGMEI7TUFHMUJDO0lBSDBCLENBQWYsQ0FBYjtFQUtEOztFQUVjLE1BQVRHLFNBQVMsQ0FBQztJQUFDTDtFQUFELENBQUQsRUFBVztJQUN4QixPQUFPLE1BQU0sTUFBTU0sVUFBTixDQUFpQjtNQUFDRixXQUFXLEVBQUVKO0lBQWQsQ0FBakIsQ0FBYjtFQUNEOztFQUVXLE1BQU5PLE1BQU0sQ0FBQztJQUFDUCxNQUFEO0lBQVNRO0VBQVQsQ0FBRCxFQUFtQjtJQUM3QixPQUFPLE1BQU0sTUFBTUMsT0FBTixDQUFjO01BQUNMLFdBQVcsRUFBRUosTUFBZDtNQUFzQlE7SUFBdEIsQ0FBZCxDQUFiO0VBQ0Q7O0VBRVEsTUFBSEUsR0FBRyxDQUFDO0lBQUNWLE1BQUQ7SUFBU1c7RUFBVCxDQUFELEVBQXVCO0lBQzlCLE9BQU8sTUFBTSxNQUFNQyxJQUFOLENBQVc7TUFBQ1IsV0FBVyxFQUFFSixNQUFkO01BQXNCVztJQUF0QixDQUFYLENBQWI7RUFDRDs7RUFFREUsa0JBQWtCLENBQUM7SUFBQ0MsT0FBRDtJQUFVQztFQUFWLENBQUQsRUFBcUI7SUFDckMsT0FDRyxVQUFTRCxPQUFRLElBQUdDLE9BQU8sQ0FBQ0MsT0FBUSwyQkFBckMsQ0FBZ0VDLEtBQWhFLEdBQ0MscUJBQW9CRixPQUFPLENBQUNHLGNBQVIsQ0FBdUJELEtBQU0sSUFEbEQsR0FFQyxvQkFBbUJFLElBQUksQ0FBQ0MsU0FBTCxDQUFlTCxPQUFPLENBQUNNLGFBQXZCLEVBQXNDSixLQUFNLEVBSGxFO0VBS0Q7O0VBV0RLLHVCQUF1QixDQUFDQyxjQUFELEVBQWlCbkIsV0FBakIsRUFBOEI7SUFDbkQsTUFBTW9CLGFBQWEsR0FBR2pDLGlCQUFpQixDQUFDa0MsTUFBbEIsQ0FDcEIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQWlCSixjQUFjLENBQUNJLEtBQUQsQ0FBZCxHQUF3QkQsR0FBeEIsR0FBOEIsQ0FBQyxHQUFHQSxHQUFKLEVBQVNDLEtBQVQsQ0FEM0IsRUFFcEIsRUFGb0IsQ0FBdEI7O0lBS0EsSUFBSSxDQUFDQyxlQUFBLENBQUVDLE9BQUYsQ0FBVUwsYUFBVixDQUFMLEVBQStCO01BQzdCLE1BQU0sSUFBSU0sS0FBSixDQUNILFdBQVUxQixXQUFZLGtEQUF2QixHQUNHLGdDQUErQmUsSUFBSSxDQUFDQyxTQUFMLENBQWVJLGFBQWYsQ0FBOEIsRUFGNUQsQ0FBTjtJQUlEO0VBQ0Y7O0FBMUR5RCJ9
94
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRVFfRFJJVkVSX0ZJRUxEUyIsIkRyaXZlckNvbW1hbmQiLCJFeHRlbnNpb25Db21tYW5kIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJqc29uIiwia25vd25FeHRlbnNpb25zIiwiS05PV05fRFJJVkVSUyIsImluc3RhbGwiLCJkcml2ZXIiLCJpbnN0YWxsVHlwZSIsInBhY2thZ2VOYW1lIiwiX2luc3RhbGwiLCJpbnN0YWxsU3BlYyIsInVuaW5zdGFsbCIsIl91bmluc3RhbGwiLCJ1cGRhdGUiLCJ1bnNhZmUiLCJfdXBkYXRlIiwicnVuIiwic2NyaXB0TmFtZSIsImV4dHJhQXJncyIsIl9ydW4iLCJnZXRQb3N0SW5zdGFsbFRleHQiLCJleHROYW1lIiwiZXh0RGF0YSIsInZlcnNpb24iLCJncmVlbiIsImF1dG9tYXRpb25OYW1lIiwiSlNPTiIsInN0cmluZ2lmeSIsInBsYXRmb3JtTmFtZXMiLCJ2YWxpZGF0ZUV4dGVuc2lvbkZpZWxkcyIsImRyaXZlck1ldGFkYXRhIiwibWlzc2luZ0ZpZWxkcyIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwiXyIsImlzRW1wdHkiLCJFcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9jbGkvZHJpdmVyLWNvbW1hbmQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBFeHRlbnNpb25Db21tYW5kIGZyb20gJy4vZXh0ZW5zaW9uLWNvbW1hbmQnO1xuaW1wb3J0IHtLTk9XTl9EUklWRVJTfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0ICdAY29sb3JzL2NvbG9ycyc7XG5cbmNvbnN0IFJFUV9EUklWRVJfRklFTERTID0gWydkcml2ZXJOYW1lJywgJ2F1dG9tYXRpb25OYW1lJywgJ3BsYXRmb3JtTmFtZXMnLCAnbWFpbkNsYXNzJ107XG5cbi8qKlxuICogQGV4dGVuZHMge0V4dGVuc2lvbkNvbW1hbmQ8RHJpdmVyVHlwZT59XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERyaXZlckNvbW1hbmQgZXh0ZW5kcyBFeHRlbnNpb25Db21tYW5kIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuL2V4dGVuc2lvbi1jb21tYW5kJykuRXh0ZW5zaW9uQ29tbWFuZE9wdGlvbnM8RHJpdmVyVHlwZT59IG9wdHNcbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjb25maWcsIGpzb259KSB7XG4gICAgc3VwZXIoe2NvbmZpZywganNvbn0pO1xuICAgIHRoaXMua25vd25FeHRlbnNpb25zID0gS05PV05fRFJJVkVSUztcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGwoe2RyaXZlciwgaW5zdGFsbFR5cGUsIHBhY2thZ2VOYW1lfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5faW5zdGFsbCh7XG4gICAgICBpbnN0YWxsU3BlYzogZHJpdmVyLFxuICAgICAgaW5zdGFsbFR5cGUsXG4gICAgICBwYWNrYWdlTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbCh7ZHJpdmVyfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5fdW5pbnN0YWxsKHtpbnN0YWxsU3BlYzogZHJpdmVyfSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoe2RyaXZlciwgdW5zYWZlfSkge1xuICAgIHJldHVybiBhd2FpdCBzdXBlci5fdXBkYXRlKHtpbnN0YWxsU3BlYzogZHJpdmVyLCB1bnNhZmV9KTtcbiAgfVxuXG4gIGFzeW5jIHJ1bih7ZHJpdmVyLCBzY3JpcHROYW1lLCBleHRyYUFyZ3N9KSB7XG4gICAgcmV0dXJuIGF3YWl0IHN1cGVyLl9ydW4oe2luc3RhbGxTcGVjOiBkcml2ZXIsIHNjcmlwdE5hbWUsIGV4dHJhQXJnc30pO1xuICB9XG5cbiAgZ2V0UG9zdEluc3RhbGxUZXh0KHtleHROYW1lLCBleHREYXRhfSkge1xuICAgIHJldHVybiAoXG4gICAgICBgRHJpdmVyICR7ZXh0TmFtZX1AJHtleHREYXRhLnZlcnNpb259IHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWRcXG5gLmdyZWVuICtcbiAgICAgIGAtIGF1dG9tYXRpb25OYW1lOiAke2V4dERhdGEuYXV0b21hdGlvbk5hbWUuZ3JlZW59XFxuYCArXG4gICAgICBgLSBwbGF0Zm9ybU5hbWVzOiAke0pTT04uc3RyaW5naWZ5KGV4dERhdGEucGxhdGZvcm1OYW1lcykuZ3JlZW59YFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGZpZWxkcyBpbiBgYXBwaXVtYCBmaWVsZCBvZiBgZHJpdmVyTWV0YWRhdGFgXG4gICAqXG4gICAqIEZvciBhbnkgYHBhY2thZ2UuanNvbmAgZmllbGRzIHdoaWNoIGEgZHJpdmVyIHJlcXVpcmVzLCB2YWxpZGF0ZSB0aGUgdHlwZSBvZlxuICAgKiB0aG9zZSBmaWVsZHMgb24gdGhlIGBwYWNrYWdlLmpzb25gIGRhdGEsIHRocm93aW5nIGFuIGVycm9yIGlmIGFueXRoaW5nIGlzXG4gICAqIGFtaXNzLlxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYXBwaXVtL3R5cGVzJykuRXh0TWV0YWRhdGE8RHJpdmVyVHlwZT59IGRyaXZlck1ldGFkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnN0YWxsU3BlY1xuICAgKi9cbiAgdmFsaWRhdGVFeHRlbnNpb25GaWVsZHMoZHJpdmVyTWV0YWRhdGEsIGluc3RhbGxTcGVjKSB7XG4gICAgY29uc3QgbWlzc2luZ0ZpZWxkcyA9IFJFUV9EUklWRVJfRklFTERTLnJlZHVjZShcbiAgICAgIChhY2MsIGZpZWxkKSA9PiAoZHJpdmVyTWV0YWRhdGFbZmllbGRdID8gYWNjIDogWy4uLmFjYywgZmllbGRdKSxcbiAgICAgIFtdXG4gICAgKTtcblxuICAgIGlmICghXy5pc0VtcHR5KG1pc3NpbmdGaWVsZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEcml2ZXIgXCIke2luc3RhbGxTcGVjfVwiIGRpZCBub3QgZXhwb3NlIGNvcnJlY3QgZmllbGRzIGZvciBjb21wYWJpbGl0eSBgICtcbiAgICAgICAgICBgd2l0aCBBcHBpdW0uIE1pc3NpbmcgZmllbGRzOiAke0pTT04uc3RyaW5naWZ5KG1pc3NpbmdGaWVsZHMpfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYgRHJpdmVyQ29tbWFuZE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi9leHRlbnNpb24vZXh0ZW5zaW9uLWNvbmZpZycpLkV4dGVuc2lvbkNvbmZpZzxEcml2ZXJUeXBlPn0gY29uZmlnXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGpzb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5Ecml2ZXJUeXBlfSBEcml2ZXJUeXBlXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxpQkFBaUIsR0FBRyxDQUFDLFlBQUQsRUFBZSxnQkFBZixFQUFpQyxlQUFqQyxFQUFrRCxXQUFsRCxDQUExQjs7QUFLZSxNQUFNQyxhQUFOLFNBQTRCQyx5QkFBNUIsQ0FBNkM7RUFJMURDLFdBQVcsQ0FBQztJQUFDQyxNQUFEO0lBQVNDO0VBQVQsQ0FBRCxFQUFpQjtJQUMxQixNQUFNO01BQUNELE1BQUQ7TUFBU0M7SUFBVCxDQUFOO0lBQ0EsS0FBS0MsZUFBTCxHQUF1QkMsd0JBQXZCO0VBQ0Q7O0VBRVksTUFBUEMsT0FBTyxDQUFDO0lBQUNDLE1BQUQ7SUFBU0MsV0FBVDtJQUFzQkM7RUFBdEIsQ0FBRCxFQUFxQztJQUNoRCxPQUFPLE1BQU0sTUFBTUMsUUFBTixDQUFlO01BQzFCQyxXQUFXLEVBQUVKLE1BRGE7TUFFMUJDLFdBRjBCO01BRzFCQztJQUgwQixDQUFmLENBQWI7RUFLRDs7RUFFYyxNQUFURyxTQUFTLENBQUM7SUFBQ0w7RUFBRCxDQUFELEVBQVc7SUFDeEIsT0FBTyxNQUFNLE1BQU1NLFVBQU4sQ0FBaUI7TUFBQ0YsV0FBVyxFQUFFSjtJQUFkLENBQWpCLENBQWI7RUFDRDs7RUFFVyxNQUFOTyxNQUFNLENBQUM7SUFBQ1AsTUFBRDtJQUFTUTtFQUFULENBQUQsRUFBbUI7SUFDN0IsT0FBTyxNQUFNLE1BQU1DLE9BQU4sQ0FBYztNQUFDTCxXQUFXLEVBQUVKLE1BQWQ7TUFBc0JRO0lBQXRCLENBQWQsQ0FBYjtFQUNEOztFQUVRLE1BQUhFLEdBQUcsQ0FBQztJQUFDVixNQUFEO0lBQVNXLFVBQVQ7SUFBcUJDO0VBQXJCLENBQUQsRUFBa0M7SUFDekMsT0FBTyxNQUFNLE1BQU1DLElBQU4sQ0FBVztNQUFDVCxXQUFXLEVBQUVKLE1BQWQ7TUFBc0JXLFVBQXRCO01BQWtDQztJQUFsQyxDQUFYLENBQWI7RUFDRDs7RUFFREUsa0JBQWtCLENBQUM7SUFBQ0MsT0FBRDtJQUFVQztFQUFWLENBQUQsRUFBcUI7SUFDckMsT0FDRyxVQUFTRCxPQUFRLElBQUdDLE9BQU8sQ0FBQ0MsT0FBUSwyQkFBckMsQ0FBZ0VDLEtBQWhFLEdBQ0MscUJBQW9CRixPQUFPLENBQUNHLGNBQVIsQ0FBdUJELEtBQU0sSUFEbEQsR0FFQyxvQkFBbUJFLElBQUksQ0FBQ0MsU0FBTCxDQUFlTCxPQUFPLENBQUNNLGFBQXZCLEVBQXNDSixLQUFNLEVBSGxFO0VBS0Q7O0VBV0RLLHVCQUF1QixDQUFDQyxjQUFELEVBQWlCcEIsV0FBakIsRUFBOEI7SUFDbkQsTUFBTXFCLGFBQWEsR0FBR2xDLGlCQUFpQixDQUFDbUMsTUFBbEIsQ0FDcEIsQ0FBQ0MsR0FBRCxFQUFNQyxLQUFOLEtBQWlCSixjQUFjLENBQUNJLEtBQUQsQ0FBZCxHQUF3QkQsR0FBeEIsR0FBOEIsQ0FBQyxHQUFHQSxHQUFKLEVBQVNDLEtBQVQsQ0FEM0IsRUFFcEIsRUFGb0IsQ0FBdEI7O0lBS0EsSUFBSSxDQUFDQyxlQUFBLENBQUVDLE9BQUYsQ0FBVUwsYUFBVixDQUFMLEVBQStCO01BQzdCLE1BQU0sSUFBSU0sS0FBSixDQUNILFdBQVUzQixXQUFZLGtEQUF2QixHQUNHLGdDQUErQmdCLElBQUksQ0FBQ0MsU0FBTCxDQUFlSSxhQUFmLENBQThCLEVBRjVELENBQU47SUFJRDtFQUNGOztBQTFEeUQifQ==
@@ -68,6 +68,10 @@ export type RunOptions = {
68
68
  * - name of the script to run
69
69
  */
70
70
  scriptName: string;
71
+ /**
72
+ * - arguments to pass to the script
73
+ */
74
+ extraArgs?: string[] | undefined;
71
75
  };
72
76
  /**
73
77
  * Return value of {@linkcode ExtensionCommand._run }
@@ -366,7 +370,7 @@ export class ExtensionCommand<ExtType extends import("@appium/types").ExtensionT
366
370
  * @param {RunOptions} opts
367
371
  * @return {Promise<RunOutput>}
368
372
  */
369
- _run({ installSpec, scriptName }: RunOptions): Promise<RunOutput>;
373
+ _run({ installSpec, scriptName, extraArgs }: RunOptions): Promise<RunOutput>;
370
374
  }
371
375
  import { console } from "@appium/support";
372
376
  //# sourceMappingURL=extension-command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extension-command.d.ts","sourceRoot":"","sources":["../../../lib/cli/extension-command.js"],"names":[],"mappings":";;;;;;;;YAkrBc,gBAAgB,OAAO,CAAC;;;;UACxB,OAAO;;;;;;;;;eAOP,OAAO;;;;mBACP,MAAM;;;;yBACN,MAAM;;;;cACN,OAAO;;4BAIR,OAAO,eAAe,EAAE,aAAa;yBACrC,OAAO,eAAe,EAAE,UAAU;yBAClC,OAAO,eAAe,EAAE,UAAU;+EAKlC,OAAO,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC;qFAKzC,OAAO,+BAA+B,EAAE,eAAe,CAAC,OAAO,CAAC;iFAKhE,OAAO,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC;iFAK3C,OAAO,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC;oFAK3C,OAAO,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC;;;;;aAM7C,MAAM;eACN,KAAK;;;;;yCAKN,OAAO,cAAc,EAAE,gBAAgB,GAAG,iBAAiB;;;;gCAK3D,OAAO,MAAM,EAAC,0BAA0B,GAAC,4BAA4B,CAAC;;;;;;;;iBAMrE,MAAM;;;;gBACN,MAAM;;;;;;;;;;;;;YAQN,MAAM,EAAE;;;;;;;;;iBAMR,MAAM;;;;YACN,OAAO;;;;;;;;;YAMP,OAAO,MAAM,EAAC,KAAK,CAAC;;;;aACpB,OAAO,MAAM,EAAC,YAAY,CAAC;;;;;;;;;UAM3B,MAAM;;;;QACN,MAAM;;;;;;;;;iBAMN,MAAM;;;;;;;;;aAMN,MAAM;;;;aACN,MAAM;;;;;;;;;iBAMN,MAAM;;;;aACN,MAAM;;;;;;;;;;;;;aAON,MAAM;;;;gBACN,MAAM;;;;kBACN,MAAM;;;;;;;;;iBAMN,MAAM;;;;iBACN,OAAO,cAAc,EAAE,WAAW;;;;;;;;;qFAOnC,YAAY,OAAO,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,cAAc,EAAE,iBAAiB;qFAK7H,OAAO,SAAS,UAAU,GAAG,cAAc,cAAc,EAAE,aAAa,GAAG,OAAO,SAAS,UAAU,GAAG,cAAc,cAAc,EAAE,aAAa,GAAG,KAAK;;;;;mBAK1J,OAAO;;;;iBACP,OAAO;;AAnzBrB;;GAEG;AACH;IAmBE;;;OAGG;IACH,8BAFW,wBAAwB,OAAO,CAAC,EAM1C;IA1BD;;;OAGG;IACH,QAFU,gBAAgB,OAAO,CAAC,CAE3B;IAEP;;;OAGG;IACH,iBAFU,gBAAgB,OAAO,CAAC,CAElB;IAEhB;;;OAGG;IACH,cAFU,OAAO,CAEJ;IAQX,wBAAmD;IAIrD;;OAEG;IACH,oBAEC;IAED;;;;;;;;;OASG;IACH,qCAJW,MAAM,GAEJ,KAAK,CAIjB;IAED;;;;;OAKG;IACH,cAHW,MAAM,GACL,QAAQ,MAAM,CAAC,CAS1B;IAED;;;;;OAKG;IACH,qCAHW,WAAW,GACV,QAAQ,iBAAiB,CAAC,CA4FrC;IAED;;;;;OAKG;IACH,oDAHW,WAAW,GACV,QAAQ,UAAU,OAAO,CAAC,CAAC,CA2JtC;IAED;;;;OAIG;IACH,gDAFW,iBAAiB,qCAmB3B;IAED;;;;;;OAMG;IAEH,yBAJW,aAAa,GACX,MAAM,CAKlB;IAED;;;;;;;;OAQG;IACH,4BAHW,eAAe,OAAO,CAAC,GACrB,gBAAgB,OAAO,CAAC,CAapC;IAED;;;;;;;;;;;OAWG;IACH,6BALW,OAAO,WAAW,EAAE,WAAW,eAC/B,MAAM,sCA8BhB;IAED;;;;;;;OAOG;IAEH,qCAJW,YAAY,OAAO,CAAC,eACpB,MAAM,QAKhB;IAED;;;;;;;;;OASG;IACH,4BAHW,aAAa,GACZ,QAAQ,UAAU,OAAO,CAAC,CAAC,CAatC;IAED;;;;;OAKG;IACH,iCAHW,mBAAmB,GAClB,QAAQ,qBAAqB,CAAC,CA+EzC;IAED;;;;;;OAMG;IACH,6BAHW,MAAM,GACL,QAAQ,eAAe,CAAC,CA2BnC;IAED;;;;;;;OAOG;IACH,6BAJW,MAAM,WACN,MAAM,GACJ,QAAQ,IAAI,CAAC,CAWzB;IAED;;;;;;;;;;OAUG;IACH,kCAHW,UAAU,GACT,QAAQ,SAAS,CAAC,CAoD7B;CACF"}
1
+ {"version":3,"file":"extension-command.d.ts","sourceRoot":"","sources":["../../../lib/cli/extension-command.js"],"names":[],"mappings":"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"}