@cloudbase/oauth 2.6.5-beta.0 → 2.7.3-beta.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.
- package/dist/cjs/oauth2client/oauth2client.js +4 -2
- package/dist/cjs/utils/encrypt.js +3 -2
- package/dist/cjs/utils/encryptlong/index.js +2 -2
- package/dist/esm/oauth2client/oauth2client.js +3 -1
- package/dist/esm/utils/encrypt.js +2 -1
- package/dist/esm/utils/encryptlong/index.js +1 -0
- package/dist/miniprogram/index.js +1 -1
- package/package.json +2 -2
- package/src/oauth2client/oauth2client.ts +3 -1
- package/src/utils/encrypt.ts +2 -2
- package/src/utils/encryptlong/index.js +1 -0
|
@@ -215,7 +215,9 @@ var LocalCredentials = (function () {
|
|
|
215
215
|
switch (_a.label) {
|
|
216
216
|
case 0:
|
|
217
217
|
if (!(credentials === null || credentials === void 0 ? void 0 : credentials.expires_in)) return [3, 3];
|
|
218
|
-
credentials
|
|
218
|
+
if (!(credentials === null || credentials === void 0 ? void 0 : credentials.expires_at)) {
|
|
219
|
+
credentials.expires_at = new Date(Date.now() + (credentials.expires_in - 30) * 1000);
|
|
220
|
+
}
|
|
219
221
|
if (!this.storage) return [3, 2];
|
|
220
222
|
tokenStr = JSON.stringify(credentials);
|
|
221
223
|
return [4, this.storage.setItem(this.tokenSectionName, tokenStr)];
|
|
@@ -755,4 +757,4 @@ var OAuth2Client = exports.OAuth2Client = (function () {
|
|
|
755
757
|
OAuth2Client.retryInterval = 1000;
|
|
756
758
|
return OAuth2Client;
|
|
757
759
|
}());
|
|
758
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBb0M7QUFDcEMseUNBQW1EO0FBYW5ELHNDQUFzQztBQUN0Qyx3Q0FBNEM7QUFFNUMsbUVBQWdFO0FBQ2hFLDBDQUF3QztBQUN4Qyw0RUFBMEQ7QUFFMUQsSUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUE7QUFDMUMsSUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUE7QUFDeEMsSUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUE7QUFXaEMsSUFBTSxjQUFjLEdBQW9CLFVBQW1CLEdBQVcsRUFBRSxPQUF3Qjs7Ozs7O29CQUNqRyxNQUFNLEdBQWEsSUFBSSxDQUFBO29CQUN2QixhQUFhLEdBQXlCLElBQUksQ0FBQTs7OztvQkFHdEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO29CQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTt3QkFDdkIsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7cUJBQzNCO29CQUNELElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO3dCQUM1RCxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO3FCQUNwRDtvQkFDZ0MsV0FBTSxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFBOztvQkFBeEQsY0FBYyxHQUFhLFNBQTZCO29CQUN6QyxXQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBQTs7b0JBQTFDLFlBQVksR0FBRyxTQUEyQjtv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Q0FBSTtJQUNoQixxQkFBUSxHQUFHLENBQUMsQUFBSixDQUFJO0lBQ1oscUJBQVEsR0FBRyxDQUFDLEFBQUosQ0FBSTtJQUNaLDBCQUFhLEdBQUcsSUFBSSxBQUFQLENBQU87SUF3WXJDLG1CQUFDO0NBQUEsQUE1WUQsSUE0WUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFcnJvclR5cGUgfSBmcm9tICcuL2NvbnN0cydcbmltcG9ydCB7IEFwaVVybHMsIEFwaVVybHNWMiB9IGZyb20gJy4uL2F1dGgvY29uc3RzJ1xuXG5pbXBvcnQgeyBBdXRoQ2xpZW50LCBTaW1wbGVTdG9yYWdlIH0gZnJvbSAnLi9pbnRlcmZhY2UnXG5cbmltcG9ydCB7XG4gIENyZWRlbnRpYWxzLFxuICBSZXNwb25zZUVycm9yLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgUmVxdWVzdEZ1bmN0aW9uLFxuICBPQXV0aDJDbGllbnRPcHRpb25zLFxuICBBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnMsXG59IGZyb20gJy4vbW9kZWxzJ1xuXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tICcuLi91dGlscy91dWlkJ1xuaW1wb3J0IHsgZ2V0UGF0aE5hbWUgfSBmcm9tICcuLi91dGlscy9pbmRleCdcblxuaW1wb3J0IHsgU2luZ2xlUHJvbWlzZSB9IGZyb20gJy4uL3V0aWxzL2Z1bmN0aW9uL3NpbmdsZS1wcm9taXNlJ1xuaW1wb3J0IHsgd2VCdG9hIH0gZnJvbSAnLi4vdXRpbHMvYmFzZTY0J1xuaW1wb3J0IHsgaXNNYXRjaCB9IGZyb20gJy4uL3V0aWxzL2Nsb3VkYmFzZS1hZGFwdGVyLXd4X21wJ1xuXG5jb25zdCBSZXF1ZXN0SWRIZWFkZXJOYW1lID0gJ3gtcmVxdWVzdC1pZCdcbmNvbnN0IERldmljZUlkSGVhZGVyTmFtZSA9ICd4LWRldmljZS1pZCdcbmNvbnN0IERldmljZUlkU2VjdGlvbk5hbWUgPSAnZGV2aWNlX2lkJ1xuXG5kZWNsYXJlIGNvbnN0IHd4OiBhbnlcblxuZXhwb3J0IGludGVyZmFjZSBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zIHtcbiAgZXJyb3I/OiBFcnJvclR5cGVcbiAgZXJyb3JfZGVzY3JpcHRpb24/OiBzdHJpbmcgfCBudWxsXG4gIGVycm9yX3VyaT86IHN0cmluZyB8IG51bGxcbiAgZGV0YWlscz86IGFueSB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZXF1ZXN0OiBSZXF1ZXN0RnVuY3Rpb24gPSBhc3luYyBmdW5jdGlvbiA8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICBsZXQgcmVzdWx0OiBUIHwgbnVsbCA9IG51bGxcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICB0cnkge1xuICAgIC8vIE9iamVjdHMgbXVzdCBiZSBjb3BpZWQgdG8gcHJldmVudCBtb2RpZmljYXRpb24gb2YgZGF0YSBzdWNoIGFzIGJvZHkuXG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKVxuICAgIGlmICghY29weU9wdGlvbnMubWV0aG9kKSB7XG4gICAgICBjb3B5T3B0aW9ucy5tZXRob2QgPSAnR0VUJ1xuICAgIH1cbiAgICBpZiAoY29weU9wdGlvbnMuYm9keSAmJiB0eXBlb2YgY29weU9wdGlvbnMuYm9keSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvcHlPcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeShjb3B5T3B0aW9ucy5ib2R5KVxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZVJlc3VsdDogUmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIGNvcHlPcHRpb25zKVxuICAgIGNvbnN0IGpzb25SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlUmVzdWx0Lmpzb24oKVxuICAgIGlmIChqc29uUmVzcG9uc2U/LmVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ganNvblJlc3BvbnNlIGFzIFJlc3BvbnNlRXJyb3JcbiAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGpzb25SZXNwb25zZSBhcyBUXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UsXG4gICAgICBlcnJvcl91cmk6IG5ldyBVUkwodXJsKS5wYXRobmFtZSxcbiAgICB9XG4gIH1cbiAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB0b1Jlc3BvbnNlRXJyb3IgPSAoZXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBFcnJvciwgb3B0aW9ucz86IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMpOiBSZXNwb25zZUVycm9yID0+IHtcbiAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3JcbiAgY29uc3QgZm9ybWF0T3B0aW9uczogVG9SZXNwb25zZUVycm9yT3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IGZvcm1hdE9wdGlvbnMuZXJyb3IgfHwgRXJyb3JUeXBlLkxPQ0FMLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGZvcm1hdE9wdGlvbnMuZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IubWVzc2FnZSxcbiAgICAgIGVycm9yX3VyaTogZm9ybWF0T3B0aW9ucy5lcnJvcl91cmksXG4gICAgICBkZXRhaWxzOiBmb3JtYXRPcHRpb25zLmRldGFpbHMgfHwgZXJyb3Iuc3RhY2ssXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGZvcm1hdEVycm9yOiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zID0gZXJyb3IgfHwge31cbiAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IGZvcm1hdE9wdGlvbnMuZXJyb3IgfHwgZm9ybWF0RXJyb3IuZXJyb3IgfHwgRXJyb3JUeXBlLkxPQ0FMLFxuICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGZvcm1hdE9wdGlvbnMuZXJyb3JfZGVzY3JpcHRpb24gfHwgZm9ybWF0RXJyb3IuZXJyb3JfZGVzY3JpcHRpb24sXG4gICAgICBlcnJvcl91cmk6IGZvcm1hdE9wdGlvbnMuZXJyb3JfdXJpIHx8IGZvcm1hdEVycm9yLmVycm9yX3VyaSxcbiAgICAgIGRldGFpbHM6IGZvcm1hdE9wdGlvbnMuZGV0YWlscyB8fCBmb3JtYXRFcnJvci5kZXRhaWxzLFxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzcG9uc2VFcnJvclxufVxuXG4vKipcbiAqIEdlbmVyYXRlIHJlcXVlc3QgaWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJlcXVlc3RJZCgpOiBzdHJpbmcge1xuICByZXR1cm4gdXVpZHY0KClcbn1cblxuLyoqXG4gKiBEZWZhdWx0IFN0b3JhZ2UuXG4gKi9cbmNsYXNzIERlZmF1bHRTdG9yYWdlIGltcGxlbWVudHMgU2ltcGxlU3RvcmFnZSB7XG4gIC8qKlxuICAgKiDnvJPlrZhrZXnnu5/kuIDkvb/nlKjlkI7nvIDljLrliIZcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vudjogc3RyaW5nXG5cbiAgY29uc3RydWN0b3Iob3B0cz86IHsgZW52OiBzdHJpbmcgfSkge1xuICAgIHRoaXMuX2VudiA9IG9wdHM/LmVudiB8fCAnJ1xuICB9XG4gIC8qKlxuICAgKiBHZXQgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgYXN5bmMgZ2V0SXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIGFzeW5jIHJlbW92ZUl0ZW0oa2V5OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogU2V0IGl0ZW0uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqL1xuICBhc3luYyBzZXRJdGVtKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gLCB2YWx1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBnZXRJdGVtU3luYyhrZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGl0ZW0gc3luYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgcmVtb3ZlSXRlbVN5bmMoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWApXG4gIH1cblxuICAvKipcbiAgICogU2V0IGl0ZW0gc3luYy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICovXG4gIHNldEl0ZW1TeW5jKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke2tleX0ke3RoaXMuX2Vudn1gLCB2YWx1ZSlcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFN0b3JhZ2UgPSBuZXcgRGVmYXVsdFN0b3JhZ2UoKVxuXG5pbnRlcmZhY2UgTG9jYWxDcmVkZW50aWFsc09wdGlvbnMge1xuICB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcbiAgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxufVxuXG4vKipcbiAqIENoZWNrIGlmIGNyZWRlbnRpYWxzIGlzIGV4cGlyZWQuXG4gKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDcmVkZW50aWFsc0V4cGlyZWQoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogYm9vbGVhbiB7XG4gIGxldCBpc0V4cGlyZWQgPSB0cnVlXG4gIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCAmJiBjcmVkZW50aWFscz8uYWNjZXNzX3Rva2VuKSB7XG4gICAgaXNFeHBpcmVkID0gY3JlZGVudGlhbHMuZXhwaXJlc19hdCA8IG5ldyBEYXRlKClcbiAgfVxuICByZXR1cm4gaXNFeHBpcmVkXG59XG5cbi8qKlxuICogTG9jYWwgY3JlZGVudGlhbHMuXG4gKiBMb2NhbCBjcmVkZW50aWFscywgd2l0aCBtZW1vcnkgY2FjaGUgYW5kIHN0b3JhZ2UgY2FjaGUuXG4gKiBJZiB0aGUgbWVtb3J5IGNhY2hlIGV4cGlyZXMsIHRoZSBzdG9yYWdlIGNhY2hlIGlzIGF1dG9tYXRpY2FsbHkgbG9hZGVkLlxuICovXG5jbGFzcyBMb2NhbENyZWRlbnRpYWxzIHtcbiAgcHJpdmF0ZSB0b2tlblNlY3Rpb25OYW1lOiBzdHJpbmdcblxuICBwcml2YXRlIHN0b3JhZ2U6IFNpbXBsZVN0b3JhZ2VcblxuICBwcml2YXRlIGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IG51bGwgPSBudWxsXG5cbiAgcHJpdmF0ZSBzaW5nbGVQcm9taXNlOiBTaW5nbGVQcm9taXNlID0gbmV3IFNpbmdsZVByb21pc2UoKVxuXG4gIC8qKlxuICAgKiBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0xvY2FsQ3JlZGVudGlhbHNPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBMb2NhbENyZWRlbnRpYWxzT3B0aW9ucykge1xuICAgIHRoaXMudG9rZW5TZWN0aW9uTmFtZSA9IG9wdGlvbnMudG9rZW5TZWN0aW9uTmFtZVxuICAgIHRoaXMuc3RvcmFnZSA9IG9wdGlvbnMuc3RvcmFnZVxuICB9XG5cbiAgcHVibGljIGdldFN0b3JhZ2VDcmVkZW50aWFsc1N5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbVN5bmModGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgIGlmICh0b2tlblN0ciAhPT0gdW5kZWZpbmVkICYmIHRva2VuU3RyICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjcmVkZW50aWFscyA9IEpTT04ucGFyc2UodG9rZW5TdHIpXG4gICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgIGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQgPSBuZXcgRGF0ZShjcmVkZW50aWFscy5leHBpcmVzX2F0KVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgICAgIGNyZWRlbnRpYWxzID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRDcmVkZW50aWFscyBQcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBmZXRjaCBhcGkgcmVxdWVzdCBpbXBsZW1lbnRhdGlvbiB3aXRoIGF1dGggY3JlZGVudGlhbHNcbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2luKSB7XG4gICAgICBjcmVkZW50aWFscy5leHBpcmVzX2F0ID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIChjcmVkZW50aWFscy5leHBpcmVzX2luIC0gMzApICogMTAwMClcbiAgICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUsIHRva2VuU3RyKVxuICAgICAgfVxuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGNyZWRlbnRpYWxzXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lKVxuICAgICAgfVxuICAgICAgdGhpcy5jcmVkZW50aWFscyA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNyZWRlbnRpYWxzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignZ2V0Q3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoaXNDcmVkZW50aWFsc0V4cGlyZWQodGhpcy5jcmVkZW50aWFscykpIHtcbiAgICAgICAgdGhpcy5jcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0U3RvcmFnZUNyZWRlbnRpYWxzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RvcmFnZSBjcmVkZW50aWFscy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0U3RvcmFnZUNyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ19nZXRTdG9yYWdlQ3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gbnVsbFxuICAgICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIGlmICh0b2tlblN0ciAhPT0gdW5kZWZpbmVkICYmIHRva2VuU3RyICE9PSBudWxsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBKU09OLnBhcnNlKHRva2VuU3RyKVxuICAgICAgICAgIGlmIChjcmVkZW50aWFscz8uZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgICBjcmVkZW50aWFscyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIE9BdXRoMkNsaWVudFxuICovXG5leHBvcnQgY2xhc3MgT0F1dGgyQ2xpZW50IGltcGxlbWVudHMgQXV0aENsaWVudCB7XG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRSZXRyeSA9IDJcbiAgcHJpdmF0ZSBzdGF0aWMgbWluUmV0cnkgPSAwXG4gIHByaXZhdGUgc3RhdGljIG1heFJldHJ5ID0gNVxuICBwcml2YXRlIHN0YXRpYyByZXRyeUludGVydmFsID0gMTAwMFxuXG4gIHByaXZhdGUgYXBpT3JpZ2luOiBzdHJpbmdcbiAgcHJpdmF0ZSBjbGllbnRJZDogc3RyaW5nXG4gIHByaXZhdGUgcmV0cnk6IG51bWJlclxuICBwcml2YXRlIGNsaWVudFNlY3JldD86IHN0cmluZ1xuICBwcml2YXRlIGJhc2VSZXF1ZXN0OiA8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxUPlxuICBwcml2YXRlIGxvY2FsQ3JlZGVudGlhbHM6IExvY2FsQ3JlZGVudGlhbHNcbiAgcHJpdmF0ZSBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG4gIHByaXZhdGUgZGV2aWNlSUQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSB0b2tlbkluVVJMPzogYm9vbGVhblxuICBwcml2YXRlIHJlZnJlc2hUb2tlbkZ1bmM6IChyZWZyZXNoVG9rZW4/OiBzdHJpbmcsIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHM+XG4gIHByaXZhdGUgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgcHJpdmF0ZSBzaW5nbGVQcm9taXNlOiBTaW5nbGVQcm9taXNlID0gbmV3IFNpbmdsZVByb21pc2UoKVxuICBwcml2YXRlIGFub255bW91c1NpZ25JbkZ1bmM6IChDcmVkZW50aWFscykgPT4gUHJvbWlzZTxDcmVkZW50aWFscyB8IHZvaWQ+XG4gIHByaXZhdGUgd3hDbG91ZDogYW55XG4gIHByaXZhdGUgYmFzaWNBdXRoOiBzdHJpbmdcblxuICAvKipcbiAgICogY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtPQXV0aDJDbGllbnRPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPQXV0aDJDbGllbnRPcHRpb25zKSB7XG4gICAgdGhpcy5hcGlPcmlnaW4gPSBvcHRpb25zLmFwaU9yaWdpblxuICAgIHRoaXMuY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkXG4gICAgdGhpcy5yZXRyeSA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgT0F1dGgyQ2xpZW50LmRlZmF1bHRSZXRyeSlcbiAgICBpZiAob3B0aW9ucy5iYXNlUmVxdWVzdCkge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IG9wdGlvbnMuYmFzZVJlcXVlc3RcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYXNlUmVxdWVzdCA9IGRlZmF1bHRSZXF1ZXN0XG4gICAgfVxuICAgIHRoaXMudG9rZW5JblVSTCA9IG9wdGlvbnMudG9rZW5JblVSTFxuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVyc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnN0b3JhZ2UgPSBvcHRpb25zLnN0b3JhZ2UgfHwgZGVmYXVsdFN0b3JhZ2VcbiAgICB0aGlzLmxvY2FsQ3JlZGVudGlhbHMgPSBuZXcgTG9jYWxDcmVkZW50aWFscyh7XG4gICAgICB0b2tlblNlY3Rpb25OYW1lOiBgY3JlZGVudGlhbHNfJHtvcHRpb25zLmNsaWVudElkfWAsXG4gICAgICBzdG9yYWdlOiB0aGlzLnN0b3JhZ2UsXG4gICAgfSlcbiAgICB0aGlzLmNsaWVudFNlY3JldCA9IG9wdGlvbnMuY2xpZW50U2VjcmV0XG4gICAgaWYgKG9wdGlvbnMuY2xpZW50SWQgIT09ICcnKSB7XG4gICAgICB0aGlzLmJhc2ljQXV0aCA9IGBCYXNpYyAke3dlQnRvYShgJHtvcHRpb25zLmNsaWVudElkfToke29wdGlvbnMuY2xpZW50U2VjcmV0fWApfWBcbiAgICB9XG4gICAgdGhpcy53eENsb3VkID0gb3B0aW9ucy53eENsb3VkXG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc01hdGNoKCkgJiYgdGhpcy53eENsb3VkID09PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5lbnYpIHtcbiAgICAgICAgd3guY2xvdWQuaW5pdCh7IGVudjogb3B0aW9ucy5lbnYgfSlcbiAgICAgICAgdGhpcy53eENsb3VkID0gd3guY2xvdWRcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy9cbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoVG9rZW5GdW5jID0gb3B0aW9ucy5yZWZyZXNoVG9rZW5GdW5jIHx8IHRoaXMuZGVmYXVsdFJlZnJlc2hUb2tlbkZ1bmNcbiAgICB0aGlzLmFub255bW91c1NpZ25JbkZ1bmMgPSBvcHRpb25zLmFub255bW91c1NpZ25JbkZ1bmNcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXRDcmVkZW50aWFscyBQcm92aWRlcyBhbiBhbHRlcm5hdGl2ZSBmZXRjaCBhcGkgcmVxdWVzdCBpbXBsZW1lbnRhdGlvbiB3aXRoIGF1dGggY3JlZGVudGlhbHNcbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHB1YmxpYyBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRBY2Nlc3NUb2tlbiByZXR1cm4gYSB2YWxpZGF0ZSBhY2Nlc3MgdG9rZW5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRBY2Nlc3NUb2tlbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmIChjcmVkZW50aWFscz8uYWNjZXNzX3Rva2VuKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNyZWRlbnRpYWxzLmFjY2Vzc190b2tlbilcbiAgICB9XG4gICAgY29uc3QgcmVzcEVycjogUmVzcG9uc2VFcnJvciA9IHsgZXJyb3I6IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQgfVxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwRXJyKVxuICB9XG5cbiAgLyoqXG4gICAqIHJlcXVlc3QgaHR0cCBsaWtlIHNpbXBsZSBmZXRjaCBhcGksIGV4cDpyZXF1ZXN0KCcvdjEvdXNlci9tZScsIHt3aXRoQ3JlZGVudGlhbHM6dHJ1ZX0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtBdXRoQ2xpZW50UmVxdWVzdE9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogQXV0aENsaWVudFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG4gICAgY29uc3QgcmV0cnk6IG51bWJlciA9IHRoaXMuZm9ybWF0UmV0cnkob3B0aW9ucy5yZXRyeSwgdGhpcy5yZXRyeSlcbiAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICBpZiAodGhpcy5oZWFkZXJzKSB7XG4gICAgICBvcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tSZXF1ZXN0SWRIZWFkZXJOYW1lXSkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzW1JlcXVlc3RJZEhlYWRlck5hbWVdID0gZ2VuZXJhdGVSZXF1ZXN0SWQoKVxuICAgIH1cbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVyc1tEZXZpY2VJZEhlYWRlck5hbWVdKSB7XG4gICAgICBjb25zdCBkZXZpY2VJZCA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlSWQoKVxuICAgICAgb3B0aW9ucy5oZWFkZXJzW0RldmljZUlkSGVhZGVyTmFtZV0gPSBkZXZpY2VJZFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aEJhc2ljQXV0aCAmJiB0aGlzLmJhc2ljQXV0aCkge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSB0aGlzLmJhc2ljQXV0aFxuICAgIH1cbiAgICBpZiAob3B0aW9ucz8ud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIGlmICh0aGlzLnRva2VuSW5VUkwpIHtcbiAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgIHVybCArPSAnPydcbiAgICAgICAgICB9XG4gICAgICAgICAgdXJsICs9IGBhY2Nlc3NfdG9rZW49JHtjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW59YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gYCR7Y3JlZGVudGlhbHMudG9rZW5fdHlwZX0gJHtjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW59YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmNsaWVudElkICYmIHVybC5pbmRleE9mKCdjbGllbnRfaWQnKSA8IDApIHtcbiAgICAgICAgdXJsICs9IHVybC5pbmRleE9mKCc/JykgPCAwID8gJz8nIDogJyYnXG4gICAgICAgIHVybCArPSBgY2xpZW50X2lkPSR7dGhpcy5jbGllbnRJZH1gXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICB1cmwgPSB0aGlzLmFwaU9yaWdpbiArIHVybFxuICAgIH1cbiAgICBsZXQgcmVzcG9uc2U6IFQgfCBudWxsID0gbnVsbFxuICAgIGNvbnN0IG1heFJlcXVlc3RUaW1lczogbnVtYmVyID0gcmV0cnkgKyAxXG4gICAgZm9yIChsZXQgcmVxdWVzdFRpbWUgPSAwOyByZXF1ZXN0VGltZSA8IG1heFJlcXVlc3RUaW1lczsgcmVxdWVzdFRpbWUrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlV3hDbG91ZCkge1xuICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy53eENsb3VkQ2FsbEZ1bmN0aW9uPFQ+KHVybCwgb3B0aW9ucylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMuYmFzZVJlcXVlc3Q8VD4odXJsLCBvcHRpb25zKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICB9IGNhdGNoIChyZXNwb25zZUVycm9yKSB7XG4gICAgICAgIGlmIChvcHRpb25zLndpdGhDcmVkZW50aWFscyAmJiByZXNwb25zZUVycm9yICYmIHJlc3BvbnNlRXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlRXJyb3IpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxdWVzdFRpbWUgPT09IHJldHJ5IHx8ICFyZXNwb25zZUVycm9yIHx8IHJlc3BvbnNlRXJyb3IuZXJyb3IgIT09ICd1bnJlYWNoYWJsZScpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2VFcnJvcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5zbGVlcChPQXV0aDJDbGllbnQucmV0cnlJbnRlcnZhbClcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgd3hDbG91ZENhbGxGdW5jdGlvbjxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gICAgbGV0IHJlc3VsdDogVCB8IG51bGwgPSBudWxsXG4gICAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHJlc3VsdDogcmVzcG9uc2VSZXN1bHQgfSA9IGF3YWl0IHRoaXMud3hDbG91ZC5jYWxsRnVuY3Rpb24oe1xuICAgICAgICBuYW1lOiAnaHR0cE92ZXJDYWxsRnVuY3Rpb24nLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgb3JpZ2luOiAnaHR0cHM6Ly9zZXJ2aWNld2VjaGF0LmNvbScsXG4gICAgICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib2R5OiBvcHRpb25zLmJvZHksXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzcG9uc2VSZXN1bHQ/LmJvZHk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgcmVzcG9uc2VFcnJvciA9IHJlc3BvbnNlUmVzdWx0Py5ib2R5IGFzIFJlc3BvbnNlRXJyb3JcbiAgICAgICAgcmVzcG9uc2VFcnJvci5lcnJvcl91cmkgPSBnZXRQYXRoTmFtZSh1cmwpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSByZXNwb25zZVJlc3VsdD8uYm9keSBhcyBUXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5SRUFDSEFCTEUsXG4gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICBlcnJvcl91cmk6IGdldFBhdGhOYW1lKHVybCksXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgIHRocm93IHJlc3BvbnNlRXJyb3JcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+IHtcbiAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcignY3JlZGVudGlhbHMgbm90IGZvdW5kJylcbiAgICB9XG4gICAgaWYgKGlzQ3JlZGVudGlhbHNFeHBpcmVkKGNyZWRlbnRpYWxzKSkge1xuICAgICAgaWYgKGNyZWRlbnRpYWxzICYmIGNyZWRlbnRpYWxzLnNjb3BlID09PSAnYW5vbnltb3VzJykge1xuICAgICAgICBpZiAodGhpcy5hbm9ueW1vdXNTaWduSW5GdW5jKSB7XG4gICAgICAgICAgY29uc3QgYyA9IGF3YWl0IHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYyhjcmVkZW50aWFscylcbiAgICAgICAgICBjcmVkZW50aWFscyA9IGMgfHwgKGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5hbm9ueW1vdXNTaWduSW4oY3JlZGVudGlhbHMpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW4oY3JlZGVudGlhbHMpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIOW6n+W8g+aOpeWPo++8jOWLv+eUqC4g5aaC6ZyA6I635Y+W5Yet6K+B5L+h5oGv6K+35L2/55SoIGdldENyZWRlbnRpYWxzIOaWueazlVxuICAgKi9cbiAgcHVibGljIGdldENyZWRlbnRpYWxzU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRTdG9yYWdlQ3JlZGVudGlhbHNTeW5jKClcbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFsc0FzeW5jKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3JlZGVudGlhbHMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFNjb3BlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcignY3JlZGVudGlhbHMgbm90IGZvdW5kJylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzLnNjb3BlXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R3JvdXBzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKVxuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdjcmVkZW50aWFscyBub3QgZm91bmQnKVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHMuZ3JvdXBzXG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaCBleHBpcmVkIHRva2VuLlxuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoVG9rZW4oY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdfcmVmcmVzaFRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCAhY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbikge1xuICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcignbm8gcmVmcmVzaCB0b2tlbiBmb3VuZCBpbiBjcmVkZW50aWFscycpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlZnJlc2hUb2tlbkZ1bmMoY3JlZGVudGlhbHMucmVmcmVzaF90b2tlbiwgY3JlZGVudGlhbHMpXG4gICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhuZXdDcmVkZW50aWFscylcbiAgICAgICAgcmV0dXJuIG5ld0NyZWRlbnRpYWxzXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5JTlZBTElEX0dSQU5UKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoZXJyb3IuZXJyb3JfZGVzY3JpcHRpb24pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgcmV0cnkgdmFsdWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSByZXRyeVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBwcml2YXRlIGNoZWNrUmV0cnkocmV0cnk6IG51bWJlcik6IG51bWJlciB7XG4gICAgbGV0IHJlc3BvbnNlRXJyb3I6IFJlc3BvbnNlRXJyb3IgfCBudWxsID0gbnVsbFxuICAgIGlmICh0eXBlb2YgcmV0cnkgIT09ICdudW1iZXInIHx8IHJldHJ5IDwgT0F1dGgyQ2xpZW50Lm1pblJldHJ5IHx8IHJldHJ5ID4gT0F1dGgyQ2xpZW50Lm1heFJldHJ5KSB7XG4gICAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogJ3dyb25nIG9wdGlvbnMgcGFyYW06IHJldHJ5JyxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlRXJyb3IpIHtcbiAgICAgIHRocm93IHJlc3BvbnNlRXJyb3JcbiAgICB9XG4gICAgcmV0dXJuIHJldHJ5XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHJldHJ5IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmV0cnlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlZmF1bHRWYWxlXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIHByaXZhdGUgZm9ybWF0UmV0cnkocmV0cnk6IG51bWJlciwgZGVmYXVsdFZhbGU6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiByZXRyeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jaGVja1JldHJ5KHJldHJ5KVxuICB9XG5cbiAgLyoqXG4gICAqIFNsZWVwLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbXNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSwgbXMpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBhbm9ueW1vdXMgc2lnbkluXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhbm9ueW1vdXNTaWduSW4oY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdfYW5vbnltb3VzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5zY29wZSAhPT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ25vIGFub255bW91cyBpbiBjcmVkZW50aWFscycpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlcXVlc3QoQXBpVXJscy5BVVRIX1NJR05fSU5fQU5PTllNT1VTTFlfVVJMLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgd2l0aEJhc2ljQXV0aDogdHJ1ZSxcbiAgICAgICAgICBib2R5OiB7fSxcbiAgICAgICAgfSlcbiAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKVxuICAgICAgICByZXR1cm4gbmV3Q3JlZGVudGlhbHNcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5lcnJvciA9PT0gRXJyb3JUeXBlLklOVkFMSURfR1JBTlQpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobnVsbClcbiAgICAgICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcihlcnJvci5lcnJvcl9kZXNjcmlwdGlvbilcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJlZnJlc2ggdG9rZW4gZnVuY3Rpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWZyZXNoVG9rZW5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGRlZmF1bHRSZWZyZXNoVG9rZW5GdW5jKHJlZnJlc2hUb2tlbj86IHN0cmluZywgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICBpZiAocmVmcmVzaFRva2VuID09PSB1bmRlZmluZWQgfHwgcmVmcmVzaFRva2VuID09PSAnJykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ3JlZnJlc2ggdG9rZW4gbm90IGZvdW5kJylcbiAgICB9XG5cbiAgICBsZXQgdXJsOiBzdHJpbmcgPSBBcGlVcmxzLkFVVEhfVE9LRU5fVVJMXG5cbiAgICBpZiAoY3JlZGVudGlhbHM/LnZlcnNpb24gPT09ICd2MicpIHtcbiAgICAgIHVybCA9IEFwaVVybHNWMi5BVVRIX1RPS0VOX1VSTFxuICAgIH1cblxuICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keToge1xuICAgICAgICBjbGllbnRfaWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY2xpZW50U2VjcmV0LFxuICAgICAgICBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgIHJlZnJlc2hfdG9rZW46IHJlZnJlc2hUb2tlbixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHJldHVybiB7IC4uLm5ld0NyZWRlbnRpYWxzLCB2ZXJzaW9uOiBjcmVkZW50aWFscz8udmVyc2lvbiB8fCAndjEnIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGV2aWNlSWRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGV2aWNlSWQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAodGhpcy5kZXZpY2VJRCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGV2aWNlSURcbiAgICB9XG4gICAgbGV0IGRldmljZUlkOiBzdHJpbmcgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShEZXZpY2VJZFNlY3Rpb25OYW1lKVxuICAgIGlmICghKHR5cGVvZiBkZXZpY2VJZCA9PT0gJ3N0cmluZycgJiYgZGV2aWNlSWQubGVuZ3RoID49IDE2ICYmIGRldmljZUlkLmxlbmd0aCA8PSA0OCkpIHtcbiAgICAgIGRldmljZUlkID0gdXVpZHY0KClcbiAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXRJdGVtKERldmljZUlkU2VjdGlvbk5hbWUsIGRldmljZUlkKVxuICAgIH1cbiAgICB0aGlzLmRldmljZUlEID0gZGV2aWNlSWRcbiAgICByZXR1cm4gZGV2aWNlSWRcbiAgfVxuICAvKipcbiAgICogR2VuZXJhdGUgdW5BdXRoZW50aWNhdGVkIGVycm9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXJyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8VD59XG4gICAqL1xuICBwcml2YXRlIHVuQXV0aGVudGljYXRlZEVycm9yPFQ+KGVycj86IHN0cmluZyk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHJlc3BFcnI6IFJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogRXJyb3JUeXBlLlVOQVVUSEVOVElDQVRFRCxcbiAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnIsXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwRXJyKVxuICB9XG59XG4iXX0=
|
|
760
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGgyY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29hdXRoMmNsaWVudC9vYXV0aDJjbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBb0M7QUFDcEMseUNBQW1EO0FBYW5ELHNDQUFzQztBQUN0Qyx3Q0FBNEM7QUFFNUMsbUVBQWdFO0FBQ2hFLDBDQUF3QztBQUN4Qyw0RUFBMEQ7QUFFMUQsSUFBTSxtQkFBbUIsR0FBRyxjQUFjLENBQUE7QUFDMUMsSUFBTSxrQkFBa0IsR0FBRyxhQUFhLENBQUE7QUFDeEMsSUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUE7QUFXaEMsSUFBTSxjQUFjLEdBQW9CLFVBQW1CLEdBQVcsRUFBRSxPQUF3Qjs7Ozs7O29CQUNqRyxNQUFNLEdBQWEsSUFBSSxDQUFBO29CQUN2QixhQUFhLEdBQXlCLElBQUksQ0FBQTs7OztvQkFHdEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO29CQUM5QyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRTt3QkFDdkIsV0FBVyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7cUJBQzNCO29CQUNELElBQUksV0FBVyxDQUFDLElBQUksSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO3dCQUM1RCxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFBO3FCQUNwRDtvQkFDZ0MsV0FBTSxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxFQUFBOztvQkFBeEQsY0FBYyxHQUFhLFNBQTZCO29CQUN6QyxXQUFNLGNBQWMsQ0FBQyxJQUFJLEVBQUUsRUFBQTs7b0JBQTFDLFlBQVksR0FBRyxTQUEyQjtv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LE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQTFZYyx5QkFBWSxHQUFHLENBQUMsQUFBSixDQUFJO0lBQ2hCLHFCQUFRLEdBQUcsQ0FBQyxBQUFKLENBQUk7SUFDWixxQkFBUSxHQUFHLENBQUMsQUFBSixDQUFJO0lBQ1osMEJBQWEsR0FBRyxJQUFJLEFBQVAsQ0FBTztJQXdZckMsbUJBQUM7Q0FBQSxBQTVZRCxJQTRZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVycm9yVHlwZSB9IGZyb20gJy4vY29uc3RzJ1xuaW1wb3J0IHsgQXBpVXJscywgQXBpVXJsc1YyIH0gZnJvbSAnLi4vYXV0aC9jb25zdHMnXG5cbmltcG9ydCB7IEF1dGhDbGllbnQsIFNpbXBsZVN0b3JhZ2UgfSBmcm9tICcuL2ludGVyZmFjZSdcblxuaW1wb3J0IHtcbiAgQ3JlZGVudGlhbHMsXG4gIFJlc3BvbnNlRXJyb3IsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBSZXF1ZXN0RnVuY3Rpb24sXG4gIE9BdXRoMkNsaWVudE9wdGlvbnMsXG4gIEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyxcbn0gZnJvbSAnLi9tb2RlbHMnXG5cbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gJy4uL3V0aWxzL3V1aWQnXG5pbXBvcnQgeyBnZXRQYXRoTmFtZSB9IGZyb20gJy4uL3V0aWxzL2luZGV4J1xuXG5pbXBvcnQgeyBTaW5nbGVQcm9taXNlIH0gZnJvbSAnLi4vdXRpbHMvZnVuY3Rpb24vc2luZ2xlLXByb21pc2UnXG5pbXBvcnQgeyB3ZUJ0b2EgfSBmcm9tICcuLi91dGlscy9iYXNlNjQnXG5pbXBvcnQgeyBpc01hdGNoIH0gZnJvbSAnLi4vdXRpbHMvY2xvdWRiYXNlLWFkYXB0ZXItd3hfbXAnXG5cbmNvbnN0IFJlcXVlc3RJZEhlYWRlck5hbWUgPSAneC1yZXF1ZXN0LWlkJ1xuY29uc3QgRGV2aWNlSWRIZWFkZXJOYW1lID0gJ3gtZGV2aWNlLWlkJ1xuY29uc3QgRGV2aWNlSWRTZWN0aW9uTmFtZSA9ICdkZXZpY2VfaWQnXG5cbmRlY2xhcmUgY29uc3Qgd3g6IGFueVxuXG5leHBvcnQgaW50ZXJmYWNlIFRvUmVzcG9uc2VFcnJvck9wdGlvbnMge1xuICBlcnJvcj86IEVycm9yVHlwZVxuICBlcnJvcl9kZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGxcbiAgZXJyb3JfdXJpPzogc3RyaW5nIHwgbnVsbFxuICBkZXRhaWxzPzogYW55IHwgbnVsbFxufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFJlcXVlc3Q6IFJlcXVlc3RGdW5jdGlvbiA9IGFzeW5jIGZ1bmN0aW9uIDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKTogUHJvbWlzZTxUPiB7XG4gIGxldCByZXN1bHQ6IFQgfCBudWxsID0gbnVsbFxuICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvciB8IG51bGwgPSBudWxsXG4gIHRyeSB7XG4gICAgLy8gT2JqZWN0cyBtdXN0IGJlIGNvcGllZCB0byBwcmV2ZW50IG1vZGlmaWNhdGlvbiBvZiBkYXRhIHN1Y2ggYXMgYm9keS5cbiAgICBjb25zdCBjb3B5T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpXG4gICAgaWYgKCFjb3B5T3B0aW9ucy5tZXRob2QpIHtcbiAgICAgIGNvcHlPcHRpb25zLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIGlmIChjb3B5T3B0aW9ucy5ib2R5ICYmIHR5cGVvZiBjb3B5T3B0aW9ucy5ib2R5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY29weU9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGNvcHlPcHRpb25zLmJvZHkpXG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0OiBSZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgY29weU9wdGlvbnMpXG4gICAgY29uc3QganNvblJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2VSZXN1bHQuanNvbigpXG4gICAgaWYgKGpzb25SZXNwb25zZT8uZXJyb3IpIHtcbiAgICAgIHJlc3BvbnNlRXJyb3IgPSBqc29uUmVzcG9uc2UgYXMgUmVzcG9uc2VFcnJvclxuICAgICAgcmVzcG9uc2VFcnJvci5lcnJvcl91cmkgPSBuZXcgVVJMKHVybCkucGF0aG5hbWVcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0ganNvblJlc3BvbnNlIGFzIFRcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgIGVycm9yOiBFcnJvclR5cGUuVU5SRUFDSEFCTEUsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZSxcbiAgICAgIGVycm9yX3VyaTogbmV3IFVSTCh1cmwpLnBhdGhuYW1lLFxuICAgIH1cbiAgfVxuICBpZiAocmVzcG9uc2VFcnJvcikge1xuICAgIHRocm93IHJlc3BvbnNlRXJyb3JcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRvUmVzcG9uc2VFcnJvciA9IChlcnJvcjogUmVzcG9uc2VFcnJvciB8IEVycm9yLCBvcHRpb25zPzogVG9SZXNwb25zZUVycm9yT3B0aW9ucyk6IFJlc3BvbnNlRXJyb3IgPT4ge1xuICBsZXQgcmVzcG9uc2VFcnJvcjogUmVzcG9uc2VFcnJvclxuICBjb25zdCBmb3JtYXRPcHRpb25zOiBUb1Jlc3BvbnNlRXJyb3JPcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogZm9ybWF0T3B0aW9ucy5lcnJvciB8fCBFcnJvclR5cGUuTE9DQUwsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZm9ybWF0T3B0aW9ucy5lcnJvcl9kZXNjcmlwdGlvbiB8fCBlcnJvci5tZXNzYWdlLFxuICAgICAgZXJyb3JfdXJpOiBmb3JtYXRPcHRpb25zLmVycm9yX3VyaSxcbiAgICAgIGRldGFpbHM6IGZvcm1hdE9wdGlvbnMuZGV0YWlscyB8fCBlcnJvci5zdGFjayxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZm9ybWF0RXJyb3I6IFRvUmVzcG9uc2VFcnJvck9wdGlvbnMgPSBlcnJvciB8fCB7fVxuICAgIHJlc3BvbnNlRXJyb3IgPSB7XG4gICAgICBlcnJvcjogZm9ybWF0T3B0aW9ucy5lcnJvciB8fCBmb3JtYXRFcnJvci5lcnJvciB8fCBFcnJvclR5cGUuTE9DQUwsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZm9ybWF0T3B0aW9ucy5lcnJvcl9kZXNjcmlwdGlvbiB8fCBmb3JtYXRFcnJvci5lcnJvcl9kZXNjcmlwdGlvbixcbiAgICAgIGVycm9yX3VyaTogZm9ybWF0T3B0aW9ucy5lcnJvcl91cmkgfHwgZm9ybWF0RXJyb3IuZXJyb3JfdXJpLFxuICAgICAgZGV0YWlsczogZm9ybWF0T3B0aW9ucy5kZXRhaWxzIHx8IGZvcm1hdEVycm9yLmRldGFpbHMsXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNwb25zZUVycm9yXG59XG5cbi8qKlxuICogR2VuZXJhdGUgcmVxdWVzdCBpZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUmVxdWVzdElkKCk6IHN0cmluZyB7XG4gIHJldHVybiB1dWlkdjQoKVxufVxuXG4vKipcbiAqIERlZmF1bHQgU3RvcmFnZS5cbiAqL1xuY2xhc3MgRGVmYXVsdFN0b3JhZ2UgaW1wbGVtZW50cyBTaW1wbGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIOe8k+WtmGtleee7n+S4gOS9v+eUqOWQjue8gOWMuuWIhlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZW52OiBzdHJpbmdcblxuICBjb25zdHJ1Y3RvcihvcHRzPzogeyBlbnY6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5fZW52ID0gb3B0cz8uZW52IHx8ICcnXG4gIH1cbiAgLyoqXG4gICAqIEdldCBpdGVtLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICBhc3luYyBnZXRJdGVtKGtleTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKi9cbiAgYXN5bmMgcmVtb3ZlSXRlbShrZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaXRlbS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICovXG4gIGFzeW5jIHNldEl0ZW0oa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWAsIHZhbHVlKVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpdGVtIHN5bmMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICovXG4gIGdldEl0ZW1TeW5jKGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqL1xuICByZW1vdmVJdGVtU3luYyhrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHtrZXl9JHt0aGlzLl9lbnZ9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgaXRlbSBzeW5jLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKi9cbiAgc2V0SXRlbVN5bmMoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7a2V5fSR7dGhpcy5fZW52fWAsIHZhbHVlKVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U3RvcmFnZSA9IG5ldyBEZWZhdWx0U3RvcmFnZSgpXG5cbmludGVyZmFjZSBMb2NhbENyZWRlbnRpYWxzT3B0aW9ucyB7XG4gIHRva2VuU2VjdGlvbk5hbWU6IHN0cmluZ1xuICBzdG9yYWdlOiBTaW1wbGVTdG9yYWdlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgY3JlZGVudGlhbHMgaXMgZXhwaXJlZC5cbiAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFsczogQ3JlZGVudGlhbHMpOiBib29sZWFuIHtcbiAgbGV0IGlzRXhwaXJlZCA9IHRydWVcbiAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2F0ICYmIGNyZWRlbnRpYWxzPy5hY2Nlc3NfdG9rZW4pIHtcbiAgICBpc0V4cGlyZWQgPSBjcmVkZW50aWFscy5leHBpcmVzX2F0IDwgbmV3IERhdGUoKVxuICB9XG4gIHJldHVybiBpc0V4cGlyZWRcbn1cblxuLyoqXG4gKiBMb2NhbCBjcmVkZW50aWFscy5cbiAqIExvY2FsIGNyZWRlbnRpYWxzLCB3aXRoIG1lbW9yeSBjYWNoZSBhbmQgc3RvcmFnZSBjYWNoZS5cbiAqIElmIHRoZSBtZW1vcnkgY2FjaGUgZXhwaXJlcywgdGhlIHN0b3JhZ2UgY2FjaGUgaXMgYXV0b21hdGljYWxseSBsb2FkZWQuXG4gKi9cbmNsYXNzIExvY2FsQ3JlZGVudGlhbHMge1xuICBwcml2YXRlIHRva2VuU2VjdGlvbk5hbWU6IHN0cmluZ1xuXG4gIHByaXZhdGUgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuXG4gIHByaXZhdGUgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgbnVsbCA9IG51bGxcblxuICBwcml2YXRlIHNpbmdsZVByb21pc2U6IFNpbmdsZVByb21pc2UgPSBuZXcgU2luZ2xlUHJvbWlzZSgpXG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7TG9jYWxDcmVkZW50aWFsc09wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IExvY2FsQ3JlZGVudGlhbHNPcHRpb25zKSB7XG4gICAgdGhpcy50b2tlblNlY3Rpb25OYW1lID0gb3B0aW9ucy50b2tlblNlY3Rpb25OYW1lXG4gICAgdGhpcy5zdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlXG4gIH1cblxuICBwdWJsaWMgZ2V0U3RvcmFnZUNyZWRlbnRpYWxzU3luYygpOiBDcmVkZW50aWFscyB8IG51bGwge1xuICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBudWxsXG4gICAgY29uc3QgdG9rZW5TdHI6IHN0cmluZyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtU3luYyh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgaWYgKHRva2VuU3RyICE9PSB1bmRlZmluZWQgJiYgdG9rZW5TdHIgIT09IG51bGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgaWYgKGNyZWRlbnRpYWxzPy5leHBpcmVzX2F0KSB7XG4gICAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgICAgY3JlZGVudGlhbHMgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLyoqXG4gICAqIHNldENyZWRlbnRpYWxzIFByb3ZpZGVzIGFuIGFsdGVybmF0aXZlIGZldGNoIGFwaSByZXF1ZXN0IGltcGxlbWVudGF0aW9uIHdpdGggYXV0aCBjcmVkZW50aWFsc1xuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfaW4pIHtcbiAgICAgIGlmICghY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgY3JlZGVudGlhbHMuZXhwaXJlc19hdCA9IG5ldyBEYXRlKERhdGUubm93KCkgKyAoY3JlZGVudGlhbHMuZXhwaXJlc19pbiAtIDMwKSAqIDEwMDApXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShjcmVkZW50aWFscylcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldEl0ZW0odGhpcy50b2tlblNlY3Rpb25OYW1lLCB0b2tlblN0cilcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBjcmVkZW50aWFsc1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMudG9rZW5TZWN0aW9uTmFtZSlcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjcmVkZW50aWFscy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscyB8IG51bGw+fVxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlUHJvbWlzZS5ydW4oJ2dldENyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGlzQ3JlZGVudGlhbHNFeHBpcmVkKHRoaXMuY3JlZGVudGlhbHMpKSB7XG4gICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldFN0b3JhZ2VDcmVkZW50aWFscygpXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0b3JhZ2UgY3JlZGVudGlhbHMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldFN0b3JhZ2VDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnNpbmdsZVByb21pc2UucnVuKCdfZ2V0U3RvcmFnZUNyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IG51bGxcbiAgICAgIGNvbnN0IHRva2VuU3RyOiBzdHJpbmcgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgICBpZiAodG9rZW5TdHIgIT09IHVuZGVmaW5lZCAmJiB0b2tlblN0ciAhPT0gbnVsbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNyZWRlbnRpYWxzID0gSlNPTi5wYXJzZSh0b2tlblN0cilcbiAgICAgICAgICBpZiAoY3JlZGVudGlhbHM/LmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzLmV4cGlyZXNfYXQgPSBuZXcgRGF0ZShjcmVkZW50aWFscy5leHBpcmVzX2F0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnRva2VuU2VjdGlvbk5hbWUpXG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBPQXV0aDJDbGllbnRcbiAqL1xuZXhwb3J0IGNsYXNzIE9BdXRoMkNsaWVudCBpbXBsZW1lbnRzIEF1dGhDbGllbnQge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmV0cnkgPSAyXG4gIHByaXZhdGUgc3RhdGljIG1pblJldHJ5ID0gMFxuICBwcml2YXRlIHN0YXRpYyBtYXhSZXRyeSA9IDVcbiAgcHJpdmF0ZSBzdGF0aWMgcmV0cnlJbnRlcnZhbCA9IDEwMDBcblxuICBwcml2YXRlIGFwaU9yaWdpbjogc3RyaW5nXG4gIHByaXZhdGUgY2xpZW50SWQ6IHN0cmluZ1xuICBwcml2YXRlIHJldHJ5OiBudW1iZXJcbiAgcHJpdmF0ZSBjbGllbnRTZWNyZXQ/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiYXNlUmVxdWVzdDogPFQ+KHVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8VD5cbiAgcHJpdmF0ZSBsb2NhbENyZWRlbnRpYWxzOiBMb2NhbENyZWRlbnRpYWxzXG4gIHByaXZhdGUgc3RvcmFnZTogU2ltcGxlU3RvcmFnZVxuICBwcml2YXRlIGRldmljZUlEPzogc3RyaW5nXG4gIHByaXZhdGUgdG9rZW5JblVSTD86IGJvb2xlYW5cbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5GdW5jOiAocmVmcmVzaFRva2VuPzogc3RyaW5nLCBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzKSA9PiBQcm9taXNlPENyZWRlbnRpYWxzPlxuICBwcml2YXRlIGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9XG4gIHByaXZhdGUgc2luZ2xlUHJvbWlzZTogU2luZ2xlUHJvbWlzZSA9IG5ldyBTaW5nbGVQcm9taXNlKClcbiAgcHJpdmF0ZSBhbm9ueW1vdXNTaWduSW5GdW5jOiAoQ3JlZGVudGlhbHMpID0+IFByb21pc2U8Q3JlZGVudGlhbHMgfCB2b2lkPlxuICBwcml2YXRlIHd4Q2xvdWQ6IGFueVxuICBwcml2YXRlIGJhc2ljQXV0aDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7T0F1dGgyQ2xpZW50T3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT0F1dGgyQ2xpZW50T3B0aW9ucykge1xuICAgIHRoaXMuYXBpT3JpZ2luID0gb3B0aW9ucy5hcGlPcmlnaW5cbiAgICB0aGlzLmNsaWVudElkID0gb3B0aW9ucy5jbGllbnRJZFxuICAgIHRoaXMucmV0cnkgPSB0aGlzLmZvcm1hdFJldHJ5KG9wdGlvbnMucmV0cnksIE9BdXRoMkNsaWVudC5kZWZhdWx0UmV0cnkpXG4gICAgaWYgKG9wdGlvbnMuYmFzZVJlcXVlc3QpIHtcbiAgICAgIHRoaXMuYmFzZVJlcXVlc3QgPSBvcHRpb25zLmJhc2VSZXF1ZXN0XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYmFzZVJlcXVlc3QgPSBkZWZhdWx0UmVxdWVzdFxuICAgIH1cbiAgICB0aGlzLnRva2VuSW5VUkwgPSBvcHRpb25zLnRva2VuSW5VUkxcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnNcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5zdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlIHx8IGRlZmF1bHRTdG9yYWdlXG4gICAgdGhpcy5sb2NhbENyZWRlbnRpYWxzID0gbmV3IExvY2FsQ3JlZGVudGlhbHMoe1xuICAgICAgdG9rZW5TZWN0aW9uTmFtZTogYGNyZWRlbnRpYWxzXyR7b3B0aW9ucy5jbGllbnRJZH1gLFxuICAgICAgc3RvcmFnZTogdGhpcy5zdG9yYWdlLFxuICAgIH0pXG4gICAgdGhpcy5jbGllbnRTZWNyZXQgPSBvcHRpb25zLmNsaWVudFNlY3JldFxuICAgIGlmIChvcHRpb25zLmNsaWVudElkICE9PSAnJykge1xuICAgICAgdGhpcy5iYXNpY0F1dGggPSBgQmFzaWMgJHt3ZUJ0b2EoYCR7b3B0aW9ucy5jbGllbnRJZH06JHtvcHRpb25zLmNsaWVudFNlY3JldH1gKX1gXG4gICAgfVxuICAgIHRoaXMud3hDbG91ZCA9IG9wdGlvbnMud3hDbG91ZFxuICAgIHRyeSB7XG4gICAgICBpZiAoaXNNYXRjaCgpICYmIHRoaXMud3hDbG91ZCA9PT0gdW5kZWZpbmVkICYmIG9wdGlvbnMuZW52KSB7XG4gICAgICAgIHd4LmNsb3VkLmluaXQoeyBlbnY6IG9wdGlvbnMuZW52IH0pXG4gICAgICAgIHRoaXMud3hDbG91ZCA9IHd4LmNsb3VkXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vXG4gICAgfVxuICAgIHRoaXMucmVmcmVzaFRva2VuRnVuYyA9IG9wdGlvbnMucmVmcmVzaFRva2VuRnVuYyB8fCB0aGlzLmRlZmF1bHRSZWZyZXNoVG9rZW5GdW5jXG4gICAgdGhpcy5hbm9ueW1vdXNTaWduSW5GdW5jID0gb3B0aW9ucy5hbm9ueW1vdXNTaWduSW5GdW5jXG4gIH1cblxuICAvKipcbiAgICogc2V0Q3JlZGVudGlhbHMgUHJvdmlkZXMgYW4gYWx0ZXJuYXRpdmUgZmV0Y2ggYXBpIHJlcXVlc3QgaW1wbGVtZW50YXRpb24gd2l0aCBhdXRoIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSB7Q3JlZGVudGlhbHN9IGNyZWRlbnRpYWxzXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwdWJsaWMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM/OiBDcmVkZW50aWFscyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gIH1cblxuICAvKipcbiAgICogZ2V0QWNjZXNzVG9rZW4gcmV0dXJuIGEgdmFsaWRhdGUgYWNjZXNzIHRva2VuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWNjZXNzVG9rZW4oKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoY3JlZGVudGlhbHM/LmFjY2Vzc190b2tlbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShjcmVkZW50aWFscy5hY2Nlc3NfdG9rZW4pXG4gICAgfVxuICAgIGNvbnN0IHJlc3BFcnI6IFJlc3BvbnNlRXJyb3IgPSB7IGVycm9yOiBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcEVycilcbiAgfVxuXG4gIC8qKlxuICAgKiByZXF1ZXN0IGh0dHAgbGlrZSBzaW1wbGUgZmV0Y2ggYXBpLCBleHA6cmVxdWVzdCgnL3YxL3VzZXIvbWUnLCB7d2l0aENyZWRlbnRpYWxzOnRydWV9KVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7QXV0aENsaWVudFJlcXVlc3RPcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxUPih1cmw6IHN0cmluZywgb3B0aW9ucz86IEF1dGhDbGllbnRSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgfVxuICAgIGNvbnN0IHJldHJ5OiBudW1iZXIgPSB0aGlzLmZvcm1hdFJldHJ5KG9wdGlvbnMucmV0cnksIHRoaXMucmV0cnkpXG4gICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gICAgaWYgKHRoaXMuaGVhZGVycykge1xuICAgICAgb3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAuLi50aGlzLmhlYWRlcnMsXG4gICAgICAgIC4uLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnNbUmVxdWVzdElkSGVhZGVyTmFtZV0pIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVyc1tSZXF1ZXN0SWRIZWFkZXJOYW1lXSA9IGdlbmVyYXRlUmVxdWVzdElkKClcbiAgICB9XG4gICAgaWYgKCFvcHRpb25zLmhlYWRlcnNbRGV2aWNlSWRIZWFkZXJOYW1lXSkge1xuICAgICAgY29uc3QgZGV2aWNlSWQgPSBhd2FpdCB0aGlzLmdldERldmljZUlkKClcbiAgICAgIG9wdGlvbnMuaGVhZGVyc1tEZXZpY2VJZEhlYWRlck5hbWVdID0gZGV2aWNlSWRcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LndpdGhCYXNpY0F1dGggJiYgdGhpcy5iYXNpY0F1dGgpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycy5BdXRob3JpemF0aW9uID0gdGhpcy5iYXNpY0F1dGhcbiAgICB9XG4gICAgaWYgKG9wdGlvbnM/LndpdGhDcmVkZW50aWFscykge1xuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICBpZiAodGhpcy50b2tlbkluVVJMKSB7XG4gICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XG4gICAgICAgICAgICB1cmwgKz0gJz8nXG4gICAgICAgICAgfVxuICAgICAgICAgIHVybCArPSBgYWNjZXNzX3Rva2VuPSR7Y3JlZGVudGlhbHMuYWNjZXNzX3Rva2VufWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25zLmhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGAke2NyZWRlbnRpYWxzLnRva2VuX3R5cGV9ICR7Y3JlZGVudGlhbHMuYWNjZXNzX3Rva2VufWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5jbGllbnRJZCAmJiB1cmwuaW5kZXhPZignY2xpZW50X2lkJykgPCAwKSB7XG4gICAgICAgIHVybCArPSB1cmwuaW5kZXhPZignPycpIDwgMCA/ICc/JyA6ICcmJ1xuICAgICAgICB1cmwgKz0gYGNsaWVudF9pZD0ke3RoaXMuY2xpZW50SWR9YFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgdXJsID0gdGhpcy5hcGlPcmlnaW4gKyB1cmxcbiAgICB9XG4gICAgbGV0IHJlc3BvbnNlOiBUIHwgbnVsbCA9IG51bGxcbiAgICBjb25zdCBtYXhSZXF1ZXN0VGltZXM6IG51bWJlciA9IHJldHJ5ICsgMVxuICAgIGZvciAobGV0IHJlcXVlc3RUaW1lID0gMDsgcmVxdWVzdFRpbWUgPCBtYXhSZXF1ZXN0VGltZXM7IHJlcXVlc3RUaW1lKyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChvcHRpb25zLnVzZVd4Q2xvdWQpIHtcbiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMud3hDbG91ZENhbGxGdW5jdGlvbjxUPih1cmwsIG9wdGlvbnMpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmJhc2VSZXF1ZXN0PFQ+KHVybCwgb3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgfSBjYXRjaCAocmVzcG9uc2VFcnJvcikge1xuICAgICAgICBpZiAob3B0aW9ucy53aXRoQ3JlZGVudGlhbHMgJiYgcmVzcG9uc2VFcnJvciAmJiByZXNwb25zZUVycm9yLmVycm9yID09PSBFcnJvclR5cGUuVU5BVVRIRU5USUNBVEVEKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZUVycm9yKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RUaW1lID09PSByZXRyeSB8fCAhcmVzcG9uc2VFcnJvciB8fCByZXNwb25zZUVycm9yLmVycm9yICE9PSAndW5yZWFjaGFibGUnKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlRXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuc2xlZXAoT0F1dGgyQ2xpZW50LnJldHJ5SW50ZXJ2YWwpXG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHd4Q2xvdWRDYWxsRnVuY3Rpb248VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucyk6IFByb21pc2U8VD4ge1xuICAgIGxldCByZXN1bHQ6IFQgfCBudWxsID0gbnVsbFxuICAgIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyByZXN1bHQ6IHJlc3BvbnNlUmVzdWx0IH0gPSBhd2FpdCB0aGlzLnd4Q2xvdWQuY2FsbEZ1bmN0aW9uKHtcbiAgICAgICAgbmFtZTogJ2h0dHBPdmVyQ2FsbEZ1bmN0aW9uJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIG9yaWdpbjogJ2h0dHBzOi8vc2VydmljZXdlY2hhdC5jb20nLFxuICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm9keTogb3B0aW9ucy5ib2R5LFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlc3BvbnNlUmVzdWx0Py5ib2R5Py5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHJlc3BvbnNlRXJyb3IgPSByZXNwb25zZVJlc3VsdD8uYm9keSBhcyBSZXNwb25zZUVycm9yXG4gICAgICAgIHJlc3BvbnNlRXJyb3IuZXJyb3JfdXJpID0gZ2V0UGF0aE5hbWUodXJsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2VSZXN1bHQ/LmJvZHkgYXMgVFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXNwb25zZUVycm9yID0ge1xuICAgICAgICBlcnJvcjogRXJyb3JUeXBlLlVOUkVBQ0hBQkxFLFxuICAgICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgZXJyb3JfdXJpOiBnZXRQYXRoTmFtZSh1cmwpLFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNyZWRlbnRpYWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENyZWRlbnRpYWxzKCk6IFByb21pc2U8Q3JlZGVudGlhbHMgfCBudWxsPiB7XG4gICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCcpXG4gICAgfVxuICAgIGlmIChpc0NyZWRlbnRpYWxzRXhwaXJlZChjcmVkZW50aWFscykpIHtcbiAgICAgIGlmIChjcmVkZW50aWFscyAmJiBjcmVkZW50aWFscy5zY29wZSA9PT0gJ2Fub255bW91cycpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5vbnltb3VzU2lnbkluRnVuYykge1xuICAgICAgICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLmFub255bW91c1NpZ25JbkZ1bmMoY3JlZGVudGlhbHMpXG4gICAgICAgICAgY3JlZGVudGlhbHMgPSBjIHx8IChhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0Q3JlZGVudGlhbHMoKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuYW5vbnltb3VzU2lnbkluKGNyZWRlbnRpYWxzKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMucmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCDlup/lvIPmjqXlj6PvvIzli7/nlKguIOWmgumcgOiOt+WPluWHreivgeS/oeaBr+ivt+S9v+eUqCBnZXRDcmVkZW50aWFscyDmlrnms5VcbiAgICovXG4gIHB1YmxpYyBnZXRDcmVkZW50aWFsc1N5bmMoKTogQ3JlZGVudGlhbHMgfCBudWxsIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuZ2V0U3RvcmFnZUNyZWRlbnRpYWxzU3luYygpXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzXG4gIH1cblxuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHNBc3luYygpOiBQcm9taXNlPENyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmdldENyZWRlbnRpYWxzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTY29wZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ2NyZWRlbnRpYWxzIG5vdCBmb3VuZCcpXG4gICAgfVxuICAgIHJldHVybiBjcmVkZW50aWFscy5zY29wZVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEdyb3VwcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy51bkF1dGhlbnRpY2F0ZWRFcnJvcignY3JlZGVudGlhbHMgbm90IGZvdW5kJylcbiAgICB9XG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzLmdyb3Vwc1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggZXhwaXJlZCB0b2tlbi5cbiAgICogQHBhcmFtIHtDcmVkZW50aWFsc30gY3JlZGVudGlhbHNcbiAgICogQHJldHVybiB7UHJvbWlzZTxDcmVkZW50aWFscz59XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX3JlZnJlc2hUb2tlbicsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgIWNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoJ25vIHJlZnJlc2ggdG9rZW4gZm91bmQgaW4gY3JlZGVudGlhbHMnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZWZyZXNoVG9rZW5GdW5jKGNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4sIGNyZWRlbnRpYWxzKVxuICAgICAgICBhd2FpdCB0aGlzLmxvY2FsQ3JlZGVudGlhbHMuc2V0Q3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpXG4gICAgICAgIHJldHVybiBuZXdDcmVkZW50aWFsc1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmVycm9yID09PSBFcnJvclR5cGUuSU5WQUxJRF9HUkFOVCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhudWxsKVxuICAgICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKGVycm9yLmVycm9yX2Rlc2NyaXB0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHJldHJ5IHZhbHVlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gcmV0cnlcbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1JldHJ5KHJldHJ5OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCByZXNwb25zZUVycm9yOiBSZXNwb25zZUVycm9yIHwgbnVsbCA9IG51bGxcbiAgICBpZiAodHlwZW9mIHJldHJ5ICE9PSAnbnVtYmVyJyB8fCByZXRyeSA8IE9BdXRoMkNsaWVudC5taW5SZXRyeSB8fCByZXRyeSA+IE9BdXRoMkNsaWVudC5tYXhSZXRyeSkge1xuICAgICAgcmVzcG9uc2VFcnJvciA9IHtcbiAgICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTlJFQUNIQUJMRSxcbiAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246ICd3cm9uZyBvcHRpb25zIHBhcmFtOiByZXRyeScsXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXNwb25zZUVycm9yKSB7XG4gICAgICB0aHJvdyByZXNwb25zZUVycm9yXG4gICAgfVxuICAgIHJldHVybiByZXRyeVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCByZXRyeSB2YWx1ZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHJldHJ5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWZhdWx0VmFsZVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFJldHJ5KHJldHJ5OiBudW1iZXIsIGRlZmF1bHRWYWxlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgcmV0cnkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbGVcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tSZXRyeShyZXRyeSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTbGVlcC5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1zXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKClcbiAgICAgIH0sIG1zKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogYW5vbnltb3VzIHNpZ25JblxuICAgKiBAcGFyYW0ge0NyZWRlbnRpYWxzfSBjcmVkZW50aWFsc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlPENyZWRlbnRpYWxzPn1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYW5vbnltb3VzU2lnbkluKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyk6IFByb21pc2U8Q3JlZGVudGlhbHM+IHtcbiAgICByZXR1cm4gdGhpcy5zaW5nbGVQcm9taXNlLnJ1bignX2Fub255bW91cycsIGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghY3JlZGVudGlhbHMgfHwgY3JlZGVudGlhbHMuc2NvcGUgIT09ICdhbm9ueW1vdXMnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdubyBhbm9ueW1vdXMgaW4gY3JlZGVudGlhbHMnKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbmV3Q3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5yZXF1ZXN0KEFwaVVybHMuQVVUSF9TSUdOX0lOX0FOT05ZTU9VU0xZX1VSTCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIHdpdGhCYXNpY0F1dGg6IHRydWUsXG4gICAgICAgICAgYm9keToge30sXG4gICAgICAgIH0pXG4gICAgICAgIGF3YWl0IHRoaXMubG9jYWxDcmVkZW50aWFscy5zZXRDcmVkZW50aWFscyhuZXdDcmVkZW50aWFscylcbiAgICAgICAgcmV0dXJuIG5ld0NyZWRlbnRpYWxzXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuZXJyb3IgPT09IEVycm9yVHlwZS5JTlZBTElEX0dSQU5UKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2NhbENyZWRlbnRpYWxzLnNldENyZWRlbnRpYWxzKG51bGwpXG4gICAgICAgICAgcmV0dXJuIHRoaXMudW5BdXRoZW50aWNhdGVkRXJyb3IoZXJyb3IuZXJyb3JfZGVzY3JpcHRpb24pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCByZWZyZXNoIHRva2VuIGZ1bmN0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmcmVzaFRva2VuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8Q3JlZGVudGlhbHM+fVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZWZhdWx0UmVmcmVzaFRva2VuRnVuYyhyZWZyZXNoVG9rZW4/OiBzdHJpbmcsIGNyZWRlbnRpYWxzPzogQ3JlZGVudGlhbHMpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgaWYgKHJlZnJlc2hUb2tlbiA9PT0gdW5kZWZpbmVkIHx8IHJlZnJlc2hUb2tlbiA9PT0gJycpIHtcbiAgICAgIHJldHVybiB0aGlzLnVuQXV0aGVudGljYXRlZEVycm9yKCdyZWZyZXNoIHRva2VuIG5vdCBmb3VuZCcpXG4gICAgfVxuXG4gICAgbGV0IHVybDogc3RyaW5nID0gQXBpVXJscy5BVVRIX1RPS0VOX1VSTFxuXG4gICAgaWYgKGNyZWRlbnRpYWxzPy52ZXJzaW9uID09PSAndjInKSB7XG4gICAgICB1cmwgPSBBcGlVcmxzVjIuQVVUSF9UT0tFTl9VUkxcbiAgICB9XG5cbiAgICBjb25zdCBuZXdDcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLnJlcXVlc3QodXJsLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudElkLFxuICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudFNlY3JldCxcbiAgICAgICAgZ3JhbnRfdHlwZTogJ3JlZnJlc2hfdG9rZW4nLFxuICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4sXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICByZXR1cm4geyAuLi5uZXdDcmVkZW50aWFscywgdmVyc2lvbjogY3JlZGVudGlhbHM/LnZlcnNpb24gfHwgJ3YxJyB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRldmljZUlkXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGdldERldmljZUlkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKHRoaXMuZGV2aWNlSUQpIHtcbiAgICAgIHJldHVybiB0aGlzLmRldmljZUlEXG4gICAgfVxuICAgIGxldCBkZXZpY2VJZDogc3RyaW5nID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldEl0ZW0oRGV2aWNlSWRTZWN0aW9uTmFtZSlcbiAgICBpZiAoISh0eXBlb2YgZGV2aWNlSWQgPT09ICdzdHJpbmcnICYmIGRldmljZUlkLmxlbmd0aCA+PSAxNiAmJiBkZXZpY2VJZC5sZW5ndGggPD0gNDgpKSB7XG4gICAgICBkZXZpY2VJZCA9IHV1aWR2NCgpXG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShEZXZpY2VJZFNlY3Rpb25OYW1lLCBkZXZpY2VJZClcbiAgICB9XG4gICAgdGhpcy5kZXZpY2VJRCA9IGRldmljZUlkXG4gICAgcmV0dXJuIGRldmljZUlkXG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuQXV0aGVudGljYXRlZCBlcnJvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGVyclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFQ+fVxuICAgKi9cbiAgcHJpdmF0ZSB1bkF1dGhlbnRpY2F0ZWRFcnJvcjxUPihlcnI/OiBzdHJpbmcpOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCByZXNwRXJyOiBSZXNwb25zZUVycm9yID0ge1xuICAgICAgZXJyb3I6IEVycm9yVHlwZS5VTkFVVEhFTlRJQ0FURUQsXG4gICAgICBlcnJvcl9kZXNjcmlwdGlvbjogZXJyLFxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcEVycilcbiAgfVxufVxuIl19
|
|
@@ -12,14 +12,15 @@ var getEncryptInfo = function (_a) {
|
|
|
12
12
|
return '';
|
|
13
13
|
try {
|
|
14
14
|
var params = (0, index_1.deepClone)(payload);
|
|
15
|
-
var rsaInstance = new encryptlong_1.default(
|
|
15
|
+
var rsaInstance = new encryptlong_1.default();
|
|
16
16
|
rsaInstance.setPublicKey(publicKey);
|
|
17
17
|
var encrypted = rsaInstance.encryptLong(typeof params === 'object' ? JSON.stringify(params) : params);
|
|
18
18
|
return encrypted;
|
|
19
19
|
}
|
|
20
20
|
catch (error) {
|
|
21
|
+
console.error('encrypt error:', error);
|
|
21
22
|
}
|
|
22
23
|
return '';
|
|
23
24
|
};
|
|
24
25
|
exports.getEncryptInfo = getEncryptInfo;
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9lbmNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLDhEQUFxQztBQUNyQyxpQ0FBbUM7QUFRNUIsSUFBTSxjQUFjLEdBQUcsVUFBQyxFQUE0QztRQUE1QyxxQkFBMEMsRUFBRSxLQUFBLEVBQTFDLGlCQUFjLEVBQWQsU0FBUyxtQkFBRyxFQUFFLEtBQUEsRUFBRSxlQUFtQixFQUFuQixPQUFPLG1CQUFHLEVBQVMsS0FBQTtJQUNsRSxJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sRUFBRSxDQUFBO0lBRXpCLElBQUk7UUFDRixJQUFNLE1BQU0sR0FBRyxJQUFBLGlCQUFTLEVBQUMsT0FBTyxDQUFDLENBQUE7UUFFakMsSUFBTSxXQUFXLEdBQUcsSUFBSSxxQkFBUyxFQUFFLENBQUE7UUFFbkMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQWNuQyxJQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFdkcsT0FBTyxTQUFTLENBQUE7S0FDakI7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUE7S0FDdkM7SUFFRCxPQUFPLEVBQUUsQ0FBQTtBQUNYLENBQUMsQ0FBQTtBQTlCWSxRQUFBLGNBQWMsa0JBOEIxQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICog6a2U5pS555qEIGVuY3J5cHRsb25nIOeJiOacrO+8jCDlj6rmlK/mjIEgZW5jcnlwdExvbmcg5pa55rOVXG4gKiDlsI/nqIvluo/kuIogSlNFbmNyeXB0IOS4uuepuuS4jeaUr+aMgSBAaW1wb3J0YW50XG4gKi9cbmltcG9ydCBKU0VuY3J5cHQgZnJvbSAnLi9lbmNyeXB0bG9uZydcbmltcG9ydCB7IGRlZXBDbG9uZSB9IGZyb20gJy4vaW5kZXgnXG5cbi8qKlxuICog55Sf5oiQUlNB5YWs6ZKl5Yqg5a+G5ZCO55qE5pWw5o2uXG4gKiBAcGFyYW0gcGFyYW0wLnB1YmxpY0tleSBSU0HlhazpkqVcbiAqIEBwYXJhbSBwYXJhbTAucGF5bG9hZCDliqDlr4bliY3nmoTmlbDmja5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IOWKoOWvhuWQjueahOaVsOaNrlxuICovXG5leHBvcnQgY29uc3QgZ2V0RW5jcnlwdEluZm8gPSAoeyBwdWJsaWNLZXkgPSAnJywgcGF5bG9hZCA9IHt9IGFzIGFueSB9ID0ge30pID0+IHtcbiAgaWYgKCFwdWJsaWNLZXkpIHJldHVybiAnJ1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyYW1zID0gZGVlcENsb25lKHBheWxvYWQpXG4gICAgLy8g55Sf5oiQUlNB5a6e5L6LXG4gICAgY29uc3QgcnNhSW5zdGFuY2UgPSBuZXcgSlNFbmNyeXB0KClcbiAgICAvLyDorr7nva7lhazpkqVcbiAgICByc2FJbnN0YW5jZS5zZXRQdWJsaWNLZXkocHVibGljS2V5KVxuICAgIC8vIOeUn+aIkOaXtumXtOaIs1xuICAgIC8vIHBhcmFtcy50aW1lc3RhbXAgPSArbmV3IERhdGUoKVxuICAgIC8vIOehruWumuetvuWQjeeul+azlVxuICAgIC8vIGNvbnN0IHNpZ25NZXRob2QgPSAnSG1hY1NIQTI1NidcbiAgICAvLyDnlJ/miJDpmo/mnLrmlbBcbiAgICAvLyBjb25zdCBub25jZSA9IFdvcmRBcnJheS5yYW5kb20oMTYpLnRvU3RyaW5nKClcbiAgICAvLyDnlJ/miJDnrb7lkI3vvJrln7rmnKzlj4LmlbDjgIHml7bpl7TmiLMgKyDpmo/mnLrmlbBcbiAgICAvLyBjb25zdCBzaWduYXR1cmUgPSBIbWFjU0hBMjU2KEpTT04uc3RyaW5naWZ5KHBhcmFtcyksIG5vbmNlKS50b1N0cmluZygpXG4gICAgLy8g5bCG562+5ZCN5pS+5YWl5Y+C5pWw5LitXG4gICAgLy8gcGFyYW1zLnNpZ25hdHVyZSA9IHNpZ25hdHVyZVxuICAgIC8vIHBhcmFtcy5ub25jZSA9IG5vbmNlXG4gICAgLy8gcGFyYW1zLnNpZ25NZXRob2QgPSBzaWduTWV0aG9kXG4gICAgLy8gcnNh5YWs6ZKl5Yqg5a+GXG4gICAgY29uc3QgZW5jcnlwdGVkID0gcnNhSW5zdGFuY2UuZW5jcnlwdExvbmcodHlwZW9mIHBhcmFtcyA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShwYXJhbXMpIDogcGFyYW1zKVxuXG4gICAgcmV0dXJuIGVuY3J5cHRlZFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2VuY3J5cHQgZXJyb3I6JywgZXJyb3IpXG4gIH1cblxuICByZXR1cm4gJydcbn1cbiJdfQ==
|