@liflig/cdk 3.30.5 → 3.30.6

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.
@@ -69,4 +69,4 @@ export class SlackAlarm extends constructs.Construct {
69
69
  });
70
70
  }
71
71
  }
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2stYWxhcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zL3NsYWNrLWFsYXJtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEtBQUssaUJBQWlCLE1BQU0sb0NBQW9DLENBQUE7QUFDdkUsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzdELE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUE7QUFFaEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUV4QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUM3QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBZWxDOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxVQUFXLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUFDbEMsVUFBVSxDQUFXO0lBQ3JCLFNBQVMsQ0FBNkI7SUFDdEMsVUFBVSxDQUFpQjtJQUUzQyxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRTlDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRWpFLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3hELElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsaUNBQWlDLENBQUMsQ0FDcEQ7WUFDRCxXQUFXLEVBQ1QsK0VBQStFO1lBQ2pGLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVztZQUNuQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsV0FBVyxFQUFFO2dCQUNYLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVO2dCQUM3RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQy9CLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQ2hDO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRTtZQUN4RCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUNuRTtZQUNELFdBQVcsRUFDVCxrRkFBa0Y7WUFDcEYsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ25DLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QixXQUFXLEVBQUU7Z0JBQ1gscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFVBQVU7Z0JBQzdELFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDL0IsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE9BQU87YUFDaEM7U0FDRixDQUFDLENBQUE7UUFFRixLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN0RCxLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBRWxELFdBQVcsQ0FBQyxhQUFhLENBQUMsa0JBQWtCLEVBQUU7WUFDNUMsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixTQUFTLEVBQUUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7WUFDeEQsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtTQUNwQyxDQUFDLENBQUE7UUFDRixXQUFXLENBQUMsZUFBZSxDQUN6QixJQUFJLGVBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztZQUN0QyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUs7WUFDcEIsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1NBQ2pCLENBQUMsQ0FDSCxDQUFBO1FBRUQsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDekMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxXQUFXO1lBQ2pDLFFBQVEsRUFBRSxHQUFHLENBQUMsb0JBQW9CLENBQUMsTUFBTTtZQUN6QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDdkIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCJcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIlxuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgY2xvdWR3YXRjaEFjdGlvbnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoLWFjdGlvbnNcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIlxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCJcbmltcG9ydCB0eXBlICogYXMgc2VjcmV0c21hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiXG5pbXBvcnQgKiBhcyBzbnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zbnNcIlxuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5cbmNvbnN0IF9fZmlsZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuY29uc3QgX19kaXIgPSBwYXRoLmRpcm5hbWUoX19maWxlKVxuXG5leHBvcnQgaW50ZXJmYWNlIFNsYWNrQWxhcm1Qcm9wcyB7XG4gIHByb2plY3ROYW1lOiBzdHJpbmdcbiAgZW52TmFtZTogc3RyaW5nXG4gIC8qKlxuICAgKiBBIHBsYWludGV4dCBzZWNyZXQgY29udGFpbmluZyB0aGUgVVJMIG9mIGEgU2xhY2sgaW5jb21pbmcgd2ViaG9vay5cbiAgICogVGhlIHdlYmhvb2sgc2hvdWxkIGJlIGNyZWF0ZWQgdGhyb3VnaCBhIFNsYWNrIGFwcCwgYW5kIG9ubHkgYWxsb3dzIHBvc3RpbmcgdG8gb25lIHNwZWNpZmljIFNsYWNrIGNoYW5uZWwuXG4gICAqIFNlZSBTbGFjaydzIG9mZmljaWFsIGRvY3VtZW50YXRpb24gKGUuZy4sIGh0dHBzOi8vYXBpLnNsYWNrLmNvbS9tZXNzYWdpbmcvd2ViaG9va3MpIGZvciBtb3JlIGRldGFpbHMuXG4gICAqXG4gICAqIE5PVEU6IEluY29taW5nIHdlYmhvb2tzIGNyZWF0ZWQgdGhyb3VnaCBsZWdhY3kgY3VzdG9tIGludGVncmF0aW9ucyBpbiBTbGFjayBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICovXG4gIHNsYWNrV2ViaG9va1VybFNlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldFxufVxuXG4vKipcbiAqIENyZWF0ZXNcbiAqIC0gU05TIFRvcGljIHRoYXQgY2FuIGJlIHVzZWQgdG8gYWN0aW9uIGFsYXJtcywgd2l0aCBhIExhbWJkYVxuICogdGhhdCB3aWxsIHNlbmQgYSBtZXNzYWdlIHRvIFNsYWNrIGZvciB0aGUgYWxhcm0uXG4gKiAtIEEgcmV1c2FibGUgTGFtYmRhIHRoYXQgYWNjZXB0cyBDbG91ZFdhdGNoIExvZ3Mgc3Vic2NyaXB0aW9uIGV2ZW50cyBhbmQgcG9zdHNcbiAqIGZvcm1hdHRlZCBlcnJvciBtZXNzYWdlcyB0byBTbGFjay5cbiAqL1xuZXhwb3J0IGNsYXNzIFNsYWNrQWxhcm0gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBhbGFybVRvcGljOiBzbnMuVG9waWNcbiAgcHVibGljIHJlYWRvbmx5IHNuc0FjdGlvbjogY2xvdWR3YXRjaEFjdGlvbnMuU25zQWN0aW9uXG4gIHB1YmxpYyByZWFkb25seSBsb2dIYW5kbGVyOiBsYW1iZGEuRnVuY3Rpb25cblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTbGFja0FsYXJtUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmFsYXJtVG9waWMgPSBuZXcgc25zLlRvcGljKHRoaXMsIFwiVG9waWNcIilcblxuICAgIHRoaXMuc25zQWN0aW9uID0gbmV3IGNsb3Vkd2F0Y2hBY3Rpb25zLlNuc0FjdGlvbih0aGlzLmFsYXJtVG9waWMpXG5cbiAgICBjb25zdCBzbGFja0xhbWJkYSA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgXCJGdW5jdGlvblwiLCB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIHBhdGguam9pbihfX2RpciwgXCIuLi8uLi9hc3NldHMvc2xhY2stYWxhcm0tbGFtYmRhXCIpLFxuICAgICAgKSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlJlY2VpdmVzIENsb3VkV2F0Y2ggQWxhcm1zIHRocm91Z2ggU05TIGFuZCBzZW5kcyBhIGZvcm1hdHRlZCB2ZXJzaW9uIHRvIFNsYWNrXCIsXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEzLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcyg2KSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1VSTF9TRUNSRVRfTkFNRTogcHJvcHMuc2xhY2tXZWJob29rVXJsU2VjcmV0LnNlY3JldE5hbWUsXG4gICAgICAgIFBST0pFQ1RfTkFNRTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgICAgIEVOVklST05NRU5UX05BTUU6IHByb3BzLmVudk5hbWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ0hhbmRsZXIgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsIFwiTG9nSGFuZGxlclwiLCB7XG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIHBhdGguam9pbihfX2RpciwgXCIuLi8uLi9hc3NldHNcIiwgXCJzbGFjay1lcnJvci1sb2ctaGFuZGxlci1sYW1iZGFcIiksXG4gICAgICApLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUmVjZWl2ZXMgQ2xvdWRXYXRjaCBMb2dzIHN1YnNjcmlwdGlvbiBldmVudHMgYW5kIHNlbmRzIGZvcm1hdHRlZCBlcnJvcnMgdG8gU2xhY2tcIixcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgbWVtb3J5U2l6ZTogMTI4LFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTQsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIFNMQUNLX1VSTF9TRUNSRVRfTkFNRTogcHJvcHMuc2xhY2tXZWJob29rVXJsU2VjcmV0LnNlY3JldE5hbWUsXG4gICAgICAgIFBST0pFQ1RfTkFNRTogcHJvcHMucHJvamVjdE5hbWUsXG4gICAgICAgIEVOVklST05NRU5UX05BTUU6IHByb3BzLmVudk5hbWUsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBwcm9wcy5zbGFja1dlYmhvb2tVcmxTZWNyZXQuZ3JhbnRSZWFkKHRoaXMubG9nSGFuZGxlcilcbiAgICBwcm9wcy5zbGFja1dlYmhvb2tVcmxTZWNyZXQuZ3JhbnRSZWFkKHNsYWNrTGFtYmRhKVxuXG4gICAgc2xhY2tMYW1iZGEuYWRkUGVybWlzc2lvbihcIkludm9rZVBlcm1pc3Npb25cIiwge1xuICAgICAgYWN0aW9uOiBcImxhbWJkYTpJbnZva2VGdW5jdGlvblwiLFxuICAgICAgcHJpbmNpcGFsOiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJzbnMuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIHNvdXJjZUFybjogdGhpcy5hbGFybVRvcGljLnRvcGljQXJuLFxuICAgIH0pXG4gICAgc2xhY2tMYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImNsb3Vkd2F0Y2g6RGVzY3JpYmVBbGFybXNcIl0sXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KSxcbiAgICApXG5cbiAgICBuZXcgc25zLlN1YnNjcmlwdGlvbih0aGlzLCBcIlN1YnNjcmlwdGlvblwiLCB7XG4gICAgICBlbmRwb2ludDogc2xhY2tMYW1iZGEuZnVuY3Rpb25Bcm4sXG4gICAgICBwcm90b2NvbDogc25zLlN1YnNjcmlwdGlvblByb3RvY29sLkxBTUJEQSxcbiAgICAgIHRvcGljOiB0aGlzLmFsYXJtVG9waWMsXG4gICAgfSlcbiAgfVxufVxuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xhY2stYWxhcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zL3NsYWNrLWFsYXJtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEtBQUssaUJBQWlCLE1BQU0sb0NBQW9DLENBQUE7QUFDdkUsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQzdELE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUE7QUFFaEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQTtBQUMxQyxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUV4QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7QUFDN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQWVsQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sVUFBVyxTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBQ2xDLFVBQVUsQ0FBVztJQUNyQixTQUFTLENBQTZCO0lBQ3RDLFVBQVUsQ0FBaUI7SUFFM0MsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUU5QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUVqRSxNQUFNLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN4RCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlDQUFpQyxDQUFDLENBQ3BEO1lBQ0QsV0FBVyxFQUNULCtFQUErRTtZQUNqRixPQUFPLEVBQUUsZUFBZTtZQUN4QixVQUFVLEVBQUUsR0FBRztZQUNmLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDbkMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLFdBQVcsRUFBRTtnQkFDWCxxQkFBcUIsRUFBRSxLQUFLLENBQUMscUJBQXFCLENBQUMsVUFBVTtnQkFDN0QsWUFBWSxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUMvQixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsT0FBTzthQUNoQztTQUNGLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDeEQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsZ0NBQWdDLENBQUMsQ0FDbkU7WUFDRCxXQUFXLEVBQ1Qsa0ZBQWtGO1lBQ3BGLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVztZQUNuQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsV0FBVyxFQUFFO2dCQUNYLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVO2dCQUM3RCxZQUFZLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQy9CLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxPQUFPO2FBQ2hDO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUE7UUFDdEQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUVsRCxXQUFXLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFO1lBQzVDLE1BQU0sRUFBRSx1QkFBdUI7WUFDL0IsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDO1lBQ3hELFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7U0FDcEMsQ0FBQyxDQUFBO1FBQ0YsV0FBVyxDQUFDLGVBQWUsQ0FDekIsSUFBSSxlQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFLENBQUMsMkJBQTJCLENBQUM7WUFDdEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ3BCLFNBQVMsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNqQixDQUFDLENBQ0gsQ0FBQTtRQUVELElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ3pDLFFBQVEsRUFBRSxXQUFXLENBQUMsV0FBVztZQUNqQyxRQUFRLEVBQUUsR0FBRyxDQUFDLG9CQUFvQixDQUFDLE1BQU07WUFDekMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQ3ZCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCJcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2hBY3Rpb25zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaC1hY3Rpb25zXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgdHlwZSAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIlxuaW1wb3J0ICogYXMgc25zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc25zXCJcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuXG5jb25zdCBfX2ZpbGUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZGlyID0gcGF0aC5kaXJuYW1lKF9fZmlsZSlcblxuZXhwb3J0IGludGVyZmFjZSBTbGFja0FsYXJtUHJvcHMge1xuICBwcm9qZWN0TmFtZTogc3RyaW5nXG4gIGVudk5hbWU6IHN0cmluZ1xuICAvKipcbiAgICogQSBwbGFpbnRleHQgc2VjcmV0IGNvbnRhaW5pbmcgdGhlIFVSTCBvZiBhIFNsYWNrIGluY29taW5nIHdlYmhvb2suXG4gICAqIFRoZSB3ZWJob29rIHNob3VsZCBiZSBjcmVhdGVkIHRocm91Z2ggYSBTbGFjayBhcHAsIGFuZCBvbmx5IGFsbG93cyBwb3N0aW5nIHRvIG9uZSBzcGVjaWZpYyBTbGFjayBjaGFubmVsLlxuICAgKiBTZWUgU2xhY2sncyBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIChlLmcuLCBodHRwczovL2FwaS5zbGFjay5jb20vbWVzc2FnaW5nL3dlYmhvb2tzKSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKlxuICAgKiBOT1RFOiBJbmNvbWluZyB3ZWJob29rcyBjcmVhdGVkIHRocm91Z2ggbGVnYWN5IGN1c3RvbSBpbnRlZ3JhdGlvbnMgaW4gU2xhY2sgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqL1xuICBzbGFja1dlYmhvb2tVcmxTZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLklTZWNyZXRcbn1cblxuLyoqXG4gKiBDcmVhdGVzXG4gKiAtIFNOUyBUb3BpYyB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjdGlvbiBhbGFybXMsIHdpdGggYSBMYW1iZGFcbiAqIHRoYXQgd2lsbCBzZW5kIGEgbWVzc2FnZSB0byBTbGFjayBmb3IgdGhlIGFsYXJtLlxuICogLSBBIHJldXNhYmxlIExhbWJkYSB0aGF0IGFjY2VwdHMgQ2xvdWRXYXRjaCBMb2dzIHN1YnNjcmlwdGlvbiBldmVudHMgYW5kIHBvc3RzXG4gKiBmb3JtYXR0ZWQgZXJyb3IgbWVzc2FnZXMgdG8gU2xhY2suXG4gKi9cbmV4cG9ydCBjbGFzcyBTbGFja0FsYXJtIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgYWxhcm1Ub3BpYzogc25zLlRvcGljXG4gIHB1YmxpYyByZWFkb25seSBzbnNBY3Rpb246IGNsb3Vkd2F0Y2hBY3Rpb25zLlNuc0FjdGlvblxuICBwdWJsaWMgcmVhZG9ubHkgbG9nSGFuZGxlcjogbGFtYmRhLkZ1bmN0aW9uXG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2xhY2tBbGFybVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5hbGFybVRvcGljID0gbmV3IHNucy5Ub3BpYyh0aGlzLCBcIlRvcGljXCIpXG5cbiAgICB0aGlzLnNuc0FjdGlvbiA9IG5ldyBjbG91ZHdhdGNoQWN0aW9ucy5TbnNBY3Rpb24odGhpcy5hbGFybVRvcGljKVxuXG4gICAgY29uc3Qgc2xhY2tMYW1iZGEgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsIFwiRnVuY3Rpb25cIiwge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KFxuICAgICAgICBwYXRoLmpvaW4oX19kaXIsIFwiLi4vLi4vYXNzZXRzL3NsYWNrLWFsYXJtLWxhbWJkYVwiKSxcbiAgICAgICksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJSZWNlaXZlcyBDbG91ZFdhdGNoIEFsYXJtcyB0aHJvdWdoIFNOUyBhbmQgc2VuZHMgYSBmb3JtYXR0ZWQgdmVyc2lvbiB0byBTbGFja1wiLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoNiksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTTEFDS19VUkxfU0VDUkVUX05BTUU6IHByb3BzLnNsYWNrV2ViaG9va1VybFNlY3JldC5zZWNyZXROYW1lLFxuICAgICAgICBQUk9KRUNUX05BTUU6IHByb3BzLnByb2plY3ROYW1lLFxuICAgICAgICBFTlZJUk9OTUVOVF9OQU1FOiBwcm9wcy5lbnZOYW1lLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgdGhpcy5sb2dIYW5kbGVyID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCBcIkxvZ0hhbmRsZXJcIiwge1xuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KFxuICAgICAgICBwYXRoLmpvaW4oX19kaXIsIFwiLi4vLi4vYXNzZXRzXCIsIFwic2xhY2stZXJyb3ItbG9nLWhhbmRsZXItbGFtYmRhXCIpLFxuICAgICAgKSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlJlY2VpdmVzIENsb3VkV2F0Y2ggTG9ncyBzdWJzY3JpcHRpb24gZXZlbnRzIGFuZCBzZW5kcyBmb3JtYXR0ZWQgZXJyb3JzIHRvIFNsYWNrXCIsXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDEyOCxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzE0LFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBTTEFDS19VUkxfU0VDUkVUX05BTUU6IHByb3BzLnNsYWNrV2ViaG9va1VybFNlY3JldC5zZWNyZXROYW1lLFxuICAgICAgICBQUk9KRUNUX05BTUU6IHByb3BzLnByb2plY3ROYW1lLFxuICAgICAgICBFTlZJUk9OTUVOVF9OQU1FOiBwcm9wcy5lbnZOYW1lLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgcHJvcHMuc2xhY2tXZWJob29rVXJsU2VjcmV0LmdyYW50UmVhZCh0aGlzLmxvZ0hhbmRsZXIpXG4gICAgcHJvcHMuc2xhY2tXZWJob29rVXJsU2VjcmV0LmdyYW50UmVhZChzbGFja0xhbWJkYSlcblxuICAgIHNsYWNrTGFtYmRhLmFkZFBlcm1pc3Npb24oXCJJbnZva2VQZXJtaXNzaW9uXCIsIHtcbiAgICAgIGFjdGlvbjogXCJsYW1iZGE6SW52b2tlRnVuY3Rpb25cIixcbiAgICAgIHByaW5jaXBhbDogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwic25zLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBzb3VyY2VBcm46IHRoaXMuYWxhcm1Ub3BpYy50b3BpY0FybixcbiAgICB9KVxuICAgIHNsYWNrTGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJjbG91ZHdhdGNoOkRlc2NyaWJlQWxhcm1zXCJdLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSksXG4gICAgKVxuXG4gICAgbmV3IHNucy5TdWJzY3JpcHRpb24odGhpcywgXCJTdWJzY3JpcHRpb25cIiwge1xuICAgICAgZW5kcG9pbnQ6IHNsYWNrTGFtYmRhLmZ1bmN0aW9uQXJuLFxuICAgICAgcHJvdG9jb2w6IHNucy5TdWJzY3JpcHRpb25Qcm90b2NvbC5MQU1CREEsXG4gICAgICB0b3BpYzogdGhpcy5hbGFybVRvcGljLFxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
@@ -128,4 +128,4 @@ export function clearCache() {
128
128
  cachedTokenVerifier = undefined;
129
129
  cachedInternalAuthorizationHeader = undefined;
130
130
  }
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by11c2VyLXBvb2wtYXV0aG9yaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGktZ2F0ZXdheS9hdXRob3JpemVycy9jb2duaXRvLXVzZXItcG9vbC1hdXRob3JpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBZ0NuRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUMxQixLQUF5QyxFQUNkLEVBQUU7SUFDN0IsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUE7SUFDL0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFBO0lBQ2hDLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLGtDQUFrQztJQUNsRyxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxTQUFTO1lBQ1osT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQTtRQUNoQyxLQUFLLFNBQVM7WUFDWix3RkFBd0Y7WUFDeEYscUZBQXFGO1lBQ3JGLHlGQUF5RjtZQUN6RixxRUFBcUU7WUFDckUsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNqQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1IsT0FBTztnQkFDTCxZQUFZLEVBQUUsSUFBSTtnQkFDbEIsT0FBTyxFQUFFO29CQUNQLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUztvQkFDMUIsMkJBQTJCLEVB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SCxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWMsQ0FBQyxVQUFrQjtJQUM5QyxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUNsRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUVwRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLFVBQVUsR0FBRyxDQUFDLENBQUE7UUFDM0QsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFBO0lBQ25CLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO0FBQ3hDLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUM5QixLQUFjO0lBRWQsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxLQUFLLElBQUk7UUFDZCxVQUFVLElBQUksS0FBSztRQUNuQixPQUFPLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUTtRQUNsQyxVQUFVLElBQUksS0FBSztRQUNuQixPQUFPLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUNuQyxDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVO0lBQ3hCLG1CQUFtQixHQUFHLFNBQVMsQ0FBQTtJQUMvQixpQ0FBaUMsR0FBRyxTQUFTLENBQUE7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhpcyBsYW1iZGEgdmVyaWZpZXMgYWNjZXNzIHRva2VuIGluIEJlYXJlciBhdXRob3JpemF0aW9uIGhlYWRlciB1c2luZyBDb2duaXRvLlxuICpcbiAqIEV4cGVjdHMgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4gKiAtIFVTRVJfUE9PTF9JRFxuICogLSBSRVFVSVJFRF9TQ09QRSAob3B0aW9uYWwpXG4gKiAgIC0gU2V0IHRoaXMgdG8gcmVxdWlyZSB0aGF0IHRoZSBhY2Nlc3MgdG9rZW4gcGF5bG9hZCBjb250YWlucyB0aGUgZ2l2ZW4gc2NvcGVcbiAqIC0gQ1JFREVOVElBTFNfRk9SX0lOVEVSTkFMX0FVVEhPUklaQVRJT04gKG9wdGlvbmFsKVxuICogICAtIFNlY3JldCBuYW1lIGZyb20gd2hpY2ggdG8gZ2V0IGJhc2ljIGF1dGggY3JlZGVudGlhbHMgdGhhdCBzaG91bGQgYmUgZm9yd2FyZGVkIHRvIGJhY2tlbmRcbiAqICAgICBpbnRlZ3JhdGlvbiBpZiBhdXRoZW50aWNhdGlvbiBzdWNjZWVkc1xuICogICAtIFNlY3JldCB2YWx1ZSBzaG91bGQgZm9sbG93IHRoaXMgZm9ybWF0OiBge1widXNlcm5hbWVcIjpcIjx1c2VybmFtZT5cIixcInBhc3N3b3JkXCI6XCI8cGFzc3dvcmQ+XCJ9YFxuICovXG5cbmltcG9ydCB7IFNlY3JldHNNYW5hZ2VyIH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zZWNyZXRzLW1hbmFnZXJcIlxuaW1wb3J0IHsgQ29nbml0b0p3dFZlcmlmaWVyIH0gZnJvbSBcImF3cy1qd3QtdmVyaWZ5XCJcbmltcG9ydCB0eXBlIHsgQ29nbml0b0FjY2Vzc1Rva2VuUGF5bG9hZCB9IGZyb20gXCJhd3Mtand0LXZlcmlmeS9qd3QtbW9kZWxcIlxuaW1wb3J0IHR5cGUge1xuICBBUElHYXRld2F5UmVxdWVzdEF1dGhvcml6ZXJFdmVudFYyLFxuICBBUElHYXRld2F5U2ltcGxlQXV0aG9yaXplclJlc3VsdCxcbn0gZnJvbSBcImF3cy1sYW1iZGFcIlxuXG50eXBlIEF1dGhvcml6ZXJSZXN1bHQgPSBBUElHYXRld2F5U2ltcGxlQXV0aG9yaXplclJlc3VsdCAmIHtcbiAgLyoqXG4gICAqIFJldHVybmluZyBhIGNvbnRleHQgb2JqZWN0IGZyb20gb3VyIGF1dGhvcml6ZXIgYWxsb3dzIG91ciBBUEkgR2F0ZXdheSB0byBhY2Nlc3MgdGhlc2UgdmFyaWFibGVzXG4gICAqIHZpYSBgJHtjb250ZXh0LmF1dGhvcml6ZXIuPHByb3BlcnR5Pn1gLlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktcGFyYW1ldGVyLW1hcHBpbmcuaHRtbFxuICAgKi9cbiAgY29udGV4dD86IHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgdG9rZW4gaXMgdmVyaWZpZWQsIHdlIHJldHVybiB0aGUgYXV0aCBjbGllbnQgSUQgZnJvbSB0aGUgdG9rZW4ncyBjbGFpbXMgYXMgYSBjb250ZXh0XG4gICAgICogdmFyaWFibGUgKG5hbWVkIGBhdXRob3JpemVyLmNsaWVudElkYCkuIFdlIHVzZSB0aGlzIHRvIGluY2x1ZGUgdGhlIHJlcXVlc3RpbmcgY2xpZW50IGluIHRoZVxuICAgICAqIEFQSSBHYXRld2F5IGFjY2VzcyBsb2dzIChzZWUgYGRlZmF1bHRBY2Nlc3NMb2dGb3JtYXRgIGluIG91ciBgQXBpR2F0ZXdheWAgY29uc3RydWN0KS4gWW91IGNhblxuICAgICAqIGFsc28gdXNlIHRoaXMgd2hlbiBtYXBwaW5nIHBhcmFtZXRlcnMgdG8gdGhlIGJhY2tlbmQgaW50ZWdyYXRpb24gKHNlZVxuICAgICAqIGBBbGJJbnRlZ3JhdGlvblByb3BzLm1hcFBhcmFtZXRlcnNgIG9uIHRoZSBgQXBpR2F0ZXdheWAgY29uc3RydWN0KS5cbiAgICAgKi9cbiAgICBjbGllbnRJZDogc3RyaW5nXG4gICAgLyoqXG4gICAgICogSWYgYENSRURFTlRJQUxTX0ZPUl9JTlRFUk5BTF9BVVRIT1JJWkFUSU9OYCBpcyBwcm92aWRlZCwgd2Ugd2FudCB0byBmb3J3YXJkIGJhc2ljIGF1dGhcbiAgICAgKiBjcmVkZW50aWFscyB0byBvdXIgYmFja2VuZCwgYXMgYW4gYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBsYXllci4gU2VlIHRoZSBkb2NzdHJpbmcgb25cbiAgICAgKiBgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplclByb3BzLmJhc2ljQXV0aEZvckludGVybmFsQXV0aG9yaXphdGlvbmAgaW4gdGhlIGBBcGlHYXRld2F5YFxuICAgICAqIGNvbnN0cnVjdCBmb3IgbW9yZSBvbiB0aGlzLlxuICAgICAqL1xuICAgIGludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlcj86IHN0cmluZ1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKFxuICBldmVudDogQVBJR2F0ZXdheVJlcXVlc3RBdXRob3JpemVyRXZlbnRWMixcbik6IFByb21pc2U8QXV0aG9yaXplclJlc3VsdD4gPT4ge1xuICBjb25zdCBhdXRoSGVhZGVyID0gZXZlbnQuaGVhZGVycz8uYXV0aG9yaXphdGlvblxuICBpZiAoIWF1dGhIZWFkZXI/LnN0YXJ0c1dpdGgoXCJCZWFyZXIgXCIpKSB7XG4gICAgcmV0dXJuIHsgaXNBdXRob3JpemVkOiBmYWxzZSB9XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBhd2FpdCB2ZXJpZnlBY2Nlc3NUb2tlbihhdXRoSGVhZGVyLnN1YnN0cmluZyg3KSkgLy8gc3Vic3RyaW5nKDcpID09IGFmdGVyICdCZWFyZXIgJ1xuICBzd2l0Y2ggKHJlc3VsdCkge1xuICAgIGNhc2UgXCJJTlZBTElEXCI6XG4gICAgICByZXR1cm4geyBpc0F1dGhvcml6ZWQ6IGZhbHNlIH1cbiAgICBjYXNlIFwiRVhQSVJFRFwiOlxuICAgICAgLy8gV2Ugd2FudCB0byByZXR1cm4gNDAxIFVuYXV0aG9yaXplZCBmb3IgZXhwaXJlZCB0b2tlbnMsIHNvIHRoZSBjbGllbnQga25vd3MgdG8gcmVmcmVzaFxuICAgICAgLy8gdGhlaXIgdG9rZW4gd2hlbiByZWNlaXZpbmcgdGhpcyBzdGF0dXMgY29kZS4gQVBJIEdhdGV3YXkgTGFtYmRhIGF1dGhvcml6ZXJzIHJldHVyblxuICAgICAgLy8gNDAzIEZvcmJpZGRlbiBmb3Ige2lzQXV0aG9yaXplZDogZmFsc2V9LCBidXQgdGhlcmUgaXMgYSB3YXkgdG8gcmV0dXJuIDQwMTogdGhyb3dpbmcgYW5cbiAgICAgIC8vIGVycm9yIHdpdGggdGhpcyBleGFjdCBzdHJpbmcuIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTk2NTg5MFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hdXRob3JpemVkXCIpXG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNBdXRob3JpemVkOiB0cnVlLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgY2xpZW50SWQ6IHJlc3VsdC5jbGllbnRfaWQsXG4gICAgICAgICAgaW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyOiBhd2FpdCBnZXRJbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXIoKSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqIERlY29kZXMgYW5kIHZlcmlmaWVzIHRoZSBnaXZlbiB0b2tlbiBhZ2FpbnN0IENvZ25pdG8uICovXG5hc3luYyBmdW5jdGlvbiB2ZXJpZnlBY2Nlc3NUb2tlbihcbiAgdG9rZW46IHN0cmluZyxcbik6IFByb21pc2U8Q29nbml0b0FjY2Vzc1Rva2VuUGF5bG9hZCB8IFwiRVhQSVJFRFwiIHwgXCJJTlZBTElEXCI+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB0b2tlblZlcmlmaWVyID0gZ2V0VG9rZW5WZXJpZmllcigpXG4gICAgLy8gTXVzdCBhd2FpdCBoZXJlIGluc3RlYWQgb2YgcmV0dXJuaW5nIHRoZSBwcm9taXNlIGRpcmVjdGx5LCBzbyB0aGF0IGVycm9ycyBjYW4gYmUgY2F1Z2h0IGluXG4gICAgLy8gdGhpcyBmdW5jdGlvblxuICAgIHJldHVybiBhd2FpdCB0b2tlblZlcmlmaWVyLnZlcmlmeSh0b2tlbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIElmIHRoZSBKV1QgaGFzIGV4cGlyZWQsIGF3cy1qd3QtdmVyaWZ5IHRocm93cyB0aGlzIGVycm9yOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3NsYWJzL2F3cy1qd3QtdmVyaWZ5L2Jsb2IvOGQ4ZjcxNGQ3MjgxOTEzZWNkNjYwMTQ3ZjVjMzAzMTE0Nzk2MDFjMS9zcmMvand0LnRzI0wxOTdcbiAgICAvLyBXZSBjYW4ndCBjaGVjayBpbnN0YW5jZW9mIG9uIHRoYXQgZXJyb3IgY2xhc3MsIHNpbmNlIGl0J3Mgbm90IGV4cG9ydGVkLCBzbyB0aGlzIGlzIHRoZSBuZXh0XG4gICAgLy8gYmVzdCB0aGluZy5cbiAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubWVzc2FnZT8uaW5jbHVkZXMoXCJUb2tlbiBleHBpcmVkXCIpKSB7XG4gICAgICByZXR1cm4gXCJFWFBJUkVEXCJcbiAgICB9XG4gICAgcmV0dXJuIFwiSU5WQUxJRFwiXG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgVG9rZW5WZXJpZmllciA9IHtcbiAgdmVyaWZ5OiAoYWNjZXNzVG9rZW46IHN0cmluZykgPT4gUHJvbWlzZTxDb2duaXRvQWNjZXNzVG9rZW5QYXlsb2FkPlxufVxuXG4vKipcbiAqIFdlIGNhY2hlIHRoZSB2ZXJpZmllciBpbiB0aGlzIGdsb2JhbCB2YXJpYWJsZSwgc28gdGhhdCBzdWJzZXF1ZW50IGludm9jYXRpb25zIG9mIGEgaG90IGxhbWJkYVxuICogd2lsbCByZS11c2UgdGhpcy5cbiAqL1xubGV0IGNhY2hlZFRva2VuVmVyaWZpZXI6IFRva2VuVmVyaWZpZXIgfCB1bmRlZmluZWRcblxuZnVuY3Rpb24gZ2V0VG9rZW5WZXJpZmllcigpOiBUb2tlblZlcmlmaWVyIHtcbiAgaWYgKGNhY2hlZFRva2VuVmVyaWZpZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlZFRva2VuVmVyaWZpZXIgPSBkZXBlbmRlbmNpZXMuY3JlYXRlVG9rZW5WZXJpZmllcigpXG4gIH1cbiAgcmV0dXJuIGNhY2hlZFRva2VuVmVyaWZpZXJcbn1cblxuLyoqIEZvciBvdmVycmlkaW5nIGRlcGVuZGVuY3kgY3JlYXRpb24gaW4gdGVzdHMuICovXG5leHBvcnQgY29uc3QgZGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVUb2tlblZlcmlmaWVyOiAoKTogVG9rZW5WZXJpZmllciA9PiB7XG4gICAgY29uc3QgdXNlclBvb2xJZCA9IHByb2Nlc3MuZW52LlVTRVJfUE9PTF9JRFxuICAgIGlmICghdXNlclBvb2xJZCkge1xuICAgICAgY29uc29sZS5lcnJvcihcIlVTRVJfUE9PTF9JRCBlbnYgdmFyaWFibGUgaXMgbm90IGRlZmluZWRcIilcbiAgICAgIHRocm93IG5ldyBFcnJvcigpXG4gICAgfVxuXG4gICAgcmV0dXJuIENvZ25pdG9Kd3RWZXJpZmllci5jcmVhdGUoe1xuICAgICAgdXNlclBvb2xJZCxcbiAgICAgIHRva2VuVXNlOiBcImFjY2Vzc1wiLFxuICAgICAgY2xpZW50SWQ6IG51bGwsXG4gICAgICBzY29wZTogcHJvY2Vzcy5lbnYuUkVRVUlSRURfU0NPUEUgfHwgdW5kZWZpbmVkLCAvLyBgfHwgdW5kZWZpbmVkYCB0byBkaXNjYXJkIGVtcHR5IHN0cmluZ1xuICAgIH0pXG4gIH0sXG4gIGNyZWF0ZVNlY3JldHNNYW5hZ2VyOiAoKSA9PiBuZXcgU2VjcmV0c01hbmFnZXIoKSxcbn1cblxuLyoqIENhY2hlIHRoaXMgdmFsdWUsIHNvIHRoYXQgc3Vic2VxdWVudCBsYW1iZGEgaW52b2NhdGlvbnMgZG9uJ3QgaGF2ZSB0byByZWZldGNoLiAqL1xubGV0IGNhY2hlZEludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbmFzeW5jIGZ1bmN0aW9uIGdldEludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlcigpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoY2FjaGVkSW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBzZWNyZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgcHJvY2Vzcy5lbnYuQ1JFREVOVElBTFNfRk9SX0lOVEVSTkFMX0FVVEhPUklaQVRJT05cbiAgICBpZiAoIXNlY3JldE5hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjYWNoZWRJbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXIgPVxuICAgICAgYXdhaXQgZ2V0U2VjcmV0QXNCYXNpY0F1dGhIZWFkZXIoc2VjcmV0TmFtZSlcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRJbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXJcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U2VjcmV0QXNCYXNpY0F1dGhIZWFkZXIoc2VjcmV0TmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCBnZXRTZWNyZXRWYWx1ZShzZWNyZXROYW1lKVxuICBpZiAoIXNlY3JldEhhc0V4cGVjdGVkRm9ybWF0KGNyZWRlbnRpYWxzKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBgQmFzaWMgYXV0aCBjcmVkZW50aWFscyBzZWNyZXQgZGlkIG5vdCBmb2xsb3cgZXhwZWN0ZWQgZm9ybWF0IChzZWNyZXQgbmFtZTogJyR7c2VjcmV0TmFtZX0nKWAsXG4gICAgKVxuICAgIHRocm93IG5ldyBFcnJvcigpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIFwiQmFzaWMgXCIgK1xuICAgIEJ1ZmZlci5mcm9tKGAke2NyZWRlbnRpYWxzLnVzZXJuYW1lfToke2NyZWRlbnRpYWxzLnBhc3N3b3JkfWApLnRvU3RyaW5nKFxuICAgICAgXCJiYXNlNjRcIixcbiAgICApXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0U2VjcmV0VmFsdWUoc2VjcmV0TmFtZTogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gIGNvbnN0IGNsaWVudCA9IGRlcGVuZGVuY2llcy5jcmVhdGVTZWNyZXRzTWFuYWdlcigpXG4gIGNvbnN0IHNlY3JldCA9IGF3YWl0IGNsaWVudC5nZXRTZWNyZXRWYWx1ZSh7IFNlY3JldElkOiBzZWNyZXROYW1lIH0pXG5cbiAgaWYgKCFzZWNyZXQuU2VjcmV0U3RyaW5nKSB7XG4gICAgY29uc29sZS5lcnJvcihgU2VjcmV0IHZhbHVlIG5vdCBmb3VuZCBmb3IgJyR7c2VjcmV0TmFtZX0nYClcbiAgICB0aHJvdyBuZXcgRXJyb3IoKVxuICB9XG5cbiAgcmV0dXJuIEpTT04ucGFyc2Uoc2VjcmV0LlNlY3JldFN0cmluZylcbn1cblxuZnVuY3Rpb24gc2VjcmV0SGFzRXhwZWN0ZWRGb3JtYXQoXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdmFsdWUgaXMgeyB1c2VybmFtZTogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH0ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgXCJ1c2VybmFtZVwiIGluIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlLnVzZXJuYW1lID09PSBcInN0cmluZ1wiICYmXG4gICAgXCJwYXNzd29yZFwiIGluIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlLnBhc3N3b3JkID09PSBcInN0cmluZ1wiXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQ2FjaGUoKSB7XG4gIGNhY2hlZFRva2VuVmVyaWZpZXIgPSB1bmRlZmluZWRcbiAgY2FjaGVkSW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyID0gdW5kZWZpbmVkXG59XG4iXX0=
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nbml0by11c2VyLXBvb2wtYXV0aG9yaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGktZ2F0ZXdheS9hdXRob3JpemVycy9jb2duaXRvLXVzZXItcG9vbC1hdXRob3JpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBZ0NuRCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUMxQixLQUF5QyxFQUNkLEVBQUU7SUFDN0IsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUE7SUFDL0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFBO0lBQ2hDLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQSxDQUFDLGtDQUFrQztJQUNsRyxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxTQUFTO1lBQ1osT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQTtRQUNoQyxLQUFLLFNBQVM7WUFDWix3RkFBd0Y7WUFDeEYscUZBQXFGO1lBQ3JGLHlGQUF5RjtZQUN6RixxRUFBcUU7WUFDckUsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNqQyxTQUFTLENBQUM7WUFDUixPQUFPO2dCQUNMLFlBQVksRUFBRSxJQUFJO2dCQUNsQixPQUFPLEVBQUU7b0JBQ1AsUUFBUSxFQUFFLE1BQU0sQ0FBQyxTQUFTO29CQUMxQiwyQkFBMkIsRUFBRSxNQUFNLDhC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RCxLQUFLLFVBQVUsY0FBYyxDQUFDLFVBQWtCO0lBQzlDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO0lBQ2xELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO0lBRXBFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsVUFBVSxHQUFHLENBQUMsQ0FBQTtRQUMzRCxNQUFNLElBQUksS0FBSyxFQUFFLENBQUE7SUFDbkIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUE7QUFDeEMsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzlCLEtBQWM7SUFFZCxPQUFPLENBQ0wsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixLQUFLLEtBQUssSUFBSTtRQUNkLFVBQVUsSUFBSSxLQUFLO1FBQ25CLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRO1FBQ2xDLFVBQVUsSUFBSSxLQUFLO1FBQ25CLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQ25DLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVU7SUFDeEIsbUJBQW1CLEdBQUcsU0FBUyxDQUFBO0lBQy9CLGlDQUFpQyxHQUFHLFNBQVMsQ0FBQTtBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIGxhbWJkYSB2ZXJpZmllcyBhY2Nlc3MgdG9rZW4gaW4gQmVhcmVyIGF1dGhvcml6YXRpb24gaGVhZGVyIHVzaW5nIENvZ25pdG8uXG4gKlxuICogRXhwZWN0cyB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlczpcbiAqIC0gVVNFUl9QT09MX0lEXG4gKiAtIFJFUVVJUkVEX1NDT1BFIChvcHRpb25hbClcbiAqICAgLSBTZXQgdGhpcyB0byByZXF1aXJlIHRoYXQgdGhlIGFjY2VzcyB0b2tlbiBwYXlsb2FkIGNvbnRhaW5zIHRoZSBnaXZlbiBzY29wZVxuICogLSBDUkVERU5USUFMU19GT1JfSU5URVJOQUxfQVVUSE9SSVpBVElPTiAob3B0aW9uYWwpXG4gKiAgIC0gU2VjcmV0IG5hbWUgZnJvbSB3aGljaCB0byBnZXQgYmFzaWMgYXV0aCBjcmVkZW50aWFscyB0aGF0IHNob3VsZCBiZSBmb3J3YXJkZWQgdG8gYmFja2VuZFxuICogICAgIGludGVncmF0aW9uIGlmIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRzXG4gKiAgIC0gU2VjcmV0IHZhbHVlIHNob3VsZCBmb2xsb3cgdGhpcyBmb3JtYXQ6IGB7XCJ1c2VybmFtZVwiOlwiPHVzZXJuYW1lPlwiLFwicGFzc3dvcmRcIjpcIjxwYXNzd29yZD5cIn1gXG4gKi9cblxuaW1wb3J0IHsgU2VjcmV0c01hbmFnZXIgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNlY3JldHMtbWFuYWdlclwiXG5pbXBvcnQgeyBDb2duaXRvSnd0VmVyaWZpZXIgfSBmcm9tIFwiYXdzLWp3dC12ZXJpZnlcIlxuaW1wb3J0IHR5cGUgeyBDb2duaXRvQWNjZXNzVG9rZW5QYXlsb2FkIH0gZnJvbSBcImF3cy1qd3QtdmVyaWZ5L2p3dC1tb2RlbFwiXG5pbXBvcnQgdHlwZSB7XG4gIEFQSUdhdGV3YXlSZXF1ZXN0QXV0aG9yaXplckV2ZW50VjIsXG4gIEFQSUdhdGV3YXlTaW1wbGVBdXRob3JpemVyUmVzdWx0LFxufSBmcm9tIFwiYXdzLWxhbWJkYVwiXG5cbnR5cGUgQXV0aG9yaXplclJlc3VsdCA9IEFQSUdhdGV3YXlTaW1wbGVBdXRob3JpemVyUmVzdWx0ICYge1xuICAvKipcbiAgICogUmV0dXJuaW5nIGEgY29udGV4dCBvYmplY3QgZnJvbSBvdXIgYXV0aG9yaXplciBhbGxvd3Mgb3VyIEFQSSBHYXRld2F5IHRvIGFjY2VzcyB0aGVzZSB2YXJpYWJsZXNcbiAgICogdmlhIGAke2NvbnRleHQuYXV0aG9yaXplci48cHJvcGVydHk+fWAuXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1wYXJhbWV0ZXItbWFwcGluZy5odG1sXG4gICAqL1xuICBjb250ZXh0Pzoge1xuICAgIC8qKlxuICAgICAqIElmIHRoZSB0b2tlbiBpcyB2ZXJpZmllZCwgd2UgcmV0dXJuIHRoZSBhdXRoIGNsaWVudCBJRCBmcm9tIHRoZSB0b2tlbidzIGNsYWltcyBhcyBhIGNvbnRleHRcbiAgICAgKiB2YXJpYWJsZSAobmFtZWQgYGF1dGhvcml6ZXIuY2xpZW50SWRgKS4gV2UgdXNlIHRoaXMgdG8gaW5jbHVkZSB0aGUgcmVxdWVzdGluZyBjbGllbnQgaW4gdGhlXG4gICAgICogQVBJIEdhdGV3YXkgYWNjZXNzIGxvZ3MgKHNlZSBgZGVmYXVsdEFjY2Vzc0xvZ0Zvcm1hdGAgaW4gb3VyIGBBcGlHYXRld2F5YCBjb25zdHJ1Y3QpLiBZb3UgY2FuXG4gICAgICogYWxzbyB1c2UgdGhpcyB3aGVuIG1hcHBpbmcgcGFyYW1ldGVycyB0byB0aGUgYmFja2VuZCBpbnRlZ3JhdGlvbiAoc2VlXG4gICAgICogYEFsYkludGVncmF0aW9uUHJvcHMubWFwUGFyYW1ldGVyc2Agb24gdGhlIGBBcGlHYXRld2F5YCBjb25zdHJ1Y3QpLlxuICAgICAqL1xuICAgIGNsaWVudElkOiBzdHJpbmdcbiAgICAvKipcbiAgICAgKiBJZiBgQ1JFREVOVElBTFNfRk9SX0lOVEVSTkFMX0FVVEhPUklaQVRJT05gIGlzIHByb3ZpZGVkLCB3ZSB3YW50IHRvIGZvcndhcmQgYmFzaWMgYXV0aFxuICAgICAqIGNyZWRlbnRpYWxzIHRvIG91ciBiYWNrZW5kLCBhcyBhbiBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGxheWVyLiBTZWUgdGhlIGRvY3N0cmluZyBvblxuICAgICAqIGBDb2duaXRvVXNlclBvb2xBdXRob3JpemVyUHJvcHMuYmFzaWNBdXRoRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uYCBpbiB0aGUgYEFwaUdhdGV3YXlgXG4gICAgICogY29uc3RydWN0IGZvciBtb3JlIG9uIHRoaXMuXG4gICAgICovXG4gICAgaW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyPzogc3RyaW5nXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoXG4gIGV2ZW50OiBBUElHYXRld2F5UmVxdWVzdEF1dGhvcml6ZXJFdmVudFYyLFxuKTogUHJvbWlzZTxBdXRob3JpemVyUmVzdWx0PiA9PiB7XG4gIGNvbnN0IGF1dGhIZWFkZXIgPSBldmVudC5oZWFkZXJzPy5hdXRob3JpemF0aW9uXG4gIGlmICghYXV0aEhlYWRlcj8uc3RhcnRzV2l0aChcIkJlYXJlciBcIikpIHtcbiAgICByZXR1cm4geyBpc0F1dGhvcml6ZWQ6IGZhbHNlIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZlcmlmeUFjY2Vzc1Rva2VuKGF1dGhIZWFkZXIuc3Vic3RyaW5nKDcpKSAvLyBzdWJzdHJpbmcoNykgPT0gYWZ0ZXIgJ0JlYXJlciAnXG4gIHN3aXRjaCAocmVzdWx0KSB7XG4gICAgY2FzZSBcIklOVkFMSURcIjpcbiAgICAgIHJldHVybiB7IGlzQXV0aG9yaXplZDogZmFsc2UgfVxuICAgIGNhc2UgXCJFWFBJUkVEXCI6XG4gICAgICAvLyBXZSB3YW50IHRvIHJldHVybiA0MDEgVW5hdXRob3JpemVkIGZvciBleHBpcmVkIHRva2Vucywgc28gdGhlIGNsaWVudCBrbm93cyB0byByZWZyZXNoXG4gICAgICAvLyB0aGVpciB0b2tlbiB3aGVuIHJlY2VpdmluZyB0aGlzIHN0YXR1cyBjb2RlLiBBUEkgR2F0ZXdheSBMYW1iZGEgYXV0aG9yaXplcnMgcmV0dXJuXG4gICAgICAvLyA0MDMgRm9yYmlkZGVuIGZvciB7aXNBdXRob3JpemVkOiBmYWxzZX0sIGJ1dCB0aGVyZSBpcyBhIHdheSB0byByZXR1cm4gNDAxOiB0aHJvd2luZyBhblxuICAgICAgLy8gZXJyb3Igd2l0aCB0aGlzIGV4YWN0IHN0cmluZy4gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxOTY1ODkwXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmF1dGhvcml6ZWRcIilcbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0F1dGhvcml6ZWQ6IHRydWUsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBjbGllbnRJZDogcmVzdWx0LmNsaWVudF9pZCxcbiAgICAgICAgICBpbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXI6IGF3YWl0IGdldEludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlcigpLFxuICAgICAgICB9LFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiogRGVjb2RlcyBhbmQgdmVyaWZpZXMgdGhlIGdpdmVuIHRva2VuIGFnYWluc3QgQ29nbml0by4gKi9cbmFzeW5jIGZ1bmN0aW9uIHZlcmlmeUFjY2Vzc1Rva2VuKFxuICB0b2tlbjogc3RyaW5nLFxuKTogUHJvbWlzZTxDb2duaXRvQWNjZXNzVG9rZW5QYXlsb2FkIHwgXCJFWFBJUkVEXCIgfCBcIklOVkFMSURcIj4ge1xuICB0cnkge1xuICAgIGNvbnN0IHRva2VuVmVyaWZpZXIgPSBnZXRUb2tlblZlcmlmaWVyKClcbiAgICAvLyBNdXN0IGF3YWl0IGhlcmUgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlIHByb21pc2UgZGlyZWN0bHksIHNvIHRoYXQgZXJyb3JzIGNhbiBiZSBjYXVnaHQgaW5cbiAgICAvLyB0aGlzIGZ1bmN0aW9uXG4gICAgcmV0dXJuIGF3YWl0IHRva2VuVmVyaWZpZXIudmVyaWZ5KHRva2VuKVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWYgdGhlIEpXVCBoYXMgZXhwaXJlZCwgYXdzLWp3dC12ZXJpZnkgdGhyb3dzIHRoaXMgZXJyb3I6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3c2xhYnMvYXdzLWp3dC12ZXJpZnkvYmxvYi84ZDhmNzE0ZDcyODE5MTNlY2Q2NjAxNDdmNWMzMDMxMTQ3OTYwMWMxL3NyYy9qd3QudHMjTDE5N1xuICAgIC8vIFdlIGNhbid0IGNoZWNrIGluc3RhbmNlb2Ygb24gdGhhdCBlcnJvciBjbGFzcywgc2luY2UgaXQncyBub3QgZXhwb3J0ZWQsIHNvIHRoaXMgaXMgdGhlIG5leHRcbiAgICAvLyBiZXN0IHRoaW5nLlxuICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlPy5pbmNsdWRlcyhcIlRva2VuIGV4cGlyZWRcIikpIHtcbiAgICAgIHJldHVybiBcIkVYUElSRURcIlxuICAgIH1cbiAgICByZXR1cm4gXCJJTlZBTElEXCJcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBUb2tlblZlcmlmaWVyID0ge1xuICB2ZXJpZnk6IChhY2Nlc3NUb2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENvZ25pdG9BY2Nlc3NUb2tlblBheWxvYWQ+XG59XG5cbi8qKlxuICogV2UgY2FjaGUgdGhlIHZlcmlmaWVyIGluIHRoaXMgZ2xvYmFsIHZhcmlhYmxlLCBzbyB0aGF0IHN1YnNlcXVlbnQgaW52b2NhdGlvbnMgb2YgYSBob3QgbGFtYmRhXG4gKiB3aWxsIHJlLXVzZSB0aGlzLlxuICovXG5sZXQgY2FjaGVkVG9rZW5WZXJpZmllcjogVG9rZW5WZXJpZmllciB8IHVuZGVmaW5lZFxuXG5mdW5jdGlvbiBnZXRUb2tlblZlcmlmaWVyKCk6IFRva2VuVmVyaWZpZXIge1xuICBpZiAoY2FjaGVkVG9rZW5WZXJpZmllciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2FjaGVkVG9rZW5WZXJpZmllciA9IGRlcGVuZGVuY2llcy5jcmVhdGVUb2tlblZlcmlmaWVyKClcbiAgfVxuICByZXR1cm4gY2FjaGVkVG9rZW5WZXJpZmllclxufVxuXG4vKiogRm9yIG92ZXJyaWRpbmcgZGVwZW5kZW5jeSBjcmVhdGlvbiBpbiB0ZXN0cy4gKi9cbmV4cG9ydCBjb25zdCBkZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZVRva2VuVmVyaWZpZXI6ICgpOiBUb2tlblZlcmlmaWVyID0+IHtcbiAgICBjb25zdCB1c2VyUG9vbElkID0gcHJvY2Vzcy5lbnYuVVNFUl9QT09MX0lEXG4gICAgaWYgKCF1c2VyUG9vbElkKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiVVNFUl9QT09MX0lEIGVudiB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZFwiKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKClcbiAgICB9XG5cbiAgICByZXR1cm4gQ29nbml0b0p3dFZlcmlmaWVyLmNyZWF0ZSh7XG4gICAgICB1c2VyUG9vbElkLFxuICAgICAgdG9rZW5Vc2U6IFwiYWNjZXNzXCIsXG4gICAgICBjbGllbnRJZDogbnVsbCxcbiAgICAgIHNjb3BlOiBwcm9jZXNzLmVudi5SRVFVSVJFRF9TQ09QRSB8fCB1bmRlZmluZWQsIC8vIGB8fCB1bmRlZmluZWRgIHRvIGRpc2NhcmQgZW1wdHkgc3RyaW5nXG4gICAgfSlcbiAgfSxcbiAgY3JlYXRlU2VjcmV0c01hbmFnZXI6ICgpID0+IG5ldyBTZWNyZXRzTWFuYWdlcigpLFxufVxuXG4vKiogQ2FjaGUgdGhpcyB2YWx1ZSwgc28gdGhhdCBzdWJzZXF1ZW50IGxhbWJkYSBpbnZvY2F0aW9ucyBkb24ndCBoYXZlIHRvIHJlZmV0Y2guICovXG5sZXQgY2FjaGVkSW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuYXN5bmMgZnVuY3Rpb24gZ2V0SW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmIChjYWNoZWRJbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHNlY3JldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBwcm9jZXNzLmVudi5DUkVERU5USUFMU19GT1JfSU5URVJOQUxfQVVUSE9SSVpBVElPTlxuICAgIGlmICghc2VjcmV0TmFtZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNhY2hlZEludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlciA9XG4gICAgICBhd2FpdCBnZXRTZWNyZXRBc0Jhc2ljQXV0aEhlYWRlcihzZWNyZXROYW1lKVxuICB9XG5cbiAgcmV0dXJuIGNhY2hlZEludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlclxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTZWNyZXRBc0Jhc2ljQXV0aEhlYWRlcihzZWNyZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IGdldFNlY3JldFZhbHVlKHNlY3JldE5hbWUpXG4gIGlmICghc2VjcmV0SGFzRXhwZWN0ZWRGb3JtYXQoY3JlZGVudGlhbHMpKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBCYXNpYyBhdXRoIGNyZWRlbnRpYWxzIHNlY3JldCBkaWQgbm90IGZvbGxvdyBleHBlY3RlZCBmb3JtYXQgKHNlY3JldCBuYW1lOiAnJHtzZWNyZXROYW1lfScpYCxcbiAgICApXG4gICAgdGhyb3cgbmV3IEVycm9yKClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgXCJCYXNpYyBcIiArXG4gICAgQnVmZmVyLmZyb20oYCR7Y3JlZGVudGlhbHMudXNlcm5hbWV9OiR7Y3JlZGVudGlhbHMucGFzc3dvcmR9YCkudG9TdHJpbmcoXG4gICAgICBcImJhc2U2NFwiLFxuICAgIClcbiAgKVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRTZWNyZXRWYWx1ZShzZWNyZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPHVua25vd24+IHtcbiAgY29uc3QgY2xpZW50ID0gZGVwZW5kZW5jaWVzLmNyZWF0ZVNlY3JldHNNYW5hZ2VyKClcbiAgY29uc3Qgc2VjcmV0ID0gYXdhaXQgY2xpZW50LmdldFNlY3JldFZhbHVlKHsgU2VjcmV0SWQ6IHNlY3JldE5hbWUgfSlcblxuICBpZiAoIXNlY3JldC5TZWNyZXRTdHJpbmcpIHtcbiAgICBjb25zb2xlLmVycm9yKGBTZWNyZXQgdmFsdWUgbm90IGZvdW5kIGZvciAnJHtzZWNyZXROYW1lfSdgKVxuICAgIHRocm93IG5ldyBFcnJvcigpXG4gIH1cblxuICByZXR1cm4gSlNPTi5wYXJzZShzZWNyZXQuU2VjcmV0U3RyaW5nKVxufVxuXG5mdW5jdGlvbiBzZWNyZXRIYXNFeHBlY3RlZEZvcm1hdChcbiAgdmFsdWU6IHVua25vd24sXG4pOiB2YWx1ZSBpcyB7IHVzZXJuYW1lOiBzdHJpbmc7IHBhc3N3b3JkOiBzdHJpbmcgfSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICBcInVzZXJuYW1lXCIgaW4gdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUudXNlcm5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICBcInBhc3N3b3JkXCIgaW4gdmFsdWUgJiZcbiAgICB0eXBlb2YgdmFsdWUucGFzc3dvcmQgPT09IFwic3RyaW5nXCJcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJDYWNoZSgpIHtcbiAgY2FjaGVkVG9rZW5WZXJpZmllciA9IHVuZGVmaW5lZFxuICBjYWNoZWRJbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXIgPSB1bmRlZmluZWRcbn1cbiJdfQ==
@@ -532,4 +532,4 @@ function shortHash(str) {
532
532
  // which is fine
533
533
  return createHash("sha1").update(str).digest("hex").substring(0, 10);
534
534
  }
535
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1hcGktZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGktZ2F0ZXdheS9odHRwLWFwaS1nYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDeEMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN4QyxPQUFPLEtBQUssR0FBRyxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLEtBQUssS0FBSyxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sS0FBSyxXQUFXLE1BQU0sMENBQTBDLENBQUE7QUFDdkUsT0FBTyxLQUFLLFlBQVksTUFBTSwyQ0FBMkMsQ0FBQTtBQUt6RSxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFBO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUE7QUFDaEQsT0FBTyxLQUFLLFlBQVksTUFBTSwrQkFBK0IsQ0FBQTtBQUU3RCxPQUFPLEtBQUssY0FBYyxNQUFNLGdDQUFnQyxDQUFBO0FBRWhFLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixHQUVyQixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQTJCLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXBFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7QUFvZTFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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Y0FBYyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDcEMsS0FBSyxFQUNMLEdBQUcsRUFBRSxpQkFBaUIsRUFDdEIsS0FBSyxDQUFDLDhCQUE4QixDQUNyQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDMUIsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVELDREQUE0RDtBQUM1RCxTQUFTLFNBQVMsQ0FBQyxHQUFXO0lBQzVCLGlHQUFpRztJQUNqRyxnQkFBZ0I7SUFDaEIsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBQ3RFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVIYXNoIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCJcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSBcIm5vZGU6dXJsXCJcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIlxuaW1wb3J0ICogYXMgYXBpZ3cgZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djJcIlxuaW1wb3J0ICogYXMgYXV0aG9yaXplcnMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5djItYXV0aG9yaXplcnNcIlxuaW1wb3J0ICogYXMgaW50ZWdyYXRpb25zIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyLWludGVncmF0aW9uc1wiXG5pbXBvcnQgdHlwZSB7IElVc2VyUG9vbCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY29nbml0b1wiXG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiXG5pbXBvcnQgdHlwZSAqIGFzIGVsYiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjJcIlxuaW1wb3J0IHR5cGUgKiBhcyBldmVudHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIlxuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCJcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiXG5pbXBvcnQgKiBhcyBsYW1iZGFOb2RlanMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGEtbm9kZWpzXCJcbmltcG9ydCB0eXBlICogYXMgbG9ncyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxvZ3NcIlxuaW1wb3J0ICogYXMgc2VjcmV0c21hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiXG5pbXBvcnQgdHlwZSAqIGFzIHNxcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiXG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCJcbmltcG9ydCB7IHRhZ1Jlc291cmNlcyB9IGZyb20gXCIuLi90YWdzXCJcbmltcG9ydCB7XG4gIEFwaUdhdGV3YXlBY2Nlc3NMb2dzLFxuICB0eXBlIEFwaUdhdGV3YXlBY2Nlc3NMb2dzUHJvcHMsXG59IGZyb20gXCIuL2FjY2Vzcy1sb2dzXCJcbmltcG9ydCB7IHR5cGUgQXBpR2F0ZXdheURuc1Byb3BzLCBBcGlHYXRld2F5RG9tYWluIH0gZnJvbSBcIi4vZG9tYWluXCJcblxuY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKVxuY29uc3QgX19kaXJuYW1lID0gcGF0aC5kaXJuYW1lKF9fZmlsZW5hbWUpXG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSB7QGxpbmsgQXBpR2F0ZXdheX0gY29uc3RydWN0LlxuICpcbiAqIEBhdXRob3IgS3Jpc3RpYW4gUmVrc3RhZCA8a3JlQGNhcHJhY29uc3VsdGluZy5ubz5cbiAqIEBhdXRob3IgSGVybWFubiBNw7hya3JpZCA8aGVtQGxpZmxpZy5ubz5cbiAqL1xuZXhwb3J0IHR5cGUgQXBpR2F0ZXdheVByb3BzPEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IHtcbiAgLyoqIFNldHRpbmdzIGZvciB0aGUgZXh0ZXJuYWwtZmFjaW5nIHBhcnQgb2YgdGhlIEFQSS1HVy4gKi9cbiAgZG5zOiBBcGlHYXRld2F5RG5zUHJvcHNcblxuICAvKipcbiAgICogSWYgbm8gaW50ZWdyYXRpb24gaXMgc3BlY2lmaWVkIGZvciBhIHJvdXRlLCB0aGlzIGludGVncmF0aW9uIGlzIHVzZWQuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgSW50ZWdyYXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICovXG4gIGRlZmF1bHRJbnRlZ3JhdGlvbj86IEludGVncmF0aW9uUHJvcHNcblxuICAvKipcbiAgICogSWYgbm8gYXV0aG9yaXphdGlvbiBpcyBzcGVjaWZpZWQgZm9yIGEgcm91dGUsIHRoaXMgYXV0aG9yaXphdGlvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIEF1dGhvcml6YXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiAgICovXG4gIGRlZmF1bHRBdXRob3JpemF0aW9uPzogQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUPlxuXG4gIHJvdXRlczogQXBpR2F0ZXdheVJvdXRlPEF1dGhTY29wZXNUPltdXG5cbiAgLyoqXG4gICAqIFRoZSBBUEktR1cgYWNjZXNzIGxvZ3MgZm9yIHRoZSBgJGRlZmF1bHRgIHN0YWdlIGFyZSBrZXB0LlxuICAgKiBUaGlzIGhhcyBvcHRpb25zIGZvciB0aGUgbG9ncy5cbiAgICovXG4gIGFjY2Vzc0xvZ3M/OiBBcGlHYXRld2F5QWNjZXNzTG9nc1Byb3BzXG5cbiAgLyoqXG4gICAqIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHJvdXRlLWxldmVsIG1ldHJpY3MuXG4gICAqIFRoaXMgY2FuIGluY3JlYXNlIENsb3VkV2F0Y2ggY29zdHMgd2hlbiBub3QgZGlzYWJsZWQuXG4gICAqXG4gICAqIFNlZSBbQVdTOiBXb3JraW5nIHdpdGggbWV0cmljcyBmb3IgSFRUUCBBUElzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbWV0cmljcy5odG1sP2ljbXBpZD1hcGlnYXRld2F5X2NvbnNvbGVfaGVscCM6fjp0ZXh0PWFuZCUyMHN0YWdlJTIwSUQuLSxBcGlJZCUyQyUyMFN0YWdlJTJDJTIwUm91dGUsLUZpbHRlcnMlMjBBUEklMjBHYXRld2F5KVxuICAgKiBmb3IgbW9yZSBpbmZvLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBkZXRhaWxlZE1ldHJpY3M/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFRocm90dGxpbmcgb2YgcmVxdWVzdHMuXG4gICAqIElmIG5vdCBzZXQsIHRoZSBBV1MgZGVmYXVsdCBvZiA1MDAwIGJ1cnN0IGFuZCAxMDAwMCByYXRlIGlzIHVzZWQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHRocm90dGxpbmcgaXMgcGVyLWFjY291bnQsIGFuZCBjb3VudHMgYWxsIEFQSXMgaW4gdGhlIGFjY291bnQgYW5kIHJlZ2lvbi5cbiAgICogSWYgeW91IGhhdmUgYW5vdGhlciBBUEkgaW4gdGhpcyByZWdpb24gZ2V0dGluZyAxMF8wMDAgcmVxdWVzdCByYXRlLCBpdCBtYXkgaW1wYWN0IHRoaXMgQVBJIGFzIHdlbGwuXG4gICAqL1xuICB0aHJvdHRsaW5nPzoge1xuICAgIC8qKlxuICAgICAqIEdvaW5nIG92ZXIgYDVfMDAwYCBtYXkgcmVxdWlyZSB5b3UgdG8gY29udGFjdCBBV1MgU3VwcG9ydCAtIHRoZXkgYXJlIGFjY291bnQgYm91bmQuXG4gICAgICovXG4gICAgYnVyc3Q/OiBudW1iZXJcbiAgICAvKipcbiAgICAgKiBHb2luZyBvdmVyIGAxMF8wMDBgIG1heSByZXF1aXJlIHlvdSB0byBjb250YWN0IEFXUyBTdXBwb3J0IC0gdGhleSBhcmUgYWNjb3VudCBib3VuZC5cbiAgICAgKi9cbiAgICByYXRlPzogbnVtYmVyXG4gIH1cblxuICAvKipcbiAgICogU2V0cyBDT1JTIGhlYWRlcnMgb24gcmVzcG9uc2VzIGZyb20gdGhlIEFQSSBHYXRld2F5IHRvIGFsbG93IGFsbCBvcmlnaW5zLCBoZWFkZXJzIGFuZCBtZXRob2RzLlxuICAgKiBVc2VmdWwgaWYgeW91ciBBUEkgc2hvdWxkIGJlIGFjY2Vzc2VkIGJ5IGFueSBicm93c2VyLlxuICAgKi9cbiAgY29yc0FsbG93QWxsPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBJZiBzb21lIHNldHRpbmdzIGluIHRoaXMgY29uc3RydWN0IGRvIG5vdCB3b3JrIGZvciB5b3UsIHRoaXMgaXMgYW4gZXNjYXBlIGhhdGNoIG1lY2hhbmlzbSB0b1xuICAgKiBvdmVycmlkZSBhbnl0aGluZy5cbiAgICovXG4gIHByb3BzT3ZlcnJpZGU/OiB7XG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGUgc2V0dGluZ3MgZm9yIHRoZSB7QGxpbmsgYXBpZ3cuSHR0cEFwaX0gKGFjY2Vzc2libGUgaW4ge0BsaW5rIEFwaUdhdGV3YXkuaHR0cEFwaX0pLlxuICAgICAqXG4gICAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgZnJvbnRlbmQgYWNjZXNzaW5nIHRoaXMgQVBJLCB5b3UgbWlnaHQgd2FudCB0byBzZXRcbiAgICAgKiBbQ09SUyBwcmVmbGlnaHRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvYXBpL3YxL2RvY3MvYXdzLWFwaWdhdGV3YXl2Mi1yZWFkbWUuaHRtbCNjcm9zcy1vcmlnaW4tcmVzb3VyY2Utc2hhcmluZy1jb3JzKVxuICAgICAqIHNldHRpbmdzLlxuICAgICAqL1xuICAgIGh0dHBBcGk/OiBQYXJ0aWFsPGFwaWd3Lkh0dHBBcGlQcm9wcz5cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBBcGlHYXRld2F5Um91dGU8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID0ge1xuICAvKiogVGhlIHBhdGggb2YgdGhlIHJvdXRlIHRvIGV4cG9zZSB0aHJvdWdoIHRoZSBBUEkgR2F0ZXdheS4gVXNlIFwiL1wiIGZvciB0aGUgcm9vdCByb3V0ZS4gKi9cbiAgcGF0aDogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHdlIG9ubHkgZm9yd2FyZCByZXF1ZXN0cyB0aGF0IG1hdGNoIHRoZSByb3V0ZSdzIHBhdGggZXhhY3RseS4gU28gZm9yIGEgcm91dGUgd2l0aFxuICAgKiBwYXRoIGAvYXBpL3VzZXJzYCwgYSByZXF1ZXN0IHRvIGAvYXBpL3VzZXJzYCB3aWxsIGJlIGZvcndhcmRlZCwgYnV0IGEgcmVxdWVzdCB0b1xuICAgKiBgL2FwaS91c2Vycy9hZG1pbmAgd2lsbCBub3QuIElmIHlvdSB3YW50IHRvIGZvcndhcmQgcmVxdWVzdHMgdG8gYWxsIHN1Yi1wYXRocyB1bmRlciB0aGUgcm91dGUnc1xuICAgKiBwYXRoLCB5b3UgY2FuIHNldCB0aGlzIHRvIHRydWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBpbmNsdWRlU3VicGF0aHM/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFRoZSBIVFRQIG1ldGhvZCB0byBleHBvc2UuIGBBTllgIGV4cG9zZXMgYWxsIEhUVFAgbWV0aG9kcyBvbiB0aGUgcGF0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJBTllcIlxuICAgKi9cbiAgbWV0aG9kPzogSHR0cE1ldGhvZFxuXG4gIC8qKlxuICAgKiBUaGUgaW50ZWdyYXRpb24gdGhhdCB0aGUgcm91dGUgd2lsbCBmb3J3YXJkIHRvLiBTZWUge0BsaW5rIEludGVncmF0aW9uUHJvcHN9IGZvciB0aGUgYXZhaWxhYmxlXG4gICAqIG9wdGlvbnMuXG4gICAqXG4gICAqIElmIHVuZGVmaW5lZCwgdXNlcyB0aGUge0BsaW5rIEFwaUdhdGV3YXlQcm9wcy5kZWZhdWx0SW50ZWdyYXRpb259LlxuICAgKi9cbiAgaW50ZWdyYXRpb24/OiBJbnRlZ3JhdGlvblByb3BzXG5cbiAgLyoqXG4gICAqIEhvdyByZXF1ZXN0cyBvbiB0aGUgcm91dGUgYXJlIGF1dGhlbnRpY2F0ZWQuIFNlZSB7QGxpbmsgQXV0aG9yaXphdGlvblByb3BzfSBmb3IgdGhlIGF2YWlsYWJsZVxuICAgKiBvcHRpb25zLlxuICAgKlxuICAgKiBJZiB1bmRlZmluZWQsIHVzZXMgdGhlIHtAbGluayBBcGlHYXRld2F5UHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb259LlxuICAgKi9cbiAgYXV0aG9yaXphdGlvbj86IEF1dGhvcml6YXRpb25Qcm9wczxBdXRoU2NvcGVzVD5cbn1cblxuZXhwb3J0IHR5cGUgSHR0cE1ldGhvZCA9XG4gIHwgXCJBTllcIlxuICB8IFwiR0VUXCJcbiAgfCBcIlBPU1RcIlxuICB8IFwiUFVUXCJcbiAgfCBcIlBBVENIXCJcbiAgfCBcIkRFTEVURVwiXG4gIHwgXCJPUFRJT05TXCJcbiAgfCBcIkhFQURcIlxuXG5leHBvcnQgdHlwZSBJbnRlZ3JhdGlvblByb3BzID1cbiAgLyoqIFVzZSB0aGlzIHdoZW4gY29ubmVjdGluZyB0aGUgcm91dGUgdG8gYW4gQUxCIChBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKS4gKi9cbiAgfCAoeyB0eXBlOiBcIkFMQlwiIH0gJiBBbGJJbnRlZ3JhdGlvblByb3BzKVxuICAvKiogVXNlIHRoaXMgd2hlbiBjb25uZWN0aW5nIHJvdXRlIHRvIGEgTGFtYmRhLiAqL1xuICB8ICh7IHR5cGU6IFwiTGFtYmRhXCIgfSAmIExhbWJkYUludGVncmF0aW9uUHJvcHMpXG4gIC8qKiBVc2UgdGhpcyB3aGVuIGNvbm5lY3RpbmcgYSByb3V0ZSB0byBzZW5kIHRvIGFuIFNRUyBxdWV1ZS4gKi9cbiAgfCAoeyB0eXBlOiBcIlNRU1wiIH0gJiBTcXNJbnRlZ3JhdGlvblByb3BzKVxuICAvKiogVXNlIHRoaXMgd2hlbiBjb25uZWN0aW5nIGEgcm91dGUgdG8gc2VuZCB0byBhbiBFdmVudEJyaWRnZSBldmVudCBidXMuICovXG4gIHwgKHsgdHlwZTogXCJFdmVudEJyaWRnZVwiIH0gJiBFdmVudEJyaWRnZUludGVncmF0aW9uUHJvcHMpXG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBBUEktR1cgLT4gQUxCIChBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyKSBpbnRlZ3JhdGlvbi5cbiAqXG4gKiBTZWUgdGhlIG5vdGUgb24ge0BsaW5rIEFwaUdhdGV3YXl9IGFib3V0IHRoZSBsb2FkIGJhbGFuY2VyIHNlY3VyaXR5IGdyb3VwLlxuICovXG5leHBvcnQgdHlwZSBBbGJJbnRlZ3JhdGlvblByb3BzID0ge1xuICAvKipcbiAgICogQSBsaXN0ZW5lciBvbiBlLmcuIHBvcnQgNDQzIChIVFRQUykuXG4gICAqXG4gICAqIFNlZSB0aGUgbm90ZSBvbiB7QGxpbmsgQXBpR2F0ZXdheX0gYWJvdXQgdGhlIGxvYWQgYmFsYW5jZXIgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICBsb2FkQmFsYW5jZXJMaXN0ZW5lcjogZWxiLklBcHBsaWNhdGlvbkxpc3RlbmVyXG5cbiAgLyoqXG4gICAqIFRoZSBob3N0IG5hbWUgKGRvbWFpbiBuYW1lKSBvZiB0aGUgYmFja2VuZCBzZXJ2aWNlIHRoYXQgd2Ugd2FudCB0byByZWFjaCB0aHJvdWdoIHRoZSBBTEIuXG4gICAqXG4gICAqIFRoaXMgaXMgdXNlZCB0bzpcbiAgICogLSBWZXJpZnkgdGhlIEhUVFBTIGNlcnRpZmljYXRlIG9mIHRoZSBiYWNrZW5kIHNlcnZpY2UsIHNvIHRoYXQgdGhlIHJlcXVlc3QgZm9yd2FyZGVkIGZyb21cbiAgICogICBBUEktR1cgY2FuIHVzZSBUTFNcbiAgICogLSBTZXQgdGhlIGBIb3N0YCBoZWFkZXIgb24gdGhlIHJlcXVlc3Qgd2hlbiBmb3J3YXJkaW5nIHRvIHRoZSBBTEIsIHNvIHRoYXQgcmVxdWVzdHMgY2FuIGJlXG4gICAqICAgcm91dGVkIHRvIHRoZSBjb3JyZWN0IFRhcmdldCBHcm91cFxuICAgKlxuICAgKiBFeGFtcGxlIHZhbHVlOiBgPHNlcnZpY2U+LnN0YWdpbmcubXktcHJvamVjdC5saWZsaWcuaW9gIChub3QgcHJlZml4ZWQgYnkgYGh0dHBzOi8vYCkuXG4gICAqL1xuICBob3N0TmFtZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgdXNlZCBieSB0aGUgQUxCLiBUaGUgQVBJLUdXIGludGVncmF0aW9uIHdpbGwgY29ubmVjdCB0byB0aGUgQUxCIHVzaW5nIGEgVlBDIExpbmsgZm9yXG4gICAqIHRoaXMgVlBDLlxuICAgKlxuICAgKiBTZWUgdGhlIG5vdGUgb24ge0BsaW5rIEFwaUdhdGV3YXl9IGFib3V0IHRoZSBsb2FkIGJhbGFuY2VyIHNlY3VyaXR5IGdyb3VwLlxuICAgKi9cbiAgdnBjOiBlYzIuSVZwY1xuXG4gIC8qKlxuICAgKiBBIHNlY3VyaXR5IGdyb3VwIChTRykgdGhhdCBhbGxvd3MgaW5jb21pbmcgdHJhZmZpYyB0byB0aGUgQUxCLiBXaWxsIGJlIHVzZWQgYnkgdGhlIFZQQyBsaW5rLCBzb1xuICAgKiB0aGUgQVBJLUdXIGludGVncmF0aW9uIGNhbiBjb25uZWN0LlxuICAgKlxuICAgKiBUaGlzIGlzIHVzdWFsbHkgdGhlIHNhbWUgU0cgYXMgdGhlIEFMQiB1c2VzLCBiZWNhdXNlIHRoZXkgaGF2ZSBhIHJ1bGUgdGhhdCBhbGxvd3MgdHJhZmZpYyBmcm9tXG4gICAqIG90aGVycyBpbiB0aGUgc2FtZSBTRy5cbiAgICpcbiAgICogU2VlIHRoZSBub3RlIG9uIHtAbGluayBBcGlHYXRld2F5fSBhYm91dCB0aGUgbG9hZCBiYWxhbmNlciBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIHNlY3VyaXR5R3JvdXA6IGVjMi5JU2VjdXJpdHlHcm91cFxuXG4gIC8qKlxuICAgKiBNYXAgcmVxdWVzdCBwYXJhbWV0ZXJzIChhZGQvb3ZlcndyaXRlIHBhdGgvaGVhZGVycy9xdWVyeSBwYXJhbXMpIGJlZm9yZSBmb3J3YXJkaW5nIHRvIHRoZVxuICAgKiBiYWNrZW5kLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1wYXJhbWV0ZXItbWFwcGluZy5odG1sfVxuICAgKiBmb3IgbW9yZSBvbiB0aGlzLiBSZWFkIHRoZSAnUmVzZXJ2ZWQgaGVhZGVycycgc2VjdGlvbiBmb3Igd2hpY2ggaGVhZGVycyBjYW5ub3QgYmUgb3ZlcnJpZGRlbi5cbiAgICogSW4gYWRkaXRpb24gdG8gdGhlIEFXUy1yZXNlcnZlZCBoZWFkZXJzLCB5b3Ugc2hvdWxkIG5vdCBvdmVycmlkZSB0aGUgJ0hvc3QnIGhlYWRlciBlaXRoZXIsIGFzXG4gICAqIHRoYXQncyB1c2VkIGZvciByb3V0aW5nIHRoZSByZXF1ZXN0IHRvIHRoZSBjb3JyZWN0IHNlcnZpY2UgYmVoaW5kIHRoZSBsb2FkIGJhbGFuY2VyLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZTpcbiAgICpcbiAgICogQWRkaW5nIGEgaGVhZGVyOlxuICAgKiBgYGBcbiAgICogbWFwUGFyYW1ldGVyczogKHBhcmFtZXRlcnMpID0+IHBhcmFtZXRlcnMub3ZlcndyaXRlSGVhZGVyKFxuICAgKiAgICBcIlgtTXktQ3VzdG9tLUhlYWRlclwiLFxuICAgKiAgICBhcGlndy5NYXBwaW5nVmFsdWUuY3VzdG9tKFwibXktY3VzdG9tLXZhbHVlXCIpLFxuICAgKiApXG4gICAqIGBgYFxuICAgKlxuICAgKiBPdmVyd3JpdGluZyB0aGUgcGF0aCAoaWYsIGZvciBleGFtcGxlLCB5b3UgY29uZmlndXJlIGEgYC91c2Vyc2Agcm91dGUgb24gdGhlIEFQSSBHYXRld2F5IHRoYXRcbiAgICogeW91IHdhbnQgdG8gZm9yd2FyZCB0byBgL2FwaS91c2Vyc2Agb24gdGhlIGJhY2tlbmQpOlxuICAgKiBgYGBcbiAgICogbWFwUGFyYW1ldGVyczogKHBhcmFtZXRlcnMpID0+IHBhcmFtZXRlcnMub3ZlcndyaXRlUGF0aChcIi9hcGkvdXNlcnNcIilcbiAgICogYGBgXG4gICAqL1xuICBtYXBQYXJhbWV0ZXJzPzogKHBhcmFtZXRlcnM6IGFwaWd3LlBhcmFtZXRlck1hcHBpbmcpID0+IHZvaWRcbn1cblxuZXhwb3J0IHR5cGUgTGFtYmRhSW50ZWdyYXRpb25Qcm9wcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEgaW50ZWdyYXRpb24gdXNlcyB0aGUgVjIgcGF5bG9hZCBmb3JtYXQ6XG4gICAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktZGV2ZWxvcC1pbnRlZ3JhdGlvbnMtbGFtYmRhLmh0bWx9XG4gICAqXG4gICAqIElmIHdyaXRpbmcgdGhlIExhbWJkYSBpbiBUeXBlU2NyaXB0LCB0aGlzIG1lYW5zIHlvdSBzaG91bGQgdXNlIGBBUElHYXRld2F5UHJveHlFdmVudFYyYCBhcyB0aGVcbiAgICogcmVxdWVzdCB0eXBlLCBhbmQgYEFQSUdhdGV3YXlQcm94eVJlc3VsdFYyYCBhcyB0aGUgcmVzcG9uc2UgdHlwZS5cbiAgICovXG4gIGxhbWJkYTogbGFtYmRhLklGdW5jdGlvblxufVxuXG5leHBvcnQgdHlwZSBTcXNJbnRlZ3JhdGlvblByb3BzID0ge1xuICBxdWV1ZTogc3FzLklRdWV1ZVxuXG4gIC8qKlxuICAgKiBNZXNzYWdlIGF0dHJpYnV0ZXMgdG8gcGFzcyBvbiB0byBTUVMuIFRoZSBrZXlzIGluIHRoaXMgb2JqZWN0IGFyZSB0aGUgbmFtZXMgb2YgdGhlIGF0dHJpYnV0ZXMuXG4gICAqIEVhY2ggYXR0cmlidXRlIGhhcyBhIERhdGFUeXBlIGZpZWxkLCBhbmQgZWl0aGVyIGEgU3RyaW5nVmFsdWUgb3IgQmluYXJ5VmFsdWUgZmllbGQgZGVwZW5kaW5nIG9uXG4gICAqIGl0cyB0eXBlLiBTZWUgQVdTIGRvY3M6XG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTWVzc2FnZUF0dHJpYnV0ZVZhbHVlLmh0bWxcbiAgICpcbiAgICogSW4gdGhlIFN0cmluZ1ZhbHVlIGZpZWxkLCB5b3UgY2FuIGRvIEFQSSBHYXRld2F5IHBhcmFtZXRlciBtYXBwaW5nOlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktcGFyYW1ldGVyLW1hcHBpbmcuaHRtbFxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKiBgYGBcbiAgICogbWVzc2FnZUF0dHJpYnV0ZXM6IHtcbiAgICogICBjbGllbnRJZDoge1xuICAgKiAgICAgRGF0YVR5cGU6IFwiU3RyaW5nXCIsXG4gICAqICAgICBTdHJpbmdWYWx1ZTogXCIke2NvbnRleHQuYXV0aG9yaXplci5jbGllbnRJZH1cIixcbiAgICogICB9LFxuICAgKiB9LFxuICAgKiBgYGBcbiAgICovXG4gIG1lc3NhZ2VBdHRyaWJ1dGVzPzoge1xuICAgIFthdHRyaWJ1dGVOYW1lOiBzdHJpbmddOlxuICAgICAgfCB7IERhdGFUeXBlOiBcIlN0cmluZ1wiIHwgXCJOdW1iZXJcIjsgU3RyaW5nVmFsdWU6IHN0cmluZyB9XG4gICAgICB8IHtcbiAgICAgICAgICBEYXRhVHlwZTogXCJCaW5hcnlcIlxuICAgICAgICAgIC8qKiBCYXNlNjQtZW5jb2RlZCBiaW5hcnkgZGF0YSBvYmplY3QuICovXG4gICAgICAgICAgQmluYXJ5VmFsdWU6IHN0cmluZ1xuICAgICAgICB9XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgRXZlbnRCcmlkZ2VJbnRlZ3JhdGlvblByb3BzID0ge1xuICAvKipcbiAgICogQSByb2xlIGlzIG5lZWRlZCBpbiBvcmRlciB0byBncmFudCBhcGkgZ2F0ZXdheSBhY2Nlc3MgdG8gcHV0IGV2ZW50c1xuICAgKiBvbiB0aGUgZGVzaXJlZCBldmVudCBidXMuXG4gICAqXG4gICAqIElmIG5vIHJvbGUgaXMgcHJvdmlkZWQsIGEgbmV3IHJvbGUgd2lsbCBiZSBjcmVhdGVkIGluIG9yZGVyIHRvIGdyYW50IGFwaWd3IGFjY2VzcyB0byB0aGUgZXZlbnQgYnVzXG4gICAqXG4gICAqIEBkZWZhdWx0OiBjcmVhdGVzIHJvbGUgdGhhdCBjYW4gYmUgYXNzdW1lZCBieSBhcGkgZ3cgd2l0aCBhY2Nlc3MgdG8gcHV0RXZlbnRzIG9uIHRoZSBidXQgaW5wdXR0ZWRcbiAgICovXG4gIHJvbGU/OiBpYW0uSVJvbGVcbiAgLyoqXG4gICAqIEFuIEV2ZW50QnJpZGdlIGV2ZW50IGJ1cy4gUmVxdWVzdCBib2RpZXMgc2VudCB0byB0aGUgcm91dGUgd2lsbCBiZSBmb3J3YXJkZWQgdG8gdGhpcyBldmVudCBidXMsXG4gICAqIGluIHRoZSBgRGV0YWlsYCBmaWVsZCAoc2VlXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ldmVudGJyaWRnZS9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9QdXRFdmVudHNSZXF1ZXN0RW50cnkuaHRtbCkuXG4gICAqL1xuICBldmVudEJ1czogZXZlbnRzLklFdmVudEJ1c1xuICAvKipcbiAgICogU2V0cyB0aGUgYERldGFpbFR5cGVgIGZpZWxkIChpLmUuLCBldmVudCB0eXBlKSBvbiBldmVudHMgcHVibGlzaGVkIHRvIHRoZSBldmVudCBidXMuXG4gICAqXG4gICAqIFNlZSBBV1MgZG9jcyBmb3IgbW9yZSBvbiB0aGlzOlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0RXZlbnRzUmVxdWVzdEVudHJ5Lmh0bWxcbiAgICovXG4gIGRldGFpbFR5cGU6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBBdXRob3JpemF0aW9uUHJvcHM8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+ID1cbiAgLyoqXG4gICAqIE5vIGF1dGhlbnRpY2F0aW9uLCBmb3Igd2hlbiB5b3Ugd2FudCBhIGZ1bGx5IHB1YmxpYyByb3V0ZSAob3IgaGFuZGxlIGF1dGhlbnRpY2F0aW9uIGluIHRoZVxuICAgKiBiYWNrZW5kIGludGVncmF0aW9uKS5cbiAgICovXG4gIHwgeyB0eXBlOiBcIk5PTkVcIiB9XG4gIC8qKlxuICAgKiBBV1MgSUFNIGF1dGhvcml6YXRpb24uXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1hY2Nlc3MtY29udHJvbC1pYW0uaHRtbFxuICAgKi9cbiAgfCB7IHR5cGU6IFwiSUFNXCIgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGdlbmVyaWMgSldUIGF1dGhvcml6ZXIuIEl0IHVzZXMgdGhlIE9wZW5JRCBDb25uZWN0IGNvbmZpZ3VyYXRpb24gcHVibGlzaGVkIGF0IHRoZVxuICAgKiBpc3N1ZXIncyBgLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uYCBlbmRwb2ludCB0byB2YWxpZGF0ZSB0aGUgSldULCBhbmQgY2hlY2tzIHRoYXQgdGhlXG4gICAqIHRva2VuJ3MgYXVkaWVuY2UgbWF0Y2hlcyB0aGUgZ2l2ZW4gYGF1ZGllbmNlYC5cbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWp3dC1hdXRob3JpemVyLmh0bWxcbiAgICovXG4gIHwgKHtcbiAgICAgIHR5cGU6IFwiSldUXCJcbiAgICB9ICYgSnd0QXV0aG9yaXplclByb3BzKVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCByZWFkcyBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxhY2Nlc3MgdG9rZW4+YCBoZWFkZXJcbiAgICogYW5kIHZlcmlmaWVzIHRoZSB0b2tlbiBhZ2FpbnN0IGEgQ29nbml0byB1c2VyIHBvb2wuXG4gICAqL1xuICB8ICh7XG4gICAgICB0eXBlOiBcIkNPR05JVE9fVVNFUl9QT09MXCJcbiAgICB9ICYgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplclByb3BzPEF1dGhTY29wZXNUPilcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggcmVhZHMgYEF1dGhvcml6YXRpb246IEJhc2ljIDxiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFscz5gXG4gICAqIGhlYWRlciBhbmQgdmVyaWZpZXMgdGhlIGNyZWRlbnRpYWxzIGFnYWluc3QgYSBnaXZlbiBzZWNyZXQuXG4gICAqL1xuICB8ICh7IHR5cGU6IFwiQkFTSUNfQVVUSFwiIH0gJiBCYXNpY0F1dGhBdXRob3JpemVyUHJvcHMpXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIGFsbG93cyBib3RoOlxuICAgKiAtIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFjY2VzcyB0b2tlbj5gIGhlYWRlciwgZm9yIHdoaWNoIHRoZSB0b2tlbiBpcyBjaGVja2VkIGFnYWluc3QgdGhlXG4gICAqICAgZ2l2ZW4gQ29nbml0byB1c2VyIHBvb2xcbiAgICogLSBgQXV0aG9yaXphdGlvbjogQmFzaWMgPGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzPmAgaGVhZGVyLCBmb3Igd2hpY2ggdGhlIGNyZWRlbnRpYWxzIGFyZVxuICAgKiAgIGNoZWNrZWQgYWdhaW5zdCB0aGUgY3JlZGVudGlhbHMgZnJvbSB0aGUgZ2l2ZW4gYmFzaWMgYXV0aCBzZWNyZXQgbmFtZVxuICAgKlxuICAgKiBJZiBlaXRoZXIgb2YgdGhlc2UgYXJlIGdpdmVuIGFuZCB2YWxpZCwgdGhlIHJlcXVlc3QgaXMgYXV0aGVudGljYXRlZC5cbiAgICovXG4gIHwgKHtcbiAgICAgIHR5cGU6IFwiQ09HTklUT19VU0VSX1BPT0xfT1JfQkFTSUNfQVVUSFwiXG4gICAgfSAmIENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplclByb3BzPEF1dGhTY29wZXNUPilcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjdXN0b20gYXV0aG9yaXplciB3aXRoIHRoZSBnaXZlbiBMYW1iZGEgZnVuY3Rpb24uIFVzZSB0aGlzIGlmIHlvdSBoYXZlIGN1c3RvbVxuICAgKiBhdXRob3JpemF0aW9uIGxvZ2ljLCBhbmQgdGhlIG90aGVyIGF1dGhvcml6ZXJzIGZyb20gdGhpcyBjb25zdHJ1Y3QgZG9uJ3QgbWVldCB5b3VyIG5lZWRzLlxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktbGFtYmRhLWF1dGhvcml6ZXIuaHRtbFxuICAgKi9cbiAgfCAoeyB0eXBlOiBcIkNVU1RPTV9MQU1CREFfQVVUSE9SSVpFUlwiIH0gJiBDdXN0b21MYW1iZGFBdXRob3JpemVyUHJvcHMpXG5cbmV4cG9ydCB0eXBlIENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXJQcm9wczxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0ge1xuICB1c2VyUG9vbDogSVVzZXJQb29sXG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgYWNjZXNzIHRva2VuIGNsYWltcyBjb250YWluIHRoZSBnaXZlbiBzY29wZS5cbiAgICpcbiAgICogV2hlbiBkZWZpbmVkIGFzIHBhcnQgb2YgYSByZXNvdXJjZSBzZXJ2ZXIsIHNjb3BlcyBhcmUgb24gdGhlIGZvcm1hdDpcbiAgICogYHtyZXNvdXJjZSBzZXJ2ZXIgaWRlbnRpZmllcn0ve3Njb3BlIG5hbWV9YCwgZS5nLiBgZXh0ZXJuYWwvdmlld191c2Vyc2AuXG4gICAqXG4gICAqIFRvIGdldCBtb3JlIHR5cGUgc2FmZXR5IG9uIHRoaXMgcGFyYW1ldGVyLCBzZWUgdGhlIGRvY3MgZm9yIHRoZSBgQXV0aFNjb3Blc1RgIHR5cGUgcGFyYW1ldGVyIG9uXG4gICAqIHtAbGluayBBcGlHYXRld2F5fS5cbiAgICovXG4gIHJlcXVpcmVkU2NvcGU/OiBBdXRoU2NvcGVzVFxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHNlY3JldCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIHRoYXQgc3RvcmVzIGJhc2ljIGF1dGggY3JlZGVudGlhbHMgZm9yIHRoZSBiYWNrZW5kXG4gICAqIHNlcnZpY2UsIHRvIGJlIGZvcndhcmRlZCB0byB0aGUgYmFja2VuZCBpZiBDb2duaXRvIHVzZXIgcG9vbCBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQuXG4gICAqXG4gICAqIFRoZSBzZWNyZXQgdmFsdWUgbXVzdCBmb2xsb3cgdGhpcyBmb3JtYXQ6XG4gICAqIGBgYGpzb25cbiAgICogeyBcInVzZXJuYW1lXCI6IFwiPHVzZXJuYW1lPlwiLCBcInBhc3N3b3JkXCI6IFwiPHBhc3N3b3JkPlwiIH1cbiAgICogYGBgXG4gICAqXG4gICAqIFRoaXMgcHJvcCBzb2x2ZXMgdGhlIGZvbGxvd2luZyB1c2UtY2FzZTpcbiAgICogLSBZb3Ugd2FudCB0byBkbyBDb2duaXRvIHVzZXIgcG9vbCBhdXRoZW50aWNhdGlvbiBpbiB0aGUgQVBJIEdhdGV3YXlcbiAgICogLSBZb3Ugd2FudCBhbiBhZGRpdGlvbmFsIGF1dGggY2hlY2sgaW4gdGhlIGJhY2tlbmQsIGJ1dCB5b3UgZG9uJ3Qgd2FudCB0byBkZWFsIHdpdGggQ29nbml0b1xuICAgKiAgIHRoZXJlXG4gICAqIC0gVGhlIGJhY2tlbmQgdXNlcyBiYXNpYyBhdXRoXG4gICAqXG4gICAqIFRoaXMgcHJvcCBzb2x2ZXMgdGhpcyBieSBsZXR0aW5nIHlvdSBzcGVjaWZ5IGNyZWRlbnRpYWxzIHRvIHBhc3MgdG8gdGhlIGJhY2tlbmQgYWZ0ZXIgQVBJLUdXXG4gICAqIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRzLiBZb3UgY2FuIHBhc3MgdGhlIGVuY29kZWQgY3JlZGVudGlhbHMgdGhyb3VnaFxuICAgKiB7QGxpbmsgQWxiSW50ZWdyYXRpb25Qcm9wcy5tYXBQYXJhbWV0ZXJzfSwgdXNpbmcgdGhlIGBhdXRob3JpemVyLmludGVybmFsQXV0aG9yaXphdGlvbkhlYWRlcmBcbiAgICogY29udGV4dCB2YXJpYWJsZSwgbGlrZSBzbzpcbiAgICogYGBgXG4gICAqIG1hcFBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzKSA9PiBwYXJhbWV0ZXJzLm92ZXJ3cml0ZUhlYWRlcihcbiAgICogICAvLyAnQXV0aG9yaXphdGlvbicgaGVhZGVyIGNhbm5vdCBiZSBvdmVycmlkZGVuLCBzbyB3ZSB1c2UgYSBjdXN0b20gaGVhZGVyXG4gICAqICAgXCJYLUludGVybmFsLUF1dGhvcml6YXRpb25cIixcbiAgICogICBhcGlndy5NYXBwaW5nVmFsdWUuY29udGV4dFZhcmlhYmxlKFwiYXV0aG9yaXplci5pbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXJcIiksXG4gICAqIClcbiAgICogYGBgXG4gICAqIFRoZSBiYWNrZW5kIGNhbiB0aGVuIGNoZWNrIHRoZSBgWC1JbnRlcm5hbC1BdXRob3JpemF0aW9uYCBoZWFkZXIuXG4gICAqL1xuICBjcmVkZW50aWFsc0ZvckludGVybmFsQXV0aG9yaXphdGlvbj86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBCYXNpY0F1dGhBdXRob3JpemVyUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHNlY3JldCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIHRoYXQgc3RvcmVzIGJhc2ljIGF1dGggY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIFRoZSBmb2xsb3dpbmcgZm9ybWF0cyBhcmUgc3VwcG9ydGVkIGZvciB0aGUgc2VjcmV0IHZhbHVlOlxuICAgKiAtIFNpbmdsZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQ6XG4gICAqICAgYGBganNvblxuICAgKiAgIHsgXCJ1c2VybmFtZVwiOiBcIjx1c2VybmFtZT5cIiwgXCJwYXNzd29yZFwiOiBcIjxwYXNzd29yZD5cIiB9XG4gICAqICAgYGBgXG4gICAqIC0gQXJyYXkgb2YgdXNlcm5hbWUgKyBwYXNzd29yZCBvYmplY3RzOlxuICAgKiAgIGBgYGpzb25cbiAgICogICB7IFwiY3JlZGVudGlhbHNcIjogXCJbe1xcXCJ1c2VybmFtZVxcXCI6XFxcIjx1c2VyLTE+XFxcIixcXFwicGFzc3dvcmRcXFwiOlxcXCJwYXNzd29yZC0xXFxcIn0se1xcXCJ1c2VybmFtZVxcXCI6XFxcIjx1c2VyLTI+XFxcIixcXFwicGFzc3dvcmRcXFwiOlxcXCI8cGFzc3dvcmQtMj5cXFwifV1cIiB9XG4gICAqICAgYGBgXG4gICAqICAgLSBUaGUgdmFsdWUgb2YgdGhlIGBjcmVkZW50aWFsc2AgZmllbGQgaXMgYSBzdHJpbmcsIHdpdGggYSBzdHJpbmdpZmllZCwgZXNjYXBlZCBKU09OIGFycmF5IG9mXG4gICAqICAgICBvYmplY3RzIHdpdGggYHVzZXJuYW1lYCBhbmQgYHBhc3N3b3JkYCBmaWVsZHMuXG4gICAqICAgLSBUaGUgcmVhc29uIHRoYXQgdGhpcyBzZWNvbmQgZm9ybWF0IHN0b3JlcyBzdHJpbmdpZmllZCBKU09OIF9pbnNpZGVfIEpTT04sIGlzIGR1ZSB0byBhXG4gICAqICAgICBsaW1pdGF0aW9uIGluIExpZmxpZydzIGBsb2FkLXNlY3JldHNgIGxpYnJhcnksIHdoaWNoIG9ubHkgYWxsb3dzIHN0b3Jpbmcgc3RyaW5nIHZhbHVlcy5cbiAgICogLSBBcnJheSBvZiBiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFsczpcbiAgICogICBgYGBqc29uXG4gICAqICAgeyBcImNyZWRlbnRpYWxzXCI6IFwiW1xcXCI8ZW5jb2RlZC1jcmVkZW50aWFsLTE+XFxcIixcXFwiPGVuY29kZWQtY3JlZGVudGlhbC0yPlxcXCJdXCIgfVxuICAgKiAgIGBgYFxuICAgKiAgIC0gRWFjaCBlbGVtZW50IGlzIGVuY29kZWQgZnJvbSBgPHVzZXJuYW1lPjo8cGFzc3dvcmQ+YC5cbiAgICogICAtIFRoZSBhcnJheSBpcyBzdHJpbmdpZmllZCBmb3IgdGhlIHNhbWUgcmVhc29uIGFzIGFib3ZlLlxuICAgKlxuICAgKiBJZiB0aGUgc2VjcmV0IHVzZXMgb25lIG9mIHRoZSBhcnJheSBmb3JtYXRzLCB0aGUgYXV0aG9yaXplciB3aWxsIG1hdGNoIHRoZSByZXF1ZXN0J3NcbiAgICogQXV0aG9yaXphdGlvbiBoZWFkZXIgYWdhaW5zdCBhbnkgb25lIG9mIHRoZSBjcmVkZW50aWFscy5cbiAgICovXG4gIGNyZWRlbnRpYWxzU2VjcmV0TmFtZTogc3RyaW5nXG59XG5cbi8qKiBBbiBhcnJheSB0aGF0IGlzIGd1YXJhbnRlZWQgYnkgdGhlIHR5cGUgc3lzdGVtIHRvIGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQuICovXG5leHBvcnQgdHlwZSBOb25FbXB0eUFycmF5PFQ+ID0gW1QsIC4uLlRbXV1cblxuZXhwb3J0IHR5cGUgSnd0QXV0aG9yaXplclByb3BzID0ge1xuICAvKipcbiAgICogVGhlIGJhc2UgVVJMIG9mIHRoZSB0b2tlbiBpc3N1ZXIuIEFQSSBHYXRld2F5IGZldGNoZXMgdGhlIGlzc3VlcidzIE9wZW5JRCBDb25uZWN0IGNvbmZpZ3VyYXRpb25cbiAgICogZnJvbSBgPGlzc3VlclVybD4vLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb25gIHRvIG9idGFpbiB0aGUga2V5cyB1c2VkIHRvIHZhbGlkYXRlIHRoZSBKV1QuXG4gICAqL1xuICBpc3N1ZXJVcmw6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdGhlIGludGVuZGVkIHJlY2lwaWVudHMgb2YgdGhlIEpXVC4gQSB2YWxpZCBKV1QgbXVzdCBwcm92aWRlIGFuIGBhdWRgIChvciBgY2xpZW50X2lkYClcbiAgICogY2xhaW0gdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSB2YWx1ZXMuIEF0IGxlYXN0IG9uZSBhdWRpZW5jZSBtdXN0IGJlIGdpdmVuLlxuICAgKi9cbiAgYXVkaWVuY2U6IE5vbkVtcHR5QXJyYXk8c3RyaW5nPlxufVxuXG5leHBvcnQgdHlwZSBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wczxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+ID0ge1xuICB1c2VyUG9vbDogSVVzZXJQb29sXG5cbiAgLyoqXG4gICAqIE5hbWUgb2Ygc2VjcmV0IGluIEFXUyBTZWNyZXRzIE1hbmFnZXIgdGhhdCBzdG9yZXMgYmFzaWMgYXV0aCBjcmVkZW50aWFscy5cbiAgICpcbiAgICogU2VlIHtAbGluayBCYXNpY0F1dGhBdXRob3JpemVyUHJvcHMuY3JlZGVudGlhbHNTZWNyZXROYW1lfSBmb3IgdGhlIHN1cHBvcnRlZCBmb3JtYXRzLlxuICAgKi9cbiAgYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lPzogc3RyaW5nXG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoYXQgYWNjZXNzIHRva2VuIGNsYWltcyBjb250YWluIHRoZSBnaXZlbiBzY29wZS4gT25seSBhcHBsaWNhYmxlIGZvciByZXF1ZXN0cyB0aGF0XG4gICAqIHVzZSBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxhY2Nlc3MgdG9rZW4+YCAobm90IGFwcGxpY2FibGUgZm9yIGJhc2ljIGF1dGgpLlxuICAgKlxuICAgKiBXaGVuIGRlZmluZWQgYXMgcGFydCBvZiBhIHJlc291cmNlIHNlcnZlciwgc2NvcGVzIGFyZSBvbiB0aGUgZm9ybWF0OlxuICAgKiBge3Jlc291cmNlIHNlcnZlciBpZGVudGlmaWVyfS97c2NvcGUgbmFtZX1gLCBlLmcuIGBleHRlcm5hbC92aWV3X3VzZXJzYC5cbiAgICpcbiAgICogVG8gZ2V0IG1vcmUgdHlwZSBzYWZldHkgb24gdGhpcyBwYXJhbWV0ZXIsIHNlZSB0aGUgZG9jcyBmb3IgdGhlIGBBdXRoU2NvcGVzVGAgdHlwZSBwYXJhbWV0ZXIgb25cbiAgICoge0BsaW5rIEFwaUdhdGV3YXl9LlxuICAgKi9cbiAgcmVxdWlyZWRTY29wZT86IEF1dGhTY29wZXNUXG59XG5cbnR5cGUgQ3VzdG9tTGFtYmRhQXV0aG9yaXplclByb3BzID0ge1xuICAvKipcbiAgICogVGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcnVuIHdoZW5ldmVyIHRoZSBBUEkgR2F0ZXdheSByb3V0ZSBpcyBpbnZva2VkLCB0byBhdXRoZW50aWNhdGVcbiAgICogdGhlIHJlcXVlc3QuIFNlZSBBV1MgZG9jcyBmb3IgbW9yZSBvbiBob3cgdG8gd3JpdGUgdGhlIExhbWJkYTpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWxhbWJkYS1hdXRob3JpemVyLmh0bWxcbiAgICpcbiAgICogVGhlIGRlZmF1bHQgcmVzcG9uc2UgZm9ybWF0IHVzZWQgaXMgYEh0dHBMYW1iZGFSZXNwb25zZVR5cGUuU0lNUExFYCAoZm9ybWF0IDIuMCkuIElmIHlvdSB3cml0ZVxuICAgKiB5b3VyIExhbWJkYSBpbiBUeXBlU2NyaXB0LCB0aGlzIG1lYW5zIHRoYXQgeW91ciBoYW5kbGVyIG11c3QgcmV0dXJuXG4gICAqIGBBUElHYXRld2F5U2ltcGxlQXV0aG9yaXplclJlc3VsdGAgKGZyb20gdGhlIGBhd3MtbGFtYmRhYCBwYWNrYWdlKS4gVGhlIHJlcXVlc3QgZXZlbnQgd2lsbCBhbHNvXG4gICAqIHVzZSBmb3JtYXQgMi4wIChgQVBJR2F0ZXdheVJlcXVlc3RBdXRob3JpemVyRXZlbnRWMmAgaW4gVHlwZVNjcmlwdCkuIFNlZSB0aGUgQVdTIGRvY3MgbGlua2VkXG4gICAqIGFib3ZlIGZvciBtb3JlIGRldGFpbHMgb24gdGhlc2UgZm9ybWF0cy5cbiAgICpcbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgcmVzcG9uc2UgZm9ybWF0IHR5cGUgaW5cbiAgICoge0BsaW5rIEN1c3RvbUxhbWJkYUF1dGhvcml6ZXJQcm9wcy5hdXRob3JpemVyUHJvcHN9LlxuICAgKlxuICAgKiBTZWUgdGhlIExhbWJkYXMgdW5kZXIgdGhlIGBhdXRob3JpemVyc2AgZm9sZGVyIG5leHQgdG8gdGhlIGBBcGlHYXRld2F5YCBjb25zdHJ1Y3QgaW5cbiAgICogYGxpZmxpZy1jZGtgIGZvciBleGFtcGxlcy5cbiAgICovXG4gIGxhbWJkYUF1dGhvcml6ZXI6IGxhbWJkYS5JRnVuY3Rpb25cblxuICAvKipcbiAgICogUHJvcHMgZm9yIHRoZSBgSHR0cExhbWJkYUF1dGhvcml6ZXJgIGNvbnN0cnVjdC4gV2UgcHJvdmlkZSBzb21lIGRpZmZlcmVudCBkZWZhdWx0czpcbiAgICogLSBgcmVzcG9uc2VUeXBlc2AgZGVmYXVsdHMgdG8gYFtIdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRV1gXG4gICAqIC0gYHJlc3VsdHNDYWNoZVR0bGAgZGVmYXVsdHMgdG8gYER1cmF0aW9uLmhvdXJzKDEpYFxuICAgKi9cbiAgYXV0aG9yaXplclByb3BzPzogUGFydGlhbDxhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplclByb3BzPlxufVxuXG4vKipcbiAqIFRoaXMgY29uc3RydWN0IHRyaWVzIHRvIHNpbXBsaWZ5IHRoZSBjcmVhdGlvbiBvZiBhbiBBUEkgR2F0ZXdheSBmb3IgYSBzZXJ2aWNlLCBieSBjb2xsZWN0aW5nIG1vc3RcbiAqIG9mIHRoZSBjb21tb24gc2V0dXAgaGVyZS5cbiAqXG4gKiBUaGUgYXBwcm9hY2ggZm9sbG93ZWQgaW4gdGhpcyBjb25zdHJ1Y3QgaXM6XG4gKiAxLiBPbmUgQVBJLUdXIHBlciBzZXJ2aWNlXG4gKiAyLiBPbmUgc3ViZG9tYWluIHBlciBBUEktR1cgLyBzZXJ2aWNlXG4gKiAzLiBVc2UgSFRUUCBBUEksIG5vdCBSRVNUXG4gKiA0LiBVc2UgYSAkZGVmYXVsdCBzdGFnZSB3aXRoIGF1dG9kZXBsb3lcbiAqIDUuIFN1cHBvcnQgbXVsdGlwbGUgcm91dGVzICh3aXRoIHBvc3NpYmxlIGAve3Byb3h5K31gIHRvIGxldCBhbGwgc3ViLXBhdGhzIHRocm91Z2gpXG4gKiA2LiBBbGxvdyBjdXN0b20gaW50ZWdyYXRpb24vYXV0aG9yaXplciBmb3IgZWFjaCByb3V0ZSwgb3IgZGVmYXVsdHMgZm9yIHRoZSB3aG9sZSBnYXRld2F5XG4gKlxuICogVGhlIHJvdXRlIGludGVncmF0aW9uIGlzIG9uZSBvZiB0aGVzZTpcbiAqIC0gQUxCIHByaXZhdGUgaW50ZWdyYXRpb24gd2l0aCBWUEMgTGluayB1c2luZyBIVFRQUyB0byB0aGUgQUxCXG4gKiAtIExhbWJkYSBpbnRlZ3JhdGlvblxuICogLSBTUVMgaW50ZWdyYXRpb25cbiAqXG4gKiAjIyMgTG9hZCBCYWxhbmNlciBTZWN1cml0eSBHcm91cFxuICpcbiAqIE5vdGUgdGhhdCB0aGUgbG9hZCBiYWxhbmNlciB1c2VkIGluIGFuIHtAbGluayBBbGJJbnRlZ3JhdGlvblByb3BzfSBtdXN0IGFsbG93IG91dGJvdW5kIEhUVFBTXG4gKiB0cmFmZmljIHRvIGl0cyBTZWN1cml0eUdyb3VwLiBPdGhlcndpc2UsIHRoZSBWUEMgTGluayB1c2VkIGJ5IHRoZSBBUEktR1cgY2FuJ3QgZ2V0IHRyYWZmaWMgZnJvbVxuICogdGhlIEFMQi5cbiAqXG4gKiBgYGBcbiAqIGNvbnN0IGxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAoLi4uLCB7XG4gKiAgIGFsbG93QWxsT3V0Ym91bmQ6IGZhbHNlLFxuICogfSlcbiAqXG4gKiBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwLmFkZEVncmVzc1J1bGUoXG4gKiAgIGxvYWRCYWxhbmNlclNlY3VyaXR5R3JvdXAsXG4gKiAgIGVjMi5Qb3J0LnRjcCg0NDMpLFxuICogICBcIk91dGJvdW5kIHRvIHNlbGYgZm9yIEFMQiB0byBBUEktR1cgVlBDLUxpbmtcIixcbiAqIClcbiAqXG4gKiBjb25zdCBsb2FkQmFsYW5jZXIgPSBuZXcgbGlmbGlnTG9hZEJhbGFuY2VyLkxvYWRCYWxhbmNlciguLi4sXG4gKiAgIHtcbiAqICAgICBvdmVycmlkZUxvYWRCYWxhbmNlclByb3BzOiB7XG4gKiAgICAgICBzZWN1cml0eUdyb3VwOiBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwLFxuICogICAgIH0sXG4gKiAgIH0sXG4gKiApXG4gKiBgYGBcbiAqXG4gKiBAdGVtcGxhdGUgQXV0aFNjb3Blc1QgVGhpcyB0eXBlIHBhcmFtZXRlciBhbGxvd3MgeW91IHRvIGltcHJvdmUgdHlwZSBzYWZldHkgb24gdGhlXG4gKiBgcmVxdWlyZWRTY29wZWAgZmllbGQgb24ge0BsaW5rIENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplclByb3BzfSwgYnkgbmFycm93aW5nIHRoZSB0eXBlXG4gKiB0byBzcGVjaWZpYyBzdHJpbmdzLiBZb3UgY2FuIHRoZW4gZXh0ZW5kIHRoZSBgQXBpR2F0ZXdheWAgd2l0aCB0aGlzIHR5cGUgdG8gZW5mb3JjZSB0aG9zZSBzY29wZXNcbiAqIGFjcm9zcyB0aGUgYXBwbGljYXRpb24uIFJlbWVtYmVyIHRoYXQgYXV0aCBzY29wZXMgbXVzdCBiZSBvbiB0aGUgZm9ybWF0XG4gKiBge3Jlc291cmNlIHNlcnZlciBpZGVudGlmaWVyfS97c2NvcGUgbmFtZX1gLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBcbiAqIHR5cGUgQXV0aFNjb3BlcyA9IFwiZXh0ZXJuYWwvcmVhZF91c2Vyc1wiIHwgXCJpbnRlcm5hbC9jcmVhdGVfdXNlcnNcIlxuICpcbiAqIGV4cG9ydCBjbGFzcyBNeVByb2plY3RBcGlHYXRld2F5IGV4dGVuZHMgQXBpR2F0ZXdheTxBdXRoU2NvcGVzPiB7fVxuICogYGBgXG4gKiBUeXBlU2NyaXB0IHdpbGwgdGhlbiBlbmZvcmNlIHRoYXQgYHJlcXVpcmVkU2NvcGVgIGlzIG9uZSBvZiBgQXV0aFNjb3Blc2AsIGFuZCBwcm92aWRlXG4gKiBhdXRvLWNvbXBsZXRlLlxuICpcbiAqIEBhdXRob3IgS3Jpc3RpYW4gUmVrc3RhZCA8a3JlQGNhcHJhY29uc3VsdGluZy5ubz5cbiAqIEBhdXRob3IgSGVybWFubiBNw7hya3JpZCA8aGVtQGxpZmxpZy5ubz5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwaUdhdGV3YXk8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPiBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgLyoqIFRoZSBBUEkgR2F0ZXdheSBIVFRQIEFQSS4gVGhpcyBpcyB0aGUgbWFpbiBjb25zdHJ1Y3QgZm9yIEFQSS1HVy4gKi9cbiAgcHVibGljIHJlYWRvbmx5IGh0dHBBcGk6IGFwaWd3Lkh0dHBBcGlcblxuICAvKiogVGhlIHJvdXRlcyB3aGljaCBjb25uZWN0IHRoZSB7QGxpbmsgaHR0cEFwaX0gdG8gdGhlIGJhY2tlbmQgaW50ZWdyYXRpb24ocykuICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXM6IGFwaWd3Lkh0dHBSb3V0ZVtdID0gW11cblxuICAvKiogVGhlIGRvbWFpbiB3aGljaCBjb25zdW1lcnMgbXVzdCB1c2UuKi9cbiAgcHVibGljIHJlYWRvbmx5IGRvbWFpbjogc3RyaW5nXG5cbiAgLyoqIEFjY2VzcyBsb2cgZ3JvdXAuICovXG4gIHB1YmxpYyByZWFkb25seSBsb2dHcm91cDogbG9ncy5Mb2dHcm91cFxuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEFwaUdhdGV3YXlQcm9wczxBdXRoU2NvcGVzVD5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQXBpR2F0ZXdheVByb3BzPEF1dGhTY29wZXNUPixcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuICAgIHRoaXMucHJvcHMgPSBwcm9wc1xuXG4gICAgQXBpR2F0ZXdheS52YWxpZGF0ZVByb3BzKHByb3BzLCBpZCwgY2RrLlN0YWNrLm9mKHRoaXMpKVxuXG4gICAgY29uc3QgY3VzdG9tRG9tYWluID0gbmV3IEFwaUdhdGV3YXlEb21haW4odGhpcywgXCJDdXN0b21Eb21haW5cIiwgcHJvcHMuZG5zKVxuICAgIHRoaXMuZG9tYWluID0gY3VzdG9tRG9tYWluLmZ1bGxEb21haW5OYW1lXG5cbiAgICBsZXQgY29yc09wdGlvbnM6IGFwaWd3LkNvcnNQcmVmbGlnaHRPcHRpb25zIHwgdW5kZWZpbmVkXG4gICAgaWYgKHByb3BzLmNvcnNBbGxvd0FsbCkge1xuICAgICAgY29yc09wdGlvbnMgPSB7XG4gICAgICAgIGFsbG93T3JpZ2luczogW1wiKlwiXSxcbiAgICAgICAgLy8gXCJUaGUgQXV0aG9yaXphdGlvbiBoZWFkZXIgY2FuJ3QgYmUgd2lsZGNhcmRlZCBhbmQgYWx3YXlzIG5lZWRzIHRvIGJlIGxpc3RlZCBleHBsaWNpdGx5XCJcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnNcbiAgICAgICAgLy8gQ29udGVudC1UeXBlIG1heSBhbHNvIHJlcXVpcmUgZXhwbGljaXQgd2hpdGVsaXN0aW5nOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNjM1Njc2NDdcbiAgICAgICAgYWxsb3dIZWFkZXJzOiBbXCJBdXRob3JpemF0aW9uXCIsIFwiQ29udGVudC1UeXBlXCIsIFwiKlwiXSxcbiAgICAgICAgLy8gTm90IHVzaW5nICcqJyBoZXJlLCBiZWNhdXNlIFwiSW4gcmVxdWVzdHMgd2l0aCBjcmVkZW50aWFscywgaXQgaXMgdHJlYXRlZCBhcyB0aGUgbGl0ZXJhbFxuICAgICAgICAvLyBtZXRob2QgbmFtZSAnKicgd2l0aG91dCBzcGVjaWFsIHNlbWFudGljc1wiXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9BY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzXG4gICAgICAgIGFsbG93TWV0aG9kczogW1xuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLkdFVCxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5QT1NULFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLlBVVCxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5QQVRDSCxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5ERUxFVEUsXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuT1BUSU9OUyxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5IRUFELFxuICAgICAgICBdLFxuICAgICAgICBtYXhBZ2U6IGNkay5EdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBhY3R1YWwgQVBJLiBUaGlzIGhvbGRzIHRoZSByb3V0ZXMsIGF1dGhvcml6ZXJzIGFuZCBpbnRlZ3JhdGlvbnMuXG4gICAgY29uc3QgYXBpID0gbmV3IGFwaWd3Lkh0dHBBcGkodGhpcywgYEh0dHBBcGktJHtwcm9wcy5kbnMuc3ViZG9tYWlufWAsIHtcbiAgICAgIC8vIGRlZmF1bHRJbnRlZ3JhdGlvbjogZGVmYXVsdEludGVncmF0aW9uLCAvLyBUaGlzIGlzIGZvciBhIGNhdGNoLWFsbCAkZGVmYXVsdCByb3V0ZVxuICAgICAgZGVzY3JpcHRpb246IGBBbiBIVFRQIEFQSSBmb3IgJHtwcm9wcy5kbnMuc3ViZG9tYWlufS4ke3Byb3BzLmRucy5ob3N0ZWRab25lLnpvbmVOYW1lfS5gLFxuICAgICAgZGlzYWJsZUV4ZWN1dGVBcGlFbmRwb2ludDogdHJ1ZSwgLy8gRm9yY2UgZXh0ZXJuYWxzIHRvIGdvIHRocm91Z2ggY3VzdG9tIGRvbWFpbi4gTVVTVCBiZSB0cnVlIHdoZW4gdXNpbmcgTXV0dWFsIFRMUywgZm9yIHNlY3VyaXR5IHJlYXNvbnNcbiAgICAgIGNyZWF0ZURlZmF1bHRTdGFnZTogdHJ1ZSxcbiAgICAgIGRlZmF1bHREb21haW5NYXBwaW5nOiB7IGRvbWFpbk5hbWU6IGN1c3RvbURvbWFpbi5hcGlHd0RvbWFpbk5hbWUgfSxcbiAgICAgIGNvcnNQcmVmbGlnaHQ6IGNvcnNPcHRpb25zLFxuICAgICAgLi4ucHJvcHM/LnByb3BzT3ZlcnJpZGU/Lmh0dHBBcGksXG4gICAgfSlcbiAgICB0aGlzLmh0dHBBcGkgPSBhcGlcblxuICAgIGNvbnN0IHN0YWdlID0gYXBpLmRlZmF1bHRTdGFnZT8ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgYXBpZ3cuQ2ZuU3RhZ2VcblxuICAgIGNvbnN0IGxvZ3MgPSBuZXcgQXBpR2F0ZXdheUFjY2Vzc0xvZ3MoXG4gICAgICB0aGlzLFxuICAgICAgXCJBY2Nlc3NMb2dzXCIsXG4gICAgICBzdGFnZSxcbiAgICAgIHByb3BzLmFjY2Vzc0xvZ3MsXG4gICAgKVxuICAgIHRoaXMubG9nR3JvdXAgPSBsb2dzLmxvZ0dyb3VwXG5cbiAgICBzdGFnZS5kZWZhdWx0Um91dGVTZXR0aW5ncyA9IHtcbiAgICAgIC4uLnN0YWdlLmRlZmF1bHRSb3V0ZVNldHRpbmdzLFxuICAgICAgZGV0YWlsZWRNZXRyaWNzRW5hYmxlZDogcHJvcHMuZGV0YWlsZWRNZXRyaWNzID8/IHRydWUsXG4gICAgICB0aHJvdHRsaW5nQnVyc3RMaW1pdDogcHJvcHMudGhyb3R0bGluZz8uYnVyc3QsIC8vIERlZmF1bHQgZm9yIGFjY291bnQgaXMgNV8wMDBcbiAgICAgIHRocm90dGxpbmdSYXRlTGltaXQ6IHByb3BzLnRocm90dGxpbmc/LnJhdGUsIC8vIERlZmF1bHQgZm9yIGFjY291bnQgaXMgMTBfMDAwXG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdEludGVncmF0aW9uID0gcHJvcHMuZGVmYXVsdEludGVncmF0aW9uXG4gICAgICA/IHRoaXMuY3JlYXRlSW50ZWdyYXRpb24ocHJvcHMuZGVmYXVsdEludGVncmF0aW9uLCBwcm9wcy5kbnMpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgY29uc3QgZGVmYXVsdEF1dGhvcml6ZXIgPSBwcm9wcy5kZWZhdWx0QXV0aG9yaXphdGlvblxuICAgICAgPyB0aGlzLmNyZWF0ZUF1dGhvcml6ZXIoXCJEZWZhdWx0QXV0aG9yaXplclwiLCBwcm9wcy5kZWZhdWx0QXV0aG9yaXphdGlvbilcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHByb3BzLnJvdXRlcykge1xuICAgICAgbGV0IGludGVncmF0aW9uOiBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvblxuICAgICAgaWYgKHJvdXRlLmludGVncmF0aW9uKSB7XG4gICAgICAgIGludGVncmF0aW9uID0gdGhpcy5jcmVhdGVJbnRlZ3JhdGlvbihyb3V0ZS5pbnRlZ3JhdGlvbiwgcHJvcHMuZG5zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZWdyYXRpb24gPSBkZWZhdWx0SW50ZWdyYXRpb24hIC8vIFZlcmlmaWVkIGluIHZhbGlkYXRlUHJvcHNcbiAgICAgIH1cblxuICAgICAgbGV0IGF1dGhvcml6ZXI6IGFwaWd3LklIdHRwUm91dGVBdXRob3JpemVyIHwgdW5kZWZpbmVkXG4gICAgICBpZiAocm91dGUuYXV0aG9yaXphdGlvbikge1xuICAgICAgICBhdXRob3JpemVyID0gdGhpcy5jcmVhdGVBdXRob3JpemVyKFxuICAgICAgICAgIC8vIFVzaW5nIHRoZSByb3V0ZSBwYXRoIGhlcmUgY2F1c2VkIENsb3VkRm9ybWF0aW9uIHRvIGZhaWwgZHVlIHRvIHJlc291cmNlIG5hbWVzIGJlaW5nIHRvb1xuICAgICAgICAgIC8vIGxvbmcuIFRoZXJlZm9yZSwgd2Ugbm93IGhhc2ggdGhlIHJvdXRlIHBhdGggdG8gZ2V0IGEgc2hvcnRlciBuYW1lLlxuICAgICAgICAgIGBSb3V0ZUF1dGhvcml6ZXIke3Nob3J0SGFzaChgJHtyb3V0ZS5tZXRob2QgPz8gXCJcIn0ke3JvdXRlLnBhdGh9YCl9YCxcbiAgICAgICAgICByb3V0ZS5hdXRob3JpemF0aW9uLFxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhdXRob3JpemVyID0gZGVmYXVsdEF1dGhvcml6ZXJcbiAgICAgIH1cblxuICAgICAgY29uc3Qgcm91dGVQYXRocyA9IFtyb3V0ZS5wYXRoXVxuICAgICAgaWYgKHJvdXRlLmluY2x1ZGVTdWJwYXRocyA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBJZiB3ZSBpbmNsdWRlIHN1Yi1wYXRocywgd2UgYWRkIGFuIGFkZGl0aW9uYWwgcm91dGUgd2l0aCAve3Byb3h5K30gKHRoZSArIG1lYW5zIGl0IHdpbGxcbiAgICAgICAgLy8gbWF0Y2ggYWxsIHN1YnJvdXRlcykuIFdlIHdhbnQgYm90aCB0aGlzIHJvdXRlIGFuZCB0aGUgbm9ybWFsIHJvdXRlIHdpdGhvdXQgL3twcm94eSt9LFxuICAgICAgICAvLyBzaW5jZSAve3Byb3h5K30gd2lsbCBvbmx5IG1hdGNoIHRoZSBiYXNlIHBhdGggd2l0aCB0cmFpbGluZyBzbGFzaC5cbiAgICAgICAgcm91dGVQYXRocy5wdXNoKFxuICAgICAgICAgIGAke3JvdXRlLnBhdGggKyAocm91dGUucGF0aCA9PT0gXCIvXCIgPyBcIlwiIDogXCIvXCIpfXtwcm94eSt9YCxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJvdXRlUGF0aCBvZiByb3V0ZVBhdGhzKSB7XG4gICAgICAgIC8vIFRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBBUEkgR2F0ZXdheSBjb25zdHJ1Y3QgaGFkIGEgc2luZ2xlIHJvdXRlIHdpdGggdGhlIElEXG4gICAgICAgIC8vICdEZWZhdWx0UHJveHlSb3V0ZScsIGFuZCBhbGwgZ2F0ZXdheXMgd2UgdXNlZCBleHBvc2VkIHRoZSByb3V0ZSAve3Byb3h5K30uIFdoZW4gdHJ5aW5nIHRvXG4gICAgICAgIC8vIGNoYW5nZSB0byB0aGlzIG5ldyB2ZXJzaW9uIG9mIHRoZSBjb25zdHJ1Y3QsIGRlcGxveW1lbnQgZmFpbGVkIGZvciBnYXRld2F5cyBleHBvc2luZ1xuICAgICAgICAvLyAve3Byb3h5K30sIGJlY2F1c2UgXCJhIHJvdXRlIHdpdGggdGhhdCBrZXkgW2kuZS4gcGF0aCArIG1ldGhvZF0gYWxyZWFkeSBleGlzdHNcIi4gV2UgdGhpbmtcbiAgICAgICAgLy8gdGhpcyBtYXkgYmUgYmVjYXVzZSB3ZSB1c2VkIHRoZSBzYW1lIHJvdXRlIHBhdGgsIGJ1dCB3aXRoIGEgbmV3IHJvdXRlIElELCBjYXVzaW5nXG4gICAgICAgIC8vIGNvbmZ1c2lvbiBmb3IgQ2xvdWRGb3JtYXRpb24uIFNvIHdlIGtlZXAgdGhlIG9sZCByb3V0ZSBJRCBoZXJlIGZvciAve3Byb3h5K30uXG4gICAgICAgIGNvbnN0IHJvdXRlSWQgPVxuICAgICAgICAgIHJvdXRlUGF0aCA9PT0gXCIve3Byb3h5K31cIiA/IFwiRGVmYXVsdFByb3h5Um91dGVcIiA6IGBSb3V0ZS0ke3JvdXRlUGF0aH1gXG5cbiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChcbiAgICAgICAgICBuZXcgYXBpZ3cuSHR0cFJvdXRlKHRoaXMsIHJvdXRlSWQsIHtcbiAgICAgICAgICAgIGh0dHBBcGk6IGFwaSxcbiAgICAgICAgICAgIGludGVncmF0aW9uOiBpbnRlZ3JhdGlvbixcbiAgICAgICAgICAgIGF1dGhvcml6ZXI6IGF1dGhvcml6ZXIsXG4gICAgICAgICAgICByb3V0ZUtleTogYXBpZ3cuSHR0cFJvdXRlS2V5LndpdGgoXG4gICAgICAgICAgICAgIHJvdXRlUGF0aCxcbiAgICAgICAgICAgICAgcm91dGUubWV0aG9kXG4gICAgICAgICAgICAgICAgPyBhcGlndy5IdHRwTWV0aG9kW3JvdXRlLm1ldGhvZF1cbiAgICAgICAgICAgICAgICA6IGFwaWd3Lkh0dHBNZXRob2QuQU5ZLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRhZ1Jlc291cmNlcyh0aGlzLCAoKSA9PiAoeyBzZXJ2aWNlOiBwcm9wcy5kbnMuc3ViZG9tYWluIH0pKVxuICB9XG5cbiAgLyoqIEB0aHJvd3MgRXJyb3IgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgdmFsaWRhdGVQcm9wcyhcbiAgICBwcm9wczogQXBpR2F0ZXdheVByb3BzLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgc3RhY2s6IGNkay5TdGFjayxcbiAgKSB7XG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBwcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGlmICghcm91dGUuaW50ZWdyYXRpb24gJiYgIXByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE5vIGludGVncmF0aW9uIGRlZmluZWQgZm9yIHJvdXRlICcke3JvdXRlLnBhdGh9JywgYW5kIG5vIGRlZmF1bHQgaW50ZWdyYXRpb24gc3BlY2lmaWVkIGZvciB0aGUgZ2F0ZXdheWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmICghcm91dGUuYXV0aG9yaXphdGlvbiAmJiAhcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBObyBhdXRob3JpemF0aW9uIGRlZmluZWQgZm9yIHJvdXRlICcke3JvdXRlLnBhdGh9JywgYW5kIG5vIGRlZmF1bHQgYXV0aG9yaXphdGlvbiBzcGVjaWZpZWQgZm9yIHRoZSBnYXRld2F5YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKCFyb3V0ZS5wYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBwYXRoICcke3JvdXRlLnBhdGh9JzogcGF0aHMgbXVzdCBiZWdpbiB3aXRoICcvJyAodXNlICcvJyBmb3Igcm9vdCBwYXRoKWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChyb3V0ZS5wYXRoICE9PSBcIi9cIiAmJiByb3V0ZS5wYXRoLmVuZHNXaXRoKFwiL1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgcGF0aCAnJHtyb3V0ZS5wYXRofSc6IHBhdGhzIGNhbm5vdCBlbmQgd2l0aCAnLycgKGV4Y2VwdCByb290IHBhdGgpYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByb3V0ZS5pbnRlZ3JhdGlvbj8udHlwZSA9PT0gXCJBTEJcIiAmJlxuICAgICAgICByb3V0ZS5pbnRlZ3JhdGlvbi5ob3N0TmFtZS5zdGFydHNXaXRoKFwiaHR0cHM6XCIpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGUgYWxiSW50ZWdyYXRpb24uaG9zdEh0dHBzTmFtZSBzaG91bGQgbm90IGluY2x1ZGUgYSBwcm90b2NvbDogJHtyb3V0ZS5pbnRlZ3JhdGlvbi5ob3N0TmFtZX1gLFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcy5kbnMuc3ViZG9tYWluID09PSBcIlwiIHx8IHByb3BzLmRucy5zdWJkb21haW4uaW5jbHVkZXMoXCIgXCIpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTdWJkb21haW4gbXVzdCBiZSBzZXQsIGFuZCBub3QgY29udGFpbiBzcGFjZXM6ICR7cHJvcHMuZG5zLnN1YmRvbWFpbn1gLFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAocHJvcHMudGhyb3R0bGluZz8uYnVyc3QgJiYgcHJvcHMudGhyb3R0bGluZy5idXJzdCA+IDVfMDAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDimqDvuI8gWW91ciB0aHJvdHRsaW5nIGJ1cnN0IGxpbWl0ICcke3Byb3BzLnRocm90dGxpbmcuYnVyc3R9JyBpcyBoaWdoZXIgdGhhbiB0aGUgQVdTIEFjY291bnQgbGltaXQuIE1ha2Ugc3VyZSB5b3VyIGFjY291bnQgaGFzIHVwZ3JhZGVkIHRoaXMgcXVvdGEhIGAsXG4gICAgICAgIHN0YWNrLFxuICAgICAgICBpZCxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHByb3BzLnRocm90dGxpbmc/LnJhdGUgJiYgcHJvcHMudGhyb3R0bGluZy5yYXRlID4gMTBfMDAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGDimqDvuI8gWW91ciB0aHJvdHRsaW5nIHJhdGUgbGltaXQgJyR7cHJvcHMudGhyb3R0bGluZy5yYXRlfScgaXMgaGlnaGVyIHRoYW4gdGhlIEFXUyBBY2NvdW50IGxpbWl0LiBNYWtlIHN1cmUgeW91ciBhY2NvdW50IGhhcyB1cGdyYWRlZCB0aGlzIHF1b3RhISBgLFxuICAgICAgICBzdGFjayxcbiAgICAgICAgaWQsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhdXRob3JpemVyIG9ubHkgYWNjZXB0cyByZXF1ZXN0cyBmcm9tIGV4dGVybmFsIHVzZXJzIHRoYXQgYXJlIGF1dGhvcml6ZWQuXG4gICAqIFVuYXV0aG9yaXplZCB1c2VycyBhcmUgc3RvcHBlZCBpbiB0aGUgQVBJLUdXLCBhbmQgbm90IGZvcndhcmRlZCB0byB0aGUgaW50ZWdyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUF1dGhvcml6ZXI8QXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXV0aG9yaXphdGlvbjogQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUPixcbiAgKTogYXBpZ3cuSUh0dHBSb3V0ZUF1dGhvcml6ZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoYXV0aG9yaXphdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFwiTk9ORVwiOiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJJQU1cIjoge1xuICAgICAgICAvLyBBUEkgR2F0ZXdheSBpbnZva2VzIHlvdXIgQVBJIHJvdXRlIG9ubHkgaWYgdGhlIGNsaWVudCBoYXMgZXhlY3V0ZS1hcGkgcGVybWlzc2lvbiBmb3IgdGhlIHJvdXRlLlxuICAgICAgICAvLyBUaGUgY2xpZW50IGhhcyB0byB1c2UgQVdTIFNpZ1Y0IHRvIGlkZW50aWZ5IHRoZW1zZWx2ZXMgaW4gdGhlIHJlcXVlc3QuXG4gICAgICAgIC8vIFJlYWQgdGhpcyBwYWdlIGZvciBoZWxwIHdpdGggSUFNIGFuZCBBUEktR1cgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL3NlY3VyaXR5X2lhbV9zZXJ2aWNlLXdpdGgtaWFtLmh0bWxcbiAgICAgICAgLy8gTm90ZSB0aGF0IFtyZXNvdXJjZSBwb2xpY2llcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQgZm9yIEhUVFBdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1hY2Nlc3MtY29udHJvbC1pYW0uaHRtbClcbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwSWFtQXV0aG9yaXplcigpXG4gICAgICB9XG4gICAgICBjYXNlIFwiSldUXCI6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwSnd0QXV0aG9yaXplcihpZCwgYXV0aG9yaXphdGlvbi5pc3N1ZXJVcmwsIHtcbiAgICAgICAgICBqd3RBdWRpZW5jZTogYXV0aG9yaXphdGlvbi5hdWRpZW5jZSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJDT0dOSVRPX1VTRVJfUE9PTFwiOiB7XG4gICAgICAgIC8vIFdlIHVzZSBhIGN1c3RvbSBsYW1iZGEgYXV0aG9yaXplciBoZXJlIGluc3RlYWQgb2YgdGhlIGBIdHRwVXNlclBvb2xBdXRob3JpemVyYCBwcm92aWRlZFxuICAgICAgICAvLyBieSBDREssIGluIG9yZGVyIHRvIHN1cHBvcnQgYHJlcXVpcmVkU2NvcGVgIGFuZCBzZXR0aW5nIG9mIGN1c3RvbSBjb250ZXh0IHZhcmlhYmxlcy5cbiAgICAgICAgY29uc3QgYXV0aG9yaXplciA9IG5ldyBDb2duaXRvVXNlclBvb2xBdXRob3JpemVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7aWR9TGFtYmRhYCxcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJCQVNJQ19BVVRIXCI6IHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplciA9IG5ldyBCYXNpY0F1dGhBdXRob3JpemVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7aWR9TGFtYmRhYCxcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5taW51dGVzKDMwKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJDT0dOSVRPX1VTRVJfUE9PTF9PUl9CQVNJQ19BVVRIXCI6IHtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplciA9IG5ldyBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXIoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgJHtpZH1MYW1iZGFgLFxuICAgICAgICAgIGF1dGhvcml6YXRpb24sXG4gICAgICAgIClcblxuICAgICAgICByZXR1cm4gbmV3IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFBdXRob3JpemVyKGlkLCBhdXRob3JpemVyLmxhbWJkYSwge1xuICAgICAgICAgIHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6ZXIucmVzcG9uc2VUeXBlcyxcbiAgICAgICAgICAvLyBNYXggMWgsIG9yIGRpc2FibGVkICgwcykuIFRoZSB2YWx1ZSBvbmx5IG1hdHRlcnMgd2hlbiBpbnZhbGlkYXRpbmcvZHluYW1pYyBjcmVkZW50aWFsc1xuICAgICAgICAgIHJlc3VsdHNDYWNoZVR0bDogY2RrLkR1cmF0aW9uLmhvdXJzKDEpLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY2FzZSBcIkNVU1RPTV9MQU1CREFfQVVUSE9SSVpFUlwiOiB7XG4gICAgICAgIHJldHVybiBuZXcgYXV0aG9yaXplcnMuSHR0cExhbWJkYUF1dGhvcml6ZXIoXG4gICAgICAgICAgaWQsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbi5sYW1iZGFBdXRob3JpemVyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmF1dGhvcml6YXRpb24uYXV0aG9yaXplclByb3BzLFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlczogYXV0aG9yaXphdGlvbi5hdXRob3JpemVyUHJvcHM/LnJlc3BvbnNlVHlwZXMgPz8gW1xuICAgICAgICAgICAgICBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6XG4gICAgICAgICAgICAgIGF1dGhvcml6YXRpb24uYXV0aG9yaXplclByb3BzPy5yZXN1bHRzQ2FjaGVUdGwgPz9cbiAgICAgICAgICAgICAgY2RrLkR1cmF0aW9uLmhvdXJzKDEpLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUludGVncmF0aW9uKFxuICAgIGludGVncmF0aW9uOiBJbnRlZ3JhdGlvblByb3BzLFxuICAgIGRuczogQXBpR2F0ZXdheVByb3BzW1wiZG5zXCJdLFxuICApOiBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbiB7XG4gICAgc3dpdGNoIChpbnRlZ3JhdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFwiQUxCXCI6IHtcbiAgICAgICAgLy8gVGhlIFZQQ0xpbmsgY29ubmVjdHMgdGhlIGludGVncmF0aW9uIGludG8gdGhlIEFMQidzIFZQQy4gTXVzdCBiZSBtYW51YWxseSBjcmVhdGVkIHdoZW5cbiAgICAgICAgLy8gdGhlIFZQQyBpcyBpbXBvcnRlZCwgd2hpY2ggaXMgdGhlIGNhc2Ugd2hlbiB1c2luZyBDb3JlUGxhdGZvcm1Db25zdW1lci5cbiAgICAgICAgY29uc3QgdnBjTGluayA9IG5ldyBhcGlndy5WcGNMaW5rKHRoaXMsIFwiQWxiVnBjTGlua1wiLCB7XG4gICAgICAgICAgdnBjOiBpbnRlZ3JhdGlvbi52cGMsXG4gICAgICAgICAgc2VjdXJpdHlHcm91cHM6IFtpbnRlZ3JhdGlvbi5zZWN1cml0eUdyb3VwXSxcbiAgICAgICAgICBzdWJuZXRzOiBpbnRlZ3JhdGlvbi52cGMuc2VsZWN0U3VibmV0cygpLCAvLyBUaGlzIGNvcnJlY3RseSBzZWxlY3RzIHRoZSBwcml2YXRlIHN1Ym5ldHNcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJNYXBwaW5nID0gbmV3IGFwaWd3LlBhcmFtZXRlck1hcHBpbmcoKVxuICAgICAgICAgIC8qKiBTZWUge0BsaW5rIEFsYkludGVncmF0aW9uUHJvcHMuaG9zdE5hbWV9ICovXG4gICAgICAgICAgLm92ZXJ3cml0ZUhlYWRlcihcbiAgICAgICAgICAgIFwiSG9zdFwiLFxuICAgICAgICAgICAgLy8gVGhlIEhvc3QgaGVhZGVyIGNhbiBOT1QgdXNlIGR5bmFtaWMgbWFwcGluZywgbGlrZSAkY29udGV4dC5kb21haW5OYW1lIGV0Yy5cbiAgICAgICAgICAgIGFwaWd3Lk1hcHBpbmdWYWx1ZS5jdXN0b20oaW50ZWdyYXRpb24uaG9zdE5hbWUpLFxuICAgICAgICAgIClcbiAgICAgICAgaWYgKGludGVncmF0aW9uLm1hcFBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGludGVncmF0aW9uLm1hcFBhcmFtZXRlcnMocGFyYW1ldGVyTWFwcGluZylcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb25zLkh0dHBBbGJJbnRlZ3JhdGlvbihcbiAgICAgICAgICBgQWxiSW50ZWdyYXRpb24tJHtkbnMuc3ViZG9tYWlufWAsXG4gICAgICAgICAgaW50ZWdyYXRpb24ubG9hZEJhbGFuY2VyTGlzdGVuZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VjdXJlU2VydmVyTmFtZTogaW50ZWdyYXRpb24uaG9zdE5hbWUsXG4gICAgICAgICAgICB2cGNMaW5rOiB2cGNMaW5rLFxuICAgICAgICAgICAgbWV0aG9kOiBhcGlndy5IdHRwTWV0aG9kLkFOWSxcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY2FzZSBcIkxhbWJkYVwiOiB7XG4gICAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb25zLkh0dHBMYW1iZGFJbnRlZ3JhdGlvbihcbiAgICAgICAgICBcIkxhbWJkYUludGVncmF0aW9uXCIsXG4gICAgICAgICAgaW50ZWdyYXRpb24ubGFtYmRhLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiBhcGlndy5QYXlsb2FkRm9ybWF0VmVyc2lvbi5WRVJTSU9OXzJfMCxcbiAgICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmc6IHVuZGVmaW5lZCxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBjYXNlIFwiU1FTXCI6IHtcbiAgICAgICAgLy8gQVBJLUdXIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIFNRUyBieSBkZWZhdWx0XG4gICAgICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgQXBpR3dUbyR7aW50ZWdyYXRpb24ucXVldWUubm9kZS5pZH1TZXJ2aWNlUm9sZWAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGBBbGxvd3MgQVBJLUdXIHRvIGFkZCBtZXNzYWdlcyB0byAke2ludGVncmF0aW9uLnF1ZXVlLnF1ZXVlQXJufWAsXG4gICAgICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImFwaWdhdGV3YXkuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICAgIGludGVncmF0aW9uLnF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKHJvbGUpXG5cbiAgICAgICAgbGV0IHBhcmFtZXRlck1hcHBpbmcgPSBuZXcgYXBpZ3cuUGFyYW1ldGVyTWFwcGluZygpXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWRldmVsb3AtaW50ZWdyYXRpb25zLWF3cy1zZXJ2aWNlcy1yZWZlcmVuY2UuaHRtbCNTUVMtU2VuZE1lc3NhZ2VcbiAgICAgICAgICAuY3VzdG9tKFwiUXVldWVVcmxcIiwgaW50ZWdyYXRpb24ucXVldWUucXVldWVVcmwpXG4gICAgICAgICAgLmN1c3RvbShcIk1lc3NhZ2VCb2R5XCIsIFwiJHJlcXVlc3QuYm9keVwiKVxuICAgICAgICAgIC5jdXN0b20oXCJSZWdpb25cIiwgXCJldS13ZXN0LTFcIikgLy8gQ2hhbmdlIHRoaXMgaWYgdGhlIFNRUyBxdWV1ZSBpcyBpbiBhbm90aGVyIHJlZ2lvbiFcblxuICAgICAgICBpZiAoaW50ZWdyYXRpb24ubWVzc2FnZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nID0gcGFyYW1ldGVyTWFwcGluZy5jdXN0b20oXG4gICAgICAgICAgICBcIk1lc3NhZ2VBdHRyaWJ1dGVzXCIsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShpbnRlZ3JhdGlvbi5tZXNzYWdlQXR0cmlidXRlcyksXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTcXNSb3V0ZUludGVncmF0aW9uKFwiU3FzSW50ZWdyYXRpb25cIiwge1xuICAgICAgICAgIHR5cGU6IGFwaWd3Lkh0dHBJbnRlZ3JhdGlvblR5cGUuQVdTX1BST1hZLFxuICAgICAgICAgIHN1YnR5cGU6IGFwaWd3Lkh0dHBJbnRlZ3JhdGlvblN1YnR5cGUuU1FTX1NFTkRfTUVTU0FHRSxcbiAgICAgICAgICBjcmVkZW50aWFsczogYXBpZ3cuSW50ZWdyYXRpb25DcmVkZW50aWFscy5mcm9tUm9sZShyb2xlKSxcbiAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nOiBwYXJhbWV0ZXJNYXBwaW5nLFxuICAgICAgICAgIHBheWxvYWRGb3JtYXRWZXJzaW9uOiBhcGlndy5QYXlsb2FkRm9ybWF0VmVyc2lvbi5WRVJTSU9OXzFfMCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJFdmVudEJyaWRnZVwiOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBUEktR1cgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gcHV0IGV2ZW50cyB0byBldmVudCBidXMgYnkgZGVmYXVsdFxuICAgICAgICAgKlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCB3ZSB3aWxsIGNyZWF0ZSBhIG5ldyByb2xlIHRvIGJlIHVzZWQgaWYgdGhpcyBpcyB1bmRlZmluZWQgaW4gdGhlIGlucHV0XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCByb2xlID1cbiAgICAgICAgICBpbnRlZ3JhdGlvbi5yb2xlID8/XG4gICAgICAgICAgbmV3IGlhbS5Sb2xlKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGBBcGlHd1RvJHtpbnRlZ3JhdGlvbi5ldmVudEJ1cy5ub2RlLmlkfVNlcnZpY2VSb2xlYCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBBbGxvd3MgQVBJLUdXIHRvIHB1dCBldmVudHMgdG8gJHtpbnRlZ3JhdGlvbi5ldmVudEJ1cy5ldmVudEJ1c0Fybn1gLFxuICAgICAgICAgICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImFwaWdhdGV3YXkuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuICAgICAgICBpbnRlZ3JhdGlvbi5ldmVudEJ1cy5ncmFudFB1dEV2ZW50c1RvKHJvbGUpXG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTWFwcGluZyA9IG5ldyBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKClcbiAgICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0RXZlbnRzUmVxdWVzdEVudHJ5Lmh0bWxcbiAgICAgICAgICAuY3VzdG9tKFwiRXZlbnRCdXNOYW1lXCIsIGludGVncmF0aW9uLmV2ZW50QnVzLmV2ZW50QnVzTmFtZSlcbiAgICAgICAgICAuY3VzdG9tKFwiRGV0YWlsXCIsIFwiJHJlcXVlc3QuYm9keVwiKVxuICAgICAgICAgIC5jdXN0b20oXCJEZXRhaWxUeXBlXCIsIGludGVncmF0aW9uLmRldGFpbFR5cGUpXG4gICAgICAgICAgLmN1c3RvbShcIlNvdXJjZVwiLCBcIiRjb250ZXh0LmFwaUlkXCIpXG5cbiAgICAgICAgcmV0dXJuIG5ldyBFdmVudEJyaWRnZVJvdXRlSW50ZWdyYXRpb24oXCJFdmVudEJyaWRnZUludGVncmF0aW9uXCIsIHtcbiAgICAgICAgICB0eXBlOiBhcGlndy5IdHRwSW50ZWdyYXRpb25UeXBlLkFXU19QUk9YWSxcbiAgICAgICAgICBzdWJ0eXBlOiBhcGlndy5IdHRwSW50ZWdyYXRpb25TdWJ0eXBlLkVWRU5UQlJJREdFX1BVVF9FVkVOVFMsXG4gICAgICAgICAgY3JlZGVudGlhbHM6IGFwaWd3LkludGVncmF0aW9uQ3JlZGVudGlhbHMuZnJvbVJvbGUocm9sZSksXG4gICAgICAgICAgcGFyYW1ldGVyTWFwcGluZzogcGFyYW1ldGVyTWFwcGluZyxcbiAgICAgICAgICBwYXlsb2FkRm9ybWF0VmVyc2lvbjogYXBpZ3cuUGF5bG9hZEZvcm1hdFZlcnNpb24uVkVSU0lPTl8xXzAsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93cyBhIGdyYW50YWJsZSB0YXJnZXQgKHJvbGUsIHVzZXIgZXRjLikgcGVybWlzc2lvbiB0byBpbnZva2UgdGhlIEFQSS5cbiAgICogT25seSB3b3JrcyB3aGVuIHVzaW5nIGBJQU1gIGFzIHtAbGluayBBcGlHYXRld2F5Um91dGUuYXV0aG9yaXphdGlvbn0uXG4gICAqXG4gICAqIEBwYXJhbSB0YXJnZXQgQSBncmFudGFibGUsIGxpa2Uge0BsaW5rIGlhbS5Sb2xlfVxuICAgKi9cbiAgcHVibGljIGdyYW50SW52b2tlKHRhcmdldDogaWFtLklHcmFudGFibGUpIHtcbiAgICBmb3IgKGNvbnN0IHJvdXRlUHJvcHMgb2YgdGhpcy5wcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGNvbnN0IGF1dGhUeXBlID1cbiAgICAgICAgcm91dGVQcm9wcy5hdXRob3JpemF0aW9uPy50eXBlID8/IHRoaXMucHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24/LnR5cGVcblxuICAgICAgaWYgKGF1dGhUeXBlICE9PSBcIklBTVwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2Fubm90IGdyYW50IGludm9rZSBmb3IgYW4gQVBJIEdhdGV3YXkgd2hlbiBub3QgdXNpbmcgSUFNIGF1dGggKGZvdW5kIGF1dGggJyR7YXV0aFR5cGV9JyBvbiByb3V0ZSAnJHtyb3V0ZVByb3BzLnBhdGh9JykgWyR7Y2RrLlN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZX1dYCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgcm91dGUgb2YgdGhpcy5yb3V0ZXMpIHtcbiAgICAgIHJvdXRlLmdyYW50SW52b2tlKHRhcmdldClcbiAgICB9XG4gIH1cbn1cblxuLyoqIEFjdHMgYXMgZ2x1ZSAoYmV0d2VlbiB0aGUgaW50ZWdyYXRpb24gcHJvcHMgYW5kIHRoZSBIdHRwQXBpKSB3aGVuIGNyZWF0aW5nIGFuIFNxc0ludGVncmF0aW9uLiAqL1xuY2xhc3MgU3FzUm91dGVJbnRlZ3JhdGlvbiBleHRlbmRzIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgdXNlZCBpbiB0aGUge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gY29uc3RydWN0XG4gICAqICAgIGNyZWF0ZWQgaW50ZXJuYWxseSBieSB7QGxpbmsgYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24uX2JpbmRUb1JvdXRlfS5cbiAgICogICAgW1NvdXJjZSBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9iNWFlMzc3ODJiYzNjYjYzN2VlZWY5ZmJiMWZiZTJjNWVmZGZjMDY4L3BhY2thZ2VzLyU0MGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi9saWIvaHR0cC9pbnRlZ3JhdGlvbi50cyNMMzIxKVxuICAgKiBAcGFyYW0gaW50ZWdyYXRpb25Qcm9wcyBUaGUgcHJvcHMgdG8gcGFzcyB0byB0aGUge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIGludGVncmF0aW9uUHJvcHM6IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uQ29uZmlnLFxuICApIHtcbiAgICBzdXBlcihpZClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHNlbmRzIHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBmb3IgY3JlYXRpbmcgYSB7QGxpbmsgYXBpZ3cuSHR0cEludGVncmF0aW9ufSB0byB0aGVcbiAgICoge0BsaW5rIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9ufS5cbiAgICovXG4gIGJpbmQoKTogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25Db25maWcge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9iNWFlMzc3ODJiYzNjYjYzN2VlZWY5ZmJiMWZiZTJjNWVmZGZjMDY4L3BhY2thZ2VzLyU0MGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi9saWIvaHR0cC9pbnRlZ3JhdGlvbi50cyNMMzE5XG4gICAgcmV0dXJuIHRoaXMuaW50ZWdyYXRpb25Qcm9wc1xuICB9XG59XG5cbi8qKiBBY3RzIGFzIGdsdWUgKGJldHdlZW4gdGhlIGludGVncmF0aW9uIHByb3BzIGFuZCB0aGUgSHR0cEFwaSkgd2hlbiBjcmVhdGluZyBhbiBFdmVudEJyaWRnZSBpbnRlZ3JhdGlvbi4gKi9cbmNsYXNzIEV2ZW50QnJpZGdlUm91dGVJbnRlZ3JhdGlvbiBleHRlbmRzIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgdXNlZCBpbiB0aGUge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gY29uc3RydWN0XG4gICAqICAgIGNyZWF0ZWQgaW50ZXJuYWxseSBieSB7QGxpbmsgYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24uX2JpbmRUb1JvdXRlfS5cbiAgICogICAgW1NvdXJjZSBjb2RlXShodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9iNWFlMzc3ODJiYzNjYjYzN2VlZWY5ZmJiMWZiZTJjNWVmZGZjMDY4L3BhY2thZ2VzLyU0MGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi9saWIvaHR0cC9pbnRlZ3JhdGlvbi50cyNMMzIxKVxuICAgKiBAcGFyYW0gaW50ZWdyYXRpb25Qcm9wcyBUaGUgcHJvcHMgdG8gcGFzcyB0byB0aGUge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gY29uc3RydWN0LlxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIGludGVncmF0aW9uUHJvcHM6IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uQ29uZmlnLFxuICApIHtcbiAgICBzdXBlcihpZClcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHNlbmRzIHRoZSBwcm9wZXJ0aWVzIG5lZWRlZCBmb3IgY3JlYXRpbmcgYSB7QGxpbmsgYXBpZ3cuSHR0cEludGVncmF0aW9ufSB0byB0aGVcbiAgICoge0BsaW5rIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9ufS5cbiAgICovXG4gIGJpbmQoKTogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25Db25maWcge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi9iNWFlMzc3ODJiYzNjYjYzN2VlZWY5ZmJiMWZiZTJjNWVmZGZjMDY4L3BhY2thZ2VzLyU0MGF3cy1jZGsvYXdzLWFwaWdhdGV3YXl2Mi9saWIvaHR0cC9pbnRlZ3JhdGlvbi50cyNMMzE5XG4gICAgcmV0dXJuIHRoaXMuaW50ZWdyYXRpb25Qcm9wc1xuICB9XG59XG5cbi8qKlxuICogV2hlbiB1c2luZyBgTm9kZWpzRnVuY3Rpb25gIHdpdGggYGVudHJ5YCwgd2UgcG9pbnQgQ0RLIHRvIGEgZmlsZSB3aXRoIG91ciBsYW1iZGEgY29kZS4gVGhpcyBjYW5cbiAqIGVpdGhlciBiZSBhIFR5cGVTY3JpcHQgb3IgSmF2YVNjcmlwdCBmaWxlLiBXaGVuIGNyZWF0aW5nIGNvbnN0cnVjdHMgaW4gdGVzdHMgaW5zaWRlIHRoaXMgbGlicmFyeSxcbiAqIHRoZSBlbnRyeSB3aWxsIHBvaW50IHRvIHRoZSBUeXBlU2NyaXB0IGZpbGUgaW4gdGhlIHNvdXJjZSBjb2RlLiBCdXQgd2hlbiBhIGxpYnJhcnkgY29uc3VtZXIgdXNlc1xuICogdGhpcywgaXQgd2lsbCBpbnN0ZWFkIHBvaW50IHRvIHRoZSB0cmFuc3BpbGVkIEphdmFTY3JpcHQgZmlsZS4gU28gdG8gc2V0IHRoZSBjb3JyZWN0IGZpbGVcbiAqIGV4dGVuc2lvbiwgd2UgbXVzdCBjaGVjayBpZiB3ZSdyZSBiZWluZyBydW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIFR5cGVTY3JpcHQgc291cmNlIGNvZGVcbiAqIChzcmMvYXBpLWdhdGV3YXkpLCBvdGhlcndpc2Ugd2UncmUgYmVpbmcgcnVuIGJ5IGEgY29uc3VtZXIgYXMgdHJhbnNwaWxlZCBKYXZhU2NyaXB0LlxuICovXG5jb25zdCBhdXRob3JpemVyRmlsZUV4dGVuc2lvbiA9IF9fZGlybmFtZS5lbmRzV2l0aChcInNyYy9hcGktZ2F0ZXdheVwiKVxuICA/IFwidHNcIlxuICA6IFwianNcIlxuXG4vKipcbiAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggcmVhZHMgYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgaGVhZGVyIGFuZFxuICogdmVyaWZpZXMgdGhlIHRva2VuIGFnYWluc3QgYSBDb2duaXRvIHVzZXIgcG9vbC5cbiAqL1xuY2xhc3MgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplcjxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcsXG4+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhOiBsYW1iZGEuSUZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFVzZSBzaW1wbGUgcmVzcG9uc2UgdHlwZSAoYHsgaXNBdXRob3JpemVkOiB0cnVlL2ZhbHNlIH1gKSwgYXMgb3Bwb3NlZCB0byByZXR1cm5pbmcgYW4gSUFNXG4gICAqIFBvbGljeSBkb2N1bWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZVR5cGVzOiBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlW10gPSBbXG4gICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ29nbml0b1VzZXJQb29sQXV0aG9yaXplclByb3BzPEF1dGhTY29wZXNUPixcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5sYW1iZGEgPSBuZXcgbGFtYmRhTm9kZWpzLk5vZGVqc0Z1bmN0aW9uKHRoaXMsIFwiQXV0aG9yaXplckZ1bmN0aW9uXCIsIHtcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oXG4gICAgICAgIF9fZGlybmFtZSxcbiAgICAgICAgYGF1dGhvcml6ZXJzL2NvZ25pdG8tdXNlci1wb29sLWF1dGhvcml6ZXIuJHthdXRob3JpemVyRmlsZUV4dGVuc2lvbn1gLFxuICAgICAgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yNF9YLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBVU0VSX1BPT0xfSUQ6IHByb3BzLnVzZXJQb29sLnVzZXJQb29sSWQsXG4gICAgICAgIFJFUVVJUkVEX1NDT1BFOiBwcm9wcy5yZXF1aXJlZFNjb3BlID8/IFwiXCIsXG4gICAgICAgIENSRURFTlRJQUxTX0ZPUl9JTlRFUk5BTF9BVVRIT1JJWkFUSU9OOlxuICAgICAgICAgIHByb3BzLmNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uXG4gICAgICAgICAgICA/IHByb3BzLmNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uXG4gICAgICAgICAgICA6IFwiXCIsXG4gICAgICB9LFxuICAgIH0pXG5cbiAgICBpZiAocHJvcHMuY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb24pIHtcbiAgICAgIHNlY3JldHNtYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgYCR7aWR9QmFzaWNBdXRoU2VjcmV0YCxcbiAgICAgICAgcHJvcHMuY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb24sXG4gICAgICApLmdyYW50UmVhZCh0aGlzLmxhbWJkYSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIHJlYWRzIGBBdXRob3JpemF0aW9uOiBCYXNpYyA8YmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbHM+YFxuICogaGVhZGVyIGFuZCB2ZXJpZmllcyB0aGUgY3JlZGVudGlhbHMgYWdhaW5zdCBhIGdpdmVuIHNlY3JldC5cbiAqL1xuY2xhc3MgQmFzaWNBdXRoQXV0aG9yaXplciBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYTogbGFtYmRhLklGdW5jdGlvblxuXG4gIC8vIFNpbXBsZSBpcyBgeyBpc0F1dGhvcml6ZWQ6IHRydWUvZmFsc2UgfWAsIGFzIG9wcG9zZWQgdG8gcmV0dXJuaW5nIGFuIElBTSBQb2xpY3kgZG9jdW1lbnRcbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGVbXSA9IFtcbiAgICBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRSxcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBCYXNpY0F1dGhBdXRob3JpemVyUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubGFtYmRhID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCBcIkJhc2ljQXV0aExhbWJkYVwiLCB7XG4gICAgICBlbnRyeTogcGF0aC5qb2luKFxuICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgIGBhdXRob3JpemVycy9iYXNpYy1hdXRoLWF1dGhvcml6ZXIuJHthdXRob3JpemVyRmlsZUV4dGVuc2lvbn1gLFxuICAgICAgKSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFuIGF1dGhvcml6ZXIgZm9yIEFQSS1HYXRld2F5IHRoYXQgY2hlY2tzIEJhc2ljIEF1dGggY3JlZGVudGlhbHMgb24gcmVxdWVzdHNcIixcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yNF9YLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQ1JFREVOVElBTFNfU0VDUkVUX05BTUU6IHByb3BzLmNyZWRlbnRpYWxzU2VjcmV0TmFtZVxuICAgICAgICAgID8gcHJvcHMuY3JlZGVudGlhbHNTZWNyZXROYW1lXG4gICAgICAgICAgOiBcIlwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICBzY29wZSxcbiAgICAgIGAke2lkfUJhc2ljQXV0aFNlY3JldGAsXG4gICAgICBwcm9wcy5jcmVkZW50aWFsc1NlY3JldE5hbWUsXG4gICAgKS5ncmFudFJlYWQodGhpcy5sYW1iZGEpXG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIGFsbG93cyBib3RoOlxuICogLSBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxhY2Nlc3MgdG9rZW4+YCBoZWFkZXIsIGZvciB3aGljaCB0aGUgdG9rZW4gaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBnaXZlblxuICogICBDb2duaXRvIHVzZXIgcG9vbFxuICogLSBgQXV0aG9yaXphdGlvbjogQmFzaWMgPGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzPmAgaGVhZGVyLCBmb3Igd2hpY2ggdGhlIGNyZWRlbnRpYWxzIGFyZVxuICogICBjaGVja2VkIGFnYWluc3QgdGhlIGNyZWRlbnRpYWxzIGZyb20gdGhlIGdpdmVuIGJhc2ljIGF1dGggc2VjcmV0IG5hbWVcbiAqXG4gKiBJZiBlaXRoZXIgb2YgdGhlc2UgYXJlIGdpdmVuIGFuZCB2YWxpZCwgdGhlIHJlcXVlc3QgaXMgYXV0aGVudGljYXRlZC5cbiAqL1xuY2xhc3MgQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyPFxuICBBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyxcbj4gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IGxhbWJkYS5JRnVuY3Rpb25cblxuICAvKipcbiAgICogVXNlIHNpbXBsZSByZXNwb25zZSB0eXBlIChgeyBpc0F1dGhvcml6ZWQ6IHRydWUvZmFsc2UgfWApLCBhcyBvcHBvc2VkIHRvIHJldHVybmluZyBhbiBJQU1cbiAgICogUG9saWN5IGRvY3VtZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGVbXSA9IFtcbiAgICBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRSxcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wczxBdXRoU2NvcGVzVD4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubGFtYmRhID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCBcIkF1dGhvcml6ZXJGdW5jdGlvblwiLCB7XG4gICAgICBlbnRyeTogcGF0aC5qb2luKFxuICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgIGBhdXRob3JpemVycy9jb2duaXRvLXVzZXItcG9vbC1vci1iYXNpYy1hdXRoLWF1dGhvcml6ZXIuJHthdXRob3JpemVyRmlsZUV4dGVuc2lvbn1gLFxuICAgICAgKSxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yNF9YLFxuICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBVU0VSX1BPT0xfSUQ6IHByb3BzLnVzZXJQb29sID8gcHJvcHMudXNlclBvb2wudXNlclBvb2xJZCA6IFwiXCIsXG4gICAgICAgIFJFUVVJUkVEX1NDT1BFOiBwcm9wcy5yZXF1aXJlZFNjb3BlID8/IFwiXCIsXG4gICAgICAgIEJBU0lDX0FVVEhfQ1JFREVOVElBTFNfU0VDUkVUX05BTUU6IHByb3BzLmJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZVxuICAgICAgICAgID8gcHJvcHMuYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lXG4gICAgICAgICAgOiBcIlwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgaWYgKHByb3BzLmJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZSkge1xuICAgICAgc2VjcmV0c21hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBgJHtpZH1CYXNpY0F1dGhTZWNyZXRgLFxuICAgICAgICBwcm9wcy5iYXNpY0F1dGhDcmVkZW50aWFsc1NlY3JldE5hbWUsXG4gICAgICApLmdyYW50UmVhZCh0aGlzLmxhbWJkYSlcbiAgICB9XG4gIH1cbn1cblxuLyoqIFJldHVybnMgYSBzaG9ydCBzZW1pLXVuaXF1ZSBoYXNoIG9mIHRoZSBnaXZlbiBzdHJpbmcuICovXG5mdW5jdGlvbiBzaG9ydEhhc2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBTSEEtMSBpcyBuby1ubyB3aGVuIHdlIG5lZWQgY3J5cHRvZ3JhcGhpYyBzZWN1cml0eSwgYnV0IGhlcmUgd2UganVzdCBpdCBmb3Igc2hvcnRlbmluZyBhIG5hbWUsXG4gIC8vIHdoaWNoIGlzIGZpbmVcbiAgcmV0dXJuIGNyZWF0ZUhhc2goXCJzaGExXCIpLnVwZGF0ZShzdHIpLmRpZ2VzdChcImhleFwiKS5zdWJzdHJpbmcoMCwgMTApXG59XG4iXX0=
535
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1hcGktZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGktZ2F0ZXdheS9odHRwLWFwaS1nYXRld2F5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDeEMsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUN4QyxPQUFPLEtBQUssR0FBRyxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLEtBQUssS0FBSyxNQUFNLDhCQUE4QixDQUFBO0FBQ3JELE9BQU8sS0FBSyxXQUFXLE1BQU0sMENBQTBDLENBQUE7QUFDdkUsT0FBTyxLQUFLLFlBQVksTUFBTSwyQ0FBMkMsQ0FBQTtBQUt6RSxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFBO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sd0JBQXdCLENBQUE7QUFDaEQsT0FBTyxLQUFLLFlBQVksTUFBTSwrQkFBK0IsQ0FBQTtBQUU3RCxPQUFPLEtBQUssY0FBYyxNQUFNLGdDQUFnQyxDQUFBO0FBRWhFLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixHQUVyQixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQTJCLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRXBFLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNqRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0FBb2UxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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OEIsQ0FDckMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzFCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRCw0REFBNEQ7QUFDNUQsU0FBUyxTQUFTLENBQUMsR0FBVztJQUM1QixpR0FBaUc7SUFDakcsZ0JBQWdCO0lBQ2hCLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCB9IGZyb20gXCJub2RlOmNyeXB0b1wiXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiXG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGFwaWd3IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyXCJcbmltcG9ydCAqIGFzIGF1dGhvcml6ZXJzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtYXBpZ2F0ZXdheXYyLWF1dGhvcml6ZXJzXCJcbmltcG9ydCAqIGFzIGludGVncmF0aW9ucyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXl2Mi1pbnRlZ3JhdGlvbnNcIlxuaW1wb3J0IHR5cGUgeyBJVXNlclBvb2wgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNvZ25pdG9cIlxuaW1wb3J0IHR5cGUgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIlxuaW1wb3J0IHR5cGUgKiBhcyBlbGIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCJcbmltcG9ydCB0eXBlICogYXMgZXZlbnRzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZXZlbnRzXCJcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiXG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIlxuaW1wb3J0ICogYXMgbGFtYmRhTm9kZWpzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqc1wiXG5pbXBvcnQgdHlwZSAqIGFzIGxvZ3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCJcbmltcG9ydCAqIGFzIHNlY3JldHNtYW5hZ2VyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIlxuaW1wb3J0IHR5cGUgKiBhcyBzcXMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zcXNcIlxuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiXG5pbXBvcnQgeyB0YWdSZXNvdXJjZXMgfSBmcm9tIFwiLi4vdGFnc1wiXG5pbXBvcnQge1xuICBBcGlHYXRld2F5QWNjZXNzTG9ncyxcbiAgdHlwZSBBcGlHYXRld2F5QWNjZXNzTG9nc1Byb3BzLFxufSBmcm9tIFwiLi9hY2Nlc3MtbG9nc1wiXG5pbXBvcnQgeyB0eXBlIEFwaUdhdGV3YXlEbnNQcm9wcywgQXBpR2F0ZXdheURvbWFpbiB9IGZyb20gXCIuL2RvbWFpblwiXG5cbmNvbnN0IF9fZmlsZW5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybClcbmNvbnN0IF9fZGlybmFtZSA9IHBhdGguZGlybmFtZShfX2ZpbGVuYW1lKVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUge0BsaW5rIEFwaUdhdGV3YXl9IGNvbnN0cnVjdC5cbiAqXG4gKiBAYXV0aG9yIEtyaXN0aWFuIFJla3N0YWQgPGtyZUBjYXByYWNvbnN1bHRpbmcubm8+XG4gKiBAYXV0aG9yIEhlcm1hbm4gTcO4cmtyaWQgPGhlbUBsaWZsaWcubm8+XG4gKi9cbmV4cG9ydCB0eXBlIEFwaUdhdGV3YXlQcm9wczxBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSB7XG4gIC8qKiBTZXR0aW5ncyBmb3IgdGhlIGV4dGVybmFsLWZhY2luZyBwYXJ0IG9mIHRoZSBBUEktR1cuICovXG4gIGRuczogQXBpR2F0ZXdheURuc1Byb3BzXG5cbiAgLyoqXG4gICAqIElmIG5vIGludGVncmF0aW9uIGlzIHNwZWNpZmllZCBmb3IgYSByb3V0ZSwgdGhpcyBpbnRlZ3JhdGlvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBTZWUge0BsaW5rIEludGVncmF0aW9uUHJvcHN9IGZvciB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAqL1xuICBkZWZhdWx0SW50ZWdyYXRpb24/OiBJbnRlZ3JhdGlvblByb3BzXG5cbiAgLyoqXG4gICAqIElmIG5vIGF1dGhvcml6YXRpb24gaXMgc3BlY2lmaWVkIGZvciBhIHJvdXRlLCB0aGlzIGF1dGhvcml6YXRpb24gaXMgdXNlZC5cbiAgICpcbiAgICogU2VlIHtAbGluayBBdXRob3JpemF0aW9uUHJvcHN9IGZvciB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4gICAqL1xuICBkZWZhdWx0QXV0aG9yaXphdGlvbj86IEF1dGhvcml6YXRpb25Qcm9wczxBdXRoU2NvcGVzVD5cblxuICByb3V0ZXM6IEFwaUdhdGV3YXlSb3V0ZTxBdXRoU2NvcGVzVD5bXVxuXG4gIC8qKlxuICAgKiBUaGUgQVBJLUdXIGFjY2VzcyBsb2dzIGZvciB0aGUgYCRkZWZhdWx0YCBzdGFnZSBhcmUga2VwdC5cbiAgICogVGhpcyBoYXMgb3B0aW9ucyBmb3IgdGhlIGxvZ3MuXG4gICAqL1xuICBhY2Nlc3NMb2dzPzogQXBpR2F0ZXdheUFjY2Vzc0xvZ3NQcm9wc1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSByb3V0ZS1sZXZlbCBtZXRyaWNzLlxuICAgKiBUaGlzIGNhbiBpbmNyZWFzZSBDbG91ZFdhdGNoIGNvc3RzIHdoZW4gbm90IGRpc2FibGVkLlxuICAgKlxuICAgKiBTZWUgW0FXUzogV29ya2luZyB3aXRoIG1ldHJpY3MgZm9yIEhUVFAgQVBJc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLW1ldHJpY3MuaHRtbD9pY21waWQ9YXBpZ2F0ZXdheV9jb25zb2xlX2hlbHAjOn46dGV4dD1hbmQlMjBzdGFnZSUyMElELi0sQXBpSWQlMkMlMjBTdGFnZSUyQyUyMFJvdXRlLC1GaWx0ZXJzJTIwQVBJJTIwR2F0ZXdheSlcbiAgICogZm9yIG1vcmUgaW5mby5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgZGV0YWlsZWRNZXRyaWNzPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBUaHJvdHRsaW5nIG9mIHJlcXVlc3RzLlxuICAgKiBJZiBub3Qgc2V0LCB0aGUgQVdTIGRlZmF1bHQgb2YgNTAwMCBidXJzdCBhbmQgMTAwMDAgcmF0ZSBpcyB1c2VkLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCB0aHJvdHRsaW5nIGlzIHBlci1hY2NvdW50LCBhbmQgY291bnRzIGFsbCBBUElzIGluIHRoZSBhY2NvdW50IGFuZCByZWdpb24uXG4gICAqIElmIHlvdSBoYXZlIGFub3RoZXIgQVBJIGluIHRoaXMgcmVnaW9uIGdldHRpbmcgMTBfMDAwIHJlcXVlc3QgcmF0ZSwgaXQgbWF5IGltcGFjdCB0aGlzIEFQSSBhcyB3ZWxsLlxuICAgKi9cbiAgdGhyb3R0bGluZz86IHtcbiAgICAvKipcbiAgICAgKiBHb2luZyBvdmVyIGA1XzAwMGAgbWF5IHJlcXVpcmUgeW91IHRvIGNvbnRhY3QgQVdTIFN1cHBvcnQgLSB0aGV5IGFyZSBhY2NvdW50IGJvdW5kLlxuICAgICAqL1xuICAgIGJ1cnN0PzogbnVtYmVyXG4gICAgLyoqXG4gICAgICogR29pbmcgb3ZlciBgMTBfMDAwYCBtYXkgcmVxdWlyZSB5b3UgdG8gY29udGFjdCBBV1MgU3VwcG9ydCAtIHRoZXkgYXJlIGFjY291bnQgYm91bmQuXG4gICAgICovXG4gICAgcmF0ZT86IG51bWJlclxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgQ09SUyBoZWFkZXJzIG9uIHJlc3BvbnNlcyBmcm9tIHRoZSBBUEkgR2F0ZXdheSB0byBhbGxvdyBhbGwgb3JpZ2lucywgaGVhZGVycyBhbmQgbWV0aG9kcy5cbiAgICogVXNlZnVsIGlmIHlvdXIgQVBJIHNob3VsZCBiZSBhY2Nlc3NlZCBieSBhbnkgYnJvd3Nlci5cbiAgICovXG4gIGNvcnNBbGxvd0FsbD86IGJvb2xlYW5cblxuICAvKipcbiAgICogSWYgc29tZSBzZXR0aW5ncyBpbiB0aGlzIGNvbnN0cnVjdCBkbyBub3Qgd29yayBmb3IgeW91LCB0aGlzIGlzIGFuIGVzY2FwZSBoYXRjaCBtZWNoYW5pc20gdG9cbiAgICogb3ZlcnJpZGUgYW55dGhpbmcuXG4gICAqL1xuICBwcm9wc092ZXJyaWRlPzoge1xuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHNldHRpbmdzIGZvciB0aGUge0BsaW5rIGFwaWd3Lkh0dHBBcGl9IChhY2Nlc3NpYmxlIGluIHtAbGluayBBcGlHYXRld2F5Lmh0dHBBcGl9KS5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGZyb250ZW5kIGFjY2Vzc2luZyB0aGlzIEFQSSwgeW91IG1pZ2h0IHdhbnQgdG8gc2V0XG4gICAgICogW0NPUlMgcHJlZmxpZ2h0XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2FwaS92MS9kb2NzL2F3cy1hcGlnYXRld2F5djItcmVhZG1lLmh0bWwjY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXNoYXJpbmctY29ycylcbiAgICAgKiBzZXR0aW5ncy5cbiAgICAgKi9cbiAgICBodHRwQXBpPzogUGFydGlhbDxhcGlndy5IdHRwQXBpUHJvcHM+XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQXBpR2F0ZXdheVJvdXRlPEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9IHtcbiAgLyoqIFRoZSBwYXRoIG9mIHRoZSByb3V0ZSB0byBleHBvc2UgdGhyb3VnaCB0aGUgQVBJIEdhdGV3YXkuIFVzZSBcIi9cIiBmb3IgdGhlIHJvb3Qgcm91dGUuICovXG4gIHBhdGg6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0LCB3ZSBvbmx5IGZvcndhcmQgcmVxdWVzdHMgdGhhdCBtYXRjaCB0aGUgcm91dGUncyBwYXRoIGV4YWN0bHkuIFNvIGZvciBhIHJvdXRlIHdpdGhcbiAgICogcGF0aCBgL2FwaS91c2Vyc2AsIGEgcmVxdWVzdCB0byBgL2FwaS91c2Vyc2Agd2lsbCBiZSBmb3J3YXJkZWQsIGJ1dCBhIHJlcXVlc3QgdG9cbiAgICogYC9hcGkvdXNlcnMvYWRtaW5gIHdpbGwgbm90LiBJZiB5b3Ugd2FudCB0byBmb3J3YXJkIHJlcXVlc3RzIHRvIGFsbCBzdWItcGF0aHMgdW5kZXIgdGhlIHJvdXRlJ3NcbiAgICogcGF0aCwgeW91IGNhbiBzZXQgdGhpcyB0byB0cnVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaW5jbHVkZVN1YnBhdGhzPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBUaGUgSFRUUCBtZXRob2QgdG8gZXhwb3NlLiBgQU5ZYCBleHBvc2VzIGFsbCBIVFRQIG1ldGhvZHMgb24gdGhlIHBhdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiQU5ZXCJcbiAgICovXG4gIG1ldGhvZD86IEh0dHBNZXRob2RcblxuICAvKipcbiAgICogVGhlIGludGVncmF0aW9uIHRoYXQgdGhlIHJvdXRlIHdpbGwgZm9yd2FyZCB0by4gU2VlIHtAbGluayBJbnRlZ3JhdGlvblByb3BzfSBmb3IgdGhlIGF2YWlsYWJsZVxuICAgKiBvcHRpb25zLlxuICAgKlxuICAgKiBJZiB1bmRlZmluZWQsIHVzZXMgdGhlIHtAbGluayBBcGlHYXRld2F5UHJvcHMuZGVmYXVsdEludGVncmF0aW9ufS5cbiAgICovXG4gIGludGVncmF0aW9uPzogSW50ZWdyYXRpb25Qcm9wc1xuXG4gIC8qKlxuICAgKiBIb3cgcmVxdWVzdHMgb24gdGhlIHJvdXRlIGFyZSBhdXRoZW50aWNhdGVkLiBTZWUge0BsaW5rIEF1dGhvcml6YXRpb25Qcm9wc30gZm9yIHRoZSBhdmFpbGFibGVcbiAgICogb3B0aW9ucy5cbiAgICpcbiAgICogSWYgdW5kZWZpbmVkLCB1c2VzIHRoZSB7QGxpbmsgQXBpR2F0ZXdheVByb3BzLmRlZmF1bHRBdXRob3JpemF0aW9ufS5cbiAgICovXG4gIGF1dGhvcml6YXRpb24/OiBBdXRob3JpemF0aW9uUHJvcHM8QXV0aFNjb3Blc1Q+XG59XG5cbmV4cG9ydCB0eXBlIEh0dHBNZXRob2QgPVxuICB8IFwiQU5ZXCJcbiAgfCBcIkdFVFwiXG4gIHwgXCJQT1NUXCJcbiAgfCBcIlBVVFwiXG4gIHwgXCJQQVRDSFwiXG4gIHwgXCJERUxFVEVcIlxuICB8IFwiT1BUSU9OU1wiXG4gIHwgXCJIRUFEXCJcblxuZXhwb3J0IHR5cGUgSW50ZWdyYXRpb25Qcm9wcyA9XG4gIC8qKiBVc2UgdGhpcyB3aGVuIGNvbm5lY3RpbmcgdGhlIHJvdXRlIHRvIGFuIEFMQiAoQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcikuICovXG4gIHwgKHsgdHlwZTogXCJBTEJcIiB9ICYgQWxiSW50ZWdyYXRpb25Qcm9wcylcbiAgLyoqIFVzZSB0aGlzIHdoZW4gY29ubmVjdGluZyByb3V0ZSB0byBhIExhbWJkYS4gKi9cbiAgfCAoeyB0eXBlOiBcIkxhbWJkYVwiIH0gJiBMYW1iZGFJbnRlZ3JhdGlvblByb3BzKVxuICAvKiogVXNlIHRoaXMgd2hlbiBjb25uZWN0aW5nIGEgcm91dGUgdG8gc2VuZCB0byBhbiBTUVMgcXVldWUuICovXG4gIHwgKHsgdHlwZTogXCJTUVNcIiB9ICYgU3FzSW50ZWdyYXRpb25Qcm9wcylcbiAgLyoqIFVzZSB0aGlzIHdoZW4gY29ubmVjdGluZyBhIHJvdXRlIHRvIHNlbmQgdG8gYW4gRXZlbnRCcmlkZ2UgZXZlbnQgYnVzLiAqL1xuICB8ICh7IHR5cGU6IFwiRXZlbnRCcmlkZ2VcIiB9ICYgRXZlbnRCcmlkZ2VJbnRlZ3JhdGlvblByb3BzKVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgQVBJLUdXIC0+IEFMQiAoQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlcikgaW50ZWdyYXRpb24uXG4gKlxuICogU2VlIHRoZSBub3RlIG9uIHtAbGluayBBcGlHYXRld2F5fSBhYm91dCB0aGUgbG9hZCBiYWxhbmNlciBzZWN1cml0eSBncm91cC5cbiAqL1xuZXhwb3J0IHR5cGUgQWxiSW50ZWdyYXRpb25Qcm9wcyA9IHtcbiAgLyoqXG4gICAqIEEgbGlzdGVuZXIgb24gZS5nLiBwb3J0IDQ0MyAoSFRUUFMpLlxuICAgKlxuICAgKiBTZWUgdGhlIG5vdGUgb24ge0BsaW5rIEFwaUdhdGV3YXl9IGFib3V0IHRoZSBsb2FkIGJhbGFuY2VyIHNlY3VyaXR5IGdyb3VwLlxuICAgKi9cbiAgbG9hZEJhbGFuY2VyTGlzdGVuZXI6IGVsYi5JQXBwbGljYXRpb25MaXN0ZW5lclxuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBuYW1lIChkb21haW4gbmFtZSkgb2YgdGhlIGJhY2tlbmQgc2VydmljZSB0aGF0IHdlIHdhbnQgdG8gcmVhY2ggdGhyb3VnaCB0aGUgQUxCLlxuICAgKlxuICAgKiBUaGlzIGlzIHVzZWQgdG86XG4gICAqIC0gVmVyaWZ5IHRoZSBIVFRQUyBjZXJ0aWZpY2F0ZSBvZiB0aGUgYmFja2VuZCBzZXJ2aWNlLCBzbyB0aGF0IHRoZSByZXF1ZXN0IGZvcndhcmRlZCBmcm9tXG4gICAqICAgQVBJLUdXIGNhbiB1c2UgVExTXG4gICAqIC0gU2V0IHRoZSBgSG9zdGAgaGVhZGVyIG9uIHRoZSByZXF1ZXN0IHdoZW4gZm9yd2FyZGluZyB0byB0aGUgQUxCLCBzbyB0aGF0IHJlcXVlc3RzIGNhbiBiZVxuICAgKiAgIHJvdXRlZCB0byB0aGUgY29ycmVjdCBUYXJnZXQgR3JvdXBcbiAgICpcbiAgICogRXhhbXBsZSB2YWx1ZTogYDxzZXJ2aWNlPi5zdGFnaW5nLm15LXByb2plY3QubGlmbGlnLmlvYCAobm90IHByZWZpeGVkIGJ5IGBodHRwczovL2ApLlxuICAgKi9cbiAgaG9zdE5hbWU6IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIHVzZWQgYnkgdGhlIEFMQi4gVGhlIEFQSS1HVyBpbnRlZ3JhdGlvbiB3aWxsIGNvbm5lY3QgdG8gdGhlIEFMQiB1c2luZyBhIFZQQyBMaW5rIGZvclxuICAgKiB0aGlzIFZQQy5cbiAgICpcbiAgICogU2VlIHRoZSBub3RlIG9uIHtAbGluayBBcGlHYXRld2F5fSBhYm91dCB0aGUgbG9hZCBiYWxhbmNlciBzZWN1cml0eSBncm91cC5cbiAgICovXG4gIHZwYzogZWMyLklWcGNcblxuICAvKipcbiAgICogQSBzZWN1cml0eSBncm91cCAoU0cpIHRoYXQgYWxsb3dzIGluY29taW5nIHRyYWZmaWMgdG8gdGhlIEFMQi4gV2lsbCBiZSB1c2VkIGJ5IHRoZSBWUEMgbGluaywgc29cbiAgICogdGhlIEFQSS1HVyBpbnRlZ3JhdGlvbiBjYW4gY29ubmVjdC5cbiAgICpcbiAgICogVGhpcyBpcyB1c3VhbGx5IHRoZSBzYW1lIFNHIGFzIHRoZSBBTEIgdXNlcywgYmVjYXVzZSB0aGV5IGhhdmUgYSBydWxlIHRoYXQgYWxsb3dzIHRyYWZmaWMgZnJvbVxuICAgKiBvdGhlcnMgaW4gdGhlIHNhbWUgU0cuXG4gICAqXG4gICAqIFNlZSB0aGUgbm90ZSBvbiB7QGxpbmsgQXBpR2F0ZXdheX0gYWJvdXQgdGhlIGxvYWQgYmFsYW5jZXIgc2VjdXJpdHkgZ3JvdXAuXG4gICAqL1xuICBzZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXBcblxuICAvKipcbiAgICogTWFwIHJlcXVlc3QgcGFyYW1ldGVycyAoYWRkL292ZXJ3cml0ZSBwYXRoL2hlYWRlcnMvcXVlcnkgcGFyYW1zKSBiZWZvcmUgZm9yd2FyZGluZyB0byB0aGVcbiAgICogYmFja2VuZC5cbiAgICpcbiAgICogU2VlIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktcGFyYW1ldGVyLW1hcHBpbmcuaHRtbH1cbiAgICogZm9yIG1vcmUgb24gdGhpcy4gUmVhZCB0aGUgJ1Jlc2VydmVkIGhlYWRlcnMnIHNlY3Rpb24gZm9yIHdoaWNoIGhlYWRlcnMgY2Fubm90IGJlIG92ZXJyaWRkZW4uXG4gICAqIEluIGFkZGl0aW9uIHRvIHRoZSBBV1MtcmVzZXJ2ZWQgaGVhZGVycywgeW91IHNob3VsZCBub3Qgb3ZlcnJpZGUgdGhlICdIb3N0JyBoZWFkZXIgZWl0aGVyLCBhc1xuICAgKiB0aGF0J3MgdXNlZCBmb3Igcm91dGluZyB0aGUgcmVxdWVzdCB0byB0aGUgY29ycmVjdCBzZXJ2aWNlIGJlaGluZCB0aGUgbG9hZCBiYWxhbmNlci5cbiAgICpcbiAgICogIyMjIEV4YW1wbGU6XG4gICAqXG4gICAqIEFkZGluZyBhIGhlYWRlcjpcbiAgICogYGBgXG4gICAqIG1hcFBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzKSA9PiBwYXJhbWV0ZXJzLm92ZXJ3cml0ZUhlYWRlcihcbiAgICogICAgXCJYLU15LUN1c3RvbS1IZWFkZXJcIixcbiAgICogICAgYXBpZ3cuTWFwcGluZ1ZhbHVlLmN1c3RvbShcIm15LWN1c3RvbS12YWx1ZVwiKSxcbiAgICogKVxuICAgKiBgYGBcbiAgICpcbiAgICogT3ZlcndyaXRpbmcgdGhlIHBhdGggKGlmLCBmb3IgZXhhbXBsZSwgeW91IGNvbmZpZ3VyZSBhIGAvdXNlcnNgIHJvdXRlIG9uIHRoZSBBUEkgR2F0ZXdheSB0aGF0XG4gICAqIHlvdSB3YW50IHRvIGZvcndhcmQgdG8gYC9hcGkvdXNlcnNgIG9uIHRoZSBiYWNrZW5kKTpcbiAgICogYGBgXG4gICAqIG1hcFBhcmFtZXRlcnM6IChwYXJhbWV0ZXJzKSA9PiBwYXJhbWV0ZXJzLm92ZXJ3cml0ZVBhdGgoXCIvYXBpL3VzZXJzXCIpXG4gICAqIGBgYFxuICAgKi9cbiAgbWFwUGFyYW1ldGVycz86IChwYXJhbWV0ZXJzOiBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKSA9PiB2b2lkXG59XG5cbmV4cG9ydCB0eXBlIExhbWJkYUludGVncmF0aW9uUHJvcHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgTGFtYmRhIGludGVncmF0aW9uIHVzZXMgdGhlIFYyIHBheWxvYWQgZm9ybWF0OlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWRldmVsb3AtaW50ZWdyYXRpb25zLWxhbWJkYS5odG1sfVxuICAgKlxuICAgKiBJZiB3cml0aW5nIHRoZSBMYW1iZGEgaW4gVHlwZVNjcmlwdCwgdGhpcyBtZWFucyB5b3Ugc2hvdWxkIHVzZSBgQVBJR2F0ZXdheVByb3h5RXZlbnRWMmAgYXMgdGhlXG4gICAqIHJlcXVlc3QgdHlwZSwgYW5kIGBBUElHYXRld2F5UHJveHlSZXN1bHRWMmAgYXMgdGhlIHJlc3BvbnNlIHR5cGUuXG4gICAqL1xuICBsYW1iZGE6IGxhbWJkYS5JRnVuY3Rpb25cbn1cblxuZXhwb3J0IHR5cGUgU3FzSW50ZWdyYXRpb25Qcm9wcyA9IHtcbiAgcXVldWU6IHNxcy5JUXVldWVcblxuICAvKipcbiAgICogTWVzc2FnZSBhdHRyaWJ1dGVzIHRvIHBhc3Mgb24gdG8gU1FTLiBUaGUga2V5cyBpbiB0aGlzIG9iamVjdCBhcmUgdGhlIG5hbWVzIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICAgKiBFYWNoIGF0dHJpYnV0ZSBoYXMgYSBEYXRhVHlwZSBmaWVsZCwgYW5kIGVpdGhlciBhIFN0cmluZ1ZhbHVlIG9yIEJpbmFyeVZhbHVlIGZpZWxkIGRlcGVuZGluZyBvblxuICAgKiBpdHMgdHlwZS4gU2VlIEFXUyBkb2NzOlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTU2ltcGxlUXVldWVTZXJ2aWNlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX01lc3NhZ2VBdHRyaWJ1dGVWYWx1ZS5odG1sXG4gICAqXG4gICAqIEluIHRoZSBTdHJpbmdWYWx1ZSBmaWVsZCwgeW91IGNhbiBkbyBBUEkgR2F0ZXdheSBwYXJhbWV0ZXIgbWFwcGluZzpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLXBhcmFtZXRlci1tYXBwaW5nLmh0bWxcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgXG4gICAqIG1lc3NhZ2VBdHRyaWJ1dGVzOiB7XG4gICAqICAgY2xpZW50SWQ6IHtcbiAgICogICAgIERhdGFUeXBlOiBcIlN0cmluZ1wiLFxuICAgKiAgICAgU3RyaW5nVmFsdWU6IFwiJHtjb250ZXh0LmF1dGhvcml6ZXIuY2xpZW50SWR9XCIsXG4gICAqICAgfSxcbiAgICogfSxcbiAgICogYGBgXG4gICAqL1xuICBtZXNzYWdlQXR0cmlidXRlcz86IHtcbiAgICBbYXR0cmlidXRlTmFtZTogc3RyaW5nXTpcbiAgICAgIHwgeyBEYXRhVHlwZTogXCJTdHJpbmdcIiB8IFwiTnVtYmVyXCI7IFN0cmluZ1ZhbHVlOiBzdHJpbmcgfVxuICAgICAgfCB7XG4gICAgICAgICAgRGF0YVR5cGU6IFwiQmluYXJ5XCJcbiAgICAgICAgICAvKiogQmFzZTY0LWVuY29kZWQgYmluYXJ5IGRhdGEgb2JqZWN0LiAqL1xuICAgICAgICAgIEJpbmFyeVZhbHVlOiBzdHJpbmdcbiAgICAgICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIEV2ZW50QnJpZGdlSW50ZWdyYXRpb25Qcm9wcyA9IHtcbiAgLyoqXG4gICAqIEEgcm9sZSBpcyBuZWVkZWQgaW4gb3JkZXIgdG8gZ3JhbnQgYXBpIGdhdGV3YXkgYWNjZXNzIHRvIHB1dCBldmVudHNcbiAgICogb24gdGhlIGRlc2lyZWQgZXZlbnQgYnVzLlxuICAgKlxuICAgKiBJZiBubyByb2xlIGlzIHByb3ZpZGVkLCBhIG5ldyByb2xlIHdpbGwgYmUgY3JlYXRlZCBpbiBvcmRlciB0byBncmFudCBhcGlndyBhY2Nlc3MgdG8gdGhlIGV2ZW50IGJ1c1xuICAgKlxuICAgKiBAZGVmYXVsdDogY3JlYXRlcyByb2xlIHRoYXQgY2FuIGJlIGFzc3VtZWQgYnkgYXBpIGd3IHdpdGggYWNjZXNzIHRvIHB1dEV2ZW50cyBvbiB0aGUgYnV0IGlucHV0dGVkXG4gICAqL1xuICByb2xlPzogaWFtLklSb2xlXG4gIC8qKlxuICAgKiBBbiBFdmVudEJyaWRnZSBldmVudCBidXMuIFJlcXVlc3QgYm9kaWVzIHNlbnQgdG8gdGhlIHJvdXRlIHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoaXMgZXZlbnQgYnVzLFxuICAgKiBpbiB0aGUgYERldGFpbGAgZmllbGQgKHNlZVxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZXZlbnRicmlkZ2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUHV0RXZlbnRzUmVxdWVzdEVudHJ5Lmh0bWwpLlxuICAgKi9cbiAgZXZlbnRCdXM6IGV2ZW50cy5JRXZlbnRCdXNcbiAgLyoqXG4gICAqIFNldHMgdGhlIGBEZXRhaWxUeXBlYCBmaWVsZCAoaS5lLiwgZXZlbnQgdHlwZSkgb24gZXZlbnRzIHB1Ymxpc2hlZCB0byB0aGUgZXZlbnQgYnVzLlxuICAgKlxuICAgKiBTZWUgQVdTIGRvY3MgZm9yIG1vcmUgb24gdGhpczpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1B1dEV2ZW50c1JlcXVlc3RFbnRyeS5odG1sXG4gICAqL1xuICBkZXRhaWxUeXBlOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQXV0aG9yaXphdGlvblByb3BzPEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiA9XG4gIC8qKlxuICAgKiBObyBhdXRoZW50aWNhdGlvbiwgZm9yIHdoZW4geW91IHdhbnQgYSBmdWxseSBwdWJsaWMgcm91dGUgKG9yIGhhbmRsZSBhdXRoZW50aWNhdGlvbiBpbiB0aGVcbiAgICogYmFja2VuZCBpbnRlZ3JhdGlvbikuXG4gICAqL1xuICB8IHsgdHlwZTogXCJOT05FXCIgfVxuICAvKipcbiAgICogQVdTIElBTSBhdXRob3JpemF0aW9uLlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktYWNjZXNzLWNvbnRyb2wtaWFtLmh0bWxcbiAgICovXG4gIHwgeyB0eXBlOiBcIklBTVwiIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBnZW5lcmljIEpXVCBhdXRob3JpemVyLiBJdCB1c2VzIHRoZSBPcGVuSUQgQ29ubmVjdCBjb25maWd1cmF0aW9uIHB1Ymxpc2hlZCBhdCB0aGVcbiAgICogaXNzdWVyJ3MgYC8ud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbmAgZW5kcG9pbnQgdG8gdmFsaWRhdGUgdGhlIEpXVCwgYW5kIGNoZWNrcyB0aGF0IHRoZVxuICAgKiB0b2tlbidzIGF1ZGllbmNlIG1hdGNoZXMgdGhlIGdpdmVuIGBhdWRpZW5jZWAuXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1qd3QtYXV0aG9yaXplci5odG1sXG4gICAqL1xuICB8ICh7XG4gICAgICB0eXBlOiBcIkpXVFwiXG4gICAgfSAmIEp3dEF1dGhvcml6ZXJQcm9wcylcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjdXN0b20gTGFtYmRhIGF1dGhvcml6ZXIgd2hpY2ggcmVhZHMgYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgaGVhZGVyXG4gICAqIGFuZCB2ZXJpZmllcyB0aGUgdG9rZW4gYWdhaW5zdCBhIENvZ25pdG8gdXNlciBwb29sLlxuICAgKi9cbiAgfCAoe1xuICAgICAgdHlwZTogXCJDT0dOSVRPX1VTRVJfUE9PTFwiXG4gICAgfSAmIENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXJQcm9wczxBdXRoU2NvcGVzVD4pXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIHJlYWRzIGBBdXRob3JpemF0aW9uOiBCYXNpYyA8YmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbHM+YFxuICAgKiBoZWFkZXIgYW5kIHZlcmlmaWVzIHRoZSBjcmVkZW50aWFscyBhZ2FpbnN0IGEgZ2l2ZW4gc2VjcmV0LlxuICAgKi9cbiAgfCAoeyB0eXBlOiBcIkJBU0lDX0FVVEhcIiB9ICYgQmFzaWNBdXRoQXV0aG9yaXplclByb3BzKVxuICAvKipcbiAgICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCBhbGxvd3MgYm90aDpcbiAgICogLSBgQXV0aG9yaXphdGlvbjogQmVhcmVyIDxhY2Nlc3MgdG9rZW4+YCBoZWFkZXIsIGZvciB3aGljaCB0aGUgdG9rZW4gaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZVxuICAgKiAgIGdpdmVuIENvZ25pdG8gdXNlciBwb29sXG4gICAqIC0gYEF1dGhvcml6YXRpb246IEJhc2ljIDxiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFscz5gIGhlYWRlciwgZm9yIHdoaWNoIHRoZSBjcmVkZW50aWFscyBhcmVcbiAgICogICBjaGVja2VkIGFnYWluc3QgdGhlIGNyZWRlbnRpYWxzIGZyb20gdGhlIGdpdmVuIGJhc2ljIGF1dGggc2VjcmV0IG5hbWVcbiAgICpcbiAgICogSWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBnaXZlbiBhbmQgdmFsaWQsIHRoZSByZXF1ZXN0IGlzIGF1dGhlbnRpY2F0ZWQuXG4gICAqL1xuICB8ICh7XG4gICAgICB0eXBlOiBcIkNPR05JVE9fVVNFUl9QT09MX09SX0JBU0lDX0FVVEhcIlxuICAgIH0gJiBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wczxBdXRoU2NvcGVzVD4pXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIGF1dGhvcml6ZXIgd2l0aCB0aGUgZ2l2ZW4gTGFtYmRhIGZ1bmN0aW9uLiBVc2UgdGhpcyBpZiB5b3UgaGF2ZSBjdXN0b21cbiAgICogYXV0aG9yaXphdGlvbiBsb2dpYywgYW5kIHRoZSBvdGhlciBhdXRob3JpemVycyBmcm9tIHRoaXMgY29uc3RydWN0IGRvbid0IG1lZXQgeW91ciBuZWVkcy5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2h0dHAtYXBpLWxhbWJkYS1hdXRob3JpemVyLmh0bWxcbiAgICovXG4gIHwgKHsgdHlwZTogXCJDVVNUT01fTEFNQkRBX0FVVEhPUklaRVJcIiB9ICYgQ3VzdG9tTGFtYmRhQXV0aG9yaXplclByb3BzKVxuXG5leHBvcnQgdHlwZSBDb2duaXRvVXNlclBvb2xBdXRob3JpemVyUHJvcHM8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPiA9IHtcbiAgdXNlclBvb2w6IElVc2VyUG9vbFxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGF0IGFjY2VzcyB0b2tlbiBjbGFpbXMgY29udGFpbiB0aGUgZ2l2ZW4gc2NvcGUuXG4gICAqXG4gICAqIFdoZW4gZGVmaW5lZCBhcyBwYXJ0IG9mIGEgcmVzb3VyY2Ugc2VydmVyLCBzY29wZXMgYXJlIG9uIHRoZSBmb3JtYXQ6XG4gICAqIGB7cmVzb3VyY2Ugc2VydmVyIGlkZW50aWZpZXJ9L3tzY29wZSBuYW1lfWAsIGUuZy4gYGV4dGVybmFsL3ZpZXdfdXNlcnNgLlxuICAgKlxuICAgKiBUbyBnZXQgbW9yZSB0eXBlIHNhZmV0eSBvbiB0aGlzIHBhcmFtZXRlciwgc2VlIHRoZSBkb2NzIGZvciB0aGUgYEF1dGhTY29wZXNUYCB0eXBlIHBhcmFtZXRlciBvblxuICAgKiB7QGxpbmsgQXBpR2F0ZXdheX0uXG4gICAqL1xuICByZXF1aXJlZFNjb3BlPzogQXV0aFNjb3Blc1RcblxuICAvKipcbiAgICogTmFtZSBvZiBzZWNyZXQgaW4gQVdTIFNlY3JldHMgTWFuYWdlciB0aGF0IHN0b3JlcyBiYXNpYyBhdXRoIGNyZWRlbnRpYWxzIGZvciB0aGUgYmFja2VuZFxuICAgKiBzZXJ2aWNlLCB0byBiZSBmb3J3YXJkZWQgdG8gdGhlIGJhY2tlbmQgaWYgQ29nbml0byB1c2VyIHBvb2wgYXV0aGVudGljYXRpb24gc3VjY2VlZGVkLlxuICAgKlxuICAgKiBUaGUgc2VjcmV0IHZhbHVlIG11c3QgZm9sbG93IHRoaXMgZm9ybWF0OlxuICAgKiBgYGBqc29uXG4gICAqIHsgXCJ1c2VybmFtZVwiOiBcIjx1c2VybmFtZT5cIiwgXCJwYXNzd29yZFwiOiBcIjxwYXNzd29yZD5cIiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBUaGlzIHByb3Agc29sdmVzIHRoZSBmb2xsb3dpbmcgdXNlLWNhc2U6XG4gICAqIC0gWW91IHdhbnQgdG8gZG8gQ29nbml0byB1c2VyIHBvb2wgYXV0aGVudGljYXRpb24gaW4gdGhlIEFQSSBHYXRld2F5XG4gICAqIC0gWW91IHdhbnQgYW4gYWRkaXRpb25hbCBhdXRoIGNoZWNrIGluIHRoZSBiYWNrZW5kLCBidXQgeW91IGRvbid0IHdhbnQgdG8gZGVhbCB3aXRoIENvZ25pdG9cbiAgICogICB0aGVyZVxuICAgKiAtIFRoZSBiYWNrZW5kIHVzZXMgYmFzaWMgYXV0aFxuICAgKlxuICAgKiBUaGlzIHByb3Agc29sdmVzIHRoaXMgYnkgbGV0dGluZyB5b3Ugc3BlY2lmeSBjcmVkZW50aWFscyB0byBwYXNzIHRvIHRoZSBiYWNrZW5kIGFmdGVyIEFQSS1HV1xuICAgKiBhdXRoZW50aWNhdGlvbiBzdWNjZWVkcy4gWW91IGNhbiBwYXNzIHRoZSBlbmNvZGVkIGNyZWRlbnRpYWxzIHRocm91Z2hcbiAgICoge0BsaW5rIEFsYkludGVncmF0aW9uUHJvcHMubWFwUGFyYW1ldGVyc30sIHVzaW5nIHRoZSBgYXV0aG9yaXplci5pbnRlcm5hbEF1dGhvcml6YXRpb25IZWFkZXJgXG4gICAqIGNvbnRleHQgdmFyaWFibGUsIGxpa2Ugc286XG4gICAqIGBgYFxuICAgKiBtYXBQYXJhbWV0ZXJzOiAocGFyYW1ldGVycykgPT4gcGFyYW1ldGVycy5vdmVyd3JpdGVIZWFkZXIoXG4gICAqICAgLy8gJ0F1dGhvcml6YXRpb24nIGhlYWRlciBjYW5ub3QgYmUgb3ZlcnJpZGRlbiwgc28gd2UgdXNlIGEgY3VzdG9tIGhlYWRlclxuICAgKiAgIFwiWC1JbnRlcm5hbC1BdXRob3JpemF0aW9uXCIsXG4gICAqICAgYXBpZ3cuTWFwcGluZ1ZhbHVlLmNvbnRleHRWYXJpYWJsZShcImF1dGhvcml6ZXIuaW50ZXJuYWxBdXRob3JpemF0aW9uSGVhZGVyXCIpLFxuICAgKiApXG4gICAqIGBgYFxuICAgKiBUaGUgYmFja2VuZCBjYW4gdGhlbiBjaGVjayB0aGUgYFgtSW50ZXJuYWwtQXV0aG9yaXphdGlvbmAgaGVhZGVyLlxuICAgKi9cbiAgY3JlZGVudGlhbHNGb3JJbnRlcm5hbEF1dGhvcml6YXRpb24/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQmFzaWNBdXRoQXV0aG9yaXplclByb3BzID0ge1xuICAvKipcbiAgICogTmFtZSBvZiBzZWNyZXQgaW4gQVdTIFNlY3JldHMgTWFuYWdlciB0aGF0IHN0b3JlcyBiYXNpYyBhdXRoIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBUaGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCBmb3IgdGhlIHNlY3JldCB2YWx1ZTpcbiAgICogLSBTaW5nbGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkOlxuICAgKiAgIGBgYGpzb25cbiAgICogICB7IFwidXNlcm5hbWVcIjogXCI8dXNlcm5hbWU+XCIsIFwicGFzc3dvcmRcIjogXCI8cGFzc3dvcmQ+XCIgfVxuICAgKiAgIGBgYFxuICAgKiAtIEFycmF5IG9mIHVzZXJuYW1lICsgcGFzc3dvcmQgb2JqZWN0czpcbiAgICogICBgYGBqc29uXG4gICAqICAgeyBcImNyZWRlbnRpYWxzXCI6IFwiW3tcXFwidXNlcm5hbWVcXFwiOlxcXCI8dXNlci0xPlxcXCIsXFxcInBhc3N3b3JkXFxcIjpcXFwicGFzc3dvcmQtMVxcXCJ9LHtcXFwidXNlcm5hbWVcXFwiOlxcXCI8dXNlci0yPlxcXCIsXFxcInBhc3N3b3JkXFxcIjpcXFwiPHBhc3N3b3JkLTI+XFxcIn1dXCIgfVxuICAgKiAgIGBgYFxuICAgKiAgIC0gVGhlIHZhbHVlIG9mIHRoZSBgY3JlZGVudGlhbHNgIGZpZWxkIGlzIGEgc3RyaW5nLCB3aXRoIGEgc3RyaW5naWZpZWQsIGVzY2FwZWQgSlNPTiBhcnJheSBvZlxuICAgKiAgICAgb2JqZWN0cyB3aXRoIGB1c2VybmFtZWAgYW5kIGBwYXNzd29yZGAgZmllbGRzLlxuICAgKiAgIC0gVGhlIHJlYXNvbiB0aGF0IHRoaXMgc2Vjb25kIGZvcm1hdCBzdG9yZXMgc3RyaW5naWZpZWQgSlNPTiBfaW5zaWRlXyBKU09OLCBpcyBkdWUgdG8gYVxuICAgKiAgICAgbGltaXRhdGlvbiBpbiBMaWZsaWcncyBgbG9hZC1zZWNyZXRzYCBsaWJyYXJ5LCB3aGljaCBvbmx5IGFsbG93cyBzdG9yaW5nIHN0cmluZyB2YWx1ZXMuXG4gICAqIC0gQXJyYXkgb2YgYmFzZTY0LWVuY29kZWQgY3JlZGVudGlhbHM6XG4gICAqICAgYGBganNvblxuICAgKiAgIHsgXCJjcmVkZW50aWFsc1wiOiBcIltcXFwiPGVuY29kZWQtY3JlZGVudGlhbC0xPlxcXCIsXFxcIjxlbmNvZGVkLWNyZWRlbnRpYWwtMj5cXFwiXVwiIH1cbiAgICogICBgYGBcbiAgICogICAtIEVhY2ggZWxlbWVudCBpcyBlbmNvZGVkIGZyb20gYDx1c2VybmFtZT46PHBhc3N3b3JkPmAuXG4gICAqICAgLSBUaGUgYXJyYXkgaXMgc3RyaW5naWZpZWQgZm9yIHRoZSBzYW1lIHJlYXNvbiBhcyBhYm92ZS5cbiAgICpcbiAgICogSWYgdGhlIHNlY3JldCB1c2VzIG9uZSBvZiB0aGUgYXJyYXkgZm9ybWF0cywgdGhlIGF1dGhvcml6ZXIgd2lsbCBtYXRjaCB0aGUgcmVxdWVzdCdzXG4gICAqIEF1dGhvcml6YXRpb24gaGVhZGVyIGFnYWluc3QgYW55IG9uZSBvZiB0aGUgY3JlZGVudGlhbHMuXG4gICAqL1xuICBjcmVkZW50aWFsc1NlY3JldE5hbWU6IHN0cmluZ1xufVxuXG4vKiogQW4gYXJyYXkgdGhhdCBpcyBndWFyYW50ZWVkIGJ5IHRoZSB0eXBlIHN5c3RlbSB0byBoYXZlIGF0IGxlYXN0IG9uZSBlbGVtZW50LiAqL1xuZXhwb3J0IHR5cGUgTm9uRW1wdHlBcnJheTxUPiA9IFtULCAuLi5UW11dXG5cbmV4cG9ydCB0eXBlIEp3dEF1dGhvcml6ZXJQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTCBvZiB0aGUgdG9rZW4gaXNzdWVyLiBBUEkgR2F0ZXdheSBmZXRjaGVzIHRoZSBpc3N1ZXIncyBPcGVuSUQgQ29ubmVjdCBjb25maWd1cmF0aW9uXG4gICAqIGZyb20gYDxpc3N1ZXJVcmw+Ly53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uYCB0byBvYnRhaW4gdGhlIGtleXMgdXNlZCB0byB2YWxpZGF0ZSB0aGUgSldULlxuICAgKi9cbiAgaXNzdWVyVXJsOiBzdHJpbmdcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHRoZSBpbnRlbmRlZCByZWNpcGllbnRzIG9mIHRoZSBKV1QuIEEgdmFsaWQgSldUIG11c3QgcHJvdmlkZSBhbiBgYXVkYCAob3IgYGNsaWVudF9pZGApXG4gICAqIGNsYWltIHRoYXQgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgdmFsdWVzLiBBdCBsZWFzdCBvbmUgYXVkaWVuY2UgbXVzdCBiZSBnaXZlbi5cbiAgICovXG4gIGF1ZGllbmNlOiBOb25FbXB0eUFycmF5PHN0cmluZz5cbn1cblxuZXhwb3J0IHR5cGUgQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyUHJvcHM8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nLFxuPiA9IHtcbiAgdXNlclBvb2w6IElVc2VyUG9vbFxuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHNlY3JldCBpbiBBV1MgU2VjcmV0cyBNYW5hZ2VyIHRoYXQgc3RvcmVzIGJhc2ljIGF1dGggY3JlZGVudGlhbHMuXG4gICAqXG4gICAqIFNlZSB7QGxpbmsgQmFzaWNBdXRoQXV0aG9yaXplclByb3BzLmNyZWRlbnRpYWxzU2VjcmV0TmFtZX0gZm9yIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cy5cbiAgICovXG4gIGJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGF0IGFjY2VzcyB0b2tlbiBjbGFpbXMgY29udGFpbiB0aGUgZ2l2ZW4gc2NvcGUuIE9ubHkgYXBwbGljYWJsZSBmb3IgcmVxdWVzdHMgdGhhdFxuICAgKiB1c2UgYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgKG5vdCBhcHBsaWNhYmxlIGZvciBiYXNpYyBhdXRoKS5cbiAgICpcbiAgICogV2hlbiBkZWZpbmVkIGFzIHBhcnQgb2YgYSByZXNvdXJjZSBzZXJ2ZXIsIHNjb3BlcyBhcmUgb24gdGhlIGZvcm1hdDpcbiAgICogYHtyZXNvdXJjZSBzZXJ2ZXIgaWRlbnRpZmllcn0ve3Njb3BlIG5hbWV9YCwgZS5nLiBgZXh0ZXJuYWwvdmlld191c2Vyc2AuXG4gICAqXG4gICAqIFRvIGdldCBtb3JlIHR5cGUgc2FmZXR5IG9uIHRoaXMgcGFyYW1ldGVyLCBzZWUgdGhlIGRvY3MgZm9yIHRoZSBgQXV0aFNjb3Blc1RgIHR5cGUgcGFyYW1ldGVyIG9uXG4gICAqIHtAbGluayBBcGlHYXRld2F5fS5cbiAgICovXG4gIHJlcXVpcmVkU2NvcGU/OiBBdXRoU2NvcGVzVFxufVxuXG50eXBlIEN1c3RvbUxhbWJkYUF1dGhvcml6ZXJQcm9wcyA9IHtcbiAgLyoqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJ1biB3aGVuZXZlciB0aGUgQVBJIEdhdGV3YXkgcm91dGUgaXMgaW52b2tlZCwgdG8gYXV0aGVudGljYXRlXG4gICAqIHRoZSByZXF1ZXN0LiBTZWUgQVdTIGRvY3MgZm9yIG1vcmUgb24gaG93IHRvIHdyaXRlIHRoZSBMYW1iZGE6XG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1sYW1iZGEtYXV0aG9yaXplci5odG1sXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IHJlc3BvbnNlIGZvcm1hdCB1c2VkIGlzIGBIdHRwTGFtYmRhUmVzcG9uc2VUeXBlLlNJTVBMRWAgKGZvcm1hdCAyLjApLiBJZiB5b3Ugd3JpdGVcbiAgICogeW91ciBMYW1iZGEgaW4gVHlwZVNjcmlwdCwgdGhpcyBtZWFucyB0aGF0IHlvdXIgaGFuZGxlciBtdXN0IHJldHVyblxuICAgKiBgQVBJR2F0ZXdheVNpbXBsZUF1dGhvcml6ZXJSZXN1bHRgIChmcm9tIHRoZSBgYXdzLWxhbWJkYWAgcGFja2FnZSkuIFRoZSByZXF1ZXN0IGV2ZW50IHdpbGwgYWxzb1xuICAgKiB1c2UgZm9ybWF0IDIuMCAoYEFQSUdhdGV3YXlSZXF1ZXN0QXV0aG9yaXplckV2ZW50VjJgIGluIFR5cGVTY3JpcHQpLiBTZWUgdGhlIEFXUyBkb2NzIGxpbmtlZFxuICAgKiBhYm92ZSBmb3IgbW9yZSBkZXRhaWxzIG9uIHRoZXNlIGZvcm1hdHMuXG4gICAqXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIHJlc3BvbnNlIGZvcm1hdCB0eXBlIGluXG4gICAqIHtAbGluayBDdXN0b21MYW1iZGFBdXRob3JpemVyUHJvcHMuYXV0aG9yaXplclByb3BzfS5cbiAgICpcbiAgICogU2VlIHRoZSBMYW1iZGFzIHVuZGVyIHRoZSBgYXV0aG9yaXplcnNgIGZvbGRlciBuZXh0IHRvIHRoZSBgQXBpR2F0ZXdheWAgY29uc3RydWN0IGluXG4gICAqIGBsaWZsaWctY2RrYCBmb3IgZXhhbXBsZXMuXG4gICAqL1xuICBsYW1iZGFBdXRob3JpemVyOiBsYW1iZGEuSUZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFByb3BzIGZvciB0aGUgYEh0dHBMYW1iZGFBdXRob3JpemVyYCBjb25zdHJ1Y3QuIFdlIHByb3ZpZGUgc29tZSBkaWZmZXJlbnQgZGVmYXVsdHM6XG4gICAqIC0gYHJlc3BvbnNlVHlwZXNgIGRlZmF1bHRzIHRvIGBbSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEVdYFxuICAgKiAtIGByZXN1bHRzQ2FjaGVUdGxgIGRlZmF1bHRzIHRvIGBEdXJhdGlvbi5ob3VycygxKWBcbiAgICovXG4gIGF1dGhvcml6ZXJQcm9wcz86IFBhcnRpYWw8YXV0aG9yaXplcnMuSHR0cExhbWJkYUF1dGhvcml6ZXJQcm9wcz5cbn1cblxuLyoqXG4gKiBUaGlzIGNvbnN0cnVjdCB0cmllcyB0byBzaW1wbGlmeSB0aGUgY3JlYXRpb24gb2YgYW4gQVBJIEdhdGV3YXkgZm9yIGEgc2VydmljZSwgYnkgY29sbGVjdGluZyBtb3N0XG4gKiBvZiB0aGUgY29tbW9uIHNldHVwIGhlcmUuXG4gKlxuICogVGhlIGFwcHJvYWNoIGZvbGxvd2VkIGluIHRoaXMgY29uc3RydWN0IGlzOlxuICogMS4gT25lIEFQSS1HVyBwZXIgc2VydmljZVxuICogMi4gT25lIHN1YmRvbWFpbiBwZXIgQVBJLUdXIC8gc2VydmljZVxuICogMy4gVXNlIEhUVFAgQVBJLCBub3QgUkVTVFxuICogNC4gVXNlIGEgJGRlZmF1bHQgc3RhZ2Ugd2l0aCBhdXRvZGVwbG95XG4gKiA1LiBTdXBwb3J0IG11bHRpcGxlIHJvdXRlcyAod2l0aCBwb3NzaWJsZSBgL3twcm94eSt9YCB0byBsZXQgYWxsIHN1Yi1wYXRocyB0aHJvdWdoKVxuICogNi4gQWxsb3cgY3VzdG9tIGludGVncmF0aW9uL2F1dGhvcml6ZXIgZm9yIGVhY2ggcm91dGUsIG9yIGRlZmF1bHRzIGZvciB0aGUgd2hvbGUgZ2F0ZXdheVxuICpcbiAqIFRoZSByb3V0ZSBpbnRlZ3JhdGlvbiBpcyBvbmUgb2YgdGhlc2U6XG4gKiAtIEFMQiBwcml2YXRlIGludGVncmF0aW9uIHdpdGggVlBDIExpbmsgdXNpbmcgSFRUUFMgdG8gdGhlIEFMQlxuICogLSBMYW1iZGEgaW50ZWdyYXRpb25cbiAqIC0gU1FTIGludGVncmF0aW9uXG4gKlxuICogIyMjIExvYWQgQmFsYW5jZXIgU2VjdXJpdHkgR3JvdXBcbiAqXG4gKiBOb3RlIHRoYXQgdGhlIGxvYWQgYmFsYW5jZXIgdXNlZCBpbiBhbiB7QGxpbmsgQWxiSW50ZWdyYXRpb25Qcm9wc30gbXVzdCBhbGxvdyBvdXRib3VuZCBIVFRQU1xuICogdHJhZmZpYyB0byBpdHMgU2VjdXJpdHlHcm91cC4gT3RoZXJ3aXNlLCB0aGUgVlBDIExpbmsgdXNlZCBieSB0aGUgQVBJLUdXIGNhbid0IGdldCB0cmFmZmljIGZyb21cbiAqIHRoZSBBTEIuXG4gKlxuICogYGBgXG4gKiBjb25zdCBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKC4uLiwge1xuICogICBhbGxvd0FsbE91dGJvdW5kOiBmYWxzZSxcbiAqIH0pXG4gKlxuICogbG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cC5hZGRFZ3Jlc3NSdWxlKFxuICogICBsb2FkQmFsYW5jZXJTZWN1cml0eUdyb3VwLFxuICogICBlYzIuUG9ydC50Y3AoNDQzKSxcbiAqICAgXCJPdXRib3VuZCB0byBzZWxmIGZvciBBTEIgdG8gQVBJLUdXIFZQQy1MaW5rXCIsXG4gKiApXG4gKlxuICogY29uc3QgbG9hZEJhbGFuY2VyID0gbmV3IGxpZmxpZ0xvYWRCYWxhbmNlci5Mb2FkQmFsYW5jZXIoLi4uLFxuICogICB7XG4gKiAgICAgb3ZlcnJpZGVMb2FkQmFsYW5jZXJQcm9wczoge1xuICogICAgICAgc2VjdXJpdHlHcm91cDogbG9hZEJhbGFuY2VyU2VjdXJpdHlHcm91cCxcbiAqICAgICB9LFxuICogICB9LFxuICogKVxuICogYGBgXG4gKlxuICogQHRlbXBsYXRlIEF1dGhTY29wZXNUIFRoaXMgdHlwZSBwYXJhbWV0ZXIgYWxsb3dzIHlvdSB0byBpbXByb3ZlIHR5cGUgc2FmZXR5IG9uIHRoZVxuICogYHJlcXVpcmVkU2NvcGVgIGZpZWxkIG9uIHtAbGluayBDb2duaXRvVXNlclBvb2xPckJhc2ljQXV0aEF1dGhvcml6ZXJQcm9wc30sIGJ5IG5hcnJvd2luZyB0aGUgdHlwZVxuICogdG8gc3BlY2lmaWMgc3RyaW5ncy4gWW91IGNhbiB0aGVuIGV4dGVuZCB0aGUgYEFwaUdhdGV3YXlgIHdpdGggdGhpcyB0eXBlIHRvIGVuZm9yY2UgdGhvc2Ugc2NvcGVzXG4gKiBhY3Jvc3MgdGhlIGFwcGxpY2F0aW9uLiBSZW1lbWJlciB0aGF0IGF1dGggc2NvcGVzIG11c3QgYmUgb24gdGhlIGZvcm1hdFxuICogYHtyZXNvdXJjZSBzZXJ2ZXIgaWRlbnRpZmllcn0ve3Njb3BlIG5hbWV9YC5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgXG4gKiB0eXBlIEF1dGhTY29wZXMgPSBcImV4dGVybmFsL3JlYWRfdXNlcnNcIiB8IFwiaW50ZXJuYWwvY3JlYXRlX3VzZXJzXCJcbiAqXG4gKiBleHBvcnQgY2xhc3MgTXlQcm9qZWN0QXBpR2F0ZXdheSBleHRlbmRzIEFwaUdhdGV3YXk8QXV0aFNjb3Blcz4ge31cbiAqIGBgYFxuICogVHlwZVNjcmlwdCB3aWxsIHRoZW4gZW5mb3JjZSB0aGF0IGByZXF1aXJlZFNjb3BlYCBpcyBvbmUgb2YgYEF1dGhTY29wZXNgLCBhbmQgcHJvdmlkZVxuICogYXV0by1jb21wbGV0ZS5cbiAqXG4gKiBAYXV0aG9yIEtyaXN0aWFuIFJla3N0YWQgPGtyZUBjYXByYWNvbnN1bHRpbmcubm8+XG4gKiBAYXV0aG9yIEhlcm1hbm4gTcO4cmtyaWQgPGhlbUBsaWZsaWcubm8+XG4gKi9cbmV4cG9ydCBjbGFzcyBBcGlHYXRld2F5PFxuICBBdXRoU2NvcGVzVCBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbj4gZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIC8qKiBUaGUgQVBJIEdhdGV3YXkgSFRUUCBBUEkuIFRoaXMgaXMgdGhlIG1haW4gY29uc3RydWN0IGZvciBBUEktR1cuICovXG4gIHB1YmxpYyByZWFkb25seSBodHRwQXBpOiBhcGlndy5IdHRwQXBpXG5cbiAgLyoqIFRoZSByb3V0ZXMgd2hpY2ggY29ubmVjdCB0aGUge0BsaW5rIGh0dHBBcGl9IHRvIHRoZSBiYWNrZW5kIGludGVncmF0aW9uKHMpLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcm91dGVzOiBhcGlndy5IdHRwUm91dGVbXSA9IFtdXG5cbiAgLyoqIFRoZSBkb21haW4gd2hpY2ggY29uc3VtZXJzIG11c3QgdXNlLiovXG4gIHB1YmxpYyByZWFkb25seSBkb21haW46IHN0cmluZ1xuXG4gIC8qKiBBY2Nlc3MgbG9nIGdyb3VwLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG9nR3JvdXA6IGxvZ3MuTG9nR3JvdXBcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBBcGlHYXRld2F5UHJvcHM8QXV0aFNjb3Blc1Q+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFwaUdhdGV3YXlQcm9wczxBdXRoU2NvcGVzVD4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcbiAgICB0aGlzLnByb3BzID0gcHJvcHNcblxuICAgIEFwaUdhdGV3YXkudmFsaWRhdGVQcm9wcyhwcm9wcywgaWQsIGNkay5TdGFjay5vZih0aGlzKSlcblxuICAgIGNvbnN0IGN1c3RvbURvbWFpbiA9IG5ldyBBcGlHYXRld2F5RG9tYWluKHRoaXMsIFwiQ3VzdG9tRG9tYWluXCIsIHByb3BzLmRucylcbiAgICB0aGlzLmRvbWFpbiA9IGN1c3RvbURvbWFpbi5mdWxsRG9tYWluTmFtZVxuXG4gICAgbGV0IGNvcnNPcHRpb25zOiBhcGlndy5Db3JzUHJlZmxpZ2h0T3B0aW9ucyB8IHVuZGVmaW5lZFxuICAgIGlmIChwcm9wcy5jb3JzQWxsb3dBbGwpIHtcbiAgICAgIGNvcnNPcHRpb25zID0ge1xuICAgICAgICBhbGxvd09yaWdpbnM6IFtcIipcIl0sXG4gICAgICAgIC8vIFwiVGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIGNhbid0IGJlIHdpbGRjYXJkZWQgYW5kIGFsd2F5cyBuZWVkcyB0byBiZSBsaXN0ZWQgZXhwbGljaXRseVwiXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9BY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzXG4gICAgICAgIC8vIENvbnRlbnQtVHlwZSBtYXkgYWxzbyByZXF1aXJlIGV4cGxpY2l0IHdoaXRlbGlzdGluZzogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzYzNTY3NjQ3XG4gICAgICAgIGFsbG93SGVhZGVyczogW1wiQXV0aG9yaXphdGlvblwiLCBcIkNvbnRlbnQtVHlwZVwiLCBcIipcIl0sXG4gICAgICAgIC8vIE5vdCB1c2luZyAnKicgaGVyZSwgYmVjYXVzZSBcIkluIHJlcXVlc3RzIHdpdGggY3JlZGVudGlhbHMsIGl0IGlzIHRyZWF0ZWQgYXMgdGhlIGxpdGVyYWxcbiAgICAgICAgLy8gbWV0aG9kIG5hbWUgJyonIHdpdGhvdXQgc3BlY2lhbCBzZW1hbnRpY3NcIlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kc1xuICAgICAgICBhbGxvd01ldGhvZHM6IFtcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5HRVQsXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuUE9TVCxcbiAgICAgICAgICBhcGlndy5Db3JzSHR0cE1ldGhvZC5QVVQsXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuUEFUQ0gsXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuREVMRVRFLFxuICAgICAgICAgIGFwaWd3LkNvcnNIdHRwTWV0aG9kLk9QVElPTlMsXG4gICAgICAgICAgYXBpZ3cuQ29yc0h0dHBNZXRob2QuSEVBRCxcbiAgICAgICAgXSxcbiAgICAgICAgbWF4QWdlOiBjZGsuRHVyYXRpb24uZGF5cygxKSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgYWN0dWFsIEFQSS4gVGhpcyBob2xkcyB0aGUgcm91dGVzLCBhdXRob3JpemVycyBhbmQgaW50ZWdyYXRpb25zLlxuICAgIGNvbnN0IGFwaSA9IG5ldyBhcGlndy5IdHRwQXBpKHRoaXMsIGBIdHRwQXBpLSR7cHJvcHMuZG5zLnN1YmRvbWFpbn1gLCB7XG4gICAgICAvLyBkZWZhdWx0SW50ZWdyYXRpb246IGRlZmF1bHRJbnRlZ3JhdGlvbiwgLy8gVGhpcyBpcyBmb3IgYSBjYXRjaC1hbGwgJGRlZmF1bHQgcm91dGVcbiAgICAgIGRlc2NyaXB0aW9uOiBgQW4gSFRUUCBBUEkgZm9yICR7cHJvcHMuZG5zLnN1YmRvbWFpbn0uJHtwcm9wcy5kbnMuaG9zdGVkWm9uZS56b25lTmFtZX0uYCxcbiAgICAgIGRpc2FibGVFeGVjdXRlQXBpRW5kcG9pbnQ6IHRydWUsIC8vIEZvcmNlIGV4dGVybmFscyB0byBnbyB0aHJvdWdoIGN1c3RvbSBkb21haW4uIE1VU1QgYmUgdHJ1ZSB3aGVuIHVzaW5nIE11dHVhbCBUTFMsIGZvciBzZWN1cml0eSByZWFzb25zXG4gICAgICBjcmVhdGVEZWZhdWx0U3RhZ2U6IHRydWUsXG4gICAgICBkZWZhdWx0RG9tYWluTWFwcGluZzogeyBkb21haW5OYW1lOiBjdXN0b21Eb21haW4uYXBpR3dEb21haW5OYW1lIH0sXG4gICAgICBjb3JzUHJlZmxpZ2h0OiBjb3JzT3B0aW9ucyxcbiAgICAgIC4uLnByb3BzPy5wcm9wc092ZXJyaWRlPy5odHRwQXBpLFxuICAgIH0pXG4gICAgdGhpcy5odHRwQXBpID0gYXBpXG5cbiAgICBjb25zdCBzdGFnZSA9IGFwaS5kZWZhdWx0U3RhZ2U/Lm5vZGUuZGVmYXVsdENoaWxkIGFzIGFwaWd3LkNmblN0YWdlXG5cbiAgICBjb25zdCBsb2dzID0gbmV3IEFwaUdhdGV3YXlBY2Nlc3NMb2dzKFxuICAgICAgdGhpcyxcbiAgICAgIFwiQWNjZXNzTG9nc1wiLFxuICAgICAgc3RhZ2UsXG4gICAgICBwcm9wcy5hY2Nlc3NMb2dzLFxuICAgIClcbiAgICB0aGlzLmxvZ0dyb3VwID0gbG9ncy5sb2dHcm91cFxuXG4gICAgc3RhZ2UuZGVmYXVsdFJvdXRlU2V0dGluZ3MgPSB7XG4gICAgICAuLi5zdGFnZS5kZWZhdWx0Um91dGVTZXR0aW5ncyxcbiAgICAgIGRldGFpbGVkTWV0cmljc0VuYWJsZWQ6IHByb3BzLmRldGFpbGVkTWV0cmljcyA/PyB0cnVlLFxuICAgICAgdGhyb3R0bGluZ0J1cnN0TGltaXQ6IHByb3BzLnRocm90dGxpbmc/LmJ1cnN0LCAvLyBEZWZhdWx0IGZvciBhY2NvdW50IGlzIDVfMDAwXG4gICAgICB0aHJvdHRsaW5nUmF0ZUxpbWl0OiBwcm9wcy50aHJvdHRsaW5nPy5yYXRlLCAvLyBEZWZhdWx0IGZvciBhY2NvdW50IGlzIDEwXzAwMFxuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRJbnRlZ3JhdGlvbiA9IHByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvblxuICAgICAgPyB0aGlzLmNyZWF0ZUludGVncmF0aW9uKHByb3BzLmRlZmF1bHRJbnRlZ3JhdGlvbiwgcHJvcHMuZG5zKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGRlZmF1bHRBdXRob3JpemVyID0gcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb25cbiAgICAgID8gdGhpcy5jcmVhdGVBdXRob3JpemVyKFwiRGVmYXVsdEF1dGhvcml6ZXJcIiwgcHJvcHMuZGVmYXVsdEF1dGhvcml6YXRpb24pXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiBwcm9wcy5yb3V0ZXMpIHtcbiAgICAgIGxldCBpbnRlZ3JhdGlvbjogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb25cbiAgICAgIGlmIChyb3V0ZS5pbnRlZ3JhdGlvbikge1xuICAgICAgICBpbnRlZ3JhdGlvbiA9IHRoaXMuY3JlYXRlSW50ZWdyYXRpb24ocm91dGUuaW50ZWdyYXRpb24sIHByb3BzLmRucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGludGVncmF0aW9uID0gZGVmYXVsdEludGVncmF0aW9uISAvLyBWZXJpZmllZCBpbiB2YWxpZGF0ZVByb3BzXG4gICAgICB9XG5cbiAgICAgIGxldCBhdXRob3JpemVyOiBhcGlndy5JSHR0cFJvdXRlQXV0aG9yaXplciB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHJvdXRlLmF1dGhvcml6YXRpb24pIHtcbiAgICAgICAgYXV0aG9yaXplciA9IHRoaXMuY3JlYXRlQXV0aG9yaXplcihcbiAgICAgICAgICAvLyBVc2luZyB0aGUgcm91dGUgcGF0aCBoZXJlIGNhdXNlZCBDbG91ZEZvcm1hdGlvbiB0byBmYWlsIGR1ZSB0byByZXNvdXJjZSBuYW1lcyBiZWluZyB0b29cbiAgICAgICAgICAvLyBsb25nLiBUaGVyZWZvcmUsIHdlIG5vdyBoYXNoIHRoZSByb3V0ZSBwYXRoIHRvIGdldCBhIHNob3J0ZXIgbmFtZS5cbiAgICAgICAgICBgUm91dGVBdXRob3JpemVyJHtzaG9ydEhhc2goYCR7cm91dGUubWV0aG9kID8/IFwiXCJ9JHtyb3V0ZS5wYXRofWApfWAsXG4gICAgICAgICAgcm91dGUuYXV0aG9yaXphdGlvbixcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXV0aG9yaXplciA9IGRlZmF1bHRBdXRob3JpemVyXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvdXRlUGF0aHMgPSBbcm91dGUucGF0aF1cbiAgICAgIGlmIChyb3V0ZS5pbmNsdWRlU3VicGF0aHMgPT09IHRydWUpIHtcbiAgICAgICAgLy8gSWYgd2UgaW5jbHVkZSBzdWItcGF0aHMsIHdlIGFkZCBhbiBhZGRpdGlvbmFsIHJvdXRlIHdpdGggL3twcm94eSt9ICh0aGUgKyBtZWFucyBpdCB3aWxsXG4gICAgICAgIC8vIG1hdGNoIGFsbCBzdWJyb3V0ZXMpLiBXZSB3YW50IGJvdGggdGhpcyByb3V0ZSBhbmQgdGhlIG5vcm1hbCByb3V0ZSB3aXRob3V0IC97cHJveHkrfSxcbiAgICAgICAgLy8gc2luY2UgL3twcm94eSt9IHdpbGwgb25seSBtYXRjaCB0aGUgYmFzZSBwYXRoIHdpdGggdHJhaWxpbmcgc2xhc2guXG4gICAgICAgIHJvdXRlUGF0aHMucHVzaChcbiAgICAgICAgICBgJHtyb3V0ZS5wYXRoICsgKHJvdXRlLnBhdGggPT09IFwiL1wiID8gXCJcIiA6IFwiL1wiKX17cHJveHkrfWAsXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByb3V0ZVBhdGggb2Ygcm91dGVQYXRocykge1xuICAgICAgICAvLyBUaGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgQVBJIEdhdGV3YXkgY29uc3RydWN0IGhhZCBhIHNpbmdsZSByb3V0ZSB3aXRoIHRoZSBJRFxuICAgICAgICAvLyAnRGVmYXVsdFByb3h5Um91dGUnLCBhbmQgYWxsIGdhdGV3YXlzIHdlIHVzZWQgZXhwb3NlZCB0aGUgcm91dGUgL3twcm94eSt9LiBXaGVuIHRyeWluZyB0b1xuICAgICAgICAvLyBjaGFuZ2UgdG8gdGhpcyBuZXcgdmVyc2lvbiBvZiB0aGUgY29uc3RydWN0LCBkZXBsb3ltZW50IGZhaWxlZCBmb3IgZ2F0ZXdheXMgZXhwb3NpbmdcbiAgICAgICAgLy8gL3twcm94eSt9LCBiZWNhdXNlIFwiYSByb3V0ZSB3aXRoIHRoYXQga2V5IFtpLmUuIHBhdGggKyBtZXRob2RdIGFscmVhZHkgZXhpc3RzXCIuIFdlIHRoaW5rXG4gICAgICAgIC8vIHRoaXMgbWF5IGJlIGJlY2F1c2Ugd2UgdXNlZCB0aGUgc2FtZSByb3V0ZSBwYXRoLCBidXQgd2l0aCBhIG5ldyByb3V0ZSBJRCwgY2F1c2luZ1xuICAgICAgICAvLyBjb25mdXNpb24gZm9yIENsb3VkRm9ybWF0aW9uLiBTbyB3ZSBrZWVwIHRoZSBvbGQgcm91dGUgSUQgaGVyZSBmb3IgL3twcm94eSt9LlxuICAgICAgICBjb25zdCByb3V0ZUlkID1cbiAgICAgICAgICByb3V0ZVBhdGggPT09IFwiL3twcm94eSt9XCIgPyBcIkRlZmF1bHRQcm94eVJvdXRlXCIgOiBgUm91dGUtJHtyb3V0ZVBhdGh9YFxuXG4gICAgICAgIHRoaXMucm91dGVzLnB1c2goXG4gICAgICAgICAgbmV3IGFwaWd3Lkh0dHBSb3V0ZSh0aGlzLCByb3V0ZUlkLCB7XG4gICAgICAgICAgICBodHRwQXBpOiBhcGksXG4gICAgICAgICAgICBpbnRlZ3JhdGlvbjogaW50ZWdyYXRpb24sXG4gICAgICAgICAgICBhdXRob3JpemVyOiBhdXRob3JpemVyLFxuICAgICAgICAgICAgcm91dGVLZXk6IGFwaWd3Lkh0dHBSb3V0ZUtleS53aXRoKFxuICAgICAgICAgICAgICByb3V0ZVBhdGgsXG4gICAgICAgICAgICAgIHJvdXRlLm1ldGhvZFxuICAgICAgICAgICAgICAgID8gYXBpZ3cuSHR0cE1ldGhvZFtyb3V0ZS5tZXRob2RdXG4gICAgICAgICAgICAgICAgOiBhcGlndy5IdHRwTWV0aG9kLkFOWSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YWdSZXNvdXJjZXModGhpcywgKCkgPT4gKHsgc2VydmljZTogcHJvcHMuZG5zLnN1YmRvbWFpbiB9KSlcbiAgfVxuXG4gIC8qKiBAdGhyb3dzIEVycm9yICovXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlUHJvcHMoXG4gICAgcHJvcHM6IEFwaUdhdGV3YXlQcm9wcyxcbiAgICBpZDogc3RyaW5nLFxuICAgIHN0YWNrOiBjZGsuU3RhY2ssXG4gICkge1xuICAgIGZvciAoY29uc3Qgcm91dGUgb2YgcHJvcHMucm91dGVzKSB7XG4gICAgICBpZiAoIXJvdXRlLmludGVncmF0aW9uICYmICFwcm9wcy5kZWZhdWx0SW50ZWdyYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBObyBpbnRlZ3JhdGlvbiBkZWZpbmVkIGZvciByb3V0ZSAnJHtyb3V0ZS5wYXRofScsIGFuZCBubyBkZWZhdWx0IGludGVncmF0aW9uIHNwZWNpZmllZCBmb3IgdGhlIGdhdGV3YXlgLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAoIXJvdXRlLmF1dGhvcml6YXRpb24gJiYgIXByb3BzLmRlZmF1bHRBdXRob3JpemF0aW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgTm8gYXV0aG9yaXphdGlvbiBkZWZpbmVkIGZvciByb3V0ZSAnJHtyb3V0ZS5wYXRofScsIGFuZCBubyBkZWZhdWx0IGF1dGhvcml6YXRpb24gc3BlY2lmaWVkIGZvciB0aGUgZ2F0ZXdheWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmICghcm91dGUucGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgcGF0aCAnJHtyb3V0ZS5wYXRofSc6IHBhdGhzIG11c3QgYmVnaW4gd2l0aCAnLycgKHVzZSAnLycgZm9yIHJvb3QgcGF0aClgLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAocm91dGUucGF0aCAhPT0gXCIvXCIgJiYgcm91dGUucGF0aC5lbmRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbnZhbGlkIHBhdGggJyR7cm91dGUucGF0aH0nOiBwYXRocyBjYW5ub3QgZW5kIHdpdGggJy8nIChleGNlcHQgcm9vdCBwYXRoKWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgcm91dGUuaW50ZWdyYXRpb24/LnR5cGUgPT09IFwiQUxCXCIgJiZcbiAgICAgICAgcm91dGUuaW50ZWdyYXRpb24uaG9zdE5hbWUuc3RhcnRzV2l0aChcImh0dHBzOlwiKVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGhlIGFsYkludGVncmF0aW9uLmhvc3RIdHRwc05hbWUgc2hvdWxkIG5vdCBpbmNsdWRlIGEgcHJvdG9jb2w6ICR7cm91dGUuaW50ZWdyYXRpb24uaG9zdE5hbWV9YCxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMuZG5zLnN1YmRvbWFpbiA9PT0gXCJcIiB8fCBwcm9wcy5kbnMuc3ViZG9tYWluLmluY2x1ZGVzKFwiIFwiKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3ViZG9tYWluIG11c3QgYmUgc2V0LCBhbmQgbm90IGNvbnRhaW4gc3BhY2VzOiAke3Byb3BzLmRucy5zdWJkb21haW59YCxcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHByb3BzLnRocm90dGxpbmc/LmJ1cnN0ICYmIHByb3BzLnRocm90dGxpbmcuYnVyc3QgPiA1XzAwMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBg4pqg77iPIFlvdXIgdGhyb3R0bGluZyBidXJzdCBsaW1pdCAnJHtwcm9wcy50aHJvdHRsaW5nLmJ1cnN0fScgaXMgaGlnaGVyIHRoYW4gdGhlIEFXUyBBY2NvdW50IGxpbWl0LiBNYWtlIHN1cmUgeW91ciBhY2NvdW50IGhhcyB1cGdyYWRlZCB0aGlzIHF1b3RhISBgLFxuICAgICAgICBzdGFjayxcbiAgICAgICAgaWQsXG4gICAgICApXG4gICAgfVxuICAgIGlmIChwcm9wcy50aHJvdHRsaW5nPy5yYXRlICYmIHByb3BzLnRocm90dGxpbmcucmF0ZSA+IDEwXzAwMCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBg4pqg77iPIFlvdXIgdGhyb3R0bGluZyByYXRlIGxpbWl0ICcke3Byb3BzLnRocm90dGxpbmcucmF0ZX0nIGlzIGhpZ2hlciB0aGFuIHRoZSBBV1MgQWNjb3VudCBsaW1pdC4gTWFrZSBzdXJlIHlvdXIgYWNjb3VudCBoYXMgdXBncmFkZWQgdGhpcyBxdW90YSEgYCxcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIGlkLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYXV0aG9yaXplciBvbmx5IGFjY2VwdHMgcmVxdWVzdHMgZnJvbSBleHRlcm5hbCB1c2VycyB0aGF0IGFyZSBhdXRob3JpemVkLlxuICAgKiBVbmF1dGhvcml6ZWQgdXNlcnMgYXJlIHN0b3BwZWQgaW4gdGhlIEFQSS1HVywgYW5kIG5vdCBmb3J3YXJkZWQgdG8gdGhlIGludGVncmF0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVBdXRob3JpemVyPEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nPihcbiAgICBpZDogc3RyaW5nLFxuICAgIGF1dGhvcml6YXRpb246IEF1dGhvcml6YXRpb25Qcm9wczxBdXRoU2NvcGVzVD4sXG4gICk6IGFwaWd3LklIdHRwUm91dGVBdXRob3JpemVyIHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKGF1dGhvcml6YXRpb24udHlwZSkge1xuICAgICAgY2FzZSBcIk5PTkVcIjoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBjYXNlIFwiSUFNXCI6IHtcbiAgICAgICAgLy8gQVBJIEdhdGV3YXkgaW52b2tlcyB5b3VyIEFQSSByb3V0ZSBvbmx5IGlmIHRoZSBjbGllbnQgaGFzIGV4ZWN1dGUtYXBpIHBlcm1pc3Npb24gZm9yIHRoZSByb3V0ZS5cbiAgICAgICAgLy8gVGhlIGNsaWVudCBoYXMgdG8gdXNlIEFXUyBTaWdWNCB0byBpZGVudGlmeSB0aGVtc2VsdmVzIGluIHRoZSByZXF1ZXN0LlxuICAgICAgICAvLyBSZWFkIHRoaXMgcGFnZSBmb3IgaGVscCB3aXRoIElBTSBhbmQgQVBJLUdXIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zZWN1cml0eV9pYW1fc2VydmljZS13aXRoLWlhbS5odG1sXG4gICAgICAgIC8vIE5vdGUgdGhhdCBbcmVzb3VyY2UgcG9saWNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgeWV0IGZvciBIVFRQXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvaHR0cC1hcGktYWNjZXNzLWNvbnRyb2wtaWFtLmh0bWwpXG4gICAgICAgIHJldHVybiBuZXcgYXV0aG9yaXplcnMuSHR0cElhbUF1dGhvcml6ZXIoKVxuICAgICAgfVxuICAgICAgY2FzZSBcIkpXVFwiOiB7XG4gICAgICAgIHJldHVybiBuZXcgYXV0aG9yaXplcnMuSHR0cEp3dEF1dGhvcml6ZXIoaWQsIGF1dGhvcml6YXRpb24uaXNzdWVyVXJsLCB7XG4gICAgICAgICAgand0QXVkaWVuY2U6IGF1dGhvcml6YXRpb24uYXVkaWVuY2UsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjYXNlIFwiQ09HTklUT19VU0VSX1BPT0xcIjoge1xuICAgICAgICAvLyBXZSB1c2UgYSBjdXN0b20gbGFtYmRhIGF1dGhvcml6ZXIgaGVyZSBpbnN0ZWFkIG9mIHRoZSBgSHR0cFVzZXJQb29sQXV0aG9yaXplcmAgcHJvdmlkZWRcbiAgICAgICAgLy8gYnkgQ0RLLCBpbiBvcmRlciB0byBzdXBwb3J0IGByZXF1aXJlZFNjb3BlYCBhbmQgc2V0dGluZyBvZiBjdXN0b20gY29udGV4dCB2YXJpYWJsZXMuXG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZXIgPSBuZXcgQ29nbml0b1VzZXJQb29sQXV0aG9yaXplcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke2lkfUxhbWJkYWAsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbixcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiBuZXcgYXV0aG9yaXplcnMuSHR0cExhbWJkYUF1dGhvcml6ZXIoaWQsIGF1dGhvcml6ZXIubGFtYmRhLCB7XG4gICAgICAgICAgcmVzcG9uc2VUeXBlczogYXV0aG9yaXplci5yZXNwb25zZVR5cGVzLFxuICAgICAgICAgIC8vIE1heCAxaCwgb3IgZGlzYWJsZWQgKDBzKS4gVGhlIHZhbHVlIG9ubHkgbWF0dGVycyB3aGVuIGludmFsaWRhdGluZy9keW5hbWljIGNyZWRlbnRpYWxzXG4gICAgICAgICAgcmVzdWx0c0NhY2hlVHRsOiBjZGsuRHVyYXRpb24uaG91cnMoMSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjYXNlIFwiQkFTSUNfQVVUSFwiOiB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZXIgPSBuZXcgQmFzaWNBdXRoQXV0aG9yaXplcihcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke2lkfUxhbWJkYWAsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbixcbiAgICAgICAgKVxuXG4gICAgICAgIHJldHVybiBuZXcgYXV0aG9yaXplcnMuSHR0cExhbWJkYUF1dGhvcml6ZXIoaWQsIGF1dGhvcml6ZXIubGFtYmRhLCB7XG4gICAgICAgICAgcmVzcG9uc2VUeXBlczogYXV0aG9yaXplci5yZXNwb25zZVR5cGVzLFxuICAgICAgICAgIC8vIE1heCAxaCwgb3IgZGlzYWJsZWQgKDBzKS4gVGhlIHZhbHVlIG9ubHkgbWF0dGVycyB3aGVuIGludmFsaWRhdGluZy9keW5hbWljIGNyZWRlbnRpYWxzXG4gICAgICAgICAgcmVzdWx0c0NhY2hlVHRsOiBjZGsuRHVyYXRpb24ubWludXRlcygzMCksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjYXNlIFwiQ09HTklUT19VU0VSX1BPT0xfT1JfQkFTSUNfQVVUSFwiOiB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZXIgPSBuZXcgQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYCR7aWR9TGFtYmRhYCxcbiAgICAgICAgICBhdXRob3JpemF0aW9uLFxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIG5ldyBhdXRob3JpemVycy5IdHRwTGFtYmRhQXV0aG9yaXplcihpZCwgYXV0aG9yaXplci5sYW1iZGEsIHtcbiAgICAgICAgICByZXNwb25zZVR5cGVzOiBhdXRob3JpemVyLnJlc3BvbnNlVHlwZXMsXG4gICAgICAgICAgLy8gTWF4IDFoLCBvciBkaXNhYmxlZCAoMHMpLiBUaGUgdmFsdWUgb25seSBtYXR0ZXJzIHdoZW4gaW52YWxpZGF0aW5nL2R5bmFtaWMgY3JlZGVudGlhbHNcbiAgICAgICAgICByZXN1bHRzQ2FjaGVUdGw6IGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJDVVNUT01fTEFNQkRBX0FVVEhPUklaRVJcIjoge1xuICAgICAgICByZXR1cm4gbmV3IGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFBdXRob3JpemVyKFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIGF1dGhvcml6YXRpb24ubGFtYmRhQXV0aG9yaXplcixcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5hdXRob3JpemF0aW9uLmF1dGhvcml6ZXJQcm9wcyxcbiAgICAgICAgICAgIHJlc3BvbnNlVHlwZXM6IGF1dGhvcml6YXRpb24uYXV0aG9yaXplclByb3BzPy5yZXNwb25zZVR5cGVzID8/IFtcbiAgICAgICAgICAgICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVzdWx0c0NhY2hlVHRsOlxuICAgICAgICAgICAgICBhdXRob3JpemF0aW9uLmF1dGhvcml6ZXJQcm9wcz8ucmVzdWx0c0NhY2hlVHRsID8/XG4gICAgICAgICAgICAgIGNkay5EdXJhdGlvbi5ob3VycygxKSxcbiAgICAgICAgICB9LFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnRlZ3JhdGlvbihcbiAgICBpbnRlZ3JhdGlvbjogSW50ZWdyYXRpb25Qcm9wcyxcbiAgICBkbnM6IEFwaUdhdGV3YXlQcm9wc1tcImRuc1wiXSxcbiAgKTogYXBpZ3cuSHR0cFJvdXRlSW50ZWdyYXRpb24ge1xuICAgIHN3aXRjaCAoaW50ZWdyYXRpb24udHlwZSkge1xuICAgICAgY2FzZSBcIkFMQlwiOiB7XG4gICAgICAgIC8vIFRoZSBWUENMaW5rIGNvbm5lY3RzIHRoZSBpbnRlZ3JhdGlvbiBpbnRvIHRoZSBBTEIncyBWUEMuIE11c3QgYmUgbWFudWFsbHkgY3JlYXRlZCB3aGVuXG4gICAgICAgIC8vIHRoZSBWUEMgaXMgaW1wb3J0ZWQsIHdoaWNoIGlzIHRoZSBjYXNlIHdoZW4gdXNpbmcgQ29yZVBsYXRmb3JtQ29uc3VtZXIuXG4gICAgICAgIGNvbnN0IHZwY0xpbmsgPSBuZXcgYXBpZ3cuVnBjTGluayh0aGlzLCBcIkFsYlZwY0xpbmtcIiwge1xuICAgICAgICAgIHZwYzogaW50ZWdyYXRpb24udnBjLFxuICAgICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbaW50ZWdyYXRpb24uc2VjdXJpdHlHcm91cF0sXG4gICAgICAgICAgc3VibmV0czogaW50ZWdyYXRpb24udnBjLnNlbGVjdFN1Ym5ldHMoKSwgLy8gVGhpcyBjb3JyZWN0bHkgc2VsZWN0cyB0aGUgcHJpdmF0ZSBzdWJuZXRzXG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTWFwcGluZyA9IG5ldyBhcGlndy5QYXJhbWV0ZXJNYXBwaW5nKClcbiAgICAgICAgICAvKiogU2VlIHtAbGluayBBbGJJbnRlZ3JhdGlvblByb3BzLmhvc3ROYW1lfSAqL1xuICAgICAgICAgIC5vdmVyd3JpdGVIZWFkZXIoXG4gICAgICAgICAgICBcIkhvc3RcIixcbiAgICAgICAgICAgIC8vIFRoZSBIb3N0IGhlYWRlciBjYW4gTk9UIHVzZSBkeW5hbWljIG1hcHBpbmcsIGxpa2UgJGNvbnRleHQuZG9tYWluTmFtZSBldGMuXG4gICAgICAgICAgICBhcGlndy5NYXBwaW5nVmFsdWUuY3VzdG9tKGludGVncmF0aW9uLmhvc3ROYW1lKSxcbiAgICAgICAgICApXG4gICAgICAgIGlmIChpbnRlZ3JhdGlvbi5tYXBQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbnRlZ3JhdGlvbi5tYXBQYXJhbWV0ZXJzKHBhcmFtZXRlck1hcHBpbmcpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IGludGVncmF0aW9ucy5IdHRwQWxiSW50ZWdyYXRpb24oXG4gICAgICAgICAgYEFsYkludGVncmF0aW9uLSR7ZG5zLnN1YmRvbWFpbn1gLFxuICAgICAgICAgIGludGVncmF0aW9uLmxvYWRCYWxhbmNlckxpc3RlbmVyLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlY3VyZVNlcnZlck5hbWU6IGludGVncmF0aW9uLmhvc3ROYW1lLFxuICAgICAgICAgICAgdnBjTGluazogdnBjTGluayxcbiAgICAgICAgICAgIG1ldGhvZDogYXBpZ3cuSHR0cE1ldGhvZC5BTlksXG4gICAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nLFxuICAgICAgICAgIH0sXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGNhc2UgXCJMYW1iZGFcIjoge1xuICAgICAgICByZXR1cm4gbmV3IGludGVncmF0aW9ucy5IdHRwTGFtYmRhSW50ZWdyYXRpb24oXG4gICAgICAgICAgXCJMYW1iZGFJbnRlZ3JhdGlvblwiLFxuICAgICAgICAgIGludGVncmF0aW9uLmxhbWJkYSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXlsb2FkRm9ybWF0VmVyc2lvbjogYXBpZ3cuUGF5bG9hZEZvcm1hdFZlcnNpb24uVkVSU0lPTl8yXzAsXG4gICAgICAgICAgICBwYXJhbWV0ZXJNYXBwaW5nOiB1bmRlZmluZWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgY2FzZSBcIlNRU1wiOiB7XG4gICAgICAgIC8vIEFQSS1HVyBkb2VzIG5vdCBoYXZlIGFjY2VzcyB0byBTUVMgYnkgZGVmYXVsdFxuICAgICAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYEFwaUd3VG8ke2ludGVncmF0aW9uLnF1ZXVlLm5vZGUuaWR9U2VydmljZVJvbGVgLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQWxsb3dzIEFQSS1HVyB0byBhZGQgbWVzc2FnZXMgdG8gJHtpbnRlZ3JhdGlvbi5xdWV1ZS5xdWV1ZUFybn1gLFxuICAgICAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJhcGlnYXRld2F5LmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgICBpbnRlZ3JhdGlvbi5xdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyhyb2xlKVxuXG4gICAgICAgIGxldCBwYXJhbWV0ZXJNYXBwaW5nID0gbmV3IGFwaWd3LlBhcmFtZXRlck1hcHBpbmcoKVxuICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9odHRwLWFwaS1kZXZlbG9wLWludGVncmF0aW9ucy1hd3Mtc2VydmljZXMtcmVmZXJlbmNlLmh0bWwjU1FTLVNlbmRNZXNzYWdlXG4gICAgICAgICAgLmN1c3RvbShcIlF1ZXVlVXJsXCIsIGludGVncmF0aW9uLnF1ZXVlLnF1ZXVlVXJsKVxuICAgICAgICAgIC5jdXN0b20oXCJNZXNzYWdlQm9keVwiLCBcIiRyZXF1ZXN0LmJvZHlcIilcbiAgICAgICAgICAuY3VzdG9tKFwiUmVnaW9uXCIsIFwiZXUtd2VzdC0xXCIpIC8vIENoYW5nZSB0aGlzIGlmIHRoZSBTUVMgcXVldWUgaXMgaW4gYW5vdGhlciByZWdpb24hXG5cbiAgICAgICAgaWYgKGludGVncmF0aW9uLm1lc3NhZ2VBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgcGFyYW1ldGVyTWFwcGluZyA9IHBhcmFtZXRlck1hcHBpbmcuY3VzdG9tKFxuICAgICAgICAgICAgXCJNZXNzYWdlQXR0cmlidXRlc1wiLFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoaW50ZWdyYXRpb24ubWVzc2FnZUF0dHJpYnV0ZXMpLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgU3FzUm91dGVJbnRlZ3JhdGlvbihcIlNxc0ludGVncmF0aW9uXCIsIHtcbiAgICAgICAgICB0eXBlOiBhcGlndy5IdHRwSW50ZWdyYXRpb25UeXBlLkFXU19QUk9YWSxcbiAgICAgICAgICBzdWJ0eXBlOiBhcGlndy5IdHRwSW50ZWdyYXRpb25TdWJ0eXBlLlNRU19TRU5EX01FU1NBR0UsXG4gICAgICAgICAgY3JlZGVudGlhbHM6IGFwaWd3LkludGVncmF0aW9uQ3JlZGVudGlhbHMuZnJvbVJvbGUocm9sZSksXG4gICAgICAgICAgcGFyYW1ldGVyTWFwcGluZzogcGFyYW1ldGVyTWFwcGluZyxcbiAgICAgICAgICBwYXlsb2FkRm9ybWF0VmVyc2lvbjogYXBpZ3cuUGF5bG9hZEZvcm1hdFZlcnNpb24uVkVSU0lPTl8xXzAsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjYXNlIFwiRXZlbnRCcmlkZ2VcIjoge1xuICAgICAgICAvKipcbiAgICAgICAgICogQVBJLUdXIGRvZXMgbm90IGhhdmUgYWNjZXNzIHRvIHB1dCBldmVudHMgdG8gZXZlbnQgYnVzIGJ5IGRlZmF1bHRcbiAgICAgICAgICpcbiAgICAgICAgICogQnkgZGVmYXVsdCwgd2Ugd2lsbCBjcmVhdGUgYSBuZXcgcm9sZSB0byBiZSB1c2VkIGlmIHRoaXMgaXMgdW5kZWZpbmVkIGluIHRoZSBpbnB1dFxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3Qgcm9sZSA9XG4gICAgICAgICAgaW50ZWdyYXRpb24ucm9sZSA/P1xuICAgICAgICAgIG5ldyBpYW0uUm9sZShcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBgQXBpR3dUbyR7aW50ZWdyYXRpb24uZXZlbnRCdXMubm9kZS5pZH1TZXJ2aWNlUm9sZWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQWxsb3dzIEFQSS1HVyB0byBwdXQgZXZlbnRzIHRvICR7aW50ZWdyYXRpb24uZXZlbnRCdXMuZXZlbnRCdXNBcm59YCxcbiAgICAgICAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJhcGlnYXRld2F5LmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIClcbiAgICAgICAgaW50ZWdyYXRpb24uZXZlbnRCdXMuZ3JhbnRQdXRFdmVudHNUbyhyb2xlKVxuXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlck1hcHBpbmcgPSBuZXcgYXBpZ3cuUGFyYW1ldGVyTWFwcGluZygpXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2V2ZW50YnJpZGdlL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1B1dEV2ZW50c1JlcXVlc3RFbnRyeS5odG1sXG4gICAgICAgICAgLmN1c3RvbShcIkV2ZW50QnVzTmFtZVwiLCBpbnRlZ3JhdGlvbi5ldmVudEJ1cy5ldmVudEJ1c05hbWUpXG4gICAgICAgICAgLmN1c3RvbShcIkRldGFpbFwiLCBcIiRyZXF1ZXN0LmJvZHlcIilcbiAgICAgICAgICAuY3VzdG9tKFwiRGV0YWlsVHlwZVwiLCBpbnRlZ3JhdGlvbi5kZXRhaWxUeXBlKVxuICAgICAgICAgIC5jdXN0b20oXCJTb3VyY2VcIiwgXCIkY29udGV4dC5hcGlJZFwiKVxuXG4gICAgICAgIHJldHVybiBuZXcgRXZlbnRCcmlkZ2VSb3V0ZUludGVncmF0aW9uKFwiRXZlbnRCcmlkZ2VJbnRlZ3JhdGlvblwiLCB7XG4gICAgICAgICAgdHlwZTogYXBpZ3cuSHR0cEludGVncmF0aW9uVHlwZS5BV1NfUFJPWFksXG4gICAgICAgICAgc3VidHlwZTogYXBpZ3cuSHR0cEludGVncmF0aW9uU3VidHlwZS5FVkVOVEJSSURHRV9QVVRfRVZFTlRTLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiBhcGlndy5JbnRlZ3JhdGlvbkNyZWRlbnRpYWxzLmZyb21Sb2xlKHJvbGUpLFxuICAgICAgICAgIHBhcmFtZXRlck1hcHBpbmc6IHBhcmFtZXRlck1hcHBpbmcsXG4gICAgICAgICAgcGF5bG9hZEZvcm1hdFZlcnNpb246IGFwaWd3LlBheWxvYWRGb3JtYXRWZXJzaW9uLlZFUlNJT05fMV8wLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgYSBncmFudGFibGUgdGFyZ2V0IChyb2xlLCB1c2VyIGV0Yy4pIHBlcm1pc3Npb24gdG8gaW52b2tlIHRoZSBBUEkuXG4gICAqIE9ubHkgd29ya3Mgd2hlbiB1c2luZyBgSUFNYCBhcyB7QGxpbmsgQXBpR2F0ZXdheVJvdXRlLmF1dGhvcml6YXRpb259LlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IEEgZ3JhbnRhYmxlLCBsaWtlIHtAbGluayBpYW0uUm9sZX1cbiAgICovXG4gIHB1YmxpYyBncmFudEludm9rZSh0YXJnZXQ6IGlhbS5JR3JhbnRhYmxlKSB7XG4gICAgZm9yIChjb25zdCByb3V0ZVByb3BzIG9mIHRoaXMucHJvcHMucm91dGVzKSB7XG4gICAgICBjb25zdCBhdXRoVHlwZSA9XG4gICAgICAgIHJvdXRlUHJvcHMuYXV0aG9yaXphdGlvbj8udHlwZSA/PyB0aGlzLnByb3BzLmRlZmF1bHRBdXRob3JpemF0aW9uPy50eXBlXG5cbiAgICAgIGlmIChhdXRoVHlwZSAhPT0gXCJJQU1cIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCBncmFudCBpbnZva2UgZm9yIGFuIEFQSSBHYXRld2F5IHdoZW4gbm90IHVzaW5nIElBTSBhdXRoIChmb3VuZCBhdXRoICcke2F1dGhUeXBlfScgb24gcm91dGUgJyR7cm91dGVQcm9wcy5wYXRofScpIFske2Nkay5TdGFjay5vZih0aGlzKS5zdGFja05hbWV9XWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvdXRlIG9mIHRoaXMucm91dGVzKSB7XG4gICAgICByb3V0ZS5ncmFudEludm9rZSh0YXJnZXQpXG4gICAgfVxuICB9XG59XG5cbi8qKiBBY3RzIGFzIGdsdWUgKGJldHdlZW4gdGhlIGludGVncmF0aW9uIHByb3BzIGFuZCB0aGUgSHR0cEFwaSkgd2hlbiBjcmVhdGluZyBhbiBTcXNJbnRlZ3JhdGlvbi4gKi9cbmNsYXNzIFNxc1JvdXRlSW50ZWdyYXRpb24gZXh0ZW5kcyBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gaWQgVGhlIGlkIHVzZWQgaW4gdGhlIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IGNvbnN0cnVjdFxuICAgKiAgICBjcmVhdGVkIGludGVybmFsbHkgYnkge0BsaW5rIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uLl9iaW5kVG9Sb3V0ZX0uXG4gICAqICAgIFtTb3VyY2UgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvYjVhZTM3NzgyYmMzY2I2MzdlZWVmOWZiYjFmYmUyYzVlZmRmYzA2OC9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1hcGlnYXRld2F5djIvbGliL2h0dHAvaW50ZWdyYXRpb24udHMjTDMyMSlcbiAgICogQHBhcmFtIGludGVncmF0aW9uUHJvcHMgVGhlIHByb3BzIHRvIHBhc3MgdG8gdGhlIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBpbnRlZ3JhdGlvblByb3BzOiBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgKSB7XG4gICAgc3VwZXIoaWQpXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzZW5kcyB0aGUgcHJvcGVydGllcyBuZWVkZWQgZm9yIGNyZWF0aW5nIGEge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gdG8gdGhlXG4gICAqIHtAbGluayBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbn0uXG4gICAqL1xuICBiaW5kKCk6IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uQ29uZmlnIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnk6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvYjVhZTM3NzgyYmMzY2I2MzdlZWVmOWZiYjFmYmUyYzVlZmRmYzA2OC9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1hcGlnYXRld2F5djIvbGliL2h0dHAvaW50ZWdyYXRpb24udHMjTDMxOVxuICAgIHJldHVybiB0aGlzLmludGVncmF0aW9uUHJvcHNcbiAgfVxufVxuXG4vKiogQWN0cyBhcyBnbHVlIChiZXR3ZWVuIHRoZSBpbnRlZ3JhdGlvbiBwcm9wcyBhbmQgdGhlIEh0dHBBcGkpIHdoZW4gY3JlYXRpbmcgYW4gRXZlbnRCcmlkZ2UgaW50ZWdyYXRpb24uICovXG5jbGFzcyBFdmVudEJyaWRnZVJvdXRlSW50ZWdyYXRpb24gZXh0ZW5kcyBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAcGFyYW0gaWQgVGhlIGlkIHVzZWQgaW4gdGhlIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IGNvbnN0cnVjdFxuICAgKiAgICBjcmVhdGVkIGludGVybmFsbHkgYnkge0BsaW5rIGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uLl9iaW5kVG9Sb3V0ZX0uXG4gICAqICAgIFtTb3VyY2UgY29kZV0oaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvYjVhZTM3NzgyYmMzY2I2MzdlZWVmOWZiYjFmYmUyYzVlZmRmYzA2OC9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1hcGlnYXRld2F5djIvbGliL2h0dHAvaW50ZWdyYXRpb24udHMjTDMyMSlcbiAgICogQHBhcmFtIGludGVncmF0aW9uUHJvcHMgVGhlIHByb3BzIHRvIHBhc3MgdG8gdGhlIHtAbGluayBhcGlndy5IdHRwSW50ZWdyYXRpb259IGNvbnN0cnVjdC5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSBpbnRlZ3JhdGlvblByb3BzOiBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbkNvbmZpZyxcbiAgKSB7XG4gICAgc3VwZXIoaWQpXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBzZW5kcyB0aGUgcHJvcGVydGllcyBuZWVkZWQgZm9yIGNyZWF0aW5nIGEge0BsaW5rIGFwaWd3Lkh0dHBJbnRlZ3JhdGlvbn0gdG8gdGhlXG4gICAqIHtAbGluayBhcGlndy5IdHRwUm91dGVJbnRlZ3JhdGlvbn0uXG4gICAqL1xuICBiaW5kKCk6IGFwaWd3Lkh0dHBSb3V0ZUludGVncmF0aW9uQ29uZmlnIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnk6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvYjVhZTM3NzgyYmMzY2I2MzdlZWVmOWZiYjFmYmUyYzVlZmRmYzA2OC9wYWNrYWdlcy8lNDBhd3MtY2RrL2F3cy1hcGlnYXRld2F5djIvbGliL2h0dHAvaW50ZWdyYXRpb24udHMjTDMxOVxuICAgIHJldHVybiB0aGlzLmludGVncmF0aW9uUHJvcHNcbiAgfVxufVxuXG4vKipcbiAqIFdoZW4gdXNpbmcgYE5vZGVqc0Z1bmN0aW9uYCB3aXRoIGBlbnRyeWAsIHdlIHBvaW50IENESyB0byBhIGZpbGUgd2l0aCBvdXIgbGFtYmRhIGNvZGUuIFRoaXMgY2FuXG4gKiBlaXRoZXIgYmUgYSBUeXBlU2NyaXB0IG9yIEphdmFTY3JpcHQgZmlsZS4gV2hlbiBjcmVhdGluZyBjb25zdHJ1Y3RzIGluIHRlc3RzIGluc2lkZSB0aGlzIGxpYnJhcnksXG4gKiB0aGUgZW50cnkgd2lsbCBwb2ludCB0byB0aGUgVHlwZVNjcmlwdCBmaWxlIGluIHRoZSBzb3VyY2UgY29kZS4gQnV0IHdoZW4gYSBsaWJyYXJ5IGNvbnN1bWVyIHVzZXNcbiAqIHRoaXMsIGl0IHdpbGwgaW5zdGVhZCBwb2ludCB0byB0aGUgdHJhbnNwaWxlZCBKYXZhU2NyaXB0IGZpbGUuIFNvIHRvIHNldCB0aGUgY29ycmVjdCBmaWxlXG4gKiBleHRlbnNpb24sIHdlIG11c3QgY2hlY2sgaWYgd2UncmUgYmVpbmcgcnVuIGluIHRoZSBjb250ZXh0IG9mIHRoZSBUeXBlU2NyaXB0IHNvdXJjZSBjb2RlXG4gKiAoc3JjL2FwaS1nYXRld2F5KSwgb3RoZXJ3aXNlIHdlJ3JlIGJlaW5nIHJ1biBieSBhIGNvbnN1bWVyIGFzIHRyYW5zcGlsZWQgSmF2YVNjcmlwdC5cbiAqL1xuY29uc3QgYXV0aG9yaXplckZpbGVFeHRlbnNpb24gPSBfX2Rpcm5hbWUuZW5kc1dpdGgoXCJzcmMvYXBpLWdhdGV3YXlcIilcbiAgPyBcInRzXCJcbiAgOiBcImpzXCJcblxuLyoqXG4gKiBDcmVhdGVzIGEgY3VzdG9tIExhbWJkYSBhdXRob3JpemVyIHdoaWNoIHJlYWRzIGBBdXRob3JpemF0aW9uOiBCZWFyZXIgPGFjY2VzcyB0b2tlbj5gIGhlYWRlciBhbmRcbiAqIHZlcmlmaWVzIHRoZSB0b2tlbiBhZ2FpbnN0IGEgQ29nbml0byB1c2VyIHBvb2wuXG4gKi9cbmNsYXNzIENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXI8XG4gIEF1dGhTY29wZXNUIGV4dGVuZHMgc3RyaW5nLFxuPiBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IHtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYTogbGFtYmRhLklGdW5jdGlvblxuXG4gIC8qKlxuICAgKiBVc2Ugc2ltcGxlIHJlc3BvbnNlIHR5cGUgKGB7IGlzQXV0aG9yaXplZDogdHJ1ZS9mYWxzZSB9YCksIGFzIG9wcG9zZWQgdG8gcmV0dXJuaW5nIGFuIElBTVxuICAgKiBQb2xpY3kgZG9jdW1lbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2VUeXBlczogYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZVtdID0gW1xuICAgIGF1dGhvcml6ZXJzLkh0dHBMYW1iZGFSZXNwb25zZVR5cGUuU0lNUExFLFxuICBdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENvZ25pdG9Vc2VyUG9vbEF1dGhvcml6ZXJQcm9wczxBdXRoU2NvcGVzVD4sXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMubGFtYmRhID0gbmV3IGxhbWJkYU5vZGVqcy5Ob2RlanNGdW5jdGlvbih0aGlzLCBcIkF1dGhvcml6ZXJGdW5jdGlvblwiLCB7XG4gICAgICBlbnRyeTogcGF0aC5qb2luKFxuICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgIGBhdXRob3JpemVycy9jb2duaXRvLXVzZXItcG9vbC1hdXRob3JpemVyLiR7YXV0aG9yaXplckZpbGVFeHRlbnNpb259YCxcbiAgICAgICksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgVVNFUl9QT09MX0lEOiBwcm9wcy51c2VyUG9vbC51c2VyUG9vbElkLFxuICAgICAgICBSRVFVSVJFRF9TQ09QRTogcHJvcHMucmVxdWlyZWRTY29wZSA/PyBcIlwiLFxuICAgICAgICBDUkVERU5USUFMU19GT1JfSU5URVJOQUxfQVVUSE9SSVpBVElPTjpcbiAgICAgICAgICBwcm9wcy5jcmVkZW50aWFsc0ZvckludGVybmFsQXV0aG9yaXphdGlvblxuICAgICAgICAgICAgPyBwcm9wcy5jcmVkZW50aWFsc0ZvckludGVybmFsQXV0aG9yaXphdGlvblxuICAgICAgICAgICAgOiBcIlwiLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgaWYgKHByb3BzLmNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uKSB7XG4gICAgICBzZWNyZXRzbWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGAke2lkfUJhc2ljQXV0aFNlY3JldGAsXG4gICAgICAgIHByb3BzLmNyZWRlbnRpYWxzRm9ySW50ZXJuYWxBdXRob3JpemF0aW9uLFxuICAgICAgKS5ncmFudFJlYWQodGhpcy5sYW1iZGEpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCByZWFkcyBgQXV0aG9yaXphdGlvbjogQmFzaWMgPGJhc2U2NC1lbmNvZGVkIGNyZWRlbnRpYWxzPmBcbiAqIGhlYWRlciBhbmQgdmVyaWZpZXMgdGhlIGNyZWRlbnRpYWxzIGFnYWluc3QgYSBnaXZlbiBzZWNyZXQuXG4gKi9cbmNsYXNzIEJhc2ljQXV0aEF1dGhvcml6ZXIgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IGxhbWJkYS5JRnVuY3Rpb25cblxuICAvLyBTaW1wbGUgaXMgYHsgaXNBdXRob3JpemVkOiB0cnVlL2ZhbHNlIH1gLCBhcyBvcHBvc2VkIHRvIHJldHVybmluZyBhbiBJQU0gUG9saWN5IGRvY3VtZW50XG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZVR5cGVzOiBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlW10gPSBbXG4gICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQmFzaWNBdXRoQXV0aG9yaXplclByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmxhbWJkYSA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgXCJCYXNpY0F1dGhMYW1iZGFcIiwge1xuICAgICAgZW50cnk6IHBhdGguam9pbihcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBgYXV0aG9yaXplcnMvYmFzaWMtYXV0aC1hdXRob3JpemVyLiR7YXV0aG9yaXplckZpbGVFeHRlbnNpb259YCxcbiAgICAgICksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJBbiBhdXRob3JpemVyIGZvciBBUEktR2F0ZXdheSB0aGF0IGNoZWNrcyBCYXNpYyBBdXRoIGNyZWRlbnRpYWxzIG9uIHJlcXVlc3RzXCIsXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENSRURFTlRJQUxTX1NFQ1JFVF9OQU1FOiBwcm9wcy5jcmVkZW50aWFsc1NlY3JldE5hbWVcbiAgICAgICAgICA/IHByb3BzLmNyZWRlbnRpYWxzU2VjcmV0TmFtZVxuICAgICAgICAgIDogXCJcIixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIHNlY3JldHNtYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgc2NvcGUsXG4gICAgICBgJHtpZH1CYXNpY0F1dGhTZWNyZXRgLFxuICAgICAgcHJvcHMuY3JlZGVudGlhbHNTZWNyZXROYW1lLFxuICAgICkuZ3JhbnRSZWFkKHRoaXMubGFtYmRhKVxuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGN1c3RvbSBMYW1iZGEgYXV0aG9yaXplciB3aGljaCBhbGxvd3MgYm90aDpcbiAqIC0gYEF1dGhvcml6YXRpb246IEJlYXJlciA8YWNjZXNzIHRva2VuPmAgaGVhZGVyLCBmb3Igd2hpY2ggdGhlIHRva2VuIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgZ2l2ZW5cbiAqICAgQ29nbml0byB1c2VyIHBvb2xcbiAqIC0gYEF1dGhvcml6YXRpb246IEJhc2ljIDxiYXNlNjQtZW5jb2RlZCBjcmVkZW50aWFscz5gIGhlYWRlciwgZm9yIHdoaWNoIHRoZSBjcmVkZW50aWFscyBhcmVcbiAqICAgY2hlY2tlZCBhZ2FpbnN0IHRoZSBjcmVkZW50aWFscyBmcm9tIHRoZSBnaXZlbiBiYXNpYyBhdXRoIHNlY3JldCBuYW1lXG4gKlxuICogSWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBnaXZlbiBhbmQgdmFsaWQsIHRoZSByZXF1ZXN0IGlzIGF1dGhlbnRpY2F0ZWQuXG4gKi9cbmNsYXNzIENvZ25pdG9Vc2VyUG9vbE9yQmFzaWNBdXRoQXV0aG9yaXplcjxcbiAgQXV0aFNjb3Blc1QgZXh0ZW5kcyBzdHJpbmcsXG4+IGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgbGFtYmRhOiBsYW1iZGEuSUZ1bmN0aW9uXG5cbiAgLyoqXG4gICAqIFVzZSBzaW1wbGUgcmVzcG9uc2UgdHlwZSAoYHsgaXNBdXRob3JpemVkOiB0cnVlL2ZhbHNlIH1gKSwgYXMgb3Bwb3NlZCB0byByZXR1cm5pbmcgYW4gSUFNXG4gICAqIFBvbGljeSBkb2N1bWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNwb25zZVR5cGVzOiBhdXRob3JpemVycy5IdHRwTGFtYmRhUmVzcG9uc2VUeXBlW10gPSBbXG4gICAgYXV0aG9yaXplcnMuSHR0cExhbWJkYVJlc3BvbnNlVHlwZS5TSU1QTEUsXG4gIF1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ29nbml0b1VzZXJQb29sT3JCYXNpY0F1dGhBdXRob3JpemVyUHJvcHM8QXV0aFNjb3Blc1Q+LFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpXG5cbiAgICB0aGlzLmxhbWJkYSA9IG5ldyBsYW1iZGFOb2RlanMuTm9kZWpzRnVuY3Rpb24odGhpcywgXCJBdXRob3JpemVyRnVuY3Rpb25cIiwge1xuICAgICAgZW50cnk6IHBhdGguam9pbihcbiAgICAgICAgX19kaXJuYW1lLFxuICAgICAgICBgYXV0aG9yaXplcnMvY29nbml0by11c2VyLXBvb2wtb3ItYmFzaWMtYXV0aC1hdXRob3JpemVyLiR7YXV0aG9yaXplckZpbGVFeHRlbnNpb259YCxcbiAgICAgICksXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5OT0RFSlNfMjRfWCxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgVVNFUl9QT09MX0lEOiBwcm9wcy51c2VyUG9vbCA/IHByb3BzLnVzZXJQb29sLnVzZXJQb29sSWQgOiBcIlwiLFxuICAgICAgICBSRVFVSVJFRF9TQ09QRTogcHJvcHMucmVxdWlyZWRTY29wZSA/PyBcIlwiLFxuICAgICAgICBCQVNJQ19BVVRIX0NSRURFTlRJQUxTX1NFQ1JFVF9OQU1FOiBwcm9wcy5iYXNpY0F1dGhDcmVkZW50aWFsc1NlY3JldE5hbWVcbiAgICAgICAgICA/IHByb3BzLmJhc2ljQXV0aENyZWRlbnRpYWxzU2VjcmV0TmFtZVxuICAgICAgICAgIDogXCJcIixcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGlmIChwcm9wcy5iYXNpY0F1dGhDcmVkZW50aWFsc1NlY3JldE5hbWUpIHtcbiAgICAgIHNlY3JldHNtYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICBzY29wZSxcbiAgICAgICAgYCR7aWR9QmFzaWNBdXRoU2VjcmV0YCxcbiAgICAgICAgcHJvcHMuYmFzaWNBdXRoQ3JlZGVudGlhbHNTZWNyZXROYW1lLFxuICAgICAgKS5ncmFudFJlYWQodGhpcy5sYW1iZGEpXG4gICAgfVxuICB9XG59XG5cbi8qKiBSZXR1cm5zIGEgc2hvcnQgc2VtaS11bmlxdWUgaGFzaCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLiAqL1xuZnVuY3Rpb24gc2hvcnRIYXNoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gU0hBLTEgaXMgbm8tbm8gd2hlbiB3ZSBuZWVkIGNyeXB0b2dyYXBoaWMgc2VjdXJpdHksIGJ1dCBoZXJlIHdlIGp1c3QgaXQgZm9yIHNob3J0ZW5pbmcgYSBuYW1lLFxuICAvLyB3aGljaCBpcyBmaW5lXG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMVwiKS51cGRhdGUoc3RyKS5kaWdlc3QoXCJoZXhcIikuc3Vic3RyaW5nKDAsIDEwKVxufVxuIl19