@aws-cdk/cloudformation-diff 2.140.0 → 2.141.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/diff/types.js +5 -3
- package/lib/format.js +13 -1
- package/lib/iam/iam-changes.d.ts +11 -1
- package/lib/iam/iam-changes.js +176 -5
- package/lib/iam/iam-identity-center.d.ts +78 -0
- package/lib/iam/iam-identity-center.js +46 -0
- package/package.json +5 -5
package/lib/diff/types.js
CHANGED
|
@@ -84,10 +84,12 @@ class TemplateDiff {
|
|
|
84
84
|
// we ignore resource type changes here, and handle them in scrutinizableResourceChanges()
|
|
85
85
|
continue;
|
|
86
86
|
}
|
|
87
|
-
if (!resourceChange.
|
|
87
|
+
if (!resourceChange.resourceType) {
|
|
88
|
+
// We use resourceChange.resourceType to loadResourceModel so that we can inspect the
|
|
89
|
+
// properties of a resource even after the resource is removed from the template.
|
|
88
90
|
continue;
|
|
89
91
|
}
|
|
90
|
-
const newTypeProps = (0, util_1.loadResourceModel)(resourceChange.
|
|
92
|
+
const newTypeProps = (0, util_1.loadResourceModel)(resourceChange.resourceType)?.properties || {};
|
|
91
93
|
for (const [propertyName, prop] of Object.entries(newTypeProps)) {
|
|
92
94
|
const propScrutinyType = prop.scrutinizable || service_spec_types_1.PropertyScrutinyType.None;
|
|
93
95
|
if (scrutinyTypes.includes(propScrutinyType)) {
|
|
@@ -490,4 +492,4 @@ function onlyChanges(xs) {
|
|
|
490
492
|
}
|
|
491
493
|
return ret;
|
|
492
494
|
}
|
|
493
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBd0M7QUFDeEMsb0VBQW9IO0FBQ3BILGlDQUFzRDtBQUN0RCxvREFBZ0Q7QUFDaEQsOEVBQXlFO0FBYXpFLGlFQUFpRTtBQUNqRSxNQUFhLFlBQVk7SUF1QnZCLFlBQVksSUFBbUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxD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LEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXJ0aW9uRXJyb3IgfSBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgUHJvcGVydHlTY3J1dGlueVR5cGUsIFJlc291cmNlU2NydXRpbnlUeXBlLCBSZXNvdXJjZSBhcyBSZXNvdXJjZU1vZGVsIH0gZnJvbSAnQGF3cy1jZGsvc2VydmljZS1zcGVjLXR5cGVzJztcbmltcG9ydCB7IGRlZXBFcXVhbCwgbG9hZFJlc291cmNlTW9kZWwgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgSWFtQ2hhbmdlcyB9IGZyb20gJy4uL2lhbS9pYW0tY2hhbmdlcyc7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwQ2hhbmdlcyB9IGZyb20gJy4uL25ldHdvcmsvc2VjdXJpdHktZ3JvdXAtY2hhbmdlcyc7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5TWFwID0ge1trZXk6IHN0cmluZ106IGFueSB9O1xuXG5leHBvcnQgdHlwZSBSZXNvdXJjZVJlcGxhY2VtZW50cyA9IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogUmVzb3VyY2VSZXBsYWNlbWVudCB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUmVwbGFjZW1lbnQge1xuICByZXNvdXJjZVJlcGxhY2VkOiBib29sZWFuO1xuICBwcm9wZXJ0aWVzUmVwbGFjZWQ6IHsgW3Byb3BlcnR5TmFtZTogc3RyaW5nXTogQ2hhbmdlU2V0UmVwbGFjZW1lbnQgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbmdlU2V0UmVwbGFjZW1lbnQgPSAnQWx3YXlzJyB8ICdOZXZlcicgfCAnQ29uZGl0aW9uYWxseSc7XG5cbi8qKiBTZW1hbnRpYyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVEaWZmIGltcGxlbWVudHMgSVRlbXBsYXRlRGlmZiB7XG4gIHB1YmxpYyBhd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24/OiBEaWZmZXJlbmNlPHN0cmluZz47XG4gIHB1YmxpYyBkZXNjcmlwdGlvbj86IERpZmZlcmVuY2U8c3RyaW5nPjtcbiAgcHVibGljIHRyYW5zZm9ybT86IERpZmZlcmVuY2U8c3RyaW5nPjtcbiAgcHVibGljIGNvbmRpdGlvbnM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPENvbmRpdGlvbiwgQ29uZGl0aW9uRGlmZmVyZW5jZT47XG4gIHB1YmxpYyBtYXBwaW5nczogRGlmZmVyZW5jZUNvbGxlY3Rpb248TWFwcGluZywgTWFwcGluZ0RpZmZlcmVuY2U+O1xuICBwdWJsaWMgbWV0YWRhdGE6IERpZmZlcmVuY2VDb2xsZWN0aW9uPE1ldGFkYXRhLCBNZXRhZGF0YURpZmZlcmVuY2U+O1xuICBwdWJsaWMgb3V0cHV0czogRGlmZmVyZW5jZUNvbGxlY3Rpb248T3V0cHV0LCBPdXRwdXREaWZmZXJlbmNlPjtcbiAgcHVibGljIHBhcmFtZXRlcnM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPFBhcmFtZXRlciwgUGFyYW1ldGVyRGlmZmVyZW5jZT47XG4gIHB1YmxpYyByZXNvdXJjZXM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPFJlc291cmNlLCBSZXNvdXJjZURpZmZlcmVuY2U+O1xuICAvKiogVGhlIGRpZmZlcmVuY2VzIGluIHVua25vd24vdW5leHBlY3RlZCBwYXJ0cyBvZiB0aGUgdGVtcGxhdGUgKi9cbiAgcHVibGljIHVua25vd246IERpZmZlcmVuY2VDb2xsZWN0aW9uPGFueSwgRGlmZmVyZW5jZTxhbnk+PjtcblxuICAvKipcbiAgICogQ2hhbmdlcyB0byBJQU0gcG9saWNpZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpYW1DaGFuZ2VzOiBJYW1DaGFuZ2VzO1xuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRvIFNlY3VyaXR5IEdyb3VwIGluZ3Jlc3MgYW5kIGVncmVzcyBydWxlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBDaGFuZ2VzOiBTZWN1cml0eUdyb3VwQ2hhbmdlcztcblxuICBjb25zdHJ1Y3RvcihhcmdzOiBJVGVtcGxhdGVEaWZmKSB7XG4gICAgaWYgKGFyZ3MuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uID0gYXJncy5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb247XG4gICAgfVxuICAgIGlmIChhcmdzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBhcmdzLmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICBpZiAoYXJncy50cmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm0gPSBhcmdzLnRyYW5zZm9ybTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmRpdGlvbnMgPSBhcmdzLmNvbmRpdGlvbnMgfHwgbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uKHt9KTtcbiAgICB0aGlzLm1hcHBpbmdzID0gYXJncy5tYXBwaW5ncyB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMubWV0YWRhdGEgPSBhcmdzLm1ldGFkYXRhIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5vdXRwdXRzID0gYXJncy5vdXRwdXRzIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gYXJncy5wYXJhbWV0ZXJzIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSBhcmdzLnJlc291cmNlcyB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMudW5rbm93biA9IGFyZ3MudW5rbm93biB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuXG4gICAgdGhpcy5pYW1DaGFuZ2VzID0gbmV3IElhbUNoYW5nZXMoe1xuICAgICAgcHJvcGVydHlDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVQcm9wZXJ0eUNoYW5nZXMoSWFtQ2hhbmdlcy5JYW1Qcm9wZXJ0eVNjcnV0aW5pZXMpLFxuICAgICAgcmVzb3VyY2VDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVSZXNvdXJjZUNoYW5nZXMoSWFtQ2hhbmdlcy5JYW1SZXNvdXJjZVNjcnV0aW5pZXMpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwQ2hhbmdlcyA9IG5ldyBTZWN1cml0eUdyb3VwQ2hhbmdlcyh7XG4gICAgICBlZ3Jlc3NSdWxlUHJvcGVydHlDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVQcm9wZXJ0eUNoYW5nZXMoW1Byb3BlcnR5U2NydXRpbnlUeXBlLkVncmVzc1J1bGVzXSksXG4gICAgICBpbmdyZXNzUnVsZVByb3BlcnR5Q2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUHJvcGVydHlDaGFuZ2VzKFtQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmdyZXNzUnVsZXNdKSxcbiAgICAgIGVncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IHRoaXMuc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcyhbUmVzb3VyY2VTY3J1dGlueVR5cGUuRWdyZXNzUnVsZVJlc291cmNlXSksXG4gICAgICBpbmdyZXNzUnVsZVJlc291cmNlQ2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUmVzb3VyY2VDaGFuZ2VzKFtSZXNvdXJjZVNjcnV0aW55VHlwZS5JbmdyZXNzUnVsZVJlc291cmNlXSksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpZmZlcmVuY2VDb3VudCgpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgaWYgKHRoaXMuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cblxuICAgIGNvdW50ICs9IHRoaXMuY29uZGl0aW9ucy5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5tYXBwaW5ncy5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5tZXRhZGF0YS5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5vdXRwdXRzLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLnBhcmFtZXRlcnMuZGlmZmVyZW5jZUNvdW50O1xuICAgIGNvdW50ICs9IHRoaXMucmVzb3VyY2VzLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLnVua25vd24uZGlmZmVyZW5jZUNvdW50O1xuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpZmZlcmVuY2VDb3VudCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBhbnkgb2YgdGhlIHBlcm1pc3Npb25zIG9iamVjdHMgaW52b2x2ZSBhIGJyb2FkZW5pbmcgb2YgcGVybWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnNCcm9hZGVuZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWFtQ2hhbmdlcy5wZXJtaXNzaW9uc0Jyb2FkZW5lZCB8fCB0aGlzLnNlY3VyaXR5R3JvdXBDaGFuZ2VzLnJ1bGVzQWRkZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRydWUgaWYgYW55IG9mIHRoZSBwZXJtaXNzaW9ucyBvYmplY3RzIGhhdmUgY2hhbmdlZFxuICAgKi9cbiAgcHVibGljIGdldCBwZXJtaXNzaW9uc0FueUNoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWFtQ2hhbmdlcy5oYXNDaGFuZ2VzIHx8IHRoaXMuc2VjdXJpdHlHcm91cENoYW5nZXMuaGFzQ2hhbmdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIHByb3BlcnR5IGNoYW5nZXMgb2YgYSBnaXZlbiBzY3J1dGlueSB0eXBlXG4gICAqXG4gICAqIFdlIGRvbid0IGp1c3QgbG9vayBhdCBwcm9wZXJ0eSB1cGRhdGVzOyB3ZSBhbHNvIGxvb2sgYXQgcmVzb3VyY2UgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgKGluIHdoaWNoXG4gICAqIGNhc2UgdGhlcmUgaXMgbm8gZnVydGhlciBkZXRhaWwgb24gcHJvcGVydHkgdmFsdWVzKSwgYW5kIHJlc291cmNlIHR5cGUgY2hhbmdlcy5cbiAgICovXG4gIHByaXZhdGUgc2NydXRpbml6YWJsZVByb3BlcnR5Q2hhbmdlcyhzY3J1dGlueVR5cGVzOiBQcm9wZXJ0eVNjcnV0aW55VHlwZVtdKTogUHJvcGVydHlDaGFuZ2VbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PFByb3BlcnR5Q2hhbmdlPigpO1xuXG4gICAgZm9yIChjb25zdCBbcmVzb3VyY2VMb2dpY2FsSWQsIHJlc291cmNlQ2hhbmdlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJlc291cmNlcy5jaGFuZ2VzKSkge1xuICAgICAgaWYgKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZUNoYW5nZWQpIHtcbiAgICAgICAgLy8gd2UgaWdub3JlIHJlc291cmNlIHR5cGUgY2hhbmdlcyBoZXJlLCBhbmQgaGFuZGxlIHRoZW0gaW4gc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcygpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc291cmNlQ2hhbmdlLm5ld1Jlc291cmNlVHlwZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3VHlwZVByb3BzID0gbG9hZFJlc291cmNlTW9kZWwocmVzb3VyY2VDaGFuZ2UubmV3UmVzb3VyY2VUeXBlKT8ucHJvcGVydGllcyB8fCB7fTtcbiAgICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgcHJvcF0gb2YgT2JqZWN0LmVudHJpZXMobmV3VHlwZVByb3BzKSkge1xuICAgICAgICBjb25zdCBwcm9wU2NydXRpbnlUeXBlID0gcHJvcC5zY3J1dGluaXphYmxlIHx8IFByb3BlcnR5U2NydXRpbnlUeXBlLk5vbmU7XG4gICAgICAgIGlmIChzY3J1dGlueVR5cGVzLmluY2x1ZGVzKHByb3BTY3J1dGlueVR5cGUpKSB7XG4gICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgcmVzb3VyY2VMb2dpY2FsSWQsXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSxcbiAgICAgICAgICAgIHNjcnV0aW55VHlwZTogcHJvcFNjcnV0aW55VHlwZSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiByZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzPy5bcHJvcGVydHlOYW1lXSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiByZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzPy5bcHJvcGVydHlOYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCByZXNvdXJjZSBjaGFuZ2VzIG9mIGEgZ2l2ZW4gc2NydXRpbnkgdHlwZVxuICAgKlxuICAgKiBXZSBkb24ndCBqdXN0IGxvb2sgYXQgcmVzb3VyY2UgdXBkYXRlczsgd2UgYWxzbyBsb29rIGF0IHJlc291cmNlIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIChpbiB3aGljaFxuICAgKiBjYXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXIgZGV0YWlsIG9uIHByb3BlcnR5IHZhbHVlcyksIGFuZCByZXNvdXJjZSB0eXBlIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIHNjcnV0aW5pemFibGVSZXNvdXJjZUNoYW5nZXMoc2NydXRpbnlUeXBlczogUmVzb3VyY2VTY3J1dGlueVR5cGVbXSk6IFJlc291cmNlQ2hhbmdlW10ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxSZXNvdXJjZUNoYW5nZT4oKTtcblxuICAgIGZvciAoY29uc3QgW3Jlc291cmNlTG9naWNhbElkLCByZXNvdXJjZUNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvdXJjZXMuY2hhbmdlcykpIHtcbiAgICAgIGlmICghcmVzb3VyY2VDaGFuZ2UpIHsgY29udGludWU7IH1cblxuICAgICAgY29uc3QgY29tbW9uUHJvcHMgPSB7XG4gICAgICAgIG9sZFByb3BlcnRpZXM6IHJlc291cmNlQ2hhbmdlLm9sZFByb3BlcnRpZXMsXG4gICAgICAgIG5ld1Byb3BlcnRpZXM6IHJlc291cmNlQ2hhbmdlLm5ld1Byb3BlcnRpZXMsXG4gICAgICAgIHJlc291cmNlTG9naWNhbElkLFxuICAgICAgfTtcblxuICAgICAgLy8gY2hhbmdlcyB0byB0aGUgVHlwZSBvZiByZXNvdXJjZXMgY2FuIGhhcHBlbiB3aGVuIG1pZ3JhdGluZyBmcm9tIENGTiB0ZW1wbGF0ZXMgdGhhdCB1c2UgVHJhbnNmb3Jtc1xuICAgICAgaWYgKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZUNoYW5nZWQpIHtcbiAgICAgICAgLy8gVHJlYXQgYXMgREVMRVRFK0FERFxuICAgICAgICBpZiAocmVzb3VyY2VDaGFuZ2Uub2xkUmVzb3VyY2VUeXBlKSB7XG4gICAgICAgICAgY29uc3Qgb2xkUmVzb3VyY2VNb2RlbCA9IGxvYWRSZXNvdXJjZU1vZGVsKHJlc291cmNlQ2hhbmdlLm9sZFJlc291cmNlVHlwZSk7XG4gICAgICAgICAgaWYgKG9sZFJlc291cmNlTW9kZWwgJiYgdGhpcy5yZXNvdXJjZUlzU2NydXRpbml6YWJsZShvbGRSZXNvdXJjZU1vZGVsLCBzY3J1dGlueVR5cGVzKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgICAuLi5jb21tb25Qcm9wcyxcbiAgICAgICAgICAgICAgbmV3UHJvcGVydGllczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlQ2hhbmdlLm9sZFJlc291cmNlVHlwZSEsXG4gICAgICAgICAgICAgIHNjcnV0aW55VHlwZTogb2xkUmVzb3VyY2VNb2RlbC5zY3J1dGluaXphYmxlISxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvdXJjZUNoYW5nZS5uZXdSZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgICBjb25zdCBuZXdSZXNvdXJjZU1vZGVsID0gbG9hZFJlc291cmNlTW9kZWwocmVzb3VyY2VDaGFuZ2UubmV3UmVzb3VyY2VUeXBlKTtcbiAgICAgICAgICBpZiAobmV3UmVzb3VyY2VNb2RlbCAmJiB0aGlzLnJlc291cmNlSXNTY3J1dGluaXphYmxlKG5ld1Jlc291cmNlTW9kZWwsIHNjcnV0aW55VHlwZXMpKSB7XG4gICAgICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgICAgIC4uLmNvbW1vblByb3BzLFxuICAgICAgICAgICAgICBvbGRQcm9wZXJ0aWVzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2VDaGFuZ2UubmV3UmVzb3VyY2VUeXBlISxcbiAgICAgICAgICAgICAgc2NydXRpbnlUeXBlOiBuZXdSZXNvdXJjZU1vZGVsLnNjcnV0aW5pemFibGUhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXNvdXJjZU1vZGVsID0gbG9hZFJlc291cmNlTW9kZWwocmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlKTtcbiAgICAgICAgaWYgKHJlc291cmNlTW9kZWwgJiYgdGhpcy5yZXNvdXJjZUlzU2NydXRpbml6YWJsZShyZXNvdXJjZU1vZGVsLCBzY3J1dGlueVR5cGVzKSkge1xuICAgICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAgIC4uLmNvbW1vblByb3BzLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiByZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGUsXG4gICAgICAgICAgICBzY3J1dGlueVR5cGU6IHJlc291cmNlTW9kZWwuc2NydXRpbml6YWJsZSEsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvdXJjZUlzU2NydXRpbml6YWJsZShyZXM6IFJlc291cmNlTW9kZWwsIHNjcnV0aW55VHlwZXM6IEFycmF5PFJlc291cmNlU2NydXRpbnlUeXBlPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzY3J1dGlueVR5cGVzLmluY2x1ZGVzKHJlcy5zY3J1dGluaXphYmxlIHx8IFJlc291cmNlU2NydXRpbnlUeXBlLk5vbmUpO1xuICB9XG59XG5cbi8qKlxuICogQSBjaGFuZ2UgaW4gcHJvcGVydHkgdmFsdWVzXG4gKlxuICogTm90IG5lY2Vzc2FyaWx5IGFuIHVwZGF0ZSwgaXQgY291bGQgYmUgdGhhdCB0aGVyZSB1c2VkIHRvIGJlIG5vIHZhbHVlIHRoZXJlXG4gKiBiZWNhdXNlIHRoZXJlIHdhcyBubyByZXNvdXJjZSwgYW5kIG5vdyB0aGVyZSBpcyAob3IgdmljZSB2ZXJzYSkuXG4gKlxuICogVGhlcmVmb3JlLCB3ZSBqdXN0IGNvbnRhaW4gcGxhaW4gdmFsdWVzIGFuZCBub3QgYSBQcm9wZXJ0eURpZmZlcmVuY2U8YW55Pi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcm9wZXJ0eUNoYW5nZSB7XG4gIC8qKlxuICAgKiBMb2dpY2FsIElEIG9mIHRoZSByZXNvdXJjZSB3aGVyZSB0aGlzIHByb3BlcnR5IGNoYW5nZSB3YXMgZm91bmRcbiAgICovXG4gIHJlc291cmNlTG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogU2NydXRpbnkgdHlwZSBmb3IgdGhpcyBwcm9wZXJ0eSBjaGFuZ2VcbiAgICovXG4gIHNjcnV0aW55VHlwZTogUHJvcGVydHlTY3J1dGlueVR5cGU7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaXMgY2hhbmdpbmdcbiAgICovXG4gIHByb3BlcnR5TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBvbGRWYWx1ZT86IGFueTtcblxuICAvKipcbiAgICogVGhlIG5ldyBwcm9wZXJ0eSB2YWx1ZVxuICAgKi9cbiAgbmV3VmFsdWU/OiBhbnk7XG59XG5cbi8qKlxuICogQSByZXNvdXJjZSBjaGFuZ2VcbiAqXG4gKiBFaXRoZXIgYSBjcmVhdGlvbiwgZGVsZXRpb24gb3IgdXBkYXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIExvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHdoZXJlIHRoaXMgcHJvcGVydHkgY2hhbmdlIHdhcyBmb3VuZFxuICAgKi9cbiAgcmVzb3VyY2VMb2dpY2FsSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU2NydXRpbnkgdHlwZSBmb3IgdGhpcyByZXNvdXJjZSBjaGFuZ2VcbiAgICovXG4gIHNjcnV0aW55VHlwZTogUmVzb3VyY2VTY3J1dGlueVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcHJvcGVydGllcyB2YWx1ZSAobWlnaHQgYmUgdW5kZWZpbmVkIGluIGNhc2Ugb2YgY3JlYXRpb24pXG4gICAqL1xuICBvbGRQcm9wZXJ0aWVzPzogUHJvcGVydHlNYXA7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcHJvcGVydGllcyB2YWx1ZSAobWlnaHQgYmUgdW5kZWZpbmVkIGluIGNhc2Ugb2YgZGVsZXRpb24pXG4gICAqL1xuICBuZXdQcm9wZXJ0aWVzPzogUHJvcGVydHlNYXA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURpZmZlcmVuY2U8VmFsdWVUeXBlPiB7XG4gIHJlYWRvbmx5IG9sZFZhbHVlOiBWYWx1ZVR5cGUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG5ld1ZhbHVlOiBWYWx1ZVR5cGUgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGlzRGlmZmVyZW50OiBib29sZWFuO1xuICByZWFkb25seSBpc0FkZGl0aW9uOiBib29sZWFuO1xuICByZWFkb25seSBpc1JlbW92YWw6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzVXBkYXRlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIE1vZGVscyBhbiBlbnRpdHkgdGhhdCBjaGFuZ2VkIGJldHdlZW4gdHdvIHZlcnNpb25zIG9mIGEgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBEaWZmZXJlbmNlPFZhbHVlVHlwZT4gaW1wbGVtZW50cyBJRGlmZmVyZW5jZTxWYWx1ZVR5cGU+IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBpcyBhbiBhY3R1YWwgZGlmZmVyZW50IG9yIHRoZSB2YWx1ZXMgYXJlIGFjdHVhbGx5IHRoZSBzYW1lXG4gICAqXG4gICAqIGlzRGlmZmVyZW50ID0+IChpc1VwZGF0ZSB8IGlzUmVtb3ZlZCB8IGlzVXBkYXRlKVxuICAgKi9cbiAgcHVibGljIGlzRGlmZmVyZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gb2xkVmFsdWUgdGhlIG9sZCB2YWx1ZSwgY2Fubm90IGJlIGVxdWFsICh0byB0aGUgc2Vuc2Ugb2YgK2RlZXBFcXVhbCspIHRvICtuZXdWYWx1ZSsuXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSB0aGUgbmV3IHZhbHVlLCBjYW5ub3QgYmUgZXF1YWwgKHRvIHRoZSBzZW5zZSBvZiArZGVlcEVxdWFsKykgdG8gK29sZFZhbHVlKy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBvbGRWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkLCBwdWJsaWMgcmVhZG9ubHkgbmV3VmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7IG1lc3NhZ2U6ICdvbGRWYWx1ZSBhbmQgbmV3VmFsdWUgYXJlIGJvdGggdW5kZWZpbmVkIScgfSk7XG4gICAgfVxuICAgIHRoaXMuaXNEaWZmZXJlbnQgPSAhZGVlcEVxdWFsKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gIH1cblxuICAvKiogQHJldHVybnMgK3RydWUrIGlmIHRoZSBlbGVtZW50IGlzIG5ldyB0byB0aGUgdGVtcGxhdGUuICovXG4gIHB1YmxpYyBnZXQgaXNBZGRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vbGRWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zICt0cnVlKyBpZiB0aGUgZWxlbWVudCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSB0ZW1wbGF0ZS4gKi9cbiAgcHVibGljIGdldCBpc1JlbW92YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyArdHJ1ZSsgaWYgdGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgaW4gdGhlIHRlbXBsYXRlIGFuZCBpcyB1cGRhdGVkLiAqL1xuICBwdWJsaWMgZ2V0IGlzVXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9sZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICYmIHRoaXMubmV3VmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvcGVydHlEaWZmZXJlbmNlPFZhbHVlVHlwZT4gZXh0ZW5kcyBEaWZmZXJlbmNlPFZhbHVlVHlwZT4ge1xuICBwdWJsaWMgY2hhbmdlSW1wYWN0PzogUmVzb3VyY2VJbXBhY3Q7XG5cbiAgY29uc3RydWN0b3Iob2xkVmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCwgbmV3VmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCwgYXJnczogeyBjaGFuZ2VJbXBhY3Q/OiBSZXNvdXJjZUltcGFjdCB9KSB7XG4gICAgc3VwZXIob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB0aGlzLmNoYW5nZUltcGFjdCA9IGFyZ3MuY2hhbmdlSW1wYWN0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUIGV4dGVuZHMgSURpZmZlcmVuY2U8Vj4+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaWZmczogeyBbbG9naWNhbElkOiBzdHJpbmddOiBUIH0pIHt9XG5cbiAgcHVibGljIGdldCBjaGFuZ2VzKCk6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogVCB9IHtcbiAgICByZXR1cm4gb25seUNoYW5nZXModGhpcy5kaWZmcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpZmZlcmVuY2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY2hhbmdlcykubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIGdldChsb2dpY2FsSWQ6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IHJldCA9IHRoaXMuZGlmZnNbbG9naWNhbElkXTtcbiAgICBpZiAoIXJldCkgeyB0aHJvdyBuZXcgRXJyb3IoYE5vIG9iamVjdCB3aXRoIGxvZ2ljYWwgSUQgJyR7bG9naWNhbElkfSdgKTsgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlKGxvZ2ljYWxJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZGVsZXRlIHRoaXMuZGlmZnNbbG9naWNhbElkXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9naWNhbElkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hhbmdlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBUZW1wbGF0ZURpZmYgd2hpY2ggb25seSBjb250YWlucyBjaGFuZ2VzIGZvciB3aGljaCBgcHJlZGljYXRlYFxuICAgKiByZXR1cm5zIGB0cnVlYC5cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIocHJlZGljYXRlOiAoZGlmZjogVCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbik6IERpZmZlcmVuY2VDb2xsZWN0aW9uPFYsIFQ+IHtcbiAgICBjb25zdCBuZXdDaGFuZ2VzOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IFQgfSA9IHsgfTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIE9iamVjdC5rZXlzKHRoaXMuY2hhbmdlcykpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLmNoYW5nZXNbaWRdO1xuXG4gICAgICBpZiAocHJlZGljYXRlKGRpZmYpKSB7XG4gICAgICAgIG5ld0NoYW5nZXNbaWRdID0gZGlmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uPFYsIFQ+KG5ld0NoYW5nZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZXMgYGNiYCBmb3IgYWxsIGNoYW5nZXMgaW4gdGhpcyBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBDaGFuZ2VzIHdpbGwgYmUgc29ydGVkIGFzIGZvbGxvd3M6XG4gICAqICAtIFJlbW92ZWRcbiAgICogIC0gQWRkZWRcbiAgICogIC0gVXBkYXRlZFxuICAgKiAgLSBPdGhlcnNcbiAgICpcbiAgICogQHBhcmFtIGNiXG4gICAqL1xuICBwdWJsaWMgZm9yRWFjaERpZmZlcmVuY2UoY2I6IChsb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBUKSA9PiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCByZW1vdmVkID0gbmV3IEFycmF5PHsgbG9naWNhbElkOiBzdHJpbmc7IGNoYW5nZTogVCB9PigpO1xuICAgIGNvbnN0IGFkZGVkID0gbmV3IEFycmF5PHsgbG9naWNhbElkOiBzdHJpbmc7IGNoYW5nZTogVCB9PigpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBuZXcgQXJyYXk8eyBsb2dpY2FsSWQ6IHN0cmluZzsgY2hhbmdlOiBUIH0+KCk7XG4gICAgY29uc3Qgb3RoZXJzID0gbmV3IEFycmF5PHsgbG9naWNhbElkOiBzdHJpbmc7IGNoYW5nZTogVCB9PigpO1xuXG4gICAgZm9yIChjb25zdCBsb2dpY2FsSWQgb2YgdGhpcy5sb2dpY2FsSWRzKSB7XG4gICAgICBjb25zdCBjaGFuZ2U6IFQgPSB0aGlzLmNoYW5nZXNbbG9naWNhbElkXSE7XG4gICAgICBpZiAoY2hhbmdlLmlzQWRkaXRpb24pIHtcbiAgICAgICAgYWRkZWQucHVzaCh7IGxvZ2ljYWxJZCwgY2hhbmdlIH0pO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UuaXNSZW1vdmFsKSB7XG4gICAgICAgIHJlbW92ZWQucHVzaCh7IGxvZ2ljYWxJZCwgY2hhbmdlIH0pO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UuaXNVcGRhdGUpIHtcbiAgICAgICAgdXBkYXRlZC5wdXNoKHsgbG9naWNhbElkLCBjaGFuZ2UgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZS5pc0RpZmZlcmVudCkge1xuICAgICAgICBvdGhlcnMucHVzaCh7IGxvZ2ljYWxJZCwgY2hhbmdlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZWQuZm9yRWFjaCh2ID0+IGNiKHYubG9naWNhbElkLCB2LmNoYW5nZSkpO1xuICAgIGFkZGVkLmZvckVhY2godiA9PiBjYih2LmxvZ2ljYWxJZCwgdi5jaGFuZ2UpKTtcbiAgICB1cGRhdGVkLmZvckVhY2godiA9PiBjYih2LmxvZ2ljYWxJZCwgdi5jaGFuZ2UpKTtcbiAgICBvdGhlcnMuZm9yRWFjaCh2ID0+IGNiKHYubG9naWNhbElkLCB2LmNoYW5nZSkpO1xuICB9XG59XG5cbi8qKlxuICogQXJndW1lbnRzIGV4cGVjdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBvZiArVGVtcGxhdGVEaWZmKywgZXh0cmFjdGVkIGFzIGFuIGludGVyZmFjZSBmb3IgdGhlIHNha2VcbiAqIG9mIChyZWxhdGl2ZSkgY29uY2lzZW5lc3Mgb2YgdGhlIGNvbnN0cnVjdG9yJ3Mgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUZW1wbGF0ZURpZmYge1xuICBhd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24/OiBJRGlmZmVyZW5jZTxzdHJpbmc+O1xuICBkZXNjcmlwdGlvbj86IElEaWZmZXJlbmNlPHN0cmluZz47XG4gIHRyYW5zZm9ybT86IElEaWZmZXJlbmNlPHN0cmluZz47XG5cbiAgY29uZGl0aW9ucz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPENvbmRpdGlvbiwgQ29uZGl0aW9uRGlmZmVyZW5jZT47XG4gIG1hcHBpbmdzPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248TWFwcGluZywgTWFwcGluZ0RpZmZlcmVuY2U+O1xuICBtZXRhZGF0YT86IERpZmZlcmVuY2VDb2xsZWN0aW9uPE1ldGFkYXRhLCBNZXRhZGF0YURpZmZlcmVuY2U+O1xuICBvdXRwdXRzPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248T3V0cHV0LCBPdXRwdXREaWZmZXJlbmNlPjtcbiAgcGFyYW1ldGVycz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPFBhcmFtZXRlciwgUGFyYW1ldGVyRGlmZmVyZW5jZT47XG4gIHJlc291cmNlcz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPFJlc291cmNlLCBSZXNvdXJjZURpZmZlcmVuY2U+O1xuXG4gIHVua25vd24/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxhbnksIElEaWZmZXJlbmNlPGFueT4+O1xufVxuXG5leHBvcnQgdHlwZSBDb25kaXRpb24gPSBhbnk7XG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uRGlmZmVyZW5jZSBleHRlbmRzIERpZmZlcmVuY2U8Q29uZGl0aW9uPiB7XG4gIC8vIFRPRE86IGRlZmluZSBzcGVjaWZpYyBkaWZmZXJlbmNlIGF0dHJpYnV0ZXNcbn1cblxuZXhwb3J0IHR5cGUgTWFwcGluZyA9IGFueTtcbmV4cG9ydCBjbGFzcyBNYXBwaW5nRGlmZmVyZW5jZSBleHRlbmRzIERpZmZlcmVuY2U8TWFwcGluZz4ge1xuICAvLyBUT0RPOiBkZWZpbmUgc3BlY2lmaWMgZGlmZmVyZW5jZSBhdHRyaWJ1dGVzXG59XG5cbmV4cG9ydCB0eXBlIE1ldGFkYXRhID0gYW55O1xuZXhwb3J0IGNsYXNzIE1ldGFkYXRhRGlmZmVyZW5jZSBleHRlbmRzIERpZmZlcmVuY2U8TWV0YWRhdGE+IHtcbiAgLy8gVE9ETzogZGVmaW5lIHNwZWNpZmljIGRpZmZlcmVuY2UgYXR0cmlidXRlc1xufVxuXG5leHBvcnQgdHlwZSBPdXRwdXQgPSBhbnk7XG5leHBvcnQgY2xhc3MgT3V0cHV0RGlmZmVyZW5jZSBleHRlbmRzIERpZmZlcmVuY2U8T3V0cHV0PiB7XG4gIC8vIFRPRE86IGRlZmluZSBzcGVjaWZpYyBkaWZmZXJlbmNlIGF0dHJpYnV0ZXNcbn1cblxuZXhwb3J0IHR5cGUgUGFyYW1ldGVyID0gYW55O1xuZXhwb3J0IGNsYXNzIFBhcmFtZXRlckRpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPFBhcmFtZXRlcj4ge1xuICAvLyBUT0RPOiBkZWZpbmUgc3BlY2lmaWMgZGlmZmVyZW5jZSBhdHRyaWJ1dGVzXG59XG5cbmV4cG9ydCBlbnVtIFJlc291cmNlSW1wYWN0IHtcbiAgLyoqIFRoZSBleGlzdGluZyBwaHlzaWNhbCByZXNvdXJjZSB3aWxsIGJlIHVwZGF0ZWQgKi9cbiAgV0lMTF9VUERBVEUgPSAnV0lMTF9VUERBVEUnLFxuICAvKiogQSBuZXcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSBjcmVhdGVkICovXG4gIFdJTExfQ1JFQVRFID0gJ1dJTExfQ1JFQVRFJyxcbiAgLyoqIFRoZSBleGlzdGluZyBwaHlzaWNhbCByZXNvdXJjZSB3aWxsIGJlIHJlcGxhY2VkICovXG4gIFdJTExfUkVQTEFDRSA9ICdXSUxMX1JFUExBQ0UnLFxuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIG1heSBiZSByZXBsYWNlZCAqL1xuICBNQVlfUkVQTEFDRSA9ICdNQVlfUkVQTEFDRScsXG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSBkZXN0cm95ZWQgKi9cbiAgV0lMTF9ERVNUUk9ZID0gJ1dJTExfREVTVFJPWScsXG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gQ2xvdWRGb3JtYXRpb24gc3VwZXJ2aXNpb24gKi9cbiAgV0lMTF9PUlBIQU4gPSAnV0lMTF9PUlBIQU4nLFxuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgYWRkZWQgdG8gQ2xvdWRGb3JtYXRpb24gc3VwZXJ2aXNpb24gKi9cbiAgV0lMTF9JTVBPUlQgPSAnV0lMTF9JTVBPUlQnLFxuICAvKiogVGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoaXMgcmVzb3VyY2UgKi9cbiAgTk9fQ0hBTkdFID0gJ05PX0NIQU5HRScsXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBhcyBhIHJlZHVjZXIgdG8gb2J0YWluIHRoZSByZXNvdXJjZS1sZXZlbCBpbXBhY3Qgb2YgYSBsaXN0XG4gKiBvZiBwcm9wZXJ0eS1sZXZlbCBpbXBhY3RzLlxuICogQHBhcmFtIG9uZSB0aGUgY3VycmVudCB3b3JzdCBpbXBhY3Qgc28gZmFyLlxuICogQHBhcmFtIHR3byB0aGUgbmV3IGltcGFjdCBiZWluZyBjb25zaWRlcmVkIChjYW4gYmUgdW5kZWZpbmVkLCBhcyB3ZSBtYXkgbm90IGFsd2F5cyBiZVxuICogICAgICBhYmxlIHRvIGRldGVybWluZSBzb21lIHBlcm9wZXJ0eSdzIGltcGFjdCkuXG4gKi9cbmZ1bmN0aW9uIHdvcnN0SW1wYWN0KG9uZTogUmVzb3VyY2VJbXBhY3QsIHR3bz86IFJlc291cmNlSW1wYWN0KTogUmVzb3VyY2VJbXBhY3Qge1xuICBpZiAoIXR3bykgeyByZXR1cm4gb25lOyB9XG4gIGNvbnN0IGJhZG5lc3MgPSB7XG4gICAgW1Jlc291cmNlSW1wYWN0Lk5PX0NIQU5HRV06IDAsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfSU1QT1JUXTogMCxcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9VUERBVEVdOiAxLFxuICAgIFtSZXNvdXJjZUltcGFjdC5XSUxMX0NSRUFURV06IDIsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfT1JQSEFOXTogMyxcbiAgICBbUmVzb3VyY2VJbXBhY3QuTUFZX1JFUExBQ0VdOiA0LFxuICAgIFtSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0VdOiA1LFxuICAgIFtSZXNvdXJjZUltcGFjdC5XSUxMX0RFU1RST1ldOiA2LFxuICB9O1xuICByZXR1cm4gYmFkbmVzc1tvbmVdID4gYmFkbmVzc1t0d29dID8gb25lIDogdHdvO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlIHtcbiAgVHlwZTogc3RyaW5nO1xuICBQcm9wZXJ0aWVzPzogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG5cbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKipcbiAqIENoYW5nZSB0byBhIHNpbmdsZSByZXNvdXJjZSBiZXR3ZWVuIHR3byBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXNcbiAqXG4gKiBUaGlzIGNsYXNzIGNhbiBiZSBtdXRhdGVkIGFmdGVyIGNvbnN0cnVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIFJlc291cmNlRGlmZmVyZW5jZSBpbXBsZW1lbnRzIElEaWZmZXJlbmNlPFJlc291cmNlPiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcmVzb3VyY2Ugd2FzIGFkZGVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNBZGRpdGlvbjogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJlc291cmNlIHdhcyByZW1vdmVkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXNSZW1vdmFsOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcmVzb3VyY2Ugd2FzIGltcG9ydGVkXG4gICAqL1xuICBwdWJsaWMgaXNJbXBvcnQ/OiBib29sZWFuO1xuXG4gIC8qKiBQcm9wZXJ0eS1sZXZlbCBjaGFuZ2VzIG9uIHRoZSByZXNvdXJjZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5RGlmZnM6IHsgW2tleTogc3RyaW5nXTogUHJvcGVydHlEaWZmZXJlbmNlPGFueT4gfTtcblxuICAvKiogQ2hhbmdlcyB0byBub24tcHJvcGVydHkgbGV2ZWwgYXR0cmlidXRlcyBvZiB0aGUgcmVzb3VyY2UgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvdGhlckRpZmZzOiB7IFtrZXk6IHN0cmluZ106IERpZmZlcmVuY2U8YW55PiB9O1xuXG4gIC8qKiBUaGUgcmVzb3VyY2UgdHlwZSAob3Igb2xkIGFuZCBuZXcgdHlwZSBpZiBpdCBoYXMgY2hhbmdlZCkgKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZVR5cGVzOiB7IHJlYWRvbmx5IG9sZFR5cGU/OiBzdHJpbmc7IHJlYWRvbmx5IG5ld1R5cGU/OiBzdHJpbmcgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgb2xkVmFsdWU6IFJlc291cmNlIHwgdW5kZWZpbmVkLFxuICAgIHB1YmxpYyByZWFkb25seSBuZXdWYWx1ZTogUmVzb3VyY2UgfCB1bmRlZmluZWQsXG4gICAgYXJnczoge1xuICAgICAgcmVzb3VyY2VUeXBlOiB7IG9sZFR5cGU/OiBzdHJpbmc7IG5ld1R5cGU/OiBzdHJpbmcgfTtcbiAgICAgIHByb3BlcnR5RGlmZnM6IHsgW2tleTogc3RyaW5nXTogUHJvcGVydHlEaWZmZXJlbmNlPGFueT4gfTtcbiAgICAgIG90aGVyRGlmZnM6IHsgW2tleTogc3RyaW5nXTogRGlmZmVyZW5jZTxhbnk+IH07XG4gICAgfSxcbiAgKSB7XG4gICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gYXJncy5yZXNvdXJjZVR5cGU7XG4gICAgdGhpcy5wcm9wZXJ0eURpZmZzID0gYXJncy5wcm9wZXJ0eURpZmZzO1xuICAgIHRoaXMub3RoZXJEaWZmcyA9IGFyZ3Mub3RoZXJEaWZmcztcblxuICAgIHRoaXMuaXNBZGRpdGlvbiA9IG9sZFZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc1JlbW92YWwgPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNJbXBvcnQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9sZFByb3BlcnRpZXMoKTogUHJvcGVydHlNYXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9sZFZhbHVlICYmIHRoaXMub2xkVmFsdWUuUHJvcGVydGllcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmV3UHJvcGVydGllcygpOiBQcm9wZXJ0eU1hcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubmV3VmFsdWUgJiYgdGhpcy5uZXdWYWx1ZS5Qcm9wZXJ0aWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXNvdXJjZSB3YXMgbW9kaWZpZWQgYXQgYWxsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRGlmZmVyZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpZmZlcmVuY2VDb3VudCA+IDAgfHwgdGhpcy5vbGRSZXNvdXJjZVR5cGUgIT09IHRoaXMubmV3UmVzb3VyY2VUeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlc291cmNlIHdhcyB1cGRhdGVkIGluLXBsYWNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzVXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlmZmVyZW50ICYmICF0aGlzLmlzQWRkaXRpb24gJiYgIXRoaXMuaXNSZW1vdmFsO1xuICB9XG5cbiAgcHVibGljIGdldCBvbGRSZXNvdXJjZVR5cGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5ld1Jlc291cmNlVHlwZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgYWN0dWFsIHByb3BlcnR5IHVwZGF0ZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvcGVydHlVcGRhdGVzKCk6IHsgW2tleTogc3RyaW5nXTogUHJvcGVydHlEaWZmZXJlbmNlPGFueT4gfSB7XG4gICAgcmV0dXJuIG9ubHlDaGFuZ2VzKHRoaXMucHJvcGVydHlEaWZmcyk7XG4gIH1cblxuICAvKipcbiAgICogQWxsIGFjdHVhbCBcIm90aGVyXCIgdXBkYXRlc1xuICAgKi9cbiAgcHVibGljIGdldCBvdGhlckNoYW5nZXMoKTogeyBba2V5OiBzdHJpbmddOiBEaWZmZXJlbmNlPGFueT4gfSB7XG4gICAgcmV0dXJuIG9ubHlDaGFuZ2VzKHRoaXMub3RoZXJEaWZmcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHJlc291cmNlIHR5cGUgd2FzIGNoYW5nZWQgaW4gdGhpcyBkaWZmXG4gICAqXG4gICAqIFRoaXMgaXMgbm90IGEgdmFsaWQgb3BlcmF0aW9uIGluIENsb3VkRm9ybWF0aW9uIGJ1dCB0byBiZSBkZWZlbnNpdmUgd2UncmUgZ29pbmdcbiAgICogdG8gYmUgYXdhcmUgb2YgaXQgYW55d2F5LlxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZVR5cGVDaGFuZ2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAmJiB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlICE9PSB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSByZXNvdXJjZSB0eXBlIGlmIGl0IHdhcyB1bmNoYW5nZWRcbiAgICpcbiAgICogSWYgdGhlIHJlc291cmNlIHR5cGUgd2FzIGNoYW5nZWQsIGl0J3MgYW4gZXJyb3IgdG8gY2FsbCB0aGlzLlxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZVR5cGVDaGFuZ2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgLnJlc291cmNlVHlwZSwgYmVjYXVzZSB0aGUgdHlwZSB3YXMgY2hhbmdlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGUgfHwgdGhpcy5yZXNvdXJjZVR5cGVzLm5ld1R5cGUhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBQcm9wZXJ0eUNoYW5nZSBpbiB0aGlzIG9iamVjdFxuICAgKlxuICAgKiBUaGlzIGFmZmVjdHMgdGhlIHByb3BlcnR5IGRpZmYgYXMgaXQgaXMgc3VtbWFyaXplZCB0byB1c2VycywgYnV0IGl0IERPRVNcbiAgICogTk9UIGFmZmVjdCBlaXRoZXIgdGhlIFwib2xkVmFsdWVcIiBvciBcIm5ld1ZhbHVlXCIgdmFsdWVzOyB0aG9zZSBzdGlsbCBjb250YWluXG4gICAqIHRoZSBhY3R1YWwgdGVtcGxhdGUgdmFsdWVzIGFzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyICh0aGV5IG1pZ2h0IHN0aWxsIGJlXG4gICAqIHVzZWQgZm9yIGRvd25zdHJlYW0gcHJvY2Vzc2luZykuXG4gICAqL1xuICBwdWJsaWMgc2V0UHJvcGVydHlDaGFuZ2UocHJvcGVydHlOYW1lOiBzdHJpbmcsIGNoYW5nZTogUHJvcGVydHlEaWZmZXJlbmNlPGFueT4pIHtcbiAgICB0aGlzLnByb3BlcnR5RGlmZnNbcHJvcGVydHlOYW1lXSA9IGNoYW5nZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgT3RoZXJDaGFuZ2UgaW4gdGhpcyBvYmplY3RcbiAgICpcbiAgICogVGhpcyBhZmZlY3RzIHRoZSBwcm9wZXJ0eSBkaWZmIGFzIGl0IGlzIHN1bW1hcml6ZWQgdG8gdXNlcnMsIGJ1dCBpdCBET0VTXG4gICAqIE5PVCBhZmZlY3QgZWl0aGVyIHRoZSBcIm9sZFZhbHVlXCIgb3IgXCJuZXdWYWx1ZVwiIHZhbHVlczsgdGhvc2Ugc3RpbGwgY29udGFpblxuICAgKiB0aGUgYWN0dWFsIHRlbXBsYXRlIHZhbHVlcyBhcyBwcm92aWRlZCBieSB0aGUgdXNlciAodGhleSBtaWdodCBzdGlsbCBiZVxuICAgKiB1c2VkIGZvciBkb3duc3RyZWFtIHByb2Nlc3NpbmcpLlxuICAgKi9cbiAgcHVibGljIHNldE90aGVyQ2hhbmdlKG90aGVyTmFtZTogc3RyaW5nLCBjaGFuZ2U6IFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+KSB7XG4gICAgdGhpcy5vdGhlckRpZmZzW290aGVyTmFtZV0gPSBjaGFuZ2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNoYW5nZUltcGFjdCgpOiBSZXNvdXJjZUltcGFjdCB7XG4gICAgaWYgKHRoaXMuaXNJbXBvcnQpIHtcbiAgICAgIHJldHVybiBSZXNvdXJjZUltcGFjdC5XSUxMX0lNUE9SVDtcbiAgICB9XG4gICAgLy8gQ2hlY2sgdGhlIFR5cGUgZmlyc3RcbiAgICBpZiAodGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGUgIT09IHRoaXMucmVzb3VyY2VUeXBlcy5uZXdUeXBlKSB7XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGUgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gUmVzb3VyY2VJbXBhY3QuV0lMTF9DUkVBVEU7IH1cbiAgICAgIGlmICh0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9sZFZhbHVlIS5EZWxldGlvblBvbGljeSA9PT0gJ1JldGFpbidcbiAgICAgICAgICA/IFJlc291cmNlSW1wYWN0LldJTExfT1JQSEFOXG4gICAgICAgICAgOiBSZXNvdXJjZUltcGFjdC5XSUxMX0RFU1RST1k7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFO1xuICAgIH1cblxuICAgIC8vIEJhc2UgaW1wYWN0IChiZWZvcmUgd2UgbWl4IGluIHRoZSB3b3JzdCBvZiB0aGUgcHJvcGVydHkgaW1wYWN0cyk7XG4gICAgLy8gV0lMTF9VUERBVEUgaWYgd2UgaGF2ZSBcIm90aGVyXCIgY2hhbmdlcywgTk9fQ0hBTkdFIGlmIHRoZXJlIGFyZSBubyBcIm90aGVyXCIgY2hhbmdlcy5cbiAgICBjb25zdCBiYXNlSW1wYWN0ID0gT2JqZWN0LmtleXModGhpcy5vdGhlckNoYW5nZXMpLmxlbmd0aCA+IDAgPyBSZXNvdXJjZUltcGFjdC5XSUxMX1VQREFURSA6IFJlc291cmNlSW1wYWN0Lk5PX0NIQU5HRTtcblxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucHJvcGVydHlEaWZmcylcbiAgICAgIC5tYXAoZWx0ID0+IGVsdC5jaGFuZ2VJbXBhY3QpXG4gICAgICAucmVkdWNlKHdvcnN0SW1wYWN0LCBiYXNlSW1wYWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCBvZiBhY3R1YWwgZGlmZmVyZW5jZXMgKG5vdCBvZiBlbGVtZW50cylcbiAgICovXG4gIHB1YmxpYyBnZXQgZGlmZmVyZW5jZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wcm9wZXJ0eVVwZGF0ZXMpLmxlbmd0aFxuICAgICAgKyBPYmplY3QudmFsdWVzKHRoaXMub3RoZXJDaGFuZ2VzKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGEgY2FsbGJhY2sgZm9yIGVhY2ggYWN0dWFsIGRpZmZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBmb3JFYWNoRGlmZmVyZW5jZShjYjogKHR5cGU6ICdQcm9wZXJ0eScgfCAnT3RoZXInLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBEaWZmZXJlbmNlPGFueT4gfCBQcm9wZXJ0eURpZmZlcmVuY2U8YW55PikgPT4gYW55KSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0eVVwZGF0ZXMpLnNvcnQoKSkge1xuICAgICAgY2IoJ1Byb3BlcnR5Jywga2V5LCB0aGlzLnByb3BlcnR5VXBkYXRlc1trZXldKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5vdGhlckNoYW5nZXMpLnNvcnQoKSkge1xuICAgICAgY2IoJ090aGVyJywga2V5LCB0aGlzLm90aGVyRGlmZnNba2V5XSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5RGlmZmVyZW5jZTxUPihkaWZmOiBEaWZmZXJlbmNlPFQ+KTogZGlmZiBpcyBQcm9wZXJ0eURpZmZlcmVuY2U8VD4ge1xuICByZXR1cm4gKGRpZmYgYXMgUHJvcGVydHlEaWZmZXJlbmNlPFQ+KS5jaGFuZ2VJbXBhY3QgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgYSBtYXAgb2YgSURpZmZlcmVuY2VzIGRvd24gdG8gb25seSByZXRhaW4gdGhlIGFjdHVhbCBjaGFuZ2VzXG4gKi9cbmZ1bmN0aW9uIG9ubHlDaGFuZ2VzPFYsIFQgZXh0ZW5kcyBJRGlmZmVyZW5jZTxWPj4oeHM6IHtba2V5OiBzdHJpbmddOiBUfSk6IHtba2V5OiBzdHJpbmddOiBUfSB7XG4gIGNvbnN0IHJldDogeyBba2V5OiBzdHJpbmddOiBUIH0gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCBkaWZmXSBvZiBPYmplY3QuZW50cmllcyh4cykpIHtcbiAgICBpZiAoZGlmZi5pc0RpZmZlcmVudCkge1xuICAgICAgcmV0W2tleV0gPSBkaWZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19
|
|
495
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBd0M7QUFDeEMsb0VBQW9IO0FBQ3BILGlDQUFzRDtBQUN0RCxvREFBZ0Q7QUFDaEQsOEVBQXlFO0FBYXpFLGlFQUFpRTtBQUNqRSxNQUFhLFlBQVk7SUF1QnZCLFlBQVksSUFBbUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUNoRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksb0JBQW9CLENBQUMsRUFBRSxD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QUM7WUFDckIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzc2VydGlvbkVycm9yIH0gZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IFByb3BlcnR5U2NydXRpbnlUeXBlLCBSZXNvdXJjZVNjcnV0aW55VHlwZSwgUmVzb3VyY2UgYXMgUmVzb3VyY2VNb2RlbCB9IGZyb20gJ0Bhd3MtY2RrL3NlcnZpY2Utc3BlYy10eXBlcyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwsIGxvYWRSZXNvdXJjZU1vZGVsIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IElhbUNoYW5nZXMgfSBmcm9tICcuLi9pYW0vaWFtLWNoYW5nZXMnO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cENoYW5nZXMgfSBmcm9tICcuLi9uZXR3b3JrL3NlY3VyaXR5LWdyb3VwLWNoYW5nZXMnO1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eU1hcCA9IHtba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuZXhwb3J0IHR5cGUgUmVzb3VyY2VSZXBsYWNlbWVudHMgPSB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IFJlc291cmNlUmVwbGFjZW1lbnQgfTtcblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZVJlcGxhY2VtZW50IHtcbiAgcmVzb3VyY2VSZXBsYWNlZDogYm9vbGVhbjtcbiAgcHJvcGVydGllc1JlcGxhY2VkOiB7IFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IENoYW5nZVNldFJlcGxhY2VtZW50IH07XG59XG5cbmV4cG9ydCB0eXBlIENoYW5nZVNldFJlcGxhY2VtZW50ID0gJ0Fsd2F5cycgfCAnTmV2ZXInIHwgJ0NvbmRpdGlvbmFsbHknO1xuXG4vKiogU2VtYW50aWMgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzLiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRGlmZiBpbXBsZW1lbnRzIElUZW1wbGF0ZURpZmYge1xuICBwdWJsaWMgYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uPzogRGlmZmVyZW5jZTxzdHJpbmc+O1xuICBwdWJsaWMgZGVzY3JpcHRpb24/OiBEaWZmZXJlbmNlPHN0cmluZz47XG4gIHB1YmxpYyB0cmFuc2Zvcm0/OiBEaWZmZXJlbmNlPHN0cmluZz47XG4gIHB1YmxpYyBjb25kaXRpb25zOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxDb25kaXRpb24sIENvbmRpdGlvbkRpZmZlcmVuY2U+O1xuICBwdWJsaWMgbWFwcGluZ3M6IERpZmZlcmVuY2VDb2xsZWN0aW9uPE1hcHBpbmcsIE1hcHBpbmdEaWZmZXJlbmNlPjtcbiAgcHVibGljIG1ldGFkYXRhOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxNZXRhZGF0YSwgTWV0YWRhdGFEaWZmZXJlbmNlPjtcbiAgcHVibGljIG91dHB1dHM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPE91dHB1dCwgT3V0cHV0RGlmZmVyZW5jZT47XG4gIHB1YmxpYyBwYXJhbWV0ZXJzOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxQYXJhbWV0ZXIsIFBhcmFtZXRlckRpZmZlcmVuY2U+O1xuICBwdWJsaWMgcmVzb3VyY2VzOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxSZXNvdXJjZSwgUmVzb3VyY2VEaWZmZXJlbmNlPjtcbiAgLyoqIFRoZSBkaWZmZXJlbmNlcyBpbiB1bmtub3duL3VuZXhwZWN0ZWQgcGFydHMgb2YgdGhlIHRlbXBsYXRlICovXG4gIHB1YmxpYyB1bmtub3duOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxhbnksIERpZmZlcmVuY2U8YW55Pj47XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdG8gSUFNIHBvbGljaWVzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWFtQ2hhbmdlczogSWFtQ2hhbmdlcztcblxuICAvKipcbiAgICogQ2hhbmdlcyB0byBTZWN1cml0eSBHcm91cCBpbmdyZXNzIGFuZCBlZ3Jlc3MgcnVsZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUdyb3VwQ2hhbmdlczogU2VjdXJpdHlHcm91cENoYW5nZXM7XG5cbiAgY29uc3RydWN0b3IoYXJnczogSVRlbXBsYXRlRGlmZikge1xuICAgIGlmIChhcmdzLmF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbiA9IGFyZ3MuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uO1xuICAgIH1cbiAgICBpZiAoYXJncy5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gYXJncy5kZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgaWYgKGFyZ3MudHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtID0gYXJncy50cmFuc2Zvcm07XG4gICAgfVxuXG4gICAgdGhpcy5jb25kaXRpb25zID0gYXJncy5jb25kaXRpb25zIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5tYXBwaW5ncyA9IGFyZ3MubWFwcGluZ3MgfHwgbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uKHt9KTtcbiAgICB0aGlzLm1ldGFkYXRhID0gYXJncy5tZXRhZGF0YSB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMub3V0cHV0cyA9IGFyZ3Mub3V0cHV0cyB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IGFyZ3MucGFyYW1ldGVycyB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMucmVzb3VyY2VzID0gYXJncy5yZXNvdXJjZXMgfHwgbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uKHt9KTtcbiAgICB0aGlzLnVua25vd24gPSBhcmdzLnVua25vd24gfHwgbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uKHt9KTtcblxuICAgIHRoaXMuaWFtQ2hhbmdlcyA9IG5ldyBJYW1DaGFuZ2VzKHtcbiAgICAgIHByb3BlcnR5Q2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUHJvcGVydHlDaGFuZ2VzKElhbUNoYW5nZXMuSWFtUHJvcGVydHlTY3J1dGluaWVzKSxcbiAgICAgIHJlc291cmNlQ2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUmVzb3VyY2VDaGFuZ2VzKElhbUNoYW5nZXMuSWFtUmVzb3VyY2VTY3J1dGluaWVzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuc2VjdXJpdHlHcm91cENoYW5nZXMgPSBuZXcgU2VjdXJpdHlHcm91cENoYW5nZXMoe1xuICAgICAgZWdyZXNzUnVsZVByb3BlcnR5Q2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUHJvcGVydHlDaGFuZ2VzKFtQcm9wZXJ0eVNjcnV0aW55VHlwZS5FZ3Jlc3NSdWxlc10pLFxuICAgICAgaW5ncmVzc1J1bGVQcm9wZXJ0eUNoYW5nZXM6IHRoaXMuc2NydXRpbml6YWJsZVByb3BlcnR5Q2hhbmdlcyhbUHJvcGVydHlTY3J1dGlueVR5cGUuSW5ncmVzc1J1bGVzXSksXG4gICAgICBlZ3Jlc3NSdWxlUmVzb3VyY2VDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVSZXNvdXJjZUNoYW5nZXMoW1Jlc291cmNlU2NydXRpbnlUeXBlLkVncmVzc1J1bGVSZXNvdXJjZV0pLFxuICAgICAgaW5ncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IHRoaXMuc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcyhbUmVzb3VyY2VTY3J1dGlueVR5cGUuSW5ncmVzc1J1bGVSZXNvdXJjZV0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBkaWZmZXJlbmNlQ291bnQoKSB7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGlmICh0aGlzLmF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG5cbiAgICBjb3VudCArPSB0aGlzLmNvbmRpdGlvbnMuZGlmZmVyZW5jZUNvdW50O1xuICAgIGNvdW50ICs9IHRoaXMubWFwcGluZ3MuZGlmZmVyZW5jZUNvdW50O1xuICAgIGNvdW50ICs9IHRoaXMubWV0YWRhdGEuZGlmZmVyZW5jZUNvdW50O1xuICAgIGNvdW50ICs9IHRoaXMub3V0cHV0cy5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5wYXJhbWV0ZXJzLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLnJlc291cmNlcy5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy51bmtub3duLmRpZmZlcmVuY2VDb3VudDtcblxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaWZmZXJlbmNlQ291bnQgPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRydWUgaWYgYW55IG9mIHRoZSBwZXJtaXNzaW9ucyBvYmplY3RzIGludm9sdmUgYSBicm9hZGVuaW5nIG9mIHBlcm1pc3Npb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBlcm1pc3Npb25zQnJvYWRlbmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlhbUNoYW5nZXMucGVybWlzc2lvbnNCcm9hZGVuZWQgfHwgdGhpcy5zZWN1cml0eUdyb3VwQ2hhbmdlcy5ydWxlc0FkZGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0cnVlIGlmIGFueSBvZiB0aGUgcGVybWlzc2lvbnMgb2JqZWN0cyBoYXZlIGNoYW5nZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnNBbnlDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlhbUNoYW5nZXMuaGFzQ2hhbmdlcyB8fCB0aGlzLnNlY3VyaXR5R3JvdXBDaGFuZ2VzLmhhc0NoYW5nZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCBwcm9wZXJ0eSBjaGFuZ2VzIG9mIGEgZ2l2ZW4gc2NydXRpbnkgdHlwZVxuICAgKlxuICAgKiBXZSBkb24ndCBqdXN0IGxvb2sgYXQgcHJvcGVydHkgdXBkYXRlczsgd2UgYWxzbyBsb29rIGF0IHJlc291cmNlIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIChpbiB3aGljaFxuICAgKiBjYXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXIgZGV0YWlsIG9uIHByb3BlcnR5IHZhbHVlcyksIGFuZCByZXNvdXJjZSB0eXBlIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIHNjcnV0aW5pemFibGVQcm9wZXJ0eUNoYW5nZXMoc2NydXRpbnlUeXBlczogUHJvcGVydHlTY3J1dGlueVR5cGVbXSk6IFByb3BlcnR5Q2hhbmdlW10ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxQcm9wZXJ0eUNoYW5nZT4oKTtcblxuICAgIGZvciAoY29uc3QgW3Jlc291cmNlTG9naWNhbElkLCByZXNvdXJjZUNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvdXJjZXMuY2hhbmdlcykpIHtcbiAgICAgIGlmIChyZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGVDaGFuZ2VkKSB7XG4gICAgICAgIC8vIHdlIGlnbm9yZSByZXNvdXJjZSB0eXBlIGNoYW5nZXMgaGVyZSwgYW5kIGhhbmRsZSB0aGVtIGluIHNjcnV0aW5pemFibGVSZXNvdXJjZUNoYW5nZXMoKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgLy8gV2UgdXNlIHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSB0byBsb2FkUmVzb3VyY2VNb2RlbCBzbyB0aGF0IHdlIGNhbiBpbnNwZWN0IHRoZVxuICAgICAgICAvLyBwcm9wZXJ0aWVzIG9mIGEgcmVzb3VyY2UgZXZlbiBhZnRlciB0aGUgcmVzb3VyY2UgaXMgcmVtb3ZlZCBmcm9tIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5ld1R5cGVQcm9wcyA9IGxvYWRSZXNvdXJjZU1vZGVsKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSk/LnByb3BlcnRpZXMgfHwge307XG4gICAgICBmb3IgKGNvbnN0IFtwcm9wZXJ0eU5hbWUsIHByb3BdIG9mIE9iamVjdC5lbnRyaWVzKG5ld1R5cGVQcm9wcykpIHtcbiAgICAgICAgY29uc3QgcHJvcFNjcnV0aW55VHlwZSA9IHByb3Auc2NydXRpbml6YWJsZSB8fCBQcm9wZXJ0eVNjcnV0aW55VHlwZS5Ob25lO1xuICAgICAgICBpZiAoc2NydXRpbnlUeXBlcy5pbmNsdWRlcyhwcm9wU2NydXRpbnlUeXBlKSkge1xuICAgICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAgIHJlc291cmNlTG9naWNhbElkLFxuICAgICAgICAgICAgcHJvcGVydHlOYW1lLFxuICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiByZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGUsXG4gICAgICAgICAgICBzY3J1dGlueVR5cGU6IHByb3BTY3J1dGlueVR5cGUsXG4gICAgICAgICAgICBvbGRWYWx1ZTogcmVzb3VyY2VDaGFuZ2Uub2xkUHJvcGVydGllcz8uW3Byb3BlcnR5TmFtZV0sXG4gICAgICAgICAgICBuZXdWYWx1ZTogcmVzb3VyY2VDaGFuZ2UubmV3UHJvcGVydGllcz8uW3Byb3BlcnR5TmFtZV0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgcmVzb3VyY2UgY2hhbmdlcyBvZiBhIGdpdmVuIHNjcnV0aW55IHR5cGVcbiAgICpcbiAgICogV2UgZG9uJ3QganVzdCBsb29rIGF0IHJlc291cmNlIHVwZGF0ZXM7IHdlIGFsc28gbG9vayBhdCByZXNvdXJjZSBhZGRpdGlvbnMgYW5kIGRlbGV0aW9ucyAoaW4gd2hpY2hcbiAgICogY2FzZSB0aGVyZSBpcyBubyBmdXJ0aGVyIGRldGFpbCBvbiBwcm9wZXJ0eSB2YWx1ZXMpLCBhbmQgcmVzb3VyY2UgdHlwZSBjaGFuZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBzY3J1dGluaXphYmxlUmVzb3VyY2VDaGFuZ2VzKHNjcnV0aW55VHlwZXM6IFJlc291cmNlU2NydXRpbnlUeXBlW10pOiBSZXNvdXJjZUNoYW5nZVtdIHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8UmVzb3VyY2VDaGFuZ2U+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtyZXNvdXJjZUxvZ2ljYWxJZCwgcmVzb3VyY2VDaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb3VyY2VzLmNoYW5nZXMpKSB7XG4gICAgICBpZiAoIXJlc291cmNlQ2hhbmdlKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGNvbnN0IGNvbW1vblByb3BzID0ge1xuICAgICAgICBvbGRQcm9wZXJ0aWVzOiByZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzLFxuICAgICAgICBuZXdQcm9wZXJ0aWVzOiByZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzLFxuICAgICAgICByZXNvdXJjZUxvZ2ljYWxJZCxcbiAgICAgIH07XG5cbiAgICAgIC8vIGNoYW5nZXMgdG8gdGhlIFR5cGUgb2YgcmVzb3VyY2VzIGNhbiBoYXBwZW4gd2hlbiBtaWdyYXRpbmcgZnJvbSBDRk4gdGVtcGxhdGVzIHRoYXQgdXNlIFRyYW5zZm9ybXNcbiAgICAgIGlmIChyZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGVDaGFuZ2VkKSB7XG4gICAgICAgIC8vIFRyZWF0IGFzIERFTEVURStBRERcbiAgICAgICAgaWYgKHJlc291cmNlQ2hhbmdlLm9sZFJlc291cmNlVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG9sZFJlc291cmNlTW9kZWwgPSBsb2FkUmVzb3VyY2VNb2RlbChyZXNvdXJjZUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUpO1xuICAgICAgICAgIGlmIChvbGRSZXNvdXJjZU1vZGVsICYmIHRoaXMucmVzb3VyY2VJc1NjcnV0aW5pemFibGUob2xkUmVzb3VyY2VNb2RlbCwgc2NydXRpbnlUeXBlcykpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uUHJvcHMsXG4gICAgICAgICAgICAgIG5ld1Byb3BlcnRpZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiByZXNvdXJjZUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUhLFxuICAgICAgICAgICAgICBzY3J1dGlueVR5cGU6IG9sZFJlc291cmNlTW9kZWwuc2NydXRpbml6YWJsZSEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzb3VyY2VDaGFuZ2UubmV3UmVzb3VyY2VUeXBlKSB7XG4gICAgICAgICAgY29uc3QgbmV3UmVzb3VyY2VNb2RlbCA9IGxvYWRSZXNvdXJjZU1vZGVsKHJlc291cmNlQ2hhbmdlLm5ld1Jlc291cmNlVHlwZSk7XG4gICAgICAgICAgaWYgKG5ld1Jlc291cmNlTW9kZWwgJiYgdGhpcy5yZXNvdXJjZUlzU2NydXRpbml6YWJsZShuZXdSZXNvdXJjZU1vZGVsLCBzY3J1dGlueVR5cGVzKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgICAuLi5jb21tb25Qcm9wcyxcbiAgICAgICAgICAgICAgb2xkUHJvcGVydGllczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlQ2hhbmdlLm5ld1Jlc291cmNlVHlwZSEsXG4gICAgICAgICAgICAgIHNjcnV0aW55VHlwZTogbmV3UmVzb3VyY2VNb2RlbC5zY3J1dGluaXphYmxlISxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VNb2RlbCA9IGxvYWRSZXNvdXJjZU1vZGVsKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSk7XG4gICAgICAgIGlmIChyZXNvdXJjZU1vZGVsICYmIHRoaXMucmVzb3VyY2VJc1NjcnV0aW5pemFibGUocmVzb3VyY2VNb2RlbCwgc2NydXRpbnlUeXBlcykpIHtcbiAgICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgICAuLi5jb21tb25Qcm9wcyxcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlLFxuICAgICAgICAgICAgc2NydXRpbnlUeXBlOiByZXNvdXJjZU1vZGVsLnNjcnV0aW5pemFibGUhLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb3VyY2VJc1NjcnV0aW5pemFibGUocmVzOiBSZXNvdXJjZU1vZGVsLCBzY3J1dGlueVR5cGVzOiBBcnJheTxSZXNvdXJjZVNjcnV0aW55VHlwZT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2NydXRpbnlUeXBlcy5pbmNsdWRlcyhyZXMuc2NydXRpbml6YWJsZSB8fCBSZXNvdXJjZVNjcnV0aW55VHlwZS5Ob25lKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgY2hhbmdlIGluIHByb3BlcnR5IHZhbHVlc1xuICpcbiAqIE5vdCBuZWNlc3NhcmlseSBhbiB1cGRhdGUsIGl0IGNvdWxkIGJlIHRoYXQgdGhlcmUgdXNlZCB0byBiZSBubyB2YWx1ZSB0aGVyZVxuICogYmVjYXVzZSB0aGVyZSB3YXMgbm8gcmVzb3VyY2UsIGFuZCBub3cgdGhlcmUgaXMgKG9yIHZpY2UgdmVyc2EpLlxuICpcbiAqIFRoZXJlZm9yZSwgd2UganVzdCBjb250YWluIHBsYWluIHZhbHVlcyBhbmQgbm90IGEgUHJvcGVydHlEaWZmZXJlbmNlPGFueT4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlDaGFuZ2Uge1xuICAvKipcbiAgICogTG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2Ugd2hlcmUgdGhpcyBwcm9wZXJ0eSBjaGFuZ2Ugd2FzIGZvdW5kXG4gICAqL1xuICByZXNvdXJjZUxvZ2ljYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjcnV0aW55IHR5cGUgZm9yIHRoaXMgcHJvcGVydHkgY2hhbmdlXG4gICAqL1xuICBzY3J1dGlueVR5cGU6IFByb3BlcnR5U2NydXRpbnlUeXBlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGlzIGNoYW5naW5nXG4gICAqL1xuICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwcm9wZXJ0eSB2YWx1ZVxuICAgKi9cbiAgb2xkVmFsdWU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcHJvcGVydHkgdmFsdWVcbiAgICovXG4gIG5ld1ZhbHVlPzogYW55O1xufVxuXG4vKipcbiAqIEEgcmVzb3VyY2UgY2hhbmdlXG4gKlxuICogRWl0aGVyIGEgY3JlYXRpb24sIGRlbGV0aW9uIG9yIHVwZGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBMb2dpY2FsIElEIG9mIHRoZSByZXNvdXJjZSB3aGVyZSB0aGlzIHByb3BlcnR5IGNoYW5nZSB3YXMgZm91bmRcbiAgICovXG4gIHJlc291cmNlTG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjcnV0aW55IHR5cGUgZm9yIHRoaXMgcmVzb3VyY2UgY2hhbmdlXG4gICAqL1xuICBzY3J1dGlueVR5cGU6IFJlc291cmNlU2NydXRpbnlUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHByb3BlcnRpZXMgdmFsdWUgKG1pZ2h0IGJlIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGNyZWF0aW9uKVxuICAgKi9cbiAgb2xkUHJvcGVydGllcz86IFByb3BlcnR5TWFwO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHByb3BlcnRpZXMgdmFsdWUgKG1pZ2h0IGJlIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGRlbGV0aW9uKVxuICAgKi9cbiAgbmV3UHJvcGVydGllcz86IFByb3BlcnR5TWFwO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEaWZmZXJlbmNlPFZhbHVlVHlwZT4ge1xuICByZWFkb25seSBvbGRWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBuZXdWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBpc0RpZmZlcmVudDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNBZGRpdGlvbjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNSZW1vdmFsOiBib29sZWFuO1xuICByZWFkb25seSBpc1VwZGF0ZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZW50aXR5IHRoYXQgY2hhbmdlZCBiZXR3ZWVuIHR3byB2ZXJzaW9ucyBvZiBhIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlLlxuICovXG5leHBvcnQgY2xhc3MgRGlmZmVyZW5jZTxWYWx1ZVR5cGU+IGltcGxlbWVudHMgSURpZmZlcmVuY2U8VmFsdWVUeXBlPiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYW4gYWN0dWFsIGRpZmZlcmVudCBvciB0aGUgdmFsdWVzIGFyZSBhY3R1YWxseSB0aGUgc2FtZVxuICAgKlxuICAgKiBpc0RpZmZlcmVudCA9PiAoaXNVcGRhdGUgfCBpc1JlbW92ZWQgfCBpc1VwZGF0ZSlcbiAgICovXG4gIHB1YmxpYyBpc0RpZmZlcmVudDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIG9sZFZhbHVlIHRoZSBvbGQgdmFsdWUsIGNhbm5vdCBiZSBlcXVhbCAodG8gdGhlIHNlbnNlIG9mICtkZWVwRXF1YWwrKSB0byArbmV3VmFsdWUrLlxuICAgKiBAcGFyYW0gbmV3VmFsdWUgdGhlIG5ldyB2YWx1ZSwgY2Fubm90IGJlIGVxdWFsICh0byB0aGUgc2Vuc2Ugb2YgK2RlZXBFcXVhbCspIHRvICtvbGRWYWx1ZSsuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgb2xkVmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCwgcHVibGljIHJlYWRvbmx5IG5ld1ZhbHVlOiBWYWx1ZVR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAob2xkVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoeyBtZXNzYWdlOiAnb2xkVmFsdWUgYW5kIG5ld1ZhbHVlIGFyZSBib3RoIHVuZGVmaW5lZCEnIH0pO1xuICAgIH1cbiAgICB0aGlzLmlzRGlmZmVyZW50ID0gIWRlZXBFcXVhbChvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zICt0cnVlKyBpZiB0aGUgZWxlbWVudCBpcyBuZXcgdG8gdGhlIHRlbXBsYXRlLiAqL1xuICBwdWJsaWMgZ2V0IGlzQWRkaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub2xkVmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyArdHJ1ZSsgaWYgdGhlIGVsZW1lbnQgd2FzIHJlbW92ZWQgZnJvbSB0aGUgdGVtcGxhdGUuICovXG4gIHB1YmxpYyBnZXQgaXNSZW1vdmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5ld1ZhbHVlID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQHJldHVybnMgK3RydWUrIGlmIHRoZSBlbGVtZW50IHdhcyBhbHJlYWR5IGluIHRoZSB0ZW1wbGF0ZSBhbmQgaXMgdXBkYXRlZC4gKi9cbiAgcHVibGljIGdldCBpc1VwZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vbGRWYWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAmJiB0aGlzLm5ld1ZhbHVlICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb3BlcnR5RGlmZmVyZW5jZTxWYWx1ZVR5cGU+IGV4dGVuZHMgRGlmZmVyZW5jZTxWYWx1ZVR5cGU+IHtcbiAgcHVibGljIGNoYW5nZUltcGFjdD86IFJlc291cmNlSW1wYWN0O1xuXG4gIGNvbnN0cnVjdG9yKG9sZFZhbHVlOiBWYWx1ZVR5cGUgfCB1bmRlZmluZWQsIG5ld1ZhbHVlOiBWYWx1ZVR5cGUgfCB1bmRlZmluZWQsIGFyZ3M6IHsgY2hhbmdlSW1wYWN0PzogUmVzb3VyY2VJbXBhY3QgfSkge1xuICAgIHN1cGVyKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gICAgdGhpcy5jaGFuZ2VJbXBhY3QgPSBhcmdzLmNoYW5nZUltcGFjdDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGlmZmVyZW5jZUNvbGxlY3Rpb248ViwgVCBleHRlbmRzIElEaWZmZXJlbmNlPFY+PiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlmZnM6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogVCB9KSB7fVxuXG4gIHB1YmxpYyBnZXQgY2hhbmdlcygpOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IFQgfSB7XG4gICAgcmV0dXJuIG9ubHlDaGFuZ2VzKHRoaXMuZGlmZnMpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaWZmZXJlbmNlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNoYW5nZXMpLmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQobG9naWNhbElkOiBzdHJpbmcpOiBUIHtcbiAgICBjb25zdCByZXQgPSB0aGlzLmRpZmZzW2xvZ2ljYWxJZF07XG4gICAgaWYgKCFyZXQpIHsgdGhyb3cgbmV3IEVycm9yKGBObyBvYmplY3Qgd2l0aCBsb2dpY2FsIElEICcke2xvZ2ljYWxJZH0nYCk7IH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHJlbW92ZShsb2dpY2FsSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLmRpZmZzW2xvZ2ljYWxJZF07XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvZ2ljYWxJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoYW5nZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgVGVtcGxhdGVEaWZmIHdoaWNoIG9ubHkgY29udGFpbnMgY2hhbmdlcyBmb3Igd2hpY2ggYHByZWRpY2F0ZWBcbiAgICogcmV0dXJucyBgdHJ1ZWAuXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyKHByZWRpY2F0ZTogKGRpZmY6IFQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW4pOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUPiB7XG4gICAgY29uc3QgbmV3Q2hhbmdlczogeyBbbG9naWNhbElkOiBzdHJpbmddOiBUIH0gPSB7IH07XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyh0aGlzLmNoYW5nZXMpKSB7XG4gICAgICBjb25zdCBkaWZmID0gdGhpcy5jaGFuZ2VzW2lkXTtcblxuICAgICAgaWYgKHByZWRpY2F0ZShkaWZmKSkge1xuICAgICAgICBuZXdDaGFuZ2VzW2lkXSA9IGRpZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUPihuZXdDaGFuZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGBjYmAgZm9yIGFsbCBjaGFuZ2VzIGluIHRoaXMgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQ2hhbmdlcyB3aWxsIGJlIHNvcnRlZCBhcyBmb2xsb3dzOlxuICAgKiAgLSBSZW1vdmVkXG4gICAqICAtIEFkZGVkXG4gICAqICAtIFVwZGF0ZWRcbiAgICogIC0gT3RoZXJzXG4gICAqXG4gICAqIEBwYXJhbSBjYlxuICAgKi9cbiAgcHVibGljIGZvckVhY2hEaWZmZXJlbmNlKGNiOiAobG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogVCkgPT4gYW55KTogdm9pZCB7XG4gICAgY29uc3QgcmVtb3ZlZCA9IG5ldyBBcnJheTx7IGxvZ2ljYWxJZDogc3RyaW5nOyBjaGFuZ2U6IFQgfT4oKTtcbiAgICBjb25zdCBhZGRlZCA9IG5ldyBBcnJheTx7IGxvZ2ljYWxJZDogc3RyaW5nOyBjaGFuZ2U6IFQgfT4oKTtcbiAgICBjb25zdCB1cGRhdGVkID0gbmV3IEFycmF5PHsgbG9naWNhbElkOiBzdHJpbmc7IGNoYW5nZTogVCB9PigpO1xuICAgIGNvbnN0IG90aGVycyA9IG5ldyBBcnJheTx7IGxvZ2ljYWxJZDogc3RyaW5nOyBjaGFuZ2U6IFQgfT4oKTtcblxuICAgIGZvciAoY29uc3QgbG9naWNhbElkIG9mIHRoaXMubG9naWNhbElkcykge1xuICAgICAgY29uc3QgY2hhbmdlOiBUID0gdGhpcy5jaGFuZ2VzW2xvZ2ljYWxJZF0hO1xuICAgICAgaWYgKGNoYW5nZS5pc0FkZGl0aW9uKSB7XG4gICAgICAgIGFkZGVkLnB1c2goeyBsb2dpY2FsSWQsIGNoYW5nZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLmlzUmVtb3ZhbCkge1xuICAgICAgICByZW1vdmVkLnB1c2goeyBsb2dpY2FsSWQsIGNoYW5nZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLmlzVXBkYXRlKSB7XG4gICAgICAgIHVwZGF0ZWQucHVzaCh7IGxvZ2ljYWxJZCwgY2hhbmdlIH0pO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UuaXNEaWZmZXJlbnQpIHtcbiAgICAgICAgb3RoZXJzLnB1c2goeyBsb2dpY2FsSWQsIGNoYW5nZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVkLmZvckVhY2godiA9PiBjYih2LmxvZ2ljYWxJZCwgdi5jaGFuZ2UpKTtcbiAgICBhZGRlZC5mb3JFYWNoKHYgPT4gY2Iodi5sb2dpY2FsSWQsIHYuY2hhbmdlKSk7XG4gICAgdXBkYXRlZC5mb3JFYWNoKHYgPT4gY2Iodi5sb2dpY2FsSWQsIHYuY2hhbmdlKSk7XG4gICAgb3RoZXJzLmZvckVhY2godiA9PiBjYih2LmxvZ2ljYWxJZCwgdi5jaGFuZ2UpKTtcbiAgfVxufVxuXG4vKipcbiAqIEFyZ3VtZW50cyBleHBlY3RlZCBieSB0aGUgY29uc3RydWN0b3Igb2YgK1RlbXBsYXRlRGlmZissIGV4dHJhY3RlZCBhcyBhbiBpbnRlcmZhY2UgZm9yIHRoZSBzYWtlXG4gKiBvZiAocmVsYXRpdmUpIGNvbmNpc2VuZXNzIG9mIHRoZSBjb25zdHJ1Y3RvcidzIHNpZ25hdHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJVGVtcGxhdGVEaWZmIHtcbiAgYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uPzogSURpZmZlcmVuY2U8c3RyaW5nPjtcbiAgZGVzY3JpcHRpb24/OiBJRGlmZmVyZW5jZTxzdHJpbmc+O1xuICB0cmFuc2Zvcm0/OiBJRGlmZmVyZW5jZTxzdHJpbmc+O1xuXG4gIGNvbmRpdGlvbnM/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxDb25kaXRpb24sIENvbmRpdGlvbkRpZmZlcmVuY2U+O1xuICBtYXBwaW5ncz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPE1hcHBpbmcsIE1hcHBpbmdEaWZmZXJlbmNlPjtcbiAgbWV0YWRhdGE/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxNZXRhZGF0YSwgTWV0YWRhdGFEaWZmZXJlbmNlPjtcbiAgb3V0cHV0cz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPE91dHB1dCwgT3V0cHV0RGlmZmVyZW5jZT47XG4gIHBhcmFtZXRlcnM/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxQYXJhbWV0ZXIsIFBhcmFtZXRlckRpZmZlcmVuY2U+O1xuICByZXNvdXJjZXM/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxSZXNvdXJjZSwgUmVzb3VyY2VEaWZmZXJlbmNlPjtcblxuICB1bmtub3duPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248YW55LCBJRGlmZmVyZW5jZTxhbnk+Pjtcbn1cblxuZXhwb3J0IHR5cGUgQ29uZGl0aW9uID0gYW55O1xuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkRpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPENvbmRpdGlvbj4ge1xuICAvLyBUT0RPOiBkZWZpbmUgc3BlY2lmaWMgZGlmZmVyZW5jZSBhdHRyaWJ1dGVzXG59XG5cbmV4cG9ydCB0eXBlIE1hcHBpbmcgPSBhbnk7XG5leHBvcnQgY2xhc3MgTWFwcGluZ0RpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPE1hcHBpbmc+IHtcbiAgLy8gVE9ETzogZGVmaW5lIHNwZWNpZmljIGRpZmZlcmVuY2UgYXR0cmlidXRlc1xufVxuXG5leHBvcnQgdHlwZSBNZXRhZGF0YSA9IGFueTtcbmV4cG9ydCBjbGFzcyBNZXRhZGF0YURpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPE1ldGFkYXRhPiB7XG4gIC8vIFRPRE86IGRlZmluZSBzcGVjaWZpYyBkaWZmZXJlbmNlIGF0dHJpYnV0ZXNcbn1cblxuZXhwb3J0IHR5cGUgT3V0cHV0ID0gYW55O1xuZXhwb3J0IGNsYXNzIE91dHB1dERpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPE91dHB1dD4ge1xuICAvLyBUT0RPOiBkZWZpbmUgc3BlY2lmaWMgZGlmZmVyZW5jZSBhdHRyaWJ1dGVzXG59XG5cbmV4cG9ydCB0eXBlIFBhcmFtZXRlciA9IGFueTtcbmV4cG9ydCBjbGFzcyBQYXJhbWV0ZXJEaWZmZXJlbmNlIGV4dGVuZHMgRGlmZmVyZW5jZTxQYXJhbWV0ZXI+IHtcbiAgLy8gVE9ETzogZGVmaW5lIHNwZWNpZmljIGRpZmZlcmVuY2UgYXR0cmlidXRlc1xufVxuXG5leHBvcnQgZW51bSBSZXNvdXJjZUltcGFjdCB7XG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSB1cGRhdGVkICovXG4gIFdJTExfVVBEQVRFID0gJ1dJTExfVVBEQVRFJyxcbiAgLyoqIEEgbmV3IHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgY3JlYXRlZCAqL1xuICBXSUxMX0NSRUFURSA9ICdXSUxMX0NSRUFURScsXG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSByZXBsYWNlZCAqL1xuICBXSUxMX1JFUExBQ0UgPSAnV0lMTF9SRVBMQUNFJyxcbiAgLyoqIFRoZSBleGlzdGluZyBwaHlzaWNhbCByZXNvdXJjZSBtYXkgYmUgcmVwbGFjZWQgKi9cbiAgTUFZX1JFUExBQ0UgPSAnTUFZX1JFUExBQ0UnLFxuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgZGVzdHJveWVkICovXG4gIFdJTExfREVTVFJPWSA9ICdXSUxMX0RFU1RST1knLFxuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIENsb3VkRm9ybWF0aW9uIHN1cGVydmlzaW9uICovXG4gIFdJTExfT1JQSEFOID0gJ1dJTExfT1JQSEFOJyxcbiAgLyoqIFRoZSBleGlzdGluZyBwaHlzaWNhbCByZXNvdXJjZSB3aWxsIGJlIGFkZGVkIHRvIENsb3VkRm9ybWF0aW9uIHN1cGVydmlzaW9uICovXG4gIFdJTExfSU1QT1JUID0gJ1dJTExfSU1QT1JUJyxcbiAgLyoqIFRoZXJlIGlzIG5vIGNoYW5nZSBpbiB0aGlzIHJlc291cmNlICovXG4gIE5PX0NIQU5HRSA9ICdOT19DSEFOR0UnLFxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYXMgYSByZWR1Y2VyIHRvIG9idGFpbiB0aGUgcmVzb3VyY2UtbGV2ZWwgaW1wYWN0IG9mIGEgbGlzdFxuICogb2YgcHJvcGVydHktbGV2ZWwgaW1wYWN0cy5cbiAqIEBwYXJhbSBvbmUgdGhlIGN1cnJlbnQgd29yc3QgaW1wYWN0IHNvIGZhci5cbiAqIEBwYXJhbSB0d28gdGhlIG5ldyBpbXBhY3QgYmVpbmcgY29uc2lkZXJlZCAoY2FuIGJlIHVuZGVmaW5lZCwgYXMgd2UgbWF5IG5vdCBhbHdheXMgYmVcbiAqICAgICAgYWJsZSB0byBkZXRlcm1pbmUgc29tZSBwZXJvcGVydHkncyBpbXBhY3QpLlxuICovXG5mdW5jdGlvbiB3b3JzdEltcGFjdChvbmU6IFJlc291cmNlSW1wYWN0LCB0d28/OiBSZXNvdXJjZUltcGFjdCk6IFJlc291cmNlSW1wYWN0IHtcbiAgaWYgKCF0d28pIHsgcmV0dXJuIG9uZTsgfVxuICBjb25zdCBiYWRuZXNzID0ge1xuICAgIFtSZXNvdXJjZUltcGFjdC5OT19DSEFOR0VdOiAwLFxuICAgIFtSZXNvdXJjZUltcGFjdC5XSUxMX0lNUE9SVF06IDAsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfVVBEQVRFXTogMSxcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9DUkVBVEVdOiAyLFxuICAgIFtSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTl06IDMsXG4gICAgW1Jlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFXTogNCxcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFXTogNSxcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZXTogNixcbiAgfTtcbiAgcmV0dXJuIGJhZG5lc3Nbb25lXSA+IGJhZG5lc3NbdHdvXSA/IG9uZSA6IHR3bztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZSB7XG4gIFR5cGU6IHN0cmluZztcbiAgUHJvcGVydGllcz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuXG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBDaGFuZ2UgdG8gYSBzaW5nbGUgcmVzb3VyY2UgYmV0d2VlbiB0d28gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzXG4gKlxuICogVGhpcyBjbGFzcyBjYW4gYmUgbXV0YXRlZCBhZnRlciBjb25zdHJ1Y3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZURpZmZlcmVuY2UgaW1wbGVtZW50cyBJRGlmZmVyZW5jZTxSZXNvdXJjZT4ge1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJlc291cmNlIHdhcyBhZGRlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzQWRkaXRpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXNvdXJjZSB3YXMgcmVtb3ZlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzUmVtb3ZhbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJlc291cmNlIHdhcyBpbXBvcnRlZFxuICAgKi9cbiAgcHVibGljIGlzSW1wb3J0PzogYm9vbGVhbjtcblxuICAvKiogUHJvcGVydHktbGV2ZWwgY2hhbmdlcyBvbiB0aGUgcmVzb3VyY2UgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wZXJ0eURpZmZzOiB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+IH07XG5cbiAgLyoqIENoYW5nZXMgdG8gbm9uLXByb3BlcnR5IGxldmVsIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc291cmNlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgb3RoZXJEaWZmczogeyBba2V5OiBzdHJpbmddOiBEaWZmZXJlbmNlPGFueT4gfTtcblxuICAvKiogVGhlIHJlc291cmNlIHR5cGUgKG9yIG9sZCBhbmQgbmV3IHR5cGUgaWYgaXQgaGFzIGNoYW5nZWQpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VUeXBlczogeyByZWFkb25seSBvbGRUeXBlPzogc3RyaW5nOyByZWFkb25seSBuZXdUeXBlPzogc3RyaW5nIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IG9sZFZhbHVlOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmV3VmFsdWU6IFJlc291cmNlIHwgdW5kZWZpbmVkLFxuICAgIGFyZ3M6IHtcbiAgICAgIHJlc291cmNlVHlwZTogeyBvbGRUeXBlPzogc3RyaW5nOyBuZXdUeXBlPzogc3RyaW5nIH07XG4gICAgICBwcm9wZXJ0eURpZmZzOiB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+IH07XG4gICAgICBvdGhlckRpZmZzOiB7IFtrZXk6IHN0cmluZ106IERpZmZlcmVuY2U8YW55PiB9O1xuICAgIH0sXG4gICkge1xuICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IGFyZ3MucmVzb3VyY2VUeXBlO1xuICAgIHRoaXMucHJvcGVydHlEaWZmcyA9IGFyZ3MucHJvcGVydHlEaWZmcztcbiAgICB0aGlzLm90aGVyRGlmZnMgPSBhcmdzLm90aGVyRGlmZnM7XG5cbiAgICB0aGlzLmlzQWRkaXRpb24gPSBvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNSZW1vdmFsID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzSW1wb3J0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIGdldCBvbGRQcm9wZXJ0aWVzKCk6IFByb3BlcnR5TWFwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vbGRWYWx1ZSAmJiB0aGlzLm9sZFZhbHVlLlByb3BlcnRpZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5ld1Byb3BlcnRpZXMoKTogUHJvcGVydHlNYXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm5ld1ZhbHVlICYmIHRoaXMubmV3VmFsdWUuUHJvcGVydGllcztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcmVzb3VyY2Ugd2FzIG1vZGlmaWVkIGF0IGFsbFxuICAgKi9cbiAgcHVibGljIGdldCBpc0RpZmZlcmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaWZmZXJlbmNlQ291bnQgPiAwIHx8IHRoaXMub2xkUmVzb3VyY2VUeXBlICE9PSB0aGlzLm5ld1Jlc291cmNlVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSByZXNvdXJjZSB3YXMgdXBkYXRlZCBpbi1wbGFjZVxuICAgKi9cbiAgcHVibGljIGdldCBpc1VwZGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0RpZmZlcmVudCAmJiAhdGhpcy5pc0FkZGl0aW9uICYmICF0aGlzLmlzUmVtb3ZhbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb2xkUmVzb3VyY2VUeXBlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlO1xuICB9XG5cbiAgcHVibGljIGdldCBuZXdSZXNvdXJjZVR5cGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVR5cGVzLm5ld1R5cGU7XG4gIH1cblxuICAvKipcbiAgICogQWxsIGFjdHVhbCBwcm9wZXJ0eSB1cGRhdGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByb3BlcnR5VXBkYXRlcygpOiB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+IH0ge1xuICAgIHJldHVybiBvbmx5Q2hhbmdlcyh0aGlzLnByb3BlcnR5RGlmZnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBhY3R1YWwgXCJvdGhlclwiIHVwZGF0ZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgb3RoZXJDaGFuZ2VzKCk6IHsgW2tleTogc3RyaW5nXTogRGlmZmVyZW5jZTxhbnk+IH0ge1xuICAgIHJldHVybiBvbmx5Q2hhbmdlcyh0aGlzLm90aGVyRGlmZnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSByZXNvdXJjZSB0eXBlIHdhcyBjaGFuZ2VkIGluIHRoaXMgZGlmZlxuICAgKlxuICAgKiBUaGlzIGlzIG5vdCBhIHZhbGlkIG9wZXJhdGlvbiBpbiBDbG91ZEZvcm1hdGlvbiBidXQgdG8gYmUgZGVmZW5zaXZlIHdlJ3JlIGdvaW5nXG4gICAqIHRvIGJlIGF3YXJlIG9mIGl0IGFueXdheS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VUeXBlQ2hhbmdlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgdGhpcy5yZXNvdXJjZVR5cGVzLm5ld1R5cGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAmJiB0aGlzLnJlc291cmNlVHlwZXMub2xkVHlwZSAhPT0gdGhpcy5yZXNvdXJjZVR5cGVzLm5ld1R5cGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcmVzb3VyY2UgdHlwZSBpZiBpdCB3YXMgdW5jaGFuZ2VkXG4gICAqXG4gICAqIElmIHRoZSByZXNvdXJjZSB0eXBlIHdhcyBjaGFuZ2VkLCBpdCdzIGFuIGVycm9yIHRvIGNhbGwgdGhpcy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlQ2hhbmdlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IC5yZXNvdXJjZVR5cGUsIGJlY2F1c2UgdGhlIHR5cGUgd2FzIGNoYW5nZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlIHx8IHRoaXMucmVzb3VyY2VUeXBlcy5uZXdUeXBlITtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgUHJvcGVydHlDaGFuZ2UgaW4gdGhpcyBvYmplY3RcbiAgICpcbiAgICogVGhpcyBhZmZlY3RzIHRoZSBwcm9wZXJ0eSBkaWZmIGFzIGl0IGlzIHN1bW1hcml6ZWQgdG8gdXNlcnMsIGJ1dCBpdCBET0VTXG4gICAqIE5PVCBhZmZlY3QgZWl0aGVyIHRoZSBcIm9sZFZhbHVlXCIgb3IgXCJuZXdWYWx1ZVwiIHZhbHVlczsgdGhvc2Ugc3RpbGwgY29udGFpblxuICAgKiB0aGUgYWN0dWFsIHRlbXBsYXRlIHZhbHVlcyBhcyBwcm92aWRlZCBieSB0aGUgdXNlciAodGhleSBtaWdodCBzdGlsbCBiZVxuICAgKiB1c2VkIGZvciBkb3duc3RyZWFtIHByb2Nlc3NpbmcpLlxuICAgKi9cbiAgcHVibGljIHNldFByb3BlcnR5Q2hhbmdlKHByb3BlcnR5TmFtZTogc3RyaW5nLCBjaGFuZ2U6IFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+KSB7XG4gICAgdGhpcy5wcm9wZXJ0eURpZmZzW3Byb3BlcnR5TmFtZV0gPSBjaGFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIE90aGVyQ2hhbmdlIGluIHRoaXMgb2JqZWN0XG4gICAqXG4gICAqIFRoaXMgYWZmZWN0cyB0aGUgcHJvcGVydHkgZGlmZiBhcyBpdCBpcyBzdW1tYXJpemVkIHRvIHVzZXJzLCBidXQgaXQgRE9FU1xuICAgKiBOT1QgYWZmZWN0IGVpdGhlciB0aGUgXCJvbGRWYWx1ZVwiIG9yIFwibmV3VmFsdWVcIiB2YWx1ZXM7IHRob3NlIHN0aWxsIGNvbnRhaW5cbiAgICogdGhlIGFjdHVhbCB0ZW1wbGF0ZSB2YWx1ZXMgYXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgKHRoZXkgbWlnaHQgc3RpbGwgYmVcbiAgICogdXNlZCBmb3IgZG93bnN0cmVhbSBwcm9jZXNzaW5nKS5cbiAgICovXG4gIHB1YmxpYyBzZXRPdGhlckNoYW5nZShvdGhlck5hbWU6IHN0cmluZywgY2hhbmdlOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55Pikge1xuICAgIHRoaXMub3RoZXJEaWZmc1tvdGhlck5hbWVdID0gY2hhbmdlO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGFuZ2VJbXBhY3QoKTogUmVzb3VyY2VJbXBhY3Qge1xuICAgIGlmICh0aGlzLmlzSW1wb3J0KSB7XG4gICAgICByZXR1cm4gUmVzb3VyY2VJbXBhY3QuV0lMTF9JTVBPUlQ7XG4gICAgfVxuICAgIC8vIENoZWNrIHRoZSBUeXBlIGZpcnN0XG4gICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlICE9PSB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSkge1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIFJlc291cmNlSW1wYWN0LldJTExfQ1JFQVRFOyB9XG4gICAgICBpZiAodGhpcy5yZXNvdXJjZVR5cGVzLm5ld1R5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vbGRWYWx1ZSEuRGVsZXRpb25Qb2xpY3kgPT09ICdSZXRhaW4nXG4gICAgICAgICAgPyBSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTlxuICAgICAgICAgIDogUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRTtcbiAgICB9XG5cbiAgICAvLyBCYXNlIGltcGFjdCAoYmVmb3JlIHdlIG1peCBpbiB0aGUgd29yc3Qgb2YgdGhlIHByb3BlcnR5IGltcGFjdHMpO1xuICAgIC8vIFdJTExfVVBEQVRFIGlmIHdlIGhhdmUgXCJvdGhlclwiIGNoYW5nZXMsIE5PX0NIQU5HRSBpZiB0aGVyZSBhcmUgbm8gXCJvdGhlclwiIGNoYW5nZXMuXG4gICAgY29uc3QgYmFzZUltcGFjdCA9IE9iamVjdC5rZXlzKHRoaXMub3RoZXJDaGFuZ2VzKS5sZW5ndGggPiAwID8gUmVzb3VyY2VJbXBhY3QuV0lMTF9VUERBVEUgOiBSZXNvdXJjZUltcGFjdC5OT19DSEFOR0U7XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnByb3BlcnR5RGlmZnMpXG4gICAgICAubWFwKGVsdCA9PiBlbHQuY2hhbmdlSW1wYWN0KVxuICAgICAgLnJlZHVjZSh3b3JzdEltcGFjdCwgYmFzZUltcGFjdCk7XG4gIH1cblxuICAvKipcbiAgICogQ291bnQgb2YgYWN0dWFsIGRpZmZlcmVuY2VzIChub3Qgb2YgZWxlbWVudHMpXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRpZmZlcmVuY2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucHJvcGVydHlVcGRhdGVzKS5sZW5ndGhcbiAgICAgICsgT2JqZWN0LnZhbHVlcyh0aGlzLm90aGVyQ2hhbmdlcykubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZSBhIGNhbGxiYWNrIGZvciBlYWNoIGFjdHVhbCBkaWZmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgZm9yRWFjaERpZmZlcmVuY2UoY2I6ICh0eXBlOiAnUHJvcGVydHknIHwgJ090aGVyJywgbmFtZTogc3RyaW5nLCB2YWx1ZTogRGlmZmVyZW5jZTxhbnk+IHwgUHJvcGVydHlEaWZmZXJlbmNlPGFueT4pID0+IGFueSkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMucHJvcGVydHlVcGRhdGVzKS5zb3J0KCkpIHtcbiAgICAgIGNiKCdQcm9wZXJ0eScsIGtleSwgdGhpcy5wcm9wZXJ0eVVwZGF0ZXNba2V5XSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMub3RoZXJDaGFuZ2VzKS5zb3J0KCkpIHtcbiAgICAgIGNiKCdPdGhlcicsIGtleSwgdGhpcy5vdGhlckRpZmZzW2tleV0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQcm9wZXJ0eURpZmZlcmVuY2U8VD4oZGlmZjogRGlmZmVyZW5jZTxUPik6IGRpZmYgaXMgUHJvcGVydHlEaWZmZXJlbmNlPFQ+IHtcbiAgcmV0dXJuIChkaWZmIGFzIFByb3BlcnR5RGlmZmVyZW5jZTxUPikuY2hhbmdlSW1wYWN0ICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRmlsdGVyIGEgbWFwIG9mIElEaWZmZXJlbmNlcyBkb3duIHRvIG9ubHkgcmV0YWluIHRoZSBhY3R1YWwgY2hhbmdlc1xuICovXG5mdW5jdGlvbiBvbmx5Q2hhbmdlczxWLCBUIGV4dGVuZHMgSURpZmZlcmVuY2U8Vj4+KHhzOiB7W2tleTogc3RyaW5nXTogVH0pOiB7W2tleTogc3RyaW5nXTogVH0ge1xuICBjb25zdCByZXQ6IHsgW2tleTogc3RyaW5nXTogVCB9ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgZGlmZl0gb2YgT2JqZWN0LmVudHJpZXMoeHMpKSB7XG4gICAgaWYgKGRpZmYuaXNEaWZmZXJlbnQpIHtcbiAgICAgIHJldFtrZXldID0gZGlmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
|
package/lib/format.js
CHANGED
|
@@ -349,6 +349,18 @@ class Formatter {
|
|
|
349
349
|
this.printSectionHeader('IAM Policy Changes');
|
|
350
350
|
this.print((0, format_table_1.formatTable)(this.deepSubstituteBracedLogicalIds(changes.summarizeManagedPolicies()), this.stream.columns));
|
|
351
351
|
}
|
|
352
|
+
if (changes.ssoPermissionSets.hasChanges || changes.ssoInstanceACAConfigs.hasChanges || changes.ssoAssignments.hasChanges) {
|
|
353
|
+
this.printSectionHeader('IAM Identity Center Changes');
|
|
354
|
+
if (changes.ssoPermissionSets.hasChanges) {
|
|
355
|
+
this.print((0, format_table_1.formatTable)(this.deepSubstituteBracedLogicalIds(changes.summarizeSsoPermissionSets()), this.stream.columns));
|
|
356
|
+
}
|
|
357
|
+
if (changes.ssoInstanceACAConfigs.hasChanges) {
|
|
358
|
+
this.print((0, format_table_1.formatTable)(this.deepSubstituteBracedLogicalIds(changes.summarizeSsoInstanceACAConfigs()), this.stream.columns));
|
|
359
|
+
}
|
|
360
|
+
if (changes.ssoAssignments.hasChanges) {
|
|
361
|
+
this.print((0, format_table_1.formatTable)(this.deepSubstituteBracedLogicalIds(changes.summarizeSsoAssignments()), this.stream.columns));
|
|
362
|
+
}
|
|
363
|
+
}
|
|
352
364
|
}
|
|
353
365
|
formatSecurityGroupChanges(changes) {
|
|
354
366
|
if (!changes.hasChanges) {
|
|
@@ -420,4 +432,4 @@ function _diffStrings(oldStr, newStr, context) {
|
|
|
420
432
|
return indent;
|
|
421
433
|
}
|
|
422
434
|
}
|
|
423
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUE4QjtBQUM5QiwrQkFBK0I7QUFFL0Isc0NBQXdDO0FBQ3hDLG1EQUF1RztBQUN2RyxpREFBNkM7QUFJN0MsY0FBYztBQUNkLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBRXpDLDBEQUEwRDtBQUMxRCxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBTzVDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLE1BQW9CLEVBQ3BCLFlBQTBCLEVBQzFCLG1CQUFvRCxFQUFFLEVBQ3RELFVBQWtCLENBQUM7SUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVqRixJQUFJLFlBQVksQ0FBQyx3QkFBd0IsSUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzFILFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkYsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELCtCQUErQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUV6RCxTQUFTLENBQUMs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RSxDQUFDO1lBQ3pCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7b0JBQ3pDLE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IERpZmZlcmVuY2VDb2xsZWN0aW9uLCBUZW1wbGF0ZURpZmYgfSBmcm9tICcuL2RpZmYvdHlwZXMnO1xuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi9kaWZmL3V0aWwnO1xuaW1wb3J0IHsgRGlmZmVyZW5jZSwgaXNQcm9wZXJ0eURpZmZlcmVuY2UsIFJlc291cmNlRGlmZmVyZW5jZSwgUmVzb3VyY2VJbXBhY3QgfSBmcm9tICcuL2RpZmYtdGVtcGxhdGUnO1xuaW1wb3J0IHsgZm9ybWF0VGFibGUgfSBmcm9tICcuL2Zvcm1hdC10YWJsZSc7XG5pbXBvcnQgeyBJYW1DaGFuZ2VzIH0gZnJvbSAnLi9pYW0vaWFtLWNoYW5nZXMnO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cENoYW5nZXMgfSBmcm9tICcuL25ldHdvcmsvc2VjdXJpdHktZ3JvdXAtY2hhbmdlcyc7XG5cbi8vIGZyb20gY3gtYXBpXG5jb25zdCBQQVRIX01FVEFEQVRBX0tFWSA9ICdhd3M6Y2RrOnBhdGgnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5jb25zdCB7IHN0cnVjdHVyZWRQYXRjaCB9ID0gcmVxdWlyZSgnZGlmZicpO1xuLyogZXNsaW50LWVuYWJsZSAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1hdFN0cmVhbSBleHRlbmRzIE5vZGVKUy5Xcml0YWJsZVN0cmVhbSB7XG4gIGNvbHVtbnM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVuZGVycyB0ZW1wbGF0ZSBkaWZmZXJlbmNlcyB0byB0aGUgcHJvY2VzcycgY29uc29sZS5cbiAqXG4gKiBAcGFyYW0gc3RyZWFtICAgICAgICAgICBUaGUgSU8gc3RyZWFtIHdoZXJlIHRvIG91dHB1dCB0aGUgcmVuZGVyZWQgZGlmZi5cbiAqIEBwYXJhbSB0ZW1wbGF0ZURpZmYgICAgIFRlbXBsYXRlRGlmZiB0byBiZSByZW5kZXJlZCB0byB0aGUgY29uc29sZS5cbiAqIEBwYXJhbSBsb2dpY2FsVG9QYXRoTWFwIEEgbWFwIGZyb20gbG9naWNhbCBJRCB0byBjb25zdHJ1Y3QgcGF0aC4gVXNlZnVsIGluXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHRoZXJlIGlzIG5vIGF3czpjZGs6cGF0aCBtZXRhZGF0YSBpbiB0aGUgdGVtcGxhdGUuXG4gKiBAcGFyYW0gY29udGV4dCAgICAgICAgICB0aGUgbnVtYmVyIG9mIGNvbnRleHQgbGluZXMgdG8gdXNlIGluIGFyYml0cmFyeSBKU09OIGRpZmYgKGRlZmF1bHRzIHRvIDMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGlmZmVyZW5jZXMoXG4gIHN0cmVhbTogRm9ybWF0U3RyZWFtLFxuICB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZixcbiAgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICBjb250ZXh0OiBudW1iZXIgPSAzKSB7XG4gIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoc3RyZWFtLCBsb2dpY2FsVG9QYXRoTWFwLCB0ZW1wbGF0ZURpZmYsIGNvbnRleHQpO1xuXG4gIGlmICh0ZW1wbGF0ZURpZmYuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uIHx8IHRlbXBsYXRlRGlmZi50cmFuc2Zvcm0gfHwgdGVtcGxhdGVEaWZmLmRlc2NyaXB0aW9uKSB7XG4gICAgZm9ybWF0dGVyLnByaW50U2VjdGlvbkhlYWRlcignVGVtcGxhdGUnKTtcbiAgICBmb3JtYXR0ZXIuZm9ybWF0RGlmZmVyZW5jZSgnQVdTVGVtcGxhdGVGb3JtYXRWZXJzaW9uJywgJ0FXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbicsIHRlbXBsYXRlRGlmZi5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24pO1xuICAgIGZvcm1hdHRlci5mb3JtYXREaWZmZXJlbmNlKCdUcmFuc2Zvcm0nLCAnVHJhbnNmb3JtJywgdGVtcGxhdGVEaWZmLnRyYW5zZm9ybSk7XG4gICAgZm9ybWF0dGVyLmZvcm1hdERpZmZlcmVuY2UoJ0Rlc2NyaXB0aW9uJywgJ0Rlc2NyaXB0aW9uJywgdGVtcGxhdGVEaWZmLmRlc2NyaXB0aW9uKTtcbiAgICBmb3JtYXR0ZXIucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gIH1cblxuICBmb3JtYXRTZWN1cml0eUNoYW5nZXNXaXRoQmFubmVyKGZvcm1hdHRlciwgdGVtcGxhdGVEaWZmKTtcblxuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignUGFyYW1ldGVycycsICdQYXJhbWV0ZXInLCB0ZW1wbGF0ZURpZmYucGFyYW1ldGVycyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdNZXRhZGF0YScsICdNZXRhZGF0YScsIHRlbXBsYXRlRGlmZi5tZXRhZGF0YSk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdNYXBwaW5ncycsICdNYXBwaW5nJywgdGVtcGxhdGVEaWZmLm1hcHBpbmdzKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ0NvbmRpdGlvbnMnLCAnQ29uZGl0aW9uJywgdGVtcGxhdGVEaWZmLmNvbmRpdGlvbnMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignUmVzb3VyY2VzJywgJ1Jlc291cmNlJywgdGVtcGxhdGVEaWZmLnJlc291cmNlcywgZm9ybWF0dGVyLmZvcm1hdFJlc291cmNlRGlmZmVyZW5jZS5iaW5kKGZvcm1hdHRlcikpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignT3V0cHV0cycsICdPdXRwdXQnLCB0ZW1wbGF0ZURpZmYub3V0cHV0cyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdPdGhlciBDaGFuZ2VzJywgJ1Vua25vd24nLCB0ZW1wbGF0ZURpZmYudW5rbm93bik7XG59XG5cbi8qKlxuICogUmVuZGVycyBhIGRpZmYgb2Ygc2VjdXJpdHkgY2hhbmdlcyB0byB0aGUgZ2l2ZW4gc3RyZWFtXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTZWN1cml0eUNoYW5nZXMoXG4gIHN0cmVhbTogTm9kZUpTLldyaXRhYmxlU3RyZWFtLFxuICB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZixcbiAgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICBjb250ZXh0PzogbnVtYmVyKSB7XG4gIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoc3RyZWFtLCBsb2dpY2FsVG9QYXRoTWFwLCB0ZW1wbGF0ZURpZmYsIGNvbnRleHQpO1xuXG4gIGZvcm1hdFNlY3VyaXR5Q2hhbmdlc1dpdGhCYW5uZXIoZm9ybWF0dGVyLCB0ZW1wbGF0ZURpZmYpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZWN1cml0eUNoYW5nZXNXaXRoQmFubmVyKGZvcm1hdHRlcjogRm9ybWF0dGVyLCB0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZikge1xuICBpZiAoIXRlbXBsYXRlRGlmZi5pYW1DaGFuZ2VzLmhhc0NoYW5nZXMgJiYgIXRlbXBsYXRlRGlmZi5zZWN1cml0eUdyb3VwQ2hhbmdlcy5oYXNDaGFuZ2VzKSB7IHJldHVybjsgfVxuICBmb3JtYXR0ZXIuZm9ybWF0SWFtQ2hhbmdlcyh0ZW1wbGF0ZURpZmYuaWFtQ2hhbmdlcyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN1cml0eUdyb3VwQ2hhbmdlcyh0ZW1wbGF0ZURpZmYuc2VjdXJpdHlHcm91cENoYW5nZXMpO1xuXG4gIGZvcm1hdHRlci53YXJuaW5nKCcoTk9URTogVGhlcmUgbWF5IGJlIHNlY3VyaXR5LXJlbGF0ZWQgY2hhbmdlcyBub3QgaW4gdGhpcyBsaXN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xMjk5KScpO1xuICBmb3JtYXR0ZXIucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG59XG5cbmNvbnN0IEFERElUSU9OID0gY2hhbGsuZ3JlZW4oJ1srXScpO1xuY29uc3QgQ09OVEVYVCA9IGNoYWxrLmdyZXkoJ1sgXScpO1xuY29uc3QgVVBEQVRFID0gY2hhbGsueWVsbG93KCdbfl0nKTtcbmNvbnN0IFJFTU9WQUwgPSBjaGFsay5yZWQoJ1stXScpO1xuY29uc3QgSU1QT1JUID0gY2hhbGsuYmx1ZSgnW+KGkF0nKTtcblxuY2xhc3MgRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdHJlYW06IEZvcm1hdFN0cmVhbSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgZGlmZj86IFRlbXBsYXRlRGlmZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IG51bWJlciA9IDMpIHtcbiAgICAvLyBSZWFkIGFkZGl0aW9uYWwgY29uc3RydWN0IHBhdGhzIGZyb20gdGhlIGRpZmYgaWYgaXQgaXMgc3VwcGxpZWRcbiAgICBpZiAoZGlmZikge1xuICAgICAgdGhpcy5yZWFkQ29uc3RydWN0UGF0aHNGcm9tKGRpZmYpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmludChmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICB0aGlzLnN0cmVhbS53cml0ZShjaGFsay53aGl0ZShmb3JtYXQoZm10LCAuLi5hcmdzKSkgKyAnXFxuJyk7XG4gIH1cblxuICBwdWJsaWMgd2FybmluZyhmbXQ6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICB0aGlzLnN0cmVhbS53cml0ZShjaGFsay55ZWxsb3coZm9ybWF0KGZtdCwgLi4uYXJncykpICsgJ1xcbicpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdFNlY3Rpb248ViwgVCBleHRlbmRzIERpZmZlcmVuY2U8Vj4+KFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgZW50cnlUeXBlOiBzdHJpbmcsXG4gICAgY29sbGVjdGlvbjogRGlmZmVyZW5jZUNvbGxlY3Rpb248ViwgVD4sXG4gICAgZm9ybWF0dGVyOiAodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nLCBkaWZmOiBUKSA9PiB2b2lkID0gdGhpcy5mb3JtYXREaWZmZXJlbmNlLmJpbmQodGhpcykpIHtcblxuICAgIGlmIChjb2xsZWN0aW9uLmRpZmZlcmVuY2VDb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKHRpdGxlKTtcbiAgICBjb2xsZWN0aW9uLmZvckVhY2hEaWZmZXJlbmNlKChpZCwgZGlmZikgPT4gZm9ybWF0dGVyKGVudHJ5VHlwZSwgaWQsIGRpZmYpKTtcbiAgICB0aGlzLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICB9XG5cbiAgcHVibGljIHByaW50U2VjdGlvbkhlYWRlcih0aXRsZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wcmludChjaGFsay51bmRlcmxpbmUoY2hhbGsuYm9sZCh0aXRsZSkpKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludFNlY3Rpb25Gb290ZXIoKSB7XG4gICAgdGhpcy5wcmludCgnJyk7XG4gIH1cblxuICAvKipcbiAgICogUHJpbnQgYSBzaW1wbGUgZGlmZmVyZW5jZSBmb3IgYSBnaXZlbiBuYW1lZCBlbnRpdHkuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dpY2FsSWQgdGhlIG5hbWUgb2YgdGhlIGVudGl0eSB0aGF0IGlzIGRpZmZlcmVudC5cbiAgICogQHBhcmFtIGRpZmYgdGhlIGRpZmZlcmVuY2UgdG8gYmUgcmVuZGVyZWQuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0RGlmZmVyZW5jZSh0eXBlOiBzdHJpbmcsIGxvZ2ljYWxJZDogc3RyaW5nLCBkaWZmOiBEaWZmZXJlbmNlPGFueT4gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWRpZmYgfHwgIWRpZmYuaXNEaWZmZXJlbnQpIHsgcmV0dXJuOyB9XG5cbiAgICBsZXQgdmFsdWU7XG5cbiAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUoZGlmZi5vbGRWYWx1ZSwgY2hhbGsucmVkKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWUoZGlmZi5uZXdWYWx1ZSwgY2hhbGsuZ3JlZW4pO1xuICAgIGlmIChkaWZmLmlzQWRkaXRpb24pIHtcbiAgICAgIHZhbHVlID0gbmV3VmFsdWU7XG4gICAgfSBlbHNlIGlmIChkaWZmLmlzVXBkYXRlKSB7XG4gICAgICB2YWx1ZSA9IGAke29sZFZhbHVlfSB0byAke25ld1ZhbHVlfWA7XG4gICAgfSBlbHNlIGlmIChkaWZmLmlzUmVtb3ZhbCkge1xuICAgICAgdmFsdWUgPSBvbGRWYWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnByaW50KGAke3RoaXMuZm9ybWF0UHJlZml4KGRpZmYpfSAke2NoYWxrLmN5YW4odHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbElkKX06ICR7dmFsdWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogUHJpbnQgYSByZXNvdXJjZSBkaWZmZXJlbmNlIGZvciBhIGdpdmVuIGxvZ2ljYWwgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dpY2FsSWQgdGhlIGxvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHRoYXQgY2hhbmdlZC5cbiAgICogQHBhcmFtIGRpZmYgICAgICB0aGUgY2hhbmdlIHRvIGJlIHJlbmRlcmVkLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFJlc291cmNlRGlmZmVyZW5jZShfdHlwZTogc3RyaW5nLCBsb2dpY2FsSWQ6IHN0cmluZywgZGlmZjogUmVzb3VyY2VEaWZmZXJlbmNlKSB7XG4gICAgaWYgKCFkaWZmLmlzRGlmZmVyZW50KSB7IHJldHVybjsgfVxuXG4gICAgY29uc3QgcmVzb3VyY2VUeXBlID0gZGlmZi5pc1JlbW92YWwgPyBkaWZmLm9sZFJlc291cmNlVHlwZSA6IGRpZmYubmV3UmVzb3VyY2VUeXBlO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICB0aGlzLnByaW50KGAke3RoaXMuZm9ybWF0UmVzb3VyY2VQcmVmaXgoZGlmZil9ICR7dGhpcy5mb3JtYXRWYWx1ZShyZXNvdXJjZVR5cGUsIGNoYWxrLmN5YW4pfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxJZCl9ICR7dGhpcy5mb3JtYXRJbXBhY3QoZGlmZi5jaGFuZ2VJbXBhY3QpfWApO1xuXG4gICAgaWYgKGRpZmYuaXNVcGRhdGUpIHtcbiAgICAgIGNvbnN0IGRpZmZlcmVuY2VDb3VudCA9IGRpZmYuZGlmZmVyZW5jZUNvdW50O1xuICAgICAgbGV0IHByb2Nlc3NlZENvdW50ID0gMDtcbiAgICAgIGRpZmYuZm9yRWFjaERpZmZlcmVuY2UoKF8sIG5hbWUsIHZhbHVlcykgPT4ge1xuICAgICAgICBwcm9jZXNzZWRDb3VudCArPSAxO1xuICAgICAgICB0aGlzLmZvcm1hdFRyZWVEaWZmKG5hbWUsIHZhbHVlcywgcHJvY2Vzc2VkQ291bnQgPT09IGRpZmZlcmVuY2VDb3VudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0UmVzb3VyY2VQcmVmaXgoZGlmZjogUmVzb3VyY2VEaWZmZXJlbmNlKSB7XG4gICAgaWYgKGRpZmYuaXNJbXBvcnQpIHsgcmV0dXJuIElNUE9SVDsgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0UHJlZml4KGRpZmYpO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdFByZWZpeDxUPihkaWZmOiBEaWZmZXJlbmNlPFQ+KSB7XG4gICAgaWYgKGRpZmYuaXNBZGRpdGlvbikgeyByZXR1cm4gQURESVRJT047IH1cbiAgICBpZiAoZGlmZi5pc1VwZGF0ZSkgeyByZXR1cm4gVVBEQVRFOyB9XG4gICAgaWYgKGRpZmYuaXNSZW1vdmFsKSB7IHJldHVybiBSRU1PVkFMOyB9XG4gICAgcmV0dXJuIGNoYWxrLndoaXRlKCdbP10nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZC5cbiAgICogQHBhcmFtIGNvbG9yIHRoZSBjb2xvciB0byBiZSB1c2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB0aGUgZm9ybWF0dGVkIHN0cmluZywgd2l0aCBjb2xvciBhcHBsaWVkLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFZhbHVlKHZhbHVlOiBhbnksIGNvbG9yOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgeyByZXR1cm4gY29sb3IodmFsdWUpOyB9XG4gICAgcmV0dXJuIGNvbG9yKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGltcGFjdCB0aGUgaW1wYWN0IHRvIGJlIGZvcm1hdHRlZFxuICAgKiBAcmV0dXJucyBhIHVzZXItZnJpZW5kbHksIGNvbG9yZWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgaW1wYWN0LlxuICAgKi9cbiAgcHVibGljIGZvcm1hdEltcGFjdChpbXBhY3Q6IFJlc291cmNlSW1wYWN0KSB7XG4gICAgc3dpdGNoIChpbXBhY3QpIHtcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuTUFZX1JFUExBQ0U6XG4gICAgICAgIHJldHVybiBjaGFsay5pdGFsaWMoY2hhbGsueWVsbG93KCdtYXkgYmUgcmVwbGFjZWQnKSk7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRTpcbiAgICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYyhjaGFsay5ib2xkKGNoYWxrLnJlZCgncmVwbGFjZScpKSk7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfREVTVFJPWTpcbiAgICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYyhjaGFsay5ib2xkKGNoYWxrLnJlZCgnZGVzdHJveScpKSk7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfT1JQSEFOOlxuICAgICAgICByZXR1cm4gY2hhbGsuaXRhbGljKGNoYWxrLnllbGxvdygnb3JwaGFuJykpO1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX0lNUE9SVDpcbiAgICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYyhjaGFsay5ibHVlKCdpbXBvcnQnKSk7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0LldJTExfVVBEQVRFOlxuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX0NSRUFURTpcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuTk9fQ0hBTkdFOlxuICAgICAgICByZXR1cm4gJyc7IC8vIG5vIGV4dHJhIGluZm8gaXMgZ2FpbmVkIGhlcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIHRyZWUgb2YgZGlmZmVyZW5jZXMgdW5kZXIgYSBwYXJ0aWN1bGFyIG5hbWUuXG4gICAqIEBwYXJhbSBuYW1lICAgIHRoZSBuYW1lIG9mIHRoZSByb290IG9mIHRoZSB0cmVlLlxuICAgKiBAcGFyYW0gZGlmZiAgICB0aGUgZGlmZmVyZW5jZSBvbiB0aGUgdHJlZS5cbiAgICogQHBhcmFtIGxhc3QgICAgd2hldGhlciB0aGlzIGlzIHRoZSBsYXN0IG5vZGUgb2YgYSBwYXJlbnQgdHJlZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRUcmVlRGlmZihuYW1lOiBzdHJpbmcsIGRpZmY6IERpZmZlcmVuY2U8YW55PiwgbGFzdDogYm9vbGVhbikge1xuICAgIGxldCBhZGRpdGlvbmFsSW5mbyA9ICcnO1xuICAgIGlmIChpc1Byb3BlcnR5RGlmZmVyZW5jZShkaWZmKSkge1xuICAgICAgaWYgKGRpZmYuY2hhbmdlSW1wYWN0ID09PSBSZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRSkge1xuICAgICAgICBhZGRpdGlvbmFsSW5mbyA9ICcgKG1heSBjYXVzZSByZXBsYWNlbWVudCknO1xuICAgICAgfSBlbHNlIGlmIChkaWZmLmNoYW5nZUltcGFjdCA9PT0gUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFKSB7XG4gICAgICAgIGFkZGl0aW9uYWxJbmZvID0gJyAocmVxdWlyZXMgcmVwbGFjZW1lbnQpJztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcmludCgnICVz4pSAICVzICVzJXMnLCBsYXN0ID8gJ+KUlCcgOiAn4pScJywgdGhpcy5jaGFuZ2VUYWcoZGlmZi5vbGRWYWx1ZSwgZGlmZi5uZXdWYWx1ZSksIG5hbWUsIGFkZGl0aW9uYWxJbmZvKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXRPYmplY3REaWZmKGRpZmYub2xkVmFsdWUsIGRpZmYubmV3VmFsdWUsIGAgJHtsYXN0ID8gJyAnIDogJ+KUgid9YCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBvYmplY3RzLCBsb29raW5nIGZvciB0aGUgZGlmZmVyZW5jZXMgYXMgZGVlcCBhcyBwb3NzaWJsZSxcbiAgICogYW5kIHJlbmRlcmluZyBhIHRyZWUgZ3JhcGggb2YgdGhlIHBhdGggdW50aWwgdGhlIGRpZmZlcmVuY2UgaXMgZm91bmQuXG4gICAqXG4gICAqIEBwYXJhbSBvbGRPYmplY3QgIHRoZSBvbGQgb2JqZWN0LlxuICAgKiBAcGFyYW0gbmV3T2JqZWN0ICB0aGUgbmV3IG9iamVjdC5cbiAgICogQHBhcmFtIGxpbmVQcmVmaXggYSBwcmVmaXggKGluZGVudC1saWtlKSB0byBiZSB1c2VkIG9uIGV2ZXJ5IGxpbmUuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0T2JqZWN0RGlmZihvbGRPYmplY3Q6IGFueSwgbmV3T2JqZWN0OiBhbnksIGxpbmVQcmVmaXg6IHN0cmluZykge1xuICAgIGlmICgodHlwZW9mIG9sZE9iamVjdCAhPT0gdHlwZW9mIG5ld09iamVjdCkgfHwgQXJyYXkuaXNBcnJheShvbGRPYmplY3QpIHx8IHR5cGVvZiBvbGRPYmplY3QgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvbGRPYmplY3QgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAob2xkT2JqZWN0ICE9PSB1bmRlZmluZWQgJiYgbmV3T2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRPYmplY3QgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBuZXdPYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgY29uc3Qgb2xkU3RyID0gSlNPTi5zdHJpbmdpZnkob2xkT2JqZWN0LCBudWxsLCAyKTtcbiAgICAgICAgICBjb25zdCBuZXdTdHIgPSBKU09OLnN0cmluZ2lmeShuZXdPYmplY3QsIG51bGwsIDIpO1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBfZGlmZlN0cmluZ3Mob2xkU3RyLCBuZXdTdHIsIHRoaXMuY29udGV4dCk7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWZmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnByaW50KCclcyAgICVzICVzJywgbGluZVByZWZpeCwgaSA9PT0gMCA/ICfilJTilIAnIDogJyAgJywgZGlmZltpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSc4pSAICVzICVzJywgbGluZVByZWZpeCwgUkVNT1ZBTCwgdGhpcy5mb3JtYXRWYWx1ZShvbGRPYmplY3QsIGNoYWxrLnJlZCkpO1xuICAgICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSU4pSAICVzICVzJywgbGluZVByZWZpeCwgQURESVRJT04sIHRoaXMuZm9ybWF0VmFsdWUobmV3T2JqZWN0LCBjaGFsay5ncmVlbikpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9sZE9iamVjdCAhPT0gdW5kZWZpbmVkIC8qICYmIG5ld09iamVjdCA9PT0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAg4pSU4pSAICVzJywgbGluZVByZWZpeCwgdGhpcy5mb3JtYXRWYWx1ZShvbGRPYmplY3QsIGNoYWxrLnJlZCkpO1xuICAgICAgfSBlbHNlIC8qIGlmIChvbGRPYmplY3QgPT09IHVuZGVmaW5lZCAmJiBuZXdPYmplY3QgIT09IHVuZGVmaW5lZCkgKi8ge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUlOKUgCAlcycsIGxpbmVQcmVmaXgsIHRoaXMuZm9ybWF0VmFsdWUobmV3T2JqZWN0LCBjaGFsay5ncmVlbikpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlTZXQgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG9sZE9iamVjdCkpO1xuICAgIE9iamVjdC5rZXlzKG5ld09iamVjdCkuZm9yRWFjaChrID0+IGtleVNldC5hZGQoaykpO1xuICAgIGNvbnN0IGtleXMgPSBuZXcgQXJyYXkoLi4ua2V5U2V0KS5maWx0ZXIoayA9PiAhZGVlcEVxdWFsKG9sZE9iamVjdFtrXSwgbmV3T2JqZWN0W2tdKSkuc29ydCgpO1xuICAgIGNvbnN0IGxhc3RLZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3Qgb2xkVmFsdWUgPSBvbGRPYmplY3Rba2V5XTtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3T2JqZWN0W2tleV07XG4gICAgICBjb25zdCB0cmVlUHJlZml4ID0ga2V5ID09PSBsYXN0S2V5ID8gJ+KUlCcgOiAn4pScJztcbiAgICAgIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICAlc+KUgCAlcyAlczonLCBsaW5lUHJlZml4LCB0cmVlUHJlZml4LCB0aGlzLmNoYW5nZVRhZyhvbGRWYWx1ZSwgbmV3VmFsdWUpLCBjaGFsay5ibHVlKGAuJHtrZXl9YCkpO1xuICAgICAgICB0aGlzLmZvcm1hdE9iamVjdERpZmYob2xkVmFsdWUsIG5ld1ZhbHVlLCBgJHtsaW5lUHJlZml4fSAgICR7a2V5ID09PSBsYXN0S2V5ID8gJyAnIDogJ+KUgid9YCk7XG4gICAgICB9IGVsc2UgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgLyogJiYgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgICVz4pSAICVzIFJlbW92ZWQ6ICVzJywgbGluZVByZWZpeCwgdHJlZVByZWZpeCwgUkVNT1ZBTCwgY2hhbGsuYmx1ZShgLiR7a2V5fWApKTtcbiAgICAgIH0gZWxzZSAvKiBpZiAob2xkVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkICovIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICAlc+KUgCAlcyBBZGRlZDogJXMnLCBsaW5lUHJlZml4LCB0cmVlUHJlZml4LCBBRERJVElPTiwgY2hhbGsuYmx1ZShgLiR7a2V5fWApKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIG9sZFZhbHVlIHRoZSBvbGQgdmFsdWUgb2YgYSBkaWZmZXJlbmNlLlxuICAgKiBAcGFyYW0gbmV3VmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiBhIGRpZmZlcmVuY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIGEgdGFnIHRvIGJlIHJlbmRlcmVkIGluIHRoZSBkaWZmLCByZWZsZWN0aW5nIHdoZXRoZXIgdGhlIGRpZmZlcmVuY2VcbiAgICogICAgICB3YXMgYW4gQURESVRJT04sIFVQREFURSBvciBSRU1PVkFMLlxuICAgKi9cbiAgcHVibGljIGNoYW5nZVRhZyhvbGRWYWx1ZTogYW55IHwgdW5kZWZpbmVkLCBuZXdWYWx1ZTogYW55IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gVVBEQVRFO1xuICAgIH0gZWxzZSBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAvKiAmJiBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKi8pIHtcbiAgICAgIHJldHVybiBSRU1PVkFMO1xuICAgIH0gZWxzZSAvKiBpZiAob2xkVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSAqLyB7XG4gICAgICByZXR1cm4gQURESVRJT047XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgJ2F3czpjZGs6cGF0aCcgbWV0YWRhdGEgaW4gdGhlIGRpZmYgYW5kIGFkZCBpdCB0byB0aGUgbG9naWNhbFRvUGF0aE1hcFxuICAgKlxuICAgKiBUaGVyZSBhcmUgbXVsdGlwbGUgc291cmNlcyBvZiBsb2dpY2FsSUQgLT4gcGF0aCBtYXBwaW5nczogc3ludGggbWV0YWRhdGFcbiAgICogYW5kIHJlc291cmNlIG1ldGFkYXRhLCBhbmQgd2UgY29tYmluZSBhbGwgc291cmNlcyBpbnRvIGEgc2luZ2xlIG1hcC5cbiAgICovXG4gIHB1YmxpYyByZWFkQ29uc3RydWN0UGF0aHNGcm9tKHRlbXBsYXRlRGlmZjogVGVtcGxhdGVEaWZmKSB7XG4gICAgZm9yIChjb25zdCBbbG9naWNhbElkLCByZXNvdXJjZURpZmZdIG9mIE9iamVjdC5lbnRyaWVzKHRlbXBsYXRlRGlmZi5yZXNvdXJjZXMpKSB7XG4gICAgICBpZiAoIXJlc291cmNlRGlmZikgeyBjb250aW51ZTsgfVxuXG4gICAgICBjb25zdCBvbGRQYXRoTWV0YWRhdGEgPSByZXNvdXJjZURpZmYub2xkVmFsdWU/Lk1ldGFkYXRhPy5bUEFUSF9NRVRBREFUQV9LRVldO1xuICAgICAgaWYgKG9sZFBhdGhNZXRhZGF0YSAmJiAhKGxvZ2ljYWxJZCBpbiB0aGlzLmxvZ2ljYWxUb1BhdGhNYXApKSB7XG4gICAgICAgIHRoaXMubG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdID0gb2xkUGF0aE1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdQYXRoTWV0YWRhdGEgPSByZXNvdXJjZURpZmYubmV3VmFsdWU/Lk1ldGFkYXRhPy5bUEFUSF9NRVRBREFUQV9LRVldO1xuICAgICAgaWYgKG5ld1BhdGhNZXRhZGF0YSAmJiAhKGxvZ2ljYWxJZCBpbiB0aGlzLmxvZ2ljYWxUb1BhdGhNYXApKSB7XG4gICAgICAgIHRoaXMubG9naWNhbFRvUGF0aE1hcFtsb2dpY2FsSWRdID0gbmV3UGF0aE1ldGFkYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRMb2dpY2FsSWQobG9naWNhbElkOiBzdHJpbmcpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGEgcGF0aCBpbiB0aGUgbWFwLCByZXR1cm4gaXRcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVkTG9naWNhbElkUGF0aChsb2dpY2FsSWQpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybiBgJHtub3JtYWxpemVkfSAke2NoYWxrLmdyYXkobG9naWNhbElkKX1gO1xuICAgIH1cblxuICAgIHJldHVybiBsb2dpY2FsSWQ7XG4gIH1cblxuICBwdWJsaWMgbm9ybWFsaXplZExvZ2ljYWxJZFBhdGgobG9naWNhbElkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIC8vIGlmIHdlIGhhdmUgYSBwYXRoIGluIHRoZSBtYXAsIHJldHVybiBpdFxuICAgIGNvbnN0IHBhdGggPSB0aGlzLmxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXTtcbiAgICByZXR1cm4gcGF0aCA/IG5vcm1hbGl6ZVBhdGgocGF0aCkgOiB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBQYXRoIGlzIHN1cHBvc2VkIHRvIHN0YXJ0IHdpdGggXCIvc3RhY2stbmFtZVwiLiBJZiB0aGlzIGlzIHRoZSBjYXNlIChpLmUuIHBhdGggaGFzIG1vcmUgdGhhblxuICAgICAqIHR3byBjb21wb25lbnRzLCB3ZSByZW1vdmUgdGhlIGZpcnN0IHBhcnQuIE90aGVyd2lzZSwgd2UganVzdCB1c2UgdGhlIGZ1bGwgcGF0aC5cbiAgICAgKiBAcGFyYW0gcFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocDogc3RyaW5nKSB7XG4gICAgICBpZiAocC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcCA9IHAuc2xpY2UoMSk7XG4gICAgICB9XG5cbiAgICAgIGxldCBwYXJ0cyA9IHAuc3BsaXQoJy8nKTtcbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMSk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBsYXN0IGNvbXBvbmVudCBpZiBpdCdzIFwiUmVzb3VyY2VcIiBvciBcIkRlZmF1bHRcIiAoaWYgd2UgaGF2ZSBtb3JlIHRoYW4gYSBzaW5nbGUgY29tcG9uZW50KVxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGNvbnN0IGxhc3QgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdCA9PT0gJ1Jlc291cmNlJyB8fCBsYXN0ID09PSAnRGVmYXVsdCcpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuc2xpY2UoMCwgcGFydHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcCA9IHBhcnRzLmpvaW4oJy8nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRJYW1DaGFuZ2VzKGNoYW5nZXM6IElhbUNoYW5nZXMpIHtcbiAgICBpZiAoIWNoYW5nZXMuaGFzQ2hhbmdlcykgeyByZXR1cm47IH1cblxuICAgIGlmIChjaGFuZ2VzLnN0YXRlbWVudHMuaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ0lBTSBTdGF0ZW1lbnQgQ2hhbmdlcycpO1xuICAgICAgdGhpcy5wcmludChmb3JtYXRUYWJsZSh0aGlzLmRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhjaGFuZ2VzLnN1bW1hcml6ZVN0YXRlbWVudHMoKSksIHRoaXMuc3RyZWFtLmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5tYW5hZ2VkUG9saWNpZXMuaGFzQ2hhbmdlcykge1xuICAgICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ0lBTSBQb2xpY3kgQ2hhbmdlcycpO1xuICAgICAgdGhpcy5wcmludChmb3JtYXRUYWJsZSh0aGlzLmRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhjaGFuZ2VzLnN1bW1hcml6ZU1hbmFnZWRQb2xpY2llcygpKSwgdGhpcy5zdHJlYW0uY29sdW1ucykpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRTZWN1cml0eUdyb3VwQ2hhbmdlcyhjaGFuZ2VzOiBTZWN1cml0eUdyb3VwQ2hhbmdlcykge1xuICAgIGlmICghY2hhbmdlcy5oYXNDaGFuZ2VzKSB7IHJldHVybjsgfVxuXG4gICAgdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1NlY3VyaXR5IEdyb3VwIENoYW5nZXMnKTtcbiAgICB0aGlzLnByaW50KGZvcm1hdFRhYmxlKHRoaXMuZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKGNoYW5nZXMuc3VtbWFyaXplKCkpLCB0aGlzLnN0cmVhbS5jb2x1bW5zKSk7XG4gIH1cblxuICBwdWJsaWMgZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKHJvd3M6IHN0cmluZ1tdW10pOiBzdHJpbmdbXVtdIHtcbiAgICByZXR1cm4gcm93cy5tYXAocm93ID0+IHJvdy5tYXAodGhpcy5zdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcy5iaW5kKHRoaXMpKSk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic3RpdHV0ZSBhbGwgc3RyaW5ncyBsaWtlICR7TG9nSWQueHh4fSB3aXRoIHRoZSBwYXRoIGluc3RlYWQgb2YgdGhlIGxvZ2ljYWwgSURcbiAgICovXG4gIHB1YmxpYyBzdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhzb3VyY2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKC9cXCRcXHsoW14ufV0rKSguW159XSspP1xcfS9pZywgKF9tYXRjaCwgbG9nSWQsIHN1ZmZpeCkgPT4ge1xuICAgICAgcmV0dXJuICckeycgKyAodGhpcy5ub3JtYWxpemVkTG9naWNhbElkUGF0aChsb2dJZCkgfHwgbG9nSWQpICsgKHN1ZmZpeCB8fCAnJykgKyAnfSc7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHBhdGNoIGFzIHJldHVybmVkIGJ5IGBgZGlmZi5zdHJ1Y3R1cmVkUGF0Y2hgYC5cbiAqL1xuaW50ZXJmYWNlIFBhdGNoIHtcbiAgLyoqXG4gICAqIEh1bmtzIGluIHRoZSBwYXRjaC5cbiAgICovXG4gIGh1bmtzOiBSZWFkb25seUFycmF5PFBhdGNoSHVuaz47XG59XG5cbi8qKlxuICogQSBodW5rIGluIGEgcGF0Y2ggcHJvZHVjZWQgYnkgYGBkaWZmLnN0cnVjdHVyZWRQYXRjaGBgLlxuICovXG5pbnRlcmZhY2UgUGF0Y2hIdW5rIHtcbiAgb2xkU3RhcnQ6IG51bWJlcjtcbiAgb2xkTGluZXM6IG51bWJlcjtcbiAgbmV3U3RhcnQ6IG51bWJlcjtcbiAgbmV3TGluZXM6IG51bWJlcjtcbiAgbGluZXM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB1bmlmaWVkIGRpZmYgb2YgdHdvIHN0cmluZ3MuXG4gKlxuICogQHBhcmFtIG9sZFN0ciAgdGhlIFwib2xkXCIgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIG5ld1N0ciAgdGhlIFwibmV3XCIgdmVyc2lvbiBvZiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIGNvbnRleHQgdGhlIG51bWJlciBvZiBjb250ZXh0IGxpbmVzIHRvIHVzZSBpbiBhcmJpdHJhcnkgSlNPTiBkaWZmLlxuICpcbiAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGRpZmYgbGluZXMuXG4gKi9cbmZ1bmN0aW9uIF9kaWZmU3RyaW5ncyhvbGRTdHI6IHN0cmluZywgbmV3U3RyOiBzdHJpbmcsIGNvbnRleHQ6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGF0Y2g6IFBhdGNoID0gc3RydWN0dXJlZFBhdGNoKG51bGwsIG51bGwsIG9sZFN0ciwgbmV3U3RyLCBudWxsLCBudWxsLCB7IGNvbnRleHQgfSk7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgaHVuayBvZiBwYXRjaC5odW5rcykge1xuICAgIHJlc3VsdC5wdXNoKGNoYWxrLm1hZ2VudGEoYEBAIC0ke2h1bmsub2xkU3RhcnR9LCR7aHVuay5vbGRMaW5lc30gKyR7aHVuay5uZXdTdGFydH0sJHtodW5rLm5ld0xpbmVzfSBAQGApKTtcbiAgICBjb25zdCBiYXNlSW5kZW50ID0gX2ZpbmRJbmRlbnQoaHVuay5saW5lcyk7XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGh1bmsubGluZXMpIHtcbiAgICAgIC8vIERvbid0IGNhcmUgYWJvdXQgdGVybWluYXRpb24gbmV3bGluZS5cbiAgICAgIGlmIChsaW5lID09PSAnXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlJykgeyBjb250aW51ZTsgfVxuICAgICAgY29uc3QgbWFya2VyID0gbGluZS5jaGFyQXQoMCk7XG4gICAgICBjb25zdCB0ZXh0ID0gbGluZS5zbGljZSgxICsgYmFzZUluZGVudCk7XG4gICAgICBzd2l0Y2ggKG1hcmtlcikge1xuICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICByZXN1bHQucHVzaChgJHtDT05URVhUfSAke3RleHR9YCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJysnOlxuICAgICAgICAgIHJlc3VsdC5wdXNoKGNoYWxrLmJvbGQoYCR7QURESVRJT059ICR7Y2hhbGsuZ3JlZW4odGV4dCl9YCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICctJzpcbiAgICAgICAgICByZXN1bHQucHVzaChjaGFsay5ib2xkKGAke1JFTU9WQUx9ICR7Y2hhbGsucmVkKHRleHQpfWApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZGlmZiBtYXJrZXI6ICR7bWFya2VyfSAoZnVsbCBsaW5lOiAke2xpbmV9KWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xuXG4gIGZ1bmN0aW9uIF9maW5kSW5kZW50KGxpbmVzOiBzdHJpbmdbXSk6IG51bWJlciB7XG4gICAgbGV0IGluZGVudCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsaW5lLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChsaW5lLmNoYXJBdChpKSAhPT0gJyAnKSB7XG4gICAgICAgICAgaW5kZW50ID0gaW5kZW50ID4gaSAtIDEgPyBpIC0gMSA6IGluZGVudDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5kZW50O1xuICB9XG59XG4iXX0=
|
|
435
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUE4QjtBQUM5QiwrQkFBK0I7QUFFL0Isc0NBQXdDO0FBQ3hDLG1EQUF1RztBQUN2RyxpREFBNkM7QUFJN0MsY0FBYztBQUNkLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDO0FBRXpDLDBEQUEwRDtBQUMxRCxNQUFNLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBTzVDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLE1BQW9CLEVBQ3BCLFlBQTBCLEVBQzFCLG1CQUFvRCxFQUFFLEVBQ3RELFVBQWtCLENBQUM7SUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVqRixJQUFJLFlBQVksQ0FBQyx3QkFBd0IsSUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNoRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixFQUFFLDBCQUEwQixFQUFFLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzFILFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkYsU0FBUyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELCtCQUErQixDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUV6RCxTQUFTLENBQUMs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QUM7b0JBQzNCLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO29CQUN6QyxNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBEaWZmZXJlbmNlQ29sbGVjdGlvbiwgVGVtcGxhdGVEaWZmIH0gZnJvbSAnLi9kaWZmL3R5cGVzJztcbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJy4vZGlmZi91dGlsJztcbmltcG9ydCB7IERpZmZlcmVuY2UsIGlzUHJvcGVydHlEaWZmZXJlbmNlLCBSZXNvdXJjZURpZmZlcmVuY2UsIFJlc291cmNlSW1wYWN0IH0gZnJvbSAnLi9kaWZmLXRlbXBsYXRlJztcbmltcG9ydCB7IGZvcm1hdFRhYmxlIH0gZnJvbSAnLi9mb3JtYXQtdGFibGUnO1xuaW1wb3J0IHsgSWFtQ2hhbmdlcyB9IGZyb20gJy4vaWFtL2lhbS1jaGFuZ2VzJztcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXBDaGFuZ2VzIH0gZnJvbSAnLi9uZXR3b3JrL3NlY3VyaXR5LWdyb3VwLWNoYW5nZXMnO1xuXG4vLyBmcm9tIGN4LWFwaVxuY29uc3QgUEFUSF9NRVRBREFUQV9LRVkgPSAnYXdzOmNkazpwYXRoJztcblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuY29uc3QgeyBzdHJ1Y3R1cmVkUGF0Y2ggfSA9IHJlcXVpcmUoJ2RpZmYnKTtcbi8qIGVzbGludC1lbmFibGUgKi9cblxuZXhwb3J0IGludGVyZmFjZSBGb3JtYXRTdHJlYW0gZXh0ZW5kcyBOb2RlSlMuV3JpdGFibGVTdHJlYW0ge1xuICBjb2x1bW5zPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGVtcGxhdGUgZGlmZmVyZW5jZXMgdG8gdGhlIHByb2Nlc3MnIGNvbnNvbGUuXG4gKlxuICogQHBhcmFtIHN0cmVhbSAgICAgICAgICAgVGhlIElPIHN0cmVhbSB3aGVyZSB0byBvdXRwdXQgdGhlIHJlbmRlcmVkIGRpZmYuXG4gKiBAcGFyYW0gdGVtcGxhdGVEaWZmICAgICBUZW1wbGF0ZURpZmYgdG8gYmUgcmVuZGVyZWQgdG8gdGhlIGNvbnNvbGUuXG4gKiBAcGFyYW0gbG9naWNhbFRvUGF0aE1hcCBBIG1hcCBmcm9tIGxvZ2ljYWwgSUQgdG8gY29uc3RydWN0IHBhdGguIFVzZWZ1bCBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0aGVyZSBpcyBubyBhd3M6Y2RrOnBhdGggbWV0YWRhdGEgaW4gdGhlIHRlbXBsYXRlLlxuICogQHBhcmFtIGNvbnRleHQgICAgICAgICAgdGhlIG51bWJlciBvZiBjb250ZXh0IGxpbmVzIHRvIHVzZSBpbiBhcmJpdHJhcnkgSlNPTiBkaWZmIChkZWZhdWx0cyB0byAzKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERpZmZlcmVuY2VzKFxuICBzdHJlYW06IEZvcm1hdFN0cmVhbSxcbiAgdGVtcGxhdGVEaWZmOiBUZW1wbGF0ZURpZmYsXG4gIGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSxcbiAgY29udGV4dDogbnVtYmVyID0gMykge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHN0cmVhbSwgbG9naWNhbFRvUGF0aE1hcCwgdGVtcGxhdGVEaWZmLCBjb250ZXh0KTtcblxuICBpZiAodGVtcGxhdGVEaWZmLmF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbiB8fCB0ZW1wbGF0ZURpZmYudHJhbnNmb3JtIHx8IHRlbXBsYXRlRGlmZi5kZXNjcmlwdGlvbikge1xuICAgIGZvcm1hdHRlci5wcmludFNlY3Rpb25IZWFkZXIoJ1RlbXBsYXRlJyk7XG4gICAgZm9ybWF0dGVyLmZvcm1hdERpZmZlcmVuY2UoJ0FXU1RlbXBsYXRlRm9ybWF0VmVyc2lvbicsICdBV1NUZW1wbGF0ZUZvcm1hdFZlcnNpb24nLCB0ZW1wbGF0ZURpZmYuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uKTtcbiAgICBmb3JtYXR0ZXIuZm9ybWF0RGlmZmVyZW5jZSgnVHJhbnNmb3JtJywgJ1RyYW5zZm9ybScsIHRlbXBsYXRlRGlmZi50cmFuc2Zvcm0pO1xuICAgIGZvcm1hdHRlci5mb3JtYXREaWZmZXJlbmNlKCdEZXNjcmlwdGlvbicsICdEZXNjcmlwdGlvbicsIHRlbXBsYXRlRGlmZi5kZXNjcmlwdGlvbik7XG4gICAgZm9ybWF0dGVyLnByaW50U2VjdGlvbkZvb3RlcigpO1xuICB9XG5cbiAgZm9ybWF0U2VjdXJpdHlDaGFuZ2VzV2l0aEJhbm5lcihmb3JtYXR0ZXIsIHRlbXBsYXRlRGlmZik7XG5cbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ1BhcmFtZXRlcnMnLCAnUGFyYW1ldGVyJywgdGVtcGxhdGVEaWZmLnBhcmFtZXRlcnMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignTWV0YWRhdGEnLCAnTWV0YWRhdGEnLCB0ZW1wbGF0ZURpZmYubWV0YWRhdGEpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignTWFwcGluZ3MnLCAnTWFwcGluZycsIHRlbXBsYXRlRGlmZi5tYXBwaW5ncyk7XG4gIGZvcm1hdHRlci5mb3JtYXRTZWN0aW9uKCdDb25kaXRpb25zJywgJ0NvbmRpdGlvbicsIHRlbXBsYXRlRGlmZi5jb25kaXRpb25zKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ1Jlc291cmNlcycsICdSZXNvdXJjZScsIHRlbXBsYXRlRGlmZi5yZXNvdXJjZXMsIGZvcm1hdHRlci5mb3JtYXRSZXNvdXJjZURpZmZlcmVuY2UuYmluZChmb3JtYXR0ZXIpKTtcbiAgZm9ybWF0dGVyLmZvcm1hdFNlY3Rpb24oJ091dHB1dHMnLCAnT3V0cHV0JywgdGVtcGxhdGVEaWZmLm91dHB1dHMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdGlvbignT3RoZXIgQ2hhbmdlcycsICdVbmtub3duJywgdGVtcGxhdGVEaWZmLnVua25vd24pO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgYSBkaWZmIG9mIHNlY3VyaXR5IGNoYW5nZXMgdG8gdGhlIGdpdmVuIHN0cmVhbVxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2VjdXJpdHlDaGFuZ2VzKFxuICBzdHJlYW06IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSxcbiAgdGVtcGxhdGVEaWZmOiBUZW1wbGF0ZURpZmYsXG4gIGxvZ2ljYWxUb1BhdGhNYXA6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSxcbiAgY29udGV4dD86IG51bWJlcikge1xuICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHN0cmVhbSwgbG9naWNhbFRvUGF0aE1hcCwgdGVtcGxhdGVEaWZmLCBjb250ZXh0KTtcblxuICBmb3JtYXRTZWN1cml0eUNoYW5nZXNXaXRoQmFubmVyKGZvcm1hdHRlciwgdGVtcGxhdGVEaWZmKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0U2VjdXJpdHlDaGFuZ2VzV2l0aEJhbm5lcihmb3JtYXR0ZXI6IEZvcm1hdHRlciwgdGVtcGxhdGVEaWZmOiBUZW1wbGF0ZURpZmYpIHtcbiAgaWYgKCF0ZW1wbGF0ZURpZmYuaWFtQ2hhbmdlcy5oYXNDaGFuZ2VzICYmICF0ZW1wbGF0ZURpZmYuc2VjdXJpdHlHcm91cENoYW5nZXMuaGFzQ2hhbmdlcykgeyByZXR1cm47IH1cbiAgZm9ybWF0dGVyLmZvcm1hdElhbUNoYW5nZXModGVtcGxhdGVEaWZmLmlhbUNoYW5nZXMpO1xuICBmb3JtYXR0ZXIuZm9ybWF0U2VjdXJpdHlHcm91cENoYW5nZXModGVtcGxhdGVEaWZmLnNlY3VyaXR5R3JvdXBDaGFuZ2VzKTtcblxuICBmb3JtYXR0ZXIud2FybmluZygnKE5PVEU6IFRoZXJlIG1heSBiZSBzZWN1cml0eS1yZWxhdGVkIGNoYW5nZXMgbm90IGluIHRoaXMgbGlzdC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTI5OSknKTtcbiAgZm9ybWF0dGVyLnByaW50U2VjdGlvbkZvb3RlcigpO1xufVxuXG5jb25zdCBBRERJVElPTiA9IGNoYWxrLmdyZWVuKCdbK10nKTtcbmNvbnN0IENPTlRFWFQgPSBjaGFsay5ncmV5KCdbIF0nKTtcbmNvbnN0IFVQREFURSA9IGNoYWxrLnllbGxvdygnW35dJyk7XG5jb25zdCBSRU1PVkFMID0gY2hhbGsucmVkKCdbLV0nKTtcbmNvbnN0IElNUE9SVCA9IGNoYWxrLmJsdWUoJ1vihpBdJyk7XG5cbmNsYXNzIEZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyZWFtOiBGb3JtYXRTdHJlYW0sXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIGRpZmY/OiBUZW1wbGF0ZURpZmYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZXh0OiBudW1iZXIgPSAzKSB7XG4gICAgLy8gUmVhZCBhZGRpdGlvbmFsIGNvbnN0cnVjdCBwYXRocyBmcm9tIHRoZSBkaWZmIGlmIGl0IGlzIHN1cHBsaWVkXG4gICAgaWYgKGRpZmYpIHtcbiAgICAgIHRoaXMucmVhZENvbnN0cnVjdFBhdGhzRnJvbShkaWZmKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJpbnQoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgdGhpcy5zdHJlYW0ud3JpdGUoY2hhbGsud2hpdGUoZm9ybWF0KGZtdCwgLi4uYXJncykpICsgJ1xcbicpO1xuICB9XG5cbiAgcHVibGljIHdhcm5pbmcoZm10OiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgdGhpcy5zdHJlYW0ud3JpdGUoY2hhbGsueWVsbG93KGZvcm1hdChmbXQsIC4uLmFyZ3MpKSArICdcXG4nKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRTZWN0aW9uPFYsIFQgZXh0ZW5kcyBEaWZmZXJlbmNlPFY+PihcbiAgICB0aXRsZTogc3RyaW5nLFxuICAgIGVudHJ5VHlwZTogc3RyaW5nLFxuICAgIGNvbGxlY3Rpb246IERpZmZlcmVuY2VDb2xsZWN0aW9uPFYsIFQ+LFxuICAgIGZvcm1hdHRlcjogKHR5cGU6IHN0cmluZywgaWQ6IHN0cmluZywgZGlmZjogVCkgPT4gdm9pZCA9IHRoaXMuZm9ybWF0RGlmZmVyZW5jZS5iaW5kKHRoaXMpKSB7XG5cbiAgICBpZiAoY29sbGVjdGlvbi5kaWZmZXJlbmNlQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcih0aXRsZSk7XG4gICAgY29sbGVjdGlvbi5mb3JFYWNoRGlmZmVyZW5jZSgoaWQsIGRpZmYpID0+IGZvcm1hdHRlcihlbnRyeVR5cGUsIGlkLCBkaWZmKSk7XG4gICAgdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmludFNlY3Rpb25IZWFkZXIodGl0bGU6IHN0cmluZykge1xuICAgIHRoaXMucHJpbnQoY2hhbGsudW5kZXJsaW5lKGNoYWxrLmJvbGQodGl0bGUpKSk7XG4gIH1cblxuICBwdWJsaWMgcHJpbnRTZWN0aW9uRm9vdGVyKCkge1xuICAgIHRoaXMucHJpbnQoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaW50IGEgc2ltcGxlIGRpZmZlcmVuY2UgZm9yIGEgZ2l2ZW4gbmFtZWQgZW50aXR5LlxuICAgKlxuICAgKiBAcGFyYW0gbG9naWNhbElkIHRoZSBuYW1lIG9mIHRoZSBlbnRpdHkgdGhhdCBpcyBkaWZmZXJlbnQuXG4gICAqIEBwYXJhbSBkaWZmIHRoZSBkaWZmZXJlbmNlIHRvIGJlIHJlbmRlcmVkLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdERpZmZlcmVuY2UodHlwZTogc3RyaW5nLCBsb2dpY2FsSWQ6IHN0cmluZywgZGlmZjogRGlmZmVyZW5jZTxhbnk+IHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFkaWZmIHx8ICFkaWZmLmlzRGlmZmVyZW50KSB7IHJldHVybjsgfVxuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKGRpZmYub2xkVmFsdWUsIGNoYWxrLnJlZCk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmZvcm1hdFZhbHVlKGRpZmYubmV3VmFsdWUsIGNoYWxrLmdyZWVuKTtcbiAgICBpZiAoZGlmZi5pc0FkZGl0aW9uKSB7XG4gICAgICB2YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5pc1VwZGF0ZSkge1xuICAgICAgdmFsdWUgPSBgJHtvbGRWYWx1ZX0gdG8gJHtuZXdWYWx1ZX1gO1xuICAgIH0gZWxzZSBpZiAoZGlmZi5pc1JlbW92YWwpIHtcbiAgICAgIHZhbHVlID0gb2xkVmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5wcmludChgJHt0aGlzLmZvcm1hdFByZWZpeChkaWZmKX0gJHtjaGFsay5jeWFuKHR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxJZCl9OiAke3ZhbHVlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFByaW50IGEgcmVzb3VyY2UgZGlmZmVyZW5jZSBmb3IgYSBnaXZlbiBsb2dpY2FsIElELlxuICAgKlxuICAgKiBAcGFyYW0gbG9naWNhbElkIHRoZSBsb2dpY2FsIElEIG9mIHRoZSByZXNvdXJjZSB0aGF0IGNoYW5nZWQuXG4gICAqIEBwYXJhbSBkaWZmICAgICAgdGhlIGNoYW5nZSB0byBiZSByZW5kZXJlZC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRSZXNvdXJjZURpZmZlcmVuY2UoX3R5cGU6IHN0cmluZywgbG9naWNhbElkOiBzdHJpbmcsIGRpZmY6IFJlc291cmNlRGlmZmVyZW5jZSkge1xuICAgIGlmICghZGlmZi5pc0RpZmZlcmVudCkgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IGRpZmYuaXNSZW1vdmFsID8gZGlmZi5vbGRSZXNvdXJjZVR5cGUgOiBkaWZmLm5ld1Jlc291cmNlVHlwZTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgdGhpcy5wcmludChgJHt0aGlzLmZvcm1hdFJlc291cmNlUHJlZml4KGRpZmYpfSAke3RoaXMuZm9ybWF0VmFsdWUocmVzb3VyY2VUeXBlLCBjaGFsay5jeWFuKX0gJHt0aGlzLmZvcm1hdExvZ2ljYWxJZChsb2dpY2FsSWQpfSAke3RoaXMuZm9ybWF0SW1wYWN0KGRpZmYuY2hhbmdlSW1wYWN0KX1gKTtcblxuICAgIGlmIChkaWZmLmlzVXBkYXRlKSB7XG4gICAgICBjb25zdCBkaWZmZXJlbmNlQ291bnQgPSBkaWZmLmRpZmZlcmVuY2VDb3VudDtcbiAgICAgIGxldCBwcm9jZXNzZWRDb3VudCA9IDA7XG4gICAgICBkaWZmLmZvckVhY2hEaWZmZXJlbmNlKChfLCBuYW1lLCB2YWx1ZXMpID0+IHtcbiAgICAgICAgcHJvY2Vzc2VkQ291bnQgKz0gMTtcbiAgICAgICAgdGhpcy5mb3JtYXRUcmVlRGlmZihuYW1lLCB2YWx1ZXMsIHByb2Nlc3NlZENvdW50ID09PSBkaWZmZXJlbmNlQ291bnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZvcm1hdFJlc291cmNlUHJlZml4KGRpZmY6IFJlc291cmNlRGlmZmVyZW5jZSkge1xuICAgIGlmIChkaWZmLmlzSW1wb3J0KSB7IHJldHVybiBJTVBPUlQ7IH1cblxuICAgIHJldHVybiB0aGlzLmZvcm1hdFByZWZpeChkaWZmKTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtYXRQcmVmaXg8VD4oZGlmZjogRGlmZmVyZW5jZTxUPikge1xuICAgIGlmIChkaWZmLmlzQWRkaXRpb24pIHsgcmV0dXJuIEFERElUSU9OOyB9XG4gICAgaWYgKGRpZmYuaXNVcGRhdGUpIHsgcmV0dXJuIFVQREFURTsgfVxuICAgIGlmIChkaWZmLmlzUmVtb3ZhbCkgeyByZXR1cm4gUkVNT1ZBTDsgfVxuICAgIHJldHVybiBjaGFsay53aGl0ZSgnWz9dJyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWQuXG4gICAqIEBwYXJhbSBjb2xvciB0aGUgY29sb3IgdG8gYmUgdXNlZC5cbiAgICpcbiAgICogQHJldHVybnMgdGhlIGZvcm1hdHRlZCBzdHJpbmcsIHdpdGggY29sb3IgYXBwbGllZC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRWYWx1ZSh2YWx1ZTogYW55LCBjb2xvcjogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmcpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGNvbG9yKHZhbHVlKTsgfVxuICAgIHJldHVybiBjb2xvcihKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBpbXBhY3QgdGhlIGltcGFjdCB0byBiZSBmb3JtYXR0ZWRcbiAgICogQHJldHVybnMgYSB1c2VyLWZyaWVuZGx5LCBjb2xvcmVkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGltcGFjdC5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXRJbXBhY3QoaW1wYWN0OiBSZXNvdXJjZUltcGFjdCkge1xuICAgIHN3aXRjaCAoaW1wYWN0KSB7XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFOlxuICAgICAgICByZXR1cm4gY2hhbGsuaXRhbGljKGNoYWxrLnllbGxvdygnbWF5IGJlIHJlcGxhY2VkJykpO1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0U6XG4gICAgICAgIHJldHVybiBjaGFsay5pdGFsaWMoY2hhbGsuYm9sZChjaGFsay5yZWQoJ3JlcGxhY2UnKSkpO1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX0RFU1RST1k6XG4gICAgICAgIHJldHVybiBjaGFsay5pdGFsaWMoY2hhbGsuYm9sZChjaGFsay5yZWQoJ2Rlc3Ryb3knKSkpO1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTjpcbiAgICAgICAgcmV0dXJuIGNoYWxrLml0YWxpYyhjaGFsay55ZWxsb3coJ29ycGhhbicpKTtcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9JTVBPUlQ6XG4gICAgICAgIHJldHVybiBjaGFsay5pdGFsaWMoY2hhbGsuYmx1ZSgnaW1wb3J0JykpO1xuICAgICAgY2FzZSBSZXNvdXJjZUltcGFjdC5XSUxMX1VQREFURTpcbiAgICAgIGNhc2UgUmVzb3VyY2VJbXBhY3QuV0lMTF9DUkVBVEU6XG4gICAgICBjYXNlIFJlc291cmNlSW1wYWN0Lk5PX0NIQU5HRTpcbiAgICAgICAgcmV0dXJuICcnOyAvLyBubyBleHRyYSBpbmZvIGlzIGdhaW5lZCBoZXJlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSB0cmVlIG9mIGRpZmZlcmVuY2VzIHVuZGVyIGEgcGFydGljdWxhciBuYW1lLlxuICAgKiBAcGFyYW0gbmFtZSAgICB0aGUgbmFtZSBvZiB0aGUgcm9vdCBvZiB0aGUgdHJlZS5cbiAgICogQHBhcmFtIGRpZmYgICAgdGhlIGRpZmZlcmVuY2Ugb24gdGhlIHRyZWUuXG4gICAqIEBwYXJhbSBsYXN0ICAgIHdoZXRoZXIgdGhpcyBpcyB0aGUgbGFzdCBub2RlIG9mIGEgcGFyZW50IHRyZWUuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0VHJlZURpZmYobmFtZTogc3RyaW5nLCBkaWZmOiBEaWZmZXJlbmNlPGFueT4sIGxhc3Q6IGJvb2xlYW4pIHtcbiAgICBsZXQgYWRkaXRpb25hbEluZm8gPSAnJztcbiAgICBpZiAoaXNQcm9wZXJ0eURpZmZlcmVuY2UoZGlmZikpIHtcbiAgICAgIGlmIChkaWZmLmNoYW5nZUltcGFjdCA9PT0gUmVzb3VyY2VJbXBhY3QuTUFZX1JFUExBQ0UpIHtcbiAgICAgICAgYWRkaXRpb25hbEluZm8gPSAnIChtYXkgY2F1c2UgcmVwbGFjZW1lbnQpJztcbiAgICAgIH0gZWxzZSBpZiAoZGlmZi5jaGFuZ2VJbXBhY3QgPT09IFJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRSkge1xuICAgICAgICBhZGRpdGlvbmFsSW5mbyA9ICcgKHJlcXVpcmVzIHJlcGxhY2VtZW50KSc7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJpbnQoJyAlc+KUgCAlcyAlcyVzJywgbGFzdCA/ICfilJQnIDogJ+KUnCcsIHRoaXMuY2hhbmdlVGFnKGRpZmYub2xkVmFsdWUsIGRpZmYubmV3VmFsdWUpLCBuYW1lLCBhZGRpdGlvbmFsSW5mbyk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0T2JqZWN0RGlmZihkaWZmLm9sZFZhbHVlLCBkaWZmLm5ld1ZhbHVlLCBgICR7bGFzdCA/ICcgJyA6ICfilIInfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gb2JqZWN0cywgbG9va2luZyBmb3IgdGhlIGRpZmZlcmVuY2VzIGFzIGRlZXAgYXMgcG9zc2libGUsXG4gICAqIGFuZCByZW5kZXJpbmcgYSB0cmVlIGdyYXBoIG9mIHRoZSBwYXRoIHVudGlsIHRoZSBkaWZmZXJlbmNlIGlzIGZvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0gb2xkT2JqZWN0ICB0aGUgb2xkIG9iamVjdC5cbiAgICogQHBhcmFtIG5ld09iamVjdCAgdGhlIG5ldyBvYmplY3QuXG4gICAqIEBwYXJhbSBsaW5lUHJlZml4IGEgcHJlZml4IChpbmRlbnQtbGlrZSkgdG8gYmUgdXNlZCBvbiBldmVyeSBsaW5lLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdE9iamVjdERpZmYob2xkT2JqZWN0OiBhbnksIG5ld09iamVjdDogYW55LCBsaW5lUHJlZml4OiBzdHJpbmcpIHtcbiAgICBpZiAoKHR5cGVvZiBvbGRPYmplY3QgIT09IHR5cGVvZiBuZXdPYmplY3QpIHx8IEFycmF5LmlzQXJyYXkob2xkT2JqZWN0KSB8fCB0eXBlb2Ygb2xkT2JqZWN0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2xkT2JqZWN0ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKG9sZE9iamVjdCAhPT0gdW5kZWZpbmVkICYmIG5ld09iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb2xkT2JqZWN0ID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbmV3T2JqZWN0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGNvbnN0IG9sZFN0ciA9IEpTT04uc3RyaW5naWZ5KG9sZE9iamVjdCwgbnVsbCwgMik7XG4gICAgICAgICAgY29uc3QgbmV3U3RyID0gSlNPTi5zdHJpbmdpZnkobmV3T2JqZWN0LCBudWxsLCAyKTtcbiAgICAgICAgICBjb25zdCBkaWZmID0gX2RpZmZTdHJpbmdzKG9sZFN0ciwgbmV3U3RyLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGlmZi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wcmludCgnJXMgICAlcyAlcycsIGxpbmVQcmVmaXgsIGkgPT09IDAgPyAn4pSU4pSAJyA6ICcgICcsIGRpZmZbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUnOKUgCAlcyAlcycsIGxpbmVQcmVmaXgsIFJFTU9WQUwsIHRoaXMuZm9ybWF0VmFsdWUob2xkT2JqZWN0LCBjaGFsay5yZWQpKTtcbiAgICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUlOKUgCAlcyAlcycsIGxpbmVQcmVmaXgsIEFERElUSU9OLCB0aGlzLmZvcm1hdFZhbHVlKG5ld09iamVjdCwgY2hhbGsuZ3JlZW4pKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvbGRPYmplY3QgIT09IHVuZGVmaW5lZCAvKiAmJiBuZXdPYmplY3QgPT09IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB0aGlzLnByaW50KCclcyAgIOKUlOKUgCAlcycsIGxpbmVQcmVmaXgsIHRoaXMuZm9ybWF0VmFsdWUob2xkT2JqZWN0LCBjaGFsay5yZWQpKTtcbiAgICAgIH0gZWxzZSAvKiBpZiAob2xkT2JqZWN0ID09PSB1bmRlZmluZWQgJiYgbmV3T2JqZWN0ICE9PSB1bmRlZmluZWQpICovIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICDilJTilIAgJXMnLCBsaW5lUHJlZml4LCB0aGlzLmZvcm1hdFZhbHVlKG5ld09iamVjdCwgY2hhbGsuZ3JlZW4pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5U2V0ID0gbmV3IFNldChPYmplY3Qua2V5cyhvbGRPYmplY3QpKTtcbiAgICBPYmplY3Qua2V5cyhuZXdPYmplY3QpLmZvckVhY2goayA9PiBrZXlTZXQuYWRkKGspKTtcbiAgICBjb25zdCBrZXlzID0gbmV3IEFycmF5KC4uLmtleVNldCkuZmlsdGVyKGsgPT4gIWRlZXBFcXVhbChvbGRPYmplY3Rba10sIG5ld09iamVjdFtrXSkpLnNvcnQoKTtcbiAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gb2xkT2JqZWN0W2tleV07XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ld09iamVjdFtrZXldO1xuICAgICAgY29uc3QgdHJlZVByZWZpeCA9IGtleSA9PT0gbGFzdEtleSA/ICfilJQnIDogJ+KUnCc7XG4gICAgICBpZiAob2xkVmFsdWUgIT09IHVuZGVmaW5lZCAmJiBuZXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAgJXPilIAgJXMgJXM6JywgbGluZVByZWZpeCwgdHJlZVByZWZpeCwgdGhpcy5jaGFuZ2VUYWcob2xkVmFsdWUsIG5ld1ZhbHVlKSwgY2hhbGsuYmx1ZShgLiR7a2V5fWApKTtcbiAgICAgICAgdGhpcy5mb3JtYXRPYmplY3REaWZmKG9sZFZhbHVlLCBuZXdWYWx1ZSwgYCR7bGluZVByZWZpeH0gICAke2tleSA9PT0gbGFzdEtleSA/ICcgJyA6ICfilIInfWApO1xuICAgICAgfSBlbHNlIGlmIChvbGRWYWx1ZSAhPT0gdW5kZWZpbmVkIC8qICYmIG5ld1ZhbHVlID09PSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdGhpcy5wcmludCgnJXMgICAlc+KUgCAlcyBSZW1vdmVkOiAlcycsIGxpbmVQcmVmaXgsIHRyZWVQcmVmaXgsIFJFTU9WQUwsIGNoYWxrLmJsdWUoYC4ke2tleX1gKSk7XG4gICAgICB9IGVsc2UgLyogaWYgKG9sZFZhbHVlID09PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCAqLyB7XG4gICAgICAgIHRoaXMucHJpbnQoJyVzICAgJXPilIAgJXMgQWRkZWQ6ICVzJywgbGluZVByZWZpeCwgdHJlZVByZWZpeCwgQURESVRJT04sIGNoYWxrLmJsdWUoYC4ke2tleX1gKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvbGRWYWx1ZSB0aGUgb2xkIHZhbHVlIG9mIGEgZGlmZmVyZW5jZS5cbiAgICogQHBhcmFtIG5ld1ZhbHVlIHRoZSBuZXcgdmFsdWUgb2YgYSBkaWZmZXJlbmNlLlxuICAgKlxuICAgKiBAcmV0dXJucyBhIHRhZyB0byBiZSByZW5kZXJlZCBpbiB0aGUgZGlmZiwgcmVmbGVjdGluZyB3aGV0aGVyIHRoZSBkaWZmZXJlbmNlXG4gICAqICAgICAgd2FzIGFuIEFERElUSU9OLCBVUERBVEUgb3IgUkVNT1ZBTC5cbiAgICovXG4gIHB1YmxpYyBjaGFuZ2VUYWcob2xkVmFsdWU6IGFueSB8IHVuZGVmaW5lZCwgbmV3VmFsdWU6IGFueSB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFVQREFURTtcbiAgICB9IGVsc2UgaWYgKG9sZFZhbHVlICE9PSB1bmRlZmluZWQgLyogJiYgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCovKSB7XG4gICAgICByZXR1cm4gUkVNT1ZBTDtcbiAgICB9IGVsc2UgLyogaWYgKG9sZFZhbHVlID09PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgIT09IHVuZGVmaW5lZCkgKi8ge1xuICAgICAgcmV0dXJuIEFERElUSU9OO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kICdhd3M6Y2RrOnBhdGgnIG1ldGFkYXRhIGluIHRoZSBkaWZmIGFuZCBhZGQgaXQgdG8gdGhlIGxvZ2ljYWxUb1BhdGhNYXBcbiAgICpcbiAgICogVGhlcmUgYXJlIG11bHRpcGxlIHNvdXJjZXMgb2YgbG9naWNhbElEIC0+IHBhdGggbWFwcGluZ3M6IHN5bnRoIG1ldGFkYXRhXG4gICAqIGFuZCByZXNvdXJjZSBtZXRhZGF0YSwgYW5kIHdlIGNvbWJpbmUgYWxsIHNvdXJjZXMgaW50byBhIHNpbmdsZSBtYXAuXG4gICAqL1xuICBwdWJsaWMgcmVhZENvbnN0cnVjdFBhdGhzRnJvbSh0ZW1wbGF0ZURpZmY6IFRlbXBsYXRlRGlmZikge1xuICAgIGZvciAoY29uc3QgW2xvZ2ljYWxJZCwgcmVzb3VyY2VEaWZmXSBvZiBPYmplY3QuZW50cmllcyh0ZW1wbGF0ZURpZmYucmVzb3VyY2VzKSkge1xuICAgICAgaWYgKCFyZXNvdXJjZURpZmYpIHsgY29udGludWU7IH1cblxuICAgICAgY29uc3Qgb2xkUGF0aE1ldGFkYXRhID0gcmVzb3VyY2VEaWZmLm9sZFZhbHVlPy5NZXRhZGF0YT8uW1BBVEhfTUVUQURBVEFfS0VZXTtcbiAgICAgIGlmIChvbGRQYXRoTWV0YWRhdGEgJiYgIShsb2dpY2FsSWQgaW4gdGhpcy5sb2dpY2FsVG9QYXRoTWFwKSkge1xuICAgICAgICB0aGlzLmxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXSA9IG9sZFBhdGhNZXRhZGF0YTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UGF0aE1ldGFkYXRhID0gcmVzb3VyY2VEaWZmLm5ld1ZhbHVlPy5NZXRhZGF0YT8uW1BBVEhfTUVUQURBVEFfS0VZXTtcbiAgICAgIGlmIChuZXdQYXRoTWV0YWRhdGEgJiYgIShsb2dpY2FsSWQgaW4gdGhpcy5sb2dpY2FsVG9QYXRoTWFwKSkge1xuICAgICAgICB0aGlzLmxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXSA9IG5ld1BhdGhNZXRhZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxJZDogc3RyaW5nKSB7XG4gICAgLy8gaWYgd2UgaGF2ZSBhIHBhdGggaW4gdGhlIG1hcCwgcmV0dXJuIGl0XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplZExvZ2ljYWxJZFBhdGgobG9naWNhbElkKTtcblxuICAgIGlmIChub3JtYWxpemVkKSB7XG4gICAgICByZXR1cm4gYCR7bm9ybWFsaXplZH0gJHtjaGFsay5ncmF5KGxvZ2ljYWxJZCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9naWNhbElkO1xuICB9XG5cbiAgcHVibGljIG5vcm1hbGl6ZWRMb2dpY2FsSWRQYXRoKGxvZ2ljYWxJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGEgcGF0aCBpbiB0aGUgbWFwLCByZXR1cm4gaXRcbiAgICBjb25zdCBwYXRoID0gdGhpcy5sb2dpY2FsVG9QYXRoTWFwW2xvZ2ljYWxJZF07XG4gICAgcmV0dXJuIHBhdGggPyBub3JtYWxpemVQYXRoKHBhdGgpIDogdW5kZWZpbmVkO1xuXG4gICAgLyoqXG4gICAgICogUGF0aCBpcyBzdXBwb3NlZCB0byBzdGFydCB3aXRoIFwiL3N0YWNrLW5hbWVcIi4gSWYgdGhpcyBpcyB0aGUgY2FzZSAoaS5lLiBwYXRoIGhhcyBtb3JlIHRoYW5cbiAgICAgKiB0d28gY29tcG9uZW50cywgd2UgcmVtb3ZlIHRoZSBmaXJzdCBwYXJ0LiBPdGhlcndpc2UsIHdlIGp1c3QgdXNlIHRoZSBmdWxsIHBhdGguXG4gICAgICogQHBhcmFtIHBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3JtYWxpemVQYXRoKHA6IHN0cmluZykge1xuICAgICAgaWYgKHAuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHAgPSBwLnNsaWNlKDEpO1xuICAgICAgfVxuXG4gICAgICBsZXQgcGFydHMgPSBwLnNwbGl0KCcvJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDEpO1xuXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgaWYgaXQncyBcIlJlc291cmNlXCIgb3IgXCJEZWZhdWx0XCIgKGlmIHdlIGhhdmUgbW9yZSB0aGFuIGEgc2luZ2xlIGNvbXBvbmVudClcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBjb25zdCBsYXN0ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3QgPT09ICdSZXNvdXJjZScgfHwgbGFzdCA9PT0gJ0RlZmF1bHQnKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHAgPSBwYXJ0cy5qb2luKCcvJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0SWFtQ2hhbmdlcyhjaGFuZ2VzOiBJYW1DaGFuZ2VzKSB7XG4gICAgaWYgKCFjaGFuZ2VzLmhhc0NoYW5nZXMpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAoY2hhbmdlcy5zdGF0ZW1lbnRzLmhhc0NoYW5nZXMpIHtcbiAgICAgIHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdJQU0gU3RhdGVtZW50IENoYW5nZXMnKTtcbiAgICAgIHRoaXMucHJpbnQoZm9ybWF0VGFibGUodGhpcy5kZWVwU3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMoY2hhbmdlcy5zdW1tYXJpemVTdGF0ZW1lbnRzKCkpLCB0aGlzLnN0cmVhbS5jb2x1bW5zKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMubWFuYWdlZFBvbGljaWVzLmhhc0NoYW5nZXMpIHtcbiAgICAgIHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdJQU0gUG9saWN5IENoYW5nZXMnKTtcbiAgICAgIHRoaXMucHJpbnQoZm9ybWF0VGFibGUodGhpcy5kZWVwU3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMoY2hhbmdlcy5zdW1tYXJpemVNYW5hZ2VkUG9saWNpZXMoKSksIHRoaXMuc3RyZWFtLmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5zc29QZXJtaXNzaW9uU2V0cy5oYXNDaGFuZ2VzIHx8IGNoYW5nZXMuc3NvSW5zdGFuY2VBQ0FDb25maWdzLmhhc0NoYW5nZXMgfHwgY2hhbmdlcy5zc29Bc3NpZ25tZW50cy5oYXNDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignSUFNIElkZW50aXR5IENlbnRlciBDaGFuZ2VzJyk7XG4gICAgICBpZiAoY2hhbmdlcy5zc29QZXJtaXNzaW9uU2V0cy5oYXNDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMucHJpbnQoZm9ybWF0VGFibGUodGhpcy5kZWVwU3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMoY2hhbmdlcy5zdW1tYXJpemVTc29QZXJtaXNzaW9uU2V0cygpKSwgdGhpcy5zdHJlYW0uY29sdW1ucykpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMuc3NvSW5zdGFuY2VBQ0FDb25maWdzLmhhc0NoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5wcmludChmb3JtYXRUYWJsZSh0aGlzLmRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhjaGFuZ2VzLnN1bW1hcml6ZVNzb0luc3RhbmNlQUNBQ29uZmlncygpKSwgdGhpcy5zdHJlYW0uY29sdW1ucykpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXMuc3NvQXNzaWdubWVudHMuaGFzQ2hhbmdlcykge1xuICAgICAgICB0aGlzLnByaW50KGZvcm1hdFRhYmxlKHRoaXMuZGVlcFN1YnN0aXR1dGVCcmFjZWRMb2dpY2FsSWRzKGNoYW5nZXMuc3VtbWFyaXplU3NvQXNzaWdubWVudHMoKSksIHRoaXMuc3RyZWFtLmNvbHVtbnMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0U2VjdXJpdHlHcm91cENoYW5nZXMoY2hhbmdlczogU2VjdXJpdHlHcm91cENoYW5nZXMpIHtcbiAgICBpZiAoIWNoYW5nZXMuaGFzQ2hhbmdlcykgeyByZXR1cm47IH1cblxuICAgIHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdTZWN1cml0eSBHcm91cCBDaGFuZ2VzJyk7XG4gICAgdGhpcy5wcmludChmb3JtYXRUYWJsZSh0aGlzLmRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhjaGFuZ2VzLnN1bW1hcml6ZSgpKSwgdGhpcy5zdHJlYW0uY29sdW1ucykpO1xuICB9XG5cbiAgcHVibGljIGRlZXBTdWJzdGl0dXRlQnJhY2VkTG9naWNhbElkcyhyb3dzOiBzdHJpbmdbXVtdKTogc3RyaW5nW11bXSB7XG4gICAgcmV0dXJuIHJvd3MubWFwKHJvdyA9PiByb3cubWFwKHRoaXMuc3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMuYmluZCh0aGlzKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnN0aXR1dGUgYWxsIHN0cmluZ3MgbGlrZSAke0xvZ0lkLnh4eH0gd2l0aCB0aGUgcGF0aCBpbnN0ZWFkIG9mIHRoZSBsb2dpY2FsIElEXG4gICAqL1xuICBwdWJsaWMgc3Vic3RpdHV0ZUJyYWNlZExvZ2ljYWxJZHMoc291cmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzb3VyY2UucmVwbGFjZSgvXFwkXFx7KFteLn1dKykoLltefV0rKT9cXH0vaWcsIChfbWF0Y2gsIGxvZ0lkLCBzdWZmaXgpID0+IHtcbiAgICAgIHJldHVybiAnJHsnICsgKHRoaXMubm9ybWFsaXplZExvZ2ljYWxJZFBhdGgobG9nSWQpIHx8IGxvZ0lkKSArIChzdWZmaXggfHwgJycpICsgJ30nO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQSBwYXRjaCBhcyByZXR1cm5lZCBieSBgYGRpZmYuc3RydWN0dXJlZFBhdGNoYGAuXG4gKi9cbmludGVyZmFjZSBQYXRjaCB7XG4gIC8qKlxuICAgKiBIdW5rcyBpbiB0aGUgcGF0Y2guXG4gICAqL1xuICBodW5rczogUmVhZG9ubHlBcnJheTxQYXRjaEh1bms+O1xufVxuXG4vKipcbiAqIEEgaHVuayBpbiBhIHBhdGNoIHByb2R1Y2VkIGJ5IGBgZGlmZi5zdHJ1Y3R1cmVkUGF0Y2hgYC5cbiAqL1xuaW50ZXJmYWNlIFBhdGNoSHVuayB7XG4gIG9sZFN0YXJ0OiBudW1iZXI7XG4gIG9sZExpbmVzOiBudW1iZXI7XG4gIG5ld1N0YXJ0OiBudW1iZXI7XG4gIG5ld0xpbmVzOiBudW1iZXI7XG4gIGxpbmVzOiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdW5pZmllZCBkaWZmIG9mIHR3byBzdHJpbmdzLlxuICpcbiAqIEBwYXJhbSBvbGRTdHIgIHRoZSBcIm9sZFwiIHZlcnNpb24gb2YgdGhlIHN0cmluZy5cbiAqIEBwYXJhbSBuZXdTdHIgIHRoZSBcIm5ld1wiIHZlcnNpb24gb2YgdGhlIHN0cmluZy5cbiAqIEBwYXJhbSBjb250ZXh0IHRoZSBudW1iZXIgb2YgY29udGV4dCBsaW5lcyB0byB1c2UgaW4gYXJiaXRyYXJ5IEpTT04gZGlmZi5cbiAqXG4gKiBAcmV0dXJucyBhbiBhcnJheSBvZiBkaWZmIGxpbmVzLlxuICovXG5mdW5jdGlvbiBfZGlmZlN0cmluZ3Mob2xkU3RyOiBzdHJpbmcsIG5ld1N0cjogc3RyaW5nLCBjb250ZXh0OiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHBhdGNoOiBQYXRjaCA9IHN0cnVjdHVyZWRQYXRjaChudWxsLCBudWxsLCBvbGRTdHIsIG5ld1N0ciwgbnVsbCwgbnVsbCwgeyBjb250ZXh0IH0pO1xuICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IGh1bmsgb2YgcGF0Y2guaHVua3MpIHtcbiAgICByZXN1bHQucHVzaChjaGFsay5tYWdlbnRhKGBAQCAtJHtodW5rLm9sZFN0YXJ0fSwke2h1bmsub2xkTGluZXN9ICske2h1bmsubmV3U3RhcnR9LCR7aHVuay5uZXdMaW5lc30gQEBgKSk7XG4gICAgY29uc3QgYmFzZUluZGVudCA9IF9maW5kSW5kZW50KGh1bmsubGluZXMpO1xuICAgIGZvciAoY29uc3QgbGluZSBvZiBodW5rLmxpbmVzKSB7XG4gICAgICAvLyBEb24ndCBjYXJlIGFib3V0IHRlcm1pbmF0aW9uIG5ld2xpbmUuXG4gICAgICBpZiAobGluZSA9PT0gJ1xcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZScpIHsgY29udGludWU7IH1cbiAgICAgIGNvbnN0IG1hcmtlciA9IGxpbmUuY2hhckF0KDApO1xuICAgICAgY29uc3QgdGV4dCA9IGxpbmUuc2xpY2UoMSArIGJhc2VJbmRlbnQpO1xuICAgICAgc3dpdGNoIChtYXJrZXIpIHtcbiAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgcmVzdWx0LnB1c2goYCR7Q09OVEVYVH0gJHt0ZXh0fWApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICByZXN1bHQucHVzaChjaGFsay5ib2xkKGAke0FERElUSU9OfSAke2NoYWxrLmdyZWVuKHRleHQpfWApKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgcmVzdWx0LnB1c2goY2hhbGsuYm9sZChgJHtSRU1PVkFMfSAke2NoYWxrLnJlZCh0ZXh0KX1gKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGRpZmYgbWFya2VyOiAke21hcmtlcn0gKGZ1bGwgbGluZTogJHtsaW5lfSlgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcblxuICBmdW5jdGlvbiBfZmluZEluZGVudChsaW5lczogc3RyaW5nW10pOiBudW1iZXIge1xuICAgIGxldCBpbmRlbnQgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbGluZS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobGluZS5jaGFyQXQoaSkgIT09ICcgJykge1xuICAgICAgICAgIGluZGVudCA9IGluZGVudCA+IGkgLSAxID8gaSAtIDEgOiBpbmRlbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluZGVudDtcbiAgfVxufVxuIl19
|
package/lib/iam/iam-changes.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { PropertyScrutinyType, ResourceScrutinyType } from '@aws-cdk/service-spec-types';
|
|
2
|
+
import { SsoAssignment, SsoInstanceACAConfig, SsoPermissionSet } from './iam-identity-center';
|
|
2
3
|
import { ManagedPolicyAttachment, ManagedPolicyJson } from './managed-policy';
|
|
3
4
|
import { Statement, StatementJson } from './statement';
|
|
4
5
|
import { MaybeParsed } from '../diff/maybe-parsed';
|
|
@@ -9,13 +10,16 @@ export interface IamChangesProps {
|
|
|
9
10
|
resourceChanges: ResourceChange[];
|
|
10
11
|
}
|
|
11
12
|
/**
|
|
12
|
-
* Changes to IAM statements
|
|
13
|
+
* Changes to IAM statements and IAM identity center
|
|
13
14
|
*/
|
|
14
15
|
export declare class IamChanges {
|
|
15
16
|
static IamPropertyScrutinies: PropertyScrutinyType[];
|
|
16
17
|
static IamResourceScrutinies: ResourceScrutinyType[];
|
|
17
18
|
readonly statements: DiffableCollection<Statement>;
|
|
18
19
|
readonly managedPolicies: DiffableCollection<ManagedPolicyAttachment>;
|
|
20
|
+
readonly ssoPermissionSets: DiffableCollection<SsoPermissionSet>;
|
|
21
|
+
readonly ssoAssignments: DiffableCollection<SsoAssignment>;
|
|
22
|
+
readonly ssoInstanceACAConfigs: DiffableCollection<SsoInstanceACAConfig>;
|
|
19
23
|
constructor(props: IamChangesProps);
|
|
20
24
|
get hasChanges(): boolean;
|
|
21
25
|
/**
|
|
@@ -30,6 +34,9 @@ export declare class IamChanges {
|
|
|
30
34
|
*/
|
|
31
35
|
summarizeStatements(): string[][];
|
|
32
36
|
summarizeManagedPolicies(): string[][];
|
|
37
|
+
summarizeSsoAssignments(): string[][];
|
|
38
|
+
summarizeSsoInstanceACAConfigs(): string[][];
|
|
39
|
+
summarizeSsoPermissionSets(): string[][];
|
|
33
40
|
/**
|
|
34
41
|
* Return a machine-readable version of the changes.
|
|
35
42
|
* This is only used in tests.
|
|
@@ -47,6 +54,9 @@ export declare class IamChanges {
|
|
|
47
54
|
* Parse an IAM::Policy resource
|
|
48
55
|
*/
|
|
49
56
|
private readIdentityPolicyResource;
|
|
57
|
+
private readSsoInstanceACAConfigs;
|
|
58
|
+
private readSsoAssignments;
|
|
59
|
+
private readSsoPermissionSet;
|
|
50
60
|
private readResourceStatements;
|
|
51
61
|
/**
|
|
52
62
|
* Parse an AWS::*::{Bucket,Topic,Queue}policy
|
package/lib/iam/iam-changes.js
CHANGED
|
@@ -3,18 +3,23 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.IamChanges = void 0;
|
|
4
4
|
const service_spec_types_1 = require("@aws-cdk/service-spec-types");
|
|
5
5
|
const chalk = require("chalk");
|
|
6
|
+
const iam_identity_center_1 = require("./iam-identity-center");
|
|
6
7
|
const managed_policy_1 = require("./managed-policy");
|
|
7
8
|
const statement_1 = require("./statement");
|
|
8
9
|
const diffable_1 = require("../diffable");
|
|
9
10
|
const render_intrinsics_1 = require("../render-intrinsics");
|
|
10
11
|
const util_1 = require("../util");
|
|
11
12
|
/**
|
|
12
|
-
* Changes to IAM statements
|
|
13
|
+
* Changes to IAM statements and IAM identity center
|
|
13
14
|
*/
|
|
14
15
|
class IamChanges {
|
|
15
16
|
constructor(props) {
|
|
17
|
+
// each entry in a DiffableCollection is used to generate a single row of the security changes table that is presented for cdk diff and cdk deploy.
|
|
16
18
|
this.statements = new diffable_1.DiffableCollection();
|
|
17
19
|
this.managedPolicies = new diffable_1.DiffableCollection();
|
|
20
|
+
this.ssoPermissionSets = new diffable_1.DiffableCollection();
|
|
21
|
+
this.ssoAssignments = new diffable_1.DiffableCollection();
|
|
22
|
+
this.ssoInstanceACAConfigs = new diffable_1.DiffableCollection();
|
|
18
23
|
for (const propertyChange of props.propertyChanges) {
|
|
19
24
|
this.readPropertyChange(propertyChange);
|
|
20
25
|
}
|
|
@@ -23,9 +28,16 @@ class IamChanges {
|
|
|
23
28
|
}
|
|
24
29
|
this.statements.calculateDiff();
|
|
25
30
|
this.managedPolicies.calculateDiff();
|
|
31
|
+
this.ssoPermissionSets.calculateDiff();
|
|
32
|
+
this.ssoAssignments.calculateDiff();
|
|
33
|
+
this.ssoInstanceACAConfigs.calculateDiff();
|
|
26
34
|
}
|
|
27
35
|
get hasChanges() {
|
|
28
|
-
return this.statements.hasChanges
|
|
36
|
+
return (this.statements.hasChanges
|
|
37
|
+
|| this.managedPolicies.hasChanges
|
|
38
|
+
|| this.ssoPermissionSets.hasChanges
|
|
39
|
+
|| this.ssoAssignments.hasChanges
|
|
40
|
+
|| this.ssoInstanceACAConfigs.hasChanges);
|
|
29
41
|
}
|
|
30
42
|
/**
|
|
31
43
|
* Return whether the changes include broadened permissions
|
|
@@ -36,7 +48,10 @@ class IamChanges {
|
|
|
36
48
|
get permissionsBroadened() {
|
|
37
49
|
return this.statements.additions.some(s => !s.isNegativeStatement)
|
|
38
50
|
|| this.statements.removals.some(s => s.isNegativeStatement)
|
|
39
|
-
|| this.managedPolicies.hasAdditions
|
|
51
|
+
|| this.managedPolicies.hasAdditions
|
|
52
|
+
|| this.ssoPermissionSets.hasAdditions
|
|
53
|
+
|| this.ssoAssignments.hasAdditions
|
|
54
|
+
|| this.ssoInstanceACAConfigs.hasAdditions;
|
|
40
55
|
}
|
|
41
56
|
/**
|
|
42
57
|
* Return a summary table of changes
|
|
@@ -59,7 +74,7 @@ class IamChanges {
|
|
|
59
74
|
for (const statement of this.statements.removals) {
|
|
60
75
|
const renderedStatement = statement.render();
|
|
61
76
|
ret.push([
|
|
62
|
-
|
|
77
|
+
'-',
|
|
63
78
|
renderedStatement.resource,
|
|
64
79
|
renderedStatement.effect,
|
|
65
80
|
renderedStatement.action,
|
|
@@ -94,6 +109,108 @@ class IamChanges {
|
|
|
94
109
|
ret.splice(0, 0, header);
|
|
95
110
|
return ret;
|
|
96
111
|
}
|
|
112
|
+
summarizeSsoAssignments() {
|
|
113
|
+
const ret = [];
|
|
114
|
+
const header = ['', 'Resource', 'InstanceArn', 'PermissionSetArn', 'PrincipalId', 'PrincipalType', 'TargetId', 'TargetType'];
|
|
115
|
+
for (const att of this.ssoAssignments.additions) {
|
|
116
|
+
ret.push([
|
|
117
|
+
'+',
|
|
118
|
+
att.cfnLogicalId || '',
|
|
119
|
+
att.ssoInstanceArn || '',
|
|
120
|
+
att.permissionSetArn || '',
|
|
121
|
+
att.principalId || '',
|
|
122
|
+
att.principalType || '',
|
|
123
|
+
att.targetId || '',
|
|
124
|
+
att.targetType || '',
|
|
125
|
+
].map(s => chalk.green(s)));
|
|
126
|
+
}
|
|
127
|
+
for (const att of this.ssoAssignments.removals) {
|
|
128
|
+
ret.push([
|
|
129
|
+
'-',
|
|
130
|
+
att.cfnLogicalId || '',
|
|
131
|
+
att.ssoInstanceArn || '',
|
|
132
|
+
att.permissionSetArn || '',
|
|
133
|
+
att.principalId || '',
|
|
134
|
+
att.principalType || '',
|
|
135
|
+
att.targetId || '',
|
|
136
|
+
att.targetType || '',
|
|
137
|
+
].map(s => chalk.red(s)));
|
|
138
|
+
}
|
|
139
|
+
// Sort by resource name to ensure a unique value is used for sorting
|
|
140
|
+
ret.sort((0, util_1.makeComparator)((row) => [row[1]]));
|
|
141
|
+
ret.splice(0, 0, header);
|
|
142
|
+
return ret;
|
|
143
|
+
}
|
|
144
|
+
summarizeSsoInstanceACAConfigs() {
|
|
145
|
+
const ret = [];
|
|
146
|
+
const header = ['', 'Resource', 'InstanceArn', 'AccessControlAttributes'];
|
|
147
|
+
function formatAccessControlAttribute(aca) {
|
|
148
|
+
return `Key: ${aca?.Key}, Values: [${aca?.Value?.Source.join(', ')}]`;
|
|
149
|
+
}
|
|
150
|
+
for (const att of this.ssoInstanceACAConfigs.additions) {
|
|
151
|
+
ret.push([
|
|
152
|
+
'+',
|
|
153
|
+
att.cfnLogicalId || '',
|
|
154
|
+
att.ssoInstanceArn || '',
|
|
155
|
+
att.accessControlAttributes?.map(formatAccessControlAttribute).join('\n') || '',
|
|
156
|
+
].map(s => chalk.green(s)));
|
|
157
|
+
}
|
|
158
|
+
for (const att of this.ssoInstanceACAConfigs.removals) {
|
|
159
|
+
ret.push([
|
|
160
|
+
'-',
|
|
161
|
+
att.cfnLogicalId || '',
|
|
162
|
+
att.ssoInstanceArn || '',
|
|
163
|
+
att.accessControlAttributes?.map(formatAccessControlAttribute).join('\n') || '',
|
|
164
|
+
].map(s => chalk.red(s)));
|
|
165
|
+
}
|
|
166
|
+
// Sort by resource name to ensure a unique value is used for sorting
|
|
167
|
+
ret.sort((0, util_1.makeComparator)((row) => [row[1]]));
|
|
168
|
+
ret.splice(0, 0, header);
|
|
169
|
+
return ret;
|
|
170
|
+
}
|
|
171
|
+
summarizeSsoPermissionSets() {
|
|
172
|
+
const ret = [];
|
|
173
|
+
const header = ['', 'Resource', 'InstanceArn', 'PermissionSet name', 'PermissionsBoundary', 'CustomerManagedPolicyReferences'];
|
|
174
|
+
function formatManagedPolicyRef(s) {
|
|
175
|
+
return `Name: ${s?.Name || ''}, Path: ${s?.Path || ''}`;
|
|
176
|
+
}
|
|
177
|
+
function formatSsoPermissionsBoundary(ssoPb) {
|
|
178
|
+
// ManagedPolicyArn OR CustomerManagedPolicyReference can be specified -- but not both.
|
|
179
|
+
if (ssoPb?.ManagedPolicyArn !== undefined) {
|
|
180
|
+
return `ManagedPolicyArn: ${ssoPb?.ManagedPolicyArn || ''}`;
|
|
181
|
+
}
|
|
182
|
+
else if (ssoPb?.CustomerManagedPolicyReference !== undefined) {
|
|
183
|
+
return `CustomerManagedPolicyReference: {\n ${formatManagedPolicyRef(ssoPb?.CustomerManagedPolicyReference)}\n}`;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
return '';
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
for (const att of this.ssoPermissionSets.additions) {
|
|
190
|
+
ret.push([
|
|
191
|
+
'+',
|
|
192
|
+
att.cfnLogicalId || '',
|
|
193
|
+
att.ssoInstanceArn || '',
|
|
194
|
+
att.name || '',
|
|
195
|
+
formatSsoPermissionsBoundary(att.ssoPermissionsBoundary),
|
|
196
|
+
att.ssoCustomerManagedPolicyReferences?.map(formatManagedPolicyRef).join('\n') || '',
|
|
197
|
+
].map(s => chalk.green(s)));
|
|
198
|
+
}
|
|
199
|
+
for (const att of this.ssoPermissionSets.removals) {
|
|
200
|
+
ret.push([
|
|
201
|
+
'-',
|
|
202
|
+
att.cfnLogicalId || '',
|
|
203
|
+
att.ssoInstanceArn || '',
|
|
204
|
+
att.name || '',
|
|
205
|
+
formatSsoPermissionsBoundary(att.ssoPermissionsBoundary),
|
|
206
|
+
att.ssoCustomerManagedPolicyReferences?.map(formatManagedPolicyRef).join('\n') || '',
|
|
207
|
+
].map(s => chalk.red(s)));
|
|
208
|
+
}
|
|
209
|
+
// Sort by resource name to ensure a unique value is used for sorting
|
|
210
|
+
ret.sort((0, util_1.makeComparator)((row) => [row[1]]));
|
|
211
|
+
ret.splice(0, 0, header);
|
|
212
|
+
return ret;
|
|
213
|
+
}
|
|
97
214
|
/**
|
|
98
215
|
* Return a machine-readable version of the changes.
|
|
99
216
|
* This is only used in tests.
|
|
@@ -143,6 +260,18 @@ class IamChanges {
|
|
|
143
260
|
this.statements.addOld(...this.readLambdaStatements(resourceChange.oldProperties));
|
|
144
261
|
this.statements.addNew(...this.readLambdaStatements(resourceChange.newProperties));
|
|
145
262
|
break;
|
|
263
|
+
case service_spec_types_1.ResourceScrutinyType.SsoPermissionSet:
|
|
264
|
+
this.ssoPermissionSets.addOld(...this.readSsoPermissionSet(resourceChange.oldProperties, resourceChange.resourceLogicalId));
|
|
265
|
+
this.ssoPermissionSets.addNew(...this.readSsoPermissionSet(resourceChange.newProperties, resourceChange.resourceLogicalId));
|
|
266
|
+
break;
|
|
267
|
+
case service_spec_types_1.ResourceScrutinyType.SsoAssignmentResource:
|
|
268
|
+
this.ssoAssignments.addOld(...this.readSsoAssignments(resourceChange.oldProperties, resourceChange.resourceLogicalId));
|
|
269
|
+
this.ssoAssignments.addNew(...this.readSsoAssignments(resourceChange.newProperties, resourceChange.resourceLogicalId));
|
|
270
|
+
break;
|
|
271
|
+
case service_spec_types_1.ResourceScrutinyType.SsoInstanceACAConfigResource:
|
|
272
|
+
this.ssoInstanceACAConfigs.addOld(...this.readSsoInstanceACAConfigs(resourceChange.oldProperties, resourceChange.resourceLogicalId));
|
|
273
|
+
this.ssoInstanceACAConfigs.addNew(...this.readSsoInstanceACAConfigs(resourceChange.newProperties, resourceChange.resourceLogicalId));
|
|
274
|
+
break;
|
|
146
275
|
}
|
|
147
276
|
}
|
|
148
277
|
/**
|
|
@@ -175,6 +304,45 @@ class IamChanges {
|
|
|
175
304
|
return defaultPrincipal(ref, (0, statement_1.parseStatements)(properties.PolicyDocument.Statement));
|
|
176
305
|
});
|
|
177
306
|
}
|
|
307
|
+
readSsoInstanceACAConfigs(properties, logicalId) {
|
|
308
|
+
if (properties === undefined) {
|
|
309
|
+
return [];
|
|
310
|
+
}
|
|
311
|
+
properties = (0, render_intrinsics_1.renderIntrinsics)(properties);
|
|
312
|
+
return [new iam_identity_center_1.SsoInstanceACAConfig({
|
|
313
|
+
cfnLogicalId: '${' + logicalId + '}',
|
|
314
|
+
ssoInstanceArn: properties.InstanceArn,
|
|
315
|
+
accessControlAttributes: properties.AccessControlAttributes,
|
|
316
|
+
})];
|
|
317
|
+
}
|
|
318
|
+
readSsoAssignments(properties, logicalId) {
|
|
319
|
+
if (properties === undefined) {
|
|
320
|
+
return [];
|
|
321
|
+
}
|
|
322
|
+
properties = (0, render_intrinsics_1.renderIntrinsics)(properties);
|
|
323
|
+
return [new iam_identity_center_1.SsoAssignment({
|
|
324
|
+
cfnLogicalId: '${' + logicalId + '}',
|
|
325
|
+
ssoInstanceArn: properties.InstanceArn,
|
|
326
|
+
permissionSetArn: properties.PermissionSetArn,
|
|
327
|
+
principalId: properties.PrincipalId,
|
|
328
|
+
principalType: properties.PrincipalType,
|
|
329
|
+
targetId: properties.TargetId,
|
|
330
|
+
targetType: properties.TargetType,
|
|
331
|
+
})];
|
|
332
|
+
}
|
|
333
|
+
readSsoPermissionSet(properties, logicalId) {
|
|
334
|
+
if (properties === undefined) {
|
|
335
|
+
return [];
|
|
336
|
+
}
|
|
337
|
+
properties = (0, render_intrinsics_1.renderIntrinsics)(properties);
|
|
338
|
+
return [new iam_identity_center_1.SsoPermissionSet({
|
|
339
|
+
cfnLogicalId: '${' + logicalId + '}',
|
|
340
|
+
name: properties.Name,
|
|
341
|
+
ssoInstanceArn: properties.InstanceArn,
|
|
342
|
+
ssoCustomerManagedPolicyReferences: properties.CustomerManagedPolicyReferences,
|
|
343
|
+
ssoPermissionsBoundary: properties.PermissionsBoundary,
|
|
344
|
+
})];
|
|
345
|
+
}
|
|
178
346
|
readResourceStatements(policy, logicalId) {
|
|
179
347
|
if (policy === undefined) {
|
|
180
348
|
return [];
|
|
@@ -226,6 +394,9 @@ IamChanges.IamResourceScrutinies = [
|
|
|
226
394
|
service_spec_types_1.ResourceScrutinyType.ResourcePolicyResource,
|
|
227
395
|
service_spec_types_1.ResourceScrutinyType.IdentityPolicyResource,
|
|
228
396
|
service_spec_types_1.ResourceScrutinyType.LambdaPermission,
|
|
397
|
+
service_spec_types_1.ResourceScrutinyType.SsoAssignmentResource,
|
|
398
|
+
service_spec_types_1.ResourceScrutinyType.SsoInstanceACAConfigResource,
|
|
399
|
+
service_spec_types_1.ResourceScrutinyType.SsoPermissionSet,
|
|
229
400
|
];
|
|
230
401
|
/**
|
|
231
402
|
* Set an undefined or wildcarded principal on these statements
|
|
@@ -243,4 +414,4 @@ function defaultResource(resource, statements) {
|
|
|
243
414
|
statements.forEach(s => s.resources.replaceStar(resource));
|
|
244
415
|
return statements;
|
|
245
416
|
}
|
|
246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpYW0tY2hhbmdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvRUFBeUY7QUFDekYsK0JBQStCO0FBQy9CLHFEQUE4RTtBQUM5RSwyQ0FBK0Y7QUFHL0YsMENBQWlEO0FBQ2pELDREQUF3RDtBQUN4RCxrQ0FBb0Y7QUFPcEY7O0dBRUc7QUFDSCxNQUFhLFVBQVU7SUFnQnJCLFlBQVksS0FBc0I7UUFIbEIsZUFBVSxHQUFHLElBQUksNkJBQWtCLEVBQWEsQ0FBQztRQUNqRCxvQkFBZSxHQUFHLElBQUksNkJBQWtCLEVBQTJCLENBQUM7UUFHbEYsS0FBSyxNQUFNLGNBQWMsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxLQUFLLE1BQU0sY0FBYyxJQUFJLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztlQUMzRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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QUFFLFVBQXVCO0lBQ2xFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWdCLEVBQUUsVUFBdUI7SUFDaEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDM0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BlcnR5U2NydXRpbnlUeXBlLCBSZXNvdXJjZVNjcnV0aW55VHlwZSB9IGZyb20gJ0Bhd3MtY2RrL3NlcnZpY2Utc3BlYy10eXBlcyc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBNYW5hZ2VkUG9saWN5QXR0YWNobWVudCwgTWFuYWdlZFBvbGljeUpzb24gfSBmcm9tICcuL21hbmFnZWQtcG9saWN5JztcbmltcG9ydCB7IHBhcnNlTGFtYmRhUGVybWlzc2lvbiwgcGFyc2VTdGF0ZW1lbnRzLCBTdGF0ZW1lbnQsIFN0YXRlbWVudEpzb24gfSBmcm9tICcuL3N0YXRlbWVudCc7XG5pbXBvcnQgeyBNYXliZVBhcnNlZCB9IGZyb20gJy4uL2RpZmYvbWF5YmUtcGFyc2VkJztcbmltcG9ydCB7IFByb3BlcnR5Q2hhbmdlLCBQcm9wZXJ0eU1hcCwgUmVzb3VyY2VDaGFuZ2UgfSBmcm9tICcuLi9kaWZmL3R5cGVzJztcbmltcG9ydCB7IERpZmZhYmxlQ29sbGVjdGlvbiB9IGZyb20gJy4uL2RpZmZhYmxlJztcbmltcG9ydCB7IHJlbmRlckludHJpbnNpY3MgfSBmcm9tICcuLi9yZW5kZXItaW50cmluc2ljcyc7XG5pbXBvcnQgeyBkZWVwUmVtb3ZlVW5kZWZpbmVkLCBkcm9wSWZFbXB0eSwgZmxhdE1hcCwgbWFrZUNvbXBhcmF0b3IgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBJYW1DaGFuZ2VzUHJvcHMge1xuICBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5Q2hhbmdlW107XG4gIHJlc291cmNlQ2hhbmdlczogUmVzb3VyY2VDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBDaGFuZ2VzIHRvIElBTSBzdGF0ZW1lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBJYW1DaGFuZ2VzIHtcbiAgcHVibGljIHN0YXRpYyBJYW1Qcm9wZXJ0eVNjcnV0aW5pZXMgPSBbXG4gICAgUHJvcGVydHlTY3J1dGlueVR5cGUuSW5saW5lSWRlbnRpdHlQb2xpY2llcyxcbiAgICBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVSZXNvdXJjZVBvbGljeSxcbiAgICBQcm9wZXJ0eVNjcnV0aW55VHlwZS5NYW5hZ2VkUG9saWNpZXMsXG4gIF07XG5cbiAgcHVibGljIHN0YXRpYyBJYW1SZXNvdXJjZVNjcnV0aW5pZXMgPSBbXG4gICAgUmVzb3VyY2VTY3J1dGlueVR5cGUuUmVzb3VyY2VQb2xpY3lSZXNvdXJjZSxcbiAgICBSZXNvdXJjZVNjcnV0aW55VHlwZS5JZGVudGl0eVBvbGljeVJlc291cmNlLFxuICAgIFJlc291cmNlU2NydXRpbnlUeXBlLkxhbWJkYVBlcm1pc3Npb24sXG4gIF07XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlbWVudHMgPSBuZXcgRGlmZmFibGVDb2xsZWN0aW9uPFN0YXRlbWVudD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IG1hbmFnZWRQb2xpY2llcyA9IG5ldyBEaWZmYWJsZUNvbGxlY3Rpb248TWFuYWdlZFBvbGljeUF0dGFjaG1lbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IElhbUNoYW5nZXNQcm9wcykge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHlDaGFuZ2Ugb2YgcHJvcHMucHJvcGVydHlDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnJlYWRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eUNoYW5nZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgcmVzb3VyY2VDaGFuZ2Ugb2YgcHJvcHMucmVzb3VyY2VDaGFuZ2VzKSB7XG4gICAgICB0aGlzLnJlYWRSZXNvdXJjZUNoYW5nZShyZXNvdXJjZUNoYW5nZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZW1lbnRzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5jYWxjdWxhdGVEaWZmKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0NoYW5nZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cy5oYXNDaGFuZ2VzIHx8IHRoaXMubWFuYWdlZFBvbGljaWVzLmhhc0NoYW5nZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGNoYW5nZXMgaW5jbHVkZSBicm9hZGVuZWQgcGVybWlzc2lvbnNcbiAgICpcbiAgICogUGVybWlzc2lvbnMgYXJlIGJyb2FkZW5lZCBpZiBwb3NpdGl2ZSBzdGF0ZW1lbnRzIGFyZSBhZGRlZCBvclxuICAgKiBuZWdhdGl2ZSBzdGF0ZW1lbnRzIGFyZSByZW1vdmVkLCBvciBpZiBtYW5hZ2VkIHBvbGljaWVzIGFyZSBhZGRlZC5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnNCcm9hZGVuZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVtZW50cy5hZGRpdGlvbnMuc29tZShzID0+ICFzLmlzTmVnYXRpdmVTdGF0ZW1lbnQpXG4gICAgICAgIHx8IHRoaXMuc3RhdGVtZW50cy5yZW1vdmFscy5zb21lKHMgPT4gcy5pc05lZ2F0aXZlU3RhdGVtZW50KVxuICAgICAgICB8fCB0aGlzLm1hbmFnZWRQb2xpY2llcy5oYXNBZGRpdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgc3VtbWFyeSB0YWJsZSBvZiBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgc3VtbWFyaXplU3RhdGVtZW50cygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcblxuICAgIGNvbnN0IGhlYWRlciA9IFsnJywgJ1Jlc291cmNlJywgJ0VmZmVjdCcsICdBY3Rpb24nLCAnUHJpbmNpcGFsJywgJ0NvbmRpdGlvbiddO1xuXG4gICAgLy8gRmlyc3QgZ2VuZXJhdGUgYWxsIGxpbmVzLCB0aGVuIHNvcnQgb24gUmVzb3VyY2Ugc28gdGhhdCBzaW1pbGFyIHJlc291cmNlcyBhcmUgdG9nZXRoZXJcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiB0aGlzLnN0YXRlbWVudHMuYWRkaXRpb25zKSB7XG4gICAgICBjb25zdCByZW5kZXJlZFN0YXRlbWVudCA9IHN0YXRlbWVudC5yZW5kZXIoKTtcbiAgICAgIHJldC5wdXNoKFtcbiAgICAgICAgJysnLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5yZXNvdXJjZSxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuZWZmZWN0LFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5hY3Rpb24sXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LnByaW5jaXBhbCxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuY29uZGl0aW9uLFxuICAgICAgXS5tYXAocyA9PiBjaGFsay5ncmVlbihzKSkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiB0aGlzLnN0YXRlbWVudHMucmVtb3ZhbHMpIHtcbiAgICAgIGNvbnN0IHJlbmRlcmVkU3RhdGVtZW50ID0gc3RhdGVtZW50LnJlbmRlcigpO1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICBjaGFsay5yZWQoJy0nKSxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQucmVzb3VyY2UsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmVmZmVjdCxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuYWN0aW9uLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5wcmluY2lwYWwsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmNvbmRpdGlvbixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHN1bW1hcml6ZU1hbmFnZWRQb2xpY2llcygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcbiAgICBjb25zdCBoZWFkZXIgPSBbJycsICdSZXNvdXJjZScsICdNYW5hZ2VkIFBvbGljeSBBUk4nXTtcblxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLmFkZGl0aW9ucykge1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICAnKycsXG4gICAgICAgIGF0dC5pZGVudGl0eUFybixcbiAgICAgICAgYXR0Lm1hbmFnZWRQb2xpY3lBcm4sXG4gICAgICBdLm1hcChzID0+IGNoYWxrLmdyZWVuKHMpKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLnJlbW92YWxzKSB7XG4gICAgICByZXQucHVzaChbXG4gICAgICAgICctJyxcbiAgICAgICAgYXR0LmlkZW50aXR5QXJuLFxuICAgICAgICBhdHQubWFuYWdlZFBvbGljeUFybixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIG1hY2hpbmUtcmVhZGFibGUgdmVyc2lvbiBvZiB0aGUgY2hhbmdlcy5cbiAgICogVGhpcyBpcyBvbmx5IHVzZWQgaW4gdGVzdHMuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF90b0pzb24oKTogSWFtQ2hhbmdlc0pzb24ge1xuICAgIHJldHVybiBkZWVwUmVtb3ZlVW5kZWZpbmVkKHtcbiAgICAgIHN0YXRlbWVudEFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5zdGF0ZW1lbnRzLmFkZGl0aW9ucy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgICAgc3RhdGVtZW50UmVtb3ZhbHM6IGRyb3BJZkVtcHR5KHRoaXMuc3RhdGVtZW50cy5yZW1vdmFscy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgICAgbWFuYWdlZFBvbGljeUFkZGl0aW9uczogZHJvcElmRW1wdHkodGhpcy5tYW5hZ2VkUG9saWNpZXMuYWRkaXRpb25zLm1hcChzID0+IHMuX3RvSnNvbigpKSksXG4gICAgICBtYW5hZ2VkUG9saWN5UmVtb3ZhbHM6IGRyb3BJZkVtcHR5KHRoaXMubWFuYWdlZFBvbGljaWVzLnJlbW92YWxzLm1hcChzID0+IHMuX3RvSnNvbigpKSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eUNoYW5nZTogUHJvcGVydHlDaGFuZ2UpIHtcbiAgICBzd2l0Y2ggKHByb3BlcnR5Q2hhbmdlLnNjcnV0aW55VHlwZSkge1xuICAgICAgY2FzZSBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVJZGVudGl0eVBvbGljaWVzOlxuICAgICAgICAvLyBBV1M6OklBTTo6eyBSb2xlIHwgVXNlciB8IEdyb3VwIH0uUG9saWNpZXNcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLmFkZE9sZCguLi50aGlzLnJlYWRJZGVudGl0eVBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZElkZW50aXR5UG9saWNpZXMocHJvcGVydHlDaGFuZ2UubmV3VmFsdWUsIHByb3BlcnR5Q2hhbmdlLnJlc291cmNlTG9naWNhbElkKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVSZXNvdXJjZVBvbGljeTpcbiAgICAgICAgLy8gQW55IFBvbGljeURvY3VtZW50IG9uIGEgcmVzb3VyY2UgKGluY2x1ZGluZyBBc3N1bWVSb2xlUG9saWN5RG9jdW1lbnQpXG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkUmVzb3VyY2VTdGF0ZW1lbnRzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZFJlc291cmNlU3RhdGVtZW50cyhwcm9wZXJ0eUNoYW5nZS5uZXdWYWx1ZSwgcHJvcGVydHlDaGFuZ2UucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFByb3BlcnR5U2NydXRpbnlUeXBlLk1hbmFnZWRQb2xpY2llczpcbiAgICAgICAgLy8gSnVzdCBhIGxpc3Qgb2YgbWFuYWdlZCBwb2xpY2llc1xuICAgICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5hZGRPbGQoLi4udGhpcy5yZWFkTWFuYWdlZFBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm9sZFZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLm1hbmFnZWRQb2xpY2llcy5hZGROZXcoLi4udGhpcy5yZWFkTWFuYWdlZFBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm5ld1ZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZXNvdXJjZUNoYW5nZShyZXNvdXJjZUNoYW5nZTogUmVzb3VyY2VDaGFuZ2UpIHtcbiAgICBzd2l0Y2ggKHJlc291cmNlQ2hhbmdlLnNjcnV0aW55VHlwZSkge1xuICAgICAgY2FzZSBSZXNvdXJjZVNjcnV0aW55VHlwZS5JZGVudGl0eVBvbGljeVJlc291cmNlOlxuICAgICAgICAvLyBBV1M6OklBTTo6UG9saWN5XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGROZXcoLi4udGhpcy5yZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSZXNvdXJjZVNjcnV0aW55VHlwZS5SZXNvdXJjZVBvbGljeVJlc291cmNlOlxuICAgICAgICAvLyBBV1M6Oio6OntCdWNrZXQsUXVldWUsVG9waWN9UG9saWN5XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkUmVzb3VyY2VQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzKSk7XG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGROZXcoLi4udGhpcy5yZWFkUmVzb3VyY2VQb2xpY3lSZXNvdXJjZShyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBSZXNvdXJjZVNjcnV0aW55VHlwZS5MYW1iZGFQZXJtaXNzaW9uOlxuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkT2xkKC4uLnRoaXMucmVhZExhbWJkYVN0YXRlbWVudHMocmVzb3VyY2VDaGFuZ2Uub2xkUHJvcGVydGllcykpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZExhbWJkYVN0YXRlbWVudHMocmVzb3VyY2VDaGFuZ2UubmV3UHJvcGVydGllcykpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYSBsaXN0IG9mIHBvbGljaWVzIG9uIGFuIGlkZW50aXR5XG4gICAqL1xuICBwcml2YXRlIHJlYWRJZGVudGl0eVBvbGljaWVzKHBvbGljaWVzOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3RhdGVtZW50W10ge1xuICAgIGlmIChwb2xpY2llcyA9PT0gdW5kZWZpbmVkIHx8ICFBcnJheS5pc0FycmF5KHBvbGljaWVzKSkgeyByZXR1cm4gW107IH1cblxuICAgIGNvbnN0IGFwcGxpZXNUb1ByaW5jaXBhbCA9ICdBV1M6JHsnICsgbG9naWNhbElkICsgJ30nO1xuXG4gICAgcmV0dXJuIGZsYXRNYXAocG9saWNpZXMsIChwb2xpY3k6IGFueSkgPT4ge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlIFBvbGljeSBpdHNlbGYgaXMgbm90IGFuIGludHJpbnNpYywgbGlrZSBhbiBGbjo6SWZcbiAgICAgIGNvbnN0IHVucGFyc2VkU3RhdGVtZW50ID0gcG9saWN5LlBvbGljeURvY3VtZW50Py5TdGF0ZW1lbnRcbiAgICAgICAgPyBwb2xpY3kuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50XG4gICAgICAgIDogcG9saWN5O1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcmluY2lwYWwoYXBwbGllc1RvUHJpbmNpcGFsLCBwYXJzZVN0YXRlbWVudHMocmVuZGVySW50cmluc2ljcyh1bnBhcnNlZFN0YXRlbWVudCkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBJQU06OlBvbGljeSByZXNvdXJjZVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkSWRlbnRpdHlQb2xpY3lSZXNvdXJjZShwcm9wZXJ0aWVzOiBhbnkpOiBTdGF0ZW1lbnRbXSB7XG4gICAgaWYgKHByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIHByb3BlcnRpZXMgPSByZW5kZXJJbnRyaW5zaWNzKHByb3BlcnRpZXMpO1xuXG4gICAgY29uc3QgcHJpbmNpcGFscyA9IChwcm9wZXJ0aWVzLkdyb3VwcyB8fCBbXSkuY29uY2F0KHByb3BlcnRpZXMuVXNlcnMgfHwgW10pLmNvbmNhdChwcm9wZXJ0aWVzLlJvbGVzIHx8IFtdKTtcbiAgICByZXR1cm4gZmxhdE1hcChwcmluY2lwYWxzLCAocHJpbmNpcGFsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9ICdBV1M6JyArIHByaW5jaXBhbDtcbiAgICAgIHJldHVybiBkZWZhdWx0UHJpbmNpcGFsKHJlZiwgcGFyc2VTdGF0ZW1lbnRzKHByb3BlcnRpZXMuUG9saWN5RG9jdW1lbnQuU3RhdGVtZW50KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRSZXNvdXJjZVN0YXRlbWVudHMocG9saWN5OiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3RhdGVtZW50W10ge1xuICAgIGlmIChwb2xpY3kgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIGNvbnN0IGFwcGxpZXNUb1Jlc291cmNlID0gJyR7JyArIGxvZ2ljYWxJZCArICcuQXJufSc7XG4gICAgcmV0dXJuIGRlZmF1bHRSZXNvdXJjZShhcHBsaWVzVG9SZXNvdXJjZSwgcGFyc2VTdGF0ZW1lbnRzKHJlbmRlckludHJpbnNpY3MocG9saWN5LlN0YXRlbWVudCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhbiBBV1M6Oio6OntCdWNrZXQsVG9waWMsUXVldWV9cG9saWN5XG4gICAqL1xuICBwcml2YXRlIHJlYWRSZXNvdXJjZVBvbGljeVJlc291cmNlKHByb3BlcnRpZXM6IGFueSk6IFN0YXRlbWVudFtdIHtcbiAgICBpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBbXTsgfVxuXG4gICAgcHJvcGVydGllcyA9IHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcyk7XG5cbiAgICBjb25zdCBwb2xpY3lLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykuZmlsdGVyKGtleSA9PiBrZXkuaW5kZXhPZignUG9saWN5JykgPiAtMSk7XG5cbiAgICAvLyBGaW5kIHRoZSBrZXkgdGhhdCBpZGVudGlmaWVzIHRoZSByZXNvdXJjZShzKSB0aGlzIHBvbGljeSBhcHBsaWVzIHRvXG4gICAgY29uc3QgcmVzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydGllcykuZmlsdGVyKGtleSA9PiAhcG9saWN5S2V5cy5pbmNsdWRlcyhrZXkpICYmICFrZXkuZW5kc1dpdGgoJ05hbWUnKSk7XG4gICAgbGV0IHJlc291cmNlcyA9IHJlc291cmNlS2V5cy5sZW5ndGggPT09IDEgPyBwcm9wZXJ0aWVzW3Jlc291cmNlS2V5c1swXV0gOiBbJz8/PyddO1xuXG4gICAgLy8gRm9yIHNvbWUgcmVzb3VyY2VzLCB0aGlzIGlzIGEgc2luZ2xldG9uIHN0cmluZywgZm9yIHNvbWUgaXQncyBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShyZXNvdXJjZXMpKSB7XG4gICAgICByZXNvdXJjZXMgPSBbcmVzb3VyY2VzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdE1hcChyZXNvdXJjZXMsIChyZXNvdXJjZTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gZGVmYXVsdFJlc291cmNlKHJlc291cmNlLCBwYXJzZVN0YXRlbWVudHMocHJvcGVydGllc1twb2xpY3lLZXlzWzBdXS5TdGF0ZW1lbnQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZE1hbmFnZWRQb2xpY2llcyhwb2xpY3lBcm5zOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogTWFuYWdlZFBvbGljeUF0dGFjaG1lbnRbXSB7XG4gICAgaWYgKCFwb2xpY3lBcm5zKSB7IHJldHVybiBbXTsgfVxuXG4gICAgY29uc3QgcmVwID0gJyR7JyArIGxvZ2ljYWxJZCArICd9JztcbiAgICByZXR1cm4gTWFuYWdlZFBvbGljeUF0dGFjaG1lbnQucGFyc2VNYW5hZ2VkUG9saWNpZXMocmVwLCByZW5kZXJJbnRyaW5zaWNzKHBvbGljeUFybnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZExhbWJkYVN0YXRlbWVudHMocHJvcGVydGllcz86IFByb3BlcnR5TWFwKTogU3RhdGVtZW50W10ge1xuICAgIGlmICghcHJvcGVydGllcykgeyByZXR1cm4gW107IH1cblxuICAgIHJldHVybiBbcGFyc2VMYW1iZGFQZXJtaXNzaW9uKHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcykpXTtcbiAgfVxufVxuXG4vKipcbiAqIFNldCBhbiB1bmRlZmluZWQgb3Igd2lsZGNhcmRlZCBwcmluY2lwYWwgb24gdGhlc2Ugc3RhdGVtZW50c1xuICovXG5mdW5jdGlvbiBkZWZhdWx0UHJpbmNpcGFsKHByaW5jaXBhbDogc3RyaW5nLCBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSkge1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnByaW5jaXBhbHMucmVwbGFjZUVtcHR5KHByaW5jaXBhbCkpO1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnByaW5jaXBhbHMucmVwbGFjZVN0YXIocHJpbmNpcGFsKSk7XG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG4vKipcbiAqIFNldCBhbiB1bmRlZmluZWQgb3Igd2lsZGNhcmRlZCByZXNvdXJjZSBvbiB0aGVzZSBzdGF0ZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGRlZmF1bHRSZXNvdXJjZShyZXNvdXJjZTogc3RyaW5nLCBzdGF0ZW1lbnRzOiBTdGF0ZW1lbnRbXSkge1xuICBzdGF0ZW1lbnRzLmZvckVhY2gocyA9PiBzLnJlc291cmNlcy5yZXBsYWNlRW1wdHkocmVzb3VyY2UpKTtcbiAgc3RhdGVtZW50cy5mb3JFYWNoKHMgPT4gcy5yZXNvdXJjZXMucmVwbGFjZVN0YXIocmVzb3VyY2UpKTtcbiAgcmV0dXJuIHN0YXRlbWVudHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWFtQ2hhbmdlc0pzb24ge1xuICBzdGF0ZW1lbnRBZGRpdGlvbnM/OiBBcnJheTxNYXliZVBhcnNlZDxTdGF0ZW1lbnRKc29uPj47XG4gIHN0YXRlbWVudFJlbW92YWxzPzogQXJyYXk8TWF5YmVQYXJzZWQ8U3RhdGVtZW50SnNvbj4+O1xuICBtYW5hZ2VkUG9saWN5QWRkaXRpb25zPzogQXJyYXk8TWF5YmVQYXJzZWQ8TWFuYWdlZFBvbGljeUpzb24+PjtcbiAgbWFuYWdlZFBvbGljeVJlbW92YWxzPzogQXJyYXk8TWF5YmVQYXJzZWQ8TWFuYWdlZFBvbGljeUpzb24+Pjtcbn1cbiJdfQ==
|
|
417
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpYW0tY2hhbmdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvRUFBeUY7QUFDekYsK0JBQStCO0FBQy9CLCtEQUF3STtBQUN4SSxxREFBOEU7QUFDOUUsMkNBQStGO0FBRy9GLDBDQUFpRDtBQUNqRCw0REFBd0Q7QUFDeEQsa0NBQW9GO0FBT3BGOztHQUVHO0FBQ0gsTUFBYSxVQUFVO0lBdUJyQixZQUFZLEtBQXNCO1FBUGxDLG1KQUFtSjtRQUNuSSxlQUFVLEdBQUcsSUFBSSw2QkFBa0IsRUFBYSxDQUFDO1FBQ2pELG9CQUFlLEdBQUcsSUFBSSw2QkFBa0IsRUFBMkIsQ0FBQztRQUNwRSxzQkFBaUIsR0FBRyxJQUFJLDZCQUFrQixFQUFvQixDQUFDO1FBQy9ELG1CQUFjLEdBQUcsSUFBSSw2QkFBa0IsRUFBaUIsQ0FBQztRQUN6RCwwQkFBcUIsR0FBRyxJQUFJLDZCQUFrQixFQUF3QixDQUFDO1FBR3JGLEtBQUssTUFBTSxjQUFjLElBQUksS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBQ0QsS0FBSyxNQUFNLGNBQWMsSUFBSSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFF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QUVZLGdDQUFxQixHQUFHO0lBQ3BDLHlDQUFvQixDQUFDLHNCQUFzQjtJQUMzQyx5Q0FBb0IsQ0FBQyxzQkFBc0I7SUFDM0MseUNBQW9CLENBQUMsZ0JBQWdCO0lBQ3JDLHlDQUFvQixDQUFDLHFCQUFxQjtJQUMxQyx5Q0FBb0IsQ0FBQyw0QkFBNEI7SUFDakQseUNBQW9CLENBQUMsZ0JBQWdCO0NBQ3RDLEFBUGtDLENBT2pDO0FBOFpKOztHQUVHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLFVBQXVCO0lBQ2xFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzdELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZUFBZSxDQUFDLFFBQWdCLEVBQUUsVUFBdUI7SUFDaEUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDM0QsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3BlcnR5U2NydXRpbnlUeXBlLCBSZXNvdXJjZVNjcnV0aW55VHlwZSB9IGZyb20gJ0Bhd3MtY2RrL3NlcnZpY2Utc3BlYy10eXBlcyc7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgeyBJU3NvSW5zdGFuY2VBQ0FDb25maWcsIElTc29QZXJtaXNzaW9uU2V0LCBTc29Bc3NpZ25tZW50LCBTc29JbnN0YW5jZUFDQUNvbmZpZywgU3NvUGVybWlzc2lvblNldCB9IGZyb20gJy4vaWFtLWlkZW50aXR5LWNlbnRlcic7XG5pbXBvcnQgeyBNYW5hZ2VkUG9saWN5QXR0YWNobWVudCwgTWFuYWdlZFBvbGljeUpzb24gfSBmcm9tICcuL21hbmFnZWQtcG9saWN5JztcbmltcG9ydCB7IHBhcnNlTGFtYmRhUGVybWlzc2lvbiwgcGFyc2VTdGF0ZW1lbnRzLCBTdGF0ZW1lbnQsIFN0YXRlbWVudEpzb24gfSBmcm9tICcuL3N0YXRlbWVudCc7XG5pbXBvcnQgeyBNYXliZVBhcnNlZCB9IGZyb20gJy4uL2RpZmYvbWF5YmUtcGFyc2VkJztcbmltcG9ydCB7IFByb3BlcnR5Q2hhbmdlLCBQcm9wZXJ0eU1hcCwgUmVzb3VyY2VDaGFuZ2UgfSBmcm9tICcuLi9kaWZmL3R5cGVzJztcbmltcG9ydCB7IERpZmZhYmxlQ29sbGVjdGlvbiB9IGZyb20gJy4uL2RpZmZhYmxlJztcbmltcG9ydCB7IHJlbmRlckludHJpbnNpY3MgfSBmcm9tICcuLi9yZW5kZXItaW50cmluc2ljcyc7XG5pbXBvcnQgeyBkZWVwUmVtb3ZlVW5kZWZpbmVkLCBkcm9wSWZFbXB0eSwgZmxhdE1hcCwgbWFrZUNvbXBhcmF0b3IgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBJYW1DaGFuZ2VzUHJvcHMge1xuICBwcm9wZXJ0eUNoYW5nZXM6IFByb3BlcnR5Q2hhbmdlW107XG4gIHJlc291cmNlQ2hhbmdlczogUmVzb3VyY2VDaGFuZ2VbXTtcbn1cblxuLyoqXG4gKiBDaGFuZ2VzIHRvIElBTSBzdGF0ZW1lbnRzIGFuZCBJQU0gaWRlbnRpdHkgY2VudGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBJYW1DaGFuZ2VzIHtcbiAgcHVibGljIHN0YXRpYyBJYW1Qcm9wZXJ0eVNjcnV0aW5pZXMgPSBbXG4gICAgUHJvcGVydHlTY3J1dGlueVR5cGUuSW5saW5lSWRlbnRpdHlQb2xpY2llcyxcbiAgICBQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmxpbmVSZXNvdXJjZVBvbGljeSxcbiAgICBQcm9wZXJ0eVNjcnV0aW55VHlwZS5NYW5hZ2VkUG9saWNpZXMsXG4gIF07XG5cbiAgcHVibGljIHN0YXRpYyBJYW1SZXNvdXJjZVNjcnV0aW5pZXMgPSBbXG4gICAgUmVzb3VyY2VTY3J1dGlueVR5cGUuUmVzb3VyY2VQb2xpY3lSZXNvdXJjZSxcbiAgICBSZXNvdXJjZVNjcnV0aW55VHlwZS5JZGVudGl0eVBvbGljeVJlc291cmNlLFxuICAgIFJlc291cmNlU2NydXRpbnlUeXBlLkxhbWJkYVBlcm1pc3Npb24sXG4gICAgUmVzb3VyY2VTY3J1dGlueVR5cGUuU3NvQXNzaWdubWVudFJlc291cmNlLFxuICAgIFJlc291cmNlU2NydXRpbnlUeXBlLlNzb0luc3RhbmNlQUNBQ29uZmlnUmVzb3VyY2UsXG4gICAgUmVzb3VyY2VTY3J1dGlueVR5cGUuU3NvUGVybWlzc2lvblNldCxcbiAgXTtcblxuICAvLyBlYWNoIGVudHJ5IGluIGEgRGlmZmFibGVDb2xsZWN0aW9uIGlzIHVzZWQgdG8gZ2VuZXJhdGUgYSBzaW5nbGUgcm93IG9mIHRoZSBzZWN1cml0eSBjaGFuZ2VzIHRhYmxlIHRoYXQgaXMgcHJlc2VudGVkIGZvciBjZGsgZGlmZiBhbmQgY2RrIGRlcGxveS5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXRlbWVudHMgPSBuZXcgRGlmZmFibGVDb2xsZWN0aW9uPFN0YXRlbWVudD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IG1hbmFnZWRQb2xpY2llcyA9IG5ldyBEaWZmYWJsZUNvbGxlY3Rpb248TWFuYWdlZFBvbGljeUF0dGFjaG1lbnQ+KCk7XG4gIHB1YmxpYyByZWFkb25seSBzc29QZXJtaXNzaW9uU2V0cyA9IG5ldyBEaWZmYWJsZUNvbGxlY3Rpb248U3NvUGVybWlzc2lvblNldD4oKTtcbiAgcHVibGljIHJlYWRvbmx5IHNzb0Fzc2lnbm1lbnRzID0gbmV3IERpZmZhYmxlQ29sbGVjdGlvbjxTc29Bc3NpZ25tZW50PigpO1xuICBwdWJsaWMgcmVhZG9ubHkgc3NvSW5zdGFuY2VBQ0FDb25maWdzID0gbmV3IERpZmZhYmxlQ29sbGVjdGlvbjxTc29JbnN0YW5jZUFDQUNvbmZpZz4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSWFtQ2hhbmdlc1Byb3BzKSB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eUNoYW5nZSBvZiBwcm9wcy5wcm9wZXJ0eUNoYW5nZXMpIHtcbiAgICAgIHRoaXMucmVhZFByb3BlcnR5Q2hhbmdlKHByb3BlcnR5Q2hhbmdlKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCByZXNvdXJjZUNoYW5nZSBvZiBwcm9wcy5yZXNvdXJjZUNoYW5nZXMpIHtcbiAgICAgIHRoaXMucmVhZFJlc291cmNlQ2hhbmdlKHJlc291cmNlQ2hhbmdlKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlbWVudHMuY2FsY3VsYXRlRGlmZigpO1xuICAgIHRoaXMubWFuYWdlZFBvbGljaWVzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLnNzb1Blcm1pc3Npb25TZXRzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLnNzb0Fzc2lnbm1lbnRzLmNhbGN1bGF0ZURpZmYoKTtcbiAgICB0aGlzLnNzb0luc3RhbmNlQUNBQ29uZmlncy5jYWxjdWxhdGVEaWZmKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0NoYW5nZXMoKSB7XG4gICAgcmV0dXJuICh0aGlzLnN0YXRlbWVudHMuaGFzQ2hhbmdlc1xuICAgICAgfHwgdGhpcy5tYW5hZ2VkUG9saWNpZXMuaGFzQ2hhbmdlc1xuICAgICAgfHwgdGhpcy5zc29QZXJtaXNzaW9uU2V0cy5oYXNDaGFuZ2VzXG4gICAgICB8fCB0aGlzLnNzb0Fzc2lnbm1lbnRzLmhhc0NoYW5nZXNcbiAgICAgIHx8IHRoaXMuc3NvSW5zdGFuY2VBQ0FDb25maWdzLmhhc0NoYW5nZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBjaGFuZ2VzIGluY2x1ZGUgYnJvYWRlbmVkIHBlcm1pc3Npb25zXG4gICAqXG4gICAqIFBlcm1pc3Npb25zIGFyZSBicm9hZGVuZWQgaWYgcG9zaXRpdmUgc3RhdGVtZW50cyBhcmUgYWRkZWQgb3JcbiAgICogbmVnYXRpdmUgc3RhdGVtZW50cyBhcmUgcmVtb3ZlZCwgb3IgaWYgbWFuYWdlZCBwb2xpY2llcyBhcmUgYWRkZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBlcm1pc3Npb25zQnJvYWRlbmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudHMuYWRkaXRpb25zLnNvbWUocyA9PiAhcy5pc05lZ2F0aXZlU3RhdGVtZW50KVxuICAgICAgICB8fCB0aGlzLnN0YXRlbWVudHMucmVtb3ZhbHMuc29tZShzID0+IHMuaXNOZWdhdGl2ZVN0YXRlbWVudClcbiAgICAgICAgfHwgdGhpcy5tYW5hZ2VkUG9saWNpZXMuaGFzQWRkaXRpb25zXG4gICAgICAgIHx8IHRoaXMuc3NvUGVybWlzc2lvblNldHMuaGFzQWRkaXRpb25zXG4gICAgICAgIHx8IHRoaXMuc3NvQXNzaWdubWVudHMuaGFzQWRkaXRpb25zXG4gICAgICAgIHx8IHRoaXMuc3NvSW5zdGFuY2VBQ0FDb25maWdzLmhhc0FkZGl0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBzdW1tYXJ5IHRhYmxlIG9mIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyBzdW1tYXJpemVTdGF0ZW1lbnRzKCk6IHN0cmluZ1tdW10ge1xuICAgIGNvbnN0IHJldDogc3RyaW5nW11bXSA9IFtdO1xuXG4gICAgY29uc3QgaGVhZGVyID0gWycnLCAnUmVzb3VyY2UnLCAnRWZmZWN0JywgJ0FjdGlvbicsICdQcmluY2lwYWwnLCAnQ29uZGl0aW9uJ107XG5cbiAgICAvLyBGaXJzdCBnZW5lcmF0ZSBhbGwgbGluZXMsIHRoZW4gc29ydCBvbiBSZXNvdXJjZSBzbyB0aGF0IHNpbWlsYXIgcmVzb3VyY2VzIGFyZSB0b2dldGhlclxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHRoaXMuc3RhdGVtZW50cy5hZGRpdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlbmRlcmVkU3RhdGVtZW50ID0gc3RhdGVtZW50LnJlbmRlcigpO1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICAnKycsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LnJlc291cmNlLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5lZmZlY3QsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmFjdGlvbixcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQucHJpbmNpcGFsLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5jb25kaXRpb24sXG4gICAgICBdLm1hcChzID0+IGNoYWxrLmdyZWVuKHMpKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHRoaXMuc3RhdGVtZW50cy5yZW1vdmFscykge1xuICAgICAgY29uc3QgcmVuZGVyZWRTdGF0ZW1lbnQgPSBzdGF0ZW1lbnQucmVuZGVyKCk7XG4gICAgICByZXQucHVzaChbXG4gICAgICAgICctJyxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQucmVzb3VyY2UsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmVmZmVjdCxcbiAgICAgICAgcmVuZGVyZWRTdGF0ZW1lbnQuYWN0aW9uLFxuICAgICAgICByZW5kZXJlZFN0YXRlbWVudC5wcmluY2lwYWwsXG4gICAgICAgIHJlbmRlcmVkU3RhdGVtZW50LmNvbmRpdGlvbixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHN1bW1hcml6ZU1hbmFnZWRQb2xpY2llcygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcbiAgICBjb25zdCBoZWFkZXIgPSBbJycsICdSZXNvdXJjZScsICdNYW5hZ2VkIFBvbGljeSBBUk4nXTtcblxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLmFkZGl0aW9ucykge1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICAnKycsXG4gICAgICAgIGF0dC5pZGVudGl0eUFybixcbiAgICAgICAgYXR0Lm1hbmFnZWRQb2xpY3lBcm4sXG4gICAgICBdLm1hcChzID0+IGNoYWxrLmdyZWVuKHMpKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMubWFuYWdlZFBvbGljaWVzLnJlbW92YWxzKSB7XG4gICAgICByZXQucHVzaChbXG4gICAgICAgICctJyxcbiAgICAgICAgYXR0LmlkZW50aXR5QXJuLFxuICAgICAgICBhdHQubWFuYWdlZFBvbGljeUFybixcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSAybmQgY29sdW1uXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG5cbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHN1bW1hcml6ZVNzb0Fzc2lnbm1lbnRzKCk6IHN0cmluZ1tdW10ge1xuICAgIGNvbnN0IHJldDogc3RyaW5nW11bXSA9IFtdO1xuICAgIGNvbnN0IGhlYWRlciA9IFsnJywgJ1Jlc291cmNlJywgJ0luc3RhbmNlQXJuJywgJ1Blcm1pc3Npb25TZXRBcm4nLCAnUHJpbmNpcGFsSWQnLCAnUHJpbmNpcGFsVHlwZScsICdUYXJnZXRJZCcsICdUYXJnZXRUeXBlJ107XG5cbiAgICBmb3IgKGNvbnN0IGF0dCBvZiB0aGlzLnNzb0Fzc2lnbm1lbnRzLmFkZGl0aW9ucykge1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICAnKycsXG4gICAgICAgIGF0dC5jZm5Mb2dpY2FsSWQgfHwgJycsXG4gICAgICAgIGF0dC5zc29JbnN0YW5jZUFybiB8fCAnJyxcbiAgICAgICAgYXR0LnBlcm1pc3Npb25TZXRBcm4gfHwgJycsXG4gICAgICAgIGF0dC5wcmluY2lwYWxJZCB8fCAnJyxcbiAgICAgICAgYXR0LnByaW5jaXBhbFR5cGUgfHwgJycsXG4gICAgICAgIGF0dC50YXJnZXRJZCB8fCAnJyxcbiAgICAgICAgYXR0LnRhcmdldFR5cGUgfHwgJycsXG4gICAgICBdLm1hcChzID0+IGNoYWxrLmdyZWVuKHMpKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMuc3NvQXNzaWdubWVudHMucmVtb3ZhbHMpIHtcbiAgICAgIHJldC5wdXNoKFtcbiAgICAgICAgJy0nLFxuICAgICAgICBhdHQuY2ZuTG9naWNhbElkIHx8ICcnLFxuICAgICAgICBhdHQuc3NvSW5zdGFuY2VBcm4gfHwgJycsXG4gICAgICAgIGF0dC5wZXJtaXNzaW9uU2V0QXJuIHx8ICcnLFxuICAgICAgICBhdHQucHJpbmNpcGFsSWQgfHwgJycsXG4gICAgICAgIGF0dC5wcmluY2lwYWxUeXBlIHx8ICcnLFxuICAgICAgICBhdHQudGFyZ2V0SWQgfHwgJycsXG4gICAgICAgIGF0dC50YXJnZXRUeXBlIHx8ICcnLFxuICAgICAgXS5tYXAocyA9PiBjaGFsay5yZWQocykpKTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IGJ5IHJlc291cmNlIG5hbWUgdG8gZW5zdXJlIGEgdW5pcXVlIHZhbHVlIGlzIHVzZWQgZm9yIHNvcnRpbmdcbiAgICByZXQuc29ydChtYWtlQ29tcGFyYXRvcigocm93OiBzdHJpbmdbXSkgPT4gW3Jvd1sxXV0pKTtcbiAgICByZXQuc3BsaWNlKDAsIDAsIGhlYWRlcik7XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHN1bW1hcml6ZVNzb0luc3RhbmNlQUNBQ29uZmlncygpOiBzdHJpbmdbXVtdIHtcbiAgICBjb25zdCByZXQ6IHN0cmluZ1tdW10gPSBbXTtcbiAgICBjb25zdCBoZWFkZXIgPSBbJycsICdSZXNvdXJjZScsICdJbnN0YW5jZUFybicsICdBY2Nlc3NDb250cm9sQXR0cmlidXRlcyddO1xuXG4gICAgZnVuY3Rpb24gZm9ybWF0QWNjZXNzQ29udHJvbEF0dHJpYnV0ZShhY2E6IElTc29JbnN0YW5jZUFDQUNvbmZpZy5BY2Nlc3NDb250cm9sQXR0cmlidXRlKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiBgS2V5OiAke2FjYT8uS2V5fSwgVmFsdWVzOiBbJHthY2E/LlZhbHVlPy5Tb3VyY2Uuam9pbignLCAnKX1dYDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGF0dCBvZiB0aGlzLnNzb0luc3RhbmNlQUNBQ29uZmlncy5hZGRpdGlvbnMpIHtcbiAgICAgIHJldC5wdXNoKFtcbiAgICAgICAgJysnLFxuICAgICAgICBhdHQuY2ZuTG9naWNhbElkIHx8ICcnLFxuICAgICAgICBhdHQuc3NvSW5zdGFuY2VBcm4gfHwgJycsXG4gICAgICAgIGF0dC5hY2Nlc3NDb250cm9sQXR0cmlidXRlcz8ubWFwKGZvcm1hdEFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGUpLmpvaW4oJ1xcbicpIHx8ICcnLFxuICAgICAgXS5tYXAocyA9PiBjaGFsay5ncmVlbihzKSkpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGF0dCBvZiB0aGlzLnNzb0luc3RhbmNlQUNBQ29uZmlncy5yZW1vdmFscykge1xuICAgICAgcmV0LnB1c2goW1xuICAgICAgICAnLScsXG4gICAgICAgIGF0dC5jZm5Mb2dpY2FsSWQgfHwgJycsXG4gICAgICAgIGF0dC5zc29JbnN0YW5jZUFybiB8fCAnJyxcbiAgICAgICAgYXR0LmFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGVzPy5tYXAoZm9ybWF0QWNjZXNzQ29udHJvbEF0dHJpYnV0ZSkuam9pbignXFxuJykgfHwgJycsXG4gICAgICBdLm1hcChzID0+IGNoYWxrLnJlZChzKSkpO1xuICAgIH1cblxuICAgIC8vIFNvcnQgYnkgcmVzb3VyY2UgbmFtZSB0byBlbnN1cmUgYSB1bmlxdWUgdmFsdWUgaXMgdXNlZCBmb3Igc29ydGluZ1xuICAgIHJldC5zb3J0KG1ha2VDb21wYXJhdG9yKChyb3c6IHN0cmluZ1tdKSA9PiBbcm93WzFdXSkpO1xuICAgIHJldC5zcGxpY2UoMCwgMCwgaGVhZGVyKTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgc3VtbWFyaXplU3NvUGVybWlzc2lvblNldHMoKTogc3RyaW5nW11bXSB7XG4gICAgY29uc3QgcmV0OiBzdHJpbmdbXVtdID0gW107XG4gICAgY29uc3QgaGVhZGVyID0gWycnLCAnUmVzb3VyY2UnLCAnSW5zdGFuY2VBcm4nLCAnUGVybWlzc2lvblNldCBuYW1lJywgJ1Blcm1pc3Npb25zQm91bmRhcnknLCAnQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcyddO1xuXG4gICAgZnVuY3Rpb24gZm9ybWF0TWFuYWdlZFBvbGljeVJlZihzOiBJU3NvUGVybWlzc2lvblNldC5DdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2UgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIGBOYW1lOiAke3M/Lk5hbWUgfHwgJyd9LCBQYXRoOiAke3M/LlBhdGggfHwgJyd9YDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXRTc29QZXJtaXNzaW9uc0JvdW5kYXJ5KHNzb1BiOiBJU3NvUGVybWlzc2lvblNldC5QZXJtaXNzaW9uc0JvdW5kYXJ5IHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICAgIC8vIE1hbmFnZWRQb2xpY3lBcm4gT1IgQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlIGNhbiBiZSBzcGVjaWZpZWQgLS0gYnV0IG5vdCBib3RoLlxuICAgICAgaWYgKHNzb1BiPy5NYW5hZ2VkUG9saWN5QXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGBNYW5hZ2VkUG9saWN5QXJuOiAke3Nzb1BiPy5NYW5hZ2VkUG9saWN5QXJuIHx8ICcnfWA7XG4gICAgICB9IGVsc2UgaWYgKHNzb1BiPy5DdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYEN1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZToge1xcbiAgJHtmb3JtYXRNYW5hZ2VkUG9saWN5UmVmKHNzb1BiPy5DdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2UpfVxcbn1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMuc3NvUGVybWlzc2lvblNldHMuYWRkaXRpb25zKSB7XG4gICAgICByZXQucHVzaChbXG4gICAgICAgICcrJyxcbiAgICAgICAgYXR0LmNmbkxvZ2ljYWxJZCB8fCAnJyxcbiAgICAgICAgYXR0LnNzb0luc3RhbmNlQXJuIHx8ICcnLFxuICAgICAgICBhdHQubmFtZSB8fCAnJyxcbiAgICAgICAgZm9ybWF0U3NvUGVybWlzc2lvbnNCb3VuZGFyeShhdHQuc3NvUGVybWlzc2lvbnNCb3VuZGFyeSksXG4gICAgICAgIGF0dC5zc29DdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzPy5tYXAoZm9ybWF0TWFuYWdlZFBvbGljeVJlZikuam9pbignXFxuJykgfHwgJycsXG4gICAgICBdLm1hcChzID0+IGNoYWxrLmdyZWVuKHMpKSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYXR0IG9mIHRoaXMuc3NvUGVybWlzc2lvblNldHMucmVtb3ZhbHMpIHtcbiAgICAgIHJldC5wdXNoKFtcbiAgICAgICAgJy0nLFxuICAgICAgICBhdHQuY2ZuTG9naWNhbElkIHx8ICcnLFxuICAgICAgICBhdHQuc3NvSW5zdGFuY2VBcm4gfHwgJycsXG4gICAgICAgIGF0dC5uYW1lIHx8ICcnLFxuICAgICAgICBmb3JtYXRTc29QZXJtaXNzaW9uc0JvdW5kYXJ5KGF0dC5zc29QZXJtaXNzaW9uc0JvdW5kYXJ5KSxcbiAgICAgICAgYXR0LnNzb0N1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXM/Lm1hcChmb3JtYXRNYW5hZ2VkUG9saWN5UmVmKS5qb2luKCdcXG4nKSB8fCAnJyxcbiAgICAgIF0ubWFwKHMgPT4gY2hhbGsucmVkKHMpKSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSByZXNvdXJjZSBuYW1lIHRvIGVuc3VyZSBhIHVuaXF1ZSB2YWx1ZSBpcyB1c2VkIGZvciBzb3J0aW5nXG4gICAgcmV0LnNvcnQobWFrZUNvbXBhcmF0b3IoKHJvdzogc3RyaW5nW10pID0+IFtyb3dbMV1dKSk7XG4gICAgcmV0LnNwbGljZSgwLCAwLCBoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBtYWNoaW5lLXJlYWRhYmxlIHZlcnNpb24gb2YgdGhlIGNoYW5nZXMuXG4gICAqIFRoaXMgaXMgb25seSB1c2VkIGluIHRlc3RzLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfdG9Kc29uKCk6IElhbUNoYW5nZXNKc29uIHtcbiAgICByZXR1cm4gZGVlcFJlbW92ZVVuZGVmaW5lZCh7XG4gICAgICBzdGF0ZW1lbnRBZGRpdGlvbnM6IGRyb3BJZkVtcHR5KHRoaXMuc3RhdGVtZW50cy5hZGRpdGlvbnMubWFwKHMgPT4gcy5fdG9Kc29uKCkpKSxcbiAgICAgIHN0YXRlbWVudFJlbW92YWxzOiBkcm9wSWZFbXB0eSh0aGlzLnN0YXRlbWVudHMucmVtb3ZhbHMubWFwKHMgPT4gcy5fdG9Kc29uKCkpKSxcbiAgICAgIG1hbmFnZWRQb2xpY3lBZGRpdGlvbnM6IGRyb3BJZkVtcHR5KHRoaXMubWFuYWdlZFBvbGljaWVzLmFkZGl0aW9ucy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgICAgbWFuYWdlZFBvbGljeVJlbW92YWxzOiBkcm9wSWZFbXB0eSh0aGlzLm1hbmFnZWRQb2xpY2llcy5yZW1vdmFscy5tYXAocyA9PiBzLl90b0pzb24oKSkpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkUHJvcGVydHlDaGFuZ2UocHJvcGVydHlDaGFuZ2U6IFByb3BlcnR5Q2hhbmdlKSB7XG4gICAgc3dpdGNoIChwcm9wZXJ0eUNoYW5nZS5zY3J1dGlueVR5cGUpIHtcbiAgICAgIGNhc2UgUHJvcGVydHlTY3J1dGlueVR5cGUuSW5saW5lSWRlbnRpdHlQb2xpY2llczpcbiAgICAgICAgLy8gQVdTOjpJQU06OnsgUm9sZSB8IFVzZXIgfCBHcm91cCB9LlBvbGljaWVzXG4gICAgICAgIHRoaXMuc3RhdGVtZW50cy5hZGRPbGQoLi4udGhpcy5yZWFkSWRlbnRpdHlQb2xpY2llcyhwcm9wZXJ0eUNoYW5nZS5vbGRWYWx1ZSwgcHJvcGVydHlDaGFuZ2UucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLmFkZE5ldyguLi50aGlzLnJlYWRJZGVudGl0eVBvbGljaWVzKHByb3BlcnR5Q2hhbmdlLm5ld1ZhbHVlLCBwcm9wZXJ0eUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUHJvcGVydHlTY3J1dGlueVR5cGUuSW5saW5lUmVzb3VyY2VQb2xpY3k6XG4gICAgICAgIC8vIEFueSBQb2xpY3lEb2N1bWVudCBvbiBhIHJlc291cmNlIChpbmNsdWRpbmcgQXNzdW1lUm9sZVBvbGljeURvY3VtZW50KVxuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkT2xkKC4uLnRoaXMucmVhZFJlc291cmNlU3RhdGVtZW50cyhwcm9wZXJ0eUNoYW5nZS5vbGRWYWx1ZSwgcHJvcGVydHlDaGFuZ2UucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLmFkZE5ldyguLi50aGlzLnJlYWRSZXNvdXJjZVN0YXRlbWVudHMocHJvcGVydHlDaGFuZ2UubmV3VmFsdWUsIHByb3BlcnR5Q2hhbmdlLnJlc291cmNlTG9naWNhbElkKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQcm9wZXJ0eVNjcnV0aW55VHlwZS5NYW5hZ2VkUG9saWNpZXM6XG4gICAgICAgIC8vIEp1c3QgYSBsaXN0IG9mIG1hbmFnZWQgcG9saWNpZXNcbiAgICAgICAgdGhpcy5tYW5hZ2VkUG9saWNpZXMuYWRkT2xkKC4uLnRoaXMucmVhZE1hbmFnZWRQb2xpY2llcyhwcm9wZXJ0eUNoYW5nZS5vbGRWYWx1ZSwgcHJvcGVydHlDaGFuZ2UucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICAgICAgdGhpcy5tYW5hZ2VkUG9saWNpZXMuYWRkTmV3KC4uLnRoaXMucmVhZE1hbmFnZWRQb2xpY2llcyhwcm9wZXJ0eUNoYW5nZS5uZXdWYWx1ZSwgcHJvcGVydHlDaGFuZ2UucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWFkUmVzb3VyY2VDaGFuZ2UocmVzb3VyY2VDaGFuZ2U6IFJlc291cmNlQ2hhbmdlKSB7XG4gICAgc3dpdGNoIChyZXNvdXJjZUNoYW5nZS5zY3J1dGlueVR5cGUpIHtcbiAgICAgIGNhc2UgUmVzb3VyY2VTY3J1dGlueVR5cGUuSWRlbnRpdHlQb2xpY3lSZXNvdXJjZTpcbiAgICAgICAgLy8gQVdTOjpJQU06OlBvbGljeVxuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkT2xkKC4uLnRoaXMucmVhZElkZW50aXR5UG9saWN5UmVzb3VyY2UocmVzb3VyY2VDaGFuZ2Uub2xkUHJvcGVydGllcykpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZElkZW50aXR5UG9saWN5UmVzb3VyY2UocmVzb3VyY2VDaGFuZ2UubmV3UHJvcGVydGllcykpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmVzb3VyY2VTY3J1dGlueVR5cGUuUmVzb3VyY2VQb2xpY3lSZXNvdXJjZTpcbiAgICAgICAgLy8gQVdTOjoqOjp7QnVja2V0LFF1ZXVlLFRvcGljfVBvbGljeVxuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkT2xkKC4uLnRoaXMucmVhZFJlc291cmNlUG9saWN5UmVzb3VyY2UocmVzb3VyY2VDaGFuZ2Uub2xkUHJvcGVydGllcykpO1xuICAgICAgICB0aGlzLnN0YXRlbWVudHMuYWRkTmV3KC4uLnRoaXMucmVhZFJlc291cmNlUG9saWN5UmVzb3VyY2UocmVzb3VyY2VDaGFuZ2UubmV3UHJvcGVydGllcykpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmVzb3VyY2VTY3J1dGlueVR5cGUuTGFtYmRhUGVybWlzc2lvbjpcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLmFkZE9sZCguLi50aGlzLnJlYWRMYW1iZGFTdGF0ZW1lbnRzKHJlc291cmNlQ2hhbmdlLm9sZFByb3BlcnRpZXMpKTtcbiAgICAgICAgdGhpcy5zdGF0ZW1lbnRzLmFkZE5ldyguLi50aGlzLnJlYWRMYW1iZGFTdGF0ZW1lbnRzKHJlc291cmNlQ2hhbmdlLm5ld1Byb3BlcnRpZXMpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFJlc291cmNlU2NydXRpbnlUeXBlLlNzb1Blcm1pc3Npb25TZXQ6XG4gICAgICAgIHRoaXMuc3NvUGVybWlzc2lvblNldHMuYWRkT2xkKC4uLnRoaXMucmVhZFNzb1Blcm1pc3Npb25TZXQocmVzb3VyY2VDaGFuZ2Uub2xkUHJvcGVydGllcywgcmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VMb2dpY2FsSWQpKTtcbiAgICAgICAgdGhpcy5zc29QZXJtaXNzaW9uU2V0cy5hZGROZXcoLi4udGhpcy5yZWFkU3NvUGVybWlzc2lvblNldChyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzLCByZXNvdXJjZUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmVzb3VyY2VTY3J1dGlueVR5cGUuU3NvQXNzaWdubWVudFJlc291cmNlOlxuICAgICAgICB0aGlzLnNzb0Fzc2lnbm1lbnRzLmFkZE9sZCguLi50aGlzLnJlYWRTc29Bc3NpZ25tZW50cyhyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzLCByZXNvdXJjZUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnNzb0Fzc2lnbm1lbnRzLmFkZE5ldyguLi50aGlzLnJlYWRTc29Bc3NpZ25tZW50cyhyZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzLCByZXNvdXJjZUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUmVzb3VyY2VTY3J1dGlueVR5cGUuU3NvSW5zdGFuY2VBQ0FDb25maWdSZXNvdXJjZTpcbiAgICAgICAgdGhpcy5zc29JbnN0YW5jZUFDQUNvbmZpZ3MuYWRkT2xkKC4uLnRoaXMucmVhZFNzb0luc3RhbmNlQUNBQ29uZmlncyhyZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzLCByZXNvdXJjZUNoYW5nZS5yZXNvdXJjZUxvZ2ljYWxJZCkpO1xuICAgICAgICB0aGlzLnNzb0luc3RhbmNlQUNBQ29uZmlncy5hZGROZXcoLi4udGhpcy5yZWFkU3NvSW5zdGFuY2VBQ0FDb25maWdzKHJlc291cmNlQ2hhbmdlLm5ld1Byb3BlcnRpZXMsIHJlc291cmNlQ2hhbmdlLnJlc291cmNlTG9naWNhbElkKSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIGxpc3Qgb2YgcG9saWNpZXMgb24gYW4gaWRlbnRpdHlcbiAgICovXG4gIHByaXZhdGUgcmVhZElkZW50aXR5UG9saWNpZXMocG9saWNpZXM6IGFueSwgbG9naWNhbElkOiBzdHJpbmcpOiBTdGF0ZW1lbnRbXSB7XG4gICAgaWYgKHBvbGljaWVzID09PSB1bmRlZmluZWQgfHwgIUFycmF5LmlzQXJyYXkocG9saWNpZXMpKSB7IHJldHVybiBbXTsgfVxuXG4gICAgY29uc3QgYXBwbGllc1RvUHJpbmNpcGFsID0gJ0FXUzokeycgKyBsb2dpY2FsSWQgKyAnfSc7XG5cbiAgICByZXR1cm4gZmxhdE1hcChwb2xpY2llcywgKHBvbGljeTogYW55KSA9PiB7XG4gICAgICAvLyBjaGVjayBpZiB0aGUgUG9saWN5IGl0c2VsZiBpcyBub3QgYW4gaW50cmluc2ljLCBsaWtlIGFuIEZuOjpJZlxuICAgICAgY29uc3QgdW5wYXJzZWRTdGF0ZW1lbnQgPSBwb2xpY3kuUG9saWN5RG9jdW1lbnQ/LlN0YXRlbWVudFxuICAgICAgICA/IHBvbGljeS5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnRcbiAgICAgICAgOiBwb2xpY3k7XG4gICAgICByZXR1cm4gZGVmYXVsdFByaW5jaXBhbChhcHBsaWVzVG9QcmluY2lwYWwsIHBhcnNlU3RhdGVtZW50cyhyZW5kZXJJbnRyaW5zaWNzKHVucGFyc2VkU3RhdGVtZW50KSkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuIElBTTo6UG9saWN5IHJlc291cmNlXG4gICAqL1xuICBwcml2YXRlIHJlYWRJZGVudGl0eVBvbGljeVJlc291cmNlKHByb3BlcnRpZXM6IGFueSk6IFN0YXRlbWVudFtdIHtcbiAgICBpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBbXTsgfVxuXG4gICAgcHJvcGVydGllcyA9IHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcyk7XG5cbiAgICBjb25zdCBwcmluY2lwYWxzID0gKHByb3BlcnRpZXMuR3JvdXBzIHx8IFtdKS5jb25jYXQocHJvcGVydGllcy5Vc2VycyB8fCBbXSkuY29uY2F0KHByb3BlcnRpZXMuUm9sZXMgfHwgW10pO1xuICAgIHJldHVybiBmbGF0TWFwKHByaW5jaXBhbHMsIChwcmluY2lwYWw6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcmVmID0gJ0FXUzonICsgcHJpbmNpcGFsO1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcmluY2lwYWwocmVmLCBwYXJzZVN0YXRlbWVudHMocHJvcGVydGllcy5Qb2xpY3lEb2N1bWVudC5TdGF0ZW1lbnQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZFNzb0luc3RhbmNlQUNBQ29uZmlncyhwcm9wZXJ0aWVzOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3NvSW5zdGFuY2VBQ0FDb25maWdbXSB7XG4gICAgaWYgKHByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIHByb3BlcnRpZXMgPSByZW5kZXJJbnRyaW5zaWNzKHByb3BlcnRpZXMpO1xuXG4gICAgcmV0dXJuIFtuZXcgU3NvSW5zdGFuY2VBQ0FDb25maWcoe1xuICAgICAgY2ZuTG9naWNhbElkOiAnJHsnICsgbG9naWNhbElkICsgJ30nLFxuICAgICAgc3NvSW5zdGFuY2VBcm46IHByb3BlcnRpZXMuSW5zdGFuY2VBcm4sXG4gICAgICBhY2Nlc3NDb250cm9sQXR0cmlidXRlczogcHJvcGVydGllcy5BY2Nlc3NDb250cm9sQXR0cmlidXRlcyxcbiAgICB9KV07XG4gIH1cblxuICBwcml2YXRlIHJlYWRTc29Bc3NpZ25tZW50cyhwcm9wZXJ0aWVzOiBhbnksIGxvZ2ljYWxJZDogc3RyaW5nKTogU3NvQXNzaWdubWVudFtdIHtcbiAgICBpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiBbXTsgfVxuXG4gICAgcHJvcGVydGllcyA9IHJlbmRlckludHJpbnNpY3MocHJvcGVydGllcyk7XG5cbiAgICByZXR1cm4gW25ldyBTc29Bc3NpZ25tZW50KHtcbiAgICAgIGNmbkxvZ2ljYWxJZDogJyR7JyArIGxvZ2ljYWxJZCArICd9JyxcbiAgICAgIHNzb0luc3RhbmNlQXJuOiBwcm9wZXJ0aWVzLkluc3RhbmNlQXJuLFxuICAgICAgcGVybWlzc2lvblNldEFybjogcHJvcGVydGllcy5QZXJtaXNzaW9uU2V0QXJuLFxuICAgICAgcHJpbmNpcGFsSWQ6IHByb3BlcnRpZXMuUHJpbmNpcGFsSWQsXG4gICAgICBwcmluY2lwYWxUeXBlOiBwcm9wZXJ0aWVzLlByaW5jaXBhbFR5cGUsXG4gICAgICB0YXJnZXRJZDogcHJvcGVydGllcy5UYXJnZXRJZCxcbiAgICAgIHRhcmdldFR5cGU6IHByb3BlcnRpZXMuVGFyZ2V0VHlwZSxcbiAgICB9KV07XG4gIH1cblxuICBwcml2YXRlIHJlYWRTc29QZXJtaXNzaW9uU2V0KHByb3BlcnRpZXM6IGFueSwgbG9naWNhbElkOiBzdHJpbmcpOiBTc29QZXJtaXNzaW9uU2V0W10ge1xuICAgIGlmIChwcm9wZXJ0aWVzID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBwcm9wZXJ0aWVzID0gcmVuZGVySW50cmluc2ljcyhwcm9wZXJ0aWVzKTtcblxuICAgIHJldHVybiBbbmV3IFNzb1Blcm1pc3Npb25TZXQoe1xuICAgICAgY2ZuTG9naWNhbElkOiAnJHsnICsgbG9naWNhbElkICsgJ30nLFxuICAgICAgbmFtZTogcHJvcGVydGllcy5OYW1lLFxuICAgICAgc3NvSW5zdGFuY2VBcm46IHByb3BlcnRpZXMuSW5zdGFuY2VBcm4sXG4gICAgICBzc29DdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzOiBwcm9wZXJ0aWVzLkN1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXMsXG4gICAgICBzc29QZXJtaXNzaW9uc0JvdW5kYXJ5OiBwcm9wZXJ0aWVzLlBlcm1pc3Npb25zQm91bmRhcnksXG4gICAgfSldO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkUmVzb3VyY2VTdGF0ZW1lbnRzKHBvbGljeTogYW55LCBsb2dpY2FsSWQ6IHN0cmluZyk6IFN0YXRlbWVudFtdIHtcbiAgICBpZiAocG9saWN5ID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICBjb25zdCBhcHBsaWVzVG9SZXNvdXJjZSA9ICckeycgKyBsb2dpY2FsSWQgKyAnLkFybn0nO1xuICAgIHJldHVybiBkZWZhdWx0UmVzb3VyY2UoYXBwbGllc1RvUmVzb3VyY2UsIHBhcnNlU3RhdGVtZW50cyhyZW5kZXJJbnRyaW5zaWNzKHBvbGljeS5TdGF0ZW1lbnQpKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYW4gQVdTOjoqOjp7QnVja2V0LFRvcGljLFF1ZXVlfXBvbGljeVxuICAgKi9cbiAgcHJpdmF0ZSByZWFkUmVzb3VyY2VQb2xpY3lSZXNvdXJjZShwcm9wZXJ0aWVzOiBhbnkpOiBTdGF0ZW1lbnRbXSB7XG4gICAgaWYgKHByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gW107IH1cblxuICAgIHByb3BlcnRpZXMgPSByZW5kZXJJbnRyaW5zaWNzKHByb3BlcnRpZXMpO1xuXG4gICAgY29uc3QgcG9saWN5S2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZpbHRlcihrZXkgPT4ga2V5LmluZGV4T2YoJ1BvbGljeScpID4gLTEpO1xuXG4gICAgLy8gRmluZCB0aGUga2V5IHRoYXQgaWRlbnRpZmllcyB0aGUgcmVzb3VyY2UocykgdGhpcyBwb2xpY3kgYXBwbGllcyB0b1xuICAgIGNvbnN0IHJlc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZpbHRlcihrZXkgPT4gIXBvbGljeUtleXMuaW5jbHVkZXMoa2V5KSAmJiAha2V5LmVuZHNXaXRoKCdOYW1lJykpO1xuICAgIGxldCByZXNvdXJjZXMgPSByZXNvdXJjZUtleXMubGVuZ3RoID09PSAxID8gcHJvcGVydGllc1tyZXNvdXJjZUtleXNbMF1dIDogWyc/Pz8nXTtcblxuICAgIC8vIEZvciBzb21lIHJlc291cmNlcywgdGhpcyBpcyBhIHNpbmdsZXRvbiBzdHJpbmcsIGZvciBzb21lIGl0J3MgYW4gYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzb3VyY2VzKSkge1xuICAgICAgcmVzb3VyY2VzID0gW3Jlc291cmNlc107XG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXRNYXAocmVzb3VyY2VzLCAocmVzb3VyY2U6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGRlZmF1bHRSZXNvdXJjZShyZXNvdXJjZSwgcGFyc2VTdGF0ZW1lbnRzKHByb3BlcnRpZXNbcG9saWN5S2V5c1swXV0uU3RhdGVtZW50KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRNYW5hZ2VkUG9saWNpZXMocG9saWN5QXJuczogYW55LCBsb2dpY2FsSWQ6IHN0cmluZyk6IE1hbmFnZWRQb2xpY3lBdHRhY2htZW50W10ge1xuICAgIGlmICghcG9saWN5QXJucykgeyByZXR1cm4gW107IH1cblxuICAgIGNvbnN0IHJlcCA9ICckeycgKyBsb2dpY2FsSWQgKyAnfSc7XG4gICAgcmV0dXJuIE1hbmFnZWRQb2xpY3lBdHRhY2htZW50LnBhcnNlTWFuYWdlZFBvbGljaWVzKHJlcCwgcmVuZGVySW50cmluc2ljcyhwb2xpY3lBcm5zKSk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRMYW1iZGFTdGF0ZW1lbnRzKHByb3BlcnRpZXM/OiBQcm9wZXJ0eU1hcCk6IFN0YXRlbWVudFtdIHtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHsgcmV0dXJuIFtdOyB9XG5cbiAgICByZXR1cm4gW3BhcnNlTGFtYmRhUGVybWlzc2lvbihyZW5kZXJJbnRyaW5zaWNzKHByb3BlcnRpZXMpKV07XG4gIH1cbn1cblxuLyoqXG4gKiBTZXQgYW4gdW5kZWZpbmVkIG9yIHdpbGRjYXJkZWQgcHJpbmNpcGFsIG9uIHRoZXNlIHN0YXRlbWVudHNcbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFByaW5jaXBhbChwcmluY2lwYWw6IHN0cmluZywgc3RhdGVtZW50czogU3RhdGVtZW50W10pIHtcbiAgc3RhdGVtZW50cy5mb3JFYWNoKHMgPT4gcy5wcmluY2lwYWxzLnJlcGxhY2VFbXB0eShwcmluY2lwYWwpKTtcbiAgc3RhdGVtZW50cy5mb3JFYWNoKHMgPT4gcy5wcmluY2lwYWxzLnJlcGxhY2VTdGFyKHByaW5jaXBhbCkpO1xuICByZXR1cm4gc3RhdGVtZW50cztcbn1cblxuLyoqXG4gKiBTZXQgYW4gdW5kZWZpbmVkIG9yIHdpbGRjYXJkZWQgcmVzb3VyY2Ugb24gdGhlc2Ugc3RhdGVtZW50c1xuICovXG5mdW5jdGlvbiBkZWZhdWx0UmVzb3VyY2UocmVzb3VyY2U6IHN0cmluZywgc3RhdGVtZW50czogU3RhdGVtZW50W10pIHtcbiAgc3RhdGVtZW50cy5mb3JFYWNoKHMgPT4gcy5yZXNvdXJjZXMucmVwbGFjZUVtcHR5KHJlc291cmNlKSk7XG4gIHN0YXRlbWVudHMuZm9yRWFjaChzID0+IHMucmVzb3VyY2VzLnJlcGxhY2VTdGFyKHJlc291cmNlKSk7XG4gIHJldHVybiBzdGF0ZW1lbnRzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElhbUNoYW5nZXNKc29uIHtcbiAgc3RhdGVtZW50QWRkaXRpb25zPzogQXJyYXk8TWF5YmVQYXJzZWQ8U3RhdGVtZW50SnNvbj4+O1xuICBzdGF0ZW1lbnRSZW1vdmFscz86IEFycmF5PE1heWJlUGFyc2VkPFN0YXRlbWVudEpzb24+PjtcbiAgbWFuYWdlZFBvbGljeUFkZGl0aW9ucz86IEFycmF5PE1heWJlUGFyc2VkPE1hbmFnZWRQb2xpY3lKc29uPj47XG4gIG1hbmFnZWRQb2xpY3lSZW1vdmFscz86IEFycmF5PE1heWJlUGFyc2VkPE1hbmFnZWRQb2xpY3lKc29uPj47XG59XG4iXX0=
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This namespace should be a subset of the L1 CfnPermissionSet, other than
|
|
3
|
+
* capitalization, since the values come from from a parsed CFN template.
|
|
4
|
+
*/
|
|
5
|
+
export declare namespace ISsoPermissionSet {
|
|
6
|
+
interface Props {
|
|
7
|
+
readonly name: string | undefined;
|
|
8
|
+
readonly cfnLogicalId: string | undefined;
|
|
9
|
+
readonly ssoInstanceArn: string | undefined;
|
|
10
|
+
readonly ssoPermissionsBoundary: ISsoPermissionSet.PermissionsBoundary | undefined;
|
|
11
|
+
readonly ssoCustomerManagedPolicyReferences: ISsoPermissionSet.CustomerManagedPolicyReference[] | undefined;
|
|
12
|
+
}
|
|
13
|
+
interface PermissionsBoundary {
|
|
14
|
+
readonly CustomerManagedPolicyReference?: CustomerManagedPolicyReference;
|
|
15
|
+
readonly ManagedPolicyArn?: string;
|
|
16
|
+
}
|
|
17
|
+
interface CustomerManagedPolicyReference {
|
|
18
|
+
readonly Name: string | undefined;
|
|
19
|
+
readonly Path: string | undefined;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export declare class SsoPermissionSet implements ISsoPermissionSet.Props {
|
|
23
|
+
readonly name: string | undefined;
|
|
24
|
+
readonly cfnLogicalId: string | undefined;
|
|
25
|
+
readonly ssoInstanceArn: string | undefined;
|
|
26
|
+
readonly ssoPermissionsBoundary: ISsoPermissionSet.PermissionsBoundary | undefined;
|
|
27
|
+
readonly ssoCustomerManagedPolicyReferences: ISsoPermissionSet.CustomerManagedPolicyReference[] | undefined;
|
|
28
|
+
constructor(props: ISsoPermissionSet.Props);
|
|
29
|
+
equal(other: SsoPermissionSet): boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare namespace ISsoAssignment {
|
|
32
|
+
interface Props {
|
|
33
|
+
readonly ssoInstanceArn: string | undefined;
|
|
34
|
+
readonly cfnLogicalId: string | undefined;
|
|
35
|
+
readonly permissionSetArn: string | undefined;
|
|
36
|
+
readonly principalId: string | undefined;
|
|
37
|
+
readonly principalType: string | undefined;
|
|
38
|
+
readonly targetId: string | undefined;
|
|
39
|
+
readonly targetType: string | undefined;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export declare class SsoAssignment implements ISsoAssignment.Props {
|
|
43
|
+
readonly cfnLogicalId: string | undefined;
|
|
44
|
+
readonly ssoInstanceArn: string | undefined;
|
|
45
|
+
readonly permissionSetArn: string | undefined;
|
|
46
|
+
readonly principalId: string | undefined;
|
|
47
|
+
readonly principalType: string | undefined;
|
|
48
|
+
readonly targetId: string | undefined;
|
|
49
|
+
readonly targetType: string | undefined;
|
|
50
|
+
constructor(props: ISsoAssignment.Props);
|
|
51
|
+
equal(other: SsoAssignment): boolean;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* AWS::SSO::InstanceAccessControlAttributeConfiguration
|
|
55
|
+
*/
|
|
56
|
+
export interface ISsoInstanceACAConfigProps {
|
|
57
|
+
ssoInstanceArn: string;
|
|
58
|
+
}
|
|
59
|
+
export declare namespace ISsoInstanceACAConfig {
|
|
60
|
+
type AccessControlAttribute = {
|
|
61
|
+
Key: string | undefined;
|
|
62
|
+
Value: {
|
|
63
|
+
Source: string[];
|
|
64
|
+
} | undefined;
|
|
65
|
+
} | undefined;
|
|
66
|
+
interface Props {
|
|
67
|
+
readonly ssoInstanceArn: string | undefined;
|
|
68
|
+
readonly cfnLogicalId: string | undefined;
|
|
69
|
+
readonly accessControlAttributes?: AccessControlAttribute[] | undefined;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export declare class SsoInstanceACAConfig implements ISsoInstanceACAConfig.Props {
|
|
73
|
+
readonly cfnLogicalId: string | undefined;
|
|
74
|
+
readonly ssoInstanceArn: string | undefined;
|
|
75
|
+
readonly accessControlAttributes?: ISsoInstanceACAConfig.AccessControlAttribute[] | undefined;
|
|
76
|
+
constructor(props: ISsoInstanceACAConfig.Props);
|
|
77
|
+
equal(other: SsoInstanceACAConfig): boolean;
|
|
78
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SsoInstanceACAConfig = exports.SsoAssignment = exports.SsoPermissionSet = void 0;
|
|
4
|
+
// namespace object imports won't work in the bundle for function exports
|
|
5
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
6
|
+
const deepEqual = require('fast-deep-equal');
|
|
7
|
+
class SsoPermissionSet {
|
|
8
|
+
constructor(props) {
|
|
9
|
+
this.cfnLogicalId = props.cfnLogicalId;
|
|
10
|
+
this.name = props.name;
|
|
11
|
+
this.ssoInstanceArn = props.ssoInstanceArn;
|
|
12
|
+
this.ssoPermissionsBoundary = props.ssoPermissionsBoundary;
|
|
13
|
+
this.ssoCustomerManagedPolicyReferences = props.ssoCustomerManagedPolicyReferences;
|
|
14
|
+
}
|
|
15
|
+
equal(other) {
|
|
16
|
+
return deepEqual(this, other);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.SsoPermissionSet = SsoPermissionSet;
|
|
20
|
+
class SsoAssignment {
|
|
21
|
+
constructor(props) {
|
|
22
|
+
this.cfnLogicalId = props.cfnLogicalId;
|
|
23
|
+
this.ssoInstanceArn = props.ssoInstanceArn;
|
|
24
|
+
this.permissionSetArn = props.permissionSetArn;
|
|
25
|
+
this.principalId = props.principalId;
|
|
26
|
+
this.principalType = props.principalType;
|
|
27
|
+
this.targetId = props.targetId;
|
|
28
|
+
this.targetType = props.targetType;
|
|
29
|
+
}
|
|
30
|
+
equal(other) {
|
|
31
|
+
return deepEqual(this, other);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.SsoAssignment = SsoAssignment;
|
|
35
|
+
class SsoInstanceACAConfig {
|
|
36
|
+
constructor(props) {
|
|
37
|
+
this.cfnLogicalId = props.cfnLogicalId;
|
|
38
|
+
this.ssoInstanceArn = props.ssoInstanceArn;
|
|
39
|
+
this.accessControlAttributes = props.accessControlAttributes;
|
|
40
|
+
}
|
|
41
|
+
equal(other) {
|
|
42
|
+
return deepEqual(this, other);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.SsoInstanceACAConfig = SsoInstanceACAConfig;
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWFtLWlkZW50aXR5LWNlbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImlhbS1pZGVudGl0eS1jZW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXlFO0FBQ3pFLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQXdCN0MsTUFBYSxnQkFBZ0I7SUFPM0IsWUFBWSxLQUE4QjtRQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLHNCQUFzQixDQUFDO1FBQzNELElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxLQUFLLENBQUMsa0NBQWtDLENBQUM7SUFDckYsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUF1QjtRQUNsQyxPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBbEJELDRDQWtCQztBQWNELE1BQWEsYUFBYTtJQVN4QixZQUFZLEtBQTJCO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFvQjtRQUMvQixPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBdEJELHNDQXNCQztBQXNCRCxNQUFhLG9CQUFvQjtJQUsvQixZQUFZLEtBQWtDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQztRQUN2QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDM0MsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztJQUMvRCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQTJCO1FBQ3RDLE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFkRCxvREFjQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIG5hbWVzcGFjZSBvYmplY3QgaW1wb3J0cyB3b24ndCB3b3JrIGluIHRoZSBidW5kbGUgZm9yIGZ1bmN0aW9uIGV4cG9ydHNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBkZWVwRXF1YWwgPSByZXF1aXJlKCdmYXN0LWRlZXAtZXF1YWwnKTtcblxuLyoqXG4gKiBUaGlzIG5hbWVzcGFjZSBzaG91bGQgYmUgYSBzdWJzZXQgb2YgdGhlIEwxIENmblBlcm1pc3Npb25TZXQsIG90aGVyIHRoYW5cbiAqIGNhcGl0YWxpemF0aW9uLCBzaW5jZSB0aGUgdmFsdWVzIGNvbWUgZnJvbSBmcm9tIGEgcGFyc2VkIENGTiB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IG5hbWVzcGFjZSBJU3NvUGVybWlzc2lvblNldCB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgUHJvcHMge1xuICAgIHJlYWRvbmx5IG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSBjZm5Mb2dpY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSBzc29JbnN0YW5jZUFybjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlYWRvbmx5IHNzb1Blcm1pc3Npb25zQm91bmRhcnk6IElTc29QZXJtaXNzaW9uU2V0LlBlcm1pc3Npb25zQm91bmRhcnkgfCB1bmRlZmluZWQ7XG4gICAgcmVhZG9ubHkgc3NvQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlczogSVNzb1Blcm1pc3Npb25TZXQuQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlW10gfCB1bmRlZmluZWQ7XG4gIH1cbiAgZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uc0JvdW5kYXJ5IHtcbiAgICByZWFkb25seSBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2U/OiBDdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2U7XG4gICAgcmVhZG9ubHkgTWFuYWdlZFBvbGljeUFybj86IHN0cmluZztcbiAgfVxuICBleHBvcnQgaW50ZXJmYWNlIEN1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZSB7XG4gICAgcmVhZG9ubHkgTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHJlYWRvbmx5IFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3NvUGVybWlzc2lvblNldCBpbXBsZW1lbnRzIElTc29QZXJtaXNzaW9uU2V0LlByb3BzIHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IGNmbkxvZ2ljYWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgcmVhZG9ubHkgc3NvSW5zdGFuY2VBcm46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IHNzb1Blcm1pc3Npb25zQm91bmRhcnk6IElTc29QZXJtaXNzaW9uU2V0LlBlcm1pc3Npb25zQm91bmRhcnkgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSBzc29DdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VzOiBJU3NvUGVybWlzc2lvblNldC5DdXN0b21lck1hbmFnZWRQb2xpY3lSZWZlcmVuY2VbXSB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVNzb1Blcm1pc3Npb25TZXQuUHJvcHMpIHtcbiAgICB0aGlzLmNmbkxvZ2ljYWxJZCA9IHByb3BzLmNmbkxvZ2ljYWxJZDtcbiAgICB0aGlzLm5hbWUgPSBwcm9wcy5uYW1lO1xuICAgIHRoaXMuc3NvSW5zdGFuY2VBcm4gPSBwcm9wcy5zc29JbnN0YW5jZUFybjtcbiAgICB0aGlzLnNzb1Blcm1pc3Npb25zQm91bmRhcnkgPSBwcm9wcy5zc29QZXJtaXNzaW9uc0JvdW5kYXJ5O1xuICAgIHRoaXMuc3NvQ3VzdG9tZXJNYW5hZ2VkUG9saWN5UmVmZXJlbmNlcyA9IHByb3BzLnNzb0N1c3RvbWVyTWFuYWdlZFBvbGljeVJlZmVyZW5jZXM7XG4gIH1cblxuICBwdWJsaWMgZXF1YWwob3RoZXI6IFNzb1Blcm1pc3Npb25TZXQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGVlcEVxdWFsKHRoaXMsIG90aGVyKTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIElTc29Bc3NpZ25tZW50IHtcbiAgZXhwb3J0IGludGVyZmFjZSBQcm9wcyB7XG4gICAgcmVhZG9ubHkgc3NvSW5zdGFuY2VBcm46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSBjZm5Mb2dpY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSBwZXJtaXNzaW9uU2V0QXJuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVhZG9ubHkgcHJpbmNpcGFsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSBwcmluY2lwYWxUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcmVhZG9ubHkgdGFyZ2V0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSB0YXJnZXRUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNzb0Fzc2lnbm1lbnQgaW1wbGVtZW50cyBJU3NvQXNzaWdubWVudC5Qcm9wcyB7XG4gIHB1YmxpYyByZWFkb25seSBjZm5Mb2dpY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IHNzb0luc3RhbmNlQXJuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSBwZXJtaXNzaW9uU2V0QXJuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSBwcmluY2lwYWxJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpbmNpcGFsVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHJlYWRvbmx5IHRhcmdldFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVNzb0Fzc2lnbm1lbnQuUHJvcHMpIHtcbiAgICB0aGlzLmNmbkxvZ2ljYWxJZCA9IHByb3BzLmNmbkxvZ2ljYWxJZDtcbiAgICB0aGlzLnNzb0luc3RhbmNlQXJuID0gcHJvcHMuc3NvSW5zdGFuY2VBcm47XG4gICAgdGhpcy5wZXJtaXNzaW9uU2V0QXJuID0gcHJvcHMucGVybWlzc2lvblNldEFybjtcbiAgICB0aGlzLnByaW5jaXBhbElkID0gcHJvcHMucHJpbmNpcGFsSWQ7XG4gICAgdGhpcy5wcmluY2lwYWxUeXBlID0gcHJvcHMucHJpbmNpcGFsVHlwZTtcbiAgICB0aGlzLnRhcmdldElkID0gcHJvcHMudGFyZ2V0SWQ7XG4gICAgdGhpcy50YXJnZXRUeXBlID0gcHJvcHMudGFyZ2V0VHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBlcXVhbChvdGhlcjogU3NvQXNzaWdubWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkZWVwRXF1YWwodGhpcywgb3RoZXIpO1xuICB9XG59XG5cbi8qKlxuICogQVdTOjpTU086Okluc3RhbmNlQWNjZXNzQ29udHJvbEF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3NvSW5zdGFuY2VBQ0FDb25maWdQcm9wcyB7XG4gIHNzb0luc3RhbmNlQXJuOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgSVNzb0luc3RhbmNlQUNBQ29uZmlnIHtcbiAgZXhwb3J0IHR5cGUgQWNjZXNzQ29udHJvbEF0dHJpYnV0ZSA9IHtcbiAgICBLZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBWYWx1ZTogeyBTb3VyY2U6IHN0cmluZ1tdIH0gfCB1bmRlZmluZWQ7XG4gIH0gfCB1bmRlZmluZWQ7XG5cbiAgZXhwb3J0IGludGVyZmFjZSBQcm9wcyB7XG4gICAgcmVhZG9ubHkgc3NvSW5zdGFuY2VBcm46IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSBjZm5Mb2dpY2FsSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICByZWFkb25seSBhY2Nlc3NDb250cm9sQXR0cmlidXRlcz86IEFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGVbXSB8IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3NvSW5zdGFuY2VBQ0FDb25maWcgaW1wbGVtZW50cyBJU3NvSW5zdGFuY2VBQ0FDb25maWcuUHJvcHMge1xuICBwdWJsaWMgcmVhZG9ubHkgY2ZuTG9naWNhbElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHB1YmxpYyByZWFkb25seSBzc29JbnN0YW5jZUFybjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgcmVhZG9ubHkgYWNjZXNzQ29udHJvbEF0dHJpYnV0ZXM/OiBJU3NvSW5zdGFuY2VBQ0FDb25maWcuQWNjZXNzQ29udHJvbEF0dHJpYnV0ZVtdIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJU3NvSW5zdGFuY2VBQ0FDb25maWcuUHJvcHMpIHtcbiAgICB0aGlzLmNmbkxvZ2ljYWxJZCA9IHByb3BzLmNmbkxvZ2ljYWxJZDtcbiAgICB0aGlzLnNzb0luc3RhbmNlQXJuID0gcHJvcHMuc3NvSW5zdGFuY2VBcm47XG4gICAgdGhpcy5hY2Nlc3NDb250cm9sQXR0cmlidXRlcyA9IHByb3BzLmFjY2Vzc0NvbnRyb2xBdHRyaWJ1dGVzO1xuICB9XG5cbiAgcHVibGljIGVxdWFsKG90aGVyOiBTc29JbnN0YW5jZUFDQUNvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkZWVwRXF1YWwodGhpcywgb3RoZXIpO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk/cloudformation-diff",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.141.0",
|
|
4
4
|
"description": "Utilities to diff CDK stacks against CloudFormation templates",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
},
|
|
24
24
|
"license": "Apache-2.0",
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@aws-cdk/aws-service-spec": "^0.1.
|
|
27
|
-
"@aws-cdk/service-spec-types": "^0.0.
|
|
26
|
+
"@aws-cdk/aws-service-spec": "^0.1.1",
|
|
27
|
+
"@aws-cdk/service-spec-types": "^0.0.69",
|
|
28
28
|
"chalk": "^4",
|
|
29
29
|
"diff": "^5.2.0",
|
|
30
30
|
"fast-deep-equal": "^3.1.3",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"table": "^6.8.2"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
36
|
-
"@aws-cdk/pkglint": "2.
|
|
35
|
+
"@aws-cdk/cdk-build-tools": "2.141.0-alpha.0",
|
|
36
|
+
"@aws-cdk/pkglint": "2.141.0-alpha.0",
|
|
37
37
|
"@aws-sdk/client-cloudformation": "^3.529.1",
|
|
38
38
|
"@types/jest": "^29.5.12",
|
|
39
39
|
"@types/string-width": "^4.0.1",
|