@cdktn/provider-newrelic 14.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.
Files changed (154) hide show
  1. package/.jsii +198156 -0
  2. package/LICENSE +355 -0
  3. package/README.md +94 -0
  4. package/lib/account-management/index.d.ts +122 -0
  5. package/lib/account-management/index.js +293 -0
  6. package/lib/alert-channel/index.d.ts +351 -0
  7. package/lib/alert-channel/index.js +769 -0
  8. package/lib/alert-compound-condition/index.d.ts +233 -0
  9. package/lib/alert-compound-condition/index.js +506 -0
  10. package/lib/alert-condition/index.d.ts +271 -0
  11. package/lib/alert-condition/index.js +558 -0
  12. package/lib/alert-muting-rule/index.d.ts +309 -0
  13. package/lib/alert-muting-rule/index.js +714 -0
  14. package/lib/alert-policy/index.d.ts +91 -0
  15. package/lib/alert-policy/index.js +174 -0
  16. package/lib/alert-policy-channel/index.d.ts +114 -0
  17. package/lib/alert-policy-channel/index.js +258 -0
  18. package/lib/api-access-key/index.d.ts +102 -0
  19. package/lib/api-access-key/index.js +220 -0
  20. package/lib/application-settings/index.d.ts +414 -0
  21. package/lib/application-settings/index.js +944 -0
  22. package/lib/browser-application/index.d.ts +149 -0
  23. package/lib/browser-application/index.js +341 -0
  24. package/lib/cloud-aws-eu-sovereign-integrations/index.d.ts +199 -0
  25. package/lib/cloud-aws-eu-sovereign-integrations/index.js +481 -0
  26. package/lib/cloud-aws-eu-sovereign-link-account/index.d.ts +90 -0
  27. package/lib/cloud-aws-eu-sovereign-link-account/index.js +171 -0
  28. package/lib/cloud-aws-govcloud-integrations/index.d.ts +1523 -0
  29. package/lib/cloud-aws-govcloud-integrations/index.js +3776 -0
  30. package/lib/cloud-aws-govcloud-link-account/index.d.ts +90 -0
  31. package/lib/cloud-aws-govcloud-link-account/index.js +171 -0
  32. package/lib/cloud-aws-integrations/index.d.ts +3345 -0
  33. package/lib/cloud-aws-integrations/index.js +8599 -0
  34. package/lib/cloud-aws-link-account/index.d.ts +90 -0
  35. package/lib/cloud-aws-link-account/index.js +171 -0
  36. package/lib/cloud-azure-integrations/index.d.ts +1666 -0
  37. package/lib/cloud-azure-integrations/index.js +4361 -0
  38. package/lib/cloud-azure-link-account/index.d.ts +109 -0
  39. package/lib/cloud-azure-link-account/index.js +204 -0
  40. package/lib/cloud-gcp-integrations/index.d.ts +1049 -0
  41. package/lib/cloud-gcp-integrations/index.js +2810 -0
  42. package/lib/cloud-gcp-link-account/index.d.ts +79 -0
  43. package/lib/cloud-gcp-link-account/index.js +150 -0
  44. package/lib/cloud-oci-link-account/index.d.ts +195 -0
  45. package/lib/cloud-oci-link-account/index.js +366 -0
  46. package/lib/data-newrelic-account/index.d.ts +82 -0
  47. package/lib/data-newrelic-account/index.js +160 -0
  48. package/lib/data-newrelic-alert-channel/index.d.ts +126 -0
  49. package/lib/data-newrelic-alert-channel/index.js +298 -0
  50. package/lib/data-newrelic-alert-policy/index.d.ts +82 -0
  51. package/lib/data-newrelic-alert-policy/index.js +161 -0
  52. package/lib/data-newrelic-application/index.d.ts +60 -0
  53. package/lib/data-newrelic-application/index.js +122 -0
  54. package/lib/data-newrelic-authentication-domain/index.d.ts +47 -0
  55. package/lib/data-newrelic-authentication-domain/index.js +97 -0
  56. package/lib/data-newrelic-cloud-account/index.d.ts +79 -0
  57. package/lib/data-newrelic-cloud-account/index.js +150 -0
  58. package/lib/data-newrelic-entity/index.d.ts +189 -0
  59. package/lib/data-newrelic-entity/index.js +401 -0
  60. package/lib/data-newrelic-group/index.d.ts +58 -0
  61. package/lib/data-newrelic-group/index.js +116 -0
  62. package/lib/data-newrelic-key-transaction/index.d.ts +82 -0
  63. package/lib/data-newrelic-key-transaction/index.js +161 -0
  64. package/lib/data-newrelic-notification-destination/index.d.ts +165 -0
  65. package/lib/data-newrelic-notification-destination/index.js +372 -0
  66. package/lib/data-newrelic-obfuscation-expression/index.d.ts +69 -0
  67. package/lib/data-newrelic-obfuscation-expression/index.js +132 -0
  68. package/lib/data-newrelic-service-level-alert-helper/index.d.ts +111 -0
  69. package/lib/data-newrelic-service-level-alert-helper/index.js +244 -0
  70. package/lib/data-newrelic-synthetics-private-location/index.d.ts +80 -0
  71. package/lib/data-newrelic-synthetics-private-location/index.js +153 -0
  72. package/lib/data-newrelic-synthetics-secure-credential/index.d.ts +71 -0
  73. package/lib/data-newrelic-synthetics-secure-credential/index.js +140 -0
  74. package/lib/data-newrelic-test-grok-pattern/index.d.ts +149 -0
  75. package/lib/data-newrelic-test-grok-pattern/index.js +318 -0
  76. package/lib/data-newrelic-user/index.d.ts +69 -0
  77. package/lib/data-newrelic-user/index.js +136 -0
  78. package/lib/data-partition-rule/index.d.ts +146 -0
  79. package/lib/data-partition-rule/index.js +319 -0
  80. package/lib/entity-tags/index.d.ts +156 -0
  81. package/lib/entity-tags/index.js +368 -0
  82. package/lib/events-to-metrics-rule/index.d.ts +102 -0
  83. package/lib/events-to-metrics-rule/index.js +196 -0
  84. package/lib/group/index.d.ts +79 -0
  85. package/lib/group/index.js +150 -0
  86. package/lib/index.d.ts +74 -0
  87. package/lib/index.js +80 -0
  88. package/lib/infra-alert-condition/index.d.ts +293 -0
  89. package/lib/infra-alert-condition/index.js +665 -0
  90. package/lib/insights-event/index.d.ts +186 -0
  91. package/lib/insights-event/index.js +425 -0
  92. package/lib/key-transaction/index.d.ts +100 -0
  93. package/lib/key-transaction/index.js +191 -0
  94. package/lib/lazy-index.d.ts +4 -0
  95. package/lib/lazy-index.js +77 -0
  96. package/lib/log-parsing-rule/index.d.ts +132 -0
  97. package/lib/log-parsing-rule/index.js +250 -0
  98. package/lib/monitor-downtime/index.d.ts +259 -0
  99. package/lib/monitor-downtime/index.js +594 -0
  100. package/lib/notification-channel/index.d.ts +240 -0
  101. package/lib/notification-channel/index.js +546 -0
  102. package/lib/notification-destination/index.d.ts +406 -0
  103. package/lib/notification-destination/index.js +1030 -0
  104. package/lib/nrql-alert-condition/index.d.ts +976 -0
  105. package/lib/nrql-alert-condition/index.js +2320 -0
  106. package/lib/nrql-drop-rule/index.d.ts +127 -0
  107. package/lib/nrql-drop-rule/index.js +287 -0
  108. package/lib/obfuscation-expression/index.d.ts +90 -0
  109. package/lib/obfuscation-expression/index.js +171 -0
  110. package/lib/obfuscation-rule/index.d.ts +173 -0
  111. package/lib/obfuscation-rule/index.js +361 -0
  112. package/lib/one-dashboard/index-structs/index.d.ts +6 -0
  113. package/lib/one-dashboard/index-structs/index.js +23 -0
  114. package/lib/one-dashboard/index-structs/structs0.d.ts +7000 -0
  115. package/lib/one-dashboard/index-structs/structs0.js +17966 -0
  116. package/lib/one-dashboard/index-structs/structs400.d.ts +3703 -0
  117. package/lib/one-dashboard/index-structs/structs400.js +9484 -0
  118. package/lib/one-dashboard/index.d.ts +116 -0
  119. package/lib/one-dashboard/index.js +246 -0
  120. package/lib/one-dashboard-json/index.d.ts +116 -0
  121. package/lib/one-dashboard-json/index.js +278 -0
  122. package/lib/one-dashboard-raw/index.d.ts +278 -0
  123. package/lib/one-dashboard-raw/index.js +646 -0
  124. package/lib/pipeline-cloud-rule/index.d.ts +90 -0
  125. package/lib/pipeline-cloud-rule/index.js +171 -0
  126. package/lib/provider/index.d.ts +164 -0
  127. package/lib/provider/index.js +354 -0
  128. package/lib/service-level/index.d.ts +505 -0
  129. package/lib/service-level/index.js +1429 -0
  130. package/lib/synthetics-alert-condition/index.d.ts +101 -0
  131. package/lib/synthetics-alert-condition/index.js +193 -0
  132. package/lib/synthetics-broken-links-monitor/index.d.ts +221 -0
  133. package/lib/synthetics-broken-links-monitor/index.js +455 -0
  134. package/lib/synthetics-cert-check-monitor/index.d.ts +226 -0
  135. package/lib/synthetics-cert-check-monitor/index.js +469 -0
  136. package/lib/synthetics-monitor/index.d.ts +408 -0
  137. package/lib/synthetics-monitor/index.js +843 -0
  138. package/lib/synthetics-multilocation-alert-condition/index.d.ts +181 -0
  139. package/lib/synthetics-multilocation-alert-condition/index.js +403 -0
  140. package/lib/synthetics-private-location/index.d.ts +94 -0
  141. package/lib/synthetics-private-location/index.js +187 -0
  142. package/lib/synthetics-script-monitor/index.d.ts +352 -0
  143. package/lib/synthetics-script-monitor/index.js +736 -0
  144. package/lib/synthetics-secure-credential/index.d.ts +136 -0
  145. package/lib/synthetics-secure-credential/index.js +300 -0
  146. package/lib/synthetics-step-monitor/index.d.ts +372 -0
  147. package/lib/synthetics-step-monitor/index.js +809 -0
  148. package/lib/user/index.d.ts +89 -0
  149. package/lib/user/index.js +168 -0
  150. package/lib/workflow/index.d.ts +445 -0
  151. package/lib/workflow/index.js +1058 -0
  152. package/lib/workload/index.d.ts +518 -0
  153. package/lib/workload/index.js +1279 -0
  154. package/package.json +155 -0
@@ -0,0 +1,594 @@
1
+ "use strict";
2
+ var _a, _b, _c, _d;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.MonitorDowntime = exports.MonitorDowntimeFrequencyOutputReference = exports.MonitorDowntimeFrequencyDaysOfWeekOutputReference = exports.MonitorDowntimeEndRepeatOutputReference = void 0;
5
+ exports.monitorDowntimeEndRepeatToTerraform = monitorDowntimeEndRepeatToTerraform;
6
+ exports.monitorDowntimeEndRepeatToHclTerraform = monitorDowntimeEndRepeatToHclTerraform;
7
+ exports.monitorDowntimeFrequencyDaysOfWeekToTerraform = monitorDowntimeFrequencyDaysOfWeekToTerraform;
8
+ exports.monitorDowntimeFrequencyDaysOfWeekToHclTerraform = monitorDowntimeFrequencyDaysOfWeekToHclTerraform;
9
+ exports.monitorDowntimeFrequencyToTerraform = monitorDowntimeFrequencyToTerraform;
10
+ exports.monitorDowntimeFrequencyToHclTerraform = monitorDowntimeFrequencyToHclTerraform;
11
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
12
+ const cdktn = require("cdktn");
13
+ function monitorDowntimeEndRepeatToTerraform(struct) {
14
+ if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
15
+ return struct;
16
+ }
17
+ if (cdktn.isComplexElement(struct)) {
18
+ throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
19
+ }
20
+ return {
21
+ on_date: cdktn.stringToTerraform(struct.onDate),
22
+ on_repeat: cdktn.numberToTerraform(struct.onRepeat),
23
+ };
24
+ }
25
+ function monitorDowntimeEndRepeatToHclTerraform(struct) {
26
+ if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
27
+ return struct;
28
+ }
29
+ if (cdktn.isComplexElement(struct)) {
30
+ throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
31
+ }
32
+ const attrs = {
33
+ on_date: {
34
+ value: cdktn.stringToHclTerraform(struct.onDate),
35
+ isBlock: false,
36
+ type: "simple",
37
+ storageClassType: "string",
38
+ },
39
+ on_repeat: {
40
+ value: cdktn.numberToHclTerraform(struct.onRepeat),
41
+ isBlock: false,
42
+ type: "simple",
43
+ storageClassType: "number",
44
+ },
45
+ };
46
+ // remove undefined attributes
47
+ return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
48
+ }
49
+ class MonitorDowntimeEndRepeatOutputReference extends cdktn.ComplexObject {
50
+ /**
51
+ * @param terraformResource The parent resource
52
+ * @param terraformAttribute The attribute on the parent resource this class is referencing
53
+ */
54
+ constructor(terraformResource, terraformAttribute) {
55
+ super(terraformResource, terraformAttribute, false, 0);
56
+ this.isEmptyObject = false;
57
+ }
58
+ get internalValue() {
59
+ let hasAnyValues = this.isEmptyObject;
60
+ const internalValueResult = {};
61
+ if (this._onDate !== undefined) {
62
+ hasAnyValues = true;
63
+ internalValueResult.onDate = this._onDate;
64
+ }
65
+ if (this._onRepeat !== undefined) {
66
+ hasAnyValues = true;
67
+ internalValueResult.onRepeat = this._onRepeat;
68
+ }
69
+ return hasAnyValues ? internalValueResult : undefined;
70
+ }
71
+ set internalValue(value) {
72
+ if (value === undefined) {
73
+ this.isEmptyObject = false;
74
+ this._onDate = undefined;
75
+ this._onRepeat = undefined;
76
+ }
77
+ else {
78
+ this.isEmptyObject = Object.keys(value).length === 0;
79
+ this._onDate = value.onDate;
80
+ this._onRepeat = value.onRepeat;
81
+ }
82
+ }
83
+ get onDate() {
84
+ return this.getStringAttribute('on_date');
85
+ }
86
+ set onDate(value) {
87
+ this._onDate = value;
88
+ }
89
+ resetOnDate() {
90
+ this._onDate = undefined;
91
+ }
92
+ // Temporarily expose input value. Use with caution.
93
+ get onDateInput() {
94
+ return this._onDate;
95
+ }
96
+ get onRepeat() {
97
+ return this.getNumberAttribute('on_repeat');
98
+ }
99
+ set onRepeat(value) {
100
+ this._onRepeat = value;
101
+ }
102
+ resetOnRepeat() {
103
+ this._onRepeat = undefined;
104
+ }
105
+ // Temporarily expose input value. Use with caution.
106
+ get onRepeatInput() {
107
+ return this._onRepeat;
108
+ }
109
+ }
110
+ exports.MonitorDowntimeEndRepeatOutputReference = MonitorDowntimeEndRepeatOutputReference;
111
+ _a = JSII_RTTI_SYMBOL_1;
112
+ MonitorDowntimeEndRepeatOutputReference[_a] = { fqn: "@cdktn/provider-newrelic.monitorDowntime.MonitorDowntimeEndRepeatOutputReference", version: "14.0.0" };
113
+ function monitorDowntimeFrequencyDaysOfWeekToTerraform(struct) {
114
+ if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
115
+ return struct;
116
+ }
117
+ if (cdktn.isComplexElement(struct)) {
118
+ throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
119
+ }
120
+ return {
121
+ ordinal_day_of_month: cdktn.stringToTerraform(struct.ordinalDayOfMonth),
122
+ week_day: cdktn.stringToTerraform(struct.weekDay),
123
+ };
124
+ }
125
+ function monitorDowntimeFrequencyDaysOfWeekToHclTerraform(struct) {
126
+ if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
127
+ return struct;
128
+ }
129
+ if (cdktn.isComplexElement(struct)) {
130
+ throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
131
+ }
132
+ const attrs = {
133
+ ordinal_day_of_month: {
134
+ value: cdktn.stringToHclTerraform(struct.ordinalDayOfMonth),
135
+ isBlock: false,
136
+ type: "simple",
137
+ storageClassType: "string",
138
+ },
139
+ week_day: {
140
+ value: cdktn.stringToHclTerraform(struct.weekDay),
141
+ isBlock: false,
142
+ type: "simple",
143
+ storageClassType: "string",
144
+ },
145
+ };
146
+ // remove undefined attributes
147
+ return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
148
+ }
149
+ class MonitorDowntimeFrequencyDaysOfWeekOutputReference extends cdktn.ComplexObject {
150
+ /**
151
+ * @param terraformResource The parent resource
152
+ * @param terraformAttribute The attribute on the parent resource this class is referencing
153
+ */
154
+ constructor(terraformResource, terraformAttribute) {
155
+ super(terraformResource, terraformAttribute, false, 0);
156
+ this.isEmptyObject = false;
157
+ }
158
+ get internalValue() {
159
+ let hasAnyValues = this.isEmptyObject;
160
+ const internalValueResult = {};
161
+ if (this._ordinalDayOfMonth !== undefined) {
162
+ hasAnyValues = true;
163
+ internalValueResult.ordinalDayOfMonth = this._ordinalDayOfMonth;
164
+ }
165
+ if (this._weekDay !== undefined) {
166
+ hasAnyValues = true;
167
+ internalValueResult.weekDay = this._weekDay;
168
+ }
169
+ return hasAnyValues ? internalValueResult : undefined;
170
+ }
171
+ set internalValue(value) {
172
+ if (value === undefined) {
173
+ this.isEmptyObject = false;
174
+ this._ordinalDayOfMonth = undefined;
175
+ this._weekDay = undefined;
176
+ }
177
+ else {
178
+ this.isEmptyObject = Object.keys(value).length === 0;
179
+ this._ordinalDayOfMonth = value.ordinalDayOfMonth;
180
+ this._weekDay = value.weekDay;
181
+ }
182
+ }
183
+ get ordinalDayOfMonth() {
184
+ return this.getStringAttribute('ordinal_day_of_month');
185
+ }
186
+ set ordinalDayOfMonth(value) {
187
+ this._ordinalDayOfMonth = value;
188
+ }
189
+ // Temporarily expose input value. Use with caution.
190
+ get ordinalDayOfMonthInput() {
191
+ return this._ordinalDayOfMonth;
192
+ }
193
+ get weekDay() {
194
+ return this.getStringAttribute('week_day');
195
+ }
196
+ set weekDay(value) {
197
+ this._weekDay = value;
198
+ }
199
+ // Temporarily expose input value. Use with caution.
200
+ get weekDayInput() {
201
+ return this._weekDay;
202
+ }
203
+ }
204
+ exports.MonitorDowntimeFrequencyDaysOfWeekOutputReference = MonitorDowntimeFrequencyDaysOfWeekOutputReference;
205
+ _b = JSII_RTTI_SYMBOL_1;
206
+ MonitorDowntimeFrequencyDaysOfWeekOutputReference[_b] = { fqn: "@cdktn/provider-newrelic.monitorDowntime.MonitorDowntimeFrequencyDaysOfWeekOutputReference", version: "14.0.0" };
207
+ function monitorDowntimeFrequencyToTerraform(struct) {
208
+ if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
209
+ return struct;
210
+ }
211
+ if (cdktn.isComplexElement(struct)) {
212
+ throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
213
+ }
214
+ return {
215
+ days_of_month: cdktn.listMapper(cdktn.numberToTerraform, false)(struct.daysOfMonth),
216
+ days_of_week: monitorDowntimeFrequencyDaysOfWeekToTerraform(struct.daysOfWeek),
217
+ };
218
+ }
219
+ function monitorDowntimeFrequencyToHclTerraform(struct) {
220
+ if (!cdktn.canInspect(struct) || cdktn.Tokenization.isResolvable(struct)) {
221
+ return struct;
222
+ }
223
+ if (cdktn.isComplexElement(struct)) {
224
+ throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
225
+ }
226
+ const attrs = {
227
+ days_of_month: {
228
+ value: cdktn.listMapperHcl(cdktn.numberToHclTerraform, false)(struct.daysOfMonth),
229
+ isBlock: false,
230
+ type: "set",
231
+ storageClassType: "numberList",
232
+ },
233
+ days_of_week: {
234
+ value: monitorDowntimeFrequencyDaysOfWeekToHclTerraform(struct.daysOfWeek),
235
+ isBlock: true,
236
+ type: "list",
237
+ storageClassType: "MonitorDowntimeFrequencyDaysOfWeekList",
238
+ },
239
+ };
240
+ // remove undefined attributes
241
+ return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
242
+ }
243
+ class MonitorDowntimeFrequencyOutputReference extends cdktn.ComplexObject {
244
+ /**
245
+ * @param terraformResource The parent resource
246
+ * @param terraformAttribute The attribute on the parent resource this class is referencing
247
+ */
248
+ constructor(terraformResource, terraformAttribute) {
249
+ super(terraformResource, terraformAttribute, false, 0);
250
+ this.isEmptyObject = false;
251
+ // days_of_week - computed: false, optional: true, required: false
252
+ this._daysOfWeek = new MonitorDowntimeFrequencyDaysOfWeekOutputReference(this, "days_of_week");
253
+ }
254
+ get internalValue() {
255
+ let hasAnyValues = this.isEmptyObject;
256
+ const internalValueResult = {};
257
+ if (this._daysOfMonth !== undefined) {
258
+ hasAnyValues = true;
259
+ internalValueResult.daysOfMonth = this._daysOfMonth;
260
+ }
261
+ if (this._daysOfWeek?.internalValue !== undefined) {
262
+ hasAnyValues = true;
263
+ internalValueResult.daysOfWeek = this._daysOfWeek?.internalValue;
264
+ }
265
+ return hasAnyValues ? internalValueResult : undefined;
266
+ }
267
+ set internalValue(value) {
268
+ if (value === undefined) {
269
+ this.isEmptyObject = false;
270
+ this._daysOfMonth = undefined;
271
+ this._daysOfWeek.internalValue = undefined;
272
+ }
273
+ else {
274
+ this.isEmptyObject = Object.keys(value).length === 0;
275
+ this._daysOfMonth = value.daysOfMonth;
276
+ this._daysOfWeek.internalValue = value.daysOfWeek;
277
+ }
278
+ }
279
+ get daysOfMonth() {
280
+ return cdktn.Token.asNumberList(cdktn.Fn.tolist(this.getNumberListAttribute('days_of_month')));
281
+ }
282
+ set daysOfMonth(value) {
283
+ this._daysOfMonth = value;
284
+ }
285
+ resetDaysOfMonth() {
286
+ this._daysOfMonth = undefined;
287
+ }
288
+ // Temporarily expose input value. Use with caution.
289
+ get daysOfMonthInput() {
290
+ return this._daysOfMonth;
291
+ }
292
+ get daysOfWeek() {
293
+ return this._daysOfWeek;
294
+ }
295
+ putDaysOfWeek(value) {
296
+ this._daysOfWeek.internalValue = value;
297
+ }
298
+ resetDaysOfWeek() {
299
+ this._daysOfWeek.internalValue = undefined;
300
+ }
301
+ // Temporarily expose input value. Use with caution.
302
+ get daysOfWeekInput() {
303
+ return this._daysOfWeek.internalValue;
304
+ }
305
+ }
306
+ exports.MonitorDowntimeFrequencyOutputReference = MonitorDowntimeFrequencyOutputReference;
307
+ _c = JSII_RTTI_SYMBOL_1;
308
+ MonitorDowntimeFrequencyOutputReference[_c] = { fqn: "@cdktn/provider-newrelic.monitorDowntime.MonitorDowntimeFrequencyOutputReference", version: "14.0.0" };
309
+ /**
310
+ * Represents a {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/monitor_downtime newrelic_monitor_downtime}
311
+ */
312
+ class MonitorDowntime extends cdktn.TerraformResource {
313
+ // ==============
314
+ // STATIC Methods
315
+ // ==============
316
+ /**
317
+ * Generates CDKTN code for importing a MonitorDowntime resource upon running "cdktn plan <stack-name>"
318
+ * @param scope The scope in which to define this construct
319
+ * @param importToId The construct id used in the generated config for the MonitorDowntime to import
320
+ * @param importFromId The id of the existing MonitorDowntime that should be imported. Refer to the {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/monitor_downtime#import import section} in the documentation of this resource for the id to use
321
+ * @param provider? Optional instance of the provider where the MonitorDowntime to import is found
322
+ */
323
+ static generateConfigForImport(scope, importToId, importFromId, provider) {
324
+ return new cdktn.ImportableResource(scope, importToId, { terraformResourceType: "newrelic_monitor_downtime", importId: importFromId, provider });
325
+ }
326
+ // ===========
327
+ // INITIALIZER
328
+ // ===========
329
+ /**
330
+ * Create a new {@link https://registry.terraform.io/providers/newrelic/newrelic/3.80.2/docs/resources/monitor_downtime newrelic_monitor_downtime} Resource
331
+ *
332
+ * @param scope The scope in which to define this construct
333
+ * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
334
+ * @param options MonitorDowntimeConfig
335
+ */
336
+ constructor(scope, id, config) {
337
+ super(scope, id, {
338
+ terraformResourceType: 'newrelic_monitor_downtime',
339
+ terraformGeneratorMetadata: {
340
+ providerName: 'newrelic',
341
+ providerVersion: '3.80.2',
342
+ providerVersionConstraint: '~> 3.7'
343
+ },
344
+ provider: config.provider,
345
+ dependsOn: config.dependsOn,
346
+ count: config.count,
347
+ lifecycle: config.lifecycle,
348
+ provisioners: config.provisioners,
349
+ connection: config.connection,
350
+ forEach: config.forEach
351
+ });
352
+ // end_repeat - computed: false, optional: true, required: false
353
+ this._endRepeat = new MonitorDowntimeEndRepeatOutputReference(this, "end_repeat");
354
+ // frequency - computed: false, optional: true, required: false
355
+ this._frequency = new MonitorDowntimeFrequencyOutputReference(this, "frequency");
356
+ this._accountId = config.accountId;
357
+ this._endTime = config.endTime;
358
+ this._id = config.id;
359
+ this._maintenanceDays = config.maintenanceDays;
360
+ this._mode = config.mode;
361
+ this._monitorGuids = config.monitorGuids;
362
+ this._name = config.name;
363
+ this._startTime = config.startTime;
364
+ this._timeZone = config.timeZone;
365
+ this._endRepeat.internalValue = config.endRepeat;
366
+ this._frequency.internalValue = config.frequency;
367
+ }
368
+ get accountId() {
369
+ return this.getNumberAttribute('account_id');
370
+ }
371
+ set accountId(value) {
372
+ this._accountId = value;
373
+ }
374
+ resetAccountId() {
375
+ this._accountId = undefined;
376
+ }
377
+ // Temporarily expose input value. Use with caution.
378
+ get accountIdInput() {
379
+ return this._accountId;
380
+ }
381
+ get endTime() {
382
+ return this.getStringAttribute('end_time');
383
+ }
384
+ set endTime(value) {
385
+ this._endTime = value;
386
+ }
387
+ // Temporarily expose input value. Use with caution.
388
+ get endTimeInput() {
389
+ return this._endTime;
390
+ }
391
+ get id() {
392
+ return this.getStringAttribute('id');
393
+ }
394
+ set id(value) {
395
+ this._id = value;
396
+ }
397
+ resetId() {
398
+ this._id = undefined;
399
+ }
400
+ // Temporarily expose input value. Use with caution.
401
+ get idInput() {
402
+ return this._id;
403
+ }
404
+ get maintenanceDays() {
405
+ return cdktn.Fn.tolist(this.getListAttribute('maintenance_days'));
406
+ }
407
+ set maintenanceDays(value) {
408
+ this._maintenanceDays = value;
409
+ }
410
+ resetMaintenanceDays() {
411
+ this._maintenanceDays = undefined;
412
+ }
413
+ // Temporarily expose input value. Use with caution.
414
+ get maintenanceDaysInput() {
415
+ return this._maintenanceDays;
416
+ }
417
+ get mode() {
418
+ return this.getStringAttribute('mode');
419
+ }
420
+ set mode(value) {
421
+ this._mode = value;
422
+ }
423
+ // Temporarily expose input value. Use with caution.
424
+ get modeInput() {
425
+ return this._mode;
426
+ }
427
+ get monitorGuids() {
428
+ return cdktn.Fn.tolist(this.getListAttribute('monitor_guids'));
429
+ }
430
+ set monitorGuids(value) {
431
+ this._monitorGuids = value;
432
+ }
433
+ resetMonitorGuids() {
434
+ this._monitorGuids = undefined;
435
+ }
436
+ // Temporarily expose input value. Use with caution.
437
+ get monitorGuidsInput() {
438
+ return this._monitorGuids;
439
+ }
440
+ get name() {
441
+ return this.getStringAttribute('name');
442
+ }
443
+ set name(value) {
444
+ this._name = value;
445
+ }
446
+ // Temporarily expose input value. Use with caution.
447
+ get nameInput() {
448
+ return this._name;
449
+ }
450
+ get startTime() {
451
+ return this.getStringAttribute('start_time');
452
+ }
453
+ set startTime(value) {
454
+ this._startTime = value;
455
+ }
456
+ // Temporarily expose input value. Use with caution.
457
+ get startTimeInput() {
458
+ return this._startTime;
459
+ }
460
+ get timeZone() {
461
+ return this.getStringAttribute('time_zone');
462
+ }
463
+ set timeZone(value) {
464
+ this._timeZone = value;
465
+ }
466
+ // Temporarily expose input value. Use with caution.
467
+ get timeZoneInput() {
468
+ return this._timeZone;
469
+ }
470
+ get endRepeat() {
471
+ return this._endRepeat;
472
+ }
473
+ putEndRepeat(value) {
474
+ this._endRepeat.internalValue = value;
475
+ }
476
+ resetEndRepeat() {
477
+ this._endRepeat.internalValue = undefined;
478
+ }
479
+ // Temporarily expose input value. Use with caution.
480
+ get endRepeatInput() {
481
+ return this._endRepeat.internalValue;
482
+ }
483
+ get frequency() {
484
+ return this._frequency;
485
+ }
486
+ putFrequency(value) {
487
+ this._frequency.internalValue = value;
488
+ }
489
+ resetFrequency() {
490
+ this._frequency.internalValue = undefined;
491
+ }
492
+ // Temporarily expose input value. Use with caution.
493
+ get frequencyInput() {
494
+ return this._frequency.internalValue;
495
+ }
496
+ // =========
497
+ // SYNTHESIS
498
+ // =========
499
+ synthesizeAttributes() {
500
+ return {
501
+ account_id: cdktn.numberToTerraform(this._accountId),
502
+ end_time: cdktn.stringToTerraform(this._endTime),
503
+ id: cdktn.stringToTerraform(this._id),
504
+ maintenance_days: cdktn.listMapper(cdktn.stringToTerraform, false)(this._maintenanceDays),
505
+ mode: cdktn.stringToTerraform(this._mode),
506
+ monitor_guids: cdktn.listMapper(cdktn.stringToTerraform, false)(this._monitorGuids),
507
+ name: cdktn.stringToTerraform(this._name),
508
+ start_time: cdktn.stringToTerraform(this._startTime),
509
+ time_zone: cdktn.stringToTerraform(this._timeZone),
510
+ end_repeat: monitorDowntimeEndRepeatToTerraform(this._endRepeat.internalValue),
511
+ frequency: monitorDowntimeFrequencyToTerraform(this._frequency.internalValue),
512
+ };
513
+ }
514
+ synthesizeHclAttributes() {
515
+ const attrs = {
516
+ account_id: {
517
+ value: cdktn.numberToHclTerraform(this._accountId),
518
+ isBlock: false,
519
+ type: "simple",
520
+ storageClassType: "number",
521
+ },
522
+ end_time: {
523
+ value: cdktn.stringToHclTerraform(this._endTime),
524
+ isBlock: false,
525
+ type: "simple",
526
+ storageClassType: "string",
527
+ },
528
+ id: {
529
+ value: cdktn.stringToHclTerraform(this._id),
530
+ isBlock: false,
531
+ type: "simple",
532
+ storageClassType: "string",
533
+ },
534
+ maintenance_days: {
535
+ value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._maintenanceDays),
536
+ isBlock: false,
537
+ type: "set",
538
+ storageClassType: "stringList",
539
+ },
540
+ mode: {
541
+ value: cdktn.stringToHclTerraform(this._mode),
542
+ isBlock: false,
543
+ type: "simple",
544
+ storageClassType: "string",
545
+ },
546
+ monitor_guids: {
547
+ value: cdktn.listMapperHcl(cdktn.stringToHclTerraform, false)(this._monitorGuids),
548
+ isBlock: false,
549
+ type: "set",
550
+ storageClassType: "stringList",
551
+ },
552
+ name: {
553
+ value: cdktn.stringToHclTerraform(this._name),
554
+ isBlock: false,
555
+ type: "simple",
556
+ storageClassType: "string",
557
+ },
558
+ start_time: {
559
+ value: cdktn.stringToHclTerraform(this._startTime),
560
+ isBlock: false,
561
+ type: "simple",
562
+ storageClassType: "string",
563
+ },
564
+ time_zone: {
565
+ value: cdktn.stringToHclTerraform(this._timeZone),
566
+ isBlock: false,
567
+ type: "simple",
568
+ storageClassType: "string",
569
+ },
570
+ end_repeat: {
571
+ value: monitorDowntimeEndRepeatToHclTerraform(this._endRepeat.internalValue),
572
+ isBlock: true,
573
+ type: "list",
574
+ storageClassType: "MonitorDowntimeEndRepeatList",
575
+ },
576
+ frequency: {
577
+ value: monitorDowntimeFrequencyToHclTerraform(this._frequency.internalValue),
578
+ isBlock: true,
579
+ type: "list",
580
+ storageClassType: "MonitorDowntimeFrequencyList",
581
+ },
582
+ };
583
+ // remove undefined attributes
584
+ return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
585
+ }
586
+ }
587
+ exports.MonitorDowntime = MonitorDowntime;
588
+ _d = JSII_RTTI_SYMBOL_1;
589
+ MonitorDowntime[_d] = { fqn: "@cdktn/provider-newrelic.monitorDowntime.MonitorDowntime", version: "14.0.0" };
590
+ // =================
591
+ // STATIC PROPERTIES
592
+ // =================
593
+ MonitorDowntime.tfResourceType = "newrelic_monitor_downtime";
594
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9uaXRvci1kb3dudGltZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBaUdBLGtGQVNDO0FBR0Qsd0ZBc0JDO0FBdUZELHNHQVNDO0FBR0QsNEdBc0JDO0FBaUZELGtGQVNDO0FBR0Qsd0ZBc0JDOztBQXRXRCwrQkFBK0I7QUF3Ri9CLFNBQWdCLG1DQUFtQyxDQUFDLE1BQTJFO0lBQzdILElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9IQUFvSCxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUNELE9BQU87UUFDTCxPQUFPLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLE1BQU8sQ0FBQyxNQUFNLENBQUM7UUFDaEQsU0FBUyxFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsUUFBUSxDQUFDO0tBQ3JELENBQUE7QUFDSCxDQUFDO0FBR0QsU0FBZ0Isc0NBQXNDLENBQUMsTUFBMkU7SUFDaEksSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sTUFBTSxDQUFDO0lBQUMsQ0FBQztJQUM1RixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0hBQW9ILENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBQ0QsTUFB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QVUsQ0FBQyxhQUFhLENBQUM7Z0JBQzVFLE9BQU8sRUFBRSxJQUFJO2dCQUNiLElBQUksRUFBRSxNQUFNO2dCQUNaLGdCQUFnQixFQUFFLDhCQUE4QjthQUNqRDtTQUNGLENBQUM7UUFFRiw4QkFBOEI7UUFDOUIsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUUsQ0FBQyxDQUFBO0lBQzVILENBQUM7O0FBOVRILDBDQStUQzs7O0FBN1RDLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ0csOEJBQWMsR0FBRywyQkFBMkIsQUFBOUIsQ0FBK0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAyMSwgMjAyNlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbiAqL1xuXG4vLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvbmV3cmVsaWMvbmV3cmVsaWMvMy44MC4yL2RvY3MvcmVzb3VyY2VzL21vbml0b3JfZG93bnRpbWVcbi8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBjZGt0biBmcm9tICdjZGt0bic7XG5cbi8vIENvbmZpZ3VyYXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBNb25pdG9yRG93bnRpbWVDb25maWcgZXh0ZW5kcyBjZGt0bi5UZXJyYWZvcm1NZXRhQXJndW1lbnRzIHtcbiAgLyoqXG4gICogVGhlIElEIG9mIHRoZSBOZXcgUmVsaWMgYWNjb3VudCBpbiB3aGljaCB0aGUgTW9uaXRvciBEb3dudGltZSBzaGFsbCBiZSBjcmVhdGVkLiBEZWZhdWx0cyB0byB0aGUgYGFjY291bnRfaWRgIGluIHRoZSBwcm92aWRlcnt9IGNvbmZpZ3VyYXRpb24gaWYgbm90IHNwZWNpZmllZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lI2FjY291bnRfaWQgTW9uaXRvckRvd250aW1lI2FjY291bnRfaWR9XG4gICovXG4gIHJlYWRvbmx5IGFjY291bnRJZD86IG51bWJlcjtcbiAgLyoqXG4gICogQSBkYXRldGltZSBzdGFtcCBzaWduaWZ5aW5nIHRoZSBlbmQgb2YgdGhlIE1vbml0b3IgRG93bnRpbWUuXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9uZXdyZWxpYy9uZXdyZWxpYy8zLjgwLjIvZG9jcy9yZXNvdXJjZXMvbW9uaXRvcl9kb3dudGltZSNlbmRfdGltZSBNb25pdG9yRG93bnRpbWUjZW5kX3RpbWV9XG4gICovXG4gIHJlYWRvbmx5IGVuZFRpbWU6IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvbmV3cmVsaWMvbmV3cmVsaWMvMy44MC4yL2RvY3MvcmVzb3VyY2VzL21vbml0b3JfZG93bnRpbWUjaWQgTW9uaXRvckRvd250aW1lI2lkfVxuICAqXG4gICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgdGhlIGlkIGZpZWxkIGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQgdG8gYWxsIHJlc291cmNlcyBpbiBUZXJyYWZvcm0gcHJvdmlkZXJzIHVzaW5nIGEgVGVycmFmb3JtIHByb3ZpZGVyIFNESyB2ZXJzaW9uIGJlbG93IDIuXG4gICogSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXMgc2V0dGluZyB0aGlzIHZhbHVlIGl0IG1pZ2h0IG5vdCBiZSBzZXR0YWJsZS4gUGxlYXNlIHRha2UgYSBsb29rIGF0IHRoZSBwcm92aWRlciBkb2N1bWVudGF0aW9uIHRvIGVuc3VyZSBpdCBzaG91bGQgYmUgc2V0dGFibGUuXG4gICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICAvKipcbiAgKiBBIGxpc3Qgb2YgbWFpbnRlbmFuY2UgZGF5cyB0byBiZSBpbmNsdWRlZCB3aXRoIHRoZSBjcmVhdGVkIHdlZWtseSBNb25pdG9yIERvd250aW1lLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvbmV3cmVsaWMvbmV3cmVsaWMvMy44MC4yL2RvY3MvcmVzb3VyY2VzL21vbml0b3JfZG93bnRpbWUjbWFpbnRlbmFuY2VfZGF5cyBNb25pdG9yRG93bnRpbWUjbWFpbnRlbmFuY2VfZGF5c31cbiAgKi9cbiAgcmVhZG9ubHkgbWFpbnRlbmFuY2VEYXlzPzogc3RyaW5nW107XG4gIC8qKlxuICAqIEFuIGlkZW50aWZpZXIgb2YgdGhlIHR5cGUgb2YgTW9uaXRvciBEb3dudGltZSB0byBiZSBjcmVhdGVkLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvbmV3cmVsaWMvbmV3cmVsaWMvMy44MC4yL2RvY3MvcmVzb3VyY2VzL21vbml0b3JfZG93bnRpbWUjbW9kZSBNb25pdG9yRG93bnRpbWUjbW9kZX1cbiAgKi9cbiAgcmVhZG9ubHkgbW9kZTogc3RyaW5nO1xuICAvKipcbiAgKiBBIGxpc3Qgb2YgR1VJRHMgb2YgbW9uaXRvcnMsIHRvIHdoaWNoIHRoZSBjcmVhdGVkIE1vbml0b3IgRG93bnRpbWUgc2hhbGwgYmUgYXBwbGllZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lI21vbml0b3JfZ3VpZHMgTW9uaXRvckRvd250aW1lI21vbml0b3JfZ3VpZHN9XG4gICovXG4gIHJlYWRvbmx5IG1vbml0b3JHdWlkcz86IHN0cmluZ1tdO1xuICAvKipcbiAgKiBBIG5hbWUgdG8gaWRlbnRpZnkgdGhlIE1vbml0b3IgRG93bnRpbWUgdG8gYmUgY3JlYXRlZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lI25hbWUgTW9uaXRvckRvd250aW1lI25hbWV9XG4gICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICogQSBkYXRldGltZSBzdGFtcCBzaWduaWZ5aW5nIHRoZSBzdGFydCBvZiB0aGUgTW9uaXRvciBEb3dudGltZS5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lI3N0YXJ0X3RpbWUgTW9uaXRvckRvd250aW1lI3N0YXJ0X3RpbWV9XG4gICovXG4gIHJlYWRvbmx5IHN0YXJ0VGltZTogc3RyaW5nO1xuICAvKipcbiAgKiBUaGUgdGltZXpvbmUgdGhhdCBhcHBsaWVzIHRvIHRoZSBNb25pdG9yIERvd250aW1lIHNjaGVkdWxlLlxuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvbmV3cmVsaWMvbmV3cmVsaWMvMy44MC4yL2RvY3MvcmVzb3VyY2VzL21vbml0b3JfZG93bnRpbWUjdGltZV96b25lIE1vbml0b3JEb3dudGltZSN0aW1lX3pvbmV9XG4gICovXG4gIHJlYWRvbmx5IHRpbWVab25lOiBzdHJpbmc7XG4gIC8qKlxuICAqIGVuZF9yZXBlYXQgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lI2VuZF9yZXBlYXQgTW9uaXRvckRvd250aW1lI2VuZF9yZXBlYXR9XG4gICovXG4gIHJlYWRvbmx5IGVuZFJlcGVhdD86IE1vbml0b3JEb3dudGltZUVuZFJlcGVhdDtcbiAgLyoqXG4gICogZnJlcXVlbmN5IGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9uZXdyZWxpYy9uZXdyZWxpYy8zLjgwLjIvZG9jcy9yZXNvdXJjZXMvbW9uaXRvcl9kb3dudGltZSNmcmVxdWVuY3kgTW9uaXRvckRvd250aW1lI2ZyZXF1ZW5jeX1cbiAgKi9cbiAgcmVhZG9ubHkgZnJlcXVlbmN5PzogTW9uaXRvckRvd250aW1lRnJlcXVlbmN5O1xufVxuZXhwb3J0IGludGVyZmFjZSBNb25pdG9yRG93bnRpbWVFbmRSZXBlYXQge1xuICAvKipcbiAgKiBBIGRhdGUsIG9uIHdoaWNoIHRoZSBNb25pdG9yIERvd250aW1lJ3MgcmVwZWF0IGN5Y2xlIGlzIGV4cGVjdGVkIHRvIGVuZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lI29uX2RhdGUgTW9uaXRvckRvd250aW1lI29uX2RhdGV9XG4gICovXG4gIHJlYWRvbmx5IG9uRGF0ZT86IHN0cmluZztcbiAgLyoqXG4gICogTnVtYmVyIG9mIHJlcGV0aXRpb25zIGFmdGVyIHdoaWNoIHRoZSBNb25pdG9yIERvd250aW1lJ3MgcmVwZWF0IGN5Y2xlIGlzIGV4cGVjdGVkIHRvIGVuZC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lI29uX3JlcGVhdCBNb25pdG9yRG93bnRpbWUjb25fcmVwZWF0fVxuICAqL1xuICByZWFkb25seSBvblJlcGVhdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vbml0b3JEb3dudGltZUVuZFJlcGVhdFRvVGVycmFmb3JtKHN0cnVjdD86IE1vbml0b3JEb3dudGltZUVuZFJlcGVhdE91dHB1dFJlZmVyZW5jZSB8IE1vbml0b3JEb3dudGltZUVuZFJlcGVhdCk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvbl9kYXRlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLm9uRGF0ZSksXG4gICAgb25fcmVwZWF0OiBjZGt0bi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLm9uUmVwZWF0KSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBtb25pdG9yRG93bnRpbWVFbmRSZXBlYXRUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBNb25pdG9yRG93bnRpbWVFbmRSZXBlYXRPdXRwdXRSZWZlcmVuY2UgfCBNb25pdG9yRG93bnRpbWVFbmRSZXBlYXQpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIG9uX2RhdGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm9uRGF0ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgb25fcmVwZWF0OiB7XG4gICAgICB2YWx1ZTogY2RrdG4ubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5vblJlcGVhdCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb25pdG9yRG93bnRpbWVFbmRSZXBlYXRPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IE1vbml0b3JEb3dudGltZUVuZFJlcGVhdCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fb25EYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm9uRGF0ZSA9IHRoaXMuX29uRGF0ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX29uUmVwZWF0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm9uUmVwZWF0ID0gdGhpcy5fb25SZXBlYXQ7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBNb25pdG9yRG93bnRpbWVFbmRSZXBlYXQgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9vbkRhdGUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9vblJlcGVhdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5fb25EYXRlID0gdmFsdWUub25EYXRlO1xuICAgICAgdGhpcy5fb25SZXBlYXQgPSB2YWx1ZS5vblJlcGVhdDtcbiAgICB9XG4gIH1cblxuICAvLyBvbl9kYXRlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX29uRGF0ZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgb25EYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnb25fZGF0ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgb25EYXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9vbkRhdGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRPbkRhdGUoKSB7XG4gICAgdGhpcy5fb25EYXRlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBvbkRhdGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb25EYXRlO1xuICB9XG5cbiAgLy8gb25fcmVwZWF0IC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX29uUmVwZWF0PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBvblJlcGVhdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ29uX3JlcGVhdCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgb25SZXBlYXQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX29uUmVwZWF0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0T25SZXBlYXQoKSB7XG4gICAgdGhpcy5fb25SZXBlYXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG9uUmVwZWF0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29uUmVwZWF0O1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeURheXNPZldlZWsge1xuICAvKipcbiAgKiBBbiBvY2N1cnJlbmNlIG9mIHRoZSBkYXkgc2VsZWN0ZWQgd2l0aGluIHRoZSBtb250aC5cbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lI29yZGluYWxfZGF5X29mX21vbnRoIE1vbml0b3JEb3dudGltZSNvcmRpbmFsX2RheV9vZl9tb250aH1cbiAgKi9cbiAgcmVhZG9ubHkgb3JkaW5hbERheU9mTW9udGg6IHN0cmluZztcbiAgLyoqXG4gICogVGhlIGRheSBvZiB0aGUgd2VlayBvbiB3aGljaCB0aGUgTW9uaXRvciBEb3dudGltZSB3b3VsZCBydW4uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9uZXdyZWxpYy9uZXdyZWxpYy8zLjgwLjIvZG9jcy9yZXNvdXJjZXMvbW9uaXRvcl9kb3dudGltZSN3ZWVrX2RheSBNb25pdG9yRG93bnRpbWUjd2Vla19kYXl9XG4gICovXG4gIHJlYWRvbmx5IHdlZWtEYXk6IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vbml0b3JEb3dudGltZUZyZXF1ZW5jeURheXNPZldlZWtUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBNb25pdG9yRG93bnRpbWVGcmVxdWVuY3lEYXlzT2ZXZWVrT3V0cHV0UmVmZXJlbmNlIHwgTW9uaXRvckRvd250aW1lRnJlcXVlbmN5RGF5c09mV2Vlayk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcmRpbmFsX2RheV9vZl9tb250aDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5vcmRpbmFsRGF5T2ZNb250aCksXG4gICAgd2Vla19kYXk6IGNka3RuLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEud2Vla0RheSksXG4gIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gbW9uaXRvckRvd250aW1lRnJlcXVlbmN5RGF5c09mV2Vla1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeURheXNPZldlZWtPdXRwdXRSZWZlcmVuY2UgfCBNb25pdG9yRG93bnRpbWVGcmVxdWVuY3lEYXlzT2ZXZWVrKTogYW55IHtcbiAgaWYgKCFjZGt0bi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdG4uVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RuLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICBvcmRpbmFsX2RheV9vZl9tb250aDoge1xuICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEub3JkaW5hbERheU9mTW9udGgpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHdlZWtfZGF5OiB7XG4gICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS53ZWVrRGF5KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeURheXNPZldlZWtPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeURheXNPZldlZWsgfCB1bmRlZmluZWQge1xuICAgIGxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XG4gICAgY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHRoaXMuX29yZGluYWxEYXlPZk1vbnRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm9yZGluYWxEYXlPZk1vbnRoID0gdGhpcy5fb3JkaW5hbERheU9mTW9udGg7XG4gICAgfVxuICAgIGlmICh0aGlzLl93ZWVrRGF5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LndlZWtEYXkgPSB0aGlzLl93ZWVrRGF5O1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogTW9uaXRvckRvd250aW1lRnJlcXVlbmN5RGF5c09mV2VlayB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMuX29yZGluYWxEYXlPZk1vbnRoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fd2Vla0RheSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5fb3JkaW5hbERheU9mTW9udGggPSB2YWx1ZS5vcmRpbmFsRGF5T2ZNb250aDtcbiAgICAgIHRoaXMuX3dlZWtEYXkgPSB2YWx1ZS53ZWVrRGF5O1xuICAgIH1cbiAgfVxuXG4gIC8vIG9yZGluYWxfZGF5X29mX21vbnRoIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX29yZGluYWxEYXlPZk1vbnRoPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBvcmRpbmFsRGF5T2ZNb250aCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ29yZGluYWxfZGF5X29mX21vbnRoJyk7XG4gIH1cbiAgcHVibGljIHNldCBvcmRpbmFsRGF5T2ZNb250aCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fb3JkaW5hbERheU9mTW9udGggPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgb3JkaW5hbERheU9mTW9udGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3JkaW5hbERheU9mTW9udGg7XG4gIH1cblxuICAvLyB3ZWVrX2RheSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF93ZWVrRGF5Pzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB3ZWVrRGF5KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnd2Vla19kYXknKTtcbiAgfVxuICBwdWJsaWMgc2V0IHdlZWtEYXkodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3dlZWtEYXkgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgd2Vla0RheUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl93ZWVrRGF5O1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeSB7XG4gIC8qKlxuICAqIEEgbnVtZXJpY2FsIGxpc3Qgb2YgZGF5cyBvZiBhIG1vbnRoIG9uIHdoaWNoIHRoZSBNb25pdG9yIERvd250aW1lIGlzIHNjaGVkdWxlZCB0byBydW4uXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9uZXdyZWxpYy9uZXdyZWxpYy8zLjgwLjIvZG9jcy9yZXNvdXJjZXMvbW9uaXRvcl9kb3dudGltZSNkYXlzX29mX21vbnRoIE1vbml0b3JEb3dudGltZSNkYXlzX29mX21vbnRofVxuICAqL1xuICByZWFkb25seSBkYXlzT2ZNb250aD86IG51bWJlcltdO1xuICAvKipcbiAgKiBkYXlzX29mX3dlZWsgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lI2RheXNfb2Zfd2VlayBNb25pdG9yRG93bnRpbWUjZGF5c19vZl93ZWVrfVxuICAqL1xuICByZWFkb25seSBkYXlzT2ZXZWVrPzogTW9uaXRvckRvd250aW1lRnJlcXVlbmN5RGF5c09mV2Vlaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vbml0b3JEb3dudGltZUZyZXF1ZW5jeVRvVGVycmFmb3JtKHN0cnVjdD86IE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeU91dHB1dFJlZmVyZW5jZSB8IE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeSk6IGFueSB7XG4gIGlmICghY2RrdG4uY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RuLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0bi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBkYXlzX29mX21vbnRoOiBjZGt0bi5saXN0TWFwcGVyKGNka3RuLm51bWJlclRvVGVycmFmb3JtLCBmYWxzZSkoc3RydWN0IS5kYXlzT2ZNb250aCksXG4gICAgZGF5c19vZl93ZWVrOiBtb25pdG9yRG93bnRpbWVGcmVxdWVuY3lEYXlzT2ZXZWVrVG9UZXJyYWZvcm0oc3RydWN0IS5kYXlzT2ZXZWVrKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBtb25pdG9yRG93bnRpbWVGcmVxdWVuY3lUb0hjbFRlcnJhZm9ybShzdHJ1Y3Q/OiBNb25pdG9yRG93bnRpbWVGcmVxdWVuY3lPdXRwdXRSZWZlcmVuY2UgfCBNb25pdG9yRG93bnRpbWVGcmVxdWVuY3kpOiBhbnkge1xuICBpZiAoIWNka3RuLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0bi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdG4uaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIGRheXNfb2ZfbW9udGg6IHtcbiAgICAgIHZhbHVlOiBjZGt0bi5saXN0TWFwcGVySGNsKGNka3RuLm51bWJlclRvSGNsVGVycmFmb3JtLCBmYWxzZSkoc3RydWN0IS5kYXlzT2ZNb250aCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlckxpc3RcIixcbiAgICB9LFxuICAgIGRheXNfb2Zfd2Vlazoge1xuICAgICAgdmFsdWU6IG1vbml0b3JEb3dudGltZUZyZXF1ZW5jeURheXNPZldlZWtUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmRheXNPZldlZWspLFxuICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJNb25pdG9yRG93bnRpbWVGcmVxdWVuY3lEYXlzT2ZXZWVrTGlzdFwiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb25pdG9yRG93bnRpbWVGcmVxdWVuY3lPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0bi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdG4uSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fZGF5c09mTW9udGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZGF5c09mTW9udGggPSB0aGlzLl9kYXlzT2ZNb250aDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RheXNPZldlZWs/LmludGVybmFsVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZGF5c09mV2VlayA9IHRoaXMuX2RheXNPZldlZWs/LmludGVybmFsVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBoYXNBbnlWYWx1ZXMgPyBpbnRlcm5hbFZhbHVlUmVzdWx0IDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBpbnRlcm5hbFZhbHVlKHZhbHVlOiBNb25pdG9yRG93bnRpbWVGcmVxdWVuY3kgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9kYXlzT2ZNb250aCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2RheXNPZldlZWsuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgdGhpcy5fZGF5c09mTW9udGggPSB2YWx1ZS5kYXlzT2ZNb250aDtcbiAgICAgIHRoaXMuX2RheXNPZldlZWsuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlLmRheXNPZldlZWs7XG4gICAgfVxuICB9XG5cbiAgLy8gZGF5c19vZl9tb250aCAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kYXlzT2ZNb250aD86IG51bWJlcltdOyBcbiAgcHVibGljIGdldCBkYXlzT2ZNb250aCgpIHtcbiAgICByZXR1cm4gY2RrdG4uVG9rZW4uYXNOdW1iZXJMaXN0KGNka3RuLkZuLnRvbGlzdCh0aGlzLmdldE51bWJlckxpc3RBdHRyaWJ1dGUoJ2RheXNfb2ZfbW9udGgnKSkpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGF5c09mTW9udGgodmFsdWU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5fZGF5c09mTW9udGggPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREYXlzT2ZNb250aCgpIHtcbiAgICB0aGlzLl9kYXlzT2ZNb250aCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGF5c09mTW9udGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF5c09mTW9udGg7XG4gIH1cblxuICAvLyBkYXlzX29mX3dlZWsgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZGF5c09mV2VlayA9IG5ldyBNb25pdG9yRG93bnRpbWVGcmVxdWVuY3lEYXlzT2ZXZWVrT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwiZGF5c19vZl93ZWVrXCIpO1xuICBwdWJsaWMgZ2V0IGRheXNPZldlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RheXNPZldlZWs7XG4gIH1cbiAgcHVibGljIHB1dERheXNPZldlZWsodmFsdWU6IE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeURheXNPZldlZWspIHtcbiAgICB0aGlzLl9kYXlzT2ZXZWVrLmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREYXlzT2ZXZWVrKCkge1xuICAgIHRoaXMuX2RheXNPZldlZWsuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGF5c09mV2Vla0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kYXlzT2ZXZWVrLmludGVybmFsVmFsdWU7XG4gIH1cbn1cblxuLyoqXG4qIFJlcHJlc2VudHMgYSB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL25ld3JlbGljL25ld3JlbGljLzMuODAuMi9kb2NzL3Jlc291cmNlcy9tb25pdG9yX2Rvd250aW1lIG5ld3JlbGljX21vbml0b3JfZG93bnRpbWV9XG4qL1xuZXhwb3J0IGNsYXNzIE1vbml0b3JEb3dudGltZSBleHRlbmRzIGNka3RuLlRlcnJhZm9ybVJlc291cmNlIHtcblxuICAvLyA9PT09PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgUFJPUEVSVElFU1xuICAvLyA9PT09PT09PT09PT09PT09PVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHRmUmVzb3VyY2VUeXBlID0gXCJuZXdyZWxpY19tb25pdG9yX2Rvd250aW1lXCI7XG5cbiAgLy8gPT09PT09PT09PT09PT1cbiAgLy8gU1RBVElDIE1ldGhvZHNcbiAgLy8gPT09PT09PT09PT09PT1cbiAgLyoqXG4gICogR2VuZXJhdGVzIENES1ROIGNvZGUgZm9yIGltcG9ydGluZyBhIE1vbml0b3JEb3dudGltZSByZXNvdXJjZSB1cG9uIHJ1bm5pbmcgXCJjZGt0biBwbGFuIDxzdGFjay1uYW1lPlwiXG4gICogQHBhcmFtIHNjb3BlIFRoZSBzY29wZSBpbiB3aGljaCB0byBkZWZpbmUgdGhpcyBjb25zdHJ1Y3RcbiAgKiBAcGFyYW0gaW1wb3J0VG9JZCBUaGUgY29uc3RydWN0IGlkIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBjb25maWcgZm9yIHRoZSBNb25pdG9yRG93bnRpbWUgdG8gaW1wb3J0XG4gICogQHBhcmFtIGltcG9ydEZyb21JZCBUaGUgaWQgb2YgdGhlIGV4aXN0aW5nIE1vbml0b3JEb3dudGltZSB0aGF0IHNob3VsZCBiZSBpbXBvcnRlZC4gUmVmZXIgdG8gdGhlIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvbmV3cmVsaWMvbmV3cmVsaWMvMy44MC4yL2RvY3MvcmVzb3VyY2VzL21vbml0b3JfZG93bnRpbWUjaW1wb3J0IGltcG9ydCBzZWN0aW9ufSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIHJlc291cmNlIGZvciB0aGUgaWQgdG8gdXNlXG4gICogQHBhcmFtIHByb3ZpZGVyPyBPcHRpb25hbCBpbnN0YW5jZSBvZiB0aGUgcHJvdmlkZXIgd2hlcmUgdGhlIE1vbml0b3JEb3dudGltZSB0byBpbXBvcnQgaXMgZm91bmRcbiAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUNvbmZpZ0ZvckltcG9ydChzY29wZTogQ29uc3RydWN0LCBpbXBvcnRUb0lkOiBzdHJpbmcsIGltcG9ydEZyb21JZDogc3RyaW5nLCBwcm92aWRlcj86IGNka3RuLlRlcnJhZm9ybVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgY2RrdG4uSW1wb3J0YWJsZVJlc291cmNlKHNjb3BlLCBpbXBvcnRUb0lkLCB7IHRlcnJhZm9ybVJlc291cmNlVHlwZTogXCJuZXdyZWxpY19tb25pdG9yX2Rvd250aW1lXCIsIGltcG9ydElkOiBpbXBvcnRGcm9tSWQsIHByb3ZpZGVyIH0pO1xuICAgICAgfVxuXG4gIC8vID09PT09PT09PT09XG4gIC8vIElOSVRJQUxJWkVSXG4gIC8vID09PT09PT09PT09XG5cbiAgLyoqXG4gICogQ3JlYXRlIGEgbmV3IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvbmV3cmVsaWMvbmV3cmVsaWMvMy44MC4yL2RvY3MvcmVzb3VyY2VzL21vbml0b3JfZG93bnRpbWUgbmV3cmVsaWNfbW9uaXRvcl9kb3dudGltZX0gUmVzb3VyY2VcbiAgKlxuICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICogQHBhcmFtIGlkIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSBhbW9uZ3N0IHNpYmxpbmdzIGluIHRoZSBzYW1lIHNjb3BlXG4gICogQHBhcmFtIG9wdGlvbnMgTW9uaXRvckRvd250aW1lQ29uZmlnXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IE1vbml0b3JEb3dudGltZUNvbmZpZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdGVycmFmb3JtUmVzb3VyY2VUeXBlOiAnbmV3cmVsaWNfbW9uaXRvcl9kb3dudGltZScsXG4gICAgICB0ZXJyYWZvcm1HZW5lcmF0b3JNZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlck5hbWU6ICduZXdyZWxpYycsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbjogJzMuODAuMicsXG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbkNvbnN0cmFpbnQ6ICd+PiAzLjcnXG4gICAgICB9LFxuICAgICAgcHJvdmlkZXI6IGNvbmZpZy5wcm92aWRlcixcbiAgICAgIGRlcGVuZHNPbjogY29uZmlnLmRlcGVuZHNPbixcbiAgICAgIGNvdW50OiBjb25maWcuY291bnQsXG4gICAgICBsaWZlY3ljbGU6IGNvbmZpZy5saWZlY3ljbGUsXG4gICAgICBwcm92aXNpb25lcnM6IGNvbmZpZy5wcm92aXNpb25lcnMsXG4gICAgICBjb25uZWN0aW9uOiBjb25maWcuY29ubmVjdGlvbixcbiAgICAgIGZvckVhY2g6IGNvbmZpZy5mb3JFYWNoXG4gICAgfSk7XG4gICAgdGhpcy5fYWNjb3VudElkID0gY29uZmlnLmFjY291bnRJZDtcbiAgICB0aGlzLl9lbmRUaW1lID0gY29uZmlnLmVuZFRpbWU7XG4gICAgdGhpcy5faWQgPSBjb25maWcuaWQ7XG4gICAgdGhpcy5fbWFpbnRlbmFuY2VEYXlzID0gY29uZmlnLm1haW50ZW5hbmNlRGF5cztcbiAgICB0aGlzLl9tb2RlID0gY29uZmlnLm1vZGU7XG4gICAgdGhpcy5fbW9uaXRvckd1aWRzID0gY29uZmlnLm1vbml0b3JHdWlkcztcbiAgICB0aGlzLl9uYW1lID0gY29uZmlnLm5hbWU7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gY29uZmlnLnN0YXJ0VGltZTtcbiAgICB0aGlzLl90aW1lWm9uZSA9IGNvbmZpZy50aW1lWm9uZTtcbiAgICB0aGlzLl9lbmRSZXBlYXQuaW50ZXJuYWxWYWx1ZSA9IGNvbmZpZy5lbmRSZXBlYXQ7XG4gICAgdGhpcy5fZnJlcXVlbmN5LmludGVybmFsVmFsdWUgPSBjb25maWcuZnJlcXVlbmN5O1xuICB9XG5cbiAgLy8gPT09PT09PT09PVxuICAvLyBBVFRSSUJVVEVTXG4gIC8vID09PT09PT09PT1cblxuICAvLyBhY2NvdW50X2lkIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYWNjb3VudElkPzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBhY2NvdW50SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdhY2NvdW50X2lkJyk7XG4gIH1cbiAgcHVibGljIHNldCBhY2NvdW50SWQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2FjY291bnRJZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEFjY291bnRJZCgpIHtcbiAgICB0aGlzLl9hY2NvdW50SWQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGFjY291bnRJZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9hY2NvdW50SWQ7XG4gIH1cblxuICAvLyBlbmRfdGltZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF9lbmRUaW1lPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBlbmRUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZW5kX3RpbWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGVuZFRpbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2VuZFRpbWUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZW5kVGltZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmRUaW1lO1xuICB9XG5cbiAgLy8gaWQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdpZCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SWQoKSB7XG4gICAgdGhpcy5faWQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGlkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgLy8gbWFpbnRlbmFuY2VfZGF5cyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYWludGVuYW5jZURheXM/OiBzdHJpbmdbXTsgXG4gIHB1YmxpYyBnZXQgbWFpbnRlbmFuY2VEYXlzKCkge1xuICAgIHJldHVybiBjZGt0bi5Gbi50b2xpc3QodGhpcy5nZXRMaXN0QXR0cmlidXRlKCdtYWludGVuYW5jZV9kYXlzJykpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWFpbnRlbmFuY2VEYXlzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuX21haW50ZW5hbmNlRGF5cyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE1haW50ZW5hbmNlRGF5cygpIHtcbiAgICB0aGlzLl9tYWludGVuYW5jZURheXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG1haW50ZW5hbmNlRGF5c0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYWludGVuYW5jZURheXM7XG4gIH1cblxuICAvLyBtb2RlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX21vZGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdtb2RlJyk7XG4gIH1cbiAgcHVibGljIHNldCBtb2RlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG1vZGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuXG4gIC8vIG1vbml0b3JfZ3VpZHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbW9uaXRvckd1aWRzPzogc3RyaW5nW107IFxuICBwdWJsaWMgZ2V0IG1vbml0b3JHdWlkcygpIHtcbiAgICByZXR1cm4gY2RrdG4uRm4udG9saXN0KHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnbW9uaXRvcl9ndWlkcycpKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1vbml0b3JHdWlkcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICB0aGlzLl9tb25pdG9yR3VpZHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNb25pdG9yR3VpZHMoKSB7XG4gICAgdGhpcy5fbW9uaXRvckd1aWRzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtb25pdG9yR3VpZHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbW9uaXRvckd1aWRzO1xuICB9XG5cbiAgLy8gbmFtZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF9uYW1lPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbmFtZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgbmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbmFtZSA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBuYW1lSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICAvLyBzdGFydF90aW1lIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3N0YXJ0VGltZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgc3RhcnRUaW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnc3RhcnRfdGltZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgc3RhcnRUaW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zdGFydFRpbWUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc3RhcnRUaW1lSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZTtcbiAgfVxuXG4gIC8vIHRpbWVfem9uZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IGZhbHNlLCByZXF1aXJlZDogdHJ1ZVxuICBwcml2YXRlIF90aW1lWm9uZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdGltZVpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0aW1lX3pvbmUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpbWVab25lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aW1lWm9uZSA9IHZhbHVlO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0aW1lWm9uZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lWm9uZTtcbiAgfVxuXG4gIC8vIGVuZF9yZXBlYXQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZW5kUmVwZWF0ID0gbmV3IE1vbml0b3JEb3dudGltZUVuZFJlcGVhdE91dHB1dFJlZmVyZW5jZSh0aGlzLCBcImVuZF9yZXBlYXRcIik7XG4gIHB1YmxpYyBnZXQgZW5kUmVwZWF0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmRSZXBlYXQ7XG4gIH1cbiAgcHVibGljIHB1dEVuZFJlcGVhdCh2YWx1ZTogTW9uaXRvckRvd250aW1lRW5kUmVwZWF0KSB7XG4gICAgdGhpcy5fZW5kUmVwZWF0LmludGVybmFsVmFsdWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRFbmRSZXBlYXQoKSB7XG4gICAgdGhpcy5fZW5kUmVwZWF0LmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGVuZFJlcGVhdElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9lbmRSZXBlYXQuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIGZyZXF1ZW5jeSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9mcmVxdWVuY3kgPSBuZXcgTW9uaXRvckRvd250aW1lRnJlcXVlbmN5T3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwiZnJlcXVlbmN5XCIpO1xuICBwdWJsaWMgZ2V0IGZyZXF1ZW5jeSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnJlcXVlbmN5O1xuICB9XG4gIHB1YmxpYyBwdXRGcmVxdWVuY3kodmFsdWU6IE1vbml0b3JEb3dudGltZUZyZXF1ZW5jeSkge1xuICAgIHRoaXMuX2ZyZXF1ZW5jeS5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RnJlcXVlbmN5KCkge1xuICAgIHRoaXMuX2ZyZXF1ZW5jeS5pbnRlcm5hbFZhbHVlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBmcmVxdWVuY3lJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnJlcXVlbmN5LmludGVybmFsVmFsdWU7XG4gIH1cblxuICAvLyA9PT09PT09PT1cbiAgLy8gU1lOVEhFU0lTXG4gIC8vID09PT09PT09PVxuXG4gIHByb3RlY3RlZCBzeW50aGVzaXplQXR0cmlidXRlcygpOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnRfaWQ6IGNka3RuLm51bWJlclRvVGVycmFmb3JtKHRoaXMuX2FjY291bnRJZCksXG4gICAgICBlbmRfdGltZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fZW5kVGltZSksXG4gICAgICBpZDogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5faWQpLFxuICAgICAgbWFpbnRlbmFuY2VfZGF5czogY2RrdG4ubGlzdE1hcHBlcihjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX21haW50ZW5hbmNlRGF5cyksXG4gICAgICBtb2RlOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9tb2RlKSxcbiAgICAgIG1vbml0b3JfZ3VpZHM6IGNka3RuLmxpc3RNYXBwZXIoY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0sIGZhbHNlKSh0aGlzLl9tb25pdG9yR3VpZHMpLFxuICAgICAgbmFtZTogY2RrdG4uc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fbmFtZSksXG4gICAgICBzdGFydF90aW1lOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9zdGFydFRpbWUpLFxuICAgICAgdGltZV96b25lOiBjZGt0bi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl90aW1lWm9uZSksXG4gICAgICBlbmRfcmVwZWF0OiBtb25pdG9yRG93bnRpbWVFbmRSZXBlYXRUb1RlcnJhZm9ybSh0aGlzLl9lbmRSZXBlYXQuaW50ZXJuYWxWYWx1ZSksXG4gICAgICBmcmVxdWVuY3k6IG1vbml0b3JEb3dudGltZUZyZXF1ZW5jeVRvVGVycmFmb3JtKHRoaXMuX2ZyZXF1ZW5jeS5pbnRlcm5hbFZhbHVlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgIGFjY291bnRfaWQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLm51bWJlclRvSGNsVGVycmFmb3JtKHRoaXMuX2FjY291bnRJZCksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgICAgfSxcbiAgICAgIGVuZF90aW1lOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9lbmRUaW1lKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgaWQ6IHtcbiAgICAgICAgdmFsdWU6IGNka3RuLnN0cmluZ1RvSGNsVGVycmFmb3JtKHRoaXMuX2lkKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgbWFpbnRlbmFuY2VfZGF5czoge1xuICAgICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX21haW50ZW5hbmNlRGF5cyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBtb2RlOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9tb2RlKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgbW9uaXRvcl9ndWlkczoge1xuICAgICAgICB2YWx1ZTogY2RrdG4ubGlzdE1hcHBlckhjbChjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSwgZmFsc2UpKHRoaXMuX21vbml0b3JHdWlkcyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNldFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ0xpc3RcIixcbiAgICAgIH0sXG4gICAgICBuYW1lOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9uYW1lKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgc3RhcnRfdGltZToge1xuICAgICAgICB2YWx1ZTogY2RrdG4uc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fc3RhcnRUaW1lKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgdGltZV96b25lOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0bi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl90aW1lWm9uZSksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGVuZF9yZXBlYXQ6IHtcbiAgICAgICAgdmFsdWU6IG1vbml0b3JEb3dudGltZUVuZFJlcGVhdFRvSGNsVGVycmFmb3JtKHRoaXMuX2VuZFJlcGVhdC5pbnRlcm5hbFZhbHVlKSxcbiAgICAgICAgaXNCbG9jazogdHJ1ZSxcbiAgICAgICAgdHlwZTogXCJsaXN0XCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiTW9uaXRvckRvd250aW1lRW5kUmVwZWF0TGlzdFwiLFxuICAgICAgfSxcbiAgICAgIGZyZXF1ZW5jeToge1xuICAgICAgICB2YWx1ZTogbW9uaXRvckRvd250aW1lRnJlcXVlbmN5VG9IY2xUZXJyYWZvcm0odGhpcy5fZnJlcXVlbmN5LmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJNb25pdG9yRG93bnRpbWVGcmVxdWVuY3lMaXN0XCIsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCApKVxuICB9XG59XG4iXX0=