@gravitee/ui-components 3.24.4 → 3.24.5-renovate-github-markdown-css-5-x-d2ffdad
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1260 -0
- package/LICENSE.txt +202 -0
- package/README.md +195 -0
- package/assets/css/github-markdown-css/github-markdown.css +500 -545
- package/assets/i18n/en.json +0 -3
- package/assets/i18n/fr.json +0 -3
- package/package.json +19 -21
- package/src/.eslintrc.js +19 -0
- package/src/atoms/gv-autocomplete.js +156 -132
- package/src/atoms/gv-button.js +248 -73
- package/src/atoms/gv-checkbox.js +103 -45
- package/src/atoms/gv-date-picker-calendar.js +393 -312
- package/src/atoms/gv-date-picker-cell.js +81 -57
- package/src/atoms/gv-date-picker.js +319 -180
- package/src/atoms/gv-file-upload.js +195 -85
- package/src/atoms/gv-icon.js +34 -13
- package/src/atoms/gv-image.js +66 -31
- package/src/atoms/gv-input-message.js +37 -12
- package/src/atoms/gv-input.js +169 -139
- package/src/atoms/gv-link.js +125 -47
- package/src/atoms/gv-message.js +69 -18
- package/src/atoms/gv-metric.js +68 -19
- package/src/atoms/gv-relative-time.js +38 -67
- package/src/atoms/gv-select-native.js +215 -96
- package/src/atoms/gv-select.js +230 -110
- package/src/atoms/gv-spinner.js +26 -5
- package/src/atoms/gv-state.js +66 -25
- package/src/atoms/gv-switch.js +160 -40
- package/src/atoms/gv-tag.js +78 -26
- package/src/atoms/gv-text.js +83 -22
- package/src/charts/gv-chart-bar.js +18 -22
- package/src/charts/gv-chart-gauge.js +31 -28
- package/src/charts/gv-chart-histogram.js +10 -18
- package/src/charts/gv-chart-line.js +59 -70
- package/src/charts/gv-chart-map.js +42 -44
- package/src/charts/gv-chart-pie.js +14 -18
- package/src/index.js +0 -2
- package/src/lib/cron-expression.js +35 -40
- package/src/lib/date.js +1 -10
- package/src/lib/events.js +1 -3
- package/src/lib/http-client-schema-form.js +12 -13
- package/src/lib/http.js +56 -57
- package/src/lib/i18n.js +22 -30
- package/src/lib/item.js +12 -13
- package/src/lib/properties.js +42 -77
- package/src/lib/schema-form.js +5 -4
- package/src/lib/studio.js +60 -13
- package/src/lib/style.js +8 -8
- package/src/lib/text-format.js +7 -14
- package/src/lib/theme.js +5 -8
- package/src/lib/utils.js +18 -17
- package/src/mixins/chart-element.js +54 -31
- package/src/mixins/input-element.js +49 -60
- package/src/mixins/item-resource.js +32 -34
- package/src/mixins/keyboard-element.js +5 -6
- package/src/mixins/update-after-browser.js +1 -4
- package/src/mixins/with-resize-observer.js +13 -23
- package/src/mixins/with-skeleton-attribute.js +48 -54
- package/src/molecules/gv-card-full.js +147 -26
- package/src/molecules/gv-card-list.js +42 -13
- package/src/molecules/gv-card.js +91 -17
- package/src/molecules/gv-category-list.js +17 -6
- package/src/molecules/gv-category.js +103 -23
- package/src/molecules/gv-code.js +263 -189
- package/src/molecules/gv-confirm.js +71 -41
- package/src/molecules/gv-cron-editor.js +389 -143
- package/src/molecules/gv-dropdown-menu.js +46 -14
- package/src/molecules/gv-expandable.js +59 -31
- package/src/molecules/gv-expression-language.js +208 -552
- package/src/molecules/gv-identity-picture.js +65 -42
- package/src/molecules/gv-list.js +134 -42
- package/src/molecules/gv-metrics.js +49 -37
- package/src/molecules/gv-modal.js +95 -28
- package/src/molecules/gv-nav.js +75 -49
- package/src/molecules/gv-option.js +130 -57
- package/src/molecules/gv-plans.js +209 -86
- package/src/molecules/gv-popover.js +177 -57
- package/src/molecules/gv-promote.js +146 -28
- package/src/molecules/gv-rating-list.js +195 -69
- package/src/molecules/gv-rating.js +105 -52
- package/src/molecules/gv-row-expandable.js +11 -5
- package/src/molecules/gv-row.js +147 -21
- package/src/molecules/gv-stats.js +48 -23
- package/src/molecules/gv-stepper.js +187 -43
- package/src/molecules/gv-table.js +309 -199
- package/src/molecules/gv-tree.js +156 -33
- package/src/organisms/gv-documentation.js +127 -44
- package/src/organisms/gv-header.js +195 -37
- package/src/organisms/gv-http-client.js +168 -32
- package/src/organisms/gv-menu.js +158 -37
- package/src/organisms/gv-newsletter-subscription.js +189 -48
- package/src/organisms/gv-pagination.js +77 -49
- package/src/organisms/gv-properties.js +492 -271
- package/src/organisms/gv-resizable-views.js +259 -41
- package/src/organisms/gv-resources.js +275 -168
- package/src/organisms/gv-schema-form-array.js +159 -49
- package/src/organisms/gv-schema-form-control-object.js +73 -59
- package/src/organisms/gv-schema-form-control.js +134 -107
- package/src/organisms/gv-schema-form.js +280 -195
- package/src/organisms/gv-tabs.js +98 -66
- package/src/organisms/gv-user-menu.js +201 -36
- package/src/organisms/gv-vertical-menu.js +61 -20
- package/src/policy-studio/gv-flow-step.js +245 -105
- package/src/policy-studio/gv-flow.js +304 -125
- package/src/policy-studio/gv-policy-studio-menu.js +471 -157
- package/src/policy-studio/gv-policy-studio.js +761 -692
- package/src/styles/empty.js +20 -3
- package/src/styles/input.js +247 -3
- package/src/styles/link.js +16 -3
- package/src/styles/shapes.js +0 -1
- package/src/styles/skeleton.js +37 -3
- package/src/styles/zoom.js +24 -3
- package/src/theme/definition.json +1762 -0
- package/src/theme/gv-theme.js +60 -21
- package/assets/css/codemirror/all.css +0 -476
- package/src/molecules/gv-code-hint.js +0 -49
- package/wc/gv-code-hint.js +0 -1
|
@@ -24,6 +24,7 @@ import { link } from '../styles/link';
|
|
|
24
24
|
import { i18n } from '../lib/i18n';
|
|
25
25
|
import { classMap } from 'lit/directives/class-map';
|
|
26
26
|
import { dispatchCustomEvent } from '../lib/events';
|
|
27
|
+
|
|
27
28
|
/**
|
|
28
29
|
* List of ratings with answer form
|
|
29
30
|
*
|
|
@@ -51,33 +52,119 @@ import { dispatchCustomEvent } from '../lib/events';
|
|
|
51
52
|
export class GvRatingList extends LitElement {
|
|
52
53
|
static get properties() {
|
|
53
54
|
return {
|
|
54
|
-
ratings: {
|
|
55
|
-
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
},
|
|
60
|
-
permissions: {
|
|
61
|
-
type: Object
|
|
62
|
-
},
|
|
63
|
-
required: {
|
|
64
|
-
type: Boolean,
|
|
65
|
-
attribute: 'required'
|
|
66
|
-
},
|
|
67
|
-
_permissions: {
|
|
68
|
-
type: Object,
|
|
69
|
-
attribute: false
|
|
70
|
-
},
|
|
71
|
-
_ratings: {
|
|
72
|
-
type: Array,
|
|
73
|
-
attribute: false
|
|
74
|
-
}
|
|
55
|
+
ratings: { type: Array },
|
|
56
|
+
user: { type: Object },
|
|
57
|
+
permissions: { type: Object },
|
|
58
|
+
required: { type: Boolean, attribute: 'required' },
|
|
59
|
+
_permissions: { type: Object, attribute: false },
|
|
60
|
+
_ratings: { type: Array, attribute: false },
|
|
75
61
|
};
|
|
76
62
|
}
|
|
77
63
|
|
|
78
64
|
static get styles() {
|
|
79
|
-
return [
|
|
80
|
-
|
|
65
|
+
return [
|
|
66
|
+
skeleton,
|
|
67
|
+
link,
|
|
68
|
+
// language=CSS
|
|
69
|
+
css`
|
|
70
|
+
:host {
|
|
71
|
+
--s: var(--gv-rating-list--s, 18px);
|
|
72
|
+
--gv-icon--s: var(--s);
|
|
73
|
+
--gv-rating--s: var(--s);
|
|
74
|
+
margin: 0.2rem;
|
|
75
|
+
box-sizing: border-box;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.rating-list {
|
|
79
|
+
background-color: var(--gv-rating-list--bgc, var(--gv-theme-neutral-color-lightest, #ffffff));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.rating.parent {
|
|
83
|
+
border-bottom: 1px solid var(--gv-rating-list--bdc, var(--gv-theme-neutral-color, #f5f5f5));
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.rating {
|
|
87
|
+
display: flex;
|
|
88
|
+
padding: 1rem 0;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.answer .rating {
|
|
92
|
+
padding: 1rem 0 0 0;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.sub-title {
|
|
96
|
+
color: grey;
|
|
97
|
+
display: flex;
|
|
98
|
+
line-height: 20px;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
gv-confirm {
|
|
102
|
+
align-self: center;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.sub-title a.link {
|
|
106
|
+
text-decoration: underline;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
gv-identity-picture {
|
|
110
|
+
margin: 0 1rem;
|
|
111
|
+
height: 60px;
|
|
112
|
+
width: 60px;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.title {
|
|
116
|
+
display: flex;
|
|
117
|
+
line-height: 20px;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.title b,
|
|
121
|
+
.rating-content {
|
|
122
|
+
flex: 1;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.link-answer {
|
|
126
|
+
display: inline-block;
|
|
127
|
+
padding: 1rem 0;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.link-answer gv-icon {
|
|
131
|
+
margin-right: 0.2rem;
|
|
132
|
+
--gv-icon--s: var(--s);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.delete-rating,
|
|
136
|
+
.delete-answer,
|
|
137
|
+
.fake-icon {
|
|
138
|
+
--gv-icon--s: var(--s);
|
|
139
|
+
min-width: var(--s);
|
|
140
|
+
display: inline-flex;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.delete-rating {
|
|
144
|
+
padding-right: 1rem;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.answer {
|
|
148
|
+
padding: 1rem;
|
|
149
|
+
margin-top: 1rem;
|
|
150
|
+
background-color: var(--gv-rating-list-answer--bgc, var(--gv-theme-neutral-color-lighter, #fafafa));
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.answer-form {
|
|
154
|
+
display: flex;
|
|
155
|
+
flex-direction: column;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.display-name:after {
|
|
159
|
+
content: '|';
|
|
160
|
+
margin: 2px;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.actions {
|
|
164
|
+
text-align: right;
|
|
165
|
+
}
|
|
166
|
+
`,
|
|
167
|
+
];
|
|
81
168
|
}
|
|
82
169
|
|
|
83
170
|
constructor() {
|
|
@@ -87,21 +174,23 @@ export class GvRatingList extends LitElement {
|
|
|
87
174
|
update: false,
|
|
88
175
|
delete: false,
|
|
89
176
|
addAnswer: false,
|
|
90
|
-
deleteAnswer: false
|
|
177
|
+
deleteAnswer: false,
|
|
91
178
|
};
|
|
92
179
|
}
|
|
93
180
|
|
|
94
181
|
set ratings(value) {
|
|
95
|
-
Promise.resolve(value)
|
|
96
|
-
|
|
182
|
+
Promise.resolve(value)
|
|
183
|
+
.then((value) => {
|
|
184
|
+
if (value) {
|
|
185
|
+
this._skeleton = false;
|
|
186
|
+
this._ratings = value;
|
|
187
|
+
} else {
|
|
188
|
+
this._skeleton = true;
|
|
189
|
+
}
|
|
190
|
+
})
|
|
191
|
+
.catch(() => {
|
|
97
192
|
this._skeleton = false;
|
|
98
|
-
|
|
99
|
-
} else {
|
|
100
|
-
this._skeleton = true;
|
|
101
|
-
}
|
|
102
|
-
}).catch(() => {
|
|
103
|
-
this._skeleton = false;
|
|
104
|
-
});
|
|
193
|
+
});
|
|
105
194
|
}
|
|
106
195
|
|
|
107
196
|
set permissions(permissions) {
|
|
@@ -111,42 +200,33 @@ export class GvRatingList extends LitElement {
|
|
|
111
200
|
}
|
|
112
201
|
|
|
113
202
|
render() {
|
|
114
|
-
return html` <div class="rating-list">${repeat(this._ratings, rating => this._render(rating))}</div> `;
|
|
203
|
+
return html` <div class="rating-list">${repeat(this._ratings, (rating) => this._render(rating))}</div> `;
|
|
115
204
|
}
|
|
116
205
|
|
|
117
206
|
_editAnswer(rating, e) {
|
|
118
207
|
e.stopPropagation();
|
|
119
|
-
|
|
120
|
-
this._ratings.forEach(rating => rating._edit = false);
|
|
121
|
-
|
|
208
|
+
this._ratings.forEach((rating) => (rating._edit = false));
|
|
122
209
|
rating._edit = true;
|
|
123
210
|
this.performUpdate();
|
|
124
211
|
}
|
|
125
212
|
|
|
126
213
|
_getAnswerValue() {
|
|
127
214
|
const element = this.shadowRoot.querySelector('gv-text');
|
|
128
|
-
|
|
129
215
|
if (element) {
|
|
130
216
|
return element.value;
|
|
131
217
|
}
|
|
132
|
-
|
|
133
218
|
return '';
|
|
134
219
|
}
|
|
135
220
|
|
|
136
221
|
_onAnswer(rating) {
|
|
137
222
|
const answer = this._getAnswerValue();
|
|
138
|
-
|
|
139
223
|
if (answer.trim().length > 0) {
|
|
140
|
-
dispatchCustomEvent(this, 'add-answer', {
|
|
141
|
-
rating,
|
|
142
|
-
answer
|
|
143
|
-
});
|
|
224
|
+
dispatchCustomEvent(this, 'add-answer', { rating, answer });
|
|
144
225
|
}
|
|
145
226
|
}
|
|
146
227
|
|
|
147
228
|
_hasValidAnswer() {
|
|
148
229
|
const answer = this._getAnswerValue();
|
|
149
|
-
|
|
150
230
|
return answer.trim().length > 0;
|
|
151
231
|
}
|
|
152
232
|
|
|
@@ -160,46 +240,96 @@ export class GvRatingList extends LitElement {
|
|
|
160
240
|
}
|
|
161
241
|
|
|
162
242
|
_renderAnswers(rating) {
|
|
163
|
-
return html` ${rating.answers
|
|
243
|
+
return html` ${rating.answers
|
|
244
|
+
? html` ${this._canAddAnswer()
|
|
245
|
+
? html`<a class="link link-answer" @click="${this._editAnswer.bind(this, rating)}">
|
|
246
|
+
<gv-icon class="link" shape="communication:chat#5"></gv-icon> ${i18n('gv-rating-list.reply')}</a
|
|
247
|
+
>`
|
|
248
|
+
: ''}
|
|
249
|
+
${rating._edit
|
|
250
|
+
? html`
|
|
251
|
+
<div class="answer answer-form">
|
|
252
|
+
<gv-text rows="4" label="${i18n('gv-rating-list.answerLabel')}" required @input="${this.performUpdate}"></gv-text>
|
|
253
|
+
<div class="actions">
|
|
254
|
+
<gv-button primary outlined @click="${this._onClose.bind(this, rating)}">${i18n('gv-rating-list.cancel')}</gv-button>
|
|
255
|
+
<gv-button primary @click="${this._onAnswer.bind(this, rating)}" .disabled="${!this._hasValidAnswer()}"
|
|
256
|
+
>${i18n('gv-rating-list.send')}</gv-button
|
|
257
|
+
>
|
|
258
|
+
</div>
|
|
259
|
+
</div>
|
|
260
|
+
`
|
|
261
|
+
: ''}
|
|
262
|
+
<div>${repeat(rating.answers, (answer) => this._renderAnswer(rating, answer))}</div>`
|
|
263
|
+
: ''}`;
|
|
164
264
|
}
|
|
165
265
|
|
|
166
266
|
_onDelete(rating) {
|
|
167
|
-
dispatchCustomEvent(this, 'delete', {
|
|
168
|
-
rating
|
|
169
|
-
});
|
|
267
|
+
dispatchCustomEvent(this, 'delete', { rating });
|
|
170
268
|
}
|
|
171
269
|
|
|
172
270
|
_onDeleteAnswer(rating, answer) {
|
|
173
|
-
dispatchCustomEvent(this, 'delete-answer', {
|
|
174
|
-
rating,
|
|
175
|
-
answer
|
|
176
|
-
});
|
|
271
|
+
dispatchCustomEvent(this, 'delete-answer', { rating, answer });
|
|
177
272
|
}
|
|
178
273
|
|
|
179
274
|
_renderActions(data, parent) {
|
|
180
275
|
if (parent) {
|
|
181
|
-
return html`
|
|
276
|
+
return html`
|
|
277
|
+
${this._canDeleteAnswer()
|
|
278
|
+
? html`<gv-confirm
|
|
279
|
+
danger
|
|
280
|
+
icon="home:trash"
|
|
281
|
+
@gv-confirm:ok="${this._onDeleteAnswer.bind(this, parent, data)}"
|
|
282
|
+
message="${i18n('gv-rating-list.confirmAnswerDelete')}"
|
|
283
|
+
>
|
|
284
|
+
<gv-icon title="${i18n('gv-rating-list.deleteAnswer')}" class="link delete-answer" shape="home:trash"></gv-icon>
|
|
285
|
+
</gv-confirm>`
|
|
286
|
+
: ''}
|
|
287
|
+
`;
|
|
182
288
|
} else {
|
|
183
|
-
return html`
|
|
289
|
+
return html`
|
|
290
|
+
${this._canDelete(data.id)
|
|
291
|
+
? html`<gv-confirm
|
|
292
|
+
danger
|
|
293
|
+
icon="home:trash"
|
|
294
|
+
@gv-confirm:ok="${this._onDelete.bind(this, data)}"
|
|
295
|
+
message="${i18n('gv-rating-list.confirmRatingDelete')}"
|
|
296
|
+
>
|
|
297
|
+
<gv-icon title="${i18n('gv-rating-list.deleteRating')}" class="link delete-rating" shape="home:trash"></gv-icon>
|
|
298
|
+
</gv-confirm>`
|
|
299
|
+
: html`<div class="fake-icon"></div>`}
|
|
300
|
+
`;
|
|
184
301
|
}
|
|
185
302
|
}
|
|
186
303
|
|
|
187
304
|
_render(data, parent) {
|
|
188
|
-
const classes = {
|
|
189
|
-
rating: true,
|
|
190
|
-
skeleton: this._skeleton,
|
|
191
|
-
parent: parent == null
|
|
192
|
-
};
|
|
305
|
+
const classes = { rating: true, skeleton: this._skeleton, parent: parent == null };
|
|
193
306
|
const displayName = data.author && data.author.display_name ? data.author.display_name : null;
|
|
194
307
|
const picture = data.author && data.author._links && data.author._links.avatar ? data.author._links.avatar : null;
|
|
195
|
-
|
|
308
|
+
|
|
309
|
+
return html`
|
|
310
|
+
<div class="${classMap(classes)}">
|
|
311
|
+
<gv-identity-picture rounded .display_name="${displayName}" .picture="${picture}"></gv-identity-picture>
|
|
312
|
+
<div class="rating-content">
|
|
313
|
+
<div class="title">
|
|
314
|
+
<b>${data.title ? data.title : data.author.display_name}</b>${parent
|
|
315
|
+
? ''
|
|
316
|
+
: html`<gv-rating
|
|
317
|
+
.readonly="${!this._canUpdate(data.id)}"
|
|
318
|
+
@input="${this._onUpdateRating.bind(this, data)}"
|
|
319
|
+
value="${data.value}"
|
|
320
|
+
></gv-rating>`}${this._renderActions(data, parent)}
|
|
321
|
+
</div>
|
|
322
|
+
<div class="sub-title">${this._getDisplayName(data)}<gv-relative-time datetime="${data.date}" noFuture></gv-relative-time></div>
|
|
323
|
+
<p class="comment">${data.comment}</p>
|
|
324
|
+
${parent ? '' : this._renderAnswers(data)}
|
|
325
|
+
</div>
|
|
326
|
+
</div>
|
|
327
|
+
`;
|
|
196
328
|
}
|
|
197
329
|
|
|
198
330
|
_onUpdateRating(rating, e) {
|
|
199
331
|
rating.value = e.target.value;
|
|
200
|
-
dispatchCustomEvent(this, 'update', {
|
|
201
|
-
rating
|
|
202
|
-
});
|
|
332
|
+
dispatchCustomEvent(this, 'update', { rating });
|
|
203
333
|
}
|
|
204
334
|
|
|
205
335
|
_canAddAnswer() {
|
|
@@ -214,7 +344,6 @@ export class GvRatingList extends LitElement {
|
|
|
214
344
|
if (Array.isArray(this._permissions.update)) {
|
|
215
345
|
return this._permissions.update.includes(ratingId);
|
|
216
346
|
}
|
|
217
|
-
|
|
218
347
|
return this._permissions.update === true;
|
|
219
348
|
}
|
|
220
349
|
|
|
@@ -222,7 +351,6 @@ export class GvRatingList extends LitElement {
|
|
|
222
351
|
if (Array.isArray(this._permissions.delete)) {
|
|
223
352
|
return this._permissions.delete.includes(ratingId);
|
|
224
353
|
}
|
|
225
|
-
|
|
226
354
|
return this._permissions.delete === true;
|
|
227
355
|
}
|
|
228
356
|
|
|
@@ -230,10 +358,8 @@ export class GvRatingList extends LitElement {
|
|
|
230
358
|
if (data.title) {
|
|
231
359
|
return html`<span class="display-name">${data.author.display_name}</span>`;
|
|
232
360
|
}
|
|
233
|
-
|
|
234
361
|
return '';
|
|
235
362
|
}
|
|
236
|
-
|
|
237
363
|
}
|
|
364
|
+
|
|
238
365
|
window.customElements.define('gv-rating-list', GvRatingList);
|
|
239
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL21vbGVjdWxlcy9ndi1yYXRpbmctbGlzdC5qcyJdLCJuYW1lcyI6WyJjc3MiLCJMaXRFbGVtZW50IiwiaHRtbCIsInJlcGVhdCIsInNrZWxldG9uIiwibGluayIsImkxOG4iLCJjbGFzc01hcCIsImRpc3BhdGNoQ3VzdG9tRXZlbnQiLCJHdlJhdGluZ0xpc3QiLCJwcm9wZXJ0aWVzIiwicmF0aW5ncyIsInR5cGUiLCJBcnJheSIsInVzZXIiLCJPYmplY3QiLCJwZXJtaXNzaW9ucyIsInJlcXVpcmVkIiwiQm9vbGVhbiIsImF0dHJpYnV0ZSIsIl9wZXJtaXNzaW9ucyIsIl9yYXRpbmdzIiwic3R5bGVzIiwiY29uc3RydWN0b3IiLCJ1cGRhdGUiLCJkZWxldGUiLCJhZGRBbnN3ZXIiLCJkZWxldGVBbnN3ZXIiLCJ2YWx1ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9za2VsZXRvbiIsImNhdGNoIiwiYXNzaWduIiwicmVuZGVyIiwicmF0aW5nIiwiX3JlbmRlciIsIl9lZGl0QW5zd2VyIiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImZvckVhY2giLCJfZWRpdCIsInBlcmZvcm1VcGRhdGUiLCJfZ2V0QW5zd2VyVmFsdWUiLCJlbGVtZW50Iiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJfb25BbnN3ZXIiLCJhbnN3ZXIiLCJ0cmltIiwibGVuZ3RoIiwiX2hhc1ZhbGlkQW5zd2VyIiwiX29uQ2xvc2UiLCJfcmVuZGVyQW5zd2VyIiwiX3JlbmRlckFuc3dlcnMiLCJhbnN3ZXJzIiwiX2NhbkFkZEFuc3dlciIsImJpbmQiLCJfb25EZWxldGUiLCJfb25EZWxldGVBbnN3ZXIiLCJfcmVuZGVyQWN0aW9ucyIsImRhdGEiLCJwYXJlbnQiLCJfY2FuRGVsZXRlQW5zd2VyIiwiX2NhbkRlbGV0ZSIsImlkIiwiY2xhc3NlcyIsImRpc3BsYXlOYW1lIiwiYXV0aG9yIiwiZGlzcGxheV9uYW1lIiwicGljdHVyZSIsIl9saW5rcyIsImF2YXRhciIsInRpdGxlIiwiX2NhblVwZGF0ZSIsIl9vblVwZGF0ZVJhdGluZyIsIl9nZXREaXNwbGF5TmFtZSIsImRhdGUiLCJjb21tZW50IiwidGFyZ2V0IiwicmF0aW5nSWQiLCJpc0FycmF5IiwiaW5jbHVkZXMiLCJ3aW5kb3ciLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsR0FBVCxFQUFjQyxVQUFkLEVBQTBCQyxJQUExQixRQUFzQyxLQUF0QztBQUNBLFNBQVNDLE1BQVQsUUFBdUIsdUJBQXZCO0FBQ0EsT0FBTyw2QkFBUDtBQUNBLE9BQU8sdUJBQVA7QUFDQSxPQUFPLGFBQVA7QUFDQSxPQUFPLGNBQVA7QUFDQSxTQUFTQyxRQUFULFFBQXlCLG9CQUF6QjtBQUNBLFNBQVNDLElBQVQsUUFBcUIsZ0JBQXJCO0FBQ0EsU0FBU0MsSUFBVCxRQUFxQixhQUFyQjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsMEJBQXpCO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU8sTUFBTUMsWUFBTixTQUEyQlIsVUFBM0IsQ0FBc0M7QUFDdEIsYUFBVlMsVUFBVSxHQUFHO0FBQ3RCLFdBQU87QUFDTEMsTUFBQUEsT0FBTyxFQUFFO0FBQUVDLFFBQUFBLElBQUksRUFBRUM7QUFBUixPQURKO0FBRUxDLE1BQUFBLElBQUksRUFBRTtBQUFFRixRQUFBQSxJQUFJLEVBQUVHO0FBQVIsT0FGRDtBQUdMQyxNQUFBQSxXQUFXLEVBQUU7QUFBRUosUUFBQUEsSUFBSSxFQUFFRztBQUFSLE9BSFI7QUFJTEUsTUFBQUEsUUFBUSxFQUFFO0FBQUVMLFFBQUFBLElBQUksRUFBRU0sT0FBUjtBQUFpQkMsUUFBQUEsU0FBUyxFQUFFO0FBQTVCLE9BSkw7QUFLTEMsTUFBQUEsWUFBWSxFQUFFO0FBQUVSLFFBQUFBLElBQUksRUFBRUcsTUFBUjtBQUFnQkksUUFBQUEsU0FBUyxFQUFFO0FBQTNCLE9BTFQ7QUFNTEUsTUFBQUEsUUFBUSxFQUFFO0FBQUVULFFBQUFBLElBQUksRUFBRUMsS0FBUjtBQUFlTSxRQUFBQSxTQUFTLEVBQUU7QUFBMUI7QUFOTCxLQUFQO0FBUUQ7O0FBRWdCLGFBQU5HLE1BQU0sR0FBRztBQUNsQixXQUFPLENBQ0xsQixRQURLLEVBRUxDLElBRkssRUFHTDtBQUNBTCxJQUFBQSxHQUFHLDZuQ0FKRSxDQUFQO0FBdUdEOztBQUVEdUIsRUFBQUEsV0FBVyxHQUFHO0FBQ1o7QUFDQSxTQUFLRixRQUFMLEdBQWdCLEVBQWhCO0FBQ0EsU0FBS0QsWUFBTCxHQUFvQjtBQUNsQkksTUFBQUEsTUFBTSxFQUFFLEtBRFU7QUFFbEJDLE1BQUFBLE1BQU0sRUFBRSxLQUZVO0FBR2xCQyxNQUFBQSxTQUFTLEVBQUUsS0FITztBQUlsQkMsTUFBQUEsWUFBWSxFQUFFO0FBSkksS0FBcEI7QUFNRDs7QUFFVSxNQUFQaEIsT0FBTyxDQUFDaUIsS0FBRCxFQUFRO0FBQ2pCQyxJQUFBQSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0JGLEtBQWhCLEVBQ0dHLElBREgsQ0FDU0gsS0FBRCxJQUFXO0FBQ2YsVUFBSUEsS0FBSixFQUFXO0FBQ1QsYUFBS0ksU0FBTCxHQUFpQixLQUFqQjtBQUNBLGFBQUtYLFFBQUwsR0FBZ0JPLEtBQWhCO0FBQ0QsT0FIRCxNQUdPO0FBQ0wsYUFBS0ksU0FBTCxHQUFpQixJQUFqQjtBQUNEO0FBQ0YsS0FSSCxFQVNHQyxLQVRILENBU1MsTUFBTTtBQUNYLFdBQUtELFNBQUwsR0FBaUIsS0FBakI7QUFDRCxLQVhIO0FBWUQ7O0FBRWMsTUFBWGhCLFdBQVcsQ0FBQ0EsV0FBRCxFQUFjO0FBQzNCLFFBQUlBLFdBQVcsSUFBSSxPQUFPQSxXQUFQLEtBQXVCLFFBQTFDLEVBQW9EO0FBQ2xELFdBQUtJLFlBQUwsR0FBb0JMLE1BQU0sQ0FBQ21CLE1BQVAsQ0FBYyxFQUFkLEVBQWtCLEtBQUtkLFlBQXZCLEVBQXFDSixXQUFyQyxDQUFwQjtBQUNEO0FBQ0Y7O0FBRURtQixFQUFBQSxNQUFNLEdBQUc7QUFDUCxXQUFPakMsSUFBSSw2QkFBNkJDLE1BQU0sQ0FBQyxLQUFLa0IsUUFBTixFQUFpQmUsTUFBRCxJQUFZLEtBQUtDLE9BQUwsQ0FBYUQsTUFBYixDQUE1QixDQUFuQyxTQUFYO0FBQ0Q7O0FBRURFLEVBQUFBLFdBQVcsQ0FBQ0YsTUFBRCxFQUFTRyxDQUFULEVBQVk7QUFDckJBLElBQUFBLENBQUMsQ0FBQ0MsZUFBRjs7QUFDQSxTQUFLbkIsUUFBTCxDQUFjb0IsT0FBZCxDQUF1QkwsTUFBRCxJQUFhQSxNQUFNLENBQUNNLEtBQVAsR0FBZSxLQUFsRDs7QUFDQU4sSUFBQUEsTUFBTSxDQUFDTSxLQUFQLEdBQWUsSUFBZjtBQUNBLFNBQUtDLGFBQUw7QUFDRDs7QUFFREMsRUFBQUEsZUFBZSxHQUFHO0FBQ2hCLFVBQU1DLE9BQU8sR0FBRyxLQUFLQyxVQUFMLENBQWdCQyxhQUFoQixDQUE4QixTQUE5QixDQUFoQjs7QUFDQSxRQUFJRixPQUFKLEVBQWE7QUFDWCxhQUFPQSxPQUFPLENBQUNqQixLQUFmO0FBQ0Q7O0FBQ0QsV0FBTyxFQUFQO0FBQ0Q7O0FBRURvQixFQUFBQSxTQUFTLENBQUNaLE1BQUQsRUFBUztBQUNoQixVQUFNYSxNQUFNLEdBQUcsS0FBS0wsZUFBTCxFQUFmOztBQUNBLFFBQUlLLE1BQU0sQ0FBQ0MsSUFBUCxHQUFjQyxNQUFkLEdBQXVCLENBQTNCLEVBQThCO0FBQzVCM0MsTUFBQUEsbUJBQW1CLENBQUMsSUFBRCxFQUFPLFlBQVAsRUFBcUI7QUFBRTRCLFFBQUFBLE1BQUY7QUFBVWEsUUFBQUE7QUFBVixPQUFyQixDQUFuQjtBQUNEO0FBQ0Y7O0FBRURHLEVBQUFBLGVBQWUsR0FBRztBQUNoQixVQUFNSCxNQUFNLEdBQUcsS0FBS0wsZUFBTCxFQUFmOztBQUNBLFdBQU9LLE1BQU0sQ0FBQ0MsSUFBUCxHQUFjQyxNQUFkLEdBQXVCLENBQTlCO0FBQ0Q7O0FBRURFLEVBQUFBLFFBQVEsQ0FBQ2pCLE1BQUQsRUFBUztBQUNmLFdBQU9BLE1BQU0sQ0FBQ00sS0FBZDtBQUNBLFNBQUtDLGFBQUw7QUFDRDs7QUFFRFcsRUFBQUEsYUFBYSxDQUFDbEIsTUFBRCxFQUFTYSxNQUFULEVBQWlCO0FBQzVCLFdBQU8vQyxJQUFJLHVCQUF1QixLQUFLbUMsT0FBTCxDQUFhWSxNQUFiLEVBQXFCYixNQUFyQixDQUF2QixRQUFYO0FBQ0Q7O0FBRURtQixFQUFBQSxjQUFjLENBQUNuQixNQUFELEVBQVM7QUFDckIsV0FBT2xDLElBQUksSUFBSWtDLE1BQU0sQ0FBQ29CLE9BQVAsR0FDWHRELElBQUksSUFBSSxLQUFLdUQsYUFBTCxLQUNGdkQsSUFBSSx1Q0FBdUMsS0FBS29DLFdBQUwsQ0FBaUJvQixJQUFqQixDQUFzQixJQUF0QixFQUE0QnRCLE1BQTVCLENBQXZDLG9FQUM4RDlCLElBQUksQ0FBQyxzQkFBRCxDQURsRSxNQURGLEdBSUYsRUFKRixJQUtBOEIsTUFBTSxDQUFDTSxLQUFQLEdBQ0V4QyxJQUFJLDhEQUUyQkksSUFBSSxDQUFDLDRCQUFELENBRi9CLHNCQUVtRixLQUFLcUMsYUFGeEYsMEVBSXdDLEtBQUtVLFFBQUwsQ0FBY0ssSUFBZCxDQUFtQixJQUFuQixFQUF5QnRCLE1BQXpCLENBSnhDLEtBSTZFOUIsSUFBSSxDQUFDLHVCQUFELENBSmpGLDJDQUsrQixLQUFLMEMsU0FBTCxDQUFlVSxJQUFmLENBQW9CLElBQXBCLEVBQTBCdEIsTUFBMUIsQ0FML0IsZ0JBS2dGLENBQUMsS0FBS2dCLGVBQUwsRUFMakYsS0FNTzlDLElBQUksQ0FBQyxxQkFBRCxDQU5YLDZCQUROLEdBWUUsRUFqQkYsU0FrQktILE1BQU0sQ0FBQ2lDLE1BQU0sQ0FBQ29CLE9BQVIsRUFBa0JQLE1BQUQsSUFBWSxLQUFLSyxhQUFMLENBQW1CbEIsTUFBbkIsRUFBMkJhLE1BQTNCLENBQTdCLENBbEJYLFFBRE8sR0FvQlgsRUFwQk8sRUFBWDtBQXFCRDs7QUFFRFUsRUFBQUEsU0FBUyxDQUFDdkIsTUFBRCxFQUFTO0FBQ2hCNUIsSUFBQUEsbUJBQW1CLENBQUMsSUFBRCxFQUFPLFFBQVAsRUFBaUI7QUFBRTRCLE1BQUFBO0FBQUYsS0FBakIsQ0FBbkI7QUFDRDs7QUFFRHdCLEVBQUFBLGVBQWUsQ0FBQ3hCLE1BQUQsRUFBU2EsTUFBVCxFQUFpQjtBQUM5QnpDLElBQUFBLG1CQUFtQixDQUFDLElBQUQsRUFBTyxlQUFQLEVBQXdCO0FBQUU0QixNQUFBQSxNQUFGO0FBQVVhLE1BQUFBO0FBQVYsS0FBeEIsQ0FBbkI7QUFDRDs7QUFFRFksRUFBQUEsY0FBYyxDQUFDQyxJQUFELEVBQU9DLE1BQVAsRUFBZTtBQUMzQixRQUFJQSxNQUFKLEVBQVk7QUFDVixhQUFPN0QsSUFBSSxJQUNQLEtBQUs4RCxnQkFBTCxLQUNFOUQsSUFBSSx3REFHZ0IsS0FBSzBELGVBQUwsQ0FBcUJGLElBQXJCLENBQTBCLElBQTFCLEVBQWdDSyxNQUFoQyxFQUF3Q0QsSUFBeEMsQ0FIaEIsY0FJU3hELElBQUksQ0FBQyxvQ0FBRCxDQUpiLHNCQU1nQkEsSUFBSSxDQUFDLDZCQUFELENBTnBCLDBFQUROLEdBU0UsRUFWSyxHQUFYO0FBWUQsS0FiRCxNQWFPO0FBQ0wsYUFBT0osSUFBSSxJQUNQLEtBQUsrRCxVQUFMLENBQWdCSCxJQUFJLENBQUNJLEVBQXJCLElBQ0VoRSxJQUFJLHdEQUdnQixLQUFLeUQsU0FBTCxDQUFlRCxJQUFmLENBQW9CLElBQXBCLEVBQTBCSSxJQUExQixDQUhoQixjQUlTeEQsSUFBSSxDQUFDLG9DQUFELENBSmIsc0JBTWdCQSxJQUFJLENBQUMsNkJBQUQsQ0FOcEIsMEVBRE4sR0FTRUosSUFBSSwrQkFWQyxHQUFYO0FBWUQ7QUFDRjs7QUFFRG1DLEVBQUFBLE9BQU8sQ0FBQ3lCLElBQUQsRUFBT0MsTUFBUCxFQUFlO0FBQ3BCLFVBQU1JLE9BQU8sR0FBRztBQUFFL0IsTUFBQUEsTUFBTSxFQUFFLElBQVY7QUFBZ0JoQyxNQUFBQSxRQUFRLEVBQUUsS0FBSzRCLFNBQS9CO0FBQTBDK0IsTUFBQUEsTUFBTSxFQUFFQSxNQUFNLElBQUk7QUFBNUQsS0FBaEI7QUFDQSxVQUFNSyxXQUFXLEdBQUdOLElBQUksQ0FBQ08sTUFBTCxJQUFlUCxJQUFJLENBQUNPLE1BQUwsQ0FBWUMsWUFBM0IsR0FBMENSLElBQUksQ0FBQ08sTUFBTCxDQUFZQyxZQUF0RCxHQUFxRSxJQUF6RjtBQUNBLFVBQU1DLE9BQU8sR0FBR1QsSUFBSSxDQUFDTyxNQUFMLElBQWVQLElBQUksQ0FBQ08sTUFBTCxDQUFZRyxNQUEzQixJQUFxQ1YsSUFBSSxDQUFDTyxNQUFMLENBQVlHLE1BQVosQ0FBbUJDLE1BQXhELEdBQWlFWCxJQUFJLENBQUNPLE1BQUwsQ0FBWUcsTUFBWixDQUFtQkMsTUFBcEYsR0FBNkYsSUFBN0c7QUFFQSxXQUFPdkUsSUFBSSxnQkFDS0ssUUFBUSxDQUFDNEQsT0FBRCxDQURiLGtEQUV1Q0MsV0FGdkMsZUFFaUVHLE9BRmpFLGdGQUtFVCxJQUFJLENBQUNZLEtBQUwsR0FBYVosSUFBSSxDQUFDWSxLQUFsQixHQUEwQlosSUFBSSxDQUFDTyxNQUFMLENBQVlDLFlBTHhDLE9BSzJEUCxNQUFNLEdBQ2hFLEVBRGdFLEdBRWhFN0QsSUFBSSx5QkFDVyxDQUFDLEtBQUt5RSxVQUFMLENBQWdCYixJQUFJLENBQUNJLEVBQXJCLENBRFosYUFFUSxLQUFLVSxlQUFMLENBQXFCbEIsSUFBckIsQ0FBMEIsSUFBMUIsRUFBZ0NJLElBQWhDLENBRlIsWUFHT0EsSUFBSSxDQUFDbEMsS0FIWixnQkFQTCxHQVdrQixLQUFLaUMsY0FBTCxDQUFvQkMsSUFBcEIsRUFBMEJDLE1BQTFCLENBWGxCLGtDQWFvQixLQUFLYyxlQUFMLENBQXFCZixJQUFyQixDQWJwQiwrQkFhNkVBLElBQUksQ0FBQ2dCLElBYmxGLDJEQWNnQmhCLElBQUksQ0FBQ2lCLE9BZHJCLFFBZUhoQixNQUFNLEdBQUcsRUFBSCxHQUFRLEtBQUtSLGNBQUwsQ0FBb0JPLElBQXBCLENBZlgsaUJBQVg7QUFtQkQ7O0FBRURjLEVBQUFBLGVBQWUsQ0FBQ3hDLE1BQUQsRUFBU0csQ0FBVCxFQUFZO0FBQ3pCSCxJQUFBQSxNQUFNLENBQUNSLEtBQVAsR0FBZVcsQ0FBQyxDQUFDeUMsTUFBRixDQUFTcEQsS0FBeEI7QUFDQXBCLElBQUFBLG1CQUFtQixDQUFDLElBQUQsRUFBTyxRQUFQLEVBQWlCO0FBQUU0QixNQUFBQTtBQUFGLEtBQWpCLENBQW5CO0FBQ0Q7O0FBRURxQixFQUFBQSxhQUFhLEdBQUc7QUFDZCxXQUFPLEtBQUtyQyxZQUFMLENBQWtCTSxTQUFsQixLQUFnQyxJQUF2QztBQUNEOztBQUVEc0MsRUFBQUEsZ0JBQWdCLEdBQUc7QUFDakIsV0FBTyxLQUFLNUMsWUFBTCxDQUFrQk8sWUFBbEIsS0FBbUMsSUFBMUM7QUFDRDs7QUFFRGdELEVBQUFBLFVBQVUsQ0FBQ00sUUFBRCxFQUFXO0FBQ25CLFFBQUlwRSxLQUFLLENBQUNxRSxPQUFOLENBQWMsS0FBSzlELFlBQUwsQ0FBa0JJLE1BQWhDLENBQUosRUFBNkM7QUFDM0MsYUFBTyxLQUFLSixZQUFMLENBQWtCSSxNQUFsQixDQUF5QjJELFFBQXpCLENBQWtDRixRQUFsQyxDQUFQO0FBQ0Q7O0FBQ0QsV0FBTyxLQUFLN0QsWUFBTCxDQUFrQkksTUFBbEIsS0FBNkIsSUFBcEM7QUFDRDs7QUFFRHlDLEVBQUFBLFVBQVUsQ0FBQ2dCLFFBQUQsRUFBVztBQUNuQixRQUFJcEUsS0FBSyxDQUFDcUUsT0FBTixDQUFjLEtBQUs5RCxZQUFMLENBQWtCSyxNQUFoQyxDQUFKLEVBQTZDO0FBQzNDLGFBQU8sS0FBS0wsWUFBTCxDQUFrQkssTUFBbEIsQ0FBeUIwRCxRQUF6QixDQUFrQ0YsUUFBbEMsQ0FBUDtBQUNEOztBQUNELFdBQU8sS0FBSzdELFlBQUwsQ0FBa0JLLE1BQWxCLEtBQTZCLElBQXBDO0FBQ0Q7O0FBRURvRCxFQUFBQSxlQUFlLENBQUNmLElBQUQsRUFBTztBQUNwQixRQUFJQSxJQUFJLENBQUNZLEtBQVQsRUFBZ0I7QUFDZCxhQUFPeEUsSUFBSSw4QkFBOEI0RCxJQUFJLENBQUNPLE1BQUwsQ0FBWUMsWUFBMUMsU0FBWDtBQUNEOztBQUNELFdBQU8sRUFBUDtBQUNEOztBQXRUMEM7QUF5VDdDYyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLGdCQUE3QixFQUErQzdFLFlBQS9DIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcywgTGl0RWxlbWVudCwgaHRtbCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyByZXBlYXQgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZXBlYXQnO1xuaW1wb3J0ICcuLy4uL2F0b21zL2d2LXJlbGF0aXZlLXRpbWUnO1xuaW1wb3J0ICcuL2d2LWlkZW50aXR5LXBpY3R1cmUnO1xuaW1wb3J0ICcuL2d2LXJhdGluZyc7XG5pbXBvcnQgJy4vZ3YtY29uZmlybSc7XG5pbXBvcnQgeyBza2VsZXRvbiB9IGZyb20gJy4uL3N0eWxlcy9za2VsZXRvbic7XG5pbXBvcnQgeyBsaW5rIH0gZnJvbSAnLi4vc3R5bGVzL2xpbmsnO1xuaW1wb3J0IHsgaTE4biB9IGZyb20gJy4uL2xpYi9pMThuJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwJztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcblxuLyoqXG4gKiBMaXN0IG9mIHJhdGluZ3Mgd2l0aCBhbnN3ZXIgZm9ybVxuICpcbiAqICMjIERldGFpbHNcbiAqICogaGFzIEB0aGVtZSBmYWNldFxuICpcbiAqICMjIEF0dHJpYnV0ZSBgcGVybWlzc2lvbnNgIGRldGFpbHNcbiAqICogYGRlbGV0ZWAgYW5kIGB1cGRhdGVgIHByb3BlcnRpZXMgc3VwcG9ydHMgYm9vbGVhbnMgb3IgYXJyYXlzIG9mIHJhdGluZyBpZGVudGlmaWVyLlxuICogKiBgYWRkQW5zd2VyYCBhbmQgYGRlbGV0ZUFuc3dlcmAgb25seSBhY2NlcHQgYm9vbGVhbnMuXG4gKlxuICogQGZpcmVzIGd2LXJhdGluZy1saXN0OmFkZC1hbnN3ZXIgLSBXaGVuIHVzZXIgc3VibWl0IGFuc3dlclxuICogQGZpcmVzIGd2LXJhdGluZy1saXN0OmRlbGV0ZSAtIFdoZW4gdXNlciBkZWxldGUgcmF0aW5nXG4gKiBAZmlyZXMgZ3YtcmF0aW5nLWxpc3Q6ZGVsZXRlLWFuc3dlciAtIFdoZW4gdXNlciBkZWxldGUgYW5zd2VyXG4gKiBAZmlyZXMgZ3YtcmF0aW5nLWxpc3Q6dXBkYXRlIC0gV2hlbiB1c2VyIHVwZGF0ZSByYXRpbmdcbiAqXG4gKiBAYXR0ciB7UHJvbWlzZTxBcnJheT59IHJhdGluZ3MgLSByYXRpbmdzXG4gKiBAYXR0ciB7aWQsIGF2YXRhciwgZGlzcGxheV9uYW1lfSB1c2VyIC0gYSBjdXJyZW50IHVzZXJcbiAqIEBhdHRyIHtPYmplY3Q8e3VwZGF0ZSwgZGVsZXRlLCBhZGRBbnN3ZXIsIGRlbGV0ZUFuc3dlcn0+fSBwZXJtaXNzaW9ucyAtIFRoZSBwZXJtaXNzaW9uc1xuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1yYXRpbmctbGlzdC0tYmdjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlc3QsICNmZmZmZmYpXSAtIEJhY2tncm91bmQgY29sb3JcbiAqIEBjc3Nwcm9wIHtDb2xvcn0gWy0tZ3YtcmF0aW5nLWxpc3QtYW5zd2VyLS1iZ2M9dmFyKC0tZ3YtdGhlbWUtbmV1dHJhbC1jb2xvci1saWdodGVyLCAjZmFmYWZhKV0gLSBBbnN3ZXIgYmFja2dyb3VuZCBjb2xvclxuICogQGNzc3Byb3Age0NvbG9yfSBbLS1ndi1yYXRpbmctbGlzdC0tYmRjPXZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3IsICNmNWY1ZjUpXSAtIEJvcmRlciBjb2xvclxuICogQGNzc3Byb3Age0xlbmd0aH0gWy0tZ3YtcmF0aW5nLWxpc3QtLXM9MThweF0gLSBIZWlnaHQgYW5kIHN0YXIgd2lkdGhcbiAqL1xuXG5leHBvcnQgY2xhc3MgR3ZSYXRpbmdMaXN0IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmF0aW5nczogeyB0eXBlOiBBcnJheSB9LFxuICAgICAgdXNlcjogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIHBlcm1pc3Npb25zOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgcmVxdWlyZWQ6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAncmVxdWlyZWQnIH0sXG4gICAgICBfcGVybWlzc2lvbnM6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfcmF0aW5nczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0IHN0eWxlcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgc2tlbGV0b24sXG4gICAgICBsaW5rLFxuICAgICAgLy8gbGFuZ3VhZ2U9Q1NTXG4gICAgICBjc3NgXG4gICAgICAgIDpob3N0IHtcbiAgICAgICAgICAtLXM6IHZhcigtLWd2LXJhdGluZy1saXN0LS1zLCAxOHB4KTtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IHZhcigtLXMpO1xuICAgICAgICAgIC0tZ3YtcmF0aW5nLS1zOiB2YXIoLS1zKTtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbTtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICB9XG5cbiAgICAgICAgLnJhdGluZy1saXN0IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ndi1yYXRpbmctbGlzdC0tYmdjLCB2YXIoLS1ndi10aGVtZS1uZXV0cmFsLWNvbG9yLWxpZ2h0ZXN0LCAjZmZmZmZmKSk7XG4gICAgICAgIH1cblxuICAgICAgICAucmF0aW5nLnBhcmVudCB7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWd2LXJhdGluZy1saXN0LS1iZGMsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3IsICNmNWY1ZjUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yYXRpbmcge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgcGFkZGluZzogMXJlbSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFuc3dlciAucmF0aW5nIHtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtIDAgMCAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLnN1Yi10aXRsZSB7XG4gICAgICAgICAgY29sb3I6IGdyZXk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWNvbmZpcm0ge1xuICAgICAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zdWItdGl0bGUgYS5saW5rIHtcbiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWlkZW50aXR5LXBpY3R1cmUge1xuICAgICAgICAgIG1hcmdpbjogMCAxcmVtO1xuICAgICAgICAgIGhlaWdodDogNjBweDtcbiAgICAgICAgICB3aWR0aDogNjBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZSBiLFxuICAgICAgICAucmF0aW5nLWNvbnRlbnQge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAubGluay1hbnN3ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtIDA7XG4gICAgICAgIH1cblxuICAgICAgICAubGluay1hbnN3ZXIgZ3YtaWNvbiB7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiB2YXIoLS1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZWxldGUtcmF0aW5nLFxuICAgICAgICAuZGVsZXRlLWFuc3dlcixcbiAgICAgICAgLmZha2UtaWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiB2YXIoLS1zKTtcbiAgICAgICAgICBtaW4td2lkdGg6IHZhcigtLXMpO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRlbGV0ZS1yYXRpbmcge1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuYW5zd2VyIHtcbiAgICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDFyZW07XG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZ3YtcmF0aW5nLWxpc3QtYW5zd2VyLS1iZ2MsIHZhcigtLWd2LXRoZW1lLW5ldXRyYWwtY29sb3ItbGlnaHRlciwgI2ZhZmFmYSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFuc3dlci1mb3JtIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICAuZGlzcGxheS1uYW1lOmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnfCc7XG4gICAgICAgICAgbWFyZ2luOiAycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuYWN0aW9ucyB7XG4gICAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcmF0aW5ncyA9IFtdO1xuICAgIHRoaXMuX3Blcm1pc3Npb25zID0ge1xuICAgICAgdXBkYXRlOiBmYWxzZSxcbiAgICAgIGRlbGV0ZTogZmFsc2UsXG4gICAgICBhZGRBbnN3ZXI6IGZhbHNlLFxuICAgICAgZGVsZXRlQW5zd2VyOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgc2V0IHJhdGluZ3ModmFsdWUpIHtcbiAgICBQcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICAudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5fc2tlbGV0b24gPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9yYXRpbmdzID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc2tlbGV0b24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgdGhpcy5fc2tlbGV0b24gPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0IHBlcm1pc3Npb25zKHBlcm1pc3Npb25zKSB7XG4gICAgaWYgKHBlcm1pc3Npb25zICYmIHR5cGVvZiBwZXJtaXNzaW9ucyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuX3Blcm1pc3Npb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcGVybWlzc2lvbnMsIHBlcm1pc3Npb25zKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgcmV0dXJuIGh0bWxgIDxkaXYgY2xhc3M9XCJyYXRpbmctbGlzdFwiPiR7cmVwZWF0KHRoaXMuX3JhdGluZ3MsIChyYXRpbmcpID0+IHRoaXMuX3JlbmRlcihyYXRpbmcpKX08L2Rpdj4gYDtcbiAgfVxuXG4gIF9lZGl0QW5zd2VyKHJhdGluZywgZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5fcmF0aW5ncy5mb3JFYWNoKChyYXRpbmcpID0+IChyYXRpbmcuX2VkaXQgPSBmYWxzZSkpO1xuICAgIHJhdGluZy5fZWRpdCA9IHRydWU7XG4gICAgdGhpcy5wZXJmb3JtVXBkYXRlKCk7XG4gIH1cblxuICBfZ2V0QW5zd2VyVmFsdWUoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi10ZXh0Jyk7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBfb25BbnN3ZXIocmF0aW5nKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyVmFsdWUoKTtcbiAgICBpZiAoYW5zd2VyLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdhZGQtYW5zd2VyJywgeyByYXRpbmcsIGFuc3dlciB9KTtcbiAgICB9XG4gIH1cblxuICBfaGFzVmFsaWRBbnN3ZXIoKSB7XG4gICAgY29uc3QgYW5zd2VyID0gdGhpcy5fZ2V0QW5zd2VyVmFsdWUoKTtcbiAgICByZXR1cm4gYW5zd2VyLnRyaW0oKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgX29uQ2xvc2UocmF0aW5nKSB7XG4gICAgZGVsZXRlIHJhdGluZy5fZWRpdDtcbiAgICB0aGlzLnBlcmZvcm1VcGRhdGUoKTtcbiAgfVxuXG4gIF9yZW5kZXJBbnN3ZXIocmF0aW5nLCBhbnN3ZXIpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwiYW5zd2VyXCI+JHt0aGlzLl9yZW5kZXIoYW5zd2VyLCByYXRpbmcpfTwvZGl2PmA7XG4gIH1cblxuICBfcmVuZGVyQW5zd2VycyhyYXRpbmcpIHtcbiAgICByZXR1cm4gaHRtbGAgJHtyYXRpbmcuYW5zd2Vyc1xuICAgICAgPyBodG1sYCAke3RoaXMuX2NhbkFkZEFuc3dlcigpXG4gICAgICAgICAgICA/IGh0bWxgPGEgY2xhc3M9XCJsaW5rIGxpbmstYW5zd2VyXCIgQGNsaWNrPVwiJHt0aGlzLl9lZGl0QW5zd2VyLmJpbmQodGhpcywgcmF0aW5nKX1cIj5cbiAgICAgICAgICAgICAgICA8Z3YtaWNvbiBjbGFzcz1cImxpbmtcIiBzaGFwZT1cImNvbW11bmljYXRpb246Y2hhdCM1XCI+PC9ndi1pY29uPiAke2kxOG4oJ2d2LXJhdGluZy1saXN0LnJlcGx5Jyl9PC9hXG4gICAgICAgICAgICAgID5gXG4gICAgICAgICAgICA6ICcnfVxuICAgICAgICAgICR7cmF0aW5nLl9lZGl0XG4gICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuc3dlciBhbnN3ZXItZm9ybVwiPlxuICAgICAgICAgICAgICAgICAgPGd2LXRleHQgcm93cz1cIjRcIiBsYWJlbD1cIiR7aTE4bignZ3YtcmF0aW5nLWxpc3QuYW5zd2VyTGFiZWwnKX1cIiByZXF1aXJlZCBAaW5wdXQ9XCIke3RoaXMucGVyZm9ybVVwZGF0ZX1cIj48L2d2LXRleHQ+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uIHByaW1hcnkgb3V0bGluZWQgQGNsaWNrPVwiJHt0aGlzLl9vbkNsb3NlLmJpbmQodGhpcywgcmF0aW5nKX1cIj4ke2kxOG4oJ2d2LXJhdGluZy1saXN0LmNhbmNlbCcpfTwvZ3YtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uIHByaW1hcnkgQGNsaWNrPVwiJHt0aGlzLl9vbkFuc3dlci5iaW5kKHRoaXMsIHJhdGluZyl9XCIgLmRpc2FibGVkPVwiJHshdGhpcy5faGFzVmFsaWRBbnN3ZXIoKX1cIlxuICAgICAgICAgICAgICAgICAgICAgID4ke2kxOG4oJ2d2LXJhdGluZy1saXN0LnNlbmQnKX08L2d2LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgOiAnJ31cbiAgICAgICAgICA8ZGl2PiR7cmVwZWF0KHJhdGluZy5hbnN3ZXJzLCAoYW5zd2VyKSA9PiB0aGlzLl9yZW5kZXJBbnN3ZXIocmF0aW5nLCBhbnN3ZXIpKX08L2Rpdj5gXG4gICAgICA6ICcnfWA7XG4gIH1cblxuICBfb25EZWxldGUocmF0aW5nKSB7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZGVsZXRlJywgeyByYXRpbmcgfSk7XG4gIH1cblxuICBfb25EZWxldGVBbnN3ZXIocmF0aW5nLCBhbnN3ZXIpIHtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdkZWxldGUtYW5zd2VyJywgeyByYXRpbmcsIGFuc3dlciB9KTtcbiAgfVxuXG4gIF9yZW5kZXJBY3Rpb25zKGRhdGEsIHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAke3RoaXMuX2NhbkRlbGV0ZUFuc3dlcigpXG4gICAgICAgICAgPyBodG1sYDxndi1jb25maXJtXG4gICAgICAgICAgICAgIGRhbmdlclxuICAgICAgICAgICAgICBpY29uPVwiaG9tZTp0cmFzaFwiXG4gICAgICAgICAgICAgIEBndi1jb25maXJtOm9rPVwiJHt0aGlzLl9vbkRlbGV0ZUFuc3dlci5iaW5kKHRoaXMsIHBhcmVudCwgZGF0YSl9XCJcbiAgICAgICAgICAgICAgbWVzc2FnZT1cIiR7aTE4bignZ3YtcmF0aW5nLWxpc3QuY29uZmlybUFuc3dlckRlbGV0ZScpfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxndi1pY29uIHRpdGxlPVwiJHtpMThuKCdndi1yYXRpbmctbGlzdC5kZWxldGVBbnN3ZXInKX1cIiBjbGFzcz1cImxpbmsgZGVsZXRlLWFuc3dlclwiIHNoYXBlPVwiaG9tZTp0cmFzaFwiPjwvZ3YtaWNvbj5cbiAgICAgICAgICAgIDwvZ3YtY29uZmlybT5gXG4gICAgICAgICAgOiAnJ31cbiAgICAgIGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAke3RoaXMuX2NhbkRlbGV0ZShkYXRhLmlkKVxuICAgICAgICAgID8gaHRtbGA8Z3YtY29uZmlybVxuICAgICAgICAgICAgICBkYW5nZXJcbiAgICAgICAgICAgICAgaWNvbj1cImhvbWU6dHJhc2hcIlxuICAgICAgICAgICAgICBAZ3YtY29uZmlybTpvaz1cIiR7dGhpcy5fb25EZWxldGUuYmluZCh0aGlzLCBkYXRhKX1cIlxuICAgICAgICAgICAgICBtZXNzYWdlPVwiJHtpMThuKCdndi1yYXRpbmctbGlzdC5jb25maXJtUmF0aW5nRGVsZXRlJyl9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGd2LWljb24gdGl0bGU9XCIke2kxOG4oJ2d2LXJhdGluZy1saXN0LmRlbGV0ZVJhdGluZycpfVwiIGNsYXNzPVwibGluayBkZWxldGUtcmF0aW5nXCIgc2hhcGU9XCJob21lOnRyYXNoXCI+PC9ndi1pY29uPlxuICAgICAgICAgICAgPC9ndi1jb25maXJtPmBcbiAgICAgICAgICA6IGh0bWxgPGRpdiBjbGFzcz1cImZha2UtaWNvblwiPjwvZGl2PmB9XG4gICAgICBgO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXIoZGF0YSwgcGFyZW50KSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHsgcmF0aW5nOiB0cnVlLCBza2VsZXRvbjogdGhpcy5fc2tlbGV0b24sIHBhcmVudDogcGFyZW50ID09IG51bGwgfTtcbiAgICBjb25zdCBkaXNwbGF5TmFtZSA9IGRhdGEuYXV0aG9yICYmIGRhdGEuYXV0aG9yLmRpc3BsYXlfbmFtZSA/IGRhdGEuYXV0aG9yLmRpc3BsYXlfbmFtZSA6IG51bGw7XG4gICAgY29uc3QgcGljdHVyZSA9IGRhdGEuYXV0aG9yICYmIGRhdGEuYXV0aG9yLl9saW5rcyAmJiBkYXRhLmF1dGhvci5fbGlua3MuYXZhdGFyID8gZGF0YS5hdXRob3IuX2xpbmtzLmF2YXRhciA6IG51bGw7XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCIke2NsYXNzTWFwKGNsYXNzZXMpfVwiPlxuICAgICAgICA8Z3YtaWRlbnRpdHktcGljdHVyZSByb3VuZGVkIC5kaXNwbGF5X25hbWU9XCIke2Rpc3BsYXlOYW1lfVwiIC5waWN0dXJlPVwiJHtwaWN0dXJlfVwiPjwvZ3YtaWRlbnRpdHktcGljdHVyZT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJhdGluZy1jb250ZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XG4gICAgICAgICAgICA8Yj4ke2RhdGEudGl0bGUgPyBkYXRhLnRpdGxlIDogZGF0YS5hdXRob3IuZGlzcGxheV9uYW1lfTwvYj4ke3BhcmVudFxuICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgIDogaHRtbGA8Z3YtcmF0aW5nXG4gICAgICAgICAgICAgICAgICAucmVhZG9ubHk9XCIkeyF0aGlzLl9jYW5VcGRhdGUoZGF0YS5pZCl9XCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dD1cIiR7dGhpcy5fb25VcGRhdGVSYXRpbmcuYmluZCh0aGlzLCBkYXRhKX1cIlxuICAgICAgICAgICAgICAgICAgdmFsdWU9XCIke2RhdGEudmFsdWV9XCJcbiAgICAgICAgICAgICAgICA+PC9ndi1yYXRpbmc+YH0ke3RoaXMuX3JlbmRlckFjdGlvbnMoZGF0YSwgcGFyZW50KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3ViLXRpdGxlXCI+JHt0aGlzLl9nZXREaXNwbGF5TmFtZShkYXRhKX08Z3YtcmVsYXRpdmUtdGltZSBkYXRldGltZT1cIiR7ZGF0YS5kYXRlfVwiIG5vRnV0dXJlPjwvZ3YtcmVsYXRpdmUtdGltZT48L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cImNvbW1lbnRcIj4ke2RhdGEuY29tbWVudH08L3A+XG4gICAgICAgICAgJHtwYXJlbnQgPyAnJyA6IHRoaXMuX3JlbmRlckFuc3dlcnMoZGF0YSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIF9vblVwZGF0ZVJhdGluZyhyYXRpbmcsIGUpIHtcbiAgICByYXRpbmcudmFsdWUgPSBlLnRhcmdldC52YWx1ZTtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICd1cGRhdGUnLCB7IHJhdGluZyB9KTtcbiAgfVxuXG4gIF9jYW5BZGRBbnN3ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zLmFkZEFuc3dlciA9PT0gdHJ1ZTtcbiAgfVxuXG4gIF9jYW5EZWxldGVBbnN3ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zLmRlbGV0ZUFuc3dlciA9PT0gdHJ1ZTtcbiAgfVxuXG4gIF9jYW5VcGRhdGUocmF0aW5nSWQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9wZXJtaXNzaW9ucy51cGRhdGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGVybWlzc2lvbnMudXBkYXRlLmluY2x1ZGVzKHJhdGluZ0lkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zLnVwZGF0ZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIF9jYW5EZWxldGUocmF0aW5nSWQpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLl9wZXJtaXNzaW9ucy5kZWxldGUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcGVybWlzc2lvbnMuZGVsZXRlLmluY2x1ZGVzKHJhdGluZ0lkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25zLmRlbGV0ZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIF9nZXREaXNwbGF5TmFtZShkYXRhKSB7XG4gICAgaWYgKGRhdGEudGl0bGUpIHtcbiAgICAgIHJldHVybiBodG1sYDxzcGFuIGNsYXNzPVwiZGlzcGxheS1uYW1lXCI+JHtkYXRhLmF1dGhvci5kaXNwbGF5X25hbWV9PC9zcGFuPmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1yYXRpbmctbGlzdCcsIEd2UmF0aW5nTGlzdCk7XG4iXX0=
|