@aws-cdk/aws-mediapackagev2-alpha 2.261.0-alpha.0 → 2.262.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +89 -2
- package/.jsii.tabl.json.gz +0 -0
- package/lib/channel-policy.js +1 -1
- package/lib/channel.js +5 -5
- package/lib/cloudfront-origin.js +1 -1
- package/lib/endpoint.js +14 -14
- package/lib/group.js +1 -1
- package/lib/mediapackagev2-grants.generated.js +1 -1
- package/lib/origin-endpoint-policy.js +1 -1
- package/package.json +7 -7
package/lib/endpoint.js
CHANGED
|
@@ -226,7 +226,7 @@ var BitrateFilterKey;
|
|
|
226
226
|
class NumericExpression {
|
|
227
227
|
_expression;
|
|
228
228
|
_values;
|
|
229
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.NumericExpression", version: "2.
|
|
229
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.NumericExpression", version: "2.262.0-alpha.0" };
|
|
230
230
|
/**
|
|
231
231
|
* A single numeric value.
|
|
232
232
|
*/
|
|
@@ -258,7 +258,7 @@ exports.NumericExpression = NumericExpression;
|
|
|
258
258
|
class BitrateExpression {
|
|
259
259
|
_expression;
|
|
260
260
|
_values;
|
|
261
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.BitrateExpression", version: "2.
|
|
261
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.BitrateExpression", version: "2.262.0-alpha.0" };
|
|
262
262
|
/**
|
|
263
263
|
* A single bitrate value.
|
|
264
264
|
*/
|
|
@@ -288,7 +288,7 @@ exports.BitrateExpression = BitrateExpression;
|
|
|
288
288
|
*/
|
|
289
289
|
class ManifestFilter {
|
|
290
290
|
filterString;
|
|
291
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.ManifestFilter", version: "2.
|
|
291
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.ManifestFilter", version: "2.262.0-alpha.0" };
|
|
292
292
|
/**
|
|
293
293
|
* Filter by a single bitrate value.
|
|
294
294
|
*/
|
|
@@ -553,7 +553,7 @@ exports.ManifestFilter = ManifestFilter;
|
|
|
553
553
|
* Manifest to add to Origin Endpoint
|
|
554
554
|
*/
|
|
555
555
|
class Manifest {
|
|
556
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.Manifest", version: "2.
|
|
556
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.Manifest", version: "2.262.0-alpha.0" };
|
|
557
557
|
/**
|
|
558
558
|
* Specify a manifest configuration for Low Latency HLS.
|
|
559
559
|
*
|
|
@@ -1114,7 +1114,7 @@ var DrmSettingsKey;
|
|
|
1114
1114
|
* The EXT-X-START tag indicates a preferred point at which to start playing a playlist.
|
|
1115
1115
|
*/
|
|
1116
1116
|
class StartTag {
|
|
1117
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.StartTag", version: "2.
|
|
1117
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.StartTag", version: "2.262.0-alpha.0" };
|
|
1118
1118
|
/**
|
|
1119
1119
|
* Create a start tag with a time offset.
|
|
1120
1120
|
*
|
|
@@ -1352,7 +1352,7 @@ var IsmDrmSystem;
|
|
|
1352
1352
|
* Use `CmafEncryption.speke()`, `TsEncryption.speke()`, or `IsmEncryption.speke()` to create instances.
|
|
1353
1353
|
*/
|
|
1354
1354
|
class EncryptionConfiguration {
|
|
1355
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.EncryptionConfiguration", version: "2.
|
|
1355
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.EncryptionConfiguration", version: "2.262.0-alpha.0" };
|
|
1356
1356
|
}
|
|
1357
1357
|
exports.EncryptionConfiguration = EncryptionConfiguration;
|
|
1358
1358
|
/**
|
|
@@ -1361,7 +1361,7 @@ exports.EncryptionConfiguration = EncryptionConfiguration;
|
|
|
1361
1361
|
* Use `CmafEncryption.speke()` to create an instance.
|
|
1362
1362
|
*/
|
|
1363
1363
|
class CmafEncryption extends EncryptionConfiguration {
|
|
1364
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.CmafEncryption", version: "2.
|
|
1364
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.CmafEncryption", version: "2.262.0-alpha.0" };
|
|
1365
1365
|
/**
|
|
1366
1366
|
* Create a SPEKE-based encryption configuration for CMAF segments.
|
|
1367
1367
|
*/
|
|
@@ -1430,7 +1430,7 @@ exports.CmafEncryption = CmafEncryption;
|
|
|
1430
1430
|
* Use `TsEncryption.speke()` to create an instance.
|
|
1431
1431
|
*/
|
|
1432
1432
|
class TsEncryption extends EncryptionConfiguration {
|
|
1433
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.TsEncryption", version: "2.
|
|
1433
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.TsEncryption", version: "2.262.0-alpha.0" };
|
|
1434
1434
|
/**
|
|
1435
1435
|
* Create a SPEKE-based encryption configuration for TS segments.
|
|
1436
1436
|
*/
|
|
@@ -1497,7 +1497,7 @@ exports.TsEncryption = TsEncryption;
|
|
|
1497
1497
|
* Use `IsmEncryption.speke()` to create an instance.
|
|
1498
1498
|
*/
|
|
1499
1499
|
class IsmEncryption extends EncryptionConfiguration {
|
|
1500
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.IsmEncryption", version: "2.
|
|
1500
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.IsmEncryption", version: "2.262.0-alpha.0" };
|
|
1501
1501
|
/**
|
|
1502
1502
|
* Create a SPEKE-based encryption configuration for ISM segments.
|
|
1503
1503
|
*/
|
|
@@ -1549,7 +1549,7 @@ exports.IsmEncryption = IsmEncryption;
|
|
|
1549
1549
|
* Helper class for creating segment configurations.
|
|
1550
1550
|
*/
|
|
1551
1551
|
class Segment {
|
|
1552
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.Segment", version: "2.
|
|
1552
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.Segment", version: "2.262.0-alpha.0" };
|
|
1553
1553
|
/**
|
|
1554
1554
|
* Create a TS (Transport Stream) segment configuration.
|
|
1555
1555
|
*
|
|
@@ -1856,7 +1856,7 @@ let OriginEndpoint = (() => {
|
|
|
1856
1856
|
OriginEndpoint = _classThis = _classDescriptor.value;
|
|
1857
1857
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
1858
1858
|
}
|
|
1859
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.OriginEndpoint", version: "2.
|
|
1859
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-mediapackagev2-alpha.OriginEndpoint", version: "2.262.0-alpha.0" };
|
|
1860
1860
|
/** Uniquely identifies this class. */
|
|
1861
1861
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-mediapackagev2-alpha.OriginEndpoint';
|
|
1862
1862
|
channelGroupName;
|
|
@@ -2001,11 +2001,11 @@ let OriginEndpoint = (() => {
|
|
|
2001
2001
|
origin.node.addDependency(encryptionCert);
|
|
2002
2002
|
const channelCfn = props.channel.node.defaultChild;
|
|
2003
2003
|
if (channelCfn && core_1.CfnResource.isCfnResource(channelCfn)) {
|
|
2004
|
-
origin.
|
|
2004
|
+
origin.addResourceDependency(channelCfn);
|
|
2005
2005
|
}
|
|
2006
2006
|
const groupCfn = props.channel.channelGroup?.node.defaultChild;
|
|
2007
2007
|
if (groupCfn && core_1.CfnResource.isCfnResource(groupCfn)) {
|
|
2008
|
-
origin.
|
|
2008
|
+
origin.addResourceDependency(groupCfn);
|
|
2009
2009
|
}
|
|
2010
2010
|
this.lowLatencyHlsManifestUrls = this.llHlsManifests.map((_, i) => aws_cdk_lib_1.Fn.select(i, origin.attrLowLatencyHlsManifestUrls));
|
|
2011
2011
|
this.hlsManifestUrls = this.hlsManifests.map((_, i) => aws_cdk_lib_1.Fn.select(i, origin.attrHlsManifestUrls));
|
|
@@ -2051,4 +2051,4 @@ exports.OriginEndpoint = OriginEndpoint;
|
|
|
2051
2051
|
function omitEmptyArray(a) {
|
|
2052
2052
|
return a.length > 0 ? a : undefined;
|
|
2053
2053
|
}
|
|
2054
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbmRwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSw2Q0FBMEc7QUFHMUcsK0RBQTBEO0FBRTFELGlEQUE2RTtBQUM3RSx1RUFBbUU7QUFFbkUsMkNBQXlGO0FBQ3pGLDRFQUE0RDtBQUM1RCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBSTFFLHFFQUFnRTtBQUNoRSxxREFBbUU7QUFFbkU7Ozs7R0FJRztBQUNILElBQVksVUFTWDtBQVRELFdBQVksVUFBVTtJQUNwQix5QkFBeUI7SUFDekIsMkJBQWEsQ0FBQTtJQUNiLHlCQUF5QjtJQUN6QiwyQkFBYSxDQUFBO0lBQ2IscURBQXFEO0lBQ3JELDJCQUFhLENBQUE7SUFDYiwwREFBMEQ7SUFDMUQsMkJBQWEsQ0FBQTtBQUNmLENBQUMsRUFUVyxVQUFVLDBCQUFWLFVBQVUsUUFTckI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxVQU9YO0FBUEQsV0FBWSxVQUFVO0lBQ3BCLGdCQUFnQjtJQUNoQiwyQkFBYSxDQUFBO0lBQ2IsaUJBQWlCO0lBQ2pCLDJCQUFhLENBQUE7SUFDYixVQUFVO0lBQ1YseUJBQVcsQ0FBQTtBQUNiLENBQUMsRUFQVyxVQUFVLDBCQUFWLFVBQVUsUUFPckI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxpQkFTWDtBQVRELFdBQVksaUJBQWlCO0lBQzNCLG1CQUFtQjtJQUNuQiw4QkFBUyxDQUFBO0lBQ1QsWUFBWTtJQUNaLG9DQUFlLENBQUE7SUFDZix1QkFBdUI7SUFDdkIsZ0NBQVcsQ0FBQTtJQUNYLDZCQUE2QjtJQUM3QixnQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQVRXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBUzVCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksYUFPWDtBQVBELFdBQVksYUFBYTtJQUN2Qiw4QkFBOEI7SUFDOUIsa0NBQWlCLENBQUE7SUFDakIsNkJBQTZCO0lBQzdCLGdDQUFlLENBQUE7SUFDZixvQkFBb0I7SUFDcEIsOEJBQWEsQ0FBQTtBQUNmLENBQUMsRUFQVyxhQUFhLDZCQUFiLGFBQWEsUUFPeEI7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxJQUFZLGdCQTBDWDtBQTFDRCxXQUFZLGdCQUFnQjtJQUMxQjs7OztPQUlHO0lBQ0gscURBQStCLENBQUE7SUFDL0I7Ozs7T0FJRztJQUNILDJEQUFxQyxDQUFBO0lBQ3JDOzs7Ozs7OztPQVFHO0lBQ0gseURBQW1DLENBQUE7SUFDbkM7Ozs7Ozs7T0FPRztJQUNILHVEQUFpQyxDQUFBO0lBQ2pDOzs7Ozs7OztPQVFHO0lBQ0gsaURBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQTFDVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQTBDM0I7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxJQUFZLGFBYVg7QUFiRCxXQUFZLGFBQWE7SUFDdkI7Ozs7T0FJRztJQUNILGtEQUErQixDQUFBO0lBQy9COzs7O09BSUc7SUFDSCx3REFBcUMsQ0FBQTtBQUN2QyxDQUFDLEVBYlcsYUFBYSw2QkFBYixhQUFhLFFBYXhCO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsSUFBWSxnQkFtQlg7QUFuQkQsV0FBWSxnQkFBZ0I7SUFDMUI7Ozs7T0FJRztJQUNILG1EQUE2QixDQUFBO0lBQzdCOzs7Ozs7Ozs7O09BVUc7SUFDSCxtREFBNkIsQ0FBQTtBQUMvQixDQUFDLEVBbkJXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBbUIzQjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxpQkFBaUI7SUFpQlY7SUFFQTs7SUFsQmxCOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFTO1FBQzNCLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFhLEVBQUUsR0FBVztRQUM1QyxPQUFPLElBQUksaUJBQWlCLENBQUMsR0FBRyxLQUFLLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUMvRDtJQUVEO0lBQ0UsZ0JBQWdCO0lBQ0EsV0FBbUI7SUFDbkMsZ0JBQWdCO0lBQ0EsT0FBaUI7UUFGakIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFFbkIsWUFBTyxHQUFQLE9BQU8sQ0FBVTtLQUMvQjs7QUFwQk4sOENBcUJDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGlCQUFpQjtJQWlCVjtJQUVBOztJQWxCbEI7O09BRUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQVU7UUFDNUIsT0FBTyxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzNEO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQWMsRUFBRSxHQUFZO1FBQzlDLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQy9GO0lBRUQ7SUFDRSxnQkFBZ0I7SUFDQSxXQUFtQjtJQUNuQyxnQkFBZ0I7SUFDQSxPQUFpQjtRQUZqQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUVuQixZQUFPLEdBQVAsT0FBTyxDQUFVO0tBQy9COztBQXBCTiw4Q0FxQkM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxjQUFjO0lBNkphOztJQTVKdEM7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQXFCLEVBQUUsS0FBYzs7Ozs7Ozs7OztRQUN6RCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsMEJBQTBCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztLQUM1QztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFxQixFQUFFLEtBQWMsRUFBRSxHQUFZOzs7Ozs7Ozs7O1FBQzVFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMvQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0IsMEJBQTBCLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4QyxPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0tBQzNEO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQXFCLEVBQUUsS0FBYTs7Ozs7Ozs7OztRQUN4RCwwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQzlDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQXFCLEVBQUUsTUFBZ0I7Ozs7Ozs7Ozs7UUFDL0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDekQ7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBcUIsRUFBRSxLQUFhLEVBQUUsR0FBVzs7Ozs7Ozs7OztRQUMxRSwwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkMsMEJBQTBCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDckQ7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBa0IsRUFBRSxLQUFhOzs7Ozs7Ozs7O1FBQ2xELE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztLQUM5QztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFrQixFQUFFLE1BQWdCOzs7Ozs7Ozs7O1FBQ3pELE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDekQ7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBaUI7Ozs7Ozs7Ozs7UUFDeEMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxlQUFlLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDbkQ7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBb0I7UUFDL0MsT0FBTyxJQUFJLGNBQWMsQ0FBQyxlQUFlLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzlEO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWlCOzs7Ozs7Ozs7O1FBQ3hDLE9BQU8sSUFBSSxjQUFjLENBQUMsZUFBZSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ25EO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQW9CO1FBQy9DLE9BQU8sSUFBSSxjQUFjLENBQUMsZUFBZSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM5RDtJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQXdCOzs7Ozs7Ozs7O1FBQ3RELE9BQU8sSUFBSSxjQUFjLENBQUMsdUJBQXVCLEtBQUssRUFBRSxDQUFDLENBQUM7S0FDM0Q7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUEyQjtRQUM3RCxPQUFPLElBQUksY0FBYyxDQUFDLHVCQUF1QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN0RTtJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFvQjs7Ozs7Ozs7OztRQUM5QyxPQUFPLElBQUksY0FBYyxDQUFDLGtCQUFrQixLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3REO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsTUFBdUI7UUFDckQsT0FBTyxJQUFJLGNBQWMsQ0FBQyxrQkFBa0IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDakU7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBcUIsRUFBRSxXQUFnQzs7Ozs7Ozs7OztRQUNoRixXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE9BQU8sSUFBSSxjQUFjLENBQUMsR0FBRyxHQUFHLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3RGO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQXFCLEVBQUUsV0FBZ0M7Ozs7Ozs7Ozs7UUFDaEYsV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRixPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUN0RjtJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFjO1FBQ2pDLE9BQU8sSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDbkM7SUFFRDs7T0FFRztJQUNILFlBQXNDLFlBQW9CO1FBQXBCLGlCQUFZLEdBQVosWUFBWSxDQUFRO0tBQUs7O0FBN0pqRSx3Q0E4SkM7QUFjRDs7R0FFRztBQUNILE1BQXNCLFFBQVE7O0lBQzVCOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUE0Qzs7Ozs7Ozs7OztRQUN0RSxPQUFPLElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDNUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBa0M7Ozs7Ozs7Ozs7UUFDbEQsT0FBTyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNsQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFtQzs7Ozs7Ozs7OztRQUNwRCxPQUFPLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ25DO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQWtDOzs7Ozs7Ozs7O1FBQ2xELE9BQU8sSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDbEM7O0FBdkNILDRCQWtEQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDBCQUEwQixDQUFDLEtBQWEsRUFBRSxHQUFxQixFQUFFLEdBQVcsRUFBRSxHQUFXO0lBQ2hHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLDhCQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSw0QkFBNEIsRUFBRSw2QkFBNkIsR0FBRyw2QkFBNkIsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzSSxDQUFDO0lBQ0QsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHlCQUF5QixFQUFFLDZCQUE2QixHQUFHLHFCQUFxQixHQUFHLFFBQVEsR0FBRyxTQUFTLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkosQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHNCQUFzQixDQUFDLEtBQWE7SUFDM0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHlCQUF5QixFQUFFLGlGQUFpRixLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzVKLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ELElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLDhCQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSwrQkFBK0IsRUFBRSxpRkFBaUYsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsSyxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsMEJBQTBCLENBQUMsS0FBYSxFQUFFLEdBQXFCO0lBQ3RFLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDWixLQUFLLGdCQUFnQixDQUFDLGNBQWM7WUFDbEMsT0FBTywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMzRCxLQUFLLGdCQUFnQixDQUFDLGlCQUFpQjtZQUNyQyxPQUFPLDBCQUEwQixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2xFLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCO1lBQ3BDLE9BQU8sMEJBQTBCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDbEUsS0FBSyxnQkFBZ0IsQ0FBQyxlQUFlO1lBQ25DLE9BQU8sc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsS0FBSyxnQkFBZ0IsQ0FBQyxZQUFZO1lBQ2hDLE9BQU8sMEJBQTBCLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0QsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDBCQUEwQixDQUFDLEdBQVcsRUFBRSxHQUFxQjtJQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSw4QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsNEJBQTRCLEVBQUUsNkJBQTZCLEdBQUcsNERBQTRELEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEssQ0FBQztJQUNELElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFDbkMsTUFBTSxJQUFJLDhCQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSx5QkFBeUIsRUFBRSw2QkFBNkIsR0FBRywyQ0FBMkMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNwSixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyw2QkFBNkIsQ0FBQyxNQUFpQztJQUN0RSxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNwRSxNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHVCQUF1QixFQUFFLG1EQUFtRCxDQUFDLENBQUM7SUFDckgsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDJCQUEyQixDQUFDLFlBQWtDO0lBQ3JFLElBQUksQ0FBQyxZQUFZO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFcEMsSUFBSSxZQUFZLENBQUMsYUFBYSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzRSxNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHVCQUF1QixFQUFFLG1GQUFtRixDQUFDLENBQUM7SUFDckosQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLFNBQVMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN2SCxNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLGdCQUFnQixFQUFFLGlFQUFpRSxDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN2RixNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLGdCQUFnQixFQUFFLG1GQUFtRixDQUFDLENBQUM7SUFDOUksQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzFJLElBQUksY0FBYyxJQUFJLFNBQVMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMvRixNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHNCQUFzQixFQUFFLGtFQUFrRSxDQUFDLENBQUM7SUFDbkksQ0FBQztJQUVELElBQUksWUFBWSxDQUFDLGNBQWMsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSw4QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsNEJBQTRCLEVBQUUsa0NBQWtDLEdBQUcsNEhBQTRILENBQUMsQ0FBQztZQUN4TyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTztRQUNMLGNBQWM7UUFDZCxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDOUgsYUFBYSxFQUFFLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUEsb0NBQW1CLEVBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ3ZHLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFBLG9DQUFtQixFQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUMvRSxHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBQSxvQ0FBbUIsRUFBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDekUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUU7S0FDdEQsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFFBQWtCLEVBQUUsY0FBeUIsRUFBRSxlQUEwQjtJQUNqRyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO0lBRXZDLCtEQUErRDtJQUMvRCxNQUFNLGtCQUFrQixHQUFHLGVBQWUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFN0QsaUVBQWlFO0lBQ2pFLE1BQU0sbUJBQW1CLEdBQUcsY0FBYyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUU5RCx3Q0FBd0M7SUFDeEMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkIsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3pFLElBQUksVUFBVSxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLDhCQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSxnQ0FBZ0MsRUFBRSx3QkFBd0IsVUFBVSwyQ0FBMkMsbUJBQW1CLHNDQUFzQyxrQkFBa0Isd0JBQXdCLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUMvUSxDQUFDO0lBQ0gsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1FBRWpELElBQUksU0FBUyxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLDhCQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSxnQ0FBZ0MsRUFBRSx3QkFBd0IsVUFBVSxvRUFBb0Usa0JBQWtCLHlCQUF5QixpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZQLENBQUM7UUFFRCxJQUFJLFNBQVMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSw4QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsdUNBQXVDLEVBQUUsd0JBQXdCLFVBQVUsMERBQTBELG1CQUFtQixJQUFJLENBQUMsQ0FBQztRQUNyTSxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLDZCQUE2QixDQUNwQyxNQUFnQyxFQUNoQyxlQUEwQjtJQUUxQixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELE9BQU87UUFDTCxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7UUFDakMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQjtRQUMzQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRTtRQUN6RCw4QkFBOEIsRUFBRSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFO1FBQzNFLE9BQU8sRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7UUFDckYsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxzQkFBc0I7UUFDckQsbUJBQW1CLEVBQUUsMkJBQTJCLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0tBQzdFLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyw4QkFBOEIsQ0FDckMsTUFBaUMsRUFDakMsT0FBOEI7SUFFOUIsSUFBSSxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlHLE1BQU0sSUFBSSw4QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsb0JBQW9CLEVBQUUsc0RBQXNELENBQUMsQ0FBQztJQUNySCxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsZUFBZSxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BILE1BQU0sSUFBSSw4QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsc0JBQXNCLEVBQUUsK0RBQStELENBQUMsQ0FBQztJQUNoSSxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLG9CQUFvQixFQUFFLGdFQUFnRSxDQUFDLENBQUM7SUFDL0gsQ0FBQztJQUVELE9BQU87UUFDTCxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7UUFDakMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztRQUMvQixZQUFZLEVBQUUsTUFBTSxDQUFDLGFBQWE7UUFDbEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9CLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixrQkFBa0IsRUFBRSxNQUFNLENBQUMsa0JBQWtCO1FBQzdDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxxQkFBcUI7UUFDbkQscUJBQXFCLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUU7UUFDekQsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTLEVBQUU7UUFDdkQsc0JBQXNCLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUU7UUFDM0QsaUNBQWlDLEVBQUUsTUFBTSxDQUFDLDBCQUEwQixFQUFFLFNBQVMsRUFBRTtRQUNqRixxQkFBcUIsRUFBRSxNQUFNLENBQUMscUJBQXFCO1FBQ25ELGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYztRQUNyQyxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7U0FDdEMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNiLFNBQVMsRUFBRSxNQUFNLENBQUMsYUFBYSxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBQzFELFVBQVUsRUFBRSxNQUFNLENBQUMsYUFBYTtZQUNoQyxZQUFZLEVBQUUsTUFBTSxDQUFDLGVBQWU7U0FDckMsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNiLG1CQUFtQixFQUFFLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztLQUM3RSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsNkJBQTZCLENBQUMsTUFBZ0M7SUFDckUsT0FBTztRQUNMLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtRQUNqQyxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7UUFDckMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUU7UUFDekQsbUJBQW1CLEVBQUUsMkJBQTJCLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO0tBQzdFLENBQUM7QUFDSixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFdBQVksU0FBUSxRQUFRO0lBQ0g7SUFBN0IsWUFBNkIsTUFBZ0M7UUFDM0QsS0FBSyxFQUFFLENBQUM7UUFEbUIsV0FBTSxHQUFOLE1BQU0sQ0FBMEI7S0FFNUQ7SUFFTSxLQUFLLENBQUMsT0FBNEI7UUFDdkMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO0tBQ3pHO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0scUJBQXNCLFNBQVEsUUFBUTtJQUNiO0lBQTdCLFlBQTZCLE1BQTBDO1FBQ3JFLEtBQUssRUFBRSxDQUFDO1FBRG1CLFdBQU0sR0FBTixNQUFNLENBQW9DO0tBRXRFO0lBRU0sS0FBSyxDQUFDLE9BQTRCO1FBQ3ZDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztLQUMzRztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFlBQWEsU0FBUSxRQUFRO0lBQ0o7SUFBN0IsWUFBNkIsTUFBaUM7UUFDNUQsS0FBSyxFQUFFLENBQUM7UUFEbUIsV0FBTSxHQUFOLE1BQU0sQ0FBMkI7S0FFN0Q7SUFFTSxLQUFLLENBQUMsT0FBNEI7UUFDdkMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssaUJBQWlCLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDOUYsTUFBTSxJQUFJLDhCQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSx1QkFBdUIsRUFBRSxrR0FBa0csQ0FBQyxDQUFDO1FBQ3BLLENBQUM7UUFFRCxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQzFGO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBWSxTQUFRLFFBQVE7SUFDSDtJQUE3QixZQUE2QixNQUFnQztRQUMzRCxLQUFLLEVBQUUsQ0FBQztRQURtQixXQUFNLEdBQU4sTUFBTSxDQUEwQjtLQUU1RDtJQUVNLEtBQUssQ0FBQyxPQUE0QjtRQUN2Qyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDdkU7Q0FDRjtBQUVEOzs7R0FHRztBQUNILElBQVksYUFhWDtBQWJELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILDBCQUFPLENBQUE7SUFDUDs7T0FFRztJQUNILDhCQUFXLENBQUE7SUFDWDs7T0FFRztJQUNILDRCQUFTLENBQUE7QUFDWCxDQUFDLEVBYlcsYUFBYSw2QkFBYixhQUFhLFFBYXhCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLG9CQVNYO0FBVEQsV0FBWSxvQkFBb0I7SUFDOUI7O09BRUc7SUFDSCxxQ0FBYSxDQUFBO0lBQ2I7O09BRUc7SUFDSCxxQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQVRXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBUy9CO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGtCQVNYO0FBVEQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCx5Q0FBbUIsQ0FBQTtJQUNuQjs7T0FFRztJQUNILCtDQUF5QixDQUFBO0FBQzNCLENBQUMsRUFUVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQVM3QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxrQkFzQlg7QUF0QkQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCx1REFBK0IsQ0FBQTtJQUMvQjs7T0FFRztJQUNILHVEQUErQixDQUFBO0lBQy9COzs7T0FHRztJQUNILHVEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsdUNBQWUsQ0FBQTtJQUNmOztPQUVHO0lBQ0gsaURBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQXRCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQXNCN0I7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxrQkE2Q1g7QUE3Q0QsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCx1REFBK0IsQ0FBQTtJQUMvQjs7T0FFRztJQUNILHVEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsdURBQStCLENBQUE7SUFDL0I7OztPQUdHO0lBQ0gsdURBQStCLENBQUE7SUFDL0I7OztPQUdHO0lBQ0gsdURBQStCLENBQUE7SUFDL0I7OztPQUdHO0lBQ0gsdURBQStCLENBQUE7SUFDL0I7O09BRUc7SUFDSCx1REFBK0IsQ0FBQTtJQUMvQjs7O09BR0c7SUFDSCx1REFBK0IsQ0FBQTtJQUMvQjs7T0FFRztJQUNILHVDQUFlLENBQUE7SUFDZjs7T0FFRztJQUNILGlEQUF5QixDQUFBO0FBQzNCLENBQUMsRUE3Q1csa0JBQWtCLGtDQUFsQixrQkFBa0IsUUE2QzdCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLDBCQWlCWDtBQWpCRCxXQUFZLDBCQUEwQjtJQUNwQzs7T0FFRztJQUNILCtEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gseUVBQXlDLENBQUE7SUFDekM7O09BRUc7SUFDSCxpRUFBaUMsQ0FBQTtJQUNqQzs7T0FFRztJQUNILHlEQUF5QixDQUFBO0FBQzNCLENBQUMsRUFqQlcsMEJBQTBCLDBDQUExQiwwQkFBMEIsUUFpQnJDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGVBcUNYO0FBckNELFdBQVksZUFBZTtJQUN6Qjs7T0FFRztJQUNILGtEQUE2QixDQUFBO0lBQzdCOztPQUVHO0lBQ0gsa0NBQWEsQ0FBQTtJQUNiOztPQUVHO0lBQ0gsb0VBQStDLENBQUE7SUFDL0M7O09BRUc7SUFDSCwwRUFBcUQsQ0FBQTtJQUNyRDs7T0FFRztJQUNILG9GQUErRCxDQUFBO0lBQy9EOztPQUVHO0lBQ0gsMEZBQXFFLENBQUE7SUFDckU7O09BRUc7SUFDSCxvR0FBK0UsQ0FBQTtJQUMvRTs7T0FFRztJQUNILDBHQUFxRixDQUFBO0lBQ3JGOztPQUVHO0lBQ0gsc0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQXJDVyxlQUFlLCtCQUFmLGVBQWUsUUFxQzFCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGNBWVg7QUFaRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCwrQkFBYSxDQUFBO0lBQ2I7Ozs7O09BS0c7SUFDSCw2QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQVpXLGNBQWMsOEJBQWQsY0FBYyxRQVl6QjtBQXlJRDs7R0FFRztBQUNILElBQVksY0FTWDtBQVRELFdBQVksY0FBYztJQUN4Qjs7Ozs7O09BTUc7SUFDSCwrREFBNkMsQ0FBQTtBQUMvQyxDQUFDLEVBVFcsY0FBYyw4QkFBZCxjQUFjLFFBU3pCO0FBd0VEOzs7O0dBSUc7QUFDSCxNQUFhLFFBQVE7O0lBQ25COzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQWtCLEVBQUUsT0FBeUI7Ozs7Ozs7Ozs7UUFDNUQsT0FBTztZQUNMLFVBQVU7WUFDVixPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ2hGLENBQUM7S0FDSDtJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQWtCO1FBQzFDLE9BQU87WUFDTCxVQUFVO1lBQ1YsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO0tBQ0g7O0FBMUJILDRCQTJCQztBQTRDRDs7R0FFRztBQUNILElBQVksWUFTWDtBQVRELFdBQVksWUFBWTtJQUN0Qjs7T0FFRztJQUNILGlDQUFlLENBQUE7SUFDZjs7T0FFRztJQUNILDJCQUFTLENBQUE7QUFDWCxDQUFDLEVBVFcsWUFBWSw0QkFBWixZQUFZLFFBU3ZCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFdBU1g7QUFURCxXQUFZLFdBQVc7SUFDckI7O09BRUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUN2Qjs7T0FFRztJQUNILGtEQUFtQyxDQUFBO0FBQ3JDLENBQUMsRUFUVyxXQUFXLDJCQUFYLFdBQVcsUUFTdEI7QUFFRDs7R0FFRztBQUNILElBQVkscUJBS1g7QUFMRCxXQUFZLHFCQUFxQjtJQUMvQjs7T0FFRztJQUNILHNFQUEyQyxDQUFBO0FBQzdDLENBQUMsRUFMVyxxQkFBcUIscUNBQXJCLHFCQUFxQixRQUtoQztBQUVEOztHQUVHO0FBQ0gsSUFBWSxpQkFpQlg7QUFqQkQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCw0Q0FBcUIsQ0FBQTtJQUNyQjs7T0FFRztJQUNILDBDQUFtQixDQUFBO0lBQ25COztPQUVHO0lBQ0gsZ0RBQXlCLENBQUE7SUFDekI7O09BRUc7SUFDSCw4Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBakJXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBaUI1QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxrQkFxQlg7QUFyQkQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCx1Q0FBZSxDQUFBO0lBQ2Y7O09BRUc7SUFDSCwyREFBbUMsQ0FBQTtJQUNuQzs7T0FFRztJQUNILHVEQUErQixDQUFBO0lBQy9COztPQUVHO0lBQ0gsK0RBQXVDLENBQUE7SUFDdkM7O09BRUc7SUFDSCxtQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQXJCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQXFCN0I7QUFFRDs7R0FFRztBQUNILElBQVksYUFTWDtBQVRELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILDBDQUF1QixDQUFBO0lBQ3ZCOztPQUVHO0lBQ0gsMENBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVRXLGFBQWEsNkJBQWIsYUFBYSxRQVN4QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSx1QkFTWDtBQVRELFdBQVksdUJBQXVCO0lBQ2pDOztPQUVHO0lBQ0gsZ0RBQW1CLENBQUE7SUFDbkI7O09BRUc7SUFDSCx3Q0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQVRXLHVCQUF1Qix1Q0FBdkIsdUJBQXVCLFFBU2xDO0FBa0lEOztHQUVHO0FBQ0gsSUFBWSxXQVNYO0FBVEQsV0FBWSxXQUFXO0lBQ3JCOztPQUVHO0lBQ0gsZ0NBQWUsQ0FBQTtJQUNmOztPQUVHO0lBQ0gsNENBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQVRXLFdBQVcsMkJBQVgsV0FBVyxRQVN0QjtBQTBCRDs7R0FFRztBQUNILElBQVksaUJBU1g7QUFURCxXQUFZLGlCQUFpQjtJQUMzQjs7T0FFRztJQUNILGtDQUFhLENBQUE7SUFDYjs7T0FFRztJQUNILHdDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFUVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQVM1QjtBQXVXRDs7Ozs7R0FLRztBQUNILElBQVksYUFpQlg7QUFqQkQsV0FBWSxhQUFhO0lBQ3ZCOztPQUVHO0lBQ0gsc0NBQXFCLENBQUE7SUFDckI7O09BRUc7SUFDSCx3Q0FBdUIsQ0FBQTtJQUN2Qjs7T0FFRztJQUNILHNDQUFxQixDQUFBO0lBQ3JCOztPQUVHO0lBQ0gsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQWpCVyxhQUFhLDZCQUFiLGFBQWEsUUFpQnhCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksV0FTWDtBQVRELFdBQVksV0FBVztJQUNyQjs7T0FFRztJQUNILG9DQUFxQixDQUFBO0lBQ3JCOztPQUVHO0lBQ0gsc0RBQXVDLENBQUE7QUFDekMsQ0FBQyxFQVRXLFdBQVcsMkJBQVgsV0FBVyxRQVN0QjtBQUVEOzs7O0dBSUc7QUFDSCxJQUFZLFlBS1g7QUFMRCxXQUFZLFlBQVk7SUFDdEI7O09BRUc7SUFDSCx1Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTFcsWUFBWSw0QkFBWixZQUFZLFFBS3ZCO0FBd0tEOzs7O0dBSUc7QUFDSCxNQUFzQix1QkFBdUI7OztBQUE3QywwREE4QkM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsdUJBQXVCOztJQUN6RDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBK0I7Ozs7Ozs7Ozs7UUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLDhCQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSx1QkFBdUIsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzFHLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssb0JBQW9CLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3BHLE1BQU0sSUFBSSw4QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsMEJBQTBCLEVBQUUsMEVBQTBFLENBQUMsQ0FBQztRQUMvSSxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLG9CQUFvQixDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNsRyxNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHdCQUF3QixFQUFFLHNFQUFzRSxDQUFDLENBQUM7UUFDekksQ0FBQztRQUNELE9BQU8sSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbEM7SUFFZ0IsTUFBTSxDQUEyQjtJQUNsRCxZQUFvQixLQUErQjtRQUNqRCxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0tBQ3JCO0lBRUQsZ0JBQWdCO0lBQ1QsS0FBSyxDQUFDLEtBQWdCO1FBQzNCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdEIsSUFBSSxDQUFDLENBQUMsNEJBQTRCLElBQUksQ0FBQyxDQUFDLDRCQUE0QixDQUFDLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNuRixNQUFNLElBQUksc0JBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsMEJBQTBCLEVBQUUscUVBQXFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekksQ0FBQztRQUNELElBQUksQ0FBQyxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN2SCxNQUFNLElBQUksc0JBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsMEJBQTBCLEVBQUUsaUVBQWlFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckksQ0FBQztRQUNELE9BQU87WUFDTCw2QkFBNkIsRUFBRSxDQUFDLENBQUMseUJBQXlCO1lBQzFELDRCQUE0QixFQUFFLENBQUMsQ0FBQyw0QkFBNEI7WUFDNUQsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBRTtZQUM5RCxnQkFBZ0IsRUFBRSxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDcEQsZ0JBQWdCLEVBQUU7Z0JBQ2hCLGNBQWMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLGNBQWM7Z0JBQzdDLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtnQkFDeEIsK0JBQStCLEVBQUU7b0JBQy9CLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksa0JBQWtCLENBQUMsY0FBYztvQkFDdEUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFdBQVcsSUFBSSxrQkFBa0IsQ0FBQyxjQUFjO2lCQUN2RTtnQkFDRCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7Z0JBQ1YsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO2dCQUN4QixPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO2FBQ3hCO1NBQ0YsQ0FBQztLQUNIO0lBRUQsZ0JBQWdCO0lBQ1QsUUFBUSxLQUF3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFFakUsZ0JBQWdCO0lBQ1QsZUFBZSxLQUErQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7O0FBdkR4Rix3Q0F3REM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsdUJBQXVCOztJQUN2RDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBNkI7Ozs7Ozs7Ozs7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLDhCQUF1QixDQUFDLElBQUEsc0JBQUcsRUFBQSx1QkFBdUIsRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzFHLENBQUM7UUFDRCxPQUFPLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2hDO0lBRWdCLE1BQU0sQ0FBeUI7SUFDaEQsWUFBb0IsS0FBNkI7UUFDL0MsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztLQUNyQjtJQUVELGdCQUFnQjtJQUNULEtBQUssQ0FBQyxLQUFnQjtRQUMzQixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3RCLE1BQU0sVUFBVSxHQUFrQixDQUFDLENBQUMsTUFBTSxLQUFLLGtCQUFrQixDQUFDLFVBQVU7WUFDMUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxDQUFDLDRCQUE0QixJQUFJLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDbkYsTUFBTSxJQUFJLHNCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLDBCQUEwQixFQUFFLHFFQUFxRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pJLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkgsTUFBTSxJQUFJLHNCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLDBCQUEwQixFQUFFLGlFQUFpRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JJLENBQUM7UUFDRCxPQUFPO1lBQ0wsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtZQUM1RCwwQkFBMEIsRUFBRSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxFQUFFO1lBQzlELGdCQUFnQixFQUFFLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtZQUNsRCxnQkFBZ0IsRUFBRTtnQkFDaEIsY0FBYyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsY0FBYztnQkFDN0MsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9ELCtCQUErQixFQUFFO29CQUMvQixrQkFBa0IsRUFBRSxDQUFDLENBQUMsV0FBVyxJQUFJLGtCQUFrQixDQUFDLGNBQWM7b0JBQ3RFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxXQUFXLElBQUksa0JBQWtCLENBQUMsY0FBYztpQkFDdkU7Z0JBQ0QsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHO2dCQUNWLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVTtnQkFDeEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTzthQUN4QjtTQUNGLENBQUM7S0FDSDtJQUVELGdCQUFnQjtJQUNULFFBQVEsS0FBd0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO0lBRWpFLGdCQUFnQjtJQUNULGVBQWUsS0FBK0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFOztBQWxEeEYsb0NBbURDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQWEsYUFBYyxTQUFRLHVCQUF1Qjs7SUFDeEQ7O09BRUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQThCOzs7Ozs7Ozs7O1FBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSw4QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsdUJBQXVCLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztRQUMxRyxDQUFDO1FBQ0QsT0FBTyxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNqQztJQUVnQixNQUFNLENBQTBCO0lBQ2pELFlBQW9CLEtBQThCO1FBQ2hELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7S0FDckI7SUFFRCxnQkFBZ0I7SUFDVCxLQUFLLENBQUMsTUFBaUI7UUFDNUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QixPQUFPO1lBQ0wsZ0JBQWdCLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUU7WUFDakQsZ0JBQWdCLEVBQUU7Z0JBQ2hCLGNBQWMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLGNBQWM7Z0JBQzdDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzdFLCtCQUErQixFQUFFO29CQUMvQixrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO29CQUM3QyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNO2lCQUM5QztnQkFDRCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7Z0JBQ1YsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVO2dCQUN4QixPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPO2FBQ3hCO1NBQ0YsQ0FBQztLQUNIO0lBRUQsZ0JBQWdCO0lBQ1QsUUFBUSxLQUF3QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFFakUsZ0JBQWdCO0lBQ1QsZUFBZSxLQUErQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUU7O0FBeEN4RixzQ0F5Q0M7QUE0S0Q7O0dBRUc7QUFDSCxNQUFhLE9BQU87O0lBQ2xCOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQXdCLEVBQUU7Ozs7Ozs7Ozs7UUFDekMsT0FBTztZQUNMLGFBQWEsRUFBRSxhQUFhLENBQUMsRUFBRTtZQUMvQix3QkFBd0IsRUFBRSxLQUFLLENBQUMsd0JBQXdCO1lBQ3hELFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDcEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQy9CLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUN2QixxQkFBcUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO1lBQ2hELHdCQUF3QixFQUFFLEtBQUssQ0FBQyxzQkFBc0I7WUFDdEQsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1NBQzdCLENBQUM7S0FDSDtJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQTBCLEVBQUU7Ozs7Ozs7Ozs7UUFDN0MsT0FBTztZQUNMLGFBQWEsRUFBRSxhQUFhLENBQUMsSUFBSTtZQUNqQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsd0JBQXdCO1lBQ3hELFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDcEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQy9CLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUN2QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQztLQUNIO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBeUIsRUFBRTs7Ozs7Ozs7OztRQUMzQyxPQUFPO1lBQ0wsYUFBYSxFQUFFLGFBQWEsQ0FBQyxHQUFHO1lBQ2hDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyx3QkFBd0I7WUFDeEQsZUFBZSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQy9CLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUN2QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQztLQUNIOztBQWxESCwwQkFtREM7QUFFRCxNQUFlLGtCQUFtQixTQUFRLHNCQUFRO0lBQ2hEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLGlCQUF5QjtRQUN6RixJQUFJLG1CQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksc0JBQWUsQ0FDdkIsSUFBQSxzQkFBRyxFQUFBLHNCQUFzQixFQUN6Qix5S0FBeUssRUFDekssS0FBSyxDQUNOLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLHVCQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM3RixvRkFBb0Y7UUFDcEYsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEFBQUQsRUFBRyxXQUFXLEVBQUUsQUFBRCxFQUFHLGtCQUFrQixDQUFDLEdBQUcsU0FBUyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3pHLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLHNCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSwwQkFBMEIsRUFDN0Isd0NBQXdDLGlCQUFpQixtSkFBbUosRUFDNU0sS0FBSyxDQUNOLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxrQkFBa0IsQ0FBQyw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2hFLGdCQUFnQjtZQUNoQixXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLE1BQU0sRUFBRSxTQUFTLENBQUMsTUFBTTtTQUN6QixDQUFDLENBQUM7S0FDSjtJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLDRCQUE0QixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQStCO1FBQ3RHLE1BQU0sTUFBTyxTQUFRLGtCQUFrQjtZQUMzQixZQUFZLEdBQXlELEVBQUUsQ0FBQztZQUN4RSxjQUFjLEdBQW1FLEVBQUUsQ0FBQztZQUNwRixhQUFhLEdBQTBELEVBQUUsQ0FBQztZQUMxRSxZQUFZLEdBQXlELEVBQUUsQ0FBQztZQUN4RSxPQUFPLENBQW9DO1lBQ3JDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDbkIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1lBQzFDLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQ2hDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztZQUM5QyxTQUFTLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLFVBQVUsR0FBRyxTQUFTLENBQUM7WUFDdkIsZUFBZSxHQUFHLFNBQVMsQ0FBQztZQUM1Qix5QkFBeUIsR0FBRyxTQUFTLENBQUM7WUFDdEMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1lBQzdCLGVBQWUsR0FBRyxTQUFTLENBQUM7WUFDbEMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQ25CLGlCQUFpQixHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDM0QsT0FBTyxFQUFFLGdCQUFnQjtnQkFDekIsUUFBUSxFQUFFLGdCQUFnQixLQUFLLENBQUMsZ0JBQWdCLFlBQVksSUFBSSxDQUFDLFdBQVcsaUJBQWlCO2dCQUM3RixTQUFTLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUI7Z0JBQ3hDLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCO2dCQUNyQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07YUFDckIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM5QjtJQWFEOzs7T0FHRztJQUNILElBQVcsaUJBQWlCO1FBQzFCLE9BQU87WUFDTCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1NBQzFDLENBQUM7S0FDSDtJQXFCRDs7O09BR0c7SUFDTyxhQUFhLENBQXdCO0lBRS9DOzs7Ozs7Ozs7T0FTRztJQUNJLG1CQUFtQixDQUFDLFNBQTBCO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSw2Q0FBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUNyRCxjQUFjLEVBQUUsSUFBSTtnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhO2FBQzVCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pFLENBQUM7UUFFRCxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDO0tBQ2xDO0lBRUQ7O09BRUc7SUFDTyxpQkFBaUIsQ0FBQyxvQkFBbUMsRUFBRSxPQUE4QjtRQUM3RixJQUFJLE9BQU8sRUFBRSxlQUFlLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDeEgsTUFBTSxJQUFJLHNCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLHNCQUFzQixFQUFFLG9EQUFvRCxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ILENBQUM7UUFFRCxJQUFJLG9CQUFvQixJQUFJLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUscUJBQXFCLElBQUksT0FBTyxFQUFFLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztZQUN0SCxNQUFNLElBQUksc0JBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsdUJBQXVCLEVBQUUsdUZBQXVGLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkosQ0FBQztRQUVELE9BQU87WUFDTCx3QkFBd0IsRUFBRSxPQUFPLEVBQUUsd0JBQXdCO1lBQzNELHNCQUFzQixFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFO1lBQzdELFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVztZQUNqQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUscUJBQXFCO1lBQ3JELHdCQUF3QixFQUFFLE9BQU8sRUFBRSx3QkFBd0I7WUFDM0QsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVU7Z0JBQy9CLGNBQWMsRUFBRSxPQUFPLEVBQUUsY0FBYzthQUN4QyxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ2IsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQztTQUM3QyxDQUFDO0tBQ0g7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU0sQ0FBQyxVQUFrQixFQUFFLEtBQXFCO1FBQ3JELE9BQU8sSUFBSSx1QkFBTSxDQUFDO1lBQ2hCLFVBQVU7WUFDVixTQUFTLEVBQUUsa0JBQWtCO1lBQzdCLGFBQWEsRUFBRTtnQkFDYixZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDbkMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUN6QixjQUFjLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjthQUN4QztZQUNELEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbkI7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCLENBQUMsS0FBcUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRTtZQUNqQyxTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksRUFBRSxxQkFBSSxDQUFDLEtBQUs7WUFDaEIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCLENBQUMsS0FBcUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUNoQyxTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksRUFBRSxxQkFBSSxDQUFDLEtBQUs7WUFDaEIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7OztPQUlHO0lBQ0kseUJBQXlCLENBQUMsS0FBcUI7UUFDcEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFO1lBQ3hDLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxFQUFFLHFCQUFJLENBQUMsWUFBWTtZQUN2QixHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUM7S0FDSjtJQUVEOzs7O09BSUc7SUFDSSx3QkFBd0IsQ0FBQyxLQUFxQjtRQUNuRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUU7WUFDdkMsU0FBUyxFQUFFLEtBQUs7WUFDaEIsTUFBTSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM1QixJQUFJLEVBQUUscUJBQUksQ0FBQyxZQUFZO1lBQ3ZCLEdBQUcsS0FBSztTQUNULENBQUMsQ0FBQztLQUNKO0lBRUQ7Ozs7T0FJRztJQUNJLHdCQUF3QixDQUFDLEtBQXFCO1FBQ25ELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRTtZQUN2QyxTQUFTLEVBQUUsS0FBSztZQUNoQixNQUFNLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksRUFBRSxxQkFBSSxDQUFDLEtBQUs7WUFDaEIsR0FBRyxLQUFLO1NBQ1QsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7OztPQUlHO0lBQ0kseUJBQXlCLENBQUMsS0FBcUI7UUFDcEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFO1lBQ3hDLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLE1BQU0sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxFQUFFLHFCQUFJLENBQUMsS0FBSztZQUNoQixHQUFHLEtBQUs7U0FDVCxDQUFDLENBQUM7S0FDSjtDQUNGO0FBRUQ7O0dBRUc7SUFFVSxjQUFjOzRCQUQxQixvQ0FBa0I7Ozs7c0JBQ2lCLGtCQUFrQjs4QkFBMUIsU0FBUSxXQUFrQjs7OztZQUF0RCw2S0FnTkM7Ozs7O1FBL01DLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsa0RBQWtELENBQUM7UUFFMUYsZ0JBQWdCLENBQVM7UUFDekIsV0FBVyxDQUFTO1FBQ3BCLGtCQUFrQixDQUFTO1FBQzNCLGlCQUFpQixDQUFTO1FBRTFDOztXQUVHO1FBQ2EsU0FBUyxDQUFVO1FBRW5DOztXQUVHO1FBQ2EsVUFBVSxDQUFVO1FBRXBDOztXQUVHO1FBQ2EseUJBQXlCLENBQVk7UUFFckQ7O1dBRUc7UUFDYSxlQUFlLENBQVk7UUFFM0M7O1dBRUc7UUFDYSxnQkFBZ0IsQ0FBWTtRQUM1Qzs7V0FFRztRQUNhLGVBQWUsQ0FBWTtRQUMzQzs7Ozs7V0FLRztRQUNJLE1BQU0sQ0FBd0I7UUFDM0IsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLFlBQVksR0FBeUQsRUFBRSxDQUFDO1FBQ3hFLGNBQWMsR0FBbUUsRUFBRSxDQUFDO1FBQ3BGLGFBQWEsR0FBMEQsRUFBRSxDQUFDO1FBQzFFLFlBQVksR0FBeUQsRUFBRSxDQUFDO1FBQ3hFLE9BQU8sQ0FBd0I7UUFFekMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEwQjtZQUNsRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDZixZQUFZLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixJQUFJLGtCQUFJLENBQUMsTUFBTSxDQUFDO29CQUNyRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsbUJBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7d0JBQzVDLFNBQVMsRUFBRSxHQUFHO3FCQUNmLENBQUM7aUJBQ0gsQ0FBQzthQUNILENBQUMsQ0FBQzs7Ozs7O21EQTFETSxjQUFjOzs7O1lBNER2QixtQ0FBbUM7WUFDbkMsSUFBQSx3Q0FBb0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFbEMsMENBQTBDO1lBQzFDLElBQUksS0FBSyxDQUFDLGtCQUFrQixJQUFJLElBQUksSUFBSSxDQUFDLG1CQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RGLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDakYsTUFBTSxJQUFJLHNCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLDBCQUEwQixFQUFFLHNFQUFzRSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN6SSxDQUFDO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztvQkFDeEQsTUFBTSxJQUFJLHNCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLDJCQUEyQixFQUFFLDJGQUEyRixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvSixDQUFDO1lBQ0gsQ0FBQztZQUVELG1DQUFtQztZQUNuQyxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUM7Z0JBQ25HLE1BQU0sSUFBSSxzQkFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSxpQ0FBaUMsRUFBRSw4REFBOEQsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4SSxDQUFDO1lBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBRTdCLGtDQUFrQztZQUNsQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUVsRCxJQUFJLEtBQUssRUFBRSxlQUFlLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RILE1BQU0sSUFBSSxzQkFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSxzQkFBc0IsRUFBRSwwREFBMEQsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN6SCxDQUFDO1lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ2pDLFFBQVEsQ0FBQyxLQUFLLENBQUM7b0JBQ2IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO29CQUMvQixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7b0JBQ25DLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDakMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO29CQUMvQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87aUJBQ3ZCLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsOERBQThEO1lBQzlELE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2dCQUM3QyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztnQkFDL0MsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7Z0JBQzlDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2FBQzlDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRTVDLE1BQU0sY0FBYyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hILElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLHNCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSx1QkFBdUIsRUFDMUIsOEJBQThCLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdFQUF3RSxFQUMvSCxJQUFJLENBQ0wsQ0FBQztZQUNKLENBQUM7WUFFRCxxREFBcUQ7WUFDckQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksYUFBYSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDeEUsTUFBTSxJQUFJLHNCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLGdCQUFnQixFQUFFLGdGQUFnRixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pJLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxhQUFhLEtBQUssYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMxRSxNQUFNLElBQUksc0JBQWUsQ0FBQyxJQUFBLHNCQUFHLEVBQUEsa0JBQWtCLEVBQUUsb0ZBQW9GLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0ksQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksYUFBYSxLQUFLLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDNUcsTUFBTSxJQUFJLHNCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLHdCQUF3QixFQUFFLG9JQUFvSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JNLENBQUM7WUFFRCw4Q0FBOEM7WUFDOUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQzlFLE1BQU0sSUFBSSxzQkFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSxpQ0FBaUMsRUFBRSxzRUFBc0UsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoSixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxzQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNyRCxXQUFXLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXO2dCQUN0QyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQjtnQkFDaEQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3JDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUEsMkJBQVUsRUFBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3RELFlBQVksRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDL0Msc0JBQXNCLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzNELGFBQWEsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDakQsWUFBWSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUMvQyxhQUFhLEVBQUUsYUFBYTtnQkFDNUIsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLGVBQWUsRUFBRSxTQUFTLEVBQUU7Z0JBQzFELE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQzdELCtCQUErQixFQUFFLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUM7b0JBQzVFLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxvQ0FBb0M7aUJBQ3BFLENBQUEsQ0FBQyxDQUFDLFNBQVM7YUFDYixDQUFDLENBQUM7WUFFSCxzRkFBc0Y7WUFDdEYsd0ZBQXdGO1lBQ3hGLHVGQUF1RjtZQUN2Rix5RkFBeUY7WUFDekYsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDNUQsSUFBSSxjQUFjO2dCQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQ25FLElBQUksY0FBYztnQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM5RCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUF1QyxDQUFDO1lBQzlFLElBQUksVUFBVSxJQUFJLGtCQUFXLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUF1QyxDQUFDO1lBQzFGLElBQUksUUFBUSxJQUFJLGtCQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUVELElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGdCQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1lBQ3ZILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxnQkFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztZQUNwRyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDakcsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1lBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1lBQ3BELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBRXhDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxJQUFJLDJCQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFekUsc0ZBQXNGO1lBQ3RGLHVGQUF1RjtZQUN2RixpRkFBaUY7WUFDakYsb0ZBQW9GO1lBQ3BGLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNsQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxJQUFJLHNCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSx3QkFBd0IsRUFDM0IsaUlBQWlJLEVBQ2pJLElBQUksQ0FDTCxDQUFDO2dCQUNKLENBQUM7Z0JBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSx5QkFBZSxDQUFDO29CQUMzQyxHQUFHLEVBQUUsMENBQTBDO29CQUMvQyxNQUFNLEVBQUUsZ0JBQU0sQ0FBQyxLQUFLO29CQUNwQixVQUFVLEVBQUUsQ0FBQyxJQUFJLHVCQUFhLEVBQUUsQ0FBQztvQkFDakMsT0FBTyxFQUFFLENBQUMsMEJBQTBCLENBQUM7b0JBQ3JDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztvQkFDbkMsVUFBVSxFQUFFO3dCQUNWLElBQUksRUFBRTs0QkFDSixnREFBZ0QsRUFBRSxNQUFNO3lCQUN6RDtxQkFDRjtpQkFDRixDQUFDLENBQUMsQ0FBQztZQUNOLENBQUM7U0FDRjs7WUEvTVUsdURBQWM7Ozs7O0FBQWQsd0NBQWM7QUFrTjNCLFNBQVMsY0FBYyxDQUFJLENBQVc7SUFDcEMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQml0cmF0ZSwgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSwgQXJuRm9ybWF0LCBEdXJhdGlvbiwgRm4sIExhenksIE5hbWVzLCBSZXNvdXJjZSwgU3RhY2ssIFRva2VuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBJQ2VydGlmaWNhdGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2VydGlmaWNhdGVtYW5hZ2VyJztcbmltcG9ydCB0eXBlIHsgTWV0cmljT3B0aW9ucyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB7IE1ldHJpYywgVW5pdCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoJztcbmltcG9ydCB0eXBlIHsgSVJvbGUsIEFkZFRvUmVzb3VyY2VQb2xpY3lSZXN1bHQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5U3RhdGVtZW50LCBTdGFyUHJpbmNpcGFsIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5PcmlnaW5FbmRwb2ludCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1tZWRpYXBhY2thZ2V2Mic7XG5pbXBvcnQgdHlwZSB7IElPcmlnaW5FbmRwb2ludFJlZiwgT3JpZ2luRW5kcG9pbnRSZWZlcmVuY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFwYWNrYWdldjInO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yLCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciwgQ2ZuUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgSUNoYW5uZWwgfSBmcm9tICcuL2NoYW5uZWwnO1xuaW1wb3J0IHR5cGUgeyBDZG5BdXRoQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vb3JpZ2luLWVuZHBvaW50LXBvbGljeSc7XG5pbXBvcnQgeyBPcmlnaW5FbmRwb2ludFBvbGljeSB9IGZyb20gJy4vb3JpZ2luLWVuZHBvaW50LXBvbGljeSc7XG5pbXBvcnQgeyBjb252ZXJ0RGF0ZVRvU3RyaW5nLCByZW5kZXJUYWdzIH0gZnJvbSAnLi9zaGFyZWQtaGVscGVycyc7XG5cbi8qKlxuICogQWNjZXB0ZWQgYXVkaW8gY29kZWMgdmFsdWVzIGZvciBtYW5pZmVzdCBmaWx0ZXJpbmcuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvbWFuaWZlc3QtZmlsdGVyLXF1ZXJ5LXBhcmFtZXRlcnMuaHRtbFxuICovXG5leHBvcnQgZW51bSBBdWRpb0NvZGVjIHtcbiAgLyoqIEFBQy1MQyBhdWRpbyBjb2RlYyAqL1xuICBBQUNMID0gJ0FBQ0wnLFxuICAvKiogSEUtQUFDIGF1ZGlvIGNvZGVjICovXG4gIEFBQ0ggPSAnQUFDSCcsXG4gIC8qKiBEb2xieSBEaWdpdGFsIGF1ZGlvIGNvZGVjIChpbmNsdWRlIHRoZSBoeXBoZW4pICovXG4gIEFDXzMgPSAnQUMtMycsXG4gIC8qKiBEb2xieSBEaWdpdGFsIFBsdXMgYXVkaW8gY29kZWMgKGluY2x1ZGUgdGhlIGh5cGhlbikgKi9cbiAgRUNfMyA9ICdFQy0zJyxcbn1cblxuLyoqXG4gKiBBY2NlcHRlZCB2aWRlbyBjb2RlYyB2YWx1ZXMgZm9yIG1hbmlmZXN0IGZpbHRlcmluZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tZWRpYXBhY2thZ2UvbGF0ZXN0L3VzZXJndWlkZS9tYW5pZmVzdC1maWx0ZXItcXVlcnktcGFyYW1ldGVycy5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIFZpZGVvQ29kZWMge1xuICAvKiogSC4yNjQvQVZDICovXG4gIEgyNjQgPSAnSDI2NCcsXG4gIC8qKiBILjI2NS9IRVZDICovXG4gIEgyNjUgPSAnSDI2NScsXG4gIC8qKiBBVjEgKi9cbiAgQVYxID0gJ0FWMScsXG59XG5cbi8qKlxuICogQWNjZXB0ZWQgdmlkZW8gZHluYW1pYyByYW5nZSB2YWx1ZXMgZm9yIG1hbmlmZXN0IGZpbHRlcmluZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tZWRpYXBhY2thZ2UvbGF0ZXN0L3VzZXJndWlkZS9tYW5pZmVzdC1maWx0ZXItcXVlcnktcGFyYW1ldGVycy5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIFZpZGVvRHluYW1pY1JhbmdlIHtcbiAgLyoqIERvbGJ5IFZpc2lvbiAqL1xuICBEViA9ICdkdicsXG4gIC8qKiBIRFIxMCAqL1xuICBIRFIxMCA9ICdoZHIxMCcsXG4gIC8qKiBIeWJyaWQgTG9nLUdhbW1hICovXG4gIEhMRyA9ICdobGcnLFxuICAvKiogU3RhbmRhcmQgRHluYW1pYyBSYW5nZSAqL1xuICBTRFIgPSAnc2RyJyxcbn1cblxuLyoqXG4gKiBBY2NlcHRlZCB0cmlja3BsYXkgdHlwZSB2YWx1ZXMgZm9yIG1hbmlmZXN0IGZpbHRlcmluZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tZWRpYXBhY2thZ2UvbGF0ZXN0L3VzZXJndWlkZS9tYW5pZmVzdC1maWx0ZXItcXVlcnktcGFyYW1ldGVycy5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIFRyaWNrcGxheVR5cGUge1xuICAvKiogSS1mcmFtZSBvbmx5IHRyaWNrLXBsYXkgKi9cbiAgSUZSQU1FID0gJ2lmcmFtZScsXG4gIC8qKiBJbWFnZS1iYXNlZCB0cmljay1wbGF5ICovXG4gIElNQUdFID0gJ2ltYWdlJyxcbiAgLyoqIE5vIHRyaWNrLXBsYXkgKi9cbiAgTk9ORSA9ICdub25lJyxcbn1cblxuLyoqXG4gKiBOdW1lcmljIG1hbmlmZXN0IGZpbHRlciBrZXlzLlxuICpcbiAqIFVzZSB3aXRoIGBNYW5pZmVzdEZpbHRlci5udW1lcmljKClgLCBgTWFuaWZlc3RGaWx0ZXIubnVtZXJpY0xpc3QoKWAsIGFuZCBgTWFuaWZlc3RGaWx0ZXIubnVtZXJpY1JhbmdlKClgLlxuICpcbiAqIEF1ZGlvIGFuZCB2aWRlbyBiaXRyYXRlIGZpbHRlcnMgYXJlIG5vdCBpbmNsdWRlZCBoZXJlIGJlY2F1c2UgdGhleSB1c2UgdGhlXG4gKiBgQml0cmF0ZWAgY2xhc3MgZGlyZWN0bHkgdmlhIGRlZGljYXRlZCBtZXRob2RzIG9uIGBNYW5pZmVzdEZpbHRlcmAuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvbWFuaWZlc3QtZmlsdGVyLXF1ZXJ5LXBhcmFtZXRlcnMuaHRtbFxuICovXG5leHBvcnQgZW51bSBOdW1lcmljRmlsdGVyS2V5IHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHMuXG4gICAqXG4gICAqIEFjY2VwdGVkIHZhbHVlczogcmFuZ2UgMeKAkzMyNzY3LCBvciBpbmRpdmlkdWFsIGludGVnZXJzLlxuICAgKi9cbiAgQVVESU9fQ0hBTk5FTFM9J2F1ZGlvX2NoYW5uZWxzJyxcbiAgLyoqXG4gICAqIFRoZSBhdWRpbyBzYW1wbGUgcmF0ZSBpbiBIei5cbiAgICpcbiAgICogQWNjZXB0ZWQgdmFsdWVzOiByYW5nZSAw4oCTMjE0NzQ4MzY0Nywgb3IgaW5kaXZpZHVhbCBpbnRlZ2Vycy5cbiAgICovXG4gIEFVRElPX1NBTVBMRV9SQVRFPSdhdWRpb19zYW1wbGVfcmF0ZScsXG4gIC8qKlxuICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0cmljay1wbGF5IGltYWdlIGluIHBpeGVscyAoSS1mcmFtZSBhbmQgaW1hZ2UtYmFzZWQgdHJpY2stcGxheSkuXG4gICAqXG4gICAqIElmIHVzaW5nIHdpdGggSS1mcmFtZSBvbmx5IHRyaWNrLXBsYXksIGBUUklDS1BMQVlfSEVJR0hUYCBhbmQgYFZJREVPX0hFSUdIVGBcbiAgICogc2hvdWxkIGhhdmUgc2ltaWxhciB2YWx1ZXMuIElmIHRoZXkgZGlmZmVyLCBJLWZyYW1lIG9ubHkgdHJhY2tzIG1pZ2h0IGJlXG4gICAqIHJlbW92ZWQgZnJvbSB0aGUgbWFuaWZlc3QuXG4gICAqXG4gICAqIEFjY2VwdGVkIHZhbHVlczogcmFuZ2UgMeKAkzIxNDc0ODM2NDcsIG9yIGluZGl2aWR1YWwgaW50ZWdlcnMuXG4gICAqL1xuICBUUklDS1BMQVlfSEVJR0hUPSd0cmlja3BsYXlfaGVpZ2h0JyxcbiAgLyoqXG4gICAqIFRoZSB2aWRlbyBmcmFtZSByYXRlIHJhbmdlIGluIE5UU0MgZm9ybWF0LlxuICAgKlxuICAgKiBXaGVuIGZpbHRlcmluZyBmb3IgYSBzaW5nbGUgdmFsdWUsIE1lZGlhUGFja2FnZSB1c2VzIGFuIGFwcHJveGltYXRlIGVxdWFsc1xuICAgKiBjb21wYXJpc29uIHdpdGggYW4gZXBzaWxvbiB0b2xlcmFuY2Ugb2YgMC4wMDA1LlxuICAgKlxuICAgKiBBY2NlcHRlZCB2YWx1ZXM6IHJhbmdlIDHigJM5OTkuOTk5ICh1cCB0byB0aHJlZSBkZWNpbWFsIHBsYWNlcyksIG9yIGluZGl2aWR1YWwgdmFsdWVzLlxuICAgKi9cbiAgVklERU9fRlJBTUVSQVRFPSd2aWRlb19mcmFtZXJhdGUnLFxuICAvKipcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgdmlkZW8gaW4gcGl4ZWxzLlxuICAgKlxuICAgKiBJZiB1c2luZyB3aXRoIEktZnJhbWUgb25seSB0cmljay1wbGF5LCBgVFJJQ0tQTEFZX0hFSUdIVGAgYW5kIGBWSURFT19IRUlHSFRgXG4gICAqIHNob3VsZCBoYXZlIHNpbWlsYXIgdmFsdWVzLiBJZiB0aGV5IGRpZmZlciwgSS1mcmFtZSBvbmx5IHRyYWNrcyBtaWdodCBiZVxuICAgKiByZW1vdmVkIGZyb20gdGhlIG1hbmlmZXN0LlxuICAgKlxuICAgKiBBY2NlcHRlZCB2YWx1ZXM6IHJhbmdlIDHigJMzMjc2Nywgb3IgaW5kaXZpZHVhbCBpbnRlZ2Vycy5cbiAgICovXG4gIFZJREVPX0hFSUdIVD0ndmlkZW9faGVpZ2h0Jyxcbn1cblxuLyoqXG4gKiBUZXh0IG1hbmlmZXN0IGZpbHRlciBrZXlzIGZvciBmcmVlLWZvcm0gc3RyaW5nIHZhbHVlcy5cbiAqXG4gKiBVc2Ugd2l0aCBgTWFuaWZlc3RGaWx0ZXIudGV4dCgpYCBhbmQgYE1hbmlmZXN0RmlsdGVyLnRleHRMaXN0KClgLlxuICpcbiAqIEZvciBrZXlzIHdpdGggZml4ZWQgYWNjZXB0ZWQgdmFsdWVzLCB1c2UgdGhlIGRlZGljYXRlZCBtZXRob2RzIG9uIGBNYW5pZmVzdEZpbHRlcmAgaW5zdGVhZDpcbiAqIC0gQXVkaW8gY29kZWM6IGBNYW5pZmVzdEZpbHRlci5hdWRpb0NvZGVjKClgIC8gYE1hbmlmZXN0RmlsdGVyLmF1ZGlvQ29kZWNMaXN0KClgXG4gKiAtIFZpZGVvIGNvZGVjOiBgTWFuaWZlc3RGaWx0ZXIudmlkZW9Db2RlYygpYCAvIGBNYW5pZmVzdEZpbHRlci52aWRlb0NvZGVjTGlzdCgpYFxuICogLSBWaWRlbyBkeW5hbWljIHJhbmdlOiBgTWFuaWZlc3RGaWx0ZXIudmlkZW9EeW5hbWljUmFuZ2UoKWAgLyBgTWFuaWZlc3RGaWx0ZXIudmlkZW9EeW5hbWljUmFuZ2VMaXN0KClgXG4gKiAtIFRyaWNrcGxheSB0eXBlOiBgTWFuaWZlc3RGaWx0ZXIudHJpY2twbGF5VHlwZSgpYCAvIGBNYW5pZmVzdEZpbHRlci50cmlja3BsYXlUeXBlTGlzdCgpYFxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL21lZGlhcGFja2FnZS9sYXRlc3QvdXNlcmd1aWRlL21hbmlmZXN0LWZpbHRlci1xdWVyeS1wYXJhbWV0ZXJzLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gVGV4dEZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBBdWRpbyBsYW5ndWFnZXMgb3IgZnVuY3Rpb25hbCBjb2RlcyBkZXJpdmVkIGZyb20gZW5jb2RlciBwYXNzdGhyb3VnaC5cbiAgICpcbiAgICogQWNjZXB0ZWQgdmFsdWVzOiBhcmJpdHJhcnkgc3RyaW5ncyBzdWNoIGFzIElTTy02MzktMSBsYW5ndWFnZSBjb2RlcyAobm90IGNhc2Utc2Vuc2l0aXZlKS5cbiAgICovXG4gIEFVRElPX0xBTkdVQUdFPSdhdWRpb19sYW5ndWFnZScsXG4gIC8qKlxuICAgKiBUaGUgc3VidGl0bGUgbGFuZ3VhZ2Ugb3IgZnVuY3Rpb25hbCBjb2RlcyBkZXJpdmVkIGZyb20gZW5jb2RlciBwYXNzdGhyb3VnaC5cbiAgICpcbiAgICogQWNjZXB0ZWQgdmFsdWVzOiBhcmJpdHJhcnkgc3RyaW5ncyBzdWNoIGFzIElTTy02MzktMSBsYW5ndWFnZSBjb2RlcyAobm90IGNhc2Utc2Vuc2l0aXZlKS5cbiAgICovXG4gIFNVQlRJVExFX0xBTkdVQUdFPSdzdWJ0aXRsZV9sYW5ndWFnZScsXG59XG5cbi8qKlxuICogQml0cmF0ZSBtYW5pZmVzdCBmaWx0ZXIga2V5cy5cbiAqXG4gKiBVc2Ugd2l0aCBgTWFuaWZlc3RGaWx0ZXIuYml0cmF0ZSgpYCBhbmQgYE1hbmlmZXN0RmlsdGVyLmJpdHJhdGVSYW5nZSgpYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tZWRpYXBhY2thZ2UvbGF0ZXN0L3VzZXJndWlkZS9tYW5pZmVzdC1maWx0ZXItcXVlcnktcGFyYW1ldGVycy5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIEJpdHJhdGVGaWx0ZXJLZXkge1xuICAvKipcbiAgICogVGhlIGF1ZGlvIGJpdHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kLlxuICAgKlxuICAgKiBBY2NlcHRlZCB2YWx1ZXM6IHJhbmdlIDDigJMyMTQ3NDgzNjQ3LCBvciBpbmRpdmlkdWFsIGludGVnZXJzLlxuICAgKi9cbiAgQVVESU9fQklUUkFURT0nYXVkaW9fYml0cmF0ZScsXG4gIC8qKlxuICAgKiBUaGUgdmlkZW8gYml0cmF0ZSBpbiBiaXRzIHBlciBzZWNvbmQuXG4gICAqXG4gICAqIFdlIHJlY29tbWVuZCB1c2luZyBvbmx5IHRoaXMgZmlsdGVyIHBhcmFtZXRlciB0byBzZXQgdGhlIHZpZGVvIGJpdHJhdGUuXG4gICAqIERvIG5vdCBhbHNvIHNldCB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2aWRlbyBiaXRyYXRlIHZpYSB0aGUgTWVkaWFQYWNrYWdlXG4gICAqIGNvbnNvbGUgb3IgQVdTIENMSSwgYXMgeW91ciBvdXRwdXQgbWlnaHQgYmUgc2tld2VkLlxuICAgKlxuICAgKiBUaGlzIHBhcmFtZXRlciBjYW5ub3QgYmUgdXNlZCB3aXRoIHRyaWNrLXBsYXkgc3RyZWFtcy5cbiAgICpcbiAgICogQWNjZXB0ZWQgdmFsdWVzOiByYW5nZSAw4oCTMjE0NzQ4MzY0Nywgb3IgaW5kaXZpZHVhbCBpbnRlZ2Vycy5cbiAgICovXG4gIFZJREVPX0JJVFJBVEU9J3ZpZGVvX2JpdHJhdGUnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBudW1lcmljIGZpbHRlciBleHByZXNzaW9uIHNlZ21lbnQg4oCUIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhIHJhbmdlLlxuICpcbiAqIFVzZSB3aXRoIGBNYW5pZmVzdEZpbHRlci5udW1lcmljQ29tYm8oKWAgdG8gYnVpbGQgZmlsdGVycyB0aGF0IGNvbWJpbmVcbiAqIHJhbmdlcyBhbmQgaW5kaXZpZHVhbCB2YWx1ZXMgKGUuZy4gYHZpZGVvX2hlaWdodDoyNDAtMzYwLDcyMC0xMDgwLDE0NDBgKS5cbiAqL1xuZXhwb3J0IGNsYXNzIE51bWVyaWNFeHByZXNzaW9uIHtcbiAgLyoqXG4gICAqIEEgc2luZ2xlIG51bWVyaWMgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZhbHVlKHY6IG51bWJlcik6IE51bWVyaWNFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IE51bWVyaWNFeHByZXNzaW9uKGAke3Z9YCwgW3ZdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbmNsdXNpdmUgbnVtZXJpYyByYW5nZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmFuZ2Uoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBOdW1lcmljRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBOdW1lcmljRXhwcmVzc2lvbihgJHtzdGFydH0tJHtlbmR9YCwgW3N0YXJ0LCBlbmRdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICAvKiogQGludGVybmFsICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9leHByZXNzaW9uOiBzdHJpbmcsXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWFkb25seSBfdmFsdWVzOiBudW1iZXJbXSxcbiAgKSB7fVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBiaXRyYXRlIGZpbHRlciBleHByZXNzaW9uIHNlZ21lbnQg4oCUIGVpdGhlciBhIHNpbmdsZSB2YWx1ZSBvciBhIHJhbmdlLlxuICpcbiAqIFVzZSB3aXRoIGBNYW5pZmVzdEZpbHRlci5iaXRyYXRlQ29tYm8oKWAgdG8gYnVpbGQgZmlsdGVycyB0aGF0IGNvbWJpbmVcbiAqIHJhbmdlcyBhbmQgaW5kaXZpZHVhbCBiaXRyYXRlIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJpdHJhdGVFeHByZXNzaW9uIHtcbiAgLyoqXG4gICAqIEEgc2luZ2xlIGJpdHJhdGUgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZhbHVlKHY6IEJpdHJhdGUpOiBCaXRyYXRlRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBCaXRyYXRlRXhwcmVzc2lvbihgJHt2LnRvQnBzKCl9YCwgW3YudG9CcHMoKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuIGluY2x1c2l2ZSBiaXRyYXRlIHJhbmdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByYW5nZShzdGFydDogQml0cmF0ZSwgZW5kOiBCaXRyYXRlKTogQml0cmF0ZUV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgQml0cmF0ZUV4cHJlc3Npb24oYCR7c3RhcnQudG9CcHMoKX0tJHtlbmQudG9CcHMoKX1gLCBbc3RhcnQudG9CcHMoKSwgZW5kLnRvQnBzKCldKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICAvKiogQGludGVybmFsICovXG4gICAgcHVibGljIHJlYWRvbmx5IF9leHByZXNzaW9uOiBzdHJpbmcsXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWFkb25seSBfdmFsdWVzOiBudW1iZXJbXSxcbiAgKSB7fVxufVxuXG4vKipcbiAqIEVuYWJsZXMgeW91IHRvIGNyZWF0ZSBmaWx0ZXJzIGZvciB5b3VyIE9yaWdpbiBFbmRwb2ludC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tZWRpYXBhY2thZ2UvbGF0ZXN0L3VzZXJndWlkZS9tYW5pZmVzdC1maWx0ZXJpbmcuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgTWFuaWZlc3RGaWx0ZXIge1xuICAvKipcbiAgICogRmlsdGVyIGJ5IGEgc2luZ2xlIGJpdHJhdGUgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGJpdHJhdGUoa2V5OiBCaXRyYXRlRmlsdGVyS2V5LCB2YWx1ZTogQml0cmF0ZSkge1xuICAgIGNvbnN0IGJwcyA9IHZhbHVlLnRvQnBzKCk7XG4gICAgdmFsaWRhdGVCaXRyYXRlRmlsdGVyVmFsdWUoYnBzLCBrZXkpO1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3RGaWx0ZXIoYCR7a2V5fToke2Jwc31gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgYSBiaXRyYXRlIHJhbmdlIChpbmNsdXNpdmUpLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBiaXRyYXRlUmFuZ2Uoa2V5OiBCaXRyYXRlRmlsdGVyS2V5LCBzdGFydDogQml0cmF0ZSwgZW5kOiBCaXRyYXRlKSB7XG4gICAgY29uc3Qgc3RhcnRCcHMgPSBzdGFydC50b0JwcygpO1xuICAgIGNvbnN0IGVuZEJwcyA9IGVuZC50b0JwcygpO1xuICAgIHZhbGlkYXRlQml0cmF0ZUZpbHRlclZhbHVlKHN0YXJ0QnBzLCBrZXkpO1xuICAgIHZhbGlkYXRlQml0cmF0ZUZpbHRlclZhbHVlKGVuZEJwcywga2V5KTtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGAke2tleX06JHtzdGFydEJwc30tJHtlbmRCcHN9YCk7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmeSBhIHNpbmdsZSBudW1lcmljIGZpbHRlciB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbnVtZXJpYyhrZXk6IE51bWVyaWNGaWx0ZXJLZXksIHZhbHVlOiBudW1iZXIpIHtcbiAgICB2YWxpZGF0ZU51bWVyaWNGaWx0ZXJWYWx1ZSh2YWx1ZSwga2V5KTtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGAke2tleX06JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IG11bHRpcGxlIG51bWVyaWMgZmlsdGVyIHZhbHVlcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbnVtZXJpY0xpc3Qoa2V5OiBOdW1lcmljRmlsdGVyS2V5LCB2YWx1ZXM6IG51bWJlcltdKSB7XG4gICAgdmFsdWVzLmZvckVhY2godiA9PiB2YWxpZGF0ZU51bWVyaWNGaWx0ZXJWYWx1ZSh2LCBrZXkpKTtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGAke2tleX06JHt2YWx1ZXMuam9pbignLCcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBudW1lcmljIGZpbHRlciByYW5nZSAoaW5jbHVzaXZlKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbnVtZXJpY1JhbmdlKGtleTogTnVtZXJpY0ZpbHRlcktleSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICB2YWxpZGF0ZU51bWVyaWNGaWx0ZXJWYWx1ZShzdGFydCwga2V5KTtcbiAgICB2YWxpZGF0ZU51bWVyaWNGaWx0ZXJWYWx1ZShlbmQsIGtleSk7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgJHtrZXl9OiR7c3RhcnR9LSR7ZW5kfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBmcmVlLWZvcm0gdGV4dCBmaWx0ZXIgdmFsdWUgKGZvciBsYW5ndWFnZSBrZXlzKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdGV4dChrZXk6IFRleHRGaWx0ZXJLZXksIHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGAke2tleX06JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IG11bHRpcGxlIGZyZWUtZm9ybSB0ZXh0IGZpbHRlciB2YWx1ZXMgKGZvciBsYW5ndWFnZSBrZXlzKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdGV4dExpc3Qoa2V5OiBUZXh0RmlsdGVyS2V5LCB2YWx1ZXM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgJHtrZXl9OiR7dmFsdWVzLmpvaW4oJywnKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgYSBzaW5nbGUgYXVkaW8gY29kZWMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF1ZGlvQ29kZWModmFsdWU6IEF1ZGlvQ29kZWMpIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGBhdWRpb19jb2RlYzoke3ZhbHVlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBtdWx0aXBsZSBhdWRpbyBjb2RlY3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF1ZGlvQ29kZWNMaXN0KHZhbHVlczogQXVkaW9Db2RlY1tdKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgYXVkaW9fY29kZWM6JHt2YWx1ZXMuam9pbignLCcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBhIHNpbmdsZSB2aWRlbyBjb2RlYy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmlkZW9Db2RlYyh2YWx1ZTogVmlkZW9Db2RlYykge1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3RGaWx0ZXIoYHZpZGVvX2NvZGVjOiR7dmFsdWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGJ5IG11bHRpcGxlIHZpZGVvIGNvZGVjcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmlkZW9Db2RlY0xpc3QodmFsdWVzOiBWaWRlb0NvZGVjW10pIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGB2aWRlb19jb2RlYzoke3ZhbHVlcy5qb2luKCcsJyl9YCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGEgc2luZ2xlIHZpZGVvIGR5bmFtaWMgcmFuZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZpZGVvRHluYW1pY1JhbmdlKHZhbHVlOiBWaWRlb0R5bmFtaWNSYW5nZSkge1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3RGaWx0ZXIoYHZpZGVvX2R5bmFtaWNfcmFuZ2U6JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgbXVsdGlwbGUgdmlkZW8gZHluYW1pYyByYW5nZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZpZGVvRHluYW1pY1JhbmdlTGlzdCh2YWx1ZXM6IFZpZGVvRHluYW1pY1JhbmdlW10pIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGB2aWRlb19keW5hbWljX3JhbmdlOiR7dmFsdWVzLmpvaW4oJywnKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgYSBzaW5nbGUgdHJpY2twbGF5IHR5cGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRyaWNrcGxheVR5cGUodmFsdWU6IFRyaWNrcGxheVR5cGUpIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGB0cmlja3BsYXlfdHlwZToke3ZhbHVlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBtdWx0aXBsZSB0cmlja3BsYXkgdHlwZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRyaWNrcGxheVR5cGVMaXN0KHZhbHVlczogVHJpY2twbGF5VHlwZVtdKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgdHJpY2twbGF5X3R5cGU6JHt2YWx1ZXMuam9pbignLCcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBhIGNvbWJpbmF0aW9uIG9mIG51bWVyaWMgcmFuZ2VzIGFuZCBpbmRpdmlkdWFsIHZhbHVlcy5cbiAgICpcbiAgICogVXNlIHRoaXMgZm9yIGFkdmFuY2VkIHBhdHRlcm5zIGxpa2UgYHZpZGVvX2hlaWdodDoyNDAtMzYwLDcyMC0xMDgwLDE0NDBgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBNYW5pZmVzdEZpbHRlci5udW1lcmljQ29tYm8oTnVtZXJpY0ZpbHRlcktleS5WSURFT19IRUlHSFQsIFtcbiAgICogICBOdW1lcmljRXhwcmVzc2lvbi5yYW5nZSgyNDAsIDM2MCksXG4gICAqICAgTnVtZXJpY0V4cHJlc3Npb24ucmFuZ2UoNzIwLCAxMDgwKSxcbiAgICogICBOdW1lcmljRXhwcmVzc2lvbi52YWx1ZSgxNDQwKSxcbiAgICogXSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbnVtZXJpY0NvbWJvKGtleTogTnVtZXJpY0ZpbHRlcktleSwgZXhwcmVzc2lvbnM6IE51bWVyaWNFeHByZXNzaW9uW10pIHtcbiAgICBleHByZXNzaW9ucy5mb3JFYWNoKGV4cHIgPT4gZXhwci5fdmFsdWVzLmZvckVhY2godiA9PiB2YWxpZGF0ZU51bWVyaWNGaWx0ZXJWYWx1ZSh2LCBrZXkpKSk7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgJHtrZXl9OiR7ZXhwcmVzc2lvbnMubWFwKGUgPT4gZS5fZXhwcmVzc2lvbikuam9pbignLCcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBhIGNvbWJpbmF0aW9uIG9mIGJpdHJhdGUgcmFuZ2VzIGFuZCBpbmRpdmlkdWFsIHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogTWFuaWZlc3RGaWx0ZXIuYml0cmF0ZUNvbWJvKEJpdHJhdGVGaWx0ZXJLZXkuVklERU9fQklUUkFURSwgW1xuICAgKiAgIEJpdHJhdGVFeHByZXNzaW9uLnJhbmdlKEJpdHJhdGUubWJwcygxKSwgQml0cmF0ZS5tYnBzKDMpKSxcbiAgICogICBCaXRyYXRlRXhwcmVzc2lvbi52YWx1ZShCaXRyYXRlLm1icHMoNSkpLFxuICAgKiBdKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBiaXRyYXRlQ29tYm8oa2V5OiBCaXRyYXRlRmlsdGVyS2V5LCBleHByZXNzaW9uczogQml0cmF0ZUV4cHJlc3Npb25bXSkge1xuICAgIGV4cHJlc3Npb25zLmZvckVhY2goZXhwciA9PiBleHByLl92YWx1ZXMuZm9yRWFjaCh2ID0+IHZhbGlkYXRlQml0cmF0ZUZpbHRlclZhbHVlKHYsIGtleSkpKTtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGAke2tleX06JHtleHByZXNzaW9ucy5tYXAoZSA9PiBlLl9leHByZXNzaW9uKS5qb2luKCcsJyl9YCk7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmeSBhIGN1c3RvbSBtYW5pZmVzdCBmaWx0ZXIgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjdXN0b20oY3VzdG9tOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGN1c3RvbSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGZpbHRlclN0cmluZyBOb3JtYWxpc2VkIG1hbmlmZXN0IGZpbHRlciBzdHJpbmdcbiAgICovXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZmlsdGVyU3RyaW5nOiBzdHJpbmcpIHsgfVxufVxuXG4vKipcbiAqIENvbnRleHQgcGFzc2VkIHRvIE1hbmlmZXN0Ll9iaW5kKCkgbWV0aG9kXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYW5pZmVzdEJpbmRDb250ZXh0IHtcbiAgcmVhZG9ubHkgaGxzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5IbHNNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdO1xuICByZWFkb25seSBsbEhsc01hbmlmZXN0czogQ2ZuT3JpZ2luRW5kcG9pbnQuTG93TGF0ZW5jeUhsc01hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5W107XG4gIHJlYWRvbmx5IGRhc2hNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50LkRhc2hNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdO1xuICByZWFkb25seSBtc3NNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50Lk1zc01hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5W107XG4gIHJlYWRvbmx5IHNlZ21lbnQ/OiBTZWdtZW50Q29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBNYW5pZmVzdCB0byBhZGQgdG8gT3JpZ2luIEVuZHBvaW50XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNYW5pZmVzdCB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IGEgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBmb3IgTG93IExhdGVuY3kgSExTLlxuICAgKlxuICAgKiAqKk5vdGU6KiogTG93IExhdGVuY3kgSExTIG1hbmlmZXN0cyByZXF1aXJlIFRTIG9yIENNQUYgY29udGFpbmVyIHR5cGUuXG4gICAqIFVzZSB3aXRoIGBTZWdtZW50LnRzKClgIG9yIGBTZWdtZW50LmNtYWYoKWAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGxvd0xhdGVuY3lITFMobWFuaWZlc3Q6IExvd0xhdGVuY3lIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBNYW5pZmVzdCB7XG4gICAgcmV0dXJuIG5ldyBMb3dMYXRlbmN5SGxzTWFuaWZlc3QobWFuaWZlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGZvciBITFMuXG4gICAqXG4gICAqICoqTm90ZToqKiBITFMgbWFuaWZlc3RzIHJlcXVpcmUgVFMgb3IgQ01BRiBjb250YWluZXIgdHlwZS5cbiAgICogVXNlIHdpdGggYFNlZ21lbnQudHMoKWAgb3IgYFNlZ21lbnQuY21hZigpYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaGxzKG1hbmlmZXN0OiBIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBNYW5pZmVzdCB7XG4gICAgcmV0dXJuIG5ldyBIbHNNYW5pZmVzdChtYW5pZmVzdCk7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmeSBhIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gZm9yIERBU0guXG4gICAqXG4gICAqICoqTm90ZToqKiBEQVNIIG1hbmlmZXN0cyByZXF1aXJlIENNQUYgY29udGFpbmVyIHR5cGUuXG4gICAqIFVzZSB3aXRoIGBTZWdtZW50LmNtYWYoKWAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGRhc2gobWFuaWZlc3Q6IERhc2hNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBNYW5pZmVzdCB7XG4gICAgcmV0dXJuIG5ldyBEYXNoTWFuaWZlc3QobWFuaWZlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGZvciBNU1MuXG4gICAqXG4gICAqICoqTm90ZToqKiBNU1MgbWFuaWZlc3RzIHJlcXVpcmUgSVNNIGNvbnRhaW5lciB0eXBlLlxuICAgKiBVc2Ugd2l0aCBgU2VnbWVudC5pc20oKWAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1zcyhtYW5pZmVzdDogTXNzTWFuaWZlc3RDb25maWd1cmF0aW9uKTogTWFuaWZlc3Qge1xuICAgIHJldHVybiBuZXcgTXNzTWFuaWZlc3QobWFuaWZlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBtYW5pZmVzdCBpcyBib3VuZCB0byBhbiBPcmlnaW5FbmRwb2ludC5cbiAgICpcbiAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdXNlZCBieSB0aGUgY29uc3RydWN0IGxpYnJhcnkgYW5kIHNob3VsZCBub3QgYmVcbiAgICogY2FsbGVkIG9yIGltcGxlbWVudGVkIGJ5IGV4dGVybmFsIGNvbnN1bWVycy4gSXQgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgX2JpbmQoY29udGV4dDogTWFuaWZlc3RCaW5kQ29udGV4dCk6IHZvaWQ7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBudW1lcmljIGZpbHRlciB2YWx1ZSBpcyBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgYWNjZXB0ZWQgcmFuZ2UgZm9yIGl0cyBrZXkuXG4gKiBWSURFT19GUkFNRVJBVEUgaXMgZXhjbHVkZWQg4oCUIGl0IHVzZXMgYHZhbGlkYXRlRnJhbWVyYXRlVmFsdWVgIGluc3RlYWQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnRlZ2VyRmlsdGVyVmFsdWUodmFsdWU6IG51bWJlciwga2V5OiBOdW1lcmljRmlsdGVyS2V5LCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTnVtZXJpY0ZpbHRlck11c3RCZUludGVnZXJgLCBgTnVtZXJpYyBmaWx0ZXIgdmFsdWUgZm9yICcke2tleX0nIG11c3QgYmUgYW4gaW50ZWdlciwgZ290ICR7dmFsdWV9YCk7XG4gIH1cbiAgaWYgKHZhbHVlIDwgbWluIHx8IHZhbHVlID4gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBOdW1lcmljRmlsdGVyT3V0T2ZSYW5nZWAsIGBOdW1lcmljIGZpbHRlciB2YWx1ZSBmb3IgJyR7a2V5fScgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9LCBnb3QgJHt2YWx1ZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgdmlkZW8gZnJhbWVyYXRlIGZpbHRlciB2YWx1ZSAoMeKAkzk5OS45OTksIHVwIHRvIDMgZGVjaW1hbCBwbGFjZXMpLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhbWVyYXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICBpZiAodmFsdWUgPCAxIHx8IHZhbHVlID4gOTk5Ljk5OSkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTnVtZXJpY0ZpbHRlck91dE9mUmFuZ2VgLCBgTnVtZXJpYyBmaWx0ZXIgdmFsdWUgZm9yICd2aWRlb19mcmFtZXJhdGUnIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA5OTkuOTk5LCBnb3QgJHt2YWx1ZX1gKTtcbiAgfVxuICBjb25zdCBkZWNpbWFsUGFydCA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXTtcbiAgaWYgKGRlY2ltYWxQYXJ0ICYmIGRlY2ltYWxQYXJ0Lmxlbmd0aCA+IDMpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE51bWVyaWNGaWx0ZXJNYXhEZWNpbWFsUGxhY2VzYCwgYE51bWVyaWMgZmlsdGVyIHZhbHVlIGZvciAndmlkZW9fZnJhbWVyYXRlJyBhbGxvd3MgdXAgdG8gMyBkZWNpbWFsIHBsYWNlcywgZ290ICR7dmFsdWV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSb3V0ZSBudW1lcmljIHZhbGlkYXRpb24gdG8gdGhlIGNvcnJlY3QgaGVscGVyIGJhc2VkIG9uIGtleS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWVyaWNGaWx0ZXJWYWx1ZSh2YWx1ZTogbnVtYmVyLCBrZXk6IE51bWVyaWNGaWx0ZXJLZXkpOiB2b2lkIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlIE51bWVyaWNGaWx0ZXJLZXkuQVVESU9fQ0hBTk5FTFM6XG4gICAgICByZXR1cm4gdmFsaWRhdGVJbnRlZ2VyRmlsdGVyVmFsdWUodmFsdWUsIGtleSwgMSwgMzJfNzY3KTtcbiAgICBjYXNlIE51bWVyaWNGaWx0ZXJLZXkuQVVESU9fU0FNUExFX1JBVEU6XG4gICAgICByZXR1cm4gdmFsaWRhdGVJbnRlZ2VyRmlsdGVyVmFsdWUodmFsdWUsIGtleSwgMCwgMl8xNDdfNDgzXzY0Nyk7XG4gICAgY2FzZSBOdW1lcmljRmlsdGVyS2V5LlRSSUNLUExBWV9IRUlHSFQ6XG4gICAgICByZXR1cm4gdmFsaWRhdGVJbnRlZ2VyRmlsdGVyVmFsdWUodmFsdWUsIGtleSwgMSwgMl8xNDdfNDgzXzY0Nyk7XG4gICAgY2FzZSBOdW1lcmljRmlsdGVyS2V5LlZJREVPX0ZSQU1FUkFURTpcbiAgICAgIHJldHVybiB2YWxpZGF0ZUZyYW1lcmF0ZVZhbHVlKHZhbHVlKTtcbiAgICBjYXNlIE51bWVyaWNGaWx0ZXJLZXkuVklERU9fSEVJR0hUOlxuICAgICAgcmV0dXJuIHZhbGlkYXRlSW50ZWdlckZpbHRlclZhbHVlKHZhbHVlLCBrZXksIDEsIDMyXzc2Nyk7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGJpdHJhdGUgZmlsdGVyIHZhbHVlIGlzIGFuIGludGVnZXIgd2l0aGluIHRoZSBhY2NlcHRlZCByYW5nZS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJpdHJhdGVGaWx0ZXJWYWx1ZShicHM6IG51bWJlciwga2V5OiBCaXRyYXRlRmlsdGVyS2V5KTogdm9pZCB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihicHMpKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBCaXRyYXRlRmlsdGVyTXVzdEJlSW50ZWdlcmAsIGBCaXRyYXRlIGZpbHRlciB2YWx1ZSBmb3IgJyR7a2V5fScgbXVzdCByZXNvbHZlIHRvIGEgd2hvbGUgbnVtYmVyIG9mIGJpdHMgcGVyIHNlY29uZCwgZ290ICR7YnBzfWApO1xuICB9XG4gIGlmIChicHMgPCAwIHx8IGJwcyA+IDJfMTQ3XzQ4M182NDcpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEJpdHJhdGVGaWx0ZXJPdXRPZlJhbmdlYCwgYEJpdHJhdGUgZmlsdGVyIHZhbHVlIGZvciAnJHtrZXl9JyBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMjE0NzQ4MzY0NywgZ290ICR7YnBzfWApO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGNvbW1vbiBtYW5pZmVzdCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVNYW5pZmVzdENvbmZpZ3VyYXRpb24oY29uZmlnOiBNYW5pZmVzdENvbmZpZ3VyYXRpb25CYXNlKTogdm9pZCB7XG4gIGlmIChjb25maWcubWFuaWZlc3RXaW5kb3cgJiYgY29uZmlnLm1hbmlmZXN0V2luZG93LnRvU2Vjb25kcygpIDwgMzApIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE1hbmlmZXN0V2luZG93TWluaW11bWAsICdNYW5pZmVzdCBXaW5kb3cgaGFzIGEgbWluaW11bSB2YWx1ZSBvZiAzMCBzZWNvbmRzJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhbmQgbW9kaWZ5IGZpbHRlciBjb25maWd1cmF0aW9uXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGaWx0ZXJDb25maWd1cmF0aW9uKGZpbHRlckNvbmZpZz86IEZpbHRlckNvbmZpZ3VyYXRpb24pOiBDZm5PcmlnaW5FbmRwb2ludC5GaWx0ZXJDb25maWd1cmF0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICBpZiAoIWZpbHRlckNvbmZpZykgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBpZiAoZmlsdGVyQ29uZmlnLmNsaXBTdGFydFRpbWUgJiYgKGZpbHRlckNvbmZpZy5zdGFydCB8fCBmaWx0ZXJDb25maWcuZW5kKSkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgQ2xpcFN0YXJ0VGltZUNvbmZsaWN0YCwgJ1lvdSBjYW5ub3Qgc3BlY2lmeSBib3RoIENsaXBTdGFydFRpbWUgd2l0aCBTdGFydCBvciBFbmQgaW4gYSBGaWx0ZXJDb25maWd1cmF0aW9uLicpO1xuICB9XG5cbiAgaWYgKGZpbHRlckNvbmZpZy50aW1lRGVsYXkgJiYgKGZpbHRlckNvbmZpZy50aW1lRGVsYXkudG9TZWNvbmRzKCkgPCAwIHx8IGZpbHRlckNvbmZpZy50aW1lRGVsYXkudG9TZWNvbmRzKCkgPiAxMjA5NjAwKSkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVGltZURlbGF5UmFuZ2VgLCAnVGltZSBEZWxheSBzZXR0aW5nIHNob3VsZCBiZSBkZWZpbmVkIGJldHdlZW4gMC0xMjA5NjAwIHNlY29uZHMuJyk7XG4gIH1cblxuICBpZiAoZmlsdGVyQ29uZmlnLnN0YXJ0ICYmIGZpbHRlckNvbmZpZy5lbmQgJiYgKGZpbHRlckNvbmZpZy5lbmQgPD0gZmlsdGVyQ29uZmlnLnN0YXJ0KSkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgRW5kQmVmb3JlU3RhcnRgLCAnVGhlIEVuZCBwYXJhbWV0ZXIgbmVlZHMgdG8gYmUgYWZ0ZXIgdGhlIFN0YXJ0IHBhcmFtZXRlciBpbiBhIEZpbHRlckNvbmZpZ3VyYXRpb24uJyk7XG4gIH1cblxuICBjb25zdCBtYW5pZmVzdEZpbHRlciA9IGZpbHRlckNvbmZpZy5tYW5pZmVzdEZpbHRlciA/IGZpbHRlckNvbmZpZy5tYW5pZmVzdEZpbHRlci5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXJTdHJpbmcpLmpvaW4oJzsnKSA6IHVuZGVmaW5lZDtcbiAgaWYgKG1hbmlmZXN0RmlsdGVyICE9IHVuZGVmaW5lZCAmJiAobWFuaWZlc3RGaWx0ZXIubGVuZ3RoIDwgMSB8fCBtYW5pZmVzdEZpbHRlci5sZW5ndGggPiAxMDI0KSkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTWFuaWZlc3RGaWx0ZXJMZW5ndGhgLCAnTWFuaWZlc3QgZmlsdGVyIG5lZWRzIHRvIGJlIGJldHdlZW4gMS0xMDI0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLicpO1xuICB9XG5cbiAgaWYgKGZpbHRlckNvbmZpZy5tYW5pZmVzdEZpbHRlciAmJiBmaWx0ZXJDb25maWcubWFuaWZlc3RGaWx0ZXIubGVuZ3RoID4gMSkge1xuICAgIGNvbnN0IGtleXMgPSBmaWx0ZXJDb25maWcubWFuaWZlc3RGaWx0ZXIubWFwKGYgPT4gZi5maWx0ZXJTdHJpbmcuc3BsaXQoJzonKVswXSk7XG4gICAga2V5cy5mb3JFYWNoKChrZXksIGkpID0+IHtcbiAgICAgIGlmIChrZXlzLmluZGV4T2Yoa2V5KSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YER1cGxpY2F0ZU1hbmlmZXN0RmlsdGVyS2V5YCwgYER1cGxpY2F0ZSBtYW5pZmVzdCBmaWx0ZXIga2V5ICcke2tleX0nLiBVc2UgYSBzaW5nbGUgZmlsdGVyIHdpdGggY29tbWEtc2VwYXJhdGVkIHZhbHVlcyBpbnN0ZWFkIChlLmcuIE1hbmlmZXN0RmlsdGVyLm51bWVyaWNMaXN0KCkgb3IgTWFuaWZlc3RGaWx0ZXIuY3VzdG9tKCkpLmApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYW5pZmVzdEZpbHRlcixcbiAgICBkcm1TZXR0aW5nczogZmlsdGVyQ29uZmlnLmRybVNldHRpbmdzID8gZmlsdGVyQ29uZmlnLmRybVNldHRpbmdzLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKS5qb2luKCc7JykgOiB1bmRlZmluZWQsXG4gICAgY2xpcFN0YXJ0VGltZTogZmlsdGVyQ29uZmlnLmNsaXBTdGFydFRpbWUgPyBjb252ZXJ0RGF0ZVRvU3RyaW5nKGZpbHRlckNvbmZpZy5jbGlwU3RhcnRUaW1lKSA6IHVuZGVmaW5lZCxcbiAgICBzdGFydDogZmlsdGVyQ29uZmlnLnN0YXJ0ID8gY29udmVydERhdGVUb1N0cmluZyhmaWx0ZXJDb25maWcuc3RhcnQpIDogdW5kZWZpbmVkLFxuICAgIGVuZDogZmlsdGVyQ29uZmlnLmVuZCA/IGNvbnZlcnREYXRlVG9TdHJpbmcoZmlsdGVyQ29uZmlnLmVuZCkgOiB1bmRlZmluZWQsXG4gICAgdGltZURlbGF5U2Vjb25kczogZmlsdGVyQ29uZmlnLnRpbWVEZWxheT8udG9TZWNvbmRzKCksXG4gIH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgc3RhcnRUYWcgY29uZmlndXJhdGlvblxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhcnRUYWcoc3RhcnRUYWc6IFN0YXJ0VGFnLCBtYW5pZmVzdFdpbmRvdz86IER1cmF0aW9uLCBzZWdtZW50RHVyYXRpb24/OiBEdXJhdGlvbik6IHZvaWQge1xuICBjb25zdCB0aW1lT2Zmc2V0ID0gc3RhcnRUYWcudGltZU9mZnNldDtcblxuICAvLyBHZXQgc2VnbWVudCBkdXJhdGlvbiAoZGVmYXVsdCBpcyA2IHNlY29uZHMgaWYgbm90IHNwZWNpZmllZClcbiAgY29uc3Qgc2VnbWVudER1cmF0aW9uU2VjID0gc2VnbWVudER1cmF0aW9uPy50b1NlY29uZHMoKSA/PyA2O1xuXG4gIC8vIEdldCBtYW5pZmVzdCBkdXJhdGlvbiAoZGVmYXVsdCBpcyA2MCBzZWNvbmRzIGlmIG5vdCBzcGVjaWZpZWQpXG4gIGNvbnN0IG1hbmlmZXN0RHVyYXRpb25TZWMgPSBtYW5pZmVzdFdpbmRvdz8udG9TZWNvbmRzKCkgPz8gNjA7XG5cbiAgLy8gVmFsaWRhdGUgcG9zaXRpdmUgb2Zmc2V0IChmcm9tIHN0YXJ0KVxuICBpZiAodGltZU9mZnNldCA+IDApIHtcbiAgICBjb25zdCBtYXhQb3NpdGl2ZU9mZnNldCA9IG1hbmlmZXN0RHVyYXRpb25TZWMgLSAoMyAqIHNlZ21lbnREdXJhdGlvblNlYyk7XG4gICAgaWYgKHRpbWVPZmZzZXQgPj0gbWF4UG9zaXRpdmVPZmZzZXQpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgU3RhcnRUYWdQb3NpdGl2ZU9mZnNldEV4Y2VlZGVkYCwgYFN0YXJ0VGFnIHRpbWVPZmZzZXQgKCR7dGltZU9mZnNldH1zKSBtdXN0IGJlIGxlc3MgdGhhbiBtYW5pZmVzdCBkdXJhdGlvbiAoJHttYW5pZmVzdER1cmF0aW9uU2VjfXMpIG1pbnVzIDMgdGltZXMgc2VnbWVudCBkdXJhdGlvbiAoJHtzZWdtZW50RHVyYXRpb25TZWN9cykuIE1heGltdW0gYWxsb3dlZDogJHttYXhQb3NpdGl2ZU9mZnNldH1zYCk7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgbmVnYXRpdmUgb2Zmc2V0IChmcm9tIGxpdmUgZWRnZSlcbiAgaWYgKHRpbWVPZmZzZXQgPCAwKSB7XG4gICAgY29uc3QgYWJzT2Zmc2V0ID0gTWF0aC5hYnModGltZU9mZnNldCk7XG4gICAgY29uc3QgbWluTmVnYXRpdmVPZmZzZXQgPSAzICogc2VnbWVudER1cmF0aW9uU2VjO1xuXG4gICAgaWYgKGFic09mZnNldCA8PSBtaW5OZWdhdGl2ZU9mZnNldCkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBTdGFydFRhZ05lZ2F0aXZlT2Zmc2V0VG9vU21hbGxgLCBgU3RhcnRUYWcgdGltZU9mZnNldCAoJHt0aW1lT2Zmc2V0fXMpIGFic29sdXRlIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDMgdGltZXMgc2VnbWVudCBkdXJhdGlvbiAoJHtzZWdtZW50RHVyYXRpb25TZWN9cykuIE1pbmltdW0gYWxsb3dlZDogLSR7bWluTmVnYXRpdmVPZmZzZXQgKyAwLjAxfXNgKTtcbiAgICB9XG5cbiAgICBpZiAoYWJzT2Zmc2V0ID49IG1hbmlmZXN0RHVyYXRpb25TZWMpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgU3RhcnRUYWdOZWdhdGl2ZU9mZnNldEV4Y2VlZHNNYW5pZmVzdGAsIGBTdGFydFRhZyB0aW1lT2Zmc2V0ICgke3RpbWVPZmZzZXR9cykgYWJzb2x1dGUgdmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gbWFuaWZlc3QgZHVyYXRpb24gKCR7bWFuaWZlc3REdXJhdGlvblNlY31zKWApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEJ1aWxkIEhMUyBtYW5pZmVzdCBjb25maWd1cmF0aW9uXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gYnVpbGRIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb24oXG4gIGNvbmZpZzogSGxzTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuICBzZWdtZW50RHVyYXRpb24/OiBEdXJhdGlvbixcbik6IENmbk9yaWdpbkVuZHBvaW50Lkhsc01hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5IHtcbiAgaWYgKGNvbmZpZy5zdGFydFRhZykge1xuICAgIHZhbGlkYXRlU3RhcnRUYWcoY29uZmlnLnN0YXJ0VGFnLCBjb25maWcubWFuaWZlc3RXaW5kb3csIHNlZ21lbnREdXJhdGlvbik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hbmlmZXN0TmFtZTogY29uZmlnLm1hbmlmZXN0TmFtZSxcbiAgICBjaGlsZE1hbmlmZXN0TmFtZTogY29uZmlnLmNoaWxkTWFuaWZlc3ROYW1lLFxuICAgIG1hbmlmZXN0V2luZG93U2Vjb25kczogY29uZmlnLm1hbmlmZXN0V2luZG93Py50b1NlY29uZHMoKSxcbiAgICBwcm9ncmFtRGF0ZVRpbWVJbnRlcnZhbFNlY29uZHM6IGNvbmZpZy5wcm9ncmFtRGF0ZVRpbWVJbnRlcnZhbD8udG9TZWNvbmRzKCksXG4gICAgc2N0ZUhsczogY29uZmlnLnNjdGVBZE1hcmtlckhscyA/IHsgYWRNYXJrZXJIbHM6IGNvbmZpZy5zY3RlQWRNYXJrZXJIbHMgfSA6IHVuZGVmaW5lZCxcbiAgICBzdGFydFRhZzogY29uZmlnLnN0YXJ0VGFnLFxuICAgIHVybEVuY29kZUNoaWxkTWFuaWZlc3Q6IGNvbmZpZy51cmxFbmNvZGVDaGlsZE1hbmlmZXN0LFxuICAgIGZpbHRlckNvbmZpZ3VyYXRpb246IHZhbGlkYXRlRmlsdGVyQ29uZmlndXJhdGlvbihjb25maWcuZmlsdGVyQ29uZmlndXJhdGlvbiksXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgREFTSCBtYW5pZmVzdCBjb25maWd1cmF0aW9uXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gYnVpbGREYXNoTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuICBjb25maWc6IERhc2hNYW5pZmVzdENvbmZpZ3VyYXRpb24sXG4gIHNlZ21lbnQ/OiBTZWdtZW50Q29uZmlndXJhdGlvbixcbik6IENmbk9yaWdpbkVuZHBvaW50LkRhc2hNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eSB7XG4gIGlmIChjb25maWcubWluQnVmZmVyVGltZSAmJiAoY29uZmlnLm1pbkJ1ZmZlclRpbWUudG9TZWNvbmRzKCkgPCAxIHx8IGNvbmZpZy5taW5CdWZmZXJUaW1lLnRvU2Vjb25kcygpID4gMzYwMCkpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE1pbkJ1ZmZlclRpbWVSYW5nZWAsICdNaW4gYnVmZmVyIHRpbWUgaGFzIGEgcmFuZ2UgZnJvbSAxIHNlYy4gdG8gMzYwMCBzZWMuJyk7XG4gIH1cbiAgaWYgKGNvbmZpZy5taW5VcGRhdGVQZXJpb2QgJiYgKGNvbmZpZy5taW5VcGRhdGVQZXJpb2QudG9TZWNvbmRzKCkgPCAxIHx8IGNvbmZpZy5taW5VcGRhdGVQZXJpb2QudG9TZWNvbmRzKCkgPiAzNjAwKSkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTWluVXBkYXRlUGVyaW9kUmFuZ2VgLCAnTWluIHVwZGF0ZSBwZXJpb2Qgb3B0aW9uIGhhcyBhIHJhbmdlIGZyb20gMSBzZWMuIHRvIDM2MDAgc2VjLicpO1xuICB9XG4gIGlmIChjb25maWcuc2N0ZURhc2hBZE1hcmtlciAmJiAoIXNlZ21lbnQ/LnNjdGVGaWx0ZXIgfHwgc2VnbWVudC5zY3RlRmlsdGVyPy5sZW5ndGggPT09IDApKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBTY3RlRmlsdGVyUmVxdWlyZWRgLCAnU0NURSBGaWx0ZXIgbXVzdCBiZSBjb25maWd1cmVkIHdpdGggRGFzaEFkTWFya2VyIENvbmZpZ3VyYXRpb24nKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWFuaWZlc3ROYW1lOiBjb25maWcubWFuaWZlc3ROYW1lLFxuICAgIGJhc2VVcmxzOiBjb25maWcuYmFzZVVybHMsXG4gICAgY29tcGFjdG5lc3M6IGNvbmZpZy5jb21wYWN0bmVzcyxcbiAgICBkcm1TaWduYWxpbmc6IGNvbmZpZy5kcm1TaWduYWxsaW5nLFxuICAgIGR2YlNldHRpbmdzOiBjb25maWcuZHZiU2V0dGluZ3MsXG4gICAgcHJvZmlsZXM6IGNvbmZpZy5wcm9maWxlcyxcbiAgICBwcm9ncmFtSW5mb3JtYXRpb246IGNvbmZpZy5wcm9ncmFtSW5mb3JtYXRpb24sXG4gICAgc3VidGl0bGVDb25maWd1cmF0aW9uOiBjb25maWcuc3VidGl0bGVDb25maWd1cmF0aW9uLFxuICAgIG1hbmlmZXN0V2luZG93U2Vjb25kczogY29uZmlnLm1hbmlmZXN0V2luZG93Py50b1NlY29uZHMoKSxcbiAgICBtaW5CdWZmZXJUaW1lU2Vjb25kczogY29uZmlnLm1pbkJ1ZmZlclRpbWU/LnRvU2Vjb25kcygpLFxuICAgIG1pblVwZGF0ZVBlcmlvZFNlY29uZHM6IGNvbmZpZy5taW5VcGRhdGVQZXJpb2Q/LnRvU2Vjb25kcygpLFxuICAgIHN1Z2dlc3RlZFByZXNlbnRhdGlvbkRlbGF5U2Vjb25kczogY29uZmlnLnN1Z2dlc3RlZFByZXNlbnRhdGlvbkRlbGF5Py50b1NlY29uZHMoKSxcbiAgICBzZWdtZW50VGVtcGxhdGVGb3JtYXQ6IGNvbmZpZy5zZWdtZW50VGVtcGxhdGVGb3JtYXQsXG4gICAgcGVyaW9kVHJpZ2dlcnM6IGNvbmZpZy5wZXJpb2RUcmlnZ2VycyxcbiAgICBzY3RlRGFzaDogc2VnbWVudD8uc2N0ZUZpbHRlciA/IHtcbiAgICAgIGFkTWFya2VyRGFzaDogY29uZmlnLnNjdGVEYXNoQWRNYXJrZXIsXG4gICAgfSA6IHVuZGVmaW5lZCxcbiAgICB1dGNUaW1pbmc6IGNvbmZpZy51dGNUaW1pbmdNb2RlIHx8IGNvbmZpZy51dGNUaW1pbmdTb3VyY2UgPyB7XG4gICAgICB0aW1pbmdNb2RlOiBjb25maWcudXRjVGltaW5nTW9kZSxcbiAgICAgIHRpbWluZ1NvdXJjZTogY29uZmlnLnV0Y1RpbWluZ1NvdXJjZSxcbiAgICB9IDogdW5kZWZpbmVkLFxuICAgIGZpbHRlckNvbmZpZ3VyYXRpb246IHZhbGlkYXRlRmlsdGVyQ29uZmlndXJhdGlvbihjb25maWcuZmlsdGVyQ29uZmlndXJhdGlvbiksXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGQgTVNTIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb25cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiBidWlsZE1zc01hbmlmZXN0Q29uZmlndXJhdGlvbihjb25maWc6IE1zc01hbmlmZXN0Q29uZmlndXJhdGlvbik6IENmbk9yaWdpbkVuZHBvaW50Lk1zc01hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5IHtcbiAgcmV0dXJuIHtcbiAgICBtYW5pZmVzdE5hbWU6IGNvbmZpZy5tYW5pZmVzdE5hbWUsXG4gICAgbWFuaWZlc3RMYXlvdXQ6IGNvbmZpZy5tYW5pZmVzdExheW91dCxcbiAgICBtYW5pZmVzdFdpbmRvd1NlY29uZHM6IGNvbmZpZy5tYW5pZmVzdFdpbmRvdz8udG9TZWNvbmRzKCksXG4gICAgZmlsdGVyQ29uZmlndXJhdGlvbjogdmFsaWRhdGVGaWx0ZXJDb25maWd1cmF0aW9uKGNvbmZpZy5maWx0ZXJDb25maWd1cmF0aW9uKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBITFMgTWFuaWZlc3QgaW1wbGVtZW50YXRpb25cbiAqL1xuY2xhc3MgSGxzTWFuaWZlc3QgZXh0ZW5kcyBNYW5pZmVzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb24pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIF9iaW5kKGNvbnRleHQ6IE1hbmlmZXN0QmluZENvbnRleHQpOiB2b2lkIHtcbiAgICB2YWxpZGF0ZU1hbmlmZXN0Q29uZmlndXJhdGlvbih0aGlzLmNvbmZpZyk7XG4gICAgY29udGV4dC5obHNNYW5pZmVzdHMucHVzaChidWlsZEhsc01hbmlmZXN0Q29uZmlndXJhdGlvbih0aGlzLmNvbmZpZywgY29udGV4dC5zZWdtZW50Py5zZWdtZW50RHVyYXRpb24pKTtcbiAgfVxufVxuXG4vKipcbiAqIExvdyBMYXRlbmN5IEhMUyBNYW5pZmVzdCBpbXBsZW1lbnRhdGlvblxuICovXG5jbGFzcyBMb3dMYXRlbmN5SGxzTWFuaWZlc3QgZXh0ZW5kcyBNYW5pZmVzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBMb3dMYXRlbmN5SGxzTWFuaWZlc3RDb25maWd1cmF0aW9uKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZChjb250ZXh0OiBNYW5pZmVzdEJpbmRDb250ZXh0KTogdm9pZCB7XG4gICAgdmFsaWRhdGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odGhpcy5jb25maWcpO1xuICAgIGNvbnRleHQubGxIbHNNYW5pZmVzdHMucHVzaChidWlsZEhsc01hbmlmZXN0Q29uZmlndXJhdGlvbih0aGlzLmNvbmZpZywgY29udGV4dC5zZWdtZW50Py5zZWdtZW50RHVyYXRpb24pKTtcbiAgfVxufVxuXG4vKipcbiAqIERBU0ggTWFuaWZlc3QgaW1wbGVtZW50YXRpb25cbiAqL1xuY2xhc3MgRGFzaE1hbmlmZXN0IGV4dGVuZHMgTWFuaWZlc3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogRGFzaE1hbmlmZXN0Q29uZmlndXJhdGlvbikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoY29udGV4dDogTWFuaWZlc3RCaW5kQ29udGV4dCk6IHZvaWQge1xuICAgIHZhbGlkYXRlTWFuaWZlc3RDb25maWd1cmF0aW9uKHRoaXMuY29uZmlnKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy51dGNUaW1pbmdNb2RlID09PSBEYXNoVXRjVGltaW5nTW9kZS5VVENfRElSRUNUICYmIHRoaXMuY29uZmlnLnV0Y1RpbWluZ1NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBVdGNEaXJlY3RUaW1pbmdTb3VyY2VgLCAnVVRDIERpcmVjdCBjb25maWd1cmVkIHdpdGggYSB0aW1pbmcgc291cmNlLCBlbnN1cmUgdGltaW5nIHNvdXJjZSBpcyB1bmRlZmluZWQgdG8gdXNlIFVUQyBEaXJlY3QuJyk7XG4gICAgfVxuXG4gICAgY29udGV4dC5kYXNoTWFuaWZlc3RzLnB1c2goYnVpbGREYXNoTWFuaWZlc3RDb25maWd1cmF0aW9uKHRoaXMuY29uZmlnLCBjb250ZXh0LnNlZ21lbnQpKTtcbiAgfVxufVxuXG4vKipcbiAqIE1TUyBNYW5pZmVzdCBpbXBsZW1lbnRhdGlvblxuICovXG5jbGFzcyBNc3NNYW5pZmVzdCBleHRlbmRzIE1hbmlmZXN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb25maWc6IE1zc01hbmlmZXN0Q29uZmlndXJhdGlvbikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoY29udGV4dDogTWFuaWZlc3RCaW5kQ29udGV4dCk6IHZvaWQge1xuICAgIHZhbGlkYXRlTWFuaWZlc3RDb25maWd1cmF0aW9uKHRoaXMuY29uZmlnKTtcbiAgICBjb250ZXh0Lm1zc01hbmlmZXN0cy5wdXNoKGJ1aWxkTXNzTWFuaWZlc3RDb25maWd1cmF0aW9uKHRoaXMuY29uZmlnKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgdHlwZSBvZiBjb250YWluZXIgdG8gYXR0YWNoIHRvIHRoaXMgb3JpZ2luIGVuZHBvaW50LlxuICogQSBjb250YWluZXIgdHlwZSBpcyBhIGZpbGUgZm9ybWF0IHRoYXQgZW5jYXBzdWxhdGVzIG9uZSBvciBtb3JlIG1lZGlhIHN0cmVhbXMsIHN1Y2ggYXMgYXVkaW8gYW5kIHZpZGVvLCBpbnRvIGEgc2luZ2xlIGZpbGUuIFlvdSBjYW4ndCBjaGFuZ2UgdGhlIGNvbnRhaW5lciB0eXBlIGFmdGVyIHlvdSBjcmVhdGUgdGhlIGVuZHBvaW50LlxuICovXG5leHBvcnQgZW51bSBDb250YWluZXJUeXBlIHtcbiAgLyoqXG4gICAqIFRTIENvbnRhaW5lciBUeXBlXG4gICAqL1xuICBUUz0nVFMnLFxuICAvKipcbiAgICogQ01BRiBDb250YWluZXIgVHlwZVxuICAgKi9cbiAgQ01BRj0nQ01BRicsXG4gIC8qKlxuICAgKiBJU00gQ29udGFpbmVyIFR5cGUgKE1pY3Jvc29mdCBTbW9vdGggU3RyZWFtaW5nKVxuICAgKi9cbiAgSVNNPSdJU00nLFxufVxuXG4vKipcbiAqIEVuY3J5cHRpb24gbWV0aG9kcyBmb3IgQ01BRiBjb250YWluZXIgdHlwZS5cbiAqL1xuZXhwb3J0IGVudW0gQ21hZkVuY3J5cHRpb25NZXRob2Qge1xuICAvKipcbiAgICogQ29tbW9uIEVuY3J5cHRpb24gU2NoZW1lIChDRU5DKSAtIGNvbXBhdGlibGUgd2l0aCBQbGF5UmVhZHksIFdpZGV2aW5lLCBhbmQgSXJkZXRvIERSTSBzeXN0ZW1zLlxuICAgKi9cbiAgQ0VOQyA9ICdDRU5DJyxcbiAgLyoqXG4gICAqIENvbW1vbiBFbmNyeXB0aW9uIFNjaGVtZSB3aXRoIENCQ1MgbW9kZSAtIGNvbXBhdGlibGUgd2l0aCBQbGF5UmVhZHksIFdpZGV2aW5lLCBhbmQgRmFpclBsYXkgRFJNIHN5c3RlbXMuXG4gICAqL1xuICBDQkNTID0gJ0NCQ1MnLFxufVxuXG4vKipcbiAqIEVuY3J5cHRpb24gbWV0aG9kcyBmb3IgVFMgY29udGFpbmVyIHR5cGUuXG4gKi9cbmV4cG9ydCBlbnVtIFRzRW5jcnlwdGlvbk1ldGhvZCB7XG4gIC8qKlxuICAgKiBBRVMtMTI4IGVuY3J5cHRpb24gLSByZXF1aXJlcyBDbGVhciBLZXkgQUVTIDEyOCBEUk0gc3lzdGVtLlxuICAgKi9cbiAgQUVTXzEyOCA9ICdBRVNfMTI4JyxcbiAgLyoqXG4gICAqIFNhbXBsZS1sZXZlbCBBRVMgZW5jcnlwdGlvbiAtIHJlcXVpcmVzIEZhaXJQbGF5IERSTSBzeXN0ZW0uXG4gICAqL1xuICBTQU1QTEVfQUVTID0gJ1NBTVBMRV9BRVMnLFxufVxuXG4vKipcbiAqIEEgY29sbGVjdGlvbiBvZiBhdWRpbyBlbmNyeXB0aW9uIHByZXNldHMuXG4gKi9cbmV4cG9ydCBlbnVtIFByZXNldFNwZWtlMjBBdWRpbyB7XG4gIC8qKlxuICAgKiBVc2Ugb25lIGNvbnRlbnQga2V5IHRvIGVuY3J5cHQgYWxsIG9mIHRoZSBhdWRpbyB0cmFja3MgaW4geW91ciBzdHJlYW0uXG4gICAqL1xuICBQUkVTRVRfQVVESU9fMT0nUFJFU0VUX0FVRElPXzEnLFxuICAvKipcbiAgICogVXNlIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgc3RlcmVvIGF1ZGlvIHRyYWNrcyBhbmQgb25lIGNvbnRlbnQga2V5IHRvIGVuY3J5cHQgYWxsIG9mIHRoZSBtdWx0aWNoYW5uZWwgYXVkaW8gdHJhY2tzLlxuICAgKi9cbiAgUFJFU0VUX0FVRElPXzI9J1BSRVNFVF9BVURJT18yJyxcbiAgLyoqXG4gICAqIFVzZSBvbmUgY29udGVudCBrZXkgdG8gZW5jcnlwdCBhbGwgb2YgdGhlIHN0ZXJlbyBhdWRpbyB0cmFja3MsIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgbXVsdGljaGFubmVsIGF1ZGlvIHRyYWNrcyB3aXRoIDMgdG8gNiBjaGFubmVscyxcbiAgICogYW5kIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgbXVsdGljaGFubmVsIGF1ZGlvIHRyYWNrcyB3aXRoIG1vcmUgdGhhbiA2IGNoYW5uZWxzLlxuICAgKi9cbiAgUFJFU0VUX0FVRElPXzM9J1BSRVNFVF9BVURJT18zJyxcbiAgLyoqXG4gICAqIFVzZSB0aGUgc2FtZSBjb250ZW50IGtleSBmb3IgYWxsIG9mIHRoZSBhdWRpbyBhbmQgdmlkZW8gdHJhY2tzIGluIHlvdXIgc3RyZWFtLlxuICAgKi9cbiAgU0hBUkVEPSdTSEFSRUQnLFxuICAvKipcbiAgICogRG9uJ3QgZW5jcnlwdCBhbnkgb2YgdGhlIGF1ZGlvIHRyYWNrcyBpbiB5b3VyIHN0cmVhbS5cbiAgICovXG4gIFVORU5DUllQVEVEPSdVTkVOQ1JZUFRFRCcsXG59XG5cbi8qKlxuICogVGhlIFNQRUtFIFZlcnNpb24gMi4wIHByZXNldCB2aWRlbyBhc3NvY2lhdGVkIHdpdGggdGhlIGVuY3J5cHRpb24gY29udHJhY3QgY29uZmlndXJhdGlvbiBvZiB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICpcbiAqIEEgY29sbGVjdGlvbiBvZiB2aWRlbyBlbmNyeXB0aW9uIHByZXNldHMuXG4gKi9cbmV4cG9ydCBlbnVtIFByZXNldFNwZWtlMjBWaWRlbyB7XG4gIC8qKlxuICAgKiBVc2Ugb25lIGNvbnRlbnQga2V5IHRvIGVuY3J5cHQgYWxsIG9mIHRoZSB2aWRlbyB0cmFja3MgaW4geW91ciBzdHJlYW0uXG4gICAqL1xuICBQUkVTRVRfVklERU9fMT0nUFJFU0VUX1ZJREVPXzEnLFxuICAvKipcbiAgICogVXNlIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgU0QgdmlkZW8gdHJhY2tzIGFuZCBvbmUgY29udGVudCBrZXkgZm9yIGFsbCBIRCBhbmQgaGlnaGVyIHJlc29sdXRpb25zIHZpZGVvIHRyYWNrcy5cbiAgICovXG4gIFBSRVNFVF9WSURFT18yPSdQUkVTRVRfVklERU9fMicsXG4gIC8qKlxuICAgKiBVc2Ugb25lIGNvbnRlbnQga2V5IHRvIGVuY3J5cHQgYWxsIG9mIHRoZSBTRCB2aWRlbyB0cmFja3MsIG9uZSBjb250ZW50IGtleSBmb3IgSEQgdmlkZW8gdHJhY2tzIGFuZCBvbmUgY29udGVudCBrZXkgZm9yIGFsbCBVSEQgdmlkZW8gdHJhY2tzLlxuICAgKi9cbiAgUFJFU0VUX1ZJREVPXzM9J1BSRVNFVF9WSURFT18zJyxcbiAgLyoqXG4gICAqIFVzZSBvbmUgY29udGVudCBrZXkgdG8gZW5jcnlwdCBhbGwgb2YgdGhlIFNEIHZpZGVvIHRyYWNrcywgb25lIGNvbnRlbnQga2V5IGZvciBIRCB2aWRlbyB0cmFja3MsXG4gICAqIG9uZSBjb250ZW50IGtleSBmb3IgYWxsIFVIRDEgdmlkZW8gdHJhY2tzIGFuZCBvbmUgY29udGVudCBrZXkgZm9yIGFsbCBVSEQyIHZpZGVvIHRyYWNrcy5cbiAgICovXG4gIFBSRVNFVF9WSURFT180PSdQUkVTRVRfVklERU9fNCcsXG4gIC8qKlxuICAgKiBVc2Ugb25lIGNvbnRlbnQga2V5IHRvIGVuY3J5cHQgYWxsIG9mIHRoZSBTRCB2aWRlbyB0cmFja3MsIG9uZSBjb250ZW50IGtleSBmb3IgSEQxIHZpZGVvIHRyYWNrcywgb25lIGNvbnRlbnQga2V5IGZvciBIRDIgdmlkZW8gdHJhY2tzLFxuICAgKiBvbmUgY29udGVudCBrZXkgZm9yIGFsbCBVSEQxIHZpZGVvIHRyYWNrcyBhbmQgb25lIGNvbnRlbnQga2V5IGZvciBhbGwgVUhEMiB2aWRlbyB0cmFja3MuXG4gICAqL1xuICBQUkVTRVRfVklERU9fNT0nUFJFU0VUX1ZJREVPXzUnLFxuICAvKipcbiAgICogVXNlIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgU0QgdmlkZW8gdHJhY2tzLCBvbmUgY29udGVudCBrZXkgZm9yIEhEMSB2aWRlbyB0cmFja3MsIG9uZSBjb250ZW50IGtleSBmb3IgSEQyIHZpZGVvIHRyYWNrc1xuICAgKiBhbmQgb25lIGNvbnRlbnQga2V5IGZvciBhbGwgVUhEIHZpZGVvIHRyYWNrcy5cbiAgICovXG4gIFBSRVNFVF9WSURFT182PSdQUkVTRVRfVklERU9fNicsXG4gIC8qKlxuICAgKiBVc2Ugb25lIGNvbnRlbnQga2V5IHRvIGVuY3J5cHQgYWxsIG9mIHRoZSBTRCtIRDEgdmlkZW8gdHJhY2tzLCBvbmUgY29udGVudCBrZXkgZm9yIEhEMiB2aWRlbyB0cmFja3MgYW5kIG9uZSBjb250ZW50IGtleSBmb3IgYWxsIFVIRCB2aWRlbyB0cmFja3MuXG4gICAqL1xuICBQUkVTRVRfVklERU9fNz0nUFJFU0VUX1ZJREVPXzcnLFxuICAvKipcbiAgICogVXNlIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgU0QrSEQxIHZpZGVvIHRyYWNrcywgb25lIGNvbnRlbnQga2V5IGZvciBIRDIgdmlkZW8gdHJhY2tzLCBvbmUgY29udGVudCBrZXkgZm9yIGFsbCBVSEQxXG4gICAqIHZpZGVvIHRyYWNrcyBhbmQgb25lIGNvbnRlbnQga2V5IGZvciBhbGwgVUhEMiB2aWRlbyB0cmFja3MuXG4gICAqL1xuICBQUkVTRVRfVklERU9fOD0nUFJFU0VUX1ZJREVPXzgnLFxuICAvKipcbiAgICogVXNlIHRoZSBzYW1lIGNvbnRlbnQga2V5IGZvciBhbGwgb2YgdGhlIHZpZGVvIGFuZCBhdWRpbyB0cmFja3MgaW4geW91ciBzdHJlYW0uXG4gICAqL1xuICBTSEFSRUQ9J1NIQVJFRCcsXG4gIC8qKlxuICAgKiBEb24ndCBlbmNyeXB0IGFueSBvZiB0aGUgdmlkZW8gdHJhY2tzIGluIHlvdXIgc3RyZWFtLlxuICAgKi9cbiAgVU5FTkNSWVBURUQ9J1VORU5DUllQVEVEJyxcbn1cblxuLyoqXG4gKiBFbmRwb2ludCBlcnJvciBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBlbnVtIEVuZHBvaW50RXJyb3JDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBtYW5pZmVzdCBzdGFsbGVkIGFuZCB0aGVyZSBhcmUgbm8gbmV3IHNlZ21lbnRzIG9yIHBhcnRzLlxuICAgKi9cbiAgU1RBTEVfTUFOSUZFU1Q9J1NUQUxFX01BTklGRVNUJyxcbiAgLyoqXG4gICAqIFRoZXJlIGlzIGEgZ2FwIGluIHRoZSBtYW5pZmVzdC5cbiAgICovXG4gIElOQ09NUExFVEVfTUFOSUZFU1Q9J0lOQ09NUExFVEVfTUFOSUZFU1QnLFxuICAvKipcbiAgICogS2V5IHJvdGF0aW9uIGlzIGVuYWJsZWQgYnV0IHdlJ3JlIHVuYWJsZSB0byBmZXRjaCB0aGUga2V5IGZvciB0aGUgY3VycmVudCBrZXkgcGVyaW9kLlxuICAgKi9cbiAgTUlTU0lOR19EUk1fS0VZPSdNSVNTSU5HX0RSTV9LRVknLFxuICAvKipcbiAgICogVGhlIHNlZ21lbnRzIHdoaWNoIGNvbnRhaW4gc2xhdGUgY29udGVudCBhcmUgY29uc2lkZXJlZCB0byBiZSBtaXNzaW5nIGNvbnRlbnQuXG4gICAqL1xuICBTTEFURV9JTlBVVD0nU0xBVEVfSU5QVVQnLFxufVxuXG4vKipcbiAqIFNDVEUtMzUgbWVzc2FnZSB0eXBlIG9wdGlvbnMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgZW51bSBTY3RlTWVzc2FnZVR5cGUge1xuICAvKipcbiAgICogT3B0aW9uIGZvciBTUExJQ0VfSU5TRVJULlxuICAgKi9cbiAgU1BMSUNFX0lOU0VSVD0nU1BMSUNFX0lOU0VSVCcsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIEJSRUFLLlxuICAgKi9cbiAgQlJFQUs9J0JSRUFLJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgUFJPVklERVJfQURWRVJUSVNFTUVOVC5cbiAgICovXG4gIFBST1ZJREVSX0FEVkVSVElTRU1FTlQ9J1BST1ZJREVSX0FEVkVSVElTRU1FTlQnLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBESVNUUklCVVRPUl9BRFZFUlRJU0VNRU5ULlxuICAgKi9cbiAgRElTVFJJQlVUT1JfQURWRVJUSVNFTUVOVD0nRElTVFJJQlVUT1JfQURWRVJUSVNFTUVOVCcsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIFBST1ZJREVSX1BMQUNFTUVOVF9PUFBPUlRVTklUWS5cbiAgICovXG4gIFBST1ZJREVSX1BMQUNFTUVOVF9PUFBPUlRVTklUWT0nUFJPVklERVJfUExBQ0VNRU5UX09QUE9SVFVOSVRZJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgRElTVFJJQlVUT1JfUExBQ0VNRU5UX09QUE9SVFVOSVRZLlxuICAgKi9cbiAgRElTVFJJQlVUT1JfUExBQ0VNRU5UX09QUE9SVFVOSVRZPSdESVNUUklCVVRPUl9QTEFDRU1FTlRfT1BQT1JUVU5JVFknLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBQUk9WSURFUl9PVkVSTEFZX1BMQUNFTUVOVF9PUFBPUlRVTklUWS5cbiAgICovXG4gIFBST1ZJREVSX09WRVJMQVlfUExBQ0VNRU5UX09QUE9SVFVOSVRZPSdQUk9WSURFUl9PVkVSTEFZX1BMQUNFTUVOVF9PUFBPUlRVTklUWScsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIERJU1RSSUJVVE9SX09WRVJMQVlfUExBQ0VNRU5UX09QUE9SVFVOSVRZLlxuICAgKi9cbiAgRElTVFJJQlVUT1JfT1ZFUkxBWV9QTEFDRU1FTlRfT1BQT1JUVU5JVFk9J0RJU1RSSUJVVE9SX09WRVJMQVlfUExBQ0VNRU5UX09QUE9SVFVOSVRZJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgUFJPR1JBTS5cbiAgICovXG4gIFBST0dSQU09J1BST0dSQU0nLFxufVxuXG4vKipcbiAqIENvbnRyb2xzIHdoZXRoZXIgU0NURS0zNSBtZXNzYWdlcyBhcmUgaW5jbHVkZWQgaW4gc2VnbWVudCBmaWxlcy5cbiAqL1xuZXhwb3J0IGVudW0gU2N0ZUluU2VnbWVudHMge1xuICAvKipcbiAgICogU0NURS0zNSBtZXNzYWdlcyBhcmUgbm90IGluY2x1ZGVkIGluIHNlZ21lbnRzLlxuICAgKi9cbiAgTk9ORSA9ICdOT05FJyxcbiAgLyoqXG4gICAqIFNDVEUtMzUgbWVzc2FnZXMgYXJlIGVtYmVkZGVkIGluIHNlZ21lbnQgZGF0YS5cbiAgICpcbiAgICogRm9yIERBU0ggbWFuaWZlc3RzLCB3aGVuIHNldCB0byBBTEwsIGFuIEluYmFuZEV2ZW50U3RyZWFtIHRhZyBzaWduYWxzXG4gICAqIHRoYXQgU0NURSBtZXNzYWdlcyBhcmUgcHJlc2VudCBpbiBzZWdtZW50cy5cbiAgICovXG4gIEFMTCA9ICdBTEwnLFxufVxuXG4vKipcbiAqIE9yaWdpbiBFbmRwb2ludCBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJT3JpZ2luRW5kcG9pbnQgZXh0ZW5kcyBJUmVzb3VyY2UsIElPcmlnaW5FbmRwb2ludFJlZiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY2hhbm5lbCBncm91cCBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbiBlbmRwb2ludCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsR3JvdXBOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFubmVsIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5uZWxOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcmlnaW4gZW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW4gZW5kcG9pbnQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luRW5kcG9pbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5FbmRwb2ludEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSBhbmQgdGltZSB0aGUgb3JpZ2luIGVuZHBvaW50IHdhcyBjcmVhdGVkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRlIGFuZCB0aW1lIHRoZSBvcmlnaW4gZW5kcG9pbnQgd2FzIG1vZGlmaWVkLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSExTIG1hbmlmZXN0IFVSTHMgZm9yIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGhsc01hbmlmZXN0VXJscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgTG93IExhdGVuY3kgSExTIG1hbmlmZXN0IFVSTHMgZm9yIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGxvd0xhdGVuY3lIbHNNYW5pZmVzdFVybHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIERBU0ggbWFuaWZlc3QgVVJMcyBmb3IgdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGFzaE1hbmlmZXN0VXJscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgTVNTIG1hbmlmZXN0IFVSTHMgZm9yIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IG1zc01hbmlmZXN0VXJscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgb3JpZ2luIGVuZHBvaW50IHBvbGljeS5cbiAgICpcbiAgICogWW91IGNhbiBvbmx5IGFkZCAxIE9yaWdpbkVuZHBvaW50UG9saWN5IHRvIGFuIE9yaWdpbkVuZHBvaW50LlxuICAgKiBJZiB5b3UgaGF2ZSBhbHJlYWR5IGRlZmluZWQgb25lLCBpdCB3aWxsIGFwcGVuZCB0byB0aGUgcG9saWN5IGFscmVhZHkgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIHN0YXRlbWVudCAtIFRoZSBwb2xpY3kgc3RhdGVtZW50IHRvIGFkZFxuICAgKi9cbiAgYWRkVG9SZXNvdXJjZVBvbGljeShzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudCk6IEFkZFRvUmVzb3VyY2VQb2xpY3lSZXN1bHQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENsb3VkV2F0Y2ggbWV0cmljLlxuICAgKlxuICAgKiBAcGFyYW0gbWV0cmljTmFtZSBuYW1lIG9mIHRoZSBtZXRyaWMuXG4gICAqIEBwYXJhbSBwcm9wcyBtZXRyaWMgb3B0aW9ucy5cbiAgICovXG4gIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJucyBNZXRyaWMgZm9yIEluZ3Jlc3MgQnl0ZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNJbmdyZXNzQnl0ZXMob3B0aW9ucz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgTWV0cmljIGZvciBFZ3Jlc3MgQnl0ZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNFZ3Jlc3NCeXRlcyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgTWV0cmljIGZvciBJbmdyZXNzIHJlc3BvbnNlIHRpbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdmVyYWdlIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljSW5ncmVzc1Jlc3BvbnNlVGltZShwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgTWV0cmljIGZvciBFZ3Jlc3MgUmVzcG9uc2UgdGltZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF2ZXJhZ2Ugb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNFZ3Jlc3NSZXNwb25zZVRpbWUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE1ldHJpYyBmb3IgRWdyZXNzIFJlcXVlc3QgQ291bnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBtZXRyaWNFZ3Jlc3NSZXF1ZXN0Q291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE1ldHJpYyBmb3IgSW5ncmVzcyBSZXF1ZXN0IENvdW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljSW5ncmVzc1JlcXVlc3RDb3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG59XG5cbi8qKlxuICogRFJNIHNldHRpbmdzIGtleXMgZm9yIG1hbmlmZXN0IGZpbHRlciBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZW51bSBEcm1TZXR0aW5nc0tleSB7XG4gIC8qKlxuICAgKiBFeGNsdWRlIEVYVC1YLVNFU1NJT04tS0VZIHRhZ3MgZnJvbSBITFMgYW5kIExMLUhMUyBtdWx0aXZhcmlhbnQgcGxheWxpc3RzLlxuICAgKlxuICAgKiBUaGlzIGNhbiBpbXByb3ZlIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgSExTIGNsaWVudHMgdGhhdCBoYXZlIGlzc3Vlc1xuICAgKiBwcm9jZXNzaW5nIHNlc3Npb24ga2V5cywgb3IgcHJvdmlkZSBtb3JlIGdyYW51bGFyIGFjY2VzcyBjb250cm9sIHdoZW5cbiAgICogdXNpbmcgbWFuaWZlc3QgZmlsdGVyaW5nLlxuICAgKi9cbiAgRVhDTFVERV9TRVNTSU9OX0tFWVMgPSAnZXhjbHVkZV9zZXNzaW9uX2tleXMnLFxufVxuXG4vKipcbiAqIEZpbHRlciBjb25maWd1cmF0aW9uIGluY2x1ZGVzIHNldHRpbmdzIGZvciBtYW5pZmVzdCBmaWx0ZXJpbmcsIHN0YXJ0IGFuZCBlbmQgdGltZXMsIGFuZCB0aW1lIGRlbGF5IHRoYXQgYXBwbHkgdG8gYWxsIG9mIHlvdXIgZWdyZXNzIHJlcXVlc3RzIGZvciB0aGlzIG1hbmlmZXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlckNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogT3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBjbGlwIHN0YXJ0IHRpbWUgZm9yIGFsbCBvZiB5b3VyIG1hbmlmZXN0IGVncmVzcyByZXF1ZXN0cy5cbiAgICogV2hlbiB5b3UgaW5jbHVkZSBjbGlwIHN0YXJ0IHRpbWUsIG5vdGUgdGhhdCB5b3UgY2Fubm90IHVzZSBjbGlwIHN0YXJ0IHRpbWUgcXVlcnkgcGFyYW1ldGVycyBmb3IgdGhpcyBtYW5pZmVzdCdzIGVuZHBvaW50IFVSTC5cbiAgICpcbiAgICogVGhpcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIFVUQyB0aW1lc3RhbXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gY2xpcCBzdGFydCB0aW1lXG4gICAqL1xuICByZWFkb25seSBjbGlwU3RhcnRUaW1lPzogRGF0ZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgZW5kIHRpbWUgZm9yIGFsbCBvZiB5b3VyIG1hbmlmZXN0IGVncmVzcyByZXF1ZXN0cy5cbiAgICogV2hlbiB5b3UgaW5jbHVkZSBlbmQgdGltZSwgbm90ZSB0aGF0IHlvdSBjYW5ub3QgdXNlIGVuZCB0aW1lIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoaXMgbWFuaWZlc3QncyBlbmRwb2ludCBVUkwuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBVVEMgdGltZXN0YW1wLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGVuZCB0aW1lXG4gICAqL1xuICByZWFkb25seSBlbmQ/OiBEYXRlO1xuICAvKipcbiAgICogT3B0aW9uYWxseSBzcGVjaWZ5IHRoZSBzdGFydCB0aW1lIGZvciBhbGwgb2YgeW91ciBtYW5pZmVzdCBlZ3Jlc3MgcmVxdWVzdHMuXG4gICAqIFdoZW4geW91IGluY2x1ZGUgc3RhcnQgdGltZSwgbm90ZSB0aGF0IHlvdSBjYW5ub3QgdXNlIHN0YXJ0IHRpbWUgcXVlcnkgcGFyYW1ldGVycyBmb3IgdGhpcyBtYW5pZmVzdCdzIGVuZHBvaW50IFVSTC5cbiAgICpcbiAgICogVGhpcyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIFVUQyB0aW1lc3RhbXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RhcnQgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnQ/OiBEYXRlO1xuICAvKipcbiAgICogT3B0aW9uYWxseSBzcGVjaWZ5IG9uZSBvciBtb3JlIG1hbmlmZXN0IGZpbHRlcnMgZm9yIGFsbCBvZiB5b3VyIG1hbmlmZXN0IGVncmVzcyByZXF1ZXN0cy5cbiAgICogV2hlbiB5b3UgaW5jbHVkZSBhIG1hbmlmZXN0IGZpbHRlciwgbm90ZSB0aGF0IHlvdSBjYW5ub3QgdXNlIGFuIGlkZW50aWNhbCBtYW5pZmVzdCBmaWx0ZXIgcXVlcnkgcGFyYW1ldGVyIGZvciB0aGlzIG1hbmlmZXN0J3MgZW5kcG9pbnQgVVJMLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIG1hbmlmZXN0IGZpbHRlcnNcbiAgICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0RmlsdGVyPzogTWFuaWZlc3RGaWx0ZXJbXTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgdGltZSBkZWxheSBmb3IgYWxsIG9mIHlvdXIgbWFuaWZlc3QgZWdyZXNzIHJlcXVlc3RzLiBFbnRlciBhIHZhbHVlIHRoYXQgaXMgc21hbGxlciB0aGFuIHlvdXIgZW5kcG9pbnQncyBzdGFydG92ZXIgd2luZG93LlxuICAgKiBXaGVuIHlvdSBpbmNsdWRlIHRpbWUgZGVsYXksIG5vdGUgdGhhdCB5b3UgY2Fubm90IHVzZSB0aW1lIGRlbGF5IHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoaXMgbWFuaWZlc3QncyBlbmRwb2ludCBVUkwuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdGltZSBkZWxheVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZURlbGF5PzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBEUk0gc2V0dGluZ3MgZm9yIG1hbmlmZXN0IGVncmVzcyByZXF1ZXN0cy5cbiAgICpcbiAgICogV2hlbiB5b3UgaW5jbHVkZSBhIERSTSBzZXR0aW5nLCBub3RlIHRoYXQgeW91IGNhbm5vdCB1c2UgYW4gaWRlbnRpY2FsXG4gICAqIERSTSBzZXR0aW5nIHF1ZXJ5IHBhcmFtZXRlciBmb3IgdGhpcyBtYW5pZmVzdCdzIGVuZHBvaW50IFVSTC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBEUk0gc2V0dGluZ3NcbiAgICovXG4gIHJlYWRvbmx5IGRybVNldHRpbmdzPzogRHJtU2V0dGluZ3NLZXlbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIFN0YXJ0VGFnLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0VGFnT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSB2YWx1ZSBmb3IgUFJFQ0lTRSB3aXRoaW4geW91ciBFWFQtWC1TVEFSVCB0YWcuXG4gICAqXG4gICAqIExlYXZlIGJsYW5rLCBvciBjaG9vc2UgZmFsc2UsIHRvIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBOTy4gQ2hvb3NlIHRydWUgdG8gdXNlIHRoZSB2YWx1ZSBZRVMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcmVjaXNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIGNyZWF0aW5nIEVYVC1YLVNUQVJUIHRhZ3MgaW4gSExTIHBsYXlsaXN0cy5cbiAqXG4gKiBUaGUgRVhULVgtU1RBUlQgdGFnIGluZGljYXRlcyBhIHByZWZlcnJlZCBwb2ludCBhdCB3aGljaCB0byBzdGFydCBwbGF5aW5nIGEgcGxheWxpc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFydFRhZyB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFydCB0YWcgd2l0aCBhIHRpbWUgb2Zmc2V0LlxuICAgKlxuICAgKiBAcGFyYW0gdGltZU9mZnNldCBUaGUgdGltZSBvZmZzZXQgaW4gc2Vjb25kcy4gQ2FuIGJlIHBvc2l0aXZlIChmb3J3YXJkIGZyb20gc3RhcnQpIG9yIG5lZ2F0aXZlIChiYWNrIGZyb20gbGl2ZSBlZGdlKS5cbiAgICogICAtIElmIHBvc2l0aXZlOiBtdXN0IGJlIGxlc3MgdGhhbiAobWFuaWZlc3QgZHVyYXRpb24gLSAzIMOXIHNlZ21lbnQgZHVyYXRpb24pXG4gICAqICAgLSBJZiBuZWdhdGl2ZTogYWJzb2x1dGUgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gKDMgw5cgc2VnbWVudCBkdXJhdGlvbikgYW5kIGxlc3MgdGhhbiBtYW5pZmVzdCBkdXJhdGlvblxuICAgKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodGltZU9mZnNldDogbnVtYmVyLCBvcHRpb25zPzogU3RhcnRUYWdPcHRpb25zKTogU3RhcnRUYWcge1xuICAgIHJldHVybiB7XG4gICAgICB0aW1lT2Zmc2V0LFxuICAgICAgcHJlY2lzZTogb3B0aW9ucyAmJiBvcHRpb25zLnByZWNpc2UgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMucHJlY2lzZSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHN0YXJ0IHRhZyB3aXRoIHByZWNpc2UgcG9zaXRpb25pbmcgZW5hYmxlZCAoUFJFQ0lTRT1ZRVMpLlxuICAgKlxuICAgKiBAcGFyYW0gdGltZU9mZnNldCBUaGUgdGltZSBvZmZzZXQgaW4gc2Vjb25kcyAocG9zaXRpdmUgb3IgbmVnYXRpdmUpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHdpdGhQcmVjaXNlKHRpbWVPZmZzZXQ6IG51bWJlcik6IFN0YXJ0VGFnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGltZU9mZnNldCxcbiAgICAgIHByZWNpc2U6IHRydWUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIEVYVC1YLVNUQVJUIHRhZyBpbiBITFMgcGxheWxpc3RzLlxuICpcbiAqIFVzZSB0aGUgYFN0YXJ0VGFnYCBoZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGluc3RhbmNlcyB3aXRoIHZhbGlkYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhcnRUYWcge1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgdmFsdWUgZm9yIFBSRUNJU0Ugd2l0aGluIHlvdXIgRVhULVgtU1RBUlQgdGFnLlxuICAgKlxuICAgKiBMZWF2ZSBibGFuaywgb3IgY2hvb3NlIGZhbHNlLCB0byB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgTk8uIENob29zZSB0cnVlIHRvIHVzZSB0aGUgdmFsdWUgWUVTLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlY2lzZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSB2YWx1ZSBmb3IgVElNRS1PRkZTRVQgd2l0aGluIHlvdXIgRVhULVgtU1RBUlQgdGFnLlxuICAgKlxuICAgKiBFbnRlciBhIHNpZ25lZCBmbG9hdGluZyBwb2ludCB2YWx1ZSB3aGljaCwgaWYgcG9zaXRpdmUsIG11c3QgYmUgbGVzcyB0aGFuIHRoZSBjb25maWd1cmVkXG4gICAqIG1hbmlmZXN0IGR1cmF0aW9uIG1pbnVzIHRocmVlIHRpbWVzIHRoZSBjb25maWd1cmVkIHNlZ21lbnQgdGFyZ2V0IGR1cmF0aW9uLiBJZiBuZWdhdGl2ZSxcbiAgICogdGhlIGFic29sdXRlIHZhbHVlIG11c3QgYmUgbGFyZ2VyIHRoYW4gdGhyZWUgdGltZXMgdGhlIGNvbmZpZ3VyZWQgc2VnbWVudCB0YXJnZXQgZHVyYXRpb24sXG4gICAqIGFuZCB0aGUgYWJzb2x1dGUgdmFsdWUgbXVzdCBiZSBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgbWFuaWZlc3QgZHVyYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0aW1lT2Zmc2V0OiBudW1iZXI7XG59XG5cbi8qKlxuICogQmFzZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uLlxuICovXG5pbnRlcmZhY2UgTWFuaWZlc3RDb25maWd1cmF0aW9uQmFzZSB7XG4gIC8qKlxuICAgKiBGaWx0ZXIgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBzZXR0aW5ncyBmb3IgbWFuaWZlc3QgZmlsdGVyaW5nLCBzdGFydCBhbmQgZW5kIHRpbWVzLCBhbmQgdGltZSBkZWxheSB0aGF0IGFwcGx5IHRvIGFsbCBvZiB5b3VyIGVncmVzcyByZXF1ZXN0cyBmb3IgdGhpcyBtYW5pZmVzdC5cbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL21lZGlhcGFja2FnZS9sYXRlc3QvdXNlcmd1aWRlL21hbmlmZXN0LWZpbHRlci1xdWVyeS1wYXJhbWV0ZXJzLmh0bWxcbiAgICogQGRlZmF1bHQgLSBObyBmaWx0ZXIgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyQ29uZmlndXJhdGlvbj86IEZpbHRlckNvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgdG90YWwgZHVyYXRpb24gKGluIHNlY29uZHMpIG9mIHRoZSBtYW5pZmVzdCdzIGNvbnRlbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDYwXG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdFdpbmRvdz86IER1cmF0aW9uO1xufVxuXG4vKipcbiAqIENob29zZSBob3cgYWQgbWFya2VycyBhcmUgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2VkIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBlbnVtIEFkTWFya2VyRGFzaCB7XG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIEJJTkFSWSAtIFRoZSBTQ1RFLTM1IG1hcmtlciBpcyBleHByZXNzZWQgYXMgYSBoZXgtc3RyaW5nIChCYXNlNjQgc3RyaW5nKSByYXRoZXIgdGhhbiBmdWxsIFhNTC5cbiAgICovXG4gIEJJTkFSWT0nQklOQVJZJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgWE1MIC0gVGhlIFNDVEUgbWFya2VyIGlzIGV4cHJlc3NlZCBmdWxseSBpbiBYTUwuXG4gICAqL1xuICBYTUw9J1hNTCcsXG59XG5cbi8qKlxuICogQ2hvb3NlIGhvdyBTQ1RFLTM1IGFkIG1hcmtlcnMgYXJlIGluY2x1ZGVkIGluIEhMUyBhbmQgTEwtSExTIG1hbmlmZXN0cy5cbiAqL1xuZXhwb3J0IGVudW0gQWRNYXJrZXJIbHMge1xuICAvKipcbiAgICogSW5zZXJ0IEVYVC1YLURBVEVSQU5HRSB0YWdzIHRvIHNpZ25hbCBhZCBjb250ZW50LlxuICAgKi9cbiAgREFURVJBTkdFID0gJ0RBVEVSQU5HRScsXG4gIC8qKlxuICAgKiBJbnNlcnQgZW5oYW5jZWQgU0NURS0zNSB0YWdzIGZvciBhZCBjb250ZW50LlxuICAgKi9cbiAgU0NURTM1X0VOSEFOQ0VEID0gJ1NDVEUzNV9FTkhBTkNFRCcsXG59XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgdmFyaWFibGUgdGhhdCBNZWRpYVBhY2thZ2UgdXNlcyBpbiB0aGUgbWVkaWEgYXR0cmlidXRlIG9mIHRoZSBTZWdtZW50VGVtcGxhdGUgdGFnLlxuICovXG5leHBvcnQgZW51bSBTZWdtZW50VGVtcGxhdGVGb3JtYXQge1xuICAvKipcbiAgICogT3B0aW9uIGZvciBudW1iZXIgd2l0aCB0aW1lbGluZS5cbiAgICovXG4gIE5VTUJFUl9XSVRIX1RJTUVMSU5FPSdOVU1CRVJfV0lUSF9USU1FTElORScsXG59XG5cbi8qKlxuICogVGhlIFVUQyB0aW1pbmcgbW9kZSBmb3IgREFTSC5cbiAqL1xuZXhwb3J0IGVudW0gRGFzaFV0Y1RpbWluZ01vZGUge1xuICAvKipcbiAgICogT3B0aW9uIGZvciBIVFRQX0hFQUQuXG4gICAqL1xuICBIVFRQX0hFQUQ9J0hUVFBfSEVBRCcsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIEhUVFBfSVNPLlxuICAgKi9cbiAgSFRUUF9JU089J0hUVFBfSVNPJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgSFRUUF9YU0RBVEUuXG4gICAqL1xuICBIVFRQX1hTREFURT0nSFRUUF9YU0RBVEUnLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBVVENfRElSRUNULlxuICAgKi9cbiAgVVRDX0RJUkVDVD0nVVRDX0RJUkVDVCcsXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdHJpZ2dlcnMgd2hpY2ggY2F1c2UgQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgdG8gY3JlYXRlIG1lZGlhIHByZXNlbnRhdGlvbiBkZXNjcmlwdGlvbiAoTVBEKSBwZXJpb2RzIGluIHRoZSBvdXRwdXQgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBlbnVtIERhc2hQZXJpb2RUcmlnZ2VycyB7XG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIEFWQUlMUy5cbiAgICovXG4gIEFWQUlMUz0nQVZBSUxTJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgRFJNX0tFWV9ST1RBVElPTi5cbiAgICovXG4gIERSTV9LRVlfUk9UQVRJT049J0RSTV9LRVlfUk9UQVRJT04nLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBTT1VSQ0VfQ0hBTkdFUy5cbiAgICovXG4gIFNPVVJDRV9DSEFOR0VTPSdTT1VSQ0VfQ0hBTkdFUycsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIFNPVVJDRV9ESVNSVVBUSU9OUy5cbiAgICovXG4gIFNPVVJDRV9ESVNSVVBUSU9OUz0nU09VUkNFX0RJU1JVUFRJT05TJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgTk9ORS5cbiAgICovXG4gIE5PTkU9J05PTkUnLFxufVxuXG4vKipcbiAqIERSTSBzaWduYWxpbmcgZGV0ZXJtaW5lcyB0aGUgd2F5IERBU0ggbWFuaWZlc3Qgc2lnbmFscyB0aGUgRFJNIGNvbnRlbnQuXG4gKi9cbmV4cG9ydCBlbnVtIERybVNpZ25hbGxpbmcge1xuICAvKipcbiAgICogT3B0aW9uIGZvciBJTkRJVklEVUFMLlxuICAgKi9cbiAgSU5ESVZJRFVBTD0nSU5ESVZJRFVBTCcsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIFJFRkVSRU5DRUQuXG4gICAqL1xuICBSRUZFUkVOQ0VEPSdSRUZFUkVOQ0VEJyxcbn1cblxuLyoqXG4gKiBTVEFOREFSRCBpbmRpY2F0ZXMgYSBkZWZhdWx0IG1hbmlmZXN0LCB3aGljaCBpcyBjb21wYWN0ZWQuIE5PTkUgaW5kaWNhdGVzIGEgZnVsbCBtYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGVudW0gRGFzaE1hbmlmZXN0Q29tcGFjdG5lc3Mge1xuICAvKipcbiAgICogU1RBTkRBUkRcbiAgICovXG4gIFNUQU5EQVJEPSdTVEFOREFSRCcsXG4gIC8qKlxuICAgKiBOT05FXG4gICAqL1xuICBOT05FPSdOT05FJyxcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBVUkxzIHRvIHVzZSBmb3IgcmV0cmlldmluZyBzZWdtZW50cy4gWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIGxvY2F0aW9ucyBhbmQgaW5kaWNhdGUgdGhlXG4gKiBwcmlvcml0eSBhbmQgd2VpZ2h0IGZvciB3aGVuIGVhY2ggc2hvdWxkIGJlIHVzZWQsIGZvciB1c2UgaW4gbXVsdGktQ0ROIHdvcmtmbG93cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXNoQmFzZVVybFByb3BlcnR5IHtcbiAgLyoqXG4gICAqIEZvciB1c2Ugd2l0aCBEVkItREFTSCBwcm9maWxlcyBvbmx5LiBUaGUgcHJpb3JpdHkgb2YgdGhpcyBsb2NhdGlvbiBmb3Igc2VydmluZyBzZWdtZW50cy4gVGhlIGxvd2VyIHRoZSBudW1iZXIsIHRoZSBoaWdoZXIgdGhlIHByaW9yaXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHByaW9yaXR5IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgZHZiUHJpb3JpdHk/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBGb3IgdXNlIHdpdGggRFZCLURBU0ggcHJvZmlsZXMgb25seS4gVGhlIHdlaWdodGluZyBmb3Igc291cmNlIGxvY2F0aW9ucyB0aGF0IGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gd2VpZ2h0IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgZHZiV2VpZ2h0PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBsb2NhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzZXJ2aWNlIGxvY2F0aW9uIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZUxvY2F0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogQSBzb3VyY2UgbG9jYXRpb24gZm9yIHNlZ21lbnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRm9yIHVzZSB3aXRoIERWQi1EQVNIIHByb2ZpbGVzIG9ubHkuIFRoZSBzZXR0aW5ncyBmb3IgZXJyb3IgcmVwb3J0aW5nIGZyb20gdGhlIHBsYXliYWNrIGRldmljZVxuICogdGhhdCB5b3Ugd2FudCBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZSB0byBwYXNzIHRocm91Z2ggdG8gdGhlIG1hbmlmZXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhc2hEdmJNZXRyaWNzUmVwb3J0aW5nIHtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgcGxheWJhY2sgZGV2aWNlcyBwZXIgMTAwMCB0aGF0IHdpbGwgc2VuZCBlcnJvciByZXBvcnRzIHRvIHRoZSByZXBvcnRpbmcgVVJMLlxuICAgKiBUaGlzIHJlcHJlc2VudHMgdGhlIHByb2JhYmlsaXR5IHRoYXQgYSBwbGF5YmFjayBkZXZpY2Ugd2lsbCBiZSBhIHJlcG9ydGluZyBwbGF5ZXIgZm9yIHRoaXMgc2Vzc2lvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwcm9iYWJpbGl0eSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2JhYmlsaXR5PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIFVSTCB3aGVyZSBwbGF5YmFjayBkZXZpY2VzIHNlbmQgZXJyb3IgcmVwb3J0cy5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9ydGluZ1VybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZvciB1c2Ugd2l0aCBEVkItREFTSCBwcm9maWxlcyBvbmx5LiBUaGUgc2V0dGluZ3MgZm9yIGZvbnQgZG93bmxvYWRzIHRoYXQgeW91IHdhbnQgQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBtYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXNoRHZiRm9udERvd25sb2FkIHtcbiAgLyoqXG4gICAqIFRoZSBmb250RmFtaWx5IG5hbWUgZm9yIHN1YnRpdGxlcywgYXMgZGVzY3JpYmVkIGluIEVCVS1UVC1EIFN1YnRpdGxpbmcgRGlzdHJpYnV0aW9uIEZvcm1hdC5cbiAgICogQGV4dGVybmFsIGh0dHBzOi8vdGVjaC5lYnUuY2gvcHVibGljYXRpb25zL3RlY2gzMzgwXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZm9udCBmYW1pbHkgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBmb250RmFtaWx5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG1pbWVUeXBlIG9mIHRoZSByZXNvdXJjZSB0aGF0J3MgYXQgdGhlIGZvbnQgZG93bmxvYWQgVVJMLlxuICAgKiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgZm9udCBNSU1FIHR5cGVzLCBzZWUgdGhlIE1QRUctREFTSCBQcm9maWxlIGZvciBUcmFuc3BvcnQgb2YgSVNPIEJNRkYgQmFzZWQgRFZCIFNlcnZpY2VzIG92ZXIgSVAgQmFzZWQgTmV0d29ya3MgZG9jdW1lbnQuXG4gICAqXG4gICAqIEBleHRlcm5hbCBodHRwczovL2R2Yi5vcmcvd3AtY29udGVudC91cGxvYWRzLzIwMjEvMDYvQTE2OHI0X01QRUctREFTSC1Qcm9maWxlLWZvci1UcmFuc3BvcnQtb2YtSVNPLUJNRkYtQmFzZWQtRFZCLVNlcnZpY2VzX0RyYWZ0LXRzXzEwMy0yODUtdjE0MF9Ob3ZlbWJlcl8yMDIxLnBkZlxuICAgKiBAZGVmYXVsdCAtIE5vIE1JTUUgdHlwZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IG1pbWVUeXBlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFVSTCBmb3IgZG93bmxvYWRpbmcgZm9udHMgZm9yIHN1YnRpdGxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBmb250IGRvd25sb2FkIFVSTCBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHVybD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgZm9udCBkb3dubG9hZCBhbmQgZXJyb3IgcmVwb3J0aW5nIGluZm9ybWF0aW9uIHRoYXQgeW91IHdhbnQgTWVkaWFQYWNrYWdlIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaER2YlNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFBsYXliYWNrIGRldmljZSBlcnJvciByZXBvcnRpbmcgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZXJyb3IgbWV0cmljcyBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSBlcnJvck1ldHJpY3M/OiBEYXNoRHZiTWV0cmljc1JlcG9ydGluZ1tdO1xuICAvKipcbiAgICogU3VidGl0bGUgZm9udCBzZXR0aW5ncy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBmb250IGRvd25sb2FkIGNvbmZpZ3VyZWRcbiAgICovXG4gIHJlYWRvbmx5IGZvbnREb3dubG9hZD86IERhc2hEdmJGb250RG93bmxvYWQ7XG59XG5cbi8qKlxuICogRGV0YWlscyBhYm91dCB0aGUgY29udGVudCB0aGF0IHlvdSB3YW50IE1lZGlhUGFja2FnZSB0byBwYXNzIHRocm91Z2ggaW4gdGhlIG1hbmlmZXN0IHRvIHRoZSBwbGF5YmFjayBkZXZpY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaFByb2dyYW1JbmZvcm1hdGlvbiB7XG4gIC8qKlxuICAgKiBBIGNvcHlyaWdodCBzdGF0ZW1lbnQgYWJvdXQgdGhlIGNvbnRlbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gY29weXJpZ2h0IGluZm9ybWF0aW9uXG4gICAqL1xuICByZWFkb25seSBjb3B5cmlnaHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbGFuZ3VhZ2UgY29kZSBmb3IgdGhpcyBtYW5pZmVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBsYW5ndWFnZSBjb2RlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2VDb2RlPzogc3RyaW5nO1xuICAvKipcbiAgICogQW4gYWJzb2x1dGUgVVJMIHRoYXQgY29udGFpbnMgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNvbnRlbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBVUkxcbiAgICovXG4gIHJlYWRvbmx5IG1vcmVJbmZvcm1hdGlvblVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250ZW50IHByb3ZpZGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHNvdXJjZSBpbmZvcm1hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHRpdGxlIGZvciB0aGUgbWFuaWZlc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gdGl0bGUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB0aXRsZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBUVE1MIFByb2ZpbGVcbiAqL1xuZXhwb3J0IGVudW0gVHRtbFByb2ZpbGUge1xuICAvKipcbiAgICogSU1TQ18xXG4gICAqL1xuICBJTVNDXzE9J0lNU0NfMScsXG4gIC8qKlxuICAgKiBFQlVfVFRfRF8xMDFcbiAgICovXG4gIEVCVV9UVF9EXzEwMT0nRUJVX1RUX0RfMTAxJyxcbn1cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgVFRNTCBzdWJ0aXRsZXMgaW4gREFTSCBtYW5pZmVzdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaFR0bWxDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9maWxlIHRoYXQgTWVkaWFQYWNrYWdlIHVzZXMgd2hlbiBzaWduYWxpbmcgc3VidGl0bGVzIGluIHRoZSBtYW5pZmVzdC4gSU1TQyBpcyB0aGUgZGVmYXVsdCBwcm9maWxlLiBFQlUtVFQtRCBwcm9kdWNlcyBzdWJ0aXRsZXMgdGhhdCBhcmUgY29tcGxpYW50IHdpdGggdGhlIEVCVS1UVC1EIFRUTUwgcHJvZmlsZS4gTWVkaWFQYWNrYWdlIHBhc3NlcyB0aHJvdWdoIHN1YnRpdGxlIHN0eWxlcyB0byB0aGUgbWFuaWZlc3QuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEVCVS1UVC1EIHN1YnRpdGxlcywgc2VlIEVCVS1UVC1EIFN1YnRpdGxpbmcgRGlzdHJpYnV0aW9uIEZvcm1hdC5cbiAgICpcbiAgICogQGV4dGVybmFsIGh0dHBzOi8vdGVjaC5lYnUuY2gvcHVibGljYXRpb25zL3RlY2gzMzgwXG4gICAqL1xuICByZWFkb25seSB0dG1sUHJvZmlsZTogVHRtbFByb2ZpbGU7XG5cbn1cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igc3VidGl0bGVzIGluIERBU0ggbWFuaWZlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhc2hTdWJ0aXRsZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogU2V0dGluZ3MgZm9yIFRUTUwgc3VidGl0bGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIFRUTUwgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdHRtbENvbmZpZ3VyYXRpb24/OiBEYXNoVHRtbENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogVGhlIGxheW91dCBvZiB0aGUgTVNTIG1hbmlmZXN0LlxuICovXG5leHBvcnQgZW51bSBNc3NNYW5pZmVzdExheW91dCB7XG4gIC8qKlxuICAgKiBGdWxsIG1hbmlmZXN0IGxheW91dC5cbiAgICovXG4gIEZVTEwgPSAnRlVMTCcsXG4gIC8qKlxuICAgKiBDb21wYWN0IG1hbmlmZXN0IGxheW91dC5cbiAgICovXG4gIENPTVBBQ1QgPSAnQ09NUEFDVCcsXG59XG5cbi8qKlxuICogVGhlIE1TUyBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1zc01hbmlmZXN0Q29uZmlndXJhdGlvbiBleHRlbmRzIE1hbmlmZXN0Q29uZmlndXJhdGlvbkJhc2Uge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1hbmlmZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgTVNTIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdE5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsYXlvdXQgb2YgdGhlIE1TUyBtYW5pZmVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgTXNzTWFuaWZlc3RMYXlvdXQuRlVMTFxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3RMYXlvdXQ/OiBNc3NNYW5pZmVzdExheW91dDtcbn1cblxuLyoqXG4gKiBUaGUgREFTSCBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhc2hNYW5pZmVzdENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBNYW5pZmVzdENvbmZpZ3VyYXRpb25CYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIFVSTHMgdG8gdXNlIGZvciByZXRyaWV2aW5nIHNlZ21lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGJhc2UgVVJMcyBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VVcmxzPzogRGFzaEJhc2VVcmxQcm9wZXJ0eVtdO1xuICAvKipcbiAgICogVGhlIGxheW91dCBvZiB0aGUgREFTSCBtYW5pZmVzdCB0aGF0IE1lZGlhUGFja2FnZSBwcm9kdWNlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgRGFzaE1hbmlmZXN0Q29tcGFjdG5lc3MuU1RBTkRBUkRcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBhY3RuZXNzPzogRGFzaE1hbmlmZXN0Q29tcGFjdG5lc3M7XG4gIC8qKlxuICAgKiBGb3IgZW5kcG9pbnRzIHRoYXQgdXNlIHRoZSBEVkItREFTSCBwcm9maWxlIG9ubHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gRFZCIHNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBkdmJTZXR0aW5ncz86IERhc2hEdmJTZXR0aW5ncztcbiAgLyoqXG4gICAqIFRoZSBwcm9maWxlIHRoYXQgdGhlIG91dHB1dCBpcyBjb21wbGlhbnQgd2l0aC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwcm9maWxlcyBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2ZpbGVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBEZXRhaWxzIGFib3V0IHRoZSBjb250ZW50IHRoYXQgeW91IHdhbnQgTWVkaWFQYWNrYWdlIHRvIHBhc3MgdGhyb3VnaCBpbiB0aGUgbWFuaWZlc3QgdG8gdGhlIHBsYXliYWNrIGRldmljZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwcm9ncmFtIGluZm9ybWF0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9ncmFtSW5mb3JtYXRpb24/OiBEYXNoUHJvZ3JhbUluZm9ybWF0aW9uO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZm9yIERBU0ggc3VidGl0bGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHN1YnRpdGxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN1YnRpdGxlQ29uZmlndXJhdGlvbj86IERhc2hTdWJ0aXRsZUNvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbWFuaWZlc3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBEQVNIIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdE5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIERSTSBzaWduYWxpbmcgZGV0ZXJtaW5lcyB0aGUgd2F5IERBU0ggbWFuaWZlc3Qgc2lnbmFscyB0aGUgRFJNIGNvbnRlbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gRFJNIHNpZ25hbGluZyBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IGRybVNpZ25hbGxpbmc/OiBEcm1TaWduYWxsaW5nO1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIGNvbnRlbnQgdGhhdCB0aGUgcGxheWVyIG11c3Qga2VlcCBhdmFpbGFibGUgaW4gdGhlIGJ1ZmZlci5cbiAgICpcbiAgICogQGRlZmF1bHQgNVxuICAgKi9cbiAgcmVhZG9ubHkgbWluQnVmZmVyVGltZT86IER1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIG1pbmltdW0gYW1vdW50IG9mIHRpbWUgZm9yIHRoZSBwbGF5ZXIgdG8gd2FpdCBiZWZvcmUgcmVxdWVzdGluZyBhbiB1cGRhdGVkIG1hbmlmZXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSBtaW5VcGRhdGVQZXJpb2Q/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hhdCB0cmlnZ2VycyBjYXVzZSBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZSB0byBjcmVhdGUgbWVkaWEgcHJlc2VudGF0aW9uIGRlc2NyaXB0aW9uIChNUEQpIHBlcmlvZHMgaW4gdGhlIG91dHB1dCBtYW5pZmVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgW0Rhc2hQZXJpb2RUcmlnZ2Vycy5BVkFJTFMsIERhc2hQZXJpb2RUcmlnZ2Vycy5EUk1fS0VZX1JPVEFUSU9OLCBEYXNoUGVyaW9kVHJpZ2dlcnMuU09VUkNFX0NIQU5HRVMsIERhc2hQZXJpb2RUcmlnZ2Vycy5TT1VSQ0VfRElTUlVQVElPTlNdXG4gICAqL1xuICByZWFkb25seSBwZXJpb2RUcmlnZ2Vycz86IERhc2hQZXJpb2RUcmlnZ2Vyc1tdO1xuICAvKipcbiAgICogQ2hvb3NlIGhvdyBhZCBtYXJrZXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgcGFja2FnZWQgY29udGVudC4gSWYgeW91IGluY2x1ZGUgYWQgbWFya2VycyBpbiB0aGUgY29udGVudCBzdHJlYW0gaW4geW91ciB1cHN0cmVhbSBlbmNvZGVycyxcbiAgICogdGhlbiB5b3UgbmVlZCB0byBpbmZvcm0gTWVkaWFQYWNrYWdlIHdoYXQgdG8gZG8gd2l0aCB0aGUgYWQgbWFya2VycyBpbiB0aGUgb3V0cHV0LlxuICAgKlxuICAgKiBUbyBjaG9vc2UgdGhpcyBvcHRpb24gU1RDRSBmaWx0ZXJpbmcgbmVlZHMgdG8gYmUgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgQWRNYXJrZXJEYXNoLlhNTFxuICAgKi9cbiAgcmVhZG9ubHkgc2N0ZURhc2hBZE1hcmtlcj86IEFkTWFya2VyRGFzaDtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHZhcmlhYmxlIHRoYXQgTWVkaWFQYWNrYWdlIHVzZXMgaW4gdGhlIG1lZGlhIGF0dHJpYnV0ZSBvZiB0aGUgU2VnbWVudFRlbXBsYXRlIHRhZy5cbiAgICpcbiAgICogQGRlZmF1bHQgU2VnbWVudFRlbXBsYXRlRm9ybWF0Lk5VTUJFUl9XSVRIX1RJTUVMSU5FXG4gICAqL1xuICByZWFkb25seSBzZWdtZW50VGVtcGxhdGVGb3JtYXQ/OiBTZWdtZW50VGVtcGxhdGVGb3JtYXQ7XG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IG9mIHRpbWUgdGhhdCB0aGUgcGxheWVyIHNob3VsZCBiZSBmcm9tIHRoZSBlbmQgb2YgdGhlIG1hbmlmZXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAxMFxuICAgKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGVkUHJlc2VudGF0aW9uRGVsYXk/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBVVEMgdGltaW5nIG1vZGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IERhc2hVdGNUaW1pbmdNb2RlLlVUQ19ESVJFQ1RcbiAgICovXG4gIHJlYWRvbmx5IHV0Y1RpbWluZ01vZGU/OiBEYXNoVXRjVGltaW5nTW9kZTtcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdGhhdCB0aGUgcGxheWVyIHVzZXMgdG8gc3luY2hyb25pemUgdG8gY29vcmRpbmF0ZWQgdW5pdmVyc2FsIHRpbWUgKFVUQykgd2FsbCBjbG9jayB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyB2YWx1ZSBpcyBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHV0Y1RpbWluZ1NvdXJjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgSExTIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSGxzTWFuaWZlc3RDb25maWd1cmF0aW9uIGV4dGVuZHMgTWFuaWZlc3RDb25maWd1cmF0aW9uQmFzZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbWFuaWZlc3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBITFMgbWFuaWZlc3QgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNoaWxkIG1hbmlmZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgSExTIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gY2hpbGQgbWFuaWZlc3QgbmFtZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IGNoaWxkTWFuaWZlc3ROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogSW5zZXJ0cyBFWFQtWC1QUk9HUkFNLURBVEUtVElNRSB0YWdzIGluIHRoZSBvdXRwdXQgbWFuaWZlc3QgYXQgdGhlIGludGVydmFsIHRoYXQgeW91IHNwZWNpZnkuXG4gICAqIElmIHlvdSBkb24ndCBlbnRlciBhbiBpbnRlcnZhbCwgRVhULVgtUFJPR1JBTS1EQVRFLVRJTUUgdGFncyBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlIG1hbmlmZXN0LlxuICAgKiBUaGUgdGFncyBzeW5jIHRoZSBzdHJlYW0gdG8gdGhlIHdhbGwgY2xvY2sgc28gdGhhdCB2aWV3ZXJzIGNhbiBzZWVrIHRvIGEgc3BlY2lmaWMgdGltZSBpbiB0aGUgcGxheWJhY2sgdGltZWxpbmUgb24gdGhlIHBsYXllci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwcm9ncmFtIGRhdGUgdGltZSBpbnRlcnZhbFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZ3JhbURhdGVUaW1lSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBTQ1RFLTM1IEhMUyBjb25maWd1cmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgSExTIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBTQ1RFIGFkIG1hcmtlciBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzY3RlQWRNYXJrZXJIbHM/OiBBZE1hcmtlckhscztcbiAgLyoqXG4gICAqIEluc2VydCBFWFQtWC1TVEFSVCB0YWcgaW4gdGhlIG1hbmlmZXN0IHdpdGggdGhlIGNvbmZpZ3VyZWQgc2V0dGluZ3NcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzdGFydCB0YWdcbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0VGFnPzogU3RhcnRUYWc7XG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIE1lZGlhUGFja2FnZSBVUkwtZW5jb2RlcyB0aGUgcXVlcnkgc3RyaW5nIGZvciBBUEkgcmVxdWVzdHMgZm9yIEhMUyBjaGlsZCBtYW5pZmVzdHMgdG8gY29tcGx5IHdpdGggQVdTIFNpZ25hdHVyZSBWZXJzaW9uIDQgKFNpZ1Y0KSBzaWduYXR1cmUgc2lnbmluZyBwcm90b2NvbC5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBBV1MgU2lnbmF0dXJlIFZlcnNpb24gNCBmb3IgQVBJIHJlcXVlc3RzIGluIEFXUyBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnQgVXNlciBHdWlkZS5cbiAgICpcbiAgICogQGV4dGVybmFsIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2Vfc2lndi5odG1sXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB1cmxFbmNvZGVDaGlsZE1hbmlmZXN0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTcGVjaWZ5IGEgbG93LWxhdGVuY3kgSFRUUCBsaXZlIHN0cmVhbWluZyAoTEwtSExTKSBtYW5pZmVzdCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvd0xhdGVuY3lIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBNYW5pZmVzdENvbmZpZ3VyYXRpb25CYXNlIHtcbiAgLyoqXG4gICAqIEEgc2hvcnQgc3RyaW5nIHRoYXQncyBhcHBlbmRlZCB0byB0aGUgZW5kcG9pbnQgVVJMLiBUaGUgbWFuaWZlc3QgbmFtZSBjcmVhdGVzIGEgdW5pcXVlIHBhdGggdG8gdGhpcyBlbmRwb2ludC5cbiAgICogSWYgeW91IGRvbid0IGVudGVyIGEgdmFsdWUsIE1lZGlhUGFja2FnZSB1c2VzIHRoZSBkZWZhdWx0IG1hbmlmZXN0IG5hbWUsIGluZGV4LiBNZWRpYVBhY2thZ2UgYXV0b21hdGljYWxseSBpbnNlcnRzIHRoZSBmb3JtYXQgZXh0ZW5zaW9uLCBzdWNoIGFzIC5tM3U4LlxuICAgKiBZb3UgY2FuJ3QgdXNlIHRoZSBzYW1lIG1hbmlmZXN0IG5hbWUgaWYgeW91IHVzZSBITFMgbWFuaWZlc3QgYW5kIGxvdy1sYXRlbmN5IEhMUyBtYW5pZmVzdC5cbiAgICogVGhlIG1hbmlmZXN0TmFtZSBvbiB0aGUgSExTTWFuaWZlc3Qgb2JqZWN0IG92ZXJyaWRlcyB0aGUgbWFuaWZlc3ROYW1lIHlvdSBwcm92aWRlZCBvbiB0aGUgb3JpZ2luRW5kcG9pbnQgb2JqZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3ROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY2hpbGQgbWFuaWZlc3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBsb3ctbGF0ZW5jeSBITFMgKExMLUhMUykgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBvZiB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGNoaWxkIG1hbmlmZXN0IG5hbWUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBjaGlsZE1hbmlmZXN0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEluc2VydHMgRVhULVgtUFJPR1JBTS1EQVRFLVRJTUUgdGFncyBpbiB0aGUgb3V0cHV0IG1hbmlmZXN0IGF0IHRoZSBpbnRlcnZhbCB0aGF0IHlvdSBzcGVjaWZ5LlxuICAgKiBJZiB5b3UgZG9uJ3QgZW50ZXIgYW4gaW50ZXJ2YWwsIEVYVC1YLVBST0dSQU0tREFURS1USU1FIHRhZ3MgYXJlbid0IGluY2x1ZGVkIGluIHRoZSBtYW5pZmVzdC5cbiAgICogVGhlIHRhZ3Mgc3luYyB0aGUgc3RyZWFtIHRvIHRoZSB3YWxsIGNsb2NrIHNvIHRoYXQgdmlld2VycyBjYW4gc2VlayB0byBhIHNwZWNpZmljIHRpbWUgaW4gdGhlIHBsYXliYWNrIHRpbWVsaW5lIG9uIHRoZSBwbGF5ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJvZ3JhbSBkYXRlIHRpbWUgaW50ZXJ2YWxcbiAgICovXG4gIHJlYWRvbmx5IHByb2dyYW1EYXRlVGltZUludGVydmFsPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgU0NURS0zNSBITFMgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGxvdy1sYXRlbmN5IEhMUyAoTEwtSExTKSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIG9mIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gU0NURSBhZCBtYXJrZXIgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc2N0ZUFkTWFya2VySGxzPzogQWRNYXJrZXJIbHM7XG4gIC8qKlxuICAgKiBJbnNlcnQgRVhULVgtU1RBUlQgdGFnIGluIHRoZSBtYW5pZmVzdCB3aXRoIHRoZSBjb25maWd1cmVkIHNldHRpbmdzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RhcnQgdGFnXG4gICAqL1xuICByZWFkb25seSBzdGFydFRhZz86IFN0YXJ0VGFnO1xuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBNZWRpYVBhY2thZ2UgVVJMLWVuY29kZXMgdGhlIHF1ZXJ5IHN0cmluZyBmb3IgQVBJIHJlcXVlc3RzIGZvciBMTC1ITFMgY2hpbGQgbWFuaWZlc3RzIHRvIGNvbXBseSB3aXRoIEFXUyBTaWduYXR1cmUgVmVyc2lvbiA0IChTaWdWNCkgc2lnbmF0dXJlIHNpZ25pbmcgcHJvdG9jb2wuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQVdTIFNpZ25hdHVyZSBWZXJzaW9uIDQgZm9yIEFQSSByZXF1ZXN0cyBpbiBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBleHRlcm5hbCBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3NpZ3YuaHRtbFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdXJsRW5jb2RlQ2hpbGRNYW5pZmVzdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBhbiBBV1MgRWxlbWVudGFsIE1lZGlhUGFja2FnZSBWMiBPcmlnaW4gRW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luRW5kcG9pbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcmlnaW4gZW5kcG9pbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW4gZW5kcG9pbnQgY29uZmlndXJhdGlvbi5cbiAgICogQGRlZmF1bHQgYXV0b2dlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luRW5kcG9pbnROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIGRlc2NyaXB0aW9uIGlzIGFkZGVkIHRvIE9yaWdpbiBFbmRwb2ludFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ2dpbmdcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBNYW5pZmVzdHMgY29uZmlndXJhdGlvbiBmb3IgSExTLCBMb3cgTGF0ZW5jeSBITFMgYW5kIERBU0guXG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdHM6IE1hbmlmZXN0W107XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSB3aW5kb3cgdG8gc3BlY2lmeSBhIHdpbmRvdyBvZiB0aGUgbGl2ZSBzdHJlYW0gdGhhdCdzIGF2YWlsYWJsZSBmb3Igb24tZGVtYW5kIHZpZXdpbmcuIFZpZXdlcnMgY2FuIHN0YXJ0LW92ZXIgb3IgY2F0Y2gtdXAgb24gY29udGVudCB0aGF0IGZhbGxzIHdpdGhpbiB0aGUgd2luZG93LlxuICAgKlxuICAgKiBAZGVmYXVsdCA5MDBcbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0b3ZlcldpbmRvdz86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VnbWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICpcbiAgICogSW5zaWRlIHRoZSBzZWdtZW50IGNvbmZpZ3VyYXRpb24geW91IGNhbiBkZWZpbmUgb3B0aW9ucyBzdWNoIGFzIGVuY3J5cHRpb24sIFNQRUtFIHBhcmFtZXRlcnMgYW5kIG90aGVyXG4gICAqIGdlbmVyYWwgc2VnbWVudCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogVXNlIFNlZ21lbnQudHMoKSBvciBTZWdtZW50LmNtYWYoKSB0byBjcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBzZWdtZW50OiBTZWdtZW50Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGZhaWxvdmVyIHNldHRpbmdzIGZvciB0aGUgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vIGZvcmNlIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gaXMgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2VFbmRwb2ludENvbmZpZ3VyYXRpb25Db25kaXRpb25zPzogRW5kcG9pbnRFcnJvckNvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogUHJvdmlkZSBhY2Nlc3MgdG8gTWVkaWFQYWNrYWdlIFYyIE9yaWdpbiBFbmRwb2ludCB2aWEgc2VjcmV0IGhlYWRlci5cbiAgICpcbiAgICogVXNlIHRoaXMgd2hlbiB5b3VyIENETiBkb2Vzbid0IHN1cHBvcnQgQVdTIFNpZ25hdHVyZSBWZXJzaW9uIDQgKFNpZ1Y0KVxuICAgKiBhdXRoZW50aWNhdGlvbi4gRm9yIFNpZ1Y0LWJhc2VkIGFjY2VzcyB3aXRoIEFtYXpvbiBDbG91ZEZyb250LCBzZWVcbiAgICogYE1lZGlhUGFja2FnZVYyT3JpZ2luYC5cbiAgICpcbiAgICogU2V0dGluZyBgY2RuQXV0aGAgYXV0by1jcmVhdGVzIHRoZSBmb2xsb3dpbmcgcG9saWN5IG9uIHRoZSBPcmlnaW5FbmRwb2ludDpcbiAgICpcbiAgICogYGBganNvblxuICAgKiB7XG4gICAqICAgXCJWZXJzaW9uXCI6XCIyMDEyLTEwLTE3XCIsXG4gICAqICAgXCJTdGF0ZW1lbnRcIjogW1xuICAgKiAgICAge1xuICAgKiAgICAgICBcIlNpZFwiOiBcIkFsbG93R2V0T2JqZWN0QWNjZXNzRm9yQXV0aG9yaXplZFJlcXVlc3RcIixcbiAgICogICAgICAgXCJFZmZlY3RcIjogXCJBbGxvd1wiLFxuICAgKiAgICAgICBcIlByaW5jaXBhbFwiOiBcIipcIixcbiAgICogICAgICAgXCJBY3Rpb25cIjogXCJtZWRpYXBhY2thZ2V2MjpHZXRPYmplY3RcIixcbiAgICogICAgICAgXCJSZXNvdXJjZVwiOiBcImFybjphd3M6bWVkaWFwYWNrYWdldjI6dXMtZWFzdC0xOjExMTEyMjIyMzMzMzpjaGFubmVsR3JvdXAvY2hhbm5lbEdyb3VwTmFtZS9jaGFubmVsL2NoYW5uZWxOYW1lL29yaWdpbkVuZHBvaW50L29yaWdpbkVuZHBvaW50TmFtZVwiLFxuICAgKiAgICAgICBcIkNvbmRpdGlvblwiOiB7XG4gICAqICAgICAgICAgXCJCb29sXCI6IHtcbiAgICogICAgICAgICAgIFwibWVkaWFwYWNrYWdldjI6UmVxdWVzdEhhc01hdGNoaW5nQ2RuQXV0aEhlYWRlclwiOiBcInRydWVcIlxuICAgKiAgICAgICAgIH1cbiAgICogICAgICAgfVxuICAgKiAgICAgfVxuICAgKiAgIF1cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvY2RuLWF1dGguaHRtbFxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tZWRpYXBhY2thZ2UvbGF0ZXN0L3VzZXJndWlkZS9jZG4tYXV0aC1zZXR1cC5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vdCBjb25maWd1cmVkIG9uIGVuZHBvaW50XG4gICAqL1xuICByZWFkb25seSBjZG5BdXRoPzogQ2RuQXV0aENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFBvbGljeSB0byBhcHBseSB3aGVuIHRoZSBvcmlnaW4gZW5kcG9pbnQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBFdmVuIHRob3VnaCBNZWRpYVBhY2thZ2UgQ2hhbm5lbEdyb3VwcywgQ2hhbm5lbHMgYW5kIE9yaWdpbkVuZHBvaW50cyBhcmUgdGVjaG5pY2FsbHkgc3RhdGVmdWwsXG4gICAqIHRoZWlyIGNvbnRlbnRzIGFyZSB0cmFuc2llbnQgYW5kIGl0IGlzIGNvbW1vbiB0byBhZGQgYW5kIHJlbW92ZSB0aGVzZSB3aGlsZSByZWFyY2hpdGVjdGluZyB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKiBUaGUgZGVmYXVsdCBpcyB0aGVyZWZvcmUgYERFU1RST1lgLiBDaGFuZ2UgaXQgdG8gYFJFVEFJTmAgaWYgdGhlIGNvbnRlbnQgKGluIGEgbG9va2JhY2sgd2luZG93KSBhcmUgc29cbiAgICogdmFsdWFibGUgdGhhdCBhY2NpZGVudGFsbHkgbG9zaW5nIGl0IHdvdWxkIGJlIHVuYWNjZXB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZXG4gICAqL1xuICByZWFkb25seSByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIHNldCBvbiBhbiBPcmlnaW4gRW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3JpZ2luRW5kcG9pbnRQcm9wcyBleHRlbmRzIE9yaWdpbkVuZHBvaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgY2hhbm5lbCBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5uZWw6IElDaGFubmVsO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gT3JpZ2luIEVuZHBvaW50IGRlZmluZWQgb3V0c2lkZSBvZiB0aGlzIHN0YWNrLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkVuZHBvaW50QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSB0aGF0IGRlc2NyaWJlcyB0aGUgY2hhbm5lbCBncm91cC4gVGhlIG5hbWUgaXMgdGhlIHByaW1hcnkgaWRlbnRpZmllciBmb3IgdGhlIGNoYW5uZWwgZ3JvdXAuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5uZWxHcm91cE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgdGhhdCBkZXNjcmliZXMgdGhlIGNoYW5uZWwuIFRoZSBuYW1lIGlzIHRoZSBwcmltYXJ5IGlkZW50aWZpZXIgZm9yIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSB0aGF0IGRlc2NyaWJlcyB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5FbmRwb2ludE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gd2hlcmUgdGhlIG9yaWdpbiBlbmRwb2ludCBsaXZlcy5cbiAgICpcbiAgICogUmVxdWlyZWQgZm9yIGNyb3NzLXJlZ2lvbiBpbXBvcnRzIHRvIGNvbnN0cnVjdCB0aGUgY29ycmVjdCBBUk4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGltcG9ydGluZyBzdGFjaydzIHJlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERSTSBzeXN0ZW1zIGF2YWlsYWJsZSBmb3IgQ01BRiBlbmNyeXB0aW9uLlxuICpcbiAqIENFTkMgc3VwcG9ydHMgUGxheVJlYWR5LCBXaWRldmluZSwgYW5kIElyZGV0by5cbiAqIENCQ1Mgc3VwcG9ydHMgUGxheVJlYWR5LCBXaWRldmluZSwgYW5kIEZhaXJQbGF5LlxuICovXG5leHBvcnQgZW51bSBDbWFmRHJtU3lzdGVtIHtcbiAgLyoqXG4gICAqIEZhaXJQbGF5IERSTSAtIHVzZWQgd2l0aCBDQkNTIGVuY3J5cHRpb24uXG4gICAqL1xuICBGQUlSUExBWSA9ICdGQUlSUExBWScsXG4gIC8qKlxuICAgKiBQbGF5UmVhZHkgRFJNIC0gdXNlZCB3aXRoIENFTkMgYW5kIENCQ1MgZW5jcnlwdGlvbi5cbiAgICovXG4gIFBMQVlSRUFEWSA9ICdQTEFZUkVBRFknLFxuICAvKipcbiAgICogV2lkZXZpbmUgRFJNIC0gdXNlZCB3aXRoIENFTkMgYW5kIENCQ1MgZW5jcnlwdGlvbi5cbiAgICovXG4gIFdJREVWSU5FID0gJ1dJREVWSU5FJyxcbiAgLyoqXG4gICAqIElyZGV0byBEUk0gLSB1c2VkIHdpdGggQ0VOQyBlbmNyeXB0aW9uLlxuICAgKi9cbiAgSVJERVRPID0gJ0lSREVUTycsXG59XG5cbi8qKlxuICogRFJNIHN5c3RlbXMgYXZhaWxhYmxlIGZvciBUUyBlbmNyeXB0aW9uLlxuICpcbiAqIFNBTVBMRV9BRVMgdXNlcyBGYWlyUGxheSwgQUVTXzEyOCB1c2VzIENsZWFyIEtleSBBRVMgMTI4LlxuICovXG5leHBvcnQgZW51bSBUc0RybVN5c3RlbSB7XG4gIC8qKlxuICAgKiBGYWlyUGxheSBEUk0gLSB1c2VkIHdpdGggU0FNUExFX0FFUyBlbmNyeXB0aW9uLlxuICAgKi9cbiAgRkFJUlBMQVkgPSAnRkFJUlBMQVknLFxuICAvKipcbiAgICogQ2xlYXIgS2V5IEFFUyAxMjggLSB1c2VkIHdpdGggQUVTXzEyOCBlbmNyeXB0aW9uLlxuICAgKi9cbiAgQ0xFQVJfS0VZX0FFU18xMjggPSAnQ0xFQVJfS0VZX0FFU18xMjgnLFxufVxuXG4vKipcbiAqIERSTSBzeXN0ZW1zIGF2YWlsYWJsZSBmb3IgSVNNIGVuY3J5cHRpb24uXG4gKlxuICogSVNNIG9ubHkgc3VwcG9ydHMgUGxheVJlYWR5IHdpdGggQ0VOQy5cbiAqL1xuZXhwb3J0IGVudW0gSXNtRHJtU3lzdGVtIHtcbiAgLyoqXG4gICAqIFBsYXlSZWFkeSBEUk0uXG4gICAqL1xuICBQTEFZUkVBRFkgPSAnUExBWVJFQURZJyxcbn1cblxuLyoqXG4gKiBCYXNlIHByb3BlcnRpZXMgY29tbW9uIHRvIGFsbCBTUEVLRSBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb25zLlxuICovXG5pbnRlcmZhY2UgU3Bla2VFbmNyeXB0aW9uUHJvcHNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbnRlbnQuXG4gICAqXG4gICAqIFRoZSBzZXJ2aWNlIHNlbmRzIHRoaXMgaWRlbnRpZmllciB0byB0aGUga2V5IHNlcnZlciB0byBpZGVudGlmeSB0aGUgY3VycmVudCBlbmRwb2ludC5cbiAgICogSG93IHVuaXF1ZSB5b3UgbWFrZSB0aGlzIGlkZW50aWZpZXIgZGVwZW5kcyBvbiBob3cgZmluZS1ncmFpbmVkIHlvdSB3YW50IGFjY2VzcyBjb250cm9scyB0byBiZS5cbiAgICogVGhlIHNlcnZpY2UgZG9lcyBub3QgcGVybWl0IHlvdSB0byB1c2UgdGhlIHNhbWUgSUQgZm9yIHR3byBzaW11bHRhbmVvdXMgZW5jcnlwdGlvbiBwcm9jZXNzZXMuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElBTSByb2xlIGZvciBhY2Nlc3NpbmcgdGhlIGtleSBwcm92aWRlciBBUEkuXG4gICAqXG4gICAqIFRoaXMgcm9sZSBtdXN0IGhhdmUgYSB0cnVzdCBwb2xpY3kgdGhhdCBhbGxvd3MgTWVkaWFQYWNrYWdlIHRvIGFzc3VtZSB0aGUgcm9sZSxcbiAgICogYW5kIGl0IG11c3QgaGF2ZSBzdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0aGUga2V5IHJldHJpZXZhbCBVUkwuXG4gICAqL1xuICByZWFkb25seSByb2xlOiBJUm9sZTtcblxuICAvKipcbiAgICogVVJMIG9mIHRoZSBTUEVLRSBrZXkgcHJvdmlkZXIuXG4gICAqL1xuICByZWFkb25seSB1cmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY2VydGlmaWNhdGUgdGhhdCB5b3UgaW1wb3J0ZWQgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXJcbiAgICogdG8gYWRkIGNvbnRlbnQga2V5IGVuY3J5cHRpb24gdG8gdGhpcyBlbmRwb2ludC5cbiAgICpcbiAgICogRm9yIHRoaXMgZmVhdHVyZSB0byB3b3JrLCB5b3VyIERSTSBrZXkgcHJvdmlkZXIgbXVzdCBzdXBwb3J0IGNvbnRlbnQga2V5IGVuY3J5cHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29udGVudCBrZXkgZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGU7XG5cbiAgLyoqXG4gICAqIEF1ZGlvIGVuY3J5cHRpb24gcHJlc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBQcmVzZXRTcGVrZTIwQXVkaW8uUFJFU0VUX0FVRElPXzFcbiAgICovXG4gIHJlYWRvbmx5IGF1ZGlvUHJlc2V0PzogUHJlc2V0U3Bla2UyMEF1ZGlvO1xuXG4gIC8qKlxuICAgKiBWaWRlbyBlbmNyeXB0aW9uIHByZXNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgUHJlc2V0U3Bla2UyMFZpZGVvLlBSRVNFVF9WSURFT18xXG4gICAqL1xuICByZWFkb25seSB2aWRlb1ByZXNldD86IFByZXNldFNwZWtlMjBWaWRlbztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBDTUFGIFNQRUtFIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbWFmU3Bla2VFbmNyeXB0aW9uUHJvcHMgZXh0ZW5kcyBTcGVrZUVuY3J5cHRpb25Qcm9wc0Jhc2Uge1xuICAvKipcbiAgICogVGhlIGVuY3J5cHRpb24gbWV0aG9kIHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZDogQ21hZkVuY3J5cHRpb25NZXRob2Q7XG5cbiAgLyoqXG4gICAqIFRoZSBEUk0gc3lzdGVtcyB0byB1c2UgZm9yIGNvbnRlbnQgcHJvdGVjdGlvbi5cbiAgICpcbiAgICogQ0VOQyBzdXBwb3J0cyBQbGF5UmVhZHksIFdpZGV2aW5lLCBhbmQgSXJkZXRvLlxuICAgKiBDQkNTIHN1cHBvcnRzIFBsYXlSZWFkeSwgV2lkZXZpbmUsIGFuZCBGYWlyUGxheS5cbiAgICovXG4gIHJlYWRvbmx5IGRybVN5c3RlbXM6IENtYWZEcm1TeXN0ZW1bXTtcblxuICAvKipcbiAgICogQ29uc3RhbnQgaW5pdGlhbGl6YXRpb24gdmVjdG9yICgzMi1jaGFyYWN0ZXIgaGV4IHN0cmluZykuXG4gICAqXG4gICAqIEEgMTI4LWJpdCwgMTYtYnl0ZSBoZXggdmFsdWUgcmVwcmVzZW50ZWQgYnkgYSAzMi1jaGFyYWN0ZXIgc3RyaW5nLFxuICAgKiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGtleSBmb3IgZW5jcnlwdGluZyBjb250ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE1lZGlhUGFja2FnZSBnZW5lcmF0ZXMgdGhlIElWXG4gICAqL1xuICByZWFkb25seSBjb25zdGFudEluaXRpYWxpemF0aW9uVmVjdG9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZXkgcm90YXRpb24gaW50ZXJ2YWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcm90YXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGtleVJvdGF0aW9uSW50ZXJ2YWw/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBEUk0gbWV0YWRhdGEgaXMgZXhjbHVkZWQgZnJvbSBDTUFGIHNlZ21lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZVNlZ21lbnREcm1NZXRhZGF0YT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgVFMgU1BFS0UgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRzU3Bla2VFbmNyeXB0aW9uUHJvcHMgZXh0ZW5kcyBTcGVrZUVuY3J5cHRpb25Qcm9wc0Jhc2Uge1xuICAvKipcbiAgICogVGhlIGVuY3J5cHRpb24gbWV0aG9kIHRvIHVzZS5cbiAgICovXG4gIHJlYWRvbmx5IG1ldGhvZDogVHNFbmNyeXB0aW9uTWV0aG9kO1xuXG4gIC8qKlxuICAgKiBUaGUgRFJNIHN5c3RlbXMgdG8gdXNlIGZvciBjb250ZW50IHByb3RlY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRmFpclBsYXkgZm9yIFNBTVBMRV9BRVMsIENsZWFyIEtleSBBRVMgMTI4IGZvciBBRVNfMTI4XG4gICAqL1xuICByZWFkb25seSBkcm1TeXN0ZW1zPzogVHNEcm1TeXN0ZW1bXTtcblxuICAvKipcbiAgICogQ29uc3RhbnQgaW5pdGlhbGl6YXRpb24gdmVjdG9yICgzMi1jaGFyYWN0ZXIgaGV4IHN0cmluZykuXG4gICAqXG4gICAqIEEgMTI4LWJpdCwgMTYtYnl0ZSBoZXggdmFsdWUgcmVwcmVzZW50ZWQgYnkgYSAzMi1jaGFyYWN0ZXIgc3RyaW5nLFxuICAgKiB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGtleSBmb3IgZW5jcnlwdGluZyBjb250ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE1lZGlhUGFja2FnZSBnZW5lcmF0ZXMgdGhlIElWXG4gICAqL1xuICByZWFkb25seSBjb25zdGFudEluaXRpYWxpemF0aW9uVmVjdG9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZXkgcm90YXRpb24gaW50ZXJ2YWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcm90YXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGtleVJvdGF0aW9uSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBJU00gU1BFS0UgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uLlxuICpcbiAqIElTTSBvbmx5IHN1cHBvcnRzIENFTkMgZW5jcnlwdGlvbiB3aXRoIFBsYXlSZWFkeSBEUk0uXG4gKiBLZXkgcm90YXRpb24gYW5kIGNvbnN0YW50IGluaXRpYWxpemF0aW9uIHZlY3RvcnMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gKiBBdWRpbyBhbmQgdmlkZW8gcHJlc2V0cyBkZWZhdWx0IHRvIFNIQVJFRC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc21TcGVrZUVuY3J5cHRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgRFJNIHN5c3RlbXMgdG8gdXNlIGZvciBjb250ZW50IHByb3RlY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gW0lzbURybVN5c3RlbS5QTEFZUkVBRFldXG4gICAqL1xuICByZWFkb25seSBkcm1TeXN0ZW1zPzogSXNtRHJtU3lzdGVtW107XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvbnRlbnQuXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElBTSByb2xlIGZvciBhY2Nlc3NpbmcgdGhlIGtleSBwcm92aWRlciBBUEkuXG4gICAqL1xuICByZWFkb25seSByb2xlOiBJUm9sZTtcblxuICAvKipcbiAgICogVVJMIG9mIHRoZSBTUEVLRSBrZXkgcHJvdmlkZXIuXG4gICAqL1xuICByZWFkb25seSB1cmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY2VydGlmaWNhdGUgdGhhdCB5b3UgaW1wb3J0ZWQgdG8gQVdTIENlcnRpZmljYXRlIE1hbmFnZXJcbiAgICogdG8gYWRkIGNvbnRlbnQga2V5IGVuY3J5cHRpb24gdG8gdGhpcyBlbmRwb2ludC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb250ZW50IGtleSBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBjZXJ0aWZpY2F0ZT86IElDZXJ0aWZpY2F0ZTtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFVzZSBgQ21hZkVuY3J5cHRpb24uc3Bla2UoKWAsIGBUc0VuY3J5cHRpb24uc3Bla2UoKWAsIG9yIGBJc21FbmNyeXB0aW9uLnNwZWtlKClgIHRvIGNyZWF0ZSBpbnN0YW5jZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBCaW5kcyB0aGUgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIHRvIHByb2R1Y2UgdGhlIENsb3VkRm9ybWF0aW9uIHByb3BlcnR5LlxuICAgKlxuICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIGJ5IHRoZSBjb25zdHJ1Y3QgbGlicmFyeSBhbmQgc2hvdWxkIG5vdCBiZVxuICAgKiBjYWxsZWQgb3IgaW1wbGVtZW50ZWQgYnkgZXh0ZXJuYWwgY29uc3VtZXJzLiBJdCBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfYmluZChzY29wZTogQ29uc3RydWN0KTogQ2ZuT3JpZ2luRW5kcG9pbnQuRW5jcnlwdGlvblByb3BlcnR5O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBJQU0gcm9sZSB1c2VkIGZvciBlbmNyeXB0aW9uLCBpZiBhbnkuXG4gICAqXG4gICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgdGhlIGNvbnN0cnVjdCBsaWJyYXJ5IGFuZCBzaG91bGQgbm90IGJlXG4gICAqIGNhbGxlZCBvciBpbXBsZW1lbnRlZCBieSBleHRlcm5hbCBjb25zdW1lcnMuIEl0IG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9nZXRSb2xlKCk6IElSb2xlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBBQ00gY2VydGlmaWNhdGUgdXNlZCBmb3IgY29udGVudCBrZXkgZW5jcnlwdGlvbiwgaWYgYW55LlxuICAgKlxuICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIGJ5IHRoZSBjb25zdHJ1Y3QgbGlicmFyeSBhbmQgc2hvdWxkIG5vdCBiZVxuICAgKiBjYWxsZWQgb3IgaW1wbGVtZW50ZWQgYnkgZXh0ZXJuYWwgY29uc3VtZXJzLiBJdCBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfZ2V0Q2VydGlmaWNhdGUoKTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgQ01BRiBzZWdtZW50cy5cbiAqXG4gKiBVc2UgYENtYWZFbmNyeXB0aW9uLnNwZWtlKClgIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNsYXNzIENtYWZFbmNyeXB0aW9uIGV4dGVuZHMgRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgU1BFS0UtYmFzZWQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBDTUFGIHNlZ21lbnRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcGVrZShwcm9wczogQ21hZlNwZWtlRW5jcnlwdGlvblByb3BzKTogQ21hZkVuY3J5cHRpb24ge1xuICAgIGlmICghcHJvcHMudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgU3Bla2VVcmxIdHRwc1JlcXVpcmVkYCwgJ1NQRUtFIGtleSBwcm92aWRlciBVUkwgbXVzdCB1c2UgSFRUUFMuJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5tZXRob2QgPT09IENtYWZFbmNyeXB0aW9uTWV0aG9kLkNFTkMgJiYgcHJvcHMuZHJtU3lzdGVtcy5pbmNsdWRlcyhDbWFmRHJtU3lzdGVtLkZBSVJQTEFZKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBDZW5jRmFpclBsYXlJbmNvbXBhdGlibGVgLCAnQ0VOQyBlbmNyeXB0aW9uIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IEZhaXJQbGF5LiBVc2UgQ0JDUyBmb3IgRmFpclBsYXkuJyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5tZXRob2QgPT09IENtYWZFbmNyeXB0aW9uTWV0aG9kLkNCQ1MgJiYgcHJvcHMuZHJtU3lzdGVtcy5pbmNsdWRlcyhDbWFmRHJtU3lzdGVtLklSREVUTykpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgQ2Jjc0lyZGV0b0luY29tcGF0aWJsZWAsICdDQkNTIGVuY3J5cHRpb24gbWV0aG9kIGRvZXMgbm90IHN1cHBvcnQgSXJkZXRvLiBVc2UgQ0VOQyBmb3IgSXJkZXRvLicpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IENtYWZFbmNyeXB0aW9uKHByb3BzKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDbWFmU3Bla2VFbmNyeXB0aW9uUHJvcHM7XG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJvcHM6IENtYWZTcGVrZUVuY3J5cHRpb25Qcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBwcm9wcztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiBDZm5PcmlnaW5FbmRwb2ludC5FbmNyeXB0aW9uUHJvcGVydHkge1xuICAgIGNvbnN0IHAgPSB0aGlzLmNvbmZpZztcbiAgICBpZiAocC5jb25zdGFudEluaXRpYWxpemF0aW9uVmVjdG9yICYmIHAuY29uc3RhbnRJbml0aWFsaXphdGlvblZlY3Rvci5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBDb25zdGFudEluaXRWZWN0b3JMZW5ndGhgLCAnQ29uc3RhbnQgSW5pdGlhbGl6YXRpb24gVmVjdG9yIG5lZWRzIHRvIGJlIDMyIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLicsIHNjb3BlKTtcbiAgICB9XG4gICAgaWYgKHAua2V5Um90YXRpb25JbnRlcnZhbCAmJiAocC5rZXlSb3RhdGlvbkludGVydmFsLnRvU2Vjb25kcygpIDwgMzAwIHx8IHAua2V5Um90YXRpb25JbnRlcnZhbC50b1NlY29uZHMoKSA+IDMxNTM2MDAwKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgS2V5Um90YXRpb25JbnRlcnZhbFJhbmdlYCwgJ0tleSBSb3RhdGlvbiBJbnRlcnZhbCBuZWVkcyB0byBiZSBiZXR3ZWVuIDMwMC0zMTUzNjAwMCBzZWNvbmRzLicsIHNjb3BlKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNtYWZFeGNsdWRlU2VnbWVudERybU1ldGFkYXRhOiBwLmV4Y2x1ZGVTZWdtZW50RHJtTWV0YWRhdGEsXG4gICAgICBjb25zdGFudEluaXRpYWxpemF0aW9uVmVjdG9yOiBwLmNvbnN0YW50SW5pdGlhbGl6YXRpb25WZWN0b3IsXG4gICAgICBrZXlSb3RhdGlvbkludGVydmFsU2Vjb25kczogcC5rZXlSb3RhdGlvbkludGVydmFsPy50b1NlY29uZHMoKSxcbiAgICAgIGVuY3J5cHRpb25NZXRob2Q6IHsgY21hZkVuY3J5cHRpb25NZXRob2Q6IHAubWV0aG9kIH0sXG4gICAgICBzcGVrZUtleVByb3ZpZGVyOiB7XG4gICAgICAgIGNlcnRpZmljYXRlQXJuOiBwLmNlcnRpZmljYXRlPy5jZXJ0aWZpY2F0ZUFybixcbiAgICAgICAgZHJtU3lzdGVtczogcC5kcm1TeXN0ZW1zLFxuICAgICAgICBlbmNyeXB0aW9uQ29udHJhY3RDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgcHJlc2V0U3Bla2UyMEF1ZGlvOiBwLmF1ZGlvUHJlc2V0ID8/IFByZXNldFNwZWtlMjBBdWRpby5QUkVTRVRfQVVESU9fMSxcbiAgICAgICAgICBwcmVzZXRTcGVrZTIwVmlkZW86IHAudmlkZW9QcmVzZXQgPz8gUHJlc2V0U3Bla2UyMFZpZGVvLlBSRVNFVF9WSURFT18xLFxuICAgICAgICB9LFxuICAgICAgICB1cmw6IHAudXJsLFxuICAgICAgICByZXNvdXJjZUlkOiBwLnJlc291cmNlSWQsXG4gICAgICAgIHJvbGVBcm46IHAucm9sZS5yb2xlQXJuLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgX2dldFJvbGUoKTogSVJvbGUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5jb25maWcucm9sZTsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9nZXRDZXJ0aWZpY2F0ZSgpOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5jb25maWcuY2VydGlmaWNhdGU7IH1cbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIFRTIHNlZ21lbnRzLlxuICpcbiAqIFVzZSBgVHNFbmNyeXB0aW9uLnNwZWtlKClgIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRzRW5jcnlwdGlvbiBleHRlbmRzIEVuY3J5cHRpb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNQRUtFLWJhc2VkIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgVFMgc2VnbWVudHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNwZWtlKHByb3BzOiBUc1NwZWtlRW5jcnlwdGlvblByb3BzKTogVHNFbmNyeXB0aW9uIHtcbiAgICBpZiAoIXByb3BzLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFNwZWtlVXJsSHR0cHNSZXF1aXJlZGAsICdTUEVLRSBrZXkgcHJvdmlkZXIgVVJMIG11c3QgdXNlIEhUVFBTLicpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFRzRW5jcnlwdGlvbihwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogVHNTcGVrZUVuY3J5cHRpb25Qcm9wcztcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihwcm9wczogVHNTcGVrZUVuY3J5cHRpb25Qcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBwcm9wcztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9iaW5kKHNjb3BlOiBDb25zdHJ1Y3QpOiBDZm5PcmlnaW5FbmRwb2ludC5FbmNyeXB0aW9uUHJvcGVydHkge1xuICAgIGNvbnN0IHAgPSB0aGlzLmNvbmZpZztcbiAgICBjb25zdCBkZWZhdWx0RHJtOiBUc0RybVN5c3RlbVtdID0gcC5tZXRob2QgPT09IFRzRW5jcnlwdGlvbk1ldGhvZC5TQU1QTEVfQUVTXG4gICAgICA/IFtUc0RybVN5c3RlbS5GQUlSUExBWV0gOiBbVHNEcm1TeXN0ZW0uQ0xFQVJfS0VZX0FFU18xMjhdO1xuICAgIGlmIChwLmNvbnN0YW50SW5pdGlhbGl6YXRpb25WZWN0b3IgJiYgcC5jb25zdGFudEluaXRpYWxpemF0aW9uVmVjdG9yLmxlbmd0aCAhPT0gMzIpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YENvbnN0YW50SW5pdFZlY3Rvckxlbmd0aGAsICdDb25zdGFudCBJbml0aWFsaXphdGlvbiBWZWN0b3IgbmVlZHMgdG8gYmUgMzIgY2hhcmFjdGVycyBpbiBsZW5ndGguJywgc2NvcGUpO1xuICAgIH1cbiAgICBpZiAocC5rZXlSb3RhdGlvbkludGVydmFsICYmIChwLmtleVJvdGF0aW9uSW50ZXJ2YWwudG9TZWNvbmRzKCkgPCAzMDAgfHwgcC5rZXlSb3RhdGlvbkludGVydmFsLnRvU2Vjb25kcygpID4gMzE1MzYwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBLZXlSb3RhdGlvbkludGVydmFsUmFuZ2VgLCAnS2V5IFJvdGF0aW9uIEludGVydmFsIG5lZWRzIHRvIGJlIGJldHdlZW4gMzAwLTMxNTM2MDAwIHNlY29uZHMuJywgc2NvcGUpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgY29uc3RhbnRJbml0aWFsaXphdGlvblZlY3RvcjogcC5jb25zdGFudEluaXRpYWxpemF0aW9uVmVjdG9yLFxuICAgICAga2V5Um90YXRpb25JbnRlcnZhbFNlY29uZHM6IHAua2V5Um90YXRpb25JbnRlcnZhbD8udG9TZWNvbmRzKCksXG4gICAgICBlbmNyeXB0aW9uTWV0aG9kOiB7IHRzRW5jcnlwdGlvbk1ldGhvZDogcC5tZXRob2QgfSxcbiAgICAgIHNwZWtlS2V5UHJvdmlkZXI6IHtcbiAgICAgICAgY2VydGlmaWNhdGVBcm46IHAuY2VydGlmaWNhdGU/LmNlcnRpZmljYXRlQXJuLFxuICAgICAgICBkcm1TeXN0ZW1zOiAocC5kcm1TeXN0ZW1zID8/IGRlZmF1bHREcm0pLm1hcChkID0+IGQudG9TdHJpbmcoKSksXG4gICAgICAgIGVuY3J5cHRpb25Db250cmFjdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBwcmVzZXRTcGVrZTIwQXVkaW86IHAuYXVkaW9QcmVzZXQgPz8gUHJlc2V0U3Bla2UyMEF1ZGlvLlBSRVNFVF9BVURJT18xLFxuICAgICAgICAgIHByZXNldFNwZWtlMjBWaWRlbzogcC52aWRlb1ByZXNldCA/PyBQcmVzZXRTcGVrZTIwVmlkZW8uUFJFU0VUX1ZJREVPXzEsXG4gICAgICAgIH0sXG4gICAgICAgIHVybDogcC51cmwsXG4gICAgICAgIHJlc291cmNlSWQ6IHAucmVzb3VyY2VJZCxcbiAgICAgICAgcm9sZUFybjogcC5yb2xlLnJvbGVBcm4sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBfZ2V0Um9sZSgpOiBJUm9sZSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmNvbmZpZy5yb2xlOyB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgX2dldENlcnRpZmljYXRlKCk6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmNvbmZpZy5jZXJ0aWZpY2F0ZTsgfVxufVxuXG4vKipcbiAqIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgSVNNIChNaWNyb3NvZnQgU21vb3RoIFN0cmVhbWluZykgc2VnbWVudHMuXG4gKlxuICogSVNNIG9ubHkgc3VwcG9ydHMgQ0VOQyBlbmNyeXB0aW9uIHdpdGggUGxheVJlYWR5IERSTS5cbiAqIEF1ZGlvIGFuZCB2aWRlbyBwcmVzZXRzIGFyZSBhbHdheXMgU0hBUkVELlxuICpcbiAqIFVzZSBgSXNtRW5jcnlwdGlvbi5zcGVrZSgpYCB0byBjcmVhdGUgYW4gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBJc21FbmNyeXB0aW9uIGV4dGVuZHMgRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgU1BFS0UtYmFzZWQgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBJU00gc2VnbWVudHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHNwZWtlKHByb3BzOiBJc21TcGVrZUVuY3J5cHRpb25Qcm9wcyk6IElzbUVuY3J5cHRpb24ge1xuICAgIGlmICghcHJvcHMudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgU3Bla2VVcmxIdHRwc1JlcXVpcmVkYCwgJ1NQRUtFIGtleSBwcm92aWRlciBVUkwgbXVzdCB1c2UgSFRUUFMuJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSXNtRW5jcnlwdGlvbihwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogSXNtU3Bla2VFbmNyeXB0aW9uUHJvcHM7XG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJvcHM6IElzbVNwZWtlRW5jcnlwdGlvblByb3BzKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNvbmZpZyA9IHByb3BzO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgX2JpbmQoX3Njb3BlOiBDb25zdHJ1Y3QpOiBDZm5PcmlnaW5FbmRwb2ludC5FbmNyeXB0aW9uUHJvcGVydHkge1xuICAgIGNvbnN0IHAgPSB0aGlzLmNvbmZpZztcbiAgICByZXR1cm4ge1xuICAgICAgZW5jcnlwdGlvbk1ldGhvZDogeyBpc21FbmNyeXB0aW9uTWV0aG9kOiAnQ0VOQycgfSxcbiAgICAgIHNwZWtlS2V5UHJvdmlkZXI6IHtcbiAgICAgICAgY2VydGlmaWNhdGVBcm46IHAuY2VydGlmaWNhdGU/LmNlcnRpZmljYXRlQXJuLFxuICAgICAgICBkcm1TeXN0ZW1zOiAocC5kcm1TeXN0ZW1zID8/IFtJc21Ecm1TeXN0ZW0uUExBWVJFQURZXSkubWFwKGQgPT4gZC50b1N0cmluZygpKSxcbiAgICAgICAgZW5jcnlwdGlvbkNvbnRyYWN0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIHByZXNldFNwZWtlMjBBdWRpbzogUHJlc2V0U3Bla2UyMEF1ZGlvLlNIQVJFRCxcbiAgICAgICAgICBwcmVzZXRTcGVrZTIwVmlkZW86IFByZXNldFNwZWtlMjBWaWRlby5TSEFSRUQsXG4gICAgICAgIH0sXG4gICAgICAgIHVybDogcC51cmwsXG4gICAgICAgIHJlc291cmNlSWQ6IHAucmVzb3VyY2VJZCxcbiAgICAgICAgcm9sZUFybjogcC5yb2xlLnJvbGVBcm4sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBfZ2V0Um9sZSgpOiBJUm9sZSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmNvbmZpZy5yb2xlOyB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgX2dldENlcnRpZmljYXRlKCk6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLmNvbmZpZy5jZXJ0aWZpY2F0ZTsgfVxufVxuXG4vKipcbiAqIFRoZSBzZWdtZW50IGNvbmZpZ3VyYXRpb24sIGluY2x1ZGluZyB0aGUgc2VnbWVudCBuYW1lLCBkdXJhdGlvbiwgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gdmFsdWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlZ21lbnRDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgdHlwZSBmb3IgdGhpcyBzZWdtZW50IChUUyBvciBDTUFGKVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyVHlwZTogQ29udGFpbmVyVHlwZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNlZ21lbnQgaW5jbHVkZXMgSS1mcmFtZS1vbmx5IHN0cmVhbXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZCAtIE5vdCBzcGVjaWZpZWQuXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlSWZyYW1lT25seVN0cmVhbXM/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIFNDVEUtMzUgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHNlZ21lbnQuXG4gICAqXG4gICAqIFRoZSBTQ1RFLTM1IG1lc3NhZ2UgdHlwZXMgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmVhdGVkIGFzIGFkIG1hcmtlcnMgaW4gdGhlIG91dHB1dC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBTQ1RFIGZpbHRlcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgc2N0ZUZpbHRlcj86IFNjdGVNZXNzYWdlVHlwZVtdO1xuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciBTQ1RFLTM1IG1lc3NhZ2VzIGFyZSBpbmNsdWRlZCBpbiBzZWdtZW50IGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNDVEUtMzUgbWVzc2FnZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiBzZWdtZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgc2N0ZUluU2VnbWVudHM/OiBTY3RlSW5TZWdtZW50cztcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgc2VnbWVudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IDZcbiAgICovXG4gIHJlYWRvbmx5IHNlZ21lbnREdXJhdGlvbj86IER1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlZ21lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHNlZ21lbnRcbiAgICovXG4gIHJlYWRvbmx5IHNlZ21lbnROYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VnbWVudCBpbmNsdWRlcyBEVkIgc3VidGl0bGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdHNJbmNsdWRlRHZiU3VidGl0bGVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNlZ21lbnQgaXMgYW4gYXVkaW8gcmVuZGl0aW9uIGdyb3VwLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdHNVc2VBdWRpb1JlbmRpdGlvbkdyb3VwPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlZ21lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbj86IEVuY3J5cHRpb25Db25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIEJhc2UgcHJvcGVydGllcyBjb21tb24gdG8gYWxsIHNlZ21lbnQgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VnbWVudFByb3BzQmFzZSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgSS1mcmFtZS1vbmx5IHN0cmVhbXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlSWZyYW1lT25seVN0cmVhbXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEdXJhdGlvbiBvZiBlYWNoIHNlZ21lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoNilcbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHNlZ21lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdzZWdtZW50J1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBUUyAoVHJhbnNwb3J0IFN0cmVhbSkgc2VnbWVudCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRzU2VnbWVudFByb3BzIGV4dGVuZHMgU2VnbWVudFByb3BzQmFzZSB7XG4gIC8qKlxuICAgKiBTQ1RFLTM1IG1lc3NhZ2UgdHlwZXMgdG8gdHJlYXQgYXMgYWQgbWFya2Vycy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBmaWx0ZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IHNjdGVGaWx0ZXI/OiBTY3RlTWVzc2FnZVR5cGVbXTtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciBTQ1RFLTM1IG1lc3NhZ2VzIGFyZSBpbmNsdWRlZCBpbiBzZWdtZW50IGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNDVEUtMzUgbWVzc2FnZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiBzZWdtZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgc2N0ZUluU2VnbWVudHM/OiBTY3RlSW5TZWdtZW50cztcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIERWQiBzdWJ0aXRsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlRHZiU3VidGl0bGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1c2UgYXVkaW8gcmVuZGl0aW9uIGdyb3Vwcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHVzZUF1ZGlvUmVuZGl0aW9uR3JvdXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBUUyBzZWdtZW50LlxuICAgKlxuICAgKiBVc2UgYFRzRW5jcnlwdGlvbi5zcGVrZSgpYCB0byBjcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbj86IFRzRW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBDTUFGIHNlZ21lbnQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbWFmU2VnbWVudFByb3BzIGV4dGVuZHMgU2VnbWVudFByb3BzQmFzZSB7XG4gIC8qKlxuICAgKiBTQ1RFLTM1IG1lc3NhZ2UgdHlwZXMgdG8gdHJlYXQgYXMgYWQgbWFya2Vycy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBmaWx0ZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IHNjdGVGaWx0ZXI/OiBTY3RlTWVzc2FnZVR5cGVbXTtcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciBTQ1RFLTM1IG1lc3NhZ2VzIGFyZSBpbmNsdWRlZCBpbiBzZWdtZW50IGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNDVEUtMzUgbWVzc2FnZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiBzZWdtZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgc2N0ZUluU2VnbWVudHM/OiBTY3RlSW5TZWdtZW50cztcblxuICAvKipcbiAgICogRW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgQ01BRiBzZWdtZW50LlxuICAgKlxuICAgKiBVc2UgYENtYWZFbmNyeXB0aW9uLnNwZWtlKClgIHRvIGNyZWF0ZSB0aGUgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogQ21hZkVuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgSVNNIChNaWNyb3NvZnQgU21vb3RoIFN0cmVhbWluZykgc2VnbWVudCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzbVNlZ21lbnRQcm9wcyBleHRlbmRzIFNlZ21lbnRQcm9wc0Jhc2Uge1xuICAvKipcbiAgICogRW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgSVNNIHNlZ21lbnQuXG4gICAqXG4gICAqIFVzZSBgSXNtRW5jcnlwdGlvbi5zcGVrZSgpYCB0byBjcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbj86IElzbUVuY3J5cHRpb247XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBjcmVhdGluZyBzZWdtZW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgU2VnbWVudCB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBUUyAoVHJhbnNwb3J0IFN0cmVhbSkgc2VnbWVudCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyBmb3IgZW5kcG9pbnRzIHdpdGggQ29udGFpbmVyVHlwZS5UUy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdHMocHJvcHM6IFRzU2VnbWVudFByb3BzID0ge30pOiBTZWdtZW50Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRhaW5lclR5cGU6IENvbnRhaW5lclR5cGUuVFMsXG4gICAgICBpbmNsdWRlSWZyYW1lT25seVN0cmVhbXM6IHByb3BzLmluY2x1ZGVJZnJhbWVPbmx5U3RyZWFtcyxcbiAgICAgIHNjdGVGaWx0ZXI6IHByb3BzLnNjdGVGaWx0ZXIsXG4gICAgICBzY3RlSW5TZWdtZW50czogcHJvcHMuc2N0ZUluU2VnbWVudHMsXG4gICAgICBzZWdtZW50RHVyYXRpb246IHByb3BzLmR1cmF0aW9uLFxuICAgICAgc2VnbWVudE5hbWU6IHByb3BzLm5hbWUsXG4gICAgICB0c0luY2x1ZGVEdmJTdWJ0aXRsZXM6IHByb3BzLmluY2x1ZGVEdmJTdWJ0aXRsZXMsXG4gICAgICB0c1VzZUF1ZGlvUmVuZGl0aW9uR3JvdXA6IHByb3BzLnVzZUF1ZGlvUmVuZGl0aW9uR3JvdXAsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ01BRiBzZWdtZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZvciBlbmRwb2ludHMgd2l0aCBDb250YWluZXJUeXBlLkNNQUYuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNtYWYocHJvcHM6IENtYWZTZWdtZW50UHJvcHMgPSB7fSk6IFNlZ21lbnRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGFpbmVyVHlwZTogQ29udGFpbmVyVHlwZS5DTUFGLFxuICAgICAgaW5jbHVkZUlmcmFtZU9ubHlTdHJlYW1zOiBwcm9wcy5pbmNsdWRlSWZyYW1lT25seVN0cmVhbXMsXG4gICAgICBzY3RlRmlsdGVyOiBwcm9wcy5zY3RlRmlsdGVyLFxuICAgICAgc2N0ZUluU2VnbWVudHM6IHByb3BzLnNjdGVJblNlZ21lbnRzLFxuICAgICAgc2VnbWVudER1cmF0aW9uOiBwcm9wcy5kdXJhdGlvbixcbiAgICAgIHNlZ21lbnROYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJU00gKE1pY3Jvc29mdCBTbW9vdGggU3RyZWFtaW5nKSBzZWdtZW50IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIGZvciBlbmRwb2ludHMgd2l0aCBDb250YWluZXJUeXBlLklTTS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNtKHByb3BzOiBJc21TZWdtZW50UHJvcHMgPSB7fSk6IFNlZ21lbnRDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29udGFpbmVyVHlwZTogQ29udGFpbmVyVHlwZS5JU00sXG4gICAgICBpbmNsdWRlSWZyYW1lT25seVN0cmVhbXM6IHByb3BzLmluY2x1ZGVJZnJhbWVPbmx5U3RyZWFtcyxcbiAgICAgIHNlZ21lbnREdXJhdGlvbjogcHJvcHMuZHVyYXRpb24sXG4gICAgICBzZWdtZW50TmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgfTtcbiAgfVxufVxuXG5hYnN0cmFjdCBjbGFzcyBPcmlnaW5FbmRwb2ludEJhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElPcmlnaW5FbmRwb2ludCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIE9yaWdpbkVuZHBvaW50IGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgKGltcG9ydGVkKSBPcmlnaW4gRW5kcG9pbnQgZnJvbSBpdHMgQVJOLlxuICAgKlxuICAgKiBUaGUgQVJOIGlzIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBmb3JtYXQ6XG4gICAqIGBhcm46PHBhcnRpdGlvbj46bWVkaWFwYWNrYWdldjI6PHJlZ2lvbj46PGFjY291bnQ+OmNoYW5uZWxHcm91cC88Z3JvdXBOYW1lPi9jaGFubmVsLzxjaGFubmVsTmFtZT4vb3JpZ2luRW5kcG9pbnQvPGVuZHBvaW50TmFtZT5gXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PcmlnaW5FbmRwb2ludEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBvcmlnaW5FbmRwb2ludEFybjogc3RyaW5nKTogSU9yaWdpbkVuZHBvaW50IHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG9yaWdpbkVuZHBvaW50QXJuKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YFRva2VuQXJuTm90U3VwcG9ydGVkYCxcbiAgICAgICAgJ0Nhbm5vdCBwYXJzZSBhIHRva2VuIEFSTi4gVXNlIE9yaWdpbkVuZHBvaW50LmZyb21PcmlnaW5FbmRwb2ludEF0dHJpYnV0ZXMoKSB3aXRoIGV4cGxpY2l0IGNoYW5uZWxHcm91cE5hbWUsIGNoYW5uZWxOYW1lLCBvcmlnaW5FbmRwb2ludE5hbWUsIGFuZCByZWdpb24gdmFsdWVzIGluc3RlYWQuJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWRBcm4gPSBTdGFjay5vZihzY29wZSkuc3BsaXRBcm4ob3JpZ2luRW5kcG9pbnRBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKTtcbiAgICAvLyByZXNvdXJjZU5hbWUgaXMgXCI8Z3JvdXBOYW1lPi9jaGFubmVsLzxjaGFubmVsTmFtZT4vb3JpZ2luRW5kcG9pbnQvPGVuZHBvaW50TmFtZT5cIlxuICAgIGNvbnN0IFtjaGFubmVsR3JvdXBOYW1lLCAsIGNoYW5uZWxOYW1lLCAsIG9yaWdpbkVuZHBvaW50TmFtZV0gPSBwYXJzZWRBcm4ucmVzb3VyY2VOYW1lPy5zcGxpdCgnLycpID8/IFtdO1xuICAgIGlmICghY2hhbm5lbEdyb3VwTmFtZSB8fCAhY2hhbm5lbE5hbWUgfHwgIW9yaWdpbkVuZHBvaW50TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YEludmFsaWRPcmlnaW5FbmRwb2ludEFybmAsXG4gICAgICAgIGBDb3VsZCBub3QgcGFyc2Ugb3JpZ2luIGVuZHBvaW50IEFSTjogJHtvcmlnaW5FbmRwb2ludEFybn0uIEV4cGVjdGVkIGZvcm1hdDogYXJuOjxwYXJ0aXRpb24+Om1lZGlhcGFja2FnZXYyOjxyZWdpb24+OjxhY2NvdW50PjpjaGFubmVsR3JvdXAvPGdyb3VwTmFtZT4vY2hhbm5lbC88Y2hhbm5lbE5hbWU+L29yaWdpbkVuZHBvaW50LzxlbmRwb2ludE5hbWU+YCxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gT3JpZ2luRW5kcG9pbnRCYXNlLmZyb21PcmlnaW5FbmRwb2ludEF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBjaGFubmVsR3JvdXBOYW1lLFxuICAgICAgY2hhbm5lbE5hbWUsXG4gICAgICBvcmlnaW5FbmRwb2ludE5hbWUsXG4gICAgICByZWdpb246IHBhcnNlZEFybi5yZWdpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBPcmlnaW5FbmRwb2ludCBjb25zdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGFuIGV4dGVybmFsIChpbXBvcnRlZCkgT3JpZ2luIEVuZHBvaW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT3JpZ2luRW5kcG9pbnRBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBPcmlnaW5FbmRwb2ludEF0dHJpYnV0ZXMpOiBJT3JpZ2luRW5kcG9pbnQge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIE9yaWdpbkVuZHBvaW50QmFzZSBpbXBsZW1lbnRzIElPcmlnaW5FbmRwb2ludCB7XG4gICAgICBwcm90ZWN0ZWQgaGxzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5IbHNNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW107XG4gICAgICBwcm90ZWN0ZWQgbGxIbHNNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50Lkxvd0xhdGVuY3lIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW107XG4gICAgICBwcm90ZWN0ZWQgZGFzaE1hbmlmZXN0czogQ2ZuT3JpZ2luRW5kcG9pbnQuRGFzaE1hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5W10gPSBbXTtcbiAgICAgIHByb3RlY3RlZCBtc3NNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50Lk1zc01hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5W10gPSBbXTtcbiAgICAgIHByb3RlY3RlZCBzZWdtZW50PzogU2VnbWVudENvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcG9saWN5ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNoYW5uZWxHcm91cE5hbWUgPSBhdHRycy5jaGFubmVsR3JvdXBOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNoYW5uZWxOYW1lID0gYXR0cnMuY2hhbm5lbE5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb3JpZ2luRW5kcG9pbnROYW1lID0gYXR0cnMub3JpZ2luRW5kcG9pbnROYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBtb2RpZmllZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGhsc01hbmlmZXN0VXJscyA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBsb3dMYXRlbmN5SGxzTWFuaWZlc3RVcmxzID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGRhc2hNYW5pZmVzdFVybHMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbXNzTWFuaWZlc3RVcmxzID0gdW5kZWZpbmVkO1xuICAgICAgcHJvdGVjdGVkIGF1dG9DcmVhdGVQb2xpY3kgPSBmYWxzZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBvcmlnaW5FbmRwb2ludEFybiA9IFN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdtZWRpYXBhY2thZ2V2MicsXG4gICAgICAgIHJlc291cmNlOiBgY2hhbm5lbEdyb3VwLyR7YXR0cnMuY2hhbm5lbEdyb3VwTmFtZX0vY2hhbm5lbC8ke3RoaXMuY2hhbm5lbE5hbWV9L29yaWdpbkVuZHBvaW50YCxcbiAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLm9yaWdpbkVuZHBvaW50TmFtZSxcbiAgICAgICAgcmVnaW9uOiBhdHRycy5yZWdpb24sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNoYW5uZWxHcm91cE5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNoYW5uZWxOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBvcmlnaW5FbmRwb2ludE5hbWU6IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IG9yaWdpbkVuZHBvaW50QXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBtb2RpZmllZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgaGxzTWFuaWZlc3RVcmxzPzogc3RyaW5nW107XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBsb3dMYXRlbmN5SGxzTWFuaWZlc3RVcmxzPzogc3RyaW5nW107XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBkYXNoTWFuaWZlc3RVcmxzPzogc3RyaW5nW107XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBtc3NNYW5pZmVzdFVybHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSByZWZlcmVuY2UgdG8gdGhpcyBPcmlnaW4gRW5kcG9pbnQgcmVzb3VyY2UuXG4gICAqIFJlcXVpcmVkIGJ5IHRoZSBhdXRvLWdlbmVyYXRlZCBJT3JpZ2luRW5kcG9pbnRSZWYgaW50ZXJmYWNlLlxuICAgKi9cbiAgcHVibGljIGdldCBvcmlnaW5FbmRwb2ludFJlZigpOiBPcmlnaW5FbmRwb2ludFJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9yaWdpbkVuZHBvaW50QXJuOiB0aGlzLm9yaWdpbkVuZHBvaW50QXJuLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaGxzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5IbHNNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgbGxIbHNNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50Lkxvd0xhdGVuY3lIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZGFzaE1hbmlmZXN0czogQ2ZuT3JpZ2luRW5kcG9pbnQuRGFzaE1hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5W107XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBtc3NNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50Lk1zc01hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5W107XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzZWdtZW50PzogU2VnbWVudENvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9yaWdpbiBlbmRwb2ludC5cbiAgICpcbiAgICogSWYgYGF1dG9DcmVhdGVQb2xpY3lgIGlzIHRydWUsIGFuIGBPcmlnaW5FbmRwb2ludFBvbGljeWAgd2lsbCBiZSBjcmVhdGVkIHVwb24gdGhlXG4gICAqIGZpcnN0IGNhbGwgdG8gYWRkVG9SZXNvdXJjZVBvbGljeShzKS5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBwb2xpY3k/OiBPcmlnaW5FbmRwb2ludFBvbGljeTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIGFuIG9yaWdpbiBlbmRwb2ludCByZXNvdXJjZSBwb2xpY3kgc2hvdWxkIGF1dG9tYXRpY2FsbHkgYmUgY3JlYXRlZCB1cG9uXG4gICAqIHRoZSBmaXJzdCBjYWxsIHRvIGBhZGRUb1Jlc291cmNlUG9saWN5YC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBhdXRvQ3JlYXRlUG9saWN5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDRE4gYXV0aG9yaXphdGlvbiBjb25maWd1cmF0aW9uIHRvIGJlIGFwcGxpZWQgd2hlbiB0aGUgcG9saWN5IGlzIGNyZWF0ZWQuXG4gICAqIFNldCBieSBzdWJjbGFzcyBjb25zdHJ1Y3RvcnMgd2hlbiBgY2RuQXV0aGAgaXMgcHJvdmlkZWQgaW4gcHJvcHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgY2RuQXV0aENvbmZpZz86IENkbkF1dGhDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgb3JpZ2luIGVuZHBvaW50IHBvbGljeS5cbiAgICpcbiAgICogWW91IGNhbiBvbmx5IGFkZCAxIE9yaWdpbkVuZHBvaW50UG9saWN5IHRvIGFuIE9yaWdpbkVuZHBvaW50LiBJZiB5b3UgaGF2ZSBhbHJlYWR5XG4gICAqIGRlZmluZWQgb25lLCB0aGlzIHdpbGwgYXBwZW5kIHRvIHRoZSBwb2xpY3kgYWxyZWFkeSBjcmVhdGVkLlxuICAgKlxuICAgKiBUbyBjb25maWd1cmUgQ0ROIGF1dGhlbnRpY2F0aW9uLCBzZXQgYGNkbkF1dGhgIG9uIHRoZSBjb25zdHJ1Y3QncyBwcm9wcyBpbnN0ZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gc3RhdGVtZW50IC0gVGhlIHBvbGljeSBzdGF0ZW1lbnQgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkVG9SZXNvdXJjZVBvbGljeShzdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudCk6IEFkZFRvUmVzb3VyY2VQb2xpY3lSZXN1bHQge1xuICAgIGlmICghdGhpcy5wb2xpY3kgJiYgdGhpcy5hdXRvQ3JlYXRlUG9saWN5KSB7XG4gICAgICB0aGlzLnBvbGljeSA9IG5ldyBPcmlnaW5FbmRwb2ludFBvbGljeSh0aGlzLCAnUG9saWN5Jywge1xuICAgICAgICBvcmlnaW5FbmRwb2ludDogdGhpcyxcbiAgICAgICAgY2RuQXV0aDogdGhpcy5jZG5BdXRoQ29uZmlnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucG9saWN5KSB7XG4gICAgICB0aGlzLnBvbGljeS5kb2N1bWVudC5hZGRTdGF0ZW1lbnRzKHN0YXRlbWVudCk7XG4gICAgICByZXR1cm4geyBzdGF0ZW1lbnRBZGRlZDogdHJ1ZSwgcG9saWN5RGVwZW5kYWJsZTogdGhpcy5wb2xpY3kgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGF0ZW1lbnRBZGRlZDogZmFsc2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbmQgbW9kaWZ5IFNlZ21lbnQgY29uZmlndXJhdGlvbiBmb3IgZW5kcG9pbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgc2VnbWVudFZhbGlkYXRpb24oc2VnbWVudENvbnRhaW5lclR5cGU6IENvbnRhaW5lclR5cGUsIHNlZ21lbnQ/OiBTZWdtZW50Q29uZmlndXJhdGlvbik6IENmbk9yaWdpbkVuZHBvaW50LlNlZ21lbnRQcm9wZXJ0eSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHNlZ21lbnQ/LnNlZ21lbnREdXJhdGlvbiAmJiAoc2VnbWVudC5zZWdtZW50RHVyYXRpb24/LnRvU2Vjb25kcygpIDwgMSB8fCBzZWdtZW50LnNlZ21lbnREdXJhdGlvbj8udG9TZWNvbmRzKCkgPiAzMCkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFNlZ21lbnREdXJhdGlvblJhbmdlYCwgJ1NlZ21lbnQgRHVyYXRpb24gbmVlZHMgdG8gYmUgYmV0d2VlbiAxLTMwIHNlY29uZHMuJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHNlZ21lbnRDb250YWluZXJUeXBlICE9IENvbnRhaW5lclR5cGUuVFMgJiYgKHNlZ21lbnQ/LnRzSW5jbHVkZUR2YlN1YnRpdGxlcyB8fCBzZWdtZW50Py50c1VzZUF1ZGlvUmVuZGl0aW9uR3JvdXApKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBUc09wdGlvbnNJbmNvbXBhdGlibGVgLCAnRGlzYWJsZSBUUyBTZWdtZW50IG9wdGlvbnMgZm9yIER2YlN1YnRpdGxlcyBhbmQgQXVkaW9SZW5kaXRpb25Hcm91cHMgd2hlbiB1c2luZyBDTUFGLicsIHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbmNsdWRlSWZyYW1lT25seVN0cmVhbXM6IHNlZ21lbnQ/LmluY2x1ZGVJZnJhbWVPbmx5U3RyZWFtcyxcbiAgICAgIHNlZ21lbnREdXJhdGlvblNlY29uZHM6IHNlZ21lbnQ/LnNlZ21lbnREdXJhdGlvbj8udG9TZWNvbmRzKCksXG4gICAgICBzZWdtZW50TmFtZTogc2VnbWVudD8uc2VnbWVudE5hbWUsXG4gICAgICB0c0luY2x1ZGVEdmJTdWJ0aXRsZXM6IHNlZ21lbnQ/LnRzSW5jbHVkZUR2YlN1YnRpdGxlcyxcbiAgICAgIHRzVXNlQXVkaW9SZW5kaXRpb25Hcm91cDogc2VnbWVudD8udHNVc2VBdWRpb1JlbmRpdGlvbkdyb3VwLFxuICAgICAgc2N0ZTogKHNlZ21lbnQ/LnNjdGVGaWx0ZXIgfHwgc2VnbWVudD8uc2N0ZUluU2VnbWVudHMpID8ge1xuICAgICAgICBzY3RlRmlsdGVyOiBzZWdtZW50Py5zY3RlRmlsdGVyLFxuICAgICAgICBzY3RlSW5TZWdtZW50czogc2VnbWVudD8uc2N0ZUluU2VnbWVudHMsXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgZW5jcnlwdGlvbjogc2VnbWVudD8uZW5jcnlwdGlvbj8uX2JpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBDbG91ZFdhdGNoIG1ldHJpYy5cbiAgICpcbiAgICogQHBhcmFtIG1ldHJpY05hbWUgbmFtZSBvZiB0aGUgbWV0cmljLlxuICAgKiBAcGFyYW0gcHJvcHMgbWV0cmljIG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgbWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgcHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmFtZXNwYWNlOiAnQVdTL01lZGlhUGFja2FnZScsXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIENoYW5uZWxHcm91cDogdGhpcy5jaGFubmVsR3JvdXBOYW1lLFxuICAgICAgICBDaGFubmVsOiB0aGlzLmNoYW5uZWxOYW1lLFxuICAgICAgICBPcmlnaW5FbmRwb2ludDogdGhpcy5vcmlnaW5FbmRwb2ludE5hbWUsXG4gICAgICB9LFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSkuYXR0YWNoVG8odGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBNZXRyaWMgZm9yIEluZ3Jlc3MgQnl0ZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljSW5ncmVzc0J5dGVzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdJbmdyZXNzQnl0ZXMnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQllURVMsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE1ldHJpYyBmb3IgRWdyZXNzIEJ5dGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0VncmVzc0J5dGVzKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdFZ3Jlc3NCeXRlcycsIHtcbiAgICAgIHN0YXRpc3RpYzogJ3N1bScsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5CWVRFUyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgTWV0cmljIGZvciBJbmdyZXNzIHJlc3BvbnNlIHRpbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdmVyYWdlIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0luZ3Jlc3NSZXNwb25zZVRpbWUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0luZ3Jlc3NSZXNwb25zZVRpbWUnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdhdmcnLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuTUlMTElTRUNPTkRTLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBNZXRyaWMgZm9yIEVncmVzcyBSZXNwb25zZSB0aW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNFZ3Jlc3NSZXNwb25zZVRpbWUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0VncmVzc1Jlc3BvbnNlVGltZScsIHtcbiAgICAgIHN0YXRpc3RpYzogJ2F2ZycsXG4gICAgICBwZXJpb2Q6IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgdW5pdDogVW5pdC5NSUxMSVNFQ09ORFMsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE1ldHJpYyBmb3IgRWdyZXNzIFJlcXVlc3QgQ291bnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBzdW0gb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRWdyZXNzUmVxdWVzdENvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdFZ3Jlc3NSZXF1ZXN0Q291bnQnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE1ldHJpYyBmb3IgSW5ncmVzcyBSZXF1ZXN0IENvdW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0luZ3Jlc3NSZXF1ZXN0Q291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gdGhpcy5tZXRyaWMoJ0luZ3Jlc3NSZXF1ZXN0Q291bnQnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQ09VTlQsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERlZmluZXMgYW4gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgVjIgT3JpZ2luIEVuZHBvaW50XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBPcmlnaW5FbmRwb2ludCBleHRlbmRzIE9yaWdpbkVuZHBvaW50QmFzZSBpbXBsZW1lbnRzIElPcmlnaW5FbmRwb2ludCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLW1lZGlhcGFja2FnZXYyLWFscGhhLk9yaWdpbkVuZHBvaW50JztcblxuICBwdWJsaWMgcmVhZG9ubHkgY2hhbm5lbEdyb3VwTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2hhbm5lbE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG9yaWdpbkVuZHBvaW50TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgb3JpZ2luRW5kcG9pbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgb2YgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1vZGlmaWVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFycmF5IGNvbnRhaW5pbmcgTG93IExhdGVuY3kgSExTIE1hbmlmZXN0cyBjcmVhdGVkIGJ5IHRoZSBPcmlnaW5FbmRwb2ludC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBsb3dMYXRlbmN5SGxzTWFuaWZlc3RVcmxzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFycmF5IGNvbnRhaW5pbmcgSExTIE1hbmlmZXN0cyBjcmVhdGVkIGJ5IHRoZSBPcmlnaW5FbmRwb2ludC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBobHNNYW5pZmVzdFVybHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQXJyYXkgY29udGFpbmluZyBEQVNIIE1hbmlmZXN0cyBjcmVhdGVkIGJ5IHRoZSBPcmlnaW5FbmRwb2ludC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXNoTWFuaWZlc3RVcmxzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBBcnJheSBjb250YWluaW5nIE1TUyBNYW5pZmVzdHMgY3JlYXRlZCBieSB0aGUgT3JpZ2luRW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbXNzTWFuaWZlc3RVcmxzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG9yaWdpbiBlbmRwb2ludC5cbiAgICpcbiAgICogSWYgYGF1dG9DcmVhdGVQb2xpY3lgIGlzIHRydWUsIGFuIGBPcmlnaW5FbmRwb2ludFBvbGljeWAgd2lsbCBiZSBjcmVhdGVkIHVwb24gdGhlXG4gICAqIGZpcnN0IGNhbGwgdG8gYWRkVG9SZXNvdXJjZVBvbGljeShzKS5cbiAgICovXG4gIHB1YmxpYyBwb2xpY3k/OiBPcmlnaW5FbmRwb2ludFBvbGljeTtcbiAgcHJvdGVjdGVkIGF1dG9DcmVhdGVQb2xpY3kgPSB0cnVlO1xuICBwcm90ZWN0ZWQgaGxzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5IbHNNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW107XG4gIHByb3RlY3RlZCBsbEhsc01hbmlmZXN0czogQ2ZuT3JpZ2luRW5kcG9pbnQuTG93TGF0ZW5jeUhsc01hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5W10gPSBbXTtcbiAgcHJvdGVjdGVkIGRhc2hNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50LkRhc2hNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW107XG4gIHByb3RlY3RlZCBtc3NNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50Lk1zc01hbmlmZXN0Q29uZmlndXJhdGlvblByb3BlcnR5W10gPSBbXTtcbiAgcHJvdGVjdGVkIHNlZ21lbnQ/OiBTZWdtZW50Q29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT3JpZ2luRW5kcG9pbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcz8ub3JpZ2luRW5kcG9pbnROYW1lID8/IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICBtYXhMZW5ndGg6IDI1NixcbiAgICAgICAgfSksXG4gICAgICB9KSxcbiAgICB9KTtcblxuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgLy8gVmFsaWRhdGUgb3JpZ2luRW5kcG9pbnROYW1lIGlmIHByb3ZpZGVkXG4gICAgaWYgKHByb3BzLm9yaWdpbkVuZHBvaW50TmFtZSAhPSBudWxsICYmICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMub3JpZ2luRW5kcG9pbnROYW1lKSkge1xuICAgICAgaWYgKHByb3BzLm9yaWdpbkVuZHBvaW50TmFtZS5sZW5ndGggPCAxIHx8IHByb3BzLm9yaWdpbkVuZHBvaW50TmFtZS5sZW5ndGggPiAyNTYpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgT3JpZ2luRW5kcG9pbnROYW1lTGVuZ3RoYCwgJ09yaWdpbiBlbmRwb2ludCBuYW1lIG11c3QgYmUgYmV0d2VlbiAxIGFuZCAyNTYgY2hhcmFjdGVycyBpbiBsZW5ndGguJywgdGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAoIXByb3BzLm9yaWdpbkVuZHBvaW50TmFtZS5tYXRjaCgvXlthLXpBLVowLTlfLV0rJC8pKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YE9yaWdpbkVuZHBvaW50TmFtZVBhdHRlcm5gLCAnT3JpZ2luIGVuZHBvaW50IG5hbWUgbXVzdCBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3Jlcy4nLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBkZXNjcmlwdGlvbiBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5kZXNjcmlwdGlvbiAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmRlc2NyaXB0aW9uKSAmJiBwcm9wcy5kZXNjcmlwdGlvbi5sZW5ndGggPiAxMDI0KSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBPcmlnaW5FbmRwb2ludERlc2NyaXB0aW9uTGVuZ3RoYCwgJ09yaWdpbiBlbmRwb2ludCBkZXNjcmlwdGlvbiBtdXN0IG5vdCBleGNlZWQgMTAyNCBjaGFyYWN0ZXJzLicsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuc2VnbWVudCA9IHByb3BzLnNlZ21lbnQ7XG5cbiAgICAvLyBHZXQgY29udGFpbmVyIHR5cGUgZnJvbSBzZWdtZW50XG4gICAgY29uc3QgY29udGFpbmVyVHlwZSA9IHByb3BzLnNlZ21lbnQuY29udGFpbmVyVHlwZTtcblxuICAgIGlmIChwcm9wcz8uc3RhcnRvdmVyV2luZG93ICYmIChwcm9wcy5zdGFydG92ZXJXaW5kb3cudG9TZWNvbmRzKCkgPCA2MCB8fCBwcm9wcy5zdGFydG92ZXJXaW5kb3cudG9TZWNvbmRzKCkgPiAxMjA5NjAwKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgU3RhcnRvdmVyV2luZG93UmFuZ2VgLCAnU3RhcnRvdmVyIFdpbmRvdyBuZWVkcyB0byBiZSBiZXR3ZWVuIDYwLTEyMDk2MDAgc2Vjb25kcy4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBwcm9wcy5tYW5pZmVzdHMuZm9yRWFjaChtYW5pZmVzdCA9PiB7XG4gICAgICBtYW5pZmVzdC5fYmluZCh7XG4gICAgICAgIGhsc01hbmlmZXN0czogdGhpcy5obHNNYW5pZmVzdHMsXG4gICAgICAgIGxsSGxzTWFuaWZlc3RzOiB0aGlzLmxsSGxzTWFuaWZlc3RzLFxuICAgICAgICBkYXNoTWFuaWZlc3RzOiB0aGlzLmRhc2hNYW5pZmVzdHMsXG4gICAgICAgIG1zc01hbmlmZXN0czogdGhpcy5tc3NNYW5pZmVzdHMsXG4gICAgICAgIHNlZ21lbnQ6IHByb3BzLnNlZ21lbnQsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFZhbGlkYXRlIG1hbmlmZXN0IG5hbWUgdW5pcXVlbmVzcyBhY3Jvc3MgYWxsIG1hbmlmZXN0IHR5cGVzXG4gICAgY29uc3QgYWxsTWFuaWZlc3ROYW1lcyA9IFtcbiAgICAgIC4uLnRoaXMuaGxzTWFuaWZlc3RzLm1hcChtID0+IG0ubWFuaWZlc3ROYW1lKSxcbiAgICAgIC4uLnRoaXMubGxIbHNNYW5pZmVzdHMubWFwKG0gPT4gbS5tYW5pZmVzdE5hbWUpLFxuICAgICAgLi4udGhpcy5kYXNoTWFuaWZlc3RzLm1hcChtID0+IG0ubWFuaWZlc3ROYW1lKSxcbiAgICAgIC4uLnRoaXMubXNzTWFuaWZlc3RzLm1hcChtID0+IG0ubWFuaWZlc3ROYW1lKSxcbiAgICBdLmZpbHRlcihuYW1lID0+ICFUb2tlbi5pc1VucmVzb2x2ZWQobmFtZSkpO1xuXG4gICAgY29uc3QgZHVwbGljYXRlTmFtZXMgPSBbLi4ubmV3IFNldChhbGxNYW5pZmVzdE5hbWVzLmZpbHRlcigobmFtZSwgaSkgPT4gYWxsTWFuaWZlc3ROYW1lcy5pbmRleE9mKG5hbWUpICE9PSBpKSldO1xuICAgIGlmIChkdXBsaWNhdGVOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBsaXRgRHVwbGljYXRlTWFuaWZlc3ROYW1lYCxcbiAgICAgICAgYER1cGxpY2F0ZSBtYW5pZmVzdCBuYW1lczogWyR7ZHVwbGljYXRlTmFtZXMuam9pbignLCAnKX1dLiBFYWNoIG1hbmlmZXN0IGluIGFuIE9yaWdpbkVuZHBvaW50IG11c3QgaGF2ZSBhIHVuaXF1ZSBtYW5pZmVzdE5hbWUuYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWFuaWZlc3QgYW5kIGNvbnRhaW5lciB0eXBlIGNvbXBhdGliaWxpdHlcbiAgICBpZiAodGhpcy5tc3NNYW5pZmVzdHMubGVuZ3RoID4gMCAmJiBjb250YWluZXJUeXBlICE9PSBDb250YWluZXJUeXBlLklTTSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgTXNzUmVxdWlyZXNJc21gLCAnTVNTIG1hbmlmZXN0cyByZXF1aXJlIElTTSBjb250YWluZXIgdHlwZS4gVXNlIFNlZ21lbnQuaXNtKCkgZm9yIE1TUyBtYW5pZmVzdHMuJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGFzaE1hbmlmZXN0cy5sZW5ndGggPiAwICYmIGNvbnRhaW5lclR5cGUgIT09IENvbnRhaW5lclR5cGUuQ01BRikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgRGFzaFJlcXVpcmVzQ21hZmAsICdEQVNIIG1hbmlmZXN0cyByZXF1aXJlIENNQUYgY29udGFpbmVyIHR5cGUuIFVzZSBTZWdtZW50LmNtYWYoKSBmb3IgREFTSCBtYW5pZmVzdHMuJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLmhsc01hbmlmZXN0cy5sZW5ndGggPiAwIHx8IHRoaXMubGxIbHNNYW5pZmVzdHMubGVuZ3RoID4gMCkgJiYgY29udGFpbmVyVHlwZSA9PT0gQ29udGFpbmVyVHlwZS5JU00pIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEhsc0luY29tcGF0aWJsZVdpdGhJc21gLCAnSExTIGFuZCBMb3cgTGF0ZW5jeSBITFMgbWFuaWZlc3RzIGFyZSBub3Qgc3VwcG9ydGVkIHdpdGggSVNNIGNvbnRhaW5lciB0eXBlLiBVc2UgU2VnbWVudC5jbWFmKCkgb3IgU2VnbWVudC50cygpIGZvciBITFMgbWFuaWZlc3RzLicsIHRoaXMpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIERSTSBzaWduYWxsaW5nIHJlcXVpcmVzIGVuY3J5cHRpb25cbiAgICBpZiAodGhpcy5kYXNoTWFuaWZlc3RzLnNvbWUobSA9PiBtLmRybVNpZ25hbGluZykgJiYgIXByb3BzLnNlZ21lbnQuZW5jcnlwdGlvbikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgRHJtU2lnbmFsbGluZ1JlcXVpcmVzRW5jcnlwdGlvbmAsICdEUk0gc2lnbmFsbGluZyByZXF1aXJlcyBlbmNyeXB0aW9uIHRvIGJlIGNvbmZpZ3VyZWQgb24gdGhlIGVuZHBvaW50LicsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IG9yaWdpbiA9IG5ldyBDZm5PcmlnaW5FbmRwb2ludCh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBjaGFubmVsTmFtZTogcHJvcHMuY2hhbm5lbC5jaGFubmVsTmFtZSxcbiAgICAgIGNoYW5uZWxHcm91cE5hbWU6IHByb3BzLmNoYW5uZWwuY2hhbm5lbEdyb3VwTmFtZSxcbiAgICAgIG9yaWdpbkVuZHBvaW50TmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICB0YWdzOiBwcm9wcz8udGFncyA/IHJlbmRlclRhZ3MocHJvcHMudGFncykgOiB1bmRlZmluZWQsXG4gICAgICBobHNNYW5pZmVzdHM6IG9taXRFbXB0eUFycmF5KHRoaXMuaGxzTWFuaWZlc3RzKSxcbiAgICAgIGxvd0xhdGVuY3lIbHNNYW5pZmVzdHM6IG9taXRFbXB0eUFycmF5KHRoaXMubGxIbHNNYW5pZmVzdHMpLFxuICAgICAgZGFzaE1hbmlmZXN0czogb21pdEVtcHR5QXJyYXkodGhpcy5kYXNoTWFuaWZlc3RzKSxcbiAgICAgIG1zc01hbmlmZXN0czogb21pdEVtcHR5QXJyYXkodGhpcy5tc3NNYW5pZmVzdHMpLFxuICAgICAgY29udGFpbmVyVHlwZTogY29udGFpbmVyVHlwZSxcbiAgICAgIHN0YXJ0b3ZlcldpbmRvd1NlY29uZHM6IHByb3BzLnN0YXJ0b3ZlcldpbmRvdz8udG9TZWNvbmRzKCksXG4gICAgICBzZWdtZW50OiB0aGlzLnNlZ21lbnRWYWxpZGF0aW9uKGNvbnRhaW5lclR5cGUsIHByb3BzLnNlZ21lbnQpLFxuICAgICAgZm9yY2VFbmRwb2ludEVycm9yQ29uZmlndXJhdGlvbjogcHJvcHMuZm9yY2VFbmRwb2ludENvbmZpZ3VyYXRpb25Db25kaXRpb25zID8ge1xuICAgICAgICBlbmRwb2ludEVycm9yQ29uZGl0aW9uczogcHJvcHMuZm9yY2VFbmRwb2ludENvbmZpZ3VyYXRpb25Db25kaXRpb25zLFxuICAgICAgfTogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIGNoYW5uZWxOYW1lL2NoYW5uZWxHcm91cE5hbWUgYXJlIHJlbmRlcmVkIGFzIGxpdGVyYWwgc3RyaW5ncyAobm90IENGTiBSZWZzKSwgc29cbiAgICAvLyBDbG91ZEZvcm1hdGlvbiBjYW5ub3QgaW5mZXIgdGhlIGRlcGVuZGVuY3kuIFdlIGFkZCBkaXJlY3QgQ2ZuUmVzb3VyY2UtbGV2ZWwgRGVwZW5kc09uXG4gICAgLy8gdG8gZ3VhcmFudGVlIGRlcGxveSBvcmRlcmluZyB3aXRob3V0IHRyaWdnZXJpbmcgQ0RLJ3Mgc3VidHJlZS1sZXZlbCBjeWNsZSBkZXRlY3Rpb24uXG4gICAgLy8gRm9yIGltcG9ydGVkIGNvbnN0cnVjdHMsIGRlZmF1bHRDaGlsZCBpcyB1bmRlZmluZWQgKG5vIENGTiByZXNvdXJjZSB0byBvcmRlciBhZ2FpbnN0KS5cbiAgICBjb25zdCBlbmNyeXB0aW9uUm9sZSA9IHByb3BzLnNlZ21lbnQuZW5jcnlwdGlvbj8uX2dldFJvbGUoKTtcbiAgICBpZiAoZW5jcnlwdGlvblJvbGUpIG9yaWdpbi5ub2RlLmFkZERlcGVuZGVuY3koZW5jcnlwdGlvblJvbGUpO1xuICAgIGNvbnN0IGVuY3J5cHRpb25DZXJ0ID0gcHJvcHMuc2VnbWVudC5lbmNyeXB0aW9uPy5fZ2V0Q2VydGlmaWNhdGUoKTtcbiAgICBpZiAoZW5jcnlwdGlvbkNlcnQpIG9yaWdpbi5ub2RlLmFkZERlcGVuZGVuY3koZW5jcnlwdGlvbkNlcnQpO1xuICAgIGNvbnN0IGNoYW5uZWxDZm4gPSBwcm9wcy5jaGFubmVsLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJlc291cmNlIHwgdW5kZWZpbmVkO1xuICAgIGlmIChjaGFubmVsQ2ZuICYmIENmblJlc291cmNlLmlzQ2ZuUmVzb3VyY2UoY2hhbm5lbENmbikpIHtcbiAgICAgIG9yaWdpbi5hZGREZXBlbmRlbmN5KGNoYW5uZWxDZm4pO1xuICAgIH1cbiAgICBjb25zdCBncm91cENmbiA9IHByb3BzLmNoYW5uZWwuY2hhbm5lbEdyb3VwPy5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5SZXNvdXJjZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZ3JvdXBDZm4gJiYgQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShncm91cENmbikpIHtcbiAgICAgIG9yaWdpbi5hZGREZXBlbmRlbmN5KGdyb3VwQ2ZuKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvd0xhdGVuY3lIbHNNYW5pZmVzdFVybHMgPSB0aGlzLmxsSGxzTWFuaWZlc3RzLm1hcCgoXywgaSkgPT4gRm4uc2VsZWN0KGksIG9yaWdpbi5hdHRyTG93TGF0ZW5jeUhsc01hbmlmZXN0VXJscykpO1xuICAgIHRoaXMuaGxzTWFuaWZlc3RVcmxzID0gdGhpcy5obHNNYW5pZmVzdHMubWFwKChfLCBpKSA9PiBGbi5zZWxlY3QoaSwgb3JpZ2luLmF0dHJIbHNNYW5pZmVzdFVybHMpKTtcbiAgICB0aGlzLmRhc2hNYW5pZmVzdFVybHMgPSB0aGlzLmRhc2hNYW5pZmVzdHMubWFwKChfLCBpKSA9PiBGbi5zZWxlY3QoaSwgb3JpZ2luLmF0dHJEYXNoTWFuaWZlc3RVcmxzKSk7XG4gICAgdGhpcy5tc3NNYW5pZmVzdFVybHMgPSB0aGlzLm1zc01hbmlmZXN0cy5tYXAoKF8sIGkpID0+IEZuLnNlbGVjdChpLCBvcmlnaW4uYXR0ck1zc01hbmlmZXN0VXJscykpO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gb3JpZ2luLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy5tb2RpZmllZEF0ID0gb3JpZ2luLmF0dHJNb2RpZmllZEF0O1xuICAgIHRoaXMuY2hhbm5lbEdyb3VwTmFtZSA9IG9yaWdpbi5jaGFubmVsR3JvdXBOYW1lO1xuICAgIHRoaXMuY2hhbm5lbE5hbWUgPSBvcmlnaW4uY2hhbm5lbE5hbWU7XG4gICAgdGhpcy5vcmlnaW5FbmRwb2ludE5hbWUgPSBvcmlnaW4ub3JpZ2luRW5kcG9pbnROYW1lO1xuICAgIHRoaXMub3JpZ2luRW5kcG9pbnRBcm4gPSBvcmlnaW4uYXR0ckFybjtcblxuICAgIG9yaWdpbi5hcHBseVJlbW92YWxQb2xpY3kocHJvcHM/LnJlbW92YWxQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgIC8vIFdoZW4gY2RuQXV0aCBpcyBzZXQsIHByZS1jcmVhdGUgdGhlIGVuZHBvaW50IHBvbGljeSB3aXRoIHRoZSBBV1MtcmVjb21tZW5kZWQgZ2F0aW5nXG4gICAgLy8gc3RhdGVtZW50LiBUaGUgcHJpbmNpcGFsIGlzIGAqYCAoYW5vbnltb3VzKSBiZWNhdXNlIENETiByZXF1ZXN0cyB0byBNZWRpYVBhY2thZ2UgYXJlXG4gICAgLy8gdW5zaWduZWQgSFRUUFMg4oCUIG9ubHkgdGhlIG1hdGNoaW5nIENETi1JZGVudGlmaWVyIGhlYWRlciBwcm92ZXMgYXV0aG9yaXNhdGlvbi5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL21lZGlhcGFja2FnZS9sYXRlc3QvdXNlcmd1aWRlL2Nkbi1hdXRoLXNldHVwLmh0bWxcbiAgICBpZiAocHJvcHMuY2RuQXV0aCkge1xuICAgICAgaWYgKHByb3BzLmNkbkF1dGguc2VjcmV0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgQ2RuQXV0aFNlY3JldHNSZXF1aXJlZGAsXG4gICAgICAgICAgJ2NkbkF1dGguc2VjcmV0cyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHNlY3JldC4gQ0ROIGF1dGhvcml6YXRpb24gbmVlZHMgYSBzZWNyZXQgdG8gdmFsaWRhdGUgaW5jb21pbmcgQ0ROLUlkZW50aWZpZXIgaGVhZGVycy4nLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2RuQXV0aENvbmZpZyA9IHByb3BzLmNkbkF1dGg7XG4gICAgICB0aGlzLmFkZFRvUmVzb3VyY2VQb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0FsbG93R2V0T2JqZWN0QWNjZXNzRm9yQXV0aG9yaXplZFJlcXVlc3QnLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgcHJpbmNpcGFsczogW25ldyBTdGFyUHJpbmNpcGFsKCldLFxuICAgICAgICBhY3Rpb25zOiBbJ21lZGlhcGFja2FnZXYyOkdldE9iamVjdCddLFxuICAgICAgICByZXNvdXJjZXM6IFt0aGlzLm9yaWdpbkVuZHBvaW50QXJuXSxcbiAgICAgICAgY29uZGl0aW9uczoge1xuICAgICAgICAgIEJvb2w6IHtcbiAgICAgICAgICAgICdtZWRpYXBhY2thZ2V2MjpSZXF1ZXN0SGFzTWF0Y2hpbmdDZG5BdXRoSGVhZGVyJzogJ3RydWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9taXRFbXB0eUFycmF5PEE+KGE6IEFycmF5PEE+KTogQXJyYXk8QT4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gYS5sZW5ndGggPiAwID8gYSA6IHVuZGVmaW5lZDtcbn1cblxuIl19
|
|
2054
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbmRwb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSw2Q0FBMEc7QUFHMUcsK0RBQTBEO0FBRTFELGlEQUE2RTtBQUM3RSx1RUFBbUU7QUFFbkUsMkNBQXlGO0FBQ3pGLDRFQUE0RDtBQUM1RCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBSTFFLHFFQUFnRTtBQUNoRSxxREFBbUU7QUFFbkU7Ozs7R0FJRztBQUNILElBQVksVUFTWDtBQVRELFdBQVksVUFBVTtJQUNwQix5QkFBeUI7SUFDekIsMkJBQWEsQ0FBQTtJQUNiLHlCQUF5QjtJQUN6QiwyQkFBYSxDQUFBO0lBQ2IscURBQXFEO0lBQ3JELDJCQUFhLENBQUE7SUFDYiwwREFBMEQ7SUFDMUQsMkJBQWEsQ0FBQTtBQUNmLENBQUMsRUFUVyxVQUFVLDBCQUFWLFVBQVUsUUFTckI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxVQU9YO0FBUEQsV0FBWSxVQUFVO0lBQ3BCLGdCQUFnQjtJQUNoQiwyQkFBYSxDQUFBO0lBQ2IsaUJBQWlCO0lBQ2pCLDJCQUFhLENBQUE7SUFDYixVQUFVO0lBQ1YseUJBQVcsQ0FBQTtBQUNiLENBQUMsRUFQVyxVQUFVLDBCQUFWLFVBQVUsUUFPckI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxpQkFTWDtBQVRELFdBQVksaUJBQWlCO0lBQzNCLG1CQUFtQjtJQUNuQiw4QkFBUyxDQUFBO0lBQ1QsWUFBWTtJQUNaLG9DQUFlLENBQUE7SUFDZix1QkFBdUI7SUFDdkIsZ0NBQVcsQ0FBQTtJQUNYLDZCQUE2QjtJQUM3QixnQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQVRXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBUzVCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksYUFPWDtBQVBELFdBQVksYUFBYTtJQUN2Qiw4QkFBOEI7SUFDOUIsa0NBQWlC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S0FBSyxFQUFFLGFBQWEsSUFBSSwyQkFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRXpFLHNGQUFzRjtZQUN0Rix1RkFBdUY7WUFDdkYsaUZBQWlGO1lBQ2pGLG9GQUFvRjtZQUNwRixJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3ZDLE1BQU0sSUFBSSxzQkFBZSxDQUN2QixJQUFBLHNCQUFHLEVBQUEsd0JBQXdCLEVBQzNCLGlJQUFpSSxFQUNqSSxJQUFJLENBQ0wsQ0FBQztnQkFDSixDQUFDO2dCQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUkseUJBQWUsQ0FBQztvQkFDM0MsR0FBRyxFQUFFLDBDQUEwQztvQkFDL0MsTUFBTSxFQUFFLGdCQUFNLENBQUMsS0FBSztvQkFDcEIsVUFBVSxFQUFFLENBQUMsSUFBSSx1QkFBYSxFQUFFLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxDQUFDLDBCQUEwQixDQUFDO29CQUNyQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7b0JBQ25DLFVBQVUsRUFBRTt3QkFDVixJQUFJLEVBQUU7NEJBQ0osZ0RBQWdELEVBQUUsTUFBTTt5QkFDekQ7cUJBQ0Y7aUJBQ0YsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDO1NBQ0Y7O1lBL01VLHVEQUFjOzs7OztBQUFkLHdDQUFjO0FBa04zQixTQUFTLGNBQWMsQ0FBSSxDQUFXO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEJpdHJhdGUsIElSZXNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IFJlbW92YWxQb2xpY3ksIEFybkZvcm1hdCwgRHVyYXRpb24sIEZuLCBMYXp5LCBOYW1lcywgUmVzb3VyY2UsIFN0YWNrLCBUb2tlbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSUNlcnRpZmljYXRlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlcic7XG5pbXBvcnQgdHlwZSB7IE1ldHJpY09wdGlvbnMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBNZXRyaWMsIFVuaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgdHlwZSB7IElSb2xlLCBBZGRUb1Jlc291cmNlUG9saWN5UmVzdWx0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeVN0YXRlbWVudCwgU3RhclByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ2ZuT3JpZ2luRW5kcG9pbnQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFwYWNrYWdldjInO1xuaW1wb3J0IHR5cGUgeyBJT3JpZ2luRW5kcG9pbnRSZWYsIE9yaWdpbkVuZHBvaW50UmVmZXJlbmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhcGFja2FnZXYyJztcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvciwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IsIENmblJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IElDaGFubmVsIH0gZnJvbSAnLi9jaGFubmVsJztcbmltcG9ydCB0eXBlIHsgQ2RuQXV0aENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL29yaWdpbi1lbmRwb2ludC1wb2xpY3knO1xuaW1wb3J0IHsgT3JpZ2luRW5kcG9pbnRQb2xpY3kgfSBmcm9tICcuL29yaWdpbi1lbmRwb2ludC1wb2xpY3knO1xuaW1wb3J0IHsgY29udmVydERhdGVUb1N0cmluZywgcmVuZGVyVGFncyB9IGZyb20gJy4vc2hhcmVkLWhlbHBlcnMnO1xuXG4vKipcbiAqIEFjY2VwdGVkIGF1ZGlvIGNvZGVjIHZhbHVlcyBmb3IgbWFuaWZlc3QgZmlsdGVyaW5nLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL21lZGlhcGFja2FnZS9sYXRlc3QvdXNlcmd1aWRlL21hbmlmZXN0LWZpbHRlci1xdWVyeS1wYXJhbWV0ZXJzLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gQXVkaW9Db2RlYyB7XG4gIC8qKiBBQUMtTEMgYXVkaW8gY29kZWMgKi9cbiAgQUFDTCA9ICdBQUNMJyxcbiAgLyoqIEhFLUFBQyBhdWRpbyBjb2RlYyAqL1xuICBBQUNIID0gJ0FBQ0gnLFxuICAvKiogRG9sYnkgRGlnaXRhbCBhdWRpbyBjb2RlYyAoaW5jbHVkZSB0aGUgaHlwaGVuKSAqL1xuICBBQ18zID0gJ0FDLTMnLFxuICAvKiogRG9sYnkgRGlnaXRhbCBQbHVzIGF1ZGlvIGNvZGVjIChpbmNsdWRlIHRoZSBoeXBoZW4pICovXG4gIEVDXzMgPSAnRUMtMycsXG59XG5cbi8qKlxuICogQWNjZXB0ZWQgdmlkZW8gY29kZWMgdmFsdWVzIGZvciBtYW5pZmVzdCBmaWx0ZXJpbmcuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvbWFuaWZlc3QtZmlsdGVyLXF1ZXJ5LXBhcmFtZXRlcnMuaHRtbFxuICovXG5leHBvcnQgZW51bSBWaWRlb0NvZGVjIHtcbiAgLyoqIEguMjY0L0FWQyAqL1xuICBIMjY0ID0gJ0gyNjQnLFxuICAvKiogSC4yNjUvSEVWQyAqL1xuICBIMjY1ID0gJ0gyNjUnLFxuICAvKiogQVYxICovXG4gIEFWMSA9ICdBVjEnLFxufVxuXG4vKipcbiAqIEFjY2VwdGVkIHZpZGVvIGR5bmFtaWMgcmFuZ2UgdmFsdWVzIGZvciBtYW5pZmVzdCBmaWx0ZXJpbmcuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvbWFuaWZlc3QtZmlsdGVyLXF1ZXJ5LXBhcmFtZXRlcnMuaHRtbFxuICovXG5leHBvcnQgZW51bSBWaWRlb0R5bmFtaWNSYW5nZSB7XG4gIC8qKiBEb2xieSBWaXNpb24gKi9cbiAgRFYgPSAnZHYnLFxuICAvKiogSERSMTAgKi9cbiAgSERSMTAgPSAnaGRyMTAnLFxuICAvKiogSHlicmlkIExvZy1HYW1tYSAqL1xuICBITEcgPSAnaGxnJyxcbiAgLyoqIFN0YW5kYXJkIER5bmFtaWMgUmFuZ2UgKi9cbiAgU0RSID0gJ3NkcicsXG59XG5cbi8qKlxuICogQWNjZXB0ZWQgdHJpY2twbGF5IHR5cGUgdmFsdWVzIGZvciBtYW5pZmVzdCBmaWx0ZXJpbmcuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvbWFuaWZlc3QtZmlsdGVyLXF1ZXJ5LXBhcmFtZXRlcnMuaHRtbFxuICovXG5leHBvcnQgZW51bSBUcmlja3BsYXlUeXBlIHtcbiAgLyoqIEktZnJhbWUgb25seSB0cmljay1wbGF5ICovXG4gIElGUkFNRSA9ICdpZnJhbWUnLFxuICAvKiogSW1hZ2UtYmFzZWQgdHJpY2stcGxheSAqL1xuICBJTUFHRSA9ICdpbWFnZScsXG4gIC8qKiBObyB0cmljay1wbGF5ICovXG4gIE5PTkUgPSAnbm9uZScsXG59XG5cbi8qKlxuICogTnVtZXJpYyBtYW5pZmVzdCBmaWx0ZXIga2V5cy5cbiAqXG4gKiBVc2Ugd2l0aCBgTWFuaWZlc3RGaWx0ZXIubnVtZXJpYygpYCwgYE1hbmlmZXN0RmlsdGVyLm51bWVyaWNMaXN0KClgLCBhbmQgYE1hbmlmZXN0RmlsdGVyLm51bWVyaWNSYW5nZSgpYC5cbiAqXG4gKiBBdWRpbyBhbmQgdmlkZW8gYml0cmF0ZSBmaWx0ZXJzIGFyZSBub3QgaW5jbHVkZWQgaGVyZSBiZWNhdXNlIHRoZXkgdXNlIHRoZVxuICogYEJpdHJhdGVgIGNsYXNzIGRpcmVjdGx5IHZpYSBkZWRpY2F0ZWQgbWV0aG9kcyBvbiBgTWFuaWZlc3RGaWx0ZXJgLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL21lZGlhcGFja2FnZS9sYXRlc3QvdXNlcmd1aWRlL21hbmlmZXN0LWZpbHRlci1xdWVyeS1wYXJhbWV0ZXJzLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gTnVtZXJpY0ZpbHRlcktleSB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGF1ZGlvIGNoYW5uZWxzLlxuICAgKlxuICAgKiBBY2NlcHRlZCB2YWx1ZXM6IHJhbmdlIDHigJMzMjc2Nywgb3IgaW5kaXZpZHVhbCBpbnRlZ2Vycy5cbiAgICovXG4gIEFVRElPX0NIQU5ORUxTPSdhdWRpb19jaGFubmVscycsXG4gIC8qKlxuICAgKiBUaGUgYXVkaW8gc2FtcGxlIHJhdGUgaW4gSHouXG4gICAqXG4gICAqIEFjY2VwdGVkIHZhbHVlczogcmFuZ2UgMOKAkzIxNDc0ODM2NDcsIG9yIGluZGl2aWR1YWwgaW50ZWdlcnMuXG4gICAqL1xuICBBVURJT19TQU1QTEVfUkFURT0nYXVkaW9fc2FtcGxlX3JhdGUnLFxuICAvKipcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgdHJpY2stcGxheSBpbWFnZSBpbiBwaXhlbHMgKEktZnJhbWUgYW5kIGltYWdlLWJhc2VkIHRyaWNrLXBsYXkpLlxuICAgKlxuICAgKiBJZiB1c2luZyB3aXRoIEktZnJhbWUgb25seSB0cmljay1wbGF5LCBgVFJJQ0tQTEFZX0hFSUdIVGAgYW5kIGBWSURFT19IRUlHSFRgXG4gICAqIHNob3VsZCBoYXZlIHNpbWlsYXIgdmFsdWVzLiBJZiB0aGV5IGRpZmZlciwgSS1mcmFtZSBvbmx5IHRyYWNrcyBtaWdodCBiZVxuICAgKiByZW1vdmVkIGZyb20gdGhlIG1hbmlmZXN0LlxuICAgKlxuICAgKiBBY2NlcHRlZCB2YWx1ZXM6IHJhbmdlIDHigJMyMTQ3NDgzNjQ3LCBvciBpbmRpdmlkdWFsIGludGVnZXJzLlxuICAgKi9cbiAgVFJJQ0tQTEFZX0hFSUdIVD0ndHJpY2twbGF5X2hlaWdodCcsXG4gIC8qKlxuICAgKiBUaGUgdmlkZW8gZnJhbWUgcmF0ZSByYW5nZSBpbiBOVFNDIGZvcm1hdC5cbiAgICpcbiAgICogV2hlbiBmaWx0ZXJpbmcgZm9yIGEgc2luZ2xlIHZhbHVlLCBNZWRpYVBhY2thZ2UgdXNlcyBhbiBhcHByb3hpbWF0ZSBlcXVhbHNcbiAgICogY29tcGFyaXNvbiB3aXRoIGFuIGVwc2lsb24gdG9sZXJhbmNlIG9mIDAuMDAwNS5cbiAgICpcbiAgICogQWNjZXB0ZWQgdmFsdWVzOiByYW5nZSAx4oCTOTk5Ljk5OSAodXAgdG8gdGhyZWUgZGVjaW1hbCBwbGFjZXMpLCBvciBpbmRpdmlkdWFsIHZhbHVlcy5cbiAgICovXG4gIFZJREVPX0ZSQU1FUkFURT0ndmlkZW9fZnJhbWVyYXRlJyxcbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIHZpZGVvIGluIHBpeGVscy5cbiAgICpcbiAgICogSWYgdXNpbmcgd2l0aCBJLWZyYW1lIG9ubHkgdHJpY2stcGxheSwgYFRSSUNLUExBWV9IRUlHSFRgIGFuZCBgVklERU9fSEVJR0hUYFxuICAgKiBzaG91bGQgaGF2ZSBzaW1pbGFyIHZhbHVlcy4gSWYgdGhleSBkaWZmZXIsIEktZnJhbWUgb25seSB0cmFja3MgbWlnaHQgYmVcbiAgICogcmVtb3ZlZCBmcm9tIHRoZSBtYW5pZmVzdC5cbiAgICpcbiAgICogQWNjZXB0ZWQgdmFsdWVzOiByYW5nZSAx4oCTMzI3NjcsIG9yIGluZGl2aWR1YWwgaW50ZWdlcnMuXG4gICAqL1xuICBWSURFT19IRUlHSFQ9J3ZpZGVvX2hlaWdodCcsXG59XG5cbi8qKlxuICogVGV4dCBtYW5pZmVzdCBmaWx0ZXIga2V5cyBmb3IgZnJlZS1mb3JtIHN0cmluZyB2YWx1ZXMuXG4gKlxuICogVXNlIHdpdGggYE1hbmlmZXN0RmlsdGVyLnRleHQoKWAgYW5kIGBNYW5pZmVzdEZpbHRlci50ZXh0TGlzdCgpYC5cbiAqXG4gKiBGb3Iga2V5cyB3aXRoIGZpeGVkIGFjY2VwdGVkIHZhbHVlcywgdXNlIHRoZSBkZWRpY2F0ZWQgbWV0aG9kcyBvbiBgTWFuaWZlc3RGaWx0ZXJgIGluc3RlYWQ6XG4gKiAtIEF1ZGlvIGNvZGVjOiBgTWFuaWZlc3RGaWx0ZXIuYXVkaW9Db2RlYygpYCAvIGBNYW5pZmVzdEZpbHRlci5hdWRpb0NvZGVjTGlzdCgpYFxuICogLSBWaWRlbyBjb2RlYzogYE1hbmlmZXN0RmlsdGVyLnZpZGVvQ29kZWMoKWAgLyBgTWFuaWZlc3RGaWx0ZXIudmlkZW9Db2RlY0xpc3QoKWBcbiAqIC0gVmlkZW8gZHluYW1pYyByYW5nZTogYE1hbmlmZXN0RmlsdGVyLnZpZGVvRHluYW1pY1JhbmdlKClgIC8gYE1hbmlmZXN0RmlsdGVyLnZpZGVvRHluYW1pY1JhbmdlTGlzdCgpYFxuICogLSBUcmlja3BsYXkgdHlwZTogYE1hbmlmZXN0RmlsdGVyLnRyaWNrcGxheVR5cGUoKWAgLyBgTWFuaWZlc3RGaWx0ZXIudHJpY2twbGF5VHlwZUxpc3QoKWBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tZWRpYXBhY2thZ2UvbGF0ZXN0L3VzZXJndWlkZS9tYW5pZmVzdC1maWx0ZXItcXVlcnktcGFyYW1ldGVycy5odG1sXG4gKi9cbmV4cG9ydCBlbnVtIFRleHRGaWx0ZXJLZXkge1xuICAvKipcbiAgICogQXVkaW8gbGFuZ3VhZ2VzIG9yIGZ1bmN0aW9uYWwgY29kZXMgZGVyaXZlZCBmcm9tIGVuY29kZXIgcGFzc3Rocm91Z2guXG4gICAqXG4gICAqIEFjY2VwdGVkIHZhbHVlczogYXJiaXRyYXJ5IHN0cmluZ3Mgc3VjaCBhcyBJU08tNjM5LTEgbGFuZ3VhZ2UgY29kZXMgKG5vdCBjYXNlLXNlbnNpdGl2ZSkuXG4gICAqL1xuICBBVURJT19MQU5HVUFHRT0nYXVkaW9fbGFuZ3VhZ2UnLFxuICAvKipcbiAgICogVGhlIHN1YnRpdGxlIGxhbmd1YWdlIG9yIGZ1bmN0aW9uYWwgY29kZXMgZGVyaXZlZCBmcm9tIGVuY29kZXIgcGFzc3Rocm91Z2guXG4gICAqXG4gICAqIEFjY2VwdGVkIHZhbHVlczogYXJiaXRyYXJ5IHN0cmluZ3Mgc3VjaCBhcyBJU08tNjM5LTEgbGFuZ3VhZ2UgY29kZXMgKG5vdCBjYXNlLXNlbnNpdGl2ZSkuXG4gICAqL1xuICBTVUJUSVRMRV9MQU5HVUFHRT0nc3VidGl0bGVfbGFuZ3VhZ2UnLFxufVxuXG4vKipcbiAqIEJpdHJhdGUgbWFuaWZlc3QgZmlsdGVyIGtleXMuXG4gKlxuICogVXNlIHdpdGggYE1hbmlmZXN0RmlsdGVyLmJpdHJhdGUoKWAgYW5kIGBNYW5pZmVzdEZpbHRlci5iaXRyYXRlUmFuZ2UoKWAuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvbWFuaWZlc3QtZmlsdGVyLXF1ZXJ5LXBhcmFtZXRlcnMuaHRtbFxuICovXG5leHBvcnQgZW51bSBCaXRyYXRlRmlsdGVyS2V5IHtcbiAgLyoqXG4gICAqIFRoZSBhdWRpbyBiaXRyYXRlIGluIGJpdHMgcGVyIHNlY29uZC5cbiAgICpcbiAgICogQWNjZXB0ZWQgdmFsdWVzOiByYW5nZSAw4oCTMjE0NzQ4MzY0Nywgb3IgaW5kaXZpZHVhbCBpbnRlZ2Vycy5cbiAgICovXG4gIEFVRElPX0JJVFJBVEU9J2F1ZGlvX2JpdHJhdGUnLFxuICAvKipcbiAgICogVGhlIHZpZGVvIGJpdHJhdGUgaW4gYml0cyBwZXIgc2Vjb25kLlxuICAgKlxuICAgKiBXZSByZWNvbW1lbmQgdXNpbmcgb25seSB0aGlzIGZpbHRlciBwYXJhbWV0ZXIgdG8gc2V0IHRoZSB2aWRlbyBiaXRyYXRlLlxuICAgKiBEbyBub3QgYWxzbyBzZXQgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmlkZW8gYml0cmF0ZSB2aWEgdGhlIE1lZGlhUGFja2FnZVxuICAgKiBjb25zb2xlIG9yIEFXUyBDTEksIGFzIHlvdXIgb3V0cHV0IG1pZ2h0IGJlIHNrZXdlZC5cbiAgICpcbiAgICogVGhpcyBwYXJhbWV0ZXIgY2Fubm90IGJlIHVzZWQgd2l0aCB0cmljay1wbGF5IHN0cmVhbXMuXG4gICAqXG4gICAqIEFjY2VwdGVkIHZhbHVlczogcmFuZ2UgMOKAkzIxNDc0ODM2NDcsIG9yIGluZGl2aWR1YWwgaW50ZWdlcnMuXG4gICAqL1xuICBWSURFT19CSVRSQVRFPSd2aWRlb19iaXRyYXRlJyxcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbnVtZXJpYyBmaWx0ZXIgZXhwcmVzc2lvbiBzZWdtZW50IOKAlCBlaXRoZXIgYSBzaW5nbGUgdmFsdWUgb3IgYSByYW5nZS5cbiAqXG4gKiBVc2Ugd2l0aCBgTWFuaWZlc3RGaWx0ZXIubnVtZXJpY0NvbWJvKClgIHRvIGJ1aWxkIGZpbHRlcnMgdGhhdCBjb21iaW5lXG4gKiByYW5nZXMgYW5kIGluZGl2aWR1YWwgdmFsdWVzIChlLmcuIGB2aWRlb19oZWlnaHQ6MjQwLTM2MCw3MjAtMTA4MCwxNDQwYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBOdW1lcmljRXhwcmVzc2lvbiB7XG4gIC8qKlxuICAgKiBBIHNpbmdsZSBudW1lcmljIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWx1ZSh2OiBudW1iZXIpOiBOdW1lcmljRXhwcmVzc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBOdW1lcmljRXhwcmVzc2lvbihgJHt2fWAsIFt2XSk7XG4gIH1cblxuICAvKipcbiAgICogQW4gaW5jbHVzaXZlIG51bWVyaWMgcmFuZ2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJhbmdlKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogTnVtZXJpY0V4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgTnVtZXJpY0V4cHJlc3Npb24oYCR7c3RhcnR9LSR7ZW5kfWAsIFtzdGFydCwgZW5kXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWFkb25seSBfZXhwcmVzc2lvbjogc3RyaW5nLFxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgX3ZhbHVlczogbnVtYmVyW10sXG4gICkge31cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgYml0cmF0ZSBmaWx0ZXIgZXhwcmVzc2lvbiBzZWdtZW50IOKAlCBlaXRoZXIgYSBzaW5nbGUgdmFsdWUgb3IgYSByYW5nZS5cbiAqXG4gKiBVc2Ugd2l0aCBgTWFuaWZlc3RGaWx0ZXIuYml0cmF0ZUNvbWJvKClgIHRvIGJ1aWxkIGZpbHRlcnMgdGhhdCBjb21iaW5lXG4gKiByYW5nZXMgYW5kIGluZGl2aWR1YWwgYml0cmF0ZSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBCaXRyYXRlRXhwcmVzc2lvbiB7XG4gIC8qKlxuICAgKiBBIHNpbmdsZSBiaXRyYXRlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWx1ZSh2OiBCaXRyYXRlKTogQml0cmF0ZUV4cHJlc3Npb24ge1xuICAgIHJldHVybiBuZXcgQml0cmF0ZUV4cHJlc3Npb24oYCR7di50b0JwcygpfWAsIFt2LnRvQnBzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbiBpbmNsdXNpdmUgYml0cmF0ZSByYW5nZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmFuZ2Uoc3RhcnQ6IEJpdHJhdGUsIGVuZDogQml0cmF0ZSk6IEJpdHJhdGVFeHByZXNzaW9uIHtcbiAgICByZXR1cm4gbmV3IEJpdHJhdGVFeHByZXNzaW9uKGAke3N0YXJ0LnRvQnBzKCl9LSR7ZW5kLnRvQnBzKCl9YCwgW3N0YXJ0LnRvQnBzKCksIGVuZC50b0JwcygpXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyByZWFkb25seSBfZXhwcmVzc2lvbjogc3RyaW5nLFxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgX3ZhbHVlczogbnVtYmVyW10sXG4gICkge31cbn1cblxuLyoqXG4gKiBFbmFibGVzIHlvdSB0byBjcmVhdGUgZmlsdGVycyBmb3IgeW91ciBPcmlnaW4gRW5kcG9pbnQuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvbWFuaWZlc3QtZmlsdGVyaW5nLmh0bWxcbiAqL1xuZXhwb3J0IGNsYXNzIE1hbmlmZXN0RmlsdGVyIHtcbiAgLyoqXG4gICAqIEZpbHRlciBieSBhIHNpbmdsZSBiaXRyYXRlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBiaXRyYXRlKGtleTogQml0cmF0ZUZpbHRlcktleSwgdmFsdWU6IEJpdHJhdGUpIHtcbiAgICBjb25zdCBicHMgPSB2YWx1ZS50b0JwcygpO1xuICAgIHZhbGlkYXRlQml0cmF0ZUZpbHRlclZhbHVlKGJwcywga2V5KTtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGAke2tleX06JHticHN9YCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGEgYml0cmF0ZSByYW5nZSAoaW5jbHVzaXZlKS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYml0cmF0ZVJhbmdlKGtleTogQml0cmF0ZUZpbHRlcktleSwgc3RhcnQ6IEJpdHJhdGUsIGVuZDogQml0cmF0ZSkge1xuICAgIGNvbnN0IHN0YXJ0QnBzID0gc3RhcnQudG9CcHMoKTtcbiAgICBjb25zdCBlbmRCcHMgPSBlbmQudG9CcHMoKTtcbiAgICB2YWxpZGF0ZUJpdHJhdGVGaWx0ZXJWYWx1ZShzdGFydEJwcywga2V5KTtcbiAgICB2YWxpZGF0ZUJpdHJhdGVGaWx0ZXJWYWx1ZShlbmRCcHMsIGtleSk7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgJHtrZXl9OiR7c3RhcnRCcHN9LSR7ZW5kQnBzfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBzaW5nbGUgbnVtZXJpYyBmaWx0ZXIgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG51bWVyaWMoa2V5OiBOdW1lcmljRmlsdGVyS2V5LCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgdmFsaWRhdGVOdW1lcmljRmlsdGVyVmFsdWUodmFsdWUsIGtleSk7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgJHtrZXl9OiR7dmFsdWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmeSBtdWx0aXBsZSBudW1lcmljIGZpbHRlciB2YWx1ZXMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG51bWVyaWNMaXN0KGtleTogTnVtZXJpY0ZpbHRlcktleSwgdmFsdWVzOiBudW1iZXJbXSkge1xuICAgIHZhbHVlcy5mb3JFYWNoKHYgPT4gdmFsaWRhdGVOdW1lcmljRmlsdGVyVmFsdWUodiwga2V5KSk7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgJHtrZXl9OiR7dmFsdWVzLmpvaW4oJywnKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGEgbnVtZXJpYyBmaWx0ZXIgcmFuZ2UgKGluY2x1c2l2ZSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG51bWVyaWNSYW5nZShrZXk6IE51bWVyaWNGaWx0ZXJLZXksIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKSB7XG4gICAgdmFsaWRhdGVOdW1lcmljRmlsdGVyVmFsdWUoc3RhcnQsIGtleSk7XG4gICAgdmFsaWRhdGVOdW1lcmljRmlsdGVyVmFsdWUoZW5kLCBrZXkpO1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3RGaWx0ZXIoYCR7a2V5fToke3N0YXJ0fS0ke2VuZH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGEgZnJlZS1mb3JtIHRleHQgZmlsdGVyIHZhbHVlIChmb3IgbGFuZ3VhZ2Uga2V5cykuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRleHQoa2V5OiBUZXh0RmlsdGVyS2V5LCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgJHtrZXl9OiR7dmFsdWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmeSBtdWx0aXBsZSBmcmVlLWZvcm0gdGV4dCBmaWx0ZXIgdmFsdWVzIChmb3IgbGFuZ3VhZ2Uga2V5cykuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRleHRMaXN0KGtleTogVGV4dEZpbHRlcktleSwgdmFsdWVzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3RGaWx0ZXIoYCR7a2V5fToke3ZhbHVlcy5qb2luKCcsJyl9YCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGEgc2luZ2xlIGF1ZGlvIGNvZGVjLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhdWRpb0NvZGVjKHZhbHVlOiBBdWRpb0NvZGVjKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgYXVkaW9fY29kZWM6JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgbXVsdGlwbGUgYXVkaW8gY29kZWNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhdWRpb0NvZGVjTGlzdCh2YWx1ZXM6IEF1ZGlvQ29kZWNbXSkge1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3RGaWx0ZXIoYGF1ZGlvX2NvZGVjOiR7dmFsdWVzLmpvaW4oJywnKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgYSBzaW5nbGUgdmlkZW8gY29kZWMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZpZGVvQ29kZWModmFsdWU6IFZpZGVvQ29kZWMpIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGB2aWRlb19jb2RlYzoke3ZhbHVlfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBtdWx0aXBsZSB2aWRlbyBjb2RlY3MuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZpZGVvQ29kZWNMaXN0KHZhbHVlczogVmlkZW9Db2RlY1tdKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgdmlkZW9fY29kZWM6JHt2YWx1ZXMuam9pbignLCcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBhIHNpbmdsZSB2aWRlbyBkeW5hbWljIHJhbmdlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2aWRlb0R5bmFtaWNSYW5nZSh2YWx1ZTogVmlkZW9EeW5hbWljUmFuZ2UpIHtcbiAgICByZXR1cm4gbmV3IE1hbmlmZXN0RmlsdGVyKGB2aWRlb19keW5hbWljX3JhbmdlOiR7dmFsdWV9YCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGJ5IG11bHRpcGxlIHZpZGVvIGR5bmFtaWMgcmFuZ2VzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2aWRlb0R5bmFtaWNSYW5nZUxpc3QodmFsdWVzOiBWaWRlb0R5bmFtaWNSYW5nZVtdKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgdmlkZW9fZHluYW1pY19yYW5nZToke3ZhbHVlcy5qb2luKCcsJyl9YCk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIGJ5IGEgc2luZ2xlIHRyaWNrcGxheSB0eXBlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0cmlja3BsYXlUeXBlKHZhbHVlOiBUcmlja3BsYXlUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgdHJpY2twbGF5X3R5cGU6JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgbXVsdGlwbGUgdHJpY2twbGF5IHR5cGVzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB0cmlja3BsYXlUeXBlTGlzdCh2YWx1ZXM6IFRyaWNrcGxheVR5cGVbXSkge1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3RGaWx0ZXIoYHRyaWNrcGxheV90eXBlOiR7dmFsdWVzLmpvaW4oJywnKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgYSBjb21iaW5hdGlvbiBvZiBudW1lcmljIHJhbmdlcyBhbmQgaW5kaXZpZHVhbCB2YWx1ZXMuXG4gICAqXG4gICAqIFVzZSB0aGlzIGZvciBhZHZhbmNlZCBwYXR0ZXJucyBsaWtlIGB2aWRlb19oZWlnaHQ6MjQwLTM2MCw3MjAtMTA4MCwxNDQwYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogTWFuaWZlc3RGaWx0ZXIubnVtZXJpY0NvbWJvKE51bWVyaWNGaWx0ZXJLZXkuVklERU9fSEVJR0hULCBbXG4gICAqICAgTnVtZXJpY0V4cHJlc3Npb24ucmFuZ2UoMjQwLCAzNjApLFxuICAgKiAgIE51bWVyaWNFeHByZXNzaW9uLnJhbmdlKDcyMCwgMTA4MCksXG4gICAqICAgTnVtZXJpY0V4cHJlc3Npb24udmFsdWUoMTQ0MCksXG4gICAqIF0pXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG51bWVyaWNDb21ibyhrZXk6IE51bWVyaWNGaWx0ZXJLZXksIGV4cHJlc3Npb25zOiBOdW1lcmljRXhwcmVzc2lvbltdKSB7XG4gICAgZXhwcmVzc2lvbnMuZm9yRWFjaChleHByID0+IGV4cHIuX3ZhbHVlcy5mb3JFYWNoKHYgPT4gdmFsaWRhdGVOdW1lcmljRmlsdGVyVmFsdWUodiwga2V5KSkpO1xuICAgIHJldHVybiBuZXcgTWFuaWZlc3RGaWx0ZXIoYCR7a2V5fToke2V4cHJlc3Npb25zLm1hcChlID0+IGUuX2V4cHJlc3Npb24pLmpvaW4oJywnKX1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgYSBjb21iaW5hdGlvbiBvZiBiaXRyYXRlIHJhbmdlcyBhbmQgaW5kaXZpZHVhbCB2YWx1ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIE1hbmlmZXN0RmlsdGVyLmJpdHJhdGVDb21ibyhCaXRyYXRlRmlsdGVyS2V5LlZJREVPX0JJVFJBVEUsIFtcbiAgICogICBCaXRyYXRlRXhwcmVzc2lvbi5yYW5nZShCaXRyYXRlLm1icHMoMSksIEJpdHJhdGUubWJwcygzKSksXG4gICAqICAgQml0cmF0ZUV4cHJlc3Npb24udmFsdWUoQml0cmF0ZS5tYnBzKDUpKSxcbiAgICogXSlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYml0cmF0ZUNvbWJvKGtleTogQml0cmF0ZUZpbHRlcktleSwgZXhwcmVzc2lvbnM6IEJpdHJhdGVFeHByZXNzaW9uW10pIHtcbiAgICBleHByZXNzaW9ucy5mb3JFYWNoKGV4cHIgPT4gZXhwci5fdmFsdWVzLmZvckVhY2godiA9PiB2YWxpZGF0ZUJpdHJhdGVGaWx0ZXJWYWx1ZSh2LCBrZXkpKSk7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihgJHtrZXl9OiR7ZXhwcmVzc2lvbnMubWFwKGUgPT4gZS5fZXhwcmVzc2lvbikuam9pbignLCcpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBjdXN0b20gbWFuaWZlc3QgZmlsdGVyIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3VzdG9tKGN1c3RvbTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdEZpbHRlcihjdXN0b20pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBmaWx0ZXJTdHJpbmcgTm9ybWFsaXNlZCBtYW5pZmVzdCBmaWx0ZXIgc3RyaW5nXG4gICAqL1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGZpbHRlclN0cmluZzogc3RyaW5nKSB7IH1cbn1cblxuLyoqXG4gKiBDb250ZXh0IHBhc3NlZCB0byBNYW5pZmVzdC5fYmluZCgpIG1ldGhvZFxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWFuaWZlc3RCaW5kQ29udGV4dCB7XG4gIHJlYWRvbmx5IGhsc01hbmlmZXN0czogQ2ZuT3JpZ2luRW5kcG9pbnQuSGxzTWFuaWZlc3RDb25maWd1cmF0aW9uUHJvcGVydHlbXTtcbiAgcmVhZG9ubHkgbGxIbHNNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50Lkxvd0xhdGVuY3lIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdO1xuICByZWFkb25seSBkYXNoTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5EYXNoTWFuaWZlc3RDb25maWd1cmF0aW9uUHJvcGVydHlbXTtcbiAgcmVhZG9ubHkgbXNzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5Nc3NNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdO1xuICByZWFkb25seSBzZWdtZW50PzogU2VnbWVudENvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogTWFuaWZlc3QgdG8gYWRkIHRvIE9yaWdpbiBFbmRwb2ludFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWFuaWZlc3Qge1xuICAvKipcbiAgICogU3BlY2lmeSBhIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gZm9yIExvdyBMYXRlbmN5IEhMUy5cbiAgICpcbiAgICogKipOb3RlOioqIExvdyBMYXRlbmN5IEhMUyBtYW5pZmVzdHMgcmVxdWlyZSBUUyBvciBDTUFGIGNvbnRhaW5lciB0eXBlLlxuICAgKiBVc2Ugd2l0aCBgU2VnbWVudC50cygpYCBvciBgU2VnbWVudC5jbWFmKClgLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBsb3dMYXRlbmN5SExTKG1hbmlmZXN0OiBMb3dMYXRlbmN5SGxzTWFuaWZlc3RDb25maWd1cmF0aW9uKTogTWFuaWZlc3Qge1xuICAgIHJldHVybiBuZXcgTG93TGF0ZW5jeUhsc01hbmlmZXN0KG1hbmlmZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGEgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBmb3IgSExTLlxuICAgKlxuICAgKiAqKk5vdGU6KiogSExTIG1hbmlmZXN0cyByZXF1aXJlIFRTIG9yIENNQUYgY29udGFpbmVyIHR5cGUuXG4gICAqIFVzZSB3aXRoIGBTZWdtZW50LnRzKClgIG9yIGBTZWdtZW50LmNtYWYoKWAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhscyhtYW5pZmVzdDogSGxzTWFuaWZlc3RDb25maWd1cmF0aW9uKTogTWFuaWZlc3Qge1xuICAgIHJldHVybiBuZXcgSGxzTWFuaWZlc3QobWFuaWZlc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgYSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGZvciBEQVNILlxuICAgKlxuICAgKiAqKk5vdGU6KiogREFTSCBtYW5pZmVzdHMgcmVxdWlyZSBDTUFGIGNvbnRhaW5lciB0eXBlLlxuICAgKiBVc2Ugd2l0aCBgU2VnbWVudC5jbWFmKClgLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkYXNoKG1hbmlmZXN0OiBEYXNoTWFuaWZlc3RDb25maWd1cmF0aW9uKTogTWFuaWZlc3Qge1xuICAgIHJldHVybiBuZXcgRGFzaE1hbmlmZXN0KG1hbmlmZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IGEgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBmb3IgTVNTLlxuICAgKlxuICAgKiAqKk5vdGU6KiogTVNTIG1hbmlmZXN0cyByZXF1aXJlIElTTSBjb250YWluZXIgdHlwZS5cbiAgICogVXNlIHdpdGggYFNlZ21lbnQuaXNtKClgLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtc3MobWFuaWZlc3Q6IE1zc01hbmlmZXN0Q29uZmlndXJhdGlvbik6IE1hbmlmZXN0IHtcbiAgICByZXR1cm4gbmV3IE1zc01hbmlmZXN0KG1hbmlmZXN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgbWFuaWZlc3QgaXMgYm91bmQgdG8gYW4gT3JpZ2luRW5kcG9pbnQuXG4gICAqXG4gICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgbWV0aG9kIHVzZWQgYnkgdGhlIGNvbnN0cnVjdCBsaWJyYXJ5IGFuZCBzaG91bGQgbm90IGJlXG4gICAqIGNhbGxlZCBvciBpbXBsZW1lbnRlZCBieSBleHRlcm5hbCBjb25zdW1lcnMuIEl0IG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kKGNvbnRleHQ6IE1hbmlmZXN0QmluZENvbnRleHQpOiB2b2lkO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgbnVtZXJpYyBmaWx0ZXIgdmFsdWUgaXMgYW4gaW50ZWdlciB3aXRoaW4gdGhlIGFjY2VwdGVkIHJhbmdlIGZvciBpdHMga2V5LlxuICogVklERU9fRlJBTUVSQVRFIGlzIGV4Y2x1ZGVkIOKAlCBpdCB1c2VzIGB2YWxpZGF0ZUZyYW1lcmF0ZVZhbHVlYCBpbnN0ZWFkLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZWdlckZpbHRlclZhbHVlKHZhbHVlOiBudW1iZXIsIGtleTogTnVtZXJpY0ZpbHRlcktleSwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogdm9pZCB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE51bWVyaWNGaWx0ZXJNdXN0QmVJbnRlZ2VyYCwgYE51bWVyaWMgZmlsdGVyIHZhbHVlIGZvciAnJHtrZXl9JyBtdXN0IGJlIGFuIGludGVnZXIsIGdvdCAke3ZhbHVlfWApO1xuICB9XG4gIGlmICh2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTnVtZXJpY0ZpbHRlck91dE9mUmFuZ2VgLCBgTnVtZXJpYyBmaWx0ZXIgdmFsdWUgZm9yICcke2tleX0nIG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fSwgZ290ICR7dmFsdWV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHZpZGVvIGZyYW1lcmF0ZSBmaWx0ZXIgdmFsdWUgKDHigJM5OTkuOTk5LCB1cCB0byAzIGRlY2ltYWwgcGxhY2VzKS5cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYW1lcmF0ZVZhbHVlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKHZhbHVlIDwgMSB8fCB2YWx1ZSA+IDk5OS45OTkpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE51bWVyaWNGaWx0ZXJPdXRPZlJhbmdlYCwgYE51bWVyaWMgZmlsdGVyIHZhbHVlIGZvciAndmlkZW9fZnJhbWVyYXRlJyBtdXN0IGJlIGJldHdlZW4gMSBhbmQgOTk5Ljk5OSwgZ290ICR7dmFsdWV9YCk7XG4gIH1cbiAgY29uc3QgZGVjaW1hbFBhcnQgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJylbMV07XG4gIGlmIChkZWNpbWFsUGFydCAmJiBkZWNpbWFsUGFydC5sZW5ndGggPiAzKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBOdW1lcmljRmlsdGVyTWF4RGVjaW1hbFBsYWNlc2AsIGBOdW1lcmljIGZpbHRlciB2YWx1ZSBmb3IgJ3ZpZGVvX2ZyYW1lcmF0ZScgYWxsb3dzIHVwIHRvIDMgZGVjaW1hbCBwbGFjZXMsIGdvdCAke3ZhbHVlfWApO1xuICB9XG59XG5cbi8qKlxuICogUm91dGUgbnVtZXJpYyB2YWxpZGF0aW9uIHRvIHRoZSBjb3JyZWN0IGhlbHBlciBiYXNlZCBvbiBrZXkuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVOdW1lcmljRmlsdGVyVmFsdWUodmFsdWU6IG51bWJlciwga2V5OiBOdW1lcmljRmlsdGVyS2V5KTogdm9pZCB7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSBOdW1lcmljRmlsdGVyS2V5LkFVRElPX0NIQU5ORUxTOlxuICAgICAgcmV0dXJuIHZhbGlkYXRlSW50ZWdlckZpbHRlclZhbHVlKHZhbHVlLCBrZXksIDEsIDMyXzc2Nyk7XG4gICAgY2FzZSBOdW1lcmljRmlsdGVyS2V5LkFVRElPX1NBTVBMRV9SQVRFOlxuICAgICAgcmV0dXJuIHZhbGlkYXRlSW50ZWdlckZpbHRlclZhbHVlKHZhbHVlLCBrZXksIDAsIDJfMTQ3XzQ4M182NDcpO1xuICAgIGNhc2UgTnVtZXJpY0ZpbHRlcktleS5UUklDS1BMQVlfSEVJR0hUOlxuICAgICAgcmV0dXJuIHZhbGlkYXRlSW50ZWdlckZpbHRlclZhbHVlKHZhbHVlLCBrZXksIDEsIDJfMTQ3XzQ4M182NDcpO1xuICAgIGNhc2UgTnVtZXJpY0ZpbHRlcktleS5WSURFT19GUkFNRVJBVEU6XG4gICAgICByZXR1cm4gdmFsaWRhdGVGcmFtZXJhdGVWYWx1ZSh2YWx1ZSk7XG4gICAgY2FzZSBOdW1lcmljRmlsdGVyS2V5LlZJREVPX0hFSUdIVDpcbiAgICAgIHJldHVybiB2YWxpZGF0ZUludGVnZXJGaWx0ZXJWYWx1ZSh2YWx1ZSwga2V5LCAxLCAzMl83NjcpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBiaXRyYXRlIGZpbHRlciB2YWx1ZSBpcyBhbiBpbnRlZ2VyIHdpdGhpbiB0aGUgYWNjZXB0ZWQgcmFuZ2UuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCaXRyYXRlRmlsdGVyVmFsdWUoYnBzOiBudW1iZXIsIGtleTogQml0cmF0ZUZpbHRlcktleSk6IHZvaWQge1xuICBpZiAoIU51bWJlci5pc0ludGVnZXIoYnBzKSkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgQml0cmF0ZUZpbHRlck11c3RCZUludGVnZXJgLCBgQml0cmF0ZSBmaWx0ZXIgdmFsdWUgZm9yICcke2tleX0nIG11c3QgcmVzb2x2ZSB0byBhIHdob2xlIG51bWJlciBvZiBiaXRzIHBlciBzZWNvbmQsIGdvdCAke2Jwc31gKTtcbiAgfVxuICBpZiAoYnBzIDwgMCB8fCBicHMgPiAyXzE0N180ODNfNjQ3KSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBCaXRyYXRlRmlsdGVyT3V0T2ZSYW5nZWAsIGBCaXRyYXRlIGZpbHRlciB2YWx1ZSBmb3IgJyR7a2V5fScgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDIxNDc0ODM2NDcsIGdvdCAke2Jwc31gKTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBjb21tb24gbWFuaWZlc3QgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlTWFuaWZlc3RDb25maWd1cmF0aW9uKGNvbmZpZzogTWFuaWZlc3RDb25maWd1cmF0aW9uQmFzZSk6IHZvaWQge1xuICBpZiAoY29uZmlnLm1hbmlmZXN0V2luZG93ICYmIGNvbmZpZy5tYW5pZmVzdFdpbmRvdy50b1NlY29uZHMoKSA8IDMwKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBNYW5pZmVzdFdpbmRvd01pbmltdW1gLCAnTWFuaWZlc3QgV2luZG93IGhhcyBhIG1pbmltdW0gdmFsdWUgb2YgMzAgc2Vjb25kcycpO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW5kIG1vZGlmeSBmaWx0ZXIgY29uZmlndXJhdGlvblxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmlsdGVyQ29uZmlndXJhdGlvbihmaWx0ZXJDb25maWc/OiBGaWx0ZXJDb25maWd1cmF0aW9uKTogQ2ZuT3JpZ2luRW5kcG9pbnQuRmlsdGVyQ29uZmlndXJhdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFmaWx0ZXJDb25maWcpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgaWYgKGZpbHRlckNvbmZpZy5jbGlwU3RhcnRUaW1lICYmIChmaWx0ZXJDb25maWcuc3RhcnQgfHwgZmlsdGVyQ29uZmlnLmVuZCkpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YENsaXBTdGFydFRpbWVDb25mbGljdGAsICdZb3UgY2Fubm90IHNwZWNpZnkgYm90aCBDbGlwU3RhcnRUaW1lIHdpdGggU3RhcnQgb3IgRW5kIGluIGEgRmlsdGVyQ29uZmlndXJhdGlvbi4nKTtcbiAgfVxuXG4gIGlmIChmaWx0ZXJDb25maWcudGltZURlbGF5ICYmIChmaWx0ZXJDb25maWcudGltZURlbGF5LnRvU2Vjb25kcygpIDwgMCB8fCBmaWx0ZXJDb25maWcudGltZURlbGF5LnRvU2Vjb25kcygpID4gMTIwOTYwMCkpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFRpbWVEZWxheVJhbmdlYCwgJ1RpbWUgRGVsYXkgc2V0dGluZyBzaG91bGQgYmUgZGVmaW5lZCBiZXR3ZWVuIDAtMTIwOTYwMCBzZWNvbmRzLicpO1xuICB9XG5cbiAgaWYgKGZpbHRlckNvbmZpZy5zdGFydCAmJiBmaWx0ZXJDb25maWcuZW5kICYmIChmaWx0ZXJDb25maWcuZW5kIDw9IGZpbHRlckNvbmZpZy5zdGFydCkpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEVuZEJlZm9yZVN0YXJ0YCwgJ1RoZSBFbmQgcGFyYW1ldGVyIG5lZWRzIHRvIGJlIGFmdGVyIHRoZSBTdGFydCBwYXJhbWV0ZXIgaW4gYSBGaWx0ZXJDb25maWd1cmF0aW9uLicpO1xuICB9XG5cbiAgY29uc3QgbWFuaWZlc3RGaWx0ZXIgPSBmaWx0ZXJDb25maWcubWFuaWZlc3RGaWx0ZXIgPyBmaWx0ZXJDb25maWcubWFuaWZlc3RGaWx0ZXIubWFwKGZpbHRlciA9PiBmaWx0ZXIuZmlsdGVyU3RyaW5nKS5qb2luKCc7JykgOiB1bmRlZmluZWQ7XG4gIGlmIChtYW5pZmVzdEZpbHRlciAhPSB1bmRlZmluZWQgJiYgKG1hbmlmZXN0RmlsdGVyLmxlbmd0aCA8IDEgfHwgbWFuaWZlc3RGaWx0ZXIubGVuZ3RoID4gMTAyNCkpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE1hbmlmZXN0RmlsdGVyTGVuZ3RoYCwgJ01hbmlmZXN0IGZpbHRlciBuZWVkcyB0byBiZSBiZXR3ZWVuIDEtMTAyNCBjaGFyYWN0ZXJzIGluIGxlbmd0aC4nKTtcbiAgfVxuXG4gIGlmIChmaWx0ZXJDb25maWcubWFuaWZlc3RGaWx0ZXIgJiYgZmlsdGVyQ29uZmlnLm1hbmlmZXN0RmlsdGVyLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBrZXlzID0gZmlsdGVyQ29uZmlnLm1hbmlmZXN0RmlsdGVyLm1hcChmID0+IGYuZmlsdGVyU3RyaW5nLnNwbGl0KCc6JylbMF0pO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5LCBpKSA9PiB7XG4gICAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgIT09IGkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBEdXBsaWNhdGVNYW5pZmVzdEZpbHRlcktleWAsIGBEdXBsaWNhdGUgbWFuaWZlc3QgZmlsdGVyIGtleSAnJHtrZXl9Jy4gVXNlIGEgc2luZ2xlIGZpbHRlciB3aXRoIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgaW5zdGVhZCAoZS5nLiBNYW5pZmVzdEZpbHRlci5udW1lcmljTGlzdCgpIG9yIE1hbmlmZXN0RmlsdGVyLmN1c3RvbSgpKS5gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWFuaWZlc3RGaWx0ZXIsXG4gICAgZHJtU2V0dGluZ3M6IGZpbHRlckNvbmZpZy5kcm1TZXR0aW5ncyA/IGZpbHRlckNvbmZpZy5kcm1TZXR0aW5ncy5maWx0ZXIoKHYsIGksIGEpID0+IGEuaW5kZXhPZih2KSA9PT0gaSkuam9pbignOycpIDogdW5kZWZpbmVkLFxuICAgIGNsaXBTdGFydFRpbWU6IGZpbHRlckNvbmZpZy5jbGlwU3RhcnRUaW1lID8gY29udmVydERhdGVUb1N0cmluZyhmaWx0ZXJDb25maWcuY2xpcFN0YXJ0VGltZSkgOiB1bmRlZmluZWQsXG4gICAgc3RhcnQ6IGZpbHRlckNvbmZpZy5zdGFydCA/IGNvbnZlcnREYXRlVG9TdHJpbmcoZmlsdGVyQ29uZmlnLnN0YXJ0KSA6IHVuZGVmaW5lZCxcbiAgICBlbmQ6IGZpbHRlckNvbmZpZy5lbmQgPyBjb252ZXJ0RGF0ZVRvU3RyaW5nKGZpbHRlckNvbmZpZy5lbmQpIDogdW5kZWZpbmVkLFxuICAgIHRpbWVEZWxheVNlY29uZHM6IGZpbHRlckNvbmZpZy50aW1lRGVsYXk/LnRvU2Vjb25kcygpLFxuICB9O1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHN0YXJ0VGFnIGNvbmZpZ3VyYXRpb25cbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXJ0VGFnKHN0YXJ0VGFnOiBTdGFydFRhZywgbWFuaWZlc3RXaW5kb3c/OiBEdXJhdGlvbiwgc2VnbWVudER1cmF0aW9uPzogRHVyYXRpb24pOiB2b2lkIHtcbiAgY29uc3QgdGltZU9mZnNldCA9IHN0YXJ0VGFnLnRpbWVPZmZzZXQ7XG5cbiAgLy8gR2V0IHNlZ21lbnQgZHVyYXRpb24gKGRlZmF1bHQgaXMgNiBzZWNvbmRzIGlmIG5vdCBzcGVjaWZpZWQpXG4gIGNvbnN0IHNlZ21lbnREdXJhdGlvblNlYyA9IHNlZ21lbnREdXJhdGlvbj8udG9TZWNvbmRzKCkgPz8gNjtcblxuICAvLyBHZXQgbWFuaWZlc3QgZHVyYXRpb24gKGRlZmF1bHQgaXMgNjAgc2Vjb25kcyBpZiBub3Qgc3BlY2lmaWVkKVxuICBjb25zdCBtYW5pZmVzdER1cmF0aW9uU2VjID0gbWFuaWZlc3RXaW5kb3c/LnRvU2Vjb25kcygpID8/IDYwO1xuXG4gIC8vIFZhbGlkYXRlIHBvc2l0aXZlIG9mZnNldCAoZnJvbSBzdGFydClcbiAgaWYgKHRpbWVPZmZzZXQgPiAwKSB7XG4gICAgY29uc3QgbWF4UG9zaXRpdmVPZmZzZXQgPSBtYW5pZmVzdER1cmF0aW9uU2VjIC0gKDMgKiBzZWdtZW50RHVyYXRpb25TZWMpO1xuICAgIGlmICh0aW1lT2Zmc2V0ID49IG1heFBvc2l0aXZlT2Zmc2V0KSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFN0YXJ0VGFnUG9zaXRpdmVPZmZzZXRFeGNlZWRlZGAsIGBTdGFydFRhZyB0aW1lT2Zmc2V0ICgke3RpbWVPZmZzZXR9cykgbXVzdCBiZSBsZXNzIHRoYW4gbWFuaWZlc3QgZHVyYXRpb24gKCR7bWFuaWZlc3REdXJhdGlvblNlY31zKSBtaW51cyAzIHRpbWVzIHNlZ21lbnQgZHVyYXRpb24gKCR7c2VnbWVudER1cmF0aW9uU2VjfXMpLiBNYXhpbXVtIGFsbG93ZWQ6ICR7bWF4UG9zaXRpdmVPZmZzZXR9c2ApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG5lZ2F0aXZlIG9mZnNldCAoZnJvbSBsaXZlIGVkZ2UpXG4gIGlmICh0aW1lT2Zmc2V0IDwgMCkge1xuICAgIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKHRpbWVPZmZzZXQpO1xuICAgIGNvbnN0IG1pbk5lZ2F0aXZlT2Zmc2V0ID0gMyAqIHNlZ21lbnREdXJhdGlvblNlYztcblxuICAgIGlmIChhYnNPZmZzZXQgPD0gbWluTmVnYXRpdmVPZmZzZXQpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgU3RhcnRUYWdOZWdhdGl2ZU9mZnNldFRvb1NtYWxsYCwgYFN0YXJ0VGFnIHRpbWVPZmZzZXQgKCR7dGltZU9mZnNldH1zKSBhYnNvbHV0ZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAzIHRpbWVzIHNlZ21lbnQgZHVyYXRpb24gKCR7c2VnbWVudER1cmF0aW9uU2VjfXMpLiBNaW5pbXVtIGFsbG93ZWQ6IC0ke21pbk5lZ2F0aXZlT2Zmc2V0ICsgMC4wMX1zYCk7XG4gICAgfVxuXG4gICAgaWYgKGFic09mZnNldCA+PSBtYW5pZmVzdER1cmF0aW9uU2VjKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFN0YXJ0VGFnTmVnYXRpdmVPZmZzZXRFeGNlZWRzTWFuaWZlc3RgLCBgU3RhcnRUYWcgdGltZU9mZnNldCAoJHt0aW1lT2Zmc2V0fXMpIGFic29sdXRlIHZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG1hbmlmZXN0IGR1cmF0aW9uICgke21hbmlmZXN0RHVyYXRpb25TZWN9cylgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZCBITFMgbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGxzTWFuaWZlc3RDb25maWd1cmF0aW9uKFxuICBjb25maWc6IEhsc01hbmlmZXN0Q29uZmlndXJhdGlvbixcbiAgc2VnbWVudER1cmF0aW9uPzogRHVyYXRpb24sXG4pOiBDZm5PcmlnaW5FbmRwb2ludC5IbHNNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eSB7XG4gIGlmIChjb25maWcuc3RhcnRUYWcpIHtcbiAgICB2YWxpZGF0ZVN0YXJ0VGFnKGNvbmZpZy5zdGFydFRhZywgY29uZmlnLm1hbmlmZXN0V2luZG93LCBzZWdtZW50RHVyYXRpb24pO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYW5pZmVzdE5hbWU6IGNvbmZpZy5tYW5pZmVzdE5hbWUsXG4gICAgY2hpbGRNYW5pZmVzdE5hbWU6IGNvbmZpZy5jaGlsZE1hbmlmZXN0TmFtZSxcbiAgICBtYW5pZmVzdFdpbmRvd1NlY29uZHM6IGNvbmZpZy5tYW5pZmVzdFdpbmRvdz8udG9TZWNvbmRzKCksXG4gICAgcHJvZ3JhbURhdGVUaW1lSW50ZXJ2YWxTZWNvbmRzOiBjb25maWcucHJvZ3JhbURhdGVUaW1lSW50ZXJ2YWw/LnRvU2Vjb25kcygpLFxuICAgIHNjdGVIbHM6IGNvbmZpZy5zY3RlQWRNYXJrZXJIbHMgPyB7IGFkTWFya2VySGxzOiBjb25maWcuc2N0ZUFkTWFya2VySGxzIH0gOiB1bmRlZmluZWQsXG4gICAgc3RhcnRUYWc6IGNvbmZpZy5zdGFydFRhZyxcbiAgICB1cmxFbmNvZGVDaGlsZE1hbmlmZXN0OiBjb25maWcudXJsRW5jb2RlQ2hpbGRNYW5pZmVzdCxcbiAgICBmaWx0ZXJDb25maWd1cmF0aW9uOiB2YWxpZGF0ZUZpbHRlckNvbmZpZ3VyYXRpb24oY29uZmlnLmZpbHRlckNvbmZpZ3VyYXRpb24pLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIERBU0ggbWFuaWZlc3QgY29uZmlndXJhdGlvblxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRGFzaE1hbmlmZXN0Q29uZmlndXJhdGlvbihcbiAgY29uZmlnOiBEYXNoTWFuaWZlc3RDb25maWd1cmF0aW9uLFxuICBzZWdtZW50PzogU2VnbWVudENvbmZpZ3VyYXRpb24sXG4pOiBDZm5PcmlnaW5FbmRwb2ludC5EYXNoTWFuaWZlc3RDb25maWd1cmF0aW9uUHJvcGVydHkge1xuICBpZiAoY29uZmlnLm1pbkJ1ZmZlclRpbWUgJiYgKGNvbmZpZy5taW5CdWZmZXJUaW1lLnRvU2Vjb25kcygpIDwgMSB8fCBjb25maWcubWluQnVmZmVyVGltZS50b1NlY29uZHMoKSA+IDM2MDApKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBNaW5CdWZmZXJUaW1lUmFuZ2VgLCAnTWluIGJ1ZmZlciB0aW1lIGhhcyBhIHJhbmdlIGZyb20gMSBzZWMuIHRvIDM2MDAgc2VjLicpO1xuICB9XG4gIGlmIChjb25maWcubWluVXBkYXRlUGVyaW9kICYmIChjb25maWcubWluVXBkYXRlUGVyaW9kLnRvU2Vjb25kcygpIDwgMSB8fCBjb25maWcubWluVXBkYXRlUGVyaW9kLnRvU2Vjb25kcygpID4gMzYwMCkpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE1pblVwZGF0ZVBlcmlvZFJhbmdlYCwgJ01pbiB1cGRhdGUgcGVyaW9kIG9wdGlvbiBoYXMgYSByYW5nZSBmcm9tIDEgc2VjLiB0byAzNjAwIHNlYy4nKTtcbiAgfVxuICBpZiAoY29uZmlnLnNjdGVEYXNoQWRNYXJrZXIgJiYgKCFzZWdtZW50Py5zY3RlRmlsdGVyIHx8IHNlZ21lbnQuc2N0ZUZpbHRlcj8ubGVuZ3RoID09PSAwKSkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgU2N0ZUZpbHRlclJlcXVpcmVkYCwgJ1NDVEUgRmlsdGVyIG11c3QgYmUgY29uZmlndXJlZCB3aXRoIERhc2hBZE1hcmtlciBDb25maWd1cmF0aW9uJyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hbmlmZXN0TmFtZTogY29uZmlnLm1hbmlmZXN0TmFtZSxcbiAgICBiYXNlVXJsczogY29uZmlnLmJhc2VVcmxzLFxuICAgIGNvbXBhY3RuZXNzOiBjb25maWcuY29tcGFjdG5lc3MsXG4gICAgZHJtU2lnbmFsaW5nOiBjb25maWcuZHJtU2lnbmFsbGluZyxcbiAgICBkdmJTZXR0aW5nczogY29uZmlnLmR2YlNldHRpbmdzLFxuICAgIHByb2ZpbGVzOiBjb25maWcucHJvZmlsZXMsXG4gICAgcHJvZ3JhbUluZm9ybWF0aW9uOiBjb25maWcucHJvZ3JhbUluZm9ybWF0aW9uLFxuICAgIHN1YnRpdGxlQ29uZmlndXJhdGlvbjogY29uZmlnLnN1YnRpdGxlQ29uZmlndXJhdGlvbixcbiAgICBtYW5pZmVzdFdpbmRvd1NlY29uZHM6IGNvbmZpZy5tYW5pZmVzdFdpbmRvdz8udG9TZWNvbmRzKCksXG4gICAgbWluQnVmZmVyVGltZVNlY29uZHM6IGNvbmZpZy5taW5CdWZmZXJUaW1lPy50b1NlY29uZHMoKSxcbiAgICBtaW5VcGRhdGVQZXJpb2RTZWNvbmRzOiBjb25maWcubWluVXBkYXRlUGVyaW9kPy50b1NlY29uZHMoKSxcbiAgICBzdWdnZXN0ZWRQcmVzZW50YXRpb25EZWxheVNlY29uZHM6IGNvbmZpZy5zdWdnZXN0ZWRQcmVzZW50YXRpb25EZWxheT8udG9TZWNvbmRzKCksXG4gICAgc2VnbWVudFRlbXBsYXRlRm9ybWF0OiBjb25maWcuc2VnbWVudFRlbXBsYXRlRm9ybWF0LFxuICAgIHBlcmlvZFRyaWdnZXJzOiBjb25maWcucGVyaW9kVHJpZ2dlcnMsXG4gICAgc2N0ZURhc2g6IHNlZ21lbnQ/LnNjdGVGaWx0ZXIgPyB7XG4gICAgICBhZE1hcmtlckRhc2g6IGNvbmZpZy5zY3RlRGFzaEFkTWFya2VyLFxuICAgIH0gOiB1bmRlZmluZWQsXG4gICAgdXRjVGltaW5nOiBjb25maWcudXRjVGltaW5nTW9kZSB8fCBjb25maWcudXRjVGltaW5nU291cmNlID8ge1xuICAgICAgdGltaW5nTW9kZTogY29uZmlnLnV0Y1RpbWluZ01vZGUsXG4gICAgICB0aW1pbmdTb3VyY2U6IGNvbmZpZy51dGNUaW1pbmdTb3VyY2UsXG4gICAgfSA6IHVuZGVmaW5lZCxcbiAgICBmaWx0ZXJDb25maWd1cmF0aW9uOiB2YWxpZGF0ZUZpbHRlckNvbmZpZ3VyYXRpb24oY29uZmlnLmZpbHRlckNvbmZpZ3VyYXRpb24pLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIE1TUyBtYW5pZmVzdCBjb25maWd1cmF0aW9uXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gYnVpbGRNc3NNYW5pZmVzdENvbmZpZ3VyYXRpb24oY29uZmlnOiBNc3NNYW5pZmVzdENvbmZpZ3VyYXRpb24pOiBDZm5PcmlnaW5FbmRwb2ludC5Nc3NNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eSB7XG4gIHJldHVybiB7XG4gICAgbWFuaWZlc3ROYW1lOiBjb25maWcubWFuaWZlc3ROYW1lLFxuICAgIG1hbmlmZXN0TGF5b3V0OiBjb25maWcubWFuaWZlc3RMYXlvdXQsXG4gICAgbWFuaWZlc3RXaW5kb3dTZWNvbmRzOiBjb25maWcubWFuaWZlc3RXaW5kb3c/LnRvU2Vjb25kcygpLFxuICAgIGZpbHRlckNvbmZpZ3VyYXRpb246IHZhbGlkYXRlRmlsdGVyQ29uZmlndXJhdGlvbihjb25maWcuZmlsdGVyQ29uZmlndXJhdGlvbiksXG4gIH07XG59XG5cbi8qKlxuICogSExTIE1hbmlmZXN0IGltcGxlbWVudGF0aW9uXG4gKi9cbmNsYXNzIEhsc01hbmlmZXN0IGV4dGVuZHMgTWFuaWZlc3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogSGxzTWFuaWZlc3RDb25maWd1cmF0aW9uKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZChjb250ZXh0OiBNYW5pZmVzdEJpbmRDb250ZXh0KTogdm9pZCB7XG4gICAgdmFsaWRhdGVNYW5pZmVzdENvbmZpZ3VyYXRpb24odGhpcy5jb25maWcpO1xuICAgIGNvbnRleHQuaGxzTWFuaWZlc3RzLnB1c2goYnVpbGRIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb24odGhpcy5jb25maWcsIGNvbnRleHQuc2VnbWVudD8uc2VnbWVudER1cmF0aW9uKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb3cgTGF0ZW5jeSBITFMgTWFuaWZlc3QgaW1wbGVtZW50YXRpb25cbiAqL1xuY2xhc3MgTG93TGF0ZW5jeUhsc01hbmlmZXN0IGV4dGVuZHMgTWFuaWZlc3Qge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogTG93TGF0ZW5jeUhsc01hbmlmZXN0Q29uZmlndXJhdGlvbikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoY29udGV4dDogTWFuaWZlc3RCaW5kQ29udGV4dCk6IHZvaWQge1xuICAgIHZhbGlkYXRlTWFuaWZlc3RDb25maWd1cmF0aW9uKHRoaXMuY29uZmlnKTtcbiAgICBjb250ZXh0LmxsSGxzTWFuaWZlc3RzLnB1c2goYnVpbGRIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb24odGhpcy5jb25maWcsIGNvbnRleHQuc2VnbWVudD8uc2VnbWVudER1cmF0aW9uKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEQVNIIE1hbmlmZXN0IGltcGxlbWVudGF0aW9uXG4gKi9cbmNsYXNzIERhc2hNYW5pZmVzdCBleHRlbmRzIE1hbmlmZXN0IHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb25maWc6IERhc2hNYW5pZmVzdENvbmZpZ3VyYXRpb24pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIF9iaW5kKGNvbnRleHQ6IE1hbmlmZXN0QmluZENvbnRleHQpOiB2b2lkIHtcbiAgICB2YWxpZGF0ZU1hbmlmZXN0Q29uZmlndXJhdGlvbih0aGlzLmNvbmZpZyk7XG5cbiAgICBpZiAodGhpcy5jb25maWcudXRjVGltaW5nTW9kZSA9PT0gRGFzaFV0Y1RpbWluZ01vZGUuVVRDX0RJUkVDVCAmJiB0aGlzLmNvbmZpZy51dGNUaW1pbmdTb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgVXRjRGlyZWN0VGltaW5nU291cmNlYCwgJ1VUQyBEaXJlY3QgY29uZmlndXJlZCB3aXRoIGEgdGltaW5nIHNvdXJjZSwgZW5zdXJlIHRpbWluZyBzb3VyY2UgaXMgdW5kZWZpbmVkIHRvIHVzZSBVVEMgRGlyZWN0LicpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGFzaE1hbmlmZXN0cy5wdXNoKGJ1aWxkRGFzaE1hbmlmZXN0Q29uZmlndXJhdGlvbih0aGlzLmNvbmZpZywgY29udGV4dC5zZWdtZW50KSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNU1MgTWFuaWZlc3QgaW1wbGVtZW50YXRpb25cbiAqL1xuY2xhc3MgTXNzTWFuaWZlc3QgZXh0ZW5kcyBNYW5pZmVzdCB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBNc3NNYW5pZmVzdENvbmZpZ3VyYXRpb24pIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIF9iaW5kKGNvbnRleHQ6IE1hbmlmZXN0QmluZENvbnRleHQpOiB2b2lkIHtcbiAgICB2YWxpZGF0ZU1hbmlmZXN0Q29uZmlndXJhdGlvbih0aGlzLmNvbmZpZyk7XG4gICAgY29udGV4dC5tc3NNYW5pZmVzdHMucHVzaChidWlsZE1zc01hbmlmZXN0Q29uZmlndXJhdGlvbih0aGlzLmNvbmZpZykpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHR5cGUgb2YgY29udGFpbmVyIHRvIGF0dGFjaCB0byB0aGlzIG9yaWdpbiBlbmRwb2ludC5cbiAqIEEgY29udGFpbmVyIHR5cGUgaXMgYSBmaWxlIGZvcm1hdCB0aGF0IGVuY2Fwc3VsYXRlcyBvbmUgb3IgbW9yZSBtZWRpYSBzdHJlYW1zLCBzdWNoIGFzIGF1ZGlvIGFuZCB2aWRlbywgaW50byBhIHNpbmdsZSBmaWxlLiBZb3UgY2FuJ3QgY2hhbmdlIHRoZSBjb250YWluZXIgdHlwZSBhZnRlciB5b3UgY3JlYXRlIHRoZSBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGVudW0gQ29udGFpbmVyVHlwZSB7XG4gIC8qKlxuICAgKiBUUyBDb250YWluZXIgVHlwZVxuICAgKi9cbiAgVFM9J1RTJyxcbiAgLyoqXG4gICAqIENNQUYgQ29udGFpbmVyIFR5cGVcbiAgICovXG4gIENNQUY9J0NNQUYnLFxuICAvKipcbiAgICogSVNNIENvbnRhaW5lciBUeXBlIChNaWNyb3NvZnQgU21vb3RoIFN0cmVhbWluZylcbiAgICovXG4gIElTTT0nSVNNJyxcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIG1ldGhvZHMgZm9yIENNQUYgY29udGFpbmVyIHR5cGUuXG4gKi9cbmV4cG9ydCBlbnVtIENtYWZFbmNyeXB0aW9uTWV0aG9kIHtcbiAgLyoqXG4gICAqIENvbW1vbiBFbmNyeXB0aW9uIFNjaGVtZSAoQ0VOQykgLSBjb21wYXRpYmxlIHdpdGggUGxheVJlYWR5LCBXaWRldmluZSwgYW5kIElyZGV0byBEUk0gc3lzdGVtcy5cbiAgICovXG4gIENFTkMgPSAnQ0VOQycsXG4gIC8qKlxuICAgKiBDb21tb24gRW5jcnlwdGlvbiBTY2hlbWUgd2l0aCBDQkNTIG1vZGUgLSBjb21wYXRpYmxlIHdpdGggUGxheVJlYWR5LCBXaWRldmluZSwgYW5kIEZhaXJQbGF5IERSTSBzeXN0ZW1zLlxuICAgKi9cbiAgQ0JDUyA9ICdDQkNTJyxcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIG1ldGhvZHMgZm9yIFRTIGNvbnRhaW5lciB0eXBlLlxuICovXG5leHBvcnQgZW51bSBUc0VuY3J5cHRpb25NZXRob2Qge1xuICAvKipcbiAgICogQUVTLTEyOCBlbmNyeXB0aW9uIC0gcmVxdWlyZXMgQ2xlYXIgS2V5IEFFUyAxMjggRFJNIHN5c3RlbS5cbiAgICovXG4gIEFFU18xMjggPSAnQUVTXzEyOCcsXG4gIC8qKlxuICAgKiBTYW1wbGUtbGV2ZWwgQUVTIGVuY3J5cHRpb24gLSByZXF1aXJlcyBGYWlyUGxheSBEUk0gc3lzdGVtLlxuICAgKi9cbiAgU0FNUExFX0FFUyA9ICdTQU1QTEVfQUVTJyxcbn1cblxuLyoqXG4gKiBBIGNvbGxlY3Rpb24gb2YgYXVkaW8gZW5jcnlwdGlvbiBwcmVzZXRzLlxuICovXG5leHBvcnQgZW51bSBQcmVzZXRTcGVrZTIwQXVkaW8ge1xuICAvKipcbiAgICogVXNlIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgYXVkaW8gdHJhY2tzIGluIHlvdXIgc3RyZWFtLlxuICAgKi9cbiAgUFJFU0VUX0FVRElPXzE9J1BSRVNFVF9BVURJT18xJyxcbiAgLyoqXG4gICAqIFVzZSBvbmUgY29udGVudCBrZXkgdG8gZW5jcnlwdCBhbGwgb2YgdGhlIHN0ZXJlbyBhdWRpbyB0cmFja3MgYW5kIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgbXVsdGljaGFubmVsIGF1ZGlvIHRyYWNrcy5cbiAgICovXG4gIFBSRVNFVF9BVURJT18yPSdQUkVTRVRfQVVESU9fMicsXG4gIC8qKlxuICAgKiBVc2Ugb25lIGNvbnRlbnQga2V5IHRvIGVuY3J5cHQgYWxsIG9mIHRoZSBzdGVyZW8gYXVkaW8gdHJhY2tzLCBvbmUgY29udGVudCBrZXkgdG8gZW5jcnlwdCBhbGwgb2YgdGhlIG11bHRpY2hhbm5lbCBhdWRpbyB0cmFja3Mgd2l0aCAzIHRvIDYgY2hhbm5lbHMsXG4gICAqIGFuZCBvbmUgY29udGVudCBrZXkgdG8gZW5jcnlwdCBhbGwgb2YgdGhlIG11bHRpY2hhbm5lbCBhdWRpbyB0cmFja3Mgd2l0aCBtb3JlIHRoYW4gNiBjaGFubmVscy5cbiAgICovXG4gIFBSRVNFVF9BVURJT18zPSdQUkVTRVRfQVVESU9fMycsXG4gIC8qKlxuICAgKiBVc2UgdGhlIHNhbWUgY29udGVudCBrZXkgZm9yIGFsbCBvZiB0aGUgYXVkaW8gYW5kIHZpZGVvIHRyYWNrcyBpbiB5b3VyIHN0cmVhbS5cbiAgICovXG4gIFNIQVJFRD0nU0hBUkVEJyxcbiAgLyoqXG4gICAqIERvbid0IGVuY3J5cHQgYW55IG9mIHRoZSBhdWRpbyB0cmFja3MgaW4geW91ciBzdHJlYW0uXG4gICAqL1xuICBVTkVOQ1JZUFRFRD0nVU5FTkNSWVBURUQnLFxufVxuXG4vKipcbiAqIFRoZSBTUEVLRSBWZXJzaW9uIDIuMCBwcmVzZXQgdmlkZW8gYXNzb2NpYXRlZCB3aXRoIHRoZSBlbmNyeXB0aW9uIGNvbnRyYWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAqXG4gKiBBIGNvbGxlY3Rpb24gb2YgdmlkZW8gZW5jcnlwdGlvbiBwcmVzZXRzLlxuICovXG5leHBvcnQgZW51bSBQcmVzZXRTcGVrZTIwVmlkZW8ge1xuICAvKipcbiAgICogVXNlIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgdmlkZW8gdHJhY2tzIGluIHlvdXIgc3RyZWFtLlxuICAgKi9cbiAgUFJFU0VUX1ZJREVPXzE9J1BSRVNFVF9WSURFT18xJyxcbiAgLyoqXG4gICAqIFVzZSBvbmUgY29udGVudCBrZXkgdG8gZW5jcnlwdCBhbGwgb2YgdGhlIFNEIHZpZGVvIHRyYWNrcyBhbmQgb25lIGNvbnRlbnQga2V5IGZvciBhbGwgSEQgYW5kIGhpZ2hlciByZXNvbHV0aW9ucyB2aWRlbyB0cmFja3MuXG4gICAqL1xuICBQUkVTRVRfVklERU9fMj0nUFJFU0VUX1ZJREVPXzInLFxuICAvKipcbiAgICogVXNlIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgU0QgdmlkZW8gdHJhY2tzLCBvbmUgY29udGVudCBrZXkgZm9yIEhEIHZpZGVvIHRyYWNrcyBhbmQgb25lIGNvbnRlbnQga2V5IGZvciBhbGwgVUhEIHZpZGVvIHRyYWNrcy5cbiAgICovXG4gIFBSRVNFVF9WSURFT18zPSdQUkVTRVRfVklERU9fMycsXG4gIC8qKlxuICAgKiBVc2Ugb25lIGNvbnRlbnQga2V5IHRvIGVuY3J5cHQgYWxsIG9mIHRoZSBTRCB2aWRlbyB0cmFja3MsIG9uZSBjb250ZW50IGtleSBmb3IgSEQgdmlkZW8gdHJhY2tzLFxuICAgKiBvbmUgY29udGVudCBrZXkgZm9yIGFsbCBVSEQxIHZpZGVvIHRyYWNrcyBhbmQgb25lIGNvbnRlbnQga2V5IGZvciBhbGwgVUhEMiB2aWRlbyB0cmFja3MuXG4gICAqL1xuICBQUkVTRVRfVklERU9fND0nUFJFU0VUX1ZJREVPXzQnLFxuICAvKipcbiAgICogVXNlIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgU0QgdmlkZW8gdHJhY2tzLCBvbmUgY29udGVudCBrZXkgZm9yIEhEMSB2aWRlbyB0cmFja3MsIG9uZSBjb250ZW50IGtleSBmb3IgSEQyIHZpZGVvIHRyYWNrcyxcbiAgICogb25lIGNvbnRlbnQga2V5IGZvciBhbGwgVUhEMSB2aWRlbyB0cmFja3MgYW5kIG9uZSBjb250ZW50IGtleSBmb3IgYWxsIFVIRDIgdmlkZW8gdHJhY2tzLlxuICAgKi9cbiAgUFJFU0VUX1ZJREVPXzU9J1BSRVNFVF9WSURFT181JyxcbiAgLyoqXG4gICAqIFVzZSBvbmUgY29udGVudCBrZXkgdG8gZW5jcnlwdCBhbGwgb2YgdGhlIFNEIHZpZGVvIHRyYWNrcywgb25lIGNvbnRlbnQga2V5IGZvciBIRDEgdmlkZW8gdHJhY2tzLCBvbmUgY29udGVudCBrZXkgZm9yIEhEMiB2aWRlbyB0cmFja3NcbiAgICogYW5kIG9uZSBjb250ZW50IGtleSBmb3IgYWxsIFVIRCB2aWRlbyB0cmFja3MuXG4gICAqL1xuICBQUkVTRVRfVklERU9fNj0nUFJFU0VUX1ZJREVPXzYnLFxuICAvKipcbiAgICogVXNlIG9uZSBjb250ZW50IGtleSB0byBlbmNyeXB0IGFsbCBvZiB0aGUgU0QrSEQxIHZpZGVvIHRyYWNrcywgb25lIGNvbnRlbnQga2V5IGZvciBIRDIgdmlkZW8gdHJhY2tzIGFuZCBvbmUgY29udGVudCBrZXkgZm9yIGFsbCBVSEQgdmlkZW8gdHJhY2tzLlxuICAgKi9cbiAgUFJFU0VUX1ZJREVPXzc9J1BSRVNFVF9WSURFT183JyxcbiAgLyoqXG4gICAqIFVzZSBvbmUgY29udGVudCBrZXkgdG8gZW5jcnlwdCBhbGwgb2YgdGhlIFNEK0hEMSB2aWRlbyB0cmFja3MsIG9uZSBjb250ZW50IGtleSBmb3IgSEQyIHZpZGVvIHRyYWNrcywgb25lIGNvbnRlbnQga2V5IGZvciBhbGwgVUhEMVxuICAgKiB2aWRlbyB0cmFja3MgYW5kIG9uZSBjb250ZW50IGtleSBmb3IgYWxsIFVIRDIgdmlkZW8gdHJhY2tzLlxuICAgKi9cbiAgUFJFU0VUX1ZJREVPXzg9J1BSRVNFVF9WSURFT184JyxcbiAgLyoqXG4gICAqIFVzZSB0aGUgc2FtZSBjb250ZW50IGtleSBmb3IgYWxsIG9mIHRoZSB2aWRlbyBhbmQgYXVkaW8gdHJhY2tzIGluIHlvdXIgc3RyZWFtLlxuICAgKi9cbiAgU0hBUkVEPSdTSEFSRUQnLFxuICAvKipcbiAgICogRG9uJ3QgZW5jcnlwdCBhbnkgb2YgdGhlIHZpZGVvIHRyYWNrcyBpbiB5b3VyIHN0cmVhbS5cbiAgICovXG4gIFVORU5DUllQVEVEPSdVTkVOQ1JZUFRFRCcsXG59XG5cbi8qKlxuICogRW5kcG9pbnQgZXJyb3IgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICovXG5leHBvcnQgZW51bSBFbmRwb2ludEVycm9yQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbWFuaWZlc3Qgc3RhbGxlZCBhbmQgdGhlcmUgYXJlIG5vIG5ldyBzZWdtZW50cyBvciBwYXJ0cy5cbiAgICovXG4gIFNUQUxFX01BTklGRVNUPSdTVEFMRV9NQU5JRkVTVCcsXG4gIC8qKlxuICAgKiBUaGVyZSBpcyBhIGdhcCBpbiB0aGUgbWFuaWZlc3QuXG4gICAqL1xuICBJTkNPTVBMRVRFX01BTklGRVNUPSdJTkNPTVBMRVRFX01BTklGRVNUJyxcbiAgLyoqXG4gICAqIEtleSByb3RhdGlvbiBpcyBlbmFibGVkIGJ1dCB3ZSdyZSB1bmFibGUgdG8gZmV0Y2ggdGhlIGtleSBmb3IgdGhlIGN1cnJlbnQga2V5IHBlcmlvZC5cbiAgICovXG4gIE1JU1NJTkdfRFJNX0tFWT0nTUlTU0lOR19EUk1fS0VZJyxcbiAgLyoqXG4gICAqIFRoZSBzZWdtZW50cyB3aGljaCBjb250YWluIHNsYXRlIGNvbnRlbnQgYXJlIGNvbnNpZGVyZWQgdG8gYmUgbWlzc2luZyBjb250ZW50LlxuICAgKi9cbiAgU0xBVEVfSU5QVVQ9J1NMQVRFX0lOUFVUJyxcbn1cblxuLyoqXG4gKiBTQ1RFLTM1IG1lc3NhZ2UgdHlwZSBvcHRpb25zIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGVudW0gU2N0ZU1lc3NhZ2VUeXBlIHtcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgU1BMSUNFX0lOU0VSVC5cbiAgICovXG4gIFNQTElDRV9JTlNFUlQ9J1NQTElDRV9JTlNFUlQnLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBCUkVBSy5cbiAgICovXG4gIEJSRUFLPSdCUkVBSycsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIFBST1ZJREVSX0FEVkVSVElTRU1FTlQuXG4gICAqL1xuICBQUk9WSURFUl9BRFZFUlRJU0VNRU5UPSdQUk9WSURFUl9BRFZFUlRJU0VNRU5UJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgRElTVFJJQlVUT1JfQURWRVJUSVNFTUVOVC5cbiAgICovXG4gIERJU1RSSUJVVE9SX0FEVkVSVElTRU1FTlQ9J0RJU1RSSUJVVE9SX0FEVkVSVElTRU1FTlQnLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBQUk9WSURFUl9QTEFDRU1FTlRfT1BQT1JUVU5JVFkuXG4gICAqL1xuICBQUk9WSURFUl9QTEFDRU1FTlRfT1BQT1JUVU5JVFk9J1BST1ZJREVSX1BMQUNFTUVOVF9PUFBPUlRVTklUWScsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIERJU1RSSUJVVE9SX1BMQUNFTUVOVF9PUFBPUlRVTklUWS5cbiAgICovXG4gIERJU1RSSUJVVE9SX1BMQUNFTUVOVF9PUFBPUlRVTklUWT0nRElTVFJJQlVUT1JfUExBQ0VNRU5UX09QUE9SVFVOSVRZJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgUFJPVklERVJfT1ZFUkxBWV9QTEFDRU1FTlRfT1BQT1JUVU5JVFkuXG4gICAqL1xuICBQUk9WSURFUl9PVkVSTEFZX1BMQUNFTUVOVF9PUFBPUlRVTklUWT0nUFJPVklERVJfT1ZFUkxBWV9QTEFDRU1FTlRfT1BQT1JUVU5JVFknLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBESVNUUklCVVRPUl9PVkVSTEFZX1BMQUNFTUVOVF9PUFBPUlRVTklUWS5cbiAgICovXG4gIERJU1RSSUJVVE9SX09WRVJMQVlfUExBQ0VNRU5UX09QUE9SVFVOSVRZPSdESVNUUklCVVRPUl9PVkVSTEFZX1BMQUNFTUVOVF9PUFBPUlRVTklUWScsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIFBST0dSQU0uXG4gICAqL1xuICBQUk9HUkFNPSdQUk9HUkFNJyxcbn1cblxuLyoqXG4gKiBDb250cm9scyB3aGV0aGVyIFNDVEUtMzUgbWVzc2FnZXMgYXJlIGluY2x1ZGVkIGluIHNlZ21lbnQgZmlsZXMuXG4gKi9cbmV4cG9ydCBlbnVtIFNjdGVJblNlZ21lbnRzIHtcbiAgLyoqXG4gICAqIFNDVEUtMzUgbWVzc2FnZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiBzZWdtZW50cy5cbiAgICovXG4gIE5PTkUgPSAnTk9ORScsXG4gIC8qKlxuICAgKiBTQ1RFLTM1IG1lc3NhZ2VzIGFyZSBlbWJlZGRlZCBpbiBzZWdtZW50IGRhdGEuXG4gICAqXG4gICAqIEZvciBEQVNIIG1hbmlmZXN0cywgd2hlbiBzZXQgdG8gQUxMLCBhbiBJbmJhbmRFdmVudFN0cmVhbSB0YWcgc2lnbmFsc1xuICAgKiB0aGF0IFNDVEUgbWVzc2FnZXMgYXJlIHByZXNlbnQgaW4gc2VnbWVudHMuXG4gICAqL1xuICBBTEwgPSAnQUxMJyxcbn1cblxuLyoqXG4gKiBPcmlnaW4gRW5kcG9pbnQgaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU9yaWdpbkVuZHBvaW50IGV4dGVuZHMgSVJlc291cmNlLCBJT3JpZ2luRW5kcG9pbnRSZWYge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNoYW5uZWwgZ3JvdXAgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW4gZW5kcG9pbnQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbEdyb3VwTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY2hhbm5lbCBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luIGVuZHBvaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbkVuZHBvaW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luRW5kcG9pbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRhdGUgYW5kIHRpbWUgdGhlIG9yaWdpbiBlbmRwb2ludCB3YXMgY3JlYXRlZC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGF0ZSBhbmQgdGltZSB0aGUgb3JpZ2luIGVuZHBvaW50IHdhcyBtb2RpZmllZC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kaWZpZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEhMUyBtYW5pZmVzdCBVUkxzIGZvciB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBobHNNYW5pZmVzdFVybHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIExvdyBMYXRlbmN5IEhMUyBtYW5pZmVzdCBVUkxzIGZvciB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBsb3dMYXRlbmN5SGxzTWFuaWZlc3RVcmxzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBEQVNIIG1hbmlmZXN0IFVSTHMgZm9yIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRhc2hNYW5pZmVzdFVybHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIE1TUyBtYW5pZmVzdCBVUkxzIGZvciB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBtc3NNYW5pZmVzdFVybHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJlIG9yaWdpbiBlbmRwb2ludCBwb2xpY3kuXG4gICAqXG4gICAqIFlvdSBjYW4gb25seSBhZGQgMSBPcmlnaW5FbmRwb2ludFBvbGljeSB0byBhbiBPcmlnaW5FbmRwb2ludC5cbiAgICogSWYgeW91IGhhdmUgYWxyZWFkeSBkZWZpbmVkIG9uZSwgaXQgd2lsbCBhcHBlbmQgdG8gdGhlIHBvbGljeSBhbHJlYWR5IGNyZWF0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBzdGF0ZW1lbnQgLSBUaGUgcG9saWN5IHN0YXRlbWVudCB0byBhZGRcbiAgICovXG4gIGFkZFRvUmVzb3VyY2VQb2xpY3koc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQpOiBBZGRUb1Jlc291cmNlUG9saWN5UmVzdWx0O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBDbG91ZFdhdGNoIG1ldHJpYy5cbiAgICpcbiAgICogQHBhcmFtIG1ldHJpY05hbWUgbmFtZSBvZiB0aGUgbWV0cmljLlxuICAgKiBAcGFyYW0gcHJvcHMgbWV0cmljIG9wdGlvbnMuXG4gICAqL1xuICBtZXRyaWMobWV0cmljTmFtZTogc3RyaW5nLCBwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWM7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgTWV0cmljIGZvciBJbmdyZXNzIEJ5dGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljSW5ncmVzc0J5dGVzKG9wdGlvbnM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE1ldHJpYyBmb3IgRWdyZXNzIEJ5dGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljRWdyZXNzQnl0ZXMocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE1ldHJpYyBmb3IgSW5ncmVzcyByZXNwb25zZSB0aW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0luZ3Jlc3NSZXNwb25zZVRpbWUocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE1ldHJpYyBmb3IgRWdyZXNzIFJlc3BvbnNlIHRpbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdmVyYWdlIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljRWdyZXNzUmVzcG9uc2VUaW1lKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJucyBNZXRyaWMgZm9yIEVncmVzcyBSZXF1ZXN0IENvdW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgbWV0cmljRWdyZXNzUmVxdWVzdENvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYztcblxuICAvKipcbiAgICogUmV0dXJucyBNZXRyaWMgZm9yIEluZ3Jlc3MgUmVxdWVzdCBDb3VudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIG1ldHJpY0luZ3Jlc3NSZXF1ZXN0Q291bnQocHJvcHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljO1xufVxuXG4vKipcbiAqIERSTSBzZXR0aW5ncyBrZXlzIGZvciBtYW5pZmVzdCBmaWx0ZXIgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGVudW0gRHJtU2V0dGluZ3NLZXkge1xuICAvKipcbiAgICogRXhjbHVkZSBFWFQtWC1TRVNTSU9OLUtFWSB0YWdzIGZyb20gSExTIGFuZCBMTC1ITFMgbXVsdGl2YXJpYW50IHBsYXlsaXN0cy5cbiAgICpcbiAgICogVGhpcyBjYW4gaW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGggbGVnYWN5IEhMUyBjbGllbnRzIHRoYXQgaGF2ZSBpc3N1ZXNcbiAgICogcHJvY2Vzc2luZyBzZXNzaW9uIGtleXMsIG9yIHByb3ZpZGUgbW9yZSBncmFudWxhciBhY2Nlc3MgY29udHJvbCB3aGVuXG4gICAqIHVzaW5nIG1hbmlmZXN0IGZpbHRlcmluZy5cbiAgICovXG4gIEVYQ0xVREVfU0VTU0lPTl9LRVlTID0gJ2V4Y2x1ZGVfc2Vzc2lvbl9rZXlzJyxcbn1cblxuLyoqXG4gKiBGaWx0ZXIgY29uZmlndXJhdGlvbiBpbmNsdWRlcyBzZXR0aW5ncyBmb3IgbWFuaWZlc3QgZmlsdGVyaW5nLCBzdGFydCBhbmQgZW5kIHRpbWVzLCBhbmQgdGltZSBkZWxheSB0aGF0IGFwcGx5IHRvIGFsbCBvZiB5b3VyIGVncmVzcyByZXF1ZXN0cyBmb3IgdGhpcyBtYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgY2xpcCBzdGFydCB0aW1lIGZvciBhbGwgb2YgeW91ciBtYW5pZmVzdCBlZ3Jlc3MgcmVxdWVzdHMuXG4gICAqIFdoZW4geW91IGluY2x1ZGUgY2xpcCBzdGFydCB0aW1lLCBub3RlIHRoYXQgeW91IGNhbm5vdCB1c2UgY2xpcCBzdGFydCB0aW1lIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoaXMgbWFuaWZlc3QncyBlbmRwb2ludCBVUkwuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBVVEMgdGltZXN0YW1wLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGNsaXAgc3RhcnQgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgY2xpcFN0YXJ0VGltZT86IERhdGU7XG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHNwZWNpZnkgdGhlIGVuZCB0aW1lIGZvciBhbGwgb2YgeW91ciBtYW5pZmVzdCBlZ3Jlc3MgcmVxdWVzdHMuXG4gICAqIFdoZW4geW91IGluY2x1ZGUgZW5kIHRpbWUsIG5vdGUgdGhhdCB5b3UgY2Fubm90IHVzZSBlbmQgdGltZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGlzIG1hbmlmZXN0J3MgZW5kcG9pbnQgVVJMLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgYmUgY29udmVydGVkIHRvIGEgVVRDIHRpbWVzdGFtcC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBlbmQgdGltZVxuICAgKi9cbiAgcmVhZG9ubHkgZW5kPzogRGF0ZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgc3RhcnQgdGltZSBmb3IgYWxsIG9mIHlvdXIgbWFuaWZlc3QgZWdyZXNzIHJlcXVlc3RzLlxuICAgKiBXaGVuIHlvdSBpbmNsdWRlIHN0YXJ0IHRpbWUsIG5vdGUgdGhhdCB5b3UgY2Fubm90IHVzZSBzdGFydCB0aW1lIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoaXMgbWFuaWZlc3QncyBlbmRwb2ludCBVUkwuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBVVEMgdGltZXN0YW1wLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHN0YXJ0IHRpbWVcbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0PzogRGF0ZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgc3BlY2lmeSBvbmUgb3IgbW9yZSBtYW5pZmVzdCBmaWx0ZXJzIGZvciBhbGwgb2YgeW91ciBtYW5pZmVzdCBlZ3Jlc3MgcmVxdWVzdHMuXG4gICAqIFdoZW4geW91IGluY2x1ZGUgYSBtYW5pZmVzdCBmaWx0ZXIsIG5vdGUgdGhhdCB5b3UgY2Fubm90IHVzZSBhbiBpZGVudGljYWwgbWFuaWZlc3QgZmlsdGVyIHF1ZXJ5IHBhcmFtZXRlciBmb3IgdGhpcyBtYW5pZmVzdCdzIGVuZHBvaW50IFVSTC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBtYW5pZmVzdCBmaWx0ZXJzXG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdEZpbHRlcj86IE1hbmlmZXN0RmlsdGVyW107XG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IHNwZWNpZnkgdGhlIHRpbWUgZGVsYXkgZm9yIGFsbCBvZiB5b3VyIG1hbmlmZXN0IGVncmVzcyByZXF1ZXN0cy4gRW50ZXIgYSB2YWx1ZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiB5b3VyIGVuZHBvaW50J3Mgc3RhcnRvdmVyIHdpbmRvdy5cbiAgICogV2hlbiB5b3UgaW5jbHVkZSB0aW1lIGRlbGF5LCBub3RlIHRoYXQgeW91IGNhbm5vdCB1c2UgdGltZSBkZWxheSBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGlzIG1hbmlmZXN0J3MgZW5kcG9pbnQgVVJMLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRpbWUgZGVsYXlcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVEZWxheT86IER1cmF0aW9uO1xuICAvKipcbiAgICogRFJNIHNldHRpbmdzIGZvciBtYW5pZmVzdCBlZ3Jlc3MgcmVxdWVzdHMuXG4gICAqXG4gICAqIFdoZW4geW91IGluY2x1ZGUgYSBEUk0gc2V0dGluZywgbm90ZSB0aGF0IHlvdSBjYW5ub3QgdXNlIGFuIGlkZW50aWNhbFxuICAgKiBEUk0gc2V0dGluZyBxdWVyeSBwYXJhbWV0ZXIgZm9yIHRoaXMgbWFuaWZlc3QncyBlbmRwb2ludCBVUkwuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gRFJNIHNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBkcm1TZXR0aW5ncz86IERybVNldHRpbmdzS2V5W107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSBTdGFydFRhZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFydFRhZ09wdGlvbnMge1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgdmFsdWUgZm9yIFBSRUNJU0Ugd2l0aGluIHlvdXIgRVhULVgtU1RBUlQgdGFnLlxuICAgKlxuICAgKiBMZWF2ZSBibGFuaywgb3IgY2hvb3NlIGZhbHNlLCB0byB1c2UgdGhlIGRlZmF1bHQgdmFsdWUgTk8uIENob29zZSB0cnVlIHRvIHVzZSB0aGUgdmFsdWUgWUVTLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlY2lzZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBjcmVhdGluZyBFWFQtWC1TVEFSVCB0YWdzIGluIEhMUyBwbGF5bGlzdHMuXG4gKlxuICogVGhlIEVYVC1YLVNUQVJUIHRhZyBpbmRpY2F0ZXMgYSBwcmVmZXJyZWQgcG9pbnQgYXQgd2hpY2ggdG8gc3RhcnQgcGxheWluZyBhIHBsYXlsaXN0LlxuICovXG5leHBvcnQgY2xhc3MgU3RhcnRUYWcge1xuICAvKipcbiAgICogQ3JlYXRlIGEgc3RhcnQgdGFnIHdpdGggYSB0aW1lIG9mZnNldC5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVPZmZzZXQgVGhlIHRpbWUgb2Zmc2V0IGluIHNlY29uZHMuIENhbiBiZSBwb3NpdGl2ZSAoZm9yd2FyZCBmcm9tIHN0YXJ0KSBvciBuZWdhdGl2ZSAoYmFjayBmcm9tIGxpdmUgZWRnZSkuXG4gICAqICAgLSBJZiBwb3NpdGl2ZTogbXVzdCBiZSBsZXNzIHRoYW4gKG1hbmlmZXN0IGR1cmF0aW9uIC0gMyDDlyBzZWdtZW50IGR1cmF0aW9uKVxuICAgKiAgIC0gSWYgbmVnYXRpdmU6IGFic29sdXRlIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICgzIMOXIHNlZ21lbnQgZHVyYXRpb24pIGFuZCBsZXNzIHRoYW4gbWFuaWZlc3QgZHVyYXRpb25cbiAgICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHRpbWVPZmZzZXQ6IG51bWJlciwgb3B0aW9ucz86IFN0YXJ0VGFnT3B0aW9ucyk6IFN0YXJ0VGFnIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGltZU9mZnNldCxcbiAgICAgIHByZWNpc2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5wcmVjaXNlICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLnByZWNpc2UgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzdGFydCB0YWcgd2l0aCBwcmVjaXNlIHBvc2l0aW9uaW5nIGVuYWJsZWQgKFBSRUNJU0U9WUVTKS5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVPZmZzZXQgVGhlIHRpbWUgb2Zmc2V0IGluIHNlY29uZHMgKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB3aXRoUHJlY2lzZSh0aW1lT2Zmc2V0OiBudW1iZXIpOiBTdGFydFRhZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpbWVPZmZzZXQsXG4gICAgICBwcmVjaXNlOiB0cnVlLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBFWFQtWC1TVEFSVCB0YWcgaW4gSExTIHBsYXlsaXN0cy5cbiAqXG4gKiBVc2UgdGhlIGBTdGFydFRhZ2AgaGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBpbnN0YW5jZXMgd2l0aCB2YWxpZGF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0VGFnIHtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIHZhbHVlIGZvciBQUkVDSVNFIHdpdGhpbiB5b3VyIEVYVC1YLVNUQVJUIHRhZy5cbiAgICpcbiAgICogTGVhdmUgYmxhbmssIG9yIGNob29zZSBmYWxzZSwgdG8gdXNlIHRoZSBkZWZhdWx0IHZhbHVlIE5PLiBDaG9vc2UgdHJ1ZSB0byB1c2UgdGhlIHZhbHVlIFlFUy5cbiAgICovXG4gIHJlYWRvbmx5IHByZWNpc2U/OiBib29sZWFuO1xuICAvKipcbiAgICogU3BlY2lmeSB0aGUgdmFsdWUgZm9yIFRJTUUtT0ZGU0VUIHdpdGhpbiB5b3VyIEVYVC1YLVNUQVJUIHRhZy5cbiAgICpcbiAgICogRW50ZXIgYSBzaWduZWQgZmxvYXRpbmcgcG9pbnQgdmFsdWUgd2hpY2gsIGlmIHBvc2l0aXZlLCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgY29uZmlndXJlZFxuICAgKiBtYW5pZmVzdCBkdXJhdGlvbiBtaW51cyB0aHJlZSB0aW1lcyB0aGUgY29uZmlndXJlZCBzZWdtZW50IHRhcmdldCBkdXJhdGlvbi4gSWYgbmVnYXRpdmUsXG4gICAqIHRoZSBhYnNvbHV0ZSB2YWx1ZSBtdXN0IGJlIGxhcmdlciB0aGFuIHRocmVlIHRpbWVzIHRoZSBjb25maWd1cmVkIHNlZ21lbnQgdGFyZ2V0IGR1cmF0aW9uLFxuICAgKiBhbmQgdGhlIGFic29sdXRlIHZhbHVlIG11c3QgYmUgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIG1hbmlmZXN0IGR1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZU9mZnNldDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEJhc2UgbWFuaWZlc3QgY29uZmlndXJhdGlvbi5cbiAqL1xuaW50ZXJmYWNlIE1hbmlmZXN0Q29uZmlndXJhdGlvbkJhc2Uge1xuICAvKipcbiAgICogRmlsdGVyIGNvbmZpZ3VyYXRpb24gaW5jbHVkZXMgc2V0dGluZ3MgZm9yIG1hbmlmZXN0IGZpbHRlcmluZywgc3RhcnQgYW5kIGVuZCB0aW1lcywgYW5kIHRpbWUgZGVsYXkgdGhhdCBhcHBseSB0byBhbGwgb2YgeW91ciBlZ3Jlc3MgcmVxdWVzdHMgZm9yIHRoaXMgbWFuaWZlc3QuXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9tZWRpYXBhY2thZ2UvbGF0ZXN0L3VzZXJndWlkZS9tYW5pZmVzdC1maWx0ZXItcXVlcnktcGFyYW1ldGVycy5odG1sXG4gICAqIEBkZWZhdWx0IC0gTm8gZmlsdGVyIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGZpbHRlckNvbmZpZ3VyYXRpb24/OiBGaWx0ZXJDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIHRvdGFsIGR1cmF0aW9uIChpbiBzZWNvbmRzKSBvZiB0aGUgbWFuaWZlc3QncyBjb250ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCA2MFxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3RXaW5kb3c/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBDaG9vc2UgaG93IGFkIG1hcmtlcnMgYXJlIGluY2x1ZGVkIGluIHRoZSBwYWNrYWdlZCBjb250ZW50LlxuICovXG5leHBvcnQgZW51bSBBZE1hcmtlckRhc2gge1xuICAvKipcbiAgICogT3B0aW9uIGZvciBCSU5BUlkgLSBUaGUgU0NURS0zNSBtYXJrZXIgaXMgZXhwcmVzc2VkIGFzIGEgaGV4LXN0cmluZyAoQmFzZTY0IHN0cmluZykgcmF0aGVyIHRoYW4gZnVsbCBYTUwuXG4gICAqL1xuICBCSU5BUlk9J0JJTkFSWScsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIFhNTCAtIFRoZSBTQ1RFIG1hcmtlciBpcyBleHByZXNzZWQgZnVsbHkgaW4gWE1MLlxuICAgKi9cbiAgWE1MPSdYTUwnLFxufVxuXG4vKipcbiAqIENob29zZSBob3cgU0NURS0zNSBhZCBtYXJrZXJzIGFyZSBpbmNsdWRlZCBpbiBITFMgYW5kIExMLUhMUyBtYW5pZmVzdHMuXG4gKi9cbmV4cG9ydCBlbnVtIEFkTWFya2VySGxzIHtcbiAgLyoqXG4gICAqIEluc2VydCBFWFQtWC1EQVRFUkFOR0UgdGFncyB0byBzaWduYWwgYWQgY29udGVudC5cbiAgICovXG4gIERBVEVSQU5HRSA9ICdEQVRFUkFOR0UnLFxuICAvKipcbiAgICogSW5zZXJ0IGVuaGFuY2VkIFNDVEUtMzUgdGFncyBmb3IgYWQgY29udGVudC5cbiAgICovXG4gIFNDVEUzNV9FTkhBTkNFRCA9ICdTQ1RFMzVfRU5IQU5DRUQnLFxufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIHZhcmlhYmxlIHRoYXQgTWVkaWFQYWNrYWdlIHVzZXMgaW4gdGhlIG1lZGlhIGF0dHJpYnV0ZSBvZiB0aGUgU2VnbWVudFRlbXBsYXRlIHRhZy5cbiAqL1xuZXhwb3J0IGVudW0gU2VnbWVudFRlbXBsYXRlRm9ybWF0IHtcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgbnVtYmVyIHdpdGggdGltZWxpbmUuXG4gICAqL1xuICBOVU1CRVJfV0lUSF9USU1FTElORT0nTlVNQkVSX1dJVEhfVElNRUxJTkUnLFxufVxuXG4vKipcbiAqIFRoZSBVVEMgdGltaW5nIG1vZGUgZm9yIERBU0guXG4gKi9cbmV4cG9ydCBlbnVtIERhc2hVdGNUaW1pbmdNb2RlIHtcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgSFRUUF9IRUFELlxuICAgKi9cbiAgSFRUUF9IRUFEPSdIVFRQX0hFQUQnLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBIVFRQX0lTTy5cbiAgICovXG4gIEhUVFBfSVNPPSdIVFRQX0lTTycsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIEhUVFBfWFNEQVRFLlxuICAgKi9cbiAgSFRUUF9YU0RBVEU9J0hUVFBfWFNEQVRFJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgVVRDX0RJUkVDVC5cbiAgICovXG4gIFVUQ19ESVJFQ1Q9J1VUQ19ESVJFQ1QnLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRyaWdnZXJzIHdoaWNoIGNhdXNlIEFXUyBFbGVtZW50YWwgTWVkaWFQYWNrYWdlIHRvIGNyZWF0ZSBtZWRpYSBwcmVzZW50YXRpb24gZGVzY3JpcHRpb24gKE1QRCkgcGVyaW9kcyBpbiB0aGUgb3V0cHV0IG1hbmlmZXN0LlxuICovXG5leHBvcnQgZW51bSBEYXNoUGVyaW9kVHJpZ2dlcnMge1xuICAvKipcbiAgICogT3B0aW9uIGZvciBBVkFJTFMuXG4gICAqL1xuICBBVkFJTFM9J0FWQUlMUycsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIERSTV9LRVlfUk9UQVRJT04uXG4gICAqL1xuICBEUk1fS0VZX1JPVEFUSU9OPSdEUk1fS0VZX1JPVEFUSU9OJyxcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgU09VUkNFX0NIQU5HRVMuXG4gICAqL1xuICBTT1VSQ0VfQ0hBTkdFUz0nU09VUkNFX0NIQU5HRVMnLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBTT1VSQ0VfRElTUlVQVElPTlMuXG4gICAqL1xuICBTT1VSQ0VfRElTUlVQVElPTlM9J1NPVVJDRV9ESVNSVVBUSU9OUycsXG4gIC8qKlxuICAgKiBPcHRpb24gZm9yIE5PTkUuXG4gICAqL1xuICBOT05FPSdOT05FJyxcbn1cblxuLyoqXG4gKiBEUk0gc2lnbmFsaW5nIGRldGVybWluZXMgdGhlIHdheSBEQVNIIG1hbmlmZXN0IHNpZ25hbHMgdGhlIERSTSBjb250ZW50LlxuICovXG5leHBvcnQgZW51bSBEcm1TaWduYWxsaW5nIHtcbiAgLyoqXG4gICAqIE9wdGlvbiBmb3IgSU5ESVZJRFVBTC5cbiAgICovXG4gIElORElWSURVQUw9J0lORElWSURVQUwnLFxuICAvKipcbiAgICogT3B0aW9uIGZvciBSRUZFUkVOQ0VELlxuICAgKi9cbiAgUkVGRVJFTkNFRD0nUkVGRVJFTkNFRCcsXG59XG5cbi8qKlxuICogU1RBTkRBUkQgaW5kaWNhdGVzIGEgZGVmYXVsdCBtYW5pZmVzdCwgd2hpY2ggaXMgY29tcGFjdGVkLiBOT05FIGluZGljYXRlcyBhIGZ1bGwgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBlbnVtIERhc2hNYW5pZmVzdENvbXBhY3RuZXNzIHtcbiAgLyoqXG4gICAqIFNUQU5EQVJEXG4gICAqL1xuICBTVEFOREFSRD0nU1RBTkRBUkQnLFxuICAvKipcbiAgICogTk9ORVxuICAgKi9cbiAgTk9ORT0nTk9ORScsXG59XG5cbi8qKlxuICogVGhlIGJhc2UgVVJMcyB0byB1c2UgZm9yIHJldHJpZXZpbmcgc2VnbWVudHMuIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBsb2NhdGlvbnMgYW5kIGluZGljYXRlIHRoZVxuICogcHJpb3JpdHkgYW5kIHdlaWdodCBmb3Igd2hlbiBlYWNoIHNob3VsZCBiZSB1c2VkLCBmb3IgdXNlIGluIG11bHRpLUNETiB3b3JrZmxvd3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaEJhc2VVcmxQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBGb3IgdXNlIHdpdGggRFZCLURBU0ggcHJvZmlsZXMgb25seS4gVGhlIHByaW9yaXR5IG9mIHRoaXMgbG9jYXRpb24gZm9yIHNlcnZpbmcgc2VnbWVudHMuIFRoZSBsb3dlciB0aGUgbnVtYmVyLCB0aGUgaGlnaGVyIHRoZSBwcmlvcml0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwcmlvcml0eSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IGR2YlByaW9yaXR5PzogbnVtYmVyO1xuICAvKipcbiAgICogRm9yIHVzZSB3aXRoIERWQi1EQVNIIHByb2ZpbGVzIG9ubHkuIFRoZSB3ZWlnaHRpbmcgZm9yIHNvdXJjZSBsb2NhdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHdlaWdodCBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IGR2YldlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgbG9jYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gc2VydmljZSBsb2NhdGlvbiBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VMb2NhdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgc291cmNlIGxvY2F0aW9uIGZvciBzZWdtZW50cy5cbiAgICovXG4gIHJlYWRvbmx5IHVybDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZvciB1c2Ugd2l0aCBEVkItREFTSCBwcm9maWxlcyBvbmx5LiBUaGUgc2V0dGluZ3MgZm9yIGVycm9yIHJlcG9ydGluZyBmcm9tIHRoZSBwbGF5YmFjayBkZXZpY2VcbiAqIHRoYXQgeW91IHdhbnQgQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgdG8gcGFzcyB0aHJvdWdoIHRvIHRoZSBtYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXNoRHZiTWV0cmljc1JlcG9ydGluZyB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHBsYXliYWNrIGRldmljZXMgcGVyIDEwMDAgdGhhdCB3aWxsIHNlbmQgZXJyb3IgcmVwb3J0cyB0byB0aGUgcmVwb3J0aW5nIFVSTC5cbiAgICogVGhpcyByZXByZXNlbnRzIHRoZSBwcm9iYWJpbGl0eSB0aGF0IGEgcGxheWJhY2sgZGV2aWNlIHdpbGwgYmUgYSByZXBvcnRpbmcgcGxheWVyIGZvciB0aGlzIHNlc3Npb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJvYmFiaWxpdHkgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBwcm9iYWJpbGl0eT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBVUkwgd2hlcmUgcGxheWJhY2sgZGV2aWNlcyBzZW5kIGVycm9yIHJlcG9ydHMuXG4gICAqL1xuICByZWFkb25seSByZXBvcnRpbmdVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBGb3IgdXNlIHdpdGggRFZCLURBU0ggcHJvZmlsZXMgb25seS4gVGhlIHNldHRpbmdzIGZvciBmb250IGRvd25sb2FkcyB0aGF0IHlvdSB3YW50IEFXUyBFbGVtZW50YWwgTWVkaWFQYWNrYWdlIHRvIHBhc3MgdGhyb3VnaCB0byB0aGUgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFzaER2YkZvbnREb3dubG9hZCB7XG4gIC8qKlxuICAgKiBUaGUgZm9udEZhbWlseSBuYW1lIGZvciBzdWJ0aXRsZXMsIGFzIGRlc2NyaWJlZCBpbiBFQlUtVFQtRCBTdWJ0aXRsaW5nIERpc3RyaWJ1dGlvbiBGb3JtYXQuXG4gICAqIEBleHRlcm5hbCBodHRwczovL3RlY2guZWJ1LmNoL3B1YmxpY2F0aW9ucy90ZWNoMzM4MFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGZvbnQgZmFtaWx5IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgZm9udEZhbWlseT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBtaW1lVHlwZSBvZiB0aGUgcmVzb3VyY2UgdGhhdCdzIGF0IHRoZSBmb250IGRvd25sb2FkIFVSTC5cbiAgICogRm9yIGluZm9ybWF0aW9uIGFib3V0IGZvbnQgTUlNRSB0eXBlcywgc2VlIHRoZSBNUEVHLURBU0ggUHJvZmlsZSBmb3IgVHJhbnNwb3J0IG9mIElTTyBCTUZGIEJhc2VkIERWQiBTZXJ2aWNlcyBvdmVyIElQIEJhc2VkIE5ldHdvcmtzIGRvY3VtZW50LlxuICAgKlxuICAgKiBAZXh0ZXJuYWwgaHR0cHM6Ly9kdmIub3JnL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIxLzA2L0ExNjhyNF9NUEVHLURBU0gtUHJvZmlsZS1mb3ItVHJhbnNwb3J0LW9mLUlTTy1CTUZGLUJhc2VkLURWQi1TZXJ2aWNlc19EcmFmdC10c18xMDMtMjg1LXYxNDBfTm92ZW1iZXJfMjAyMS5wZGZcbiAgICogQGRlZmF1bHQgLSBObyBNSU1FIHR5cGUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBtaW1lVHlwZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBVUkwgZm9yIGRvd25sb2FkaW5nIGZvbnRzIGZvciBzdWJ0aXRsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZm9udCBkb3dubG9hZCBVUkwgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB1cmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIGZvbnQgZG93bmxvYWQgYW5kIGVycm9yIHJlcG9ydGluZyBpbmZvcm1hdGlvbiB0aGF0IHlvdSB3YW50IE1lZGlhUGFja2FnZSB0byBwYXNzIHRocm91Z2ggdG8gdGhlIG1hbmlmZXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhc2hEdmJTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBQbGF5YmFjayBkZXZpY2UgZXJyb3IgcmVwb3J0aW5nIHNldHRpbmdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGVycm9yIG1ldHJpY3MgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JNZXRyaWNzPzogRGFzaER2Yk1ldHJpY3NSZXBvcnRpbmdbXTtcbiAgLyoqXG4gICAqIFN1YnRpdGxlIGZvbnQgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZm9udCBkb3dubG9hZCBjb25maWd1cmVkXG4gICAqL1xuICByZWFkb25seSBmb250RG93bmxvYWQ/OiBEYXNoRHZiRm9udERvd25sb2FkO1xufVxuXG4vKipcbiAqIERldGFpbHMgYWJvdXQgdGhlIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCBNZWRpYVBhY2thZ2UgdG8gcGFzcyB0aHJvdWdoIGluIHRoZSBtYW5pZmVzdCB0byB0aGUgcGxheWJhY2sgZGV2aWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhc2hQcm9ncmFtSW5mb3JtYXRpb24ge1xuICAvKipcbiAgICogQSBjb3B5cmlnaHQgc3RhdGVtZW50IGFib3V0IHRoZSBjb250ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGNvcHlyaWdodCBpbmZvcm1hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY29weXJpZ2h0Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxhbmd1YWdlIGNvZGUgZm9yIHRoaXMgbWFuaWZlc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gbGFuZ3VhZ2UgY29kZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IGxhbmd1YWdlQ29kZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEFuIGFic29sdXRlIFVSTCB0aGF0IGNvbnRhaW5zIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjb250ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gVVJMXG4gICAqL1xuICByZWFkb25seSBtb3JlSW5mb3JtYXRpb25Vcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY29udGVudCBwcm92aWRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzb3VyY2UgaW5mb3JtYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBmb3IgdGhlIG1hbmlmZXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRpdGxlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgVFRNTCBQcm9maWxlXG4gKi9cbmV4cG9ydCBlbnVtIFR0bWxQcm9maWxlIHtcbiAgLyoqXG4gICAqIElNU0NfMVxuICAgKi9cbiAgSU1TQ18xPSdJTVNDXzEnLFxuICAvKipcbiAgICogRUJVX1RUX0RfMTAxXG4gICAqL1xuICBFQlVfVFRfRF8xMDE9J0VCVV9UVF9EXzEwMScsXG59XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIFRUTUwgc3VidGl0bGVzIGluIERBU0ggbWFuaWZlc3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhc2hUdG1sQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgcHJvZmlsZSB0aGF0IE1lZGlhUGFja2FnZSB1c2VzIHdoZW4gc2lnbmFsaW5nIHN1YnRpdGxlcyBpbiB0aGUgbWFuaWZlc3QuIElNU0MgaXMgdGhlIGRlZmF1bHQgcHJvZmlsZS4gRUJVLVRULUQgcHJvZHVjZXMgc3VidGl0bGVzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoIHRoZSBFQlUtVFQtRCBUVE1MIHByb2ZpbGUuIE1lZGlhUGFja2FnZSBwYXNzZXMgdGhyb3VnaCBzdWJ0aXRsZSBzdHlsZXMgdG8gdGhlIG1hbmlmZXN0LlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBFQlUtVFQtRCBzdWJ0aXRsZXMsIHNlZSBFQlUtVFQtRCBTdWJ0aXRsaW5nIERpc3RyaWJ1dGlvbiBGb3JtYXQuXG4gICAqXG4gICAqIEBleHRlcm5hbCBodHRwczovL3RlY2guZWJ1LmNoL3B1YmxpY2F0aW9ucy90ZWNoMzM4MFxuICAgKi9cbiAgcmVhZG9ubHkgdHRtbFByb2ZpbGU6IFR0bWxQcm9maWxlO1xuXG59XG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHN1YnRpdGxlcyBpbiBEQVNIIG1hbmlmZXN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXNoU3VidGl0bGVDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFNldHRpbmdzIGZvciBUVE1MIHN1YnRpdGxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBUVE1MIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHR0bWxDb25maWd1cmF0aW9uPzogRGFzaFR0bWxDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIFRoZSBsYXlvdXQgb2YgdGhlIE1TUyBtYW5pZmVzdC5cbiAqL1xuZXhwb3J0IGVudW0gTXNzTWFuaWZlc3RMYXlvdXQge1xuICAvKipcbiAgICogRnVsbCBtYW5pZmVzdCBsYXlvdXQuXG4gICAqL1xuICBGVUxMID0gJ0ZVTEwnLFxuICAvKipcbiAgICogQ29tcGFjdCBtYW5pZmVzdCBsYXlvdXQuXG4gICAqL1xuICBDT01QQUNUID0gJ0NPTVBBQ1QnLFxufVxuXG4vKipcbiAqIFRoZSBNU1MgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNc3NNYW5pZmVzdENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBNYW5pZmVzdENvbmZpZ3VyYXRpb25CYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtYW5pZmVzdCBhc3NvY2lhdGVkIHdpdGggdGhlIE1TUyBtYW5pZmVzdCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3ROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbGF5b3V0IG9mIHRoZSBNU1MgbWFuaWZlc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IE1zc01hbmlmZXN0TGF5b3V0LkZVTExcbiAgICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0TGF5b3V0PzogTXNzTWFuaWZlc3RMYXlvdXQ7XG59XG5cbi8qKlxuICogVGhlIERBU0ggbWFuaWZlc3QgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXNoTWFuaWZlc3RDb25maWd1cmF0aW9uIGV4dGVuZHMgTWFuaWZlc3RDb25maWd1cmF0aW9uQmFzZSB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBVUkxzIHRvIHVzZSBmb3IgcmV0cmlldmluZyBzZWdtZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBiYXNlIFVSTHMgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBiYXNlVXJscz86IERhc2hCYXNlVXJsUHJvcGVydHlbXTtcbiAgLyoqXG4gICAqIFRoZSBsYXlvdXQgb2YgdGhlIERBU0ggbWFuaWZlc3QgdGhhdCBNZWRpYVBhY2thZ2UgcHJvZHVjZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IERhc2hNYW5pZmVzdENvbXBhY3RuZXNzLlNUQU5EQVJEXG4gICAqL1xuICByZWFkb25seSBjb21wYWN0bmVzcz86IERhc2hNYW5pZmVzdENvbXBhY3RuZXNzO1xuICAvKipcbiAgICogRm9yIGVuZHBvaW50cyB0aGF0IHVzZSB0aGUgRFZCLURBU0ggcHJvZmlsZSBvbmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIERWQiBzZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgZHZiU2V0dGluZ3M/OiBEYXNoRHZiU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBUaGUgcHJvZmlsZSB0aGF0IHRoZSBvdXRwdXQgaXMgY29tcGxpYW50IHdpdGguXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJvZmlsZXMgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlcz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogRGV0YWlscyBhYm91dCB0aGUgY29udGVudCB0aGF0IHlvdSB3YW50IE1lZGlhUGFja2FnZSB0byBwYXNzIHRocm91Z2ggaW4gdGhlIG1hbmlmZXN0IHRvIHRoZSBwbGF5YmFjayBkZXZpY2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJvZ3JhbSBpbmZvcm1hdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZ3JhbUluZm9ybWF0aW9uPzogRGFzaFByb2dyYW1JbmZvcm1hdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIGZvciBEQVNIIHN1YnRpdGxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzdWJ0aXRsZSBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzdWJ0aXRsZUNvbmZpZ3VyYXRpb24/OiBEYXNoU3VidGl0bGVDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1hbmlmZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgREFTSCBtYW5pZmVzdCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3ROYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEUk0gc2lnbmFsaW5nIGRldGVybWluZXMgdGhlIHdheSBEQVNIIG1hbmlmZXN0IHNpZ25hbHMgdGhlIERSTSBjb250ZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIERSTSBzaWduYWxpbmcgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBkcm1TaWduYWxsaW5nPzogRHJtU2lnbmFsbGluZztcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiBjb250ZW50IHRoYXQgdGhlIHBsYXllciBtdXN0IGtlZXAgYXZhaWxhYmxlIGluIHRoZSBidWZmZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDVcbiAgICovXG4gIHJlYWRvbmx5IG1pbkJ1ZmZlclRpbWU/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIGZvciB0aGUgcGxheWVyIHRvIHdhaXQgYmVmb3JlIHJlcXVlc3RpbmcgYW4gdXBkYXRlZCBtYW5pZmVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgMlxuICAgKi9cbiAgcmVhZG9ubHkgbWluVXBkYXRlUGVyaW9kPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBTcGVjaWZ5IHdoYXQgdHJpZ2dlcnMgY2F1c2UgQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgdG8gY3JlYXRlIG1lZGlhIHByZXNlbnRhdGlvbiBkZXNjcmlwdGlvbiAoTVBEKSBwZXJpb2RzIGluIHRoZSBvdXRwdXQgbWFuaWZlc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtEYXNoUGVyaW9kVHJpZ2dlcnMuQVZBSUxTLCBEYXNoUGVyaW9kVHJpZ2dlcnMuRFJNX0tFWV9ST1RBVElPTiwgRGFzaFBlcmlvZFRyaWdnZXJzLlNPVVJDRV9DSEFOR0VTLCBEYXNoUGVyaW9kVHJpZ2dlcnMuU09VUkNFX0RJU1JVUFRJT05TXVxuICAgKi9cbiAgcmVhZG9ubHkgcGVyaW9kVHJpZ2dlcnM/OiBEYXNoUGVyaW9kVHJpZ2dlcnNbXTtcbiAgLyoqXG4gICAqIENob29zZSBob3cgYWQgbWFya2VycyBhcmUgaW5jbHVkZWQgaW4gdGhlIHBhY2thZ2VkIGNvbnRlbnQuIElmIHlvdSBpbmNsdWRlIGFkIG1hcmtlcnMgaW4gdGhlIGNvbnRlbnQgc3RyZWFtIGluIHlvdXIgdXBzdHJlYW0gZW5jb2RlcnMsXG4gICAqIHRoZW4geW91IG5lZWQgdG8gaW5mb3JtIE1lZGlhUGFja2FnZSB3aGF0IHRvIGRvIHdpdGggdGhlIGFkIG1hcmtlcnMgaW4gdGhlIG91dHB1dC5cbiAgICpcbiAgICogVG8gY2hvb3NlIHRoaXMgb3B0aW9uIFNUQ0UgZmlsdGVyaW5nIG5lZWRzIHRvIGJlIGVuYWJsZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFkTWFya2VyRGFzaC5YTUxcbiAgICovXG4gIHJlYWRvbmx5IHNjdGVEYXNoQWRNYXJrZXI/OiBBZE1hcmtlckRhc2g7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB2YXJpYWJsZSB0aGF0IE1lZGlhUGFja2FnZSB1c2VzIGluIHRoZSBtZWRpYSBhdHRyaWJ1dGUgb2YgdGhlIFNlZ21lbnRUZW1wbGF0ZSB0YWcuXG4gICAqXG4gICAqIEBkZWZhdWx0IFNlZ21lbnRUZW1wbGF0ZUZvcm1hdC5OVU1CRVJfV0lUSF9USU1FTElORVxuICAgKi9cbiAgcmVhZG9ubHkgc2VnbWVudFRlbXBsYXRlRm9ybWF0PzogU2VnbWVudFRlbXBsYXRlRm9ybWF0O1xuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lIHRoYXQgdGhlIHBsYXllciBzaG91bGQgYmUgZnJvbSB0aGUgZW5kIG9mIHRoZSBtYW5pZmVzdC5cbiAgICpcbiAgICogQGRlZmF1bHQgMTBcbiAgICovXG4gIHJlYWRvbmx5IHN1Z2dlc3RlZFByZXNlbnRhdGlvbkRlbGF5PzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgVVRDIHRpbWluZyBtb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEYXNoVXRjVGltaW5nTW9kZS5VVENfRElSRUNUXG4gICAqL1xuICByZWFkb25seSB1dGNUaW1pbmdNb2RlPzogRGFzaFV0Y1RpbWluZ01vZGU7XG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIHRoYXQgdGhlIHBsYXllciB1c2VzIHRvIHN5bmNocm9uaXplIHRvIGNvb3JkaW5hdGVkIHVuaXZlcnNhbCB0aW1lIChVVEMpIHdhbGwgY2xvY2sgdGltZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIC0gTm8gdmFsdWUgaXMgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB1dGNUaW1pbmdTb3VyY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIEhMUyBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhsc01hbmlmZXN0Q29uZmlndXJhdGlvbiBleHRlbmRzIE1hbmlmZXN0Q29uZmlndXJhdGlvbkJhc2Uge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1hbmlmZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgSExTIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdE5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjaGlsZCBtYW5pZmVzdCBhc3NvY2lhdGVkIHdpdGggdGhlIEhMUyBtYW5pZmVzdCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGNoaWxkIG1hbmlmZXN0IG5hbWUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBjaGlsZE1hbmlmZXN0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEluc2VydHMgRVhULVgtUFJPR1JBTS1EQVRFLVRJTUUgdGFncyBpbiB0aGUgb3V0cHV0IG1hbmlmZXN0IGF0IHRoZSBpbnRlcnZhbCB0aGF0IHlvdSBzcGVjaWZ5LlxuICAgKiBJZiB5b3UgZG9uJ3QgZW50ZXIgYW4gaW50ZXJ2YWwsIEVYVC1YLVBST0dSQU0tREFURS1USU1FIHRhZ3MgYXJlbid0IGluY2x1ZGVkIGluIHRoZSBtYW5pZmVzdC5cbiAgICogVGhlIHRhZ3Mgc3luYyB0aGUgc3RyZWFtIHRvIHRoZSB3YWxsIGNsb2NrIHNvIHRoYXQgdmlld2VycyBjYW4gc2VlayB0byBhIHNwZWNpZmljIHRpbWUgaW4gdGhlIHBsYXliYWNrIHRpbWVsaW5lIG9uIHRoZSBwbGF5ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJvZ3JhbSBkYXRlIHRpbWUgaW50ZXJ2YWxcbiAgICovXG4gIHJlYWRvbmx5IHByb2dyYW1EYXRlVGltZUludGVydmFsPzogRHVyYXRpb247XG4gIC8qKlxuICAgKiBUaGUgU0NURS0zNSBITFMgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIEhMUyBtYW5pZmVzdCBjb25maWd1cmF0aW9uIG9mIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gU0NURSBhZCBtYXJrZXIgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc2N0ZUFkTWFya2VySGxzPzogQWRNYXJrZXJIbHM7XG4gIC8qKlxuICAgKiBJbnNlcnQgRVhULVgtU1RBUlQgdGFnIGluIHRoZSBtYW5pZmVzdCB3aXRoIHRoZSBjb25maWd1cmVkIHNldHRpbmdzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gc3RhcnQgdGFnXG4gICAqL1xuICByZWFkb25seSBzdGFydFRhZz86IFN0YXJ0VGFnO1xuICAvKipcbiAgICogV2hlbiBlbmFibGVkLCBNZWRpYVBhY2thZ2UgVVJMLWVuY29kZXMgdGhlIHF1ZXJ5IHN0cmluZyBmb3IgQVBJIHJlcXVlc3RzIGZvciBITFMgY2hpbGQgbWFuaWZlc3RzIHRvIGNvbXBseSB3aXRoIEFXUyBTaWduYXR1cmUgVmVyc2lvbiA0IChTaWdWNCkgc2lnbmF0dXJlIHNpZ25pbmcgcHJvdG9jb2wuXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgQVdTIFNpZ25hdHVyZSBWZXJzaW9uIDQgZm9yIEFQSSByZXF1ZXN0cyBpbiBBV1MgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IFVzZXIgR3VpZGUuXG4gICAqXG4gICAqIEBleHRlcm5hbCBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3NpZ3YuaHRtbFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdXJsRW5jb2RlQ2hpbGRNYW5pZmVzdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogU3BlY2lmeSBhIGxvdy1sYXRlbmN5IEhUVFAgbGl2ZSBzdHJlYW1pbmcgKExMLUhMUykgbWFuaWZlc3QgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb3dMYXRlbmN5SGxzTWFuaWZlc3RDb25maWd1cmF0aW9uIGV4dGVuZHMgTWFuaWZlc3RDb25maWd1cmF0aW9uQmFzZSB7XG4gIC8qKlxuICAgKiBBIHNob3J0IHN0cmluZyB0aGF0J3MgYXBwZW5kZWQgdG8gdGhlIGVuZHBvaW50IFVSTC4gVGhlIG1hbmlmZXN0IG5hbWUgY3JlYXRlcyBhIHVuaXF1ZSBwYXRoIHRvIHRoaXMgZW5kcG9pbnQuXG4gICAqIElmIHlvdSBkb24ndCBlbnRlciBhIHZhbHVlLCBNZWRpYVBhY2thZ2UgdXNlcyB0aGUgZGVmYXVsdCBtYW5pZmVzdCBuYW1lLCBpbmRleC4gTWVkaWFQYWNrYWdlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyB0aGUgZm9ybWF0IGV4dGVuc2lvbiwgc3VjaCBhcyAubTN1OC5cbiAgICogWW91IGNhbid0IHVzZSB0aGUgc2FtZSBtYW5pZmVzdCBuYW1lIGlmIHlvdSB1c2UgSExTIG1hbmlmZXN0IGFuZCBsb3ctbGF0ZW5jeSBITFMgbWFuaWZlc3QuXG4gICAqIFRoZSBtYW5pZmVzdE5hbWUgb24gdGhlIEhMU01hbmlmZXN0IG9iamVjdCBvdmVycmlkZXMgdGhlIG1hbmlmZXN0TmFtZSB5b3UgcHJvdmlkZWQgb24gdGhlIG9yaWdpbkVuZHBvaW50IG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG1hbmlmZXN0TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNoaWxkIG1hbmlmZXN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbG93LWxhdGVuY3kgSExTIChMTC1ITFMpIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjaGlsZCBtYW5pZmVzdCBuYW1lIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgY2hpbGRNYW5pZmVzdE5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJbnNlcnRzIEVYVC1YLVBST0dSQU0tREFURS1USU1FIHRhZ3MgaW4gdGhlIG91dHB1dCBtYW5pZmVzdCBhdCB0aGUgaW50ZXJ2YWwgdGhhdCB5b3Ugc3BlY2lmeS5cbiAgICogSWYgeW91IGRvbid0IGVudGVyIGFuIGludGVydmFsLCBFWFQtWC1QUk9HUkFNLURBVEUtVElNRSB0YWdzIGFyZW4ndCBpbmNsdWRlZCBpbiB0aGUgbWFuaWZlc3QuXG4gICAqIFRoZSB0YWdzIHN5bmMgdGhlIHN0cmVhbSB0byB0aGUgd2FsbCBjbG9jayBzbyB0aGF0IHZpZXdlcnMgY2FuIHNlZWsgdG8gYSBzcGVjaWZpYyB0aW1lIGluIHRoZSBwbGF5YmFjayB0aW1lbGluZSBvbiB0aGUgcGxheWVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHByb2dyYW0gZGF0ZSB0aW1lIGludGVydmFsXG4gICAqL1xuICByZWFkb25seSBwcm9ncmFtRGF0ZVRpbWVJbnRlcnZhbD86IER1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIFNDVEUtMzUgSExTIGNvbmZpZ3VyYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBsb3ctbGF0ZW5jeSBITFMgKExMLUhMUykgbWFuaWZlc3QgY29uZmlndXJhdGlvbiBvZiB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIFNDVEUgYWQgbWFya2VyIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNjdGVBZE1hcmtlckhscz86IEFkTWFya2VySGxzO1xuICAvKipcbiAgICogSW5zZXJ0IEVYVC1YLVNUQVJUIHRhZyBpbiB0aGUgbWFuaWZlc3Qgd2l0aCB0aGUgY29uZmlndXJlZCBzZXR0aW5nc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHN0YXJ0IHRhZ1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRUYWc/OiBTdGFydFRhZztcbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgTWVkaWFQYWNrYWdlIFVSTC1lbmNvZGVzIHRoZSBxdWVyeSBzdHJpbmcgZm9yIEFQSSByZXF1ZXN0cyBmb3IgTEwtSExTIGNoaWxkIG1hbmlmZXN0cyB0byBjb21wbHkgd2l0aCBBV1MgU2lnbmF0dXJlIFZlcnNpb24gNCAoU2lnVjQpIHNpZ25hdHVyZSBzaWduaW5nIHByb3RvY29sLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIEFXUyBTaWduYXR1cmUgVmVyc2lvbiA0IGZvciBBUEkgcmVxdWVzdHMgaW4gQVdTIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCBVc2VyIEd1aWRlLlxuICAgKlxuICAgKiBAZXh0ZXJuYWwgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9zaWd2Lmh0bWxcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHVybEVuY29kZUNoaWxkTWFuaWZlc3Q/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgYW4gQVdTIEVsZW1lbnRhbCBNZWRpYVBhY2thZ2UgVjIgT3JpZ2luIEVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkVuZHBvaW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luIGVuZHBvaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IGF1dG9nZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpbkVuZHBvaW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBkZXNjcmlwdGlvbiBpcyBhZGRlZCB0byBPcmlnaW4gRW5kcG9pbnRcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyB0YWdnaW5nXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogTWFuaWZlc3RzIGNvbmZpZ3VyYXRpb24gZm9yIEhMUywgTG93IExhdGVuY3kgSExTIGFuZCBEQVNILlxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3RzOiBNYW5pZmVzdFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgd2luZG93IHRvIHNwZWNpZnkgYSB3aW5kb3cgb2YgdGhlIGxpdmUgc3RyZWFtIHRoYXQncyBhdmFpbGFibGUgZm9yIG9uLWRlbWFuZCB2aWV3aW5nLiBWaWV3ZXJzIGNhbiBzdGFydC1vdmVyIG9yIGNhdGNoLXVwIG9uIGNvbnRlbnQgdGhhdCBmYWxscyB3aXRoaW4gdGhlIHdpbmRvdy5cbiAgICpcbiAgICogQGRlZmF1bHQgOTAwXG4gICAqL1xuICByZWFkb25seSBzdGFydG92ZXJXaW5kb3c/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHNlZ21lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEluc2lkZSB0aGUgc2VnbWVudCBjb25maWd1cmF0aW9uIHlvdSBjYW4gZGVmaW5lIG9wdGlvbnMgc3VjaCBhcyBlbmNyeXB0aW9uLCBTUEVLRSBwYXJhbWV0ZXJzIGFuZCBvdGhlclxuICAgKiBnZW5lcmFsIHNlZ21lbnQgY29uZmlndXJhdGlvbnMuXG4gICAqXG4gICAqIFVzZSBTZWdtZW50LnRzKCkgb3IgU2VnbWVudC5jbWFmKCkgdG8gY3JlYXRlIHRoZSBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VnbWVudDogU2VnbWVudENvbmZpZ3VyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBmYWlsb3ZlciBzZXR0aW5ncyBmb3IgdGhlIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBObyBmb3JjZSBlbmRwb2ludCBjb25maWd1cmF0aW9uIGlzIGNvbmZpZ3VyZWRcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlRW5kcG9pbnRDb25maWd1cmF0aW9uQ29uZGl0aW9ucz86IEVuZHBvaW50RXJyb3JDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYWNjZXNzIHRvIE1lZGlhUGFja2FnZSBWMiBPcmlnaW4gRW5kcG9pbnQgdmlhIHNlY3JldCBoZWFkZXIuXG4gICAqXG4gICAqIFVzZSB0aGlzIHdoZW4geW91ciBDRE4gZG9lc24ndCBzdXBwb3J0IEFXUyBTaWduYXR1cmUgVmVyc2lvbiA0IChTaWdWNClcbiAgICogYXV0aGVudGljYXRpb24uIEZvciBTaWdWNC1iYXNlZCBhY2Nlc3Mgd2l0aCBBbWF6b24gQ2xvdWRGcm9udCwgc2VlXG4gICAqIGBNZWRpYVBhY2thZ2VWMk9yaWdpbmAuXG4gICAqXG4gICAqIFNldHRpbmcgYGNkbkF1dGhgIGF1dG8tY3JlYXRlcyB0aGUgZm9sbG93aW5nIHBvbGljeSBvbiB0aGUgT3JpZ2luRW5kcG9pbnQ6XG4gICAqXG4gICAqIGBgYGpzb25cbiAgICoge1xuICAgKiAgIFwiVmVyc2lvblwiOlwiMjAxMi0xMC0xN1wiLFxuICAgKiAgIFwiU3RhdGVtZW50XCI6IFtcbiAgICogICAgIHtcbiAgICogICAgICAgXCJTaWRcIjogXCJBbGxvd0dldE9iamVjdEFjY2Vzc0ZvckF1dGhvcml6ZWRSZXF1ZXN0XCIsXG4gICAqICAgICAgIFwiRWZmZWN0XCI6IFwiQWxsb3dcIixcbiAgICogICAgICAgXCJQcmluY2lwYWxcIjogXCIqXCIsXG4gICAqICAgICAgIFwiQWN0aW9uXCI6IFwibWVkaWFwYWNrYWdldjI6R2V0T2JqZWN0XCIsXG4gICAqICAgICAgIFwiUmVzb3VyY2VcIjogXCJhcm46YXdzOm1lZGlhcGFja2FnZXYyOnVzLWVhc3QtMToxMTExMjIyMjMzMzM6Y2hhbm5lbEdyb3VwL2NoYW5uZWxHcm91cE5hbWUvY2hhbm5lbC9jaGFubmVsTmFtZS9vcmlnaW5FbmRwb2ludC9vcmlnaW5FbmRwb2ludE5hbWVcIixcbiAgICogICAgICAgXCJDb25kaXRpb25cIjoge1xuICAgKiAgICAgICAgIFwiQm9vbFwiOiB7XG4gICAqICAgICAgICAgICBcIm1lZGlhcGFja2FnZXYyOlJlcXVlc3RIYXNNYXRjaGluZ0NkbkF1dGhIZWFkZXJcIjogXCJ0cnVlXCJcbiAgICogICAgICAgICB9XG4gICAqICAgICAgIH1cbiAgICogICAgIH1cbiAgICogICBdXG4gICAqIH1cbiAgICogYGBgXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL21lZGlhcGFja2FnZS9sYXRlc3QvdXNlcmd1aWRlL2Nkbi1hdXRoLmh0bWxcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvY2RuLWF1dGgtc2V0dXAuaHRtbFxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBOb3QgY29uZmlndXJlZCBvbiBlbmRwb2ludFxuICAgKi9cbiAgcmVhZG9ubHkgY2RuQXV0aD86IENkbkF1dGhDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBQb2xpY3kgdG8gYXBwbHkgd2hlbiB0aGUgb3JpZ2luIGVuZHBvaW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogRXZlbiB0aG91Z2ggTWVkaWFQYWNrYWdlIENoYW5uZWxHcm91cHMsIENoYW5uZWxzIGFuZCBPcmlnaW5FbmRwb2ludHMgYXJlIHRlY2huaWNhbGx5IHN0YXRlZnVsLFxuICAgKiB0aGVpciBjb250ZW50cyBhcmUgdHJhbnNpZW50IGFuZCBpdCBpcyBjb21tb24gdG8gYWRkIGFuZCByZW1vdmUgdGhlc2Ugd2hpbGUgcmVhcmNoaXRlY3RpbmcgeW91ciBhcHBsaWNhdGlvbi5cbiAgICogVGhlIGRlZmF1bHQgaXMgdGhlcmVmb3JlIGBERVNUUk9ZYC4gQ2hhbmdlIGl0IHRvIGBSRVRBSU5gIGlmIHRoZSBjb250ZW50IChpbiBhIGxvb2tiYWNrIHdpbmRvdykgYXJlIHNvXG4gICAqIHZhbHVhYmxlIHRoYXQgYWNjaWRlbnRhbGx5IGxvc2luZyBpdCB3b3VsZCBiZSB1bmFjY2VwdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBzZXQgb24gYW4gT3JpZ2luIEVuZHBvaW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbkVuZHBvaW50UHJvcHMgZXh0ZW5kcyBPcmlnaW5FbmRwb2ludE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNoYW5uZWwgYXNzb2NpYXRlZCB3aXRoIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsOiBJQ2hhbm5lbDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIE9yaWdpbiBFbmRwb2ludCBkZWZpbmVkIG91dHNpZGUgb2YgdGhpcyBzdGFjay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmlnaW5FbmRwb2ludEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIG5hbWUgdGhhdCBkZXNjcmliZXMgdGhlIGNoYW5uZWwgZ3JvdXAuIFRoZSBuYW1lIGlzIHRoZSBwcmltYXJ5IGlkZW50aWZpZXIgZm9yIHRoZSBjaGFubmVsIGdyb3VwLlxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsR3JvdXBOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIHRoYXQgZGVzY3JpYmVzIHRoZSBjaGFubmVsLiBUaGUgbmFtZSBpcyB0aGUgcHJpbWFyeSBpZGVudGlmaWVyIGZvciB0aGUgY2hhbm5lbC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgdGhhdCBkZXNjcmliZXMgdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JpZ2luRW5kcG9pbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgcmVnaW9uIHdoZXJlIHRoZSBvcmlnaW4gZW5kcG9pbnQgbGl2ZXMuXG4gICAqXG4gICAqIFJlcXVpcmVkIGZvciBjcm9zcy1yZWdpb24gaW1wb3J0cyB0byBjb25zdHJ1Y3QgdGhlIGNvcnJlY3QgQVJOLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBpbXBvcnRpbmcgc3RhY2sncyByZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEUk0gc3lzdGVtcyBhdmFpbGFibGUgZm9yIENNQUYgZW5jcnlwdGlvbi5cbiAqXG4gKiBDRU5DIHN1cHBvcnRzIFBsYXlSZWFkeSwgV2lkZXZpbmUsIGFuZCBJcmRldG8uXG4gKiBDQkNTIHN1cHBvcnRzIFBsYXlSZWFkeSwgV2lkZXZpbmUsIGFuZCBGYWlyUGxheS5cbiAqL1xuZXhwb3J0IGVudW0gQ21hZkRybVN5c3RlbSB7XG4gIC8qKlxuICAgKiBGYWlyUGxheSBEUk0gLSB1c2VkIHdpdGggQ0JDUyBlbmNyeXB0aW9uLlxuICAgKi9cbiAgRkFJUlBMQVkgPSAnRkFJUlBMQVknLFxuICAvKipcbiAgICogUGxheVJlYWR5IERSTSAtIHVzZWQgd2l0aCBDRU5DIGFuZCBDQkNTIGVuY3J5cHRpb24uXG4gICAqL1xuICBQTEFZUkVBRFkgPSAnUExBWVJFQURZJyxcbiAgLyoqXG4gICAqIFdpZGV2aW5lIERSTSAtIHVzZWQgd2l0aCBDRU5DIGFuZCBDQkNTIGVuY3J5cHRpb24uXG4gICAqL1xuICBXSURFVklORSA9ICdXSURFVklORScsXG4gIC8qKlxuICAgKiBJcmRldG8gRFJNIC0gdXNlZCB3aXRoIENFTkMgZW5jcnlwdGlvbi5cbiAgICovXG4gIElSREVUTyA9ICdJUkRFVE8nLFxufVxuXG4vKipcbiAqIERSTSBzeXN0ZW1zIGF2YWlsYWJsZSBmb3IgVFMgZW5jcnlwdGlvbi5cbiAqXG4gKiBTQU1QTEVfQUVTIHVzZXMgRmFpclBsYXksIEFFU18xMjggdXNlcyBDbGVhciBLZXkgQUVTIDEyOC5cbiAqL1xuZXhwb3J0IGVudW0gVHNEcm1TeXN0ZW0ge1xuICAvKipcbiAgICogRmFpclBsYXkgRFJNIC0gdXNlZCB3aXRoIFNBTVBMRV9BRVMgZW5jcnlwdGlvbi5cbiAgICovXG4gIEZBSVJQTEFZID0gJ0ZBSVJQTEFZJyxcbiAgLyoqXG4gICAqIENsZWFyIEtleSBBRVMgMTI4IC0gdXNlZCB3aXRoIEFFU18xMjggZW5jcnlwdGlvbi5cbiAgICovXG4gIENMRUFSX0tFWV9BRVNfMTI4ID0gJ0NMRUFSX0tFWV9BRVNfMTI4Jyxcbn1cblxuLyoqXG4gKiBEUk0gc3lzdGVtcyBhdmFpbGFibGUgZm9yIElTTSBlbmNyeXB0aW9uLlxuICpcbiAqIElTTSBvbmx5IHN1cHBvcnRzIFBsYXlSZWFkeSB3aXRoIENFTkMuXG4gKi9cbmV4cG9ydCBlbnVtIElzbURybVN5c3RlbSB7XG4gIC8qKlxuICAgKiBQbGF5UmVhZHkgRFJNLlxuICAgKi9cbiAgUExBWVJFQURZID0gJ1BMQVlSRUFEWScsXG59XG5cbi8qKlxuICogQmFzZSBwcm9wZXJ0aWVzIGNvbW1vbiB0byBhbGwgU1BFS0UgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9ucy5cbiAqL1xuaW50ZXJmYWNlIFNwZWtlRW5jcnlwdGlvblByb3BzQmFzZSB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb250ZW50LlxuICAgKlxuICAgKiBUaGUgc2VydmljZSBzZW5kcyB0aGlzIGlkZW50aWZpZXIgdG8gdGhlIGtleSBzZXJ2ZXIgdG8gaWRlbnRpZnkgdGhlIGN1cnJlbnQgZW5kcG9pbnQuXG4gICAqIEhvdyB1bmlxdWUgeW91IG1ha2UgdGhpcyBpZGVudGlmaWVyIGRlcGVuZHMgb24gaG93IGZpbmUtZ3JhaW5lZCB5b3Ugd2FudCBhY2Nlc3MgY29udHJvbHMgdG8gYmUuXG4gICAqIFRoZSBzZXJ2aWNlIGRvZXMgbm90IHBlcm1pdCB5b3UgdG8gdXNlIHRoZSBzYW1lIElEIGZvciB0d28gc2ltdWx0YW5lb3VzIGVuY3J5cHRpb24gcHJvY2Vzc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJQU0gcm9sZSBmb3IgYWNjZXNzaW5nIHRoZSBrZXkgcHJvdmlkZXIgQVBJLlxuICAgKlxuICAgKiBUaGlzIHJvbGUgbXVzdCBoYXZlIGEgdHJ1c3QgcG9saWN5IHRoYXQgYWxsb3dzIE1lZGlhUGFja2FnZSB0byBhc3N1bWUgdGhlIHJvbGUsXG4gICAqIGFuZCBpdCBtdXN0IGhhdmUgc3VmZmljaWVudCBwZXJtaXNzaW9ucyB0byBhY2Nlc3MgdGhlIGtleSByZXRyaWV2YWwgVVJMLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogSVJvbGU7XG5cbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgU1BFS0Uga2V5IHByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNlcnRpZmljYXRlIHRoYXQgeW91IGltcG9ydGVkIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyXG4gICAqIHRvIGFkZCBjb250ZW50IGtleSBlbmNyeXB0aW9uIHRvIHRoaXMgZW5kcG9pbnQuXG4gICAqXG4gICAqIEZvciB0aGlzIGZlYXR1cmUgdG8gd29yaywgeW91ciBEUk0ga2V5IHByb3ZpZGVyIG11c3Qgc3VwcG9ydCBjb250ZW50IGtleSBlbmNyeXB0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNvbnRlbnQga2V5IGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlPzogSUNlcnRpZmljYXRlO1xuXG4gIC8qKlxuICAgKiBBdWRpbyBlbmNyeXB0aW9uIHByZXNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgUHJlc2V0U3Bla2UyMEF1ZGlvLlBSRVNFVF9BVURJT18xXG4gICAqL1xuICByZWFkb25seSBhdWRpb1ByZXNldD86IFByZXNldFNwZWtlMjBBdWRpbztcblxuICAvKipcbiAgICogVmlkZW8gZW5jcnlwdGlvbiBwcmVzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFByZXNldFNwZWtlMjBWaWRlby5QUkVTRVRfVklERU9fMVxuICAgKi9cbiAgcmVhZG9ubHkgdmlkZW9QcmVzZXQ/OiBQcmVzZXRTcGVrZTIwVmlkZW87XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgQ01BRiBTUEVLRSBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ21hZlNwZWtlRW5jcnlwdGlvblByb3BzIGV4dGVuZHMgU3Bla2VFbmNyeXB0aW9uUHJvcHNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBlbmNyeXB0aW9uIG1ldGhvZCB0byB1c2UuXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IENtYWZFbmNyeXB0aW9uTWV0aG9kO1xuXG4gIC8qKlxuICAgKiBUaGUgRFJNIHN5c3RlbXMgdG8gdXNlIGZvciBjb250ZW50IHByb3RlY3Rpb24uXG4gICAqXG4gICAqIENFTkMgc3VwcG9ydHMgUGxheVJlYWR5LCBXaWRldmluZSwgYW5kIElyZGV0by5cbiAgICogQ0JDUyBzdXBwb3J0cyBQbGF5UmVhZHksIFdpZGV2aW5lLCBhbmQgRmFpclBsYXkuXG4gICAqL1xuICByZWFkb25seSBkcm1TeXN0ZW1zOiBDbWFmRHJtU3lzdGVtW107XG5cbiAgLyoqXG4gICAqIENvbnN0YW50IGluaXRpYWxpemF0aW9uIHZlY3RvciAoMzItY2hhcmFjdGVyIGhleCBzdHJpbmcpLlxuICAgKlxuICAgKiBBIDEyOC1iaXQsIDE2LWJ5dGUgaGV4IHZhbHVlIHJlcHJlc2VudGVkIGJ5IGEgMzItY2hhcmFjdGVyIHN0cmluZyxcbiAgICogdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBrZXkgZm9yIGVuY3J5cHRpbmcgY29udGVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBNZWRpYVBhY2thZ2UgZ2VuZXJhdGVzIHRoZSBJVlxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RhbnRJbml0aWFsaXphdGlvblZlY3Rvcj86IHN0cmluZztcblxuICAvKipcbiAgICogS2V5IHJvdGF0aW9uIGludGVydmFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJvdGF0aW9uXG4gICAqL1xuICByZWFkb25seSBrZXlSb3RhdGlvbkludGVydmFsPzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgRFJNIG1ldGFkYXRhIGlzIGV4Y2x1ZGVkIGZyb20gQ01BRiBzZWdtZW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVTZWdtZW50RHJtTWV0YWRhdGE/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFRTIFNQRUtFIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUc1NwZWtlRW5jcnlwdGlvblByb3BzIGV4dGVuZHMgU3Bla2VFbmNyeXB0aW9uUHJvcHNCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBlbmNyeXB0aW9uIG1ldGhvZCB0byB1c2UuXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q6IFRzRW5jcnlwdGlvbk1ldGhvZDtcblxuICAvKipcbiAgICogVGhlIERSTSBzeXN0ZW1zIHRvIHVzZSBmb3IgY29udGVudCBwcm90ZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEZhaXJQbGF5IGZvciBTQU1QTEVfQUVTLCBDbGVhciBLZXkgQUVTIDEyOCBmb3IgQUVTXzEyOFxuICAgKi9cbiAgcmVhZG9ubHkgZHJtU3lzdGVtcz86IFRzRHJtU3lzdGVtW107XG5cbiAgLyoqXG4gICAqIENvbnN0YW50IGluaXRpYWxpemF0aW9uIHZlY3RvciAoMzItY2hhcmFjdGVyIGhleCBzdHJpbmcpLlxuICAgKlxuICAgKiBBIDEyOC1iaXQsIDE2LWJ5dGUgaGV4IHZhbHVlIHJlcHJlc2VudGVkIGJ5IGEgMzItY2hhcmFjdGVyIHN0cmluZyxcbiAgICogdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBrZXkgZm9yIGVuY3J5cHRpbmcgY29udGVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBNZWRpYVBhY2thZ2UgZ2VuZXJhdGVzIHRoZSBJVlxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RhbnRJbml0aWFsaXphdGlvblZlY3Rvcj86IHN0cmluZztcblxuICAvKipcbiAgICogS2V5IHJvdGF0aW9uIGludGVydmFsLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHJvdGF0aW9uXG4gICAqL1xuICByZWFkb25seSBrZXlSb3RhdGlvbkludGVydmFsPzogRHVyYXRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgSVNNIFNQRUtFIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqXG4gKiBJU00gb25seSBzdXBwb3J0cyBDRU5DIGVuY3J5cHRpb24gd2l0aCBQbGF5UmVhZHkgRFJNLlxuICogS2V5IHJvdGF0aW9uIGFuZCBjb25zdGFudCBpbml0aWFsaXphdGlvbiB2ZWN0b3JzIGFyZSBub3Qgc3VwcG9ydGVkLlxuICogQXVkaW8gYW5kIHZpZGVvIHByZXNldHMgZGVmYXVsdCB0byBTSEFSRUQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXNtU3Bla2VFbmNyeXB0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIERSTSBzeXN0ZW1zIHRvIHVzZSBmb3IgY29udGVudCBwcm90ZWN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFtJc21Ecm1TeXN0ZW0uUExBWVJFQURZXVxuICAgKi9cbiAgcmVhZG9ubHkgZHJtU3lzdGVtcz86IElzbURybVN5c3RlbVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBjb250ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJQU0gcm9sZSBmb3IgYWNjZXNzaW5nIHRoZSBrZXkgcHJvdmlkZXIgQVBJLlxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZTogSVJvbGU7XG5cbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgU1BFS0Uga2V5IHByb3ZpZGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNlcnRpZmljYXRlIHRoYXQgeW91IGltcG9ydGVkIHRvIEFXUyBDZXJ0aWZpY2F0ZSBNYW5hZ2VyXG4gICAqIHRvIGFkZCBjb250ZW50IGtleSBlbmNyeXB0aW9uIHRvIHRoaXMgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29udGVudCBrZXkgZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGU/OiBJQ2VydGlmaWNhdGU7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9ucy5cbiAqXG4gKiBVc2UgYENtYWZFbmNyeXB0aW9uLnNwZWtlKClgLCBgVHNFbmNyeXB0aW9uLnNwZWtlKClgLCBvciBgSXNtRW5jcnlwdGlvbi5zcGVrZSgpYCB0byBjcmVhdGUgaW5zdGFuY2VzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQmluZHMgdGhlIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiB0byBwcm9kdWNlIHRoZSBDbG91ZEZvcm1hdGlvbiBwcm9wZXJ0eS5cbiAgICpcbiAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdXNlZCBieSB0aGUgY29uc3RydWN0IGxpYnJhcnkgYW5kIHNob3VsZCBub3QgYmVcbiAgICogY2FsbGVkIG9yIGltcGxlbWVudGVkIGJ5IGV4dGVybmFsIGNvbnN1bWVycy4gSXQgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgX2JpbmQoc2NvcGU6IENvbnN0cnVjdCk6IENmbk9yaWdpbkVuZHBvaW50LkVuY3J5cHRpb25Qcm9wZXJ0eTtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgSUFNIHJvbGUgdXNlZCBmb3IgZW5jcnlwdGlvbiwgaWYgYW55LlxuICAgKlxuICAgKiBUaGlzIGlzIGFuIGludGVybmFsIG1ldGhvZCB1c2VkIGJ5IHRoZSBjb25zdHJ1Y3QgbGlicmFyeSBhbmQgc2hvdWxkIG5vdCBiZVxuICAgKiBjYWxsZWQgb3IgaW1wbGVtZW50ZWQgYnkgZXh0ZXJuYWwgY29uc3VtZXJzLiBJdCBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfZ2V0Um9sZSgpOiBJUm9sZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgQUNNIGNlcnRpZmljYXRlIHVzZWQgZm9yIGNvbnRlbnQga2V5IGVuY3J5cHRpb24sIGlmIGFueS5cbiAgICpcbiAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBtZXRob2QgdXNlZCBieSB0aGUgY29uc3RydWN0IGxpYnJhcnkgYW5kIHNob3VsZCBub3QgYmVcbiAgICogY2FsbGVkIG9yIGltcGxlbWVudGVkIGJ5IGV4dGVybmFsIGNvbnN1bWVycy4gSXQgbWF5IGNoYW5nZSB3aXRob3V0IG5vdGljZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgX2dldENlcnRpZmljYXRlKCk6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIENNQUYgc2VnbWVudHMuXG4gKlxuICogVXNlIGBDbWFmRW5jcnlwdGlvbi5zcGVrZSgpYCB0byBjcmVhdGUgYW4gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbWFmRW5jcnlwdGlvbiBleHRlbmRzIEVuY3J5cHRpb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNQRUtFLWJhc2VkIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgQ01BRiBzZWdtZW50cy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgc3Bla2UocHJvcHM6IENtYWZTcGVrZUVuY3J5cHRpb25Qcm9wcyk6IENtYWZFbmNyeXB0aW9uIHtcbiAgICBpZiAoIXByb3BzLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFNwZWtlVXJsSHR0cHNSZXF1aXJlZGAsICdTUEVLRSBrZXkgcHJvdmlkZXIgVVJMIG11c3QgdXNlIEhUVFBTLicpO1xuICAgIH1cbiAgICBpZiAocHJvcHMubWV0aG9kID09PSBDbWFmRW5jcnlwdGlvbk1ldGhvZC5DRU5DICYmIHByb3BzLmRybVN5c3RlbXMuaW5jbHVkZXMoQ21hZkRybVN5c3RlbS5GQUlSUExBWSkpIHtcbiAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgQ2VuY0ZhaXJQbGF5SW5jb21wYXRpYmxlYCwgJ0NFTkMgZW5jcnlwdGlvbiBtZXRob2QgZG9lcyBub3Qgc3VwcG9ydCBGYWlyUGxheS4gVXNlIENCQ1MgZm9yIEZhaXJQbGF5LicpO1xuICAgIH1cbiAgICBpZiAocHJvcHMubWV0aG9kID09PSBDbWFmRW5jcnlwdGlvbk1ldGhvZC5DQkNTICYmIHByb3BzLmRybVN5c3RlbXMuaW5jbHVkZXMoQ21hZkRybVN5c3RlbS5JUkRFVE8pKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YENiY3NJcmRldG9JbmNvbXBhdGlibGVgLCAnQ0JDUyBlbmNyeXB0aW9uIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IElyZGV0by4gVXNlIENFTkMgZm9yIElyZGV0by4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDbWFmRW5jcnlwdGlvbihwcm9wcyk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQ21hZlNwZWtlRW5jcnlwdGlvblByb3BzO1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByb3BzOiBDbWFmU3Bla2VFbmNyeXB0aW9uUHJvcHMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uZmlnID0gcHJvcHM7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0KTogQ2ZuT3JpZ2luRW5kcG9pbnQuRW5jcnlwdGlvblByb3BlcnR5IHtcbiAgICBjb25zdCBwID0gdGhpcy5jb25maWc7XG4gICAgaWYgKHAuY29uc3RhbnRJbml0aWFsaXphdGlvblZlY3RvciAmJiBwLmNvbnN0YW50SW5pdGlhbGl6YXRpb25WZWN0b3IubGVuZ3RoICE9PSAzMikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgQ29uc3RhbnRJbml0VmVjdG9yTGVuZ3RoYCwgJ0NvbnN0YW50IEluaXRpYWxpemF0aW9uIFZlY3RvciBuZWVkcyB0byBiZSAzMiBjaGFyYWN0ZXJzIGluIGxlbmd0aC4nLCBzY29wZSk7XG4gICAgfVxuICAgIGlmIChwLmtleVJvdGF0aW9uSW50ZXJ2YWwgJiYgKHAua2V5Um90YXRpb25JbnRlcnZhbC50b1NlY29uZHMoKSA8IDMwMCB8fCBwLmtleVJvdGF0aW9uSW50ZXJ2YWwudG9TZWNvbmRzKCkgPiAzMTUzNjAwMCkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEtleVJvdGF0aW9uSW50ZXJ2YWxSYW5nZWAsICdLZXkgUm90YXRpb24gSW50ZXJ2YWwgbmVlZHMgdG8gYmUgYmV0d2VlbiAzMDAtMzE1MzYwMDAgc2Vjb25kcy4nLCBzY29wZSk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjbWFmRXhjbHVkZVNlZ21lbnREcm1NZXRhZGF0YTogcC5leGNsdWRlU2VnbWVudERybU1ldGFkYXRhLFxuICAgICAgY29uc3RhbnRJbml0aWFsaXphdGlvblZlY3RvcjogcC5jb25zdGFudEluaXRpYWxpemF0aW9uVmVjdG9yLFxuICAgICAga2V5Um90YXRpb25JbnRlcnZhbFNlY29uZHM6IHAua2V5Um90YXRpb25JbnRlcnZhbD8udG9TZWNvbmRzKCksXG4gICAgICBlbmNyeXB0aW9uTWV0aG9kOiB7IGNtYWZFbmNyeXB0aW9uTWV0aG9kOiBwLm1ldGhvZCB9LFxuICAgICAgc3Bla2VLZXlQcm92aWRlcjoge1xuICAgICAgICBjZXJ0aWZpY2F0ZUFybjogcC5jZXJ0aWZpY2F0ZT8uY2VydGlmaWNhdGVBcm4sXG4gICAgICAgIGRybVN5c3RlbXM6IHAuZHJtU3lzdGVtcyxcbiAgICAgICAgZW5jcnlwdGlvbkNvbnRyYWN0Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIHByZXNldFNwZWtlMjBBdWRpbzogcC5hdWRpb1ByZXNldCA/PyBQcmVzZXRTcGVrZTIwQXVkaW8uUFJFU0VUX0FVRElPXzEsXG4gICAgICAgICAgcHJlc2V0U3Bla2UyMFZpZGVvOiBwLnZpZGVvUHJlc2V0ID8/IFByZXNldFNwZWtlMjBWaWRlby5QUkVTRVRfVklERU9fMSxcbiAgICAgICAgfSxcbiAgICAgICAgdXJsOiBwLnVybCxcbiAgICAgICAgcmVzb3VyY2VJZDogcC5yZXNvdXJjZUlkLFxuICAgICAgICByb2xlQXJuOiBwLnJvbGUucm9sZUFybixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9nZXRSb2xlKCk6IElSb2xlIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuY29uZmlnLnJvbGU7IH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBfZ2V0Q2VydGlmaWNhdGUoKTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuY29uZmlnLmNlcnRpZmljYXRlOyB9XG59XG5cbi8qKlxuICogRW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBUUyBzZWdtZW50cy5cbiAqXG4gKiBVc2UgYFRzRW5jcnlwdGlvbi5zcGVrZSgpYCB0byBjcmVhdGUgYW4gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBUc0VuY3J5cHRpb24gZXh0ZW5kcyBFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBTUEVLRS1iYXNlZCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIFRTIHNlZ21lbnRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcGVrZShwcm9wczogVHNTcGVrZUVuY3J5cHRpb25Qcm9wcyk6IFRzRW5jcnlwdGlvbiB7XG4gICAgaWYgKCFwcm9wcy51cmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBTcGVrZVVybEh0dHBzUmVxdWlyZWRgLCAnU1BFS0Uga2V5IHByb3ZpZGVyIFVSTCBtdXN0IHVzZSBIVFRQUy4nKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBUc0VuY3J5cHRpb24ocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFRzU3Bla2VFbmNyeXB0aW9uUHJvcHM7XG4gIHByaXZhdGUgY29uc3RydWN0b3IocHJvcHM6IFRzU3Bla2VFbmNyeXB0aW9uUHJvcHMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY29uZmlnID0gcHJvcHM7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBfYmluZChzY29wZTogQ29uc3RydWN0KTogQ2ZuT3JpZ2luRW5kcG9pbnQuRW5jcnlwdGlvblByb3BlcnR5IHtcbiAgICBjb25zdCBwID0gdGhpcy5jb25maWc7XG4gICAgY29uc3QgZGVmYXVsdERybTogVHNEcm1TeXN0ZW1bXSA9IHAubWV0aG9kID09PSBUc0VuY3J5cHRpb25NZXRob2QuU0FNUExFX0FFU1xuICAgICAgPyBbVHNEcm1TeXN0ZW0uRkFJUlBMQVldIDogW1RzRHJtU3lzdGVtLkNMRUFSX0tFWV9BRVNfMTI4XTtcbiAgICBpZiAocC5jb25zdGFudEluaXRpYWxpemF0aW9uVmVjdG9yICYmIHAuY29uc3RhbnRJbml0aWFsaXphdGlvblZlY3Rvci5sZW5ndGggIT09IDMyKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBDb25zdGFudEluaXRWZWN0b3JMZW5ndGhgLCAnQ29uc3RhbnQgSW5pdGlhbGl6YXRpb24gVmVjdG9yIG5lZWRzIHRvIGJlIDMyIGNoYXJhY3RlcnMgaW4gbGVuZ3RoLicsIHNjb3BlKTtcbiAgICB9XG4gICAgaWYgKHAua2V5Um90YXRpb25JbnRlcnZhbCAmJiAocC5rZXlSb3RhdGlvbkludGVydmFsLnRvU2Vjb25kcygpIDwgMzAwIHx8IHAua2V5Um90YXRpb25JbnRlcnZhbC50b1NlY29uZHMoKSA+IDMxNTM2MDAwKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgS2V5Um90YXRpb25JbnRlcnZhbFJhbmdlYCwgJ0tleSBSb3RhdGlvbiBJbnRlcnZhbCBuZWVkcyB0byBiZSBiZXR3ZWVuIDMwMC0zMTUzNjAwMCBzZWNvbmRzLicsIHNjb3BlKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnN0YW50SW5pdGlhbGl6YXRpb25WZWN0b3I6IHAuY29uc3RhbnRJbml0aWFsaXphdGlvblZlY3RvcixcbiAgICAgIGtleVJvdGF0aW9uSW50ZXJ2YWxTZWNvbmRzOiBwLmtleVJvdGF0aW9uSW50ZXJ2YWw/LnRvU2Vjb25kcygpLFxuICAgICAgZW5jcnlwdGlvbk1ldGhvZDogeyB0c0VuY3J5cHRpb25NZXRob2Q6IHAubWV0aG9kIH0sXG4gICAgICBzcGVrZUtleVByb3ZpZGVyOiB7XG4gICAgICAgIGNlcnRpZmljYXRlQXJuOiBwLmNlcnRpZmljYXRlPy5jZXJ0aWZpY2F0ZUFybixcbiAgICAgICAgZHJtU3lzdGVtczogKHAuZHJtU3lzdGVtcyA/PyBkZWZhdWx0RHJtKS5tYXAoZCA9PiBkLnRvU3RyaW5nKCkpLFxuICAgICAgICBlbmNyeXB0aW9uQ29udHJhY3RDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgcHJlc2V0U3Bla2UyMEF1ZGlvOiBwLmF1ZGlvUHJlc2V0ID8/IFByZXNldFNwZWtlMjBBdWRpby5QUkVTRVRfQVVESU9fMSxcbiAgICAgICAgICBwcmVzZXRTcGVrZTIwVmlkZW86IHAudmlkZW9QcmVzZXQgPz8gUHJlc2V0U3Bla2UyMFZpZGVvLlBSRVNFVF9WSURFT18xLFxuICAgICAgICB9LFxuICAgICAgICB1cmw6IHAudXJsLFxuICAgICAgICByZXNvdXJjZUlkOiBwLnJlc291cmNlSWQsXG4gICAgICAgIHJvbGVBcm46IHAucm9sZS5yb2xlQXJuLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgX2dldFJvbGUoKTogSVJvbGUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5jb25maWcucm9sZTsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9nZXRDZXJ0aWZpY2F0ZSgpOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5jb25maWcuY2VydGlmaWNhdGU7IH1cbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIElTTSAoTWljcm9zb2Z0IFNtb290aCBTdHJlYW1pbmcpIHNlZ21lbnRzLlxuICpcbiAqIElTTSBvbmx5IHN1cHBvcnRzIENFTkMgZW5jcnlwdGlvbiB3aXRoIFBsYXlSZWFkeSBEUk0uXG4gKiBBdWRpbyBhbmQgdmlkZW8gcHJlc2V0cyBhcmUgYWx3YXlzIFNIQVJFRC5cbiAqXG4gKiBVc2UgYElzbUVuY3J5cHRpb24uc3Bla2UoKWAgdG8gY3JlYXRlIGFuIGluc3RhbmNlLlxuICovXG5leHBvcnQgY2xhc3MgSXNtRW5jcnlwdGlvbiBleHRlbmRzIEVuY3J5cHRpb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNQRUtFLWJhc2VkIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgSVNNIHNlZ21lbnRzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzcGVrZShwcm9wczogSXNtU3Bla2VFbmNyeXB0aW9uUHJvcHMpOiBJc21FbmNyeXB0aW9uIHtcbiAgICBpZiAoIXByb3BzLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFNwZWtlVXJsSHR0cHNSZXF1aXJlZGAsICdTUEVLRSBrZXkgcHJvdmlkZXIgVVJMIG11c3QgdXNlIEhUVFBTLicpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IElzbUVuY3J5cHRpb24ocHJvcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IElzbVNwZWtlRW5jcnlwdGlvblByb3BzO1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKHByb3BzOiBJc21TcGVrZUVuY3J5cHRpb25Qcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25maWcgPSBwcm9wcztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9iaW5kKF9zY29wZTogQ29uc3RydWN0KTogQ2ZuT3JpZ2luRW5kcG9pbnQuRW5jcnlwdGlvblByb3BlcnR5IHtcbiAgICBjb25zdCBwID0gdGhpcy5jb25maWc7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVuY3J5cHRpb25NZXRob2Q6IHsgaXNtRW5jcnlwdGlvbk1ldGhvZDogJ0NFTkMnIH0sXG4gICAgICBzcGVrZUtleVByb3ZpZGVyOiB7XG4gICAgICAgIGNlcnRpZmljYXRlQXJuOiBwLmNlcnRpZmljYXRlPy5jZXJ0aWZpY2F0ZUFybixcbiAgICAgICAgZHJtU3lzdGVtczogKHAuZHJtU3lzdGVtcyA/PyBbSXNtRHJtU3lzdGVtLlBMQVlSRUFEWV0pLm1hcChkID0+IGQudG9TdHJpbmcoKSksXG4gICAgICAgIGVuY3J5cHRpb25Db250cmFjdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBwcmVzZXRTcGVrZTIwQXVkaW86IFByZXNldFNwZWtlMjBBdWRpby5TSEFSRUQsXG4gICAgICAgICAgcHJlc2V0U3Bla2UyMFZpZGVvOiBQcmVzZXRTcGVrZTIwVmlkZW8uU0hBUkVELFxuICAgICAgICB9LFxuICAgICAgICB1cmw6IHAudXJsLFxuICAgICAgICByZXNvdXJjZUlkOiBwLnJlc291cmNlSWQsXG4gICAgICAgIHJvbGVBcm46IHAucm9sZS5yb2xlQXJuLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgX2dldFJvbGUoKTogSVJvbGUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5jb25maWcucm9sZTsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9nZXRDZXJ0aWZpY2F0ZSgpOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5jb25maWcuY2VydGlmaWNhdGU7IH1cbn1cblxuLyoqXG4gKiBUaGUgc2VnbWVudCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcgdGhlIHNlZ21lbnQgbmFtZSwgZHVyYXRpb24sIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWdtZW50Q29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgY29udGFpbmVyIHR5cGUgZm9yIHRoaXMgc2VnbWVudCAoVFMgb3IgQ01BRilcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclR5cGU6IENvbnRhaW5lclR5cGU7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzZWdtZW50IGluY2x1ZGVzIEktZnJhbWUtb25seSBzdHJlYW1zLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgLSBOb3Qgc3BlY2lmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZUlmcmFtZU9ubHlTdHJlYW1zPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBTQ1RFLTM1IGNvbmZpZ3VyYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBzZWdtZW50LlxuICAgKlxuICAgKiBUaGUgU0NURS0zNSBtZXNzYWdlIHR5cGVzIHRoYXQgeW91IHdhbnQgdG8gYmUgdHJlYXRlZCBhcyBhZCBtYXJrZXJzIGluIHRoZSBvdXRwdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gU0NURSBmaWx0ZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IHNjdGVGaWx0ZXI/OiBTY3RlTWVzc2FnZVR5cGVbXTtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgU0NURS0zNSBtZXNzYWdlcyBhcmUgaW5jbHVkZWQgaW4gc2VnbWVudCBmaWxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTQ1RFLTM1IG1lc3NhZ2VzIGFyZSBub3QgaW5jbHVkZWQgaW4gc2VnbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHNjdGVJblNlZ21lbnRzPzogU2N0ZUluU2VnbWVudHM7XG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHNlZ21lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCA2XG4gICAqL1xuICByZWFkb25seSBzZWdtZW50RHVyYXRpb24/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZWdtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgb3JpZ2luIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBzZWdtZW50XG4gICAqL1xuICByZWFkb25seSBzZWdtZW50TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHNlZ21lbnQgaW5jbHVkZXMgRFZCIHN1YnRpdGxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHRzSW5jbHVkZUR2YlN1YnRpdGxlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBzZWdtZW50IGlzIGFuIGF1ZGlvIHJlbmRpdGlvbiBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHRzVXNlQXVkaW9SZW5kaXRpb25Hcm91cD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzZWdtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBFbmNyeXB0aW9uQ29uZmlndXJhdGlvbjtcbn1cblxuLyoqXG4gKiBCYXNlIHByb3BlcnRpZXMgY29tbW9uIHRvIGFsbCBzZWdtZW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlZ21lbnRQcm9wc0Jhc2Uge1xuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIEktZnJhbWUtb25seSBzdHJlYW1zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZUlmcmFtZU9ubHlTdHJlYW1zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRHVyYXRpb24gb2YgZWFjaCBzZWdtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDYpXG4gICAqL1xuICByZWFkb25seSBkdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBzZWdtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAnc2VnbWVudCdcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgVFMgKFRyYW5zcG9ydCBTdHJlYW0pIHNlZ21lbnQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUc1NlZ21lbnRQcm9wcyBleHRlbmRzIFNlZ21lbnRQcm9wc0Jhc2Uge1xuICAvKipcbiAgICogU0NURS0zNSBtZXNzYWdlIHR5cGVzIHRvIHRyZWF0IGFzIGFkIG1hcmtlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZmlsdGVyaW5nXG4gICAqL1xuICByZWFkb25seSBzY3RlRmlsdGVyPzogU2N0ZU1lc3NhZ2VUeXBlW107XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgU0NURS0zNSBtZXNzYWdlcyBhcmUgaW5jbHVkZWQgaW4gc2VnbWVudCBmaWxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTQ1RFLTM1IG1lc3NhZ2VzIGFyZSBub3QgaW5jbHVkZWQgaW4gc2VnbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHNjdGVJblNlZ21lbnRzPzogU2N0ZUluU2VnbWVudHM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBEVkIgc3VidGl0bGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZUR2YlN1YnRpdGxlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIGF1ZGlvIHJlbmRpdGlvbiBncm91cHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB1c2VBdWRpb1JlbmRpdGlvbkdyb3VwPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciB0aGUgVFMgc2VnbWVudC5cbiAgICpcbiAgICogVXNlIGBUc0VuY3J5cHRpb24uc3Bla2UoKWAgdG8gY3JlYXRlIHRoZSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBUc0VuY3J5cHRpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgQ01BRiBzZWdtZW50IGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ21hZlNlZ21lbnRQcm9wcyBleHRlbmRzIFNlZ21lbnRQcm9wc0Jhc2Uge1xuICAvKipcbiAgICogU0NURS0zNSBtZXNzYWdlIHR5cGVzIHRvIHRyZWF0IGFzIGFkIG1hcmtlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZmlsdGVyaW5nXG4gICAqL1xuICByZWFkb25seSBzY3RlRmlsdGVyPzogU2N0ZU1lc3NhZ2VUeXBlW107XG5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgU0NURS0zNSBtZXNzYWdlcyBhcmUgaW5jbHVkZWQgaW4gc2VnbWVudCBmaWxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTQ1RFLTM1IG1lc3NhZ2VzIGFyZSBub3QgaW5jbHVkZWQgaW4gc2VnbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHNjdGVJblNlZ21lbnRzPzogU2N0ZUluU2VnbWVudHM7XG5cbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIENNQUYgc2VnbWVudC5cbiAgICpcbiAgICogVXNlIGBDbWFmRW5jcnlwdGlvbi5zcGVrZSgpYCB0byBjcmVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZW5jcnlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbj86IENtYWZFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIElTTSAoTWljcm9zb2Z0IFNtb290aCBTdHJlYW1pbmcpIHNlZ21lbnQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc21TZWdtZW50UHJvcHMgZXh0ZW5kcyBTZWdtZW50UHJvcHNCYXNlIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIElTTSBzZWdtZW50LlxuICAgKlxuICAgKiBVc2UgYElzbUVuY3J5cHRpb24uc3Bla2UoKWAgdG8gY3JlYXRlIHRoZSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb24/OiBJc21FbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgY3JlYXRpbmcgc2VnbWVudCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlZ21lbnQge1xuICAvKipcbiAgICogQ3JlYXRlIGEgVFMgKFRyYW5zcG9ydCBTdHJlYW0pIHNlZ21lbnQgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogVXNlIHRoaXMgZm9yIGVuZHBvaW50cyB3aXRoIENvbnRhaW5lclR5cGUuVFMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRzKHByb3BzOiBUc1NlZ21lbnRQcm9wcyA9IHt9KTogU2VnbWVudENvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBjb250YWluZXJUeXBlOiBDb250YWluZXJUeXBlLlRTLFxuICAgICAgaW5jbHVkZUlmcmFtZU9ubHlTdHJlYW1zOiBwcm9wcy5pbmNsdWRlSWZyYW1lT25seVN0cmVhbXMsXG4gICAgICBzY3RlRmlsdGVyOiBwcm9wcy5zY3RlRmlsdGVyLFxuICAgICAgc2N0ZUluU2VnbWVudHM6IHByb3BzLnNjdGVJblNlZ21lbnRzLFxuICAgICAgc2VnbWVudER1cmF0aW9uOiBwcm9wcy5kdXJhdGlvbixcbiAgICAgIHNlZ21lbnROYW1lOiBwcm9wcy5uYW1lLFxuICAgICAgdHNJbmNsdWRlRHZiU3VidGl0bGVzOiBwcm9wcy5pbmNsdWRlRHZiU3VidGl0bGVzLFxuICAgICAgdHNVc2VBdWRpb1JlbmRpdGlvbkdyb3VwOiBwcm9wcy51c2VBdWRpb1JlbmRpdGlvbkdyb3VwLFxuICAgICAgZW5jcnlwdGlvbjogcHJvcHMuZW5jcnlwdGlvbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIENNQUYgc2VnbWVudCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyBmb3IgZW5kcG9pbnRzIHdpdGggQ29udGFpbmVyVHlwZS5DTUFGLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjbWFmKHByb3BzOiBDbWFmU2VnbWVudFByb3BzID0ge30pOiBTZWdtZW50Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRhaW5lclR5cGU6IENvbnRhaW5lclR5cGUuQ01BRixcbiAgICAgIGluY2x1ZGVJZnJhbWVPbmx5U3RyZWFtczogcHJvcHMuaW5jbHVkZUlmcmFtZU9ubHlTdHJlYW1zLFxuICAgICAgc2N0ZUZpbHRlcjogcHJvcHMuc2N0ZUZpbHRlcixcbiAgICAgIHNjdGVJblNlZ21lbnRzOiBwcm9wcy5zY3RlSW5TZWdtZW50cyxcbiAgICAgIHNlZ21lbnREdXJhdGlvbjogcHJvcHMuZHVyYXRpb24sXG4gICAgICBzZWdtZW50TmFtZTogcHJvcHMubmFtZSxcbiAgICAgIGVuY3J5cHRpb246IHByb3BzLmVuY3J5cHRpb24sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSVNNIChNaWNyb3NvZnQgU21vb3RoIFN0cmVhbWluZykgc2VnbWVudCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyBmb3IgZW5kcG9pbnRzIHdpdGggQ29udGFpbmVyVHlwZS5JU00uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzbShwcm9wczogSXNtU2VnbWVudFByb3BzID0ge30pOiBTZWdtZW50Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRhaW5lclR5cGU6IENvbnRhaW5lclR5cGUuSVNNLFxuICAgICAgaW5jbHVkZUlmcmFtZU9ubHlTdHJlYW1zOiBwcm9wcy5pbmNsdWRlSWZyYW1lT25seVN0cmVhbXMsXG4gICAgICBzZWdtZW50RHVyYXRpb246IHByb3BzLmR1cmF0aW9uLFxuICAgICAgc2VnbWVudE5hbWU6IHByb3BzLm5hbWUsXG4gICAgICBlbmNyeXB0aW9uOiBwcm9wcy5lbmNyeXB0aW9uLFxuICAgIH07XG4gIH1cbn1cblxuYWJzdHJhY3QgY2xhc3MgT3JpZ2luRW5kcG9pbnRCYXNlIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJT3JpZ2luRW5kcG9pbnQge1xuICAvKipcbiAgICogQ3JlYXRlcyBhbiBPcmlnaW5FbmRwb2ludCBjb25zdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGFuIGV4dGVybmFsIChpbXBvcnRlZCkgT3JpZ2luIEVuZHBvaW50IGZyb20gaXRzIEFSTi5cbiAgICpcbiAgICogVGhlIEFSTiBpcyBleHBlY3RlZCB0byBiZSBpbiB0aGUgZm9ybWF0OlxuICAgKiBgYXJuOjxwYXJ0aXRpb24+Om1lZGlhcGFja2FnZXYyOjxyZWdpb24+OjxhY2NvdW50PjpjaGFubmVsR3JvdXAvPGdyb3VwTmFtZT4vY2hhbm5lbC88Y2hhbm5lbE5hbWU+L29yaWdpbkVuZHBvaW50LzxlbmRwb2ludE5hbWU+YFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT3JpZ2luRW5kcG9pbnRBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgb3JpZ2luRW5kcG9pbnRBcm46IHN0cmluZyk6IElPcmlnaW5FbmRwb2ludCB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChvcmlnaW5FbmRwb2ludEFybikpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBUb2tlbkFybk5vdFN1cHBvcnRlZGAsXG4gICAgICAgICdDYW5ub3QgcGFyc2UgYSB0b2tlbiBBUk4uIFVzZSBPcmlnaW5FbmRwb2ludC5mcm9tT3JpZ2luRW5kcG9pbnRBdHRyaWJ1dGVzKCkgd2l0aCBleHBsaWNpdCBjaGFubmVsR3JvdXBOYW1lLCBjaGFubmVsTmFtZSwgb3JpZ2luRW5kcG9pbnROYW1lLCBhbmQgcmVnaW9uIHZhbHVlcyBpbnN0ZWFkLicsXG4gICAgICAgIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkQXJuID0gU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKG9yaWdpbkVuZHBvaW50QXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSk7XG4gICAgLy8gcmVzb3VyY2VOYW1lIGlzIFwiPGdyb3VwTmFtZT4vY2hhbm5lbC88Y2hhbm5lbE5hbWU+L29yaWdpbkVuZHBvaW50LzxlbmRwb2ludE5hbWU+XCJcbiAgICBjb25zdCBbY2hhbm5lbEdyb3VwTmFtZSwgLCBjaGFubmVsTmFtZSwgLCBvcmlnaW5FbmRwb2ludE5hbWVdID0gcGFyc2VkQXJuLnJlc291cmNlTmFtZT8uc3BsaXQoJy8nKSA/PyBbXTtcbiAgICBpZiAoIWNoYW5uZWxHcm91cE5hbWUgfHwgIWNoYW5uZWxOYW1lIHx8ICFvcmlnaW5FbmRwb2ludE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBJbnZhbGlkT3JpZ2luRW5kcG9pbnRBcm5gLFxuICAgICAgICBgQ291bGQgbm90IHBhcnNlIG9yaWdpbiBlbmRwb2ludCBBUk46ICR7b3JpZ2luRW5kcG9pbnRBcm59LiBFeHBlY3RlZCBmb3JtYXQ6IGFybjo8cGFydGl0aW9uPjptZWRpYXBhY2thZ2V2Mjo8cmVnaW9uPjo8YWNjb3VudD46Y2hhbm5lbEdyb3VwLzxncm91cE5hbWU+L2NoYW5uZWwvPGNoYW5uZWxOYW1lPi9vcmlnaW5FbmRwb2ludC88ZW5kcG9pbnROYW1lPmAsXG4gICAgICAgIHNjb3BlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIE9yaWdpbkVuZHBvaW50QmFzZS5mcm9tT3JpZ2luRW5kcG9pbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgY2hhbm5lbEdyb3VwTmFtZSxcbiAgICAgIGNoYW5uZWxOYW1lLFxuICAgICAgb3JpZ2luRW5kcG9pbnROYW1lLFxuICAgICAgcmVnaW9uOiBwYXJzZWRBcm4ucmVnaW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gT3JpZ2luRW5kcG9pbnQgY29uc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCAoaW1wb3J0ZWQpIE9yaWdpbiBFbmRwb2ludC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9yaWdpbkVuZHBvaW50QXR0cmlidXRlcyhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBhdHRyczogT3JpZ2luRW5kcG9pbnRBdHRyaWJ1dGVzKTogSU9yaWdpbkVuZHBvaW50IHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBPcmlnaW5FbmRwb2ludEJhc2UgaW1wbGVtZW50cyBJT3JpZ2luRW5kcG9pbnQge1xuICAgICAgcHJvdGVjdGVkIGhsc01hbmlmZXN0czogQ2ZuT3JpZ2luRW5kcG9pbnQuSGxzTWFuaWZlc3RDb25maWd1cmF0aW9uUHJvcGVydHlbXSA9IFtdO1xuICAgICAgcHJvdGVjdGVkIGxsSGxzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5Mb3dMYXRlbmN5SGxzTWFuaWZlc3RDb25maWd1cmF0aW9uUHJvcGVydHlbXSA9IFtdO1xuICAgICAgcHJvdGVjdGVkIGRhc2hNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50LkRhc2hNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW107XG4gICAgICBwcm90ZWN0ZWQgbXNzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5Nc3NNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW107XG4gICAgICBwcm90ZWN0ZWQgc2VnbWVudD86IFNlZ21lbnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBvbGljeSA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjaGFubmVsR3JvdXBOYW1lID0gYXR0cnMuY2hhbm5lbEdyb3VwTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjaGFubmVsTmFtZSA9IGF0dHJzLmNoYW5uZWxOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9yaWdpbkVuZHBvaW50TmFtZSA9IGF0dHJzLm9yaWdpbkVuZHBvaW50TmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbW9kaWZpZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBobHNNYW5pZmVzdFVybHMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgbG93TGF0ZW5jeUhsc01hbmlmZXN0VXJscyA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkYXNoTWFuaWZlc3RVcmxzID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG1zc01hbmlmZXN0VXJscyA9IHVuZGVmaW5lZDtcbiAgICAgIHByb3RlY3RlZCBhdXRvQ3JlYXRlUG9saWN5ID0gZmFsc2U7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb3JpZ2luRW5kcG9pbnRBcm4gPSBTdGFjay5vZih0aGlzKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiAnbWVkaWFwYWNrYWdldjInLFxuICAgICAgICByZXNvdXJjZTogYGNoYW5uZWxHcm91cC8ke2F0dHJzLmNoYW5uZWxHcm91cE5hbWV9L2NoYW5uZWwvJHt0aGlzLmNoYW5uZWxOYW1lfS9vcmlnaW5FbmRwb2ludGAsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICAgIHJlc291cmNlTmFtZTogdGhpcy5vcmlnaW5FbmRwb2ludE5hbWUsXG4gICAgICAgIHJlZ2lvbjogYXR0cnMucmVnaW9uLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjaGFubmVsR3JvdXBOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBjaGFubmVsTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgb3JpZ2luRW5kcG9pbnROYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBvcmlnaW5FbmRwb2ludEFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbW9kaWZpZWRBdD86IHN0cmluZztcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGhsc01hbmlmZXN0VXJscz86IHN0cmluZ1tdO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbG93TGF0ZW5jeUhsc01hbmlmZXN0VXJscz86IHN0cmluZ1tdO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgZGFzaE1hbmlmZXN0VXJscz86IHN0cmluZ1tdO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbXNzTWFuaWZlc3RVcmxzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgcmVmZXJlbmNlIHRvIHRoaXMgT3JpZ2luIEVuZHBvaW50IHJlc291cmNlLlxuICAgKiBSZXF1aXJlZCBieSB0aGUgYXV0by1nZW5lcmF0ZWQgSU9yaWdpbkVuZHBvaW50UmVmIGludGVyZmFjZS5cbiAgICovXG4gIHB1YmxpYyBnZXQgb3JpZ2luRW5kcG9pbnRSZWYoKTogT3JpZ2luRW5kcG9pbnRSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICBvcmlnaW5FbmRwb2ludEFybjogdGhpcy5vcmlnaW5FbmRwb2ludEFybixcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGhsc01hbmlmZXN0czogQ2ZuT3JpZ2luRW5kcG9pbnQuSGxzTWFuaWZlc3RDb25maWd1cmF0aW9uUHJvcGVydHlbXTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGxsSGxzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5Mb3dMYXRlbmN5SGxzTWFuaWZlc3RDb25maWd1cmF0aW9uUHJvcGVydHlbXTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGRhc2hNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50LkRhc2hNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgbXNzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5Nc3NNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2VnbWVudD86IFNlZ21lbnRDb25maWd1cmF0aW9uO1xuICAvKipcbiAgICogVGhlIHJlc291cmNlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIElmIGBhdXRvQ3JlYXRlUG9saWN5YCBpcyB0cnVlLCBhbiBgT3JpZ2luRW5kcG9pbnRQb2xpY3lgIHdpbGwgYmUgY3JlYXRlZCB1cG9uIHRoZVxuICAgKiBmaXJzdCBjYWxsIHRvIGFkZFRvUmVzb3VyY2VQb2xpY3kocykuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcG9saWN5PzogT3JpZ2luRW5kcG9pbnRQb2xpY3k7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBhbiBvcmlnaW4gZW5kcG9pbnQgcmVzb3VyY2UgcG9saWN5IHNob3VsZCBhdXRvbWF0aWNhbGx5IGJlIGNyZWF0ZWQgdXBvblxuICAgKiB0aGUgZmlyc3QgY2FsbCB0byBgYWRkVG9SZXNvdXJjZVBvbGljeWAuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgYXV0b0NyZWF0ZVBvbGljeTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ0ROIGF1dGhvcml6YXRpb24gY29uZmlndXJhdGlvbiB0byBiZSBhcHBsaWVkIHdoZW4gdGhlIHBvbGljeSBpcyBjcmVhdGVkLlxuICAgKiBTZXQgYnkgc3ViY2xhc3MgY29uc3RydWN0b3JzIHdoZW4gYGNkbkF1dGhgIGlzIHByb3ZpZGVkIGluIHByb3BzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNkbkF1dGhDb25maWc/OiBDZG5BdXRoQ29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQ29uZmlndXJlIG9yaWdpbiBlbmRwb2ludCBwb2xpY3kuXG4gICAqXG4gICAqIFlvdSBjYW4gb25seSBhZGQgMSBPcmlnaW5FbmRwb2ludFBvbGljeSB0byBhbiBPcmlnaW5FbmRwb2ludC4gSWYgeW91IGhhdmUgYWxyZWFkeVxuICAgKiBkZWZpbmVkIG9uZSwgdGhpcyB3aWxsIGFwcGVuZCB0byB0aGUgcG9saWN5IGFscmVhZHkgY3JlYXRlZC5cbiAgICpcbiAgICogVG8gY29uZmlndXJlIENETiBhdXRoZW50aWNhdGlvbiwgc2V0IGBjZG5BdXRoYCBvbiB0aGUgY29uc3RydWN0J3MgcHJvcHMgaW5zdGVhZC5cbiAgICpcbiAgICogQHBhcmFtIHN0YXRlbWVudCAtIFRoZSBwb2xpY3kgc3RhdGVtZW50IHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZFRvUmVzb3VyY2VQb2xpY3koc3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQpOiBBZGRUb1Jlc291cmNlUG9saWN5UmVzdWx0IHtcbiAgICBpZiAoIXRoaXMucG9saWN5ICYmIHRoaXMuYXV0b0NyZWF0ZVBvbGljeSkge1xuICAgICAgdGhpcy5wb2xpY3kgPSBuZXcgT3JpZ2luRW5kcG9pbnRQb2xpY3kodGhpcywgJ1BvbGljeScsIHtcbiAgICAgICAgb3JpZ2luRW5kcG9pbnQ6IHRoaXMsXG4gICAgICAgIGNkbkF1dGg6IHRoaXMuY2RuQXV0aENvbmZpZyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBvbGljeSkge1xuICAgICAgdGhpcy5wb2xpY3kuZG9jdW1lbnQuYWRkU3RhdGVtZW50cyhzdGF0ZW1lbnQpO1xuICAgICAgcmV0dXJuIHsgc3RhdGVtZW50QWRkZWQ6IHRydWUsIHBvbGljeURlcGVuZGFibGU6IHRoaXMucG9saWN5IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhdGVtZW50QWRkZWQ6IGZhbHNlIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYW5kIG1vZGlmeSBTZWdtZW50IGNvbmZpZ3VyYXRpb24gZm9yIGVuZHBvaW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIHNlZ21lbnRWYWxpZGF0aW9uKHNlZ21lbnRDb250YWluZXJUeXBlOiBDb250YWluZXJUeXBlLCBzZWdtZW50PzogU2VnbWVudENvbmZpZ3VyYXRpb24pOiBDZm5PcmlnaW5FbmRwb2ludC5TZWdtZW50UHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGlmIChzZWdtZW50Py5zZWdtZW50RHVyYXRpb24gJiYgKHNlZ21lbnQuc2VnbWVudER1cmF0aW9uPy50b1NlY29uZHMoKSA8IDEgfHwgc2VnbWVudC5zZWdtZW50RHVyYXRpb24/LnRvU2Vjb25kcygpID4gMzApKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBTZWdtZW50RHVyYXRpb25SYW5nZWAsICdTZWdtZW50IER1cmF0aW9uIG5lZWRzIHRvIGJlIGJldHdlZW4gMS0zMCBzZWNvbmRzLicsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChzZWdtZW50Q29udGFpbmVyVHlwZSAhPSBDb250YWluZXJUeXBlLlRTICYmIChzZWdtZW50Py50c0luY2x1ZGVEdmJTdWJ0aXRsZXMgfHwgc2VnbWVudD8udHNVc2VBdWRpb1JlbmRpdGlvbkdyb3VwKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgVHNPcHRpb25zSW5jb21wYXRpYmxlYCwgJ0Rpc2FibGUgVFMgU2VnbWVudCBvcHRpb25zIGZvciBEdmJTdWJ0aXRsZXMgYW5kIEF1ZGlvUmVuZGl0aW9uR3JvdXBzIHdoZW4gdXNpbmcgQ01BRi4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5jbHVkZUlmcmFtZU9ubHlTdHJlYW1zOiBzZWdtZW50Py5pbmNsdWRlSWZyYW1lT25seVN0cmVhbXMsXG4gICAgICBzZWdtZW50RHVyYXRpb25TZWNvbmRzOiBzZWdtZW50Py5zZWdtZW50RHVyYXRpb24/LnRvU2Vjb25kcygpLFxuICAgICAgc2VnbWVudE5hbWU6IHNlZ21lbnQ/LnNlZ21lbnROYW1lLFxuICAgICAgdHNJbmNsdWRlRHZiU3VidGl0bGVzOiBzZWdtZW50Py50c0luY2x1ZGVEdmJTdWJ0aXRsZXMsXG4gICAgICB0c1VzZUF1ZGlvUmVuZGl0aW9uR3JvdXA6IHNlZ21lbnQ/LnRzVXNlQXVkaW9SZW5kaXRpb25Hcm91cCxcbiAgICAgIHNjdGU6IChzZWdtZW50Py5zY3RlRmlsdGVyIHx8IHNlZ21lbnQ/LnNjdGVJblNlZ21lbnRzKSA/IHtcbiAgICAgICAgc2N0ZUZpbHRlcjogc2VnbWVudD8uc2N0ZUZpbHRlcixcbiAgICAgICAgc2N0ZUluU2VnbWVudHM6IHNlZ21lbnQ/LnNjdGVJblNlZ21lbnRzLFxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgIGVuY3J5cHRpb246IHNlZ21lbnQ/LmVuY3J5cHRpb24/Ll9iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2xvdWRXYXRjaCBtZXRyaWMuXG4gICAqXG4gICAqIEBwYXJhbSBtZXRyaWNOYW1lIG5hbWUgb2YgdGhlIG1ldHJpYy5cbiAgICogQHBhcmFtIHByb3BzIG1ldHJpYyBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIG1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5hbWVzcGFjZTogJ0FXUy9NZWRpYVBhY2thZ2UnLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBDaGFubmVsR3JvdXA6IHRoaXMuY2hhbm5lbEdyb3VwTmFtZSxcbiAgICAgICAgQ2hhbm5lbDogdGhpcy5jaGFubmVsTmFtZSxcbiAgICAgICAgT3JpZ2luRW5kcG9pbnQ6IHRoaXMub3JpZ2luRW5kcG9pbnROYW1lLFxuICAgICAgfSxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pLmF0dGFjaFRvKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgTWV0cmljIGZvciBJbmdyZXNzIEJ5dGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0luZ3Jlc3NCeXRlcyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnSW5ncmVzc0J5dGVzJywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkJZVEVTLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBNZXRyaWMgZm9yIEVncmVzcyBCeXRlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNFZ3Jlc3NCeXRlcyhwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnRWdyZXNzQnl0ZXMnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdzdW0nLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuQllURVMsXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIE1ldHJpYyBmb3IgSW5ncmVzcyByZXNwb25zZSB0aW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXZlcmFnZSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNJbmdyZXNzUmVzcG9uc2VUaW1lKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdJbmdyZXNzUmVzcG9uc2VUaW1lJywge1xuICAgICAgc3RhdGlzdGljOiAnYXZnJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0Lk1JTExJU0VDT05EUyxcbiAgICAgIC4uLnByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgTWV0cmljIGZvciBFZ3Jlc3MgUmVzcG9uc2UgdGltZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF2ZXJhZ2Ugb3ZlciA2MCBzZWNvbmRzXG4gICAqL1xuICBwdWJsaWMgbWV0cmljRWdyZXNzUmVzcG9uc2VUaW1lKHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdFZ3Jlc3NSZXNwb25zZVRpbWUnLCB7XG4gICAgICBzdGF0aXN0aWM6ICdhdmcnLFxuICAgICAgcGVyaW9kOiBEdXJhdGlvbi5zZWNvbmRzKDYwKSxcbiAgICAgIHVuaXQ6IFVuaXQuTUlMTElTRUNPTkRTLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBNZXRyaWMgZm9yIEVncmVzcyBSZXF1ZXN0IENvdW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc3VtIG92ZXIgNjAgc2Vjb25kc1xuICAgKi9cbiAgcHVibGljIG1ldHJpY0VncmVzc1JlcXVlc3RDb3VudChwcm9wcz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiB0aGlzLm1ldHJpYygnRWdyZXNzUmVxdWVzdENvdW50Jywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkNPVU5ULFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBNZXRyaWMgZm9yIEluZ3Jlc3MgUmVxdWVzdCBDb3VudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHN1bSBvdmVyIDYwIHNlY29uZHNcbiAgICovXG4gIHB1YmxpYyBtZXRyaWNJbmdyZXNzUmVxdWVzdENvdW50KHByb3BzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIHRoaXMubWV0cmljKCdJbmdyZXNzUmVxdWVzdENvdW50Jywge1xuICAgICAgc3RhdGlzdGljOiAnc3VtJyxcbiAgICAgIHBlcmlvZDogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICB1bml0OiBVbml0LkNPVU5ULFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEZWZpbmVzIGFuIEFXUyBFbGVtZW50YWwgTWVkaWFQYWNrYWdlIFYyIE9yaWdpbiBFbmRwb2ludFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgT3JpZ2luRW5kcG9pbnQgZXh0ZW5kcyBPcmlnaW5FbmRwb2ludEJhc2UgaW1wbGVtZW50cyBJT3JpZ2luRW5kcG9pbnQge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1tZWRpYXBhY2thZ2V2Mi1hbHBoYS5PcmlnaW5FbmRwb2ludCc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNoYW5uZWxHcm91cE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNoYW5uZWxOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBvcmlnaW5FbmRwb2ludE5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IG9yaWdpbkVuZHBvaW50QXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgb2YgdGhlIGNyZWF0aW9uIG9mIHRoZSBvcmlnaW4gZW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIG9mIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIG9yaWdpbiBlbmRwb2ludC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb2RpZmllZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBcnJheSBjb250YWluaW5nIExvdyBMYXRlbmN5IEhMUyBNYW5pZmVzdHMgY3JlYXRlZCBieSB0aGUgT3JpZ2luRW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbG93TGF0ZW5jeUhsc01hbmlmZXN0VXJscz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBcnJheSBjb250YWluaW5nIEhMUyBNYW5pZmVzdHMgY3JlYXRlZCBieSB0aGUgT3JpZ2luRW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaGxzTWFuaWZlc3RVcmxzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFycmF5IGNvbnRhaW5pbmcgREFTSCBNYW5pZmVzdHMgY3JlYXRlZCBieSB0aGUgT3JpZ2luRW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGFzaE1hbmlmZXN0VXJscz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogQXJyYXkgY29udGFpbmluZyBNU1MgTWFuaWZlc3RzIGNyZWF0ZWQgYnkgdGhlIE9yaWdpbkVuZHBvaW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1zc01hbmlmZXN0VXJscz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogVGhlIHJlc291cmNlIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGhpcyBvcmlnaW4gZW5kcG9pbnQuXG4gICAqXG4gICAqIElmIGBhdXRvQ3JlYXRlUG9saWN5YCBpcyB0cnVlLCBhbiBgT3JpZ2luRW5kcG9pbnRQb2xpY3lgIHdpbGwgYmUgY3JlYXRlZCB1cG9uIHRoZVxuICAgKiBmaXJzdCBjYWxsIHRvIGFkZFRvUmVzb3VyY2VQb2xpY3kocykuXG4gICAqL1xuICBwdWJsaWMgcG9saWN5PzogT3JpZ2luRW5kcG9pbnRQb2xpY3k7XG4gIHByb3RlY3RlZCBhdXRvQ3JlYXRlUG9saWN5ID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGhsc01hbmlmZXN0czogQ2ZuT3JpZ2luRW5kcG9pbnQuSGxzTWFuaWZlc3RDb25maWd1cmF0aW9uUHJvcGVydHlbXSA9IFtdO1xuICBwcm90ZWN0ZWQgbGxIbHNNYW5pZmVzdHM6IENmbk9yaWdpbkVuZHBvaW50Lkxvd0xhdGVuY3lIbHNNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW107XG4gIHByb3RlY3RlZCBkYXNoTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5EYXNoTWFuaWZlc3RDb25maWd1cmF0aW9uUHJvcGVydHlbXSA9IFtdO1xuICBwcm90ZWN0ZWQgbXNzTWFuaWZlc3RzOiBDZm5PcmlnaW5FbmRwb2ludC5Nc3NNYW5pZmVzdENvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdID0gW107XG4gIHByb3RlY3RlZCBzZWdtZW50PzogU2VnbWVudENvbmZpZ3VyYXRpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE9yaWdpbkVuZHBvaW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHM/Lm9yaWdpbkVuZHBvaW50TmFtZSA/PyBMYXp5LnN0cmluZyh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgbWF4TGVuZ3RoOiAyNTYsXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIC8vIFZhbGlkYXRlIG9yaWdpbkVuZHBvaW50TmFtZSBpZiBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5vcmlnaW5FbmRwb2ludE5hbWUgIT0gbnVsbCAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLm9yaWdpbkVuZHBvaW50TmFtZSkpIHtcbiAgICAgIGlmIChwcm9wcy5vcmlnaW5FbmRwb2ludE5hbWUubGVuZ3RoIDwgMSB8fCBwcm9wcy5vcmlnaW5FbmRwb2ludE5hbWUubGVuZ3RoID4gMjU2KSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YE9yaWdpbkVuZHBvaW50TmFtZUxlbmd0aGAsICdPcmlnaW4gZW5kcG9pbnQgbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU2IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLicsIHRoaXMpO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9wcy5vcmlnaW5FbmRwb2ludE5hbWUubWF0Y2goL15bYS16QS1aMC05Xy1dKyQvKSkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBPcmlnaW5FbmRwb2ludE5hbWVQYXR0ZXJuYCwgJ09yaWdpbiBlbmRwb2ludCBuYW1lIG11c3Qgb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMuJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZGVzY3JpcHRpb24gaWYgcHJvdmlkZWRcbiAgICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5kZXNjcmlwdGlvbikgJiYgcHJvcHMuZGVzY3JpcHRpb24ubGVuZ3RoID4gMTAyNCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgT3JpZ2luRW5kcG9pbnREZXNjcmlwdGlvbkxlbmd0aGAsICdPcmlnaW4gZW5kcG9pbnQgZGVzY3JpcHRpb24gbXVzdCBub3QgZXhjZWVkIDEwMjQgY2hhcmFjdGVycy4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlZ21lbnQgPSBwcm9wcy5zZWdtZW50O1xuXG4gICAgLy8gR2V0IGNvbnRhaW5lciB0eXBlIGZyb20gc2VnbWVudFxuICAgIGNvbnN0IGNvbnRhaW5lclR5cGUgPSBwcm9wcy5zZWdtZW50LmNvbnRhaW5lclR5cGU7XG5cbiAgICBpZiAocHJvcHM/LnN0YXJ0b3ZlcldpbmRvdyAmJiAocHJvcHMuc3RhcnRvdmVyV2luZG93LnRvU2Vjb25kcygpIDwgNjAgfHwgcHJvcHMuc3RhcnRvdmVyV2luZG93LnRvU2Vjb25kcygpID4gMTIwOTYwMCkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFN0YXJ0b3ZlcldpbmRvd1JhbmdlYCwgJ1N0YXJ0b3ZlciBXaW5kb3cgbmVlZHMgdG8gYmUgYmV0d2VlbiA2MC0xMjA5NjAwIHNlY29uZHMuJywgdGhpcyk7XG4gICAgfVxuXG4gICAgcHJvcHMubWFuaWZlc3RzLmZvckVhY2gobWFuaWZlc3QgPT4ge1xuICAgICAgbWFuaWZlc3QuX2JpbmQoe1xuICAgICAgICBobHNNYW5pZmVzdHM6IHRoaXMuaGxzTWFuaWZlc3RzLFxuICAgICAgICBsbEhsc01hbmlmZXN0czogdGhpcy5sbEhsc01hbmlmZXN0cyxcbiAgICAgICAgZGFzaE1hbmlmZXN0czogdGhpcy5kYXNoTWFuaWZlc3RzLFxuICAgICAgICBtc3NNYW5pZmVzdHM6IHRoaXMubXNzTWFuaWZlc3RzLFxuICAgICAgICBzZWdtZW50OiBwcm9wcy5zZWdtZW50LFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBtYW5pZmVzdCBuYW1lIHVuaXF1ZW5lc3MgYWNyb3NzIGFsbCBtYW5pZmVzdCB0eXBlc1xuICAgIGNvbnN0IGFsbE1hbmlmZXN0TmFtZXMgPSBbXG4gICAgICAuLi50aGlzLmhsc01hbmlmZXN0cy5tYXAobSA9PiBtLm1hbmlmZXN0TmFtZSksXG4gICAgICAuLi50aGlzLmxsSGxzTWFuaWZlc3RzLm1hcChtID0+IG0ubWFuaWZlc3ROYW1lKSxcbiAgICAgIC4uLnRoaXMuZGFzaE1hbmlmZXN0cy5tYXAobSA9PiBtLm1hbmlmZXN0TmFtZSksXG4gICAgICAuLi50aGlzLm1zc01hbmlmZXN0cy5tYXAobSA9PiBtLm1hbmlmZXN0TmFtZSksXG4gICAgXS5maWx0ZXIobmFtZSA9PiAhVG9rZW4uaXNVbnJlc29sdmVkKG5hbWUpKTtcblxuICAgIGNvbnN0IGR1cGxpY2F0ZU5hbWVzID0gWy4uLm5ldyBTZXQoYWxsTWFuaWZlc3ROYW1lcy5maWx0ZXIoKG5hbWUsIGkpID0+IGFsbE1hbmlmZXN0TmFtZXMuaW5kZXhPZihuYW1lKSAhPT0gaSkpXTtcbiAgICBpZiAoZHVwbGljYXRlTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YER1cGxpY2F0ZU1hbmlmZXN0TmFtZWAsXG4gICAgICAgIGBEdXBsaWNhdGUgbWFuaWZlc3QgbmFtZXM6IFske2R1cGxpY2F0ZU5hbWVzLmpvaW4oJywgJyl9XS4gRWFjaCBtYW5pZmVzdCBpbiBhbiBPcmlnaW5FbmRwb2ludCBtdXN0IGhhdmUgYSB1bmlxdWUgbWFuaWZlc3ROYW1lLmAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1hbmlmZXN0IGFuZCBjb250YWluZXIgdHlwZSBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHRoaXMubXNzTWFuaWZlc3RzLmxlbmd0aCA+IDAgJiYgY29udGFpbmVyVHlwZSAhPT0gQ29udGFpbmVyVHlwZS5JU00pIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YE1zc1JlcXVpcmVzSXNtYCwgJ01TUyBtYW5pZmVzdHMgcmVxdWlyZSBJU00gY29udGFpbmVyIHR5cGUuIFVzZSBTZWdtZW50LmlzbSgpIGZvciBNU1MgbWFuaWZlc3RzLicsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRhc2hNYW5pZmVzdHMubGVuZ3RoID4gMCAmJiBjb250YWluZXJUeXBlICE9PSBDb250YWluZXJUeXBlLkNNQUYpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YERhc2hSZXF1aXJlc0NtYWZgLCAnREFTSCBtYW5pZmVzdHMgcmVxdWlyZSBDTUFGIGNvbnRhaW5lciB0eXBlLiBVc2UgU2VnbWVudC5jbWFmKCkgZm9yIERBU0ggbWFuaWZlc3RzLicsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICgodGhpcy5obHNNYW5pZmVzdHMubGVuZ3RoID4gMCB8fCB0aGlzLmxsSGxzTWFuaWZlc3RzLmxlbmd0aCA+IDApICYmIGNvbnRhaW5lclR5cGUgPT09IENvbnRhaW5lclR5cGUuSVNNKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBIbHNJbmNvbXBhdGlibGVXaXRoSXNtYCwgJ0hMUyBhbmQgTG93IExhdGVuY3kgSExTIG1hbmlmZXN0cyBhcmUgbm90IHN1cHBvcnRlZCB3aXRoIElTTSBjb250YWluZXIgdHlwZS4gVXNlIFNlZ21lbnQuY21hZigpIG9yIFNlZ21lbnQudHMoKSBmb3IgSExTIG1hbmlmZXN0cy4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBEUk0gc2lnbmFsbGluZyByZXF1aXJlcyBlbmNyeXB0aW9uXG4gICAgaWYgKHRoaXMuZGFzaE1hbmlmZXN0cy5zb21lKG0gPT4gbS5kcm1TaWduYWxpbmcpICYmICFwcm9wcy5zZWdtZW50LmVuY3J5cHRpb24pIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YERybVNpZ25hbGxpbmdSZXF1aXJlc0VuY3J5cHRpb25gLCAnRFJNIHNpZ25hbGxpbmcgcmVxdWlyZXMgZW5jcnlwdGlvbiB0byBiZSBjb25maWd1cmVkIG9uIHRoZSBlbmRwb2ludC4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW4gPSBuZXcgQ2ZuT3JpZ2luRW5kcG9pbnQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgY2hhbm5lbE5hbWU6IHByb3BzLmNoYW5uZWwuY2hhbm5lbE5hbWUsXG4gICAgICBjaGFubmVsR3JvdXBOYW1lOiBwcm9wcy5jaGFubmVsLmNoYW5uZWxHcm91cE5hbWUsXG4gICAgICBvcmlnaW5FbmRwb2ludE5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgdGFnczogcHJvcHM/LnRhZ3MgPyByZW5kZXJUYWdzKHByb3BzLnRhZ3MpIDogdW5kZWZpbmVkLFxuICAgICAgaGxzTWFuaWZlc3RzOiBvbWl0RW1wdHlBcnJheSh0aGlzLmhsc01hbmlmZXN0cyksXG4gICAgICBsb3dMYXRlbmN5SGxzTWFuaWZlc3RzOiBvbWl0RW1wdHlBcnJheSh0aGlzLmxsSGxzTWFuaWZlc3RzKSxcbiAgICAgIGRhc2hNYW5pZmVzdHM6IG9taXRFbXB0eUFycmF5KHRoaXMuZGFzaE1hbmlmZXN0cyksXG4gICAgICBtc3NNYW5pZmVzdHM6IG9taXRFbXB0eUFycmF5KHRoaXMubXNzTWFuaWZlc3RzKSxcbiAgICAgIGNvbnRhaW5lclR5cGU6IGNvbnRhaW5lclR5cGUsXG4gICAgICBzdGFydG92ZXJXaW5kb3dTZWNvbmRzOiBwcm9wcy5zdGFydG92ZXJXaW5kb3c/LnRvU2Vjb25kcygpLFxuICAgICAgc2VnbWVudDogdGhpcy5zZWdtZW50VmFsaWRhdGlvbihjb250YWluZXJUeXBlLCBwcm9wcy5zZWdtZW50KSxcbiAgICAgIGZvcmNlRW5kcG9pbnRFcnJvckNvbmZpZ3VyYXRpb246IHByb3BzLmZvcmNlRW5kcG9pbnRDb25maWd1cmF0aW9uQ29uZGl0aW9ucyA/IHtcbiAgICAgICAgZW5kcG9pbnRFcnJvckNvbmRpdGlvbnM6IHByb3BzLmZvcmNlRW5kcG9pbnRDb25maWd1cmF0aW9uQ29uZGl0aW9ucyxcbiAgICAgIH06IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBjaGFubmVsTmFtZS9jaGFubmVsR3JvdXBOYW1lIGFyZSByZW5kZXJlZCBhcyBsaXRlcmFsIHN0cmluZ3MgKG5vdCBDRk4gUmVmcyksIHNvXG4gICAgLy8gQ2xvdWRGb3JtYXRpb24gY2Fubm90IGluZmVyIHRoZSBkZXBlbmRlbmN5LiBXZSBhZGQgZGlyZWN0IENmblJlc291cmNlLWxldmVsIERlcGVuZHNPblxuICAgIC8vIHRvIGd1YXJhbnRlZSBkZXBsb3kgb3JkZXJpbmcgd2l0aG91dCB0cmlnZ2VyaW5nIENESydzIHN1YnRyZWUtbGV2ZWwgY3ljbGUgZGV0ZWN0aW9uLlxuICAgIC8vIEZvciBpbXBvcnRlZCBjb25zdHJ1Y3RzLCBkZWZhdWx0Q2hpbGQgaXMgdW5kZWZpbmVkIChubyBDRk4gcmVzb3VyY2UgdG8gb3JkZXIgYWdhaW5zdCkuXG4gICAgY29uc3QgZW5jcnlwdGlvblJvbGUgPSBwcm9wcy5zZWdtZW50LmVuY3J5cHRpb24/Ll9nZXRSb2xlKCk7XG4gICAgaWYgKGVuY3J5cHRpb25Sb2xlKSBvcmlnaW4ubm9kZS5hZGREZXBlbmRlbmN5KGVuY3J5cHRpb25Sb2xlKTtcbiAgICBjb25zdCBlbmNyeXB0aW9uQ2VydCA9IHByb3BzLnNlZ21lbnQuZW5jcnlwdGlvbj8uX2dldENlcnRpZmljYXRlKCk7XG4gICAgaWYgKGVuY3J5cHRpb25DZXJ0KSBvcmlnaW4ubm9kZS5hZGREZXBlbmRlbmN5KGVuY3J5cHRpb25DZXJ0KTtcbiAgICBjb25zdCBjaGFubmVsQ2ZuID0gcHJvcHMuY2hhbm5lbC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5SZXNvdXJjZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoY2hhbm5lbENmbiAmJiBDZm5SZXNvdXJjZS5pc0NmblJlc291cmNlKGNoYW5uZWxDZm4pKSB7XG4gICAgICBvcmlnaW4uYWRkUmVzb3VyY2VEZXBlbmRlbmN5KGNoYW5uZWxDZm4pO1xuICAgIH1cbiAgICBjb25zdCBncm91cENmbiA9IHByb3BzLmNoYW5uZWwuY2hhbm5lbEdyb3VwPy5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5SZXNvdXJjZSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZ3JvdXBDZm4gJiYgQ2ZuUmVzb3VyY2UuaXNDZm5SZXNvdXJjZShncm91cENmbikpIHtcbiAgICAgIG9yaWdpbi5hZGRSZXNvdXJjZURlcGVuZGVuY3koZ3JvdXBDZm4pO1xuICAgIH1cblxuICAgIHRoaXMubG93TGF0ZW5jeUhsc01hbmlmZXN0VXJscyA9IHRoaXMubGxIbHNNYW5pZmVzdHMubWFwKChfLCBpKSA9PiBGbi5zZWxlY3QoaSwgb3JpZ2luLmF0dHJMb3dMYXRlbmN5SGxzTWFuaWZlc3RVcmxzKSk7XG4gICAgdGhpcy5obHNNYW5pZmVzdFVybHMgPSB0aGlzLmhsc01hbmlmZXN0cy5tYXAoKF8sIGkpID0+IEZuLnNlbGVjdChpLCBvcmlnaW4uYXR0ckhsc01hbmlmZXN0VXJscykpO1xuICAgIHRoaXMuZGFzaE1hbmlmZXN0VXJscyA9IHRoaXMuZGFzaE1hbmlmZXN0cy5tYXAoKF8sIGkpID0+IEZuLnNlbGVjdChpLCBvcmlnaW4uYXR0ckRhc2hNYW5pZmVzdFVybHMpKTtcbiAgICB0aGlzLm1zc01hbmlmZXN0VXJscyA9IHRoaXMubXNzTWFuaWZlc3RzLm1hcCgoXywgaSkgPT4gRm4uc2VsZWN0KGksIG9yaWdpbi5hdHRyTXNzTWFuaWZlc3RVcmxzKSk7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSBvcmlnaW4uYXR0ckNyZWF0ZWRBdDtcbiAgICB0aGlzLm1vZGlmaWVkQXQgPSBvcmlnaW4uYXR0ck1vZGlmaWVkQXQ7XG4gICAgdGhpcy5jaGFubmVsR3JvdXBOYW1lID0gb3JpZ2luLmNoYW5uZWxHcm91cE5hbWU7XG4gICAgdGhpcy5jaGFubmVsTmFtZSA9IG9yaWdpbi5jaGFubmVsTmFtZTtcbiAgICB0aGlzLm9yaWdpbkVuZHBvaW50TmFtZSA9IG9yaWdpbi5vcmlnaW5FbmRwb2ludE5hbWU7XG4gICAgdGhpcy5vcmlnaW5FbmRwb2ludEFybiA9IG9yaWdpbi5hdHRyQXJuO1xuXG4gICAgb3JpZ2luLmFwcGx5UmVtb3ZhbFBvbGljeShwcm9wcz8ucmVtb3ZhbFBvbGljeSA/PyBSZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuXG4gICAgLy8gV2hlbiBjZG5BdXRoIGlzIHNldCwgcHJlLWNyZWF0ZSB0aGUgZW5kcG9pbnQgcG9saWN5IHdpdGggdGhlIEFXUy1yZWNvbW1lbmRlZCBnYXRpbmdcbiAgICAvLyBzdGF0ZW1lbnQuIFRoZSBwcmluY2lwYWwgaXMgYCpgIChhbm9ueW1vdXMpIGJlY2F1c2UgQ0ROIHJlcXVlc3RzIHRvIE1lZGlhUGFja2FnZSBhcmVcbiAgICAvLyB1bnNpZ25lZCBIVFRQUyDigJQgb25seSB0aGUgbWF0Y2hpbmcgQ0ROLUlkZW50aWZpZXIgaGVhZGVyIHByb3ZlcyBhdXRob3Jpc2F0aW9uLlxuICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbWVkaWFwYWNrYWdlL2xhdGVzdC91c2VyZ3VpZGUvY2RuLWF1dGgtc2V0dXAuaHRtbFxuICAgIGlmIChwcm9wcy5jZG5BdXRoKSB7XG4gICAgICBpZiAocHJvcHMuY2RuQXV0aC5zZWNyZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBDZG5BdXRoU2VjcmV0c1JlcXVpcmVkYCxcbiAgICAgICAgICAnY2RuQXV0aC5zZWNyZXRzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgc2VjcmV0LiBDRE4gYXV0aG9yaXphdGlvbiBuZWVkcyBhIHNlY3JldCB0byB2YWxpZGF0ZSBpbmNvbWluZyBDRE4tSWRlbnRpZmllciBoZWFkZXJzLicsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jZG5BdXRoQ29uZmlnID0gcHJvcHMuY2RuQXV0aDtcbiAgICAgIHRoaXMuYWRkVG9SZXNvdXJjZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiAnQWxsb3dHZXRPYmplY3RBY2Nlc3NGb3JBdXRob3JpemVkUmVxdWVzdCcsXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICBwcmluY2lwYWxzOiBbbmV3IFN0YXJQcmluY2lwYWwoKV0sXG4gICAgICAgIGFjdGlvbnM6IFsnbWVkaWFwYWNrYWdldjI6R2V0T2JqZWN0J10sXG4gICAgICAgIHJlc291cmNlczogW3RoaXMub3JpZ2luRW5kcG9pbnRBcm5dLFxuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgQm9vbDoge1xuICAgICAgICAgICAgJ21lZGlhcGFja2FnZXYyOlJlcXVlc3RIYXNNYXRjaGluZ0NkbkF1dGhIZWFkZXInOiAndHJ1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gb21pdEVtcHR5QXJyYXk8QT4oYTogQXJyYXk8QT4pOiBBcnJheTxBPiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBhLmxlbmd0aCA+IDAgPyBhIDogdW5kZWZpbmVkO1xufVxuXG4iXX0=
|