@rivet-health/design-system 38.0.0 → 39.0.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.
@@ -0,0 +1,323 @@
1
+ import { Chart } from './chart';
2
+ export const emptyChartScaleValues = {
3
+ barSize: 0,
4
+ barClusterGap: 0,
5
+ bucketGap: 0,
6
+ outerGap: 0,
7
+ leftPadding: 0,
8
+ rightPadding: 0,
9
+ topPadding: 0,
10
+ bottomPadding: 0,
11
+ leftBucketLabel: 0,
12
+ dataLabelPadding: 0,
13
+ fontSize: 0,
14
+ totalWidth: 0,
15
+ totalHeight: 0,
16
+ sizeForData: 0,
17
+ totalLeftOffset: 0,
18
+ totalRightOffset: 0,
19
+ totalTopOffset: 0,
20
+ totalBottomOffset: 0,
21
+ dataLabelTextSize: 0,
22
+ horizontalAxisLabelTextSize: 0,
23
+ verticalAxisLabelTextSize: 0,
24
+ targetTickCount: 0,
25
+ chartDataDirection: 'vertical',
26
+ horizontalContainerScale: 'no-scale',
27
+ verticalContainerScale: 'no-scale',
28
+ };
29
+ export const DefaultBarElementScalingConfig = {
30
+ barSize: {
31
+ min: 8,
32
+ max: 80,
33
+ target: 30,
34
+ },
35
+ barClusterGap: {
36
+ min: 8,
37
+ max: 8,
38
+ target: 8,
39
+ },
40
+ bucketGap: {
41
+ min: 8,
42
+ target: 40,
43
+ },
44
+ outerGap: {
45
+ min: 0,
46
+ target: 16,
47
+ },
48
+ leftPadding: {
49
+ min: 48,
50
+ max: 48,
51
+ target: 48,
52
+ },
53
+ rightPadding: {
54
+ min: 8,
55
+ max: 48,
56
+ target: 48,
57
+ },
58
+ topPadding: {
59
+ min: 16,
60
+ max: 16,
61
+ target: 16,
62
+ },
63
+ bottomPadding: {
64
+ min: 20,
65
+ max: 20,
66
+ target: 20,
67
+ },
68
+ dataLabelPadding: {
69
+ min: 8,
70
+ max: 8,
71
+ target: 8,
72
+ },
73
+ fontSize: {
74
+ min: 12,
75
+ max: 12,
76
+ target: 12,
77
+ },
78
+ leftBucketLabel: {
79
+ target: 0, //Not applicable
80
+ },
81
+ };
82
+ export const DefaultBarWithSecondaryElementScalingConfig = {
83
+ ...DefaultBarElementScalingConfig,
84
+ rightPadding: {
85
+ min: 48,
86
+ max: 48,
87
+ target: 48,
88
+ },
89
+ };
90
+ export const DefaultHorizontalBarElementScalingConfig = {
91
+ barSize: {
92
+ min: 8,
93
+ max: 8,
94
+ target: 8,
95
+ },
96
+ barClusterGap: {
97
+ min: 4,
98
+ max: 8,
99
+ target: 8,
100
+ },
101
+ bucketGap: {
102
+ min: 8,
103
+ target: 16,
104
+ },
105
+ outerGap: {
106
+ min: 0,
107
+ target: 8,
108
+ },
109
+ leftPadding: {
110
+ min: 8,
111
+ max: 8,
112
+ target: 8,
113
+ },
114
+ rightPadding: {
115
+ min: 8,
116
+ max: 48,
117
+ target: 48,
118
+ },
119
+ topPadding: {
120
+ min: 16,
121
+ max: 16,
122
+ target: 16,
123
+ },
124
+ bottomPadding: {
125
+ min: 0,
126
+ max: 20,
127
+ target: 0,
128
+ },
129
+ leftBucketLabel: {
130
+ min: 8,
131
+ max: 192,
132
+ target: 68, //Size used for timeseries buckets
133
+ },
134
+ dataLabelPadding: {
135
+ min: 8,
136
+ max: 8,
137
+ target: 8,
138
+ },
139
+ fontSize: {
140
+ min: 12,
141
+ max: 12,
142
+ target: 12,
143
+ },
144
+ };
145
+ export const DefaultHorizontalBarWithSecondaryElementScalingConfig = {
146
+ ...DefaultHorizontalBarElementScalingConfig,
147
+ bottomPadding: {
148
+ min: 20,
149
+ max: 20,
150
+ target: 20,
151
+ },
152
+ };
153
+ export const DefaultLineElementScalingConfig = {
154
+ bucketGap: {
155
+ min: 8,
156
+ target: 32,
157
+ },
158
+ outerGap: {
159
+ target: 1,
160
+ },
161
+ leftPadding: {
162
+ min: 48,
163
+ max: 48,
164
+ target: 48,
165
+ },
166
+ rightPadding: {
167
+ min: 8,
168
+ max: 48,
169
+ target: 48,
170
+ },
171
+ topPadding: {
172
+ min: 16,
173
+ max: 16,
174
+ target: 16,
175
+ },
176
+ bottomPadding: {
177
+ min: 20,
178
+ max: 20,
179
+ target: 20,
180
+ },
181
+ dataLabelPadding: {
182
+ min: 8,
183
+ max: 8,
184
+ target: 8,
185
+ },
186
+ fontSize: {
187
+ min: 12,
188
+ max: 12,
189
+ target: 12,
190
+ },
191
+ barSize: {
192
+ target: 0, //Not applicable
193
+ },
194
+ barClusterGap: {
195
+ target: 0, //Not applicable
196
+ },
197
+ leftBucketLabel: {
198
+ target: 0, //Not applicable
199
+ },
200
+ };
201
+ export const DefaultLineWithSecondaryElementScalingConfig = {
202
+ ...DefaultLineElementScalingConfig,
203
+ rightPadding: {
204
+ min: 48,
205
+ max: 48,
206
+ target: 48,
207
+ },
208
+ };
209
+ //For bar, line, area, waterfall and funnel charts
210
+ export const DefaultVerticalNonElementScalingConfig = {
211
+ dataScale: { type: 'fit' },
212
+ horizontalAxisScale: 'grow',
213
+ verticalAxisScale: 'scale-to-fit',
214
+ horizontalContainerScale: 'shrink',
215
+ verticalContainerScale: 'shrink',
216
+ targetTickCount: 5,
217
+ };
218
+ //For horizontal bar charts
219
+ export const DefaultHorizontalNonElementScalingConfig = {
220
+ dataScale: { type: 'fit' },
221
+ horizontalAxisScale: 'scale-to-fit',
222
+ verticalAxisScale: 'grow',
223
+ horizontalContainerScale: 'shrink',
224
+ verticalContainerScale: 'shrink',
225
+ targetTickCount: 5,
226
+ };
227
+ export function getDefaultScalingConfigByChartType(type, hasSecondary) {
228
+ if (type === 'horizontal-bar') {
229
+ if (hasSecondary) {
230
+ return {
231
+ elementScales: DefaultHorizontalBarWithSecondaryElementScalingConfig,
232
+ nonElementScales: DefaultHorizontalNonElementScalingConfig,
233
+ };
234
+ }
235
+ return {
236
+ elementScales: DefaultHorizontalBarElementScalingConfig,
237
+ nonElementScales: DefaultHorizontalNonElementScalingConfig,
238
+ };
239
+ }
240
+ if (Chart.isBarType(type)) {
241
+ if (hasSecondary) {
242
+ return {
243
+ elementScales: DefaultBarWithSecondaryElementScalingConfig,
244
+ nonElementScales: DefaultVerticalNonElementScalingConfig,
245
+ };
246
+ }
247
+ return {
248
+ elementScales: DefaultBarElementScalingConfig,
249
+ nonElementScales: DefaultVerticalNonElementScalingConfig,
250
+ };
251
+ }
252
+ if (type === 'line' || type === 'area') {
253
+ if (hasSecondary) {
254
+ return {
255
+ elementScales: DefaultLineWithSecondaryElementScalingConfig,
256
+ nonElementScales: DefaultVerticalNonElementScalingConfig,
257
+ };
258
+ }
259
+ return {
260
+ elementScales: DefaultLineElementScalingConfig,
261
+ nonElementScales: DefaultVerticalNonElementScalingConfig,
262
+ };
263
+ }
264
+ return {
265
+ elementScales: DefaultBarElementScalingConfig,
266
+ nonElementScales: DefaultVerticalNonElementScalingConfig,
267
+ };
268
+ }
269
+ export const DefaultDonutElementScalingConfig = {
270
+ dataLabelPadding: {
271
+ min: 16,
272
+ max: 16,
273
+ target: 16,
274
+ },
275
+ fontSize: {
276
+ min: 12,
277
+ max: 12,
278
+ target: 12,
279
+ },
280
+ bucketGap: {
281
+ target: 0, //Not applicable
282
+ },
283
+ outerGap: {
284
+ target: 0, //Not applicable
285
+ },
286
+ leftPadding: {
287
+ target: 0, //Not applicable
288
+ },
289
+ rightPadding: {
290
+ target: 0, //Not applicable
291
+ },
292
+ topPadding: {
293
+ target: 0, //Not applicable
294
+ },
295
+ bottomPadding: {
296
+ target: 0, //Not applicable
297
+ },
298
+ barSize: {
299
+ target: 0, //Not applicable
300
+ },
301
+ barClusterGap: {
302
+ target: 0, //Not applicable
303
+ },
304
+ leftBucketLabel: {
305
+ target: 0, //Not applicable
306
+ },
307
+ };
308
+ export const DEFAULT_OUTER_RADIUS_CONFIG = {
309
+ type: 'proportion',
310
+ value: 0.75,
311
+ };
312
+ export const DEFAULT_DRAW_RADIUS_CONFIG = {
313
+ type: 'absolute',
314
+ value: 12,
315
+ };
316
+ export const DefaultDonutSizingConfig = {
317
+ outerRadius: DEFAULT_OUTER_RADIUS_CONFIG,
318
+ drawRadius: DEFAULT_DRAW_RADIUS_CONFIG,
319
+ elementScales: DefaultDonutElementScalingConfig,
320
+ horizontalContainerScale: 'no-scale',
321
+ verticalContainerScale: 'no-scale',
322
+ };
323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtc2NhbGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Jpdi9zcmMvbGliL3Zpc3VhbGl6YXRpb24vY2hhcnQvY2hhcnQtc2NhbGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBeUNoQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBeUI7SUFDekQsT0FBTyxFQUFFLENBQUM7SUFDVixhQUFhLEVBQUUsQ0FBQztJQUNoQixTQUFTLEVBQUUsQ0FBQztJQUNaLFFBQVEsRUFBRSxDQUFDO0lBQ1gsV0FBVyxFQUFFLENBQUM7SUFDZCxZQUFZLEVBQUUsQ0FBQztJQUNmLFVBQVUsRUFBRSxDQUFDO0lBQ2IsYUFBYSxFQUFFLENBQUM7SUFDaEIsZUFBZSxFQUFFLENBQUM7SUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQixRQUFRLEVBQUUsQ0FBQztJQUNYLFVBQVUsRUFBRSxDQUFDO0lBQ2IsV0FBVyxFQUFFLENBQUM7SUFDZCxXQUFXLEVBQUUsQ0FBQztJQUNkLGVBQWUsRUFBRSxDQUFDO0lBQ2xCLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsY0FBYyxFQUFFLENBQUM7SUFDakIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLDJCQUEyQixFQUFFLENBQUM7SUFDOUIseUJBQXlCLEVBQUUsQ0FBQztJQUM1QixlQUFlLEVBQUUsQ0FBQztJQUNsQixrQkFBa0IsRUFBRSxVQUFVO0lBQzlCLHdCQUF3QixFQUFFLFVBQVU7SUFDcEMsc0JBQXNCLEVBQUUsVUFBVTtDQUNuQyxDQUFDO0FBbUVGLE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUE2QjtJQUN0RSxPQUFPLEVBQUU7UUFDUCxHQUFHLEVBQUUsQ0FBQztRQUNOLEdBQUcsRUFBRSxFQUFFO1FBQ1AsTUFBTSxFQUFFLEVBQUU7S0FD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O0lBQ0QsYUFBYSxFQUFFO1FBQ2IsTUFBTSxFQUFFLENBQUMsRUFBRSxnQkFBZ0I7S0FDNUI7SUFDRCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQjtLQUM1QjtJQUNELGFBQWEsRUFBRTtRQUNiLE1BQU0sRUFBRSxDQUFDLEVBQUUsZ0JBQWdCO0tBQzVCO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsTUFBTSxFQUFFLENBQUMsRUFBRSxnQkFBZ0I7S0FDNUI7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQWlCO0lBQ3ZELElBQUksRUFBRSxZQUFZO0lBQ2xCLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFpQjtJQUN0RCxJQUFJLEVBQUUsVUFBVTtJQUNoQixLQUFLLEVBQUUsRUFBRTtDQUNWLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0QyxXQUFXLEVBQUUsMkJBQTJCO0lBQ3hDLFVBQVUsRUFBRSwwQkFBMEI7SUFDdEMsYUFBYSxFQUFFLGdDQUFnQztJQUMvQyx3QkFBd0IsRUFBRSxVQUFrQztJQUM1RCxzQkFBc0IsRUFBRSxVQUFrQztDQUMzRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhcnQgfSBmcm9tICcuL2NoYXJ0JztcblxuZXhwb3J0IHR5cGUgQ2hhcnRTY2FsZUVsZW1lbnQgPVxuICB8ICdiYXJTaXplJ1xuICB8ICdiYXJDbHVzdGVyR2FwJ1xuICB8ICdidWNrZXRHYXAnXG4gIHwgJ291dGVyR2FwJ1xuICB8ICdsZWZ0UGFkZGluZydcbiAgfCAncmlnaHRQYWRkaW5nJ1xuICB8ICd0b3BQYWRkaW5nJ1xuICB8ICdib3R0b21QYWRkaW5nJ1xuICB8ICdsZWZ0QnVja2V0TGFiZWwnXG4gIHwgJ2RhdGFMYWJlbFBhZGRpbmcnXG4gIHwgJ2ZvbnRTaXplJztcblxuZXhwb3J0IHR5cGUgQ2hhcnRTY2FsZVZhbHVlcyA9IHtcbiAgW0sgaW4gQ2hhcnRTY2FsZUVsZW1lbnRdOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBDaGFydERhdGFEaXJlY3Rpb24gPVxuICB8ICd2ZXJ0aWNhbCcgLy9BbGwgY2hhcnRzIGJ1dCBob3Jpem9udGFsLWJhclxuICB8ICdob3Jpem9udGFsJzsgLy9DdXJyZW50bHkganVzdCBob3Jpem9udGFsLWJhclxuXG5leHBvcnQgdHlwZSBGdWxsQ2hhcnRTY2FsZVZhbHVlcyA9IENoYXJ0U2NhbGVWYWx1ZXMgJiB7XG4gIC8vVmFyaW91cyBoZWxwZnVsIHByZS1jYWxjZWQgdmFsdWVzXG4gIHRvdGFsV2lkdGg6IG51bWJlcjtcbiAgdG90YWxIZWlnaHQ6IG51bWJlcjtcbiAgc2l6ZUZvckRhdGE6IG51bWJlcjtcbiAgdG90YWxMZWZ0T2Zmc2V0OiBudW1iZXI7IC8vVG90YWwgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGVmdCBlZGdlIG9mIHRoZSBjaGFydCwgYW5kIHdoZW4gd2Ugc3RhcnQgZHJhd2luZyBkYXRhXG4gIHRvdGFsUmlnaHRPZmZzZXQ6IG51bWJlcjsgLy9Ub3RhbCBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBlbmQgb2YgZHJhd24gZGF0YSwgYW5kIHRoZSByaWdodCBlZGdlIG9mIHRoZSBjaGFydFxuICB0b3RhbFRvcE9mZnNldDogbnVtYmVyOyAvL1RvdGFsIGRpc3RhbmNlIGJldHdlZW4gdGhlIHRvcCBlZGdlIG9mIHRoZSBjaGFydCwgYW5kIHRoZSBzdGFydCBvZiBkcmF3biBkYXRhXG4gIHRvdGFsQm90dG9tT2Zmc2V0OiBudW1iZXI7IC8vVG90YWwgZGlzdGFuY2UgYmV0d2VlbiB0aGUgZW5kIG9mIGRyYXduIGRhdGEsIGFuZCB0aGUgYm90dG9tIGVkZ2Ugb2YgdGhlIGNoYXJ0XG4gIGRhdGFMYWJlbFRleHRTaXplOiBudW1iZXI7XG4gIGhvcml6b250YWxBeGlzTGFiZWxUZXh0U2l6ZTogbnVtYmVyO1xuICB2ZXJ0aWNhbEF4aXNMYWJlbFRleHRTaXplOiBudW1iZXI7XG4gIHRhcmdldFRpY2tDb3VudDogbnVtYmVyO1xuICBjaGFydERhdGFEaXJlY3Rpb246IENoYXJ0RGF0YURpcmVjdGlvbjtcbiAgaG9yaXpvbnRhbENvbnRhaW5lclNjYWxlOiBDb250YWluZXJTY2FsaW5nVHlwZTtcbiAgdmVydGljYWxDb250YWluZXJTY2FsZTogQ29udGFpbmVyU2NhbGluZ1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgZW1wdHlDaGFydFNjYWxlVmFsdWVzOiBGdWxsQ2hhcnRTY2FsZVZhbHVlcyA9IHtcbiAgYmFyU2l6ZTogMCxcbiAgYmFyQ2x1c3RlckdhcDogMCxcbiAgYnVja2V0R2FwOiAwLFxuICBvdXRlckdhcDogMCxcbiAgbGVmdFBhZGRpbmc6IDAsXG4gIHJpZ2h0UGFkZGluZzogMCxcbiAgdG9wUGFkZGluZzogMCxcbiAgYm90dG9tUGFkZGluZzogMCxcbiAgbGVmdEJ1Y2tldExhYmVsOiAwLFxuICBkYXRhTGFiZWxQYWRkaW5nOiAwLFxuICBmb250U2l6ZTogMCxcbiAgdG90YWxXaWR0aDogMCxcbiAgdG90YWxIZWlnaHQ6IDAsXG4gIHNpemVGb3JEYXRhOiAwLFxuICB0b3RhbExlZnRPZmZzZXQ6IDAsXG4gIHRvdGFsUmlnaHRPZmZzZXQ6IDAsXG4gIHRvdGFsVG9wT2Zmc2V0OiAwLFxuICB0b3RhbEJvdHRvbU9mZnNldDogMCxcbiAgZGF0YUxhYmVsVGV4dFNpemU6IDAsXG4gIGhvcml6b250YWxBeGlzTGFiZWxUZXh0U2l6ZTogMCxcbiAgdmVydGljYWxBeGlzTGFiZWxUZXh0U2l6ZTogMCxcbiAgdGFyZ2V0VGlja0NvdW50OiAwLFxuICBjaGFydERhdGFEaXJlY3Rpb246ICd2ZXJ0aWNhbCcsXG4gIGhvcml6b250YWxDb250YWluZXJTY2FsZTogJ25vLXNjYWxlJyxcbiAgdmVydGljYWxDb250YWluZXJTY2FsZTogJ25vLXNjYWxlJyxcbn07XG5cbmV4cG9ydCB0eXBlIEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbiA9IHtcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIHRhcmdldDogbnVtYmVyOyAvL09uIHRoZSBkYXRhIGF4aXMsIHRoaXMgaXMgZ2VuZXJhbGx5IHRyZWF0ZWQgYXMgYSBmaXhlZCB2YWx1ZVxufTtcblxuZXhwb3J0IHR5cGUgRGF0YVNjYWxpbmdUeXBlID1cbiAgfCAnZml0JyAvL0RhdGEgd2lsbCBzY2FsZSB0byBmaXQgZGltZW5zaW9uc1xuICB8ICdtYXgnIC8vVGhlIHRhbGxlc3Qgc3RhY2svYmFyL3ZhbHVlIG9mIGRhdGEgd2lsbCBzY2FsZSB0byB0aGUgZ2l2ZW4gcHggdmFsdWVcbiAgfCAnY3VzdG9tJzsgLy9UaGUgZGF0YSB3aWxsIHNjYWxlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCByYXRpb1xuXG5leHBvcnQgdHlwZSBEYXRhU2NhbGluZ0NvbmZpZ3VyYXRpb24gPVxuICB8IHtcbiAgICAgIHR5cGU6IEV4dHJhY3Q8RGF0YVNjYWxpbmdUeXBlLCAnZml0Jz47IC8vVGhpcydsbCBmdW5jdGlvbmFsbHkgcmV2ZXJ0IHRoZSBzY2FsaW5nIHR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgYXhpcyB0byBcInNjYWxlLXRvLWZpdFwiXG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IEV4dHJhY3Q8RGF0YVNjYWxpbmdUeXBlLCAnbWF4Jz47XG4gICAgICB2YWx1ZTogbnVtYmVyO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBFeHRyYWN0PERhdGFTY2FsaW5nVHlwZSwgJ2N1c3RvbSc+O1xuICAgICAgcmF0aW86IHtcbiAgICAgICAgcHg6IG51bWJlcjtcbiAgICAgICAgdmFsdWU6IG51bWJlcjtcbiAgICAgIH07XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgQXhpc1NjYWxpbmdUeXBlID1cbiAgfCAnc2NhbGUtdG8tZml0JyAvL1RoZSBjaGFydCB3aWxsIHNjYWxlIHRvIGZpdCB0aGUgcHJvdmlkZWQgZGltZW5zaW9uc1xuICB8ICdncm93JyAvL1RoZSBjaGFydCB3aWxsIGdyb3cgaWYgc21hbGxlciB0aGFuIHRoZSBwcm92aWRlZCBkaW1lbnNpb25zLCBhbmQgc2Nyb2xsIGlmIGJpZ2dlci4gVHJlYXRlZCBhcyAnc2NhbGUtdG8tZml0JyBvbiB0aGUgZGF0YSBheGlzXG4gIHwgJ3NocmluaycgLy9UaGUgY2hhcnQgd2lsbCBzaHJpbmsgaWYgbGFyZ2VyIHRoYW4gdGhlIHByb3ZpZGVkIGRpbWVuc2lvbnMsIGFuZCBub3Qgc2NhbGUgb3RoZXJ3aXNlLiBUcmVhdGVkIGFzICdzY2FsZS10by1maXQnIG9uIHRoZSBkYXRhIGF4aXNcbiAgfCAnbm8tc2NhbGUnOyAvL1RoZSBjaGFydCB3aWxsIG5vdCBzY2FsZSwgYW5kIGlmIGJpZ2dlciB0aGFuIHRoZSBwcm92aWRlZCBkaW1lbnNpb25zLCB3aWxsIHNjcm9sbFxuXG5leHBvcnQgdHlwZSBDb250YWluZXJTY2FsaW5nVHlwZSA9XG4gIHwgJ3NocmluaycgLy9JZiB0aGUgY2hhcnQgZW5kcyB1cCBzbWFsbGVyIHRoYW4gdGhlIGNvbnRhaW5lciwgdGhlIGNvbnRhaW5lciB3aWxsIHNocmluayB0byBmaXRcbiAgfCAnbm8tc2NhbGUnOyAvL1RoZSBjb250YWluZXIgd2lsbCBub3QgY2hhbmdlIHNpemUsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNpemUgb2YgdGhlIGNoYXJ0XG5cbmV4cG9ydCB0eXBlIEZ1bGxTY2FsaW5nQ29uZmlnID0ge1xuICBkYXRhU2NhbGU/OiBEYXRhU2NhbGluZ0NvbmZpZ3VyYXRpb247IC8vT25seSB1c2VkIGlmIHRoZSBjb3JyZXNwb25kaW5nIGF4aXMgaXMgc2V0IHRvICduby1zY2FsZScgb3IgaXMgbm90IGRlZmluZWQgYnkgaW5wdXRcbiAgZWxlbWVudFNjYWxlcz86IFBhcnRpYWxFbGVtZW50U2NhbGluZ0NvbmZpZztcbiAgaG9yaXpvbnRhbEF4aXNTY2FsZT86IEF4aXNTY2FsaW5nVHlwZTtcbiAgdmVydGljYWxBeGlzU2NhbGU/OiBBeGlzU2NhbGluZ1R5cGU7XG4gIGhvcml6b250YWxDb250YWluZXJTY2FsZT86IENvbnRhaW5lclNjYWxpbmdUeXBlO1xuICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlPzogQ29udGFpbmVyU2NhbGluZ1R5cGU7XG4gIHRhcmdldFRpY2tDb3VudD86IG51bWJlcjsgLy9UYXJnZXQgbnVtYmVyIGZvciB0aGUgbnVtYmVyIG9mIHRpY2tzIG9uIHRoZSBkYXRhIGF4aXMuIERlZmF1bHRzIHRvICc1J1xufTtcblxuLy9Gb3IgdXNlIGluIGNoYXJ0LXR5cGUgZGVmYXVsdHNcbmV4cG9ydCB0eXBlIE5vbkVsZW1lbnRTY2FsaW5nQ29uZmlnID0gT21pdDxcbiAgLy9UaGlzIHBhcnQgY29waWVzIEZ1bGxTY2FsaW5nQ29uZmlnLCBidXQgcmVtb3ZlcyB0aGUgYWJpbGl0eSBmb3IgYXR0cmlidXRlcyB0byBiZSBvcHRpb25hbFxuICB7XG4gICAgW0sgaW4ga2V5b2YgRnVsbFNjYWxpbmdDb25maWddLT86IEZ1bGxTY2FsaW5nQ29uZmlnW0tdO1xuICB9LFxuICAvL1RoaXMgcGFydCBleGNsdWRlcyBlbGVtZW50U2NhbGVzLCBzaW5jZSB3ZSBoYW5kbGUgdGhvc2UgZGVmYXVsdHMgc2VwYXJhdGVseVxuICAnZWxlbWVudFNjYWxlcydcbj47XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxFbGVtZW50U2NhbGluZ0NvbmZpZyA9IHtcbiAgW0sgaW4gQ2hhcnRTY2FsZUVsZW1lbnRdPzogRWxlbWVudFNjYWxpbmdDb25maWd1cmF0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgRnVsbEVsZW1lbnRTY2FsaW5nQ29uZmlnID0ge1xuICBbSyBpbiBDaGFydFNjYWxlRWxlbWVudF06IEVsZW1lbnRTY2FsaW5nQ29uZmlndXJhdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0QmFyRWxlbWVudFNjYWxpbmdDb25maWc6IEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZyA9IHtcbiAgYmFyU2l6ZToge1xuICAgIG1pbjogOCxcbiAgICBtYXg6IDgwLFxuICAgIHRhcmdldDogMzAsXG4gIH0sXG4gIGJhckNsdXN0ZXJHYXA6IHtcbiAgICBtaW46IDgsXG4gICAgbWF4OiA4LFxuICAgIHRhcmdldDogOCxcbiAgfSxcbiAgYnVja2V0R2FwOiB7XG4gICAgbWluOiA4LFxuICAgIHRhcmdldDogNDAsXG4gIH0sXG4gIG91dGVyR2FwOiB7XG4gICAgbWluOiAwLFxuICAgIHRhcmdldDogMTYsXG4gIH0sXG4gIGxlZnRQYWRkaW5nOiB7XG4gICAgbWluOiA0OCxcbiAgICBtYXg6IDQ4LFxuICAgIHRhcmdldDogNDgsXG4gIH0sXG4gIHJpZ2h0UGFkZGluZzoge1xuICAgIG1pbjogOCxcbiAgICBtYXg6IDQ4LFxuICAgIHRhcmdldDogNDgsXG4gIH0sXG4gIHRvcFBhZGRpbmc6IHtcbiAgICBtaW46IDE2LFxuICAgIG1heDogMTYsXG4gICAgdGFyZ2V0OiAxNixcbiAgfSxcbiAgYm90dG9tUGFkZGluZzoge1xuICAgIG1pbjogMjAsXG4gICAgbWF4OiAyMCxcbiAgICB0YXJnZXQ6IDIwLFxuICB9LFxuICBkYXRhTGFiZWxQYWRkaW5nOiB7XG4gICAgbWluOiA4LFxuICAgIG1heDogOCxcbiAgICB0YXJnZXQ6IDgsXG4gIH0sXG4gIGZvbnRTaXplOiB7XG4gICAgbWluOiAxMixcbiAgICBtYXg6IDEyLFxuICAgIHRhcmdldDogMTIsXG4gIH0sXG4gIGxlZnRCdWNrZXRMYWJlbDoge1xuICAgIHRhcmdldDogMCwgLy9Ob3QgYXBwbGljYWJsZVxuICB9LFxufTtcbmV4cG9ydCBjb25zdCBEZWZhdWx0QmFyV2l0aFNlY29uZGFyeUVsZW1lbnRTY2FsaW5nQ29uZmlnOiBGdWxsRWxlbWVudFNjYWxpbmdDb25maWcgPVxuICB7XG4gICAgLi4uRGVmYXVsdEJhckVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIHJpZ2h0UGFkZGluZzoge1xuICAgICAgbWluOiA0OCxcbiAgICAgIG1heDogNDgsXG4gICAgICB0YXJnZXQ6IDQ4LFxuICAgIH0sXG4gIH07XG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0SG9yaXpvbnRhbEJhckVsZW1lbnRTY2FsaW5nQ29uZmlnOiBGdWxsRWxlbWVudFNjYWxpbmdDb25maWcgPVxuICB7XG4gICAgYmFyU2l6ZToge1xuICAgICAgbWluOiA4LFxuICAgICAgbWF4OiA4LFxuICAgICAgdGFyZ2V0OiA4LFxuICAgIH0sXG4gICAgYmFyQ2x1c3RlckdhcDoge1xuICAgICAgbWluOiA0LFxuICAgICAgbWF4OiA4LFxuICAgICAgdGFyZ2V0OiA4LFxuICAgIH0sXG4gICAgYnVja2V0R2FwOiB7XG4gICAgICBtaW46IDgsXG4gICAgICB0YXJnZXQ6IDE2LFxuICAgIH0sXG4gICAgb3V0ZXJHYXA6IHtcbiAgICAgIG1pbjogMCxcbiAgICAgIHRhcmdldDogOCxcbiAgICB9LFxuICAgIGxlZnRQYWRkaW5nOiB7XG4gICAgICBtaW46IDgsXG4gICAgICBtYXg6IDgsXG4gICAgICB0YXJnZXQ6IDgsXG4gICAgfSxcbiAgICByaWdodFBhZGRpbmc6IHtcbiAgICAgIG1pbjogOCxcbiAgICAgIG1heDogNDgsXG4gICAgICB0YXJnZXQ6IDQ4LFxuICAgIH0sXG4gICAgdG9wUGFkZGluZzoge1xuICAgICAgbWluOiAxNixcbiAgICAgIG1heDogMTYsXG4gICAgICB0YXJnZXQ6IDE2LFxuICAgIH0sXG4gICAgYm90dG9tUGFkZGluZzoge1xuICAgICAgbWluOiAwLFxuICAgICAgbWF4OiAyMCxcbiAgICAgIHRhcmdldDogMCxcbiAgICB9LFxuICAgIGxlZnRCdWNrZXRMYWJlbDoge1xuICAgICAgbWluOiA4LFxuICAgICAgbWF4OiAxOTIsXG4gICAgICB0YXJnZXQ6IDY4LCAvL1NpemUgdXNlZCBmb3IgdGltZXNlcmllcyBidWNrZXRzXG4gICAgfSxcbiAgICBkYXRhTGFiZWxQYWRkaW5nOiB7XG4gICAgICBtaW46IDgsXG4gICAgICBtYXg6IDgsXG4gICAgICB0YXJnZXQ6IDgsXG4gICAgfSxcbiAgICBmb250U2l6ZToge1xuICAgICAgbWluOiAxMixcbiAgICAgIG1heDogMTIsXG4gICAgICB0YXJnZXQ6IDEyLFxuICAgIH0sXG4gIH07XG5leHBvcnQgY29uc3QgRGVmYXVsdEhvcml6b250YWxCYXJXaXRoU2Vjb25kYXJ5RWxlbWVudFNjYWxpbmdDb25maWc6IEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZyA9XG4gIHtcbiAgICAuLi5EZWZhdWx0SG9yaXpvbnRhbEJhckVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIGJvdHRvbVBhZGRpbmc6IHtcbiAgICAgIG1pbjogMjAsXG4gICAgICBtYXg6IDIwLFxuICAgICAgdGFyZ2V0OiAyMCxcbiAgICB9LFxuICB9O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdExpbmVFbGVtZW50U2NhbGluZ0NvbmZpZzogRnVsbEVsZW1lbnRTY2FsaW5nQ29uZmlnID0ge1xuICBidWNrZXRHYXA6IHtcbiAgICBtaW46IDgsXG4gICAgdGFyZ2V0OiAzMixcbiAgfSxcbiAgb3V0ZXJHYXA6IHtcbiAgICB0YXJnZXQ6IDEsXG4gIH0sXG4gIGxlZnRQYWRkaW5nOiB7XG4gICAgbWluOiA0OCxcbiAgICBtYXg6IDQ4LFxuICAgIHRhcmdldDogNDgsXG4gIH0sXG4gIHJpZ2h0UGFkZGluZzoge1xuICAgIG1pbjogOCxcbiAgICBtYXg6IDQ4LFxuICAgIHRhcmdldDogNDgsXG4gIH0sXG4gIHRvcFBhZGRpbmc6IHtcbiAgICBtaW46IDE2LFxuICAgIG1heDogMTYsXG4gICAgdGFyZ2V0OiAxNixcbiAgfSxcbiAgYm90dG9tUGFkZGluZzoge1xuICAgIG1pbjogMjAsXG4gICAgbWF4OiAyMCxcbiAgICB0YXJnZXQ6IDIwLFxuICB9LFxuICBkYXRhTGFiZWxQYWRkaW5nOiB7XG4gICAgbWluOiA4LFxuICAgIG1heDogOCxcbiAgICB0YXJnZXQ6IDgsXG4gIH0sXG4gIGZvbnRTaXplOiB7XG4gICAgbWluOiAxMixcbiAgICBtYXg6IDEyLFxuICAgIHRhcmdldDogMTIsXG4gIH0sXG4gIGJhclNpemU6IHtcbiAgICB0YXJnZXQ6IDAsIC8vTm90IGFwcGxpY2FibGVcbiAgfSxcbiAgYmFyQ2x1c3RlckdhcDoge1xuICAgIHRhcmdldDogMCwgLy9Ob3QgYXBwbGljYWJsZVxuICB9LFxuICBsZWZ0QnVja2V0TGFiZWw6IHtcbiAgICB0YXJnZXQ6IDAsIC8vTm90IGFwcGxpY2FibGVcbiAgfSxcbn07XG5leHBvcnQgY29uc3QgRGVmYXVsdExpbmVXaXRoU2Vjb25kYXJ5RWxlbWVudFNjYWxpbmdDb25maWc6IEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZyA9XG4gIHtcbiAgICAuLi5EZWZhdWx0TGluZUVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgIHJpZ2h0UGFkZGluZzoge1xuICAgICAgbWluOiA0OCxcbiAgICAgIG1heDogNDgsXG4gICAgICB0YXJnZXQ6IDQ4LFxuICAgIH0sXG4gIH07XG5cbi8vRm9yIGJhciwgbGluZSwgYXJlYSwgd2F0ZXJmYWxsIGFuZCBmdW5uZWwgY2hhcnRzXG5leHBvcnQgY29uc3QgRGVmYXVsdFZlcnRpY2FsTm9uRWxlbWVudFNjYWxpbmdDb25maWc6IE5vbkVsZW1lbnRTY2FsaW5nQ29uZmlnID0ge1xuICBkYXRhU2NhbGU6IHsgdHlwZTogJ2ZpdCcgfSxcbiAgaG9yaXpvbnRhbEF4aXNTY2FsZTogJ2dyb3cnLFxuICB2ZXJ0aWNhbEF4aXNTY2FsZTogJ3NjYWxlLXRvLWZpdCcsXG4gIGhvcml6b250YWxDb250YWluZXJTY2FsZTogJ3NocmluaycsXG4gIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6ICdzaHJpbmsnLFxuICB0YXJnZXRUaWNrQ291bnQ6IDUsXG59O1xuLy9Gb3IgaG9yaXpvbnRhbCBiYXIgY2hhcnRzXG5leHBvcnQgY29uc3QgRGVmYXVsdEhvcml6b250YWxOb25FbGVtZW50U2NhbGluZ0NvbmZpZzogTm9uRWxlbWVudFNjYWxpbmdDb25maWcgPVxuICB7XG4gICAgZGF0YVNjYWxlOiB7IHR5cGU6ICdmaXQnIH0sXG4gICAgaG9yaXpvbnRhbEF4aXNTY2FsZTogJ3NjYWxlLXRvLWZpdCcsXG4gICAgdmVydGljYWxBeGlzU2NhbGU6ICdncm93JyxcbiAgICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6ICdzaHJpbmsnLFxuICAgIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6ICdzaHJpbmsnLFxuICAgIHRhcmdldFRpY2tDb3VudDogNSxcbiAgfTtcblxuZXhwb3J0IHR5cGUgRGVmYXVsdFNjYWxpbmdDb25maWcgPSB7XG4gIGVsZW1lbnRTY2FsZXM6IEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZztcbiAgbm9uRWxlbWVudFNjYWxlczogTm9uRWxlbWVudFNjYWxpbmdDb25maWc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFNjYWxpbmdDb25maWdCeUNoYXJ0VHlwZShcbiAgdHlwZTogRXhjbHVkZTxDaGFydC5DaGFydFR5cGUsICdkb251dCc+LFxuICBoYXNTZWNvbmRhcnk6IGJvb2xlYW4sXG4pOiBEZWZhdWx0U2NhbGluZ0NvbmZpZyB7XG4gIGlmICh0eXBlID09PSAnaG9yaXpvbnRhbC1iYXInKSB7XG4gICAgaWYgKGhhc1NlY29uZGFyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudFNjYWxlczogRGVmYXVsdEhvcml6b250YWxCYXJXaXRoU2Vjb25kYXJ5RWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgICAgIG5vbkVsZW1lbnRTY2FsZXM6IERlZmF1bHRIb3Jpem9udGFsTm9uRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudFNjYWxlczogRGVmYXVsdEhvcml6b250YWxCYXJFbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICAgIG5vbkVsZW1lbnRTY2FsZXM6IERlZmF1bHRIb3Jpem9udGFsTm9uRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgfTtcbiAgfVxuICBpZiAoQ2hhcnQuaXNCYXJUeXBlKHR5cGUpKSB7XG4gICAgaWYgKGhhc1NlY29uZGFyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWxlbWVudFNjYWxlczogRGVmYXVsdEJhcldpdGhTZWNvbmRhcnlFbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICAgICAgbm9uRWxlbWVudFNjYWxlczogRGVmYXVsdFZlcnRpY2FsTm9uRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZWxlbWVudFNjYWxlczogRGVmYXVsdEJhckVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgICAgbm9uRWxlbWVudFNjYWxlczogRGVmYXVsdFZlcnRpY2FsTm9uRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgfTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ2xpbmUnIHx8IHR5cGUgPT09ICdhcmVhJykge1xuICAgIGlmIChoYXNTZWNvbmRhcnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVsZW1lbnRTY2FsZXM6IERlZmF1bHRMaW5lV2l0aFNlY29uZGFyeUVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgICAgICBub25FbGVtZW50U2NhbGVzOiBEZWZhdWx0VmVydGljYWxOb25FbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBlbGVtZW50U2NhbGVzOiBEZWZhdWx0TGluZUVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICAgICAgbm9uRWxlbWVudFNjYWxlczogRGVmYXVsdFZlcnRpY2FsTm9uRWxlbWVudFNjYWxpbmdDb25maWcsXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGVsZW1lbnRTY2FsZXM6IERlZmF1bHRCYXJFbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgICBub25FbGVtZW50U2NhbGVzOiBEZWZhdWx0VmVydGljYWxOb25FbGVtZW50U2NhbGluZ0NvbmZpZyxcbiAgfTtcbn1cblxudHlwZSBSYWRpdXNDb25maWcgPSB7XG4gIHR5cGU6ICdwcm9wb3J0aW9uJyB8ICdhYnNvbHV0ZSc7XG4gIHZhbHVlOiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBEb251dFNpemluZ0NvbmZpZyA9IHtcbiAgb3V0ZXJSYWRpdXM/OiBSYWRpdXNDb25maWc7IC8vSWYgcHJvcG9ydGlvbiwgaXQncyByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyXG4gIGRyYXdSYWRpdXM/OiBSYWRpdXNDb25maWc7IC8vSWYgcHJvcG9ydGlvbiwgaXQncyByZWxhdGl2ZSB0byB0aGUgb3V0ZXIgcmFkaXVzXG4gIGVsZW1lbnRTY2FsZXM/OiBQYXJ0aWFsRWxlbWVudFNjYWxpbmdDb25maWc7XG4gIGhvcml6b250YWxDb250YWluZXJTY2FsZT86IENvbnRhaW5lclNjYWxpbmdUeXBlO1xuICB2ZXJ0aWNhbENvbnRhaW5lclNjYWxlPzogQ29udGFpbmVyU2NhbGluZ1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgRGVmYXVsdERvbnV0RWxlbWVudFNjYWxpbmdDb25maWc6IEZ1bGxFbGVtZW50U2NhbGluZ0NvbmZpZyA9IHtcbiAgZGF0YUxhYmVsUGFkZGluZzoge1xuICAgIG1pbjogMTYsXG4gICAgbWF4OiAxNixcbiAgICB0YXJnZXQ6IDE2LFxuICB9LFxuICBmb250U2l6ZToge1xuICAgIG1pbjogMTIsXG4gICAgbWF4OiAxMixcbiAgICB0YXJnZXQ6IDEyLFxuICB9LFxuICBidWNrZXRHYXA6IHtcbiAgICB0YXJnZXQ6IDAsIC8vTm90IGFwcGxpY2FibGVcbiAgfSxcbiAgb3V0ZXJHYXA6IHtcbiAgICB0YXJnZXQ6IDAsIC8vTm90IGFwcGxpY2FibGVcbiAgfSxcbiAgbGVmdFBhZGRpbmc6IHtcbiAgICB0YXJnZXQ6IDAsIC8vTm90IGFwcGxpY2FibGVcbiAgfSxcbiAgcmlnaHRQYWRkaW5nOiB7XG4gICAgdGFyZ2V0OiAwLCAvL05vdCBhcHBsaWNhYmxlXG4gIH0sXG4gIHRvcFBhZGRpbmc6IHtcbiAgICB0YXJnZXQ6IDAsIC8vTm90IGFwcGxpY2FibGVcbiAgfSxcbiAgYm90dG9tUGFkZGluZzoge1xuICAgIHRhcmdldDogMCwgLy9Ob3QgYXBwbGljYWJsZVxuICB9LFxuICBiYXJTaXplOiB7XG4gICAgdGFyZ2V0OiAwLCAvL05vdCBhcHBsaWNhYmxlXG4gIH0sXG4gIGJhckNsdXN0ZXJHYXA6IHtcbiAgICB0YXJnZXQ6IDAsIC8vTm90IGFwcGxpY2FibGVcbiAgfSxcbiAgbGVmdEJ1Y2tldExhYmVsOiB7XG4gICAgdGFyZ2V0OiAwLCAvL05vdCBhcHBsaWNhYmxlXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRFUl9SQURJVVNfQ09ORklHOiBSYWRpdXNDb25maWcgPSB7XG4gIHR5cGU6ICdwcm9wb3J0aW9uJyxcbiAgdmFsdWU6IDAuNzUsXG59O1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9EUkFXX1JBRElVU19DT05GSUc6IFJhZGl1c0NvbmZpZyA9IHtcbiAgdHlwZTogJ2Fic29sdXRlJyxcbiAgdmFsdWU6IDEyLFxufTtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHREb251dFNpemluZ0NvbmZpZyA9IHtcbiAgb3V0ZXJSYWRpdXM6IERFRkFVTFRfT1VURVJfUkFESVVTX0NPTkZJRyxcbiAgZHJhd1JhZGl1czogREVGQVVMVF9EUkFXX1JBRElVU19DT05GSUcsXG4gIGVsZW1lbnRTY2FsZXM6IERlZmF1bHREb251dEVsZW1lbnRTY2FsaW5nQ29uZmlnLFxuICBob3Jpem9udGFsQ29udGFpbmVyU2NhbGU6ICduby1zY2FsZScgYXMgQ29udGFpbmVyU2NhbGluZ1R5cGUsXG4gIHZlcnRpY2FsQ29udGFpbmVyU2NhbGU6ICduby1zY2FsZScgYXMgQ29udGFpbmVyU2NhbGluZ1R5cGUsXG59O1xuIl19