@aws-cdk/cloudformation-diff 2.187.1 → 2.187.3
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/index.js +35 -2
- package/lib/diff/template-and-changeset-diff-merger.d.ts +75 -0
- package/lib/diff/template-and-changeset-diff-merger.js +330 -4
- package/lib/diff/types.d.ts +11 -0
- package/lib/diff/types.js +66 -1
- package/lib/diff/util.js +10 -7
- package/lib/diff-template.js +50 -7
- package/lib/diffable.js +5 -7
- package/lib/format-foreach.js +13 -10
- package/lib/format-table.js +41 -5
- package/lib/format.js +38 -32
- package/lib/iam/iam-changes.js +34 -31
- package/lib/iam/iam-identity-center.js +16 -1
- package/lib/iam/managed-policy.js +3 -1
- package/lib/iam/statement.js +34 -1
- package/lib/mappings.js +9 -6
- package/lib/network/security-group-changes.js +8 -5
- package/lib/network/security-group-rule.js +21 -1
- package/package.json +13 -11
package/lib/diff/types.js
CHANGED
|
@@ -9,6 +9,25 @@ const iam_changes_1 = require("../iam/iam-changes");
|
|
|
9
9
|
const security_group_changes_1 = require("../network/security-group-changes");
|
|
10
10
|
/** Semantic differences between two CloudFormation templates. */
|
|
11
11
|
class TemplateDiff {
|
|
12
|
+
awsTemplateFormatVersion;
|
|
13
|
+
description;
|
|
14
|
+
transform;
|
|
15
|
+
conditions;
|
|
16
|
+
mappings;
|
|
17
|
+
metadata;
|
|
18
|
+
outputs;
|
|
19
|
+
parameters;
|
|
20
|
+
resources;
|
|
21
|
+
/** The differences in unknown/unexpected parts of the template */
|
|
22
|
+
unknown;
|
|
23
|
+
/**
|
|
24
|
+
* Changes to IAM policies
|
|
25
|
+
*/
|
|
26
|
+
iamChanges;
|
|
27
|
+
/**
|
|
28
|
+
* Changes to Security Group ingress and egress rules
|
|
29
|
+
*/
|
|
30
|
+
securityGroupChanges;
|
|
12
31
|
constructor(args) {
|
|
13
32
|
if (args.awsTemplateFormatVersion !== undefined) {
|
|
14
33
|
this.awsTemplateFormatVersion = args.awsTemplateFormatVersion;
|
|
@@ -175,6 +194,14 @@ exports.TemplateDiff = TemplateDiff;
|
|
|
175
194
|
* Models an entity that changed between two versions of a CloudFormation template.
|
|
176
195
|
*/
|
|
177
196
|
class Difference {
|
|
197
|
+
oldValue;
|
|
198
|
+
newValue;
|
|
199
|
+
/**
|
|
200
|
+
* Whether this is an actual different or the values are actually the same
|
|
201
|
+
*
|
|
202
|
+
* isDifferent => (isUpdate | isRemoved | isUpdate)
|
|
203
|
+
*/
|
|
204
|
+
isDifferent;
|
|
178
205
|
/**
|
|
179
206
|
* @param oldValue - the old value, cannot be equal (to the sense of +deepEqual+) to +newValue+.
|
|
180
207
|
* @param newValue - the new value, cannot be equal (to the sense of +deepEqual+) to +oldValue+.
|
|
@@ -203,6 +230,7 @@ class Difference {
|
|
|
203
230
|
}
|
|
204
231
|
exports.Difference = Difference;
|
|
205
232
|
class PropertyDifference extends Difference {
|
|
233
|
+
changeImpact;
|
|
206
234
|
constructor(oldValue, newValue, args) {
|
|
207
235
|
super(oldValue, newValue);
|
|
208
236
|
this.changeImpact = args.changeImpact;
|
|
@@ -210,6 +238,7 @@ class PropertyDifference extends Difference {
|
|
|
210
238
|
}
|
|
211
239
|
exports.PropertyDifference = PropertyDifference;
|
|
212
240
|
class DifferenceCollection {
|
|
241
|
+
diffs;
|
|
213
242
|
constructor(diffs) {
|
|
214
243
|
this.diffs = diffs;
|
|
215
244
|
}
|
|
@@ -229,6 +258,21 @@ class DifferenceCollection {
|
|
|
229
258
|
remove(logicalId) {
|
|
230
259
|
delete this.diffs[logicalId];
|
|
231
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* Whether a difference (changed or not) is tracked for the given logical ID.
|
|
263
|
+
*
|
|
264
|
+
* Note this is different from `logicalIds`, which only returns IDs that have
|
|
265
|
+
* an actual change. A logical ID may be present here with a "no-op" difference.
|
|
266
|
+
*/
|
|
267
|
+
has(logicalId) {
|
|
268
|
+
return this.diffs[logicalId] !== undefined;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Set (or replace) the difference tracked for the given logical ID.
|
|
272
|
+
*/
|
|
273
|
+
set(logicalId, diff) {
|
|
274
|
+
this.diffs[logicalId] = diff;
|
|
275
|
+
}
|
|
232
276
|
get logicalIds() {
|
|
233
277
|
return Object.keys(this.changes);
|
|
234
278
|
}
|
|
@@ -346,6 +390,27 @@ function worstImpact(one, two) {
|
|
|
346
390
|
* This class can be mutated after construction.
|
|
347
391
|
*/
|
|
348
392
|
class ResourceDifference {
|
|
393
|
+
oldValue;
|
|
394
|
+
newValue;
|
|
395
|
+
/**
|
|
396
|
+
* Whether this resource was added
|
|
397
|
+
*/
|
|
398
|
+
isAddition;
|
|
399
|
+
/**
|
|
400
|
+
* Whether this resource was removed
|
|
401
|
+
*/
|
|
402
|
+
isRemoval;
|
|
403
|
+
/**
|
|
404
|
+
* Whether this resource was imported
|
|
405
|
+
*/
|
|
406
|
+
isImport;
|
|
407
|
+
move;
|
|
408
|
+
/** Property-level changes on the resource */
|
|
409
|
+
propertyDiffs;
|
|
410
|
+
/** Changes to non-property level attributes of the resource */
|
|
411
|
+
otherDiffs;
|
|
412
|
+
/** The resource type (or old and new type if it has changed) */
|
|
413
|
+
resourceTypes;
|
|
349
414
|
constructor(oldValue, newValue, args) {
|
|
350
415
|
this.oldValue = oldValue;
|
|
351
416
|
this.newValue = newValue;
|
|
@@ -494,4 +559,4 @@ function onlyChanges(xs) {
|
|
|
494
559
|
}
|
|
495
560
|
return ret;
|
|
496
561
|
}
|
|
497
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3dUJBLG9EQUVDO0FBMXVCRCxtQ0FBd0M7QUFFeEMsb0VBQXlGO0FBQ3pGLGlDQUFzRDtBQUN0RCxvREFBZ0Q7QUFDaEQsOEVBQXlFO0FBZ0N6RSxpRUFBaUU7QUFDakUsTUFBYSxZQUFZO0lBdUJ2QixZQUFZLElBQW1CO1FBQzdCLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDaEUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdEMsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbEMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLG9C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Q0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM3QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXJ0aW9uRXJyb3IgfSBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSBhcyBSZXNvdXJjZU1vZGVsIH0gZnJvbSAnQGF3cy1jZGsvc2VydmljZS1zcGVjLXR5cGVzJztcbmltcG9ydCB7IFByb3BlcnR5U2NydXRpbnlUeXBlLCBSZXNvdXJjZVNjcnV0aW55VHlwZSB9IGZyb20gJ0Bhd3MtY2RrL3NlcnZpY2Utc3BlYy10eXBlcyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwsIGxvYWRSZXNvdXJjZU1vZGVsIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IElhbUNoYW5nZXMgfSBmcm9tICcuLi9pYW0vaWFtLWNoYW5nZXMnO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cENoYW5nZXMgfSBmcm9tICcuLi9uZXR3b3JrL3NlY3VyaXR5LWdyb3VwLWNoYW5nZXMnO1xuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eU1hcCA9IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbmV4cG9ydCB0eXBlIENoYW5nZVNldFJlc291cmNlcyA9IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogQ2hhbmdlU2V0UmVzb3VyY2UgfTtcblxuLyoqXG4gKiBAcGFyYW0gYmVmb3JlQ29udGV4dCAtIGlzIHRoZSBCZWZvcmVDb250ZXh0IGZpZWxkIGZyb20gdGhlIENoYW5nZVNldC5SZXNvdXJjZUNoYW5nZS5CZWZvcmVDb250ZXh0LiBUaGlzIGlzIHRoZSBwYXJ0IG9mIHRoZSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZVxuICogdGhhdCBkZWZpbmVzIHdoYXQgdGhlIHJlc291cmNlIGlzIGJlZm9yZSB0aGUgY2hhbmdlIGlzIGFwcGxpZWQ7IHRoYXQgaXMsIEJlZm9yZUNvbnRleHQgaXMgQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZS5SZXNvdXJjZXNbTG9naWNhbElkXSBiZWZvcmUgdGhlIENoYW5nZVNldCBpcyBleGVjdXRlZC5cbiAqXG4gKiBAcGFyYW0gYWZ0ZXJDb250ZXh0IC0gc2FtZSBhcyBiZWZvcmVDb250ZXh0IGJ1dCBmb3IgYWZ0ZXIgdGhlIGNoYW5nZSBpcyBtYWRlOyB0aGF0IGlzLCBBZnRlckNvbnRleHQgaXMgQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZS5SZXNvdXJjZXNbTG9naWNhbElkXSBhZnRlciB0aGUgQ2hhbmdlU2V0IGlzIGV4ZWN1dGVkLlxuICpcbiAqICAqIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB3aGF0IGEgYmVmb3JlQ29udGV4dC9hZnRlckNvbnRleHQgbG9va3MgbGlrZTpcbiAqICAne1wiUHJvcGVydGllc1wiOntcIlZhbHVlXCI6XCJzZGZsa2phXCIsXCJUeXBlXCI6XCJTdHJpbmdcIixcIk5hbWVcIjpcIm15U3NtUGFyYW1ldGVyRnJvbVN0YWNrXCJ9LFwiTWV0YWRhdGFcIjp7XCJhd3M6Y2RrOnBhdGhcIjpcImNkay9teVNzbVBhcmFtZXRlci9SZXNvdXJjZVwifX0nXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlU2V0UmVzb3VyY2Uge1xuICByZXNvdXJjZVdhc1JlcGxhY2VkOiBib29sZWFuO1xuICByZXNvdXJjZVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJvcGVydHlSZXBsYWNlbWVudE1vZGVzOiBQcm9wZXJ0eVJlcGxhY2VtZW50TW9kZU1hcCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IHR5cGUgUHJvcGVydHlSZXBsYWNlbWVudE1vZGVNYXAgPSB7XG4gIFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IHtcbiAgICByZXBsYWNlbWVudE1vZGU6IFJlcGxhY2VtZW50TW9kZXMgfCB1bmRlZmluZWQ7XG4gIH07XG59O1xuXG4vKipcbiAqICdBbHdheXMnIG1lYW5zIHRoYXQgY2hhbmdpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgd2lsbCBhbHdheXMgY2F1c2UgYSByZXNvdXJjZSByZXBsYWNlbWVudC4gTmV2ZXIgbWVhbnMgbmV2ZXIuIENvbmRpdGlvbmFsbHkgbWVhbnMgbWF5YmUuXG4gKi9cbmV4cG9ydCB0eXBlIFJlcGxhY2VtZW50TW9kZXMgPSAnQWx3YXlzJyB8ICdOZXZlcicgfCAnQ29uZGl0aW9uYWxseSc7XG5cbi8qKiBTZW1hbnRpYyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZXMuICovXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVEaWZmIGltcGxlbWVudHMgSVRlbXBsYXRlRGlmZiB7XG4gIHB1YmxpYyBhd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24/OiBEaWZmZXJlbmNlPHN0cmluZz47XG4gIHB1YmxpYyBkZXNjcmlwdGlvbj86IERpZmZlcmVuY2U8c3RyaW5nPjtcbiAgcHVibGljIHRyYW5zZm9ybT86IERpZmZlcmVuY2U8c3RyaW5nPjtcbiAgcHVibGljIGNvbmRpdGlvbnM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPENvbmRpdGlvbiwgQ29uZGl0aW9uRGlmZmVyZW5jZT47XG4gIHB1YmxpYyBtYXBwaW5nczogRGlmZmVyZW5jZUNvbGxlY3Rpb248TWFwcGluZywgTWFwcGluZ0RpZmZlcmVuY2U+O1xuICBwdWJsaWMgbWV0YWRhdGE6IERpZmZlcmVuY2VDb2xsZWN0aW9uPE1ldGFkYXRhLCBNZXRhZGF0YURpZmZlcmVuY2U+O1xuICBwdWJsaWMgb3V0cHV0czogRGlmZmVyZW5jZUNvbGxlY3Rpb248T3V0cHV0LCBPdXRwdXREaWZmZXJlbmNlPjtcbiAgcHVibGljIHBhcmFtZXRlcnM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPFBhcmFtZXRlciwgUGFyYW1ldGVyRGlmZmVyZW5jZT47XG4gIHB1YmxpYyByZXNvdXJjZXM6IERpZmZlcmVuY2VDb2xsZWN0aW9uPFJlc291cmNlLCBSZXNvdXJjZURpZmZlcmVuY2U+O1xuICAvKiogVGhlIGRpZmZlcmVuY2VzIGluIHVua25vd24vdW5leHBlY3RlZCBwYXJ0cyBvZiB0aGUgdGVtcGxhdGUgKi9cbiAgcHVibGljIHVua25vd246IERpZmZlcmVuY2VDb2xsZWN0aW9uPGFueSwgRGlmZmVyZW5jZTxhbnk+PjtcblxuICAvKipcbiAgICogQ2hhbmdlcyB0byBJQU0gcG9saWNpZXNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpYW1DaGFuZ2VzOiBJYW1DaGFuZ2VzO1xuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRvIFNlY3VyaXR5IEdyb3VwIGluZ3Jlc3MgYW5kIGVncmVzcyBydWxlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBDaGFuZ2VzOiBTZWN1cml0eUdyb3VwQ2hhbmdlcztcblxuICBjb25zdHJ1Y3RvcihhcmdzOiBJVGVtcGxhdGVEaWZmKSB7XG4gICAgaWYgKGFyZ3MuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uID0gYXJncy5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb247XG4gICAgfVxuICAgIGlmIChhcmdzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSBhcmdzLmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICBpZiAoYXJncy50cmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm0gPSBhcmdzLnRyYW5zZm9ybTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbmRpdGlvbnMgPSBhcmdzLmNvbmRpdGlvbnMgfHwgbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uKHt9KTtcbiAgICB0aGlzLm1hcHBpbmdzID0gYXJncy5tYXBwaW5ncyB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMubWV0YWRhdGEgPSBhcmdzLm1ldGFkYXRhIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5vdXRwdXRzID0gYXJncy5vdXRwdXRzIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gYXJncy5wYXJhbWV0ZXJzIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSBhcmdzLnJlc291cmNlcyB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMudW5rbm93biA9IGFyZ3MudW5rbm93biB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuXG4gICAgdGhpcy5pYW1DaGFuZ2VzID0gbmV3IElhbUNoYW5nZXMoe1xuICAgICAgcHJvcGVydHlDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVQcm9wZXJ0eUNoYW5nZXMoSWFtQ2hhbmdlcy5JYW1Qcm9wZXJ0eVNjcnV0aW5pZXMpLFxuICAgICAgcmVzb3VyY2VDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVSZXNvdXJjZUNoYW5nZXMoSWFtQ2hhbmdlcy5JYW1SZXNvdXJjZVNjcnV0aW5pZXMpLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zZWN1cml0eUdyb3VwQ2hhbmdlcyA9IG5ldyBTZWN1cml0eUdyb3VwQ2hhbmdlcyh7XG4gICAgICBlZ3Jlc3NSdWxlUHJvcGVydHlDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVQcm9wZXJ0eUNoYW5nZXMoW1Byb3BlcnR5U2NydXRpbnlUeXBlLkVncmVzc1J1bGVzXSksXG4gICAgICBpbmdyZXNzUnVsZVByb3BlcnR5Q2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUHJvcGVydHlDaGFuZ2VzKFtQcm9wZXJ0eVNjcnV0aW55VHlwZS5JbmdyZXNzUnVsZXNdKSxcbiAgICAgIGVncmVzc1J1bGVSZXNvdXJjZUNoYW5nZXM6IHRoaXMuc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcyhbUmVzb3VyY2VTY3J1dGlueVR5cGUuRWdyZXNzUnVsZVJlc291cmNlXSksXG4gICAgICBpbmdyZXNzUnVsZVJlc291cmNlQ2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUmVzb3VyY2VDaGFuZ2VzKFtSZXNvdXJjZVNjcnV0aW55VHlwZS5JbmdyZXNzUnVsZVJlc291cmNlXSksXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpZmZlcmVuY2VDb3VudCgpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgaWYgKHRoaXMuYXdzVGVtcGxhdGVGb3JtYXRWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3VudCArPSAxO1xuICAgIH1cblxuICAgIGNvdW50ICs9IHRoaXMuY29uZGl0aW9ucy5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5tYXBwaW5ncy5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5tZXRhZGF0YS5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5vdXRwdXRzLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLnBhcmFtZXRlcnMuZGlmZmVyZW5jZUNvdW50O1xuICAgIGNvdW50ICs9IHRoaXMucmVzb3VyY2VzLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLnVua25vd24uZGlmZmVyZW5jZUNvdW50O1xuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHVibGljIGdldCBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpZmZlcmVuY2VDb3VudCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBhbnkgb2YgdGhlIHBlcm1pc3Npb25zIG9iamVjdHMgaW52b2x2ZSBhIGJyb2FkZW5pbmcgb2YgcGVybWlzc2lvbnNcbiAgICovXG4gIHB1YmxpYyBnZXQgcGVybWlzc2lvbnNCcm9hZGVuZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWFtQ2hhbmdlcy5wZXJtaXNzaW9uc0Jyb2FkZW5lZCB8fCB0aGlzLnNlY3VyaXR5R3JvdXBDaGFuZ2VzLnJ1bGVzQWRkZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRydWUgaWYgYW55IG9mIHRoZSBwZXJtaXNzaW9ucyBvYmplY3RzIGhhdmUgY2hhbmdlZFxuICAgKi9cbiAgcHVibGljIGdldCBwZXJtaXNzaW9uc0FueUNoYW5nZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaWFtQ2hhbmdlcy5oYXNDaGFuZ2VzIHx8IHRoaXMuc2VjdXJpdHlHcm91cENoYW5nZXMuaGFzQ2hhbmdlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIHByb3BlcnR5IGNoYW5nZXMgb2YgYSBnaXZlbiBzY3J1dGlueSB0eXBlXG4gICAqXG4gICAqIFdlIGRvbid0IGp1c3QgbG9vayBhdCBwcm9wZXJ0eSB1cGRhdGVzOyB3ZSBhbHNvIGxvb2sgYXQgcmVzb3VyY2UgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgKGluIHdoaWNoXG4gICAqIGNhc2UgdGhlcmUgaXMgbm8gZnVydGhlciBkZXRhaWwgb24gcHJvcGVydHkgdmFsdWVzKSwgYW5kIHJlc291cmNlIHR5cGUgY2hhbmdlcy5cbiAgICovXG4gIHByaXZhdGUgc2NydXRpbml6YWJsZVByb3BlcnR5Q2hhbmdlcyhzY3J1dGlueVR5cGVzOiBQcm9wZXJ0eVNjcnV0aW55VHlwZVtdKTogUHJvcGVydHlDaGFuZ2VbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PFByb3BlcnR5Q2hhbmdlPigpO1xuXG4gICAgZm9yIChjb25zdCBbcmVzb3VyY2VMb2dpY2FsSWQsIHJlc291cmNlQ2hhbmdlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJlc291cmNlcy5jaGFuZ2VzKSkge1xuICAgICAgaWYgKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZUNoYW5nZWQpIHtcbiAgICAgICAgLy8gd2UgaWdub3JlIHJlc291cmNlIHR5cGUgY2hhbmdlcyBoZXJlLCBhbmQgaGFuZGxlIHRoZW0gaW4gc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcygpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSkge1xuICAgICAgICAvLyBXZSB1c2UgcmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlIHRvIGxvYWRSZXNvdXJjZU1vZGVsIHNvIHRoYXQgd2UgY2FuIGluc3BlY3QgdGhlXG4gICAgICAgIC8vIHByb3BlcnRpZXMgb2YgYSByZXNvdXJjZSBldmVuIGFmdGVyIHRoZSByZXNvdXJjZSBpcyByZW1vdmVkIGZyb20gdGhlIHRlbXBsYXRlLlxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3VHlwZVByb3BzID0gbG9hZFJlc291cmNlTW9kZWwocmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlKT8ucHJvcGVydGllcyB8fCB7fTtcbiAgICAgIGZvciAoY29uc3QgW3Byb3BlcnR5TmFtZSwgcHJvcF0gb2YgT2JqZWN0LmVudHJpZXMobmV3VHlwZVByb3BzKSkge1xuICAgICAgICBjb25zdCBwcm9wU2NydXRpbnlUeXBlID0gcHJvcC5zY3J1dGluaXphYmxlIHx8IFByb3BlcnR5U2NydXRpbnlUeXBlLk5vbmU7XG4gICAgICAgIGlmIChzY3J1dGlueVR5cGVzLmluY2x1ZGVzKHByb3BTY3J1dGlueVR5cGUpKSB7XG4gICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgcmVzb3VyY2VMb2dpY2FsSWQsXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUsXG4gICAgICAgICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSxcbiAgICAgICAgICAgIHNjcnV0aW55VHlwZTogcHJvcFNjcnV0aW55VHlwZSxcbiAgICAgICAgICAgIG9sZFZhbHVlOiByZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzPy5bcHJvcGVydHlOYW1lXSxcbiAgICAgICAgICAgIG5ld1ZhbHVlOiByZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzPy5bcHJvcGVydHlOYW1lXSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFsbCByZXNvdXJjZSBjaGFuZ2VzIG9mIGEgZ2l2ZW4gc2NydXRpbnkgdHlwZVxuICAgKlxuICAgKiBXZSBkb24ndCBqdXN0IGxvb2sgYXQgcmVzb3VyY2UgdXBkYXRlczsgd2UgYWxzbyBsb29rIGF0IHJlc291cmNlIGFkZGl0aW9ucyBhbmQgZGVsZXRpb25zIChpbiB3aGljaFxuICAgKiBjYXNlIHRoZXJlIGlzIG5vIGZ1cnRoZXIgZGV0YWlsIG9uIHByb3BlcnR5IHZhbHVlcyksIGFuZCByZXNvdXJjZSB0eXBlIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIHNjcnV0aW5pemFibGVSZXNvdXJjZUNoYW5nZXMoc2NydXRpbnlUeXBlczogUmVzb3VyY2VTY3J1dGlueVR5cGVbXSk6IFJlc291cmNlQ2hhbmdlW10ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxSZXNvdXJjZUNoYW5nZT4oKTtcblxuICAgIGZvciAoY29uc3QgW3Jlc291cmNlTG9naWNhbElkLCByZXNvdXJjZUNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvdXJjZXMuY2hhbmdlcykpIHtcbiAgICAgIGlmICghcmVzb3VyY2VDaGFuZ2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1vblByb3BzID0ge1xuICAgICAgICBvbGRQcm9wZXJ0aWVzOiByZXNvdXJjZUNoYW5nZS5vbGRQcm9wZXJ0aWVzLFxuICAgICAgICBuZXdQcm9wZXJ0aWVzOiByZXNvdXJjZUNoYW5nZS5uZXdQcm9wZXJ0aWVzLFxuICAgICAgICByZXNvdXJjZUxvZ2ljYWxJZCxcbiAgICAgIH07XG5cbiAgICAgIC8vIGNoYW5nZXMgdG8gdGhlIFR5cGUgb2YgcmVzb3VyY2VzIGNhbiBoYXBwZW4gd2hlbiBtaWdyYXRpbmcgZnJvbSBDRk4gdGVtcGxhdGVzIHRoYXQgdXNlIFRyYW5zZm9ybXNcbiAgICAgIGlmIChyZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGVDaGFuZ2VkKSB7XG4gICAgICAgIC8vIFRyZWF0IGFzIERFTEVURStBRERcbiAgICAgICAgaWYgKHJlc291cmNlQ2hhbmdlLm9sZFJlc291cmNlVHlwZSkge1xuICAgICAgICAgIGNvbnN0IG9sZFJlc291cmNlTW9kZWwgPSBsb2FkUmVzb3VyY2VNb2RlbChyZXNvdXJjZUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUpO1xuICAgICAgICAgIGlmIChvbGRSZXNvdXJjZU1vZGVsICYmIHRoaXMucmVzb3VyY2VJc1NjcnV0aW5pemFibGUob2xkUmVzb3VyY2VNb2RlbCwgc2NydXRpbnlUeXBlcykpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAgICAgLi4uY29tbW9uUHJvcHMsXG4gICAgICAgICAgICAgIG5ld1Byb3BlcnRpZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgcmVzb3VyY2VUeXBlOiByZXNvdXJjZUNoYW5nZS5vbGRSZXNvdXJjZVR5cGUhLFxuICAgICAgICAgICAgICBzY3J1dGlueVR5cGU6IG9sZFJlc291cmNlTW9kZWwuc2NydXRpbml6YWJsZSEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzb3VyY2VDaGFuZ2UubmV3UmVzb3VyY2VUeXBlKSB7XG4gICAgICAgICAgY29uc3QgbmV3UmVzb3VyY2VNb2RlbCA9IGxvYWRSZXNvdXJjZU1vZGVsKHJlc291cmNlQ2hhbmdlLm5ld1Jlc291cmNlVHlwZSk7XG4gICAgICAgICAgaWYgKG5ld1Jlc291cmNlTW9kZWwgJiYgdGhpcy5yZXNvdXJjZUlzU2NydXRpbml6YWJsZShuZXdSZXNvdXJjZU1vZGVsLCBzY3J1dGlueVR5cGVzKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgICAuLi5jb21tb25Qcm9wcyxcbiAgICAgICAgICAgICAgb2xkUHJvcGVydGllczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlQ2hhbmdlLm5ld1Jlc291cmNlVHlwZSEsXG4gICAgICAgICAgICAgIHNjcnV0aW55VHlwZTogbmV3UmVzb3VyY2VNb2RlbC5zY3J1dGluaXphYmxlISxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFyZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc291cmNlTW9kZWwgPSBsb2FkUmVzb3VyY2VNb2RlbChyZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGUpO1xuICAgICAgICBpZiAocmVzb3VyY2VNb2RlbCAmJiB0aGlzLnJlc291cmNlSXNTY3J1dGluaXphYmxlKHJlc291cmNlTW9kZWwsIHNjcnV0aW55VHlwZXMpKSB7XG4gICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgLi4uY29tbW9uUHJvcHMsXG4gICAgICAgICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSxcbiAgICAgICAgICAgIHNjcnV0aW55VHlwZTogcmVzb3VyY2VNb2RlbC5zY3J1dGluaXphYmxlISxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwcml2YXRlIHJlc291cmNlSXNTY3J1dGluaXphYmxlKHJlczogUmVzb3VyY2VNb2RlbCwgc2NydXRpbnlUeXBlczogQXJyYXk8UmVzb3VyY2VTY3J1dGlueVR5cGU+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNjcnV0aW55VHlwZXMuaW5jbHVkZXMocmVzLnNjcnV0aW5pemFibGUgfHwgUmVzb3VyY2VTY3J1dGlueVR5cGUuTm9uZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNoYW5nZSBpbiBwcm9wZXJ0eSB2YWx1ZXNcbiAqXG4gKiBOb3QgbmVjZXNzYXJpbHkgYW4gdXBkYXRlLCBpdCBjb3VsZCBiZSB0aGF0IHRoZXJlIHVzZWQgdG8gYmUgbm8gdmFsdWUgdGhlcmVcbiAqIGJlY2F1c2UgdGhlcmUgd2FzIG5vIHJlc291cmNlLCBhbmQgbm93IHRoZXJlIGlzIChvciB2aWNlIHZlcnNhKS5cbiAqXG4gKiBUaGVyZWZvcmUsIHdlIGp1c3QgY29udGFpbiBwbGFpbiB2YWx1ZXMgYW5kIG5vdCBhIFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb3BlcnR5Q2hhbmdlIHtcbiAgLyoqXG4gICAqIExvZ2ljYWwgSUQgb2YgdGhlIHJlc291cmNlIHdoZXJlIHRoaXMgcHJvcGVydHkgY2hhbmdlIHdhcyBmb3VuZFxuICAgKi9cbiAgcmVzb3VyY2VMb2dpY2FsSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVHlwZSBvZiB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTY3J1dGlueSB0eXBlIGZvciB0aGlzIHByb3BlcnR5IGNoYW5nZVxuICAgKi9cbiAgc2NydXRpbnlUeXBlOiBQcm9wZXJ0eVNjcnV0aW55VHlwZTtcblxuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyBjaGFuZ2luZ1xuICAgKi9cbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGQgcHJvcGVydHkgdmFsdWVcbiAgICovXG4gIG9sZFZhbHVlPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHByb3BlcnR5IHZhbHVlXG4gICAqL1xuICBuZXdWYWx1ZT86IGFueTtcbn1cblxuLyoqXG4gKiBBIHJlc291cmNlIGNoYW5nZVxuICpcbiAqIEVpdGhlciBhIGNyZWF0aW9uLCBkZWxldGlvbiBvciB1cGRhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VDaGFuZ2Uge1xuICAvKipcbiAgICogTG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2Ugd2hlcmUgdGhpcyBwcm9wZXJ0eSBjaGFuZ2Ugd2FzIGZvdW5kXG4gICAqL1xuICByZXNvdXJjZUxvZ2ljYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTY3J1dGlueSB0eXBlIGZvciB0aGlzIHJlc291cmNlIGNoYW5nZVxuICAgKi9cbiAgc2NydXRpbnlUeXBlOiBSZXNvdXJjZVNjcnV0aW55VHlwZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHJlc291cmNlXG4gICAqL1xuICByZXNvdXJjZVR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwcm9wZXJ0aWVzIHZhbHVlIChtaWdodCBiZSB1bmRlZmluZWQgaW4gY2FzZSBvZiBjcmVhdGlvbilcbiAgICovXG4gIG9sZFByb3BlcnRpZXM/OiBQcm9wZXJ0eU1hcDtcblxuICAvKipcbiAgICogVGhlIG5ldyBwcm9wZXJ0aWVzIHZhbHVlIChtaWdodCBiZSB1bmRlZmluZWQgaW4gY2FzZSBvZiBkZWxldGlvbilcbiAgICovXG4gIG5ld1Byb3BlcnRpZXM/OiBQcm9wZXJ0eU1hcDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGlmZmVyZW5jZTxWYWx1ZVR5cGU+IHtcbiAgcmVhZG9ubHkgb2xkVmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgbmV3VmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgaXNEaWZmZXJlbnQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzQWRkaXRpb246IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzUmVtb3ZhbDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNVcGRhdGU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogTW9kZWxzIGFuIGVudGl0eSB0aGF0IGNoYW5nZWQgYmV0d2VlbiB0d28gdmVyc2lvbnMgb2YgYSBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERpZmZlcmVuY2U8VmFsdWVUeXBlPiBpbXBsZW1lbnRzIElEaWZmZXJlbmNlPFZhbHVlVHlwZT4ge1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIGlzIGFuIGFjdHVhbCBkaWZmZXJlbnQgb3IgdGhlIHZhbHVlcyBhcmUgYWN0dWFsbHkgdGhlIHNhbWVcbiAgICpcbiAgICogaXNEaWZmZXJlbnQgPT4gKGlzVXBkYXRlIHwgaXNSZW1vdmVkIHwgaXNVcGRhdGUpXG4gICAqL1xuICBwdWJsaWMgaXNEaWZmZXJlbnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBvbGRWYWx1ZSAtIHRoZSBvbGQgdmFsdWUsIGNhbm5vdCBiZSBlcXVhbCAodG8gdGhlIHNlbnNlIG9mICtkZWVwRXF1YWwrKSB0byArbmV3VmFsdWUrLlxuICAgKiBAcGFyYW0gbmV3VmFsdWUgLSB0aGUgbmV3IHZhbHVlLCBjYW5ub3QgYmUgZXF1YWwgKHRvIHRoZSBzZW5zZSBvZiArZGVlcEVxdWFsKykgdG8gK29sZFZhbHVlKy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBvbGRWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkLCBwdWJsaWMgcmVhZG9ubHkgbmV3VmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChvbGRWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcih7IG1lc3NhZ2U6ICdvbGRWYWx1ZSBhbmQgbmV3VmFsdWUgYXJlIGJvdGggdW5kZWZpbmVkIScgfSk7XG4gICAgfVxuICAgIHRoaXMuaXNEaWZmZXJlbnQgPSAhZGVlcEVxdWFsKG9sZFZhbHVlLCBuZXdWYWx1ZSk7XG4gIH1cblxuICAvKiogQHJldHVybnMgK3RydWUrIGlmIHRoZSBlbGVtZW50IGlzIG5ldyB0byB0aGUgdGVtcGxhdGUuICovXG4gIHB1YmxpYyBnZXQgaXNBZGRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5vbGRWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zICt0cnVlKyBpZiB0aGUgZWxlbWVudCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSB0ZW1wbGF0ZS4gKi9cbiAgcHVibGljIGdldCBpc1JlbW92YWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyArdHJ1ZSsgaWYgdGhlIGVsZW1lbnQgd2FzIGFscmVhZHkgaW4gdGhlIHRlbXBsYXRlIGFuZCBpcyB1cGRhdGVkLiAqL1xuICBwdWJsaWMgZ2V0IGlzVXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9sZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICYmIHRoaXMubmV3VmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUHJvcGVydHlEaWZmZXJlbmNlPFZhbHVlVHlwZT4gZXh0ZW5kcyBEaWZmZXJlbmNlPFZhbHVlVHlwZT4ge1xuICBwdWJsaWMgY2hhbmdlSW1wYWN0PzogUmVzb3VyY2VJbXBhY3Q7XG5cbiAgY29uc3RydWN0b3Iob2xkVmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCwgbmV3VmFsdWU6IFZhbHVlVHlwZSB8IHVuZGVmaW5lZCwgYXJnczogeyBjaGFuZ2VJbXBhY3Q/OiBSZXNvdXJjZUltcGFjdCB9KSB7XG4gICAgc3VwZXIob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgICB0aGlzLmNoYW5nZUltcGFjdCA9IGFyZ3MuY2hhbmdlSW1wYWN0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUIGV4dGVuZHMgSURpZmZlcmVuY2U8Vj4+IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaWZmczogeyBbbG9naWNhbElkOiBzdHJpbmddOiBUIH0pIHtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hhbmdlcygpOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IFQgfSB7XG4gICAgcmV0dXJuIG9ubHlDaGFuZ2VzKHRoaXMuZGlmZnMpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaWZmZXJlbmNlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmNoYW5nZXMpLmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQobG9naWNhbElkOiBzdHJpbmcpOiBUIHtcbiAgICBjb25zdCByZXQgPSB0aGlzLmRpZmZzW2xvZ2ljYWxJZF07XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gb2JqZWN0IHdpdGggbG9naWNhbCBJRCAnJHtsb2dpY2FsSWR9J2ApO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIHJlbW92ZShsb2dpY2FsSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGRlbGV0ZSB0aGlzLmRpZmZzW2xvZ2ljYWxJZF07XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxvZ2ljYWxJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNoYW5nZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgVGVtcGxhdGVEaWZmIHdoaWNoIG9ubHkgY29udGFpbnMgY2hhbmdlcyBmb3Igd2hpY2ggYHByZWRpY2F0ZWBcbiAgICogcmV0dXJucyBgdHJ1ZWAuXG4gICAqL1xuICBwdWJsaWMgZmlsdGVyKHByZWRpY2F0ZTogKGRpZmY6IFQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW4pOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUPiB7XG4gICAgY29uc3QgbmV3Q2hhbmdlczogeyBbbG9naWNhbElkOiBzdHJpbmddOiBUIH0gPSB7IH07XG4gICAgZm9yIChjb25zdCBpZCBvZiBPYmplY3Qua2V5cyh0aGlzLmNoYW5nZXMpKSB7XG4gICAgICBjb25zdCBkaWZmID0gdGhpcy5jaGFuZ2VzW2lkXTtcblxuICAgICAgaWYgKHByZWRpY2F0ZShkaWZmKSkge1xuICAgICAgICBuZXdDaGFuZ2VzW2lkXSA9IGRpZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbjxWLCBUPihuZXdDaGFuZ2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGBjYmAgZm9yIGFsbCBjaGFuZ2VzIGluIHRoaXMgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQ2hhbmdlcyB3aWxsIGJlIHNvcnRlZCBhcyBmb2xsb3dzOlxuICAgKiAgLSBSZW1vdmVkXG4gICAqICAtIEFkZGVkXG4gICAqICAtIFVwZGF0ZWRcbiAgICogIC0gT3RoZXJzXG4gICAqXG4gICAqL1xuICBwdWJsaWMgZm9yRWFjaERpZmZlcmVuY2UoY2I6IChsb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBUKSA9PiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCByZW1vdmVkID0gbmV3IEFycmF5PHsgbG9naWNhbElkOiBzdHJpbmc7IGNoYW5nZTogVCB9PigpO1xuICAgIGNvbnN0IGFkZGVkID0gbmV3IEFycmF5PHsgbG9naWNhbElkOiBzdHJpbmc7IGNoYW5nZTogVCB9PigpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBuZXcgQXJyYXk8eyBsb2dpY2FsSWQ6IHN0cmluZzsgY2hhbmdlOiBUIH0+KCk7XG4gICAgY29uc3Qgb3RoZXJzID0gbmV3IEFycmF5PHsgbG9naWNhbElkOiBzdHJpbmc7IGNoYW5nZTogVCB9PigpO1xuXG4gICAgZm9yIChjb25zdCBsb2dpY2FsSWQgb2YgdGhpcy5sb2dpY2FsSWRzKSB7XG4gICAgICBjb25zdCBjaGFuZ2U6IFQgPSB0aGlzLmNoYW5nZXNbbG9naWNhbElkXSE7XG4gICAgICBpZiAoY2hhbmdlLmlzQWRkaXRpb24pIHtcbiAgICAgICAgYWRkZWQucHVzaCh7IGxvZ2ljYWxJZCwgY2hhbmdlIH0pO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UuaXNSZW1vdmFsKSB7XG4gICAgICAgIHJlbW92ZWQucHVzaCh7IGxvZ2ljYWxJZCwgY2hhbmdlIH0pO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2UuaXNVcGRhdGUpIHtcbiAgICAgICAgdXBkYXRlZC5wdXNoKHsgbG9naWNhbElkLCBjaGFuZ2UgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZS5pc0RpZmZlcmVudCkge1xuICAgICAgICBvdGhlcnMucHVzaCh7IGxvZ2ljYWxJZCwgY2hhbmdlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbW92ZWQuZm9yRWFjaCh2ID0+IGNiKHYubG9naWNhbElkLCB2LmNoYW5nZSkpO1xuICAgIGFkZGVkLmZvckVhY2godiA9PiBjYih2LmxvZ2ljYWxJZCwgdi5jaGFuZ2UpKTtcbiAgICB1cGRhdGVkLmZvckVhY2godiA9PiBjYih2LmxvZ2ljYWxJZCwgdi5jaGFuZ2UpKTtcbiAgICBvdGhlcnMuZm9yRWFjaCh2ID0+IGNiKHYubG9naWNhbElkLCB2LmNoYW5nZSkpO1xuICB9XG59XG5cbi8qKlxuICogQXJndW1lbnRzIGV4cGVjdGVkIGJ5IHRoZSBjb25zdHJ1Y3RvciBvZiArVGVtcGxhdGVEaWZmKywgZXh0cmFjdGVkIGFzIGFuIGludGVyZmFjZSBmb3IgdGhlIHNha2VcbiAqIG9mIChyZWxhdGl2ZSkgY29uY2lzZW5lc3Mgb2YgdGhlIGNvbnN0cnVjdG9yJ3Mgc2lnbmF0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUZW1wbGF0ZURpZmYge1xuICBhd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24/OiBJRGlmZmVyZW5jZTxzdHJpbmc+O1xuICBkZXNjcmlwdGlvbj86IElEaWZmZXJlbmNlPHN0cmluZz47XG4gIHRyYW5zZm9ybT86IElEaWZmZXJlbmNlPHN0cmluZz47XG5cbiAgY29uZGl0aW9ucz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPENvbmRpdGlvbiwgQ29uZGl0aW9uRGlmZmVyZW5jZT47XG4gIG1hcHBpbmdzPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248TWFwcGluZywgTWFwcGluZ0RpZmZlcmVuY2U+O1xuICBtZXRhZGF0YT86IERpZmZlcmVuY2VDb2xsZWN0aW9uPE1ldGFkYXRhLCBNZXRhZGF0YURpZmZlcmVuY2U+O1xuICBvdXRwdXRzPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248T3V0cHV0LCBPdXRwdXREaWZmZXJlbmNlPjtcbiAgcGFyYW1ldGVycz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPFBhcmFtZXRlciwgUGFyYW1ldGVyRGlmZmVyZW5jZT47XG4gIHJlc291cmNlcz86IERpZmZlcmVuY2VDb2xsZWN0aW9uPFJlc291cmNlLCBSZXNvdXJjZURpZmZlcmVuY2U+O1xuXG4gIHVua25vd24/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxhbnksIElEaWZmZXJlbmNlPGFueT4+O1xufVxuXG5leHBvcnQgdHlwZSBDb25kaXRpb24gPSBhbnk7XG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uRGlmZmVyZW5jZSBleHRlbmRzIERpZmZlcmVuY2U8Q29uZGl0aW9uPiB7XG4gIC8vIFRPRE86IGRlZmluZSBzcGVjaWZpYyBkaWZmZXJlbmNlIGF0dHJpYnV0ZXNcbn1cblxuZXhwb3J0IHR5cGUgTWFwcGluZyA9IGFueTtcbmV4cG9ydCBjbGFzcyBNYXBwaW5nRGlmZmVyZW5jZSBleHRlbmRzIERpZmZlcmVuY2U8TWFwcGluZz4ge1xuICAvLyBUT0RPOiBkZWZpbmUgc3BlY2lmaWMgZGlmZmVyZW5jZSBhdHRyaWJ1dGVzXG59XG5cbmV4cG9ydCB0eXBlIE1ldGFkYXRhID0gYW55O1xuZXhwb3J0IGNsYXNzIE1ldGFkYXRhRGlmZmVyZW5jZSBleHRlbmRzIERpZmZlcmVuY2U8TWV0YWRhdGE+IHtcbiAgLy8gVE9ETzogZGVmaW5lIHNwZWNpZmljIGRpZmZlcmVuY2UgYXR0cmlidXRlc1xufVxuXG5leHBvcnQgdHlwZSBPdXRwdXQgPSBhbnk7XG5leHBvcnQgY2xhc3MgT3V0cHV0RGlmZmVyZW5jZSBleHRlbmRzIERpZmZlcmVuY2U8T3V0cHV0PiB7XG4gIC8vIFRPRE86IGRlZmluZSBzcGVjaWZpYyBkaWZmZXJlbmNlIGF0dHJpYnV0ZXNcbn1cblxuZXhwb3J0IHR5cGUgUGFyYW1ldGVyID0gYW55O1xuZXhwb3J0IGNsYXNzIFBhcmFtZXRlckRpZmZlcmVuY2UgZXh0ZW5kcyBEaWZmZXJlbmNlPFBhcmFtZXRlcj4ge1xuICAvLyBUT0RPOiBkZWZpbmUgc3BlY2lmaWMgZGlmZmVyZW5jZSBhdHRyaWJ1dGVzXG59XG5cbmV4cG9ydCBlbnVtIFJlc291cmNlSW1wYWN0IHtcbiAgLyoqIFRoZSBleGlzdGluZyBwaHlzaWNhbCByZXNvdXJjZSB3aWxsIGJlIHVwZGF0ZWQgKi9cbiAgV0lMTF9VUERBVEUgPSAnV0lMTF9VUERBVEUnLFxuICAvKiogQSBuZXcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSBjcmVhdGVkICovXG4gIFdJTExfQ1JFQVRFID0gJ1dJTExfQ1JFQVRFJyxcbiAgLyoqIFRoZSBleGlzdGluZyBwaHlzaWNhbCByZXNvdXJjZSB3aWxsIGJlIHJlcGxhY2VkICovXG4gIFdJTExfUkVQTEFDRSA9ICdXSUxMX1JFUExBQ0UnLFxuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIG1heSBiZSByZXBsYWNlZCAqL1xuICBNQVlfUkVQTEFDRSA9ICdNQVlfUkVQTEFDRScsXG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSBkZXN0cm95ZWQgKi9cbiAgV0lMTF9ERVNUUk9ZID0gJ1dJTExfREVTVFJPWScsXG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gQ2xvdWRGb3JtYXRpb24gc3VwZXJ2aXNpb24gKi9cbiAgV0lMTF9PUlBIQU4gPSAnV0lMTF9PUlBIQU4nLFxuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgYWRkZWQgdG8gQ2xvdWRGb3JtYXRpb24gc3VwZXJ2aXNpb24gKi9cbiAgV0lMTF9JTVBPUlQgPSAnV0lMTF9JTVBPUlQnLFxuICAvKiogVGhlcmUgaXMgbm8gY2hhbmdlIGluIHRoaXMgcmVzb3VyY2UgKi9cbiAgTk9fQ0hBTkdFID0gJ05PX0NIQU5HRScsXG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBhcyBhIHJlZHVjZXIgdG8gb2J0YWluIHRoZSByZXNvdXJjZS1sZXZlbCBpbXBhY3Qgb2YgYSBsaXN0XG4gKiBvZiBwcm9wZXJ0eS1sZXZlbCBpbXBhY3RzLlxuICogQHBhcmFtIG9uZSAtIHRoZSBjdXJyZW50IHdvcnN0IGltcGFjdCBzbyBmYXIuXG4gKiBAcGFyYW0gdHdvIC0gdGhlIG5ldyBpbXBhY3QgYmVpbmcgY29uc2lkZXJlZCAoY2FuIGJlIHVuZGVmaW5lZCwgYXMgd2UgbWF5IG5vdCBhbHdheXMgYmVcbiAqICAgICAgYWJsZSB0byBkZXRlcm1pbmUgc29tZSBwcm9wZXJ0aWVzIGltcGFjdCkuXG4gKi9cbmZ1bmN0aW9uIHdvcnN0SW1wYWN0KG9uZTogUmVzb3VyY2VJbXBhY3QsIHR3bz86IFJlc291cmNlSW1wYWN0KTogUmVzb3VyY2VJbXBhY3Qge1xuICBpZiAoIXR3bykge1xuICAgIHJldHVybiBvbmU7XG4gIH1cbiAgY29uc3QgYmFkbmVzcyA9IHtcbiAgICBbUmVzb3VyY2VJbXBhY3QuTk9fQ0hBTkdFXTogMCxcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9JTVBPUlRdOiAwLFxuICAgIFtSZXNvdXJjZUltcGFjdC5XSUxMX1VQREFURV06IDEsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfQ1JFQVRFXTogMixcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9PUlBIQU5dOiAzLFxuICAgIFtSZXNvdXJjZUltcGFjdC5NQVlfUkVQTEFDRV06IDQsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRV06IDUsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfREVTVFJPWV06IDYsXG4gIH07XG4gIHJldHVybiBiYWRuZXNzW29uZV0gPiBiYWRuZXNzW3R3b10gPyBvbmUgOiB0d287XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2Uge1xuICBUeXBlOiBzdHJpbmc7XG4gIFByb3BlcnRpZXM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfTtcblxuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW92ZSB7XG4gIHJlYWRvbmx5IGRpcmVjdGlvbjogJ2Zyb20nIHwgJ3RvJztcbiAgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlTG9naWNhbElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2hhbmdlIHRvIGEgc2luZ2xlIHJlc291cmNlIGJldHdlZW4gdHdvIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlc1xuICpcbiAqIFRoaXMgY2xhc3MgY2FuIGJlIG11dGF0ZWQgYWZ0ZXIgY29uc3RydWN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VEaWZmZXJlbmNlIGltcGxlbWVudHMgSURpZmZlcmVuY2U8UmVzb3VyY2U+IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXNvdXJjZSB3YXMgYWRkZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc0FkZGl0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgcmVzb3VyY2Ugd2FzIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpc1JlbW92YWw6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXNvdXJjZSB3YXMgaW1wb3J0ZWRcbiAgICovXG4gIHB1YmxpYyBpc0ltcG9ydD86IGJvb2xlYW47XG5cbiAgcHVibGljIG1vdmU/OiBNb3ZlO1xuXG4gIC8qKiBQcm9wZXJ0eS1sZXZlbCBjaGFuZ2VzIG9uIHRoZSByZXNvdXJjZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnR5RGlmZnM6IHsgW2tleTogc3RyaW5nXTogUHJvcGVydHlEaWZmZXJlbmNlPGFueT4gfTtcblxuICAvKiogQ2hhbmdlcyB0byBub24tcHJvcGVydHkgbGV2ZWwgYXR0cmlidXRlcyBvZiB0aGUgcmVzb3VyY2UgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBvdGhlckRpZmZzOiB7IFtrZXk6IHN0cmluZ106IERpZmZlcmVuY2U8YW55PiB9O1xuXG4gIC8qKiBUaGUgcmVzb3VyY2UgdHlwZSAob3Igb2xkIGFuZCBuZXcgdHlwZSBpZiBpdCBoYXMgY2hhbmdlZCkgKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZVR5cGVzOiB7IHJlYWRvbmx5IG9sZFR5cGU/OiBzdHJpbmc7IHJlYWRvbmx5IG5ld1R5cGU/OiBzdHJpbmcgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgb2xkVmFsdWU6IFJlc291cmNlIHwgdW5kZWZpbmVkLFxuICAgIHB1YmxpYyByZWFkb25seSBuZXdWYWx1ZTogUmVzb3VyY2UgfCB1bmRlZmluZWQsXG4gICAgYXJnczoge1xuICAgICAgcmVzb3VyY2VUeXBlOiB7IG9sZFR5cGU/OiBzdHJpbmc7IG5ld1R5cGU/OiBzdHJpbmcgfTtcbiAgICAgIHByb3BlcnR5RGlmZnM6IHsgW2tleTogc3RyaW5nXTogUHJvcGVydHlEaWZmZXJlbmNlPGFueT4gfTtcbiAgICAgIG90aGVyRGlmZnM6IHsgW2tleTogc3RyaW5nXTogRGlmZmVyZW5jZTxhbnk+IH07XG4gICAgfSxcbiAgKSB7XG4gICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gYXJncy5yZXNvdXJjZVR5cGU7XG4gICAgdGhpcy5wcm9wZXJ0eURpZmZzID0gYXJncy5wcm9wZXJ0eURpZmZzO1xuICAgIHRoaXMub3RoZXJEaWZmcyA9IGFyZ3Mub3RoZXJEaWZmcztcblxuICAgIHRoaXMuaXNBZGRpdGlvbiA9IG9sZFZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc1JlbW92YWwgPSBuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNJbXBvcnQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9sZFByb3BlcnRpZXMoKTogUHJvcGVydHlNYXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9sZFZhbHVlICYmIHRoaXMub2xkVmFsdWUuUHJvcGVydGllcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmV3UHJvcGVydGllcygpOiBQcm9wZXJ0eU1hcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubmV3VmFsdWUgJiYgdGhpcy5uZXdWYWx1ZS5Qcm9wZXJ0aWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXNvdXJjZSB3YXMgbW9kaWZpZWQgYXQgYWxsXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzRGlmZmVyZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpZmZlcmVuY2VDb3VudCA+IDAgfHwgdGhpcy5vbGRSZXNvdXJjZVR5cGUgIT09IHRoaXMubmV3UmVzb3VyY2VUeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHJlc291cmNlIHdhcyB1cGRhdGVkIGluLXBsYWNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzVXBkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGlmZmVyZW50ICYmICF0aGlzLmlzQWRkaXRpb24gJiYgIXRoaXMuaXNSZW1vdmFsO1xuICB9XG5cbiAgcHVibGljIGdldCBvbGRSZXNvdXJjZVR5cGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5ld1Jlc291cmNlVHlwZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgYWN0dWFsIHByb3BlcnR5IHVwZGF0ZXNcbiAgICovXG4gIHB1YmxpYyBnZXQgcHJvcGVydHlVcGRhdGVzKCk6IHsgW2tleTogc3RyaW5nXTogUHJvcGVydHlEaWZmZXJlbmNlPGFueT4gfSB7XG4gICAgcmV0dXJuIG9ubHlDaGFuZ2VzKHRoaXMucHJvcGVydHlEaWZmcyk7XG4gIH1cblxuICAvKipcbiAgICogQWxsIGFjdHVhbCBcIm90aGVyXCIgdXBkYXRlc1xuICAgKi9cbiAgcHVibGljIGdldCBvdGhlckNoYW5nZXMoKTogeyBba2V5OiBzdHJpbmddOiBEaWZmZXJlbmNlPGFueT4gfSB7XG4gICAgcmV0dXJuIG9ubHlDaGFuZ2VzKHRoaXMub3RoZXJEaWZmcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHJlc291cmNlIHR5cGUgd2FzIGNoYW5nZWQgaW4gdGhpcyBkaWZmXG4gICAqXG4gICAqIFRoaXMgaXMgbm90IGEgdmFsaWQgb3BlcmF0aW9uIGluIENsb3VkRm9ybWF0aW9uIGJ1dCB0byBiZSBkZWZlbnNpdmUgd2UncmUgZ29pbmdcbiAgICogdG8gYmUgYXdhcmUgb2YgaXQgYW55d2F5LlxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZVR5cGVDaGFuZ2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAmJiB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlICE9PSB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSByZXNvdXJjZSB0eXBlIGlmIGl0IHdhcyB1bmNoYW5nZWRcbiAgICpcbiAgICogSWYgdGhlIHJlc291cmNlIHR5cGUgd2FzIGNoYW5nZWQsIGl0J3MgYW4gZXJyb3IgdG8gY2FsbCB0aGlzLlxuICAgKi9cbiAgcHVibGljIGdldCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5yZXNvdXJjZVR5cGVDaGFuZ2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgLnJlc291cmNlVHlwZSwgYmVjYXVzZSB0aGUgdHlwZSB3YXMgY2hhbmdlZCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGUgfHwgdGhpcy5yZXNvdXJjZVR5cGVzLm5ld1R5cGU7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIFByb3BlcnR5Q2hhbmdlIGluIHRoaXMgb2JqZWN0XG4gICAqXG4gICAqIFRoaXMgYWZmZWN0cyB0aGUgcHJvcGVydHkgZGlmZiBhcyBpdCBpcyBzdW1tYXJpemVkIHRvIHVzZXJzLCBidXQgaXQgRE9FU1xuICAgKiBOT1QgYWZmZWN0IGVpdGhlciB0aGUgXCJvbGRWYWx1ZVwiIG9yIFwibmV3VmFsdWVcIiB2YWx1ZXM7IHRob3NlIHN0aWxsIGNvbnRhaW5cbiAgICogdGhlIGFjdHVhbCB0ZW1wbGF0ZSB2YWx1ZXMgYXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgKHRoZXkgbWlnaHQgc3RpbGwgYmVcbiAgICogdXNlZCBmb3IgZG93bnN0cmVhbSBwcm9jZXNzaW5nKS5cbiAgICovXG4gIHB1YmxpYyBzZXRQcm9wZXJ0eUNoYW5nZShwcm9wZXJ0eU5hbWU6IHN0cmluZywgY2hhbmdlOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55Pikge1xuICAgIHRoaXMucHJvcGVydHlEaWZmc1twcm9wZXJ0eU5hbWVdID0gY2hhbmdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBPdGhlckNoYW5nZSBpbiB0aGlzIG9iamVjdFxuICAgKlxuICAgKiBUaGlzIGFmZmVjdHMgdGhlIHByb3BlcnR5IGRpZmYgYXMgaXQgaXMgc3VtbWFyaXplZCB0byB1c2VycywgYnV0IGl0IERPRVNcbiAgICogTk9UIGFmZmVjdCBlaXRoZXIgdGhlIFwib2xkVmFsdWVcIiBvciBcIm5ld1ZhbHVlXCIgdmFsdWVzOyB0aG9zZSBzdGlsbCBjb250YWluXG4gICAqIHRoZSBhY3R1YWwgdGVtcGxhdGUgdmFsdWVzIGFzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyICh0aGV5IG1pZ2h0IHN0aWxsIGJlXG4gICAqIHVzZWQgZm9yIGRvd25zdHJlYW0gcHJvY2Vzc2luZykuXG4gICAqL1xuICBwdWJsaWMgc2V0T3RoZXJDaGFuZ2Uob3RoZXJOYW1lOiBzdHJpbmcsIGNoYW5nZTogUHJvcGVydHlEaWZmZXJlbmNlPGFueT4pIHtcbiAgICB0aGlzLm90aGVyRGlmZnNbb3RoZXJOYW1lXSA9IGNoYW5nZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hhbmdlSW1wYWN0KCk6IFJlc291cmNlSW1wYWN0IHtcbiAgICBpZiAodGhpcy5pc0ltcG9ydCkge1xuICAgICAgcmV0dXJuIFJlc291cmNlSW1wYWN0LldJTExfSU1QT1JUO1xuICAgIH1cbiAgICAvLyBDaGVjayB0aGUgVHlwZSBmaXJzdFxuICAgIGlmICh0aGlzLnJlc291cmNlVHlwZXMub2xkVHlwZSAhPT0gdGhpcy5yZXNvdXJjZVR5cGVzLm5ld1R5cGUpIHtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlVHlwZXMub2xkVHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBSZXNvdXJjZUltcGFjdC5XSUxMX0NSRUFURTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9sZFZhbHVlIS5EZWxldGlvblBvbGljeSA9PT0gJ1JldGFpbidcbiAgICAgICAgICA/IFJlc291cmNlSW1wYWN0LldJTExfT1JQSEFOXG4gICAgICAgICAgOiBSZXNvdXJjZUltcGFjdC5XSUxMX0RFU1RST1k7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFO1xuICAgIH1cblxuICAgIC8vIEJhc2UgaW1wYWN0IChiZWZvcmUgd2UgbWl4IGluIHRoZSB3b3JzdCBvZiB0aGUgcHJvcGVydHkgaW1wYWN0cyk7XG4gICAgLy8gV0lMTF9VUERBVEUgaWYgd2UgaGF2ZSBcIm90aGVyXCIgY2hhbmdlcywgTk9fQ0hBTkdFIGlmIHRoZXJlIGFyZSBubyBcIm90aGVyXCIgY2hhbmdlcy5cbiAgICBjb25zdCBiYXNlSW1wYWN0ID0gT2JqZWN0LmtleXModGhpcy5vdGhlckNoYW5nZXMpLmxlbmd0aCA+IDAgPyBSZXNvdXJjZUltcGFjdC5XSUxMX1VQREFURSA6IFJlc291cmNlSW1wYWN0Lk5PX0NIQU5HRTtcblxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucHJvcGVydHlEaWZmcylcbiAgICAgIC5tYXAoZWx0ID0+IGVsdC5jaGFuZ2VJbXBhY3QpXG4gICAgICAucmVkdWNlKHdvcnN0SW1wYWN0LCBiYXNlSW1wYWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCBvZiBhY3R1YWwgZGlmZmVyZW5jZXMgKG5vdCBvZiBlbGVtZW50cylcbiAgICovXG4gIHB1YmxpYyBnZXQgZGlmZmVyZW5jZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wcm9wZXJ0eVVwZGF0ZXMpLmxlbmd0aFxuICAgICAgKyBPYmplY3QudmFsdWVzKHRoaXMub3RoZXJDaGFuZ2VzKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGEgY2FsbGJhY2sgZm9yIGVhY2ggYWN0dWFsIGRpZmZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBmb3JFYWNoRGlmZmVyZW5jZShjYjogKHR5cGU6ICdQcm9wZXJ0eScgfCAnT3RoZXInLCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBEaWZmZXJlbmNlPGFueT4gfCBQcm9wZXJ0eURpZmZlcmVuY2U8YW55PikgPT4gYW55KSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5wcm9wZXJ0eVVwZGF0ZXMpLnNvcnQoKSkge1xuICAgICAgY2IoJ1Byb3BlcnR5Jywga2V5LCB0aGlzLnByb3BlcnR5VXBkYXRlc1trZXldKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5vdGhlckNoYW5nZXMpLnNvcnQoKSkge1xuICAgICAgY2IoJ090aGVyJywga2V5LCB0aGlzLm90aGVyRGlmZnNba2V5XSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Byb3BlcnR5RGlmZmVyZW5jZTxUPihkaWZmOiBEaWZmZXJlbmNlPFQ+KTogZGlmZiBpcyBQcm9wZXJ0eURpZmZlcmVuY2U8VD4ge1xuICByZXR1cm4gKGRpZmYgYXMgUHJvcGVydHlEaWZmZXJlbmNlPFQ+KS5jaGFuZ2VJbXBhY3QgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgYSBtYXAgb2YgSURpZmZlcmVuY2VzIGRvd24gdG8gb25seSByZXRhaW4gdGhlIGFjdHVhbCBjaGFuZ2VzXG4gKi9cbmZ1bmN0aW9uIG9ubHlDaGFuZ2VzPFYsIFQgZXh0ZW5kcyBJRGlmZmVyZW5jZTxWPj4oeHM6IHsgW2tleTogc3RyaW5nXTogVCB9KTogeyBba2V5OiBzdHJpbmddOiBUIH0ge1xuICBjb25zdCByZXQ6IHsgW2tleTogc3RyaW5nXTogVCB9ID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgZGlmZl0gb2YgT2JqZWN0LmVudHJpZXMoeHMpKSB7XG4gICAgaWYgKGRpZmYuaXNEaWZmZXJlbnQpIHtcbiAgICAgIHJldFtrZXldID0gZGlmZjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJldDtcbn1cbiJdfQ==
|
|
562
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5dkJBLG9EQUVDO0FBM3ZCRCxtQ0FBd0M7QUFFeEMsb0VBQXlGO0FBQ3pGLGlDQUFzRDtBQUN0RCxvREFBZ0Q7QUFDaEQsOEVBQXlFO0FBZ0N6RSxpRUFBaUU7QUFDakUsTUFBYSxZQUFZO0lBQ2hCLHdCQUF3QixDQUFzQjtJQUM5QyxXQUFXLENBQXNCO0lBQ2pDLFNBQVMsQ0FBc0I7SUFDL0IsVUFBVSxDQUF1RDtJQUNqRSxRQUFRLENBQW1EO0lBQzNELFFBQVEsQ0FBcUQ7SUFDN0QsT0FBTyxDQUFpRDtJQUN4RCxVQUFVLENBQXVEO0lBQ2pFLFNBQVMsQ0FBcUQ7SUFDckUsa0VBQWtFO0lBQzNELE9BQU8sQ0FBNkM7SUFFM0Q7O09BRUc7SUFDYSxVQUFVLENBQWE7SUFFdkM7O09BRUc7SUFDYSxvQkFBb0IsQ0FBdUI7SUFFM0QsWUFBWSxJQUFtQjtRQUM3QixJQUFJLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQ2hFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUks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c3NlcnRpb25FcnJvciB9IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgdHlwZSB7IFJlc291cmNlIGFzIFJlc291cmNlTW9kZWwgfSBmcm9tICdAYXdzLWNkay9zZXJ2aWNlLXNwZWMtdHlwZXMnO1xuaW1wb3J0IHsgUHJvcGVydHlTY3J1dGlueVR5cGUsIFJlc291cmNlU2NydXRpbnlUeXBlIH0gZnJvbSAnQGF3cy1jZGsvc2VydmljZS1zcGVjLXR5cGVzJztcbmltcG9ydCB7IGRlZXBFcXVhbCwgbG9hZFJlc291cmNlTW9kZWwgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgSWFtQ2hhbmdlcyB9IGZyb20gJy4uL2lhbS9pYW0tY2hhbmdlcyc7XG5pbXBvcnQgeyBTZWN1cml0eUdyb3VwQ2hhbmdlcyB9IGZyb20gJy4uL25ldHdvcmsvc2VjdXJpdHktZ3JvdXAtY2hhbmdlcyc7XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5TWFwID0geyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuZXhwb3J0IHR5cGUgQ2hhbmdlU2V0UmVzb3VyY2VzID0geyBbbG9naWNhbElkOiBzdHJpbmddOiBDaGFuZ2VTZXRSZXNvdXJjZSB9O1xuXG4vKipcbiAqIEBwYXJhbSBiZWZvcmVDb250ZXh0IC0gaXMgdGhlIEJlZm9yZUNvbnRleHQgZmllbGQgZnJvbSB0aGUgQ2hhbmdlU2V0LlJlc291cmNlQ2hhbmdlLkJlZm9yZUNvbnRleHQuIFRoaXMgaXMgdGhlIHBhcnQgb2YgdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlXG4gKiB0aGF0IGRlZmluZXMgd2hhdCB0aGUgcmVzb3VyY2UgaXMgYmVmb3JlIHRoZSBjaGFuZ2UgaXMgYXBwbGllZDsgdGhhdCBpcywgQmVmb3JlQ29udGV4dCBpcyBDbG91ZEZvcm1hdGlvblRlbXBsYXRlLlJlc291cmNlc1tMb2dpY2FsSWRdIGJlZm9yZSB0aGUgQ2hhbmdlU2V0IGlzIGV4ZWN1dGVkLlxuICpcbiAqIEBwYXJhbSBhZnRlckNvbnRleHQgLSBzYW1lIGFzIGJlZm9yZUNvbnRleHQgYnV0IGZvciBhZnRlciB0aGUgY2hhbmdlIGlzIG1hZGU7IHRoYXQgaXMsIEFmdGVyQ29udGV4dCBpcyBDbG91ZEZvcm1hdGlvblRlbXBsYXRlLlJlc291cmNlc1tMb2dpY2FsSWRdIGFmdGVyIHRoZSBDaGFuZ2VTZXQgaXMgZXhlY3V0ZWQuXG4gKlxuICogICogSGVyZSBpcyBhbiBleGFtcGxlIG9mIHdoYXQgYSBiZWZvcmVDb250ZXh0L2FmdGVyQ29udGV4dCBsb29rcyBsaWtlOlxuICogICd7XCJQcm9wZXJ0aWVzXCI6e1wiVmFsdWVcIjpcInNkZmxramFcIixcIlR5cGVcIjpcIlN0cmluZ1wiLFwiTmFtZVwiOlwibXlTc21QYXJhbWV0ZXJGcm9tU3RhY2tcIn0sXCJNZXRhZGF0YVwiOntcImF3czpjZGs6cGF0aFwiOlwiY2RrL215U3NtUGFyYW1ldGVyL1Jlc291cmNlXCJ9fSdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VTZXRSZXNvdXJjZSB7XG4gIHJlc291cmNlV2FzUmVwbGFjZWQ6IGJvb2xlYW47XG4gIHJlc291cmNlVHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcm9wZXJ0eVJlcGxhY2VtZW50TW9kZXM6IFByb3BlcnR5UmVwbGFjZW1lbnRNb2RlTWFwIHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgdHlwZSBQcm9wZXJ0eVJlcGxhY2VtZW50TW9kZU1hcCA9IHtcbiAgW3Byb3BlcnR5TmFtZTogc3RyaW5nXToge1xuICAgIHJlcGxhY2VtZW50TW9kZTogUmVwbGFjZW1lbnRNb2RlcyB8IHVuZGVmaW5lZDtcbiAgfTtcbn07XG5cbi8qKlxuICogJ0Fsd2F5cycgbWVhbnMgdGhhdCBjaGFuZ2luZyB0aGUgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB3aWxsIGFsd2F5cyBjYXVzZSBhIHJlc291cmNlIHJlcGxhY2VtZW50LiBOZXZlciBtZWFucyBuZXZlci4gQ29uZGl0aW9uYWxseSBtZWFucyBtYXliZS5cbiAqL1xuZXhwb3J0IHR5cGUgUmVwbGFjZW1lbnRNb2RlcyA9ICdBbHdheXMnIHwgJ05ldmVyJyB8ICdDb25kaXRpb25hbGx5JztcblxuLyoqIFNlbWFudGljIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlcy4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZURpZmYgaW1wbGVtZW50cyBJVGVtcGxhdGVEaWZmIHtcbiAgcHVibGljIGF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbj86IERpZmZlcmVuY2U8c3RyaW5nPjtcbiAgcHVibGljIGRlc2NyaXB0aW9uPzogRGlmZmVyZW5jZTxzdHJpbmc+O1xuICBwdWJsaWMgdHJhbnNmb3JtPzogRGlmZmVyZW5jZTxzdHJpbmc+O1xuICBwdWJsaWMgY29uZGl0aW9uczogRGlmZmVyZW5jZUNvbGxlY3Rpb248Q29uZGl0aW9uLCBDb25kaXRpb25EaWZmZXJlbmNlPjtcbiAgcHVibGljIG1hcHBpbmdzOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxNYXBwaW5nLCBNYXBwaW5nRGlmZmVyZW5jZT47XG4gIHB1YmxpYyBtZXRhZGF0YTogRGlmZmVyZW5jZUNvbGxlY3Rpb248TWV0YWRhdGEsIE1ldGFkYXRhRGlmZmVyZW5jZT47XG4gIHB1YmxpYyBvdXRwdXRzOiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxPdXRwdXQsIE91dHB1dERpZmZlcmVuY2U+O1xuICBwdWJsaWMgcGFyYW1ldGVyczogRGlmZmVyZW5jZUNvbGxlY3Rpb248UGFyYW1ldGVyLCBQYXJhbWV0ZXJEaWZmZXJlbmNlPjtcbiAgcHVibGljIHJlc291cmNlczogRGlmZmVyZW5jZUNvbGxlY3Rpb248UmVzb3VyY2UsIFJlc291cmNlRGlmZmVyZW5jZT47XG4gIC8qKiBUaGUgZGlmZmVyZW5jZXMgaW4gdW5rbm93bi91bmV4cGVjdGVkIHBhcnRzIG9mIHRoZSB0ZW1wbGF0ZSAqL1xuICBwdWJsaWMgdW5rbm93bjogRGlmZmVyZW5jZUNvbGxlY3Rpb248YW55LCBEaWZmZXJlbmNlPGFueT4+O1xuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRvIElBTSBwb2xpY2llc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlhbUNoYW5nZXM6IElhbUNoYW5nZXM7XG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdG8gU2VjdXJpdHkgR3JvdXAgaW5ncmVzcyBhbmQgZWdyZXNzIHJ1bGVzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VjdXJpdHlHcm91cENoYW5nZXM6IFNlY3VyaXR5R3JvdXBDaGFuZ2VzO1xuXG4gIGNvbnN0cnVjdG9yKGFyZ3M6IElUZW1wbGF0ZURpZmYpIHtcbiAgICBpZiAoYXJncy5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gPSBhcmdzLmF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbjtcbiAgICB9XG4gICAgaWYgKGFyZ3MuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IGFyZ3MuZGVzY3JpcHRpb247XG4gICAgfVxuICAgIGlmIChhcmdzLnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybSA9IGFyZ3MudHJhbnNmb3JtO1xuICAgIH1cblxuICAgIHRoaXMuY29uZGl0aW9ucyA9IGFyZ3MuY29uZGl0aW9ucyB8fCBuZXcgRGlmZmVyZW5jZUNvbGxlY3Rpb24oe30pO1xuICAgIHRoaXMubWFwcGluZ3MgPSBhcmdzLm1hcHBpbmdzIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy5tZXRhZGF0YSA9IGFyZ3MubWV0YWRhdGEgfHwgbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uKHt9KTtcbiAgICB0aGlzLm91dHB1dHMgPSBhcmdzLm91dHB1dHMgfHwgbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uKHt9KTtcbiAgICB0aGlzLnBhcmFtZXRlcnMgPSBhcmdzLnBhcmFtZXRlcnMgfHwgbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uKHt9KTtcbiAgICB0aGlzLnJlc291cmNlcyA9IGFyZ3MucmVzb3VyY2VzIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG4gICAgdGhpcy51bmtub3duID0gYXJncy51bmtub3duIHx8IG5ldyBEaWZmZXJlbmNlQ29sbGVjdGlvbih7fSk7XG5cbiAgICB0aGlzLmlhbUNoYW5nZXMgPSBuZXcgSWFtQ2hhbmdlcyh7XG4gICAgICBwcm9wZXJ0eUNoYW5nZXM6IHRoaXMuc2NydXRpbml6YWJsZVByb3BlcnR5Q2hhbmdlcyhJYW1DaGFuZ2VzLklhbVByb3BlcnR5U2NydXRpbmllcyksXG4gICAgICByZXNvdXJjZUNoYW5nZXM6IHRoaXMuc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcyhJYW1DaGFuZ2VzLklhbVJlc291cmNlU2NydXRpbmllcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLnNlY3VyaXR5R3JvdXBDaGFuZ2VzID0gbmV3IFNlY3VyaXR5R3JvdXBDaGFuZ2VzKHtcbiAgICAgIGVncmVzc1J1bGVQcm9wZXJ0eUNoYW5nZXM6IHRoaXMuc2NydXRpbml6YWJsZVByb3BlcnR5Q2hhbmdlcyhbUHJvcGVydHlTY3J1dGlueVR5cGUuRWdyZXNzUnVsZXNdKSxcbiAgICAgIGluZ3Jlc3NSdWxlUHJvcGVydHlDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVQcm9wZXJ0eUNoYW5nZXMoW1Byb3BlcnR5U2NydXRpbnlUeXBlLkluZ3Jlc3NSdWxlc10pLFxuICAgICAgZWdyZXNzUnVsZVJlc291cmNlQ2hhbmdlczogdGhpcy5zY3J1dGluaXphYmxlUmVzb3VyY2VDaGFuZ2VzKFtSZXNvdXJjZVNjcnV0aW55VHlwZS5FZ3Jlc3NSdWxlUmVzb3VyY2VdKSxcbiAgICAgIGluZ3Jlc3NSdWxlUmVzb3VyY2VDaGFuZ2VzOiB0aGlzLnNjcnV0aW5pemFibGVSZXNvdXJjZUNoYW5nZXMoW1Jlc291cmNlU2NydXRpbnlUeXBlLkluZ3Jlc3NSdWxlUmVzb3VyY2VdKSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGlmZmVyZW5jZUNvdW50KCkge1xuICAgIGxldCBjb3VudCA9IDA7XG5cbiAgICBpZiAodGhpcy5hd3NUZW1wbGF0ZUZvcm1hdFZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY291bnQgKz0gMTtcbiAgICB9XG4gICAgaWYgKHRoaXMudHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvdW50ICs9IDE7XG4gICAgfVxuXG4gICAgY291bnQgKz0gdGhpcy5jb25kaXRpb25zLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLm1hcHBpbmdzLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLm1ldGFkYXRhLmRpZmZlcmVuY2VDb3VudDtcbiAgICBjb3VudCArPSB0aGlzLm91dHB1dHMuZGlmZmVyZW5jZUNvdW50O1xuICAgIGNvdW50ICs9IHRoaXMucGFyYW1ldGVycy5kaWZmZXJlbmNlQ291bnQ7XG4gICAgY291bnQgKz0gdGhpcy5yZXNvdXJjZXMuZGlmZmVyZW5jZUNvdW50O1xuICAgIGNvdW50ICs9IHRoaXMudW5rbm93bi5kaWZmZXJlbmNlQ291bnQ7XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlmZmVyZW5jZUNvdW50ID09PSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0cnVlIGlmIGFueSBvZiB0aGUgcGVybWlzc2lvbnMgb2JqZWN0cyBpbnZvbHZlIGEgYnJvYWRlbmluZyBvZiBwZXJtaXNzaW9uc1xuICAgKi9cbiAgcHVibGljIGdldCBwZXJtaXNzaW9uc0Jyb2FkZW5lZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pYW1DaGFuZ2VzLnBlcm1pc3Npb25zQnJvYWRlbmVkIHx8IHRoaXMuc2VjdXJpdHlHcm91cENoYW5nZXMucnVsZXNBZGRlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBhbnkgb2YgdGhlIHBlcm1pc3Npb25zIG9iamVjdHMgaGF2ZSBjaGFuZ2VkXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBlcm1pc3Npb25zQW55Q2hhbmdlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pYW1DaGFuZ2VzLmhhc0NoYW5nZXMgfHwgdGhpcy5zZWN1cml0eUdyb3VwQ2hhbmdlcy5oYXNDaGFuZ2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbGwgcHJvcGVydHkgY2hhbmdlcyBvZiBhIGdpdmVuIHNjcnV0aW55IHR5cGVcbiAgICpcbiAgICogV2UgZG9uJ3QganVzdCBsb29rIGF0IHByb3BlcnR5IHVwZGF0ZXM7IHdlIGFsc28gbG9vayBhdCByZXNvdXJjZSBhZGRpdGlvbnMgYW5kIGRlbGV0aW9ucyAoaW4gd2hpY2hcbiAgICogY2FzZSB0aGVyZSBpcyBubyBmdXJ0aGVyIGRldGFpbCBvbiBwcm9wZXJ0eSB2YWx1ZXMpLCBhbmQgcmVzb3VyY2UgdHlwZSBjaGFuZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBzY3J1dGluaXphYmxlUHJvcGVydHlDaGFuZ2VzKHNjcnV0aW55VHlwZXM6IFByb3BlcnR5U2NydXRpbnlUeXBlW10pOiBQcm9wZXJ0eUNoYW5nZVtdIHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8UHJvcGVydHlDaGFuZ2U+KCk7XG5cbiAgICBmb3IgKGNvbnN0IFtyZXNvdXJjZUxvZ2ljYWxJZCwgcmVzb3VyY2VDaGFuZ2VdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb3VyY2VzLmNoYW5nZXMpKSB7XG4gICAgICBpZiAocmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlQ2hhbmdlZCkge1xuICAgICAgICAvLyB3ZSBpZ25vcmUgcmVzb3VyY2UgdHlwZSBjaGFuZ2VzIGhlcmUsIGFuZCBoYW5kbGUgdGhlbSBpbiBzY3J1dGluaXphYmxlUmVzb3VyY2VDaGFuZ2VzKClcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlKSB7XG4gICAgICAgIC8vIFdlIHVzZSByZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGUgdG8gbG9hZFJlc291cmNlTW9kZWwgc28gdGhhdCB3ZSBjYW4gaW5zcGVjdCB0aGVcbiAgICAgICAgLy8gcHJvcGVydGllcyBvZiBhIHJlc291cmNlIGV2ZW4gYWZ0ZXIgdGhlIHJlc291cmNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdGVtcGxhdGUuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdUeXBlUHJvcHMgPSBsb2FkUmVzb3VyY2VNb2RlbChyZXNvdXJjZUNoYW5nZS5yZXNvdXJjZVR5cGUpPy5wcm9wZXJ0aWVzIHx8IHt9O1xuICAgICAgZm9yIChjb25zdCBbcHJvcGVydHlOYW1lLCBwcm9wXSBvZiBPYmplY3QuZW50cmllcyhuZXdUeXBlUHJvcHMpKSB7XG4gICAgICAgIGNvbnN0IHByb3BTY3J1dGlueVR5cGUgPSBwcm9wLnNjcnV0aW5pemFibGUgfHwgUHJvcGVydHlTY3J1dGlueVR5cGUuTm9uZTtcbiAgICAgICAgaWYgKHNjcnV0aW55VHlwZXMuaW5jbHVkZXMocHJvcFNjcnV0aW55VHlwZSkpIHtcbiAgICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgICByZXNvdXJjZUxvZ2ljYWxJZCxcbiAgICAgICAgICAgIHByb3BlcnR5TmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlLFxuICAgICAgICAgICAgc2NydXRpbnlUeXBlOiBwcm9wU2NydXRpbnlUeXBlLFxuICAgICAgICAgICAgb2xkVmFsdWU6IHJlc291cmNlQ2hhbmdlLm9sZFByb3BlcnRpZXM/Lltwcm9wZXJ0eU5hbWVdLFxuICAgICAgICAgICAgbmV3VmFsdWU6IHJlc291cmNlQ2hhbmdlLm5ld1Byb3BlcnRpZXM/Lltwcm9wZXJ0eU5hbWVdLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYWxsIHJlc291cmNlIGNoYW5nZXMgb2YgYSBnaXZlbiBzY3J1dGlueSB0eXBlXG4gICAqXG4gICAqIFdlIGRvbid0IGp1c3QgbG9vayBhdCByZXNvdXJjZSB1cGRhdGVzOyB3ZSBhbHNvIGxvb2sgYXQgcmVzb3VyY2UgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgKGluIHdoaWNoXG4gICAqIGNhc2UgdGhlcmUgaXMgbm8gZnVydGhlciBkZXRhaWwgb24gcHJvcGVydHkgdmFsdWVzKSwgYW5kIHJlc291cmNlIHR5cGUgY2hhbmdlcy5cbiAgICovXG4gIHByaXZhdGUgc2NydXRpbml6YWJsZVJlc291cmNlQ2hhbmdlcyhzY3J1dGlueVR5cGVzOiBSZXNvdXJjZVNjcnV0aW55VHlwZVtdKTogUmVzb3VyY2VDaGFuZ2VbXSB7XG4gICAgY29uc3QgcmV0ID0gbmV3IEFycmF5PFJlc291cmNlQ2hhbmdlPigpO1xuXG4gICAgZm9yIChjb25zdCBbcmVzb3VyY2VMb2dpY2FsSWQsIHJlc291cmNlQ2hhbmdlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnJlc291cmNlcy5jaGFuZ2VzKSkge1xuICAgICAgaWYgKCFyZXNvdXJjZUNoYW5nZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29tbW9uUHJvcHMgPSB7XG4gICAgICAgIG9sZFByb3BlcnRpZXM6IHJlc291cmNlQ2hhbmdlLm9sZFByb3BlcnRpZXMsXG4gICAgICAgIG5ld1Byb3BlcnRpZXM6IHJlc291cmNlQ2hhbmdlLm5ld1Byb3BlcnRpZXMsXG4gICAgICAgIHJlc291cmNlTG9naWNhbElkLFxuICAgICAgfTtcblxuICAgICAgLy8gY2hhbmdlcyB0byB0aGUgVHlwZSBvZiByZXNvdXJjZXMgY2FuIGhhcHBlbiB3aGVuIG1pZ3JhdGluZyBmcm9tIENGTiB0ZW1wbGF0ZXMgdGhhdCB1c2UgVHJhbnNmb3Jtc1xuICAgICAgaWYgKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZUNoYW5nZWQpIHtcbiAgICAgICAgLy8gVHJlYXQgYXMgREVMRVRFK0FERFxuICAgICAgICBpZiAocmVzb3VyY2VDaGFuZ2Uub2xkUmVzb3VyY2VUeXBlKSB7XG4gICAgICAgICAgY29uc3Qgb2xkUmVzb3VyY2VNb2RlbCA9IGxvYWRSZXNvdXJjZU1vZGVsKHJlc291cmNlQ2hhbmdlLm9sZFJlc291cmNlVHlwZSk7XG4gICAgICAgICAgaWYgKG9sZFJlc291cmNlTW9kZWwgJiYgdGhpcy5yZXNvdXJjZUlzU2NydXRpbml6YWJsZShvbGRSZXNvdXJjZU1vZGVsLCBzY3J1dGlueVR5cGVzKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goe1xuICAgICAgICAgICAgICAuLi5jb21tb25Qcm9wcyxcbiAgICAgICAgICAgICAgbmV3UHJvcGVydGllczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlQ2hhbmdlLm9sZFJlc291cmNlVHlwZSEsXG4gICAgICAgICAgICAgIHNjcnV0aW55VHlwZTogb2xkUmVzb3VyY2VNb2RlbC5zY3J1dGluaXphYmxlISxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNvdXJjZUNoYW5nZS5uZXdSZXNvdXJjZVR5cGUpIHtcbiAgICAgICAgICBjb25zdCBuZXdSZXNvdXJjZU1vZGVsID0gbG9hZFJlc291cmNlTW9kZWwocmVzb3VyY2VDaGFuZ2UubmV3UmVzb3VyY2VUeXBlKTtcbiAgICAgICAgICBpZiAobmV3UmVzb3VyY2VNb2RlbCAmJiB0aGlzLnJlc291cmNlSXNTY3J1dGluaXphYmxlKG5ld1Jlc291cmNlTW9kZWwsIHNjcnV0aW55VHlwZXMpKSB7XG4gICAgICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgICAgIC4uLmNvbW1vblByb3BzLFxuICAgICAgICAgICAgICBvbGRQcm9wZXJ0aWVzOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2VDaGFuZ2UubmV3UmVzb3VyY2VUeXBlISxcbiAgICAgICAgICAgICAgc2NydXRpbnlUeXBlOiBuZXdSZXNvdXJjZU1vZGVsLnNjcnV0aW5pemFibGUhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzb3VyY2VNb2RlbCA9IGxvYWRSZXNvdXJjZU1vZGVsKHJlc291cmNlQ2hhbmdlLnJlc291cmNlVHlwZSk7XG4gICAgICAgIGlmIChyZXNvdXJjZU1vZGVsICYmIHRoaXMucmVzb3VyY2VJc1NjcnV0aW5pemFibGUocmVzb3VyY2VNb2RlbCwgc2NydXRpbnlUeXBlcykpIHtcbiAgICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgICAuLi5jb21tb25Qcm9wcyxcbiAgICAgICAgICAgIHJlc291cmNlVHlwZTogcmVzb3VyY2VDaGFuZ2UucmVzb3VyY2VUeXBlLFxuICAgICAgICAgICAgc2NydXRpbnlUeXBlOiByZXNvdXJjZU1vZGVsLnNjcnV0aW5pemFibGUhLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb3VyY2VJc1NjcnV0aW5pemFibGUocmVzOiBSZXNvdXJjZU1vZGVsLCBzY3J1dGlueVR5cGVzOiBBcnJheTxSZXNvdXJjZVNjcnV0aW55VHlwZT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2NydXRpbnlUeXBlcy5pbmNsdWRlcyhyZXMuc2NydXRpbml6YWJsZSB8fCBSZXNvdXJjZVNjcnV0aW55VHlwZS5Ob25lKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgY2hhbmdlIGluIHByb3BlcnR5IHZhbHVlc1xuICpcbiAqIE5vdCBuZWNlc3NhcmlseSBhbiB1cGRhdGUsIGl0IGNvdWxkIGJlIHRoYXQgdGhlcmUgdXNlZCB0byBiZSBubyB2YWx1ZSB0aGVyZVxuICogYmVjYXVzZSB0aGVyZSB3YXMgbm8gcmVzb3VyY2UsIGFuZCBub3cgdGhlcmUgaXMgKG9yIHZpY2UgdmVyc2EpLlxuICpcbiAqIFRoZXJlZm9yZSwgd2UganVzdCBjb250YWluIHBsYWluIHZhbHVlcyBhbmQgbm90IGEgUHJvcGVydHlEaWZmZXJlbmNlPGFueT4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydHlDaGFuZ2Uge1xuICAvKipcbiAgICogTG9naWNhbCBJRCBvZiB0aGUgcmVzb3VyY2Ugd2hlcmUgdGhpcyBwcm9wZXJ0eSBjaGFuZ2Ugd2FzIGZvdW5kXG4gICAqL1xuICByZXNvdXJjZUxvZ2ljYWxJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSByZXNvdXJjZVxuICAgKi9cbiAgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjcnV0aW55IHR5cGUgZm9yIHRoaXMgcHJvcGVydHkgY2hhbmdlXG4gICAqL1xuICBzY3J1dGlueVR5cGU6IFByb3BlcnR5U2NydXRpbnlUeXBlO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IGlzIGNoYW5naW5nXG4gICAqL1xuICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBwcm9wZXJ0eSB2YWx1ZVxuICAgKi9cbiAgb2xkVmFsdWU/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgcHJvcGVydHkgdmFsdWVcbiAgICovXG4gIG5ld1ZhbHVlPzogYW55O1xufVxuXG4vKipcbiAqIEEgcmVzb3VyY2UgY2hhbmdlXG4gKlxuICogRWl0aGVyIGEgY3JlYXRpb24sIGRlbGV0aW9uIG9yIHVwZGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZUNoYW5nZSB7XG4gIC8qKlxuICAgKiBMb2dpY2FsIElEIG9mIHRoZSByZXNvdXJjZSB3aGVyZSB0aGlzIHByb3BlcnR5IGNoYW5nZSB3YXMgZm91bmRcbiAgICovXG4gIHJlc291cmNlTG9naWNhbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNjcnV0aW55IHR5cGUgZm9yIHRoaXMgcmVzb3VyY2UgY2hhbmdlXG4gICAqL1xuICBzY3J1dGlueVR5cGU6IFJlc291cmNlU2NydXRpbnlUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgcmVzb3VyY2VcbiAgICovXG4gIHJlc291cmNlVHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2xkIHByb3BlcnRpZXMgdmFsdWUgKG1pZ2h0IGJlIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGNyZWF0aW9uKVxuICAgKi9cbiAgb2xkUHJvcGVydGllcz86IFByb3BlcnR5TWFwO1xuXG4gIC8qKlxuICAgKiBUaGUgbmV3IHByb3BlcnRpZXMgdmFsdWUgKG1pZ2h0IGJlIHVuZGVmaW5lZCBpbiBjYXNlIG9mIGRlbGV0aW9uKVxuICAgKi9cbiAgbmV3UHJvcGVydGllcz86IFByb3BlcnR5TWFwO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEaWZmZXJlbmNlPFZhbHVlVHlwZT4ge1xuICByZWFkb25seSBvbGRWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBuZXdWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBpc0RpZmZlcmVudDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNBZGRpdGlvbjogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNSZW1vdmFsOiBib29sZWFuO1xuICByZWFkb25seSBpc1VwZGF0ZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBNb2RlbHMgYW4gZW50aXR5IHRoYXQgY2hhbmdlZCBiZXR3ZWVuIHR3byB2ZXJzaW9ucyBvZiBhIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlLlxuICovXG5leHBvcnQgY2xhc3MgRGlmZmVyZW5jZTxWYWx1ZVR5cGU+IGltcGxlbWVudHMgSURpZmZlcmVuY2U8VmFsdWVUeXBlPiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYW4gYWN0dWFsIGRpZmZlcmVudCBvciB0aGUgdmFsdWVzIGFyZSBhY3R1YWxseSB0aGUgc2FtZVxuICAgKlxuICAgKiBpc0RpZmZlcmVudCA9PiAoaXNVcGRhdGUgfCBpc1JlbW92ZWQgfCBpc1VwZGF0ZSlcbiAgICovXG4gIHB1YmxpYyBpc0RpZmZlcmVudDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQHBhcmFtIG9sZFZhbHVlIC0gdGhlIG9sZCB2YWx1ZSwgY2Fubm90IGJlIGVxdWFsICh0byB0aGUgc2Vuc2Ugb2YgK2RlZXBFcXVhbCspIHRvICtuZXdWYWx1ZSsuXG4gICAqIEBwYXJhbSBuZXdWYWx1ZSAtIHRoZSBuZXcgdmFsdWUsIGNhbm5vdCBiZSBlcXVhbCAodG8gdGhlIHNlbnNlIG9mICtkZWVwRXF1YWwrKSB0byArb2xkVmFsdWUrLlxuICAgKi9cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IG9sZFZhbHVlOiBWYWx1ZVR5cGUgfCB1bmRlZmluZWQsIHB1YmxpYyByZWFkb25seSBuZXdWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKG9sZFZhbHVlID09PSB1bmRlZmluZWQgJiYgbmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKHsgbWVzc2FnZTogJ29sZFZhbHVlIGFuZCBuZXdWYWx1ZSBhcmUgYm90aCB1bmRlZmluZWQhJyB9KTtcbiAgICB9XG4gICAgdGhpcy5pc0RpZmZlcmVudCA9ICFkZWVwRXF1YWwob2xkVmFsdWUsIG5ld1ZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyArdHJ1ZSsgaWYgdGhlIGVsZW1lbnQgaXMgbmV3IHRvIHRoZSB0ZW1wbGF0ZS4gKi9cbiAgcHVibGljIGdldCBpc0FkZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9sZFZhbHVlID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogQHJldHVybnMgK3RydWUrIGlmIHRoZSBlbGVtZW50IHdhcyByZW1vdmVkIGZyb20gdGhlIHRlbXBsYXRlLiAqL1xuICBwdWJsaWMgZ2V0IGlzUmVtb3ZhbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5uZXdWYWx1ZSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEByZXR1cm5zICt0cnVlKyBpZiB0aGUgZWxlbWVudCB3YXMgYWxyZWFkeSBpbiB0aGUgdGVtcGxhdGUgYW5kIGlzIHVwZGF0ZWQuICovXG4gIHB1YmxpYyBnZXQgaXNVcGRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub2xkVmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgJiYgdGhpcy5uZXdWYWx1ZSAhPT0gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eURpZmZlcmVuY2U8VmFsdWVUeXBlPiBleHRlbmRzIERpZmZlcmVuY2U8VmFsdWVUeXBlPiB7XG4gIHB1YmxpYyBjaGFuZ2VJbXBhY3Q/OiBSZXNvdXJjZUltcGFjdDtcblxuICBjb25zdHJ1Y3RvcihvbGRWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkLCBuZXdWYWx1ZTogVmFsdWVUeXBlIHwgdW5kZWZpbmVkLCBhcmdzOiB7IGNoYW5nZUltcGFjdD86IFJlc291cmNlSW1wYWN0IH0pIHtcbiAgICBzdXBlcihvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgIHRoaXMuY2hhbmdlSW1wYWN0ID0gYXJncy5jaGFuZ2VJbXBhY3Q7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpZmZlcmVuY2VDb2xsZWN0aW9uPFYsIFQgZXh0ZW5kcyBJRGlmZmVyZW5jZTxWPj4ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRpZmZzOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IFQgfSkge1xuICB9XG5cbiAgcHVibGljIGdldCBjaGFuZ2VzKCk6IHsgW2xvZ2ljYWxJZDogc3RyaW5nXTogVCB9IHtcbiAgICByZXR1cm4gb25seUNoYW5nZXModGhpcy5kaWZmcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpZmZlcmVuY2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY2hhbmdlcykubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIGdldChsb2dpY2FsSWQ6IHN0cmluZyk6IFQge1xuICAgIGNvbnN0IHJldCA9IHRoaXMuZGlmZnNbbG9naWNhbElkXTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBvYmplY3Qgd2l0aCBsb2dpY2FsIElEICcke2xvZ2ljYWxJZH0nYCk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlKGxvZ2ljYWxJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgZGVsZXRlIHRoaXMuZGlmZnNbbG9naWNhbElkXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgZGlmZmVyZW5jZSAoY2hhbmdlZCBvciBub3QpIGlzIHRyYWNrZWQgZm9yIHRoZSBnaXZlbiBsb2dpY2FsIElELlxuICAgKlxuICAgKiBOb3RlIHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYGxvZ2ljYWxJZHNgLCB3aGljaCBvbmx5IHJldHVybnMgSURzIHRoYXQgaGF2ZVxuICAgKiBhbiBhY3R1YWwgY2hhbmdlLiBBIGxvZ2ljYWwgSUQgbWF5IGJlIHByZXNlbnQgaGVyZSB3aXRoIGEgXCJuby1vcFwiIGRpZmZlcmVuY2UuXG4gICAqL1xuICBwdWJsaWMgaGFzKGxvZ2ljYWxJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlmZnNbbG9naWNhbElkXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCAob3IgcmVwbGFjZSkgdGhlIGRpZmZlcmVuY2UgdHJhY2tlZCBmb3IgdGhlIGdpdmVuIGxvZ2ljYWwgSUQuXG4gICAqL1xuICBwdWJsaWMgc2V0KGxvZ2ljYWxJZDogc3RyaW5nLCBkaWZmOiBUKTogdm9pZCB7XG4gICAgdGhpcy5kaWZmc1tsb2dpY2FsSWRdID0gZGlmZjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbG9naWNhbElkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2hhbmdlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBUZW1wbGF0ZURpZmYgd2hpY2ggb25seSBjb250YWlucyBjaGFuZ2VzIGZvciB3aGljaCBgcHJlZGljYXRlYFxuICAgKiByZXR1cm5zIGB0cnVlYC5cbiAgICovXG4gIHB1YmxpYyBmaWx0ZXIocHJlZGljYXRlOiAoZGlmZjogVCB8IHVuZGVmaW5lZCkgPT4gYm9vbGVhbik6IERpZmZlcmVuY2VDb2xsZWN0aW9uPFYsIFQ+IHtcbiAgICBjb25zdCBuZXdDaGFuZ2VzOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IFQgfSA9IHsgfTtcbiAgICBmb3IgKGNvbnN0IGlkIG9mIE9iamVjdC5rZXlzKHRoaXMuY2hhbmdlcykpIHtcbiAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLmNoYW5nZXNbaWRdO1xuXG4gICAgICBpZiAocHJlZGljYXRlKGRpZmYpKSB7XG4gICAgICAgIG5ld0NoYW5nZXNbaWRdID0gZGlmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERpZmZlcmVuY2VDb2xsZWN0aW9uPFYsIFQ+KG5ld0NoYW5nZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludm9rZXMgYGNiYCBmb3IgYWxsIGNoYW5nZXMgaW4gdGhpcyBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBDaGFuZ2VzIHdpbGwgYmUgc29ydGVkIGFzIGZvbGxvd3M6XG4gICAqICAtIFJlbW92ZWRcbiAgICogIC0gQWRkZWRcbiAgICogIC0gVXBkYXRlZFxuICAgKiAgLSBPdGhlcnNcbiAgICpcbiAgICovXG4gIHB1YmxpYyBmb3JFYWNoRGlmZmVyZW5jZShjYjogKGxvZ2ljYWxJZDogc3RyaW5nLCBjaGFuZ2U6IFQpID0+IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHJlbW92ZWQgPSBuZXcgQXJyYXk8eyBsb2dpY2FsSWQ6IHN0cmluZzsgY2hhbmdlOiBUIH0+KCk7XG4gICAgY29uc3QgYWRkZWQgPSBuZXcgQXJyYXk8eyBsb2dpY2FsSWQ6IHN0cmluZzsgY2hhbmdlOiBUIH0+KCk7XG4gICAgY29uc3QgdXBkYXRlZCA9IG5ldyBBcnJheTx7IGxvZ2ljYWxJZDogc3RyaW5nOyBjaGFuZ2U6IFQgfT4oKTtcbiAgICBjb25zdCBvdGhlcnMgPSBuZXcgQXJyYXk8eyBsb2dpY2FsSWQ6IHN0cmluZzsgY2hhbmdlOiBUIH0+KCk7XG5cbiAgICBmb3IgKGNvbnN0IGxvZ2ljYWxJZCBvZiB0aGlzLmxvZ2ljYWxJZHMpIHtcbiAgICAgIGNvbnN0IGNoYW5nZTogVCA9IHRoaXMuY2hhbmdlc1tsb2dpY2FsSWRdITtcbiAgICAgIGlmIChjaGFuZ2UuaXNBZGRpdGlvbikge1xuICAgICAgICBhZGRlZC5wdXNoKHsgbG9naWNhbElkLCBjaGFuZ2UgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZS5pc1JlbW92YWwpIHtcbiAgICAgICAgcmVtb3ZlZC5wdXNoKHsgbG9naWNhbElkLCBjaGFuZ2UgfSk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZS5pc1VwZGF0ZSkge1xuICAgICAgICB1cGRhdGVkLnB1c2goeyBsb2dpY2FsSWQsIGNoYW5nZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLmlzRGlmZmVyZW50KSB7XG4gICAgICAgIG90aGVycy5wdXNoKHsgbG9naWNhbElkLCBjaGFuZ2UgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVtb3ZlZC5mb3JFYWNoKHYgPT4gY2Iodi5sb2dpY2FsSWQsIHYuY2hhbmdlKSk7XG4gICAgYWRkZWQuZm9yRWFjaCh2ID0+IGNiKHYubG9naWNhbElkLCB2LmNoYW5nZSkpO1xuICAgIHVwZGF0ZWQuZm9yRWFjaCh2ID0+IGNiKHYubG9naWNhbElkLCB2LmNoYW5nZSkpO1xuICAgIG90aGVycy5mb3JFYWNoKHYgPT4gY2Iodi5sb2dpY2FsSWQsIHYuY2hhbmdlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBcmd1bWVudHMgZXhwZWN0ZWQgYnkgdGhlIGNvbnN0cnVjdG9yIG9mICtUZW1wbGF0ZURpZmYrLCBleHRyYWN0ZWQgYXMgYW4gaW50ZXJmYWNlIGZvciB0aGUgc2FrZVxuICogb2YgKHJlbGF0aXZlKSBjb25jaXNlbmVzcyBvZiB0aGUgY29uc3RydWN0b3IncyBzaWduYXR1cmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRlbXBsYXRlRGlmZiB7XG4gIGF3c1RlbXBsYXRlRm9ybWF0VmVyc2lvbj86IElEaWZmZXJlbmNlPHN0cmluZz47XG4gIGRlc2NyaXB0aW9uPzogSURpZmZlcmVuY2U8c3RyaW5nPjtcbiAgdHJhbnNmb3JtPzogSURpZmZlcmVuY2U8c3RyaW5nPjtcblxuICBjb25kaXRpb25zPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248Q29uZGl0aW9uLCBDb25kaXRpb25EaWZmZXJlbmNlPjtcbiAgbWFwcGluZ3M/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxNYXBwaW5nLCBNYXBwaW5nRGlmZmVyZW5jZT47XG4gIG1ldGFkYXRhPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248TWV0YWRhdGEsIE1ldGFkYXRhRGlmZmVyZW5jZT47XG4gIG91dHB1dHM/OiBEaWZmZXJlbmNlQ29sbGVjdGlvbjxPdXRwdXQsIE91dHB1dERpZmZlcmVuY2U+O1xuICBwYXJhbWV0ZXJzPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248UGFyYW1ldGVyLCBQYXJhbWV0ZXJEaWZmZXJlbmNlPjtcbiAgcmVzb3VyY2VzPzogRGlmZmVyZW5jZUNvbGxlY3Rpb248UmVzb3VyY2UsIFJlc291cmNlRGlmZmVyZW5jZT47XG5cbiAgdW5rbm93bj86IERpZmZlcmVuY2VDb2xsZWN0aW9uPGFueSwgSURpZmZlcmVuY2U8YW55Pj47XG59XG5cbmV4cG9ydCB0eXBlIENvbmRpdGlvbiA9IGFueTtcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25EaWZmZXJlbmNlIGV4dGVuZHMgRGlmZmVyZW5jZTxDb25kaXRpb24+IHtcbiAgLy8gVE9ETzogZGVmaW5lIHNwZWNpZmljIGRpZmZlcmVuY2UgYXR0cmlidXRlc1xufVxuXG5leHBvcnQgdHlwZSBNYXBwaW5nID0gYW55O1xuZXhwb3J0IGNsYXNzIE1hcHBpbmdEaWZmZXJlbmNlIGV4dGVuZHMgRGlmZmVyZW5jZTxNYXBwaW5nPiB7XG4gIC8vIFRPRE86IGRlZmluZSBzcGVjaWZpYyBkaWZmZXJlbmNlIGF0dHJpYnV0ZXNcbn1cblxuZXhwb3J0IHR5cGUgTWV0YWRhdGEgPSBhbnk7XG5leHBvcnQgY2xhc3MgTWV0YWRhdGFEaWZmZXJlbmNlIGV4dGVuZHMgRGlmZmVyZW5jZTxNZXRhZGF0YT4ge1xuICAvLyBUT0RPOiBkZWZpbmUgc3BlY2lmaWMgZGlmZmVyZW5jZSBhdHRyaWJ1dGVzXG59XG5cbmV4cG9ydCB0eXBlIE91dHB1dCA9IGFueTtcbmV4cG9ydCBjbGFzcyBPdXRwdXREaWZmZXJlbmNlIGV4dGVuZHMgRGlmZmVyZW5jZTxPdXRwdXQ+IHtcbiAgLy8gVE9ETzogZGVmaW5lIHNwZWNpZmljIGRpZmZlcmVuY2UgYXR0cmlidXRlc1xufVxuXG5leHBvcnQgdHlwZSBQYXJhbWV0ZXIgPSBhbnk7XG5leHBvcnQgY2xhc3MgUGFyYW1ldGVyRGlmZmVyZW5jZSBleHRlbmRzIERpZmZlcmVuY2U8UGFyYW1ldGVyPiB7XG4gIC8vIFRPRE86IGRlZmluZSBzcGVjaWZpYyBkaWZmZXJlbmNlIGF0dHJpYnV0ZXNcbn1cblxuZXhwb3J0IGVudW0gUmVzb3VyY2VJbXBhY3Qge1xuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgdXBkYXRlZCAqL1xuICBXSUxMX1VQREFURSA9ICdXSUxMX1VQREFURScsXG4gIC8qKiBBIG5ldyBwaHlzaWNhbCByZXNvdXJjZSB3aWxsIGJlIGNyZWF0ZWQgKi9cbiAgV0lMTF9DUkVBVEUgPSAnV0lMTF9DUkVBVEUnLFxuICAvKiogVGhlIGV4aXN0aW5nIHBoeXNpY2FsIHJlc291cmNlIHdpbGwgYmUgcmVwbGFjZWQgKi9cbiAgV0lMTF9SRVBMQUNFID0gJ1dJTExfUkVQTEFDRScsXG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2UgbWF5IGJlIHJlcGxhY2VkICovXG4gIE1BWV9SRVBMQUNFID0gJ01BWV9SRVBMQUNFJyxcbiAgLyoqIFRoZSBleGlzdGluZyBwaHlzaWNhbCByZXNvdXJjZSB3aWxsIGJlIGRlc3Ryb3llZCAqL1xuICBXSUxMX0RFU1RST1kgPSAnV0lMTF9ERVNUUk9ZJyxcbiAgLyoqIFRoZSBleGlzdGluZyBwaHlzaWNhbCByZXNvdXJjZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSBDbG91ZEZvcm1hdGlvbiBzdXBlcnZpc2lvbiAqL1xuICBXSUxMX09SUEhBTiA9ICdXSUxMX09SUEhBTicsXG4gIC8qKiBUaGUgZXhpc3RpbmcgcGh5c2ljYWwgcmVzb3VyY2Ugd2lsbCBiZSBhZGRlZCB0byBDbG91ZEZvcm1hdGlvbiBzdXBlcnZpc2lvbiAqL1xuICBXSUxMX0lNUE9SVCA9ICdXSUxMX0lNUE9SVCcsXG4gIC8qKiBUaGVyZSBpcyBubyBjaGFuZ2UgaW4gdGhpcyByZXNvdXJjZSAqL1xuICBOT19DSEFOR0UgPSAnTk9fQ0hBTkdFJyxcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIGFzIGEgcmVkdWNlciB0byBvYnRhaW4gdGhlIHJlc291cmNlLWxldmVsIGltcGFjdCBvZiBhIGxpc3RcbiAqIG9mIHByb3BlcnR5LWxldmVsIGltcGFjdHMuXG4gKiBAcGFyYW0gb25lIC0gdGhlIGN1cnJlbnQgd29yc3QgaW1wYWN0IHNvIGZhci5cbiAqIEBwYXJhbSB0d28gLSB0aGUgbmV3IGltcGFjdCBiZWluZyBjb25zaWRlcmVkIChjYW4gYmUgdW5kZWZpbmVkLCBhcyB3ZSBtYXkgbm90IGFsd2F5cyBiZVxuICogICAgICBhYmxlIHRvIGRldGVybWluZSBzb21lIHByb3BlcnRpZXMgaW1wYWN0KS5cbiAqL1xuZnVuY3Rpb24gd29yc3RJbXBhY3Qob25lOiBSZXNvdXJjZUltcGFjdCwgdHdvPzogUmVzb3VyY2VJbXBhY3QpOiBSZXNvdXJjZUltcGFjdCB7XG4gIGlmICghdHdvKSB7XG4gICAgcmV0dXJuIG9uZTtcbiAgfVxuICBjb25zdCBiYWRuZXNzID0ge1xuICAgIFtSZXNvdXJjZUltcGFjdC5OT19DSEFOR0VdOiAwLFxuICAgIFtSZXNvdXJjZUltcGFjdC5XSUxMX0lNUE9SVF06IDAsXG4gICAgW1Jlc291cmNlSW1wYWN0LldJTExfVVBEQVRFXTogMSxcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9DUkVBVEVdOiAyLFxuICAgIFtSZXNvdXJjZUltcGFjdC5XSUxMX09SUEhBTl06IDMsXG4gICAgW1Jlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFXTogNCxcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFXTogNSxcbiAgICBbUmVzb3VyY2VJbXBhY3QuV0lMTF9ERVNUUk9ZXTogNixcbiAgfTtcbiAgcmV0dXJuIGJhZG5lc3Nbb25lXSA+IGJhZG5lc3NbdHdvXSA/IG9uZSA6IHR3bztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZSB7XG4gIFR5cGU6IHN0cmluZztcbiAgUHJvcGVydGllcz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuXG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNb3ZlIHtcbiAgcmVhZG9ubHkgZGlyZWN0aW9uOiAnZnJvbScgfCAndG8nO1xuICByZWFkb25seSBzdGFja05hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VMb2dpY2FsSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGFuZ2UgdG8gYSBzaW5nbGUgcmVzb3VyY2UgYmV0d2VlbiB0d28gQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVzXG4gKlxuICogVGhpcyBjbGFzcyBjYW4gYmUgbXV0YXRlZCBhZnRlciBjb25zdHJ1Y3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNvdXJjZURpZmZlcmVuY2UgaW1wbGVtZW50cyBJRGlmZmVyZW5jZTxSZXNvdXJjZT4ge1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJlc291cmNlIHdhcyBhZGRlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzQWRkaXRpb246IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyByZXNvdXJjZSB3YXMgcmVtb3ZlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlzUmVtb3ZhbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJlc291cmNlIHdhcyBpbXBvcnRlZFxuICAgKi9cbiAgcHVibGljIGlzSW1wb3J0PzogYm9vbGVhbjtcblxuICBwdWJsaWMgbW92ZT86IE1vdmU7XG5cbiAgLyoqIFByb3BlcnR5LWxldmVsIGNoYW5nZXMgb24gdGhlIHJlc291cmNlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcGVydHlEaWZmczogeyBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55PiB9O1xuXG4gIC8qKiBDaGFuZ2VzIHRvIG5vbi1wcm9wZXJ0eSBsZXZlbCBhdHRyaWJ1dGVzIG9mIHRoZSByZXNvdXJjZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG90aGVyRGlmZnM6IHsgW2tleTogc3RyaW5nXTogRGlmZmVyZW5jZTxhbnk+IH07XG5cbiAgLyoqIFRoZSByZXNvdXJjZSB0eXBlIChvciBvbGQgYW5kIG5ldyB0eXBlIGlmIGl0IGhhcyBjaGFuZ2VkKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlVHlwZXM6IHsgcmVhZG9ubHkgb2xkVHlwZT86IHN0cmluZzsgcmVhZG9ubHkgbmV3VHlwZT86IHN0cmluZyB9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBvbGRWYWx1ZTogUmVzb3VyY2UgfCB1bmRlZmluZWQsXG4gICAgcHVibGljIHJlYWRvbmx5IG5ld1ZhbHVlOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCxcbiAgICBhcmdzOiB7XG4gICAgICByZXNvdXJjZVR5cGU6IHsgb2xkVHlwZT86IHN0cmluZzsgbmV3VHlwZT86IHN0cmluZyB9O1xuICAgICAgcHJvcGVydHlEaWZmczogeyBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55PiB9O1xuICAgICAgb3RoZXJEaWZmczogeyBba2V5OiBzdHJpbmddOiBEaWZmZXJlbmNlPGFueT4gfTtcbiAgICB9LFxuICApIHtcbiAgICB0aGlzLnJlc291cmNlVHlwZXMgPSBhcmdzLnJlc291cmNlVHlwZTtcbiAgICB0aGlzLnByb3BlcnR5RGlmZnMgPSBhcmdzLnByb3BlcnR5RGlmZnM7XG4gICAgdGhpcy5vdGhlckRpZmZzID0gYXJncy5vdGhlckRpZmZzO1xuXG4gICAgdGhpcy5pc0FkZGl0aW9uID0gb2xkVmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzUmVtb3ZhbCA9IG5ld1ZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc0ltcG9ydCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb2xkUHJvcGVydGllcygpOiBQcm9wZXJ0eU1hcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub2xkVmFsdWUgJiYgdGhpcy5vbGRWYWx1ZS5Qcm9wZXJ0aWVzO1xuICB9XG5cbiAgcHVibGljIGdldCBuZXdQcm9wZXJ0aWVzKCk6IFByb3BlcnR5TWFwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5uZXdWYWx1ZSAmJiB0aGlzLm5ld1ZhbHVlLlByb3BlcnRpZXM7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGlzIHJlc291cmNlIHdhcyBtb2RpZmllZCBhdCBhbGxcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNEaWZmZXJlbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlmZmVyZW5jZUNvdW50ID4gMCB8fCB0aGlzLm9sZFJlc291cmNlVHlwZSAhPT0gdGhpcy5uZXdSZXNvdXJjZVR5cGU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcmVzb3VyY2Ugd2FzIHVwZGF0ZWQgaW4tcGxhY2VcbiAgICovXG4gIHB1YmxpYyBnZXQgaXNVcGRhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEaWZmZXJlbnQgJiYgIXRoaXMuaXNBZGRpdGlvbiAmJiAhdGhpcy5pc1JlbW92YWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9sZFJlc291cmNlVHlwZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlc291cmNlVHlwZXMub2xkVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmV3UmVzb3VyY2VUeXBlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VUeXBlcy5uZXdUeXBlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbCBhY3R1YWwgcHJvcGVydHkgdXBkYXRlc1xuICAgKi9cbiAgcHVibGljIGdldCBwcm9wZXJ0eVVwZGF0ZXMoKTogeyBba2V5OiBzdHJpbmddOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55PiB9IHtcbiAgICByZXR1cm4gb25seUNoYW5nZXModGhpcy5wcm9wZXJ0eURpZmZzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgYWN0dWFsIFwib3RoZXJcIiB1cGRhdGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG90aGVyQ2hhbmdlcygpOiB7IFtrZXk6IHN0cmluZ106IERpZmZlcmVuY2U8YW55PiB9IHtcbiAgICByZXR1cm4gb25seUNoYW5nZXModGhpcy5vdGhlckRpZmZzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgcmVzb3VyY2UgdHlwZSB3YXMgY2hhbmdlZCBpbiB0aGlzIGRpZmZcbiAgICpcbiAgICogVGhpcyBpcyBub3QgYSB2YWxpZCBvcGVyYXRpb24gaW4gQ2xvdWRGb3JtYXRpb24gYnV0IHRvIGJlIGRlZmVuc2l2ZSB3ZSdyZSBnb2luZ1xuICAgKiB0byBiZSBhd2FyZSBvZiBpdCBhbnl3YXkuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlVHlwZUNoYW5nZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnJlc291cmNlVHlwZXMub2xkVHlwZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHRoaXMucmVzb3VyY2VUeXBlcy5uZXdUeXBlICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgdGhpcy5yZXNvdXJjZVR5cGVzLm9sZFR5cGUgIT09IHRoaXMucmVzb3VyY2VUeXBlcy5uZXdUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHJlc291cmNlIHR5cGUgaWYgaXQgd2FzIHVuY2hhbmdlZFxuICAgKlxuICAgKiBJZiB0aGUgcmVzb3VyY2UgdHlwZSB3YXMgY2hhbmdlZCwgaXQncyBhbiBlcnJvciB0byBjYWxsIHRoaXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJlc291cmNlVHlwZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnJlc291cmNlVHlwZUNoYW5nZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGdldCAucmVzb3VyY2VUeXBlLCBiZWNhdXNlIHRoZSB0eXBlIHdhcyBjaGFuZ2VkJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc291cmNlVHlwZXMub2xkVHlwZSB8fCB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgUHJvcGVydHlDaGFuZ2UgaW4gdGhpcyBvYmplY3RcbiAgICpcbiAgICogVGhpcyBhZmZlY3RzIHRoZSBwcm9wZXJ0eSBkaWZmIGFzIGl0IGlzIHN1bW1hcml6ZWQgdG8gdXNlcnMsIGJ1dCBpdCBET0VTXG4gICAqIE5PVCBhZmZlY3QgZWl0aGVyIHRoZSBcIm9sZFZhbHVlXCIgb3IgXCJuZXdWYWx1ZVwiIHZhbHVlczsgdGhvc2Ugc3RpbGwgY29udGFpblxuICAgKiB0aGUgYWN0dWFsIHRlbXBsYXRlIHZhbHVlcyBhcyBwcm92aWRlZCBieSB0aGUgdXNlciAodGhleSBtaWdodCBzdGlsbCBiZVxuICAgKiB1c2VkIGZvciBkb3duc3RyZWFtIHByb2Nlc3NpbmcpLlxuICAgKi9cbiAgcHVibGljIHNldFByb3BlcnR5Q2hhbmdlKHByb3BlcnR5TmFtZTogc3RyaW5nLCBjaGFuZ2U6IFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+KSB7XG4gICAgdGhpcy5wcm9wZXJ0eURpZmZzW3Byb3BlcnR5TmFtZV0gPSBjaGFuZ2U7XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhIE90aGVyQ2hhbmdlIGluIHRoaXMgb2JqZWN0XG4gICAqXG4gICAqIFRoaXMgYWZmZWN0cyB0aGUgcHJvcGVydHkgZGlmZiBhcyBpdCBpcyBzdW1tYXJpemVkIHRvIHVzZXJzLCBidXQgaXQgRE9FU1xuICAgKiBOT1QgYWZmZWN0IGVpdGhlciB0aGUgXCJvbGRWYWx1ZVwiIG9yIFwibmV3VmFsdWVcIiB2YWx1ZXM7IHRob3NlIHN0aWxsIGNvbnRhaW5cbiAgICogdGhlIGFjdHVhbCB0ZW1wbGF0ZSB2YWx1ZXMgYXMgcHJvdmlkZWQgYnkgdGhlIHVzZXIgKHRoZXkgbWlnaHQgc3RpbGwgYmVcbiAgICogdXNlZCBmb3IgZG93bnN0cmVhbSBwcm9jZXNzaW5nKS5cbiAgICovXG4gIHB1YmxpYyBzZXRPdGhlckNoYW5nZShvdGhlck5hbWU6IHN0cmluZywgY2hhbmdlOiBQcm9wZXJ0eURpZmZlcmVuY2U8YW55Pikge1xuICAgIHRoaXMub3RoZXJEaWZmc1tvdGhlck5hbWVdID0gY2hhbmdlO1xuICB9XG5cbiAgcHVibGljIGdldCBjaGFuZ2VJbXBhY3QoKTogUmVzb3VyY2VJbXBhY3Qge1xuICAgIGlmICh0aGlzLmlzSW1wb3J0KSB7XG4gICAgICByZXR1cm4gUmVzb3VyY2VJbXBhY3QuV0lMTF9JTVBPUlQ7XG4gICAgfVxuICAgIC8vIENoZWNrIHRoZSBUeXBlIGZpcnN0XG4gICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlICE9PSB0aGlzLnJlc291cmNlVHlwZXMubmV3VHlwZSkge1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlcy5vbGRUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIFJlc291cmNlSW1wYWN0LldJTExfQ1JFQVRFO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVzb3VyY2VUeXBlcy5uZXdUeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2xkVmFsdWUhLkRlbGV0aW9uUG9saWN5ID09PSAnUmV0YWluJ1xuICAgICAgICAgID8gUmVzb3VyY2VJbXBhY3QuV0lMTF9PUlBIQU5cbiAgICAgICAgICA6IFJlc291cmNlSW1wYWN0LldJTExfREVTVFJPWTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZXNvdXJjZUltcGFjdC5XSUxMX1JFUExBQ0U7XG4gICAgfVxuXG4gICAgLy8gQmFzZSBpbXBhY3QgKGJlZm9yZSB3ZSBtaXggaW4gdGhlIHdvcnN0IG9mIHRoZSBwcm9wZXJ0eSBpbXBhY3RzKTtcbiAgICAvLyBXSUxMX1VQREFURSBpZiB3ZSBoYXZlIFwib3RoZXJcIiBjaGFuZ2VzLCBOT19DSEFOR0UgaWYgdGhlcmUgYXJlIG5vIFwib3RoZXJcIiBjaGFuZ2VzLlxuICAgIGNvbnN0IGJhc2VJbXBhY3QgPSBPYmplY3Qua2V5cyh0aGlzLm90aGVyQ2hhbmdlcykubGVuZ3RoID4gMCA/IFJlc291cmNlSW1wYWN0LldJTExfVVBEQVRFIDogUmVzb3VyY2VJbXBhY3QuTk9fQ0hBTkdFO1xuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wcm9wZXJ0eURpZmZzKVxuICAgICAgLm1hcChlbHQgPT4gZWx0LmNoYW5nZUltcGFjdClcbiAgICAgIC5yZWR1Y2Uod29yc3RJbXBhY3QsIGJhc2VJbXBhY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvdW50IG9mIGFjdHVhbCBkaWZmZXJlbmNlcyAobm90IG9mIGVsZW1lbnRzKVxuICAgKi9cbiAgcHVibGljIGdldCBkaWZmZXJlbmNlQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnByb3BlcnR5VXBkYXRlcykubGVuZ3RoXG4gICAgICArIE9iamVjdC52YWx1ZXModGhpcy5vdGhlckNoYW5nZXMpLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2UgYSBjYWxsYmFjayBmb3IgZWFjaCBhY3R1YWwgZGlmZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIGZvckVhY2hEaWZmZXJlbmNlKGNiOiAodHlwZTogJ1Byb3BlcnR5JyB8ICdPdGhlcicsIG5hbWU6IHN0cmluZywgdmFsdWU6IERpZmZlcmVuY2U8YW55PiB8IFByb3BlcnR5RGlmZmVyZW5jZTxhbnk+KSA9PiBhbnkpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLnByb3BlcnR5VXBkYXRlcykuc29ydCgpKSB7XG4gICAgICBjYignUHJvcGVydHknLCBrZXksIHRoaXMucHJvcGVydHlVcGRhdGVzW2tleV0pO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzLm90aGVyQ2hhbmdlcykuc29ydCgpKSB7XG4gICAgICBjYignT3RoZXInLCBrZXksIHRoaXMub3RoZXJEaWZmc1trZXldKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvcGVydHlEaWZmZXJlbmNlPFQ+KGRpZmY6IERpZmZlcmVuY2U8VD4pOiBkaWZmIGlzIFByb3BlcnR5RGlmZmVyZW5jZTxUPiB7XG4gIHJldHVybiAoZGlmZiBhcyBQcm9wZXJ0eURpZmZlcmVuY2U8VD4pLmNoYW5nZUltcGFjdCAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEZpbHRlciBhIG1hcCBvZiBJRGlmZmVyZW5jZXMgZG93biB0byBvbmx5IHJldGFpbiB0aGUgYWN0dWFsIGNoYW5nZXNcbiAqL1xuZnVuY3Rpb24gb25seUNoYW5nZXM8ViwgVCBleHRlbmRzIElEaWZmZXJlbmNlPFY+Pih4czogeyBba2V5OiBzdHJpbmddOiBUIH0pOiB7IFtrZXk6IHN0cmluZ106IFQgfSB7XG4gIGNvbnN0IHJldDogeyBba2V5OiBzdHJpbmddOiBUIH0gPSB7fTtcbiAgZm9yIChjb25zdCBba2V5LCBkaWZmXSBvZiBPYmplY3QuZW50cmllcyh4cykpIHtcbiAgICBpZiAoZGlmZi5pc0RpZmZlcmVudCkge1xuICAgICAgcmV0W2tleV0gPSBkaWZmO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19
|
package/lib/diff/util.js
CHANGED
|
@@ -107,13 +107,16 @@ function dependsOnEqual(lvalue, rvalue) {
|
|
|
107
107
|
if (lvalue.length !== rvalue.length) {
|
|
108
108
|
return false;
|
|
109
109
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
// Match each element of lvalue with a distinct element of rvalue. Elements are
|
|
111
|
+
// consumed as they are matched, so duplicates are compared by multiplicity.
|
|
112
|
+
// Neither input is mutated: only the local copy of indices is.
|
|
113
|
+
const unmatched = rvalue.map((_, i) => i);
|
|
114
|
+
for (const l of lvalue) {
|
|
115
|
+
const at = unmatched.findIndex((i) => deepEqual(l, rvalue[i]));
|
|
116
|
+
if (at === -1) {
|
|
117
|
+
return false;
|
|
116
118
|
}
|
|
119
|
+
unmatched.splice(at, 1);
|
|
117
120
|
}
|
|
118
121
|
return true;
|
|
119
122
|
}
|
|
@@ -196,4 +199,4 @@ function database() {
|
|
|
196
199
|
function loadResourceModel(type) {
|
|
197
200
|
return database().lookup('resource', 'cloudFormationType', 'equals', type)[0];
|
|
198
201
|
}
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFrQkEsOEJBOERDO0FBa0RELDhDQWlCQztBQVVELDBCQU1DO0FBVUQsNERBRUM7QUE4QkQsOENBRUM7QUEvTUQsZ0VBQW1FO0FBR25FOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLE1BQVcsRUFBRSxNQUFXO0lBQ2hELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELGtFQUFrRTtJQUNsRSxJQUFJLENBQUMsQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxDQUFDO1FBQzVELENBQUMsT0FBTyxNQUFNLEtBQUssU0FBUyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCwyREFBMkQ7SUFDM0QsMENBQTBDO0lBQzFDLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDO1FBQzFELGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLE9BQU8sTUFBTSxFQUFFLENBQUM7UUFDcEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNwRCxPQUFPLEtBQUssQ0FBQztJ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QUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZEF3c1NlcnZpY2VTcGVjU3luYyB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1zZXJ2aWNlLXNwZWMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSwgU3BlY0RhdGFiYXNlIH0gZnJvbSAnQGF3cy1jZGsvc2VydmljZS1zcGVjLXR5cGVzJztcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIGRlZXBseS4gVGhlIGZ1bmN0aW9uIGhhbmRsZXMgYXJndW1lbnRzIHRoYXQgYXJlXG4gKiArbnVsbCssICt1bmRlZmluZWQrLCBhcnJheXMgYW5kIG9iamVjdHMuIEZvciBvYmplY3RzLCB0aGUgZnVuY3Rpb24gd2lsbCBub3QgdGFrZSB0aGVcbiAqIG9iamVjdCBwcm90b3R5cGUgaW50byBhY2NvdW50IGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY29tcGFyaXNvbiwgb25seSB0aGUgdmFsdWVzIG9mXG4gKiBwcm9wZXJ0aWVzIHJlcG9ydGVkIGJ5ICtPYmplY3Qua2V5cysuXG4gKlxuICogSWYgYm90aCBvcGVyYW5kcyBjYW4gYmUgcGFyc2VkIHRvIGVxdWl2YWxlbnQgbnVtYmVycywgd2lsbCByZXR1cm4gdHJ1ZS5cbiAqIFRoaXMgbWFrZXMgZGlmZiBjb25zaXN0ZW50IHdpdGggQ2xvdWRGb3JtYXRpb24sIHdoZXJlIGEgbnVtZXJpYyAxMCBhbmQgYSBsaXRlcmFsIFwiMTBcIlxuICogYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0gbHZhbHVlIC0gdGhlIGxlZnQgb3BlcmFuZCBvZiB0aGUgZXF1YWxpdHkgY29tcGFyaXNvbi5cbiAqIEBwYXJhbSBydmFsdWUgLSB0aGUgcmlnaHQgb3BlcmFuZCBvZiB0aGUgZXF1YWxpdHkgY29tcGFyaXNvbi5cbiAqXG4gKiBAcmV0dXJucyArdHJ1ZSsgaWYgYm90aCArbHZhbHVlKyBhbmQgK3J2YWx1ZSsgYXJlIGVxdWl2YWxlbnQgdG8gZWFjaCBvdGhlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFcXVhbChsdmFsdWU6IGFueSwgcnZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKGx2YWx1ZSA9PT0gcnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gQ2xvdWRGb3JtYXRpb24gYWxsb3dzIHBhc3Npbmcgc3RyaW5ncyBpbnRvIGJvb2xlYW4tdHlwZWQgZmllbGRzXG4gIGlmICgoKHR5cGVvZiBsdmFsdWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBydmFsdWUgPT09ICdib29sZWFuJykgfHxcbiAgICAgICh0eXBlb2YgbHZhbHVlID09PSAnYm9vbGVhbicgJiYgdHlwZW9mIHJ2YWx1ZSA9PT0gJ3N0cmluZycpKSAmJlxuICAgICAgbHZhbHVlLnRvU3RyaW5nKCkgPT09IHJ2YWx1ZS50b1N0cmluZygpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gYWxsb3dzIGEgbnVtZXJpYyAxMCBhbmQgYSBsaXRlcmFsIFwiMTBcIiB0byBiZSBlcXVpdmFsZW50O1xuICAvLyB0aGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBDbG91ZEZvcm1hdGlvbi5cbiAgaWYgKCh0eXBlb2YgbHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcnZhbHVlID09PSAnc3RyaW5nJykgJiZcbiAgICAgIHNhZmVQYXJzZUZsb2F0KGx2YWx1ZSkgPT09IHNhZmVQYXJzZUZsb2F0KHJ2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGx2YWx1ZSAhPT0gdHlwZW9mIHJ2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShsdmFsdWUpICE9PSBBcnJheS5pc0FycmF5KHJ2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkobHZhbHVlKSAvKiAmJiBBcnJheS5pc0FycmF5KHJ2YWx1ZSkgKi8pIHtcbiAgICBpZiAobHZhbHVlLmxlbmd0aCAhPT0gcnZhbHVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMCA7IGkgPCBsdmFsdWUubGVuZ3RoIDsgaSsrKSB7XG4gICAgICBpZiAoIWRlZXBFcXVhbChsdmFsdWVbaV0sIHJ2YWx1ZVtpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGx2YWx1ZSA9PT0gJ29iamVjdCcgLyogJiYgdHlwZW9mIHJ2YWx1ZSA9PT0gJ29iamVjdCcgKi8pIHtcbiAgICBpZiAobHZhbHVlID09PSBudWxsIHx8IHJ2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgYm90aCB3ZXJlIG51bGwsIHRoZXknZCBoYXZlIGJlZW4gPT09XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhsdmFsdWUpO1xuICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMocnZhbHVlKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKCFydmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnRGVwZW5kc09uJykge1xuICAgICAgICBpZiAoIWRlcGVuZHNPbkVxdWFsKGx2YWx1ZVtrZXldLCBydmFsdWVba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgZGlmZmVyZW5jZXMgb3RoZXIgdGhhbiBgRGVwZW5kc09uYFxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghZGVlcEVxdWFsKGx2YWx1ZVtrZXldLCBydmFsdWVba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBOZWl0aGVyIG9iamVjdCwgbm9yIGFycmF5OiBJIGRlZHVjZSB0aGlzIGlzIHByaW1pdGl2ZSB0eXBlXG4gIC8vIFByaW1pdGl2ZSB0eXBlIGFuZCBub3QgPT09LCBzbyBJIGRlZHVjZSBub3QgZGVlcEVxdWFsXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYXJndW1lbnRzIHRvIERlcGVuZHNPbiBmb3IgZXF1YWxpdHkuXG4gKlxuICogQHBhcmFtIGx2YWx1ZSAtIHRoZSBsZWZ0IG9wZXJhbmQgb2YgdGhlIGVxdWFsaXR5IGNvbXBhcmlzb24uXG4gKiBAcGFyYW0gcnZhbHVlIC0gdGhlIHJpZ2h0IG9wZXJhbmQgb2YgdGhlIGVxdWFsaXR5IGNvbXBhcmlzb24uXG4gKlxuICogQHJldHVybnMgK3RydWUrIGlmIGJvdGggK2x2YWx1ZSsgYW5kICtydmFsdWUrIGFyZSBlcXVpdmFsZW50IHRvIGVhY2ggb3RoZXIuXG4gKi9cbmZ1bmN0aW9uIGRlcGVuZHNPbkVxdWFsKGx2YWx1ZTogYW55LCBydmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBhbGxvd3MgWydWYWx1ZSddIGFuZCAnVmFsdWUnIHRvIGJlIGVxdWFsXG4gIGlmIChBcnJheS5pc0FycmF5KGx2YWx1ZSkgIT09IEFycmF5LmlzQXJyYXkocnZhbHVlKSkge1xuICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuaXNBcnJheShsdmFsdWUpID8gbHZhbHVlIDogcnZhbHVlO1xuICAgIGNvbnN0IG5vbkFycmF5ID0gQXJyYXkuaXNBcnJheShsdmFsdWUpID8gcnZhbHVlIDogbHZhbHVlO1xuXG4gICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMSAmJiBkZWVwRXF1YWwoYXJyYXlbMF0sIG5vbkFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGFsbG93cyBhcnJheXMgcGFzc2VkIHRvIERlcGVuZHNPbiB0byBiZSBlcXVpdmFsZW50IGlycmVzcGVjdGl2ZSBvZiBlbGVtZW50IG9yZGVyXG4gIGlmIChBcnJheS5pc0FycmF5KGx2YWx1ZSkgJiYgQXJyYXkuaXNBcnJheShydmFsdWUpKSB7XG4gICAgaWYgKGx2YWx1ZS5sZW5ndGggIT09IHJ2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDAgOyBpIDwgbHZhbHVlLmxlbmd0aCA7IGkrKykge1xuICAgICAgZm9yIChsZXQgaiA9IDAgOyBqIDwgbHZhbHVlLmxlbmd0aCA7IGorKykge1xuICAgICAgICBpZiAoKCFkZWVwRXF1YWwobHZhbHVlW2ldLCBydmFsdWVbal0pKSAmJiAoaiA9PT0gbHZhbHVlLmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBQcm9kdWNlIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBtYXBzLCBhcyBhIG1hcCwgdXNpbmcgYSBzcGVjaWZpZWQgZGlmZiBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gb2xkVmFsdWUgIC0gdGhlIG9sZCBtYXAuXG4gKiBAcGFyYW0gbmV3VmFsdWUgIC0gdGhlIG5ldyBtYXAuXG4gKiBAcGFyYW0gZWxlbWVudERpZmYgLSB0aGUgZGlmZiBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyBhIG1hcCByZXByZXNlbnRpbmcgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gK29sZFZhbHVlKyBhbmQgK25ld1ZhbHVlKy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZmZLZXllZEVudGl0aWVzPFQ+KFxuICBvbGRWYWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCxcbiAgbmV3VmFsdWU6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQsXG4gIGVsZW1lbnREaWZmOiAob2xkRWxlbWVudDogYW55LCBuZXdFbGVtZW50OiBhbnksIGtleTogc3RyaW5nKSA9PiBUKTogeyBbbmFtZTogc3RyaW5nXTogVCB9IHtcbiAgY29uc3QgcmVzdWx0OiB7IFtuYW1lOiBzdHJpbmddOiBUIH0gPSB7fTtcbiAgZm9yIChjb25zdCBsb2dpY2FsSWQgb2YgdW5pb25PZihPYmplY3Qua2V5cyhvbGRWYWx1ZSB8fCB7fSksIE9iamVjdC5rZXlzKG5ld1ZhbHVlIHx8IHt9KSkpIHtcbiAgICBjb25zdCBvbGRFbGVtZW50ID0gb2xkVmFsdWUgJiYgb2xkVmFsdWVbbG9naWNhbElkXTtcbiAgICBjb25zdCBuZXdFbGVtZW50ID0gbmV3VmFsdWUgJiYgbmV3VmFsdWVbbG9naWNhbElkXTtcblxuICAgIGlmIChvbGRFbGVtZW50ID09PSB1bmRlZmluZWQgJiYgbmV3RWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBTaG91bGRuJ3QgaGFwcGVuIGluIHJlYWxpdHksIGJ1dCBtYXkgaGFwcGVuIGluIHRlc3RzLiBTa2lwLlxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcmVzdWx0W2xvZ2ljYWxJZF0gPSBlbGVtZW50RGlmZihvbGRFbGVtZW50LCBuZXdFbGVtZW50LCBsb2dpY2FsSWQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIHVuaW9uIG9mIHR3byBzZXRzIG9mIHN0cmluZ3MuXG4gKlxuICogQHBhcmFtIGx2IC0gdGhlIGxlZnQgc2V0IG9mIHN0cmluZ3MuXG4gKiBAcGFyYW0gcnYgLSB0aGUgcmlnaHQgc2V0IG9mIHN0cmluZ3MuXG4gKlxuICogQHJldHVybnMgYSBuZXcgYXJyYXkgY29udGFpbmluZyBhbGwgZWxlbWVidHMgZnJvbSArbHYrIGFuZCArcnYrLCB3aXRoIG5vIGR1cGxpY2F0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmlvbk9mKGx2OiBzdHJpbmdbXSB8IFNldDxzdHJpbmc+LCBydjogc3RyaW5nW10gfCBTZXQ8c3RyaW5nPik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IFNldChsdik7XG4gIGZvciAoY29uc3QgdiBvZiBydikge1xuICAgIHJlc3VsdC5hZGQodik7XG4gIH1cbiAgcmV0dXJuIG5ldyBBcnJheSguLi5yZXN1bHQpO1xufVxuXG4vKipcbiAqIEdldFN0YWNrVGVtcGxhdGUgZmxhdHRlbnMgYW55IGNvZGVwb2ludCBncmVhdGVyIHRoYW4gXCJcXHU3ZlwiIHRvIFwiP1wiLiBUaGlzIGlzXG4gKiB0cnVlIGV2ZW4gZm9yIGNvZGVwb2ludHMgaW4gdGhlIHN1cHBsZW1lbnRhbCBwbGFuZXMgd2hpY2ggYXJlIHJlcHJlc2VudGVkXG4gKiBpbiBKUyBhcyBzdXJyb2dhdGUgcGFpcnMsIGFsbCB0aGUgd2F5IHVwIHRvIFwiXFx1ezEwZmZmZn1cIi5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHNhbWUgbWFuZ2xpbmcgaW4gb3JkZXIgdG8gcHJvdmlkZSBkaWFnbm9zdGljXG4gKiBpbmZvcm1hdGlvbiBpbiBgY2RrIGRpZmZgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFuZ2xlTGlrZUNsb3VkRm9ybWF0aW9uKHBheWxvYWQ6IHN0cmluZykge1xuICByZXR1cm4gcGF5bG9hZC5yZXBsYWNlKC9bXFx1ezgwfS1cXHV7MTBmZmZmfV0vZ3UsICc/Jyk7XG59XG5cbi8qKlxuICogQSBwYXJzZUZsb2F0IGltcGxlbWVudGF0aW9uIHRoYXQgZG9lcyB0aGUgcmlnaHQgdGhpbmcgZm9yXG4gKiBzdHJpbmdzIGxpa2UgJzAuMC4wJ1xuICogKGZvciB3aGljaCBKYXZhU2NyaXB0J3MgcGFyc2VGbG9hdCgpIHJldHVybnMgMCkuXG4gKiBXZSByZXR1cm4gTmFOIGZvciBhbGwgb2YgdGhlc2Ugc3RyaW5ncyB0aGF0IGRvIG5vdCByZXByZXNlbnQgbnVtYmVycyxcbiAqIGFuZCBzbyBjb21wYXJpbmcgdGhlbSBmYWlscyxcbiAqIGFuZCBkb2Vzbid0IHNob3J0LWNpcmN1aXQgdGhlIGRpZmYgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIHNhZmVQYXJzZUZsb2F0KHN0cjogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIE51bWJlcihzdHIpO1xufVxuXG4vKipcbiAqIExhemlseSBsb2FkIHRoZSBzZXJ2aWNlIHNwZWMgZGF0YWJhc2UgYW5kIGNhY2hlIHRoZSBsb2FkZWQgZGJcbiAqL1xubGV0IERBVEFCQVNFOiBTcGVjRGF0YWJhc2UgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBkYXRhYmFzZSgpOiBTcGVjRGF0YWJhc2Uge1xuICBpZiAoIURBVEFCQVNFKSB7XG4gICAgREFUQUJBU0UgPSBsb2FkQXdzU2VydmljZVNwZWNTeW5jKCk7XG4gIH1cbiAgcmV0dXJuIERBVEFCQVNFO1xufVxuXG4vKipcbiAqIExvYWQgYSBSZXNvdXJjZSBtb2RlbCBmcm9tIHRoZSBTZXJ2aWNlIFNwZWMgRGF0YWJhc2VcbiAqXG4gKiBUaGUgZGF0YWJhc2UgaXMgbG9hZGVkIGxhemlseSBhbmQgY2FjaGVkIGFjcm9zcyBtdWx0aXBsZSBjYWxscyB0byBgbG9hZFJlc291cmNlTW9kZWxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFJlc291cmNlTW9kZWwodHlwZTogc3RyaW5nKTogUmVzb3VyY2UgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZGF0YWJhc2UoKS5sb29rdXAoJ3Jlc291cmNlJywgJ2Nsb3VkRm9ybWF0aW9uVHlwZScsICdlcXVhbHMnLCB0eXBlKVswXTtcbn1cbiJdfQ==
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFrQkEsOEJBOERDO0FBcURELDhDQWlCQztBQVVELDBCQU1DO0FBVUQsNERBRUM7QUE4QkQsOENBRUM7QUFsTkQsZ0VBQW1FO0FBR25FOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLE1BQVcsRUFBRSxNQUFXO0lBQ2hELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELGtFQUFrRTtJQUNsRSxJQUFJLENBQUMsQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLEtBQUssU0FBUyxDQUFDO1FBQzVELENBQUMsT0FBTyxNQUFNLEtBQUssU0FBUyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQzVELE1BQU0sQ0FBQyxRQUFRLEVBQUUsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCwyREFBMkQ7SUFDM0QsMENBQTBDO0lBQzFDLElBQUksQ0FBQyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDO1FBQzFELGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLE9BQU8sTUFBTSxFQUFFLENBQUM7UUFDcEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNwRCxPQUFPLEtBQUssQ0FBQztJ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RztBQUNILFNBQWdCLGlCQUFpQixDQUFDLElBQVk7SUFDNUMsT0FBTyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbG9hZEF3c1NlcnZpY2VTcGVjU3luYyB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1zZXJ2aWNlLXNwZWMnO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZSwgU3BlY0RhdGFiYXNlIH0gZnJvbSAnQGF3cy1jZGsvc2VydmljZS1zcGVjLXR5cGVzJztcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gb2JqZWN0cyBmb3IgZXF1YWxpdHksIGRlZXBseS4gVGhlIGZ1bmN0aW9uIGhhbmRsZXMgYXJndW1lbnRzIHRoYXQgYXJlXG4gKiArbnVsbCssICt1bmRlZmluZWQrLCBhcnJheXMgYW5kIG9iamVjdHMuIEZvciBvYmplY3RzLCB0aGUgZnVuY3Rpb24gd2lsbCBub3QgdGFrZSB0aGVcbiAqIG9iamVjdCBwcm90b3R5cGUgaW50byBhY2NvdW50IGZvciB0aGUgcHVycG9zZSBvZiB0aGUgY29tcGFyaXNvbiwgb25seSB0aGUgdmFsdWVzIG9mXG4gKiBwcm9wZXJ0aWVzIHJlcG9ydGVkIGJ5ICtPYmplY3Qua2V5cysuXG4gKlxuICogSWYgYm90aCBvcGVyYW5kcyBjYW4gYmUgcGFyc2VkIHRvIGVxdWl2YWxlbnQgbnVtYmVycywgd2lsbCByZXR1cm4gdHJ1ZS5cbiAqIFRoaXMgbWFrZXMgZGlmZiBjb25zaXN0ZW50IHdpdGggQ2xvdWRGb3JtYXRpb24sIHdoZXJlIGEgbnVtZXJpYyAxMCBhbmQgYSBsaXRlcmFsIFwiMTBcIlxuICogYXJlIGNvbnNpZGVyZWQgZXF1aXZhbGVudC5cbiAqXG4gKiBAcGFyYW0gbHZhbHVlIC0gdGhlIGxlZnQgb3BlcmFuZCBvZiB0aGUgZXF1YWxpdHkgY29tcGFyaXNvbi5cbiAqIEBwYXJhbSBydmFsdWUgLSB0aGUgcmlnaHQgb3BlcmFuZCBvZiB0aGUgZXF1YWxpdHkgY29tcGFyaXNvbi5cbiAqXG4gKiBAcmV0dXJucyArdHJ1ZSsgaWYgYm90aCArbHZhbHVlKyBhbmQgK3J2YWx1ZSsgYXJlIGVxdWl2YWxlbnQgdG8gZWFjaCBvdGhlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFcXVhbChsdmFsdWU6IGFueSwgcnZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKGx2YWx1ZSA9PT0gcnZhbHVlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gQ2xvdWRGb3JtYXRpb24gYWxsb3dzIHBhc3Npbmcgc3RyaW5ncyBpbnRvIGJvb2xlYW4tdHlwZWQgZmllbGRzXG4gIGlmICgoKHR5cGVvZiBsdmFsdWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBydmFsdWUgPT09ICdib29sZWFuJykgfHxcbiAgICAgICh0eXBlb2YgbHZhbHVlID09PSAnYm9vbGVhbicgJiYgdHlwZW9mIHJ2YWx1ZSA9PT0gJ3N0cmluZycpKSAmJlxuICAgICAgbHZhbHVlLnRvU3RyaW5nKCkgPT09IHJ2YWx1ZS50b1N0cmluZygpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8gYWxsb3dzIGEgbnVtZXJpYyAxMCBhbmQgYSBsaXRlcmFsIFwiMTBcIiB0byBiZSBlcXVpdmFsZW50O1xuICAvLyB0aGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBDbG91ZEZvcm1hdGlvbi5cbiAgaWYgKCh0eXBlb2YgbHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcnZhbHVlID09PSAnc3RyaW5nJykgJiZcbiAgICAgIHNhZmVQYXJzZUZsb2F0KGx2YWx1ZSkgPT09IHNhZmVQYXJzZUZsb2F0KHJ2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGx2YWx1ZSAhPT0gdHlwZW9mIHJ2YWx1ZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShsdmFsdWUpICE9PSBBcnJheS5pc0FycmF5KHJ2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkobHZhbHVlKSAvKiAmJiBBcnJheS5pc0FycmF5KHJ2YWx1ZSkgKi8pIHtcbiAgICBpZiAobHZhbHVlLmxlbmd0aCAhPT0gcnZhbHVlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMCA7IGkgPCBsdmFsdWUubGVuZ3RoIDsgaSsrKSB7XG4gICAgICBpZiAoIWRlZXBFcXVhbChsdmFsdWVbaV0sIHJ2YWx1ZVtpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGx2YWx1ZSA9PT0gJ29iamVjdCcgLyogJiYgdHlwZW9mIHJ2YWx1ZSA9PT0gJ29iamVjdCcgKi8pIHtcbiAgICBpZiAobHZhbHVlID09PSBudWxsIHx8IHJ2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgYm90aCB3ZXJlIG51bGwsIHRoZXknZCBoYXZlIGJlZW4gPT09XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhsdmFsdWUpO1xuICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMocnZhbHVlKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgaWYgKCFydmFsdWUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnRGVwZW5kc09uJykge1xuICAgICAgICBpZiAoIWRlcGVuZHNPbkVxdWFsKGx2YWx1ZVtrZXldLCBydmFsdWVba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2hlY2sgZGlmZmVyZW5jZXMgb3RoZXIgdGhhbiBgRGVwZW5kc09uYFxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghZGVlcEVxdWFsKGx2YWx1ZVtrZXldLCBydmFsdWVba2V5XSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBOZWl0aGVyIG9iamVjdCwgbm9yIGFycmF5OiBJIGRlZHVjZSB0aGlzIGlzIHByaW1pdGl2ZSB0eXBlXG4gIC8vIFByaW1pdGl2ZSB0eXBlIGFuZCBub3QgPT09LCBzbyBJIGRlZHVjZSBub3QgZGVlcEVxdWFsXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYXJndW1lbnRzIHRvIERlcGVuZHNPbiBmb3IgZXF1YWxpdHkuXG4gKlxuICogQHBhcmFtIGx2YWx1ZSAtIHRoZSBsZWZ0IG9wZXJhbmQgb2YgdGhlIGVxdWFsaXR5IGNvbXBhcmlzb24uXG4gKiBAcGFyYW0gcnZhbHVlIC0gdGhlIHJpZ2h0IG9wZXJhbmQgb2YgdGhlIGVxdWFsaXR5IGNvbXBhcmlzb24uXG4gKlxuICogQHJldHVybnMgK3RydWUrIGlmIGJvdGggK2x2YWx1ZSsgYW5kICtydmFsdWUrIGFyZSBlcXVpdmFsZW50IHRvIGVhY2ggb3RoZXIuXG4gKi9cbmZ1bmN0aW9uIGRlcGVuZHNPbkVxdWFsKGx2YWx1ZTogYW55LCBydmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAvLyBhbGxvd3MgWydWYWx1ZSddIGFuZCAnVmFsdWUnIHRvIGJlIGVxdWFsXG4gIGlmIChBcnJheS5pc0FycmF5KGx2YWx1ZSkgIT09IEFycmF5LmlzQXJyYXkocnZhbHVlKSkge1xuICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuaXNBcnJheShsdmFsdWUpID8gbHZhbHVlIDogcnZhbHVlO1xuICAgIGNvbnN0IG5vbkFycmF5ID0gQXJyYXkuaXNBcnJheShsdmFsdWUpID8gcnZhbHVlIDogbHZhbHVlO1xuXG4gICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMSAmJiBkZWVwRXF1YWwoYXJyYXlbMF0sIG5vbkFycmF5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGFsbG93cyBhcnJheXMgcGFzc2VkIHRvIERlcGVuZHNPbiB0byBiZSBlcXVpdmFsZW50IGlycmVzcGVjdGl2ZSBvZiBlbGVtZW50IG9yZGVyXG4gIGlmIChBcnJheS5pc0FycmF5KGx2YWx1ZSkgJiYgQXJyYXkuaXNBcnJheShydmFsdWUpKSB7XG4gICAgaWYgKGx2YWx1ZS5sZW5ndGggIT09IHJ2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gTWF0Y2ggZWFjaCBlbGVtZW50IG9mIGx2YWx1ZSB3aXRoIGEgZGlzdGluY3QgZWxlbWVudCBvZiBydmFsdWUuIEVsZW1lbnRzIGFyZVxuICAgIC8vIGNvbnN1bWVkIGFzIHRoZXkgYXJlIG1hdGNoZWQsIHNvIGR1cGxpY2F0ZXMgYXJlIGNvbXBhcmVkIGJ5IG11bHRpcGxpY2l0eS5cbiAgICAvLyBOZWl0aGVyIGlucHV0IGlzIG11dGF0ZWQ6IG9ubHkgdGhlIGxvY2FsIGNvcHkgb2YgaW5kaWNlcyBpcy5cbiAgICBjb25zdCB1bm1hdGNoZWQgPSBydmFsdWUubWFwKChfLCBpKSA9PiBpKTtcbiAgICBmb3IgKGNvbnN0IGwgb2YgbHZhbHVlKSB7XG4gICAgICBjb25zdCBhdCA9IHVubWF0Y2hlZC5maW5kSW5kZXgoKGkpID0+IGRlZXBFcXVhbChsLCBydmFsdWVbaV0pKTtcbiAgICAgIGlmIChhdCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdW5tYXRjaGVkLnNwbGljZShhdCwgMSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFByb2R1Y2UgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIG1hcHMsIGFzIGEgbWFwLCB1c2luZyBhIHNwZWNpZmllZCBkaWZmIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBvbGRWYWx1ZSAgLSB0aGUgb2xkIG1hcC5cbiAqIEBwYXJhbSBuZXdWYWx1ZSAgLSB0aGUgbmV3IG1hcC5cbiAqIEBwYXJhbSBlbGVtZW50RGlmZiAtIHRoZSBkaWZmIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIGEgbWFwIHJlcHJlc2VudGluZyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiArb2xkVmFsdWUrIGFuZCArbmV3VmFsdWUrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZktleWVkRW50aXRpZXM8VD4oXG4gIG9sZFZhbHVlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkLFxuICBuZXdWYWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCxcbiAgZWxlbWVudERpZmY6IChvbGRFbGVtZW50OiBhbnksIG5ld0VsZW1lbnQ6IGFueSwga2V5OiBzdHJpbmcpID0+IFQpOiB7IFtuYW1lOiBzdHJpbmddOiBUIH0ge1xuICBjb25zdCByZXN1bHQ6IHsgW25hbWU6IHN0cmluZ106IFQgfSA9IHt9O1xuICBmb3IgKGNvbnN0IGxvZ2ljYWxJZCBvZiB1bmlvbk9mKE9iamVjdC5rZXlzKG9sZFZhbHVlIHx8IHt9KSwgT2JqZWN0LmtleXMobmV3VmFsdWUgfHwge30pKSkge1xuICAgIGNvbnN0IG9sZEVsZW1lbnQgPSBvbGRWYWx1ZSAmJiBvbGRWYWx1ZVtsb2dpY2FsSWRdO1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBuZXdWYWx1ZSAmJiBuZXdWYWx1ZVtsb2dpY2FsSWRdO1xuXG4gICAgaWYgKG9sZEVsZW1lbnQgPT09IHVuZGVmaW5lZCAmJiBuZXdFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFNob3VsZG4ndCBoYXBwZW4gaW4gcmVhbGl0eSwgYnV0IG1heSBoYXBwZW4gaW4gdGVzdHMuIFNraXAuXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXN1bHRbbG9naWNhbElkXSA9IGVsZW1lbnREaWZmKG9sZEVsZW1lbnQsIG5ld0VsZW1lbnQsIGxvZ2ljYWxJZCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgdW5pb24gb2YgdHdvIHNldHMgb2Ygc3RyaW5ncy5cbiAqXG4gKiBAcGFyYW0gbHYgLSB0aGUgbGVmdCBzZXQgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBydiAtIHRoZSByaWdodCBzZXQgb2Ygc3RyaW5ncy5cbiAqXG4gKiBAcmV0dXJucyBhIG5ldyBhcnJheSBjb250YWluaW5nIGFsbCBlbGVtZWJ0cyBmcm9tICtsdisgYW5kICtydissIHdpdGggbm8gZHVwbGljYXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW9uT2YobHY6IHN0cmluZ1tdIHwgU2V0PHN0cmluZz4sIHJ2OiBzdHJpbmdbXSB8IFNldDxzdHJpbmc+KTogc3RyaW5nW10ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgU2V0KGx2KTtcbiAgZm9yIChjb25zdCB2IG9mIHJ2KSB7XG4gICAgcmVzdWx0LmFkZCh2KTtcbiAgfVxuICByZXR1cm4gbmV3IEFycmF5KC4uLnJlc3VsdCk7XG59XG5cbi8qKlxuICogR2V0U3RhY2tUZW1wbGF0ZSBmbGF0dGVucyBhbnkgY29kZXBvaW50IGdyZWF0ZXIgdGhhbiBcIlxcdTdmXCIgdG8gXCI/XCIuIFRoaXMgaXNcbiAqIHRydWUgZXZlbiBmb3IgY29kZXBvaW50cyBpbiB0aGUgc3VwcGxlbWVudGFsIHBsYW5lcyB3aGljaCBhcmUgcmVwcmVzZW50ZWRcbiAqIGluIEpTIGFzIHN1cnJvZ2F0ZSBwYWlycywgYWxsIHRoZSB3YXkgdXAgdG8gXCJcXHV7MTBmZmZmfVwiLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBtYW5nbGluZyBpbiBvcmRlciB0byBwcm92aWRlIGRpYWdub3N0aWNcbiAqIGluZm9ybWF0aW9uIGluIGBjZGsgZGlmZmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYW5nbGVMaWtlQ2xvdWRGb3JtYXRpb24ocGF5bG9hZDogc3RyaW5nKSB7XG4gIHJldHVybiBwYXlsb2FkLnJlcGxhY2UoL1tcXHV7ODB9LVxcdXsxMGZmZmZ9XS9ndSwgJz8nKTtcbn1cblxuLyoqXG4gKiBBIHBhcnNlRmxvYXQgaW1wbGVtZW50YXRpb24gdGhhdCBkb2VzIHRoZSByaWdodCB0aGluZyBmb3JcbiAqIHN0cmluZ3MgbGlrZSAnMC4wLjAnXG4gKiAoZm9yIHdoaWNoIEphdmFTY3JpcHQncyBwYXJzZUZsb2F0KCkgcmV0dXJucyAwKS5cbiAqIFdlIHJldHVybiBOYU4gZm9yIGFsbCBvZiB0aGVzZSBzdHJpbmdzIHRoYXQgZG8gbm90IHJlcHJlc2VudCBudW1iZXJzLFxuICogYW5kIHNvIGNvbXBhcmluZyB0aGVtIGZhaWxzLFxuICogYW5kIGRvZXNuJ3Qgc2hvcnQtY2lyY3VpdCB0aGUgZGlmZiBsb2dpYy5cbiAqL1xuZnVuY3Rpb24gc2FmZVBhcnNlRmxvYXQoc3RyOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gTnVtYmVyKHN0cik7XG59XG5cbi8qKlxuICogTGF6aWx5IGxvYWQgdGhlIHNlcnZpY2Ugc3BlYyBkYXRhYmFzZSBhbmQgY2FjaGUgdGhlIGxvYWRlZCBkYlxuICovXG5sZXQgREFUQUJBU0U6IFNwZWNEYXRhYmFzZSB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIGRhdGFiYXNlKCk6IFNwZWNEYXRhYmFzZSB7XG4gIGlmICghREFUQUJBU0UpIHtcbiAgICBEQVRBQkFTRSA9IGxvYWRBd3NTZXJ2aWNlU3BlY1N5bmMoKTtcbiAgfVxuICByZXR1cm4gREFUQUJBU0U7XG59XG5cbi8qKlxuICogTG9hZCBhIFJlc291cmNlIG1vZGVsIGZyb20gdGhlIFNlcnZpY2UgU3BlYyBEYXRhYmFzZVxuICpcbiAqIFRoZSBkYXRhYmFzZSBpcyBsb2FkZWQgbGF6aWx5IGFuZCBjYWNoZWQgYWNyb3NzIG11bHRpcGxlIGNhbGxzIHRvIGBsb2FkUmVzb3VyY2VNb2RlbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUmVzb3VyY2VNb2RlbCh0eXBlOiBzdHJpbmcpOiBSZXNvdXJjZSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBkYXRhYmFzZSgpLmxvb2t1cCgncmVzb3VyY2UnLCAnY2xvdWRGb3JtYXRpb25UeXBlJywgJ2VxdWFscycsIHR5cGUpWzBdO1xufVxuIl19
|