@fusionauth/typescript-client 1.43.0 → 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5577,6 +5577,7 @@ var IdentityProviderLoginMethod;
5577
5577
  (function (IdentityProviderLoginMethod) {
5578
5578
  IdentityProviderLoginMethod["UsePopup"] = "UsePopup";
5579
5579
  IdentityProviderLoginMethod["UseRedirect"] = "UseRedirect";
5580
+ IdentityProviderLoginMethod["UseVendorJavaScript"] = "UseVendorJavaScript";
5580
5581
  })(IdentityProviderLoginMethod = exports.IdentityProviderLoginMethod || (exports.IdentityProviderLoginMethod = {}));
5581
5582
  /**
5582
5583
  * @author Daniel DeGroff
@@ -5919,6 +5920,16 @@ var Sort;
5919
5920
  Sort["asc"] = "asc";
5920
5921
  Sort["desc"] = "desc";
5921
5922
  })(Sort = exports.Sort || (exports.Sort = {}));
5923
+ /**
5924
+ * Steam API modes.
5925
+ *
5926
+ * @author Daniel DeGroff
5927
+ */
5928
+ var SteamAPIMode;
5929
+ (function (SteamAPIMode) {
5930
+ SteamAPIMode["Public"] = "Public";
5931
+ SteamAPIMode["Partner"] = "Partner";
5932
+ })(SteamAPIMode = exports.SteamAPIMode || (exports.SteamAPIMode = {}));
5922
5933
  /**
5923
5934
  * <ul>
5924
5935
  * <li>Bearer Token type as defined by <a href="https://tools.ietf.org/html/rfc6750">RFC 6750</a>.</li>
@@ -6032,4 +6043,4 @@ var XMLSignatureLocation;
6032
6043
  },{"./DefaultRESTClientBuilder":5}]},{},[1])(1)
6033
6044
  });
6034
6045
 
6035
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsIm5vZGVfbW9kdWxlcy9ub2RlLWZldGNoL2Jyb3dzZXIuanMiLCJzcmMvQ2xpZW50UmVzcG9uc2UudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnQudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyLnRzIiwic3JjL0Z1c2lvbkF1dGhDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7O0FBRUgsMkRBQXFEO0FBQ3JELGtCQUFlLDBCQUFnQixDQUFDO0FBRWhDLDRDQUF1QztBQUV2QyxvREFBK0M7QUFDL0MsMENBQXFDOzs7O0FDdEJyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4QkE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7O0FBRUg7SUFBQTtJQVFBLENBQUM7SUFIQyxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQVJBLEFBUUMsSUFBQTs7Ozs7O0FDeEJEOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1EQUE4QztBQUM5Qyx5Q0FBeUU7QUFDekUsMkJBQW9DO0FBRXBDOzs7O0dBSUc7QUFDSDtJQVVFLDJCQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQVJ4QixZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUVyQyxlQUFVLEdBQTJCLEVBQUUsQ0FBQztRQUd4QyxvQkFBZSxHQUF3Qixp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NkUsQ0FBQTtBQUMvRSxDQUFDLEVBTFcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFLcEI7QUFrREQ7Ozs7O0dBS0c7QUFDSCxJQUFZLDJCQUlYO0FBSkQsV0FBWSwyQkFBMkI7SUFDckMsb0RBQXFCLENBQUE7SUFDckIsc0RBQXVCLENBQUE7SUFDdkIsMERBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQUpXLDJCQUEyQixHQUEzQixtQ0FBMkIsS0FBM0IsbUNBQTJCLFFBSXRDO0FBU0Q7O0dBRUc7QUFDSCxJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIsdURBQStCLENBQUE7SUFDL0IsK0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUhXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBRy9CO0FBa1BEOzs7OztHQUtHO0FBQ0gsSUFBWSxnQkFJWDtBQUpELFdBQVksZ0JBQWdCO0lBQzFCLDJDQUF1QixDQUFBO0lBQ3ZCLHVDQUFtQixDQUFBO0lBQ25CLHlEQUFxQyxDQUFBO0FBQ3ZDLENBQUMsRUFKVyxnQkFBZ0IsR0FBaEIsd0JBQWdCLEtBQWhCLHdCQUFnQixRQUkzQjtBQWtFRCxJQUFZLG9CQUdYO0FBSEQsV0FBWSxvQkFBb0I7SUFDOUIsK0NBQXVCLENBQUE7SUFDdkIsNkNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUhXLG9CQUFvQixHQUFwQiw0QkFBb0IsS0FBcEIsNEJBQW9CLFFBRy9CIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IEZ1c2lvbkF1dGhDbGllbnQgZnJvbSAnLi9zcmMvRnVzaW9uQXV0aENsaWVudCdcbmV4cG9ydCBkZWZhdWx0IEZ1c2lvbkF1dGhDbGllbnQ7XG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL0Z1c2lvbkF1dGhDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvSVJFU1RDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0NsaWVudFJlc3BvbnNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vc3JjL0lSRVNUQ2xpZW50QnVpbGRlcic7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciBnZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XG5cdC8vIHRoZSBvbmx5IHJlbGlhYmxlIG1lYW5zIHRvIGdldCB0aGUgZ2xvYmFsIG9iamVjdCBpc1xuXHQvLyBgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKWBcblx0Ly8gSG93ZXZlciwgdGhpcyBjYXVzZXMgQ1NQIHZpb2xhdGlvbnMgaW4gQ2hyb21lIGFwcHMuXG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHNlbGY7IH1cblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiB3aW5kb3c7IH1cblx0aWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBnbG9iYWw7IH1cblx0dGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gbG9jYXRlIGdsb2JhbCBvYmplY3QnKTtcbn1cblxudmFyIGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBnbG9iYWwuZmV0Y2g7XG5cbi8vIE5lZWRlZCBmb3IgVHlwZVNjcmlwdCBhbmQgV2VicGFjay5cbmlmIChnbG9iYWwuZmV0Y2gpIHtcblx0ZXhwb3J0cy5kZWZhdWx0ID0gZ2xvYmFsLmZldGNoLmJpbmQoZ2xvYmFsKTtcbn1cblxuZXhwb3J0cy5IZWFkZXJzID0gZ2xvYmFsLkhlYWRlcnM7XG5leHBvcnRzLlJlcXVlc3QgPSBnbG9iYWwuUmVxdWVzdDtcbmV4cG9ydHMuUmVzcG9uc2UgPSBnbG9iYWwuUmVzcG9uc2U7IiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50UmVzcG9uc2U8VD4ge1xuICBwdWJsaWMgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBwdWJsaWMgcmVzcG9uc2U6IFQ7XG4gIHB1YmxpYyBleGNlcHRpb246IEVycm9yO1xuXG4gIHdhc1N1Y2Nlc3NmdWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgdGhpcy5zdGF0dXNDb2RlIDwgMzAwO1xuICB9XG59IiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOS0yMDIwLCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgSVJFU1RDbGllbnQsIHtFcnJvclJlc3BvbnNlSGFuZGxlciwgUmVzcG9uc2VIYW5kbGVyfSBmcm9tIFwiLi9JUkVTVENsaWVudFwiO1xuaW1wb3J0IENsaWVudFJlc3BvbnNlIGZyb20gXCIuL0NsaWVudFJlc3BvbnNlXCI7XG5pbXBvcnQgZmV0Y2gsIHtCb2R5SW5pdCwgUmVxdWVzdENyZWRlbnRpYWxzLCBSZXNwb25zZX0gZnJvbSAnbm9kZS1mZXRjaCc7XG5pbXBvcnQge1VSTFNlYXJjaFBhcmFtc30gZnJvbSBcInVybFwiO1xuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUFxuICogQGF1dGhvciBUeWxlciBTY290dFxuICogQGF1dGhvciBUSiBQZWRlblxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiBpbXBsZW1lbnRzIElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgcHVibGljIGJvZHk6IEJvZHlJbml0O1xuICBwdWJsaWMgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwdWJsaWMgbWV0aG9kOiBzdHJpbmc7XG4gIHB1YmxpYyBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyB1cmk6IHN0cmluZztcbiAgcHVibGljIGNyZWRlbnRpYWxzOiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG4gIHB1YmxpYyByZXNwb25zZUhhbmRsZXI6IFJlc3BvbnNlSGFuZGxlcjxSVD4gPSBEZWZhdWx0UkVTVENsaWVudC5KU09OUmVzcG9uc2VIYW5kbGVyO1xuICBwdWJsaWMgZXJyb3JSZXNwb25zZUhhbmRsZXI6IEVycm9yUmVzcG9uc2VIYW5kbGVyPEVSVD4gPSBEZWZhdWx0UkVTVENsaWVudC5FcnJvckpTT05SZXNwb25zZUhhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IocHVibGljIGhvc3Q6IHN0cmluZykge1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIHVzaW5nIGEga2V5XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHZhbHVlIG9mIHRoZSBhdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHJldHVybnMge0RlZmF1bHRSRVNUQ2xpZW50fVxuICAgKi9cbiAgd2l0aEF1dGhvcml6YXRpb24oa2V5OiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCB0eXBlb2Yga2V5ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy53aXRoSGVhZGVyKCdBdXRob3JpemF0aW9uJywga2V5KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2VnbWVudCB0byB0aGUgcmVxdWVzdCB1cmlcbiAgICovXG4gIHdpdGhVcmlTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyB8IG51bWJlcik6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBpZiAoc2VnbWVudCA9PT0gbnVsbCB8fCBzZWdtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAodGhpcy51cmkgPT09IG51bGwpIHtcbiAgICAgIHRoaXMudXJpID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVyaS5jaGFyQXQodGhpcy51cmkubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgdGhpcy51cmkgKz0gJy8nO1xuICAgIH1cbiAgICB0aGlzLnVyaSA9IHRoaXMudXJpICsgc2VnbWVudDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgdXJsICsgcGFyYW1ldGVyIGxpc3RcbiAgICovXG4gIGdldEZ1bGxVcmwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdCArIHRoaXMudXJpICsgdGhpcy5nZXRRdWVyeVN0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGJvZHkgb2YgdGhlIGNsaWVudCByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHRvIGJlIHdyaXR0ZW4gdG8gdGhlIHJlcXVlc3QgYm9keSBhcyBmb3JtIGRhdGEuXG4gICAqL1xuICB3aXRoRm9ybURhdGEoYm9keTogVVJMU2VhcmNoUGFyYW1zKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGNvbnN0IGJvZHkyID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIGlmIChib2R5KSB7XG4gICAgICBib2R5LmZvckVhY2goKHZhbHVlLCBuYW1lLCBzZWFyY2hQYXJhbXMpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA+IDAgJiYgdmFsdWUgIT0gXCJudWxsXCIgJiYgdmFsdWUgIT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGJvZHkyLnNldChuYW1lLHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBib2R5ID0gYm9keTI7XG4gICAgfVxuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gICAgdGhpcy53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGhlYWRlciB0byB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGtleSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIuXG4gICAqL1xuICB3aXRoSGVhZGVyKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYm9keSBvZiB0aGUgY2xpZW50IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBib2R5IFRoZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmVxdWVzdCBib2R5IGFzIEpTT04uXG4gICAqL1xuICB3aXRoSlNPTkJvZHkoYm9keTogb2JqZWN0KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgIHRoaXMud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAvLyBPbWl0IHRoZSBDb250ZW50LUxlbmd0aCwgdGhpcyBpcyBzZXQgYXV0by1tYWdpY2FsbHkgYnkgdGhlIHJlcXVlc3QgbGlicmFyeVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGh0dHAgbWV0aG9kIGZvciB0aGUgcmVxdWVzdFxuICAgKi9cbiAgd2l0aE1ldGhvZChtZXRob2Q6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB1cmkgb2YgdGhlIHJlcXVlc3RcbiAgICovXG4gIHdpdGhVcmkodXJpOiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy51cmkgPSB1cmk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwYXJhbWV0ZXJzIHRvIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIsIG1heSBiZSBhIHN0cmluZywgb2JqZWN0IG9yIG51bWJlci5cbiAgICovXG4gIHdpdGhQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMucGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcmVxdWVzdCdzIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgQSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZSByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICAgKi9cbiAgd2l0aENyZWRlbnRpYWxzKHZhbHVlOiBSZXF1ZXN0Q3JlZGVudGlhbHMpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aFJlc3BvbnNlSGFuZGxlcihoYW5kbGVyOiBSZXNwb25zZUhhbmRsZXI8UlQ+KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMucmVzcG9uc2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhFcnJvclJlc3BvbnNlSGFuZGxlcihoYW5kbGVyOiBFcnJvclJlc3BvbnNlSGFuZGxlcjxFUlQ+KTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMuZXJyb3JSZXNwb25zZUhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1biB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIGEgcHJvbWlzZS4gVGhpcyBwcm9taXNlIHdpbGwgcmVzb2x2ZSBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsXG4gICAqIGFuZCByZWplY3Qgb3RoZXJ3aXNlLlxuICAgKi9cbiAgYXN5bmMgZ28oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSVD4+IHtcbiAgICBjb25zdCBjbGllbnRSZXNwb25zZSA9IG5ldyBDbGllbnRSZXNwb25zZTxSVD4oKTtcblxuICAgIGxldCByZXNwb25zZTogUmVzcG9uc2U7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXG4gICAgICAgICAgdGhpcy5nZXRGdWxsVXJsKCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgIGJvZHk6IHRoaXMuYm9keSBhcyBCb2R5SW5pdCxcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgKENyZWRlbnRpYWxzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIE5vZGVKUylcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzOiB0aGlzLmNyZWRlbnRpYWxzLFxuICAgICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucmVzcG9uc2VIYW5kbGVyKHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGF3YWl0IHRoaXMuZXJyb3JSZXNwb25zZUhhbmRsZXIocmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDbGllbnRSZXNwb25zZSkge1xuICAgICAgICB0aHJvdyBlcnJvcjsgLy8gRG9uJ3QgY2F0Y2ggYSBDbGllbnRSZXNwb25zZSAod2Ugd2FudCB0aGlzIHRvIHRyaWdnZXIgdGhlIGNhdGNoIG9mIHRoZSBwcm9taXNlXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZSkgeyAvLyBUcnkgdG8gcmVjb3ZlciB0aGUgcmVzcG9uc2Ugc3RhdHVzXG4gICAgICAgIGNsaWVudFJlc3BvbnNlLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICB9XG4gICAgICBjbGllbnRSZXNwb25zZS5leGNlcHRpb24gPSBlcnJvcjtcblxuICAgICAgdGhyb3cgY2xpZW50UmVzcG9uc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWVyeVN0cmluZygpIHtcbiAgICB2YXIgcXVlcnlTdHJpbmcgPSAnJztcbiAgICBmb3IgKGxldCBrZXkgaW4gdGhpcy5wYXJhbWV0ZXJzKSB7XG4gICAgICBxdWVyeVN0cmluZyArPSAocXVlcnlTdHJpbmcubGVuZ3RoID09PSAwKSA/ICc/JyA6ICcmJztcbiAgICAgIHF1ZXJ5U3RyaW5nICs9IGtleSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnBhcmFtZXRlcnNba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgSlNPTiBmb3JtIG9mIHRoZSByZXNwb25zZSB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gcmVzcG9uc2VcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgSlNPTlJlc3BvbnNlSGFuZGxlcjxSVD4ocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSVD4+IHtcbiAgICBsZXQgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8UlQ+KCk7XG5cbiAgICBjbGllbnRSZXNwb25zZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGxldCB0eXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gICAgaWYgKHR5cGUgJiYgdHlwZS5zdGFydHNXaXRoKFwiYXBwbGljYXRpb24vanNvblwiKSkge1xuICAgICAgY2xpZW50UmVzcG9uc2UucmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsaWVudFJlc3BvbnNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBKU09OIGZvcm0gb2YgdGhlIHJlc3BvbnNlIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSByZXNwb25zZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHN0YXRpYyBhc3luYyBFcnJvckpTT05SZXNwb25zZUhhbmRsZXI8RVJUPihyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVSVD4+IHtcbiAgICBsZXQgY2xpZW50UmVzcG9uc2UgPSBuZXcgQ2xpZW50UmVzcG9uc2U8RVJUPigpO1xuXG4gICAgY2xpZW50UmVzcG9uc2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICBsZXQgdHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuc3RhcnRzV2l0aChcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgIGNsaWVudFJlc3BvbnNlLmV4Y2VwdGlvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50UmVzcG9uc2U7XG4gIH1cbn1cbiIsIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTksIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBJUkVTVENsaWVudCBmcm9tIFwiLi9JUkVTVENsaWVudFwiO1xuaW1wb3J0IERlZmF1bHRSRVNUQ2xpZW50IGZyb20gXCIuL0RlZmF1bHRSRVNUQ2xpZW50XCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgaW1wbGVtZW50cyBJUkVTVENsaWVudEJ1aWxkZXIge1xuICBidWlsZDxSVCwgRVJUPihob3N0OiBzdHJpbmcpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgcmV0dXJuIG5ldyBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPihob3N0KTtcbiAgfVxufVxuIiwiLypcbiogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjMsIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbipcbiogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbipcbiogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbipcbiogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IElSRVNUQ2xpZW50IGZyb20gXCIuL0lSRVNUQ2xpZW50XCJcbmltcG9ydCBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyXCI7XG5pbXBvcnQgSVJFU1RDbGllbnRCdWlsZGVyIGZyb20gXCIuL0lSRVNUQ2xpZW50QnVpbGRlclwiO1xuaW1wb3J0IENsaWVudFJlc3BvbnNlIGZyb20gXCIuL0NsaWVudFJlc3BvbnNlXCI7XG5pbXBvcnQge1JlcXVlc3RDcmVkZW50aWFsc30gZnJvbSBcIm5vZGUtZmV0Y2hcIjtcbmltcG9ydCB7VVJMU2VhcmNoUGFyYW1zfSBmcm9tIFwidXJsXCI7XG5cbmV4cG9ydCBjbGFzcyBGdXNpb25BdXRoQ2xpZW50IHtcbiAgcHVibGljIGNsaWVudEJ1aWxkZXI6IElSRVNUQ2xpZW50QnVpbGRlciA9IG5ldyBEZWZhdWx0UkVTVENsaWVudEJ1aWxkZXIoKTtcbiAgcHVibGljIGNyZWRlbnRpYWxzOiBSZXF1ZXN0Q3JlZGVudGlhbHM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFwaUtleTogc3RyaW5nLFxuICAgIHB1YmxpYyBob3N0OiBzdHJpbmcsXG4gICAgcHVibGljIHRlbmFudElkPzogc3RyaW5nLFxuICApIHsgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgaWQsIHRoYXQgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIGhlYWRlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsfSB0ZW5hbnRJZCBUaGUgdmFsdWUgb2YgdGhlIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCBoZWFkZXIuXG4gICAqIEByZXR1cm5zIHtGdXNpb25BdXRoQ2xpZW50fVxuICAgKi9cbiAgc2V0VGVuYW50SWQodGVuYW50SWQ6IHN0cmluZyB8IG51bGwpOiBGdXNpb25BdXRoQ2xpZW50IHtcbiAgICB0aGlzLnRlbmFudElkID0gdGVuYW50SWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB3aGV0aGVyIGFuZCBob3cgY29va2llcyB3aWxsIGJlIHNlbnQgd2l0aCBlYWNoIHJlcXVlc3QuXG4gICAqIFxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgYW5kIGhvdyBjb29raWVzIHdpbGwgYmUgc2VudC5cbiAgICogQHJldHVybnMge0Z1c2lvbkF1dGhDbGllbnR9XG4gICAqL1xuICBzZXRSZXF1ZXN0Q3JlZGVudGlhbHModmFsdWU6IFJlcXVlc3RDcmVkZW50aWFscyk6IEZ1c2lvbkF1dGhDbGllbnQge1xuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhbiBhY3Rpb24gb24gYSB1c2VyLiBUaGUgdXNlciBiZWluZyBhY3Rpb25lZCBpcyBjYWxsZWQgdGhlIFwiYWN0aW9uZWVcIiBhbmQgdGhlIHVzZXIgdGFraW5nIHRoZSBhY3Rpb24gaXMgY2FsbGVkIHRoZVxuICAgKiBcImFjdGlvbmVyXCIuIEJvdGggdXNlciBpZHMgYXJlIHJlcXVpcmVkIGluIHRoZSByZXF1ZXN0IG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHtBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSBhY3Rpb24gcmVxdWVzdCB0aGF0IGluY2x1ZGVzIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjdGlvbiBiZWluZyB0YWtlbiBpbmNsdWRpbmdcbiAgICogICAgdGhlIGlkIG9mIHRoZSBhY3Rpb24sIGFueSBvcHRpb25zIGFuZCB0aGUgZHVyYXRpb24gKGlmIGFwcGxpY2FibGUpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgYWN0aW9uVXNlcihyZXF1ZXN0OiBBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWN0aXZhdGVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3IgdXNpbmcgYSBsaWNlbnNlIGlkIGFuZCBvcHRpb25hbGx5IGEgbGljZW5zZSB0ZXh0IChmb3IgYWlyLWdhcHBlZCBkZXBsb3ltZW50cylcbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdG9yUmVxdWVzdH0gcmVxdWVzdCBBbiBvcHRpb25hbCByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGxpY2Vuc2UgdGV4dCB0byBhY3RpdmF0ZSBSZWFjdG9yICh1c2VmdWwgZm9yIGFpci1nYXAgZGVwbG95bWVudHMgb2YgRnVzaW9uQXV0aCkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGFjdGl2YXRlUmVhY3RvcihyZXF1ZXN0OiBSZWFjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB1c2VyIHRvIGFuIGV4aXN0aW5nIGZhbWlseS4gVGhlIGZhbWlseSBpZCBtdXN0IGJlIHNwZWNpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmYW1pbHlJZCBUaGUgaWQgb2YgdGhlIGZhbWlseS5cbiAgICogQHBhcmFtIHtGYW1pbHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggdXNlciB0byBhZGQgdG8gdGhlIGZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGFkZFVzZXJUb0ZhbWlseShmYW1pbHlJZDogVVVJRCwgcmVxdWVzdDogRmFtaWx5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIHRoZSB1c2VyIGFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY3Rpb25JZCBUaGUgYWN0aW9uIGlkIG9mIHRoZSBhY3Rpb24gdG8gY2FuY2VsLlxuICAgKiBAcGFyYW0ge0FjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIGFjdGlvbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjYW5jZWxsYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBjYW5jZWxBY3Rpb24oYWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWN0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHVzZXIncyBwYXNzd29yZCB1c2luZyB0aGUgY2hhbmdlIHBhc3N3b3JkIElkLiBUaGlzIHVzdWFsbHkgb2NjdXJzIGFmdGVyIGFuIGVtYWlsIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHVzZXJcbiAgICogYW5kIHRoZXkgY2xpY2tlZCBvbiBhIGxpbmsgdG8gcmVzZXQgdGhlaXIgcGFzc3dvcmQuXG4gICAqIFxuICAgKiBBcyBvZiB2ZXJzaW9uIDEuMzIuMiwgcHJlZmVyIHNlbmRpbmcgdGhlIGNoYW5nZVBhc3N3b3JkSWQgaW4gdGhlIHJlcXVlc3QgYm9keS4gVG8gZG8gdGhpcywgb21pdCB0aGUgZmlyc3QgcGFyYW1ldGVyLCBhbmQgc2V0XG4gICAqIHRoZSB2YWx1ZSBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgY2hhbmdlIHBhc3N3b3JkIElkIHVzZWQgdG8gZmluZCB0aGUgdXNlci4gVGhpcyB2YWx1ZSBpcyBnZW5lcmF0ZWQgYnkgRnVzaW9uQXV0aCBvbmNlIHRoZSBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkLlxuICAgKiBAcGFyYW0ge0NoYW5nZVBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+fVxuICAgKi9cbiAgY2hhbmdlUGFzc3dvcmQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nLCByZXF1ZXN0OiBDaGFuZ2VQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENoYW5nZVBhc3N3b3JkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNoYW5nZVBhc3N3b3JkSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgYSB1c2VyJ3MgcGFzc3dvcmQgdXNpbmcgdGhlaXIgaWRlbnRpdHkgKGxvZ2luIGlkIGFuZCBwYXNzd29yZCkuIFVzaW5nIGEgbG9naW5JZCBpbnN0ZWFkIG9mIHRoZSBjaGFuZ2VQYXNzd29yZElkXG4gICAqIGJ5cGFzc2VzIHRoZSBlbWFpbCB2ZXJpZmljYXRpb24gYW5kIGFsbG93cyBhIHBhc3N3b3JkIHRvIGJlIGNoYW5nZWQgZGlyZWN0bHkgd2l0aG91dCBmaXJzdCBjYWxsaW5nIHRoZSAjZm9yZ290UGFzc3dvcmRcbiAgICogbWV0aG9kLlxuICAgKlxuICAgKiBAcGFyYW0ge0NoYW5nZVBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY2hhbmdlIHRoZSBwYXNzd29yZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hhbmdlUGFzc3dvcmRCeUlkZW50aXR5KHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gYnkgY29tcGxldGluZyBhIFR3by1GYWN0b3IgU3RlcC1VcCBhdXRoZW50aWNhdGlvbi5cbiAgICogXG4gICAqIEFuIEhUVFAgc3RhdHVzIGNvZGUgb2YgNDAwIHdpdGggYSBnZW5lcmFsIGVycm9yIGNvZGUgb2YgW1RydXN0VG9rZW5SZXF1aXJlZF0gaW5kaWNhdGVzIHRoYXQgYSBUcnVzdCBUb2tlbiBpcyByZXF1aXJlZCB0byBtYWtlIGEgUE9TVCByZXF1ZXN0IHRvIHRoaXMgQVBJLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgY2hhbmdlIHBhc3N3b3JkIElkIHVzZWQgdG8gZmluZCB0aGUgdXNlci4gVGhpcyB2YWx1ZSBpcyBnZW5lcmF0ZWQgYnkgRnVzaW9uQXV0aCBvbmNlIHRoZSBjaGFuZ2UgcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdJZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNoYW5nZVBhc3N3b3JkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBpbiBvcmRlciB0byBjb21wbGV0ZSBhIGNoYW5nZSBwYXNzd29yZCByZXF1ZXN0LlxuICAgKiBXaGVuIGEgdXNlciBoYXMgZW5hYmxlZCBUd28tRmFjdG9yIGF1dGhlbnRpY2F0aW9uLCBiZWZvcmUgeW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgQ2hhbmdlIFBhc3N3b3JkIEFQSSB0byBjaGFuZ2VcbiAgICogeW91ciBwYXNzd29yZCwgeW91IG11c3Qgb2J0YWluIGEgVHJ1c3QgUmVxdWVzdCBJZCBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBsb2dpbklkIG9mIHRoZSBVc2VyIHRoYXQgeW91IGludGVuZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY2hlY2tDaGFuZ2VQYXNzd29yZFVzaW5nTG9naW5JZChsb2dpbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY2hhbmdlLXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJuYW1lJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIENsaWVudCBDcmVkZW50aWFscyBncmFudCByZXF1ZXN0IHRvIG9idGFpbiBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgVGhlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBFbnRpdHkgaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgVGhlIGNsaWVudCBzZWNyZXQgdXNlZCB0byBhdXRoZW50aWNhdGUgdGhpcyByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyB1c2VkIHRvIGluZGljYXRlIHdoaWNoIHRhcmdldCBlbnRpdHkgeW91IGFyZSByZXF1ZXN0aW5nIGFjY2Vzcy4gVG8gcmVxdWVzdCBhY2Nlc3MgdG8gYW4gZW50aXR5LCB1c2UgdGhlIGZvcm1hdCB0YXJnZXQtZW50aXR5OiZsdDt0YXJnZXQtZW50aXR5LWlkJmd0OzombHQ7cm9sZXMmZ3Q7LiBSb2xlcyBhcmUgYW4gb3B0aW9uYWwgY29tbWEgc2VwYXJhdGVkIGxpc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBjbGllbnRDcmVkZW50aWFsc0dyYW50KGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHNjb3BlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdjbGllbnRfY3JlZGVudGlhbHMnKTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY29tbWVudCB0byB0aGUgdXNlcidzIGFjY291bnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckNvbW1lbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIgY29tbWVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgY29tbWVudE9uVXNlcihyZXF1ZXN0OiBVc2VyQ29tbWVudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29tbWVudCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnkgYnkgdmFsaWRhdGluZyB0aGUgc2lnbmF0dXJlIGFnYWluc3QgdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGNoYWxsZW5nZSB3aXRob3V0IGxvZ2dpbmcgdGhlIHVzZXIgaW5cbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRobkxvZ2luUmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5Bc3NlcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY29tcGxldGVXZWJBdXRobkFzc2VydGlvbihyZXF1ZXN0OiBXZWJBdXRobkxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5Bc3NlcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxXZWJBdXRobkFzc2VydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vYXNzZXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBieSB2YWxpZGF0aW5nIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgY2hhbGxlbmdlIGFuZCB0aGVuIGxvZ2luIHRoZSB1c2VyIGluXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5Mb2dpblJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNvbXBsZXRlV2ViQXV0aG5Mb2dpbihyZXF1ZXN0OiBXZWJBdXRobkxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBieSB2YWxpZGF0aW5nIHRoZSBjbGllbnQgcmVxdWVzdCBhbmQgc2F2aW5nIHRoZSBuZXcgY3JlZGVudGlhbFxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIGNvbXBsZXRpbmcgdGhlIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY29tcGxldGVXZWJBdXRoblJlZ2lzdHJhdGlvbihyZXF1ZXN0OiBXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuL3JlZ2lzdGVyL2NvbXBsZXRlJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBBUEkga2V5LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhIHVuaXF1ZSBJZCBmb3IgdGhlIGtleSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogYW4gQVBJIGtleSBjYW4gb25seSBiZSBjcmVhdGVkIHdpdGggZXF1YWwgb3IgbGVzc2VyIGF1dGhvcml0eS4gQW4gQVBJIGtleSBjYW5ub3QgY3JlYXRlIGFub3RoZXIgQVBJIGtleSB1bmxlc3MgaXQgaXMgZ3JhbnRlZCBcbiAgICogdG8gdGhhdCBBUEkga2V5LlxuICAgKiBcbiAgICogSWYgYW4gQVBJIGtleSBpcyBsb2NrZWQgdG8gYSB0ZW5hbnQsIGl0IGNhbiBvbmx5IGNyZWF0ZSBBUEkgS2V5cyBmb3IgdGhhdCBzYW1lIHRlbmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEFQSSBrZXkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gSWQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QVBJS2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjcmVhdGUgdGhlIEFQSUtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUFQSUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGFwcGxpY2F0aW9uLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGFwcGxpY2F0aW9uLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgSWQgdG8gdXNlIGZvciB0aGUgYXBwbGljYXRpb24uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgYXBwbGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyByb2xlIGZvciBhbiBhcHBsaWNhdGlvbi4gWW91IG11c3Qgc3BlY2lmeSB0aGUgaWQgb2YgdGhlIGFwcGxpY2F0aW9uIHlvdSBhcmUgY3JlYXRpbmcgdGhlIHJvbGUgZm9yLlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHJvbGUgaW5zaWRlIHRoZSBBcHBsaWNhdGlvblJvbGUgb2JqZWN0IGl0c2VsZiwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gY3JlYXRlIHRoZSByb2xlIG9uLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJvbGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgcm9sZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBhcHBsaWNhdGlvbiByb2xlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhdWRpdCBsb2cgd2l0aCB0aGUgbWVzc2FnZSBhbmQgdXNlciBuYW1lICh1c3VhbGx5IGFuIGVtYWlsKS4gQXVkaXQgbG9ncyBzaG91bGQgYmUgd3JpdHRlbiBhbnl0aW1lIHlvdVxuICAgKiBtYWtlIGNoYW5nZXMgdG8gdGhlIEZ1c2lvbkF1dGggZGF0YWJhc2UuIFdoZW4gdXNpbmcgdGhlIEZ1c2lvbkF1dGggQXBwIHdlYiBpbnRlcmZhY2UsIGFueSBjaGFuZ2VzIGFyZSBhdXRvbWF0aWNhbGx5XG4gICAqIHdyaXR0ZW4gdG8gdGhlIGF1ZGl0IGxvZy4gSG93ZXZlciwgaWYgeW91IGFyZSBhY2Nlc3NpbmcgdGhlIEFQSSwgeW91IG11c3Qgd3JpdGUgdGhlIGF1ZGl0IGxvZ3MgeW91cnNlbGYuXG4gICAqXG4gICAqIEBwYXJhbSB7QXVkaXRMb2dSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGF1ZGl0IGxvZyBlbnRyeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQXVkaXRMb2cocmVxdWVzdDogQXVkaXRMb2dSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEF1ZGl0TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vYXVkaXQtbG9nJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNvbm5lY3Rvci4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgY29ubmVjdG9yLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgY29ubmVjdG9yLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7Q29ubmVjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBjb25uZWN0b3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQsIHJlcXVlc3Q6IENvbm5lY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdXNlciBjb25zZW50IHR5cGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgY29uc2VudCB0eXBlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGNvbnNlbnQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBjb25zZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUNvbnNlbnQoY29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGVtYWlsIHRlbXBsYXRlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHRlbXBsYXRlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRlbXBsYXRlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZW1haWwgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVtYWlsVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW1haWxUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEVudGl0eS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBFbnRpdHkuIElmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBFbnRpdHkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbnRpdHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIEVudGl0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUVudGl0eShlbnRpdHlJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBFbnRpdHkgVHlwZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBFbnRpdHkgVHlwZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBFbnRpdHkgVHlwZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIEVudGl0eSBUeXBlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBwZXJtaXNzaW9uIGZvciBhbiBlbnRpdHkgdHlwZS4gWW91IG11c3Qgc3BlY2lmeSB0aGUgaWQgb2YgdGhlIGVudGl0eSB0eXBlIHlvdSBhcmUgY3JlYXRpbmcgdGhlIHBlcm1pc3Npb24gZm9yLlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHBlcm1pc3Npb24gaW5zaWRlIHRoZSBFbnRpdHlUeXBlUGVybWlzc2lvbiBvYmplY3QgaXRzZWxmLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIGVudGl0eSB0eXBlIHRvIGNyZWF0ZSB0aGUgcGVybWlzc2lvbiBvbi5cbiAgICogQHBhcmFtIHtVVUlEfSBwZXJtaXNzaW9uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHBlcm1pc3Npb24uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBwZXJtaXNzaW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUVudGl0eVR5cGVQZXJtaXNzaW9uKGVudGl0eVR5cGVJZDogVVVJRCwgcGVybWlzc2lvbklkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicGVybWlzc2lvblwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocGVybWlzc2lvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZmFtaWx5IHdpdGggdGhlIHVzZXIgaWQgaW4gdGhlIHJlcXVlc3QgYXMgdGhlIG93bmVyIGFuZCBzb2xlIG1lbWJlciBvZiB0aGUgZmFtaWx5LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBpZCBmb3IgdGhlXG4gICAqIGZhbWlseSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmYW1pbHlJZCAoT3B0aW9uYWwpIFRoZSBpZCBmb3IgdGhlIGZhbWlseS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0ZhbWlseVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRmFtaWx5KGZhbWlseUlkOiBVVUlELCByZXF1ZXN0OiBGYW1pbHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9ybS4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgZm9ybSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBmb3JtLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7Rm9ybVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZm9ybS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVGb3JtKGZvcm1JZDogVVVJRCwgcmVxdWVzdDogRm9ybVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZvcm1JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGZvcm0gZmllbGQuICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGZvcm0sIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGZvcm0gZmllbGQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtGb3JtRmllbGRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGZvcm0gZmllbGQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVGb3JtRmllbGQoZmllbGRJZDogVVVJRCwgcmVxdWVzdDogRm9ybUZpZWxkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybUZpZWxkUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZpZWxkSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBncm91cC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBncm91cCwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZ3JvdXAuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtHcm91cFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZ3JvdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUdyb3VwKGdyb3VwSWQ6IFVVSUQsIHJlcXVlc3Q6IEdyb3VwUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG1lbWJlciBpbiBhIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0ge01lbWJlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZ3JvdXAgbWVtYmVyKHMpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZW1iZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IE1lbWJlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lbWJlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBvbiB0aGlzIGNyZWF0ZSByZXF1ZXN0LCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY2Nlc3NDb250cm9sTGlzdElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0lQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlSVBBY2Nlc3NDb250cm9sTGlzdChhY2Nlc3NDb250cm9sTGlzdElkOiBVVUlELCByZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGlkZW50aXR5IHByb3ZpZGVyLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGlkZW50aXR5IHByb3ZpZGVyLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgcmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBMYW1iZGEuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgbGFtYmRhLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgbGFtYmRhLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7TGFtYmRhUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBsYW1iZGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVMYW1iZGEobGFtYmRhSWQ6IFVVSUQsIHJlcXVlc3Q6IExhbWJkYVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGxhbWJkYUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIG1lc3NhZ2UgdGVtcGxhdGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGVtcGxhdGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0ZW1wbGF0ZS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZU1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbWVzc2VuZ2VyLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBtZXNzZW5nZXIsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBtZXNzZW5nZXIuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtNZXNzZW5nZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG1lc3Nlbmdlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZU1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCwgcmVxdWVzdDogTWVzc2VuZ2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0ZW5hbnQuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGVuYW50LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGVuYW50LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VGVuYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVUZW5hbnQodGVuYW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFRlbmFudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgVGhlbWUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGhlbWUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRoZW1lLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VGhlbWVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHRoZW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVUaGVtZSh0aGVtZUlkOiBVVUlELCByZXF1ZXN0OiBUaGVtZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHVzZXIsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdXNlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIGFjdGlvbi4gVGhpcyBhY3Rpb24gY2Fubm90IGJlIHRha2VuIG9uIGEgdXNlciB1bnRpbCB0aGlzIGNhbGwgc3VjY2Vzc2Z1bGx5IHJldHVybnMuIEFueXRpbWUgYWZ0ZXJcbiAgICogdGhhdCB0aGUgdXNlciBhY3Rpb24gY2FuIGJlIGFwcGxpZWQgdG8gYW55IHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdXNlciBhY3Rpb24uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIHJlYXNvbi4gVGhpcyB1c2VyIGFjdGlvbiByZWFzb24gY2Fubm90IGJlIHVzZWQgd2hlbiBhY3Rpb25pbmcgYSB1c2VyIHVudGlsIHRoaXMgY2FsbCBjb21wbGV0ZXNcbiAgICogc3VjY2Vzc2Z1bGx5LiBBbnl0aW1lIGFmdGVyIHRoYXQgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiBjYW4gYmUgdXNlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB1c2VyIGFjdGlvbiByZWFzb24uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVhc29uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB1c2VyIGFjdGlvbiByZWFzb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZWFzb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHNpbmdsZSBVc2VyIGNvbnNlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckNvbnNlbnRJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIFVzZXIgY29uc2VudC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpbmsgYW4gZXh0ZXJuYWwgdXNlciBmcm9tIGEgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyIHRvIGEgRnVzaW9uQXV0aCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJMaW5rUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gbGluayB0aGUgRnVzaW9uQXV0aCB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyTGluayhyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyTGlua1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgd2ViaG9vay4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB3ZWJob29rLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHdlYmhvb2suIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtXZWJob29rUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlELCByZXF1ZXN0OiBXZWJob29rUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlUmVhY3RvcigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBpZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdXNlcklkcyBUaGUgaWRzIG9mIHRoZSB1c2VycyB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBkZWFjdGl2YXRlVXNlcnNCeUlkcywgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBkZWFjdGl2YXRlVXNlcnModXNlcklkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWRzKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZHJ5UnVuJywgZmFsc2UpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBpZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdXNlcklkcyBUaGUgaWRzIG9mIHRoZSB1c2VycyB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVVc2Vyc0J5SWRzKHVzZXJJZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkcylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2RyeVJ1bicsIGZhbHNlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIGZhbHNlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBBUEkga2V5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBBUEkga2V5IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQVBJS2V5KGtleUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkIGRlbGV0ZXMgYW4gYXBwbGljYXRpb24uIFRoaXMgaXMgYSBkYW5nZXJvdXMgb3BlcmF0aW9uIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbW9zdCBjaXJjdW1zdGFuY2VzLiBUaGlzIHdpbGxcbiAgICogZGVsZXRlIHRoZSBhcHBsaWNhdGlvbiwgYW55IHJlZ2lzdHJhdGlvbnMgZm9yIHRoYXQgYXBwbGljYXRpb24sIG1ldHJpY3MgYW5kIHJlcG9ydHMgZm9yIHRoZSBhcHBsaWNhdGlvbiwgYWxsIHRoZVxuICAgKiByb2xlcyBmb3IgdGhlIGFwcGxpY2F0aW9uLCBhbmQgYW55IG90aGVyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBvcGVyYXRpb24gY291bGQgdGFrZSBhIHZlcnlcbiAgICogbG9uZyB0aW1lLCBkZXBlbmRpbmcgb24gdGhlIGFtb3VudCBvZiBkYXRhIGluIHlvdXIgZGF0YWJhc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkIGRlbGV0ZXMgYW4gYXBwbGljYXRpb24gcm9sZS4gVGhpcyBpcyBhIGRhbmdlcm91cyBvcGVyYXRpb24gYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBtb3N0IGNpcmN1bXN0YW5jZXMuIFRoaXNcbiAgICogcGVybWFuZW50bHkgcmVtb3ZlcyB0aGUgZ2l2ZW4gcm9sZSBmcm9tIGFsbCB1c2VycyB0aGF0IGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZGVhY3RpdmF0ZS5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgVGhlIElkIG9mIHRoZSByb2xlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb25uZWN0b3IgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3RvciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBjb25zZW50IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIFRoZSBJZCBvZiB0aGUgY29uc2VudCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUNvbnNlbnQoY29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZW1haWwgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEVudGl0eSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5KGVudGl0eUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gRW50aXR5IEdyYW50IGZvciB0aGUgZ2l2ZW4gVXNlciBvciBFbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGJlaW5nIGRlbGV0ZWQgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJlY2lwaWVudEVudGl0eUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBFbnRpdHkgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIFVzZXIgdGhhdCB0aGUgRW50aXR5IEdyYW50IGlzIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW50aXR5R3JhbnQoZW50aXR5SWQ6IFVVSUQsIHJlY2lwaWVudEVudGl0eUlkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwiZ3JhbnRcIilcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlY2lwaWVudEVudGl0eUlkJywgcmVjaXBpZW50RW50aXR5SWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEVudGl0eSBUeXBlIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYXJkIGRlbGV0ZXMgYSBwZXJtaXNzaW9uLiBUaGlzIGlzIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gVGhpc1xuICAgKiBwZXJtYW5lbnRseSByZW1vdmVzIHRoZSBnaXZlbiBwZXJtaXNzaW9uIGZyb20gYWxsIGdyYW50cyB0aGF0IGhhZCBpdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBlbnRpdHlUeXBlIHRoZSB0aGUgcGVybWlzc2lvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCBUaGUgSWQgb2YgdGhlIHBlcm1pc3Npb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHlUeXBlUGVybWlzc2lvbihlbnRpdHlUeXBlSWQ6IFVVSUQsIHBlcm1pc3Npb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGZvcm0gZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRm9ybShmb3JtSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBmb3JtIGZpZWxkIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCBUaGUgSWQgb2YgdGhlIGZvcm0gZmllbGQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVGb3JtRmllbGQoZmllbGRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmaWVsZElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBncm91cCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUdyb3VwKGdyb3VwSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdXNlcnMgYXMgbWVtYmVycyBvZiBhIGdyb3VwLlxuICAgKlxuICAgKiBAcGFyYW0ge01lbWJlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIG1lbWJlciByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHJlbW92ZSBtZW1iZXJzIHRvIHRoZSBncm91cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IE1lbWJlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL21lbWJlcicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlwQWNjZXNzQ29udHJvbExpc3RJZCBUaGUgSWQgb2YgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVJUEFjY2Vzc0NvbnRyb2xMaXN0KGlwQWNjZXNzQ29udHJvbExpc3RJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlwQWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlciB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUga2V5IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlS2V5KGtleUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGxhbWJkYSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlTGFtYmRhKGxhbWJkYUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIG1lc3NlbmdlciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIFRoZSBJZCBvZiB0aGUgbWVzc2VuZ2VyIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgZ2l2ZW4gdXNlciBhbmQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB3aG9zZSByZWdpc3RyYXRpb24gaXMgYmVpbmcgZGVsZXRlZC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVtb3ZlIHRoZSByZWdpc3RyYXRpb24gZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGdpdmVuIHVzZXIgYW5kIGFwcGxpY2F0aW9uIGFsb25nIHdpdGggdGhlIGdpdmVuIEpTT04gYm9keSB0aGF0IGNvbnRhaW5zIHRoZSBldmVudCBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBiZWluZyBkZWxldGVkLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byByZW1vdmUgdGhlIHJlZ2lzdHJhdGlvbiBmb3IuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBib2R5IHRoYXQgY29udGFpbnMgdGhlIGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVSZWdpc3RyYXRpb25XaXRoUmVxdWVzdCh1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvbkRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGVuYW50IGJhc2VkIG9uIHRoZSBnaXZlbiBJZCBvbiB0aGUgVVJMLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdGVuYW50IGFuZCBldmVyeXRoaW5nIHVuZGVyIHRoZSB0ZW5hbnQgKGFwcGxpY2F0aW9ucywgdXNlcnMsIGV0YykuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUZW5hbnQodGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGVuYW50IGZvciB0aGUgZ2l2ZW4gSWQgYXN5bmNocm9ub3VzbHkuXG4gICAqIFRoaXMgbWV0aG9kIGlzIGhlbHBmdWwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHdhaXQgZm9yIHRoZSBkZWxldGUgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGVuYW50QXN5bmModGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FzeW5jJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGVuYW50IGJhc2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0IChzZW50IHRvIHRoZSBBUEkgYXMgSlNPTikuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB0ZW5hbnQgYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIHRlbmFudCAoYXBwbGljYXRpb25zLCB1c2VycywgZXRjKS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7VGVuYW50RGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gZGVsZXRlIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUZW5hbnRXaXRoUmVxdWVzdCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50RGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHRoZW1lIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVGhlbWUodGhlbWVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgYWN0aW9uIGZvciB0aGUgZ2l2ZW4gSWQuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyB0aGUgdXNlciBhY3Rpb24gYW5kIGFsc28gYW55IGhpc3RvcnkgYW5kIGxvZ3Mgb2ZcbiAgICogdGhlIGFjdGlvbiBiZWluZyBhcHBsaWVkIHRvIGFueSB1c2Vycy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBhY3Rpb24gcmVhc29uIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBleGlzdGluZyBsaW5rIHRoYXQgaGFzIGJlZW4gbWFkZSBmcm9tIGEgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyIHRvIGEgRnVzaW9uQXV0aCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aXR5UHJvdmlkZXJVc2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlciBpbiB0aGUgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyIHRvIHVubGluay5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCB1c2VyIHRvIHVubGluay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgZGVsZXRlVXNlckxpbmsoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCBpZGVudGl0eVByb3ZpZGVyVXNlcklkOiBzdHJpbmcsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVySWQnLCBpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVyVXNlcklkJywgaWRlbnRpdHlQcm92aWRlclVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBiYXNlZCBvbiB0aGUgZ2l2ZW4gcmVxdWVzdCAoc2VudCB0byB0aGUgQVBJIGFzIEpTT04pLiBUaGlzIHBlcm1hbmVudGx5IGRlbGV0ZXMgYWxsIGluZm9ybWF0aW9uLCBtZXRyaWNzLCByZXBvcnRzIGFuZCBkYXRhIGFzc29jaWF0ZWRcbiAgICogd2l0aCB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGRlbGV0ZSAocmVxdWlyZWQpLlxuICAgKiBAcGFyYW0ge1VzZXJEZWxldGVTaW5nbGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBkZWxldGUgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJXaXRoUmVxdWVzdCh1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJEZWxldGVTaW5nbGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBpZHMsIG9yIHVzZXJzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBKU09OIHF1ZXJ5IG9yIHF1ZXJ5U3RyaW5nLlxuICAgKiBUaGUgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBpZHMsIHF1ZXJ5IGFuZCB0aGVuIHF1ZXJ5U3RyaW5nLCBpdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHByb3ZpZGUgb25lIG9mIHRoZSB0aHJlZSBmb3IgdGhlIHJlcXVlc3QuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZWFjdGl2YXRlIG9yIHBlcm1hbmVudGx5IGRlbGV0ZSAoaGFyZC1kZWxldGUpIHVzZXJzIGJhc2VkIHVwb24gdGhlIGhhcmREZWxldGUgYm9vbGVhbiBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBVc2luZyB0aGUgZHJ5UnVuIHBhcmFtZXRlciB5b3UgbWF5IGFsc28gcmVxdWVzdCB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb24gd2l0aG91dCBhY3R1YWxseSBkZWxldGluZyBvciBkZWFjdGl2YXRpbmcgYW55IHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJEZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSBVc2VyRGVsZXRlUmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gZGVsZXRlVXNlcnNCeVF1ZXJ5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIGRlbGV0ZVVzZXJzKHJlcXVlc3Q6IFVzZXJEZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VycyB3aXRoIHRoZSBnaXZlbiBpZHMsIG9yIHVzZXJzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBKU09OIHF1ZXJ5IG9yIHF1ZXJ5U3RyaW5nLlxuICAgKiBUaGUgb3JkZXIgb2YgcHJlZmVyZW5jZSBpcyBpZHMsIHF1ZXJ5IGFuZCB0aGVuIHF1ZXJ5U3RyaW5nLCBpdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHByb3ZpZGUgb25lIG9mIHRoZSB0aHJlZSBmb3IgdGhlIHJlcXVlc3QuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZWFjdGl2YXRlIG9yIHBlcm1hbmVudGx5IGRlbGV0ZSAoaGFyZC1kZWxldGUpIHVzZXJzIGJhc2VkIHVwb24gdGhlIGhhcmREZWxldGUgYm9vbGVhbiBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBVc2luZyB0aGUgZHJ5UnVuIHBhcmFtZXRlciB5b3UgbWF5IGFsc28gcmVxdWVzdCB0aGUgcmVzdWx0IG9mIHRoZSBhY3Rpb24gd2l0aG91dCBhY3R1YWxseSBkZWxldGluZyBvciBkZWFjdGl2YXRpbmcgYW55IHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VzZXJEZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSBVc2VyRGVsZXRlUmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBkZWxldGVVc2Vyc0J5UXVlcnkocmVxdWVzdDogVXNlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIFdlYkF1dGhuIGNyZWRlbnRpYWwgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZCBUaGUgSWQgb2YgdGhlIFdlYkF1dGhuIGNyZWRlbnRpYWwgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVXZWJBdXRobkNyZWRlbnRpYWwoaWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB3ZWJob29rIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIFRoZSBJZCBvZiB0aGUgd2ViaG9vayB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHdlYmhvb2tJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kSWQgVGhlIHR3by1mYWN0b3IgbWV0aG9kIGlkZW50aWZpZXIgeW91IHdpc2ggdG8gZGlzYWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgdHdvLWZhY3RvciBjb2RlIHVzZWQgdmVyaWZ5IHRoZSB0aGUgY2FsbGVyIGtub3dzIHRoZSB0d28tZmFjdG9yIHNlY3JldC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGlzYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIG1ldGhvZElkOiBzdHJpbmcsIGNvZGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ21ldGhvZElkJywgbWV0aG9kSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjb2RlJywgY29kZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIgdXNpbmcgYSBKU09OIGJvZHkgcmF0aGVyIHRoYW4gVVJMIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgVXNlciBmb3Igd2hpY2ggeW91J3JlIGRpc2FibGluZyB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvckRpc2FibGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGluZm9ybWF0aW9uIHRoYXQgY29udGFpbnMgdGhlIGNvZGUgYW5kIG1ldGhvZElkIGFsb25nIHdpdGggYW55IGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkaXNhYmxlVHdvRmFjdG9yV2l0aFJlcXVlc3QodXNlcklkOiBVVUlELCByZXF1ZXN0OiBUd29GYWN0b3JEaXNhYmxlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZW5hYmxlIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgdHdvLWZhY3RvciBlbmFibGUgcmVxdWVzdCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIGVuYWJsZVR3b0ZhY3Rvcih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFR3b0ZhY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBNYWtlcyBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgQXV0aG9yaXplIGVuZHBvaW50IGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgb24gdGhlIC9vYXV0aDIvYXV0aG9yaXplIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQuIFRoaXMgdmFsdWUgd2lsbCBiZSByZXF1aXJlZCBpZiBjbGllbnQgYXV0aGVudGljYXRpb24gaXMgZW5hYmxlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZGlyZWN0X3VyaSBUaGUgVVJJIHRvIHJlZGlyZWN0IHRvIHVwb24gYSBzdWNjZXNzZnVsIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZU9BdXRoQ29kZUZvckFjY2Vzc1Rva2VuKGNvZGU6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgcmVkaXJlY3RfdXJpOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NvZGUnLCBjb2RlKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ2F1dGhvcml6YXRpb25fY29kZScpO1xuICAgIGJvZHkuYXBwZW5kKCdyZWRpcmVjdF91cmknLCByZWRpcmVjdF91cmkpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2VzIGFuIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZSBhbmQgY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBNYWtlcyBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSBhdXRob3JpemF0aW9uIGNvZGUgcmV0dXJuZWQgZnJvbSB0aGUgQXV0aG9yaXplIGVuZHBvaW50IGFuZCBhIGNvZGVfdmVyaWZpZXIgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBvbiB0aGUgL29hdXRoMi9hdXRob3JpemUgcmVzcG9uc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVkaXJlY3RfdXJpIFRoZSBVUkkgdG8gcmVkaXJlY3QgdG8gdXBvbiBhIHN1Y2Nlc3NmdWwgcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGVfdmVyaWZpZXIgVGhlIHJhbmRvbSBzdHJpbmcgZ2VuZXJhdGVkIHByZXZpb3VzbHkuIFdpbGwgYmUgY29tcGFyZWQgd2l0aCB0aGUgY29kZV9jaGFsbGVuZ2Ugc2VudCBwcmV2aW91c2x5LCB3aGljaCBhbGxvd3MgdGhlIE9BdXRoIHByb3ZpZGVyIHRvIGF1dGhlbnRpY2F0ZSB5b3VyIGFwcC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW5Vc2luZ1BLQ0UoY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCByZWRpcmVjdF91cmk6IHN0cmluZywgY29kZV92ZXJpZmllcjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjb2RlJywgY29kZSk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdhdXRob3JpemF0aW9uX2NvZGUnKTtcbiAgICBib2R5LmFwcGVuZCgncmVkaXJlY3RfdXJpJywgcmVkaXJlY3RfdXJpKTtcbiAgICBib2R5LmFwcGVuZCgnY29kZV92ZXJpZmllcicsIGNvZGVfdmVyaWZpZXIpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgYSBSZWZyZXNoIFRva2VuIGZvciBhbiBBY2Nlc3MgVG9rZW4uXG4gICAqIElmIHlvdSB3aWxsIGJlIHVzaW5nIHRoZSBSZWZyZXNoIFRva2VuIEdyYW50LCB5b3Ugd2lsbCBtYWtlIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIHVzZXLigJlzIHJlZnJlc2ggdG9rZW4gZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlZnJlc2hfdG9rZW4gVGhlIHJlZnJlc2ggdG9rZW4gdGhhdCB5b3Ugd291bGQgbGlrZSB0byB1c2UgdG8gZXhjaGFuZ2UgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAoT3B0aW9uYWwpIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIGFuZCBpZiBvbWl0dGVkLCB0aGUgc2FtZSBzY29wZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBhdXRob3JpemF0aW9uIHJlcXVlc3Qgd2lsbCBiZSB1c2VkLiBJZiBwcm92aWRlZCB0aGUgc2NvcGVzIG11c3QgbWF0Y2ggdGhvc2UgcmVxdWVzdGVkIGR1cmluZyB0aGUgaW5pdGlhbCBhdXRob3JpemF0aW9uIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyX2NvZGUgKE9wdGlvbmFsKSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuIFRoaXMgY29kZSBpcyByZXF1aXJlZCBpZiB1c2luZyB0aGlzIGVuZHBvaW50IHRvIGFwcHJvdmUgdGhlIERldmljZSBBdXRob3JpemF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VSZWZyZXNoVG9rZW5Gb3JBY2Nlc3NUb2tlbihyZWZyZXNoX3Rva2VuOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHNjb3BlOiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdyZWZyZXNoX3Rva2VuJywgcmVmcmVzaF90b2tlbik7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdyZWZyZXNoX3Rva2VuJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgYSByZWZyZXNoIHRva2VuIGZvciBhIG5ldyBKV1QuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVmcmVzaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlZnJlc2ggcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUUmVmcmVzaFJlc3BvbnNlPj59XG4gICAqL1xuICBleGNoYW5nZVJlZnJlc2hUb2tlbkZvckpXVChyZXF1ZXN0OiBSZWZyZXNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUUmVmcmVzaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEpXVFJlZnJlc2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhjaGFuZ2UgVXNlciBDcmVkZW50aWFscyBmb3IgYSBUb2tlbi5cbiAgICogSWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlIFJlc291cmNlIE93bmVyIFBhc3N3b3JkIENyZWRlbnRpYWwgR3JhbnQsIHlvdSB3aWxsIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgdXNlcuKAmXMgZW1haWwgYW5kIHBhc3N3b3JkIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZSBUaGUgbG9naW4gaWRlbnRpZmllciBvZiB0aGUgdXNlci4gVGhlIGxvZ2luIGlkZW50aWZpZXIgY2FuIGJlIGVpdGhlciB0aGUgZW1haWwgb3IgdGhlIHVzZXJuYW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmQgVGhlIHVzZXLigJlzIHBhc3N3b3JkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS4gVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgaXMgcHJvdmlkZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQuIFRoaXMgdmFsdWUgbWF5IG9wdGlvbmFsbHkgYmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYm9keSBpbnN0ZWFkIG9mIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlIChPcHRpb25hbCkgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGlmIG9taXR0ZWQsIHRoZSBzYW1lIHNjb3BlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGF1dGhvcml6YXRpb24gcmVxdWVzdCB3aWxsIGJlIHVzZWQuIElmIHByb3ZpZGVkIHRoZSBzY29wZXMgbXVzdCBtYXRjaCB0aG9zZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBpbml0aWFsIGF1dGhvcml6YXRpb24gcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSAoT3B0aW9uYWwpIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS4gVGhpcyBjb2RlIGlzIHJlcXVpcmVkIGlmIHVzaW5nIHRoaXMgZW5kcG9pbnQgdG8gYXBwcm92ZSB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZVVzZXJDcmVkZW50aWFsc0ZvckFjY2Vzc1Rva2VuKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHNjb3BlOiBzdHJpbmcsIHVzZXJfY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCd1c2VybmFtZScsIHVzZXJuYW1lKTtcbiAgICBib2R5LmFwcGVuZCgncGFzc3dvcmQnLCBwYXNzd29yZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9zZWNyZXQnLCBjbGllbnRfc2VjcmV0KTtcbiAgICBib2R5LmFwcGVuZCgnZ3JhbnRfdHlwZScsICdwYXNzd29yZCcpO1xuICAgIGJvZHkuYXBwZW5kKCdzY29wZScsIHNjb3BlKTtcbiAgICBib2R5LmFwcGVuZCgndXNlcl9jb2RlJywgdXNlcl9jb2RlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZ2lucyB0aGUgZm9yZ290IHBhc3N3b3JkIHNlcXVlbmNlLCB3aGljaCBraWNrcyBvZmYgYW4gZW1haWwgdG8gdGhlIHVzZXIgc28gdGhhdCB0aGV5IGNhbiByZXNldCB0aGVpciBwYXNzd29yZC5cbiAgICpcbiAgICogQHBhcmFtIHtGb3Jnb3RQYXNzd29yZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIgc28gdGhhdCB0aGV5IGNhbiBiZSBlbWFpbGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlPj59XG4gICAqL1xuICBmb3Jnb3RQYXNzd29yZChyZXF1ZXN0OiBGb3Jnb3RQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9yZ290UGFzc3dvcmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZm9yZ290LXBhc3N3b3JkJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcgRW1haWwgVmVyaWZpY2F0aW9uIElkIHRvIGJlIHVzZWQgd2l0aCB0aGUgVmVyaWZ5IEVtYWlsIEFQSS4gVGhpcyBBUEkgd2lsbCBub3QgYXR0ZW1wdCB0byBzZW5kIGFuXG4gICAqIGVtYWlsIHRvIHRoZSBVc2VyLiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byBjb2xsZWN0IHRoZSB2ZXJpZmljYXRpb25JZCBmb3IgdXNlIHdpdGggYSB0aGlyZCBwYXJ0eSBzeXN0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVFbWFpbFZlcmlmaWNhdGlvbklkKGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5RW1haWxSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc2VuZFZlcmlmeUVtYWlsJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IFJTQSBvciBFQyBrZXkgcGFpciBvciBhbiBITUFDIHNlY3JldC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0tleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5L2dlbmVyYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBBcHBsaWNhdGlvbiBSZWdpc3RyYXRpb24gVmVyaWZpY2F0aW9uIElkIHRvIGJlIHVzZWQgd2l0aCB0aGUgVmVyaWZ5IFJlZ2lzdHJhdGlvbiBBUEkuIFRoaXMgQVBJIHdpbGwgbm90IGF0dGVtcHQgdG8gc2VuZCBhblxuICAgKiBlbWFpbCB0byB0aGUgVXNlci4gVGhpcyBBUEkgbWF5IGJlIHVzZWQgdG8gY29sbGVjdCB0aGUgdmVyaWZpY2F0aW9uSWQgZm9yIHVzZSB3aXRoIGEgdGhpcmQgcGFydHkgc3lzdGVtLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIGJlIHZlcmlmaWVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVSZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZChlbWFpbDogc3RyaW5nLCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3NlbmRWZXJpZnlQYXNzd29yZEVtYWlsJywgZmFsc2UpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdHdvLWZhY3RvciByZWNvdmVyeSBjb2RlcyBmb3IgYSB1c2VyLiBHZW5lcmF0aW5nIHR3by1mYWN0b3IgcmVjb3ZlcnkgY29kZXMgd2lsbCBpbnZhbGlkYXRlIGFueSBleGlzdGluZyByZWNvdmVyeSBjb2Rlcy4gXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBnZW5lcmF0ZSBuZXcgVHdvIEZhY3RvciByZWNvdmVyeSBjb2Rlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlVHdvRmFjdG9yUmVjb3ZlcnlDb2Rlcyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yL3JlY292ZXJ5LWNvZGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBUd28gRmFjdG9yIHNlY3JldCB0aGF0IGNhbiBiZSB1c2VkIHRvIGVuYWJsZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIFVzZXIuIFRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW5cbiAgICogYm90aCB0aGUgc2VjcmV0IGFuZCBhIEJhc2UzMiBlbmNvZGVkIGZvcm0gb2YgdGhlIHNlY3JldCB3aGljaCBjYW4gYmUgc2hvd24gdG8gYSBVc2VyIHdoZW4gdXNpbmcgYSAyIFN0ZXAgQXV0aGVudGljYXRpb25cbiAgICogYXBwbGljYXRpb24gc3VjaCBhcyBHb29nbGUgQXV0aGVudGljYXRvci5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlVHdvRmFjdG9yU2VjcmV0KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VjcmV0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZWNyZXQnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIFR3byBGYWN0b3Igc2VjcmV0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgVXNlci4gVGhlIHJlc3BvbnNlIHdpbGwgY29udGFpblxuICAgKiBib3RoIHRoZSBzZWNyZXQgYW5kIGEgQmFzZTMyIGVuY29kZWQgZm9ybSBvZiB0aGUgc2VjcmV0IHdoaWNoIGNhbiBiZSBzaG93biB0byBhIFVzZXIgd2hlbiB1c2luZyBhIDIgU3RlcCBBdXRoZW50aWNhdGlvblxuICAgKiBhcHBsaWNhdGlvbiBzdWNoIGFzIEdvb2dsZSBBdXRoZW50aWNhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlY3JldFJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVR3b0ZhY3RvclNlY3JldFVzaW5nSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8U2VjcmV0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZWNyZXQnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBsb2dpbiB2aWEgdGhpcmQtcGFydGllcyBpbmNsdWRpbmcgU29jaWFsIGxvZ2luLCBleHRlcm5hbCBPQXV0aCBhbmQgT3BlbklEIENvbm5lY3QsIGFuZCBvdGhlclxuICAgKiBsb2dpbiBzeXN0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHRoaXJkLXBhcnR5IGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0aGlyZC1wYXJ0eSBsb2dpblxuICAgKiAgICBwcm92aWRlcnMgdGhhdCBGdXNpb25BdXRoIHVzZXMgdG8gcmVjb25jaWxlIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgaWRlbnRpdHlQcm92aWRlckxvZ2luKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIFJTQSBvciBFQyBrZXkgcGFpciBvciBhbiBITUFDIHNlY3JldC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0tleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgaW1wb3J0S2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleS9pbXBvcnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgaW1wb3J0cyByZWZyZXNoIHRva2Vucy4gVGhpcyByZXF1ZXN0IHBlcmZvcm1zIG1pbmltYWwgdmFsaWRhdGlvbiBhbmQgcnVucyBiYXRjaCBpbnNlcnRzIG9mIHJlZnJlc2ggdG9rZW5zIHdpdGggdGhlXG4gICAqIGV4cGVjdGF0aW9uIHRoYXQgZWFjaCB0b2tlbiByZXByZXNlbnRzIGEgdXNlciB0aGF0IGFscmVhZHkgZXhpc3RzIGFuZCBpcyByZWdpc3RlcmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBGdXNpb25BdXRoXG4gICAqIEFwcGxpY2F0aW9uLiBUaGlzIGlzIGRvbmUgdG8gaW5jcmVhc2VzIHRoZSBpbnNlcnQgcGVyZm9ybWFuY2UuXG4gICAqIFxuICAgKiBUaGVyZWZvcmUsIGlmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IgZHVlIHRvIGEgZGF0YWJhc2Uga2V5IHZpb2xhdGlvbiwgdGhlIHJlc3BvbnNlIHdpbGwgbGlrZWx5IG9mZmVyIGEgZ2VuZXJpY1xuICAgKiBleHBsYW5hdGlvbi4gSWYgeW91IGVuY291bnRlciBhbiBlcnJvciwgeW91IG1heSBvcHRpb25hbGx5IGVuYWJsZSBhZGRpdGlvbmFsIHZhbGlkYXRpb24gdG8gcmVjZWl2ZSBhIEpTT04gcmVzcG9uc2VcbiAgICogYm9keSB3aXRoIHNwZWNpZmljIHZhbGlkYXRpb24gZXJyb3JzLiBUaGlzIHdpbGwgc2xvdyB0aGUgcmVxdWVzdCBkb3duIGJ1dCB3aWxsIGFsbG93IHlvdSB0byBpZGVudGlmeSB0aGUgY2F1c2Ugb2ZcbiAgICogdGhlIGZhaWx1cmUuIFNlZSB0aGUgdmFsaWRhdGVEYkNvbnN0cmFpbnRzIHJlcXVlc3QgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZnJlc2hUb2tlbkltcG9ydFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvZiB0aGUgcmVmcmVzaCB0b2tlbnMgdG8gaW1wb3J0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBpbXBvcnRSZWZyZXNoVG9rZW5zKHJlcXVlc3Q6IFJlZnJlc2hUb2tlbkltcG9ydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVmcmVzaC10b2tlbi9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWxrIGltcG9ydHMgdXNlcnMuIFRoaXMgcmVxdWVzdCBwZXJmb3JtcyBtaW5pbWFsIHZhbGlkYXRpb24gYW5kIHJ1bnMgYmF0Y2ggaW5zZXJ0cyBvZiB1c2VycyB3aXRoIHRoZSBleHBlY3RhdGlvblxuICAgKiB0aGF0IGVhY2ggdXNlciBkb2VzIG5vdCB5ZXQgZXhpc3QgYW5kIGVhY2ggcmVnaXN0cmF0aW9uIGNvcnJlc3BvbmRzIHRvIGFuIGV4aXN0aW5nIEZ1c2lvbkF1dGggQXBwbGljYXRpb24uIFRoaXMgaXMgZG9uZSB0b1xuICAgKiBpbmNyZWFzZXMgdGhlIGluc2VydCBwZXJmb3JtYW5jZS5cbiAgICogXG4gICAqIFRoZXJlZm9yZSwgaWYgeW91IGVuY291bnRlciBhbiBlcnJvciBkdWUgdG8gYSBkYXRhYmFzZSBrZXkgdmlvbGF0aW9uLCB0aGUgcmVzcG9uc2Ugd2lsbCBsaWtlbHkgb2ZmZXJcbiAgICogYSBnZW5lcmljIGV4cGxhbmF0aW9uLiBJZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yLCB5b3UgbWF5IG9wdGlvbmFsbHkgZW5hYmxlIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiB0byByZWNlaXZlIGEgSlNPTiByZXNwb25zZVxuICAgKiBib2R5IHdpdGggc3BlY2lmaWMgdmFsaWRhdGlvbiBlcnJvcnMuIFRoaXMgd2lsbCBzbG93IHRoZSByZXF1ZXN0IGRvd24gYnV0IHdpbGwgYWxsb3cgeW91IHRvIGlkZW50aWZ5IHRoZSBjYXVzZSBvZiB0aGUgZmFpbHVyZS4gU2VlXG4gICAqIHRoZSB2YWxpZGF0ZURiQ29uc3RyYWludHMgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7SW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9mIHRoZSB1c2VycyB0byBpbXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFVzZXJzKHJlcXVlc3Q6IEltcG9ydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvaW1wb3J0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGEgV2ViQXV0aG4gY3JlZGVudGlhbFxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuQ3JlZGVudGlhbEltcG9ydFJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIGltcG9ydGluZyB0aGUgY3JlZGVudGlhbFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBpbXBvcnRXZWJBdXRobkNyZWRlbnRpYWwocmVxdWVzdDogV2ViQXV0aG5DcmVkZW50aWFsSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vaW1wb3J0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5zcGVjdCBhbiBhY2Nlc3MgdG9rZW4gaXNzdWVkIGJ5IEZ1c2lvbkF1dGguXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gZm9yIHdoaWNoIHRoaXMgdG9rZW4gd2FzIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIFRoZSBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgYnkgdGhpcyBPQXV0aCBwcm92aWRlciBhcyB0aGUgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj59XG4gICAqL1xuICBpbnRyb3NwZWN0QWNjZXNzVG9rZW4oY2xpZW50X2lkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludHJvc3BlY3RSZXNwb25zZT4+IHtcbiAgICBsZXQgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCd0b2tlbicsIHRva2VuKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxJbnRyb3NwZWN0UmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvaW50cm9zcGVjdCcpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzc3VlIGEgbmV3IGFjY2VzcyB0b2tlbiAoSldUKSBmb3IgdGhlIHJlcXVlc3RlZCBBcHBsaWNhdGlvbiBhZnRlciBlbnN1cmluZyB0aGUgcHJvdmlkZWQgSldUIGlzIHZhbGlkLiBBIHZhbGlkXG4gICAqIGFjY2VzcyB0b2tlbiBpcyBwcm9wZXJseSBzaWduZWQgYW5kIG5vdCBleHBpcmVkLlxuICAgKiA8cD5cbiAgICogVGhpcyBBUEkgbWF5IGJlIHVzZWQgaW4gYW4gU1NPIGNvbmZpZ3VyYXRpb24gdG8gaXNzdWUgbmV3IHRva2VucyBmb3IgYW5vdGhlciBhcHBsaWNhdGlvbiBhZnRlciB0aGUgdXNlciBoYXNcbiAgICogb2J0YWluZWQgYSB2YWxpZCB0b2tlbiBmcm9tIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIEFwcGxpY2F0aW9uIElkIGZvciB3aGljaCB5b3UgYXJlIHJlcXVlc3RpbmcgYSBuZXcgYWNjZXNzIHRva2VuIGJlIGlzc3VlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuIChPcHRpb25hbCkgQW4gZXhpc3RpbmcgcmVmcmVzaCB0b2tlbiB1c2VkIHRvIHJlcXVlc3QgYSByZWZyZXNoIHRva2VuIGluIGFkZGl0aW9uIHRvIGEgSldUIGluIHRoZSByZXNwb25zZS5cbiAgICogICAgPHA+VGhlIHRhcmdldCBhcHBsaWNhdGlvbiByZXByZXNlbnRlZCBieSB0aGUgYXBwbGljYXRpb25JZCByZXF1ZXN0IHBhcmFtZXRlciBtdXN0IGhhdmUgcmVmcmVzaFxuICAgKiAgICB0b2tlbnMgZW5hYmxlZCBpbiBvcmRlciB0byByZWNlaXZlIGEgcmVmcmVzaCB0b2tlbiBpbiB0aGUgcmVzcG9uc2UuPC9wPlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJc3N1ZVJlc3BvbnNlPj59XG4gICAqL1xuICBpc3N1ZUpXVChhcHBsaWNhdGlvbklkOiBVVUlELCBlbmNvZGVkSldUOiBzdHJpbmcsIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJc3N1ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPElzc3VlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvaXNzdWUnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIGEgdXNlciB0byBGdXNpb25BdXRoLiBcbiAgICogXG4gICAqIFRoaXMgQVBJIG9wdGlvbmFsbHkgcmVxdWlyZXMgYW4gQVBJIGtleS4gU2VlIDxjb2RlPkFwcGxpY2F0aW9uLmxvZ2luQ29uZmlndXJhdGlvbi5yZXF1aXJlQXV0aGVudGljYXRpb248L2NvZGU+LlxuICAgKlxuICAgKiBAcGFyYW0ge0xvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luKHJlcXVlc3Q6IExvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBpbmcgdG8gRnVzaW9uQXV0aCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgd2FzIGF1dG9tYXRpY2FsbHkgbG9nZ2VkIGludG8gYW4gYXBwbGljYXRpb24uIFdoZW4gdXNpbmdcbiAgICogRnVzaW9uQXV0aCdzIFNTTyBvciB5b3VyIG93biwgeW91IHNob3VsZCBjYWxsIHRoaXMgaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQgaW4gY2VudHJhbGx5LCBidXQgYWNjZXNzZXMgYW5cbiAgICogYXBwbGljYXRpb24gd2hlcmUgdGhleSBubyBsb25nZXIgaGF2ZSBhIHNlc3Npb24uIFRoaXMgaGVscHMgY29ycmVjdGx5IHRyYWNrIGxvZ2luIGNvdW50cywgdGltZXMgYW5kIGhlbHBzIHdpdGhcbiAgICogcmVwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdGhhdCB3YXMgbG9nZ2VkIGluLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZXkgbG9nZ2VkIGludG8uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsZXJJUEFkZHJlc3MgKE9wdGlvbmFsKSBUaGUgSVAgYWRkcmVzcyBvZiB0aGUgZW5kLXVzZXIgdGhhdCBpcyBsb2dnaW5nIGluLiBJZiBhIG51bGwgdmFsdWUgaXMgcHJvdmlkZWRcbiAgICogICAgdGhlIElQIGFkZHJlc3Mgd2lsbCBiZSB0aGF0IG9mIHRoZSBjbGllbnQgb3IgbGFzdCBwcm94eSB0aGF0IHNlbnQgdGhlIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luUGluZyh1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGNhbGxlcklQQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaXBBZGRyZXNzJywgY2FsbGVySVBBZGRyZXNzKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIHBpbmcgdG8gRnVzaW9uQXV0aCBpbmRpY2F0aW5nIHRoYXQgdGhlIHVzZXIgd2FzIGF1dG9tYXRpY2FsbHkgbG9nZ2VkIGludG8gYW4gYXBwbGljYXRpb24uIFdoZW4gdXNpbmdcbiAgICogRnVzaW9uQXV0aCdzIFNTTyBvciB5b3VyIG93biwgeW91IHNob3VsZCBjYWxsIHRoaXMgaWYgdGhlIHVzZXIgaXMgYWxyZWFkeSBsb2dnZWQgaW4gY2VudHJhbGx5LCBidXQgYWNjZXNzZXMgYW5cbiAgICogYXBwbGljYXRpb24gd2hlcmUgdGhleSBubyBsb25nZXIgaGF2ZSBhIHNlc3Npb24uIFRoaXMgaGVscHMgY29ycmVjdGx5IHRyYWNrIGxvZ2luIGNvdW50cywgdGltZXMgYW5kIGhlbHBzIHdpdGhcbiAgICogcmVwb3J0aW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0xvZ2luUGluZ1JlcXVlc3R9IHJlcXVlc3QgVGhlIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjcmVkZW50aWFscyB1c2VkIHRvIGxvZyB0aGVtIGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBsb2dpblBpbmdXaXRoUmVxdWVzdChyZXF1ZXN0OiBMb2dpblBpbmdSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExvZ291dCBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIGFjY2VzcyB0b2tlbiBjb29raWVzIGlmIHRoZXkgZXhpc3Qgb24gdGhlXG4gICAqIGNsaWVudCBhbmQgcmV2b2tlIHRoZSByZWZyZXNoIHRva2VuIHN0b3JlZC4gVGhpcyBBUEkgZG9lcyBub3RoaW5nIGlmIHRoZSByZXF1ZXN0IGRvZXMgbm90IGNvbnRhaW4gYW4gYWNjZXNzXG4gICAqIHRva2VuIG9yIHJlZnJlc2ggdG9rZW4gY29va2llcy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWwgV2hlbiB0aGlzIHZhbHVlIGlzIHNldCB0byB0cnVlIGFsbCBvZiB0aGUgcmVmcmVzaCB0b2tlbnMgaXNzdWVkIHRvIHRoZSBvd25lciBvZiB0aGVcbiAgICogICAgcHJvdmlkZWQgdG9rZW4gd2lsbCBiZSByZXZva2VkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuIChPcHRpb25hbCkgVGhlIHJlZnJlc2hfdG9rZW4gYXMgYSByZXF1ZXN0IHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNvbWluZyBpbiB2aWEgYSBjb29raWUuXG4gICAqICAgIElmIHByb3ZpZGVkIHRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBjb29raWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGxvZ291dChnbG9iYWw6IGJvb2xlYW4sIHJlZnJlc2hUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2dsb2JhbCcsIGdsb2JhbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlZnJlc2hUb2tlbicsIHJlZnJlc2hUb2tlbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBMb2dvdXQgQVBJIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgdG8gcmVtb3ZlIHRoZSByZWZyZXNoIHRva2VuIGFuZCBhY2Nlc3MgdG9rZW4gY29va2llcyBpZiB0aGV5IGV4aXN0IG9uIHRoZVxuICAgKiBjbGllbnQgYW5kIHJldm9rZSB0aGUgcmVmcmVzaCB0b2tlbiBzdG9yZWQuIFRoaXMgQVBJIHRha2VzIHRoZSByZWZyZXNoIHRva2VuIGluIHRoZSBKU09OIGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9nb3V0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gbG9nb3V0IHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBsb2dvdXRXaXRoUmVxdWVzdChyZXF1ZXN0OiBMb2dvdXRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbG9nb3V0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIGRvbWFpbi4gQSAyMDAgcmVzcG9uc2UgY29kZSBpbmRpY2F0ZXMgdGhlIGRvbWFpbiBpcyBtYW5hZ2VkXG4gICAqIGJ5IGEgcmVnaXN0ZXJlZCBpZGVudGl0eSBwcm92aWRlci4gQSA0MDQgaW5kaWNhdGVzIHRoZSBkb21haW4gaXMgbm90IG1hbmFnZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBvciBlbWFpbCBhZGRyZXNzIHRvIGxvb2t1cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9va3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvb2t1cElkZW50aXR5UHJvdmlkZXIoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvb2t1cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvb2t1cFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xvb2t1cCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkb21haW4nLCBkb21haW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIGEgdGVtcG9yYWwgdXNlciBhY3Rpb24gYnkgY2hhbmdpbmcgdGhlIGV4cGlyYXRpb24gb2YgdGhlIGFjdGlvbiBhbmQgb3B0aW9uYWxseSBhZGRpbmcgYSBjb21tZW50IHRvIHRoZVxuICAgKiBhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWN0aW9uSWQgVGhlIElkIG9mIHRoZSBhY3Rpb24gdG8gbW9kaWZ5LiBUaGlzIGlzIHRlY2huaWNhbGx5IHRoZSB1c2VyIGFjdGlvbiBsb2cgaWQuXG4gICAqIEBwYXJhbSB7QWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1vZGlmaWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIG1vZGlmeUFjdGlvbihhY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIGxvZ2luIHJlcXVlc3QgdXNpbmcgYSBwYXNzd29yZGxlc3MgY29kZVxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY29tcGxldGUgbG9naW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhc3N3b3JkbGVzc0xvZ2luKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc0xvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcGFzc3dvcmRsZXNzL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBhdXRoZW50aWNhdGlvbiBBUEkga2V5IGJ5IGdpdmVuIGlkXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBhdXRoZW50aWNhdGlvbiBrZXkuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gYXBpIGtleSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSB0aGUgQVBJS2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBUElLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEFQSUtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXBwbGljYXRpb24gcm9sZSB3aXRoIHRoZSBnaXZlbiBpZCBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0aGF0IHRoZSByb2xlIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIFRoZSBJZCBvZiB0aGUgcm9sZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHJvbGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQXBwbGljYXRpb25Sb2xlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJvbGVJZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBjb25uZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgY29ubmVjdG9yIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQsIHJlcXVlc3Q6IENvbm5lY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgY29uc2VudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBlbWFpbCB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgZW1haWwgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBFbnRpdHkgVHlwZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgRW50aXR5IFR5cGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBncm91cCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBncm91cCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hHcm91cChncm91cElkOiBVVUlELCByZXF1ZXN0OiBHcm91cFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBpZGVudGl0eSBwcm92aWRlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgdXBkYXRlZCBpZGVudGl0eSBwcm92aWRlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaElkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCByZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGF2YWlsYWJsZSBpbnRlZ3JhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SW50ZWdyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGludGVncmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEludGVncmF0aW9ucyhyZXF1ZXN0OiBJbnRlZ3JhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SW50ZWdyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2ludGVncmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGxhbWJkYSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCBUaGUgSWQgb2YgdGhlIGxhbWJkYSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TGFtYmRhUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBsYW1iZGEgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaExhbWJkYShsYW1iZGFJZDogVVVJRCwgcmVxdWVzdDogTGFtYmRhUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBtZXNzYWdlIHRlbXBsYXRlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hNZXNzYWdlVGVtcGxhdGUobWVzc2FnZVRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NhZ2VUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIG1lc3NlbmdlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCBUaGUgSWQgb2YgdGhlIG1lc3NlbmdlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2VuZ2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBtZXNzZW5nZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaE1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCwgcmVxdWVzdDogTWVzc2VuZ2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSByZWdpc3RyYXRpb24gZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIGlkIGFuZCB0aGUgYXBwbGljYXRpb24gZGVmaW5lZCBpbiB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBnb2luZyB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge1JlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1N5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHN5c3RlbSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoU3lzdGVtQ29uZmlndXJhdGlvbihyZXF1ZXN0OiBTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS1jb25maWd1cmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHRlbmFudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGVuYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB0ZW5hbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFRlbmFudCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSB0aGVtZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1RoZW1lUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB0aGVtZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hUaGVtZSh0aGVtZUlkOiBVVUlELCByZXF1ZXN0OiBUaGVtZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hVc2VyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB1c2VyIGFjdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZWFzb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgYWN0aW9uIHJlYXNvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVhc29uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIENvbnNlbnQgSWRcbiAgICogQHBhcmFtIHtVc2VyQ29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdGl2YXRlcyB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHJlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlYWN0aXZhdGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVhY3RpdmF0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZhdGVzIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gcmVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZWFjdGl2YXRlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlYWN0aXZhdGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFjdGl2YXRlcyB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gcmVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZWFjdGl2YXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWFjdGl2YXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25jaWxlIGEgVXNlciB0byBGdXNpb25BdXRoIHVzaW5nIEpXVCBpc3N1ZWQgZnJvbSBhbm90aGVyIElkZW50aXR5IFByb3ZpZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlY29uY2lsZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgdG8gcmVjb25jaWxlIHRoZSBVc2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICByZWNvbmNpbGVKV1QocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlY29uY2lsZScpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3QgYSByZWZyZXNoIG9mIHRoZSBFbnRpdHkgc2VhcmNoIGluZGV4LiBUaGlzIEFQSSBpcyBub3QgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBhbmQgdGhlIHNlYXJjaCBpbmRleCB3aWxsIGJlY29tZSBjb25zaXN0ZW50IGluIGFcbiAgICogcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4gVGhlcmUgbWF5IGJlIHNjZW5hcmlvcyB3aGVyZSB5b3UgbWF5IHdpc2ggdG8gbWFudWFsbHkgcmVxdWVzdCBhbiBpbmRleCByZWZyZXNoLiBPbmUgZXhhbXBsZSBtYXkgYmUgXG4gICAqIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNlYXJjaCBBUEkgb3IgRGVsZXRlIFRlbmFudCBBUEkgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgRW50aXR5IENyZWF0ZSBldGMsIHlvdSBtYXkgd2lzaCB0byByZXF1ZXN0IGEgcmVmcmVzaCB0b1xuICAgKiAgZW5zdXJlIHRoZSBpbmRleCBpbW1lZGlhdGVseSBjdXJyZW50IGJlZm9yZSBtYWtpbmcgYSBxdWVyeSByZXF1ZXN0IHRvIHRoZSBzZWFyY2ggaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlZnJlc2hFbnRpdHlTZWFyY2hJbmRleCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvc2VhcmNoJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBhIHJlZnJlc2ggb2YgdGhlIFVzZXIgc2VhcmNoIGluZGV4LiBUaGlzIEFQSSBpcyBub3QgZ2VuZXJhbGx5IG5lY2Vzc2FyeSBhbmQgdGhlIHNlYXJjaCBpbmRleCB3aWxsIGJlY29tZSBjb25zaXN0ZW50IGluIGFcbiAgICogcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4gVGhlcmUgbWF5IGJlIHNjZW5hcmlvcyB3aGVyZSB5b3UgbWF5IHdpc2ggdG8gbWFudWFsbHkgcmVxdWVzdCBhbiBpbmRleCByZWZyZXNoLiBPbmUgZXhhbXBsZSBtYXkgYmUgXG4gICAqIGlmIHlvdSBhcmUgdXNpbmcgdGhlIFNlYXJjaCBBUEkgb3IgRGVsZXRlIFRlbmFudCBBUEkgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGEgVXNlciBDcmVhdGUgZXRjLCB5b3UgbWF5IHdpc2ggdG8gcmVxdWVzdCBhIHJlZnJlc2ggdG9cbiAgICogIGVuc3VyZSB0aGUgaW5kZXggaW1tZWRpYXRlbHkgY3VycmVudCBiZWZvcmUgbWFraW5nIGEgcXVlcnkgcmVxdWVzdCB0byB0aGUgc2VhcmNoIGluZGV4LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWZyZXNoVXNlclNlYXJjaEluZGV4KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnZW5lcmF0ZXMgYW55IGtleXMgdGhhdCBhcmUgdXNlZCBieSB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZWdlbmVyYXRlUmVhY3RvcktleXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIHVzZXIgZm9yIGFuIGFwcGxpY2F0aW9uLiBJZiB5b3UgcHJvdmlkZSB0aGUgVXNlciBhbmQgdGhlIFVzZXJSZWdpc3RyYXRpb24gb2JqZWN0IG9uIHRoaXMgcmVxdWVzdCwgaXRcbiAgICogd2lsbCBjcmVhdGUgdGhlIHVzZXIgYXMgd2VsbCBhcyByZWdpc3RlciB0aGVtIGZvciB0aGUgYXBwbGljYXRpb24uIFRoaXMgaXMgY2FsbGVkIGEgRnVsbCBSZWdpc3RyYXRpb24uIEhvd2V2ZXIsIGlmXG4gICAqIHlvdSBvbmx5IHByb3ZpZGUgdGhlIFVzZXJSZWdpc3RyYXRpb24gb2JqZWN0LCB0aGVuIHRoZSB1c2VyIG11c3QgYWxyZWFkeSBleGlzdCBhbmQgdGhleSB3aWxsIGJlIHJlZ2lzdGVyZWQgZm9yIHRoZVxuICAgKiBhcHBsaWNhdGlvbi4gVGhlIHVzZXIgaWQgY2FuIGFsc28gYmUgcHJvdmlkZWQgYW5kIGl0IHdpbGwgZWl0aGVyIGJlIHVzZWQgdG8gbG9vayB1cCBhbiBleGlzdGluZyB1c2VyIG9yIGl0IHdpbGwgYmVcbiAgICogdXNlZCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgVXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYmVpbmcgcmVnaXN0ZXJlZCBmb3IgdGhlIGFwcGxpY2F0aW9uIGFuZCBvcHRpb25hbGx5IGNyZWF0ZWQuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IG9wdGlvbmFsbHkgY29udGFpbnMgdGhlIFVzZXIgYW5kIG11c3QgY29udGFpbiB0aGUgVXNlclJlZ2lzdHJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlZ2lzdGVyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogUmVnaXN0cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcXVlc3RzIEVsYXN0aWNzZWFyY2ggdG8gZGVsZXRlIGFuZCByZWJ1aWxkIHRoZSBpbmRleCBmb3IgRnVzaW9uQXV0aCB1c2VycyBvciBlbnRpdGllcy4gQmUgdmVyeSBjYXJlZnVsIHdoZW4gcnVubmluZyB0aGlzIHJlcXVlc3QgYXMgaXQgd2lsbCBcbiAgICogaW5jcmVhc2UgdGhlIENQVSBhbmQgSS9PIGxvYWQgb24geW91ciBkYXRhYmFzZSB1bnRpbCB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy4gR2VuZXJhbGx5IHNwZWFraW5nIHlvdSBkbyBub3QgZXZlciBuZWVkIHRvIHJ1biB0aGlzIG9wZXJhdGlvbiB1bmxlc3MgXG4gICAqIGluc3RydWN0ZWQgYnkgRnVzaW9uQXV0aCBzdXBwb3J0LCBvciBpZiB5b3UgYXJlIG1pZ3JhdGluZyBhIGRhdGFiYXNlIGFub3RoZXIgc3lzdGVtIGFuZCB5b3UgYXJlIG5vdCBicmluaW5nIGFsb25nIHRoZSBFbGFzdGljc2VhcmNoIGluZGV4LiBcbiAgICogXG4gICAqIFlvdSBoYXZlIGJlZW4gd2FybmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlaW5kZXhSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIGluZGV4IG5hbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlaW5kZXgocmVxdWVzdDogUmVpbmRleFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9yZWluZGV4JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIHVzZXIgZnJvbSB0aGUgZmFtaWx5IHdpdGggdGhlIGdpdmVuIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSBpZCBvZiB0aGUgZmFtaWx5IHRvIHJlbW92ZSB0aGUgdXNlciBmcm9tLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgaWQgb2YgdGhlIHVzZXIgdG8gcmVtb3ZlIGZyb20gdGhlIGZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVtb3ZlVXNlckZyb21GYW1pbHkoZmFtaWx5SWQ6IFVVSUQsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXNlbmRzIHRoZSB2ZXJpZmljYXRpb24gZW1haWwgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmVzZW5kRW1haWxWZXJpZmljYXRpb24oZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtc2VuZHMgdGhlIHZlcmlmaWNhdGlvbiBlbWFpbCB0byB0aGUgdXNlci4gSWYgdGhlIEFwcGxpY2F0aW9uIGhhcyBjb25maWd1cmVkIGEgc3BlY2lmaWMgZW1haWwgdGVtcGxhdGUgdGhpcyB3aWxsIGJlIHVzZWRcbiAgICogaW5zdGVhZCBvZiB0aGUgdGVuYW50IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgdW5pcXVlIEFwcGxpY2F0aW9uIElkIHRvIHVzZWQgdG8gcmVzb2x2ZSBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICByZXNlbmRFbWFpbFZlcmlmaWNhdGlvbldpdGhBcHBsaWNhdGlvblRlbXBsYXRlKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5RW1haWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtc2VuZHMgdGhlIGFwcGxpY2F0aW9uIHJlZ2lzdHJhdGlvbiB2ZXJpZmljYXRpb24gZW1haWwgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgdmVyaWZpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXNlbmRSZWdpc3RyYXRpb25WZXJpZmljYXRpb24oZW1haWw6IHN0cmluZywgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYW4gYXV0aGVudGljYXRpb24gQVBJIGtleSBmb3IgdGhlIGdpdmVuIGlkXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBBUEkga2V5IHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBUElLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFQSUtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBpLWtleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIGFjdGlvbiBsb2cgKHRoZSBsb2cgb2YgYSB1c2VyIGFjdGlvbiB0aGF0IHdhcyB0YWtlbiBvbiBhIHVzZXIgcHJldmlvdXNseSkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY3Rpb25JZCBUaGUgSWQgb2YgdGhlIGFjdGlvbiB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aW9uKGFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC4gVGhpcyB3aWxsIHJldHVybiBhbGwgdGltZSBiYXNlZCBhY3Rpb25zIHRoYXQgYXJlIGFjdGl2ZSxcbiAgICogYW5kIGluYWN0aXZlIGFzIHdlbGwgYXMgbm9uLXRpbWUgYmFzZWQgYWN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGZldGNoIHRoZSBhY3Rpb25zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aW9ucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCB0aGF0IGFyZSBjdXJyZW50bHkgcHJldmVudGluZyB0aGUgVXNlciBmcm9tIGxvZ2dpbmcgaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBmZXRjaCB0aGUgYWN0aW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFjdGlvbnNQcmV2ZW50aW5nTG9naW4odXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3ByZXZlbnRpbmdMb2dpbicsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUuXG4gICAqIEFuIGFjdGl2ZSBhY3Rpb24gbWVhbnMgb25lIHRoYXQgaXMgdGltZSBiYXNlZCBhbmQgaGFzIG5vdCBiZWVuIGNhbmNlbGVkLCBhbmQgaGFzIG5vdCBlbmRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGZldGNoIHRoZSBhY3Rpb25zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aXZlQWN0aW9ucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYWN0aXZlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBhcHBsaWNhdGlvbiBmb3IgdGhlIGdpdmVuIGlkIG9yIGFsbCBvZiB0aGUgYXBwbGljYXRpb25zIGlmIHRoZSBpZCBpcyBudWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFwcGxpY2F0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBcHBsaWNhdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgYXVkaXQgbG9nIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhdWRpdExvZ0lkIFRoZSBJZCBvZiB0aGUgYXVkaXQgbG9nIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUF1ZGl0TG9nKGF1ZGl0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBdWRpdExvZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2F1ZGl0LWxvZycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhdWRpdExvZ0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGNvbm5lY3RvciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3Rvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbm5lY3RvcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbm5lY3RvcnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIENvbnNlbnQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29uc2VudChjb25zZW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbnNlbnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25zZW50cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gaWQsIGl0IHdpbGwgb25seVxuICAgKiByZXR1cm4gdGhlIGRhaWx5IGFjdGl2ZSBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZURhaWx5QWN0aXZlUmVwb3J0KGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxEYWlseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxEYWlseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9kYWlseS1hY3RpdmUtdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZW1haWwgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgZW1haWwgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgZW1haWwgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwcmV2aWV3IG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdC4gVGhpcyBhbGxvd3MgeW91IHRvIHByZXZpZXcgYW4gZW1haWwgdGVtcGxhdGUgdGhhdFxuICAgKiBoYXNuJ3QgYmVlbiBzYXZlZCB0byB0aGUgZGF0YWJhc2UgeWV0LiBUaGUgZW50aXJlIGVtYWlsIHRlbXBsYXRlIGRvZXMgbm90IG5lZWQgdG8gYmUgcHJvdmlkZWQgb24gdGhlIHJlcXVlc3QuIFRoaXNcbiAgICogd2lsbCBjcmVhdGUgdGhlIHByZXZpZXcgYmFzZWQgb24gd2hhdGV2ZXIgaXMgZ2l2ZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7UHJldmlld1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgZW1haWwgdGVtcGxhdGUgYW5kIG9wdGlvbmFsbHkgYSBsb2NhbGUgdG8gcmVuZGVyIGl0IGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQcmV2aWV3UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW1haWxUZW1wbGF0ZVByZXZpZXcocmVxdWVzdDogUHJldmlld1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxQcmV2aWV3UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZS9wcmV2aWV3JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZW1haWwgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW1haWxUZW1wbGF0ZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBFbnRpdHkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW50aXR5KGVudGl0eUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFuIEVudGl0eSBHcmFudCBmb3IgdGhlIGdpdmVuIEVudGl0eSBhbmQgVXNlci9FbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkuXG4gICAqIEBwYXJhbSB7VVVJRH0gcmVjaXBpZW50RW50aXR5SWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgVXNlciB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVudGl0eUdyYW50KGVudGl0eUlkOiBVVUlELCByZWNpcGllbnRFbnRpdHlJZDogVVVJRCwgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eUdyYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5SWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcImdyYW50XCIpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWNpcGllbnRFbnRpdHlJZCcsIHJlY2lwaWVudEVudGl0eUlkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEVudGl0eSBUeXBlIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IFR5cGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgRW50aXR5IFR5cGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW50aXR5VHlwZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgZXZlbnQgbG9nIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBldmVudExvZ0lkIFRoZSBJZCBvZiB0aGUgZXZlbnQgbG9nIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUV2ZW50TG9nKGV2ZW50TG9nSWQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFdmVudExvZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2V2ZW50LWxvZycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChldmVudExvZ0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBmYW1pbGllcyB0aGF0IGEgdXNlciBiZWxvbmdzIHRvLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgVXNlcidzIGlkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZhbWlsaWVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBtZW1iZXJzIG9mIGEgZmFtaWx5IGJ5IHRoZSB1bmlxdWUgRmFtaWx5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEZhbWlseS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRmFtaWx5TWVtYmVyc0J5RmFtaWx5SWQoZmFtaWx5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZhbWlseVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGZvcm0gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZm9ybUlkIFRoZSBJZCBvZiB0aGUgZm9ybS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZvcm0oZm9ybUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGZvcm0gZmllbGQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmllbGRJZCBUaGUgSWQgb2YgdGhlIGZvcm0gZmllbGQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZpZWxkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGZvcm1zIGZpZWxkc1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGb3JtRmllbGRzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybUZpZWxkUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGZvcm1zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRm9ybXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGdyb3VwIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZ3JvdXBJZCBUaGUgSWQgb2YgdGhlIGdyb3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUdyb3VwKGdyb3VwSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGdyb3VwSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGdyb3Vwcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVHcm91cHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3Qgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaXBBY2Nlc3NDb250cm9sTGlzdElkIFRoZSBJZCBvZiB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUlQQWNjZXNzQ29udHJvbExpc3QoaXBBY2Nlc3NDb250cm9sTGlzdElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpcEFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgZm9yIHRoZSBnaXZlbiBpZCBvciBhbGwgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVycyBpZiB0aGUgaWQgaXMgbnVsbC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIGlkZW50aXR5IHByb3ZpZGVyIElkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBvbmUgb3IgbW9yZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIHR5cGUuIEZvciB0eXBlcyBzdWNoIGFzIEdvb2dsZSwgRmFjZWJvb2ssIFR3aXR0ZXIgYW5kIExpbmtlZEluLCBvbmx5IGEgc2luZ2xlIFxuICAgKiBpZGVudGl0eSBwcm92aWRlciBjYW4gZXhpc3QuIEZvciB0eXBlcyBzdWNoIGFzIE9wZW5JRCBDb25uZWN0IGFuZCBTQU1MdjIgbW9yZSB0aGFuIG9uZSBpZGVudGl0eSBwcm92aWRlciBjYW4gYmUgY29uZmlndXJlZCBzbyB0aGlzIHJlcXVlc3QgXG4gICAqIG1heSByZXR1cm4gbXVsdGlwbGUgaWRlbnRpdHkgcHJvdmlkZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJUeXBlfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUlkZW50aXR5UHJvdmlkZXJCeVR5cGUodHlwZTogSWRlbnRpdHlQcm92aWRlclR5cGUpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd0eXBlJywgdHlwZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgaWRlbnRpdHkgcHJvdmlkZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSWRlbnRpdHlQcm92aWRlcnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgdGhhdCBhcmUgY3VycmVudGx5IGluYWN0aXZlLlxuICAgKiBBbiBpbmFjdGl2ZSBhY3Rpb24gbWVhbnMgb25lIHRoYXQgaXMgdGltZSBiYXNlZCBhbmQgaGFzIGJlZW4gY2FuY2VsZWQgb3IgaGFzIGV4cGlyZWQsIG9yIGlzIG5vdCB0aW1lIGJhc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJbmFjdGl2ZUFjdGlvbnModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FjdGl2ZScsIGZhbHNlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGluYWN0aXZlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUluYWN0aXZlQXBwbGljYXRpb25zKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2luYWN0aXZlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb25zIHRoYXQgYXJlIGN1cnJlbnRseSBpbmFjdGl2ZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUluYWN0aXZlVXNlckFjdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2luYWN0aXZlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBhdmFpbGFibGUgaW50ZWdyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUludGVncmF0aW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJbnRlZ3JhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2ludGVncmF0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBQdWJsaWMgS2V5IGNvbmZpZ3VyZWQgZm9yIHZlcmlmeWluZyBKU09OIFdlYiBUb2tlbnMgKEpXVCkgYnkgdGhlIGtleSBJZCAoa2lkKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleUlkIFRoZSBJZCBvZiB0aGUgcHVibGljIGtleSAoa2lkKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSldUUHVibGljS2V5KGtleUlkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFB1YmxpY0tleVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9wdWJsaWMta2V5JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2tpZCcsIGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIFB1YmxpYyBLZXkgY29uZmlndXJlZCBmb3IgdmVyaWZ5aW5nIHRoZSBKU09OIFdlYiBUb2tlbnMgKEpXVCkgaXNzdWVkIGJ5IHRoZSBMb2dpbiBBUEkgYnkgdGhlIEFwcGxpY2F0aW9uIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIEFwcGxpY2F0aW9uIGZvciB3aGljaCB0aGlzIGtleSBpcyB1c2VkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVKV1RQdWJsaWNLZXlCeUFwcGxpY2F0aW9uSWQoYXBwbGljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQdWJsaWNLZXlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcHVibGljLWtleScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCBQdWJsaWMgS2V5cyBjb25maWd1cmVkIGZvciB2ZXJpZnlpbmcgSlNPTiBXZWIgVG9rZW5zIChKV1QpLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVKV1RQdWJsaWNLZXlzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UHVibGljS2V5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3B1YmxpYy1rZXknKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHB1YmxpYyBrZXlzIHVzZWQgYnkgRnVzaW9uQXV0aCB0byBjcnlwdG9ncmFwaGljYWxseSB2ZXJpZnkgSldUcyB1c2luZyB0aGUgSlNPTiBXZWIgS2V5IGZvcm1hdC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SldLU1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUpzb25XZWJLZXlTZXQoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV0tTUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SldLU1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvLndlbGwta25vd24vandrcy5qc29uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBrZXkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlS2V5KGtleUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUga2V5cy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlS2V5cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFtYmRhIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgVGhlIElkIG9mIHRoZSBsYW1iZGEuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUxhbWJkYShsYW1iZGFJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGxhbWJkYXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUxhbWJkYXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBsYW1iZGFzIGZvciB0aGUgcHJvdmlkZWQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHtMYW1iZGFUeXBlfSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBsYW1iZGEgdG8gcmV0dXJuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVMYW1iZGFzQnlUeXBlKHR5cGU6IExhbWJkYVR5cGUpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd0eXBlJywgdHlwZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsb2dpbiByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUxvZ2luUmVwb3J0KGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IGRvbid0IHNwZWNpZnkgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIG1lc3NhZ2UgdGVtcGxhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHByZXZpZXcgb2YgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QsIG5vcm1hbGl6ZWQgdG8gYSBnaXZlbiBsb2NhbGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgZW1haWwgdGVtcGxhdGUgYW5kIG9wdGlvbmFsbHkgYSBsb2NhbGUgdG8gcmVuZGVyIGl0IGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2FnZVRlbXBsYXRlUHJldmlldyhyZXF1ZXN0OiBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUvcHJldmlldycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIG1lc3NhZ2UgdGVtcGxhdGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzYWdlVGVtcGxhdGVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbWVzc2VuZ2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIFRoZSBJZCBvZiB0aGUgbWVzc2VuZ2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NlbmdlclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbWVzc2VuZ2Vycy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2VuZ2VycygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NlbmdlclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbW9udGhseSBhY3RpdmUgdXNlciByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5XG4gICAqIHJldHVybiB0aGUgbW9udGhseSBhY3RpdmUgY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1vbnRobHlBY3RpdmVSZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9tb250aGx5LWFjdGl2ZS11c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBPYXV0aDIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uIGZvciB0aGUgZ2l2ZW4gQXBwbGljYXRpb24gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIEFwcGxpY2F0aW9uIHRvIHJldHJpZXZlIE9BdXRoIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU9hdXRoQ29uZmlndXJhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxPQXV0aENvbmZpZ3VyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcIm9hdXRoLWNvbmZpZ3VyYXRpb25cIilcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgd2VsbCBrbm93biBPcGVuSUQgQ29uZmlndXJhdGlvbiBKU09OIGRvY3VtZW50XG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE9wZW5JZENvbmZpZ3VyYXRpb24+Pn1cbiAgICovXG4gIHJldHJpZXZlT3BlbklkQ29uZmlndXJhdGlvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE9wZW5JZENvbmZpZ3VyYXRpb24+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8T3BlbklkQ29uZmlndXJhdGlvbiwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXNzd29yZCB2YWxpZGF0aW9uIHJ1bGVzIGZvciBhIHNwZWNpZmljIHRlbmFudC4gVGhpcyBtZXRob2QgcmVxdWlyZXMgYSB0ZW5hbnRJZCB0byBiZSBwcm92aWRlZCBcbiAgICogdGhyb3VnaCB0aGUgdXNlIG9mIGEgVGVuYW50IHNjb3BlZCBBUEkga2V5IG9yIGFuIEhUVFAgaGVhZGVyIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCB0byBzcGVjaWZ5IHRoZSBUZW5hbnQgSWQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBkb2VzIG5vdCByZXF1aXJlIGFuIEFQSSBrZXkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50L3Bhc3N3b3JkLXZhbGlkYXRpb24tcnVsZXMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIHZhbGlkYXRpb24gcnVsZXMgZm9yIGEgc3BlY2lmaWMgdGVuYW50LlxuICAgKiBcbiAgICogVGhpcyBBUEkgZG9lcyBub3QgcmVxdWlyZSBhbiBBUEkga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzV2l0aFRlbmFudElkKHRlbmFudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50L3Bhc3N3b3JkLXZhbGlkYXRpb24tcnVsZXMnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNoaWxkcmVuIGZvciB0aGUgZ2l2ZW4gcGFyZW50IGVtYWlsIGFkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRFbWFpbCBUaGUgZW1haWwgb2YgdGhlIHBhcmVudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UGVuZGluZ1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVBlbmRpbmdDaGlsZHJlbihwYXJlbnRFbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQZW5kaW5nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UGVuZGluZ1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHkvcGVuZGluZycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdwYXJlbnRFbWFpbCcsIHBhcmVudEVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3RvciBtZXRyaWNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlYWN0b3JNZXRyaWNzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVhY3Rvck1ldHJpY3NSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3IvbWV0cmljcycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yIHN0YXR1cy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVhY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlYWN0b3JTdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVhY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxhc3QgbnVtYmVyIG9mIGxvZ2luIHJlY29yZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIGluaXRpYWwgcmVjb3JkLiBlLmcuIDAgaXMgdGhlIGxhc3QgbG9naW4sIDEwMCB3aWxsIGJlIHRoZSAxMDB0aCBtb3N0IHJlY2VudCBsb2dpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IChPcHRpb25hbCwgZGVmYXVsdHMgdG8gMTApIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWNlbnRMb2dpbnMob2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVjZW50TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVjZW50LWxvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ29mZnNldCcsIG9mZnNldClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xpbWl0JywgbGltaXQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHVuaXF1ZSBJZC4gVGhpcyBpcyBub3QgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgcmVmcmVzaCB0b2tlbi4gSWYgeW91IGhhdmUgdGhhdCwgeW91IGFscmVhZHkgaGF2ZSB3aGF0IHlvdSBuZWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRva2VuSWQgVGhlIElkIG9mIHRoZSB0b2tlbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVmcmVzaFRva2VuQnlJZCh0b2tlbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWZyZXNoVG9rZW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRva2VuSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVmcmVzaFRva2Vucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZnJlc2hUb2tlblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZnJlc2hUb2tlblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIGlkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWdpc3RyYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVnaXN0cmF0aW9uIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHkgcmV0dXJuXG4gICAqIHRoZSByZWdpc3RyYXRpb24gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWdpc3RyYXRpb25SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBzdGF0dXMgb2YgYSByZS1pbmRleCBwcm9jZXNzLiBBIHN0YXR1cyBjb2RlIG9mIDIwMCBpbmRpY2F0ZXMgdGhlIHJlLWluZGV4IGlzIGluIHByb2dyZXNzLCBhIHN0YXR1cyBjb2RlIG9mICBcbiAgICogNDA0IGluZGljYXRlcyBubyByZS1pbmRleCBpcyBpbiBwcm9ncmVzcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWluZGV4U3RhdHVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3JlaW5kZXgnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlU3lzdGVtQ29uZmlndXJhdGlvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRlbmFudCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUZW5hbnQodGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB0ZW5hbnRzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUZW5hbnRzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB0aGVtZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgVGhlIElkIG9mIHRoZSB0aGVtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUaGVtZSh0aGVtZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB0aGVtZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVGhlbWVzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB0b3RhbHMgcmVwb3J0LiBUaGlzIGNvbnRhaW5zIGFsbCBvZiB0aGUgdG90YWwgY291bnRzIGZvciBlYWNoIGFwcGxpY2F0aW9uIGFuZCB0aGUgZ2xvYmFsIHJlZ2lzdHJhdGlvblxuICAgKiBjb3VudC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VG90YWxzUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVG90YWxSZXBvcnQoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUb3RhbHNSZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUb3RhbHNSZXBvcnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvdG90YWxzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdHdvLWZhY3RvciByZWNvdmVyeSBjb2RlcyBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gcmV0cmlldmUgVHdvIEZhY3RvciByZWNvdmVyeSBjb2Rlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVHdvRmFjdG9yUmVjb3ZlcnlDb2Rlcyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci90d28tZmFjdG9yL3JlY292ZXJ5LWNvZGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHVzZXIncyB0d28tZmFjdG9yIHN0YXR1cy5cbiAgICogXG4gICAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gc2VlIGlmIGEgdXNlciB3aWxsIG5lZWQgdG8gY29tcGxldGUgYSB0d28tZmFjdG9yIGNoYWxsZW5nZSB0byBjb21wbGV0ZSBhIGxvZ2luLFxuICAgKiBhbmQgb3B0aW9uYWxseSBpZGVudGlmeSB0aGUgc3RhdGUgb2YgdGhlIHR3by1mYWN0b3IgdHJ1c3QgYWNyb3NzIHZhcmlvdXMgYXBwbGljYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdXNlciBJZCB0byByZXRyaWV2ZSB0aGUgVHdvLUZhY3RvciBzdGF0dXMuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgb3B0aW9uYWwgYXBwbGljYXRpb25JZCB0byB2ZXJpZnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0d29GYWN0b3JUcnVzdElkIFRoZSBvcHRpb25hbCB0d28tZmFjdG9yIHRydXN0IElkIHRvIHZlcmlmeS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yU3RhdHVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVHdvRmFjdG9yU3RhdHVzKHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCwgdHdvRmFjdG9yVHJ1c3RJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGF0dXNSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUd29GYWN0b3JTdGF0dXNSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc3RhdHVzJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodHdvRmFjdG9yVHJ1c3RJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBhY3Rpb24gZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgdXNlclxuICAgKiBhY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBhY3Rpb24gcmVhc29uIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBwYXNzIGluIG51bGwgZm9yIHRoZSBpZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgb2YgdGhlIHVzZXJcbiAgICogYWN0aW9uIHJlYXNvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiByZWFzb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvblJlYXNvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB1c2VyIGFjdGlvbiByZWFzb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvblJlYXNvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHVzZXIgYWN0aW9ucy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb25zKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBieSBhIGNoYW5nZSBwYXNzd29yZCBJZC4gVGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIEFQSSBpcyB0byByZXRyaWV2ZSBhIHVzZXIgYWZ0ZXIgdGhlIGZvcmdvdFxuICAgKiBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQgYW5kIHlvdSBtYXkgbm90IGtub3cgdGhlIHVzZXIncyBlbWFpbCBvciB1c2VybmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNoYW5nZVBhc3N3b3JkSWQgVGhlIHVuaXF1ZSBjaGFuZ2UgcGFzc3dvcmQgSWQgdGhhdCB3YXMgc2VudCB2aWEgZW1haWwgb3IgcmV0dXJuZWQgYnkgdGhlIEZvcmdvdCBQYXNzd29yZCBBUEkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlDaGFuZ2VQYXNzd29yZElkKGNoYW5nZVBhc3N3b3JkSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignY2hhbmdlUGFzc3dvcmRJZCcsIGNoYW5nZVBhc3N3b3JkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIGVtYWlsLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5RW1haWwoZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW1haWwnLCBlbWFpbClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgbG9naW5JZC4gVGhlIGxvZ2luSWQgY2FuIGJlIGVpdGhlciB0aGUgdXNlcm5hbWUgb3IgdGhlIGVtYWlsLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naW5JZCBUaGUgZW1haWwgb3IgdXNlcm5hbWUgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlMb2dpbklkKGxvZ2luSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZCcsIGxvZ2luSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcm5hbWUgVGhlIHVzZXJuYW1lIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckJ5VXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcm5hbWUnLCB1c2VybmFtZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGJ5IGEgdmVyaWZpY2F0aW9uSWQuIFRoZSBpbnRlbmRlZCB1c2Ugb2YgdGhpcyBBUEkgaXMgdG8gcmV0cmlldmUgYSB1c2VyIGFmdGVyIHRoZSBmb3Jnb3RcbiAgICogcGFzc3dvcmQgd29ya2Zsb3cgaGFzIGJlZW4gaW5pdGlhdGVkIGFuZCB5b3UgbWF5IG5vdCBrbm93IHRoZSB1c2VyJ3MgZW1haWwgb3IgdXNlcm5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJpZmljYXRpb25JZCBUaGUgdW5pcXVlIHZlcmlmaWNhdGlvbiBJZCB0aGF0IGhhcyBiZWVuIHNldCBvbiB0aGUgdXNlciBvYmplY3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlWZXJpZmljYXRpb25JZCh2ZXJpZmljYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd2ZXJpZmljYXRpb25JZCcsIHZlcmlmaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjb21tZW50cyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbW1lbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29tbWVudHModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb21tZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbW1lbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHNpbmdsZSBVc2VyIGNvbnNlbnQgYnkgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckNvbnNlbnRJZCBUaGUgVXNlciBjb25zZW50IElkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBjb25zZW50cyBmb3IgYSBVc2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgVXNlcidzIElkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckNvbnNlbnRzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgdGhlIFVzZXJJbmZvIGVuZHBvaW50IHRvIHJldHJpZXZlIFVzZXIgQ2xhaW1zIGZyb20gdGhlIGFjY2VzcyB0b2tlbiBpc3N1ZWQgYnkgRnVzaW9uQXV0aC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckluZm9Gcm9tQWNjZXNzVG9rZW4oZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VXNlclJlc3BvbnNlLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3VzZXJpbmZvJylcbiAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKCdCZWFyZXIgJyArIGVuY29kZWRKV1QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc2luZ2xlIElkZW50aXR5IFByb3ZpZGVyIHVzZXIgKGxpbmspLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkZW50aXR5UHJvdmlkZXJVc2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlciBpbiB0aGUgM3JkIHBhcnR5IGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBGdXNpb25BdXRoIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxpbmsoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCBpZGVudGl0eVByb3ZpZGVyVXNlcklkOiBzdHJpbmcsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVySWQnLCBpZGVudGl0eVByb3ZpZGVySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZGVudGl0eVByb3ZpZGVyVXNlcklkJywgaWRlbnRpdHlQcm92aWRlclVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYWxsIElkZW50aXR5IFByb3ZpZGVyIHVzZXJzIChsaW5rcykgZm9yIHRoZSB1c2VyLiBTcGVjaWZ5IHRoZSBvcHRpb25hbCBpZGVudGl0eVByb3ZpZGVySWQgdG8gcmV0cmlldmUgbGlua3MgZm9yIGEgcGFydGljdWxhciBJZFAuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIuIFNwZWNpZnkgdGhpcyB2YWx1ZSB0byByZWR1Y2UgdGhlIGxpbmtzIHJldHVybmVkIHRvIHRob3NlIGZvciBhIHBhcnRpY3VsYXIgSWRQLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMaW5rc0J5VXNlcklkKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCwgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsb2dpbiByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzIGZvciBhIHBhcnRpY3VsYXIgdXNlciBieSBJZC4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gaWQsIGl0IHdpbGwgb25seSByZXR1cm4gdGhlXG4gICAqIGxvZ2luIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIGlkLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdXNlcklkIGlkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTG9naW5SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgdXNlcklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2xvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsb2dpbiByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzIGZvciBhIHBhcnRpY3VsYXIgdXNlciBieSBsb2dpbiBJZC4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gaWQsIGl0IHdpbGwgb25seSByZXR1cm4gdGhlXG4gICAqIGxvZ2luIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIGlkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbG9naW5JZCBUaGUgdXNlcklkIGlkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTG9naW5SZXBvcnRCeUxvZ2luSWQoYXBwbGljYXRpb25JZDogVVVJRCwgbG9naW5JZDogc3RyaW5nLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2xvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbG9naW5JZCcsIGxvZ2luSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxhc3QgbnVtYmVyIG9mIGxvZ2luIHJlY29yZHMgZm9yIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IFRoZSBpbml0aWFsIHJlY29yZC4gZS5nLiAwIGlzIHRoZSBsYXN0IGxvZ2luLCAxMDAgd2lsbCBiZSB0aGUgMTAwdGggbW9zdCByZWNlbnQgbG9naW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBsaW1pdCAoT3B0aW9uYWwsIGRlZmF1bHRzIHRvIDEwKSBUaGUgbnVtYmVyIG9mIHJlY29yZHMgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlclJlY2VudExvZ2lucyh1c2VySWQ6IFVVSUQsIG9mZnNldDogbnVtYmVyLCBsaW1pdDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWNlbnRMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlY2VudExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlY2VudC1sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdvZmZzZXQnLCBvZmZzZXQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsaW1pdCcsIGxpbWl0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBJZC4gVGhpcyBtZXRob2QgZG9lcyBub3QgdXNlIGFuIEFQSSBrZXksIGluc3RlYWQgaXQgdXNlcyBhIEpTT04gV2ViIFRva2VuIChKV1QpIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlclVzaW5nSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIHZlcnNpb24gc3RyaW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJzaW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVmVyc2lvbigpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcnNpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJzaW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vdmVyc2lvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkIFRoZSBJZCBvZiB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5DcmVkZW50aWFsUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViQXV0aG5DcmVkZW50aWFsKGlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIFdlYkF1dGhuIGNyZWRlbnRpYWxzIGZvciB0aGUgZ2l2ZW4gdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVzZXIncyBJRC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5DcmVkZW50aWFsUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViQXV0aG5DcmVkZW50aWFsc0ZvclVzZXIodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmF1dGhuJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB3ZWJob29rIGZvciB0aGUgZ2l2ZW4gSWQuIElmIHlvdSBwYXNzIGluIG51bGwgZm9yIHRoZSBpZCwgdGhpcyB3aWxsIHJldHVybiBhbGwgdGhlIHdlYmhvb2tzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHdlYmhvb2tJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgd2ViaG9vay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB3ZWJob29rcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVdlYmhvb2tzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJob29rJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyByZWZyZXNoIHRva2Vucy5cbiAgICogXG4gICAqIFVzYWdlIGV4YW1wbGVzOlxuICAgKiAgIC0gRGVsZXRlIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4sIHBhc3MgaW4gb25seSB0aGUgdG9rZW4uXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbih0b2tlbilcbiAgICogXG4gICAqICAgLSBEZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvciBhIHVzZXIsIHBhc3MgaW4gb25seSB0aGUgdXNlcklkLlxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4obnVsbCwgdXNlcklkKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGEgdXNlciBmb3IgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbiwgcGFzcyBpbiBib3RoIHRoZSB1c2VySWQgYW5kIHRoZSBhcHBsaWNhdGlvbklkLlxuICAgKiAgICAgICByZXZva2VSZWZyZXNoVG9rZW4obnVsbCwgdXNlcklkLCBhcHBsaWNhdGlvbklkKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGFuIGFwcGxpY2F0aW9uXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbihudWxsLCBudWxsLCBhcHBsaWNhdGlvbklkKVxuICAgKiBcbiAgICogTm90ZTogPGNvZGU+bnVsbDwvY29kZT4gbWF5IGJlIGhhbmRsZWQgZGlmZmVyZW50bHkgZGVwZW5kaW5nIHVwb24gdGhlIHByb2dyYW1taW5nIGxhbmd1YWdlLlxuICAgKiBcbiAgICogU2VlIGFsc286IChtZXRob2QgbmFtZXMgbWF5IHZhcnkgYnkgbGFuZ3VhZ2UuLi4gYnV0IHlvdSdsbCBmaWd1cmUgaXQgb3V0KVxuICAgKiBcbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2VuQnlJZFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5CeVRva2VuXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5zQnlBcHBsaWNhdGlvbklkXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeVVzZXJJZEZvckFwcGxpY2F0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiAoT3B0aW9uYWwpIFRoZSByZWZyZXNoIHRva2VuIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgdXNlciBpZCB3aG9zZSB0b2tlbnMgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQgb2YgdGhlIHRva2VucyB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbih0b2tlbjogc3RyaW5nLCB1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3Rva2VuJywgdG9rZW4pXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHRoZSB1bmlxdWUgSWQuIFRoZSB1bmlxdWUgSWQgaXMgbm90IHNlbnNpdGl2ZSBhcyBpdCBjYW5ub3QgYmUgdXNlZCB0byBvYnRhaW4gYW5vdGhlciBKV1QuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdG9rZW5JZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB0b2tlbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbkJ5SWQodG9rZW5JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodG9rZW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyBhIHNpbmdsZSByZWZyZXNoIHRva2VuIGJ5IHVzaW5nIHRoZSBhY3R1YWwgcmVmcmVzaCB0b2tlbiB2YWx1ZS4gVGhpcyByZWZyZXNoIHRva2VuIHZhbHVlIGlzIHNlbnNpdGl2ZSwgc28gIGJlIGNhcmVmdWwgd2l0aCB0aGlzIEFQSSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIHJlZnJlc2ggdG9rZW4gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5CeVRva2VuKHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3Rva2VuJywgdG9rZW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYW4gYXBwbGljYXRpb24gYnkgYXBwbGljYXRpb25JZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbnNCeUFwcGxpY2F0aW9uSWQoYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYSB1c2VyIGJ5IHVzZXIgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2UgYWxsIHJlZnJlc2ggdG9rZW5zIHRoYXQgYmVsb25nIHRvIGEgdXNlciBieSB1c2VyIElkIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uIGJ5IGFwcGxpY2F0aW9uSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkRm9yQXBwbGljYXRpb24odXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlcyByZWZyZXNoIHRva2VucyB1c2luZyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIEpTT04gYm9keS4gVGhlIGhhbmRsaW5nIGZvciB0aGlzIG1ldGhvZCBpcyB0aGUgc2FtZSBhcyB0aGUgcmV2b2tlUmVmcmVzaFRva2VuIG1ldGhvZFxuICAgKiBhbmQgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHlvdSBwcm92aWRlIGluIHRoZSBSZWZyZXNoRGVsZXRlUmVxdWVzdCBvYmplY3QuIFNlZSB0aGF0IG1ldGhvZCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGluZm9ybWF0aW9uIHVzZWQgdG8gcmV2b2tlIHRoZSByZWZyZXNoIHRva2Vucy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc1dpdGhSZXF1ZXN0KHJlcXVlc3Q6IFJlZnJlc2hUb2tlblJldm9rZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIENvbnNlbnQgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgYXVkaXQgbG9ncyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7QXVkaXRMb2dTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEF1ZGl0TG9ncyhyZXF1ZXN0OiBBdWRpdExvZ1NlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZW50aXRpZXMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VudGl0eVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0aWVzKHJlcXVlc3Q6IEVudGl0eVNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZW50aXRpZXMgZm9yIHRoZSBnaXZlbiBpZHMuIElmIGFueSBpZCBpcyBpbnZhbGlkLCBpdCBpcyBpZ25vcmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGlkcyBUaGUgZW50aXR5IGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRW50aXRpZXNCeUlkcyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3NlYXJjaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZHMnLCBpZHMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIEVudGl0eSBHcmFudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0VudGl0eUdyYW50U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdHlHcmFudHMocmVxdWVzdDogRW50aXR5R3JhbnRTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvZ3JhbnQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIGVudGl0eSB0eXBlcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdHlUeXBlcyhyZXF1ZXN0OiBFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBldmVudCBsb2dzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFdmVudExvZ1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRXZlbnRMb2dzKHJlcXVlc3Q6IEV2ZW50TG9nU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RXZlbnRMb2dTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFdmVudExvZ1NlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2V2ZW50LWxvZy9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBncm91cCBtZW1iZXJzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtHcm91cE1lbWJlclNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoR3JvdXBNZW1iZXJzKHJlcXVlc3Q6IEdyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGdyb3VwcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7R3JvdXBTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEdyb3VwcyhyZXF1ZXN0OiBHcm91cFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hJUEFjY2Vzc0NvbnRyb2xMaXN0cyhyZXF1ZXN0OiBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lwLWFjbC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgbG9naW4gcmVjb3JkcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5SZWNvcmRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaExvZ2luUmVjb3JkcyhyZXF1ZXN0OiBMb2dpblJlY29yZFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVjb3JkU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9sb2dpbi1yZWNvcmQvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IGlkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSB1c2VyIGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlYXJjaFVzZXJzQnlJZHMsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VhcmNoVXNlcnMoaWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkcycsIGlkcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IGlkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSB1c2VyIGlkcyB0byBzZWFyY2ggZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVXNlcnNCeUlkcyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRzJywgaWRzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBjb25zdHJhaW50cy4gRmllbGRzIHVzZWQ6IGlkcywgcXVlcnksIHF1ZXJ5U3RyaW5nLCBudW1iZXJPZlJlc3VsdHMsIG9yZGVyQnksIHN0YXJ0Um93LFxuICAgKiAgICBhbmQgc29ydEZpZWxkcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlRdWVyeShyZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VycyBmb3IgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gY29uc3RyYWludHMuIEZpZWxkcyB1c2VkOiBpZHMsIHF1ZXJ5LCBxdWVyeVN0cmluZywgbnVtYmVyT2ZSZXN1bHRzLCBvcmRlckJ5LCBzdGFydFJvdyxcbiAgICogICAgYW5kIHNvcnRGaWVsZHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VhcmNoVXNlcnNCeVF1ZXJ5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHNlYXJjaFVzZXJzQnlRdWVyeVN0cmluZyhyZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhbiBlbWFpbCB1c2luZyBhbiBlbWFpbCB0ZW1wbGF0ZSBpZC4gWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgPGNvZGU+cmVxdWVzdERhdGE8L2NvZGU+IHRvIGFjY2VzcyBrZXkgdmFsdWVcbiAgICogcGFpcnMgaW4gdGhlIGVtYWlsIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgaWQgZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VuZCBlbWFpbCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZW5kUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlbmRFbWFpbChlbWFpbFRlbXBsYXRlSWQ6IFVVSUQsIHJlcXVlc3Q6IFNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZW5kUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VuZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIG91dCBhbiBlbWFpbCB0byBhIHBhcmVudCB0aGF0IHRoZXkgbmVlZCB0byByZWdpc3RlciBhbmQgY3JlYXRlIGEgZmFtaWx5IG9yIG5lZWQgdG8gbG9nIGluIGFuZCBhZGQgYSBjaGlsZCB0byB0aGVpciBleGlzdGluZyBmYW1pbHkuXG4gICAqXG4gICAqIEBwYXJhbSB7RmFtaWx5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSBwYXJlbnQgZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRGYW1pbHlSZXF1ZXN0RW1haWwocmVxdWVzdDogRmFtaWx5RW1haWxSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseS9yZXF1ZXN0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIHBhc3N3b3JkbGVzcyBhdXRoZW50aWNhdGlvbiBjb2RlIGluIGFuIGVtYWlsIHRvIGNvbXBsZXRlIGxvZ2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1Bhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3Mgc2VuZCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgYW4gZW1haWwgY29udGFpbmluZyBhIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRQYXNzd29yZGxlc3NDb2RlKHJlcXVlc3Q6IFBhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3Mvc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYXNzaXN0IGluIHNldHRpbmcgdXAgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBvciBkaXNhYmxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZW5kVHdvRmFjdG9yQ29kZUZvckVuYWJsZURpc2FibGUsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGUocmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYXNzaXN0IGluIHNldHRpbmcgdXAgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBvciBkaXNhYmxpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIHNlbmQgdGhlIGNvZGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlRm9yRW5hYmxlRGlzYWJsZShyZXF1ZXN0OiBUd29GYWN0b3JTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhbGxvdyB0aGUgY29tcGxldGlvbiBvZiBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHdvRmFjdG9ySWQgVGhlIElkIHJldHVybmVkIGJ5IHRoZSBMb2dpbiBBUEkgbmVjZXNzYXJ5IHRvIGNvbXBsZXRlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luVXNpbmdNZXRob2QsIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGVGb3JMb2dpbih0d29GYWN0b3JJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodHdvRmFjdG9ySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFsbG93IHRoZSBjb21wbGV0aW9uIG9mIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0d29GYWN0b3JJZCBUaGUgSWQgcmV0dXJuZWQgYnkgdGhlIExvZ2luIEFQSSBuZWNlc3NhcnkgdG8gY29tcGxldGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtUd29GYWN0b3JTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgVHdvIEZhY3RvciBzZW5kIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgVHdvIEZhY3RvciBjb2RlIHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luVXNpbmdNZXRob2QodHdvRmFjdG9ySWQ6IHN0cmluZywgcmVxdWVzdDogVHdvRmFjdG9yU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIGEgbG9naW4gcmVxdWVzdCBmb3IgYSAzcmQgcGFydHkgbG9naW4gdGhhdCByZXF1aXJlcyB1c2VyIGludGVyYWN0aW9uIHN1Y2ggYXMgSFlQUi5cbiAgICpcbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIHRoaXJkLXBhcnR5IGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBmcm9tIHRoZSB0aGlyZC1wYXJ0eSBsb2dpblxuICAgKiAgICBwcm92aWRlcnMgdGhhdCBGdXNpb25BdXRoIHVzZXMgdG8gcmVjb25jaWxlIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRJZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QgYnkgZ2VuZXJhdGluZyBhIHBhc3N3b3JkbGVzcyBjb2RlLiBUaGlzIGNvZGUgY2FuIGJlIHNlbnQgdG8gdGhlIFVzZXIgdXNpbmcgdGhlIFNlbmRcbiAgICogUGFzc3dvcmRsZXNzIENvZGUgQVBJIG9yIHVzaW5nIGEgbWVjaGFuaXNtIG91dHNpZGUgb2YgRnVzaW9uQXV0aC4gVGhlIHBhc3N3b3JkbGVzcyBsb2dpbiBpcyBjb21wbGV0ZWQgYnkgdXNpbmcgdGhlIFBhc3N3b3JkbGVzcyBMb2dpbiBBUEkgd2l0aCB0aGlzIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3Mgc3RhcnQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBiZWdpbiB0aGUgcGFzc3dvcmRsZXNzIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0UGFzc3dvcmRsZXNzTG9naW4ocmVxdWVzdDogUGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQYXNzd29yZGxlc3NTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3Mvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFR3by1GYWN0b3IgbG9naW4gcmVxdWVzdCBieSBnZW5lcmF0aW5nIGEgdHdvLWZhY3RvciBpZGVudGlmaWVyLiBUaGlzIGNvZGUgY2FuIHRoZW4gYmUgc2VudCB0byB0aGUgVHdvIEZhY3RvciBTZW5kIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9zZW5kKWluIG9yZGVyIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSB0byBhIHVzZXIuIFlvdSBjYW4gYWxzbyB1c2Ugb25lLXRpbWUgdXNlIGNvZGUgcmV0dXJuZWQgXG4gICAqIHRvIHNlbmQgdGhlIGNvZGUgb3V0LW9mLWJhbmQuIFRoZSBUd28tRmFjdG9yIGxvZ2luIGlzIGNvbXBsZXRlZCBieSBtYWtpbmcgYSByZXF1ZXN0IHRvIHRoZSBUd28tRmFjdG9yIExvZ2luIFxuICAgKiBBUEkgKC9hcGkvdHdvLWZhY3Rvci9sb2dpbikuIHdpdGggdGhlIHR3by1mYWN0b3IgaWRlbnRpZmllciBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlLlxuICAgKiBcbiAgICogVGhpcyBBUEkgaXMgaW50ZW5kZWQgdG8gYWxsb3cgeW91IHRvIGJlZ2luIGEgVHdvLUZhY3RvciBsb2dpbiBvdXRzaWRlIG9mIGEgbm9ybWFsIGxvZ2luIHRoYXQgb3JpZ2luYXRlZCBmcm9tIHRoZSBMb2dpbiBBUEkgKC9hcGkvbG9naW4pLlxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBUaGUgVHdvLUZhY3RvciBzdGFydCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGJlZ2luIHRoZSBUd28tRmFjdG9yIGxvZ2luIHJlcXVlc3QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0VHdvRmFjdG9yTG9naW4ocmVxdWVzdDogVHdvRmFjdG9yU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBieSBnZW5lcmF0aW5nIGEgbmV3IGNoYWxsZW5nZSBmb3IgdGhlIHVzZXJcbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRoblN0YXJ0UmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3Igc3RhcnRpbmcgdGhlIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuU3RhcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRXZWJBdXRobkxvZ2luKHJlcXVlc3Q6IFdlYkF1dGhuU3RhcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRoblN0YXJ0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViQXV0aG5TdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBieSBnZW5lcmF0aW5nIGEgbmV3IGNoYWxsZW5nZSBmb3IgdGhlIHVzZXJcbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBzdGFydGluZyB0aGUgcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFdlYkF1dGhuUmVnaXN0cmF0aW9uKHJlcXVlc3Q6IFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuUmVnaXN0ZXJTdGFydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vcmVnaXN0ZXIvc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBsb2dpbiB1c2luZyBhIDJGQSBjaGFsbGVuZ2VcbiAgICpcbiAgICogQHBhcmFtIHtUd29GYWN0b3JMb2dpblJlcXVlc3R9IHJlcXVlc3QgVGhlIGxvZ2luIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjcmVkZW50aWFscyB1c2VkIHRvIGxvZyB0aGVtIGluLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICB0d29GYWN0b3JMb2dpbihyZXF1ZXN0OiBUd29GYWN0b3JMb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3IvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIEFQSSBrZXkgYnkgZ2l2ZW4gaWRcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcGlLZXlJZCBUaGUgSWQgb2YgdGhlIEFQSSBrZXkgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgQVBJIEtleS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUFQSUtleShhcGlLZXlJZDogVVVJRCwgcmVxdWVzdDogQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwaUtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGFwcGxpY2F0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgYXBwbGljYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhcHBsaWNhdGlvbiByb2xlIHdpdGggdGhlIGdpdmVuIGlkIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHJvbGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgVGhlIElkIG9mIHRoZSByb2xlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyByb2xlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb25uZWN0b3Igd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgVGhlIElkIG9mIHRoZSBjb25uZWN0b3IgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Nvbm5lY3RvclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgY29ubmVjdG9yIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlELCByZXF1ZXN0OiBDb25uZWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25uZWN0b3JSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb25zZW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVDb25zZW50KGNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbWFpbFRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW1haWxUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBlbWFpbCB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgRW50aXR5IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgRW50aXR5IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRW50aXR5KGVudGl0eUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBFbnRpdHkgVHlwZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBFbnRpdHkgVHlwZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbnRpdHlUeXBlKGVudGl0eVR5cGVJZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcGVybWlzc2lvbiB3aXRoIHRoZSBnaXZlbiBpZCBmb3IgdGhlIGVudGl0eSB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIGVudGl0eVR5cGUgdGhhdCB0aGUgcGVybWlzc2lvbiBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCBUaGUgSWQgb2YgdGhlIHBlcm1pc3Npb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgcGVybWlzc2lvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbnRpdHlUeXBlUGVybWlzc2lvbihlbnRpdHlUeXBlSWQ6IFVVSUQsIHBlcm1pc3Npb25JZDogVVVJRCwgcmVxdWVzdDogRW50aXR5VHlwZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInBlcm1pc3Npb25cIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlcm1pc3Npb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBmb3JtIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCBUaGUgSWQgb2YgdGhlIGZvcm0gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0Zvcm1SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGZvcm0gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRm9ybShmb3JtSWQ6IFVVSUQsIHJlcXVlc3Q6IEZvcm1SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZm9ybSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIFRoZSBJZCBvZiB0aGUgZm9ybSBmaWVsZCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Rm9ybUZpZWxkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBmb3JtIGZpZWxkIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQsIHJlcXVlc3Q6IEZvcm1GaWVsZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1GaWVsZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybS9maWVsZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmaWVsZElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGdyb3VwIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7R3JvdXBSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgZ3JvdXAgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUdyb3VwKGdyb3VwSWQ6IFVVSUQsIHJlcXVlc3Q6IEdyb3VwUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbWVtYmVyIGluIGEgZ3JvdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVtYmVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cCBtZW1iZXIocykuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVHcm91cE1lbWJlcnMocmVxdWVzdDogTWVtYmVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVtYmVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVtYmVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXInKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3Qgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYWNjZXNzQ29udHJvbExpc3RJZCBUaGUgSWQgb2YgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3QgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0lQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVJUEFjY2Vzc0NvbnRyb2xMaXN0KGFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQsIHJlcXVlc3Q6IElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSBJZCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZSB1cGRhdGVkIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCByZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBhdmFpbGFibGUgaW50ZWdyYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge0ludGVncmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGludGVncmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVJbnRlZ3JhdGlvbnMocmVxdWVzdDogSW50ZWdyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEludGVncmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pbnRlZ3JhdGlvbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUga2V5IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUga2V5IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcga2V5IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlS2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsYW1iZGEgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgVGhlIElkIG9mIHRoZSBsYW1iZGEgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0xhbWJkYVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBsYW1iZGEgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVMYW1iZGEobGFtYmRhSWQ6IFVVSUQsIHJlcXVlc3Q6IExhbWJkYVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGxhbWJkYUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgbWVzc2FnZSB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZU1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIG1lc3NlbmdlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCBUaGUgSWQgb2YgdGhlIG1lc3NlbmdlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TWVzc2VuZ2VyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBtZXNzZW5nZXIgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQsIHJlcXVlc3Q6IE1lc3NlbmdlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE1lc3NlbmdlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGluIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGdvaW5nIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1N5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgc3lzdGVtIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlU3lzdGVtQ29uZmlndXJhdGlvbihyZXF1ZXN0OiBTeXN0ZW1Db25maWd1cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS1jb25maWd1cmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB0ZW5hbnQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1RlbmFudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyB0ZW5hbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVUZW5hbnQodGVuYW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFRlbmFudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRlbmFudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHRoZW1lIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgVGhlIElkIG9mIHRoZSB0aGVtZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGhlbWVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgdGhlbWUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVRoZW1lKHRoZW1lSWQ6IFVVSUQsIHJlcXVlc3Q6IFRoZW1lUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgdXNlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVVc2VyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyB1c2VyIGFjdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlYXNvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyB1c2VyIGFjdGlvbiByZWFzb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZWFzb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIENvbnNlbnQgSWRcbiAgICogQHBhcmFtIHtVc2VyQ29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdXNlciBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBVc2VyQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQ29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHdlYmhvb2sgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIFRoZSBJZCBvZiB0aGUgd2ViaG9vayB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7V2ViaG9va1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyB3ZWJob29rIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVdlYmhvb2sod2ViaG9va0lkOiBVVUlELCByZXF1ZXN0OiBXZWJob29rUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViaG9va1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYmhvb2tSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgb3IgdXBkYXRlcyBhbiBFbnRpdHkgR3JhbnQuIFRoaXMgaXMgd2hlbiBhIFVzZXIvRW50aXR5IGlzIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8gYW4gRW50aXR5LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRoYXQgdGhlIFVzZXIvRW50aXR5IGlzIGJlaW5nIGdyYW50ZWQgYWNjZXNzIHRvLlxuICAgKiBAcGFyYW0ge0VudGl0eUdyYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBFbnRpdHkgR3JhbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHVwc2VydEVudGl0eUdyYW50KGVudGl0eUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlHcmFudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwiZ3JhbnRcIilcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBlbmQtdXNlciBwcm92aWRlZCB1c2VyX2NvZGUgZnJvbSB0aGUgdXNlci1pbnRlcmFjdGlvbiBvZiB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24gR3JhbnQuXG4gICAqIElmIHlvdSBidWlsZCB5b3VyIG93biBhY3RpdmF0aW9uIGZvcm0geW91IHNob3VsZCB2YWxpZGF0ZSB0aGUgdXNlciBwcm92aWRlZCBjb2RlIHByaW9yIHRvIGJlZ2lubmluZyB0aGUgQXV0aG9yaXphdGlvbiBncmFudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSBUaGUgZW5kLXVzZXIgdmVyaWZpY2F0aW9uIGNvZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgVGhlIGNsaWVudCBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmFsaWRhdGVEZXZpY2UodXNlcl9jb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvZGV2aWNlL3ZhbGlkYXRlJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJfY29kZScsIHVzZXJfY29kZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2NsaWVudF9pZCcsIGNsaWVudF9pZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoZSBwcm92aWRlZCBKV1QgKGVuY29kZWQgSldUIHN0cmluZykgdG8gZW5zdXJlIHRoZSB0b2tlbiBpcyB2YWxpZC4gQSB2YWxpZCBhY2Nlc3MgdG9rZW4gaXMgcHJvcGVybHlcbiAgICogc2lnbmVkIGFuZCBub3QgZXhwaXJlZC5cbiAgICogPHA+XG4gICAqIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIHZlcmlmeSB0aGUgSldUIGFzIHdlbGwgYXMgZGVjb2RlIHRoZSBlbmNvZGVkIEpXVCBpbnRvIGh1bWFuIHJlYWRhYmxlIGlkZW50aXR5IGNsYWltcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWYWxpZGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICB2YWxpZGF0ZUpXVChlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZhbGlkYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VmFsaWRhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvdmFsaWRhdGUnKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSXQncyBhIEpXVCB2ZW5kaW5nIG1hY2hpbmUhXG4gICAqIFxuICAgKiBJc3N1ZSBhIG5ldyBhY2Nlc3MgdG9rZW4gKEpXVCkgd2l0aCB0aGUgcHJvdmlkZWQgY2xhaW1zIGluIHRoZSByZXF1ZXN0LiBUaGlzIEpXVCBpcyBub3Qgc2NvcGVkIHRvIGEgdGVuYW50IG9yIHVzZXIsIGl0IGlzIGEgZnJlZSBmb3JtIFxuICAgKiB0b2tlbiB0aGF0IHdpbGwgY29udGFpbiB3aGF0IGNsYWltcyB5b3UgcHJvdmlkZS5cbiAgICogPHA+XG4gICAqIFRoZSBpYXQsIGV4cCBhbmQganRpIGNsYWltcyB3aWxsIGJlIGFkZGVkIGJ5IEZ1c2lvbkF1dGgsIGFsbCBvdGhlciBjbGFpbXMgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLlxuICAgKiBcbiAgICogSWYgYSBUVEwgaXMgbm90IHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LCB0aGUgVFRMIHdpbGwgYmUgcmV0cmlldmVkIGZyb20gdGhlIGRlZmF1bHQgVGVuYW50IG9yIHRoZSBUZW5hbnQgc3BlY2lmaWVkIG9uIHRoZSByZXF1ZXN0IGVpdGhlciBcbiAgICogYnkgd2F5IG9mIHRoZSBYLUZ1c2lvbkF1dGgtVGVuYW50SWQgcmVxdWVzdCBoZWFkZXIsIG9yIGEgdGVuYW50IHNjb3BlZCBBUEkga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge0pXVFZlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBjbGFpbXMgZm9yIHRoaXMgSldULlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RWZW5kUmVzcG9uc2U+Pn1cbiAgICovXG4gIHZlbmRKV1QocmVxdWVzdDogSldUVmVuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFZlbmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxKV1RWZW5kUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvdmVuZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGEgZW1haWwgdmVyaWZpY2F0aW9uLiBUaGUgSWQgZ2l2ZW4gaXMgdXN1YWxseSBmcm9tIGFuIGVtYWlsIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJpZmljYXRpb25JZCBUaGUgZW1haWwgdmVyaWZpY2F0aW9uIGlkIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byB2ZXJpZnlFbWFpbEFkZHJlc3MgYW5kIGNoYW5nZWQgdG8gdGFrZSBhIEpTT04gcmVxdWVzdCBib2R5LCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIHZlcmlmeUVtYWlsKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHZlcmlmaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYSB1c2VyJ3MgZW1haWwgYWRkcmVzcy4gXG4gICAqIFxuICAgKiBUaGUgcmVxdWVzdCBib2R5IHdpbGwgY29udGFpbiB0aGUgdmVyaWZpY2F0aW9uSWQuIFlvdSBtYXkgYWxzbyBiZSByZXF1aXJlZCB0byBzZW5kIGEgb25lLXRpbWUgdXNlIGNvZGUgYmFzZWQgdXBvbiB5b3VyIGNvbmZpZ3VyYXRpb24uIFdoZW4gXG4gICAqIHRoZSB0ZW5hbnQgaXMgY29uZmlndXJlZCB0byBnYXRlIGEgdXNlciB1bnRpbCB0aGVpciBlbWFpbCBhZGRyZXNzIGlzIHZlcmlmaWVkLCB0aGlzIHByb2NlZHVyZXMgcmVxdWlyZXMgdHdvIHZhbHVlcyBpbnN0ZWFkIG9mIG9uZS4gXG4gICAqIFRoZSB2ZXJpZmljYXRpb25JZCBpcyBhIGhpZ2ggZW50cm9weSB2YWx1ZSBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlIGlzIGEgbG93IGVudHJvcHkgdmFsdWUgdGhhdCBpcyBlYXNpbHkgZW50ZXJlZCBpbiBhIHVzZXIgaW50ZXJhY3RpdmUgZm9ybS4gVGhlIFxuICAgKiB0d28gdmFsdWVzIHRvZ2V0aGVyIGFyZSBhYmxlIHRvIGNvbmZpcm0gYSB1c2VyJ3MgZW1haWwgYWRkcmVzcyBhbmQgbWFyayB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MgYXMgdmVyaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHZlcmlmaWNhdGlvbklkIGFuZCBvcHRpb25hbCBvbmUtdGltZSB1c2UgY29kZSBwYWlyZWQgd2l0aCB0aGUgdmVyaWZpY2F0aW9uSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeUVtYWlsQWRkcmVzcyhyZXF1ZXN0OiBWZXJpZnlFbWFpbFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRtaW5pc3RyYXRpdmVseSB2ZXJpZnkgYSB1c2VyJ3MgZW1haWwgYWRkcmVzcy4gVXNlIHRoaXMgbWV0aG9kIHRvIGJ5cGFzcyBlbWFpbCB2ZXJpZmljYXRpb24gZm9yIHRoZSB1c2VyLlxuICAgKiBcbiAgICogVGhlIHJlcXVlc3QgYm9keSB3aWxsIGNvbnRhaW4gdGhlIHVzZXJJZCB0byBiZSB2ZXJpZmllZC4gQW4gQVBJIGtleSBpcyByZXF1aXJlZCB3aGVuIHNlbmRpbmcgdGhlIHVzZXJJZCBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeUVtYWlsUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VySWQgdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2ZXJpZnlFbWFpbEFkZHJlc3NCeVVzZXJJZChyZXF1ZXN0OiBWZXJpZnlFbWFpbFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYW4gYXBwbGljYXRpb24gcmVnaXN0cmF0aW9uLiBUaGUgSWQgZ2l2ZW4gaXMgdXN1YWxseSBmcm9tIGFuIGVtYWlsIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJpZmljYXRpb25JZCBUaGUgcmVnaXN0cmF0aW9uIHZlcmlmaWNhdGlvbiBJZCBzZW50IHRvIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gdmVyaWZ5VXNlclJlZ2lzdHJhdGlvbiBhbmQgY2hhbmdlZCB0byB0YWtlIGEgSlNPTiByZXF1ZXN0IGJvZHksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgdmVyaWZ5UmVnaXN0cmF0aW9uKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh2ZXJpZmljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbmZpcm1zIGEgdXNlcidzIHJlZ2lzdHJhdGlvbi4gXG4gICAqIFxuICAgKiBUaGUgcmVxdWVzdCBib2R5IHdpbGwgY29udGFpbiB0aGUgdmVyaWZpY2F0aW9uSWQuIFlvdSBtYXkgYWxzbyBiZSByZXF1aXJlZCB0byBzZW5kIGEgb25lLXRpbWUgdXNlIGNvZGUgYmFzZWQgdXBvbiB5b3VyIGNvbmZpZ3VyYXRpb24uIFdoZW4gXG4gICAqIHRoZSBhcHBsaWNhdGlvbiBpcyBjb25maWd1cmVkIHRvIGdhdGUgYSB1c2VyIHVudGlsIHRoZWlyIHJlZ2lzdHJhdGlvbiBpcyB2ZXJpZmllZCwgdGhpcyBwcm9jZWR1cmVzIHJlcXVpcmVzIHR3byB2YWx1ZXMgaW5zdGVhZCBvZiBvbmUuIFxuICAgKiBUaGUgdmVyaWZpY2F0aW9uSWQgaXMgYSBoaWdoIGVudHJvcHkgdmFsdWUgYW5kIHRoZSBvbmUtdGltZSB1c2UgY29kZSBpcyBhIGxvdyBlbnRyb3B5IHZhbHVlIHRoYXQgaXMgZWFzaWx5IGVudGVyZWQgaW4gYSB1c2VyIGludGVyYWN0aXZlIGZvcm0uIFRoZSBcbiAgICogdHdvIHZhbHVlcyB0b2dldGhlciBhcmUgYWJsZSB0byBjb25maXJtIGEgdXNlcidzIHJlZ2lzdHJhdGlvbiBhbmQgbWFyayB0aGUgdXNlcidzIHJlZ2lzdHJhdGlvbiBhcyB2ZXJpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHZlcmlmaWNhdGlvbklkIGFuZCBvcHRpb25hbCBvbmUtdGltZSB1c2UgY29kZSBwYWlyZWQgd2l0aCB0aGUgdmVyaWZpY2F0aW9uSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeVVzZXJSZWdpc3RyYXRpb24ocmVxdWVzdDogVmVyaWZ5UmVnaXN0cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuXG4gIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICogUHJpdmF0ZSBtZXRob2RzXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qL1xuXG4gIC8qKlxuICAgKiBjcmVhdGVzIGEgcmVzdCBjbGllbnRcbiAgICpcbiAgICogQHJldHVybnMgVGhlIFJFU1RDbGllbnQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY2FsbC5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgc3RhcnQ8UlQsIEVSVD4oKTogSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFJULCBFUlQ+KClcbiAgICAgICAgICAgICAgIC53aXRoQXV0aG9yaXphdGlvbih0aGlzLmFwaUtleSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0QW5vbnltb3VzPFJULCBFUlQ+KCk6IElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBsZXQgY2xpZW50ID0gdGhpcy5jbGllbnRCdWlsZGVyLmJ1aWxkPFJULCBFUlQ+KHRoaXMuaG9zdCk7XG5cbiAgICBpZiAodGhpcy50ZW5hbnRJZCAhPSBudWxsKSB7XG4gICAgICBjbGllbnQud2l0aEhlYWRlcignWC1GdXNpb25BdXRoLVRlbmFudElkJywgdGhpcy50ZW5hbnRJZCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3JlZGVudGlhbHMgIT0gbnVsbCkge1xuICAgICAgY2xpZW50LndpdGhDcmVkZW50aWFscyh0aGlzLmNyZWRlbnRpYWxzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZ1c2lvbkF1dGhDbGllbnQ7XG5cbi8qKlxuICogQSAxMjggYml0IFVVSUQgaW4gc3RyaW5nIGZvcm1hdCBcIjgtNC00LTQtMTJcIiwgZm9yIGV4YW1wbGUgXCI1OEQ1RTIxMi0xNjVCLTRDQTAtOTA5Qi1DODZCOUNFRTAxMTFcIi5cbiAqL1xuZXhwb3J0IHR5cGUgVVVJRCA9IHN0cmluZztcblxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY2Nlc3NUb2tlbiB7XG4gIGFjY2Vzc190b2tlbj86IHN0cmluZztcbiAgZXhwaXJlc19pbj86IG51bWJlcjtcbiAgaWRfdG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hfdG9rZW5faWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgdG9rZW5fdHlwZT86IFRva2VuVHlwZTtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25EYXRhIHtcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVXNlcj86IGJvb2xlYW47XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbm90aWZ5VXNlcj86IGJvb2xlYW47XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uSWQ/OiBVVUlEO1xuICB1c2VyQWN0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZSB1c2VyIGFjdGlvbiByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFjdGlvbj86IEFjdGlvbkRhdGE7XG4gIGJyb2FkY2FzdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIHVzZXIgYWN0aW9uIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25SZXNwb25zZSB7XG4gIGFjdGlvbj86IFVzZXJBY3Rpb25Mb2c7XG4gIGFjdGlvbnM/OiBBcnJheTxVc2VyQWN0aW9uTG9nPjtcbn1cblxuLyoqXG4gKiBBdmFpbGFibGUgSlNPTiBXZWIgQWxnb3JpdGhtcyAoSldBKSBhcyBkZXNjcmliZWQgaW4gUkZDIDc1MTggYXZhaWxhYmxlIGZvciB0aGlzIEpXVCBpbXBsZW1lbnRhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEFsZ29yaXRobSB7XG4gIEVTMjU2ID0gXCJFUzI1NlwiLFxuICBFUzM4NCA9IFwiRVMzODRcIixcbiAgRVM1MTIgPSBcIkVTNTEyXCIsXG4gIEhTMjU2ID0gXCJIUzI1NlwiLFxuICBIUzM4NCA9IFwiSFMzODRcIixcbiAgSFM1MTIgPSBcIkhTNTEyXCIsXG4gIFBTMjU2ID0gXCJQUzI1NlwiLFxuICBQUzM4NCA9IFwiUFMzODRcIixcbiAgUFM1MTIgPSBcIlBTNTEyXCIsXG4gIFJTMjU2ID0gXCJSUzI1NlwiLFxuICBSUzM4NCA9IFwiUlMzODRcIixcbiAgUlM1MTIgPSBcIlJTNTEyXCIsXG4gIG5vbmUgPSBcIm5vbmVcIlxufVxuXG4vKipcbiAqIGRvbWFpbiBQT0pPIHRvIHJlcHJlc2VudCBBdXRoZW50aWNhdGlvbktleVxuICpcbiAqIEBhdXRob3Igc2FuamF5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5IHtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0SWQ/OiBVVUlEO1xuICBrZXk/OiBzdHJpbmc7XG4gIGtleU1hbmFnZXI/OiBib29sZWFuO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbWV0YURhdGE/OiBBUElLZXlNZXRhRGF0YTtcbiAgcGVybWlzc2lvbnM/OiBBUElLZXlQZXJtaXNzaW9ucztcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleU1ldGFEYXRhIHtcbiAgYXR0cmlidXRlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5UGVybWlzc2lvbnMge1xuICBlbmRwb2ludHM/OiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxzdHJpbmc+Pjtcbn1cblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBrZXkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBTYW5qYXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBUElLZXlSZXF1ZXN0IHtcbiAgYXBpS2V5PzogQVBJS2V5O1xuICBzb3VyY2VLZXlJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQXV0aGVudGljYXRpb24ga2V5IHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVJlc3BvbnNlIHtcbiAgYXBpS2V5PzogQVBJS2V5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnVuZGxlSWQ/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHNlcnZpY2VzSWQ/OiBzdHJpbmc7XG4gIHRlYW1JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGVJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8QXBwbGVBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnVuZGxlSWQ/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHNlcnZpY2VzSWQ/OiBzdHJpbmc7XG4gIHRlYW1JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb24ge1xuICBhY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uQWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb247XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGF1dGhlbnRpY2F0aW9uVG9rZW5Db25maWd1cmF0aW9uPzogQXV0aGVudGljYXRpb25Ub2tlbkNvbmZpZ3VyYXRpb247XG4gIGNsZWFuU3BlYWtDb25maWd1cmF0aW9uPzogQ2xlYW5TcGVha0NvbmZpZ3VyYXRpb247XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbWFpbENvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbkVtYWlsQ29uZmlndXJhdGlvbjtcbiAgZXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbjtcbiAgZm9ybUNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbkZvcm1Db25maWd1cmF0aW9uO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGp3dENvbmZpZ3VyYXRpb24/OiBKV1RDb25maWd1cmF0aW9uO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogTGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luQ29uZmlndXJhdGlvbj86IExvZ2luQ29uZmlndXJhdGlvbjtcbiAgbXVsdGlGYWN0b3JDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25NdWx0aUZhY3RvckNvbmZpZ3VyYXRpb247XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9hdXRoQ29uZmlndXJhdGlvbj86IE9BdXRoMkNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkbGVzc0NvbmZpZ3VyYXRpb24/OiBQYXNzd29yZGxlc3NDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25Db25maWd1cmF0aW9uPzogUmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uRGVsZXRlUG9saWN5PzogQXBwbGljYXRpb25SZWdpc3RyYXRpb25EZWxldGVQb2xpY3k7XG4gIHJvbGVzPzogQXJyYXk8QXBwbGljYXRpb25Sb2xlPjtcbiAgc2FtbHYyQ29uZmlndXJhdGlvbj86IFNBTUx2MkNvbmZpZ3VyYXRpb247XG4gIHN0YXRlPzogT2JqZWN0U3RhdGU7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdGhlbWVJZD86IFVVSUQ7XG4gIHVudmVyaWZpZWQ/OiBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucztcbiAgdmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdmVyaWZpY2F0aW9uU3RyYXRlZ3k/OiBWZXJpZmljYXRpb25TdHJhdGVneTtcbiAgdmVyaWZ5UmVnaXN0cmF0aW9uPzogYm9vbGVhbjtcbiAgd2ViQXV0aG5Db25maWd1cmF0aW9uPzogQXBwbGljYXRpb25XZWJBdXRobkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uQWNjZXNzQ29udHJvbENvbmZpZ3VyYXRpb24ge1xuICB1aUlQQWNjZXNzQ29udHJvbExpc3RJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25FbWFpbENvbmZpZ3VyYXRpb24ge1xuICBlbWFpbFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGVtYWlsVmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW1haWxWZXJpZmllZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGZvcmdvdFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25DcmVhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPblVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luTmV3RGV2aWNlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5TdXNwaWNpb3VzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRsZXNzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHNldFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kQWRkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kUmVtb3ZlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBFdmVudHMgdGhhdCBhcmUgYm91bmQgdG8gYXBwbGljYXRpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb24ge1xuICB0d29GYWN0b3JUcnVzdElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25Gb3JtQ29uZmlndXJhdGlvbiB7XG4gIGFkbWluUmVnaXN0cmF0aW9uRm9ybUlkPzogVVVJRDtcbiAgc2VsZlNlcnZpY2VGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbk11bHRpRmFjdG9yQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsPzogTXVsdGlGYWN0b3JFbWFpbFRlbXBsYXRlO1xuICBsb2dpblBvbGljeT86IE11bHRpRmFjdG9yTG9naW5Qb2xpY3k7XG4gIHNtcz86IE11bHRpRmFjdG9yU01TVGVtcGxhdGU7XG4gIHRydXN0UG9saWN5PzogQXBwbGljYXRpb25NdWx0aUZhY3RvclRydXN0UG9saWN5O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQXBwbGljYXRpb25NdWx0aUZhY3RvclRydXN0UG9saWN5IHtcbiAgQW55ID0gXCJBbnlcIixcbiAgVGhpcyA9IFwiVGhpc1wiLFxuICBOb25lID0gXCJOb25lXCJcbn1cblxuLyoqXG4gKiBBIEFwcGxpY2F0aW9uLWxldmVsIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJlZ2lzdHJhdGlvbkRlbGV0ZVBvbGljeSB7XG4gIHVudmVyaWZpZWQ/OiBUaW1lQmFzZWREZWxldGVQb2xpY3k7XG59XG5cbi8qKlxuICogVGhlIEFwcGxpY2F0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb24/OiBBcHBsaWNhdGlvbjtcbiAgcm9sZT86IEFwcGxpY2F0aW9uUm9sZTtcbiAgc291cmNlQXBwbGljYXRpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIEFwcGxpY2F0aW9uIEFQSSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblJlc3BvbnNlIHtcbiAgYXBwbGljYXRpb24/OiBBcHBsaWNhdGlvbjtcbiAgYXBwbGljYXRpb25zPzogQXJyYXk8QXBwbGljYXRpb24+O1xuICByb2xlPzogQXBwbGljYXRpb25Sb2xlO1xufVxuXG4vKipcbiAqIEEgcm9sZSBnaXZlbiB0byBhIHVzZXIgZm9yIGEgc3BlY2lmaWMgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBTZXRoIE11c3NlbG1hblxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUm9sZSB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG4gIGlzU3VwZXJSb2xlPzogYm9vbGVhbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uVW52ZXJpZmllZENvbmZpZ3VyYXRpb24ge1xuICByZWdpc3RyYXRpb24/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG4gIHZlcmlmaWNhdGlvblN0cmF0ZWd5PzogVmVyaWZpY2F0aW9uU3RyYXRlZ3k7XG4gIHdoZW5HYXRlZD86IFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zO1xufVxuXG4vKipcbiAqIEFwcGxpY2F0aW9uLWxldmVsIGNvbmZpZ3VyYXRpb24gZm9yIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uV2ViQXV0aG5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGJvb3RzdHJhcFdvcmtmbG93PzogQXBwbGljYXRpb25XZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbiAgcmVhdXRoZW50aWNhdGlvbldvcmtmbG93PzogQXBwbGljYXRpb25XZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25XZWJBdXRobldvcmtmbG93Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgYSBzaW1wbGUgYXR0YWNobWVudCB3aXRoIGEgYnl0ZSBhcnJheSwgbmFtZSBhbmQgTUlNRSB0eXBlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICBhdHRhY2htZW50PzogQXJyYXk8bnVtYmVyPjtcbiAgbWltZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBVc2VkIHRvIGNvbW11bmljYXRlIHdoZXRoZXIgYW5kIGhvdyBhdXRoZW50aWNhdG9yIGF0dGVzdGF0aW9uIHNob3VsZCBiZSBkZWxpdmVyZWQgdG8gdGhlIFJlbHlpbmcgUGFydHlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdHRlc3RhdGlvbkNvbnZleWFuY2VQcmVmZXJlbmNlIHtcbiAgbm9uZSA9IFwibm9uZVwiLFxuICBpbmRpcmVjdCA9IFwiaW5kaXJlY3RcIixcbiAgZGlyZWN0ID0gXCJkaXJlY3RcIixcbiAgZW50ZXJwcmlzZSA9IFwiZW50ZXJwcmlzZVwiXG59XG5cbi8qKlxuICogVXNlZCB0byBpbmRpY2F0ZSB3aGF0IHR5cGUgb2YgYXR0ZXN0YXRpb24gd2FzIGluY2x1ZGVkIGluIHRoZSBhdXRoZW50aWNhdG9yIHJlc3BvbnNlIGZvciBhIGdpdmVuIFdlYkF1dGhuIGNyZWRlbnRpYWwgYXQgdGhlIHRpbWUgaXQgd2FzIGNyZWF0ZWRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdHRlc3RhdGlvblR5cGUge1xuICBiYXNpYyA9IFwiYmFzaWNcIixcbiAgc2VsZiA9IFwic2VsZlwiLFxuICBhdHRlc3RhdGlvbkNhID0gXCJhdHRlc3RhdGlvbkNhXCIsXG4gIGFub255bWl6YXRpb25DYSA9IFwiYW5vbnltaXphdGlvbkNhXCIsXG4gIG5vbmUgPSBcIm5vbmVcIlxufVxuXG4vKipcbiAqIEFuIGF1ZGl0IGxvZy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZyB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IG51bWJlcjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaW5zZXJ0VXNlcj86IHN0cmluZztcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgbmV3VmFsdWU/OiBhbnk7XG4gIG9sZFZhbHVlPzogYW55O1xuICByZWFzb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dDb25maWd1cmF0aW9uIHtcbiAgZGVsZXRlPzogRGVsZXRlQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBFdmVudCBldmVudCB0byBhbiBhdWRpdCBsb2cgd2FzIGNyZWF0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhdWRpdExvZz86IEF1ZGl0TG9nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0V4cG9ydFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGNyaXRlcmlhPzogQXVkaXRMb2dTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1JlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYXVkaXRMb2c/OiBBdWRpdExvZztcbn1cblxuLyoqXG4gKiBBdWRpdCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dSZXNwb25zZSB7XG4gIGF1ZGl0TG9nPzogQXVkaXRMb2c7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGVuZD86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgbmV3VmFsdWU/OiBzdHJpbmc7XG4gIG9sZFZhbHVlPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB1c2VyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEF1ZGl0TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQXVkaXQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nU2VhcmNoUmVzcG9uc2Uge1xuICBhdWRpdExvZ3M/OiBBcnJheTxBdWRpdExvZz47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBBdXRoZW50aWNhdGlvblRocmVhdHMge1xuICBJbXBvc3NpYmxlVHJhdmVsID0gXCJJbXBvc3NpYmxlVHJhdmVsXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgPGEgaHJlZj1cImh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyNhdXRoZW50aWNhdG9yLWF0dGFjaG1lbnQtbW9kYWxpdHlcIj5hdXRoZW50aWNhdG9yIGF0dGFjaG1lbnQgbW9kYWxpdHk8L2E+LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhlbnRpY2F0b3JBdHRhY2htZW50IHtcbiAgcGxhdGZvcm0gPSBcInBsYXRmb3JtXCIsXG4gIGNyb3NzUGxhdGZvcm0gPSBcImNyb3NzUGxhdGZvcm1cIlxufVxuXG4vKipcbiAqIERlc2NyaWJlcyB0aGUgYXV0aGVudGljYXRvciBhdHRhY2htZW50IG1vZGFsaXR5IHByZWZlcmVuY2UgZm9yIGEgV2ViQXV0aG4gd29ya2Zsb3cuIFNlZSB7QGxpbmsgQXV0aGVudGljYXRvckF0dGFjaG1lbnR9XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQXV0aGVudGljYXRvckF0dGFjaG1lbnRQcmVmZXJlbmNlIHtcbiAgYW55ID0gXCJhbnlcIixcbiAgcGxhdGZvcm0gPSBcInBsYXRmb3JtXCIsXG4gIGNyb3NzUGxhdGZvcm0gPSBcImNyb3NzUGxhdGZvcm1cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdG9yQ29uZmlndXJhdGlvbiB7XG4gIGFsZ29yaXRobT86IFRPVFBBbGdvcml0aG07XG4gIGNvZGVMZW5ndGg/OiBudW1iZXI7XG4gIHRpbWVTdGVwPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFVzZWQgYnkgdGhlIFJlbHlpbmcgUGFydHkgdG8gc3BlY2lmeSB0aGVpciByZXF1aXJlbWVudHMgZm9yIGF1dGhlbnRpY2F0b3IgYXR0cmlidXRlcy4gRmllbGRzIHVzZSB0aGUgZGVwcmVjYXRlZCBcInJlc2lkZW50IGtleVwiIHRlcm1pbm9sb2d5IHRvIHJlZmVyXG4gKiB0byBjbGllbnQtc2lkZSBkaXNjb3ZlcmFibGUgY3JlZGVudGlhbHMgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBXZWJBdXRobiBMZXZlbCAxLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aGVudGljYXRvclNlbGVjdGlvbkNyaXRlcmlhIHtcbiAgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ/OiBBdXRoZW50aWNhdG9yQXR0YWNobWVudDtcbiAgcmVxdWlyZVJlc2lkZW50S2V5PzogYm9vbGVhbjtcbiAgcmVzaWRlbnRLZXk/OiBSZXNpZGVudEtleVJlcXVpcmVtZW50O1xuICB1c2VyVmVyaWZpY2F0aW9uPzogVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50O1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogQ29ubmVjdG9yVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRWxhc3RpY1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYWNjdXJhdGVUb3RhbD86IGJvb2xlYW47XG4gIGlkcz86IEFycmF5PFVVSUQ+O1xuICBxdWVyeT86IHN0cmluZztcbiAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XG4gIHNvcnRGaWVsZHM/OiBBcnJheTxTb3J0RmllbGQ+O1xufVxuXG4vKipcbiAqIEJhc2UtY2xhc3MgZm9yIGFsbCBGdXNpb25BdXRoIGV2ZW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRXZlbnQge1xuICBjcmVhdGVJbnN0YW50PzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGluZm8/OiBFdmVudEluZm87XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdHlwZT86IEV2ZW50VHlwZTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciByZXF1ZXN0cyB0aGF0IGNhbiBjb250YWluIGV2ZW50IGluZm9ybWF0aW9uLiBUaGlzIGV2ZW50IGluZm9ybWF0aW9uIGlzIHVzZWQgd2hlbiBzZW5kaW5nIFdlYmhvb2tzIG9yIGVtYWlsc1xuICogZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgZXZlbnQgaW5mb3JtYXRpb24gaXMgY29ycmVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgZXZlbnRJbmZvPzogRXZlbnRJbmZvO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlRXhwb3J0UmVxdWVzdCB7XG4gIGRhdGVUaW1lU2Vjb25kc0Zvcm1hdD86IHN0cmluZztcbiAgem9uZUlkPzogc3RyaW5nO1xufVxuXG4vLyBEbyBub3QgcmVxdWlyZSBhIHNldHRlciBmb3IgJ3R5cGUnLCBpdCBpcyBkZWZpbmVkIGJ5IHRoZSBjb25jcmV0ZSBjbGFzcyBhbmQgaXMgbm90IG11dGFibGVcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUlkZW50aXR5UHJvdmlkZXI8RCBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8VVVJRCwgRD47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsaW5raW5nU3RyYXRlZ3k/OiBJZGVudGl0eVByb3ZpZGVyTGlua2luZ1N0cmF0ZWd5O1xuICBuYW1lPzogc3RyaW5nO1xuICB0ZW5hbnRDb25maWd1cmF0aW9uPzogUmVjb3JkPFVVSUQsIElkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPjtcbiAgdHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjcmVhdGVSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBtZXRhRGF0YT86IE1ldGFEYXRhO1xuICBuZXdEZXZpY2U/OiBib29sZWFuO1xuICBub0pXVD86IGJvb2xlYW47XG59XG5cbi8vIERvIG5vdCByZXF1aXJlIGEgc2V0dGVyIGZvciAndHlwZScsIGl0IGlzIGRlZmluZWQgYnkgdGhlIGNvbmNyZXRlIGNsYXNzIGFuZCBpcyBub3QgbXV0YWJsZVxuZXhwb3J0IGludGVyZmFjZSBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydD86IHN0cmluZztcbiAgdHlwZT86IE1lc3NlbmdlclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VTQU1MdjJJZGVudGl0eVByb3ZpZGVyPEQgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxEPiB7XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIGtleUlkPzogVVVJRDtcbiAgdW5pcXVlSWRDbGFpbT86IHN0cmluZztcbiAgdXNlTmFtZUlkRm9yRW1haWw/OiBib29sZWFuO1xuICB1c2VybmFtZUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG51bWJlck9mUmVzdWx0cz86IG51bWJlcjtcbiAgb3JkZXJCeT86IHN0cmluZztcbiAgc3RhcnRSb3c/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIEJyZWFjaEFjdGlvbiB7XG4gIE9mZiA9IFwiT2ZmXCIsXG4gIFJlY29yZE9ubHkgPSBcIlJlY29yZE9ubHlcIixcbiAgTm90aWZ5VXNlciA9IFwiTm90aWZ5VXNlclwiLFxuICBSZXF1aXJlQ2hhbmdlID0gXCJSZXF1aXJlQ2hhbmdlXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEJyZWFjaGVkUGFzc3dvcmRTdGF0dXMge1xuICBOb25lID0gXCJOb25lXCIsXG4gIEV4YWN0TWF0Y2ggPSBcIkV4YWN0TWF0Y2hcIixcbiAgU3ViQWRkcmVzc01hdGNoID0gXCJTdWJBZGRyZXNzTWF0Y2hcIixcbiAgUGFzc3dvcmRPbmx5ID0gXCJQYXNzd29yZE9ubHlcIixcbiAgQ29tbW9uUGFzc3dvcmQgPSBcIkNvbW1vblBhc3N3b3JkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJlYWNoZWRQYXNzd29yZFRlbmFudE1ldHJpYyB7XG4gIGFjdGlvblJlcXVpcmVkPzogbnVtYmVyO1xuICBtYXRjaGVkQ29tbW9uUGFzc3dvcmRDb3VudD86IG51bWJlcjtcbiAgbWF0Y2hlZEV4YWN0Q291bnQ/OiBudW1iZXI7XG4gIG1hdGNoZWRQYXNzd29yZENvdW50PzogbnVtYmVyO1xuICBtYXRjaGVkU3ViQWRkcmVzc0NvdW50PzogbnVtYmVyO1xuICBwYXNzd29yZHNDaGVja2VkQ291bnQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIEJyZWFjaE1hdGNoTW9kZSB7XG4gIExvdyA9IFwiTG93XCIsXG4gIE1lZGl1bSA9IFwiTWVkaXVtXCIsXG4gIEhpZ2ggPSBcIkhpZ2hcIlxufVxuXG4vKipcbiAqIFhNTCBjYW5vbmljYWxpemF0aW9uIG1ldGhvZCBlbnVtZXJhdGlvbi4gVGhpcyBpcyB1c2VkIGZvciB0aGUgSWRQIGFuZCBTUCBzaWRlIG9mIEZ1c2lvbkF1dGggU0FNTC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQ2Fub25pY2FsaXphdGlvbk1ldGhvZCB7XG4gIGV4Y2x1c2l2ZSA9IFwiZXhjbHVzaXZlXCIsXG4gIGV4Y2x1c2l2ZV93aXRoX2NvbW1lbnRzID0gXCJleGNsdXNpdmVfd2l0aF9jb21tZW50c1wiLFxuICBpbmNsdXNpdmUgPSBcImluY2x1c2l2ZVwiLFxuICBpbmNsdXNpdmVfd2l0aF9jb21tZW50cyA9IFwiaW5jbHVzaXZlX3dpdGhfY29tbWVudHNcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDYXB0Y2hhTWV0aG9kIHtcbiAgR29vZ2xlUmVjYXB0Y2hhVjIgPSBcIkdvb2dsZVJlY2FwdGNoYVYyXCIsXG4gIEdvb2dsZVJlY2FwdGNoYVYzID0gXCJHb29nbGVSZWNhcHRjaGFWM1wiLFxuICBIQ2FwdGNoYSA9IFwiSENhcHRjaGFcIixcbiAgSENhcHRjaGFFbnRlcnByaXNlID0gXCJIQ2FwdGNoYUVudGVycHJpc2VcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENlcnRpZmljYXRlSW5mb3JtYXRpb24ge1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIG1kNUZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzZXJpYWxOdW1iZXI/OiBzdHJpbmc7XG4gIHNoYTFGaW5nZXJwcmludD86IHN0cmluZztcbiAgc2hhMVRodW1icHJpbnQ/OiBzdHJpbmc7XG4gIHNoYTI1NkZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzaGEyNTZUaHVtYnByaW50Pzogc3RyaW5nO1xuICBzdWJqZWN0Pzogc3RyaW5nO1xuICB2YWxpZEZyb20/OiBudW1iZXI7XG4gIHZhbGlkVG8/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGVudW0gQ2hhbmdlUGFzc3dvcmRSZWFzb24ge1xuICBBZG1pbmlzdHJhdGl2ZSA9IFwiQWRtaW5pc3RyYXRpdmVcIixcbiAgQnJlYWNoZWQgPSBcIkJyZWFjaGVkXCIsXG4gIEV4cGlyZWQgPSBcIkV4cGlyZWRcIixcbiAgVmFsaWRhdGlvbiA9IFwiVmFsaWRhdGlvblwiXG59XG5cbi8qKlxuICogQ2hhbmdlIHBhc3N3b3JkIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVBhc3N3b3JkUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbiAgY3VycmVudFBhc3N3b3JkPzogc3RyaW5nO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0cnVzdENoYWxsZW5nZT86IHN0cmluZztcbiAgdHJ1c3RUb2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGFuZ2UgcGFzc3dvcmQgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VQYXNzd29yZFJlc3BvbnNlIHtcbiAgb25lVGltZVBhc3N3b3JkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQ2xlYW5TcGVhayBjb25maWd1cmF0aW9uIGF0IHRoZSBzeXN0ZW0gYW5kIGFwcGxpY2F0aW9uIGxldmVsLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsZWFuU3BlYWtDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFwaUtleT86IHN0cmluZztcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgdXJsPzogc3RyaW5nO1xuICB1c2VybmFtZU1vZGVyYXRpb24/OiBVc2VybmFtZU1vZGVyYXRpb247XG59XG5cbmV4cG9ydCBlbnVtIENsaWVudEF1dGhlbnRpY2F0aW9uTWV0aG9kIHtcbiAgbm9uZSA9IFwibm9uZVwiLFxuICBjbGllbnRfc2VjcmV0X2Jhc2ljID0gXCJjbGllbnRfc2VjcmV0X2Jhc2ljXCIsXG4gIGNsaWVudF9zZWNyZXRfcG9zdCA9IFwiY2xpZW50X3NlY3JldF9wb3N0XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBDbGllbnRBdXRoZW50aWNhdGlvblBvbGljeSB7XG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZCA9IFwiTm90UmVxdWlyZWRcIixcbiAgTm90UmVxdWlyZWRXaGVuVXNpbmdQS0NFID0gXCJOb3RSZXF1aXJlZFdoZW5Vc2luZ1BLQ0VcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUG9saWN5IHtcbiAgY29ubmVjdG9ySWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZG9tYWlucz86IEFycmF5PHN0cmluZz47XG4gIG1pZ3JhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUmVxdWVzdCB7XG4gIGNvbm5lY3Rvcj86IEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdG9yUmVzcG9uc2Uge1xuICBjb25uZWN0b3I/OiBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbjtcbiAgY29ubmVjdG9ycz86IEFycmF5PEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uPjtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZXMgb2YgY29ubmVjdG9ycy4gVGhpcyBlbnVtIGlzIHN0b3JlZCBhcyBhbiBvcmRpbmFsIG9uIHRoZSA8Y29kZT5pZGVudGl0aWVzPC9jb2RlPiB0YWJsZSwgb3JkZXIgbXVzdCBiZSBtYWludGFpbmVkLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBlbnVtIENvbm5lY3RvclR5cGUge1xuICBGdXNpb25BdXRoID0gXCJGdXNpb25BdXRoXCIsXG4gIEdlbmVyaWMgPSBcIkdlbmVyaWNcIixcbiAgTERBUCA9IFwiTERBUFwiXG59XG5cbi8qKlxuICogTW9kZWxzIGEgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudCB7XG4gIGNvbnNlbnRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBjb3VudHJ5TWluaW11bUFnZUZvclNlbGZDb25zZW50PzogTG9jYWxpemVkSW50ZWdlcnM7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWZhdWx0TWluaW11bUFnZUZvclNlbGZDb25zZW50PzogbnVtYmVyO1xuICBlbWFpbFBsdXM/OiBFbWFpbFBsdXM7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG11bHRpcGxlVmFsdWVzQWxsb3dlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHZhbHVlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIFVzZXIgY29uc2VudCB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFJlcXVlc3Qge1xuICBjb25zZW50PzogQ29uc2VudDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnNlbnRSZXNwb25zZSB7XG4gIGNvbnNlbnQ/OiBDb25zZW50O1xuICBjb25zZW50cz86IEFycmF5PENvbnNlbnQ+O1xufVxuXG4vKipcbiAqIE1vZGVscyBhIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBDb25zZW50U3RhdHVzIHtcbiAgQWN0aXZlID0gXCJBY3RpdmVcIixcbiAgUmV2b2tlZCA9IFwiUmV2b2tlZFwiXG59XG5cbi8qKlxuICogU3RhdHVzIGZvciBjb250ZW50IGxpa2UgdXNlcm5hbWVzLCBwcm9maWxlIGF0dHJpYnV0ZXMsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gQ29udGVudFN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgUkVKRUNURUQgPSBcIlJFSkVDVEVEXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENPUlNDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFsbG93Q3JlZGVudGlhbHM/OiBib29sZWFuO1xuICBhbGxvd2VkSGVhZGVycz86IEFycmF5PHN0cmluZz47XG4gIGFsbG93ZWRNZXRob2RzPzogQXJyYXk8SFRUUE1ldGhvZD47XG4gIGFsbG93ZWRPcmlnaW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBleHBvc2VkSGVhZGVycz86IEFycmF5PHN0cmluZz47XG4gIHByZWZsaWdodE1heEFnZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG51bWJlciBpZGVudGlmeWluZyBhIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtLiBWYWx1ZXMgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgPGFcbiAqIGhyZWY9XCJodHRwczovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jb3NlL2Nvc2UueGh0bWwjYWxnb3JpdGhtc1wiPklBTkEgQ09TRSBBbGdvcml0aG1zIHJlZ2lzdHJ5PC9hPlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIENvc2VBbGdvcml0aG1JZGVudGlmaWVyIHtcbiAgRVMyNTYgPSBcIlNIQTI1NndpdGhFQ0RTQVwiLFxuICBFUzM4NCA9IFwiU0hBMzg0d2l0aEVDRFNBXCIsXG4gIEVTNTEyID0gXCJTSEE1MTJ3aXRoRUNEU0FcIixcbiAgUlMyNTYgPSBcIlNIQTI1NndpdGhSU0FcIixcbiAgUlMzODQgPSBcIlNIQTM4NHdpdGhSU0FcIixcbiAgUlM1MTIgPSBcIlNIQTUxMndpdGhSU0FcIixcbiAgUFMyNTYgPSBcIlNIQS0yNTZcIixcbiAgUFMzODQgPSBcIlNIQS0zODRcIixcbiAgUFM1MTIgPSBcIlNIQS01MTJcIlxufVxuXG4vKipcbiAqIENPU0UgRWxsaXB0aWMgQ3VydmUgaWRlbnRpZmllciB0byBkZXRlcm1pbmUgd2hpY2ggZWxsaXB0aWMgY3VydmUgdG8gdXNlIHdpdGggYSBnaXZlbiBrZXlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBDb3NlRWxsaXB0aWNDdXJ2ZSB7XG4gIFJlc2VydmVkID0gXCJSZXNlcnZlZFwiLFxuICBQMjU2ID0gXCJQMjU2XCIsXG4gIFAzODQgPSBcIlAzODRcIixcbiAgUDUyMSA9IFwiUDUyMVwiLFxuICBYMjU1MTkgPSBcIlgyNTUxOVwiLFxuICBYNDQ4ID0gXCJYNDQ4XCIsXG4gIEVkMjU1MTkgPSBcIkVkMjU1MTlcIixcbiAgRWQ0NDggPSBcIkVkNDQ4XCIsXG4gIFNlY3AyNTZrMSA9IFwiU2VjcDI1NmsxXCJcbn1cblxuLyoqXG4gKiBDT1NFIGtleSB0eXBlXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQ29zZUtleVR5cGUge1xuICBSZXNlcnZlZCA9IFwiMFwiLFxuICBPS1AgPSBcIjFcIixcbiAgRUMyID0gXCIyXCIsXG4gIFJTQSA9IFwiM1wiLFxuICBTeW1tZXRyaWMgPSBcIjRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvdW50IHtcbiAgY291bnQ/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBvdXRwdXQgZm9yIHRoZSB7QGNvZGUgY3JlZFByb3BzfSBleHRlbnNpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxQcm9wZXJ0aWVzT3V0cHV0IHtcbiAgcms/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlIHtcbiAgZGFpbHlBY3RpdmVVc2Vycz86IEFycmF5PENvdW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBudW1iZXJPZkRheXNUb1JldGFpbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlSW5mbyB7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBsYXN0QWNjZXNzZWRBZGRyZXNzPzogc3RyaW5nO1xuICBsYXN0QWNjZXNzZWRJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICB0eXBlPzogRGV2aWNlVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVJlc3BvbnNlIHtcbiAgZGV2aWNlX2NvZGU/OiBzdHJpbmc7XG4gIGV4cGlyZXNfaW4/OiBudW1iZXI7XG4gIGludGVydmFsPzogbnVtYmVyO1xuICB1c2VyX2NvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl91cmk/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbl91cmlfY29tcGxldGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIERldmljZVR5cGUge1xuICBCUk9XU0VSID0gXCJCUk9XU0VSXCIsXG4gIERFU0tUT1AgPSBcIkRFU0tUT1BcIixcbiAgTEFQVE9QID0gXCJMQVBUT1BcIixcbiAgTU9CSUxFID0gXCJNT0JJTEVcIixcbiAgT1RIRVIgPSBcIk9USEVSXCIsXG4gIFNFUlZFUiA9IFwiU0VSVkVSXCIsXG4gIFRBQkxFVCA9IFwiVEFCTEVUXCIsXG4gIFRWID0gXCJUVlwiLFxuICBVTktOT1dOID0gXCJVTktOT1dOXCJcbn1cblxuLyoqXG4gKiBBIGRpc3BsYXlhYmxlIHJhdyBsb2dpbiB0aGF0IGluY2x1ZGVzIGFwcGxpY2F0aW9uIG5hbWUgYW5kIHVzZXIgbG9naW5JZC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5YWJsZVJhd0xvZ2luIGV4dGVuZHMgUmF3TG9naW4ge1xuICBhcHBsaWNhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIGxvY2F0aW9uPzogTG9jYXRpb247XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBhbGwgaWRlbnRpdHkgcHJvdmlkZXJzIHRoYXQgY2FuIGJlIGRvbWFpbiBiYXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb21haW5CYXNlZElkZW50aXR5UHJvdmlkZXIge1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgYW4gYWJzdHJhY3Rpb24gb2YgYSBzaW1wbGUgZW1haWwgbWVzc2FnZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbCB7XG4gIGF0dGFjaG1lbnRzPzogQXJyYXk8QXR0YWNobWVudD47XG4gIGJjYz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG4gIGNjPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbiAgZnJvbT86IEVtYWlsQWRkcmVzcztcbiAgaHRtbD86IHN0cmluZztcbiAgcmVwbHlUbz86IEVtYWlsQWRkcmVzcztcbiAgc3ViamVjdD86IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgdG8/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xufVxuXG4vKipcbiAqIEFuIGVtYWlsIGFkZHJlc3MuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxBZGRyZXNzIHtcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgZGlzcGxheT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbENvbmZpZ3VyYXRpb24ge1xuICBhZGRpdGlvbmFsSGVhZGVycz86IEFycmF5PEVtYWlsSGVhZGVyPjtcbiAgZGVidWc/OiBib29sZWFuO1xuICBkZWZhdWx0RnJvbUVtYWlsPzogc3RyaW5nO1xuICBkZWZhdWx0RnJvbU5hbWU/OiBzdHJpbmc7XG4gIGVtYWlsVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW1haWxWZXJpZmllZEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGZvcmdvdFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgaG9zdD86IHN0cmluZztcbiAgaW1wbGljaXRFbWFpbFZlcmlmaWNhdGlvbkFsbG93ZWQ/OiBib29sZWFuO1xuICBsb2dpbklkSW5Vc2VPbkNyZWF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5OZXdEZXZpY2VFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpblN1c3BpY2lvdXNFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgcGFzc3dvcmRsZXNzRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcGFzc3dvcmRSZXNldFN1Y2Nlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFVwZGF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIHByb3BlcnRpZXM/OiBzdHJpbmc7XG4gIHNlY3VyaXR5PzogRW1haWxTZWN1cml0eVR5cGU7XG4gIHNldFBhc3N3b3JkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kQWRkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdHdvRmFjdG9yTWV0aG9kUmVtb3ZlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgdW52ZXJpZmllZD86IEVtYWlsVW52ZXJpZmllZE9wdGlvbnM7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xuICB2ZXJpZnlFbWFpbD86IGJvb2xlYW47XG4gIHZlcmlmeUVtYWlsV2hlbkNoYW5nZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEhlYWRlciB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsUGx1cyBleHRlbmRzIEVuYWJsZWFibGUge1xuICBlbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBtYXhpbXVtVGltZVRvU2VuZEVtYWlsSW5Ib3Vycz86IG51bWJlcjtcbiAgbWluaW11bVRpbWVUb1NlbmRFbWFpbEluSG91cnM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBlbnVtIEVtYWlsU2VjdXJpdHlUeXBlIHtcbiAgTk9ORSA9IFwiTk9ORVwiLFxuICBTU0wgPSBcIlNTTFwiLFxuICBUTFMgPSBcIlRMU1wiXG59XG5cbi8qKlxuICogU3RvcmVzIGFuIGVtYWlsIHRlbXBsYXRlIHVzZWQgdG8gc2VuZCBlbWFpbHMgdG8gdXNlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZSB7XG4gIGRlZmF1bHRGcm9tTmFtZT86IHN0cmluZztcbiAgZGVmYXVsdEh0bWxUZW1wbGF0ZT86IHN0cmluZztcbiAgZGVmYXVsdFN1YmplY3Q/OiBzdHJpbmc7XG4gIGRlZmF1bHRUZXh0VGVtcGxhdGU/OiBzdHJpbmc7XG4gIGZyb21FbWFpbD86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkRnJvbU5hbWVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkSHRtbFRlbXBsYXRlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIGxvY2FsaXplZFN1YmplY3RzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkVGV4dFRlbXBsYXRlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZUVycm9ycyB7XG4gIHBhcnNlRXJyb3JzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVuZGVyRXJyb3JzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBFbWFpbCB0ZW1wbGF0ZSByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVGVtcGxhdGVSZXF1ZXN0IHtcbiAgZW1haWxUZW1wbGF0ZT86IEVtYWlsVGVtcGxhdGU7XG59XG5cbi8qKlxuICogRW1haWwgdGVtcGxhdGUgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVJlc3BvbnNlIHtcbiAgZW1haWxUZW1wbGF0ZT86IEVtYWlsVGVtcGxhdGU7XG4gIGVtYWlsVGVtcGxhdGVzPzogQXJyYXk8RW1haWxUZW1wbGF0ZT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsVW52ZXJpZmllZE9wdGlvbnMge1xuICBhbGxvd0VtYWlsQ2hhbmdlV2hlbkdhdGVkPzogYm9vbGVhbjtcbiAgYmVoYXZpb3I/OiBVbnZlcmlmaWVkQmVoYXZpb3I7XG59XG5cbi8qKlxuICogU29tZXRoaW5nIHRoYXQgY2FuIGJlIGVuYWJsZWQgYW5kIHRodXMgYWxzbyBkaXNhYmxlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlYWJsZSB7XG4gIGVuYWJsZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdGhhdCBhIHVzZXIgY2FuIGJlIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8uIE9yIGFuIGVudGl0eSB0aGF0IGNhbiBiZSBncmFudGVkIHBlcm1pc3Npb25zIHRvIGFub3RoZXIgZW50aXR5LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eSB7XG4gIGNsaWVudElkPzogc3RyaW5nO1xuICBjbGllbnRTZWNyZXQ/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwYXJlbnRJZD86IFVVSUQ7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdHlwZT86IEVudGl0eVR5cGU7XG59XG5cbi8qKlxuICogQSBncmFudCBmb3IgYW4gZW50aXR5IHRvIGEgdXNlciBvciBhbm90aGVyIGVudGl0eS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbnRpdHk/OiBFbnRpdHk7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVjaXBpZW50RW50aXR5SWQ/OiBVVUlEO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEVudGl0eSBncmFudCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRSZXF1ZXN0IHtcbiAgZ3JhbnQ/OiBFbnRpdHlHcmFudDtcbn1cblxuLyoqXG4gKiBFbnRpdHkgZ3JhbnQgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFJlc3BvbnNlIHtcbiAgZ3JhbnQ/OiBFbnRpdHlHcmFudDtcbiAgZ3JhbnRzPzogQXJyYXk8RW50aXR5R3JhbnQ+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgZW50aXR5IGdyYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZW50aXR5SWQ/OiBVVUlEO1xuICBuYW1lPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbnRpdHkgZ3JhbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50U2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVudGl0eUdyYW50U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0eSBncmFudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRTZWFyY2hSZXNwb25zZSB7XG4gIGdyYW50cz86IEFycmF5PEVudGl0eUdyYW50PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogSldUIENvbmZpZ3VyYXRpb24gZm9yIGVudGl0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUpXVENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWNjZXNzVG9rZW5LZXlJZD86IFVVSUQ7XG4gIHRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRW50aXR5IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlSZXF1ZXN0IHtcbiAgZW50aXR5PzogRW50aXR5O1xufVxuXG4vKipcbiAqIEVudGl0eSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVJlc3BvbnNlIHtcbiAgZW50aXR5PzogRW50aXR5O1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGVudGl0eSBxdWVyeS4gSXQgcHJvdmlkZXMgYSBidWlsZCBwYXR0ZXJuIGFzIHdlbGwgYXMgcHVibGljIGZpZWxkcyBmb3IgdXNlIG9uIGZvcm1zIGFuZCBpbiBhY3Rpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZUVsYXN0aWNTZWFyY2hDcml0ZXJpYSB7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0aWVzXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0aWVzXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlTZWFyY2hSZXNwb25zZSB7XG4gIGVudGl0aWVzPzogQXJyYXk8RW50aXR5PjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGVudGl0eSB0eXBlIHRoYXQgaGFzIGEgc3BlY2lmaWMgc2V0IG9mIHBlcm1pc3Npb25zLiBUaGVzZSBhcmUgZ2xvYmFsIG9iamVjdHMgYW5kIGNhbiBiZSB1c2VkIGFjcm9zcyB0ZW5hbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGUge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBqd3RDb25maWd1cmF0aW9uPzogRW50aXR5SldUQ29uZmlndXJhdGlvbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBlcm1pc3Npb25zPzogQXJyYXk8RW50aXR5VHlwZVBlcm1pc3Npb24+O1xufVxuXG4vKipcbiAqIE1vZGVscyBhIHNwZWNpZmljIGVudGl0eSB0eXBlIHBlcm1pc3Npb24uIFRoaXMgcGVybWlzc2lvbiBjYW4gYmUgZ3JhbnRlZCB0byB1c2VycyBvciBvdGhlciBlbnRpdGllcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlUGVybWlzc2lvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpc0RlZmF1bHQ/OiBib29sZWFuO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFbnRpdHkgVHlwZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVJlcXVlc3Qge1xuICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcbiAgcGVybWlzc2lvbj86IEVudGl0eVR5cGVQZXJtaXNzaW9uO1xufVxuXG4vKipcbiAqIEVudGl0eSBUeXBlIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVJlc3BvbnNlIHtcbiAgZW50aXR5VHlwZT86IEVudGl0eVR5cGU7XG4gIGVudGl0eVR5cGVzPzogQXJyYXk8RW50aXR5VHlwZT47XG4gIHBlcm1pc3Npb24/OiBFbnRpdHlUeXBlUGVybWlzc2lvbjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBlbnRpdHkgdHlwZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFbnRpdHlUeXBlU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3BvbnNlIGZvciBlbnRpdHkgdHlwZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlIHtcbiAgZW50aXR5VHlwZXM/OiBBcnJheTxFbnRpdHlUeXBlPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXBpY0dhbWVzQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVwaWMgZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVwaWNHYW1lc0lkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxFcGljR2FtZXNBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIGVycm9yLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yIHtcbiAgY29kZT86IHN0cmluZztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RhbmRhcmQgZXJyb3IgZG9tYWluIG9iamVjdCB0aGF0IGNhbiBhbHNvIGJlIHVzZWQgYXMgdGhlIHJlc3BvbnNlIGZyb20gYW4gQVBJIGNhbGwuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JzIHtcbiAgZmllbGRFcnJvcnM/OiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxFcnJvcj4+O1xuICBnZW5lcmFsRXJyb3JzPzogQXJyYXk8RXJyb3I+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q29uZmlndXJhdGlvbiB7XG4gIGV2ZW50cz86IFJlY29yZDxFdmVudFR5cGUsIEV2ZW50Q29uZmlndXJhdGlvbkRhdGE+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50Q29uZmlndXJhdGlvbkRhdGEgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgdHJhbnNhY3Rpb25UeXBlPzogVHJhbnNhY3Rpb25UeXBlO1xufVxuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IGEgdXNlciBldmVudCAobG9naW4sIHJlZ2lzdGVyLCBldGMpIHRoYXQgaGVscHMgaWRlbnRpZnkgdGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQgKGxvY2F0aW9uLCBkZXZpY2UgdHlwZSwgT1MsIGV0YykuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRJbmZvIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRldmljZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBkZXZpY2VOYW1lPzogc3RyaW5nO1xuICBkZXZpY2VUeXBlPzogc3RyaW5nO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIGxvY2F0aW9uPzogTG9jYXRpb247XG4gIG9zPzogc3RyaW5nO1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgbG9nIHVzZWQgaW50ZXJuYWxseSBieSBGdXNpb25BdXRoIHRvIGhlbHAgZGV2ZWxvcGVycyBkZWJ1ZyBob29rcywgV2ViaG9va3MsIGVtYWlsIHRlbXBsYXRlcywgZXRjLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nIHtcbiAgaWQ/OiBudW1iZXI7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIHR5cGU/OiBFdmVudExvZ1R5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dDb25maWd1cmF0aW9uIHtcbiAgbnVtYmVyVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRXZlbnQgZXZlbnQgdG8gYW4gZXZlbnQgbG9nIHdhcyBjcmVhdGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ0NyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZXZlbnRMb2c/OiBFdmVudExvZztcbn1cblxuLyoqXG4gKiBFdmVudCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nUmVzcG9uc2Uge1xuICBldmVudExvZz86IEV2ZW50TG9nO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgdGhlIGV2ZW50IGxvZy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZW5kPzogbnVtYmVyO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBzdGFydD86IG51bWJlcjtcbiAgdHlwZT86IEV2ZW50TG9nVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ1NlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFdmVudExvZ1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ1NlYXJjaFJlc3BvbnNlIHtcbiAgZXZlbnRMb2dzPzogQXJyYXk8RXZlbnRMb2c+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFdmVudCBMb2cgVHlwZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRXZlbnRMb2dUeXBlIHtcbiAgSW5mb3JtYXRpb24gPSBcIkluZm9ybWF0aW9uXCIsXG4gIERlYnVnID0gXCJEZWJ1Z1wiLFxuICBFcnJvciA9IFwiRXJyb3JcIlxufVxuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgdGhlIGV2ZW50IGluZm9ybWF0aW9uLiBUaGlzIGlzIHRoZSBKU09OIHRoYXQgaXMgc2VudCBmcm9tIEZ1c2lvbkF1dGggdG8gd2ViaG9va3MuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRSZXF1ZXN0IHtcbiAgZXZlbnQ/OiBCYXNlRXZlbnQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBldmVudCB0eXBlcyB0aGF0IEZ1c2lvbkF1dGggcHJvZHVjZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIEV2ZW50VHlwZSB7XG4gIEpXVFB1YmxpY0tleVVwZGF0ZSA9IFwiand0LnB1YmxpYy1rZXkudXBkYXRlXCIsXG4gIEpXVFJlZnJlc2hUb2tlblJldm9rZSA9IFwiand0LnJlZnJlc2gtdG9rZW4ucmV2b2tlXCIsXG4gIEpXVFJlZnJlc2ggPSBcImp3dC5yZWZyZXNoXCIsXG4gIEF1ZGl0TG9nQ3JlYXRlID0gXCJhdWRpdC1sb2cuY3JlYXRlXCIsXG4gIEV2ZW50TG9nQ3JlYXRlID0gXCJldmVudC1sb2cuY3JlYXRlXCIsXG4gIEtpY2tzdGFydFN1Y2Nlc3MgPSBcImtpY2tzdGFydC5zdWNjZXNzXCIsXG4gIEdyb3VwQ3JlYXRlID0gXCJncm91cC5jcmVhdGVcIixcbiAgR3JvdXBDcmVhdGVDb21wbGV0ZSA9IFwiZ3JvdXAuY3JlYXRlLmNvbXBsZXRlXCIsXG4gIEdyb3VwRGVsZXRlID0gXCJncm91cC5kZWxldGVcIixcbiAgR3JvdXBEZWxldGVDb21wbGV0ZSA9IFwiZ3JvdXAuZGVsZXRlLmNvbXBsZXRlXCIsXG4gIEdyb3VwTWVtYmVyQWRkID0gXCJncm91cC5tZW1iZXIuYWRkXCIsXG4gIEdyb3VwTWVtYmVyQWRkQ29tcGxldGUgPSBcImdyb3VwLm1lbWJlci5hZGQuY29tcGxldGVcIixcbiAgR3JvdXBNZW1iZXJSZW1vdmUgPSBcImdyb3VwLm1lbWJlci5yZW1vdmVcIixcbiAgR3JvdXBNZW1iZXJSZW1vdmVDb21wbGV0ZSA9IFwiZ3JvdXAubWVtYmVyLnJlbW92ZS5jb21wbGV0ZVwiLFxuICBHcm91cE1lbWJlclVwZGF0ZSA9IFwiZ3JvdXAubWVtYmVyLnVwZGF0ZVwiLFxuICBHcm91cE1lbWJlclVwZGF0ZUNvbXBsZXRlID0gXCJncm91cC5tZW1iZXIudXBkYXRlLmNvbXBsZXRlXCIsXG4gIEdyb3VwVXBkYXRlID0gXCJncm91cC51cGRhdGVcIixcbiAgR3JvdXBVcGRhdGVDb21wbGV0ZSA9IFwiZ3JvdXAudXBkYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJBY3Rpb24gPSBcInVzZXIuYWN0aW9uXCIsXG4gIFVzZXJCdWxrQ3JlYXRlID0gXCJ1c2VyLmJ1bGsuY3JlYXRlXCIsXG4gIFVzZXJDcmVhdGUgPSBcInVzZXIuY3JlYXRlXCIsXG4gIFVzZXJDcmVhdGVDb21wbGV0ZSA9IFwidXNlci5jcmVhdGUuY29tcGxldGVcIixcbiAgVXNlckRlYWN0aXZhdGUgPSBcInVzZXIuZGVhY3RpdmF0ZVwiLFxuICBVc2VyRGVsZXRlID0gXCJ1c2VyLmRlbGV0ZVwiLFxuICBVc2VyRGVsZXRlQ29tcGxldGUgPSBcInVzZXIuZGVsZXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJFbWFpbFVwZGF0ZSA9IFwidXNlci5lbWFpbC51cGRhdGVcIixcbiAgVXNlckVtYWlsVmVyaWZpZWQgPSBcInVzZXIuZW1haWwudmVyaWZpZWRcIixcbiAgVXNlcklkZW50aXR5UHJvdmlkZXJMaW5rID0gXCJ1c2VyLmlkZW50aXR5LXByb3ZpZGVyLmxpbmtcIixcbiAgVXNlcklkZW50aXR5UHJvdmlkZXJVbmxpbmsgPSBcInVzZXIuaWRlbnRpdHktcHJvdmlkZXIudW5saW5rXCIsXG4gIFVzZXJMb2dpbklkRHVwbGljYXRlT25DcmVhdGUgPSBcInVzZXIubG9naW5JZC5kdXBsaWNhdGUuY3JlYXRlXCIsXG4gIFVzZXJMb2dpbklkRHVwbGljYXRlT25VcGRhdGUgPSBcInVzZXIubG9naW5JZC5kdXBsaWNhdGUudXBkYXRlXCIsXG4gIFVzZXJMb2dpbkZhaWxlZCA9IFwidXNlci5sb2dpbi5mYWlsZWRcIixcbiAgVXNlckxvZ2luTmV3RGV2aWNlID0gXCJ1c2VyLmxvZ2luLm5ldy1kZXZpY2VcIixcbiAgVXNlckxvZ2luU3VjY2VzcyA9IFwidXNlci5sb2dpbi5zdWNjZXNzXCIsXG4gIFVzZXJMb2dpblN1c3BpY2lvdXMgPSBcInVzZXIubG9naW4uc3VzcGljaW91c1wiLFxuICBVc2VyUGFzc3dvcmRCcmVhY2ggPSBcInVzZXIucGFzc3dvcmQuYnJlYWNoXCIsXG4gIFVzZXJQYXNzd29yZFJlc2V0U2VuZCA9IFwidXNlci5wYXNzd29yZC5yZXNldC5zZW5kXCIsXG4gIFVzZXJQYXNzd29yZFJlc2V0U3RhcnQgPSBcInVzZXIucGFzc3dvcmQucmVzZXQuc3RhcnRcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTdWNjZXNzID0gXCJ1c2VyLnBhc3N3b3JkLnJlc2V0LnN1Y2Nlc3NcIixcbiAgVXNlclBhc3N3b3JkVXBkYXRlID0gXCJ1c2VyLnBhc3N3b3JkLnVwZGF0ZVwiLFxuICBVc2VyUmVhY3RpdmF0ZSA9IFwidXNlci5yZWFjdGl2YXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25DcmVhdGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmNyZWF0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uQ3JlYXRlQ29tcGxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmNyZWF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi5kZWxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZUNvbXBsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi5kZWxldGUuY29tcGxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24udXBkYXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVDb21wbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24udXBkYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25WZXJpZmllZCA9IFwidXNlci5yZWdpc3RyYXRpb24udmVyaWZpZWRcIixcbiAgVXNlclR3b0ZhY3Rvck1ldGhvZEFkZCA9IFwidXNlci50d28tZmFjdG9yLm1ldGhvZC5hZGRcIixcbiAgVXNlclR3b0ZhY3Rvck1ldGhvZFJlbW92ZSA9IFwidXNlci50d28tZmFjdG9yLm1ldGhvZC5yZW1vdmVcIixcbiAgVXNlclVwZGF0ZSA9IFwidXNlci51cGRhdGVcIixcbiAgVXNlclVwZGF0ZUNvbXBsZXRlID0gXCJ1c2VyLnVwZGF0ZS5jb21wbGV0ZVwiLFxuICBUZXN0ID0gXCJ0ZXN0XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gRXhwaXJ5VW5pdCB7XG4gIE1JTlVURVMgPSBcIk1JTlVURVNcIixcbiAgSE9VUlMgPSBcIkhPVVJTXCIsXG4gIERBWVMgPSBcIkRBWVNcIixcbiAgV0VFS1MgPSBcIldFRUtTXCIsXG4gIE1PTlRIUyA9IFwiTU9OVEhTXCIsXG4gIFlFQVJTID0gXCJZRUFSU1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uR3JhbnRJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGNoYW5nZVBhc3N3b3JkSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBjaGFuZ2VQYXNzd29yZElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZGV2aWNlQ29kZVRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGRldmljZVVzZXJDb2RlSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBlbWFpbFZlcmlmaWNhdGlvbklkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgZW1haWxWZXJpZmljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIGVtYWlsVmVyaWZpY2F0aW9uT25lVGltZUNvZGVHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBleHRlcm5hbEF1dGhlbnRpY2F0aW9uSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBvbmVUaW1lUGFzc3dvcmRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwYXNzd29yZGxlc3NMb2dpbkdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkbGVzc0xvZ2luVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcGVuZGluZ0FjY291bnRMaW5rVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbk9uZVRpbWVDb2RlR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgc2FtbHYyQXV0aE5SZXF1ZXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBzZXR1cFBhc3N3b3JkSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBzZXR1cFBhc3N3b3JkSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0cnVzdFRva2VuVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHdvRmFjdG9ySWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0d29GYWN0b3JPbmVUaW1lQ29kZUlkR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgdHdvRmFjdG9yT25lVGltZUNvZGVJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHR3b0ZhY3RvclRydXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB3ZWJBdXRobkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgd2ViQXV0aG5SZWdpc3RyYXRpb25DaGFsbGVuZ2VUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEpXVEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBFeHRlcm5hbCBKV1Qtb25seSBpZGVudGl0eSBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmIGFuZCBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxKV1RJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8RXh0ZXJuYWxKV1RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgY2xhaW1NYXA/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBkZWZhdWx0S2V5SWQ/OiBVVUlEO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgaGVhZGVyS2V5UGFyYW1ldGVyPzogc3RyaW5nO1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbiAgdW5pcXVlSWRlbnRpdHlDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFwcElkPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBmaWVsZHM/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBwZXJtaXNzaW9ucz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGYWNlYm9vayBzb2NpYWwgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFjZWJvb2tJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8RmFjZWJvb2tBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGZpZWxkcz86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHBlcm1pc3Npb25zPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcG9saWN5IHRvIGNvbmZpZ3VyZSBpZiBhbmQgd2hlbiB0aGUgdXNlci1hY3Rpb24gaXMgY2FuY2VsZWQgcHJpb3IgdG8gdGhlIGV4cGlyYXRpb24gb2YgdGhlIGFjdGlvbi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkQXV0aGVudGljYXRpb25BY3Rpb25DYW5jZWxQb2xpY3kge1xuICBvblBhc3N3b3JkUmVzZXQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBiZWhhdmlvciBvZiBmYWlsZWQgbG9naW4gYXR0ZW1wdHMuIFRoaXMgaGVscHMgdXMgcHJvdGVjdCBhZ2FpbnN0IGJydXRlIGZvcmNlIHBhc3N3b3JkIGF0dGFja3MuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhaWxlZEF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFjdGlvbkNhbmNlbFBvbGljeT86IEZhaWxlZEF1dGhlbnRpY2F0aW9uQWN0aW9uQ2FuY2VsUG9saWN5O1xuICBhY3Rpb25EdXJhdGlvbj86IG51bWJlcjtcbiAgYWN0aW9uRHVyYXRpb25Vbml0PzogRXhwaXJ5VW5pdDtcbiAgZW1haWxVc2VyPzogYm9vbGVhbjtcbiAgcmVzZXRDb3VudEluU2Vjb25kcz86IG51bWJlcjtcbiAgdG9vTWFueUF0dGVtcHRzPzogbnVtYmVyO1xuICB1c2VyQWN0aW9uSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyBhIGZhbWlseSBncm91cGluZyBvZiB1c2Vycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHkge1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtZW1iZXJzPzogQXJyYXk8RmFtaWx5TWVtYmVyPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFsbG93Q2hpbGRSZWdpc3RyYXRpb25zPzogYm9vbGVhbjtcbiAgY29uZmlybUNoaWxkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZGVsZXRlT3JwaGFuZWRBY2NvdW50cz86IGJvb2xlYW47XG4gIGRlbGV0ZU9ycGhhbmVkQWNjb3VudHNEYXlzPzogbnVtYmVyO1xuICBmYW1pbHlSZXF1ZXN0RW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbWF4aW11bUNoaWxkQWdlPzogbnVtYmVyO1xuICBtaW5pbXVtT3duZXJBZ2U/OiBudW1iZXI7XG4gIHBhcmVudEVtYWlsUmVxdWlyZWQ/OiBib29sZWFuO1xuICBwYXJlbnRSZWdpc3RyYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IGZvciBzZW5kaW5nIG91dCBmYW1pbHkgcmVxdWVzdHMgdG8gcGFyZW50J3MuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5RW1haWxSZXF1ZXN0IHtcbiAgcGFyZW50RW1haWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgc2luZ2xlIGZhbWlseSBtZW1iZXIuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5TWVtYmVyIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBvd25lcj86IGJvb2xlYW47XG4gIHJvbGU/OiBGYW1pbHlSb2xlO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEFQSSByZXF1ZXN0IGZvciBtYW5hZ2luZyBmYW1pbGllcyBhbmQgbWVtYmVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlSZXF1ZXN0IHtcbiAgZmFtaWx5TWVtYmVyPzogRmFtaWx5TWVtYmVyO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgbWFuYWdpbmcgZmFtaWxpZXMgYW5kIG1lbWJlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFtaWx5UmVzcG9uc2Uge1xuICBmYW1pbGllcz86IEFycmF5PEZhbWlseT47XG4gIGZhbWlseT86IEZhbWlseTtcbn1cblxuZXhwb3J0IGVudW0gRmFtaWx5Um9sZSB7XG4gIENoaWxkID0gXCJDaGlsZFwiLFxuICBUZWVuID0gXCJUZWVuXCIsXG4gIEFkdWx0ID0gXCJBZHVsdFwiXG59XG5cbi8qKlxuICogRm9yZ290IHBhc3N3b3JkIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmdvdFBhc3N3b3JkUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHNlbmRGb3Jnb3RQYXNzd29yZEVtYWlsPzogYm9vbGVhbjtcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB1c2VybmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3Jnb3QgcGFzc3dvcmQgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3Jnb3RQYXNzd29yZFJlc3BvbnNlIHtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGVwcz86IEFycmF5PEZvcm1TdGVwPjtcbiAgdHlwZT86IEZvcm1UeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybUNvbnRyb2wge1xuICBjaGVja2JveCA9IFwiY2hlY2tib3hcIixcbiAgbnVtYmVyID0gXCJudW1iZXJcIixcbiAgcGFzc3dvcmQgPSBcInBhc3N3b3JkXCIsXG4gIHJhZGlvID0gXCJyYWRpb1wiLFxuICBzZWxlY3QgPSBcInNlbGVjdFwiLFxuICB0ZXh0YXJlYSA9IFwidGV4dGFyZWFcIixcbiAgdGV4dCA9IFwidGV4dFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtRGF0YVR5cGUge1xuICBib29sID0gXCJib29sXCIsXG4gIGNvbnNlbnQgPSBcImNvbnNlbnRcIixcbiAgZGF0ZSA9IFwiZGF0ZVwiLFxuICBlbWFpbCA9IFwiZW1haWxcIixcbiAgbnVtYmVyID0gXCJudW1iZXJcIixcbiAgc3RyaW5nID0gXCJzdHJpbmdcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGQge1xuICBjb25maXJtPzogYm9vbGVhbjtcbiAgY29uc2VudElkPzogVVVJRDtcbiAgY29udHJvbD86IEZvcm1Db250cm9sO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAga2V5Pzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgb3B0aW9ucz86IEFycmF5PHN0cmluZz47XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgdHlwZT86IEZvcm1EYXRhVHlwZTtcbiAgdmFsaWRhdG9yPzogRm9ybUZpZWxkVmFsaWRhdG9yO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybUZpZWxkQWRtaW5Qb2xpY3kge1xuICBFZGl0ID0gXCJFZGl0XCIsXG4gIFZpZXcgPSBcIlZpZXdcIlxufVxuXG4vKipcbiAqIFRoZSBGb3JtRmllbGQgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybUZpZWxkUmVxdWVzdCB7XG4gIGZpZWxkPzogRm9ybUZpZWxkO1xuICBmaWVsZHM/OiBBcnJheTxGb3JtRmllbGQ+O1xufVxuXG4vKipcbiAqIEZvcm0gZmllbGQgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRSZXNwb25zZSB7XG4gIGZpZWxkPzogRm9ybUZpZWxkO1xuICBmaWVsZHM/OiBBcnJheTxGb3JtRmllbGQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRWYWxpZGF0b3IgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgZXhwcmVzc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3JtIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtUmVxdWVzdCB7XG4gIGZvcm0/OiBGb3JtO1xufVxuXG4vKipcbiAqIEZvcm0gcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXNwb25zZSB7XG4gIGZvcm0/OiBGb3JtO1xuICBmb3Jtcz86IEFycmF5PEZvcm0+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtU3RlcCB7XG4gIGZpZWxkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gRm9ybVR5cGUge1xuICByZWdpc3RyYXRpb24gPSBcInJlZ2lzdHJhdGlvblwiLFxuICBhZG1pblJlZ2lzdHJhdGlvbiA9IFwiYWRtaW5SZWdpc3RyYXRpb25cIixcbiAgYWRtaW5Vc2VyID0gXCJhZG1pblVzZXJcIixcbiAgc2VsZlNlcnZpY2VVc2VyID0gXCJzZWxmU2VydmljZVVzZXJcIlxufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgRnVzaW9uQXV0aCBjb25uZWN0b3IuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdXNpb25BdXRoQ29ubmVjdG9yQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBnZW5lcmljIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xuICBhdXRoZW50aWNhdGlvblVSTD86IHN0cmluZztcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGVLZXlJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmljTWVzc2VuZ2VyQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgY29ubmVjdFRpbWVvdXQ/OiBudW1iZXI7XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBHb29nbGUgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb29nbGVJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8R29vZ2xlQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF1dGhvcml6YXRpb24gR3JhbnQgdHlwZXMgYXMgZGVmaW5lZCBieSB0aGUgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzQ5XCI+VGhlIE9BdXRoIDIuMCBBdXRob3JpemF0aW9uXG4gKiBGcmFtZXdvcmsgLSBSRkMgNjc0OTwvYT4uXG4gKiA8cD5cbiAqIFNwZWNpZmljIG5hbWVzIGFzIGRlZmluZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTkxI3NlY3Rpb24tNC4xXCI+XG4gKiBPQXV0aCAyLjAgRHluYW1pYyBDbGllbnQgUmVnaXN0cmF0aW9uIFByb3RvY29sIC0gUkZDIDc1OTEgU2VjdGlvbiA0LjE8L2E+XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBHcmFudFR5cGUge1xuICBhdXRob3JpemF0aW9uX2NvZGUgPSBcImF1dGhvcml6YXRpb25fY29kZVwiLFxuICBpbXBsaWNpdCA9IFwiaW1wbGljaXRcIixcbiAgcGFzc3dvcmQgPSBcInBhc3N3b3JkXCIsXG4gIGNsaWVudF9jcmVkZW50aWFscyA9IFwiY2xpZW50X2NyZWRlbnRpYWxzXCIsXG4gIHJlZnJlc2hfdG9rZW4gPSBcInJlZnJlc2hfdG9rZW5cIixcbiAgdW5rbm93biA9IFwidW5rbm93blwiLFxuICBkZXZpY2VfY29kZSA9IFwidXJuOmlldGY6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6ZGV2aWNlX2NvZGVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHlsZXIgU2NvdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICByb2xlcz86IFJlY29yZDxVVUlELCBBcnJheTxBcHBsaWNhdGlvblJvbGU+PjtcbiAgdGVuYW50SWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgQ3JlYXRlZCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBDcmVhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIENyZWF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBEZWxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwRGVsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xufVxuXG4vKipcbiAqIEEgVXNlcidzIG1lbWJlcnNoaXAgaW50byBhIEdyb3VwXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGdyb3VwSWQ/OiBVVUlEO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIHVzZXI/OiBVc2VyO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIEFkZCBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBBZGQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyQWRkRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIFJlbW92ZSBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJSZW1vdmVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBSZW1vdmUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyUmVtb3ZlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgR3JvdXAgTWVtYmVyc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZ3JvdXBJZD86IFVVSUQ7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgR3JvdXAgTWVtYmVycy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogR3JvdXBNZW1iZXJTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVzcG9uc2UgZm9yIEdyb3VwIE1lbWJlcnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJTZWFyY2hSZXNwb25zZSB7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgTWVtYmVyIFVwZGF0ZSBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJVcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBVcGRhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xufVxuXG4vKipcbiAqIEdyb3VwIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBSZXF1ZXN0IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgcm9sZUlkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEdyb3VwIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwUmVzcG9uc2Uge1xuICBncm91cD86IEdyb3VwO1xuICBncm91cHM/OiBBcnJheTxHcm91cD47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBHcm91cHNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgR3JvdXBzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBHcm91cFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXNwb25zZSBmb3IgR3JvdXBzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoUmVzcG9uc2Uge1xuICBncm91cHM/OiBBcnJheTxHcm91cD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgVXBkYXRlIENvbXBsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFVwZGF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xuICBvcmlnaW5hbD86IEdyb3VwO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgb3JpZ2luYWw/OiBHcm91cDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5SXRlbSB7XG4gIGFjdGlvbmVyVXNlcklkPzogVVVJRDtcbiAgY29tbWVudD86IHN0cmluZztcbiAgY3JlYXRlSW5zdGFudD86IG51bWJlcjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFR5cGUgZm9yIHdlYmhvb2sgaGVhZGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIVFRQSGVhZGVycyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gSFRUUE1ldGhvZCB7XG4gIEdFVCA9IFwiR0VUXCIsXG4gIFBPU1QgPSBcIlBPU1RcIixcbiAgUFVUID0gXCJQVVRcIixcbiAgREVMRVRFID0gXCJERUxFVEVcIixcbiAgSEVBRCA9IFwiSEVBRFwiLFxuICBPUFRJT05TID0gXCJPUFRJT05TXCIsXG4gIFBBVENIID0gXCJQQVRDSFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhZUFJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIHJlbHlpbmdQYXJ0eUFwcGxpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eVVSTD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFlQUklkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxIWVBSQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIHJlbHlpbmdQYXJ0eUFwcGxpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHJlbHlpbmdQYXJ0eVVSTD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyRGV0YWlscyB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGlkPzogVVVJRDtcbiAgaWRwRW5kcG9pbnQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW1pdFVzZXJMaW5raW5nUG9saWN5IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG1heGltdW1MaW5rcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmsge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ/OiBzdHJpbmc7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RMb2dpbkluc3RhbnQ/OiBudW1iZXI7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIElkUCBiZWhhdmlvciB3aGVuIG5vIHVzZXIgbGluayBoYXMgYmVlbiBtYWRlIHlldC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMaW5raW5nU3RyYXRlZ3kge1xuICBDcmVhdGVQZW5kaW5nTGluayA9IFwiQ3JlYXRlUGVuZGluZ0xpbmtcIixcbiAgRGlzYWJsZWQgPSBcIkRpc2FibGVkXCIsXG4gIExpbmtBbm9ueW1vdXNseSA9IFwiTGlua0Fub255bW91c2x5XCIsXG4gIExpbmtCeUVtYWlsID0gXCJMaW5rQnlFbWFpbFwiLFxuICBMaW5rQnlFbWFpbEZvckV4aXN0aW5nVXNlciA9IFwiTGlua0J5RW1haWxGb3JFeGlzdGluZ1VzZXJcIixcbiAgTGlua0J5VXNlcm5hbWUgPSBcIkxpbmtCeVVzZXJuYW1lXCIsXG4gIExpbmtCeVVzZXJuYW1lRm9yRXhpc3RpbmdVc2VyID0gXCJMaW5rQnlVc2VybmFtZUZvckV4aXN0aW5nVXNlclwiLFxuICBVbnN1cHBvcnRlZCA9IFwiVW5zdXBwb3J0ZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGlua1JlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbiAgcGVuZGluZ0lkUExpbmtJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rcz86IEFycmF5PElkZW50aXR5UHJvdmlkZXJMaW5rPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kIHtcbiAgVXNlUG9wdXAgPSBcIlVzZVBvcHVwXCIsXG4gIFVzZVJlZGlyZWN0ID0gXCJVc2VSZWRpcmVjdFwiXG59XG5cbi8qKlxuICogTG9naW4gQVBJIHJlcXVlc3Qgb2JqZWN0IHVzZWQgZm9yIGxvZ2luIHRvIHRoaXJkLXBhcnR5IHN5c3RlbXMgKGkuZS4gTG9naW4gd2l0aCBGYWNlYm9vaykuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZW5jb2RlZEpXVD86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgbm9MaW5rPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGNsaWVudEF1dGhlbnRpY2F0aW9uTWV0aG9kPzogQ2xpZW50QXV0aGVudGljYXRpb25NZXRob2Q7XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclJlcXVlc3Qge1xuICBpZGVudGl0eVByb3ZpZGVyPzogQmFzZUlkZW50aXR5UHJvdmlkZXI8YW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclJlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlcj86IEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT47XG4gIGlkZW50aXR5UHJvdmlkZXJzPzogQXJyYXk8QmFzZUlkZW50aXR5UHJvdmlkZXI8YW55Pj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlIHtcbiAgY29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgbGltaXRVc2VyTGlua0NvdW50PzogSWRlbnRpdHlQcm92aWRlckxpbWl0VXNlckxpbmtpbmdQb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBJZGVudGl0eVByb3ZpZGVyVHlwZSB7XG4gIEFwcGxlID0gXCJBcHBsZVwiLFxuICBFcGljR2FtZXMgPSBcIkVwaWNHYW1lc1wiLFxuICBFeHRlcm5hbEpXVCA9IFwiRXh0ZXJuYWxKV1RcIixcbiAgRmFjZWJvb2sgPSBcIkZhY2Vib29rXCIsXG4gIEdvb2dsZSA9IFwiR29vZ2xlXCIsXG4gIEhZUFIgPSBcIkhZUFJcIixcbiAgTGlua2VkSW4gPSBcIkxpbmtlZEluXCIsXG4gIE5pbnRlbmRvID0gXCJOaW50ZW5kb1wiLFxuICBPcGVuSURDb25uZWN0ID0gXCJPcGVuSURDb25uZWN0XCIsXG4gIFNBTUx2MiA9IFwiU0FNTHYyXCIsXG4gIFNBTUx2MklkUEluaXRpYXRlZCA9IFwiU0FNTHYySWRQSW5pdGlhdGVkXCIsXG4gIFNvbnlQU04gPSBcIlNvbnlQU05cIixcbiAgU3RlYW0gPSBcIlN0ZWFtXCIsXG4gIFR3aXRjaCA9IFwiVHdpdGNoXCIsXG4gIFR3aXR0ZXIgPSBcIlR3aXR0ZXJcIixcbiAgWGJveCA9IFwiWGJveFwiXG59XG5cbi8qKlxuICogSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBlbmNyeXB0aW9uU2NoZW1lPzogc3RyaW5nO1xuICBmYWN0b3I/OiBudW1iZXI7XG4gIHVzZXJzPzogQXJyYXk8VXNlcj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhpcyBldmVudCBpcyBub3Qgc2NvcGVkIHRvIGEgdGVuYW50IGFuZCB3aWxsIGJlIHNlbnQgdG8gYWxsIHdlYmhvb2tzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZUV2ZW50IGV4dGVuZHMgTm9uVHJhbnNhY3Rpb25hbEV2ZW50IHtcbn1cblxuLyoqXG4gKiBUaGUgSW50ZWdyYXRpb24gUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblJlcXVlc3Qge1xuICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogVGhlIEludGVncmF0aW9uIFJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uUmVzcG9uc2Uge1xuICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogQXZhaWxhYmxlIEludGVncmF0aW9uc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvbnMge1xuICBjbGVhbnNwZWFrPzogQ2xlYW5TcGVha0NvbmZpZ3VyYXRpb247XG4gIGthZmthPzogS2Fma2FDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRyb3NwZWN0UmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbEVudHJ5IHtcbiAgYWN0aW9uPzogSVBBY2Nlc3NDb250cm9sRW50cnlBY3Rpb247XG4gIGVuZElQQWRkcmVzcz86IHN0cmluZztcbiAgc3RhcnRJUEFkZHJlc3M/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGVudW0gSVBBY2Nlc3NDb250cm9sRW50cnlBY3Rpb24ge1xuICBBbGxvdyA9IFwiQWxsb3dcIixcbiAgQmxvY2sgPSBcIkJsb2NrXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3Qge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW50cmllcz86IEFycmF5PElQQWNjZXNzQ29udHJvbEVudHJ5PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0IHtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdD86IElQQWNjZXNzQ29udHJvbExpc3Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2Uge1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0PzogSVBBY2Nlc3NDb250cm9sTGlzdDtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdHM/OiBBcnJheTxJUEFjY2Vzc0NvbnRyb2xMaXN0Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIElQIEFDTHMgLlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2Uge1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0cz86IEFycmF5PElQQWNjZXNzQ29udHJvbExpc3Q+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNzdWVSZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBKU09OIFdlYiBLZXkgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTcjc2VjdGlvbi00XCI+UkZDIDc1MTcgSlNPTiBXZWIgS2V5IChKV0spXG4gKiBTZWN0aW9uIDQ8L2E+IGFuZCA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MThcIj5SRkMgNzUxOCBKU09OIFdlYiBBbGdvcml0aG1zIChKV0EpPC9hPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTldlYktleSB7XG4gIGFsZz86IEFsZ29yaXRobTtcbiAgY3J2Pzogc3RyaW5nO1xuICBkPzogc3RyaW5nO1xuICBkcD86IHN0cmluZztcbiAgZHE/OiBzdHJpbmc7XG4gIGU/OiBzdHJpbmc7XG4gIGtpZD86IHN0cmluZztcbiAga3R5PzogS2V5VHlwZTtcbiAgbj86IHN0cmluZztcbiAgW290aGVyOiBzdHJpbmddOiBhbnk7IC8vIEFueSBvdGhlciBmaWVsZHNcbiAgcD86IHN0cmluZztcbiAgcT86IHN0cmluZztcbiAgcWk/OiBzdHJpbmc7XG4gIHVzZT86IHN0cmluZztcbiAgeD86IHN0cmluZztcbiAgeDVjPzogQXJyYXk8c3RyaW5nPjtcbiAgeDV0Pzogc3RyaW5nO1xuICB4NXRfUzI1Nj86IHN0cmluZztcbiAgeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFueSBvYmplY3QgdGhhdCBjYW4gcHJvdmlkZSBKU09OIFdlYiBrZXkgSW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTldlYktleUluZm9Qcm92aWRlciB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXS1NSZXNwb25zZSB7XG4gIGtleXM/OiBBcnJheTxKU09OV2ViS2V5Pjtcbn1cblxuLyoqXG4gKiBKU09OIFdlYiBUb2tlbiAoSldUKSBhcyBkZWZpbmVkIGJ5IFJGQyA3NTE5LlxuICogPHByZT5cbiAqIEZyb20gUkZDIDc1MTkgU2VjdGlvbiAxLiBJbnRyb2R1Y3Rpb246XG4gKiAgICBUaGUgc3VnZ2VzdGVkIHByb251bmNpYXRpb24gb2YgSldUIGlzIHRoZSBzYW1lIGFzIHRoZSBFbmdsaXNoIHdvcmQgXCJqb3RcIi5cbiAqIDwvcHJlPlxuICogVGhlIEpXVCBpcyBub3QgVGhyZWFkLVNhZmUgYW5kIHNob3VsZCBub3QgYmUgcmUtdXNlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUIHtcbiAgYXVkPzogYW55O1xuICBleHA/OiBudW1iZXI7XG4gIGlhdD86IG51bWJlcjtcbiAgaXNzPzogc3RyaW5nO1xuICBqdGk/OiBzdHJpbmc7XG4gIG5iZj86IG51bWJlcjtcbiAgW290aGVyQ2xhaW1zOiBzdHJpbmddOiBhbnk7IC8vIEFueSBvdGhlciBmaWVsZHNcbiAgc3ViPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpXVCBDb25maWd1cmF0aW9uLiBBIEpXVCBDb25maWd1cmF0aW9uIGZvciBhbiBBcHBsaWNhdGlvbiBtYXkgbm90IGJlIGFjdGl2ZSBpZiBpdCBpcyB1c2luZyB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24sIHRoZSBjb25maWd1cmF0aW9uXG4gKiBtYXkgYmUgPGNvZGU+ZW5hYmxlZCA9IGZhbHNlPC9jb2RlPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgaWRUb2tlbktleUlkPzogVVVJRDtcbiAgcmVmcmVzaFRva2VuRXhwaXJhdGlvblBvbGljeT86IFJlZnJlc2hUb2tlbkV4cGlyYXRpb25Qb2xpY3k7XG4gIHJlZnJlc2hUb2tlblJldm9jYXRpb25Qb2xpY3k/OiBSZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5O1xuICByZWZyZXNoVG9rZW5UaW1lVG9MaXZlSW5NaW51dGVzPzogbnVtYmVyO1xuICByZWZyZXNoVG9rZW5Vc2FnZVBvbGljeT86IFJlZnJlc2hUb2tlblVzYWdlUG9saWN5O1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgSldUIHB1YmxpYyBrZXkgUmVmcmVzaCBUb2tlbiBSZXZva2UgRXZlbnQuIFRoaXMgZXZlbnQgbWlnaHQgYmUgZm9yIGEgc2luZ2xlXG4gKiB0b2tlbiwgYSB1c2VyIG9yIGFuIGVudGlyZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RQdWJsaWNLZXlVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBKV1QgUmVmcmVzaCBFdmVudC4gVGhpcyBldmVudCB3aWxsIGJlIGZpcmVkIHdoZW4gYSBKV1QgaXMgXCJyZWZyZXNoZWRcIiAoZ2VuZXJhdGVkKSB1c2luZyBhIFJlZnJlc2ggVG9rZW4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHJlZnJlc2hpbmcgYSBKV1Qgd2l0aCBhIFJlZnJlc2ggVG9rZW4uXG4gKiA8cD5cbiAqIFVzaW5nIGEgZGlmZmVyZW50IHJlc3BvbnNlIG9iamVjdCBmcm9tIFJlZnJlc2hUb2tlblJlc3BvbnNlIGJlY2F1c2UgdGhlIHJldHJpZXZlIHJlc3BvbnNlIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBmb3IgcmVmcmVzaFRva2VuLCBhbmQgdGhpcyBpcyBhXG4gKiBzdHJpbmcuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hSZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFJlZnJlc2ggVG9rZW4gUmV2b2tlIEV2ZW50LiBUaGlzIGV2ZW50IG1pZ2h0IGJlIGZvciBhIHNpbmdsZSB0b2tlbiwgYSB1c2VyXG4gKiBvciBhbiBlbnRpcmUgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUmVmcmVzaFRva2VuUmV2b2tlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25UaW1lVG9MaXZlSW5TZWNvbmRzPzogUmVjb3JkPFVVSUQsIG51bWJlcj47XG4gIHJlZnJlc2hUb2tlbj86IFJlZnJlc2hUb2tlbjtcbiAgdXNlcj86IFVzZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFZlbmRSZXF1ZXN0IHtcbiAgY2xhaW1zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAga2V5SWQ/OiBVVUlEO1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RWZW5kUmVzcG9uc2Uge1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRlZmF1bHRUb3BpYz86IHN0cmluZztcbiAgcHJvZHVjZXI/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FNZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBkZWZhdWx0VG9waWM/OiBzdHJpbmc7XG4gIHByb2R1Y2VyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBEb21haW4gZm9yIGEgcHVibGljIGtleSwga2V5IHBhaXIgb3IgYW4gSE1BQyBzZWNyZXQuIFRoaXMgaXMgdXNlZCBieSBLZXlNYXN0ZXIgdG8gbWFuYWdlIGtleXMgZm9yIEpXVHMsIFNBTUwsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXkge1xuICBhbGdvcml0aG0/OiBLZXlBbGdvcml0aG07XG4gIGNlcnRpZmljYXRlPzogc3RyaW5nO1xuICBjZXJ0aWZpY2F0ZUluZm9ybWF0aW9uPzogQ2VydGlmaWNhdGVJbmZvcm1hdGlvbjtcbiAgZXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIGhhc1ByaXZhdGVLZXk/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAga2lkPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwcml2YXRlS2V5Pzogc3RyaW5nO1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHNlY3JldD86IHN0cmluZztcbiAgdHlwZT86IEtleVR5cGU7XG59XG5cbmV4cG9ydCBlbnVtIEtleUFsZ29yaXRobSB7XG4gIEVTMjU2ID0gXCJFUzI1NlwiLFxuICBFUzM4NCA9IFwiRVMzODRcIixcbiAgRVM1MTIgPSBcIkVTNTEyXCIsXG4gIEhTMjU2ID0gXCJIUzI1NlwiLFxuICBIUzM4NCA9IFwiSFMzODRcIixcbiAgSFM1MTIgPSBcIkhTNTEyXCIsXG4gIFJTMjU2ID0gXCJSUzI1NlwiLFxuICBSUzM4NCA9IFwiUlMzODRcIixcbiAgUlM1MTIgPSBcIlJTNTEyXCJcbn1cblxuLyoqXG4gKiBLZXkgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlSZXF1ZXN0IHtcbiAga2V5PzogS2V5O1xufVxuXG4vKipcbiAqIEtleSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlSZXNwb25zZSB7XG4gIGtleT86IEtleTtcbiAga2V5cz86IEFycmF5PEtleT47XG59XG5cbmV4cG9ydCBlbnVtIEtleVR5cGUge1xuICBFQyA9IFwiRUNcIixcbiAgUlNBID0gXCJSU0FcIixcbiAgSE1BQyA9IFwiSE1BQ1wiXG59XG5cbi8qKlxuICogVGhlIHVzZSB0eXBlIG9mIGEga2V5LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gS2V5VXNlIHtcbiAgU2lnbk9ubHkgPSBcIlNpZ25Pbmx5XCIsXG4gIFNpZ25BbmRWZXJpZnkgPSBcIlNpZ25BbmRWZXJpZnlcIixcbiAgVmVyaWZ5T25seSA9IFwiVmVyaWZ5T25seVwiXG59XG5cbi8qKlxuICogRXZlbnQgZXZlbnQgdG8gaW5kaWNhdGUga2lja3N0YXJ0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtpY2tzdGFydFN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGluc3RhbmNlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEEgSmF2YVNjcmlwdCBsYW1iZGEgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBkdXJpbmcgY2VydGFpbiBldmVudHMgaW5zaWRlIEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhIHtcbiAgYm9keT86IHN0cmluZztcbiAgZGVidWc/OiBib29sZWFuO1xuICBlbmdpbmVUeXBlPzogTGFtYmRhRW5naW5lVHlwZTtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IExhbWJkYVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIGFjY2Vzc1Rva2VuUG9wdWxhdGVJZD86IFVVSUQ7XG4gIGlkVG9rZW5Qb3B1bGF0ZUlkPzogVVVJRDtcbiAgc2FtbHYyUG9wdWxhdGVJZD86IFVVSUQ7XG4gIHNlbGZTZXJ2aWNlUmVnaXN0cmF0aW9uVmFsaWRhdGlvbklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFDb25maWd1cmF0aW9uIHtcbiAgcmVjb25jaWxlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICByZWNvbmNpbGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBMYW1iZGFFbmdpbmVUeXBlIHtcbiAgR3JhYWxKUyA9IFwiR3JhYWxKU1wiLFxuICBOYXNob3JuID0gXCJOYXNob3JuXCJcbn1cblxuLyoqXG4gKiBMYW1iZGEgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJlcXVlc3Qge1xuICBsYW1iZGE/OiBMYW1iZGE7XG59XG5cbi8qKlxuICogTGFtYmRhIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUmVzcG9uc2Uge1xuICBsYW1iZGE/OiBMYW1iZGE7XG4gIGxhbWJkYXM/OiBBcnJheTxMYW1iZGE+O1xufVxuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsYW1iZGFzIHRoYXQgaW5kaWNhdGUgaG93IHRoZXkgYXJlIGludm9rZWQgYnkgRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gTGFtYmRhVHlwZSB7XG4gIEpXVFBvcHVsYXRlID0gXCJKV1RQb3B1bGF0ZVwiLFxuICBPcGVuSURSZWNvbmNpbGUgPSBcIk9wZW5JRFJlY29uY2lsZVwiLFxuICBTQU1MdjJSZWNvbmNpbGUgPSBcIlNBTUx2MlJlY29uY2lsZVwiLFxuICBTQU1MdjJQb3B1bGF0ZSA9IFwiU0FNTHYyUG9wdWxhdGVcIixcbiAgQXBwbGVSZWNvbmNpbGUgPSBcIkFwcGxlUmVjb25jaWxlXCIsXG4gIEV4dGVybmFsSldUUmVjb25jaWxlID0gXCJFeHRlcm5hbEpXVFJlY29uY2lsZVwiLFxuICBGYWNlYm9va1JlY29uY2lsZSA9IFwiRmFjZWJvb2tSZWNvbmNpbGVcIixcbiAgR29vZ2xlUmVjb25jaWxlID0gXCJHb29nbGVSZWNvbmNpbGVcIixcbiAgSFlQUlJlY29uY2lsZSA9IFwiSFlQUlJlY29uY2lsZVwiLFxuICBUd2l0dGVyUmVjb25jaWxlID0gXCJUd2l0dGVyUmVjb25jaWxlXCIsXG4gIExEQVBDb25uZWN0b3JSZWNvbmNpbGUgPSBcIkxEQVBDb25uZWN0b3JSZWNvbmNpbGVcIixcbiAgTGlua2VkSW5SZWNvbmNpbGUgPSBcIkxpbmtlZEluUmVjb25jaWxlXCIsXG4gIEVwaWNHYW1lc1JlY29uY2lsZSA9IFwiRXBpY0dhbWVzUmVjb25jaWxlXCIsXG4gIE5pbnRlbmRvUmVjb25jaWxlID0gXCJOaW50ZW5kb1JlY29uY2lsZVwiLFxuICBTb255UFNOUmVjb25jaWxlID0gXCJTb255UFNOUmVjb25jaWxlXCIsXG4gIFN0ZWFtUmVjb25jaWxlID0gXCJTdGVhbVJlY29uY2lsZVwiLFxuICBUd2l0Y2hSZWNvbmNpbGUgPSBcIlR3aXRjaFJlY29uY2lsZVwiLFxuICBYYm94UmVjb25jaWxlID0gXCJYYm94UmVjb25jaWxlXCIsXG4gIENsaWVudENyZWRlbnRpYWxzSldUUG9wdWxhdGUgPSBcIkNsaWVudENyZWRlbnRpYWxzSldUUG9wdWxhdGVcIixcbiAgU0NJTVNlcnZlckdyb3VwUmVxdWVzdENvbnZlcnRlciA9IFwiU0NJTVNlcnZlckdyb3VwUmVxdWVzdENvbnZlcnRlclwiLFxuICBTQ0lNU2VydmVyR3JvdXBSZXNwb25zZUNvbnZlcnRlciA9IFwiU0NJTVNlcnZlckdyb3VwUmVzcG9uc2VDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlclVzZXJSZXF1ZXN0Q29udmVydGVyID0gXCJTQ0lNU2VydmVyVXNlclJlcXVlc3RDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlclVzZXJSZXNwb25zZUNvbnZlcnRlciA9IFwiU0NJTVNlcnZlclVzZXJSZXNwb25zZUNvbnZlcnRlclwiLFxuICBTZWxmU2VydmljZVJlZ2lzdHJhdGlvblZhbGlkYXRpb24gPSBcIlNlbGZTZXJ2aWNlUmVnaXN0cmF0aW9uVmFsaWRhdGlvblwiXG59XG5cbi8qKlxuICogTW9kZWxzIGFuIExEQVAgY29ubmVjdG9yLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTERBUENvbm5lY3RvckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhlbnRpY2F0aW9uVVJMPzogc3RyaW5nO1xuICBiYXNlU3RydWN0dXJlPzogc3RyaW5nO1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgaWRlbnRpZnlpbmdBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsb2dpbklkQXR0cmlidXRlPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgcmVxdWVzdGVkQXR0cmlidXRlcz86IEFycmF5PHN0cmluZz47XG4gIHNlY3VyaXR5TWV0aG9kPzogTERBUFNlY3VyaXR5TWV0aG9kO1xuICBzeXN0ZW1BY2NvdW50RE4/OiBzdHJpbmc7XG4gIHN5c3RlbUFjY291bnRQYXNzd29yZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gTERBUFNlY3VyaXR5TWV0aG9kIHtcbiAgTm9uZSA9IFwiTm9uZVwiLFxuICBMREFQUyA9IFwiTERBUFNcIixcbiAgU3RhcnRUTFMgPSBcIlN0YXJ0VExTXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkSW5BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZEluSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPExpbmtlZEluQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgc2V0IG9mIGxvY2FsaXplZCBJbnRlZ2VycyB0aGF0IGNhbiBiZSBzdG9yZWQgYXMgSlNPTi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxpemVkSW50ZWdlcnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzZXQgb2YgbG9jYWxpemVkIFN0cmluZ3MgdGhhdCBjYW4gYmUgc3RvcmVkIGFzIEpTT04uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxpemVkU3RyaW5ncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xufVxuXG4vKipcbiAqIExvY2F0aW9uIGluZm9ybWF0aW9uLiBVc2VmdWwgZm9yIElQIGFkZHJlc3NlcyBhbmQgb3RoZXIgZGlzcGxheWFibGUgZGF0YSBvYmplY3RzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uIHtcbiAgY2l0eT86IHN0cmluZztcbiAgY291bnRyeT86IHN0cmluZztcbiAgZGlzcGxheVN0cmluZz86IHN0cmluZztcbiAgbGF0aXR1ZGU/OiBudW1iZXI7XG4gIGxvbmdpdHVkZT86IG51bWJlcjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICB6aXBjb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgaGlzdG9yaWNhbCBzdGF0ZSBvZiBhIHVzZXIgbG9nIGV2ZW50LiBTaW5jZSBldmVudHMgY2FuIGJlIG1vZGlmaWVkLCB0aGlzIHN0b3JlcyB0aGUgaGlzdG9yaWNhbCBzdGF0ZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dIaXN0b3J5IHtcbiAgaGlzdG9yeUl0ZW1zPzogQXJyYXk8SGlzdG9yeUl0ZW0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luQ29uZmlndXJhdGlvbiB7XG4gIGFsbG93VG9rZW5SZWZyZXNoPzogYm9vbGVhbjtcbiAgZ2VuZXJhdGVSZWZyZXNoVG9rZW5zPzogYm9vbGVhbjtcbiAgcmVxdWlyZUF1dGhlbnRpY2F0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5IaW50Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBMb2dpbklkVHlwZSB7XG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICB1c2VybmFtZSA9IFwidXNlcm5hbWVcIlxufVxuXG4vKipcbiAqIExvZ2luIFBpbmcgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblBpbmdSZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIHN1bW1hcnkgb2YgdGhlIGFjdGlvbiB0aGF0IGlzIHByZXZlbnRpbmcgbG9naW4gdG8gYmUgcmV0dXJuZWQgb24gdGhlIGxvZ2luIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblByZXZlbnRlZFJlc3BvbnNlIHtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25JZD86IFVVSUQ7XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZT86IHN0cmluZztcbiAgbG9jYWxpemVkT3B0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRSZWFzb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkQ29uZmlndXJhdGlvbiB7XG4gIGRlbGV0ZT86IERlbGV0ZUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkRXhwb3J0UmVxdWVzdCBleHRlbmRzIEJhc2VFeHBvcnRSZXF1ZXN0IHtcbiAgY3JpdGVyaWE/OiBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGVuZD86IG51bWJlcjtcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkU2VhcmNoUmVxdWVzdCB7XG4gIHJldHJpZXZlVG90YWw/OiBib29sZWFuO1xuICBzZWFyY2g/OiBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEEgcmF3IGxvZ2luIHJlY29yZCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgbG9naW4gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVwb3J0UmVzcG9uc2Uge1xuICBob3VybHlDb3VudHM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIExvZ2luIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIG9uZVRpbWVQYXNzd29yZD86IHN0cmluZztcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZXNwb25zZSB7XG4gIGFjdGlvbnM/OiBBcnJheTxMb2dpblByZXZlbnRlZFJlc3BvbnNlPjtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbiAgY2hhbmdlUGFzc3dvcmRSZWFzb24/OiBDaGFuZ2VQYXNzd29yZFJlYXNvbjtcbiAgY29uZmlndXJhYmxlTWV0aG9kcz86IEFycmF5PHN0cmluZz47XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICBwZW5kaW5nSWRQTGlua0lkPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdGhyZWF0c0RldGVjdGVkPzogQXJyYXk8QXV0aGVudGljYXRpb25UaHJlYXRzPjtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIHRydXN0VG9rZW4/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1hdHRoZXcgQWx0bWFuXG4gKi9cbmV4cG9ydCBlbnVtIExvZ291dEJlaGF2aW9yIHtcbiAgUmVkaXJlY3RPbmx5ID0gXCJSZWRpcmVjdE9ubHlcIixcbiAgQWxsQXBwbGljYXRpb25zID0gXCJBbGxBcHBsaWNhdGlvbnNcIlxufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBMb2dvdXQgQVBJIHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gVVJMIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nb3V0UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBnbG9iYWw/OiBib29sZWFuO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cFJlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlcj86IElkZW50aXR5UHJvdmlkZXJEZXRhaWxzO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIG1hbmFnZWQgZmllbGRzIHRoYXQgYXJlIGFsc28gcHV0IGludG8gdGhlIGRhdGFiYXNlIGR1cmluZyBGdXNpb25BdXRoIHNldHVwLlxuICogPHA+XG4gKiBJbnRlcm5hbCBOb3RlOiBUaGVzZSBmaWVsZHMgYXJlIGFsc28gZGVjbGFyZWQgaW4gU1FMIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgc3lzdGVtLiBUaGVzZSBuZWVkIHRvIHN0YXkgaW4gc3luYy5cbiAqIEFueSBjaGFuZ2VzIHRvIHRoZXNlIGZpZWxkcyBuZWVkcyB0byBhbHNvIGJlIHJlZmxlY3RlZCBpbiBteXNxbC5zcWwgYW5kIHBvc3RncmVzcWwuc3FsXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZEZpZWxkcyB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1heGltdW1QYXNzd29yZEFnZSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBkYXlzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEdyb3VwIE1lbWJlciBEZWxldGUgUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJEZWxldGVSZXF1ZXN0IHtcbiAgbWVtYmVySWRzPzogQXJyYXk8VVVJRD47XG4gIG1lbWJlcnM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8VVVJRD4+O1xufVxuXG4vKipcbiAqIEdyb3VwIE1lbWJlciBSZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbWJlclJlcXVlc3Qge1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PEdyb3VwTWVtYmVyPj47XG59XG5cbi8qKlxuICogR3JvdXAgTWVtYmVyIFJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbWJlclJlc3BvbnNlIHtcbiAgbWVtYmVycz86IFJlY29yZDxVVUlELCBBcnJheTxHcm91cE1lbWJlcj4+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWlrZXkgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG59XG5cbi8qKlxuICogU3RvcmVzIGFuIG1lc3NhZ2UgdGVtcGxhdGUgdXNlZCB0byBkaXN0cmlidXRlIG1lc3NhZ2VzO1xuICpcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGUge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IE1lc3NhZ2VUeXBlO1xufVxuXG4vKipcbiAqIEEgTWVzc2FnZSBUZW1wbGF0ZSBSZXF1ZXN0IHRvIHRoZSBBUElcbiAqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCB7XG4gIG1lc3NhZ2VUZW1wbGF0ZT86IE1lc3NhZ2VUZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVRlbXBsYXRlUmVzcG9uc2Uge1xuICBtZXNzYWdlVGVtcGxhdGU/OiBNZXNzYWdlVGVtcGxhdGU7XG4gIG1lc3NhZ2VUZW1wbGF0ZXM/OiBBcnJheTxNZXNzYWdlVGVtcGxhdGU+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWlrZXkgU2xlZXZpXG4gKi9cbmV4cG9ydCBlbnVtIE1lc3NhZ2VUeXBlIHtcbiAgU01TID0gXCJTTVNcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2VuZ2VyUmVxdWVzdCB7XG4gIG1lc3Nlbmdlcj86IEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2VuZ2VyUmVzcG9uc2Uge1xuICBtZXNzZW5nZXI/OiBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbjtcbiAgbWVzc2VuZ2Vycz86IEFycmF5PEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2VuZ2VyVHJhbnNwb3J0IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBNZXNzZW5nZXJUeXBlIHtcbiAgR2VuZXJpYyA9IFwiR2VuZXJpY1wiLFxuICBLYWZrYSA9IFwiS2Fma2FcIixcbiAgVHdpbGlvID0gXCJUd2lsaW9cIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFEYXRhIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRldmljZT86IERldmljZUluZm87XG4gIHNjb3Blcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbmltdW1QYXNzd29yZEFnZSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2Uge1xuICBtb250aGx5QWN0aXZlVXNlcnM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yQXV0aGVudGljYXRvck1ldGhvZCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhbGdvcml0aG0/OiBUT1RQQWxnb3JpdGhtO1xuICBjb2RlTGVuZ3RoPzogbnVtYmVyO1xuICB0aW1lU3RlcD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckVtYWlsTWV0aG9kIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yRW1haWxUZW1wbGF0ZSB7XG4gIHRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gTXVsdGlGYWN0b3JMb2dpblBvbGljeSB7XG4gIERpc2FibGVkID0gXCJEaXNhYmxlZFwiLFxuICBFbmFibGVkID0gXCJFbmFibGVkXCIsXG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JTTVNNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWVzc2VuZ2VySWQ/OiBVVUlEO1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvclNNU1RlbXBsYXRlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmludGVuZG9BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTmludGVuZG8gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbnRlbmRvSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPE5pbnRlbmRvQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb25UcmFuc2FjdGlvbmFsRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgSm9obmF0aG9uIFdvb2RcbiAqL1xuZXhwb3J0IGVudW0gT2F1dGgyQXV0aG9yaXplZFVSTFZhbGlkYXRpb25Qb2xpY3kge1xuICBBbGxvd1dpbGRjYXJkcyA9IFwiQWxsb3dXaWxkY2FyZHNcIixcbiAgRXhhY3RNYXRjaCA9IFwiRXhhY3RNYXRjaFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemVkT3JpZ2luVVJMcz86IEFycmF5PHN0cmluZz47XG4gIGF1dGhvcml6ZWRSZWRpcmVjdFVSTHM/OiBBcnJheTxzdHJpbmc+O1xuICBhdXRob3JpemVkVVJMVmFsaWRhdGlvblBvbGljeT86IE9hdXRoMkF1dGhvcml6ZWRVUkxWYWxpZGF0aW9uUG9saWN5O1xuICBjbGllbnRBdXRoZW50aWNhdGlvblBvbGljeT86IENsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5O1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRldmljZVZlcmlmaWNhdGlvblVSTD86IHN0cmluZztcbiAgZW5hYmxlZEdyYW50cz86IEFycmF5PEdyYW50VHlwZT47XG4gIGdlbmVyYXRlUmVmcmVzaFRva2Vucz86IGJvb2xlYW47XG4gIGxvZ291dEJlaGF2aW9yPzogTG9nb3V0QmVoYXZpb3I7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcHJvb2ZLZXlGb3JDb2RlRXhjaGFuZ2VQb2xpY3k/OiBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeTtcbiAgcmVxdWlyZUNsaWVudEF1dGhlbnRpY2F0aW9uPzogYm9vbGVhbjtcbiAgcmVxdWlyZVJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgaHR0cFNlc3Npb25NYXhJbmFjdGl2ZUludGVydmFsPzogbnVtYmVyO1xuICBsb2dvdXRVUkw/OiBzdHJpbmc7XG4gIG9hdXRoQ29uZmlndXJhdGlvbj86IE9BdXRoMkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoRXJyb3Ige1xuICBjaGFuZ2VfcGFzc3dvcmRfaWQ/OiBzdHJpbmc7XG4gIGVycm9yPzogT0F1dGhFcnJvclR5cGU7XG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBlcnJvcl9yZWFzb24/OiBPQXV0aEVycm9yUmVhc29uO1xuICBlcnJvcl91cmk/OiBzdHJpbmc7XG4gIHR3b19mYWN0b3JfaWQ/OiBzdHJpbmc7XG4gIHR3b19mYWN0b3JfbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG59XG5cbmV4cG9ydCBlbnVtIE9BdXRoRXJyb3JSZWFzb24ge1xuICBhdXRoX2NvZGVfbm90X2ZvdW5kID0gXCJhdXRoX2NvZGVfbm90X2ZvdW5kXCIsXG4gIGFjY2Vzc190b2tlbl9tYWxmb3JtZWQgPSBcImFjY2Vzc190b2tlbl9tYWxmb3JtZWRcIixcbiAgYWNjZXNzX3Rva2VuX2V4cGlyZWQgPSBcImFjY2Vzc190b2tlbl9leHBpcmVkXCIsXG4gIGFjY2Vzc190b2tlbl91bmF2YWlsYWJsZV9mb3JfcHJvY2Vzc2luZyA9IFwiYWNjZXNzX3Rva2VuX3VuYXZhaWxhYmxlX2Zvcl9wcm9jZXNzaW5nXCIsXG4gIGFjY2Vzc190b2tlbl9mYWlsZWRfcHJvY2Vzc2luZyA9IFwiYWNjZXNzX3Rva2VuX2ZhaWxlZF9wcm9jZXNzaW5nXCIsXG4gIHJlZnJlc2hfdG9rZW5fbm90X2ZvdW5kID0gXCJyZWZyZXNoX3Rva2VuX25vdF9mb3VuZFwiLFxuICByZWZyZXNoX3Rva2VuX3R5cGVfbm90X3N1cHBvcnRlZCA9IFwicmVmcmVzaF90b2tlbl90eXBlX25vdF9zdXBwb3J0ZWRcIixcbiAgaW52YWxpZF9jbGllbnRfaWQgPSBcImludmFsaWRfY2xpZW50X2lkXCIsXG4gIGludmFsaWRfdXNlcl9jcmVkZW50aWFscyA9IFwiaW52YWxpZF91c2VyX2NyZWRlbnRpYWxzXCIsXG4gIGludmFsaWRfZ3JhbnRfdHlwZSA9IFwiaW52YWxpZF9ncmFudF90eXBlXCIsXG4gIGludmFsaWRfb3JpZ2luID0gXCJpbnZhbGlkX29yaWdpblwiLFxuICBpbnZhbGlkX29yaWdpbl9vcGFxdWUgPSBcImludmFsaWRfb3JpZ2luX29wYXF1ZVwiLFxuICBpbnZhbGlkX3BrY2VfY29kZV92ZXJpZmllciA9IFwiaW52YWxpZF9wa2NlX2NvZGVfdmVyaWZpZXJcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlID0gXCJpbnZhbGlkX3BrY2VfY29kZV9jaGFsbGVuZ2VcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlX21ldGhvZCA9IFwiaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlX21ldGhvZFwiLFxuICBpbnZhbGlkX3JlZGlyZWN0X3VyaSA9IFwiaW52YWxpZF9yZWRpcmVjdF91cmlcIixcbiAgaW52YWxpZF9yZXNwb25zZV9tb2RlID0gXCJpbnZhbGlkX3Jlc3BvbnNlX21vZGVcIixcbiAgaW52YWxpZF9yZXNwb25zZV90eXBlID0gXCJpbnZhbGlkX3Jlc3BvbnNlX3R5cGVcIixcbiAgaW52YWxpZF9pZF90b2tlbl9oaW50ID0gXCJpbnZhbGlkX2lkX3Rva2VuX2hpbnRcIixcbiAgaW52YWxpZF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBcImludmFsaWRfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpXCIsXG4gIGludmFsaWRfZGV2aWNlX2NvZGUgPSBcImludmFsaWRfZGV2aWNlX2NvZGVcIixcbiAgaW52YWxpZF91c2VyX2NvZGUgPSBcImludmFsaWRfdXNlcl9jb2RlXCIsXG4gIGludmFsaWRfYWRkaXRpb25hbF9jbGllbnRfaWQgPSBcImludmFsaWRfYWRkaXRpb25hbF9jbGllbnRfaWRcIixcbiAgaW52YWxpZF90YXJnZXRfZW50aXR5X3Njb3BlID0gXCJpbnZhbGlkX3RhcmdldF9lbnRpdHlfc2NvcGVcIixcbiAgaW52YWxpZF9lbnRpdHlfcGVybWlzc2lvbl9zY29wZSA9IFwiaW52YWxpZF9lbnRpdHlfcGVybWlzc2lvbl9zY29wZVwiLFxuICBncmFudF90eXBlX2Rpc2FibGVkID0gXCJncmFudF90eXBlX2Rpc2FibGVkXCIsXG4gIG1pc3NpbmdfY2xpZW50X2lkID0gXCJtaXNzaW5nX2NsaWVudF9pZFwiLFxuICBtaXNzaW5nX2NsaWVudF9zZWNyZXQgPSBcIm1pc3NpbmdfY2xpZW50X3NlY3JldFwiLFxuICBtaXNzaW5nX2NvZGUgPSBcIm1pc3NpbmdfY29kZVwiLFxuICBtaXNzaW5nX2NvZGVfY2hhbGxlbmdlID0gXCJtaXNzaW5nX2NvZGVfY2hhbGxlbmdlXCIsXG4gIG1pc3NpbmdfY29kZV92ZXJpZmllciA9IFwibWlzc2luZ19jb2RlX3ZlcmlmaWVyXCIsXG4gIG1pc3NpbmdfZGV2aWNlX2NvZGUgPSBcIm1pc3NpbmdfZGV2aWNlX2NvZGVcIixcbiAgbWlzc2luZ19ncmFudF90eXBlID0gXCJtaXNzaW5nX2dyYW50X3R5cGVcIixcbiAgbWlzc2luZ19yZWRpcmVjdF91cmkgPSBcIm1pc3NpbmdfcmVkaXJlY3RfdXJpXCIsXG4gIG1pc3NpbmdfcmVmcmVzaF90b2tlbiA9IFwibWlzc2luZ19yZWZyZXNoX3Rva2VuXCIsXG4gIG1pc3NpbmdfcmVzcG9uc2VfdHlwZSA9IFwibWlzc2luZ19yZXNwb25zZV90eXBlXCIsXG4gIG1pc3NpbmdfdG9rZW4gPSBcIm1pc3NpbmdfdG9rZW5cIixcbiAgbWlzc2luZ191c2VyX2NvZGUgPSBcIm1pc3NpbmdfdXNlcl9jb2RlXCIsXG4gIG1pc3NpbmdfdmVyaWZpY2F0aW9uX3VyaSA9IFwibWlzc2luZ192ZXJpZmljYXRpb25fdXJpXCIsXG4gIGxvZ2luX3ByZXZlbnRlZCA9IFwibG9naW5fcHJldmVudGVkXCIsXG4gIG5vdF9saWNlbnNlZCA9IFwibm90X2xpY2Vuc2VkXCIsXG4gIHVzZXJfY29kZV9leHBpcmVkID0gXCJ1c2VyX2NvZGVfZXhwaXJlZFwiLFxuICB1c2VyX2V4cGlyZWQgPSBcInVzZXJfZXhwaXJlZFwiLFxuICB1c2VyX2xvY2tlZCA9IFwidXNlcl9sb2NrZWRcIixcbiAgdXNlcl9ub3RfZm91bmQgPSBcInVzZXJfbm90X2ZvdW5kXCIsXG4gIGNsaWVudF9hdXRoZW50aWNhdGlvbl9taXNzaW5nID0gXCJjbGllbnRfYXV0aGVudGljYXRpb25fbWlzc2luZ1wiLFxuICBpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbl9zY2hlbWUgPSBcImludmFsaWRfY2xpZW50X2F1dGhlbnRpY2F0aW9uX3NjaGVtZVwiLFxuICBpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbiA9IFwiaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb25cIixcbiAgY2xpZW50X2lkX21pc21hdGNoID0gXCJjbGllbnRfaWRfbWlzbWF0Y2hcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX2FkbWluaXN0cmF0aXZlID0gXCJjaGFuZ2VfcGFzc3dvcmRfYWRtaW5pc3RyYXRpdmVcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX2JyZWFjaGVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfYnJlYWNoZWRcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX2V4cGlyZWQgPSBcImNoYW5nZV9wYXNzd29yZF9leHBpcmVkXCIsXG4gIGNoYW5nZV9wYXNzd29yZF92YWxpZGF0aW9uID0gXCJjaGFuZ2VfcGFzc3dvcmRfdmFsaWRhdGlvblwiLFxuICB1bmtub3duID0gXCJ1bmtub3duXCJcbn1cblxuZXhwb3J0IGVudW0gT0F1dGhFcnJvclR5cGUge1xuICBpbnZhbGlkX3JlcXVlc3QgPSBcImludmFsaWRfcmVxdWVzdFwiLFxuICBpbnZhbGlkX2NsaWVudCA9IFwiaW52YWxpZF9jbGllbnRcIixcbiAgaW52YWxpZF9ncmFudCA9IFwiaW52YWxpZF9ncmFudFwiLFxuICBpbnZhbGlkX3Rva2VuID0gXCJpbnZhbGlkX3Rva2VuXCIsXG4gIHVuYXV0aG9yaXplZF9jbGllbnQgPSBcInVuYXV0aG9yaXplZF9jbGllbnRcIixcbiAgaW52YWxpZF9zY29wZSA9IFwiaW52YWxpZF9zY29wZVwiLFxuICBzZXJ2ZXJfZXJyb3IgPSBcInNlcnZlcl9lcnJvclwiLFxuICB1bnN1cHBvcnRlZF9ncmFudF90eXBlID0gXCJ1bnN1cHBvcnRlZF9ncmFudF90eXBlXCIsXG4gIHVuc3VwcG9ydGVkX3Jlc3BvbnNlX3R5cGUgPSBcInVuc3VwcG9ydGVkX3Jlc3BvbnNlX3R5cGVcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX3JlcXVpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfcmVxdWlyZWRcIixcbiAgbm90X2xpY2Vuc2VkID0gXCJub3RfbGljZW5zZWRcIixcbiAgdHdvX2ZhY3Rvcl9yZXF1aXJlZCA9IFwidHdvX2ZhY3Rvcl9yZXF1aXJlZFwiLFxuICBhdXRob3JpemF0aW9uX3BlbmRpbmcgPSBcImF1dGhvcml6YXRpb25fcGVuZGluZ1wiLFxuICBleHBpcmVkX3Rva2VuID0gXCJleHBpcmVkX3Rva2VuXCIsXG4gIHVuc3VwcG9ydGVkX3Rva2VuX3R5cGUgPSBcInVuc3VwcG9ydGVkX3Rva2VuX3R5cGVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIE9iamVjdFN0YXRlIHtcbiAgQWN0aXZlID0gXCJBY3RpdmVcIixcbiAgSW5hY3RpdmUgPSBcIkluYWN0aXZlXCIsXG4gIFBlbmRpbmdEZWxldGUgPSBcIlBlbmRpbmdEZWxldGVcIlxufVxuXG4vKipcbiAqIE9wZW5JRCBDb25uZWN0IENvbmZpZ3VyYXRpb24gYXMgZGVzY3JpYmVkIGJ5IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWRpc2NvdmVyeS0xXzAuaHRtbCNQcm92aWRlck1ldGFkYXRhXCI+T3BlbklEXG4gKiBQcm92aWRlciBNZXRhZGF0YTwvYT4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBiYWNrY2hhbm5lbF9sb2dvdXRfc3VwcG9ydGVkPzogYm9vbGVhbjtcbiAgY2xhaW1zX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIGRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBlbmRfc2Vzc2lvbl9lbmRwb2ludD86IHN0cmluZztcbiAgZnJvbnRjaGFubmVsX2xvZ291dF9zdXBwb3J0ZWQ/OiBib29sZWFuO1xuICBncmFudF90eXBlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBpZF90b2tlbl9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBqd2tzX3VyaT86IHN0cmluZztcbiAgcmVzcG9uc2VfbW9kZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVzcG9uc2VfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgc2NvcGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHN1YmplY3RfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgdG9rZW5fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50X2F1dGhfbWV0aG9kc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcmluZm9fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbm5lY3RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29ubmVjdElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxPcGVuSWRDb25uZWN0QXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgb2F1dGgyPzogSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb247XG4gIHBvc3RSZXF1ZXN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRCcmVhY2hEZXRlY3Rpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWF0Y2hNb2RlPzogQnJlYWNoTWF0Y2hNb2RlO1xuICBub3RpZnlVc2VyRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgb25Mb2dpbj86IEJyZWFjaEFjdGlvbjtcbn1cblxuLyoqXG4gKiBQYXNzd29yZCBFbmNyeXB0aW9uIFNjaGVtZSBDb25maWd1cmF0aW9uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBlbmNyeXB0aW9uU2NoZW1lPzogc3RyaW5nO1xuICBlbmNyeXB0aW9uU2NoZW1lRmFjdG9yPzogbnVtYmVyO1xuICBtb2RpZnlFbmNyeXB0aW9uU2NoZW1lT25Mb2dpbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgYWxsIGlkZW50aXR5IHByb3ZpZGVycyB0aGF0IGFyZSBwYXNzd29yZGxlc3MgYW5kIGRvIG5vdCBhY2NlcHQgYSBwYXNzd29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NJZGVudGl0eVByb3ZpZGVyIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEZXJlayBLbGF0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzIHtcbiAgYnJlYWNoRGV0ZWN0aW9uPzogUGFzc3dvcmRCcmVhY2hEZXRlY3Rpb247XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICByZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzPzogUmVtZW1iZXJQcmV2aW91c1Bhc3N3b3JkcztcbiAgcmVxdWlyZU1peGVkQ2FzZT86IGJvb2xlYW47XG4gIHJlcXVpcmVOb25BbHBoYT86IGJvb2xlYW47XG4gIHJlcXVpcmVOdW1iZXI/OiBib29sZWFuO1xuICB2YWxpZGF0ZU9uTG9naW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlIHtcbiAgcGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM/OiBQYXNzd29yZFZhbGlkYXRpb25SdWxlcztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ0lkUExpbmsge1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rcz86IEFycmF5PElkZW50aXR5UHJvdmlkZXJMaW5rPjtcbiAgaWRlbnRpdHlQcm92aWRlck5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPzogSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb247XG4gIGlkZW50aXR5UHJvdmlkZXJUeXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG4gIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xuICB1c2VybmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUmVzcG9uc2Uge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCB7XG4gIGxvY2FsZT86IHN0cmluZztcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2Uge1xuICBlcnJvcnM/OiBFcnJvcnM7XG4gIG1lc3NhZ2U/OiBTTVNNZXNzYWdlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdSZXF1ZXN0IHtcbiAgZW1haWxUZW1wbGF0ZT86IEVtYWlsVGVtcGxhdGU7XG4gIGxvY2FsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld1Jlc3BvbnNlIHtcbiAgZW1haWw/OiBFbWFpbDtcbiAgZXJyb3JzPzogRXJyb3JzO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIFByb29mS2V5Rm9yQ29kZUV4Y2hhbmdlUG9saWN5IHtcbiAgUmVxdWlyZWQgPSBcIlJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkID0gXCJOb3RSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZFdoZW5Vc2luZ0NsaWVudEF1dGhlbnRpY2F0aW9uID0gXCJOb3RSZXF1aXJlZFdoZW5Vc2luZ0NsaWVudEF1dGhlbnRpY2F0aW9uXCJcbn1cblxuLyoqXG4gKiBBbGxvd3MgdGhlIFJlbHlpbmcgUGFydHkgdG8gc3BlY2lmeSBkZXNpcmVkIGF0dHJpYnV0ZXMgb2YgYSBuZXcgY3JlZGVudGlhbC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMge1xuICBhdHRlc3RhdGlvbj86IEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U7XG4gIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24/OiBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWE7XG4gIGNoYWxsZW5nZT86IHN0cmluZztcbiAgZXhjbHVkZUNyZWRlbnRpYWxzPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+O1xuICBleHRlbnNpb25zPzogV2ViQXV0aG5SZWdpc3RyYXRpb25FeHRlbnNpb25PcHRpb25zO1xuICBwdWJLZXlDcmVkUGFyYW1zPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnM+O1xuICBycD86IFB1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHk7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHVzZXI/OiBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eTtcbn1cblxuLyoqXG4gKiBDb250YWlucyBhdHRyaWJ1dGVzIGZvciB0aGUgUmVseWluZyBQYXJ0eSB0byByZWZlciB0byBhbiBleGlzdGluZyBwdWJsaWMga2V5IGNyZWRlbnRpYWwgYXMgYW4gaW5wdXQgcGFyYW1ldGVyLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3Ige1xuICBpZD86IHN0cmluZztcbiAgdHJhbnNwb3J0cz86IEFycmF5PHN0cmluZz47XG4gIHR5cGU/OiBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSB1c2VyIGFjY291bnQgb3IgV2ViQXV0aG4gUmVseWluZyBQYXJ0eSBhc3NvY2lhdGVkIHdpdGggYSBwdWJsaWMga2V5IGNyZWRlbnRpYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdXBwbHkgaW5mb3JtYXRpb24gb24gY3JlZGVudGlhbCB0eXBlIGFuZCBhbGdvcml0aG0gdG8gdGhlIDxpPmF1dGhlbnRpY2F0b3I8L2k+LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMge1xuICBhbGc/OiBDb3NlQWxnb3JpdGhtSWRlbnRpZmllcjtcbiAgdHlwZT86IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlO1xufVxuXG4vKipcbiAqIFN1cHBseSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBSZWx5aW5nIFBhcnR5IHdoZW4gY3JlYXRpbmcgYSBuZXcgY3JlZGVudGlhbFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eSBleHRlbmRzIFB1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkge1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgPGk+YXV0aGVudGljYXRvcjwvaT4gd2l0aCB0aGUgZGF0YSBpdCBuZWVkcyB0byBnZW5lcmF0ZSBhbiBhc3NlcnRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMge1xuICBhbGxvd0NyZWRlbnRpYWxzPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+O1xuICBjaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHVzZXJWZXJpZmljYXRpb24/OiBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ7XG59XG5cbi8qKlxuICogRGVmaW5lcyB2YWxpZCBjcmVkZW50aWFsIHR5cGVzLiBUaGlzIGlzIGFuIGV4dGVuc2lvbiBwb2ludCBpbiB0aGUgV2ViQXV0aG4gc3BlYy4gVGhlIG9ubHkgZGVmaW5lZCB2YWx1ZSBhdCB0aGlzIHRpbWUgaXMgXCJwdWJsaWMta2V5XCJcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZSB7XG4gIHB1YmxpY0tleSA9IFwicHVibGljLWtleVwiXG59XG5cbi8qKlxuICogU3VwcGx5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIgYWNjb3VudCB3aGVuIGNyZWF0aW5nIGEgbmV3IGNyZWRlbnRpYWxcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGV4dGVuZHMgUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKV1QgUHVibGljIEtleSBSZXNwb25zZSBPYmplY3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5UmVzcG9uc2Uge1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHB1YmxpY0tleXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICB0aW1lUGVyaW9kSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gUmF0ZUxpbWl0ZWRSZXF1ZXN0VHlwZSB7XG4gIEZhaWxlZExvZ2luID0gXCJGYWlsZWRMb2dpblwiLFxuICBGb3Jnb3RQYXNzd29yZCA9IFwiRm9yZ290UGFzc3dvcmRcIixcbiAgU2VuZEVtYWlsVmVyaWZpY2F0aW9uID0gXCJTZW5kRW1haWxWZXJpZmljYXRpb25cIixcbiAgU2VuZFBhc3N3b3JkbGVzcyA9IFwiU2VuZFBhc3N3b3JkbGVzc1wiLFxuICBTZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uID0gXCJTZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uXCIsXG4gIFNlbmRUd29GYWN0b3IgPSBcIlNlbmRUd29GYWN0b3JcIlxufVxuXG4vKipcbiAqIFJhdyBsb2dpbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCB0aW1lIGEgdXNlciBsb2dzIGludG8gYW4gYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF3TG9naW4ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgaW5zdGFudD86IG51bWJlcjtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBSZWFjdG9yRmVhdHVyZVN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIERJU0NPTk5FQ1RFRCA9IFwiRElTQ09OTkVDVEVEXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgRElTQUJMRUQgPSBcIkRJU0FCTEVEXCIsXG4gIFVOS05PV04gPSBcIlVOS05PV05cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljcyB7XG4gIGJyZWFjaGVkUGFzc3dvcmRNZXRyaWNzPzogUmVjb3JkPFVVSUQsIEJyZWFjaGVkUGFzc3dvcmRUZW5hbnRNZXRyaWM+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljc1Jlc3BvbnNlIHtcbiAgbWV0cmljcz86IFJlYWN0b3JNZXRyaWNzO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIG1hbmFnaW5nIEZ1c2lvbkF1dGggUmVhY3RvciBhbmQgbGljZW5zZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclJlcXVlc3Qge1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBsaWNlbnNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JSZXNwb25zZSB7XG4gIHN0YXR1cz86IFJlYWN0b3JTdGF0dXM7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JTdGF0dXMge1xuICBhZHZhbmNlZElkZW50aXR5UHJvdmlkZXJzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkTGFtYmRhcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE11bHRpRmFjdG9yQXV0aGVudGljYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRSZWdpc3RyYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYXBwbGljYXRpb25NdWx0aUZhY3RvckF1dGhlbnRpY2F0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFwcGxpY2F0aW9uVGhlbWVzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGJyZWFjaGVkUGFzc3dvcmREZXRlY3Rpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgY29ubmVjdG9ycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBlbnRpdHlNYW5hZ2VtZW50PzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGV4cGlyYXRpb24/OiBzdHJpbmc7XG4gIGxpY2Vuc2VBdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgbGljZW5zZWQ/OiBib29sZWFuO1xuICBzY2ltU2VydmVyPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHRocmVhdERldGVjdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB3ZWJBdXRobj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB3ZWJBdXRoblBsYXRmb3JtQXV0aGVudGljYXRvcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgd2ViQXV0aG5Sb2FtaW5nQXV0aGVudGljYXRvcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHVzZXIgbG9naW4gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlbnRMb2dpblJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXNwb25zZSB7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgSldUIFJlZnJlc2ggVG9rZW4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBtZXRhRGF0YT86IE1ldGFEYXRhO1xuICBzdGFydEluc3RhbnQ/OiBudW1iZXI7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBSZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5IHtcbiAgRml4ZWQgPSBcIkZpeGVkXCIsXG4gIFNsaWRpbmdXaW5kb3cgPSBcIlNsaWRpbmdXaW5kb3dcIlxufVxuXG4vKipcbiAqIFJlZnJlc2ggVG9rZW4gSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2Vucz86IEFycmF5PFJlZnJlc2hUb2tlbj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciByZXRyaWV2aW5nIFJlZnJlc2ggVG9rZW5zXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlblJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogUmVmcmVzaFRva2VuO1xuICByZWZyZXNoVG9rZW5zPzogQXJyYXk8UmVmcmVzaFRva2VuPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuUmV2b2NhdGlvblBvbGljeSB7XG4gIG9uTG9naW5QcmV2ZW50ZWQ/OiBib29sZWFuO1xuICBvbk11bHRpRmFjdG9yRW5hYmxlPzogYm9vbGVhbjtcbiAgb25QYXNzd29yZENoYW5nZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBSZWZyZXNoIFRva2VuIEFQSSB0byByZXZva2UgYSByZWZyZXNoIHRva2VuIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJlZnJlc2hUb2tlblVzYWdlUG9saWN5IHtcbiAgUmV1c2FibGUgPSBcIlJldXNhYmxlXCIsXG4gIE9uZVRpbWVVc2UgPSBcIk9uZVRpbWVVc2VcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYmlydGhEYXRlPzogUmVxdWlyYWJsZTtcbiAgY29uZmlybVBhc3N3b3JkPzogYm9vbGVhbjtcbiAgZmlyc3ROYW1lPzogUmVxdWlyYWJsZTtcbiAgZm9ybUlkPzogVVVJRDtcbiAgZnVsbE5hbWU/OiBSZXF1aXJhYmxlO1xuICBsYXN0TmFtZT86IFJlcXVpcmFibGU7XG4gIGxvZ2luSWRUeXBlPzogTG9naW5JZFR5cGU7XG4gIG1pZGRsZU5hbWU/OiBSZXF1aXJhYmxlO1xuICBtb2JpbGVQaG9uZT86IFJlcXVpcmFibGU7XG4gIHR5cGU/OiBSZWdpc3RyYXRpb25UeXBlO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBkZWxldGUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbkRlbGV0ZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHJlZ2lzdHJhdGlvbiByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2Uge1xuICBob3VybHlDb3VudHM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBkaXNhYmxlRG9tYWluQmxvY2s/OiBib29sZWFuO1xuICBnZW5lcmF0ZUF1dGhlbnRpY2F0aW9uVG9rZW4/OiBib29sZWFuO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICBzZW5kU2V0UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHNraXBSZWdpc3RyYXRpb25WZXJpZmljYXRpb24/OiBib29sZWFuO1xuICBza2lwVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICB1c2VyPzogVXNlcjtcbn1cblxuZXhwb3J0IGVudW0gUmVnaXN0cmF0aW9uVHlwZSB7XG4gIGJhc2ljID0gXCJiYXNpY1wiLFxuICBhZHZhbmNlZCA9IFwiYWR2YW5jZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucyB7XG4gIGJlaGF2aW9yPzogVW52ZXJpZmllZEJlaGF2aW9yO1xufVxuXG4vKipcbiAqIFJlaW5kZXggQVBJIHJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVpbmRleFJlcXVlc3Qge1xuICBpbmRleD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVsb2FkUmVxdWVzdCB7XG4gIG5hbWVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtZW1iZXJQcmV2aW91c1Bhc3N3b3JkcyBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVxdWlyZWQgYW5kIHRodXMgYWxzbyBvcHRpb25hbC4gVGhpcyBjdXJyZW50bHkgZXh0ZW5kcyBFbmFibGVhYmxlIGJlY2F1c2UgYW55dGhpbmcgdGhhdCBpc1xuICogcmVxdWlyZS9vcHRpb25hbCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWFibGUgYXMgd2VsbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJhYmxlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZGVzY3JpYmluZyB0aGUgbmVlZCBmb3IgQ09SUyBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlc0NPUlNDb25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIFJlbHlpbmcgUGFydHkncyByZXF1aXJlbWVudHMgZm9yIDxhIGhyZWY9XCJodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jY2xpZW50LXNpZGUtZGlzY292ZXJhYmxlLWNyZWRlbnRpYWxcIj5jbGllbnQtc2lkZVxuICogZGlzY292ZXJhYmxlIGNyZWRlbnRpYWxzPC9hPiAoZm9ybWVybHkga25vd24gYXMgXCJyZXNpZGVudCBrZXlzXCIpXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gUmVzaWRlbnRLZXlSZXF1aXJlbWVudCB7XG4gIGRpc2NvdXJhZ2VkID0gXCJkaXNjb3VyYWdlZFwiLFxuICBwcmVmZXJyZWQgPSBcInByZWZlcnJlZFwiLFxuICByZXF1aXJlZCA9IFwicmVxdWlyZWRcIlxufVxuXG5leHBvcnQgZW51bSBTQU1MTG9nb3V0QmVoYXZpb3Ige1xuICBBbGxQYXJ0aWNpcGFudHMgPSBcIkFsbFBhcnRpY2lwYW50c1wiLFxuICBPbmx5T3JpZ2luYXRvciA9IFwiT25seU9yaWdpbmF0b3JcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFzc2VydGlvbkNvbmZpZ3VyYXRpb24ge1xuICBkZXN0aW5hdGlvbj86IFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGF1ZGllbmNlPzogc3RyaW5nO1xuICBhdXRob3JpemVkUmVkaXJlY3RVUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgY2FsbGJhY2tVUkw/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAgaW5pdGlhdGVkTG9naW4/OiBTQU1MdjJJZFBJbml0aWF0ZWRMb2dpbkNvbmZpZ3VyYXRpb247XG4gIGlzc3Vlcj86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBsb2dvdXQ/OiBTQU1MdjJMb2dvdXQ7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcmVxdWlyZVNpZ25lZFJlcXVlc3RzPzogYm9vbGVhbjtcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG4gIHhtbFNpZ25hdHVyZUxvY2F0aW9uPzogWE1MU2lnbmF0dXJlTG9jYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFsdGVybmF0ZXM/OiBBcnJheTxzdHJpbmc+O1xuICBwb2xpY3k/OiBTQU1MdjJEZXN0aW5hdGlvbkFzc2VydGlvblBvbGljeTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBlbnVtIFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uUG9saWN5IHtcbiAgRW5hYmxlZCA9IFwiRW5hYmxlZFwiLFxuICBEaXNhYmxlZCA9IFwiRGlzYWJsZWRcIixcbiAgQWxsb3dBbHRlcm5hdGVzID0gXCJBbGxvd0FsdGVybmF0ZXNcIlxufVxuXG4vKipcbiAqIFNBTUwgdjIgaWRlbnRpdHkgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZVNBTUx2MklkZW50aXR5UHJvdmlkZXI8U0FNTHYyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGFzc2VydGlvbkNvbmZpZ3VyYXRpb24/OiBTQU1MdjJBc3NlcnRpb25Db25maWd1cmF0aW9uO1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgZG9tYWlucz86IEFycmF5PHN0cmluZz47XG4gIGlkcEVuZHBvaW50Pzogc3RyaW5nO1xuICBpZHBJbml0aWF0ZWRDb25maWd1cmF0aW9uPzogU0FNTHYySWRwSW5pdGlhdGVkQ29uZmlndXJhdGlvbjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBsb2dpbkhpbnRDb25maWd1cmF0aW9uPzogTG9naW5IaW50Q29uZmlndXJhdGlvbjtcbiAgbmFtZUlkRm9ybWF0Pzogc3RyaW5nO1xuICBwb3N0UmVxdWVzdD86IGJvb2xlYW47XG4gIHJlcXVlc3RTaWduaW5nS2V5SWQ/OiBVVUlEO1xuICBzaWduUmVxdWVzdD86IGJvb2xlYW47XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZFBJbml0aWF0ZWRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG59XG5cbi8qKlxuICogQ29uZmlnIGZvciByZWd1bGFyIFNBTUwgSURQIGNvbmZpZ3VyYXRpb25zIHRoYXQgc3VwcG9ydCBJZFAgaW5pdGlhdGVkIHJlcXVlc3RzXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkcEluaXRpYXRlZENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgaXNzdWVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNBTUwgdjIgSWRQIEluaXRpYXRlZCBpZGVudGl0eSBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZFBJbml0aWF0ZWRJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZVNBTUx2MklkZW50aXR5UHJvdmlkZXI8U0FNTHYySWRQSW5pdGlhdGVkQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGlzc3Vlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJZFAgSW5pdGlhdGVkIGxvZ2luIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRQSW5pdGlhdGVkTG9naW5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG5hbWVJZEZvcm1hdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJMb2dvdXQge1xuICBiZWhhdmlvcj86IFNBTUxMb2dvdXRCZWhhdmlvcjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAga2V5SWQ/OiBVVUlEO1xuICByZXF1aXJlU2lnbmVkUmVxdWVzdHM/OiBib29sZWFuO1xuICBzaW5nbGVMb2dvdXQ/OiBTQU1MdjJTaW5nbGVMb2dvdXQ7XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MlNpbmdsZUxvZ291dCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBrZXlJZD86IFVVSUQ7XG4gIHVybD86IHN0cmluZztcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbi8qKlxuICogU2VhcmNoIEFQSSByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBVc2VyU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIEFQSSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXNwb25zZSB7XG4gIHRvdGFsPzogbnVtYmVyO1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXN1bHRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdHM8VD4ge1xuICByZXN1bHRzPzogQXJyYXk8VD47XG4gIHRvdGFsPzogbnVtYmVyO1xuICB0b3RhbEVxdWFsVG9BY3R1YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSZXNwb25zZSB7XG4gIHNlY3JldD86IHN0cmluZztcbiAgc2VjcmV0QmFzZTMyRW5jb2RlZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbiB7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgdHlwZT86IFNlY3VyZUdlbmVyYXRvclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTZWN1cmVHZW5lcmF0b3JUeXBlIHtcbiAgcmFuZG9tRGlnaXRzID0gXCJyYW5kb21EaWdpdHNcIixcbiAgcmFuZG9tQnl0ZXMgPSBcInJhbmRvbUJ5dGVzXCIsXG4gIHJhbmRvbUFscGhhID0gXCJyYW5kb21BbHBoYVwiLFxuICByYW5kb21BbHBoYU51bWVyaWMgPSBcInJhbmRvbUFscGhhTnVtZXJpY1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyZUlkZW50aXR5IHtcbiAgYnJlYWNoZWRQYXNzd29yZExhc3RDaGVja2VkSW5zdGFudD86IG51bWJlcjtcbiAgYnJlYWNoZWRQYXNzd29yZFN0YXR1cz86IEJyZWFjaGVkUGFzc3dvcmRTdGF0dXM7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZmFjdG9yPzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGxhc3RMb2dpbkluc3RhbnQ/OiBudW1iZXI7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZVJlYXNvbj86IENoYW5nZVBhc3N3b3JkUmVhc29uO1xuICBwYXNzd29yZENoYW5nZVJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcGFzc3dvcmRMYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgc2FsdD86IHN0cmluZztcbiAgdW5pcXVlVXNlcm5hbWU/OiBzdHJpbmc7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZVN0YXR1cz86IENvbnRlbnRTdGF0dXM7XG4gIHZlcmlmaWVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYmNjQWRkcmVzc2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgY2NBZGRyZXNzZXM/OiBBcnJheTxzdHJpbmc+O1xuICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBBcnJheTxzdHJpbmc+O1xuICByZXF1ZXN0RGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHRvQWRkcmVzc2VzPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbiAgdXNlcklkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVzcG9uc2Uge1xuICBhbm9ueW1vdXNSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUVycm9ycz47XG4gIHJlc3VsdHM/OiBSZWNvcmQ8VVVJRCwgRW1haWxUZW1wbGF0ZUVycm9ycz47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2Uge1xuICBwaG9uZU51bWJlcj86IHN0cmluZztcbiAgdGV4dE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2VUZW1wbGF0ZSBleHRlbmRzIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRlZmF1bHRUZW1wbGF0ZT86IHN0cmluZztcbiAgbG9jYWxpemVkVGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb255UFNOQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNvbnlQU04gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbnlQU05JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8U29ueVBTTkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU29ydCB7XG4gIGFzYyA9IFwiYXNjXCIsXG4gIGRlc2MgPSBcImRlc2NcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3J0RmllbGQge1xuICBtaXNzaW5nPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBvcmRlcj86IFNvcnQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlYW1BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHdlYkFQSUtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGVhbSBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlYW1JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8U3RlYW1BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgd2ViQVBJS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciBpbnRlcmZhY2UgdGhhdCBpbmRpY2F0ZXMgYW4gaWRlbnRpdHkgcHJvdmlkZXIgY2FuIGJlIGZlZGVyYXRlZCB0byB1c2luZyB0aGUgSFRUUCBQT1NUIG1ldGhvZC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdXBwb3J0c1Bvc3RCaW5kaW5ncyB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvbiB7XG4gIGF1ZGl0TG9nQ29uZmlndXJhdGlvbj86IEF1ZGl0TG9nQ29uZmlndXJhdGlvbjtcbiAgY29yc0NvbmZpZ3VyYXRpb24/OiBDT1JTQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGV2ZW50TG9nQ29uZmlndXJhdGlvbj86IEV2ZW50TG9nQ29uZmlndXJhdGlvbjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luUmVjb3JkQ29uZmlndXJhdGlvbj86IExvZ2luUmVjb3JkQ29uZmlndXJhdGlvbjtcbiAgcmVwb3J0VGltZXpvbmU/OiBzdHJpbmc7XG4gIHVpQ29uZmlndXJhdGlvbj86IFVJQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gQVBJLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgc3lzdGVtQ29uZmlndXJhdGlvbj86IFN5c3RlbUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBBUEkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgc3lzdGVtQ29uZmlndXJhdGlvbj86IFN5c3RlbUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUxvZ3NFeHBvcnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV4cG9ydFJlcXVlc3Qge1xuICBpbmNsdWRlQXJjaGl2ZWQ/OiBib29sZWFuO1xuICBsYXN0TkJ5dGVzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlcyB7XG4gIGFjY291bnRFZGl0Pzogc3RyaW5nO1xuICBhY2NvdW50SW5kZXg/OiBzdHJpbmc7XG4gIGFjY291bnRUd29GYWN0b3JEaXNhYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9yRW5hYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9ySW5kZXg/OiBzdHJpbmc7XG4gIGFjY291bnRXZWJBdXRobkFkZD86IHN0cmluZztcbiAgYWNjb3VudFdlYkF1dGhuRGVsZXRlPzogc3RyaW5nO1xuICBhY2NvdW50V2ViQXV0aG5JbmRleD86IHN0cmluZztcbiAgZW1haWxDb21wbGV0ZT86IHN0cmluZztcbiAgZW1haWxTZW5kPzogc3RyaW5nO1xuICBlbWFpbFNlbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZpY2F0aW9uUmVxdWlyZWQ/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZ5Pzogc3RyaW5nO1xuICBoZWxwZXJzPzogc3RyaW5nO1xuICBpbmRleD86IHN0cmluZztcbiAgb2F1dGgyQXV0aG9yaXplPzogc3RyaW5nO1xuICBvYXV0aDJBdXRob3JpemVkTm90UmVnaXN0ZXJlZD86IHN0cmluZztcbiAgb2F1dGgyQ2hpbGRSZWdpc3RyYXRpb25Ob3RBbGxvd2VkPzogc3RyaW5nO1xuICBvYXV0aDJDaGlsZFJlZ2lzdHJhdGlvbk5vdEFsbG93ZWRDb21wbGV0ZT86IHN0cmluZztcbiAgb2F1dGgyQ29tcGxldGVSZWdpc3RyYXRpb24/OiBzdHJpbmc7XG4gIG9hdXRoMkRldmljZT86IHN0cmluZztcbiAgb2F1dGgyRGV2aWNlQ29tcGxldGU/OiBzdHJpbmc7XG4gIG9hdXRoMkVycm9yPzogc3RyaW5nO1xuICBvYXV0aDJMb2dvdXQ/OiBzdHJpbmc7XG4gIG9hdXRoMlBhc3N3b3JkbGVzcz86IHN0cmluZztcbiAgb2F1dGgyUmVnaXN0ZXI/OiBzdHJpbmc7XG4gIG9hdXRoMlN0YXJ0SWRQTGluaz86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3JFbmFibGU/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3RvckVuYWJsZUNvbXBsZXRlPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3JNZXRob2RzPzogc3RyaW5nO1xuICBvYXV0aDJXYWl0Pzogc3RyaW5nO1xuICBvYXV0aDJXZWJBdXRobj86IHN0cmluZztcbiAgb2F1dGgyV2ViQXV0aG5SZWF1dGg/OiBzdHJpbmc7XG4gIG9hdXRoMldlYkF1dGhuUmVhdXRoRW5hYmxlPzogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZT86IHN0cmluZztcbiAgcGFzc3dvcmRDb21wbGV0ZT86IHN0cmluZztcbiAgcGFzc3dvcmRGb3Jnb3Q/OiBzdHJpbmc7XG4gIHBhc3N3b3JkU2VudD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uQ29tcGxldGU/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblNlbmQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblNlbnQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblJlcXVpcmVkPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZnk/OiBzdHJpbmc7XG4gIHNhbWx2MkxvZ291dD86IHN0cmluZztcbiAgdW5hdXRob3JpemVkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnQge1xuICBhY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbj86IFRlbmFudEFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uO1xuICBjYXB0Y2hhQ29uZmlndXJhdGlvbj86IFRlbmFudENhcHRjaGFDb25maWd1cmF0aW9uO1xuICBjb25maWd1cmVkPzogYm9vbGVhbjtcbiAgY29ubmVjdG9yUG9saWNpZXM/OiBBcnJheTxDb25uZWN0b3JQb2xpY3k+O1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW1haWxDb25maWd1cmF0aW9uPzogRW1haWxDb25maWd1cmF0aW9uO1xuICBldmVudENvbmZpZ3VyYXRpb24/OiBFdmVudENvbmZpZ3VyYXRpb247XG4gIGV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb24/OiBFeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBGYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb247XG4gIGZhbWlseUNvbmZpZ3VyYXRpb24/OiBGYW1pbHlDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IFRlbmFudEZvcm1Db25maWd1cmF0aW9uO1xuICBodHRwU2Vzc2lvbk1heEluYWN0aXZlSW50ZXJ2YWw/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBqd3RDb25maWd1cmF0aW9uPzogSldUQ29uZmlndXJhdGlvbjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IFRlbmFudExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2dpbkNvbmZpZ3VyYXRpb24/OiBUZW5hbnRMb2dpbkNvbmZpZ3VyYXRpb247XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgbWF4aW11bVBhc3N3b3JkQWdlPzogTWF4aW11bVBhc3N3b3JkQWdlO1xuICBtaW5pbXVtUGFzc3dvcmRBZ2U/OiBNaW5pbXVtUGFzc3dvcmRBZ2U7XG4gIG11bHRpRmFjdG9yQ29uZmlndXJhdGlvbj86IFRlbmFudE11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogVGVuYW50T0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzPzogUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM7XG4gIHJhdGVMaW1pdENvbmZpZ3VyYXRpb24/OiBUZW5hbnRSYXRlTGltaXRDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25Db25maWd1cmF0aW9uPzogVGVuYW50UmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbjtcbiAgc2NpbVNlcnZlckNvbmZpZ3VyYXRpb24/OiBUZW5hbnRTQ0lNU2VydmVyQ29uZmlndXJhdGlvbjtcbiAgc3NvQ29uZmlndXJhdGlvbj86IFRlbmFudFNTT0NvbmZpZ3VyYXRpb247XG4gIHN0YXRlPzogT2JqZWN0U3RhdGU7XG4gIHRoZW1lSWQ/OiBVVUlEO1xuICB1c2VyRGVsZXRlUG9saWN5PzogVGVuYW50VXNlckRlbGV0ZVBvbGljeTtcbiAgdXNlcm5hbWVDb25maWd1cmF0aW9uPzogVGVuYW50VXNlcm5hbWVDb25maWd1cmF0aW9uO1xuICB3ZWJBdXRobkNvbmZpZ3VyYXRpb24/OiBUZW5hbnRXZWJBdXRobkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50YWJsZSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRBY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbiB7XG4gIHVpSVBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRDYXB0Y2hhQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjYXB0Y2hhTWV0aG9kPzogQ2FwdGNoYU1ldGhvZDtcbiAgc2VjcmV0S2V5Pzogc3RyaW5nO1xuICBzaXRlS2V5Pzogc3RyaW5nO1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIFRlbmFudCBBUEkgdG8gZGVsZXRlIGEgdGVuYW50IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnREZWxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFzeW5jPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb24ge1xuICBhZG1pblVzZXJGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgUm9iIERhdmlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50TGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIHNjaW1FbnRlcnByaXNlVXNlclJlcXVlc3RDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1FbnRlcnByaXNlVXNlclJlc3BvbnNlQ29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltR3JvdXBSZXF1ZXN0Q29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltR3JvdXBSZXNwb25zZUNvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbVVzZXJSZXF1ZXN0Q29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltVXNlclJlc3BvbnNlQ29udmVydGVySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRMb2dpbkNvbmZpZ3VyYXRpb24ge1xuICByZXF1aXJlQXV0aGVudGljYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWlrZXkgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50TXVsdGlGYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgYXV0aGVudGljYXRvcj86IE11bHRpRmFjdG9yQXV0aGVudGljYXRvck1ldGhvZDtcbiAgZW1haWw/OiBNdWx0aUZhY3RvckVtYWlsTWV0aG9kO1xuICBsb2dpblBvbGljeT86IE11bHRpRmFjdG9yTG9naW5Qb2xpY3k7XG4gIHNtcz86IE11bHRpRmFjdG9yU01TTWV0aG9kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudE9BdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBjbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuUG9wdWxhdGVMYW1iZGFJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFJhdGVMaW1pdENvbmZpZ3VyYXRpb24ge1xuICBmYWlsZWRMb2dpbj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIGZvcmdvdFBhc3N3b3JkPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZEVtYWlsVmVyaWZpY2F0aW9uPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFBhc3N3b3JkbGVzcz86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRSZWdpc3RyYXRpb25WZXJpZmljYXRpb24/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kVHdvRmFjdG9yPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJsb2NrZWREb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBzb3VyY2VUZW5hbnRJZD86IFVVSUQ7XG4gIHRlbmFudD86IFRlbmFudDtcbiAgd2ViaG9va0lkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZXNwb25zZSB7XG4gIHRlbmFudD86IFRlbmFudDtcbiAgdGVuYW50cz86IEFycmF5PFRlbmFudD47XG59XG5cbi8qKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTQ0lNU2VydmVyQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjbGllbnRFbnRpdHlUeXBlSWQ/OiBVVUlEO1xuICBzY2hlbWFzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc2VydmVyRW50aXR5VHlwZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTU09Db25maWd1cmF0aW9uIHtcbiAgZGV2aWNlVHJ1c3RUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRVbnZlcmlmaWVkQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsPzogVW52ZXJpZmllZEJlaGF2aW9yO1xuICB3aGVuR2F0ZWQ/OiBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucztcbn1cblxuLyoqXG4gKiBBIFRlbmFudC1sZXZlbCBwb2xpY3kgZm9yIGRlbGV0aW5nIFVzZXJzLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50VXNlckRlbGV0ZVBvbGljeSB7XG4gIHVudmVyaWZpZWQ/OiBUaW1lQmFzZWREZWxldGVQb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFVzZXJuYW1lQ29uZmlndXJhdGlvbiB7XG4gIHVuaXF1ZT86IFVuaXF1ZVVzZXJuYW1lQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBUZW5hbnQtbGV2ZWwgY29uZmlndXJhdGlvbiBmb3IgV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFdlYkF1dGhuQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBib290c3RyYXBXb3JrZmxvdz86IFRlbmFudFdlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIHJlYXV0aGVudGljYXRpb25Xb3JrZmxvdz86IFRlbmFudFdlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xuICByZWx5aW5nUGFydHlJZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFdlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50UHJlZmVyZW5jZT86IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50UHJlZmVyZW5jZTtcbiAgdXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50PzogVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0RXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWUge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdE1lc3NhZ2VzPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRNZXNzYWdlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0eWxlc2hlZXQ/OiBzdHJpbmc7XG4gIHRlbXBsYXRlcz86IFRlbXBsYXRlcztcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZVJlcXVlc3Qge1xuICBzb3VyY2VUaGVtZUlkPzogVVVJRDtcbiAgdGhlbWU/OiBUaGVtZTtcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVSZXNwb25zZSB7XG4gIHRoZW1lPzogVGhlbWU7XG4gIHRoZW1lcz86IEFycmF5PFRoZW1lPjtcbn1cblxuLyoqXG4gKiBBIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lQmFzZWREZWxldGVQb2xpY3kgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEYXlzVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbi8qKlxuICogPHVsPlxuICogPGxpPkJlYXJlciBUb2tlbiB0eXBlIGFzIGRlZmluZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzUwXCI+UkZDIDY3NTA8L2E+LjwvbGk+XG4gKiA8bGk+TUFDIFRva2VuIHR5cGUgYXMgcmVmZXJlbmNlZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDlcIj5SRkMgNjc0OTwvYT4gYW5kXG4gKiA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtb2F1dGgtdjItaHR0cC1tYWMtMDVcIj5cbiAqIERyYWZ0IFJGQyBvbiBPQXV0aCAyLjAgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIChNQUMpIFRva2VuczwvYT5cbiAqIDwvbGk+XG4gKiA8L3VsPlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVG9rZW5UeXBlIHtcbiAgQmVhcmVyID0gXCJCZWFyZXJcIixcbiAgTUFDID0gXCJNQUNcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvdGFscyB7XG4gIGxvZ2lucz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbiAgdG90YWxSZWdpc3RyYXRpb25zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSByZXNwb25zZSBmcm9tIHRoZSB0b3RhbCByZXBvcnQuIFRoaXMgcmVwb3J0IHN0b3JlcyB0aGUgdG90YWwgbnVtYmVycyBmb3IgZWFjaCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb3RhbHNSZXBvcnRSZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9uVG90YWxzPzogUmVjb3JkPFVVSUQsIFRvdGFscz47XG4gIGdsb2JhbFJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsR2xvYmFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gVE9UUEFsZ29yaXRobSB7XG4gIEhtYWNTSEExID0gXCJIbWFjU0hBMVwiLFxuICBIbWFjU0hBMjU2ID0gXCJIbWFjU0hBMjU2XCIsXG4gIEhtYWNTSEE1MTIgPSBcIkhtYWNTSEE1MTJcIlxufVxuXG4vKipcbiAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlcyBmb3IgV2ViaG9va3MgYW5kIG90aGVyIGV2ZW50IHN5c3RlbXMgd2l0aGluIEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZSB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgQW55ID0gXCJBbnlcIixcbiAgU2ltcGxlTWFqb3JpdHkgPSBcIlNpbXBsZU1ham9yaXR5XCIsXG4gIFN1cGVyTWFqb3JpdHkgPSBcIlN1cGVyTWFqb3JpdHlcIixcbiAgQWJzb2x1dGVNYWpvcml0eSA9IFwiQWJzb2x1dGVNYWpvcml0eVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2lsaW9NZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBhY2NvdW50U0lEPzogc3RyaW5nO1xuICBhdXRoVG9rZW4/OiBzdHJpbmc7XG4gIGZyb21QaG9uZU51bWJlcj86IHN0cmluZztcbiAgbWVzc2FnaW5nU2VydmljZVNpZD86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUd2l0Y2ggZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxUd2l0Y2hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdHRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFR3aXR0ZXIgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0dGVySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFR3aXR0ZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvckRpc2FibGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjb2RlPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yRW5hYmxlRGlzYWJsZVNlbmRSZXF1ZXN0IHtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgY29kZT86IHN0cmluZztcbiAgdHJ1c3RDb21wdXRlcj86IGJvb2xlYW47XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JNZXRob2Qge1xuICBhdXRoZW50aWNhdG9yPzogQXV0aGVudGljYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgbGFzdFVzZWQ/OiBib29sZWFuO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICBzZWNyZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlIHtcbiAgcmVjb3ZlcnlDb2Rlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRvcklkPzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICBzZWNyZXRCYXNlMzJFbmNvZGVkPzogc3RyaW5nO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xuICByZWNvdmVyeUNvZGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU2VuZFJlcXVlc3Qge1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0cnVzdENoYWxsZW5nZT86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhdHVzUmVzcG9uc2Uge1xuICB0cnVzdHM/OiBBcnJheTxUd29GYWN0b3JUcnVzdD47XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yVHJ1c3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZXhwaXJhdGlvbj86IG51bWJlcjtcbiAgc3RhcnRJbnN0YW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVJQ29uZmlndXJhdGlvbiB7XG4gIGhlYWRlckNvbG9yPzogc3RyaW5nO1xuICBsb2dvVVJMPzogc3RyaW5nO1xuICBtZW51Rm9udENvbG9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaXF1ZVVzZXJuYW1lQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBudW1iZXJPZkRpZ2l0cz86IG51bWJlcjtcbiAgc2VwYXJhdG9yPzogc3RyaW5nO1xuICBzdHJhdGVneT86IFVuaXF1ZVVzZXJuYW1lU3RyYXRlZ3k7XG59XG5cbmV4cG9ydCBlbnVtIFVuaXF1ZVVzZXJuYW1lU3RyYXRlZ3kge1xuICBBbHdheXMgPSBcIkFsd2F5c1wiLFxuICBPbkNvbGxpc2lvbiA9IFwiT25Db2xsaXNpb25cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVW52ZXJpZmllZEJlaGF2aW9yIHtcbiAgQWxsb3cgPSBcIkFsbG93XCIsXG4gIEdhdGVkID0gXCJHYXRlZFwiXG59XG5cbi8qKlxuICogVGhlIGdsb2JhbCB2aWV3IG9mIGEgVXNlci4gVGhpcyBvYmplY3QgY29udGFpbnMgYWxsIGdsb2JhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBpbmNsdWRpbmcgYmlydGggZGF0ZSwgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uXG4gKiBwcmVmZXJyZWQgbGFuZ3VhZ2VzLCBnbG9iYWwgYXR0cmlidXRlcywgZXRjLlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyIGV4dGVuZHMgU2VjdXJlSWRlbnRpdHkge1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBiaXJ0aERhdGU/OiBzdHJpbmc7XG4gIGNsZWFuU3BlYWtJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbWFpbD86IHN0cmluZztcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBmaXJzdE5hbWU/OiBzdHJpbmc7XG4gIGZ1bGxOYW1lPzogc3RyaW5nO1xuICBpbWFnZVVybD86IHN0cmluZztcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdE5hbWU/OiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtZW1iZXJzaGlwcz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbiAgbWlkZGxlTmFtZT86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHBhcmVudEVtYWlsPzogc3RyaW5nO1xuICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBBcnJheTxzdHJpbmc+O1xuICByZWdpc3RyYXRpb25zPzogQXJyYXk8VXNlclJlZ2lzdHJhdGlvbj47XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIHR3b0ZhY3Rvcj86IFVzZXJUd29GYWN0b3JDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEFuIGFjdGlvbiB0aGF0IGNhbiBiZSBleGVjdXRlZCBvbiBhIHVzZXIgKGRpc2NpcGxpbmUgb3IgcmV3YXJkIHBvdGVudGlhbGx5KS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uIHtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgY2FuY2VsRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW5kRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbmNsdWRlRW1haWxJbkV2ZW50SlNPTj86IGJvb2xlYW47XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG1vZGlmeUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBcnJheTxVc2VyQWN0aW9uT3B0aW9uPjtcbiAgcHJldmVudExvZ2luPzogYm9vbGVhbjtcbiAgc2VuZEVuZEV2ZW50PzogYm9vbGVhbjtcbiAgc3RhcnRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0ZW1wb3JhbD86IGJvb2xlYW47XG4gIHRyYW5zYWN0aW9uVHlwZT86IFRyYW5zYWN0aW9uVHlwZTtcbiAgdXNlckVtYWlsaW5nRW5hYmxlZD86IGJvb2xlYW47XG4gIHVzZXJOb3RpZmljYXRpb25zRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSB1c2VyIGFjdGlvbiBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIGFjdGlvbmVlVXNlcklkPzogVVVJRDtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25JZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsPzogRW1haWw7XG4gIGVtYWlsZWRVc2VyPzogYm9vbGVhbjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRBY3Rpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZER1cmF0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRPcHRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFJlYXNvbj86IHN0cmluZztcbiAgbm90aWZ5VXNlcj86IGJvb2xlYW47XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcGhhc2U/OiBVc2VyQWN0aW9uUGhhc2U7XG4gIHJlYXNvbj86IHN0cmluZztcbiAgcmVhc29uQ29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGxvZyBmb3IgYW4gYWN0aW9uIHRoYXQgd2FzIHRha2VuIG9uIGEgVXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uTG9nIHtcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVXNlck9uRW5kPzogYm9vbGVhbjtcbiAgZW5kRXZlbnRTZW50PzogYm9vbGVhbjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBoaXN0b3J5PzogTG9nSGlzdG9yeTtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRPcHRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFJlYXNvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgbm90aWZ5VXNlck9uRW5kPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHJlYXNvbkNvZGU/OiBzdHJpbmc7XG4gIHVzZXJBY3Rpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIGNvbnRlbnQgdXNlciBhY3Rpb24gb3B0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uT3B0aW9uIHtcbiAgbG9jYWxpemVkTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwaGFzZXMgb2YgYSB0aW1lLWJhc2VkIHVzZXIgYWN0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBVc2VyQWN0aW9uUGhhc2Uge1xuICBzdGFydCA9IFwic3RhcnRcIixcbiAgbW9kaWZ5ID0gXCJtb2RpZnlcIixcbiAgY2FuY2VsID0gXCJjYW5jZWxcIixcbiAgZW5kID0gXCJlbmRcIlxufVxuXG4vKipcbiAqIE1vZGVscyBhY3Rpb24gcmVhc29ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uIHtcbiAgY29kZT86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkVGV4dHM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICB0ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIFJlYXNvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlYXNvblJlcXVlc3Qge1xuICB1c2VyQWN0aW9uUmVhc29uPzogVXNlckFjdGlvblJlYXNvbjtcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBSZWFzb24gQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2Uge1xuICB1c2VyQWN0aW9uUmVhc29uPzogVXNlckFjdGlvblJlYXNvbjtcbiAgdXNlckFjdGlvblJlYXNvbnM/OiBBcnJheTxVc2VyQWN0aW9uUmVhc29uPjtcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlcXVlc3Qge1xuICB1c2VyQWN0aW9uPzogVXNlckFjdGlvbjtcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZXNwb25zZSB7XG4gIHVzZXJBY3Rpb24/OiBVc2VyQWN0aW9uO1xuICB1c2VyQWN0aW9ucz86IEFycmF5PFVzZXJBY3Rpb24+O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBCdWxrIENyZWF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQnVsa0NyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcnM/OiBBcnJheTxVc2VyPjtcbn1cblxuLyoqXG4gKiBBIGxvZyBmb3IgYW4gZXZlbnQgdGhhdCBoYXBwZW5lZCB0byBhIFVzZXIuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnQge1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBjb21tZW50ZXJJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRSZXF1ZXN0IHtcbiAgdXNlckNvbW1lbnQ/OiBVc2VyQ29tbWVudDtcbn1cblxuLyoqXG4gKiBVc2VyIENvbW1lbnQgUmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRSZXNwb25zZSB7XG4gIHVzZXJDb21tZW50PzogVXNlckNvbW1lbnQ7XG4gIHVzZXJDb21tZW50cz86IEFycmF5PFVzZXJDb21tZW50Pjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50IHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG4gIGNvbnNlbnRJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBnaXZlclVzZXJJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHN0YXR1cz86IENvbnNlbnRTdGF0dXM7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZhbHVlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50UmVxdWVzdCB7XG4gIHVzZXJDb25zZW50PzogVXNlckNvbnNlbnQ7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50UmVzcG9uc2Uge1xuICB1c2VyQ29uc2VudD86IFVzZXJDb25zZW50O1xuICB1c2VyQ29uc2VudHM/OiBBcnJheTxVc2VyQ29uc2VudD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVzZXIuY3JlYXRlIGV2ZW50IGluIHRoYXQgaXQgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQuIFRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWFjdGl2YXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWFjdGl2YXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pIHRoYXQgaXMgdXNlZCBmb3IgYWxsIHVzZXIgbW9kaWZpY2F0aW9ucyAoY3JlYXRlLCB1cGRhdGUsXG4gKiBkZWxldGUpLlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIuZGVsZXRlIGJlY2F1c2UgaXQgaXMgc2VudCBhZnRlciB0aGUgdHggaXMgY29tbWl0dGVkLCB0aGlzIGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBFdmVudCAoYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gSlNPTikgdGhhdCBpcyB1c2VkIGZvciBhbGwgdXNlciBtb2RpZmljYXRpb25zIChjcmVhdGUsIHVwZGF0ZSxcbiAqIGRlbGV0ZSkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogVXNlciBBUEkgZGVsZXRlIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbiAgcXVlcnk/OiBzdHJpbmc7XG4gIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xuICB1c2VySWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogVXNlciBBUEkgYnVsayByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlUmVzcG9uc2Uge1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHVzZXJJZHM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIGRlbGV0ZSByZXF1ZXN0IG9iamVjdCBmb3IgYSBzaW5nbGUgdXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlU2luZ2xlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZXZlbnQgd2hlcmUgYSB1c2VyJ3MgZW1haWwgaXMgdXBkYXRlZCBvdXRzaWRlIG9mIGEgZm9yZ290IC8gY2hhbmdlIHBhc3N3b3JkIHdvcmtmbG93LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRW1haWxVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHByZXZpb3VzRW1haWw/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBFbWFpbCBWZXJpZnkgRXZlbnQuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRW1haWxWZXJpZmllZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIElkZW50aXR5IFByb3ZpZGVyIExpbmsgRXZlbnQuXG4gKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlQcm92aWRlckxpbmtFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBJZGVudGl0eSBQcm92aWRlciBVbmxpbmsgRXZlbnQuXG4gKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlQcm92aWRlclVubGlua0V2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJpbmZvUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgTG9naW4gRmFpbGVkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5GYWlsZWRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdGlvblR5cGU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGV2ZW50IHdoZXJlIGEgdXNlciBpcyBiZWluZyBjcmVhdGVkIHdpdGggYW4gXCJpbi11c2VcIiBsb2dpbiBJZCAoZW1haWwgb3IgdXNlcm5hbWUpLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5JZER1cGxpY2F0ZU9uQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBkdXBsaWNhdGVFbWFpbD86IHN0cmluZztcbiAgZHVwbGljYXRlVXNlcm5hbWU/OiBzdHJpbmc7XG4gIGV4aXN0aW5nPzogVXNlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGV2ZW50IHdoZXJlIGEgdXNlciBpcyBiZWluZyB1cGRhdGVkIGFuZCB0cmllcyB0byB1c2UgYW4gXCJpbi11c2VcIiBsb2dpbiBJZCAoZW1haWwgb3IgdXNlcm5hbWUpLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5JZER1cGxpY2F0ZU9uVXBkYXRlRXZlbnQgZXh0ZW5kcyBVc2VyTG9naW5JZER1cGxpY2F0ZU9uQ3JlYXRlRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBldmVudCBmb3IgYSBuZXcgZGV2aWNlICh1bi1yZWNvZ25pemVkKVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5OZXdEZXZpY2VFdmVudCBleHRlbmRzIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIFN1Y2Nlc3MgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdGlvblR5cGU/OiBzdHJpbmc7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgaWRlbnRpdHlQcm92aWRlck5hbWU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIGV2ZW50IHRoYXQgaXMgc3VzcGljaW91cy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luU3VzcGljaW91c0V2ZW50IGV4dGVuZHMgVXNlckxvZ2luU3VjY2Vzc0V2ZW50IHtcbiAgdGhyZWF0c0RldGVjdGVkPzogQXJyYXk8QXV0aGVudGljYXRpb25UaHJlYXRzPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VybmFtZU1vZGVyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIEJyZWFjaCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIE1hdHRoZXcgQWx0bWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkQnJlYWNoRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgUmVzZXQgU2VuZCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkUmVzZXRTZW5kRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgUmVzZXQgU3RhcnQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U3RhcnRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBSZXNldCBTdWNjZXNzIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRSZXNldFN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBVcGRhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFJlYWN0aXZhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlYWN0aXZhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIFVzZXIgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF1dGhlbnRpY2F0aW9uVG9rZW4/OiBzdHJpbmc7XG4gIGNsZWFuU3BlYWtJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RMb2dpbkluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBBcnJheTxzdHJpbmc+O1xuICByb2xlcz86IEFycmF5PHN0cmluZz47XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICB0b2tlbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgdXNlcm5hbWVTdGF0dXM/OiBDb250ZW50U3RhdHVzO1xuICB2ZXJpZmllZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB1c2VyLnJlZ2lzdHJhdGlvbi5jcmVhdGUgZXZlbnQgaW4gdGhhdCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIHVzZXIgaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZVxuICogdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZSBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRGVsZXRlZCBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdXNlci5yZWdpc3RyYXRpb24uZGVsZXRlIGluIHRoYXQgaXQgaXMgc2VudCBhZnRlciB0aGUgVFggaGFzIGJlZW4gY29tbWl0dGVkLiBUaGlzIGV2ZW50IGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRGVsZXRlIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhpcyBldmVudCBjb21wbGV0ZXMsIHRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIG9yaWdpbmFsPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFVwZGF0ZSBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBSZWdpc3RyYXRpb24gVmVyaWZpZWQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uVmVyaWZpZWRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZGlzYWJsZURvbWFpbkJsb2NrPzogYm9vbGVhbjtcbiAgc2VuZFNldFBhc3N3b3JkRW1haWw/OiBib29sZWFuO1xuICBza2lwVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogVXNlciBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZXNwb25zZSB7XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkcz86IFJlY29yZDxVVUlELCBzdHJpbmc+O1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgdXNlciBxdWVyeS4gSXQgcHJvdmlkZXMgYSBidWlsZCBwYXR0ZXJuIGFzIHdlbGwgYXMgcHVibGljIGZpZWxkcyBmb3IgdXNlIG9uIGZvcm1zIGFuZCBpbiBhY3Rpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VFbGFzdGljU2VhcmNoQ3JpdGVyaWEge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVXNlclN0YXRlIHtcbiAgQXV0aGVudGljYXRlZCA9IFwiQXV0aGVudGljYXRlZFwiLFxuICBBdXRoZW50aWNhdGVkTm90UmVnaXN0ZXJlZCA9IFwiQXV0aGVudGljYXRlZE5vdFJlZ2lzdGVyZWRcIixcbiAgQXV0aGVudGljYXRlZE5vdFZlcmlmaWVkID0gXCJBdXRoZW50aWNhdGVkTm90VmVyaWZpZWRcIixcbiAgQXV0aGVudGljYXRlZFJlZ2lzdHJhdGlvbk5vdFZlcmlmaWVkID0gXCJBdXRoZW50aWNhdGVkUmVnaXN0cmF0aW9uTm90VmVyaWZpZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yQ29uZmlndXJhdGlvbiB7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICByZWNvdmVyeUNvZGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUd29GYWN0b3JNZXRob2RBZGRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIG1ldGhvZD86IFR3b0ZhY3Rvck1ldGhvZDtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWwgYSB1c2VyIGV2ZW50IHdoZW4gYSB0d28tZmFjdG9yIG1ldGhvZCBoYXMgYmVlbiBhZGRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclR3b0ZhY3Rvck1ldGhvZFJlbW92ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgbWV0aG9kPzogVHdvRmFjdG9yTWV0aG9kO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIEV2ZW50IG9uY2UgaXQgaXMgY29tcGxldGVkLiBUaGlzIGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIG9yaWdpbmFsPzogVXNlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFVwZGF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBvcmlnaW5hbD86IFVzZXI7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gZXhwcmVzcyB3aGV0aGVyIHRoZSBSZWx5aW5nIFBhcnR5IHJlcXVpcmVzIDxhIGhyZWY9XCJodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jdXNlci12ZXJpZmljYXRpb25cIj51c2VyIHZlcmlmaWNhdGlvbjwvYT4gZm9yIHRoZVxuICogY3VycmVudCBvcGVyYXRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHtcbiAgcmVxdWlyZWQgPSBcInJlcXVpcmVkXCIsXG4gIHByZWZlcnJlZCA9IFwicHJlZmVycmVkXCIsXG4gIGRpc2NvdXJhZ2VkID0gXCJkaXNjb3VyYWdlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVzcG9uc2Uge1xuICBqd3Q/OiBKV1Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBWZXJpZmljYXRpb25TdHJhdGVneSB7XG4gIENsaWNrYWJsZUxpbmsgPSBcIkNsaWNrYWJsZUxpbmtcIixcbiAgRm9ybUZpZWxkID0gXCJGb3JtRmllbGRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlc3BvbnNlIHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2Uge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZXNwb25zZSB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBjb21wbGV0aW5nIFdlYkF1dGhuIGFzc2VydGlvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5Bc3NlcnRSZXNwb25zZSB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRobkNyZWRlbnRpYWw7XG59XG5cbi8qKlxuICogVGhlIDxpPmF1dGhlbnRpY2F0b3InczwvaT4gcmVzcG9uc2UgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBpbiBpdHMgZW5jb2RlZCBmb3JtYXRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQXV0aGVudGljYXRvckF1dGhlbnRpY2F0aW9uUmVzcG9uc2Uge1xuICBhdXRoZW50aWNhdG9yRGF0YT86IHN0cmluZztcbiAgY2xpZW50RGF0YUpTT04/OiBzdHJpbmc7XG4gIHNpZ25hdHVyZT86IHN0cmluZztcbiAgdXNlckhhbmRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgPGk+YXV0aGVudGljYXRvcidzPC9pPiByZXNwb25zZSBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBpbiBpdHMgZW5jb2RlZCBmb3JtYXRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQXV0aGVudGljYXRvclJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgYXR0ZXN0YXRpb25PYmplY3Q/OiBzdHJpbmc7XG4gIGNsaWVudERhdGFKU09OPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgVXNlcidzIFdlYkF1dGhuQ3JlZGVudGlhbC4gQ29udGFpbnMgYWxsIGRhdGEgcmVxdWlyZWQgdG8gY29tcGxldGUgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbmllcy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbCB7XG4gIGFsZ29yaXRobT86IENvc2VBbGdvcml0aG1JZGVudGlmaWVyO1xuICBhdHRlc3RhdGlvblR5cGU/OiBBdHRlc3RhdGlvblR5cGU7XG4gIGF1dGhlbnRpY2F0b3JTdXBwb3J0c1VzZXJWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICBjcmVkZW50aWFsSWQ/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkaXNjb3ZlcmFibGU/OiBib29sZWFuO1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXNlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcHVibGljS2V5Pzogc3RyaW5nO1xuICByZWx5aW5nUGFydHlJZD86IHN0cmluZztcbiAgc2lnbkNvdW50PzogbnVtYmVyO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIFdlYkF1dGhuIGNyZWRlbnRpYWwocylcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbEltcG9ydFJlcXVlc3Qge1xuICBjcmVkZW50aWFscz86IEFycmF5PFdlYkF1dGhuQ3JlZGVudGlhbD47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2ViQXV0aG4gQ3JlZGVudGlhbCBBUEkgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlIHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuQ3JlZGVudGlhbDtcbiAgY3JlZGVudGlhbHM/OiBBcnJheTxXZWJBdXRobkNyZWRlbnRpYWw+O1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGV4dGVuc2lvbiBvdXRwdXQgZm9yIHJlcXVlc3RlZCBleHRlbnNpb25zIGR1cmluZyBhIFdlYkF1dGhuIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIHtcbiAgY3JlZFByb3BzPzogQ3JlZGVudGlhbFByb3BlcnRpZXNPdXRwdXQ7XG59XG5cbi8qKlxuICogUmVxdWVzdCB0byBjb21wbGV0ZSB0aGUgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBjcmVkZW50aWFsPzogV2ViQXV0aG5QdWJsaWNLZXlBdXRoZW50aWNhdGlvblJlcXVlc3Q7XG4gIG9yaWdpbj86IHN0cmluZztcbiAgcnBJZD86IHN0cmluZztcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHRvIGF1dGhlbnRpY2F0ZSB3aXRoIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblB1YmxpY0tleUF1dGhlbnRpY2F0aW9uUmVxdWVzdCB7XG4gIGNsaWVudEV4dGVuc2lvblJlc3VsdHM/OiBXZWJBdXRobkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzO1xuICBpZD86IHN0cmluZztcbiAgcmVzcG9uc2U/OiBXZWJBdXRobkF1dGhlbnRpY2F0b3JBdXRoZW50aWNhdGlvblJlc3BvbnNlO1xuICBycElkPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gcmVnaXN0ZXIgYSBuZXcgcHVibGljIGtleSB3aXRoIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblB1YmxpY0tleVJlZ2lzdHJhdGlvblJlcXVlc3Qge1xuICBjbGllbnRFeHRlbnNpb25SZXN1bHRzPzogV2ViQXV0aG5FeHRlbnNpb25zQ2xpZW50T3V0cHV0cztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlc3BvbnNlPzogV2ViQXV0aG5BdXRoZW50aWNhdG9yUmVnaXN0cmF0aW9uUmVzcG9uc2U7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gY29tcGxldGUgdGhlIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBmb3IgYSBuZXcgY3JlZGVudGlhbCwuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXF1ZXN0IHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuUHVibGljS2V5UmVnaXN0cmF0aW9uUmVxdWVzdDtcbiAgb3JpZ2luPzogc3RyaW5nO1xuICBycElkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgY29tcGxldGluZyBXZWJBdXRobiBjcmVkZW50aWFsIHJlZ2lzdHJhdGlvbiBvciBhc3NlcnRpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlIHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuQ3JlZGVudGlhbDtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCB0byBzdGFydCBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVxdWVzdCB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHdvcmtmbG93PzogV2ViQXV0aG5Xb3JrZmxvdztcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHN0YXJ0aW5nIGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXNwb25zZSB7XG4gIG9wdGlvbnM/OiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gcmVxdWVzdCBleHRlbnNpb25zIGR1cmluZyBjcmVkZW50aWFsIHJlZ2lzdHJhdGlvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RyYXRpb25FeHRlbnNpb25PcHRpb25zIHtcbiAgY3JlZFByb3BzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCB0byBzdGFydCBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblN0YXJ0UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjcmVkZW50aWFsSWQ/OiBVVUlEO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHdvcmtmbG93PzogV2ViQXV0aG5Xb3JrZmxvdztcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHN0YXJ0aW5nIGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuU3RhcnRSZXNwb25zZSB7XG4gIG9wdGlvbnM/OiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB0aGUgV2ViQXV0aG4gd29ya2Zsb3cuIFRoaXMgd2lsbCBhZmZlY3QgdGhlIHBhcmFtZXRlcnMgdXNlZCBmb3IgY3JlZGVudGlhbCBjcmVhdGlvblxuICogYW5kIHJlcXVlc3QgYmFzZWQgb24gdGhlIFRlbmFudCBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFdlYkF1dGhuV29ya2Zsb3cge1xuICBib290c3RyYXAgPSBcImJvb3RzdHJhcFwiLFxuICBnZW5lcmFsID0gXCJnZW5lcmFsXCIsXG4gIHJlYXV0aGVudGljYXRpb24gPSBcInJlYXV0aGVudGljYXRpb25cIlxufVxuXG4vKipcbiAqIEEgc2VydmVyIHdoZXJlIGV2ZW50cyBhcmUgc2VudC4gVGhpcyBpbmNsdWRlcyB1c2VyIGFjdGlvbiBldmVudHMgYW5kIGFueSBvdGhlciBldmVudHMgc2VudCBieSBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2sge1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudHNFbmFibGVkPzogUmVjb3JkPEV2ZW50VHlwZSwgYm9vbGVhbj47XG4gIGdsb2JhbD86IGJvb2xlYW47XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIHRlbmFudElkcz86IEFycmF5PFVVSUQ+O1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2ViaG9vayBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1JlcXVlc3Qge1xuICB3ZWJob29rPzogV2ViaG9vaztcbn1cblxuLyoqXG4gKiBXZWJob29rIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1Jlc3BvbnNlIHtcbiAgd2ViaG9vaz86IFdlYmhvb2s7XG4gIHdlYmhvb2tzPzogQXJyYXk8V2ViaG9vaz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWGJveEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBYYm94IGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBYYm94SWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFhib3hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gWE1MU2lnbmF0dXJlTG9jYXRpb24ge1xuICBBc3NlcnRpb24gPSBcIkFzc2VydGlvblwiLFxuICBSZXNwb25zZSA9IFwiUmVzcG9uc2VcIlxufVxuXG4iXX0=
6046
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJpbmRleC50cyIsIm5vZGVfbW9kdWxlcy9ub2RlLWZldGNoL2Jyb3dzZXIuanMiLCJzcmMvQ2xpZW50UmVzcG9uc2UudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnQudHMiLCJzcmMvRGVmYXVsdFJFU1RDbGllbnRCdWlsZGVyLnRzIiwic3JjL0Z1c2lvbkF1dGhDbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FDQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7Ozs7O0FBRUgsMkRBQXFEO0FBQ3JELGtCQUFlLDBCQUFnQixDQUFDO0FBRWhDLDRDQUF1QztBQUV2QyxvREFBK0M7QUFDL0MsMENBQXFDOzs7O0FDdEJyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUN4QkE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7O0FBRUg7SUFBQTtJQVFBLENBQUM7SUFIQyxzQ0FBYSxHQUFiO1FBQ0UsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztJQUN6RCxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQVJBLEFBUUMsSUFBQTs7Ozs7O0FDeEJEOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILG1EQUE4QztBQUM5Qyx5Q0FBeUU7QUFDekUsMkJBQW9DO0FBRXBDOzs7O0dBSUc7QUFDSDtJQVVFLDJCQUFtQixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQVJ4QixZQUFPLEdBQTJCLEVBQUUsQ0FBQztRQUVyQyxlQUFVLEdBQTJCLEVBQUUsQ0FBQztRQUd4QyxvQkFBZSxHQUF3Qixp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LEVBTFcsZUFBZSxHQUFmLHVCQUFlLEtBQWYsdUJBQWUsUUFLMUI7QUE2Z0JEOztHQUVHO0FBQ0gsSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25CLDRDQUErQixDQUFBO0lBQy9CLHNFQUF5RCxDQUFBO0lBQ3pELGtFQUFxRCxDQUFBO0lBQ3JELDBGQUE2RSxDQUFBO0FBQy9FLENBQUMsRUFMVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQUtwQjtBQWtERDs7Ozs7R0FLRztBQUNILElBQVksMkJBSVg7QUFKRCxXQUFZLDJCQUEyQjtJQUNyQyxvREFBcUIsQ0FBQTtJQUNyQixzREFBdUIsQ0FBQTtJQUN2QiwwREFBMkIsQ0FBQTtBQUM3QixDQUFDLEVBSlcsMkJBQTJCLEdBQTNCLG1DQUEyQixLQUEzQixtQ0FBMkIsUUFJdEM7QUFTRDs7R0FFRztBQUNILElBQVksb0JBR1g7QUFIRCxXQUFZLG9CQUFvQjtJQUM5Qix1REFBK0IsQ0FBQTtJQUMvQiwrQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFHL0I7QUFrUEQ7Ozs7O0dBS0c7QUFDSCxJQUFZLGdCQUlYO0FBSkQsV0FBWSxnQkFBZ0I7SUFDMUIsMkNBQXVCLENBQUE7SUFDdkIsdUNBQW1CLENBQUE7SUFDbkIseURBQXFDLENBQUE7QUFDdkMsQ0FBQyxFQUpXLGdCQUFnQixHQUFoQix3QkFBZ0IsS0FBaEIsd0JBQWdCLFFBSTNCO0FBa0VELElBQVksb0JBR1g7QUFIRCxXQUFZLG9CQUFvQjtJQUM5QiwrQ0FBdUIsQ0FBQTtJQUN2Qiw2Q0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFHL0IiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgRnVzaW9uQXV0aENsaWVudCBmcm9tICcuL3NyYy9GdXNpb25BdXRoQ2xpZW50J1xuZXhwb3J0IGRlZmF1bHQgRnVzaW9uQXV0aENsaWVudDtcblxuZXhwb3J0ICogZnJvbSAnLi9zcmMvRnVzaW9uQXV0aENsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9JUkVTVENsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3NyYy9EZWZhdWx0UkVTVENsaWVudEJ1aWxkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvQ2xpZW50UmVzcG9uc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvSVJFU1RDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zcmMvSVJFU1RDbGllbnRCdWlsZGVyJztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyIGdldEdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcblx0Ly8gdGhlIG9ubHkgcmVsaWFibGUgbWVhbnMgdG8gZ2V0IHRoZSBnbG9iYWwgb2JqZWN0IGlzXG5cdC8vIGBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpYFxuXHQvLyBIb3dldmVyLCB0aGlzIGNhdXNlcyBDU1AgdmlvbGF0aW9ucyBpbiBDaHJvbWUgYXBwcy5cblx0aWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuXHRpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIGdsb2JhbDsgfVxuXHR0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSB0byBsb2NhdGUgZ2xvYmFsIG9iamVjdCcpO1xufVxuXG52YXIgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGdsb2JhbC5mZXRjaDtcblxuLy8gTmVlZGVkIGZvciBUeXBlU2NyaXB0IGFuZCBXZWJwYWNrLlxuaWYgKGdsb2JhbC5mZXRjaCkge1xuXHRleHBvcnRzLmRlZmF1bHQgPSBnbG9iYWwuZmV0Y2guYmluZChnbG9iYWwpO1xufVxuXG5leHBvcnRzLkhlYWRlcnMgPSBnbG9iYWwuSGVhZGVycztcbmV4cG9ydHMuUmVxdWVzdCA9IGdsb2JhbC5SZXF1ZXN0O1xuZXhwb3J0cy5SZXNwb25zZSA9IGdsb2JhbC5SZXNwb25zZTsiLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LCBGdXNpb25BdXRoLCBBbGwgUmlnaHRzIFJlc2VydmVkXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLFxuICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW5cbiAqIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4gKiBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpY1xuICogbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnRSZXNwb25zZTxUPiB7XG4gIHB1YmxpYyBzdGF0dXNDb2RlOiBudW1iZXI7XG4gIHB1YmxpYyByZXNwb25zZTogVDtcbiAgcHVibGljIGV4Y2VwdGlvbjogRXJyb3I7XG5cbiAgd2FzU3VjY2Vzc2Z1bCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXNDb2RlID49IDIwMCAmJiB0aGlzLnN0YXR1c0NvZGUgPCAzMDA7XG4gIH1cbn0iLCIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LTIwMjAsIEZ1c2lvbkF1dGgsIEFsbCBSaWdodHMgUmVzZXJ2ZWRcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCBJUkVTVENsaWVudCwge0Vycm9yUmVzcG9uc2VIYW5kbGVyLCBSZXNwb25zZUhhbmRsZXJ9IGZyb20gXCIuL0lSRVNUQ2xpZW50XCI7XG5pbXBvcnQgQ2xpZW50UmVzcG9uc2UgZnJvbSBcIi4vQ2xpZW50UmVzcG9uc2VcIjtcbmltcG9ydCBmZXRjaCwge0JvZHlJbml0LCBSZXF1ZXN0Q3JlZGVudGlhbHMsIFJlc3BvbnNlfSBmcm9tICdub2RlLWZldGNoJztcbmltcG9ydCB7VVJMU2VhcmNoUGFyYW1zfSBmcm9tIFwidXJsXCI7XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQXG4gKiBAYXV0aG9yIFR5bGVyIFNjb3R0XG4gKiBAYXV0aG9yIFRKIFBlZGVuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IGltcGxlbWVudHMgSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICBwdWJsaWMgYm9keTogQm9keUluaXQ7XG4gIHB1YmxpYyBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIHB1YmxpYyBtZXRob2Q6IHN0cmluZztcbiAgcHVibGljIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHVibGljIHVyaTogc3RyaW5nO1xuICBwdWJsaWMgY3JlZGVudGlhbHM6IFJlcXVlc3RDcmVkZW50aWFscztcbiAgcHVibGljIHJlc3BvbnNlSGFuZGxlcjogUmVzcG9uc2VIYW5kbGVyPFJUPiA9IERlZmF1bHRSRVNUQ2xpZW50LkpTT05SZXNwb25zZUhhbmRsZXI7XG4gIHB1YmxpYyBlcnJvclJlc3BvbnNlSGFuZGxlcjogRXJyb3JSZXNwb25zZUhhbmRsZXI8RVJUPiA9IERlZmF1bHRSRVNUQ2xpZW50LkVycm9ySlNPTlJlc3BvbnNlSGFuZGxlcjtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgaG9zdDogc3RyaW5nKSB7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXIgdXNpbmcgYSBrZXlcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgdmFsdWUgb2YgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcmV0dXJucyB7RGVmYXVsdFJFU1RDbGllbnR9XG4gICAqL1xuICB3aXRoQXV0aG9yaXphdGlvbihrZXk6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICBpZiAoa2V5ID09PSBudWxsIHx8IHR5cGVvZiBrZXkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLndpdGhIZWFkZXIoJ0F1dGhvcml6YXRpb24nLCBrZXkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzZWdtZW50IHRvIHRoZSByZXF1ZXN0IHVyaVxuICAgKi9cbiAgd2l0aFVyaVNlZ21lbnQoc2VnbWVudDogc3RyaW5nIHwgbnVtYmVyKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGlmIChzZWdtZW50ID09PSBudWxsIHx8IHNlZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGlmICh0aGlzLnVyaSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy51cmkgPSAnJztcbiAgICB9XG4gICAgaWYgKHRoaXMudXJpLmNoYXJBdCh0aGlzLnVyaS5sZW5ndGggLSAxKSAhPT0gJy8nKSB7XG4gICAgICB0aGlzLnVyaSArPSAnLyc7XG4gICAgfVxuICAgIHRoaXMudXJpID0gdGhpcy51cmkgKyBzZWdtZW50O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZnVsbCB1cmwgKyBwYXJhbWV0ZXIgbGlzdFxuICAgKi9cbiAgZ2V0RnVsbFVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0ICsgdGhpcy51cmkgKyB0aGlzLmdldFF1ZXJ5U3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYm9keSBvZiB0aGUgY2xpZW50IHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBib2R5IFRoZSBvYmplY3QgdG8gYmUgd3JpdHRlbiB0byB0aGUgcmVxdWVzdCBib2R5IGFzIGZvcm0gZGF0YS5cbiAgICovXG4gIHdpdGhGb3JtRGF0YShib2R5OiBVUkxTZWFyY2hQYXJhbXMpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgY29uc3QgYm9keTIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIGJvZHkuZm9yRWFjaCgodmFsdWUsIG5hbWUsIHNlYXJjaFBhcmFtcykgPT4ge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZSAhPSBcIm51bGxcIiAmJiB2YWx1ZSAhPSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgYm9keTIuc2V0KG5hbWUsdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGJvZHkgPSBib2R5MjtcbiAgICB9XG4gICAgdGhpcy5ib2R5ID0gYm9keTtcbiAgICB0aGlzLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgaGVhZGVyIHRvIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IFRoZSBuYW1lIG9mIHRoZSBoZWFkZXIuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGhlYWRlci5cbiAgICovXG4gIHdpdGhIZWFkZXIoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5oZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBib2R5IG9mIHRoZSBjbGllbnQgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIGJvZHkgVGhlIG9iamVjdCB0byBiZSB3cml0dGVuIHRvIHRoZSByZXF1ZXN0IGJvZHkgYXMgSlNPTi5cbiAgICovXG4gIHdpdGhKU09OQm9keShib2R5OiBvYmplY3QpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gICAgdGhpcy53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuICAgIC8vIE9taXQgdGhlIENvbnRlbnQtTGVuZ3RoLCB0aGlzIGlzIHNldCBhdXRvLW1hZ2ljYWxseSBieSB0aGUgcmVxdWVzdCBsaWJyYXJ5XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaHR0cCBtZXRob2QgZm9yIHRoZSByZXF1ZXN0XG4gICAqL1xuICB3aXRoTWV0aG9kKG1ldGhvZDogc3RyaW5nKTogRGVmYXVsdFJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHVyaSBvZiB0aGUgcmVxdWVzdFxuICAgKi9cbiAgd2l0aFVyaSh1cmk6IHN0cmluZyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLnVyaSA9IHVyaTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHBhcmFtZXRlcnMgdG8gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciwgbWF5IGJlIGEgc3RyaW5nLCBvYmplY3Qgb3IgbnVtYmVyLlxuICAgKi9cbiAgd2l0aFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5wYXJhbWV0ZXJzW25hbWVdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyByZXF1ZXN0J3MgY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBBIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgY3JlZGVudGlhbHMgd2lsbCBiZSBzZW50IHdpdGggdGhlIHJlcXVlc3QgYWx3YXlzLCBuZXZlciwgb3Igb25seSB3aGVuIHNlbnQgdG8gYSBzYW1lLW9yaWdpbiBVUkwuXG4gICAqL1xuICB3aXRoQ3JlZGVudGlhbHModmFsdWU6IFJlcXVlc3RDcmVkZW50aWFscyk6IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoUmVzcG9uc2VIYW5kbGVyKGhhbmRsZXI6IFJlc3BvbnNlSGFuZGxlcjxSVD4pOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5yZXNwb25zZUhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aEVycm9yUmVzcG9uc2VIYW5kbGVyKGhhbmRsZXI6IEVycm9yUmVzcG9uc2VIYW5kbGVyPEVSVD4pOiBEZWZhdWx0UkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgdGhpcy5lcnJvclJlc3BvbnNlSGFuZGxlciA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUnVuIHRoZSByZXF1ZXN0IGFuZCByZXR1cm4gYSBwcm9taXNlLiBUaGlzIHByb21pc2Ugd2lsbCByZXNvbHZlIGlmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWxcbiAgICogYW5kIHJlamVjdCBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnbygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJUPj4ge1xuICAgIGNvbnN0IGNsaWVudFJlc3BvbnNlID0gbmV3IENsaWVudFJlc3BvbnNlPFJUPigpO1xuXG4gICAgbGV0IHJlc3BvbnNlOiBSZXNwb25zZTtcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcbiAgICAgICAgICB0aGlzLmdldEZ1bGxVcmwoKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgYm9keTogdGhpcy5ib2R5IGFzIEJvZHlJbml0LFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSAoQ3JlZGVudGlhbHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gTm9kZUpTKVxuICAgICAgICAgICAgY3JlZGVudGlhbHM6IHRoaXMuY3JlZGVudGlhbHMsXG4gICAgICAgICAgfSxcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXNwb25zZUhhbmRsZXIocmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgYXdhaXQgdGhpcy5lcnJvclJlc3BvbnNlSGFuZGxlcihyZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIENsaWVudFJlc3BvbnNlKSB7XG4gICAgICAgIHRocm93IGVycm9yOyAvLyBEb24ndCBjYXRjaCBhIENsaWVudFJlc3BvbnNlICh3ZSB3YW50IHRoaXMgdG8gdHJpZ2dlciB0aGUgY2F0Y2ggb2YgdGhlIHByb21pc2VcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlKSB7IC8vIFRyeSB0byByZWNvdmVyIHRoZSByZXNwb25zZSBzdGF0dXNcbiAgICAgICAgY2xpZW50UmVzcG9uc2Uuc3RhdHVzQ29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgIH1cbiAgICAgIGNsaWVudFJlc3BvbnNlLmV4Y2VwdGlvbiA9IGVycm9yO1xuXG4gICAgICB0aHJvdyBjbGllbnRSZXNwb25zZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5U3RyaW5nKCkge1xuICAgIHZhciBxdWVyeVN0cmluZyA9ICcnO1xuICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnBhcmFtZXRlcnMpIHtcbiAgICAgIHF1ZXJ5U3RyaW5nICs9IChxdWVyeVN0cmluZy5sZW5ndGggPT09IDApID8gJz8nIDogJyYnO1xuICAgICAgcXVlcnlTdHJpbmcgKz0ga2V5ICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMucGFyYW1ldGVyc1trZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBKU09OIGZvcm0gb2YgdGhlIHJlc3BvbnNlIHRleHQuXG4gICAqXG4gICAqIEBwYXJhbSByZXNwb25zZVxuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIHN0YXRpYyBhc3luYyBKU09OUmVzcG9uc2VIYW5kbGVyPFJUPihyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJUPj4ge1xuICAgIGxldCBjbGllbnRSZXNwb25zZSA9IG5ldyBDbGllbnRSZXNwb25zZTxSVD4oKTtcblxuICAgIGNsaWVudFJlc3BvbnNlLnN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgbGV0IHR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgICBpZiAodHlwZSAmJiB0eXBlLnN0YXJ0c1dpdGgoXCJhcHBsaWNhdGlvbi9qc29uXCIpKSB7XG4gICAgICBjbGllbnRSZXNwb25zZS5yZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2xpZW50UmVzcG9uc2U7XG4gIH1cblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIEpTT04gZm9ybSBvZiB0aGUgcmVzcG9uc2UgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIEVycm9ySlNPTlJlc3BvbnNlSGFuZGxlcjxFUlQ+KHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RVJUPj4ge1xuICAgIGxldCBjbGllbnRSZXNwb25zZSA9IG5ldyBDbGllbnRSZXNwb25zZTxFUlQ+KCk7XG5cbiAgICBjbGllbnRSZXNwb25zZS5zdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIGxldCB0eXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gICAgaWYgKHR5cGUgJiYgdHlwZS5zdGFydHNXaXRoKFwiYXBwbGljYXRpb24vanNvblwiKSkge1xuICAgICAgY2xpZW50UmVzcG9uc2UuZXhjZXB0aW9uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnRSZXNwb25zZTtcbiAgfVxufVxuIiwiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSwgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IElSRVNUQ2xpZW50IGZyb20gXCIuL0lSRVNUQ2xpZW50XCI7XG5pbXBvcnQgRGVmYXVsdFJFU1RDbGllbnQgZnJvbSBcIi4vRGVmYXVsdFJFU1RDbGllbnRcIjtcbmltcG9ydCBJUkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vSVJFU1RDbGllbnRCdWlsZGVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlZmF1bHRSRVNUQ2xpZW50QnVpbGRlciBpbXBsZW1lbnRzIElSRVNUQ2xpZW50QnVpbGRlciB7XG4gIGJ1aWxkPFJULCBFUlQ+KGhvc3Q6IHN0cmluZyk6IElSRVNUQ2xpZW50PFJULCBFUlQ+IHtcbiAgICByZXR1cm4gbmV3IERlZmF1bHRSRVNUQ2xpZW50PFJULCBFUlQ+KGhvc3QpO1xuICB9XG59XG4iLCIvKlxuKiBDb3B5cmlnaHQgKGMpIDIwMTktMjAyMywgRnVzaW9uQXV0aCwgQWxsIFJpZ2h0cyBSZXNlcnZlZFxuKlxuKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4qIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuKlxuKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuKlxuKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4qIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4qIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsXG4qIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4qIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQgSVJFU1RDbGllbnQgZnJvbSBcIi4vSVJFU1RDbGllbnRcIlxuaW1wb3J0IERlZmF1bHRSRVNUQ2xpZW50QnVpbGRlciBmcm9tIFwiLi9EZWZhdWx0UkVTVENsaWVudEJ1aWxkZXJcIjtcbmltcG9ydCBJUkVTVENsaWVudEJ1aWxkZXIgZnJvbSBcIi4vSVJFU1RDbGllbnRCdWlsZGVyXCI7XG5pbXBvcnQgQ2xpZW50UmVzcG9uc2UgZnJvbSBcIi4vQ2xpZW50UmVzcG9uc2VcIjtcbmltcG9ydCB7UmVxdWVzdENyZWRlbnRpYWxzfSBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0IHtVUkxTZWFyY2hQYXJhbXN9IGZyb20gXCJ1cmxcIjtcblxuZXhwb3J0IGNsYXNzIEZ1c2lvbkF1dGhDbGllbnQge1xuICBwdWJsaWMgY2xpZW50QnVpbGRlcjogSVJFU1RDbGllbnRCdWlsZGVyID0gbmV3IERlZmF1bHRSRVNUQ2xpZW50QnVpbGRlcigpO1xuICBwdWJsaWMgY3JlZGVudGlhbHM6IFJlcXVlc3RDcmVkZW50aWFscztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYXBpS2V5OiBzdHJpbmcsXG4gICAgcHVibGljIGhvc3Q6IHN0cmluZyxcbiAgICBwdWJsaWMgdGVuYW50SWQ/OiBzdHJpbmcsXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRlbmFudCBpZCwgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBYLUZ1c2lvbkF1dGgtVGVuYW50SWQgaGVhZGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGx9IHRlbmFudElkIFRoZSB2YWx1ZSBvZiB0aGUgWC1GdXNpb25BdXRoLVRlbmFudElkIGhlYWRlci5cbiAgICogQHJldHVybnMge0Z1c2lvbkF1dGhDbGllbnR9XG4gICAqL1xuICBzZXRUZW5hbnRJZCh0ZW5hbnRJZDogc3RyaW5nIHwgbnVsbCk6IEZ1c2lvbkF1dGhDbGllbnQge1xuICAgIHRoaXMudGVuYW50SWQgPSB0ZW5hbnRJZDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHdoZXRoZXIgYW5kIGhvdyBjb29raWVzIHdpbGwgYmUgc2VudCB3aXRoIGVhY2ggcmVxdWVzdC5cbiAgICogXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciBhbmQgaG93IGNvb2tpZXMgd2lsbCBiZSBzZW50LlxuICAgKiBAcmV0dXJucyB7RnVzaW9uQXV0aENsaWVudH1cbiAgICovXG4gIHNldFJlcXVlc3RDcmVkZW50aWFscyh2YWx1ZTogUmVxdWVzdENyZWRlbnRpYWxzKTogRnVzaW9uQXV0aENsaWVudCB7XG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRha2VzIGFuIGFjdGlvbiBvbiBhIHVzZXIuIFRoZSB1c2VyIGJlaW5nIGFjdGlvbmVkIGlzIGNhbGxlZCB0aGUgXCJhY3Rpb25lZVwiIGFuZCB0aGUgdXNlciB0YWtpbmcgdGhlIGFjdGlvbiBpcyBjYWxsZWQgdGhlXG4gICAqIFwiYWN0aW9uZXJcIi4gQm90aCB1c2VyIGlkcyBhcmUgcmVxdWlyZWQgaW4gdGhlIHJlcXVlc3Qgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge0FjdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIGFjdGlvbiByZXF1ZXN0IHRoYXQgaW5jbHVkZXMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYWN0aW9uIGJlaW5nIHRha2VuIGluY2x1ZGluZ1xuICAgKiAgICB0aGUgaWQgb2YgdGhlIGFjdGlvbiwgYW55IG9wdGlvbnMgYW5kIHRoZSBkdXJhdGlvbiAoaWYgYXBwbGljYWJsZSkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBhY3Rpb25Vc2VyKHJlcXVlc3Q6IEFjdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgdGhlIEZ1c2lvbkF1dGggUmVhY3RvciB1c2luZyBhIGxpY2Vuc2UgaWQgYW5kIG9wdGlvbmFsbHkgYSBsaWNlbnNlIHRleHQgKGZvciBhaXItZ2FwcGVkIGRlcGxveW1lbnRzKVxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0b3JSZXF1ZXN0fSByZXF1ZXN0IEFuIG9wdGlvbmFsIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgbGljZW5zZSB0ZXh0IHRvIGFjdGl2YXRlIFJlYWN0b3IgKHVzZWZ1bCBmb3IgYWlyLWdhcCBkZXBsb3ltZW50cyBvZiBGdXNpb25BdXRoKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgYWN0aXZhdGVSZWFjdG9yKHJlcXVlc3Q6IFJlYWN0b3JSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHVzZXIgdG8gYW4gZXhpc3RpbmcgZmFtaWx5LiBUaGUgZmFtaWx5IGlkIG11c3QgYmUgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIFRoZSBpZCBvZiB0aGUgZmFtaWx5LlxuICAgKiBAcGFyYW0ge0ZhbWlseVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRldGVybWluZSB3aGljaCB1c2VyIHRvIGFkZCB0byB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgYWRkVXNlclRvRmFtaWx5KGZhbWlseUlkOiBVVUlELCByZXF1ZXN0OiBGYW1pbHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZhbWlseUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIHVzZXIgYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjdGlvbklkIFRoZSBhY3Rpb24gaWQgb2YgdGhlIGFjdGlvbiB0byBjYW5jZWwuXG4gICAqIEBwYXJhbSB7QWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgYWN0aW9uIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhbmNlbGxhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNhbmNlbEFjdGlvbihhY3Rpb25JZDogVVVJRCwgcmVxdWVzdDogQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIGEgdXNlcidzIHBhc3N3b3JkIHVzaW5nIHRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQuIFRoaXMgdXN1YWxseSBvY2N1cnMgYWZ0ZXIgYW4gZW1haWwgaGFzIGJlZW4gc2VudCB0byB0aGUgdXNlclxuICAgKiBhbmQgdGhleSBjbGlja2VkIG9uIGEgbGluayB0byByZXNldCB0aGVpciBwYXNzd29yZC5cbiAgICogXG4gICAqIEFzIG9mIHZlcnNpb24gMS4zMi4yLCBwcmVmZXIgc2VuZGluZyB0aGUgY2hhbmdlUGFzc3dvcmRJZCBpbiB0aGUgcmVxdWVzdCBib2R5LiBUbyBkbyB0aGlzLCBvbWl0IHRoZSBmaXJzdCBwYXJhbWV0ZXIsIGFuZCBzZXRcbiAgICogdGhlIHZhbHVlIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFuZ2VQYXNzd29yZElkIFRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQgdXNlZCB0byBmaW5kIHRoZSB1c2VyLiBUaGlzIHZhbHVlIGlzIGdlbmVyYXRlZCBieSBGdXNpb25BdXRoIG9uY2UgdGhlIGNoYW5nZSBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQuXG4gICAqIEBwYXJhbSB7Q2hhbmdlUGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlPj59XG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZChjaGFuZ2VQYXNzd29yZElkOiBzdHJpbmcsIHJlcXVlc3Q6IENoYW5nZVBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q2hhbmdlUGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxDaGFuZ2VQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hhbmdlcyBhIHVzZXIncyBwYXNzd29yZCB1c2luZyB0aGVpciBpZGVudGl0eSAobG9naW4gaWQgYW5kIHBhc3N3b3JkKS4gVXNpbmcgYSBsb2dpbklkIGluc3RlYWQgb2YgdGhlIGNoYW5nZVBhc3N3b3JkSWRcbiAgICogYnlwYXNzZXMgdGhlIGVtYWlsIHZlcmlmaWNhdGlvbiBhbmQgYWxsb3dzIGEgcGFzc3dvcmQgdG8gYmUgY2hhbmdlZCBkaXJlY3RseSB3aXRob3V0IGZpcnN0IGNhbGxpbmcgdGhlICNmb3Jnb3RQYXNzd29yZFxuICAgKiBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7Q2hhbmdlUGFzc3dvcmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjaGFuZ2UgdGhlIHBhc3N3b3JkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGFuZ2VQYXNzd29yZEJ5SWRlbnRpdHkocmVxdWVzdDogQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgdXNlciBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBUb2tlbiBieSBjb21wbGV0aW5nIGEgVHdvLUZhY3RvciBTdGVwLVVwIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBcbiAgICogQW4gSFRUUCBzdGF0dXMgY29kZSBvZiA0MDAgd2l0aCBhIGdlbmVyYWwgZXJyb3IgY29kZSBvZiBbVHJ1c3RUb2tlblJlcXVpcmVkXSBpbmRpY2F0ZXMgdGhhdCBhIFRydXN0IFRva2VuIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBQT1NUIHJlcXVlc3QgdG8gdGhpcyBBUEkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaGFuZ2VQYXNzd29yZElkIFRoZSBjaGFuZ2UgcGFzc3dvcmQgSWQgdXNlZCB0byBmaW5kIHRoZSB1c2VyLiBUaGlzIHZhbHVlIGlzIGdlbmVyYXRlZCBieSBGdXNpb25BdXRoIG9uY2UgdGhlIGNoYW5nZSBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGNoZWNrQ2hhbmdlUGFzc3dvcmRVc2luZ0lkKGNoYW5nZVBhc3N3b3JkSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIHRoZSB1c2VyIG11c3Qgb2J0YWluIGEgVHJ1c3QgVG9rZW4gSWQgaW4gb3JkZXIgdG8gY29tcGxldGUgYSBjaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdC5cbiAgICogV2hlbiBhIHVzZXIgaGFzIGVuYWJsZWQgVHdvLUZhY3RvciBhdXRoZW50aWNhdGlvbiwgYmVmb3JlIHlvdSBhcmUgYWxsb3dlZCB0byB1c2UgdGhlIENoYW5nZSBQYXNzd29yZCBBUEkgdG8gY2hhbmdlXG4gICAqIHlvdXIgcGFzc3dvcmQsIHlvdSBtdXN0IG9idGFpbiBhIFRydXN0IFRva2VuIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMCB3aXRoIGEgZ2VuZXJhbCBlcnJvciBjb2RlIG9mIFtUcnVzdFRva2VuUmVxdWlyZWRdIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kZWRKV1QgVGhlIGVuY29kZWQgSldUIChhY2Nlc3MgdG9rZW4pLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NoYW5nZS1wYXNzd29yZCcpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHVzZXIgbXVzdCBvYnRhaW4gYSBUcnVzdCBSZXF1ZXN0IElkIGluIG9yZGVyIHRvIGNvbXBsZXRlIGEgY2hhbmdlIHBhc3N3b3JkIHJlcXVlc3QuXG4gICAqIFdoZW4gYSB1c2VyIGhhcyBlbmFibGVkIFR3by1GYWN0b3IgYXV0aGVudGljYXRpb24sIGJlZm9yZSB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBDaGFuZ2UgUGFzc3dvcmQgQVBJIHRvIGNoYW5nZVxuICAgKiB5b3VyIHBhc3N3b3JkLCB5b3UgbXVzdCBvYnRhaW4gYSBUcnVzdCBSZXF1ZXN0IElkIGJ5IGNvbXBsZXRpbmcgYSBUd28tRmFjdG9yIFN0ZXAtVXAgYXV0aGVudGljYXRpb24uXG4gICAqIFxuICAgKiBBbiBIVFRQIHN0YXR1cyBjb2RlIG9mIDQwMCB3aXRoIGEgZ2VuZXJhbCBlcnJvciBjb2RlIG9mIFtUcnVzdFRva2VuUmVxdWlyZWRdIGluZGljYXRlcyB0aGF0IGEgVHJ1c3QgVG9rZW4gaXMgcmVxdWlyZWQgdG8gbWFrZSBhIFBPU1QgcmVxdWVzdCB0byB0aGlzIEFQSS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvZ2luSWQgVGhlIGxvZ2luSWQgb2YgdGhlIFVzZXIgdGhhdCB5b3UgaW50ZW5kIHRvIGNoYW5nZSB0aGUgcGFzc3dvcmQgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjaGVja0NoYW5nZVBhc3N3b3JkVXNpbmdMb2dpbklkKGxvZ2luSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jaGFuZ2UtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcm5hbWUnLCBsb2dpbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgQ2xpZW50IENyZWRlbnRpYWxzIGdyYW50IHJlcXVlc3QgdG8gb2J0YWluIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEVudGl0eSBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCBUaGUgY2xpZW50IHNlY3JldCB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGlzIHJlcXVlc3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZSAoT3B0aW9uYWwpIFRoaXMgcGFyYW1ldGVyIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hpY2ggdGFyZ2V0IGVudGl0eSB5b3UgYXJlIHJlcXVlc3RpbmcgYWNjZXNzLiBUbyByZXF1ZXN0IGFjY2VzcyB0byBhbiBlbnRpdHksIHVzZSB0aGUgZm9ybWF0IHRhcmdldC1lbnRpdHk6Jmx0O3RhcmdldC1lbnRpdHktaWQmZ3Q7OiZsdDtyb2xlcyZndDsuIFJvbGVzIGFyZSBhbiBvcHRpb25hbCBjb21tYSBzZXBhcmF0ZWQgbGlzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGNsaWVudENyZWRlbnRpYWxzR3JhbnQoY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ2NsaWVudF9jcmVkZW50aWFscycpO1xuICAgIGJvZHkuYXBwZW5kKCdzY29wZScsIHNjb3BlKTtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxBY2Nlc3NUb2tlbiwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi90b2tlbicpXG4gICAgICAgIC53aXRoRm9ybURhdGEoYm9keSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb21tZW50IHRvIHRoZSB1c2VyJ3MgYWNjb3VudC5cbiAgICpcbiAgICogQHBhcmFtIHtVc2VyQ29tbWVudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlciBjb21tZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBjb21tZW50T25Vc2VyKHJlcXVlc3Q6IFVzZXJDb21tZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb21tZW50JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgYSBXZWJBdXRobiBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBieSB2YWxpZGF0aW5nIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgcHJldmlvdXNseSBnZW5lcmF0ZWQgY2hhbGxlbmdlIHdpdGhvdXQgbG9nZ2luZyB0aGUgdXNlciBpblxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuTG9naW5SZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBjb21wbGV0aW5nIHRoZSBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkFzc2VydFJlc3BvbnNlPj59XG4gICAqL1xuICBjb21wbGV0ZVdlYkF1dGhuQXNzZXJ0aW9uKHJlcXVlc3Q6IFdlYkF1dGhuTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkFzc2VydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFdlYkF1dGhuQXNzZXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9hc3NlcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGJ5IHZhbGlkYXRpbmcgdGhlIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBwcmV2aW91c2x5IGdlbmVyYXRlZCBjaGFsbGVuZ2UgYW5kIHRoZW4gbG9naW4gdGhlIHVzZXIgaW5cbiAgICpcbiAgICogQHBhcmFtIHtXZWJBdXRobkxvZ2luUmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgY29tcGxldGVXZWJBdXRobkxvZ2luKHJlcXVlc3Q6IFdlYkF1dGhuTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255IGJ5IHZhbGlkYXRpbmcgdGhlIGNsaWVudCByZXF1ZXN0IGFuZCBzYXZpbmcgdGhlIG5ldyBjcmVkZW50aWFsXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5SZWdpc3RlckNvbXBsZXRlUmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgY29tcGxldGluZyB0aGUgcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjb21wbGV0ZVdlYkF1dGhuUmVnaXN0cmF0aW9uKHJlcXVlc3Q6IFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4vcmVnaXN0ZXIvY29tcGxldGUnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIEFQSSBrZXkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGEgdW5pcXVlIElkIGZvciB0aGUga2V5LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBhbiBBUEkga2V5IGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2l0aCBlcXVhbCBvciBsZXNzZXIgYXV0aG9yaXR5LiBBbiBBUEkga2V5IGNhbm5vdCBjcmVhdGUgYW5vdGhlciBBUEkga2V5IHVubGVzcyBpdCBpcyBncmFudGVkIFxuICAgKiB0byB0aGF0IEFQSSBrZXkuXG4gICAqIFxuICAgKiBJZiBhbiBBUEkga2V5IGlzIGxvY2tlZCB0byBhIHRlbmFudCwgaXQgY2FuIG9ubHkgY3JlYXRlIEFQSSBLZXlzIGZvciB0aGF0IHNhbWUgdGVuYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgQVBJIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBJZCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtBUElLZXlSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGNyZWF0ZSB0aGUgQVBJS2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQVBJS2V5KGtleUlkOiBVVUlELCByZXF1ZXN0OiBBUElLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBUElLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24uIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgYXBwbGljYXRpb24sIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBJZCB0byB1c2UgZm9yIHRoZSBhcHBsaWNhdGlvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBhcHBsaWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHJvbGUgZm9yIGFuIGFwcGxpY2F0aW9uLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBpZCBvZiB0aGUgYXBwbGljYXRpb24geW91IGFyZSBjcmVhdGluZyB0aGUgcm9sZSBmb3IuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgcm9sZSBpbnNpZGUgdGhlIEFwcGxpY2F0aW9uUm9sZSBvYmplY3QgaXRzZWxmLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBjcmVhdGUgdGhlIHJvbGUgb24uXG4gICAqIEBwYXJhbSB7VVVJRH0gcm9sZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSByb2xlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7QXBwbGljYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGFwcGxpY2F0aW9uIHJvbGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUFwcGxpY2F0aW9uUm9sZShhcHBsaWNhdGlvbklkOiBVVUlELCByb2xlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGF1ZGl0IGxvZyB3aXRoIHRoZSBtZXNzYWdlIGFuZCB1c2VyIG5hbWUgKHVzdWFsbHkgYW4gZW1haWwpLiBBdWRpdCBsb2dzIHNob3VsZCBiZSB3cml0dGVuIGFueXRpbWUgeW91XG4gICAqIG1ha2UgY2hhbmdlcyB0byB0aGUgRnVzaW9uQXV0aCBkYXRhYmFzZS4gV2hlbiB1c2luZyB0aGUgRnVzaW9uQXV0aCBBcHAgd2ViIGludGVyZmFjZSwgYW55IGNoYW5nZXMgYXJlIGF1dG9tYXRpY2FsbHlcbiAgICogd3JpdHRlbiB0byB0aGUgYXVkaXQgbG9nLiBIb3dldmVyLCBpZiB5b3UgYXJlIGFjY2Vzc2luZyB0aGUgQVBJLCB5b3UgbXVzdCB3cml0ZSB0aGUgYXVkaXQgbG9ncyB5b3Vyc2VsZi5cbiAgICpcbiAgICogQHBhcmFtIHtBdWRpdExvZ1JlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgYXVkaXQgbG9nIGVudHJ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVBdWRpdExvZyhyZXF1ZXN0OiBBdWRpdExvZ1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXVkaXRMb2dSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS9hdWRpdC1sb2cnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY29ubmVjdG9yLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBjb25uZWN0b3IsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29ubmVjdG9ySWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBjb25uZWN0b3IuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtDb25uZWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGNvbm5lY3Rvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUNvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB1c2VyIGNvbnNlbnQgdHlwZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBjb25zZW50IHR5cGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgY29uc2VudC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGNvbnNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IENvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29uc2VudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1haWwgdGVtcGxhdGUuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdGVtcGxhdGUsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGVtcGxhdGUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVFbWFpbFRlbXBsYXRlKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogRW1haWxUZW1wbGF0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbWFpbFRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gRW50aXR5LiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIEVudGl0eS4gSWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIEVudGl0eS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5KGVudGl0eUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIEVudGl0eSBUeXBlLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIEVudGl0eSBUeXBlLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIEVudGl0eSBUeXBlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgRW50aXR5IFR5cGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5VHlwZShlbnRpdHlUeXBlSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHBlcm1pc3Npb24gZm9yIGFuIGVudGl0eSB0eXBlLiBZb3UgbXVzdCBzcGVjaWZ5IHRoZSBpZCBvZiB0aGUgZW50aXR5IHR5cGUgeW91IGFyZSBjcmVhdGluZyB0aGUgcGVybWlzc2lvbiBmb3IuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgcGVybWlzc2lvbiBpbnNpZGUgdGhlIEVudGl0eVR5cGVQZXJtaXNzaW9uIG9iamVjdCBpdHNlbGYsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgZW50aXR5IHR5cGUgdG8gY3JlYXRlIHRoZSBwZXJtaXNzaW9uIG9uLlxuICAgKiBAcGFyYW0ge1VVSUR9IHBlcm1pc3Npb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0VudGl0eVR5cGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHBlcm1pc3Npb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlRW50aXR5VHlwZVBlcm1pc3Npb24oZW50aXR5VHlwZUlkOiBVVUlELCBwZXJtaXNzaW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVR5cGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJwZXJtaXNzaW9uXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChwZXJtaXNzaW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmYW1pbHkgd2l0aCB0aGUgdXNlciBpZCBpbiB0aGUgcmVxdWVzdCBhcyB0aGUgb3duZXIgYW5kIHNvbGUgbWVtYmVyIG9mIHRoZSBmYW1pbHkuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIGlkIGZvciB0aGVcbiAgICogZmFtaWx5LCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZhbWlseUlkIChPcHRpb25hbCkgVGhlIGlkIGZvciB0aGUgZmFtaWx5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7RmFtaWx5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmYW1pbHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVGYW1pbHkoZmFtaWx5SWQ6IFVVSUQsIHJlcXVlc3Q6IEZhbWlseVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZhbWlseVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZhbWlseVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmb3JtLiAgWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBmb3JtLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIGZvcm0uIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtGb3JtUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBmb3JtLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZvcm0oZm9ybUlkOiBVVUlELCByZXF1ZXN0OiBGb3JtUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZm9ybUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZm9ybSBmaWVsZC4gIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgZm9ybSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgZm9ybSBmaWVsZC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0Zvcm1GaWVsZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgZm9ybSBmaWVsZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlELCByZXF1ZXN0OiBGb3JtRmllbGRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGdyb3VwLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIGdyb3VwLCBpZiBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBncm91cC4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0dyb3VwUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlR3JvdXAoZ3JvdXBJZDogVVVJRCwgcmVxdWVzdDogR3JvdXBSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChncm91cElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbWVtYmVyIGluIGEgZ3JvdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVtYmVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBncm91cCBtZW1iZXIocykuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lbWJlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVHcm91cE1lbWJlcnMocmVxdWVzdDogTWVtYmVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVtYmVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVtYmVyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXInKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIElQIEFjY2VzcyBDb250cm9sIExpc3QuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIG9uIHRoaXMgY3JlYXRlIHJlcXVlc3QsIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjY2Vzc0NvbnRyb2xMaXN0SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7SVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVJUEFjY2Vzc0NvbnRyb2xMaXN0KGFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQsIHJlcXVlc3Q6IElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjY2Vzc0NvbnRyb2xMaXN0SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaWRlbnRpdHkgcHJvdmlkZXIuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgaWRlbnRpdHkgcHJvdmlkZXIsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUlkZW50aXR5UHJvdmlkZXIoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCByZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIExhbWJkYS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSBsYW1iZGEsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSBsYW1iZGEuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGxhbWJkYS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZUxhbWJkYShsYW1iZGFJZDogVVVJRCwgcmVxdWVzdDogTGFtYmRhUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gbWVzc2FnZSB0ZW1wbGF0ZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0ZW1wbGF0ZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHRlbXBsYXRlLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBtZXNzYWdlIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtZXNzZW5nZXIuICBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIG1lc3NlbmdlciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzZW5nZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIG1lc3Nlbmdlci4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge01lc3NlbmdlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgbWVzc2VuZ2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRlbmFudC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0ZW5hbnQsIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB0ZW5hbnQuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtUZW5hbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHRlbmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBUaGVtZS4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgYW4gSWQgZm9yIHRoZSB0aGVtZSwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgdGhlbWUuIElmIG5vdCBwcm92aWRlZCBhIHNlY3VyZSByYW5kb20gVVVJRCB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICogQHBhcmFtIHtUaGVtZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdGhlbWUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVRoZW1lKHRoZW1lSWQ6IFVVSUQsIHJlcXVlc3Q6IFRoZW1lUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIuIFlvdSBjYW4gb3B0aW9uYWxseSBzcGVjaWZ5IGFuIElkIGZvciB0aGUgdXNlciwgaWYgbm90IHByb3ZpZGVkIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB1c2VyLiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGNyZWF0ZSB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIgYWN0aW9uLiBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdGFrZW4gb24gYSB1c2VyIHVudGlsIHRoaXMgY2FsbCBzdWNjZXNzZnVsbHkgcmV0dXJucy4gQW55dGltZSBhZnRlclxuICAgKiB0aGF0IHRoZSB1c2VyIGFjdGlvbiBjYW4gYmUgYXBwbGllZCB0byBhbnkgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgKE9wdGlvbmFsKSBUaGUgSWQgZm9yIHRoZSB1c2VyIGFjdGlvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIgYWN0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHVzZXIgcmVhc29uLiBUaGlzIHVzZXIgYWN0aW9uIHJlYXNvbiBjYW5ub3QgYmUgdXNlZCB3aGVuIGFjdGlvbmluZyBhIHVzZXIgdW50aWwgdGhpcyBjYWxsIGNvbXBsZXRlc1xuICAgKiBzdWNjZXNzZnVsbHkuIEFueXRpbWUgYWZ0ZXIgdGhhdCB0aGUgdXNlciBhY3Rpb24gcmVhc29uIGNhbiBiZSB1c2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCAoT3B0aW9uYWwpIFRoZSBJZCBmb3IgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZWFzb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICBjcmVhdGVVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlYXNvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvblJlYXNvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgc2luZ2xlIFVzZXIgY29uc2VudC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgVXNlciBjb25zZW50LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7VXNlckNvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY29uc2VudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogVXNlckNvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTGluayBhbiBleHRlcm5hbCB1c2VyIGZyb20gYSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIgdG8gYSBGdXNpb25BdXRoIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBsaW5rIHRoZSBGdXNpb25BdXRoIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIGNyZWF0ZVVzZXJMaW5rKHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJMaW5rUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbGluaycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB3ZWJob29rLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSBhbiBJZCBmb3IgdGhlIHdlYmhvb2ssIGlmIG5vdCBwcm92aWRlZCBvbmUgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUgd2ViaG9vay4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBVVUlEIHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge1dlYmhvb2tSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+fVxuICAgKi9cbiAgY3JlYXRlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQsIHJlcXVlc3Q6IFdlYmhvb2tSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZGVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVSZWFjdG9yKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlYWN0b3InKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWFjdGl2YXRlcyB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlYWN0aXZhdGVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlYWN0aXZhdGVzIHRoZSB1c2VyIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byBkZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWFjdGl2YXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB1c2VySWRzIFRoZSBpZHMgb2YgdGhlIHVzZXJzIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGRlYWN0aXZhdGVVc2Vyc0J5SWRzLCB1c2UgdGhhdCBtZXRob2QgaW5zdGVhZC5cbiAgICovXG4gIGRlYWN0aXZhdGVVc2Vycyh1c2VySWRzOiBBcnJheTxzdHJpbmc+KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckRlbGV0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9idWxrJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZHMpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdkcnlSdW4nLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVhY3RpdmF0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcy5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB1c2VySWRzIFRoZSBpZHMgb2YgdGhlIHVzZXJzIHRvIGRlYWN0aXZhdGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZGVhY3RpdmF0ZVVzZXJzQnlJZHModXNlcklkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWRzKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZHJ5UnVuJywgZmFsc2UpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIEFQSSBrZXkgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIEFQSSBrZXkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVBUElLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhbiBhcHBsaWNhdGlvbi4gVGhpcyBpcyBhIGRhbmdlcm91cyBvcGVyYXRpb24gYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbiBtb3N0IGNpcmN1bXN0YW5jZXMuIFRoaXMgd2lsbFxuICAgKiBkZWxldGUgdGhlIGFwcGxpY2F0aW9uLCBhbnkgcmVnaXN0cmF0aW9ucyBmb3IgdGhhdCBhcHBsaWNhdGlvbiwgbWV0cmljcyBhbmQgcmVwb3J0cyBmb3IgdGhlIGFwcGxpY2F0aW9uLCBhbGwgdGhlXG4gICAqIHJvbGVzIGZvciB0aGUgYXBwbGljYXRpb24sIGFuZCBhbnkgb3RoZXIgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGFwcGxpY2F0aW9uLiBUaGlzIG9wZXJhdGlvbiBjb3VsZCB0YWtlIGEgdmVyeVxuICAgKiBsb25nIHRpbWUsIGRlcGVuZGluZyBvbiB0aGUgYW1vdW50IG9mIGRhdGEgaW4geW91ciBkYXRhYmFzZS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaGFyZERlbGV0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhbiBhcHBsaWNhdGlvbiByb2xlLiBUaGlzIGlzIGEgZGFuZ2Vyb3VzIG9wZXJhdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGluIG1vc3QgY2lyY3Vtc3RhbmNlcy4gVGhpc1xuICAgKiBwZXJtYW5lbnRseSByZW1vdmVzIHRoZSBnaXZlbiByb2xlIGZyb20gYWxsIHVzZXJzIHRoYXQgaGFkIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBkZWFjdGl2YXRlLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJvbGVJZCBUaGUgSWQgb2YgdGhlIHJvbGUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJyb2xlXCIpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChyb2xlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbm5lY3RvciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQ29ubmVjdG9yKGNvbm5lY3RvcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGNvbnNlbnQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25zZW50SWQgVGhlIElkIG9mIHRoZSBjb25zZW50IHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlQ29uc2VudChjb25zZW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlRW1haWxUZW1wbGF0ZShlbWFpbFRlbXBsYXRlSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgRW50aXR5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHkoZW50aXR5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhbiBFbnRpdHkgR3JhbnQgZm9yIHRoZSBnaXZlbiBVc2VyIG9yIEVudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgYmVpbmcgZGVsZXRlZCBmb3IuXG4gICAqIEBwYXJhbSB7VVVJRH0gcmVjaXBpZW50RW50aXR5SWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIEVudGl0eSB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgVXNlciB0aGF0IHRoZSBFbnRpdHkgR3JhbnQgaXMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVFbnRpdHlHcmFudChlbnRpdHlJZDogVVVJRCwgcmVjaXBpZW50RW50aXR5SWQ6IFVVSUQsIHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJncmFudFwiKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVjaXBpZW50RW50aXR5SWQnLCByZWNpcGllbnRFbnRpdHlJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgRW50aXR5IFR5cGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhcmQgZGVsZXRlcyBhIHBlcm1pc3Npb24uIFRoaXMgaXMgYSBkYW5nZXJvdXMgb3BlcmF0aW9uIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgaW4gbW9zdCBjaXJjdW1zdGFuY2VzLiBUaGlzXG4gICAqIHBlcm1hbmVudGx5IHJlbW92ZXMgdGhlIGdpdmVuIHBlcm1pc3Npb24gZnJvbSBhbGwgZ3JhbnRzIHRoYXQgaGFkIGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIGVudGl0eVR5cGUgdGhlIHRoZSBwZXJtaXNzaW9uIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcGVybWlzc2lvbklkIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUVudGl0eVR5cGVQZXJtaXNzaW9uKGVudGl0eVR5cGVJZDogVVVJRCwgcGVybWlzc2lvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlUeXBlSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInBlcm1pc3Npb25cIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHBlcm1pc3Npb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgZm9ybSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZvcm1JZCBUaGUgSWQgb2YgdGhlIGZvcm0gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVGb3JtKGZvcm1JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGZvcm0gZmllbGQgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIFRoZSBJZCBvZiB0aGUgZm9ybSBmaWVsZCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUZvcm1GaWVsZChmaWVsZElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZpZWxkSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIGdyb3VwIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZ3JvdXBJZCBUaGUgSWQgb2YgdGhlIGdyb3VwIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlR3JvdXAoZ3JvdXBJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB1c2VycyBhcyBtZW1iZXJzIG9mIGEgZ3JvdXAuXG4gICAqXG4gICAqIEBwYXJhbSB7TWVtYmVyRGVsZXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgbWVtYmVyIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gcmVtb3ZlIG1lbWJlcnMgdG8gdGhlIGdyb3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVHcm91cE1lbWJlcnMocmVxdWVzdDogTWVtYmVyRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvbWVtYmVyJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaXBBY2Nlc3NDb250cm9sTGlzdElkIFRoZSBJZCBvZiB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZUlQQWNjZXNzQ29udHJvbExpc3QoaXBBY2Nlc3NDb250cm9sTGlzdElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pcC1hY2wnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaXBBY2Nlc3NDb250cm9sTGlzdElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUga2V5IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBrZXkgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2tleScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgbGFtYmRhIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbGFtYmRhSWQgVGhlIElkIG9mIHRoZSBsYW1iZGEgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVMYW1iZGEobGFtYmRhSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NhZ2VUZW1wbGF0ZUlkIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzYWdlVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgbWVzc2VuZ2VyIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVNZXNzZW5nZXIobWVzc2VuZ2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciByZWdpc3RyYXRpb24gZm9yIHRoZSBnaXZlbiB1c2VyIGFuZCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHdob3NlIHJlZ2lzdHJhdGlvbiBpcyBiZWluZyBkZWxldGVkLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byByZW1vdmUgdGhlIHJlZ2lzdHJhdGlvbiBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGZvciB0aGUgZ2l2ZW4gdXNlciBhbmQgYXBwbGljYXRpb24gYWxvbmcgd2l0aCB0aGUgZ2l2ZW4gSlNPTiBib2R5IHRoYXQgY29udGFpbnMgdGhlIGV2ZW50IGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGJlaW5nIGRlbGV0ZWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHJlbW92ZSB0aGUgcmVnaXN0cmF0aW9uIGZvci5cbiAgICogQHBhcmFtIHtSZWdpc3RyYXRpb25EZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IGJvZHkgdGhhdCBjb250YWlucyB0aGUgZXZlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVJlZ2lzdHJhdGlvbldpdGhSZXF1ZXN0KHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogUmVnaXN0cmF0aW9uRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0ZW5hbnQgYmFzZWQgb24gdGhlIGdpdmVuIElkIG9uIHRoZSBVUkwuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB0ZW5hbnQgYW5kIGV2ZXJ5dGhpbmcgdW5kZXIgdGhlIHRlbmFudCAoYXBwbGljYXRpb25zLCB1c2VycywgZXRjKS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0ZW5hbnQgZm9yIHRoZSBnaXZlbiBJZCBhc3luY2hyb25vdXNseS5cbiAgICogVGhpcyBtZXRob2QgaXMgaGVscGZ1bCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gd2FpdCBmb3IgdGhlIGRlbGV0ZSBvcGVyYXRpb24gdG8gY29tcGxldGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUZW5hbnRBc3luYyh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGVuYW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRlbmFudElkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXN5bmMnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB0ZW5hbnQgYmFzZWQgb24gdGhlIGdpdmVuIHJlcXVlc3QgKHNlbnQgdG8gdGhlIEFQSSBhcyBKU09OKS4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIGFsbCBpbmZvcm1hdGlvbiwgbWV0cmljcywgcmVwb3J0cyBhbmQgZGF0YSBhc3NvY2lhdGVkXG4gICAqIHdpdGggdGhlIHRlbmFudCBhbmQgZXZlcnl0aGluZyB1bmRlciB0aGUgdGVuYW50IChhcHBsaWNhdGlvbnMsIHVzZXJzLCBldGMpLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHtUZW5hbnREZWxldGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBkZWxldGUgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVRlbmFudFdpdGhSZXF1ZXN0KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnREZWxldGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdGhlbWUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0aGVtZUlkIFRoZSBJZCBvZiB0aGUgdGhlbWUgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVUaGVtZSh0aGVtZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gSWQuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdoYXJkRGVsZXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdXNlciBhY3Rpb24gZm9yIHRoZSBnaXZlbiBJZC4gVGhpcyBwZXJtYW5lbnRseSBkZWxldGVzIHRoZSB1c2VyIGFjdGlvbiBhbmQgYWxzbyBhbnkgaGlzdG9yeSBhbmQgbG9ncyBvZlxuICAgKiB0aGUgYWN0aW9uIGJlaW5nIGFwcGxpZWQgdG8gYW55IHVzZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2hhcmREZWxldGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkZWxldGVVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGV4aXN0aW5nIGxpbmsgdGhhdCBoYXMgYmVlbiBtYWRlIGZyb20gYSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIgdG8gYSBGdXNpb25BdXRoIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpdHlQcm92aWRlclVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyIGluIHRoZSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIgdG8gdW5saW5rLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSBGdXNpb25BdXRoIHVzZXIgdG8gdW5saW5rLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj59XG4gICAqL1xuICBkZWxldGVVc2VyTGluayhpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ6IHN0cmluZywgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJVc2VySWQnLCBpZGVudGl0eVByb3ZpZGVyVXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSB1c2VyIGJhc2VkIG9uIHRoZSBnaXZlbiByZXF1ZXN0IChzZW50IHRvIHRoZSBBUEkgYXMgSlNPTikuIFRoaXMgcGVybWFuZW50bHkgZGVsZXRlcyBhbGwgaW5mb3JtYXRpb24sIG1ldHJpY3MsIHJlcG9ydHMgYW5kIGRhdGEgYXNzb2NpYXRlZFxuICAgKiB3aXRoIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZGVsZXRlIChyZXF1aXJlZCkuXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVNpbmdsZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGRlbGV0ZSB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlVXNlcldpdGhSZXF1ZXN0KHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVXNlckRlbGV0ZVNpbmdsZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcywgb3IgdXNlcnMgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIEpTT04gcXVlcnkgb3IgcXVlcnlTdHJpbmcuXG4gICAqIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIGlkcywgcXVlcnkgYW5kIHRoZW4gcXVlcnlTdHJpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgcHJvdmlkZSBvbmUgb2YgdGhlIHRocmVlIGZvciB0aGUgcmVxdWVzdC5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRlYWN0aXZhdGUgb3IgcGVybWFuZW50bHkgZGVsZXRlIChoYXJkLWRlbGV0ZSkgdXNlcnMgYmFzZWQgdXBvbiB0aGUgaGFyZERlbGV0ZSBib29sZWFuIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqIFVzaW5nIHRoZSBkcnlSdW4gcGFyYW1ldGVyIHlvdSBtYXkgYWxzbyByZXF1ZXN0IHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIG9yIGRlYWN0aXZhdGluZyBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIFVzZXJEZWxldGVSZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBkZWxldGVVc2Vyc0J5UXVlcnksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgZGVsZXRlVXNlcnMocmVxdWVzdDogVXNlckRlbGV0ZVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJEZWxldGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyRGVsZXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2J1bGsnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHVzZXJzIHdpdGggdGhlIGdpdmVuIGlkcywgb3IgdXNlcnMgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIEpTT04gcXVlcnkgb3IgcXVlcnlTdHJpbmcuXG4gICAqIFRoZSBvcmRlciBvZiBwcmVmZXJlbmNlIGlzIGlkcywgcXVlcnkgYW5kIHRoZW4gcXVlcnlTdHJpbmcsIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgcHJvdmlkZSBvbmUgb2YgdGhlIHRocmVlIGZvciB0aGUgcmVxdWVzdC5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGRlYWN0aXZhdGUgb3IgcGVybWFuZW50bHkgZGVsZXRlIChoYXJkLWRlbGV0ZSkgdXNlcnMgYmFzZWQgdXBvbiB0aGUgaGFyZERlbGV0ZSBib29sZWFuIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqIFVzaW5nIHRoZSBkcnlSdW4gcGFyYW1ldGVyIHlvdSBtYXkgYWxzbyByZXF1ZXN0IHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiB3aXRob3V0IGFjdHVhbGx5IGRlbGV0aW5nIG9yIGRlYWN0aXZhdGluZyBhbnkgdXNlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VXNlckRlbGV0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIFVzZXJEZWxldGVSZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyRGVsZXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGRlbGV0ZVVzZXJzQnlRdWVyeShyZXF1ZXN0OiBVc2VyRGVsZXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckRlbGV0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJEZWxldGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYnVsaycpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkIFRoZSBJZCBvZiB0aGUgV2ViQXV0aG4gY3JlZGVudGlhbCB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRlbGV0ZVdlYkF1dGhuQ3JlZGVudGlhbChpZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgdGhlIHdlYmhvb2sgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgVGhlIElkIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQod2ViaG9va0lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSBVc2VyIGZvciB3aGljaCB5b3UncmUgZGlzYWJsaW5nIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RJZCBUaGUgdHdvLWZhY3RvciBtZXRob2QgaWRlbnRpZmllciB5b3Ugd2lzaCB0byBkaXNhYmxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIFRoZSB0d28tZmFjdG9yIGNvZGUgdXNlZCB2ZXJpZnkgdGhlIHRoZSBjYWxsZXIga25vd3MgdGhlIHR3by1mYWN0b3Igc2VjcmV0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICBkaXNhYmxlVHdvRmFjdG9yKHVzZXJJZDogVVVJRCwgbWV0aG9kSWQ6IHN0cmluZywgY29kZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbWV0aG9kSWQnLCBtZXRob2RJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2NvZGUnLCBjb2RlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgdXNlciB1c2luZyBhIEpTT04gYm9keSByYXRoZXIgdGhhbiBVUkwgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSBVc2VyIGZvciB3aGljaCB5b3UncmUgZGlzYWJsaW5nIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yRGlzYWJsZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgaW5mb3JtYXRpb24gdGhhdCBjb250YWlucyB0aGUgY29kZSBhbmQgbWV0aG9kSWQgYWxvbmcgd2l0aCBhbnkgZXZlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGRpc2FibGVUd29GYWN0b3JXaXRoUmVxdWVzdCh1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFR3b0ZhY3RvckRpc2FibGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0d28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBlbmFibGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHBhcmFtIHtUd29GYWN0b3JSZXF1ZXN0fSByZXF1ZXN0IFRoZSB0d28tZmFjdG9yIGVuYWJsZSByZXF1ZXN0IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgZW5hYmxlVHdvRmFjdG9yKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogVHdvRmFjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZXMgYW4gT0F1dGggYXV0aG9yaXphdGlvbiBjb2RlIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIE1ha2VzIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBmcm9tIHRoZSBBdXRob3JpemUgZW5kcG9pbnQgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgVGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBvbiB0aGUgL29hdXRoMi9hdXRob3JpemUgcmVzcG9uc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSB3aWxsIGJlIHJlcXVpcmVkIGlmIGNsaWVudCBhdXRoZW50aWNhdGlvbiBpcyBlbmFibGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVkaXJlY3RfdXJpIFRoZSBVUkkgdG8gcmVkaXJlY3QgdG8gdXBvbiBhIHN1Y2Nlc3NmdWwgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlT0F1dGhDb2RlRm9yQWNjZXNzVG9rZW4oY29kZTogc3RyaW5nLCBjbGllbnRfaWQ6IHN0cmluZywgY2xpZW50X3NlY3JldDogc3RyaW5nLCByZWRpcmVjdF91cmk6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+PiB7XG4gICAgbGV0IGJvZHkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgICBib2R5LmFwcGVuZCgnY29kZScsIGNvZGUpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfaWQnLCBjbGllbnRfaWQpO1xuICAgIGJvZHkuYXBwZW5kKCdjbGllbnRfc2VjcmV0JywgY2xpZW50X3NlY3JldCk7XG4gICAgYm9keS5hcHBlbmQoJ2dyYW50X3R5cGUnLCAnYXV0aG9yaXphdGlvbl9jb2RlJyk7XG4gICAgYm9keS5hcHBlbmQoJ3JlZGlyZWN0X3VyaScsIHJlZGlyZWN0X3VyaSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZXMgYW4gT0F1dGggYXV0aG9yaXphdGlvbiBjb2RlIGFuZCBjb2RlX3ZlcmlmaWVyIGZvciBhbiBhY2Nlc3MgdG9rZW4uXG4gICAqIE1ha2VzIGEgcmVxdWVzdCB0byB0aGUgVG9rZW4gZW5kcG9pbnQgdG8gZXhjaGFuZ2UgdGhlIGF1dGhvcml6YXRpb24gY29kZSByZXR1cm5lZCBmcm9tIHRoZSBBdXRob3JpemUgZW5kcG9pbnQgYW5kIGEgY29kZV92ZXJpZmllciBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBUaGUgYXV0aG9yaXphdGlvbiBjb2RlIHJldHVybmVkIG9uIHRoZSAvb2F1dGgyL2F1dGhvcml6ZSByZXNwb25zZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCAoT3B0aW9uYWwpIFRoZSB1bmlxdWUgY2xpZW50IGlkZW50aWZpZXIuIFRoZSBjbGllbnQgSWQgaXMgdGhlIElkIG9mIHRoZSBGdXNpb25BdXRoIEFwcGxpY2F0aW9uIGluIHdoaWNoIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBhdXRoZW50aWNhdGUuIFRoaXMgcGFyYW1ldGVyIGlzIG9wdGlvbmFsIHdoZW4gdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGlzIHByb3ZpZGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X3NlY3JldCAoT3B0aW9uYWwpIFRoZSBjbGllbnQgc2VjcmV0LiBUaGlzIHZhbHVlIG1heSBvcHRpb25hbGx5IGJlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkgaW5zdGVhZCBvZiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWRpcmVjdF91cmkgVGhlIFVSSSB0byByZWRpcmVjdCB0byB1cG9uIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZV92ZXJpZmllciBUaGUgcmFuZG9tIHN0cmluZyBnZW5lcmF0ZWQgcHJldmlvdXNseS4gV2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSBjb2RlX2NoYWxsZW5nZSBzZW50IHByZXZpb3VzbHksIHdoaWNoIGFsbG93cyB0aGUgT0F1dGggcHJvdmlkZXIgdG8gYXV0aGVudGljYXRlIHlvdXIgYXBwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY2Nlc3NUb2tlbj4+fVxuICAgKi9cbiAgZXhjaGFuZ2VPQXV0aENvZGVGb3JBY2Nlc3NUb2tlblVzaW5nUEtDRShjb2RlOiBzdHJpbmcsIGNsaWVudF9pZDogc3RyaW5nLCBjbGllbnRfc2VjcmV0OiBzdHJpbmcsIHJlZGlyZWN0X3VyaTogc3RyaW5nLCBjb2RlX3ZlcmlmaWVyOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NvZGUnLCBjb2RlKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ2F1dGhvcml6YXRpb25fY29kZScpO1xuICAgIGJvZHkuYXBwZW5kKCdyZWRpcmVjdF91cmknLCByZWRpcmVjdF91cmkpO1xuICAgIGJvZHkuYXBwZW5kKCdjb2RlX3ZlcmlmaWVyJywgY29kZV92ZXJpZmllcik7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhIFJlZnJlc2ggVG9rZW4gZm9yIGFuIEFjY2VzcyBUb2tlbi5cbiAgICogSWYgeW91IHdpbGwgYmUgdXNpbmcgdGhlIFJlZnJlc2ggVG9rZW4gR3JhbnQsIHlvdSB3aWxsIG1ha2UgYSByZXF1ZXN0IHRvIHRoZSBUb2tlbiBlbmRwb2ludCB0byBleGNoYW5nZSB0aGUgdXNlcuKAmXMgcmVmcmVzaCB0b2tlbiBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaF90b2tlbiBUaGUgcmVmcmVzaCB0b2tlbiB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0byBleGNoYW5nZSBmb3IgYW4gYWNjZXNzIHRva2VuLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xpZW50X2lkIChPcHRpb25hbCkgVGhlIHVuaXF1ZSBjbGllbnQgaWRlbnRpZmllci4gVGhlIGNsaWVudCBJZCBpcyB0aGUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggQXBwbGljYXRpb24gaW4gd2hpY2ggeW91IGFyZSBhdHRlbXB0aW5nIHRvIGF1dGhlbnRpY2F0ZS4gVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgd2hlbiB0aGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgaXMgcHJvdmlkZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfc2VjcmV0IChPcHRpb25hbCkgVGhlIGNsaWVudCBzZWNyZXQuIFRoaXMgdmFsdWUgbWF5IG9wdGlvbmFsbHkgYmUgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgYm9keSBpbnN0ZWFkIG9mIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlIChPcHRpb25hbCkgVGhpcyBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwgYW5kIGlmIG9taXR0ZWQsIHRoZSBzYW1lIHNjb3BlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGF1dGhvcml6YXRpb24gcmVxdWVzdCB3aWxsIGJlIHVzZWQuIElmIHByb3ZpZGVkIHRoZSBzY29wZXMgbXVzdCBtYXRjaCB0aG9zZSByZXF1ZXN0ZWQgZHVyaW5nIHRoZSBpbml0aWFsIGF1dGhvcml6YXRpb24gcmVxdWVzdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJfY29kZSAoT3B0aW9uYWwpIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS4gVGhpcyBjb2RlIGlzIHJlcXVpcmVkIGlmIHVzaW5nIHRoaXMgZW5kcG9pbnQgdG8gYXBwcm92ZSB0aGUgRGV2aWNlIEF1dGhvcml6YXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj59XG4gICAqL1xuICBleGNoYW5nZVJlZnJlc2hUb2tlbkZvckFjY2Vzc1Rva2VuKHJlZnJlc2hfdG9rZW46IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3JlZnJlc2hfdG9rZW4nLCByZWZyZXNoX3Rva2VuKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ3JlZnJlc2hfdG9rZW4nKTtcbiAgICBib2R5LmFwcGVuZCgnc2NvcGUnLCBzY29wZSk7XG4gICAgYm9keS5hcHBlbmQoJ3VzZXJfY29kZScsIHVzZXJfY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8QWNjZXNzVG9rZW4sIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdG9rZW4nKVxuICAgICAgICAud2l0aEZvcm1EYXRhKGJvZHkpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBhIHJlZnJlc2ggdG9rZW4gZm9yIGEgbmV3IEpXVC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWZyZXNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVmcmVzaCByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RSZWZyZXNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIGV4Y2hhbmdlUmVmcmVzaFRva2VuRm9ySldUKHJlcXVlc3Q6IFJlZnJlc2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV1RSZWZyZXNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SldUUmVmcmVzaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGNoYW5nZSBVc2VyIENyZWRlbnRpYWxzIGZvciBhIFRva2VuLlxuICAgKiBJZiB5b3Ugd2lsbCBiZSB1c2luZyB0aGUgUmVzb3VyY2UgT3duZXIgUGFzc3dvcmQgQ3JlZGVudGlhbCBHcmFudCwgeW91IHdpbGwgbWFrZSBhIHJlcXVlc3QgdG8gdGhlIFRva2VuIGVuZHBvaW50IHRvIGV4Y2hhbmdlIHRoZSB1c2Vy4oCZcyBlbWFpbCBhbmQgcGFzc3dvcmQgZm9yIGFuIGFjY2VzcyB0b2tlbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJuYW1lIFRoZSBsb2dpbiBpZGVudGlmaWVyIG9mIHRoZSB1c2VyLiBUaGUgbG9naW4gaWRlbnRpZmllciBjYW4gYmUgZWl0aGVyIHRoZSBlbWFpbCBvciB0aGUgdXNlcm5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZCBUaGUgdXNlcuKAmXMgcGFzc3dvcmQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGllbnRfaWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBpbiB3aGljaCB5b3UgYXJlIGF0dGVtcHRpbmcgdG8gYXV0aGVudGljYXRlLiBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCB3aGVuIHRoZSBBdXRob3JpemF0aW9uIGhlYWRlciBpcyBwcm92aWRlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9zZWNyZXQgKE9wdGlvbmFsKSBUaGUgY2xpZW50IHNlY3JldC4gVGhpcyB2YWx1ZSBtYXkgb3B0aW9uYWxseSBiZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCBib2R5IGluc3RlYWQgb2YgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGUgKE9wdGlvbmFsKSBUaGlzIHBhcmFtZXRlciBpcyBvcHRpb25hbCBhbmQgaWYgb21pdHRlZCwgdGhlIHNhbWUgc2NvcGUgcmVxdWVzdGVkIGR1cmluZyB0aGUgYXV0aG9yaXphdGlvbiByZXF1ZXN0IHdpbGwgYmUgdXNlZC4gSWYgcHJvdmlkZWQgdGhlIHNjb3BlcyBtdXN0IG1hdGNoIHRob3NlIHJlcXVlc3RlZCBkdXJpbmcgdGhlIGluaXRpYWwgYXV0aG9yaXphdGlvbiByZXF1ZXN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIChPcHRpb25hbCkgVGhlIGVuZC11c2VyIHZlcmlmaWNhdGlvbiBjb2RlLiBUaGlzIGNvZGUgaXMgcmVxdWlyZWQgaWYgdXNpbmcgdGhpcyBlbmRwb2ludCB0byBhcHByb3ZlIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWNjZXNzVG9rZW4+Pn1cbiAgICovXG4gIGV4Y2hhbmdlVXNlckNyZWRlbnRpYWxzRm9yQWNjZXNzVG9rZW4odXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcsIGNsaWVudF9zZWNyZXQ6IHN0cmluZywgc2NvcGU6IHN0cmluZywgdXNlcl9jb2RlOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjY2Vzc1Rva2VuPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ3VzZXJuYW1lJywgdXNlcm5hbWUpO1xuICAgIGJvZHkuYXBwZW5kKCdwYXNzd29yZCcsIHBhc3N3b3JkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X2lkJywgY2xpZW50X2lkKTtcbiAgICBib2R5LmFwcGVuZCgnY2xpZW50X3NlY3JldCcsIGNsaWVudF9zZWNyZXQpO1xuICAgIGJvZHkuYXBwZW5kKCdncmFudF90eXBlJywgJ3Bhc3N3b3JkJyk7XG4gICAgYm9keS5hcHBlbmQoJ3Njb3BlJywgc2NvcGUpO1xuICAgIGJvZHkuYXBwZW5kKCd1c2VyX2NvZGUnLCB1c2VyX2NvZGUpO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEFjY2Vzc1Rva2VuLCBPQXV0aEVycm9yPigpXG4gICAgICAgIC53aXRoVXJpKCcvb2F1dGgyL3Rva2VuJylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQmVnaW5zIHRoZSBmb3Jnb3QgcGFzc3dvcmQgc2VxdWVuY2UsIHdoaWNoIGtpY2tzIG9mZiBhbiBlbWFpbCB0byB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIHJlc2V0IHRoZWlyIHBhc3N3b3JkLlxuICAgKlxuICAgKiBAcGFyYW0ge0ZvcmdvdFBhc3N3b3JkUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBzbyB0aGF0IHRoZXkgY2FuIGJlIGVtYWlsZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcmdvdFBhc3N3b3JkUmVzcG9uc2U+Pn1cbiAgICovXG4gIGZvcmdvdFBhc3N3b3JkKHJlcXVlc3Q6IEZvcmdvdFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9yZ290UGFzc3dvcmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3Jnb3RQYXNzd29yZFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mb3Jnb3QtcGFzc3dvcmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG5ldyBFbWFpbCBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgRW1haWwgQVBJLiBUaGlzIEFQSSB3aWxsIG5vdCBhdHRlbXB0IHRvIHNlbmQgYW5cbiAgICogZW1haWwgdG8gdGhlIFVzZXIuIFRoaXMgQVBJIG1heSBiZSB1c2VkIHRvIGNvbGxlY3QgdGhlIHZlcmlmaWNhdGlvbklkIGZvciB1c2Ugd2l0aCBhIHRoaXJkIHBhcnR5IHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUVtYWlsVmVyaWZpY2F0aW9uSWQoZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LWVtYWlsJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VtYWlsJywgZW1haWwpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzZW5kVmVyaWZ5RW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBuZXcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9rZXkvZ2VuZXJhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoa2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbmV3IEFwcGxpY2F0aW9uIFJlZ2lzdHJhdGlvbiBWZXJpZmljYXRpb24gSWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBWZXJpZnkgUmVnaXN0cmF0aW9uIEFQSS4gVGhpcyBBUEkgd2lsbCBub3QgYXR0ZW1wdCB0byBzZW5kIGFuXG4gICAqIGVtYWlsIHRvIHRoZSBVc2VyLiBUaGlzIEFQSSBtYXkgYmUgdXNlZCB0byBjb2xsZWN0IHRoZSB2ZXJpZmljYXRpb25JZCBmb3IgdXNlIHdpdGggYSB0aGlyZCBwYXJ0eSBzeXN0ZW0uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlciB0aGF0IG5lZWRzIGEgbmV3IHZlcmlmaWNhdGlvbiBlbWFpbC5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gYmUgdmVyaWZpZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBnZW5lcmF0ZVJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkKGVtYWlsOiBzdHJpbmcsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeVJlZ2lzdHJhdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc2VuZFZlcmlmeVBhc3N3b3JkRW1haWwnLCBmYWxzZSlcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuIEdlbmVyYXRpbmcgdHdvLWZhY3RvciByZWNvdmVyeSBjb2RlcyB3aWxsIGludmFsaWRhdGUgYW55IGV4aXN0aW5nIHJlY292ZXJ5IGNvZGVzLiBcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGdlbmVyYXRlIG5ldyBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIFR3byBGYWN0b3Igc2VjcmV0IHRoYXQgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gZm9yIGEgVXNlci4gVGhlIHJlc3BvbnNlIHdpbGwgY29udGFpblxuICAgKiBib3RoIHRoZSBzZWNyZXQgYW5kIGEgQmFzZTMyIGVuY29kZWQgZm9ybSBvZiB0aGUgc2VjcmV0IHdoaWNoIGNhbiBiZSBzaG93biB0byBhIFVzZXIgd2hlbiB1c2luZyBhIDIgU3RlcCBBdXRoZW50aWNhdGlvblxuICAgKiBhcHBsaWNhdGlvbiBzdWNoIGFzIEdvb2dsZSBBdXRoZW50aWNhdG9yLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+fVxuICAgKi9cbiAgZ2VuZXJhdGVUd29GYWN0b3JTZWNyZXQoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgVHdvIEZhY3RvciBzZWNyZXQgdGhhdCBjYW4gYmUgdXNlZCB0byBlbmFibGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBmb3IgYSBVc2VyLiBUaGUgcmVzcG9uc2Ugd2lsbCBjb250YWluXG4gICAqIGJvdGggdGhlIHNlY3JldCBhbmQgYSBCYXNlMzIgZW5jb2RlZCBmb3JtIG9mIHRoZSBzZWNyZXQgd2hpY2ggY2FuIGJlIHNob3duIHRvIGEgVXNlciB3aGVuIHVzaW5nIGEgMiBTdGVwIEF1dGhlbnRpY2F0aW9uXG4gICAqIGFwcGxpY2F0aW9uIHN1Y2ggYXMgR29vZ2xlIEF1dGhlbnRpY2F0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGVkSldUIFRoZSBlbmNvZGVkIEpXVCAoYWNjZXNzIHRva2VuKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VjcmV0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGdlbmVyYXRlVHdvRmFjdG9yU2VjcmV0VXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWNyZXRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxTZWNyZXRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlY3JldCcpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIGxvZ2luIHZpYSB0aGlyZC1wYXJ0aWVzIGluY2x1ZGluZyBTb2NpYWwgbG9naW4sIGV4dGVybmFsIE9BdXRoIGFuZCBPcGVuSUQgQ29ubmVjdCwgYW5kIG90aGVyXG4gICAqIGxvZ2luIHN5c3RlbXMuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgdGhpcmQtcGFydHkgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gdGhlIHRoaXJkLXBhcnR5IGxvZ2luXG4gICAqICAgIHByb3ZpZGVycyB0aGF0IEZ1c2lvbkF1dGggdXNlcyB0byByZWNvbmNpbGUgdGhlIHVzZXIncyBhY2NvdW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBpZGVudGl0eVByb3ZpZGVyTG9naW4ocmVxdWVzdDogSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgUlNBIG9yIEVDIGtleSBwYWlyIG9yIGFuIEhNQUMgc2VjcmV0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIChPcHRpb25hbCkgVGhlIElkIGZvciB0aGUga2V5LiBJZiBub3QgcHJvdmlkZWQgYSBzZWN1cmUgcmFuZG9tIFVVSUQgd2lsbCBiZSBnZW5lcmF0ZWQuXG4gICAqIEBwYXJhbSB7S2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBrZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICBpbXBvcnRLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5L2ltcG9ydCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChrZXlJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVsayBpbXBvcnRzIHJlZnJlc2ggdG9rZW5zLiBUaGlzIHJlcXVlc3QgcGVyZm9ybXMgbWluaW1hbCB2YWxpZGF0aW9uIGFuZCBydW5zIGJhdGNoIGluc2VydHMgb2YgcmVmcmVzaCB0b2tlbnMgd2l0aCB0aGVcbiAgICogZXhwZWN0YXRpb24gdGhhdCBlYWNoIHRva2VuIHJlcHJlc2VudHMgYSB1c2VyIHRoYXQgYWxyZWFkeSBleGlzdHMgYW5kIGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIEZ1c2lvbkF1dGhcbiAgICogQXBwbGljYXRpb24uIFRoaXMgaXMgZG9uZSB0byBpbmNyZWFzZXMgdGhlIGluc2VydCBwZXJmb3JtYW5jZS5cbiAgICogXG4gICAqIFRoZXJlZm9yZSwgaWYgeW91IGVuY291bnRlciBhbiBlcnJvciBkdWUgdG8gYSBkYXRhYmFzZSBrZXkgdmlvbGF0aW9uLCB0aGUgcmVzcG9uc2Ugd2lsbCBsaWtlbHkgb2ZmZXIgYSBnZW5lcmljXG4gICAqIGV4cGxhbmF0aW9uLiBJZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yLCB5b3UgbWF5IG9wdGlvbmFsbHkgZW5hYmxlIGFkZGl0aW9uYWwgdmFsaWRhdGlvbiB0byByZWNlaXZlIGEgSlNPTiByZXNwb25zZVxuICAgKiBib2R5IHdpdGggc3BlY2lmaWMgdmFsaWRhdGlvbiBlcnJvcnMuIFRoaXMgd2lsbCBzbG93IHRoZSByZXF1ZXN0IGRvd24gYnV0IHdpbGwgYWxsb3cgeW91IHRvIGlkZW50aWZ5IHRoZSBjYXVzZSBvZlxuICAgKiB0aGUgZmFpbHVyZS4gU2VlIHRoZSB2YWxpZGF0ZURiQ29uc3RyYWludHMgcmVxdWVzdCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9mIHRoZSByZWZyZXNoIHRva2VucyB0byBpbXBvcnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFJlZnJlc2hUb2tlbnMocmVxdWVzdDogUmVmcmVzaFRva2VuSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWZyZXNoLXRva2VuL2ltcG9ydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1bGsgaW1wb3J0cyB1c2Vycy4gVGhpcyByZXF1ZXN0IHBlcmZvcm1zIG1pbmltYWwgdmFsaWRhdGlvbiBhbmQgcnVucyBiYXRjaCBpbnNlcnRzIG9mIHVzZXJzIHdpdGggdGhlIGV4cGVjdGF0aW9uXG4gICAqIHRoYXQgZWFjaCB1c2VyIGRvZXMgbm90IHlldCBleGlzdCBhbmQgZWFjaCByZWdpc3RyYXRpb24gY29ycmVzcG9uZHMgdG8gYW4gZXhpc3RpbmcgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbi4gVGhpcyBpcyBkb25lIHRvXG4gICAqIGluY3JlYXNlcyB0aGUgaW5zZXJ0IHBlcmZvcm1hbmNlLlxuICAgKiBcbiAgICogVGhlcmVmb3JlLCBpZiB5b3UgZW5jb3VudGVyIGFuIGVycm9yIGR1ZSB0byBhIGRhdGFiYXNlIGtleSB2aW9sYXRpb24sIHRoZSByZXNwb25zZSB3aWxsIGxpa2VseSBvZmZlclxuICAgKiBhIGdlbmVyaWMgZXhwbGFuYXRpb24uIElmIHlvdSBlbmNvdW50ZXIgYW4gZXJyb3IsIHlvdSBtYXkgb3B0aW9uYWxseSBlbmFibGUgYWRkaXRpb25hbCB2YWxpZGF0aW9uIHRvIHJlY2VpdmUgYSBKU09OIHJlc3BvbnNlXG4gICAqIGJvZHkgd2l0aCBzcGVjaWZpYyB2YWxpZGF0aW9uIGVycm9ycy4gVGhpcyB3aWxsIHNsb3cgdGhlIHJlcXVlc3QgZG93biBidXQgd2lsbCBhbGxvdyB5b3UgdG8gaWRlbnRpZnkgdGhlIGNhdXNlIG9mIHRoZSBmYWlsdXJlLiBTZWVcbiAgICogdGhlIHZhbGlkYXRlRGJDb25zdHJhaW50cyByZXF1ZXN0IHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtJbXBvcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHVzZXJzIHRvIGltcG9ydC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgaW1wb3J0VXNlcnMocmVxdWVzdDogSW1wb3J0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBXZWJBdXRobiBjcmVkZW50aWFsXG4gICAqXG4gICAqIEBwYXJhbSB7V2ViQXV0aG5DcmVkZW50aWFsSW1wb3J0UmVxdWVzdH0gcmVxdWVzdCBBbiBvYmplY3QgY29udGFpbmluZyBkYXRhIG5lY2Vzc2FyeSBmb3IgaW1wb3J0aW5nIHRoZSBjcmVkZW50aWFsXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGltcG9ydFdlYkF1dGhuQ3JlZGVudGlhbChyZXF1ZXN0OiBXZWJBdXRobkNyZWRlbnRpYWxJbXBvcnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9pbXBvcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnNwZWN0IGFuIGFjY2VzcyB0b2tlbiBpc3N1ZWQgYnkgRnVzaW9uQXV0aC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgdW5pcXVlIGNsaWVudCBpZGVudGlmaWVyLiBUaGUgY2xpZW50IElkIGlzIHRoZSBJZCBvZiB0aGUgRnVzaW9uQXV0aCBBcHBsaWNhdGlvbiBmb3Igd2hpY2ggdGhpcyB0b2tlbiB3YXMgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW4gVGhlIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBieSB0aGlzIE9BdXRoIHByb3ZpZGVyIGFzIHRoZSByZXN1bHQgb2YgYSBzdWNjZXNzZnVsIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRyb3NwZWN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIGludHJvc3BlY3RBY2Nlc3NUb2tlbihjbGllbnRfaWQ6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50cm9zcGVjdFJlc3BvbnNlPj4ge1xuICAgIGxldCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgYm9keS5hcHBlbmQoJ2NsaWVudF9pZCcsIGNsaWVudF9pZCk7XG4gICAgYm9keS5hcHBlbmQoJ3Rva2VuJywgdG9rZW4pO1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPEludHJvc3BlY3RSZXNwb25zZSwgT0F1dGhFcnJvcj4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9pbnRyb3NwZWN0JylcbiAgICAgICAgLndpdGhGb3JtRGF0YShib2R5KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogSXNzdWUgYSBuZXcgYWNjZXNzIHRva2VuIChKV1QpIGZvciB0aGUgcmVxdWVzdGVkIEFwcGxpY2F0aW9uIGFmdGVyIGVuc3VyaW5nIHRoZSBwcm92aWRlZCBKV1QgaXMgdmFsaWQuIEEgdmFsaWRcbiAgICogYWNjZXNzIHRva2VuIGlzIHByb3Blcmx5IHNpZ25lZCBhbmQgbm90IGV4cGlyZWQuXG4gICAqIDxwPlxuICAgKiBUaGlzIEFQSSBtYXkgYmUgdXNlZCBpbiBhbiBTU08gY29uZmlndXJhdGlvbiB0byBpc3N1ZSBuZXcgdG9rZW5zIGZvciBhbm90aGVyIGFwcGxpY2F0aW9uIGFmdGVyIHRoZSB1c2VyIGhhc1xuICAgKiBvYnRhaW5lZCBhIHZhbGlkIHRva2VuIGZyb20gYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgQXBwbGljYXRpb24gSWQgZm9yIHdoaWNoIHlvdSBhcmUgcmVxdWVzdGluZyBhIG5ldyBhY2Nlc3MgdG9rZW4gYmUgaXNzdWVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW4gKE9wdGlvbmFsKSBBbiBleGlzdGluZyByZWZyZXNoIHRva2VuIHVzZWQgdG8gcmVxdWVzdCBhIHJlZnJlc2ggdG9rZW4gaW4gYWRkaXRpb24gdG8gYSBKV1QgaW4gdGhlIHJlc3BvbnNlLlxuICAgKiAgICA8cD5UaGUgdGFyZ2V0IGFwcGxpY2F0aW9uIHJlcHJlc2VudGVkIGJ5IHRoZSBhcHBsaWNhdGlvbklkIHJlcXVlc3QgcGFyYW1ldGVyIG11c3QgaGF2ZSByZWZyZXNoXG4gICAqICAgIHRva2VucyBlbmFibGVkIGluIG9yZGVyIHRvIHJlY2VpdmUgYSByZWZyZXNoIHRva2VuIGluIHRoZSByZXNwb25zZS48L3A+XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElzc3VlUmVzcG9uc2U+Pn1cbiAgICovXG4gIGlzc3VlSldUKGFwcGxpY2F0aW9uSWQ6IFVVSUQsIGVuY29kZWRKV1Q6IHN0cmluZywgcmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElzc3VlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8SXNzdWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9pc3N1ZScpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWZyZXNoVG9rZW4nLCByZWZyZXNoVG9rZW4pXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgYSB1c2VyIHRvIEZ1c2lvbkF1dGguIFxuICAgKiBcbiAgICogVGhpcyBBUEkgb3B0aW9uYWxseSByZXF1aXJlcyBhbiBBUEkga2V5LiBTZWUgPGNvZGU+QXBwbGljYXRpb24ubG9naW5Db25maWd1cmF0aW9uLnJlcXVpcmVBdXRoZW50aWNhdGlvbjwvY29kZT4uXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBsb2dpbiByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXIgY3JlZGVudGlhbHMgdXNlZCB0byBsb2cgdGhlbSBpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgbG9naW4ocmVxdWVzdDogTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyB0byBGdXNpb25BdXRoIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciB3YXMgYXV0b21hdGljYWxseSBsb2dnZWQgaW50byBhbiBhcHBsaWNhdGlvbi4gV2hlbiB1c2luZ1xuICAgKiBGdXNpb25BdXRoJ3MgU1NPIG9yIHlvdXIgb3duLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcyBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZCBpbiBjZW50cmFsbHksIGJ1dCBhY2Nlc3NlcyBhblxuICAgKiBhcHBsaWNhdGlvbiB3aGVyZSB0aGV5IG5vIGxvbmdlciBoYXZlIGEgc2Vzc2lvbi4gVGhpcyBoZWxwcyBjb3JyZWN0bHkgdHJhY2sgbG9naW4gY291bnRzLCB0aW1lcyBhbmQgaGVscHMgd2l0aFxuICAgKiByZXBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0aGF0IHdhcyBsb2dnZWQgaW4uXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhleSBsb2dnZWQgaW50by5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhbGxlcklQQWRkcmVzcyAoT3B0aW9uYWwpIFRoZSBJUCBhZGRyZXNzIG9mIHRoZSBlbmQtdXNlciB0aGF0IGlzIGxvZ2dpbmcgaW4uIElmIGEgbnVsbCB2YWx1ZSBpcyBwcm92aWRlZFxuICAgKiAgICB0aGUgSVAgYWRkcmVzcyB3aWxsIGJlIHRoYXQgb2YgdGhlIGNsaWVudCBvciBsYXN0IHByb3h5IHRoYXQgc2VudCB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgbG9naW5QaW5nKHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCwgY2FsbGVySVBBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xvZ2luJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpcEFkZHJlc3MnLCBjYWxsZXJJUEFkZHJlc3MpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcGluZyB0byBGdXNpb25BdXRoIGluZGljYXRpbmcgdGhhdCB0aGUgdXNlciB3YXMgYXV0b21hdGljYWxseSBsb2dnZWQgaW50byBhbiBhcHBsaWNhdGlvbi4gV2hlbiB1c2luZ1xuICAgKiBGdXNpb25BdXRoJ3MgU1NPIG9yIHlvdXIgb3duLCB5b3Ugc2hvdWxkIGNhbGwgdGhpcyBpZiB0aGUgdXNlciBpcyBhbHJlYWR5IGxvZ2dlZCBpbiBjZW50cmFsbHksIGJ1dCBhY2Nlc3NlcyBhblxuICAgKiBhcHBsaWNhdGlvbiB3aGVyZSB0aGV5IG5vIGxvbmdlciBoYXZlIGEgc2Vzc2lvbi4gVGhpcyBoZWxwcyBjb3JyZWN0bHkgdHJhY2sgbG9naW4gY291bnRzLCB0aW1lcyBhbmQgaGVscHMgd2l0aFxuICAgKiByZXBvcnRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9naW5QaW5nUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIGxvZ2luUGluZ1dpdGhSZXF1ZXN0KHJlcXVlc3Q6IExvZ2luUGluZ1JlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xvZ2luJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTG9nb3V0IEFQSSBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgcmVmcmVzaCB0b2tlbiBhbmQgYWNjZXNzIHRva2VuIGNvb2tpZXMgaWYgdGhleSBleGlzdCBvbiB0aGVcbiAgICogY2xpZW50IGFuZCByZXZva2UgdGhlIHJlZnJlc2ggdG9rZW4gc3RvcmVkLiBUaGlzIEFQSSBkb2VzIG5vdGhpbmcgaWYgdGhlIHJlcXVlc3QgZG9lcyBub3QgY29udGFpbiBhbiBhY2Nlc3NcbiAgICogdG9rZW4gb3IgcmVmcmVzaCB0b2tlbiBjb29raWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbCBXaGVuIHRoaXMgdmFsdWUgaXMgc2V0IHRvIHRydWUgYWxsIG9mIHRoZSByZWZyZXNoIHRva2VucyBpc3N1ZWQgdG8gdGhlIG93bmVyIG9mIHRoZVxuICAgKiAgICBwcm92aWRlZCB0b2tlbiB3aWxsIGJlIHJldm9rZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW4gKE9wdGlvbmFsKSBUaGUgcmVmcmVzaF90b2tlbiBhcyBhIHJlcXVlc3QgcGFyYW1ldGVyIGluc3RlYWQgb2YgY29taW5nIGluIHZpYSBhIGNvb2tpZS5cbiAgICogICAgSWYgcHJvdmlkZWQgdGhpcyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGNvb2tpZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgbG9nb3V0KGdsb2JhbDogYm9vbGVhbiwgcmVmcmVzaFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dvdXQnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZ2xvYmFsJywgZ2xvYmFsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVmcmVzaFRva2VuJywgcmVmcmVzaFRva2VuKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIExvZ291dCBBUEkgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB0byByZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gYW5kIGFjY2VzcyB0b2tlbiBjb29raWVzIGlmIHRoZXkgZXhpc3Qgb24gdGhlXG4gICAqIGNsaWVudCBhbmQgcmV2b2tlIHRoZSByZWZyZXNoIHRva2VuIHN0b3JlZC4gVGhpcyBBUEkgdGFrZXMgdGhlIHJlZnJlc2ggdG9rZW4gaW4gdGhlIEpTT04gYm9keS5cbiAgICpcbiAgICogQHBhcmFtIHtMb2dvdXRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBsb2dvdXQgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIGxvZ291dFdpdGhSZXF1ZXN0KHJlcXVlc3Q6IExvZ291dFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sb2dvdXQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gZG9tYWluLiBBIDIwMCByZXNwb25zZSBjb2RlIGluZGljYXRlcyB0aGUgZG9tYWluIGlzIG1hbmFnZWRcbiAgICogYnkgYSByZWdpc3RlcmVkIGlkZW50aXR5IHByb3ZpZGVyLiBBIDQwNCBpbmRpY2F0ZXMgdGhlIGRvbWFpbiBpcyBub3QgbWFuYWdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG9yIGVtYWlsIGFkZHJlc3MgdG8gbG9va3VwLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb29rdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgbG9va3VwSWRlbnRpdHlQcm92aWRlcihkb21haW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9va3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9va3VwUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXIvbG9va3VwJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2RvbWFpbicsIGRvbWFpbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZpZXMgYSB0ZW1wb3JhbCB1c2VyIGFjdGlvbiBieSBjaGFuZ2luZyB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgYWN0aW9uIGFuZCBvcHRpb25hbGx5IGFkZGluZyBhIGNvbW1lbnQgdG8gdGhlXG4gICAqIGFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY3Rpb25JZCBUaGUgSWQgb2YgdGhlIGFjdGlvbiB0byBtb2RpZnkuIFRoaXMgaXMgdGVjaG5pY2FsbHkgdGhlIHVzZXIgYWN0aW9uIGxvZyBpZC5cbiAgICogQHBhcmFtIHtBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kaWZpY2F0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgbW9kaWZ5QWN0aW9uKGFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGEgbG9naW4gcmVxdWVzdCB1c2luZyBhIHBhc3N3b3JkbGVzcyBjb2RlXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0fSByZXF1ZXN0IFRoZSBwYXNzd29yZGxlc3MgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjb21wbGV0ZSBsb2dpbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcGFzc3dvcmRsZXNzTG9naW4ocmVxdWVzdDogUGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9wYXNzd29yZGxlc3MvbG9naW4nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIGF1dGhlbnRpY2F0aW9uIEFQSSBrZXkgYnkgZ2l2ZW4gaWRcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIGtleS4gSWYgbm90IHByb3ZpZGVkIGEgc2VjdXJlIHJhbmRvbSBhcGkga2V5IHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgKiBAcGFyYW0ge0FQSUtleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY3JlYXRlIHRoZSBBUElLZXkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEFQSUtleShrZXlJZDogVVVJRCwgcmVxdWVzdDogQVBJS2V5UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBhcHBsaWNhdGlvbiByb2xlIHdpdGggdGhlIGdpdmVuIGlkIGZvciB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgdGhlIHJvbGUgYmVsb25ncyB0by5cbiAgICogQHBhcmFtIHtVVUlEfSByb2xlSWQgVGhlIElkIG9mIHRoZSByb2xlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgcm9sZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hBcHBsaWNhdGlvblJvbGUoYXBwbGljYXRpb25JZDogVVVJRCwgcm9sZUlkOiBVVUlELCByZXF1ZXN0OiBBcHBsaWNhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChcInJvbGVcIilcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHJvbGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGNvbm5lY3RvciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3RvciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Q29ubmVjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBjb25uZWN0b3IgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaENvbm5lY3Rvcihjb25uZWN0b3JJZDogVVVJRCwgcmVxdWVzdDogQ29ubmVjdG9yUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Q29ubmVjdG9yUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25uZWN0b3InKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29ubmVjdG9ySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQQVRDSFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzLCB2aWEgUEFUQ0gsIHRoZSBjb25zZW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0NvbnNlbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hDb25zZW50KGNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogQ29uc2VudFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGVtYWlsIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBlbWFpbCB0ZW1wbGF0ZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBFbWFpbFRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIEVudGl0eSBUeXBlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSBUeXBlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyBFbnRpdHkgVHlwZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGdyb3VwIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGdyb3VwSWQgVGhlIElkIG9mIHRoZSBncm91cCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7R3JvdXBSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGdyb3VwIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaEdyb3VwKGdyb3VwSWQ6IFVVSUQsIHJlcXVlc3Q6IEdyb3VwUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtJZGVudGl0eVByb3ZpZGVyUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSB1cGRhdGVkIGlkZW50aXR5IHByb3ZpZGVyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgYXZhaWxhYmxlIGludGVncmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJbnRlZ3JhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgaW50ZWdyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoSW50ZWdyYXRpb25zKHJlcXVlc3Q6IEludGVncmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SW50ZWdyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJbnRlZ3JhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaW50ZWdyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgbGFtYmRhIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGxhbWJkYUlkIFRoZSBJZCBvZiB0aGUgbGFtYmRhIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtMYW1iZGFSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IGxhbWJkYSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoTGFtYmRhKGxhbWJkYUlkOiBVVUlELCByZXF1ZXN0OiBMYW1iZGFSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2FnZVRlbXBsYXRlSWQgVGhlIElkIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IG1lc3NhZ2UgdGVtcGxhdGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaE1lc3NhZ2VUZW1wbGF0ZShtZXNzYWdlVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgbWVzc2VuZ2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIFRoZSBJZCBvZiB0aGUgbWVzc2VuZ2VyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtNZXNzZW5nZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IG1lc3NlbmdlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoTWVzc2VuZ2VyKG1lc3NlbmdlcklkOiBVVUlELCByZXF1ZXN0OiBNZXNzZW5nZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzZW5nZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NlbmdlcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChtZXNzZW5nZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gaWQgYW5kIHRoZSBhcHBsaWNhdGlvbiBkZWZpbmVkIGluIHRoZSByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgd2hvc2UgcmVnaXN0cmF0aW9uIGlzIGdvaW5nIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7UmVnaXN0cmF0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIHJlcXVlc3Q6IFJlZ2lzdHJhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgc3lzdGVtIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcGF0Y2hTeXN0ZW1Db25maWd1cmF0aW9uKHJlcXVlc3Q6IFN5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdGVuYW50IHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRlbmFudElkIFRoZSBJZCBvZiB0aGUgdGVuYW50IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtUZW5hbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHRlbmFudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVGVuYW50KHRlbmFudElkOiBVVUlELCByZXF1ZXN0OiBUZW5hbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RlbmFudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHRoZW1lIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHRoZW1lSWQgVGhlIElkIG9mIHRoZSB0aGVtZSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGhlbWVSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHRoZW1lIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFRoZW1lKHRoZW1lSWQ6IFVVSUQsIHJlcXVlc3Q6IFRoZW1lUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUaGVtZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGhlbWVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICBwYXRjaFVzZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdXNlciBhY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge1VzZXJBY3Rpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMganVzdCB0aGUgbmV3IHVzZXIgYWN0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlckFjdGlvbih1c2VyQWN0aW9uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUEFUQ0hcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcywgdmlhIFBBVENILCB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25SZWFzb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlckFjdGlvblJlYXNvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBqdXN0IHRoZSBuZXcgdXNlciBhY3Rpb24gcmVhc29uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlckFjdGlvblJlYXNvbih1c2VyQWN0aW9uUmVhc29uSWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJBY3Rpb25SZWFzb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25SZWFzb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMsIHZpYSBQQVRDSCwgYSBzaW5nbGUgVXNlciBjb25zZW50IGJ5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgVGhlIFVzZXIgQ29uc2VudCBJZFxuICAgKiBAcGFyYW0ge1VzZXJDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGp1c3QgdGhlIG5ldyB1c2VyIGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHBhdGNoVXNlckNvbnNlbnQodXNlckNvbnNlbnRJZDogVVVJRCwgcmVxdWVzdDogVXNlckNvbnNlbnRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckNvbnNlbnRJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBBVENIXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZhdGVzIHRoZSBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdG8gcmVhY3RpdmF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVhY3RpdmF0ZUFwcGxpY2F0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwcGxpY2F0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdyZWFjdGl2YXRlJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVhY3RpdmF0ZXMgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byByZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlYWN0aXZhdGVVc2VyKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncmVhY3RpdmF0ZScsIHRydWUpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZhdGVzIHRoZSB1c2VyIGFjdGlvbiB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uSWQgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbiB0byByZWFjdGl2YXRlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlYWN0aXZhdGVVc2VyQWN0aW9uKHVzZXJBY3Rpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlYWN0aXZhdGUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGUgYSBVc2VyIHRvIEZ1c2lvbkF1dGggdXNpbmcgSldUIGlzc3VlZCBmcm9tIGFub3RoZXIgSWRlbnRpdHkgUHJvdmlkZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVjb25jaWxlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgZGF0YSB0byByZWNvbmNpbGUgdGhlIFVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlY29uY2lsZUpXVChyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyTG9naW5SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPExvZ2luUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVjb25jaWxlJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBhIHJlZnJlc2ggb2YgdGhlIEVudGl0eSBzZWFyY2ggaW5kZXguIFRoaXMgQVBJIGlzIG5vdCBnZW5lcmFsbHkgbmVjZXNzYXJ5IGFuZCB0aGUgc2VhcmNoIGluZGV4IHdpbGwgYmVjb21lIGNvbnNpc3RlbnQgaW4gYVxuICAgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLiBUaGVyZSBtYXkgYmUgc2NlbmFyaW9zIHdoZXJlIHlvdSBtYXkgd2lzaCB0byBtYW51YWxseSByZXF1ZXN0IGFuIGluZGV4IHJlZnJlc2guIE9uZSBleGFtcGxlIG1heSBiZSBcbiAgICogaWYgeW91IGFyZSB1c2luZyB0aGUgU2VhcmNoIEFQSSBvciBEZWxldGUgVGVuYW50IEFQSSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSBFbnRpdHkgQ3JlYXRlIGV0YywgeW91IG1heSB3aXNoIHRvIHJlcXVlc3QgYSByZWZyZXNoIHRvXG4gICAqICBlbnN1cmUgdGhlIGluZGV4IGltbWVkaWF0ZWx5IGN1cnJlbnQgYmVmb3JlIG1ha2luZyBhIHF1ZXJ5IHJlcXVlc3QgdG8gdGhlIHNlYXJjaCBpbmRleC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVmcmVzaEVudGl0eVNlYXJjaEluZGV4KCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS9zZWFyY2gnKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGEgcmVmcmVzaCBvZiB0aGUgVXNlciBzZWFyY2ggaW5kZXguIFRoaXMgQVBJIGlzIG5vdCBnZW5lcmFsbHkgbmVjZXNzYXJ5IGFuZCB0aGUgc2VhcmNoIGluZGV4IHdpbGwgYmVjb21lIGNvbnNpc3RlbnQgaW4gYVxuICAgKiByZWFzb25hYmxlIGFtb3VudCBvZiB0aW1lLiBUaGVyZSBtYXkgYmUgc2NlbmFyaW9zIHdoZXJlIHlvdSBtYXkgd2lzaCB0byBtYW51YWxseSByZXF1ZXN0IGFuIGluZGV4IHJlZnJlc2guIE9uZSBleGFtcGxlIG1heSBiZSBcbiAgICogaWYgeW91IGFyZSB1c2luZyB0aGUgU2VhcmNoIEFQSSBvciBEZWxldGUgVGVuYW50IEFQSSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgYSBVc2VyIENyZWF0ZSBldGMsIHlvdSBtYXkgd2lzaCB0byByZXF1ZXN0IGEgcmVmcmVzaCB0b1xuICAgKiAgZW5zdXJlIHRoZSBpbmRleCBpbW1lZGlhdGVseSBjdXJyZW50IGJlZm9yZSBtYWtpbmcgYSBxdWVyeSByZXF1ZXN0IHRvIHRoZSBzZWFyY2ggaW5kZXguXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlZnJlc2hVc2VyU2VhcmNoSW5kZXgoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdlbmVyYXRlcyBhbnkga2V5cyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBGdXNpb25BdXRoIFJlYWN0b3IuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJlZ2VuZXJhdGVSZWFjdG9yS2V5cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZWFjdG9yJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgdXNlciBmb3IgYW4gYXBwbGljYXRpb24uIElmIHlvdSBwcm92aWRlIHRoZSBVc2VyIGFuZCB0aGUgVXNlclJlZ2lzdHJhdGlvbiBvYmplY3Qgb24gdGhpcyByZXF1ZXN0LCBpdFxuICAgKiB3aWxsIGNyZWF0ZSB0aGUgdXNlciBhcyB3ZWxsIGFzIHJlZ2lzdGVyIHRoZW0gZm9yIHRoZSBhcHBsaWNhdGlvbi4gVGhpcyBpcyBjYWxsZWQgYSBGdWxsIFJlZ2lzdHJhdGlvbi4gSG93ZXZlciwgaWZcbiAgICogeW91IG9ubHkgcHJvdmlkZSB0aGUgVXNlclJlZ2lzdHJhdGlvbiBvYmplY3QsIHRoZW4gdGhlIHVzZXIgbXVzdCBhbHJlYWR5IGV4aXN0IGFuZCB0aGV5IHdpbGwgYmUgcmVnaXN0ZXJlZCBmb3IgdGhlXG4gICAqIGFwcGxpY2F0aW9uLiBUaGUgdXNlciBpZCBjYW4gYWxzbyBiZSBwcm92aWRlZCBhbmQgaXQgd2lsbCBlaXRoZXIgYmUgdXNlZCB0byBsb29rIHVwIGFuIGV4aXN0aW5nIHVzZXIgb3IgaXQgd2lsbCBiZVxuICAgKiB1c2VkIGZvciB0aGUgbmV3bHkgY3JlYXRlZCBVc2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgdXNlciBiZWluZyByZWdpc3RlcmVkIGZvciB0aGUgYXBwbGljYXRpb24gYW5kIG9wdGlvbmFsbHkgY3JlYXRlZC5cbiAgICogQHBhcmFtIHtSZWdpc3RyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgb3B0aW9uYWxseSBjb250YWlucyB0aGUgVXNlciBhbmQgbXVzdCBjb250YWluIHRoZSBVc2VyUmVnaXN0cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmVnaXN0ZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdHMgRWxhc3RpY3NlYXJjaCB0byBkZWxldGUgYW5kIHJlYnVpbGQgdGhlIGluZGV4IGZvciBGdXNpb25BdXRoIHVzZXJzIG9yIGVudGl0aWVzLiBCZSB2ZXJ5IGNhcmVmdWwgd2hlbiBydW5uaW5nIHRoaXMgcmVxdWVzdCBhcyBpdCB3aWxsIFxuICAgKiBpbmNyZWFzZSB0aGUgQ1BVIGFuZCBJL08gbG9hZCBvbiB5b3VyIGRhdGFiYXNlIHVudGlsIHRoZSBvcGVyYXRpb24gY29tcGxldGVzLiBHZW5lcmFsbHkgc3BlYWtpbmcgeW91IGRvIG5vdCBldmVyIG5lZWQgdG8gcnVuIHRoaXMgb3BlcmF0aW9uIHVubGVzcyBcbiAgICogaW5zdHJ1Y3RlZCBieSBGdXNpb25BdXRoIHN1cHBvcnQsIG9yIGlmIHlvdSBhcmUgbWlncmF0aW5nIGEgZGF0YWJhc2UgYW5vdGhlciBzeXN0ZW0gYW5kIHlvdSBhcmUgbm90IGJyaW5pbmcgYWxvbmcgdGhlIEVsYXN0aWNzZWFyY2ggaW5kZXguIFxuICAgKiBcbiAgICogWW91IGhhdmUgYmVlbiB3YXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVpbmRleFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgaW5kZXggbmFtZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmVpbmRleChyZXF1ZXN0OiBSZWluZGV4UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL3JlaW5kZXgnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgdXNlciBmcm9tIHRoZSBmYW1pbHkgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmFtaWx5SWQgVGhlIGlkIG9mIHRoZSBmYW1pbHkgdG8gcmVtb3ZlIHRoZSB1c2VyIGZyb20uXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBpZCBvZiB0aGUgdXNlciB0byByZW1vdmUgZnJvbSB0aGUgZmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZW1vdmVVc2VyRnJvbUZhbWlseShmYW1pbHlJZDogVVVJRCwgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmYW1pbHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmUtc2VuZHMgdGhlIHZlcmlmaWNhdGlvbiBlbWFpbCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj59XG4gICAqL1xuICByZXNlbmRFbWFpbFZlcmlmaWNhdGlvbihlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlFbWFpbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcmlmeUVtYWlsUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1lbWFpbCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1zZW5kcyB0aGUgdmVyaWZpY2F0aW9uIGVtYWlsIHRvIHRoZSB1c2VyLiBJZiB0aGUgQXBwbGljYXRpb24gaGFzIGNvbmZpZ3VyZWQgYSBzcGVjaWZpYyBlbWFpbCB0ZW1wbGF0ZSB0aGlzIHdpbGwgYmUgdXNlZFxuICAgKiBpbnN0ZWFkIG9mIHRoZSB0ZW5hbnQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSB1bmlxdWUgQXBwbGljYXRpb24gSWQgdG8gdXNlZCB0byByZXNvbHZlIGFuIGFwcGxpY2F0aW9uIHNwZWNpZmljIGVtYWlsIHRlbXBsYXRlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWwgVGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgdGhhdCBuZWVkcyBhIG5ldyB2ZXJpZmljYXRpb24gZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcmlmeUVtYWlsUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlc2VuZEVtYWlsVmVyaWZpY2F0aW9uV2l0aEFwcGxpY2F0aW9uVGVtcGxhdGUoYXBwbGljYXRpb25JZDogVVVJRCwgZW1haWw6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5RW1haWxSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlFbWFpbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1zZW5kcyB0aGUgYXBwbGljYXRpb24gcmVnaXN0cmF0aW9uIHZlcmlmaWNhdGlvbiBlbWFpbCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVtYWlsIFRoZSBlbWFpbCBhZGRyZXNzIG9mIHRoZSB1c2VyIHRoYXQgbmVlZHMgYSBuZXcgdmVyaWZpY2F0aW9uIGVtYWlsLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIElkIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBiZSB2ZXJpZmllZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJlc2VuZFJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbihlbWFpbDogc3RyaW5nLCBhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxWZXJpZnlSZWdpc3RyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvdmVyaWZ5LXJlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbiBhdXRoZW50aWNhdGlvbiBBUEkga2V5IGZvciB0aGUgZ2l2ZW4gaWRcbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBrZXlJZCBUaGUgSWQgb2YgdGhlIEFQSSBrZXkgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFQSUtleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFQSUtleShrZXlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QVBJS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QVBJS2V5UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcGkta2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBzaW5nbGUgYWN0aW9uIGxvZyAodGhlIGxvZyBvZiBhIHVzZXIgYWN0aW9uIHRoYXQgd2FzIHRha2VuIG9uIGEgdXNlciBwcmV2aW91c2x5KSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFjdGlvbklkIFRoZSBJZCBvZiB0aGUgYWN0aW9uIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb24oYWN0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWN0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkLiBUaGlzIHdpbGwgcmV0dXJuIGFsbCB0aW1lIGJhc2VkIGFjdGlvbnMgdGhhdCBhcmUgYWN0aXZlLFxuICAgKiBhbmQgaW5hY3RpdmUgYXMgd2VsbCBhcyBub24tdGltZSBiYXNlZCBhY3Rpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3Rpb25zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFjdGlvbnMgZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIElkIHRoYXQgYXJlIGN1cnJlbnRseSBwcmV2ZW50aW5nIHRoZSBVc2VyIGZyb20gbG9nZ2luZyBpbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyIHRvIGZldGNoIHRoZSBhY3Rpb25zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQWN0aW9uc1ByZXZlbnRpbmdMb2dpbih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigncHJldmVudGluZ0xvZ2luJywgdHJ1ZSlcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYWN0aW9ucyBmb3IgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZS5cbiAgICogQW4gYWN0aXZlIGFjdGlvbiBtZWFucyBvbmUgdGhhdCBpcyB0aW1lIGJhc2VkIGFuZCBoYXMgbm90IGJlZW4gY2FuY2VsZWQsIGFuZCBoYXMgbm90IGVuZGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIgdG8gZmV0Y2ggdGhlIGFjdGlvbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBY3Rpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBY3RpdmVBY3Rpb25zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QWN0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2FjdGlvbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGFwcGxpY2F0aW9uIGZvciB0aGUgZ2l2ZW4gaWQgb3IgYWxsIG9mIHRoZSBhcHBsaWNhdGlvbnMgaWYgdGhlIGlkIGlzIG51bGwuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVBcHBsaWNhdGlvbihhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgYXBwbGljYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUFwcGxpY2F0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8QXBwbGljYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBhdWRpdCBsb2cgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGF1ZGl0TG9nSWQgVGhlIElkIG9mIHRoZSBhdWRpdCBsb2cgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEF1ZGl0TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQXVkaXRMb2coYXVkaXRMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBdWRpdExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEF1ZGl0TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vYXVkaXQtbG9nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGF1ZGl0TG9nSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY29ubmVjdG9yIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbm5lY3RvcklkIFRoZSBJZCBvZiB0aGUgY29ubmVjdG9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25uZWN0b3JSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChjb25uZWN0b3JJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29ubmVjdG9ycy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29ubmVjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlQ29ubmVjdG9ycygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Nvbm5lY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgQ29uc2VudCBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGNvbnNlbnRJZCBUaGUgSWQgb2YgdGhlIGNvbnNlbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVDb25zZW50KGNvbnNlbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbnNlbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY29uc2VudC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUNvbnNlbnRzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9jb25zZW50JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQgYmV0d2VlbiB0aGUgdHdvIGluc3RhbnRzLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5XG4gICAqIHJldHVybiB0aGUgZGFpbHkgYWN0aXZlIGNvdW50cyBmb3IgdGhhdCBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIChPcHRpb25hbCkgVGhlIGFwcGxpY2F0aW9uIGlkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQgVGhlIHN0YXJ0IGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIGluc3RhbnQgYXMgVVRDIG1pbGxpc2Vjb25kcyBzaW5jZSBFcG9jaC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRGFpbHlBY3RpdmVSZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PERhaWx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L2RhaWx5LWFjdGl2ZS11c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBlbWFpbCB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBlbWFpbCB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW1haWxUZW1wbGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHByZXZpZXcgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LiBUaGlzIGFsbG93cyB5b3UgdG8gcHJldmlldyBhbiBlbWFpbCB0ZW1wbGF0ZSB0aGF0XG4gICAqIGhhc24ndCBiZWVuIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSB5ZXQuIFRoZSBlbnRpcmUgZW1haWwgdGVtcGxhdGUgZG9lcyBub3QgbmVlZCB0byBiZSBwcm92aWRlZCBvbiB0aGUgcmVxdWVzdC4gVGhpc1xuICAgKiB3aWxsIGNyZWF0ZSB0aGUgcHJldmlldyBiYXNlZCBvbiB3aGF0ZXZlciBpcyBnaXZlbi5cbiAgICpcbiAgICogQHBhcmFtIHtQcmV2aWV3UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBlbWFpbCB0ZW1wbGF0ZSBhbmQgb3B0aW9uYWxseSBhIGxvY2FsZSB0byByZW5kZXIgaXQgaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbWFpbFRlbXBsYXRlUHJldmlldyhyZXF1ZXN0OiBQcmV2aWV3UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHJldmlld1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFByZXZpZXdSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlL3ByZXZpZXcnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBlbWFpbCB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbWFpbFRlbXBsYXRlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVtYWlsVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbWFpbFRlbXBsYXRlUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW1haWwvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEVudGl0eSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eUlkIFRoZSBJZCBvZiB0aGUgRW50aXR5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbnRpdHkoZW50aXR5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYW4gRW50aXR5IEdyYW50IGZvciB0aGUgZ2l2ZW4gRW50aXR5IGFuZCBVc2VyL0VudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlJZCBUaGUgSWQgb2YgdGhlIEVudGl0eS5cbiAgICogQHBhcmFtIHtVVUlEfSByZWNpcGllbnRFbnRpdHlJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgRW50aXR5IHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSBVc2VyIHRoYXQgdGhlIEVudGl0eSBHcmFudCBpcyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRW50aXR5R3JhbnQoZW50aXR5SWQ6IFVVSUQsIHJlY2lwaWVudEVudGl0eUlkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5R3JhbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChlbnRpdHlJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwiZ3JhbnRcIilcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3JlY2lwaWVudEVudGl0eUlkJywgcmVjaXBpZW50RW50aXR5SWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRW50aXR5IFR5cGUgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBlbnRpdHlUeXBlSWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgVHlwZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZW50aXR5VHlwZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBFbnRpdHkgVHlwZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVFbnRpdHlUeXBlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVR5cGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxFbnRpdHlUeXBlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvdHlwZScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBldmVudCBsb2cgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV2ZW50TG9nSWQgVGhlIElkIG9mIHRoZSBldmVudCBsb2cgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEV2ZW50TG9nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRXZlbnRMb2coZXZlbnRMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEV2ZW50TG9nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vZXZlbnQtbG9nJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGV2ZW50TG9nSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGZhbWlsaWVzIHRoYXQgYSB1c2VyIGJlbG9uZ3MgdG8uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBVc2VyJ3MgaWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRmFtaWxpZXModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGYW1pbHlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseScpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIG1lbWJlcnMgb2YgYSBmYW1pbHkgYnkgdGhlIHVuaXF1ZSBGYW1pbHkgSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZmFtaWx5SWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgRmFtaWx5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGYW1pbHlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGYW1pbHlNZW1iZXJzQnlGYW1pbHlJZChmYW1pbHlJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RmFtaWx5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RmFtaWx5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9mYW1pbHknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmFtaWx5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZm9ybSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmb3JtSWQgVGhlIElkIG9mIHRoZSBmb3JtLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRm9ybShmb3JtSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChmb3JtSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZm9ybSBmaWVsZCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBmaWVsZElkIFRoZSBJZCBvZiB0aGUgZm9ybSBmaWVsZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlRm9ybUZpZWxkKGZpZWxkSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEZvcm1GaWVsZFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2Zvcm0vZmllbGQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZmllbGRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZm9ybXMgZmllbGRzXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUZvcm1GaWVsZHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxGb3JtRmllbGRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtRmllbGRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZm9ybXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVGb3JtcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZm9ybScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgZ3JvdXAgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBncm91cElkIFRoZSBJZCBvZiB0aGUgZ3JvdXAuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlR3JvdXAoZ3JvdXBJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoZ3JvdXBJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgZ3JvdXBzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUdyb3VwcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEdyb3VwUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8R3JvdXBSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpcEFjY2Vzc0NvbnRyb2xMaXN0SWQgVGhlIElkIG9mIHRoZSBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSVBBY2Nlc3NDb250cm9sTGlzdChpcEFjY2Vzc0NvbnRyb2xMaXN0SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlwQWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgdGhlIGdpdmVuIGlkIG9yIGFsbCBvZiB0aGUgaWRlbnRpdHkgcHJvdmlkZXJzIGlmIHRoZSBpZCBpcyBudWxsLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGlkZW50aXR5UHJvdmlkZXJJZCBUaGUgaWRlbnRpdHkgcHJvdmlkZXIgSWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJZGVudGl0eVByb3ZpZGVyKGlkZW50aXR5UHJvdmlkZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIG9uZSBvciBtb3JlIGlkZW50aXR5IHByb3ZpZGVyIGZvciB0aGUgZ2l2ZW4gdHlwZS4gRm9yIHR5cGVzIHN1Y2ggYXMgR29vZ2xlLCBGYWNlYm9vaywgVHdpdHRlciBhbmQgTGlua2VkSW4sIG9ubHkgYSBzaW5nbGUgXG4gICAqIGlkZW50aXR5IHByb3ZpZGVyIGNhbiBleGlzdC4gRm9yIHR5cGVzIHN1Y2ggYXMgT3BlbklEIENvbm5lY3QgYW5kIFNBTUx2MiBtb3JlIHRoYW4gb25lIGlkZW50aXR5IHByb3ZpZGVyIGNhbiBiZSBjb25maWd1cmVkIHNvIHRoaXMgcmVxdWVzdCBcbiAgICogbWF5IHJldHVybiBtdWx0aXBsZSBpZGVudGl0eSBwcm92aWRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclR5cGV9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSWRlbnRpdHlQcm92aWRlckJ5VHlwZSh0eXBlOiBJZGVudGl0eVByb3ZpZGVyVHlwZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3R5cGUnLCB0eXBlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBpZGVudGl0eSBwcm92aWRlcnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVJZGVudGl0eVByb3ZpZGVycygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBhY3Rpb25zIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZCB0aGF0IGFyZSBjdXJyZW50bHkgaW5hY3RpdmUuXG4gICAqIEFuIGluYWN0aXZlIGFjdGlvbiBtZWFucyBvbmUgdGhhdCBpcyB0aW1lIGJhc2VkIGFuZCBoYXMgYmVlbiBjYW5jZWxlZCBvciBoYXMgZXhwaXJlZCwgb3IgaXMgbm90IHRpbWUgYmFzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byBmZXRjaCB0aGUgYWN0aW9ucyBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUluYWN0aXZlQWN0aW9ucyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFjdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYWN0aXZlJywgZmFsc2UpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBjdXJyZW50bHkgaW5hY3RpdmUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW5hY3RpdmVBcHBsaWNhdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaW5hY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSB1c2VyIGFjdGlvbnMgdGhhdCBhcmUgY3VycmVudGx5IGluYWN0aXZlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW5hY3RpdmVVc2VyQWN0aW9ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaW5hY3RpdmUnLCB0cnVlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGF2YWlsYWJsZSBpbnRlZ3JhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSW50ZWdyYXRpb24oKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJbnRlZ3JhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEludGVncmF0aW9uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaW50ZWdyYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIFB1YmxpYyBLZXkgY29uZmlndXJlZCBmb3IgdmVyaWZ5aW5nIEpTT04gV2ViIFRva2VucyAoSldUKSBieSB0aGUga2V5IElkIChraWQpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5SWQgVGhlIElkIG9mIHRoZSBwdWJsaWMga2V5IChraWQpLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVKV1RQdWJsaWNLZXkoa2V5SWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UHVibGljS2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UHVibGljS2V5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3B1YmxpYy1rZXknKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigna2lkJywga2V5SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgUHVibGljIEtleSBjb25maWd1cmVkIGZvciB2ZXJpZnlpbmcgdGhlIEpTT04gV2ViIFRva2VucyAoSldUKSBpc3N1ZWQgYnkgdGhlIExvZ2luIEFQSSBieSB0aGUgQXBwbGljYXRpb24gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgQXBwbGljYXRpb24gZm9yIHdoaWNoIHRoaXMga2V5IGlzIHVzZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUpXVFB1YmxpY0tleUJ5QXBwbGljYXRpb25JZChhcHBsaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPFB1YmxpY0tleVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9wdWJsaWMta2V5JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIFB1YmxpYyBLZXlzIGNvbmZpZ3VyZWQgZm9yIHZlcmlmeWluZyBKU09OIFdlYiBUb2tlbnMgKEpXVCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFB1YmxpY0tleVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUpXVFB1YmxpY0tleXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQdWJsaWNLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxQdWJsaWNLZXlSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcHVibGljLWtleScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgcHVibGljIGtleXMgdXNlZCBieSBGdXNpb25BdXRoIHRvIGNyeXB0b2dyYXBoaWNhbGx5IHZlcmlmeSBKV1RzIHVzaW5nIHRoZSBKU09OIFdlYiBLZXkgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxKV0tTUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlSnNvbldlYktleVNldCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXS1NSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxKV0tTUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy8ud2VsbC1rbm93bi9qd2tzLmpzb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGtleSBmb3IgdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGtleUlkIFRoZSBJZCBvZiB0aGUga2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVLZXkoa2V5SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBrZXlzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVLZXlzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8S2V5UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8S2V5UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5JylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsYW1iZGEgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCBUaGUgSWQgb2YgdGhlIGxhbWJkYS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTGFtYmRhKGxhbWJkYUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMYW1iZGFSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMYW1iZGFSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChsYW1iZGFJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbGFtYmRhcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTGFtYmRhcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExhbWJkYVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2xhbWJkYScpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGxhbWJkYXMgZm9yIHRoZSBwcm92aWRlZCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge0xhbWJkYVR5cGV9IHR5cGUgVGhlIHR5cGUgb2YgdGhlIGxhbWJkYSB0byByZXR1cm4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExhbWJkYVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZUxhbWJkYXNCeVR5cGUodHlwZTogTGFtYmRhVHlwZSk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbGFtYmRhJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3R5cGUnLCB0eXBlKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHkgcmV0dXJuIHRoZVxuICAgKiBsb2dpbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTG9naW5SZXBvcnQoYXBwbGljYXRpb25JZDogVVVJRCwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TG9naW5SZXBvcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC9sb2dpbicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgZG9uJ3Qgc3BlY2lmeSB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIG9mIHRoZSBtZXNzYWdlIHRlbXBsYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCAoT3B0aW9uYWwpIFRoZSBJZCBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NhZ2VUZW1wbGF0ZUlkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcHJldmlldyBvZiB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCwgbm9ybWFsaXplZCB0byBhIGdpdmVuIGxvY2FsZS5cbiAgICpcbiAgICogQHBhcmFtIHtQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSBlbWFpbCB0ZW1wbGF0ZSBhbmQgb3B0aW9uYWxseSBhIGxvY2FsZSB0byByZW5kZXIgaXQgaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzYWdlVGVtcGxhdGVQcmV2aWV3KHJlcXVlc3Q6IFByZXZpZXdNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UHJldmlld01lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2FnZS90ZW1wbGF0ZS9wcmV2aWV3JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgbWVzc2FnZSB0ZW1wbGF0ZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NhZ2VUZW1wbGF0ZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NhZ2VUZW1wbGF0ZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzYWdlL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtZXNzZW5nZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gbWVzc2VuZ2VySWQgVGhlIElkIG9mIHRoZSBtZXNzZW5nZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1lc3NlbmdlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZU1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KG1lc3NlbmdlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYWxsIHRoZSBtZXNzZW5nZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzZW5nZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVNZXNzZW5nZXJzKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvbWVzc2VuZ2VyJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBtb250aGx5IGFjdGl2ZSB1c2VyIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMuIElmIHlvdSBzcGVjaWZ5IGFuIGFwcGxpY2F0aW9uIGlkLCBpdCB3aWxsIG9ubHlcbiAgICogcmV0dXJuIHRoZSBtb250aGx5IGFjdGl2ZSBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlTW9udGhseUFjdGl2ZVJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TW9udGhseUFjdGl2ZVVzZXJSZXBvcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNb250aGx5QWN0aXZlVXNlclJlcG9ydFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVwb3J0L21vbnRobHktYWN0aXZlLXVzZXInKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIE9hdXRoMiBjb25maWd1cmF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24gZm9yIHRoZSBnaXZlbiBBcHBsaWNhdGlvbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgQXBwbGljYXRpb24gdG8gcmV0cmlldmUgT0F1dGggY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8T0F1dGhDb25maWd1cmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlT2F1dGhDb25maWd1cmF0aW9uKGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwib2F1dGgtY29uZmlndXJhdGlvblwiKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB3ZWxsIGtub3duIE9wZW5JRCBDb25maWd1cmF0aW9uIEpTT04gZG9jdW1lbnRcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8T3BlbklkQ29uZmlndXJhdGlvbj4+fVxuICAgKi9cbiAgcmV0cmlldmVPcGVuSWRDb25maWd1cmF0aW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8T3BlbklkQ29uZmlndXJhdGlvbj4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxPcGVuSWRDb25maWd1cmF0aW9uLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHBhc3N3b3JkIHZhbGlkYXRpb24gcnVsZXMgZm9yIGEgc3BlY2lmaWMgdGVuYW50LiBUaGlzIG1ldGhvZCByZXF1aXJlcyBhIHRlbmFudElkIHRvIGJlIHByb3ZpZGVkIFxuICAgKiB0aHJvdWdoIHRoZSB1c2Ugb2YgYSBUZW5hbnQgc2NvcGVkIEFQSSBrZXkgb3IgYW4gSFRUUCBoZWFkZXIgWC1GdXNpb25BdXRoLVRlbmFudElkIHRvIHNwZWNpZnkgdGhlIFRlbmFudCBJZC5cbiAgICogXG4gICAqIFRoaXMgQVBJIGRvZXMgbm90IHJlcXVpcmUgYW4gQVBJIGtleS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVQYXNzd29yZFZhbGlkYXRpb25SdWxlcygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQvcGFzc3dvcmQtdmFsaWRhdGlvbi1ydWxlcycpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcGFzc3dvcmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgYSBzcGVjaWZpYyB0ZW5hbnQuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBkb2VzIG5vdCByZXF1aXJlIGFuIEFQSSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNXaXRoVGVuYW50SWQodGVuYW50SWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UGFzc3dvcmRWYWxpZGF0aW9uUnVsZXNSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQvcGFzc3dvcmQtdmFsaWRhdGlvbi1ydWxlcycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0ZW5hbnRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgY2hpbGRyZW4gZm9yIHRoZSBnaXZlbiBwYXJlbnQgZW1haWwgYWRkcmVzcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudEVtYWlsIFRoZSBlbWFpbCBvZiB0aGUgcGFyZW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxQZW5kaW5nUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUGVuZGluZ0NoaWxkcmVuKHBhcmVudEVtYWlsOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFBlbmRpbmdSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxQZW5kaW5nUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL2ZhbWlseS9wZW5kaW5nJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3BhcmVudEVtYWlsJywgcGFyZW50RW1haWwpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgRnVzaW9uQXV0aCBSZWFjdG9yIG1ldHJpY3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlYWN0b3JNZXRyaWNzUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVhY3Rvck1ldHJpY3MoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yTWV0cmljc1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlYWN0b3JNZXRyaWNzUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3Rvci9tZXRyaWNzJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBGdXNpb25BdXRoIFJlYWN0b3Igc3RhdHVzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWFjdG9yUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlUmVhY3RvclN0YXR1cygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlYWN0b3JSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWFjdG9yUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvcmVhY3RvcicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFzdCBudW1iZXIgb2YgbG9naW4gcmVjb3Jkcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCBUaGUgaW5pdGlhbCByZWNvcmQuIGUuZy4gMCBpcyB0aGUgbGFzdCBsb2dpbiwgMTAwIHdpbGwgYmUgdGhlIDEwMHRoIG1vc3QgcmVjZW50IGxvZ2luLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbGltaXQgKE9wdGlvbmFsLCBkZWZhdWx0cyB0byAxMCkgVGhlIG51bWJlciBvZiByZWNvcmRzIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWNlbnRMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlY2VudExvZ2lucyhvZmZzZXQ6IG51bWJlciwgbGltaXQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxSZWNlbnRMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWNlbnQtbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignb2Zmc2V0Jywgb2Zmc2V0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignbGltaXQnLCBsaW1pdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4gYnkgdW5pcXVlIElkLiBUaGlzIGlzIG5vdCB0aGUgc2FtZSB0aGluZyBhcyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSByZWZyZXNoIHRva2VuLiBJZiB5b3UgaGF2ZSB0aGF0LCB5b3UgYWxyZWFkeSBoYXZlIHdoYXQgeW91IG5lZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdG9rZW5JZCBUaGUgSWQgb2YgdGhlIHRva2VuLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWZyZXNoVG9rZW5CeUlkKHRva2VuSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZnJlc2hUb2tlblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZnJlc2hUb2tlblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodG9rZW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VucyB0aGF0IGJlbG9uZyB0byB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWZyZXNoVG9rZW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVSZWZyZXNoVG9rZW5zKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVmcmVzaFRva2VuUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVmcmVzaFRva2VuUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciByZWdpc3RyYXRpb24gZm9yIHRoZSB1c2VyIHdpdGggdGhlIGdpdmVuIGlkIGFuZCB0aGUgZ2l2ZW4gYXBwbGljYXRpb24gaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlci5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlZ2lzdHJhdGlvbih1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFJlZ2lzdHJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSByZWdpc3RyYXRpb24gcmVwb3J0IGJldHdlZW4gdGhlIHR3byBpbnN0YW50cy4gSWYgeW91IHNwZWNpZnkgYW4gYXBwbGljYXRpb24gaWQsIGl0IHdpbGwgb25seSByZXR1cm5cbiAgICogdGhlIHJlZ2lzdHJhdGlvbiBjb3VudHMgZm9yIHRoYXQgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmQgVGhlIGVuZCBpbnN0YW50IGFzIFVUQyBtaWxsaXNlY29uZHMgc2luY2UgRXBvY2guXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlZ2lzdHJhdGlvblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVJlZ2lzdHJhdGlvblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignc3RhcnQnLCBzdGFydClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2VuZCcsIGVuZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHN0YXR1cyBvZiBhIHJlLWluZGV4IHByb2Nlc3MuIEEgc3RhdHVzIGNvZGUgb2YgMjAwIGluZGljYXRlcyB0aGUgcmUtaW5kZXggaXMgaW4gcHJvZ3Jlc3MsIGEgc3RhdHVzIGNvZGUgb2YgIFxuICAgKiA0MDQgaW5kaWNhdGVzIG5vIHJlLWluZGV4IGlzIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXRyaWV2ZVJlaW5kZXhTdGF0dXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vcmVpbmRleCcpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVTeXN0ZW1Db25maWd1cmF0aW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFN5c3RlbUNvbmZpZ3VyYXRpb25SZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0tY29uZmlndXJhdGlvbicpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdGVuYW50IGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGVuYW50SWQgVGhlIElkIG9mIHRoZSB0ZW5hbnQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHRlbmFudHMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFRlbmFudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRlbmFudHMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUZW5hbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxUZW5hbnRSZXNwb25zZSwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRoZW1lIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVRoZW1lKHRoZW1lSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRoZW1lUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGhlbWVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3RoZW1lJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHRoZW1lSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHRoZW1lcy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUaGVtZXMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdGhlbWUnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHRvdGFscyByZXBvcnQuIFRoaXMgY29udGFpbnMgYWxsIG9mIHRoZSB0b3RhbCBjb3VudHMgZm9yIGVhY2ggYXBwbGljYXRpb24gYW5kIHRoZSBnbG9iYWwgcmVnaXN0cmF0aW9uXG4gICAqIGNvdW50LlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUb3RhbHNSZXBvcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUb3RhbFJlcG9ydCgpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFRvdGFsc1JlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRvdGFsc1JlcG9ydFJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3JlcG9ydC90b3RhbHMnKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0d28tZmFjdG9yIHJlY292ZXJ5IGNvZGVzIGZvciBhIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byByZXRyaWV2ZSBUd28gRmFjdG9yIHJlY292ZXJ5IGNvZGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JSZWNvdmVyeUNvZGVSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JSZWNvdmVyeUNvZGVzKHVzZXJJZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yUmVjb3ZlcnlDb2RlUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3R3by1mYWN0b3IvcmVjb3ZlcnktY29kZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgdXNlcidzIHR3by1mYWN0b3Igc3RhdHVzLlxuICAgKiBcbiAgICogVGhpcyBjYW4gYmUgdXNlZCB0byBzZWUgaWYgYSB1c2VyIHdpbGwgbmVlZCB0byBjb21wbGV0ZSBhIHR3by1mYWN0b3IgY2hhbGxlbmdlIHRvIGNvbXBsZXRlIGEgbG9naW4sXG4gICAqIGFuZCBvcHRpb25hbGx5IGlkZW50aWZ5IHRoZSBzdGF0ZSBvZiB0aGUgdHdvLWZhY3RvciB0cnVzdCBhY3Jvc3MgdmFyaW91cyBhcHBsaWNhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VyIElkIHRvIHJldHJpZXZlIHRoZSBUd28tRmFjdG9yIHN0YXR1cy5cbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBvcHRpb25hbCBhcHBsaWNhdGlvbklkIHRvIHZlcmlmeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHR3b0ZhY3RvclRydXN0SWQgVGhlIG9wdGlvbmFsIHR3by1mYWN0b3IgdHJ1c3QgSWQgdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxUd29GYWN0b3JTdGF0dXNSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVUd29GYWN0b3JTdGF0dXModXNlcklkOiBVVUlELCBhcHBsaWNhdGlvbklkOiBVVUlELCB0d29GYWN0b3JUcnVzdElkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFR3b0ZhY3RvclN0YXR1c1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zdGF0dXMnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JUcnVzdElkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiBmb3IgdGhlIGdpdmVuIElkLiBJZiB5b3UgcGFzcyBpbiBudWxsIGZvciB0aGUgaWQsIHRoaXMgd2lsbCByZXR1cm4gYWxsIG9mIHRoZSB1c2VyXG4gICAqIGFjdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvbklkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB1c2VyIGFjdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCBvZiB0aGUgdXNlclxuICAgKiBhY3Rpb24gcmVhc29ucy5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQWN0aW9uUmVhc29uSWQgKE9wdGlvbmFsKSBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJBY3Rpb25SZWFzb24odXNlckFjdGlvblJlYXNvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uLXJlYXNvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VyQWN0aW9uUmVhc29uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHVzZXIgYWN0aW9uIHJlYXNvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQWN0aW9uUmVhc29ucygpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci1hY3Rpb24tcmVhc29uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGFsbCB0aGUgdXNlciBhY3Rpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckFjdGlvbnMoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckFjdGlvblJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGJ5IGEgY2hhbmdlIHBhc3N3b3JkIElkLiBUaGUgaW50ZW5kZWQgdXNlIG9mIHRoaXMgQVBJIGlzIHRvIHJldHJpZXZlIGEgdXNlciBhZnRlciB0aGUgZm9yZ290XG4gICAqIHBhc3N3b3JkIHdvcmtmbG93IGhhcyBiZWVuIGluaXRpYXRlZCBhbmQgeW91IG1heSBub3Qga25vdyB0aGUgdXNlcidzIGVtYWlsIG9yIHVzZXJuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2hhbmdlUGFzc3dvcmRJZCBUaGUgdW5pcXVlIGNoYW5nZSBwYXNzd29yZCBJZCB0aGF0IHdhcyBzZW50IHZpYSBlbWFpbCBvciByZXR1cm5lZCBieSB0aGUgRm9yZ290IFBhc3N3b3JkIEFQSS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUNoYW5nZVBhc3N3b3JkSWQoY2hhbmdlUGFzc3dvcmRJZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdjaGFuZ2VQYXNzd29yZElkJywgY2hhbmdlUGFzc3dvcmRJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlbWFpbCBUaGUgZW1haWwgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlFbWFpbChlbWFpbDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbWFpbCcsIGVtYWlsKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgZm9yIHRoZSBsb2dpbklkLiBUaGUgbG9naW5JZCBjYW4gYmUgZWl0aGVyIHRoZSB1c2VybmFtZSBvciB0aGUgZW1haWwuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSBlbWFpbCBvciB1c2VybmFtZSBvZiB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeUxvZ2luSWQobG9naW5JZDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1c2VyIGZvciB0aGUgZ2l2ZW4gdXNlcm5hbWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZSBUaGUgdXNlcm5hbWUgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQnlVc2VybmFtZSh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VybmFtZScsIHVzZXJuYW1lKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgYnkgYSB2ZXJpZmljYXRpb25JZC4gVGhlIGludGVuZGVkIHVzZSBvZiB0aGlzIEFQSSBpcyB0byByZXRyaWV2ZSBhIHVzZXIgYWZ0ZXIgdGhlIGZvcmdvdFxuICAgKiBwYXNzd29yZCB3b3JrZmxvdyBoYXMgYmVlbiBpbml0aWF0ZWQgYW5kIHlvdSBtYXkgbm90IGtub3cgdGhlIHVzZXIncyBlbWFpbCBvciB1c2VybmFtZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSB1bmlxdWUgdmVyaWZpY2F0aW9uIElkIHRoYXQgaGFzIGJlZW4gc2V0IG9uIHRoZSB1c2VyIG9iamVjdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJCeVZlcmlmaWNhdGlvbklkKHZlcmlmaWNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3ZlcmlmaWNhdGlvbklkJywgdmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbW1lbnRzIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIElkIG9mIHRoZSB1c2VyLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29tbWVudFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJDb21tZW50cyh1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb21tZW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VXNlckNvbW1lbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvY29tbWVudCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc2luZ2xlIFVzZXIgY29uc2VudCBieSBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VyQ29uc2VudElkIFRoZSBVc2VyIGNvbnNlbnQgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIGNvbnNlbnRzIGZvciBhIFVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBVc2VyJ3MgSWRcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyQ29uc2VudHModXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQ29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJDb25zZW50UmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgVXNlckluZm8gZW5kcG9pbnQgdG8gcmV0cmlldmUgVXNlciBDbGFpbXMgZnJvbSB0aGUgYWNjZXNzIHRva2VuIGlzc3VlZCBieSBGdXNpb25BdXRoLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VySW5mb0Zyb21BY2Nlc3NUb2tlbihlbmNvZGVkSldUOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxVc2VyUmVzcG9uc2UsIE9BdXRoRXJyb3I+KClcbiAgICAgICAgLndpdGhVcmkoJy9vYXV0aDIvdXNlcmluZm8nKVxuICAgICAgICAud2l0aEF1dGhvcml6YXRpb24oJ0JlYXJlciAnICsgZW5jb2RlZEpXVClcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgYSBzaW5nbGUgSWRlbnRpdHkgUHJvdmlkZXIgdXNlciAobGluaykuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWRlbnRpdHlQcm92aWRlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWRlbnRpdHlQcm92aWRlclVzZXJJZCBUaGUgdW5pcXVlIElkIG9mIHRoZSB1c2VyIGluIHRoZSAzcmQgcGFydHkgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIEZ1c2lvbkF1dGggdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyTGluayhpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ6IHN0cmluZywgdXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyTGlua1Jlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pZGVudGl0eS1wcm92aWRlci9saW5rJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJJZCcsIGlkZW50aXR5UHJvdmlkZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkZW50aXR5UHJvdmlkZXJVc2VySWQnLCBpZGVudGl0eVByb3ZpZGVyVXNlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhbGwgSWRlbnRpdHkgUHJvdmlkZXIgdXNlcnMgKGxpbmtzKSBmb3IgdGhlIHVzZXIuIFNwZWNpZnkgdGhlIG9wdGlvbmFsIGlkZW50aXR5UHJvdmlkZXJJZCB0byByZXRyaWV2ZSBsaW5rcyBmb3IgYSBwYXJ0aWN1bGFyIElkUC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgKE9wdGlvbmFsKSBUaGUgdW5pcXVlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlci4gU3BlY2lmeSB0aGlzIHZhbHVlIHRvIHJlZHVjZSB0aGUgbGlua3MgcmV0dXJuZWQgdG8gdGhvc2UgZm9yIGEgcGFydGljdWxhciBJZFAuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlVXNlckxpbmtzQnlVc2VySWQoaWRlbnRpdHlQcm92aWRlcklkOiBVVUlELCB1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlckxpbmtSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL2xpbmsnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRlbnRpdHlQcm92aWRlcklkJywgaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMgZm9yIGEgcGFydGljdWxhciB1c2VyIGJ5IElkLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSB1c2VySWQgaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMb2dpblJlcG9ydChhcHBsaWNhdGlvbklkOiBVVUlELCB1c2VySWQ6IFVVSUQsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdzdGFydCcsIHN0YXJ0KVxuICAgICAgICAud2l0aFBhcmFtZXRlcignZW5kJywgZW5kKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxvZ2luIHJlcG9ydCBiZXR3ZWVuIHRoZSB0d28gaW5zdGFudHMgZm9yIGEgcGFydGljdWxhciB1c2VyIGJ5IGxvZ2luIElkLiBJZiB5b3Ugc3BlY2lmeSBhbiBhcHBsaWNhdGlvbiBpZCwgaXQgd2lsbCBvbmx5IHJldHVybiB0aGVcbiAgICogbG9naW4gY291bnRzIGZvciB0aGF0IGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgKE9wdGlvbmFsKSBUaGUgYXBwbGljYXRpb24gaWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2dpbklkIFRoZSB1c2VySWQgaWQuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgaW5zdGFudCBhcyBVVEMgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj59XG4gICAqL1xuICByZXRyaWV2ZVVzZXJMb2dpblJlcG9ydEJ5TG9naW5JZChhcHBsaWNhdGlvbklkOiBVVUlELCBsb2dpbklkOiBzdHJpbmcsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxMb2dpblJlcG9ydFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PExvZ2luUmVwb3J0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9yZXBvcnQvbG9naW4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignYXBwbGljYXRpb25JZCcsIGFwcGxpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdsb2dpbklkJywgbG9naW5JZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3N0YXJ0Jywgc3RhcnQpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdlbmQnLCBlbmQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGFzdCBudW1iZXIgb2YgbG9naW4gcmVjb3JkcyBmb3IgYSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgSWQgb2YgdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXQgVGhlIGluaXRpYWwgcmVjb3JkLiBlLmcuIDAgaXMgdGhlIGxhc3QgbG9naW4sIDEwMCB3aWxsIGJlIHRoZSAxMDB0aCBtb3N0IHJlY2VudCBsb2dpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGxpbWl0IChPcHRpb25hbCwgZGVmYXVsdHMgdG8gMTApIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVjZW50TG9naW5SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyUmVjZW50TG9naW5zKHVzZXJJZDogVVVJRCwgb2Zmc2V0OiBudW1iZXIsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFJlY2VudExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVjZW50TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvcmVjZW50LWxvZ2luJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ29mZnNldCcsIG9mZnNldClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2xpbWl0JywgbGltaXQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlciBmb3IgdGhlIGdpdmVuIElkLiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB1c2UgYW4gQVBJIGtleSwgaW5zdGVhZCBpdCB1c2VzIGEgSlNPTiBXZWIgVG9rZW4gKEpXVCkgZm9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVVc2VyVXNpbmdKV1QoZW5jb2RlZEpXVDogc3RyaW5nKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8VXNlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlcicpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEZ1c2lvbkF1dGggdmVyc2lvbiBzdHJpbmcuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZlcnNpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVWZXJzaW9uKCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmVyc2lvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFZlcnNpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3N5c3RlbS92ZXJzaW9uJylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBXZWJBdXRobiBjcmVkZW50aWFsIGZvciB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gaWQgVGhlIElkIG9mIHRoZSBXZWJBdXRobiBjcmVkZW50aWFsLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJBdXRobkNyZWRlbnRpYWwoaWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgV2ViQXV0aG4gY3JlZGVudGlhbHMgZm9yIHRoZSBnaXZlbiB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCBUaGUgdXNlcidzIElELlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJBdXRobkNyZWRlbnRpYWxSZXNwb25zZT4+fVxuICAgKi9cbiAgcmV0cmlldmVXZWJBdXRobkNyZWRlbnRpYWxzRm9yVXNlcih1c2VySWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViYXV0aG4nKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcklkJywgdXNlcklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHdlYmhvb2sgZm9yIHRoZSBnaXZlbiBJZC4gSWYgeW91IHBhc3MgaW4gbnVsbCBmb3IgdGhlIGlkLCB0aGlzIHdpbGwgcmV0dXJuIGFsbCB0aGUgd2ViaG9va3MuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gd2ViaG9va0lkIChPcHRpb25hbCkgVGhlIElkIG9mIHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJob29rUmVzcG9uc2UsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhbGwgdGhlIHdlYmhvb2tzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+Pn1cbiAgICovXG4gIHJldHJpZXZlV2ViaG9va3MoKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3dlYmhvb2snKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIHJlZnJlc2ggdG9rZW5zLlxuICAgKiBcbiAgICogVXNhZ2UgZXhhbXBsZXM6XG4gICAqICAgLSBEZWxldGUgYSBzaW5nbGUgcmVmcmVzaCB0b2tlbiwgcGFzcyBpbiBvbmx5IHRoZSB0b2tlbi5cbiAgICogICAgICAgcmV2b2tlUmVmcmVzaFRva2VuKHRva2VuKVxuICAgKiBcbiAgICogICAtIERlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yIGEgdXNlciwgcGFzcyBpbiBvbmx5IHRoZSB1c2VySWQuXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbihudWxsLCB1c2VySWQpXG4gICAqIFxuICAgKiAgIC0gRGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IgYSB1c2VyIGZvciBhIHNwZWNpZmljIGFwcGxpY2F0aW9uLCBwYXNzIGluIGJvdGggdGhlIHVzZXJJZCBhbmQgdGhlIGFwcGxpY2F0aW9uSWQuXG4gICAqICAgICAgIHJldm9rZVJlZnJlc2hUb2tlbihudWxsLCB1c2VySWQsIGFwcGxpY2F0aW9uSWQpXG4gICAqIFxuICAgKiAgIC0gRGVsZXRlIGFsbCByZWZyZXNoIHRva2VucyBmb3IgYW4gYXBwbGljYXRpb25cbiAgICogICAgICAgcmV2b2tlUmVmcmVzaFRva2VuKG51bGwsIG51bGwsIGFwcGxpY2F0aW9uSWQpXG4gICAqIFxuICAgKiBOb3RlOiA8Y29kZT5udWxsPC9jb2RlPiBtYXkgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSBkZXBlbmRpbmcgdXBvbiB0aGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuXG4gICAqIFxuICAgKiBTZWUgYWxzbzogKG1ldGhvZCBuYW1lcyBtYXkgdmFyeSBieSBsYW5ndWFnZS4uLiBidXQgeW91J2xsIGZpZ3VyZSBpdCBvdXQpXG4gICAqIFxuICAgKiAgLSByZXZva2VSZWZyZXNoVG9rZW5CeUlkXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbkJ5VG9rZW5cbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkXG4gICAqICAtIHJldm9rZVJlZnJlc2hUb2tlbnNCeUFwcGxpY2F0aW9uSWRcbiAgICogIC0gcmV2b2tlUmVmcmVzaFRva2Vuc0J5VXNlcklkRm9yQXBwbGljYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuIChPcHRpb25hbCkgVGhlIHJlZnJlc2ggdG9rZW4gdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJJZCAoT3B0aW9uYWwpIFRoZSB1c2VyIGlkIHdob3NlIHRva2VucyB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCAoT3B0aW9uYWwpIFRoZSBhcHBsaWNhdGlvbiBpZCBvZiB0aGUgdG9rZW5zIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2VuKHRva2VuOiBzdHJpbmcsIHVzZXJJZDogVVVJRCwgYXBwbGljYXRpb25JZDogVVVJRCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndG9rZW4nLCB0b2tlbilcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4gYnkgdGhlIHVuaXF1ZSBJZC4gVGhlIHVuaXF1ZSBJZCBpcyBub3Qgc2Vuc2l0aXZlIGFzIGl0IGNhbm5vdCBiZSB1c2VkIHRvIG9idGFpbiBhbm90aGVyIEpXVC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0b2tlbklkIFRoZSB1bmlxdWUgSWQgb2YgdGhlIHRva2VuIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2VuQnlJZCh0b2tlbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0b2tlbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIGEgc2luZ2xlIHJlZnJlc2ggdG9rZW4gYnkgdXNpbmcgdGhlIGFjdHVhbCByZWZyZXNoIHRva2VuIHZhbHVlLiBUaGlzIHJlZnJlc2ggdG9rZW4gdmFsdWUgaXMgc2Vuc2l0aXZlLCBzbyAgYmUgY2FyZWZ1bCB3aXRoIHRoaXMgQVBJIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlbiBUaGUgcmVmcmVzaCB0b2tlbiB0byBkZWxldGUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHJldm9rZVJlZnJlc2hUb2tlbkJ5VG9rZW4odG9rZW46IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndG9rZW4nLCB0b2tlbilcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIGFsbCByZWZyZXNoIHRva2VucyB0aGF0IGJlbG9uZyB0byBhbiBhcHBsaWNhdGlvbiBieSBhcHBsaWNhdGlvbklkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlZnJlc2ggdG9rZW5zIGZvci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgcmV2b2tlUmVmcmVzaFRva2Vuc0J5QXBwbGljYXRpb25JZChhcHBsaWNhdGlvbklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdhcHBsaWNhdGlvbklkJywgYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJERUxFVEVcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV2b2tlIGFsbCByZWZyZXNoIHRva2VucyB0aGF0IGJlbG9uZyB0byBhIHVzZXIgYnkgdXNlciBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlciB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5zQnlVc2VySWQodXNlcklkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9qd3QvcmVmcmVzaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCd1c2VySWQnLCB1c2VySWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZSBhbGwgcmVmcmVzaCB0b2tlbnMgdGhhdCBiZWxvbmcgdG8gYSB1c2VyIGJ5IHVzZXIgSWQgZm9yIGEgc3BlY2lmaWMgYXBwbGljYXRpb24gYnkgYXBwbGljYXRpb25JZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB1c2VySWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgdXNlciB0aGF0IHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVmcmVzaCB0b2tlbnMgZm9yLlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwcGxpY2F0aW9uSWQgVGhlIHVuaXF1ZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgcmVmcmVzaCB0b2tlbnMgZm9yLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5zQnlVc2VySWRGb3JBcHBsaWNhdGlvbih1c2VySWQ6IFVVSUQsIGFwcGxpY2F0aW9uSWQ6IFVVSUQpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC9yZWZyZXNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ3VzZXJJZCcsIHVzZXJJZClcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2FwcGxpY2F0aW9uSWQnLCBhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkRFTEVURVwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXZva2VzIHJlZnJlc2ggdG9rZW5zIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgSlNPTiBib2R5LiBUaGUgaGFuZGxpbmcgZm9yIHRoaXMgbWV0aG9kIGlzIHRoZSBzYW1lIGFzIHRoZSByZXZva2VSZWZyZXNoVG9rZW4gbWV0aG9kXG4gICAqIGFuZCBpcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24geW91IHByb3ZpZGUgaW4gdGhlIFJlZnJlc2hEZWxldGVSZXF1ZXN0IG9iamVjdC4gU2VlIHRoYXQgbWV0aG9kIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlZnJlc2hUb2tlblJldm9rZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgaW5mb3JtYXRpb24gdXNlZCB0byByZXZva2UgdGhlIHJlZnJlc2ggdG9rZW5zLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VSZWZyZXNoVG9rZW5zV2l0aFJlcXVlc3QocmVxdWVzdDogUmVmcmVzaFRva2VuUmV2b2tlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvand0L3JlZnJlc2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldm9rZXMgYSBzaW5nbGUgVXNlciBjb25zZW50IGJ5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgVGhlIFVzZXIgQ29uc2VudCBJZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICByZXZva2VVc2VyQ29uc2VudCh1c2VyQ29uc2VudElkOiBVVUlEKTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIHZvaWQ+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiREVMRVRFXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBhdWRpdCBsb2dzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtBdWRpdExvZ1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoQXVkaXRMb2dzKHJlcXVlc3Q6IEF1ZGl0TG9nU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXVkaXRMb2dTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBdWRpdExvZ1NlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2F1ZGl0LWxvZy9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBlbnRpdGllcyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW50aXR5U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoRW50aXRpZXMocmVxdWVzdDogRW50aXR5U2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBlbnRpdGllcyBmb3IgdGhlIGdpdmVuIGlkcy4gSWYgYW55IGlkIGlzIGludmFsaWQsIGl0IGlzIGlnbm9yZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gaWRzIFRoZSBlbnRpdHkgaWRzIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFbnRpdGllc0J5SWRzKGlkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbnRpdHkvc2VhcmNoJylcbiAgICAgICAgLndpdGhQYXJhbWV0ZXIoJ2lkcycsIGlkcylcbiAgICAgICAgLndpdGhNZXRob2QoXCJHRVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgRW50aXR5IEdyYW50cyB3aXRoIHRoZSBzcGVjaWZpZWQgY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7RW50aXR5R3JhbnRTZWFyY2hSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0eUdyYW50cyhyZXF1ZXN0OiBFbnRpdHlHcmFudFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eUdyYW50U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5R3JhbnRTZWFyY2hSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS9ncmFudC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyB0aGUgZW50aXR5IHR5cGVzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaEVudGl0eVR5cGVzKHJlcXVlc3Q6IEVudGl0eVR5cGVTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8RW50aXR5VHlwZVNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5L3R5cGUvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIGV2ZW50IGxvZ3Mgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0V2ZW50TG9nU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1NlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hFdmVudExvZ3MocmVxdWVzdDogRXZlbnRMb2dTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxFdmVudExvZ1NlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEV2ZW50TG9nU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9zeXN0ZW0vZXZlbnQtbG9nL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIGdyb3VwIG1lbWJlcnMgd2l0aCB0aGUgc3BlY2lmaWVkIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0dyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hHcm91cE1lbWJlcnMocmVxdWVzdDogR3JvdXBNZW1iZXJTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cE1lbWJlclNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cC9tZW1iZXIvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgZ3JvdXBzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtHcm91cFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoR3JvdXBzKHJlcXVlc3Q6IEdyb3VwU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxHcm91cFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZ3JvdXAvc2VhcmNoJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoZXMgdGhlIElQIEFjY2VzcyBDb250cm9sIExpc3RzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICovXG4gIHNlYXJjaElQQWNjZXNzQ29udHJvbExpc3RzKHJlcXVlc3Q6IElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaXAtYWNsL3NlYXJjaCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaGVzIHRoZSBsb2dpbiByZWNvcmRzIHdpdGggdGhlIHNwZWNpZmllZCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtMb2dpblJlY29yZFNlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoTG9naW5SZWNvcmRzKHJlcXVlc3Q6IExvZ2luUmVjb3JkU2VhcmNoUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZWNvcmRTZWFyY2hSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxMb2dpblJlY29yZFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtL2xvZ2luLXJlY29yZC9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gaWRzLiBJZiBhbnkgaWQgaXMgaW52YWxpZCwgaXQgaXMgaWdub3JlZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBpZHMgVGhlIHVzZXIgaWRzIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gc2VhcmNoVXNlcnNCeUlkcywgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBzZWFyY2hVc2VycyhpZHM6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignaWRzJywgaWRzKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gaWRzLiBJZiBhbnkgaWQgaXMgaW52YWxpZCwgaXQgaXMgaWdub3JlZC5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBpZHMgVGhlIHVzZXIgaWRzIHRvIHNlYXJjaCBmb3IuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj59XG4gICAqL1xuICBzZWFyY2hVc2Vyc0J5SWRzKGlkczogQXJyYXk8c3RyaW5nPik6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U2VhcmNoUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3NlYXJjaCcpXG4gICAgICAgIC53aXRoUGFyYW1ldGVyKCdpZHMnLCBpZHMpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiR0VUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgdXNlcnMgZm9yIHRoZSBnaXZlbiBzZWFyY2ggY3JpdGVyaWEgYW5kIHBhZ2luYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U2VhcmNoUmVxdWVzdH0gcmVxdWVzdCBUaGUgc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uIGNvbnN0cmFpbnRzLiBGaWVsZHMgdXNlZDogaWRzLCBxdWVyeSwgcXVlcnlTdHJpbmcsIG51bWJlck9mUmVzdWx0cywgb3JkZXJCeSwgc3RhcnRSb3csXG4gICAqICAgIGFuZCBzb3J0RmllbGRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxTZWFyY2hSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VhcmNoVXNlcnNCeVF1ZXJ5KHJlcXVlc3Q6IFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXJzIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIGNyaXRlcmlhIGFuZCBwYWdpbmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1NlYXJjaFJlcXVlc3R9IHJlcXVlc3QgVGhlIHNlYXJjaCBjcml0ZXJpYSBhbmQgcGFnaW5hdGlvbiBjb25zdHJhaW50cy4gRmllbGRzIHVzZWQ6IGlkcywgcXVlcnksIHF1ZXJ5U3RyaW5nLCBudW1iZXJPZlJlc3VsdHMsIG9yZGVyQnksIHN0YXJ0Um93LFxuICAgKiAgICBhbmQgc29ydEZpZWxkcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U2VhcmNoUmVzcG9uc2U+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBzZWFyY2hVc2Vyc0J5UXVlcnksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgc2VhcmNoVXNlcnNCeVF1ZXJ5U3RyaW5nKHJlcXVlc3Q6IFNlYXJjaFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlYXJjaFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFNlYXJjaFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9zZWFyY2gnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGFuIGVtYWlsIHVzaW5nIGFuIGVtYWlsIHRlbXBsYXRlIGlkLiBZb3UgY2FuIG9wdGlvbmFsbHkgcHJvdmlkZSA8Y29kZT5yZXF1ZXN0RGF0YTwvY29kZT4gdG8gYWNjZXNzIGtleSB2YWx1ZVxuICAgKiBwYWlycyBpbiB0aGUgZW1haWwgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW1haWxUZW1wbGF0ZUlkIFRoZSBpZCBmb3IgdGhlIHRlbXBsYXRlLlxuICAgKiBAcGFyYW0ge1NlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBzZW5kIGVtYWlsIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgZW1haWwuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlbmRSZXNwb25zZT4+fVxuICAgKi9cbiAgc2VuZEVtYWlsKGVtYWlsVGVtcGxhdGVJZDogVVVJRCwgcmVxdWVzdDogU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFNlbmRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxTZW5kUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9lbWFpbC9zZW5kJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgb3V0IGFuIGVtYWlsIHRvIGEgcGFyZW50IHRoYXQgdGhleSBuZWVkIHRvIHJlZ2lzdGVyIGFuZCBjcmVhdGUgYSBmYW1pbHkgb3IgbmVlZCB0byBsb2cgaW4gYW5kIGFkZCBhIGNoaWxkIHRvIHRoZWlyIGV4aXN0aW5nIGZhbWlseS5cbiAgICpcbiAgICogQHBhcmFtIHtGYW1pbHlFbWFpbFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHBhcmVudCBlbWFpbC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgc2VuZEZhbWlseVJlcXVlc3RFbWFpbChyZXF1ZXN0OiBGYW1pbHlFbWFpbFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXIvZmFtaWx5L3JlcXVlc3QnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgcGFzc3dvcmRsZXNzIGF1dGhlbnRpY2F0aW9uIGNvZGUgaW4gYW4gZW1haWwgdG8gY29tcGxldGUgbG9naW4uXG4gICAqXG4gICAqIEBwYXJhbSB7UGFzc3dvcmRsZXNzU2VuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHBhc3N3b3JkbGVzcyBzZW5kIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCBhbiBlbWFpbCBjb250YWluaW5nIGEgY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgc2VuZFBhc3N3b3JkbGVzc0NvZGUocmVxdWVzdDogUGFzc3dvcmRsZXNzU2VuZFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3Bhc3N3b3JkbGVzcy9zZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhc3Npc3QgaW4gc2V0dGluZyB1cCBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIG9yIGRpc2FibGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtUd29GYWN0b3JTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlbmRUd29GYWN0b3JDb2RlRm9yRW5hYmxlRGlzYWJsZSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZShyZXF1ZXN0OiBUd29GYWN0b3JTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBhIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24gY29kZSB0byBhc3Npc3QgaW4gc2V0dGluZyB1cCBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIG9yIGRpc2FibGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtUd29GYWN0b3JTZW5kUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gc2VuZCB0aGUgY29kZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgc2VuZFR3b0ZhY3RvckNvZGVGb3JFbmFibGVEaXNhYmxlKHJlcXVlc3Q6IFR3b0ZhY3RvclNlbmRSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90d28tZmFjdG9yL3NlbmQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGEgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbiBjb2RlIHRvIGFsbG93IHRoZSBjb21wbGV0aW9uIG9mIFR3byBGYWN0b3IgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0d29GYWN0b3JJZCBUaGUgSWQgcmV0dXJuZWQgYnkgdGhlIExvZ2luIEFQSSBuZWNlc3NhcnkgdG8gY29tcGxldGUgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHNlbmRUd29GYWN0b3JDb2RlRm9yTG9naW5Vc2luZ01ldGhvZCwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICBzZW5kVHdvRmFjdG9yQ29kZUZvckxvZ2luKHR3b0ZhY3RvcklkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoSGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc2VuZCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0d29GYWN0b3JJZClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uIGNvZGUgdG8gYWxsb3cgdGhlIGNvbXBsZXRpb24gb2YgVHdvIEZhY3RvciBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR3b0ZhY3RvcklkIFRoZSBJZCByZXR1cm5lZCBieSB0aGUgTG9naW4gQVBJIG5lY2Vzc2FyeSB0byBjb21wbGV0ZSBUd28gRmFjdG9yIGF1dGhlbnRpY2F0aW9uLlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvclNlbmRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBUd28gRmFjdG9yIHNlbmQgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBzZW5kIHRoZSBUd28gRmFjdG9yIGNvZGUgdG8gdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHNlbmRUd29GYWN0b3JDb2RlRm9yTG9naW5Vc2luZ01ldGhvZCh0d29GYWN0b3JJZDogc3RyaW5nLCByZXF1ZXN0OiBUd29GYWN0b3JTZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9zZW5kJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHR3b0ZhY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWdpbnMgYSBsb2dpbiByZXF1ZXN0IGZvciBhIDNyZCBwYXJ0eSBsb2dpbiB0aGF0IHJlcXVpcmVzIHVzZXIgaW50ZXJhY3Rpb24gc3VjaCBhcyBIWVBSLlxuICAgKlxuICAgKiBAcGFyYW0ge0lkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgdGhpcmQtcGFydHkgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGZyb20gdGhlIHRoaXJkLXBhcnR5IGxvZ2luXG4gICAqICAgIHByb3ZpZGVycyB0aGF0IEZ1c2lvbkF1dGggdXNlcyB0byByZWNvbmNpbGUgdGhlIHVzZXIncyBhY2NvdW50LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydElkZW50aXR5UHJvdmlkZXJMb2dpbihyZXF1ZXN0OiBJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclN0YXJ0TG9naW5SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2lkZW50aXR5LXByb3ZpZGVyL3N0YXJ0JylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgYSBwYXNzd29yZGxlc3MgbG9naW4gcmVxdWVzdCBieSBnZW5lcmF0aW5nIGEgcGFzc3dvcmRsZXNzIGNvZGUuIFRoaXMgY29kZSBjYW4gYmUgc2VudCB0byB0aGUgVXNlciB1c2luZyB0aGUgU2VuZFxuICAgKiBQYXNzd29yZGxlc3MgQ29kZSBBUEkgb3IgdXNpbmcgYSBtZWNoYW5pc20gb3V0c2lkZSBvZiBGdXNpb25BdXRoLiBUaGUgcGFzc3dvcmRsZXNzIGxvZ2luIGlzIGNvbXBsZXRlZCBieSB1c2luZyB0aGUgUGFzc3dvcmRsZXNzIExvZ2luIEFQSSB3aXRoIHRoaXMgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIHtQYXNzd29yZGxlc3NTdGFydFJlcXVlc3R9IHJlcXVlc3QgVGhlIHBhc3N3b3JkbGVzcyBzdGFydCByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB1c2VkIHRvIGJlZ2luIHRoZSBwYXNzd29yZGxlc3MgbG9naW4gcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8UGFzc3dvcmRsZXNzU3RhcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRQYXNzd29yZGxlc3NMb2dpbihyZXF1ZXN0OiBQYXNzd29yZGxlc3NTdGFydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFBhc3N3b3JkbGVzc1N0YXJ0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UGFzc3dvcmRsZXNzU3RhcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3Bhc3N3b3JkbGVzcy9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgVHdvLUZhY3RvciBsb2dpbiByZXF1ZXN0IGJ5IGdlbmVyYXRpbmcgYSB0d28tZmFjdG9yIGlkZW50aWZpZXIuIFRoaXMgY29kZSBjYW4gdGhlbiBiZSBzZW50IHRvIHRoZSBUd28gRmFjdG9yIFNlbmQgXG4gICAqIEFQSSAoL2FwaS90d28tZmFjdG9yL3NlbmQpaW4gb3JkZXIgdG8gc2VuZCBhIG9uZS10aW1lIHVzZSBjb2RlIHRvIGEgdXNlci4gWW91IGNhbiBhbHNvIHVzZSBvbmUtdGltZSB1c2UgY29kZSByZXR1cm5lZCBcbiAgICogdG8gc2VuZCB0aGUgY29kZSBvdXQtb2YtYmFuZC4gVGhlIFR3by1GYWN0b3IgbG9naW4gaXMgY29tcGxldGVkIGJ5IG1ha2luZyBhIHJlcXVlc3QgdG8gdGhlIFR3by1GYWN0b3IgTG9naW4gXG4gICAqIEFQSSAoL2FwaS90d28tZmFjdG9yL2xvZ2luKS4gd2l0aCB0aGUgdHdvLWZhY3RvciBpZGVudGlmaWVyIGFuZCB0aGUgb25lLXRpbWUgdXNlIGNvZGUuXG4gICAqIFxuICAgKiBUaGlzIEFQSSBpcyBpbnRlbmRlZCB0byBhbGxvdyB5b3UgdG8gYmVnaW4gYSBUd28tRmFjdG9yIGxvZ2luIG91dHNpZGUgb2YgYSBub3JtYWwgbG9naW4gdGhhdCBvcmlnaW5hdGVkIGZyb20gdGhlIExvZ2luIEFQSSAoL2FwaS9sb2dpbikuXG4gICAqXG4gICAqIEBwYXJhbSB7VHdvRmFjdG9yU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSBUd28tRmFjdG9yIHN0YXJ0IHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gYmVnaW4gdGhlIFR3by1GYWN0b3IgbG9naW4gcmVxdWVzdC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VHdvRmFjdG9yU3RhcnRSZXNwb25zZT4+fVxuICAgKi9cbiAgc3RhcnRUd29GYWN0b3JMb2dpbihyZXF1ZXN0OiBUd29GYWN0b3JTdGFydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFR3b0ZhY3RvclN0YXJ0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VHdvRmFjdG9yU3RhcnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3R3by1mYWN0b3Ivc3RhcnQnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255IGJ5IGdlbmVyYXRpbmcgYSBuZXcgY2hhbGxlbmdlIGZvciB0aGUgdXNlclxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuU3RhcnRSZXF1ZXN0fSByZXF1ZXN0IEFuIG9iamVjdCBjb250YWluaW5nIGRhdGEgbmVjZXNzYXJ5IGZvciBzdGFydGluZyB0aGUgYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5TdGFydFJlc3BvbnNlPj59XG4gICAqL1xuICBzdGFydFdlYkF1dGhuTG9naW4ocmVxdWVzdDogV2ViQXV0aG5TdGFydFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYkF1dGhuU3RhcnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxXZWJBdXRoblN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255IGJ5IGdlbmVyYXRpbmcgYSBuZXcgY2hhbGxlbmdlIGZvciB0aGUgdXNlclxuICAgKlxuICAgKiBAcGFyYW0ge1dlYkF1dGhuUmVnaXN0ZXJTdGFydFJlcXVlc3R9IHJlcXVlc3QgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZGF0YSBuZWNlc3NhcnkgZm9yIHN0YXJ0aW5nIHRoZSByZWdpc3RyYXRpb24gY2VyZW1vbnlcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHN0YXJ0V2ViQXV0aG5SZWdpc3RyYXRpb24ocmVxdWVzdDogV2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8V2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS93ZWJhdXRobi9yZWdpc3Rlci9zdGFydCcpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGxvZ2luIHVzaW5nIGEgMkZBIGNoYWxsZW5nZVxuICAgKlxuICAgKiBAcGFyYW0ge1R3b0ZhY3RvckxvZ2luUmVxdWVzdH0gcmVxdWVzdCBUaGUgbG9naW4gcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNyZWRlbnRpYWxzIHVzZWQgdG8gbG9nIHRoZW0gaW4uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPExvZ2luUmVzcG9uc2U+Pn1cbiAgICovXG4gIHR3b0ZhY3RvckxvZ2luKHJlcXVlc3Q6IFR3b0ZhY3RvckxvZ2luUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TG9naW5SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxMb2dpblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdHdvLWZhY3Rvci9sb2dpbicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQT1NUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYW4gQVBJIGtleSBieSBnaXZlbiBpZFxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGFwaUtleUlkIFRoZSBJZCBvZiB0aGUgQVBJIGtleSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7QVBJS2V5UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIHVzZWQgdG8gY3JlYXRlIHRoZSBBUEkgS2V5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQVBJS2V5KGFwaUtleUlkOiBVVUlELCByZXF1ZXN0OiBBUElLZXlSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBUElLZXlSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBUElLZXlSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2FwaS1rZXknKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBpS2V5SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgYXBwbGljYXRpb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gYXBwbGljYXRpb25JZCBUaGUgSWQgb2YgdGhlIGFwcGxpY2F0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBcHBsaWNhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBhcHBsaWNhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlQXBwbGljYXRpb24oYXBwbGljYXRpb25JZDogVVVJRCwgcmVxdWVzdDogQXBwbGljYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxBcHBsaWNhdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEFwcGxpY2F0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9hcHBsaWNhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChhcHBsaWNhdGlvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGFwcGxpY2F0aW9uIHJvbGUgd2l0aCB0aGUgZ2l2ZW4gaWQgZm9yIHRoZSBhcHBsaWNhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhcHBsaWNhdGlvbklkIFRoZSBJZCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCB0aGUgcm9sZSBiZWxvbmdzIHRvLlxuICAgKiBAcGFyYW0ge1VVSUR9IHJvbGVJZCBUaGUgSWQgb2YgdGhlIHJvbGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0FwcGxpY2F0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHJvbGUgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEFwcGxpY2F0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUFwcGxpY2F0aW9uUm9sZShhcHBsaWNhdGlvbklkOiBVVUlELCByb2xlSWQ6IFVVSUQsIHJlcXVlc3Q6IEFwcGxpY2F0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8QXBwbGljYXRpb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxBcHBsaWNhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvYXBwbGljYXRpb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYXBwbGljYXRpb25JZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicm9sZVwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocm9sZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbm5lY3RvciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBjb25uZWN0b3JJZCBUaGUgSWQgb2YgdGhlIGNvbm5lY3RvciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Q29ubmVjdG9yUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCBvYmplY3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBjb25uZWN0b3IgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVDb25uZWN0b3IoY29ubmVjdG9ySWQ6IFVVSUQsIHJlcXVlc3Q6IENvbm5lY3RvclJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPENvbm5lY3RvclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbm5lY3RvclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvY29ubmVjdG9yJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGNvbm5lY3RvcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbnNlbnQgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gY29uc2VudElkIFRoZSBJZCBvZiB0aGUgY29uc2VudCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Q29uc2VudFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBjb25zZW50IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUNvbnNlbnQoY29uc2VudElkOiBVVUlELCByZXF1ZXN0OiBDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Q29uc2VudFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PENvbnNlbnRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2NvbnNlbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoY29uc2VudElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGVtYWlsIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVtYWlsVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIGVtYWlsIHRlbXBsYXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbWFpbFRlbXBsYXRlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGVtYWlsIHRlbXBsYXRlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbWFpbFRlbXBsYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUVtYWlsVGVtcGxhdGUoZW1haWxUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBFbWFpbFRlbXBsYXRlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW1haWxUZW1wbGF0ZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVtYWlsVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VtYWlsL3RlbXBsYXRlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVtYWlsVGVtcGxhdGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBFbnRpdHkgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0VudGl0eVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBFbnRpdHkgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVFbnRpdHkoZW50aXR5SWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEVudGl0eVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIEVudGl0eSBUeXBlIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGVudGl0eVR5cGVJZCBUaGUgSWQgb2YgdGhlIEVudGl0eSBUeXBlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFbnRpdHlUeXBlUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IEVudGl0eSBUeXBlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUVudGl0eVR5cGUoZW50aXR5VHlwZUlkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwZXJtaXNzaW9uIHdpdGggdGhlIGdpdmVuIGlkIGZvciB0aGUgZW50aXR5IHR5cGUuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5VHlwZUlkIFRoZSBJZCBvZiB0aGUgZW50aXR5VHlwZSB0aGF0IHRoZSBwZXJtaXNzaW9uIGJlbG9uZ3MgdG8uXG4gICAqIEBwYXJhbSB7VVVJRH0gcGVybWlzc2lvbklkIFRoZSBJZCBvZiB0aGUgcGVybWlzc2lvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW50aXR5VHlwZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBwZXJtaXNzaW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxFbnRpdHlUeXBlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUVudGl0eVR5cGVQZXJtaXNzaW9uKGVudGl0eVR5cGVJZDogVVVJRCwgcGVybWlzc2lvbklkOiBVVUlELCByZXF1ZXN0OiBFbnRpdHlUeXBlUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8RW50aXR5VHlwZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEVudGl0eVR5cGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2VudGl0eS90eXBlJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eVR5cGVJZClcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KFwicGVybWlzc2lvblwiKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQocGVybWlzc2lvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGZvcm0gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZm9ybUlkIFRoZSBJZCBvZiB0aGUgZm9ybSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Rm9ybVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgZm9ybSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVGb3JtKGZvcm1JZDogVVVJRCwgcmVxdWVzdDogRm9ybVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxGb3JtUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZvcm1JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBmb3JtIGZpZWxkIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IGZpZWxkSWQgVGhlIElkIG9mIHRoZSBmb3JtIGZpZWxkIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtGb3JtRmllbGRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGZvcm0gZmllbGQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEZvcm1GaWVsZFJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVGb3JtRmllbGQoZmllbGRJZDogVVVJRCwgcmVxdWVzdDogRm9ybUZpZWxkUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8Rm9ybUZpZWxkUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8Rm9ybUZpZWxkUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9mb3JtL2ZpZWxkJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGZpZWxkSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgZ3JvdXAgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZ3JvdXBJZCBUaGUgSWQgb2YgdGhlIGdyb3VwIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtHcm91cFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBncm91cCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8R3JvdXBSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlR3JvdXAoZ3JvdXBJZDogVVVJRCwgcmVxdWVzdDogR3JvdXBSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxHcm91cFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEdyb3VwUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9ncm91cCcpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudChncm91cElkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBtZW1iZXIgaW4gYSBncm91cC5cbiAgICpcbiAgICogQHBhcmFtIHtNZW1iZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIGdyb3VwIG1lbWJlcihzKS5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVtYmVyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUdyb3VwTWVtYmVycyhyZXF1ZXN0OiBNZW1iZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZW1iZXJSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZW1iZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2dyb3VwL21lbWJlcicpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBhY2Nlc3NDb250cm9sTGlzdElkIFRoZSBJZCBvZiB0aGUgSVAgQWNjZXNzIENvbnRyb2wgTGlzdCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7SVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBJUCBBY2Nlc3MgQ29udHJvbCBMaXN0IGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUlQQWNjZXNzQ29udHJvbExpc3QoYWNjZXNzQ29udHJvbExpc3RJZDogVVVJRCwgcmVxdWVzdDogSVBBY2Nlc3NDb250cm9sTGlzdFJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPElQQWNjZXNzQ29udHJvbExpc3RSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9pcC1hY2wnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoYWNjZXNzQ29udHJvbExpc3RJZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBpZGVudGl0eSBwcm92aWRlciB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBpZGVudGl0eVByb3ZpZGVySWQgVGhlIElkIG9mIHRoZSBpZGVudGl0eSBwcm92aWRlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7SWRlbnRpdHlQcm92aWRlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3Qgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlIHVwZGF0ZWQgaWRlbnRpdHkgcHJvdmlkZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPElkZW50aXR5UHJvdmlkZXJSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlSWRlbnRpdHlQcm92aWRlcihpZGVudGl0eVByb3ZpZGVySWQ6IFVVSUQsIHJlcXVlc3Q6IElkZW50aXR5UHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxJZGVudGl0eVByb3ZpZGVyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SWRlbnRpdHlQcm92aWRlclJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvaWRlbnRpdHktcHJvdmlkZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoaWRlbnRpdHlQcm92aWRlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGF2YWlsYWJsZSBpbnRlZ3JhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SW50ZWdyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgaW50ZWdyYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUludGVncmF0aW9ucyhyZXF1ZXN0OiBJbnRlZ3JhdGlvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEludGVncmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8SW50ZWdyYXRpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2ludGVncmF0aW9uJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBrZXkgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0ga2V5SWQgVGhlIElkIG9mIHRoZSBrZXkgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge0tleVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBrZXkgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVLZXkoa2V5SWQ6IFVVSUQsIHJlcXVlc3Q6IEtleVJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPEtleVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEtleVJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkva2V5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGtleUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGxhbWJkYSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBsYW1iZGFJZCBUaGUgSWQgb2YgdGhlIGxhbWJkYSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7TGFtYmRhUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IGxhbWJkYSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZUxhbWJkYShsYW1iZGFJZDogVVVJRCwgcmVxdWVzdDogTGFtYmRhUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TGFtYmRhUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TGFtYmRhUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9sYW1iZGEnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobGFtYmRhSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSBtZXNzYWdlVGVtcGxhdGVJZCBUaGUgSWQgb2YgdGhlIG1lc3NhZ2UgdGVtcGxhdGUgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0ge01lc3NhZ2VUZW1wbGF0ZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBtZXNzYWdlIHRlbXBsYXRlIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlTWVzc2FnZVRlbXBsYXRlKG1lc3NhZ2VUZW1wbGF0ZUlkOiBVVUlELCByZXF1ZXN0OiBNZXNzYWdlVGVtcGxhdGVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxNZXNzYWdlVGVtcGxhdGVSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL21lc3NhZ2UvdGVtcGxhdGUnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2FnZVRlbXBsYXRlSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbWVzc2VuZ2VyIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IG1lc3NlbmdlcklkIFRoZSBJZCBvZiB0aGUgbWVzc2VuZ2VyIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtNZXNzZW5nZXJSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IG1lc3NlbmdlciBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZU1lc3NlbmdlcihtZXNzZW5nZXJJZDogVVVJRCwgcmVxdWVzdDogTWVzc2VuZ2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8TWVzc2VuZ2VyUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8TWVzc2VuZ2VyUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS9tZXNzZW5nZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQobWVzc2VuZ2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgdXNlciB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgdGhlIGFwcGxpY2F0aW9uIGRlZmluZWQgaW4gdGhlIHJlcXVlc3QuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB3aG9zZSByZWdpc3RyYXRpb24gaXMgZ29pbmcgdG8gYmUgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtSZWdpc3RyYXRpb25SZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBuZXcgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxSZWdpc3RyYXRpb25SZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlUmVnaXN0cmF0aW9uKHVzZXJJZDogVVVJRCwgcmVxdWVzdDogUmVnaXN0cmF0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8UmVnaXN0cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8UmVnaXN0cmF0aW9uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3JlZ2lzdHJhdGlvbicpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh1c2VySWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7U3lzdGVtQ29uZmlndXJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyBzeXN0ZW0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVTeXN0ZW1Db25maWd1cmF0aW9uKHJlcXVlc3Q6IFN5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxTeXN0ZW1Db25maWd1cmF0aW9uUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8U3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvc3lzdGVtLWNvbmZpZ3VyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHRlbmFudCB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB0ZW5hbnRJZCBUaGUgSWQgb2YgdGhlIHRlbmFudCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VGVuYW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHRlbmFudCBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVRlbmFudCh0ZW5hbnRJZDogVVVJRCwgcmVxdWVzdDogVGVuYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VGVuYW50UmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8VGVuYW50UmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90ZW5hbnQnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodGVuYW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgdGhlbWUgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdGhlbWVJZCBUaGUgSWQgb2YgdGhlIHRoZW1lIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtUaGVtZVJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyB0aGVtZSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VGhlbWVSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlVGhlbWUodGhlbWVJZDogVVVJRCwgcmVxdWVzdDogVGhlbWVSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxUaGVtZVJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFRoZW1lUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS90aGVtZScpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh0aGVtZUlkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlcklkIFRoZSBJZCBvZiB0aGUgdXNlciB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7VXNlclJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIG5ldyB1c2VyIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVVzZXIodXNlcklkOiBVVUlELCByZXF1ZXN0OiBVc2VyUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlclJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXInKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlcklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHVzZXIgYWN0aW9uIHdpdGggdGhlIGdpdmVuIElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJBY3Rpb25JZCBUaGUgSWQgb2YgdGhlIHVzZXIgYWN0aW9uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHVzZXIgYWN0aW9uIGluZm9ybWF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTxVc2VyQWN0aW9uUmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVVzZXJBY3Rpb24odXNlckFjdGlvbklkOiBVVUlELCByZXF1ZXN0OiBVc2VyQWN0aW9uUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PFVzZXJBY3Rpb25SZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL3VzZXItYWN0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJBY3Rpb25JZClcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBVVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSB1c2VyIGFjdGlvbiByZWFzb24gd2l0aCB0aGUgZ2l2ZW4gSWQuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gdXNlckFjdGlvblJlYXNvbklkIFRoZSBJZCBvZiB0aGUgdXNlciBhY3Rpb24gcmVhc29uIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtVc2VyQWN0aW9uUmVhc29uUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHVzZXIgYWN0aW9uIHJlYXNvbiBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckFjdGlvblJlYXNvblJlc3BvbnNlPj59XG4gICAqL1xuICB1cGRhdGVVc2VyQWN0aW9uUmVhc29uKHVzZXJBY3Rpb25SZWFzb25JZDogVVVJRCwgcmVxdWVzdDogVXNlckFjdGlvblJlYXNvblJlcXVlc3QpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJBY3Rpb25SZWFzb25SZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2UsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyLWFjdGlvbi1yZWFzb24nKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodXNlckFjdGlvblJlYXNvbklkKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUFVUXCIpXG4gICAgICAgIC5nbygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBzaW5nbGUgVXNlciBjb25zZW50IGJ5IElkLlxuICAgKlxuICAgKiBAcGFyYW0ge1VVSUR9IHVzZXJDb25zZW50SWQgVGhlIFVzZXIgQ29uc2VudCBJZFxuICAgKiBAcGFyYW0ge1VzZXJDb25zZW50UmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIHRoZSB1c2VyIGNvbnNlbnQgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFVzZXJDb25zZW50UmVzcG9uc2U+Pn1cbiAgICovXG4gIHVwZGF0ZVVzZXJDb25zZW50KHVzZXJDb25zZW50SWQ6IFVVSUQsIHJlcXVlc3Q6IFVzZXJDb25zZW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VXNlckNvbnNlbnRSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDxVc2VyQ29uc2VudFJlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci9jb25zZW50JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHVzZXJDb25zZW50SWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgd2ViaG9vayB3aXRoIHRoZSBnaXZlbiBJZC5cbiAgICpcbiAgICogQHBhcmFtIHtVVUlEfSB3ZWJob29rSWQgVGhlIElkIG9mIHRoZSB3ZWJob29rIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtXZWJob29rUmVxdWVzdH0gcmVxdWVzdCBUaGUgcmVxdWVzdCB0aGF0IGNvbnRhaW5zIGFsbCBvZiB0aGUgbmV3IHdlYmhvb2sgaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFdlYmhvb2tSZXNwb25zZT4+fVxuICAgKi9cbiAgdXBkYXRlV2ViaG9vayh3ZWJob29rSWQ6IFVVSUQsIHJlcXVlc3Q6IFdlYmhvb2tSZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTxXZWJob29rUmVzcG9uc2U+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnQ8V2ViaG9va1Jlc3BvbnNlLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvd2ViaG9vaycpXG4gICAgICAgIC53aXRoVXJpU2VnbWVudCh3ZWJob29rSWQpXG4gICAgICAgIC53aXRoSlNPTkJvZHkocmVxdWVzdClcbiAgICAgICAgLndpdGhNZXRob2QoXCJQVVRcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBvciB1cGRhdGVzIGFuIEVudGl0eSBHcmFudC4gVGhpcyBpcyB3aGVuIGEgVXNlci9FbnRpdHkgaXMgZ3JhbnRlZCBwZXJtaXNzaW9ucyB0byBhbiBFbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VVVJRH0gZW50aXR5SWQgVGhlIElkIG9mIHRoZSBFbnRpdHkgdGhhdCB0aGUgVXNlci9FbnRpdHkgaXMgYmVpbmcgZ3JhbnRlZCBhY2Nlc3MgdG8uXG4gICAqIEBwYXJhbSB7RW50aXR5R3JhbnRSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIEVudGl0eSBHcmFudC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdXBzZXJ0RW50aXR5R3JhbnQoZW50aXR5SWQ6IFVVSUQsIHJlcXVlc3Q6IEVudGl0eUdyYW50UmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvZW50aXR5JylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KGVudGl0eUlkKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQoXCJncmFudFwiKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIGVuZC11c2VyIHByb3ZpZGVkIHVzZXJfY29kZSBmcm9tIHRoZSB1c2VyLWludGVyYWN0aW9uIG9mIHRoZSBEZXZpY2UgQXV0aG9yaXphdGlvbiBHcmFudC5cbiAgICogSWYgeW91IGJ1aWxkIHlvdXIgb3duIGFjdGl2YXRpb24gZm9ybSB5b3Ugc2hvdWxkIHZhbGlkYXRlIHRoZSB1c2VyIHByb3ZpZGVkIGNvZGUgcHJpb3IgdG8gYmVnaW5uaW5nIHRoZSBBdXRob3JpemF0aW9uIGdyYW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcl9jb2RlIFRoZSBlbmQtdXNlciB2ZXJpZmljYXRpb24gY29kZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsaWVudF9pZCBUaGUgY2xpZW50IGlkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj59XG4gICAqL1xuICB2YWxpZGF0ZURldmljZSh1c2VyX2NvZGU6IHN0cmluZywgY2xpZW50X2lkOiBzdHJpbmcpOiBQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8dm9pZCwgdm9pZD4oKVxuICAgICAgICAud2l0aFVyaSgnL29hdXRoMi9kZXZpY2UvdmFsaWRhdGUnKVxuICAgICAgICAud2l0aFBhcmFtZXRlcigndXNlcl9jb2RlJywgdXNlcl9jb2RlKVxuICAgICAgICAud2l0aFBhcmFtZXRlcignY2xpZW50X2lkJywgY2xpZW50X2lkKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIEpXVCAoZW5jb2RlZCBKV1Qgc3RyaW5nKSB0byBlbnN1cmUgdGhlIHRva2VuIGlzIHZhbGlkLiBBIHZhbGlkIGFjY2VzcyB0b2tlbiBpcyBwcm9wZXJseVxuICAgKiBzaWduZWQgYW5kIG5vdCBleHBpcmVkLlxuICAgKiA8cD5cbiAgICogVGhpcyBBUEkgbWF5IGJlIHVzZWQgdG8gdmVyaWZ5IHRoZSBKV1QgYXMgd2VsbCBhcyBkZWNvZGUgdGhlIGVuY29kZWQgSldUIGludG8gaHVtYW4gcmVhZGFibGUgaWRlbnRpdHkgY2xhaW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RlZEpXVCBUaGUgZW5jb2RlZCBKV1QgKGFjY2VzcyB0b2tlbikuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPFZhbGlkYXRlUmVzcG9uc2U+Pn1cbiAgICovXG4gIHZhbGlkYXRlSldUKGVuY29kZWRKV1Q6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8VmFsaWRhdGVSZXNwb25zZT4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czxWYWxpZGF0ZVJlc3BvbnNlLCB2b2lkPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC92YWxpZGF0ZScpXG4gICAgICAgIC53aXRoQXV0aG9yaXphdGlvbignQmVhcmVyICcgKyBlbmNvZGVkSldUKVxuICAgICAgICAud2l0aE1ldGhvZChcIkdFVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCdzIGEgSldUIHZlbmRpbmcgbWFjaGluZSFcbiAgICogXG4gICAqIElzc3VlIGEgbmV3IGFjY2VzcyB0b2tlbiAoSldUKSB3aXRoIHRoZSBwcm92aWRlZCBjbGFpbXMgaW4gdGhlIHJlcXVlc3QuIFRoaXMgSldUIGlzIG5vdCBzY29wZWQgdG8gYSB0ZW5hbnQgb3IgdXNlciwgaXQgaXMgYSBmcmVlIGZvcm0gXG4gICAqIHRva2VuIHRoYXQgd2lsbCBjb250YWluIHdoYXQgY2xhaW1zIHlvdSBwcm92aWRlLlxuICAgKiA8cD5cbiAgICogVGhlIGlhdCwgZXhwIGFuZCBqdGkgY2xhaW1zIHdpbGwgYmUgYWRkZWQgYnkgRnVzaW9uQXV0aCwgYWxsIG90aGVyIGNsYWltcyBtdXN0IGJlIHByb3ZpZGVkIGJ5IHRoZSBjYWxsZXIuXG4gICAqIFxuICAgKiBJZiBhIFRUTCBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QsIHRoZSBUVEwgd2lsbCBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgZGVmYXVsdCBUZW5hbnQgb3IgdGhlIFRlbmFudCBzcGVjaWZpZWQgb24gdGhlIHJlcXVlc3QgZWl0aGVyIFxuICAgKiBieSB3YXkgb2YgdGhlIFgtRnVzaW9uQXV0aC1UZW5hbnRJZCByZXF1ZXN0IGhlYWRlciwgb3IgYSB0ZW5hbnQgc2NvcGVkIEFQSSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7SldUVmVuZFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyBhbGwgb2YgdGhlIGNsYWltcyBmb3IgdGhpcyBKV1QuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPEpXVFZlbmRSZXNwb25zZT4+fVxuICAgKi9cbiAgdmVuZEpXVChyZXF1ZXN0OiBKV1RWZW5kUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8SldUVmVuZFJlc3BvbnNlPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0PEpXVFZlbmRSZXNwb25zZSwgRXJyb3JzPigpXG4gICAgICAgIC53aXRoVXJpKCcvYXBpL2p3dC92ZW5kJylcbiAgICAgICAgLndpdGhKU09OQm9keShyZXF1ZXN0KVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYSBlbWFpbCB2ZXJpZmljYXRpb24uIFRoZSBJZCBnaXZlbiBpcyB1c3VhbGx5IGZyb20gYW4gZW1haWwgc2VudCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSBlbWFpbCB2ZXJpZmljYXRpb24gaWQgc2VudCB0byB0aGUgdXNlci5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIHZlcmlmeUVtYWlsQWRkcmVzcyBhbmQgY2hhbmdlZCB0byB0YWtlIGEgSlNPTiByZXF1ZXN0IGJvZHksIHVzZSB0aGF0IG1ldGhvZCBpbnN0ZWFkLlxuICAgKi9cbiAgdmVyaWZ5RW1haWwodmVyaWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aFVyaVNlZ21lbnQodmVyaWZpY2F0aW9uSWQpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhIHVzZXIncyBlbWFpbCBhZGRyZXNzLiBcbiAgICogXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgd2lsbCBjb250YWluIHRoZSB2ZXJpZmljYXRpb25JZC4gWW91IG1heSBhbHNvIGJlIHJlcXVpcmVkIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSBiYXNlZCB1cG9uIHlvdXIgY29uZmlndXJhdGlvbi4gV2hlbiBcbiAgICogdGhlIHRlbmFudCBpcyBjb25maWd1cmVkIHRvIGdhdGUgYSB1c2VyIHVudGlsIHRoZWlyIGVtYWlsIGFkZHJlc3MgaXMgdmVyaWZpZWQsIHRoaXMgcHJvY2VkdXJlcyByZXF1aXJlcyB0d28gdmFsdWVzIGluc3RlYWQgb2Ygb25lLiBcbiAgICogVGhlIHZlcmlmaWNhdGlvbklkIGlzIGEgaGlnaCBlbnRyb3B5IHZhbHVlIGFuZCB0aGUgb25lLXRpbWUgdXNlIGNvZGUgaXMgYSBsb3cgZW50cm9weSB2YWx1ZSB0aGF0IGlzIGVhc2lseSBlbnRlcmVkIGluIGEgdXNlciBpbnRlcmFjdGl2ZSBmb3JtLiBUaGUgXG4gICAqIHR3byB2YWx1ZXMgdG9nZXRoZXIgYXJlIGFibGUgdG8gY29uZmlybSBhIHVzZXIncyBlbWFpbCBhZGRyZXNzIGFuZCBtYXJrIHRoZSB1c2VyJ3MgZW1haWwgYWRkcmVzcyBhcyB2ZXJpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlFbWFpbFJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdmVyaWZpY2F0aW9uSWQgYW5kIG9wdGlvbmFsIG9uZS10aW1lIHVzZSBjb2RlIHBhaXJlZCB3aXRoIHRoZSB2ZXJpZmljYXRpb25JZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmVyaWZ5RW1haWxBZGRyZXNzKHJlcXVlc3Q6IFZlcmlmeUVtYWlsUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZG1pbmlzdHJhdGl2ZWx5IHZlcmlmeSBhIHVzZXIncyBlbWFpbCBhZGRyZXNzLiBVc2UgdGhpcyBtZXRob2QgdG8gYnlwYXNzIGVtYWlsIHZlcmlmaWNhdGlvbiBmb3IgdGhlIHVzZXIuXG4gICAqIFxuICAgKiBUaGUgcmVxdWVzdCBib2R5IHdpbGwgY29udGFpbiB0aGUgdXNlcklkIHRvIGJlIHZlcmlmaWVkLiBBbiBBUEkga2V5IGlzIHJlcXVpcmVkIHdoZW4gc2VuZGluZyB0aGUgdXNlcklkIGluIHRoZSByZXF1ZXN0IGJvZHkuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5RW1haWxSZXF1ZXN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRoYXQgY29udGFpbnMgdGhlIHVzZXJJZCB0byB2ZXJpZnkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICovXG4gIHZlcmlmeUVtYWlsQWRkcmVzc0J5VXNlcklkKHJlcXVlc3Q6IFZlcmlmeUVtYWlsUmVxdWVzdCk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydDx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktZW1haWwnKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maXJtcyBhbiBhcHBsaWNhdGlvbiByZWdpc3RyYXRpb24uIFRoZSBJZCBnaXZlbiBpcyB1c3VhbGx5IGZyb20gYW4gZW1haWwgc2VudCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZlcmlmaWNhdGlvbklkIFRoZSByZWdpc3RyYXRpb24gdmVyaWZpY2F0aW9uIElkIHNlbnQgdG8gdGhlIHVzZXIuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPENsaWVudFJlc3BvbnNlPHZvaWQ+Pn1cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byB2ZXJpZnlVc2VyUmVnaXN0cmF0aW9uIGFuZCBjaGFuZ2VkIHRvIHRha2UgYSBKU09OIHJlcXVlc3QgYm9keSwgdXNlIHRoYXQgbWV0aG9kIGluc3RlYWQuXG4gICAqL1xuICB2ZXJpZnlSZWdpc3RyYXRpb24odmVyaWZpY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+IHtcbiAgICByZXR1cm4gdGhpcy5zdGFydEFub255bW91czx2b2lkLCBFcnJvcnM+KClcbiAgICAgICAgLndpdGhIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJylcbiAgICAgICAgLndpdGhVcmkoJy9hcGkvdXNlci92ZXJpZnktcmVnaXN0cmF0aW9uJylcbiAgICAgICAgLndpdGhVcmlTZWdtZW50KHZlcmlmaWNhdGlvbklkKVxuICAgICAgICAud2l0aE1ldGhvZChcIlBPU1RcIilcbiAgICAgICAgLmdvKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29uZmlybXMgYSB1c2VyJ3MgcmVnaXN0cmF0aW9uLiBcbiAgICogXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgd2lsbCBjb250YWluIHRoZSB2ZXJpZmljYXRpb25JZC4gWW91IG1heSBhbHNvIGJlIHJlcXVpcmVkIHRvIHNlbmQgYSBvbmUtdGltZSB1c2UgY29kZSBiYXNlZCB1cG9uIHlvdXIgY29uZmlndXJhdGlvbi4gV2hlbiBcbiAgICogdGhlIGFwcGxpY2F0aW9uIGlzIGNvbmZpZ3VyZWQgdG8gZ2F0ZSBhIHVzZXIgdW50aWwgdGhlaXIgcmVnaXN0cmF0aW9uIGlzIHZlcmlmaWVkLCB0aGlzIHByb2NlZHVyZXMgcmVxdWlyZXMgdHdvIHZhbHVlcyBpbnN0ZWFkIG9mIG9uZS4gXG4gICAqIFRoZSB2ZXJpZmljYXRpb25JZCBpcyBhIGhpZ2ggZW50cm9weSB2YWx1ZSBhbmQgdGhlIG9uZS10aW1lIHVzZSBjb2RlIGlzIGEgbG93IGVudHJvcHkgdmFsdWUgdGhhdCBpcyBlYXNpbHkgZW50ZXJlZCBpbiBhIHVzZXIgaW50ZXJhY3RpdmUgZm9ybS4gVGhlIFxuICAgKiB0d28gdmFsdWVzIHRvZ2V0aGVyIGFyZSBhYmxlIHRvIGNvbmZpcm0gYSB1c2VyJ3MgcmVnaXN0cmF0aW9uIGFuZCBtYXJrIHRoZSB1c2VyJ3MgcmVnaXN0cmF0aW9uIGFzIHZlcmlmaWVkLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeVJlZ2lzdHJhdGlvblJlcXVlc3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdGhhdCBjb250YWlucyB0aGUgdmVyaWZpY2F0aW9uSWQgYW5kIG9wdGlvbmFsIG9uZS10aW1lIHVzZSBjb2RlIHBhaXJlZCB3aXRoIHRoZSB2ZXJpZmljYXRpb25JZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8Q2xpZW50UmVzcG9uc2U8dm9pZD4+fVxuICAgKi9cbiAgdmVyaWZ5VXNlclJlZ2lzdHJhdGlvbihyZXF1ZXN0OiBWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0KTogUHJvbWlzZTxDbGllbnRSZXNwb25zZTx2b2lkPj4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0QW5vbnltb3VzPHZvaWQsIEVycm9ycz4oKVxuICAgICAgICAud2l0aFVyaSgnL2FwaS91c2VyL3ZlcmlmeS1yZWdpc3RyYXRpb24nKVxuICAgICAgICAud2l0aEpTT05Cb2R5KHJlcXVlc3QpXG4gICAgICAgIC53aXRoTWV0aG9kKFwiUE9TVFwiKVxuICAgICAgICAuZ28oKTtcbiAgfVxuXG5cbiAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgKiBQcml2YXRlIG1ldGhvZHNcbiAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovXG5cbiAgLyoqXG4gICAqIGNyZWF0ZXMgYSByZXN0IGNsaWVudFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgUkVTVENsaWVudCB0aGF0IHdpbGwgYmUgdXNlZCB0byBjYWxsLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydDxSVCwgRVJUPigpOiBJUkVTVENsaWVudDxSVCwgRVJUPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRBbm9ueW1vdXM8UlQsIEVSVD4oKVxuICAgICAgICAgICAgICAgLndpdGhBdXRob3JpemF0aW9uKHRoaXMuYXBpS2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRBbm9ueW1vdXM8UlQsIEVSVD4oKTogSVJFU1RDbGllbnQ8UlQsIEVSVD4ge1xuICAgIGxldCBjbGllbnQgPSB0aGlzLmNsaWVudEJ1aWxkZXIuYnVpbGQ8UlQsIEVSVD4odGhpcy5ob3N0KTtcblxuICAgIGlmICh0aGlzLnRlbmFudElkICE9IG51bGwpIHtcbiAgICAgIGNsaWVudC53aXRoSGVhZGVyKCdYLUZ1c2lvbkF1dGgtVGVuYW50SWQnLCB0aGlzLnRlbmFudElkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jcmVkZW50aWFscyAhPSBudWxsKSB7XG4gICAgICBjbGllbnQud2l0aENyZWRlbnRpYWxzKHRoaXMuY3JlZGVudGlhbHMpO1xuICAgIH1cblxuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRnVzaW9uQXV0aENsaWVudDtcblxuLyoqXG4gKiBBIDEyOCBiaXQgVVVJRCBpbiBzdHJpbmcgZm9ybWF0IFwiOC00LTQtNC0xMlwiLCBmb3IgZXhhbXBsZSBcIjU4RDVFMjEyLTE2NUItNENBMC05MDlCLUM4NkI5Q0VFMDExMVwiLlxuICovXG5leHBvcnQgdHlwZSBVVUlEID0gc3RyaW5nO1xuXG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjY2Vzc1Rva2VuIHtcbiAgYWNjZXNzX3Rva2VuPzogc3RyaW5nO1xuICBleHBpcmVzX2luPzogbnVtYmVyO1xuICBpZF90b2tlbj86IHN0cmluZztcbiAgcmVmcmVzaF90b2tlbj86IHN0cmluZztcbiAgcmVmcmVzaF90b2tlbl9pZD86IFVVSUQ7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB0b2tlbl90eXBlPzogVG9rZW5UeXBlO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkRhdGEge1xuICBhY3Rpb25lZVVzZXJJZD86IFVVSUQ7XG4gIGFjdGlvbmVyVXNlcklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25JZHM/OiBBcnJheTxVVUlEPjtcbiAgY29tbWVudD86IHN0cmluZztcbiAgZW1haWxVc2VyPzogYm9vbGVhbjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBub3RpZnlVc2VyPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICByZWFzb25JZD86IFVVSUQ7XG4gIHVzZXJBY3Rpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIHVzZXIgYWN0aW9uIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgYWN0aW9uPzogQWN0aW9uRGF0YTtcbiAgYnJvYWRjYXN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgdXNlciBhY3Rpb24gcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblJlc3BvbnNlIHtcbiAgYWN0aW9uPzogVXNlckFjdGlvbkxvZztcbiAgYWN0aW9ucz86IEFycmF5PFVzZXJBY3Rpb25Mb2c+O1xufVxuXG4vKipcbiAqIEF2YWlsYWJsZSBKU09OIFdlYiBBbGdvcml0aG1zIChKV0EpIGFzIGRlc2NyaWJlZCBpbiBSRkMgNzUxOCBhdmFpbGFibGUgZm9yIHRoaXMgSldUIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQWxnb3JpdGhtIHtcbiAgRVMyNTYgPSBcIkVTMjU2XCIsXG4gIEVTMzg0ID0gXCJFUzM4NFwiLFxuICBFUzUxMiA9IFwiRVM1MTJcIixcbiAgSFMyNTYgPSBcIkhTMjU2XCIsXG4gIEhTMzg0ID0gXCJIUzM4NFwiLFxuICBIUzUxMiA9IFwiSFM1MTJcIixcbiAgUFMyNTYgPSBcIlBTMjU2XCIsXG4gIFBTMzg0ID0gXCJQUzM4NFwiLFxuICBQUzUxMiA9IFwiUFM1MTJcIixcbiAgUlMyNTYgPSBcIlJTMjU2XCIsXG4gIFJTMzg0ID0gXCJSUzM4NFwiLFxuICBSUzUxMiA9IFwiUlM1MTJcIixcbiAgbm9uZSA9IFwibm9uZVwiXG59XG5cbi8qKlxuICogZG9tYWluIFBPSk8gdG8gcmVwcmVzZW50IEF1dGhlbnRpY2F0aW9uS2V5XG4gKlxuICogQGF1dGhvciBzYW5qYXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBUElLZXkge1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlwQWNjZXNzQ29udHJvbExpc3RJZD86IFVVSUQ7XG4gIGtleT86IHN0cmluZztcbiAga2V5TWFuYWdlcj86IGJvb2xlYW47XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtZXRhRGF0YT86IEFQSUtleU1ldGFEYXRhO1xuICBwZXJtaXNzaW9ucz86IEFQSUtleVBlcm1pc3Npb25zO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5TWV0YURhdGEge1xuICBhdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBUElLZXlQZXJtaXNzaW9ucyB7XG4gIGVuZHBvaW50cz86IFJlY29yZDxzdHJpbmcsIEFycmF5PHN0cmluZz4+O1xufVxuXG4vKipcbiAqIEF1dGhlbnRpY2F0aW9uIGtleSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNhbmpheVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFQSUtleVJlcXVlc3Qge1xuICBhcGlLZXk/OiBBUElLZXk7XG4gIHNvdXJjZUtleUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBdXRoZW50aWNhdGlvbiBrZXkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgU2FuamF5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQVBJS2V5UmVzcG9uc2Uge1xuICBhcGlLZXk/OiBBUElLZXk7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxlQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidW5kbGVJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsZUlkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxBcHBsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidW5kbGVJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBzY29wZT86IHN0cmluZztcbiAgc2VydmljZXNJZD86IHN0cmluZztcbiAgdGVhbUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbiB7XG4gIGFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25BY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbjtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgYXV0aGVudGljYXRpb25Ub2tlbkNvbmZpZ3VyYXRpb24/OiBBdXRoZW50aWNhdGlvblRva2VuQ29uZmlndXJhdGlvbjtcbiAgY2xlYW5TcGVha0NvbmZpZ3VyYXRpb24/OiBDbGVhblNwZWFrQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVtYWlsQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRW1haWxDb25maWd1cmF0aW9uO1xuICBleHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uPzogQXBwbGljYXRpb25FeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IEFwcGxpY2F0aW9uRm9ybUNvbmZpZ3VyYXRpb247XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgand0Q29uZmlndXJhdGlvbj86IEpXVENvbmZpZ3VyYXRpb247XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9naW5Db25maWd1cmF0aW9uPzogTG9naW5Db25maWd1cmF0aW9uO1xuICBtdWx0aUZhY3RvckNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbk11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogT0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkbGVzc0NvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24/OiBSZWdpc3RyYXRpb25Db25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25EZWxldGVQb2xpY3k/OiBBcHBsaWNhdGlvblJlZ2lzdHJhdGlvbkRlbGV0ZVBvbGljeTtcbiAgcm9sZXM/OiBBcnJheTxBcHBsaWNhdGlvblJvbGU+O1xuICBzYW1sdjJDb25maWd1cmF0aW9uPzogU0FNTHYyQ29uZmlndXJhdGlvbjtcbiAgc3RhdGU/OiBPYmplY3RTdGF0ZTtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0aGVtZUlkPzogVVVJRDtcbiAgdW52ZXJpZmllZD86IFJlZ2lzdHJhdGlvblVudmVyaWZpZWRPcHRpb25zO1xuICB2ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB2ZXJpZmljYXRpb25TdHJhdGVneT86IFZlcmlmaWNhdGlvblN0cmF0ZWd5O1xuICB2ZXJpZnlSZWdpc3RyYXRpb24/OiBib29sZWFuO1xuICB3ZWJBdXRobkNvbmZpZ3VyYXRpb24/OiBBcHBsaWNhdGlvbldlYkF1dGhuQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25BY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbiB7XG4gIHVpSVBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkVtYWlsQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW1haWxWZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWVkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZm9yZ290UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbklkSW5Vc2VPbkNyZWF0ZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luSWRJblVzZU9uVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5OZXdEZXZpY2VFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpblN1c3BpY2lvdXNFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZGxlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgc2V0UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEV2ZW50cyB0aGF0IGFyZSBib3VuZCB0byBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25FdmVudCB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbiB7XG4gIHR3b0ZhY3RvclRydXN0SWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbkZvcm1Db25maWd1cmF0aW9uIHtcbiAgYWRtaW5SZWdpc3RyYXRpb25Gb3JtSWQ/OiBVVUlEO1xuICBzZWxmU2VydmljZUZvcm1JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uTXVsdGlGYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgZW1haWw/OiBNdWx0aUZhY3RvckVtYWlsVGVtcGxhdGU7XG4gIGxvZ2luUG9saWN5PzogTXVsdGlGYWN0b3JMb2dpblBvbGljeTtcbiAgc21zPzogTXVsdGlGYWN0b3JTTVNUZW1wbGF0ZTtcbiAgdHJ1c3RQb2xpY3k/OiBBcHBsaWNhdGlvbk11bHRpRmFjdG9yVHJ1c3RQb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvbk11bHRpRmFjdG9yVHJ1c3RQb2xpY3kge1xuICBBbnkgPSBcIkFueVwiLFxuICBUaGlzID0gXCJUaGlzXCIsXG4gIE5vbmUgPSBcIk5vbmVcIlxufVxuXG4vKipcbiAqIEEgQXBwbGljYXRpb24tbGV2ZWwgcG9saWN5IGZvciBkZWxldGluZyBVc2Vycy5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUmVnaXN0cmF0aW9uRGVsZXRlUG9saWN5IHtcbiAgdW52ZXJpZmllZD86IFRpbWVCYXNlZERlbGV0ZVBvbGljeTtcbn1cblxuLyoqXG4gKiBUaGUgQXBwbGljYXRpb24gQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbj86IEFwcGxpY2F0aW9uO1xuICByb2xlPzogQXBwbGljYXRpb25Sb2xlO1xuICBzb3VyY2VBcHBsaWNhdGlvbklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBUaGUgQXBwbGljYXRpb24gQVBJIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uUmVzcG9uc2Uge1xuICBhcHBsaWNhdGlvbj86IEFwcGxpY2F0aW9uO1xuICBhcHBsaWNhdGlvbnM/OiBBcnJheTxBcHBsaWNhdGlvbj47XG4gIHJvbGU/OiBBcHBsaWNhdGlvblJvbGU7XG59XG5cbi8qKlxuICogQSByb2xlIGdpdmVuIHRvIGEgdXNlciBmb3IgYSBzcGVjaWZpYyBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25Sb2xlIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNEZWZhdWx0PzogYm9vbGVhbjtcbiAgaXNTdXBlclJvbGU/OiBib29sZWFuO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25VbnZlcmlmaWVkQ29uZmlndXJhdGlvbiB7XG4gIHJlZ2lzdHJhdGlvbj86IFVudmVyaWZpZWRCZWhhdmlvcjtcbiAgdmVyaWZpY2F0aW9uU3RyYXRlZ3k/OiBWZXJpZmljYXRpb25TdHJhdGVneTtcbiAgd2hlbkdhdGVkPzogUmVnaXN0cmF0aW9uVW52ZXJpZmllZE9wdGlvbnM7XG59XG5cbi8qKlxuICogQXBwbGljYXRpb24tbGV2ZWwgY29uZmlndXJhdGlvbiBmb3IgV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbGljYXRpb25XZWJBdXRobkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYm9vdHN0cmFwV29ya2Zsb3c/OiBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xuICByZWF1dGhlbnRpY2F0aW9uV29ya2Zsb3c/OiBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvbldlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhIHNpbXBsZSBhdHRhY2htZW50IHdpdGggYSBieXRlIGFycmF5LCBuYW1lIGFuZCBNSU1FIHR5cGUuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gIGF0dGFjaG1lbnQ/OiBBcnJheTxudW1iZXI+O1xuICBtaW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gY29tbXVuaWNhdGUgd2hldGhlciBhbmQgaG93IGF1dGhlbnRpY2F0b3IgYXR0ZXN0YXRpb24gc2hvdWxkIGJlIGRlbGl2ZXJlZCB0byB0aGUgUmVseWluZyBQYXJ0eVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2Uge1xuICBub25lID0gXCJub25lXCIsXG4gIGluZGlyZWN0ID0gXCJpbmRpcmVjdFwiLFxuICBkaXJlY3QgPSBcImRpcmVjdFwiLFxuICBlbnRlcnByaXNlID0gXCJlbnRlcnByaXNlXCJcbn1cblxuLyoqXG4gKiBVc2VkIHRvIGluZGljYXRlIHdoYXQgdHlwZSBvZiBhdHRlc3RhdGlvbiB3YXMgaW5jbHVkZWQgaW4gdGhlIGF1dGhlbnRpY2F0b3IgcmVzcG9uc2UgZm9yIGEgZ2l2ZW4gV2ViQXV0aG4gY3JlZGVudGlhbCBhdCB0aGUgdGltZSBpdCB3YXMgY3JlYXRlZFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIEF0dGVzdGF0aW9uVHlwZSB7XG4gIGJhc2ljID0gXCJiYXNpY1wiLFxuICBzZWxmID0gXCJzZWxmXCIsXG4gIGF0dGVzdGF0aW9uQ2EgPSBcImF0dGVzdGF0aW9uQ2FcIixcbiAgYW5vbnltaXphdGlvbkNhID0gXCJhbm9ueW1pemF0aW9uQ2FcIixcbiAgbm9uZSA9IFwibm9uZVwiXG59XG5cbi8qKlxuICogQW4gYXVkaXQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogbnVtYmVyO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBpbnNlcnRVc2VyPzogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBuZXdWYWx1ZT86IGFueTtcbiAgb2xkVmFsdWU/OiBhbnk7XG4gIHJlYXNvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ0NvbmZpZ3VyYXRpb24ge1xuICBkZWxldGU/OiBEZWxldGVDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEV2ZW50IGV2ZW50IHRvIGFuIGF1ZGl0IGxvZyB3YXMgY3JlYXRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGF1ZGl0TG9nPzogQXVkaXRMb2c7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nRXhwb3J0UmVxdWVzdCBleHRlbmRzIEJhc2VFeHBvcnRSZXF1ZXN0IHtcbiAgY3JpdGVyaWE/OiBBdWRpdExvZ1NlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0TG9nUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhdWRpdExvZz86IEF1ZGl0TG9nO1xufVxuXG4vKipcbiAqIEF1ZGl0IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1Jlc3BvbnNlIHtcbiAgYXVkaXRMb2c/OiBBdWRpdExvZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdExvZ1NlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgZW5kPzogbnVtYmVyO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBuZXdWYWx1ZT86IHN0cmluZztcbiAgb2xkVmFsdWU/OiBzdHJpbmc7XG4gIHJlYXNvbj86IHN0cmluZztcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIHVzZXI/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogQXVkaXRMb2dTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBBdWRpdCBsb2cgcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRMb2dTZWFyY2hSZXNwb25zZSB7XG4gIGF1ZGl0TG9ncz86IEFycmF5PEF1ZGl0TG9nPjtcbiAgdG90YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIEF1dGhlbnRpY2F0aW9uVGhyZWF0cyB7XG4gIEltcG9zc2libGVUcmF2ZWwgPSBcIkltcG9zc2libGVUcmF2ZWxcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0aW9uVG9rZW5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSA8YSBocmVmPVwiaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI2F1dGhlbnRpY2F0b3ItYXR0YWNobWVudC1tb2RhbGl0eVwiPmF1dGhlbnRpY2F0b3IgYXR0YWNobWVudCBtb2RhbGl0eTwvYT4uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQXV0aGVudGljYXRvckF0dGFjaG1lbnQge1xuICBwbGF0Zm9ybSA9IFwicGxhdGZvcm1cIixcbiAgY3Jvc3NQbGF0Zm9ybSA9IFwiY3Jvc3NQbGF0Zm9ybVwiXG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHRoZSBhdXRoZW50aWNhdG9yIGF0dGFjaG1lbnQgbW9kYWxpdHkgcHJlZmVyZW5jZSBmb3IgYSBXZWJBdXRobiB3b3JrZmxvdy4gU2VlIHtAbGluayBBdXRoZW50aWNhdG9yQXR0YWNobWVudH1cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBBdXRoZW50aWNhdG9yQXR0YWNobWVudFByZWZlcmVuY2Uge1xuICBhbnkgPSBcImFueVwiLFxuICBwbGF0Zm9ybSA9IFwicGxhdGZvcm1cIixcbiAgY3Jvc3NQbGF0Zm9ybSA9IFwiY3Jvc3NQbGF0Zm9ybVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhlbnRpY2F0b3JDb25maWd1cmF0aW9uIHtcbiAgYWxnb3JpdGhtPzogVE9UUEFsZ29yaXRobTtcbiAgY29kZUxlbmd0aD86IG51bWJlcjtcbiAgdGltZVN0ZXA/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVXNlZCBieSB0aGUgUmVseWluZyBQYXJ0eSB0byBzcGVjaWZ5IHRoZWlyIHJlcXVpcmVtZW50cyBmb3IgYXV0aGVudGljYXRvciBhdHRyaWJ1dGVzLiBGaWVsZHMgdXNlIHRoZSBkZXByZWNhdGVkIFwicmVzaWRlbnQga2V5XCIgdGVybWlub2xvZ3kgdG8gcmVmZXJcbiAqIHRvIGNsaWVudC1zaWRlIGRpc2NvdmVyYWJsZSBjcmVkZW50aWFscyB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFdlYkF1dGhuIExldmVsIDEuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWEge1xuICBhdXRoZW50aWNhdG9yQXR0YWNobWVudD86IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50O1xuICByZXF1aXJlUmVzaWRlbnRLZXk/OiBib29sZWFuO1xuICByZXNpZGVudEtleT86IFJlc2lkZW50S2V5UmVxdWlyZW1lbnQ7XG4gIHVzZXJWZXJpZmljYXRpb24/OiBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ7XG59XG5cbi8vIERvIG5vdCByZXF1aXJlIGEgc2V0dGVyIGZvciAndHlwZScsIGl0IGlzIGRlZmluZWQgYnkgdGhlIGNvbmNyZXRlIGNsYXNzIGFuZCBpcyBub3QgbXV0YWJsZVxuZXhwb3J0IGludGVyZmFjZSBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbiB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBDb25uZWN0b3JUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFbGFzdGljU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBhY2N1cmF0ZVRvdGFsPzogYm9vbGVhbjtcbiAgaWRzPzogQXJyYXk8VVVJRD47XG4gIHF1ZXJ5Pzogc3RyaW5nO1xuICBxdWVyeVN0cmluZz86IHN0cmluZztcbiAgc29ydEZpZWxkcz86IEFycmF5PFNvcnRGaWVsZD47XG59XG5cbi8qKlxuICogQmFzZS1jbGFzcyBmb3IgYWxsIEZ1c2lvbkF1dGggZXZlbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFdmVudCB7XG4gIGNyZWF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5mbz86IEV2ZW50SW5mbztcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogRXZlbnRUeXBlO1xufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIHJlcXVlc3RzIHRoYXQgY2FuIGNvbnRhaW4gZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgZXZlbnQgaW5mb3JtYXRpb24gaXMgdXNlZCB3aGVuIHNlbmRpbmcgV2ViaG9va3Mgb3IgZW1haWxzXG4gKiBkdXJpbmcgdGhlIHRyYW5zYWN0aW9uLiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBldmVudCBpbmZvcm1hdGlvbiBpcyBjb3JyZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFdmVudFJlcXVlc3Qge1xuICBldmVudEluZm8/OiBFdmVudEluZm87XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VFeHBvcnRSZXF1ZXN0IHtcbiAgZGF0ZVRpbWVTZWNvbmRzRm9ybWF0Pzogc3RyaW5nO1xuICB6b25lSWQ/OiBzdHJpbmc7XG59XG5cbi8vIERvIG5vdCByZXF1aXJlIGEgc2V0dGVyIGZvciAndHlwZScsIGl0IGlzIGRlZmluZWQgYnkgdGhlIGNvbmNyZXRlIGNsYXNzIGFuZCBpcyBub3QgbXV0YWJsZVxuZXhwb3J0IGludGVyZmFjZSBCYXNlSWRlbnRpdHlQcm92aWRlcjxEIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj86IFJlY29yZDxVVUlELCBEPjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYW1iZGFDb25maWd1cmF0aW9uPzogTGFtYmRhQ29uZmlndXJhdGlvbjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxpbmtpbmdTdHJhdGVneT86IElkZW50aXR5UHJvdmlkZXJMaW5raW5nU3RyYXRlZ3k7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHRlbmFudENvbmZpZ3VyYXRpb24/OiBSZWNvcmQ8VVVJRCwgSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb24+O1xuICB0eXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGNyZWF0ZVJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYXNlTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBpcEFkZHJlc3M/OiBzdHJpbmc7XG4gIG1ldGFEYXRhPzogTWV0YURhdGE7XG4gIG5ld0RldmljZT86IGJvb2xlYW47XG4gIG5vSldUPzogYm9vbGVhbjtcbn1cblxuLy8gRG8gbm90IHJlcXVpcmUgYSBzZXR0ZXIgZm9yICd0eXBlJywgaXQgaXMgZGVmaW5lZCBieSB0aGUgY29uY3JldGUgY2xhc3MgYW5kIGlzIG5vdCBtdXRhYmxlXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHJhbnNwb3J0Pzogc3RyaW5nO1xuICB0eXBlPzogTWVzc2VuZ2VyVHlwZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVNBTUx2MklkZW50aXR5UHJvdmlkZXI8RCBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEQ+IHtcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VOYW1lSWRGb3JFbWFpbD86IGJvb2xlYW47XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgbnVtYmVyT2ZSZXN1bHRzPzogbnVtYmVyO1xuICBvcmRlckJ5Pzogc3RyaW5nO1xuICBzdGFydFJvdz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gQnJlYWNoQWN0aW9uIHtcbiAgT2ZmID0gXCJPZmZcIixcbiAgUmVjb3JkT25seSA9IFwiUmVjb3JkT25seVwiLFxuICBOb3RpZnlVc2VyID0gXCJOb3RpZnlVc2VyXCIsXG4gIFJlcXVpcmVDaGFuZ2UgPSBcIlJlcXVpcmVDaGFuZ2VcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gQnJlYWNoZWRQYXNzd29yZFN0YXR1cyB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgRXhhY3RNYXRjaCA9IFwiRXhhY3RNYXRjaFwiLFxuICBTdWJBZGRyZXNzTWF0Y2ggPSBcIlN1YkFkZHJlc3NNYXRjaFwiLFxuICBQYXNzd29yZE9ubHkgPSBcIlBhc3N3b3JkT25seVwiLFxuICBDb21tb25QYXNzd29yZCA9IFwiQ29tbW9uUGFzc3dvcmRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmVhY2hlZFBhc3N3b3JkVGVuYW50TWV0cmljIHtcbiAgYWN0aW9uUmVxdWlyZWQ/OiBudW1iZXI7XG4gIG1hdGNoZWRDb21tb25QYXNzd29yZENvdW50PzogbnVtYmVyO1xuICBtYXRjaGVkRXhhY3RDb3VudD86IG51bWJlcjtcbiAgbWF0Y2hlZFBhc3N3b3JkQ291bnQ/OiBudW1iZXI7XG4gIG1hdGNoZWRTdWJBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG4gIHBhc3N3b3Jkc0NoZWNrZWRDb3VudD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gQnJlYWNoTWF0Y2hNb2RlIHtcbiAgTG93ID0gXCJMb3dcIixcbiAgTWVkaXVtID0gXCJNZWRpdW1cIixcbiAgSGlnaCA9IFwiSGlnaFwiXG59XG5cbi8qKlxuICogWE1MIGNhbm9uaWNhbGl6YXRpb24gbWV0aG9kIGVudW1lcmF0aW9uLiBUaGlzIGlzIHVzZWQgZm9yIHRoZSBJZFAgYW5kIFNQIHNpZGUgb2YgRnVzaW9uQXV0aCBTQU1MLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDYW5vbmljYWxpemF0aW9uTWV0aG9kIHtcbiAgZXhjbHVzaXZlID0gXCJleGNsdXNpdmVcIixcbiAgZXhjbHVzaXZlX3dpdGhfY29tbWVudHMgPSBcImV4Y2x1c2l2ZV93aXRoX2NvbW1lbnRzXCIsXG4gIGluY2x1c2l2ZSA9IFwiaW5jbHVzaXZlXCIsXG4gIGluY2x1c2l2ZV93aXRoX2NvbW1lbnRzID0gXCJpbmNsdXNpdmVfd2l0aF9jb21tZW50c1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIENhcHRjaGFNZXRob2Qge1xuICBHb29nbGVSZWNhcHRjaGFWMiA9IFwiR29vZ2xlUmVjYXB0Y2hhVjJcIixcbiAgR29vZ2xlUmVjYXB0Y2hhVjMgPSBcIkdvb2dsZVJlY2FwdGNoYVYzXCIsXG4gIEhDYXB0Y2hhID0gXCJIQ2FwdGNoYVwiLFxuICBIQ2FwdGNoYUVudGVycHJpc2UgPSBcIkhDYXB0Y2hhRW50ZXJwcmlzZVwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2VydGlmaWNhdGVJbmZvcm1hdGlvbiB7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgbWQ1RmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gIHNlcmlhbE51bWJlcj86IHN0cmluZztcbiAgc2hhMUZpbmdlcnByaW50Pzogc3RyaW5nO1xuICBzaGExVGh1bWJwcmludD86IHN0cmluZztcbiAgc2hhMjU2RmluZ2VycHJpbnQ/OiBzdHJpbmc7XG4gIHNoYTI1NlRodW1icHJpbnQ/OiBzdHJpbmc7XG4gIHN1YmplY3Q/OiBzdHJpbmc7XG4gIHZhbGlkRnJvbT86IG51bWJlcjtcbiAgdmFsaWRUbz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgZW51bSBDaGFuZ2VQYXNzd29yZFJlYXNvbiB7XG4gIEFkbWluaXN0cmF0aXZlID0gXCJBZG1pbmlzdHJhdGl2ZVwiLFxuICBCcmVhY2hlZCA9IFwiQnJlYWNoZWRcIixcbiAgRXhwaXJlZCA9IFwiRXhwaXJlZFwiLFxuICBWYWxpZGF0aW9uID0gXCJWYWxpZGF0aW9uXCJcbn1cblxuLyoqXG4gKiBDaGFuZ2UgcGFzc3dvcmQgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlUGFzc3dvcmRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xuICBjdXJyZW50UGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHRydXN0Q2hhbGxlbmdlPzogc3RyaW5nO1xuICB0cnVzdFRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENoYW5nZSBwYXNzd29yZCByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVBhc3N3b3JkUmVzcG9uc2Uge1xuICBvbmVUaW1lUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBDbGVhblNwZWFrIGNvbmZpZ3VyYXRpb24gYXQgdGhlIHN5c3RlbSBhbmQgYXBwbGljYXRpb24gbGV2ZWwuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xlYW5TcGVha0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICB1cmw/OiBzdHJpbmc7XG4gIHVzZXJuYW1lTW9kZXJhdGlvbj86IFVzZXJuYW1lTW9kZXJhdGlvbjtcbn1cblxuZXhwb3J0IGVudW0gQ2xpZW50QXV0aGVudGljYXRpb25NZXRob2Qge1xuICBub25lID0gXCJub25lXCIsXG4gIGNsaWVudF9zZWNyZXRfYmFzaWMgPSBcImNsaWVudF9zZWNyZXRfYmFzaWNcIixcbiAgY2xpZW50X3NlY3JldF9wb3N0ID0gXCJjbGllbnRfc2VjcmV0X3Bvc3RcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIENsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5IHtcbiAgUmVxdWlyZWQgPSBcIlJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkID0gXCJOb3RSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZFdoZW5Vc2luZ1BLQ0UgPSBcIk5vdFJlcXVpcmVkV2hlblVzaW5nUEtDRVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JQb2xpY3kge1xuICBjb25uZWN0b3JJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgbWlncmF0ZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JSZXF1ZXN0IHtcbiAgY29ubmVjdG9yPzogQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JSZXNwb25zZSB7XG4gIGNvbm5lY3Rvcj86IEJhc2VDb25uZWN0b3JDb25maWd1cmF0aW9uO1xuICBjb25uZWN0b3JzPzogQXJyYXk8QmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24+O1xufVxuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBjb25uZWN0b3JzLiBUaGlzIGVudW0gaXMgc3RvcmVkIGFzIGFuIG9yZGluYWwgb24gdGhlIDxjb2RlPmlkZW50aXRpZXM8L2NvZGU+IHRhYmxlLCBvcmRlciBtdXN0IGJlIG1haW50YWluZWQuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGVudW0gQ29ubmVjdG9yVHlwZSB7XG4gIEZ1c2lvbkF1dGggPSBcIkZ1c2lvbkF1dGhcIixcbiAgR2VuZXJpYyA9IFwiR2VuZXJpY1wiLFxuICBMREFQID0gXCJMREFQXCJcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBjb25zZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50IHtcbiAgY29uc2VudEVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGNvdW50cnlNaW5pbXVtQWdlRm9yU2VsZkNvbnNlbnQ/OiBMb2NhbGl6ZWRJbnRlZ2VycztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlZmF1bHRNaW5pbXVtQWdlRm9yU2VsZkNvbnNlbnQ/OiBudW1iZXI7XG4gIGVtYWlsUGx1cz86IEVtYWlsUGx1cztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbXVsdGlwbGVWYWx1ZXNBbGxvd2VkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgdmFsdWVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCBmb3IgVXNlciBjb25zZW50IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25zZW50UmVxdWVzdCB7XG4gIGNvbnNlbnQ/OiBDb25zZW50O1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29uc2VudFJlc3BvbnNlIHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG4gIGNvbnNlbnRzPzogQXJyYXk8Q29uc2VudD47XG59XG5cbi8qKlxuICogTW9kZWxzIGEgY29uc2VudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIENvbnNlbnRTdGF0dXMge1xuICBBY3RpdmUgPSBcIkFjdGl2ZVwiLFxuICBSZXZva2VkID0gXCJSZXZva2VkXCJcbn1cblxuLyoqXG4gKiBTdGF0dXMgZm9yIGNvbnRlbnQgbGlrZSB1c2VybmFtZXMsIHByb2ZpbGUgYXR0cmlidXRlcywgZXRjLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBDb250ZW50U3RhdHVzIHtcbiAgQUNUSVZFID0gXCJBQ1RJVkVcIixcbiAgUEVORElORyA9IFwiUEVORElOR1wiLFxuICBSRUpFQ1RFRCA9IFwiUkVKRUNURURcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ09SU0NvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxsb3dDcmVkZW50aWFscz86IGJvb2xlYW47XG4gIGFsbG93ZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgYWxsb3dlZE1ldGhvZHM/OiBBcnJheTxIVFRQTWV0aG9kPjtcbiAgYWxsb3dlZE9yaWdpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGV4cG9zZWRIZWFkZXJzPzogQXJyYXk8c3RyaW5nPjtcbiAgcHJlZmxpZ2h0TWF4QWdlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEEgbnVtYmVyIGlkZW50aWZ5aW5nIGEgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG0uIFZhbHVlcyBzaG91bGQgYmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSA8YVxuICogaHJlZj1cImh0dHBzOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2Nvc2UvY29zZS54aHRtbCNhbGdvcml0aG1zXCI+SUFOQSBDT1NFIEFsZ29yaXRobXMgcmVnaXN0cnk8L2E+XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gQ29zZUFsZ29yaXRobUlkZW50aWZpZXIge1xuICBFUzI1NiA9IFwiU0hBMjU2d2l0aEVDRFNBXCIsXG4gIEVTMzg0ID0gXCJTSEEzODR3aXRoRUNEU0FcIixcbiAgRVM1MTIgPSBcIlNIQTUxMndpdGhFQ0RTQVwiLFxuICBSUzI1NiA9IFwiU0hBMjU2d2l0aFJTQVwiLFxuICBSUzM4NCA9IFwiU0hBMzg0d2l0aFJTQVwiLFxuICBSUzUxMiA9IFwiU0hBNTEyd2l0aFJTQVwiLFxuICBQUzI1NiA9IFwiU0hBLTI1NlwiLFxuICBQUzM4NCA9IFwiU0hBLTM4NFwiLFxuICBQUzUxMiA9IFwiU0hBLTUxMlwiXG59XG5cbi8qKlxuICogQ09TRSBFbGxpcHRpYyBDdXJ2ZSBpZGVudGlmaWVyIHRvIGRldGVybWluZSB3aGljaCBlbGxpcHRpYyBjdXJ2ZSB0byB1c2Ugd2l0aCBhIGdpdmVuIGtleVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIENvc2VFbGxpcHRpY0N1cnZlIHtcbiAgUmVzZXJ2ZWQgPSBcIlJlc2VydmVkXCIsXG4gIFAyNTYgPSBcIlAyNTZcIixcbiAgUDM4NCA9IFwiUDM4NFwiLFxuICBQNTIxID0gXCJQNTIxXCIsXG4gIFgyNTUxOSA9IFwiWDI1NTE5XCIsXG4gIFg0NDggPSBcIlg0NDhcIixcbiAgRWQyNTUxOSA9IFwiRWQyNTUxOVwiLFxuICBFZDQ0OCA9IFwiRWQ0NDhcIixcbiAgU2VjcDI1NmsxID0gXCJTZWNwMjU2azFcIlxufVxuXG4vKipcbiAqIENPU0Uga2V5IHR5cGVcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBDb3NlS2V5VHlwZSB7XG4gIFJlc2VydmVkID0gXCIwXCIsXG4gIE9LUCA9IFwiMVwiLFxuICBFQzIgPSBcIjJcIixcbiAgUlNBID0gXCIzXCIsXG4gIFN5bW1ldHJpYyA9IFwiNFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ291bnQge1xuICBjb3VudD86IG51bWJlcjtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29udGFpbnMgdGhlIG91dHB1dCBmb3IgdGhlIHtAY29kZSBjcmVkUHJvcHN9IGV4dGVuc2lvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbFByb3BlcnRpZXNPdXRwdXQge1xuICByaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBkYWlseSBhY3RpdmUgdXNlciByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFpbHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2Uge1xuICBkYWlseUFjdGl2ZVVzZXJzPzogQXJyYXk8Q291bnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG51bWJlck9mRGF5c1RvUmV0YWluPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXZpY2VJbmZvIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGxhc3RBY2Nlc3NlZEFkZHJlc3M/OiBzdHJpbmc7XG4gIGxhc3RBY2Nlc3NlZEluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBEZXZpY2VUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGV2aWNlUmVzcG9uc2Uge1xuICBkZXZpY2VfY29kZT86IHN0cmluZztcbiAgZXhwaXJlc19pbj86IG51bWJlcjtcbiAgaW50ZXJ2YWw/OiBudW1iZXI7XG4gIHVzZXJfY29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3VyaT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uX3VyaV9jb21wbGV0ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gRGV2aWNlVHlwZSB7XG4gIEJST1dTRVIgPSBcIkJST1dTRVJcIixcbiAgREVTS1RPUCA9IFwiREVTS1RPUFwiLFxuICBMQVBUT1AgPSBcIkxBUFRPUFwiLFxuICBNT0JJTEUgPSBcIk1PQklMRVwiLFxuICBPVEhFUiA9IFwiT1RIRVJcIixcbiAgU0VSVkVSID0gXCJTRVJWRVJcIixcbiAgVEFCTEVUID0gXCJUQUJMRVRcIixcbiAgVFYgPSBcIlRWXCIsXG4gIFVOS05PV04gPSBcIlVOS05PV05cIlxufVxuXG4vKipcbiAqIEEgZGlzcGxheWFibGUgcmF3IGxvZ2luIHRoYXQgaW5jbHVkZXMgYXBwbGljYXRpb24gbmFtZSBhbmQgdXNlciBsb2dpbklkLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3BsYXlhYmxlUmF3TG9naW4gZXh0ZW5kcyBSYXdMb2dpbiB7XG4gIGFwcGxpY2F0aW9uTmFtZT86IHN0cmluZztcbiAgbG9jYXRpb24/OiBMb2NhdGlvbjtcbiAgbG9naW5JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFsbCBpZGVudGl0eSBwcm92aWRlcnMgdGhhdCBjYW4gYmUgZG9tYWluIGJhc2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvbWFpbkJhc2VkSWRlbnRpdHlQcm92aWRlciB7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyBhbiBhYnN0cmFjdGlvbiBvZiBhIHNpbXBsZSBlbWFpbCBtZXNzYWdlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsIHtcbiAgYXR0YWNobWVudHM/OiBBcnJheTxBdHRhY2htZW50PjtcbiAgYmNjPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbiAgY2M/OiBBcnJheTxFbWFpbEFkZHJlc3M+O1xuICBmcm9tPzogRW1haWxBZGRyZXNzO1xuICBodG1sPzogc3RyaW5nO1xuICByZXBseVRvPzogRW1haWxBZGRyZXNzO1xuICBzdWJqZWN0Pzogc3RyaW5nO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0bz86IEFycmF5PEVtYWlsQWRkcmVzcz47XG59XG5cbi8qKlxuICogQW4gZW1haWwgYWRkcmVzcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbEFkZHJlc3Mge1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICBkaXNwbGF5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsQ29uZmlndXJhdGlvbiB7XG4gIGFkZGl0aW9uYWxIZWFkZXJzPzogQXJyYXk8RW1haWxIZWFkZXI+O1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRlZmF1bHRGcm9tRW1haWw/OiBzdHJpbmc7XG4gIGRlZmF1bHRGcm9tTmFtZT86IHN0cmluZztcbiAgZW1haWxVcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBlbWFpbFZlcmlmaWVkRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZm9yZ290UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBob3N0Pzogc3RyaW5nO1xuICBpbXBsaWNpdEVtYWlsVmVyaWZpY2F0aW9uQWxsb3dlZD86IGJvb2xlYW47XG4gIGxvZ2luSWRJblVzZU9uQ3JlYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgbG9naW5JZEluVXNlT25VcGRhdGVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBsb2dpbk5ld0RldmljZUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIGxvZ2luU3VzcGljaW91c0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICBwYXNzd29yZGxlc3NFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBwYXNzd29yZFJlc2V0U3VjY2Vzc0VtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHBhc3N3b3JkVXBkYXRlRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgcG9ydD86IG51bWJlcjtcbiAgcHJvcGVydGllcz86IHN0cmluZztcbiAgc2VjdXJpdHk/OiBFbWFpbFNlY3VyaXR5VHlwZTtcbiAgc2V0UGFzc3dvcmRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RBZGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0d29GYWN0b3JNZXRob2RSZW1vdmVFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB1bnZlcmlmaWVkPzogRW1haWxVbnZlcmlmaWVkT3B0aW9ucztcbiAgdXNlcm5hbWU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvblN0cmF0ZWd5PzogVmVyaWZpY2F0aW9uU3RyYXRlZ3k7XG4gIHZlcmlmeUVtYWlsPzogYm9vbGVhbjtcbiAgdmVyaWZ5RW1haWxXaGVuQ2hhbmdlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsSGVhZGVyIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxQbHVzIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG1heGltdW1UaW1lVG9TZW5kRW1haWxJbkhvdXJzPzogbnVtYmVyO1xuICBtaW5pbXVtVGltZVRvU2VuZEVtYWlsSW5Ib3Vycz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gRW1haWxTZWN1cml0eVR5cGUge1xuICBOT05FID0gXCJOT05FXCIsXG4gIFNTTCA9IFwiU1NMXCIsXG4gIFRMUyA9IFwiVExTXCJcbn1cblxuLyoqXG4gKiBTdG9yZXMgYW4gZW1haWwgdGVtcGxhdGUgdXNlZCB0byBzZW5kIGVtYWlscyB0byB1c2Vycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlIHtcbiAgZGVmYXVsdEZyb21OYW1lPzogc3RyaW5nO1xuICBkZWZhdWx0SHRtbFRlbXBsYXRlPzogc3RyaW5nO1xuICBkZWZhdWx0U3ViamVjdD86IHN0cmluZztcbiAgZGVmYXVsdFRleHRUZW1wbGF0ZT86IHN0cmluZztcbiAgZnJvbUVtYWlsPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRGcm9tTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBsb2NhbGl6ZWRIdG1sVGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbG9jYWxpemVkU3ViamVjdHM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBsb2NhbGl6ZWRUZXh0VGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbiAgbmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlRXJyb3JzIHtcbiAgcGFyc2VFcnJvcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZW5kZXJFcnJvcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEVtYWlsIHRlbXBsYXRlIHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxUZW1wbGF0ZVJlcXVlc3Qge1xuICBlbWFpbFRlbXBsYXRlPzogRW1haWxUZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBFbWFpbCB0ZW1wbGF0ZSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRlbXBsYXRlUmVzcG9uc2Uge1xuICBlbWFpbFRlbXBsYXRlPzogRW1haWxUZW1wbGF0ZTtcbiAgZW1haWxUZW1wbGF0ZXM/OiBBcnJheTxFbWFpbFRlbXBsYXRlPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1haWxVbnZlcmlmaWVkT3B0aW9ucyB7XG4gIGFsbG93RW1haWxDaGFuZ2VXaGVuR2F0ZWQ/OiBib29sZWFuO1xuICBiZWhhdmlvcj86IFVudmVyaWZpZWRCZWhhdmlvcjtcbn1cblxuLyoqXG4gKiBTb21ldGhpbmcgdGhhdCBjYW4gYmUgZW5hYmxlZCBhbmQgdGh1cyBhbHNvIGRpc2FibGVkLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVhYmxlIHtcbiAgZW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGVudGl0eSB0aGF0IGEgdXNlciBjYW4gYmUgZ3JhbnRlZCBwZXJtaXNzaW9ucyB0by4gT3IgYW4gZW50aXR5IHRoYXQgY2FuIGJlIGdyYW50ZWQgcGVybWlzc2lvbnMgdG8gYW5vdGhlciBlbnRpdHkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5IHtcbiAgY2xpZW50SWQ/OiBzdHJpbmc7XG4gIGNsaWVudFNlY3JldD86IHN0cmluZztcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhcmVudElkPzogVVVJRDtcbiAgdGVuYW50SWQ/OiBVVUlEO1xuICB0eXBlPzogRW50aXR5VHlwZTtcbn1cblxuLyoqXG4gKiBBIGdyYW50IGZvciBhbiBlbnRpdHkgdG8gYSB1c2VyIG9yIGFub3RoZXIgZW50aXR5LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50IHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGVudGl0eT86IEVudGl0eTtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgcGVybWlzc2lvbnM/OiBBcnJheTxzdHJpbmc+O1xuICByZWNpcGllbnRFbnRpdHlJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogRW50aXR5IGdyYW50IEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFJlcXVlc3Qge1xuICBncmFudD86IEVudGl0eUdyYW50O1xufVxuXG4vKipcbiAqIEVudGl0eSBncmFudCBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50UmVzcG9uc2Uge1xuICBncmFudD86IEVudGl0eUdyYW50O1xuICBncmFudHM/OiBBcnJheTxFbnRpdHlHcmFudD47XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciBlbnRpdHkgZ3JhbnRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUdyYW50U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbnRpdHlJZD86IFVVSUQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0eSBncmFudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5R3JhbnRTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogRW50aXR5R3JhbnRTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXR5IGdyYW50cy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlHcmFudFNlYXJjaFJlc3BvbnNlIHtcbiAgZ3JhbnRzPzogQXJyYXk8RW50aXR5R3JhbnQ+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBKV1QgQ29uZmlndXJhdGlvbiBmb3IgZW50aXRpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5SldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgdGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFbnRpdHkgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVJlcXVlc3Qge1xuICBlbnRpdHk/OiBFbnRpdHk7XG59XG5cbi8qKlxuICogRW50aXR5IEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5UmVzcG9uc2Uge1xuICBlbnRpdHk/OiBFbnRpdHk7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgZW50aXR5IHF1ZXJ5LiBJdCBwcm92aWRlcyBhIGJ1aWxkIHBhdHRlcm4gYXMgd2VsbCBhcyBwdWJsaWMgZmllbGRzIGZvciB1c2Ugb24gZm9ybXMgYW5kIGluIGFjdGlvbnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5U2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlRWxhc3RpY1NlYXJjaENyaXRlcmlhIHtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXRpZXNcbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBFbnRpdHlTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgZW50aXRpZXNcbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlYXJjaFJlc3BvbnNlIHtcbiAgZW50aXRpZXM/OiBBcnJheTxFbnRpdHk+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZW50aXR5IHR5cGUgdGhhdCBoYXMgYSBzcGVjaWZpYyBzZXQgb2YgcGVybWlzc2lvbnMuIFRoZXNlIGFyZSBnbG9iYWwgb2JqZWN0cyBhbmQgY2FuIGJlIHVzZWQgYWNyb3NzIHRlbmFudHMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5VHlwZSB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGp3dENvbmZpZ3VyYXRpb24/OiBFbnRpdHlKV1RDb25maWd1cmF0aW9uO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcGVybWlzc2lvbnM/OiBBcnJheTxFbnRpdHlUeXBlUGVybWlzc2lvbj47XG59XG5cbi8qKlxuICogTW9kZWxzIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgcGVybWlzc2lvbi4gVGhpcyBwZXJtaXNzaW9uIGNhbiBiZSBncmFudGVkIHRvIHVzZXJzIG9yIG90aGVyIGVudGl0aWVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVQZXJtaXNzaW9uIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzRGVmYXVsdD86IGJvb2xlYW47XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVudGl0eSBUeXBlIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlUmVxdWVzdCB7XG4gIGVudGl0eVR5cGU/OiBFbnRpdHlUeXBlO1xuICBwZXJtaXNzaW9uPzogRW50aXR5VHlwZVBlcm1pc3Npb247XG59XG5cbi8qKlxuICogRW50aXR5IFR5cGUgQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlUmVzcG9uc2Uge1xuICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcbiAgZW50aXR5VHlwZXM/OiBBcnJheTxFbnRpdHlUeXBlPjtcbiAgcGVybWlzc2lvbj86IEVudGl0eVR5cGVQZXJtaXNzaW9uO1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgZW50aXR5IHR5cGVzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVR5cGVTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEVudGl0eVR5cGVTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVzcG9uc2UgZm9yIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlUeXBlU2VhcmNoUmVzcG9uc2Uge1xuICBlbnRpdHlUeXBlcz86IEFycmF5PEVudGl0eVR5cGU+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcGljR2FtZXNBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXBpYyBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXBpY0dhbWVzSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEVwaWNHYW1lc0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZXMgYW4gZXJyb3IuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3Ige1xuICBjb2RlPzogc3RyaW5nO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgbWVzc2FnZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGFuZGFyZCBlcnJvciBkb21haW4gb2JqZWN0IHRoYXQgY2FuIGFsc28gYmUgdXNlZCBhcyB0aGUgcmVzcG9uc2UgZnJvbSBhbiBBUEkgY2FsbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFcnJvcnMge1xuICBmaWVsZEVycm9ycz86IFJlY29yZDxzdHJpbmcsIEFycmF5PEVycm9yPj47XG4gIGdlbmVyYWxFcnJvcnM/OiBBcnJheTxFcnJvcj47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb25maWd1cmF0aW9uIHtcbiAgZXZlbnRzPzogUmVjb3JkPEV2ZW50VHlwZSwgRXZlbnRDb25maWd1cmF0aW9uRGF0YT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDb25maWd1cmF0aW9uRGF0YSBleHRlbmRzIEVuYWJsZWFibGUge1xuICB0cmFuc2FjdGlvblR5cGU/OiBUcmFuc2FjdGlvblR5cGU7XG59XG5cbi8qKlxuICogSW5mb3JtYXRpb24gYWJvdXQgYSB1c2VyIGV2ZW50IChsb2dpbiwgcmVnaXN0ZXIsIGV0YykgdGhhdCBoZWxwcyBpZGVudGlmeSB0aGUgc291cmNlIG9mIHRoZSBldmVudCAobG9jYXRpb24sIGRldmljZSB0eXBlLCBPUywgZXRjKS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudEluZm8ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGV2aWNlRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGRldmljZU5hbWU/OiBzdHJpbmc7XG4gIGRldmljZVR5cGU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgbG9jYXRpb24/OiBMb2NhdGlvbjtcbiAgb3M/OiBzdHJpbmc7XG4gIHVzZXJBZ2VudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBsb2cgdXNlZCBpbnRlcm5hbGx5IGJ5IEZ1c2lvbkF1dGggdG8gaGVscCBkZXZlbG9wZXJzIGRlYnVnIGhvb2tzLCBXZWJob29rcywgZW1haWwgdGVtcGxhdGVzLCBldGMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2cge1xuICBpZD86IG51bWJlcjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbWVzc2FnZT86IHN0cmluZztcbiAgdHlwZT86IEV2ZW50TG9nVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudExvZ0NvbmZpZ3VyYXRpb24ge1xuICBudW1iZXJUb1JldGFpbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFdmVudCBldmVudCB0byBhbiBldmVudCBsb2cgd2FzIGNyZWF0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBldmVudExvZz86IEV2ZW50TG9nO1xufVxuXG4vKipcbiAqIEV2ZW50IGxvZyByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRMb2dSZXNwb25zZSB7XG4gIGV2ZW50TG9nPzogRXZlbnRMb2c7XG59XG5cbi8qKlxuICogU2VhcmNoIGNyaXRlcmlhIGZvciB0aGUgZXZlbnQgbG9nLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBlbmQ/OiBudW1iZXI7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIHN0YXJ0PzogbnVtYmVyO1xuICB0eXBlPzogRXZlbnRMb2dUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEV2ZW50TG9nU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogRXZlbnQgbG9nIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50TG9nU2VhcmNoUmVzcG9uc2Uge1xuICBldmVudExvZ3M/OiBBcnJheTxFdmVudExvZz47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEV2ZW50IExvZyBUeXBlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBFdmVudExvZ1R5cGUge1xuICBJbmZvcm1hdGlvbiA9IFwiSW5mb3JtYXRpb25cIixcbiAgRGVidWcgPSBcIkRlYnVnXCIsXG4gIEVycm9yID0gXCJFcnJvclwiXG59XG5cbi8qKlxuICogQ29udGFpbmVyIGZvciB0aGUgZXZlbnQgaW5mb3JtYXRpb24uIFRoaXMgaXMgdGhlIEpTT04gdGhhdCBpcyBzZW50IGZyb20gRnVzaW9uQXV0aCB0byB3ZWJob29rcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudFJlcXVlc3Qge1xuICBldmVudD86IEJhc2VFdmVudDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIGV2ZW50IHR5cGVzIHRoYXQgRnVzaW9uQXV0aCBwcm9kdWNlcy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgSldUUHVibGljS2V5VXBkYXRlID0gXCJqd3QucHVibGljLWtleS51cGRhdGVcIixcbiAgSldUUmVmcmVzaFRva2VuUmV2b2tlID0gXCJqd3QucmVmcmVzaC10b2tlbi5yZXZva2VcIixcbiAgSldUUmVmcmVzaCA9IFwiand0LnJlZnJlc2hcIixcbiAgQXVkaXRMb2dDcmVhdGUgPSBcImF1ZGl0LWxvZy5jcmVhdGVcIixcbiAgRXZlbnRMb2dDcmVhdGUgPSBcImV2ZW50LWxvZy5jcmVhdGVcIixcbiAgS2lja3N0YXJ0U3VjY2VzcyA9IFwia2lja3N0YXJ0LnN1Y2Nlc3NcIixcbiAgR3JvdXBDcmVhdGUgPSBcImdyb3VwLmNyZWF0ZVwiLFxuICBHcm91cENyZWF0ZUNvbXBsZXRlID0gXCJncm91cC5jcmVhdGUuY29tcGxldGVcIixcbiAgR3JvdXBEZWxldGUgPSBcImdyb3VwLmRlbGV0ZVwiLFxuICBHcm91cERlbGV0ZUNvbXBsZXRlID0gXCJncm91cC5kZWxldGUuY29tcGxldGVcIixcbiAgR3JvdXBNZW1iZXJBZGQgPSBcImdyb3VwLm1lbWJlci5hZGRcIixcbiAgR3JvdXBNZW1iZXJBZGRDb21wbGV0ZSA9IFwiZ3JvdXAubWVtYmVyLmFkZC5jb21wbGV0ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZSA9IFwiZ3JvdXAubWVtYmVyLnJlbW92ZVwiLFxuICBHcm91cE1lbWJlclJlbW92ZUNvbXBsZXRlID0gXCJncm91cC5tZW1iZXIucmVtb3ZlLmNvbXBsZXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlID0gXCJncm91cC5tZW1iZXIudXBkYXRlXCIsXG4gIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGUgPSBcImdyb3VwLm1lbWJlci51cGRhdGUuY29tcGxldGVcIixcbiAgR3JvdXBVcGRhdGUgPSBcImdyb3VwLnVwZGF0ZVwiLFxuICBHcm91cFVwZGF0ZUNvbXBsZXRlID0gXCJncm91cC51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlckFjdGlvbiA9IFwidXNlci5hY3Rpb25cIixcbiAgVXNlckJ1bGtDcmVhdGUgPSBcInVzZXIuYnVsay5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZSA9IFwidXNlci5jcmVhdGVcIixcbiAgVXNlckNyZWF0ZUNvbXBsZXRlID0gXCJ1c2VyLmNyZWF0ZS5jb21wbGV0ZVwiLFxuICBVc2VyRGVhY3RpdmF0ZSA9IFwidXNlci5kZWFjdGl2YXRlXCIsXG4gIFVzZXJEZWxldGUgPSBcInVzZXIuZGVsZXRlXCIsXG4gIFVzZXJEZWxldGVDb21wbGV0ZSA9IFwidXNlci5kZWxldGUuY29tcGxldGVcIixcbiAgVXNlckVtYWlsVXBkYXRlID0gXCJ1c2VyLmVtYWlsLnVwZGF0ZVwiLFxuICBVc2VyRW1haWxWZXJpZmllZCA9IFwidXNlci5lbWFpbC52ZXJpZmllZFwiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlckxpbmsgPSBcInVzZXIuaWRlbnRpdHktcHJvdmlkZXIubGlua1wiLFxuICBVc2VySWRlbnRpdHlQcm92aWRlclVubGluayA9IFwidXNlci5pZGVudGl0eS1wcm92aWRlci51bmxpbmtcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPbkNyZWF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS5jcmVhdGVcIixcbiAgVXNlckxvZ2luSWREdXBsaWNhdGVPblVwZGF0ZSA9IFwidXNlci5sb2dpbklkLmR1cGxpY2F0ZS51cGRhdGVcIixcbiAgVXNlckxvZ2luRmFpbGVkID0gXCJ1c2VyLmxvZ2luLmZhaWxlZFwiLFxuICBVc2VyTG9naW5OZXdEZXZpY2UgPSBcInVzZXIubG9naW4ubmV3LWRldmljZVwiLFxuICBVc2VyTG9naW5TdWNjZXNzID0gXCJ1c2VyLmxvZ2luLnN1Y2Nlc3NcIixcbiAgVXNlckxvZ2luU3VzcGljaW91cyA9IFwidXNlci5sb2dpbi5zdXNwaWNpb3VzXCIsXG4gIFVzZXJQYXNzd29yZEJyZWFjaCA9IFwidXNlci5wYXNzd29yZC5icmVhY2hcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTZW5kID0gXCJ1c2VyLnBhc3N3b3JkLnJlc2V0LnNlbmRcIixcbiAgVXNlclBhc3N3b3JkUmVzZXRTdGFydCA9IFwidXNlci5wYXNzd29yZC5yZXNldC5zdGFydFwiLFxuICBVc2VyUGFzc3dvcmRSZXNldFN1Y2Nlc3MgPSBcInVzZXIucGFzc3dvcmQucmVzZXQuc3VjY2Vzc1wiLFxuICBVc2VyUGFzc3dvcmRVcGRhdGUgPSBcInVzZXIucGFzc3dvcmQudXBkYXRlXCIsXG4gIFVzZXJSZWFjdGl2YXRlID0gXCJ1c2VyLnJlYWN0aXZhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVDb21wbGV0ZSA9IFwidXNlci5yZWdpc3RyYXRpb24uY3JlYXRlLmNvbXBsZXRlXCIsXG4gIFVzZXJSZWdpc3RyYXRpb25EZWxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlQ29tcGxldGUgPSBcInVzZXIucmVnaXN0cmF0aW9uLmRlbGV0ZS5jb21wbGV0ZVwiLFxuICBVc2VyUmVnaXN0cmF0aW9uVXBkYXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblVwZGF0ZUNvbXBsZXRlID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi51cGRhdGUuY29tcGxldGVcIixcbiAgVXNlclJlZ2lzdHJhdGlvblZlcmlmaWVkID0gXCJ1c2VyLnJlZ2lzdHJhdGlvbi52ZXJpZmllZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kQWRkID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLmFkZFwiLFxuICBVc2VyVHdvRmFjdG9yTWV0aG9kUmVtb3ZlID0gXCJ1c2VyLnR3by1mYWN0b3IubWV0aG9kLnJlbW92ZVwiLFxuICBVc2VyVXBkYXRlID0gXCJ1c2VyLnVwZGF0ZVwiLFxuICBVc2VyVXBkYXRlQ29tcGxldGUgPSBcInVzZXIudXBkYXRlLmNvbXBsZXRlXCIsXG4gIFRlc3QgPSBcInRlc3RcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBFeHBpcnlVbml0IHtcbiAgTUlOVVRFUyA9IFwiTUlOVVRFU1wiLFxuICBIT1VSUyA9IFwiSE9VUlNcIixcbiAgREFZUyA9IFwiREFZU1wiLFxuICBXRUVLUyA9IFwiV0VFS1NcIixcbiAgTU9OVEhTID0gXCJNT05USFNcIixcbiAgWUVBUlMgPSBcIllFQVJTXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZXJuYWxJZGVudGlmaWVyQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhvcml6YXRpb25HcmFudElkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgY2hhbmdlUGFzc3dvcmRJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGNoYW5nZVBhc3N3b3JkSWRUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBkZXZpY2VDb2RlVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZGV2aWNlVXNlckNvZGVJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBlbWFpbFZlcmlmaWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgZW1haWxWZXJpZmljYXRpb25PbmVUaW1lQ29kZUdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIGV4dGVybmFsQXV0aGVudGljYXRpb25JZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIG9uZVRpbWVQYXNzd29yZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHBhc3N3b3JkbGVzc0xvZ2luR2VuZXJhdG9yPzogU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRsZXNzTG9naW5UaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICBwZW5kaW5nQWNjb3VudExpbmtUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICByZWdpc3RyYXRpb25WZXJpZmljYXRpb25JZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uT25lVGltZUNvZGVHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICBzYW1sdjJBdXRoTlJlcXVlc3RJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHNldHVwUGFzc3dvcmRJZEdlbmVyYXRvcj86IFNlY3VyZUdlbmVyYXRvckNvbmZpZ3VyYXRpb247XG4gIHNldHVwUGFzc3dvcmRJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHRydXN0VG9rZW5UaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB0d29GYWN0b3JJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHR3b0ZhY3Rvck9uZVRpbWVDb2RlSWRHZW5lcmF0b3I/OiBTZWN1cmVHZW5lcmF0b3JDb25maWd1cmF0aW9uO1xuICB0d29GYWN0b3JPbmVUaW1lQ29kZUlkVGltZVRvTGl2ZUluU2Vjb25kcz86IG51bWJlcjtcbiAgdHdvRmFjdG9yVHJ1c3RJZFRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG4gIHdlYkF1dGhuQXV0aGVudGljYXRpb25DaGFsbGVuZ2VUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xuICB3ZWJBdXRoblJlZ2lzdHJhdGlvbkNoYWxsZW5nZVRpbWVUb0xpdmVJblNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4dGVybmFsSldUQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIEV4dGVybmFsIEpXVC1vbmx5IGlkZW50aXR5IHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmYgYW5kIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHRlcm5hbEpXVElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxFeHRlcm5hbEpXVEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBjbGFpbU1hcD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGRlZmF1bHRLZXlJZD86IFVVSUQ7XG4gIGRvbWFpbnM/OiBBcnJheTxzdHJpbmc+O1xuICBoZWFkZXJLZXlQYXJhbWV0ZXI/OiBzdHJpbmc7XG4gIG9hdXRoMj86IElkZW50aXR5UHJvdmlkZXJPYXV0aDJDb25maWd1cmF0aW9uO1xuICB1bmlxdWVJZGVudGl0eUNsYWltPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGZpZWxkcz86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHBlcm1pc3Npb25zPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZhY2Vib29rIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWNlYm9va0lkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxGYWNlYm9va0FwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBhcHBJZD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZmllbGRzPzogc3RyaW5nO1xuICBsb2dpbk1ldGhvZD86IElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZDtcbiAgcGVybWlzc2lvbnM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwb2xpY3kgdG8gY29uZmlndXJlIGlmIGFuZCB3aGVuIHRoZSB1c2VyLWFjdGlvbiBpcyBjYW5jZWxlZCBwcmlvciB0byB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgYWN0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsZWRBdXRoZW50aWNhdGlvbkFjdGlvbkNhbmNlbFBvbGljeSB7XG4gIG9uUGFzc3dvcmRSZXNldD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGJlaGF2aW9yIG9mIGZhaWxlZCBsb2dpbiBhdHRlbXB0cy4gVGhpcyBoZWxwcyB1cyBwcm90ZWN0IGFnYWluc3QgYnJ1dGUgZm9yY2UgcGFzc3dvcmQgYXR0YWNrcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbGVkQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYWN0aW9uQ2FuY2VsUG9saWN5PzogRmFpbGVkQXV0aGVudGljYXRpb25BY3Rpb25DYW5jZWxQb2xpY3k7XG4gIGFjdGlvbkR1cmF0aW9uPzogbnVtYmVyO1xuICBhY3Rpb25EdXJhdGlvblVuaXQ/OiBFeHBpcnlVbml0O1xuICBlbWFpbFVzZXI/OiBib29sZWFuO1xuICByZXNldENvdW50SW5TZWNvbmRzPzogbnVtYmVyO1xuICB0b29NYW55QXR0ZW1wdHM/OiBudW1iZXI7XG4gIHVzZXJBY3Rpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgZmFtaWx5IGdyb3VwaW5nIG9mIHVzZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseSB7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG1lbWJlcnM/OiBBcnJheTxGYW1pbHlNZW1iZXI+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYWxsb3dDaGlsZFJlZ2lzdHJhdGlvbnM/OiBib29sZWFuO1xuICBjb25maXJtQ2hpbGRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBkZWxldGVPcnBoYW5lZEFjY291bnRzPzogYm9vbGVhbjtcbiAgZGVsZXRlT3JwaGFuZWRBY2NvdW50c0RheXM/OiBudW1iZXI7XG4gIGZhbWlseVJlcXVlc3RFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICBtYXhpbXVtQ2hpbGRBZ2U/OiBudW1iZXI7XG4gIG1pbmltdW1Pd25lckFnZT86IG51bWJlcjtcbiAgcGFyZW50RW1haWxSZXF1aXJlZD86IGJvb2xlYW47XG4gIHBhcmVudFJlZ2lzdHJhdGlvbkVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIHNlbmRpbmcgb3V0IGZhbWlseSByZXF1ZXN0cyB0byBwYXJlbnQncy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlFbWFpbFJlcXVlc3Qge1xuICBwYXJlbnRFbWFpbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzaW5nbGUgZmFtaWx5IG1lbWJlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlNZW1iZXIge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG93bmVyPzogYm9vbGVhbjtcbiAgcm9sZT86IEZhbWlseVJvbGU7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgZm9yIG1hbmFnaW5nIGZhbWlsaWVzIGFuZCBtZW1iZXJzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhbWlseVJlcXVlc3Qge1xuICBmYW1pbHlNZW1iZXI/OiBGYW1pbHlNZW1iZXI7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBtYW5hZ2luZyBmYW1pbGllcyBhbmQgbWVtYmVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYW1pbHlSZXNwb25zZSB7XG4gIGZhbWlsaWVzPzogQXJyYXk8RmFtaWx5PjtcbiAgZmFtaWx5PzogRmFtaWx5O1xufVxuXG5leHBvcnQgZW51bSBGYW1pbHlSb2xlIHtcbiAgQ2hpbGQgPSBcIkNoaWxkXCIsXG4gIFRlZW4gPSBcIlRlZW5cIixcbiAgQWR1bHQgPSBcIkFkdWx0XCJcbn1cblxuLyoqXG4gKiBGb3Jnb3QgcGFzc3dvcmQgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZ290UGFzc3dvcmRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc2VuZEZvcmdvdFBhc3N3b3JkRW1haWw/OiBib29sZWFuO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZvcmdvdCBwYXNzd29yZCByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmdvdFBhc3N3b3JkUmVzcG9uc2Uge1xuICBjaGFuZ2VQYXNzd29yZElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0ZXBzPzogQXJyYXk8Rm9ybVN0ZXA+O1xuICB0eXBlPzogRm9ybVR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtQ29udHJvbCB7XG4gIGNoZWNrYm94ID0gXCJjaGVja2JveFwiLFxuICBudW1iZXIgPSBcIm51bWJlclwiLFxuICBwYXNzd29yZCA9IFwicGFzc3dvcmRcIixcbiAgcmFkaW8gPSBcInJhZGlvXCIsXG4gIHNlbGVjdCA9IFwic2VsZWN0XCIsXG4gIHRleHRhcmVhID0gXCJ0ZXh0YXJlYVwiLFxuICB0ZXh0ID0gXCJ0ZXh0XCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEZvcm1EYXRhVHlwZSB7XG4gIGJvb2wgPSBcImJvb2xcIixcbiAgY29uc2VudCA9IFwiY29uc2VudFwiLFxuICBkYXRlID0gXCJkYXRlXCIsXG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICBudW1iZXIgPSBcIm51bWJlclwiLFxuICBzdHJpbmcgPSBcInN0cmluZ1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1GaWVsZCB7XG4gIGNvbmZpcm0/OiBib29sZWFuO1xuICBjb25zZW50SWQ/OiBVVUlEO1xuICBjb250cm9sPzogRm9ybUNvbnRyb2w7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBrZXk/OiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBvcHRpb25zPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICB0eXBlPzogRm9ybURhdGFUeXBlO1xuICB2YWxpZGF0b3I/OiBGb3JtRmllbGRWYWxpZGF0b3I7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtRmllbGRBZG1pblBvbGljeSB7XG4gIEVkaXQgPSBcIkVkaXRcIixcbiAgVmlldyA9IFwiVmlld1wiXG59XG5cbi8qKlxuICogVGhlIEZvcm1GaWVsZCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3JtRmllbGRSZXF1ZXN0IHtcbiAgZmllbGQ/OiBGb3JtRmllbGQ7XG4gIGZpZWxkcz86IEFycmF5PEZvcm1GaWVsZD47XG59XG5cbi8qKlxuICogRm9ybSBmaWVsZCByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1GaWVsZFJlc3BvbnNlIHtcbiAgZmllbGQ/OiBGb3JtRmllbGQ7XG4gIGZpZWxkcz86IEFycmF5PEZvcm1GaWVsZD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1GaWVsZFZhbGlkYXRvciBleHRlbmRzIEVuYWJsZWFibGUge1xuICBleHByZXNzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZvcm0gcmVzcG9uc2UuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1SZXF1ZXN0IHtcbiAgZm9ybT86IEZvcm07XG59XG5cbi8qKlxuICogRm9ybSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRm9ybVJlc3BvbnNlIHtcbiAgZm9ybT86IEZvcm07XG4gIGZvcm1zPzogQXJyYXk8Rm9ybT47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1TdGVwIHtcbiAgZmllbGRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBGb3JtVHlwZSB7XG4gIHJlZ2lzdHJhdGlvbiA9IFwicmVnaXN0cmF0aW9uXCIsXG4gIGFkbWluUmVnaXN0cmF0aW9uID0gXCJhZG1pblJlZ2lzdHJhdGlvblwiLFxuICBhZG1pblVzZXIgPSBcImFkbWluVXNlclwiLFxuICBzZWxmU2VydmljZVVzZXIgPSBcInNlbGZTZXJ2aWNlVXNlclwiXG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBGdXNpb25BdXRoIGNvbm5lY3Rvci5cbiAqXG4gKiBAYXV0aG9yIFRyZXZvciBTbWl0aFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1c2lvbkF1dGhDb25uZWN0b3JDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUNvbm5lY3RvckNvbmZpZ3VyYXRpb24ge1xufVxuXG4vKipcbiAqIE1vZGVscyBhIGdlbmVyaWMgY29ubmVjdG9yLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJpY0Nvbm5lY3RvckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhlbnRpY2F0aW9uVVJMPzogc3RyaW5nO1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgaGVhZGVycz86IEhUVFBIZWFkZXJzO1xuICBodHRwQXV0aGVudGljYXRpb25QYXNzd29yZD86IHN0cmluZztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uVXNlcm5hbWU/OiBzdHJpbmc7XG4gIHJlYWRUaW1lb3V0PzogbnVtYmVyO1xuICBzc2xDZXJ0aWZpY2F0ZUtleUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyaWNNZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgaGVhZGVycz86IEhUVFBIZWFkZXJzO1xuICBodHRwQXV0aGVudGljYXRpb25QYXNzd29yZD86IHN0cmluZztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uVXNlcm5hbWU/OiBzdHJpbmc7XG4gIHJlYWRUaW1lb3V0PzogbnVtYmVyO1xuICBzc2xDZXJ0aWZpY2F0ZT86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHb29nbGVBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgbG9naW5NZXRob2Q/OiBJZGVudGl0eVByb3ZpZGVyTG9naW5NZXRob2Q7XG4gIHByb3BlcnRpZXM/OiBHb29nbGVJZGVudGl0eVByb3ZpZGVyUHJvcGVydGllcztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogR29vZ2xlIHNvY2lhbCBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPEdvb2dsZUFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGxvZ2luTWV0aG9kPzogSWRlbnRpdHlQcm92aWRlckxvZ2luTWV0aG9kO1xuICBwcm9wZXJ0aWVzPzogR29vZ2xlSWRlbnRpdHlQcm92aWRlclByb3BlcnRpZXM7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEdvb2dsZSBzb2NpYWwgbG9naW4gcHJvdmlkZXIgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR29vZ2xlSWRlbnRpdHlQcm92aWRlclByb3BlcnRpZXMge1xuICBhcGk/OiBzdHJpbmc7XG4gIGJ1dHRvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBdXRob3JpemF0aW9uIEdyYW50IHR5cGVzIGFzIGRlZmluZWQgYnkgdGhlIDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjc0OVwiPlRoZSBPQXV0aCAyLjAgQXV0aG9yaXphdGlvblxuICogRnJhbWV3b3JrIC0gUkZDIDY3NDk8L2E+LlxuICogPHA+XG4gKiBTcGVjaWZpYyBuYW1lcyBhcyBkZWZpbmVkIGJ5IDxhIGhyZWY9XCJodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU5MSNzZWN0aW9uLTQuMVwiPlxuICogT0F1dGggMi4wIER5bmFtaWMgQ2xpZW50IFJlZ2lzdHJhdGlvbiBQcm90b2NvbCAtIFJGQyA3NTkxIFNlY3Rpb24gNC4xPC9hPlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gR3JhbnRUeXBlIHtcbiAgYXV0aG9yaXphdGlvbl9jb2RlID0gXCJhdXRob3JpemF0aW9uX2NvZGVcIixcbiAgaW1wbGljaXQgPSBcImltcGxpY2l0XCIsXG4gIHBhc3N3b3JkID0gXCJwYXNzd29yZFwiLFxuICBjbGllbnRfY3JlZGVudGlhbHMgPSBcImNsaWVudF9jcmVkZW50aWFsc1wiLFxuICByZWZyZXNoX3Rva2VuID0gXCJyZWZyZXNoX3Rva2VuXCIsXG4gIHVua25vd24gPSBcInVua25vd25cIixcbiAgZGV2aWNlX2NvZGUgPSBcInVybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOmRldmljZV9jb2RlXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFR5bGVyIFNjb3R0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXAge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcm9sZXM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8QXBwbGljYXRpb25Sb2xlPj47XG4gIHRlbmFudElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIENyZWF0ZWQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQ3JlYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBDcmVhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgQ3JlYXRlIENvbXBsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cERlbGV0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBncm91cD86IEdyb3VwO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgR3JvdXAgRGVsZXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cERlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbn1cblxuLyoqXG4gKiBBIFVzZXIncyBtZW1iZXJzaGlwIGludG8gYSBHcm91cFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlciB7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBncm91cElkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICB1c2VyPzogVXNlcjtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBBZGQgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyQWRkQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgQWRkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlckFkZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBSZW1vdmUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyUmVtb3ZlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgUmVtb3ZlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclJlbW92ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBTZWFyY2ggY3JpdGVyaWEgZm9yIEdyb3VwIE1lbWJlcnNcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBNZW1iZXJTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIGdyb3VwSWQ/OiBVVUlEO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIEdyb3VwIE1lbWJlcnMuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVxdWVzdCB7XG4gIHNlYXJjaD86IEdyb3VwTWVtYmVyU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlc3BvbnNlIGZvciBHcm91cCBNZW1iZXJzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyU2VhcmNoUmVzcG9uc2Uge1xuICBtZW1iZXJzPzogQXJyYXk8R3JvdXBNZW1iZXI+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIE1lbWJlciBVcGRhdGUgQ29tcGxldGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwTWVtYmVyVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIG1lbWJlcnM/OiBBcnJheTxHcm91cE1lbWJlcj47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBHcm91cCBNZW1iZXIgVXBkYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cE1lbWJlclVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgbWVtYmVycz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbn1cblxuLyoqXG4gKiBHcm91cCBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwUmVxdWVzdCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIHJvbGVJZHM/OiBBcnJheTxVVUlEPjtcbn1cblxuLyoqXG4gKiBHcm91cCBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFJlc3BvbnNlIHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgZ3JvdXBzPzogQXJyYXk8R3JvdXA+O1xufVxuXG4vKipcbiAqIFNlYXJjaCBjcml0ZXJpYSBmb3IgR3JvdXBzXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VhcmNoQ3JpdGVyaWEgZXh0ZW5kcyBCYXNlU2VhcmNoQ3JpdGVyaWEge1xuICBuYW1lPzogc3RyaW5nO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIEdyb3Vwcy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBTZWFyY2hSZXF1ZXN0IHtcbiAgc2VhcmNoPzogR3JvdXBTZWFyY2hDcml0ZXJpYTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggcmVzcG9uc2UgZm9yIEdyb3Vwc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcm91cFNlYXJjaFJlc3BvbnNlIHtcbiAgZ3JvdXBzPzogQXJyYXk8R3JvdXA+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIFVwZGF0ZSBDb21wbGV0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBVcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgZ3JvdXA/OiBHcm91cDtcbiAgb3JpZ2luYWw/OiBHcm91cDtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIEdyb3VwIFVwZGF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGdyb3VwPzogR3JvdXA7XG4gIG9yaWdpbmFsPzogR3JvdXA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeUl0ZW0ge1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGNyZWF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGV4cGlyeT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUeXBlIGZvciB3ZWJob29rIGhlYWRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSFRUUEhlYWRlcnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIEhUVFBNZXRob2Qge1xuICBHRVQgPSBcIkdFVFwiLFxuICBQT1NUID0gXCJQT1NUXCIsXG4gIFBVVCA9IFwiUFVUXCIsXG4gIERFTEVURSA9IFwiREVMRVRFXCIsXG4gIEhFQUQgPSBcIkhFQURcIixcbiAgT1BUSU9OUyA9IFwiT1BUSU9OU1wiLFxuICBQQVRDSCA9IFwiUEFUQ0hcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIWVBSQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICByZWx5aW5nUGFydHlBcHBsaWNhdGlvbklkPzogc3RyaW5nO1xuICByZWx5aW5nUGFydHlVUkw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhZUFJJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8SFlQUkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICByZWx5aW5nUGFydHlBcHBsaWNhdGlvbklkPzogc3RyaW5nO1xuICByZWx5aW5nUGFydHlVUkw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckRldGFpbHMge1xuICBhcHBsaWNhdGlvbklkcz86IEFycmF5PFVVSUQ+O1xuICBpZD86IFVVSUQ7XG4gIGlkcEVuZHBvaW50Pzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbiAgdHlwZT86IElkZW50aXR5UHJvdmlkZXJUeXBlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyTGltaXRVc2VyTGlua2luZ1BvbGljeSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBtYXhpbXVtTGlua3M/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW5rIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBpZGVudGl0eVByb3ZpZGVySWQ/OiBVVUlEO1xuICBpZGVudGl0eVByb3ZpZGVyVXNlcklkPzogc3RyaW5nO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0TG9naW5JbnN0YW50PzogbnVtYmVyO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHRva2VuPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIFRoZSBJZFAgYmVoYXZpb3Igd2hlbiBubyB1c2VyIGxpbmsgaGFzIGJlZW4gbWFkZSB5ZXQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBJZGVudGl0eVByb3ZpZGVyTGlua2luZ1N0cmF0ZWd5IHtcbiAgQ3JlYXRlUGVuZGluZ0xpbmsgPSBcIkNyZWF0ZVBlbmRpbmdMaW5rXCIsXG4gIERpc2FibGVkID0gXCJEaXNhYmxlZFwiLFxuICBMaW5rQW5vbnltb3VzbHkgPSBcIkxpbmtBbm9ueW1vdXNseVwiLFxuICBMaW5rQnlFbWFpbCA9IFwiTGlua0J5RW1haWxcIixcbiAgTGlua0J5RW1haWxGb3JFeGlzdGluZ1VzZXIgPSBcIkxpbmtCeUVtYWlsRm9yRXhpc3RpbmdVc2VyXCIsXG4gIExpbmtCeVVzZXJuYW1lID0gXCJMaW5rQnlVc2VybmFtZVwiLFxuICBMaW5rQnlVc2VybmFtZUZvckV4aXN0aW5nVXNlciA9IFwiTGlua0J5VXNlcm5hbWVGb3JFeGlzdGluZ1VzZXJcIixcbiAgVW5zdXBwb3J0ZWQgPSBcIlVuc3VwcG9ydGVkXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxpbmtSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG4gIHBlbmRpbmdJZFBMaW5rSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJMaW5rUmVzcG9uc2Uge1xuICBpZGVudGl0eVByb3ZpZGVyTGluaz86IElkZW50aXR5UHJvdmlkZXJMaW5rO1xuICBpZGVudGl0eVByb3ZpZGVyTGlua3M/OiBBcnJheTxJZGVudGl0eVByb3ZpZGVyTGluaz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIElkZW50aXR5UHJvdmlkZXJMb2dpbk1ldGhvZCB7XG4gIFVzZVBvcHVwID0gXCJVc2VQb3B1cFwiLFxuICBVc2VSZWRpcmVjdCA9IFwiVXNlUmVkaXJlY3RcIixcbiAgVXNlVmVuZG9ySmF2YVNjcmlwdCA9IFwiVXNlVmVuZG9ySmF2YVNjcmlwdFwiXG59XG5cbi8qKlxuICogTG9naW4gQVBJIHJlcXVlc3Qgb2JqZWN0IHVzZWQgZm9yIGxvZ2luIHRvIHRoaXJkLXBhcnR5IHN5c3RlbXMgKGkuZS4gTG9naW4gd2l0aCBGYWNlYm9vaykuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlckxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZW5jb2RlZEpXVD86IHN0cmluZztcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgbm9MaW5rPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIGNsaWVudEF1dGhlbnRpY2F0aW9uTWV0aG9kPzogQ2xpZW50QXV0aGVudGljYXRpb25NZXRob2Q7XG4gIGVtYWlsQ2xhaW0/OiBzdHJpbmc7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50Pzogc3RyaW5nO1xuICB1bmlxdWVJZENsYWltPzogc3RyaW5nO1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcm5hbWVDbGFpbT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclJlcXVlc3Qge1xuICBpZGVudGl0eVByb3ZpZGVyPzogQmFzZUlkZW50aXR5UHJvdmlkZXI8YW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclJlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlcj86IEJhc2VJZGVudGl0eVByb3ZpZGVyPGFueT47XG4gIGlkZW50aXR5UHJvdmlkZXJzPzogQXJyYXk8QmFzZUlkZW50aXR5UHJvdmlkZXI8YW55Pj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElkZW50aXR5UHJvdmlkZXJTdGFydExvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJZGVudGl0eVByb3ZpZGVyU3RhcnRMb2dpblJlc3BvbnNlIHtcbiAgY29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb24ge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgbGltaXRVc2VyTGlua0NvdW50PzogSWRlbnRpdHlQcm92aWRlckxpbWl0VXNlckxpbmtpbmdQb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBJZGVudGl0eVByb3ZpZGVyVHlwZSB7XG4gIEFwcGxlID0gXCJBcHBsZVwiLFxuICBFcGljR2FtZXMgPSBcIkVwaWNHYW1lc1wiLFxuICBFeHRlcm5hbEpXVCA9IFwiRXh0ZXJuYWxKV1RcIixcbiAgRmFjZWJvb2sgPSBcIkZhY2Vib29rXCIsXG4gIEdvb2dsZSA9IFwiR29vZ2xlXCIsXG4gIEhZUFIgPSBcIkhZUFJcIixcbiAgTGlua2VkSW4gPSBcIkxpbmtlZEluXCIsXG4gIE5pbnRlbmRvID0gXCJOaW50ZW5kb1wiLFxuICBPcGVuSURDb25uZWN0ID0gXCJPcGVuSURDb25uZWN0XCIsXG4gIFNBTUx2MiA9IFwiU0FNTHYyXCIsXG4gIFNBTUx2MklkUEluaXRpYXRlZCA9IFwiU0FNTHYySWRQSW5pdGlhdGVkXCIsXG4gIFNvbnlQU04gPSBcIlNvbnlQU05cIixcbiAgU3RlYW0gPSBcIlN0ZWFtXCIsXG4gIFR3aXRjaCA9IFwiVHdpdGNoXCIsXG4gIFR3aXR0ZXIgPSBcIlR3aXR0ZXJcIixcbiAgWGJveCA9IFwiWGJveFwiXG59XG5cbi8qKlxuICogSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW1wb3J0UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBlbmNyeXB0aW9uU2NoZW1lPzogc3RyaW5nO1xuICBmYWN0b3I/OiBudW1iZXI7XG4gIHVzZXJzPzogQXJyYXk8VXNlcj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhpcyBldmVudCBpcyBub3Qgc2NvcGVkIHRvIGEgdGVuYW50IGFuZCB3aWxsIGJlIHNlbnQgdG8gYWxsIHdlYmhvb2tzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YW5jZUV2ZW50IGV4dGVuZHMgTm9uVHJhbnNhY3Rpb25hbEV2ZW50IHtcbn1cblxuLyoqXG4gKiBUaGUgSW50ZWdyYXRpb24gUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvblJlcXVlc3Qge1xuICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogVGhlIEludGVncmF0aW9uIFJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVncmF0aW9uUmVzcG9uc2Uge1xuICBpbnRlZ3JhdGlvbnM/OiBJbnRlZ3JhdGlvbnM7XG59XG5cbi8qKlxuICogQXZhaWxhYmxlIEludGVncmF0aW9uc1xuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRlZ3JhdGlvbnMge1xuICBjbGVhbnNwZWFrPzogQ2xlYW5TcGVha0NvbmZpZ3VyYXRpb247XG4gIGthZmthPzogS2Fma2FDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnRyb3NwZWN0UmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbEVudHJ5IHtcbiAgYWN0aW9uPzogSVBBY2Nlc3NDb250cm9sRW50cnlBY3Rpb247XG4gIGVuZElQQWRkcmVzcz86IHN0cmluZztcbiAgc3RhcnRJUEFkZHJlc3M/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGVudW0gSVBBY2Nlc3NDb250cm9sRW50cnlBY3Rpb24ge1xuICBBbGxvdyA9IFwiQWxsb3dcIixcbiAgQmxvY2sgPSBcIkJsb2NrXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3Qge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW50cmllcz86IEFycmF5PElQQWNjZXNzQ29udHJvbEVudHJ5PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RSZXF1ZXN0IHtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdD86IElQQWNjZXNzQ29udHJvbExpc3Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0UmVzcG9uc2Uge1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0PzogSVBBY2Nlc3NDb250cm9sTGlzdDtcbiAgaXBBY2Nlc3NDb250cm9sTGlzdHM/OiBBcnJheTxJUEFjY2Vzc0NvbnRyb2xMaXN0Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElQQWNjZXNzQ29udHJvbExpc3RTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VTZWFyY2hDcml0ZXJpYSB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VhcmNoIHJlcXVlc3QgZm9yIElQIEFDTHMgLlxuICpcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBBY2Nlc3NDb250cm9sTGlzdFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUEFjY2Vzc0NvbnRyb2xMaXN0U2VhcmNoUmVzcG9uc2Uge1xuICBpcEFjY2Vzc0NvbnRyb2xMaXN0cz86IEFycmF5PElQQWNjZXNzQ29udHJvbExpc3Q+O1xuICB0b3RhbD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNzdWVSZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBKU09OIFdlYiBLZXkgYXMgZGVmaW5lZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MTcjc2VjdGlvbi00XCI+UkZDIDc1MTcgSlNPTiBXZWIgS2V5IChKV0spXG4gKiBTZWN0aW9uIDQ8L2E+IGFuZCA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzc1MThcIj5SRkMgNzUxOCBKU09OIFdlYiBBbGdvcml0aG1zIChKV0EpPC9hPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTldlYktleSB7XG4gIGFsZz86IEFsZ29yaXRobTtcbiAgY3J2Pzogc3RyaW5nO1xuICBkPzogc3RyaW5nO1xuICBkcD86IHN0cmluZztcbiAgZHE/OiBzdHJpbmc7XG4gIGU/OiBzdHJpbmc7XG4gIGtpZD86IHN0cmluZztcbiAga3R5PzogS2V5VHlwZTtcbiAgbj86IHN0cmluZztcbiAgW290aGVyOiBzdHJpbmddOiBhbnk7IC8vIEFueSBvdGhlciBmaWVsZHNcbiAgcD86IHN0cmluZztcbiAgcT86IHN0cmluZztcbiAgcWk/OiBzdHJpbmc7XG4gIHVzZT86IHN0cmluZztcbiAgeD86IHN0cmluZztcbiAgeDVjPzogQXJyYXk8c3RyaW5nPjtcbiAgeDV0Pzogc3RyaW5nO1xuICB4NXRfUzI1Nj86IHN0cmluZztcbiAgeT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZm9yIGFueSBvYmplY3QgdGhhdCBjYW4gcHJvdmlkZSBKU09OIFdlYiBrZXkgSW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTldlYktleUluZm9Qcm92aWRlciB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXS1NSZXNwb25zZSB7XG4gIGtleXM/OiBBcnJheTxKU09OV2ViS2V5Pjtcbn1cblxuLyoqXG4gKiBKU09OIFdlYiBUb2tlbiAoSldUKSBhcyBkZWZpbmVkIGJ5IFJGQyA3NTE5LlxuICogPHByZT5cbiAqIEZyb20gUkZDIDc1MTkgU2VjdGlvbiAxLiBJbnRyb2R1Y3Rpb246XG4gKiAgICBUaGUgc3VnZ2VzdGVkIHByb251bmNpYXRpb24gb2YgSldUIGlzIHRoZSBzYW1lIGFzIHRoZSBFbmdsaXNoIHdvcmQgXCJqb3RcIi5cbiAqIDwvcHJlPlxuICogVGhlIEpXVCBpcyBub3QgVGhyZWFkLVNhZmUgYW5kIHNob3VsZCBub3QgYmUgcmUtdXNlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUIHtcbiAgYXVkPzogYW55O1xuICBleHA/OiBudW1iZXI7XG4gIGlhdD86IG51bWJlcjtcbiAgaXNzPzogc3RyaW5nO1xuICBqdGk/OiBzdHJpbmc7XG4gIG5iZj86IG51bWJlcjtcbiAgW290aGVyQ2xhaW1zOiBzdHJpbmddOiBhbnk7IC8vIEFueSBvdGhlciBmaWVsZHNcbiAgc3ViPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEpXVCBDb25maWd1cmF0aW9uLiBBIEpXVCBDb25maWd1cmF0aW9uIGZvciBhbiBBcHBsaWNhdGlvbiBtYXkgbm90IGJlIGFjdGl2ZSBpZiBpdCBpcyB1c2luZyB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24sIHRoZSBjb25maWd1cmF0aW9uXG4gKiBtYXkgYmUgPGNvZGU+ZW5hYmxlZCA9IGZhbHNlPC9jb2RlPi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhY2Nlc3NUb2tlbktleUlkPzogVVVJRDtcbiAgaWRUb2tlbktleUlkPzogVVVJRDtcbiAgcmVmcmVzaFRva2VuRXhwaXJhdGlvblBvbGljeT86IFJlZnJlc2hUb2tlbkV4cGlyYXRpb25Qb2xpY3k7XG4gIHJlZnJlc2hUb2tlblJldm9jYXRpb25Qb2xpY3k/OiBSZWZyZXNoVG9rZW5SZXZvY2F0aW9uUG9saWN5O1xuICByZWZyZXNoVG9rZW5UaW1lVG9MaXZlSW5NaW51dGVzPzogbnVtYmVyO1xuICByZWZyZXNoVG9rZW5Vc2FnZVBvbGljeT86IFJlZnJlc2hUb2tlblVzYWdlUG9saWN5O1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgSldUIHB1YmxpYyBrZXkgUmVmcmVzaCBUb2tlbiBSZXZva2UgRXZlbnQuIFRoaXMgZXZlbnQgbWlnaHQgYmUgZm9yIGEgc2luZ2xlXG4gKiB0b2tlbiwgYSB1c2VyIG9yIGFuIGVudGlyZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RQdWJsaWNLZXlVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBKV1QgUmVmcmVzaCBFdmVudC4gVGhpcyBldmVudCB3aWxsIGJlIGZpcmVkIHdoZW4gYSBKV1QgaXMgXCJyZWZyZXNoZWRcIiAoZ2VuZXJhdGVkKSB1c2luZyBhIFJlZnJlc2ggVG9rZW4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHJlZnJlc2hpbmcgYSBKV1Qgd2l0aCBhIFJlZnJlc2ggVG9rZW4uXG4gKiA8cD5cbiAqIFVzaW5nIGEgZGlmZmVyZW50IHJlc3BvbnNlIG9iamVjdCBmcm9tIFJlZnJlc2hUb2tlblJlc3BvbnNlIGJlY2F1c2UgdGhlIHJldHJpZXZlIHJlc3BvbnNlIHdpbGwgcmV0dXJuIGFuIG9iamVjdCBmb3IgcmVmcmVzaFRva2VuLCBhbmQgdGhpcyBpcyBhXG4gKiBzdHJpbmcuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFJlZnJlc2hSZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFJlZnJlc2ggVG9rZW4gUmV2b2tlIEV2ZW50LiBUaGlzIGV2ZW50IG1pZ2h0IGJlIGZvciBhIHNpbmdsZSB0b2tlbiwgYSB1c2VyXG4gKiBvciBhbiBlbnRpcmUgYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSldUUmVmcmVzaFRva2VuUmV2b2tlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXBwbGljYXRpb25UaW1lVG9MaXZlSW5TZWNvbmRzPzogUmVjb3JkPFVVSUQsIG51bWJlcj47XG4gIHJlZnJlc2hUb2tlbj86IFJlZnJlc2hUb2tlbjtcbiAgdXNlcj86IFVzZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpXVFZlbmRSZXF1ZXN0IHtcbiAgY2xhaW1zPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAga2V5SWQ/OiBVVUlEO1xuICB0aW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKV1RWZW5kUmVzcG9uc2Uge1xuICB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGRlZmF1bHRUb3BpYz86IHN0cmluZztcbiAgcHJvZHVjZXI/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2Fma2FNZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBkZWZhdWx0VG9waWM/OiBzdHJpbmc7XG4gIHByb2R1Y2VyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBEb21haW4gZm9yIGEgcHVibGljIGtleSwga2V5IHBhaXIgb3IgYW4gSE1BQyBzZWNyZXQuIFRoaXMgaXMgdXNlZCBieSBLZXlNYXN0ZXIgdG8gbWFuYWdlIGtleXMgZm9yIEpXVHMsIFNBTUwsIGV0Yy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXkge1xuICBhbGdvcml0aG0/OiBLZXlBbGdvcml0aG07XG4gIGNlcnRpZmljYXRlPzogc3RyaW5nO1xuICBjZXJ0aWZpY2F0ZUluZm9ybWF0aW9uPzogQ2VydGlmaWNhdGVJbmZvcm1hdGlvbjtcbiAgZXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIGhhc1ByaXZhdGVLZXk/OiBib29sZWFuO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGlzc3Vlcj86IHN0cmluZztcbiAga2lkPzogc3RyaW5nO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwcml2YXRlS2V5Pzogc3RyaW5nO1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHNlY3JldD86IHN0cmluZztcbiAgdHlwZT86IEtleVR5cGU7XG59XG5cbmV4cG9ydCBlbnVtIEtleUFsZ29yaXRobSB7XG4gIEVTMjU2ID0gXCJFUzI1NlwiLFxuICBFUzM4NCA9IFwiRVMzODRcIixcbiAgRVM1MTIgPSBcIkVTNTEyXCIsXG4gIEhTMjU2ID0gXCJIUzI1NlwiLFxuICBIUzM4NCA9IFwiSFMzODRcIixcbiAgSFM1MTIgPSBcIkhTNTEyXCIsXG4gIFJTMjU2ID0gXCJSUzI1NlwiLFxuICBSUzM4NCA9IFwiUlMzODRcIixcbiAgUlM1MTIgPSBcIlJTNTEyXCJcbn1cblxuLyoqXG4gKiBLZXkgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlSZXF1ZXN0IHtcbiAga2V5PzogS2V5O1xufVxuXG4vKipcbiAqIEtleSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLZXlSZXNwb25zZSB7XG4gIGtleT86IEtleTtcbiAga2V5cz86IEFycmF5PEtleT47XG59XG5cbmV4cG9ydCBlbnVtIEtleVR5cGUge1xuICBFQyA9IFwiRUNcIixcbiAgUlNBID0gXCJSU0FcIixcbiAgSE1BQyA9IFwiSE1BQ1wiXG59XG5cbi8qKlxuICogVGhlIHVzZSB0eXBlIG9mIGEga2V5LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gS2V5VXNlIHtcbiAgU2lnbk9ubHkgPSBcIlNpZ25Pbmx5XCIsXG4gIFNpZ25BbmRWZXJpZnkgPSBcIlNpZ25BbmRWZXJpZnlcIixcbiAgVmVyaWZ5T25seSA9IFwiVmVyaWZ5T25seVwiXG59XG5cbi8qKlxuICogRXZlbnQgZXZlbnQgdG8gaW5kaWNhdGUga2lja3N0YXJ0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEtpY2tzdGFydFN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGluc3RhbmNlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEEgSmF2YVNjcmlwdCBsYW1iZGEgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBkdXJpbmcgY2VydGFpbiBldmVudHMgaW5zaWRlIEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhIHtcbiAgYm9keT86IHN0cmluZztcbiAgZGVidWc/OiBib29sZWFuO1xuICBlbmdpbmVUeXBlPzogTGFtYmRhRW5naW5lVHlwZTtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IExhbWJkYVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIGFjY2Vzc1Rva2VuUG9wdWxhdGVJZD86IFVVSUQ7XG4gIGlkVG9rZW5Qb3B1bGF0ZUlkPzogVVVJRDtcbiAgc2FtbHYyUG9wdWxhdGVJZD86IFVVSUQ7XG4gIHNlbGZTZXJ2aWNlUmVnaXN0cmF0aW9uVmFsaWRhdGlvbklkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMYW1iZGFDb25maWd1cmF0aW9uIHtcbiAgcmVjb25jaWxlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYUNvbmZpZ3VyYXRpb24ge1xuICByZWNvbmNpbGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBMYW1iZGFFbmdpbmVUeXBlIHtcbiAgR3JhYWxKUyA9IFwiR3JhYWxKU1wiLFxuICBOYXNob3JuID0gXCJOYXNob3JuXCJcbn1cblxuLyoqXG4gKiBMYW1iZGEgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExhbWJkYVJlcXVlc3Qge1xuICBsYW1iZGE/OiBMYW1iZGE7XG59XG5cbi8qKlxuICogTGFtYmRhIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGFtYmRhUmVzcG9uc2Uge1xuICBsYW1iZGE/OiBMYW1iZGE7XG4gIGxhbWJkYXM/OiBBcnJheTxMYW1iZGE+O1xufVxuXG4vKipcbiAqIFRoZSB0eXBlcyBvZiBsYW1iZGFzIHRoYXQgaW5kaWNhdGUgaG93IHRoZXkgYXJlIGludm9rZWQgYnkgRnVzaW9uQXV0aC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGVudW0gTGFtYmRhVHlwZSB7XG4gIEpXVFBvcHVsYXRlID0gXCJKV1RQb3B1bGF0ZVwiLFxuICBPcGVuSURSZWNvbmNpbGUgPSBcIk9wZW5JRFJlY29uY2lsZVwiLFxuICBTQU1MdjJSZWNvbmNpbGUgPSBcIlNBTUx2MlJlY29uY2lsZVwiLFxuICBTQU1MdjJQb3B1bGF0ZSA9IFwiU0FNTHYyUG9wdWxhdGVcIixcbiAgQXBwbGVSZWNvbmNpbGUgPSBcIkFwcGxlUmVjb25jaWxlXCIsXG4gIEV4dGVybmFsSldUUmVjb25jaWxlID0gXCJFeHRlcm5hbEpXVFJlY29uY2lsZVwiLFxuICBGYWNlYm9va1JlY29uY2lsZSA9IFwiRmFjZWJvb2tSZWNvbmNpbGVcIixcbiAgR29vZ2xlUmVjb25jaWxlID0gXCJHb29nbGVSZWNvbmNpbGVcIixcbiAgSFlQUlJlY29uY2lsZSA9IFwiSFlQUlJlY29uY2lsZVwiLFxuICBUd2l0dGVyUmVjb25jaWxlID0gXCJUd2l0dGVyUmVjb25jaWxlXCIsXG4gIExEQVBDb25uZWN0b3JSZWNvbmNpbGUgPSBcIkxEQVBDb25uZWN0b3JSZWNvbmNpbGVcIixcbiAgTGlua2VkSW5SZWNvbmNpbGUgPSBcIkxpbmtlZEluUmVjb25jaWxlXCIsXG4gIEVwaWNHYW1lc1JlY29uY2lsZSA9IFwiRXBpY0dhbWVzUmVjb25jaWxlXCIsXG4gIE5pbnRlbmRvUmVjb25jaWxlID0gXCJOaW50ZW5kb1JlY29uY2lsZVwiLFxuICBTb255UFNOUmVjb25jaWxlID0gXCJTb255UFNOUmVjb25jaWxlXCIsXG4gIFN0ZWFtUmVjb25jaWxlID0gXCJTdGVhbVJlY29uY2lsZVwiLFxuICBUd2l0Y2hSZWNvbmNpbGUgPSBcIlR3aXRjaFJlY29uY2lsZVwiLFxuICBYYm94UmVjb25jaWxlID0gXCJYYm94UmVjb25jaWxlXCIsXG4gIENsaWVudENyZWRlbnRpYWxzSldUUG9wdWxhdGUgPSBcIkNsaWVudENyZWRlbnRpYWxzSldUUG9wdWxhdGVcIixcbiAgU0NJTVNlcnZlckdyb3VwUmVxdWVzdENvbnZlcnRlciA9IFwiU0NJTVNlcnZlckdyb3VwUmVxdWVzdENvbnZlcnRlclwiLFxuICBTQ0lNU2VydmVyR3JvdXBSZXNwb25zZUNvbnZlcnRlciA9IFwiU0NJTVNlcnZlckdyb3VwUmVzcG9uc2VDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlclVzZXJSZXF1ZXN0Q29udmVydGVyID0gXCJTQ0lNU2VydmVyVXNlclJlcXVlc3RDb252ZXJ0ZXJcIixcbiAgU0NJTVNlcnZlclVzZXJSZXNwb25zZUNvbnZlcnRlciA9IFwiU0NJTVNlcnZlclVzZXJSZXNwb25zZUNvbnZlcnRlclwiLFxuICBTZWxmU2VydmljZVJlZ2lzdHJhdGlvblZhbGlkYXRpb24gPSBcIlNlbGZTZXJ2aWNlUmVnaXN0cmF0aW9uVmFsaWRhdGlvblwiXG59XG5cbi8qKlxuICogTW9kZWxzIGFuIExEQVAgY29ubmVjdG9yLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTERBUENvbm5lY3RvckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlQ29ubmVjdG9yQ29uZmlndXJhdGlvbiB7XG4gIGF1dGhlbnRpY2F0aW9uVVJMPzogc3RyaW5nO1xuICBiYXNlU3RydWN0dXJlPzogc3RyaW5nO1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgaWRlbnRpZnlpbmdBdHRyaWJ1dGU/OiBzdHJpbmc7XG4gIGxhbWJkYUNvbmZpZ3VyYXRpb24/OiBMYW1iZGFDb25maWd1cmF0aW9uO1xuICBsb2dpbklkQXR0cmlidXRlPzogc3RyaW5nO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgcmVxdWVzdGVkQXR0cmlidXRlcz86IEFycmF5PHN0cmluZz47XG4gIHNlY3VyaXR5TWV0aG9kPzogTERBUFNlY3VyaXR5TWV0aG9kO1xuICBzeXN0ZW1BY2NvdW50RE4/OiBzdHJpbmc7XG4gIHN5c3RlbUFjY291bnRQYXNzd29yZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gTERBUFNlY3VyaXR5TWV0aG9kIHtcbiAgTm9uZSA9IFwiTm9uZVwiLFxuICBMREFQUyA9IFwiTERBUFNcIixcbiAgU3RhcnRUTFMgPSBcIlN0YXJ0VExTXCJcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlua2VkSW5BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbmtlZEluSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPExpbmtlZEluQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgc2V0IG9mIGxvY2FsaXplZCBJbnRlZ2VycyB0aGF0IGNhbiBiZSBzdG9yZWQgYXMgSlNPTi5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxpemVkSW50ZWdlcnMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBzZXQgb2YgbG9jYWxpemVkIFN0cmluZ3MgdGhhdCBjYW4gYmUgc3RvcmVkIGFzIEpTT04uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxpemVkU3RyaW5ncyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xufVxuXG4vKipcbiAqIExvY2F0aW9uIGluZm9ybWF0aW9uLiBVc2VmdWwgZm9yIElQIGFkZHJlc3NlcyBhbmQgb3RoZXIgZGlzcGxheWFibGUgZGF0YSBvYmplY3RzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2F0aW9uIHtcbiAgY2l0eT86IHN0cmluZztcbiAgY291bnRyeT86IHN0cmluZztcbiAgZGlzcGxheVN0cmluZz86IHN0cmluZztcbiAgbGF0aXR1ZGU/OiBudW1iZXI7XG4gIGxvbmdpdHVkZT86IG51bWJlcjtcbiAgcmVnaW9uPzogc3RyaW5nO1xuICB6aXBjb2RlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgaGlzdG9yaWNhbCBzdGF0ZSBvZiBhIHVzZXIgbG9nIGV2ZW50LiBTaW5jZSBldmVudHMgY2FuIGJlIG1vZGlmaWVkLCB0aGlzIHN0b3JlcyB0aGUgaGlzdG9yaWNhbCBzdGF0ZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dIaXN0b3J5IHtcbiAgaGlzdG9yeUl0ZW1zPzogQXJyYXk8SGlzdG9yeUl0ZW0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luQ29uZmlndXJhdGlvbiB7XG4gIGFsbG93VG9rZW5SZWZyZXNoPzogYm9vbGVhbjtcbiAgZ2VuZXJhdGVSZWZyZXNoVG9rZW5zPzogYm9vbGVhbjtcbiAgcmVxdWlyZUF1dGhlbnRpY2F0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5IaW50Q29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBMb2dpbklkVHlwZSB7XG4gIGVtYWlsID0gXCJlbWFpbFwiLFxuICB1c2VybmFtZSA9IFwidXNlcm5hbWVcIlxufVxuXG4vKipcbiAqIExvZ2luIFBpbmcgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblBpbmdSZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogVGhlIHN1bW1hcnkgb2YgdGhlIGFjdGlvbiB0aGF0IGlzIHByZXZlbnRpbmcgbG9naW4gdG8gYmUgcmV0dXJuZWQgb24gdGhlIGxvZ2luIHJlc3BvbnNlLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblByZXZlbnRlZFJlc3BvbnNlIHtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25JZD86IFVVSUQ7XG4gIGV4cGlyeT86IG51bWJlcjtcbiAgbG9jYWxpemVkTmFtZT86IHN0cmluZztcbiAgbG9jYWxpemVkT3B0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRSZWFzb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICByZWFzb25Db2RlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkQ29uZmlndXJhdGlvbiB7XG4gIGRlbGV0ZT86IERlbGV0ZUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkRXhwb3J0UmVxdWVzdCBleHRlbmRzIEJhc2VFeHBvcnRSZXF1ZXN0IHtcbiAgY3JpdGVyaWE/OiBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhIGV4dGVuZHMgQmFzZVNlYXJjaENyaXRlcmlhIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGVuZD86IG51bWJlcjtcbiAgc3RhcnQ/OiBudW1iZXI7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVjb3JkU2VhcmNoUmVxdWVzdCB7XG4gIHJldHJpZXZlVG90YWw/OiBib29sZWFuO1xuICBzZWFyY2g/OiBMb2dpblJlY29yZFNlYXJjaENyaXRlcmlhO1xufVxuXG4vKipcbiAqIEEgcmF3IGxvZ2luIHJlY29yZCByZXNwb25zZVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dpblJlY29yZFNlYXJjaFJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgbG9naW4gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVwb3J0UmVzcG9uc2Uge1xuICBob3VybHlDb3VudHM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIExvZ2luIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIG9uZVRpbWVQYXNzd29yZD86IHN0cmluZztcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5SZXNwb25zZSB7XG4gIGFjdGlvbnM/OiBBcnJheTxMb2dpblByZXZlbnRlZFJlc3BvbnNlPjtcbiAgY2hhbmdlUGFzc3dvcmRJZD86IHN0cmluZztcbiAgY2hhbmdlUGFzc3dvcmRSZWFzb24/OiBDaGFuZ2VQYXNzd29yZFJlYXNvbjtcbiAgY29uZmlndXJhYmxlTWV0aG9kcz86IEFycmF5PHN0cmluZz47XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICBwZW5kaW5nSWRQTGlua0lkPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIHJlZnJlc2hUb2tlbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgdGhyZWF0c0RldGVjdGVkPzogQXJyYXk8QXV0aGVudGljYXRpb25UaHJlYXRzPjtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHRva2VuRXhwaXJhdGlvbkluc3RhbnQ/OiBudW1iZXI7XG4gIHRydXN0VG9rZW4/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xuICB0d29GYWN0b3JUcnVzdElkPzogc3RyaW5nO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1hdHRoZXcgQWx0bWFuXG4gKi9cbmV4cG9ydCBlbnVtIExvZ291dEJlaGF2aW9yIHtcbiAgUmVkaXJlY3RPbmx5ID0gXCJSZWRpcmVjdE9ubHlcIixcbiAgQWxsQXBwbGljYXRpb25zID0gXCJBbGxBcHBsaWNhdGlvbnNcIlxufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBMb2dvdXQgQVBJIHRoYXQgY2FuIGJlIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gVVJMIHBhcmFtZXRlcnMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nb3V0UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBnbG9iYWw/OiBib29sZWFuO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvb2t1cFJlc3BvbnNlIHtcbiAgaWRlbnRpdHlQcm92aWRlcj86IElkZW50aXR5UHJvdmlkZXJEZXRhaWxzO1xufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgY29udGFpbnMgdGhlIG1hbmFnZWQgZmllbGRzIHRoYXQgYXJlIGFsc28gcHV0IGludG8gdGhlIGRhdGFiYXNlIGR1cmluZyBGdXNpb25BdXRoIHNldHVwLlxuICogPHA+XG4gKiBJbnRlcm5hbCBOb3RlOiBUaGVzZSBmaWVsZHMgYXJlIGFsc28gZGVjbGFyZWQgaW4gU1FMIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgc3lzdGVtLiBUaGVzZSBuZWVkIHRvIHN0YXkgaW4gc3luYy5cbiAqIEFueSBjaGFuZ2VzIHRvIHRoZXNlIGZpZWxkcyBuZWVkcyB0byBhbHNvIGJlIHJlZmxlY3RlZCBpbiBteXNxbC5zcWwgYW5kIHBvc3RncmVzcWwuc3FsXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZEZpZWxkcyB7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1heGltdW1QYXNzd29yZEFnZSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBkYXlzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEdyb3VwIE1lbWJlciBEZWxldGUgUmVxdWVzdFxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1iZXJEZWxldGVSZXF1ZXN0IHtcbiAgbWVtYmVySWRzPzogQXJyYXk8VVVJRD47XG4gIG1lbWJlcnM/OiBSZWNvcmQ8VVVJRCwgQXJyYXk8VVVJRD4+O1xufVxuXG4vKipcbiAqIEdyb3VwIE1lbWJlciBSZXF1ZXN0XG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbWJlclJlcXVlc3Qge1xuICBtZW1iZXJzPzogUmVjb3JkPFVVSUQsIEFycmF5PEdyb3VwTWVtYmVyPj47XG59XG5cbi8qKlxuICogR3JvdXAgTWVtYmVyIFJlc3BvbnNlXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbWJlclJlc3BvbnNlIHtcbiAgbWVtYmVycz86IFJlY29yZDxVVUlELCBBcnJheTxHcm91cE1lbWJlcj4+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWlrZXkgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZSB7XG59XG5cbi8qKlxuICogU3RvcmVzIGFuIG1lc3NhZ2UgdGVtcGxhdGUgdXNlZCB0byBkaXN0cmlidXRlIG1lc3NhZ2VzO1xuICpcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlVGVtcGxhdGUge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgdHlwZT86IE1lc3NhZ2VUeXBlO1xufVxuXG4vKipcbiAqIEEgTWVzc2FnZSBUZW1wbGF0ZSBSZXF1ZXN0IHRvIHRoZSBBUElcbiAqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVRlbXBsYXRlUmVxdWVzdCB7XG4gIG1lc3NhZ2VUZW1wbGF0ZT86IE1lc3NhZ2VUZW1wbGF0ZTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIE1pY2hhZWwgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZVRlbXBsYXRlUmVzcG9uc2Uge1xuICBtZXNzYWdlVGVtcGxhdGU/OiBNZXNzYWdlVGVtcGxhdGU7XG4gIG1lc3NhZ2VUZW1wbGF0ZXM/OiBBcnJheTxNZXNzYWdlVGVtcGxhdGU+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWlrZXkgU2xlZXZpXG4gKi9cbmV4cG9ydCBlbnVtIE1lc3NhZ2VUeXBlIHtcbiAgU01TID0gXCJTTVNcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2VuZ2VyUmVxdWVzdCB7XG4gIG1lc3Nlbmdlcj86IEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2VuZ2VyUmVzcG9uc2Uge1xuICBtZXNzZW5nZXI/OiBCYXNlTWVzc2VuZ2VyQ29uZmlndXJhdGlvbjtcbiAgbWVzc2VuZ2Vycz86IEFycmF5PEJhc2VNZXNzZW5nZXJDb25maWd1cmF0aW9uPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2VuZ2VyVHJhbnNwb3J0IHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IEd1eVxuICovXG5leHBvcnQgZW51bSBNZXNzZW5nZXJUeXBlIHtcbiAgR2VuZXJpYyA9IFwiR2VuZXJpY1wiLFxuICBLYWZrYSA9IFwiS2Fma2FcIixcbiAgVHdpbGlvID0gXCJUd2lsaW9cIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFEYXRhIHtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRldmljZT86IERldmljZUluZm87XG4gIHNjb3Blcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbmltdW1QYXNzd29yZEFnZSBleHRlbmRzIEVuYWJsZWFibGUge1xuICBzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlc3BvbnNlIGZvciB0aGUgZGFpbHkgYWN0aXZlIHVzZXIgcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRobHlBY3RpdmVVc2VyUmVwb3J0UmVzcG9uc2Uge1xuICBtb250aGx5QWN0aXZlVXNlcnM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yQXV0aGVudGljYXRvck1ldGhvZCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBhbGdvcml0aG0/OiBUT1RQQWxnb3JpdGhtO1xuICBjb2RlTGVuZ3RoPzogbnVtYmVyO1xuICB0aW1lU3RlcD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvckVtYWlsTWV0aG9kIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpRmFjdG9yRW1haWxUZW1wbGF0ZSB7XG4gIHRlbXBsYXRlSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gTXVsdGlGYWN0b3JMb2dpblBvbGljeSB7XG4gIERpc2FibGVkID0gXCJEaXNhYmxlZFwiLFxuICBFbmFibGVkID0gXCJFbmFibGVkXCIsXG4gIFJlcXVpcmVkID0gXCJSZXF1aXJlZFwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlGYWN0b3JTTVNNZXRob2QgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWVzc2VuZ2VySWQ/OiBVVUlEO1xuICB0ZW1wbGF0ZUlkPzogVVVJRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aUZhY3RvclNNU1RlbXBsYXRlIHtcbiAgdGVtcGxhdGVJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmludGVuZG9BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTmludGVuZG8gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pbnRlbmRvSWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPE5pbnRlbmRvQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgY2xpZW50X3NlY3JldD86IHN0cmluZztcbiAgZW1haWxDbGFpbT86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHVuaXF1ZUlkQ2xhaW0/OiBzdHJpbmc7XG4gIHVzZXJuYW1lQ2xhaW0/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBtYXJrZXIgaW50ZXJmYWNlIGluZGljYXRpbmcgdGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb25UcmFuc2FjdGlvbmFsRXZlbnQge1xufVxuXG4vKipcbiAqIEBhdXRob3IgSm9obmF0aG9uIFdvb2RcbiAqL1xuZXhwb3J0IGVudW0gT2F1dGgyQXV0aG9yaXplZFVSTFZhbGlkYXRpb25Qb2xpY3kge1xuICBBbGxvd1dpbGRjYXJkcyA9IFwiQWxsb3dXaWxkY2FyZHNcIixcbiAgRXhhY3RNYXRjaCA9IFwiRXhhY3RNYXRjaFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemVkT3JpZ2luVVJMcz86IEFycmF5PHN0cmluZz47XG4gIGF1dGhvcml6ZWRSZWRpcmVjdFVSTHM/OiBBcnJheTxzdHJpbmc+O1xuICBhdXRob3JpemVkVVJMVmFsaWRhdGlvblBvbGljeT86IE9hdXRoMkF1dGhvcml6ZWRVUkxWYWxpZGF0aW9uUG9saWN5O1xuICBjbGllbnRBdXRoZW50aWNhdGlvblBvbGljeT86IENsaWVudEF1dGhlbnRpY2F0aW9uUG9saWN5O1xuICBjbGllbnRJZD86IHN0cmluZztcbiAgY2xpZW50U2VjcmV0Pzogc3RyaW5nO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIGRldmljZVZlcmlmaWNhdGlvblVSTD86IHN0cmluZztcbiAgZW5hYmxlZEdyYW50cz86IEFycmF5PEdyYW50VHlwZT47XG4gIGdlbmVyYXRlUmVmcmVzaFRva2Vucz86IGJvb2xlYW47XG4gIGxvZ291dEJlaGF2aW9yPzogTG9nb3V0QmVoYXZpb3I7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcHJvb2ZLZXlGb3JDb2RlRXhjaGFuZ2VQb2xpY3k/OiBQcm9vZktleUZvckNvZGVFeGNoYW5nZVBvbGljeTtcbiAgcmVxdWlyZUNsaWVudEF1dGhlbnRpY2F0aW9uPzogYm9vbGVhbjtcbiAgcmVxdWlyZVJlZ2lzdHJhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoQ29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgaHR0cFNlc3Npb25NYXhJbmFjdGl2ZUludGVydmFsPzogbnVtYmVyO1xuICBsb2dvdXRVUkw/OiBzdHJpbmc7XG4gIG9hdXRoQ29uZmlndXJhdGlvbj86IE9BdXRoMkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9BdXRoRXJyb3Ige1xuICBjaGFuZ2VfcGFzc3dvcmRfaWQ/OiBzdHJpbmc7XG4gIGVycm9yPzogT0F1dGhFcnJvclR5cGU7XG4gIGVycm9yX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBlcnJvcl9yZWFzb24/OiBPQXV0aEVycm9yUmVhc29uO1xuICBlcnJvcl91cmk/OiBzdHJpbmc7XG4gIHR3b19mYWN0b3JfaWQ/OiBzdHJpbmc7XG4gIHR3b19mYWN0b3JfbWV0aG9kcz86IEFycmF5PFR3b0ZhY3Rvck1ldGhvZD47XG59XG5cbmV4cG9ydCBlbnVtIE9BdXRoRXJyb3JSZWFzb24ge1xuICBhdXRoX2NvZGVfbm90X2ZvdW5kID0gXCJhdXRoX2NvZGVfbm90X2ZvdW5kXCIsXG4gIGFjY2Vzc190b2tlbl9tYWxmb3JtZWQgPSBcImFjY2Vzc190b2tlbl9tYWxmb3JtZWRcIixcbiAgYWNjZXNzX3Rva2VuX2V4cGlyZWQgPSBcImFjY2Vzc190b2tlbl9leHBpcmVkXCIsXG4gIGFjY2Vzc190b2tlbl91bmF2YWlsYWJsZV9mb3JfcHJvY2Vzc2luZyA9IFwiYWNjZXNzX3Rva2VuX3VuYXZhaWxhYmxlX2Zvcl9wcm9jZXNzaW5nXCIsXG4gIGFjY2Vzc190b2tlbl9mYWlsZWRfcHJvY2Vzc2luZyA9IFwiYWNjZXNzX3Rva2VuX2ZhaWxlZF9wcm9jZXNzaW5nXCIsXG4gIHJlZnJlc2hfdG9rZW5fbm90X2ZvdW5kID0gXCJyZWZyZXNoX3Rva2VuX25vdF9mb3VuZFwiLFxuICByZWZyZXNoX3Rva2VuX3R5cGVfbm90X3N1cHBvcnRlZCA9IFwicmVmcmVzaF90b2tlbl90eXBlX25vdF9zdXBwb3J0ZWRcIixcbiAgaW52YWxpZF9jbGllbnRfaWQgPSBcImludmFsaWRfY2xpZW50X2lkXCIsXG4gIGludmFsaWRfdXNlcl9jcmVkZW50aWFscyA9IFwiaW52YWxpZF91c2VyX2NyZWRlbnRpYWxzXCIsXG4gIGludmFsaWRfZ3JhbnRfdHlwZSA9IFwiaW52YWxpZF9ncmFudF90eXBlXCIsXG4gIGludmFsaWRfb3JpZ2luID0gXCJpbnZhbGlkX29yaWdpblwiLFxuICBpbnZhbGlkX29yaWdpbl9vcGFxdWUgPSBcImludmFsaWRfb3JpZ2luX29wYXF1ZVwiLFxuICBpbnZhbGlkX3BrY2VfY29kZV92ZXJpZmllciA9IFwiaW52YWxpZF9wa2NlX2NvZGVfdmVyaWZpZXJcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlID0gXCJpbnZhbGlkX3BrY2VfY29kZV9jaGFsbGVuZ2VcIixcbiAgaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlX21ldGhvZCA9IFwiaW52YWxpZF9wa2NlX2NvZGVfY2hhbGxlbmdlX21ldGhvZFwiLFxuICBpbnZhbGlkX3JlZGlyZWN0X3VyaSA9IFwiaW52YWxpZF9yZWRpcmVjdF91cmlcIixcbiAgaW52YWxpZF9yZXNwb25zZV9tb2RlID0gXCJpbnZhbGlkX3Jlc3BvbnNlX21vZGVcIixcbiAgaW52YWxpZF9yZXNwb25zZV90eXBlID0gXCJpbnZhbGlkX3Jlc3BvbnNlX3R5cGVcIixcbiAgaW52YWxpZF9pZF90b2tlbl9oaW50ID0gXCJpbnZhbGlkX2lkX3Rva2VuX2hpbnRcIixcbiAgaW52YWxpZF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBcImludmFsaWRfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpXCIsXG4gIGludmFsaWRfZGV2aWNlX2NvZGUgPSBcImludmFsaWRfZGV2aWNlX2NvZGVcIixcbiAgaW52YWxpZF91c2VyX2NvZGUgPSBcImludmFsaWRfdXNlcl9jb2RlXCIsXG4gIGludmFsaWRfYWRkaXRpb25hbF9jbGllbnRfaWQgPSBcImludmFsaWRfYWRkaXRpb25hbF9jbGllbnRfaWRcIixcbiAgaW52YWxpZF90YXJnZXRfZW50aXR5X3Njb3BlID0gXCJpbnZhbGlkX3RhcmdldF9lbnRpdHlfc2NvcGVcIixcbiAgaW52YWxpZF9lbnRpdHlfcGVybWlzc2lvbl9zY29wZSA9IFwiaW52YWxpZF9lbnRpdHlfcGVybWlzc2lvbl9zY29wZVwiLFxuICBncmFudF90eXBlX2Rpc2FibGVkID0gXCJncmFudF90eXBlX2Rpc2FibGVkXCIsXG4gIG1pc3NpbmdfY2xpZW50X2lkID0gXCJtaXNzaW5nX2NsaWVudF9pZFwiLFxuICBtaXNzaW5nX2NsaWVudF9zZWNyZXQgPSBcIm1pc3NpbmdfY2xpZW50X3NlY3JldFwiLFxuICBtaXNzaW5nX2NvZGUgPSBcIm1pc3NpbmdfY29kZVwiLFxuICBtaXNzaW5nX2NvZGVfY2hhbGxlbmdlID0gXCJtaXNzaW5nX2NvZGVfY2hhbGxlbmdlXCIsXG4gIG1pc3NpbmdfY29kZV92ZXJpZmllciA9IFwibWlzc2luZ19jb2RlX3ZlcmlmaWVyXCIsXG4gIG1pc3NpbmdfZGV2aWNlX2NvZGUgPSBcIm1pc3NpbmdfZGV2aWNlX2NvZGVcIixcbiAgbWlzc2luZ19ncmFudF90eXBlID0gXCJtaXNzaW5nX2dyYW50X3R5cGVcIixcbiAgbWlzc2luZ19yZWRpcmVjdF91cmkgPSBcIm1pc3NpbmdfcmVkaXJlY3RfdXJpXCIsXG4gIG1pc3NpbmdfcmVmcmVzaF90b2tlbiA9IFwibWlzc2luZ19yZWZyZXNoX3Rva2VuXCIsXG4gIG1pc3NpbmdfcmVzcG9uc2VfdHlwZSA9IFwibWlzc2luZ19yZXNwb25zZV90eXBlXCIsXG4gIG1pc3NpbmdfdG9rZW4gPSBcIm1pc3NpbmdfdG9rZW5cIixcbiAgbWlzc2luZ191c2VyX2NvZGUgPSBcIm1pc3NpbmdfdXNlcl9jb2RlXCIsXG4gIG1pc3NpbmdfdmVyaWZpY2F0aW9uX3VyaSA9IFwibWlzc2luZ192ZXJpZmljYXRpb25fdXJpXCIsXG4gIGxvZ2luX3ByZXZlbnRlZCA9IFwibG9naW5fcHJldmVudGVkXCIsXG4gIG5vdF9saWNlbnNlZCA9IFwibm90X2xpY2Vuc2VkXCIsXG4gIHVzZXJfY29kZV9leHBpcmVkID0gXCJ1c2VyX2NvZGVfZXhwaXJlZFwiLFxuICB1c2VyX2V4cGlyZWQgPSBcInVzZXJfZXhwaXJlZFwiLFxuICB1c2VyX2xvY2tlZCA9IFwidXNlcl9sb2NrZWRcIixcbiAgdXNlcl9ub3RfZm91bmQgPSBcInVzZXJfbm90X2ZvdW5kXCIsXG4gIGNsaWVudF9hdXRoZW50aWNhdGlvbl9taXNzaW5nID0gXCJjbGllbnRfYXV0aGVudGljYXRpb25fbWlzc2luZ1wiLFxuICBpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbl9zY2hlbWUgPSBcImludmFsaWRfY2xpZW50X2F1dGhlbnRpY2F0aW9uX3NjaGVtZVwiLFxuICBpbnZhbGlkX2NsaWVudF9hdXRoZW50aWNhdGlvbiA9IFwiaW52YWxpZF9jbGllbnRfYXV0aGVudGljYXRpb25cIixcbiAgY2xpZW50X2lkX21pc21hdGNoID0gXCJjbGllbnRfaWRfbWlzbWF0Y2hcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX2FkbWluaXN0cmF0aXZlID0gXCJjaGFuZ2VfcGFzc3dvcmRfYWRtaW5pc3RyYXRpdmVcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX2JyZWFjaGVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfYnJlYWNoZWRcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX2V4cGlyZWQgPSBcImNoYW5nZV9wYXNzd29yZF9leHBpcmVkXCIsXG4gIGNoYW5nZV9wYXNzd29yZF92YWxpZGF0aW9uID0gXCJjaGFuZ2VfcGFzc3dvcmRfdmFsaWRhdGlvblwiLFxuICB1bmtub3duID0gXCJ1bmtub3duXCJcbn1cblxuZXhwb3J0IGVudW0gT0F1dGhFcnJvclR5cGUge1xuICBpbnZhbGlkX3JlcXVlc3QgPSBcImludmFsaWRfcmVxdWVzdFwiLFxuICBpbnZhbGlkX2NsaWVudCA9IFwiaW52YWxpZF9jbGllbnRcIixcbiAgaW52YWxpZF9ncmFudCA9IFwiaW52YWxpZF9ncmFudFwiLFxuICBpbnZhbGlkX3Rva2VuID0gXCJpbnZhbGlkX3Rva2VuXCIsXG4gIHVuYXV0aG9yaXplZF9jbGllbnQgPSBcInVuYXV0aG9yaXplZF9jbGllbnRcIixcbiAgaW52YWxpZF9zY29wZSA9IFwiaW52YWxpZF9zY29wZVwiLFxuICBzZXJ2ZXJfZXJyb3IgPSBcInNlcnZlcl9lcnJvclwiLFxuICB1bnN1cHBvcnRlZF9ncmFudF90eXBlID0gXCJ1bnN1cHBvcnRlZF9ncmFudF90eXBlXCIsXG4gIHVuc3VwcG9ydGVkX3Jlc3BvbnNlX3R5cGUgPSBcInVuc3VwcG9ydGVkX3Jlc3BvbnNlX3R5cGVcIixcbiAgY2hhbmdlX3Bhc3N3b3JkX3JlcXVpcmVkID0gXCJjaGFuZ2VfcGFzc3dvcmRfcmVxdWlyZWRcIixcbiAgbm90X2xpY2Vuc2VkID0gXCJub3RfbGljZW5zZWRcIixcbiAgdHdvX2ZhY3Rvcl9yZXF1aXJlZCA9IFwidHdvX2ZhY3Rvcl9yZXF1aXJlZFwiLFxuICBhdXRob3JpemF0aW9uX3BlbmRpbmcgPSBcImF1dGhvcml6YXRpb25fcGVuZGluZ1wiLFxuICBleHBpcmVkX3Rva2VuID0gXCJleHBpcmVkX3Rva2VuXCIsXG4gIHVuc3VwcG9ydGVkX3Rva2VuX3R5cGUgPSBcInVuc3VwcG9ydGVkX3Rva2VuX3R5cGVcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPQXV0aFJlc3BvbnNlIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIE9iamVjdFN0YXRlIHtcbiAgQWN0aXZlID0gXCJBY3RpdmVcIixcbiAgSW5hY3RpdmUgPSBcIkluYWN0aXZlXCIsXG4gIFBlbmRpbmdEZWxldGUgPSBcIlBlbmRpbmdEZWxldGVcIlxufVxuXG4vKipcbiAqIE9wZW5JRCBDb25uZWN0IENvbmZpZ3VyYXRpb24gYXMgZGVzY3JpYmVkIGJ5IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWRpc2NvdmVyeS0xXzAuaHRtbCNQcm92aWRlck1ldGFkYXRhXCI+T3BlbklEXG4gKiBQcm92aWRlciBNZXRhZGF0YTwvYT4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbmZpZ3VyYXRpb24ge1xuICBhdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBiYWNrY2hhbm5lbF9sb2dvdXRfc3VwcG9ydGVkPzogYm9vbGVhbjtcbiAgY2xhaW1zX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIGRldmljZV9hdXRob3JpemF0aW9uX2VuZHBvaW50Pzogc3RyaW5nO1xuICBlbmRfc2Vzc2lvbl9lbmRwb2ludD86IHN0cmluZztcbiAgZnJvbnRjaGFubmVsX2xvZ291dF9zdXBwb3J0ZWQ/OiBib29sZWFuO1xuICBncmFudF90eXBlc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICBpZF90b2tlbl9zaWduaW5nX2FsZ192YWx1ZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBqd2tzX3VyaT86IHN0cmluZztcbiAgcmVzcG9uc2VfbW9kZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgcmVzcG9uc2VfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgc2NvcGVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG4gIHN1YmplY3RfdHlwZXNfc3VwcG9ydGVkPzogQXJyYXk8c3RyaW5nPjtcbiAgdG9rZW5fZW5kcG9pbnQ/OiBzdHJpbmc7XG4gIHRva2VuX2VuZHBvaW50X2F1dGhfbWV0aG9kc19zdXBwb3J0ZWQ/OiBBcnJheTxzdHJpbmc+O1xuICB1c2VyaW5mb19lbmRwb2ludD86IHN0cmluZztcbiAgdXNlcmluZm9fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZD86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9wZW5JZENvbm5lY3RBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBvYXV0aDI/OiBJZGVudGl0eVByb3ZpZGVyT2F1dGgyQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlbklkQ29ubmVjdElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxPcGVuSWRDb25uZWN0QXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGJ1dHRvbkltYWdlVVJMPzogc3RyaW5nO1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBkb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbiAgb2F1dGgyPzogSWRlbnRpdHlQcm92aWRlck9hdXRoMkNvbmZpZ3VyYXRpb247XG4gIHBvc3RSZXF1ZXN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRCcmVhY2hEZXRlY3Rpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbWF0Y2hNb2RlPzogQnJlYWNoTWF0Y2hNb2RlO1xuICBub3RpZnlVc2VyRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgb25Mb2dpbj86IEJyZWFjaEFjdGlvbjtcbn1cblxuLyoqXG4gKiBQYXNzd29yZCBFbmNyeXB0aW9uIFNjaGVtZSBDb25maWd1cmF0aW9uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBlbmNyeXB0aW9uU2NoZW1lPzogc3RyaW5nO1xuICBlbmNyeXB0aW9uU2NoZW1lRmFjdG9yPzogbnVtYmVyO1xuICBtb2RpZnlFbmNyeXB0aW9uU2NoZW1lT25Mb2dpbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgYWxsIGlkZW50aXR5IHByb3ZpZGVycyB0aGF0IGFyZSBwYXNzd29yZGxlc3MgYW5kIGRvIG5vdCBhY2NlcHQgYSBwYXNzd29yZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZGxlc3NJZGVudGl0eVByb3ZpZGVyIHtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzTG9naW5SZXF1ZXN0IGV4dGVuZHMgQmFzZUxvZ2luUmVxdWVzdCB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkbGVzc1NlbmRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzU3RhcnRSZXF1ZXN0IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGxvZ2luSWQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFzc3dvcmRsZXNzU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEZXJlayBLbGF0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzIHtcbiAgYnJlYWNoRGV0ZWN0aW9uPzogUGFzc3dvcmRCcmVhY2hEZXRlY3Rpb247XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICByZW1lbWJlclByZXZpb3VzUGFzc3dvcmRzPzogUmVtZW1iZXJQcmV2aW91c1Bhc3N3b3JkcztcbiAgcmVxdWlyZU1peGVkQ2FzZT86IGJvb2xlYW47XG4gIHJlcXVpcmVOb25BbHBoYT86IGJvb2xlYW47XG4gIHJlcXVpcmVOdW1iZXI/OiBib29sZWFuO1xuICB2YWxpZGF0ZU9uTG9naW4/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXNzd29yZFZhbGlkYXRpb25SdWxlc1Jlc3BvbnNlIHtcbiAgcGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM/OiBQYXNzd29yZFZhbGlkYXRpb25SdWxlcztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ0lkUExpbmsge1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJJZD86IFVVSUQ7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rcz86IEFycmF5PElkZW50aXR5UHJvdmlkZXJMaW5rPjtcbiAgaWRlbnRpdHlQcm92aWRlck5hbWU/OiBzdHJpbmc7XG4gIGlkZW50aXR5UHJvdmlkZXJUZW5hbnRDb25maWd1cmF0aW9uPzogSWRlbnRpdHlQcm92aWRlclRlbmFudENvbmZpZ3VyYXRpb247XG4gIGlkZW50aXR5UHJvdmlkZXJUeXBlPzogSWRlbnRpdHlQcm92aWRlclR5cGU7XG4gIGlkZW50aXR5UHJvdmlkZXJVc2VySWQ/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xuICB1c2VybmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUmVzcG9uc2Uge1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVxdWVzdCB7XG4gIGxvY2FsZT86IHN0cmluZztcbiAgbWVzc2FnZVRlbXBsYXRlPzogTWVzc2FnZVRlbXBsYXRlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWljaGFlbCBTbGVldmlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV2aWV3TWVzc2FnZVRlbXBsYXRlUmVzcG9uc2Uge1xuICBlcnJvcnM/OiBFcnJvcnM7XG4gIG1lc3NhZ2U/OiBTTVNNZXNzYWdlO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXZpZXdSZXF1ZXN0IHtcbiAgZW1haWxUZW1wbGF0ZT86IEVtYWlsVGVtcGxhdGU7XG4gIGxvY2FsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJldmlld1Jlc3BvbnNlIHtcbiAgZW1haWw/OiBFbWFpbDtcbiAgZXJyb3JzPzogRXJyb3JzO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgR3V5XG4gKi9cbmV4cG9ydCBlbnVtIFByb29mS2V5Rm9yQ29kZUV4Y2hhbmdlUG9saWN5IHtcbiAgUmVxdWlyZWQgPSBcIlJlcXVpcmVkXCIsXG4gIE5vdFJlcXVpcmVkID0gXCJOb3RSZXF1aXJlZFwiLFxuICBOb3RSZXF1aXJlZFdoZW5Vc2luZ0NsaWVudEF1dGhlbnRpY2F0aW9uID0gXCJOb3RSZXF1aXJlZFdoZW5Vc2luZ0NsaWVudEF1dGhlbnRpY2F0aW9uXCJcbn1cblxuLyoqXG4gKiBBbGxvd3MgdGhlIFJlbHlpbmcgUGFydHkgdG8gc3BlY2lmeSBkZXNpcmVkIGF0dHJpYnV0ZXMgb2YgYSBuZXcgY3JlZGVudGlhbC5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMge1xuICBhdHRlc3RhdGlvbj86IEF0dGVzdGF0aW9uQ29udmV5YW5jZVByZWZlcmVuY2U7XG4gIGF1dGhlbnRpY2F0b3JTZWxlY3Rpb24/OiBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWE7XG4gIGNoYWxsZW5nZT86IHN0cmluZztcbiAgZXhjbHVkZUNyZWRlbnRpYWxzPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+O1xuICBleHRlbnNpb25zPzogV2ViQXV0aG5SZWdpc3RyYXRpb25FeHRlbnNpb25PcHRpb25zO1xuICBwdWJLZXlDcmVkUGFyYW1zPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnM+O1xuICBycD86IFB1YmxpY0tleUNyZWRlbnRpYWxSZWx5aW5nUGFydHlFbnRpdHk7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHVzZXI/OiBQdWJsaWNLZXlDcmVkZW50aWFsVXNlckVudGl0eTtcbn1cblxuLyoqXG4gKiBDb250YWlucyBhdHRyaWJ1dGVzIGZvciB0aGUgUmVseWluZyBQYXJ0eSB0byByZWZlciB0byBhbiBleGlzdGluZyBwdWJsaWMga2V5IGNyZWRlbnRpYWwgYXMgYW4gaW5wdXQgcGFyYW1ldGVyLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3Ige1xuICBpZD86IHN0cmluZztcbiAgdHJhbnNwb3J0cz86IEFycmF5PHN0cmluZz47XG4gIHR5cGU/OiBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZTtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgYSB1c2VyIGFjY291bnQgb3IgV2ViQXV0aG4gUmVseWluZyBQYXJ0eSBhc3NvY2lhdGVkIHdpdGggYSBwdWJsaWMga2V5IGNyZWRlbnRpYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsRW50aXR5IHtcbiAgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdXBwbHkgaW5mb3JtYXRpb24gb24gY3JlZGVudGlhbCB0eXBlIGFuZCBhbGdvcml0aG0gdG8gdGhlIDxpPmF1dGhlbnRpY2F0b3I8L2k+LlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFBhcmFtZXRlcnMge1xuICBhbGc/OiBDb3NlQWxnb3JpdGhtSWRlbnRpZmllcjtcbiAgdHlwZT86IFB1YmxpY0tleUNyZWRlbnRpYWxUeXBlO1xufVxuXG4vKipcbiAqIFN1cHBseSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBSZWx5aW5nIFBhcnR5IHdoZW4gY3JlYXRpbmcgYSBuZXcgY3JlZGVudGlhbFxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5Q3JlZGVudGlhbFJlbHlpbmdQYXJ0eUVudGl0eSBleHRlbmRzIFB1YmxpY0tleUNyZWRlbnRpYWxFbnRpdHkge1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgPGk+YXV0aGVudGljYXRvcjwvaT4gd2l0aCB0aGUgZGF0YSBpdCBuZWVkcyB0byBnZW5lcmF0ZSBhbiBhc3NlcnRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMge1xuICBhbGxvd0NyZWRlbnRpYWxzPzogQXJyYXk8UHVibGljS2V5Q3JlZGVudGlhbERlc2NyaXB0b3I+O1xuICBjaGFsbGVuZ2U/OiBzdHJpbmc7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIHVzZXJWZXJpZmljYXRpb24/OiBVc2VyVmVyaWZpY2F0aW9uUmVxdWlyZW1lbnQ7XG59XG5cbi8qKlxuICogRGVmaW5lcyB2YWxpZCBjcmVkZW50aWFsIHR5cGVzLiBUaGlzIGlzIGFuIGV4dGVuc2lvbiBwb2ludCBpbiB0aGUgV2ViQXV0aG4gc3BlYy4gVGhlIG9ubHkgZGVmaW5lZCB2YWx1ZSBhdCB0aGlzIHRpbWUgaXMgXCJwdWJsaWMta2V5XCJcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgZW51bSBQdWJsaWNLZXlDcmVkZW50aWFsVHlwZSB7XG4gIHB1YmxpY0tleSA9IFwicHVibGljLWtleVwiXG59XG5cbi8qKlxuICogU3VwcGx5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVzZXIgYWNjb3VudCB3aGVuIGNyZWF0aW5nIGEgbmV3IGNyZWRlbnRpYWxcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1YmxpY0tleUNyZWRlbnRpYWxVc2VyRW50aXR5IGV4dGVuZHMgUHVibGljS2V5Q3JlZGVudGlhbEVudGl0eSB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBKV1QgUHVibGljIEtleSBSZXNwb25zZSBPYmplY3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHVibGljS2V5UmVzcG9uc2Uge1xuICBwdWJsaWNLZXk/OiBzdHJpbmc7XG4gIHB1YmxpY0tleXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGxpbWl0PzogbnVtYmVyO1xuICB0aW1lUGVyaW9kSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gUmF0ZUxpbWl0ZWRSZXF1ZXN0VHlwZSB7XG4gIEZhaWxlZExvZ2luID0gXCJGYWlsZWRMb2dpblwiLFxuICBGb3Jnb3RQYXNzd29yZCA9IFwiRm9yZ290UGFzc3dvcmRcIixcbiAgU2VuZEVtYWlsVmVyaWZpY2F0aW9uID0gXCJTZW5kRW1haWxWZXJpZmljYXRpb25cIixcbiAgU2VuZFBhc3N3b3JkbGVzcyA9IFwiU2VuZFBhc3N3b3JkbGVzc1wiLFxuICBTZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uID0gXCJTZW5kUmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uXCIsXG4gIFNlbmRUd29GYWN0b3IgPSBcIlNlbmRUd29GYWN0b3JcIlxufVxuXG4vKipcbiAqIFJhdyBsb2dpbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCB0aW1lIGEgdXNlciBsb2dzIGludG8gYW4gYXBwbGljYXRpb24uXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmF3TG9naW4ge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgaW5zdGFudD86IG51bWJlcjtcbiAgaXBBZGRyZXNzPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBSZWFjdG9yRmVhdHVyZVN0YXR1cyB7XG4gIEFDVElWRSA9IFwiQUNUSVZFXCIsXG4gIERJU0NPTk5FQ1RFRCA9IFwiRElTQ09OTkVDVEVEXCIsXG4gIFBFTkRJTkcgPSBcIlBFTkRJTkdcIixcbiAgRElTQUJMRUQgPSBcIkRJU0FCTEVEXCIsXG4gIFVOS05PV04gPSBcIlVOS05PV05cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljcyB7XG4gIGJyZWFjaGVkUGFzc3dvcmRNZXRyaWNzPzogUmVjb3JkPFVVSUQsIEJyZWFjaGVkUGFzc3dvcmRUZW5hbnRNZXRyaWM+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFjdG9yTWV0cmljc1Jlc3BvbnNlIHtcbiAgbWV0cmljcz86IFJlYWN0b3JNZXRyaWNzO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIG1hbmFnaW5nIEZ1c2lvbkF1dGggUmVhY3RvciBhbmQgbGljZW5zZXMuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RvclJlcXVlc3Qge1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICBsaWNlbnNlSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JSZXNwb25zZSB7XG4gIHN0YXR1cz86IFJlYWN0b3JTdGF0dXM7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0b3JTdGF0dXMge1xuICBhZHZhbmNlZElkZW50aXR5UHJvdmlkZXJzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFkdmFuY2VkTGFtYmRhcz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBhZHZhbmNlZE11bHRpRmFjdG9yQXV0aGVudGljYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYWR2YW5jZWRSZWdpc3RyYXRpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgYXBwbGljYXRpb25NdWx0aUZhY3RvckF1dGhlbnRpY2F0aW9uPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGFwcGxpY2F0aW9uVGhlbWVzPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGJyZWFjaGVkUGFzc3dvcmREZXRlY3Rpb24/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgY29ubmVjdG9ycz86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICBlbnRpdHlNYW5hZ2VtZW50PzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIGV4cGlyYXRpb24/OiBzdHJpbmc7XG4gIGxpY2Vuc2VBdHRyaWJ1dGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgbGljZW5zZWQ/OiBib29sZWFuO1xuICBzY2ltU2VydmVyPzogUmVhY3RvckZlYXR1cmVTdGF0dXM7XG4gIHRocmVhdERldGVjdGlvbj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB3ZWJBdXRobj86IFJlYWN0b3JGZWF0dXJlU3RhdHVzO1xuICB3ZWJBdXRoblBsYXRmb3JtQXV0aGVudGljYXRvcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbiAgd2ViQXV0aG5Sb2FtaW5nQXV0aGVudGljYXRvcnM/OiBSZWFjdG9yRmVhdHVyZVN0YXR1cztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHVzZXIgbG9naW4gcmVwb3J0LlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNlbnRMb2dpblJlc3BvbnNlIHtcbiAgbG9naW5zPzogQXJyYXk8RGlzcGxheWFibGVSYXdMb2dpbj47XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hSZXNwb25zZSB7XG59XG5cbi8qKlxuICogTW9kZWxzIGEgSldUIFJlZnJlc2ggVG9rZW4uXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlbiB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBtZXRhRGF0YT86IE1ldGFEYXRhO1xuICBzdGFydEluc3RhbnQ/OiBudW1iZXI7XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdG9rZW4/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBSZWZyZXNoVG9rZW5FeHBpcmF0aW9uUG9saWN5IHtcbiAgRml4ZWQgPSBcIkZpeGVkXCIsXG4gIFNsaWRpbmdXaW5kb3cgPSBcIlNsaWRpbmdXaW5kb3dcIlxufVxuXG4vKipcbiAqIFJlZnJlc2ggVG9rZW4gSW1wb3J0IHJlcXVlc3QuXG4gKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5JbXBvcnRSZXF1ZXN0IHtcbiAgcmVmcmVzaFRva2Vucz86IEFycmF5PFJlZnJlc2hUb2tlbj47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciByZXRyaWV2aW5nIFJlZnJlc2ggVG9rZW5zXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hUb2tlblJlc3BvbnNlIHtcbiAgcmVmcmVzaFRva2VuPzogUmVmcmVzaFRva2VuO1xuICByZWZyZXNoVG9rZW5zPzogQXJyYXk8UmVmcmVzaFRva2VuPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVmcmVzaFRva2VuUmV2b2NhdGlvblBvbGljeSB7XG4gIG9uTG9naW5QcmV2ZW50ZWQ/OiBib29sZWFuO1xuICBvbk11bHRpRmFjdG9yRW5hYmxlPzogYm9vbGVhbjtcbiAgb25QYXNzd29yZENoYW5nZWQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgZm9yIHRoZSBSZWZyZXNoIFRva2VuIEFQSSB0byByZXZva2UgYSByZWZyZXNoIHRva2VuIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWZyZXNoVG9rZW5SZXZva2VSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICB0b2tlbj86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBlbnVtIFJlZnJlc2hUb2tlblVzYWdlUG9saWN5IHtcbiAgUmV1c2FibGUgPSBcIlJldXNhYmxlXCIsXG4gIE9uZVRpbWVVc2UgPSBcIk9uZVRpbWVVc2VcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYmlydGhEYXRlPzogUmVxdWlyYWJsZTtcbiAgY29uZmlybVBhc3N3b3JkPzogYm9vbGVhbjtcbiAgZmlyc3ROYW1lPzogUmVxdWlyYWJsZTtcbiAgZm9ybUlkPzogVVVJRDtcbiAgZnVsbE5hbWU/OiBSZXF1aXJhYmxlO1xuICBsYXN0TmFtZT86IFJlcXVpcmFibGU7XG4gIGxvZ2luSWRUeXBlPzogTG9naW5JZFR5cGU7XG4gIG1pZGRsZU5hbWU/OiBSZXF1aXJhYmxlO1xuICBtb2JpbGVQaG9uZT86IFJlcXVpcmFibGU7XG4gIHR5cGU/OiBSZWdpc3RyYXRpb25UeXBlO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBkZWxldGUgQVBJIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdHJhdGlvbkRlbGV0ZVJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBmb3IgdGhlIHJlZ2lzdHJhdGlvbiByZXBvcnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVwb3J0UmVzcG9uc2Uge1xuICBob3VybHlDb3VudHM/OiBBcnJheTxDb3VudD47XG4gIHRvdGFsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlZ2lzdHJhdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0cmF0aW9uUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBkaXNhYmxlRG9tYWluQmxvY2s/OiBib29sZWFuO1xuICBnZW5lcmF0ZUF1dGhlbnRpY2F0aW9uVG9rZW4/OiBib29sZWFuO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICBzZW5kU2V0UGFzc3dvcmRFbWFpbD86IGJvb2xlYW47XG4gIHNraXBSZWdpc3RyYXRpb25WZXJpZmljYXRpb24/OiBib29sZWFuO1xuICBza2lwVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogUmVnaXN0cmF0aW9uIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25SZXNwb25zZSB7XG4gIHJlZnJlc2hUb2tlbj86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHRva2VuPzogc3RyaW5nO1xuICB0b2tlbkV4cGlyYXRpb25JbnN0YW50PzogbnVtYmVyO1xuICB1c2VyPzogVXNlcjtcbn1cblxuZXhwb3J0IGVudW0gUmVnaXN0cmF0aW9uVHlwZSB7XG4gIGJhc2ljID0gXCJiYXNpY1wiLFxuICBhZHZhbmNlZCA9IFwiYWR2YW5jZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucyB7XG4gIGJlaGF2aW9yPzogVW52ZXJpZmllZEJlaGF2aW9yO1xufVxuXG4vKipcbiAqIFJlaW5kZXggQVBJIHJlcXVlc3RcbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVpbmRleFJlcXVlc3Qge1xuICBpbmRleD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVsb2FkUmVxdWVzdCB7XG4gIG5hbWVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVtZW1iZXJQcmV2aW91c1Bhc3N3b3JkcyBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBTb21ldGhpbmcgdGhhdCBjYW4gYmUgcmVxdWlyZWQgYW5kIHRodXMgYWxzbyBvcHRpb25hbC4gVGhpcyBjdXJyZW50bHkgZXh0ZW5kcyBFbmFibGVhYmxlIGJlY2F1c2UgYW55dGhpbmcgdGhhdCBpc1xuICogcmVxdWlyZS9vcHRpb25hbCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWFibGUgYXMgd2VsbC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJhYmxlIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbnRlcmZhY2UgZGVzY3JpYmluZyB0aGUgbmVlZCBmb3IgQ09SUyBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXF1aXJlc0NPUlNDb25maWd1cmF0aW9uIHtcbn1cblxuLyoqXG4gKiBEZXNjcmliZXMgdGhlIFJlbHlpbmcgUGFydHkncyByZXF1aXJlbWVudHMgZm9yIDxhIGhyZWY9XCJodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jY2xpZW50LXNpZGUtZGlzY292ZXJhYmxlLWNyZWRlbnRpYWxcIj5jbGllbnQtc2lkZVxuICogZGlzY292ZXJhYmxlIGNyZWRlbnRpYWxzPC9hPiAoZm9ybWVybHkga25vd24gYXMgXCJyZXNpZGVudCBrZXlzXCIpXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gUmVzaWRlbnRLZXlSZXF1aXJlbWVudCB7XG4gIGRpc2NvdXJhZ2VkID0gXCJkaXNjb3VyYWdlZFwiLFxuICBwcmVmZXJyZWQgPSBcInByZWZlcnJlZFwiLFxuICByZXF1aXJlZCA9IFwicmVxdWlyZWRcIlxufVxuXG5leHBvcnQgZW51bSBTQU1MTG9nb3V0QmVoYXZpb3Ige1xuICBBbGxQYXJ0aWNpcGFudHMgPSBcIkFsbFBhcnRpY2lwYW50c1wiLFxuICBPbmx5T3JpZ2luYXRvciA9IFwiT25seU9yaWdpbmF0b3JcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uSW1hZ2VVUkw/OiBzdHJpbmc7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkFzc2VydGlvbkNvbmZpZ3VyYXRpb24ge1xuICBkZXN0aW5hdGlvbj86IFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uQ29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGF1ZGllbmNlPzogc3RyaW5nO1xuICBhdXRob3JpemVkUmVkaXJlY3RVUkxzPzogQXJyYXk8c3RyaW5nPjtcbiAgY2FsbGJhY2tVUkw/OiBzdHJpbmc7XG4gIGRlYnVnPzogYm9vbGVhbjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAgaW5pdGlhdGVkTG9naW4/OiBTQU1MdjJJZFBJbml0aWF0ZWRMb2dpbkNvbmZpZ3VyYXRpb247XG4gIGlzc3Vlcj86IHN0cmluZztcbiAga2V5SWQ/OiBVVUlEO1xuICBsb2dvdXQ/OiBTQU1MdjJMb2dvdXQ7XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgcmVxdWlyZVNpZ25lZFJlcXVlc3RzPzogYm9vbGVhbjtcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG4gIHhtbFNpZ25hdHVyZUxvY2F0aW9uPzogWE1MU2lnbmF0dXJlTG9jYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFsdGVybmF0ZXM/OiBBcnJheTxzdHJpbmc+O1xuICBwb2xpY3k/OiBTQU1MdjJEZXN0aW5hdGlvbkFzc2VydGlvblBvbGljeTtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEx5bGUgU2NoZW1tZXJsaW5nXG4gKi9cbmV4cG9ydCBlbnVtIFNBTUx2MkRlc3RpbmF0aW9uQXNzZXJ0aW9uUG9saWN5IHtcbiAgRW5hYmxlZCA9IFwiRW5hYmxlZFwiLFxuICBEaXNhYmxlZCA9IFwiRGlzYWJsZWRcIixcbiAgQWxsb3dBbHRlcm5hdGVzID0gXCJBbGxvd0FsdGVybmF0ZXNcIlxufVxuXG4vKipcbiAqIFNBTUwgdjIgaWRlbnRpdHkgcHJvdmlkZXIgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZVNBTUx2MklkZW50aXR5UHJvdmlkZXI8U0FNTHYyQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGFzc2VydGlvbkNvbmZpZ3VyYXRpb24/OiBTQU1MdjJBc3NlcnRpb25Db25maWd1cmF0aW9uO1xuICBidXR0b25JbWFnZVVSTD86IHN0cmluZztcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgZG9tYWlucz86IEFycmF5PHN0cmluZz47XG4gIGlkcEVuZHBvaW50Pzogc3RyaW5nO1xuICBpZHBJbml0aWF0ZWRDb25maWd1cmF0aW9uPzogU0FNTHYySWRwSW5pdGlhdGVkQ29uZmlndXJhdGlvbjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBsb2dpbkhpbnRDb25maWd1cmF0aW9uPzogTG9naW5IaW50Q29uZmlndXJhdGlvbjtcbiAgbmFtZUlkRm9ybWF0Pzogc3RyaW5nO1xuICBwb3N0UmVxdWVzdD86IGJvb2xlYW47XG4gIHJlcXVlc3RTaWduaW5nS2V5SWQ/OiBVVUlEO1xuICBzaWduUmVxdWVzdD86IGJvb2xlYW47XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZFBJbml0aWF0ZWRBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG59XG5cbi8qKlxuICogQ29uZmlnIGZvciByZWd1bGFyIFNBTUwgSURQIGNvbmZpZ3VyYXRpb25zIHRoYXQgc3VwcG9ydCBJZFAgaW5pdGlhdGVkIHJlcXVlc3RzXG4gKlxuICogQGF1dGhvciBMeWxlIFNjaGVtbWVybGluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MklkcEluaXRpYXRlZENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgaXNzdWVyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNBTUwgdjIgSWRQIEluaXRpYXRlZCBpZGVudGl0eSBwcm92aWRlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJJZFBJbml0aWF0ZWRJZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZVNBTUx2MklkZW50aXR5UHJvdmlkZXI8U0FNTHYySWRQSW5pdGlhdGVkQXBwbGljYXRpb25Db25maWd1cmF0aW9uPiB7XG4gIGlzc3Vlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBJZFAgSW5pdGlhdGVkIGxvZ2luIGNvbmZpZ3VyYXRpb25cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU0FNTHYySWRQSW5pdGlhdGVkTG9naW5Db25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIG5hbWVJZEZvcm1hdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTQU1MdjJMb2dvdXQge1xuICBiZWhhdmlvcj86IFNBTUxMb2dvdXRCZWhhdmlvcjtcbiAgZGVmYXVsdFZlcmlmaWNhdGlvbktleUlkPzogVVVJRDtcbiAga2V5SWQ/OiBVVUlEO1xuICByZXF1aXJlU2lnbmVkUmVxdWVzdHM/OiBib29sZWFuO1xuICBzaW5nbGVMb2dvdXQ/OiBTQU1MdjJTaW5nbGVMb2dvdXQ7XG4gIHhtbFNpZ25hdHVyZUMxNG5NZXRob2Q/OiBDYW5vbmljYWxpemF0aW9uTWV0aG9kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNBTUx2MlNpbmdsZUxvZ291dCBleHRlbmRzIEVuYWJsZWFibGUge1xuICBrZXlJZD86IFVVSUQ7XG4gIHVybD86IHN0cmluZztcbiAgeG1sU2lnbmF0dXJlQzE0bk1ldGhvZD86IENhbm9uaWNhbGl6YXRpb25NZXRob2Q7XG59XG5cbi8qKlxuICogU2VhcmNoIEFQSSByZXF1ZXN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlcXVlc3Qge1xuICBzZWFyY2g/OiBVc2VyU2VhcmNoQ3JpdGVyaWE7XG59XG5cbi8qKlxuICogU2VhcmNoIEFQSSByZXNwb25zZS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXNwb25zZSB7XG4gIHRvdGFsPzogbnVtYmVyO1xuICB1c2Vycz86IEFycmF5PFVzZXI+O1xufVxuXG4vKipcbiAqIFNlYXJjaCByZXN1bHRzLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdHM8VD4ge1xuICByZXN1bHRzPzogQXJyYXk8VD47XG4gIHRvdGFsPzogbnVtYmVyO1xuICB0b3RhbEVxdWFsVG9BY3R1YWw/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRSZXNwb25zZSB7XG4gIHNlY3JldD86IHN0cmluZztcbiAgc2VjcmV0QmFzZTMyRW5jb2RlZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlR2VuZXJhdG9yQ29uZmlndXJhdGlvbiB7XG4gIGxlbmd0aD86IG51bWJlcjtcbiAgdHlwZT86IFNlY3VyZUdlbmVyYXRvclR5cGU7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBTZWN1cmVHZW5lcmF0b3JUeXBlIHtcbiAgcmFuZG9tRGlnaXRzID0gXCJyYW5kb21EaWdpdHNcIixcbiAgcmFuZG9tQnl0ZXMgPSBcInJhbmRvbUJ5dGVzXCIsXG4gIHJhbmRvbUFscGhhID0gXCJyYW5kb21BbHBoYVwiLFxuICByYW5kb21BbHBoYU51bWVyaWMgPSBcInJhbmRvbUFscGhhTnVtZXJpY1wiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyZUlkZW50aXR5IHtcbiAgYnJlYWNoZWRQYXNzd29yZExhc3RDaGVja2VkSW5zdGFudD86IG51bWJlcjtcbiAgYnJlYWNoZWRQYXNzd29yZFN0YXR1cz86IEJyZWFjaGVkUGFzc3dvcmRTdGF0dXM7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgZW5jcnlwdGlvblNjaGVtZT86IHN0cmluZztcbiAgZmFjdG9yPzogbnVtYmVyO1xuICBpZD86IFVVSUQ7XG4gIGxhc3RMb2dpbkluc3RhbnQ/OiBudW1iZXI7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZVJlYXNvbj86IENoYW5nZVBhc3N3b3JkUmVhc29uO1xuICBwYXNzd29yZENoYW5nZVJlcXVpcmVkPzogYm9vbGVhbjtcbiAgcGFzc3dvcmRMYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgc2FsdD86IHN0cmluZztcbiAgdW5pcXVlVXNlcm5hbWU/OiBzdHJpbmc7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB1c2VybmFtZVN0YXR1cz86IENvbnRlbnRTdGF0dXM7XG4gIHZlcmlmaWVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYmNjQWRkcmVzc2VzPzogQXJyYXk8c3RyaW5nPjtcbiAgY2NBZGRyZXNzZXM/OiBBcnJheTxzdHJpbmc+O1xuICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBBcnJheTxzdHJpbmc+O1xuICByZXF1ZXN0RGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHRvQWRkcmVzc2VzPzogQXJyYXk8RW1haWxBZGRyZXNzPjtcbiAgdXNlcklkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVzcG9uc2Uge1xuICBhbm9ueW1vdXNSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgRW1haWxUZW1wbGF0ZUVycm9ycz47XG4gIHJlc3VsdHM/OiBSZWNvcmQ8VVVJRCwgRW1haWxUZW1wbGF0ZUVycm9ycz47XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2Uge1xuICBwaG9uZU51bWJlcj86IHN0cmluZztcbiAgdGV4dE1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBNaWNoYWVsIFNsZWV2aVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNNU01lc3NhZ2VUZW1wbGF0ZSBleHRlbmRzIE1lc3NhZ2VUZW1wbGF0ZSB7XG4gIGRlZmF1bHRUZW1wbGF0ZT86IHN0cmluZztcbiAgbG9jYWxpemVkVGVtcGxhdGVzPzogTG9jYWxpemVkU3RyaW5ncztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb255UFNOQXBwbGljYXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNvbnlQU04gZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNvbnlQU05JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8U29ueVBTTkFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbj4ge1xuICBidXR0b25UZXh0Pzogc3RyaW5nO1xuICBjbGllbnRfaWQ/OiBzdHJpbmc7XG4gIGNsaWVudF9zZWNyZXQ/OiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU29ydCB7XG4gIGFzYyA9IFwiYXNjXCIsXG4gIGRlc2MgPSBcImRlc2NcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTb3J0RmllbGQge1xuICBtaXNzaW5nPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBvcmRlcj86IFNvcnQ7XG59XG5cbi8qKlxuICogU3RlYW0gQVBJIG1vZGVzLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gU3RlYW1BUElNb2RlIHtcbiAgUHVibGljID0gXCJQdWJsaWNcIixcbiAgUGFydG5lciA9IFwiUGFydG5lclwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlYW1BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGFwaU1vZGU/OiBTdGVhbUFQSU1vZGU7XG4gIGJ1dHRvblRleHQ/OiBzdHJpbmc7XG4gIGNsaWVudF9pZD86IHN0cmluZztcbiAgc2NvcGU/OiBzdHJpbmc7XG4gIHdlYkFQSUtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTdGVhbSBnYW1pbmcgbG9naW4gcHJvdmlkZXIuXG4gKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RlYW1JZGVudGl0eVByb3ZpZGVyIGV4dGVuZHMgQmFzZUlkZW50aXR5UHJvdmlkZXI8U3RlYW1BcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYXBpTW9kZT86IFN0ZWFtQVBJTW9kZTtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbiAgd2ViQVBJS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciBpbnRlcmZhY2UgdGhhdCBpbmRpY2F0ZXMgYW4gaWRlbnRpdHkgcHJvdmlkZXIgY2FuIGJlIGZlZGVyYXRlZCB0byB1c2luZyB0aGUgSFRUUCBQT1NUIG1ldGhvZC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdXBwb3J0c1Bvc3RCaW5kaW5ncyB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvbiB7XG4gIGF1ZGl0TG9nQ29uZmlndXJhdGlvbj86IEF1ZGl0TG9nQ29uZmlndXJhdGlvbjtcbiAgY29yc0NvbmZpZ3VyYXRpb24/OiBDT1JTQ29uZmlndXJhdGlvbjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGV2ZW50TG9nQ29uZmlndXJhdGlvbj86IEV2ZW50TG9nQ29uZmlndXJhdGlvbjtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIGxvZ2luUmVjb3JkQ29uZmlndXJhdGlvbj86IExvZ2luUmVjb3JkQ29uZmlndXJhdGlvbjtcbiAgcmVwb3J0VGltZXpvbmU/OiBzdHJpbmc7XG4gIHVpQ29uZmlndXJhdGlvbj86IFVJQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IGZvciB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gQVBJLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUNvbmZpZ3VyYXRpb25SZXF1ZXN0IHtcbiAgc3lzdGVtQ29uZmlndXJhdGlvbj86IFN5c3RlbUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogUmVzcG9uc2UgZm9yIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiBBUEkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtQ29uZmlndXJhdGlvblJlc3BvbnNlIHtcbiAgc3lzdGVtQ29uZmlndXJhdGlvbj86IFN5c3RlbUNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5c3RlbUxvZ3NFeHBvcnRSZXF1ZXN0IGV4dGVuZHMgQmFzZUV4cG9ydFJlcXVlc3Qge1xuICBpbmNsdWRlQXJjaGl2ZWQ/OiBib29sZWFuO1xuICBsYXN0TkJ5dGVzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlcyB7XG4gIGFjY291bnRFZGl0Pzogc3RyaW5nO1xuICBhY2NvdW50SW5kZXg/OiBzdHJpbmc7XG4gIGFjY291bnRUd29GYWN0b3JEaXNhYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9yRW5hYmxlPzogc3RyaW5nO1xuICBhY2NvdW50VHdvRmFjdG9ySW5kZXg/OiBzdHJpbmc7XG4gIGFjY291bnRXZWJBdXRobkFkZD86IHN0cmluZztcbiAgYWNjb3VudFdlYkF1dGhuRGVsZXRlPzogc3RyaW5nO1xuICBhY2NvdW50V2ViQXV0aG5JbmRleD86IHN0cmluZztcbiAgZW1haWxDb21wbGV0ZT86IHN0cmluZztcbiAgZW1haWxTZW5kPzogc3RyaW5nO1xuICBlbWFpbFNlbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZpY2F0aW9uUmVxdWlyZWQ/OiBzdHJpbmc7XG4gIGVtYWlsVmVyaWZ5Pzogc3RyaW5nO1xuICBoZWxwZXJzPzogc3RyaW5nO1xuICBpbmRleD86IHN0cmluZztcbiAgb2F1dGgyQXV0aG9yaXplPzogc3RyaW5nO1xuICBvYXV0aDJBdXRob3JpemVkTm90UmVnaXN0ZXJlZD86IHN0cmluZztcbiAgb2F1dGgyQ2hpbGRSZWdpc3RyYXRpb25Ob3RBbGxvd2VkPzogc3RyaW5nO1xuICBvYXV0aDJDaGlsZFJlZ2lzdHJhdGlvbk5vdEFsbG93ZWRDb21wbGV0ZT86IHN0cmluZztcbiAgb2F1dGgyQ29tcGxldGVSZWdpc3RyYXRpb24/OiBzdHJpbmc7XG4gIG9hdXRoMkRldmljZT86IHN0cmluZztcbiAgb2F1dGgyRGV2aWNlQ29tcGxldGU/OiBzdHJpbmc7XG4gIG9hdXRoMkVycm9yPzogc3RyaW5nO1xuICBvYXV0aDJMb2dvdXQ/OiBzdHJpbmc7XG4gIG9hdXRoMlBhc3N3b3JkbGVzcz86IHN0cmluZztcbiAgb2F1dGgyUmVnaXN0ZXI/OiBzdHJpbmc7XG4gIG9hdXRoMlN0YXJ0SWRQTGluaz86IHN0cmluZztcbiAgb2F1dGgyVHdvRmFjdG9yPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3JFbmFibGU/OiBzdHJpbmc7XG4gIG9hdXRoMlR3b0ZhY3RvckVuYWJsZUNvbXBsZXRlPzogc3RyaW5nO1xuICBvYXV0aDJUd29GYWN0b3JNZXRob2RzPzogc3RyaW5nO1xuICBvYXV0aDJXYWl0Pzogc3RyaW5nO1xuICBvYXV0aDJXZWJBdXRobj86IHN0cmluZztcbiAgb2F1dGgyV2ViQXV0aG5SZWF1dGg/OiBzdHJpbmc7XG4gIG9hdXRoMldlYkF1dGhuUmVhdXRoRW5hYmxlPzogc3RyaW5nO1xuICBwYXNzd29yZENoYW5nZT86IHN0cmluZztcbiAgcGFzc3dvcmRDb21wbGV0ZT86IHN0cmluZztcbiAgcGFzc3dvcmRGb3Jnb3Q/OiBzdHJpbmc7XG4gIHBhc3N3b3JkU2VudD86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uQ29tcGxldGU/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblNlbmQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblNlbnQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvblJlcXVpcmVkPzogc3RyaW5nO1xuICByZWdpc3RyYXRpb25WZXJpZnk/OiBzdHJpbmc7XG4gIHNhbWx2MkxvZ291dD86IHN0cmluZztcbiAgdW5hdXRob3JpemVkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnQge1xuICBhY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbj86IFRlbmFudEFjY2Vzc0NvbnRyb2xDb25maWd1cmF0aW9uO1xuICBjYXB0Y2hhQ29uZmlndXJhdGlvbj86IFRlbmFudENhcHRjaGFDb25maWd1cmF0aW9uO1xuICBjb25maWd1cmVkPzogYm9vbGVhbjtcbiAgY29ubmVjdG9yUG9saWNpZXM/OiBBcnJheTxDb25uZWN0b3JQb2xpY3k+O1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZW1haWxDb25maWd1cmF0aW9uPzogRW1haWxDb25maWd1cmF0aW9uO1xuICBldmVudENvbmZpZ3VyYXRpb24/OiBFdmVudENvbmZpZ3VyYXRpb247XG4gIGV4dGVybmFsSWRlbnRpZmllckNvbmZpZ3VyYXRpb24/OiBFeHRlcm5hbElkZW50aWZpZXJDb25maWd1cmF0aW9uO1xuICBmYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24/OiBGYWlsZWRBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb247XG4gIGZhbWlseUNvbmZpZ3VyYXRpb24/OiBGYW1pbHlDb25maWd1cmF0aW9uO1xuICBmb3JtQ29uZmlndXJhdGlvbj86IFRlbmFudEZvcm1Db25maWd1cmF0aW9uO1xuICBodHRwU2Vzc2lvbk1heEluYWN0aXZlSW50ZXJ2YWw/OiBudW1iZXI7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgaXNzdWVyPzogc3RyaW5nO1xuICBqd3RDb25maWd1cmF0aW9uPzogSldUQ29uZmlndXJhdGlvbjtcbiAgbGFtYmRhQ29uZmlndXJhdGlvbj86IFRlbmFudExhbWJkYUNvbmZpZ3VyYXRpb247XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2dpbkNvbmZpZ3VyYXRpb24/OiBUZW5hbnRMb2dpbkNvbmZpZ3VyYXRpb247XG4gIGxvZ291dFVSTD86IHN0cmluZztcbiAgbWF4aW11bVBhc3N3b3JkQWdlPzogTWF4aW11bVBhc3N3b3JkQWdlO1xuICBtaW5pbXVtUGFzc3dvcmRBZ2U/OiBNaW5pbXVtUGFzc3dvcmRBZ2U7XG4gIG11bHRpRmFjdG9yQ29uZmlndXJhdGlvbj86IFRlbmFudE11bHRpRmFjdG9yQ29uZmlndXJhdGlvbjtcbiAgbmFtZT86IHN0cmluZztcbiAgb2F1dGhDb25maWd1cmF0aW9uPzogVGVuYW50T0F1dGgyQ29uZmlndXJhdGlvbjtcbiAgcGFzc3dvcmRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbj86IFBhc3N3b3JkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb247XG4gIHBhc3N3b3JkVmFsaWRhdGlvblJ1bGVzPzogUGFzc3dvcmRWYWxpZGF0aW9uUnVsZXM7XG4gIHJhdGVMaW1pdENvbmZpZ3VyYXRpb24/OiBUZW5hbnRSYXRlTGltaXRDb25maWd1cmF0aW9uO1xuICByZWdpc3RyYXRpb25Db25maWd1cmF0aW9uPzogVGVuYW50UmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbjtcbiAgc2NpbVNlcnZlckNvbmZpZ3VyYXRpb24/OiBUZW5hbnRTQ0lNU2VydmVyQ29uZmlndXJhdGlvbjtcbiAgc3NvQ29uZmlndXJhdGlvbj86IFRlbmFudFNTT0NvbmZpZ3VyYXRpb247XG4gIHN0YXRlPzogT2JqZWN0U3RhdGU7XG4gIHRoZW1lSWQ/OiBVVUlEO1xuICB1c2VyRGVsZXRlUG9saWN5PzogVGVuYW50VXNlckRlbGV0ZVBvbGljeTtcbiAgdXNlcm5hbWVDb25maWd1cmF0aW9uPzogVGVuYW50VXNlcm5hbWVDb25maWd1cmF0aW9uO1xuICB3ZWJBdXRobkNvbmZpZ3VyYXRpb24/OiBUZW5hbnRXZWJBdXRobkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50YWJsZSB7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRBY2Nlc3NDb250cm9sQ29uZmlndXJhdGlvbiB7XG4gIHVpSVBBY2Nlc3NDb250cm9sTGlzdElkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRDYXB0Y2hhQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjYXB0Y2hhTWV0aG9kPzogQ2FwdGNoYU1ldGhvZDtcbiAgc2VjcmV0S2V5Pzogc3RyaW5nO1xuICBzaXRlS2V5Pzogc3RyaW5nO1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVxdWVzdCBmb3IgdGhlIFRlbmFudCBBUEkgdG8gZGVsZXRlIGEgdGVuYW50IHJhdGhlciB0aGFuIHVzaW5nIHRoZSBVUkwgcGFyYW1ldGVycy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnREZWxldGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFzeW5jPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50Rm9ybUNvbmZpZ3VyYXRpb24ge1xuICBhZG1pblVzZXJGb3JtSWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgUm9iIERhdmlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50TGFtYmRhQ29uZmlndXJhdGlvbiB7XG4gIHNjaW1FbnRlcnByaXNlVXNlclJlcXVlc3RDb252ZXJ0ZXJJZD86IFVVSUQ7XG4gIHNjaW1FbnRlcnByaXNlVXNlclJlc3BvbnNlQ29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltR3JvdXBSZXF1ZXN0Q29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltR3JvdXBSZXNwb25zZUNvbnZlcnRlcklkPzogVVVJRDtcbiAgc2NpbVVzZXJSZXF1ZXN0Q29udmVydGVySWQ/OiBVVUlEO1xuICBzY2ltVXNlclJlc3BvbnNlQ29udmVydGVySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRMb2dpbkNvbmZpZ3VyYXRpb24ge1xuICByZXF1aXJlQXV0aGVudGljYXRpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBhdXRob3IgTWlrZXkgU2xlZXZpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50TXVsdGlGYWN0b3JDb25maWd1cmF0aW9uIHtcbiAgYXV0aGVudGljYXRvcj86IE11bHRpRmFjdG9yQXV0aGVudGljYXRvck1ldGhvZDtcbiAgZW1haWw/OiBNdWx0aUZhY3RvckVtYWlsTWV0aG9kO1xuICBsb2dpblBvbGljeT86IE11bHRpRmFjdG9yTG9naW5Qb2xpY3k7XG4gIHNtcz86IE11bHRpRmFjdG9yU01TTWV0aG9kO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudE9BdXRoMkNvbmZpZ3VyYXRpb24ge1xuICBjbGllbnRDcmVkZW50aWFsc0FjY2Vzc1Rva2VuUG9wdWxhdGVMYW1iZGFJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFJhdGVMaW1pdENvbmZpZ3VyYXRpb24ge1xuICBmYWlsZWRMb2dpbj86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIGZvcmdvdFBhc3N3b3JkPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZEVtYWlsVmVyaWZpY2F0aW9uPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbiAgc2VuZFBhc3N3b3JkbGVzcz86IFJhdGVMaW1pdGVkUmVxdWVzdENvbmZpZ3VyYXRpb247XG4gIHNlbmRSZWdpc3RyYXRpb25WZXJpZmljYXRpb24/OiBSYXRlTGltaXRlZFJlcXVlc3RDb25maWd1cmF0aW9uO1xuICBzZW5kVHdvRmFjdG9yPzogUmF0ZUxpbWl0ZWRSZXF1ZXN0Q29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVnaXN0cmF0aW9uQ29uZmlndXJhdGlvbiB7XG4gIGJsb2NrZWREb21haW5zPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50UmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBzb3VyY2VUZW5hbnRJZD86IFVVSUQ7XG4gIHRlbmFudD86IFRlbmFudDtcbiAgd2ViaG9va0lkcz86IEFycmF5PFVVSUQ+O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRSZXNwb25zZSB7XG4gIHRlbmFudD86IFRlbmFudDtcbiAgdGVuYW50cz86IEFycmF5PFRlbmFudD47XG59XG5cbi8qKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTQ0lNU2VydmVyQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBjbGllbnRFbnRpdHlUeXBlSWQ/OiBVVUlEO1xuICBzY2hlbWFzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgc2VydmVyRW50aXR5VHlwZUlkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRTU09Db25maWd1cmF0aW9uIHtcbiAgZGV2aWNlVHJ1c3RUaW1lVG9MaXZlSW5TZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRVbnZlcmlmaWVkQ29uZmlndXJhdGlvbiB7XG4gIGVtYWlsPzogVW52ZXJpZmllZEJlaGF2aW9yO1xuICB3aGVuR2F0ZWQ/OiBSZWdpc3RyYXRpb25VbnZlcmlmaWVkT3B0aW9ucztcbn1cblxuLyoqXG4gKiBBIFRlbmFudC1sZXZlbCBwb2xpY3kgZm9yIGRlbGV0aW5nIFVzZXJzLlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGVuYW50VXNlckRlbGV0ZVBvbGljeSB7XG4gIHVudmVyaWZpZWQ/OiBUaW1lQmFzZWREZWxldGVQb2xpY3k7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFVzZXJuYW1lQ29uZmlndXJhdGlvbiB7XG4gIHVuaXF1ZT86IFVuaXF1ZVVzZXJuYW1lQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBUZW5hbnQtbGV2ZWwgY29uZmlndXJhdGlvbiBmb3IgV2ViQXV0aG5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFdlYkF1dGhuQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBib290c3RyYXBXb3JrZmxvdz86IFRlbmFudFdlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xuICBkZWJ1Zz86IGJvb2xlYW47XG4gIHJlYXV0aGVudGljYXRpb25Xb3JrZmxvdz86IFRlbmFudFdlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uO1xuICByZWx5aW5nUGFydHlJZD86IHN0cmluZztcbiAgcmVseWluZ1BhcnR5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbmFudFdlYkF1dGhuV29ya2Zsb3dDb25maWd1cmF0aW9uIGV4dGVuZHMgRW5hYmxlYWJsZSB7XG4gIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50UHJlZmVyZW5jZT86IEF1dGhlbnRpY2F0b3JBdHRhY2htZW50UHJlZmVyZW5jZTtcbiAgdXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50PzogVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50O1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUZXN0RXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWUge1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgZGVmYXVsdE1lc3NhZ2VzPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRNZXNzYWdlcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0eWxlc2hlZXQ/OiBzdHJpbmc7XG4gIHRlbXBsYXRlcz86IFRlbXBsYXRlcztcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaGVtZVJlcXVlc3Qge1xuICBzb3VyY2VUaGVtZUlkPzogVVVJRDtcbiAgdGhlbWU/OiBUaGVtZTtcbn1cblxuLyoqXG4gKiBUaGVtZSBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgVHJldm9yIFNtaXRoXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGhlbWVSZXNwb25zZSB7XG4gIHRoZW1lPzogVGhlbWU7XG4gIHRoZW1lcz86IEFycmF5PFRoZW1lPjtcbn1cblxuLyoqXG4gKiBBIHBvbGljeSBmb3IgZGVsZXRpbmcgVXNlcnMuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lQmFzZWREZWxldGVQb2xpY3kgZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgbnVtYmVyT2ZEYXlzVG9SZXRhaW4/OiBudW1iZXI7XG59XG5cbi8qKlxuICogPHVsPlxuICogPGxpPkJlYXJlciBUb2tlbiB0eXBlIGFzIGRlZmluZWQgYnkgPGEgaHJlZj1cImh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NzUwXCI+UkZDIDY3NTA8L2E+LjwvbGk+XG4gKiA8bGk+TUFDIFRva2VuIHR5cGUgYXMgcmVmZXJlbmNlZCBieSA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY3NDlcIj5SRkMgNjc0OTwvYT4gYW5kXG4gKiA8YSBocmVmPVwiaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWlldGYtb2F1dGgtdjItaHR0cC1tYWMtMDVcIj5cbiAqIERyYWZ0IFJGQyBvbiBPQXV0aCAyLjAgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIChNQUMpIFRva2VuczwvYT5cbiAqIDwvbGk+XG4gKiA8L3VsPlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVG9rZW5UeXBlIHtcbiAgQmVhcmVyID0gXCJCZWFyZXJcIixcbiAgTUFDID0gXCJNQUNcIlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvdGFscyB7XG4gIGxvZ2lucz86IG51bWJlcjtcbiAgcmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbiAgdG90YWxSZWdpc3RyYXRpb25zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSByZXNwb25zZSBmcm9tIHRoZSB0b3RhbCByZXBvcnQuIFRoaXMgcmVwb3J0IHN0b3JlcyB0aGUgdG90YWwgbnVtYmVycyBmb3IgZWFjaCBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUb3RhbHNSZXBvcnRSZXNwb25zZSB7XG4gIGFwcGxpY2F0aW9uVG90YWxzPzogUmVjb3JkPFVVSUQsIFRvdGFscz47XG4gIGdsb2JhbFJlZ2lzdHJhdGlvbnM/OiBudW1iZXI7XG4gIHRvdGFsR2xvYmFsUmVnaXN0cmF0aW9ucz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGVudW0gVE9UUEFsZ29yaXRobSB7XG4gIEhtYWNTSEExID0gXCJIbWFjU0hBMVwiLFxuICBIbWFjU0hBMjU2ID0gXCJIbWFjU0hBMjU2XCIsXG4gIEhtYWNTSEE1MTIgPSBcIkhtYWNTSEE1MTJcIlxufVxuXG4vKipcbiAqIFRoZSB0cmFuc2FjdGlvbiB0eXBlcyBmb3IgV2ViaG9va3MgYW5kIG90aGVyIGV2ZW50IHN5c3RlbXMgd2l0aGluIEZ1c2lvbkF1dGguXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uVHlwZSB7XG4gIE5vbmUgPSBcIk5vbmVcIixcbiAgQW55ID0gXCJBbnlcIixcbiAgU2ltcGxlTWFqb3JpdHkgPSBcIlNpbXBsZU1ham9yaXR5XCIsXG4gIFN1cGVyTWFqb3JpdHkgPSBcIlN1cGVyTWFqb3JpdHlcIixcbiAgQWJzb2x1dGVNYWpvcml0eSA9IFwiQWJzb2x1dGVNYWpvcml0eVwiXG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2lsaW9NZXNzZW5nZXJDb25maWd1cmF0aW9uIGV4dGVuZHMgQmFzZU1lc3NlbmdlckNvbmZpZ3VyYXRpb24ge1xuICBhY2NvdW50U0lEPzogc3RyaW5nO1xuICBhdXRoVG9rZW4/OiBzdHJpbmc7XG4gIGZyb21QaG9uZU51bWJlcj86IHN0cmluZztcbiAgbWVzc2FnaW5nU2VydmljZVNpZD86IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUd2l0Y2ggZ2FtaW5nIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgQnJldHQgUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3aXRjaElkZW50aXR5UHJvdmlkZXIgZXh0ZW5kcyBCYXNlSWRlbnRpdHlQcm92aWRlcjxUd2l0Y2hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdpdHRlckFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFR3aXR0ZXIgc29jaWFsIGxvZ2luIHByb3ZpZGVyLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd2l0dGVySWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFR3aXR0ZXJBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY29uc3VtZXJLZXk/OiBzdHJpbmc7XG4gIGNvbnN1bWVyU2VjcmV0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvckRpc2FibGVSZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjb2RlPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yRW5hYmxlRGlzYWJsZVNlbmRSZXF1ZXN0IHtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgbWV0aG9kSWQ/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JMb2dpblJlcXVlc3QgZXh0ZW5kcyBCYXNlTG9naW5SZXF1ZXN0IHtcbiAgY29kZT86IHN0cmluZztcbiAgdHJ1c3RDb21wdXRlcj86IGJvb2xlYW47XG4gIHR3b0ZhY3RvcklkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JNZXRob2Qge1xuICBhdXRoZW50aWNhdG9yPzogQXV0aGVudGljYXRvckNvbmZpZ3VyYXRpb247XG4gIGVtYWlsPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgbGFzdFVzZWQ/OiBib29sZWFuO1xuICBtZXRob2Q/OiBzdHJpbmc7XG4gIG1vYmlsZVBob25lPzogc3RyaW5nO1xuICBzZWNyZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR3b0ZhY3RvclJlY292ZXJ5Q29kZVJlc3BvbnNlIHtcbiAgcmVjb3ZlcnlDb2Rlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgYXV0aGVudGljYXRvcklkPzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtb2JpbGVQaG9uZT86IHN0cmluZztcbiAgc2VjcmV0Pzogc3RyaW5nO1xuICBzZWNyZXRCYXNlMzJFbmNvZGVkPzogc3RyaW5nO1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yUmVzcG9uc2Uge1xuICBjb2RlPzogc3RyaW5nO1xuICByZWNvdmVyeUNvZGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU2VuZFJlcXVlc3Qge1xuICBlbWFpbD86IHN0cmluZztcbiAgbWV0aG9kPzogc3RyaW5nO1xuICBtZXRob2RJZD86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBHdXlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUd29GYWN0b3JTdGFydFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgY29kZT86IHN0cmluZztcbiAgbG9naW5JZD86IHN0cmluZztcbiAgc3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICB0cnVzdENoYWxsZW5nZT86IHN0cmluZztcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhcnRSZXNwb25zZSB7XG4gIGNvZGU/OiBzdHJpbmc7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICB0d29GYWN0b3JJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yU3RhdHVzUmVzcG9uc2Uge1xuICB0cnVzdHM/OiBBcnJheTxUd29GYWN0b3JUcnVzdD47XG4gIHR3b0ZhY3RvclRydXN0SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHdvRmFjdG9yVHJ1c3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZXhwaXJhdGlvbj86IG51bWJlcjtcbiAgc3RhcnRJbnN0YW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVJQ29uZmlndXJhdGlvbiB7XG4gIGhlYWRlckNvbG9yPzogc3RyaW5nO1xuICBsb2dvVVJMPzogc3RyaW5nO1xuICBtZW51Rm9udENvbG9yPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuaXF1ZVVzZXJuYW1lQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuYWJsZWFibGUge1xuICBudW1iZXJPZkRpZ2l0cz86IG51bWJlcjtcbiAgc2VwYXJhdG9yPzogc3RyaW5nO1xuICBzdHJhdGVneT86IFVuaXF1ZVVzZXJuYW1lU3RyYXRlZ3k7XG59XG5cbmV4cG9ydCBlbnVtIFVuaXF1ZVVzZXJuYW1lU3RyYXRlZ3kge1xuICBBbHdheXMgPSBcIkFsd2F5c1wiLFxuICBPbkNvbGxpc2lvbiA9IFwiT25Db2xsaXNpb25cIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVW52ZXJpZmllZEJlaGF2aW9yIHtcbiAgQWxsb3cgPSBcIkFsbG93XCIsXG4gIEdhdGVkID0gXCJHYXRlZFwiXG59XG5cbi8qKlxuICogVGhlIGdsb2JhbCB2aWV3IG9mIGEgVXNlci4gVGhpcyBvYmplY3QgY29udGFpbnMgYWxsIGdsb2JhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXNlciBpbmNsdWRpbmcgYmlydGggZGF0ZSwgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uXG4gKiBwcmVmZXJyZWQgbGFuZ3VhZ2VzLCBnbG9iYWwgYXR0cmlidXRlcywgZXRjLlxuICpcbiAqIEBhdXRob3IgU2V0aCBNdXNzZWxtYW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyIGV4dGVuZHMgU2VjdXJlSWRlbnRpdHkge1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBiaXJ0aERhdGU/OiBzdHJpbmc7XG4gIGNsZWFuU3BlYWtJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBlbWFpbD86IHN0cmluZztcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBmaXJzdE5hbWU/OiBzdHJpbmc7XG4gIGZ1bGxOYW1lPzogc3RyaW5nO1xuICBpbWFnZVVybD86IHN0cmluZztcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdE5hbWU/OiBzdHJpbmc7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBtZW1iZXJzaGlwcz86IEFycmF5PEdyb3VwTWVtYmVyPjtcbiAgbWlkZGxlTmFtZT86IHN0cmluZztcbiAgbW9iaWxlUGhvbmU/OiBzdHJpbmc7XG4gIHBhcmVudEVtYWlsPzogc3RyaW5nO1xuICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBBcnJheTxzdHJpbmc+O1xuICByZWdpc3RyYXRpb25zPzogQXJyYXk8VXNlclJlZ2lzdHJhdGlvbj47XG4gIHRlbmFudElkPzogVVVJRDtcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIHR3b0ZhY3Rvcj86IFVzZXJUd29GYWN0b3JDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEFuIGFjdGlvbiB0aGF0IGNhbiBiZSBleGVjdXRlZCBvbiBhIHVzZXIgKGRpc2NpcGxpbmUgb3IgcmV3YXJkIHBvdGVudGlhbGx5KS5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uIHtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgY2FuY2VsRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgZW5kRW1haWxUZW1wbGF0ZUlkPzogVVVJRDtcbiAgaWQ/OiBVVUlEO1xuICBpbmNsdWRlRW1haWxJbkV2ZW50SlNPTj86IGJvb2xlYW47XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lcz86IExvY2FsaXplZFN0cmluZ3M7XG4gIG1vZGlmeUVtYWlsVGVtcGxhdGVJZD86IFVVSUQ7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBcnJheTxVc2VyQWN0aW9uT3B0aW9uPjtcbiAgcHJldmVudExvZ2luPzogYm9vbGVhbjtcbiAgc2VuZEVuZEV2ZW50PzogYm9vbGVhbjtcbiAgc3RhcnRFbWFpbFRlbXBsYXRlSWQ/OiBVVUlEO1xuICB0ZW1wb3JhbD86IGJvb2xlYW47XG4gIHRyYW5zYWN0aW9uVHlwZT86IFRyYW5zYWN0aW9uVHlwZTtcbiAgdXNlckVtYWlsaW5nRW5hYmxlZD86IGJvb2xlYW47XG4gIHVzZXJOb3RpZmljYXRpb25zRW5hYmxlZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSB1c2VyIGFjdGlvbiBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIGFjdGlvbmVlVXNlcklkPzogVVVJRDtcbiAgYWN0aW9uZXJVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25JZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsPzogRW1haWw7XG4gIGVtYWlsZWRVc2VyPzogYm9vbGVhbjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBsb2NhbGl6ZWRBY3Rpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZER1cmF0aW9uPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRPcHRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFJlYXNvbj86IHN0cmluZztcbiAgbm90aWZ5VXNlcj86IGJvb2xlYW47XG4gIG9wdGlvbj86IHN0cmluZztcbiAgcGhhc2U/OiBVc2VyQWN0aW9uUGhhc2U7XG4gIHJlYXNvbj86IHN0cmluZztcbiAgcmVhc29uQ29kZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIGxvZyBmb3IgYW4gYWN0aW9uIHRoYXQgd2FzIHRha2VuIG9uIGEgVXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uTG9nIHtcbiAgYWN0aW9uZWVVc2VySWQ/OiBVVUlEO1xuICBhY3Rpb25lclVzZXJJZD86IFVVSUQ7XG4gIGFwcGxpY2F0aW9uSWRzPzogQXJyYXk8VVVJRD47XG4gIGNvbW1lbnQ/OiBzdHJpbmc7XG4gIGVtYWlsVXNlck9uRW5kPzogYm9vbGVhbjtcbiAgZW5kRXZlbnRTZW50PzogYm9vbGVhbjtcbiAgZXhwaXJ5PzogbnVtYmVyO1xuICBoaXN0b3J5PzogTG9nSGlzdG9yeTtcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsb2NhbGl6ZWROYW1lPzogc3RyaW5nO1xuICBsb2NhbGl6ZWRPcHRpb24/OiBzdHJpbmc7XG4gIGxvY2FsaXplZFJlYXNvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgbm90aWZ5VXNlck9uRW5kPzogYm9vbGVhbjtcbiAgb3B0aW9uPzogc3RyaW5nO1xuICByZWFzb24/OiBzdHJpbmc7XG4gIHJlYXNvbkNvZGU/OiBzdHJpbmc7XG4gIHVzZXJBY3Rpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIGNvbnRlbnQgdXNlciBhY3Rpb24gb3B0aW9ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uT3B0aW9uIHtcbiAgbG9jYWxpemVkTmFtZXM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICBuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwaGFzZXMgb2YgYSB0aW1lLWJhc2VkIHVzZXIgYWN0aW9uLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgZW51bSBVc2VyQWN0aW9uUGhhc2Uge1xuICBzdGFydCA9IFwic3RhcnRcIixcbiAgbW9kaWZ5ID0gXCJtb2RpZnlcIixcbiAgY2FuY2VsID0gXCJjYW5jZWxcIixcbiAgZW5kID0gXCJlbmRcIlxufVxuXG4vKipcbiAqIE1vZGVscyBhY3Rpb24gcmVhc29ucy5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uIHtcbiAgY29kZT86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXBkYXRlSW5zdGFudD86IG51bWJlcjtcbiAgbG9jYWxpemVkVGV4dHM/OiBMb2NhbGl6ZWRTdHJpbmdzO1xuICB0ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVzZXIgQWN0aW9uIFJlYXNvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlYXNvblJlcXVlc3Qge1xuICB1c2VyQWN0aW9uUmVhc29uPzogVXNlckFjdGlvblJlYXNvbjtcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBSZWFzb24gQVBJIHJlc3BvbnNlIG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQWN0aW9uUmVhc29uUmVzcG9uc2Uge1xuICB1c2VyQWN0aW9uUmVhc29uPzogVXNlckFjdGlvblJlYXNvbjtcbiAgdXNlckFjdGlvblJlYXNvbnM/OiBBcnJheTxVc2VyQWN0aW9uUmVhc29uPjtcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckFjdGlvblJlcXVlc3Qge1xuICB1c2VyQWN0aW9uPzogVXNlckFjdGlvbjtcbn1cblxuLyoqXG4gKiBVc2VyIEFjdGlvbiBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJBY3Rpb25SZXNwb25zZSB7XG4gIHVzZXJBY3Rpb24/OiBVc2VyQWN0aW9uO1xuICB1c2VyQWN0aW9ucz86IEFycmF5PFVzZXJBY3Rpb24+O1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBCdWxrIENyZWF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyQnVsa0NyZWF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcnM/OiBBcnJheTxVc2VyPjtcbn1cblxuLyoqXG4gKiBBIGxvZyBmb3IgYW4gZXZlbnQgdGhhdCBoYXBwZW5lZCB0byBhIFVzZXIuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnQge1xuICBjb21tZW50Pzogc3RyaW5nO1xuICBjb21tZW50ZXJJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgdXNlcklkPzogVVVJRDtcbn1cblxuLyoqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRSZXF1ZXN0IHtcbiAgdXNlckNvbW1lbnQ/OiBVc2VyQ29tbWVudDtcbn1cblxuLyoqXG4gKiBVc2VyIENvbW1lbnQgUmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNldGggTXVzc2VsbWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNvbW1lbnRSZXNwb25zZSB7XG4gIHVzZXJDb21tZW50PzogVXNlckNvbW1lbnQ7XG4gIHVzZXJDb21tZW50cz86IEFycmF5PFVzZXJDb21tZW50Pjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYSBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50IHtcbiAgY29uc2VudD86IENvbnNlbnQ7XG4gIGNvbnNlbnRJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBnaXZlclVzZXJJZD86IFVVSUQ7XG4gIGlkPzogVVVJRDtcbiAgaW5zZXJ0SW5zdGFudD86IG51bWJlcjtcbiAgbGFzdFVwZGF0ZUluc3RhbnQ/OiBudW1iZXI7XG4gIHN0YXR1cz86IENvbnNlbnRTdGF0dXM7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZhbHVlcz86IEFycmF5PHN0cmluZz47XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50UmVxdWVzdCB7XG4gIHVzZXJDb25zZW50PzogVXNlckNvbnNlbnQ7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBVc2VyIGNvbnNlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDb25zZW50UmVzcG9uc2Uge1xuICB1c2VyQ29uc2VudD86IFVzZXJDb25zZW50O1xuICB1c2VyQ29uc2VudHM/OiBBcnJheTxVc2VyQ29uc2VudD47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHVzZXIuY3JlYXRlIGV2ZW50IGluIHRoYXQgaXQgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQuIFRoaXMgZXZlbnQgY2Fubm90IGJlIG1hZGUgdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckNyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgQ3JlYXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJDcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBEZWFjdGl2YXRlIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJEZWFjdGl2YXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRXZlbnQgKGFuZCBjYW4gYmUgY29udmVydGVkIHRvIEpTT04pIHRoYXQgaXMgdXNlZCBmb3IgYWxsIHVzZXIgbW9kaWZpY2F0aW9ucyAoY3JlYXRlLCB1cGRhdGUsXG4gKiBkZWxldGUpLlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIuZGVsZXRlIGJlY2F1c2UgaXQgaXMgc2VudCBhZnRlciB0aGUgdHggaXMgY29tbWl0dGVkLCB0aGlzIGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBFdmVudCAoYW5kIGNhbiBiZSBjb252ZXJ0ZWQgdG8gSlNPTikgdGhhdCBpcyB1c2VkIGZvciBhbGwgdXNlciBtb2RpZmljYXRpb25zIChjcmVhdGUsIHVwZGF0ZSxcbiAqIGRlbGV0ZSkuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckRlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogVXNlciBBUEkgZGVsZXRlIHJlcXVlc3Qgb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbiAgcXVlcnk/OiBzdHJpbmc7XG4gIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xuICB1c2VySWRzPzogQXJyYXk8VVVJRD47XG59XG5cbi8qKlxuICogVXNlciBBUEkgYnVsayByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlUmVzcG9uc2Uge1xuICBkcnlSdW4/OiBib29sZWFuO1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbiAgdG90YWw/OiBudW1iZXI7XG4gIHVzZXJJZHM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIFVzZXIgQVBJIGRlbGV0ZSByZXF1ZXN0IG9iamVjdCBmb3IgYSBzaW5nbGUgdXNlci5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRGVsZXRlU2luZ2xlUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBoYXJkRGVsZXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZXZlbnQgd2hlcmUgYSB1c2VyJ3MgZW1haWwgaXMgdXBkYXRlZCBvdXRzaWRlIG9mIGEgZm9yZ290IC8gY2hhbmdlIHBhc3N3b3JkIHdvcmtmbG93LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRW1haWxVcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHByZXZpb3VzRW1haWw/OiBzdHJpbmc7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBFbWFpbCBWZXJpZnkgRXZlbnQuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyRW1haWxWZXJpZmllZEV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIElkZW50aXR5IFByb3ZpZGVyIExpbmsgRXZlbnQuXG4gKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlQcm92aWRlckxpbmtFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGlkZW50aXR5UHJvdmlkZXJMaW5rPzogSWRlbnRpdHlQcm92aWRlckxpbms7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBJZGVudGl0eSBQcm92aWRlciBVbmxpbmsgRXZlbnQuXG4gKlxuICogQGF1dGhvciBSb2IgRGF2aXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VySWRlbnRpdHlQcm92aWRlclVubGlua0V2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgaWRlbnRpdHlQcm92aWRlckxpbms/OiBJZGVudGl0eVByb3ZpZGVyTGluaztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJpbmZvUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgTG9naW4gRmFpbGVkIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5GYWlsZWRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdGlvblR5cGU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGV2ZW50IHdoZXJlIGEgdXNlciBpcyBiZWluZyBjcmVhdGVkIHdpdGggYW4gXCJpbi11c2VcIiBsb2dpbiBJZCAoZW1haWwgb3IgdXNlcm5hbWUpLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5JZER1cGxpY2F0ZU9uQ3JlYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBkdXBsaWNhdGVFbWFpbD86IHN0cmluZztcbiAgZHVwbGljYXRlVXNlcm5hbWU/OiBzdHJpbmc7XG4gIGV4aXN0aW5nPzogVXNlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGV2ZW50IHdoZXJlIGEgdXNlciBpcyBiZWluZyB1cGRhdGVkIGFuZCB0cmllcyB0byB1c2UgYW4gXCJpbi11c2VcIiBsb2dpbiBJZCAoZW1haWwgb3IgdXNlcm5hbWUpLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5JZER1cGxpY2F0ZU9uVXBkYXRlRXZlbnQgZXh0ZW5kcyBVc2VyTG9naW5JZER1cGxpY2F0ZU9uQ3JlYXRlRXZlbnQge1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBMb2dpbiBldmVudCBmb3IgYSBuZXcgZGV2aWNlICh1bi1yZWNvZ25pemVkKVxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyTG9naW5OZXdEZXZpY2VFdmVudCBleHRlbmRzIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCB7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIFN1Y2Nlc3MgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJMb2dpblN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBhdXRoZW50aWNhdGlvblR5cGU/OiBzdHJpbmc7XG4gIGNvbm5lY3RvcklkPzogVVVJRDtcbiAgaWRlbnRpdHlQcm92aWRlcklkPzogVVVJRDtcbiAgaWRlbnRpdHlQcm92aWRlck5hbWU/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIExvZ2luIGV2ZW50IHRoYXQgaXMgc3VzcGljaW91cy5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlckxvZ2luU3VzcGljaW91c0V2ZW50IGV4dGVuZHMgVXNlckxvZ2luU3VjY2Vzc0V2ZW50IHtcbiAgdGhyZWF0c0RldGVjdGVkPzogQXJyYXk8QXV0aGVudGljYXRpb25UaHJlYXRzPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VybmFtZU1vZGVyYXRpb24gZXh0ZW5kcyBFbmFibGVhYmxlIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFBhc3N3b3JkIEJyZWFjaCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIE1hdHRoZXcgQWx0bWFuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkQnJlYWNoRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgUmVzZXQgU2VuZCBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclBhc3N3b3JkUmVzZXRTZW5kRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgUGFzc3dvcmQgUmVzZXQgU3RhcnQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFJlc2V0U3RhcnRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBSZXNldCBTdWNjZXNzIEV2ZW50LlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUGFzc3dvcmRSZXNldFN1Y2Nlc3NFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBQYXNzd29yZCBVcGRhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJQYXNzd29yZFVwZGF0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFJlYWN0aXZhdGUgRXZlbnQuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlYWN0aXZhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIFVzZXIgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGZvciBhIHNpbmdsZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uIHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIGF1dGhlbnRpY2F0aW9uVG9rZW4/OiBzdHJpbmc7XG4gIGNsZWFuU3BlYWtJZD86IFVVSUQ7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RMb2dpbkluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICBwcmVmZXJyZWRMYW5ndWFnZXM/OiBBcnJheTxzdHJpbmc+O1xuICByb2xlcz86IEFycmF5PHN0cmluZz47XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICB0b2tlbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB1c2VybmFtZT86IHN0cmluZztcbiAgdXNlcm5hbWVTdGF0dXM/OiBDb250ZW50U3RhdHVzO1xuICB2ZXJpZmllZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZWQgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHRoZSB1c2VyLnJlZ2lzdHJhdGlvbi5jcmVhdGUgZXZlbnQgaW4gdGhhdCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgdGhlIHVzZXIgaGFzIGJlZW4gY3JlYXRlZC4gVGhpcyBldmVudCBjYW5ub3QgYmUgbWFkZVxuICogdHJhbnNhY3Rpb25hbC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkNyZWF0ZUNvbXBsZXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIENyZWF0ZSBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25DcmVhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRGVsZXRlZCBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKiA8cD5cbiAqIFRoaXMgaXMgZGlmZmVyZW50IHRoYW4gdXNlci5yZWdpc3RyYXRpb24uZGVsZXRlIGluIHRoYXQgaXQgaXMgc2VudCBhZnRlciB0aGUgVFggaGFzIGJlZW4gY29tbWl0dGVkLiBUaGlzIGV2ZW50IGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uRGVsZXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgRGVsZXRlIFJlZ2lzdHJhdGlvbiBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclJlZ2lzdHJhdGlvbkRlbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBVcGRhdGUgUmVnaXN0cmF0aW9uIEV2ZW50LlxuICogPHA+XG4gKiBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHVzZXIucmVnaXN0cmF0aW9uLnVwZGF0ZSBpbiB0aGF0IGl0IGlzIHNlbnQgYWZ0ZXIgdGhpcyBldmVudCBjb21wbGV0ZXMsIHRoaXMgY2Fubm90IGJlIHRyYW5zYWN0aW9uYWwuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVDb21wbGV0ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgYXBwbGljYXRpb25JZD86IFVVSUQ7XG4gIG9yaWdpbmFsPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgcmVnaXN0cmF0aW9uPzogVXNlclJlZ2lzdHJhdGlvbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFVwZGF0ZSBSZWdpc3RyYXRpb24gRXZlbnQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZWdpc3RyYXRpb25VcGRhdGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBvcmlnaW5hbD86IFVzZXJSZWdpc3RyYXRpb247XG4gIHJlZ2lzdHJhdGlvbj86IFVzZXJSZWdpc3RyYXRpb247XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIE1vZGVscyB0aGUgVXNlciBSZWdpc3RyYXRpb24gVmVyaWZpZWQgRXZlbnQuXG4gKlxuICogQGF1dGhvciBUcmV2b3IgU21pdGhcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVnaXN0cmF0aW9uVmVyaWZpZWRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICByZWdpc3RyYXRpb24/OiBVc2VyUmVnaXN0cmF0aW9uO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBVc2VyIEFQSSByZXF1ZXN0IG9iamVjdC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyUmVxdWVzdCBleHRlbmRzIEJhc2VFdmVudFJlcXVlc3Qge1xuICBhcHBsaWNhdGlvbklkPzogVVVJRDtcbiAgZGlzYWJsZURvbWFpbkJsb2NrPzogYm9vbGVhbjtcbiAgc2VuZFNldFBhc3N3b3JkRW1haWw/OiBib29sZWFuO1xuICBza2lwVmVyaWZpY2F0aW9uPzogYm9vbGVhbjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogVXNlciBBUEkgcmVzcG9uc2Ugb2JqZWN0LlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJSZXNwb25zZSB7XG4gIGVtYWlsVmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblZlcmlmaWNhdGlvbklkcz86IFJlY29yZDxVVUlELCBzdHJpbmc+O1xuICB0b2tlbj86IHN0cmluZztcbiAgdG9rZW5FeHBpcmF0aW9uSW5zdGFudD86IG51bWJlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB0aGUgdXNlciBxdWVyeS4gSXQgcHJvdmlkZXMgYSBidWlsZCBwYXR0ZXJuIGFzIHdlbGwgYXMgcHVibGljIGZpZWxkcyBmb3IgdXNlIG9uIGZvcm1zIGFuZCBpbiBhY3Rpb25zLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJTZWFyY2hDcml0ZXJpYSBleHRlbmRzIEJhc2VFbGFzdGljU2VhcmNoQ3JpdGVyaWEge1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGVudW0gVXNlclN0YXRlIHtcbiAgQXV0aGVudGljYXRlZCA9IFwiQXV0aGVudGljYXRlZFwiLFxuICBBdXRoZW50aWNhdGVkTm90UmVnaXN0ZXJlZCA9IFwiQXV0aGVudGljYXRlZE5vdFJlZ2lzdGVyZWRcIixcbiAgQXV0aGVudGljYXRlZE5vdFZlcmlmaWVkID0gXCJBdXRoZW50aWNhdGVkTm90VmVyaWZpZWRcIixcbiAgQXV0aGVudGljYXRlZFJlZ2lzdHJhdGlvbk5vdFZlcmlmaWVkID0gXCJBdXRoZW50aWNhdGVkUmVnaXN0cmF0aW9uTm90VmVyaWZpZWRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVHdvRmFjdG9yQ29uZmlndXJhdGlvbiB7XG4gIG1ldGhvZHM/OiBBcnJheTxUd29GYWN0b3JNZXRob2Q+O1xuICByZWNvdmVyeUNvZGVzPzogQXJyYXk8c3RyaW5nPjtcbn1cblxuLyoqXG4gKiBNb2RlbCBhIHVzZXIgZXZlbnQgd2hlbiBhIHR3by1mYWN0b3IgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQuXG4gKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJUd29GYWN0b3JNZXRob2RBZGRFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIG1ldGhvZD86IFR3b0ZhY3Rvck1ldGhvZDtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWwgYSB1c2VyIGV2ZW50IHdoZW4gYSB0d28tZmFjdG9yIG1ldGhvZCBoYXMgYmVlbiBhZGRlZC5cbiAqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclR3b0ZhY3Rvck1ldGhvZFJlbW92ZUV2ZW50IGV4dGVuZHMgQmFzZUV2ZW50IHtcbiAgbWV0aG9kPzogVHdvRmFjdG9yTWV0aG9kO1xuICB1c2VyPzogVXNlcjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgdGhlIFVzZXIgVXBkYXRlIEV2ZW50IG9uY2UgaXQgaXMgY29tcGxldGVkLiBUaGlzIGNhbm5vdCBiZSB0cmFuc2FjdGlvbmFsLlxuICpcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVXBkYXRlQ29tcGxldGVFdmVudCBleHRlbmRzIEJhc2VFdmVudCB7XG4gIG9yaWdpbmFsPzogVXNlcjtcbiAgdXNlcj86IFVzZXI7XG59XG5cbi8qKlxuICogTW9kZWxzIHRoZSBVc2VyIFVwZGF0ZSBFdmVudC5cbiAqXG4gKiBAYXV0aG9yIEJyaWFuIFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyVXBkYXRlRXZlbnQgZXh0ZW5kcyBCYXNlRXZlbnQge1xuICBvcmlnaW5hbD86IFVzZXI7XG4gIHVzZXI/OiBVc2VyO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gZXhwcmVzcyB3aGV0aGVyIHRoZSBSZWx5aW5nIFBhcnR5IHJlcXVpcmVzIDxhIGhyZWY9XCJodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jdXNlci12ZXJpZmljYXRpb25cIj51c2VyIHZlcmlmaWNhdGlvbjwvYT4gZm9yIHRoZVxuICogY3VycmVudCBvcGVyYXRpb24uXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGVudW0gVXNlclZlcmlmaWNhdGlvblJlcXVpcmVtZW50IHtcbiAgcmVxdWlyZWQgPSBcInJlcXVpcmVkXCIsXG4gIHByZWZlcnJlZCA9IFwicHJlZmVycmVkXCIsXG4gIGRpc2NvdXJhZ2VkID0gXCJkaXNjb3VyYWdlZFwiXG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVzcG9uc2Uge1xuICBqd3Q/OiBKV1Q7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgZW51bSBWZXJpZmljYXRpb25TdHJhdGVneSB7XG4gIENsaWNrYWJsZUxpbmsgPSBcIkNsaWNrYWJsZUxpbmtcIixcbiAgRm9ybUZpZWxkID0gXCJGb3JtRmllbGRcIlxufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlcXVlc3QgZXh0ZW5kcyBCYXNlRXZlbnRSZXF1ZXN0IHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlFbWFpbFJlc3BvbnNlIHtcbiAgb25lVGltZUNvZGU/OiBzdHJpbmc7XG4gIHZlcmlmaWNhdGlvbklkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEBhdXRob3IgRGFuaWVsIERlR3JvZmZcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlSZWdpc3RyYXRpb25SZXF1ZXN0IGV4dGVuZHMgQmFzZUV2ZW50UmVxdWVzdCB7XG4gIG9uZVRpbWVDb2RlPzogc3RyaW5nO1xuICB2ZXJpZmljYXRpb25JZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBAYXV0aG9yIERhbmllbCBEZUdyb2ZmXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5UmVnaXN0cmF0aW9uUmVzcG9uc2Uge1xuICBvbmVUaW1lQ29kZT86IHN0cmluZztcbiAgdmVyaWZpY2F0aW9uSWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGF1dGhvciBEYW5pZWwgRGVHcm9mZlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZXNwb25zZSB7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQVBJIHJlc3BvbnNlIGZvciBjb21wbGV0aW5nIFdlYkF1dGhuIGFzc2VydGlvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5Bc3NlcnRSZXNwb25zZSB7XG4gIGNyZWRlbnRpYWw/OiBXZWJBdXRobkNyZWRlbnRpYWw7XG59XG5cbi8qKlxuICogVGhlIDxpPmF1dGhlbnRpY2F0b3InczwvaT4gcmVzcG9uc2UgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiBjZXJlbW9ueSBpbiBpdHMgZW5jb2RlZCBmb3JtYXRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQXV0aGVudGljYXRvckF1dGhlbnRpY2F0aW9uUmVzcG9uc2Uge1xuICBhdXRoZW50aWNhdG9yRGF0YT86IHN0cmluZztcbiAgY2xpZW50RGF0YUpTT04/OiBzdHJpbmc7XG4gIHNpZ25hdHVyZT86IHN0cmluZztcbiAgdXNlckhhbmRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgPGk+YXV0aGVudGljYXRvcidzPC9pPiByZXNwb25zZSBmb3IgdGhlIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBpbiBpdHMgZW5jb2RlZCBmb3JtYXRcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQXV0aGVudGljYXRvclJlZ2lzdHJhdGlvblJlc3BvbnNlIHtcbiAgYXR0ZXN0YXRpb25PYmplY3Q/OiBzdHJpbmc7XG4gIGNsaWVudERhdGFKU09OPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgVXNlcidzIFdlYkF1dGhuQ3JlZGVudGlhbC4gQ29udGFpbnMgYWxsIGRhdGEgcmVxdWlyZWQgdG8gY29tcGxldGUgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbmllcy5cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbCB7XG4gIGFsZ29yaXRobT86IENvc2VBbGdvcml0aG1JZGVudGlmaWVyO1xuICBhdHRlc3RhdGlvblR5cGU/OiBBdHRlc3RhdGlvblR5cGU7XG4gIGF1dGhlbnRpY2F0b3JTdXBwb3J0c1VzZXJWZXJpZmljYXRpb24/OiBib29sZWFuO1xuICBjcmVkZW50aWFsSWQ/OiBzdHJpbmc7XG4gIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBkaXNjb3ZlcmFibGU/OiBib29sZWFuO1xuICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgaWQ/OiBVVUlEO1xuICBpbnNlcnRJbnN0YW50PzogbnVtYmVyO1xuICBsYXN0VXNlSW5zdGFudD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgcHVibGljS2V5Pzogc3RyaW5nO1xuICByZWx5aW5nUGFydHlJZD86IHN0cmluZztcbiAgc2lnbkNvdW50PzogbnVtYmVyO1xuICB0ZW5hbnRJZD86IFVVSUQ7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG59XG5cbi8qKlxuICogQVBJIHJlcXVlc3QgdG8gaW1wb3J0IGFuIGV4aXN0aW5nIFdlYkF1dGhuIGNyZWRlbnRpYWwocylcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbEltcG9ydFJlcXVlc3Qge1xuICBjcmVkZW50aWFscz86IEFycmF5PFdlYkF1dGhuQ3JlZGVudGlhbD47XG4gIHZhbGlkYXRlRGJDb25zdHJhaW50cz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2ViQXV0aG4gQ3JlZGVudGlhbCBBUEkgcmVzcG9uc2VcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuQ3JlZGVudGlhbFJlc3BvbnNlIHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuQ3JlZGVudGlhbDtcbiAgY3JlZGVudGlhbHM/OiBBcnJheTxXZWJBdXRobkNyZWRlbnRpYWw+O1xufVxuXG4vKipcbiAqIENvbnRhaW5zIGV4dGVuc2lvbiBvdXRwdXQgZm9yIHJlcXVlc3RlZCBleHRlbnNpb25zIGR1cmluZyBhIFdlYkF1dGhuIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzIHtcbiAgY3JlZFByb3BzPzogQ3JlZGVudGlhbFByb3BlcnRpZXNPdXRwdXQ7XG59XG5cbi8qKlxuICogUmVxdWVzdCB0byBjb21wbGV0ZSB0aGUgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRobkxvZ2luUmVxdWVzdCBleHRlbmRzIEJhc2VMb2dpblJlcXVlc3Qge1xuICBjcmVkZW50aWFsPzogV2ViQXV0aG5QdWJsaWNLZXlBdXRoZW50aWNhdGlvblJlcXVlc3Q7XG4gIG9yaWdpbj86IHN0cmluZztcbiAgcnBJZD86IHN0cmluZztcbiAgdHdvRmFjdG9yVHJ1c3RJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1ZXN0IHRvIGF1dGhlbnRpY2F0ZSB3aXRoIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblB1YmxpY0tleUF1dGhlbnRpY2F0aW9uUmVxdWVzdCB7XG4gIGNsaWVudEV4dGVuc2lvblJlc3VsdHM/OiBXZWJBdXRobkV4dGVuc2lvbnNDbGllbnRPdXRwdXRzO1xuICBpZD86IHN0cmluZztcbiAgcmVzcG9uc2U/OiBXZWJBdXRobkF1dGhlbnRpY2F0b3JBdXRoZW50aWNhdGlvblJlc3BvbnNlO1xuICBycElkPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gcmVnaXN0ZXIgYSBuZXcgcHVibGljIGtleSB3aXRoIFdlYkF1dGhuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblB1YmxpY0tleVJlZ2lzdHJhdGlvblJlcXVlc3Qge1xuICBjbGllbnRFeHRlbnNpb25SZXN1bHRzPzogV2ViQXV0aG5FeHRlbnNpb25zQ2xpZW50T3V0cHV0cztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlc3BvbnNlPzogV2ViQXV0aG5BdXRoZW50aWNhdG9yUmVnaXN0cmF0aW9uUmVzcG9uc2U7XG4gIHJwSWQ/OiBzdHJpbmc7XG4gIHRyYW5zcG9ydHM/OiBBcnJheTxzdHJpbmc+O1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcXVlc3QgdG8gY29tcGxldGUgdGhlIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueSBmb3IgYSBuZXcgY3JlZGVudGlhbCwuXG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyQ29tcGxldGVSZXF1ZXN0IHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuUHVibGljS2V5UmVnaXN0cmF0aW9uUmVxdWVzdDtcbiAgb3JpZ2luPzogc3RyaW5nO1xuICBycElkPzogc3RyaW5nO1xuICB1c2VySWQ/OiBVVUlEO1xufVxuXG4vKipcbiAqIEFQSSByZXNwb25zZSBmb3IgY29tcGxldGluZyBXZWJBdXRobiBjcmVkZW50aWFsIHJlZ2lzdHJhdGlvbiBvciBhc3NlcnRpb25cbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuUmVnaXN0ZXJDb21wbGV0ZVJlc3BvbnNlIHtcbiAgY3JlZGVudGlhbD86IFdlYkF1dGhuQ3JlZGVudGlhbDtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCB0byBzdGFydCBhIFdlYkF1dGhuIHJlZ2lzdHJhdGlvbiBjZXJlbW9ueVxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RlclN0YXJ0UmVxdWVzdCB7XG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHdvcmtmbG93PzogV2ViQXV0aG5Xb3JrZmxvdztcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHN0YXJ0aW5nIGEgV2ViQXV0aG4gcmVnaXN0cmF0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblJlZ2lzdGVyU3RhcnRSZXNwb25zZSB7XG4gIG9wdGlvbnM/OiBQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gcmVxdWVzdCBleHRlbnNpb25zIGR1cmluZyBjcmVkZW50aWFsIHJlZ2lzdHJhdGlvblxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViQXV0aG5SZWdpc3RyYXRpb25FeHRlbnNpb25PcHRpb25zIHtcbiAgY3JlZFByb3BzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBUEkgcmVxdWVzdCB0byBzdGFydCBhIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGNlcmVtb255XG4gKlxuICogQGF1dGhvciBTcGVuY2VyIFdpdHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXZWJBdXRoblN0YXJ0UmVxdWVzdCB7XG4gIGFwcGxpY2F0aW9uSWQ/OiBVVUlEO1xuICBjcmVkZW50aWFsSWQ/OiBVVUlEO1xuICBsb2dpbklkPzogc3RyaW5nO1xuICBzdGF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHVzZXJJZD86IFVVSUQ7XG4gIHdvcmtmbG93PzogV2ViQXV0aG5Xb3JrZmxvdztcbn1cblxuLyoqXG4gKiBBUEkgcmVzcG9uc2UgZm9yIHN0YXJ0aW5nIGEgV2ViQXV0aG4gYXV0aGVudGljYXRpb24gY2VyZW1vbnlcbiAqXG4gKiBAYXV0aG9yIFNwZW5jZXIgV2l0dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYkF1dGhuU3RhcnRSZXNwb25zZSB7XG4gIG9wdGlvbnM/OiBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnM7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyB0aGUgV2ViQXV0aG4gd29ya2Zsb3cuIFRoaXMgd2lsbCBhZmZlY3QgdGhlIHBhcmFtZXRlcnMgdXNlZCBmb3IgY3JlZGVudGlhbCBjcmVhdGlvblxuICogYW5kIHJlcXVlc3QgYmFzZWQgb24gdGhlIFRlbmFudCBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBhdXRob3IgU3BlbmNlciBXaXR0XG4gKi9cbmV4cG9ydCBlbnVtIFdlYkF1dGhuV29ya2Zsb3cge1xuICBib290c3RyYXAgPSBcImJvb3RzdHJhcFwiLFxuICBnZW5lcmFsID0gXCJnZW5lcmFsXCIsXG4gIHJlYXV0aGVudGljYXRpb24gPSBcInJlYXV0aGVudGljYXRpb25cIlxufVxuXG4vKipcbiAqIEEgc2VydmVyIHdoZXJlIGV2ZW50cyBhcmUgc2VudC4gVGhpcyBpbmNsdWRlcyB1c2VyIGFjdGlvbiBldmVudHMgYW5kIGFueSBvdGhlciBldmVudHMgc2VudCBieSBGdXNpb25BdXRoLlxuICpcbiAqIEBhdXRob3IgQnJpYW4gUG9udGFyZWxsaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdlYmhvb2sge1xuICBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudHNFbmFibGVkPzogUmVjb3JkPEV2ZW50VHlwZSwgYm9vbGVhbj47XG4gIGdsb2JhbD86IGJvb2xlYW47XG4gIGhlYWRlcnM/OiBIVFRQSGVhZGVycztcbiAgaHR0cEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIGh0dHBBdXRoZW50aWNhdGlvblVzZXJuYW1lPzogc3RyaW5nO1xuICBpZD86IFVVSUQ7XG4gIGluc2VydEluc3RhbnQ/OiBudW1iZXI7XG4gIGxhc3RVcGRhdGVJbnN0YW50PzogbnVtYmVyO1xuICByZWFkVGltZW91dD86IG51bWJlcjtcbiAgc3NsQ2VydGlmaWNhdGU/OiBzdHJpbmc7XG4gIHRlbmFudElkcz86IEFycmF5PFVVSUQ+O1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2ViaG9vayBBUEkgcmVxdWVzdCBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1JlcXVlc3Qge1xuICB3ZWJob29rPzogV2ViaG9vaztcbn1cblxuLyoqXG4gKiBXZWJob29rIEFQSSByZXNwb25zZSBvYmplY3QuXG4gKlxuICogQGF1dGhvciBCcmlhbiBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2ViaG9va1Jlc3BvbnNlIHtcbiAgd2ViaG9vaz86IFdlYmhvb2s7XG4gIHdlYmhvb2tzPzogQXJyYXk8V2ViaG9vaz47XG59XG5cbi8qKlxuICogQGF1dGhvciBCcmV0dCBQb250YXJlbGxpXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWGJveEFwcGxpY2F0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyQXBwbGljYXRpb25Db25maWd1cmF0aW9uIHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBYYm94IGdhbWluZyBsb2dpbiBwcm92aWRlci5cbiAqXG4gKiBAYXV0aG9yIEJyZXR0IFBvbnRhcmVsbGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBYYm94SWRlbnRpdHlQcm92aWRlciBleHRlbmRzIEJhc2VJZGVudGl0eVByb3ZpZGVyPFhib3hBcHBsaWNhdGlvbkNvbmZpZ3VyYXRpb24+IHtcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcbiAgY2xpZW50X2lkPzogc3RyaW5nO1xuICBjbGllbnRfc2VjcmV0Pzogc3RyaW5nO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gWE1MU2lnbmF0dXJlTG9jYXRpb24ge1xuICBBc3NlcnRpb24gPSBcIkFzc2VydGlvblwiLFxuICBSZXNwb25zZSA9IFwiUmVzcG9uc2VcIlxufVxuXG4iXX0=