@aws-cdk/aws-medialive-alpha 2.268.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 +60888 -0
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +524 -0
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/README.md +1297 -0
- package/grants.json +27 -0
- package/lib/audio-codec-settings.d.ts +901 -0
- package/lib/audio-codec-settings.js +1098 -0
- package/lib/audio-selector.d.ts +170 -0
- package/lib/audio-selector.js +306 -0
- package/lib/avail-settings.d.ts +231 -0
- package/lib/avail-settings.js +226 -0
- package/lib/caption-selector.d.ts +234 -0
- package/lib/caption-selector.js +413 -0
- package/lib/caption-settings.d.ts +349 -0
- package/lib/caption-settings.js +482 -0
- package/lib/channel-features.d.ts +106 -0
- package/lib/channel-features.js +85 -0
- package/lib/channel-placement-group.d.ts +73 -0
- package/lib/channel-placement-group.js +132 -0
- package/lib/channel.d.ts +687 -0
- package/lib/channel.js +1096 -0
- package/lib/cluster.d.ts +129 -0
- package/lib/cluster.js +158 -0
- package/lib/color-correction.d.ts +39 -0
- package/lib/color-correction.js +29 -0
- package/lib/destinations.d.ts +242 -0
- package/lib/destinations.js +455 -0
- package/lib/encode-configuration.d.ts +615 -0
- package/lib/encode-configuration.js +629 -0
- package/lib/enums.d.ts +698 -0
- package/lib/enums.js +1045 -0
- package/lib/file-location.d.ts +65 -0
- package/lib/file-location.js +150 -0
- package/lib/framerate.d.ts +31 -0
- package/lib/framerate.js +71 -0
- package/lib/index.d.ts +26 -0
- package/lib/index.js +43 -0
- package/lib/input-attachment.d.ts +319 -0
- package/lib/input-attachment.js +228 -0
- package/lib/input-security-group.d.ts +51 -0
- package/lib/input-security-group.js +123 -0
- package/lib/input-specification.d.ts +111 -0
- package/lib/input-specification.js +181 -0
- package/lib/input.d.ts +505 -0
- package/lib/input.js +803 -0
- package/lib/m2ts-settings.d.ts +421 -0
- package/lib/m2ts-settings.js +469 -0
- package/lib/m3u8-settings.d.ts +272 -0
- package/lib/m3u8-settings.js +304 -0
- package/lib/medialive-grants.generated.d.ts +30 -0
- package/lib/medialive-grants.generated.js +92 -0
- package/lib/network.d.ts +83 -0
- package/lib/network.js +132 -0
- package/lib/output-group.d.ts +924 -0
- package/lib/output-group.js +941 -0
- package/lib/outputs.d.ts +304 -0
- package/lib/outputs.js +598 -0
- package/lib/sdi-source.d.ts +124 -0
- package/lib/sdi-source.js +180 -0
- package/lib/shared.d.ts +44 -0
- package/lib/shared.js +146 -0
- package/lib/video-codec-settings.d.ts +1500 -0
- package/lib/video-codec-settings.js +1722 -0
- package/lib/video-selection.d.ts +92 -0
- package/lib/video-selection.js +95 -0
- package/package.json +135 -0
- package/rosetta/_generated.ts-fixture +6 -0
- package/rosetta/default.ts-fixture +21 -0
|
@@ -0,0 +1,1722 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.H265Tier = exports.H265Profile = exports.H265FilterSettings = exports.H264FilterSettings = exports.BandwidthReductionStrength = exports.BandwidthReductionPostFilterSharpening = exports.TemporalFilterStrength = exports.TemporalFilterPostFilterSharpening = exports.Av1ColorSpaceSettings = exports.H265ColorSpaceSettings = exports.H264ColorSpaceSettings = exports.Av1RateControl = exports.H265RateControl = exports.H264RateControl = exports.TimecodeBurninPosition = exports.TimecodeBurninFontSize = exports.Av1TimecodeInsertion = exports.H265SceneChangeDetect = exports.H264TemporalAq = exports.H264SpatialAq = exports.H264SceneChangeDetect = exports.Av1TemporalAq = exports.Av1SpatialAq = exports.Av1SceneChangeDetect = exports.Av1BitDepth = exports.H265TreeblockSize = exports.H265TilePadding = exports.H265MvTemporalPredictor = exports.H265MvOverPictureBoundaries = exports.H265Deblocking = exports.H265AlternativeTransferFunction = exports.H265AdaptiveQuantization = exports.H264QualityLevel = exports.H264Syntax = exports.H264ForceFieldPictures = exports.H264EntropyEncoding = exports.SubgopLength = exports.TimecodeInsertion = exports.LookAheadRateControl = exports.GopBReference = exports.FlickerAq = exports.ScanType = exports.ColorMetadata = exports.AfdSignaling = exports.GopSize = exports.H264AdaptiveQuantization = exports.Av1Level = exports.H265Level = exports.H264Level = exports.H264Profile = void 0;
|
|
4
|
+
exports.VideoCodecSettings = exports.VideoCodecType = void 0;
|
|
5
|
+
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
6
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
7
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
8
|
+
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
9
|
+
const shared_1 = require("./shared");
|
|
10
|
+
/**
|
|
11
|
+
* H.264 profile.
|
|
12
|
+
*/
|
|
13
|
+
class H264Profile {
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264Profile", version: "2.268.0-alpha.0" };
|
|
15
|
+
/** Baseline profile */
|
|
16
|
+
static BASELINE = new H264Profile('BASELINE');
|
|
17
|
+
/** Main profile */
|
|
18
|
+
static MAIN = new H264Profile('MAIN');
|
|
19
|
+
/** High profile */
|
|
20
|
+
static HIGH = new H264Profile('HIGH');
|
|
21
|
+
/** High 10-bit profile */
|
|
22
|
+
static HIGH_10BIT = new H264Profile('HIGH_10BIT');
|
|
23
|
+
/** High 4:2:2 profile */
|
|
24
|
+
static HIGH_422 = new H264Profile('HIGH_422');
|
|
25
|
+
/** High 4:2:2 10-bit profile */
|
|
26
|
+
static HIGH_422_10BIT = new H264Profile('HIGH_422_10BIT');
|
|
27
|
+
/** A value not yet modelled by AWS CDK. */
|
|
28
|
+
static of(value) {
|
|
29
|
+
return new H264Profile(value);
|
|
30
|
+
}
|
|
31
|
+
/** The underlying string value passed to CloudFormation. */
|
|
32
|
+
value;
|
|
33
|
+
constructor(value) {
|
|
34
|
+
this.value = value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.H264Profile = H264Profile;
|
|
38
|
+
/**
|
|
39
|
+
* H.264 level.
|
|
40
|
+
*/
|
|
41
|
+
class H264Level {
|
|
42
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264Level", version: "2.268.0-alpha.0" };
|
|
43
|
+
/** Level 1 */
|
|
44
|
+
static H264_LEVEL_1 = new H264Level('H264_LEVEL_1');
|
|
45
|
+
/** Level 1.1 */
|
|
46
|
+
static H264_LEVEL_1_1 = new H264Level('H264_LEVEL_1_1');
|
|
47
|
+
/** Level 1.2 */
|
|
48
|
+
static H264_LEVEL_1_2 = new H264Level('H264_LEVEL_1_2');
|
|
49
|
+
/** Level 1.3 */
|
|
50
|
+
static H264_LEVEL_1_3 = new H264Level('H264_LEVEL_1_3');
|
|
51
|
+
/** Level 2 */
|
|
52
|
+
static H264_LEVEL_2 = new H264Level('H264_LEVEL_2');
|
|
53
|
+
/** Level 2.1 */
|
|
54
|
+
static H264_LEVEL_2_1 = new H264Level('H264_LEVEL_2_1');
|
|
55
|
+
/** Level 2.2 */
|
|
56
|
+
static H264_LEVEL_2_2 = new H264Level('H264_LEVEL_2_2');
|
|
57
|
+
/** Level 3 */
|
|
58
|
+
static H264_LEVEL_3 = new H264Level('H264_LEVEL_3');
|
|
59
|
+
/** Level 3.1 */
|
|
60
|
+
static H264_LEVEL_3_1 = new H264Level('H264_LEVEL_3_1');
|
|
61
|
+
/** Level 3.2 */
|
|
62
|
+
static H264_LEVEL_3_2 = new H264Level('H264_LEVEL_3_2');
|
|
63
|
+
/** Level 4 */
|
|
64
|
+
static H264_LEVEL_4 = new H264Level('H264_LEVEL_4');
|
|
65
|
+
/** Level 4.1 */
|
|
66
|
+
static H264_LEVEL_4_1 = new H264Level('H264_LEVEL_4_1');
|
|
67
|
+
/** Level 4.2 */
|
|
68
|
+
static H264_LEVEL_4_2 = new H264Level('H264_LEVEL_4_2');
|
|
69
|
+
/** Level 5 */
|
|
70
|
+
static H264_LEVEL_5 = new H264Level('H264_LEVEL_5');
|
|
71
|
+
/** Level 5.1 */
|
|
72
|
+
static H264_LEVEL_5_1 = new H264Level('H264_LEVEL_5_1');
|
|
73
|
+
/** Level 5.2 */
|
|
74
|
+
static H264_LEVEL_5_2 = new H264Level('H264_LEVEL_5_2');
|
|
75
|
+
/** Auto-select the level based on the encode configuration */
|
|
76
|
+
static H264_LEVEL_AUTO = new H264Level('H264_LEVEL_AUTO');
|
|
77
|
+
/** A value not yet modelled by AWS CDK. */
|
|
78
|
+
static of(value) {
|
|
79
|
+
return new H264Level(value);
|
|
80
|
+
}
|
|
81
|
+
/** The underlying string value passed to CloudFormation. */
|
|
82
|
+
value;
|
|
83
|
+
constructor(value) {
|
|
84
|
+
this.value = value;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.H264Level = H264Level;
|
|
88
|
+
/**
|
|
89
|
+
* H.265 level.
|
|
90
|
+
*/
|
|
91
|
+
class H265Level {
|
|
92
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265Level", version: "2.268.0-alpha.0" };
|
|
93
|
+
/** Level 1 */
|
|
94
|
+
static H265_LEVEL_1 = new H265Level('H265_LEVEL_1');
|
|
95
|
+
/** Level 2 */
|
|
96
|
+
static H265_LEVEL_2 = new H265Level('H265_LEVEL_2');
|
|
97
|
+
/** Level 2.1 */
|
|
98
|
+
static H265_LEVEL_2_1 = new H265Level('H265_LEVEL_2_1');
|
|
99
|
+
/** Level 3 */
|
|
100
|
+
static H265_LEVEL_3 = new H265Level('H265_LEVEL_3');
|
|
101
|
+
/** Level 3.1 */
|
|
102
|
+
static H265_LEVEL_3_1 = new H265Level('H265_LEVEL_3_1');
|
|
103
|
+
/** Level 4 */
|
|
104
|
+
static H265_LEVEL_4 = new H265Level('H265_LEVEL_4');
|
|
105
|
+
/** Level 4.1 */
|
|
106
|
+
static H265_LEVEL_4_1 = new H265Level('H265_LEVEL_4_1');
|
|
107
|
+
/** Level 5 */
|
|
108
|
+
static H265_LEVEL_5 = new H265Level('H265_LEVEL_5');
|
|
109
|
+
/** Level 5.1 */
|
|
110
|
+
static H265_LEVEL_5_1 = new H265Level('H265_LEVEL_5_1');
|
|
111
|
+
/** Level 5.2 */
|
|
112
|
+
static H265_LEVEL_5_2 = new H265Level('H265_LEVEL_5_2');
|
|
113
|
+
/** Level 6 */
|
|
114
|
+
static H265_LEVEL_6 = new H265Level('H265_LEVEL_6');
|
|
115
|
+
/** Level 6.1 */
|
|
116
|
+
static H265_LEVEL_6_1 = new H265Level('H265_LEVEL_6_1');
|
|
117
|
+
/** Level 6.2 */
|
|
118
|
+
static H265_LEVEL_6_2 = new H265Level('H265_LEVEL_6_2');
|
|
119
|
+
/** Auto-select the level based on the encode configuration */
|
|
120
|
+
static H265_LEVEL_AUTO = new H265Level('H265_LEVEL_AUTO');
|
|
121
|
+
/** A value not yet modelled by AWS CDK. */
|
|
122
|
+
static of(value) {
|
|
123
|
+
return new H265Level(value);
|
|
124
|
+
}
|
|
125
|
+
/** The underlying string value passed to CloudFormation. */
|
|
126
|
+
value;
|
|
127
|
+
constructor(value) {
|
|
128
|
+
this.value = value;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.H265Level = H265Level;
|
|
132
|
+
/**
|
|
133
|
+
* AV1 level.
|
|
134
|
+
*/
|
|
135
|
+
class Av1Level {
|
|
136
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1Level", version: "2.268.0-alpha.0" };
|
|
137
|
+
/** Level 2 */
|
|
138
|
+
static AV1_LEVEL_2 = new Av1Level('AV1_LEVEL_2');
|
|
139
|
+
/** Level 2.1 */
|
|
140
|
+
static AV1_LEVEL_2_1 = new Av1Level('AV1_LEVEL_2_1');
|
|
141
|
+
/** Level 3 */
|
|
142
|
+
static AV1_LEVEL_3 = new Av1Level('AV1_LEVEL_3');
|
|
143
|
+
/** Level 3.1 */
|
|
144
|
+
static AV1_LEVEL_3_1 = new Av1Level('AV1_LEVEL_3_1');
|
|
145
|
+
/** Level 4 */
|
|
146
|
+
static AV1_LEVEL_4 = new Av1Level('AV1_LEVEL_4');
|
|
147
|
+
/** Level 4.1 */
|
|
148
|
+
static AV1_LEVEL_4_1 = new Av1Level('AV1_LEVEL_4_1');
|
|
149
|
+
/** Level 5 */
|
|
150
|
+
static AV1_LEVEL_5 = new Av1Level('AV1_LEVEL_5');
|
|
151
|
+
/** Level 5.1 */
|
|
152
|
+
static AV1_LEVEL_5_1 = new Av1Level('AV1_LEVEL_5_1');
|
|
153
|
+
/** Level 5.2 */
|
|
154
|
+
static AV1_LEVEL_5_2 = new Av1Level('AV1_LEVEL_5_2');
|
|
155
|
+
/** Level 5.3 */
|
|
156
|
+
static AV1_LEVEL_5_3 = new Av1Level('AV1_LEVEL_5_3');
|
|
157
|
+
/** Level 6 */
|
|
158
|
+
static AV1_LEVEL_6 = new Av1Level('AV1_LEVEL_6');
|
|
159
|
+
/** Level 6.1 */
|
|
160
|
+
static AV1_LEVEL_6_1 = new Av1Level('AV1_LEVEL_6_1');
|
|
161
|
+
/** Level 6.2 */
|
|
162
|
+
static AV1_LEVEL_6_2 = new Av1Level('AV1_LEVEL_6_2');
|
|
163
|
+
/** Level 6.3 */
|
|
164
|
+
static AV1_LEVEL_6_3 = new Av1Level('AV1_LEVEL_6_3');
|
|
165
|
+
/** Auto-select the level based on the encode configuration */
|
|
166
|
+
static AV1_LEVEL_AUTO = new Av1Level('AV1_LEVEL_AUTO');
|
|
167
|
+
/** A value not yet modelled by AWS CDK. */
|
|
168
|
+
static of(value) {
|
|
169
|
+
return new Av1Level(value);
|
|
170
|
+
}
|
|
171
|
+
/** The underlying string value passed to CloudFormation. */
|
|
172
|
+
value;
|
|
173
|
+
constructor(value) {
|
|
174
|
+
this.value = value;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.Av1Level = Av1Level;
|
|
178
|
+
/**
|
|
179
|
+
* H.264 adaptive quantization strength.
|
|
180
|
+
*/
|
|
181
|
+
class H264AdaptiveQuantization {
|
|
182
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264AdaptiveQuantization", version: "2.268.0-alpha.0" };
|
|
183
|
+
/** Auto */
|
|
184
|
+
static AUTO = new H264AdaptiveQuantization('AUTO');
|
|
185
|
+
/** High */
|
|
186
|
+
static HIGH = new H264AdaptiveQuantization('HIGH');
|
|
187
|
+
/** Higher */
|
|
188
|
+
static HIGHER = new H264AdaptiveQuantization('HIGHER');
|
|
189
|
+
/** Low */
|
|
190
|
+
static LOW = new H264AdaptiveQuantization('LOW');
|
|
191
|
+
/** Max */
|
|
192
|
+
static MAX = new H264AdaptiveQuantization('MAX');
|
|
193
|
+
/** Medium */
|
|
194
|
+
static MEDIUM = new H264AdaptiveQuantization('MEDIUM');
|
|
195
|
+
/** Off */
|
|
196
|
+
static OFF = new H264AdaptiveQuantization('OFF');
|
|
197
|
+
/** A value not yet modelled by AWS CDK. */
|
|
198
|
+
static of(value) {
|
|
199
|
+
return new H264AdaptiveQuantization(value);
|
|
200
|
+
}
|
|
201
|
+
/** The underlying string value passed to CloudFormation. */
|
|
202
|
+
value;
|
|
203
|
+
constructor(value) {
|
|
204
|
+
this.value = value;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
exports.H264AdaptiveQuantization = H264AdaptiveQuantization;
|
|
208
|
+
/**
|
|
209
|
+
* GOP size (keyframe interval). Use the static factory methods to specify in frames or seconds.
|
|
210
|
+
*
|
|
211
|
+
* The value must be greater than zero. When expressed in frames it must be a whole number;
|
|
212
|
+
* when expressed in seconds it may be fractional.
|
|
213
|
+
*/
|
|
214
|
+
class GopSize {
|
|
215
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.GopSize", version: "2.268.0-alpha.0" };
|
|
216
|
+
/** GOP size in seconds. May be fractional (e.g. `1.5`). */
|
|
217
|
+
static seconds(value) {
|
|
218
|
+
return new GopSize(value, 'SECONDS');
|
|
219
|
+
}
|
|
220
|
+
/** GOP size in frames. Must be a whole number. */
|
|
221
|
+
static frames(value) {
|
|
222
|
+
return new GopSize(value, 'FRAMES');
|
|
223
|
+
}
|
|
224
|
+
/** @internal */
|
|
225
|
+
_value;
|
|
226
|
+
/** @internal */
|
|
227
|
+
_units;
|
|
228
|
+
constructor(value, units) {
|
|
229
|
+
// MediaLive requires gopSize > 0 for both units. When the unit is FRAMES the value
|
|
230
|
+
// must be a whole number (a fractional frame is meaningless); SECONDS may be
|
|
231
|
+
// fractional. See the H264/H265/AV1/MPEG-2 gopSize docs ("must be greater than zero";
|
|
232
|
+
// frames are converted to a frame count at runtime).
|
|
233
|
+
if (!aws_cdk_lib_1.Token.isUnresolved(value)) {
|
|
234
|
+
if (value <= 0) {
|
|
235
|
+
throw new aws_cdk_lib_1.UnscopedValidationError((0, helpers_internal_1.lit) `GopSize`, `GOP size must be greater than zero, got ${JSON.stringify(value)}`);
|
|
236
|
+
}
|
|
237
|
+
if (units === 'FRAMES' && !Number.isInteger(value)) {
|
|
238
|
+
throw new aws_cdk_lib_1.UnscopedValidationError((0, helpers_internal_1.lit) `GopSizeFrames`, `GOP size in frames must be a whole number, got ${JSON.stringify(value)}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
this._value = value;
|
|
242
|
+
this._units = units;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
exports.GopSize = GopSize;
|
|
246
|
+
// =============================================================================
|
|
247
|
+
// Shared enums (used by multiple codecs)
|
|
248
|
+
// =============================================================================
|
|
249
|
+
/**
|
|
250
|
+
* AFD signaling mode.
|
|
251
|
+
*/
|
|
252
|
+
class AfdSignaling {
|
|
253
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AfdSignaling", version: "2.268.0-alpha.0" };
|
|
254
|
+
/** Auto — preserve input AFD value */
|
|
255
|
+
static AUTO = new AfdSignaling('AUTO');
|
|
256
|
+
/** Fixed — use the value from fixedAfd */
|
|
257
|
+
static FIXED = new AfdSignaling('FIXED');
|
|
258
|
+
/** None — do not write AFD */
|
|
259
|
+
static NONE = new AfdSignaling('NONE');
|
|
260
|
+
/** A value not yet modelled by AWS CDK. */
|
|
261
|
+
static of(value) {
|
|
262
|
+
return new AfdSignaling(value);
|
|
263
|
+
}
|
|
264
|
+
/** The underlying string value passed to CloudFormation. */
|
|
265
|
+
value;
|
|
266
|
+
constructor(value) {
|
|
267
|
+
this.value = value;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
exports.AfdSignaling = AfdSignaling;
|
|
271
|
+
/**
|
|
272
|
+
* Color metadata inclusion.
|
|
273
|
+
*/
|
|
274
|
+
class ColorMetadata {
|
|
275
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.ColorMetadata", version: "2.268.0-alpha.0" };
|
|
276
|
+
/** Ignore — do not include color metadata */
|
|
277
|
+
static IGNORE = new ColorMetadata('IGNORE');
|
|
278
|
+
/** Insert — include color metadata */
|
|
279
|
+
static INSERT = new ColorMetadata('INSERT');
|
|
280
|
+
/** A value not yet modelled by AWS CDK. */
|
|
281
|
+
static of(value) {
|
|
282
|
+
return new ColorMetadata(value);
|
|
283
|
+
}
|
|
284
|
+
/** The underlying string value passed to CloudFormation. */
|
|
285
|
+
value;
|
|
286
|
+
constructor(value) {
|
|
287
|
+
this.value = value;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
exports.ColorMetadata = ColorMetadata;
|
|
291
|
+
/**
|
|
292
|
+
* Scan type for the output video.
|
|
293
|
+
*/
|
|
294
|
+
class ScanType {
|
|
295
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.ScanType", version: "2.268.0-alpha.0" };
|
|
296
|
+
/** Interlaced (top field first) */
|
|
297
|
+
static INTERLACED = new ScanType('INTERLACED');
|
|
298
|
+
/** Progressive */
|
|
299
|
+
static PROGRESSIVE = new ScanType('PROGRESSIVE');
|
|
300
|
+
/** A value not yet modelled by AWS CDK. */
|
|
301
|
+
static of(value) {
|
|
302
|
+
return new ScanType(value);
|
|
303
|
+
}
|
|
304
|
+
/** The underlying string value passed to CloudFormation. */
|
|
305
|
+
value;
|
|
306
|
+
constructor(value) {
|
|
307
|
+
this.value = value;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
exports.ScanType = ScanType;
|
|
311
|
+
/**
|
|
312
|
+
* Flicker adaptive quantization.
|
|
313
|
+
*/
|
|
314
|
+
class FlickerAq {
|
|
315
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.FlickerAq", version: "2.268.0-alpha.0" };
|
|
316
|
+
/** Enabled */
|
|
317
|
+
static ENABLED = new FlickerAq('ENABLED');
|
|
318
|
+
/** Disabled */
|
|
319
|
+
static DISABLED = new FlickerAq('DISABLED');
|
|
320
|
+
/** A value not yet modelled by AWS CDK. */
|
|
321
|
+
static of(value) {
|
|
322
|
+
return new FlickerAq(value);
|
|
323
|
+
}
|
|
324
|
+
/** The underlying string value passed to CloudFormation. */
|
|
325
|
+
value;
|
|
326
|
+
constructor(value) {
|
|
327
|
+
this.value = value;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
exports.FlickerAq = FlickerAq;
|
|
331
|
+
/**
|
|
332
|
+
* GOP B-frame reference.
|
|
333
|
+
*/
|
|
334
|
+
class GopBReference {
|
|
335
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.GopBReference", version: "2.268.0-alpha.0" };
|
|
336
|
+
/** Enabled */
|
|
337
|
+
static ENABLED = new GopBReference('ENABLED');
|
|
338
|
+
/** Disabled */
|
|
339
|
+
static DISABLED = new GopBReference('DISABLED');
|
|
340
|
+
/** A value not yet modelled by AWS CDK. */
|
|
341
|
+
static of(value) {
|
|
342
|
+
return new GopBReference(value);
|
|
343
|
+
}
|
|
344
|
+
/** The underlying string value passed to CloudFormation. */
|
|
345
|
+
value;
|
|
346
|
+
constructor(value) {
|
|
347
|
+
this.value = value;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
exports.GopBReference = GopBReference;
|
|
351
|
+
/**
|
|
352
|
+
* Lookahead rate control.
|
|
353
|
+
*/
|
|
354
|
+
class LookAheadRateControl {
|
|
355
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.LookAheadRateControl", version: "2.268.0-alpha.0" };
|
|
356
|
+
/** High — better quality, more latency and memory */
|
|
357
|
+
static HIGH = new LookAheadRateControl('HIGH');
|
|
358
|
+
/** Low — less latency and memory */
|
|
359
|
+
static LOW = new LookAheadRateControl('LOW');
|
|
360
|
+
/** Medium */
|
|
361
|
+
static MEDIUM = new LookAheadRateControl('MEDIUM');
|
|
362
|
+
/** A value not yet modelled by AWS CDK. */
|
|
363
|
+
static of(value) {
|
|
364
|
+
return new LookAheadRateControl(value);
|
|
365
|
+
}
|
|
366
|
+
/** The underlying string value passed to CloudFormation. */
|
|
367
|
+
value;
|
|
368
|
+
constructor(value) {
|
|
369
|
+
this.value = value;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
exports.LookAheadRateControl = LookAheadRateControl;
|
|
373
|
+
/**
|
|
374
|
+
* Timecode insertion mode.
|
|
375
|
+
*
|
|
376
|
+
* @remarks This controls timecode insertion in the output elementary stream.
|
|
377
|
+
* To preserve source timecodes, set `TimecodeSource.EMBEDDED` on the channel's `timecodeConfig`.
|
|
378
|
+
*/
|
|
379
|
+
class TimecodeInsertion {
|
|
380
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TimecodeInsertion", version: "2.268.0-alpha.0" };
|
|
381
|
+
/** Disabled — do not include timecodes */
|
|
382
|
+
static DISABLED = new TimecodeInsertion('DISABLED');
|
|
383
|
+
/** PIC_TIMING_SEI — pass through picture timing SEI messages */
|
|
384
|
+
static PIC_TIMING_SEI = new TimecodeInsertion('PIC_TIMING_SEI');
|
|
385
|
+
/** A value not yet modelled by AWS CDK. */
|
|
386
|
+
static of(value) {
|
|
387
|
+
return new TimecodeInsertion(value);
|
|
388
|
+
}
|
|
389
|
+
/** The underlying string value passed to CloudFormation. */
|
|
390
|
+
value;
|
|
391
|
+
constructor(value) {
|
|
392
|
+
this.value = value;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
exports.TimecodeInsertion = TimecodeInsertion;
|
|
396
|
+
/**
|
|
397
|
+
* Sub-GOP length mode.
|
|
398
|
+
*/
|
|
399
|
+
class SubgopLength {
|
|
400
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.SubgopLength", version: "2.268.0-alpha.0" };
|
|
401
|
+
/** Dynamic — let MediaLive optimize B-frames per sub-GOP */
|
|
402
|
+
static DYNAMIC = new SubgopLength('DYNAMIC');
|
|
403
|
+
/** Fixed — use gopNumBFrames in each sub-GOP */
|
|
404
|
+
static FIXED = new SubgopLength('FIXED');
|
|
405
|
+
/** A value not yet modelled by AWS CDK. */
|
|
406
|
+
static of(value) {
|
|
407
|
+
return new SubgopLength(value);
|
|
408
|
+
}
|
|
409
|
+
/** The underlying string value passed to CloudFormation. */
|
|
410
|
+
value;
|
|
411
|
+
constructor(value) {
|
|
412
|
+
this.value = value;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
exports.SubgopLength = SubgopLength;
|
|
416
|
+
// =============================================================================
|
|
417
|
+
// H.264-specific enums
|
|
418
|
+
// =============================================================================
|
|
419
|
+
/**
|
|
420
|
+
* H.264 entropy encoding mode.
|
|
421
|
+
*/
|
|
422
|
+
class H264EntropyEncoding {
|
|
423
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264EntropyEncoding", version: "2.268.0-alpha.0" };
|
|
424
|
+
/** CABAC (requires Main or High profile) */
|
|
425
|
+
static CABAC = new H264EntropyEncoding('CABAC');
|
|
426
|
+
/** CAVLC */
|
|
427
|
+
static CAVLC = new H264EntropyEncoding('CAVLC');
|
|
428
|
+
/** A value not yet modelled by AWS CDK. */
|
|
429
|
+
static of(value) {
|
|
430
|
+
return new H264EntropyEncoding(value);
|
|
431
|
+
}
|
|
432
|
+
/** The underlying string value passed to CloudFormation. */
|
|
433
|
+
value;
|
|
434
|
+
constructor(value) {
|
|
435
|
+
this.value = value;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
exports.H264EntropyEncoding = H264EntropyEncoding;
|
|
439
|
+
/**
|
|
440
|
+
* H.264 force field pictures.
|
|
441
|
+
*/
|
|
442
|
+
class H264ForceFieldPictures {
|
|
443
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264ForceFieldPictures", version: "2.268.0-alpha.0" };
|
|
444
|
+
/** Enabled — force coding on a field basis */
|
|
445
|
+
static ENABLED = new H264ForceFieldPictures('ENABLED');
|
|
446
|
+
/** Disabled — let encoder decide */
|
|
447
|
+
static DISABLED = new H264ForceFieldPictures('DISABLED');
|
|
448
|
+
/** A value not yet modelled by AWS CDK. */
|
|
449
|
+
static of(value) {
|
|
450
|
+
return new H264ForceFieldPictures(value);
|
|
451
|
+
}
|
|
452
|
+
/** The underlying string value passed to CloudFormation. */
|
|
453
|
+
value;
|
|
454
|
+
constructor(value) {
|
|
455
|
+
this.value = value;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
exports.H264ForceFieldPictures = H264ForceFieldPictures;
|
|
459
|
+
/**
|
|
460
|
+
* H.264 syntax mode.
|
|
461
|
+
*/
|
|
462
|
+
class H264Syntax {
|
|
463
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264Syntax", version: "2.268.0-alpha.0" };
|
|
464
|
+
/** Default */
|
|
465
|
+
static DEFAULT = new H264Syntax('DEFAULT');
|
|
466
|
+
/** RP-2027 compliant */
|
|
467
|
+
static RP2027 = new H264Syntax('RP2027');
|
|
468
|
+
/** A value not yet modelled by AWS CDK. */
|
|
469
|
+
static of(value) {
|
|
470
|
+
return new H264Syntax(value);
|
|
471
|
+
}
|
|
472
|
+
/** The underlying string value passed to CloudFormation. */
|
|
473
|
+
value;
|
|
474
|
+
constructor(value) {
|
|
475
|
+
this.value = value;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
exports.H264Syntax = H264Syntax;
|
|
479
|
+
/**
|
|
480
|
+
* H.264 quality level.
|
|
481
|
+
*/
|
|
482
|
+
class H264QualityLevel {
|
|
483
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264QualityLevel", version: "2.268.0-alpha.0" };
|
|
484
|
+
/** Enhanced quality (may incur additional cost) */
|
|
485
|
+
static ENHANCED_QUALITY = new H264QualityLevel('ENHANCED_QUALITY');
|
|
486
|
+
/** Standard quality */
|
|
487
|
+
static STANDARD_QUALITY = new H264QualityLevel('STANDARD_QUALITY');
|
|
488
|
+
/** A value not yet modelled by AWS CDK. */
|
|
489
|
+
static of(value) {
|
|
490
|
+
return new H264QualityLevel(value);
|
|
491
|
+
}
|
|
492
|
+
/** The underlying string value passed to CloudFormation. */
|
|
493
|
+
value;
|
|
494
|
+
constructor(value) {
|
|
495
|
+
this.value = value;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
exports.H264QualityLevel = H264QualityLevel;
|
|
499
|
+
// =============================================================================
|
|
500
|
+
// H.265-specific enums
|
|
501
|
+
// =============================================================================
|
|
502
|
+
/**
|
|
503
|
+
* H.265 adaptive quantization.
|
|
504
|
+
*/
|
|
505
|
+
class H265AdaptiveQuantization {
|
|
506
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265AdaptiveQuantization", version: "2.268.0-alpha.0" };
|
|
507
|
+
/** Auto */
|
|
508
|
+
static AUTO = new H265AdaptiveQuantization('AUTO');
|
|
509
|
+
/** High */
|
|
510
|
+
static HIGH = new H265AdaptiveQuantization('HIGH');
|
|
511
|
+
/** Higher */
|
|
512
|
+
static HIGHER = new H265AdaptiveQuantization('HIGHER');
|
|
513
|
+
/** Low */
|
|
514
|
+
static LOW = new H265AdaptiveQuantization('LOW');
|
|
515
|
+
/** Max */
|
|
516
|
+
static MAX = new H265AdaptiveQuantization('MAX');
|
|
517
|
+
/** Medium */
|
|
518
|
+
static MEDIUM = new H265AdaptiveQuantization('MEDIUM');
|
|
519
|
+
/** Off */
|
|
520
|
+
static OFF = new H265AdaptiveQuantization('OFF');
|
|
521
|
+
/** A value not yet modelled by AWS CDK. */
|
|
522
|
+
static of(value) {
|
|
523
|
+
return new H265AdaptiveQuantization(value);
|
|
524
|
+
}
|
|
525
|
+
/** The underlying string value passed to CloudFormation. */
|
|
526
|
+
value;
|
|
527
|
+
constructor(value) {
|
|
528
|
+
this.value = value;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
exports.H265AdaptiveQuantization = H265AdaptiveQuantization;
|
|
532
|
+
/**
|
|
533
|
+
* H.265 alternative transfer function.
|
|
534
|
+
*/
|
|
535
|
+
class H265AlternativeTransferFunction {
|
|
536
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265AlternativeTransferFunction", version: "2.268.0-alpha.0" };
|
|
537
|
+
/** Insert */
|
|
538
|
+
static INSERT = new H265AlternativeTransferFunction('INSERT');
|
|
539
|
+
/** Omit */
|
|
540
|
+
static OMIT = new H265AlternativeTransferFunction('OMIT');
|
|
541
|
+
/** A value not yet modelled by AWS CDK. */
|
|
542
|
+
static of(value) {
|
|
543
|
+
return new H265AlternativeTransferFunction(value);
|
|
544
|
+
}
|
|
545
|
+
/** The underlying string value passed to CloudFormation. */
|
|
546
|
+
value;
|
|
547
|
+
constructor(value) {
|
|
548
|
+
this.value = value;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
exports.H265AlternativeTransferFunction = H265AlternativeTransferFunction;
|
|
552
|
+
/**
|
|
553
|
+
* H.265 deblocking filter.
|
|
554
|
+
*/
|
|
555
|
+
class H265Deblocking {
|
|
556
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265Deblocking", version: "2.268.0-alpha.0" };
|
|
557
|
+
/** Disabled */
|
|
558
|
+
static DISABLED = new H265Deblocking('DISABLED');
|
|
559
|
+
/** Enabled */
|
|
560
|
+
static ENABLED = new H265Deblocking('ENABLED');
|
|
561
|
+
/** A value not yet modelled by AWS CDK. */
|
|
562
|
+
static of(value) {
|
|
563
|
+
return new H265Deblocking(value);
|
|
564
|
+
}
|
|
565
|
+
/** The underlying string value passed to CloudFormation. */
|
|
566
|
+
value;
|
|
567
|
+
constructor(value) {
|
|
568
|
+
this.value = value;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
exports.H265Deblocking = H265Deblocking;
|
|
572
|
+
/**
|
|
573
|
+
* H.265 motion vector over picture boundaries.
|
|
574
|
+
*/
|
|
575
|
+
class H265MvOverPictureBoundaries {
|
|
576
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265MvOverPictureBoundaries", version: "2.268.0-alpha.0" };
|
|
577
|
+
/** Disabled */
|
|
578
|
+
static DISABLED = new H265MvOverPictureBoundaries('DISABLED');
|
|
579
|
+
/** Enabled */
|
|
580
|
+
static ENABLED = new H265MvOverPictureBoundaries('ENABLED');
|
|
581
|
+
/** A value not yet modelled by AWS CDK. */
|
|
582
|
+
static of(value) {
|
|
583
|
+
return new H265MvOverPictureBoundaries(value);
|
|
584
|
+
}
|
|
585
|
+
/** The underlying string value passed to CloudFormation. */
|
|
586
|
+
value;
|
|
587
|
+
constructor(value) {
|
|
588
|
+
this.value = value;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
exports.H265MvOverPictureBoundaries = H265MvOverPictureBoundaries;
|
|
592
|
+
/**
|
|
593
|
+
* H.265 motion vector temporal predictor.
|
|
594
|
+
*/
|
|
595
|
+
class H265MvTemporalPredictor {
|
|
596
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265MvTemporalPredictor", version: "2.268.0-alpha.0" };
|
|
597
|
+
/** Disabled */
|
|
598
|
+
static DISABLED = new H265MvTemporalPredictor('DISABLED');
|
|
599
|
+
/** Enabled */
|
|
600
|
+
static ENABLED = new H265MvTemporalPredictor('ENABLED');
|
|
601
|
+
/** A value not yet modelled by AWS CDK. */
|
|
602
|
+
static of(value) {
|
|
603
|
+
return new H265MvTemporalPredictor(value);
|
|
604
|
+
}
|
|
605
|
+
/** The underlying string value passed to CloudFormation. */
|
|
606
|
+
value;
|
|
607
|
+
constructor(value) {
|
|
608
|
+
this.value = value;
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
exports.H265MvTemporalPredictor = H265MvTemporalPredictor;
|
|
612
|
+
/**
|
|
613
|
+
* H.265 tile padding.
|
|
614
|
+
*/
|
|
615
|
+
class H265TilePadding {
|
|
616
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265TilePadding", version: "2.268.0-alpha.0" };
|
|
617
|
+
/** None */
|
|
618
|
+
static NONE = new H265TilePadding('NONE');
|
|
619
|
+
/** Padded */
|
|
620
|
+
static PADDED = new H265TilePadding('PADDED');
|
|
621
|
+
/** A value not yet modelled by AWS CDK. */
|
|
622
|
+
static of(value) {
|
|
623
|
+
return new H265TilePadding(value);
|
|
624
|
+
}
|
|
625
|
+
/** The underlying string value passed to CloudFormation. */
|
|
626
|
+
value;
|
|
627
|
+
constructor(value) {
|
|
628
|
+
this.value = value;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
exports.H265TilePadding = H265TilePadding;
|
|
632
|
+
/**
|
|
633
|
+
* H.265 treeblock size.
|
|
634
|
+
*/
|
|
635
|
+
class H265TreeblockSize {
|
|
636
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265TreeblockSize", version: "2.268.0-alpha.0" };
|
|
637
|
+
/** Auto */
|
|
638
|
+
static AUTO = new H265TreeblockSize('AUTO');
|
|
639
|
+
/** 32x32 */
|
|
640
|
+
static TREE_SIZE_32X32 = new H265TreeblockSize('TREE_SIZE_32X32');
|
|
641
|
+
/** A value not yet modelled by AWS CDK. */
|
|
642
|
+
static of(value) {
|
|
643
|
+
return new H265TreeblockSize(value);
|
|
644
|
+
}
|
|
645
|
+
/** The underlying string value passed to CloudFormation. */
|
|
646
|
+
value;
|
|
647
|
+
constructor(value) {
|
|
648
|
+
this.value = value;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
exports.H265TreeblockSize = H265TreeblockSize;
|
|
652
|
+
// =============================================================================
|
|
653
|
+
// AV1-specific enums
|
|
654
|
+
// =============================================================================
|
|
655
|
+
/**
|
|
656
|
+
* AV1 bit depth.
|
|
657
|
+
*/
|
|
658
|
+
class Av1BitDepth {
|
|
659
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1BitDepth", version: "2.268.0-alpha.0" };
|
|
660
|
+
/** 8-bit */
|
|
661
|
+
static BIT_DEPTH_8 = new Av1BitDepth('DEPTH_8');
|
|
662
|
+
/** 10-bit */
|
|
663
|
+
static BIT_DEPTH_10 = new Av1BitDepth('DEPTH_10');
|
|
664
|
+
/** A value not yet modelled by AWS CDK. */
|
|
665
|
+
static of(value) {
|
|
666
|
+
return new Av1BitDepth(value);
|
|
667
|
+
}
|
|
668
|
+
/** The underlying string value passed to CloudFormation. */
|
|
669
|
+
value;
|
|
670
|
+
constructor(value) {
|
|
671
|
+
this.value = value;
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
exports.Av1BitDepth = Av1BitDepth;
|
|
675
|
+
/**
|
|
676
|
+
* AV1 scene change detection.
|
|
677
|
+
*/
|
|
678
|
+
class Av1SceneChangeDetect {
|
|
679
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1SceneChangeDetect", version: "2.268.0-alpha.0" };
|
|
680
|
+
/** Disabled */
|
|
681
|
+
static DISABLED = new Av1SceneChangeDetect('DISABLED');
|
|
682
|
+
/** Enabled */
|
|
683
|
+
static ENABLED = new Av1SceneChangeDetect('ENABLED');
|
|
684
|
+
/** A value not yet modelled by AWS CDK. */
|
|
685
|
+
static of(value) {
|
|
686
|
+
return new Av1SceneChangeDetect(value);
|
|
687
|
+
}
|
|
688
|
+
/** The underlying string value passed to CloudFormation. */
|
|
689
|
+
value;
|
|
690
|
+
constructor(value) {
|
|
691
|
+
this.value = value;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
exports.Av1SceneChangeDetect = Av1SceneChangeDetect;
|
|
695
|
+
/**
|
|
696
|
+
* AV1 spatial adaptive quantization.
|
|
697
|
+
*/
|
|
698
|
+
class Av1SpatialAq {
|
|
699
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1SpatialAq", version: "2.268.0-alpha.0" };
|
|
700
|
+
/** Disabled */
|
|
701
|
+
static DISABLED = new Av1SpatialAq('DISABLED');
|
|
702
|
+
/** Enabled */
|
|
703
|
+
static ENABLED = new Av1SpatialAq('ENABLED');
|
|
704
|
+
/** A value not yet modelled by AWS CDK. */
|
|
705
|
+
static of(value) {
|
|
706
|
+
return new Av1SpatialAq(value);
|
|
707
|
+
}
|
|
708
|
+
/** The underlying string value passed to CloudFormation. */
|
|
709
|
+
value;
|
|
710
|
+
constructor(value) {
|
|
711
|
+
this.value = value;
|
|
712
|
+
}
|
|
713
|
+
}
|
|
714
|
+
exports.Av1SpatialAq = Av1SpatialAq;
|
|
715
|
+
/**
|
|
716
|
+
* AV1 temporal adaptive quantization.
|
|
717
|
+
*/
|
|
718
|
+
class Av1TemporalAq {
|
|
719
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1TemporalAq", version: "2.268.0-alpha.0" };
|
|
720
|
+
/** Disabled */
|
|
721
|
+
static DISABLED = new Av1TemporalAq('DISABLED');
|
|
722
|
+
/** Enabled */
|
|
723
|
+
static ENABLED = new Av1TemporalAq('ENABLED');
|
|
724
|
+
/** A value not yet modelled by AWS CDK. */
|
|
725
|
+
static of(value) {
|
|
726
|
+
return new Av1TemporalAq(value);
|
|
727
|
+
}
|
|
728
|
+
/** The underlying string value passed to CloudFormation. */
|
|
729
|
+
value;
|
|
730
|
+
constructor(value) {
|
|
731
|
+
this.value = value;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
exports.Av1TemporalAq = Av1TemporalAq;
|
|
735
|
+
/**
|
|
736
|
+
* H.264 scene change detection.
|
|
737
|
+
*/
|
|
738
|
+
class H264SceneChangeDetect {
|
|
739
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264SceneChangeDetect", version: "2.268.0-alpha.0" };
|
|
740
|
+
/** Disabled */
|
|
741
|
+
static DISABLED = new H264SceneChangeDetect('DISABLED');
|
|
742
|
+
/** Enabled */
|
|
743
|
+
static ENABLED = new H264SceneChangeDetect('ENABLED');
|
|
744
|
+
/** A value not yet modelled by AWS CDK. */
|
|
745
|
+
static of(value) {
|
|
746
|
+
return new H264SceneChangeDetect(value);
|
|
747
|
+
}
|
|
748
|
+
/** The underlying string value passed to CloudFormation. */
|
|
749
|
+
value;
|
|
750
|
+
constructor(value) {
|
|
751
|
+
this.value = value;
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
exports.H264SceneChangeDetect = H264SceneChangeDetect;
|
|
755
|
+
/**
|
|
756
|
+
* H.264 spatial adaptive quantization.
|
|
757
|
+
*/
|
|
758
|
+
class H264SpatialAq {
|
|
759
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264SpatialAq", version: "2.268.0-alpha.0" };
|
|
760
|
+
/** Disabled */
|
|
761
|
+
static DISABLED = new H264SpatialAq('DISABLED');
|
|
762
|
+
/** Enabled */
|
|
763
|
+
static ENABLED = new H264SpatialAq('ENABLED');
|
|
764
|
+
/** A value not yet modelled by AWS CDK. */
|
|
765
|
+
static of(value) {
|
|
766
|
+
return new H264SpatialAq(value);
|
|
767
|
+
}
|
|
768
|
+
/** The underlying string value passed to CloudFormation. */
|
|
769
|
+
value;
|
|
770
|
+
constructor(value) {
|
|
771
|
+
this.value = value;
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
exports.H264SpatialAq = H264SpatialAq;
|
|
775
|
+
/**
|
|
776
|
+
* H.264 temporal adaptive quantization.
|
|
777
|
+
*/
|
|
778
|
+
class H264TemporalAq {
|
|
779
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264TemporalAq", version: "2.268.0-alpha.0" };
|
|
780
|
+
/** Disabled */
|
|
781
|
+
static DISABLED = new H264TemporalAq('DISABLED');
|
|
782
|
+
/** Enabled */
|
|
783
|
+
static ENABLED = new H264TemporalAq('ENABLED');
|
|
784
|
+
/** A value not yet modelled by AWS CDK. */
|
|
785
|
+
static of(value) {
|
|
786
|
+
return new H264TemporalAq(value);
|
|
787
|
+
}
|
|
788
|
+
/** The underlying string value passed to CloudFormation. */
|
|
789
|
+
value;
|
|
790
|
+
constructor(value) {
|
|
791
|
+
this.value = value;
|
|
792
|
+
}
|
|
793
|
+
}
|
|
794
|
+
exports.H264TemporalAq = H264TemporalAq;
|
|
795
|
+
/**
|
|
796
|
+
* H.265 scene change detection.
|
|
797
|
+
*/
|
|
798
|
+
class H265SceneChangeDetect {
|
|
799
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265SceneChangeDetect", version: "2.268.0-alpha.0" };
|
|
800
|
+
/** Disabled */
|
|
801
|
+
static DISABLED = new H265SceneChangeDetect('DISABLED');
|
|
802
|
+
/** Enabled */
|
|
803
|
+
static ENABLED = new H265SceneChangeDetect('ENABLED');
|
|
804
|
+
/** A value not yet modelled by AWS CDK. */
|
|
805
|
+
static of(value) {
|
|
806
|
+
return new H265SceneChangeDetect(value);
|
|
807
|
+
}
|
|
808
|
+
/** The underlying string value passed to CloudFormation. */
|
|
809
|
+
value;
|
|
810
|
+
constructor(value) {
|
|
811
|
+
this.value = value;
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
exports.H265SceneChangeDetect = H265SceneChangeDetect;
|
|
815
|
+
/**
|
|
816
|
+
* AV1 timecode insertion.
|
|
817
|
+
*/
|
|
818
|
+
class Av1TimecodeInsertion {
|
|
819
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1TimecodeInsertion", version: "2.268.0-alpha.0" };
|
|
820
|
+
/** Disabled — do not insert timecodes */
|
|
821
|
+
static DISABLED = new Av1TimecodeInsertion('DISABLED');
|
|
822
|
+
/**
|
|
823
|
+
* Include timecodes as a metadata OBU (Open Bitstream Unit) of type
|
|
824
|
+
* `METADATA_TYPE_TIMECODE`, based on the source specified in the channel's timecode config.
|
|
825
|
+
*/
|
|
826
|
+
static METADATA_OBU = new Av1TimecodeInsertion('METADATA_OBU');
|
|
827
|
+
/** A value not yet modelled by AWS CDK. */
|
|
828
|
+
static of(value) {
|
|
829
|
+
return new Av1TimecodeInsertion(value);
|
|
830
|
+
}
|
|
831
|
+
/** The underlying string value passed to CloudFormation. */
|
|
832
|
+
value;
|
|
833
|
+
constructor(value) {
|
|
834
|
+
this.value = value;
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
exports.Av1TimecodeInsertion = Av1TimecodeInsertion;
|
|
838
|
+
// =============================================================================
|
|
839
|
+
// Timecode burn-in settings
|
|
840
|
+
// =============================================================================
|
|
841
|
+
/**
|
|
842
|
+
* Font size for timecode burn-in.
|
|
843
|
+
*/
|
|
844
|
+
class TimecodeBurninFontSize {
|
|
845
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TimecodeBurninFontSize", version: "2.268.0-alpha.0" };
|
|
846
|
+
/** Extra small */
|
|
847
|
+
static EXTRA_SMALL_10 = new TimecodeBurninFontSize('EXTRA_SMALL_10');
|
|
848
|
+
/** Large */
|
|
849
|
+
static LARGE_48 = new TimecodeBurninFontSize('LARGE_48');
|
|
850
|
+
/** Medium */
|
|
851
|
+
static MEDIUM_32 = new TimecodeBurninFontSize('MEDIUM_32');
|
|
852
|
+
/** Small */
|
|
853
|
+
static SMALL_16 = new TimecodeBurninFontSize('SMALL_16');
|
|
854
|
+
/** A value not yet modelled by AWS CDK. */
|
|
855
|
+
static of(value) {
|
|
856
|
+
return new TimecodeBurninFontSize(value);
|
|
857
|
+
}
|
|
858
|
+
/** The underlying string value passed to CloudFormation. */
|
|
859
|
+
value;
|
|
860
|
+
constructor(value) {
|
|
861
|
+
this.value = value;
|
|
862
|
+
}
|
|
863
|
+
}
|
|
864
|
+
exports.TimecodeBurninFontSize = TimecodeBurninFontSize;
|
|
865
|
+
/**
|
|
866
|
+
* Position for timecode burn-in overlay.
|
|
867
|
+
*/
|
|
868
|
+
class TimecodeBurninPosition {
|
|
869
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TimecodeBurninPosition", version: "2.268.0-alpha.0" };
|
|
870
|
+
/** Bottom center */
|
|
871
|
+
static BOTTOM_CENTER = new TimecodeBurninPosition('BOTTOM_CENTER');
|
|
872
|
+
/** Bottom left */
|
|
873
|
+
static BOTTOM_LEFT = new TimecodeBurninPosition('BOTTOM_LEFT');
|
|
874
|
+
/** Bottom right */
|
|
875
|
+
static BOTTOM_RIGHT = new TimecodeBurninPosition('BOTTOM_RIGHT');
|
|
876
|
+
/** Middle center */
|
|
877
|
+
static MIDDLE_CENTER = new TimecodeBurninPosition('MIDDLE_CENTER');
|
|
878
|
+
/** Middle left */
|
|
879
|
+
static MIDDLE_LEFT = new TimecodeBurninPosition('MIDDLE_LEFT');
|
|
880
|
+
/** Middle right */
|
|
881
|
+
static MIDDLE_RIGHT = new TimecodeBurninPosition('MIDDLE_RIGHT');
|
|
882
|
+
/** Top center */
|
|
883
|
+
static TOP_CENTER = new TimecodeBurninPosition('TOP_CENTER');
|
|
884
|
+
/** Top left */
|
|
885
|
+
static TOP_LEFT = new TimecodeBurninPosition('TOP_LEFT');
|
|
886
|
+
/** Top right */
|
|
887
|
+
static TOP_RIGHT = new TimecodeBurninPosition('TOP_RIGHT');
|
|
888
|
+
/** A value not yet modelled by AWS CDK. */
|
|
889
|
+
static of(value) {
|
|
890
|
+
return new TimecodeBurninPosition(value);
|
|
891
|
+
}
|
|
892
|
+
/** The underlying string value passed to CloudFormation. */
|
|
893
|
+
value;
|
|
894
|
+
constructor(value) {
|
|
895
|
+
this.value = value;
|
|
896
|
+
}
|
|
897
|
+
}
|
|
898
|
+
exports.TimecodeBurninPosition = TimecodeBurninPosition;
|
|
899
|
+
/**
|
|
900
|
+
* H.264 rate control. Use the static factory methods to create.
|
|
901
|
+
*/
|
|
902
|
+
class H264RateControl {
|
|
903
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264RateControl", version: "2.268.0-alpha.0" };
|
|
904
|
+
/** Constant bitrate. */
|
|
905
|
+
static cbr(props) {
|
|
906
|
+
try {
|
|
907
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_CbrRateControlProps(props);
|
|
908
|
+
}
|
|
909
|
+
catch (error) {
|
|
910
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
911
|
+
Error.captureStackTrace(error, this.cbr);
|
|
912
|
+
}
|
|
913
|
+
throw error;
|
|
914
|
+
}
|
|
915
|
+
return new H264RateControl('CBR', props.bitrate, undefined, undefined);
|
|
916
|
+
}
|
|
917
|
+
/** Variable bitrate. */
|
|
918
|
+
static vbr(props) {
|
|
919
|
+
try {
|
|
920
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_VbrRateControlProps(props);
|
|
921
|
+
}
|
|
922
|
+
catch (error) {
|
|
923
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
924
|
+
Error.captureStackTrace(error, this.vbr);
|
|
925
|
+
}
|
|
926
|
+
throw error;
|
|
927
|
+
}
|
|
928
|
+
return new H264RateControl('VBR', props.bitrate, props.maxBitrate, undefined);
|
|
929
|
+
}
|
|
930
|
+
/** Quality-defined variable bitrate. */
|
|
931
|
+
static qvbr(props) {
|
|
932
|
+
try {
|
|
933
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_QvbrRateControlProps(props);
|
|
934
|
+
}
|
|
935
|
+
catch (error) {
|
|
936
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
937
|
+
Error.captureStackTrace(error, this.qvbr);
|
|
938
|
+
}
|
|
939
|
+
throw error;
|
|
940
|
+
}
|
|
941
|
+
return new H264RateControl('QVBR', undefined, props.maxBitrate, props.qvbrQualityLevel);
|
|
942
|
+
}
|
|
943
|
+
/** @internal */
|
|
944
|
+
_mode;
|
|
945
|
+
/** @internal */
|
|
946
|
+
_bitrate;
|
|
947
|
+
/** @internal */
|
|
948
|
+
_maxBitrate;
|
|
949
|
+
/** @internal */
|
|
950
|
+
_qvbrQualityLevel;
|
|
951
|
+
constructor(mode, bitrate, maxBitrate, qvbrQualityLevel) {
|
|
952
|
+
this._mode = mode;
|
|
953
|
+
this._bitrate = bitrate;
|
|
954
|
+
this._maxBitrate = maxBitrate;
|
|
955
|
+
this._qvbrQualityLevel = qvbrQualityLevel;
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
exports.H264RateControl = H264RateControl;
|
|
959
|
+
/**
|
|
960
|
+
* H.265 rate control. Use the static factory methods to create.
|
|
961
|
+
*/
|
|
962
|
+
class H265RateControl {
|
|
963
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265RateControl", version: "2.268.0-alpha.0" };
|
|
964
|
+
/** Constant bitrate. */
|
|
965
|
+
static cbr(props) {
|
|
966
|
+
try {
|
|
967
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_CbrRateControlProps(props);
|
|
968
|
+
}
|
|
969
|
+
catch (error) {
|
|
970
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
971
|
+
Error.captureStackTrace(error, this.cbr);
|
|
972
|
+
}
|
|
973
|
+
throw error;
|
|
974
|
+
}
|
|
975
|
+
return new H265RateControl('CBR', props.bitrate, undefined, undefined);
|
|
976
|
+
}
|
|
977
|
+
/** Variable bitrate. */
|
|
978
|
+
static vbr(props) {
|
|
979
|
+
try {
|
|
980
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_VbrRateControlProps(props);
|
|
981
|
+
}
|
|
982
|
+
catch (error) {
|
|
983
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
984
|
+
Error.captureStackTrace(error, this.vbr);
|
|
985
|
+
}
|
|
986
|
+
throw error;
|
|
987
|
+
}
|
|
988
|
+
return new H265RateControl('VBR', props.bitrate, props.maxBitrate, undefined);
|
|
989
|
+
}
|
|
990
|
+
/** Quality-defined variable bitrate. */
|
|
991
|
+
static qvbr(props) {
|
|
992
|
+
try {
|
|
993
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_QvbrRateControlProps(props);
|
|
994
|
+
}
|
|
995
|
+
catch (error) {
|
|
996
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
997
|
+
Error.captureStackTrace(error, this.qvbr);
|
|
998
|
+
}
|
|
999
|
+
throw error;
|
|
1000
|
+
}
|
|
1001
|
+
return new H265RateControl('QVBR', undefined, props.maxBitrate, props.qvbrQualityLevel);
|
|
1002
|
+
}
|
|
1003
|
+
/** @internal */
|
|
1004
|
+
_mode;
|
|
1005
|
+
/** @internal */
|
|
1006
|
+
_bitrate;
|
|
1007
|
+
/** @internal */
|
|
1008
|
+
_maxBitrate;
|
|
1009
|
+
/** @internal */
|
|
1010
|
+
_qvbrQualityLevel;
|
|
1011
|
+
constructor(mode, bitrate, maxBitrate, qvbrQualityLevel) {
|
|
1012
|
+
this._mode = mode;
|
|
1013
|
+
this._bitrate = bitrate;
|
|
1014
|
+
this._maxBitrate = maxBitrate;
|
|
1015
|
+
this._qvbrQualityLevel = qvbrQualityLevel;
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
exports.H265RateControl = H265RateControl;
|
|
1019
|
+
/**
|
|
1020
|
+
* AV1 rate control. AV1 supports QVBR and CBR.
|
|
1021
|
+
*/
|
|
1022
|
+
class Av1RateControl {
|
|
1023
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1RateControl", version: "2.268.0-alpha.0" };
|
|
1024
|
+
/** Quality-defined variable bitrate. */
|
|
1025
|
+
static qvbr(props) {
|
|
1026
|
+
try {
|
|
1027
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_QvbrRateControlProps(props);
|
|
1028
|
+
}
|
|
1029
|
+
catch (error) {
|
|
1030
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1031
|
+
Error.captureStackTrace(error, this.qvbr);
|
|
1032
|
+
}
|
|
1033
|
+
throw error;
|
|
1034
|
+
}
|
|
1035
|
+
return new Av1RateControl('QVBR', undefined, props.maxBitrate, props.qvbrQualityLevel);
|
|
1036
|
+
}
|
|
1037
|
+
/** Constant bitrate. */
|
|
1038
|
+
static cbr(props) {
|
|
1039
|
+
try {
|
|
1040
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_CbrRateControlProps(props);
|
|
1041
|
+
}
|
|
1042
|
+
catch (error) {
|
|
1043
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1044
|
+
Error.captureStackTrace(error, this.cbr);
|
|
1045
|
+
}
|
|
1046
|
+
throw error;
|
|
1047
|
+
}
|
|
1048
|
+
return new Av1RateControl('CBR', props.bitrate, undefined, undefined);
|
|
1049
|
+
}
|
|
1050
|
+
/** @internal */
|
|
1051
|
+
_mode;
|
|
1052
|
+
/** @internal */
|
|
1053
|
+
_bitrate;
|
|
1054
|
+
/** @internal */
|
|
1055
|
+
_maxBitrate;
|
|
1056
|
+
/** @internal */
|
|
1057
|
+
_qvbrQualityLevel;
|
|
1058
|
+
constructor(mode, bitrate, maxBitrate, qvbrQualityLevel) {
|
|
1059
|
+
this._mode = mode;
|
|
1060
|
+
this._bitrate = bitrate;
|
|
1061
|
+
this._maxBitrate = maxBitrate;
|
|
1062
|
+
this._qvbrQualityLevel = qvbrQualityLevel;
|
|
1063
|
+
}
|
|
1064
|
+
}
|
|
1065
|
+
exports.Av1RateControl = Av1RateControl;
|
|
1066
|
+
// =============================================================================
|
|
1067
|
+
// Color space settings classes
|
|
1068
|
+
// =============================================================================
|
|
1069
|
+
/**
|
|
1070
|
+
* Color space settings for H.264 video.
|
|
1071
|
+
*/
|
|
1072
|
+
class H264ColorSpaceSettings {
|
|
1073
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264ColorSpaceSettings", version: "2.268.0-alpha.0" };
|
|
1074
|
+
/** Pass through the source color space with no conversion. */
|
|
1075
|
+
static passthrough() {
|
|
1076
|
+
return new H264ColorSpaceSettings({ colorSpacePassthroughSettings: {} });
|
|
1077
|
+
}
|
|
1078
|
+
/** Convert to Rec.601 color space. */
|
|
1079
|
+
static rec601() {
|
|
1080
|
+
return new H264ColorSpaceSettings({ rec601Settings: {} });
|
|
1081
|
+
}
|
|
1082
|
+
/** Convert to Rec.709 color space. */
|
|
1083
|
+
static rec709() {
|
|
1084
|
+
return new H264ColorSpaceSettings({ rec709Settings: {} });
|
|
1085
|
+
}
|
|
1086
|
+
config;
|
|
1087
|
+
constructor(config) { this.config = config; }
|
|
1088
|
+
/** @internal */
|
|
1089
|
+
_bind() { return this.config; }
|
|
1090
|
+
}
|
|
1091
|
+
exports.H264ColorSpaceSettings = H264ColorSpaceSettings;
|
|
1092
|
+
/**
|
|
1093
|
+
* Color space settings for H.265 video.
|
|
1094
|
+
*/
|
|
1095
|
+
class H265ColorSpaceSettings {
|
|
1096
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265ColorSpaceSettings", version: "2.268.0-alpha.0" };
|
|
1097
|
+
/** Pass through the source color space with no conversion. */
|
|
1098
|
+
static passthrough() {
|
|
1099
|
+
return new H265ColorSpaceSettings({ colorSpacePassthroughSettings: {} });
|
|
1100
|
+
}
|
|
1101
|
+
/** Dolby Vision 8.1 color space. */
|
|
1102
|
+
static dolbyVision81() {
|
|
1103
|
+
return new H265ColorSpaceSettings({ dolbyVision81Settings: {} });
|
|
1104
|
+
}
|
|
1105
|
+
/** HDR10 color space. */
|
|
1106
|
+
static hdr10(props) {
|
|
1107
|
+
try {
|
|
1108
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_Hdr10SettingsProps(props);
|
|
1109
|
+
}
|
|
1110
|
+
catch (error) {
|
|
1111
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1112
|
+
Error.captureStackTrace(error, this.hdr10);
|
|
1113
|
+
}
|
|
1114
|
+
throw error;
|
|
1115
|
+
}
|
|
1116
|
+
return new H265ColorSpaceSettings({ hdr10Settings: props ?? {} });
|
|
1117
|
+
}
|
|
1118
|
+
/** HLG 2020 color space. */
|
|
1119
|
+
static hlg2020() {
|
|
1120
|
+
return new H265ColorSpaceSettings({ hlg2020Settings: {} });
|
|
1121
|
+
}
|
|
1122
|
+
/** Convert to Rec.601 color space. */
|
|
1123
|
+
static rec601() {
|
|
1124
|
+
return new H265ColorSpaceSettings({ rec601Settings: {} });
|
|
1125
|
+
}
|
|
1126
|
+
/** Convert to Rec.709 color space. */
|
|
1127
|
+
static rec709() {
|
|
1128
|
+
return new H265ColorSpaceSettings({ rec709Settings: {} });
|
|
1129
|
+
}
|
|
1130
|
+
config;
|
|
1131
|
+
constructor(config) { this.config = config; }
|
|
1132
|
+
/** @internal */
|
|
1133
|
+
_bind() { return this.config; }
|
|
1134
|
+
}
|
|
1135
|
+
exports.H265ColorSpaceSettings = H265ColorSpaceSettings;
|
|
1136
|
+
/**
|
|
1137
|
+
* Color space settings for AV1 video.
|
|
1138
|
+
*/
|
|
1139
|
+
class Av1ColorSpaceSettings {
|
|
1140
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.Av1ColorSpaceSettings", version: "2.268.0-alpha.0" };
|
|
1141
|
+
/** Pass through the source color space with no conversion. */
|
|
1142
|
+
static passthrough() {
|
|
1143
|
+
return new Av1ColorSpaceSettings({ colorSpacePassthroughSettings: {} });
|
|
1144
|
+
}
|
|
1145
|
+
/** HDR10 color space. */
|
|
1146
|
+
static hdr10(props) {
|
|
1147
|
+
try {
|
|
1148
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_Hdr10SettingsProps(props);
|
|
1149
|
+
}
|
|
1150
|
+
catch (error) {
|
|
1151
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1152
|
+
Error.captureStackTrace(error, this.hdr10);
|
|
1153
|
+
}
|
|
1154
|
+
throw error;
|
|
1155
|
+
}
|
|
1156
|
+
return new Av1ColorSpaceSettings({ hdr10Settings: props ?? {} });
|
|
1157
|
+
}
|
|
1158
|
+
/** HLG 2020 color space. */
|
|
1159
|
+
static hlg2020() {
|
|
1160
|
+
return new Av1ColorSpaceSettings({ hlg2020Settings: {} });
|
|
1161
|
+
}
|
|
1162
|
+
/** Convert to Rec.601 color space. */
|
|
1163
|
+
static rec601() {
|
|
1164
|
+
return new Av1ColorSpaceSettings({ rec601Settings: {} });
|
|
1165
|
+
}
|
|
1166
|
+
/** Convert to Rec.709 color space. */
|
|
1167
|
+
static rec709() {
|
|
1168
|
+
return new Av1ColorSpaceSettings({ rec709Settings: {} });
|
|
1169
|
+
}
|
|
1170
|
+
config;
|
|
1171
|
+
constructor(config) { this.config = config; }
|
|
1172
|
+
/** @internal */
|
|
1173
|
+
_bind() { return this.config; }
|
|
1174
|
+
}
|
|
1175
|
+
exports.Av1ColorSpaceSettings = Av1ColorSpaceSettings;
|
|
1176
|
+
// =============================================================================
|
|
1177
|
+
// Filter settings classes
|
|
1178
|
+
// =============================================================================
|
|
1179
|
+
/**
|
|
1180
|
+
* Post-filter sharpening for temporal filter.
|
|
1181
|
+
*/
|
|
1182
|
+
class TemporalFilterPostFilterSharpening {
|
|
1183
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TemporalFilterPostFilterSharpening", version: "2.268.0-alpha.0" };
|
|
1184
|
+
/** Auto */
|
|
1185
|
+
static AUTO = new TemporalFilterPostFilterSharpening('AUTO');
|
|
1186
|
+
/** Disabled */
|
|
1187
|
+
static DISABLED = new TemporalFilterPostFilterSharpening('DISABLED');
|
|
1188
|
+
/** Enabled */
|
|
1189
|
+
static ENABLED = new TemporalFilterPostFilterSharpening('ENABLED');
|
|
1190
|
+
/** A value not yet modelled by AWS CDK. */
|
|
1191
|
+
static of(value) {
|
|
1192
|
+
return new TemporalFilterPostFilterSharpening(value);
|
|
1193
|
+
}
|
|
1194
|
+
/** The underlying string value passed to CloudFormation. */
|
|
1195
|
+
value;
|
|
1196
|
+
constructor(value) {
|
|
1197
|
+
this.value = value;
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
exports.TemporalFilterPostFilterSharpening = TemporalFilterPostFilterSharpening;
|
|
1201
|
+
/**
|
|
1202
|
+
* Temporal filter strength.
|
|
1203
|
+
*/
|
|
1204
|
+
class TemporalFilterStrength {
|
|
1205
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.TemporalFilterStrength", version: "2.268.0-alpha.0" };
|
|
1206
|
+
/** Auto */
|
|
1207
|
+
static AUTO = new TemporalFilterStrength('AUTO');
|
|
1208
|
+
/** Strength 1 (recommended) */
|
|
1209
|
+
static STRENGTH_1 = new TemporalFilterStrength('STRENGTH_1');
|
|
1210
|
+
/** Strength 2 (recommended) */
|
|
1211
|
+
static STRENGTH_2 = new TemporalFilterStrength('STRENGTH_2');
|
|
1212
|
+
/** Strength 3 */
|
|
1213
|
+
static STRENGTH_3 = new TemporalFilterStrength('STRENGTH_3');
|
|
1214
|
+
/** Strength 4 */
|
|
1215
|
+
static STRENGTH_4 = new TemporalFilterStrength('STRENGTH_4');
|
|
1216
|
+
/** Strength 5 */
|
|
1217
|
+
static STRENGTH_5 = new TemporalFilterStrength('STRENGTH_5');
|
|
1218
|
+
/** Strength 6 */
|
|
1219
|
+
static STRENGTH_6 = new TemporalFilterStrength('STRENGTH_6');
|
|
1220
|
+
/** Strength 7 */
|
|
1221
|
+
static STRENGTH_7 = new TemporalFilterStrength('STRENGTH_7');
|
|
1222
|
+
/** Strength 8 */
|
|
1223
|
+
static STRENGTH_8 = new TemporalFilterStrength('STRENGTH_8');
|
|
1224
|
+
/** Strength 9 */
|
|
1225
|
+
static STRENGTH_9 = new TemporalFilterStrength('STRENGTH_9');
|
|
1226
|
+
/** Strength 10 */
|
|
1227
|
+
static STRENGTH_10 = new TemporalFilterStrength('STRENGTH_10');
|
|
1228
|
+
/** Strength 11 */
|
|
1229
|
+
static STRENGTH_11 = new TemporalFilterStrength('STRENGTH_11');
|
|
1230
|
+
/** Strength 12 */
|
|
1231
|
+
static STRENGTH_12 = new TemporalFilterStrength('STRENGTH_12');
|
|
1232
|
+
/** Strength 13 */
|
|
1233
|
+
static STRENGTH_13 = new TemporalFilterStrength('STRENGTH_13');
|
|
1234
|
+
/** Strength 14 */
|
|
1235
|
+
static STRENGTH_14 = new TemporalFilterStrength('STRENGTH_14');
|
|
1236
|
+
/** Strength 15 */
|
|
1237
|
+
static STRENGTH_15 = new TemporalFilterStrength('STRENGTH_15');
|
|
1238
|
+
/** Strength 16 */
|
|
1239
|
+
static STRENGTH_16 = new TemporalFilterStrength('STRENGTH_16');
|
|
1240
|
+
/** A value not yet modelled by AWS CDK. */
|
|
1241
|
+
static of(value) {
|
|
1242
|
+
return new TemporalFilterStrength(value);
|
|
1243
|
+
}
|
|
1244
|
+
/** The underlying string value passed to CloudFormation. */
|
|
1245
|
+
value;
|
|
1246
|
+
constructor(value) {
|
|
1247
|
+
this.value = value;
|
|
1248
|
+
}
|
|
1249
|
+
}
|
|
1250
|
+
exports.TemporalFilterStrength = TemporalFilterStrength;
|
|
1251
|
+
/**
|
|
1252
|
+
* Post-filter sharpening for bandwidth reduction filter.
|
|
1253
|
+
*/
|
|
1254
|
+
class BandwidthReductionPostFilterSharpening {
|
|
1255
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.BandwidthReductionPostFilterSharpening", version: "2.268.0-alpha.0" };
|
|
1256
|
+
/** Disabled */
|
|
1257
|
+
static DISABLED = new BandwidthReductionPostFilterSharpening('DISABLED');
|
|
1258
|
+
/** Sharpening level 1 */
|
|
1259
|
+
static SHARPENING_1 = new BandwidthReductionPostFilterSharpening('SHARPENING_1');
|
|
1260
|
+
/** Sharpening level 2 */
|
|
1261
|
+
static SHARPENING_2 = new BandwidthReductionPostFilterSharpening('SHARPENING_2');
|
|
1262
|
+
/** Sharpening level 3 */
|
|
1263
|
+
static SHARPENING_3 = new BandwidthReductionPostFilterSharpening('SHARPENING_3');
|
|
1264
|
+
/** A value not yet modelled by AWS CDK. */
|
|
1265
|
+
static of(value) {
|
|
1266
|
+
return new BandwidthReductionPostFilterSharpening(value);
|
|
1267
|
+
}
|
|
1268
|
+
/** The underlying string value passed to CloudFormation. */
|
|
1269
|
+
value;
|
|
1270
|
+
constructor(value) {
|
|
1271
|
+
this.value = value;
|
|
1272
|
+
}
|
|
1273
|
+
}
|
|
1274
|
+
exports.BandwidthReductionPostFilterSharpening = BandwidthReductionPostFilterSharpening;
|
|
1275
|
+
/**
|
|
1276
|
+
* Bandwidth reduction filter strength.
|
|
1277
|
+
*/
|
|
1278
|
+
class BandwidthReductionStrength {
|
|
1279
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.BandwidthReductionStrength", version: "2.268.0-alpha.0" };
|
|
1280
|
+
/** Auto */
|
|
1281
|
+
static AUTO = new BandwidthReductionStrength('AUTO');
|
|
1282
|
+
/** Strength 1 */
|
|
1283
|
+
static STRENGTH_1 = new BandwidthReductionStrength('STRENGTH_1');
|
|
1284
|
+
/** Strength 2 */
|
|
1285
|
+
static STRENGTH_2 = new BandwidthReductionStrength('STRENGTH_2');
|
|
1286
|
+
/** Strength 3 */
|
|
1287
|
+
static STRENGTH_3 = new BandwidthReductionStrength('STRENGTH_3');
|
|
1288
|
+
/** Strength 4 */
|
|
1289
|
+
static STRENGTH_4 = new BandwidthReductionStrength('STRENGTH_4');
|
|
1290
|
+
/** A value not yet modelled by AWS CDK. */
|
|
1291
|
+
static of(value) {
|
|
1292
|
+
return new BandwidthReductionStrength(value);
|
|
1293
|
+
}
|
|
1294
|
+
/** The underlying string value passed to CloudFormation. */
|
|
1295
|
+
value;
|
|
1296
|
+
constructor(value) {
|
|
1297
|
+
this.value = value;
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
exports.BandwidthReductionStrength = BandwidthReductionStrength;
|
|
1301
|
+
/**
|
|
1302
|
+
* Filter settings for H.264 video. Supports temporal filter and bandwidth reduction filter.
|
|
1303
|
+
*/
|
|
1304
|
+
class H264FilterSettings {
|
|
1305
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H264FilterSettings", version: "2.268.0-alpha.0" };
|
|
1306
|
+
/** Apply a temporal filter. */
|
|
1307
|
+
static temporalFilter(props) {
|
|
1308
|
+
try {
|
|
1309
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_TemporalFilterProps(props);
|
|
1310
|
+
}
|
|
1311
|
+
catch (error) {
|
|
1312
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1313
|
+
Error.captureStackTrace(error, this.temporalFilter);
|
|
1314
|
+
}
|
|
1315
|
+
throw error;
|
|
1316
|
+
}
|
|
1317
|
+
return new H264FilterSettings({
|
|
1318
|
+
temporalFilterSettings: props ? {
|
|
1319
|
+
postFilterSharpening: props.postFilterSharpening?.value,
|
|
1320
|
+
strength: props.strength?.value,
|
|
1321
|
+
} : {},
|
|
1322
|
+
});
|
|
1323
|
+
}
|
|
1324
|
+
/** Apply a bandwidth reduction filter. */
|
|
1325
|
+
static bandwidthReductionFilter(props) {
|
|
1326
|
+
try {
|
|
1327
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_BandwidthReductionFilterProps(props);
|
|
1328
|
+
}
|
|
1329
|
+
catch (error) {
|
|
1330
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1331
|
+
Error.captureStackTrace(error, this.bandwidthReductionFilter);
|
|
1332
|
+
}
|
|
1333
|
+
throw error;
|
|
1334
|
+
}
|
|
1335
|
+
return new H264FilterSettings({
|
|
1336
|
+
bandwidthReductionFilterSettings: props ? {
|
|
1337
|
+
postFilterSharpening: props.postFilterSharpening?.value,
|
|
1338
|
+
strength: props.strength?.value,
|
|
1339
|
+
} : {},
|
|
1340
|
+
});
|
|
1341
|
+
}
|
|
1342
|
+
config;
|
|
1343
|
+
constructor(config) { this.config = config; }
|
|
1344
|
+
/** @internal */
|
|
1345
|
+
_bind() { return this.config; }
|
|
1346
|
+
}
|
|
1347
|
+
exports.H264FilterSettings = H264FilterSettings;
|
|
1348
|
+
/**
|
|
1349
|
+
* Filter settings for H.265 video. Supports temporal filter and bandwidth reduction filter.
|
|
1350
|
+
*/
|
|
1351
|
+
class H265FilterSettings {
|
|
1352
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265FilterSettings", version: "2.268.0-alpha.0" };
|
|
1353
|
+
/** Apply a temporal filter. */
|
|
1354
|
+
static temporalFilter(props) {
|
|
1355
|
+
try {
|
|
1356
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_TemporalFilterProps(props);
|
|
1357
|
+
}
|
|
1358
|
+
catch (error) {
|
|
1359
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1360
|
+
Error.captureStackTrace(error, this.temporalFilter);
|
|
1361
|
+
}
|
|
1362
|
+
throw error;
|
|
1363
|
+
}
|
|
1364
|
+
return new H265FilterSettings({
|
|
1365
|
+
temporalFilterSettings: props ? {
|
|
1366
|
+
postFilterSharpening: props.postFilterSharpening?.value,
|
|
1367
|
+
strength: props.strength?.value,
|
|
1368
|
+
} : {},
|
|
1369
|
+
});
|
|
1370
|
+
}
|
|
1371
|
+
/** Apply a bandwidth reduction filter. */
|
|
1372
|
+
static bandwidthReductionFilter(props) {
|
|
1373
|
+
try {
|
|
1374
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_BandwidthReductionFilterProps(props);
|
|
1375
|
+
}
|
|
1376
|
+
catch (error) {
|
|
1377
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1378
|
+
Error.captureStackTrace(error, this.bandwidthReductionFilter);
|
|
1379
|
+
}
|
|
1380
|
+
throw error;
|
|
1381
|
+
}
|
|
1382
|
+
return new H265FilterSettings({
|
|
1383
|
+
bandwidthReductionFilterSettings: props ? {
|
|
1384
|
+
postFilterSharpening: props.postFilterSharpening?.value,
|
|
1385
|
+
strength: props.strength?.value,
|
|
1386
|
+
} : {},
|
|
1387
|
+
});
|
|
1388
|
+
}
|
|
1389
|
+
config;
|
|
1390
|
+
constructor(config) { this.config = config; }
|
|
1391
|
+
/** @internal */
|
|
1392
|
+
_bind() { return this.config; }
|
|
1393
|
+
}
|
|
1394
|
+
exports.H265FilterSettings = H265FilterSettings;
|
|
1395
|
+
/**
|
|
1396
|
+
* H.265 profile.
|
|
1397
|
+
*/
|
|
1398
|
+
class H265Profile {
|
|
1399
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265Profile", version: "2.268.0-alpha.0" };
|
|
1400
|
+
/** Main profile */
|
|
1401
|
+
static MAIN = new H265Profile('MAIN');
|
|
1402
|
+
/** Main 10-bit profile */
|
|
1403
|
+
static MAIN_10BIT = new H265Profile('MAIN_10BIT');
|
|
1404
|
+
/** A value not yet modelled by AWS CDK. */
|
|
1405
|
+
static of(value) {
|
|
1406
|
+
return new H265Profile(value);
|
|
1407
|
+
}
|
|
1408
|
+
/** The underlying string value passed to CloudFormation. */
|
|
1409
|
+
value;
|
|
1410
|
+
constructor(value) {
|
|
1411
|
+
this.value = value;
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
exports.H265Profile = H265Profile;
|
|
1415
|
+
/**
|
|
1416
|
+
* H.265 tier.
|
|
1417
|
+
*/
|
|
1418
|
+
class H265Tier {
|
|
1419
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.H265Tier", version: "2.268.0-alpha.0" };
|
|
1420
|
+
/** Main tier */
|
|
1421
|
+
static MAIN = new H265Tier('MAIN');
|
|
1422
|
+
/** High tier */
|
|
1423
|
+
static HIGH = new H265Tier('HIGH');
|
|
1424
|
+
/** A value not yet modelled by AWS CDK. */
|
|
1425
|
+
static of(value) {
|
|
1426
|
+
return new H265Tier(value);
|
|
1427
|
+
}
|
|
1428
|
+
/** The underlying string value passed to CloudFormation. */
|
|
1429
|
+
value;
|
|
1430
|
+
constructor(value) {
|
|
1431
|
+
this.value = value;
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
exports.H265Tier = H265Tier;
|
|
1435
|
+
// =============================================================================
|
|
1436
|
+
// VideoCodecSettings (abstract + subclasses)
|
|
1437
|
+
// =============================================================================
|
|
1438
|
+
/**
|
|
1439
|
+
* The type of video codec. Users select a codec via the
|
|
1440
|
+
* `VideoCodecSettings` factory methods, never by passing this type directly.
|
|
1441
|
+
* @internal
|
|
1442
|
+
*/
|
|
1443
|
+
var VideoCodecType;
|
|
1444
|
+
(function (VideoCodecType) {
|
|
1445
|
+
/** H.264 (AVC) */
|
|
1446
|
+
VideoCodecType["H264"] = "H264";
|
|
1447
|
+
/** H.265 (HEVC) */
|
|
1448
|
+
VideoCodecType["H265"] = "H265";
|
|
1449
|
+
/** AV1 */
|
|
1450
|
+
VideoCodecType["AV1"] = "AV1";
|
|
1451
|
+
/** Frame Capture (JPEG) */
|
|
1452
|
+
VideoCodecType["FRAME_CAPTURE"] = "FRAME_CAPTURE";
|
|
1453
|
+
})(VideoCodecType || (exports.VideoCodecType = VideoCodecType = {}));
|
|
1454
|
+
/**
|
|
1455
|
+
* Video codec settings. Use the static factory methods to create.
|
|
1456
|
+
*/
|
|
1457
|
+
class VideoCodecSettings {
|
|
1458
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.VideoCodecSettings", version: "2.268.0-alpha.0" };
|
|
1459
|
+
/** Create H.264 (AVC) codec settings. */
|
|
1460
|
+
static h264(props) {
|
|
1461
|
+
try {
|
|
1462
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_H264SettingsProps(props);
|
|
1463
|
+
}
|
|
1464
|
+
catch (error) {
|
|
1465
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1466
|
+
Error.captureStackTrace(error, this.h264);
|
|
1467
|
+
}
|
|
1468
|
+
throw error;
|
|
1469
|
+
}
|
|
1470
|
+
return new H264VideoCodecSettings(props ?? {});
|
|
1471
|
+
}
|
|
1472
|
+
/** Create H.265 (HEVC) codec settings. Framerate is required for H.265. */
|
|
1473
|
+
static h265(props) {
|
|
1474
|
+
try {
|
|
1475
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_H265SettingsProps(props);
|
|
1476
|
+
}
|
|
1477
|
+
catch (error) {
|
|
1478
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1479
|
+
Error.captureStackTrace(error, this.h265);
|
|
1480
|
+
}
|
|
1481
|
+
throw error;
|
|
1482
|
+
}
|
|
1483
|
+
return new H265VideoCodecSettings(props);
|
|
1484
|
+
}
|
|
1485
|
+
/** Create AV1 codec settings. */
|
|
1486
|
+
static av1(props) {
|
|
1487
|
+
try {
|
|
1488
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_Av1SettingsProps(props);
|
|
1489
|
+
}
|
|
1490
|
+
catch (error) {
|
|
1491
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1492
|
+
Error.captureStackTrace(error, this.av1);
|
|
1493
|
+
}
|
|
1494
|
+
throw error;
|
|
1495
|
+
}
|
|
1496
|
+
return new Av1VideoCodecSettings(props ?? {});
|
|
1497
|
+
}
|
|
1498
|
+
/** Create frame capture codec settings. */
|
|
1499
|
+
static frameCapture(props) {
|
|
1500
|
+
try {
|
|
1501
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_FrameCaptureSettingsProps(props);
|
|
1502
|
+
}
|
|
1503
|
+
catch (error) {
|
|
1504
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
1505
|
+
Error.captureStackTrace(error, this.frameCapture);
|
|
1506
|
+
}
|
|
1507
|
+
throw error;
|
|
1508
|
+
}
|
|
1509
|
+
return new FrameCaptureVideoCodecSettings(props ?? {});
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
exports.VideoCodecSettings = VideoCodecSettings;
|
|
1513
|
+
/** @internal */
|
|
1514
|
+
class H264VideoCodecSettings extends VideoCodecSettings {
|
|
1515
|
+
props;
|
|
1516
|
+
_codecType = VideoCodecType.H264;
|
|
1517
|
+
constructor(props) {
|
|
1518
|
+
super();
|
|
1519
|
+
this.props = props;
|
|
1520
|
+
}
|
|
1521
|
+
_hasExplicitFramerate() {
|
|
1522
|
+
return this.props.framerate != null;
|
|
1523
|
+
}
|
|
1524
|
+
_bind() {
|
|
1525
|
+
const p = this.props;
|
|
1526
|
+
const rc = p.rateControl;
|
|
1527
|
+
return {
|
|
1528
|
+
h264Settings: {
|
|
1529
|
+
bitrate: rc?._bitrate?.toBps(),
|
|
1530
|
+
maxBitrate: rc?._maxBitrate?.toBps(),
|
|
1531
|
+
rateControlMode: rc?._mode,
|
|
1532
|
+
qvbrQualityLevel: rc?._qvbrQualityLevel,
|
|
1533
|
+
profile: (p.profile ?? H264Profile.MAIN).value,
|
|
1534
|
+
gopSize: p.gopSize?._value ?? 1,
|
|
1535
|
+
gopSizeUnits: p.gopSize?._units ?? 'SECONDS',
|
|
1536
|
+
gopNumBFrames: p.gopNumBFrames,
|
|
1537
|
+
adaptiveQuantization: (p.adaptiveQuantization ?? H264AdaptiveQuantization.AUTO).value,
|
|
1538
|
+
framerateControl: p.framerate ? 'SPECIFIED' : 'INITIALIZE_FROM_SOURCE',
|
|
1539
|
+
framerateNumerator: p.framerate?._numerator(),
|
|
1540
|
+
framerateDenominator: p.framerate?._denominator(),
|
|
1541
|
+
parControl: (p.pixelAspectRatio || p.framerate) ? 'SPECIFIED' : 'INITIALIZE_FROM_SOURCE',
|
|
1542
|
+
parNumerator: p.pixelAspectRatio?._numerator() ?? (p.framerate ? shared_1.PixelAspectRatio.SQUARE._numerator() : undefined),
|
|
1543
|
+
parDenominator: p.pixelAspectRatio?._denominator() ?? (p.framerate ? shared_1.PixelAspectRatio.SQUARE._denominator() : undefined),
|
|
1544
|
+
sceneChangeDetect: (p.sceneChangeDetect ?? H264SceneChangeDetect.ENABLED).value,
|
|
1545
|
+
spatialAq: (p.spatialAq ?? H264SpatialAq.ENABLED).value,
|
|
1546
|
+
temporalAq: (p.temporalAq ?? H264TemporalAq.ENABLED).value,
|
|
1547
|
+
timecodeBurninSettings: p.timecodeBurnin ? {
|
|
1548
|
+
fontSize: p.timecodeBurnin.fontSize?.value,
|
|
1549
|
+
position: p.timecodeBurnin.position?.value,
|
|
1550
|
+
prefix: p.timecodeBurnin.prefix,
|
|
1551
|
+
} : undefined,
|
|
1552
|
+
afdSignaling: (p.afdSignaling ?? AfdSignaling.NONE).value,
|
|
1553
|
+
bufFillPct: p.bufFillPct,
|
|
1554
|
+
bufSize: p.bufSize,
|
|
1555
|
+
colorMetadata: p.colorMetadata?.value,
|
|
1556
|
+
colorSpaceSettings: p.colorSpaceSettings?._bind(),
|
|
1557
|
+
entropyEncoding: p.entropyEncoding?.value,
|
|
1558
|
+
filterSettings: p.filterSettings?._bind(),
|
|
1559
|
+
fixedAfd: p.fixedAfd,
|
|
1560
|
+
flickerAq: (p.flickerAq ?? FlickerAq.ENABLED).value,
|
|
1561
|
+
forceFieldPictures: p.forceFieldPictures?.value,
|
|
1562
|
+
gopBReference: p.gopBReference?.value,
|
|
1563
|
+
gopClosedCadence: p.gopClosedCadence,
|
|
1564
|
+
level: (p.level ?? H264Level.H264_LEVEL_AUTO).value,
|
|
1565
|
+
lookAheadRateControl: (p.lookAheadRateControl ?? LookAheadRateControl.HIGH).value,
|
|
1566
|
+
minIInterval: p.minIInterval,
|
|
1567
|
+
numRefFrames: p.numRefFrames,
|
|
1568
|
+
scanType: (p.scanType ?? ScanType.PROGRESSIVE).value,
|
|
1569
|
+
slices: p.slices,
|
|
1570
|
+
softness: p.softness,
|
|
1571
|
+
syntax: (p.syntax ?? H264Syntax.DEFAULT).value,
|
|
1572
|
+
timecodeInsertion: p.timecodeInsertion?.value,
|
|
1573
|
+
minQp: p.minQp,
|
|
1574
|
+
minBitrate: p.minBitrate,
|
|
1575
|
+
qualityLevel: p.qualityLevel?.value,
|
|
1576
|
+
subgopLength: p.subgopLength?.value,
|
|
1577
|
+
},
|
|
1578
|
+
};
|
|
1579
|
+
}
|
|
1580
|
+
}
|
|
1581
|
+
/** @internal */
|
|
1582
|
+
class H265VideoCodecSettings extends VideoCodecSettings {
|
|
1583
|
+
props;
|
|
1584
|
+
_codecType = VideoCodecType.H265;
|
|
1585
|
+
constructor(props) {
|
|
1586
|
+
super();
|
|
1587
|
+
this.props = props;
|
|
1588
|
+
}
|
|
1589
|
+
_hasExplicitFramerate() {
|
|
1590
|
+
return this.props.framerate != null;
|
|
1591
|
+
}
|
|
1592
|
+
_bind() {
|
|
1593
|
+
const p = this.props;
|
|
1594
|
+
const rc = p.rateControl;
|
|
1595
|
+
return {
|
|
1596
|
+
h265Settings: {
|
|
1597
|
+
bitrate: rc?._bitrate?.toBps(),
|
|
1598
|
+
maxBitrate: rc?._maxBitrate?.toBps(),
|
|
1599
|
+
rateControlMode: rc?._mode,
|
|
1600
|
+
qvbrQualityLevel: rc?._qvbrQualityLevel,
|
|
1601
|
+
profile: (p.profile ?? H265Profile.MAIN).value,
|
|
1602
|
+
tier: (p.tier ?? H265Tier.MAIN).value,
|
|
1603
|
+
level: p.level?.value,
|
|
1604
|
+
gopSize: p.gopSize?._value ?? 1,
|
|
1605
|
+
gopSizeUnits: p.gopSize?._units ?? 'SECONDS',
|
|
1606
|
+
framerateNumerator: p.framerate._numerator(),
|
|
1607
|
+
framerateDenominator: p.framerate._denominator(),
|
|
1608
|
+
parNumerator: p.pixelAspectRatio?._numerator() ?? shared_1.PixelAspectRatio.SQUARE._numerator(),
|
|
1609
|
+
parDenominator: p.pixelAspectRatio?._denominator() ?? shared_1.PixelAspectRatio.SQUARE._denominator(),
|
|
1610
|
+
sceneChangeDetect: (p.sceneChangeDetect ?? H265SceneChangeDetect.ENABLED).value,
|
|
1611
|
+
timecodeBurninSettings: p.timecodeBurnin ? {
|
|
1612
|
+
fontSize: p.timecodeBurnin.fontSize?.value,
|
|
1613
|
+
position: p.timecodeBurnin.position?.value,
|
|
1614
|
+
prefix: p.timecodeBurnin.prefix,
|
|
1615
|
+
} : undefined,
|
|
1616
|
+
adaptiveQuantization: (p.adaptiveQuantization ?? H265AdaptiveQuantization.AUTO).value,
|
|
1617
|
+
afdSignaling: (p.afdSignaling ?? AfdSignaling.NONE).value,
|
|
1618
|
+
alternativeTransferFunction: p.alternativeTransferFunction?.value,
|
|
1619
|
+
bufSize: p.bufSize,
|
|
1620
|
+
colorMetadata: p.colorMetadata?.value,
|
|
1621
|
+
colorSpaceSettings: p.colorSpaceSettings?._bind(),
|
|
1622
|
+
deblocking: p.deblocking?.value,
|
|
1623
|
+
filterSettings: p.filterSettings?._bind(),
|
|
1624
|
+
fixedAfd: p.fixedAfd,
|
|
1625
|
+
flickerAq: p.flickerAq?.value,
|
|
1626
|
+
gopBReference: p.gopBReference?.value,
|
|
1627
|
+
gopClosedCadence: p.gopClosedCadence,
|
|
1628
|
+
gopNumBFrames: p.gopNumBFrames,
|
|
1629
|
+
lookAheadRateControl: p.lookAheadRateControl?.value,
|
|
1630
|
+
minIInterval: p.minIInterval,
|
|
1631
|
+
scanType: (p.scanType ?? ScanType.PROGRESSIVE).value,
|
|
1632
|
+
slices: p.slices,
|
|
1633
|
+
timecodeInsertion: p.timecodeInsertion?.value,
|
|
1634
|
+
minQp: p.minQp,
|
|
1635
|
+
minBitrate: p.minBitrate,
|
|
1636
|
+
mvOverPictureBoundaries: p.mvOverPictureBoundaries?.value,
|
|
1637
|
+
mvTemporalPredictor: p.mvTemporalPredictor?.value,
|
|
1638
|
+
subgopLength: p.subgopLength?.value,
|
|
1639
|
+
tileHeight: p.tileHeight,
|
|
1640
|
+
tilePadding: p.tilePadding?.value,
|
|
1641
|
+
tileWidth: p.tileWidth,
|
|
1642
|
+
treeblockSize: p.treeblockSize?.value,
|
|
1643
|
+
},
|
|
1644
|
+
};
|
|
1645
|
+
}
|
|
1646
|
+
}
|
|
1647
|
+
/** @internal */
|
|
1648
|
+
class Av1VideoCodecSettings extends VideoCodecSettings {
|
|
1649
|
+
props;
|
|
1650
|
+
_codecType = VideoCodecType.AV1;
|
|
1651
|
+
constructor(props) {
|
|
1652
|
+
super();
|
|
1653
|
+
this.props = props;
|
|
1654
|
+
}
|
|
1655
|
+
_hasExplicitFramerate() {
|
|
1656
|
+
return this.props.framerate != null;
|
|
1657
|
+
}
|
|
1658
|
+
_bind() {
|
|
1659
|
+
const p = this.props;
|
|
1660
|
+
const rc = p.rateControl;
|
|
1661
|
+
return {
|
|
1662
|
+
av1Settings: {
|
|
1663
|
+
bitrate: rc?._bitrate?.toBps(),
|
|
1664
|
+
maxBitrate: rc?._maxBitrate?.toBps(),
|
|
1665
|
+
rateControlMode: rc?._mode,
|
|
1666
|
+
qvbrQualityLevel: rc?._qvbrQualityLevel,
|
|
1667
|
+
gopSize: p.gopSize?._value ?? 1,
|
|
1668
|
+
gopSizeUnits: p.gopSize?._units ?? 'SECONDS',
|
|
1669
|
+
framerateNumerator: p.framerate?._numerator(),
|
|
1670
|
+
framerateDenominator: p.framerate?._denominator(),
|
|
1671
|
+
timecodeBurninSettings: p.timecodeBurnin ? {
|
|
1672
|
+
fontSize: p.timecodeBurnin.fontSize?.value,
|
|
1673
|
+
position: p.timecodeBurnin.position?.value,
|
|
1674
|
+
prefix: p.timecodeBurnin.prefix,
|
|
1675
|
+
} : undefined,
|
|
1676
|
+
afdSignaling: (p.afdSignaling ?? AfdSignaling.NONE).value,
|
|
1677
|
+
bitDepth: p.bitDepth?.value,
|
|
1678
|
+
bufSize: p.bufSize,
|
|
1679
|
+
colorSpaceSettings: p.colorSpaceSettings?._bind(),
|
|
1680
|
+
fixedAfd: p.fixedAfd,
|
|
1681
|
+
level: (p.level ?? Av1Level.AV1_LEVEL_AUTO).value,
|
|
1682
|
+
minBitrate: p.minBitrate,
|
|
1683
|
+
minIInterval: p.minIInterval,
|
|
1684
|
+
parNumerator: p.pixelAspectRatio?._numerator(),
|
|
1685
|
+
parDenominator: p.pixelAspectRatio?._denominator(),
|
|
1686
|
+
sceneChangeDetect: (p.sceneChangeDetect ?? Av1SceneChangeDetect.ENABLED).value,
|
|
1687
|
+
spatialAq: (p.spatialAq ?? Av1SpatialAq.ENABLED).value,
|
|
1688
|
+
temporalAq: (p.temporalAq ?? Av1TemporalAq.ENABLED).value,
|
|
1689
|
+
lookAheadRateControl: (p.lookAheadRateControl ?? LookAheadRateControl.HIGH).value,
|
|
1690
|
+
timecodeInsertion: p.timecodeInsertion?.value,
|
|
1691
|
+
},
|
|
1692
|
+
};
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1695
|
+
/** @internal */
|
|
1696
|
+
class FrameCaptureVideoCodecSettings extends VideoCodecSettings {
|
|
1697
|
+
props;
|
|
1698
|
+
_codecType = VideoCodecType.FRAME_CAPTURE;
|
|
1699
|
+
constructor(props) {
|
|
1700
|
+
super();
|
|
1701
|
+
this.props = props;
|
|
1702
|
+
}
|
|
1703
|
+
_hasExplicitFramerate() { return true; }
|
|
1704
|
+
_bind() {
|
|
1705
|
+
const p = this.props;
|
|
1706
|
+
// Only emit an interval when set. Whole-second Durations render as SECONDS, sub-second as MILLISECONDS.
|
|
1707
|
+
const intervalMs = p.captureInterval?.toMilliseconds();
|
|
1708
|
+
const wholeSeconds = intervalMs !== undefined && intervalMs % 1000 === 0;
|
|
1709
|
+
return {
|
|
1710
|
+
frameCaptureSettings: {
|
|
1711
|
+
captureInterval: intervalMs === undefined ? undefined : (wholeSeconds ? intervalMs / 1000 : intervalMs),
|
|
1712
|
+
captureIntervalUnits: intervalMs === undefined ? undefined : (wholeSeconds ? 'SECONDS' : 'MILLISECONDS'),
|
|
1713
|
+
timecodeBurninSettings: p.timecodeBurnin ? {
|
|
1714
|
+
fontSize: p.timecodeBurnin.fontSize?.value,
|
|
1715
|
+
position: p.timecodeBurnin.position?.value,
|
|
1716
|
+
prefix: p.timecodeBurnin.prefix,
|
|
1717
|
+
} : undefined,
|
|
1718
|
+
},
|
|
1719
|
+
};
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
1722
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlkZW8tY29kZWMtc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ2aWRlby1jb2RlYy1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSw2Q0FBNkQ7QUFFN0QsNEVBQTREO0FBRTVELHFDQUE0QztBQUU1Qzs7R0FFRztBQUNILE1BQWEsV0FBVzs7SUFDdEIsdUJBQXVCO0lBQ2hCLE1BQU0sQ0FBVSxRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUQsbUJBQW1CO0lBQ1osTUFBTSxDQUFVLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RCxtQkFBbUI7SUFDWixNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELDBCQUEwQjtJQUNuQixNQUFNLENBQVUsVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xFLHlCQUF5QjtJQUNsQixNQUFNLENBQVUsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlELGdDQUFnQztJQUN6QixNQUFNLENBQVUsY0FBYyxHQUFHLElBQUksV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFMUUsMkNBQTJDO0lBQ3BDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBYTtRQUM1QixPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQy9CO0lBRUQsNERBQTREO0lBQzVDLEtBQUssQ0FBUztJQUU5QixZQUFvQixLQUFhO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQ3BCOztBQXhCSCxrQ0F5QkM7QUFFRDs7R0FFRztBQUNILE1BQWEsU0FBUzs7SUFDcEIsY0FBYztJQUNQLE1BQU0sQ0FBVSxZQUFZLEdBQUcsSUFBSSxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEUs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b0JBQW9CLEVBQUU7Z0JBQ3BCLGVBQWUsRUFBRSxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0JBQ3ZHLG9CQUFvQixFQUFFLFVBQVUsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO2dCQUN4RyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFDekMsUUFBUSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEtBQUs7b0JBQzFDLFFBQVEsRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxLQUFLO29CQUMxQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNO2lCQUNoQyxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQ2Q7U0FDRixDQUFDO0tBQ0g7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQml0cmF0ZSwgRHVyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBUb2tlbiwgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSB7IENmbkNoYW5uZWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFsaXZlJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHR5cGUgeyBGcmFtZXJhdGUgfSBmcm9tICcuL2ZyYW1lcmF0ZSc7XG5pbXBvcnQgeyBQaXhlbEFzcGVjdFJhdGlvIH0gZnJvbSAnLi9zaGFyZWQnO1xuXG4vKipcbiAqIEguMjY0IHByb2ZpbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0UHJvZmlsZSB7XG4gIC8qKiBCYXNlbGluZSBwcm9maWxlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkFTRUxJTkUgPSBuZXcgSDI2NFByb2ZpbGUoJ0JBU0VMSU5FJyk7XG4gIC8qKiBNYWluIHByb2ZpbGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQUlOID0gbmV3IEgyNjRQcm9maWxlKCdNQUlOJyk7XG4gIC8qKiBIaWdoIHByb2ZpbGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBISUdIID0gbmV3IEgyNjRQcm9maWxlKCdISUdIJyk7XG4gIC8qKiBIaWdoIDEwLWJpdCBwcm9maWxlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSF8xMEJJVCA9IG5ldyBIMjY0UHJvZmlsZSgnSElHSF8xMEJJVCcpO1xuICAvKiogSGlnaCA0OjI6MiBwcm9maWxlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSF80MjIgPSBuZXcgSDI2NFByb2ZpbGUoJ0hJR0hfNDIyJyk7XG4gIC8qKiBIaWdoIDQ6MjoyIDEwLWJpdCBwcm9maWxlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSF80MjJfMTBCSVQgPSBuZXcgSDI2NFByb2ZpbGUoJ0hJR0hfNDIyXzEwQklUJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY0UHJvZmlsZSB7XG4gICAgcmV0dXJuIG5ldyBIMjY0UHJvZmlsZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjQgbGV2ZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0TGV2ZWwge1xuICAvKiogTGV2ZWwgMSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfMSA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfMScpO1xuICAvKiogTGV2ZWwgMS4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8xXzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzFfMScpO1xuICAvKiogTGV2ZWwgMS4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8xXzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzFfMicpO1xuICAvKiogTGV2ZWwgMS4zICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8xXzMgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzFfMycpO1xuICAvKiogTGV2ZWwgMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfMiA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfMicpO1xuICAvKiogTGV2ZWwgMi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8yXzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzJfMScpO1xuICAvKiogTGV2ZWwgMi4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8yXzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzJfMicpO1xuICAvKiogTGV2ZWwgMyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfMyA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfMycpO1xuICAvKiogTGV2ZWwgMy4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8zXzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzNfMScpO1xuICAvKiogTGV2ZWwgMy4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF8zXzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzNfMicpO1xuICAvKiogTGV2ZWwgNCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfNCA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfNCcpO1xuICAvKiogTGV2ZWwgNC4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF80XzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzRfMScpO1xuICAvKiogTGV2ZWwgNC4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF80XzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzRfMicpO1xuICAvKiogTGV2ZWwgNSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfNSA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfNScpO1xuICAvKiogTGV2ZWwgNS4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF81XzEgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzVfMScpO1xuICAvKiogTGV2ZWwgNS4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NF9MRVZFTF81XzIgPSBuZXcgSDI2NExldmVsKCdIMjY0X0xFVkVMXzVfMicpO1xuICAvKiogQXV0by1zZWxlY3QgdGhlIGxldmVsIGJhc2VkIG9uIHRoZSBlbmNvZGUgY29uZmlndXJhdGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjRfTEVWRUxfQVVUTyA9IG5ldyBIMjY0TGV2ZWwoJ0gyNjRfTEVWRUxfQVVUTycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NExldmVsIHtcbiAgICByZXR1cm4gbmV3IEgyNjRMZXZlbCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgbGV2ZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY1TGV2ZWwge1xuICAvKiogTGV2ZWwgMSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfMSA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfMScpO1xuICAvKiogTGV2ZWwgMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfMiA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfMicpO1xuICAvKiogTGV2ZWwgMi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF8yXzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzJfMScpO1xuICAvKiogTGV2ZWwgMyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfMyA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfMycpO1xuICAvKiogTGV2ZWwgMy4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF8zXzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzNfMScpO1xuICAvKiogTGV2ZWwgNCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfNCA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfNCcpO1xuICAvKiogTGV2ZWwgNC4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF80XzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzRfMScpO1xuICAvKiogTGV2ZWwgNSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfNSA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfNScpO1xuICAvKiogTGV2ZWwgNS4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF81XzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzVfMScpO1xuICAvKiogTGV2ZWwgNS4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF81XzIgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzVfMicpO1xuICAvKiogTGV2ZWwgNiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfNiA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfNicpO1xuICAvKiogTGV2ZWwgNi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF82XzEgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzZfMScpO1xuICAvKiogTGV2ZWwgNi4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSDI2NV9MRVZFTF82XzIgPSBuZXcgSDI2NUxldmVsKCdIMjY1X0xFVkVMXzZfMicpO1xuICAvKiogQXV0by1zZWxlY3QgdGhlIGxldmVsIGJhc2VkIG9uIHRoZSBlbmNvZGUgY29uZmlndXJhdGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEgyNjVfTEVWRUxfQVVUTyA9IG5ldyBIMjY1TGV2ZWwoJ0gyNjVfTEVWRUxfQVVUTycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NUxldmVsIHtcbiAgICByZXR1cm4gbmV3IEgyNjVMZXZlbCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQVYxIGxldmVsLlxuICovXG5leHBvcnQgY2xhc3MgQXYxTGV2ZWwge1xuICAvKiogTGV2ZWwgMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF8yID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfMicpO1xuICAvKiogTGV2ZWwgMi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzJfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzJfMScpO1xuICAvKiogTGV2ZWwgMyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF8zID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfMycpO1xuICAvKiogTGV2ZWwgMy4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzNfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzNfMScpO1xuICAvKiogTGV2ZWwgNCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF80ID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfNCcpO1xuICAvKiogTGV2ZWwgNC4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzRfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzRfMScpO1xuICAvKiogTGV2ZWwgNSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF81ID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfNScpO1xuICAvKiogTGV2ZWwgNS4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzVfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzVfMScpO1xuICAvKiogTGV2ZWwgNS4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzVfMiA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzVfMicpO1xuICAvKiogTGV2ZWwgNS4zICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzVfMyA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzVfMycpO1xuICAvKiogTGV2ZWwgNiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF82ID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfNicpO1xuICAvKiogTGV2ZWwgNi4xICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzZfMSA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzZfMScpO1xuICAvKiogTGV2ZWwgNi4yICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzZfMiA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzZfMicpO1xuICAvKiogTGV2ZWwgNi4zICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVYxX0xFVkVMXzZfMyA9IG5ldyBBdjFMZXZlbCgnQVYxX0xFVkVMXzZfMycpO1xuICAvKiogQXV0by1zZWxlY3QgdGhlIGxldmVsIGJhc2VkIG9uIHRoZSBlbmNvZGUgY29uZmlndXJhdGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFWMV9MRVZFTF9BVVRPID0gbmV3IEF2MUxldmVsKCdBVjFfTEVWRUxfQVVUTycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQXYxTGV2ZWwge1xuICAgIHJldHVybiBuZXcgQXYxTGV2ZWwodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEguMjY0IGFkYXB0aXZlIHF1YW50aXphdGlvbiBzdHJlbmd0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbiB7XG4gIC8qKiBBdXRvICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUTyA9IG5ldyBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24oJ0FVVE8nKTtcbiAgLyoqIEhpZ2ggKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBISUdIID0gbmV3IEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbignSElHSCcpO1xuICAvKiogSGlnaGVyICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSEVSID0gbmV3IEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbignSElHSEVSJyk7XG4gIC8qKiBMb3cgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMT1cgPSBuZXcgSDI2NEFkYXB0aXZlUXVhbnRpemF0aW9uKCdMT1cnKTtcbiAgLyoqIE1heCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BWCA9IG5ldyBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24oJ01BWCcpO1xuICAvKiogTWVkaXVtICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUVESVVNID0gbmV3IEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbignTUVESVVNJyk7XG4gIC8qKiBPZmYgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPRkYgPSBuZXcgSDI2NEFkYXB0aXZlUXVhbnRpemF0aW9uKCdPRkYnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjRBZGFwdGl2ZVF1YW50aXphdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24odmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEdPUCBzaXplIChrZXlmcmFtZSBpbnRlcnZhbCkuIFVzZSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kcyB0byBzcGVjaWZ5IGluIGZyYW1lcyBvciBzZWNvbmRzLlxuICpcbiAqIFRoZSB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiBXaGVuIGV4cHJlc3NlZCBpbiBmcmFtZXMgaXQgbXVzdCBiZSBhIHdob2xlIG51bWJlcjtcbiAqIHdoZW4gZXhwcmVzc2VkIGluIHNlY29uZHMgaXQgbWF5IGJlIGZyYWN0aW9uYWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBHb3BTaXplIHtcbiAgLyoqIEdPUCBzaXplIGluIHNlY29uZHMuIE1heSBiZSBmcmFjdGlvbmFsIChlLmcuIGAxLjVgKS4gKi9cbiAgcHVibGljIHN0YXRpYyBzZWNvbmRzKHZhbHVlOiBudW1iZXIpOiBHb3BTaXplIHtcbiAgICByZXR1cm4gbmV3IEdvcFNpemUodmFsdWUsICdTRUNPTkRTJyk7XG4gIH1cbiAgLyoqIEdPUCBzaXplIGluIGZyYW1lcy4gTXVzdCBiZSBhIHdob2xlIG51bWJlci4gKi9cbiAgcHVibGljIHN0YXRpYyBmcmFtZXModmFsdWU6IG51bWJlcik6IEdvcFNpemUge1xuICAgIHJldHVybiBuZXcgR29wU2l6ZSh2YWx1ZSwgJ0ZSQU1FUycpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX3ZhbHVlOiBudW1iZXI7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF91bml0czogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IG51bWJlciwgdW5pdHM6IHN0cmluZykge1xuICAgIC8vIE1lZGlhTGl2ZSByZXF1aXJlcyBnb3BTaXplID4gMCBmb3IgYm90aCB1bml0cy4gV2hlbiB0aGUgdW5pdCBpcyBGUkFNRVMgdGhlIHZhbHVlXG4gICAgLy8gbXVzdCBiZSBhIHdob2xlIG51bWJlciAoYSBmcmFjdGlvbmFsIGZyYW1lIGlzIG1lYW5pbmdsZXNzKTsgU0VDT05EUyBtYXkgYmVcbiAgICAvLyBmcmFjdGlvbmFsLiBTZWUgdGhlIEgyNjQvSDI2NS9BVjEvTVBFRy0yIGdvcFNpemUgZG9jcyAoXCJtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvXCI7XG4gICAgLy8gZnJhbWVzIGFyZSBjb252ZXJ0ZWQgdG8gYSBmcmFtZSBjb3VudCBhdCBydW50aW1lKS5cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZSA8PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgR29wU2l6ZWAsIGBHT1Agc2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLCBnb3QgJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgICB9XG4gICAgICBpZiAodW5pdHMgPT09ICdGUkFNRVMnICYmICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEdvcFNpemVGcmFtZXNgLCBgR09QIHNpemUgaW4gZnJhbWVzIG11c3QgYmUgYSB3aG9sZSBudW1iZXIsIGdvdCAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl91bml0cyA9IHVuaXRzO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTaGFyZWQgZW51bXMgKHVzZWQgYnkgbXVsdGlwbGUgY29kZWNzKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBBRkQgc2lnbmFsaW5nIG1vZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBBZmRTaWduYWxpbmcge1xuICAvKiogQXV0byDigJQgcHJlc2VydmUgaW5wdXQgQUZEIHZhbHVlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUTyA9IG5ldyBBZmRTaWduYWxpbmcoJ0FVVE8nKTtcbiAgLyoqIEZpeGVkIOKAlCB1c2UgdGhlIHZhbHVlIGZyb20gZml4ZWRBZmQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSVhFRCA9IG5ldyBBZmRTaWduYWxpbmcoJ0ZJWEVEJyk7XG4gIC8qKiBOb25lIOKAlCBkbyBub3Qgd3JpdGUgQUZEICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ORSA9IG5ldyBBZmRTaWduYWxpbmcoJ05PTkUnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEFmZFNpZ25hbGluZyB7XG4gICAgcmV0dXJuIG5ldyBBZmRTaWduYWxpbmcodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIENvbG9yIG1ldGFkYXRhIGluY2x1c2lvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbG9yTWV0YWRhdGEge1xuICAvKiogSWdub3JlIOKAlCBkbyBub3QgaW5jbHVkZSBjb2xvciBtZXRhZGF0YSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElHTk9SRSA9IG5ldyBDb2xvck1ldGFkYXRhKCdJR05PUkUnKTtcbiAgLyoqIEluc2VydCDigJQgaW5jbHVkZSBjb2xvciBtZXRhZGF0YSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOU0VSVCA9IG5ldyBDb2xvck1ldGFkYXRhKCdJTlNFUlQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IENvbG9yTWV0YWRhdGEge1xuICAgIHJldHVybiBuZXcgQ29sb3JNZXRhZGF0YSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogU2NhbiB0eXBlIGZvciB0aGUgb3V0cHV0IHZpZGVvLlxuICovXG5leHBvcnQgY2xhc3MgU2NhblR5cGUge1xuICAvKiogSW50ZXJsYWNlZCAodG9wIGZpZWxkIGZpcnN0KSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOVEVSTEFDRUQgPSBuZXcgU2NhblR5cGUoJ0lOVEVSTEFDRUQnKTtcbiAgLyoqIFByb2dyZXNzaXZlICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPR1JFU1NJVkUgPSBuZXcgU2NhblR5cGUoJ1BST0dSRVNTSVZFJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBTY2FuVHlwZSB7XG4gICAgcmV0dXJuIG5ldyBTY2FuVHlwZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogRmxpY2tlciBhZGFwdGl2ZSBxdWFudGl6YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBGbGlja2VyQXEge1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgRmxpY2tlckFxKCdFTkFCTEVEJyk7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEZsaWNrZXJBcSgnRElTQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEZsaWNrZXJBcSB7XG4gICAgcmV0dXJuIG5ldyBGbGlja2VyQXEodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEdPUCBCLWZyYW1lIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEdvcEJSZWZlcmVuY2Uge1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgR29wQlJlZmVyZW5jZSgnRU5BQkxFRCcpO1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBHb3BCUmVmZXJlbmNlKCdESVNBQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogR29wQlJlZmVyZW5jZSB7XG4gICAgcmV0dXJuIG5ldyBHb3BCUmVmZXJlbmNlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBMb29rYWhlYWQgcmF0ZSBjb250cm9sLlxuICovXG5leHBvcnQgY2xhc3MgTG9va0FoZWFkUmF0ZUNvbnRyb2wge1xuICAvKiogSGlnaCDigJQgYmV0dGVyIHF1YWxpdHksIG1vcmUgbGF0ZW5jeSBhbmQgbWVtb3J5ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElHSCA9IG5ldyBMb29rQWhlYWRSYXRlQ29udHJvbCgnSElHSCcpO1xuICAvKiogTG93IOKAlCBsZXNzIGxhdGVuY3kgYW5kIG1lbW9yeSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExPVyA9IG5ldyBMb29rQWhlYWRSYXRlQ29udHJvbCgnTE9XJyk7XG4gIC8qKiBNZWRpdW0gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRURJVU0gPSBuZXcgTG9va0FoZWFkUmF0ZUNvbnRyb2woJ01FRElVTScpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogTG9va0FoZWFkUmF0ZUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgTG9va0FoZWFkUmF0ZUNvbnRyb2wodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRpbWVjb2RlIGluc2VydGlvbiBtb2RlLlxuICpcbiAqIEByZW1hcmtzIFRoaXMgY29udHJvbHMgdGltZWNvZGUgaW5zZXJ0aW9uIGluIHRoZSBvdXRwdXQgZWxlbWVudGFyeSBzdHJlYW0uXG4gKiBUbyBwcmVzZXJ2ZSBzb3VyY2UgdGltZWNvZGVzLCBzZXQgYFRpbWVjb2RlU291cmNlLkVNQkVEREVEYCBvbiB0aGUgY2hhbm5lbCdzIGB0aW1lY29kZUNvbmZpZ2AuXG4gKi9cbmV4cG9ydCBjbGFzcyBUaW1lY29kZUluc2VydGlvbiB7XG4gIC8qKiBEaXNhYmxlZCDigJQgZG8gbm90IGluY2x1ZGUgdGltZWNvZGVzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgVGltZWNvZGVJbnNlcnRpb24oJ0RJU0FCTEVEJyk7XG4gIC8qKiBQSUNfVElNSU5HX1NFSSDigJQgcGFzcyB0aHJvdWdoIHBpY3R1cmUgdGltaW5nIFNFSSBtZXNzYWdlcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBJQ19USU1JTkdfU0VJID0gbmV3IFRpbWVjb2RlSW5zZXJ0aW9uKCdQSUNfVElNSU5HX1NFSScpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogVGltZWNvZGVJbnNlcnRpb24ge1xuICAgIHJldHVybiBuZXcgVGltZWNvZGVJbnNlcnRpb24odmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFN1Yi1HT1AgbGVuZ3RoIG1vZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdWJnb3BMZW5ndGgge1xuICAvKiogRHluYW1pYyDigJQgbGV0IE1lZGlhTGl2ZSBvcHRpbWl6ZSBCLWZyYW1lcyBwZXIgc3ViLUdPUCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERZTkFNSUMgPSBuZXcgU3ViZ29wTGVuZ3RoKCdEWU5BTUlDJyk7XG4gIC8qKiBGaXhlZCDigJQgdXNlIGdvcE51bUJGcmFtZXMgaW4gZWFjaCBzdWItR09QICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRklYRUQgPSBuZXcgU3ViZ29wTGVuZ3RoKCdGSVhFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogU3ViZ29wTGVuZ3RoIHtcbiAgICByZXR1cm4gbmV3IFN1YmdvcExlbmd0aCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBILjI2NC1zcGVjaWZpYyBlbnVtc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBILjI2NCBlbnRyb3B5IGVuY29kaW5nIG1vZGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0RW50cm9weUVuY29kaW5nIHtcbiAgLyoqIENBQkFDIChyZXF1aXJlcyBNYWluIG9yIEhpZ2ggcHJvZmlsZSkgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDQUJBQyA9IG5ldyBIMjY0RW50cm9weUVuY29kaW5nKCdDQUJBQycpO1xuICAvKiogQ0FWTEMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDQVZMQyA9IG5ldyBIMjY0RW50cm9weUVuY29kaW5nKCdDQVZMQycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NEVudHJvcHlFbmNvZGluZyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0RW50cm9weUVuY29kaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBILjI2NCBmb3JjZSBmaWVsZCBwaWN0dXJlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRGb3JjZUZpZWxkUGljdHVyZXMge1xuICAvKiogRW5hYmxlZCDigJQgZm9yY2UgY29kaW5nIG9uIGEgZmllbGQgYmFzaXMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjRGb3JjZUZpZWxkUGljdHVyZXMoJ0VOQUJMRUQnKTtcbiAgLyoqIERpc2FibGVkIOKAlCBsZXQgZW5jb2RlciBkZWNpZGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBIMjY0Rm9yY2VGaWVsZFBpY3R1cmVzKCdESVNBQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NEZvcmNlRmllbGRQaWN0dXJlcyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0Rm9yY2VGaWVsZFBpY3R1cmVzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBILjI2NCBzeW50YXggbW9kZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRTeW50YXgge1xuICAvKiogRGVmYXVsdCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFQgPSBuZXcgSDI2NFN5bnRheCgnREVGQVVMVCcpO1xuICAvKiogUlAtMjAyNyBjb21wbGlhbnQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBSUDIwMjcgPSBuZXcgSDI2NFN5bnRheCgnUlAyMDI3Jyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY0U3ludGF4IHtcbiAgICByZXR1cm4gbmV3IEgyNjRTeW50YXgodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEguMjY0IHF1YWxpdHkgbGV2ZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0UXVhbGl0eUxldmVsIHtcbiAgLyoqIEVuaGFuY2VkIHF1YWxpdHkgKG1heSBpbmN1ciBhZGRpdGlvbmFsIGNvc3QpICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5IQU5DRURfUVVBTElUWSA9IG5ldyBIMjY0UXVhbGl0eUxldmVsKCdFTkhBTkNFRF9RVUFMSVRZJyk7XG4gIC8qKiBTdGFuZGFyZCBxdWFsaXR5ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RBTkRBUkRfUVVBTElUWSA9IG5ldyBIMjY0UXVhbGl0eUxldmVsKCdTVEFOREFSRF9RVUFMSVRZJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY0UXVhbGl0eUxldmVsIHtcbiAgICByZXR1cm4gbmV3IEgyNjRRdWFsaXR5TGV2ZWwodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSC4yNjUtc3BlY2lmaWMgZW51bXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogSC4yNjUgYWRhcHRpdmUgcXVhbnRpemF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uIHtcbiAgLyoqIEF1dG8gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRPID0gbmV3IEgyNjVBZGFwdGl2ZVF1YW50aXphdGlvbignQVVUTycpO1xuICAvKiogSGlnaCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhJR0ggPSBuZXcgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uKCdISUdIJyk7XG4gIC8qKiBIaWdoZXIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBISUdIRVIgPSBuZXcgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uKCdISUdIRVInKTtcbiAgLyoqIExvdyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExPVyA9IG5ldyBIMjY1QWRhcHRpdmVRdWFudGl6YXRpb24oJ0xPVycpO1xuICAvKiogTWF4ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFYID0gbmV3IEgyNjVBZGFwdGl2ZVF1YW50aXphdGlvbignTUFYJyk7XG4gIC8qKiBNZWRpdW0gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRURJVU0gPSBuZXcgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uKCdNRURJVU0nKTtcbiAgLyoqIE9mZiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9GRiA9IG5ldyBIMjY1QWRhcHRpdmVRdWFudGl6YXRpb24oJ09GRicpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uIHtcbiAgICByZXR1cm4gbmV3IEgyNjVBZGFwdGl2ZVF1YW50aXphdGlvbih2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgYWx0ZXJuYXRpdmUgdHJhbnNmZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY1QWx0ZXJuYXRpdmVUcmFuc2ZlckZ1bmN0aW9uIHtcbiAgLyoqIEluc2VydCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOU0VSVCA9IG5ldyBIMjY1QWx0ZXJuYXRpdmVUcmFuc2ZlckZ1bmN0aW9uKCdJTlNFUlQnKTtcbiAgLyoqIE9taXQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPTUlUID0gbmV3IEgyNjVBbHRlcm5hdGl2ZVRyYW5zZmVyRnVuY3Rpb24oJ09NSVQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjVBbHRlcm5hdGl2ZVRyYW5zZmVyRnVuY3Rpb24ge1xuICAgIHJldHVybiBuZXcgSDI2NUFsdGVybmF0aXZlVHJhbnNmZXJGdW5jdGlvbih2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgZGVibG9ja2luZyBmaWx0ZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY1RGVibG9ja2luZyB7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEgyNjVEZWJsb2NraW5nKCdESVNBQkxFRCcpO1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgSDI2NURlYmxvY2tpbmcoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjVEZWJsb2NraW5nIHtcbiAgICByZXR1cm4gbmV3IEgyNjVEZWJsb2NraW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBILjI2NSBtb3Rpb24gdmVjdG9yIG92ZXIgcGljdHVyZSBib3VuZGFyaWVzLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NU12T3ZlclBpY3R1cmVCb3VuZGFyaWVzIHtcbiAgLyoqIERpc2FibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgSDI2NU12T3ZlclBpY3R1cmVCb3VuZGFyaWVzKCdESVNBQkxFRCcpO1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgSDI2NU12T3ZlclBpY3R1cmVCb3VuZGFyaWVzKCdFTkFCTEVEJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY1TXZPdmVyUGljdHVyZUJvdW5kYXJpZXMge1xuICAgIHJldHVybiBuZXcgSDI2NU12T3ZlclBpY3R1cmVCb3VuZGFyaWVzKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBILjI2NSBtb3Rpb24gdmVjdG9yIHRlbXBvcmFsIHByZWRpY3Rvci5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVNdlRlbXBvcmFsUHJlZGljdG9yIHtcbiAgLyoqIERpc2FibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgSDI2NU12VGVtcG9yYWxQcmVkaWN0b3IoJ0RJU0FCTEVEJyk7XG4gIC8qKiBFbmFibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5BQkxFRCA9IG5ldyBIMjY1TXZUZW1wb3JhbFByZWRpY3RvcignRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NU12VGVtcG9yYWxQcmVkaWN0b3Ige1xuICAgIHJldHVybiBuZXcgSDI2NU12VGVtcG9yYWxQcmVkaWN0b3IodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEguMjY1IHRpbGUgcGFkZGluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVUaWxlUGFkZGluZyB7XG4gIC8qKiBOb25lICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTk9ORSA9IG5ldyBIMjY1VGlsZVBhZGRpbmcoJ05PTkUnKTtcbiAgLyoqIFBhZGRlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBBRERFRCA9IG5ldyBIMjY1VGlsZVBhZGRpbmcoJ1BBRERFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NVRpbGVQYWRkaW5nIHtcbiAgICByZXR1cm4gbmV3IEgyNjVUaWxlUGFkZGluZyh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgdHJlZWJsb2NrIHNpemUuXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY1VHJlZWJsb2NrU2l6ZSB7XG4gIC8qKiBBdXRvICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUTyA9IG5ldyBIMjY1VHJlZWJsb2NrU2l6ZSgnQVVUTycpO1xuICAvKiogMzJ4MzIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUUkVFX1NJWkVfMzJYMzIgPSBuZXcgSDI2NVRyZWVibG9ja1NpemUoJ1RSRUVfU0laRV8zMlgzMicpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NVRyZWVibG9ja1NpemUge1xuICAgIHJldHVybiBuZXcgSDI2NVRyZWVibG9ja1NpemUodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQVYxLXNwZWNpZmljIGVudW1zXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEFWMSBiaXQgZGVwdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFCaXREZXB0aCB7XG4gIC8qKiA4LWJpdCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJJVF9ERVBUSF84ID0gbmV3IEF2MUJpdERlcHRoKCdERVBUSF84Jyk7XG4gIC8qKiAxMC1iaXQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCSVRfREVQVEhfMTAgPSBuZXcgQXYxQml0RGVwdGgoJ0RFUFRIXzEwJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBBdjFCaXREZXB0aCB7XG4gICAgcmV0dXJuIG5ldyBBdjFCaXREZXB0aCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQVYxIHNjZW5lIGNoYW5nZSBkZXRlY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFTY2VuZUNoYW5nZURldGVjdCB7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEF2MVNjZW5lQ2hhbmdlRGV0ZWN0KCdESVNBQkxFRCcpO1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgQXYxU2NlbmVDaGFuZ2VEZXRlY3QoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF2MVNjZW5lQ2hhbmdlRGV0ZWN0IHtcbiAgICByZXR1cm4gbmV3IEF2MVNjZW5lQ2hhbmdlRGV0ZWN0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBVjEgc3BhdGlhbCBhZGFwdGl2ZSBxdWFudGl6YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFTcGF0aWFsQXEge1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBBdjFTcGF0aWFsQXEoJ0RJU0FCTEVEJyk7XG4gIC8qKiBFbmFibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5BQkxFRCA9IG5ldyBBdjFTcGF0aWFsQXEoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF2MVNwYXRpYWxBcSB7XG4gICAgcmV0dXJuIG5ldyBBdjFTcGF0aWFsQXEodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEFWMSB0ZW1wb3JhbCBhZGFwdGl2ZSBxdWFudGl6YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFUZW1wb3JhbEFxIHtcbiAgLyoqIERpc2FibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgQXYxVGVtcG9yYWxBcSgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEF2MVRlbXBvcmFsQXEoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF2MVRlbXBvcmFsQXEge1xuICAgIHJldHVybiBuZXcgQXYxVGVtcG9yYWxBcSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjQgc2NlbmUgY2hhbmdlIGRldGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRTY2VuZUNoYW5nZURldGVjdCB7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEgyNjRTY2VuZUNoYW5nZURldGVjdCgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjRTY2VuZUNoYW5nZURldGVjdCgnRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NFNjZW5lQ2hhbmdlRGV0ZWN0IHtcbiAgICByZXR1cm4gbmV3IEgyNjRTY2VuZUNoYW5nZURldGVjdCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjQgc3BhdGlhbCBhZGFwdGl2ZSBxdWFudGl6YXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBIMjY0U3BhdGlhbEFxIHtcbiAgLyoqIERpc2FibGVkICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElTQUJMRUQgPSBuZXcgSDI2NFNwYXRpYWxBcSgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjRTcGF0aWFsQXEoJ0VOQUJMRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjRTcGF0aWFsQXEge1xuICAgIHJldHVybiBuZXcgSDI2NFNwYXRpYWxBcSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjQgdGVtcG9yYWwgYWRhcHRpdmUgcXVhbnRpemF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NFRlbXBvcmFsQXEge1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBIMjY0VGVtcG9yYWxBcSgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjRUZW1wb3JhbEFxKCdFTkFCTEVEJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY0VGVtcG9yYWxBcSB7XG4gICAgcmV0dXJuIG5ldyBIMjY0VGVtcG9yYWxBcSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgc2NlbmUgY2hhbmdlIGRldGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVTY2VuZUNoYW5nZURldGVjdCB7XG4gIC8qKiBEaXNhYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEgyNjVTY2VuZUNoYW5nZURldGVjdCgnRElTQUJMRUQnKTtcbiAgLyoqIEVuYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTkFCTEVEID0gbmV3IEgyNjVTY2VuZUNoYW5nZURldGVjdCgnRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogSDI2NVNjZW5lQ2hhbmdlRGV0ZWN0IHtcbiAgICByZXR1cm4gbmV3IEgyNjVTY2VuZUNoYW5nZURldGVjdCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQVYxIHRpbWVjb2RlIGluc2VydGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEF2MVRpbWVjb2RlSW5zZXJ0aW9uIHtcbiAgLyoqIERpc2FibGVkIOKAlCBkbyBub3QgaW5zZXJ0IHRpbWVjb2RlcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERJU0FCTEVEID0gbmV3IEF2MVRpbWVjb2RlSW5zZXJ0aW9uKCdESVNBQkxFRCcpO1xuICAvKipcbiAgICogSW5jbHVkZSB0aW1lY29kZXMgYXMgYSBtZXRhZGF0YSBPQlUgKE9wZW4gQml0c3RyZWFtIFVuaXQpIG9mIHR5cGVcbiAgICogYE1FVEFEQVRBX1RZUEVfVElNRUNPREVgLCBiYXNlZCBvbiB0aGUgc291cmNlIHNwZWNpZmllZCBpbiB0aGUgY2hhbm5lbCdzIHRpbWVjb2RlIGNvbmZpZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUVUQURBVEFfT0JVID0gbmV3IEF2MVRpbWVjb2RlSW5zZXJ0aW9uKCdNRVRBREFUQV9PQlUnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF2MVRpbWVjb2RlSW5zZXJ0aW9uIHtcbiAgICByZXR1cm4gbmV3IEF2MVRpbWVjb2RlSW5zZXJ0aW9uKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRpbWVjb2RlIGJ1cm4taW4gc2V0dGluZ3Ncbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRm9udCBzaXplIGZvciB0aW1lY29kZSBidXJuLWluLlxuICovXG5leHBvcnQgY2xhc3MgVGltZWNvZGVCdXJuaW5Gb250U2l6ZSB7XG4gIC8qKiBFeHRyYSBzbWFsbCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVYVFJBX1NNQUxMXzEwID0gbmV3IFRpbWVjb2RlQnVybmluRm9udFNpemUoJ0VYVFJBX1NNQUxMXzEwJyk7XG4gIC8qKiBMYXJnZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IExBUkdFXzQ4ID0gbmV3IFRpbWVjb2RlQnVybmluRm9udFNpemUoJ0xBUkdFXzQ4Jyk7XG4gIC8qKiBNZWRpdW0gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRURJVU1fMzIgPSBuZXcgVGltZWNvZGVCdXJuaW5Gb250U2l6ZSgnTUVESVVNXzMyJyk7XG4gIC8qKiBTbWFsbCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNNQUxMXzE2ID0gbmV3IFRpbWVjb2RlQnVybmluRm9udFNpemUoJ1NNQUxMXzE2Jyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBUaW1lY29kZUJ1cm5pbkZvbnRTaXplIHtcbiAgICByZXR1cm4gbmV3IFRpbWVjb2RlQnVybmluRm9udFNpemUodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBvc2l0aW9uIGZvciB0aW1lY29kZSBidXJuLWluIG92ZXJsYXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBUaW1lY29kZUJ1cm5pblBvc2l0aW9uIHtcbiAgLyoqIEJvdHRvbSBjZW50ZXIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCT1RUT01fQ0VOVEVSID0gbmV3IFRpbWVjb2RlQnVybmluUG9zaXRpb24oJ0JPVFRPTV9DRU5URVInKTtcbiAgLyoqIEJvdHRvbSBsZWZ0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQk9UVE9NX0xFRlQgPSBuZXcgVGltZWNvZGVCdXJuaW5Qb3NpdGlvbignQk9UVE9NX0xFRlQnKTtcbiAgLyoqIEJvdHRvbSByaWdodCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEJPVFRPTV9SSUdIVCA9IG5ldyBUaW1lY29kZUJ1cm5pblBvc2l0aW9uKCdCT1RUT01fUklHSFQnKTtcbiAgLyoqIE1pZGRsZSBjZW50ZXIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSURETEVfQ0VOVEVSID0gbmV3IFRpbWVjb2RlQnVybmluUG9zaXRpb24oJ01JRERMRV9DRU5URVInKTtcbiAgLyoqIE1pZGRsZSBsZWZ0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUlERExFX0xFRlQgPSBuZXcgVGltZWNvZGVCdXJuaW5Qb3NpdGlvbignTUlERExFX0xFRlQnKTtcbiAgLyoqIE1pZGRsZSByaWdodCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1JRERMRV9SSUdIVCA9IG5ldyBUaW1lY29kZUJ1cm5pblBvc2l0aW9uKCdNSURETEVfUklHSFQnKTtcbiAgLyoqIFRvcCBjZW50ZXIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUT1BfQ0VOVEVSID0gbmV3IFRpbWVjb2RlQnVybmluUG9zaXRpb24oJ1RPUF9DRU5URVInKTtcbiAgLyoqIFRvcCBsZWZ0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVE9QX0xFRlQgPSBuZXcgVGltZWNvZGVCdXJuaW5Qb3NpdGlvbignVE9QX0xFRlQnKTtcbiAgLyoqIFRvcCByaWdodCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRPUF9SSUdIVCA9IG5ldyBUaW1lY29kZUJ1cm5pblBvc2l0aW9uKCdUT1BfUklHSFQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IFRpbWVjb2RlQnVybmluUG9zaXRpb24ge1xuICAgIHJldHVybiBuZXcgVGltZWNvZGVCdXJuaW5Qb3NpdGlvbih2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogU2V0dGluZ3MgZm9yIGJ1cm5pbmcgYSB0aW1lY29kZSBvdmVybGF5IGludG8gdGhlIHZpZGVvIG91dHB1dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lY29kZUJ1cm5pblNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBmb250IHNpemUgb2YgdGhlIHRpbWVjb2RlIG92ZXJsYXkuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBmb250U2l6ZT86IFRpbWVjb2RlQnVybmluRm9udFNpemU7XG4gIC8qKlxuICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHRpbWVjb2RlIG92ZXJsYXkgb24gdGhlIHZpZGVvLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcG9zaXRpb24/OiBUaW1lY29kZUJ1cm5pblBvc2l0aW9uO1xuICAvKipcbiAgICogQSBzdHJpbmcgcHJlcGVuZGVkIHRvIHRoZSB0aW1lY29kZSAoZS5nLiBhIGNoYW5uZWwgbmFtZSkuXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwcmVmaXg/OiBzdHJpbmc7XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSYXRlIGNvbnRyb2wgY2xhc3NlcyAocGVyIGNvZGVjKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIFByb3BlcnRpZXMgZm9yIENCUiByYXRlIGNvbnRyb2wuICovXG5leHBvcnQgaW50ZXJmYWNlIENiclJhdGVDb250cm9sUHJvcHMge1xuICAvKiogVGhlIGNvbnN0YW50IGJpdHJhdGUuICovXG4gIHJlYWRvbmx5IGJpdHJhdGU6IEJpdHJhdGU7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIGZvciBWQlIgcmF0ZSBjb250cm9sLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYnJSYXRlQ29udHJvbFByb3BzIHtcbiAgLyoqIFRoZSBhdmVyYWdlIGJpdHJhdGUuICovXG4gIHJlYWRvbmx5IGJpdHJhdGU6IEJpdHJhdGU7XG4gIC8qKiBUaGUgbWF4aW11bSBiaXRyYXRlLiAqL1xuICByZWFkb25seSBtYXhCaXRyYXRlOiBCaXRyYXRlO1xufVxuXG4vKiogUHJvcGVydGllcyBmb3IgUVZCUiByYXRlIGNvbnRyb2wuICovXG5leHBvcnQgaW50ZXJmYWNlIFF2YnJSYXRlQ29udHJvbFByb3BzIHtcbiAgLyoqIFRoZSBtYXhpbXVtIGJpdHJhdGUuICovXG4gIHJlYWRvbmx5IG1heEJpdHJhdGU6IEJpdHJhdGU7XG4gIC8qKlxuICAgKiBUaGUgUVZCUiBxdWFsaXR5IGxldmVsICgxLTEwKS4gTGVhdmUgdW5zZXQgdG8gbGV0IE1lZGlhTGl2ZSBpbmZlciB0aGUgdGFyZ2V0IHF1YWxpdHkgZnJvbSB0aGVcbiAgICogb3V0cHV0IHJlc29sdXRpb24gYW5kIG1heCBiaXRyYXRlLlxuICAgKiBAZGVmYXVsdCAtIE1lZGlhTGl2ZSBpbmZlcnMgdGhlIHF1YWxpdHkgbGV2ZWwgZnJvbSB0aGUgcmVzb2x1dGlvbiBhbmQgbWF4IGJpdHJhdGVcbiAgICovXG4gIHJlYWRvbmx5IHF2YnJRdWFsaXR5TGV2ZWw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogSC4yNjQgcmF0ZSBjb250cm9sLiBVc2UgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZHMgdG8gY3JlYXRlLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NFJhdGVDb250cm9sIHtcbiAgLyoqIENvbnN0YW50IGJpdHJhdGUuICovXG4gIHB1YmxpYyBzdGF0aWMgY2JyKHByb3BzOiBDYnJSYXRlQ29udHJvbFByb3BzKTogSDI2NFJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEgyNjRSYXRlQ29udHJvbCgnQ0JSJywgcHJvcHMuYml0cmF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICB9XG4gIC8qKiBWYXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHZicihwcm9wczogVmJyUmF0ZUNvbnRyb2xQcm9wcyk6IEgyNjRSYXRlQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBIMjY0UmF0ZUNvbnRyb2woJ1ZCUicsIHByb3BzLmJpdHJhdGUsIHByb3BzLm1heEJpdHJhdGUsIHVuZGVmaW5lZCk7XG4gIH1cbiAgLyoqIFF1YWxpdHktZGVmaW5lZCB2YXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHF2YnIocHJvcHM6IFF2YnJSYXRlQ29udHJvbFByb3BzKTogSDI2NFJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEgyNjRSYXRlQ29udHJvbCgnUVZCUicsIHVuZGVmaW5lZCwgcHJvcHMubWF4Qml0cmF0ZSwgcHJvcHMucXZiclF1YWxpdHlMZXZlbCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfbW9kZTogc3RyaW5nO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfYml0cmF0ZTogQml0cmF0ZSB8IHVuZGVmaW5lZDtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX21heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9xdmJyUXVhbGl0eUxldmVsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihtb2RlOiBzdHJpbmcsIGJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIG1heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIHF2YnJRdWFsaXR5TGV2ZWw6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuX2JpdHJhdGUgPSBiaXRyYXRlO1xuICAgIHRoaXMuX21heEJpdHJhdGUgPSBtYXhCaXRyYXRlO1xuICAgIHRoaXMuX3F2YnJRdWFsaXR5TGV2ZWwgPSBxdmJyUXVhbGl0eUxldmVsO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgcmF0ZSBjb250cm9sLiBVc2UgdGhlIHN0YXRpYyBmYWN0b3J5IG1ldGhvZHMgdG8gY3JlYXRlLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NVJhdGVDb250cm9sIHtcbiAgLyoqIENvbnN0YW50IGJpdHJhdGUuICovXG4gIHB1YmxpYyBzdGF0aWMgY2JyKHByb3BzOiBDYnJSYXRlQ29udHJvbFByb3BzKTogSDI2NVJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEgyNjVSYXRlQ29udHJvbCgnQ0JSJywgcHJvcHMuYml0cmF0ZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQpO1xuICB9XG4gIC8qKiBWYXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHZicihwcm9wczogVmJyUmF0ZUNvbnRyb2xQcm9wcyk6IEgyNjVSYXRlQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBIMjY1UmF0ZUNvbnRyb2woJ1ZCUicsIHByb3BzLmJpdHJhdGUsIHByb3BzLm1heEJpdHJhdGUsIHVuZGVmaW5lZCk7XG4gIH1cbiAgLyoqIFF1YWxpdHktZGVmaW5lZCB2YXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHF2YnIocHJvcHM6IFF2YnJSYXRlQ29udHJvbFByb3BzKTogSDI2NVJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEgyNjVSYXRlQ29udHJvbCgnUVZCUicsIHVuZGVmaW5lZCwgcHJvcHMubWF4Qml0cmF0ZSwgcHJvcHMucXZiclF1YWxpdHlMZXZlbCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfbW9kZTogc3RyaW5nO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfYml0cmF0ZTogQml0cmF0ZSB8IHVuZGVmaW5lZDtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX21heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9xdmJyUXVhbGl0eUxldmVsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihtb2RlOiBzdHJpbmcsIGJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIG1heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIHF2YnJRdWFsaXR5TGV2ZWw6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuX2JpdHJhdGUgPSBiaXRyYXRlO1xuICAgIHRoaXMuX21heEJpdHJhdGUgPSBtYXhCaXRyYXRlO1xuICAgIHRoaXMuX3F2YnJRdWFsaXR5TGV2ZWwgPSBxdmJyUXVhbGl0eUxldmVsO1xuICB9XG59XG5cbi8qKlxuICogQVYxIHJhdGUgY29udHJvbC4gQVYxIHN1cHBvcnRzIFFWQlIgYW5kIENCUi5cbiAqL1xuZXhwb3J0IGNsYXNzIEF2MVJhdGVDb250cm9sIHtcbiAgLyoqIFF1YWxpdHktZGVmaW5lZCB2YXJpYWJsZSBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHF2YnIocHJvcHM6IFF2YnJSYXRlQ29udHJvbFByb3BzKTogQXYxUmF0ZUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgQXYxUmF0ZUNvbnRyb2woJ1FWQlInLCB1bmRlZmluZWQsIHByb3BzLm1heEJpdHJhdGUsIHByb3BzLnF2YnJRdWFsaXR5TGV2ZWwpO1xuICB9XG4gIC8qKiBDb25zdGFudCBiaXRyYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIGNicihwcm9wczogQ2JyUmF0ZUNvbnRyb2xQcm9wcyk6IEF2MVJhdGVDb250cm9sIHtcbiAgICByZXR1cm4gbmV3IEF2MVJhdGVDb250cm9sKCdDQlInLCBwcm9wcy5iaXRyYXRlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfbW9kZTogc3RyaW5nO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfYml0cmF0ZTogQml0cmF0ZSB8IHVuZGVmaW5lZDtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX21heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9xdmJyUXVhbGl0eUxldmVsOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihtb2RlOiBzdHJpbmcsIGJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIG1heEJpdHJhdGU6IEJpdHJhdGUgfCB1bmRlZmluZWQsIHF2YnJRdWFsaXR5TGV2ZWw6IG51bWJlciB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuX2JpdHJhdGUgPSBiaXRyYXRlO1xuICAgIHRoaXMuX21heEJpdHJhdGUgPSBtYXhCaXRyYXRlO1xuICAgIHRoaXMuX3F2YnJRdWFsaXR5TGV2ZWwgPSBxdmJyUXVhbGl0eUxldmVsO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb2xvciBzcGFjZSBzZXR0aW5ncyBjbGFzc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIENvbG9yIHNwYWNlIHNldHRpbmdzIGZvciBILjI2NCB2aWRlby5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjRDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAvKiogUGFzcyB0aHJvdWdoIHRoZSBzb3VyY2UgY29sb3Igc3BhY2Ugd2l0aCBubyBjb252ZXJzaW9uLiAqL1xuICBwdWJsaWMgc3RhdGljIHBhc3N0aHJvdWdoKCk6IEgyNjRDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NENvbG9yU3BhY2VTZXR0aW5ncyh7IGNvbG9yU3BhY2VQYXNzdGhyb3VnaFNldHRpbmdzOiB7fSB9KTtcbiAgfVxuICAvKiogQ29udmVydCB0byBSZWMuNjAxIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYzYwMSgpOiBIMjY0Q29sb3JTcGFjZVNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEgyNjRDb2xvclNwYWNlU2V0dGluZ3MoeyByZWM2MDFTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdG8gUmVjLjcwOSBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWM3MDkoKTogSDI2NENvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0Q29sb3JTcGFjZVNldHRpbmdzKHsgcmVjNzA5U2V0dGluZ3M6IHt9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENmbkNoYW5uZWwuSDI2NENvbG9yU3BhY2VTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5IMjY0Q29sb3JTcGFjZVNldHRpbmdzUHJvcGVydHkpIHsgdGhpcy5jb25maWcgPSBjb25maWc7IH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBfYmluZCgpOiBDZm5DaGFubmVsLkgyNjRDb2xvclNwYWNlU2V0dGluZ3NQcm9wZXJ0eSB7IHJldHVybiB0aGlzLmNvbmZpZzsgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEhEUjEwIGNvbG9yIHNwYWNlIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhkcjEwU2V0dGluZ3NQcm9wcyB7XG4gIC8qKlxuICAgKiBNYXhpbXVtIENvbnRlbnQgTGlnaHQgTGV2ZWwg4oCUIHRoZSBtYXhpbXVtIGxpZ2h0IGxldmVsIG9mIGFueSBzaW5nbGUgcGl4ZWwgaW4gbml0cy5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IG1heENsbD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1heGltdW0gRnJhbWUgQXZlcmFnZSBMaWdodCBMZXZlbCDigJQgdGhlIG1heGltdW0gYXZlcmFnZSBsaWdodCBsZXZlbCBvZiBhbnkgc2luZ2xlIGZyYW1lIGluIG5pdHMuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtYXhGYWxsPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbG9yIHNwYWNlIHNldHRpbmdzIGZvciBILjI2NSB2aWRlby5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAvKiogUGFzcyB0aHJvdWdoIHRoZSBzb3VyY2UgY29sb3Igc3BhY2Ugd2l0aCBubyBjb252ZXJzaW9uLiAqL1xuICBwdWJsaWMgc3RhdGljIHBhc3N0aHJvdWdoKCk6IEgyNjVDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyh7IGNvbG9yU3BhY2VQYXNzdGhyb3VnaFNldHRpbmdzOiB7fSB9KTtcbiAgfVxuICAvKiogRG9sYnkgVmlzaW9uIDguMSBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyBkb2xieVZpc2lvbjgxKCk6IEgyNjVDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyh7IGRvbGJ5VmlzaW9uODFTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIEhEUjEwIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIGhkcjEwKHByb3BzPzogSGRyMTBTZXR0aW5nc1Byb3BzKTogSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1Q29sb3JTcGFjZVNldHRpbmdzKHsgaGRyMTBTZXR0aW5nczogcHJvcHMgPz8ge30gfSk7XG4gIH1cbiAgLyoqIEhMRyAyMDIwIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIGhsZzIwMjAoKTogSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1Q29sb3JTcGFjZVNldHRpbmdzKHsgaGxnMjAyMFNldHRpbmdzOiB7fSB9KTtcbiAgfVxuICAvKiogQ29udmVydCB0byBSZWMuNjAxIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYzYwMSgpOiBIMjY1Q29sb3JTcGFjZVNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEgyNjVDb2xvclNwYWNlU2V0dGluZ3MoeyByZWM2MDFTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdG8gUmVjLjcwOSBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWM3MDkoKTogSDI2NUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1Q29sb3JTcGFjZVNldHRpbmdzKHsgcmVjNzA5U2V0dGluZ3M6IHt9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENmbkNoYW5uZWwuSDI2NUNvbG9yU3BhY2VTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5IMjY1Q29sb3JTcGFjZVNldHRpbmdzUHJvcGVydHkpIHsgdGhpcy5jb25maWcgPSBjb25maWc7IH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBfYmluZCgpOiBDZm5DaGFubmVsLkgyNjVDb2xvclNwYWNlU2V0dGluZ3NQcm9wZXJ0eSB7IHJldHVybiB0aGlzLmNvbmZpZzsgfVxufVxuXG4vKipcbiAqIENvbG9yIHNwYWNlIHNldHRpbmdzIGZvciBBVjEgdmlkZW8uXG4gKi9cbmV4cG9ydCBjbGFzcyBBdjFDb2xvclNwYWNlU2V0dGluZ3Mge1xuICAvKiogUGFzcyB0aHJvdWdoIHRoZSBzb3VyY2UgY29sb3Igc3BhY2Ugd2l0aCBubyBjb252ZXJzaW9uLiAqL1xuICBwdWJsaWMgc3RhdGljIHBhc3N0aHJvdWdoKCk6IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBBdjFDb2xvclNwYWNlU2V0dGluZ3MoeyBjb2xvclNwYWNlUGFzc3Rocm91Z2hTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIEhEUjEwIGNvbG9yIHNwYWNlLiAqL1xuICBwdWJsaWMgc3RhdGljIGhkcjEwKHByb3BzPzogSGRyMTBTZXR0aW5nc1Byb3BzKTogQXYxQ29sb3JTcGFjZVNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyh7IGhkcjEwU2V0dGluZ3M6IHByb3BzID8/IHt9IH0pO1xuICB9XG4gIC8qKiBITEcgMjAyMCBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyBobGcyMDIwKCk6IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBBdjFDb2xvclNwYWNlU2V0dGluZ3MoeyBobGcyMDIwU2V0dGluZ3M6IHt9IH0pO1xuICB9XG4gIC8qKiBDb252ZXJ0IHRvIFJlYy42MDEgY29sb3Igc3BhY2UuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVjNjAxKCk6IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBBdjFDb2xvclNwYWNlU2V0dGluZ3MoeyByZWM2MDFTZXR0aW5nczoge30gfSk7XG4gIH1cbiAgLyoqIENvbnZlcnQgdG8gUmVjLjcwOSBjb2xvciBzcGFjZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWM3MDkoKTogQXYxQ29sb3JTcGFjZVNldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEF2MUNvbG9yU3BhY2VTZXR0aW5ncyh7IHJlYzcwOVNldHRpbmdzOiB7fSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDZm5DaGFubmVsLkF2MUNvbG9yU3BhY2VTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5BdjFDb2xvclNwYWNlU2V0dGluZ3NQcm9wZXJ0eSkgeyB0aGlzLmNvbmZpZyA9IGNvbmZpZzsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9iaW5kKCk6IENmbkNoYW5uZWwuQXYxQ29sb3JTcGFjZVNldHRpbmdzUHJvcGVydHkgeyByZXR1cm4gdGhpcy5jb25maWc7IH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEZpbHRlciBzZXR0aW5ncyBjbGFzc2VzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFBvc3QtZmlsdGVyIHNoYXJwZW5pbmcgZm9yIHRlbXBvcmFsIGZpbHRlci5cbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBvcmFsRmlsdGVyUG9zdEZpbHRlclNoYXJwZW5pbmcge1xuICAvKiogQXV0byAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVE8gPSBuZXcgVGVtcG9yYWxGaWx0ZXJQb3N0RmlsdGVyU2hhcnBlbmluZygnQVVUTycpO1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBUZW1wb3JhbEZpbHRlclBvc3RGaWx0ZXJTaGFycGVuaW5nKCdESVNBQkxFRCcpO1xuICAvKiogRW5hYmxlZCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVOQUJMRUQgPSBuZXcgVGVtcG9yYWxGaWx0ZXJQb3N0RmlsdGVyU2hhcnBlbmluZygnRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogVGVtcG9yYWxGaWx0ZXJQb3N0RmlsdGVyU2hhcnBlbmluZyB7XG4gICAgcmV0dXJuIG5ldyBUZW1wb3JhbEZpbHRlclBvc3RGaWx0ZXJTaGFycGVuaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUZW1wb3JhbCBmaWx0ZXIgc3RyZW5ndGguXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoIHtcbiAgLyoqIEF1dG8gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRPID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ0FVVE8nKTtcbiAgLyoqIFN0cmVuZ3RoIDEgKHJlY29tbWVuZGVkKSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzEgPSBuZXcgVGVtcG9yYWxGaWx0ZXJTdHJlbmd0aCgnU1RSRU5HVEhfMScpO1xuICAvKiogU3RyZW5ndGggMiAocmVjb21tZW5kZWQpICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfMiA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF8yJyk7XG4gIC8qKiBTdHJlbmd0aCAzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfMyA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF8zJyk7XG4gIC8qKiBTdHJlbmd0aCA0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNCA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF80Jyk7XG4gIC8qKiBTdHJlbmd0aCA1ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNSA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF81Jyk7XG4gIC8qKiBTdHJlbmd0aCA2ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNiA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF82Jyk7XG4gIC8qKiBTdHJlbmd0aCA3ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNyA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF83Jyk7XG4gIC8qKiBTdHJlbmd0aCA4ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfOCA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF84Jyk7XG4gIC8qKiBTdHJlbmd0aCA5ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfOSA9IG5ldyBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoKCdTVFJFTkdUSF85Jyk7XG4gIC8qKiBTdHJlbmd0aCAxMCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzEwID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzEwJyk7XG4gIC8qKiBTdHJlbmd0aCAxMSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzExID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzExJyk7XG4gIC8qKiBTdHJlbmd0aCAxMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzEyID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzEyJyk7XG4gIC8qKiBTdHJlbmd0aCAxMyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzEzID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzEzJyk7XG4gIC8qKiBTdHJlbmd0aCAxNCAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzE0ID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzE0Jyk7XG4gIC8qKiBTdHJlbmd0aCAxNSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzE1ID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzE1Jyk7XG4gIC8qKiBTdHJlbmd0aCAxNiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzE2ID0gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgoJ1NUUkVOR1RIXzE2Jyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBUZW1wb3JhbEZpbHRlclN0cmVuZ3RoIHtcbiAgICByZXR1cm4gbmV3IFRlbXBvcmFsRmlsdGVyU3RyZW5ndGgodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBvc3QtZmlsdGVyIHNoYXJwZW5pbmcgZm9yIGJhbmR3aWR0aCByZWR1Y3Rpb24gZmlsdGVyLlxuICovXG5leHBvcnQgY2xhc3MgQmFuZHdpZHRoUmVkdWN0aW9uUG9zdEZpbHRlclNoYXJwZW5pbmcge1xuICAvKiogRGlzYWJsZWQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBCYW5kd2lkdGhSZWR1Y3Rpb25Qb3N0RmlsdGVyU2hhcnBlbmluZygnRElTQUJMRUQnKTtcbiAgLyoqIFNoYXJwZW5pbmcgbGV2ZWwgMSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNIQVJQRU5JTkdfMSA9IG5ldyBCYW5kd2lkdGhSZWR1Y3Rpb25Qb3N0RmlsdGVyU2hhcnBlbmluZygnU0hBUlBFTklOR18xJyk7XG4gIC8qKiBTaGFycGVuaW5nIGxldmVsIDIgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTSEFSUEVOSU5HXzIgPSBuZXcgQmFuZHdpZHRoUmVkdWN0aW9uUG9zdEZpbHRlclNoYXJwZW5pbmcoJ1NIQVJQRU5JTkdfMicpO1xuICAvKiogU2hhcnBlbmluZyBsZXZlbCAzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0hBUlBFTklOR18zID0gbmV3IEJhbmR3aWR0aFJlZHVjdGlvblBvc3RGaWx0ZXJTaGFycGVuaW5nKCdTSEFSUEVOSU5HXzMnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEJhbmR3aWR0aFJlZHVjdGlvblBvc3RGaWx0ZXJTaGFycGVuaW5nIHtcbiAgICByZXR1cm4gbmV3IEJhbmR3aWR0aFJlZHVjdGlvblBvc3RGaWx0ZXJTaGFycGVuaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBCYW5kd2lkdGggcmVkdWN0aW9uIGZpbHRlciBzdHJlbmd0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIEJhbmR3aWR0aFJlZHVjdGlvblN0cmVuZ3RoIHtcbiAgLyoqIEF1dG8gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBVVRPID0gbmV3IEJhbmR3aWR0aFJlZHVjdGlvblN0cmVuZ3RoKCdBVVRPJyk7XG4gIC8qKiBTdHJlbmd0aCAxICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfMSA9IG5ldyBCYW5kd2lkdGhSZWR1Y3Rpb25TdHJlbmd0aCgnU1RSRU5HVEhfMScpO1xuICAvKiogU3RyZW5ndGggMiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVOR1RIXzIgPSBuZXcgQmFuZHdpZHRoUmVkdWN0aW9uU3RyZW5ndGgoJ1NUUkVOR1RIXzInKTtcbiAgLyoqIFN0cmVuZ3RoIDMgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVFJFTkdUSF8zID0gbmV3IEJhbmR3aWR0aFJlZHVjdGlvblN0cmVuZ3RoKCdTVFJFTkdUSF8zJyk7XG4gIC8qKiBTdHJlbmd0aCA0ICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1RSRU5HVEhfNCA9IG5ldyBCYW5kd2lkdGhSZWR1Y3Rpb25TdHJlbmd0aCgnU1RSRU5HVEhfNCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQmFuZHdpZHRoUmVkdWN0aW9uU3RyZW5ndGgge1xuICAgIHJldHVybiBuZXcgQmFuZHdpZHRoUmVkdWN0aW9uU3RyZW5ndGgodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgdGVtcG9yYWwgZmlsdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBvcmFsRmlsdGVyUHJvcHMge1xuICAvKipcbiAgICogUG9zdC1maWx0ZXIgc2hhcnBlbmluZyBjb250cm9sLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdEZpbHRlclNoYXJwZW5pbmc/OiBUZW1wb3JhbEZpbHRlclBvc3RGaWx0ZXJTaGFycGVuaW5nO1xuICAvKipcbiAgICogRmlsdGVyIHN0cmVuZ3RoLiBXZSByZWNvbW1lbmQgMSBvciAyLiBIaWdoZXIgdmFsdWVzIG1heSByZW1vdmUgdXNlZnVsIGRldGFpbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHN0cmVuZ3RoPzogVGVtcG9yYWxGaWx0ZXJTdHJlbmd0aDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIGJhbmR3aWR0aCByZWR1Y3Rpb24gZmlsdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJhbmR3aWR0aFJlZHVjdGlvbkZpbHRlclByb3BzIHtcbiAgLyoqXG4gICAqIFBvc3QtZmlsdGVyIHNoYXJwZW5pbmcgY29udHJvbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHBvc3RGaWx0ZXJTaGFycGVuaW5nPzogQmFuZHdpZHRoUmVkdWN0aW9uUG9zdEZpbHRlclNoYXJwZW5pbmc7XG4gIC8qKlxuICAgKiBCYW5kd2lkdGggcmVkdWN0aW9uIHN0cmVuZ3RoLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgc3RyZW5ndGg/OiBCYW5kd2lkdGhSZWR1Y3Rpb25TdHJlbmd0aDtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgc2V0dGluZ3MgZm9yIEguMjY0IHZpZGVvLiBTdXBwb3J0cyB0ZW1wb3JhbCBmaWx0ZXIgYW5kIGJhbmR3aWR0aCByZWR1Y3Rpb24gZmlsdGVyLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NEZpbHRlclNldHRpbmdzIHtcbiAgLyoqIEFwcGx5IGEgdGVtcG9yYWwgZmlsdGVyLiAqL1xuICBwdWJsaWMgc3RhdGljIHRlbXBvcmFsRmlsdGVyKHByb3BzPzogVGVtcG9yYWxGaWx0ZXJQcm9wcyk6IEgyNjRGaWx0ZXJTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0RmlsdGVyU2V0dGluZ3Moe1xuICAgICAgdGVtcG9yYWxGaWx0ZXJTZXR0aW5nczogcHJvcHMgPyB7XG4gICAgICAgIHBvc3RGaWx0ZXJTaGFycGVuaW5nOiBwcm9wcy5wb3N0RmlsdGVyU2hhcnBlbmluZz8udmFsdWUsXG4gICAgICAgIHN0cmVuZ3RoOiBwcm9wcy5zdHJlbmd0aD8udmFsdWUsXG4gICAgICB9IDoge30sXG4gICAgfSk7XG4gIH1cbiAgLyoqIEFwcGx5IGEgYmFuZHdpZHRoIHJlZHVjdGlvbiBmaWx0ZXIuICovXG4gIHB1YmxpYyBzdGF0aWMgYmFuZHdpZHRoUmVkdWN0aW9uRmlsdGVyKHByb3BzPzogQmFuZHdpZHRoUmVkdWN0aW9uRmlsdGVyUHJvcHMpOiBIMjY0RmlsdGVyU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NEZpbHRlclNldHRpbmdzKHtcbiAgICAgIGJhbmR3aWR0aFJlZHVjdGlvbkZpbHRlclNldHRpbmdzOiBwcm9wcyA/IHtcbiAgICAgICAgcG9zdEZpbHRlclNoYXJwZW5pbmc6IHByb3BzLnBvc3RGaWx0ZXJTaGFycGVuaW5nPy52YWx1ZSxcbiAgICAgICAgc3RyZW5ndGg6IHByb3BzLnN0cmVuZ3RoPy52YWx1ZSxcbiAgICAgIH0gOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDZm5DaGFubmVsLkgyNjRGaWx0ZXJTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5IMjY0RmlsdGVyU2V0dGluZ3NQcm9wZXJ0eSkgeyB0aGlzLmNvbmZpZyA9IGNvbmZpZzsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9iaW5kKCk6IENmbkNoYW5uZWwuSDI2NEZpbHRlclNldHRpbmdzUHJvcGVydHkgeyByZXR1cm4gdGhpcy5jb25maWc7IH1cbn1cblxuLyoqXG4gKiBGaWx0ZXIgc2V0dGluZ3MgZm9yIEguMjY1IHZpZGVvLiBTdXBwb3J0cyB0ZW1wb3JhbCBmaWx0ZXIgYW5kIGJhbmR3aWR0aCByZWR1Y3Rpb24gZmlsdGVyLlxuICovXG5leHBvcnQgY2xhc3MgSDI2NUZpbHRlclNldHRpbmdzIHtcbiAgLyoqIEFwcGx5IGEgdGVtcG9yYWwgZmlsdGVyLiAqL1xuICBwdWJsaWMgc3RhdGljIHRlbXBvcmFsRmlsdGVyKHByb3BzPzogVGVtcG9yYWxGaWx0ZXJQcm9wcyk6IEgyNjVGaWx0ZXJTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1RmlsdGVyU2V0dGluZ3Moe1xuICAgICAgdGVtcG9yYWxGaWx0ZXJTZXR0aW5nczogcHJvcHMgPyB7XG4gICAgICAgIHBvc3RGaWx0ZXJTaGFycGVuaW5nOiBwcm9wcy5wb3N0RmlsdGVyU2hhcnBlbmluZz8udmFsdWUsXG4gICAgICAgIHN0cmVuZ3RoOiBwcm9wcy5zdHJlbmd0aD8udmFsdWUsXG4gICAgICB9IDoge30sXG4gICAgfSk7XG4gIH1cbiAgLyoqIEFwcGx5IGEgYmFuZHdpZHRoIHJlZHVjdGlvbiBmaWx0ZXIuICovXG4gIHB1YmxpYyBzdGF0aWMgYmFuZHdpZHRoUmVkdWN0aW9uRmlsdGVyKHByb3BzPzogQmFuZHdpZHRoUmVkdWN0aW9uRmlsdGVyUHJvcHMpOiBIMjY1RmlsdGVyU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgSDI2NUZpbHRlclNldHRpbmdzKHtcbiAgICAgIGJhbmR3aWR0aFJlZHVjdGlvbkZpbHRlclNldHRpbmdzOiBwcm9wcyA/IHtcbiAgICAgICAgcG9zdEZpbHRlclNoYXJwZW5pbmc6IHByb3BzLnBvc3RGaWx0ZXJTaGFycGVuaW5nPy52YWx1ZSxcbiAgICAgICAgc3RyZW5ndGg6IHByb3BzLnN0cmVuZ3RoPy52YWx1ZSxcbiAgICAgIH0gOiB7fSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDZm5DaGFubmVsLkgyNjVGaWx0ZXJTZXR0aW5nc1Byb3BlcnR5O1xuICBwcml2YXRlIGNvbnN0cnVjdG9yKGNvbmZpZzogQ2ZuQ2hhbm5lbC5IMjY1RmlsdGVyU2V0dGluZ3NQcm9wZXJ0eSkgeyB0aGlzLmNvbmZpZyA9IGNvbmZpZzsgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIF9iaW5kKCk6IENmbkNoYW5uZWwuSDI2NUZpbHRlclNldHRpbmdzUHJvcGVydHkgeyByZXR1cm4gdGhpcy5jb25maWc7IH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvZGVjIHNldHRpbmdzIHByb3BzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIEguMjY0IGNvZGVjIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEgyNjRTZXR0aW5nc1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSByYXRlIGNvbnRyb2wgY29uZmlndXJhdGlvbi5cbiAgICogQGRlZmF1bHQgLSBDQlIgd2l0aCBubyBiaXRyYXRlIChzZXJ2aWNlIGRlZmF1bHQpXG4gICAqL1xuICByZWFkb25seSByYXRlQ29udHJvbD86IEgyNjRSYXRlQ29udHJvbDtcbiAgLyoqXG4gICAqIFRoZSBILjI2NCBwcm9maWxlLlxuICAgKiBAZGVmYXVsdCBIMjY0UHJvZmlsZS5NQUlOXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogSDI2NFByb2ZpbGU7XG4gIC8qKlxuICAgKiBUaGUgR09QIHNpemUgKGtleWZyYW1lIGludGVydmFsKS5cbiAgICogQGRlZmF1bHQgR29wU2l6ZS5zZWNvbmRzKDEpXG4gICAqL1xuICByZWFkb25seSBnb3BTaXplPzogR29wU2l6ZTtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgQi1mcmFtZXMgYmV0d2VlbiByZWZlcmVuY2UgZnJhbWVzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZ29wTnVtQkZyYW1lcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhZGFwdGl2ZSBxdWFudGl6YXRpb24uIFRoaXMgYWxsb3dzIGludHJhLWZyYW1lIHF1YW50aXplcnMgdG8gdmFyeSB0byBpbXByb3ZlIHZpc3VhbCBxdWFsaXR5LlxuICAgKiBAZGVmYXVsdCBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24uQVVUT1xuICAgKi9cbiAgcmVhZG9ubHkgYWRhcHRpdmVRdWFudGl6YXRpb24/OiBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb247XG4gIC8qKlxuICAgKiBUaGUgdmlkZW8gZnJhbWUgcmF0ZS5cbiAgICogQGRlZmF1bHQgLSBmb2xsb3cgc291cmNlXG4gICAqL1xuICByZWFkb25seSBmcmFtZXJhdGU/OiBGcmFtZXJhdGU7XG4gIC8qKlxuICAgKiBUaGUgcGl4ZWwgYXNwZWN0IHJhdGlvIChQQVIpIG9mIHRoZSB2aWRlby5cbiAgICogQGRlZmF1bHQgLSBmb2xsb3cgc291cmNlIChvciBzcXVhcmUgcGl4ZWxzIHdoZW4gZnJhbWVyYXRlIGlzIHNwZWNpZmllZClcbiAgICovXG4gIHJlYWRvbmx5IHBpeGVsQXNwZWN0UmF0aW8/OiBQaXhlbEFzcGVjdFJhdGlvO1xuICAvKipcbiAgICogVGltZWNvZGUgYnVybi1pbiBzZXR0aW5ncyB0byBvdmVybGF5IHRpbWVjb2RlIG9uIHRoZSB2aWRlby5cbiAgICogQGRlZmF1bHQgLSBubyB0aW1lY29kZSBidXJuLWluXG4gICAqL1xuICByZWFkb25seSB0aW1lY29kZUJ1cm5pbj86IFRpbWVjb2RlQnVybmluU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBBRkQgdmFsdWVzIHdpbGwgYmUgd3JpdHRlbiBpbnRvIHRoZSBvdXRwdXQgc3RyZWFtLiBJZiBhZmRTaWduYWxpbmcgaXMgYXV0bywgdGhlXG4gICAqIHN5c3RlbSB0cmllcyB0byBwcmVzZXJ2ZSB0aGUgaW5wdXQgQUZEIHZhbHVlIChpbiBjYXNlcyB3aGVyZSBtdWx0aXBsZSBBRkQgdmFsdWVzIGFyZSB2YWxpZCkuIElmXG4gICAqIHNldCB0byBmaXhlZCwgdGhlIEFGRCB2YWx1ZSBpcyB0aGUgdmFsdWUgY29uZmlndXJlZCBpbiB0aGUgZml4ZWRBZmQgcGFyYW1ldGVyLlxuICAgKiBAZGVmYXVsdCBBZmRTaWduYWxpbmcuTk9ORVxuICAgKi9cbiAgcmVhZG9ubHkgYWZkU2lnbmFsaW5nPzogQWZkU2lnbmFsaW5nO1xuICAvKipcbiAgICogUGVyY2VudGFnZSBvZiB0aGUgYnVmZmVyIHRoYXQgc2hvdWxkIGluaXRpYWxseSBiZSBmaWxsZWQgKEhSRCBidWZmZXIgbW9kZWwpLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgYnVmRmlsbFBjdD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNpemUgb2YgdGhlIGJ1ZmZlciAoSFJEIGJ1ZmZlciBtb2RlbCkgaW4gYml0cy9zZWNvbmQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBidWZTaXplPzogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIGNvbG9yIHNwYWNlIG1ldGFkYXRhIGluIHRoZSBvdXRwdXQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBjb2xvck1ldGFkYXRhPzogQ29sb3JNZXRhZGF0YTtcbiAgLyoqXG4gICAqIENvbG9yIHNwYWNlIHNldHRpbmdzIGZvciB0aGUgdmlkZW8uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBjb2xvclNwYWNlU2V0dGluZ3M/OiBIMjY0Q29sb3JTcGFjZVNldHRpbmdzO1xuICAvKipcbiAgICogVGhlIGVudHJvcHkgZW5jb2RpbmcgbW9kZS4gQ0FCQUMgcmVxdWlyZXMgTWFpbiBvciBIaWdoIHByb2ZpbGUuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBlbnRyb3B5RW5jb2Rpbmc/OiBIMjY0RW50cm9weUVuY29kaW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgdmlkZW8gZmlsdGVyIHNldHRpbmdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyU2V0dGluZ3M/OiBIMjY0RmlsdGVyU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBGb3VyLWJpdCBBRkQgdmFsdWUgdG8gd3JpdGUgb24gYWxsIGZyYW1lcy4gT25seSB2YWxpZCB3aGVuIGFmZFNpZ25hbGluZyBpcyBGSVhFRC5cbiAgICpcbiAgICogVmFsaWQgdmFsdWVzOiBGSVhFRF8wMDAwLCBGSVhFRF8wMDEwLCBGSVhFRF8wMDExLCBGSVhFRF8wMTAwLCBGSVhFRF8xMDAwLFxuICAgKiBGSVhFRF8xMDAxLCBGSVhFRF8xMDEwLCBGSVhFRF8xMDExLCBGSVhFRF8xMTAwLCBGSVhFRF8xMTAxLCBGSVhFRF8xMTEwLCBGSVhFRF8xMTExLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZml4ZWRBZmQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiBlbmFibGVkLCBhZGp1c3RzIHF1YW50aXphdGlvbiB3aXRoaW4gZWFjaCBmcmFtZSB0byByZWR1Y2UgZmxpY2tlciBvbiBJLWZyYW1lcy5cbiAgICogQGRlZmF1bHQgRmxpY2tlckFxLkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IGZsaWNrZXJBcT86IEZsaWNrZXJBcTtcbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgY29kaW5nIGlzIG9uIGEgZmllbGQgYmFzaXMgb3IgZnJhbWUgYmFzaXMgd2hlbiBzY2FuIHR5cGUgaXMgaW50ZXJsYWNlZC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlRmllbGRQaWN0dXJlcz86IEgyNjRGb3JjZUZpZWxkUGljdHVyZXM7XG4gIC8qKlxuICAgKiBJZiBlbmFibGVkLCB1c2VzIHJlZmVyZW5jZSBCIGZyYW1lcyBmb3IgR09QIHN0cnVjdHVyZXMgdGhhdCBoYXZlIEIgZnJhbWVzID4gMS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGdvcEJSZWZlcmVuY2U/OiBHb3BCUmVmZXJlbmNlO1xuICAvKipcbiAgICogRnJlcXVlbmN5IG9mIGNsb3NlZCBHT1BzLiBTZXQgdG8gMSBmb3Igc3RyZWFtaW5nIHNvIGRlY29kZXJzIGpvaW5pbmcgbWlkLXN0cmVhbSBnZXQgYW4gSURSIGZyYW1lIHF1aWNrbHkuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBnb3BDbG9zZWRDYWRlbmNlPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIEguMjY0IGxldmVsLlxuICAgKlxuICAgKiBWYWxpZCB2YWx1ZXM6IEgyNjRfTEVWRUxfMSwgSDI2NF9MRVZFTF8xXzEsIEgyNjRfTEVWRUxfMV8yLCBIMjY0X0xFVkVMXzFfMyxcbiAgICogSDI2NF9MRVZFTF8yLCBIMjY0X0xFVkVMXzJfMSwgSDI2NF9MRVZFTF8yXzIsIEgyNjRfTEVWRUxfMywgSDI2NF9MRVZFTF8zXzEsXG4gICAqIEgyNjRfTEVWRUxfM18yLCBIMjY0X0xFVkVMXzQsIEgyNjRfTEVWRUxfNF8xLCBIMjY0X0xFVkVMXzRfMiwgSDI2NF9MRVZFTF81LFxuICAgKiBIMjY0X0xFVkVMXzVfMSwgSDI2NF9MRVZFTF81XzIsIEgyNjRfTEVWRUxfQVVUTy5cbiAgICpcbiAgICogQGRlZmF1bHQgSDI2NExldmVsLkgyNjRfTEVWRUxfQVVUT1xuICAgKi9cbiAgcmVhZG9ubHkgbGV2ZWw/OiBIMjY0TGV2ZWw7XG4gIC8qKlxuICAgKiBBbW91bnQgb2YgbG9va2FoZWFkLiBMb3cgZGVjcmVhc2VzIGxhdGVuY3kvbWVtb3J5OyBoaWdoIGNhbiBwcm9kdWNlIGJldHRlciBxdWFsaXR5LlxuICAgKiBAZGVmYXVsdCBMb29rQWhlYWRSYXRlQ29udHJvbC5ISUdIXG4gICAqL1xuICByZWFkb25seSBsb29rQWhlYWRSYXRlQ29udHJvbD86IExvb2tBaGVhZFJhdGVDb250cm9sO1xuICAvKipcbiAgICogT25seSBtZWFuaW5nZnVsIGlmIHNjZW5lQ2hhbmdlRGV0ZWN0IGlzIGVuYWJsZWQuIEVuZm9yY2VzIHNlcGFyYXRpb24gYmV0d2VlblxuICAgKiByZXBlYXRlZCAoY2FkZW5jZSkgSS1mcmFtZXMgYW5kIEktZnJhbWVzIGluc2VydGVkIGJ5IHNjZW5lIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtaW5JSW50ZXJ2YWw/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHJlZmVyZW5jZSBmcmFtZXMgdG8gdXNlLiBUaGUgZW5jb2RlciBtaWdodCB1c2UgbW9yZSBpZiBCLWZyYW1lcyBvciBpbnRlcmxhY2VkIGVuY29kaW5nIGlzIHVzZWQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBudW1SZWZGcmFtZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzY2FuIHR5cGUgb2YgdGhlIG91dHB1dC5cbiAgICogQGRlZmF1bHQgU2NhblR5cGUuUFJPR1JFU1NJVkVcbiAgICovXG4gIHJlYWRvbmx5IHNjYW5UeXBlPzogU2NhblR5cGU7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc2xpY2VzIHBlciBwaWN0dXJlLiBNdXN0IGJlIDw9IG1hY3JvYmxvY2sgcm93cyAocHJvZ3Jlc3NpdmUpIG9yIGhhbGYgKGludGVybGFjZWQpLlxuICAgKiBAZGVmYXVsdCAtIGVuY29kZXIgY2hvb3NlcyBiYXNlZCBvbiByZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSBzbGljZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBTb2Z0bmVzcy4gU2VsZWN0cyBhIHF1YW50aXplciBtYXRyaXg7IGxhcmdlciB2YWx1ZXMgcmVkdWNlIGhpZ2gtZnJlcXVlbmN5IGNvbnRlbnQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBzb2Z0bmVzcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFByb2R1Y2VzIGEgYml0c3RyZWFtIGNvbXBsaWFudCB3aXRoIFNNUFRFIFJQLTIwMjcuXG4gICAqIEBkZWZhdWx0IEgyNjRTeW50YXguREVGQVVMVFxuICAgKi9cbiAgcmVhZG9ubHkgc3ludGF4PzogSDI2NFN5bnRheDtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaG93IHRpbWVjb2RlcyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW0uXG4gICAqIFRoaXMgY29udHJvbHMgaW5zZXJ0aW9uIGludG8gdGhlIG91dHB1dCBlbGVtZW50YXJ5IHN0cmVhbS4gVGhlIGNoYW5uZWwncyBgdGltZWNvZGVDb25maWdgIGNvbnRyb2xzIHRoZVxuICAgKiBzb3VyY2Ugb2YgdGhlIHRpbWVjb2RlIHVzZWQgZm9yIG91dHB1dC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVjb2RlSW5zZXJ0aW9uPzogVGltZWNvZGVJbnNlcnRpb247XG4gIC8qKlxuICAgKiBNaW5pbXVtIFFQIHZhbHVlLiBTZXRzIGEgZmxvb3Igb24gdGhlIHF1YW50aXphdGlvbiBwYXJhbWV0ZXIuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtaW5RcD86IG51bWJlcjtcbiAgLyoqXG4gICAqIE1pbmltdW0gYml0cmF0ZSBpbiBiaXRzL3NlY29uZC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IG1pbkJpdHJhdGU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBRdWFsaXR5IGxldmVsLiBFTkhBTkNFRF9RVUFMSVRZIHByb2R1Y2VzIHNsaWdodGx5IGJldHRlciB2aWRlbyB3aXRob3V0IGluY3JlYXNpbmcgYml0cmF0ZS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHF1YWxpdHlMZXZlbD86IEgyNjRRdWFsaXR5TGV2ZWw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHNjZW5lIGNoYW5nZSBkZXRlY3Rpb24gaW5zZXJ0cyBJLWZyYW1lcyBvbiBzY2VuZSBjaGFuZ2VzLlxuICAgKiBAZGVmYXVsdCBIMjY0U2NlbmVDaGFuZ2VEZXRlY3QuRU5BQkxFRFxuICAgKi9cbiAgcmVhZG9ubHkgc2NlbmVDaGFuZ2VEZXRlY3Q/OiBIMjY0U2NlbmVDaGFuZ2VEZXRlY3Q7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHNwYXRpYWwgYWRhcHRpdmUgcXVhbnRpemF0aW9uIGFkanVzdHMgcXVhbnRpemF0aW9uIHdpdGhpbiBlYWNoIGZyYW1lIGJhc2VkIG9uIHNwYXRpYWwgdmFyaWF0aW9uLlxuICAgKiBAZGVmYXVsdCBIMjY0U3BhdGlhbEFxLkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IHNwYXRpYWxBcT86IEgyNjRTcGF0aWFsQXE7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRlbXBvcmFsIGFkYXB0aXZlIHF1YW50aXphdGlvbiBhZGp1c3RzIHF1YW50aXphdGlvbiBiYXNlZCBvbiB0ZW1wb3JhbCB2YXJpYXRpb24gYmV0d2VlbiBmcmFtZXMuXG4gICAqIEBkZWZhdWx0IEgyNjRUZW1wb3JhbEFxLkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IHRlbXBvcmFsQXE/OiBIMjY0VGVtcG9yYWxBcTtcbiAgLyoqXG4gICAqIFN1Yi1HT1AgbGVuZ3RoIG1vZGUuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBzdWJnb3BMZW5ndGg/OiBTdWJnb3BMZW5ndGg7XG59XG5cbi8qKlxuICogSC4yNjUgcHJvZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVQcm9maWxlIHtcbiAgLyoqIE1haW4gcHJvZmlsZSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BSU4gPSBuZXcgSDI2NVByb2ZpbGUoJ01BSU4nKTtcbiAgLyoqIE1haW4gMTAtYml0IHByb2ZpbGUgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNQUlOXzEwQklUID0gbmV3IEgyNjVQcm9maWxlKCdNQUlOXzEwQklUJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBIMjY1UHJvZmlsZSB7XG4gICAgcmV0dXJuIG5ldyBIMjY1UHJvZmlsZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSC4yNjUgdGllci5cbiAqL1xuZXhwb3J0IGNsYXNzIEgyNjVUaWVyIHtcbiAgLyoqIE1haW4gdGllciAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BSU4gPSBuZXcgSDI2NVRpZXIoJ01BSU4nKTtcbiAgLyoqIEhpZ2ggdGllciAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhJR0ggPSBuZXcgSDI2NVRpZXIoJ0hJR0gnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEgyNjVUaWVyIHtcbiAgICByZXR1cm4gbmV3IEgyNjVUaWVyKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBILjI2NSBjb2RlYyBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIMjY1U2V0dGluZ3NQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcmF0ZSBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IC0gQ0JSIHdpdGggbm8gYml0cmF0ZSAoc2VydmljZSBkZWZhdWx0KVxuICAgKi9cbiAgcmVhZG9ubHkgcmF0ZUNvbnRyb2w/OiBIMjY1UmF0ZUNvbnRyb2w7XG4gIC8qKlxuICAgKiBUaGUgSC4yNjUgcHJvZmlsZS5cbiAgICogQGRlZmF1bHQgSDI2NVByb2ZpbGUuTUFJTlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IEgyNjVQcm9maWxlO1xuICAvKipcbiAgICogVGhlIEguMjY1IHRpZXIuXG4gICAqIEBkZWZhdWx0IEgyNjVUaWVyLk1BSU5cbiAgICovXG4gIHJlYWRvbmx5IHRpZXI/OiBIMjY1VGllcjtcbiAgLyoqXG4gICAqIFRoZSBHT1Agc2l6ZSAoa2V5ZnJhbWUgaW50ZXJ2YWwpLlxuICAgKiBAZGVmYXVsdCBHb3BTaXplLnNlY29uZHMoMSlcbiAgICovXG4gIHJlYWRvbmx5IGdvcFNpemU/OiBHb3BTaXplO1xuICAvKipcbiAgICogVGhlIHZpZGVvIGZyYW1lIHJhdGUuIFJlcXVpcmVkIGZvciBILjI2NS5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1lcmF0ZTogRnJhbWVyYXRlO1xuICAvKipcbiAgICogVGhlIHBpeGVsIGFzcGVjdCByYXRpbyAoUEFSKSBvZiB0aGUgdmlkZW8uXG4gICAqIEBkZWZhdWx0IC0gc3F1YXJlIHBpeGVsc1xuICAgKi9cbiAgcmVhZG9ubHkgcGl4ZWxBc3BlY3RSYXRpbz86IFBpeGVsQXNwZWN0UmF0aW87XG4gIC8qKlxuICAgKiBUaW1lY29kZSBidXJuLWluIHNldHRpbmdzIHRvIG92ZXJsYXkgdGltZWNvZGUgb24gdGhlIHZpZGVvLlxuICAgKiBAZGVmYXVsdCAtIG5vIHRpbWVjb2RlIGJ1cm4taW5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVjb2RlQnVybmluPzogVGltZWNvZGVCdXJuaW5TZXR0aW5ncztcbiAgLyoqXG4gICAqIFRoZSBhZGFwdGl2ZSBxdWFudGl6YXRpb24uIEFsbG93cyBpbnRyYS1mcmFtZSBxdWFudGl6ZXJzIHRvIHZhcnkgdG8gaW1wcm92ZSB2aXN1YWwgcXVhbGl0eS5cbiAgICogQGRlZmF1bHQgSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uLkFVVE9cbiAgICovXG4gIHJlYWRvbmx5IGFkYXB0aXZlUXVhbnRpemF0aW9uPzogSDI2NUFkYXB0aXZlUXVhbnRpemF0aW9uO1xuICAvKipcbiAgICogQUZEIHNpZ25hbGluZyBtb2RlLlxuICAgKiBAZGVmYXVsdCBBZmRTaWduYWxpbmcuTk9ORVxuICAgKi9cbiAgcmVhZG9ubHkgYWZkU2lnbmFsaW5nPzogQWZkU2lnbmFsaW5nO1xuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgYW4gQWx0ZXJuYXRpdmUgVHJhbnNmZXIgRnVuY3Rpb24gU0VJIG1lc3NhZ2UgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggbm9uLUhEUiBkZWNvZGVycy5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGFsdGVybmF0aXZlVHJhbnNmZXJGdW5jdGlvbj86IEgyNjVBbHRlcm5hdGl2ZVRyYW5zZmVyRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTaXplIG9mIGJ1ZmZlciAoSFJEIGJ1ZmZlciBtb2RlbCkgaW4gYml0cy5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGJ1ZlNpemU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgY29sb3Igc3BhY2UgbWV0YWRhdGEgaW4gdGhlIG91dHB1dC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbG9yTWV0YWRhdGE/OiBDb2xvck1ldGFkYXRhO1xuICAvKipcbiAgICogQ29sb3Igc3BhY2Ugc2V0dGluZ3MgZm9yIHRoZSB2aWRlby5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbG9yU3BhY2VTZXR0aW5ncz86IEgyNjVDb2xvclNwYWNlU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBEZWJsb2NraW5nIGZpbHRlciBjb250cm9sLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVibG9ja2luZz86IEgyNjVEZWJsb2NraW5nO1xuICAvKipcbiAgICogT3B0aW9uYWwgdmlkZW8gZmlsdGVyIHNldHRpbmdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZmlsdGVyU2V0dGluZ3M/OiBIMjY1RmlsdGVyU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBGb3VyLWJpdCBBRkQgdmFsdWUgdG8gd3JpdGUgb24gYWxsIGZyYW1lcy4gT25seSB2YWxpZCB3aGVuIGFmZFNpZ25hbGluZyBpcyBGSVhFRC5cbiAgICpcbiAgICogVmFsaWQgdmFsdWVzOiBGSVhFRF8wMDAwLCBGSVhFRF8wMDEwLCBGSVhFRF8wMDExLCBGSVhFRF8wMTAwLCBGSVhFRF8xMDAwLFxuICAgKiBGSVhFRF8xMDAxLCBGSVhFRF8xMDEwLCBGSVhFRF8xMDExLCBGSVhFRF8xMTAwLCBGSVhFRF8xMTAxLCBGSVhFRF8xMTEwLCBGSVhFRF8xMTExLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZml4ZWRBZmQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiBlbmFibGVkLCBhZGp1c3RzIHF1YW50aXphdGlvbiB3aXRoaW4gZWFjaCBmcmFtZSB0byByZWR1Y2UgZmxpY2tlciBvbiBJLWZyYW1lcy5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGZsaWNrZXJBcT86IEZsaWNrZXJBcTtcbiAgLyoqXG4gICAqIElmIGVuYWJsZWQsIHVzZXMgcmVmZXJlbmNlIEIgZnJhbWVzIGZvciBHT1Agc3RydWN0dXJlcyB0aGF0IGhhdmUgQiBmcmFtZXMgPiAxLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZ29wQlJlZmVyZW5jZT86IEdvcEJSZWZlcmVuY2U7XG4gIC8qKlxuICAgKiBGcmVxdWVuY3kgb2YgY2xvc2VkIEdPUHMuIFNldCB0byAxIGZvciBzdHJlYW1pbmcgc28gZGVjb2RlcnMgam9pbmluZyBtaWQtc3RyZWFtIGdldCBhbiBJRFIgZnJhbWUgcXVpY2tseS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGdvcENsb3NlZENhZGVuY2U/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgQi1mcmFtZXMgYmV0d2VlbiByZWZlcmVuY2UgZnJhbWVzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZ29wTnVtQkZyYW1lcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBILjI2NSBsZXZlbC5cbiAgICpcbiAgICogVmFsaWQgdmFsdWVzOiBIMjY1X0xFVkVMXzEsIEgyNjVfTEVWRUxfMiwgSDI2NV9MRVZFTF8yXzEsIEgyNjVfTEVWRUxfMyxcbiAgICogSDI2NV9MRVZFTF8zXzEsIEgyNjVfTEVWRUxfNCwgSDI2NV9MRVZFTF80XzEsIEgyNjVfTEVWRUxfNSwgSDI2NV9MRVZFTF81XzEsXG4gICAqIEgyNjVfTEVWRUxfNV8yLCBIMjY1X0xFVkVMXzYsIEgyNjVfTEVWRUxfNl8xLCBIMjY1X0xFVkVMXzZfMiwgSDI2NV9MRVZFTF9BVVRPLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdCAoYXV0bylcbiAgICovXG4gIHJlYWRvbmx5IGxldmVsPzogSDI2NUxldmVsO1xuICAvKipcbiAgICogQW1vdW50IG9mIGxvb2thaGVhZC4gTG93IGRlY3JlYXNlcyBsYXRlbmN5L21lbW9yeTsgaGlnaCBjYW4gcHJvZHVjZSBiZXR0ZXIgcXVhbGl0eS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGxvb2tBaGVhZFJhdGVDb250cm9sPzogTG9va0FoZWFkUmF0ZUNvbnRyb2w7XG4gIC8qKlxuICAgKiBPbmx5IG1lYW5pbmdmdWwgaWYgc2NlbmVDaGFuZ2VEZXRlY3QgaXMgZW5hYmxlZC4gRW5mb3JjZXMgc2VwYXJhdGlvbiBiZXR3ZWVuXG4gICAqIHJlcGVhdGVkIChjYWRlbmNlKSBJLWZyYW1lcyBhbmQgSS1mcmFtZXMgaW5zZXJ0ZWQgYnkgc2NlbmUgY2hhbmdlIGRldGVjdGlvbi5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IG1pbklJbnRlcnZhbD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNldHMgdGhlIHNjYW4gdHlwZSBvZiB0aGUgb3V0cHV0LlxuICAgKiBAZGVmYXVsdCBTY2FuVHlwZS5QUk9HUkVTU0lWRVxuICAgKi9cbiAgcmVhZG9ubHkgc2NhblR5cGU/OiBTY2FuVHlwZTtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBzbGljZXMgcGVyIHBpY3R1cmUuXG4gICAqIEBkZWZhdWx0IC0gZW5jb2RlciBjaG9vc2VzIGJhc2VkIG9uIHJlc29sdXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHNsaWNlcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaG93IHRpbWVjb2RlcyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgdmlkZW8gZWxlbWVudGFyeSBzdHJlYW0uXG4gICAqIFRoaXMgY29udHJvbHMgaW5zZXJ0aW9uIGludG8gdGhlIG91dHB1dCBlbGVtZW50YXJ5IHN0cmVhbS4gVGhlIGNoYW5uZWwncyBgdGltZWNvZGVDb25maWdgIGNvbnRyb2xzIHRoZVxuICAgKiBzb3VyY2Ugb2YgdGhlIHRpbWVjb2RlIHVzZWQgZm9yIG91dHB1dC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVjb2RlSW5zZXJ0aW9uPzogVGltZWNvZGVJbnNlcnRpb247XG4gIC8qKlxuICAgKiBNaW5pbXVtIFFQIHZhbHVlLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgbWluUXA/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBNaW5pbXVtIGJpdHJhdGUgaW4gYml0cy9zZWNvbmQuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtaW5CaXRyYXRlPzogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciBtb3Rpb24gdmVjdG9ycyBjYW4gY3Jvc3MgcGljdHVyZSBib3VuZGFyaWVzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgbXZPdmVyUGljdHVyZUJvdW5kYXJpZXM/OiBIMjY1TXZPdmVyUGljdHVyZUJvdW5kYXJpZXM7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSB0ZW1wb3JhbCBtb3Rpb24gdmVjdG9yIHByZWRpY3Rpb24uXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBtdlRlbXBvcmFsUHJlZGljdG9yPzogSDI2NU12VGVtcG9yYWxQcmVkaWN0b3I7XG4gIC8qKlxuICAgKiBTdWItR09QIGxlbmd0aCBtb2RlLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZ29wTGVuZ3RoPzogU3ViZ29wTGVuZ3RoO1xuICAvKipcbiAgICogVGlsZSBoZWlnaHQgaW4gcGl4ZWxzLiBNdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIENUVSBzaXplLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdGlsZUhlaWdodD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRpbGUgcGFkZGluZyBtb2RlLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdGlsZVBhZGRpbmc/OiBIMjY1VGlsZVBhZGRpbmc7XG4gIC8qKlxuICAgKiBUaWxlIHdpZHRoIGluIHBpeGVscy4gTXVzdCBiZSBhIG11bHRpcGxlIG9mIHRoZSBDVFUgc2l6ZS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHRpbGVXaWR0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRyZWVibG9jayBzaXplIGZvciB0aGUgZW5jb2Rlci5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IHRyZWVibG9ja1NpemU/OiBIMjY1VHJlZWJsb2NrU2l6ZTtcbiAgLyoqXG4gICAqIFdoZXRoZXIgc2NlbmUgY2hhbmdlIGRldGVjdGlvbiBpbnNlcnRzIEktZnJhbWVzIG9uIHNjZW5lIGNoYW5nZXMuXG4gICAqIEBkZWZhdWx0IEgyNjVTY2VuZUNoYW5nZURldGVjdC5FTkFCTEVEXG4gICAqL1xuICByZWFkb25seSBzY2VuZUNoYW5nZURldGVjdD86IEgyNjVTY2VuZUNoYW5nZURldGVjdDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBBVjEgY29kZWMgc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXYxU2V0dGluZ3NQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcmF0ZSBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSByYXRlQ29udHJvbD86IEF2MVJhdGVDb250cm9sO1xuICAvKipcbiAgICogVGhlIEdPUCBzaXplIChrZXlmcmFtZSBpbnRlcnZhbCkuXG4gICAqIEBkZWZhdWx0IEdvcFNpemUuc2Vjb25kcygxKVxuICAgKi9cbiAgcmVhZG9ubHkgZ29wU2l6ZT86IEdvcFNpemU7XG4gIC8qKlxuICAgKiBUaGUgdmlkZW8gZnJhbWUgcmF0ZS5cbiAgICogQGRlZmF1bHQgLSBmb2xsb3cgc291cmNlXG4gICAqL1xuICByZWFkb25seSBmcmFtZXJhdGU/OiBGcmFtZXJhdGU7XG4gIC8qKlxuICAgKiBUaW1lY29kZSBidXJuLWluIHNldHRpbmdzIHRvIG92ZXJsYXkgdGltZWNvZGUgb24gdGhlIHZpZGVvLlxuICAgKiBAZGVmYXVsdCAtIG5vIHRpbWVjb2RlIGJ1cm4taW5cbiAgICovXG4gIHJlYWRvbmx5IHRpbWVjb2RlQnVybmluPzogVGltZWNvZGVCdXJuaW5TZXR0aW5ncztcbiAgLyoqXG4gICAqIEFGRCBzaWduYWxpbmcgbW9kZS5cbiAgICogQGRlZmF1bHQgQWZkU2lnbmFsaW5nLk5PTkVcbiAgICovXG4gIHJlYWRvbmx5IGFmZFNpZ25hbGluZz86IEFmZFNpZ25hbGluZztcbiAgLyoqXG4gICAqIEJpdCBkZXB0aCBmb3IgdGhlIEFWMSBlbmNvZGUuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBiaXREZXB0aD86IEF2MUJpdERlcHRoO1xuICAvKipcbiAgICogU2l6ZSBvZiBidWZmZXIgKEhSRCBidWZmZXIgbW9kZWwpIGluIGJpdHMuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBidWZTaXplPzogbnVtYmVyO1xuICAvKipcbiAgICogQ29sb3Igc3BhY2Ugc2V0dGluZ3MgZm9yIHRoZSB2aWRlby5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGNvbG9yU3BhY2VTZXR0aW5ncz86IEF2MUNvbG9yU3BhY2VTZXR0aW5ncztcbiAgLyoqXG4gICAqIEZvdXItYml0IEFGRCB2YWx1ZSB0byB3cml0ZSBvbiBhbGwgZnJhbWVzLiBPbmx5IHZhbGlkIHdoZW4gYWZkU2lnbmFsaW5nIGlzIEZJWEVELlxuICAgKlxuICAgKiBWYWxpZCB2YWx1ZXM6IEZJWEVEXzAwMDAsIEZJWEVEXzAwMTAsIEZJWEVEXzAwMTEsIEZJWEVEXzAxMDAsIEZJWEVEXzEwMDAsXG4gICAqIEZJWEVEXzEwMDEsIEZJWEVEXzEwMTAsIEZJWEVEXzEwMTEsIEZJWEVEXzExMDAsIEZJWEVEXzExMDEsIEZJWEVEXzExMTAsIEZJWEVEXzExMTEuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBmaXhlZEFmZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBBVjEgbGV2ZWwuXG4gICAqXG4gICAqIFZhbGlkIHZhbHVlczogQVYxX0xFVkVMXzIsIEFWMV9MRVZFTF8yXzEsIEFWMV9MRVZFTF8zLCBBVjFfTEVWRUxfM18xLFxuICAgKiBBVjFfTEVWRUxfNCwgQVYxX0xFVkVMXzRfMSwgQVYxX0xFVkVMXzUsIEFWMV9MRVZFTF81XzEsIEFWMV9MRVZFTF81XzIsXG4gICAqIEFWMV9MRVZFTF81XzMsIEFWMV9MRVZFTF82LCBBVjFfTEVWRUxfNl8xLCBBVjFfTEVWRUxfNl8yLCBBVjFfTEVWRUxfNl8zLFxuICAgKiBBVjFfTEVWRUxfQVVUTy5cbiAgICpcbiAgICogQGRlZmF1bHQgQXYxTGV2ZWwuQVYxX0xFVkVMX0FVVE9cbiAgICovXG4gIHJlYWRvbmx5IGxldmVsPzogQXYxTGV2ZWw7XG4gIC8qKlxuICAgKiBBbW91bnQgb2YgbG9va2FoZWFkLiBMb3cgZGVjcmVhc2VzIGxhdGVuY3kvbWVtb3J5OyBoaWdoIGNhbiBwcm9kdWNlIGJldHRlciBxdWFsaXR5LlxuICAgKiBAZGVmYXVsdCBMb29rQWhlYWRSYXRlQ29udHJvbC5ISUdIXG4gICAqL1xuICByZWFkb25seSBsb29rQWhlYWRSYXRlQ29udHJvbD86IExvb2tBaGVhZFJhdGVDb250cm9sO1xuICAvKipcbiAgICogTWluaW11bSBiaXRyYXRlIGluIGJpdHMvc2Vjb25kLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgbWluQml0cmF0ZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIE9ubHkgbWVhbmluZ2Z1bCBpZiBzY2VuZUNoYW5nZURldGVjdCBpcyBlbmFibGVkLiBFbmZvcmNlcyBzZXBhcmF0aW9uIGJldHdlZW5cbiAgICogcmVwZWF0ZWQgKGNhZGVuY2UpIEktZnJhbWVzIGFuZCBJLWZyYW1lcyBpbnNlcnRlZCBieSBzY2VuZSBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgbWluSUludGVydmFsPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHBpeGVsIGFzcGVjdCByYXRpbyAoUEFSKSBvZiB0aGUgdmlkZW8uXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBwaXhlbEFzcGVjdFJhdGlvPzogUGl4ZWxBc3BlY3RSYXRpbztcbiAgLyoqXG4gICAqIFNjZW5lIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqIEBkZWZhdWx0IEF2MVNjZW5lQ2hhbmdlRGV0ZWN0LkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IHNjZW5lQ2hhbmdlRGV0ZWN0PzogQXYxU2NlbmVDaGFuZ2VEZXRlY3Q7XG4gIC8qKlxuICAgKiBTcGF0aWFsIGFkYXB0aXZlIHF1YW50aXphdGlvbi5cbiAgICogQGRlZmF1bHQgQXYxU3BhdGlhbEFxLkVOQUJMRURcbiAgICovXG4gIHJlYWRvbmx5IHNwYXRpYWxBcT86IEF2MVNwYXRpYWxBcTtcbiAgLyoqXG4gICAqIFRlbXBvcmFsIGFkYXB0aXZlIHF1YW50aXphdGlvbi5cbiAgICogQGRlZmF1bHQgQXYxVGVtcG9yYWxBcS5FTkFCTEVEXG4gICAqL1xuICByZWFkb25seSB0ZW1wb3JhbEFxPzogQXYxVGVtcG9yYWxBcTtcbiAgLyoqXG4gICAqIFRpbWVjb2RlIGluc2VydGlvbiBtb2RlLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZWNvZGVJbnNlcnRpb24/OiBBdjFUaW1lY29kZUluc2VydGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBmcmFtZSBjYXB0dXJlIGNvZGVjIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZyYW1lQ2FwdHVyZVNldHRpbmdzUHJvcHMge1xuICAvKipcbiAgICogVGhlIGludGVydmFsIGJldHdlZW4gZnJhbWUgY2FwdHVyZXMuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBjYXB0dXJlSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbiAgLyoqXG4gICAqIFRpbWVjb2RlIGJ1cm4taW4gc2V0dGluZ3MgdG8gb3ZlcmxheSB0aW1lY29kZSBvbiB0aGUgdmlkZW8uXG4gICAqIEBkZWZhdWx0IC0gbm8gdGltZWNvZGUgYnVybi1pblxuICAgKi9cbiAgcmVhZG9ubHkgdGltZWNvZGVCdXJuaW4/OiBUaW1lY29kZUJ1cm5pblNldHRpbmdzO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVmlkZW9Db2RlY1NldHRpbmdzIChhYnN0cmFjdCArIHN1YmNsYXNzZXMpXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIHZpZGVvIGNvZGVjLiBVc2VycyBzZWxlY3QgYSBjb2RlYyB2aWEgdGhlXG4gKiBgVmlkZW9Db2RlY1NldHRpbmdzYCBmYWN0b3J5IG1ldGhvZHMsIG5ldmVyIGJ5IHBhc3NpbmcgdGhpcyB0eXBlIGRpcmVjdGx5LlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBlbnVtIFZpZGVvQ29kZWNUeXBlIHtcbiAgLyoqIEguMjY0IChBVkMpICovXG4gIEgyNjQgPSAnSDI2NCcsXG4gIC8qKiBILjI2NSAoSEVWQykgKi9cbiAgSDI2NSA9ICdIMjY1JyxcbiAgLyoqIEFWMSAqL1xuICBBVjEgPSAnQVYxJyxcbiAgLyoqIEZyYW1lIENhcHR1cmUgKEpQRUcpICovXG4gIEZSQU1FX0NBUFRVUkUgPSAnRlJBTUVfQ0FQVFVSRScsXG59XG5cbi8qKlxuICogVmlkZW8gY29kZWMgc2V0dGluZ3MuIFVzZSB0aGUgc3RhdGljIGZhY3RvcnkgbWV0aG9kcyB0byBjcmVhdGUuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBWaWRlb0NvZGVjU2V0dGluZ3Mge1xuICAvKiogQ3JlYXRlIEguMjY0IChBVkMpIGNvZGVjIHNldHRpbmdzLiAqL1xuICBwdWJsaWMgc3RhdGljIGgyNjQocHJvcHM/OiBIMjY0U2V0dGluZ3NQcm9wcyk6IFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY0VmlkZW9Db2RlY1NldHRpbmdzKHByb3BzID8/IHt9KTtcbiAgfVxuICAvKiogQ3JlYXRlIEguMjY1IChIRVZDKSBjb2RlYyBzZXR0aW5ncy4gRnJhbWVyYXRlIGlzIHJlcXVpcmVkIGZvciBILjI2NS4gKi9cbiAgcHVibGljIHN0YXRpYyBoMjY1KHByb3BzOiBIMjY1U2V0dGluZ3NQcm9wcyk6IFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gICAgcmV0dXJuIG5ldyBIMjY1VmlkZW9Db2RlY1NldHRpbmdzKHByb3BzKTtcbiAgfVxuICAvKiogQ3JlYXRlIEFWMSBjb2RlYyBzZXR0aW5ncy4gKi9cbiAgcHVibGljIHN0YXRpYyBhdjEocHJvcHM/OiBBdjFTZXR0aW5nc1Byb3BzKTogVmlkZW9Db2RlY1NldHRpbmdzIHtcbiAgICByZXR1cm4gbmV3IEF2MVZpZGVvQ29kZWNTZXR0aW5ncyhwcm9wcyA/PyB7fSk7XG4gIH1cbiAgLyoqIENyZWF0ZSBmcmFtZSBjYXB0dXJlIGNvZGVjIHNldHRpbmdzLiAqL1xuICBwdWJsaWMgc3RhdGljIGZyYW1lQ2FwdHVyZShwcm9wcz86IEZyYW1lQ2FwdHVyZVNldHRpbmdzUHJvcHMpOiBWaWRlb0NvZGVjU2V0dGluZ3Mge1xuICAgIHJldHVybiBuZXcgRnJhbWVDYXB0dXJlVmlkZW9Db2RlY1NldHRpbmdzKHByb3BzID8/IHt9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IF9jb2RlY1R5cGU6IFZpZGVvQ29kZWNUeXBlO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfYmluZCgpOiBDZm5DaGFubmVsLlZpZGVvQ29kZWNTZXR0aW5nc1Byb3BlcnR5O1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfaGFzRXhwbGljaXRGcmFtZXJhdGUoKTogYm9vbGVhbjtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuY2xhc3MgSDI2NFZpZGVvQ29kZWNTZXR0aW5ncyBleHRlbmRzIFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gIHB1YmxpYyByZWFkb25seSBfY29kZWNUeXBlID0gVmlkZW9Db2RlY1R5cGUuSDI2NDtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogSDI2NFNldHRpbmdzUHJvcHMpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfaGFzRXhwbGljaXRGcmFtZXJhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZnJhbWVyYXRlICE9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoKTogQ2ZuQ2hhbm5lbC5WaWRlb0NvZGVjU2V0dGluZ3NQcm9wZXJ0eSB7XG4gICAgY29uc3QgcCA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcmMgPSBwLnJhdGVDb250cm9sO1xuICAgIHJldHVybiB7XG4gICAgICBoMjY0U2V0dGluZ3M6IHtcbiAgICAgICAgYml0cmF0ZTogcmM/Ll9iaXRyYXRlPy50b0JwcygpLFxuICAgICAgICBtYXhCaXRyYXRlOiByYz8uX21heEJpdHJhdGU/LnRvQnBzKCksXG4gICAgICAgIHJhdGVDb250cm9sTW9kZTogcmM/Ll9tb2RlLFxuICAgICAgICBxdmJyUXVhbGl0eUxldmVsOiByYz8uX3F2YnJRdWFsaXR5TGV2ZWwsXG4gICAgICAgIHByb2ZpbGU6IChwLnByb2ZpbGUgPz8gSDI2NFByb2ZpbGUuTUFJTikudmFsdWUsXG4gICAgICAgIGdvcFNpemU6IHAuZ29wU2l6ZT8uX3ZhbHVlID8/IDEsXG4gICAgICAgIGdvcFNpemVVbml0czogcC5nb3BTaXplPy5fdW5pdHMgPz8gJ1NFQ09ORFMnLFxuICAgICAgICBnb3BOdW1CRnJhbWVzOiBwLmdvcE51bUJGcmFtZXMsXG4gICAgICAgIGFkYXB0aXZlUXVhbnRpemF0aW9uOiAocC5hZGFwdGl2ZVF1YW50aXphdGlvbiA/PyBIMjY0QWRhcHRpdmVRdWFudGl6YXRpb24uQVVUTykudmFsdWUsXG4gICAgICAgIGZyYW1lcmF0ZUNvbnRyb2w6IHAuZnJhbWVyYXRlID8gJ1NQRUNJRklFRCcgOiAnSU5JVElBTElaRV9GUk9NX1NPVVJDRScsXG4gICAgICAgIGZyYW1lcmF0ZU51bWVyYXRvcjogcC5mcmFtZXJhdGU/Ll9udW1lcmF0b3IoKSxcbiAgICAgICAgZnJhbWVyYXRlRGVub21pbmF0b3I6IHAuZnJhbWVyYXRlPy5fZGVub21pbmF0b3IoKSxcbiAgICAgICAgcGFyQ29udHJvbDogKHAucGl4ZWxBc3BlY3RSYXRpbyB8fCBwLmZyYW1lcmF0ZSkgPyAnU1BFQ0lGSUVEJyA6ICdJTklUSUFMSVpFX0ZST01fU09VUkNFJyxcbiAgICAgICAgcGFyTnVtZXJhdG9yOiBwLnBpeGVsQXNwZWN0UmF0aW8/Ll9udW1lcmF0b3IoKSA/PyAocC5mcmFtZXJhdGUgPyBQaXhlbEFzcGVjdFJhdGlvLlNRVUFSRS5fbnVtZXJhdG9yKCkgOiB1bmRlZmluZWQpLFxuICAgICAgICBwYXJEZW5vbWluYXRvcjogcC5waXhlbEFzcGVjdFJhdGlvPy5fZGVub21pbmF0b3IoKSA/PyAocC5mcmFtZXJhdGUgPyBQaXhlbEFzcGVjdFJhdGlvLlNRVUFSRS5fZGVub21pbmF0b3IoKSA6IHVuZGVmaW5lZCksXG4gICAgICAgIHNjZW5lQ2hhbmdlRGV0ZWN0OiAocC5zY2VuZUNoYW5nZURldGVjdCA/PyBIMjY0U2NlbmVDaGFuZ2VEZXRlY3QuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIHNwYXRpYWxBcTogKHAuc3BhdGlhbEFxID8/IEgyNjRTcGF0aWFsQXEuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIHRlbXBvcmFsQXE6IChwLnRlbXBvcmFsQXEgPz8gSDI2NFRlbXBvcmFsQXEuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIHRpbWVjb2RlQnVybmluU2V0dGluZ3M6IHAudGltZWNvZGVCdXJuaW4gPyB7XG4gICAgICAgICAgZm9udFNpemU6IHAudGltZWNvZGVCdXJuaW4uZm9udFNpemU/LnZhbHVlLFxuICAgICAgICAgIHBvc2l0aW9uOiBwLnRpbWVjb2RlQnVybmluLnBvc2l0aW9uPy52YWx1ZSxcbiAgICAgICAgICBwcmVmaXg6IHAudGltZWNvZGVCdXJuaW4ucHJlZml4LFxuICAgICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgICBhZmRTaWduYWxpbmc6IChwLmFmZFNpZ25hbGluZyA/PyBBZmRTaWduYWxpbmcuTk9ORSkudmFsdWUsXG4gICAgICAgIGJ1ZkZpbGxQY3Q6IHAuYnVmRmlsbFBjdCxcbiAgICAgICAgYnVmU2l6ZTogcC5idWZTaXplLFxuICAgICAgICBjb2xvck1ldGFkYXRhOiBwLmNvbG9yTWV0YWRhdGE/LnZhbHVlLFxuICAgICAgICBjb2xvclNwYWNlU2V0dGluZ3M6IHAuY29sb3JTcGFjZVNldHRpbmdzPy5fYmluZCgpLFxuICAgICAgICBlbnRyb3B5RW5jb2Rpbmc6IHAuZW50cm9weUVuY29kaW5nPy52YWx1ZSxcbiAgICAgICAgZmlsdGVyU2V0dGluZ3M6IHAuZmlsdGVyU2V0dGluZ3M/Ll9iaW5kKCksXG4gICAgICAgIGZpeGVkQWZkOiBwLmZpeGVkQWZkLFxuICAgICAgICBmbGlja2VyQXE6IChwLmZsaWNrZXJBcSA/PyBGbGlja2VyQXEuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIGZvcmNlRmllbGRQaWN0dXJlczogcC5mb3JjZUZpZWxkUGljdHVyZXM/LnZhbHVlLFxuICAgICAgICBnb3BCUmVmZXJlbmNlOiBwLmdvcEJSZWZlcmVuY2U/LnZhbHVlLFxuICAgICAgICBnb3BDbG9zZWRDYWRlbmNlOiBwLmdvcENsb3NlZENhZGVuY2UsXG4gICAgICAgIGxldmVsOiAocC5sZXZlbCA/PyBIMjY0TGV2ZWwuSDI2NF9MRVZFTF9BVVRPKS52YWx1ZSxcbiAgICAgICAgbG9va0FoZWFkUmF0ZUNvbnRyb2w6IChwLmxvb2tBaGVhZFJhdGVDb250cm9sID8/IExvb2tBaGVhZFJhdGVDb250cm9sLkhJR0gpLnZhbHVlLFxuICAgICAgICBtaW5JSW50ZXJ2YWw6IHAubWluSUludGVydmFsLFxuICAgICAgICBudW1SZWZGcmFtZXM6IHAubnVtUmVmRnJhbWVzLFxuICAgICAgICBzY2FuVHlwZTogKHAuc2NhblR5cGUgPz8gU2NhblR5cGUuUFJPR1JFU1NJVkUpLnZhbHVlLFxuICAgICAgICBzbGljZXM6IHAuc2xpY2VzLFxuICAgICAgICBzb2Z0bmVzczogcC5zb2Z0bmVzcyxcbiAgICAgICAgc3ludGF4OiAocC5zeW50YXggPz8gSDI2NFN5bnRheC5ERUZBVUxUKS52YWx1ZSxcbiAgICAgICAgdGltZWNvZGVJbnNlcnRpb246IHAudGltZWNvZGVJbnNlcnRpb24/LnZhbHVlLFxuICAgICAgICBtaW5RcDogcC5taW5RcCxcbiAgICAgICAgbWluQml0cmF0ZTogcC5taW5CaXRyYXRlLFxuICAgICAgICBxdWFsaXR5TGV2ZWw6IHAucXVhbGl0eUxldmVsPy52YWx1ZSxcbiAgICAgICAgc3ViZ29wTGVuZ3RoOiBwLnN1YmdvcExlbmd0aD8udmFsdWUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuY2xhc3MgSDI2NVZpZGVvQ29kZWNTZXR0aW5ncyBleHRlbmRzIFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gIHB1YmxpYyByZWFkb25seSBfY29kZWNUeXBlID0gVmlkZW9Db2RlY1R5cGUuSDI2NTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogSDI2NVNldHRpbmdzUHJvcHMpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBfaGFzRXhwbGljaXRGcmFtZXJhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuZnJhbWVyYXRlICE9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgX2JpbmQoKTogQ2ZuQ2hhbm5lbC5WaWRlb0NvZGVjU2V0dGluZ3NQcm9wZXJ0eSB7XG4gICAgY29uc3QgcCA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgcmMgPSBwLnJhdGVDb250cm9sO1xuICAgIHJldHVybiB7XG4gICAgICBoMjY1U2V0dGluZ3M6IHtcbiAgICAgICAgYml0cmF0ZTogcmM/Ll9iaXRyYXRlPy50b0JwcygpLFxuICAgICAgICBtYXhCaXRyYXRlOiByYz8uX21heEJpdHJhdGU/LnRvQnBzKCksXG4gICAgICAgIHJhdGVDb250cm9sTW9kZTogcmM/Ll9tb2RlLFxuICAgICAgICBxdmJyUXVhbGl0eUxldmVsOiByYz8uX3F2YnJRdWFsaXR5TGV2ZWwsXG4gICAgICAgIHByb2ZpbGU6IChwLnByb2ZpbGUgPz8gSDI2NVByb2ZpbGUuTUFJTikudmFsdWUsXG4gICAgICAgIHRpZXI6IChwLnRpZXIgPz8gSDI2NVRpZXIuTUFJTikudmFsdWUsXG4gICAgICAgIGxldmVsOiBwLmxldmVsPy52YWx1ZSxcbiAgICAgICAgZ29wU2l6ZTogcC5nb3BTaXplPy5fdmFsdWUgPz8gMSxcbiAgICAgICAgZ29wU2l6ZVVuaXRzOiBwLmdvcFNpemU/Ll91bml0cyA/PyAnU0VDT05EUycsXG4gICAgICAgIGZyYW1lcmF0ZU51bWVyYXRvcjogcC5mcmFtZXJhdGUuX251bWVyYXRvcigpLFxuICAgICAgICBmcmFtZXJhdGVEZW5vbWluYXRvcjogcC5mcmFtZXJhdGUuX2Rlbm9taW5hdG9yKCksXG4gICAgICAgIHBhck51bWVyYXRvcjogcC5waXhlbEFzcGVjdFJhdGlvPy5fbnVtZXJhdG9yKCkgPz8gUGl4ZWxBc3BlY3RSYXRpby5TUVVBUkUuX251bWVyYXRvcigpLFxuICAgICAgICBwYXJEZW5vbWluYXRvcjogcC5waXhlbEFzcGVjdFJhdGlvPy5fZGVub21pbmF0b3IoKSA/PyBQaXhlbEFzcGVjdFJhdGlvLlNRVUFSRS5fZGVub21pbmF0b3IoKSxcbiAgICAgICAgc2NlbmVDaGFuZ2VEZXRlY3Q6IChwLnNjZW5lQ2hhbmdlRGV0ZWN0ID8/IEgyNjVTY2VuZUNoYW5nZURldGVjdC5FTkFCTEVEKS52YWx1ZSxcbiAgICAgICAgdGltZWNvZGVCdXJuaW5TZXR0aW5nczogcC50aW1lY29kZUJ1cm5pbiA/IHtcbiAgICAgICAgICBmb250U2l6ZTogcC50aW1lY29kZUJ1cm5pbi5mb250U2l6ZT8udmFsdWUsXG4gICAgICAgICAgcG9zaXRpb246IHAudGltZWNvZGVCdXJuaW4ucG9zaXRpb24/LnZhbHVlLFxuICAgICAgICAgIHByZWZpeDogcC50aW1lY29kZUJ1cm5pbi5wcmVmaXgsXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIGFkYXB0aXZlUXVhbnRpemF0aW9uOiAocC5hZGFwdGl2ZVF1YW50aXphdGlvbiA/PyBIMjY1QWRhcHRpdmVRdWFudGl6YXRpb24uQVVUTykudmFsdWUsXG4gICAgICAgIGFmZFNpZ25hbGluZzogKHAuYWZkU2lnbmFsaW5nID8/IEFmZFNpZ25hbGluZy5OT05FKS52YWx1ZSxcbiAgICAgICAgYWx0ZXJuYXRpdmVUcmFuc2ZlckZ1bmN0aW9uOiBwLmFsdGVybmF0aXZlVHJhbnNmZXJGdW5jdGlvbj8udmFsdWUsXG4gICAgICAgIGJ1ZlNpemU6IHAuYnVmU2l6ZSxcbiAgICAgICAgY29sb3JNZXRhZGF0YTogcC5jb2xvck1ldGFkYXRhPy52YWx1ZSxcbiAgICAgICAgY29sb3JTcGFjZVNldHRpbmdzOiBwLmNvbG9yU3BhY2VTZXR0aW5ncz8uX2JpbmQoKSxcbiAgICAgICAgZGVibG9ja2luZzogcC5kZWJsb2NraW5nPy52YWx1ZSxcbiAgICAgICAgZmlsdGVyU2V0dGluZ3M6IHAuZmlsdGVyU2V0dGluZ3M/Ll9iaW5kKCksXG4gICAgICAgIGZpeGVkQWZkOiBwLmZpeGVkQWZkLFxuICAgICAgICBmbGlja2VyQXE6IHAuZmxpY2tlckFxPy52YWx1ZSxcbiAgICAgICAgZ29wQlJlZmVyZW5jZTogcC5nb3BCUmVmZXJlbmNlPy52YWx1ZSxcbiAgICAgICAgZ29wQ2xvc2VkQ2FkZW5jZTogcC5nb3BDbG9zZWRDYWRlbmNlLFxuICAgICAgICBnb3BOdW1CRnJhbWVzOiBwLmdvcE51bUJGcmFtZXMsXG4gICAgICAgIGxvb2tBaGVhZFJhdGVDb250cm9sOiBwLmxvb2tBaGVhZFJhdGVDb250cm9sPy52YWx1ZSxcbiAgICAgICAgbWluSUludGVydmFsOiBwLm1pbklJbnRlcnZhbCxcbiAgICAgICAgc2NhblR5cGU6IChwLnNjYW5UeXBlID8/IFNjYW5UeXBlLlBST0dSRVNTSVZFKS52YWx1ZSxcbiAgICAgICAgc2xpY2VzOiBwLnNsaWNlcyxcbiAgICAgICAgdGltZWNvZGVJbnNlcnRpb246IHAudGltZWNvZGVJbnNlcnRpb24/LnZhbHVlLFxuICAgICAgICBtaW5RcDogcC5taW5RcCxcbiAgICAgICAgbWluQml0cmF0ZTogcC5taW5CaXRyYXRlLFxuICAgICAgICBtdk92ZXJQaWN0dXJlQm91bmRhcmllczogcC5tdk92ZXJQaWN0dXJlQm91bmRhcmllcz8udmFsdWUsXG4gICAgICAgIG12VGVtcG9yYWxQcmVkaWN0b3I6IHAubXZUZW1wb3JhbFByZWRpY3Rvcj8udmFsdWUsXG4gICAgICAgIHN1YmdvcExlbmd0aDogcC5zdWJnb3BMZW5ndGg/LnZhbHVlLFxuICAgICAgICB0aWxlSGVpZ2h0OiBwLnRpbGVIZWlnaHQsXG4gICAgICAgIHRpbGVQYWRkaW5nOiBwLnRpbGVQYWRkaW5nPy52YWx1ZSxcbiAgICAgICAgdGlsZVdpZHRoOiBwLnRpbGVXaWR0aCxcbiAgICAgICAgdHJlZWJsb2NrU2l6ZTogcC50cmVlYmxvY2tTaXplPy52YWx1ZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG4vKiogQGludGVybmFsICovXG5jbGFzcyBBdjFWaWRlb0NvZGVjU2V0dGluZ3MgZXh0ZW5kcyBWaWRlb0NvZGVjU2V0dGluZ3Mge1xuICBwdWJsaWMgcmVhZG9ubHkgX2NvZGVjVHlwZSA9IFZpZGVvQ29kZWNUeXBlLkFWMTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogQXYxU2V0dGluZ3NQcm9wcykgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9oYXNFeHBsaWNpdEZyYW1lcmF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5mcmFtZXJhdGUgIT0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZCgpOiBDZm5DaGFubmVsLlZpZGVvQ29kZWNTZXR0aW5nc1Byb3BlcnR5IHtcbiAgICBjb25zdCBwID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCByYyA9IHAucmF0ZUNvbnRyb2w7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF2MVNldHRpbmdzOiB7XG4gICAgICAgIGJpdHJhdGU6IHJjPy5fYml0cmF0ZT8udG9CcHMoKSxcbiAgICAgICAgbWF4Qml0cmF0ZTogcmM/Ll9tYXhCaXRyYXRlPy50b0JwcygpLFxuICAgICAgICByYXRlQ29udHJvbE1vZGU6IHJjPy5fbW9kZSxcbiAgICAgICAgcXZiclF1YWxpdHlMZXZlbDogcmM/Ll9xdmJyUXVhbGl0eUxldmVsLFxuICAgICAgICBnb3BTaXplOiBwLmdvcFNpemU/Ll92YWx1ZSA/PyAxLFxuICAgICAgICBnb3BTaXplVW5pdHM6IHAuZ29wU2l6ZT8uX3VuaXRzID8/ICdTRUNPTkRTJyxcbiAgICAgICAgZnJhbWVyYXRlTnVtZXJhdG9yOiBwLmZyYW1lcmF0ZT8uX251bWVyYXRvcigpLFxuICAgICAgICBmcmFtZXJhdGVEZW5vbWluYXRvcjogcC5mcmFtZXJhdGU/Ll9kZW5vbWluYXRvcigpLFxuICAgICAgICB0aW1lY29kZUJ1cm5pblNldHRpbmdzOiBwLnRpbWVjb2RlQnVybmluID8ge1xuICAgICAgICAgIGZvbnRTaXplOiBwLnRpbWVjb2RlQnVybmluLmZvbnRTaXplPy52YWx1ZSxcbiAgICAgICAgICBwb3NpdGlvbjogcC50aW1lY29kZUJ1cm5pbi5wb3NpdGlvbj8udmFsdWUsXG4gICAgICAgICAgcHJlZml4OiBwLnRpbWVjb2RlQnVybmluLnByZWZpeCxcbiAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgYWZkU2lnbmFsaW5nOiAocC5hZmRTaWduYWxpbmcgPz8gQWZkU2lnbmFsaW5nLk5PTkUpLnZhbHVlLFxuICAgICAgICBiaXREZXB0aDogcC5iaXREZXB0aD8udmFsdWUsXG4gICAgICAgIGJ1ZlNpemU6IHAuYnVmU2l6ZSxcbiAgICAgICAgY29sb3JTcGFjZVNldHRpbmdzOiBwLmNvbG9yU3BhY2VTZXR0aW5ncz8uX2JpbmQoKSxcbiAgICAgICAgZml4ZWRBZmQ6IHAuZml4ZWRBZmQsXG4gICAgICAgIGxldmVsOiAocC5sZXZlbCA/PyBBdjFMZXZlbC5BVjFfTEVWRUxfQVVUTykudmFsdWUsXG4gICAgICAgIG1pbkJpdHJhdGU6IHAubWluQml0cmF0ZSxcbiAgICAgICAgbWluSUludGVydmFsOiBwLm1pbklJbnRlcnZhbCxcbiAgICAgICAgcGFyTnVtZXJhdG9yOiBwLnBpeGVsQXNwZWN0UmF0aW8/Ll9udW1lcmF0b3IoKSxcbiAgICAgICAgcGFyRGVub21pbmF0b3I6IHAucGl4ZWxBc3BlY3RSYXRpbz8uX2Rlbm9taW5hdG9yKCksXG4gICAgICAgIHNjZW5lQ2hhbmdlRGV0ZWN0OiAocC5zY2VuZUNoYW5nZURldGVjdCA/PyBBdjFTY2VuZUNoYW5nZURldGVjdC5FTkFCTEVEKS52YWx1ZSxcbiAgICAgICAgc3BhdGlhbEFxOiAocC5zcGF0aWFsQXEgPz8gQXYxU3BhdGlhbEFxLkVOQUJMRUQpLnZhbHVlLFxuICAgICAgICB0ZW1wb3JhbEFxOiAocC50ZW1wb3JhbEFxID8/IEF2MVRlbXBvcmFsQXEuRU5BQkxFRCkudmFsdWUsXG4gICAgICAgIGxvb2tBaGVhZFJhdGVDb250cm9sOiAocC5sb29rQWhlYWRSYXRlQ29udHJvbCA/PyBMb29rQWhlYWRSYXRlQ29udHJvbC5ISUdIKS52YWx1ZSxcbiAgICAgICAgdGltZWNvZGVJbnNlcnRpb246IHAudGltZWNvZGVJbnNlcnRpb24/LnZhbHVlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmNsYXNzIEZyYW1lQ2FwdHVyZVZpZGVvQ29kZWNTZXR0aW5ncyBleHRlbmRzIFZpZGVvQ29kZWNTZXR0aW5ncyB7XG4gIHB1YmxpYyByZWFkb25seSBfY29kZWNUeXBlID0gVmlkZW9Db2RlY1R5cGUuRlJBTUVfQ0FQVFVSRTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBwcm9wczogRnJhbWVDYXB0dXJlU2V0dGluZ3NQcm9wcykgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIF9oYXNFeHBsaWNpdEZyYW1lcmF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRydWU7IH1cblxuICBwdWJsaWMgX2JpbmQoKTogQ2ZuQ2hhbm5lbC5WaWRlb0NvZGVjU2V0dGluZ3NQcm9wZXJ0eSB7XG4gICAgY29uc3QgcCA9IHRoaXMucHJvcHM7XG4gICAgLy8gT25seSBlbWl0IGFuIGludGVydmFsIHdoZW4gc2V0LiBXaG9sZS1zZWNvbmQgRHVyYXRpb25zIHJlbmRlciBhcyBTRUNPTkRTLCBzdWItc2Vjb25kIGFzIE1JTExJU0VDT05EUy5cbiAgICBjb25zdCBpbnRlcnZhbE1zID0gcC5jYXB0dXJlSW50ZXJ2YWw/LnRvTWlsbGlzZWNvbmRzKCk7XG4gICAgY29uc3Qgd2hvbGVTZWNvbmRzID0gaW50ZXJ2YWxNcyAhPT0gdW5kZWZpbmVkICYmIGludGVydmFsTXMgJSAxMDAwID09PSAwO1xuICAgIHJldHVybiB7XG4gICAgICBmcmFtZUNhcHR1cmVTZXR0aW5nczoge1xuICAgICAgICBjYXB0dXJlSW50ZXJ2YWw6IGludGVydmFsTXMgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICh3aG9sZVNlY29uZHMgPyBpbnRlcnZhbE1zIC8gMTAwMCA6IGludGVydmFsTXMpLFxuICAgICAgICBjYXB0dXJlSW50ZXJ2YWxVbml0czogaW50ZXJ2YWxNcyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogKHdob2xlU2Vjb25kcyA/ICdTRUNPTkRTJyA6ICdNSUxMSVNFQ09ORFMnKSxcbiAgICAgICAgdGltZWNvZGVCdXJuaW5TZXR0aW5nczogcC50aW1lY29kZUJ1cm5pbiA/IHtcbiAgICAgICAgICBmb250U2l6ZTogcC50aW1lY29kZUJ1cm5pbi5mb250U2l6ZT8udmFsdWUsXG4gICAgICAgICAgcG9zaXRpb246IHAudGltZWNvZGVCdXJuaW4ucG9zaXRpb24/LnZhbHVlLFxuICAgICAgICAgIHByZWZpeDogcC50aW1lY29kZUJ1cm5pbi5wcmVmaXgsXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuIl19
|