appium 2.0.0-beta.29 → 2.0.0-beta.33

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 (36) hide show
  1. package/build/lib/appium.d.ts +1 -1
  2. package/build/lib/appium.d.ts.map +1 -1
  3. package/build/lib/appium.js +5 -2
  4. package/build/lib/cli/parser.d.ts +3 -2
  5. package/build/lib/cli/parser.d.ts.map +1 -1
  6. package/build/lib/cli/parser.js +1 -1
  7. package/build/lib/config.d.ts +5 -4
  8. package/build/lib/config.d.ts.map +1 -1
  9. package/build/lib/config.js +1 -1
  10. package/build/lib/extension/manifest.d.ts.map +1 -1
  11. package/build/lib/extension/manifest.js +1 -1
  12. package/build/lib/main.d.ts +13 -10
  13. package/build/lib/main.d.ts.map +1 -1
  14. package/build/lib/main.js +57 -50
  15. package/build/tsconfig.tsbuildinfo +1 -1
  16. package/build/types/appium-manifest.d.ts +40 -0
  17. package/build/types/appium-manifest.d.ts.map +1 -0
  18. package/build/types/cli.d.ts +112 -0
  19. package/build/types/cli.d.ts.map +1 -0
  20. package/build/types/extension.d.ts +43 -0
  21. package/build/types/extension.d.ts.map +1 -0
  22. package/build/types/external-manifest.d.ts +47 -0
  23. package/build/types/external-manifest.d.ts.map +1 -0
  24. package/build/types/index.d.ts +15 -0
  25. package/build/types/index.d.ts.map +1 -0
  26. package/lib/appium.js +7 -3
  27. package/lib/cli/parser.js +2 -1
  28. package/lib/config.js +6 -5
  29. package/lib/extension/manifest.js +0 -2
  30. package/lib/main.js +78 -63
  31. package/package.json +18 -12
  32. package/types/{appium-manifest.d.ts → appium-manifest.ts} +1 -1
  33. package/types/{cli.d.ts → cli.ts} +48 -29
  34. package/types/{extension.d.ts → extension.ts} +4 -4
  35. package/types/{external-manifest.d.ts → external-manifest.ts} +2 -2
  36. package/types/{index.d.ts → index.ts} +7 -0
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../lib/extension/manifest.js"],"names":[],"mappings":"AAqGA;;;;GAIG;AACH;IA4DE;;;;;;OAMG;IACH,yEAIG;IAvBH;;;;;;OAMG;IACH,sBAGC;IAzDD;;;;;;OAMG;IACH,cAAM;IAEN;;;;OAIG;IACH,oBAAY;IAEZ;;;;OAIG;IACH,eAHU,MAAM,CAGF;IAEd;;;;;;;;;OASG;IACH,iBAAS;IAET;;;;;;;;;OASG;IACH,iBAAS;IA2BT;;;;OAIG;IACH,6CAHW,+BAA+B,GAC7B,QAAQ,OAAO,CAAC,CA0B5B;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;OAQG;IACH,wHAHW,MAAM,GACJ,OAAO,CAsCnB;IAED;;;;;;;;;;OAUG;IACH,iGAJW,MAAM,oCAEJ,IAAI,CAIhB;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;;;OAMG;IACH,kHAEC;IAED;;;;;;;;;OASG;IACH,QAFa,QAAQ,YAAY,CAAC,CAsDjC;IAED;;;;;;OAMG;IACH,yBAaC;IAED;;;;;;;OAOG;IACH,SAFa,QAAQ,OAAO,CAAC,CAoC5B;CACF;;;;yBAIY,OAAO,aAAa,EAAE,UAAU;;;;yBAKhC,OAAO,aAAa,EAAE,UAAU;;;;;;;2BAShC,OAAO,6BAA6B,EAAE,YAAY;+BAClD,OAAO,6BAA6B,EAAE,gBAAgB;gCAKtD,OAAO,+BAA+B,EAAE,cAAc,CAAC,CAAC,CAAC;6BAKzD,OAAO,6BAA6B,EAAE,WAAW,CAAC,CAAC,CAAC;2BAKpD,OAAO,6BAA6B,EAAE,SAAS,CAAC,CAAC,CAAC;;;;4BAKlD,OAAO,aAAa,EAAE,aAAa"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../lib/extension/manifest.js"],"names":[],"mappings":"AAmGA;;;;GAIG;AACH;IA4DE;;;;;;OAMG;IACH,yEAIG;IAvBH;;;;;;OAMG;IACH,sBAGC;IAzDD;;;;;;OAMG;IACH,cAAM;IAEN;;;;OAIG;IACH,oBAAY;IAEZ;;;;OAIG;IACH,eAHU,MAAM,CAGF;IAEd;;;;;;;;;OASG;IACH,iBAAS;IAET;;;;;;;;;OASG;IACH,iBAAS;IA2BT;;;;OAIG;IACH,6CAHW,+BAA+B,GAC7B,QAAQ,OAAO,CAAC,CA0B5B;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;OAQG;IACH,wHAHW,MAAM,GACJ,OAAO,CAsCnB;IAED;;;;;;;;;;OAUG;IACH,iGAJW,MAAM,oCAEJ,IAAI,CAIhB;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;;;OAMG;IACH,kHAEC;IAED;;;;;;;;;OASG;IACH,QAFa,QAAQ,YAAY,CAAC,CAsDjC;IAED;;;;;;OAMG;IACH,yBAaC;IAED;;;;;;;OAOG;IACH,SAFa,QAAQ,OAAO,CAAC,CAoC5B;CACF;;;;yBAIY,OAAO,aAAa,EAAE,UAAU;;;;yBAKhC,OAAO,aAAa,EAAE,UAAU;;;;;;;2BAShC,OAAO,6BAA6B,EAAE,YAAY;+BAClD,OAAO,6BAA6B,EAAE,gBAAgB;gCAKtD,OAAO,+BAA+B,EAAE,cAAc,CAAC,CAAC,CAAC;6BAKzD,OAAO,6BAA6B,EAAE,WAAW,CAAC,CAAC,CAAC;2BAKpD,OAAO,6BAA6B,EAAE,SAAS,CAAC,CAAC,CAAC;;;;4BAKlD,OAAO,aAAa,EAAE,aAAa"}
@@ -243,4 +243,4 @@ class Manifest {
243
243
  }
244
244
 
245
245
  exports.Manifest = Manifest;
246
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vbWFuaWZlc3QuanMiXSwibmFtZXMiOlsiREVGQVVMVF9TRUFSQ0hfREVQVEgiLCJERUZBVUxUX0ZJTkRfRVhURU5TSU9OU19PUFRTIiwiT2JqZWN0IiwiZnJlZXplIiwiZGVwdGhMaW1pdCIsImZpbHRlciIsImZpbGVwYXRoIiwicGF0aCIsImJhc2VuYW1lIiwic3RhcnRzV2l0aCIsIkNPTkZJR19TQ0hFTUFfUkVWIiwiQ09ORklHX0RBVEFfRFJJVkVSX0tFWSIsIkRSSVZFUl9UWVBFIiwiQ09ORklHX0RBVEFfUExVR0lOX0tFWSIsIlBMVUdJTl9UWVBFIiwiSU5JVElBTF9NQU5JRkVTVF9EQVRBIiwic2NoZW1hUmV2IiwiaXNFeHRlbnNpb24iLCJ2YWx1ZSIsIl8iLCJpc1BsYWluT2JqZWN0IiwiYXBwaXVtIiwiaXNTdHJpbmciLCJuYW1lIiwidmVyc2lvbiIsImlzRHJpdmVyIiwiZ2V0IiwiaXNBcnJheSIsImlzUGx1Z2luIiwiTWFuaWZlc3QiLCJfZGF0YSIsIl9hcHBpdW1Ib21lIiwiX21hbmlmZXN0UGF0aCIsIl93cml0aW5nIiwiX3JlYWRpbmciLCJjb25zdHJ1Y3RvciIsImFwcGl1bUhvbWUiLCJjbG9uZURlZXAiLCJnZXRJbnN0YW5jZSIsIm1lbW9pemUiLCJfZ2V0SW5zdGFuY2UiLCJzeW5jV2l0aEluc3RhbGxlZEV4dGVuc2lvbnMiLCJ3YWxrT3B0cyIsImRlZmF1bHRzIiwiZGlkQ2hhbmdlIiwic3RhdHMiLCJmcyIsIndhbGsiLCJpc0RpcmVjdG9yeSIsInBrZyIsImVudiIsInJlYWRQYWNrYWdlSW5EaXIiLCJhZGRlZCIsImFkZEV4dGVuc2lvbkZyb21QYWNrYWdlIiwiam9pbiIsImhhc0RyaXZlciIsIkJvb2xlYW4iLCJkcml2ZXJzIiwiaGFzUGx1Z2luIiwicGx1Z2lucyIsInBrZ0pzb24iLCJwa2dQYXRoIiwiaW50ZXJuYWwiLCJwa2dOYW1lIiwiaW5zdGFsbFR5cGUiLCJJTlNUQUxMX1RZUEVfTlBNIiwiaW5zdGFsbFNwZWMiLCJkcml2ZXJOYW1lIiwiYWRkRXh0ZW5zaW9uIiwib21pdCIsInBsdWdpbk5hbWUiLCJUeXBlRXJyb3IiLCJkaXJuYW1lIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJleHREYXRhIiwibWFuaWZlc3RQYXRoIiwiZ2V0RXh0ZW5zaW9uRGF0YSIsInJlYWQiLCJkYXRhIiwiaXNOZXdGaWxlIiwiX3NldE1hbmlmZXN0UGF0aCIsImxvZyIsImRlYnVnIiwieWFtbCIsInJlYWRGaWxlIiwiWUFNTCIsInBhcnNlIiwiZXJyIiwiY29kZSIsIkVycm9yIiwibWVzc2FnZSIsImluc3RhbGxlZEV4dGVuc2lvbnNDaGFuZ2VkIiwiaGFzQXBwaXVtRGVwZW5kZW5jeSIsIndyaXRlIiwidW5kZWZpbmVkIiwicmVzb2x2ZU1hbmlmZXN0UGF0aCIsInJlbGF0aXZlIiwibWtkaXJwIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQU1BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU9BLE1BQU1BLG9CQUFvQixHQUFHLENBQTdCO0FBTUEsTUFBTUMsNEJBQTRCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQ2pEQyxFQUFBQSxVQUFVLEVBQUVKLG9CQURxQztBQUdqREssRUFBQUEsTUFBTSxFQUFHQyxRQUFELElBQWMsQ0FBQ0MsY0FBS0MsUUFBTCxDQUFjRixRQUFkLEVBQXdCRyxVQUF4QixDQUFtQyxHQUFuQztBQUgwQixDQUFkLENBQXJDO0FBU0EsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBMUI7QUFNQSxNQUFNQyxzQkFBc0IsR0FBSSxHQUFFQyxzQkFBWSxHQUE5QztBQU1BLE1BQU1DLHNCQUFzQixHQUFJLEdBQUVDLHNCQUFZLEdBQTlDO0FBS0EsTUFBTUMscUJBQXFCLEdBQUdiLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQzFDLEdBQUNRLHNCQUFELEdBQTBCVCxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFk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LE9BQU8wRCxHQUFQLEVBQVk7QUFDWixjQUFNLElBQUlFLEtBQUosQ0FDSCx5Q0FBd0MsS0FBSzFELGFBQWMsc0JBQXFCLEtBQUtELFdBQVksSUFBbEcsR0FDRyxpREFBZ0R5RCxHQUFHLENBQUNHLE9BQVEsRUFGM0QsQ0FBTjtBQUlEO0FBQ0YsS0F4QmUsR0FBaEI7O0FBeUJBLFFBQUk7QUFDRixhQUFPLE1BQU0sS0FBSzFELFFBQWxCO0FBQ0QsS0FGRCxTQUVVO0FBQ1IsV0FBS0EsUUFBTCxHQUFnQjhELFNBQWhCO0FBQ0Q7QUFDRjs7QUFqVm1CIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL3R5cGVzL2FwcGl1bS1tYW5pZmVzdC5kLnRzXCIgLz5cblxuLyoqXG4gKiBNb2R1bGUgY29udGFpbmluZyB7QGxpbmsgTWFuaWZlc3R9IHdoaWNoIGhhbmRsZXMgcmVhZGluZyAmIHdyaXRpbmcgb2YgZXh0ZW5zaW9uIGNvbmZpZyBmaWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBlbnYsIGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBZQU1MIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IElOU1RBTExfVFlQRV9OUE0gfSBmcm9tICcuL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0IHsgcGFja2FnZURpZENoYW5nZSB9IGZyb20gJy4vcGFja2FnZS1jaGFuZ2VkJztcblxuLyoqXG4gKiBEZWZhdWx0IGRlcHRoIHRvIHNlYXJjaCBpbiBkaXJlY3RvcnkgdHJlZSBmb3Igd2hhdGV2ZXIgaXQgaXMgd2UncmUgbG9va2luZyBmb3IuXG4gKlxuICogSXQncyA0IGJlY2F1c2Ugc21hbGxlciBudW1iZXJzIGRpZG4ndCB3b3JrLlxuICovXG5jb25zdCBERUZBVUxUX1NFQVJDSF9ERVBUSCA9IDQ7XG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIGZvciB7QGxpbmsgZmluZEV4dGVuc2lvbnN9LlxuICogQHR5cGUge1JlYWRvbmx5PGltcG9ydCgna2xhdycpLk9wdGlvbnM+fVxuICovXG5jb25zdCBERUZBVUxUX0ZJTkRfRVhURU5TSU9OU19PUFRTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGRlcHRoTGltaXQ6IERFRkFVTFRfU0VBUkNIX0RFUFRILFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmaWx0ZXI6IChmaWxlcGF0aCkgPT4gIXBhdGguYmFzZW5hbWUoZmlsZXBhdGgpLnN0YXJ0c1dpdGgoJy4nKSxcbn0pO1xuXG4vKipcbiAqIEN1cnJlbnQgY29uZmlndXJhdGlvbiBzY2hlbWEgcmV2aXNpb24hXG4gKi9cbmNvbnN0IENPTkZJR19TQ0hFTUFfUkVWID0gMjtcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvcCAoYGRyaXZlcnNgKSB1c2VkIGluIGBleHRlbnNpb25zLnlhbWxgIGZvciBkcml2ZXJzLlxuICogQHR5cGUge2Ake3R5cGVvZiBEUklWRVJfVFlQRX1zYH1cbiAqL1xuY29uc3QgQ09ORklHX0RBVEFfRFJJVkVSX0tFWSA9IGAke0RSSVZFUl9UWVBFfXNgO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wIChgcGx1Z2luc2ApIHVzZWQgaW4gYGV4dGVuc2lvbnMueWFtbGAgZm9yIHBsdWdpbnMuXG4gKiBAdHlwZSB7YCR7dHlwZW9mIFBMVUdJTl9UWVBFfXNgfVxuICovXG5jb25zdCBDT05GSUdfREFUQV9QTFVHSU5fS0VZID0gYCR7UExVR0lOX1RZUEV9c2A7XG5cbi8qKlxuICogQHR5cGUge1JlYWRvbmx5PE1hbmlmZXN0RGF0YT59XG4gKi9cbmNvbnN0IElOSVRJQUxfTUFOSUZFU1RfREFUQSA9IE9iamVjdC5mcmVlemUoe1xuICBbQ09ORklHX0RBVEFfRFJJVkVSX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBbQ09ORklHX0RBVEFfUExVR0lOX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBzY2hlbWFSZXY6IENPTkZJR19TQ0hFTUFfUkVWLFxufSk7XG5cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIEV4dGVuc2lvbiAoZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbikuXG4gKlxuICogVGhlIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhbiBgYXBwaXVtYCBwcm9wZXJ0eSB3aGljaCBpcyBhbiBvYmplY3QuXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxFeHRlbnNpb25UeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNFeHRlbnNpb24gKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgXy5pc1BsYWluT2JqZWN0KHZhbHVlKSAmJlxuICAgIF8uaXNQbGFpbk9iamVjdCh2YWx1ZS5hcHBpdW0pICYmXG4gICAgXy5pc1N0cmluZyh2YWx1ZS5uYW1lKSAmJlxuICAgIF8uaXNTdHJpbmcodmFsdWUudmVyc2lvbilcbiAgKTtcbn1cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCwgcmV0dXJuIGB0cnVlYCBpZiBpdCByZXByZXNlbnRzIGFuIEFwcGl1bSBEcml2ZXIuXG4gKlxuICogVG8gYmUgY29uc2lkZXJlZCBhIGRyaXZlciwgYSBgcGFja2FnZS5qc29uYCBtdXN0IGhhdmUgYSBmaWVsZHNcbiAqIGBhcHBpdW0uZHJpdmVyTmFtZWAsIGBhcHBpdW0uYXV0b21hdGlvbk5hbWVgIGFuZCBgYXBwaXVtLnBsYXRmb3JtTmFtZXNgLlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge3ZhbHVlIGlzIEV4dFBhY2thZ2VKc29uPERyaXZlclR5cGU+fVxuICovXG5mdW5jdGlvbiBpc0RyaXZlciAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICBpc0V4dGVuc2lvbih2YWx1ZSkgJiZcbiAgICBfLmlzU3RyaW5nKF8uZ2V0KHZhbHVlLCAnYXBwaXVtLmRyaXZlck5hbWUnKSkgJiZcbiAgICBfLmlzU3RyaW5nKF8uZ2V0KHZhbHVlLCAnYXBwaXVtLmF1dG9tYXRpb25OYW1lJykpICYmXG4gICAgXy5pc0FycmF5KF8uZ2V0KHZhbHVlLCAnYXBwaXVtLnBsYXRmb3JtTmFtZXMnKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGBwYWNrYWdlLmpzb25gLCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIFBsdWdpbi5cbiAqXG4gKiBUbyBiZSBjb25zaWRlcmVkIGEgcGx1Z2luLCBhIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhbiBgYXBwaXVtLnBsdWdpbk5hbWVgIGZpZWxkLlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge3ZhbHVlIGlzIEV4dFBhY2thZ2VKc29uPFBsdWdpblR5cGU+fVxuICovXG5mdW5jdGlvbiBpc1BsdWdpbiAodmFsdWUpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaW9uKHZhbHVlKSAmJiBfLmlzU3RyaW5nKF8uZ2V0KHZhbHVlLCAnYXBwaXVtLnBsdWdpbk5hbWUnKSk7XG59XG5cbi8qKlxuICogSGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICpcbiAqIE9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZXhpc3RzIHBlciB2YWx1ZSBvZiBgQVBQSVVNX0hPTUVgLlxuICovXG5leHBvcnQgY2xhc3MgTWFuaWZlc3Qge1xuICAvKipcbiAgICogVGhlIGVudGlyZSBjb250ZW50cyBvZiBhIHBhcnNlZCBZQU1MIGV4dGVuc2lvbiBjb25maWcgZmlsZS5cbiAgICpcbiAgICogQ29udGFpbnMgcHJveGllcyBmb3IgYXV0b21hdGljIHBlcnNpc3RlbmNlIG9uIGRpc2tcbiAgICogQHR5cGUge01hbmlmZXN0RGF0YX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kYXRhO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGBBUFBJVU1fSE9NRWAuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgX2FwcGl1bUhvbWU7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYGV4dGVuc2lvbnMueWFtbGBcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogTm90IHNldCB1bnRpbCB7QGxpbmsgTWFuaWZlc3QucmVhZH0gaXMgY2FsbGVkLlxuICAgKi9cbiAgX21hbmlmZXN0UGF0aDtcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgd3JpdGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3Qud3JpdGV9IHdpbGwgY2F1c2UgaXQgdG8gYmVcbiAgICogc2V0IHRvIGEgYFByb21pc2VgLiBXaGVuIHRoZSBjYWxsIHRvIGB3cml0ZSgpYCBpcyBjb21wbGV0ZSwgdGhlIGBQcm9taXNlYFxuICAgKiB3aWxsIHJlc29sdmUgYW5kIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byBgdW5kZWZpbmVkYC4gIENvbmN1cnJlbnQgY2FsbHNcbiAgICogbWFkZSB3aGlsZSB0aGlzIHZhbHVlIGlzIGEgYFByb21pc2VgIHdpbGwgcmV0dXJuIHRoZSBgUHJvbWlzZWAgaXRzZWxmLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UHJvbWlzZTxib29sZWFuPnx1bmRlZmluZWR9XG4gICAqL1xuICBfd3JpdGluZztcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgcmVhZGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3QucmVhZH0gd2lsbCBjYXVzZSBpdCB0byBiZVxuICAgKiBzZXQgdG8gYSBgUHJvbWlzZWAuIFdoZW4gdGhlIGNhbGwgdG8gYHJlYWQoKWAgaXMgY29tcGxldGUsIHRoZSBgUHJvbWlzZWBcbiAgICogd2lsbCByZXNvbHZlIGFuZCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAuICBDb25jdXJyZW50IGNhbGxzXG4gICAqIG1hZGUgd2hpbGUgdGhpcyB2YWx1ZSBpcyBhIGBQcm9taXNlYCB3aWxsIHJldHVybiB0aGUgYFByb21pc2VgIGl0c2VsZi5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1Byb21pc2U8dm9pZD58dW5kZWZpbmVkfVxuICAgKi9cbiAgX3JlYWRpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgaW50ZXJuYWwgZGF0YSB0byBhIGZyZXNoIGNsb25lIG9mIHtAbGluayBJTklUSUFMX01BTklGRVNUX0RBVEF9XG4gICAqXG4gICAqIFVzZSB7QGxpbmsgTWFuaWZlc3QuZ2V0SW5zdGFuY2V9IGluc3RlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoYXBwaXVtSG9tZSkge1xuICAgIHRoaXMuX2FwcGl1bUhvbWUgPSBhcHBpdW1Ib21lO1xuICAgIHRoaXMuX2RhdGEgPSBfLmNsb25lRGVlcChJTklUSUFMX01BTklGRVNUX0RBVEEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgb3IgZXhpc3Rpbmcge0BsaW5rIE1hbmlmZXN0fSBpbnN0YW5jZSwgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGBhcHBpdW1Ib21lYC5cbiAgICpcbiAgICogTWFpbnRhaW5zIG9uZSBpbnN0YW5jZSBwZXIgdmFsdWUgb2YgYGFwcGl1bUhvbWVgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZSAtIFBhdGggdG8gYEFQUElVTV9IT01FYFxuICAgKiBAcmV0dXJucyB7TWFuaWZlc3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0SW5zdGFuY2UgPSBfLm1lbW9pemUoZnVuY3Rpb24gX2dldEluc3RhbmNlIChcbiAgICBhcHBpdW1Ib21lLFxuICApIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0KGFwcGl1bUhvbWUpO1xuICB9KTtcblxuICAvKipcbiAgICogU2VhcmNoZXMgYEFQUElVTV9IT01FYCBmb3IgaW5zdGFsbGVkIGV4dGVuc2lvbnMgYW5kIGFkZHMgdGhlbSB0byB0aGUgbWFuaWZlc3QuXG4gICAqIEBwYXJhbSB7U3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zT3B0c30gb3B0c1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gYHRydWVgIGlmIGFueSBleHRlbnNpb25zIHdlcmUgYWRkZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgYXN5bmMgc3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zICh7ZGVwdGhMaW1pdCA9IERFRkFVTFRfU0VBUkNIX0RFUFRIfSA9IHt9KSB7XG4gICAgY29uc3Qgd2Fsa09wdHMgPSBfLmRlZmF1bHRzKHtkZXB0aExpbWl0fSwgREVGQVVMVF9GSU5EX0VYVEVOU0lPTlNfT1BUUyk7XG4gICAgLy8gdGhpcyBjb3VsZCBiZSBwYXJhbGxlbGl6ZWQsIGJ1dCB3ZSBjYW4ndCB1c2UgZnMud2FsayBhcyBhbiBhc3luYyBpdGVyYXRvclxuICAgIGxldCBkaWRDaGFuZ2UgPSBmYWxzZTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHtzdGF0cywgcGF0aDogZmlsZXBhdGh9IG9mIGZzLndhbGsoXG4gICAgICB0aGlzLl9hcHBpdW1Ib21lLFxuICAgICAgd2Fsa09wdHMsXG4gICAgKSkge1xuICAgICAgaWYgKGZpbGVwYXRoICE9PSB0aGlzLl9hcHBpdW1Ib21lICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwa2cgPSBhd2FpdCBlbnYucmVhZFBhY2thZ2VJbkRpcihmaWxlcGF0aCk7XG4gICAgICAgICAgaWYgKHBrZyAmJiBpc0V4dGVuc2lvbihwa2cpKSB7XG4gICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBleHRlbnNpb24gYWxyZWFkeSBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LFxuICAgICAgICAgICAgLy8gc28gb25seSB1cGRhdGUgYGRpZENoYW5nZWAgaWYgaXQncyBuZXcuXG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2UoXG4gICAgICAgICAgICAgIHBrZyxcbiAgICAgICAgICAgICAgcGF0aC5qb2luKGZpbGVwYXRoLCAncGFja2FnZS5qc29uJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGlkQ2hhbmdlID0gZGlkQ2hhbmdlIHx8IGFkZGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlkQ2hhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGRyaXZlciB3aXRoIG5hbWUgYG5hbWVgIGlzIHJlZ2lzdGVyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gRHJpdmVyIG5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBoYXNEcml2ZXIgKG5hbWUpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9kYXRhLmRyaXZlcnNbbmFtZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHBsdWdpbiB3aXRoIG5hbWUgYG5hbWVgIGlzIHJlZ2lzdGVyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gUGx1Z2luIG5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBoYXNQbHVnaW4gKG5hbWUpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9kYXRhLnBsdWdpbnNbbmFtZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgcGF0aCB0byBhIGBwYWNrYWdlLmpzb25gLCBhZGQgaXQgYXMgZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbiB0byB0aGUgbWFuaWZlc3QuXG4gICAqXG4gICAqIFdpbGwgX25vdF8gb3ZlcndyaXRlIGV4aXN0aW5nIGVudHJpZXMuXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFBhY2thZ2VKc29uPEV4dFR5cGU+fSBwa2dKc29uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dQYXRoXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCB1cG9uIHN1Y2Nlc3MsIGBmYWxzZWAgaWYgdGhlIGV4dGVuc2lvbiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAqL1xuICBhZGRFeHRlbnNpb25Gcm9tUGFja2FnZSAocGtnSnNvbiwgcGtnUGF0aCkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtJbnRlcm5hbE1ldGFkYXRhfVxuICAgICAqL1xuICAgIGNvbnN0IGludGVybmFsID0ge1xuICAgICAgcGtnTmFtZTogcGtnSnNvbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGtnSnNvbi52ZXJzaW9uLFxuICAgICAgaW5zdGFsbFR5cGU6IElOU1RBTExfVFlQRV9OUE0sXG4gICAgICBpbnN0YWxsU3BlYzogYCR7cGtnSnNvbi5uYW1lfUAke3BrZ0pzb24udmVyc2lvbn1gLFxuICAgIH07XG5cbiAgICBpZiAoaXNEcml2ZXIocGtnSnNvbikpIHtcbiAgICAgIGlmICghdGhpcy5oYXNEcml2ZXIocGtnSnNvbi5hcHBpdW0uZHJpdmVyTmFtZSkpIHtcbiAgICAgICAgdGhpcy5hZGRFeHRlbnNpb24oRFJJVkVSX1RZUEUsIHBrZ0pzb24uYXBwaXVtLmRyaXZlck5hbWUsIHtcbiAgICAgICAgICAuLi5fLm9taXQocGtnSnNvbi5hcHBpdW0sICdkcml2ZXJOYW1lJyksXG4gICAgICAgICAgLi4uaW50ZXJuYWxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoaXNQbHVnaW4ocGtnSnNvbikpIHtcbiAgICAgIGlmICghdGhpcy5oYXNQbHVnaW4ocGtnSnNvbi5hcHBpdW0ucGx1Z2luTmFtZSkpIHtcbiAgICAgICAgdGhpcy5hZGRFeHRlbnNpb24oUExVR0lOX1RZUEUsIHBrZ0pzb24uYXBwaXVtLnBsdWdpbk5hbWUsIHtcbiAgICAgICAgICAuLi5fLm9taXQocGtnSnNvbi5hcHBpdW0sICdwbHVnaW5OYW1lJyksXG4gICAgICAgICAgLi4uaW50ZXJuYWwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYFRoZSBleHRlbnNpb24gaW4gJHtwYXRoLmRpcm5hbWUoXG4gICAgICAgICAgcGtnUGF0aCxcbiAgICAgICAgKX0gaXMgbmVpdGhlciBhIHZhbGlkIGRyaXZlciBub3IgYSB2YWxpZCBwbHVnaW4uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBtYW5pZmVzdCBhcyB3YXMgaW5zdGFsbGVkIGJ5IHRoZSBgYXBwaXVtYCBDTEkuICBUaGVcbiAgICogYGV4dERhdGFgLCBgZXh0VHlwZWAsIGFuZCBgZXh0TmFtZWAgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZXJtaW5lZC5cbiAgICpcbiAgICogU2VlIHtAbGluayBNYW5pZmVzdC5hZGRFeHRlbnNpb25Gcm9tUGFja2FnZX0gZm9yIGFkZGluZyBhbiBleHRlbnNpb24gZnJvbSBhbiBvbi1kaXNrIHBhY2thZ2UuXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFR5cGV9IGV4dFR5cGUgLSBgZHJpdmVyYCBvciBgcGx1Z2luYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIE5hbWUgb2YgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT59IGV4dERhdGEgLSBFeHRlbnNpb24gbWV0YWRhdGFcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBhZGRFeHRlbnNpb24gKGV4dFR5cGUsIGV4dE5hbWUsIGV4dERhdGEpIHtcbiAgICB0aGlzLl9kYXRhW2Ake2V4dFR5cGV9c2BdW2V4dE5hbWVdID0gZXh0RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBBUFBJVU1fSE9NRSBwYXRoXG4gICAqL1xuICBnZXQgYXBwaXVtSG9tZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGl1bUhvbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgbWFuaWZlc3QgZmlsZVxuICAgKi9cbiAgZ2V0IG1hbmlmZXN0UGF0aCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hbmlmZXN0UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGV4dGVuc2lvbiBkYXRhIGZvciBhIHBhcnRpY3VsYXIgdHlwZS5cbiAgICpcbiAgICogQHRlbXBsYXRlIHtFeHRlbnNpb25UeXBlfSBFeHRUeXBlXG4gICAqIEBwYXJhbSB7RXh0VHlwZX0gZXh0VHlwZVxuICAgKiBAcmV0dXJucyB7RXh0UmVjb3JkPEV4dFR5cGU+fVxuICAgKi9cbiAgZ2V0RXh0ZW5zaW9uRGF0YSAoZXh0VHlwZSkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoYCR7ZXh0VHlwZX1zYCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIG1hbmlmZXN0IGZyb20gZGlzayBhbmQgX292ZXJ3cml0ZXNfIHRoZSBpbnRlcm5hbCBkYXRhLlxuICAgKlxuICAgKiBJZiB0aGUgbWFuaWZlc3QgZG9lcyBub3QgZXhpc3Qgb24gZGlzaywgYW4ge0BsaW5rIElOSVRJQUxfTUFOSUZFU1RfREFUQSBcImVtcHR5XCJ9IG1hbmlmZXN0IGZpbGUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBJZiBgQVBQSVVNX0hPTUVgIGNvbnRhaW5zIGEgYHBhY2thZ2UuanNvbmAgd2l0aCBhbiBgYXBwaXVtYCBkZXBlbmRlbmN5LCB0aGVuIGEgaGFzaCBvZiB0aGUgYHBhY2thZ2UuanNvbmAgd2lsbCBiZSB0YWtlbi4gSWYgdGhpcyBoYXNoIGRpZmZlcnMgZnJvbSB0aGUgbGFzdCBoYXNoLCB0aGUgY29udGVudHMgb2YgYEFQUElVTV9IT01FL25vZGVfbW9kdWxlc2Agd2lsbCBiZSBzY2FubmVkIGZvciBleHRlbnNpb25zIHRoYXQgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgYGFwcGl1bWAgQ0xJLiAgQW55IGZvdW5kIGV4dGVuc2lvbnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuaWZlc3QgZmlsZSwgYW5kIGlmIHNvLCB0aGUgbWFuaWZlc3QgZmlsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzay5cbiAgICpcbiAgICogT25seSBvbmUgcmVhZCBvcGVyYXRpb24gc2hvdWxkIGhhcHBlbiBhdCBhIHRpbWUuICBUaGlzIGlzIGNvbnRyb2xsZWQgdmlhIHRoZSB7QGxpbmsgTWFuaWZlc3QuX3JlYWRpbmd9IHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNYW5pZmVzdERhdGE+fSBUaGUgZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVhZCAoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRpbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMuX3JlYWRpbmc7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkaW5nID0gKGFzeW5jICgpID0+IHtcbiAgICAgIC8qKiBAdHlwZSB7TWFuaWZlc3REYXRhfSAqL1xuICAgICAgbGV0IGRhdGE7XG4gICAgICBsZXQgaXNOZXdGaWxlID0gZmFsc2U7XG4gICAgICBhd2FpdCB0aGlzLl9zZXRNYW5pZmVzdFBhdGgoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgUmVhZGluZyAke3RoaXMuX21hbmlmZXN0UGF0aH0uLi5gKTtcbiAgICAgICAgY29uc3QgeWFtbCA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuX21hbmlmZXN0UGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgZGF0YSA9IFlBTUwucGFyc2UoeWFtbCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGRhdGEgPSBfLmNsb25lRGVlcChJTklUSUFMX01BTklGRVNUX0RBVEEpO1xuICAgICAgICAgIGlzTmV3RmlsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21hbmlmZXN0UGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQXBwaXVtIGhhZCB0cm91YmxlIGxvYWRpbmcgdGhlIGV4dGVuc2lvbiBpbnN0YWxsYXRpb24gYCArXG4gICAgICAgICAgICAgICAgYGNhY2hlIGZpbGUgKCR7dGhpcy5fbWFuaWZlc3RQYXRofSkuIEl0IG1heSBiZSBpbnZhbGlkIFlBTUwuIFNwZWNpZmljIGVycm9yOiAke2Vyci5tZXNzYWdlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBBcHBpdW0gZW5jb3VudGVyZWQgYW4gdW5rbm93biBwcm9ibGVtLiBTcGVjaWZpYyBlcnJvcjogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICBsZXQgaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGlmIChcbiAgICAgICAgYXdhaXQgZW52Lmhhc0FwcGl1bURlcGVuZGVuY3kodGhpcy5hcHBpdW1Ib21lKSAmJlxuICAgICAgICAoYXdhaXQgcGFja2FnZURpZENoYW5nZSh0aGlzLmFwcGl1bUhvbWUpKVxuICAgICAgKSB7XG4gICAgICAgIGluc3RhbGxlZEV4dGVuc2lvbnNDaGFuZ2VkID0gYXdhaXQgdGhpcy5zeW5jV2l0aEluc3RhbGxlZEV4dGVuc2lvbnMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTmV3RmlsZSB8fCBpbnN0YWxsZWRFeHRlbnNpb25zQ2hhbmdlZCkge1xuICAgICAgICBhd2FpdCB0aGlzLndyaXRlKCk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZGluZztcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9yZWFkaW5nID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHtAbGluayBNYW5pZmVzdC5fbWFuaWZlc3RQYXRofSBpcyBzZXQuXG4gICAqXG4gICAqIENyZWF0ZXMgdGhlIGRpcmVjdG9yeSBpZiBuZWNlc3NhcnkuXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAqL1xuICBhc3luYyBfc2V0TWFuaWZlc3RQYXRoICgpIHtcbiAgICBpZiAoIXRoaXMuX21hbmlmZXN0UGF0aCkge1xuICAgICAgdGhpcy5fbWFuaWZlc3RQYXRoID0gYXdhaXQgZW52LnJlc29sdmVNYW5pZmVzdFBhdGgodGhpcy5fYXBwaXVtSG9tZSk7XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHBhdGgucmVsYXRpdmUodGhpcy5fYXBwaXVtSG9tZSwgdGhpcy5fbWFuaWZlc3RQYXRoKS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBNaXNtYXRjaCBiZXR3ZWVuIGxvY2F0aW9uIG9mIEFQUElVTV9IT01FIGFuZCBtYW5pZmVzdCBmaWxlLiBBUFBJVU1fSE9NRTogJHt0aGlzLmFwcGl1bUhvbWV9LCBtYW5pZmVzdCBmaWxlOiAke3RoaXMuX21hbmlmZXN0UGF0aH1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBkYXRhIGlmIGl0IG5lZWQgcyB3cml0aW5nLlxuICAgKlxuICAgKiBJZiB0aGUgYHNjaGVtYVJldmAgcHJvcCBuZWVkcyB1cGRhdGluZywgdGhlIGZpbGUgd2lsbCBiZSB3cml0dGVuLlxuICAgKlxuICAgKiBAdG9kbyBJZiB0aGlzIGJlY29tZXMgdG9vIG11Y2ggb2YgYSBib3R0bGVuZWNrLCB0aHJvdHRsZSBpdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFdoZXRoZXIgdGhlIGRhdGEgd2FzIHdyaXR0ZW5cbiAgICovXG4gIGFzeW5jIHdyaXRlICgpIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRpbmc7XG4gICAgfVxuICAgIHRoaXMuX3dyaXRpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fc2V0TWFuaWZlc3RQYXRoKCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5kaXJuYW1lKHRoaXMuX21hbmlmZXN0UGF0aCkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwaXVtIGNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIG1hbmlmZXN0IGZpbGU6ICR7cGF0aC5kaXJuYW1lKFxuICAgICAgICAgICAgdGhpcy5fbWFuaWZlc3RQYXRoLFxuICAgICAgICAgICl9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgICAgIHRoaXMuX21hbmlmZXN0UGF0aCxcbiAgICAgICAgICBZQU1MLnN0cmluZ2lmeSh0aGlzLl9kYXRhKSxcbiAgICAgICAgICAndXRmOCcsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwaXVtIGNvdWxkIG5vdCB3cml0ZSB0byBtYW5pZmVzdCBhdCAke3RoaXMuX21hbmlmZXN0UGF0aH0gdXNpbmcgQVBQSVVNX0hPTUUgJHt0aGlzLl9hcHBpdW1Ib21lfS4gYCArXG4gICAgICAgICAgICBgUGxlYXNlIGVuc3VyZSBpdCBpcyB3cml0YWJsZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fd3JpdGluZztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fd3JpdGluZyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBzdHJpbmcgcmVmZXJyaW5nIHRvIGEgZHJpdmVyICh0eXBpY2FsbHkgYXMgYSBrZXkgb3IgdHlwZSBzdHJpbmcpXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcycpLkRyaXZlclR5cGV9IERyaXZlclR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGUgb2YgdGhlIHN0cmluZyByZWZlcnJpbmcgdG8gYSBwbHVnaW4gKHR5cGljYWxseSBhcyBhIGtleSBvciB0eXBlIHN0cmluZylcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzJykuUGx1Z2luVHlwZX0gUGx1Z2luVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zT3B0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZXB0aExpbWl0XSAtIE1heGltdW0gZGVwdGggdG8gcmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcHBpdW0tbWFuaWZlc3QnKS5NYW5pZmVzdERhdGF9IE1hbmlmZXN0RGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBwaXVtLW1hbmlmZXN0JykuSW50ZXJuYWxNZXRhZGF0YX0gSW50ZXJuYWxNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2V4dGVybmFsLW1hbmlmZXN0JykuRXh0UGFja2FnZUpzb248VD59IEV4dFBhY2thZ2VKc29uXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBwaXVtLW1hbmlmZXN0JykuRXh0TWFuaWZlc3Q8VD59IEV4dE1hbmlmZXN0XG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBwaXVtLW1hbmlmZXN0JykuRXh0UmVjb3JkPFQ+fSBFeHRSZWNvcmRcbiAqL1xuXG4vKipcbiAqIEVpdGhlciBgZHJpdmVyYCBvciBgcGx1Z2luYCByblxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuIl19
246
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vbWFuaWZlc3QuanMiXSwibmFtZXMiOlsiREVGQVVMVF9TRUFSQ0hfREVQVEgiLCJERUZBVUxUX0ZJTkRfRVhURU5TSU9OU19PUFRTIiwiT2JqZWN0IiwiZnJlZXplIiwiZGVwdGhMaW1pdCIsImZpbHRlciIsImZpbGVwYXRoIiwicGF0aCIsImJhc2VuYW1lIiwic3RhcnRzV2l0aCIsIkNPTkZJR19TQ0hFTUFfUkVWIiwiQ09ORklHX0RBVEFfRFJJVkVSX0tFWSIsIkRSSVZFUl9UWVBFIiwiQ09ORklHX0RBVEFfUExVR0lOX0tFWSIsIlBMVUdJTl9UWVBFIiwiSU5JVElBTF9NQU5JRkVTVF9EQVRBIiwic2NoZW1hUmV2IiwiaXNFeHRlbnNpb24iLCJ2YWx1ZSIsIl8iLCJpc1BsYWluT2JqZWN0IiwiYXBwaXVtIiwiaXNTdHJpbmciLCJuYW1lIiwidmVyc2lvbiIsImlzRHJpdmVyIiwiZ2V0IiwiaXNBcnJheSIsImlzUGx1Z2luIiwiTWFuaWZlc3QiLCJfZGF0YSIsIl9hcHBpdW1Ib21lIiwiX21hbmlmZXN0UGF0aCIsIl93cml0aW5nIiwiX3JlYWRpbmciLCJjb25zdHJ1Y3RvciIsImFwcGl1bUhvbWUiLCJjbG9uZURlZXAiLCJnZXRJbnN0YW5jZSIsIm1lbW9pemUiLCJfZ2V0SW5zdGFuY2UiLCJzeW5jV2l0aEluc3RhbGxlZEV4dGVuc2lvbnMiLCJ3YWxrT3B0cyIsImRlZmF1bHRzIiwiZGlkQ2hhbmdlIiwic3RhdHMiLCJmcyIsIndhbGsiLCJpc0RpcmVjdG9yeSIsInBrZyIsImVudiIsInJlYWRQYWNrYWdlSW5EaXIiLCJhZGRlZCIsImFkZEV4dGVuc2lvbkZyb21QYWNrYWdlIiwiam9pbiIsImhhc0RyaXZlciIsIkJvb2xlYW4iLCJkcml2ZXJzIiwiaGFzUGx1Z2luIiwicGx1Z2lucyIsInBrZ0pzb24iLCJwa2dQYXRoIiwiaW50ZXJuYWwiLCJwa2dOYW1lIiwiaW5zdGFsbFR5cGUiLCJJTlNUQUxMX1RZUEVfTlBNIiwiaW5zdGFsbFNwZWMiLCJkcml2ZXJOYW1lIiwiYWRkRXh0ZW5zaW9uIiwib21pdCIsInBsdWdpbk5hbWUiLCJUeXBlRXJyb3IiLCJkaXJuYW1lIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJleHREYXRhIiwibWFuaWZlc3RQYXRoIiwiZ2V0RXh0ZW5zaW9uRGF0YSIsInJlYWQiLCJkYXRhIiwiaXNOZXdGaWxlIiwiX3NldE1hbmlmZXN0UGF0aCIsImxvZyIsImRlYnVnIiwieWFtbCIsInJlYWRGaWxlIiwiWUFNTCIsInBhcnNlIiwiZXJyIiwiY29kZSIsIkVycm9yIiwibWVzc2FnZSIsImluc3RhbGxlZEV4dGVuc2lvbnNDaGFuZ2VkIiwiaGFzQXBwaXVtRGVwZW5kZW5jeSIsIndyaXRlIiwidW5kZWZpbmVkIiwicmVzb2x2ZU1hbmlmZXN0UGF0aCIsInJlbGF0aXZlIiwibWtkaXJwIiwid3JpdGVGaWxlIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU9BLE1BQU1BLG9CQUFvQixHQUFHLENBQTdCO0FBTUEsTUFBTUMsNEJBQTRCLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQ2pEQyxFQUFBQSxVQUFVLEVBQUVKLG9CQURxQztBQUdqREssRUFBQUEsTUFBTSxFQUFHQyxRQUFELElBQWMsQ0FBQ0MsY0FBS0MsUUFBTCxDQUFjRixRQUFkLEVBQXdCRyxVQUF4QixDQUFtQyxHQUFuQztBQUgwQixDQUFkLENBQXJDO0FBU0EsTUFBTUMsaUJBQWlCLEdBQUcsQ0FBMUI7QUFNQSxNQUFNQyxzQkFBc0IsR0FBSSxHQUFFQyxzQkFBWSxHQUE5QztBQU1BLE1BQU1DLHNCQUFzQixHQUFJLEdBQUVDLHNCQUFZLEdBQTlDO0FBS0EsTUFBTUMscUJBQXFCLEdBQUdiLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjO0FBQzFDLEdBQUNRLHNCQUFELEdBQTBCVCxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFk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LE9BQU8wRCxHQUFQLEVBQVk7QUFDWixjQUFNLElBQUlFLEtBQUosQ0FDSCx5Q0FBd0MsS0FBSzFELGFBQWMsc0JBQXFCLEtBQUtELFdBQVksSUFBbEcsR0FDRyxpREFBZ0R5RCxHQUFHLENBQUNHLE9BQVEsRUFGM0QsQ0FBTjtBQUlEO0FBQ0YsS0F4QmUsR0FBaEI7O0FBeUJBLFFBQUk7QUFDRixhQUFPLE1BQU0sS0FBSzFELFFBQWxCO0FBQ0QsS0FGRCxTQUVVO0FBQ1IsV0FBS0EsUUFBTCxHQUFnQjhELFNBQWhCO0FBQ0Q7QUFDRjs7QUFqVm1CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNb2R1bGUgY29udGFpbmluZyB7QGxpbmsgTWFuaWZlc3R9IHdoaWNoIGhhbmRsZXMgcmVhZGluZyAmIHdyaXRpbmcgb2YgZXh0ZW5zaW9uIGNvbmZpZyBmaWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBlbnYsIGZzIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBZQU1MIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgRFJJVkVSX1RZUEUsIFBMVUdJTl9UWVBFIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCBsb2cgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IElOU1RBTExfVFlQRV9OUE0gfSBmcm9tICcuL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0IHsgcGFja2FnZURpZENoYW5nZSB9IGZyb20gJy4vcGFja2FnZS1jaGFuZ2VkJztcblxuLyoqXG4gKiBEZWZhdWx0IGRlcHRoIHRvIHNlYXJjaCBpbiBkaXJlY3RvcnkgdHJlZSBmb3Igd2hhdGV2ZXIgaXQgaXMgd2UncmUgbG9va2luZyBmb3IuXG4gKlxuICogSXQncyA0IGJlY2F1c2Ugc21hbGxlciBudW1iZXJzIGRpZG4ndCB3b3JrLlxuICovXG5jb25zdCBERUZBVUxUX1NFQVJDSF9ERVBUSCA9IDQ7XG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIGZvciB7QGxpbmsgZmluZEV4dGVuc2lvbnN9LlxuICogQHR5cGUge1JlYWRvbmx5PGltcG9ydCgna2xhdycpLk9wdGlvbnM+fVxuICovXG5jb25zdCBERUZBVUxUX0ZJTkRfRVhURU5TSU9OU19PUFRTID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGRlcHRoTGltaXQ6IERFRkFVTFRfU0VBUkNIX0RFUFRILFxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBmaWx0ZXI6IChmaWxlcGF0aCkgPT4gIXBhdGguYmFzZW5hbWUoZmlsZXBhdGgpLnN0YXJ0c1dpdGgoJy4nKSxcbn0pO1xuXG4vKipcbiAqIEN1cnJlbnQgY29uZmlndXJhdGlvbiBzY2hlbWEgcmV2aXNpb24hXG4gKi9cbmNvbnN0IENPTkZJR19TQ0hFTUFfUkVWID0gMjtcblxuLyoqXG4gKiBUaGUgbmFtZSBvZiB0aGUgcHJvcCAoYGRyaXZlcnNgKSB1c2VkIGluIGBleHRlbnNpb25zLnlhbWxgIGZvciBkcml2ZXJzLlxuICogQHR5cGUge2Ake3R5cGVvZiBEUklWRVJfVFlQRX1zYH1cbiAqL1xuY29uc3QgQ09ORklHX0RBVEFfRFJJVkVSX0tFWSA9IGAke0RSSVZFUl9UWVBFfXNgO1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIHRoZSBwcm9wIChgcGx1Z2luc2ApIHVzZWQgaW4gYGV4dGVuc2lvbnMueWFtbGAgZm9yIHBsdWdpbnMuXG4gKiBAdHlwZSB7YCR7dHlwZW9mIFBMVUdJTl9UWVBFfXNgfVxuICovXG5jb25zdCBDT05GSUdfREFUQV9QTFVHSU5fS0VZID0gYCR7UExVR0lOX1RZUEV9c2A7XG5cbi8qKlxuICogQHR5cGUge1JlYWRvbmx5PE1hbmlmZXN0RGF0YT59XG4gKi9cbmNvbnN0IElOSVRJQUxfTUFOSUZFU1RfREFUQSA9IE9iamVjdC5mcmVlemUoe1xuICBbQ09ORklHX0RBVEFfRFJJVkVSX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBbQ09ORklHX0RBVEFfUExVR0lOX0tFWV06IE9iamVjdC5mcmVlemUoe30pLFxuICBzY2hlbWFSZXY6IENPTkZJR19TQ0hFTUFfUkVWLFxufSk7XG5cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIEV4dGVuc2lvbiAoZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbikuXG4gKlxuICogVGhlIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhbiBgYXBwaXVtYCBwcm9wZXJ0eSB3aGljaCBpcyBhbiBvYmplY3QuXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBFeHRQYWNrYWdlSnNvbjxFeHRlbnNpb25UeXBlPn1cbiAqL1xuZnVuY3Rpb24gaXNFeHRlbnNpb24gKHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgXy5pc1BsYWluT2JqZWN0KHZhbHVlKSAmJlxuICAgIF8uaXNQbGFpbk9iamVjdCh2YWx1ZS5hcHBpdW0pICYmXG4gICAgXy5pc1N0cmluZyh2YWx1ZS5uYW1lKSAmJlxuICAgIF8uaXNTdHJpbmcodmFsdWUudmVyc2lvbilcbiAgKTtcbn1cbi8qKlxuICogR2l2ZW4gYSBgcGFja2FnZS5qc29uYCwgcmV0dXJuIGB0cnVlYCBpZiBpdCByZXByZXNlbnRzIGFuIEFwcGl1bSBEcml2ZXIuXG4gKlxuICogVG8gYmUgY29uc2lkZXJlZCBhIGRyaXZlciwgYSBgcGFja2FnZS5qc29uYCBtdXN0IGhhdmUgYSBmaWVsZHNcbiAqIGBhcHBpdW0uZHJpdmVyTmFtZWAsIGBhcHBpdW0uYXV0b21hdGlvbk5hbWVgIGFuZCBgYXBwaXVtLnBsYXRmb3JtTmFtZXNgLlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge3ZhbHVlIGlzIEV4dFBhY2thZ2VKc29uPERyaXZlclR5cGU+fVxuICovXG5mdW5jdGlvbiBpc0RyaXZlciAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICBpc0V4dGVuc2lvbih2YWx1ZSkgJiZcbiAgICBfLmlzU3RyaW5nKF8uZ2V0KHZhbHVlLCAnYXBwaXVtLmRyaXZlck5hbWUnKSkgJiZcbiAgICBfLmlzU3RyaW5nKF8uZ2V0KHZhbHVlLCAnYXBwaXVtLmF1dG9tYXRpb25OYW1lJykpICYmXG4gICAgXy5pc0FycmF5KF8uZ2V0KHZhbHVlLCAnYXBwaXVtLnBsYXRmb3JtTmFtZXMnKSlcbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIGBwYWNrYWdlLmpzb25gLCByZXR1cm4gYHRydWVgIGlmIGl0IHJlcHJlc2VudHMgYW4gQXBwaXVtIFBsdWdpbi5cbiAqXG4gKiBUbyBiZSBjb25zaWRlcmVkIGEgcGx1Z2luLCBhIGBwYWNrYWdlLmpzb25gIG11c3QgaGF2ZSBhbiBgYXBwaXVtLnBsdWdpbk5hbWVgIGZpZWxkLlxuICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge3ZhbHVlIGlzIEV4dFBhY2thZ2VKc29uPFBsdWdpblR5cGU+fVxuICovXG5mdW5jdGlvbiBpc1BsdWdpbiAodmFsdWUpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaW9uKHZhbHVlKSAmJiBfLmlzU3RyaW5nKF8uZ2V0KHZhbHVlLCAnYXBwaXVtLnBsdWdpbk5hbWUnKSk7XG59XG5cbi8qKlxuICogSGFuZGxlcyByZWFkaW5nICYgd3JpdGluZyBvZiBleHRlbnNpb24gY29uZmlnIGZpbGVzLlxuICpcbiAqIE9ubHkgb25lIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgZXhpc3RzIHBlciB2YWx1ZSBvZiBgQVBQSVVNX0hPTUVgLlxuICovXG5leHBvcnQgY2xhc3MgTWFuaWZlc3Qge1xuICAvKipcbiAgICogVGhlIGVudGlyZSBjb250ZW50cyBvZiBhIHBhcnNlZCBZQU1MIGV4dGVuc2lvbiBjb25maWcgZmlsZS5cbiAgICpcbiAgICogQ29udGFpbnMgcHJveGllcyBmb3IgYXV0b21hdGljIHBlcnNpc3RlbmNlIG9uIGRpc2tcbiAgICogQHR5cGUge01hbmlmZXN0RGF0YX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9kYXRhO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGBBUFBJVU1fSE9NRWAuXG4gICAqIEBwcml2YXRlXG4gICAqIEB0eXBlIHtSZWFkb25seTxzdHJpbmc+fVxuICAgKi9cbiAgX2FwcGl1bUhvbWU7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYGV4dGVuc2lvbnMueWFtbGBcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICogTm90IHNldCB1bnRpbCB7QGxpbmsgTWFuaWZlc3QucmVhZH0gaXMgY2FsbGVkLlxuICAgKi9cbiAgX21hbmlmZXN0UGF0aDtcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgd3JpdGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3Qud3JpdGV9IHdpbGwgY2F1c2UgaXQgdG8gYmVcbiAgICogc2V0IHRvIGEgYFByb21pc2VgLiBXaGVuIHRoZSBjYWxsIHRvIGB3cml0ZSgpYCBpcyBjb21wbGV0ZSwgdGhlIGBQcm9taXNlYFxuICAgKiB3aWxsIHJlc29sdmUgYW5kIHRoZW4gdGhpcyB2YWx1ZSB3aWxsIGJlIHNldCB0byBgdW5kZWZpbmVkYC4gIENvbmN1cnJlbnQgY2FsbHNcbiAgICogbWFkZSB3aGlsZSB0aGlzIHZhbHVlIGlzIGEgYFByb21pc2VgIHdpbGwgcmV0dXJuIHRoZSBgUHJvbWlzZWAgaXRzZWxmLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdHlwZSB7UHJvbWlzZTxib29sZWFuPnx1bmRlZmluZWR9XG4gICAqL1xuICBfd3JpdGluZztcblxuICAvKipcbiAgICogSGVscHMgYXZvaWQgcmVhZGluZyBtdWx0aXBsZSB0aW1lcy5cbiAgICpcbiAgICogSWYgdGhpcyBpcyBgdW5kZWZpbmVkYCwgY2FsbGluZyB7QGxpbmsgTWFuaWZlc3QucmVhZH0gd2lsbCBjYXVzZSBpdCB0byBiZVxuICAgKiBzZXQgdG8gYSBgUHJvbWlzZWAuIFdoZW4gdGhlIGNhbGwgdG8gYHJlYWQoKWAgaXMgY29tcGxldGUsIHRoZSBgUHJvbWlzZWBcbiAgICogd2lsbCByZXNvbHZlIGFuZCB0aGVuIHRoaXMgdmFsdWUgd2lsbCBiZSBzZXQgdG8gYHVuZGVmaW5lZGAuICBDb25jdXJyZW50IGNhbGxzXG4gICAqIG1hZGUgd2hpbGUgdGhpcyB2YWx1ZSBpcyBhIGBQcm9taXNlYCB3aWxsIHJldHVybiB0aGUgYFByb21pc2VgIGl0c2VsZi5cbiAgICogQHByaXZhdGVcbiAgICogQHR5cGUge1Byb21pc2U8dm9pZD58dW5kZWZpbmVkfVxuICAgKi9cbiAgX3JlYWRpbmc7XG5cbiAgLyoqXG4gICAqIFNldHMgaW50ZXJuYWwgZGF0YSB0byBhIGZyZXNoIGNsb25lIG9mIHtAbGluayBJTklUSUFMX01BTklGRVNUX0RBVEF9XG4gICAqXG4gICAqIFVzZSB7QGxpbmsgTWFuaWZlc3QuZ2V0SW5zdGFuY2V9IGluc3RlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoYXBwaXVtSG9tZSkge1xuICAgIHRoaXMuX2FwcGl1bUhvbWUgPSBhcHBpdW1Ib21lO1xuICAgIHRoaXMuX2RhdGEgPSBfLmNsb25lRGVlcChJTklUSUFMX01BTklGRVNUX0RBVEEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgb3IgZXhpc3Rpbmcge0BsaW5rIE1hbmlmZXN0fSBpbnN0YW5jZSwgYmFzZWQgb24gdGhlIHZhbHVlIG9mIGBhcHBpdW1Ib21lYC5cbiAgICpcbiAgICogTWFpbnRhaW5zIG9uZSBpbnN0YW5jZSBwZXIgdmFsdWUgb2YgYGFwcGl1bUhvbWVgLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZSAtIFBhdGggdG8gYEFQUElVTV9IT01FYFxuICAgKiBAcmV0dXJucyB7TWFuaWZlc3R9XG4gICAqL1xuICBzdGF0aWMgZ2V0SW5zdGFuY2UgPSBfLm1lbW9pemUoZnVuY3Rpb24gX2dldEluc3RhbmNlIChcbiAgICBhcHBpdW1Ib21lLFxuICApIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0KGFwcGl1bUhvbWUpO1xuICB9KTtcblxuICAvKipcbiAgICogU2VhcmNoZXMgYEFQUElVTV9IT01FYCBmb3IgaW5zdGFsbGVkIGV4dGVuc2lvbnMgYW5kIGFkZHMgdGhlbSB0byB0aGUgbWFuaWZlc3QuXG4gICAqIEBwYXJhbSB7U3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zT3B0c30gb3B0c1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gYHRydWVgIGlmIGFueSBleHRlbnNpb25zIHdlcmUgYWRkZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgKi9cbiAgYXN5bmMgc3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zICh7ZGVwdGhMaW1pdCA9IERFRkFVTFRfU0VBUkNIX0RFUFRIfSA9IHt9KSB7XG4gICAgY29uc3Qgd2Fsa09wdHMgPSBfLmRlZmF1bHRzKHtkZXB0aExpbWl0fSwgREVGQVVMVF9GSU5EX0VYVEVOU0lPTlNfT1BUUyk7XG4gICAgLy8gdGhpcyBjb3VsZCBiZSBwYXJhbGxlbGl6ZWQsIGJ1dCB3ZSBjYW4ndCB1c2UgZnMud2FsayBhcyBhbiBhc3luYyBpdGVyYXRvclxuICAgIGxldCBkaWRDaGFuZ2UgPSBmYWxzZTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHtzdGF0cywgcGF0aDogZmlsZXBhdGh9IG9mIGZzLndhbGsoXG4gICAgICB0aGlzLl9hcHBpdW1Ib21lLFxuICAgICAgd2Fsa09wdHMsXG4gICAgKSkge1xuICAgICAgaWYgKGZpbGVwYXRoICE9PSB0aGlzLl9hcHBpdW1Ib21lICYmIHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwa2cgPSBhd2FpdCBlbnYucmVhZFBhY2thZ2VJbkRpcihmaWxlcGF0aCk7XG4gICAgICAgICAgaWYgKHBrZyAmJiBpc0V4dGVuc2lvbihwa2cpKSB7XG4gICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBleHRlbnNpb24gYWxyZWFkeSBleGlzdHMgaW4gdGhlIG1hbmlmZXN0LFxuICAgICAgICAgICAgLy8gc28gb25seSB1cGRhdGUgYGRpZENoYW5nZWAgaWYgaXQncyBuZXcuXG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuYWRkRXh0ZW5zaW9uRnJvbVBhY2thZ2UoXG4gICAgICAgICAgICAgIHBrZyxcbiAgICAgICAgICAgICAgcGF0aC5qb2luKGZpbGVwYXRoLCAncGFja2FnZS5qc29uJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZGlkQ2hhbmdlID0gZGlkQ2hhbmdlIHx8IGFkZGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGlkQ2hhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIGRyaXZlciB3aXRoIG5hbWUgYG5hbWVgIGlzIHJlZ2lzdGVyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gRHJpdmVyIG5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBoYXNEcml2ZXIgKG5hbWUpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9kYXRhLmRyaXZlcnNbbmFtZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYHRydWVgIGlmIHBsdWdpbiB3aXRoIG5hbWUgYG5hbWVgIGlzIHJlZ2lzdGVyZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gUGx1Z2luIG5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBoYXNQbHVnaW4gKG5hbWUpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLl9kYXRhLnBsdWdpbnNbbmFtZV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdpdmVuIGEgcGF0aCB0byBhIGBwYWNrYWdlLmpzb25gLCBhZGQgaXQgYXMgZWl0aGVyIGEgZHJpdmVyIG9yIHBsdWdpbiB0byB0aGUgbWFuaWZlc3QuXG4gICAqXG4gICAqIFdpbGwgX25vdF8gb3ZlcndyaXRlIGV4aXN0aW5nIGVudHJpZXMuXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFBhY2thZ2VKc29uPEV4dFR5cGU+fSBwa2dKc29uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwa2dQYXRoXG4gICAqIEByZXR1cm5zIHtib29sZWFufSAtIGB0cnVlYCB1cG9uIHN1Y2Nlc3MsIGBmYWxzZWAgaWYgdGhlIGV4dGVuc2lvbiBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuXG4gICAqL1xuICBhZGRFeHRlbnNpb25Gcm9tUGFja2FnZSAocGtnSnNvbiwgcGtnUGF0aCkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtJbnRlcm5hbE1ldGFkYXRhfVxuICAgICAqL1xuICAgIGNvbnN0IGludGVybmFsID0ge1xuICAgICAgcGtnTmFtZTogcGtnSnNvbi5uYW1lLFxuICAgICAgdmVyc2lvbjogcGtnSnNvbi52ZXJzaW9uLFxuICAgICAgaW5zdGFsbFR5cGU6IElOU1RBTExfVFlQRV9OUE0sXG4gICAgICBpbnN0YWxsU3BlYzogYCR7cGtnSnNvbi5uYW1lfUAke3BrZ0pzb24udmVyc2lvbn1gLFxuICAgIH07XG5cbiAgICBpZiAoaXNEcml2ZXIocGtnSnNvbikpIHtcbiAgICAgIGlmICghdGhpcy5oYXNEcml2ZXIocGtnSnNvbi5hcHBpdW0uZHJpdmVyTmFtZSkpIHtcbiAgICAgICAgdGhpcy5hZGRFeHRlbnNpb24oRFJJVkVSX1RZUEUsIHBrZ0pzb24uYXBwaXVtLmRyaXZlck5hbWUsIHtcbiAgICAgICAgICAuLi5fLm9taXQocGtnSnNvbi5hcHBpdW0sICdkcml2ZXJOYW1lJyksXG4gICAgICAgICAgLi4uaW50ZXJuYWxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoaXNQbHVnaW4ocGtnSnNvbikpIHtcbiAgICAgIGlmICghdGhpcy5oYXNQbHVnaW4ocGtnSnNvbi5hcHBpdW0ucGx1Z2luTmFtZSkpIHtcbiAgICAgICAgdGhpcy5hZGRFeHRlbnNpb24oUExVR0lOX1RZUEUsIHBrZ0pzb24uYXBwaXVtLnBsdWdpbk5hbWUsIHtcbiAgICAgICAgICAuLi5fLm9taXQocGtnSnNvbi5hcHBpdW0sICdwbHVnaW5OYW1lJyksXG4gICAgICAgICAgLi4uaW50ZXJuYWwsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgYFRoZSBleHRlbnNpb24gaW4gJHtwYXRoLmRpcm5hbWUoXG4gICAgICAgICAgcGtnUGF0aCxcbiAgICAgICAgKX0gaXMgbmVpdGhlciBhIHZhbGlkIGRyaXZlciBub3IgYSB2YWxpZCBwbHVnaW4uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBtYW5pZmVzdCBhcyB3YXMgaW5zdGFsbGVkIGJ5IHRoZSBgYXBwaXVtYCBDTEkuICBUaGVcbiAgICogYGV4dERhdGFgLCBgZXh0VHlwZWAsIGFuZCBgZXh0TmFtZWAgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZXJtaW5lZC5cbiAgICpcbiAgICogU2VlIHtAbGluayBNYW5pZmVzdC5hZGRFeHRlbnNpb25Gcm9tUGFja2FnZX0gZm9yIGFkZGluZyBhbiBleHRlbnNpb24gZnJvbSBhbiBvbi1kaXNrIHBhY2thZ2UuXG4gICAqIEB0ZW1wbGF0ZSB7RXh0ZW5zaW9uVHlwZX0gRXh0VHlwZVxuICAgKiBAcGFyYW0ge0V4dFR5cGV9IGV4dFR5cGUgLSBgZHJpdmVyYCBvciBgcGx1Z2luYFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXh0TmFtZSAtIE5hbWUgb2YgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7RXh0TWFuaWZlc3Q8RXh0VHlwZT59IGV4dERhdGEgLSBFeHRlbnNpb24gbWV0YWRhdGFcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBhZGRFeHRlbnNpb24gKGV4dFR5cGUsIGV4dE5hbWUsIGV4dERhdGEpIHtcbiAgICB0aGlzLl9kYXRhW2Ake2V4dFR5cGV9c2BdW2V4dE5hbWVdID0gZXh0RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBBUFBJVU1fSE9NRSBwYXRoXG4gICAqL1xuICBnZXQgYXBwaXVtSG9tZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGl1bUhvbWU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgbWFuaWZlc3QgZmlsZVxuICAgKi9cbiAgZ2V0IG1hbmlmZXN0UGF0aCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hbmlmZXN0UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGV4dGVuc2lvbiBkYXRhIGZvciBhIHBhcnRpY3VsYXIgdHlwZS5cbiAgICpcbiAgICogQHRlbXBsYXRlIHtFeHRlbnNpb25UeXBlfSBFeHRUeXBlXG4gICAqIEBwYXJhbSB7RXh0VHlwZX0gZXh0VHlwZVxuICAgKiBAcmV0dXJucyB7RXh0UmVjb3JkPEV4dFR5cGU+fVxuICAgKi9cbiAgZ2V0RXh0ZW5zaW9uRGF0YSAoZXh0VHlwZSkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhWy8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoYCR7ZXh0VHlwZX1zYCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWRzIG1hbmlmZXN0IGZyb20gZGlzayBhbmQgX292ZXJ3cml0ZXNfIHRoZSBpbnRlcm5hbCBkYXRhLlxuICAgKlxuICAgKiBJZiB0aGUgbWFuaWZlc3QgZG9lcyBub3QgZXhpc3Qgb24gZGlzaywgYW4ge0BsaW5rIElOSVRJQUxfTUFOSUZFU1RfREFUQSBcImVtcHR5XCJ9IG1hbmlmZXN0IGZpbGUgd2lsbCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBJZiBgQVBQSVVNX0hPTUVgIGNvbnRhaW5zIGEgYHBhY2thZ2UuanNvbmAgd2l0aCBhbiBgYXBwaXVtYCBkZXBlbmRlbmN5LCB0aGVuIGEgaGFzaCBvZiB0aGUgYHBhY2thZ2UuanNvbmAgd2lsbCBiZSB0YWtlbi4gSWYgdGhpcyBoYXNoIGRpZmZlcnMgZnJvbSB0aGUgbGFzdCBoYXNoLCB0aGUgY29udGVudHMgb2YgYEFQUElVTV9IT01FL25vZGVfbW9kdWxlc2Agd2lsbCBiZSBzY2FubmVkIGZvciBleHRlbnNpb25zIHRoYXQgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgb3V0c2lkZSBvZiB0aGUgYGFwcGl1bWAgQ0xJLiAgQW55IGZvdW5kIGV4dGVuc2lvbnMgd2lsbCBiZSBhZGRlZCB0byB0aGUgbWFuaWZlc3QgZmlsZSwgYW5kIGlmIHNvLCB0aGUgbWFuaWZlc3QgZmlsZSB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzay5cbiAgICpcbiAgICogT25seSBvbmUgcmVhZCBvcGVyYXRpb24gc2hvdWxkIGhhcHBlbiBhdCBhIHRpbWUuICBUaGlzIGlzIGNvbnRyb2xsZWQgdmlhIHRoZSB7QGxpbmsgTWFuaWZlc3QuX3JlYWRpbmd9IHByb3BlcnR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxNYW5pZmVzdERhdGE+fSBUaGUgZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVhZCAoKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRpbmcpIHtcbiAgICAgIGF3YWl0IHRoaXMuX3JlYWRpbmc7XG4gICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZWFkaW5nID0gKGFzeW5jICgpID0+IHtcbiAgICAgIC8qKiBAdHlwZSB7TWFuaWZlc3REYXRhfSAqL1xuICAgICAgbGV0IGRhdGE7XG4gICAgICBsZXQgaXNOZXdGaWxlID0gZmFsc2U7XG4gICAgICBhd2FpdCB0aGlzLl9zZXRNYW5pZmVzdFBhdGgoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgUmVhZGluZyAke3RoaXMuX21hbmlmZXN0UGF0aH0uLi5gKTtcbiAgICAgICAgY29uc3QgeWFtbCA9IGF3YWl0IGZzLnJlYWRGaWxlKHRoaXMuX21hbmlmZXN0UGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgZGF0YSA9IFlBTUwucGFyc2UoeWFtbCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgIGRhdGEgPSBfLmNsb25lRGVlcChJTklUSUFMX01BTklGRVNUX0RBVEEpO1xuICAgICAgICAgIGlzTmV3RmlsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21hbmlmZXN0UGF0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgQXBwaXVtIGhhZCB0cm91YmxlIGxvYWRpbmcgdGhlIGV4dGVuc2lvbiBpbnN0YWxsYXRpb24gYCArXG4gICAgICAgICAgICAgICAgYGNhY2hlIGZpbGUgKCR7dGhpcy5fbWFuaWZlc3RQYXRofSkuIEl0IG1heSBiZSBpbnZhbGlkIFlBTUwuIFNwZWNpZmljIGVycm9yOiAke2Vyci5tZXNzYWdlfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgIGBBcHBpdW0gZW5jb3VudGVyZWQgYW4gdW5rbm93biBwcm9ibGVtLiBTcGVjaWZpYyBlcnJvcjogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG4gICAgICBsZXQgaW5zdGFsbGVkRXh0ZW5zaW9uc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGlmIChcbiAgICAgICAgYXdhaXQgZW52Lmhhc0FwcGl1bURlcGVuZGVuY3kodGhpcy5hcHBpdW1Ib21lKSAmJlxuICAgICAgICAoYXdhaXQgcGFja2FnZURpZENoYW5nZSh0aGlzLmFwcGl1bUhvbWUpKVxuICAgICAgKSB7XG4gICAgICAgIGluc3RhbGxlZEV4dGVuc2lvbnNDaGFuZ2VkID0gYXdhaXQgdGhpcy5zeW5jV2l0aEluc3RhbGxlZEV4dGVuc2lvbnMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTmV3RmlsZSB8fCBpbnN0YWxsZWRFeHRlbnNpb25zQ2hhbmdlZCkge1xuICAgICAgICBhd2FpdCB0aGlzLndyaXRlKCk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fcmVhZGluZztcbiAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLl9yZWFkaW5nID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHtAbGluayBNYW5pZmVzdC5fbWFuaWZlc3RQYXRofSBpcyBzZXQuXG4gICAqXG4gICAqIENyZWF0ZXMgdGhlIGRpcmVjdG9yeSBpZiBuZWNlc3NhcnkuXG4gICAqIEBwcml2YXRlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHN0cmluZz59XG4gICAqL1xuICBhc3luYyBfc2V0TWFuaWZlc3RQYXRoICgpIHtcbiAgICBpZiAoIXRoaXMuX21hbmlmZXN0UGF0aCkge1xuICAgICAgdGhpcy5fbWFuaWZlc3RQYXRoID0gYXdhaXQgZW52LnJlc29sdmVNYW5pZmVzdFBhdGgodGhpcy5fYXBwaXVtSG9tZSk7XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHBhdGgucmVsYXRpdmUodGhpcy5fYXBwaXVtSG9tZSwgdGhpcy5fbWFuaWZlc3RQYXRoKS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBNaXNtYXRjaCBiZXR3ZWVuIGxvY2F0aW9uIG9mIEFQUElVTV9IT01FIGFuZCBtYW5pZmVzdCBmaWxlLiBBUFBJVU1fSE9NRTogJHt0aGlzLmFwcGl1bUhvbWV9LCBtYW5pZmVzdCBmaWxlOiAke3RoaXMuX21hbmlmZXN0UGF0aH1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIHRoZSBkYXRhIGlmIGl0IG5lZWQgcyB3cml0aW5nLlxuICAgKlxuICAgKiBJZiB0aGUgYHNjaGVtYVJldmAgcHJvcCBuZWVkcyB1cGRhdGluZywgdGhlIGZpbGUgd2lsbCBiZSB3cml0dGVuLlxuICAgKlxuICAgKiBAdG9kbyBJZiB0aGlzIGJlY29tZXMgdG9vIG11Y2ggb2YgYSBib3R0bGVuZWNrLCB0aHJvdHRsZSBpdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IFdoZXRoZXIgdGhlIGRhdGEgd2FzIHdyaXR0ZW5cbiAgICovXG4gIGFzeW5jIHdyaXRlICgpIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykge1xuICAgICAgcmV0dXJuIHRoaXMuX3dyaXRpbmc7XG4gICAgfVxuICAgIHRoaXMuX3dyaXRpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5fc2V0TWFuaWZlc3RQYXRoKCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmcy5ta2RpcnAocGF0aC5kaXJuYW1lKHRoaXMuX21hbmlmZXN0UGF0aCkpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwaXVtIGNvdWxkIG5vdCBjcmVhdGUgdGhlIGRpcmVjdG9yeSBmb3IgdGhlIG1hbmlmZXN0IGZpbGU6ICR7cGF0aC5kaXJuYW1lKFxuICAgICAgICAgICAgdGhpcy5fbWFuaWZlc3RQYXRoLFxuICAgICAgICAgICl9LiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKFxuICAgICAgICAgIHRoaXMuX21hbmlmZXN0UGF0aCxcbiAgICAgICAgICBZQU1MLnN0cmluZ2lmeSh0aGlzLl9kYXRhKSxcbiAgICAgICAgICAndXRmOCcsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQXBwaXVtIGNvdWxkIG5vdCB3cml0ZSB0byBtYW5pZmVzdCBhdCAke3RoaXMuX21hbmlmZXN0UGF0aH0gdXNpbmcgQVBQSVVNX0hPTUUgJHt0aGlzLl9hcHBpdW1Ib21lfS4gYCArXG4gICAgICAgICAgICBgUGxlYXNlIGVuc3VyZSBpdCBpcyB3cml0YWJsZS4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fd3JpdGluZztcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fd3JpdGluZyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBzdHJpbmcgcmVmZXJyaW5nIHRvIGEgZHJpdmVyICh0eXBpY2FsbHkgYXMgYSBrZXkgb3IgdHlwZSBzdHJpbmcpXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcycpLkRyaXZlclR5cGV9IERyaXZlclR5cGVcbiAqL1xuXG4vKipcbiAqIFR5cGUgb2YgdGhlIHN0cmluZyByZWZlcnJpbmcgdG8gYSBwbHVnaW4gKHR5cGljYWxseSBhcyBhIGtleSBvciB0eXBlIHN0cmluZylcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzJykuUGx1Z2luVHlwZX0gUGx1Z2luVHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgU3luY1dpdGhJbnN0YWxsZWRFeHRlbnNpb25zT3B0c1xuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZXB0aExpbWl0XSAtIE1heGltdW0gZGVwdGggdG8gcmVjdXJzZSBpbnRvIHN1YmRpcmVjdG9yaWVzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi90eXBlcy9hcHBpdW0tbWFuaWZlc3QnKS5NYW5pZmVzdERhdGF9IE1hbmlmZXN0RGF0YVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBwaXVtLW1hbmlmZXN0JykuSW50ZXJuYWxNZXRhZGF0YX0gSW50ZXJuYWxNZXRhZGF0YVxuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2V4dGVybmFsLW1hbmlmZXN0JykuRXh0UGFja2FnZUpzb248VD59IEV4dFBhY2thZ2VKc29uXG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBwaXVtLW1hbmlmZXN0JykuRXh0TWFuaWZlc3Q8VD59IEV4dE1hbmlmZXN0XG4gKi9cblxuLyoqXG4gKiBAdGVtcGxhdGUgVFxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMvYXBwaXVtLW1hbmlmZXN0JykuRXh0UmVjb3JkPFQ+fSBFeHRSZWNvcmRcbiAqL1xuXG4vKipcbiAqIEVpdGhlciBgZHJpdmVyYCBvciBgcGx1Z2luYCByblxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vLi4vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cblxuIl19
@@ -1,11 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  export { readConfigFile } from "./config-file";
3
- export type ParsedArgs = import('../types/cli').ParsedArgs;
4
- export type PartialArgs = import('../types/cli').PartialArgs;
5
3
  export type DriverType = import('../types').DriverType;
6
4
  export type PluginType = import('../types').PluginType;
7
- export type DriverClass = import('../types/extension').DriverClass;
8
- export type PluginClass = import('../types/extension').PluginClass;
5
+ export type DriverClass = import('../types').DriverClass;
6
+ export type PluginClass = import('../types').PluginClass;
7
+ export type WithServerSubcommand = import('../types').WithServerSubcommand;
9
8
  /**
10
9
  * Literally an empty object
11
10
  */
@@ -18,16 +17,19 @@ export type ServerInitData = {
18
17
  /**
19
18
  * - The parsed arguments
20
19
  */
21
- parsedArgs: ParsedArgs;
20
+ parsedArgs: import('../types').ParsedArgs;
22
21
  };
23
22
  export type ServerInitResult = ServerInitData & import('./extension').ExtensionConfigs;
23
+ export type Args<T = import("../types").WithServerSubcommand> = import('../types').Args<T>;
24
+ export type ParsedArgs<T = import("../types").WithServerSubcommand> = import('../types').ParsedArgs<T>;
24
25
  /**
25
26
  * Initializes Appium's config. Starts server if appropriate and resolves the
26
27
  * server instance if so; otherwise resolves w/ `undefined`.
27
- * @param {PartialArgs} [args] - Arguments from CLI or otherwise
28
- * @returns {Promise<import('http').Server|undefined>}
28
+ * @template [T=WithServerSubcommand]
29
+ * @param {Args<T>} [args] - Arguments from CLI or otherwise
30
+ * @returns {Promise<import('@appium/types').AppiumServer|undefined>}
29
31
  */
30
- export function main(args?: import("../types").PartialArgs | undefined): Promise<import('http').Server | undefined>;
32
+ export function main<T = import("../types").WithServerSubcommand>(args?: Args<T> | undefined): Promise<import('@appium/types').AppiumServer | undefined>;
31
33
  /**
32
34
  * Initializes Appium, but does not start the server.
33
35
  *
@@ -35,7 +37,8 @@ export function main(args?: import("../types").PartialArgs | undefined): Promise
35
37
  *
36
38
  * If `args` contains a non-empty `subcommand` which is not `server`, this function will return an empty object.
37
39
  *
38
- * @param {PartialArgs} [args] - Partial args (progammatic usage only)
40
+ * @template [T=WithServerSubcommand]
41
+ * @param {Args<T>} [args] - Partial args (progammatic usage only)
39
42
  * @returns {Promise<ServerInitResult | ExtCommandInitResult>}
40
43
  * @example
41
44
  * import {init, getSchema} from 'appium';
@@ -43,7 +46,7 @@ export function main(args?: import("../types").PartialArgs | undefined): Promise
43
46
  * await init(options);
44
47
  * const schema = getSchema(); // entire config schema including plugins and drivers
45
48
  */
46
- export function init(args?: import("../types").PartialArgs | undefined): Promise<ServerInitResult | ExtCommandInitResult>;
49
+ export function init<T = import("../types").WithServerSubcommand>(args?: Args<T> | undefined): Promise<ServerInitResult | ExtCommandInitResult>;
47
50
  export const resolveAppiumHome: ((cwd?: string | undefined) => Promise<string>) & _.MemoizedFunction;
48
51
  import { AppiumDriver } from "./appium";
49
52
  import _ from "lodash";
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../lib/main.js"],"names":[],"mappings":";;yBAqVa,OAAO,cAAc,EAAE,UAAU;0BAIjC,OAAO,cAAc,EAAE,WAAW;yBAClC,OAAO,UAAU,EAAE,UAAU;yBAC7B,OAAO,UAAU,EAAE,UAAU;0BAC7B,OAAO,oBAAoB,EAAE,WAAW;0BACxC,OAAO,oBAAoB,EAAE,WAAW;;;;mCAKvC,EAAE;;;;;kBAKF,YAAY;;;;gBACZ,UAAU;;+BAIX,cAAc,GAAG,OAAO,aAAa,EAAE,gBAAgB;AA7HpE;;;;;GAKG;AACH,yEAFa,QAAQ,OAAO,MAAM,EAAE,MAAM,GAAC,SAAS,CAAC,CAmFpD;AArMD;;;;;;;;;;;;;;GAcG;AACH,yEAPa,QAAQ,gBAAgB,GAAG,oBAAoB,CAAC,CAoG5D"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../lib/main.js"],"names":[],"mappings":";;yBA6Va,OAAO,UAAU,EAAE,UAAU;yBAC7B,OAAO,UAAU,EAAE,UAAU;0BAC7B,OAAO,UAAU,EAAE,WAAW;0BAC9B,OAAO,UAAU,EAAE,WAAW;mCAC9B,OAAO,UAAU,EAAE,oBAAoB;;;;mCAKtC,EAAE;;;;;kBAKF,YAAY;;;;gBACZ,OAAO,UAAU,EAAE,UAAU;;+BAI9B,cAAc,GAAG,OAAO,aAAa,EAAE,gBAAgB;gEAKvD,OAAO,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;sEAK1B,OAAO,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;AApI7C;;;;;;GAMG;AACH,+FAFa,QAAQ,OAAO,eAAe,EAAE,YAAY,GAAC,SAAS,CAAC,CAmFnE;AAjMD;;;;;;;;;;;;;;;GAeG;AACH,+FAPa,QAAQ,gBAAgB,GAAG,oBAAoB,CAAC,CA8F5D"}
package/build/lib/main.js CHANGED
@@ -147,9 +147,17 @@ function getServerUpdaters(driverClasses, pluginClasses) {
147
147
  }
148
148
 
149
149
  function getExtraMethodMap(driverClasses, pluginClasses) {
150
- return [...driverClasses, ...pluginClasses].reduce((map, klass) => ({ ...map,
151
- ...klass.newMethodMap
152
- }), {});
150
+ return [...driverClasses, ...pluginClasses].reduce((map, klass) => {
151
+ var _klass$newMethodMap;
152
+
153
+ return { ...map,
154
+ ...((_klass$newMethodMap = klass.newMethodMap) !== null && _klass$newMethodMap !== void 0 ? _klass$newMethodMap : {})
155
+ };
156
+ }, {});
157
+ }
158
+
159
+ function areServerCommandArgs(args) {
160
+ return args.subcommand === _constants.SERVER_SUBCOMMAND;
153
161
  }
154
162
 
155
163
  async function init(args) {
@@ -162,9 +170,7 @@ async function init(args) {
162
170
  } = await (0, _extension2.loadExtensions)(appiumHome);
163
171
  const parser = (0, _parser.getParser)();
164
172
  let throwInsteadOfExit = false;
165
- let preConfigParsedArgs;
166
- let parsedArgs;
167
- let defaults = {};
173
+ let preConfigArgs;
168
174
 
169
175
  if (args) {
170
176
  var _args$subcommand;
@@ -174,14 +180,14 @@ async function init(args) {
174
180
  delete args.throwInsteadOfExit;
175
181
  }
176
182
 
177
- preConfigParsedArgs = { ...args,
183
+ preConfigArgs = { ...args,
178
184
  subcommand: (_args$subcommand = args.subcommand) !== null && _args$subcommand !== void 0 ? _args$subcommand : _constants.SERVER_SUBCOMMAND
179
185
  };
180
186
  } else {
181
- preConfigParsedArgs = parser.parseArgs();
187
+ preConfigArgs = parser.parseArgs();
182
188
  }
183
189
 
184
- const configResult = await (0, _configFile.readConfigFile)(preConfigParsedArgs.configFile);
190
+ const configResult = await (0, _configFile.readConfigFile)(preConfigArgs.configFile);
185
191
 
186
192
  if (!_lodash.default.isEmpty(configResult.errors)) {
187
193
  var _configResult$reason;
@@ -189,58 +195,59 @@ async function init(args) {
189
195
  throw new Error(`Errors in config file ${configResult.filepath}:\n ${(_configResult$reason = configResult.reason) !== null && _configResult$reason !== void 0 ? _configResult$reason : configResult.errors}`);
190
196
  }
191
197
 
192
- if (preConfigParsedArgs.subcommand === _constants.SERVER_SUBCOMMAND) {
193
- var _configResult$config;
194
-
195
- defaults = (0, _schema.getDefaultsForSchema)(false);
196
- parsedArgs = _lodash.default.defaultsDeep(preConfigParsedArgs, (_configResult$config = configResult.config) === null || _configResult$config === void 0 ? void 0 : _configResult$config.server, defaults);
197
-
198
- if (preConfigParsedArgs.showConfig) {
199
- (0, _config.showConfig)((0, _config.getNonDefaultServerArgs)(preConfigParsedArgs), configResult, defaults, parsedArgs);
198
+ if (!areServerCommandArgs(preConfigArgs)) {
199
+ if (preConfigArgs.subcommand === _constants.DRIVER_TYPE) {
200
+ await (0, _extension.runExtensionCommand)(preConfigArgs, driverConfig);
200
201
  return {};
201
202
  }
202
- } else {
203
- parsedArgs = preConfigParsedArgs;
204
- }
205
203
 
206
- await (0, _logsink.init)(parsedArgs);
204
+ if (preConfigArgs.subcommand === _constants.PLUGIN_TYPE) {
205
+ await (0, _extension.runExtensionCommand)(preConfigArgs, pluginConfig);
206
+ return {};
207
+ }
207
208
 
208
- if (parsedArgs.subcommand === _constants.DRIVER_TYPE) {
209
- await (0, _extension.runExtensionCommand)(parsedArgs, driverConfig);
210
209
  return {};
211
- }
210
+ } else {
211
+ var _configResult$config;
212
212
 
213
- if (parsedArgs.subcommand === _constants.PLUGIN_TYPE) {
214
- await (0, _extension.runExtensionCommand)(parsedArgs, pluginConfig);
215
- return {};
216
- }
213
+ const defaults = (0, _schema.getDefaultsForSchema)(false);
217
214
 
218
- if (parsedArgs.logFilters) {
219
- const {
220
- issues,
221
- rules
222
- } = await _support.logger.loadSecureValuesPreprocessingRules(parsedArgs.logFilters);
215
+ const serverArgs = _lodash.default.defaultsDeep(preConfigArgs, (_configResult$config = configResult.config) === null || _configResult$config === void 0 ? void 0 : _configResult$config.server, defaults);
223
216
 
224
- if (!_lodash.default.isEmpty(issues)) {
225
- throw new Error(`The log filtering rules config '${parsedArgs.logFilters}' has issues: ` + JSON.stringify(issues, null, 2));
217
+ if (preConfigArgs.showConfig) {
218
+ (0, _config.showConfig)((0, _config.getNonDefaultServerArgs)(preConfigArgs), configResult, defaults, serverArgs);
219
+ return {};
226
220
  }
227
221
 
228
- if (_lodash.default.isEmpty(rules)) {
229
- _logger.default.warn(`Found no log filtering rules in '${parsedArgs.logFilters}'. Is that expected?`);
230
- } else {
231
- _logger.default.info(`Loaded ${_support.util.pluralize('filtering rule', rules.length, true)} from '${parsedArgs.logFilters}'`);
222
+ await (0, _logsink.init)(serverArgs);
223
+
224
+ if (serverArgs.logFilters) {
225
+ const {
226
+ issues,
227
+ rules
228
+ } = await _support.logger.loadSecureValuesPreprocessingRules(serverArgs.logFilters);
229
+
230
+ if (!_lodash.default.isEmpty(issues)) {
231
+ throw new Error(`The log filtering rules config '${serverArgs.logFilters}' has issues: ` + JSON.stringify(issues, null, 2));
232
+ }
233
+
234
+ if (_lodash.default.isEmpty(rules)) {
235
+ _logger.default.warn(`Found no log filtering rules in '${serverArgs.logFilters}'. Is that expected?`);
236
+ } else {
237
+ _logger.default.info(`Loaded ${_support.util.pluralize('filtering rule', rules.length, true)} from '${serverArgs.logFilters}'`);
238
+ }
232
239
  }
233
- }
234
240
 
235
- const appiumDriver = new _appium.AppiumDriver(parsedArgs);
236
- appiumDriver.driverConfig = driverConfig;
237
- await preflightChecks(parsedArgs, throwInsteadOfExit);
238
- return {
239
- appiumDriver,
240
- parsedArgs,
241
- driverConfig,
242
- pluginConfig
243
- };
241
+ const appiumDriver = new _appium.AppiumDriver(serverArgs);
242
+ appiumDriver.driverConfig = driverConfig;
243
+ await preflightChecks(serverArgs, throwInsteadOfExit);
244
+ return {
245
+ appiumDriver,
246
+ parsedArgs: serverArgs,
247
+ driverConfig,
248
+ pluginConfig
249
+ };
250
+ }
244
251
  }
245
252
 
246
253
  async function main(args) {
@@ -331,4 +338,4 @@ async function main(args) {
331
338
  if (require.main === module) {
332
339
  (0, _asyncbox.asyncify)(main);
333
340
  }
334
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9tYWluLmpzIl0sIm5hbWVzIjpbInJlc29sdmVBcHBpdW1Ib21lIiwiZW52IiwicHJlZmxpZ2h0Q2hlY2tzIiwiYXJncyIsInRocm93SW5zdGVhZE9mRXhpdCIsImxvbmdTdGFja3RyYWNlIiwicmVxdWlyZSIsImFzeW5jX3RyYWNlX2xpbWl0Iiwic2hvd0J1aWxkSW5mbyIsInByb2Nlc3MiLCJleGl0IiwidG1wRGlyIiwiZXJyIiwibG9nZ2VyIiwiZXJyb3IiLCJtZXNzYWdlIiwicmVkIiwibG9nTm9uRGVmYXVsdEFyZ3NXYXJuaW5nIiwiaW5mbyIsImxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nIiwiY2FwcyIsImxvZ1N0YXJ0dXBJbmZvIiwid2VsY29tZSIsIkFQUElVTV9WRVIiLCJhcHBpdW1SZXYiLCJzaG93QXJncyIsIl8iLCJzaXplIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJsb2dTZXJ2ZXJQb3J0IiwiYWRkcmVzcyIsInBvcnQiLCJsb2dNZXNzYWdlIiwiZ2V0U2VydmVyVXBkYXRlcnMiLCJkcml2ZXJDbGFzc2VzIiwicGx1Z2luQ2xhc3NlcyIsImNvbXBhY3QiLCJtYXAiLCJnZXRFeHRyYU1ldGhvZE1hcCIsInJlZHVjZSIsImtsYXNzIiwibmV3TWV0aG9kTWFwIiwiaW5pdCIsImFwcGl1bUhvbWUiLCJkcml2ZXJDb25maWciLCJwbHVnaW5Db25maWciLCJwYXJzZXIiLCJwcmVDb25maWdQYXJzZWRBcmdzIiwicGFyc2VkQXJncyIsImRlZmF1bHRzIiwic3ViY29tbWFuZCIsIlNFUlZFUl9TVUJDT01NQU5EIiwicGFyc2VBcmdzIiwiY29uZmlnUmVzdWx0IiwiY29uZmlnRmlsZSIsImVycm9ycyIsIkVycm9yIiwiZmlsZXBhdGgiLCJyZWFzb24iLCJkZWZhdWx0c0RlZXAiLCJjb25maWciLCJzZXJ2ZXIiLCJzaG93Q29uZmlnIiwiRFJJVkVSX1RZUEUiLCJQTFVHSU5fVFlQRSIsImxvZ0ZpbHRlcnMiLCJpc3N1ZXMiLCJydWxlcyIsImxvZ0ZhY3RvcnkiLCJsb2FkU2VjdXJlVmFsdWVzUHJlcHJvY2Vzc2luZ1J1bGVzIiwiSlNPTiIsInN0cmluZ2lmeSIsIndhcm4iLCJ1dGlsIiwicGx1cmFsaXplIiwibGVuZ3RoIiwiYXBwaXVtRHJpdmVyIiwiQXBwaXVtRHJpdmVyIiwibWFpbiIsInVzZVBsdWdpbnMiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJ1c2VEcml2ZXJzIiwic2VydmVyVXBkYXRlcnMiLCJleHRyYU1ldGhvZE1hcCIsInNlcnZlck9wdHMiLCJob3N0bmFtZSIsImFsbG93Q29ycyIsImJhc2VQYXRoIiwia2VlcEFsaXZlVGltZW91dCIsImRlYnVnIiwic3RhY2siLCJub2RlY29uZmlnIiwiY2xvc2UiLCJzaWduYWwiLCJvbmNlIiwib25TaWduYWwiLCJkZWxldGVBbGxTZXNzaW9ucyIsImZvcmNlIiwiZSIsInByaW50IiwicCIsInBsdWdpbk5hbWUiLCJtb2R1bGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU07QUFBQ0EsRUFBQUE7QUFBRCxJQUFzQkMsWUFBNUI7OztBQU9BLGVBQWVDLGVBQWYsQ0FBZ0NDLElBQWhDLEVBQXNDQyxrQkFBa0IsR0FBRyxLQUEzRCxFQUFrRTtBQUNoRSxNQUFJO0FBQ0Y7O0FBQ0EsUUFBSUQsSUFBSSxDQUFDRSxjQUFULEVBQXlCO0FBQ3ZCQyxNQUFBQSxPQUFPLENBQUMsVUFBRCxDQUFQLENBQW9CQyxpQkFBcEIsR0FBd0MsQ0FBQyxDQUF6QztBQUNEOztBQUNELFFBQUlKLElBQUksQ0FBQ0ssYUFBVCxFQUF3QjtBQUN0QixZQUFNLDRCQUFOO0FBQ0FDLE1BQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFhLENB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IGxvZ3NpbmtJbml0IH0gZnJvbSAnLi9sb2dzaW5rJzsgLy8gdGhpcyBpbXBvcnQgbmVlZHMgdG8gY29tZSBmaXJzdCBzaW5jZSBpdCBzZXRzIHVwIGdsb2JhbCBucG1sb2dcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInOyAvLyBsb2dnZXIgbmVlZHMgdG8gcmVtYWluIHNlY29uZFxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIGFzIG1ha2VSb3V0ZXIsIHNlcnZlciBhcyBiYXNlU2VydmVyIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBsb2dnZXIgYXMgbG9nRmFjdG9yeSwgdXRpbCwgZW52IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEFwcGl1bURyaXZlciB9IGZyb20gJy4vYXBwaXVtJztcbmltcG9ydCB7IHJ1bkV4dGVuc2lvbkNvbW1hbmQgfSBmcm9tICcuL2NsaS9leHRlbnNpb24nO1xuaW1wb3J0IHsgZ2V0UGFyc2VyIH0gZnJvbSAnLi9jbGkvcGFyc2VyJztcbmltcG9ydCB7IEFQUElVTV9WRVIsIGNoZWNrTm9kZU9rLCBnZXRHaXRSZXYsIGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzLCBzaG93Q29uZmlnLCBzaG93QnVpbGRJbmZvLCB2YWxpZGF0ZVRtcERpciwgd2Fybk5vZGVEZXByZWNhdGlvbnMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyByZWFkQ29uZmlnRmlsZSB9IGZyb20gJy4vY29uZmlnLWZpbGUnO1xuaW1wb3J0IHsgbG9hZEV4dGVuc2lvbnMsIGdldEFjdGl2ZVBsdWdpbnMsIGdldEFjdGl2ZURyaXZlcnMgfSBmcm9tICcuL2V4dGVuc2lvbic7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUsIFNFUlZFUl9TVUJDT01NQU5EIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHJlZ2lzdGVyTm9kZSBmcm9tICcuL2dyaWQtcmVnaXN0ZXInO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdHNGb3JTY2hlbWEsIHZhbGlkYXRlIH0gZnJvbSAnLi9zY2hlbWEvc2NoZW1hJztcbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3Qge3Jlc29sdmVBcHBpdW1Ib21lfSA9IGVudjtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtQYXJzZWRBcmdzfSBhcmdzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0aHJvd0luc3RlYWRPZkV4aXRdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodENoZWNrcyAoYXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0ID0gZmFsc2UpIHtcbiAgdHJ5IHtcbiAgICBjaGVja05vZGVPaygpO1xuICAgIGlmIChhcmdzLmxvbmdTdGFja3RyYWNlKSB7XG4gICAgICByZXF1aXJlKCdsb25nam9obicpLmFzeW5jX3RyYWNlX2xpbWl0ID0gLTE7XG4gICAgfVxuICAgIGlmIChhcmdzLnNob3dCdWlsZEluZm8pIHtcbiAgICAgIGF3YWl0IHNob3dCdWlsZEluZm8oKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG4gICAgd2Fybk5vZGVEZXByZWNhdGlvbnMoKTtcblxuICAgIHZhbGlkYXRlKGFyZ3MpO1xuXG4gICAgaWYgKGFyZ3MudG1wRGlyKSB7XG4gICAgICBhd2FpdCB2YWxpZGF0ZVRtcERpcihhcmdzLnRtcERpcik7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyLm1lc3NhZ2UucmVkKTtcbiAgICBpZiAodGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtQYXJ0aWFsPFBhcnNlZEFyZ3M+fSBhcmdzXG4gKi9cbmZ1bmN0aW9uIGxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyAoYXJncykge1xuICBsb2dnZXIuaW5mbygnTm9uLWRlZmF1bHQgc2VydmVyIGFyZ3M6Jyk7XG4gIGluc3BlY3QoYXJncyk7XG59XG5cbmZ1bmN0aW9uIGxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nIChjYXBzKSB7XG4gIGxvZ2dlci5pbmZvKCdEZWZhdWx0IGNhcGFiaWxpdGllcywgd2hpY2ggd2lsbCBiZSBhZGRlZCB0byBlYWNoIHJlcXVlc3QgJyArXG4gICAgICAgICAgICAgICd1bmxlc3Mgb3ZlcnJpZGRlbiBieSBkZXNpcmVkIGNhcGFiaWxpdGllczonKTtcbiAgaW5zcGVjdChjYXBzKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1BhcnNlZEFyZ3N9IGFyZ3NcbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9nU3RhcnR1cEluZm8gKGFyZ3MpIHtcbiAgbGV0IHdlbGNvbWUgPSBgV2VsY29tZSB0byBBcHBpdW0gdiR7QVBQSVVNX1ZFUn1gO1xuICBsZXQgYXBwaXVtUmV2ID0gYXdhaXQgZ2V0R2l0UmV2KCk7XG4gIGlmIChhcHBpdW1SZXYpIHtcbiAgICB3ZWxjb21lICs9IGAgKFJFViAke2FwcGl1bVJldn0pYDtcbiAgfVxuICBsb2dnZXIuaW5mbyh3ZWxjb21lKTtcblxuICBsZXQgc2hvd0FyZ3MgPSBnZXROb25EZWZhdWx0U2VydmVyQXJncyhhcmdzKTtcbiAgaWYgKF8uc2l6ZShzaG93QXJncykpIHtcbiAgICBsb2dOb25EZWZhdWx0QXJnc1dhcm5pbmcoc2hvd0FyZ3MpO1xuICB9XG4gIGlmICghXy5pc0VtcHR5KGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcykpIHtcbiAgICBsb2dEZWZhdWx0Q2FwYWJpbGl0aWVzV2FybmluZyhhcmdzLmRlZmF1bHRDYXBhYmlsaXRpZXMpO1xuICB9XG4gIC8vIFRPRE86IGJyaW5nIGJhY2sgbG9nbGV2ZWwgcmVwb3J0aW5nIGJlbG93IG9uY2UgbG9nZ2VyIGlzIGZsdXNoZWQgb3V0XG4gIC8vIGxvZ2dlci5pbmZvKCdDb25zb2xlIExvZ0xldmVsOiAnICsgbG9nZ2VyLnRyYW5zcG9ydHMuY29uc29sZS5sZXZlbCk7XG4gIC8vIGlmIChsb2dnZXIudHJhbnNwb3J0cy5maWxlKSB7XG4gIC8vICAgbG9nZ2VyLmluZm8oJ0ZpbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5maWxlLmxldmVsKTtcbiAgLy8gfVxufVxuXG4vKipcbiAqIExvZ3MgdGhlIGFkZHJlc3MgYW5kIHBvcnQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBhZGRyZXNzIC0gQWRkcmVzc1xuICogQHBhcmFtIHtudW1iZXJ9IHBvcnQgLSBQb3J0XG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gbG9nU2VydmVyUG9ydCAoYWRkcmVzcywgcG9ydCkge1xuICBsZXQgbG9nTWVzc2FnZSA9IGBBcHBpdW0gUkVTVCBodHRwIGludGVyZmFjZSBsaXN0ZW5lciBzdGFydGVkIG9uIGAgK1xuICAgICAgICAgICAgICAgICAgIGAke2FkZHJlc3N9OiR7cG9ydH1gO1xuICBsb2dnZXIuaW5mbyhsb2dNZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBHZXRzIGEgbGlzdCBvZiBgdXBkYXRlU2VydmVyYCBmdW5jdGlvbnMgZnJvbSBhbGwgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHtEcml2ZXJDbGFzc1tdfSBkcml2ZXJDbGFzc2VzXG4gKiBAcGFyYW0ge1BsdWdpbkNsYXNzW119IHBsdWdpbkNsYXNzZXNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vYmFzZS1kcml2ZXIvbGliL2Jhc2Vkcml2ZXIvZHJpdmVyJykuVXBkYXRlU2VydmVyQ2FsbGJhY2tbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2VydmVyVXBkYXRlcnMgKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpIHtcbiAgcmV0dXJuIF8uY29tcGFjdChfLm1hcChbLi4uZHJpdmVyQ2xhc3NlcywgLi4ucGx1Z2luQ2xhc3Nlc10sICd1cGRhdGVTZXJ2ZXInKSk7XG59XG5cbi8qKlxuICogTWFrZXMgYSBiaWcgYE1ldGhvZE1hcGAgZnJvbSBhbGwgdGhlIGxpdHRsZSBgTWV0aG9kTWFwYHMgaW4gdGhlIGV4dGVuc2lvbnNcbiAqIEBwYXJhbSB7RHJpdmVyQ2xhc3NbXX0gZHJpdmVyQ2xhc3Nlc1xuICogQHBhcmFtIHtQbHVnaW5DbGFzc1tdfSBwbHVnaW5DbGFzc2VzXG4gKiBAcmV0dXJucyB7aW1wb3J0KCdAYXBwaXVtL3R5cGVzJykuTWV0aG9kTWFwfVxuICovXG5mdW5jdGlvbiBnZXRFeHRyYU1ldGhvZE1hcCAoZHJpdmVyQ2xhc3NlcywgcGx1Z2luQ2xhc3Nlcykge1xuICByZXR1cm4gWy4uLmRyaXZlckNsYXNzZXMsIC4uLnBsdWdpbkNsYXNzZXNdLnJlZHVjZShcbiAgICAobWFwLCBrbGFzcykgPT4gKHsuLi5tYXAsIC4uLmtsYXNzLm5ld01ldGhvZE1hcH0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgQXBwaXVtLCBidXQgZG9lcyBub3Qgc3RhcnQgdGhlIHNlcnZlci5cbiAqXG4gKiBVc2UgdGhpcyB0byBnZXQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2NoZW1hLlxuICpcbiAqIElmIGBhcmdzYCBjb250YWlucyBhIG5vbi1lbXB0eSBgc3ViY29tbWFuZGAgd2hpY2ggaXMgbm90IGBzZXJ2ZXJgLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge1BhcnRpYWxBcmdzfSBbYXJnc10gLSBQYXJ0aWFsIGFyZ3MgKHByb2dhbW1hdGljIHVzYWdlIG9ubHkpXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxTZXJ2ZXJJbml0UmVzdWx0IHwgRXh0Q29tbWFuZEluaXRSZXN1bHQ+fVxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7aW5pdCwgZ2V0U2NoZW1hfSBmcm9tICdhcHBpdW0nO1xuICogY29uc3Qgb3B0aW9ucyA9IHt9OyAvLyBjb25maWcgb2JqZWN0XG4gKiBhd2FpdCBpbml0KG9wdGlvbnMpO1xuICogY29uc3Qgc2NoZW1hID0gZ2V0U2NoZW1hKCk7IC8vIGVudGlyZSBjb25maWcgc2NoZW1hIGluY2x1ZGluZyBwbHVnaW5zIGFuZCBkcml2ZXJzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluaXQgKGFyZ3MpIHtcbiAgY29uc3QgYXBwaXVtSG9tZSA9IGFyZ3M/LmFwcGl1bUhvbWUgPz8gYXdhaXQgcmVzb2x2ZUFwcGl1bUhvbWUoKTtcblxuICBjb25zdCB7ZHJpdmVyQ29uZmlnLCBwbHVnaW5Db25maWd9ID0gYXdhaXQgbG9hZEV4dGVuc2lvbnMoYXBwaXVtSG9tZSk7XG5cbiAgY29uc3QgcGFyc2VyID0gZ2V0UGFyc2VyKCk7XG4gIGxldCB0aHJvd0luc3RlYWRPZkV4aXQgPSBmYWxzZTtcbiAgLyoqIEB0eXBlIHtQYXJzZWRBcmdzfSAqL1xuICBsZXQgcHJlQ29uZmlnUGFyc2VkQXJncztcbiAgLyoqIEB0eXBlIHtQYXJzZWRBcmdzfSAqL1xuICBsZXQgcGFyc2VkQXJncztcbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBkZWZpbml0aW9uIChpbnN0ZWFkIG9mIGRlY2xhcmF0aW9uKSBiZWNhdXNlIFRTIGNhbid0IGZpZ3VyZSBvdXRcbiAgICogdGhlIHZhbHVlIHdpbGwgYmUgZGVmaW5lZCB3aGVuIGl0J3MgdXNlZC5cbiAgICogQHR5cGUge1JldHVyblR5cGU8Z2V0RGVmYXVsdHNGb3JTY2hlbWE+fVxuICAgKi9cbiAgbGV0IGRlZmF1bHRzID0ge307XG4gIGlmIChhcmdzKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIGNvbnRhaW5pbmcgcGFja2FnZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgYXMgYSBDTEkgcHJvY2VzcyxcbiAgICAvLyB0aGF0IHBhY2thZ2UgbWlnaHQgbm90IGFwcHJlY2lhdGUgdXMgY2FsbGluZyAncHJvY2Vzcy5leGl0JyB3aWxseS1cbiAgICAvLyBuaWxseSwgc28gZ2l2ZSBpdCB0aGUgb3B0aW9uIHRvIGhhdmUgdXMgdGhyb3cgaW5zdGVhZCBvZiBleGl0XG4gICAgaWYgKGFyZ3MudGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvd0luc3RlYWRPZkV4aXQgPSB0cnVlO1xuICAgICAgLy8gYnV0IHJlbW92ZSBpdCBzaW5jZSBpdCdzIG5vdCBhIHJlYWwgc2VydmVyIGFyZyBwZXIgc2VcbiAgICAgIGRlbGV0ZSBhcmdzLnRocm93SW5zdGVhZE9mRXhpdDtcbiAgICB9XG4gICAgcHJlQ29uZmlnUGFyc2VkQXJncyA9IC8qKiBAdHlwZSB7UGFyc2VkQXJnc30gKi8oey4uLmFyZ3MsIHN1YmNvbW1hbmQ6IGFyZ3Muc3ViY29tbWFuZCA/PyBTRVJWRVJfU1VCQ09NTUFORH0pO1xuICB9IGVsc2Uge1xuICAgIC8vIG90aGVyd2lzZSBwYXJzZSBmcm9tIENMSVxuICAgIHByZUNvbmZpZ1BhcnNlZEFyZ3MgPSBwYXJzZXIucGFyc2VBcmdzKCk7XG4gIH1cblxuICBjb25zdCBjb25maWdSZXN1bHQgPSBhd2FpdCByZWFkQ29uZmlnRmlsZShwcmVDb25maWdQYXJzZWRBcmdzLmNvbmZpZ0ZpbGUpO1xuXG4gIGlmICghXy5pc0VtcHR5KGNvbmZpZ1Jlc3VsdC5lcnJvcnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvcnMgaW4gY29uZmlnIGZpbGUgJHtjb25maWdSZXN1bHQuZmlsZXBhdGh9OlxcbiAke2NvbmZpZ1Jlc3VsdC5yZWFzb24gPz8gY29uZmlnUmVzdWx0LmVycm9yc31gKTtcbiAgfVxuXG4gIC8vIG1lcmdlIGNvbmZpZyBhbmQgYXBwbHkgZGVmYXVsdHMuXG4gIC8vIHRoZSBvcmRlciBvZiBwcmVjZW5kZWNlIGlzOlxuICAvLyAxLiBjb21tYW5kIGxpbmUgYXJnc1xuICAvLyAyLiBjb25maWcgZmlsZVxuICAvLyAzLiBkZWZhdWx0cyBmcm9tIGNvbmZpZyBmaWxlLlxuICBpZiAocHJlQ29uZmlnUGFyc2VkQXJncy5zdWJjb21tYW5kID09PSBTRVJWRVJfU1VCQ09NTUFORCkge1xuICAgIGRlZmF1bHRzID0gZ2V0RGVmYXVsdHNGb3JTY2hlbWEoZmFsc2UpO1xuXG4gICAgcGFyc2VkQXJncyA9IF8uZGVmYXVsdHNEZWVwKFxuICAgICAgcHJlQ29uZmlnUGFyc2VkQXJncyxcbiAgICAgIGNvbmZpZ1Jlc3VsdC5jb25maWc/LnNlcnZlcixcbiAgICAgIGRlZmF1bHRzXG4gICAgKTtcblxuICAgIGlmIChwcmVDb25maWdQYXJzZWRBcmdzLnNob3dDb25maWcpIHtcbiAgICAgIHNob3dDb25maWcoZ2V0Tm9uRGVmYXVsdFNlcnZlckFyZ3MocHJlQ29uZmlnUGFyc2VkQXJncyksIGNvbmZpZ1Jlc3VsdCwgZGVmYXVsdHMsIHBhcnNlZEFyZ3MpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICB9IGVsc2Uge1xuICAgIHBhcnNlZEFyZ3MgPSBwcmVDb25maWdQYXJzZWRBcmdzO1xuICB9XG5cbiAgYXdhaXQgbG9nc2lua0luaXQocGFyc2VkQXJncyk7XG5cbiAgLy8gaWYgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCB0aGUgJ2RyaXZlcicgQ0xJLCBkb24ndCBydW4gdGhlIG5vcm1hbCBzZXJ2ZXIsXG4gIC8vIGJ1dCBpbnN0ZWFkIHBhc3MgY29udHJvbCB0byB0aGUgZHJpdmVyIENMSVxuICBpZiAocGFyc2VkQXJncy5zdWJjb21tYW5kID09PSBEUklWRVJfVFlQRSkge1xuICAgIGF3YWl0IHJ1bkV4dGVuc2lvbkNvbW1hbmQocGFyc2VkQXJncywgZHJpdmVyQ29uZmlnKTtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgaWYgKHBhcnNlZEFyZ3Muc3ViY29tbWFuZCA9PT0gUExVR0lOX1RZUEUpIHtcbiAgICBhd2FpdCBydW5FeHRlbnNpb25Db21tYW5kKHBhcnNlZEFyZ3MsIHBsdWdpbkNvbmZpZyk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgaWYgKHBhcnNlZEFyZ3MubG9nRmlsdGVycykge1xuICAgIGNvbnN0IHtpc3N1ZXMsIHJ1bGVzfSA9IGF3YWl0IGxvZ0ZhY3RvcnkubG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyhwYXJzZWRBcmdzLmxvZ0ZpbHRlcnMpO1xuICAgIGlmICghXy5pc0VtcHR5KGlzc3VlcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGxvZyBmaWx0ZXJpbmcgcnVsZXMgY29uZmlnICcke3BhcnNlZEFyZ3MubG9nRmlsdGVyc30nIGhhcyBpc3N1ZXM6IGAgK1xuICAgICAgICBKU09OLnN0cmluZ2lmeShpc3N1ZXMsIG51bGwsIDIpKTtcbiAgICB9XG4gICAgaWYgKF8uaXNFbXB0eShydWxlcykpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBGb3VuZCBubyBsb2cgZmlsdGVyaW5nIHJ1bGVzIGluICcke3BhcnNlZEFyZ3MubG9nRmlsdGVyc30nLiBJcyB0aGF0IGV4cGVjdGVkP2ApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuaW5mbyhgTG9hZGVkICR7dXRpbC5wbHVyYWxpemUoJ2ZpbHRlcmluZyBydWxlJywgcnVsZXMubGVuZ3RoLCB0cnVlKX0gZnJvbSAnJHtwYXJzZWRBcmdzLmxvZ0ZpbHRlcnN9J2ApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFwcGl1bURyaXZlciA9IG5ldyBBcHBpdW1Ecml2ZXIocGFyc2VkQXJncyk7XG4gIC8vIHNldCB0aGUgY29uZmlnIG9uIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIG1hdGNoIGRyaXZlcnMgdG8gY2Fwc1xuICBhcHBpdW1Ecml2ZXIuZHJpdmVyQ29uZmlnID0gZHJpdmVyQ29uZmlnO1xuICBhd2FpdCBwcmVmbGlnaHRDaGVja3MocGFyc2VkQXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0KTtcblxuICByZXR1cm4gLyoqIEB0eXBlIHtTZXJ2ZXJJbml0UmVzdWx0fSAqLyh7YXBwaXVtRHJpdmVyLCBwYXJzZWRBcmdzLCBkcml2ZXJDb25maWcsIHBsdWdpbkNvbmZpZ30pO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIEFwcGl1bSdzIGNvbmZpZy4gIFN0YXJ0cyBzZXJ2ZXIgaWYgYXBwcm9wcmlhdGUgYW5kIHJlc29sdmVzIHRoZVxuICogc2VydmVyIGluc3RhbmNlIGlmIHNvOyBvdGhlcndpc2UgcmVzb2x2ZXMgdy8gYHVuZGVmaW5lZGAuXG4gKiBAcGFyYW0ge1BhcnRpYWxBcmdzfSBbYXJnc10gLSBBcmd1bWVudHMgZnJvbSBDTEkgb3Igb3RoZXJ3aXNlXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoJ2h0dHAnKS5TZXJ2ZXJ8dW5kZWZpbmVkPn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWFpbiAoYXJncykge1xuICBjb25zdCB7YXBwaXVtRHJpdmVyLCBwYXJzZWRBcmdzLCBwbHVnaW5Db25maWcsIGRyaXZlckNvbmZpZ30gPSAvKiogQHR5cGUge1NlcnZlckluaXRSZXN1bHR9ICovKGF3YWl0IGluaXQoYXJncykpO1xuXG4gIGlmICghYXBwaXVtRHJpdmVyIHx8ICFwYXJzZWRBcmdzIHx8ICFwbHVnaW5Db25maWcgfHwgIWRyaXZlckNvbmZpZykge1xuICAgIC8vIGlmIHRoaXMgYnJhbmNoIGlzIHRha2VuLCB3ZSd2ZSBydW4gYSBkaWZmZXJlbnQgc3ViY29tbWFuZCwgc28gdGhlcmUncyBub3RoaW5nXG4gICAgLy8gbGVmdCB0byBkbyBoZXJlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBsdWdpbkNsYXNzZXMgPSBnZXRBY3RpdmVQbHVnaW5zKHBsdWdpbkNvbmZpZywgcGFyc2VkQXJncy51c2VQbHVnaW5zKTtcbiAgLy8gc2V0IHRoZSBhY3RpdmUgcGx1Z2lucyBvbiB0aGUgdW1icmVsbGEgZHJpdmVyIHNvIGl0IGNhbiB1c2UgdGhlbSBmb3IgY29tbWFuZHNcbiAgYXBwaXVtRHJpdmVyLnBsdWdpbkNsYXNzZXMgPSBwbHVnaW5DbGFzc2VzO1xuXG4gIGF3YWl0IGxvZ1N0YXJ0dXBJbmZvKHBhcnNlZEFyZ3MpO1xuICBsZXQgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uID0gbWFrZVJvdXRlcihhcHBpdW1Ecml2ZXIpO1xuXG4gIGNvbnN0IGRyaXZlckNsYXNzZXMgPSBnZXRBY3RpdmVEcml2ZXJzKGRyaXZlckNvbmZpZywgcGFyc2VkQXJncy51c2VEcml2ZXJzKTtcbiAgY29uc3Qgc2VydmVyVXBkYXRlcnMgPSBnZXRTZXJ2ZXJVcGRhdGVycyhkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKTtcbiAgY29uc3QgZXh0cmFNZXRob2RNYXAgPSBnZXRFeHRyYU1ldGhvZE1hcChkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKTtcblxuICBjb25zdCBzZXJ2ZXJPcHRzID0ge1xuICAgIHJvdXRlQ29uZmlndXJpbmdGdW5jdGlvbixcbiAgICBwb3J0OiBwYXJzZWRBcmdzLnBvcnQsXG4gICAgaG9zdG5hbWU6IHBhcnNlZEFyZ3MuYWRkcmVzcyxcbiAgICBhbGxvd0NvcnM6IHBhcnNlZEFyZ3MuYWxsb3dDb3JzLFxuICAgIGJhc2VQYXRoOiBwYXJzZWRBcmdzLmJhc2VQYXRoLFxuICAgIHNlcnZlclVwZGF0ZXJzLFxuICAgIGV4dHJhTWV0aG9kTWFwLFxuICB9O1xuICBpZiAocGFyc2VkQXJncy5rZWVwQWxpdmVUaW1lb3V0KSB7XG4gICAgc2VydmVyT3B0cy5rZWVwQWxpdmVUaW1lb3V0ID0gcGFyc2VkQXJncy5rZWVwQWxpdmVUaW1lb3V0ICogMTAwMDtcbiAgfVxuICBsZXQgc2VydmVyO1xuICB0cnkge1xuICAgIHNlcnZlciA9IGF3YWl0IGJhc2VTZXJ2ZXIoc2VydmVyT3B0cyk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5lcnJvcihgQ291bGQgbm90IGNvbmZpZ3VyZSBBcHBpdW0gc2VydmVyLiBJdCdzIHBvc3NpYmxlIHRoYXQgYSBkcml2ZXIgb3IgcGx1Z2luIHRyaWVkIGAgK1xuICAgICAgICAgICAgICAgICBgdG8gdXBkYXRlIHRoZSBzZXJ2ZXIgYW5kIGZhaWxlZC4gT3JpZ2luYWwgZXJyb3I6ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGVyci5zdGFjayk7XG4gICAgcmV0dXJuIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxuXG4gIGlmIChwYXJzZWRBcmdzLmFsbG93Q29ycykge1xuICAgIGxvZ2dlci53YXJuKCdZb3UgaGF2ZSBlbmFibGVkIENPUlMgcmVxdWVzdHMgZnJvbSBhbnkgaG9zdC4gQmUgY2FyZWZ1bCBub3QgJyArXG4gICAgICAgICAgICAgICAgJ3RvIHZpc2l0IHNpdGVzIHdoaWNoIGNvdWxkIG1hbGljaW91c2x5IHRyeSB0byBzdGFydCBBcHBpdW0gJyArXG4gICAgICAgICAgICAgICAgJ3Nlc3Npb25zIG9uIHlvdXIgbWFjaGluZScpO1xuICB9XG4gIGFwcGl1bURyaXZlci5zZXJ2ZXIgPSBzZXJ2ZXI7XG4gIHRyeSB7XG4gICAgLy8gY29uZmlndXJlIGFzIG5vZGUgb24gZ3JpZCwgaWYgbmVjZXNzYXJ5XG4gICAgLy8gZmFsc3kgdmFsdWVzIHNob3VsZCBub3QgY2F1c2UgdGhpcyB0byBydW5cbiAgICBpZiAocGFyc2VkQXJncy5ub2RlY29uZmlnKSB7XG4gICAgICBhd2FpdCByZWdpc3Rlck5vZGUocGFyc2VkQXJncy5ub2RlY29uZmlnLCBwYXJzZWRBcmdzLmFkZHJlc3MsIHBhcnNlZEFyZ3MucG9ydCwgcGFyc2VkQXJncy5iYXNlUGF0aCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cblxuICBmb3IgKGNvbnN0IHNpZ25hbCBvZiBbJ1NJR0lOVCcsICdTSUdURVJNJ10pIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCBhc3luYyBmdW5jdGlvbiBvblNpZ25hbCAoKSB7XG4gICAgICBsb2dnZXIuaW5mbyhgUmVjZWl2ZWQgJHtzaWduYWx9IC0gc2h1dHRpbmcgZG93bmApO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYXBwaXVtRHJpdmVyLmRlbGV0ZUFsbFNlc3Npb25zKHtcbiAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgICByZWFzb246IGBUaGUgcHJvY2VzcyBoYXMgcmVjZWl2ZWQgJHtzaWduYWx9IHNpZ25hbGAsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBzZXJ2ZXIuY2xvc2UoKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybihlKTtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9nU2VydmVyUG9ydChwYXJzZWRBcmdzLmFkZHJlc3MsIHBhcnNlZEFyZ3MucG9ydCk7XG4gIGRyaXZlckNvbmZpZy5wcmludCgpO1xuICBwbHVnaW5Db25maWcucHJpbnQocGx1Z2luQ2xhc3Nlcy5tYXAoKHApID0+IHAucGx1Z2luTmFtZSkpO1xuXG4gIHJldHVybiBzZXJ2ZXI7XG59XG5cbi8vIE5PVEU6IHRoaXMgaXMgaGVyZSBmb3IgYmFja3dhcmRzIGNvbXBhdCBmb3IgYW55IHNjcmlwdHMgcmVmZXJlbmNpbmcgYG1haW4uanNgIGRpcmVjdGx5XG4vLyAobW9yZSBzcGVjaWZpY2FsbHksIGBidWlsZC9saWIvbWFpbi5qc2ApXG4vLyB0aGUgZXhlY3V0YWJsZSBpcyBub3cgYC4uL2luZGV4LmpzYCwgc28gdGhhdCBtb2R1bGUgd2lsbCB0eXBpY2FsbHkgYmUgYHJlcXVpcmUubWFpbmAuXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgYXN5bmNpZnkobWFpbik7XG59XG5cbi8vIGV2ZXJ5dGhpbmcgYmVsb3cgaGVyZSBpcyBpbnRlbmRlZCB0byBiZSBhIHB1YmxpYyBBUEkuXG5leHBvcnQgeyByZWFkQ29uZmlnRmlsZSB9IGZyb20gJy4vY29uZmlnLWZpbGUnO1xuZXhwb3J0IHsgZmluYWxpemVTY2hlbWEsIGdldFNjaGVtYSwgdmFsaWRhdGUgfSBmcm9tICcuL3NjaGVtYS9zY2hlbWEnO1xuZXhwb3J0IHsgbWFpbiwgaW5pdCwgcmVzb2x2ZUFwcGl1bUhvbWUgfTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi90eXBlcy9jbGknKS5QYXJzZWRBcmdzfSBQYXJzZWRBcmdzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi90eXBlcy9jbGknKS5QYXJ0aWFsQXJnc30gUGFydGlhbEFyZ3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL3R5cGVzJykuRHJpdmVyVHlwZX0gRHJpdmVyVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vdHlwZXMnKS5QbHVnaW5UeXBlfSBQbHVnaW5UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi90eXBlcy9leHRlbnNpb24nKS5Ecml2ZXJDbGFzc30gRHJpdmVyQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL3R5cGVzL2V4dGVuc2lvbicpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICovXG5cbi8qKlxuICogTGl0ZXJhbGx5IGFuIGVtcHR5IG9iamVjdFxuICogQHR5cGVkZWYgeyB7fSB9IEV4dENvbW1hbmRJbml0UmVzdWx0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBTZXJ2ZXJJbml0RGF0YVxuICogQHByb3BlcnR5IHtBcHBpdW1Ecml2ZXJ9IGFwcGl1bURyaXZlciAtIFRoZSBBcHBpdW0gZHJpdmVyXG4gKiBAcHJvcGVydHkge1BhcnNlZEFyZ3N9IHBhcnNlZEFyZ3MgLSBUaGUgcGFyc2VkIGFyZ3VtZW50c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1NlcnZlckluaXREYXRhICYgaW1wb3J0KCcuL2V4dGVuc2lvbicpLkV4dGVuc2lvbkNvbmZpZ3N9IFNlcnZlckluaXRSZXN1bHRcbiAqL1xuIl19
341
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9tYWluLmpzIl0sIm5hbWVzIjpbInJlc29sdmVBcHBpdW1Ib21lIiwiZW52IiwicHJlZmxpZ2h0Q2hlY2tzIiwiYXJncyIsInRocm93SW5zdGVhZE9mRXhpdCIsImxvbmdTdGFja3RyYWNlIiwicmVxdWlyZSIsImFzeW5jX3RyYWNlX2xpbWl0Iiwic2hvd0J1aWxkSW5mbyIsInByb2Nlc3MiLCJleGl0IiwidG1wRGlyIiwiZXJyIiwibG9nZ2VyIiwiZXJyb3IiLCJtZXNzYWdlIiwicmVkIiwibG9nTm9uRGVmYXVsdEFyZ3NXYXJuaW5nIiwiaW5mbyIsImxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nIiwiY2FwcyIsImxvZ1N0YXJ0dXBJbmZvIiwid2VsY29tZSIsIkFQUElVTV9WRVIiLCJhcHBpdW1SZXYiLCJzaG93QXJncyIsIl8iLCJzaXplIiwiaXNFbXB0eSIsImRlZmF1bHRDYXBhYmlsaXRpZXMiLCJsb2dTZXJ2ZXJQb3J0IiwiYWRkcmVzcyIsInBvcnQiLCJsb2dNZXNzYWdlIiwiZ2V0U2VydmVyVXBkYXRlcnMiLCJkcml2ZXJDbGFzc2VzIiwicGx1Z2luQ2xhc3NlcyIsImNvbXBhY3QiLCJtYXAiLCJnZXRFeHRyYU1ldGhvZE1hcCIsInJlZHVjZSIsImtsYXNzIiwibmV3TWV0aG9kTWFwIiwiYXJlU2VydmVyQ29tbWFuZEFyZ3MiLCJzdWJjb21tYW5kIiwiU0VSVkVSX1NVQkNPTU1BTkQiLCJpbml0IiwiYXBwaXVtSG9tZSIsImRyaXZlckNvbmZpZyIsInBsdWdpbkNvbmZpZyIsInBhcnNlciIsInByZUNvbmZpZ0FyZ3MiLCJwYXJzZUFyZ3MiLCJjb25maWdSZXN1bHQiLCJjb25maWdGaWxlIiwiZXJyb3JzIiwiRXJyb3IiLCJmaWxlcGF0aCIsInJlYXNvbiIsIkRSSVZFUl9UWVBFIiwiUExVR0lOX1RZUEUiLCJkZWZhdWx0cyIsInNlcnZlckFyZ3MiLCJkZWZhdWx0c0RlZXAiLCJjb25maWciLCJzZXJ2ZXIiLCJzaG93Q29uZmlnIiwibG9nRmlsdGVycyIsImlzc3VlcyIsInJ1bGVzIiwibG9nRmFjdG9yeSIsImxvYWRTZWN1cmVWYWx1ZXNQcmVwcm9jZXNzaW5nUnVsZXMiLCJKU09OIiwic3RyaW5naWZ5Iiwid2FybiIsInV0aWwiLCJwbHVyYWxpemUiLCJsZW5ndGgiLCJhcHBpdW1Ecml2ZXIiLCJBcHBpdW1Ecml2ZXIiLCJwYXJzZWRBcmdzIiwibWFpbiIsInVzZVBsdWdpbnMiLCJyb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24iLCJ1c2VEcml2ZXJzIiwic2VydmVyVXBkYXRlcnMiLCJleHRyYU1ldGhvZE1hcCIsInNlcnZlck9wdHMiLCJob3N0bmFtZSIsImFsbG93Q29ycyIsImJhc2VQYXRoIiwia2VlcEFsaXZlVGltZW91dCIsImRlYnVnIiwic3RhY2siLCJub2RlY29uZmlnIiwiY2xvc2UiLCJzaWduYWwiLCJvbmNlIiwib25TaWduYWwiLCJkZWxldGVBbGxTZXNzaW9ucyIsImZvcmNlIiwiZSIsInByaW50IiwicCIsInBsdWdpbk5hbWUiLCJtb2R1bGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBLE1BQU07QUFBQ0EsRUFBQUE7QUFBRCxJQUFzQkMsWUFBNUI7OztBQU9BLGVBQWVDLGVBQWYsQ0FBZ0NDLElBQWhDLEVBQXNDQyxrQkFBa0IsR0FBRyxLQUEzRCxFQUFrRTtBQUNoRSxNQUFJO0FBQ0Y7O0FBQ0EsUUFBSUQsSUFBSSxDQUFDRSxjQUFULEVBQXlCO0FBQ3ZCQyxNQUFBQSxPQUFPLENBQUMsVUFBRCxDQUFQLENBQW9CQyxpQkFBcEIsR0FBd0MsQ0FBQyxDQUF6QztBQUNEOztBQUNELFFBQUlKLElBQUksQ0FBQ0ssYUFBVCxFQUF3QjtBQUN0QixZQUFNLDRCQUFOO0FBQ0FD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QkFBU3hCLElBQVQ7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuXG5pbXBvcnQgeyBpbml0IGFzIGxvZ3NpbmtJbml0IH0gZnJvbSAnLi9sb2dzaW5rJzsgLy8gdGhpcyBpbXBvcnQgbmVlZHMgdG8gY29tZSBmaXJzdCBzaW5jZSBpdCBzZXRzIHVwIGdsb2JhbCBucG1sb2dcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi9sb2dnZXInOyAvLyBsb2dnZXIgbmVlZHMgdG8gcmVtYWluIHNlY29uZFxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uIGFzIG1ha2VSb3V0ZXIsIHNlcnZlciBhcyBiYXNlU2VydmVyIH0gZnJvbSAnQGFwcGl1bS9iYXNlLWRyaXZlcic7XG5pbXBvcnQgeyBsb2dnZXIgYXMgbG9nRmFjdG9yeSwgdXRpbCwgZW52IH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCB7IGFzeW5jaWZ5IH0gZnJvbSAnYXN5bmNib3gnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IEFwcGl1bURyaXZlciB9IGZyb20gJy4vYXBwaXVtJztcbmltcG9ydCB7IHJ1bkV4dGVuc2lvbkNvbW1hbmQgfSBmcm9tICcuL2NsaS9leHRlbnNpb24nO1xuaW1wb3J0IHsgZ2V0UGFyc2VyIH0gZnJvbSAnLi9jbGkvcGFyc2VyJztcbmltcG9ydCB7IEFQUElVTV9WRVIsIGNoZWNrTm9kZU9rLCBnZXRHaXRSZXYsIGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzLCBzaG93Q29uZmlnLCBzaG93QnVpbGRJbmZvLCB2YWxpZGF0ZVRtcERpciwgd2Fybk5vZGVEZXByZWNhdGlvbnMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyByZWFkQ29uZmlnRmlsZSB9IGZyb20gJy4vY29uZmlnLWZpbGUnO1xuaW1wb3J0IHsgbG9hZEV4dGVuc2lvbnMsIGdldEFjdGl2ZVBsdWdpbnMsIGdldEFjdGl2ZURyaXZlcnMgfSBmcm9tICcuL2V4dGVuc2lvbic7XG5pbXBvcnQgeyBEUklWRVJfVFlQRSwgUExVR0lOX1RZUEUsIFNFUlZFUl9TVUJDT01NQU5EIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHJlZ2lzdGVyTm9kZSBmcm9tICcuL2dyaWQtcmVnaXN0ZXInO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdHNGb3JTY2hlbWEsIHZhbGlkYXRlIH0gZnJvbSAnLi9zY2hlbWEvc2NoZW1hJztcbmltcG9ydCB7IGluc3BlY3QgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3Qge3Jlc29sdmVBcHBpdW1Ib21lfSA9IGVudjtcblxuLyoqXG4gKlxuICogQHBhcmFtIHtQYXJzZWRBcmdzfSBhcmdzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0aHJvd0luc3RlYWRPZkV4aXRdXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByZWZsaWdodENoZWNrcyAoYXJncywgdGhyb3dJbnN0ZWFkT2ZFeGl0ID0gZmFsc2UpIHtcbiAgdHJ5IHtcbiAgICBjaGVja05vZGVPaygpO1xuICAgIGlmIChhcmdzLmxvbmdTdGFja3RyYWNlKSB7XG4gICAgICByZXF1aXJlKCdsb25nam9obicpLmFzeW5jX3RyYWNlX2xpbWl0ID0gLTE7XG4gICAgfVxuICAgIGlmIChhcmdzLnNob3dCdWlsZEluZm8pIHtcbiAgICAgIGF3YWl0IHNob3dCdWlsZEluZm8oKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG4gICAgd2Fybk5vZGVEZXByZWNhdGlvbnMoKTtcblxuICAgIHZhbGlkYXRlKGFyZ3MpO1xuXG4gICAgaWYgKGFyZ3MudG1wRGlyKSB7XG4gICAgICBhd2FpdCB2YWxpZGF0ZVRtcERpcihhcmdzLnRtcERpcik7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyLm1lc3NhZ2UucmVkKTtcbiAgICBpZiAodGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcmdzfSBhcmdzXG4gKi9cbmZ1bmN0aW9uIGxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyAoYXJncykge1xuICBsb2dnZXIuaW5mbygnTm9uLWRlZmF1bHQgc2VydmVyIGFyZ3M6Jyk7XG4gIGluc3BlY3QoYXJncyk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtBcmdzWydkZWZhdWx0Q2FwYWJpbGl0aWVzJ119IGNhcHNcbiAqL1xuZnVuY3Rpb24gbG9nRGVmYXVsdENhcGFiaWxpdGllc1dhcm5pbmcgKGNhcHMpIHtcbiAgbG9nZ2VyLmluZm8oJ0RlZmF1bHQgY2FwYWJpbGl0aWVzLCB3aGljaCB3aWxsIGJlIGFkZGVkIHRvIGVhY2ggcmVxdWVzdCAnICtcbiAgICAgICAgICAgICAgJ3VubGVzcyBvdmVycmlkZGVuIGJ5IGRlc2lyZWQgY2FwYWJpbGl0aWVzOicpO1xuICBpbnNwZWN0KGNhcHMpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UGFyc2VkQXJnc30gYXJnc1xuICovXG5hc3luYyBmdW5jdGlvbiBsb2dTdGFydHVwSW5mbyAoYXJncykge1xuICBsZXQgd2VsY29tZSA9IGBXZWxjb21lIHRvIEFwcGl1bSB2JHtBUFBJVU1fVkVSfWA7XG4gIGxldCBhcHBpdW1SZXYgPSBhd2FpdCBnZXRHaXRSZXYoKTtcbiAgaWYgKGFwcGl1bVJldikge1xuICAgIHdlbGNvbWUgKz0gYCAoUkVWICR7YXBwaXVtUmV2fSlgO1xuICB9XG4gIGxvZ2dlci5pbmZvKHdlbGNvbWUpO1xuXG4gIGxldCBzaG93QXJncyA9IGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzKGFyZ3MpO1xuICBpZiAoXy5zaXplKHNob3dBcmdzKSkge1xuICAgIGxvZ05vbkRlZmF1bHRBcmdzV2FybmluZyhzaG93QXJncyk7XG4gIH1cbiAgaWYgKCFfLmlzRW1wdHkoYXJncy5kZWZhdWx0Q2FwYWJpbGl0aWVzKSkge1xuICAgIGxvZ0RlZmF1bHRDYXBhYmlsaXRpZXNXYXJuaW5nKGFyZ3MuZGVmYXVsdENhcGFiaWxpdGllcyk7XG4gIH1cbiAgLy8gVE9ETzogYnJpbmcgYmFjayBsb2dsZXZlbCByZXBvcnRpbmcgYmVsb3cgb25jZSBsb2dnZXIgaXMgZmx1c2hlZCBvdXRcbiAgLy8gbG9nZ2VyLmluZm8oJ0NvbnNvbGUgTG9nTGV2ZWw6ICcgKyBsb2dnZXIudHJhbnNwb3J0cy5jb25zb2xlLmxldmVsKTtcbiAgLy8gaWYgKGxvZ2dlci50cmFuc3BvcnRzLmZpbGUpIHtcbiAgLy8gICBsb2dnZXIuaW5mbygnRmlsZSBMb2dMZXZlbDogJyArIGxvZ2dlci50cmFuc3BvcnRzLmZpbGUubGV2ZWwpO1xuICAvLyB9XG59XG5cbi8qKlxuICogTG9ncyB0aGUgYWRkcmVzcyBhbmQgcG9ydCB0aGUgc2VydmVyIGlzIGxpc3RlbmluZyBvblxuICogQHBhcmFtIHtzdHJpbmd9IGFkZHJlc3MgLSBBZGRyZXNzXG4gKiBAcGFyYW0ge251bWJlcn0gcG9ydCAtIFBvcnRcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBsb2dTZXJ2ZXJQb3J0IChhZGRyZXNzLCBwb3J0KSB7XG4gIGxldCBsb2dNZXNzYWdlID0gYEFwcGl1bSBSRVNUIGh0dHAgaW50ZXJmYWNlIGxpc3RlbmVyIHN0YXJ0ZWQgb24gYCArXG4gICAgICAgICAgICAgICAgICAgYCR7YWRkcmVzc306JHtwb3J0fWA7XG4gIGxvZ2dlci5pbmZvKGxvZ01lc3NhZ2UpO1xufVxuXG4vKipcbiAqIEdldHMgYSBsaXN0IG9mIGB1cGRhdGVTZXJ2ZXJgIGZ1bmN0aW9ucyBmcm9tIGFsbCBleHRlbnNpb25zXG4gKiBAcGFyYW0ge0RyaXZlckNsYXNzW119IGRyaXZlckNsYXNzZXNcbiAqIEBwYXJhbSB7UGx1Z2luQ2xhc3NbXX0gcGx1Z2luQ2xhc3Nlc1xuICogQHJldHVybnMge2ltcG9ydCgnQGFwcGl1bS9iYXNlLWRyaXZlci9saWIvYmFzZWRyaXZlci9kcml2ZXInKS5VcGRhdGVTZXJ2ZXJDYWxsYmFja1tdfVxuICovXG5mdW5jdGlvbiBnZXRTZXJ2ZXJVcGRhdGVycyAoZHJpdmVyQ2xhc3NlcywgcGx1Z2luQ2xhc3Nlcykge1xuICByZXR1cm4gXy5jb21wYWN0KF8ubWFwKFsuLi5kcml2ZXJDbGFzc2VzLCAuLi5wbHVnaW5DbGFzc2VzXSwgJ3VwZGF0ZVNlcnZlcicpKTtcbn1cblxuLyoqXG4gKiBNYWtlcyBhIGJpZyBgTWV0aG9kTWFwYCBmcm9tIGFsbCB0aGUgbGl0dGxlIGBNZXRob2RNYXBgcyBpbiB0aGUgZXh0ZW5zaW9uc1xuICogQHBhcmFtIHtEcml2ZXJDbGFzc1tdfSBkcml2ZXJDbGFzc2VzXG4gKiBAcGFyYW0ge1BsdWdpbkNsYXNzW119IHBsdWdpbkNsYXNzZXNcbiAqIEByZXR1cm5zIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5NZXRob2RNYXB9XG4gKi9cbmZ1bmN0aW9uIGdldEV4dHJhTWV0aG9kTWFwIChkcml2ZXJDbGFzc2VzLCBwbHVnaW5DbGFzc2VzKSB7XG4gIHJldHVybiBbLi4uZHJpdmVyQ2xhc3NlcywgLi4ucGx1Z2luQ2xhc3Nlc10ucmVkdWNlKFxuICAgIChtYXAsIGtsYXNzKSA9PiAoey4uLm1hcCwgLi4uLyoqIEB0eXBlIHtEcml2ZXJDbGFzc30gKi8oa2xhc3MpLm5ld01ldGhvZE1hcCA/PyB7fX0pLFxuICAgIHt9XG4gICk7XG59XG5cbi8qKlxuICogQHRlbXBsYXRlIFtUPVdpdGhTZXJ2ZXJTdWJjb21tYW5kXVxuICogQHBhcmFtIHtBcmdzPFQ+fSBhcmdzXG4gKiBAcmV0dXJucyB7YXJncyBpcyBBcmdzPFdpdGhTZXJ2ZXJTdWJjb21tYW5kPn1cbiAqL1xuZnVuY3Rpb24gYXJlU2VydmVyQ29tbWFuZEFyZ3MgKGFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3Muc3ViY29tbWFuZCA9PT0gU0VSVkVSX1NVQkNPTU1BTkQ7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgQXBwaXVtLCBidXQgZG9lcyBub3Qgc3RhcnQgdGhlIHNlcnZlci5cbiAqXG4gKiBVc2UgdGhpcyB0byBnZXQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gc2NoZW1hLlxuICpcbiAqIElmIGBhcmdzYCBjb250YWlucyBhIG5vbi1lbXB0eSBgc3ViY29tbWFuZGAgd2hpY2ggaXMgbm90IGBzZXJ2ZXJgLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cbiAqXG4gKiBAdGVtcGxhdGUgW1Q9V2l0aFNlcnZlclN1YmNvbW1hbmRdXG4gKiBAcGFyYW0ge0FyZ3M8VD59IFthcmdzXSAtIFBhcnRpYWwgYXJncyAocHJvZ2FtbWF0aWMgdXNhZ2Ugb25seSlcbiAqIEByZXR1cm5zIHtQcm9taXNlPFNlcnZlckluaXRSZXN1bHQgfCBFeHRDb21tYW5kSW5pdFJlc3VsdD59XG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IHtpbml0LCBnZXRTY2hlbWF9IGZyb20gJ2FwcGl1bSc7XG4gKiBjb25zdCBvcHRpb25zID0ge307IC8vIGNvbmZpZyBvYmplY3RcbiAqIGF3YWl0IGluaXQob3B0aW9ucyk7XG4gKiBjb25zdCBzY2hlbWEgPSBnZXRTY2hlbWEoKTsgLy8gZW50aXJlIGNvbmZpZyBzY2hlbWEgaW5jbHVkaW5nIHBsdWdpbnMgYW5kIGRyaXZlcnNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5pdCAoYXJncykge1xuICBjb25zdCBhcHBpdW1Ib21lID0gYXJncz8uYXBwaXVtSG9tZSA/PyBhd2FpdCByZXNvbHZlQXBwaXVtSG9tZSgpO1xuXG4gIGNvbnN0IHtkcml2ZXJDb25maWcsIHBsdWdpbkNvbmZpZ30gPSBhd2FpdCBsb2FkRXh0ZW5zaW9ucyhhcHBpdW1Ib21lKTtcblxuICBjb25zdCBwYXJzZXIgPSBnZXRQYXJzZXIoKTtcbiAgbGV0IHRocm93SW5zdGVhZE9mRXhpdCA9IGZhbHNlO1xuICAvKiogQHR5cGUge0FyZ3M8VD59ICovXG4gIGxldCBwcmVDb25maWdBcmdzO1xuXG4gIGlmIChhcmdzKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIGNvbnRhaW5pbmcgcGFja2FnZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgYXMgYSBDTEkgcHJvY2VzcyxcbiAgICAvLyB0aGF0IHBhY2thZ2UgbWlnaHQgbm90IGFwcHJlY2lhdGUgdXMgY2FsbGluZyAncHJvY2Vzcy5leGl0JyB3aWxseS1cbiAgICAvLyBuaWxseSwgc28gZ2l2ZSBpdCB0aGUgb3B0aW9uIHRvIGhhdmUgdXMgdGhyb3cgaW5zdGVhZCBvZiBleGl0XG4gICAgaWYgKGFyZ3MudGhyb3dJbnN0ZWFkT2ZFeGl0KSB7XG4gICAgICB0aHJvd0luc3RlYWRPZkV4aXQgPSB0cnVlO1xuICAgICAgLy8gYnV0IHJlbW92ZSBpdCBzaW5jZSBpdCdzIG5vdCBhIHJlYWwgc2VydmVyIGFyZyBwZXIgc2VcbiAgICAgIGRlbGV0ZSBhcmdzLnRocm93SW5zdGVhZE9mRXhpdDtcbiAgICB9XG4gICAgcHJlQ29uZmlnQXJncyA9IHsuLi5hcmdzLCBzdWJjb21tYW5kOiBhcmdzLnN1YmNvbW1hbmQgPz8gU0VSVkVSX1NVQkNPTU1BTkR9O1xuICB9IGVsc2Uge1xuICAgIC8vIG90aGVyd2lzZSBwYXJzZSBmcm9tIENMSVxuICAgIHByZUNvbmZpZ0FyZ3MgPSAvKiogQHR5cGUge0FyZ3M8VD59ICovKHBhcnNlci5wYXJzZUFyZ3MoKSk7XG4gIH1cblxuICBjb25zdCBjb25maWdSZXN1bHQgPSBhd2FpdCByZWFkQ29uZmlnRmlsZShwcmVDb25maWdBcmdzLmNvbmZpZ0ZpbGUpO1xuXG4gIGlmICghXy5pc0VtcHR5KGNvbmZpZ1Jlc3VsdC5lcnJvcnMpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvcnMgaW4gY29uZmlnIGZpbGUgJHtjb25maWdSZXN1bHQuZmlsZXBhdGh9OlxcbiAke2NvbmZpZ1Jlc3VsdC5yZWFzb24gPz8gY29uZmlnUmVzdWx0LmVycm9yc31gKTtcbiAgfVxuXG4gIC8vIG1lcmdlIGNvbmZpZyBhbmQgYXBwbHkgZGVmYXVsdHMuXG4gIC8vIHRoZSBvcmRlciBvZiBwcmVjZW5kZWNlIGlzOlxuICAvLyAxLiBjb21tYW5kIGxpbmUgYXJnc1xuICAvLyAyLiBjb25maWcgZmlsZVxuICAvLyAzLiBkZWZhdWx0cyBmcm9tIGNvbmZpZyBmaWxlLlxuICBpZiAoIWFyZVNlcnZlckNvbW1hbmRBcmdzKHByZUNvbmZpZ0FyZ3MpKSB7XG5cbiAgICAvLyBpZiB0aGUgdXNlciBoYXMgcmVxdWVzdGVkIHRoZSAnZHJpdmVyJyBDTEksIGRvbid0IHJ1biB0aGUgbm9ybWFsIHNlcnZlcixcbiAgICAvLyBidXQgaW5zdGVhZCBwYXNzIGNvbnRyb2wgdG8gdGhlIGRyaXZlciBDTElcbiAgICBpZiAocHJlQ29uZmlnQXJncy5zdWJjb21tYW5kID09PSBEUklWRVJfVFlQRSkge1xuICAgICAgYXdhaXQgcnVuRXh0ZW5zaW9uQ29tbWFuZChwcmVDb25maWdBcmdzLCBkcml2ZXJDb25maWcpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAocHJlQ29uZmlnQXJncy5zdWJjb21tYW5kID09PSBQTFVHSU5fVFlQRSkge1xuICAgICAgYXdhaXQgcnVuRXh0ZW5zaW9uQ29tbWFuZChwcmVDb25maWdBcmdzLCBwbHVnaW5Db25maWcpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB7fTsgLy8gc2hvdWxkIG5ldmVyIGhhcHBlblxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlZmF1bHRzID0gZ2V0RGVmYXVsdHNGb3JTY2hlbWEoZmFsc2UpO1xuXG4gICAgLyoqIEB0eXBlIHtQYXJzZWRBcmdzfSAqL1xuICAgIGNvbnN0IHNlcnZlckFyZ3MgPSBfLmRlZmF1bHRzRGVlcChcbiAgICAgIHByZUNvbmZpZ0FyZ3MsXG4gICAgICBjb25maWdSZXN1bHQuY29uZmlnPy5zZXJ2ZXIsXG4gICAgICBkZWZhdWx0c1xuICAgICk7XG5cbiAgICBpZiAocHJlQ29uZmlnQXJncy5zaG93Q29uZmlnKSB7XG4gICAgICBzaG93Q29uZmlnKGdldE5vbkRlZmF1bHRTZXJ2ZXJBcmdzKHByZUNvbmZpZ0FyZ3MpLCBjb25maWdSZXN1bHQsIGRlZmF1bHRzLCBzZXJ2ZXJBcmdzKTtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBhd2FpdCBsb2dzaW5rSW5pdChzZXJ2ZXJBcmdzKTtcblxuICAgIGlmIChzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnMpIHtcbiAgICAgIGNvbnN0IHtpc3N1ZXMsIHJ1bGVzfSA9IGF3YWl0IGxvZ0ZhY3RvcnkubG9hZFNlY3VyZVZhbHVlc1ByZXByb2Nlc3NpbmdSdWxlcyhzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnMpO1xuICAgICAgaWYgKCFfLmlzRW1wdHkoaXNzdWVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBsb2cgZmlsdGVyaW5nIHJ1bGVzIGNvbmZpZyAnJHtzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnN9JyBoYXMgaXNzdWVzOiBgICtcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoaXNzdWVzLCBudWxsLCAyKSk7XG4gICAgICB9XG4gICAgICBpZiAoXy5pc0VtcHR5KHJ1bGVzKSkge1xuICAgICAgICBsb2dnZXIud2FybihgRm91bmQgbm8gbG9nIGZpbHRlcmluZyBydWxlcyBpbiAnJHtzZXJ2ZXJBcmdzLmxvZ0ZpbHRlcnN9Jy4gSXMgdGhhdCBleHBlY3RlZD9gKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBMb2FkZWQgJHt1dGlsLnBsdXJhbGl6ZSgnZmlsdGVyaW5nIHJ1bGUnLCBydWxlcy5sZW5ndGgsIHRydWUpfSBmcm9tICcke3NlcnZlckFyZ3MubG9nRmlsdGVyc30nYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXBwaXVtRHJpdmVyID0gbmV3IEFwcGl1bURyaXZlcihzZXJ2ZXJBcmdzKTtcbiAgICAvLyBzZXQgdGhlIGNvbmZpZyBvbiB0aGUgdW1icmVsbGEgZHJpdmVyIHNvIGl0IGNhbiBtYXRjaCBkcml2ZXJzIHRvIGNhcHNcbiAgICBhcHBpdW1Ecml2ZXIuZHJpdmVyQ29uZmlnID0gZHJpdmVyQ29uZmlnO1xuICAgIGF3YWl0IHByZWZsaWdodENoZWNrcyhzZXJ2ZXJBcmdzLCB0aHJvd0luc3RlYWRPZkV4aXQpO1xuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7U2VydmVySW5pdFJlc3VsdH0gKi8oe2FwcGl1bURyaXZlciwgcGFyc2VkQXJnczogc2VydmVyQXJncywgZHJpdmVyQ29uZmlnLCBwbHVnaW5Db25maWd9KTtcbiAgfVxufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIEFwcGl1bSdzIGNvbmZpZy4gIFN0YXJ0cyBzZXJ2ZXIgaWYgYXBwcm9wcmlhdGUgYW5kIHJlc29sdmVzIHRoZVxuICogc2VydmVyIGluc3RhbmNlIGlmIHNvOyBvdGhlcndpc2UgcmVzb2x2ZXMgdy8gYHVuZGVmaW5lZGAuXG4gKiBAdGVtcGxhdGUgW1Q9V2l0aFNlcnZlclN1YmNvbW1hbmRdXG4gKiBAcGFyYW0ge0FyZ3M8VD59IFthcmdzXSAtIEFyZ3VtZW50cyBmcm9tIENMSSBvciBvdGhlcndpc2VcbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydCgnQGFwcGl1bS90eXBlcycpLkFwcGl1bVNlcnZlcnx1bmRlZmluZWQ+fVxuICovXG5hc3luYyBmdW5jdGlvbiBtYWluIChhcmdzKSB7XG4gIGNvbnN0IHthcHBpdW1Ecml2ZXIsIHBhcnNlZEFyZ3MsIHBsdWdpbkNvbmZpZywgZHJpdmVyQ29uZmlnfSA9IC8qKiBAdHlwZSB7U2VydmVySW5pdFJlc3VsdH0gKi8oYXdhaXQgaW5pdChhcmdzKSk7XG5cbiAgaWYgKCFhcHBpdW1Ecml2ZXIgfHwgIXBhcnNlZEFyZ3MgfHwgIXBsdWdpbkNvbmZpZyB8fCAhZHJpdmVyQ29uZmlnKSB7XG4gICAgLy8gaWYgdGhpcyBicmFuY2ggaXMgdGFrZW4sIHdlJ3ZlIHJ1biBhIGRpZmZlcmVudCBzdWJjb21tYW5kLCBzbyB0aGVyZSdzIG5vdGhpbmdcbiAgICAvLyBsZWZ0IHRvIGRvIGhlcmUuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGx1Z2luQ2xhc3NlcyA9IGdldEFjdGl2ZVBsdWdpbnMocGx1Z2luQ29uZmlnLCBwYXJzZWRBcmdzLnVzZVBsdWdpbnMpO1xuICAvLyBzZXQgdGhlIGFjdGl2ZSBwbHVnaW5zIG9uIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIHVzZSB0aGVtIGZvciBjb21tYW5kc1xuICBhcHBpdW1Ecml2ZXIucGx1Z2luQ2xhc3NlcyA9IHBsdWdpbkNsYXNzZXM7XG5cbiAgYXdhaXQgbG9nU3RhcnR1cEluZm8ocGFyc2VkQXJncyk7XG4gIGxldCByb3V0ZUNvbmZpZ3VyaW5nRnVuY3Rpb24gPSBtYWtlUm91dGVyKGFwcGl1bURyaXZlcik7XG5cbiAgY29uc3QgZHJpdmVyQ2xhc3NlcyA9IGdldEFjdGl2ZURyaXZlcnMoZHJpdmVyQ29uZmlnLCBwYXJzZWRBcmdzLnVzZURyaXZlcnMpO1xuICBjb25zdCBzZXJ2ZXJVcGRhdGVycyA9IGdldFNlcnZlclVwZGF0ZXJzKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpO1xuICBjb25zdCBleHRyYU1ldGhvZE1hcCA9IGdldEV4dHJhTWV0aG9kTWFwKGRyaXZlckNsYXNzZXMsIHBsdWdpbkNsYXNzZXMpO1xuXG4gIGNvbnN0IHNlcnZlck9wdHMgPSB7XG4gICAgcm91dGVDb25maWd1cmluZ0Z1bmN0aW9uLFxuICAgIHBvcnQ6IHBhcnNlZEFyZ3MucG9ydCxcbiAgICBob3N0bmFtZTogcGFyc2VkQXJncy5hZGRyZXNzLFxuICAgIGFsbG93Q29yczogcGFyc2VkQXJncy5hbGxvd0NvcnMsXG4gICAgYmFzZVBhdGg6IHBhcnNlZEFyZ3MuYmFzZVBhdGgsXG4gICAgc2VydmVyVXBkYXRlcnMsXG4gICAgZXh0cmFNZXRob2RNYXAsXG4gIH07XG4gIGlmIChwYXJzZWRBcmdzLmtlZXBBbGl2ZVRpbWVvdXQpIHtcbiAgICBzZXJ2ZXJPcHRzLmtlZXBBbGl2ZVRpbWVvdXQgPSBwYXJzZWRBcmdzLmtlZXBBbGl2ZVRpbWVvdXQgKiAxMDAwO1xuICB9XG4gIGxldCBzZXJ2ZXI7XG4gIHRyeSB7XG4gICAgc2VydmVyID0gYXdhaXQgYmFzZVNlcnZlcihzZXJ2ZXJPcHRzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBDb3VsZCBub3QgY29uZmlndXJlIEFwcGl1bSBzZXJ2ZXIuIEl0J3MgcG9zc2libGUgdGhhdCBhIGRyaXZlciBvciBwbHVnaW4gdHJpZWQgYCArXG4gICAgICAgICAgICAgICAgIGB0byB1cGRhdGUgdGhlIHNlcnZlciBhbmQgZmFpbGVkLiBPcmlnaW5hbCBlcnJvcjogJHtlcnIubWVzc2FnZX1gKTtcbiAgICBsb2dnZXIuZGVidWcoZXJyLnN0YWNrKTtcbiAgICByZXR1cm4gcHJvY2Vzcy5leGl0KDEpO1xuICB9XG5cbiAgaWYgKHBhcnNlZEFyZ3MuYWxsb3dDb3JzKSB7XG4gICAgbG9nZ2VyLndhcm4oJ1lvdSBoYXZlIGVuYWJsZWQgQ09SUyByZXF1ZXN0cyBmcm9tIGFueSBob3N0LiBCZSBjYXJlZnVsIG5vdCAnICtcbiAgICAgICAgICAgICAgICAndG8gdmlzaXQgc2l0ZXMgd2hpY2ggY291bGQgbWFsaWNpb3VzbHkgdHJ5IHRvIHN0YXJ0IEFwcGl1bSAnICtcbiAgICAgICAgICAgICAgICAnc2Vzc2lvbnMgb24geW91ciBtYWNoaW5lJyk7XG4gIH1cbiAgYXBwaXVtRHJpdmVyLnNlcnZlciA9IHNlcnZlcjtcbiAgdHJ5IHtcbiAgICAvLyBjb25maWd1cmUgYXMgbm9kZSBvbiBncmlkLCBpZiBuZWNlc3NhcnlcbiAgICAvLyBmYWxzeSB2YWx1ZXMgc2hvdWxkIG5vdCBjYXVzZSB0aGlzIHRvIHJ1blxuICAgIGlmIChwYXJzZWRBcmdzLm5vZGVjb25maWcpIHtcbiAgICAgIGF3YWl0IHJlZ2lzdGVyTm9kZShwYXJzZWRBcmdzLm5vZGVjb25maWcsIHBhcnNlZEFyZ3MuYWRkcmVzcywgcGFyc2VkQXJncy5wb3J0LCBwYXJzZWRBcmdzLmJhc2VQYXRoKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpO1xuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIFsnU0lHSU5UJywgJ1NJR1RFUk0nXSkge1xuICAgIHByb2Nlc3Mub25jZShzaWduYWwsIGFzeW5jIGZ1bmN0aW9uIG9uU2lnbmFsICgpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBSZWNlaXZlZCAke3NpZ25hbH0gLSBzaHV0dGluZyBkb3duYCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhcHBpdW1Ecml2ZXIuZGVsZXRlQWxsU2Vzc2lvbnMoe1xuICAgICAgICAgIGZvcmNlOiB0cnVlLFxuICAgICAgICAgIHJlYXNvbjogYFRoZSBwcm9jZXNzIGhhcyByZWNlaXZlZCAke3NpZ25hbH0gc2lnbmFsYCxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHNlcnZlci5jbG9zZSgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGUpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2dTZXJ2ZXJQb3J0KHBhcnNlZEFyZ3MuYWRkcmVzcywgcGFyc2VkQXJncy5wb3J0KTtcbiAgZHJpdmVyQ29uZmlnLnByaW50KCk7XG4gIHBsdWdpbkNvbmZpZy5wcmludChwbHVnaW5DbGFzc2VzLm1hcCgocCkgPT4gcC5wbHVnaW5OYW1lKSk7XG5cbiAgcmV0dXJuIHNlcnZlcjtcbn1cblxuLy8gTk9URTogdGhpcyBpcyBoZXJlIGZvciBiYWNrd2FyZHMgY29tcGF0IGZvciBhbnkgc2NyaXB0cyByZWZlcmVuY2luZyBgbWFpbi5qc2AgZGlyZWN0bHlcbi8vIChtb3JlIHNwZWNpZmljYWxseSwgYGJ1aWxkL2xpYi9tYWluLmpzYClcbi8vIHRoZSBleGVjdXRhYmxlIGlzIG5vdyBgLi4vaW5kZXguanNgLCBzbyB0aGF0IG1vZHVsZSB3aWxsIHR5cGljYWxseSBiZSBgcmVxdWlyZS5tYWluYC5cbmlmIChyZXF1aXJlLm1haW4gPT09IG1vZHVsZSkge1xuICBhc3luY2lmeShtYWluKTtcbn1cblxuLy8gZXZlcnl0aGluZyBiZWxvdyBoZXJlIGlzIGludGVuZGVkIHRvIGJlIGEgcHVibGljIEFQSS5cbmV4cG9ydCB7IHJlYWRDb25maWdGaWxlIH0gZnJvbSAnLi9jb25maWctZmlsZSc7XG5leHBvcnQgeyBmaW5hbGl6ZVNjaGVtYSwgZ2V0U2NoZW1hLCB2YWxpZGF0ZSB9IGZyb20gJy4vc2NoZW1hL3NjaGVtYSc7XG5leHBvcnQgeyBtYWluLCBpbml0LCByZXNvbHZlQXBwaXVtSG9tZSB9O1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL3R5cGVzJykuRHJpdmVyVHlwZX0gRHJpdmVyVHlwZVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vdHlwZXMnKS5QbHVnaW5UeXBlfSBQbHVnaW5UeXBlXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi90eXBlcycpLkRyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vdHlwZXMnKS5QbHVnaW5DbGFzc30gUGx1Z2luQ2xhc3NcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL3R5cGVzJykuV2l0aFNlcnZlclN1YmNvbW1hbmR9IFdpdGhTZXJ2ZXJTdWJjb21tYW5kXG4gKi9cblxuLyoqXG4gKiBMaXRlcmFsbHkgYW4gZW1wdHkgb2JqZWN0XG4gKiBAdHlwZWRlZiB7IHt9IH0gRXh0Q29tbWFuZEluaXRSZXN1bHRcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIFNlcnZlckluaXREYXRhXG4gKiBAcHJvcGVydHkge0FwcGl1bURyaXZlcn0gYXBwaXVtRHJpdmVyIC0gVGhlIEFwcGl1bSBkcml2ZXJcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KCcuLi90eXBlcycpLlBhcnNlZEFyZ3N9IHBhcnNlZEFyZ3MgLSBUaGUgcGFyc2VkIGFyZ3VtZW50c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge1NlcnZlckluaXREYXRhICYgaW1wb3J0KCcuL2V4dGVuc2lvbicpLkV4dGVuc2lvbkNvbmZpZ3N9IFNlcnZlckluaXRSZXN1bHRcbiAqL1xuXG4vKipcbiAqIEB0ZW1wbGF0ZSBbVD1XaXRoU2VydmVyU3ViY29tbWFuZF1cbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uL3R5cGVzJykuQXJnczxUPn0gQXJnc1xuICovXG5cbi8qKlxuICogQHRlbXBsYXRlIFtUPVdpdGhTZXJ2ZXJTdWJjb21tYW5kXVxuICogQHR5cGVkZWYge2ltcG9ydCgnLi4vdHlwZXMnKS5QYXJzZWRBcmdzPFQ+fSBQYXJzZWRBcmdzXG4gKi9cblxuIl19