my-orders-tickets-widget 1.0.0-beta.24 → 1.0.0-beta.26

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/dist/index.js CHANGED
@@ -39,9 +39,11 @@ __webpack_require__.r(__webpack_exports__);
39
39
  /* harmony export */ REFUND_TICKET: () => (/* binding */ REFUND_TICKET),
40
40
  /* harmony export */ REMOVE_TICKET_ATTENDEE: () => (/* binding */ REMOVE_TICKET_ATTENDEE),
41
41
  /* harmony export */ RESEND_NOTIFICATION: () => (/* binding */ RESEND_NOTIFICATION),
42
+ /* harmony export */ RESET_API_ERROR: () => (/* binding */ RESET_API_ERROR),
42
43
  /* harmony export */ RESET_FILTER: () => (/* binding */ RESET_FILTER),
43
44
  /* harmony export */ RESET_STATE: () => (/* binding */ RESET_STATE),
44
45
  /* harmony export */ SET_ACTIVE_ORDER_ID: () => (/* binding */ SET_ACTIVE_ORDER_ID),
46
+ /* harmony export */ SET_API_ERROR: () => (/* binding */ SET_API_ERROR),
45
47
  /* harmony export */ SET_STATE: () => (/* binding */ SET_STATE),
46
48
  /* harmony export */ SET_SUMMIT: () => (/* binding */ SET_SUMMIT),
47
49
  /* harmony export */ SET_USER: () => (/* binding */ SET_USER),
@@ -52,9 +54,12 @@ __webpack_require__.r(__webpack_exports__);
52
54
  /* harmony export */ UPDATE_TICKET: () => (/* binding */ UPDATE_TICKET),
53
55
  /* harmony export */ UPDATE_TICKETS_REFUND_REQUESTED: () => (/* binding */ UPDATE_TICKETS_REFUND_REQUESTED),
54
56
  /* harmony export */ assignAttendee: () => (/* binding */ assignAttendee),
57
+ /* harmony export */ customAuthErrorHandler: () => (/* binding */ customAuthErrorHandler),
58
+ /* harmony export */ errorHandlerNotify: () => (/* binding */ errorHandlerNotify),
55
59
  /* harmony export */ getExtraQuestions: () => (/* binding */ getExtraQuestions),
56
60
  /* harmony export */ getSortDirection: () => (/* binding */ getSortDirection),
57
61
  /* harmony export */ getTicket: () => (/* binding */ getTicket),
62
+ /* harmony export */ getTicketPDF: () => (/* binding */ getTicketPDF),
58
63
  /* harmony export */ getTicketsByOrder: () => (/* binding */ getTicketsByOrder),
59
64
  /* harmony export */ getUserOrders: () => (/* binding */ getUserOrders),
60
65
  /* harmony export */ getUserTickets: () => (/* binding */ getUserTickets),
@@ -64,6 +69,7 @@ __webpack_require__.r(__webpack_exports__);
64
69
  /* harmony export */ refundBulkTickets: () => (/* binding */ refundBulkTickets),
65
70
  /* harmony export */ refundTicket: () => (/* binding */ refundTicket),
66
71
  /* harmony export */ resendNotification: () => (/* binding */ resendNotification),
72
+ /* harmony export */ resetError: () => (/* binding */ resetError),
67
73
  /* harmony export */ resetFilter: () => (/* binding */ resetFilter),
68
74
  /* harmony export */ resetState: () => (/* binding */ resetState),
69
75
  /* harmony export */ saveExtraQuestions: () => (/* binding */ saveExtraQuestions),
@@ -81,10 +87,14 @@ __webpack_require__.r(__webpack_exports__);
81
87
  /* harmony import */ var p_limit__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(p_limit__WEBPACK_IMPORTED_MODULE_2__);
82
88
  /* harmony import */ var openstack_uicore_foundation_lib_security_methods__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! openstack-uicore-foundation/lib/security/methods */ "openstack-uicore-foundation/lib/security/methods");
83
89
  /* harmony import */ var openstack_uicore_foundation_lib_security_methods__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(openstack_uicore_foundation_lib_security_methods__WEBPACK_IMPORTED_MODULE_3__);
84
- /* harmony import */ var idtoken_verifier__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! idtoken-verifier */ "idtoken-verifier");
85
- /* harmony import */ var idtoken_verifier__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(idtoken_verifier__WEBPACK_IMPORTED_MODULE_4__);
86
- /* harmony import */ var _utils_auth__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/auth */ "./src/utils/auth.js");
87
- /* harmony import */ var _utils_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/constants */ "./src/utils/constants.js");
90
+ /* harmony import */ var openstack_uicore_foundation_lib_utils_methods__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! openstack-uicore-foundation/lib/utils/methods */ "openstack-uicore-foundation/lib/utils/methods");
91
+ /* harmony import */ var openstack_uicore_foundation_lib_utils_methods__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(openstack_uicore_foundation_lib_utils_methods__WEBPACK_IMPORTED_MODULE_4__);
92
+ /* harmony import */ var idtoken_verifier__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! idtoken-verifier */ "idtoken-verifier");
93
+ /* harmony import */ var idtoken_verifier__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(idtoken_verifier__WEBPACK_IMPORTED_MODULE_5__);
94
+ /* harmony import */ var i18next__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! i18next */ "i18next");
95
+ /* harmony import */ var i18next__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(i18next__WEBPACK_IMPORTED_MODULE_6__);
96
+ /* harmony import */ var _utils_auth__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/auth */ "./src/utils/auth.js");
97
+ /* harmony import */ var _utils_constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/constants */ "./src/utils/constants.js");
88
98
 
89
99
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
90
100
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -94,9 +104,13 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
94
104
 
95
105
 
96
106
 
107
+
108
+
97
109
  const RESET_STATE = "RESET_STATE";
98
110
  const RESET_FILTER = "RESET_FILTER";
111
+ const RESET_API_ERROR = "RESET_API_ERROR";
99
112
  const SET_STATE = "SET_STATE";
113
+ const SET_API_ERROR = "SET_API_ERROR";
100
114
 
101
115
  // ORDERS CONSTS
102
116
  const GET_USER_ORDERS = "GET_ORDERS";
@@ -144,6 +158,9 @@ const resetState = () => dispatch => {
144
158
  const resetFilter = () => dispatch => {
145
159
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(RESET_FILTER)({}));
146
160
  };
161
+ const resetError = () => dispatch => {
162
+ dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(RESET_API_ERROR)({}));
163
+ };
147
164
  const setReducerState = (summit, user) => dispatch => {
148
165
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(SET_STATE)({
149
166
  summit,
@@ -168,24 +185,65 @@ const parseFilter = filterObj => {
168
185
  };
169
186
  const getSortDirection = direction => direction === "asc" ? "+" : "-";
170
187
 
188
+ // payload: { httpCode, title, html: content, type }
189
+ const errorHandlerNotify = (payload, callback) => dispatch => {
190
+ dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(SET_API_ERROR)(payload));
191
+ if (callback) callback();
192
+ };
193
+ const customAuthErrorHandler = (err, res) => dispatch => {
194
+ dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(err, res, errorHandlerNotify));
195
+ };
196
+ const customFetchErrorHandler = response => dispatch => {
197
+ const code = response.status;
198
+ let msg;
199
+ dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
200
+ switch (code) {
201
+ case _utils_constants__WEBPACK_IMPORTED_MODULE_8__.ERROR_CODES["403"]:
202
+ msg = i18next__WEBPACK_IMPORTED_MODULE_6___default().t("errors.user_not_authz");
203
+ break;
204
+ case _utils_constants__WEBPACK_IMPORTED_MODULE_8__.ERROR_CODES["401"]:
205
+ msg = i18next__WEBPACK_IMPORTED_MODULE_6___default().t("errors.session_expired");
206
+ break;
207
+ case _utils_constants__WEBPACK_IMPORTED_MODULE_8__.ERROR_CODES["412"]:
208
+ msg = "";
209
+ Object.entries(response.errors).forEach(_ref => {
210
+ let [key, value] = _ref;
211
+ if (Number.isNaN(key)) {
212
+ msg = "".concat(msg, " ").concat(key, ": ");
213
+ }
214
+ msg = "".concat(msg, " ").concat(value, " <br>");
215
+ });
216
+ break;
217
+ case _utils_constants__WEBPACK_IMPORTED_MODULE_8__.ERROR_CODES["500"]:
218
+ msg = i18next__WEBPACK_IMPORTED_MODULE_6___default().t("errors.server_error");
219
+ break;
220
+ default:
221
+ msg = response.statusText;
222
+ }
223
+ dispatch(errorHandlerNotify({
224
+ title: i18next__WEBPACK_IMPORTED_MODULE_6___default().t("errors.error"),
225
+ html: msg
226
+ }));
227
+ };
228
+
171
229
  // ORDERS ACTIONS
172
- const getUserOrders = _ref => {
230
+ const getUserOrders = _ref2 => {
173
231
  let {
174
- page = _utils_constants__WEBPACK_IMPORTED_MODULE_6__.FIRST_PAGE,
175
- perPage = _utils_constants__WEBPACK_IMPORTED_MODULE_6__.DEFAULT_ITEMS_PER_PAGE,
232
+ page = _utils_constants__WEBPACK_IMPORTED_MODULE_8__.FIRST_PAGE,
233
+ perPage = _utils_constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_ITEMS_PER_PAGE,
176
234
  filter = {},
177
235
  sort = {}
178
- } = _ref;
179
- return async (dispatch, getState, _ref2) => {
236
+ } = _ref2;
237
+ return async (dispatch, getState, _ref3) => {
180
238
  let {
181
239
  apiBaseUrl
182
- } = _ref2;
240
+ } = _ref3;
183
241
  const {
184
242
  widgetState: {
185
243
  summit
186
244
  }
187
245
  } = getState();
188
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(() => Promise.reject());
246
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(() => Promise.reject());
189
247
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.startLoading)());
190
248
  const params = {
191
249
  access_token: accessToken,
@@ -202,7 +260,7 @@ const getUserOrders = _ref => {
202
260
  if (Object.keys(sort).length > 0) {
203
261
  params.order = "".concat(getSortDirection(sort.direction)).concat(sort.name);
204
262
  }
205
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(GET_USER_ORDERS), "".concat(apiBaseUrl, "/api/v1/summits/").concat(summit.id, "/orders/me"), openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).then(payload => {
263
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(GET_USER_ORDERS), "".concat(apiBaseUrl, "/api/v1/summits/").concat(summit.id, "/orders/me"), customAuthErrorHandler)(params)(dispatch).then(payload => {
206
264
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
207
265
  return payload;
208
266
  }).catch(e => {
@@ -218,15 +276,15 @@ const setUser = user => dispatch => dispatch((0,openstack_uicore_foundation_lib_
218
276
 
219
277
  // TICKET ACTIONS
220
278
 
221
- const getUserTickets = _ref3 => {
279
+ const getUserTickets = _ref4 => {
222
280
  let {
223
- page = _utils_constants__WEBPACK_IMPORTED_MODULE_6__.FIRST_PAGE,
224
- perPage = _utils_constants__WEBPACK_IMPORTED_MODULE_6__.DEFAULT_ITEMS_PER_PAGE
225
- } = _ref3;
226
- return async (dispatch, getState, _ref4) => {
281
+ page = _utils_constants__WEBPACK_IMPORTED_MODULE_8__.FIRST_PAGE,
282
+ perPage = _utils_constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_ITEMS_PER_PAGE
283
+ } = _ref4;
284
+ return async (dispatch, getState, _ref5) => {
227
285
  let {
228
286
  apiBaseUrl
229
- } = _ref4;
287
+ } = _ref5;
230
288
  const {
231
289
  userState: {
232
290
  userProfile
@@ -234,7 +292,7 @@ const getUserTickets = _ref3 => {
234
292
  summit
235
293
  } = getState();
236
294
  if (!summit) return Promise.reject();
237
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(() => Promise.reject());
295
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(() => Promise.reject());
238
296
  if (!userProfile.id) return Promise.reject();
239
297
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.startLoading)());
240
298
  const params = {
@@ -247,7 +305,7 @@ const getUserTickets = _ref3 => {
247
305
  page,
248
306
  per_page: perPage
249
307
  };
250
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(GET_TICKETS), "".concat(apiBaseUrl, "/api/v1/summits/").concat(summit.id, "/orders/all/tickets/me"), openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).then(() => {
308
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(GET_TICKETS), "".concat(apiBaseUrl, "/api/v1/summits/").concat(summit.id, "/orders/all/tickets/me"), customAuthErrorHandler)(params)(dispatch).then(() => {
251
309
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
252
310
  }).catch(e => {
253
311
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
@@ -255,18 +313,18 @@ const getUserTickets = _ref3 => {
255
313
  });
256
314
  };
257
315
  };
258
- const getTicketsByOrder = _ref5 => {
316
+ const getTicketsByOrder = _ref6 => {
259
317
  let {
260
318
  orderId,
261
- page = _utils_constants__WEBPACK_IMPORTED_MODULE_6__.FIRST_PAGE,
262
- perPage = _utils_constants__WEBPACK_IMPORTED_MODULE_6__.DEFAULT_ITEMS_PER_PAGE
263
- } = _ref5;
264
- return async (dispatch, getState, _ref6) => {
319
+ page = _utils_constants__WEBPACK_IMPORTED_MODULE_8__.FIRST_PAGE,
320
+ perPage = _utils_constants__WEBPACK_IMPORTED_MODULE_8__.DEFAULT_ITEMS_PER_PAGE
321
+ } = _ref6;
322
+ return async (dispatch, getState, _ref7) => {
265
323
  let {
266
324
  apiBaseUrl
267
- } = _ref6;
325
+ } = _ref7;
268
326
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.startLoading)());
269
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(() => Promise.reject());
327
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(() => Promise.reject());
270
328
  const params = {
271
329
  access_token: accessToken,
272
330
  expand: "refund_requests,owner,owner.extra_questions,badge,badge.features,ticket_type",
@@ -274,7 +332,7 @@ const getTicketsByOrder = _ref5 => {
274
332
  page,
275
333
  per_page: perPage
276
334
  };
277
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(GET_TICKETS_BY_ORDER), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets"), openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).then(payload => {
335
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(GET_TICKETS_BY_ORDER), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets"), customAuthErrorHandler)(params)(dispatch).then(payload => {
278
336
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
279
337
  return payload;
280
338
  }).catch(e => {
@@ -284,11 +342,11 @@ const getTicketsByOrder = _ref5 => {
284
342
  });
285
343
  };
286
344
  };
287
- const resendNotification = ticket => async (dispatch, _ref7) => {
345
+ const resendNotification = ticket => async (dispatch, getState, _ref8) => {
288
346
  let {
289
347
  apiBaseUrl
290
- } = _ref7;
291
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(() => Promise.reject());
348
+ } = _ref8;
349
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(() => Promise.reject());
292
350
  const {
293
351
  message
294
352
  } = ticket;
@@ -299,24 +357,24 @@ const resendNotification = ticket => async (dispatch, _ref7) => {
299
357
  };
300
358
  return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.putRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(RESEND_NOTIFICATION), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets/").concat(ticket.id, "/attendee/reinvite"), {
301
359
  message
302
- }, openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).then(() => {
360
+ }, customAuthErrorHandler)(params)(dispatch).then(() => {
303
361
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
304
362
  }).catch(e => {
305
363
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
306
364
  return e;
307
365
  });
308
366
  };
309
- const refundTicket = _ref8 => {
367
+ const refundTicket = _ref9 => {
310
368
  let {
311
369
  ticket
312
- } = _ref8;
370
+ } = _ref9;
313
371
  return (
314
372
  // eslint-disable-next-line no-unused-vars
315
- async (dispatch, getState, _ref9) => {
373
+ async (dispatch, getState, _ref10) => {
316
374
  let {
317
375
  apiBaseUrl
318
- } = _ref9;
319
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(() => Promise.reject());
376
+ } = _ref10;
377
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(() => Promise.reject());
320
378
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.startLoading)());
321
379
  const orderId = ticket.order ? ticket.order.id : ticket.order_id;
322
380
  const params = {
@@ -324,7 +382,7 @@ const refundTicket = _ref8 => {
324
382
  expand: "refund_requests,ticket_type",
325
383
  fields: "refund_requests.status"
326
384
  };
327
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.deleteRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(REFUND_TICKET), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets/").concat(ticket.id, "/refund"), {}, openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).then(payload => {
385
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.deleteRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(REFUND_TICKET), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets/").concat(ticket.id, "/refund"), {}, customAuthErrorHandler)(params)(dispatch).then(payload => {
328
386
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
329
387
  return payload;
330
388
  }).catch(e => {
@@ -334,12 +392,12 @@ const refundTicket = _ref8 => {
334
392
  }
335
393
  );
336
394
  };
337
- const refundBulkTickets = _ref10 => {
395
+ const refundBulkTickets = _ref11 => {
338
396
  let {
339
397
  tickets
340
- } = _ref10;
398
+ } = _ref11;
341
399
  return async dispatch => {
342
- const limit = p_limit__WEBPACK_IMPORTED_MODULE_2___default()(_utils_constants__WEBPACK_IMPORTED_MODULE_6__.PROMISE_BATCH_LIMIT);
400
+ const limit = p_limit__WEBPACK_IMPORTED_MODULE_2___default()(_utils_constants__WEBPACK_IMPORTED_MODULE_8__.PROMISE_BATCH_LIMIT);
343
401
  const allRefundTicketCalls = tickets.map(ticket => limit(() => dispatch(refundTicket({
344
402
  ticket
345
403
  }))));
@@ -358,33 +416,33 @@ const updateTicketsRefundRequested = ticketsRefundRequested => dispatch => dispa
358
416
 
359
417
  // SUMMIT ACTIONS
360
418
 
361
- const getExtraQuestions = attendeeId => async (dispatch, getState, _ref11) => {
419
+ const getExtraQuestions = attendeeId => async (dispatch, getState, _ref12) => {
362
420
  let {
363
421
  apiBaseUrl
364
- } = _ref11;
422
+ } = _ref12;
365
423
  const {
366
424
  widgetState: {
367
425
  summit
368
426
  }
369
427
  } = getState();
370
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(() => Promise.reject());
428
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(() => Promise.reject());
371
429
  const params = {
372
430
  page: 1,
373
- per_page: _utils_constants__WEBPACK_IMPORTED_MODULE_6__.FIFTY_PER_PAGE,
431
+ per_page: _utils_constants__WEBPACK_IMPORTED_MODULE_8__.FIFTY_PER_PAGE,
374
432
  expand: "*sub_question_rules,*sub_question,*values",
375
433
  access_token: accessToken,
376
434
  "filter[]": "tickets_exclude_inactives==true"
377
435
  };
378
436
  const endpoint = "".concat(apiBaseUrl, "/api/v1/summits/").concat(summit.id, "/attendees/").concat(attendeeId, "/allowed-extra-questions");
379
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(RECEIVE_EXTRA_QUESTIONS), endpoint, openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).then(() => {
437
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(RECEIVE_EXTRA_QUESTIONS), endpoint, customAuthErrorHandler)(params)(dispatch).then(() => {
380
438
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
381
439
  });
382
440
  };
383
- const getTicket = (ticketId, orderId) => async (dispatch, getState, _ref12) => {
441
+ const getTicket = (ticketId, orderId) => async (dispatch, getState, _ref13) => {
384
442
  let {
385
443
  apiBaseUrl
386
- } = _ref12;
387
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(() => Promise.reject());
444
+ } = _ref13;
445
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(() => Promise.reject());
388
446
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.startLoading)());
389
447
  const params = {
390
448
  access_token: accessToken,
@@ -393,7 +451,7 @@ const getTicket = (ticketId, orderId) => async (dispatch, getState, _ref12) => {
393
451
  fields: "owner.extra_questions.question.id,owner.extra_questions.question.name,owner.extra_questions.question.type"
394
452
  };
395
453
  const endpoint = "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets/").concat(ticketId);
396
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(RECEIVE_TICKET), endpoint, openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).finally(() => {
454
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.getRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(RECEIVE_TICKET), endpoint, customAuthErrorHandler)(params)(dispatch).finally(() => {
397
455
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
398
456
  });
399
457
  };
@@ -407,11 +465,11 @@ const normalizeTicket = entity => {
407
465
  }
408
466
  return normalizedEntity;
409
467
  };
410
- const refreshProfile = (data, company, ticketOwner) => (dispatch, getState, _ref13) => {
468
+ const refreshProfile = (data, company, ticketOwner) => (dispatch, getState, _ref14) => {
411
469
  var _ticketOwner$manager;
412
470
  let {
413
471
  updateProfile
414
- } = _ref13;
472
+ } = _ref14;
415
473
  const {
416
474
  widgetState: {
417
475
  user
@@ -444,24 +502,22 @@ const refreshProfile = (data, company, ticketOwner) => (dispatch, getState, _ref
444
502
  updateProfile(newProfile);
445
503
  }
446
504
  };
447
- const saveTicketDetails = (ticket, answers) => async (dispatch, getState, _ref14) => {
505
+ const saveTicketDetails = (ticket, answers) => async (dispatch, getState, _ref15) => {
448
506
  let {
449
507
  apiBaseUrl
450
- } = _ref14;
451
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(Promise.reject);
508
+ } = _ref15;
509
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(Promise.reject);
452
510
  if (!accessToken) return Promise.reject();
453
511
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.startLoading)());
454
512
  const params = {
455
513
  access_token: accessToken,
456
- expand: "refund_requests,owner,owner.extra_questions,owner.extra_questions.question,badge,badge.features,ticket_type,order",
457
- relations: "owner.extra_questions.question.none",
458
- fields: "owner.extra_questions.question.id,owner.extra_questions.question.name,owner.extra_questions.question.type"
514
+ expand: "refund_requests,owner,owner.extra_questions,badge,badge.features,ticket_type"
459
515
  };
460
516
  const idToken = (0,openstack_uicore_foundation_lib_security_methods__WEBPACK_IMPORTED_MODULE_3__.getIdToken)();
461
517
  let company = "";
462
518
  if (idToken) {
463
519
  try {
464
- const verifier = new (idtoken_verifier__WEBPACK_IMPORTED_MODULE_4___default())();
520
+ const verifier = new (idtoken_verifier__WEBPACK_IMPORTED_MODULE_5___default())();
465
521
  const jwt = verifier.decode(idToken);
466
522
  company = jwt.payload.company;
467
523
  } catch (e) {
@@ -470,7 +526,7 @@ const saveTicketDetails = (ticket, answers) => async (dispatch, getState, _ref14
470
526
  }
471
527
  }
472
528
  const normalizedEntity = normalizeTicket(answers);
473
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.putRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(UPDATE_TICKET), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/all/tickets/").concat(ticket.id), normalizedEntity, openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).then(async () => {
529
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.putRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(UPDATE_TICKET), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/all/tickets/").concat(ticket.id), normalizedEntity, customAuthErrorHandler)(params)(dispatch).then(async () => {
474
530
  dispatch(refreshProfile(answers, company, ticket.owner));
475
531
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
476
532
  }).catch(e => {
@@ -480,11 +536,11 @@ const saveTicketDetails = (ticket, answers) => async (dispatch, getState, _ref14
480
536
  };
481
537
  const assignAttendee = function (orderId, ticketId, attendee_email) {
482
538
  let message = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
483
- return async (dispatch, getState, _ref15) => {
539
+ return async (dispatch, getState, _ref16) => {
484
540
  let {
485
541
  apiBaseUrl
486
- } = _ref15;
487
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(Promise.reject);
542
+ } = _ref16;
543
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(Promise.reject);
488
544
  const payload = {
489
545
  attendee_email
490
546
  };
@@ -497,29 +553,29 @@ const assignAttendee = function (orderId, ticketId, attendee_email) {
497
553
  relations: "owner.extra_questions.question.none",
498
554
  fields: "owner.extra_questions.question.id,owner.extra_questions.question.name,owner.extra_questions.question.type"
499
555
  };
500
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.putRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(ASSIGN_TICKET), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets/").concat(ticketId, "/attendee"), payload, openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).finally(() => {
556
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.putRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(ASSIGN_TICKET), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets/").concat(ticketId, "/attendee"), payload, customAuthErrorHandler)(params)(dispatch).finally(() => {
501
557
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
502
558
  });
503
559
  };
504
560
  };
505
- const reassignTicket = (orderId, ticketId, email, message) => async (dispatch, getState, _ref16) => {
561
+ const reassignTicket = (orderId, ticketId, email, message) => async (dispatch, getState, _ref17) => {
506
562
  let {
507
563
  apiBaseUrl
508
- } = _ref16;
509
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(Promise.reject);
564
+ } = _ref17;
565
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(Promise.reject);
510
566
  if (!accessToken) return Promise.reject();
511
567
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.startLoading)());
512
568
  const params = {
513
569
  access_token: accessToken,
514
570
  expand: "order, owner, owner.extra_questions, order.summit"
515
571
  };
516
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.deleteRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(REMOVE_TICKET_ATTENDEE), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets/").concat(ticketId, "/attendee"), {}, openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).then(() => dispatch(assignAttendee(orderId, ticketId, email, message)));
572
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.deleteRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(REMOVE_TICKET_ATTENDEE), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets/").concat(ticketId, "/attendee"), {}, customAuthErrorHandler)(params)(dispatch).then(() => dispatch(assignAttendee(orderId, ticketId, email, message)));
517
573
  };
518
- const saveExtraQuestions = (ticket, answers) => async (dispatch, getState, _ref17) => {
574
+ const saveExtraQuestions = (ticket, answers) => async (dispatch, getState, _ref18) => {
519
575
  let {
520
576
  apiBaseUrl
521
- } = _ref17;
522
- const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_5__.getAccessTokenSafely)().catch(Promise.reject);
577
+ } = _ref18;
578
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(Promise.reject);
523
579
  if (!accessToken) return Promise.reject();
524
580
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.startLoading)());
525
581
  const params = {
@@ -528,13 +584,47 @@ const saveExtraQuestions = (ticket, answers) => async (dispatch, getState, _ref1
528
584
  relations: "owner.extra_questions.question.none",
529
585
  fields: "owner.extra_questions.question.id,owner.extra_questions.question.name,owner.extra_questions.question.type"
530
586
  };
531
- return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.putRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(UPDATE_TICKET), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/all/tickets/").concat(ticket.id), answers, openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.authErrorHandler)(params)(dispatch).then(async () => {
587
+ return (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.putRequest)(null, (0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.createAction)(UPDATE_TICKET), "".concat(apiBaseUrl, "/api/v1/summits/all/orders/all/tickets/").concat(ticket.id), answers, customAuthErrorHandler)(params)(dispatch).then(async () => {
532
588
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
533
589
  }).catch(e => {
534
590
  dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
535
591
  return e;
536
592
  });
537
593
  };
594
+ const getTicketPDF = ticket => async (dispatch, getState, _ref19) => {
595
+ let {
596
+ apiBaseUrl
597
+ } = _ref19;
598
+ const accessToken = await (0,_utils_auth__WEBPACK_IMPORTED_MODULE_7__.getAccessTokenSafely)().catch(Promise.reject);
599
+ if (!accessToken) return Promise.reject();
600
+ dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.startLoading)());
601
+ const params = {
602
+ access_token: accessToken
603
+ };
604
+ const orderId = ticket.order ? ticket.order.id : ticket.order_id;
605
+ const queryString = (0,openstack_uicore_foundation_lib_utils_methods__WEBPACK_IMPORTED_MODULE_4__.objectToQueryString)(params);
606
+ const apiUrl = "".concat(apiBaseUrl, "/api/v1/summits/all/orders/").concat(orderId, "/tickets/").concat(ticket.id, "/pdf?").concat(queryString);
607
+ return fetch(apiUrl, {
608
+ responseType: "Blob",
609
+ headers: {
610
+ "Content-Type": "application/pdf"
611
+ }
612
+ }).then(response => {
613
+ if (!response.ok) {
614
+ dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
615
+ throw response;
616
+ } else {
617
+ return response.blob();
618
+ }
619
+ }).then(pdf => {
620
+ dispatch((0,openstack_uicore_foundation_lib_utils_actions__WEBPACK_IMPORTED_MODULE_1__.stopLoading)());
621
+ const link = document.createElement("a");
622
+ const url = window.URL.createObjectURL(pdf);
623
+ link.href = url;
624
+ link.download = "ticket.pdf";
625
+ link.dispatchEvent(new MouseEvent("click"));
626
+ }).catch(customFetchErrorHandler);
627
+ };
538
628
 
539
629
  /***/ }),
540
630
 
@@ -729,6 +819,28 @@ CopyText.propTypes = {
729
819
 
730
820
  /***/ }),
731
821
 
822
+ /***/ "./src/components/CustomDialog/Context.js":
823
+ /*!************************************************!*\
824
+ !*** ./src/components/CustomDialog/Context.js ***!
825
+ \************************************************/
826
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
827
+
828
+ __webpack_require__.r(__webpack_exports__);
829
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
830
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
831
+ /* harmony export */ });
832
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
833
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
834
+
835
+ const defaultContextValue = {
836
+ setMessage: () => {},
837
+ setMessageCallback: () => {}
838
+ };
839
+ const CustomDialogContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)(defaultContextValue);
840
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CustomDialogContext);
841
+
842
+ /***/ }),
843
+
732
844
  /***/ "./src/components/CustomDialog/index.js":
733
845
  /*!**********************************************!*\
734
846
  !*** ./src/components/CustomDialog/index.js ***!
@@ -756,7 +868,7 @@ const CustomDialog = _ref => {
756
868
  open,
757
869
  onClose,
758
870
  title,
759
- description
871
+ body
760
872
  } = _ref;
761
873
  return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_2__.Dialog, {
762
874
  open: open,
@@ -769,7 +881,7 @@ const CustomDialog = _ref => {
769
881
  }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_2__.DialogContent, {
770
882
  children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_2__.DialogContentText, {
771
883
  id: "alert-dialog-description",
772
- children: description
884
+ children: body
773
885
  })
774
886
  })]
775
887
  });
@@ -778,7 +890,7 @@ CustomDialog.propTypes = {
778
890
  open: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),
779
891
  onClose: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),
780
892
  title: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
781
- description: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string)
893
+ body: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string)
782
894
  };
783
895
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CustomDialog);
784
896
 
@@ -2296,74 +2408,6 @@ Loader.propTypes = {
2296
2408
 
2297
2409
  /***/ }),
2298
2410
 
2299
- /***/ "./src/components/MultiStepSlider/index.js":
2300
- /*!*************************************************!*\
2301
- !*** ./src/components/MultiStepSlider/index.js ***!
2302
- \*************************************************/
2303
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2304
-
2305
- __webpack_require__.r(__webpack_exports__);
2306
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
2307
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2308
- /* harmony export */ });
2309
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
2310
- /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
2311
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "prop-types");
2312
- /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
2313
- /* harmony import */ var _mui_material_Drawer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material/Drawer */ "@mui/material/Drawer");
2314
- /* harmony import */ var _mui_material_Drawer__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_mui_material_Drawer__WEBPACK_IMPORTED_MODULE_2__);
2315
- /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ "@mui/material");
2316
- /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_mui_material__WEBPACK_IMPORTED_MODULE_3__);
2317
- /* harmony import */ var _mui_icons_material_Close__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/icons-material/Close */ "@mui/icons-material/Close");
2318
- /* harmony import */ var _mui_icons_material_Close__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_mui_icons_material_Close__WEBPACK_IMPORTED_MODULE_4__);
2319
- /* harmony import */ var _styles_module_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles.module.scss */ "./src/components/MultiStepSlider/styles.module.scss");
2320
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
2321
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);
2322
-
2323
-
2324
-
2325
-
2326
-
2327
-
2328
-
2329
- const MultiStepSlider = _ref => {
2330
- let {
2331
- children,
2332
- open,
2333
- onCloseSlider
2334
- } = _ref;
2335
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)((_mui_material_Drawer__WEBPACK_IMPORTED_MODULE_2___default()), {
2336
- anchor: "right",
2337
- open: open,
2338
- onClose: onCloseSlider,
2339
- style: {
2340
- zIndex: 1000
2341
- },
2342
- PaperProps: {
2343
- sx: {
2344
- width: "60%"
2345
- }
2346
- },
2347
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Container, {
2348
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_5__.multistepContainer,
2349
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)((_mui_icons_material_Close__WEBPACK_IMPORTED_MODULE_4___default()), {
2350
- fontSize: "large",
2351
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_5__.multistepCloseIcon,
2352
- onClick: onCloseSlider,
2353
- "data-testid": "close-slider"
2354
- }), children]
2355
- })
2356
- });
2357
- };
2358
- MultiStepSlider.propTypes = {
2359
- children: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().node),
2360
- open: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),
2361
- onCloseSlider: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)
2362
- };
2363
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MultiStepSlider);
2364
-
2365
- /***/ }),
2366
-
2367
2411
  /***/ "./src/components/MyOrdersTickets.js":
2368
2412
  /*!*******************************************!*\
2369
2413
  !*** ./src/components/MyOrdersTickets.js ***!
@@ -2390,10 +2434,14 @@ __webpack_require__.r(__webpack_exports__);
2390
2434
  /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../actions */ "./src/actions.js");
2391
2435
  /* harmony import */ var _utils_constants__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/constants */ "./src/utils/constants.js");
2392
2436
  /* harmony import */ var _CustomTheme__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./CustomTheme */ "./src/components/CustomTheme.js");
2393
- /* harmony import */ var _styles_module_scss__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./styles.module.scss */ "./src/components/styles.module.scss");
2394
- /* harmony import */ var _Loader__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./Loader */ "./src/components/Loader/index.js");
2395
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
2396
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__);
2437
+ /* harmony import */ var _Loader__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./Loader */ "./src/components/Loader/index.js");
2438
+ /* harmony import */ var _CustomDialog_Context__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./CustomDialog/Context */ "./src/components/CustomDialog/Context.js");
2439
+ /* harmony import */ var _CustomDialog__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./CustomDialog */ "./src/components/CustomDialog/index.js");
2440
+ /* harmony import */ var _styles_module_scss__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./styles.module.scss */ "./src/components/styles.module.scss");
2441
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
2442
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__);
2443
+
2444
+
2397
2445
 
2398
2446
 
2399
2447
 
@@ -2413,6 +2461,8 @@ const MyOrdersTickets = () => {
2413
2461
  t
2414
2462
  } = (0,react_i18next__WEBPACK_IMPORTED_MODULE_2__.useTranslation)();
2415
2463
  const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useDispatch)();
2464
+ const [message, setMessage] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)("");
2465
+ const [messageCallback, setMessageCallback] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
2416
2466
  const {
2417
2467
  summit,
2418
2468
  memberOrders,
@@ -2421,7 +2471,8 @@ const MyOrdersTickets = () => {
2421
2471
  orders_last_page,
2422
2472
  orders_per_page,
2423
2473
  orders_total,
2424
- ticket_per_page
2474
+ ticket_per_page,
2475
+ apiError
2425
2476
  } = (0,react_redux__WEBPACK_IMPORTED_MODULE_1__.useSelector)(state => state.widgetState || {}, react_redux__WEBPACK_IMPORTED_MODULE_1__.shallowEqual);
2426
2477
  const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});
2427
2478
  const [sort, setSort] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({});
@@ -2430,6 +2481,9 @@ const MyOrdersTickets = () => {
2430
2481
  setFilter({});
2431
2482
  dispatch((0,_actions__WEBPACK_IMPORTED_MODULE_8__.resetFilter)());
2432
2483
  };
2484
+ const resetApiError = () => {
2485
+ dispatch((0,_actions__WEBPACK_IMPORTED_MODULE_8__.resetError)());
2486
+ };
2433
2487
  const fetchData = async page => {
2434
2488
  dispatch((0,_actions__WEBPACK_IMPORTED_MODULE_8__.getUserOrders)({
2435
2489
  page,
@@ -2452,6 +2506,12 @@ const MyOrdersTickets = () => {
2452
2506
  (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
2453
2507
  fetchData(orders_current_page);
2454
2508
  }, [filter]);
2509
+ (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
2510
+ if (apiError) {
2511
+ setMessage(apiError);
2512
+ setMessageCallback(resetApiError);
2513
+ }
2514
+ }, [apiError]);
2455
2515
  const onFilter = filter => {
2456
2516
  setSort({});
2457
2517
  setFilter(filter);
@@ -2463,16 +2523,24 @@ const MyOrdersTickets = () => {
2463
2523
  name: "created"
2464
2524
  });
2465
2525
  };
2466
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)(_CustomTheme__WEBPACK_IMPORTED_MODULE_10__["default"], {
2467
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_Loader__WEBPACK_IMPORTED_MODULE_12__["default"], {
2526
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsxs)(_CustomTheme__WEBPACK_IMPORTED_MODULE_10__["default"], {
2527
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_Loader__WEBPACK_IMPORTED_MODULE_11__["default"], {
2468
2528
  open: loading
2469
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_FilterSortSearch__WEBPACK_IMPORTED_MODULE_5__["default"], {
2529
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_CustomDialog__WEBPACK_IMPORTED_MODULE_13__["default"], {
2530
+ open: !!message,
2531
+ onClose: () => {
2532
+ setMessage(null);
2533
+ if (messageCallback) messageCallback();
2534
+ },
2535
+ body: message === null || message === void 0 ? void 0 : message.body,
2536
+ title: message === null || message === void 0 ? void 0 : message.title
2537
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_FilterSortSearch__WEBPACK_IMPORTED_MODULE_5__["default"], {
2470
2538
  onFilter: onFilter,
2471
2539
  onSort: onSort,
2472
2540
  onSearch: onFilter,
2473
2541
  onReset: onReset
2474
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Box, {
2475
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_11__.widgetHeader,
2542
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Box, {
2543
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_14__.widgetHeader,
2476
2544
  sx: {
2477
2545
  padding: {
2478
2546
  xs: 2,
@@ -2481,25 +2549,28 @@ const MyOrdersTickets = () => {
2481
2549
  }
2482
2550
  },
2483
2551
  "data-testid": "my-orders-ticket-header",
2484
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("h2", {
2485
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_11__.summitTitleDate,
2552
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)("h2", {
2553
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_14__.summitTitleDate,
2486
2554
  children: summit === null || summit === void 0 ? void 0 : summit.name
2487
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("h2", {
2488
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_11__.summitTitleDate,
2555
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)("h2", {
2556
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_14__.summitTitleDate,
2489
2557
  children: (0,_utils_summitUtils__WEBPACK_IMPORTED_MODULE_7__.getSummitFormattedDate)(summit)
2490
2558
  })]
2491
- }), memberOrders !== null && memberOrders !== void 0 && memberOrders.length ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)((react_infinite_scroll_component__WEBPACK_IMPORTED_MODULE_4___default()), {
2492
- dataLength: orders_total,
2493
- next: () => fetchData(orders_current_page + _utils_constants__WEBPACK_IMPORTED_MODULE_9__.ONE_PAGE_NEXT),
2494
- hasMore: orders_current_page < orders_last_page,
2495
- scrollThreshold: 1,
2496
- children: memberOrders === null || memberOrders === void 0 ? void 0 : memberOrders.map(order => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_OrdersList__WEBPACK_IMPORTED_MODULE_6__["default"], {
2497
- order: order,
2498
- summit: summit
2499
- }, order.number + order.id))
2500
- }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Box, {
2501
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_11__.noOrdersFound,
2502
- children: t("orders.no_orders")
2559
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_CustomDialog_Context__WEBPACK_IMPORTED_MODULE_12__["default"].Provider, {
2560
+ value: (setMessage, setMessageCallback),
2561
+ children: memberOrders !== null && memberOrders !== void 0 && memberOrders.length ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)((react_infinite_scroll_component__WEBPACK_IMPORTED_MODULE_4___default()), {
2562
+ dataLength: orders_total,
2563
+ next: () => fetchData(orders_current_page + _utils_constants__WEBPACK_IMPORTED_MODULE_9__.ONE_PAGE_NEXT),
2564
+ hasMore: orders_current_page < orders_last_page,
2565
+ scrollThreshold: 1,
2566
+ children: memberOrders === null || memberOrders === void 0 ? void 0 : memberOrders.map(order => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_OrdersList__WEBPACK_IMPORTED_MODULE_6__["default"], {
2567
+ order: order,
2568
+ summit: summit
2569
+ }, order.number + order.id))
2570
+ }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_15__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Box, {
2571
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_14__.noOrdersFound,
2572
+ children: t("orders.no_orders")
2573
+ })
2503
2574
  })]
2504
2575
  });
2505
2576
  };
@@ -2807,7 +2878,8 @@ const OrderSummary = _ref => {
2807
2878
  onRefundClick,
2808
2879
  refundRequested,
2809
2880
  ticketsToRefund,
2810
- submitRequest
2881
+ submitRequest,
2882
+ onRefundDetailClick
2811
2883
  } = _ref;
2812
2884
  const {
2813
2885
  t
@@ -2849,7 +2921,7 @@ const OrderSummary = _ref => {
2849
2921
  ticketsToRefund: ticketsToRefund,
2850
2922
  submitRequest: submitRequest,
2851
2923
  onRefundClick: onRefundClick,
2852
- onRefundDetailClick: () => {},
2924
+ onRefundDetailClick: onRefundDetailClick,
2853
2925
  onEmailSupportClick: () => {}
2854
2926
  })
2855
2927
  })]
@@ -2961,7 +3033,7 @@ __webpack_require__.r(__webpack_exports__);
2961
3033
 
2962
3034
 
2963
3035
  const OrderListItem = _ref => {
2964
- var _order$memberTickets, _order$memberTickets2, _order$memberTickets3, _order$memberTickets4;
3036
+ var _order$memberTickets, _order$memberTickets2;
2965
3037
  let {
2966
3038
  summit,
2967
3039
  order,
@@ -2990,7 +3062,7 @@ const OrderListItem = _ref => {
2990
3062
  refundRequested: refundRequested,
2991
3063
  isSelectedToRefund: !!ticketsToRefund.find(t => t.id === ticket.id),
2992
3064
  selectToRefund: selectToRefund
2993
- }, ticket.id)), (order === null || order === void 0 || (_order$memberTickets3 = order.memberTickets) === null || _order$memberTickets3 === void 0 ? void 0 : _order$memberTickets3.length) >= itemsToDisplay && (order === null || order === void 0 || (_order$memberTickets4 = order.memberTickets) === null || _order$memberTickets4 === void 0 ? void 0 : _order$memberTickets4.length) !== (order === null || order === void 0 ? void 0 : order.tickets_total) ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Button, {
3065
+ }, ticket.id)), (order === null || order === void 0 ? void 0 : order.tickets_total) > itemsToDisplay ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_7__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Button, {
2994
3066
  "aria-label": "view more button",
2995
3067
  role: "button",
2996
3068
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_6__.viewMoreButton,
@@ -3120,10 +3192,10 @@ const TicketCTAs = _ref => {
3120
3192
  });
3121
3193
  };
3122
3194
  TicketCTAs.propTypes = {
3123
- isIncomplete: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),
3124
- isUnassigned: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),
3125
- isReassignable: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),
3126
- onOpenClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)
3195
+ isIncomplete: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool).isRequired,
3196
+ isUnassigned: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool).isRequired,
3197
+ isReassignable: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool).isRequired,
3198
+ onOpenClick: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func).isRequired
3127
3199
  };
3128
3200
  const OrderListTickets = _ref2 => {
3129
3201
  var _ticket$ticket_type, _ticket$owner, _ticket$owner2, _ticket$owner3;
@@ -3160,7 +3232,7 @@ const OrderListTickets = _ref2 => {
3160
3232
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3161
3233
  xs: 8,
3162
3234
  padding: 2,
3163
- item5: true,
3235
+ item: true,
3164
3236
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_15__.ticketTicketType,
3165
3237
  justify: "space-between",
3166
3238
  children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsxs)((_mui_material_Stack__WEBPACK_IMPORTED_MODULE_4___default()), {
@@ -3309,8 +3381,10 @@ __webpack_require__.r(__webpack_exports__);
3309
3381
  /* harmony import */ var _Labels_ErrorLabel__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../Labels/ErrorLabel */ "./src/components/Labels/ErrorLabel.js");
3310
3382
  /* harmony import */ var _utils_ticketUtils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/ticketUtils */ "./src/utils/ticketUtils.js");
3311
3383
  /* harmony import */ var _styles_module_scss__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./styles.module.scss */ "./src/components/OrdersList/styles.module.scss");
3312
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
3313
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__);
3384
+ /* harmony import */ var _RefundRequests_RefundDetails__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../RefundRequests/RefundDetails */ "./src/components/RefundRequests/RefundDetails.js");
3385
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
3386
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__);
3387
+
3314
3388
 
3315
3389
 
3316
3390
 
@@ -3331,7 +3405,7 @@ const TabPanel = props => {
3331
3405
  value,
3332
3406
  index
3333
3407
  } = props;
3334
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("div", {
3408
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("div", {
3335
3409
  role: "tabpanel",
3336
3410
  hidden: value !== index,
3337
3411
  id: "tabpanel-".concat(index),
@@ -3341,9 +3415,9 @@ const TabPanel = props => {
3341
3415
  };
3342
3416
  const OrdersListDesktopMobile = _ref => {
3343
3417
  let {
3418
+ isMobile,
3344
3419
  summit,
3345
3420
  order,
3346
- isMobile,
3347
3421
  detailsRequired,
3348
3422
  onPaginateClick
3349
3423
  } = _ref;
@@ -3357,6 +3431,7 @@ const OrdersListDesktopMobile = _ref => {
3357
3431
  const [refundRequested, setRefundRequested] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
3358
3432
  const [ticketsToRefund, setTicketsToRefund] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
3359
3433
  const [submitRequest, setSubmitRequest] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
3434
+ const [refundDetailsOpen, setRefundDetailsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
3360
3435
  const onRefundClick = () => {
3361
3436
  if (ticketsToRefund.length === 0) {
3362
3437
  setRefundRequested(true);
@@ -3394,20 +3469,20 @@ const OrdersListDesktopMobile = _ref => {
3394
3469
  setSubmitRequest(false);
3395
3470
  setTicketsToRefund([]);
3396
3471
  };
3397
- const moreDetails = () => detailsRequired && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_Labels_ErrorLabel__WEBPACK_IMPORTED_MODULE_10__["default"], {
3472
+ const moreDetails = () => detailsRequired && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_Labels_ErrorLabel__WEBPACK_IMPORTED_MODULE_10__["default"], {
3398
3473
  message: t("ticket_status.status_details_required"),
3399
3474
  color: "#ff9800",
3400
3475
  dataTestId: "more-details-label"
3401
3476
  });
3402
- return isMobile ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Box, {
3477
+ return isMobile ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Box, {
3403
3478
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_12__.ticketListContainer,
3404
3479
  "data-testid": "mobile-orders-list-container",
3405
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Box, {
3480
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Box, {
3406
3481
  sx: {
3407
3482
  borderColor: "divider",
3408
3483
  pb: 2
3409
3484
  },
3410
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)((_mui_material_Tabs__WEBPACK_IMPORTED_MODULE_5___default()), {
3485
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)((_mui_material_Tabs__WEBPACK_IMPORTED_MODULE_5___default()), {
3411
3486
  value: value,
3412
3487
  onChange: handleChange,
3413
3488
  textColor: "#000",
@@ -3417,18 +3492,18 @@ const OrdersListDesktopMobile = _ref => {
3417
3492
  background: "#000"
3418
3493
  }
3419
3494
  },
3420
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)((_mui_material_Tab__WEBPACK_IMPORTED_MODULE_6___default()), {
3495
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)((_mui_material_Tab__WEBPACK_IMPORTED_MODULE_6___default()), {
3421
3496
  label: t("labels.tickets"),
3422
3497
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_12__.tabButtons
3423
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)((_mui_material_Tab__WEBPACK_IMPORTED_MODULE_6___default()), {
3498
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)((_mui_material_Tab__WEBPACK_IMPORTED_MODULE_6___default()), {
3424
3499
  label: t("labels.summary"),
3425
3500
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_12__.tabButtons
3426
3501
  })]
3427
3502
  })
3428
- }), moreDetails(), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(TabPanel, {
3503
+ }), moreDetails(), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(TabPanel, {
3429
3504
  value: value,
3430
3505
  index: 0,
3431
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_OrderListItem__WEBPACK_IMPORTED_MODULE_7__["default"], {
3506
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_OrderListItem__WEBPACK_IMPORTED_MODULE_7__["default"], {
3432
3507
  summit: summit,
3433
3508
  order: order,
3434
3509
  onPaginateClick: onPaginateClick,
@@ -3438,10 +3513,10 @@ const OrdersListDesktopMobile = _ref => {
3438
3513
  submitRequest: submitRequest,
3439
3514
  unselectRefundTickets: unselectRefundTickets
3440
3515
  })
3441
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(TabPanel, {
3516
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(TabPanel, {
3442
3517
  value: value,
3443
3518
  index: 1,
3444
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_OrderSummary__WEBPACK_IMPORTED_MODULE_8__["default"], {
3519
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_OrderSummary__WEBPACK_IMPORTED_MODULE_8__["default"], {
3445
3520
  order: order,
3446
3521
  summit: summit,
3447
3522
  onRefundClick: onRefundClick,
@@ -3450,29 +3525,29 @@ const OrdersListDesktopMobile = _ref => {
3450
3525
  submitRequest: submitRequest
3451
3526
  })
3452
3527
  })]
3453
- }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.Fragment, {
3454
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3528
+ }) : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.Fragment, {
3529
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3455
3530
  item: true,
3456
3531
  md: 12,
3457
3532
  children: moreDetails()
3458
- }), refundRequested && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3533
+ }), refundRequested && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3459
3534
  item: true,
3460
3535
  md: 12,
3461
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("span", {
3536
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("span", {
3462
3537
  children: t("ticket_status.select_ticket_refund")
3463
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsxs)((_mui_material_Stack__WEBPACK_IMPORTED_MODULE_4___default()), {
3538
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)((_mui_material_Stack__WEBPACK_IMPORTED_MODULE_4___default()), {
3464
3539
  sx: {
3465
3540
  justifyContent: "flex-start"
3466
3541
  },
3467
3542
  alignItems: "center",
3468
3543
  direction: "row",
3469
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Button, {
3544
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Button, {
3470
3545
  variant: "outlined",
3471
3546
  size: "medium",
3472
3547
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_12__.refundButtons,
3473
3548
  onClick: selectAllTickets,
3474
3549
  children: t("ticket_status.select_all")
3475
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Button, {
3550
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Button, {
3476
3551
  variant: "outlined",
3477
3552
  size: "medium",
3478
3553
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_12__.refundButtons,
@@ -3480,7 +3555,7 @@ const OrdersListDesktopMobile = _ref => {
3480
3555
  children: t("ticket_status.select_cancel")
3481
3556
  })]
3482
3557
  })]
3483
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3558
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3484
3559
  padding: 1,
3485
3560
  item: true,
3486
3561
  md: 7,
@@ -3489,7 +3564,7 @@ const OrdersListDesktopMobile = _ref => {
3489
3564
  },
3490
3565
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_12__.ticketListContainer,
3491
3566
  "data-testid": "desktop-orders-list-container",
3492
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_OrderListItem__WEBPACK_IMPORTED_MODULE_7__["default"], {
3567
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_OrderListItem__WEBPACK_IMPORTED_MODULE_7__["default"], {
3493
3568
  summit: summit,
3494
3569
  order: order,
3495
3570
  onPaginateClick: onPaginateClick,
@@ -3499,31 +3574,36 @@ const OrdersListDesktopMobile = _ref => {
3499
3574
  submitRequest: submitRequest,
3500
3575
  unselectRefundTickets: unselectRefundTickets
3501
3576
  })
3502
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3577
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3503
3578
  padding: 1,
3504
3579
  item: true,
3505
3580
  md: 5,
3506
3581
  order: {
3507
3582
  md: 1
3508
3583
  },
3509
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_OrderSummary__WEBPACK_IMPORTED_MODULE_8__["default"], {
3584
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_OrderSummary__WEBPACK_IMPORTED_MODULE_8__["default"], {
3510
3585
  summit: summit,
3511
3586
  order: order,
3512
3587
  onRefundClick: onRefundClick,
3513
3588
  ticketsToRefund: ticketsToRefund,
3514
3589
  refundRequested: refundRequested,
3515
- submitRequest: submitRequest
3590
+ submitRequest: submitRequest,
3591
+ onRefundDetailClick: () => setRefundDetailsOpen(true)
3516
3592
  })
3517
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)(_RefundRequests__WEBPACK_IMPORTED_MODULE_9__["default"], {
3593
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_RefundRequests__WEBPACK_IMPORTED_MODULE_9__["default"], {
3518
3594
  tickets: ticketsToRefund,
3519
3595
  open: submitRequest,
3520
3596
  onRemoveSelectedRefundTickets: unselectRefundTickets,
3521
3597
  onRefundSuccessClose: () => resetAllRefundStatuses(),
3522
3598
  onCloseSlider: () => setSubmitRequest(false)
3599
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_RefundRequests_RefundDetails__WEBPACK_IMPORTED_MODULE_13__["default"], {
3600
+ tickets: order === null || order === void 0 ? void 0 : order.memberTickets,
3601
+ open: refundDetailsOpen,
3602
+ onCloseSlider: () => setRefundDetailsOpen(false)
3523
3603
  })]
3524
3604
  });
3525
3605
  };
3526
- _OrderSummary__WEBPACK_IMPORTED_MODULE_8__["default"].propTypes = {
3606
+ OrdersListDesktopMobile.propTypes = {
3527
3607
  summit: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object),
3528
3608
  order: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({
3529
3609
  memberTickets: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(Object)
@@ -3657,7 +3737,7 @@ const OrdersList = _ref => {
3657
3737
  isMobile: isMobile,
3658
3738
  summit: summit,
3659
3739
  order: order,
3660
- detailsRequired: detailsRequired,
3740
+ detailsRequired: !!detailsRequired,
3661
3741
  onPaginateClick: onPaginateClick
3662
3742
  })
3663
3743
  }, order.id)]
@@ -3671,6 +3751,64 @@ OrdersList.propTypes = {
3671
3751
 
3672
3752
  /***/ }),
3673
3753
 
3754
+ /***/ "./src/components/RefundRequests/RefundDetails.js":
3755
+ /*!********************************************************!*\
3756
+ !*** ./src/components/RefundRequests/RefundDetails.js ***!
3757
+ \********************************************************/
3758
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3759
+
3760
+ __webpack_require__.r(__webpack_exports__);
3761
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3762
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
3763
+ /* harmony export */ });
3764
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3765
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3766
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "prop-types");
3767
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
3768
+ /* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-i18next */ "react-i18next");
3769
+ /* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_i18next__WEBPACK_IMPORTED_MODULE_2__);
3770
+ /* harmony import */ var _RightDrawer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../RightDrawer */ "./src/components/RightDrawer/index.js");
3771
+ /* harmony import */ var _RefundRequestedTicket__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RefundRequestedTicket */ "./src/components/RefundRequests/RefundRequestedTicket.js");
3772
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
3773
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__);
3774
+
3775
+
3776
+
3777
+
3778
+
3779
+
3780
+ const RefundDetails = _ref => {
3781
+ let {
3782
+ tickets,
3783
+ open,
3784
+ onCloseSlider
3785
+ } = _ref;
3786
+ const {
3787
+ t
3788
+ } = (0,react_i18next__WEBPACK_IMPORTED_MODULE_2__.useTranslation)();
3789
+ const closeSlider = () => {
3790
+ onCloseSlider();
3791
+ };
3792
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_RightDrawer__WEBPACK_IMPORTED_MODULE_3__["default"], {
3793
+ id: "refund-details",
3794
+ open: open,
3795
+ onClose: closeSlider,
3796
+ title: t("order_summary.refund_details"),
3797
+ children: tickets === null || tickets === void 0 ? void 0 : tickets.map(ticket => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_RefundRequestedTicket__WEBPACK_IMPORTED_MODULE_4__["default"], {
3798
+ ticket: ticket,
3799
+ refundDetails: true
3800
+ }, "refund_req_".concat(ticket === null || ticket === void 0 ? void 0 : ticket.id)))
3801
+ });
3802
+ };
3803
+ RefundDetails.propTypes = {
3804
+ tickets: prop_types__WEBPACK_IMPORTED_MODULE_1___default().arrayOf(Object),
3805
+ open: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool),
3806
+ onCloseSlider: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)
3807
+ };
3808
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefundDetails);
3809
+
3810
+ /***/ }),
3811
+
3674
3812
  /***/ "./src/components/RefundRequests/RefundRequestedTicket.js":
3675
3813
  /*!****************************************************************!*\
3676
3814
  !*** ./src/components/RefundRequests/RefundRequestedTicket.js ***!
@@ -3694,10 +3832,12 @@ __webpack_require__.r(__webpack_exports__);
3694
3832
  /* harmony import */ var _mui_icons_material_DeleteOutline__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/icons-material/DeleteOutline */ "@mui/icons-material/DeleteOutline");
3695
3833
  /* harmony import */ var _mui_icons_material_DeleteOutline__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_mui_icons_material_DeleteOutline__WEBPACK_IMPORTED_MODULE_5__);
3696
3834
  /* harmony import */ var _OrdersList_AttendeeStatus__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../OrdersList/AttendeeStatus */ "./src/components/OrdersList/AttendeeStatus.js");
3697
- /* harmony import */ var _CopyText__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../CopyText */ "./src/components/CopyText/index.js");
3698
- /* harmony import */ var _styles_module_scss__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./styles.module.scss */ "./src/components/RefundRequests/styles.module.scss");
3699
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
3700
- /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__);
3835
+ /* harmony import */ var _RefundStatus__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./RefundStatus */ "./src/components/RefundRequests/RefundStatus.js");
3836
+ /* harmony import */ var _CopyText__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../CopyText */ "./src/components/CopyText/index.js");
3837
+ /* harmony import */ var _styles_module_scss__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./styles.module.scss */ "./src/components/RefundRequests/styles.module.scss");
3838
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
3839
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__);
3840
+
3701
3841
 
3702
3842
 
3703
3843
 
@@ -3712,57 +3852,117 @@ const RefundRequestedTicket = _ref => {
3712
3852
  var _ticket$ticket_type;
3713
3853
  let {
3714
3854
  ticket,
3715
- onRemove
3855
+ onRemove,
3856
+ refundDetails
3716
3857
  } = _ref;
3717
3858
  const {
3718
3859
  t
3719
3860
  } = (0,react_i18next__WEBPACK_IMPORTED_MODULE_2__.useTranslation)();
3720
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3861
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3721
3862
  container: true,
3722
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_8__.refundTicketBoxContainer,
3863
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_9__.refundTicketBoxContainer,
3723
3864
  "data-testid": "refund-requested-ticket-container",
3724
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3865
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3725
3866
  xs: 12,
3726
3867
  padding: 2,
3727
3868
  item: true,
3728
3869
  justify: "space-between",
3729
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)((_mui_material_Stack__WEBPACK_IMPORTED_MODULE_4___default()), {
3870
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)((_mui_material_Stack__WEBPACK_IMPORTED_MODULE_4___default()), {
3730
3871
  sx: {
3731
3872
  justifyContent: "space-between"
3732
3873
  },
3733
3874
  direction: "row",
3734
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)("h4", {
3875
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)("h4", {
3735
3876
  children: (_ticket$ticket_type = ticket.ticket_type) === null || _ticket$ticket_type === void 0 ? void 0 : _ticket$ticket_type.name
3736
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)((_mui_icons_material_DeleteOutline__WEBPACK_IMPORTED_MODULE_5___default()), {
3877
+ }), !refundDetails && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)((_mui_icons_material_DeleteOutline__WEBPACK_IMPORTED_MODULE_5___default()), {
3737
3878
  "data-testid": "refund-remove-button",
3738
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_8__.deleteIcon,
3879
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_9__.deleteIcon,
3739
3880
  onClick: () => onRemove(ticket)
3740
3881
  })]
3741
3882
  })
3742
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3883
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3743
3884
  xs: 12,
3744
3885
  padding: 2,
3745
3886
  item: true,
3746
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_OrdersList_AttendeeStatus__WEBPACK_IMPORTED_MODULE_6__["default"], {
3887
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_OrdersList_AttendeeStatus__WEBPACK_IMPORTED_MODULE_6__["default"], {
3747
3888
  ticket: ticket
3748
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsxs)("span", {
3749
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_8__.ticketNo,
3750
- children: [t("ticket_status.ticket_no"), ":", " ", /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_9__.jsx)(_CopyText__WEBPACK_IMPORTED_MODULE_7__["default"], {
3889
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsxs)("span", {
3890
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_9__.ticketNo,
3891
+ children: [t("ticket_status.ticket_no"), ":", " ", /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_CopyText__WEBPACK_IMPORTED_MODULE_8__["default"], {
3751
3892
  text: ticket.number,
3752
3893
  hideCopy: true
3753
3894
  })]
3754
3895
  })]
3896
+ }), refundDetails && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Grid, {
3897
+ xs: 12,
3898
+ padding: 2,
3899
+ item: true,
3900
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_RefundStatus__WEBPACK_IMPORTED_MODULE_7__["default"], {
3901
+ ticket: ticket
3902
+ })
3755
3903
  })]
3756
3904
  });
3757
3905
  };
3758
3906
  RefundRequestedTicket.propTypes = {
3759
3907
  ticket: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object),
3760
- onRemove: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func)
3908
+ onRemove: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().func),
3909
+ refundDetails: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().bool)
3761
3910
  };
3762
3911
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefundRequestedTicket);
3763
3912
 
3764
3913
  /***/ }),
3765
3914
 
3915
+ /***/ "./src/components/RefundRequests/RefundStatus.js":
3916
+ /*!*******************************************************!*\
3917
+ !*** ./src/components/RefundRequests/RefundStatus.js ***!
3918
+ \*******************************************************/
3919
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3920
+
3921
+ __webpack_require__.r(__webpack_exports__);
3922
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
3923
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
3924
+ /* harmony export */ });
3925
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
3926
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
3927
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "prop-types");
3928
+ /* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
3929
+ /* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-i18next */ "react-i18next");
3930
+ /* harmony import */ var react_i18next__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react_i18next__WEBPACK_IMPORTED_MODULE_2__);
3931
+ /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ "@mui/material");
3932
+ /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_mui_material__WEBPACK_IMPORTED_MODULE_3__);
3933
+ /* harmony import */ var _utils_ticketUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/ticketUtils */ "./src/utils/ticketUtils.js");
3934
+ /* harmony import */ var _styles_module_scss__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./styles.module.scss */ "./src/components/RefundRequests/styles.module.scss");
3935
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
3936
+ /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__);
3937
+
3938
+
3939
+
3940
+
3941
+
3942
+
3943
+
3944
+ const RefundStatus = _ref => {
3945
+ let {
3946
+ ticket
3947
+ } = _ref;
3948
+ const {
3949
+ t
3950
+ } = (0,react_i18next__WEBPACK_IMPORTED_MODULE_2__.useTranslation)();
3951
+ const statusColor = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => (0,_utils_ticketUtils__WEBPACK_IMPORTED_MODULE_4__.getRefundRequestedStatusColor)(ticket), [ticket]);
3952
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_6__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_3__.Button, {
3953
+ role: "button",
3954
+ "aria-label": "ticket refund status label",
3955
+ className: "".concat(_styles_module_scss__WEBPACK_IMPORTED_MODULE_5__.buttonPill, " ").concat(_styles_module_scss__WEBPACK_IMPORTED_MODULE_5__[statusColor]),
3956
+ children: t("ticket_status.refund_request_".concat(statusColor))
3957
+ });
3958
+ };
3959
+ RefundStatus.propTypes = {
3960
+ ticket: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object)
3961
+ };
3962
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (RefundStatus);
3963
+
3964
+ /***/ }),
3965
+
3766
3966
  /***/ "./src/components/RefundRequests/index.js":
3767
3967
  /*!************************************************!*\
3768
3968
  !*** ./src/components/RefundRequests/index.js ***!
@@ -3785,7 +3985,7 @@ __webpack_require__.r(__webpack_exports__);
3785
3985
  /* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_mui_material__WEBPACK_IMPORTED_MODULE_4__);
3786
3986
  /* harmony import */ var _mui_icons_material_CheckCircle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/icons-material/CheckCircle */ "@mui/icons-material/CheckCircle");
3787
3987
  /* harmony import */ var _mui_icons_material_CheckCircle__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_mui_icons_material_CheckCircle__WEBPACK_IMPORTED_MODULE_5__);
3788
- /* harmony import */ var _MultiStepSlider__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../MultiStepSlider */ "./src/components/MultiStepSlider/index.js");
3988
+ /* harmony import */ var _RightDrawer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../RightDrawer */ "./src/components/RightDrawer/index.js");
3789
3989
  /* harmony import */ var _RefundRequestedTicket__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./RefundRequestedTicket */ "./src/components/RefundRequests/RefundRequestedTicket.js");
3790
3990
  /* harmony import */ var _Labels_ErrorLabel__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../Labels/ErrorLabel */ "./src/components/Labels/ErrorLabel.js");
3791
3991
  /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../actions */ "./src/actions.js");
@@ -3908,16 +4108,13 @@ const RefundRequestsModal = _ref => {
3908
4108
  };
3909
4109
  return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.StyledEngineProvider, {
3910
4110
  injectFirst: true,
3911
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsxs)(_MultiStepSlider__WEBPACK_IMPORTED_MODULE_6__["default"], {
4111
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_RightDrawer__WEBPACK_IMPORTED_MODULE_6__["default"], {
4112
+ id: "refund-requests",
3912
4113
  open: open,
3913
- onCloseSlider: closeSlider,
3914
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
3915
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_11__.refundHeaders,
3916
- "data-testid": "refund-request-modal",
3917
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__.jsx)("h3", {
3918
- children: t("order_summary.request_refund")
3919
- })
3920
- }), renderSteps()]
4114
+ onClose: closeSlider,
4115
+ title: t("order_summary.request_refund"),
4116
+ "data-testid": "refund-request-modal",
4117
+ children: renderSteps()
3921
4118
  })
3922
4119
  });
3923
4120
  };
@@ -3993,6 +4190,7 @@ const RightDrawer = _ref => {
3993
4190
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_2__.Box, {
3994
4191
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_4__.header,
3995
4192
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_5__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_2__.IconButton, {
4193
+ "data-testid": "close-drawer",
3996
4194
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_4__.closeBtn,
3997
4195
  onClick: onClose,
3998
4196
  sx: {
@@ -4153,9 +4351,9 @@ __webpack_require__.r(__webpack_exports__);
4153
4351
  /* harmony import */ var _AssignEQForm__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../AssignEQForm */ "./src/components/AssignEQForm/index.js");
4154
4352
  /* harmony import */ var _components_AssignForm__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./components/AssignForm */ "./src/components/TicketAssign/components/AssignForm/index.js");
4155
4353
  /* harmony import */ var _ExtraQuestionsFields_components_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../ExtraQuestionsFields/components/utils */ "./src/components/ExtraQuestionsFields/components/utils.js");
4156
- /* harmony import */ var _CustomDialog__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../CustomDialog */ "./src/components/CustomDialog/index.js");
4157
- /* harmony import */ var _utils_constants__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/constants */ "./src/utils/constants.js");
4158
- /* harmony import */ var _CopyText__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../CopyText */ "./src/components/CopyText/index.js");
4354
+ /* harmony import */ var _utils_constants__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/constants */ "./src/utils/constants.js");
4355
+ /* harmony import */ var _CopyText__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../CopyText */ "./src/components/CopyText/index.js");
4356
+ /* harmony import */ var _CustomDialog_Context__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../CustomDialog/Context */ "./src/components/CustomDialog/Context.js");
4159
4357
  /* harmony import */ var _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./styles.module.scss */ "./src/components/TicketAssign/styles.module.scss");
4160
4358
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
4161
4359
  /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__);
@@ -4201,8 +4399,11 @@ const TicketAssign = _ref => {
4201
4399
  t
4202
4400
  } = (0,react_i18next__WEBPACK_IMPORTED_MODULE_3__.useTranslation)();
4203
4401
  const dispatch = (0,react_redux__WEBPACK_IMPORTED_MODULE_2__.useDispatch)();
4204
- const [saveMessage, setSaveMessage] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
4205
4402
  const [ticketAssigned, setTicketAssigned] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
4403
+ const {
4404
+ setMessage,
4405
+ setMessageCallback
4406
+ } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_CustomDialog_Context__WEBPACK_IMPORTED_MODULE_12__["default"]);
4206
4407
  const {
4207
4408
  currentTicket: ticket,
4208
4409
  extraQuestions,
@@ -4237,119 +4438,132 @@ const TicketAssign = _ref => {
4237
4438
  onClose();
4238
4439
  };
4239
4440
  const onCloseSaveMessage = () => {
4240
- setSaveMessage(null);
4241
4441
  setTicketAssigned(false);
4242
- setTimeout(onClose, _utils_constants__WEBPACK_IMPORTED_MODULE_11__.MILLISEC_TO_SEC);
4442
+ setTimeout(onClose, _utils_constants__WEBPACK_IMPORTED_MODULE_10__.MILLISEC_TO_SEC);
4243
4443
  };
4244
4444
  const onSaveEQ = val => {
4245
4445
  const answers = (0,_ExtraQuestionsFields_components_utils__WEBPACK_IMPORTED_MODULE_9__.transformAnwersFormat)(val);
4246
4446
  return dispatch((0,_actions__WEBPACK_IMPORTED_MODULE_5__.saveExtraQuestions)(ticket, answers)).then(() => {
4247
- setSaveMessage({
4447
+ setMessage({
4248
4448
  title: t("ticket_assign.saving_success"),
4249
- description: t("ticket_assign.saving_success_description")
4449
+ body: t("ticket_assign.saving_success_description")
4250
4450
  });
4451
+ setMessageCallback(onCloseSaveMessage);
4251
4452
  return Promise.resolve();
4252
4453
  }).catch(err => {
4253
- setSaveMessage({
4454
+ setMessage({
4254
4455
  title: t("ticket_assign.saving_error"),
4255
- description: err.toString()
4456
+ body: err.toString()
4256
4457
  });
4257
4458
  return Promise.reject();
4258
4459
  });
4259
4460
  };
4260
- return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.Fragment, {
4261
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_RightDrawer__WEBPACK_IMPORTED_MODULE_6__["default"], {
4262
- id: "reassignDrawer",
4263
- title: t("ticket_assign.assign_ticket"),
4264
- open: open,
4265
- onClose: onClose,
4266
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.ticketAssignContainer,
4461
+ return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_RightDrawer__WEBPACK_IMPORTED_MODULE_6__["default"], {
4462
+ id: "reassignDrawer",
4463
+ title: t("ticket_assign.assign_ticket"),
4464
+ open: open,
4465
+ onClose: onClose,
4466
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.ticketAssignContainer,
4467
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4468
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.alignCenter,
4469
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4470
+ variant: "body1",
4471
+ gutterBottom: true,
4472
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.subtitle,
4473
+ children: [t("ticket_assign.purchased_by"), " ", ticket === null || ticket === void 0 || (_ticket$order = ticket.order) === null || _ticket$order === void 0 ? void 0 : _ticket$order.owner_email]
4474
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4475
+ variant: "body1",
4476
+ gutterBottom: true,
4477
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.orderNo,
4478
+ children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_CopyText__WEBPACK_IMPORTED_MODULE_11__["default"], {
4479
+ text: ticket === null || ticket === void 0 || (_ticket$order2 = ticket.order) === null || _ticket$order2 === void 0 ? void 0 : _ticket$order2.number,
4480
+ reversed: true,
4481
+ width: 250,
4482
+ tooltipText: t("order_summary.copy_order_number")
4483
+ })
4484
+ })]
4485
+ }), ticket && !ticketAssigned && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.Fragment, {
4267
4486
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4268
4487
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.alignCenter,
4269
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4270
- variant: "body1",
4271
- gutterBottom: true,
4272
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.subtitle,
4273
- children: [t("ticket_assign.purchased_by"), " ", ticket === null || ticket === void 0 || (_ticket$order = ticket.order) === null || _ticket$order === void 0 ? void 0 : _ticket$order.owner_email]
4274
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4275
- variant: "body1",
4488
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4489
+ variant: "h4",
4276
4490
  gutterBottom: true,
4277
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.orderNo,
4278
- children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_CopyText__WEBPACK_IMPORTED_MODULE_12__["default"], {
4279
- text: ticket === null || ticket === void 0 || (_ticket$order2 = ticket.order) === null || _ticket$order2 === void 0 ? void 0 : _ticket$order2.number,
4280
- reversed: true,
4281
- width: 250,
4282
- tooltipText: t("order_summary.copy_order_number")
4283
- })
4491
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.ticketType,
4492
+ children: ticket === null || ticket === void 0 || (_ticket$type = ticket.type) === null || _ticket$type === void 0 ? void 0 : _ticket$type.name
4493
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Button, {
4494
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.assignBtn,
4495
+ color: "primary",
4496
+ size: "large",
4497
+ variant: "contained",
4498
+ onClick: onAssignToMe,
4499
+ children: t("ticket_assign.assign_to_me")
4284
4500
  })]
4285
- }), ticket && !ticketAssigned && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.Fragment, {
4286
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4287
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.alignCenter,
4288
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4289
- variant: "h4",
4290
- gutterBottom: true,
4291
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.ticketType,
4292
- children: ticket === null || ticket === void 0 || (_ticket$type = ticket.type) === null || _ticket$type === void 0 ? void 0 : _ticket$type.name
4293
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Button, {
4294
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.assignBtn,
4295
- color: "primary",
4296
- size: "large",
4297
- variant: "contained",
4298
- onClick: onAssignToMe,
4299
- children: t("ticket_assign.assign_to_me")
4300
- })]
4301
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Divider, {
4302
- variant: "middle",
4303
- children: "\xA0\xA0or\xA0\xA0"
4304
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4305
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeContainer,
4306
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4307
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.alignCenter,
4308
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4309
- variant: "h4",
4310
- gutterBottom: true,
4311
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeInfoTitle,
4312
- children: t("ticket_assign.assign_to_someone_else")
4313
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4314
- variant: "body1",
4315
- gutterBottom: true,
4316
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeInfoNote,
4317
- children: t("ticket_assign.enter_email_note")
4318
- })]
4319
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_AssignForm__WEBPACK_IMPORTED_MODULE_8__["default"], {
4320
- onSubmit: onAssignToOther,
4321
- onClose: onClose,
4322
- saveLabel: t("ticket_assign.save_label")
4323
- })]
4324
- })]
4325
- }), ticket && ticketAssigned && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4501
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Divider, {
4502
+ variant: "middle",
4503
+ children: "\xA0\xA0or\xA0\xA0"
4504
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4326
4505
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeContainer,
4327
4506
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4328
4507
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.alignCenter,
4329
- children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4508
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4330
4509
  variant: "h4",
4331
4510
  gutterBottom: true,
4332
4511
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeInfoTitle,
4333
- children: [t("ticket_assign.assigned_to"), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("br", {}), ticket === null || ticket === void 0 || (_ticket$owner = ticket.owner) === null || _ticket$owner === void 0 ? void 0 : _ticket$owner.email]
4512
+ children: t("ticket_assign.assign_to_someone_else")
4334
4513
  }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4335
4514
  variant: "body1",
4336
4515
  gutterBottom: true,
4337
4516
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeInfoNote,
4338
- children: t("ticket_assign.complete_info")
4517
+ children: t("ticket_assign.enter_email_note")
4339
4518
  })]
4340
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_AssignEQForm__WEBPACK_IMPORTED_MODULE_7__["default"], {
4341
- ticket: ticket,
4342
- summit: summit,
4343
- extraQuestions: extraQuestions,
4344
- onSubmit: onSaveEQ,
4345
- onClose: onCloseEQForm
4519
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_AssignForm__WEBPACK_IMPORTED_MODULE_8__["default"], {
4520
+ onSubmit: onAssignToOther,
4521
+ onClose: onClose,
4522
+ saveLabel: t("ticket_assign.save_label")
4346
4523
  })]
4347
4524
  })]
4348
- }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_CustomDialog__WEBPACK_IMPORTED_MODULE_10__["default"], {
4349
- open: !!saveMessage,
4350
- onClose: onCloseSaveMessage,
4351
- title: saveMessage === null || saveMessage === void 0 ? void 0 : saveMessage.title,
4352
- description: saveMessage === null || saveMessage === void 0 ? void 0 : saveMessage.description
4525
+ }), ticket && ticketAssigned && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4526
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeContainer,
4527
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4528
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.alignCenter,
4529
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4530
+ variant: "h4",
4531
+ gutterBottom: true,
4532
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeInfoTitle,
4533
+ children: t("ticket_assign.assign_to_someone_else")
4534
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4535
+ variant: "body1",
4536
+ gutterBottom: true,
4537
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeInfoNote,
4538
+ children: t("ticket_assign.enter_email_note")
4539
+ })]
4540
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_components_AssignForm__WEBPACK_IMPORTED_MODULE_8__["default"], {
4541
+ onSubmit: onAssignToOther,
4542
+ onClose: onClose,
4543
+ saveLabel: t("ticket_assign.save_label")
4544
+ })]
4545
+ }), ticket && ticketAssigned && /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4546
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeContainer,
4547
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Box, {
4548
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.alignCenter,
4549
+ children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4550
+ variant: "h4",
4551
+ gutterBottom: true,
4552
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeInfoTitle,
4553
+ children: [t("ticket_assign.assigned_to"), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)("br", {}), ticket === null || ticket === void 0 || (_ticket$owner = ticket.owner) === null || _ticket$owner === void 0 ? void 0 : _ticket$owner.email]
4554
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_4__.Typography, {
4555
+ variant: "body1",
4556
+ gutterBottom: true,
4557
+ className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_13__.attendeeInfoNote,
4558
+ children: t("ticket_assign.complete_info")
4559
+ })]
4560
+ }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_14__.jsx)(_AssignEQForm__WEBPACK_IMPORTED_MODULE_7__["default"], {
4561
+ ticket: ticket,
4562
+ summit: summit,
4563
+ extraQuestions: extraQuestions,
4564
+ onSubmit: onSaveEQ,
4565
+ onClose: onCloseEQForm
4566
+ })]
4353
4567
  })]
4354
4568
  });
4355
4569
  };
@@ -5038,6 +5252,7 @@ const TicketDetail = _ref => {
5038
5252
  extraQuestions
5039
5253
  } = (0,_hooks_useGetTicket__WEBPACK_IMPORTED_MODULE_9__["default"])(ticketId, orderId, ownerId, open);
5040
5254
  const [saveMessage, setSaveMessage] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
5255
+ const [sentConfirmation, setSentConfirmation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
5041
5256
  const isUserOrderOwner = (ticket === null || ticket === void 0 || (_ticket$order = ticket.order) === null || _ticket$order === void 0 ? void 0 : _ticket$order.owner_id) === (userProfile === null || userProfile === void 0 ? void 0 : userProfile.id);
5042
5257
  const isUserTicketOwner = (ticket === null || ticket === void 0 || (_ticket$owner = ticket.owner) === null || _ticket$owner === void 0 ? void 0 : _ticket$owner.email) === (userProfile === null || userProfile === void 0 ? void 0 : userProfile.email);
5043
5258
  const canEditTicketData = (isUserTicketOwner || isUserOrderOwner) && summit.allow_update_attendee_extra_questions;
@@ -5064,6 +5279,17 @@ const TicketDetail = _ref => {
5064
5279
  setSaveMessage(null);
5065
5280
  setTimeout(onClose, _utils_constants__WEBPACK_IMPORTED_MODULE_12__.MILLISEC_TO_SEC);
5066
5281
  };
5282
+ const downloadTicketPdf = () => {
5283
+ dispatch((0,_actions__WEBPACK_IMPORTED_MODULE_14__.getTicketPDF)(ticket));
5284
+ };
5285
+ const onSendEmail = () => {
5286
+ dispatch((0,_actions__WEBPACK_IMPORTED_MODULE_14__.resendNotification)(ticket)).then(() => {
5287
+ setSentConfirmation(true);
5288
+ setTimeout(() => {
5289
+ setSentConfirmation(false);
5290
+ }, _utils_constants__WEBPACK_IMPORTED_MODULE_12__.MILLISEC_TO_SEC * _utils_constants__WEBPACK_IMPORTED_MODULE_12__.TWO_ITEM);
5291
+ });
5292
+ };
5067
5293
  return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.Fragment, {
5068
5294
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_mui_material__WEBPACK_IMPORTED_MODULE_5__.Drawer, {
5069
5295
  id: "detailsDrawer",
@@ -5123,14 +5349,17 @@ const TicketDetail = _ref => {
5123
5349
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_15__.downloadBtn,
5124
5350
  variant: "contained",
5125
5351
  color: "primary",
5352
+ onClick: downloadTicketPdf,
5126
5353
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_mui_icons_material__WEBPACK_IMPORTED_MODULE_6__.FileDownloadOutlined, {
5127
5354
  fontSize: "large"
5128
5355
  }), t("ticket_detail.download")]
5129
5356
  }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsxs)(_mui_material__WEBPACK_IMPORTED_MODULE_5__.Button, {
5130
- className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_15__.sendBtn,
5357
+ className: "".concat(_styles_module_scss__WEBPACK_IMPORTED_MODULE_15__.sendBtn, " ").concat(sentConfirmation ? _styles_module_scss__WEBPACK_IMPORTED_MODULE_15__.sent : ""),
5358
+ onClick: onSendEmail,
5359
+ disabled: sentConfirmation,
5131
5360
  children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)(_mui_icons_material__WEBPACK_IMPORTED_MODULE_6__.EmailOutlined, {
5132
5361
  fontSize: "large"
5133
- }), t("ticket_detail.send")]
5362
+ }), sentConfirmation ? t("ticket_detail.sent") : t("ticket_detail.send")]
5134
5363
  })]
5135
5364
  }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_16__.jsx)("div", {
5136
5365
  className: _styles_module_scss__WEBPACK_IMPORTED_MODULE_15__.orderNumber,
@@ -5830,7 +6059,8 @@ const DEFAULT_STATE = {
5830
6059
  ticket_current_page: 1,
5831
6060
  ticket_last_page: 1,
5832
6061
  ticket_per_page: 5,
5833
- ticket_total: 0
6062
+ ticket_total: 0,
6063
+ apiError: null
5834
6064
  };
5835
6065
  const WidgetReducer = function () {
5836
6066
  let state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_STATE;
@@ -5851,6 +6081,10 @@ const WidgetReducer = function () {
5851
6081
  return _objectSpread(_objectSpread({}, state), {}, {
5852
6082
  loading: false
5853
6083
  });
6084
+ case _actions__WEBPACK_IMPORTED_MODULE_3__.RESET_API_ERROR:
6085
+ return _objectSpread(_objectSpread({}, state), {}, {
6086
+ apiError: null
6087
+ });
5854
6088
  case _actions__WEBPACK_IMPORTED_MODULE_3__.RESET_FILTER:
5855
6089
  return _objectSpread(_objectSpread({}, state), {}, {
5856
6090
  orders_current_page: 1,
@@ -5858,6 +6092,19 @@ const WidgetReducer = function () {
5858
6092
  });
5859
6093
  case _actions__WEBPACK_IMPORTED_MODULE_3__.SET_STATE:
5860
6094
  return _objectSpread(_objectSpread({}, state), payload);
6095
+ case _actions__WEBPACK_IMPORTED_MODULE_3__.SET_API_ERROR:
6096
+ {
6097
+ const {
6098
+ title,
6099
+ html: body
6100
+ } = payload;
6101
+ return _objectSpread(_objectSpread({}, state), {}, {
6102
+ apiError: {
6103
+ title,
6104
+ body
6105
+ }
6106
+ });
6107
+ }
5861
6108
  case _actions__WEBPACK_IMPORTED_MODULE_3__.SET_USER:
5862
6109
  return _objectSpread(_objectSpread({}, state), {}, {
5863
6110
  user: payload
@@ -6096,6 +6343,7 @@ const getAccessTokenSafely = async () => {
6096
6343
  __webpack_require__.r(__webpack_exports__);
6097
6344
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6098
6345
  /* harmony export */ DEFAULT_ITEMS_PER_PAGE: () => (/* binding */ DEFAULT_ITEMS_PER_PAGE),
6346
+ /* harmony export */ ERROR_CODES: () => (/* binding */ ERROR_CODES),
6099
6347
  /* harmony export */ FIFTY_PER_PAGE: () => (/* binding */ FIFTY_PER_PAGE),
6100
6348
  /* harmony export */ FIRST_PAGE: () => (/* binding */ FIRST_PAGE),
6101
6349
  /* harmony export */ FIVE_ITEM: () => (/* binding */ FIVE_ITEM),
@@ -6115,6 +6363,9 @@ __webpack_require__.r(__webpack_exports__);
6115
6363
  /* harmony export */ STATUS_INCOMPLETE: () => (/* binding */ STATUS_INCOMPLETE),
6116
6364
  /* harmony export */ STATUS_PENDING: () => (/* binding */ STATUS_PENDING),
6117
6365
  /* harmony export */ STATUS_PROCESSING: () => (/* binding */ STATUS_PROCESSING),
6366
+ /* harmony export */ STATUS_REFUND_APPROVED: () => (/* binding */ STATUS_REFUND_APPROVED),
6367
+ /* harmony export */ STATUS_REFUND_PENDING: () => (/* binding */ STATUS_REFUND_PENDING),
6368
+ /* harmony export */ STATUS_REFUND_REJECTED: () => (/* binding */ STATUS_REFUND_REJECTED),
6118
6369
  /* harmony export */ STATUS_UNASSIGNED: () => (/* binding */ STATUS_UNASSIGNED),
6119
6370
  /* harmony export */ STEP_ONE: () => (/* binding */ STEP_ONE),
6120
6371
  /* harmony export */ STEP_TWO: () => (/* binding */ STEP_TWO),
@@ -6137,6 +6388,9 @@ const STATUS_CANCELLED = "STATUS_CANCELLED";
6137
6388
  const STATUS_ERROR = "STATUS_ERROR";
6138
6389
  const STATUS_PROCESSING = "STATUS_PROCESSING";
6139
6390
  const STATUS_UNASSIGNED = "STATUS_UNASSIGNED";
6391
+ const STATUS_REFUND_PENDING = "STATUS_REFUND_PENDING";
6392
+ const STATUS_REFUND_APPROVED = "STATUS_REFUND_APPROVED";
6393
+ const STATUS_REFUND_REJECTED = "STATUS_REFUND_REJECTED";
6140
6394
  const JEST_TIMEOUT_IN_MILLISEC = 10000;
6141
6395
  const ONE_ITEM = 1;
6142
6396
  const TWO_ITEM = 2;
@@ -6144,6 +6398,12 @@ const FIVE_ITEM = 5;
6144
6398
  const SIX_ITEM = 6;
6145
6399
  const PROMISE_BATCH_LIMIT = 10;
6146
6400
  const FIFTY_PER_PAGE = 50;
6401
+ const ERROR_CODES = {
6402
+ 401: 401,
6403
+ 403: 401,
6404
+ 412: 401,
6405
+ 500: 500
6406
+ };
6147
6407
 
6148
6408
  /***/ }),
6149
6409
 
@@ -6385,6 +6645,9 @@ const useSummitDetails = _ref => {
6385
6645
  __webpack_require__.r(__webpack_exports__);
6386
6646
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6387
6647
  /* harmony export */ buildValidationSchema: () => (/* binding */ buildValidationSchema),
6648
+ /* harmony export */ getRefundRequestedStatusColor: () => (/* binding */ getRefundRequestedStatusColor),
6649
+ /* harmony export */ getRefundedRequestedStatus: () => (/* binding */ getRefundedRequestedStatus),
6650
+ /* harmony export */ getRefundedRequestedTickets: () => (/* binding */ getRefundedRequestedTickets),
6388
6651
  /* harmony export */ getTicketRole: () => (/* binding */ getTicketRole),
6389
6652
  /* harmony export */ getTicketStatusData: () => (/* binding */ getTicketStatusData),
6390
6653
  /* harmony export */ getTicketStatusKey: () => (/* binding */ getTicketStatusKey),
@@ -6450,6 +6713,35 @@ const isTicketRefundable = ticket => {
6450
6713
  return (ticket === null || ticket === void 0 ? void 0 : ticket.final_amount) > 0 && (ticket === null || ticket === void 0 ? void 0 : ticket.final_amount) > (ticket === null || ticket === void 0 ? void 0 : ticket.refunded_amount) && !(ticket !== null && ticket !== void 0 && (_ticket$refund_reques = ticket.refund_requests) !== null && _ticket$refund_reques !== void 0 && _ticket$refund_reques.some(rr => rr.status === "Requested"));
6451
6714
  };
6452
6715
  const ticketsRefundable = tickets => (tickets === null || tickets === void 0 ? void 0 : tickets.filter(ticket => isTicketRefundable(ticket)).length) || 0;
6716
+ const getRefundedRequestedTickets = tickets => tickets === null || tickets === void 0 ? void 0 : tickets.filter(ticket => {
6717
+ var _ticket$refund_reques2;
6718
+ return (_ticket$refund_reques2 = ticket.refund_requests) === null || _ticket$refund_reques2 === void 0 ? void 0 : _ticket$refund_reques2.some(rr => rr.status === "Requested");
6719
+ });
6720
+ const getRefundedRequestedStatus = ticket => {
6721
+ var _ticket$refund_reques3, _ticket$refund_reques4, _ticket$refund_reques5;
6722
+ if ((_ticket$refund_reques3 = ticket.refund_requests) !== null && _ticket$refund_reques3 !== void 0 && _ticket$refund_reques3.some(rr => rr.status === "Requested")) return _constants__WEBPACK_IMPORTED_MODULE_2__.STATUS_REFUND_PENDING;
6723
+ if ((_ticket$refund_reques4 = ticket.refund_requests) !== null && _ticket$refund_reques4 !== void 0 && _ticket$refund_reques4.some(rr => rr.status === "Approved")) return _constants__WEBPACK_IMPORTED_MODULE_2__.STATUS_REFUND_APPROVED;
6724
+ if ((_ticket$refund_reques5 = ticket.refund_requests) !== null && _ticket$refund_reques5 !== void 0 && _ticket$refund_reques5.some(rr => rr.status === "Rejected")) return _constants__WEBPACK_IMPORTED_MODULE_2__.STATUS_REFUND_REJECTED;
6725
+ return _constants__WEBPACK_IMPORTED_MODULE_2__.STATUS_REFUND_PENDING;
6726
+ };
6727
+ const getRefundRequestedStatusColor = ticket => {
6728
+ const status = getRefundedRequestedStatus(ticket);
6729
+ let statusColor = "";
6730
+ switch (status) {
6731
+ case _constants__WEBPACK_IMPORTED_MODULE_2__.STATUS_REFUND_PENDING:
6732
+ statusColor = "pending";
6733
+ break;
6734
+ case _constants__WEBPACK_IMPORTED_MODULE_2__.STATUS_REFUND_APPROVED:
6735
+ statusColor = "approved";
6736
+ break;
6737
+ case _constants__WEBPACK_IMPORTED_MODULE_2__.STATUS_REFUND_REJECTED:
6738
+ statusColor = "rejected";
6739
+ break;
6740
+ default:
6741
+ statusColor = "pending";
6742
+ }
6743
+ return statusColor;
6744
+ };
6453
6745
  const getTypeValidation = (type, name, isRequired) => {
6454
6746
  let schema;
6455
6747
  switch (type) {
@@ -6659,25 +6951,6 @@ var _1 = "errorLabel___nocyX";
6659
6951
 
6660
6952
 
6661
6953
 
6662
- /***/ }),
6663
-
6664
- /***/ "./src/components/MultiStepSlider/styles.module.scss":
6665
- /*!***********************************************************!*\
6666
- !*** ./src/components/MultiStepSlider/styles.module.scss ***!
6667
- \***********************************************************/
6668
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
6669
-
6670
- __webpack_require__.r(__webpack_exports__);
6671
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6672
- /* harmony export */ multistepCloseIcon: () => (/* binding */ _1),
6673
- /* harmony export */ multistepContainer: () => (/* binding */ _2)
6674
- /* harmony export */ });
6675
- // extracted by mini-css-extract-plugin
6676
- var _1 = "multistepCloseIcon___qc6ND";
6677
- var _2 = "multistepContainer___dPaS5";
6678
-
6679
-
6680
-
6681
6954
  /***/ }),
6682
6955
 
6683
6956
  /***/ "./src/components/OrderSummary/styles.module.scss":
@@ -6769,31 +7042,35 @@ var _12 = "viewMoreButton___K_1zT";
6769
7042
  __webpack_require__.r(__webpack_exports__);
6770
7043
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
6771
7044
  /* harmony export */ actionButtons: () => (/* binding */ _1),
6772
- /* harmony export */ cancelButton: () => (/* binding */ _2),
6773
- /* harmony export */ continueButton: () => (/* binding */ _3),
6774
- /* harmony export */ deleteIcon: () => (/* binding */ _4),
6775
- /* harmony export */ refundErrorMsg: () => (/* binding */ _5),
6776
- /* harmony export */ refundHeaders: () => (/* binding */ _6),
6777
- /* harmony export */ refundSuccessful: () => (/* binding */ _7),
6778
- /* harmony export */ refundText: () => (/* binding */ _8),
6779
- /* harmony export */ refundTicketBoxContainer: () => (/* binding */ _9),
6780
- /* harmony export */ successMsg: () => (/* binding */ _a),
6781
- /* harmony export */ successMsg2: () => (/* binding */ _b),
6782
- /* harmony export */ ticketNo: () => (/* binding */ _c)
7045
+ /* harmony export */ approved: () => (/* binding */ _2),
7046
+ /* harmony export */ buttonPill: () => (/* binding */ _3),
7047
+ /* harmony export */ cancelButton: () => (/* binding */ _4),
7048
+ /* harmony export */ continueButton: () => (/* binding */ _5),
7049
+ /* harmony export */ deleteIcon: () => (/* binding */ _6),
7050
+ /* harmony export */ pending: () => (/* binding */ _7),
7051
+ /* harmony export */ refundErrorMsg: () => (/* binding */ _8),
7052
+ /* harmony export */ refundSuccessful: () => (/* binding */ _9),
7053
+ /* harmony export */ refundTicketBoxContainer: () => (/* binding */ _a),
7054
+ /* harmony export */ rejected: () => (/* binding */ _b),
7055
+ /* harmony export */ successMsg: () => (/* binding */ _c),
7056
+ /* harmony export */ successMsg2: () => (/* binding */ _d),
7057
+ /* harmony export */ ticketNo: () => (/* binding */ _e)
6783
7058
  /* harmony export */ });
6784
7059
  // extracted by mini-css-extract-plugin
6785
7060
  var _1 = "actionButtons___u7mPS";
6786
- var _2 = "cancelButton___yfhYb";
6787
- var _3 = "continueButton___NyX3s";
6788
- var _4 = "deleteIcon___FSwye";
6789
- var _5 = "refundErrorMsg___Aahzr";
6790
- var _6 = "refundHeaders___HVImk";
6791
- var _7 = "refundSuccessful___zrDQY";
6792
- var _8 = "refundText___aEnL9";
6793
- var _9 = "refundTicketBoxContainer___ya613";
6794
- var _a = "successMsg___HtMse";
6795
- var _b = "successMsg2___Q6zna";
6796
- var _c = "ticketNo____EAD4";
7061
+ var _2 = "approved___sxEJW";
7062
+ var _3 = "buttonPill___Lesaz";
7063
+ var _4 = "cancelButton___yfhYb";
7064
+ var _5 = "continueButton___NyX3s";
7065
+ var _6 = "deleteIcon___FSwye";
7066
+ var _7 = "pending___aEbWw";
7067
+ var _8 = "refundErrorMsg___Aahzr";
7068
+ var _9 = "refundSuccessful___zrDQY";
7069
+ var _a = "refundTicketBoxContainer___ya613";
7070
+ var _b = "rejected___NJE4Z";
7071
+ var _c = "successMsg___HtMse";
7072
+ var _d = "successMsg2___Q6zna";
7073
+ var _e = "ticketNo____EAD4";
6797
7074
 
6798
7075
 
6799
7076
 
@@ -6912,10 +7189,11 @@ __webpack_require__.r(__webpack_exports__);
6912
7189
  /* harmony export */ qrCode: () => (/* binding */ _b),
6913
7190
  /* harmony export */ qrNote: () => (/* binding */ _c),
6914
7191
  /* harmony export */ sendBtn: () => (/* binding */ _d),
6915
- /* harmony export */ status: () => (/* binding */ _e),
6916
- /* harmony export */ subtitle: () => (/* binding */ _f),
6917
- /* harmony export */ ticketDetailContainer: () => (/* binding */ _10),
6918
- /* harmony export */ title: () => (/* binding */ _11)
7192
+ /* harmony export */ sent: () => (/* binding */ _e),
7193
+ /* harmony export */ status: () => (/* binding */ _f),
7194
+ /* harmony export */ subtitle: () => (/* binding */ _10),
7195
+ /* harmony export */ ticketDetailContainer: () => (/* binding */ _11),
7196
+ /* harmony export */ title: () => (/* binding */ _12)
6919
7197
  /* harmony export */ });
6920
7198
  // extracted by mini-css-extract-plugin
6921
7199
  var _1 = "actionButtonsContainer___Auvrn";
@@ -6931,10 +7209,11 @@ var _a = "orderNumber___L5Q5a";
6931
7209
  var _b = "qrCode___fwqZq";
6932
7210
  var _c = "qrNote___Gc7Kn";
6933
7211
  var _d = "sendBtn___koWM2";
6934
- var _e = "status___kwC8y";
6935
- var _f = "subtitle___y_NuO";
6936
- var _10 = "ticketDetailContainer___b2TLR";
6937
- var _11 = "title___wQzUN";
7212
+ var _e = "sent___k6WKx";
7213
+ var _f = "status___kwC8y";
7214
+ var _10 = "subtitle___y_NuO";
7215
+ var _11 = "ticketDetailContainer___b2TLR";
7216
+ var _12 = "title___wQzUN";
6938
7217
 
6939
7218
 
6940
7219
 
@@ -7155,16 +7434,6 @@ module.exports = require("@mui/material/Divider");
7155
7434
 
7156
7435
  /***/ }),
7157
7436
 
7158
- /***/ "@mui/material/Drawer":
7159
- /*!***************************************!*\
7160
- !*** external "@mui/material/Drawer" ***!
7161
- \***************************************/
7162
- /***/ ((module) => {
7163
-
7164
- module.exports = require("@mui/material/Drawer");
7165
-
7166
- /***/ }),
7167
-
7168
7437
  /***/ "@mui/material/InputBase":
7169
7438
  /*!******************************************!*\
7170
7439
  !*** external "@mui/material/InputBase" ***!
@@ -7375,6 +7644,16 @@ module.exports = require("openstack-uicore-foundation/lib/utils/actions");
7375
7644
 
7376
7645
  /***/ }),
7377
7646
 
7647
+ /***/ "openstack-uicore-foundation/lib/utils/methods":
7648
+ /*!****************************************************************!*\
7649
+ !*** external "openstack-uicore-foundation/lib/utils/methods" ***!
7650
+ \****************************************************************/
7651
+ /***/ ((module) => {
7652
+
7653
+ module.exports = require("openstack-uicore-foundation/lib/utils/methods");
7654
+
7655
+ /***/ }),
7656
+
7378
7657
  /***/ "openstack-uicore-foundation/lib/utils/query-actions":
7379
7658
  /*!**********************************************************************!*\
7380
7659
  !*** external "openstack-uicore-foundation/lib/utils/query-actions" ***!
@@ -7521,7 +7800,7 @@ module.exports = require("yup");
7521
7800
  \**********************************/
7522
7801
  /***/ ((module) => {
7523
7802
 
7524
- module.exports = /*#__PURE__*/JSON.parse('{"landing":{"sign_out":"Sign out","sign_in":"FNid Sign In","not_logged_in":"You are not logged in. Please log in to continue:"},"errors":{"user_not_authz":"Hold on. Your user is not authorized!.","user_not_set":"Hold on. Can not get any valid user.","session_expired":"Hold on. Your session expired!","server_error":"There was a problem with our server, please contact admin.","not_allowed":"You are not allowed here, please login with another user to access this page.","refund_unsuccessful":"Some of the refund requests were unsucessful. Please try again."},"general":{"continue":"Continue","save_and_continue":"Save and Continue","back":"Back","pay_now":"Pay Now","confirm":"Confirm","yes":"Yes","no":"No","cancel":"Cancel","finish":"Finish","copy_to_clipboard":"Copy to clipboard","copied":"Copied!"},"labels":{"tickets":"Tickets","summary":"Summary"},"order_summary":{"order_summary":"Order Summary","order_no":"Order number","discounts":"Discount","refunds":"Refund","request_refund":"Request a Refund","refund_details":"Your Refund Details","taxes":"Taxes","total":"Total Due","amount_paid":"Amount Paid","copy_order_number":"Copy Order Number"},"event_info":{"about_title":"About the event","about_desc":"a description","directions":"Get Directions","calendar":"Add to Calendar"},"step_one":{"choose_tickets":"Choose your ticket(s)","choose_tickets_desc":"a description","expiration":"Ticket(s) available until ","free":"Free","sold_out":"Sold Out","no_tickets":"No tickets for sale!","getfnid":"Create an FNid","signin":"Sign In"},"step_two":{"basic_info":"Purchaser Information","required":"Required fields","have_account":"Do you have an FNid account?","sign_in":"Sign in","sign_in_account":"to autopopulate this info and manage this order.","first_name":"First Name","last_name":"Last Name","email":"Email","company":"Company","tickets":"Tickets","ticket":"Ticket","asterisks_bold":"NOTE: Ticket(s) can be assigned later.","asterisks":"Ticket holders will immediately receive an email to finalize their attendee information.","code":"Promo Code:","assign":"Assign to:","add_ticket":"Add additional ticket(s) to this order","no_tickets":"No tickets selected.","disclaimer_in_person_title":"Attention","placeholders":{"coupon":"Coupon (Optional)","email":"Attendee Email (Optional)"},"validator":{"first_name":"Please enter your First Name.","last_name":"Please enter your Last Name.","company":"Please enter your Company.","email":"Please enter a valid Email."}},"step_three":{"payment_info":"Payment Information","required":"Required fields","payment_subtitle":"a subtitle...","cardholder_name":"Cardholder Name","card_number":"Card Number","expiration":"Expiration & Code","billing_info":"Billing Information","billing_subtitle":"a subtitle...","billing_country":"Country","billing_address":"Address","billing_address_two":"Address 2","billing_city":"City","billing_state":"State","billing_zipcode":"ZIP Code","stripe_errors":{"cardNumber":"Please enter a valid Credit Card.","cardExpiry":"Please enter the card expiration.","cardCvc":"Please enter the card cvc."},"validator":{"billing_country":"Please enter the billing Country.","billing_address":"Please enter the billing Address.","billing_city":"Please enter the billing City.","billing_state":"Please enter the billing State.","billing_zipcode":"Please enter the billing ZipCode."}},"step_four":{"thank_you":"Thank you for your order!","subtitle":"Your Order is Now Complete","member_exclamation":"You are signed in with your FNid and will use it to log in to the event on show days. ","member_text":"You may proceed directly to the \\"","member_link_tickets":"My Tickets","member_text_1":"\\" page to review your ticket(s) and complete any required details. Visit the \\"","member_link_orders":"My Orders","member_text_2":"\\" page to manage your purchase, assign ticket(s), and edit attendee details.","required_text":"PLEASE NOTE! Ticket(s) must be assigned and all additional details must be completed before official ticket(s) are issued.","register_text":"An FNid is required to manage order(s) and assign ticket(s) ","register_link_text":"create one","register_text_2":" with the email ","register_text_3":" used for this purchase, you will then be able to manage your order.","register_email_bold":"You will now receive an email with a one-click link to create a password for your FNid.","register_email_1":"Your FNid will allow you to access the event. Visit the \\"","register_email_orders":"My Orders","register_email_2":"\\" page to manage your purchase, assign ticket(s), and edit attendee details.","help_text":"For further assistance, please email ","order_no":"ORDER NUMBER","manage":"My Orders","getfnid":"Create an FNid","signin":"Sign In"},"guests":{"invalid_thanks":"Thanks for coming to fill in the remaining details so we can issue your ticket.","invalid_text_1":"Unfortunately the link in your email has expired. Not to worry we will send you a fresh link. Click here or the button below to get a new link.","invalid_button":"Send New Link","invalid_contact":"If you have any problems please email","hash_regenerated":"Please check your new link in your email","completed_text_1":"Thank you for completing your additional details. Your ticket has now been issued. Please use your FNid to access the event.","completed_button":"Download Ticket to","completed_text_2":"You will also receive an email confirmation.","cancel":"Cancel","save":"Save"},"orders-tickets":{"loading":"Loading your orders and tickets...","empty-title":"It appears you have not placed any orders and no tickets have been assigned to you.","empty-text":"If you believe this is incorrect please email <a href=\\"mailto:{{support_email}}\\">{{support_email}}</a>. Thank you!","view_more":"View more","view_less":"View less"},"orders":{"title":"My Orders with Tickets","purchased":"Purchased on","empty":"There are no active orders so far","loading":"Loading orders...","no_orders":"No results found."},"no-summit":{"not-found":"","select-list":"Please select from available shows:"},"order_info":{"print":"Print","resend":"Resend Receipt","download":"Download Ticket PDF","cancel_order":"Request to Refund All Tickets","cancel_ticket":"Cancel Ticket","email_support":"Email Support","directions":"Get Directions","calendar":"Add to Calendar"},"order_status":{"complete":"Ticket(s) assigned and issued","incomplete":"Additional attendee details required before ticket(s) can be issued","pending":"Pending confirmation","cancelled":"Cancelled","error":"Payment error","processing":"Payment processing","past":"Past"},"tickets":{"title":"External Tickets Assigned to Me","empty":"There are no tickets so far","loading":"Loading tickets...","save_message":"Thank you! Your information has been saved and ticket updated.","assign_success_message":"The ticket was successfully assigned.","reassign_success_message":"The ticket was successfully reassigned.","unassign_success_message":"The ticket was successfully unassigned.","notify_success_message":"Notification was sent to ticket holder.","refund_request_success_1":"Your refund request has been requested successfully","refund_request_success_2":"Please allow 24 - 48 hours for a response"},"ticket_status":{"unassigned":"Unassigned","incomplete":"Required details needed","complete":"Ready to use","cancelled":"Cancelled","past":"Past","ticket_no":"Ticket #","assigned_to":"Assigned to","attendee_status_unassigned":"Attendee unassigned","view_tickets":"View Tickets","hide_tickets":"Hide Tickets","view_ticket":"View Ticket","reassign_ticket":"Reassign","assign_ticket":"Assign Ticket","status_unassigned":"Unassigned","status_complete":"Completed","status_incomplete":"Incomplete","status_refund_requested":"Refund Requested","status_details_required":"Some tickets in this order require additional details before the ticket(s) can be issued.","status_cancelled":"Cancelled","finish_ticket":"Finish Ticket","select_ticket_refund":"Select the ticket(s) for a refund:","select_all":"Select All","select_cancel":"Cancel","copy_ticket_number":"Copy Ticket Number"},"nav_bar":{"my-orders":"My Orders","my-tickets":"My Tickets"},"ticket_popup":{"tab_assign":"Assign","tab_reassign":"Reassign","tab_refund":"Refund","tab_edit":"Edit Details","tab_edit_read_only":"Details","tab_notify":"Notify Ticket Holder","assign_text":"Select the option to assign this ticket","assign_or":"Or","assign_me":"Assign to Me","assign_this":"Assign this Ticket","assign_want_text":"I want to assign this ticket to someone else!","assign_someone":"Assign to this person","assign_ticket":"Assign this Ticket","assign_expire":"Ability to assign ticket expires in ","assign_days":"days","reassign_printed_ticket":"Ticket may not be reassigned because this badge has already been printed.","reassign_text":"Select the option to reassign this ticket from","reassign_want_text":"I want to reassign this ticket to someone else!","reassign_before":"before","reassign_enter_email":"Enter the email of the person you would like to assign the ticket to below. Please note! An email will be sent to the below address with instructions on how to complete any additional information required to issue their ticket.","reassign_check":"Clean all fields","reassign_me":"Reassign to Me","reassign_someone":"Reassign to this person","edit_basic_info":"Attendee Information","edit_required":"Required","edit_email":"Ticket assigned to email:","assign_note":"Note: Should the ticket holder wish to change their name or company info, they can do so by logging into the event site and clicking on the profile icon (located on the far right of the top navigation bar).","edit_first_name":"First Name","edit_first_name_placeholder":"Attendee First Name","edit_last_name":"Last Name","edit_last_name_placeholder":"Attendee Last Name","edit_company":"Company","edit_company_placeholder":"Attendee Company","edit_required_star":"*","edit_preferences":"Additional Details","notify_text_1":"All required details must be completed before","notify_text_2":"Clicking the \\"Resend Notification\\" button will generate an email to","notify_text_3":"with instructions on how to provide their required attendee information. Once the details are complete, their official ticket will be issued and sent to","notify_message":"Personal Message","notify_message_condition":"(Optional)","notify_button":"Resend Notification","cancel_ticket":"Request a refund for this ticket","save_changes":"Save Changes","saving_changes":"Saving Changes","do_it_later":"Do this later","do_it_later_exp":"You may fill in the required information now or complete this step on the \'My Orders\' page later."},"confirm_popup":{"question_title_cancel":"Refund Ticket","question_text_cancel":"Are you sure you want to request a refund of this ticket?","question_title_cancel_order":"Refund Order","question_text_cancel_order":"Are you sure you want to request a refund of this entire order ?","question_title_assign":"Assign Request","question_text_assign":"Are you sure you want to clean all the fields?","question_title_unassign":"Unassign Request","question_text_unassign":"Are you sure you want to unassign this ticket?","question_title_reassign":"Reassign Request","question_text_reassign":"Are you sure you want to reassign this ticket?","question_title_save":"Save","question_text_save":"","question_title_notification":"Notification Request","question_text_notification":"","question_text_confirm":"Are you sure?","cancel":"Cancel","accept":"Yes","success_title":"Request Submitted","success_text":"An email notification has been sent to","success_button":"Got it"},"invitees":{"validation_error":"Invitation error","entity_not_found":"Invitation not found"},"signin":{"add_code_title_p1":"Add the","add_code_title_p2":"digit code below","email_reception_error_p1":"Didn\'t receive it? Check your spam folder or","email_reception_error_p2":"resend email","email_sent":"We\'ve sent a code to the email","go_back_title_p1":"or go back and","go_back_title_p2":"try another way","invalid_email_addr":"Please enter a valid email adress","login_with_title":"Log in with one of the following","retry":"Please try again.","send_code_option":"or get a login code emailed to you","verify_btn":"Verify","wrong_code":"The code you entered is incorrect.","fn_login_btn":"Continue with FNid","fb_login_btn":"Continue with Facebook","ln_login_btn":"Sign in with LinkedIn","ap_login_btn":"Continue with Apple","ok_login_btn":"Continue with Okta"},"logout_popup":{"title":"Re-login required","message":"You are not logged in anymore. Please log in to continue.","close_btn":"Re-login"},"filter":{"filter":"Filter","purchased_on":"Purchased on"},"sort":{"sort":"Sort","new_first":"Newest first","old_first":"Oldest first"},"order_search":{"order_number":"Search order number"},"ticket_detail":{"purchased_by":"Purchased by","status":"ready to use","qr_note":"When you check in you will be able to scan the QR code directly from your device. Or you can:","download":"Download","send":"Send to email","attendee_information":"Attendee Information","email":"Email","first_name":"First Name","last_name":"Last Name","attendee_first_name":"First Name","attendee_last_name":"Last Name","attendee_company":"Company","delegated_to":"Delegated to:","aditional_details":"Additional details","save":"save changes","cancel":"cancel","info_note":"Note: Should the ticket holder wish to change name or company info, they can do so by logging into the event site and clicking on the profile icon (located on the far right of the top navigation bar).","saving_error":"Error saving ticket","saving_success":"Ticket Saved!","saving_success_description":"ticket saved successfully"},"ticket_reassign":{"reassign_ticket":"REASSIGN ticket","assigned_to":"This ticket is assigned to ","reassigned_to":"You have reassigned the ticket to","enter_email_note":"Enter the email of the person you would like to REASSIGN the ticket to below. \\n We will notice the old address that the ticket is no longer available.","complete_info":"To finish, complete the following information.","new_attendee_email":"New attendee email","personal_message":"Personal Message (optional)","cancel":"cancel","save":"reassign","saving_error":"Error saving ticket","saving_success":"Ticket Saved!","saving_success_description":"ticket saved successfully"},"ticket_assign_eq":{"cancel":"complete later","save":"save"},"ticket_assign":{"assign_ticket":"Assign ticket","purchased_by":"Purchased by ","assign_to_me":"Assign to me","assign_to_someone_else":"I want to assign this ticket to someone else:","enter_email_note":"Enter the email of the person you would like to assign the ticket to below. Please note! An email will be sent to the below address with instructions on how to complete any additional information required to issue their ticket.","save_label":"Assign to this person","complete_info":"To finish, complete the following information.","assigned_to":"You have assigned the ticket to","new_attendee_email":"New attendee email","personal_message":"Personal Message (optional)","cancel":"cancel","save":"reassign","saving_error":"Error saving ticket","saving_success":"Ticket Saved!","saving_success_description":"ticket saved successfully"},"validation":{"required_question":"This question is required","required_field":"Required field","first_name":{"string":"Enter first name","required":"First name is required"},"last_name":{"string":"Enter last name","required":"Last name is required"},"email":{"string":"Enter email","format":"Must be a valid email address","required":"Email is required"},"text":{"string":"Enter text"},"checkbox":{"required":"Field must be checked"},"company":{"required":"Company is required"}}}');
7803
+ module.exports = /*#__PURE__*/JSON.parse('{"landing":{"sign_out":"Sign out","sign_in":"FNid Sign In","not_logged_in":"You are not logged in. Please log in to continue:"},"errors":{"error":"Error","user_not_authz":"Hold on. Your user is not authorized!.","user_not_set":"Hold on. Can not get any valid user.","session_expired":"Hold on. Your session expired!","server_error":"There was a problem with our server, please contact admin.","not_allowed":"You are not allowed here, please login with another user to access this page.","refund_unsuccessful":"Some of the refund requests were unsucessful. Please try again."},"general":{"continue":"Continue","save_and_continue":"Save and Continue","back":"Back","pay_now":"Pay Now","confirm":"Confirm","yes":"Yes","no":"No","cancel":"Cancel","finish":"Finish","copy_to_clipboard":"Copy to clipboard","copied":"Copied!"},"labels":{"tickets":"Tickets","summary":"Summary"},"order_summary":{"order_summary":"Order Summary","order_no":"Order number","discounts":"Discount","refunds":"Refund","request_refund":"Request a Refund","refund_details":"Your Refund Details","taxes":"Taxes","total":"Total Due","amount_paid":"Amount Paid","copy_order_number":"Copy Order Number"},"event_info":{"about_title":"About the event","about_desc":"a description","directions":"Get Directions","calendar":"Add to Calendar"},"step_one":{"choose_tickets":"Choose your ticket(s)","choose_tickets_desc":"a description","expiration":"Ticket(s) available until ","free":"Free","sold_out":"Sold Out","no_tickets":"No tickets for sale!","getfnid":"Create an FNid","signin":"Sign In"},"step_two":{"basic_info":"Purchaser Information","required":"Required fields","have_account":"Do you have an FNid account?","sign_in":"Sign in","sign_in_account":"to autopopulate this info and manage this order.","first_name":"First Name","last_name":"Last Name","email":"Email","company":"Company","tickets":"Tickets","ticket":"Ticket","asterisks_bold":"NOTE: Ticket(s) can be assigned later.","asterisks":"Ticket holders will immediately receive an email to finalize their attendee information.","code":"Promo Code:","assign":"Assign to:","add_ticket":"Add additional ticket(s) to this order","no_tickets":"No tickets selected.","disclaimer_in_person_title":"Attention","placeholders":{"coupon":"Coupon (Optional)","email":"Attendee Email (Optional)"},"validator":{"first_name":"Please enter your First Name.","last_name":"Please enter your Last Name.","company":"Please enter your Company.","email":"Please enter a valid Email."}},"step_three":{"payment_info":"Payment Information","required":"Required fields","payment_subtitle":"a subtitle...","cardholder_name":"Cardholder Name","card_number":"Card Number","expiration":"Expiration & Code","billing_info":"Billing Information","billing_subtitle":"a subtitle...","billing_country":"Country","billing_address":"Address","billing_address_two":"Address 2","billing_city":"City","billing_state":"State","billing_zipcode":"ZIP Code","stripe_errors":{"cardNumber":"Please enter a valid Credit Card.","cardExpiry":"Please enter the card expiration.","cardCvc":"Please enter the card cvc."},"validator":{"billing_country":"Please enter the billing Country.","billing_address":"Please enter the billing Address.","billing_city":"Please enter the billing City.","billing_state":"Please enter the billing State.","billing_zipcode":"Please enter the billing ZipCode."}},"step_four":{"thank_you":"Thank you for your order!","subtitle":"Your Order is Now Complete","member_exclamation":"You are signed in with your FNid and will use it to log in to the event on show days. ","member_text":"You may proceed directly to the \\"","member_link_tickets":"My Tickets","member_text_1":"\\" page to review your ticket(s) and complete any required details. Visit the \\"","member_link_orders":"My Orders","member_text_2":"\\" page to manage your purchase, assign ticket(s), and edit attendee details.","required_text":"PLEASE NOTE! Ticket(s) must be assigned and all additional details must be completed before official ticket(s) are issued.","register_text":"An FNid is required to manage order(s) and assign ticket(s) ","register_link_text":"create one","register_text_2":" with the email ","register_text_3":" used for this purchase, you will then be able to manage your order.","register_email_bold":"You will now receive an email with a one-click link to create a password for your FNid.","register_email_1":"Your FNid will allow you to access the event. Visit the \\"","register_email_orders":"My Orders","register_email_2":"\\" page to manage your purchase, assign ticket(s), and edit attendee details.","help_text":"For further assistance, please email ","order_no":"ORDER NUMBER","manage":"My Orders","getfnid":"Create an FNid","signin":"Sign In"},"guests":{"invalid_thanks":"Thanks for coming to fill in the remaining details so we can issue your ticket.","invalid_text_1":"Unfortunately the link in your email has expired. Not to worry we will send you a fresh link. Click here or the button below to get a new link.","invalid_button":"Send New Link","invalid_contact":"If you have any problems please email","hash_regenerated":"Please check your new link in your email","completed_text_1":"Thank you for completing your additional details. Your ticket has now been issued. Please use your FNid to access the event.","completed_button":"Download Ticket to","completed_text_2":"You will also receive an email confirmation.","cancel":"Cancel","save":"Save"},"orders-tickets":{"loading":"Loading your orders and tickets...","empty-title":"It appears you have not placed any orders and no tickets have been assigned to you.","empty-text":"If you believe this is incorrect please email <a href=\\"mailto:{{support_email}}\\">{{support_email}}</a>. Thank you!","view_more":"View more","view_less":"View less"},"orders":{"title":"My Orders with Tickets","purchased":"Purchased on","empty":"There are no active orders so far","loading":"Loading orders...","no_orders":"No results found."},"no-summit":{"not-found":"","select-list":"Please select from available shows:"},"order_info":{"print":"Print","resend":"Resend Receipt","download":"Download Ticket PDF","cancel_order":"Request to Refund All Tickets","cancel_ticket":"Cancel Ticket","email_support":"Email Support","directions":"Get Directions","calendar":"Add to Calendar"},"order_status":{"complete":"Ticket(s) assigned and issued","incomplete":"Additional attendee details required before ticket(s) can be issued","pending":"Pending confirmation","cancelled":"Cancelled","error":"Payment error","processing":"Payment processing","past":"Past"},"tickets":{"title":"External Tickets Assigned to Me","empty":"There are no tickets so far","loading":"Loading tickets...","save_message":"Thank you! Your information has been saved and ticket updated.","assign_success_message":"The ticket was successfully assigned.","reassign_success_message":"The ticket was successfully reassigned.","unassign_success_message":"The ticket was successfully unassigned.","notify_success_message":"Notification was sent to ticket holder.","refund_request_success_1":"Your refund request has been requested successfully","refund_request_success_2":"Please allow 24 - 48 hours for a response"},"ticket_status":{"unassigned":"Unassigned","incomplete":"Required details needed","complete":"Ready to use","cancelled":"Cancelled","past":"Past","ticket_no":"Ticket #","assigned_to":"Assigned to","attendee_status_unassigned":"Attendee unassigned","view_tickets":"View Tickets","hide_tickets":"Hide Tickets","view_ticket":"View Ticket","reassign_ticket":"Reassign","assign_ticket":"Assign Ticket","status_unassigned":"Unassigned","status_complete":"Completed","status_incomplete":"Incomplete","status_refund_requested":"Refund Requested","status_details_required":"Some tickets in this order require additional details before the ticket(s) can be issued.","status_cancelled":"Cancelled","finish_ticket":"Finish Ticket","select_ticket_refund":"Select the ticket(s) for a refund:","select_all":"Select All","select_cancel":"Cancel","copy_ticket_number":"Copy Ticket Number","refund_request_approved":"Refund Approved","refund_request_rejected":"Refund Rejected","refund_request_pending":"Refund Requested"},"nav_bar":{"my-orders":"My Orders","my-tickets":"My Tickets"},"ticket_popup":{"tab_assign":"Assign","tab_reassign":"Reassign","tab_refund":"Refund","tab_edit":"Edit Details","tab_edit_read_only":"Details","tab_notify":"Notify Ticket Holder","assign_text":"Select the option to assign this ticket","assign_or":"Or","assign_me":"Assign to Me","assign_this":"Assign this Ticket","assign_want_text":"I want to assign this ticket to someone else!","assign_someone":"Assign to this person","assign_ticket":"Assign this Ticket","assign_expire":"Ability to assign ticket expires in ","assign_days":"days","reassign_printed_ticket":"Ticket may not be reassigned because this badge has already been printed.","reassign_text":"Select the option to reassign this ticket from","reassign_want_text":"I want to reassign this ticket to someone else!","reassign_before":"before","reassign_enter_email":"Enter the email of the person you would like to assign the ticket to below. Please note! An email will be sent to the below address with instructions on how to complete any additional information required to issue their ticket.","reassign_check":"Clean all fields","reassign_me":"Reassign to Me","reassign_someone":"Reassign to this person","edit_basic_info":"Attendee Information","edit_required":"Required","edit_email":"Ticket assigned to email:","assign_note":"Note: Should the ticket holder wish to change their name or company info, they can do so by logging into the event site and clicking on the profile icon (located on the far right of the top navigation bar).","edit_first_name":"First Name","edit_first_name_placeholder":"Attendee First Name","edit_last_name":"Last Name","edit_last_name_placeholder":"Attendee Last Name","edit_company":"Company","edit_company_placeholder":"Attendee Company","edit_required_star":"*","edit_preferences":"Additional Details","notify_text_1":"All required details must be completed before","notify_text_2":"Clicking the \\"Resend Notification\\" button will generate an email to","notify_text_3":"with instructions on how to provide their required attendee information. Once the details are complete, their official ticket will be issued and sent to","notify_message":"Personal Message","notify_message_condition":"(Optional)","notify_button":"Resend Notification","cancel_ticket":"Request a refund for this ticket","save_changes":"Save Changes","saving_changes":"Saving Changes","do_it_later":"Do this later","do_it_later_exp":"You may fill in the required information now or complete this step on the \'My Orders\' page later."},"confirm_popup":{"question_title_cancel":"Refund Ticket","question_text_cancel":"Are you sure you want to request a refund of this ticket?","question_title_cancel_order":"Refund Order","question_text_cancel_order":"Are you sure you want to request a refund of this entire order ?","question_title_assign":"Assign Request","question_text_assign":"Are you sure you want to clean all the fields?","question_title_unassign":"Unassign Request","question_text_unassign":"Are you sure you want to unassign this ticket?","question_title_reassign":"Reassign Request","question_text_reassign":"Are you sure you want to reassign this ticket?","question_title_save":"Save","question_text_save":"","question_title_notification":"Notification Request","question_text_notification":"","question_text_confirm":"Are you sure?","cancel":"Cancel","accept":"Yes","success_title":"Request Submitted","success_text":"An email notification has been sent to","success_button":"Got it"},"invitees":{"validation_error":"Invitation error","entity_not_found":"Invitation not found"},"signin":{"add_code_title_p1":"Add the","add_code_title_p2":"digit code below","email_reception_error_p1":"Didn\'t receive it? Check your spam folder or","email_reception_error_p2":"resend email","email_sent":"We\'ve sent a code to the email","go_back_title_p1":"or go back and","go_back_title_p2":"try another way","invalid_email_addr":"Please enter a valid email adress","login_with_title":"Log in with one of the following","retry":"Please try again.","send_code_option":"or get a login code emailed to you","verify_btn":"Verify","wrong_code":"The code you entered is incorrect.","fn_login_btn":"Continue with FNid","fb_login_btn":"Continue with Facebook","ln_login_btn":"Sign in with LinkedIn","ap_login_btn":"Continue with Apple","ok_login_btn":"Continue with Okta"},"logout_popup":{"title":"Re-login required","message":"You are not logged in anymore. Please log in to continue.","close_btn":"Re-login"},"filter":{"filter":"Filter","purchased_on":"Purchased on"},"sort":{"sort":"Sort","new_first":"Newest first","old_first":"Oldest first"},"order_search":{"order_number":"Search order number"},"ticket_detail":{"purchased_by":"Purchased by","status":"ready to use","qr_note":"When you check in you will be able to scan the QR code directly from your device. Or you can:","download":"Download","send":"Send to email","sent":"Email sent!","attendee_information":"Attendee Information","email":"Email","first_name":"First Name","last_name":"Last Name","attendee_first_name":"First Name","attendee_last_name":"Last Name","attendee_company":"Company","delegated_to":"Delegated to:","aditional_details":"Additional details","save":"save changes","cancel":"cancel","info_note":"Note: Should the ticket holder wish to change name or company info, they can do so by logging into the event site and clicking on the profile icon (located on the far right of the top navigation bar).","saving_error":"Error saving ticket","saving_success":"Ticket Saved!","saving_success_description":"ticket saved successfully"},"ticket_reassign":{"reassign_ticket":"REASSIGN ticket","assigned_to":"This ticket is assigned to ","reassigned_to":"You have reassigned the ticket to","enter_email_note":"Enter the email of the person you would like to REASSIGN the ticket to below. \\n We will notice the old address that the ticket is no longer available.","complete_info":"To finish, complete the following information.","new_attendee_email":"New attendee email","personal_message":"Personal Message (optional)","cancel":"cancel","save":"reassign","saving_error":"Error saving ticket","saving_success":"Ticket Saved!","saving_success_description":"ticket saved successfully"},"ticket_assign_eq":{"cancel":"complete later","save":"save"},"ticket_assign":{"assign_ticket":"Assign ticket","purchased_by":"Purchased by ","assign_to_me":"Assign to me","assign_to_someone_else":"I want to assign this ticket to someone else:","enter_email_note":"Enter the email of the person you would like to assign the ticket to below. Please note! An email will be sent to the below address with instructions on how to complete any additional information required to issue their ticket.","save_label":"Assign to this person","complete_info":"To finish, complete the following information.","assigned_to":"You have assigned the ticket to","new_attendee_email":"New attendee email","personal_message":"Personal Message (optional)","cancel":"cancel","save":"reassign","saving_error":"Error saving ticket","saving_success":"Ticket Saved!","saving_success_description":"ticket saved successfully"},"validation":{"required_question":"This question is required","required_field":"Required field","first_name":{"string":"Enter first name","required":"First name is required"},"last_name":{"string":"Enter last name","required":"Last name is required"},"email":{"string":"Enter email","format":"Must be a valid email address","required":"Email is required"},"text":{"string":"Enter text"},"checkbox":{"required":"Field must be checked"},"company":{"required":"Company is required"}}}');
7525
7804
 
7526
7805
  /***/ }),
7527
7806
 
@@ -7531,7 +7810,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"landing":{"sign_out":"Sign out","sig
7531
7810
  \**********************************/
7532
7811
  /***/ ((module) => {
7533
7812
 
7534
- module.exports = /*#__PURE__*/JSON.parse('{"landing":{"sign_out":"Sign out","sign_in":"FNid Sign In","not_logged_in":"You are not logged in. Please log in to continue:"},"errors":{"user_not_authz":"Hold on. Your user is not authorized!.","user_not_set":"Hold on. Can not get any valid user.","session_expired":"Hold on. Your session expired!","server_error":"There was a problem with our server, please contact admin.","not_allowed":"You are not allowed here, please login with another user to access this page.","refund_unsuccessful":"Some of the refund requests were unsucessful. Please try again."},"general":{"continue":"Continue","save_and_continue":"Save and Continue","back":"Back","pay_now":"Pay Now","confirm":"Confirm","yes":"Yes","no":"No","cancel":"Cancel","finish":"Finish"},"labels":{"tickets":"Tickets","summary":"Summary"},"order_summary":{"order_summary":"Order Summary","order_no":"Order number","discounts":"Discount","refunds":"Refund","request_refund":"Request a Refund","refund_details":"Your Refund Details","taxes":"Taxes","total":"Total Due","amount_paid":"Amount Paid"},"event_info":{"about_title":"About the event","about_desc":"a description","directions":"Get Directions","calendar":"Add to Calendar"},"step_one":{"choose_tickets":"Choose your ticket(s)","choose_tickets_desc":"a description","expiration":"Ticket(s) available until ","free":"Free","sold_out":"Sold Out","no_tickets":"No tickets for sale!","getfnid":"Create an FNid","signin":"Sign In"},"step_two":{"basic_info":"Purchaser Information","required":"Required fields","have_account":"Do you have an FNid account?","sign_in":"Sign in","sign_in_account":"to autopopulate this info and manage this order.","first_name":"First Name","last_name":"Last Name","email":"Email","company":"Company","tickets":"Tickets","ticket":"Ticket","asterisks_bold":"NOTE: Ticket(s) can be assigned later.","asterisks":"Ticket holders will immediately receive an email to finalize their attendee information.","code":"Promo Code:","assign":"Assign to:","add_ticket":"Add additional ticket(s) to this order","no_tickets":"No tickets selected.","disclaimer_in_person_title":"Attention","placeholders":{"coupon":"Coupon (Optional)","email":"Attendee Email (Optional)"},"validator":{"first_name":"Please enter your First Name.","last_name":"Please enter your Last Name.","company":"Please enter your Company.","email":"Please enter a valid Email."}},"step_three":{"payment_info":"Payment Information","required":"Required fields","payment_subtitle":"a subtitle...","cardholder_name":"Cardholder Name","card_number":"Card Number","expiration":"Expiration & Code","billing_info":"Billing Information","billing_subtitle":"a subtitle...","billing_country":"Country","billing_address":"Address","billing_address_two":"Address 2","billing_city":"City","billing_state":"State","billing_zipcode":"ZIP Code","stripe_errors":{"cardNumber":"Please enter a valid Credit Card.","cardExpiry":"Please enter the card expiration.","cardCvc":"Please enter the card cvc."},"validator":{"billing_country":"Please enter the billing Country.","billing_address":"Please enter the billing Address.","billing_city":"Please enter the billing City.","billing_state":"Please enter the billing State.","billing_zipcode":"Please enter the billing ZipCode."}},"step_four":{"thank_you":"Thank you for your order!","subtitle":"Your Order is Now Complete","member_exclamation":"You are signed in with your FNid and will use it to log in to the event on show days. ","member_text":"You may proceed directly to the \\"","member_link_tickets":"My Tickets","member_text_1":"\\" page to review your ticket(s) and complete any required details. Visit the \\"","member_link_orders":"My Orders","member_text_2":"\\" page to manage your purchase, assign ticket(s), and edit attendee details.","required_text":"PLEASE NOTE! Ticket(s) must be assigned and all additional details must be completed before official ticket(s) are issued.","register_text":"An FNid is required to manage order(s) and assign ticket(s) ","register_link_text":"create one","register_text_2":" with the email ","register_text_3":" used for this purchase, you will then be able to manage your order.","register_email_bold":"You will now receive an email with a one-click link to create a password for your FNid.","register_email_1":"Your FNid will allow you to access the event. Visit the \\"","register_email_orders":"My Orders","register_email_2":"\\" page to manage your purchase, assign ticket(s), and edit attendee details.","help_text":"For further assistance, please email ","order_no":"ORDER NUMBER","manage":"My Orders","getfnid":"Create an FNid","signin":"Sign In"},"guests":{"invalid_thanks":"Thanks for coming to fill in the remaining details so we can issue your ticket.","invalid_text_1":"Unfortunately the link in your email has expired. Not to worry we will send you a fresh link. Click here or the button below to get a new link.","invalid_button":"Send New Link","invalid_contact":"If you have any problems please email","hash_regenerated":"Please check your new link in your email","completed_text_1":"Thank you for completing your additional details. Your ticket has now been issued. Please use your FNid to access the event.","completed_button":"Download Ticket to","completed_text_2":"You will also receive an email confirmation.","cancel":"Cancel","save":"Save"},"orders-tickets":{"loading":"Loading your orders and tickets...","empty-title":"It appears you have not placed any orders and no tickets have been assigned to you.","empty-text":"If you believe this is incorrect please email <a href=\\"mailto:{{support_email}}\\">{{support_email}}</a>. Thank you!","view_more":"View more","view_less":"View less"},"orders":{"title":"My Orders with Tickets","purchased":"Purchased on","empty":"There are no active orders so far","loading":"Loading orders...","no_orders":"No results found."},"no-summit":{"not-found":"","select-list":"Please select from available shows:"},"order_info":{"print":"Print","resend":"Resend Receipt","download":"Download Ticket PDF","cancel_order":"Request to Refund All Tickets","cancel_ticket":"Cancel Ticket","email_support":"Email Support","directions":"Get Directions","calendar":"Add to Calendar"},"order_status":{"complete":"Ticket(s) assigned and issued","incomplete":"Additional attendee details required before ticket(s) can be issued","pending":"Pending confirmation","cancelled":"Cancelled","error":"Payment error","processing":"Payment processing","past":"Past"},"tickets":{"title":"External Tickets Assigned to Me","empty":"There are no tickets so far","loading":"Loading tickets...","save_message":"Thank you! Your information has been saved and ticket updated.","assign_success_message":"The ticket was successfully assigned.","reassign_success_message":"The ticket was successfully reassigned.","unassign_success_message":"The ticket was successfully unassigned.","notify_success_message":"Notification was sent to ticket holder.","refund_request_success_1":"Your refund request has been requested successfully","refund_request_success_2":"Please allow 24 - 48 hours for a response"},"ticket_status":{"unassigned":"Unassigned","incomplete":"Required details needed","complete":"Ready to use","cancelled":"Cancelled","past":"Past","ticket_no":"Ticket #","assigned_to":"Assigned to","attendee_status_unassigned":"Attendee unassigned","view_tickets":"View Tickets","hide_tickets":"Hide Tickets","view_ticket":"View Ticket","reassign_ticket":"Reassign","assign_ticket":"Assign Ticket","status_unassigned":"Unassigned","status_complete":"Completed","status_incomplete":"Incomplete","status_refund_requested":"Refund Requested","status_details_required":"Some tickets in this order require additional details before the ticket(s) can be issued.","status_cancelled":"Cancelled","finish_ticket":"Finish Ticket","select_ticket_refund":"Select the ticket(s) for a refund:","select_all":"Select All","select_cancel":"Cancel"},"nav_bar":{"my-orders":"My Orders","my-tickets":"My Tickets"},"ticket_popup":{"tab_assign":"Assign","tab_reassign":"Reassign","tab_refund":"Refund","tab_edit":"Edit Details","tab_edit_read_only":"Details","tab_notify":"Notify Ticket Holder","assign_text":"Select the option to assign this ticket","assign_or":"Or","assign_me":"Assign to Me","assign_this":"Assign this Ticket","assign_want_text":"I want to assign this ticket to someone else!","assign_someone":"Assign to this person","assign_ticket":"Assign this Ticket","assign_expire":"Ability to assign ticket expires in ","assign_days":"days","reassign_printed_ticket":"Ticket may not be reassigned because this badge has already been printed.","reassign_text":"Select the option to reassign this ticket from","reassign_want_text":"I want to reassign this ticket to someone else!","reassign_before":"before","reassign_enter_email":"Enter the email of the person you would like to assign the ticket to below. Please note! An email will be sent to the below address with instructions on how to complete any additional information required to issue their ticket.","reassign_check":"Clean all fields","reassign_me":"Reassign to Me","reassign_someone":"Reassign to this person","edit_basic_info":"Attendee Information","edit_required":"Required","edit_email":"Ticket assigned to email:","assign_note":"Note: Should the ticket holder wish to change their name or company info, they can do so by logging into the event site and clicking on the profile icon (located on the far right of the top navigation bar).","edit_first_name":"First Name","edit_first_name_placeholder":"Attendee First Name","edit_last_name":"Last Name","edit_last_name_placeholder":"Attendee Last Name","edit_company":"Company","edit_company_placeholder":"Attendee Company","edit_required_star":"*","edit_preferences":"Additional Details","notify_text_1":"All required details must be completed before","notify_text_2":"Clicking the \\"Resend Notification\\" button will generate an email to","notify_text_3":"with instructions on how to provide their required attendee information. Once the details are complete, their official ticket will be issued and sent to","notify_message":"Personal Message","notify_message_condition":"(Optional)","notify_button":"Resend Notification","cancel_ticket":"Request a refund for this ticket","save_changes":"Save Changes","saving_changes":"Saving Changes","do_it_later":"Do this later","do_it_later_exp":"You may fill in the required information now or complete this step on the \'My Orders\' page later."},"confirm_popup":{"question_title_cancel":"Refund Ticket","question_text_cancel":"Are you sure you want to request a refund of this ticket ?","question_title_cancel_order":"Refund Order","question_text_cancel_order":"Are you sure you want to request a refund of this entire order ?","question_title_assign":"Assign Request","question_text_assign":"Are you sure you want to clean all the fields?","question_title_unassign":"Unassign Request","question_text_unassign":"Are you sure you want to unassign this ticket?","question_title_reassign":"Reassign Request","question_text_reassign":"Are you sure you want to reassign this ticket?","question_title_save":"Save","question_text_save":"","question_title_notification":"Notification Request","question_text_notification":"","question_text_confirm":"Are you sure?","cancel":"Cancel","accept":"Yes","success_title":"Request Submitted","success_text":"An email notification has been sent to","success_button":"Got it"},"invitees":{"validation_error":"Invitation error","entity_not_found":"Invitation not found"},"signin":{"add_code_title_p1":"Add the","add_code_title_p2":"digit code below","email_reception_error_p1":"Didn\'t receive it? Check your spam folder or","email_reception_error_p2":"resend email","email_sent":"We\'ve sent a code to the email","go_back_title_p1":"or go back and","go_back_title_p2":"try another way","invalid_email_addr":"Please enter a valid email adress","login_with_title":"Log in with one of the following","retry":"Please try again.","send_code_option":"or get a login code emailed to you","verify_btn":"Verify","wrong_code":"The code you entered is incorrect.","fn_login_btn":"Continue with FNid","fb_login_btn":"Continue with Facebook","ln_login_btn":"Sign in with LinkedIn","ap_login_btn":"Continue with Apple","ok_login_btn":"Continue with Okta"},"logout_popup":{"title":"Re-login required","message":"You are not logged in anymore. Please log in to continue.","close_btn":"Re-login"},"filter":{"filter":"Filter","purchased_on":"Purchased on"},"sort":{"sort":"Sort","new_first":"Newest first","old_first":"Oldest first"},"order_search":{"order_number":"Search order number"}}');
7813
+ module.exports = /*#__PURE__*/JSON.parse('{"landing":{"sign_out":"Sign out","sign_in":"FNid Sign In","not_logged_in":"You are not logged in. Please log in to continue:"},"errors":{"user_not_authz":"Hold on. Your user is not authorized!.","user_not_set":"Hold on. Can not get any valid user.","session_expired":"Hold on. Your session expired!","server_error":"There was a problem with our server, please contact admin.","not_allowed":"You are not allowed here, please login with another user to access this page.","refund_unsuccessful":"Some of the refund requests were unsucessful. Please try again."},"general":{"continue":"Continue","save_and_continue":"Save and Continue","back":"Back","pay_now":"Pay Now","confirm":"Confirm","yes":"Yes","no":"No","cancel":"Cancel","finish":"Finish"},"labels":{"tickets":"Tickets","summary":"Summary"},"order_summary":{"order_summary":"Order Summary","order_no":"Order number","discounts":"Discount","refunds":"Refund","request_refund":"Request a Refund","refund_details":"Your Refund Details","taxes":"Taxes","total":"Total Due","amount_paid":"Amount Paid"},"event_info":{"about_title":"About the event","about_desc":"a description","directions":"Get Directions","calendar":"Add to Calendar"},"step_one":{"choose_tickets":"Choose your ticket(s)","choose_tickets_desc":"a description","expiration":"Ticket(s) available until ","free":"Free","sold_out":"Sold Out","no_tickets":"No tickets for sale!","getfnid":"Create an FNid","signin":"Sign In"},"step_two":{"basic_info":"Purchaser Information","required":"Required fields","have_account":"Do you have an FNid account?","sign_in":"Sign in","sign_in_account":"to autopopulate this info and manage this order.","first_name":"First Name","last_name":"Last Name","email":"Email","company":"Company","tickets":"Tickets","ticket":"Ticket","asterisks_bold":"NOTE: Ticket(s) can be assigned later.","asterisks":"Ticket holders will immediately receive an email to finalize their attendee information.","code":"Promo Code:","assign":"Assign to:","add_ticket":"Add additional ticket(s) to this order","no_tickets":"No tickets selected.","disclaimer_in_person_title":"Attention","placeholders":{"coupon":"Coupon (Optional)","email":"Attendee Email (Optional)"},"validator":{"first_name":"Please enter your First Name.","last_name":"Please enter your Last Name.","company":"Please enter your Company.","email":"Please enter a valid Email."}},"step_three":{"payment_info":"Payment Information","required":"Required fields","payment_subtitle":"a subtitle...","cardholder_name":"Cardholder Name","card_number":"Card Number","expiration":"Expiration & Code","billing_info":"Billing Information","billing_subtitle":"a subtitle...","billing_country":"Country","billing_address":"Address","billing_address_two":"Address 2","billing_city":"City","billing_state":"State","billing_zipcode":"ZIP Code","stripe_errors":{"cardNumber":"Please enter a valid Credit Card.","cardExpiry":"Please enter the card expiration.","cardCvc":"Please enter the card cvc."},"validator":{"billing_country":"Please enter the billing Country.","billing_address":"Please enter the billing Address.","billing_city":"Please enter the billing City.","billing_state":"Please enter the billing State.","billing_zipcode":"Please enter the billing ZipCode."}},"step_four":{"thank_you":"Thank you for your order!","subtitle":"Your Order is Now Complete","member_exclamation":"You are signed in with your FNid and will use it to log in to the event on show days. ","member_text":"You may proceed directly to the \\"","member_link_tickets":"My Tickets","member_text_1":"\\" page to review your ticket(s) and complete any required details. Visit the \\"","member_link_orders":"My Orders","member_text_2":"\\" page to manage your purchase, assign ticket(s), and edit attendee details.","required_text":"PLEASE NOTE! Ticket(s) must be assigned and all additional details must be completed before official ticket(s) are issued.","register_text":"An FNid is required to manage order(s) and assign ticket(s) ","register_link_text":"create one","register_text_2":" with the email ","register_text_3":" used for this purchase, you will then be able to manage your order.","register_email_bold":"You will now receive an email with a one-click link to create a password for your FNid.","register_email_1":"Your FNid will allow you to access the event. Visit the \\"","register_email_orders":"My Orders","register_email_2":"\\" page to manage your purchase, assign ticket(s), and edit attendee details.","help_text":"For further assistance, please email ","order_no":"ORDER NUMBER","manage":"My Orders","getfnid":"Create an FNid","signin":"Sign In"},"guests":{"invalid_thanks":"Thanks for coming to fill in the remaining details so we can issue your ticket.","invalid_text_1":"Unfortunately the link in your email has expired. Not to worry we will send you a fresh link. Click here or the button below to get a new link.","invalid_button":"Send New Link","invalid_contact":"If you have any problems please email","hash_regenerated":"Please check your new link in your email","completed_text_1":"Thank you for completing your additional details. Your ticket has now been issued. Please use your FNid to access the event.","completed_button":"Download Ticket to","completed_text_2":"You will also receive an email confirmation.","cancel":"Cancel","save":"Save"},"orders-tickets":{"loading":"Loading your orders and tickets...","empty-title":"It appears you have not placed any orders and no tickets have been assigned to you.","empty-text":"If you believe this is incorrect please email <a href=\\"mailto:{{support_email}}\\">{{support_email}}</a>. Thank you!","view_more":"View more","view_less":"View less"},"orders":{"title":"My Orders with Tickets","purchased":"Purchased on","empty":"There are no active orders so far","loading":"Loading orders...","no_orders":"No results found."},"no-summit":{"not-found":"","select-list":"Please select from available shows:"},"order_info":{"print":"Print","resend":"Resend Receipt","download":"Download Ticket PDF","cancel_order":"Request to Refund All Tickets","cancel_ticket":"Cancel Ticket","email_support":"Email Support","directions":"Get Directions","calendar":"Add to Calendar"},"order_status":{"complete":"Ticket(s) assigned and issued","incomplete":"Additional attendee details required before ticket(s) can be issued","pending":"Pending confirmation","cancelled":"Cancelled","error":"Payment error","processing":"Payment processing","past":"Past"},"tickets":{"title":"External Tickets Assigned to Me","empty":"There are no tickets so far","loading":"Loading tickets...","save_message":"Thank you! Your information has been saved and ticket updated.","assign_success_message":"The ticket was successfully assigned.","reassign_success_message":"The ticket was successfully reassigned.","unassign_success_message":"The ticket was successfully unassigned.","notify_success_message":"Notification was sent to ticket holder.","refund_request_success_1":"Your refund request has been requested successfully","refund_request_success_2":"Please allow 24 - 48 hours for a response"},"ticket_status":{"unassigned":"Unassigned","incomplete":"Required details needed","complete":"Ready to use","cancelled":"Cancelled","past":"Past","ticket_no":"Ticket #","assigned_to":"Assigned to","attendee_status_unassigned":"Attendee unassigned","view_tickets":"View Tickets","hide_tickets":"Hide Tickets","view_ticket":"View Ticket","reassign_ticket":"Reassign","assign_ticket":"Assign Ticket","status_unassigned":"Unassigned","status_complete":"Completed","status_incomplete":"Incomplete","status_refund_requested":"Refund Requested","status_details_required":"Some tickets in this order require additional details before the ticket(s) can be issued.","status_cancelled":"Cancelled","finish_ticket":"Finish Ticket","select_ticket_refund":"Select the ticket(s) for a refund:","select_all":"Select All","select_cancel":"Cancel","refund_request_approved":"Refund Approved","refund_request_rejected":"Refund Rejected","refund_request_pending":"Refund Requested"},"nav_bar":{"my-orders":"My Orders","my-tickets":"My Tickets"},"ticket_popup":{"tab_assign":"Assign","tab_reassign":"Reassign","tab_refund":"Refund","tab_edit":"Edit Details","tab_edit_read_only":"Details","tab_notify":"Notify Ticket Holder","assign_text":"Select the option to assign this ticket","assign_or":"Or","assign_me":"Assign to Me","assign_this":"Assign this Ticket","assign_want_text":"I want to assign this ticket to someone else!","assign_someone":"Assign to this person","assign_ticket":"Assign this Ticket","assign_expire":"Ability to assign ticket expires in ","assign_days":"days","reassign_printed_ticket":"Ticket may not be reassigned because this badge has already been printed.","reassign_text":"Select the option to reassign this ticket from","reassign_want_text":"I want to reassign this ticket to someone else!","reassign_before":"before","reassign_enter_email":"Enter the email of the person you would like to assign the ticket to below. Please note! An email will be sent to the below address with instructions on how to complete any additional information required to issue their ticket.","reassign_check":"Clean all fields","reassign_me":"Reassign to Me","reassign_someone":"Reassign to this person","edit_basic_info":"Attendee Information","edit_required":"Required","edit_email":"Ticket assigned to email:","assign_note":"Note: Should the ticket holder wish to change their name or company info, they can do so by logging into the event site and clicking on the profile icon (located on the far right of the top navigation bar).","edit_first_name":"First Name","edit_first_name_placeholder":"Attendee First Name","edit_last_name":"Last Name","edit_last_name_placeholder":"Attendee Last Name","edit_company":"Company","edit_company_placeholder":"Attendee Company","edit_required_star":"*","edit_preferences":"Additional Details","notify_text_1":"All required details must be completed before","notify_text_2":"Clicking the \\"Resend Notification\\" button will generate an email to","notify_text_3":"with instructions on how to provide their required attendee information. Once the details are complete, their official ticket will be issued and sent to","notify_message":"Personal Message","notify_message_condition":"(Optional)","notify_button":"Resend Notification","cancel_ticket":"Request a refund for this ticket","save_changes":"Save Changes","saving_changes":"Saving Changes","do_it_later":"Do this later","do_it_later_exp":"You may fill in the required information now or complete this step on the \'My Orders\' page later."},"confirm_popup":{"question_title_cancel":"Refund Ticket","question_text_cancel":"Are you sure you want to request a refund of this ticket ?","question_title_cancel_order":"Refund Order","question_text_cancel_order":"Are you sure you want to request a refund of this entire order ?","question_title_assign":"Assign Request","question_text_assign":"Are you sure you want to clean all the fields?","question_title_unassign":"Unassign Request","question_text_unassign":"Are you sure you want to unassign this ticket?","question_title_reassign":"Reassign Request","question_text_reassign":"Are you sure you want to reassign this ticket?","question_title_save":"Save","question_text_save":"","question_title_notification":"Notification Request","question_text_notification":"","question_text_confirm":"Are you sure?","cancel":"Cancel","accept":"Yes","success_title":"Request Submitted","success_text":"An email notification has been sent to","success_button":"Got it"},"invitees":{"validation_error":"Invitation error","entity_not_found":"Invitation not found"},"signin":{"add_code_title_p1":"Add the","add_code_title_p2":"digit code below","email_reception_error_p1":"Didn\'t receive it? Check your spam folder or","email_reception_error_p2":"resend email","email_sent":"We\'ve sent a code to the email","go_back_title_p1":"or go back and","go_back_title_p2":"try another way","invalid_email_addr":"Please enter a valid email adress","login_with_title":"Log in with one of the following","retry":"Please try again.","send_code_option":"or get a login code emailed to you","verify_btn":"Verify","wrong_code":"The code you entered is incorrect.","fn_login_btn":"Continue with FNid","fb_login_btn":"Continue with Facebook","ln_login_btn":"Sign in with LinkedIn","ap_login_btn":"Continue with Apple","ok_login_btn":"Continue with Okta"},"logout_popup":{"title":"Re-login required","message":"You are not logged in anymore. Please log in to continue.","close_btn":"Re-login"},"filter":{"filter":"Filter","purchased_on":"Purchased on"},"sort":{"sort":"Sort","new_first":"Newest first","old_first":"Oldest first"},"order_search":{"order_number":"Search order number"}}');
7535
7814
 
7536
7815
  /***/ })
7537
7816
 
@@ -7733,4 +8012,4 @@ MyOrdersMyTicketsWidget.propTypes = {
7733
8012
  /******/ })()
7734
8013
  ;
7735
8014
  });
7736
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ozs7Ozs7Ozs7Ozs7QUNiNVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUMyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNMM0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDdU47Ozs7Ozs7Ozs7Ozs7OztBQ1Z2TjtBQUNBO0FBQzBCOzs7Ozs7Ozs7Ozs7Ozs7O0FDRjFCO0FBQ0E7QUFDQTtBQUM0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0g1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDK1c7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsQi9XO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNzSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDTnRJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDZ007Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUmhNO0FBQ0E7QUFDQTtBQUNBO0FBQytFOzs7Ozs7Ozs7OztBQ0ovRTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7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b08sRUFBRSxFQUFFO1lBQUVrRCxPQUFPLEVBQUU7Y0FBRWdDLEVBQUUsRUFBRSxDQUFDO2NBQUU2QyxFQUFFLEVBQUUsQ0FBQztjQUFFQyxFQUFFLEVBQUU7WUFBRTtVQUFFLENBQUU7VUFBQTNVLFFBQUEsZUFDNUNoQixzREFBQTtZQUFBZ0IsUUFBQSxFQUFLVixDQUFDLENBQUMsY0FBYztVQUFDLENBQUs7UUFBQyxDQUN6QixDQUFDLGVBQ05OLHNEQUFBLENBQUM0VSxtRUFBZTtVQUNkb2EsUUFBUSxFQUFFQSxRQUFTO1VBQ25Cd0ksWUFBWSxFQUFFQSxZQUFhO1VBQzNCbmdDLE1BQU0sRUFBRUEsTUFBTztVQUNmdUIsVUFBVSxFQUFFQTtRQUFXLENBQ3hCLENBQUM7TUFBQSxDQUNrQjtJQUFDLENBQ1o7RUFBQyxDQUNOLENBQUM7QUFFZixDQUFDO0FBRUQyK0IsdUJBQXVCLENBQUMvMUIsU0FBUyxHQUFHO0VBQ2xDd3RCLFFBQVEsRUFBRTN2QiwwREFBZ0I7RUFDMUJtNEIsWUFBWSxFQUFFbjRCLDBEQUFnQjtFQUM5QmhJLE1BQU0sRUFBRWdJLDBEQUFnQjtFQUN4QnpHLFVBQVUsRUFBRXlHLDBEQUFnQjtFQUM1Qi9ILElBQUksRUFBRStILDBEQUFnQjtFQUN0QjB2QixRQUFRLEVBQUUxdkIsMERBQWdCO0VBQzFCL0IsYUFBYSxFQUFFK0Isd0RBQWNzQztBQUMvQixDQUFDO0FBRUQsaUVBQWU0MUIsdUJBQXVCLEUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9hY3Rpb25zLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0Fzc2lnbkVRRm9ybS9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9Db3B5VGV4dC9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9DdXN0b21EaWFsb2cvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvQ3VzdG9tVGhlbWUuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRXh0cmFRdWVzdGlvbnNGaWVsZHMvY29tcG9uZW50cy9DaGVja2JveExpc3RRdWVzdGlvbkZpZWxkLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbXBvbmVudHMvQ2hlY2tib3hRdWVzdGlvbkZpZWxkLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbXBvbmVudHMvRHJvcGRvd25RdWVzdGlvbkZpZWxkLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbXBvbmVudHMvUmFkaW9MaXN0UXVlc3Rpb25GaWVsZC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL1RleHRRdWVzdGlvbkZpZWxkLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbXBvbmVudHMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRXh0cmFRdWVzdGlvbnNGaWVsZHMvY29uc3RhbnRzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0V4dHJhUXVlc3Rpb25zRmllbGRzL2luZGV4LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0ZpbHRlclNvcnRTZWFyY2gvRGF0ZXBpY2tlci5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9GaWx0ZXJTb3J0U2VhcmNoL0ZpbHRlci5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9GaWx0ZXJTb3J0U2VhcmNoL1NlYXJjaC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9GaWx0ZXJTb3J0U2VhcmNoL1NvcnQuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRmlsdGVyU29ydFNlYXJjaC9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9Gb3JtRm9vdGVyL2luZGV4LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0xhYmVscy9FcnJvckxhYmVsLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0xvYWRlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9NdWx0aVN0ZXBTbGlkZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvTXlPcmRlcnNUaWNrZXRzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL09yZGVyU3VtbWFyeS9PcmRlclN1bW1hcnlUYWJsZS5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9PcmRlclN1bW1hcnkvUmVmdW5kRW1haWxTdXBwb3J0LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL09yZGVyU3VtbWFyeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9PcmRlcnNMaXN0L0F0dGVuZGVlU3RhdHVzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL09yZGVyc0xpc3QvT3JkZXJMaXN0SXRlbS5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9PcmRlcnNMaXN0L09yZGVyTGlzdFRpY2tldHMuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvT3JkZXJzTGlzdC9PcmRlcnNMaXN0RGVza3RvcE1vYmlsZS5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9PcmRlcnNMaXN0L2luZGV4LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1JlZnVuZFJlcXVlc3RzL1JlZnVuZFJlcXVlc3RlZFRpY2tldC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9SZWZ1bmRSZXF1ZXN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9SaWdodERyYXdlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRBc3NpZ24vY29tcG9uZW50cy9Bc3NpZ25Gb3JtL2luZGV4LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1RpY2tldEFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXREZXRhaWwvY29tcG9uZW50cy9Db21wYW55RmllbGQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvVGlja2V0RGV0YWlsL2NvbXBvbmVudHMvUmVnaXN0cmF0aW9uRGlzY2xhaW1lci9SZWdpc3RyYXRpb25EaXNjbGFpbWVyLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1RpY2tldERldGFpbC9jb21wb25lbnRzL1RpY2tldERlbGVnYXRpb25GaWVsZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvVGlja2V0RGV0YWlsL2NvbXBvbmVudHMvVGlja2V0Rm9ybS9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXREZXRhaWwvY29tcG9uZW50cy9UaWNrZXRPd25lckZpZWxkcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXREZXRhaWwvY29uc3RhbnRzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1RpY2tldERldGFpbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRSZWFzc2lnbi9jb21wb25lbnRzL1JlYXNzaWduRm9ybS9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRSZWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRTdGF0dXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2hvb2tzL3VzZUdldFRpY2tldC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvaG9va3MvdXNlU2Nyb2xsVG9FcnJvci5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvaG9va3MvdXNlVGlja2V0RGV0YWlscy5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvaTE4bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvcmVkdWNlci5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvc3RvcmUuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL3V0aWxzL2F1dGguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL3V0aWxzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL3V0aWxzL3N1bW1pdFV0aWxzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy91dGlscy90aWNrZXRVdGlscy5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9Db3B5VGV4dC9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRmlsdGVyU29ydFNlYXJjaC9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRm9ybUZvb3Rlci9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvTGFiZWxzL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9NdWx0aVN0ZXBTbGlkZXIvc3R5bGVzLm1vZHVsZS5zY3NzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL09yZGVyU3VtbWFyeS9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvT3JkZXJzTGlzdC9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvUmVmdW5kUmVxdWVzdHMvc3R5bGVzLm1vZHVsZS5zY3NzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1JpZ2h0RHJhd2VyL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRBc3NpZ24vc3R5bGVzLm1vZHVsZS5zY3NzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1RpY2tldERldGFpbC9jb21wb25lbnRzL1JlZ2lzdHJhdGlvbkRpc2NsYWltZXIvc3R5bGVzLm1vZHVsZS5zY3NzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1RpY2tldERldGFpbC9jb21wb25lbnRzL1RpY2tldE93bmVyRmllbGRzL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXREZXRhaWwvc3R5bGVzLm1vZHVsZS5zY3NzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1RpY2tldFJlYXNzaWduL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRTdGF0dXMvc3R5bGVzLm1vZHVsZS5zY3NzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvaWNvbnMtbWF0ZXJpYWxcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrQ2lyY2xlXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9pY29ucy1tYXRlcmlhbC9DbG9zZVwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvQ29udGVudENvcHlcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL2ljb25zLW1hdGVyaWFsL0RlbGV0ZU91dGxpbmVcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL2ljb25zLW1hdGVyaWFsL0Vycm9yXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9pY29ucy1tYXRlcmlhbC9GaWx0ZXJMaXN0XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9pY29ucy1tYXRlcmlhbC9JbXBvcnRFeHBvcnRcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL2ljb25zLW1hdGVyaWFsL1NlYXJjaFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvbWF0ZXJpYWxcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL21hdGVyaWFsL0NoZWNrYm94XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9tYXRlcmlhbC9EaXZpZGVyXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9tYXRlcmlhbC9EcmF3ZXJcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL21hdGVyaWFsL0lucHV0QmFzZVwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvbWF0ZXJpYWwvU3RhY2tcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL21hdGVyaWFsL1RhYlwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvbWF0ZXJpYWwvVGFic1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvbWF0ZXJpYWwvc3R5bGVzXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9tYXRlcmlhbC91c2VNZWRpYVF1ZXJ5XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS94LWRhdGUtcGlja2Vycy9BZGFwdGVyRGF5anNcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL3gtZGF0ZS1waWNrZXJzL0RhdGVQaWNrZXJcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL3gtZGF0ZS1waWNrZXJzL0xvY2FsaXphdGlvblByb3ZpZGVyXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQHJlZHV4anMvdG9vbGtpdFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBzZW50cnkvcmVhY3RcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJkYXlqc1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcImZvcm1pa1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcImkxOG5leHRcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJpMThuZXh0LWJyb3dzZXItbGFuZ3VhZ2VkZXRlY3RvclwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcImlkdG9rZW4tdmVyaWZpZXJcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJtb21lbnQtdGltZXpvbmVcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL2NvbXBvbmVudHMvcmF3LWh0bWxcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3NlY3VyaXR5L2FjdGlvbnNcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3NlY3VyaXR5L21ldGhvZHNcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3V0aWxzL2FjdGlvbnNcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3V0aWxzL3F1ZXJ5LWFjdGlvbnNcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJwLWxpbWl0XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwicHJvcC10eXBlc1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtaTE4bmV4dFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LWluZmluaXRlLXNjcm9sbC1jb21wb25lbnRcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1xci1jb2RlXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtcmVkdXhcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC9qc3gtcnVudGltZVwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcInJlZHV4XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwicmVkdXgtcGVyc2lzdFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcInJlZHV4LXBlcnNpc3QvaW50ZWdyYXRpb24vcmVhY3RcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWR1eC1wZXJzaXN0L2xpYi9zdG9yYWdlXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwieXVwXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJteS1vcmRlcnMtdGlja2V0cy13aWRnZXRcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wibXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0XCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm15LW9yZGVycy10aWNrZXRzLXdpZGdldFwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsICgpID0+IHtcbnJldHVybiAiLCJpbXBvcnQge1xuICBhdXRoRXJyb3JIYW5kbGVyLFxuICBnZXRSZXF1ZXN0LFxuICBkZWxldGVSZXF1ZXN0LFxuICBjcmVhdGVBY3Rpb24sXG4gIHN0b3BMb2FkaW5nLFxuICBzdGFydExvYWRpbmcsXG4gIHB1dFJlcXVlc3Rcbn0gZnJvbSBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvdXRpbHMvYWN0aW9uc1wiO1xuaW1wb3J0IHBMaW1pdCBmcm9tIFwicC1saW1pdFwiO1xuaW1wb3J0IHsgZ2V0SWRUb2tlbiB9IGZyb20gXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3NlY3VyaXR5L21ldGhvZHNcIjtcbmltcG9ydCBJZFRva2VuVmVyaWZpZXIgZnJvbSBcImlkdG9rZW4tdmVyaWZpZXJcIjtcbmltcG9ydCB7IGdldEFjY2Vzc1Rva2VuU2FmZWx5IH0gZnJvbSBcIi4vdXRpbHMvYXV0aFwiO1xuaW1wb3J0IHtcbiAgRklSU1RfUEFHRSxcbiAgREVGQVVMVF9JVEVNU19QRVJfUEFHRSxcbiAgUFJPTUlTRV9CQVRDSF9MSU1JVCxcbiAgRklGVFlfUEVSX1BBR0Vcbn0gZnJvbSBcIi4vdXRpbHMvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBSRVNFVF9TVEFURSA9IFwiUkVTRVRfU1RBVEVcIjtcbmV4cG9ydCBjb25zdCBSRVNFVF9GSUxURVIgPSBcIlJFU0VUX0ZJTFRFUlwiO1xuZXhwb3J0IGNvbnN0IFNFVF9TVEFURSA9IFwiU0VUX1NUQVRFXCI7XG5cbi8vIE9SREVSUyBDT05TVFNcbmV4cG9ydCBjb25zdCBHRVRfVVNFUl9PUkRFUlMgPSBcIkdFVF9PUkRFUlNcIjtcbmV4cG9ydCBjb25zdCBSRUZVTkRfT1JERVIgPSBcIlJFRlVORF9PUkRFUlwiO1xuZXhwb3J0IGNvbnN0IFNFVF9BQ1RJVkVfT1JERVJfSUQgPSBcIlNFVF9BQ1RJVkVfT1JERVJfSURcIjtcbmV4cG9ydCBjb25zdCBGSUxURVJfVVNFUl9PUkRFUlMgPSBcIkZJTFRFUl9VU0VSX09SREVSU1wiO1xuXG4vLyBUSUNLRVRTIENPTlNUU1xuZXhwb3J0IGNvbnN0IEdFVF9USUNLRVRTID0gXCJHRVRfVElDS0VUU1wiO1xuZXhwb3J0IGNvbnN0IFVQREFURV9USUNLRVQgPSBcIlVQREFURV9USUNLRVRcIjtcbmV4cG9ydCBjb25zdCBSRUNFSVZFX1RJQ0tFVCA9IFwiUkVDRUlWRV9USUNLRVRcIjtcbmV4cG9ydCBjb25zdCBSRU1PVkVfVElDS0VUX0FUVEVOREVFID0gXCJSRU1PVkVfVElDS0VUX0FUVEVOREVFXCI7XG5leHBvcnQgY29uc3QgQVNTSUdOX1RJQ0tFVCA9IFwiQVNTSUdOX1RJQ0tFVFwiO1xuZXhwb3J0IGNvbnN0IFJFRlVORF9USUNLRVQgPSBcIlJFRlVORF9USUNLRVRcIjtcbmV4cG9ydCBjb25zdCBSRVNFTkRfTk9USUZJQ0FUSU9OID0gXCJSRVNFTkRfTk9USUZJQ0FUSU9OXCI7XG5leHBvcnQgY29uc3QgR0VUX1RJQ0tFVFNfQllfT1JERVIgPSBcIkdFVF9USUNLRVRTX0JZX09SREVSXCI7XG5leHBvcnQgY29uc3QgR0VUX1RJQ0tFVFNfQllfT1JERVJfRVJST1IgPSBcIkdFVF9USUNLRVRTX0JZX09SREVSX0VSUk9SXCI7XG5leHBvcnQgY29uc3QgR0VUX09SREVSX1RJQ0tFVF9ERVRBSUxTID0gXCJHRVRfT1JERVJfVElDS0VUX0RFVEFJTFNcIjtcbmV4cG9ydCBjb25zdCBHRVRfVElDS0VUX0RFVEFJTFMgPSBcIkdFVF9USUNLRVRfREVUQUlMU1wiO1xuZXhwb3J0IGNvbnN0IFJFQ0VJVkVfRVhUUkFfUVVFU1RJT05TID0gXCJSRUNFSVZFX0VYVFJBX1FVRVNUSU9OU1wiO1xuZXhwb3J0IGNvbnN0IFRJQ0tFVF9BVFRFTkRFRV9LRVlTID0ge1xuICBlbWFpbDogXCJhdHRlbmRlZV9lbWFpbFwiLFxuICBmaXJzdE5hbWU6IFwiYXR0ZW5kZWVfZmlyc3RfbmFtZVwiLFxuICBsYXN0TmFtZTogXCJhdHRlbmRlZV9sYXN0X25hbWVcIixcbiAgY29tcGFueTogXCJhdHRlbmRlZV9jb21wYW55XCIsXG4gIGRpc2NsYWltZXJBY2NlcHRlZDogXCJkaXNjbGFpbWVyX2FjY2VwdGVkXCIsXG4gIGV4dHJhUXVlc3Rpb25zOiBcImV4dHJhX3F1ZXN0aW9uc1wiXG59O1xuZXhwb3J0IGNvbnN0IFVQREFURV9USUNLRVRTX1JFRlVORF9SRVFVRVNURUQgPVxuICBcIlVQREFURV9USUNLRVRTX1JFRlVORF9SRVFVRVNURURcIjtcblxuLy8gVVNFUiBDT05UU1xuZXhwb3J0IGNvbnN0IFNUQVJUX0xPQURJTkdfSURQX1BST0ZJTEUgPSBcIlNUQVJUX0xPQURJTkdfSURQX1BST0ZJTEVcIjtcbmV4cG9ydCBjb25zdCBTVE9QX0xPQURJTkdfSURQX1BST0ZJTEUgPSBcIlNUT1BfTE9BRElOR19JRFBfUFJPRklMRVwiO1xuZXhwb3J0IGNvbnN0IFVQREFURV9JRFBfUFJPRklMRSA9IFwiVVBEQVRFX0lEUF9QUk9GSUxFXCI7XG5leHBvcnQgY29uc3QgU0VUX1VTRVIgPSBcIlNFVF9VU0VSXCI7XG5cbi8vIFNVTU1JVCBDT05TVFNcbmV4cG9ydCBjb25zdCBTRVRfU1VNTUlUID0gXCJTRVRfU1VNTUlUXCI7XG5leHBvcnQgY29uc3QgR0VUX01BSU5fRVhUUkFfUVVFU1RJT05TID0gXCJHRVRfTUFJTl9FWFRSQV9RVUVTVElPTlNcIjtcbmV4cG9ydCBjb25zdCBSRUNFSVZFX01BUktFVElOR19TRVRUSU5HUyA9IFwiUkVDRUlWRV9NQVJLRVRJTkdfU0VUVElOR1NcIjtcbmV4cG9ydCBjb25zdCBDTEVBUl9NQVJLRVRJTkdfU0VUVElOR1MgPSBcIkNMRUFSX01BUktFVElOR19TRVRUSU5HU1wiO1xuXG5leHBvcnQgY29uc3QgcmVzZXRTdGF0ZSA9ICgpID0+IChkaXNwYXRjaCkgPT4ge1xuICBkaXNwYXRjaChjcmVhdGVBY3Rpb24oUkVTRVRfU1RBVEUpKHt9KSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzZXRGaWx0ZXIgPSAoKSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgZGlzcGF0Y2goY3JlYXRlQWN0aW9uKFJFU0VUX0ZJTFRFUikoe30pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRSZWR1Y2VyU3RhdGUgPSAoc3VtbWl0LCB1c2VyKSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgZGlzcGF0Y2goY3JlYXRlQWN0aW9uKFNFVF9TVEFURSkoeyBzdW1taXQsIHVzZXIgfSkpO1xufTtcblxuLy8gRklMVEVSIC8gU09SVCBDT05TVEFOVFNcbmV4cG9ydCBjb25zdCBGSUxURVJfVkFSX0RBVEUgPSBcIkZJTFRFUl9WQVJfREFURVwiO1xuZXhwb3J0IGNvbnN0IEZJTFRFUl9WQVJfT1JERVJfTlVNQkVSID0gXCJGSUxURVJfVkFSX09SREVSX05VTUJFUlwiO1xuXG4vLyBGSUxURVIvU09SVCBBQ1RJT05TXG5leHBvcnQgY29uc3QgcGFyc2VGaWx0ZXIgPSAoZmlsdGVyT2JqKSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IFtdO1xuICBpZiAoZmlsdGVyT2JqLnR5cGUgPT09IEZJTFRFUl9WQVJfREFURSkge1xuICAgIGZpbHRlci5wdXNoKGAke2ZpbHRlck9iai5uYW1lfVtdJHtmaWx0ZXJPYmoubG93ZXJ9JiYke2ZpbHRlck9iai51cHBlcn1gKTtcbiAgfVxuICBpZiAoZmlsdGVyT2JqLnR5cGUgPT09IEZJTFRFUl9WQVJfT1JERVJfTlVNQkVSKSB7XG4gICAgZmlsdGVyLnB1c2goYCR7ZmlsdGVyT2JqLm5hbWV9PUAke2ZpbHRlck9iai52YWx1ZX1gKTtcbiAgfVxuICByZXR1cm4gZmlsdGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNvcnREaXJlY3Rpb24gPSAoZGlyZWN0aW9uKSA9PlxuICBkaXJlY3Rpb24gPT09IFwiYXNjXCIgPyBcIitcIiA6IFwiLVwiO1xuXG4vLyBPUkRFUlMgQUNUSU9OU1xuZXhwb3J0IGNvbnN0IGdldFVzZXJPcmRlcnMgPVxuICAoe1xuICAgIHBhZ2UgPSBGSVJTVF9QQUdFLFxuICAgIHBlclBhZ2UgPSBERUZBVUxUX0lURU1TX1BFUl9QQUdFLFxuICAgIGZpbHRlciA9IHt9LFxuICAgIHNvcnQgPSB7fVxuICB9KSA9PlxuICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlLCB7IGFwaUJhc2VVcmwgfSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHdpZGdldFN0YXRlOiB7IHN1bW1pdCB9XG4gICAgfSA9IGdldFN0YXRlKCk7XG5cbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuU2FmZWx5KCkuY2F0Y2goKCkgPT5cbiAgICAgIFByb21pc2UucmVqZWN0KClcbiAgICApO1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBvcmRlcjogXCItaWRcIixcbiAgICAgIFwiZmlsdGVyW11cIjogW1wic3RhdHVzPT1QYWlkXCJdLFxuICAgICAgcmVsYXRpb25zOiBcIm5vbmVcIixcbiAgICAgIHBhZ2UsXG4gICAgICBwZXJfcGFnZTogcGVyUGFnZVxuICAgIH07XG5cbiAgICBpZiAoT2JqZWN0LmtleXMoZmlsdGVyKS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzID0gcGFyc2VGaWx0ZXIoZmlsdGVyKTtcbiAgICAgIHBhcmFtc1tcImZpbHRlcltdXCJdID0gWy4uLnBhcmFtc1tcImZpbHRlcltdXCJdLCAuLi5maWx0ZXJzXTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHNvcnQpLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtcy5vcmRlciA9IGAke2dldFNvcnREaXJlY3Rpb24oc29ydC5kaXJlY3Rpb24pfSR7c29ydC5uYW1lfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldFJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKEdFVF9VU0VSX09SREVSUyksXG4gICAgICBgJHthcGlCYXNlVXJsfS9hcGkvdjEvc3VtbWl0cy8ke3N1bW1pdC5pZH0vb3JkZXJzL21lYCxcbiAgICAgIGF1dGhFcnJvckhhbmRsZXJcbiAgICApKHBhcmFtcykoZGlzcGF0Y2gpXG4gICAgICAudGhlbigocGF5bG9hZCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3Qgc2V0QWN0aXZlT3JkZXJJZCA9IChvcmRlcklkKSA9PiBhc3luYyAoZGlzcGF0Y2gpID0+XG4gIGRpc3BhdGNoKGNyZWF0ZUFjdGlvbihTRVRfQUNUSVZFX09SREVSX0lEKShvcmRlcklkKSk7XG5cbi8vIFVTRVIgQUNUSU9OU1xuZXhwb3J0IGNvbnN0IHNldFVzZXIgPSAodXNlcikgPT4gKGRpc3BhdGNoKSA9PlxuICBkaXNwYXRjaChjcmVhdGVBY3Rpb24oU0VUX1VTRVIpKHVzZXIpKTtcblxuLy8gVElDS0VUIEFDVElPTlNcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJUaWNrZXRzID1cbiAgKHsgcGFnZSA9IEZJUlNUX1BBR0UsIHBlclBhZ2UgPSBERUZBVUxUX0lURU1TX1BFUl9QQUdFIH0pID0+XG4gIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdXNlclN0YXRlOiB7IHVzZXJQcm9maWxlIH0sXG4gICAgICBzdW1taXRcbiAgICB9ID0gZ2V0U3RhdGUoKTtcbiAgICBpZiAoIXN1bW1pdCkgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKCgpID0+XG4gICAgICBQcm9taXNlLnJlamVjdCgpXG4gICAgKTtcblxuICAgIGlmICghdXNlclByb2ZpbGUuaWQpIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgZmlsdGVyOiBcInN0YXR1cz09UGFpZFwiLFxuICAgICAgZXhwYW5kOiBcIm9yZGVyLCBvd25lciwgdGlja2V0X3R5cGVcIixcbiAgICAgIG9yZGVyOiBcIi1pZFwiLFxuICAgICAgZmllbGRzOlxuICAgICAgICBcIm9yZGVyLmlkLG9yZGVyLm93bmVyX2ZpcnN0X25hbWUsb3JkZXIub3duZXJfbGFzdF9uYW1lLG9yZGVyLm93bmVyX2VtYWlsLG93bmVyLmZpcnN0X25hbWUsb3duZXIubGFzdF9uYW1lLG93bmVyLnN0YXR1c1wiLFxuICAgICAgcmVsYXRpb25zOiBcIm5vbmVcIixcbiAgICAgIHBhZ2UsXG4gICAgICBwZXJfcGFnZTogcGVyUGFnZVxuICAgIH07XG4gICAgcmV0dXJuIGdldFJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKEdFVF9USUNLRVRTKSxcbiAgICAgIGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzLyR7c3VtbWl0LmlkfS9vcmRlcnMvYWxsL3RpY2tldHMvbWVgLFxuICAgICAgYXV0aEVycm9ySGFuZGxlclxuICAgICkocGFyYW1zKShkaXNwYXRjaClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgZ2V0VGlja2V0c0J5T3JkZXIgPVxuICAoeyBvcmRlcklkLCBwYWdlID0gRklSU1RfUEFHRSwgcGVyUGFnZSA9IERFRkFVTFRfSVRFTVNfUEVSX1BBR0UgfSkgPT5cbiAgYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSwgeyBhcGlCYXNlVXJsIH0pID0+IHtcbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKCgpID0+XG4gICAgICBQcm9taXNlLnJlamVjdCgpXG4gICAgKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBleHBhbmQ6XG4gICAgICAgIFwicmVmdW5kX3JlcXVlc3RzLG93bmVyLG93bmVyLmV4dHJhX3F1ZXN0aW9ucyxiYWRnZSxiYWRnZS5mZWF0dXJlcyx0aWNrZXRfdHlwZVwiLFxuICAgICAgb3JkZXI6IFwiK2lkXCIsXG4gICAgICBwYWdlLFxuICAgICAgcGVyX3BhZ2U6IHBlclBhZ2VcbiAgICB9O1xuICAgIHJldHVybiBnZXRSZXF1ZXN0KFxuICAgICAgbnVsbCxcbiAgICAgIGNyZWF0ZUFjdGlvbihHRVRfVElDS0VUU19CWV9PUkRFUiksXG4gICAgICBgJHthcGlCYXNlVXJsfS9hcGkvdjEvc3VtbWl0cy9hbGwvb3JkZXJzLyR7b3JkZXJJZH0vdGlja2V0c2AsXG4gICAgICBhdXRoRXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoKVxuICAgICAgLnRoZW4oKHBheWxvYWQpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgICAgZGlzcGF0Y2goY3JlYXRlQWN0aW9uKEdFVF9USUNLRVRTX0JZX09SREVSX0VSUk9SKSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCByZXNlbmROb3RpZmljYXRpb24gPVxuICAodGlja2V0KSA9PlxuICBhc3luYyAoZGlzcGF0Y2gsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKCgpID0+XG4gICAgICBQcm9taXNlLnJlamVjdCgpXG4gICAgKTtcblxuICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gdGlja2V0O1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuXG4gICAgY29uc3Qgb3JkZXJJZCA9IHRpY2tldC5vcmRlciA/IHRpY2tldC5vcmRlci5pZCA6IHRpY2tldC5vcmRlcl9pZDtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW5cbiAgICB9O1xuXG4gICAgcmV0dXJuIHB1dFJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKFJFU0VORF9OT1RJRklDQVRJT04pLFxuICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvYWxsL29yZGVycy8ke29yZGVySWR9L3RpY2tldHMvJHt0aWNrZXQuaWR9L2F0dGVuZGVlL3JlaW52aXRlYCxcbiAgICAgIHsgbWVzc2FnZSB9LFxuICAgICAgYXV0aEVycm9ySGFuZGxlclxuICAgICkocGFyYW1zKShkaXNwYXRjaClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgcmVmdW5kVGlja2V0ID1cbiAgKHsgdGlja2V0IH0pID0+XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlLCB7IGFwaUJhc2VVcmwgfSkgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW5TYWZlbHkoKS5jYXRjaCgoKSA9PlxuICAgICAgUHJvbWlzZS5yZWplY3QoKVxuICAgICk7XG5cbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG5cbiAgICBjb25zdCBvcmRlcklkID0gdGlja2V0Lm9yZGVyID8gdGlja2V0Lm9yZGVyLmlkIDogdGlja2V0Lm9yZGVyX2lkO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIGV4cGFuZDogXCJyZWZ1bmRfcmVxdWVzdHMsdGlja2V0X3R5cGVcIixcbiAgICAgIGZpZWxkczogXCJyZWZ1bmRfcmVxdWVzdHMuc3RhdHVzXCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlbGV0ZVJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKFJFRlVORF9USUNLRVQpLFxuICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvYWxsL29yZGVycy8ke29yZGVySWR9L3RpY2tldHMvJHt0aWNrZXQuaWR9L3JlZnVuZGAsXG4gICAgICB7fSxcbiAgICAgIGF1dGhFcnJvckhhbmRsZXJcbiAgICApKHBhcmFtcykoZGlzcGF0Y2gpXG4gICAgICAudGhlbigocGF5bG9hZCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgcmVmdW5kQnVsa1RpY2tldHMgPVxuICAoeyB0aWNrZXRzIH0pID0+XG4gIGFzeW5jIChkaXNwYXRjaCkgPT4ge1xuICAgIGNvbnN0IGxpbWl0ID0gcExpbWl0KFBST01JU0VfQkFUQ0hfTElNSVQpO1xuICAgIGNvbnN0IGFsbFJlZnVuZFRpY2tldENhbGxzID0gdGlja2V0cy5tYXAoKHRpY2tldCkgPT5cbiAgICAgIGxpbWl0KCgpID0+IGRpc3BhdGNoKHJlZnVuZFRpY2tldCh7IHRpY2tldCB9KSkpXG4gICAgKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoWy4uLmFsbFJlZnVuZFRpY2tldENhbGxzXSlcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc3VjY2Vzc2Z1bGx5UmVxdWVzdGVkID0gcmVzXG4gICAgICAgICAgLmZpbHRlcigocikgPT4gci5yZXNwb25zZT8ucmVmdW5kX3JlcXVlc3RzPy5sZW5ndGgpXG4gICAgICAgICAgLm1hcCgocikgPT4gci5yZXNwb25zZSk7XG4gICAgICAgIHJldHVybiBzdWNjZXNzZnVsbHlSZXF1ZXN0ZWQ7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiBlKTtcbiAgfTtcblxuLy8gdXBkYXRlIHRoZSB0aWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Vzc2Z1bGx5IHJlZnVuZGVkXG5leHBvcnQgY29uc3QgdXBkYXRlVGlja2V0c1JlZnVuZFJlcXVlc3RlZCA9XG4gICh0aWNrZXRzUmVmdW5kUmVxdWVzdGVkKSA9PiAoZGlzcGF0Y2gpID0+XG4gICAgZGlzcGF0Y2goXG4gICAgICBjcmVhdGVBY3Rpb24oVVBEQVRFX1RJQ0tFVFNfUkVGVU5EX1JFUVVFU1RFRCkodGlja2V0c1JlZnVuZFJlcXVlc3RlZClcbiAgICApO1xuXG4vLyBTVU1NSVQgQUNUSU9OU1xuXG5leHBvcnQgY29uc3QgZ2V0RXh0cmFRdWVzdGlvbnMgPVxuICAoYXR0ZW5kZWVJZCkgPT5cbiAgYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSwgeyBhcGlCYXNlVXJsIH0pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB3aWRnZXRTdGF0ZTogeyBzdW1taXQgfVxuICAgIH0gPSBnZXRTdGF0ZSgpO1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKCgpID0+XG4gICAgICBQcm9taXNlLnJlamVjdCgpXG4gICAgKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBwZXJfcGFnZTogRklGVFlfUEVSX1BBR0UsXG4gICAgICBleHBhbmQ6IFwiKnN1Yl9xdWVzdGlvbl9ydWxlcywqc3ViX3F1ZXN0aW9uLCp2YWx1ZXNcIixcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBcImZpbHRlcltdXCI6IFwidGlja2V0c19leGNsdWRlX2luYWN0aXZlcz09dHJ1ZVwiXG4gICAgfTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXQuaWR9L2F0dGVuZGVlcy8ke2F0dGVuZGVlSWR9L2FsbG93ZWQtZXh0cmEtcXVlc3Rpb25zYDtcblxuICAgIHJldHVybiBnZXRSZXF1ZXN0KFxuICAgICAgbnVsbCxcbiAgICAgIGNyZWF0ZUFjdGlvbihSRUNFSVZFX0VYVFJBX1FVRVNUSU9OUyksXG4gICAgICBlbmRwb2ludCxcbiAgICAgIGF1dGhFcnJvckhhbmRsZXJcbiAgICApKHBhcmFtcykoZGlzcGF0Y2gpLnRoZW4oKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBnZXRUaWNrZXQgPVxuICAodGlja2V0SWQsIG9yZGVySWQpID0+XG4gIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKCgpID0+XG4gICAgICBQcm9taXNlLnJlamVjdCgpXG4gICAgKTtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBleHBhbmQ6XG4gICAgICAgIFwib3duZXIsb3duZXIuZXh0cmFfcXVlc3Rpb25zLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbix0aWNrZXRfdHlwZSxvcmRlclwiLFxuICAgICAgcmVsYXRpb25zOiBcIm93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5ub25lXCIsXG4gICAgICBmaWVsZHM6XG4gICAgICAgIFwib3duZXIuZXh0cmFfcXVlc3Rpb25zLnF1ZXN0aW9uLmlkLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5uYW1lLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi50eXBlXCJcbiAgICB9O1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHthcGlCYXNlVXJsfS9hcGkvdjEvc3VtbWl0cy9hbGwvb3JkZXJzLyR7b3JkZXJJZH0vdGlja2V0cy8ke3RpY2tldElkfWA7XG5cbiAgICByZXR1cm4gZ2V0UmVxdWVzdChcbiAgICAgIG51bGwsXG4gICAgICBjcmVhdGVBY3Rpb24oUkVDRUlWRV9USUNLRVQpLFxuICAgICAgZW5kcG9pbnQsXG4gICAgICBhdXRoRXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgIH0pO1xuICB9O1xuXG5jb25zdCBub3JtYWxpemVUaWNrZXQgPSAoZW50aXR5KSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFbnRpdHkgPSB7IC4uLmVudGl0eSB9O1xuXG4gIGlmICghZW50aXR5LmF0dGVuZGVlX2NvbXBhbnkuaWQpIHtcbiAgICBub3JtYWxpemVkRW50aXR5LmF0dGVuZGVlX2NvbXBhbnkgPSBlbnRpdHkuYXR0ZW5kZWVfY29tcGFueTtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgbm9ybWFsaXplZEVudGl0eS5hdHRlbmRlZV9jb21wYW55O1xuICAgIG5vcm1hbGl6ZWRFbnRpdHkuYXR0ZW5kZWVfY29tcGFueV9pZCA9IGVudGl0eS5hdHRlbmRlZV9jb21wYW55LmlkO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRFbnRpdHk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVmcmVzaFByb2ZpbGUgPVxuICAoZGF0YSwgY29tcGFueSwgdGlja2V0T3duZXIpID0+XG4gIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgdXBkYXRlUHJvZmlsZSB9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgd2lkZ2V0U3RhdGU6IHsgdXNlciB9XG4gICAgfSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgeyB1c2VyUHJvZmlsZSB9ID0gdXNlcjtcblxuICAgIC8vIGVtYWlsIHNob3VsZCBtYXRjaCAoIG9ubHkgdXBkYXRlIG15IHByb2ZpbGUgaXMgdGlja2V0IGJlbG9uZ3MgdG8gbWUhKVxuICAgIC8vIGFuZCBpZiB0aGUgdGlja2V0IGRvZXNuJ3QgaGF2ZSBhIG1hbmFnZXJcbiAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGNoYW5nZXMgaW4gdGhlIHRpY2tldCBkYXRhIHRvIHVwZGF0ZSB0aGUgcHJvZmlsZVxuICAgIGNvbnN0IHtcbiAgICAgIGF0dGVuZGVlX2VtYWlsLFxuICAgICAgYXR0ZW5kZWVfZmlyc3RfbmFtZSxcbiAgICAgIGF0dGVuZGVlX2xhc3RfbmFtZSxcbiAgICAgIGF0dGVuZGVlX2NvbXBhbnlcbiAgICB9ID0gZGF0YTtcbiAgICBjb25zdCBoYXNNYW5hZ2VyID0gdGlja2V0T3duZXI/Lm1hbmFnZXI/LmlkIHx8IHRpY2tldE93bmVyPy5tYW5hZ2VyX2lkO1xuICAgIGNvbnN0IGl0c01lID0gdXNlclByb2ZpbGUuZW1haWwgPT09IGF0dGVuZGVlX2VtYWlsO1xuICAgIGNvbnN0IHByb2ZpbGVDaGFuZ2VkID1cbiAgICAgIGF0dGVuZGVlX2NvbXBhbnkubmFtZSAhPT0gY29tcGFueSB8fFxuICAgICAgYXR0ZW5kZWVfZmlyc3RfbmFtZSAhPT0gdXNlclByb2ZpbGUuZmlyc3RfbmFtZSB8fFxuICAgICAgYXR0ZW5kZWVfbGFzdF9uYW1lICE9PSB1c2VyUHJvZmlsZS5sYXN0X25hbWU7XG5cbiAgICBpZiAoaXRzTWUgJiYgIWhhc01hbmFnZXIgJiYgcHJvZmlsZUNoYW5nZWQpIHtcbiAgICAgIGNvbnN0IG5ld1Byb2ZpbGUgPSB7XG4gICAgICAgIGZpcnN0X25hbWU6IGF0dGVuZGVlX2ZpcnN0X25hbWUsXG4gICAgICAgIGxhc3RfbmFtZTogYXR0ZW5kZWVfbGFzdF9uYW1lLFxuICAgICAgICBjb21wYW55OiBhdHRlbmRlZV9jb21wYW55Lm5hbWUgfHwgYXR0ZW5kZWVfY29tcGFueVxuICAgICAgfTtcblxuICAgICAgLy8gdGhpcyBpcyBhIGNhbGxiYWNrIG1ldGhvZCB0aGF0IHVwZGF0ZXMgdXNlclByb2ZpbGUgaW4gQVBJIGFuZCBldmVudC1zaXRlXG4gICAgICB1cGRhdGVQcm9maWxlKG5ld1Byb2ZpbGUpO1xuICAgIH1cbiAgfTtcblxuZXhwb3J0IGNvbnN0IHNhdmVUaWNrZXREZXRhaWxzID1cbiAgKHRpY2tldCwgYW5zd2VycykgPT5cbiAgYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSwgeyBhcGlCYXNlVXJsIH0pID0+IHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuU2FmZWx5KCkuY2F0Y2goUHJvbWlzZS5yZWplY3QpO1xuXG4gICAgaWYgKCFhY2Nlc3NUb2tlbikgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG5cbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgZXhwYW5kOlxuICAgICAgICBcInJlZnVuZF9yZXF1ZXN0cyxvd25lcixvd25lci5leHRyYV9xdWVzdGlvbnMsb3duZXIuZXh0cmFfcXVlc3Rpb25zLnF1ZXN0aW9uLGJhZGdlLGJhZGdlLmZlYXR1cmVzLHRpY2tldF90eXBlLG9yZGVyXCIsXG4gICAgICByZWxhdGlvbnM6IFwib3duZXIuZXh0cmFfcXVlc3Rpb25zLnF1ZXN0aW9uLm5vbmVcIixcbiAgICAgIGZpZWxkczpcbiAgICAgICAgXCJvd25lci5leHRyYV9xdWVzdGlvbnMucXVlc3Rpb24uaWQsb3duZXIuZXh0cmFfcXVlc3Rpb25zLnF1ZXN0aW9uLm5hbWUsb3duZXIuZXh0cmFfcXVlc3Rpb25zLnF1ZXN0aW9uLnR5cGVcIlxuICAgIH07XG5cbiAgICBjb25zdCBpZFRva2VuID0gZ2V0SWRUb2tlbigpO1xuICAgIGxldCBjb21wYW55ID0gXCJcIjtcbiAgICBpZiAoaWRUb2tlbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZpZXIgPSBuZXcgSWRUb2tlblZlcmlmaWVyKCk7XG4gICAgICAgIGNvbnN0IGp3dCA9IHZlcmlmaWVyLmRlY29kZShpZFRva2VuKTtcbiAgICAgICAgY29tcGFueSA9IGp3dC5wYXlsb2FkLmNvbXBhbnk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3JcIiwgZSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRpdHkgPSBub3JtYWxpemVUaWNrZXQoYW5zd2Vycyk7XG5cbiAgICByZXR1cm4gcHV0UmVxdWVzdChcbiAgICAgIG51bGwsXG4gICAgICBjcmVhdGVBY3Rpb24oVVBEQVRFX1RJQ0tFVCksXG4gICAgICBgJHthcGlCYXNlVXJsfS9hcGkvdjEvc3VtbWl0cy9hbGwvb3JkZXJzL2FsbC90aWNrZXRzLyR7dGlja2V0LmlkfWAsXG4gICAgICBub3JtYWxpemVkRW50aXR5LFxuICAgICAgYXV0aEVycm9ySGFuZGxlclxuICAgICkocGFyYW1zKShkaXNwYXRjaClcbiAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2gocmVmcmVzaFByb2ZpbGUoYW5zd2VycywgY29tcGFueSwgdGlja2V0Lm93bmVyKSk7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9KTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkF0dGVuZGVlID1cbiAgKG9yZGVySWQsIHRpY2tldElkLCBhdHRlbmRlZV9lbWFpbCwgbWVzc2FnZSA9IG51bGwpID0+XG4gIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKFByb21pc2UucmVqZWN0KTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7IGF0dGVuZGVlX2VtYWlsIH07XG4gICAgaWYgKG1lc3NhZ2UpIHBheWxvYWQubWVzc2FnZSA9IG1lc3NhZ2U7XG5cbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBleHBhbmQ6XG4gICAgICAgIFwib3duZXIsb3duZXIuZXh0cmFfcXVlc3Rpb25zLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbix0aWNrZXRfdHlwZSxvcmRlclwiLFxuICAgICAgcmVsYXRpb25zOiBcIm93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5ub25lXCIsXG4gICAgICBmaWVsZHM6XG4gICAgICAgIFwib3duZXIuZXh0cmFfcXVlc3Rpb25zLnF1ZXN0aW9uLmlkLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5uYW1lLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi50eXBlXCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHB1dFJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKEFTU0lHTl9USUNLRVQpLFxuICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvYWxsL29yZGVycy8ke29yZGVySWR9L3RpY2tldHMvJHt0aWNrZXRJZH0vYXR0ZW5kZWVgLFxuICAgICAgcGF5bG9hZCxcbiAgICAgIGF1dGhFcnJvckhhbmRsZXJcbiAgICApKHBhcmFtcykoZGlzcGF0Y2gpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCByZWFzc2lnblRpY2tldCA9XG4gIChvcmRlcklkLCB0aWNrZXRJZCwgZW1haWwsIG1lc3NhZ2UpID0+XG4gIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKFByb21pc2UucmVqZWN0KTtcblxuICAgIGlmICghYWNjZXNzVG9rZW4pIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIGV4cGFuZDogXCJvcmRlciwgb3duZXIsIG93bmVyLmV4dHJhX3F1ZXN0aW9ucywgb3JkZXIuc3VtbWl0XCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlbGV0ZVJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKFJFTU9WRV9USUNLRVRfQVRURU5ERUUpLFxuICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvYWxsL29yZGVycy8ke29yZGVySWR9L3RpY2tldHMvJHt0aWNrZXRJZH0vYXR0ZW5kZWVgLFxuICAgICAge30sXG4gICAgICBhdXRoRXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoKS50aGVuKCgpID0+XG4gICAgICBkaXNwYXRjaChhc3NpZ25BdHRlbmRlZShvcmRlcklkLCB0aWNrZXRJZCwgZW1haWwsIG1lc3NhZ2UpKVxuICAgICk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBzYXZlRXh0cmFRdWVzdGlvbnMgPVxuICAodGlja2V0LCBhbnN3ZXJzKSA9PlxuICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlLCB7IGFwaUJhc2VVcmwgfSkgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW5TYWZlbHkoKS5jYXRjaChQcm9taXNlLnJlamVjdCk7XG5cbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBleHBhbmQ6XG4gICAgICAgIFwicmVmdW5kX3JlcXVlc3RzLG93bmVyLG93bmVyLmV4dHJhX3F1ZXN0aW9ucyxvd25lci5leHRyYV9xdWVzdGlvbnMucXVlc3Rpb24sYmFkZ2UsYmFkZ2UuZmVhdHVyZXMsdGlja2V0X3R5cGUsb3JkZXJcIixcbiAgICAgIHJlbGF0aW9uczogXCJvd25lci5leHRyYV9xdWVzdGlvbnMucXVlc3Rpb24ubm9uZVwiLFxuICAgICAgZmllbGRzOlxuICAgICAgICBcIm93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5pZCxvd25lci5leHRyYV9xdWVzdGlvbnMucXVlc3Rpb24ubmFtZSxvd25lci5leHRyYV9xdWVzdGlvbnMucXVlc3Rpb24udHlwZVwiXG4gICAgfTtcblxuICAgIHJldHVybiBwdXRSZXF1ZXN0KFxuICAgICAgbnVsbCxcbiAgICAgIGNyZWF0ZUFjdGlvbihVUERBVEVfVElDS0VUKSxcbiAgICAgIGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzL2FsbC9vcmRlcnMvYWxsL3RpY2tldHMvJHt0aWNrZXQuaWR9YCxcbiAgICAgIGFuc3dlcnMsXG4gICAgICBhdXRoRXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoKVxuICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSk7XG4gIH07XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlRm9ybWlrIH0gZnJvbSBcImZvcm1pa1wiO1xuaW1wb3J0IEV4dHJhUXVlc3Rpb25zRmllbGRzIGZyb20gXCIuLi9FeHRyYVF1ZXN0aW9uc0ZpZWxkc1wiO1xuaW1wb3J0IEZvcm1Gb290ZXIgZnJvbSBcIi4uL0Zvcm1Gb290ZXJcIjtcbmltcG9ydCB1c2VTY3JvbGxUb0Vycm9yIGZyb20gXCIuLi8uLi9ob29rcy91c2VTY3JvbGxUb0Vycm9yXCI7XG5pbXBvcnQgUmVnaXN0cmF0aW9uRGlzY2xhaW1lciBmcm9tIFwiLi4vVGlja2V0RGV0YWlsL2NvbXBvbmVudHMvUmVnaXN0cmF0aW9uRGlzY2xhaW1lci9SZWdpc3RyYXRpb25EaXNjbGFpbWVyXCI7XG5pbXBvcnQgeyBidWlsZFZhbGlkYXRpb25TY2hlbWEsIHBhcnNlQW5zd2VycyB9IGZyb20gXCIuLi8uLi91dGlscy90aWNrZXRVdGlsc1wiO1xuXG5jb25zdCBBc3NpZ25FUUZvcm0gPSAoe1xuICB0aWNrZXQsXG4gIHN1bW1pdCxcbiAgZXh0cmFRdWVzdGlvbnMsXG4gIG9uU3VibWl0LFxuICBvbkNsb3NlXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICBjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWsoe1xuICAgIGluaXRpYWxWYWx1ZXM6IHBhcnNlQW5zd2VycyhcbiAgICAgIHRpY2tldC5vd25lcixcbiAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAge30sXG4gICAgICBudWxsLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZSxcbiAgICAgIHRydWVcbiAgICApLFxuICAgIHZhbGlkYXRpb25TY2hlbWE6IGJ1aWxkVmFsaWRhdGlvblNjaGVtYShcbiAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZSxcbiAgICAgIHN1bW1pdC5yZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9tYW5kYXRvcnlcbiAgICApLFxuICAgIG9uU3VibWl0OiAodmFsdWVzKSA9PiB7XG4gICAgICBjb25zdCByZWxldmFudEFuc3dlcnMgPSBwYXJzZUFuc3dlcnMoXG4gICAgICAgIHRpY2tldC5vd25lcixcbiAgICAgICAgZXh0cmFRdWVzdGlvbnMsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICB0cnVlLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgcmV0dXJuIG9uU3VibWl0KHJlbGV2YW50QW5zd2Vycyk7XG4gICAgfSxcbiAgICBlbmFibGVSZWluaXRpYWxpemU6IHRydWVcbiAgfSk7XG5cbiAgLy8gU0NST0xMIFRPIEVSUk9SXG4gIHVzZVNjcm9sbFRvRXJyb3IoZm9ybWlrLCBcInJlYXNzaWduRHJhd2VyXCIpO1xuXG4gIGlmIChleHRyYVF1ZXN0aW9ucz8ubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gKFxuICAgIDxmb3JtIG9uU3VibWl0PXtmb3JtaWsuaGFuZGxlU3VibWl0fSBub1ZhbGlkYXRlPlxuICAgICAgPEJveD5cbiAgICAgICAgPEV4dHJhUXVlc3Rpb25zRmllbGRzIGV4dHJhUXVlc3Rpb25zPXtleHRyYVF1ZXN0aW9uc30gZm9ybWlrPXtmb3JtaWt9IC8+XG4gICAgICAgIHtzdW1taXQucmVnaXN0cmF0aW9uX2Rpc2NsYWltZXJfY29udGVudCAmJiAoXG4gICAgICAgICAgPFJlZ2lzdHJhdGlvbkRpc2NsYWltZXJcbiAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgICAgZGlzY2xhaW1lcj17c3VtbWl0LnJlZ2lzdHJhdGlvbl9kaXNjbGFpbWVyX2NvbnRlbnR9XG4gICAgICAgICAgICBpc1JlcXVpcmVkPXtzdW1taXQucmVnaXN0cmF0aW9uX2Rpc2NsYWltZXJfbWFuZGF0b3J5fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L0JveD5cbiAgICAgIDxGb3JtRm9vdGVyXG4gICAgICAgIHNhdmVMYWJlbD17dChcInRpY2tldF9hc3NpZ25fZXEuc2F2ZVwiKX1cbiAgICAgICAgY2FuY2VsTGFiZWw9e3QoXCJ0aWNrZXRfYXNzaWduX2VxLmNhbmNlbFwiKX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Zvcm1pay5pc1N1Ym1pdHRpbmd9XG4gICAgICAvPlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cbkFzc2lnbkVRRm9ybS5wcm9wVHlwZXMgPSB7XG4gIHRpY2tldDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBzdW1taXQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZXh0cmFRdWVzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBvblN1Ym1pdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQXNzaWduRVFGb3JtO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IENvbnRlbnRDb3B5SWNvbiBmcm9tIFwiQG11aS9pY29ucy1tYXRlcmlhbC9Db250ZW50Q29weVwiO1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBNSUxMSVNFQ19UT19TRUMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5cbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgZGVmYXVsdFdpZHRoID0gOTA7XG5cbmNvbnN0IENvcHlUZXh0ID0gKHtcbiAgdGV4dCxcbiAgdG9vbHRpcFRleHQsXG4gIGhpZGVDb3B5ID0gZmFsc2UsXG4gIHRydW5jYXRlZCA9IHRydWUsXG4gIHJldmVyc2VkID0gZmFsc2UsXG4gIHdpZHRoID0gZGVmYXVsdFdpZHRoXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgdG9vbHRpcFRleHRUb1VzZSA9IHRvb2x0aXBUZXh0IHx8IHQoXCJnZW5lcmFsLmNvcHlfdG9fY2xpcGJvYXJkXCIpO1xuICBjb25zdCBbdG9vbHRpcCwgc2V0VG9vbHRpcF0gPSBSZWFjdC51c2VTdGF0ZSh0b29sdGlwVGV4dFRvVXNlKTtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IGAke3RydW5jYXRlZCAmJiBzdHlsZXMudHJ1bmNhdGVkfSAke1xuICAgIHJldmVyc2VkICYmIHN0eWxlcy5yZXZlcnNlZFxuICB9YDtcblxuICBjb25zdCBoYW5kbGVDb3B5ID0gKCkgPT4ge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpO1xuICAgIHNldFRvb2x0aXAodChcImdlbmVyYWwuY29waWVkXCIpKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFRvb2x0aXAodG9vbHRpcFRleHRUb1VzZSk7XG4gICAgfSwgTUlMTElTRUNfVE9fU0VDKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e2NsYXNzTmFtZXN9IHN0eWxlPXt7IHdpZHRoIH19PlxuICAgICAgICB7dGV4dH1cbiAgICAgIDwvc3Bhbj5cbiAgICAgIHshaGlkZUNvcHkgJiYgKFxuICAgICAgICA8VG9vbHRpcCB0aXRsZT17dG9vbHRpcH0+XG4gICAgICAgICAgPENvbnRlbnRDb3B5SWNvblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY29weUljb259XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVDb3B5fVxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjb3B5LW51bWJlci1idXR0b25cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5Db3B5VGV4dC5wcm9wVHlwZXMgPSB7XG4gIHRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRvb2x0aXBUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBoaWRlQ29weTogUHJvcFR5cGVzLmJvb2wsXG4gIHRydW5jYXRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHJldmVyc2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgd2lkdGg6IFByb3BUeXBlcy5udW1iZXJcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvcHlUZXh0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dDb250ZW50VGV4dCxcbiAgRGlhbG9nVGl0bGVcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcblxuY29uc3QgQ3VzdG9tRGlhbG9nID0gKHsgb3Blbiwgb25DbG9zZSwgdGl0bGUsIGRlc2NyaXB0aW9uIH0pID0+IChcbiAgPERpYWxvZ1xuICAgIG9wZW49e29wZW59XG4gICAgb25DbG9zZT17b25DbG9zZX1cbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJhbGVydC1kaWFsb2ctdGl0bGVcIlxuICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIlxuICA+XG4gICAgPERpYWxvZ1RpdGxlIGlkPVwiYWxlcnQtZGlhbG9nLXRpdGxlXCI+e3RpdGxlfTwvRGlhbG9nVGl0bGU+XG4gICAgPERpYWxvZ0NvbnRlbnQ+XG4gICAgICA8RGlhbG9nQ29udGVudFRleHQgaWQ9XCJhbGVydC1kaWFsb2ctZGVzY3JpcHRpb25cIj5cbiAgICAgICAge2Rlc2NyaXB0aW9ufVxuICAgICAgPC9EaWFsb2dDb250ZW50VGV4dD5cbiAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gIDwvRGlhbG9nPlxuKTtcblxuQ3VzdG9tRGlhbG9nLnByb3BUeXBlcyA9IHtcbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGVzY3JpcHRpb246IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbURpYWxvZztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9zdHlsZXNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxubGV0IGRhcmtDb2xvciA9IFwiXCI7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyBHZXQgdGhlIHJvb3QgZWxlbWVudFxuICBjb25zdCByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIC8vIFJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgQ1NTIHZhcmlhYmxlXG4gIGRhcmtDb2xvciA9IGdldENvbXB1dGVkU3R5bGUocm9vdCkuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICBcIi0tY29sb3JfYmFja2dyb3VuZF9kYXJrXCJcbiAgKTtcbn1cblxuY29uc3QgdGhlbWUgPSBjcmVhdGVUaGVtZSh7XG4gIHBhbGV0dGU6IHtcbiAgICBwcmltYXJ5OiB7XG4gICAgICBtYWluOiBkYXJrQ29sb3JcbiAgICB9XG4gIH1cbn0pO1xuXG5jb25zdCBDdXN0b21UaGVtZSA9ICh7IGNoaWxkcmVuIH0pID0+IChcbiAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT57Y2hpbGRyZW59PC9UaGVtZVByb3ZpZGVyPlxuKTtcblxuQ3VzdG9tVGhlbWUucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tVGhlbWU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUhlbHBlclRleHQsXG4gIEZvcm1MYWJlbFxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgZ2V0TGFiZWwsIHRvU2x1ZyB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IENoZWNrYm94TGlzdFF1ZXN0aW9uRmllbGQgPSAoe1xuICBxdWVzdGlvbixcbiAgcXVlc3Rpb25DbGFzc05hbWUgPSBcIlwiLFxuICBpc0Rpc2FibGVkID0gZmFsc2UsXG4gIGNoaWxkcmVuLFxuICB2YWx1ZSxcbiAgb25DaGFuZ2UsXG4gIHNldEZpZWxkVmFsdWUsXG4gIGVycm9yLFxuICBoZWxwZXJUZXh0LFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uU2x1ZyA9IHRvU2x1ZyhxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbi5pZCk7XG4gIGNvbnN0IHF1ZXN0aW9uTGFiZWwgPSBnZXRMYWJlbChxdWVzdGlvbik7XG4gIGNvbnN0IGlzUmVxdWlyZWQgPSBxdWVzdGlvbi5tYW5kYXRvcnk7XG4gIGNvbnN0IHF1ZXN0aW9uTWF4VmFsdWVzID0gcXVlc3Rpb24ubWF4X3NlbGVjdGVkX3ZhbHVlcztcblxuICBjb25zdCBxdWVzdGlvbk9wdGlvbnMgPVxuICAgIHF1ZXN0aW9uLnZhbHVlcz8ubWFwKCh2YWwpID0+ICh7XG4gICAgICBsYWJlbDogdmFsLmxhYmVsLFxuICAgICAgdmFsdWU6IHZhbC5pZC50b1N0cmluZygpXG4gICAgfSkpIHx8IFtdO1xuXG4gIGNvbnN0IGhhbmRsZUNoZWNrYm94TGlzdENoYW5nZSA9IChjaGVja2VkLCB2YWwpID0+IHtcbiAgICBjb25zdCBjdXJyZW50QW5zID0gdmFsdWUgfHwgW107XG4gICAgY29uc3QgbWF4U2VsZWN0aW9uUmVhY2hlZCA9IGN1cnJlbnRBbnMubGVuZ3RoID09PSBxdWVzdGlvbk1heFZhbHVlcztcbiAgICBsZXQgbmV3VmFsdWU7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgbmV3VmFsdWUgPSBtYXhTZWxlY3Rpb25SZWFjaGVkID8gY3VycmVudEFucyA6IFsuLi5jdXJyZW50QW5zLCB2YWxdO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IGN1cnJlbnRBbnMuZmlsdGVyKCh2KSA9PiB2ICE9PSB2YWwpO1xuICAgIH1cblxuICAgIHNldEZpZWxkVmFsdWUocXVlc3Rpb25TbHVnLCBuZXdWYWx1ZSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBrZXk9e3F1ZXN0aW9uU2x1Z31cbiAgICAgIGlkPXtgJHtxdWVzdGlvblNsdWd9X2NvbnRhaW5lcmB9XG4gICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uQ2xhc3NOYW1lfVxuICAgID5cbiAgICAgIDxGb3JtQ29udHJvbFxuICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICA+XG4gICAgICAgIDxGb3JtTGFiZWw+e3F1ZXN0aW9uTGFiZWx9PC9Gb3JtTGFiZWw+XG4gICAgICAgIHtlcnJvciAmJiA8Rm9ybUhlbHBlclRleHQ+e2hlbHBlclRleHQgPz8gXCIgXCJ9PC9Gb3JtSGVscGVyVGV4dD59XG4gICAgICAgIDxGb3JtR3JvdXA+XG4gICAgICAgICAge3F1ZXN0aW9uT3B0aW9ucy5tYXAoKG9wKSA9PiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBrZXk9e29wLmxhYmVsfVxuICAgICAgICAgICAgICBuYW1lPXtxdWVzdGlvblNsdWd9XG4gICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17dmFsdWU/LmluY2x1ZGVzKG9wLnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXYpID0+XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNoZWNrYm94TGlzdENoYW5nZShldi50YXJnZXQuY2hlY2tlZCwgb3AudmFsdWUpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXByb3BzLW5vLXNwcmVhZGluZyAqL1xuICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYWJlbD17b3AubGFiZWx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbkNoZWNrYm94TGlzdFF1ZXN0aW9uRmllbGQucHJvcFR5cGVzID0ge1xuICBxdWVzdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLmFycmF5LFxuICBxdWVzdGlvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIHNldEZpZWxkVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIGhlbHBlclRleHQ6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94TGlzdFF1ZXN0aW9uRmllbGQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1IZWxwZXJUZXh0XG59IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgUmF3SFRNTCBmcm9tIFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi9jb21wb25lbnRzL3Jhdy1odG1sXCI7XG5pbXBvcnQgeyBnZXRMYWJlbCwgdG9TbHVnIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgQ2hlY2tib3hRdWVzdGlvbkZpZWxkID0gKHtcbiAgcXVlc3Rpb24sXG4gIHF1ZXN0aW9uQ2xhc3NOYW1lID0gXCJcIixcbiAgaXNEaXNhYmxlZCA9IGZhbHNlLFxuICBjaGlsZHJlbixcbiAgdmFsdWUsXG4gIGVycm9yLFxuICBoZWxwZXJUZXh0LFxuICBzZXRGaWVsZFZhbHVlLFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uU2x1ZyA9IHRvU2x1ZyhxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbi5pZCk7XG4gIGNvbnN0IHF1ZXN0aW9uTGFiZWwgPSBnZXRMYWJlbChxdWVzdGlvbik7XG4gIGNvbnN0IGlzUmVxdWlyZWQgPSBxdWVzdGlvbi5tYW5kYXRvcnk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBrZXk9e3F1ZXN0aW9uU2x1Z31cbiAgICAgIGlkPXtgJHtxdWVzdGlvblNsdWd9X2NvbnRhaW5lcmB9XG4gICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uQ2xhc3NOYW1lfVxuICAgID5cbiAgICAgIDxGb3JtQ29udHJvbCBmdWxsV2lkdGggZXJyb3I9e2Vycm9yfT5cbiAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBuYW1lPXtxdWVzdGlvblNsdWd9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9eyEhdmFsdWV9XG4gICAgICAgICAgICAgIGxhYmVsPXs8UmF3SFRNTD57cXVlc3Rpb25MYWJlbH08L1Jhd0hUTUw+fVxuICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXByb3BzLW5vLXNwcmVhZGluZyAqL1xuICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIGxhYmVsPXs8UmF3SFRNTD57cXVlc3Rpb25MYWJlbH08L1Jhd0hUTUw+fVxuICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICAvPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIHtlcnJvciAmJiA8Rm9ybUhlbHBlclRleHQ+e2hlbHBlclRleHQgPz8gXCIgXCJ9PC9Gb3JtSGVscGVyVGV4dD59XG4gICAgICA8L0Zvcm1Db250cm9sPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuQ2hlY2tib3hRdWVzdGlvbkZpZWxkLnByb3BUeXBlcyA9IHtcbiAgcXVlc3Rpb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5ib29sLFxuICBxdWVzdGlvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgc2V0RmllbGRWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGVscGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3hRdWVzdGlvbkZpZWxkO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIElucHV0TGFiZWwsIE1lbnVJdGVtLCBTZWxlY3QgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgZ2V0TGFiZWwsIHRvU2x1ZyB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IERyb3Bkb3duUXVlc3Rpb25GaWVsZCA9ICh7XG4gIHF1ZXN0aW9uLFxuICBxdWVzdGlvbkNsYXNzTmFtZSA9IFwiXCIsXG4gIGlzRGlzYWJsZWQgPSBmYWxzZSxcbiAgc2V0RmllbGRWYWx1ZSxcbiAgY2hpbGRyZW4sXG4gIGVycm9yLFxuICBoZWxwZXJUZXh0LFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uU2x1ZyA9IHRvU2x1ZyhxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbi5pZCk7XG4gIGNvbnN0IHF1ZXN0aW9uTGFiZWwgPSBnZXRMYWJlbChxdWVzdGlvbik7XG4gIGNvbnN0IGlzUmVxdWlyZWQgPSBxdWVzdGlvbi5tYW5kYXRvcnk7XG5cbiAgY29uc3QgcXVlc3Rpb25PcHRpb25zID1cbiAgICBxdWVzdGlvbi52YWx1ZXM/Lm1hcCgodmFsKSA9PiAoe1xuICAgICAgbGFiZWw6IHZhbC5sYWJlbCxcbiAgICAgIHZhbHVlOiB2YWwuaWRcbiAgICB9KSkgfHwgW107XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBrZXk9e3F1ZXN0aW9uU2x1Z31cbiAgICAgIGlkPXtgJHtxdWVzdGlvblNsdWd9X2NvbnRhaW5lcmB9XG4gICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uQ2xhc3NOYW1lfVxuICAgID5cbiAgICAgIDxGb3JtQ29udHJvbFxuICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICA+XG4gICAgICAgIDxJbnB1dExhYmVsIGlkPXtgJHtxdWVzdGlvblNsdWd9X2xhYmVsYH0+e3F1ZXN0aW9uTGFiZWx9PC9JbnB1dExhYmVsPlxuICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgbGFiZWxJZD17YCR7cXVlc3Rpb25TbHVnfV9sYWJlbGB9XG4gICAgICAgICAgbmFtZT17cXVlc3Rpb25TbHVnfVxuICAgICAgICAgIGlkPXtxdWVzdGlvblNsdWd9XG4gICAgICAgICAgbGFiZWw9e3F1ZXN0aW9uTGFiZWx9XG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1wcm9wcy1uby1zcHJlYWRpbmcgKi9cbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDIwIH19XG4gICAgICAgID5cbiAgICAgICAgICB7cXVlc3Rpb25PcHRpb25zLm1hcCgob3ApID0+IChcbiAgICAgICAgICAgIDxNZW51SXRlbSBrZXk9e29wLmxhYmVsfSB2YWx1ZT17b3AudmFsdWV9PlxuICAgICAgICAgICAgICB7b3AubGFiZWx9XG4gICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbkRyb3Bkb3duUXVlc3Rpb25GaWVsZC5wcm9wVHlwZXMgPSB7XG4gIHF1ZXN0aW9uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHF1ZXN0aW9uQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIGhlbHBlclRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNldEZpZWxkVmFsdWU6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBEcm9wZG93blF1ZXN0aW9uRmllbGQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQge1xuICBGb3JtQ29udHJvbCxcbiAgRm9ybUNvbnRyb2xMYWJlbCxcbiAgRm9ybUhlbHBlclRleHQsXG4gIEZvcm1MYWJlbCxcbiAgUmFkaW8sXG4gIFJhZGlvR3JvdXBcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IGdldExhYmVsLCB0b1NsdWcgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBSYWRpb0xpc3RRdWVzdGlvbkZpZWxkID0gKHtcbiAgcXVlc3Rpb24sXG4gIHF1ZXN0aW9uQ2xhc3NOYW1lID0gXCJcIixcbiAgaXNEaXNhYmxlZCA9IGZhbHNlLFxuICBjaGlsZHJlbixcbiAgZXJyb3IsXG4gIGhlbHBlclRleHQsXG4gIHNldEZpZWxkVmFsdWUsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3QgcXVlc3Rpb25TbHVnID0gdG9TbHVnKHF1ZXN0aW9uLm5hbWUsIHF1ZXN0aW9uLmlkKTtcbiAgY29uc3QgcXVlc3Rpb25MYWJlbCA9IGdldExhYmVsKHF1ZXN0aW9uKTtcbiAgY29uc3QgaXNSZXF1aXJlZCA9IHF1ZXN0aW9uLm1hbmRhdG9yeTtcblxuICBjb25zdCBxdWVzdGlvbk9wdGlvbnMgPVxuICAgIHF1ZXN0aW9uLnZhbHVlcz8ubWFwKCh2YWwpID0+ICh7XG4gICAgICBsYWJlbDogdmFsLmxhYmVsLFxuICAgICAgdmFsdWU6IHZhbC5pZC50b1N0cmluZygpXG4gICAgfSkpIHx8IFtdO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAga2V5PXtxdWVzdGlvblNsdWd9XG4gICAgICBpZD17YCR7cXVlc3Rpb25TbHVnfV9jb250YWluZXJgfVxuICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbkNsYXNzTmFtZX1cbiAgICA+XG4gICAgICA8Rm9ybUNvbnRyb2xcbiAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgPlxuICAgICAgICA8Rm9ybUxhYmVsIGlkPXtgJHtxdWVzdGlvblNsdWd9X2xhYmVsYH0+e3F1ZXN0aW9uTGFiZWx9PC9Gb3JtTGFiZWw+XG4gICAgICAgIHtlcnJvciAmJiA8Rm9ybUhlbHBlclRleHQ+e2hlbHBlclRleHQgPz8gXCIgXCJ9PC9Gb3JtSGVscGVyVGV4dD59XG4gICAgICAgIDxSYWRpb0dyb3VwXG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtgJHtxdWVzdGlvblNsdWd9X2xhYmVsYH1cbiAgICAgICAgICBuYW1lPXtxdWVzdGlvblNsdWd9XG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1wcm9wcy1uby1zcHJlYWRpbmcgKi9cbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgIHtxdWVzdGlvbk9wdGlvbnMubWFwKChvcCkgPT4gKFxuICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAga2V5PXtvcC5sYWJlbH1cbiAgICAgICAgICAgICAgdmFsdWU9e29wLnZhbHVlfVxuICAgICAgICAgICAgICBjb250cm9sPXs8UmFkaW8gLz59XG4gICAgICAgICAgICAgIGxhYmVsPXtvcC5sYWJlbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cblJhZGlvTGlzdFF1ZXN0aW9uRmllbGQucHJvcFR5cGVzID0ge1xuICBxdWVzdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBxdWVzdGlvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICBoZWxwZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzZXRGaWVsZFZhbHVlOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUmFkaW9MaXN0UXVlc3Rpb25GaWVsZDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCwgVGV4dEZpZWxkIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IGdldExhYmVsLCB0b1NsdWcgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBUZXh0UXVlc3Rpb25GaWVsZCA9ICh7XG4gIHF1ZXN0aW9uLFxuICBxdWVzdGlvbkNsYXNzTmFtZSA9IFwiXCIsXG4gIGlzRGlzYWJsZWQgPSBmYWxzZSxcbiAgY2hpbGRyZW4sXG4gIHNldEZpZWxkVmFsdWUsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3QgcXVlc3Rpb25TbHVnID0gdG9TbHVnKHF1ZXN0aW9uLm5hbWUsIHF1ZXN0aW9uLmlkKTtcbiAgY29uc3QgcXVlc3Rpb25MYWJlbCA9IGdldExhYmVsKHF1ZXN0aW9uKTtcbiAgY29uc3QgaXNSZXF1aXJlZCA9IHF1ZXN0aW9uLm1hbmRhdG9yeTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGtleT17cXVlc3Rpb25TbHVnfVxuICAgICAgaWQ9e2Ake3F1ZXN0aW9uU2x1Z31fY29udGFpbmVyYH1cbiAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb25DbGFzc05hbWV9XG4gICAgPlxuICAgICAgPEZvcm1Hcm91cD5cbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIG5hbWU9e3F1ZXN0aW9uU2x1Z31cbiAgICAgICAgICBsYWJlbD17cXVlc3Rpb25MYWJlbH1cbiAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICByZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXByb3BzLW5vLXNwcmVhZGluZyAqL1xuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAvPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cblRleHRRdWVzdGlvbkZpZWxkLnByb3BUeXBlcyA9IHtcbiAgcXVlc3Rpb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgcXVlc3Rpb25DbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIHNldEZpZWxkVmFsdWU6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0UXVlc3Rpb25GaWVsZDtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uVHlwZV9DaGVja2JveCxcbiAgUXVlc3Rpb25UeXBlX0NoZWNrQm94TGlzdCxcbiAgUXVlc3Rpb25UeXBlX0NvbWJvQm94LFxuICBRdWVzdGlvblR5cGVfQ291bnRyeUNvbWJvQm94LFxuICBRdWVzdGlvblR5cGVfUmFkaW9CdXR0b25MaXN0XG59IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IGNoZWNrUnVsZSA9ICh2YWx1ZSwgcnVsZSkgPT4ge1xuICBjb25zdCB2YWx1ZXMgPSBydWxlLmFuc3dlcl92YWx1ZXM7XG5cbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmICghdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgbGV0IHJlcyA9IHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gXCJBbmRcIjtcbiAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgaWYgKHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gXCJBbmRcIikge1xuICAgICAgICByZXMgPSByZXMgJiYgdmFsdWUuaW5jbHVkZXModik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPclxuICAgICAgICByZXMgPSByZXMgfHwgdmFsdWUuaW5jbHVkZXModik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICByZXR1cm4gdmFsdWVzLmluY2x1ZGVzKHZhbHVlPy50b1N0cmluZygpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja1Zpc2liaWxpdHkgPSAocnVsZSwgcnVsZVJlc3VsdCwgY2hpbGRyZW4pID0+IHtcbiAgaWYgKHJ1bGUudmlzaWJpbGl0eSA9PT0gXCJWaXNpYmxlXCIpIHtcbiAgICBpZiAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gXCJFcXVhbFwiKSB7XG4gICAgICBpZiAocnVsZVJlc3VsdCkgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIE5vbiBFcXVhbFxuICAgIGlmICghcnVsZVJlc3VsdCkge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBub3QgdmlzaWJsZVxuICBpZiAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gXCJFcXVhbFwiKSB7XG4gICAgaWYgKCFydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdG9TbHVnID0gKHRleHQsIHF1ZXN0aW9uSWQpID0+IHtcbiAgY29uc3QgdGV4dExDID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gYCR7dGV4dExDLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgXCJfXCIpfV8ke3F1ZXN0aW9uSWR9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMYWJlbCA9IChxKSA9PlxuICAvLyByZXBsYWNlIGxpbmUgYnJlYWtzIGFuZCByZW1vdmUgb3V0ZXIgPHA+XG4gIHE/LmxhYmVsPy5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoLzxwPiguKik8XFwvcD4vZ2ksIFwiJDFcIik7XG5cbmV4cG9ydCBjb25zdCBpc0Fuc3dlcmVkID0gKGFuc3dlcikgPT4ge1xuICBpZiAoIWFuc3dlcikgcmV0dXJuIGZhbHNlO1xuICAvLyBjaGVjayB0eXBlXG4gIGlmIChBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIubGVuZ3RoID4gMDtcbiAgaWYgKHR5cGVvZiBhbnN3ZXIgPT09IFwic3RyaW5nXCIpIHJldHVybiBhbnN3ZXIubGVuZ3RoID4gMDtcbiAgaWYgKHR5cGVvZiBhbnN3ZXIgPT09IFwibnVtYmVyXCIpIHJldHVybiBhbnN3ZXIgPiAwO1xuICBpZiAodHlwZW9mIGFuc3dlciA9PT0gXCJib29sZWFuXCIpIHJldHVybiBhbnN3ZXI7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0lmVmFsdWVNYXRjaCA9IChhbnN3ZXIsIGNvbXBhcmVWYWwpID0+IHtcbiAgY29uc3QgYW5zd2VyQXJyYXkgPSBBcnJheS5pc0FycmF5KGFuc3dlcikgPyBhbnN3ZXIgOiBbYW5zd2VyXTtcblxuICByZXR1cm4gYW5zd2VyQXJyYXkuc29tZSgodikgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBhcmVWYWwpKSB7XG4gICAgICByZXR1cm4gY29tcGFyZVZhbC5pbmNsdWRlcyh2KTtcbiAgICB9XG4gICAgcmV0dXJuIHYgPT09IGNvbXBhcmVWYWw7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVJbml0aWFsVmFsdWUgPSAocSkgPT4ge1xuICBzd2l0Y2ggKHEudHlwZSkge1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NoZWNrYm94OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX1JhZGlvQnV0dG9uTGlzdDpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NoZWNrQm94TGlzdDpcbiAgICAgIHJldHVybiBbXTtcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3g6XG4gICAgY2FzZSBRdWVzdGlvblR5cGVfQ29tYm9Cb3g6XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlVmFsdWUgPSAoYW5zLCB0eXBlKSA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NoZWNrYm94OlxuICAgICAgcmV0dXJuIGFucyA9PT0gXCJ0cnVlXCI7XG4gICAgY2FzZSBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0OlxuICAgICAgcmV0dXJuIGFucz8uc3BsaXQoXCIsXCIpIHx8IFtdO1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NvdW50cnlDb21ib0JveDpcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9Db21ib0JveDpcbiAgICAgIHJldHVybiBhbnMgfHwgXCJcIjtcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3Q6XG4gICAgICByZXR1cm4gYW5zIHx8IG51bGw7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBhbnM7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1BbndlcnNGb3JtYXQgPSAoYW5zd2VycykgPT4ge1xuICBjb25zdCB7XG4gICAgYXR0ZW5kZWVfZW1haWwsXG4gICAgYXR0ZW5kZWVfZmlyc3RfbmFtZSxcbiAgICBhdHRlbmRlZV9sYXN0X25hbWUsXG4gICAgYXR0ZW5kZWVfY29tcGFueSxcbiAgICBkaXNjbGFpbWVyX2FjY2VwdGVkLFxuICAgIC4uLmV4dHJhX3F1ZXN0aW9uc1xuICB9ID0gYW5zd2VycztcblxuICBjb25zdCBmb3JtYXR0ZWRFUSA9IE9iamVjdC5lbnRyaWVzKGV4dHJhX3F1ZXN0aW9ucykubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgcXVlc3Rpb25faWQ6IHBhcnNlSW50KGtleS5zcGxpdChcIl9cIikucG9wKCksIDEwKSxcbiAgICBhbnN3ZXI6IHZhbHVlLnRvU3RyaW5nKClcbiAgfSkpO1xuXG4gIHJldHVybiB7XG4gICAgYXR0ZW5kZWVfZW1haWwsXG4gICAgYXR0ZW5kZWVfZmlyc3RfbmFtZSxcbiAgICBhdHRlbmRlZV9sYXN0X25hbWUsXG4gICAgYXR0ZW5kZWVfY29tcGFueSxcbiAgICBkaXNjbGFpbWVyX2FjY2VwdGVkLFxuICAgIGV4dHJhX3F1ZXN0aW9uczogZm9ybWF0dGVkRVFcbiAgfTtcbn07XG4iLCJleHBvcnQgY29uc3QgUXVlc3Rpb25UeXBlX1RleHQgPSBcIlRleHRcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfVGV4dEFyZWEgPSBcIlRleHRBcmVhXCI7XG5leHBvcnQgY29uc3QgUXVlc3Rpb25UeXBlX0NoZWNrYm94ID0gXCJDaGVja0JveFwiO1xuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3QgPSBcIlJhZGlvQnV0dG9uTGlzdFwiO1xuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uVHlwZV9Db21ib0JveCA9IFwiQ29tYm9Cb3hcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0ID0gXCJDaGVja0JveExpc3RcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfQ291bnRyeUNvbWJvQm94ID0gXCJDb3VudHJ5Q29tYm9Cb3hcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfUmFkaW9CdXR0b24gPSBcIlJhZGlvQnV0dG9uXCI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmltcG9ydCB7XG4gIHRvU2x1ZyxcbiAgaXNBbnN3ZXJlZCxcbiAgY2hlY2tWaXNpYmlsaXR5LFxuICBjaGVja1J1bGVcbn0gZnJvbSBcIi4vY29tcG9uZW50cy91dGlsc1wiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25UeXBlX0NoZWNrYm94LFxuICBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0LFxuICBRdWVzdGlvblR5cGVfQ29tYm9Cb3gsXG4gIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3gsXG4gIFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3QsXG4gIFF1ZXN0aW9uVHlwZV9UZXh0LFxuICBRdWVzdGlvblR5cGVfVGV4dEFyZWFcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgVGV4dFF1ZXN0aW9uRmllbGQgZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0UXVlc3Rpb25GaWVsZFwiO1xuaW1wb3J0IENoZWNrYm94UXVlc3Rpb25GaWVsZCBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94UXVlc3Rpb25GaWVsZFwiO1xuaW1wb3J0IFJhZGlvTGlzdFF1ZXN0aW9uRmllbGQgZnJvbSBcIi4vY29tcG9uZW50cy9SYWRpb0xpc3RRdWVzdGlvbkZpZWxkXCI7XG5pbXBvcnQgQ2hlY2tib3hMaXN0UXVlc3Rpb25GaWVsZCBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94TGlzdFF1ZXN0aW9uRmllbGRcIjtcbmltcG9ydCBEcm9wZG93blF1ZXN0aW9uRmllbGQgZnJvbSBcIi4vY29tcG9uZW50cy9Ecm9wZG93blF1ZXN0aW9uRmllbGRcIjtcblxuY29uc3QgZ2V0UXVlc3Rpb25GaWVsZENvbXBvbmVudCA9IChxdWVzdGlvblR5cGUpID0+IHtcbiAgc3dpdGNoIChxdWVzdGlvblR5cGUpIHtcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9UZXh0QXJlYTpcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9UZXh0OiB7XG4gICAgICByZXR1cm4gVGV4dFF1ZXN0aW9uRmllbGQ7XG4gICAgfVxuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NoZWNrYm94OiB7XG4gICAgICByZXR1cm4gQ2hlY2tib3hRdWVzdGlvbkZpZWxkO1xuICAgIH1cbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3Q6IHtcbiAgICAgIHJldHVybiBSYWRpb0xpc3RRdWVzdGlvbkZpZWxkO1xuICAgIH1cbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9DaGVja0JveExpc3Q6IHtcbiAgICAgIHJldHVybiBDaGVja2JveExpc3RRdWVzdGlvbkZpZWxkO1xuICAgIH1cbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3g6XG4gICAgY2FzZSBRdWVzdGlvblR5cGVfQ29tYm9Cb3g6IHtcbiAgICAgIHJldHVybiBEcm9wZG93blF1ZXN0aW9uRmllbGQ7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBSZWFjdC5GcmFnbWVudDtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IEV4dHJhUXVlc3Rpb25zRmllbGRzID0gKHtcbiAgZXh0cmFRdWVzdGlvbnMsXG4gIGNsYXNzTmFtZSA9IFwiZXh0cmFRdWVzdGlvbnNcIixcbiAgcXVlc3Rpb25DbGFzc05hbWUgPSBcImV4dHJhUXVlc3Rpb25cIixcbiAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgYWxsb3dFZGl0ID0gdHJ1ZSxcbiAgZm9ybWlrXG59KSA9PiB7XG4gIGNvbnN0IHJlbmRlclJ1bGUgPSAocnVsZSwgcXVlc3Rpb25TbHVnKSA9PlxuICAgIGNoZWNrVmlzaWJpbGl0eShcbiAgICAgIHJ1bGUsXG4gICAgICBjaGVja1J1bGUoZm9ybWlrLnZhbHVlc1txdWVzdGlvblNsdWddLCBydWxlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgcmVuZGVyUXVlc3Rpb24ocnVsZS5zdWJfcXVlc3Rpb24pXG4gICAgKTtcblxuICBjb25zdCByZW5kZXJRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgY29uc3QgcXVlc3Rpb25TbHVnID0gdG9TbHVnKHEubmFtZSwgcS5pZCk7XG4gICAgLy8gZGlzYWJsZSBmaWVsZCBpZiBlZGl0IGlzbid0IGFsbG93ZWQgYW5kIHRoZSBxdWVzdGlvbnMgaXMgYW5zd2VyZWRcbiAgICBjb25zdCBpc0Rpc2FibGVkID1cbiAgICAgICghYWxsb3dFZGl0ICYmIGlzQW5zd2VyZWQoZm9ybWlrLnZhbHVlc1txdWVzdGlvblNsdWddKSkgfHwgcmVhZE9ubHk7XG4gICAgY29uc3QgUXVlc3Rpb25GaWVsZENvbXBvbmVudCA9IGdldFF1ZXN0aW9uRmllbGRDb21wb25lbnQocS50eXBlKTtcblxuICAgIGNvbnN0IGZvcm1pa1Byb3BzID0ge1xuICAgICAgdmFsdWU6IGZvcm1pay52YWx1ZXNbcXVlc3Rpb25TbHVnXSxcbiAgICAgIG9uQ2hhbmdlOiBmb3JtaWsuaGFuZGxlQ2hhbmdlLFxuICAgICAgb25CbHVyOiBmb3JtaWsuaGFuZGxlQmx1cixcbiAgICAgIGVycm9yOlxuICAgICAgICBmb3JtaWsudG91Y2hlZFtxdWVzdGlvblNsdWddICYmIEJvb2xlYW4oZm9ybWlrLmVycm9yc1txdWVzdGlvblNsdWddKSxcbiAgICAgIGhlbHBlclRleHQ6IGZvcm1pay50b3VjaGVkW3F1ZXN0aW9uU2x1Z10gJiYgZm9ybWlrLmVycm9yc1txdWVzdGlvblNsdWddLFxuICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybWlrLnNldEZpZWxkVmFsdWVcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxRdWVzdGlvbkZpZWxkQ29tcG9uZW50XG4gICAgICAgIGtleT17cXVlc3Rpb25TbHVnfVxuICAgICAgICBxdWVzdGlvbj17cX1cbiAgICAgICAgcXVlc3Rpb25DbGFzc05hbWU9e3F1ZXN0aW9uQ2xhc3NOYW1lfVxuICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXByb3BzLW5vLXNwcmVhZGluZyAqL1xuICAgICAgICB7Li4uZm9ybWlrUHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubWFwKChydWxlKSA9PiByZW5kZXJSdWxlKHJ1bGUsIHF1ZXN0aW9uU2x1ZykpfVxuICAgICAgPC9RdWVzdGlvbkZpZWxkQ29tcG9uZW50PlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PntleHRyYVF1ZXN0aW9ucy5tYXAocmVuZGVyUXVlc3Rpb24pfTwvZGl2Pjtcbn07XG5cbkV4dHJhUXVlc3Rpb25zRmllbGRzLnByb3BUeXBlcyA9IHtcbiAgZXh0cmFRdWVzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHF1ZXN0aW9uQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhbGxvd0VkaXQ6IFByb3BUeXBlcy5ib29sLFxuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV4dHJhUXVlc3Rpb25zRmllbGRzO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvU3RhY2tcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IEFkYXB0ZXJEYXlqcyB9IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzL0FkYXB0ZXJEYXlqc1wiO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uUHJvdmlkZXIgfSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vycy9Mb2NhbGl6YXRpb25Qcm92aWRlclwiO1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzL0RhdGVQaWNrZXJcIjtcbmltcG9ydCBDbG9zZUljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2VcIjtcbmltcG9ydCB7IEZJTFRFUl9WQVJfREFURSB9IGZyb20gXCIuLi8uLi9hY3Rpb25zXCI7XG5pbXBvcnQgeyBnZXRFcG9jaExvd2VyVXBwZXJJblNlY29uZHMgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmFzaWNEYXRlUGlja2VyKHsgb25GaWx0ZXIsIG9uUmVzZXQgfSkge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gIGNvbnN0IFtkYXRlVmFsdWUsIHNldERhdGVWYWx1ZV0gPSB1c2VTdGF0ZShub3cpO1xuICBjb25zdCBvbkRhdGVDaGFuZ2UgPSAodmFsKSA9PiB7XG4gICAgc2V0RGF0ZVZhbHVlKHZhbCk7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbC4kZCk7XG4gICAgY29uc3QgeyBsb3dlciwgdXBwZXIgfSA9IGdldEVwb2NoTG93ZXJVcHBlckluU2Vjb25kcyhkYXRlKTtcbiAgICBvbkZpbHRlcih7XG4gICAgICB0eXBlOiBGSUxURVJfVkFSX0RBVEUsXG4gICAgICBuYW1lOiBcImNyZWF0ZWRcIixcbiAgICAgIGRhdGUsXG4gICAgICBsb3dlcixcbiAgICAgIHVwcGVyXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IG9uUmVzZXRBY3Rpb24gPSAoKSA9PiB7XG4gICAgb25SZXNldCgpO1xuICAgIHNldERhdGVWYWx1ZShub3cpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmZpbHRlckRhdGVMYWJlbH0+e3QoXCJmaWx0ZXIucHVyY2hhc2VkX29uXCIpfTwvZGl2PlxuICAgICAgPFN0YWNrXG4gICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBkaXJlY3Rpb249XCJyb3dcIlxuICAgICAgICBzeD17eyBwdDogMiwgcGI6IDIgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuZGF0ZVBpY2tlckNvbnRhaW5lcn1cbiAgICAgID5cbiAgICAgICAgPENsb3NlSWNvblxuICAgICAgICAgIGZvbnRTaXplPVwibGFyZ2VcIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmRhdGVwaWNrZXJDbG9zZX1cbiAgICAgICAgICBvbkNsaWNrPXtvblJlc2V0QWN0aW9ufVxuICAgICAgICAvPlxuICAgICAgICA8TG9jYWxpemF0aW9uUHJvdmlkZXIgZGF0ZUFkYXB0ZXI9e0FkYXB0ZXJEYXlqc30+XG4gICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNhbGVuZGFyRGlzcGxheX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkRhdGVDaGFuZ2V9XG4gICAgICAgICAgICB2YWx1ZT17ZGF0ZVZhbHVlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvTG9jYWxpemF0aW9uUHJvdmlkZXI+XG4gICAgICA8L1N0YWNrPlxuICAgIDwvPlxuICApO1xufVxuXG5CYXNpY0RhdGVQaWNrZXIucHJvcFR5cGVzID0ge1xuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUmVzZXQ6IFByb3BUeXBlcy5mdW5jXG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFN0YWNrIGZyb20gXCJAbXVpL21hdGVyaWFsL1N0YWNrXCI7XG5pbXBvcnQgRmlsdGVyTGlzdEljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvRmlsdGVyTGlzdFwiO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCBCYXNpY0RhdGVQaWNrZXIgZnJvbSBcIi4vRGF0ZXBpY2tlclwiO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5mdW5jdGlvbiBGaWx0ZXIoeyBvbkZpbHRlciwgb25SZXNldCB9KSB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW3Nob3dGaWx0ZXJMaXN0LCBzZXRTaG93RmlsdGVyTGlzdF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93RGF0ZXBpY2tlciwgc2V0U2hvd0RhdGVwaWNrZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZmlsdGVyTnVtQWN0aXZlLCBzZXRGaWx0ZXJOdW1BY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBmaWx0ZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZUZpbHRlckNsaWNrT3V0c2lkZSA9IChldmVudCkgPT4ge1xuICAgIGlmIChmaWx0ZXJSZWYuY3VycmVudCAmJiAhZmlsdGVyUmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgaWYgKHNob3dGaWx0ZXJMaXN0KSB7XG4gICAgICAgIHNldFNob3dGaWx0ZXJMaXN0KGZhbHNlKTtcbiAgICAgICAgc2V0U2hvd0RhdGVwaWNrZXIoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlRmlsdGVyQ2xpY2tPdXRzaWRlLCBmYWxzZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVGaWx0ZXJDbGlja091dHNpZGUsIGZhbHNlKTtcbiAgICB9O1xuICB9LCBbc2hvd0ZpbHRlckxpc3RdKTtcblxuICBjb25zdCB0b2dnbGUgPSAoKSA9PiB7XG4gICAgc2V0U2hvd0ZpbHRlckxpc3QoIXNob3dGaWx0ZXJMaXN0KTtcbiAgICBzZXRTaG93RGF0ZXBpY2tlcighc2hvd0RhdGVwaWNrZXIpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuZmlsdGVyQ29udGFpbmVyfSByZWY9e2ZpbHRlclJlZn0+XG4gICAgICA8U3RhY2tcbiAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgIGRpcmVjdGlvbj1cInJvd1wiXG4gICAgICAgIHN4PXt7IHB0OiAyLCBwYjogMiB9fVxuICAgICAgICBvbkNsaWNrPXt0b2dnbGV9XG4gICAgICA+XG4gICAgICAgIDxGaWx0ZXJMaXN0SWNvbiBmb250U2l6ZT1cImxhcmdlXCIgY2xhc3NOYW1lPXtzdHlsZXMuZmlsdGVySWNvbn0gLz5cbiAgICAgICAgey8qKiBjdXJyZW50bHkganVzdCBzaG93aW5nIFwiMVwiIGJlY2F1c2Ugd2UncmUgY3VycmVudGx5IG9ubHkgZmlsdGVyaW5nIG9uZSBjcml0ZXJpYSAtIGNyZWF0ZWQgZGF0ZSAqL31cbiAgICAgICAge2ZpbHRlck51bUFjdGl2ZSAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmZpbHRlck51bUFjdGl2ZX0+MTwvZGl2Pn1cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZmlsdGVyTGFiZWx9Pnt0KFwiZmlsdGVyLmZpbHRlclwiKX08L3NwYW4+XG4gICAgICA8L1N0YWNrPlxuICAgICAgPEJveFxuICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5maWx0ZXJMaXN0Q29udGFpbmVyfSAke3N0eWxlcy5jb250YWluZXJ9ICR7XG4gICAgICAgICAgc2hvd0ZpbHRlckxpc3QgPyBzdHlsZXMuc2hvd0RhdGVQaWNrZXIgOiBcIlwiXG4gICAgICAgIH1gfVxuICAgICAgPlxuICAgICAgICA8QmFzaWNEYXRlUGlja2VyXG4gICAgICAgICAgb25SZXNldD17KCkgPT4ge1xuICAgICAgICAgICAgb25SZXNldCgpO1xuICAgICAgICAgICAgc2V0RmlsdGVyTnVtQWN0aXZlKGZhbHNlKTtcbiAgICAgICAgICAgIHRvZ2dsZSgpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25GaWx0ZXI9eyhmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIG9uRmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICBzZXRGaWx0ZXJOdW1BY3RpdmUodHJ1ZSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvQm94PlxuICAgIDwvQm94PlxuICApO1xufVxuXG5GaWx0ZXIucHJvcFR5cGVzID0ge1xuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlcjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvc3R5bGVzXCI7XG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwiQG11aS9pY29ucy1tYXRlcmlhbC9TZWFyY2hcIjtcbmltcG9ydCBDbG9zZUljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2VcIjtcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgRklMVEVSX1ZBUl9PUkRFUl9OVU1CRVIgfSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xuXG5jb25zdCBTZWFyY2hDb250YWluZXIgPSBzdHlsZWQoXCJkaXZcIikoKCkgPT4gKHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgbWFyZ2luUmlnaHQ6IFwiMFwiLFxuICBtYXJnaW5MZWZ0OiBcIjBcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxuICBkaXNwbGF5OiBcImJsb2NrXCJcbn0pKTtcbmNvbnN0IFNlYXJjaEljb25XcmFwcGVyID0gc3R5bGVkKFwiZGl2XCIpKCgpID0+ICh7XG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxufSkpO1xuY29uc3QgU3R5bGVkSW5wdXRCYXNlID0gc3R5bGVkKElucHV0QmFzZSkoKCkgPT4gKHtcbiAgY29sb3I6IFwiaW5oZXJpdFwiLFxuICBib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40MilcIixcbiAgcGFkZGluZ0xlZnQ6IFwiMjVweFwiLFxuICBwYWRkaW5nUmlnaHQ6IFwiMjVweFwiLFxuICBmb250U2l6ZTogXCIxZW1cIlxufSkpO1xuY29uc3QgQ2xvc2VJY29uV3JhcHBlciA9IHN0eWxlZChDbG9zZUljb24pKCgpID0+ICh7XG4gIHBhZGRpbmc6IFwiMnB4XCIsXG4gIGZvbnRTaXplOiBcIjEuNWVtXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gIHRvcDogXCIwXCIsXG4gIHJpZ2h0OiBcIjBcIixcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICB6SW5kZXg6IFwiMTAwMFwiXG59KSk7XG5cbmZ1bmN0aW9uIFNlYXJjaCh7IG9uU2VhcmNoLCBvblJlc2V0IH0pIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbc2hvd0Nsb3NlLCBzZXRTaG93Q2xvc2VdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBvbktleURvd24gPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBrZXksXG4gICAgICBuYXRpdmVFdmVudDoge1xuICAgICAgICB0YXJnZXQ6IHsgdmFsdWUgfVxuICAgICAgfVxuICAgIH0gPSBldmVudDtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9uU2VhcmNoKHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWU6IFwibnVtYmVyXCIsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9WQVJfT1JERVJfTlVNQkVSXG4gICAgICB9KTtcbiAgICAgIHNldFNob3dDbG9zZSh0cnVlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlc2V0U2VhcmNoID0gKCkgPT4ge1xuICAgIHNldFNlYXJjaFZhbHVlKFwiXCIpO1xuICAgIHNldFNob3dDbG9zZShmYWxzZSk7XG4gICAgb25SZXNldCgpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxCb3g+XG4gICAgICA8U2VhcmNoQ29udGFpbmVyPlxuICAgICAgICB7c2hvd0Nsb3NlICYmIChcbiAgICAgICAgICA8Q2xvc2VJY29uV3JhcHBlciBvbkNsaWNrPXtyZXNldFNlYXJjaH0+XG4gICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgPC9DbG9zZUljb25XcmFwcGVyPlxuICAgICAgICApfVxuICAgICAgICA8U2VhcmNoSWNvbldyYXBwZXI+XG4gICAgICAgICAgPFNlYXJjaEljb24gLz5cbiAgICAgICAgPC9TZWFyY2hJY29uV3JhcHBlcj5cbiAgICAgICAgPFN0eWxlZElucHV0QmFzZVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KFwib3JkZXJfc2VhcmNoLm9yZGVyX251bWJlclwiKX1cbiAgICAgICAgICBpbnB1dFByb3BzPXt7IFwiYXJpYS1sYWJlbFwiOiBcInNlYXJjaFwiIH19XG4gICAgICAgICAgdmFsdWU9e3NlYXJjaFZhbHVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoVmFsdWUoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAvPlxuICAgICAgPC9TZWFyY2hDb250YWluZXI+XG4gICAgPC9Cb3g+XG4gICk7XG59XG5cblNlYXJjaC5wcm9wVHlwZXMgPSB7XG4gIG9uU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25SZXNldDogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlYXJjaDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBTdGFjayBmcm9tIFwiQG11aS9tYXRlcmlhbC9TdGFja1wiO1xuaW1wb3J0IHsgQm94LCBCdXR0b24gfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IEltcG9ydEV4cG9ydEljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvSW1wb3J0RXhwb3J0XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmZ1bmN0aW9uIFNvcnQoeyBvblNvcnQgfSkge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IFtzaG93U29ydCwgc2V0U2hvd1NvcnRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBzb3J0UmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVTb3J0Q2xpY2tPdXRzaWRlID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKHNvcnRSZWYuY3VycmVudCAmJiAhc29ydFJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHNldFNob3dTb3J0KGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZVNvcnRDbGlja091dHNpZGUsIGZhbHNlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZVNvcnRDbGlja091dHNpZGUsIGZhbHNlKTtcbiAgICB9O1xuICB9LCBbc2hvd1NvcnRdKTtcblxuICBjb25zdCB0b2dnbGUgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1NvcnQoIXNob3dTb3J0KTtcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLnNvcnRDb250YWluZXJ9IG9uQ2xpY2s9e3RvZ2dsZX0+XG4gICAgICA8U3RhY2tcbiAgICAgICAgcmVmPXtzb3J0UmVmfVxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgZGlyZWN0aW9uPVwicm93XCJcbiAgICAgICAgc3g9e3sgcHQ6IDIsIHBiOiAyIH19XG4gICAgICA+XG4gICAgICAgIDxJbXBvcnRFeHBvcnRJY29uIGZvbnRTaXplPVwibGFyZ2VcIiBjbGFzc05hbWU9e3N0eWxlcy5zb3J0SWNvbn0gLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc29ydExhYmVsfT57dChcInNvcnQuc29ydFwiKX08L3NwYW4+XG4gICAgICA8L1N0YWNrPlxuICAgICAge3Nob3dTb3J0ICYmIChcbiAgICAgICAgPEJveCBjbGFzc05hbWU9e2Ake3N0eWxlcy5zb3J0TGlzdENvbnRhaW5lcn0gJHtzdHlsZXMuY29udGFpbmVyfWB9PlxuICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9IG9uQ2xpY2s9eygpID0+IG9uU29ydChcImRlc2NcIil9PlxuICAgICAgICAgICAge3QoXCJzb3J0Lm5ld19maXJzdFwiKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfSBvbkNsaWNrPXsoKSA9PiBvblNvcnQoXCJhc2NcIil9PlxuICAgICAgICAgICAge3QoXCJzb3J0Lm9sZF9maXJzdFwiKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuICAgIDwvQm94PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTb3J0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgR3JpZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCIuL0ZpbHRlclwiO1xuaW1wb3J0IFNvcnQgZnJvbSBcIi4vU29ydFwiO1xuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9TZWFyY2hcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuZnVuY3Rpb24gRmlsdGVyU29ydFNlYXJjaCh7IG9uRmlsdGVyLCBvblNvcnQsIG9uU2VhcmNoLCBvblJlc2V0IH0pIHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBjb250YWluZXIganVzdGlmeT1cImZsZXgtZW5kXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgPEdyaWRcbiAgICAgICAgaXRlbVxuICAgICAgICB4cz17Nn1cbiAgICAgICAgY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmc9ezF9XG4gICAgICAgIGdhcD17Mn1cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuZmlsdGVyU29ydENvbnRhaW5lcn1cbiAgICAgICAgc3g9e3sgcHQ6IDIsIHBiOiAyIH19XG4gICAgICA+XG4gICAgICAgIDxHcmlkIGl0ZW0+XG4gICAgICAgICAgPEZpbHRlciBvbkZpbHRlcj17b25GaWx0ZXJ9IG9uUmVzZXQ9e29uUmVzZXR9IC8+XG4gICAgICAgIDwvR3JpZD5cbiAgICAgICAgPEdyaWQgaXRlbT5cbiAgICAgICAgICA8U29ydCBvblNvcnQ9e29uU29ydH0gLz5cbiAgICAgICAgPC9HcmlkPlxuICAgICAgPC9HcmlkPlxuICAgICAgPEdyaWQgaXRlbSB4cz17Nn0gY29udGFpbmVyIGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgPFNlYXJjaCBvblNlYXJjaD17b25TZWFyY2h9IG9uUmVzZXQ9e29uUmVzZXR9IC8+XG4gICAgICA8L0dyaWQ+XG4gICAgPC9HcmlkPlxuICApO1xufVxuXG5GaWx0ZXJTb3J0U2VhcmNoLnByb3BUeXBlcyA9IHtcbiAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblNlYXJjaDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUmVzZXQ6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJTb3J0U2VhcmNoO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgQm94LCBCdXR0b24gfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuXG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IEZvcm1Gb290ZXIgPSAoeyBzYXZlTGFiZWwsIGNhbmNlbExhYmVsLCBvbkNsb3NlLCBkaXNhYmxlZCB9KSA9PiAoXG4gIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuZm9vdGVyfT5cbiAgICA8QnV0dG9uXG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy5jYW5jZWxCdG59XG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgID5cbiAgICAgIHtjYW5jZWxMYWJlbH1cbiAgICA8L0J1dHRvbj5cbiAgICA8QnV0dG9uXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNhdmVCdG59XG4gICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgID5cbiAgICAgIHtzYXZlTGFiZWx9XG4gICAgPC9CdXR0b24+XG4gIDwvQm94PlxuKTtcblxuRm9ybUZvb3Rlci5wcm9wVHlwZXMgPSB7XG4gIHNhdmVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2FuY2VsTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm1Gb290ZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgRXJyb3JJY29uIGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsL0Vycm9yXCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmZ1bmN0aW9uIEVycm9yTGFiZWwoeyBtZXNzYWdlLCBjb2xvciwgY2xhc3NOYW1lcywgZGF0YVRlc3RJZCB9KSB7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLmVycm9yTGFiZWx9ICR7Y2xhc3NOYW1lcyAmJiBjbGFzc05hbWVzfWB9XG4gICAgICBzdHlsZT17eyBjb2xvciB9fVxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgPlxuICAgICAgPEVycm9ySWNvbiBzeD17eyBjb2xvciB9fSAvPlxuICAgICAge21lc3NhZ2V9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBFcnJvckxhYmVsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgQmFja2Ryb3AsIENpcmN1bGFyUHJvZ3Jlc3MgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuXG5jb25zdCBMb2FkZXIgPSAoeyBvcGVuIH0pID0+IChcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgPEJhY2tkcm9wIG9wZW49e29wZW59IHN4PXsodGhlbWUpID0+ICh7IHpJbmRleDogdGhlbWUuekluZGV4LmRyYXdlciArIDEgfSl9PlxuICAgIDxDaXJjdWxhclByb2dyZXNzIGNvbG9yPVwiaW5oZXJpdFwiIC8+XG4gIDwvQmFja2Ryb3A+XG4pO1xuXG5Mb2FkZXIucHJvcFR5cGVzID0ge1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTG9hZGVyO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IERyYXdlciBmcm9tIFwiQG11aS9tYXRlcmlhbC9EcmF3ZXJcIjtcbmltcG9ydCB7IENvbnRhaW5lciB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgQ2xvc2VJY29uIGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsL0Nsb3NlXCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IE11bHRpU3RlcFNsaWRlciA9ICh7IGNoaWxkcmVuLCBvcGVuLCBvbkNsb3NlU2xpZGVyIH0pID0+IChcbiAgICA8RHJhd2VyXG4gICAgICBhbmNob3I9XCJyaWdodFwiXG4gICAgICBvcGVuPXtvcGVufVxuICAgICAgb25DbG9zZT17b25DbG9zZVNsaWRlcn1cbiAgICAgIHN0eWxlPXt7IHpJbmRleDogMTAwMCB9fVxuICAgICAgUGFwZXJQcm9wcz17e1xuICAgICAgICBzeDoge1xuICAgICAgICAgIHdpZHRoOiBcIjYwJVwiXG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgPlxuICAgICAgPENvbnRhaW5lciBjbGFzc05hbWU9e3N0eWxlcy5tdWx0aXN0ZXBDb250YWluZXJ9PlxuICAgICAgICA8Q2xvc2VJY29uXG4gICAgICAgICAgZm9udFNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubXVsdGlzdGVwQ2xvc2VJY29ufVxuICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2VTbGlkZXJ9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjbG9zZS1zbGlkZXJcIlxuICAgICAgICAvPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0NvbnRhaW5lcj5cbiAgICA8L0RyYXdlcj5cbiAgKVxuXG5NdWx0aVN0ZXBTbGlkZXIucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICBvbkNsb3NlU2xpZGVyOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTXVsdGlTdGVwU2xpZGVyO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3Rvciwgc2hhbGxvd0VxdWFsIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IEluZmluaXRlU2Nyb2xsIGZyb20gXCJyZWFjdC1pbmZpbml0ZS1zY3JvbGwtY29tcG9uZW50XCI7XG5pbXBvcnQgRmlsdGVyU29ydFNlYXJjaCBmcm9tIFwiLi9GaWx0ZXJTb3J0U2VhcmNoXCI7XG5pbXBvcnQgT3JkZXJzTGlzdCBmcm9tIFwiLi9PcmRlcnNMaXN0XCI7XG5pbXBvcnQgeyBnZXRTdW1taXRGb3JtYXR0ZWREYXRlIH0gZnJvbSBcIi4uL3V0aWxzL3N1bW1pdFV0aWxzXCI7XG5pbXBvcnQgeyBnZXRUaWNrZXRzQnlPcmRlciwgZ2V0VXNlck9yZGVycywgcmVzZXRGaWx0ZXIgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuaW1wb3J0IHsgT05FX1BBR0VfTkVYVCB9IGZyb20gXCIuLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCBDdXN0b21UaGVtZSBmcm9tIFwiLi9DdXN0b21UaGVtZVwiO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuaW1wb3J0IExvYWRlciBmcm9tIFwiLi9Mb2FkZXJcIjtcblxuY29uc3QgTXlPcmRlcnNUaWNrZXRzID0gKCkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3Qge1xuICAgIHN1bW1pdCxcbiAgICBtZW1iZXJPcmRlcnMsXG4gICAgbG9hZGluZyxcbiAgICBvcmRlcnNfY3VycmVudF9wYWdlLFxuICAgIG9yZGVyc19sYXN0X3BhZ2UsXG4gICAgb3JkZXJzX3Blcl9wYWdlLFxuICAgIG9yZGVyc190b3RhbCxcbiAgICB0aWNrZXRfcGVyX3BhZ2VcbiAgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUud2lkZ2V0U3RhdGUgfHwge30sIHNoYWxsb3dFcXVhbCk7XG4gIGNvbnN0IFtmaWx0ZXIsIHNldEZpbHRlcl0gPSB1c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IFtzb3J0LCBzZXRTb3J0XSA9IHVzZVN0YXRlKHt9KTtcblxuICBjb25zdCBvblJlc2V0ID0gKCkgPT4ge1xuICAgIHNldFNvcnQoe30pO1xuICAgIHNldEZpbHRlcih7fSk7XG4gICAgZGlzcGF0Y2gocmVzZXRGaWx0ZXIoKSk7XG4gIH07XG5cbiAgY29uc3QgZmV0Y2hEYXRhID0gYXN5bmMgKHBhZ2UpID0+IHtcbiAgICBkaXNwYXRjaChcbiAgICAgIGdldFVzZXJPcmRlcnMoe1xuICAgICAgICBwYWdlLFxuICAgICAgICBwZXJQYWdlOiBvcmRlcnNfcGVyX3BhZ2UsXG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgc29ydFxuICAgICAgfSlcbiAgICApLnRoZW4oKHBheWxvYWQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcGF5bG9hZC5yZXNwb25zZTtcbiAgICAgIGRhdGEuZm9yRWFjaCgob3JkZXIpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgZ2V0VGlja2V0c0J5T3JkZXIoe1xuICAgICAgICAgICAgb3JkZXJJZDogb3JkZXIuaWQsXG4gICAgICAgICAgICBjdXJyZW50X3BhZ2U6IE9ORV9QQUdFX05FWFQsXG4gICAgICAgICAgICBwZXJQYWdlOiB0aWNrZXRfcGVyX3BhZ2VcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaERhdGEob3JkZXJzX2N1cnJlbnRfcGFnZSk7XG4gIH0sIFtmaWx0ZXJdKTtcblxuICBjb25zdCBvbkZpbHRlciA9IChmaWx0ZXIpID0+IHtcbiAgICBzZXRTb3J0KHt9KTtcbiAgICBzZXRGaWx0ZXIoZmlsdGVyKTtcbiAgfTtcbiAgY29uc3Qgb25Tb3J0ID0gKGRpcmVjdGlvbikgPT4ge1xuICAgIHNldEZpbHRlcih7fSk7XG4gICAgc2V0U29ydCh7IGRpcmVjdGlvbiwgbmFtZTogXCJjcmVhdGVkXCIgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8Q3VzdG9tVGhlbWU+XG4gICAgICA8TG9hZGVyIG9wZW49e2xvYWRpbmd9IC8+XG4gICAgICA8RmlsdGVyU29ydFNlYXJjaFxuICAgICAgICBvbkZpbHRlcj17b25GaWx0ZXJ9XG4gICAgICAgIG9uU29ydD17b25Tb3J0fVxuICAgICAgICBvblNlYXJjaD17b25GaWx0ZXJ9XG4gICAgICAgIG9uUmVzZXQ9e29uUmVzZXR9XG4gICAgICAvPlxuICAgICAgPEJveFxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy53aWRnZXRIZWFkZXJ9XG4gICAgICAgIHN4PXt7IHBhZGRpbmc6IHsgeHM6IDIsIG1kOiAwLCBsZzogMCB9IH19XG4gICAgICAgIGRhdGEtdGVzdGlkPVwibXktb3JkZXJzLXRpY2tldC1oZWFkZXJcIlxuICAgICAgPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPXtzdHlsZXMuc3VtbWl0VGl0bGVEYXRlfT57c3VtbWl0Py5uYW1lfTwvaDI+XG4gICAgICAgIDxoMiBjbGFzc05hbWU9e3N0eWxlcy5zdW1taXRUaXRsZURhdGV9PlxuICAgICAgICAgIHtnZXRTdW1taXRGb3JtYXR0ZWREYXRlKHN1bW1pdCl9XG4gICAgICAgIDwvaDI+XG4gICAgICA8L0JveD5cbiAgICAgIHttZW1iZXJPcmRlcnM/Lmxlbmd0aCA/IChcbiAgICAgICAgPEluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgZGF0YUxlbmd0aD17b3JkZXJzX3RvdGFsfVxuICAgICAgICAgIG5leHQ9eygpID0+IGZldGNoRGF0YShvcmRlcnNfY3VycmVudF9wYWdlICsgT05FX1BBR0VfTkVYVCl9XG4gICAgICAgICAgaGFzTW9yZT17b3JkZXJzX2N1cnJlbnRfcGFnZSA8IG9yZGVyc19sYXN0X3BhZ2V9XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkPXsxfVxuICAgICAgICA+XG4gICAgICAgICAge21lbWJlck9yZGVycz8ubWFwKChvcmRlcikgPT4gKFxuICAgICAgICAgICAgPE9yZGVyc0xpc3RcbiAgICAgICAgICAgICAga2V5PXtvcmRlci5udW1iZXIgKyBvcmRlci5pZH1cbiAgICAgICAgICAgICAgb3JkZXI9e29yZGVyfVxuICAgICAgICAgICAgICBzdW1taXQ9e3N1bW1pdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvSW5maW5pdGVTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLm5vT3JkZXJzRm91bmR9Pnt0KFwib3JkZXJzLm5vX29yZGVyc1wiKX08L0JveD5cbiAgICAgICl9XG4gICAgPC9DdXN0b21UaGVtZT5cbiAgKTtcbn07XG5leHBvcnQgZGVmYXVsdCBNeU9yZGVyc1RpY2tldHM7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBHcmlkLCBCb3ggfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IERpdmlkZXIgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvRGl2aWRlclwiO1xuaW1wb3J0IHsgY2FsY3VsYXRlT3JkZXJUb3RhbHMsIGZvcm1hdEN1cnJlbmN5IH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IE9yZGVyU3VtbWFyeVRhYmxlID0gKHsgb3JkZXIsIHN1bW1pdCB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgeyBkaXNjb3VudFRvdGFsLCByZWZ1bmRUb3RhbCwgdGF4ZXNUb3RhbCwgYW1vdW50VG90YWwsIHRpY2tldFN1bW1hcnkgfSA9XG4gICAgY2FsY3VsYXRlT3JkZXJUb3RhbHMoeyBvcmRlciwgc3VtbWl0IH0pO1xuICBjb25zdCBodW5kcmVkID0gMTAwO1xuXG4gIHJldHVybiAoXG4gICAgPEJveCBjbGFzc05hbWU9e3N0eWxlcy5vcmRlclN1bW1hcnlUYWJsZX0+XG4gICAgICB7dGlja2V0U3VtbWFyeT8ubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3RpY2tldFN1bW1hcnkubWFwKCh0aWNrZXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRpY2tldFRvdGFsID1cbiAgICAgICAgICAgICAgKHRpY2tldC5xdHkgKiAodGlja2V0LnRpY2tldF90eXBlLmNvc3QgKiBodW5kcmVkKSkgLyBodW5kcmVkO1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8R3JpZFxuICAgICAgICAgICAgICAgIGNvbnRhaW5lclxuICAgICAgICAgICAgICAgIGtleT17YHRpeG9yZGVyXyR7dGlja2V0LnRpY2tldF90eXBlLmNyZWF0ZWR9YH1cbiAgICAgICAgICAgICAgICBzeD17eyBwYjogMSB9fVxuICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwib3JkZXItc3VtbWFyeS1pdGVtaXplZFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8R3JpZCB4cz17OH0gaXRlbT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICB4e3RpY2tldC5xdHl9IHt0aWNrZXQudGlja2V0X3R5cGUubmFtZX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgICAgICAgPEdyaWQgeHM9ezR9IGl0ZW0gYWxpZ249XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgICAge2Zvcm1hdEN1cnJlbmN5KHRpY2tldFRvdGFsLCB7IGN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeSB9KX1cbiAgICAgICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICAgIHtvcmRlci5kaXNjb3VudF9hbW91bnQgPiAwICYmIChcbiAgICAgICAgPEdyaWQgY29udGFpbmVyIHN4PXt7IHBiOiAxIH19PlxuICAgICAgICAgIDxHcmlkIHhzPXs4fSBpdGVtPlxuICAgICAgICAgICAge3QoXCJvcmRlcl9zdW1tYXJ5LmRpc2NvdW50c1wiKX1cbiAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgPEdyaWQgeHM9ezR9IGl0ZW0gYWxpZ249XCJyaWdodFwiPlxuICAgICAgICAgICAgLXtkaXNjb3VudFRvdGFsfVxuICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgPC9HcmlkPlxuICAgICAgKX1cbiAgICAgIHtvcmRlci50YXhlc19hbW91bnQgPiAwICYmIChcbiAgICAgICAgPEdyaWQgY29udGFpbmVyIHN4PXt7IHBiOiAxIH19PlxuICAgICAgICAgIDxHcmlkIHhzPXs4fSBpdGVtPlxuICAgICAgICAgICAge3QoXCJvcmRlcl9zdW1tYXJ5LnRheGVzXCIpfVxuICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICA8R3JpZCB4cz17NH0gaXRlbSBhbGlnbj1cInJpZ2h0XCI+XG4gICAgICAgICAgICB7dGF4ZXNUb3RhbH1cbiAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgIDwvR3JpZD5cbiAgICAgICl9XG4gICAgICB7b3JkZXIuc3RhdHVzID09PSBcIlBhaWRcIiAmJiAoXG4gICAgICAgIDxHcmlkIGNvbnRhaW5lciBzeD17eyBwYjogMSB9fT5cbiAgICAgICAgICA8R3JpZCB4cz17OH0gaXRlbT5cbiAgICAgICAgICAgIHt0KFwib3JkZXJfc3VtbWFyeS5hbW91bnRfcGFpZFwiKX1cbiAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgPEdyaWQgeHM9ezR9IGl0ZW0gYWxpZ249XCJyaWdodFwiPlxuICAgICAgICAgICAgLXthbW91bnRUb3RhbH1cbiAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgIDwvR3JpZD5cbiAgICAgICl9XG4gICAgICB7cmVmdW5kVG90YWwgPiAwICYmIChcbiAgICAgICAgPEdyaWQgY29udGFpbmVyIHN4PXt7IHBiOiAxIH19PlxuICAgICAgICAgIDxHcmlkIHhzPXs4fSBpdGVtPlxuICAgICAgICAgICAge3QoXCJvcmRlcl9zdW1tYXJ5LnJlZnVuZHNcIil9XG4gICAgICAgICAgPC9HcmlkPlxuICAgICAgICAgIDxHcmlkIHhzPXs0fSBpdGVtIGFsaWduPVwicmlnaHRcIj5cbiAgICAgICAgICAgIHtyZWZ1bmRUb3RhbH1cbiAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgIDwvR3JpZD5cbiAgICAgICl9XG4gICAgICA8RGl2aWRlciAvPlxuICAgICAgPEdyaWQgY29udGFpbmVyIHN4PXt7IHB0OiAxLCBwYjogMSB9fT5cbiAgICAgICAgPEdyaWQgeHM9ezh9IGl0ZW0+XG4gICAgICAgICAge3QoXCJvcmRlcl9zdW1tYXJ5LnRvdGFsXCIpfVxuICAgICAgICA8L0dyaWQ+XG4gICAgICAgIDxHcmlkIHhzPXs0fSBpdGVtIGFsaWduPVwicmlnaHRcIj5cbiAgICAgICAgICB7b3JkZXIuc3RhdHVzID09PSBcIlBhaWRcIiA/IFwiJDAuMDBcIiA6IGFtb3VudFRvdGFsfVxuICAgICAgICA8L0dyaWQ+XG4gICAgICA8L0dyaWQ+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuXG5PcmRlclN1bW1hcnlUYWJsZS5wcm9wVHlwZXMgPSB7XG4gIG9yZGVyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbmN5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRpc2NvdW50X2Ftb3VudDogUHJvcFR5cGVzLm51bWJlcixcbiAgICB0YXhlc19hbW91bnQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgc3RhdHVzOiBQcm9wVHlwZXMuc3RyaW5nXG4gIH0pLFxuICBzdW1taXQ6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE9yZGVyU3VtbWFyeVRhYmxlO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZU5vdyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgdGlja2V0c1JlZnVuZGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdGlja2V0VXRpbHNcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgUmVmdW5kRW1haWxTdXBwb3J0ID0gKHtcbiAgc3VtbWl0LFxuICB0aWNrZXRzLFxuICByZWZ1bmRSZXF1ZXN0ZWQsXG4gIHRpY2tldHNUb1JlZnVuZCxcbiAgc3VibWl0UmVxdWVzdCxcbiAgb25SZWZ1bmRDbGljayxcbiAgb25SZWZ1bmREZXRhaWxDbGljayxcbiAgb25FbWFpbFN1cHBvcnRDbGlja1xufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG5vdyA9IHVzZU5vdygpO1xuICBjb25zdCBpc0luUmVmdW5kYWJsZVBlcmlvZCA9XG4gICAgc3VtbWl0LnJlZ2lzdHJhdGlvbl9hbGxvd2VkX3JlZnVuZF9yZXF1ZXN0X3RpbGxfZGF0ZSA+IG5vdztcbiAgY29uc3QgYXRMZWFzdE9uZVJlZnVuZGFibGVUaWNrZXQgPSB0aWNrZXRzUmVmdW5kYWJsZSh0aWNrZXRzKTtcbiAgY29uc3QgaXNSZWZ1bmRhYmxlID0gISEoaXNJblJlZnVuZGFibGVQZXJpb2QgJiYgYXRMZWFzdE9uZVJlZnVuZGFibGVUaWNrZXQpO1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aXNSZWZ1bmRhYmxlICYmIChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJyZWZ1bmQgcmVxdWVzdCBidXR0b25cIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLm9yZGVyU3VtbWFyeUJ1dHRvbn0gJHtcbiAgICAgICAgICAgIHJlZnVuZFJlcXVlc3RlZCAmJiB0aWNrZXRzVG9SZWZ1bmQubGVuZ3RoID09PSAwICYmICFzdWJtaXRSZXF1ZXN0XG4gICAgICAgICAgICAgID8gc3R5bGVzLnJlZnVuZERpc2FibGVkXG4gICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgIH1gfVxuICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBvbkNsaWNrPXtvblJlZnVuZENsaWNrfVxuICAgICAgICAgIGRpc2FibGVkPXtcbiAgICAgICAgICAgIHJlZnVuZFJlcXVlc3RlZCAmJiB0aWNrZXRzVG9SZWZ1bmQubGVuZ3RoID09PSAwICYmICFzdWJtaXRSZXF1ZXN0XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAge3QoXCJvcmRlcl9zdW1tYXJ5LnJlcXVlc3RfcmVmdW5kXCIpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICl9XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9XCJyZWZ1bmQgZGV0YWlscyBidXR0b25cIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMub3JkZXJTdW1tYXJ5QnV0dG9ufVxuICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICBvbkNsaWNrPXtvblJlZnVuZERldGFpbENsaWNrfVxuICAgICAgPlxuICAgICAgICB7dChcIm9yZGVyX3N1bW1hcnkucmVmdW5kX2RldGFpbHNcIil9XG4gICAgICA8L0J1dHRvbj5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgYXJpYS1sYWJlbD1cImVtYWlsIHN1cHBvcnQgYnV0dG9uXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm9yZGVyU3VtbWFyeUJ1dHRvbn1cbiAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgb25DbGljaz17b25FbWFpbFN1cHBvcnRDbGlja31cbiAgICAgID5cbiAgICAgICAge3QoXCJvcmRlcl9pbmZvLmVtYWlsX3N1cHBvcnRcIil9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8Lz5cbiAgKTtcbn07XG5cblJlZnVuZEVtYWlsU3VwcG9ydC5wcm9wVHlwZXMgPSB7XG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgdGlja2V0czogUHJvcFR5cGVzLmFycmF5T2YoT2JqZWN0KSxcbiAgb25SZWZ1bmRDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUmVmdW5kRGV0YWlsQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbkVtYWlsU3VwcG9ydENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgcmVmdW5kUmVxdWVzdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgdGlja2V0c1RvUmVmdW5kOiBQcm9wVHlwZXMuYXJyYXlPZihPYmplY3QpLFxuICBzdWJtaXRSZXF1ZXN0OiBQcm9wVHlwZXMuYm9vbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVmdW5kRW1haWxTdXBwb3J0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgR3JpZCwgQm94IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCBPcmRlclN1bW1hcnlUYWJsZSBmcm9tIFwiLi9PcmRlclN1bW1hcnlUYWJsZVwiO1xuaW1wb3J0IFJlZnVuZEVtYWlsU3VwcG9ydCBmcm9tIFwiLi9SZWZ1bmRFbWFpbFN1cHBvcnRcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgT3JkZXJTdW1tYXJ5ID0gKHtcbiAgb3JkZXIsXG4gIHN1bW1pdCxcbiAgb25SZWZ1bmRDbGljayxcbiAgcmVmdW5kUmVxdWVzdGVkLFxuICB0aWNrZXRzVG9SZWZ1bmQsXG4gIHN1Ym1pdFJlcXVlc3Rcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Qm94XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm9yZGVyU3VtbWFyeVdyYXBwZXJ9XG4gICAgICAgIHN4PXt7IHB0OiA0LCBweDogNCB9fVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm9yZGVyLXN1bW1hcnktY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAgPGgzPnt0KFwib3JkZXJfc3VtbWFyeS5vcmRlcl9zdW1tYXJ5XCIpfTwvaDM+XG4gICAgICAgIDxHcmlkIGNvbnRhaW5lcj5cbiAgICAgICAgICA8R3JpZFxuICAgICAgICAgICAgeHM9ezEyfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMub3JkZXJTdW1tYXJ5UHVyY2hhc2VkSW5mb31cbiAgICAgICAgICAgIHN4PXt7IHBiOiAzIH19XG4gICAgICAgICAgICBpdGVtXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPE9yZGVyU3VtbWFyeVRhYmxlIG9yZGVyPXtvcmRlcn0gc3VtbWl0PXtzdW1taXR9IC8+XG4gICAgICAgICAgPC9HcmlkPlxuICAgICAgICA8L0dyaWQ+XG4gICAgICA8L0JveD5cbiAgICAgIDxCb3ggeHM9ezEyfSBzeD17eyBwYjogMyB9fT5cbiAgICAgICAgPFJlZnVuZEVtYWlsU3VwcG9ydFxuICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgIHJlZnVuZFJlcXVlc3RlZD17cmVmdW5kUmVxdWVzdGVkfVxuICAgICAgICAgIHRpY2tldHM9e29yZGVyPy5tZW1iZXJUaWNrZXRzfVxuICAgICAgICAgIHRpY2tldHNUb1JlZnVuZD17dGlja2V0c1RvUmVmdW5kfVxuICAgICAgICAgIHN1Ym1pdFJlcXVlc3Q9e3N1Ym1pdFJlcXVlc3R9XG4gICAgICAgICAgb25SZWZ1bmRDbGljaz17b25SZWZ1bmRDbGlja31cbiAgICAgICAgICBvblJlZnVuZERldGFpbENsaWNrPXsoKSA9PiB7fX1cbiAgICAgICAgICBvbkVtYWlsU3VwcG9ydENsaWNrPXsoKSA9PiB7fX1cbiAgICAgICAgLz5cbiAgICAgIDwvQm94PlxuICAgIDwvPlxuICApO1xufTtcbk9yZGVyU3VtbWFyeS5wcm9wVHlwZXMgPSB7XG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgb3JkZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVtYmVyVGlja2V0czogUHJvcFR5cGVzLmFycmF5T2YoT2JqZWN0KVxuICB9KSxcbiAgb25SZWZ1bmRDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIHJlZnVuZFJlcXVlc3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHRpY2tldHNUb1JlZnVuZDogUHJvcFR5cGVzLmFycmF5T2YoT2JqZWN0KSxcbiAgc3VibWl0UmVxdWVzdDogUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE9yZGVyU3VtbWFyeTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IEJveCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmZ1bmN0aW9uIEF0dGVuZGVlU3RhdHVzKHsgdGlja2V0IH0pIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICByZXR1cm4gdGlja2V0Lm93bmVyPy5lbWFpbCA/IChcbiAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT5cbiAgICAgIHt0KFwidGlja2V0X3N0YXR1cy5hc3NpZ25lZF90b1wiKX06XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy50aWNrZXRPd25lckVtYWlsfVxuICAgICAgICBkYXRhLXRlc3RpZD1cImF0dGVuZGVlLXN0YXR1cy1hc3NpZ25lZFwiXG4gICAgICA+XG4gICAgICAgIHtcIiBcIn1cbiAgICAgICAge3RpY2tldC5vd25lcj8uZW1haWx9XG4gICAgICA8L3NwYW4+XG4gICAgPC9Cb3g+XG4gICkgOiAoXG4gICAgdGlja2V0LmlzX2FjdGl2ZSAmJiAoXG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy50aWNrZXRPd25lckVtYWlsfVxuICAgICAgICBkYXRhLXRlc3RpZD1cImF0dGVuZGVlLXN0YXR1cy11bmFzc2lnbmVkXCJcbiAgICAgID5cbiAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLmF0dGVuZGVlX3N0YXR1c191bmFzc2lnbmVkXCIpfVxuICAgICAgPC9zcGFuPlxuICAgIClcbiAgKTtcbn1cblxuQXR0ZW5kZWVTdGF0dXMucHJvcFR5cGVzID0ge1xuICB0aWNrZXQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgb3duZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBlbWFpbDogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuICAgIGlzX2FjdGl2ZTogUHJvcFR5cGVzLmJvb2xcbiAgfSlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEF0dGVuZGVlU3RhdHVzO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IE9yZGVyTGlzdFRpY2tldHMgZnJvbSBcIi4vT3JkZXJMaXN0VGlja2V0c1wiO1xuaW1wb3J0IHsgUEFHSU5BVElPTl9ESVNQTEFZX0NPVU5UIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBPcmRlckxpc3RJdGVtID0gKHtcbiAgc3VtbWl0LFxuICBvcmRlcixcbiAgb25QYWdpbmF0ZUNsaWNrLFxuICByZWZ1bmRSZXF1ZXN0ZWQsXG4gIHRpY2tldHNUb1JlZnVuZCxcbiAgc2VsZWN0VG9SZWZ1bmRcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbaXRlbXNUb0Rpc3BsYXksIHNldEl0ZW1zVG9EaXNwbGF5XSA9IHVzZVN0YXRlKFxuICAgIFBBR0lOQVRJT05fRElTUExBWV9DT1VOVFxuICApO1xuXG4gIGlmICghb3JkZXI/Lm1lbWJlclRpY2tldHM/Lmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHNsaWNlZFRpY2tldHMgPSBvcmRlcj8ubWVtYmVyVGlja2V0cz8uc2xpY2UoMCwgaXRlbXNUb0Rpc3BsYXkpO1xuXG4gIGNvbnN0IG9uVmlld01vcmUgPSAoKSA9PiB7XG4gICAgaWYgKG9yZGVyPy50aWNrZXRzX3RvdGFsID4gb3JkZXI/Lm1lbWJlclRpY2tldHMubGVuZ3RoKSB7XG4gICAgICBvblBhZ2luYXRlQ2xpY2soKTtcbiAgICB9XG4gICAgc2V0SXRlbXNUb0Rpc3BsYXkoaXRlbXNUb0Rpc3BsYXkgKyBQQUdJTkFUSU9OX0RJU1BMQVlfQ09VTlQpO1xuICB9O1xuXG4gIGNvbnN0IG9uVmlld0xlc3MgPSAoKSA9PiBzZXRJdGVtc1RvRGlzcGxheShQQUdJTkFUSU9OX0RJU1BMQVlfQ09VTlQpO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtzbGljZWRUaWNrZXRzPy5tYXAoKHRpY2tldCkgPT4gKFxuICAgICAgICA8T3JkZXJMaXN0VGlja2V0c1xuICAgICAgICAgIGtleT17dGlja2V0LmlkfVxuICAgICAgICAgIHRpY2tldD17dGlja2V0fVxuICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgIHJlZnVuZFJlcXVlc3RlZD17cmVmdW5kUmVxdWVzdGVkfVxuICAgICAgICAgIGlzU2VsZWN0ZWRUb1JlZnVuZD17ISF0aWNrZXRzVG9SZWZ1bmQuZmluZCgodCkgPT4gdC5pZCA9PT0gdGlja2V0LmlkKX1cbiAgICAgICAgICBzZWxlY3RUb1JlZnVuZD17c2VsZWN0VG9SZWZ1bmR9XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICAgIHtvcmRlcj8ubWVtYmVyVGlja2V0cz8ubGVuZ3RoID49IGl0ZW1zVG9EaXNwbGF5ICYmXG4gICAgICBvcmRlcj8ubWVtYmVyVGlja2V0cz8ubGVuZ3RoICE9PSBvcmRlcj8udGlja2V0c190b3RhbCA/IChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJ2aWV3IG1vcmUgYnV0dG9uXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy52aWV3TW9yZUJ1dHRvbn1cbiAgICAgICAgICBvbkNsaWNrPXtvblZpZXdNb3JlfVxuICAgICAgICA+XG4gICAgICAgICAge3QoXCJvcmRlcnMtdGlja2V0cy52aWV3X21vcmVcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKSA6IChcbiAgICAgICAgXCJcIlxuICAgICAgKX1cbiAgICAgIHtzbGljZWRUaWNrZXRzPy5sZW5ndGggPiBQQUdJTkFUSU9OX0RJU1BMQVlfQ09VTlQgJiZcbiAgICAgIHNsaWNlZFRpY2tldHM/Lmxlbmd0aCA9PT0gb3JkZXI/LnRpY2tldHNfdG90YWwgPyAoXG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwidmlldyBsZXNzIGJ1dHRvblwiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudmlld01vcmVCdXR0b259XG4gICAgICAgICAgb25DbGljaz17b25WaWV3TGVzc31cbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwib3JkZXJzLXRpY2tldHMudmlld19sZXNzXCIpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICkgOiAoXG4gICAgICAgIFwiXCJcbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59O1xuXG5PcmRlckxpc3RJdGVtLnByb3BUeXBlcyA9IHtcbiAgb3JkZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgT3JkZXJMaXN0SXRlbTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgR3JpZCwgQnV0dG9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCBTdGFjayBmcm9tIFwiQG11aS9tYXRlcmlhbC9TdGFja1wiO1xuaW1wb3J0IENoZWNrYm94IGZyb20gXCJAbXVpL21hdGVyaWFsL0NoZWNrYm94XCI7XG5pbXBvcnQgVGlja2V0U3RhdHVzIGZyb20gXCIuLi9UaWNrZXRTdGF0dXNcIjtcbmltcG9ydCB7IGdldFN1bW1pdFJlYXNzaWduRGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdW1taXRVdGlsc1wiO1xuaW1wb3J0IHsgdXNlTm93IH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgQXR0ZW5kZWVTdGF0dXMgZnJvbSBcIi4vQXR0ZW5kZWVTdGF0dXNcIjtcbmltcG9ydCBUaWNrZXREZXRhaWwgZnJvbSBcIi4uL1RpY2tldERldGFpbFwiO1xuaW1wb3J0IHsgdXNlVGlja2V0RGV0YWlscyB9IGZyb20gXCIuLi8uLi9ob29rcy91c2VUaWNrZXREZXRhaWxzXCI7XG5pbXBvcnQgVGlja2V0UmVhc3NpZ24gZnJvbSBcIi4uL1RpY2tldFJlYXNzaWduXCI7XG5pbXBvcnQgQ29weVRleHQgZnJvbSBcIi4uL0NvcHlUZXh0XCI7XG5pbXBvcnQgVGlja2V0QXNzaWduIGZyb20gXCIuLi9UaWNrZXRBc3NpZ25cIjtcblxuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBtb2RhbFZpZXdzID0ge1xuICBkZXRhaWw6IFwiREVUQUlMXCIsXG4gIHJlYXNzaWduOiBcIlJFQVNTSUdOXCIsXG4gIGFzc2lnbjogXCJBU1NJR05cIlxufTtcblxuY29uc3QgVGlja2V0Q1RBcyA9ICh7XG4gIGlzSW5jb21wbGV0ZSxcbiAgaXNVbmFzc2lnbmVkLFxuICBpc1JlYXNzaWduYWJsZSxcbiAgb25PcGVuQ2xpY2tcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGlmIChpc1VuYXNzaWduZWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hc3NpZ25UaWNrZXRCdXR0b259XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uT3BlbkNsaWNrKG1vZGFsVmlld3MuYXNzaWduKX1cbiAgICAgID5cbiAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLmFzc2lnbl90aWNrZXRcIil9XG4gICAgICA8L0J1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3RhY2tcbiAgICAgIHN4PXt7XG4gICAgICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIixcbiAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICB9fVxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBkaXJlY3Rpb249XCJyb3dcIlxuICAgID5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudmlld0ZpbmlzaFRpY2tldEJ1dHRvbn1cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25PcGVuQ2xpY2sobW9kYWxWaWV3cy5kZXRhaWwpfVxuICAgICAgPlxuICAgICAgICB7aXNJbmNvbXBsZXRlXG4gICAgICAgICAgPyB0KFwidGlja2V0X3N0YXR1cy5maW5pc2hfdGlja2V0XCIpXG4gICAgICAgICAgOiB0KFwidGlja2V0X3N0YXR1cy52aWV3X3RpY2tldFwiKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAge2lzUmVhc3NpZ25hYmxlICYmIChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJyZWFzc2lnbiB0aWNrZXQgYnV0dG9uXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5yZWFzc2lnbkJ1dHRvbn1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbk9wZW5DbGljayhtb2RhbFZpZXdzLnJlYXNzaWduKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwidGlja2V0X3N0YXR1cy5yZWFzc2lnbl90aWNrZXRcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1N0YWNrPlxuICApO1xufTtcblxuVGlja2V0Q1RBcy5wcm9wVHlwZXMgPSB7XG4gIGlzSW5jb21wbGV0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzVW5hc3NpZ25lZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzUmVhc3NpZ25hYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25PcGVuQ2xpY2s6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5jb25zdCBPcmRlckxpc3RUaWNrZXRzID0gKHtcbiAgdGlja2V0LFxuICBzdW1taXQsXG4gIHJlZnVuZFJlcXVlc3RlZCxcbiAgaXNTZWxlY3RlZFRvUmVmdW5kLFxuICBzZWxlY3RUb1JlZnVuZFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG5vdyA9IHVzZU5vdygpO1xuICBjb25zdCB7IGlzUmVmdW5kYWJsZSwgaXNVbmFzc2lnbmVkLCBpc0luY29tcGxldGUsIGNhblJlYXNzaWduIH0gPVxuICAgIHVzZVRpY2tldERldGFpbHModGlja2V0KTtcbiAgY29uc3QgW21vZGFsT3Blbiwgc2V0TW9kYWxPcGVuXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCByZWFzc2lnbkRhdGUgPSBnZXRTdW1taXRSZWFzc2lnbkRhdGUoc3VtbWl0KTtcbiAgY29uc3QgaXNSZWFzc2lnbmFibGUgPSByZWFzc2lnbkRhdGUgPiBub3c7XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICBzZXRNb2RhbE9wZW4obnVsbCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlT3Blbk1vZGFsID0gKHZpZXcpID0+IHtcbiAgICBzZXRNb2RhbE9wZW4odmlldyk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8R3JpZFxuICAgICAga2V5PXt0aWNrZXQuaWR9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy5vcmRlcldyYXBwZXJ9XG4gICAgICBjb250YWluZXJcbiAgICAgIGRhdGEtdGVzdGlkPVwib3JkZXItbGlzdC10aWNrZXRcIlxuICAgID5cbiAgICAgIDxHcmlkXG4gICAgICAgIHhzPXs4fVxuICAgICAgICBwYWRkaW5nPXsyfVxuICAgICAgICBpdGVtNVxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy50aWNrZXRUaWNrZXRUeXBlfVxuICAgICAgICBqdXN0aWZ5PVwic3BhY2UtYmV0d2VlblwiXG4gICAgICA+XG4gICAgICAgIDxTdGFja1xuICAgICAgICAgIHN4PXt7XG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJmbGV4LXN0YXJ0XCJcbiAgICAgICAgICB9fVxuICAgICAgICAgIGRpcmVjdGlvbj1cInJvd1wiXG4gICAgICAgID5cbiAgICAgICAgICB7cmVmdW5kUmVxdWVzdGVkICYmIGlzUmVmdW5kYWJsZSAmJiAoXG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cInJlZnVuZCB0aWNrZXQgY2hlY2tib3hcIlxuICAgICAgICAgICAgICByb2xlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBjaGVja2VkPXtpc1NlbGVjdGVkVG9SZWZ1bmR9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2VsZWN0VG9SZWZ1bmQoZSwgdGlja2V0KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8aDQ+e3RpY2tldC50aWNrZXRfdHlwZT8ubmFtZX08L2g0PlxuICAgICAgICA8L1N0YWNrPlxuICAgICAgPC9HcmlkPlxuICAgICAgPEdyaWQgeHM9ezR9IHBhZGRpbmc9ezJ9IGl0ZW0+XG4gICAgICAgIHsvKiBUbyBhZGQgYmFkZ2UgZmVhdHVyZXMgKi99XG4gICAgICA8L0dyaWQ+XG4gICAgICA8R3JpZCB4cz17MTJ9IHN4PXt7IHB4OiAyLCBwYjogMiB9fSBpdGVtPlxuICAgICAgICA8QXR0ZW5kZWVTdGF0dXMgdGlja2V0PXt0aWNrZXR9IC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnRpY2tldE5vfT5cbiAgICAgICAgICB7dChcInRpY2tldF9zdGF0dXMudGlja2V0X25vXCIpfTp7XCIgXCJ9XG4gICAgICAgICAgPENvcHlUZXh0XG4gICAgICAgICAgICB0ZXh0PXt0aWNrZXQubnVtYmVyfVxuICAgICAgICAgICAgdG9vbHRpcFRleHQ9e3QoXCJ0aWNrZXRfc3RhdHVzLmNvcHlfdGlja2V0X251bWJlclwiKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L0dyaWQ+XG4gICAgICA8R3JpZCBjb250YWluZXI+XG4gICAgICAgIDxHcmlkIGNvbnRhaW5lciBkaXJlY3Rpb249XCJyb3dcIiB4cz17MTJ9IGxnPXs2fSBhbGlnbkl0ZW1zPVwiY2VudGVyXCIgaXRlbT5cbiAgICAgICAgICA8VGlja2V0U3RhdHVzIHRpY2tldD17dGlja2V0fSAvPlxuICAgICAgICA8L0dyaWQ+XG4gICAgICAgIDxHcmlkIHBhZGRpbmc9ezJ9IHhzPXsxMn0gbGc9ezZ9IGNvbnRhaW5lciBpdGVtPlxuICAgICAgICAgIDxHcmlkXG4gICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICBjb250YWluZXJcbiAgICAgICAgICAgIGFsaWduPVwiY2VudGVyXCJcbiAgICAgICAgICAgIHN4PXt7XG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIlxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRpY2tldEFjdGlvbkJ1dHRvbnN9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RpY2tldC5pc19hY3RpdmUgJiYgKFxuICAgICAgICAgICAgICA8VGlja2V0Q1RBc1xuICAgICAgICAgICAgICAgIGlzVW5hc3NpZ25lZD17aXNVbmFzc2lnbmVkfVxuICAgICAgICAgICAgICAgIGlzSW5jb21wbGV0ZT17aXNJbmNvbXBsZXRlfVxuICAgICAgICAgICAgICAgIGlzUmVhc3NpZ25hYmxlPXtpc1JlYXNzaWduYWJsZSAmJiBjYW5SZWFzc2lnbn1cbiAgICAgICAgICAgICAgICBvbk9wZW5DbGljaz17aGFuZGxlT3Blbk1vZGFsfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgIDwvR3JpZD5cbiAgICAgIDwvR3JpZD5cbiAgICAgIDxUaWNrZXREZXRhaWxcbiAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgIHRpY2tldElkPXt0aWNrZXQ/LmlkfVxuICAgICAgICBvcmRlcklkPXt0aWNrZXQ/Lm9yZGVyX2lkfVxuICAgICAgICBvd25lcklkPXt0aWNrZXQ/Lm93bmVyPy5pZH1cbiAgICAgICAgb3Blbj17bW9kYWxPcGVuID09PSBtb2RhbFZpZXdzLmRldGFpbH1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VNb2RhbH1cbiAgICAgIC8+XG4gICAgICA8VGlja2V0UmVhc3NpZ25cbiAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgIHRpY2tldElkPXt0aWNrZXQ/LmlkfVxuICAgICAgICBvcmRlcklkPXt0aWNrZXQ/Lm9yZGVyX2lkfVxuICAgICAgICBvd25lcklkPXt0aWNrZXQ/Lm93bmVyPy5pZH1cbiAgICAgICAgb3Blbj17bW9kYWxPcGVuID09PSBtb2RhbFZpZXdzLnJlYXNzaWdufVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZU1vZGFsfVxuICAgICAgLz5cbiAgICAgIDxUaWNrZXRBc3NpZ25cbiAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgIHRpY2tldElkPXt0aWNrZXQ/LmlkfVxuICAgICAgICBvcmRlcklkPXt0aWNrZXQ/Lm9yZGVyX2lkfVxuICAgICAgICBvd25lcklkPXt0aWNrZXQ/Lm93bmVyPy5pZH1cbiAgICAgICAgb3Blbj17bW9kYWxPcGVuID09PSBtb2RhbFZpZXdzLmFzc2lnbn1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VNb2RhbH1cbiAgICAgIC8+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuT3JkZXJMaXN0VGlja2V0cy5wcm9wVHlwZXMgPSB7XG4gIHRpY2tldDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpZDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvcmRlcl9pZDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvd25lcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGlkOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgZW1haWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICBudW1iZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdG90YWxfcmVmdW5kZWRfYW1vdW50OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHRpY2tldF90eXBlOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZ1xuICAgIH0pLFxuICAgIGlzX2FjdGl2ZTogUHJvcFR5cGVzLmJvb2xcbiAgfSksXG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgcmVmdW5kUmVxdWVzdGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNTZWxlY3RlZFRvUmVmdW5kOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VsZWN0VG9SZWZ1bmQ6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBPcmRlckxpc3RUaWNrZXRzO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBHcmlkLCBCb3gsIEJ1dHRvbiB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvU3RhY2tcIjtcbmltcG9ydCBUYWJzIGZyb20gXCJAbXVpL21hdGVyaWFsL1RhYnNcIjtcbmltcG9ydCBUYWIgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvVGFiXCI7XG5pbXBvcnQgT3JkZXJMaXN0SXRlbSBmcm9tIFwiLi9PcmRlckxpc3RJdGVtXCI7XG5pbXBvcnQgT3JkZXJTdW1tYXJ5IGZyb20gXCIuLi9PcmRlclN1bW1hcnlcIjtcbmltcG9ydCBSZWZ1bmRSZXF1ZXN0c01vZGFsIGZyb20gXCIuLi9SZWZ1bmRSZXF1ZXN0c1wiO1xuaW1wb3J0IEVycm9yTGFiZWwgZnJvbSBcIi4uL0xhYmVscy9FcnJvckxhYmVsXCI7XG5pbXBvcnQgeyBpc1RpY2tldFJlZnVuZGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdGlja2V0VXRpbHNcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgVGFiUGFuZWwgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgdmFsdWUsIGluZGV4IH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByb2xlPVwidGFicGFuZWxcIlxuICAgICAgaGlkZGVuPXt2YWx1ZSAhPT0gaW5kZXh9XG4gICAgICBpZD17YHRhYnBhbmVsLSR7aW5kZXh9YH1cbiAgICAgIGFyaWEtbGFiZWxsZWRieT17YHRhYi0ke2luZGV4fWB9XG4gICAgPlxuICAgICAge3ZhbHVlID09PSBpbmRleCAmJiBjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbmNvbnN0IE9yZGVyc0xpc3REZXNrdG9wTW9iaWxlID0gKHtcbiAgc3VtbWl0LFxuICBvcmRlcixcbiAgaXNNb2JpbGUsXG4gIGRldGFpbHNSZXF1aXJlZCxcbiAgb25QYWdpbmF0ZUNsaWNrXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKF8sIG5ld1ZhbHVlKSA9PiB7XG4gICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICB9O1xuICBjb25zdCBbcmVmdW5kUmVxdWVzdGVkLCBzZXRSZWZ1bmRSZXF1ZXN0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbdGlja2V0c1RvUmVmdW5kLCBzZXRUaWNrZXRzVG9SZWZ1bmRdID0gdXNlU3RhdGUoW10pO1xuICBjb25zdCBbc3VibWl0UmVxdWVzdCwgc2V0U3VibWl0UmVxdWVzdF0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgb25SZWZ1bmRDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGlja2V0c1RvUmVmdW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2V0UmVmdW5kUmVxdWVzdGVkKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTdWJtaXRSZXF1ZXN0KHRydWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgdW5zZWxlY3RSZWZ1bmRUaWNrZXRzID0gKHRpY2tldCkgPT4ge1xuICAgIGNvbnN0IGZpbHRlclNlbGVjdGVkID0gdGlja2V0c1RvUmVmdW5kLmZpbHRlcigodCkgPT4gdC5pZCAhPT0gdGlja2V0LmlkKTtcbiAgICBzZXRUaWNrZXRzVG9SZWZ1bmQoZmlsdGVyU2VsZWN0ZWQpO1xuICB9O1xuICBjb25zdCBzZWxlY3RUb1JlZnVuZCA9IChlLCB0aWNrZXQpID0+IHtcbiAgICBjb25zdCB7IGNoZWNrZWQgfSA9IGUudGFyZ2V0O1xuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFRpY2tldCA9IG9yZGVyPy5tZW1iZXJUaWNrZXRzPy5maW5kKFxuICAgICAgICAodCkgPT4gdC5pZCA9PT0gdGlja2V0LmlkXG4gICAgICApO1xuICAgICAgc2V0VGlja2V0c1RvUmVmdW5kKFsuLi50aWNrZXRzVG9SZWZ1bmQsIHNlbGVjdGVkVGlja2V0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2VsZWN0UmVmdW5kVGlja2V0cyh0aWNrZXQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY2FuY2VsVGlja2V0c1RvUmVmdW5kID0gKCkgPT4ge1xuICAgIHNldFJlZnVuZFJlcXVlc3RlZChmYWxzZSk7XG4gICAgc2V0VGlja2V0c1RvUmVmdW5kKFtdKTtcbiAgfTtcblxuICBjb25zdCBzZWxlY3RBbGxUaWNrZXRzID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlZnVuZGFibGVUaWNrZXRzID0gb3JkZXI/Lm1lbWJlclRpY2tldHM/LmZpbHRlcihcbiAgICAgICh0aWNrZXQpID0+IGlzVGlja2V0UmVmdW5kYWJsZSh0aWNrZXQpID09PSB0cnVlXG4gICAgKTtcbiAgICBzZXRUaWNrZXRzVG9SZWZ1bmQocmVmdW5kYWJsZVRpY2tldHMpO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0QWxsUmVmdW5kU3RhdHVzZXMgPSAoKSA9PiB7XG4gICAgc2V0UmVmdW5kUmVxdWVzdGVkKGZhbHNlKTtcbiAgICBzZXRTdWJtaXRSZXF1ZXN0KGZhbHNlKTtcbiAgICBzZXRUaWNrZXRzVG9SZWZ1bmQoW10pO1xuICB9O1xuXG4gIGNvbnN0IG1vcmVEZXRhaWxzID0gKCkgPT5cbiAgICBkZXRhaWxzUmVxdWlyZWQgJiYgKFxuICAgICAgPEVycm9yTGFiZWxcbiAgICAgICAgbWVzc2FnZT17dChcInRpY2tldF9zdGF0dXMuc3RhdHVzX2RldGFpbHNfcmVxdWlyZWRcIil9XG4gICAgICAgIGNvbG9yPVwiI2ZmOTgwMFwiXG4gICAgICAgIGRhdGFUZXN0SWQ9XCJtb3JlLWRldGFpbHMtbGFiZWxcIlxuICAgICAgLz5cbiAgICApO1xuXG4gIHJldHVybiBpc01vYmlsZSA/IChcbiAgICA8Qm94XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50aWNrZXRMaXN0Q29udGFpbmVyfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2JpbGUtb3JkZXJzLWxpc3QtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICA8Qm94IHN4PXt7IGJvcmRlckNvbG9yOiBcImRpdmlkZXJcIiwgcGI6IDIgfX0+XG4gICAgICAgIDxUYWJzXG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgdGV4dENvbG9yPVwiIzAwMFwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIlRpY2tldHMgJiBTdW1tYXJ5XCJcbiAgICAgICAgICBUYWJJbmRpY2F0b3JQcm9wcz17e1xuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCIjMDAwXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFRhYiBsYWJlbD17dChcImxhYmVscy50aWNrZXRzXCIpfSBjbGFzc05hbWU9e3N0eWxlcy50YWJCdXR0b25zfSAvPlxuICAgICAgICAgIDxUYWIgbGFiZWw9e3QoXCJsYWJlbHMuc3VtbWFyeVwiKX0gY2xhc3NOYW1lPXtzdHlsZXMudGFiQnV0dG9uc30gLz5cbiAgICAgICAgPC9UYWJzPlxuICAgICAgPC9Cb3g+XG4gICAgICB7bW9yZURldGFpbHMoKX1cbiAgICAgIDxUYWJQYW5lbCB2YWx1ZT17dmFsdWV9IGluZGV4PXswfT5cbiAgICAgICAgPE9yZGVyTGlzdEl0ZW1cbiAgICAgICAgICBzdW1taXQ9e3N1bW1pdH1cbiAgICAgICAgICBvcmRlcj17b3JkZXJ9XG4gICAgICAgICAgb25QYWdpbmF0ZUNsaWNrPXtvblBhZ2luYXRlQ2xpY2t9XG4gICAgICAgICAgcmVmdW5kUmVxdWVzdGVkPXtyZWZ1bmRSZXF1ZXN0ZWR9XG4gICAgICAgICAgdGlja2V0c1RvUmVmdW5kPXt0aWNrZXRzVG9SZWZ1bmR9XG4gICAgICAgICAgc2VsZWN0VG9SZWZ1bmQ9e3NlbGVjdFRvUmVmdW5kfVxuICAgICAgICAgIHN1Ym1pdFJlcXVlc3Q9e3N1Ym1pdFJlcXVlc3R9XG4gICAgICAgICAgdW5zZWxlY3RSZWZ1bmRUaWNrZXRzPXt1bnNlbGVjdFJlZnVuZFRpY2tldHN9XG4gICAgICAgIC8+XG4gICAgICA8L1RhYlBhbmVsPlxuICAgICAgPFRhYlBhbmVsIHZhbHVlPXt2YWx1ZX0gaW5kZXg9ezF9PlxuICAgICAgICA8T3JkZXJTdW1tYXJ5XG4gICAgICAgICAgb3JkZXI9e29yZGVyfVxuICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgIG9uUmVmdW5kQ2xpY2s9e29uUmVmdW5kQ2xpY2t9XG4gICAgICAgICAgdGlja2V0c1RvUmVmdW5kPXt0aWNrZXRzVG9SZWZ1bmR9XG4gICAgICAgICAgcmVmdW5kUmVxdWVzdGVkPXtyZWZ1bmRSZXF1ZXN0ZWR9XG4gICAgICAgICAgc3VibWl0UmVxdWVzdD17c3VibWl0UmVxdWVzdH1cbiAgICAgICAgLz5cbiAgICAgIDwvVGFiUGFuZWw+XG4gICAgPC9Cb3g+XG4gICkgOiAoXG4gICAgPD5cbiAgICAgIDxHcmlkIGl0ZW0gbWQ9ezEyfT5cbiAgICAgICAge21vcmVEZXRhaWxzKCl9XG4gICAgICA8L0dyaWQ+XG4gICAgICB7cmVmdW5kUmVxdWVzdGVkICYmIChcbiAgICAgICAgPEdyaWQgaXRlbSBtZD17MTJ9PlxuICAgICAgICAgIDxzcGFuPnt0KFwidGlja2V0X3N0YXR1cy5zZWxlY3RfdGlja2V0X3JlZnVuZFwiKX08L3NwYW4+XG4gICAgICAgICAgPFN0YWNrXG4gICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJmbGV4LXN0YXJ0XCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgICAgIGRpcmVjdGlvbj1cInJvd1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucmVmdW5kQnV0dG9uc31cbiAgICAgICAgICAgICAgb25DbGljaz17c2VsZWN0QWxsVGlja2V0c31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLnNlbGVjdF9hbGxcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnJlZnVuZEJ1dHRvbnN9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NhbmNlbFRpY2tldHNUb1JlZnVuZH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLnNlbGVjdF9jYW5jZWxcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1N0YWNrPlxuICAgICAgICA8L0dyaWQ+XG4gICAgICApfVxuICAgICAgPEdyaWRcbiAgICAgICAgcGFkZGluZz17MX1cbiAgICAgICAgaXRlbVxuICAgICAgICBtZD17N31cbiAgICAgICAgb3JkZXI9e3sgbWQ6IDEgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudGlja2V0TGlzdENvbnRhaW5lcn1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJkZXNrdG9wLW9yZGVycy1saXN0LWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIDxPcmRlckxpc3RJdGVtXG4gICAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgICAgb3JkZXI9e29yZGVyfVxuICAgICAgICAgIG9uUGFnaW5hdGVDbGljaz17b25QYWdpbmF0ZUNsaWNrfVxuICAgICAgICAgIHJlZnVuZFJlcXVlc3RlZD17cmVmdW5kUmVxdWVzdGVkfVxuICAgICAgICAgIHRpY2tldHNUb1JlZnVuZD17dGlja2V0c1RvUmVmdW5kfVxuICAgICAgICAgIHNlbGVjdFRvUmVmdW5kPXtzZWxlY3RUb1JlZnVuZH1cbiAgICAgICAgICBzdWJtaXRSZXF1ZXN0PXtzdWJtaXRSZXF1ZXN0fVxuICAgICAgICAgIHVuc2VsZWN0UmVmdW5kVGlja2V0cz17dW5zZWxlY3RSZWZ1bmRUaWNrZXRzfVxuICAgICAgICAvPlxuICAgICAgPC9HcmlkPlxuICAgICAgPEdyaWQgcGFkZGluZz17MX0gaXRlbSBtZD17NX0gb3JkZXI9e3sgbWQ6IDEgfX0+XG4gICAgICAgIDxPcmRlclN1bW1hcnlcbiAgICAgICAgICBzdW1taXQ9e3N1bW1pdH1cbiAgICAgICAgICBvcmRlcj17b3JkZXJ9XG4gICAgICAgICAgb25SZWZ1bmRDbGljaz17b25SZWZ1bmRDbGlja31cbiAgICAgICAgICB0aWNrZXRzVG9SZWZ1bmQ9e3RpY2tldHNUb1JlZnVuZH1cbiAgICAgICAgICByZWZ1bmRSZXF1ZXN0ZWQ9e3JlZnVuZFJlcXVlc3RlZH1cbiAgICAgICAgICBzdWJtaXRSZXF1ZXN0PXtzdWJtaXRSZXF1ZXN0fVxuICAgICAgICAvPlxuICAgICAgPC9HcmlkPlxuICAgICAgPFJlZnVuZFJlcXVlc3RzTW9kYWxcbiAgICAgICAgdGlja2V0cz17dGlja2V0c1RvUmVmdW5kfVxuICAgICAgICBvcGVuPXtzdWJtaXRSZXF1ZXN0fVxuICAgICAgICBvblJlbW92ZVNlbGVjdGVkUmVmdW5kVGlja2V0cz17dW5zZWxlY3RSZWZ1bmRUaWNrZXRzfVxuICAgICAgICBvblJlZnVuZFN1Y2Nlc3NDbG9zZT17KCkgPT4gcmVzZXRBbGxSZWZ1bmRTdGF0dXNlcygpfVxuICAgICAgICBvbkNsb3NlU2xpZGVyPXsoKSA9PiBzZXRTdWJtaXRSZXF1ZXN0KGZhbHNlKX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59O1xuXG5PcmRlclN1bW1hcnkucHJvcFR5cGVzID0ge1xuICBzdW1taXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9yZGVyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lbWJlclRpY2tldHM6IFByb3BUeXBlcy5hcnJheU9mKE9iamVjdClcbiAgfSksXG4gIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGV0YWlsc1JlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25QYWdpbmF0ZUNsaWNrOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgT3JkZXJzTGlzdERlc2t0b3BNb2JpbGU7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3Rvciwgc2hhbGxvd0VxdWFsIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBHcmlkLCBCb3gsIEJ1dHRvbiB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gXCJAbXVpL21hdGVyaWFsL3N0eWxlc1wiO1xuaW1wb3J0IHVzZU1lZGlhUXVlcnkgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvdXNlTWVkaWFRdWVyeVwiO1xuaW1wb3J0IHsgZ2V0VGlja2V0c0J5T3JkZXIgfSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xuaW1wb3J0IHsgZ2V0Rm9ybWF0dGVkRGF0ZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgT05FX1BBR0VfTkVYVCB9IGZyb20gXCIuLi8uLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCBPcmRlcnNMaXN0RGVza3RvcE1vYmlsZSBmcm9tIFwiLi9PcmRlcnNMaXN0RGVza3RvcE1vYmlsZVwiO1xuaW1wb3J0IENvcHlUZXh0IGZyb20gXCIuLi9Db3B5VGV4dFwiO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBPcmRlcnNMaXN0ID0gKHsgc3VtbWl0LCBvcmRlciB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCB7IHRpY2tldF9wZXJfcGFnZSB9ID0gdXNlU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS53aWRnZXRTdGF0ZSB8fCB7fSxcbiAgICBzaGFsbG93RXF1YWxcbiAgKTtcbiAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICBjb25zdCBpc01vYmlsZSA9IHVzZU1lZGlhUXVlcnkodGhlbWUuYnJlYWtwb2ludHMuZG93bihcImxnXCIpKTtcbiAgY29uc3QgW2lzTW9iaWxlVmlld2FibGUsIHNldE1vYmlsZVZpZXdhYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgZGV0YWlsc1JlcXVpcmVkID0gb3JkZXIubWVtYmVyVGlja2V0cz8uZmluZChcbiAgICAodGlja2V0KSA9PiB0aWNrZXQub3duZXI/LnN0YXR1cyA9PT0gXCJJbmNvbXBsZXRlXCJcbiAgKTtcblxuICBjb25zdCBvblBhZ2luYXRlQ2xpY2sgPSAoKSA9PlxuICAgIGRpc3BhdGNoKFxuICAgICAgZ2V0VGlja2V0c0J5T3JkZXIoe1xuICAgICAgICBvcmRlcklkOiBvcmRlci5pZCxcbiAgICAgICAgcGFnZTogb3JkZXIudGlja2V0c19wYWdlX2N1cnJlbnQgKyBPTkVfUEFHRV9ORVhULFxuICAgICAgICBwZXJQYWdlOiB0aWNrZXRfcGVyX3BhZ2UsXG4gICAgICAgIG5leHQ6IHRydWVcbiAgICAgIH0pXG4gICAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8Qm94XG4gICAgICAgIHN4PXt7XG4gICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgeHM6IDIsXG4gICAgICAgICAgICBtZDogMSxcbiAgICAgICAgICAgIGxnOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5vcmRlclRpY2tldEluZm9Db250YWluZXJ9XG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMub3JkZXJUaWNrZXRJbmZvfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwib3JkZXItdGlja2V0LWluZm8tY29udGFpbmVyXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwib3JkZXJzLnB1cmNoYXNlZFwiKX06IHtnZXRGb3JtYXR0ZWREYXRlKG9yZGVyLmNyZWF0ZWQpfSB8e1wiIFwifVxuICAgICAgICAgIHt0KFwib3JkZXJfc3VtbWFyeS5vcmRlcl9ub1wiKX06e1wiIFwifVxuICAgICAgICAgIDxDb3B5VGV4dFxuICAgICAgICAgICAgdGV4dD17b3JkZXIubnVtYmVyfVxuICAgICAgICAgICAgdG9vbHRpcFRleHQ9e3QoXCJvcmRlcl9zdW1tYXJ5LmNvcHlfb3JkZXJfbnVtYmVyXCIpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge2lzTW9iaWxlICYmIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBzeD17eyBwYWRkaW5nOiAwIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5ibGFja0J1dHRvbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldE1vYmlsZVZpZXdhYmxlKCFpc01vYmlsZVZpZXdhYmxlKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7aXNNb2JpbGVWaWV3YWJsZVxuICAgICAgICAgICAgICA/IHQoXCJ0aWNrZXRfc3RhdHVzLmhpZGVfdGlja2V0c1wiKVxuICAgICAgICAgICAgICA6IHQoXCJ0aWNrZXRfc3RhdHVzLnZpZXdfdGlja2V0c1wiKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgIDwvQm94PlxuICAgICAgPEdyaWRcbiAgICAgICAga2V5PXtvcmRlci5pZH1cbiAgICAgICAgY29udGFpbmVyXG4gICAgICAgIHJvd1NwYWNpbmc9ezF9XG4gICAgICAgIGNvbHVtblNwYWNpbmc9e3sgeHM6IDEsIHNtOiAyLCBtZDogMyB9fVxuICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5vcmRlclRpY2tldENvbnRhaW5lcn0gJHtcbiAgICAgICAgICBpc01vYmlsZSAmJiAhaXNNb2JpbGVWaWV3YWJsZSA/IHN0eWxlcy5kaXNwbGF5X25vbmUgOiBcIlwiXG4gICAgICAgIH1gfVxuICAgICAgICBzeD17e1xuICAgICAgICAgIGZsZXhEaXJlY3Rpb246IHtcbiAgICAgICAgICAgIG1kOiBcInJvd1wiLFxuICAgICAgICAgICAgbGc6IFwicm93XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgIHhzOiAyLFxuICAgICAgICAgICAgbWQ6IDAsXG4gICAgICAgICAgICBsZzogMFxuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPE9yZGVyc0xpc3REZXNrdG9wTW9iaWxlXG4gICAgICAgICAgaXNNb2JpbGU9e2lzTW9iaWxlfVxuICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgIG9yZGVyPXtvcmRlcn1cbiAgICAgICAgICBkZXRhaWxzUmVxdWlyZWQ9e2RldGFpbHNSZXF1aXJlZH1cbiAgICAgICAgICBvblBhZ2luYXRlQ2xpY2s9e29uUGFnaW5hdGVDbGlja31cbiAgICAgICAgLz5cbiAgICAgIDwvR3JpZD5cbiAgICA8Lz5cbiAgKTtcbn07XG5cbk9yZGVyc0xpc3QucHJvcFR5cGVzID0ge1xuICBzdW1taXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9yZGVyOiBQcm9wVHlwZXMub2JqZWN0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBPcmRlcnNMaXN0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgR3JpZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvU3RhY2tcIjtcbmltcG9ydCBEZWxldGVPdXRsaW5lSWNvbiBmcm9tIFwiQG11aS9pY29ucy1tYXRlcmlhbC9EZWxldGVPdXRsaW5lXCI7XG5pbXBvcnQgQXR0ZW5kZWVTdGF0dXMgZnJvbSBcIi4uL09yZGVyc0xpc3QvQXR0ZW5kZWVTdGF0dXNcIjtcbmltcG9ydCBDb3B5VGV4dCBmcm9tIFwiLi4vQ29weVRleHRcIjtcblxuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBSZWZ1bmRSZXF1ZXN0ZWRUaWNrZXQgPSAoeyB0aWNrZXQsIG9uUmVtb3ZlIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIHJldHVybiAoXG4gICAgPEdyaWRcbiAgICAgIGNvbnRhaW5lclxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucmVmdW5kVGlja2V0Qm94Q29udGFpbmVyfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJyZWZ1bmQtcmVxdWVzdGVkLXRpY2tldC1jb250YWluZXJcIlxuICAgID5cbiAgICAgIDxHcmlkIHhzPXsxMn0gcGFkZGluZz17Mn0gaXRlbSBqdXN0aWZ5PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICA8U3RhY2tcbiAgICAgICAgICBzeD17e1xuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiXG4gICAgICAgICAgfX1cbiAgICAgICAgICBkaXJlY3Rpb249XCJyb3dcIlxuICAgICAgICA+XG4gICAgICAgICAgPGg0Pnt0aWNrZXQudGlja2V0X3R5cGU/Lm5hbWV9PC9oND5cbiAgICAgICAgICA8RGVsZXRlT3V0bGluZUljb25cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicmVmdW5kLXJlbW92ZS1idXR0b25cIlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuZGVsZXRlSWNvbn1cbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uUmVtb3ZlKHRpY2tldCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TdGFjaz5cbiAgICAgIDwvR3JpZD5cbiAgICAgIDxHcmlkIHhzPXsxMn0gcGFkZGluZz17Mn0gaXRlbT5cbiAgICAgICAgPEF0dGVuZGVlU3RhdHVzIHRpY2tldD17dGlja2V0fSAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy50aWNrZXROb30+XG4gICAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLnRpY2tldF9ub1wiKX06e1wiIFwifVxuICAgICAgICAgIDxDb3B5VGV4dCB0ZXh0PXt0aWNrZXQubnVtYmVyfSBoaWRlQ29weSAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L0dyaWQ+XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuUmVmdW5kUmVxdWVzdGVkVGlja2V0LnByb3BUeXBlcyA9IHtcbiAgdGlja2V0OiBQcm9wVHlwZXMub2JqZWN0LFxuICBvblJlbW92ZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlZnVuZFJlcXVlc3RlZFRpY2tldDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IEJveCwgQnV0dG9uLCBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgQ2hlY2tDaXJjbGVJY29uIGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrQ2lyY2xlXCI7XG5pbXBvcnQgTXVsdGlTdGVwU2xpZGVyIGZyb20gXCIuLi9NdWx0aVN0ZXBTbGlkZXJcIjtcbmltcG9ydCBSZWZ1bmRSZXF1ZXN0ZWRUaWNrZXQgZnJvbSBcIi4vUmVmdW5kUmVxdWVzdGVkVGlja2V0XCI7XG5pbXBvcnQgRXJyb3JMYWJlbCBmcm9tIFwiLi4vTGFiZWxzL0Vycm9yTGFiZWxcIjtcbmltcG9ydCB7IHJlZnVuZEJ1bGtUaWNrZXRzLCB1cGRhdGVUaWNrZXRzUmVmdW5kUmVxdWVzdGVkIH0gZnJvbSBcIi4uLy4uL2FjdGlvbnNcIjtcbmltcG9ydCB7IFNURVBfT05FLCBTVEVQX1RXTyB9IGZyb20gXCIuLi8uLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgUmVmdW5kUmVxdWVzdHNNb2RhbCA9ICh7XG4gIHRpY2tldHMsXG4gIG9wZW4sXG4gIG9uUmVtb3ZlU2VsZWN0ZWRSZWZ1bmRUaWNrZXRzLFxuICBvblJlZnVuZFN1Y2Nlc3NDbG9zZSxcbiAgb25DbG9zZVNsaWRlclxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgW3N0ZXAsIHNldFN0ZXBdID0gdXNlU3RhdGUoU1RFUF9PTkUpO1xuICBjb25zdCBbZXJyb3JNc2csIHNldEVycm9yTXNnXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbcmVmdW5kU3VjY2Vzcywgc2V0UmVmdW5kU3VjY2Vzc10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgY2xvc2VTbGlkZXIgPSAoKSA9PiB7XG4gICAgc2V0RXJyb3JNc2coXCJcIik7XG4gICAgb25DbG9zZVNsaWRlcigpO1xuICAgIHNldFN0ZXAoU1RFUF9PTkUpO1xuICAgIGlmIChyZWZ1bmRTdWNjZXNzKSB7XG4gICAgICBvblJlZnVuZFN1Y2Nlc3NDbG9zZSgpOyAvLyBpZiB0aGUgcmVmdW5kIGlzIGEgc3VjY2VzcywgdHJpZ2dlciBhbmQgcmUtcmV0cmlldmUgdGlja2V0cyBieSBvcmRlclxuICAgICAgc2V0UmVmdW5kU3VjY2VzcyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlZnVuZFRpY2tldHMgPSBhc3luYyAoKSA9PiB7XG4gICAgZGlzcGF0Y2gocmVmdW5kQnVsa1RpY2tldHMoeyB0aWNrZXRzIH0pKS50aGVuKChyZXMpID0+IHtcbiAgICAgIGRpc3BhdGNoKHVwZGF0ZVRpY2tldHNSZWZ1bmRSZXF1ZXN0ZWQocmVzKSk7IC8vIHJldHVybmluZyB3aGljaCB0aWNrZXRzIHdlcmUgc3VjY2Vzc2Z1bFxuICAgICAgaWYgKHJlcz8ubGVuZ3RoID09PSB0aWNrZXRzLmxlbmd0aCkge1xuICAgICAgICBzZXRTdGVwKFNURVBfVFdPKTsgLy8gc3VjY2VzcywgYWxsIHJlZnVuZHMgd2VyZSByZXF1ZXN0ZWRcbiAgICAgICAgc2V0UmVmdW5kU3VjY2Vzcyh0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldEVycm9yTXNnKHQoXCJlcnJvcnMucmVmdW5kX3Vuc3VjY2Vzc2Z1bFwiKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgc2V0RXJyb3JNc2coXCJcIik7XG4gIH07XG5cbiAgY29uc3QgcmVmdW5kU3RlcE9uZSA9ICgpID0+IChcbiAgICA8PlxuICAgICAgPGgyIGNsYXNzTmFtZT17c3R5bGVzLnJlZnVuZFRleHR9PlxuICAgICAgICB7dChcImNvbmZpcm1fcG9wdXAucXVlc3Rpb25fdGV4dF9jYW5jZWxcIil9XG4gICAgICA8L2gyPlxuICAgICAge2Vycm9yTXNnICYmIChcbiAgICAgICAgPEVycm9yTGFiZWxcbiAgICAgICAgICBjbGFzc05hbWVzPXtzdHlsZXMucmVmdW5kRXJyb3JNc2d9XG4gICAgICAgICAgY29sb3I9XCIjRkYwMDAwXCJcbiAgICAgICAgICBkYXRhVGVzdElkPVwiZmFpbGVkLXJlZnVuZC1tZXNzYWdlXCJcbiAgICAgICAgICBtZXNzYWdlPXtlcnJvck1zZ31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICA8Qm94PlxuICAgICAgICB7dGlja2V0cy5tYXAoKHRpY2tldCkgPT4gKFxuICAgICAgICAgIDxSZWZ1bmRSZXF1ZXN0ZWRUaWNrZXRcbiAgICAgICAgICAgIGtleT17dGlja2V0LmlkfVxuICAgICAgICAgICAgdGlja2V0PXt0aWNrZXR9XG4gICAgICAgICAgICBvblJlbW92ZT17b25SZW1vdmVTZWxlY3RlZFJlZnVuZFRpY2tldHN9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSl9XG4gICAgICA8L0JveD5cbiAgICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuYWN0aW9uQnV0dG9uc30+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwicmVmdW5kLWNhbmNlbC1idXR0b25cIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNhbmNlbEJ1dHRvbn1cbiAgICAgICAgICBvbkNsaWNrPXtjbG9zZVNsaWRlcn1cbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwiZ2VuZXJhbC5jYW5jZWxcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYXJpYS1sYWJlbD1cInJlZnVuZC1jb250aW51ZS1idXR0b25cIlxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNvbnRpbnVlQnV0dG9ufVxuICAgICAgICAgIG9uQ2xpY2s9e3JlZnVuZFRpY2tldHN9XG4gICAgICAgID5cbiAgICAgICAgICB7dChcImdlbmVyYWwuY29udGludWVcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9Cb3g+XG4gICAgPC8+XG4gICk7XG5cbiAgY29uc3QgcmVmdW5kU3RlcFR3byA9ICgpID0+IChcbiAgICA8Qm94XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy5yZWZ1bmRTdWNjZXNzZnVsfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJyZWZ1bmQtcmVxdWVzdC1zdWNjZXNzZnVsXCJcbiAgICA+XG4gICAgICA8Q2hlY2tDaXJjbGVJY29uIHN4PXt7IGNvbG9yOiBcIiM0Y2FmNTBcIiB9fSAvPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3VjY2Vzc01zZ30+XG4gICAgICAgIHt0KFwidGlja2V0cy5yZWZ1bmRfcmVxdWVzdF9zdWNjZXNzXzFcIil9XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zdWNjZXNzTXNnMn0+XG4gICAgICAgIHt0KFwidGlja2V0cy5yZWZ1bmRfcmVxdWVzdF9zdWNjZXNzXzJcIil9XG4gICAgICA8L3NwYW4+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGFyaWEtbGFiZWw9XCJyZWZ1bmQtZmluaXNoLWJ1dHRvblwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jb250aW51ZUJ1dHRvbn1cbiAgICAgICAgb25DbGljaz17Y2xvc2VTbGlkZXJ9XG4gICAgICA+XG4gICAgICAgIHt0KFwiZ2VuZXJhbC5maW5pc2hcIil9XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L0JveD5cbiAgKTtcblxuICBjb25zdCByZW5kZXJTdGVwcyA9ICgpID0+IHtcbiAgICBzd2l0Y2ggKHN0ZXApIHtcbiAgICAgIGNhc2UgU1RFUF9PTkU6XG4gICAgICAgIHJldHVybiByZWZ1bmRTdGVwT25lKCk7XG4gICAgICBjYXNlIFNURVBfVFdPOlxuICAgICAgICByZXR1cm4gcmVmdW5kU3RlcFR3bygpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHJlZnVuZFN0ZXBPbmUoKTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAoXG4gICAgPFN0eWxlZEVuZ2luZVByb3ZpZGVyIGluamVjdEZpcnN0PlxuICAgICAgPE11bHRpU3RlcFNsaWRlciBvcGVuPXtvcGVufSBvbkNsb3NlU2xpZGVyPXtjbG9zZVNsaWRlcn0+XG4gICAgICAgIDxCb3hcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5yZWZ1bmRIZWFkZXJzfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwicmVmdW5kLXJlcXVlc3QtbW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAgPGgzPnt0KFwib3JkZXJfc3VtbWFyeS5yZXF1ZXN0X3JlZnVuZFwiKX08L2gzPlxuICAgICAgICA8L0JveD5cbiAgICAgICAge3JlbmRlclN0ZXBzKCl9XG4gICAgICA8L011bHRpU3RlcFNsaWRlcj5cbiAgICA8L1N0eWxlZEVuZ2luZVByb3ZpZGVyPlxuICApO1xufTtcblxuUmVmdW5kUmVxdWVzdHNNb2RhbC5wcm9wVHlwZXMgPSB7XG4gIHRpY2tldHM6IFByb3BUeXBlcy5hcnJheU9mKE9iamVjdCksXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICBvblJlbW92ZVNlbGVjdGVkUmVmdW5kVGlja2V0czogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUmVmdW5kU3VjY2Vzc0Nsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbG9zZVNsaWRlcjogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlZnVuZFJlcXVlc3RzTW9kYWw7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBCb3gsIEljb25CdXR0b24sIFR5cG9ncmFwaHksIERyYXdlciB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBDbG9zZSBhcyBDbG9zZUljb24gfSBmcm9tIFwiQG11aS9pY29ucy1tYXRlcmlhbFwiO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBSaWdodERyYXdlciA9ICh7IGlkLCB0aXRsZSwgY2hpbGRyZW4sIG9wZW4sIG9uQ2xvc2UsIGNsYXNzTmFtZSB9KSA9PiAoXG4gIDxEcmF3ZXJcbiAgICBpZD17aWR9XG4gICAgb3Blbj17b3Blbn1cbiAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgIGFuY2hvcj1cInJpZ2h0XCJcbiAgICBNb2RhbFByb3BzPXt7IGtlZXBNb3VudGVkOiBmYWxzZSB9fVxuICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLndyYXBwZXJ9ICR7Y2xhc3NOYW1lfWB9XG4gID5cbiAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICA8SWNvbkJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZUJ0bn1cbiAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgc3g9e3sgZmxvYXQ6IFwicmlnaHRcIiB9fVxuICAgICAgICBmb250U2l6ZT1cImxhcmdlXCJcbiAgICAgID5cbiAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg1XCIgZ3V0dGVyQm90dG9tIGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfT5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgIDwvQm94PlxuICAgIHtjaGlsZHJlbn1cbiAgPC9EcmF3ZXI+XG4pO1xuXG5SaWdodERyYXdlci5wcm9wVHlwZXMgPSB7XG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHRpdGxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubm9kZV0pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSaWdodERyYXdlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IFRleHRGaWVsZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VGb3JtaWsgfSBmcm9tIFwiZm9ybWlrXCI7XG5pbXBvcnQgKiBhcyB5dXAgZnJvbSBcInl1cFwiO1xuXG5pbXBvcnQgRm9ybUZvb3RlciBmcm9tIFwiLi4vLi4vLi4vRm9ybUZvb3RlclwiO1xuXG5jb25zdCBBc3NpZ25Gb3JtID0gKHsgb25TdWJtaXQsIG9uQ2xvc2UsIHNhdmVMYWJlbCB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICBjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWsoe1xuICAgIGluaXRpYWxWYWx1ZXM6IHtcbiAgICAgIG5ld19hdHRlbmRlZV9lbWFpbDogXCJcIixcbiAgICAgIHBlcnNvbmFsX21lc3NhZ2U6IFwiXCJcbiAgICB9LFxuICAgIHZhbGlkYXRpb25TY2hlbWE6IHl1cC5vYmplY3Qoe1xuICAgICAgbmV3X2F0dGVuZGVlX2VtYWlsOiB5dXBcbiAgICAgICAgLnN0cmluZyh0KFwidmFsaWRhdGlvbi5lbWFpbC5zdHJpbmdcIikpXG4gICAgICAgIC5lbWFpbCh0KFwidmFsaWRhdGlvbi5lbWFpbC5mb3JtYXRcIikpXG4gICAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbi5lbWFpbC5yZXF1aXJlZFwiKSksXG4gICAgICBwZXJzb25hbF9tZXNzYWdlOiB5dXAuc3RyaW5nKHQoXCJ2YWxpZGF0aW9uLnRleHQuc3RyaW5nXCIpKVxuICAgIH0pLFxuICAgIG9uU3VibWl0XG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPGZvcm0gb25TdWJtaXQ9e2Zvcm1pay5oYW5kbGVTdWJtaXR9IG5vVmFsaWRhdGU+XG4gICAgICA8VGV4dEZpZWxkXG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBuYW1lPVwibmV3X2F0dGVuZGVlX2VtYWlsXCJcbiAgICAgICAgbGFiZWw9e3QoXCJ0aWNrZXRfcmVhc3NpZ24ubmV3X2F0dGVuZGVlX2VtYWlsXCIpfVxuICAgICAgICB2YWx1ZT17Zm9ybWlrLnZhbHVlcy5uZXdfYXR0ZW5kZWVfZW1haWx9XG4gICAgICAgIG9uQ2hhbmdlPXtmb3JtaWsuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkJsdXI9e2Zvcm1pay5oYW5kbGVCbHVyfVxuICAgICAgICBlcnJvcj17XG4gICAgICAgICAgZm9ybWlrLnRvdWNoZWQubmV3X2F0dGVuZGVlX2VtYWlsICYmXG4gICAgICAgICAgQm9vbGVhbihmb3JtaWsuZXJyb3JzLm5ld19hdHRlbmRlZV9lbWFpbClcbiAgICAgICAgfVxuICAgICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgICBmb3JtaWsudG91Y2hlZC5uZXdfYXR0ZW5kZWVfZW1haWwgJiYgZm9ybWlrLmVycm9ycy5uZXdfYXR0ZW5kZWVfZW1haWxcbiAgICAgICAgfVxuICAgICAgICByZXF1aXJlZFxuICAgICAgLz5cbiAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgIG5hbWU9XCJwZXJzb25hbF9tZXNzYWdlXCJcbiAgICAgICAgbGFiZWw9e3QoXCJ0aWNrZXRfcmVhc3NpZ24ucGVyc29uYWxfbWVzc2FnZVwiKX1cbiAgICAgICAgdmFsdWU9e2Zvcm1pay52YWx1ZXMucGVyc29uYWxfbWVzc2FnZX1cbiAgICAgICAgbXVsdGlsaW5lXG4gICAgICAgIG1pblJvd3M9ezR9XG4gICAgICAgIG9uQ2hhbmdlPXtmb3JtaWsuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkJsdXI9e2Zvcm1pay5oYW5kbGVCbHVyfVxuICAgICAgICBlcnJvcj17XG4gICAgICAgICAgZm9ybWlrLnRvdWNoZWQucGVyc29uYWxfbWVzc2FnZSAmJlxuICAgICAgICAgIEJvb2xlYW4oZm9ybWlrLmVycm9ycy5wZXJzb25hbF9tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICAgIGhlbHBlclRleHQ9e1xuICAgICAgICAgIGZvcm1pay50b3VjaGVkLnBlcnNvbmFsX21lc3NhZ2UgJiYgZm9ybWlrLmVycm9ycy5wZXJzb25hbF9tZXNzYWdlXG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8Rm9ybUZvb3RlclxuICAgICAgICBzYXZlTGFiZWw9e3NhdmVMYWJlbCB8fCB0KFwidGlja2V0X3JlYXNzaWduLnNhdmVcIil9XG4gICAgICAgIGNhbmNlbExhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLmNhbmNlbFwiKX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Zvcm1pay5pc1N1Ym1pdHRpbmd9XG4gICAgICAvPlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cbkFzc2lnbkZvcm0ucHJvcFR5cGVzID0ge1xuICBvblN1Ym1pdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgc2F2ZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBc3NpZ25Gb3JtO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgQm94LCBCdXR0b24sIFR5cG9ncmFwaHksIERpdmlkZXIgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHtcbiAgYXNzaWduQXR0ZW5kZWUsXG4gIGdldEV4dHJhUXVlc3Rpb25zLFxuICBnZXRUaWNrZXQsXG4gIHNhdmVFeHRyYVF1ZXN0aW9uc1xufSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xuaW1wb3J0IFJpZ2h0RHJhd2VyIGZyb20gXCIuLi9SaWdodERyYXdlclwiO1xuaW1wb3J0IEFzc2lnbkVRRm9ybSBmcm9tIFwiLi4vQXNzaWduRVFGb3JtXCI7XG5pbXBvcnQgQXNzaWduRm9ybSBmcm9tIFwiLi9jb21wb25lbnRzL0Fzc2lnbkZvcm1cIjtcbmltcG9ydCB7IHRyYW5zZm9ybUFud2Vyc0Zvcm1hdCB9IGZyb20gXCIuLi9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL3V0aWxzXCI7XG5pbXBvcnQgQ3VzdG9tRGlhbG9nIGZyb20gXCIuLi9DdXN0b21EaWFsb2dcIjtcbmltcG9ydCB7IE1JTExJU0VDX1RPX1NFQyB9IGZyb20gXCIuLi8uLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCBDb3B5VGV4dCBmcm9tIFwiLi4vQ29weVRleHRcIjtcblxuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBUaWNrZXRBc3NpZ24gPSAoe1xuICBzdW1taXQsXG4gIHRpY2tldElkLFxuICBvcmRlcklkLFxuICBvd25lcklkLFxuICBvcGVuLFxuICBvbkNsb3NlXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgZGlzcGF0Y2ggPSB1c2VEaXNwYXRjaCgpO1xuICBjb25zdCBbc2F2ZU1lc3NhZ2UsIHNldFNhdmVNZXNzYWdlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbdGlja2V0QXNzaWduZWQsIHNldFRpY2tldEFzc2lnbmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIGN1cnJlbnRUaWNrZXQ6IHRpY2tldCxcbiAgICBleHRyYVF1ZXN0aW9ucyxcbiAgICB1c2VyOiB7IHVzZXJQcm9maWxlIH1cbiAgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUud2lkZ2V0U3RhdGUpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHRpY2tldElkICYmIG9yZGVySWQgJiYgb3Blbikge1xuICAgICAgZGlzcGF0Y2goZ2V0VGlja2V0KHRpY2tldElkLCBvcmRlcklkKSk7XG4gICAgfVxuICB9LCBbdGlja2V0SWQsIG9yZGVySWQsIG9wZW5dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvd25lcklkICYmIG9wZW4pIHtcbiAgICAgIGRpc3BhdGNoKGdldEV4dHJhUXVlc3Rpb25zKG93bmVySWQpKTtcbiAgICB9XG4gIH0sIFtvd25lcklkXSk7XG5cbiAgY29uc3Qgb25Bc3NpZ25Ub090aGVyID0gKHZhbCkgPT4ge1xuICAgIGNvbnN0IHsgbmV3X2F0dGVuZGVlX2VtYWlsLCBwZXJzb25hbF9tZXNzYWdlIH0gPSB2YWw7XG4gICAgcmV0dXJuIGRpc3BhdGNoKFxuICAgICAgYXNzaWduQXR0ZW5kZWUob3JkZXJJZCwgdGlja2V0SWQsIG5ld19hdHRlbmRlZV9lbWFpbCwgcGVyc29uYWxfbWVzc2FnZSlcbiAgICApLnRoZW4oKCkgPT4ge1xuICAgICAgc2V0VGlja2V0QXNzaWduZWQodHJ1ZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3Qgb25Bc3NpZ25Ub01lID0gKCkgPT5cbiAgICBkaXNwYXRjaChhc3NpZ25BdHRlbmRlZShvcmRlcklkLCB0aWNrZXRJZCwgdXNlclByb2ZpbGUuZW1haWwpKS50aGVuKCgpID0+IHtcbiAgICAgIHNldFRpY2tldEFzc2lnbmVkKHRydWUpO1xuICAgIH0pO1xuXG4gIGNvbnN0IG9uQ2xvc2VFUUZvcm0gPSAoKSA9PiB7XG4gICAgc2V0VGlja2V0QXNzaWduZWQoZmFsc2UpO1xuICAgIG9uQ2xvc2UoKTtcbiAgfTtcblxuICBjb25zdCBvbkNsb3NlU2F2ZU1lc3NhZ2UgPSAoKSA9PiB7XG4gICAgc2V0U2F2ZU1lc3NhZ2UobnVsbCk7XG4gICAgc2V0VGlja2V0QXNzaWduZWQoZmFsc2UpO1xuICAgIHNldFRpbWVvdXQob25DbG9zZSwgTUlMTElTRUNfVE9fU0VDKTtcbiAgfTtcblxuICBjb25zdCBvblNhdmVFUSA9ICh2YWwpID0+IHtcbiAgICBjb25zdCBhbnN3ZXJzID0gdHJhbnNmb3JtQW53ZXJzRm9ybWF0KHZhbCk7XG5cbiAgICByZXR1cm4gZGlzcGF0Y2goc2F2ZUV4dHJhUXVlc3Rpb25zKHRpY2tldCwgYW5zd2VycykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHNldFNhdmVNZXNzYWdlKHtcbiAgICAgICAgICB0aXRsZTogdChcInRpY2tldF9hc3NpZ24uc2F2aW5nX3N1Y2Nlc3NcIiksXG4gICAgICAgICAgZGVzY3JpcHRpb246IHQoXCJ0aWNrZXRfYXNzaWduLnNhdmluZ19zdWNjZXNzX2Rlc2NyaXB0aW9uXCIpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgc2V0U2F2ZU1lc3NhZ2Uoe1xuICAgICAgICAgIHRpdGxlOiB0KFwidGlja2V0X2Fzc2lnbi5zYXZpbmdfZXJyb3JcIiksXG4gICAgICAgICAgZGVzY3JpcHRpb246IGVyci50b1N0cmluZygpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxSaWdodERyYXdlclxuICAgICAgICBpZD1cInJlYXNzaWduRHJhd2VyXCJcbiAgICAgICAgdGl0bGU9e3QoXCJ0aWNrZXRfYXNzaWduLmFzc2lnbl90aWNrZXRcIil9XG4gICAgICAgIG9wZW49e29wZW59XG4gICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRpY2tldEFzc2lnbkNvbnRhaW5lcn1cbiAgICAgID5cbiAgICAgICAgPEJveCBjbGFzc05hbWU9e3N0eWxlcy5hbGlnbkNlbnRlcn0+XG4gICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkxXCIgZ3V0dGVyQm90dG9tIGNsYXNzTmFtZT17c3R5bGVzLnN1YnRpdGxlfT5cbiAgICAgICAgICAgIHt0KFwidGlja2V0X2Fzc2lnbi5wdXJjaGFzZWRfYnlcIil9IHt0aWNrZXQ/Lm9yZGVyPy5vd25lcl9lbWFpbH1cbiAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkxXCIgZ3V0dGVyQm90dG9tIGNsYXNzTmFtZT17c3R5bGVzLm9yZGVyTm99PlxuICAgICAgICAgICAgPENvcHlUZXh0XG4gICAgICAgICAgICAgIHRleHQ9e3RpY2tldD8ub3JkZXI/Lm51bWJlcn1cbiAgICAgICAgICAgICAgcmV2ZXJzZWRcbiAgICAgICAgICAgICAgd2lkdGg9ezI1MH1cbiAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9e3QoXCJvcmRlcl9zdW1tYXJ5LmNvcHlfb3JkZXJfbnVtYmVyXCIpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgIDwvQm94PlxuICAgICAgICB7dGlja2V0ICYmICF0aWNrZXRBc3NpZ25lZCAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuYWxpZ25DZW50ZXJ9PlxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJoNFwiXG4gICAgICAgICAgICAgICAgZ3V0dGVyQm90dG9tXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudGlja2V0VHlwZX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt0aWNrZXQ/LnR5cGU/Lm5hbWV9XG4gICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmFzc2lnbkJ0bn1cbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17b25Bc3NpZ25Ub01lfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfYXNzaWduLmFzc2lnbl90b19tZVwiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxEaXZpZGVyIHZhcmlhbnQ9XCJtaWRkbGVcIj4mbmJzcDsmbmJzcDtvciZuYnNwOyZuYnNwOzwvRGl2aWRlcj5cbiAgICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuYXR0ZW5kZWVDb250YWluZXJ9PlxuICAgICAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmFsaWduQ2VudGVyfT5cbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImg0XCJcbiAgICAgICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYXR0ZW5kZWVJbmZvVGl0bGV9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfYXNzaWduLmFzc2lnbl90b19zb21lb25lX2Vsc2VcIil9XG4gICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5XG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwiYm9keTFcIlxuICAgICAgICAgICAgICAgICAgZ3V0dGVyQm90dG9tXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hdHRlbmRlZUluZm9Ob3RlfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt0KFwidGlja2V0X2Fzc2lnbi5lbnRlcl9lbWFpbF9ub3RlXCIpfVxuICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICAgIDxBc3NpZ25Gb3JtXG4gICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uQXNzaWduVG9PdGhlcn1cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgICAgICAgIHNhdmVMYWJlbD17dChcInRpY2tldF9hc3NpZ24uc2F2ZV9sYWJlbFwiKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgICB7dGlja2V0ICYmIHRpY2tldEFzc2lnbmVkICYmIChcbiAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlQ29udGFpbmVyfT5cbiAgICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuYWxpZ25DZW50ZXJ9PlxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJoNFwiXG4gICAgICAgICAgICAgICAgZ3V0dGVyQm90dG9tXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYXR0ZW5kZWVJbmZvVGl0bGV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dChcInRpY2tldF9hc3NpZ24uYXNzaWduZWRfdG9cIil9XG4gICAgICAgICAgICAgICAgPGJyIC8+XG4gICAgICAgICAgICAgICAge3RpY2tldD8ub3duZXI/LmVtYWlsfVxuICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgIDxUeXBvZ3JhcGh5XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImJvZHkxXCJcbiAgICAgICAgICAgICAgICBndXR0ZXJCb3R0b21cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hdHRlbmRlZUluZm9Ob3RlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfYXNzaWduLmNvbXBsZXRlX2luZm9cIil9XG4gICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgPEFzc2lnbkVRRm9ybVxuICAgICAgICAgICAgICB0aWNrZXQ9e3RpY2tldH1cbiAgICAgICAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zPXtleHRyYVF1ZXN0aW9uc31cbiAgICAgICAgICAgICAgb25TdWJtaXQ9e29uU2F2ZUVRfVxuICAgICAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlRVFGb3JtfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvUmlnaHREcmF3ZXI+XG4gICAgICA8Q3VzdG9tRGlhbG9nXG4gICAgICAgIG9wZW49eyEhc2F2ZU1lc3NhZ2V9XG4gICAgICAgIG9uQ2xvc2U9e29uQ2xvc2VTYXZlTWVzc2FnZX1cbiAgICAgICAgdGl0bGU9e3NhdmVNZXNzYWdlPy50aXRsZX1cbiAgICAgICAgZGVzY3JpcHRpb249e3NhdmVNZXNzYWdlPy5kZXNjcmlwdGlvbn1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59O1xuXG5UaWNrZXRBc3NpZ24ucHJvcFR5cGVzID0ge1xuICBzdW1taXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIHRpY2tldElkOiBQcm9wVHlwZXMubnVtYmVyLFxuICBvcmRlcklkOiBQcm9wVHlwZXMubnVtYmVyLFxuICBvd25lcklkOiBQcm9wVHlwZXMubnVtYmVyLFxuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRpY2tldEFzc2lnbjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IFRleHRGaWVsZCwgQXV0b2NvbXBsZXRlLCBUeXBvZ3JhcGh5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzIH0gZnJvbSBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvdXRpbHMvcXVlcnktYWN0aW9uc1wiO1xuaW1wb3J0IHsgVElDS0VUX0FUVEVOREVFX0tFWVMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmNvbnN0IENvbXBhbnlGaWVsZCA9ICh7IGZvcm1paywgc3VtbWl0SWQsIGlzUmVxdWlyZWQgfSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBbb3B0aW9ucywgc2V0T3B0aW9uc10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gIGNvbnN0IHsgZXJyb3JzLCB2YWx1ZXMsIHRvdWNoZWQsIHNldEZpZWxkVG91Y2hlZCwgc2V0RmllbGRWYWx1ZSB9ID0gZm9ybWlrO1xuICBjb25zdCBuYW1lID0gVElDS0VUX0FUVEVOREVFX0tFWVMuY29tcGFueTtcbiAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbbmFtZV07XG4gIGNvbnN0IGVycm9yID0gdG91Y2hlZFtuYW1lXSAmJiBCb29sZWFuKGVycm9yc1tuYW1lXSk7XG4gIGNvbnN0IGhlbHBlclRleHQgPSB0b3VjaGVkW25hbWVdICYmIGVycm9yc1tuYW1lXTtcblxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbnB1dFZhbHVlID09PSBcIlwiKSB7XG4gICAgICBzZXRPcHRpb25zKHZhbHVlID8gW3ZhbHVlXSA6IFtdKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMoc3VtbWl0SWQsIGlucHV0VmFsdWUsIChyZXN1bHRzKSA9PiB7XG4gICAgICBsZXQgbmV3T3B0aW9ucyA9IFtdO1xuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgbmV3T3B0aW9ucyA9IFt2YWx1ZV07XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHRzKSB7XG4gICAgICAgIG5ld09wdGlvbnMgPSBbLi4ubmV3T3B0aW9ucywgLi4ucmVzdWx0c107XG4gICAgICB9XG5cbiAgICAgIHNldE9wdGlvbnMobmV3T3B0aW9ucyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW3ZhbHVlLCBpbnB1dFZhbHVlXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8QXV0b2NvbXBsZXRlXG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIGF1dG9Db21wbGV0ZVxuICAgICAgZnJlZVNvbG9cbiAgICAgIGluY2x1ZGVJbnB1dEluTGlzdFxuICAgICAgZmlsdGVyU2VsZWN0ZWRPcHRpb25zXG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBvbkJsdXI9eygpID0+IHNldEZpZWxkVG91Y2hlZChuYW1lLCB0cnVlLCB0cnVlKX1cbiAgICAgIGdldE9wdGlvbkxhYmVsPXsob3B0aW9uKSA9PiB7XG4gICAgICAgIC8vIFZhbHVlIHNlbGVjdGVkIHdpdGggZW50ZXIsIHJpZ2h0IGZyb20gdGhlIGlucHV0XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBBZGQgXCJ4eHhcIiBvcHRpb24gY3JlYXRlZCBkeW5hbWljYWxseVxuICAgICAgICBpZiAob3B0aW9uLmlucHV0VmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uLmlucHV0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVndWxhciBvcHRpb25cbiAgICAgICAgcmV0dXJuIG9wdGlvbi5uYW1lO1xuICAgICAgfX1cbiAgICAgIG9uQ2hhbmdlPXsoZXZlbnQsIG5ld1ZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRtcFZhbHVlID0gbmV3VmFsdWU/LmlucHV0VmFsdWUgfHwgbmV3VmFsdWU7XG4gICAgICAgIHNldE9wdGlvbnModG1wVmFsdWUgPyBbdG1wVmFsdWUsIC4uLm9wdGlvbnNdIDogb3B0aW9ucyk7XG4gICAgICAgIHNldEZpZWxkVmFsdWUobmFtZSwgdG1wVmFsdWUpO1xuICAgICAgfX1cbiAgICAgIG9uSW5wdXRDaGFuZ2U9eyhldmVudCwgbmV3SW5wdXRWYWx1ZSkgPT4ge1xuICAgICAgICBzZXRJbnB1dFZhbHVlKG5ld0lucHV0VmFsdWUpO1xuICAgICAgfX1cbiAgICAgIGZpbHRlck9wdGlvbnM9eyhvcHRpb25zLCBwYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3QgeyBpbnB1dFZhbHVlIH0gPSBwYXJhbXM7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkID0gWy4uLm9wdGlvbnNdO1xuICAgICAgICAvLyBTdWdnZXN0IHRoZSBjcmVhdGlvbiBvZiBhIG5ldyB2YWx1ZVxuICAgICAgICBjb25zdCBpc0V4aXN0aW5nID0gb3B0aW9ucy5zb21lKFxuICAgICAgICAgIChvcHRpb24pID0+IGlucHV0VmFsdWUgPT09IG9wdGlvbi50aXRsZVxuICAgICAgICApO1xuICAgICAgICBpZiAoaW5wdXRWYWx1ZSAhPT0gXCJcIiAmJiAhaXNFeGlzdGluZykge1xuICAgICAgICAgIGZpbHRlcmVkLnB1c2goe1xuICAgICAgICAgICAgaW5wdXRWYWx1ZSxcbiAgICAgICAgICAgIG5hbWU6IGBTZWxlY3QgXCIke2lucHV0VmFsdWV9XCJgXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICB9fVxuICAgICAgcmVuZGVySW5wdXQ9eyhwYXJhbXMpID0+IChcbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9qc3gtcHJvcHMtbm8tc3ByZWFkaW5nICovXG4gICAgICAgICAgey4uLnBhcmFtc31cbiAgICAgICAgICBsYWJlbD17dChcInRpY2tldF9kZXRhaWwuYXR0ZW5kZWVfY29tcGFueVwiKX1cbiAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICByZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgICAgICBoZWxwZXJUZXh0PXtoZWxwZXJUZXh0fVxuICAgICAgICAgIGVycm9yPXtlcnJvcn1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICByZW5kZXJPcHRpb249eyhwcm9wcywgb3B0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHsga2V5LCAuLi5vcHRpb25Qcm9wcyB9ID0gcHJvcHM7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1wcm9wcy1uby1zcHJlYWRpbmdcbiAgICAgICAgICA8bGkga2V5PXtrZXl9IHsuLi5vcHRpb25Qcm9wc30+XG4gICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiYm9keTJcIiBzeD17eyBjb2xvcjogXCJ0ZXh0LnNlY29uZGFyeVwiIH19PlxuICAgICAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgKTtcbiAgICAgIH19XG4gICAgLz5cbiAgKTtcbn07XG5cbkNvbXBhbnlGaWVsZC5wcm9wVHlwZXMgPSB7XG4gIGZvcm1pazogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBzdW1taXRJZDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb21wYW55RmllbGQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQge1xuICBCb3gsXG4gIENoZWNrYm94LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUNvbnRyb2xMYWJlbCxcbiAgRm9ybUhlbHBlclRleHRcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCBSYXdIVE1MIGZyb20gXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL2NvbXBvbmVudHMvcmF3LWh0bWxcIjtcbmltcG9ydCB7IFRJQ0tFVF9BVFRFTkRFRV9LRVlTIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IFJlZ2lzdHJhdGlvbkRpc2NsYWltZXIgPSAoe1xuICBkaXNjbGFpbWVyLFxuICBmb3JtaWssXG4gIGlzRGlzYWJsZWQgPSBmYWxzZSxcbiAgaXNSZXF1aXJlZCA9IHRydWVcbn0pID0+IHtcbiAgY29uc3QgbmFtZSA9IFRJQ0tFVF9BVFRFTkRFRV9LRVlTLmRpc2NsYWltZXJBY2NlcHRlZDtcbiAgY29uc3QgeyBlcnJvcnMsIHZhbHVlcywgdG91Y2hlZCwgaGFuZGxlQ2hhbmdlLCBoYW5kbGVCbHVyIH0gPSBmb3JtaWs7XG4gIGNvbnN0IHZhbHVlID0gdmFsdWVzW25hbWVdO1xuICBjb25zdCBlcnJvciA9IHRvdWNoZWRbbmFtZV0gJiYgQm9vbGVhbihlcnJvcnNbbmFtZV0pO1xuICBjb25zdCBoZWxwZXJUZXh0ID0gdG91Y2hlZFtuYW1lXSAmJiBlcnJvcnNbbmFtZV07XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgPEZvcm1Db250cm9sIGZ1bGxXaWR0aCBlcnJvcj17ZXJyb3J9PlxuICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9eyEhdmFsdWV9XG4gICAgICAgICAgICAgIGxhYmVsPXs8UmF3SFRNTD57ZGlzY2xhaW1lcn08L1Jhd0hUTUw+fVxuICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUJsdXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBsYWJlbD17PFJhd0hUTUw+e2Rpc2NsYWltZXJ9PC9SYXdIVE1MPn1cbiAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICByZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgICAgLz5cbiAgICAgICAge2Vycm9yICYmIDxGb3JtSGVscGVyVGV4dD57aGVscGVyVGV4dCA/PyBcIiBcIn08L0Zvcm1IZWxwZXJUZXh0Pn1cbiAgICAgIDwvRm9ybUNvbnRyb2w+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuXG5SZWdpc3RyYXRpb25EaXNjbGFpbWVyLnByb3BUeXBlcyA9IHtcbiAgZGlzY2xhaW1lcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBmb3JtaWs6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzUmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWdpc3RyYXRpb25EaXNjbGFpbWVyO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgVGV4dEZpZWxkIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcblxuY29uc3QgVGlja2V0RGVsZWdhdGlvbkZpZWxkcyA9ICh7IGZvcm1payB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8VGV4dEZpZWxkXG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBpZD1cImRlbGVnYXRlZF9maXJzdF9uYW1lXCJcbiAgICAgICAgbGFiZWw9e3QoXCJ0aWNrZXRfZGV0YWlsLmZpcnN0X25hbWVcIil9XG4gICAgICAgIHZhbHVlPXtmb3JtaWsudmFsdWVzLmRlbGVnYXRlZF9maXJzdF9uYW1lfVxuICAgICAgICBvbkNoYW5nZT17Zm9ybWlrLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgb25CbHVyPXtmb3JtaWsuaGFuZGxlQmx1cn1cbiAgICAgICAgZXJyb3I9e1xuICAgICAgICAgIGZvcm1pay50b3VjaGVkLmRlbGVnYXRlZF9maXJzdF9uYW1lICYmXG4gICAgICAgICAgQm9vbGVhbihmb3JtaWsuZXJyb3JzLmRlbGVnYXRlZF9maXJzdF9uYW1lKVxuICAgICAgICB9XG4gICAgICAgIGhlbHBlclRleHQ9e1xuICAgICAgICAgIGZvcm1pay50b3VjaGVkLmRlbGVnYXRlZF9maXJzdF9uYW1lICYmXG4gICAgICAgICAgZm9ybWlrLmVycm9ycy5kZWxlZ2F0ZWRfZmlyc3RfbmFtZVxuICAgICAgICB9XG4gICAgICAvPlxuICAgICAgPFRleHRGaWVsZFxuICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgaWQ9XCJkZWxlZ2F0ZWRfbGFzdF9uYW1lXCJcbiAgICAgICAgbGFiZWw9e3QoXCJ0aWNrZXRfZGV0YWlsLmxhc3RfbmFtZVwiKX1cbiAgICAgICAgdmFsdWU9e2Zvcm1pay52YWx1ZXMuZGVsZWdhdGVkX2xhc3RfbmFtZX1cbiAgICAgICAgb25DaGFuZ2U9e2Zvcm1pay5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uQmx1cj17Zm9ybWlrLmhhbmRsZUJsdXJ9XG4gICAgICAgIGVycm9yPXtcbiAgICAgICAgICBmb3JtaWsudG91Y2hlZC5kZWxlZ2F0ZWRfbGFzdF9uYW1lICYmXG4gICAgICAgICAgQm9vbGVhbihmb3JtaWsuZXJyb3JzLmRlbGVnYXRlZF9sYXN0X25hbWUpXG4gICAgICAgIH1cbiAgICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgICAgZm9ybWlrLnRvdWNoZWQuZGVsZWdhdGVkX2xhc3RfbmFtZSAmJlxuICAgICAgICAgIGZvcm1pay5lcnJvcnMuZGVsZWdhdGVkX2xhc3RfbmFtZVxuICAgICAgICB9XG4gICAgICAvPlxuICAgIDwvPlxuICApO1xufTtcblxuVGlja2V0RGVsZWdhdGlvbkZpZWxkcy5wcm9wVHlwZXMgPSB7XG4gIGZvcm1pazogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWNrZXREZWxlZ2F0aW9uRmllbGRzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgQm94LCBUeXBvZ3JhcGh5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZUZvcm1payB9IGZyb20gXCJmb3JtaWtcIjtcbmltcG9ydCBFeHRyYVF1ZXN0aW9uc0ZpZWxkcyBmcm9tIFwiLi4vLi4vLi4vRXh0cmFRdWVzdGlvbnNGaWVsZHNcIjtcblxuaW1wb3J0IHtcbiAgZ2V0VHlwZVZhbHVlLFxuICB0b1NsdWdcbn0gZnJvbSBcIi4uLy4uLy4uL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbXBvbmVudHMvdXRpbHNcIjtcblxuaW1wb3J0IFRpY2tldERlbGVnYXRpb25GaWVsZHMgZnJvbSBcIi4uL1RpY2tldERlbGVnYXRpb25GaWVsZHNcIjtcbmltcG9ydCBUaWNrZXRPd25lckZpZWxkcyBmcm9tIFwiLi4vVGlja2V0T3duZXJGaWVsZHNcIjtcbmltcG9ydCBSZWdpc3RyYXRpb25EaXNjbGFpbWVyIGZyb20gXCIuLi9SZWdpc3RyYXRpb25EaXNjbGFpbWVyL1JlZ2lzdHJhdGlvbkRpc2NsYWltZXJcIjtcbmltcG9ydCBGb3JtRm9vdGVyIGZyb20gXCIuLi8uLi8uLi9Gb3JtRm9vdGVyXCI7XG5pbXBvcnQgdXNlU2Nyb2xsVG9FcnJvciBmcm9tIFwiLi4vLi4vLi4vLi4vaG9va3MvdXNlU2Nyb2xsVG9FcnJvclwiO1xuaW1wb3J0IHtcbiAgcGFyc2VBbnN3ZXJzLFxuICBidWlsZFZhbGlkYXRpb25TY2hlbWFcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWxzL3RpY2tldFV0aWxzXCI7XG5cbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi4vLi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IFRpY2tldEZvcm0gPSAoe1xuICB0aWNrZXQsXG4gIGV4dHJhUXVlc3Rpb25zLFxuICBzdW1taXQsXG4gIGNhbkVkaXQsXG4gIG9uU3VibWl0LFxuICBvbkNsb3NlXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgdGlja2V0TWFuYWdlciA9IHRpY2tldD8ubWFuYWdlcjtcbiAgLyogRElTQUJMRSBERUxFR0FUSU9OIEZUTSAqL1xuICBjb25zdCBhbGxvd3NEZWxlZ2F0aW9uID0gdGlja2V0Py50aWNrZXRfdHlwZT8uYWxsb3dzX3RvX2RlbGVnYXRlICYmIGZhbHNlO1xuICBjb25zdCBhbnN3ZXJzID0gdGlja2V0Py5vd25lcj8uZXh0cmFfcXVlc3Rpb25zLnJlZHVjZSgocmVzLCBhbnMpID0+IHtcbiAgICBjb25zdCBxdWVzdGlvblNsdWcgPSB0b1NsdWcoYW5zLnF1ZXN0aW9uLm5hbWUsIGFucy5xdWVzdGlvbi5pZCk7XG4gICAgcmVzW3F1ZXN0aW9uU2x1Z10gPSBnZXRUeXBlVmFsdWUoYW5zLnZhbHVlLCBhbnMucXVlc3Rpb24udHlwZSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfSwge30pO1xuXG4gIGNvbnN0IGZvcm1payA9IHVzZUZvcm1payh7XG4gICAgaW5pdGlhbFZhbHVlczogcGFyc2VBbnN3ZXJzKFxuICAgICAgdGlja2V0Lm93bmVyLFxuICAgICAgZXh0cmFRdWVzdGlvbnMsXG4gICAgICBhbnN3ZXJzLFxuICAgICAgdGlja2V0TWFuYWdlcixcbiAgICAgIGFsbG93c0RlbGVnYXRpb24sXG4gICAgICB0cnVlLFxuICAgICAgdHJ1ZVxuICAgICksXG4gICAgdmFsaWRhdGlvblNjaGVtYTogYnVpbGRWYWxpZGF0aW9uU2NoZW1hKFxuICAgICAgZXh0cmFRdWVzdGlvbnMsXG4gICAgICB0cnVlLFxuICAgICAgYWxsb3dzRGVsZWdhdGlvbixcbiAgICAgIHN1bW1pdC5yZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9tYW5kYXRvcnlcbiAgICApLFxuICAgIG9uU3VibWl0OiAodmFsdWVzKSA9PiB7XG4gICAgICBjb25zdCByZWxldmFudEFuc3dlcnMgPSBwYXJzZUFuc3dlcnMoXG4gICAgICAgIHRpY2tldC5vd25lcixcbiAgICAgICAgZXh0cmFRdWVzdGlvbnMsXG4gICAgICAgIHZhbHVlcyxcbiAgICAgICAgdGlja2V0TWFuYWdlcixcbiAgICAgICAgYWxsb3dzRGVsZWdhdGlvbixcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIG9uU3VibWl0KHJlbGV2YW50QW5zd2Vycyk7XG4gICAgfSxcbiAgICBlbmFibGVSZWluaXRpYWxpemU6IHRydWVcbiAgfSk7XG5cbiAgLy8gY29uc29sZS5sb2coXCJTVU1NSVQ6IFwiLCBzdW1taXQpO1xuICAvLyBjb25zb2xlLmxvZyhcIlRJQ0tFVDogXCIsIHRpY2tldCk7XG4gIC8vIGNvbnNvbGUubG9nKFwiUVVFU1RJVU9OczogXCIsIGV4dHJhUXVlc3Rpb25zKTtcbiAgLy8gY29uc29sZS5sb2coXCJBTlNXRVJTOiBcIiwgYW5zd2Vycyk7XG4gIC8vIGNvbnNvbGUubG9nKFwiRVJST1JzOiBcIiwgZm9ybWlrLmVycm9ycyk7XG4gIC8vIGNvbnNvbGUubG9nKFwiVkFMVUVTOiBcIiwgZm9ybWlrLnZhbHVlcyk7XG4gIC8vIGNvbnNvbGUubG9nKFwiSU5JVElBTDogXCIsIGZvcm1pay5pbml0aWFsVmFsdWVzKTtcbiAgLy8gY29uc29sZS5sb2coXCJUT1VDSEVEOiBcIiwgZm9ybWlrLnRvdWNoZWQpO1xuXG4gIC8vIFNDUk9MTCBUTyBFUlJPUlxuICB1c2VTY3JvbGxUb0Vycm9yKGZvcm1paywgXCJkZXRhaWxzRHJhd2VyXCIpO1xuXG4gIHJldHVybiAoXG4gICAgPGZvcm0gb25TdWJtaXQ9e2Zvcm1pay5oYW5kbGVTdWJtaXR9IG5vVmFsaWRhdGU+XG4gICAgICA8VGlja2V0T3duZXJGaWVsZHNcbiAgICAgICAgZm9ybWlrPXtmb3JtaWt9XG4gICAgICAgIG93bmVyPXt0aWNrZXQub3duZXJ9XG4gICAgICAgIHN1bW1pdElkPXtzdW1taXQuaWR9XG4gICAgICAgIGRpc2FibGVkPXshY2FuRWRpdH1cbiAgICAgIC8+XG5cbiAgICAgIHthbGxvd3NEZWxlZ2F0aW9uICYmIChcbiAgICAgICAgPEJveD5cbiAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgdmFyaWFudD1cInN1YnRpdGxlMlwiXG4gICAgICAgICAgICBndXR0ZXJCb3R0b21cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmRlbGVnYXRlZFRvfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0KFwidGlja2V0X2RldGFpbC5kZWxlZ2F0ZWRfdG9cIil9XG4gICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgIDxUaWNrZXREZWxlZ2F0aW9uRmllbGRzIGZvcm1paz17Zm9ybWlrfSAvPlxuICAgICAgICA8L0JveD5cbiAgICAgICl9XG5cbiAgICAgIHtleHRyYVF1ZXN0aW9ucz8ubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgPGg2IGNsYXNzTmFtZT17c3R5bGVzLmFkZGl0aW9uYWxEZXRhaWxzfT5cbiAgICAgICAgICAgIHt0KFwidGlja2V0X2RldGFpbC5hZGl0aW9uYWxfZGV0YWlsc1wiKX1cbiAgICAgICAgICA8L2g2PlxuICAgICAgICAgIDxFeHRyYVF1ZXN0aW9uc0ZpZWxkc1xuICAgICAgICAgICAgZXh0cmFRdWVzdGlvbnM9e2V4dHJhUXVlc3Rpb25zfVxuICAgICAgICAgICAgYWxsb3dFZGl0PXtjYW5FZGl0fVxuICAgICAgICAgICAgZm9ybWlrPXtmb3JtaWt9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuXG4gICAgICB7c3VtbWl0LnJlZ2lzdHJhdGlvbl9kaXNjbGFpbWVyX2NvbnRlbnQgJiYgKFxuICAgICAgICA8UmVnaXN0cmF0aW9uRGlzY2xhaW1lclxuICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgIGRpc2NsYWltZXI9e3N1bW1pdC5yZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9jb250ZW50fVxuICAgICAgICAgIGlzUmVxdWlyZWQ9e3N1bW1pdC5yZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9tYW5kYXRvcnl9XG4gICAgICAgICAgaXNEaXNhYmxlZD17IWNhbkVkaXR9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPEZvcm1Gb290ZXJcbiAgICAgICAgc2F2ZUxhYmVsPXt0KFwidGlja2V0X2RldGFpbC5zYXZlXCIpfVxuICAgICAgICBjYW5jZWxMYWJlbD17dChcInRpY2tldF9kZXRhaWwuY2FuY2VsXCIpfVxuICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICBkaXNhYmxlZD17Zm9ybWlrLmlzU3VibWl0dGluZ31cbiAgICAgIC8+XG4gICAgPC9mb3JtPlxuICApO1xufTtcblxuVGlja2V0Rm9ybS5wcm9wVHlwZXMgPSB7XG4gIHRpY2tldDogUHJvcFR5cGVzLm9iamVjdCxcbiAgZXh0cmFRdWVzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBzdW1taXQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2FuRWRpdDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uU3VibWl0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWNrZXRGb3JtO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgQm94LCBUZXh0RmllbGQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuXG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5pbXBvcnQgeyBUSUNLRVRfQVRURU5ERUVfS0VZUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCBDb21wYW55RmllbGQgZnJvbSBcIi4uL0NvbXBhbnlGaWVsZFwiO1xuXG5jb25zdCBUaWNrZXRPd25lckZpZWxkcyA9ICh7IGZvcm1paywgc3VtbWl0SWQsIGRpc2FibGVkIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB7IGVycm9ycywgdmFsdWVzLCB0b3VjaGVkLCBoYW5kbGVDaGFuZ2UsIGhhbmRsZUJsdXIgfSA9IGZvcm1paztcblxuICByZXR1cm4gKFxuICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMud3JhcHBlcn0+XG4gICAgICA8VGV4dEZpZWxkXG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBuYW1lPXtUSUNLRVRfQVRURU5ERUVfS0VZUy5lbWFpbH1cbiAgICAgICAgbGFiZWw9e3QoXCJ0aWNrZXRfZGV0YWlsLmVtYWlsXCIpfVxuICAgICAgICBkaXNhYmxlZFxuICAgICAgICB2YWx1ZT17dmFsdWVzW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmVtYWlsXX1cbiAgICAgIC8+XG4gICAgICB7W1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmZpcnN0TmFtZSwgVElDS0VUX0FUVEVOREVFX0tFWVMubGFzdE5hbWVdLm1hcChcbiAgICAgICAgKG5hbWUpID0+IChcbiAgICAgICAgICA8VGV4dEZpZWxkXG4gICAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICAgIGtleT17bmFtZX1cbiAgICAgICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgICAgICBsYWJlbD17dChgdGlja2V0X2RldGFpbC4ke25hbWV9YCl9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWVzW25hbWVdfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlQmx1cn1cbiAgICAgICAgICAgIGVycm9yPXt0b3VjaGVkW25hbWVdICYmIEJvb2xlYW4oZXJyb3JzW25hbWVdKX1cbiAgICAgICAgICAgIGhlbHBlclRleHQ9e2Zvcm1pay50b3VjaGVkW25hbWVdICYmIGZvcm1pay5lcnJvcnNbbmFtZV19XG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgICl9XG4gICAgICA8Q29tcGFueUZpZWxkIGZvcm1paz17Zm9ybWlrfSBzdW1taXRJZD17c3VtbWl0SWR9IGlzUmVxdWlyZWQgLz5cbiAgICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuaW5mb05vdGV9Pnt0KFwidGlja2V0X2RldGFpbC5pbmZvX25vdGVcIil9PC9Cb3g+XG4gICAgPC9Cb3g+XG4gICk7XG59O1xuXG5UaWNrZXRPd25lckZpZWxkcy5wcm9wVHlwZXMgPSB7XG4gIGZvcm1pazogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWNrZXRPd25lckZpZWxkcztcbiIsImV4cG9ydCBjb25zdCBUSUNLRVRfQVRURU5ERUVfS0VZUyA9IHtcbiAgZW1haWw6IFwiYXR0ZW5kZWVfZW1haWxcIixcbiAgZmlyc3ROYW1lOiBcImF0dGVuZGVlX2ZpcnN0X25hbWVcIixcbiAgbGFzdE5hbWU6IFwiYXR0ZW5kZWVfbGFzdF9uYW1lXCIsXG4gIGNvbXBhbnk6IFwiYXR0ZW5kZWVfY29tcGFueVwiLFxuICBkaXNjbGFpbWVyQWNjZXB0ZWQ6IFwiZGlzY2xhaW1lcl9hY2NlcHRlZFwiXG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3IgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCBRUkNvZGUgZnJvbSBcInJlYWN0LXFyLWNvZGVcIjtcbmltcG9ydCB7IEJveCwgQnV0dG9uLCBEcmF3ZXIsIEljb25CdXR0b24sIFR5cG9ncmFwaHkgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHtcbiAgQ2xvc2UgYXMgQ2xvc2VJY29uLFxuICBGaWxlRG93bmxvYWRPdXRsaW5lZCBhcyBEb3dubG9hZEljb24sXG4gIEVtYWlsT3V0bGluZWQgYXMgRW1haWxJY29uXG59IGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VUaWNrZXREZXRhaWxzIH0gZnJvbSBcIi4uLy4uL2hvb2tzL3VzZVRpY2tldERldGFpbHNcIjtcbmltcG9ydCBDb3B5VGV4dCBmcm9tIFwiLi4vQ29weVRleHRcIjtcbmltcG9ydCB1c2VHZXRUaWNrZXQgZnJvbSBcIi4uLy4uL2hvb2tzL3VzZUdldFRpY2tldFwiO1xuaW1wb3J0IHsgdHJhbnNmb3JtQW53ZXJzRm9ybWF0IH0gZnJvbSBcIi4uL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbXBvbmVudHMvdXRpbHNcIjtcbmltcG9ydCBDdXN0b21EaWFsb2cgZnJvbSBcIi4uL0N1c3RvbURpYWxvZ1wiO1xuaW1wb3J0IHsgTUlMTElTRUNfVE9fU0VDIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IFRpY2tldEZvcm0gZnJvbSBcIi4vY29tcG9uZW50cy9UaWNrZXRGb3JtXCI7XG5pbXBvcnQgeyBzYXZlVGlja2V0RGV0YWlscyB9IGZyb20gXCIuLi8uLi9hY3Rpb25zXCI7XG5cbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgVGlja2V0RGV0YWlsID0gKHtcbiAgc3VtbWl0LFxuICB0aWNrZXRJZCxcbiAgb3JkZXJJZCxcbiAgb3duZXJJZCxcbiAgb3BlbixcbiAgb25DbG9zZVxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3Qge1xuICAgIHVzZXI6IHsgdXNlclByb2ZpbGUgfVxuICB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS53aWRnZXRTdGF0ZSk7XG4gIGNvbnN0IHsgdGlja2V0LCBleHRyYVF1ZXN0aW9ucyB9ID0gdXNlR2V0VGlja2V0KFxuICAgIHRpY2tldElkLFxuICAgIG9yZGVySWQsXG4gICAgb3duZXJJZCxcbiAgICBvcGVuXG4gICk7XG4gIGNvbnN0IFtzYXZlTWVzc2FnZSwgc2V0U2F2ZU1lc3NhZ2VdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IGlzVXNlck9yZGVyT3duZXIgPSB0aWNrZXQ/Lm9yZGVyPy5vd25lcl9pZCA9PT0gdXNlclByb2ZpbGU/LmlkO1xuICBjb25zdCBpc1VzZXJUaWNrZXRPd25lciA9IHRpY2tldD8ub3duZXI/LmVtYWlsID09PSB1c2VyUHJvZmlsZT8uZW1haWw7XG4gIGNvbnN0IGNhbkVkaXRUaWNrZXREYXRhID1cbiAgICAoaXNVc2VyVGlja2V0T3duZXIgfHwgaXNVc2VyT3JkZXJPd25lcikgJiZcbiAgICBzdW1taXQuYWxsb3dfdXBkYXRlX2F0dGVuZGVlX2V4dHJhX3F1ZXN0aW9ucztcbiAgY29uc3QgeyBpc0NvbXBsZXRlIH0gPSB1c2VUaWNrZXREZXRhaWxzKHRpY2tldCk7XG5cbiAgY29uc3Qgb25TYXZlID0gKHZhbCkgPT4ge1xuICAgIGNvbnN0IGFuc3dlcnMgPSB0cmFuc2Zvcm1BbndlcnNGb3JtYXQodmFsKTtcblxuICAgIHJldHVybiBkaXNwYXRjaChzYXZlVGlja2V0RGV0YWlscyh0aWNrZXQsIGFuc3dlcnMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBzZXRTYXZlTWVzc2FnZSh7XG4gICAgICAgICAgdGl0bGU6IHQoXCJ0aWNrZXRfZGV0YWlsLnNhdmluZ19zdWNjZXNzXCIpLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0KFwidGlja2V0X2RldGFpbC5zYXZpbmdfc3VjY2Vzc19kZXNjcmlwdGlvblwiKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHNldFNhdmVNZXNzYWdlKHtcbiAgICAgICAgICB0aXRsZTogdChcInRpY2tldF9kZXRhaWwuc2F2aW5nX2Vycm9yXCIpLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBlcnIudG9TdHJpbmcoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgICB9KTtcbiAgfTtcblxuICBjb25zdCBvbkNsb3NlU2F2ZU1lc3NhZ2UgPSAoKSA9PiB7XG4gICAgc2V0U2F2ZU1lc3NhZ2UobnVsbCk7XG4gICAgc2V0VGltZW91dChvbkNsb3NlLCBNSUxMSVNFQ19UT19TRUMpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxEcmF3ZXJcbiAgICAgICAgaWQ9XCJkZXRhaWxzRHJhd2VyXCJcbiAgICAgICAgb3Blbj17b3Blbn1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgYW5jaG9yPVwicmlnaHRcIlxuICAgICAgICBNb2RhbFByb3BzPXt7IGtlZXBNb3VudGVkOiBmYWxzZSB9fVxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy50aWNrZXREZXRhaWxDb250YWluZXJ9XG4gICAgICA+XG4gICAgICAgIHt0aWNrZXQgJiYgZXh0cmFRdWVzdGlvbnMgJiYgKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2VCdG59XG4gICAgICAgICAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgICAgICAgICBzeD17eyBmbG9hdDogXCJyaWdodFwiIH19XG4gICAgICAgICAgICAgICAgZm9udFNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg0XCIgZ3V0dGVyQm90dG9tIGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfT5cbiAgICAgICAgICAgICAgICB7dGlja2V0Py50aWNrZXRfdHlwZT8ubmFtZX1cbiAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJib2R5MlwiXG4gICAgICAgICAgICAgICAgZ3V0dGVyQm90dG9tXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc3VidGl0bGV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dChcInRpY2tldF9kZXRhaWwucHVyY2hhc2VkX2J5XCIpfSB7dGlja2V0Py5vd25lcj8uZW1haWx9XG4gICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cblxuICAgICAgICAgICAgICB7aXNDb21wbGV0ZSAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMucXJDb2RlfT5cbiAgICAgICAgICAgICAgICAgICAgPFFSQ29kZVxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9ezI1Nn1cbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RpY2tldC5xcl9jb2RlfVxuICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjU2IDI1NlwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT17c3R5bGVzLnN0YXR1c30+e3QoXCJ0aWNrZXRfZGV0YWlsLnN0YXR1c1wiKX08L3A+XG4gICAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiYm9keTJcIlxuICAgICAgICAgICAgICAgICAgICBndXR0ZXJCb3R0b21cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucXJOb3RlfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dChcInRpY2tldF9kZXRhaWwucXJfbm90ZVwiKX1cbiAgICAgICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICB7IXN1bW1pdD8uaXNfdmlydHVhbCAmJiBpc0NvbXBsZXRlICYmIChcbiAgICAgICAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmFjdGlvbkJ1dHRvbnNDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5kb3dubG9hZEJ0bn1cbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxEb3dubG9hZEljb24gZm9udFNpemU9XCJsYXJnZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIHt0KFwidGlja2V0X2RldGFpbC5kb3dubG9hZFwiKX1cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9e3N0eWxlcy5zZW5kQnRufT5cbiAgICAgICAgICAgICAgICAgICAgPEVtYWlsSWNvbiBmb250U2l6ZT1cImxhcmdlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfZGV0YWlsLnNlbmRcIil9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9yZGVyTnVtYmVyfT5cbiAgICAgICAgICAgICAgICA8Q29weVRleHRcbiAgICAgICAgICAgICAgICAgIHRleHQ9e3RpY2tldD8ub3JkZXI/Lm51bWJlcn1cbiAgICAgICAgICAgICAgICAgIHJldmVyc2VkXG4gICAgICAgICAgICAgICAgICB3aWR0aD17MTUwfVxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9e3QoXCJvcmRlcl9zdW1tYXJ5LmNvcHlfb3JkZXJfbnVtYmVyXCIpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiaDRcIlxuICAgICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlSW5mb1RpdGxlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfZGV0YWlsLmF0dGVuZGVlX2luZm9ybWF0aW9uXCIpfVxuICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgIHt0aWNrZXQgJiYgKFxuICAgICAgICAgICAgICAgIDxUaWNrZXRGb3JtXG4gICAgICAgICAgICAgICAgICB0aWNrZXQ9e3RpY2tldH1cbiAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zPXtleHRyYVF1ZXN0aW9uc31cbiAgICAgICAgICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgICAgICAgICAgY2FuRWRpdD17Y2FuRWRpdFRpY2tldERhdGF9XG4gICAgICAgICAgICAgICAgICBvblN1Ym1pdD17b25TYXZlfVxuICAgICAgICAgICAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L0RyYXdlcj5cbiAgICAgIDxDdXN0b21EaWFsb2dcbiAgICAgICAgb3Blbj17ISFzYXZlTWVzc2FnZX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZVNhdmVNZXNzYWdlfVxuICAgICAgICB0aXRsZT17c2F2ZU1lc3NhZ2U/LnRpdGxlfVxuICAgICAgICBkZXNjcmlwdGlvbj17c2F2ZU1lc3NhZ2U/LmRlc2NyaXB0aW9ufVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cblRpY2tldERldGFpbC5wcm9wVHlwZXMgPSB7XG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgdGlja2V0SWQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIG9yZGVySWQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIG93bmVySWQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWNrZXREZXRhaWw7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBUZXh0RmllbGQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlRm9ybWlrIH0gZnJvbSBcImZvcm1pa1wiO1xuaW1wb3J0ICogYXMgeXVwIGZyb20gXCJ5dXBcIjtcblxuaW1wb3J0IEZvcm1Gb290ZXIgZnJvbSBcIi4uLy4uLy4uL0Zvcm1Gb290ZXJcIjtcblxuY29uc3QgUmVhc3NpZ25Gb3JtID0gKHsgb25TdWJtaXQsIG9uQ2xvc2UgfSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgZm9ybWlrID0gdXNlRm9ybWlrKHtcbiAgICBpbml0aWFsVmFsdWVzOiB7XG4gICAgICBuZXdfYXR0ZW5kZWVfZW1haWw6IFwiXCIsXG4gICAgICBwZXJzb25hbF9tZXNzYWdlOiBcIlwiXG4gICAgfSxcbiAgICB2YWxpZGF0aW9uU2NoZW1hOiB5dXAub2JqZWN0KHtcbiAgICAgIG5ld19hdHRlbmRlZV9lbWFpbDogeXVwXG4gICAgICAgIC5zdHJpbmcodChcInZhbGlkYXRpb24uZW1haWwuc3RyaW5nXCIpKVxuICAgICAgICAuZW1haWwodChcInZhbGlkYXRpb24uZW1haWwuZm9ybWF0XCIpKVxuICAgICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb24uZW1haWwucmVxdWlyZWRcIikpLFxuICAgICAgcGVyc29uYWxfbWVzc2FnZTogeXVwLnN0cmluZyh0KFwidmFsaWRhdGlvbi50ZXh0LnN0cmluZ1wiKSlcbiAgICB9KSxcbiAgICBvblN1Ym1pdFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxmb3JtIG9uU3VibWl0PXtmb3JtaWsuaGFuZGxlU3VibWl0fSBub1ZhbGlkYXRlPlxuICAgICAgPFRleHRGaWVsZFxuICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgbmFtZT1cIm5ld19hdHRlbmRlZV9lbWFpbFwiXG4gICAgICAgIGxhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLm5ld19hdHRlbmRlZV9lbWFpbFwiKX1cbiAgICAgICAgdmFsdWU9e2Zvcm1pay52YWx1ZXMubmV3X2F0dGVuZGVlX2VtYWlsfVxuICAgICAgICBvbkNoYW5nZT17Zm9ybWlrLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgb25CbHVyPXtmb3JtaWsuaGFuZGxlQmx1cn1cbiAgICAgICAgZXJyb3I9e1xuICAgICAgICAgIGZvcm1pay50b3VjaGVkLm5ld19hdHRlbmRlZV9lbWFpbCAmJlxuICAgICAgICAgIEJvb2xlYW4oZm9ybWlrLmVycm9ycy5uZXdfYXR0ZW5kZWVfZW1haWwpXG4gICAgICAgIH1cbiAgICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgICAgZm9ybWlrLnRvdWNoZWQubmV3X2F0dGVuZGVlX2VtYWlsICYmIGZvcm1pay5lcnJvcnMubmV3X2F0dGVuZGVlX2VtYWlsXG4gICAgICAgIH1cbiAgICAgICAgcmVxdWlyZWRcbiAgICAgIC8+XG4gICAgICA8VGV4dEZpZWxkXG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBuYW1lPVwicGVyc29uYWxfbWVzc2FnZVwiXG4gICAgICAgIGxhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLnBlcnNvbmFsX21lc3NhZ2VcIil9XG4gICAgICAgIHZhbHVlPXtmb3JtaWsudmFsdWVzLnBlcnNvbmFsX21lc3NhZ2V9XG4gICAgICAgIG11bHRpbGluZVxuICAgICAgICBtaW5Sb3dzPXs0fVxuICAgICAgICBvbkNoYW5nZT17Zm9ybWlrLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgb25CbHVyPXtmb3JtaWsuaGFuZGxlQmx1cn1cbiAgICAgICAgZXJyb3I9e1xuICAgICAgICAgIGZvcm1pay50b3VjaGVkLnBlcnNvbmFsX21lc3NhZ2UgJiZcbiAgICAgICAgICBCb29sZWFuKGZvcm1pay5lcnJvcnMucGVyc29uYWxfbWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgICBmb3JtaWsudG91Y2hlZC5wZXJzb25hbF9tZXNzYWdlICYmIGZvcm1pay5lcnJvcnMucGVyc29uYWxfbWVzc2FnZVxuICAgICAgICB9XG4gICAgICAvPlxuICAgICAgPEZvcm1Gb290ZXJcbiAgICAgICAgc2F2ZUxhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLnNhdmVcIil9XG4gICAgICAgIGNhbmNlbExhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLmNhbmNlbFwiKX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Zvcm1pay5pc1N1Ym1pdHRpbmd9XG4gICAgICAvPlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cblJlYXNzaWduRm9ybS5wcm9wVHlwZXMgPSB7XG4gIG9uU3VibWl0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWFzc2lnbkZvcm07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBCb3gsIFR5cG9ncmFwaHkgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgcmVhc3NpZ25UaWNrZXQsIHNhdmVFeHRyYVF1ZXN0aW9ucyB9IGZyb20gXCIuLi8uLi9hY3Rpb25zXCI7XG5pbXBvcnQgUmVhc3NpZ25Gb3JtIGZyb20gXCIuL2NvbXBvbmVudHMvUmVhc3NpZ25Gb3JtXCI7XG5pbXBvcnQgUmlnaHREcmF3ZXIgZnJvbSBcIi4uL1JpZ2h0RHJhd2VyXCI7XG5cbmltcG9ydCBBc3NpZ25FUUZvcm0gZnJvbSBcIi4uL0Fzc2lnbkVRRm9ybVwiO1xuaW1wb3J0IHsgdHJhbnNmb3JtQW53ZXJzRm9ybWF0IH0gZnJvbSBcIi4uL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbXBvbmVudHMvdXRpbHNcIjtcbmltcG9ydCBDdXN0b21EaWFsb2cgZnJvbSBcIi4uL0N1c3RvbURpYWxvZ1wiO1xuaW1wb3J0IHVzZUdldFRpY2tldCBmcm9tIFwiLi4vLi4vaG9va3MvdXNlR2V0VGlja2V0XCI7XG5pbXBvcnQgeyBNSUxMSVNFQ19UT19TRUMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IFRpY2tldFJlYXNzaWduID0gKHtcbiAgc3VtbWl0LFxuICB0aWNrZXRJZCxcbiAgb3JkZXJJZCxcbiAgb3duZXJJZCxcbiAgb3BlbixcbiAgb25DbG9zZVxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgW3NhdmVNZXNzYWdlLCBzZXRTYXZlTWVzc2FnZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3RpY2tldFJlYXNzaWduZWQsIHNldFRpY2tldFJlYXNzaWduZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7IHRpY2tldCwgZXh0cmFRdWVzdGlvbnMgfSA9IHVzZUdldFRpY2tldChcbiAgICB0aWNrZXRJZCxcbiAgICBvcmRlcklkLFxuICAgIG93bmVySWQsXG4gICAgb3BlblxuICApO1xuXG4gIGNvbnN0IG9uUmVhc3NpZ24gPSAodmFsKSA9PiB7XG4gICAgY29uc3QgeyBuZXdfYXR0ZW5kZWVfZW1haWwsIHBlcnNvbmFsX21lc3NhZ2UgfSA9IHZhbDtcbiAgICByZXR1cm4gZGlzcGF0Y2goXG4gICAgICByZWFzc2lnblRpY2tldChvcmRlcklkLCB0aWNrZXRJZCwgbmV3X2F0dGVuZGVlX2VtYWlsLCBwZXJzb25hbF9tZXNzYWdlKVxuICAgICkudGhlbigoKSA9PiB7XG4gICAgICBzZXRUaWNrZXRSZWFzc2lnbmVkKHRydWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xvc2VFUUZvcm0gPSAoKSA9PiB7XG4gICAgc2V0VGlja2V0UmVhc3NpZ25lZChmYWxzZSk7XG4gICAgb25DbG9zZSgpO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xvc2VTYXZlTWVzc2FnZSA9ICgpID0+IHtcbiAgICBzZXRTYXZlTWVzc2FnZShudWxsKTtcbiAgICBzZXRUaWNrZXRSZWFzc2lnbmVkKGZhbHNlKTtcbiAgICBzZXRUaW1lb3V0KG9uQ2xvc2UsIE1JTExJU0VDX1RPX1NFQyk7XG4gIH07XG5cbiAgY29uc3Qgb25TYXZlRVEgPSAodmFsKSA9PiB7XG4gICAgY29uc3QgYW5zd2VycyA9IHRyYW5zZm9ybUFud2Vyc0Zvcm1hdCh2YWwpO1xuXG4gICAgcmV0dXJuIGRpc3BhdGNoKHNhdmVFeHRyYVF1ZXN0aW9ucyh0aWNrZXQsIGFuc3dlcnMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBzZXRTYXZlTWVzc2FnZSh7XG4gICAgICAgICAgdGl0bGU6IHQoXCJ0aWNrZXRfcmVhc3NpZ24uc2F2aW5nX3N1Y2Nlc3NcIiksXG4gICAgICAgICAgZGVzY3JpcHRpb246IHQoXCJ0aWNrZXRfcmVhc3NpZ24uc2F2aW5nX3N1Y2Nlc3NfZGVzY3JpcHRpb25cIilcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBzZXRTYXZlTWVzc2FnZSh7XG4gICAgICAgICAgdGl0bGU6IHQoXCJ0aWNrZXRfcmVhc3NpZ24uc2F2aW5nX2Vycm9yXCIpLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBlcnIudG9TdHJpbmcoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgICB9KTtcbiAgfTtcblxuICBjb25zdCBnZXRMYWJlbHMgPSAoKSA9PiB7XG4gICAgaWYgKHRpY2tldFJlYXNzaWduZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiB0KFwidGlja2V0X3JlYXNzaWduLnJlYXNzaWduX3RpY2tldFwiKSxcbiAgICAgICAgc3VidGl0bGU6IGAke3QoXCJ0aWNrZXRfcmVhc3NpZ24ucmVhc3NpZ25lZF90b1wiKX0gJHtcbiAgICAgICAgICB0aWNrZXQ/Lm93bmVyPy5lbWFpbFxuICAgICAgICB9YCxcbiAgICAgICAgaGVhZGVyTm90ZTogdChcInRpY2tldF9yZWFzc2lnbi5jb21wbGV0ZV9pbmZvXCIpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogdChcInRpY2tldF9yZWFzc2lnbi5yZWFzc2lnbl90aWNrZXRcIiksXG4gICAgICBzdWJ0aXRsZTogKFxuICAgICAgICA8PlxuICAgICAgICAgIHt0KFwidGlja2V0X3JlYXNzaWduLmFzc2lnbmVkX3RvXCIpfVxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIHt0aWNrZXQ/Lm93bmVyPy5lbWFpbH1cbiAgICAgICAgPC8+XG4gICAgICApLFxuICAgICAgaGVhZGVyTm90ZTogdChcInRpY2tldF9yZWFzc2lnbi5lbnRlcl9lbWFpbF9ub3RlXCIpXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCB7IHRpdGxlLCBzdWJ0aXRsZSwgaGVhZGVyTm90ZSB9ID0gZ2V0TGFiZWxzKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFJpZ2h0RHJhd2VyXG4gICAgICAgIGlkPVwicmVhc3NpZ25EcmF3ZXJcIlxuICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgIG9wZW49e29wZW59XG4gICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRpY2tldFJlYXNzaWduQ29udGFpbmVyfVxuICAgICAgPlxuICAgICAgICB7dGlja2V0ICYmIGV4dHJhUXVlc3Rpb25zICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg0XCIgZ3V0dGVyQm90dG9tIGNsYXNzTmFtZT17c3R5bGVzLnN1YnRpdGxlfT5cbiAgICAgICAgICAgICAgICB7c3VidGl0bGV9XG4gICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiYm9keTFcIlxuICAgICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlck5vdGV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7aGVhZGVyTm90ZX1cbiAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiaDRcIlxuICAgICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlSW5mb1RpdGxlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3RpY2tldD8udHlwZT8ubmFtZX1cbiAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICB7dGlja2V0ICYmICF0aWNrZXRSZWFzc2lnbmVkICYmIChcbiAgICAgICAgICAgICAgICA8UmVhc3NpZ25Gb3JtXG4gICAgICAgICAgICAgICAgICB0aWNrZXQ9e3RpY2tldH1cbiAgICAgICAgICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUmVhc3NpZ259XG4gICAgICAgICAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHt0aWNrZXQgJiYgdGlja2V0UmVhc3NpZ25lZCAmJiAoXG4gICAgICAgICAgICAgICAgPEFzc2lnbkVRRm9ybVxuICAgICAgICAgICAgICAgICAgdGlja2V0PXt0aWNrZXR9XG4gICAgICAgICAgICAgICAgICBzdW1taXQ9e3N1bW1pdH1cbiAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zPXtleHRyYVF1ZXN0aW9uc31cbiAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtvblNhdmVFUX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2VFUUZvcm19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9SaWdodERyYXdlcj5cbiAgICAgIDxDdXN0b21EaWFsb2dcbiAgICAgICAgb3Blbj17ISFzYXZlTWVzc2FnZX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZVNhdmVNZXNzYWdlfVxuICAgICAgICB0aXRsZT17c2F2ZU1lc3NhZ2U/LnRpdGxlfVxuICAgICAgICBkZXNjcmlwdGlvbj17c2F2ZU1lc3NhZ2U/LmRlc2NyaXB0aW9ufVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cblRpY2tldFJlYXNzaWduLnByb3BUeXBlcyA9IHtcbiAgc3VtbWl0OiBQcm9wVHlwZXMub2JqZWN0LFxuICB0aWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgb3JkZXJJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgb3duZXJJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWNrZXRSZWFzc2lnbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IENvbnRhaW5lciwgQnV0dG9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZVRpY2tldERldGFpbHMgfSBmcm9tIFwiLi4vLi4vaG9va3MvdXNlVGlja2V0RGV0YWlsc1wiO1xuXG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IFRpY2tldFN0YXR1cyA9ICh7IHRpY2tldCB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaXNBY3RpdmUgPSB0aWNrZXQuaXNfYWN0aXZlO1xuICBjb25zdCByZWZ1bmRSZXF1ZXN0cyA9IHRpY2tldC5yZWZ1bmRfcmVxdWVzdHM/LmZpbmQoXG4gICAgKHIpID0+IHIuc3RhdHVzID09PSBcIlJlcXVlc3RlZFwiXG4gICk7XG4gIGNvbnN0IHsgaXNJbmNvbXBsZXRlLCBpc1VuYXNzaWduZWQsIGlzQ29tcGxldGUgfSA9IHVzZVRpY2tldERldGFpbHModGlja2V0KTtcblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPXtzdHlsZXMudGlja2V0U3RhdHVzQ29udGFpbmVyfT5cbiAgICAgIHtpc0FjdGl2ZSA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7cmVmdW5kUmVxdWVzdHMgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cInRpY2tldCBzdGF0dXMgcmVmdW5kIHJlcXVlc3RlZFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLmJ1dHRvblBpbGx9ICR7c3R5bGVzLmJ1dHRvblJlZnVuZFJlcXVlc3RlZH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dChcInRpY2tldF9zdGF0dXMuc3RhdHVzX3JlZnVuZF9yZXF1ZXN0ZWRcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpc0luY29tcGxldGUgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cInRpY2tldCBzdGF0dXMgaW5jb21wbGV0ZVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLmJ1dHRvblBpbGx9ICR7c3R5bGVzLmJ1dHRvbkluY29tcGxldGV9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLnN0YXR1c19pbmNvbXBsZXRlXCIpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aXNVbmFzc2lnbmVkICYmIChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJ0aWNrZXQgc3RhdHVzIHVuYXNzaWduZWRcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5idXR0b25QaWxsfSAke3N0eWxlcy5idXR0b25VbmFzc2lnbmVkfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KFwidGlja2V0X3N0YXR1cy5zdGF0dXNfdW5hc3NpZ25lZFwiKX1cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2lzQ29tcGxldGUgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cInRpY2tldCBzdGF0dXMgY29tcGxldGVcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5idXR0b25QaWxsfSAke3N0eWxlcy5idXR0b25Db21wbGV0ZX1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dChcInRpY2tldF9zdGF0dXMuc3RhdHVzX2NvbXBsZXRlXCIpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApIDogKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cInRpY2tldCBzdGF0dXMgY2FuY2VsbGVkXCJcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5idXR0b25QaWxsfSAke3N0eWxlcy5idXR0b25DYW5jZWxsZWR9YH1cbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwidGlja2V0X3N0YXR1cy5zdGF0dXNfY2FuY2VsbGVkXCIpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICl9XG4gICAgPC9Db250YWluZXI+XG4gICk7XG59O1xuXG5UaWNrZXRTdGF0dXMucHJvcFR5cGVzID0ge1xuICB0aWNrZXQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgb3duZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBzdGF0dXM6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICByZWZ1bmRSZXF1ZXN0czogUHJvcFR5cGVzLmFycmF5T2YoT2JqZWN0KVxuICB9KVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGlja2V0U3RhdHVzO1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3IgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IGdldEV4dHJhUXVlc3Rpb25zLCBnZXRUaWNrZXQgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuXG5jb25zdCB1c2VHZXRUaWNrZXQgPSAodGlja2V0SWQsIG9yZGVySWQsIG93bmVySWQsIHJ1bikgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGlja2V0SWQgJiYgb3JkZXJJZCAmJiBvd25lcklkICYmIHJ1bikge1xuICAgICAgZGlzcGF0Y2goZ2V0VGlja2V0KHRpY2tldElkLCBvcmRlcklkKSk7XG4gICAgICBkaXNwYXRjaChnZXRFeHRyYVF1ZXN0aW9ucyhvd25lcklkKSk7XG4gICAgfVxuICB9LCBbdGlja2V0SWQsIG9yZGVySWQsIG93bmVySWQsIHJ1bl0pO1xuXG4gIGNvbnN0IHsgZXh0cmFRdWVzdGlvbnMsIGN1cnJlbnRUaWNrZXQ6IHRpY2tldCB9ID0gdXNlU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS53aWRnZXRTdGF0ZVxuICApO1xuXG4gIHJldHVybiB7IHRpY2tldCwgZXh0cmFRdWVzdGlvbnMgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUdldFRpY2tldDtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG4vLyBTbW9vdGggc2Nyb2xsaW5nIGZ1bmN0aW9uIHVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuZnVuY3Rpb24gc21vb3RoU2Nyb2xsVG8oY29udGFpbmVyLCB0YXJnZXRTY3JvbGxUb3AsIGR1cmF0aW9uKSB7XG4gIGNvbnN0IHN0YXJ0U2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgY29uc3QgZGlzdGFuY2UgPSB0YXJnZXRTY3JvbGxUb3AgLSBzdGFydFNjcm9sbFRvcDtcbiAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gYW5pbWF0aW9uU3RlcCh0aW1lc3RhbXApIHtcbiAgICBpZiAoIXN0YXJ0VGltZSkgc3RhcnRUaW1lID0gdGltZXN0YW1wO1xuICAgIGNvbnN0IGVsYXBzZWQgPSB0aW1lc3RhbXAgLSBzdGFydFRpbWU7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5taW4oZWxhcHNlZCAvIGR1cmF0aW9uLCAxKTtcbiAgICBjb25zdCBlYXNlSW5PdXRRdWFkID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICBwcm9ncmVzcyA8IDAuNSA/IDIgKiBwcm9ncmVzcyAqKiAyIDogMSAtICgtMiAqIHByb2dyZXNzICsgMikgKiogMiAvIDI7XG5cbiAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gc3RhcnRTY3JvbGxUb3AgKyBkaXN0YW5jZSAqIGVhc2VJbk91dFF1YWQ7XG5cbiAgICBpZiAoZWxhcHNlZCA8IGR1cmF0aW9uKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uU3RlcCk7XG4gICAgfVxuICB9XG5cbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvblN0ZXApO1xufVxuXG5jb25zdCB1c2VTY3JvbGxUb0Vycm9yID0gKGZvcm1paywgY29udGFpbmVySWQpID0+IHtcbiAgY29uc3QgeyBlcnJvcnMsIGlzVmFsaWQsIGlzU3VibWl0dGluZyB9ID0gZm9ybWlrO1xuICBjb25zdCBlcnJvckFycmF5ID0gT2JqZWN0LmtleXMoZXJyb3JzKTtcbiAgY29uc3QgZXJyb3JDb3VudCA9IGVycm9yQXJyYXkubGVuZ3RoO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzVmFsaWQgfHwgZXJyb3JDb3VudCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gc29ydCBlbGVtZW50cyBieSBwb3NpdGlvblxuICAgIGNvbnN0IGVsZW1lbnRzU29ydGVkID0gZXJyb3JBcnJheVxuICAgICAgLnJlZHVjZSgocmVzdWx0LCBlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbbmFtZT0nJHtlcnJvcn0nXWApO1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBlbGVtZW50LCBlcnJvciwgdG9wOiBlbFJlY3QudG9wIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LCBbXSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRvcCAtIGIudG9wKTtcblxuICAgIGlmIChlbGVtZW50c1NvcnRlZC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpXG4gICAgICAucXVlcnlTZWxlY3RvcihcIi5NdWlEcmF3ZXItcGFwZXJcIik7XG4gICAgY29uc3QgdGFyZ2V0ID0gZWxlbWVudHNTb3J0ZWRbMF07XG5cbiAgICBpZiAoY29udGFpbmVyPy5jb250YWlucyh0YXJnZXQuZWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudCByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyXG4gICAgICBjb25zdCBlbGVtT2ZmZXN0ID0gMTAwO1xuICAgICAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSA1MDA7XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPVxuICAgICAgICB0YXJnZXQudG9wIC0gY29udGFpbmVyUmVjdC50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wIC0gZWxlbU9mZmVzdDtcblxuICAgICAgLy8gU2Nyb2xsIHRoZSBjb250YWluZXIgdG8gdGhlIHRhcmdldCBlbGVtZW50J3MgcG9zaXRpb25cbiAgICAgIHNtb290aFNjcm9sbFRvKGNvbnRhaW5lciwgc2Nyb2xsVG9wLCBhbmltYXRpb25EdXJhdGlvbik7IC8vIDUwMG1zIGR1cmF0aW9uXG4gICAgfVxuICB9LCBbaXNTdWJtaXR0aW5nXSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VTY3JvbGxUb0Vycm9yO1xuIiwiaW1wb3J0IHsgaXNUaWNrZXRSZWZ1bmRhYmxlIH0gZnJvbSBcIi4uL3V0aWxzL3RpY2tldFV0aWxzXCI7XG5cbmV4cG9ydCBjb25zdCBTVEFUVVNfQ09NUExFVEUgPSBcIkNvbXBsZXRlXCI7XG5leHBvcnQgY29uc3QgU1RBVFVTX0lOQ09NUExFVEUgPSBcIkluY29tcGxldGVcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfQ0FOQ0VMTEVEID0gXCJDYW5jZWxsZWRcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfVU5BU1NJR05FRCA9IFwiVW5hc3NpZ25lZFwiO1xuXG5leHBvcnQgY29uc3QgdXNlVGlja2V0RGV0YWlscyA9ICh0aWNrZXQpID0+IHtcbiAgY29uc3QgZ2V0U3RhdHVzID0gKCkgPT4ge1xuICAgIGlmICghdGlja2V0LmlzX2FjdGl2ZSkgcmV0dXJuIFNUQVRVU19DQU5DRUxMRUQ7XG4gICAgaWYgKHRpY2tldC5vd25lcl9pZCA9PT0gMCkgcmV0dXJuIFNUQVRVU19VTkFTU0lHTkVEO1xuICAgIGlmICghdGlja2V0Lm93bmVyPy5maXJzdF9uYW1lIHx8ICF0aWNrZXQub3duZXI/Lmxhc3RfbmFtZSlcbiAgICAgIHJldHVybiBTVEFUVVNfSU5DT01QTEVURTtcbiAgICByZXR1cm4gdGlja2V0Lm93bmVyLnN0YXR1cztcbiAgfTtcblxuICBpZiAoIXRpY2tldCkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IHN0YXR1cyA9IGdldFN0YXR1cygpO1xuICBjb25zdCBpc0FjdGl2ZSA9IHRpY2tldC5pc19hY3RpdmUgJiYgc3RhdHVzICE9PSBTVEFUVVNfQ0FOQ0VMTEVEO1xuICBjb25zdCBpc1JlZnVuZGFibGUgPSBpc1RpY2tldFJlZnVuZGFibGUodGlja2V0KTtcbiAgY29uc3QgYWxsb3dzRGVsZWdhdGUgPVxuICAgICh0aWNrZXQ/LnRpY2tldF90eXBlPy5hbGxvd3NfdG9fZGVsZWdhdGUgfHxcbiAgICAgIHRpY2tldD8ucHJvbW9fY29kZT8uYWxsb3dzX3RvX2RlbGVnYXRlKSAmJlxuICAgIHN0YXR1cyAhPT0gU1RBVFVTX1VOQVNTSUdORUQgJiZcbiAgICAhdGlja2V0Lm93bmVyPy5tYW5hZ2VyPy5pZCAmJlxuICAgICF0aWNrZXQub3duZXI/Lm1hbmFnZXJfaWQ7XG4gIGNvbnN0IGlzQ29tcGxldGUgPSBzdGF0dXMgPT09IFNUQVRVU19DT01QTEVURTtcbiAgY29uc3QgaXNVbmFzc2lnbmVkID0gc3RhdHVzID09PSBTVEFUVVNfVU5BU1NJR05FRDtcbiAgY29uc3QgaXNJbmNvbXBsZXRlID0gc3RhdHVzID09PSBTVEFUVVNfSU5DT01QTEVURTtcbiAgY29uc3QgY2FuUmVhc3NpZ24gPSAhaXNVbmFzc2lnbmVkICYmIHRpY2tldC50aWNrZXRfdHlwZS5hbGxvd3NfdG9fcmVhc3NpZ24gJiYgKCF0aWNrZXQucHJvbW9fY29kZSB8fCB0aWNrZXQucHJvbW9fY29kZS5hbGxvd3NfdG9fcmVhc3NpZ24pO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdHVzLFxuICAgIGlzQ29tcGxldGUsXG4gICAgaXNVbmFzc2lnbmVkLFxuICAgIGlzSW5jb21wbGV0ZSxcbiAgICBpc0FjdGl2ZSxcbiAgICBpc1JlZnVuZGFibGUsXG4gICAgYWxsb3dzRGVsZWdhdGUsXG4gICAgY2FuUmVhc3NpZ25cbiAgfTtcbn07XG4iLCJpbXBvcnQgaTE4biBmcm9tIFwiaTE4bmV4dFwiO1xuaW1wb3J0IHsgaW5pdFJlYWN0STE4bmV4dCB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgTGFuZ3VhZ2VEZXRlY3RvciBmcm9tIFwiaTE4bmV4dC1icm93c2VyLWxhbmd1YWdlZGV0ZWN0b3JcIjtcbmltcG9ydCBlbiBmcm9tIFwiLi9sb2NhbGVzL2VuLmpzb25cIjtcbmltcG9ydCBlcyBmcm9tIFwiLi9sb2NhbGVzL2VzLmpzb25cIjtcblxuLy8gaW1wb3J0IEJhY2tlbmQgZnJvbSAnaTE4bmV4dC1odHRwLWJhY2tlbmQnO1xuLy8gZG9uJ3Qgd2FudCB0byB1c2UgdGhpcz9cbi8vIGhhdmUgYSBsb29rIGF0IHRoZSBRdWljayBzdGFydCBndWlkZVxuLy8gZm9yIHBhc3NpbmcgaW4gbG5nIGFuZCB0cmFuc2xhdGlvbnMgb24gaW5pdFxuXG5pMThuXG4gIC8vIGxvYWQgdHJhbnNsYXRpb24gdXNpbmcgaHR0cCAtPiBzZWUgL3B1YmxpYy9sb2NhbGVzIChpLmUuIGh0dHBzOi8vZ2l0aHViLmNvbS9pMThuZXh0L3JlYWN0LWkxOG5leHQvdHJlZS9tYXN0ZXIvZXhhbXBsZS9yZWFjdC9wdWJsaWMvbG9jYWxlcylcbiAgLy8gbGVhcm4gbW9yZTogaHR0cHM6Ly9naXRodWIuY29tL2kxOG5leHQvaTE4bmV4dC1odHRwLWJhY2tlbmRcbiAgLy8gd2FudCB5b3VyIHRyYW5zbGF0aW9ucyB0byBiZSBsb2FkZWQgZnJvbSBhIHByb2Zlc3Npb25hbCBDRE4/ID0+IGh0dHBzOi8vZ2l0aHViLmNvbS9sb2NpemUvcmVhY3QtdHV0b3JpYWwjc3RlcC0yLS0tdXNlLXRoZS1sb2NpemUtY2RuXG4gIC8vIC51c2UoQmFja2VuZClcbiAgLy8gZGV0ZWN0IHVzZXIgbGFuZ3VhZ2VcbiAgLy8gbGVhcm4gbW9yZTogaHR0cHM6Ly9naXRodWIuY29tL2kxOG5leHQvaTE4bmV4dC1icm93c2VyLWxhbmd1YWdlRGV0ZWN0b3JcbiAgLnVzZShMYW5ndWFnZURldGVjdG9yKVxuICAvLyBwYXNzIHRoZSBpMThuIGluc3RhbmNlIHRvIHJlYWN0LWkxOG5leHQuXG4gIC51c2UoaW5pdFJlYWN0STE4bmV4dClcbiAgLy8gaW5pdCBpMThuZXh0XG4gIC8vIGZvciBhbGwgb3B0aW9ucyByZWFkOiBodHRwczovL3d3dy5pMThuZXh0LmNvbS9vdmVydmlldy9jb25maWd1cmF0aW9uLW9wdGlvbnNcbiAgLmluaXQoe1xuICAgIGZhbGxiYWNrTG5nOiBcImVuXCIsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIHJlc291cmNlczoge1xuICAgICAgZW46IHsgdHJhbnNsYXRpb246IGVuIH0sXG4gICAgICBlczogeyB0cmFuc2xhdGlvbjogZXMgfVxuICAgIH0sXG4gICAgaW50ZXJwb2xhdGlvbjoge1xuICAgICAgZXNjYXBlVmFsdWU6IGZhbHNlIC8vIG5vdCBuZWVkZWQgZm9yIHJlYWN0IGFzIGl0IGVzY2FwZXMgYnkgZGVmYXVsdFxuICAgIH1cbiAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuaW1wb3J0IHsgTE9HT1VUX1VTRVIgfSBmcm9tIFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi9zZWN1cml0eS9hY3Rpb25zXCI7XG5pbXBvcnQge1xuICBTVEFSVF9MT0FESU5HLFxuICBTVE9QX0xPQURJTkcsXG4gIFJFU0VUX0xPQURJTkdcbn0gZnJvbSBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvdXRpbHMvYWN0aW9uc1wiO1xuaW1wb3J0IHtcbiAgUkVTRVRfU1RBVEUsXG4gIFJFU0VUX0ZJTFRFUixcbiAgU0VUX1NUQVRFLFxuICBTRVRfVVNFUixcbiAgR0VUX1VTRVJfT1JERVJTLFxuICBHRVRfVElDS0VUU19CWV9PUkRFUixcbiAgVVBEQVRFX1RJQ0tFVFNfUkVGVU5EX1JFUVVFU1RFRCxcbiAgUkVDRUlWRV9USUNLRVQsXG4gIFJFQ0VJVkVfRVhUUkFfUVVFU1RJT05TLFxuICBVUERBVEVfVElDS0VULFxuICBBU1NJR05fVElDS0VUXG59IGZyb20gXCIuL2FjdGlvbnNcIjtcbmltcG9ydCB7IEZJUlNUX1BBR0UgfSBmcm9tIFwiLi91dGlscy9jb25zdGFudHNcIjtcblxuY29uc3QgREVGQVVMVF9TVEFURSA9IHtcbiAgc3VtbWl0OiBudWxsLFxuICB1c2VyOiB7fSxcbiAgd2lkZ2V0TG9hZGluZzogZmFsc2UsXG4gIG1lbWJlck9yZGVyczogW10sXG4gIGV4dHJhUXVlc3Rpb25zOiBbXSxcbiAgY3VycmVudFRpY2tldDogbnVsbCxcbiAgZXJyb3JzOiB7fSxcbiAgbG9hZGluZzogZmFsc2UsXG4gIGlzT3JkZXJMb2FkaW5nOiBmYWxzZSxcbiAgb3JkZXJzX2N1cnJlbnRfcGFnZTogMSxcbiAgb3JkZXJzX2xhc3RfcGFnZTogMSxcbiAgb3JkZXJzX3Blcl9wYWdlOiA1LFxuICBvcmRlcnNfdG90YWw6IDAsXG4gIHRpY2tldF9jdXJyZW50X3BhZ2U6IDEsXG4gIHRpY2tldF9sYXN0X3BhZ2U6IDEsXG4gIHRpY2tldF9wZXJfcGFnZTogNSxcbiAgdGlja2V0X3RvdGFsOiAwXG59O1xuXG5jb25zdCBXaWRnZXRSZWR1Y2VyID0gKHN0YXRlID0gREVGQVVMVF9TVEFURSwgeyB0eXBlLCBwYXlsb2FkIH0gPSB7fSkgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIExPR09VVF9VU0VSOlxuICAgIGNhc2UgUkVTRVRfU1RBVEU6XG4gICAgICByZXR1cm4gREVGQVVMVF9TVEFURTtcbiAgICBjYXNlIFNUQVJUX0xPQURJTkc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgbG9hZGluZzogdHJ1ZSB9O1xuICAgIGNhc2UgU1RPUF9MT0FESU5HOlxuICAgIGNhc2UgUkVTRVRfTE9BRElORzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBsb2FkaW5nOiBmYWxzZSB9O1xuICAgIGNhc2UgUkVTRVRfRklMVEVSOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG9yZGVyc19jdXJyZW50X3BhZ2U6IDEsXG4gICAgICAgIG9yZGVyc19sYXN0X3BhZ2U6IDFcbiAgICAgIH07XG4gICAgY2FzZSBTRVRfU1RBVEU6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgLi4ucGF5bG9hZCB9O1xuICAgIGNhc2UgU0VUX1VTRVI6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgdXNlcjogcGF5bG9hZCB9O1xuICAgIGNhc2UgR0VUX1VTRVJfT1JERVJTOiB7XG4gICAgICBjb25zdCB7IG1lbWJlck9yZGVycyB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7IGRhdGEsIHRvdGFsLCBjdXJyZW50X3BhZ2UsIGxhc3RfcGFnZSB9ID0gcGF5bG9hZC5yZXNwb25zZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG1lbWJlck9yZGVyczpcbiAgICAgICAgICBjdXJyZW50X3BhZ2UgPT09IEZJUlNUX1BBR0UgPyBkYXRhIDogWy4uLm1lbWJlck9yZGVycywgLi4uZGF0YV0sXG4gICAgICAgIG9yZGVyc190b3RhbDogdG90YWwsXG4gICAgICAgIG9yZGVyc19jdXJyZW50X3BhZ2U6IGN1cnJlbnRfcGFnZSxcbiAgICAgICAgb3JkZXJzX2xhc3RfcGFnZTogbGFzdF9wYWdlXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIEdFVF9USUNLRVRTX0JZX09SREVSOiB7XG4gICAgICBjb25zdCB7IG1lbWJlck9yZGVycyB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7IGRhdGEsIHRvdGFsLCBjdXJyZW50X3BhZ2UsIGxhc3RfcGFnZSB9ID0gcGF5bG9hZC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IGZvcm1lck9yZGVyID0gbWVtYmVyT3JkZXJzLmZpbmQoKG8pID0+IG8uaWQgPT09IGRhdGFbMF0/Lm9yZGVyX2lkKTtcblxuICAgICAgY29uc3QgdXBkYXRlZE9yZGVyID0ge1xuICAgICAgICAuLi5mb3JtZXJPcmRlcixcbiAgICAgICAgbWVtYmVyVGlja2V0czpcbiAgICAgICAgICBjdXJyZW50X3BhZ2UgPT09IEZJUlNUX1BBR0VcbiAgICAgICAgICAgID8gZGF0YVxuICAgICAgICAgICAgOiBbLi4uZm9ybWVyT3JkZXIubWVtYmVyVGlja2V0cywgLi4uZGF0YV0sXG4gICAgICAgIHRpY2tldHNfcGFnZV9jdXJyZW50OiBjdXJyZW50X3BhZ2UsXG4gICAgICAgIHRpY2tldHNfcGFnZV9sYXN0OiBsYXN0X3BhZ2UsXG4gICAgICAgIHRpY2tldHNfdG90YWw6IHRvdGFsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG1lbWJlck9yZGVyczogbWVtYmVyT3JkZXJzLm1hcCgobW8pID0+XG4gICAgICAgICAgbW8uaWQgPT09IHVwZGF0ZWRPcmRlci5pZCA/IHVwZGF0ZWRPcmRlciA6IG1vXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgVVBEQVRFX1RJQ0tFVFNfUkVGVU5EX1JFUVVFU1RFRDoge1xuICAgICAgY29uc3QgeyBtZW1iZXJPcmRlcnMgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgdGlja2V0c1JlZnVuZFJlcXVlc3RlZCA9IHBheWxvYWQ7XG4gICAgICBjb25zdCBvcmRlciA9IG1lbWJlck9yZGVycy5maW5kKFxuICAgICAgICAobykgPT4gby5pZCA9PT0gdGlja2V0c1JlZnVuZFJlcXVlc3RlZFswXT8ub3JkZXJfaWRcbiAgICAgICk7XG4gICAgICBjb25zdCB1cGRhdGVkVGlja2V0cyA9IG9yZGVyPy5tZW1iZXJUaWNrZXRzLm1hcChcbiAgICAgICAgKHRpY2tldCkgPT5cbiAgICAgICAgICB0aWNrZXRzUmVmdW5kUmVxdWVzdGVkLmZpbmQoKHRycikgPT4gdHJyLmlkID09PSB0aWNrZXQuaWQpIHx8IHRpY2tldFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRPcmRlciA9IHtcbiAgICAgICAgLi4ub3JkZXIsXG4gICAgICAgIG1lbWJlclRpY2tldHM6IHVwZGF0ZWRUaWNrZXRzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIG1lbWJlck9yZGVyczogbWVtYmVyT3JkZXJzLm1hcCgobW8pID0+XG4gICAgICAgICAgbW8uaWQgPT09IHVwZGF0ZWRPcmRlci5pZCA/IHVwZGF0ZWRPcmRlciA6IG1vXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgUkVDRUlWRV9USUNLRVQ6IHtcbiAgICAgIGNvbnN0IHRpY2tldCA9IHBheWxvYWQucmVzcG9uc2U7XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgY3VycmVudFRpY2tldDogdGlja2V0IH07XG4gICAgfVxuICAgIGNhc2UgUkVDRUlWRV9FWFRSQV9RVUVTVElPTlM6IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcGF5bG9hZC5yZXNwb25zZTtcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBleHRyYVF1ZXN0aW9uczogZGF0YSB9O1xuICAgIH1cbiAgICBjYXNlIFVQREFURV9USUNLRVQ6IHtcbiAgICAgIGNvbnN0IHRpY2tldERhdGEgPSBwYXlsb2FkLnJlc3BvbnNlO1xuICAgICAgY29uc3QgbmV3T3JkZXJzID0gc3RhdGUubWVtYmVyT3JkZXJzLm1hcCgob3JkZXIpID0+IHtcbiAgICAgICAgY29uc3QgbmV3VGlja2V0cyA9IG9yZGVyLm1lbWJlclRpY2tldHMubWFwKCh0aWNrZXQpID0+IHtcbiAgICAgICAgICBpZiAodGlja2V0LmlkID09PSB0aWNrZXREYXRhLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGlja2V0RGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRpY2tldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgLi4ub3JkZXIsIG1lbWJlclRpY2tldHM6IG5ld1RpY2tldHMgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgbWVtYmVyT3JkZXJzOiBuZXdPcmRlcnMgfTtcbiAgICB9XG4gICAgY2FzZSBBU1NJR05fVElDS0VUOiB7XG4gICAgICBjb25zdCB0aWNrZXREYXRhID0gcGF5bG9hZC5yZXNwb25zZTtcbiAgICAgIGNvbnN0IG5ld09yZGVycyA9IHN0YXRlLm1lbWJlck9yZGVycy5tYXAoKG9yZGVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1RpY2tldHMgPSBvcmRlci5tZW1iZXJUaWNrZXRzLm1hcCgodGlja2V0KSA9PiB7XG4gICAgICAgICAgaWYgKHRpY2tldC5pZCA9PT0gdGlja2V0RGF0YS5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRpY2tldERhdGE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aWNrZXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7IC4uLm9yZGVyLCBtZW1iZXJUaWNrZXRzOiBuZXdUaWNrZXRzIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGN1cnJlbnRUaWNrZXQ6IHRpY2tldERhdGEsIG1lbWJlck9yZGVyczogbmV3T3JkZXJzIH07XG4gICAgfVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFdpZGdldFJlZHVjZXI7XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjb25maWd1cmVTdG9yZSB9IGZyb20gXCJAcmVkdXhqcy90b29sa2l0XCI7XG5pbXBvcnQge1xuICBwZXJzaXN0U3RvcmUsXG4gIHBlcnNpc3RSZWR1Y2VyLFxuICBGTFVTSCxcbiAgUkVIWURSQVRFLFxuICBQQVVTRSxcbiAgUEVSU0lTVCxcbiAgUFVSR0UsXG4gIFJFR0lTVEVSXG59IGZyb20gXCJyZWR1eC1wZXJzaXN0XCI7XG5pbXBvcnQgc3RvcmFnZSBmcm9tIFwicmVkdXgtcGVyc2lzdC9saWIvc3RvcmFnZVwiO1xuaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzIH0gZnJvbSBcInJlZHV4XCI7XG5pbXBvcnQgV2lkZ2V0UmVkdWNlciBmcm9tIFwiLi9yZWR1Y2VyXCI7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9yZSA9ICh7XG4gIGNsaWVudElkLFxuICBsb2dpblVybCxcbiAgc3VtbWl0LFxuICBhcGlCYXNlVXJsLFxuICB1cGRhdGVQcm9maWxlXG59KSA9PiB7XG4gIC8vIHRvIGFkZCBvdGhlciByZWR1Y2VycyBsYXRlclxuICBjb25zdCByZWR1Y2VycyA9IGNvbWJpbmVSZWR1Y2Vycyh7XG4gICAgd2lkZ2V0U3RhdGU6IFdpZGdldFJlZHVjZXJcbiAgfSk7XG5cbiAgY29uc3Qgc3RvcmUgPSBjb25maWd1cmVTdG9yZSh7XG4gICAgcmVkdWNlcjogcGVyc2lzdFJlZHVjZXIoXG4gICAgICB7XG4gICAgICAgIGtleTogYHJvb3RfbXlfb3JkZXJzX3RpY2tldHNfJHtjbGllbnRJZH1gLFxuICAgICAgICBzdG9yYWdlXG4gICAgICB9LFxuICAgICAgcmVkdWNlcnNcbiAgICApLFxuICAgIG1pZGRsZXdhcmU6IChnZXREZWZhdWx0TWlkZGxld2FyZSkgPT5cbiAgICAgIGdldERlZmF1bHRNaWRkbGV3YXJlKHtcbiAgICAgICAgdGh1bms6IHtcbiAgICAgICAgICBleHRyYUFyZ3VtZW50OiB7XG4gICAgICAgICAgICBjbGllbnRJZCxcbiAgICAgICAgICAgIGFwaUJhc2VVcmwsXG4gICAgICAgICAgICBzdW1taXQsXG4gICAgICAgICAgICBsb2dpblVybCxcbiAgICAgICAgICAgIHVwZGF0ZVByb2ZpbGVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGltbXV0YWJsZUNoZWNrOiBmYWxzZSxcbiAgICAgICAgc2VyaWFsaXphYmxlQ2hlY2s6IHtcbiAgICAgICAgICBpZ25vcmVkQWN0aW9uczogW0ZMVVNILCBSRUhZRFJBVEUsIFBBVVNFLCBQRVJTSVNULCBQVVJHRSwgUkVHSVNURVJdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH0pO1xuXG4gIHJldHVybiBzdG9yZTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VJbml0U3RvcmUgPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IHN0b3JlID0gdXNlTWVtbygoKSA9PiBnZXRTdG9yZShjb25maWcpLCBbXSk7XG4gIGNvbnN0IHBlcnNpc3RvciA9IHVzZU1lbW8oKCkgPT4gcGVyc2lzdFN0b3JlKHN0b3JlKSwgW3N0b3JlXSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdG9yZSxcbiAgICBwZXJzaXN0b3JcbiAgfTtcbn07XG4iLCJpbXBvcnQge1xuICBpbml0TG9nT3V0LFxuICBnZXRBY2Nlc3NUb2tlblxufSBmcm9tIFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi9zZWN1cml0eS9tZXRob2RzXCI7XG5pbXBvcnQgKiBhcyBTZW50cnkgZnJvbSBcIkBzZW50cnkvcmVhY3RcIjtcblxuZXhwb3J0IGNvbnN0IGdldEFjY2Vzc1Rva2VuU2FmZWx5ID0gYXN5bmMgKCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBnZXRBY2Nlc3NUb2tlbigpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5sb2coXCJteS1vcmRlcnMtdGlja2V0cy13aWRnZTo6IGdldEFjY2Vzc1Rva2VuU2FmZWx5IGVycm9yOiBcIiwgZSk7XG4gICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZSk7XG4gICAgaW5pdExvZ091dCgpO1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICB9XG59O1xuIiwiZXhwb3J0IGNvbnN0IExBU1RfSE9VUl9PRl8yNF9IT1VSID0gMjM7XG5leHBvcnQgY29uc3QgTEFTVF9NSU5VVEVfT0ZfSE9VUiA9IDU5O1xuZXhwb3J0IGNvbnN0IE9ORV9QQUdFX05FWFQgPSAxO1xuZXhwb3J0IGNvbnN0IE1JTExJU0VDX1RPX1NFQyA9IDEwMDA7XG5leHBvcnQgY29uc3QgT05FX0RBWSA9IDE7XG5leHBvcnQgY29uc3QgREVGQVVMVF9JVEVNU19QRVJfUEFHRSA9IDU7XG5leHBvcnQgY29uc3QgRklSU1RfUEFHRSA9IDE7XG5leHBvcnQgY29uc3QgUEFHSU5BVElPTl9ESVNQTEFZX0NPVU5UID0gNTtcbmV4cG9ydCBjb25zdCBTVEVQX09ORSA9IDE7XG5leHBvcnQgY29uc3QgU1RFUF9UV08gPSAyO1xuXG5leHBvcnQgY29uc3QgU1RBVFVTX0NPTVBMRVRFID0gXCJTVEFUVVNfQ09NUExFVEVcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfSU5DT01QTEVURSA9IFwiU1RBVFVTX0lOQ09NUExFVEVcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfUEVORElORyA9IFwiU1RBVFVTX1BFTkRJTkdcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfQ0FOQ0VMTEVEID0gXCJTVEFUVVNfQ0FOQ0VMTEVEXCI7XG5leHBvcnQgY29uc3QgU1RBVFVTX0VSUk9SID0gXCJTVEFUVVNfRVJST1JcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfUFJPQ0VTU0lORyA9IFwiU1RBVFVTX1BST0NFU1NJTkdcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfVU5BU1NJR05FRCA9IFwiU1RBVFVTX1VOQVNTSUdORURcIjtcblxuZXhwb3J0IGNvbnN0IEpFU1RfVElNRU9VVF9JTl9NSUxMSVNFQyA9IDEwMDAwO1xuXG5leHBvcnQgY29uc3QgT05FX0lURU0gPSAxO1xuZXhwb3J0IGNvbnN0IFRXT19JVEVNID0gMjtcbmV4cG9ydCBjb25zdCBGSVZFX0lURU0gPSA1O1xuZXhwb3J0IGNvbnN0IFNJWF9JVEVNID0gNjtcblxuZXhwb3J0IGNvbnN0IFBST01JU0VfQkFUQ0hfTElNSVQgPSAxMDtcbmV4cG9ydCBjb25zdCBGSUZUWV9QRVJfUEFHRSA9IDUwO1xuIiwiaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50LXRpbWV6b25lXCI7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xuaW1wb3J0IHtcbiAgTEFTVF9IT1VSX09GXzI0X0hPVVIsXG4gIExBU1RfTUlOVVRFX09GX0hPVVIsXG4gIE1JTExJU0VDX1RPX1NFQ1xufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEN1cnJlbmN5ID0gKHZhbHVlLCB7IGxvY2FsZSA9IFwiZW4tVVNcIiwgLi4ub3B0aW9ucyB9KSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIGN1cnJlbmN5OiBcIlVTRFwiLFxuICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMixcbiAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDJcbiAgfTtcblxuICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQobG9jYWxlLCB7XG4gICAgc3R5bGU6IFwiY3VycmVuY3lcIixcbiAgICAuLi5kZWZhdWx0T3B0aW9ucyxcbiAgICAuLi5vcHRpb25zXG4gIH0pO1xuXG4gIHJldHVybiBmb3JtYXR0ZXIuZm9ybWF0KHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWREYXRlID0gKGRhdGV0aW1lLCB0aW1lWm9uZSkgPT4ge1xuICBpZiAodGltZVpvbmUpXG4gICAgcmV0dXJuIG1vbWVudFxuICAgICAgLnR6KGRhdGV0aW1lICogTUlMTElTRUNfVE9fU0VDLCB0aW1lWm9uZSlcbiAgICAgIC5mb3JtYXQoXCJNTU1NIERELCBZWVlZXCIpO1xuXG4gIHJldHVybiBtb21lbnQudW5peChkYXRldGltZSkuZm9ybWF0KFwiTU1NTSBERCwgWVlZWVwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjYWxjdWxhdGVPcmRlclRvdGFscyA9ICh7IG9yZGVyLCBzdW1taXQgfSkgPT4ge1xuICBpZiAoIW9yZGVyIHx8ICFzdW1taXQpIHJldHVybiB7fTtcbiAgY29uc3QgdGlja2V0cyA9IG9yZGVyPy5tZW1iZXJUaWNrZXRzO1xuICBpZiAoIXRpY2tldHMpIHJldHVybiB7fTtcblxuICBjb25zdCB7IHJlZnVuZGVkX2Ftb3VudCwgZGlzY291bnRfYW1vdW50LCB0YXhlc19hbW91bnQsIGFtb3VudCB9ID0gb3JkZXI7XG4gIGNvbnN0IHsgdGlja2V0X3R5cGVzIH0gPSBzdW1taXQ7XG5cbiAgY29uc3QgdGlja2V0U3VtbWFyeSA9IFtdO1xuICBsZXQgcHVyY2hhc2VUaWNrZXRUb3RhbCA9IDA7XG5cbiAgY29uc3QgY3VycmVuY3lPYmplY3QgPSB7IGN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeSB9O1xuXG4gIE9iamVjdC5rZXlzKG9yZGVyLnRpY2tldHNfZXhjZXJwdF9ieV90aWNrZXRfdHlwZSkubWFwKCh0aWNrZXQpID0+IHtcbiAgICBjb25zdCB0aWNrZXRUeXBlID0gdGlja2V0X3R5cGVzPy5maW5kKCh0dCkgPT4gdHQubmFtZSA9PT0gdGlja2V0KTtcbiAgICBpZiAoIXRpY2tldFR5cGUpIHJldHVybiBudWxsO1xuICAgIHRpY2tldFN1bW1hcnkucHVzaCh7XG4gICAgICB0aWNrZXRfdHlwZV9pZDogdGlja2V0VHlwZS5pZCxcbiAgICAgIHRpY2tldF90eXBlOiB0aWNrZXRUeXBlLFxuICAgICAgbmFtZTogdGlja2V0LFxuICAgICAgcXR5OiBvcmRlci50aWNrZXRzX2V4Y2VycHRfYnlfdGlja2V0X3R5cGVbdGlja2V0XVxuICAgIH0pO1xuICAgIHB1cmNoYXNlVGlja2V0VG90YWwgKz1cbiAgICAgIHRpY2tldFR5cGUuY29zdCAqIG9yZGVyLnRpY2tldHNfZXhjZXJwdF9ieV90aWNrZXRfdHlwZVt0aWNrZXRdO1xuXG4gICAgcmV0dXJuIHRpY2tldFN1bW1hcnk7XG4gIH0pO1xuXG4gIGNvbnN0IHB1cmNoYXNlVG90YWwgPSBmb3JtYXRDdXJyZW5jeShwdXJjaGFzZVRpY2tldFRvdGFsLCBjdXJyZW5jeU9iamVjdCk7XG5cbiAgY29uc3QgZGlzY291bnRUb3RhbCA9IGZvcm1hdEN1cnJlbmN5KGRpc2NvdW50X2Ftb3VudCwgY3VycmVuY3lPYmplY3QpO1xuICBjb25zdCByZWZ1bmRUb3RhbCA9IGZvcm1hdEN1cnJlbmN5KHJlZnVuZGVkX2Ftb3VudCwgY3VycmVuY3lPYmplY3QpO1xuICBjb25zdCB0YXhlc1RvdGFsID0gZm9ybWF0Q3VycmVuY3kodGF4ZXNfYW1vdW50LCBjdXJyZW5jeU9iamVjdCk7XG4gIGNvbnN0IGFtb3VudFRvdGFsID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9yZGVyLCBcImFtb3VudFwiKVxuICAgID8gZm9ybWF0Q3VycmVuY3koYW1vdW50LCBjdXJyZW5jeU9iamVjdClcbiAgICA6IGZvcm1hdEN1cnJlbmN5KHB1cmNoYXNlVG90YWwsIGN1cnJlbmN5T2JqZWN0KTtcblxuICByZXR1cm4ge1xuICAgIGRpc2NvdW50VG90YWwsXG4gICAgcmVmdW5kVG90YWwsXG4gICAgdGF4ZXNUb3RhbCxcbiAgICBhbW91bnRUb3RhbCxcbiAgICB0aWNrZXRTdW1tYXJ5XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0T3JkZXJUaWNrZXRzID0gKG1lbWJlck9yZGVycywgb3JkZXJJZCkgPT4ge1xuICBjb25zdCBvcmRlcnMgPSBtZW1iZXJPcmRlcnMuZmlsdGVyKChvKSA9PiBvLmlkID09PSBvcmRlcklkKTtcbiAgcmV0dXJuIG9yZGVyc1swXT8ubWVtYmVyVGlja2V0cztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFcG9jaExvd2VyVXBwZXJJblNlY29uZHMgPSAodHMpID0+IHtcbiAgY29uc3QgbG93ZXIgPSB0cy5zZXRIb3VycygwLCAwLCAwLCAwKSAvIE1JTExJU0VDX1RPX1NFQztcbiAgY29uc3QgdXBwZXIgPVxuICAgIHRzLnNldEhvdXJzKExBU1RfSE9VUl9PRl8yNF9IT1VSLCBMQVNUX01JTlVURV9PRl9IT1VSLCAwLCAwKSAvXG4gICAgTUlMTElTRUNfVE9fU0VDO1xuICByZXR1cm4ge1xuICAgIGxvd2VyLFxuICAgIHVwcGVyXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEN1cnJlbnRUaW1lID0gKCkgPT5cbiAgTWF0aC5yb3VuZCgrbmV3IERhdGUoKSAvIE1JTExJU0VDX1RPX1NFQyk7XG5cbmV4cG9ydCBjb25zdCBnZXROb3cgPSAoKSA9PiAoZGlzcGF0Y2gsIGdldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHsgdGltZXJTdGF0ZSB9ID0gZ2V0U3RhdGUoKTtcbiAgcmV0dXJuIHRpbWVyU3RhdGU/Lm5vd1V0YyA9PSBudWxsID8gZGVmYXVsdEN1cnJlbnRUaW1lKCkgOiB0aW1lclN0YXRlPy5ub3dVdGM7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlTm93ID0gKCkgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cbiAgcmV0dXJuIGRpc3BhdGNoKGdldE5vdygpKTtcbn07XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnQtdGltZXpvbmVcIjtcbmltcG9ydCB7IE1JTExJU0VDX1RPX1NFQywgT05FX0RBWSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTm93IH0gZnJvbSBcIi5cIjtcblxuZXhwb3J0IGNvbnN0IGNoZWNrU3VtbWl0UGFzdCA9IChzdW1taXQsIG5vdykgPT4ge1xuICBpZiAoIXN1bW1pdCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgcmVhc3NpZ25fZGF0ZSA9XG4gICAgc3VtbWl0Py5yZWFzc2lnbl90aWNrZXRfdGlsbF9kYXRlICYmXG4gICAgc3VtbWl0LnJlYXNzaWduX3RpY2tldF90aWxsX2RhdGUgPCBzdW1taXQuZW5kX2RhdGVcbiAgICAgID8gc3VtbWl0LnJlYXNzaWduX3RpY2tldF90aWxsX2RhdGVcbiAgICAgIDogc3VtbWl0LmVuZF9kYXRlO1xuXG4gIHJldHVybiBub3cgPiByZWFzc2lnbl9kYXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrU3VtbWl0U3RhcnRlZCA9IChzdW1taXQsIG5vdykgPT4ge1xuICBpZiAoIXN1bW1pdCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIHN1bW1pdC5zdGFydF9kYXRlIDwgbm93O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1bW1pdERheXNEaWZmID0gKHN1bW1pdCkgPT4ge1xuICBpZiAoIXN1bW1pdCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHN0YXJ0RGF5ID0gbW9tZW50KHN1bW1pdC5zdGFydF9kYXRlICogTUlMTElTRUNfVE9fU0VDKS50eihcbiAgICBzdW1taXQudGltZV96b25lX2lkXG4gICk7XG4gIGNvbnN0IGVuZERheSA9IG1vbWVudChzdW1taXQuZW5kX2RhdGUgKiBNSUxMSVNFQ19UT19TRUMpLnR6KFxuICAgIHN1bW1pdC50aW1lX3pvbmVfaWRcbiAgKTtcbiAgY29uc3QgZGF5cyA9IGVuZERheT8uZGlmZihzdGFydERheSwgXCJkYXlzXCIpO1xuICByZXR1cm4ge1xuICAgIHN0YXJ0RGF5LFxuICAgIGVuZERheSxcbiAgICBkYXlzXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3VtbWl0Rm9ybWF0dGVkRGF0ZSA9IChzdW1taXQpID0+IHtcbiAgaWYgKCFzdW1taXQpIHJldHVybiBudWxsO1xuICBjb25zdCB7IHN0YXJ0RGF5LCBlbmREYXksIGRheXMgfSA9IGdldFN1bW1pdERheXNEaWZmKHN1bW1pdCk7XG4gIGlmICghc3RhcnREYXkgfHwgIWVuZERheSkgcmV0dXJuIG51bGw7XG4gIGxldCBmb3JtYXRTdGFydERhdGUgPSBcIk1NTU0gREQsIFlZWVlcIjtcbiAgbGV0IGZvcm1hdEVuZERhdGUgPSBcIk1NTU0gREQsIFlZWVlcIjtcbiAgaWYgKHN0YXJ0RGF5LnllYXIoKSA9PT0gZW5kRGF5LnllYXIoKSkgZm9ybWF0U3RhcnREYXRlID0gXCJNTU1NIEREXCI7XG4gIGlmIChzdGFydERheS5tb250aCgpID09PSBlbmREYXkubW9udGgoKSkgZm9ybWF0RW5kRGF0ZSA9IFwiREQsIFlZWVlcIjtcblxuICBjb25zdCBzdGFydERhdGUgPSBzdGFydERheS5mb3JtYXQoZm9ybWF0U3RhcnREYXRlKTtcbiAgY29uc3QgZW5kRGF0ZSA9IGVuZERheS5mb3JtYXQoZm9ybWF0RW5kRGF0ZSk7XG5cbiAgaWYgKGRheXMgPiBPTkVfREFZKSByZXR1cm4gYCR7c3RhcnREYXRlfSAtICR7ZW5kRGF0ZX1gO1xuXG4gIHJldHVybiBzdGFydERhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3VtbWl0TG9jYXRpb24gPSAoc3VtbWl0KSA9PiB7XG4gIGlmICghc3VtbWl0KSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBsb2NhdGlvbiA9IHN1bW1pdC5sb2NhdGlvbnM/LmZpbmQoXG4gICAgKGwpID0+IGwuY2xhc3NfbmFtZSA9PT0gXCJTdW1taXRWZW51ZVwiICYmIGwuaXNfbWFpbiA9PT0gdHJ1ZVxuICApO1xuXG4gIGlmICghbG9jYXRpb24pIHJldHVybiBudWxsO1xuXG4gIHJldHVybiBgJHtsb2NhdGlvbi5jaXR5fSwgJHtsb2NhdGlvbi5jb3VudHJ5fWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3VtbWl0UmVhc3NpZ25EYXRlID0gKHN1bW1pdCkgPT4ge1xuICBpZiAoIXN1bW1pdCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIHN1bW1pdC5yZWFzc2lnbl90aWNrZXRfdGlsbF9kYXRlICYmXG4gICAgc3VtbWl0LnJlYXNzaWduX3RpY2tldF90aWxsX2RhdGUgPCBzdW1taXQuZW5kX2RhdGVcbiAgICA/IHN1bW1pdC5yZWFzc2lnbl90aWNrZXRfdGlsbF9kYXRlXG4gICAgOiBzdW1taXQuZW5kX2RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlU3VtbWl0RGV0YWlscyA9ICh7IHN1bW1pdCB9KSA9PiB7XG4gIGNvbnN0IG5vdyA9IHVzZU5vdygpO1xuXG4gIGlmICghc3VtbWl0KSByZXR1cm4ge307XG5cbiAgY29uc3QgbG9jYXRpb24gPSBnZXRTdW1taXRMb2NhdGlvbihzdW1taXQpO1xuICBjb25zdCBmb3JtYXR0ZWREYXRlID0gZ2V0U3VtbWl0Rm9ybWF0dGVkRGF0ZShzdW1taXQpO1xuICBjb25zdCByZWFzc2lnbkRhdGUgPSBnZXRTdW1taXRSZWFzc2lnbkRhdGUoc3VtbWl0KTtcbiAgY29uc3QgZm9ybWF0dGVkUmVhc3NpZ25EYXRlID0gbW9tZW50LnR6KFxuICAgIHJlYXNzaWduRGF0ZSxcbiAgICBzdW1taXQudGltZV96b25lPy50aW1lX3pvbmVfaWRcbiAgKTtcbiAgY29uc3QgZGF5c1VudGlsUmVhc3NpZ25EZWFkbGluZSA9IGdldFN1bW1pdERheXNEaWZmKFxuICAgIG5vdyxcbiAgICByZWFzc2lnbkRhdGUsXG4gICAgc3VtbWl0LnRpbWVfem9uZT8ubmFtZVxuICApO1xuXG4gIGNvbnN0IGlzUGFzdCA9IGNoZWNrU3VtbWl0UGFzdChzdW1taXQsIG5vdyk7XG4gIGNvbnN0IGlzU3RhcnRlZCA9IGNoZWNrU3VtbWl0U3RhcnRlZChzdW1taXQsIG5vdyk7XG4gIGNvbnN0IGlzUmVhc3NpZ25hYmxlID0gcmVhc3NpZ25EYXRlID4gbm93O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogc3VtbWl0Py5uYW1lLFxuICAgIG5vdyxcbiAgICBsb2NhdGlvbixcbiAgICBmb3JtYXR0ZWREYXRlLFxuICAgIHJlYXNzaWduRGF0ZSxcbiAgICBmb3JtYXR0ZWRSZWFzc2lnbkRhdGUsXG4gICAgZGF5c1VudGlsUmVhc3NpZ25EZWFkbGluZSxcbiAgICBpc1Bhc3QsXG4gICAgaXNTdGFydGVkLFxuICAgIGlzUmVhc3NpZ25hYmxlXG4gIH07XG59O1xuIiwiaW1wb3J0ICogYXMgeXVwIGZyb20gXCJ5dXBcIjtcbmltcG9ydCBpMThuIGZyb20gXCIuLi9pMThuXCI7XG5pbXBvcnQge1xuICBTVEFUVVNfQ0FOQ0VMTEVELFxuICBTVEFUVVNfQ09NUExFVEUsXG4gIFNUQVRVU19JTkNPTVBMRVRFLFxuICBTVEFUVVNfVU5BU1NJR05FRFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IFRJQ0tFVF9BVFRFTkRFRV9LRVlTIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvVGlja2V0RGV0YWlsL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgY2hlY2tJZlZhbHVlTWF0Y2gsXG4gIGdldFR5cGVJbml0aWFsVmFsdWUsXG4gIHRvU2x1Z1xufSBmcm9tIFwiLi4vY29tcG9uZW50cy9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL3V0aWxzXCI7XG5pbXBvcnQge1xuICBRdWVzdGlvblR5cGVfQ2hlY2tib3gsXG4gIFF1ZXN0aW9uVHlwZV9DaGVja0JveExpc3QsXG4gIFF1ZXN0aW9uVHlwZV9Db21ib0JveCxcbiAgUXVlc3Rpb25UeXBlX0NvdW50cnlDb21ib0JveCxcbiAgUXVlc3Rpb25UeXBlX1JhZGlvQnV0dG9uTGlzdFxufSBmcm9tIFwiLi4vY29tcG9uZW50cy9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IHN0YXR1c0RhdGEgPSB7XG4gIFtTVEFUVVNfVU5BU1NJR05FRF06IHtcbiAgICB0eXBlOiBTVEFUVVNfVU5BU1NJR05FRCxcbiAgICB0ZXh0OiBpMThuLnQoXCJ0aWNrZXRfc3RhdHVzLnVuYXNzaWduZWRcIilcbiAgfSxcbiAgW1NUQVRVU19JTkNPTVBMRVRFXToge1xuICAgIHR5cGU6IFNUQVRVU19JTkNPTVBMRVRFLFxuICAgIHRleHQ6IGkxOG4udChcInRpY2tldF9zdGF0dXMuaW5jb21wbGV0ZVwiKVxuICB9LFxuICBbU1RBVFVTX0NPTVBMRVRFXToge1xuICAgIHR5cGU6IFNUQVRVU19DT01QTEVURSxcbiAgICB0ZXh0OiBpMThuLnQoXCJ0aWNrZXRfc3RhdHVzLmNvbXBsZXRlXCIpXG4gIH0sXG4gIFtTVEFUVVNfQ0FOQ0VMTEVEXToge1xuICAgIHR5cGU6IFNUQVRVU19DQU5DRUxMRUQsXG4gICAgdGV4dDogaTE4bi50KFwidGlja2V0X3N0YXR1cy5jYW5jZWxsZWRcIilcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBnZXRUaWNrZXRTdGF0dXNLZXkgPSAodGlja2V0KSA9PiB7XG4gIGlmICghdGlja2V0LmlzX2FjdGl2ZSkgcmV0dXJuIFNUQVRVU19DQU5DRUxMRUQ7XG5cbiAgaWYgKHRpY2tldC5vd25lcl9pZCA9PT0gMCkgcmV0dXJuIFNUQVRVU19VTkFTU0lHTkVEO1xuXG4gIGlmICghdGlja2V0Lm93bmVyPy5maXJzdF9uYW1lIHx8ICF0aWNrZXQub3duZXI/Lmxhc3RfbmFtZSlcbiAgICByZXR1cm4gU1RBVFVTX0lOQ09NUExFVEU7XG5cbiAgaWYgKHRpY2tldC5vd25lciAmJiB0aWNrZXQub3duZXI/LnN0YXR1cyA9PT0gXCJJbmNvbXBsZXRlXCIpXG4gICAgcmV0dXJuIFNUQVRVU19JTkNPTVBMRVRFO1xuXG4gIGlmICh0aWNrZXQub3duZXIgJiYgdGlja2V0Lm93bmVyPy5zdGF0dXMgPT09IFwiQ29tcGxldGVcIilcbiAgICByZXR1cm4gU1RBVFVTX0NPTVBMRVRFO1xuXG4gIHJldHVybiBTVEFUVVNfSU5DT01QTEVURTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUaWNrZXRTdGF0dXNEYXRhID0gKHRpY2tldCwgaXNTdW1taXRQYXN0KSA9PlxuICBzdGF0dXNEYXRhW2dldFRpY2tldFN0YXR1c0tleSh0aWNrZXQsIGlzU3VtbWl0UGFzdCldO1xuXG5leHBvcnQgY29uc3QgZ2V0VGlja2V0Um9sZSA9ICh0aWNrZXQpID0+IHtcbiAgaWYgKCF0aWNrZXQuYmFkZ2UpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHsgZmVhdHVyZXMgfSA9IHRpY2tldC5iYWRnZTtcblxuICBpZiAoZmVhdHVyZXMubGVuZ3RoID4gMClcbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKChmZWF0dXJlKSA9PiBmZWF0dXJlLm5hbWUpLmpvaW4oXCIsIFwiKTtcblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUaWNrZXRUeXBlID0gKHRpY2tldCwgc3VtbWl0KSA9PlxuICBzdW1taXQudGlja2V0X3R5cGVzLmZpbmQoKHR5cGUpID0+IHR5cGUuaWQgPT09IHRpY2tldC50aWNrZXRfdHlwZV9pZCk7XG5cbmV4cG9ydCBjb25zdCBpc1RpY2tldFJlZnVuZGFibGUgPSAodGlja2V0KSA9PlxuICB0aWNrZXQ/LmZpbmFsX2Ftb3VudCA+IDAgJiZcbiAgdGlja2V0Py5maW5hbF9hbW91bnQgPiB0aWNrZXQ/LnJlZnVuZGVkX2Ftb3VudCAmJlxuICAhdGlja2V0Py5yZWZ1bmRfcmVxdWVzdHM/LnNvbWUoKHJyKSA9PiByci5zdGF0dXMgPT09IFwiUmVxdWVzdGVkXCIpO1xuXG5leHBvcnQgY29uc3QgdGlja2V0c1JlZnVuZGFibGUgPSAodGlja2V0cykgPT5cbiAgdGlja2V0cz8uZmlsdGVyKCh0aWNrZXQpID0+IGlzVGlja2V0UmVmdW5kYWJsZSh0aWNrZXQpKS5sZW5ndGggfHwgMDtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVWYWxpZGF0aW9uID0gKHR5cGUsIG5hbWUsIGlzUmVxdWlyZWQpID0+IHtcbiAgbGV0IHNjaGVtYTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBRdWVzdGlvblR5cGVfQ2hlY2tib3g6XG4gICAgICBzY2hlbWEgPSB5dXAuYm9vbCgpLm9uZU9mKFt0cnVlXSwgaTE4bi50KFwidmFsaWRhdGlvbi5jaGVja2JveC5yZXF1aXJlZFwiKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3Q6XG4gICAgICBzY2hlbWEgPSB5dXAuc3RyaW5nKGBFbnRlciAke25hbWV9YCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9DaGVja0JveExpc3Q6XG4gICAgICBzY2hlbWEgPSB5dXAuYXJyYXkoKS5vZih5dXAuc3RyaW5nKCkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBRdWVzdGlvblR5cGVfQ291bnRyeUNvbWJvQm94OlxuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NvbWJvQm94OlxuICAgICAgc2NoZW1hID0geXVwLnN0cmluZyhgRW50ZXIgJHtuYW1lfWApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHNjaGVtYSA9IHl1cC5zdHJpbmcoYEVudGVyICR7bmFtZX1gKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICBzY2hlbWEgPSBzY2hlbWEucmVxdWlyZWQoYCR7bmFtZX0gaXMgcmVxdWlyZWRgKTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWE7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VBbnN3ZXJzID0gKFxuICBvd25lcixcbiAgZXh0cmFRdWVzdGlvbnMsXG4gIGFuc3dlcnMsXG4gIG1hbmFnZXIsXG4gIGluY2x1ZGVEZWxlZ2F0aW9uLFxuICBpbmNsdWRlQXR0ZW5kZWVJbmZvLFxuICBpbmNsdWRlRGlzY2xhaW1lcixcbiAgb25seVJlbGV2YW50ID0gZmFsc2VcbikgPT4ge1xuICBjb25zdCBpbml0aWFsVmFsdWVzID0ge307XG5cbiAgaWYgKGluY2x1ZGVBdHRlbmRlZUluZm8pIHtcbiAgICBpbml0aWFsVmFsdWVzW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmVtYWlsXSA9XG4gICAgICBhbnN3ZXJzW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmVtYWlsXSB8fCBvd25lci5lbWFpbDtcbiAgICBpbml0aWFsVmFsdWVzW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmZpcnN0TmFtZV0gPVxuICAgICAgYW5zd2Vyc1tUSUNLRVRfQVRURU5ERUVfS0VZUy5maXJzdE5hbWVdIHx8IG93bmVyLmZpcnN0X25hbWU7XG4gICAgaW5pdGlhbFZhbHVlc1tUSUNLRVRfQVRURU5ERUVfS0VZUy5sYXN0TmFtZV0gPVxuICAgICAgYW5zd2Vyc1tUSUNLRVRfQVRURU5ERUVfS0VZUy5sYXN0TmFtZV0gfHwgb3duZXIubGFzdF9uYW1lO1xuICAgIGluaXRpYWxWYWx1ZXNbVElDS0VUX0FUVEVOREVFX0tFWVMuY29tcGFueV0gPVxuICAgICAgYW5zd2Vyc1tUSUNLRVRfQVRURU5ERUVfS0VZUy5jb21wYW55XSB8fCBvd25lci5jb21wYW55O1xuICB9XG5cbiAgaWYgKGluY2x1ZGVEaXNjbGFpbWVyKSB7XG4gICAgaW5pdGlhbFZhbHVlc1tUSUNLRVRfQVRURU5ERUVfS0VZUy5kaXNjbGFpbWVyQWNjZXB0ZWRdID1cbiAgICAgIGFuc3dlcnNbVElDS0VUX0FUVEVOREVFX0tFWVMuZGlzY2xhaW1lckFjY2VwdGVkXSB8fFxuICAgICAgb3duZXIuZGlzY2xhaW1lcl9hY2NlcHRlZDtcbiAgfVxuXG4gIGlmIChpbmNsdWRlRGVsZWdhdGlvbikge1xuICAgIGluaXRpYWxWYWx1ZXMuZGVsZWdhdGVkX2ZpcnN0X25hbWUgPVxuICAgICAgYW5zd2Vycy5kZWxlZ2F0ZWRfZmlyc3RfbmFtZSB8fCBtYW5hZ2VyPy5maXJzdF9uYW1lIHx8IFwiXCI7XG4gICAgaW5pdGlhbFZhbHVlcy5kZWxlZ2F0ZWRfbGFzdF9uYW1lID1cbiAgICAgIGFuc3dlcnMuZGVsZWdhdGVkX2xhc3RfbmFtZSB8fCBtYW5hZ2VyPy5sYXN0X25hbWUgfHwgXCJcIjtcbiAgfVxuXG4gIGV4dHJhUXVlc3Rpb25zLmZvckVhY2goKHEpID0+IHtcbiAgICBjb25zdCBxdWVzdGlvblNsdWcgPSB0b1NsdWcocS5uYW1lLCBxLmlkKTtcbiAgICBjb25zdCBhbnN3ZXIgPSBhbnN3ZXJzW3F1ZXN0aW9uU2x1Z107XG4gICAgaW5pdGlhbFZhbHVlc1txdWVzdGlvblNsdWddID0gYW5zd2VyIHx8IGdldFR5cGVJbml0aWFsVmFsdWUocSk7XG5cbiAgICBpZiAocS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViUXVlc3Rpb25TbHVnID0gdG9TbHVnKFxuICAgICAgICAgIHJ1bGUuc3ViX3F1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgcnVsZS5zdWJfcXVlc3Rpb24uaWRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3ViQW5zd2VyID0gYW5zd2Vyc1tzdWJRdWVzdGlvblNsdWddO1xuICAgICAgICBjb25zdCBtYXRjaCA9IGNoZWNrSWZWYWx1ZU1hdGNoKGFuc3dlciwgcnVsZS5hbnN3ZXJfdmFsdWVzKTtcblxuICAgICAgICBpZiAoIW9ubHlSZWxldmFudCB8fCBtYXRjaCkge1xuICAgICAgICAgIGluaXRpYWxWYWx1ZXNbc3ViUXVlc3Rpb25TbHVnXSA9XG4gICAgICAgICAgICBzdWJBbnN3ZXIgfHwgZ2V0VHlwZUluaXRpYWxWYWx1ZShydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGluaXRpYWxWYWx1ZXM7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRWYWxpZGF0aW9uU2NoZW1hID0gKFxuICBleHRyYVF1ZXN0aW9ucyxcbiAgaW5jbHVkZUF0dGVuZGVlSW5mbyxcbiAgYWxsb3dzRGVsZWdhdGlvbixcbiAgZGlzY2xhaW1lck1hbmRhdG9yeVxuKSA9PiB7XG4gIGNvbnN0IHNjaGVtYSA9IHt9O1xuXG4gIGlmIChpbmNsdWRlQXR0ZW5kZWVJbmZvKSB7XG4gICAgc2NoZW1hW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmVtYWlsXSA9IHl1cFxuICAgICAgLnN0cmluZyhpMThuLnQoXCJ2YWxpZGF0aW9uLmVtYWlsLnN0cmluZ1wiKSlcbiAgICAgIC5lbWFpbChpMThuLnQoXCJ2YWxpZGF0aW9uLmVtYWlsLmZvcm1hdFwiKSlcbiAgICAgIC5yZXF1aXJlZChpMThuLnQoXCJ2YWxpZGF0aW9uLmVtYWlsLnJlcXVpcmVkXCIpKTtcbiAgICBzY2hlbWFbVElDS0VUX0FUVEVOREVFX0tFWVMuZmlyc3ROYW1lXSA9IHl1cFxuICAgICAgLnN0cmluZyhpMThuLnQoXCJ2YWxpZGF0aW9uLmZpcnN0X25hbWUuc3RyaW5nXCIpKVxuICAgICAgLnJlcXVpcmVkKGkxOG4udChcInZhbGlkYXRpb24uZmlyc3RfbmFtZS5yZXF1aXJlZFwiKSk7XG4gICAgc2NoZW1hW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmxhc3ROYW1lXSA9IHl1cFxuICAgICAgLnN0cmluZyhpMThuLnQoXCJ2YWxpZGF0aW9uLmxhc3RfbmFtZS5zdHJpbmdcIikpXG4gICAgICAucmVxdWlyZWQoaTE4bi50KFwidmFsaWRhdGlvbi5sYXN0X25hbWUucmVxdWlyZWRcIikpO1xuICAgIHNjaGVtYVtUSUNLRVRfQVRURU5ERUVfS0VZUy5jb21wYW55XSA9IHl1cC5sYXp5KCh2YWx1ZSkgPT5cbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IHl1cFxuICAgICAgICAgICAgLm9iamVjdCgpXG4gICAgICAgICAgICAucmVxdWlyZWQoaTE4bi50KFwidmFsaWRhdGlvbi5jb21wYW55LnJlcXVpcmVkXCIpKVxuICAgICAgICAgICAgLnR5cGVFcnJvcihpMThuLnQoXCJ2YWxpZGF0aW9uLnJlcXVpcmVkX2ZpZWxkXCIpKVxuICAgICAgICA6IHl1cC5zdHJpbmcoKS5yZXF1aXJlZChpMThuLnQoXCJ2YWxpZGF0aW9uLmNvbXBhbnkucmVxdWlyZWRcIikpXG4gICAgKTtcbiAgfVxuXG4gIGlmIChkaXNjbGFpbWVyTWFuZGF0b3J5KSB7XG4gICAgc2NoZW1hW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmRpc2NsYWltZXJBY2NlcHRlZF0gPSB5dXBcbiAgICAgIC5ib29sKClcbiAgICAgIC5vbmVPZihbdHJ1ZV0sIGkxOG4udChcInZhbGlkYXRpb24uY2hlY2tib3gucmVxdWlyZWRcIikpO1xuICB9XG5cbiAgaWYgKGFsbG93c0RlbGVnYXRpb24pIHtcbiAgICBzY2hlbWEuZGVsZWdhdGVkX2ZpcnN0X25hbWUgPSB5dXBcbiAgICAgIC5zdHJpbmcoaTE4bi50KFwidmFsaWRhdGlvbi5maXJzdF9uYW1lLnN0cmluZ1wiKSlcbiAgICAgIC5yZXF1aXJlZChpMThuLnQoXCJ2YWxpZGF0aW9uLmZpcnN0X25hbWUucmVxdWlyZWRcIikpO1xuXG4gICAgc2NoZW1hLmRlbGVnYXRlZF9sYXN0X25hbWUgPSB5dXBcbiAgICAgIC5zdHJpbmcoaTE4bi50KFwidmFsaWRhdGlvbi5sYXN0X25hbWUuc3RyaW5nXCIpKVxuICAgICAgLnJlcXVpcmVkKGkxOG4udChcInZhbGlkYXRpb24ubGFzdF9uYW1lLnJlcXVpcmVkXCIpKTtcbiAgfVxuXG4gIGV4dHJhUXVlc3Rpb25zLmZvckVhY2goKHEpID0+IHtcbiAgICBjb25zdCBxdWVzdGlvblNsdWcgPSB0b1NsdWcocS5uYW1lLCBxLmlkKTtcbiAgICBzY2hlbWFbcXVlc3Rpb25TbHVnXSA9IGdldFR5cGVWYWxpZGF0aW9uKHEudHlwZSwgcS5uYW1lLCBxLm1hbmRhdG9yeSk7XG5cbiAgICBpZiAocS5zdWJfcXVlc3Rpb25fcnVsZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHEuc3ViX3F1ZXN0aW9uX3J1bGVzLmZvckVhY2goKHJ1bGUpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViUXVlc3Rpb24gPSBydWxlLnN1Yl9xdWVzdGlvbjtcbiAgICAgICAgY29uc3Qgc3ViUXVlc3Rpb25TbHVnID0gdG9TbHVnKHN1YlF1ZXN0aW9uLm5hbWUsIHN1YlF1ZXN0aW9uLmlkKTtcbiAgICAgICAgc2NoZW1hW3N1YlF1ZXN0aW9uU2x1Z10gPSBnZXRUeXBlVmFsaWRhdGlvbihcbiAgICAgICAgICBzdWJRdWVzdGlvbi50eXBlLFxuICAgICAgICAgIHN1YlF1ZXN0aW9uLm5hbWUsXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKVxuICAgICAgICAgIC5udWxsYWJsZSgpXG4gICAgICAgICAgLndoZW4ocXVlc3Rpb25TbHVnLCB7XG4gICAgICAgICAgICBpczogKHF1ZXN0aW9uQW5zKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY2hlY2tJZlZhbHVlTWF0Y2gocXVlc3Rpb25BbnMsIHJ1bGUuYW5zd2VyX3ZhbHVlcyk7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGVuOiAoc2NoKSA9PiBzY2gucmVxdWlyZWQoaTE4bi50KFwidmFsaWRhdGlvbi5yZXF1aXJlZF9xdWVzdGlvblwiKSlcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHl1cC5vYmplY3Qoc2NoZW1hKTtcbn07XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiY29weUljb25fX19sSTNlUVwiO1xudmFyIF8yID0gXCJyZXZlcnNlZF9fX3pKem1EXCI7XG52YXIgXzMgPSBcInRydW5jYXRlZF9fX2pXU25VXCI7XG52YXIgXzQgPSBcIndyYXBwZXJfX19tVlBpUlwiO1xuZXhwb3J0IHsgXzEgYXMgXCJjb3B5SWNvblwiLCBfMiBhcyBcInJldmVyc2VkXCIsIF8zIGFzIFwidHJ1bmNhdGVkXCIsIF80IGFzIFwid3JhcHBlclwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJNdWlPdXRsaW5lZElucHV0LW5vdGNoZWRPdXRsaW5lX19fUm9pbVJcIjtcbnZhciBfMiA9IFwiTXVpUGlja2Vyc0NhbGVuZGFySGVhZGVyLWxhYmVsQ29udGFpbmVyX19fb29JMFZcIjtcbnZhciBfMyA9IFwiY2FsZW5kYXJEaXNwbGF5X19faW1famhcIjtcbnZhciBfNCA9IFwiY29udGFpbmVyX19fTjNZNFhcIjtcbnZhciBfNSA9IFwiZGF0ZVBpY2tlckNvbnRhaW5lcl9fX0pXMmxPXCI7XG52YXIgXzYgPSBcImRhdGVwaWNrZXJDbG9zZV9fX1Y5Z0hDXCI7XG52YXIgXzcgPSBcImZpbHRlckNvbnRhaW5lcl9fX3JHcFlWXCI7XG52YXIgXzggPSBcImZpbHRlckRhdGVMYWJlbF9fX2lmRDRwXCI7XG52YXIgXzkgPSBcImZpbHRlckljb25fX19sMjFLSVwiO1xudmFyIF9hID0gXCJmaWx0ZXJMYWJlbF9fX19QMHduXCI7XG52YXIgX2IgPSBcImZpbHRlckxpc3RDb250YWluZXJfX19WbWRHcVwiO1xudmFyIF9jID0gXCJmaWx0ZXJOdW1BY3RpdmVfX19WdUhDSlwiO1xudmFyIF9kID0gXCJmaWx0ZXJTb3J0Q29udGFpbmVyX19fYXJCdlFcIjtcbnZhciBfZSA9IFwibGFiZWxfX195TkZ5alwiO1xudmFyIF9mID0gXCJzaG93RGF0ZVBpY2tlcl9fX1VwUWJwXCI7XG52YXIgXzEwID0gXCJzb3J0Q29udGFpbmVyX19fbFJzalVcIjtcbnZhciBfMTEgPSBcInNvcnRJY29uX19fZlZWNUtcIjtcbnZhciBfMTIgPSBcInNvcnRMYWJlbF9fX1VxTFRDXCI7XG52YXIgXzEzID0gXCJzb3J0TGlzdENvbnRhaW5lcl9fX2NtbkJEXCI7XG5leHBvcnQgeyBfMSBhcyBcIk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmVcIiwgXzIgYXMgXCJNdWlQaWNrZXJzQ2FsZW5kYXJIZWFkZXItbGFiZWxDb250YWluZXJcIiwgXzMgYXMgXCJjYWxlbmRhckRpc3BsYXlcIiwgXzQgYXMgXCJjb250YWluZXJcIiwgXzUgYXMgXCJkYXRlUGlja2VyQ29udGFpbmVyXCIsIF82IGFzIFwiZGF0ZXBpY2tlckNsb3NlXCIsIF83IGFzIFwiZmlsdGVyQ29udGFpbmVyXCIsIF84IGFzIFwiZmlsdGVyRGF0ZUxhYmVsXCIsIF85IGFzIFwiZmlsdGVySWNvblwiLCBfYSBhcyBcImZpbHRlckxhYmVsXCIsIF9iIGFzIFwiZmlsdGVyTGlzdENvbnRhaW5lclwiLCBfYyBhcyBcImZpbHRlck51bUFjdGl2ZVwiLCBfZCBhcyBcImZpbHRlclNvcnRDb250YWluZXJcIiwgX2UgYXMgXCJsYWJlbFwiLCBfZiBhcyBcInNob3dEYXRlUGlja2VyXCIsIF8xMCBhcyBcInNvcnRDb250YWluZXJcIiwgXzExIGFzIFwic29ydEljb25cIiwgXzEyIGFzIFwic29ydExhYmVsXCIsIF8xMyBhcyBcInNvcnRMaXN0Q29udGFpbmVyXCIgfVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG52YXIgXzEgPSBcImNhbmNlbEJ0bl9fX3FEZXhoXCI7XG52YXIgXzIgPSBcImZvb3Rlcl9fX1NONzB5XCI7XG52YXIgXzMgPSBcInNhdmVCdG5fX19uYlU2Y1wiO1xuZXhwb3J0IHsgXzEgYXMgXCJjYW5jZWxCdG5cIiwgXzIgYXMgXCJmb290ZXJcIiwgXzMgYXMgXCJzYXZlQnRuXCIgfVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG52YXIgXzEgPSBcImVycm9yTGFiZWxfX19ub2N5WFwiO1xuZXhwb3J0IHsgXzEgYXMgXCJlcnJvckxhYmVsXCIgfVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG52YXIgXzEgPSBcIm11bHRpc3RlcENsb3NlSWNvbl9fX3FjNk5EXCI7XG52YXIgXzIgPSBcIm11bHRpc3RlcENvbnRhaW5lcl9fX2RQYVM1XCI7XG5leHBvcnQgeyBfMSBhcyBcIm11bHRpc3RlcENsb3NlSWNvblwiLCBfMiBhcyBcIm11bHRpc3RlcENvbnRhaW5lclwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJvcmRlckRldGFpbHNNbW91bnRfX19yM2tSQVwiO1xudmFyIF8yID0gXCJvcmRlckRldGFpbHNUaWNrZXRzX19fbTRJaktcIjtcbnZhciBfMyA9IFwib3JkZXJTdW1tYXJ5QnV0dG9uX19fdXhqaHRcIjtcbnZhciBfNCA9IFwib3JkZXJTdW1tYXJ5UHVyY2hhc2VkSW5mb19fX19SQlhFXCI7XG52YXIgXzUgPSBcIm9yZGVyU3VtbWFyeVRhYmxlX19fWURueFZcIjtcbnZhciBfNiA9IFwib3JkZXJTdW1tYXJ5V3JhcHBlcl9fX1J3SUVSXCI7XG52YXIgXzcgPSBcInJlZnVuZERpc2FibGVkX19fanZyazNcIjtcbmV4cG9ydCB7IF8xIGFzIFwib3JkZXJEZXRhaWxzTW1vdW50XCIsIF8yIGFzIFwib3JkZXJEZXRhaWxzVGlja2V0c1wiLCBfMyBhcyBcIm9yZGVyU3VtbWFyeUJ1dHRvblwiLCBfNCBhcyBcIm9yZGVyU3VtbWFyeVB1cmNoYXNlZEluZm9cIiwgXzUgYXMgXCJvcmRlclN1bW1hcnlUYWJsZVwiLCBfNiBhcyBcIm9yZGVyU3VtbWFyeVdyYXBwZXJcIiwgXzcgYXMgXCJyZWZ1bmREaXNhYmxlZFwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJhc3NpZ25UaWNrZXRCdXR0b25fX196ekxzY1wiO1xudmFyIF8yID0gXCJibGFja0J1dHRvbl9fX2w5aGo5XCI7XG52YXIgXzMgPSBcImRpc3BsYXlfbm9uZV9fX0NxcEwzXCI7XG52YXIgXzQgPSBcImxhYmVsX19felhEV3pcIjtcbnZhciBfNSA9IFwib3JkZXJUaWNrZXRDb250YWluZXJfX19aSkx6a1wiO1xudmFyIF82ID0gXCJvcmRlclRpY2tldEluZm9fX19nZW1xQlwiO1xudmFyIF83ID0gXCJvcmRlclRpY2tldEluZm9Db250YWluZXJfX19fcDY2VlwiO1xudmFyIF84ID0gXCJvcmRlcldyYXBwZXJfX195REJBb1wiO1xudmFyIF85ID0gXCJyZWFzc2lnbkJ1dHRvbl9fX1Jvak01XCI7XG52YXIgX2EgPSBcInJlZnVuZEJ1dHRvbnNfX19qRGw0SFwiO1xudmFyIF9iID0gXCJ0YWJCdXR0b25zX19feFR5SkFcIjtcbnZhciBfYyA9IFwidGlja2V0QWN0aW9uQnV0dG9uc19fX3JwU01RXCI7XG52YXIgX2QgPSBcInRpY2tldExpc3RDb250YWluZXJfX19jZm1yclwiO1xudmFyIF9lID0gXCJ0aWNrZXROb19fX2EyaU05XCI7XG52YXIgX2YgPSBcInRpY2tldE93bmVyRW1haWxfX19adDRPRVwiO1xudmFyIF8xMCA9IFwidGlja2V0VGlja2V0VHlwZV9fX1pxX2YwXCI7XG52YXIgXzExID0gXCJ2aWV3RmluaXNoVGlja2V0QnV0dG9uX19fSEY2SW1cIjtcbnZhciBfMTIgPSBcInZpZXdNb3JlQnV0dG9uX19fS18xelRcIjtcbmV4cG9ydCB7IF8xIGFzIFwiYXNzaWduVGlja2V0QnV0dG9uXCIsIF8yIGFzIFwiYmxhY2tCdXR0b25cIiwgXzMgYXMgXCJkaXNwbGF5X25vbmVcIiwgXzQgYXMgXCJsYWJlbFwiLCBfNSBhcyBcIm9yZGVyVGlja2V0Q29udGFpbmVyXCIsIF82IGFzIFwib3JkZXJUaWNrZXRJbmZvXCIsIF83IGFzIFwib3JkZXJUaWNrZXRJbmZvQ29udGFpbmVyXCIsIF84IGFzIFwib3JkZXJXcmFwcGVyXCIsIF85IGFzIFwicmVhc3NpZ25CdXR0b25cIiwgX2EgYXMgXCJyZWZ1bmRCdXR0b25zXCIsIF9iIGFzIFwidGFiQnV0dG9uc1wiLCBfYyBhcyBcInRpY2tldEFjdGlvbkJ1dHRvbnNcIiwgX2QgYXMgXCJ0aWNrZXRMaXN0Q29udGFpbmVyXCIsIF9lIGFzIFwidGlja2V0Tm9cIiwgX2YgYXMgXCJ0aWNrZXRPd25lckVtYWlsXCIsIF8xMCBhcyBcInRpY2tldFRpY2tldFR5cGVcIiwgXzExIGFzIFwidmlld0ZpbmlzaFRpY2tldEJ1dHRvblwiLCBfMTIgYXMgXCJ2aWV3TW9yZUJ1dHRvblwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJhY3Rpb25CdXR0b25zX19fdTdtUFNcIjtcbnZhciBfMiA9IFwiY2FuY2VsQnV0dG9uX19feWZoWWJcIjtcbnZhciBfMyA9IFwiY29udGludWVCdXR0b25fX19OeVgzc1wiO1xudmFyIF80ID0gXCJkZWxldGVJY29uX19fRlN3eWVcIjtcbnZhciBfNSA9IFwicmVmdW5kRXJyb3JNc2dfX19BYWh6clwiO1xudmFyIF82ID0gXCJyZWZ1bmRIZWFkZXJzX19fSFZJbWtcIjtcbnZhciBfNyA9IFwicmVmdW5kU3VjY2Vzc2Z1bF9fX3pyRFFZXCI7XG52YXIgXzggPSBcInJlZnVuZFRleHRfX19hRW5MOVwiO1xudmFyIF85ID0gXCJyZWZ1bmRUaWNrZXRCb3hDb250YWluZXJfX195YTYxM1wiO1xudmFyIF9hID0gXCJzdWNjZXNzTXNnX19fSHRNc2VcIjtcbnZhciBfYiA9IFwic3VjY2Vzc01zZzJfX19RNnpuYVwiO1xudmFyIF9jID0gXCJ0aWNrZXROb19fX19FQUQ0XCI7XG5leHBvcnQgeyBfMSBhcyBcImFjdGlvbkJ1dHRvbnNcIiwgXzIgYXMgXCJjYW5jZWxCdXR0b25cIiwgXzMgYXMgXCJjb250aW51ZUJ1dHRvblwiLCBfNCBhcyBcImRlbGV0ZUljb25cIiwgXzUgYXMgXCJyZWZ1bmRFcnJvck1zZ1wiLCBfNiBhcyBcInJlZnVuZEhlYWRlcnNcIiwgXzcgYXMgXCJyZWZ1bmRTdWNjZXNzZnVsXCIsIF84IGFzIFwicmVmdW5kVGV4dFwiLCBfOSBhcyBcInJlZnVuZFRpY2tldEJveENvbnRhaW5lclwiLCBfYSBhcyBcInN1Y2Nlc3NNc2dcIiwgX2IgYXMgXCJzdWNjZXNzTXNnMlwiLCBfYyBhcyBcInRpY2tldE5vXCIgfVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG52YXIgXzEgPSBcImNsb3NlQnRuX19feVNRQ09cIjtcbnZhciBfMiA9IFwiaGVhZGVyX19fZkJYRzlcIjtcbnZhciBfMyA9IFwidGl0bGVfX190eVplUVwiO1xudmFyIF80ID0gXCJ3cmFwcGVyX19fUk9KR3NcIjtcbmV4cG9ydCB7IF8xIGFzIFwiY2xvc2VCdG5cIiwgXzIgYXMgXCJoZWFkZXJcIiwgXzMgYXMgXCJ0aXRsZVwiLCBfNCBhcyBcIndyYXBwZXJcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiYWxpZ25DZW50ZXJfX19ONEV2T1wiO1xudmFyIF8yID0gXCJhc3NpZ25CdG5fX19GUUgzblwiO1xudmFyIF8zID0gXCJhdHRlbmRlZUNvbnRhaW5lcl9fX2QzUkdDXCI7XG52YXIgXzQgPSBcImF0dGVuZGVlSW5mb05vdGVfX19LZDF5NlwiO1xudmFyIF81ID0gXCJhdHRlbmRlZUluZm9UaXRsZV9fX1Q5VTV6XCI7XG52YXIgXzYgPSBcIm9yZGVyTm9fX195cVJyOFwiO1xudmFyIF83ID0gXCJzdWJ0aXRsZV9fX1N2UmxVXCI7XG52YXIgXzggPSBcInRpY2tldEFzc2lnbkNvbnRhaW5lcl9fX2RKNXZXXCI7XG52YXIgXzkgPSBcInRpY2tldFR5cGVfX19ZWHdPSlwiO1xuZXhwb3J0IHsgXzEgYXMgXCJhbGlnbkNlbnRlclwiLCBfMiBhcyBcImFzc2lnbkJ0blwiLCBfMyBhcyBcImF0dGVuZGVlQ29udGFpbmVyXCIsIF80IGFzIFwiYXR0ZW5kZWVJbmZvTm90ZVwiLCBfNSBhcyBcImF0dGVuZGVlSW5mb1RpdGxlXCIsIF82IGFzIFwib3JkZXJOb1wiLCBfNyBhcyBcInN1YnRpdGxlXCIsIF84IGFzIFwidGlja2V0QXNzaWduQ29udGFpbmVyXCIsIF85IGFzIFwidGlja2V0VHlwZVwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJ3cmFwcGVyX19fRXdPUnpcIjtcbmV4cG9ydCB7IF8xIGFzIFwid3JhcHBlclwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJpbmZvTm90ZV9fX2kxWFk5XCI7XG52YXIgXzIgPSBcIndyYXBwZXJfX19NQXVOU1wiO1xuZXhwb3J0IHsgXzEgYXMgXCJpbmZvTm90ZVwiLCBfMiBhcyBcIndyYXBwZXJcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiYWN0aW9uQnV0dG9uc0NvbnRhaW5lcl9fX0F1dnJuXCI7XG52YXIgXzIgPSBcImFkZGl0aW9uYWxEZXRhaWxzX19fbVAxaUpcIjtcbnZhciBfMyA9IFwiYXR0ZW5kZWVDb250YWluZXJfX19RMFZVelwiO1xudmFyIF80ID0gXCJhdHRlbmRlZUluZm9UaXRsZV9fX0xtcm00XCI7XG52YXIgXzUgPSBcImNsb3NlQnRuX19fV05KbEVcIjtcbnZhciBfNiA9IFwiY29weUJ0bl9fX191dEE2XCI7XG52YXIgXzcgPSBcImRlbGVnYXRlZFRvX19fU0dWUUlcIjtcbnZhciBfOCA9IFwiZG93bmxvYWRCdG5fX19xalloelwiO1xudmFyIF85ID0gXCJoZWFkZXJfX19BdWduelwiO1xudmFyIF9hID0gXCJvcmRlck51bWJlcl9fX0w1UTVhXCI7XG52YXIgX2IgPSBcInFyQ29kZV9fX2Z3cVpxXCI7XG52YXIgX2MgPSBcInFyTm90ZV9fX0djN0tuXCI7XG52YXIgX2QgPSBcInNlbmRCdG5fX19rb1dNMlwiO1xudmFyIF9lID0gXCJzdGF0dXNfX19rd0M4eVwiO1xudmFyIF9mID0gXCJzdWJ0aXRsZV9fX3lfTnVPXCI7XG52YXIgXzEwID0gXCJ0aWNrZXREZXRhaWxDb250YWluZXJfX19iMlRMUlwiO1xudmFyIF8xMSA9IFwidGl0bGVfX193UXpVTlwiO1xuZXhwb3J0IHsgXzEgYXMgXCJhY3Rpb25CdXR0b25zQ29udGFpbmVyXCIsIF8yIGFzIFwiYWRkaXRpb25hbERldGFpbHNcIiwgXzMgYXMgXCJhdHRlbmRlZUNvbnRhaW5lclwiLCBfNCBhcyBcImF0dGVuZGVlSW5mb1RpdGxlXCIsIF81IGFzIFwiY2xvc2VCdG5cIiwgXzYgYXMgXCJjb3B5QnRuXCIsIF83IGFzIFwiZGVsZWdhdGVkVG9cIiwgXzggYXMgXCJkb3dubG9hZEJ0blwiLCBfOSBhcyBcImhlYWRlclwiLCBfYSBhcyBcIm9yZGVyTnVtYmVyXCIsIF9iIGFzIFwicXJDb2RlXCIsIF9jIGFzIFwicXJOb3RlXCIsIF9kIGFzIFwic2VuZEJ0blwiLCBfZSBhcyBcInN0YXR1c1wiLCBfZiBhcyBcInN1YnRpdGxlXCIsIF8xMCBhcyBcInRpY2tldERldGFpbENvbnRhaW5lclwiLCBfMTEgYXMgXCJ0aXRsZVwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJhdHRlbmRlZUNvbnRhaW5lcl9fX2NIU010XCI7XG52YXIgXzIgPSBcImF0dGVuZGVlSW5mb1RpdGxlX19fSnNQbEdcIjtcbnZhciBfMyA9IFwiaGVhZGVyTm90ZV9fX2IybXJDXCI7XG52YXIgXzQgPSBcInN1YnRpdGxlX19fWVg2T0RcIjtcbnZhciBfNSA9IFwidGlja2V0UmVhc3NpZ25Db250YWluZXJfX19wRzliNFwiO1xuZXhwb3J0IHsgXzEgYXMgXCJhdHRlbmRlZUNvbnRhaW5lclwiLCBfMiBhcyBcImF0dGVuZGVlSW5mb1RpdGxlXCIsIF8zIGFzIFwiaGVhZGVyTm90ZVwiLCBfNCBhcyBcInN1YnRpdGxlXCIsIF81IGFzIFwidGlja2V0UmVhc3NpZ25Db250YWluZXJcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiYnV0dG9uQ2FuY2VsbGVkX19fRXJsRFpcIjtcbnZhciBfMiA9IFwiYnV0dG9uQ29tcGxldGVfX19sbFdrWlwiO1xudmFyIF8zID0gXCJidXR0b25JbmNvbXBsZXRlX19fVG9sSGdcIjtcbnZhciBfNCA9IFwiYnV0dG9uUGlsbF9fX3pxMnRjXCI7XG52YXIgXzUgPSBcImJ1dHRvblJlZnVuZFJlcXVlc3RlZF9fX3BXdDMwXCI7XG52YXIgXzYgPSBcImJ1dHRvblVuYXNzaWduZWRfX19ZRGQ4WFwiO1xudmFyIF83ID0gXCJ0aWNrZXRTdGF0dXNDb250YWluZXJfX19xajZmYlwiO1xuZXhwb3J0IHsgXzEgYXMgXCJidXR0b25DYW5jZWxsZWRcIiwgXzIgYXMgXCJidXR0b25Db21wbGV0ZVwiLCBfMyBhcyBcImJ1dHRvbkluY29tcGxldGVcIiwgXzQgYXMgXCJidXR0b25QaWxsXCIsIF81IGFzIFwiYnV0dG9uUmVmdW5kUmVxdWVzdGVkXCIsIF82IGFzIFwiYnV0dG9uVW5hc3NpZ25lZFwiLCBfNyBhcyBcInRpY2tldFN0YXR1c0NvbnRhaW5lclwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJub09yZGVyc0ZvdW5kX19fQW9nMnBcIjtcbnZhciBfMiA9IFwic3VtbWl0VGl0bGVEYXRlX19fWjE5UG1cIjtcbnZhciBfMyA9IFwid2lkZ2V0SGVhZGVyX19feVk1Z2VcIjtcbmV4cG9ydCB7IF8xIGFzIFwibm9PcmRlcnNGb3VuZFwiLCBfMiBhcyBcInN1bW1pdFRpdGxlRGF0ZVwiLCBfMyBhcyBcIndpZGdldEhlYWRlclwiIH1cbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL2ljb25zLW1hdGVyaWFsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvQ2hlY2tDaXJjbGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9pY29ucy1tYXRlcmlhbC9DbG9zZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL2ljb25zLW1hdGVyaWFsL0NvbnRlbnRDb3B5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvRGVsZXRlT3V0bGluZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL2ljb25zLW1hdGVyaWFsL0Vycm9yXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvRmlsdGVyTGlzdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL2ljb25zLW1hdGVyaWFsL0ltcG9ydEV4cG9ydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL2ljb25zLW1hdGVyaWFsL1NlYXJjaFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL21hdGVyaWFsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvQ2hlY2tib3hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9tYXRlcmlhbC9EaXZpZGVyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvRHJhd2VyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvU3RhY2tcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9tYXRlcmlhbC9UYWJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9tYXRlcmlhbC9UYWJzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvc3R5bGVzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvdXNlTWVkaWFRdWVyeVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL3gtZGF0ZS1waWNrZXJzL0FkYXB0ZXJEYXlqc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL3gtZGF0ZS1waWNrZXJzL0RhdGVQaWNrZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS94LWRhdGUtcGlja2Vycy9Mb2NhbGl6YXRpb25Qcm92aWRlclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAcmVkdXhqcy90b29sa2l0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBzZW50cnkvcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZGF5anNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZm9ybWlrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImkxOG5leHRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaTE4bmV4dC1icm93c2VyLWxhbmd1YWdlZGV0ZWN0b3JcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaWR0b2tlbi12ZXJpZmllclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJtb21lbnQtdGltZXpvbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi9jb21wb25lbnRzL3Jhdy1odG1sXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvc2VjdXJpdHkvYWN0aW9uc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3NlY3VyaXR5L21ldGhvZHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi91dGlscy9hY3Rpb25zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvdXRpbHMvcXVlcnktYWN0aW9uc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwLWxpbWl0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtaTE4bmV4dFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1pbmZpbml0ZS1zY3JvbGwtY29tcG9uZW50XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXFyLWNvZGVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcmVkdXhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QvanN4LXJ1bnRpbWVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVkdXhcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVkdXgtcGVyc2lzdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWR1eC1wZXJzaXN0L2ludGVncmF0aW9uL3JlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZHV4LXBlcnNpc3QvbGliL3N0b3JhZ2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwieXVwXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IFBlcnNpc3RHYXRlIH0gZnJvbSBcInJlZHV4LXBlcnNpc3QvaW50ZWdyYXRpb24vcmVhY3RcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IEJveCwgU3R5bGVkRW5naW5lUHJvdmlkZXIgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlSW5pdFN0b3JlIH0gZnJvbSBcIi4vc3RvcmVcIjtcbmltcG9ydCBNeU9yZGVyc1RpY2tldHMgZnJvbSBcIi4vY29tcG9uZW50cy9NeU9yZGVyc1RpY2tldHNcIjtcbmltcG9ydCB7IFJFU0VUX1NUQVRFLCBzZXRSZWR1Y2VyU3RhdGUgfSBmcm9tIFwiLi9hY3Rpb25zXCI7XG5cbmNvbnN0IE15T3JkZXJzTXlUaWNrZXRzV2lkZ2V0ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBsb2dpblVybCxcbiAgICBzdXBwb3J0RW1haWwsXG4gICAgc3VtbWl0LFxuICAgIGFwaUJhc2VVcmwsXG4gICAgdXNlcixcbiAgICBjbGllbnRJZCxcbiAgICB1cGRhdGVQcm9maWxlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGNvbnN0IHsgc3RvcmUsIHBlcnNpc3RvciB9ID0gdXNlSW5pdFN0b3JlKHtcbiAgICBsb2dpblVybCxcbiAgICBzdXBwb3J0RW1haWwsXG4gICAgc3VtbWl0LFxuICAgIHVzZXIsXG4gICAgYXBpQmFzZVVybCxcbiAgICBjbGllbnRJZCxcbiAgICB1cGRhdGVQcm9maWxlXG4gIH0pO1xuXG4gIGNvbnN0IGhhbmRsZUJlZm9yZUxpZnQgPSAoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICBjb25zdCBmbHVzaCA9IHBhcmFtcy5oYXMoXCJmbHVzaFN0YXRlXCIpO1xuICAgIGlmIChmbHVzaCkgc3RvcmUuZGlzcGF0Y2goeyB0eXBlOiBSRVNFVF9TVEFURSwgcGF5bG9hZDogbnVsbCB9KTtcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHN0b3JlLmRpc3BhdGNoKHNldFJlZHVjZXJTdGF0ZShzdW1taXQsIHVzZXIpKTtcbiAgfSwgW3N1bW1pdCwgdXNlcl0pO1xuXG4gIHJldHVybiAoXG4gICAgPFByb3ZpZGVyIHN0b3JlPXtzdG9yZX0+XG4gICAgICA8UGVyc2lzdEdhdGVcbiAgICAgICAgb25CZWZvcmVMaWZ0PXtoYW5kbGVCZWZvcmVMaWZ0fVxuICAgICAgICBsb2FkaW5nPXtudWxsfVxuICAgICAgICBwZXJzaXN0b3I9e3BlcnNpc3Rvcn1cbiAgICAgID5cbiAgICAgICAgPFN0eWxlZEVuZ2luZVByb3ZpZGVyIGluamVjdEZpcnN0PlxuICAgICAgICAgIDxCb3ggc3g9e3sgcGFkZGluZzogeyB4czogMiwgbWQ6IDAsIGxnOiAwIH0gfX0+XG4gICAgICAgICAgICA8aDM+e3QoXCJvcmRlcnMudGl0bGVcIil9PC9oMz5cbiAgICAgICAgICA8L0JveD5cbiAgICAgICAgICA8TXlPcmRlcnNUaWNrZXRzXG4gICAgICAgICAgICBsb2dpblVybD17bG9naW5Vcmx9XG4gICAgICAgICAgICBzdXBwb3J0RW1haWw9e3N1cHBvcnRFbWFpbH1cbiAgICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgICAgYXBpQmFzZVVybD17YXBpQmFzZVVybH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1N0eWxlZEVuZ2luZVByb3ZpZGVyPlxuICAgICAgPC9QZXJzaXN0R2F0ZT5cbiAgICA8L1Byb3ZpZGVyPlxuICApO1xufTtcblxuTXlPcmRlcnNNeVRpY2tldHNXaWRnZXQucHJvcFR5cGVzID0ge1xuICBsb2dpblVybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgc3VwcG9ydEVtYWlsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdW1taXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIGFwaUJhc2VVcmw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHVzZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gIGNsaWVudElkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB1cGRhdGVQcm9maWxlOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTXlPcmRlcnNNeVRpY2tldHNXaWRnZXQ7XG4iXSwibmFtZXMiOlsiYXV0aEVycm9ySGFuZGxlciIsImdldFJlcXVlc3QiLCJkZWxldGVSZXF1ZXN0IiwiY3JlYXRlQWN0aW9uIiwic3RvcExvYWRpbmciLCJzdGFydExvYWRpbmciLCJwdXRSZXF1ZXN0IiwicExpbWl0IiwiZ2V0SWRUb2tlbiIsIklkVG9rZW5WZXJpZmllciIsImdldEFjY2Vzc1Rva2VuU2FmZWx5IiwiRklSU1RfUEFHRSIsIkRFRkFVTFRfSVRFTVNfUEVSX1BBR0UiLCJQUk9NSVNFX0JBVENIX0xJTUlUIiwiRklGVFlfUEVSX1BBR0UiLCJSRVNFVF9TVEFURSIsIlJFU0VUX0ZJTFRFUiIsIlNFVF9TVEFURSIsIkdFVF9VU0VSX09SREVSUyIsIlJFRlVORF9PUkRFUiIsIlNFVF9BQ1RJVkVfT1JERVJfSUQiLCJGSUxURVJfVVNFUl9PUkRFUlMiLCJHRVRfVElDS0VUUyIsIlVQREFURV9USUNLRVQiLCJSRUNFSVZFX1RJQ0tFVCIsIlJFTU9WRV9USUNLRVRfQVRURU5ERUUiLCJBU1NJR05fVElDS0VUIiwiUkVGVU5EX1RJQ0tFVCIsIlJFU0VORF9OT1RJRklDQVRJT04iLCJHRVRfVElDS0VUU19CWV9PUkRFUiIsIkdFVF9USUNLRVRTX0JZX09SREVSX0VSUk9SIiwiR0VUX09SREVSX1RJQ0tFVF9ERVRBSUxTIiwiR0VUX1RJQ0tFVF9ERVRBSUxTIiwiUkVDRUlWRV9FWFRSQV9RVUVTVElPTlMiLCJUSUNLRVRfQVRURU5ERUVfS0VZUyIsImVtYWlsIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55IiwiZGlzY2xhaW1lckFjY2VwdGVkIiwiZXh0cmFRdWVzdGlvbnMiLCJVUERBVEVfVElDS0VUU19SRUZVTkRfUkVRVUVTVEVEIiwiU1RBUlRfTE9BRElOR19JRFBfUFJPRklMRSIsIlNUT1BfTE9BRElOR19JRFBfUFJPRklMRSIsIlVQREFURV9JRFBfUFJPRklMRSIsIlNFVF9VU0VSIiwiU0VUX1NVTU1JVCIsIkdFVF9NQUlOX0VYVFJBX1FVRVNUSU9OUyIsIlJFQ0VJVkVfTUFSS0VUSU5HX1NFVFRJTkdTIiwiQ0xFQVJfTUFSS0VUSU5HX1NFVFRJTkdTIiwicmVzZXRTdGF0ZSIsImRpc3BhdGNoIiwicmVzZXRGaWx0ZXIiLCJzZXRSZWR1Y2VyU3RhdGUiLCJzdW1taXQiLCJ1c2VyIiwiRklMVEVSX1ZBUl9EQVRFIiwiRklMVEVSX1ZBUl9PUkRFUl9OVU1CRVIiLCJwYXJzZUZpbHRlciIsImZpbHRlck9iaiIsImZpbHRlciIsInR5cGUiLCJwdXNoIiwiY29uY2F0IiwibmFtZSIsImxvd2VyIiwidXBwZXIiLCJ2YWx1ZSIsImdldFNvcnREaXJlY3Rpb24iLCJkaXJlY3Rpb24iLCJnZXRVc2VyT3JkZXJzIiwiX3JlZiIsInBhZ2UiLCJwZXJQYWdlIiwic29ydCIsImdldFN0YXRlIiwiX3JlZjIiLCJhcGlCYXNlVXJsIiwid2lkZ2V0U3RhdGUiLCJhY2Nlc3NUb2tlbiIsImNhdGNoIiwiUHJvbWlzZSIsInJlamVjdCIsInBhcmFtcyIsImFjY2Vzc190b2tlbiIsIm9yZGVyIiwicmVsYXRpb25zIiwicGVyX3BhZ2UiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiZmlsdGVycyIsImlkIiwidGhlbiIsInBheWxvYWQiLCJlIiwic2V0QWN0aXZlT3JkZXJJZCIsIm9yZGVySWQiLCJzZXRVc2VyIiwiZ2V0VXNlclRpY2tldHMiLCJfcmVmMyIsIl9yZWY0IiwidXNlclN0YXRlIiwidXNlclByb2ZpbGUiLCJleHBhbmQiLCJmaWVsZHMiLCJnZXRUaWNrZXRzQnlPcmRlciIsIl9yZWY1IiwiX3JlZjYiLCJyZXNlbmROb3RpZmljYXRpb24iLCJ0aWNrZXQiLCJfcmVmNyIsIm1lc3NhZ2UiLCJvcmRlcl9pZCIsInJlZnVuZFRpY2tldCIsIl9yZWY4IiwiX3JlZjkiLCJyZWZ1bmRCdWxrVGlja2V0cyIsIl9yZWYxMCIsInRpY2tldHMiLCJsaW1pdCIsImFsbFJlZnVuZFRpY2tldENhbGxzIiwibWFwIiwiYWxsIiwicmVzIiwic3VjY2Vzc2Z1bGx5UmVxdWVzdGVkIiwiciIsIl9yJHJlc3BvbnNlIiwicmVzcG9uc2UiLCJyZWZ1bmRfcmVxdWVzdHMiLCJ1cGRhdGVUaWNrZXRzUmVmdW5kUmVxdWVzdGVkIiwidGlja2V0c1JlZnVuZFJlcXVlc3RlZCIsImdldEV4dHJhUXVlc3Rpb25zIiwiYXR0ZW5kZWVJZCIsIl9yZWYxMSIsImVuZHBvaW50IiwiZ2V0VGlja2V0IiwidGlja2V0SWQiLCJfcmVmMTIiLCJmaW5hbGx5Iiwibm9ybWFsaXplVGlja2V0IiwiZW50aXR5Iiwibm9ybWFsaXplZEVudGl0eSIsIl9vYmplY3RTcHJlYWQiLCJhdHRlbmRlZV9jb21wYW55IiwiYXR0ZW5kZWVfY29tcGFueV9pZCIsInJlZnJlc2hQcm9maWxlIiwiZGF0YSIsInRpY2tldE93bmVyIiwiX3JlZjEzIiwiX3RpY2tldE93bmVyJG1hbmFnZXIiLCJ1cGRhdGVQcm9maWxlIiwiYXR0ZW5kZWVfZW1haWwiLCJhdHRlbmRlZV9maXJzdF9uYW1lIiwiYXR0ZW5kZWVfbGFzdF9uYW1lIiwiaGFzTWFuYWdlciIsIm1hbmFnZXIiLCJtYW5hZ2VyX2lkIiwiaXRzTWUiLCJwcm9maWxlQ2hhbmdlZCIsImZpcnN0X25hbWUiLCJsYXN0X25hbWUiLCJuZXdQcm9maWxlIiwic2F2ZVRpY2tldERldGFpbHMiLCJhbnN3ZXJzIiwiX3JlZjE0IiwiaWRUb2tlbiIsInZlcmlmaWVyIiwiand0IiwiZGVjb2RlIiwiY29uc29sZSIsImxvZyIsIm93bmVyIiwiYXNzaWduQXR0ZW5kZWUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJfcmVmMTUiLCJyZWFzc2lnblRpY2tldCIsIl9yZWYxNiIsInNhdmVFeHRyYVF1ZXN0aW9ucyIsIl9yZWYxNyIsIlJlYWN0IiwiUHJvcFR5cGVzIiwidXNlVHJhbnNsYXRpb24iLCJCb3giLCJ1c2VGb3JtaWsiLCJFeHRyYVF1ZXN0aW9uc0ZpZWxkcyIsIkZvcm1Gb290ZXIiLCJ1c2VTY3JvbGxUb0Vycm9yIiwiUmVnaXN0cmF0aW9uRGlzY2xhaW1lciIsImJ1aWxkVmFsaWRhdGlvblNjaGVtYSIsInBhcnNlQW5zd2VycyIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJBc3NpZ25FUUZvcm0iLCJvblN1Ym1pdCIsIm9uQ2xvc2UiLCJ0IiwiZm9ybWlrIiwiaW5pdGlhbFZhbHVlcyIsInZhbGlkYXRpb25TY2hlbWEiLCJyZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9tYW5kYXRvcnkiLCJ2YWx1ZXMiLCJyZWxldmFudEFuc3dlcnMiLCJlbmFibGVSZWluaXRpYWxpemUiLCJoYW5kbGVTdWJtaXQiLCJub1ZhbGlkYXRlIiwiY2hpbGRyZW4iLCJyZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9jb250ZW50IiwiZGlzY2xhaW1lciIsImlzUmVxdWlyZWQiLCJzYXZlTGFiZWwiLCJjYW5jZWxMYWJlbCIsImRpc2FibGVkIiwiaXNTdWJtaXR0aW5nIiwicHJvcFR5cGVzIiwib2JqZWN0IiwiYXJyYXkiLCJmdW5jIiwiQ29udGVudENvcHlJY29uIiwiVG9vbHRpcCIsIk1JTExJU0VDX1RPX1NFQyIsInN0eWxlcyIsImRlZmF1bHRXaWR0aCIsIkNvcHlUZXh0IiwidGV4dCIsInRvb2x0aXBUZXh0IiwiaGlkZUNvcHkiLCJ0cnVuY2F0ZWQiLCJyZXZlcnNlZCIsIndpZHRoIiwidG9vbHRpcFRleHRUb1VzZSIsInRvb2x0aXAiLCJzZXRUb29sdGlwIiwidXNlU3RhdGUiLCJjbGFzc05hbWVzIiwiaGFuZGxlQ29weSIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsInNldFRpbWVvdXQiLCJjbGFzc05hbWUiLCJ3cmFwcGVyIiwic3R5bGUiLCJ0aXRsZSIsImNvcHlJY29uIiwib25DbGljayIsInN0cmluZyIsImJvb2wiLCJudW1iZXIiLCJEaWFsb2ciLCJEaWFsb2dDb250ZW50IiwiRGlhbG9nQ29udGVudFRleHQiLCJEaWFsb2dUaXRsZSIsIkN1c3RvbURpYWxvZyIsIm9wZW4iLCJkZXNjcmlwdGlvbiIsIlRoZW1lUHJvdmlkZXIiLCJjcmVhdGVUaGVtZSIsImRhcmtDb2xvciIsIndpbmRvdyIsInJvb3QiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwidGhlbWUiLCJwYWxldHRlIiwicHJpbWFyeSIsIm1haW4iLCJDdXN0b21UaGVtZSIsIm5vZGUiLCJDaGVja2JveCIsIkZvcm1Db250cm9sIiwiRm9ybUNvbnRyb2xMYWJlbCIsIkZvcm1Hcm91cCIsIkZvcm1IZWxwZXJUZXh0IiwiRm9ybUxhYmVsIiwiZ2V0TGFiZWwiLCJ0b1NsdWciLCJDaGVja2JveExpc3RRdWVzdGlvbkZpZWxkIiwiX3F1ZXN0aW9uJHZhbHVlcyIsInF1ZXN0aW9uIiwicXVlc3Rpb25DbGFzc05hbWUiLCJpc0Rpc2FibGVkIiwib25DaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwiZXJyb3IiLCJoZWxwZXJUZXh0IiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInF1ZXN0aW9uU2x1ZyIsInF1ZXN0aW9uTGFiZWwiLCJtYW5kYXRvcnkiLCJxdWVzdGlvbk1heFZhbHVlcyIsIm1heF9zZWxlY3RlZF92YWx1ZXMiLCJxdWVzdGlvbk9wdGlvbnMiLCJ2YWwiLCJsYWJlbCIsInRvU3RyaW5nIiwiaGFuZGxlQ2hlY2tib3hMaXN0Q2hhbmdlIiwiY2hlY2tlZCIsImN1cnJlbnRBbnMiLCJtYXhTZWxlY3Rpb25SZWFjaGVkIiwibmV3VmFsdWUiLCJ2IiwicmVxdWlyZWQiLCJmdWxsV2lkdGgiLCJvcCIsImNvbnRyb2wiLCJpbmNsdWRlcyIsImV2IiwidGFyZ2V0IiwiUmF3SFRNTCIsIkNoZWNrYm94UXVlc3Rpb25GaWVsZCIsIklucHV0TGFiZWwiLCJNZW51SXRlbSIsIlNlbGVjdCIsIkRyb3Bkb3duUXVlc3Rpb25GaWVsZCIsImxhYmVsSWQiLCJtYXJnaW5Cb3R0b20iLCJSYWRpbyIsIlJhZGlvR3JvdXAiLCJSYWRpb0xpc3RRdWVzdGlvbkZpZWxkIiwiVGV4dEZpZWxkIiwiVGV4dFF1ZXN0aW9uRmllbGQiLCJRdWVzdGlvblR5cGVfQ2hlY2tib3giLCJRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0IiwiUXVlc3Rpb25UeXBlX0NvbWJvQm94IiwiUXVlc3Rpb25UeXBlX0NvdW50cnlDb21ib0JveCIsIlF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3QiLCJjaGVja1J1bGUiLCJydWxlIiwiYW5zd2VyX3ZhbHVlcyIsIkFycmF5IiwiaXNBcnJheSIsImFuc3dlcl92YWx1ZXNfb3BlcmF0b3IiLCJmb3JFYWNoIiwiY2hlY2tWaXNpYmlsaXR5IiwicnVsZVJlc3VsdCIsInZpc2liaWxpdHkiLCJ2aXNpYmlsaXR5X2NvbmRpdGlvbiIsInF1ZXN0aW9uSWQiLCJ0ZXh0TEMiLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJxIiwiX3EkbGFiZWwiLCJpc0Fuc3dlcmVkIiwiYW5zd2VyIiwiY2hlY2tJZlZhbHVlTWF0Y2giLCJjb21wYXJlVmFsIiwiYW5zd2VyQXJyYXkiLCJzb21lIiwiZ2V0VHlwZUluaXRpYWxWYWx1ZSIsImdldFR5cGVWYWx1ZSIsImFucyIsInNwbGl0IiwidHJhbnNmb3JtQW53ZXJzRm9ybWF0IiwiZGlzY2xhaW1lcl9hY2NlcHRlZCIsImV4dHJhX3F1ZXN0aW9ucyIsImZvcm1hdHRlZEVRIiwiZW50cmllcyIsImtleSIsInF1ZXN0aW9uX2lkIiwicGFyc2VJbnQiLCJwb3AiLCJRdWVzdGlvblR5cGVfVGV4dCIsIlF1ZXN0aW9uVHlwZV9UZXh0QXJlYSIsIlF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbiIsImdldFF1ZXN0aW9uRmllbGRDb21wb25lbnQiLCJxdWVzdGlvblR5cGUiLCJGcmFnbWVudCIsInJlYWRPbmx5IiwiYWxsb3dFZGl0IiwicmVuZGVyUnVsZSIsInJlbmRlclF1ZXN0aW9uIiwic3ViX3F1ZXN0aW9uIiwiX3Ekc3ViX3F1ZXN0aW9uX3J1bGVzIiwiUXVlc3Rpb25GaWVsZENvbXBvbmVudCIsImZvcm1pa1Byb3BzIiwiaGFuZGxlQ2hhbmdlIiwib25CbHVyIiwiaGFuZGxlQmx1ciIsInRvdWNoZWQiLCJCb29sZWFuIiwiZXJyb3JzIiwic3ViX3F1ZXN0aW9uX3J1bGVzIiwiU3RhY2siLCJkYXlqcyIsIkFkYXB0ZXJEYXlqcyIsIkxvY2FsaXphdGlvblByb3ZpZGVyIiwiRGF0ZVBpY2tlciIsIkNsb3NlSWNvbiIsImdldEVwb2NoTG93ZXJVcHBlckluU2Vjb25kcyIsIl9GcmFnbWVudCIsIkJhc2ljRGF0ZVBpY2tlciIsIm9uRmlsdGVyIiwib25SZXNldCIsIm5vdyIsImRhdGVWYWx1ZSIsInNldERhdGVWYWx1ZSIsIm9uRGF0ZUNoYW5nZSIsImRhdGUiLCJEYXRlIiwiJGQiLCJvblJlc2V0QWN0aW9uIiwiZmlsdGVyRGF0ZUxhYmVsIiwiYWxpZ25JdGVtcyIsInN4IiwicHQiLCJwYiIsImRhdGVQaWNrZXJDb250YWluZXIiLCJmb250U2l6ZSIsImRhdGVwaWNrZXJDbG9zZSIsImRhdGVBZGFwdGVyIiwiY2FsZW5kYXJEaXNwbGF5IiwidXNlUmVmIiwidXNlRWZmZWN0IiwiRmlsdGVyTGlzdEljb24iLCJGaWx0ZXIiLCJzaG93RmlsdGVyTGlzdCIsInNldFNob3dGaWx0ZXJMaXN0Iiwic2hvd0RhdGVwaWNrZXIiLCJzZXRTaG93RGF0ZXBpY2tlciIsImZpbHRlck51bUFjdGl2ZSIsInNldEZpbHRlck51bUFjdGl2ZSIsImZpbHRlclJlZiIsImhhbmRsZUZpbHRlckNsaWNrT3V0c2lkZSIsImV2ZW50IiwiY3VycmVudCIsImNvbnRhaW5zIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0b2dnbGUiLCJmaWx0ZXJDb250YWluZXIiLCJyZWYiLCJmaWx0ZXJJY29uIiwiZmlsdGVyTGFiZWwiLCJmaWx0ZXJMaXN0Q29udGFpbmVyIiwiY29udGFpbmVyIiwic2hvd0RhdGVQaWNrZXIiLCJzdHlsZWQiLCJTZWFyY2hJY29uIiwiSW5wdXRCYXNlIiwiU2VhcmNoQ29udGFpbmVyIiwicG9zaXRpb24iLCJtYXJnaW5SaWdodCIsIm1hcmdpbkxlZnQiLCJkaXNwbGF5IiwiU2VhcmNoSWNvbldyYXBwZXIiLCJoZWlnaHQiLCJqdXN0aWZ5Q29udGVudCIsIlN0eWxlZElucHV0QmFzZSIsImNvbG9yIiwiYm9yZGVyQm90dG9tIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJDbG9zZUljb25XcmFwcGVyIiwicGFkZGluZyIsInRvcCIsInJpZ2h0IiwiY3Vyc29yIiwiekluZGV4IiwiU2VhcmNoIiwib25TZWFyY2giLCJzaG93Q2xvc2UiLCJzZXRTaG93Q2xvc2UiLCJzZWFyY2hWYWx1ZSIsInNldFNlYXJjaFZhbHVlIiwib25LZXlEb3duIiwibmF0aXZlRXZlbnQiLCJyZXNldFNlYXJjaCIsInBsYWNlaG9sZGVyIiwiaW5wdXRQcm9wcyIsIkJ1dHRvbiIsIkltcG9ydEV4cG9ydEljb24iLCJTb3J0Iiwib25Tb3J0Iiwic2hvd1NvcnQiLCJzZXRTaG93U29ydCIsInNvcnRSZWYiLCJoYW5kbGVTb3J0Q2xpY2tPdXRzaWRlIiwic29ydENvbnRhaW5lciIsInNvcnRJY29uIiwic29ydExhYmVsIiwic29ydExpc3RDb250YWluZXIiLCJHcmlkIiwiRmlsdGVyU29ydFNlYXJjaCIsImp1c3RpZnkiLCJpdGVtIiwieHMiLCJnYXAiLCJmaWx0ZXJTb3J0Q29udGFpbmVyIiwiZm9vdGVyIiwiY2FuY2VsQnRuIiwic2l6ZSIsInZhcmlhbnQiLCJzYXZlQnRuIiwiRXJyb3JJY29uIiwiRXJyb3JMYWJlbCIsImRhdGFUZXN0SWQiLCJlcnJvckxhYmVsIiwiQmFja2Ryb3AiLCJDaXJjdWxhclByb2dyZXNzIiwiTG9hZGVyIiwiZHJhd2VyIiwiRHJhd2VyIiwiQ29udGFpbmVyIiwiTXVsdGlTdGVwU2xpZGVyIiwib25DbG9zZVNsaWRlciIsImFuY2hvciIsIlBhcGVyUHJvcHMiLCJtdWx0aXN0ZXBDb250YWluZXIiLCJtdWx0aXN0ZXBDbG9zZUljb24iLCJ1c2VEaXNwYXRjaCIsInVzZVNlbGVjdG9yIiwic2hhbGxvd0VxdWFsIiwiSW5maW5pdGVTY3JvbGwiLCJPcmRlcnNMaXN0IiwiZ2V0U3VtbWl0Rm9ybWF0dGVkRGF0ZSIsIk9ORV9QQUdFX05FWFQiLCJNeU9yZGVyc1RpY2tldHMiLCJtZW1iZXJPcmRlcnMiLCJsb2FkaW5nIiwib3JkZXJzX2N1cnJlbnRfcGFnZSIsIm9yZGVyc19sYXN0X3BhZ2UiLCJvcmRlcnNfcGVyX3BhZ2UiLCJvcmRlcnNfdG90YWwiLCJ0aWNrZXRfcGVyX3BhZ2UiLCJzdGF0ZSIsInNldEZpbHRlciIsInNldFNvcnQiLCJmZXRjaERhdGEiLCJjdXJyZW50X3BhZ2UiLCJ3aWRnZXRIZWFkZXIiLCJtZCIsImxnIiwic3VtbWl0VGl0bGVEYXRlIiwiZGF0YUxlbmd0aCIsIm5leHQiLCJoYXNNb3JlIiwic2Nyb2xsVGhyZXNob2xkIiwibm9PcmRlcnNGb3VuZCIsIkRpdmlkZXIiLCJjYWxjdWxhdGVPcmRlclRvdGFscyIsImZvcm1hdEN1cnJlbmN5IiwiT3JkZXJTdW1tYXJ5VGFibGUiLCJkaXNjb3VudFRvdGFsIiwicmVmdW5kVG90YWwiLCJ0YXhlc1RvdGFsIiwiYW1vdW50VG90YWwiLCJ0aWNrZXRTdW1tYXJ5IiwiaHVuZHJlZCIsIm9yZGVyU3VtbWFyeVRhYmxlIiwidGlja2V0VG90YWwiLCJxdHkiLCJ0aWNrZXRfdHlwZSIsImNvc3QiLCJhbGlnbiIsImN1cnJlbmN5IiwiY3JlYXRlZCIsImRpc2NvdW50X2Ftb3VudCIsInRheGVzX2Ftb3VudCIsInN0YXR1cyIsInNoYXBlIiwidXNlTm93IiwidGlja2V0c1JlZnVuZGFibGUiLCJSZWZ1bmRFbWFpbFN1cHBvcnQiLCJyZWZ1bmRSZXF1ZXN0ZWQiLCJ0aWNrZXRzVG9SZWZ1bmQiLCJzdWJtaXRSZXF1ZXN0Iiwib25SZWZ1bmRDbGljayIsIm9uUmVmdW5kRGV0YWlsQ2xpY2siLCJvbkVtYWlsU3VwcG9ydENsaWNrIiwiaXNJblJlZnVuZGFibGVQZXJpb2QiLCJyZWdpc3RyYXRpb25fYWxsb3dlZF9yZWZ1bmRfcmVxdWVzdF90aWxsX2RhdGUiLCJhdExlYXN0T25lUmVmdW5kYWJsZVRpY2tldCIsImlzUmVmdW5kYWJsZSIsInJvbGUiLCJvcmRlclN1bW1hcnlCdXR0b24iLCJyZWZ1bmREaXNhYmxlZCIsImFycmF5T2YiLCJPcmRlclN1bW1hcnkiLCJvcmRlclN1bW1hcnlXcmFwcGVyIiwicHgiLCJvcmRlclN1bW1hcnlQdXJjaGFzZWRJbmZvIiwibWVtYmVyVGlja2V0cyIsIkF0dGVuZGVlU3RhdHVzIiwiX3RpY2tldCRvd25lciIsIl90aWNrZXQkb3duZXIyIiwidGlja2V0T3duZXJFbWFpbCIsImlzX2FjdGl2ZSIsIk9yZGVyTGlzdFRpY2tldHMiLCJQQUdJTkFUSU9OX0RJU1BMQVlfQ09VTlQiLCJPcmRlckxpc3RJdGVtIiwiX29yZGVyJG1lbWJlclRpY2tldHMiLCJfb3JkZXIkbWVtYmVyVGlja2V0czIiLCJfb3JkZXIkbWVtYmVyVGlja2V0czMiLCJfb3JkZXIkbWVtYmVyVGlja2V0czQiLCJvblBhZ2luYXRlQ2xpY2siLCJzZWxlY3RUb1JlZnVuZCIsIml0ZW1zVG9EaXNwbGF5Iiwic2V0SXRlbXNUb0Rpc3BsYXkiLCJzbGljZWRUaWNrZXRzIiwic2xpY2UiLCJvblZpZXdNb3JlIiwidGlja2V0c190b3RhbCIsIm9uVmlld0xlc3MiLCJpc1NlbGVjdGVkVG9SZWZ1bmQiLCJmaW5kIiwidmlld01vcmVCdXR0b24iLCJUaWNrZXRTdGF0dXMiLCJnZXRTdW1taXRSZWFzc2lnbkRhdGUiLCJUaWNrZXREZXRhaWwiLCJ1c2VUaWNrZXREZXRhaWxzIiwiVGlja2V0UmVhc3NpZ24iLCJUaWNrZXRBc3NpZ24iLCJtb2RhbFZpZXdzIiwiZGV0YWlsIiwicmVhc3NpZ24iLCJhc3NpZ24iLCJUaWNrZXRDVEFzIiwiaXNJbmNvbXBsZXRlIiwiaXNVbmFzc2lnbmVkIiwiaXNSZWFzc2lnbmFibGUiLCJvbk9wZW5DbGljayIsImFzc2lnblRpY2tldEJ1dHRvbiIsInZpZXdGaW5pc2hUaWNrZXRCdXR0b24iLCJyZWFzc2lnbkJ1dHRvbiIsIl90aWNrZXQkdGlja2V0X3R5cGUiLCJfdGlja2V0JG93bmVyMyIsImNhblJlYXNzaWduIiwibW9kYWxPcGVuIiwic2V0TW9kYWxPcGVuIiwicmVhc3NpZ25EYXRlIiwiaGFuZGxlQ2xvc2VNb2RhbCIsImhhbmRsZU9wZW5Nb2RhbCIsInZpZXciLCJvcmRlcldyYXBwZXIiLCJpdGVtNSIsInRpY2tldFRpY2tldFR5cGUiLCJ0aWNrZXRObyIsInRpY2tldEFjdGlvbkJ1dHRvbnMiLCJvd25lcklkIiwidG90YWxfcmVmdW5kZWRfYW1vdW50IiwiVGFicyIsIlRhYiIsIlJlZnVuZFJlcXVlc3RzTW9kYWwiLCJpc1RpY2tldFJlZnVuZGFibGUiLCJUYWJQYW5lbCIsInByb3BzIiwiaW5kZXgiLCJoaWRkZW4iLCJPcmRlcnNMaXN0RGVza3RvcE1vYmlsZSIsImlzTW9iaWxlIiwiZGV0YWlsc1JlcXVpcmVkIiwic2V0VmFsdWUiLCJfIiwic2V0UmVmdW5kUmVxdWVzdGVkIiwic2V0VGlja2V0c1RvUmVmdW5kIiwic2V0U3VibWl0UmVxdWVzdCIsInVuc2VsZWN0UmVmdW5kVGlja2V0cyIsImZpbHRlclNlbGVjdGVkIiwic2VsZWN0ZWRUaWNrZXQiLCJjYW5jZWxUaWNrZXRzVG9SZWZ1bmQiLCJzZWxlY3RBbGxUaWNrZXRzIiwicmVmdW5kYWJsZVRpY2tldHMiLCJyZXNldEFsbFJlZnVuZFN0YXR1c2VzIiwibW9yZURldGFpbHMiLCJ0aWNrZXRMaXN0Q29udGFpbmVyIiwiYm9yZGVyQ29sb3IiLCJ0ZXh0Q29sb3IiLCJUYWJJbmRpY2F0b3JQcm9wcyIsImJhY2tncm91bmQiLCJ0YWJCdXR0b25zIiwicmVmdW5kQnV0dG9ucyIsIm9uUmVtb3ZlU2VsZWN0ZWRSZWZ1bmRUaWNrZXRzIiwib25SZWZ1bmRTdWNjZXNzQ2xvc2UiLCJ1c2VUaGVtZSIsInVzZU1lZGlhUXVlcnkiLCJnZXRGb3JtYXR0ZWREYXRlIiwiYnJlYWtwb2ludHMiLCJkb3duIiwiaXNNb2JpbGVWaWV3YWJsZSIsInNldE1vYmlsZVZpZXdhYmxlIiwidGlja2V0c19wYWdlX2N1cnJlbnQiLCJvcmRlclRpY2tldEluZm9Db250YWluZXIiLCJvcmRlclRpY2tldEluZm8iLCJibGFja0J1dHRvbiIsInJvd1NwYWNpbmciLCJjb2x1bW5TcGFjaW5nIiwic20iLCJvcmRlclRpY2tldENvbnRhaW5lciIsImRpc3BsYXlfbm9uZSIsImZsZXhEaXJlY3Rpb24iLCJEZWxldGVPdXRsaW5lSWNvbiIsIlJlZnVuZFJlcXVlc3RlZFRpY2tldCIsIm9uUmVtb3ZlIiwicmVmdW5kVGlja2V0Qm94Q29udGFpbmVyIiwiZGVsZXRlSWNvbiIsIlN0eWxlZEVuZ2luZVByb3ZpZGVyIiwiQ2hlY2tDaXJjbGVJY29uIiwiU1RFUF9PTkUiLCJTVEVQX1RXTyIsInN0ZXAiLCJzZXRTdGVwIiwiZXJyb3JNc2ciLCJzZXRFcnJvck1zZyIsInJlZnVuZFN1Y2Nlc3MiLCJzZXRSZWZ1bmRTdWNjZXNzIiwiY2xvc2VTbGlkZXIiLCJyZWZ1bmRUaWNrZXRzIiwicmVmdW5kU3RlcE9uZSIsInJlZnVuZFRleHQiLCJyZWZ1bmRFcnJvck1zZyIsImFjdGlvbkJ1dHRvbnMiLCJjYW5jZWxCdXR0b24iLCJjb250aW51ZUJ1dHRvbiIsInJlZnVuZFN0ZXBUd28iLCJyZWZ1bmRTdWNjZXNzZnVsIiwic3VjY2Vzc01zZyIsInN1Y2Nlc3NNc2cyIiwicmVuZGVyU3RlcHMiLCJpbmplY3RGaXJzdCIsInJlZnVuZEhlYWRlcnMiLCJJY29uQnV0dG9uIiwiVHlwb2dyYXBoeSIsIkNsb3NlIiwiUmlnaHREcmF3ZXIiLCJNb2RhbFByb3BzIiwia2VlcE1vdW50ZWQiLCJoZWFkZXIiLCJjbG9zZUJ0biIsImZsb2F0IiwiZ3V0dGVyQm90dG9tIiwib25lT2ZUeXBlIiwieXVwIiwiQXNzaWduRm9ybSIsIm5ld19hdHRlbmRlZV9lbWFpbCIsInBlcnNvbmFsX21lc3NhZ2UiLCJtdWx0aWxpbmUiLCJtaW5Sb3dzIiwiX3RpY2tldCRvcmRlciIsIl90aWNrZXQkb3JkZXIyIiwiX3RpY2tldCR0eXBlIiwic2F2ZU1lc3NhZ2UiLCJzZXRTYXZlTWVzc2FnZSIsInRpY2tldEFzc2lnbmVkIiwic2V0VGlja2V0QXNzaWduZWQiLCJjdXJyZW50VGlja2V0Iiwib25Bc3NpZ25Ub090aGVyIiwib25Bc3NpZ25Ub01lIiwib25DbG9zZUVRRm9ybSIsIm9uQ2xvc2VTYXZlTWVzc2FnZSIsIm9uU2F2ZUVRIiwicmVzb2x2ZSIsImVyciIsInRpY2tldEFzc2lnbkNvbnRhaW5lciIsImFsaWduQ2VudGVyIiwic3VidGl0bGUiLCJvd25lcl9lbWFpbCIsIm9yZGVyTm8iLCJ0aWNrZXRUeXBlIiwiYXNzaWduQnRuIiwiYXR0ZW5kZWVDb250YWluZXIiLCJhdHRlbmRlZUluZm9UaXRsZSIsImF0dGVuZGVlSW5mb05vdGUiLCJBdXRvY29tcGxldGUiLCJxdWVyeVJlZ2lzdHJhdGlvbkNvbXBhbmllcyIsIkNvbXBhbnlGaWVsZCIsInN1bW1pdElkIiwiaW5wdXRWYWx1ZSIsInNldElucHV0VmFsdWUiLCJvcHRpb25zIiwic2V0T3B0aW9ucyIsInNldEZpZWxkVG91Y2hlZCIsInJlc3VsdHMiLCJuZXdPcHRpb25zIiwiYXV0b0NvbXBsZXRlIiwiZnJlZVNvbG8iLCJpbmNsdWRlSW5wdXRJbkxpc3QiLCJmaWx0ZXJTZWxlY3RlZE9wdGlvbnMiLCJnZXRPcHRpb25MYWJlbCIsIm9wdGlvbiIsInRtcFZhbHVlIiwib25JbnB1dENoYW5nZSIsIm5ld0lucHV0VmFsdWUiLCJmaWx0ZXJPcHRpb25zIiwiZmlsdGVyZWQiLCJpc0V4aXN0aW5nIiwicmVuZGVySW5wdXQiLCJyZW5kZXJPcHRpb24iLCJvcHRpb25Qcm9wcyIsIlRpY2tldERlbGVnYXRpb25GaWVsZHMiLCJkZWxlZ2F0ZWRfZmlyc3RfbmFtZSIsImRlbGVnYXRlZF9sYXN0X25hbWUiLCJUaWNrZXRPd25lckZpZWxkcyIsIlRpY2tldEZvcm0iLCJjYW5FZGl0IiwidGlja2V0TWFuYWdlciIsImFsbG93c0RlbGVnYXRpb24iLCJhbGxvd3NfdG9fZGVsZWdhdGUiLCJyZWR1Y2UiLCJkZWxlZ2F0ZWRUbyIsImFkZGl0aW9uYWxEZXRhaWxzIiwiaW5mb05vdGUiLCJRUkNvZGUiLCJGaWxlRG93bmxvYWRPdXRsaW5lZCIsIkRvd25sb2FkSWNvbiIsIkVtYWlsT3V0bGluZWQiLCJFbWFpbEljb24iLCJ1c2VHZXRUaWNrZXQiLCJpc1VzZXJPcmRlck93bmVyIiwib3duZXJfaWQiLCJpc1VzZXJUaWNrZXRPd25lciIsImNhbkVkaXRUaWNrZXREYXRhIiwiYWxsb3dfdXBkYXRlX2F0dGVuZGVlX2V4dHJhX3F1ZXN0aW9ucyIsImlzQ29tcGxldGUiLCJvblNhdmUiLCJ0aWNrZXREZXRhaWxDb250YWluZXIiLCJxckNvZGUiLCJtYXhXaWR0aCIsInFyX2NvZGUiLCJ2aWV3Qm94IiwicXJOb3RlIiwiaXNfdmlydHVhbCIsImFjdGlvbkJ1dHRvbnNDb250YWluZXIiLCJkb3dubG9hZEJ0biIsInNlbmRCdG4iLCJvcmRlck51bWJlciIsIlJlYXNzaWduRm9ybSIsInRpY2tldFJlYXNzaWduZWQiLCJzZXRUaWNrZXRSZWFzc2lnbmVkIiwib25SZWFzc2lnbiIsImdldExhYmVscyIsImhlYWRlck5vdGUiLCJ0aWNrZXRSZWFzc2lnbkNvbnRhaW5lciIsIl90aWNrZXQkcmVmdW5kX3JlcXVlcyIsImlzQWN0aXZlIiwicmVmdW5kUmVxdWVzdHMiLCJ0aWNrZXRTdGF0dXNDb250YWluZXIiLCJidXR0b25QaWxsIiwiYnV0dG9uUmVmdW5kUmVxdWVzdGVkIiwiYnV0dG9uSW5jb21wbGV0ZSIsImJ1dHRvblVuYXNzaWduZWQiLCJidXR0b25Db21wbGV0ZSIsImJ1dHRvbkNhbmNlbGxlZCIsInJ1biIsInNtb290aFNjcm9sbFRvIiwidGFyZ2V0U2Nyb2xsVG9wIiwiZHVyYXRpb24iLCJzdGFydFNjcm9sbFRvcCIsInNjcm9sbFRvcCIsImRpc3RhbmNlIiwic3RhcnRUaW1lIiwiYW5pbWF0aW9uU3RlcCIsInRpbWVzdGFtcCIsImVsYXBzZWQiLCJwcm9ncmVzcyIsIk1hdGgiLCJtaW4iLCJlYXNlSW5PdXRRdWFkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY29udGFpbmVySWQiLCJpc1ZhbGlkIiwiZXJyb3JBcnJheSIsImVycm9yQ291bnQiLCJlbGVtZW50c1NvcnRlZCIsInJlc3VsdCIsImVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZWxSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiYSIsImIiLCJnZXRFbGVtZW50QnlJZCIsImNvbnRhaW5lclJlY3QiLCJlbGVtT2ZmZXN0IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJTVEFUVVNfQ09NUExFVEUiLCJTVEFUVVNfSU5DT01QTEVURSIsIlNUQVRVU19DQU5DRUxMRUQiLCJTVEFUVVNfVU5BU1NJR05FRCIsIl90aWNrZXQkcHJvbW9fY29kZSIsIl90aWNrZXQkb3duZXI0IiwiZ2V0U3RhdHVzIiwiYWxsb3dzRGVsZWdhdGUiLCJwcm9tb19jb2RlIiwiYWxsb3dzX3RvX3JlYXNzaWduIiwiaTE4biIsImluaXRSZWFjdEkxOG5leHQiLCJMYW5ndWFnZURldGVjdG9yIiwiZW4iLCJlcyIsInVzZSIsImluaXQiLCJmYWxsYmFja0xuZyIsImRlYnVnIiwicmVzb3VyY2VzIiwidHJhbnNsYXRpb24iLCJpbnRlcnBvbGF0aW9uIiwiZXNjYXBlVmFsdWUiLCJMT0dPVVRfVVNFUiIsIlNUQVJUX0xPQURJTkciLCJTVE9QX0xPQURJTkciLCJSRVNFVF9MT0FESU5HIiwiREVGQVVMVF9TVEFURSIsIndpZGdldExvYWRpbmciLCJpc09yZGVyTG9hZGluZyIsInRpY2tldF9jdXJyZW50X3BhZ2UiLCJ0aWNrZXRfbGFzdF9wYWdlIiwidGlja2V0X3RvdGFsIiwiV2lkZ2V0UmVkdWNlciIsInRvdGFsIiwibGFzdF9wYWdlIiwiZm9ybWVyT3JkZXIiLCJvIiwiX2RhdGEkIiwidXBkYXRlZE9yZGVyIiwidGlja2V0c19wYWdlX2xhc3QiLCJtbyIsIl90aWNrZXRzUmVmdW5kUmVxdWVzdCIsInVwZGF0ZWRUaWNrZXRzIiwidHJyIiwidGlja2V0RGF0YSIsIm5ld09yZGVycyIsIm5ld1RpY2tldHMiLCJ1c2VNZW1vIiwiY29uZmlndXJlU3RvcmUiLCJwZXJzaXN0U3RvcmUiLCJwZXJzaXN0UmVkdWNlciIsIkZMVVNIIiwiUkVIWURSQVRFIiwiUEFVU0UiLCJQRVJTSVNUIiwiUFVSR0UiLCJSRUdJU1RFUiIsInN0b3JhZ2UiLCJjb21iaW5lUmVkdWNlcnMiLCJnZXRTdG9yZSIsImNsaWVudElkIiwibG9naW5VcmwiLCJyZWR1Y2VycyIsInN0b3JlIiwicmVkdWNlciIsIm1pZGRsZXdhcmUiLCJnZXREZWZhdWx0TWlkZGxld2FyZSIsInRodW5rIiwiZXh0cmFBcmd1bWVudCIsImltbXV0YWJsZUNoZWNrIiwic2VyaWFsaXphYmxlQ2hlY2siLCJpZ25vcmVkQWN0aW9ucyIsInVzZUluaXRTdG9yZSIsImNvbmZpZyIsInBlcnNpc3RvciIsImluaXRMb2dPdXQiLCJnZXRBY2Nlc3NUb2tlbiIsIlNlbnRyeSIsImNhcHR1cmVFeGNlcHRpb24iLCJMQVNUX0hPVVJfT0ZfMjRfSE9VUiIsIkxBU1RfTUlOVVRFX09GX0hPVVIiLCJPTkVfREFZIiwiU1RBVFVTX1BFTkRJTkciLCJTVEFUVVNfRVJST1IiLCJTVEFUVVNfUFJPQ0VTU0lORyIsIkpFU1RfVElNRU9VVF9JTl9NSUxMSVNFQyIsIk9ORV9JVEVNIiwiVFdPX0lURU0iLCJGSVZFX0lURU0iLCJTSVhfSVRFTSIsIm1vbWVudCIsImxvY2FsZSIsImRlZmF1bHRPcHRpb25zIiwibWluaW11bUZyYWN0aW9uRGlnaXRzIiwibWF4aW11bUZyYWN0aW9uRGlnaXRzIiwiZm9ybWF0dGVyIiwiSW50bCIsIk51bWJlckZvcm1hdCIsImZvcm1hdCIsImRhdGV0aW1lIiwidGltZVpvbmUiLCJ0eiIsInVuaXgiLCJyZWZ1bmRlZF9hbW91bnQiLCJhbW91bnQiLCJ0aWNrZXRfdHlwZXMiLCJwdXJjaGFzZVRpY2tldFRvdGFsIiwiY3VycmVuY3lPYmplY3QiLCJ0aWNrZXRzX2V4Y2VycHRfYnlfdGlja2V0X3R5cGUiLCJ0dCIsInRpY2tldF90eXBlX2lkIiwicHVyY2hhc2VUb3RhbCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImdldE9yZGVyVGlja2V0cyIsIl9vcmRlcnMkIiwib3JkZXJzIiwidHMiLCJzZXRIb3VycyIsImRlZmF1bHRDdXJyZW50VGltZSIsInJvdW5kIiwiZ2V0Tm93IiwidGltZXJTdGF0ZSIsIm5vd1V0YyIsImNoZWNrU3VtbWl0UGFzdCIsInJlYXNzaWduX2RhdGUiLCJyZWFzc2lnbl90aWNrZXRfdGlsbF9kYXRlIiwiZW5kX2RhdGUiLCJjaGVja1N1bW1pdFN0YXJ0ZWQiLCJzdGFydF9kYXRlIiwiZ2V0U3VtbWl0RGF5c0RpZmYiLCJzdGFydERheSIsInRpbWVfem9uZV9pZCIsImVuZERheSIsImRheXMiLCJkaWZmIiwiZm9ybWF0U3RhcnREYXRlIiwiZm9ybWF0RW5kRGF0ZSIsInllYXIiLCJtb250aCIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJnZXRTdW1taXRMb2NhdGlvbiIsIl9zdW1taXQkbG9jYXRpb25zIiwibG9jYXRpb24iLCJsb2NhdGlvbnMiLCJsIiwiY2xhc3NfbmFtZSIsImlzX21haW4iLCJjaXR5IiwiY291bnRyeSIsInVzZVN1bW1pdERldGFpbHMiLCJfc3VtbWl0JHRpbWVfem9uZSIsIl9zdW1taXQkdGltZV96b25lMiIsImZvcm1hdHRlZERhdGUiLCJmb3JtYXR0ZWRSZWFzc2lnbkRhdGUiLCJ0aW1lX3pvbmUiLCJkYXlzVW50aWxSZWFzc2lnbkRlYWRsaW5lIiwiaXNQYXN0IiwiaXNTdGFydGVkIiwic3RhdHVzRGF0YSIsImdldFRpY2tldFN0YXR1c0tleSIsImdldFRpY2tldFN0YXR1c0RhdGEiLCJpc1N1bW1pdFBhc3QiLCJnZXRUaWNrZXRSb2xlIiwiYmFkZ2UiLCJmZWF0dXJlcyIsImZlYXR1cmUiLCJqb2luIiwiZ2V0VGlja2V0VHlwZSIsImZpbmFsX2Ftb3VudCIsInJyIiwiZ2V0VHlwZVZhbGlkYXRpb24iLCJzY2hlbWEiLCJvbmVPZiIsIm9mIiwiaW5jbHVkZURlbGVnYXRpb24iLCJpbmNsdWRlQXR0ZW5kZWVJbmZvIiwiaW5jbHVkZURpc2NsYWltZXIiLCJvbmx5UmVsZXZhbnQiLCJzdWJRdWVzdGlvblNsdWciLCJzdWJBbnN3ZXIiLCJtYXRjaCIsImRpc2NsYWltZXJNYW5kYXRvcnkiLCJsYXp5IiwidHlwZUVycm9yIiwiX3Ekc3ViX3F1ZXN0aW9uX3J1bGVzMiIsInN1YlF1ZXN0aW9uIiwibnVsbGFibGUiLCJ3aGVuIiwiaXMiLCJxdWVzdGlvbkFucyIsInNjaCIsIlByb3ZpZGVyIiwiUGVyc2lzdEdhdGUiLCJNeU9yZGVyc015VGlja2V0c1dpZGdldCIsInN1cHBvcnRFbWFpbCIsImhhbmRsZUJlZm9yZUxpZnQiLCJVUkxTZWFyY2hQYXJhbXMiLCJzZWFyY2giLCJmbHVzaCIsImhhcyIsIm9uQmVmb3JlTGlmdCJdLCJzb3VyY2VSb290IjoiIn0=
8015
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1VDQUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0N0QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBLGlDQUFpQyxXQUFXO1dBQzVDO1dBQ0E7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQTs7Ozs7V0NQQTs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSx1REFB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QUMxQnBELGFBQWEsRUFBRW9ELHdEQUFjcUM7QUFDL0IsQ0FBQztBQUVELGlFQUFleTJCLHVCQUF1QixFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvYWN0aW9ucy5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9Bc3NpZ25FUUZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvQ29weVRleHQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvQ3VzdG9tRGlhbG9nL0NvbnRleHQuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvQ3VzdG9tRGlhbG9nL2luZGV4LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0N1c3RvbVRoZW1lLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbXBvbmVudHMvQ2hlY2tib3hMaXN0UXVlc3Rpb25GaWVsZC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL0NoZWNrYm94UXVlc3Rpb25GaWVsZC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL0Ryb3Bkb3duUXVlc3Rpb25GaWVsZC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL1JhZGlvTGlzdFF1ZXN0aW9uRmllbGQuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRXh0cmFRdWVzdGlvbnNGaWVsZHMvY29tcG9uZW50cy9UZXh0UXVlc3Rpb25GaWVsZC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL3V0aWxzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9GaWx0ZXJTb3J0U2VhcmNoL0RhdGVwaWNrZXIuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRmlsdGVyU29ydFNlYXJjaC9GaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRmlsdGVyU29ydFNlYXJjaC9TZWFyY2guanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRmlsdGVyU29ydFNlYXJjaC9Tb3J0LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL0ZpbHRlclNvcnRTZWFyY2gvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRm9ybUZvb3Rlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9MYWJlbHMvRXJyb3JMYWJlbC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9Mb2FkZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvTXlPcmRlcnNUaWNrZXRzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL09yZGVyU3VtbWFyeS9PcmRlclN1bW1hcnlUYWJsZS5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9PcmRlclN1bW1hcnkvUmVmdW5kRW1haWxTdXBwb3J0LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL09yZGVyU3VtbWFyeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9PcmRlcnNMaXN0L0F0dGVuZGVlU3RhdHVzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL09yZGVyc0xpc3QvT3JkZXJMaXN0SXRlbS5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9PcmRlcnNMaXN0L09yZGVyTGlzdFRpY2tldHMuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvT3JkZXJzTGlzdC9PcmRlcnNMaXN0RGVza3RvcE1vYmlsZS5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9PcmRlcnNMaXN0L2luZGV4LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1JlZnVuZFJlcXVlc3RzL1JlZnVuZERldGFpbHMuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvUmVmdW5kUmVxdWVzdHMvUmVmdW5kUmVxdWVzdGVkVGlja2V0LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1JlZnVuZFJlcXVlc3RzL1JlZnVuZFN0YXR1cy5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9SZWZ1bmRSZXF1ZXN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9SaWdodERyYXdlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRBc3NpZ24vY29tcG9uZW50cy9Bc3NpZ25Gb3JtL2luZGV4LmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1RpY2tldEFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXREZXRhaWwvY29tcG9uZW50cy9Db21wYW55RmllbGQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvVGlja2V0RGV0YWlsL2NvbXBvbmVudHMvUmVnaXN0cmF0aW9uRGlzY2xhaW1lci9SZWdpc3RyYXRpb25EaXNjbGFpbWVyLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1RpY2tldERldGFpbC9jb21wb25lbnRzL1RpY2tldERlbGVnYXRpb25GaWVsZHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvVGlja2V0RGV0YWlsL2NvbXBvbmVudHMvVGlja2V0Rm9ybS9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXREZXRhaWwvY29tcG9uZW50cy9UaWNrZXRPd25lckZpZWxkcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXREZXRhaWwvY29uc3RhbnRzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1RpY2tldERldGFpbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRSZWFzc2lnbi9jb21wb25lbnRzL1JlYXNzaWduRm9ybS9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRSZWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRTdGF0dXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2hvb2tzL3VzZUdldFRpY2tldC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvaG9va3MvdXNlU2Nyb2xsVG9FcnJvci5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvaG9va3MvdXNlVGlja2V0RGV0YWlscy5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvaTE4bi9pbmRleC5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvcmVkdWNlci5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvc3RvcmUuanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL3V0aWxzL2F1dGguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL3V0aWxzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL3V0aWxzL3N1bW1pdFV0aWxzLmpzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy91dGlscy90aWNrZXRVdGlscy5qcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9Db3B5VGV4dC9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRmlsdGVyU29ydFNlYXJjaC9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvRm9ybUZvb3Rlci9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvTGFiZWxzL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9PcmRlclN1bW1hcnkvc3R5bGVzLm1vZHVsZS5zY3NzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL09yZGVyc0xpc3Qvc3R5bGVzLm1vZHVsZS5zY3NzIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC8uL3NyYy9jb21wb25lbnRzL1JlZnVuZFJlcXVlc3RzL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9SaWdodERyYXdlci9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvVGlja2V0QXNzaWduL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXREZXRhaWwvY29tcG9uZW50cy9SZWdpc3RyYXRpb25EaXNjbGFpbWVyL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXREZXRhaWwvY29tcG9uZW50cy9UaWNrZXRPd25lckZpZWxkcy9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvVGlja2V0RGV0YWlsL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9UaWNrZXRSZWFzc2lnbi9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL2NvbXBvbmVudHMvVGlja2V0U3RhdHVzL3N0eWxlcy5tb2R1bGUuc2NzcyIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvLi9zcmMvY29tcG9uZW50cy9zdHlsZXMubW9kdWxlLnNjc3MiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL2ljb25zLW1hdGVyaWFsXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9pY29ucy1tYXRlcmlhbC9DaGVja0NpcmNsZVwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2VcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL2ljb25zLW1hdGVyaWFsL0NvbnRlbnRDb3B5XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9pY29ucy1tYXRlcmlhbC9EZWxldGVPdXRsaW5lXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9pY29ucy1tYXRlcmlhbC9FcnJvclwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvRmlsdGVyTGlzdFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvSW1wb3J0RXhwb3J0XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9pY29ucy1tYXRlcmlhbC9TZWFyY2hcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL21hdGVyaWFsXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9tYXRlcmlhbC9DaGVja2JveFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvbWF0ZXJpYWwvRGl2aWRlclwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9tYXRlcmlhbC9TdGFja1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkvbWF0ZXJpYWwvVGFiXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9tYXRlcmlhbC9UYWJzXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQG11aS9tYXRlcmlhbC9zdHlsZXNcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL21hdGVyaWFsL3VzZU1lZGlhUXVlcnlcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAbXVpL3gtZGF0ZS1waWNrZXJzL0FkYXB0ZXJEYXlqc1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkveC1kYXRlLXBpY2tlcnMvRGF0ZVBpY2tlclwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIkBtdWkveC1kYXRlLXBpY2tlcnMvTG9jYWxpemF0aW9uUHJvdmlkZXJcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJAcmVkdXhqcy90b29sa2l0XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiQHNlbnRyeS9yZWFjdFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcImRheWpzXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiZm9ybWlrXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiaTE4bmV4dFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcImkxOG5leHQtYnJvd3Nlci1sYW5ndWFnZWRldGVjdG9yXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwiaWR0b2tlbi12ZXJpZmllclwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIm1vbWVudC10aW1lem9uZVwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvY29tcG9uZW50cy9yYXctaHRtbFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvc2VjdXJpdHkvYWN0aW9uc1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvc2VjdXJpdHkvbWV0aG9kc1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvdXRpbHMvYWN0aW9uc1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvdXRpbHMvbWV0aG9kc1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvdXRpbHMvcXVlcnktYWN0aW9uc1wiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcInAtbGltaXRcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJwcm9wLXR5cGVzXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1pMThuZXh0XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtaW5maW5pdGUtc2Nyb2xsLWNvbXBvbmVudFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LXFyLWNvZGVcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdC1yZWR1eFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0L2pzeC1ydW50aW1lXCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwicmVkdXhcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWR1eC1wZXJzaXN0XCIiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L2V4dGVybmFsIGNvbW1vbmpzIFwicmVkdXgtcGVyc2lzdC9pbnRlZ3JhdGlvbi9yZWFjdFwiIiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC9leHRlcm5hbCBjb21tb25qcyBcInJlZHV4LXBlcnNpc3QvbGliL3N0b3JhZ2VcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvZXh0ZXJuYWwgY29tbW9uanMgXCJ5dXBcIiIsIndlYnBhY2s6Ly9teS1vcmRlcnMtdGlja2V0cy13aWRnZXQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL215LW9yZGVycy10aWNrZXRzLXdpZGdldC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vbXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0Ly4vc3JjL215LW9yZGVycy10aWNrZXRzLXdpZGdldC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcIm15LW9yZGVycy10aWNrZXRzLXdpZGdldFwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJteS1vcmRlcnMtdGlja2V0cy13aWRnZXRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wibXktb3JkZXJzLXRpY2tldHMtd2lkZ2V0XCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgKCkgPT4ge1xucmV0dXJuICIsImltcG9ydCB7XG4gIGF1dGhFcnJvckhhbmRsZXIsXG4gIGdldFJlcXVlc3QsXG4gIGRlbGV0ZVJlcXVlc3QsXG4gIGNyZWF0ZUFjdGlvbixcbiAgc3RvcExvYWRpbmcsXG4gIHN0YXJ0TG9hZGluZyxcbiAgcHV0UmVxdWVzdFxufSBmcm9tIFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi91dGlscy9hY3Rpb25zXCI7XG5pbXBvcnQgcExpbWl0IGZyb20gXCJwLWxpbWl0XCI7XG5pbXBvcnQgeyBnZXRJZFRva2VuIH0gZnJvbSBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvc2VjdXJpdHkvbWV0aG9kc1wiO1xuaW1wb3J0IHsgb2JqZWN0VG9RdWVyeVN0cmluZyB9IGZyb20gXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3V0aWxzL21ldGhvZHNcIjtcbmltcG9ydCBJZFRva2VuVmVyaWZpZXIgZnJvbSBcImlkdG9rZW4tdmVyaWZpZXJcIjtcbmltcG9ydCBpMThuIGZyb20gXCJpMThuZXh0XCI7XG5pbXBvcnQgeyBnZXRBY2Nlc3NUb2tlblNhZmVseSB9IGZyb20gXCIuL3V0aWxzL2F1dGhcIjtcbmltcG9ydCB7XG4gIEZJUlNUX1BBR0UsXG4gIERFRkFVTFRfSVRFTVNfUEVSX1BBR0UsXG4gIFBST01JU0VfQkFUQ0hfTElNSVQsXG4gIEZJRlRZX1BFUl9QQUdFLFxuICBFUlJPUl9DT0RFU1xufSBmcm9tIFwiLi91dGlscy9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IFJFU0VUX1NUQVRFID0gXCJSRVNFVF9TVEFURVwiO1xuZXhwb3J0IGNvbnN0IFJFU0VUX0ZJTFRFUiA9IFwiUkVTRVRfRklMVEVSXCI7XG5leHBvcnQgY29uc3QgUkVTRVRfQVBJX0VSUk9SID0gXCJSRVNFVF9BUElfRVJST1JcIjtcbmV4cG9ydCBjb25zdCBTRVRfU1RBVEUgPSBcIlNFVF9TVEFURVwiO1xuZXhwb3J0IGNvbnN0IFNFVF9BUElfRVJST1IgPSBcIlNFVF9BUElfRVJST1JcIjtcblxuLy8gT1JERVJTIENPTlNUU1xuZXhwb3J0IGNvbnN0IEdFVF9VU0VSX09SREVSUyA9IFwiR0VUX09SREVSU1wiO1xuZXhwb3J0IGNvbnN0IFJFRlVORF9PUkRFUiA9IFwiUkVGVU5EX09SREVSXCI7XG5leHBvcnQgY29uc3QgU0VUX0FDVElWRV9PUkRFUl9JRCA9IFwiU0VUX0FDVElWRV9PUkRFUl9JRFwiO1xuZXhwb3J0IGNvbnN0IEZJTFRFUl9VU0VSX09SREVSUyA9IFwiRklMVEVSX1VTRVJfT1JERVJTXCI7XG5cbi8vIFRJQ0tFVFMgQ09OU1RTXG5leHBvcnQgY29uc3QgR0VUX1RJQ0tFVFMgPSBcIkdFVF9USUNLRVRTXCI7XG5leHBvcnQgY29uc3QgVVBEQVRFX1RJQ0tFVCA9IFwiVVBEQVRFX1RJQ0tFVFwiO1xuZXhwb3J0IGNvbnN0IFJFQ0VJVkVfVElDS0VUID0gXCJSRUNFSVZFX1RJQ0tFVFwiO1xuZXhwb3J0IGNvbnN0IFJFTU9WRV9USUNLRVRfQVRURU5ERUUgPSBcIlJFTU9WRV9USUNLRVRfQVRURU5ERUVcIjtcbmV4cG9ydCBjb25zdCBBU1NJR05fVElDS0VUID0gXCJBU1NJR05fVElDS0VUXCI7XG5leHBvcnQgY29uc3QgUkVGVU5EX1RJQ0tFVCA9IFwiUkVGVU5EX1RJQ0tFVFwiO1xuZXhwb3J0IGNvbnN0IFJFU0VORF9OT1RJRklDQVRJT04gPSBcIlJFU0VORF9OT1RJRklDQVRJT05cIjtcbmV4cG9ydCBjb25zdCBHRVRfVElDS0VUU19CWV9PUkRFUiA9IFwiR0VUX1RJQ0tFVFNfQllfT1JERVJcIjtcbmV4cG9ydCBjb25zdCBHRVRfVElDS0VUU19CWV9PUkRFUl9FUlJPUiA9IFwiR0VUX1RJQ0tFVFNfQllfT1JERVJfRVJST1JcIjtcbmV4cG9ydCBjb25zdCBHRVRfT1JERVJfVElDS0VUX0RFVEFJTFMgPSBcIkdFVF9PUkRFUl9USUNLRVRfREVUQUlMU1wiO1xuZXhwb3J0IGNvbnN0IEdFVF9USUNLRVRfREVUQUlMUyA9IFwiR0VUX1RJQ0tFVF9ERVRBSUxTXCI7XG5leHBvcnQgY29uc3QgUkVDRUlWRV9FWFRSQV9RVUVTVElPTlMgPSBcIlJFQ0VJVkVfRVhUUkFfUVVFU1RJT05TXCI7XG5leHBvcnQgY29uc3QgVElDS0VUX0FUVEVOREVFX0tFWVMgPSB7XG4gIGVtYWlsOiBcImF0dGVuZGVlX2VtYWlsXCIsXG4gIGZpcnN0TmFtZTogXCJhdHRlbmRlZV9maXJzdF9uYW1lXCIsXG4gIGxhc3ROYW1lOiBcImF0dGVuZGVlX2xhc3RfbmFtZVwiLFxuICBjb21wYW55OiBcImF0dGVuZGVlX2NvbXBhbnlcIixcbiAgZGlzY2xhaW1lckFjY2VwdGVkOiBcImRpc2NsYWltZXJfYWNjZXB0ZWRcIixcbiAgZXh0cmFRdWVzdGlvbnM6IFwiZXh0cmFfcXVlc3Rpb25zXCJcbn07XG5leHBvcnQgY29uc3QgVVBEQVRFX1RJQ0tFVFNfUkVGVU5EX1JFUVVFU1RFRCA9XG4gIFwiVVBEQVRFX1RJQ0tFVFNfUkVGVU5EX1JFUVVFU1RFRFwiO1xuXG4vLyBVU0VSIENPTlRTXG5leHBvcnQgY29uc3QgU1RBUlRfTE9BRElOR19JRFBfUFJPRklMRSA9IFwiU1RBUlRfTE9BRElOR19JRFBfUFJPRklMRVwiO1xuZXhwb3J0IGNvbnN0IFNUT1BfTE9BRElOR19JRFBfUFJPRklMRSA9IFwiU1RPUF9MT0FESU5HX0lEUF9QUk9GSUxFXCI7XG5leHBvcnQgY29uc3QgVVBEQVRFX0lEUF9QUk9GSUxFID0gXCJVUERBVEVfSURQX1BST0ZJTEVcIjtcbmV4cG9ydCBjb25zdCBTRVRfVVNFUiA9IFwiU0VUX1VTRVJcIjtcblxuLy8gU1VNTUlUIENPTlNUU1xuZXhwb3J0IGNvbnN0IFNFVF9TVU1NSVQgPSBcIlNFVF9TVU1NSVRcIjtcbmV4cG9ydCBjb25zdCBHRVRfTUFJTl9FWFRSQV9RVUVTVElPTlMgPSBcIkdFVF9NQUlOX0VYVFJBX1FVRVNUSU9OU1wiO1xuZXhwb3J0IGNvbnN0IFJFQ0VJVkVfTUFSS0VUSU5HX1NFVFRJTkdTID0gXCJSRUNFSVZFX01BUktFVElOR19TRVRUSU5HU1wiO1xuZXhwb3J0IGNvbnN0IENMRUFSX01BUktFVElOR19TRVRUSU5HUyA9IFwiQ0xFQVJfTUFSS0VUSU5HX1NFVFRJTkdTXCI7XG5cbmV4cG9ydCBjb25zdCByZXNldFN0YXRlID0gKCkgPT4gKGRpc3BhdGNoKSA9PiB7XG4gIGRpc3BhdGNoKGNyZWF0ZUFjdGlvbihSRVNFVF9TVEFURSkoe30pKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldEZpbHRlciA9ICgpID0+IChkaXNwYXRjaCkgPT4ge1xuICBkaXNwYXRjaChjcmVhdGVBY3Rpb24oUkVTRVRfRklMVEVSKSh7fSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0RXJyb3IgPSAoKSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgZGlzcGF0Y2goY3JlYXRlQWN0aW9uKFJFU0VUX0FQSV9FUlJPUikoe30pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRSZWR1Y2VyU3RhdGUgPSAoc3VtbWl0LCB1c2VyKSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgZGlzcGF0Y2goY3JlYXRlQWN0aW9uKFNFVF9TVEFURSkoeyBzdW1taXQsIHVzZXIgfSkpO1xufTtcblxuLy8gRklMVEVSIC8gU09SVCBDT05TVEFOVFNcbmV4cG9ydCBjb25zdCBGSUxURVJfVkFSX0RBVEUgPSBcIkZJTFRFUl9WQVJfREFURVwiO1xuZXhwb3J0IGNvbnN0IEZJTFRFUl9WQVJfT1JERVJfTlVNQkVSID0gXCJGSUxURVJfVkFSX09SREVSX05VTUJFUlwiO1xuXG4vLyBGSUxURVIvU09SVCBBQ1RJT05TXG5leHBvcnQgY29uc3QgcGFyc2VGaWx0ZXIgPSAoZmlsdGVyT2JqKSA9PiB7XG4gIGNvbnN0IGZpbHRlciA9IFtdO1xuICBpZiAoZmlsdGVyT2JqLnR5cGUgPT09IEZJTFRFUl9WQVJfREFURSkge1xuICAgIGZpbHRlci5wdXNoKGAke2ZpbHRlck9iai5uYW1lfVtdJHtmaWx0ZXJPYmoubG93ZXJ9JiYke2ZpbHRlck9iai51cHBlcn1gKTtcbiAgfVxuICBpZiAoZmlsdGVyT2JqLnR5cGUgPT09IEZJTFRFUl9WQVJfT1JERVJfTlVNQkVSKSB7XG4gICAgZmlsdGVyLnB1c2goYCR7ZmlsdGVyT2JqLm5hbWV9PUAke2ZpbHRlck9iai52YWx1ZX1gKTtcbiAgfVxuICByZXR1cm4gZmlsdGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNvcnREaXJlY3Rpb24gPSAoZGlyZWN0aW9uKSA9PlxuICBkaXJlY3Rpb24gPT09IFwiYXNjXCIgPyBcIitcIiA6IFwiLVwiO1xuXG4vLyBwYXlsb2FkOiB7IGh0dHBDb2RlLCB0aXRsZSwgaHRtbDogY29udGVudCwgdHlwZSB9XG5leHBvcnQgY29uc3QgZXJyb3JIYW5kbGVyTm90aWZ5ID0gKHBheWxvYWQsIGNhbGxiYWNrKSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgZGlzcGF0Y2goY3JlYXRlQWN0aW9uKFNFVF9BUElfRVJST1IpKHBheWxvYWQpKTtcbiAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xufTtcblxuZXhwb3J0IGNvbnN0IGN1c3RvbUF1dGhFcnJvckhhbmRsZXIgPSAoZXJyLCByZXMpID0+IChkaXNwYXRjaCkgPT4ge1xuICBkaXNwYXRjaChhdXRoRXJyb3JIYW5kbGVyKGVyciwgcmVzLCBlcnJvckhhbmRsZXJOb3RpZnkpKTtcbn07XG5cbmNvbnN0IGN1c3RvbUZldGNoRXJyb3JIYW5kbGVyID0gKHJlc3BvbnNlKSA9PiAoZGlzcGF0Y2gpID0+IHtcbiAgY29uc3QgY29kZSA9IHJlc3BvbnNlLnN0YXR1cztcbiAgbGV0IG1zZztcbiAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gIHN3aXRjaCAoY29kZSkge1xuICAgIGNhc2UgRVJST1JfQ09ERVNbXCI0MDNcIl06XG4gICAgICBtc2cgPSBpMThuLnQoXCJlcnJvcnMudXNlcl9ub3RfYXV0aHpcIik7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVSUk9SX0NPREVTW1wiNDAxXCJdOlxuICAgICAgbXNnID0gaTE4bi50KFwiZXJyb3JzLnNlc3Npb25fZXhwaXJlZFwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRVJST1JfQ09ERVNbXCI0MTJcIl06XG4gICAgICBtc2cgPSBcIlwiO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuZXJyb3JzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihrZXkpKSB7XG4gICAgICAgICAgbXNnID0gYCR7bXNnfSAke2tleX06IGA7XG4gICAgICAgIH1cblxuICAgICAgICBtc2cgPSBgJHttc2d9ICR7dmFsdWV9IDxicj5gO1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEVSUk9SX0NPREVTW1wiNTAwXCJdOlxuICAgICAgbXNnID0gaTE4bi50KFwiZXJyb3JzLnNlcnZlcl9lcnJvclwiKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBtc2cgPSByZXNwb25zZS5zdGF0dXNUZXh0O1xuICB9XG5cbiAgZGlzcGF0Y2goZXJyb3JIYW5kbGVyTm90aWZ5KHsgdGl0bGU6IGkxOG4udChcImVycm9ycy5lcnJvclwiKSwgaHRtbDogbXNnIH0pKTtcbn07XG5cbi8vIE9SREVSUyBBQ1RJT05TXG5leHBvcnQgY29uc3QgZ2V0VXNlck9yZGVycyA9XG4gICh7XG4gICAgcGFnZSA9IEZJUlNUX1BBR0UsXG4gICAgcGVyUGFnZSA9IERFRkFVTFRfSVRFTVNfUEVSX1BBR0UsXG4gICAgZmlsdGVyID0ge30sXG4gICAgc29ydCA9IHt9XG4gIH0pID0+XG4gIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgd2lkZ2V0U3RhdGU6IHsgc3VtbWl0IH1cbiAgICB9ID0gZ2V0U3RhdGUoKTtcblxuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW5TYWZlbHkoKS5jYXRjaCgoKSA9PlxuICAgICAgUHJvbWlzZS5yZWplY3QoKVxuICAgICk7XG5cbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIG9yZGVyOiBcIi1pZFwiLFxuICAgICAgXCJmaWx0ZXJbXVwiOiBbXCJzdGF0dXM9PVBhaWRcIl0sXG4gICAgICByZWxhdGlvbnM6IFwibm9uZVwiLFxuICAgICAgcGFnZSxcbiAgICAgIHBlcl9wYWdlOiBwZXJQYWdlXG4gICAgfTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhmaWx0ZXIpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBwYXJzZUZpbHRlcihmaWx0ZXIpO1xuICAgICAgcGFyYW1zW1wiZmlsdGVyW11cIl0gPSBbLi4ucGFyYW1zW1wiZmlsdGVyW11cIl0sIC4uLmZpbHRlcnNdO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMoc29ydCkubGVuZ3RoID4gMCkge1xuICAgICAgcGFyYW1zLm9yZGVyID0gYCR7Z2V0U29ydERpcmVjdGlvbihzb3J0LmRpcmVjdGlvbil9JHtzb3J0Lm5hbWV9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gZ2V0UmVxdWVzdChcbiAgICAgIG51bGwsXG4gICAgICBjcmVhdGVBY3Rpb24oR0VUX1VTRVJfT1JERVJTKSxcbiAgICAgIGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzLyR7c3VtbWl0LmlkfS9vcmRlcnMvbWVgLFxuICAgICAgY3VzdG9tQXV0aEVycm9ySGFuZGxlclxuICAgICkocGFyYW1zKShkaXNwYXRjaClcbiAgICAgIC50aGVuKChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBzZXRBY3RpdmVPcmRlcklkID0gKG9yZGVySWQpID0+IGFzeW5jIChkaXNwYXRjaCkgPT5cbiAgZGlzcGF0Y2goY3JlYXRlQWN0aW9uKFNFVF9BQ1RJVkVfT1JERVJfSUQpKG9yZGVySWQpKTtcblxuLy8gVVNFUiBBQ1RJT05TXG5leHBvcnQgY29uc3Qgc2V0VXNlciA9ICh1c2VyKSA9PiAoZGlzcGF0Y2gpID0+XG4gIGRpc3BhdGNoKGNyZWF0ZUFjdGlvbihTRVRfVVNFUikodXNlcikpO1xuXG4vLyBUSUNLRVQgQUNUSU9OU1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlclRpY2tldHMgPVxuICAoeyBwYWdlID0gRklSU1RfUEFHRSwgcGVyUGFnZSA9IERFRkFVTFRfSVRFTVNfUEVSX1BBR0UgfSkgPT5cbiAgYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSwgeyBhcGlCYXNlVXJsIH0pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB1c2VyU3RhdGU6IHsgdXNlclByb2ZpbGUgfSxcbiAgICAgIHN1bW1pdFxuICAgIH0gPSBnZXRTdGF0ZSgpO1xuICAgIGlmICghc3VtbWl0KSByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuU2FmZWx5KCkuY2F0Y2goKCkgPT5cbiAgICAgIFByb21pc2UucmVqZWN0KClcbiAgICApO1xuXG4gICAgaWYgKCF1c2VyUHJvZmlsZS5pZCkgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBmaWx0ZXI6IFwic3RhdHVzPT1QYWlkXCIsXG4gICAgICBleHBhbmQ6IFwib3JkZXIsIG93bmVyLCB0aWNrZXRfdHlwZVwiLFxuICAgICAgb3JkZXI6IFwiLWlkXCIsXG4gICAgICBmaWVsZHM6XG4gICAgICAgIFwib3JkZXIuaWQsb3JkZXIub3duZXJfZmlyc3RfbmFtZSxvcmRlci5vd25lcl9sYXN0X25hbWUsb3JkZXIub3duZXJfZW1haWwsb3duZXIuZmlyc3RfbmFtZSxvd25lci5sYXN0X25hbWUsb3duZXIuc3RhdHVzXCIsXG4gICAgICByZWxhdGlvbnM6IFwibm9uZVwiLFxuICAgICAgcGFnZSxcbiAgICAgIHBlcl9wYWdlOiBwZXJQYWdlXG4gICAgfTtcbiAgICByZXR1cm4gZ2V0UmVxdWVzdChcbiAgICAgIG51bGwsXG4gICAgICBjcmVhdGVBY3Rpb24oR0VUX1RJQ0tFVFMpLFxuICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXQuaWR9L29yZGVycy9hbGwvdGlja2V0cy9tZWAsXG4gICAgICBjdXN0b21BdXRoRXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBnZXRUaWNrZXRzQnlPcmRlciA9XG4gICh7IG9yZGVySWQsIHBhZ2UgPSBGSVJTVF9QQUdFLCBwZXJQYWdlID0gREVGQVVMVF9JVEVNU19QRVJfUEFHRSB9KSA9PlxuICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlLCB7IGFwaUJhc2VVcmwgfSkgPT4ge1xuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuU2FmZWx5KCkuY2F0Y2goKCkgPT5cbiAgICAgIFByb21pc2UucmVqZWN0KClcbiAgICApO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIGV4cGFuZDpcbiAgICAgICAgXCJyZWZ1bmRfcmVxdWVzdHMsb3duZXIsb3duZXIuZXh0cmFfcXVlc3Rpb25zLGJhZGdlLGJhZGdlLmZlYXR1cmVzLHRpY2tldF90eXBlXCIsXG4gICAgICBvcmRlcjogXCIraWRcIixcbiAgICAgIHBhZ2UsXG4gICAgICBwZXJfcGFnZTogcGVyUGFnZVxuICAgIH07XG4gICAgcmV0dXJuIGdldFJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKEdFVF9USUNLRVRTX0JZX09SREVSKSxcbiAgICAgIGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzL2FsbC9vcmRlcnMvJHtvcmRlcklkfS90aWNrZXRzYCxcbiAgICAgIGN1c3RvbUF1dGhFcnJvckhhbmRsZXJcbiAgICApKHBhcmFtcykoZGlzcGF0Y2gpXG4gICAgICAudGhlbigocGF5bG9hZCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgICBkaXNwYXRjaChjcmVhdGVBY3Rpb24oR0VUX1RJQ0tFVFNfQllfT1JERVJfRVJST1IpKTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9KTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IHJlc2VuZE5vdGlmaWNhdGlvbiA9XG4gICh0aWNrZXQpID0+XG4gIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKCgpID0+XG4gICAgICBQcm9taXNlLnJlamVjdCgpXG4gICAgKTtcblxuICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gdGlja2V0O1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuXG4gICAgY29uc3Qgb3JkZXJJZCA9IHRpY2tldC5vcmRlciA/IHRpY2tldC5vcmRlci5pZCA6IHRpY2tldC5vcmRlcl9pZDtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW5cbiAgICB9O1xuXG4gICAgcmV0dXJuIHB1dFJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKFJFU0VORF9OT1RJRklDQVRJT04pLFxuICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvYWxsL29yZGVycy8ke29yZGVySWR9L3RpY2tldHMvJHt0aWNrZXQuaWR9L2F0dGVuZGVlL3JlaW52aXRlYCxcbiAgICAgIHsgbWVzc2FnZSB9LFxuICAgICAgY3VzdG9tQXV0aEVycm9ySGFuZGxlclxuICAgICkocGFyYW1zKShkaXNwYXRjaClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgcmVmdW5kVGlja2V0ID1cbiAgKHsgdGlja2V0IH0pID0+XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlLCB7IGFwaUJhc2VVcmwgfSkgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW5TYWZlbHkoKS5jYXRjaCgoKSA9PlxuICAgICAgUHJvbWlzZS5yZWplY3QoKVxuICAgICk7XG5cbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG5cbiAgICBjb25zdCBvcmRlcklkID0gdGlja2V0Lm9yZGVyID8gdGlja2V0Lm9yZGVyLmlkIDogdGlja2V0Lm9yZGVyX2lkO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIGV4cGFuZDogXCJyZWZ1bmRfcmVxdWVzdHMsdGlja2V0X3R5cGVcIixcbiAgICAgIGZpZWxkczogXCJyZWZ1bmRfcmVxdWVzdHMuc3RhdHVzXCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlbGV0ZVJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKFJFRlVORF9USUNLRVQpLFxuICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvYWxsL29yZGVycy8ke29yZGVySWR9L3RpY2tldHMvJHt0aWNrZXQuaWR9L3JlZnVuZGAsXG4gICAgICB7fSxcbiAgICAgIGN1c3RvbUF1dGhFcnJvckhhbmRsZXJcbiAgICApKHBhcmFtcykoZGlzcGF0Y2gpXG4gICAgICAudGhlbigocGF5bG9hZCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pO1xuICB9O1xuXG5leHBvcnQgY29uc3QgcmVmdW5kQnVsa1RpY2tldHMgPVxuICAoeyB0aWNrZXRzIH0pID0+XG4gIGFzeW5jIChkaXNwYXRjaCkgPT4ge1xuICAgIGNvbnN0IGxpbWl0ID0gcExpbWl0KFBST01JU0VfQkFUQ0hfTElNSVQpO1xuICAgIGNvbnN0IGFsbFJlZnVuZFRpY2tldENhbGxzID0gdGlja2V0cy5tYXAoKHRpY2tldCkgPT5cbiAgICAgIGxpbWl0KCgpID0+IGRpc3BhdGNoKHJlZnVuZFRpY2tldCh7IHRpY2tldCB9KSkpXG4gICAgKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoWy4uLmFsbFJlZnVuZFRpY2tldENhbGxzXSlcbiAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgY29uc3Qgc3VjY2Vzc2Z1bGx5UmVxdWVzdGVkID0gcmVzXG4gICAgICAgICAgLmZpbHRlcigocikgPT4gci5yZXNwb25zZT8ucmVmdW5kX3JlcXVlc3RzPy5sZW5ndGgpXG4gICAgICAgICAgLm1hcCgocikgPT4gci5yZXNwb25zZSk7XG4gICAgICAgIHJldHVybiBzdWNjZXNzZnVsbHlSZXF1ZXN0ZWQ7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlKSA9PiBlKTtcbiAgfTtcblxuLy8gdXBkYXRlIHRoZSB0aWNrZXRzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Vzc2Z1bGx5IHJlZnVuZGVkXG5leHBvcnQgY29uc3QgdXBkYXRlVGlja2V0c1JlZnVuZFJlcXVlc3RlZCA9XG4gICh0aWNrZXRzUmVmdW5kUmVxdWVzdGVkKSA9PiAoZGlzcGF0Y2gpID0+XG4gICAgZGlzcGF0Y2goXG4gICAgICBjcmVhdGVBY3Rpb24oVVBEQVRFX1RJQ0tFVFNfUkVGVU5EX1JFUVVFU1RFRCkodGlja2V0c1JlZnVuZFJlcXVlc3RlZClcbiAgICApO1xuXG4vLyBTVU1NSVQgQUNUSU9OU1xuXG5leHBvcnQgY29uc3QgZ2V0RXh0cmFRdWVzdGlvbnMgPVxuICAoYXR0ZW5kZWVJZCkgPT5cbiAgYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSwgeyBhcGlCYXNlVXJsIH0pID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB3aWRnZXRTdGF0ZTogeyBzdW1taXQgfVxuICAgIH0gPSBnZXRTdGF0ZSgpO1xuXG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKCgpID0+XG4gICAgICBQcm9taXNlLnJlamVjdCgpXG4gICAgKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBwZXJfcGFnZTogRklGVFlfUEVSX1BBR0UsXG4gICAgICBleHBhbmQ6IFwiKnN1Yl9xdWVzdGlvbl9ydWxlcywqc3ViX3F1ZXN0aW9uLCp2YWx1ZXNcIixcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBcImZpbHRlcltdXCI6IFwidGlja2V0c19leGNsdWRlX2luYWN0aXZlcz09dHJ1ZVwiXG4gICAgfTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvJHtzdW1taXQuaWR9L2F0dGVuZGVlcy8ke2F0dGVuZGVlSWR9L2FsbG93ZWQtZXh0cmEtcXVlc3Rpb25zYDtcblxuICAgIHJldHVybiBnZXRSZXF1ZXN0KFxuICAgICAgbnVsbCxcbiAgICAgIGNyZWF0ZUFjdGlvbihSRUNFSVZFX0VYVFJBX1FVRVNUSU9OUyksXG4gICAgICBlbmRwb2ludCxcbiAgICAgIGN1c3RvbUF1dGhFcnJvckhhbmRsZXJcbiAgICApKHBhcmFtcykoZGlzcGF0Y2gpLnRoZW4oKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBnZXRUaWNrZXQgPVxuICAodGlja2V0SWQsIG9yZGVySWQpID0+XG4gIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKCgpID0+XG4gICAgICBQcm9taXNlLnJlamVjdCgpXG4gICAgKTtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBleHBhbmQ6XG4gICAgICAgIFwib3duZXIsb3duZXIuZXh0cmFfcXVlc3Rpb25zLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbix0aWNrZXRfdHlwZSxvcmRlclwiLFxuICAgICAgcmVsYXRpb25zOiBcIm93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5ub25lXCIsXG4gICAgICBmaWVsZHM6XG4gICAgICAgIFwib3duZXIuZXh0cmFfcXVlc3Rpb25zLnF1ZXN0aW9uLmlkLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5uYW1lLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi50eXBlXCJcbiAgICB9O1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBgJHthcGlCYXNlVXJsfS9hcGkvdjEvc3VtbWl0cy9hbGwvb3JkZXJzLyR7b3JkZXJJZH0vdGlja2V0cy8ke3RpY2tldElkfWA7XG5cbiAgICByZXR1cm4gZ2V0UmVxdWVzdChcbiAgICAgIG51bGwsXG4gICAgICBjcmVhdGVBY3Rpb24oUkVDRUlWRV9USUNLRVQpLFxuICAgICAgZW5kcG9pbnQsXG4gICAgICBjdXN0b21BdXRoRXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgIH0pO1xuICB9O1xuXG5jb25zdCBub3JtYWxpemVUaWNrZXQgPSAoZW50aXR5KSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRFbnRpdHkgPSB7IC4uLmVudGl0eSB9O1xuXG4gIGlmICghZW50aXR5LmF0dGVuZGVlX2NvbXBhbnkuaWQpIHtcbiAgICBub3JtYWxpemVkRW50aXR5LmF0dGVuZGVlX2NvbXBhbnkgPSBlbnRpdHkuYXR0ZW5kZWVfY29tcGFueTtcbiAgfSBlbHNlIHtcbiAgICBkZWxldGUgbm9ybWFsaXplZEVudGl0eS5hdHRlbmRlZV9jb21wYW55O1xuICAgIG5vcm1hbGl6ZWRFbnRpdHkuYXR0ZW5kZWVfY29tcGFueV9pZCA9IGVudGl0eS5hdHRlbmRlZV9jb21wYW55LmlkO1xuICB9XG5cbiAgcmV0dXJuIG5vcm1hbGl6ZWRFbnRpdHk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVmcmVzaFByb2ZpbGUgPVxuICAoZGF0YSwgY29tcGFueSwgdGlja2V0T3duZXIpID0+XG4gIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgdXBkYXRlUHJvZmlsZSB9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgd2lkZ2V0U3RhdGU6IHsgdXNlciB9XG4gICAgfSA9IGdldFN0YXRlKCk7XG4gICAgY29uc3QgeyB1c2VyUHJvZmlsZSB9ID0gdXNlcjtcblxuICAgIC8vIGVtYWlsIHNob3VsZCBtYXRjaCAoIG9ubHkgdXBkYXRlIG15IHByb2ZpbGUgaXMgdGlja2V0IGJlbG9uZ3MgdG8gbWUhKVxuICAgIC8vIGFuZCBpZiB0aGUgdGlja2V0IGRvZXNuJ3QgaGF2ZSBhIG1hbmFnZXJcbiAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGNoYW5nZXMgaW4gdGhlIHRpY2tldCBkYXRhIHRvIHVwZGF0ZSB0aGUgcHJvZmlsZVxuICAgIGNvbnN0IHtcbiAgICAgIGF0dGVuZGVlX2VtYWlsLFxuICAgICAgYXR0ZW5kZWVfZmlyc3RfbmFtZSxcbiAgICAgIGF0dGVuZGVlX2xhc3RfbmFtZSxcbiAgICAgIGF0dGVuZGVlX2NvbXBhbnlcbiAgICB9ID0gZGF0YTtcbiAgICBjb25zdCBoYXNNYW5hZ2VyID0gdGlja2V0T3duZXI/Lm1hbmFnZXI/LmlkIHx8IHRpY2tldE93bmVyPy5tYW5hZ2VyX2lkO1xuICAgIGNvbnN0IGl0c01lID0gdXNlclByb2ZpbGUuZW1haWwgPT09IGF0dGVuZGVlX2VtYWlsO1xuICAgIGNvbnN0IHByb2ZpbGVDaGFuZ2VkID1cbiAgICAgIGF0dGVuZGVlX2NvbXBhbnkubmFtZSAhPT0gY29tcGFueSB8fFxuICAgICAgYXR0ZW5kZWVfZmlyc3RfbmFtZSAhPT0gdXNlclByb2ZpbGUuZmlyc3RfbmFtZSB8fFxuICAgICAgYXR0ZW5kZWVfbGFzdF9uYW1lICE9PSB1c2VyUHJvZmlsZS5sYXN0X25hbWU7XG5cbiAgICBpZiAoaXRzTWUgJiYgIWhhc01hbmFnZXIgJiYgcHJvZmlsZUNoYW5nZWQpIHtcbiAgICAgIGNvbnN0IG5ld1Byb2ZpbGUgPSB7XG4gICAgICAgIGZpcnN0X25hbWU6IGF0dGVuZGVlX2ZpcnN0X25hbWUsXG4gICAgICAgIGxhc3RfbmFtZTogYXR0ZW5kZWVfbGFzdF9uYW1lLFxuICAgICAgICBjb21wYW55OiBhdHRlbmRlZV9jb21wYW55Lm5hbWUgfHwgYXR0ZW5kZWVfY29tcGFueVxuICAgICAgfTtcblxuICAgICAgLy8gdGhpcyBpcyBhIGNhbGxiYWNrIG1ldGhvZCB0aGF0IHVwZGF0ZXMgdXNlclByb2ZpbGUgaW4gQVBJIGFuZCBldmVudC1zaXRlXG4gICAgICB1cGRhdGVQcm9maWxlKG5ld1Byb2ZpbGUpO1xuICAgIH1cbiAgfTtcblxuZXhwb3J0IGNvbnN0IHNhdmVUaWNrZXREZXRhaWxzID1cbiAgKHRpY2tldCwgYW5zd2VycykgPT5cbiAgYXN5bmMgKGRpc3BhdGNoLCBnZXRTdGF0ZSwgeyBhcGlCYXNlVXJsIH0pID0+IHtcbiAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuU2FmZWx5KCkuY2F0Y2goUHJvbWlzZS5yZWplY3QpO1xuXG4gICAgaWYgKCFhY2Nlc3NUb2tlbikgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG5cbiAgICBkaXNwYXRjaChzdGFydExvYWRpbmcoKSk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgZXhwYW5kOlxuICAgICAgICBcInJlZnVuZF9yZXF1ZXN0cyxvd25lcixvd25lci5leHRyYV9xdWVzdGlvbnMsYmFkZ2UsYmFkZ2UuZmVhdHVyZXMsdGlja2V0X3R5cGVcIlxuICAgIH07XG5cbiAgICBjb25zdCBpZFRva2VuID0gZ2V0SWRUb2tlbigpO1xuICAgIGxldCBjb21wYW55ID0gXCJcIjtcbiAgICBpZiAoaWRUb2tlbikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmVyaWZpZXIgPSBuZXcgSWRUb2tlblZlcmlmaWVyKCk7XG4gICAgICAgIGNvbnN0IGp3dCA9IHZlcmlmaWVyLmRlY29kZShpZFRva2VuKTtcbiAgICAgICAgY29tcGFueSA9IGp3dC5wYXlsb2FkLmNvbXBhbnk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3JcIiwgZSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWRFbnRpdHkgPSBub3JtYWxpemVUaWNrZXQoYW5zd2Vycyk7XG5cbiAgICByZXR1cm4gcHV0UmVxdWVzdChcbiAgICAgIG51bGwsXG4gICAgICBjcmVhdGVBY3Rpb24oVVBEQVRFX1RJQ0tFVCksXG4gICAgICBgJHthcGlCYXNlVXJsfS9hcGkvdjEvc3VtbWl0cy9hbGwvb3JkZXJzL2FsbC90aWNrZXRzLyR7dGlja2V0LmlkfWAsXG4gICAgICBub3JtYWxpemVkRW50aXR5LFxuICAgICAgY3VzdG9tQXV0aEVycm9ySGFuZGxlclxuICAgICkocGFyYW1zKShkaXNwYXRjaClcbiAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgZGlzcGF0Y2gocmVmcmVzaFByb2ZpbGUoYW5zd2VycywgY29tcGFueSwgdGlja2V0Lm93bmVyKSk7XG4gICAgICAgIGRpc3BhdGNoKHN0b3BMb2FkaW5nKCkpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9KTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IGFzc2lnbkF0dGVuZGVlID1cbiAgKG9yZGVySWQsIHRpY2tldElkLCBhdHRlbmRlZV9lbWFpbCwgbWVzc2FnZSA9IG51bGwpID0+XG4gIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKFByb21pc2UucmVqZWN0KTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7IGF0dGVuZGVlX2VtYWlsIH07XG4gICAgaWYgKG1lc3NhZ2UpIHBheWxvYWQubWVzc2FnZSA9IG1lc3NhZ2U7XG5cbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBleHBhbmQ6XG4gICAgICAgIFwib3duZXIsb3duZXIuZXh0cmFfcXVlc3Rpb25zLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbix0aWNrZXRfdHlwZSxvcmRlclwiLFxuICAgICAgcmVsYXRpb25zOiBcIm93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5ub25lXCIsXG4gICAgICBmaWVsZHM6XG4gICAgICAgIFwib3duZXIuZXh0cmFfcXVlc3Rpb25zLnF1ZXN0aW9uLmlkLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5uYW1lLG93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi50eXBlXCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIHB1dFJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKEFTU0lHTl9USUNLRVQpLFxuICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvYWxsL29yZGVycy8ke29yZGVySWR9L3RpY2tldHMvJHt0aWNrZXRJZH0vYXR0ZW5kZWVgLFxuICAgICAgcGF5bG9hZCxcbiAgICAgIGN1c3RvbUF1dGhFcnJvckhhbmRsZXJcbiAgICApKHBhcmFtcykoZGlzcGF0Y2gpLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCByZWFzc2lnblRpY2tldCA9XG4gIChvcmRlcklkLCB0aWNrZXRJZCwgZW1haWwsIG1lc3NhZ2UpID0+XG4gIGFzeW5jIChkaXNwYXRjaCwgZ2V0U3RhdGUsIHsgYXBpQmFzZVVybCB9KSA9PiB7XG4gICAgY29uc3QgYWNjZXNzVG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlblNhZmVseSgpLmNhdGNoKFByb21pc2UucmVqZWN0KTtcblxuICAgIGlmICghYWNjZXNzVG9rZW4pIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuXG4gICAgZGlzcGF0Y2goc3RhcnRMb2FkaW5nKCkpO1xuXG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgIGV4cGFuZDogXCJvcmRlciwgb3duZXIsIG93bmVyLmV4dHJhX3F1ZXN0aW9ucywgb3JkZXIuc3VtbWl0XCJcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRlbGV0ZVJlcXVlc3QoXG4gICAgICBudWxsLFxuICAgICAgY3JlYXRlQWN0aW9uKFJFTU9WRV9USUNLRVRfQVRURU5ERUUpLFxuICAgICAgYCR7YXBpQmFzZVVybH0vYXBpL3YxL3N1bW1pdHMvYWxsL29yZGVycy8ke29yZGVySWR9L3RpY2tldHMvJHt0aWNrZXRJZH0vYXR0ZW5kZWVgLFxuICAgICAge30sXG4gICAgICBjdXN0b21BdXRoRXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoKS50aGVuKCgpID0+XG4gICAgICBkaXNwYXRjaChhc3NpZ25BdHRlbmRlZShvcmRlcklkLCB0aWNrZXRJZCwgZW1haWwsIG1lc3NhZ2UpKVxuICAgICk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBzYXZlRXh0cmFRdWVzdGlvbnMgPVxuICAodGlja2V0LCBhbnN3ZXJzKSA9PlxuICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlLCB7IGFwaUJhc2VVcmwgfSkgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW5TYWZlbHkoKS5jYXRjaChQcm9taXNlLnJlamVjdCk7XG5cbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW4sXG4gICAgICBleHBhbmQ6XG4gICAgICAgIFwicmVmdW5kX3JlcXVlc3RzLG93bmVyLG93bmVyLmV4dHJhX3F1ZXN0aW9ucyxvd25lci5leHRyYV9xdWVzdGlvbnMucXVlc3Rpb24sYmFkZ2UsYmFkZ2UuZmVhdHVyZXMsdGlja2V0X3R5cGUsb3JkZXJcIixcbiAgICAgIHJlbGF0aW9uczogXCJvd25lci5leHRyYV9xdWVzdGlvbnMucXVlc3Rpb24ubm9uZVwiLFxuICAgICAgZmllbGRzOlxuICAgICAgICBcIm93bmVyLmV4dHJhX3F1ZXN0aW9ucy5xdWVzdGlvbi5pZCxvd25lci5leHRyYV9xdWVzdGlvbnMucXVlc3Rpb24ubmFtZSxvd25lci5leHRyYV9xdWVzdGlvbnMucXVlc3Rpb24udHlwZVwiXG4gICAgfTtcblxuICAgIHJldHVybiBwdXRSZXF1ZXN0KFxuICAgICAgbnVsbCxcbiAgICAgIGNyZWF0ZUFjdGlvbihVUERBVEVfVElDS0VUKSxcbiAgICAgIGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzL2FsbC9vcmRlcnMvYWxsL3RpY2tldHMvJHt0aWNrZXQuaWR9YCxcbiAgICAgIGFuc3dlcnMsXG4gICAgICBjdXN0b21BdXRoRXJyb3JIYW5kbGVyXG4gICAgKShwYXJhbXMpKGRpc3BhdGNoKVxuICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBkaXNwYXRjaChzdG9wTG9hZGluZygpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSk7XG4gIH07XG5cbmV4cG9ydCBjb25zdCBnZXRUaWNrZXRQREYgPVxuICAodGlja2V0KSA9PlxuICBhc3luYyAoZGlzcGF0Y2gsIGdldFN0YXRlLCB7IGFwaUJhc2VVcmwgfSkgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW5TYWZlbHkoKS5jYXRjaChQcm9taXNlLnJlamVjdCk7XG5cbiAgICBpZiAoIWFjY2Vzc1Rva2VuKSByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcblxuICAgIGRpc3BhdGNoKHN0YXJ0TG9hZGluZygpKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGFjY2Vzc190b2tlbjogYWNjZXNzVG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3Qgb3JkZXJJZCA9IHRpY2tldC5vcmRlciA/IHRpY2tldC5vcmRlci5pZCA6IHRpY2tldC5vcmRlcl9pZDtcblxuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gb2JqZWN0VG9RdWVyeVN0cmluZyhwYXJhbXMpO1xuICAgIGNvbnN0IGFwaVVybCA9IGAke2FwaUJhc2VVcmx9L2FwaS92MS9zdW1taXRzL2FsbC9vcmRlcnMvJHtvcmRlcklkfS90aWNrZXRzLyR7dGlja2V0LmlkfS9wZGY/JHtxdWVyeVN0cmluZ31gO1xuXG4gICAgcmV0dXJuIGZldGNoKGFwaVVybCwge1xuICAgICAgcmVzcG9uc2VUeXBlOiBcIkJsb2JcIixcbiAgICAgIGhlYWRlcnM6IHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9wZGZcIiB9XG4gICAgfSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICAgICAgdGhyb3cgcmVzcG9uc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC50aGVuKChwZGYpID0+IHtcbiAgICAgICAgZGlzcGF0Y2goc3RvcExvYWRpbmcoKSk7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwocGRmKTtcbiAgICAgICAgbGluay5ocmVmID0gdXJsO1xuICAgICAgICBsaW5rLmRvd25sb2FkID0gXCJ0aWNrZXQucGRmXCI7XG4gICAgICAgIGxpbmsuZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudChcImNsaWNrXCIpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goY3VzdG9tRmV0Y2hFcnJvckhhbmRsZXIpO1xuICB9O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZUZvcm1payB9IGZyb20gXCJmb3JtaWtcIjtcbmltcG9ydCBFeHRyYVF1ZXN0aW9uc0ZpZWxkcyBmcm9tIFwiLi4vRXh0cmFRdWVzdGlvbnNGaWVsZHNcIjtcbmltcG9ydCBGb3JtRm9vdGVyIGZyb20gXCIuLi9Gb3JtRm9vdGVyXCI7XG5pbXBvcnQgdXNlU2Nyb2xsVG9FcnJvciBmcm9tIFwiLi4vLi4vaG9va3MvdXNlU2Nyb2xsVG9FcnJvclwiO1xuaW1wb3J0IFJlZ2lzdHJhdGlvbkRpc2NsYWltZXIgZnJvbSBcIi4uL1RpY2tldERldGFpbC9jb21wb25lbnRzL1JlZ2lzdHJhdGlvbkRpc2NsYWltZXIvUmVnaXN0cmF0aW9uRGlzY2xhaW1lclwiO1xuaW1wb3J0IHsgYnVpbGRWYWxpZGF0aW9uU2NoZW1hLCBwYXJzZUFuc3dlcnMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdGlja2V0VXRpbHNcIjtcblxuY29uc3QgQXNzaWduRVFGb3JtID0gKHtcbiAgdGlja2V0LFxuICBzdW1taXQsXG4gIGV4dHJhUXVlc3Rpb25zLFxuICBvblN1Ym1pdCxcbiAgb25DbG9zZVxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgZm9ybWlrID0gdXNlRm9ybWlrKHtcbiAgICBpbml0aWFsVmFsdWVzOiBwYXJzZUFuc3dlcnMoXG4gICAgICB0aWNrZXQub3duZXIsXG4gICAgICBleHRyYVF1ZXN0aW9ucyxcbiAgICAgIHt9LFxuICAgICAgbnVsbCxcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlXG4gICAgKSxcbiAgICB2YWxpZGF0aW9uU2NoZW1hOiBidWlsZFZhbGlkYXRpb25TY2hlbWEoXG4gICAgICBleHRyYVF1ZXN0aW9ucyxcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICBzdW1taXQucmVnaXN0cmF0aW9uX2Rpc2NsYWltZXJfbWFuZGF0b3J5XG4gICAgKSxcbiAgICBvblN1Ym1pdDogKHZhbHVlcykgPT4ge1xuICAgICAgY29uc3QgcmVsZXZhbnRBbnN3ZXJzID0gcGFyc2VBbnN3ZXJzKFxuICAgICAgICB0aWNrZXQub3duZXIsXG4gICAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIHJldHVybiBvblN1Ym1pdChyZWxldmFudEFuc3dlcnMpO1xuICAgIH0sXG4gICAgZW5hYmxlUmVpbml0aWFsaXplOiB0cnVlXG4gIH0pO1xuXG4gIC8vIFNDUk9MTCBUTyBFUlJPUlxuICB1c2VTY3JvbGxUb0Vycm9yKGZvcm1paywgXCJyZWFzc2lnbkRyYXdlclwiKTtcblxuICBpZiAoZXh0cmFRdWVzdGlvbnM/Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIChcbiAgICA8Zm9ybSBvblN1Ym1pdD17Zm9ybWlrLmhhbmRsZVN1Ym1pdH0gbm9WYWxpZGF0ZT5cbiAgICAgIDxCb3g+XG4gICAgICAgIDxFeHRyYVF1ZXN0aW9uc0ZpZWxkcyBleHRyYVF1ZXN0aW9ucz17ZXh0cmFRdWVzdGlvbnN9IGZvcm1paz17Zm9ybWlrfSAvPlxuICAgICAgICB7c3VtbWl0LnJlZ2lzdHJhdGlvbl9kaXNjbGFpbWVyX2NvbnRlbnQgJiYgKFxuICAgICAgICAgIDxSZWdpc3RyYXRpb25EaXNjbGFpbWVyXG4gICAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICAgIGRpc2NsYWltZXI9e3N1bW1pdC5yZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9jb250ZW50fVxuICAgICAgICAgICAgaXNSZXF1aXJlZD17c3VtbWl0LnJlZ2lzdHJhdGlvbl9kaXNjbGFpbWVyX21hbmRhdG9yeX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9Cb3g+XG4gICAgICA8Rm9ybUZvb3RlclxuICAgICAgICBzYXZlTGFiZWw9e3QoXCJ0aWNrZXRfYXNzaWduX2VxLnNhdmVcIil9XG4gICAgICAgIGNhbmNlbExhYmVsPXt0KFwidGlja2V0X2Fzc2lnbl9lcS5jYW5jZWxcIil9XG4gICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgIGRpc2FibGVkPXtmb3JtaWsuaXNTdWJtaXR0aW5nfVxuICAgICAgLz5cbiAgICA8L2Zvcm0+XG4gICk7XG59O1xuXG5Bc3NpZ25FUUZvcm0ucHJvcFR5cGVzID0ge1xuICB0aWNrZXQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgc3VtbWl0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGV4dHJhUXVlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgb25TdWJtaXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFzc2lnbkVRRm9ybTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBDb250ZW50Q29weUljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvQ29udGVudENvcHlcIjtcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgTUlMTElTRUNfVE9fU0VDIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IGRlZmF1bHRXaWR0aCA9IDkwO1xuXG5jb25zdCBDb3B5VGV4dCA9ICh7XG4gIHRleHQsXG4gIHRvb2x0aXBUZXh0LFxuICBoaWRlQ29weSA9IGZhbHNlLFxuICB0cnVuY2F0ZWQgPSB0cnVlLFxuICByZXZlcnNlZCA9IGZhbHNlLFxuICB3aWR0aCA9IGRlZmF1bHRXaWR0aFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IHRvb2x0aXBUZXh0VG9Vc2UgPSB0b29sdGlwVGV4dCB8fCB0KFwiZ2VuZXJhbC5jb3B5X3RvX2NsaXBib2FyZFwiKTtcbiAgY29uc3QgW3Rvb2x0aXAsIHNldFRvb2x0aXBdID0gUmVhY3QudXNlU3RhdGUodG9vbHRpcFRleHRUb1VzZSk7XG4gIGNvbnN0IGNsYXNzTmFtZXMgPSBgJHt0cnVuY2F0ZWQgJiYgc3R5bGVzLnRydW5jYXRlZH0gJHtcbiAgICByZXZlcnNlZCAmJiBzdHlsZXMucmV2ZXJzZWRcbiAgfWA7XG5cbiAgY29uc3QgaGFuZGxlQ29weSA9ICgpID0+IHtcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0KTtcbiAgICBzZXRUb29sdGlwKHQoXCJnZW5lcmFsLmNvcGllZFwiKSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRUb29sdGlwKHRvb2x0aXBUZXh0VG9Vc2UpO1xuICAgIH0sIE1JTExJU0VDX1RPX1NFQyk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtjbGFzc05hbWVzfSBzdHlsZT17eyB3aWR0aCB9fT5cbiAgICAgICAge3RleHR9XG4gICAgICA8L3NwYW4+XG4gICAgICB7IWhpZGVDb3B5ICYmIChcbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3Rvb2x0aXB9PlxuICAgICAgICAgIDxDb250ZW50Q29weUljb25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNvcHlJY29ufVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ29weX1cbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiY29weS1udW1iZXItYnV0dG9uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuQ29weVRleHQucHJvcFR5cGVzID0ge1xuICB0ZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0b29sdGlwVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgaGlkZUNvcHk6IFByb3BUeXBlcy5ib29sLFxuICB0cnVuY2F0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICByZXZlcnNlZDogUHJvcFR5cGVzLmJvb2wsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyXG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb3B5VGV4dDtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcblxuY29uc3QgZGVmYXVsdENvbnRleHRWYWx1ZSA9IHtcbiAgc2V0TWVzc2FnZTogKCkgPT4ge30sXG4gIHNldE1lc3NhZ2VDYWxsYmFjazogKCkgPT4ge31cbn07XG5cbmNvbnN0IEN1c3RvbURpYWxvZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KGRlZmF1bHRDb250ZXh0VmFsdWUpO1xuXG5leHBvcnQgZGVmYXVsdCBDdXN0b21EaWFsb2dDb250ZXh0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDb250ZW50LFxuICBEaWFsb2dDb250ZW50VGV4dCxcbiAgRGlhbG9nVGl0bGVcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcblxuY29uc3QgQ3VzdG9tRGlhbG9nID0gKHsgb3Blbiwgb25DbG9zZSwgdGl0bGUsIGJvZHkgfSkgPT4gKFxuICA8RGlhbG9nXG4gICAgb3Blbj17b3Blbn1cbiAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgIGFyaWEtbGFiZWxsZWRieT1cImFsZXJ0LWRpYWxvZy10aXRsZVwiXG4gICAgYXJpYS1kZXNjcmliZWRieT1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiXG4gID5cbiAgICA8RGlhbG9nVGl0bGUgaWQ9XCJhbGVydC1kaWFsb2ctdGl0bGVcIj57dGl0bGV9PC9EaWFsb2dUaXRsZT5cbiAgICA8RGlhbG9nQ29udGVudD5cbiAgICAgIDxEaWFsb2dDb250ZW50VGV4dCBpZD1cImFsZXJ0LWRpYWxvZy1kZXNjcmlwdGlvblwiPlxuICAgICAgICB7Ym9keX1cbiAgICAgIDwvRGlhbG9nQ29udGVudFRleHQ+XG4gICAgPC9EaWFsb2dDb250ZW50PlxuICA8L0RpYWxvZz5cbik7XG5cbkN1c3RvbURpYWxvZy5wcm9wVHlwZXMgPSB7XG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGJvZHk6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEN1c3RvbURpYWxvZztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFRoZW1lUHJvdmlkZXIgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgY3JlYXRlVGhlbWUgfSBmcm9tIFwiQG11aS9tYXRlcmlhbC9zdHlsZXNcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcblxubGV0IGRhcmtDb2xvciA9IFwiXCI7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAvLyBHZXQgdGhlIHJvb3QgZWxlbWVudFxuICBjb25zdCByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG4gIC8vIFJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgQ1NTIHZhcmlhYmxlXG4gIGRhcmtDb2xvciA9IGdldENvbXB1dGVkU3R5bGUocm9vdCkuZ2V0UHJvcGVydHlWYWx1ZShcbiAgICBcIi0tY29sb3JfYmFja2dyb3VuZF9kYXJrXCJcbiAgKTtcbn1cblxuY29uc3QgdGhlbWUgPSBjcmVhdGVUaGVtZSh7XG4gIHBhbGV0dGU6IHtcbiAgICBwcmltYXJ5OiB7XG4gICAgICBtYWluOiBkYXJrQ29sb3JcbiAgICB9XG4gIH1cbn0pO1xuXG5jb25zdCBDdXN0b21UaGVtZSA9ICh7IGNoaWxkcmVuIH0pID0+IChcbiAgPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3RoZW1lfT57Y2hpbGRyZW59PC9UaGVtZVByb3ZpZGVyPlxuKTtcblxuQ3VzdG9tVGhlbWUucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tVGhlbWU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1Hcm91cCxcbiAgRm9ybUhlbHBlclRleHQsXG4gIEZvcm1MYWJlbFxufSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgZ2V0TGFiZWwsIHRvU2x1ZyB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IENoZWNrYm94TGlzdFF1ZXN0aW9uRmllbGQgPSAoe1xuICBxdWVzdGlvbixcbiAgcXVlc3Rpb25DbGFzc05hbWUgPSBcIlwiLFxuICBpc0Rpc2FibGVkID0gZmFsc2UsXG4gIGNoaWxkcmVuLFxuICB2YWx1ZSxcbiAgb25DaGFuZ2UsXG4gIHNldEZpZWxkVmFsdWUsXG4gIGVycm9yLFxuICBoZWxwZXJUZXh0LFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uU2x1ZyA9IHRvU2x1ZyhxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbi5pZCk7XG4gIGNvbnN0IHF1ZXN0aW9uTGFiZWwgPSBnZXRMYWJlbChxdWVzdGlvbik7XG4gIGNvbnN0IGlzUmVxdWlyZWQgPSBxdWVzdGlvbi5tYW5kYXRvcnk7XG4gIGNvbnN0IHF1ZXN0aW9uTWF4VmFsdWVzID0gcXVlc3Rpb24ubWF4X3NlbGVjdGVkX3ZhbHVlcztcblxuICBjb25zdCBxdWVzdGlvbk9wdGlvbnMgPVxuICAgIHF1ZXN0aW9uLnZhbHVlcz8ubWFwKCh2YWwpID0+ICh7XG4gICAgICBsYWJlbDogdmFsLmxhYmVsLFxuICAgICAgdmFsdWU6IHZhbC5pZC50b1N0cmluZygpXG4gICAgfSkpIHx8IFtdO1xuXG4gIGNvbnN0IGhhbmRsZUNoZWNrYm94TGlzdENoYW5nZSA9IChjaGVja2VkLCB2YWwpID0+IHtcbiAgICBjb25zdCBjdXJyZW50QW5zID0gdmFsdWUgfHwgW107XG4gICAgY29uc3QgbWF4U2VsZWN0aW9uUmVhY2hlZCA9IGN1cnJlbnRBbnMubGVuZ3RoID09PSBxdWVzdGlvbk1heFZhbHVlcztcbiAgICBsZXQgbmV3VmFsdWU7XG5cbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgbmV3VmFsdWUgPSBtYXhTZWxlY3Rpb25SZWFjaGVkID8gY3VycmVudEFucyA6IFsuLi5jdXJyZW50QW5zLCB2YWxdO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWYWx1ZSA9IGN1cnJlbnRBbnMuZmlsdGVyKCh2KSA9PiB2ICE9PSB2YWwpO1xuICAgIH1cblxuICAgIHNldEZpZWxkVmFsdWUocXVlc3Rpb25TbHVnLCBuZXdWYWx1ZSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBrZXk9e3F1ZXN0aW9uU2x1Z31cbiAgICAgIGlkPXtgJHtxdWVzdGlvblNsdWd9X2NvbnRhaW5lcmB9XG4gICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uQ2xhc3NOYW1lfVxuICAgID5cbiAgICAgIDxGb3JtQ29udHJvbFxuICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICA+XG4gICAgICAgIDxGb3JtTGFiZWw+e3F1ZXN0aW9uTGFiZWx9PC9Gb3JtTGFiZWw+XG4gICAgICAgIHtlcnJvciAmJiA8Rm9ybUhlbHBlclRleHQ+e2hlbHBlclRleHQgPz8gXCIgXCJ9PC9Gb3JtSGVscGVyVGV4dD59XG4gICAgICAgIDxGb3JtR3JvdXA+XG4gICAgICAgICAge3F1ZXN0aW9uT3B0aW9ucy5tYXAoKG9wKSA9PiAoXG4gICAgICAgICAgICA8Rm9ybUNvbnRyb2xMYWJlbFxuICAgICAgICAgICAgICBrZXk9e29wLmxhYmVsfVxuICAgICAgICAgICAgICBuYW1lPXtxdWVzdGlvblNsdWd9XG4gICAgICAgICAgICAgIGNvbnRyb2w9e1xuICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17dmFsdWU/LmluY2x1ZGVzKG9wLnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXYpID0+XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZUNoZWNrYm94TGlzdENoYW5nZShldi50YXJnZXQuY2hlY2tlZCwgb3AudmFsdWUpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXByb3BzLW5vLXNwcmVhZGluZyAqL1xuICAgICAgICAgICAgICAgICAgey4uLnJlc3R9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYWJlbD17b3AubGFiZWx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L0Zvcm1Hcm91cD5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbkNoZWNrYm94TGlzdFF1ZXN0aW9uRmllbGQucHJvcFR5cGVzID0ge1xuICBxdWVzdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLmFycmF5LFxuICBxdWVzdGlvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIHNldEZpZWxkVmFsdWU6IFByb3BUeXBlcy5mdW5jLFxuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIGhlbHBlclRleHQ6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94TGlzdFF1ZXN0aW9uRmllbGQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQge1xuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1IZWxwZXJUZXh0XG59IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgUmF3SFRNTCBmcm9tIFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi9jb21wb25lbnRzL3Jhdy1odG1sXCI7XG5pbXBvcnQgeyBnZXRMYWJlbCwgdG9TbHVnIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuY29uc3QgQ2hlY2tib3hRdWVzdGlvbkZpZWxkID0gKHtcbiAgcXVlc3Rpb24sXG4gIHF1ZXN0aW9uQ2xhc3NOYW1lID0gXCJcIixcbiAgaXNEaXNhYmxlZCA9IGZhbHNlLFxuICBjaGlsZHJlbixcbiAgdmFsdWUsXG4gIGVycm9yLFxuICBoZWxwZXJUZXh0LFxuICBzZXRGaWVsZFZhbHVlLFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uU2x1ZyA9IHRvU2x1ZyhxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbi5pZCk7XG4gIGNvbnN0IHF1ZXN0aW9uTGFiZWwgPSBnZXRMYWJlbChxdWVzdGlvbik7XG4gIGNvbnN0IGlzUmVxdWlyZWQgPSBxdWVzdGlvbi5tYW5kYXRvcnk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBrZXk9e3F1ZXN0aW9uU2x1Z31cbiAgICAgIGlkPXtgJHtxdWVzdGlvblNsdWd9X2NvbnRhaW5lcmB9XG4gICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uQ2xhc3NOYW1lfVxuICAgID5cbiAgICAgIDxGb3JtQ29udHJvbCBmdWxsV2lkdGggZXJyb3I9e2Vycm9yfT5cbiAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBuYW1lPXtxdWVzdGlvblNsdWd9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9eyEhdmFsdWV9XG4gICAgICAgICAgICAgIGxhYmVsPXs8UmF3SFRNTD57cXVlc3Rpb25MYWJlbH08L1Jhd0hUTUw+fVxuICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXByb3BzLW5vLXNwcmVhZGluZyAqL1xuICAgICAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIGxhYmVsPXs8UmF3SFRNTD57cXVlc3Rpb25MYWJlbH08L1Jhd0hUTUw+fVxuICAgICAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICAvPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIHtlcnJvciAmJiA8Rm9ybUhlbHBlclRleHQ+e2hlbHBlclRleHQgPz8gXCIgXCJ9PC9Gb3JtSGVscGVyVGV4dD59XG4gICAgICA8L0Zvcm1Db250cm9sPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuQ2hlY2tib3hRdWVzdGlvbkZpZWxkLnByb3BUeXBlcyA9IHtcbiAgcXVlc3Rpb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5ib29sLFxuICBxdWVzdGlvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgc2V0RmllbGRWYWx1ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgaGVscGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3hRdWVzdGlvbkZpZWxkO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIElucHV0TGFiZWwsIE1lbnVJdGVtLCBTZWxlY3QgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgZ2V0TGFiZWwsIHRvU2x1ZyB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmNvbnN0IERyb3Bkb3duUXVlc3Rpb25GaWVsZCA9ICh7XG4gIHF1ZXN0aW9uLFxuICBxdWVzdGlvbkNsYXNzTmFtZSA9IFwiXCIsXG4gIGlzRGlzYWJsZWQgPSBmYWxzZSxcbiAgc2V0RmllbGRWYWx1ZSxcbiAgY2hpbGRyZW4sXG4gIGVycm9yLFxuICBoZWxwZXJUZXh0LFxuICAuLi5yZXN0XG59KSA9PiB7XG4gIGNvbnN0IHF1ZXN0aW9uU2x1ZyA9IHRvU2x1ZyhxdWVzdGlvbi5uYW1lLCBxdWVzdGlvbi5pZCk7XG4gIGNvbnN0IHF1ZXN0aW9uTGFiZWwgPSBnZXRMYWJlbChxdWVzdGlvbik7XG4gIGNvbnN0IGlzUmVxdWlyZWQgPSBxdWVzdGlvbi5tYW5kYXRvcnk7XG5cbiAgY29uc3QgcXVlc3Rpb25PcHRpb25zID1cbiAgICBxdWVzdGlvbi52YWx1ZXM/Lm1hcCgodmFsKSA9PiAoe1xuICAgICAgbGFiZWw6IHZhbC5sYWJlbCxcbiAgICAgIHZhbHVlOiB2YWwuaWRcbiAgICB9KSkgfHwgW107XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBrZXk9e3F1ZXN0aW9uU2x1Z31cbiAgICAgIGlkPXtgJHtxdWVzdGlvblNsdWd9X2NvbnRhaW5lcmB9XG4gICAgICBjbGFzc05hbWU9e3F1ZXN0aW9uQ2xhc3NOYW1lfVxuICAgID5cbiAgICAgIDxGb3JtQ29udHJvbFxuICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICA+XG4gICAgICAgIDxJbnB1dExhYmVsIGlkPXtgJHtxdWVzdGlvblNsdWd9X2xhYmVsYH0+e3F1ZXN0aW9uTGFiZWx9PC9JbnB1dExhYmVsPlxuICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgbGFiZWxJZD17YCR7cXVlc3Rpb25TbHVnfV9sYWJlbGB9XG4gICAgICAgICAgbmFtZT17cXVlc3Rpb25TbHVnfVxuICAgICAgICAgIGlkPXtxdWVzdGlvblNsdWd9XG4gICAgICAgICAgbGFiZWw9e3F1ZXN0aW9uTGFiZWx9XG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1wcm9wcy1uby1zcHJlYWRpbmcgKi9cbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgICBzdHlsZT17eyBtYXJnaW5Cb3R0b206IDIwIH19XG4gICAgICAgID5cbiAgICAgICAgICB7cXVlc3Rpb25PcHRpb25zLm1hcCgob3ApID0+IChcbiAgICAgICAgICAgIDxNZW51SXRlbSBrZXk9e29wLmxhYmVsfSB2YWx1ZT17b3AudmFsdWV9PlxuICAgICAgICAgICAgICB7b3AubGFiZWx9XG4gICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NlbGVjdD5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cbkRyb3Bkb3duUXVlc3Rpb25GaWVsZC5wcm9wVHlwZXMgPSB7XG4gIHF1ZXN0aW9uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHF1ZXN0aW9uQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpc0Rpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIGhlbHBlclRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNldEZpZWxkVmFsdWU6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBEcm9wZG93blF1ZXN0aW9uRmllbGQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQge1xuICBGb3JtQ29udHJvbCxcbiAgRm9ybUNvbnRyb2xMYWJlbCxcbiAgRm9ybUhlbHBlclRleHQsXG4gIEZvcm1MYWJlbCxcbiAgUmFkaW8sXG4gIFJhZGlvR3JvdXBcbn0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IGdldExhYmVsLCB0b1NsdWcgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBSYWRpb0xpc3RRdWVzdGlvbkZpZWxkID0gKHtcbiAgcXVlc3Rpb24sXG4gIHF1ZXN0aW9uQ2xhc3NOYW1lID0gXCJcIixcbiAgaXNEaXNhYmxlZCA9IGZhbHNlLFxuICBjaGlsZHJlbixcbiAgZXJyb3IsXG4gIGhlbHBlclRleHQsXG4gIHNldEZpZWxkVmFsdWUsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3QgcXVlc3Rpb25TbHVnID0gdG9TbHVnKHF1ZXN0aW9uLm5hbWUsIHF1ZXN0aW9uLmlkKTtcbiAgY29uc3QgcXVlc3Rpb25MYWJlbCA9IGdldExhYmVsKHF1ZXN0aW9uKTtcbiAgY29uc3QgaXNSZXF1aXJlZCA9IHF1ZXN0aW9uLm1hbmRhdG9yeTtcblxuICBjb25zdCBxdWVzdGlvbk9wdGlvbnMgPVxuICAgIHF1ZXN0aW9uLnZhbHVlcz8ubWFwKCh2YWwpID0+ICh7XG4gICAgICBsYWJlbDogdmFsLmxhYmVsLFxuICAgICAgdmFsdWU6IHZhbC5pZC50b1N0cmluZygpXG4gICAgfSkpIHx8IFtdO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAga2V5PXtxdWVzdGlvblNsdWd9XG4gICAgICBpZD17YCR7cXVlc3Rpb25TbHVnfV9jb250YWluZXJgfVxuICAgICAgY2xhc3NOYW1lPXtxdWVzdGlvbkNsYXNzTmFtZX1cbiAgICA+XG4gICAgICA8Rm9ybUNvbnRyb2xcbiAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgIHJlcXVpcmVkPXtpc1JlcXVpcmVkfVxuICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgPlxuICAgICAgICA8Rm9ybUxhYmVsIGlkPXtgJHtxdWVzdGlvblNsdWd9X2xhYmVsYH0+e3F1ZXN0aW9uTGFiZWx9PC9Gb3JtTGFiZWw+XG4gICAgICAgIHtlcnJvciAmJiA8Rm9ybUhlbHBlclRleHQ+e2hlbHBlclRleHQgPz8gXCIgXCJ9PC9Gb3JtSGVscGVyVGV4dD59XG4gICAgICAgIDxSYWRpb0dyb3VwXG4gICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtgJHtxdWVzdGlvblNsdWd9X2xhYmVsYH1cbiAgICAgICAgICBuYW1lPXtxdWVzdGlvblNsdWd9XG4gICAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2pzeC1wcm9wcy1uby1zcHJlYWRpbmcgKi9cbiAgICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgPlxuICAgICAgICAgIHtxdWVzdGlvbk9wdGlvbnMubWFwKChvcCkgPT4gKFxuICAgICAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICAgICAga2V5PXtvcC5sYWJlbH1cbiAgICAgICAgICAgICAgdmFsdWU9e29wLnZhbHVlfVxuICAgICAgICAgICAgICBjb250cm9sPXs8UmFkaW8gLz59XG4gICAgICAgICAgICAgIGxhYmVsPXtvcC5sYWJlbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvUmFkaW9Hcm91cD5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9Gb3JtQ29udHJvbD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cblJhZGlvTGlzdFF1ZXN0aW9uRmllbGQucHJvcFR5cGVzID0ge1xuICBxdWVzdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBxdWVzdGlvbkNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaXNEaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICBoZWxwZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzZXRGaWVsZFZhbHVlOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUmFkaW9MaXN0UXVlc3Rpb25GaWVsZDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEZvcm1Hcm91cCwgVGV4dEZpZWxkIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IGdldExhYmVsLCB0b1NsdWcgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG5jb25zdCBUZXh0UXVlc3Rpb25GaWVsZCA9ICh7XG4gIHF1ZXN0aW9uLFxuICBxdWVzdGlvbkNsYXNzTmFtZSA9IFwiXCIsXG4gIGlzRGlzYWJsZWQgPSBmYWxzZSxcbiAgY2hpbGRyZW4sXG4gIHNldEZpZWxkVmFsdWUsXG4gIC4uLnJlc3Rcbn0pID0+IHtcbiAgY29uc3QgcXVlc3Rpb25TbHVnID0gdG9TbHVnKHF1ZXN0aW9uLm5hbWUsIHF1ZXN0aW9uLmlkKTtcbiAgY29uc3QgcXVlc3Rpb25MYWJlbCA9IGdldExhYmVsKHF1ZXN0aW9uKTtcbiAgY29uc3QgaXNSZXF1aXJlZCA9IHF1ZXN0aW9uLm1hbmRhdG9yeTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGtleT17cXVlc3Rpb25TbHVnfVxuICAgICAgaWQ9e2Ake3F1ZXN0aW9uU2x1Z31fY29udGFpbmVyYH1cbiAgICAgIGNsYXNzTmFtZT17cXVlc3Rpb25DbGFzc05hbWV9XG4gICAgPlxuICAgICAgPEZvcm1Hcm91cD5cbiAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgIG5hbWU9e3F1ZXN0aW9uU2x1Z31cbiAgICAgICAgICBsYWJlbD17cXVlc3Rpb25MYWJlbH1cbiAgICAgICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICByZXF1aXJlZD17aXNSZXF1aXJlZH1cbiAgICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXByb3BzLW5vLXNwcmVhZGluZyAqL1xuICAgICAgICAgIHsuLi5yZXN0fVxuICAgICAgICAvPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0Zvcm1Hcm91cD5cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cblRleHRRdWVzdGlvbkZpZWxkLnByb3BUeXBlcyA9IHtcbiAgcXVlc3Rpb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgcXVlc3Rpb25DbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIHNldEZpZWxkVmFsdWU6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0UXVlc3Rpb25GaWVsZDtcbiIsImltcG9ydCB7XG4gIFF1ZXN0aW9uVHlwZV9DaGVja2JveCxcbiAgUXVlc3Rpb25UeXBlX0NoZWNrQm94TGlzdCxcbiAgUXVlc3Rpb25UeXBlX0NvbWJvQm94LFxuICBRdWVzdGlvblR5cGVfQ291bnRyeUNvbWJvQm94LFxuICBRdWVzdGlvblR5cGVfUmFkaW9CdXR0b25MaXN0XG59IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IGNoZWNrUnVsZSA9ICh2YWx1ZSwgcnVsZSkgPT4ge1xuICBjb25zdCB2YWx1ZXMgPSBydWxlLmFuc3dlcl92YWx1ZXM7XG5cbiAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmICghdmFsdWUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgbGV0IHJlcyA9IHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gXCJBbmRcIjtcbiAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgaWYgKHJ1bGUuYW5zd2VyX3ZhbHVlc19vcGVyYXRvciA9PT0gXCJBbmRcIikge1xuICAgICAgICByZXMgPSByZXMgJiYgdmFsdWUuaW5jbHVkZXModik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBPclxuICAgICAgICByZXMgPSByZXMgfHwgdmFsdWUuaW5jbHVkZXModik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICByZXR1cm4gdmFsdWVzLmluY2x1ZGVzKHZhbHVlPy50b1N0cmluZygpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja1Zpc2liaWxpdHkgPSAocnVsZSwgcnVsZVJlc3VsdCwgY2hpbGRyZW4pID0+IHtcbiAgaWYgKHJ1bGUudmlzaWJpbGl0eSA9PT0gXCJWaXNpYmxlXCIpIHtcbiAgICBpZiAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gXCJFcXVhbFwiKSB7XG4gICAgICBpZiAocnVsZVJlc3VsdCkgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIE5vbiBFcXVhbFxuICAgIGlmICghcnVsZVJlc3VsdCkge1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBub3QgdmlzaWJsZVxuICBpZiAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gXCJFcXVhbFwiKSB7XG4gICAgaWYgKCFydWxlUmVzdWx0KSByZXR1cm4gY2hpbGRyZW47XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKHJ1bGVSZXN1bHQpIHJldHVybiBjaGlsZHJlbjtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdG9TbHVnID0gKHRleHQsIHF1ZXN0aW9uSWQpID0+IHtcbiAgY29uc3QgdGV4dExDID0gdGV4dC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gYCR7dGV4dExDLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgXCJfXCIpfV8ke3F1ZXN0aW9uSWR9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMYWJlbCA9IChxKSA9PlxuICAvLyByZXBsYWNlIGxpbmUgYnJlYWtzIGFuZCByZW1vdmUgb3V0ZXIgPHA+XG4gIHE/LmxhYmVsPy5yZXBsYWNlKC9cXG4vZywgXCIgXCIpLnJlcGxhY2UoLzxwPiguKik8XFwvcD4vZ2ksIFwiJDFcIik7XG5cbmV4cG9ydCBjb25zdCBpc0Fuc3dlcmVkID0gKGFuc3dlcikgPT4ge1xuICBpZiAoIWFuc3dlcikgcmV0dXJuIGZhbHNlO1xuICAvLyBjaGVjayB0eXBlXG4gIGlmIChBcnJheS5pc0FycmF5KGFuc3dlcikpIHJldHVybiBhbnN3ZXIubGVuZ3RoID4gMDtcbiAgaWYgKHR5cGVvZiBhbnN3ZXIgPT09IFwic3RyaW5nXCIpIHJldHVybiBhbnN3ZXIubGVuZ3RoID4gMDtcbiAgaWYgKHR5cGVvZiBhbnN3ZXIgPT09IFwibnVtYmVyXCIpIHJldHVybiBhbnN3ZXIgPiAwO1xuICBpZiAodHlwZW9mIGFuc3dlciA9PT0gXCJib29sZWFuXCIpIHJldHVybiBhbnN3ZXI7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja0lmVmFsdWVNYXRjaCA9IChhbnN3ZXIsIGNvbXBhcmVWYWwpID0+IHtcbiAgY29uc3QgYW5zd2VyQXJyYXkgPSBBcnJheS5pc0FycmF5KGFuc3dlcikgPyBhbnN3ZXIgOiBbYW5zd2VyXTtcblxuICByZXR1cm4gYW5zd2VyQXJyYXkuc29tZSgodikgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbXBhcmVWYWwpKSB7XG4gICAgICByZXR1cm4gY29tcGFyZVZhbC5pbmNsdWRlcyh2KTtcbiAgICB9XG4gICAgcmV0dXJuIHYgPT09IGNvbXBhcmVWYWw7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFR5cGVJbml0aWFsVmFsdWUgPSAocSkgPT4ge1xuICBzd2l0Y2ggKHEudHlwZSkge1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NoZWNrYm94OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX1JhZGlvQnV0dG9uTGlzdDpcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NoZWNrQm94TGlzdDpcbiAgICAgIHJldHVybiBbXTtcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3g6XG4gICAgY2FzZSBRdWVzdGlvblR5cGVfQ29tYm9Cb3g6XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlVmFsdWUgPSAoYW5zLCB0eXBlKSA9PiB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NoZWNrYm94OlxuICAgICAgcmV0dXJuIGFucyA9PT0gXCJ0cnVlXCI7XG4gICAgY2FzZSBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0OlxuICAgICAgcmV0dXJuIGFucz8uc3BsaXQoXCIsXCIpIHx8IFtdO1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NvdW50cnlDb21ib0JveDpcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9Db21ib0JveDpcbiAgICAgIHJldHVybiBhbnMgfHwgXCJcIjtcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3Q6XG4gICAgICByZXR1cm4gYW5zIHx8IG51bGw7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBhbnM7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1BbndlcnNGb3JtYXQgPSAoYW5zd2VycykgPT4ge1xuICBjb25zdCB7XG4gICAgYXR0ZW5kZWVfZW1haWwsXG4gICAgYXR0ZW5kZWVfZmlyc3RfbmFtZSxcbiAgICBhdHRlbmRlZV9sYXN0X25hbWUsXG4gICAgYXR0ZW5kZWVfY29tcGFueSxcbiAgICBkaXNjbGFpbWVyX2FjY2VwdGVkLFxuICAgIC4uLmV4dHJhX3F1ZXN0aW9uc1xuICB9ID0gYW5zd2VycztcblxuICBjb25zdCBmb3JtYXR0ZWRFUSA9IE9iamVjdC5lbnRyaWVzKGV4dHJhX3F1ZXN0aW9ucykubWFwKChba2V5LCB2YWx1ZV0pID0+ICh7XG4gICAgcXVlc3Rpb25faWQ6IHBhcnNlSW50KGtleS5zcGxpdChcIl9cIikucG9wKCksIDEwKSxcbiAgICBhbnN3ZXI6IHZhbHVlLnRvU3RyaW5nKClcbiAgfSkpO1xuXG4gIHJldHVybiB7XG4gICAgYXR0ZW5kZWVfZW1haWwsXG4gICAgYXR0ZW5kZWVfZmlyc3RfbmFtZSxcbiAgICBhdHRlbmRlZV9sYXN0X25hbWUsXG4gICAgYXR0ZW5kZWVfY29tcGFueSxcbiAgICBkaXNjbGFpbWVyX2FjY2VwdGVkLFxuICAgIGV4dHJhX3F1ZXN0aW9uczogZm9ybWF0dGVkRVFcbiAgfTtcbn07XG4iLCJleHBvcnQgY29uc3QgUXVlc3Rpb25UeXBlX1RleHQgPSBcIlRleHRcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfVGV4dEFyZWEgPSBcIlRleHRBcmVhXCI7XG5leHBvcnQgY29uc3QgUXVlc3Rpb25UeXBlX0NoZWNrYm94ID0gXCJDaGVja0JveFwiO1xuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3QgPSBcIlJhZGlvQnV0dG9uTGlzdFwiO1xuZXhwb3J0IGNvbnN0IFF1ZXN0aW9uVHlwZV9Db21ib0JveCA9IFwiQ29tYm9Cb3hcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0ID0gXCJDaGVja0JveExpc3RcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfQ291bnRyeUNvbWJvQm94ID0gXCJDb3VudHJ5Q29tYm9Cb3hcIjtcbmV4cG9ydCBjb25zdCBRdWVzdGlvblR5cGVfUmFkaW9CdXR0b24gPSBcIlJhZGlvQnV0dG9uXCI7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5cbmltcG9ydCB7XG4gIHRvU2x1ZyxcbiAgaXNBbnN3ZXJlZCxcbiAgY2hlY2tWaXNpYmlsaXR5LFxuICBjaGVja1J1bGVcbn0gZnJvbSBcIi4vY29tcG9uZW50cy91dGlsc1wiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25UeXBlX0NoZWNrYm94LFxuICBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0LFxuICBRdWVzdGlvblR5cGVfQ29tYm9Cb3gsXG4gIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3gsXG4gIFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3QsXG4gIFF1ZXN0aW9uVHlwZV9UZXh0LFxuICBRdWVzdGlvblR5cGVfVGV4dEFyZWFcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgVGV4dFF1ZXN0aW9uRmllbGQgZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0UXVlc3Rpb25GaWVsZFwiO1xuaW1wb3J0IENoZWNrYm94UXVlc3Rpb25GaWVsZCBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94UXVlc3Rpb25GaWVsZFwiO1xuaW1wb3J0IFJhZGlvTGlzdFF1ZXN0aW9uRmllbGQgZnJvbSBcIi4vY29tcG9uZW50cy9SYWRpb0xpc3RRdWVzdGlvbkZpZWxkXCI7XG5pbXBvcnQgQ2hlY2tib3hMaXN0UXVlc3Rpb25GaWVsZCBmcm9tIFwiLi9jb21wb25lbnRzL0NoZWNrYm94TGlzdFF1ZXN0aW9uRmllbGRcIjtcbmltcG9ydCBEcm9wZG93blF1ZXN0aW9uRmllbGQgZnJvbSBcIi4vY29tcG9uZW50cy9Ecm9wZG93blF1ZXN0aW9uRmllbGRcIjtcblxuY29uc3QgZ2V0UXVlc3Rpb25GaWVsZENvbXBvbmVudCA9IChxdWVzdGlvblR5cGUpID0+IHtcbiAgc3dpdGNoIChxdWVzdGlvblR5cGUpIHtcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9UZXh0QXJlYTpcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9UZXh0OiB7XG4gICAgICByZXR1cm4gVGV4dFF1ZXN0aW9uRmllbGQ7XG4gICAgfVxuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NoZWNrYm94OiB7XG4gICAgICByZXR1cm4gQ2hlY2tib3hRdWVzdGlvbkZpZWxkO1xuICAgIH1cbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3Q6IHtcbiAgICAgIHJldHVybiBSYWRpb0xpc3RRdWVzdGlvbkZpZWxkO1xuICAgIH1cbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9DaGVja0JveExpc3Q6IHtcbiAgICAgIHJldHVybiBDaGVja2JveExpc3RRdWVzdGlvbkZpZWxkO1xuICAgIH1cbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3g6XG4gICAgY2FzZSBRdWVzdGlvblR5cGVfQ29tYm9Cb3g6IHtcbiAgICAgIHJldHVybiBEcm9wZG93blF1ZXN0aW9uRmllbGQ7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBSZWFjdC5GcmFnbWVudDtcbiAgICB9XG4gIH1cbn07XG5cbmNvbnN0IEV4dHJhUXVlc3Rpb25zRmllbGRzID0gKHtcbiAgZXh0cmFRdWVzdGlvbnMsXG4gIGNsYXNzTmFtZSA9IFwiZXh0cmFRdWVzdGlvbnNcIixcbiAgcXVlc3Rpb25DbGFzc05hbWUgPSBcImV4dHJhUXVlc3Rpb25cIixcbiAgcmVhZE9ubHkgPSBmYWxzZSxcbiAgYWxsb3dFZGl0ID0gdHJ1ZSxcbiAgZm9ybWlrXG59KSA9PiB7XG4gIGNvbnN0IHJlbmRlclJ1bGUgPSAocnVsZSwgcXVlc3Rpb25TbHVnKSA9PlxuICAgIGNoZWNrVmlzaWJpbGl0eShcbiAgICAgIHJ1bGUsXG4gICAgICBjaGVja1J1bGUoZm9ybWlrLnZhbHVlc1txdWVzdGlvblNsdWddLCBydWxlKSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgcmVuZGVyUXVlc3Rpb24ocnVsZS5zdWJfcXVlc3Rpb24pXG4gICAgKTtcblxuICBjb25zdCByZW5kZXJRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgY29uc3QgcXVlc3Rpb25TbHVnID0gdG9TbHVnKHEubmFtZSwgcS5pZCk7XG4gICAgLy8gZGlzYWJsZSBmaWVsZCBpZiBlZGl0IGlzbid0IGFsbG93ZWQgYW5kIHRoZSBxdWVzdGlvbnMgaXMgYW5zd2VyZWRcbiAgICBjb25zdCBpc0Rpc2FibGVkID1cbiAgICAgICghYWxsb3dFZGl0ICYmIGlzQW5zd2VyZWQoZm9ybWlrLnZhbHVlc1txdWVzdGlvblNsdWddKSkgfHwgcmVhZE9ubHk7XG4gICAgY29uc3QgUXVlc3Rpb25GaWVsZENvbXBvbmVudCA9IGdldFF1ZXN0aW9uRmllbGRDb21wb25lbnQocS50eXBlKTtcblxuICAgIGNvbnN0IGZvcm1pa1Byb3BzID0ge1xuICAgICAgdmFsdWU6IGZvcm1pay52YWx1ZXNbcXVlc3Rpb25TbHVnXSxcbiAgICAgIG9uQ2hhbmdlOiBmb3JtaWsuaGFuZGxlQ2hhbmdlLFxuICAgICAgb25CbHVyOiBmb3JtaWsuaGFuZGxlQmx1cixcbiAgICAgIGVycm9yOlxuICAgICAgICBmb3JtaWsudG91Y2hlZFtxdWVzdGlvblNsdWddICYmIEJvb2xlYW4oZm9ybWlrLmVycm9yc1txdWVzdGlvblNsdWddKSxcbiAgICAgIGhlbHBlclRleHQ6IGZvcm1pay50b3VjaGVkW3F1ZXN0aW9uU2x1Z10gJiYgZm9ybWlrLmVycm9yc1txdWVzdGlvblNsdWddLFxuICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybWlrLnNldEZpZWxkVmFsdWVcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxRdWVzdGlvbkZpZWxkQ29tcG9uZW50XG4gICAgICAgIGtleT17cXVlc3Rpb25TbHVnfVxuICAgICAgICBxdWVzdGlvbj17cX1cbiAgICAgICAgcXVlc3Rpb25DbGFzc05hbWU9e3F1ZXN0aW9uQ2xhc3NOYW1lfVxuICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXByb3BzLW5vLXNwcmVhZGluZyAqL1xuICAgICAgICB7Li4uZm9ybWlrUHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubWFwKChydWxlKSA9PiByZW5kZXJSdWxlKHJ1bGUsIHF1ZXN0aW9uU2x1ZykpfVxuICAgICAgPC9RdWVzdGlvbkZpZWxkQ29tcG9uZW50PlxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PntleHRyYVF1ZXN0aW9ucy5tYXAocmVuZGVyUXVlc3Rpb24pfTwvZGl2Pjtcbn07XG5cbkV4dHJhUXVlc3Rpb25zRmllbGRzLnByb3BUeXBlcyA9IHtcbiAgZXh0cmFRdWVzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHF1ZXN0aW9uQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhbGxvd0VkaXQ6IFByb3BUeXBlcy5ib29sLFxuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEV4dHJhUXVlc3Rpb25zRmllbGRzO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgU3RhY2sgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvU3RhY2tcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IEFkYXB0ZXJEYXlqcyB9IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzL0FkYXB0ZXJEYXlqc1wiO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uUHJvdmlkZXIgfSBmcm9tIFwiQG11aS94LWRhdGUtcGlja2Vycy9Mb2NhbGl6YXRpb25Qcm92aWRlclwiO1xuaW1wb3J0IHsgRGF0ZVBpY2tlciB9IGZyb20gXCJAbXVpL3gtZGF0ZS1waWNrZXJzL0RhdGVQaWNrZXJcIjtcbmltcG9ydCBDbG9zZUljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2VcIjtcbmltcG9ydCB7IEZJTFRFUl9WQVJfREFURSB9IGZyb20gXCIuLi8uLi9hY3Rpb25zXCI7XG5pbXBvcnQgeyBnZXRFcG9jaExvd2VyVXBwZXJJblNlY29uZHMgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmFzaWNEYXRlUGlja2VyKHsgb25GaWx0ZXIsIG9uUmVzZXQgfSkge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gIGNvbnN0IFtkYXRlVmFsdWUsIHNldERhdGVWYWx1ZV0gPSB1c2VTdGF0ZShub3cpO1xuICBjb25zdCBvbkRhdGVDaGFuZ2UgPSAodmFsKSA9PiB7XG4gICAgc2V0RGF0ZVZhbHVlKHZhbCk7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbC4kZCk7XG4gICAgY29uc3QgeyBsb3dlciwgdXBwZXIgfSA9IGdldEVwb2NoTG93ZXJVcHBlckluU2Vjb25kcyhkYXRlKTtcbiAgICBvbkZpbHRlcih7XG4gICAgICB0eXBlOiBGSUxURVJfVkFSX0RBVEUsXG4gICAgICBuYW1lOiBcImNyZWF0ZWRcIixcbiAgICAgIGRhdGUsXG4gICAgICBsb3dlcixcbiAgICAgIHVwcGVyXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IG9uUmVzZXRBY3Rpb24gPSAoKSA9PiB7XG4gICAgb25SZXNldCgpO1xuICAgIHNldERhdGVWYWx1ZShub3cpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmZpbHRlckRhdGVMYWJlbH0+e3QoXCJmaWx0ZXIucHVyY2hhc2VkX29uXCIpfTwvZGl2PlxuICAgICAgPFN0YWNrXG4gICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBkaXJlY3Rpb249XCJyb3dcIlxuICAgICAgICBzeD17eyBwdDogMiwgcGI6IDIgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuZGF0ZVBpY2tlckNvbnRhaW5lcn1cbiAgICAgID5cbiAgICAgICAgPENsb3NlSWNvblxuICAgICAgICAgIGZvbnRTaXplPVwibGFyZ2VcIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmRhdGVwaWNrZXJDbG9zZX1cbiAgICAgICAgICBvbkNsaWNrPXtvblJlc2V0QWN0aW9ufVxuICAgICAgICAvPlxuICAgICAgICA8TG9jYWxpemF0aW9uUHJvdmlkZXIgZGF0ZUFkYXB0ZXI9e0FkYXB0ZXJEYXlqc30+XG4gICAgICAgICAgPERhdGVQaWNrZXJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNhbGVuZGFyRGlzcGxheX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkRhdGVDaGFuZ2V9XG4gICAgICAgICAgICB2YWx1ZT17ZGF0ZVZhbHVlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvTG9jYWxpemF0aW9uUHJvdmlkZXI+XG4gICAgICA8L1N0YWNrPlxuICAgIDwvPlxuICApO1xufVxuXG5CYXNpY0RhdGVQaWNrZXIucHJvcFR5cGVzID0ge1xuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUmVzZXQ6IFByb3BUeXBlcy5mdW5jXG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IFN0YWNrIGZyb20gXCJAbXVpL21hdGVyaWFsL1N0YWNrXCI7XG5pbXBvcnQgRmlsdGVyTGlzdEljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvRmlsdGVyTGlzdFwiO1xuaW1wb3J0IHsgQm94IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCBCYXNpY0RhdGVQaWNrZXIgZnJvbSBcIi4vRGF0ZXBpY2tlclwiO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5mdW5jdGlvbiBGaWx0ZXIoeyBvbkZpbHRlciwgb25SZXNldCB9KSB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW3Nob3dGaWx0ZXJMaXN0LCBzZXRTaG93RmlsdGVyTGlzdF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzaG93RGF0ZXBpY2tlciwgc2V0U2hvd0RhdGVwaWNrZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbZmlsdGVyTnVtQWN0aXZlLCBzZXRGaWx0ZXJOdW1BY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBmaWx0ZXJSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZUZpbHRlckNsaWNrT3V0c2lkZSA9IChldmVudCkgPT4ge1xuICAgIGlmIChmaWx0ZXJSZWYuY3VycmVudCAmJiAhZmlsdGVyUmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgaWYgKHNob3dGaWx0ZXJMaXN0KSB7XG4gICAgICAgIHNldFNob3dGaWx0ZXJMaXN0KGZhbHNlKTtcbiAgICAgICAgc2V0U2hvd0RhdGVwaWNrZXIoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlRmlsdGVyQ2xpY2tPdXRzaWRlLCBmYWxzZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVGaWx0ZXJDbGlja091dHNpZGUsIGZhbHNlKTtcbiAgICB9O1xuICB9LCBbc2hvd0ZpbHRlckxpc3RdKTtcblxuICBjb25zdCB0b2dnbGUgPSAoKSA9PiB7XG4gICAgc2V0U2hvd0ZpbHRlckxpc3QoIXNob3dGaWx0ZXJMaXN0KTtcbiAgICBzZXRTaG93RGF0ZXBpY2tlcighc2hvd0RhdGVwaWNrZXIpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuZmlsdGVyQ29udGFpbmVyfSByZWY9e2ZpbHRlclJlZn0+XG4gICAgICA8U3RhY2tcbiAgICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICAgIGRpcmVjdGlvbj1cInJvd1wiXG4gICAgICAgIHN4PXt7IHB0OiAyLCBwYjogMiB9fVxuICAgICAgICBvbkNsaWNrPXt0b2dnbGV9XG4gICAgICA+XG4gICAgICAgIDxGaWx0ZXJMaXN0SWNvbiBmb250U2l6ZT1cImxhcmdlXCIgY2xhc3NOYW1lPXtzdHlsZXMuZmlsdGVySWNvbn0gLz5cbiAgICAgICAgey8qKiBjdXJyZW50bHkganVzdCBzaG93aW5nIFwiMVwiIGJlY2F1c2Ugd2UncmUgY3VycmVudGx5IG9ubHkgZmlsdGVyaW5nIG9uZSBjcml0ZXJpYSAtIGNyZWF0ZWQgZGF0ZSAqL31cbiAgICAgICAge2ZpbHRlck51bUFjdGl2ZSAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmZpbHRlck51bUFjdGl2ZX0+MTwvZGl2Pn1cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuZmlsdGVyTGFiZWx9Pnt0KFwiZmlsdGVyLmZpbHRlclwiKX08L3NwYW4+XG4gICAgICA8L1N0YWNrPlxuICAgICAgPEJveFxuICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5maWx0ZXJMaXN0Q29udGFpbmVyfSAke3N0eWxlcy5jb250YWluZXJ9ICR7XG4gICAgICAgICAgc2hvd0ZpbHRlckxpc3QgPyBzdHlsZXMuc2hvd0RhdGVQaWNrZXIgOiBcIlwiXG4gICAgICAgIH1gfVxuICAgICAgPlxuICAgICAgICA8QmFzaWNEYXRlUGlja2VyXG4gICAgICAgICAgb25SZXNldD17KCkgPT4ge1xuICAgICAgICAgICAgb25SZXNldCgpO1xuICAgICAgICAgICAgc2V0RmlsdGVyTnVtQWN0aXZlKGZhbHNlKTtcbiAgICAgICAgICAgIHRvZ2dsZSgpO1xuICAgICAgICAgIH19XG4gICAgICAgICAgb25GaWx0ZXI9eyhmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIG9uRmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgICBzZXRGaWx0ZXJOdW1BY3RpdmUodHJ1ZSk7XG4gICAgICAgICAgfX1cbiAgICAgICAgLz5cbiAgICAgIDwvQm94PlxuICAgIDwvQm94PlxuICApO1xufVxuXG5GaWx0ZXIucHJvcFR5cGVzID0ge1xuICBvbkZpbHRlcjogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZpbHRlcjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgc3R5bGVkIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvc3R5bGVzXCI7XG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwiQG11aS9pY29ucy1tYXRlcmlhbC9TZWFyY2hcIjtcbmltcG9ydCBDbG9zZUljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2VcIjtcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSBcIkBtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlXCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgRklMVEVSX1ZBUl9PUkRFUl9OVU1CRVIgfSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xuXG5jb25zdCBTZWFyY2hDb250YWluZXIgPSBzdHlsZWQoXCJkaXZcIikoKCkgPT4gKHtcbiAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgbWFyZ2luUmlnaHQ6IFwiMFwiLFxuICBtYXJnaW5MZWZ0OiBcIjBcIixcbiAgd2lkdGg6IFwiMTAwJVwiLFxuICBkaXNwbGF5OiBcImJsb2NrXCJcbn0pKTtcbmNvbnN0IFNlYXJjaEljb25XcmFwcGVyID0gc3R5bGVkKFwiZGl2XCIpKCgpID0+ICh7XG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gIGRpc3BsYXk6IFwiZmxleFwiLFxuICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIlxufSkpO1xuY29uc3QgU3R5bGVkSW5wdXRCYXNlID0gc3R5bGVkKElucHV0QmFzZSkoKCkgPT4gKHtcbiAgY29sb3I6IFwiaW5oZXJpdFwiLFxuICBib3JkZXJCb3R0b206IFwiMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC40MilcIixcbiAgcGFkZGluZ0xlZnQ6IFwiMjVweFwiLFxuICBwYWRkaW5nUmlnaHQ6IFwiMjVweFwiLFxuICBmb250U2l6ZTogXCIxZW1cIlxufSkpO1xuY29uc3QgQ2xvc2VJY29uV3JhcHBlciA9IHN0eWxlZChDbG9zZUljb24pKCgpID0+ICh7XG4gIHBhZGRpbmc6IFwiMnB4XCIsXG4gIGZvbnRTaXplOiBcIjEuNWVtXCIsXG4gIGhlaWdodDogXCIxMDAlXCIsXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gIHRvcDogXCIwXCIsXG4gIHJpZ2h0OiBcIjBcIixcbiAgZGlzcGxheTogXCJmbGV4XCIsXG4gIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICB6SW5kZXg6IFwiMTAwMFwiXG59KSk7XG5cbmZ1bmN0aW9uIFNlYXJjaCh7IG9uU2VhcmNoLCBvblJlc2V0IH0pIHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbc2hvd0Nsb3NlLCBzZXRTaG93Q2xvc2VdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2VhcmNoVmFsdWUsIHNldFNlYXJjaFZhbHVlXSA9IHVzZVN0YXRlKFwiXCIpO1xuICBjb25zdCBvbktleURvd24gPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBrZXksXG4gICAgICBuYXRpdmVFdmVudDoge1xuICAgICAgICB0YXJnZXQ6IHsgdmFsdWUgfVxuICAgICAgfVxuICAgIH0gPSBldmVudDtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9uU2VhcmNoKHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWU6IFwibnVtYmVyXCIsXG4gICAgICAgIHR5cGU6IEZJTFRFUl9WQVJfT1JERVJfTlVNQkVSXG4gICAgICB9KTtcbiAgICAgIHNldFNob3dDbG9zZSh0cnVlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJlc2V0U2VhcmNoID0gKCkgPT4ge1xuICAgIHNldFNlYXJjaFZhbHVlKFwiXCIpO1xuICAgIHNldFNob3dDbG9zZShmYWxzZSk7XG4gICAgb25SZXNldCgpO1xuICB9O1xuICByZXR1cm4gKFxuICAgIDxCb3g+XG4gICAgICA8U2VhcmNoQ29udGFpbmVyPlxuICAgICAgICB7c2hvd0Nsb3NlICYmIChcbiAgICAgICAgICA8Q2xvc2VJY29uV3JhcHBlciBvbkNsaWNrPXtyZXNldFNlYXJjaH0+XG4gICAgICAgICAgICA8Q2xvc2VJY29uIC8+XG4gICAgICAgICAgPC9DbG9zZUljb25XcmFwcGVyPlxuICAgICAgICApfVxuICAgICAgICA8U2VhcmNoSWNvbldyYXBwZXI+XG4gICAgICAgICAgPFNlYXJjaEljb24gLz5cbiAgICAgICAgPC9TZWFyY2hJY29uV3JhcHBlcj5cbiAgICAgICAgPFN0eWxlZElucHV0QmFzZVxuICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KFwib3JkZXJfc2VhcmNoLm9yZGVyX251bWJlclwiKX1cbiAgICAgICAgICBpbnB1dFByb3BzPXt7IFwiYXJpYS1sYWJlbFwiOiBcInNlYXJjaFwiIH19XG4gICAgICAgICAgdmFsdWU9e3NlYXJjaFZhbHVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0U2VhcmNoVmFsdWUoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAvPlxuICAgICAgPC9TZWFyY2hDb250YWluZXI+XG4gICAgPC9Cb3g+XG4gICk7XG59XG5cblNlYXJjaC5wcm9wVHlwZXMgPSB7XG4gIG9uU2VhcmNoOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25SZXNldDogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlYXJjaDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBTdGFjayBmcm9tIFwiQG11aS9tYXRlcmlhbC9TdGFja1wiO1xuaW1wb3J0IHsgQm94LCBCdXR0b24gfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IEltcG9ydEV4cG9ydEljb24gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvSW1wb3J0RXhwb3J0XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmZ1bmN0aW9uIFNvcnQoeyBvblNvcnQgfSkge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IFtzaG93U29ydCwgc2V0U2hvd1NvcnRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBzb3J0UmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVTb3J0Q2xpY2tPdXRzaWRlID0gKGV2ZW50KSA9PiB7XG4gICAgaWYgKHNvcnRSZWYuY3VycmVudCAmJiAhc29ydFJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHNldFNob3dTb3J0KGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZVNvcnRDbGlja091dHNpZGUsIGZhbHNlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZVNvcnRDbGlja091dHNpZGUsIGZhbHNlKTtcbiAgICB9O1xuICB9LCBbc2hvd1NvcnRdKTtcblxuICBjb25zdCB0b2dnbGUgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1NvcnQoIXNob3dTb3J0KTtcbiAgfTtcbiAgcmV0dXJuIChcbiAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLnNvcnRDb250YWluZXJ9IG9uQ2xpY2s9e3RvZ2dsZX0+XG4gICAgICA8U3RhY2tcbiAgICAgICAgcmVmPXtzb3J0UmVmfVxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgZGlyZWN0aW9uPVwicm93XCJcbiAgICAgICAgc3g9e3sgcHQ6IDIsIHBiOiAyIH19XG4gICAgICA+XG4gICAgICAgIDxJbXBvcnRFeHBvcnRJY29uIGZvbnRTaXplPVwibGFyZ2VcIiBjbGFzc05hbWU9e3N0eWxlcy5zb3J0SWNvbn0gLz5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc29ydExhYmVsfT57dChcInNvcnQuc29ydFwiKX08L3NwYW4+XG4gICAgICA8L1N0YWNrPlxuICAgICAge3Nob3dTb3J0ICYmIChcbiAgICAgICAgPEJveCBjbGFzc05hbWU9e2Ake3N0eWxlcy5zb3J0TGlzdENvbnRhaW5lcn0gJHtzdHlsZXMuY29udGFpbmVyfWB9PlxuICAgICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9IG9uQ2xpY2s9eygpID0+IG9uU29ydChcImRlc2NcIil9PlxuICAgICAgICAgICAge3QoXCJzb3J0Lm5ld19maXJzdFwiKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfSBvbkNsaWNrPXsoKSA9PiBvblNvcnQoXCJhc2NcIil9PlxuICAgICAgICAgICAge3QoXCJzb3J0Lm9sZF9maXJzdFwiKX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuICAgIDwvQm94PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTb3J0O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgR3JpZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCIuL0ZpbHRlclwiO1xuaW1wb3J0IFNvcnQgZnJvbSBcIi4vU29ydFwiO1xuaW1wb3J0IFNlYXJjaCBmcm9tIFwiLi9TZWFyY2hcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuZnVuY3Rpb24gRmlsdGVyU29ydFNlYXJjaCh7IG9uRmlsdGVyLCBvblNvcnQsIG9uU2VhcmNoLCBvblJlc2V0IH0pIHtcbiAgcmV0dXJuIChcbiAgICA8R3JpZCBjb250YWluZXIganVzdGlmeT1cImZsZXgtZW5kXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgPEdyaWRcbiAgICAgICAgaXRlbVxuICAgICAgICB4cz17Nn1cbiAgICAgICAgY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmc9ezF9XG4gICAgICAgIGdhcD17Mn1cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuZmlsdGVyU29ydENvbnRhaW5lcn1cbiAgICAgICAgc3g9e3sgcHQ6IDIsIHBiOiAyIH19XG4gICAgICA+XG4gICAgICAgIDxHcmlkIGl0ZW0+XG4gICAgICAgICAgPEZpbHRlciBvbkZpbHRlcj17b25GaWx0ZXJ9IG9uUmVzZXQ9e29uUmVzZXR9IC8+XG4gICAgICAgIDwvR3JpZD5cbiAgICAgICAgPEdyaWQgaXRlbT5cbiAgICAgICAgICA8U29ydCBvblNvcnQ9e29uU29ydH0gLz5cbiAgICAgICAgPC9HcmlkPlxuICAgICAgPC9HcmlkPlxuICAgICAgPEdyaWQgaXRlbSB4cz17Nn0gY29udGFpbmVyIGp1c3RpZnlDb250ZW50PVwiZmxleC1lbmRcIj5cbiAgICAgICAgPFNlYXJjaCBvblNlYXJjaD17b25TZWFyY2h9IG9uUmVzZXQ9e29uUmVzZXR9IC8+XG4gICAgICA8L0dyaWQ+XG4gICAgPC9HcmlkPlxuICApO1xufVxuXG5GaWx0ZXJTb3J0U2VhcmNoLnByb3BUeXBlcyA9IHtcbiAgb25GaWx0ZXI6IFByb3BUeXBlcy5mdW5jLFxuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICBvblNlYXJjaDogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uUmVzZXQ6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBGaWx0ZXJTb3J0U2VhcmNoO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgQm94LCBCdXR0b24gfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuXG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IEZvcm1Gb290ZXIgPSAoeyBzYXZlTGFiZWwsIGNhbmNlbExhYmVsLCBvbkNsb3NlLCBkaXNhYmxlZCB9KSA9PiAoXG4gIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuZm9vdGVyfT5cbiAgICA8QnV0dG9uXG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy5jYW5jZWxCdG59XG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgID5cbiAgICAgIHtjYW5jZWxMYWJlbH1cbiAgICA8L0J1dHRvbj5cbiAgICA8QnV0dG9uXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNhdmVCdG59XG4gICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgID5cbiAgICAgIHtzYXZlTGFiZWx9XG4gICAgPC9CdXR0b24+XG4gIDwvQm94PlxuKTtcblxuRm9ybUZvb3Rlci5wcm9wVHlwZXMgPSB7XG4gIHNhdmVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2FuY2VsTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2xcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm1Gb290ZXI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgRXJyb3JJY29uIGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsL0Vycm9yXCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmZ1bmN0aW9uIEVycm9yTGFiZWwoeyBtZXNzYWdlLCBjb2xvciwgY2xhc3NOYW1lcywgZGF0YVRlc3RJZCB9KSB7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLmVycm9yTGFiZWx9ICR7Y2xhc3NOYW1lcyAmJiBjbGFzc05hbWVzfWB9XG4gICAgICBzdHlsZT17eyBjb2xvciB9fVxuICAgICAgZGF0YS10ZXN0aWQ9e2RhdGFUZXN0SWR9XG4gICAgPlxuICAgICAgPEVycm9ySWNvbiBzeD17eyBjb2xvciB9fSAvPlxuICAgICAge21lc3NhZ2V9XG4gICAgPC9zcGFuPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBFcnJvckxhYmVsO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgQmFja2Ryb3AsIENpcmN1bGFyUHJvZ3Jlc3MgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuXG5jb25zdCBMb2FkZXIgPSAoeyBvcGVuIH0pID0+IChcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgPEJhY2tkcm9wIG9wZW49e29wZW59IHN4PXsodGhlbWUpID0+ICh7IHpJbmRleDogdGhlbWUuekluZGV4LmRyYXdlciArIDEgfSl9PlxuICAgIDxDaXJjdWxhclByb2dyZXNzIGNvbG9yPVwiaW5oZXJpdFwiIC8+XG4gIDwvQmFja2Ryb3A+XG4pO1xuXG5Mb2FkZXIucHJvcFR5cGVzID0ge1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTG9hZGVyO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3Rvciwgc2hhbGxvd0VxdWFsIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IEluZmluaXRlU2Nyb2xsIGZyb20gXCJyZWFjdC1pbmZpbml0ZS1zY3JvbGwtY29tcG9uZW50XCI7XG5pbXBvcnQgRmlsdGVyU29ydFNlYXJjaCBmcm9tIFwiLi9GaWx0ZXJTb3J0U2VhcmNoXCI7XG5pbXBvcnQgT3JkZXJzTGlzdCBmcm9tIFwiLi9PcmRlcnNMaXN0XCI7XG5pbXBvcnQgeyBnZXRTdW1taXRGb3JtYXR0ZWREYXRlIH0gZnJvbSBcIi4uL3V0aWxzL3N1bW1pdFV0aWxzXCI7XG5pbXBvcnQge1xuICBnZXRUaWNrZXRzQnlPcmRlcixcbiAgZ2V0VXNlck9yZGVycyxcbiAgcmVzZXRGaWx0ZXIsXG4gIHJlc2V0RXJyb3Jcbn0gZnJvbSBcIi4uL2FjdGlvbnNcIjtcbmltcG9ydCB7IE9ORV9QQUdFX05FWFQgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgQ3VzdG9tVGhlbWUgZnJvbSBcIi4vQ3VzdG9tVGhlbWVcIjtcbmltcG9ydCBMb2FkZXIgZnJvbSBcIi4vTG9hZGVyXCI7XG5pbXBvcnQgQ3VzdG9tRGlhbG9nQ29udGV4dCBmcm9tIFwiLi9DdXN0b21EaWFsb2cvQ29udGV4dFwiO1xuaW1wb3J0IEN1c3RvbURpYWxvZyBmcm9tIFwiLi9DdXN0b21EaWFsb2dcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgTXlPcmRlcnNUaWNrZXRzID0gKCkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgW21lc3NhZ2UsIHNldE1lc3NhZ2VdID0gdXNlU3RhdGUoXCJcIik7XG4gIGNvbnN0IFttZXNzYWdlQ2FsbGJhY2ssIHNldE1lc3NhZ2VDYWxsYmFja10gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3Qge1xuICAgIHN1bW1pdCxcbiAgICBtZW1iZXJPcmRlcnMsXG4gICAgbG9hZGluZyxcbiAgICBvcmRlcnNfY3VycmVudF9wYWdlLFxuICAgIG9yZGVyc19sYXN0X3BhZ2UsXG4gICAgb3JkZXJzX3Blcl9wYWdlLFxuICAgIG9yZGVyc190b3RhbCxcbiAgICB0aWNrZXRfcGVyX3BhZ2UsXG4gICAgYXBpRXJyb3JcbiAgfSA9IHVzZVNlbGVjdG9yKChzdGF0ZSkgPT4gc3RhdGUud2lkZ2V0U3RhdGUgfHwge30sIHNoYWxsb3dFcXVhbCk7XG4gIGNvbnN0IFtmaWx0ZXIsIHNldEZpbHRlcl0gPSB1c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IFtzb3J0LCBzZXRTb3J0XSA9IHVzZVN0YXRlKHt9KTtcblxuICBjb25zdCBvblJlc2V0ID0gKCkgPT4ge1xuICAgIHNldFNvcnQoe30pO1xuICAgIHNldEZpbHRlcih7fSk7XG4gICAgZGlzcGF0Y2gocmVzZXRGaWx0ZXIoKSk7XG4gIH07XG5cbiAgY29uc3QgcmVzZXRBcGlFcnJvciA9ICgpID0+IHtcbiAgICBkaXNwYXRjaChyZXNldEVycm9yKCkpO1xuICB9O1xuXG4gIGNvbnN0IGZldGNoRGF0YSA9IGFzeW5jIChwYWdlKSA9PiB7XG4gICAgZGlzcGF0Y2goXG4gICAgICBnZXRVc2VyT3JkZXJzKHtcbiAgICAgICAgcGFnZSxcbiAgICAgICAgcGVyUGFnZTogb3JkZXJzX3Blcl9wYWdlLFxuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIHNvcnRcbiAgICAgIH0pXG4gICAgKS50aGVuKChwYXlsb2FkKSA9PiB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IHBheWxvYWQucmVzcG9uc2U7XG4gICAgICBkYXRhLmZvckVhY2goKG9yZGVyKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKFxuICAgICAgICAgIGdldFRpY2tldHNCeU9yZGVyKHtcbiAgICAgICAgICAgIG9yZGVySWQ6IG9yZGVyLmlkLFxuICAgICAgICAgICAgY3VycmVudF9wYWdlOiBPTkVfUEFHRV9ORVhULFxuICAgICAgICAgICAgcGVyUGFnZTogdGlja2V0X3Blcl9wYWdlXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmV0Y2hEYXRhKG9yZGVyc19jdXJyZW50X3BhZ2UpO1xuICB9LCBbZmlsdGVyXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXBpRXJyb3IpIHtcbiAgICAgIHNldE1lc3NhZ2UoYXBpRXJyb3IpO1xuICAgICAgc2V0TWVzc2FnZUNhbGxiYWNrKHJlc2V0QXBpRXJyb3IpO1xuICAgIH1cbiAgfSwgW2FwaUVycm9yXSk7XG5cbiAgY29uc3Qgb25GaWx0ZXIgPSAoZmlsdGVyKSA9PiB7XG4gICAgc2V0U29ydCh7fSk7XG4gICAgc2V0RmlsdGVyKGZpbHRlcik7XG4gIH07XG4gIGNvbnN0IG9uU29ydCA9IChkaXJlY3Rpb24pID0+IHtcbiAgICBzZXRGaWx0ZXIoe30pO1xuICAgIHNldFNvcnQoeyBkaXJlY3Rpb24sIG5hbWU6IFwiY3JlYXRlZFwiIH0pO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEN1c3RvbVRoZW1lPlxuICAgICAgPExvYWRlciBvcGVuPXtsb2FkaW5nfSAvPlxuICAgICAgPEN1c3RvbURpYWxvZ1xuICAgICAgICBvcGVuPXshIW1lc3NhZ2V9XG4gICAgICAgIG9uQ2xvc2U9eygpID0+IHtcbiAgICAgICAgICBzZXRNZXNzYWdlKG51bGwpO1xuICAgICAgICAgIGlmIChtZXNzYWdlQ2FsbGJhY2spIG1lc3NhZ2VDYWxsYmFjaygpO1xuICAgICAgICB9fVxuICAgICAgICBib2R5PXttZXNzYWdlPy5ib2R5fVxuICAgICAgICB0aXRsZT17bWVzc2FnZT8udGl0bGV9XG4gICAgICAvPlxuICAgICAgPEZpbHRlclNvcnRTZWFyY2hcbiAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICBvblNvcnQ9e29uU29ydH1cbiAgICAgICAgb25TZWFyY2g9e29uRmlsdGVyfVxuICAgICAgICBvblJlc2V0PXtvblJlc2V0fVxuICAgICAgLz5cbiAgICAgIDxCb3hcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMud2lkZ2V0SGVhZGVyfVxuICAgICAgICBzeD17eyBwYWRkaW5nOiB7IHhzOiAyLCBtZDogMCwgbGc6IDAgfSB9fVxuICAgICAgICBkYXRhLXRlc3RpZD1cIm15LW9yZGVycy10aWNrZXQtaGVhZGVyXCJcbiAgICAgID5cbiAgICAgICAgPGgyIGNsYXNzTmFtZT17c3R5bGVzLnN1bW1pdFRpdGxlRGF0ZX0+e3N1bW1pdD8ubmFtZX08L2gyPlxuICAgICAgICA8aDIgY2xhc3NOYW1lPXtzdHlsZXMuc3VtbWl0VGl0bGVEYXRlfT5cbiAgICAgICAgICB7Z2V0U3VtbWl0Rm9ybWF0dGVkRGF0ZShzdW1taXQpfVxuICAgICAgICA8L2gyPlxuICAgICAgPC9Cb3g+XG4gICAgICA8Q3VzdG9tRGlhbG9nQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17KHNldE1lc3NhZ2UsIHNldE1lc3NhZ2VDYWxsYmFjayl9PlxuICAgICAgICB7bWVtYmVyT3JkZXJzPy5sZW5ndGggPyAoXG4gICAgICAgICAgPEluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICBkYXRhTGVuZ3RoPXtvcmRlcnNfdG90YWx9XG4gICAgICAgICAgICBuZXh0PXsoKSA9PiBmZXRjaERhdGEob3JkZXJzX2N1cnJlbnRfcGFnZSArIE9ORV9QQUdFX05FWFQpfVxuICAgICAgICAgICAgaGFzTW9yZT17b3JkZXJzX2N1cnJlbnRfcGFnZSA8IG9yZGVyc19sYXN0X3BhZ2V9XG4gICAgICAgICAgICBzY3JvbGxUaHJlc2hvbGQ9ezF9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge21lbWJlck9yZGVycz8ubWFwKChvcmRlcikgPT4gKFxuICAgICAgICAgICAgICA8T3JkZXJzTGlzdFxuICAgICAgICAgICAgICAgIGtleT17b3JkZXIubnVtYmVyICsgb3JkZXIuaWR9XG4gICAgICAgICAgICAgICAgb3JkZXI9e29yZGVyfVxuICAgICAgICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9JbmZpbml0ZVNjcm9sbD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLm5vT3JkZXJzRm91bmR9Pnt0KFwib3JkZXJzLm5vX29yZGVyc1wiKX08L0JveD5cbiAgICAgICAgKX1cbiAgICAgIDwvQ3VzdG9tRGlhbG9nQ29udGV4dC5Qcm92aWRlcj5cbiAgICA8L0N1c3RvbVRoZW1lPlxuICApO1xufTtcbmV4cG9ydCBkZWZhdWx0IE15T3JkZXJzVGlja2V0cztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IEdyaWQsIEJveCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgRGl2aWRlciBmcm9tIFwiQG11aS9tYXRlcmlhbC9EaXZpZGVyXCI7XG5pbXBvcnQgeyBjYWxjdWxhdGVPcmRlclRvdGFscywgZm9ybWF0Q3VycmVuY3kgfSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgT3JkZXJTdW1tYXJ5VGFibGUgPSAoeyBvcmRlciwgc3VtbWl0IH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCB7IGRpc2NvdW50VG90YWwsIHJlZnVuZFRvdGFsLCB0YXhlc1RvdGFsLCBhbW91bnRUb3RhbCwgdGlja2V0U3VtbWFyeSB9ID1cbiAgICBjYWxjdWxhdGVPcmRlclRvdGFscyh7IG9yZGVyLCBzdW1taXQgfSk7XG4gIGNvbnN0IGh1bmRyZWQgPSAxMDA7XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLm9yZGVyU3VtbWFyeVRhYmxlfT5cbiAgICAgIHt0aWNrZXRTdW1tYXJ5Py5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPD5cbiAgICAgICAgICB7dGlja2V0U3VtbWFyeS5tYXAoKHRpY2tldCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGlja2V0VG90YWwgPVxuICAgICAgICAgICAgICAodGlja2V0LnF0eSAqICh0aWNrZXQudGlja2V0X3R5cGUuY29zdCAqIGh1bmRyZWQpKSAvIGh1bmRyZWQ7XG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxHcmlkXG4gICAgICAgICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICAgICAgICAga2V5PXtgdGl4b3JkZXJfJHt0aWNrZXQudGlja2V0X3R5cGUuY3JlYXRlZH1gfVxuICAgICAgICAgICAgICAgIHN4PXt7IHBiOiAxIH19XG4gICAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJvcmRlci1zdW1tYXJ5LWl0ZW1pemVkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxHcmlkIHhzPXs4fSBpdGVtPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIHh7dGlja2V0LnF0eX0ge3RpY2tldC50aWNrZXRfdHlwZS5uYW1lfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICAgICAgICA8R3JpZCB4cz17NH0gaXRlbSBhbGlnbj1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICB7Zm9ybWF0Q3VycmVuY3kodGlja2V0VG90YWwsIHsgY3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5IH0pfVxuICAgICAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC8+XG4gICAgICApfVxuICAgICAge29yZGVyLmRpc2NvdW50X2Ftb3VudCA+IDAgJiYgKFxuICAgICAgICA8R3JpZCBjb250YWluZXIgc3g9e3sgcGI6IDEgfX0+XG4gICAgICAgICAgPEdyaWQgeHM9ezh9IGl0ZW0+XG4gICAgICAgICAgICB7dChcIm9yZGVyX3N1bW1hcnkuZGlzY291bnRzXCIpfVxuICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICA8R3JpZCB4cz17NH0gaXRlbSBhbGlnbj1cInJpZ2h0XCI+XG4gICAgICAgICAgICAte2Rpc2NvdW50VG90YWx9XG4gICAgICAgICAgPC9HcmlkPlxuICAgICAgICA8L0dyaWQ+XG4gICAgICApfVxuICAgICAge29yZGVyLnRheGVzX2Ftb3VudCA+IDAgJiYgKFxuICAgICAgICA8R3JpZCBjb250YWluZXIgc3g9e3sgcGI6IDEgfX0+XG4gICAgICAgICAgPEdyaWQgeHM9ezh9IGl0ZW0+XG4gICAgICAgICAgICB7dChcIm9yZGVyX3N1bW1hcnkudGF4ZXNcIil9XG4gICAgICAgICAgPC9HcmlkPlxuICAgICAgICAgIDxHcmlkIHhzPXs0fSBpdGVtIGFsaWduPVwicmlnaHRcIj5cbiAgICAgICAgICAgIHt0YXhlc1RvdGFsfVxuICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgPC9HcmlkPlxuICAgICAgKX1cbiAgICAgIHtvcmRlci5zdGF0dXMgPT09IFwiUGFpZFwiICYmIChcbiAgICAgICAgPEdyaWQgY29udGFpbmVyIHN4PXt7IHBiOiAxIH19PlxuICAgICAgICAgIDxHcmlkIHhzPXs4fSBpdGVtPlxuICAgICAgICAgICAge3QoXCJvcmRlcl9zdW1tYXJ5LmFtb3VudF9wYWlkXCIpfVxuICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgICA8R3JpZCB4cz17NH0gaXRlbSBhbGlnbj1cInJpZ2h0XCI+XG4gICAgICAgICAgICAte2Ftb3VudFRvdGFsfVxuICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgPC9HcmlkPlxuICAgICAgKX1cbiAgICAgIHtyZWZ1bmRUb3RhbCA+IDAgJiYgKFxuICAgICAgICA8R3JpZCBjb250YWluZXIgc3g9e3sgcGI6IDEgfX0+XG4gICAgICAgICAgPEdyaWQgeHM9ezh9IGl0ZW0+XG4gICAgICAgICAgICB7dChcIm9yZGVyX3N1bW1hcnkucmVmdW5kc1wiKX1cbiAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICAgPEdyaWQgeHM9ezR9IGl0ZW0gYWxpZ249XCJyaWdodFwiPlxuICAgICAgICAgICAge3JlZnVuZFRvdGFsfVxuICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgPC9HcmlkPlxuICAgICAgKX1cbiAgICAgIDxEaXZpZGVyIC8+XG4gICAgICA8R3JpZCBjb250YWluZXIgc3g9e3sgcHQ6IDEsIHBiOiAxIH19PlxuICAgICAgICA8R3JpZCB4cz17OH0gaXRlbT5cbiAgICAgICAgICB7dChcIm9yZGVyX3N1bW1hcnkudG90YWxcIil9XG4gICAgICAgIDwvR3JpZD5cbiAgICAgICAgPEdyaWQgeHM9ezR9IGl0ZW0gYWxpZ249XCJyaWdodFwiPlxuICAgICAgICAgIHtvcmRlci5zdGF0dXMgPT09IFwiUGFpZFwiID8gXCIkMC4wMFwiIDogYW1vdW50VG90YWx9XG4gICAgICAgIDwvR3JpZD5cbiAgICAgIDwvR3JpZD5cbiAgICA8L0JveD5cbiAgKTtcbn07XG5cbk9yZGVyU3VtbWFyeVRhYmxlLnByb3BUeXBlcyA9IHtcbiAgb3JkZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVuY3k6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGlzY291bnRfYW1vdW50OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHRheGVzX2Ftb3VudDogUHJvcFR5cGVzLm51bWJlcixcbiAgICBzdGF0dXM6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksXG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgT3JkZXJTdW1tYXJ5VGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlTm93IH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyB0aWNrZXRzUmVmdW5kYWJsZSB9IGZyb20gXCIuLi8uLi91dGlscy90aWNrZXRVdGlsc1wiO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBSZWZ1bmRFbWFpbFN1cHBvcnQgPSAoe1xuICBzdW1taXQsXG4gIHRpY2tldHMsXG4gIHJlZnVuZFJlcXVlc3RlZCxcbiAgdGlja2V0c1RvUmVmdW5kLFxuICBzdWJtaXRSZXF1ZXN0LFxuICBvblJlZnVuZENsaWNrLFxuICBvblJlZnVuZERldGFpbENsaWNrLFxuICBvbkVtYWlsU3VwcG9ydENsaWNrXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3Qgbm93ID0gdXNlTm93KCk7XG4gIGNvbnN0IGlzSW5SZWZ1bmRhYmxlUGVyaW9kID1cbiAgICBzdW1taXQucmVnaXN0cmF0aW9uX2FsbG93ZWRfcmVmdW5kX3JlcXVlc3RfdGlsbF9kYXRlID4gbm93O1xuICBjb25zdCBhdExlYXN0T25lUmVmdW5kYWJsZVRpY2tldCA9IHRpY2tldHNSZWZ1bmRhYmxlKHRpY2tldHMpO1xuICBjb25zdCBpc1JlZnVuZGFibGUgPSAhIShpc0luUmVmdW5kYWJsZVBlcmlvZCAmJiBhdExlYXN0T25lUmVmdW5kYWJsZVRpY2tldCk7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtpc1JlZnVuZGFibGUgJiYgKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYXJpYS1sYWJlbD1cInJlZnVuZCByZXF1ZXN0IGJ1dHRvblwiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtzdHlsZXMub3JkZXJTdW1tYXJ5QnV0dG9ufSAke1xuICAgICAgICAgICAgcmVmdW5kUmVxdWVzdGVkICYmIHRpY2tldHNUb1JlZnVuZC5sZW5ndGggPT09IDAgJiYgIXN1Ym1pdFJlcXVlc3RcbiAgICAgICAgICAgICAgPyBzdHlsZXMucmVmdW5kRGlzYWJsZWRcbiAgICAgICAgICAgICAgOiBcIlwiXG4gICAgICAgICAgfWB9XG4gICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIG9uQ2xpY2s9e29uUmVmdW5kQ2xpY2t9XG4gICAgICAgICAgZGlzYWJsZWQ9e1xuICAgICAgICAgICAgcmVmdW5kUmVxdWVzdGVkICYmIHRpY2tldHNUb1JlZnVuZC5sZW5ndGggPT09IDAgJiYgIXN1Ym1pdFJlcXVlc3RcbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICB7dChcIm9yZGVyX3N1bW1hcnkucmVxdWVzdF9yZWZ1bmRcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKX1cbiAgICAgIDxCdXR0b25cbiAgICAgICAgYXJpYS1sYWJlbD1cInJlZnVuZCBkZXRhaWxzIGJ1dHRvblwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5vcmRlclN1bW1hcnlCdXR0b259XG4gICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgIG9uQ2xpY2s9e29uUmVmdW5kRGV0YWlsQ2xpY2t9XG4gICAgICA+XG4gICAgICAgIHt0KFwib3JkZXJfc3VtbWFyeS5yZWZ1bmRfZGV0YWlsc1wiKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBhcmlhLWxhYmVsPVwiZW1haWwgc3VwcG9ydCBidXR0b25cIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMub3JkZXJTdW1tYXJ5QnV0dG9ufVxuICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICBvbkNsaWNrPXtvbkVtYWlsU3VwcG9ydENsaWNrfVxuICAgICAgPlxuICAgICAgICB7dChcIm9yZGVyX2luZm8uZW1haWxfc3VwcG9ydFwiKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvPlxuICApO1xufTtcblxuUmVmdW5kRW1haWxTdXBwb3J0LnByb3BUeXBlcyA9IHtcbiAgc3VtbWl0OiBQcm9wVHlwZXMub2JqZWN0LFxuICB0aWNrZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihPYmplY3QpLFxuICBvblJlZnVuZENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25SZWZ1bmREZXRhaWxDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRW1haWxTdXBwb3J0Q2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICByZWZ1bmRSZXF1ZXN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0aWNrZXRzVG9SZWZ1bmQ6IFByb3BUeXBlcy5hcnJheU9mKE9iamVjdCksXG4gIHN1Ym1pdFJlcXVlc3Q6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWZ1bmRFbWFpbFN1cHBvcnQ7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBHcmlkLCBCb3ggfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IE9yZGVyU3VtbWFyeVRhYmxlIGZyb20gXCIuL09yZGVyU3VtbWFyeVRhYmxlXCI7XG5pbXBvcnQgUmVmdW5kRW1haWxTdXBwb3J0IGZyb20gXCIuL1JlZnVuZEVtYWlsU3VwcG9ydFwiO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBPcmRlclN1bW1hcnkgPSAoe1xuICBvcmRlcixcbiAgc3VtbWl0LFxuICBvblJlZnVuZENsaWNrLFxuICByZWZ1bmRSZXF1ZXN0ZWQsXG4gIHRpY2tldHNUb1JlZnVuZCxcbiAgc3VibWl0UmVxdWVzdCxcbiAgb25SZWZ1bmREZXRhaWxDbGlja1xufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxCb3hcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMub3JkZXJTdW1tYXJ5V3JhcHBlcn1cbiAgICAgICAgc3g9e3sgcHQ6IDQsIHB4OiA0IH19XG4gICAgICAgIGRhdGEtdGVzdGlkPVwib3JkZXItc3VtbWFyeS1jb250YWluZXJcIlxuICAgICAgPlxuICAgICAgICA8aDM+e3QoXCJvcmRlcl9zdW1tYXJ5Lm9yZGVyX3N1bW1hcnlcIil9PC9oMz5cbiAgICAgICAgPEdyaWQgY29udGFpbmVyPlxuICAgICAgICAgIDxHcmlkXG4gICAgICAgICAgICB4cz17MTJ9XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5vcmRlclN1bW1hcnlQdXJjaGFzZWRJbmZvfVxuICAgICAgICAgICAgc3g9e3sgcGI6IDMgfX1cbiAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8T3JkZXJTdW1tYXJ5VGFibGUgb3JkZXI9e29yZGVyfSBzdW1taXQ9e3N1bW1pdH0gLz5cbiAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgIDwvR3JpZD5cbiAgICAgIDwvQm94PlxuICAgICAgPEJveCB4cz17MTJ9IHN4PXt7IHBiOiAzIH19PlxuICAgICAgICA8UmVmdW5kRW1haWxTdXBwb3J0XG4gICAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgICAgcmVmdW5kUmVxdWVzdGVkPXtyZWZ1bmRSZXF1ZXN0ZWR9XG4gICAgICAgICAgdGlja2V0cz17b3JkZXI/Lm1lbWJlclRpY2tldHN9XG4gICAgICAgICAgdGlja2V0c1RvUmVmdW5kPXt0aWNrZXRzVG9SZWZ1bmR9XG4gICAgICAgICAgc3VibWl0UmVxdWVzdD17c3VibWl0UmVxdWVzdH1cbiAgICAgICAgICBvblJlZnVuZENsaWNrPXtvblJlZnVuZENsaWNrfVxuICAgICAgICAgIG9uUmVmdW5kRGV0YWlsQ2xpY2s9e29uUmVmdW5kRGV0YWlsQ2xpY2t9XG4gICAgICAgICAgb25FbWFpbFN1cHBvcnRDbGljaz17KCkgPT4ge319XG4gICAgICAgIC8+XG4gICAgICA8L0JveD5cbiAgICA8Lz5cbiAgKTtcbn07XG5PcmRlclN1bW1hcnkucHJvcFR5cGVzID0ge1xuICBzdW1taXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIG9yZGVyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lbWJlclRpY2tldHM6IFByb3BUeXBlcy5hcnJheU9mKE9iamVjdClcbiAgfSksXG4gIG9uUmVmdW5kQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICByZWZ1bmRSZXF1ZXN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICB0aWNrZXRzVG9SZWZ1bmQ6IFByb3BUeXBlcy5hcnJheU9mKE9iamVjdCksXG4gIHN1Ym1pdFJlcXVlc3Q6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBPcmRlclN1bW1hcnk7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBCb3ggfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5mdW5jdGlvbiBBdHRlbmRlZVN0YXR1cyh7IHRpY2tldCB9KSB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgcmV0dXJuIHRpY2tldC5vd25lcj8uZW1haWwgPyAoXG4gICAgPEJveCBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+XG4gICAgICB7dChcInRpY2tldF9zdGF0dXMuYXNzaWduZWRfdG9cIil9OlxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudGlja2V0T3duZXJFbWFpbH1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJhdHRlbmRlZS1zdGF0dXMtYXNzaWduZWRcIlxuICAgICAgPlxuICAgICAgICB7XCIgXCJ9XG4gICAgICAgIHt0aWNrZXQub3duZXI/LmVtYWlsfVxuICAgICAgPC9zcGFuPlxuICAgIDwvQm94PlxuICApIDogKFxuICAgIHRpY2tldC5pc19hY3RpdmUgJiYgKFxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudGlja2V0T3duZXJFbWFpbH1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJhdHRlbmRlZS1zdGF0dXMtdW5hc3NpZ25lZFwiXG4gICAgICA+XG4gICAgICAgIHt0KFwidGlja2V0X3N0YXR1cy5hdHRlbmRlZV9zdGF0dXNfdW5hc3NpZ25lZFwiKX1cbiAgICAgIDwvc3Bhbj5cbiAgICApXG4gICk7XG59XG5cbkF0dGVuZGVlU3RhdHVzLnByb3BUeXBlcyA9IHtcbiAgdGlja2V0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG93bmVyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgZW1haWw6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICBpc19hY3RpdmU6IFByb3BUeXBlcy5ib29sXG4gIH0pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBdHRlbmRlZVN0YXR1cztcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCBPcmRlckxpc3RUaWNrZXRzIGZyb20gXCIuL09yZGVyTGlzdFRpY2tldHNcIjtcbmltcG9ydCB7IFBBR0lOQVRJT05fRElTUExBWV9DT1VOVCB9IGZyb20gXCIuLi8uLi91dGlscy9jb25zdGFudHNcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgT3JkZXJMaXN0SXRlbSA9ICh7XG4gIHN1bW1pdCxcbiAgb3JkZXIsXG4gIG9uUGFnaW5hdGVDbGljayxcbiAgcmVmdW5kUmVxdWVzdGVkLFxuICB0aWNrZXRzVG9SZWZ1bmQsXG4gIHNlbGVjdFRvUmVmdW5kXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgW2l0ZW1zVG9EaXNwbGF5LCBzZXRJdGVtc1RvRGlzcGxheV0gPSB1c2VTdGF0ZShcbiAgICBQQUdJTkFUSU9OX0RJU1BMQVlfQ09VTlRcbiAgKTtcblxuICBpZiAoIW9yZGVyPy5tZW1iZXJUaWNrZXRzPy5sZW5ndGgpIHJldHVybiBudWxsO1xuICBjb25zdCBzbGljZWRUaWNrZXRzID0gb3JkZXI/Lm1lbWJlclRpY2tldHM/LnNsaWNlKDAsIGl0ZW1zVG9EaXNwbGF5KTtcblxuICBjb25zdCBvblZpZXdNb3JlID0gKCkgPT4ge1xuICAgIGlmIChvcmRlcj8udGlja2V0c190b3RhbCA+IG9yZGVyPy5tZW1iZXJUaWNrZXRzLmxlbmd0aCkge1xuICAgICAgb25QYWdpbmF0ZUNsaWNrKCk7XG4gICAgfVxuICAgIHNldEl0ZW1zVG9EaXNwbGF5KGl0ZW1zVG9EaXNwbGF5ICsgUEFHSU5BVElPTl9ESVNQTEFZX0NPVU5UKTtcbiAgfTtcblxuICBjb25zdCBvblZpZXdMZXNzID0gKCkgPT4gc2V0SXRlbXNUb0Rpc3BsYXkoUEFHSU5BVElPTl9ESVNQTEFZX0NPVU5UKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7c2xpY2VkVGlja2V0cz8ubWFwKCh0aWNrZXQpID0+IChcbiAgICAgICAgPE9yZGVyTGlzdFRpY2tldHNcbiAgICAgICAgICBrZXk9e3RpY2tldC5pZH1cbiAgICAgICAgICB0aWNrZXQ9e3RpY2tldH1cbiAgICAgICAgICBzdW1taXQ9e3N1bW1pdH1cbiAgICAgICAgICByZWZ1bmRSZXF1ZXN0ZWQ9e3JlZnVuZFJlcXVlc3RlZH1cbiAgICAgICAgICBpc1NlbGVjdGVkVG9SZWZ1bmQ9eyEhdGlja2V0c1RvUmVmdW5kLmZpbmQoKHQpID0+IHQuaWQgPT09IHRpY2tldC5pZCl9XG4gICAgICAgICAgc2VsZWN0VG9SZWZ1bmQ9e3NlbGVjdFRvUmVmdW5kfVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgICB7b3JkZXI/LnRpY2tldHNfdG90YWwgPiBpdGVtc1RvRGlzcGxheSA/IChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJ2aWV3IG1vcmUgYnV0dG9uXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy52aWV3TW9yZUJ1dHRvbn1cbiAgICAgICAgICBvbkNsaWNrPXtvblZpZXdNb3JlfVxuICAgICAgICA+XG4gICAgICAgICAge3QoXCJvcmRlcnMtdGlja2V0cy52aWV3X21vcmVcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKSA6IChcbiAgICAgICAgXCJcIlxuICAgICAgKX1cbiAgICAgIHtzbGljZWRUaWNrZXRzPy5sZW5ndGggPiBQQUdJTkFUSU9OX0RJU1BMQVlfQ09VTlQgJiZcbiAgICAgIHNsaWNlZFRpY2tldHM/Lmxlbmd0aCA9PT0gb3JkZXI/LnRpY2tldHNfdG90YWwgPyAoXG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBhcmlhLWxhYmVsPVwidmlldyBsZXNzIGJ1dHRvblwiXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudmlld01vcmVCdXR0b259XG4gICAgICAgICAgb25DbGljaz17b25WaWV3TGVzc31cbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwib3JkZXJzLXRpY2tldHMudmlld19sZXNzXCIpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICkgOiAoXG4gICAgICAgIFwiXCJcbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59O1xuXG5PcmRlckxpc3RJdGVtLnByb3BUeXBlcyA9IHtcbiAgb3JkZXI6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgT3JkZXJMaXN0SXRlbTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgR3JpZCwgQnV0dG9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCBTdGFjayBmcm9tIFwiQG11aS9tYXRlcmlhbC9TdGFja1wiO1xuaW1wb3J0IENoZWNrYm94IGZyb20gXCJAbXVpL21hdGVyaWFsL0NoZWNrYm94XCI7XG5pbXBvcnQgVGlja2V0U3RhdHVzIGZyb20gXCIuLi9UaWNrZXRTdGF0dXNcIjtcbmltcG9ydCB7IGdldFN1bW1pdFJlYXNzaWduRGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdW1taXRVdGlsc1wiO1xuaW1wb3J0IHsgdXNlTm93IH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgQXR0ZW5kZWVTdGF0dXMgZnJvbSBcIi4vQXR0ZW5kZWVTdGF0dXNcIjtcbmltcG9ydCBUaWNrZXREZXRhaWwgZnJvbSBcIi4uL1RpY2tldERldGFpbFwiO1xuaW1wb3J0IHsgdXNlVGlja2V0RGV0YWlscyB9IGZyb20gXCIuLi8uLi9ob29rcy91c2VUaWNrZXREZXRhaWxzXCI7XG5pbXBvcnQgVGlja2V0UmVhc3NpZ24gZnJvbSBcIi4uL1RpY2tldFJlYXNzaWduXCI7XG5pbXBvcnQgQ29weVRleHQgZnJvbSBcIi4uL0NvcHlUZXh0XCI7XG5pbXBvcnQgVGlja2V0QXNzaWduIGZyb20gXCIuLi9UaWNrZXRBc3NpZ25cIjtcblxuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBtb2RhbFZpZXdzID0ge1xuICBkZXRhaWw6IFwiREVUQUlMXCIsXG4gIHJlYXNzaWduOiBcIlJFQVNTSUdOXCIsXG4gIGFzc2lnbjogXCJBU1NJR05cIlxufTtcblxuY29uc3QgVGlja2V0Q1RBcyA9ICh7XG4gIGlzSW5jb21wbGV0ZSxcbiAgaXNVbmFzc2lnbmVkLFxuICBpc1JlYXNzaWduYWJsZSxcbiAgb25PcGVuQ2xpY2tcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIGlmIChpc1VuYXNzaWduZWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hc3NpZ25UaWNrZXRCdXR0b259XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IG9uT3BlbkNsaWNrKG1vZGFsVmlld3MuYXNzaWduKX1cbiAgICAgID5cbiAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLmFzc2lnbl90aWNrZXRcIil9XG4gICAgICA8L0J1dHRvbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U3RhY2tcbiAgICAgIHN4PXt7XG4gICAgICAgIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIixcbiAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICB9fVxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBkaXJlY3Rpb249XCJyb3dcIlxuICAgID5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudmlld0ZpbmlzaFRpY2tldEJ1dHRvbn1cbiAgICAgICAgb25DbGljaz17KCkgPT4gb25PcGVuQ2xpY2sobW9kYWxWaWV3cy5kZXRhaWwpfVxuICAgICAgPlxuICAgICAgICB7aXNJbmNvbXBsZXRlXG4gICAgICAgICAgPyB0KFwidGlja2V0X3N0YXR1cy5maW5pc2hfdGlja2V0XCIpXG4gICAgICAgICAgOiB0KFwidGlja2V0X3N0YXR1cy52aWV3X3RpY2tldFwiKX1cbiAgICAgIDwvQnV0dG9uPlxuICAgICAge2lzUmVhc3NpZ25hYmxlICYmIChcbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJyZWFzc2lnbiB0aWNrZXQgYnV0dG9uXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5yZWFzc2lnbkJ1dHRvbn1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbk9wZW5DbGljayhtb2RhbFZpZXdzLnJlYXNzaWduKX1cbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwidGlja2V0X3N0YXR1cy5yZWFzc2lnbl90aWNrZXRcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1N0YWNrPlxuICApO1xufTtcblxuVGlja2V0Q1RBcy5wcm9wVHlwZXMgPSB7XG4gIGlzSW5jb21wbGV0ZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgaXNVbmFzc2lnbmVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBpc1JlYXNzaWduYWJsZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25PcGVuQ2xpY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn07XG5cbmNvbnN0IE9yZGVyTGlzdFRpY2tldHMgPSAoe1xuICB0aWNrZXQsXG4gIHN1bW1pdCxcbiAgcmVmdW5kUmVxdWVzdGVkLFxuICBpc1NlbGVjdGVkVG9SZWZ1bmQsXG4gIHNlbGVjdFRvUmVmdW5kXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3Qgbm93ID0gdXNlTm93KCk7XG4gIGNvbnN0IHsgaXNSZWZ1bmRhYmxlLCBpc1VuYXNzaWduZWQsIGlzSW5jb21wbGV0ZSwgY2FuUmVhc3NpZ24gfSA9XG4gICAgdXNlVGlja2V0RGV0YWlscyh0aWNrZXQpO1xuICBjb25zdCBbbW9kYWxPcGVuLCBzZXRNb2RhbE9wZW5dID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHJlYXNzaWduRGF0ZSA9IGdldFN1bW1pdFJlYXNzaWduRGF0ZShzdW1taXQpO1xuICBjb25zdCBpc1JlYXNzaWduYWJsZSA9IHJlYXNzaWduRGF0ZSA+IG5vdztcblxuICBjb25zdCBoYW5kbGVDbG9zZU1vZGFsID0gKCkgPT4ge1xuICAgIHNldE1vZGFsT3BlbihudWxsKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVPcGVuTW9kYWwgPSAodmlldykgPT4ge1xuICAgIHNldE1vZGFsT3Blbih2aWV3KTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxHcmlkXG4gICAgICBrZXk9e3RpY2tldC5pZH1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm9yZGVyV3JhcHBlcn1cbiAgICAgIGNvbnRhaW5lclxuICAgICAgZGF0YS10ZXN0aWQ9XCJvcmRlci1saXN0LXRpY2tldFwiXG4gICAgPlxuICAgICAgPEdyaWRcbiAgICAgICAgeHM9ezh9XG4gICAgICAgIHBhZGRpbmc9ezJ9XG4gICAgICAgIGl0ZW1cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudGlja2V0VGlja2V0VHlwZX1cbiAgICAgICAganVzdGlmeT1cInNwYWNlLWJldHdlZW5cIlxuICAgICAgPlxuICAgICAgICA8U3RhY2tcbiAgICAgICAgICBzeD17e1xuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwiZmxleC1zdGFydFwiXG4gICAgICAgICAgfX1cbiAgICAgICAgICBkaXJlY3Rpb249XCJyb3dcIlxuICAgICAgICA+XG4gICAgICAgICAge3JlZnVuZFJlcXVlc3RlZCAmJiBpc1JlZnVuZGFibGUgJiYgKFxuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJyZWZ1bmQgdGlja2V0IGNoZWNrYm94XCJcbiAgICAgICAgICAgICAgcm9sZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgY2hlY2tlZD17aXNTZWxlY3RlZFRvUmVmdW5kfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNlbGVjdFRvUmVmdW5kKGUsIHRpY2tldCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGg0Pnt0aWNrZXQudGlja2V0X3R5cGU/Lm5hbWV9PC9oND5cbiAgICAgICAgPC9TdGFjaz5cbiAgICAgIDwvR3JpZD5cbiAgICAgIDxHcmlkIHhzPXs0fSBwYWRkaW5nPXsyfSBpdGVtPlxuICAgICAgICB7LyogVG8gYWRkIGJhZGdlIGZlYXR1cmVzICovfVxuICAgICAgPC9HcmlkPlxuICAgICAgPEdyaWQgeHM9ezEyfSBzeD17eyBweDogMiwgcGI6IDIgfX0gaXRlbT5cbiAgICAgICAgPEF0dGVuZGVlU3RhdHVzIHRpY2tldD17dGlja2V0fSAvPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy50aWNrZXROb30+XG4gICAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLnRpY2tldF9ub1wiKX06e1wiIFwifVxuICAgICAgICAgIDxDb3B5VGV4dFxuICAgICAgICAgICAgdGV4dD17dGlja2V0Lm51bWJlcn1cbiAgICAgICAgICAgIHRvb2x0aXBUZXh0PXt0KFwidGlja2V0X3N0YXR1cy5jb3B5X3RpY2tldF9udW1iZXJcIil9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9HcmlkPlxuICAgICAgPEdyaWQgY29udGFpbmVyPlxuICAgICAgICA8R3JpZCBjb250YWluZXIgZGlyZWN0aW9uPVwicm93XCIgeHM9ezEyfSBsZz17Nn0gYWxpZ25JdGVtcz1cImNlbnRlclwiIGl0ZW0+XG4gICAgICAgICAgPFRpY2tldFN0YXR1cyB0aWNrZXQ9e3RpY2tldH0gLz5cbiAgICAgICAgPC9HcmlkPlxuICAgICAgICA8R3JpZCBwYWRkaW5nPXsyfSB4cz17MTJ9IGxnPXs2fSBjb250YWluZXIgaXRlbT5cbiAgICAgICAgICA8R3JpZFxuICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgY29udGFpbmVyXG4gICAgICAgICAgICBhbGlnbj1cImNlbnRlclwiXG4gICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy50aWNrZXRBY3Rpb25CdXR0b25zfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aWNrZXQuaXNfYWN0aXZlICYmIChcbiAgICAgICAgICAgICAgPFRpY2tldENUQXNcbiAgICAgICAgICAgICAgICBpc1VuYXNzaWduZWQ9e2lzVW5hc3NpZ25lZH1cbiAgICAgICAgICAgICAgICBpc0luY29tcGxldGU9e2lzSW5jb21wbGV0ZX1cbiAgICAgICAgICAgICAgICBpc1JlYXNzaWduYWJsZT17aXNSZWFzc2lnbmFibGUgJiYgY2FuUmVhc3NpZ259XG4gICAgICAgICAgICAgICAgb25PcGVuQ2xpY2s9e2hhbmRsZU9wZW5Nb2RhbH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9HcmlkPlxuICAgICAgICA8L0dyaWQ+XG4gICAgICA8L0dyaWQ+XG4gICAgICA8VGlja2V0RGV0YWlsXG4gICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICB0aWNrZXRJZD17dGlja2V0Py5pZH1cbiAgICAgICAgb3JkZXJJZD17dGlja2V0Py5vcmRlcl9pZH1cbiAgICAgICAgb3duZXJJZD17dGlja2V0Py5vd25lcj8uaWR9XG4gICAgICAgIG9wZW49e21vZGFsT3BlbiA9PT0gbW9kYWxWaWV3cy5kZXRhaWx9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlTW9kYWx9XG4gICAgICAvPlxuICAgICAgPFRpY2tldFJlYXNzaWduXG4gICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICB0aWNrZXRJZD17dGlja2V0Py5pZH1cbiAgICAgICAgb3JkZXJJZD17dGlja2V0Py5vcmRlcl9pZH1cbiAgICAgICAgb3duZXJJZD17dGlja2V0Py5vd25lcj8uaWR9XG4gICAgICAgIG9wZW49e21vZGFsT3BlbiA9PT0gbW9kYWxWaWV3cy5yZWFzc2lnbn1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VNb2RhbH1cbiAgICAgIC8+XG4gICAgICA8VGlja2V0QXNzaWduXG4gICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICB0aWNrZXRJZD17dGlja2V0Py5pZH1cbiAgICAgICAgb3JkZXJJZD17dGlja2V0Py5vcmRlcl9pZH1cbiAgICAgICAgb3duZXJJZD17dGlja2V0Py5vd25lcj8uaWR9XG4gICAgICAgIG9wZW49e21vZGFsT3BlbiA9PT0gbW9kYWxWaWV3cy5hc3NpZ259XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlTW9kYWx9XG4gICAgICAvPlxuICAgIDwvR3JpZD5cbiAgKTtcbn07XG5cbk9yZGVyTGlzdFRpY2tldHMucHJvcFR5cGVzID0ge1xuICB0aWNrZXQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaWQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb3JkZXJfaWQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb3duZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBpZDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGVtYWlsOiBQcm9wVHlwZXMuc3RyaW5nXG4gICAgfSksXG4gICAgbnVtYmVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRvdGFsX3JlZnVuZGVkX2Ftb3VudDogUHJvcFR5cGVzLm51bWJlcixcbiAgICB0aWNrZXRfdHlwZTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG5hbWU6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICBpc19hY3RpdmU6IFByb3BUeXBlcy5ib29sXG4gIH0pLFxuICBzdW1taXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIHJlZnVuZFJlcXVlc3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzU2VsZWN0ZWRUb1JlZnVuZDogUHJvcFR5cGVzLmJvb2wsXG4gIHNlbGVjdFRvUmVmdW5kOiBQcm9wVHlwZXMuZnVuY1xufTtcblxuZXhwb3J0IGRlZmF1bHQgT3JkZXJMaXN0VGlja2V0cztcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgR3JpZCwgQm94LCBCdXR0b24gfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IFN0YWNrIGZyb20gXCJAbXVpL21hdGVyaWFsL1N0YWNrXCI7XG5pbXBvcnQgVGFicyBmcm9tIFwiQG11aS9tYXRlcmlhbC9UYWJzXCI7XG5pbXBvcnQgVGFiIGZyb20gXCJAbXVpL21hdGVyaWFsL1RhYlwiO1xuaW1wb3J0IE9yZGVyTGlzdEl0ZW0gZnJvbSBcIi4vT3JkZXJMaXN0SXRlbVwiO1xuaW1wb3J0IE9yZGVyU3VtbWFyeSBmcm9tIFwiLi4vT3JkZXJTdW1tYXJ5XCI7XG5pbXBvcnQgUmVmdW5kUmVxdWVzdHNNb2RhbCBmcm9tIFwiLi4vUmVmdW5kUmVxdWVzdHNcIjtcbmltcG9ydCBFcnJvckxhYmVsIGZyb20gXCIuLi9MYWJlbHMvRXJyb3JMYWJlbFwiO1xuaW1wb3J0IHsgaXNUaWNrZXRSZWZ1bmRhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3RpY2tldFV0aWxzXCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5pbXBvcnQgUmVmdW5kRGV0YWlscyBmcm9tIFwiLi4vUmVmdW5kUmVxdWVzdHMvUmVmdW5kRGV0YWlsc1wiO1xuXG5jb25zdCBUYWJQYW5lbCA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGNoaWxkcmVuLCB2YWx1ZSwgaW5kZXggfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJvbGU9XCJ0YWJwYW5lbFwiXG4gICAgICBoaWRkZW49e3ZhbHVlICE9PSBpbmRleH1cbiAgICAgIGlkPXtgdGFicGFuZWwtJHtpbmRleH1gfVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtgdGFiLSR7aW5kZXh9YH1cbiAgICA+XG4gICAgICB7dmFsdWUgPT09IGluZGV4ICYmIGNoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufTtcblxuY29uc3QgT3JkZXJzTGlzdERlc2t0b3BNb2JpbGUgPSAoe1xuICBpc01vYmlsZSxcbiAgc3VtbWl0LFxuICBvcmRlcixcbiAgZGV0YWlsc1JlcXVpcmVkLFxuICBvblBhZ2luYXRlQ2xpY2tcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXywgbmV3VmFsdWUpID0+IHtcbiAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gIH07XG4gIGNvbnN0IFtyZWZ1bmRSZXF1ZXN0ZWQsIHNldFJlZnVuZFJlcXVlc3RlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFt0aWNrZXRzVG9SZWZ1bmQsIHNldFRpY2tldHNUb1JlZnVuZF0gPSB1c2VTdGF0ZShbXSk7XG4gIGNvbnN0IFtzdWJtaXRSZXF1ZXN0LCBzZXRTdWJtaXRSZXF1ZXN0XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3JlZnVuZERldGFpbHNPcGVuLCBzZXRSZWZ1bmREZXRhaWxzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qgb25SZWZ1bmRDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGlja2V0c1RvUmVmdW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2V0UmVmdW5kUmVxdWVzdGVkKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTdWJtaXRSZXF1ZXN0KHRydWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgdW5zZWxlY3RSZWZ1bmRUaWNrZXRzID0gKHRpY2tldCkgPT4ge1xuICAgIGNvbnN0IGZpbHRlclNlbGVjdGVkID0gdGlja2V0c1RvUmVmdW5kLmZpbHRlcigodCkgPT4gdC5pZCAhPT0gdGlja2V0LmlkKTtcbiAgICBzZXRUaWNrZXRzVG9SZWZ1bmQoZmlsdGVyU2VsZWN0ZWQpO1xuICB9O1xuICBjb25zdCBzZWxlY3RUb1JlZnVuZCA9IChlLCB0aWNrZXQpID0+IHtcbiAgICBjb25zdCB7IGNoZWNrZWQgfSA9IGUudGFyZ2V0O1xuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFRpY2tldCA9IG9yZGVyPy5tZW1iZXJUaWNrZXRzPy5maW5kKFxuICAgICAgICAodCkgPT4gdC5pZCA9PT0gdGlja2V0LmlkXG4gICAgICApO1xuICAgICAgc2V0VGlja2V0c1RvUmVmdW5kKFsuLi50aWNrZXRzVG9SZWZ1bmQsIHNlbGVjdGVkVGlja2V0XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVuc2VsZWN0UmVmdW5kVGlja2V0cyh0aWNrZXQpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgY2FuY2VsVGlja2V0c1RvUmVmdW5kID0gKCkgPT4ge1xuICAgIHNldFJlZnVuZFJlcXVlc3RlZChmYWxzZSk7XG4gICAgc2V0VGlja2V0c1RvUmVmdW5kKFtdKTtcbiAgfTtcblxuICBjb25zdCBzZWxlY3RBbGxUaWNrZXRzID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlZnVuZGFibGVUaWNrZXRzID0gb3JkZXI/Lm1lbWJlclRpY2tldHM/LmZpbHRlcihcbiAgICAgICh0aWNrZXQpID0+IGlzVGlja2V0UmVmdW5kYWJsZSh0aWNrZXQpID09PSB0cnVlXG4gICAgKTtcbiAgICBzZXRUaWNrZXRzVG9SZWZ1bmQocmVmdW5kYWJsZVRpY2tldHMpO1xuICB9O1xuXG4gIGNvbnN0IHJlc2V0QWxsUmVmdW5kU3RhdHVzZXMgPSAoKSA9PiB7XG4gICAgc2V0UmVmdW5kUmVxdWVzdGVkKGZhbHNlKTtcbiAgICBzZXRTdWJtaXRSZXF1ZXN0KGZhbHNlKTtcbiAgICBzZXRUaWNrZXRzVG9SZWZ1bmQoW10pO1xuICB9O1xuXG4gIGNvbnN0IG1vcmVEZXRhaWxzID0gKCkgPT5cbiAgICBkZXRhaWxzUmVxdWlyZWQgJiYgKFxuICAgICAgPEVycm9yTGFiZWxcbiAgICAgICAgbWVzc2FnZT17dChcInRpY2tldF9zdGF0dXMuc3RhdHVzX2RldGFpbHNfcmVxdWlyZWRcIil9XG4gICAgICAgIGNvbG9yPVwiI2ZmOTgwMFwiXG4gICAgICAgIGRhdGFUZXN0SWQ9XCJtb3JlLWRldGFpbHMtbGFiZWxcIlxuICAgICAgLz5cbiAgICApO1xuXG4gIHJldHVybiBpc01vYmlsZSA/IChcbiAgICA8Qm94XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50aWNrZXRMaXN0Q29udGFpbmVyfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJtb2JpbGUtb3JkZXJzLWxpc3QtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICA8Qm94IHN4PXt7IGJvcmRlckNvbG9yOiBcImRpdmlkZXJcIiwgcGI6IDIgfX0+XG4gICAgICAgIDxUYWJzXG4gICAgICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgdGV4dENvbG9yPVwiIzAwMFwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIlRpY2tldHMgJiBTdW1tYXJ5XCJcbiAgICAgICAgICBUYWJJbmRpY2F0b3JQcm9wcz17e1xuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCIjMDAwXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFRhYiBsYWJlbD17dChcImxhYmVscy50aWNrZXRzXCIpfSBjbGFzc05hbWU9e3N0eWxlcy50YWJCdXR0b25zfSAvPlxuICAgICAgICAgIDxUYWIgbGFiZWw9e3QoXCJsYWJlbHMuc3VtbWFyeVwiKX0gY2xhc3NOYW1lPXtzdHlsZXMudGFiQnV0dG9uc30gLz5cbiAgICAgICAgPC9UYWJzPlxuICAgICAgPC9Cb3g+XG4gICAgICB7bW9yZURldGFpbHMoKX1cbiAgICAgIDxUYWJQYW5lbCB2YWx1ZT17dmFsdWV9IGluZGV4PXswfT5cbiAgICAgICAgPE9yZGVyTGlzdEl0ZW1cbiAgICAgICAgICBzdW1taXQ9e3N1bW1pdH1cbiAgICAgICAgICBvcmRlcj17b3JkZXJ9XG4gICAgICAgICAgb25QYWdpbmF0ZUNsaWNrPXtvblBhZ2luYXRlQ2xpY2t9XG4gICAgICAgICAgcmVmdW5kUmVxdWVzdGVkPXtyZWZ1bmRSZXF1ZXN0ZWR9XG4gICAgICAgICAgdGlja2V0c1RvUmVmdW5kPXt0aWNrZXRzVG9SZWZ1bmR9XG4gICAgICAgICAgc2VsZWN0VG9SZWZ1bmQ9e3NlbGVjdFRvUmVmdW5kfVxuICAgICAgICAgIHN1Ym1pdFJlcXVlc3Q9e3N1Ym1pdFJlcXVlc3R9XG4gICAgICAgICAgdW5zZWxlY3RSZWZ1bmRUaWNrZXRzPXt1bnNlbGVjdFJlZnVuZFRpY2tldHN9XG4gICAgICAgIC8+XG4gICAgICA8L1RhYlBhbmVsPlxuICAgICAgPFRhYlBhbmVsIHZhbHVlPXt2YWx1ZX0gaW5kZXg9ezF9PlxuICAgICAgICA8T3JkZXJTdW1tYXJ5XG4gICAgICAgICAgb3JkZXI9e29yZGVyfVxuICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgIG9uUmVmdW5kQ2xpY2s9e29uUmVmdW5kQ2xpY2t9XG4gICAgICAgICAgdGlja2V0c1RvUmVmdW5kPXt0aWNrZXRzVG9SZWZ1bmR9XG4gICAgICAgICAgcmVmdW5kUmVxdWVzdGVkPXtyZWZ1bmRSZXF1ZXN0ZWR9XG4gICAgICAgICAgc3VibWl0UmVxdWVzdD17c3VibWl0UmVxdWVzdH1cbiAgICAgICAgLz5cbiAgICAgIDwvVGFiUGFuZWw+XG4gICAgPC9Cb3g+XG4gICkgOiAoXG4gICAgPD5cbiAgICAgIDxHcmlkIGl0ZW0gbWQ9ezEyfT5cbiAgICAgICAge21vcmVEZXRhaWxzKCl9XG4gICAgICA8L0dyaWQ+XG4gICAgICB7cmVmdW5kUmVxdWVzdGVkICYmIChcbiAgICAgICAgPEdyaWQgaXRlbSBtZD17MTJ9PlxuICAgICAgICAgIDxzcGFuPnt0KFwidGlja2V0X3N0YXR1cy5zZWxlY3RfdGlja2V0X3JlZnVuZFwiKX08L3NwYW4+XG4gICAgICAgICAgPFN0YWNrXG4gICAgICAgICAgICBzeD17e1xuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJmbGV4LXN0YXJ0XCJcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgICAgIGRpcmVjdGlvbj1cInJvd1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucmVmdW5kQnV0dG9uc31cbiAgICAgICAgICAgICAgb25DbGljaz17c2VsZWN0QWxsVGlja2V0c31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLnNlbGVjdF9hbGxcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnJlZnVuZEJ1dHRvbnN9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2NhbmNlbFRpY2tldHNUb1JlZnVuZH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLnNlbGVjdF9jYW5jZWxcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L1N0YWNrPlxuICAgICAgICA8L0dyaWQ+XG4gICAgICApfVxuICAgICAgPEdyaWRcbiAgICAgICAgcGFkZGluZz17MX1cbiAgICAgICAgaXRlbVxuICAgICAgICBtZD17N31cbiAgICAgICAgb3JkZXI9e3sgbWQ6IDEgfX1cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudGlja2V0TGlzdENvbnRhaW5lcn1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJkZXNrdG9wLW9yZGVycy1saXN0LWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIDxPcmRlckxpc3RJdGVtXG4gICAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgICAgb3JkZXI9e29yZGVyfVxuICAgICAgICAgIG9uUGFnaW5hdGVDbGljaz17b25QYWdpbmF0ZUNsaWNrfVxuICAgICAgICAgIHJlZnVuZFJlcXVlc3RlZD17cmVmdW5kUmVxdWVzdGVkfVxuICAgICAgICAgIHRpY2tldHNUb1JlZnVuZD17dGlja2V0c1RvUmVmdW5kfVxuICAgICAgICAgIHNlbGVjdFRvUmVmdW5kPXtzZWxlY3RUb1JlZnVuZH1cbiAgICAgICAgICBzdWJtaXRSZXF1ZXN0PXtzdWJtaXRSZXF1ZXN0fVxuICAgICAgICAgIHVuc2VsZWN0UmVmdW5kVGlja2V0cz17dW5zZWxlY3RSZWZ1bmRUaWNrZXRzfVxuICAgICAgICAvPlxuICAgICAgPC9HcmlkPlxuICAgICAgPEdyaWQgcGFkZGluZz17MX0gaXRlbSBtZD17NX0gb3JkZXI9e3sgbWQ6IDEgfX0+XG4gICAgICAgIDxPcmRlclN1bW1hcnlcbiAgICAgICAgICBzdW1taXQ9e3N1bW1pdH1cbiAgICAgICAgICBvcmRlcj17b3JkZXJ9XG4gICAgICAgICAgb25SZWZ1bmRDbGljaz17b25SZWZ1bmRDbGlja31cbiAgICAgICAgICB0aWNrZXRzVG9SZWZ1bmQ9e3RpY2tldHNUb1JlZnVuZH1cbiAgICAgICAgICByZWZ1bmRSZXF1ZXN0ZWQ9e3JlZnVuZFJlcXVlc3RlZH1cbiAgICAgICAgICBzdWJtaXRSZXF1ZXN0PXtzdWJtaXRSZXF1ZXN0fVxuICAgICAgICAgIG9uUmVmdW5kRGV0YWlsQ2xpY2s9eygpID0+IHNldFJlZnVuZERldGFpbHNPcGVuKHRydWUpfVxuICAgICAgICAvPlxuICAgICAgPC9HcmlkPlxuICAgICAgPFJlZnVuZFJlcXVlc3RzTW9kYWxcbiAgICAgICAgdGlja2V0cz17dGlja2V0c1RvUmVmdW5kfVxuICAgICAgICBvcGVuPXtzdWJtaXRSZXF1ZXN0fVxuICAgICAgICBvblJlbW92ZVNlbGVjdGVkUmVmdW5kVGlja2V0cz17dW5zZWxlY3RSZWZ1bmRUaWNrZXRzfVxuICAgICAgICBvblJlZnVuZFN1Y2Nlc3NDbG9zZT17KCkgPT4gcmVzZXRBbGxSZWZ1bmRTdGF0dXNlcygpfVxuICAgICAgICBvbkNsb3NlU2xpZGVyPXsoKSA9PiBzZXRTdWJtaXRSZXF1ZXN0KGZhbHNlKX1cbiAgICAgIC8+XG4gICAgICA8UmVmdW5kRGV0YWlsc1xuICAgICAgICB0aWNrZXRzPXtvcmRlcj8ubWVtYmVyVGlja2V0c31cbiAgICAgICAgb3Blbj17cmVmdW5kRGV0YWlsc09wZW59XG4gICAgICAgIG9uQ2xvc2VTbGlkZXI9eygpID0+IHNldFJlZnVuZERldGFpbHNPcGVuKGZhbHNlKX1cbiAgICAgIC8+XG4gICAgPC8+XG4gICk7XG59O1xuXG5PcmRlcnNMaXN0RGVza3RvcE1vYmlsZS5wcm9wVHlwZXMgPSB7XG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgb3JkZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVtYmVyVGlja2V0czogUHJvcFR5cGVzLmFycmF5T2YoT2JqZWN0KVxuICB9KSxcbiAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICBkZXRhaWxzUmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvblBhZ2luYXRlQ2xpY2s6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBPcmRlcnNMaXN0RGVza3RvcE1vYmlsZTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yLCBzaGFsbG93RXF1YWwgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IEdyaWQsIEJveCwgQnV0dG9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWwvc3R5bGVzXCI7XG5pbXBvcnQgdXNlTWVkaWFRdWVyeSBmcm9tIFwiQG11aS9tYXRlcmlhbC91c2VNZWRpYVF1ZXJ5XCI7XG5pbXBvcnQgeyBnZXRUaWNrZXRzQnlPcmRlciB9IGZyb20gXCIuLi8uLi9hY3Rpb25zXCI7XG5pbXBvcnQgeyBnZXRGb3JtYXR0ZWREYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyBPTkVfUEFHRV9ORVhUIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IE9yZGVyc0xpc3REZXNrdG9wTW9iaWxlIGZyb20gXCIuL09yZGVyc0xpc3REZXNrdG9wTW9iaWxlXCI7XG5pbXBvcnQgQ29weVRleHQgZnJvbSBcIi4uL0NvcHlUZXh0XCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IE9yZGVyc0xpc3QgPSAoeyBzdW1taXQsIG9yZGVyIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IHsgdGlja2V0X3Blcl9wYWdlIH0gPSB1c2VTZWxlY3RvcihcbiAgICAoc3RhdGUpID0+IHN0YXRlLndpZGdldFN0YXRlIHx8IHt9LFxuICAgIHNoYWxsb3dFcXVhbFxuICApO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGlzTW9iaWxlID0gdXNlTWVkaWFRdWVyeSh0aGVtZS5icmVha3BvaW50cy5kb3duKFwibGdcIikpO1xuICBjb25zdCBbaXNNb2JpbGVWaWV3YWJsZSwgc2V0TW9iaWxlVmlld2FibGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBkZXRhaWxzUmVxdWlyZWQgPSBvcmRlci5tZW1iZXJUaWNrZXRzPy5maW5kKFxuICAgICh0aWNrZXQpID0+IHRpY2tldC5vd25lcj8uc3RhdHVzID09PSBcIkluY29tcGxldGVcIlxuICApO1xuXG4gIGNvbnN0IG9uUGFnaW5hdGVDbGljayA9ICgpID0+XG4gICAgZGlzcGF0Y2goXG4gICAgICBnZXRUaWNrZXRzQnlPcmRlcih7XG4gICAgICAgIG9yZGVySWQ6IG9yZGVyLmlkLFxuICAgICAgICBwYWdlOiBvcmRlci50aWNrZXRzX3BhZ2VfY3VycmVudCArIE9ORV9QQUdFX05FWFQsXG4gICAgICAgIHBlclBhZ2U6IHRpY2tldF9wZXJfcGFnZSxcbiAgICAgICAgbmV4dDogdHJ1ZVxuICAgICAgfSlcbiAgICApO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxCb3hcbiAgICAgICAgc3g9e3tcbiAgICAgICAgICBwYWRkaW5nOiB7XG4gICAgICAgICAgICB4czogMixcbiAgICAgICAgICAgIG1kOiAxLFxuICAgICAgICAgICAgbGc6IDBcbiAgICAgICAgICB9XG4gICAgICAgIH19XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm9yZGVyVGlja2V0SW5mb0NvbnRhaW5lcn1cbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5vcmRlclRpY2tldEluZm99XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJvcmRlci10aWNrZXQtaW5mby1jb250YWluZXJcIlxuICAgICAgICA+XG4gICAgICAgICAge3QoXCJvcmRlcnMucHVyY2hhc2VkXCIpfToge2dldEZvcm1hdHRlZERhdGUob3JkZXIuY3JlYXRlZCl9IHx7XCIgXCJ9XG4gICAgICAgICAge3QoXCJvcmRlcl9zdW1tYXJ5Lm9yZGVyX25vXCIpfTp7XCIgXCJ9XG4gICAgICAgICAgPENvcHlUZXh0XG4gICAgICAgICAgICB0ZXh0PXtvcmRlci5udW1iZXJ9XG4gICAgICAgICAgICB0b29sdGlwVGV4dD17dChcIm9yZGVyX3N1bW1hcnkuY29weV9vcmRlcl9udW1iZXJcIil9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7aXNNb2JpbGUgJiYgKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHN4PXt7IHBhZGRpbmc6IDAgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmJsYWNrQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0TW9iaWxlVmlld2FibGUoIWlzTW9iaWxlVmlld2FibGUpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtpc01vYmlsZVZpZXdhYmxlXG4gICAgICAgICAgICAgID8gdChcInRpY2tldF9zdGF0dXMuaGlkZV90aWNrZXRzXCIpXG4gICAgICAgICAgICAgIDogdChcInRpY2tldF9zdGF0dXMudmlld190aWNrZXRzXCIpfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApfVxuICAgICAgPC9Cb3g+XG4gICAgICA8R3JpZFxuICAgICAgICBrZXk9e29yZGVyLmlkfVxuICAgICAgICBjb250YWluZXJcbiAgICAgICAgcm93U3BhY2luZz17MX1cbiAgICAgICAgY29sdW1uU3BhY2luZz17eyB4czogMSwgc206IDIsIG1kOiAzIH19XG4gICAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLm9yZGVyVGlja2V0Q29udGFpbmVyfSAke1xuICAgICAgICAgIGlzTW9iaWxlICYmICFpc01vYmlsZVZpZXdhYmxlID8gc3R5bGVzLmRpc3BsYXlfbm9uZSA6IFwiXCJcbiAgICAgICAgfWB9XG4gICAgICAgIHN4PXt7XG4gICAgICAgICAgZmxleERpcmVjdGlvbjoge1xuICAgICAgICAgICAgbWQ6IFwicm93XCIsXG4gICAgICAgICAgICBsZzogXCJyb3dcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFkZGluZzoge1xuICAgICAgICAgICAgeHM6IDIsXG4gICAgICAgICAgICBtZDogMCxcbiAgICAgICAgICAgIGxnOiAwXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8T3JkZXJzTGlzdERlc2t0b3BNb2JpbGVcbiAgICAgICAgICBpc01vYmlsZT17aXNNb2JpbGV9XG4gICAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgICAgb3JkZXI9e29yZGVyfVxuICAgICAgICAgIGRldGFpbHNSZXF1aXJlZD17ISFkZXRhaWxzUmVxdWlyZWR9XG4gICAgICAgICAgb25QYWdpbmF0ZUNsaWNrPXtvblBhZ2luYXRlQ2xpY2t9XG4gICAgICAgIC8+XG4gICAgICA8L0dyaWQ+XG4gICAgPC8+XG4gICk7XG59O1xuXG5PcmRlcnNMaXN0LnByb3BUeXBlcyA9IHtcbiAgc3VtbWl0OiBQcm9wVHlwZXMub2JqZWN0LFxuICBvcmRlcjogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuZXhwb3J0IGRlZmF1bHQgT3JkZXJzTGlzdDtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCBSaWdodERyYXdlciBmcm9tIFwiLi4vUmlnaHREcmF3ZXJcIjtcbmltcG9ydCBSZWZ1bmRSZXF1ZXN0ZWRUaWNrZXQgZnJvbSBcIi4vUmVmdW5kUmVxdWVzdGVkVGlja2V0XCI7XG5cbmNvbnN0IFJlZnVuZERldGFpbHMgPSAoeyB0aWNrZXRzLCBvcGVuLCBvbkNsb3NlU2xpZGVyIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBjbG9zZVNsaWRlciA9ICgpID0+IHtcbiAgICBvbkNsb3NlU2xpZGVyKCk7XG4gIH07XG4gIHJldHVybiAoXG4gICAgPFJpZ2h0RHJhd2VyXG4gICAgICBpZD1cInJlZnVuZC1kZXRhaWxzXCJcbiAgICAgIG9wZW49e29wZW59XG4gICAgICBvbkNsb3NlPXtjbG9zZVNsaWRlcn1cbiAgICAgIHRpdGxlPXt0KFwib3JkZXJfc3VtbWFyeS5yZWZ1bmRfZGV0YWlsc1wiKX1cbiAgICA+XG4gICAgICB7dGlja2V0cz8ubWFwKCh0aWNrZXQpID0+IChcbiAgICAgICAgPFJlZnVuZFJlcXVlc3RlZFRpY2tldFxuICAgICAgICAgIGtleT17YHJlZnVuZF9yZXFfJHt0aWNrZXQ/LmlkfWB9XG4gICAgICAgICAgdGlja2V0PXt0aWNrZXR9XG4gICAgICAgICAgcmVmdW5kRGV0YWlsc1xuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9SaWdodERyYXdlcj5cbiAgKTtcbn07XG5cblJlZnVuZERldGFpbHMucHJvcFR5cGVzID0ge1xuICB0aWNrZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihPYmplY3QpLFxuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25DbG9zZVNsaWRlcjogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlZnVuZERldGFpbHM7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBHcmlkIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCBTdGFjayBmcm9tIFwiQG11aS9tYXRlcmlhbC9TdGFja1wiO1xuaW1wb3J0IERlbGV0ZU91dGxpbmVJY29uIGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsL0RlbGV0ZU91dGxpbmVcIjtcbmltcG9ydCBBdHRlbmRlZVN0YXR1cyBmcm9tIFwiLi4vT3JkZXJzTGlzdC9BdHRlbmRlZVN0YXR1c1wiO1xuaW1wb3J0IFJlZnVuZFN0YXR1cyBmcm9tIFwiLi9SZWZ1bmRTdGF0dXNcIjtcbmltcG9ydCBDb3B5VGV4dCBmcm9tIFwiLi4vQ29weVRleHRcIjtcblxuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBSZWZ1bmRSZXF1ZXN0ZWRUaWNrZXQgPSAoeyB0aWNrZXQsIG9uUmVtb3ZlLCByZWZ1bmREZXRhaWxzIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuXG4gIHJldHVybiAoXG4gICAgPEdyaWRcbiAgICAgIGNvbnRhaW5lclxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucmVmdW5kVGlja2V0Qm94Q29udGFpbmVyfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJyZWZ1bmQtcmVxdWVzdGVkLXRpY2tldC1jb250YWluZXJcIlxuICAgID5cbiAgICAgIDxHcmlkIHhzPXsxMn0gcGFkZGluZz17Mn0gaXRlbSBqdXN0aWZ5PVwic3BhY2UtYmV0d2VlblwiPlxuICAgICAgICA8U3RhY2tcbiAgICAgICAgICBzeD17e1xuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiXG4gICAgICAgICAgfX1cbiAgICAgICAgICBkaXJlY3Rpb249XCJyb3dcIlxuICAgICAgICA+XG4gICAgICAgICAgPGg0Pnt0aWNrZXQudGlja2V0X3R5cGU/Lm5hbWV9PC9oND5cbiAgICAgICAgICB7IXJlZnVuZERldGFpbHMgJiYgKFxuICAgICAgICAgICAgPERlbGV0ZU91dGxpbmVJY29uXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicmVmdW5kLXJlbW92ZS1idXR0b25cIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5kZWxldGVJY29ufVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvblJlbW92ZSh0aWNrZXQpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICA8L1N0YWNrPlxuICAgICAgPC9HcmlkPlxuICAgICAgPEdyaWQgeHM9ezEyfSBwYWRkaW5nPXsyfSBpdGVtPlxuICAgICAgICA8QXR0ZW5kZWVTdGF0dXMgdGlja2V0PXt0aWNrZXR9IC8+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnRpY2tldE5vfT5cbiAgICAgICAgICB7dChcInRpY2tldF9zdGF0dXMudGlja2V0X25vXCIpfTp7XCIgXCJ9XG4gICAgICAgICAgPENvcHlUZXh0IHRleHQ9e3RpY2tldC5udW1iZXJ9IGhpZGVDb3B5IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvR3JpZD5cbiAgICAgIHtyZWZ1bmREZXRhaWxzICYmIChcbiAgICAgICAgPEdyaWQgeHM9ezEyfSBwYWRkaW5nPXsyfSBpdGVtPlxuICAgICAgICAgIDxSZWZ1bmRTdGF0dXMgdGlja2V0PXt0aWNrZXR9IC8+XG4gICAgICAgIDwvR3JpZD5cbiAgICAgICl9XG4gICAgPC9HcmlkPlxuICApO1xufTtcblxuUmVmdW5kUmVxdWVzdGVkVGlja2V0LnByb3BUeXBlcyA9IHtcbiAgdGlja2V0OiBQcm9wVHlwZXMub2JqZWN0LFxuICBvblJlbW92ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIHJlZnVuZERldGFpbHM6IFByb3BUeXBlcy5ib29sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWZ1bmRSZXF1ZXN0ZWRUaWNrZXQ7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IGdldFJlZnVuZFJlcXVlc3RlZFN0YXR1c0NvbG9yIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3RpY2tldFV0aWxzXCI7XG5cbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgUmVmdW5kU3RhdHVzID0gKHsgdGlja2V0IH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBzdGF0dXNDb2xvciA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZ2V0UmVmdW5kUmVxdWVzdGVkU3RhdHVzQ29sb3IodGlja2V0KSxcbiAgICBbdGlja2V0XVxuICApO1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgYXJpYS1sYWJlbD1cInRpY2tldCByZWZ1bmQgc3RhdHVzIGxhYmVsXCJcbiAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLmJ1dHRvblBpbGx9ICR7c3R5bGVzW3N0YXR1c0NvbG9yXX1gfVxuICAgID5cbiAgICAgIHt0KGB0aWNrZXRfc3RhdHVzLnJlZnVuZF9yZXF1ZXN0XyR7c3RhdHVzQ29sb3J9YCl9XG4gICAgPC9CdXR0b24+XG4gICk7XG59O1xuXG5SZWZ1bmRTdGF0dXMucHJvcFR5cGVzID0ge1xuICB0aWNrZXQ6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFJlZnVuZFN0YXR1cztcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2ggfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IEJveCwgQnV0dG9uLCBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgQ2hlY2tDaXJjbGVJY29uIGZyb20gXCJAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrQ2lyY2xlXCI7XG5pbXBvcnQgUmlnaHREcmF3ZXIgZnJvbSBcIi4uL1JpZ2h0RHJhd2VyXCI7XG5pbXBvcnQgUmVmdW5kUmVxdWVzdGVkVGlja2V0IGZyb20gXCIuL1JlZnVuZFJlcXVlc3RlZFRpY2tldFwiO1xuaW1wb3J0IEVycm9yTGFiZWwgZnJvbSBcIi4uL0xhYmVscy9FcnJvckxhYmVsXCI7XG5pbXBvcnQgeyByZWZ1bmRCdWxrVGlja2V0cywgdXBkYXRlVGlja2V0c1JlZnVuZFJlcXVlc3RlZCB9IGZyb20gXCIuLi8uLi9hY3Rpb25zXCI7XG5pbXBvcnQgeyBTVEVQX09ORSwgU1RFUF9UV08gfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IFJlZnVuZFJlcXVlc3RzTW9kYWwgPSAoe1xuICB0aWNrZXRzLFxuICBvcGVuLFxuICBvblJlbW92ZVNlbGVjdGVkUmVmdW5kVGlja2V0cyxcbiAgb25SZWZ1bmRTdWNjZXNzQ2xvc2UsXG4gIG9uQ2xvc2VTbGlkZXJcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG4gIGNvbnN0IFtzdGVwLCBzZXRTdGVwXSA9IHVzZVN0YXRlKFNURVBfT05FKTtcbiAgY29uc3QgW2Vycm9yTXNnLCBzZXRFcnJvck1zZ10gPSB1c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW3JlZnVuZFN1Y2Nlc3MsIHNldFJlZnVuZFN1Y2Nlc3NdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGNsb3NlU2xpZGVyID0gKCkgPT4ge1xuICAgIHNldEVycm9yTXNnKFwiXCIpO1xuICAgIG9uQ2xvc2VTbGlkZXIoKTtcbiAgICBzZXRTdGVwKFNURVBfT05FKTtcbiAgICBpZiAocmVmdW5kU3VjY2Vzcykge1xuICAgICAgb25SZWZ1bmRTdWNjZXNzQ2xvc2UoKTsgLy8gaWYgdGhlIHJlZnVuZCBpcyBhIHN1Y2Nlc3MsIHRyaWdnZXIgYW5kIHJlLXJldHJpZXZlIHRpY2tldHMgYnkgb3JkZXJcbiAgICAgIHNldFJlZnVuZFN1Y2Nlc3MoZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCByZWZ1bmRUaWNrZXRzID0gYXN5bmMgKCkgPT4ge1xuICAgIGRpc3BhdGNoKHJlZnVuZEJ1bGtUaWNrZXRzKHsgdGlja2V0cyB9KSkudGhlbigocmVzKSA9PiB7XG4gICAgICBkaXNwYXRjaCh1cGRhdGVUaWNrZXRzUmVmdW5kUmVxdWVzdGVkKHJlcykpOyAvLyByZXR1cm5pbmcgd2hpY2ggdGlja2V0cyB3ZXJlIHN1Y2Nlc3NmdWxcbiAgICAgIGlmIChyZXM/Lmxlbmd0aCA9PT0gdGlja2V0cy5sZW5ndGgpIHtcbiAgICAgICAgc2V0U3RlcChTVEVQX1RXTyk7IC8vIHN1Y2Nlc3MsIGFsbCByZWZ1bmRzIHdlcmUgcmVxdWVzdGVkXG4gICAgICAgIHNldFJlZnVuZFN1Y2Nlc3ModHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRFcnJvck1zZyh0KFwiZXJyb3JzLnJlZnVuZF91bnN1Y2Nlc3NmdWxcIikpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNldEVycm9yTXNnKFwiXCIpO1xuICB9O1xuXG4gIGNvbnN0IHJlZnVuZFN0ZXBPbmUgPSAoKSA9PiAoXG4gICAgPD5cbiAgICAgIDxoMiBjbGFzc05hbWU9e3N0eWxlcy5yZWZ1bmRUZXh0fT5cbiAgICAgICAge3QoXCJjb25maXJtX3BvcHVwLnF1ZXN0aW9uX3RleHRfY2FuY2VsXCIpfVxuICAgICAgPC9oMj5cbiAgICAgIHtlcnJvck1zZyAmJiAoXG4gICAgICAgIDxFcnJvckxhYmVsXG4gICAgICAgICAgY2xhc3NOYW1lcz17c3R5bGVzLnJlZnVuZEVycm9yTXNnfVxuICAgICAgICAgIGNvbG9yPVwiI0ZGMDAwMFwiXG4gICAgICAgICAgZGF0YVRlc3RJZD1cImZhaWxlZC1yZWZ1bmQtbWVzc2FnZVwiXG4gICAgICAgICAgbWVzc2FnZT17ZXJyb3JNc2d9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgPEJveD5cbiAgICAgICAge3RpY2tldHMubWFwKCh0aWNrZXQpID0+IChcbiAgICAgICAgICA8UmVmdW5kUmVxdWVzdGVkVGlja2V0XG4gICAgICAgICAgICBrZXk9e3RpY2tldC5pZH1cbiAgICAgICAgICAgIHRpY2tldD17dGlja2V0fVxuICAgICAgICAgICAgb25SZW1vdmU9e29uUmVtb3ZlU2VsZWN0ZWRSZWZ1bmRUaWNrZXRzfVxuICAgICAgICAgIC8+XG4gICAgICAgICkpfVxuICAgICAgPC9Cb3g+XG4gICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmFjdGlvbkJ1dHRvbnN9PlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgYXJpYS1sYWJlbD1cInJlZnVuZC1jYW5jZWwtYnV0dG9uXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jYW5jZWxCdXR0b259XG4gICAgICAgICAgb25DbGljaz17Y2xvc2VTbGlkZXJ9XG4gICAgICAgID5cbiAgICAgICAgICB7dChcImdlbmVyYWwuY2FuY2VsXCIpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJyZWZ1bmQtY29udGludWUtYnV0dG9uXCJcbiAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jb250aW51ZUJ1dHRvbn1cbiAgICAgICAgICBvbkNsaWNrPXtyZWZ1bmRUaWNrZXRzfVxuICAgICAgICA+XG4gICAgICAgICAge3QoXCJnZW5lcmFsLmNvbnRpbnVlXCIpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvQm94PlxuICAgIDwvPlxuICApO1xuXG4gIGNvbnN0IHJlZnVuZFN0ZXBUd28gPSAoKSA9PiAoXG4gICAgPEJveFxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucmVmdW5kU3VjY2Vzc2Z1bH1cbiAgICAgIGRhdGEtdGVzdGlkPVwicmVmdW5kLXJlcXVlc3Qtc3VjY2Vzc2Z1bFwiXG4gICAgPlxuICAgICAgPENoZWNrQ2lyY2xlSWNvbiBzeD17eyBjb2xvcjogXCIjNGNhZjUwXCIgfX0gLz5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnN1Y2Nlc3NNc2d9PlxuICAgICAgICB7dChcInRpY2tldHMucmVmdW5kX3JlcXVlc3Rfc3VjY2Vzc18xXCIpfVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3VjY2Vzc01zZzJ9PlxuICAgICAgICB7dChcInRpY2tldHMucmVmdW5kX3JlcXVlc3Rfc3VjY2Vzc18yXCIpfVxuICAgICAgPC9zcGFuPlxuICAgICAgPEJ1dHRvblxuICAgICAgICBhcmlhLWxhYmVsPVwicmVmdW5kLWZpbmlzaC1idXR0b25cIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY29udGludWVCdXR0b259XG4gICAgICAgIG9uQ2xpY2s9e2Nsb3NlU2xpZGVyfVxuICAgICAgPlxuICAgICAgICB7dChcImdlbmVyYWwuZmluaXNoXCIpfVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9Cb3g+XG4gICk7XG5cbiAgY29uc3QgcmVuZGVyU3RlcHMgPSAoKSA9PiB7XG4gICAgc3dpdGNoIChzdGVwKSB7XG4gICAgICBjYXNlIFNURVBfT05FOlxuICAgICAgICByZXR1cm4gcmVmdW5kU3RlcE9uZSgpO1xuICAgICAgY2FzZSBTVEVQX1RXTzpcbiAgICAgICAgcmV0dXJuIHJlZnVuZFN0ZXBUd28oKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiByZWZ1bmRTdGVwT25lKCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gKFxuICAgIDxTdHlsZWRFbmdpbmVQcm92aWRlciBpbmplY3RGaXJzdD5cbiAgICAgIDxSaWdodERyYXdlclxuICAgICAgICBpZD1cInJlZnVuZC1yZXF1ZXN0c1wiXG4gICAgICAgIG9wZW49e29wZW59XG4gICAgICAgIG9uQ2xvc2U9e2Nsb3NlU2xpZGVyfVxuICAgICAgICB0aXRsZT17dChcIm9yZGVyX3N1bW1hcnkucmVxdWVzdF9yZWZ1bmRcIil9XG4gICAgICAgIGRhdGEtdGVzdGlkPVwicmVmdW5kLXJlcXVlc3QtbW9kYWxcIlxuICAgICAgPlxuICAgICAgICB7cmVuZGVyU3RlcHMoKX1cbiAgICAgIDwvUmlnaHREcmF3ZXI+XG4gICAgPC9TdHlsZWRFbmdpbmVQcm92aWRlcj5cbiAgKTtcbn07XG5cblJlZnVuZFJlcXVlc3RzTW9kYWwucHJvcFR5cGVzID0ge1xuICB0aWNrZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihPYmplY3QpLFxuICBvcGVuOiBQcm9wVHlwZXMuYm9vbCxcbiAgb25SZW1vdmVTZWxlY3RlZFJlZnVuZFRpY2tldHM6IFByb3BUeXBlcy5mdW5jLFxuICBvblJlZnVuZFN1Y2Nlc3NDbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xvc2VTbGlkZXI6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWZ1bmRSZXF1ZXN0c01vZGFsO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgQm94LCBJY29uQnV0dG9uLCBUeXBvZ3JhcGh5LCBEcmF3ZXIgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgQ2xvc2UgYXMgQ2xvc2VJY29uIH0gZnJvbSBcIkBtdWkvaWNvbnMtbWF0ZXJpYWxcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgUmlnaHREcmF3ZXIgPSAoeyBpZCwgdGl0bGUsIGNoaWxkcmVuLCBvcGVuLCBvbkNsb3NlLCBjbGFzc05hbWUgfSkgPT4gKFxuICA8RHJhd2VyXG4gICAgaWQ9e2lkfVxuICAgIG9wZW49e29wZW59XG4gICAgb25DbG9zZT17b25DbG9zZX1cbiAgICBhbmNob3I9XCJyaWdodFwiXG4gICAgTW9kYWxQcm9wcz17eyBrZWVwTW91bnRlZDogZmFsc2UgfX1cbiAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy53cmFwcGVyfSAke2NsYXNzTmFtZX1gfVxuICA+XG4gICAgPEJveCBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgICAgPEljb25CdXR0b25cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjbG9zZS1kcmF3ZXJcIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZUJ0bn1cbiAgICAgICAgb25DbGljaz17b25DbG9zZX1cbiAgICAgICAgc3g9e3sgZmxvYXQ6IFwicmlnaHRcIiB9fVxuICAgICAgICBmb250U2l6ZT1cImxhcmdlXCJcbiAgICAgID5cbiAgICAgICAgPENsb3NlSWNvbiAvPlxuICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg1XCIgZ3V0dGVyQm90dG9tIGNsYXNzTmFtZT17c3R5bGVzLnRpdGxlfT5cbiAgICAgICAge3RpdGxlfVxuICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgIDwvQm94PlxuICAgIHtjaGlsZHJlbn1cbiAgPC9EcmF3ZXI+XG4pO1xuXG5SaWdodERyYXdlci5wcm9wVHlwZXMgPSB7XG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHRpdGxlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubm9kZV0pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSaWdodERyYXdlcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IFRleHRGaWVsZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VGb3JtaWsgfSBmcm9tIFwiZm9ybWlrXCI7XG5pbXBvcnQgKiBhcyB5dXAgZnJvbSBcInl1cFwiO1xuXG5pbXBvcnQgRm9ybUZvb3RlciBmcm9tIFwiLi4vLi4vLi4vRm9ybUZvb3RlclwiO1xuXG5jb25zdCBBc3NpZ25Gb3JtID0gKHsgb25TdWJtaXQsIG9uQ2xvc2UsIHNhdmVMYWJlbCB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcblxuICBjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWsoe1xuICAgIGluaXRpYWxWYWx1ZXM6IHtcbiAgICAgIG5ld19hdHRlbmRlZV9lbWFpbDogXCJcIixcbiAgICAgIHBlcnNvbmFsX21lc3NhZ2U6IFwiXCJcbiAgICB9LFxuICAgIHZhbGlkYXRpb25TY2hlbWE6IHl1cC5vYmplY3Qoe1xuICAgICAgbmV3X2F0dGVuZGVlX2VtYWlsOiB5dXBcbiAgICAgICAgLnN0cmluZyh0KFwidmFsaWRhdGlvbi5lbWFpbC5zdHJpbmdcIikpXG4gICAgICAgIC5lbWFpbCh0KFwidmFsaWRhdGlvbi5lbWFpbC5mb3JtYXRcIikpXG4gICAgICAgIC5yZXF1aXJlZCh0KFwidmFsaWRhdGlvbi5lbWFpbC5yZXF1aXJlZFwiKSksXG4gICAgICBwZXJzb25hbF9tZXNzYWdlOiB5dXAuc3RyaW5nKHQoXCJ2YWxpZGF0aW9uLnRleHQuc3RyaW5nXCIpKVxuICAgIH0pLFxuICAgIG9uU3VibWl0XG4gIH0pO1xuXG4gIHJldHVybiAoXG4gICAgPGZvcm0gb25TdWJtaXQ9e2Zvcm1pay5oYW5kbGVTdWJtaXR9IG5vVmFsaWRhdGU+XG4gICAgICA8VGV4dEZpZWxkXG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBuYW1lPVwibmV3X2F0dGVuZGVlX2VtYWlsXCJcbiAgICAgICAgbGFiZWw9e3QoXCJ0aWNrZXRfcmVhc3NpZ24ubmV3X2F0dGVuZGVlX2VtYWlsXCIpfVxuICAgICAgICB2YWx1ZT17Zm9ybWlrLnZhbHVlcy5uZXdfYXR0ZW5kZWVfZW1haWx9XG4gICAgICAgIG9uQ2hhbmdlPXtmb3JtaWsuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkJsdXI9e2Zvcm1pay5oYW5kbGVCbHVyfVxuICAgICAgICBlcnJvcj17XG4gICAgICAgICAgZm9ybWlrLnRvdWNoZWQubmV3X2F0dGVuZGVlX2VtYWlsICYmXG4gICAgICAgICAgQm9vbGVhbihmb3JtaWsuZXJyb3JzLm5ld19hdHRlbmRlZV9lbWFpbClcbiAgICAgICAgfVxuICAgICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgICBmb3JtaWsudG91Y2hlZC5uZXdfYXR0ZW5kZWVfZW1haWwgJiYgZm9ybWlrLmVycm9ycy5uZXdfYXR0ZW5kZWVfZW1haWxcbiAgICAgICAgfVxuICAgICAgICByZXF1aXJlZFxuICAgICAgLz5cbiAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgIG5hbWU9XCJwZXJzb25hbF9tZXNzYWdlXCJcbiAgICAgICAgbGFiZWw9e3QoXCJ0aWNrZXRfcmVhc3NpZ24ucGVyc29uYWxfbWVzc2FnZVwiKX1cbiAgICAgICAgdmFsdWU9e2Zvcm1pay52YWx1ZXMucGVyc29uYWxfbWVzc2FnZX1cbiAgICAgICAgbXVsdGlsaW5lXG4gICAgICAgIG1pblJvd3M9ezR9XG4gICAgICAgIG9uQ2hhbmdlPXtmb3JtaWsuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkJsdXI9e2Zvcm1pay5oYW5kbGVCbHVyfVxuICAgICAgICBlcnJvcj17XG4gICAgICAgICAgZm9ybWlrLnRvdWNoZWQucGVyc29uYWxfbWVzc2FnZSAmJlxuICAgICAgICAgIEJvb2xlYW4oZm9ybWlrLmVycm9ycy5wZXJzb25hbF9tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICAgIGhlbHBlclRleHQ9e1xuICAgICAgICAgIGZvcm1pay50b3VjaGVkLnBlcnNvbmFsX21lc3NhZ2UgJiYgZm9ybWlrLmVycm9ycy5wZXJzb25hbF9tZXNzYWdlXG4gICAgICAgIH1cbiAgICAgIC8+XG4gICAgICA8Rm9ybUZvb3RlclxuICAgICAgICBzYXZlTGFiZWw9e3NhdmVMYWJlbCB8fCB0KFwidGlja2V0X3JlYXNzaWduLnNhdmVcIil9XG4gICAgICAgIGNhbmNlbExhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLmNhbmNlbFwiKX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Zvcm1pay5pc1N1Ym1pdHRpbmd9XG4gICAgICAvPlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cbkFzc2lnbkZvcm0ucHJvcFR5cGVzID0ge1xuICBvblN1Ym1pdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgc2F2ZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBc3NpZ25Gb3JtO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNyBPcGVuU3RhY2sgRm91bmRhdGlvblxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICogKi9cblxuaW1wb3J0IFJlYWN0LCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZURpc3BhdGNoLCB1c2VTZWxlY3RvciB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgQm94LCBCdXR0b24sIFR5cG9ncmFwaHksIERpdmlkZXIgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHtcbiAgYXNzaWduQXR0ZW5kZWUsXG4gIGdldEV4dHJhUXVlc3Rpb25zLFxuICBnZXRUaWNrZXQsXG4gIHNhdmVFeHRyYVF1ZXN0aW9uc1xufSBmcm9tIFwiLi4vLi4vYWN0aW9uc1wiO1xuaW1wb3J0IFJpZ2h0RHJhd2VyIGZyb20gXCIuLi9SaWdodERyYXdlclwiO1xuaW1wb3J0IEFzc2lnbkVRRm9ybSBmcm9tIFwiLi4vQXNzaWduRVFGb3JtXCI7XG5pbXBvcnQgQXNzaWduRm9ybSBmcm9tIFwiLi9jb21wb25lbnRzL0Fzc2lnbkZvcm1cIjtcbmltcG9ydCB7IHRyYW5zZm9ybUFud2Vyc0Zvcm1hdCB9IGZyb20gXCIuLi9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL3V0aWxzXCI7XG5pbXBvcnQgeyBNSUxMSVNFQ19UT19TRUMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgQ29weVRleHQgZnJvbSBcIi4uL0NvcHlUZXh0XCI7XG5pbXBvcnQgQ3VzdG9tRGlhbG9nQ29udGV4dCBmcm9tIFwiLi4vQ3VzdG9tRGlhbG9nL0NvbnRleHRcIjtcbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgVGlja2V0QXNzaWduID0gKHtcbiAgc3VtbWl0LFxuICB0aWNrZXRJZCxcbiAgb3JkZXJJZCxcbiAgb3duZXJJZCxcbiAgb3BlbixcbiAgb25DbG9zZVxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgW3RpY2tldEFzc2lnbmVkLCBzZXRUaWNrZXRBc3NpZ25lZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgc2V0TWVzc2FnZSwgc2V0TWVzc2FnZUNhbGxiYWNrIH0gPSB1c2VDb250ZXh0KEN1c3RvbURpYWxvZ0NvbnRleHQpO1xuICBjb25zdCB7XG4gICAgY3VycmVudFRpY2tldDogdGlja2V0LFxuICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgIHVzZXI6IHsgdXNlclByb2ZpbGUgfVxuICB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS53aWRnZXRTdGF0ZSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGlja2V0SWQgJiYgb3JkZXJJZCAmJiBvcGVuKSB7XG4gICAgICBkaXNwYXRjaChnZXRUaWNrZXQodGlja2V0SWQsIG9yZGVySWQpKTtcbiAgICB9XG4gIH0sIFt0aWNrZXRJZCwgb3JkZXJJZCwgb3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG93bmVySWQgJiYgb3Blbikge1xuICAgICAgZGlzcGF0Y2goZ2V0RXh0cmFRdWVzdGlvbnMob3duZXJJZCkpO1xuICAgIH1cbiAgfSwgW293bmVySWRdKTtcblxuICBjb25zdCBvbkFzc2lnblRvT3RoZXIgPSAodmFsKSA9PiB7XG4gICAgY29uc3QgeyBuZXdfYXR0ZW5kZWVfZW1haWwsIHBlcnNvbmFsX21lc3NhZ2UgfSA9IHZhbDtcbiAgICByZXR1cm4gZGlzcGF0Y2goXG4gICAgICBhc3NpZ25BdHRlbmRlZShvcmRlcklkLCB0aWNrZXRJZCwgbmV3X2F0dGVuZGVlX2VtYWlsLCBwZXJzb25hbF9tZXNzYWdlKVxuICAgICkudGhlbigoKSA9PiB7XG4gICAgICBzZXRUaWNrZXRBc3NpZ25lZCh0cnVlKTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBvbkFzc2lnblRvTWUgPSAoKSA9PlxuICAgIGRpc3BhdGNoKGFzc2lnbkF0dGVuZGVlKG9yZGVySWQsIHRpY2tldElkLCB1c2VyUHJvZmlsZS5lbWFpbCkpLnRoZW4oKCkgPT4ge1xuICAgICAgc2V0VGlja2V0QXNzaWduZWQodHJ1ZSk7XG4gICAgfSk7XG5cbiAgY29uc3Qgb25DbG9zZUVRRm9ybSA9ICgpID0+IHtcbiAgICBzZXRUaWNrZXRBc3NpZ25lZChmYWxzZSk7XG4gICAgb25DbG9zZSgpO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xvc2VTYXZlTWVzc2FnZSA9ICgpID0+IHtcbiAgICBzZXRUaWNrZXRBc3NpZ25lZChmYWxzZSk7XG4gICAgc2V0VGltZW91dChvbkNsb3NlLCBNSUxMSVNFQ19UT19TRUMpO1xuICB9O1xuXG4gIGNvbnN0IG9uU2F2ZUVRID0gKHZhbCkgPT4ge1xuICAgIGNvbnN0IGFuc3dlcnMgPSB0cmFuc2Zvcm1BbndlcnNGb3JtYXQodmFsKTtcblxuICAgIHJldHVybiBkaXNwYXRjaChzYXZlRXh0cmFRdWVzdGlvbnModGlja2V0LCBhbnN3ZXJzKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgc2V0TWVzc2FnZSh7XG4gICAgICAgICAgdGl0bGU6IHQoXCJ0aWNrZXRfYXNzaWduLnNhdmluZ19zdWNjZXNzXCIpLFxuICAgICAgICAgIGJvZHk6IHQoXCJ0aWNrZXRfYXNzaWduLnNhdmluZ19zdWNjZXNzX2Rlc2NyaXB0aW9uXCIpXG4gICAgICAgIH0pO1xuICAgICAgICBzZXRNZXNzYWdlQ2FsbGJhY2sob25DbG9zZVNhdmVNZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHNldE1lc3NhZ2Uoe1xuICAgICAgICAgIHRpdGxlOiB0KFwidGlja2V0X2Fzc2lnbi5zYXZpbmdfZXJyb3JcIiksXG4gICAgICAgICAgYm9keTogZXJyLnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xuICAgICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8UmlnaHREcmF3ZXJcbiAgICAgIGlkPVwicmVhc3NpZ25EcmF3ZXJcIlxuICAgICAgdGl0bGU9e3QoXCJ0aWNrZXRfYXNzaWduLmFzc2lnbl90aWNrZXRcIil9XG4gICAgICBvcGVuPXtvcGVufVxuICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRpY2tldEFzc2lnbkNvbnRhaW5lcn1cbiAgICA+XG4gICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmFsaWduQ2VudGVyfT5cbiAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkxXCIgZ3V0dGVyQm90dG9tIGNsYXNzTmFtZT17c3R5bGVzLnN1YnRpdGxlfT5cbiAgICAgICAgICB7dChcInRpY2tldF9hc3NpZ24ucHVyY2hhc2VkX2J5XCIpfSB7dGlja2V0Py5vcmRlcj8ub3duZXJfZW1haWx9XG4gICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkxXCIgZ3V0dGVyQm90dG9tIGNsYXNzTmFtZT17c3R5bGVzLm9yZGVyTm99PlxuICAgICAgICAgIDxDb3B5VGV4dFxuICAgICAgICAgICAgdGV4dD17dGlja2V0Py5vcmRlcj8ubnVtYmVyfVxuICAgICAgICAgICAgcmV2ZXJzZWRcbiAgICAgICAgICAgIHdpZHRoPXsyNTB9XG4gICAgICAgICAgICB0b29sdGlwVGV4dD17dChcIm9yZGVyX3N1bW1hcnkuY29weV9vcmRlcl9udW1iZXJcIil9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgPC9Cb3g+XG4gICAgICB7dGlja2V0ICYmICF0aWNrZXRBc3NpZ25lZCAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPEJveCBjbGFzc05hbWU9e3N0eWxlcy5hbGlnbkNlbnRlcn0+XG4gICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDRcIiBndXR0ZXJCb3R0b20gY2xhc3NOYW1lPXtzdHlsZXMudGlja2V0VHlwZX0+XG4gICAgICAgICAgICAgIHt0aWNrZXQ/LnR5cGU/Lm5hbWV9XG4gICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmFzc2lnbkJ0bn1cbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgdmFyaWFudD1cImNvbnRhaW5lZFwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e29uQXNzaWduVG9NZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfYXNzaWduLmFzc2lnbl90b19tZVwiKX1cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDxEaXZpZGVyIHZhcmlhbnQ9XCJtaWRkbGVcIj4mbmJzcDsmbmJzcDtvciZuYnNwOyZuYnNwOzwvRGl2aWRlcj5cbiAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlQ29udGFpbmVyfT5cbiAgICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuYWxpZ25DZW50ZXJ9PlxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJoNFwiXG4gICAgICAgICAgICAgICAgZ3V0dGVyQm90dG9tXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYXR0ZW5kZWVJbmZvVGl0bGV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dChcInRpY2tldF9hc3NpZ24uYXNzaWduX3RvX3NvbWVvbmVfZWxzZVwiKX1cbiAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJib2R5MVwiXG4gICAgICAgICAgICAgICAgZ3V0dGVyQm90dG9tXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYXR0ZW5kZWVJbmZvTm90ZX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt0KFwidGlja2V0X2Fzc2lnbi5lbnRlcl9lbWFpbF9ub3RlXCIpfVxuICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgIDxBc3NpZ25Gb3JtXG4gICAgICAgICAgICAgIG9uU3VibWl0PXtvbkFzc2lnblRvT3RoZXJ9XG4gICAgICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgICAgICAgIHNhdmVMYWJlbD17dChcInRpY2tldF9hc3NpZ24uc2F2ZV9sYWJlbFwiKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgIDwvPlxuICAgICAgKX1cbiAgICAgIHt0aWNrZXQgJiYgdGlja2V0QXNzaWduZWQgJiYgKFxuICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlQ29udGFpbmVyfT5cbiAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmFsaWduQ2VudGVyfT5cbiAgICAgICAgICAgIDxUeXBvZ3JhcGh5XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJoNFwiXG4gICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hdHRlbmRlZUluZm9UaXRsZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfYXNzaWduLmFzc2lnbl90b19zb21lb25lX2Vsc2VcIil9XG4gICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICB2YXJpYW50PVwiYm9keTFcIlxuICAgICAgICAgICAgICBndXR0ZXJCb3R0b21cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuYXR0ZW5kZWVJbmZvTm90ZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfYXNzaWduLmVudGVyX2VtYWlsX25vdGVcIil9XG4gICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPEFzc2lnbkZvcm1cbiAgICAgICAgICAgIG9uU3VibWl0PXtvbkFzc2lnblRvT3RoZXJ9XG4gICAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgICAgc2F2ZUxhYmVsPXt0KFwidGlja2V0X2Fzc2lnbi5zYXZlX2xhYmVsXCIpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cbiAgICAgIHt0aWNrZXQgJiYgdGlja2V0QXNzaWduZWQgJiYgKFxuICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlQ29udGFpbmVyfT5cbiAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmFsaWduQ2VudGVyfT5cbiAgICAgICAgICAgIDxUeXBvZ3JhcGh5XG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJoNFwiXG4gICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hdHRlbmRlZUluZm9UaXRsZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfYXNzaWduLmFzc2lnbmVkX3RvXCIpfVxuICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAge3RpY2tldD8ub3duZXI/LmVtYWlsfVxuICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgPFR5cG9ncmFwaHlcbiAgICAgICAgICAgICAgdmFyaWFudD1cImJvZHkxXCJcbiAgICAgICAgICAgICAgZ3V0dGVyQm90dG9tXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlSW5mb05vdGV9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KFwidGlja2V0X2Fzc2lnbi5jb21wbGV0ZV9pbmZvXCIpfVxuICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDxBc3NpZ25FUUZvcm1cbiAgICAgICAgICAgIHRpY2tldD17dGlja2V0fVxuICAgICAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgICAgICBleHRyYVF1ZXN0aW9ucz17ZXh0cmFRdWVzdGlvbnN9XG4gICAgICAgICAgICBvblN1Ym1pdD17b25TYXZlRVF9XG4gICAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlRVFGb3JtfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cbiAgICA8L1JpZ2h0RHJhd2VyPlxuICApO1xufTtcblxuVGlja2V0QXNzaWduLnByb3BUeXBlcyA9IHtcbiAgc3VtbWl0OiBQcm9wVHlwZXMub2JqZWN0LFxuICB0aWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgb3JkZXJJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgb3duZXJJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWNrZXRBc3NpZ247XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBUZXh0RmllbGQsIEF1dG9jb21wbGV0ZSwgVHlwb2dyYXBoeSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyBxdWVyeVJlZ2lzdHJhdGlvbkNvbXBhbmllcyB9IGZyb20gXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3V0aWxzL3F1ZXJ5LWFjdGlvbnNcIjtcbmltcG9ydCB7IFRJQ0tFVF9BVFRFTkRFRV9LRVlTIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5jb25zdCBDb21wYW55RmllbGQgPSAoeyBmb3JtaWssIHN1bW1pdElkLCBpc1JlcXVpcmVkIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZShcIlwiKTtcbiAgY29uc3QgW29wdGlvbnMsIHNldE9wdGlvbnNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCB7IGVycm9ycywgdmFsdWVzLCB0b3VjaGVkLCBzZXRGaWVsZFRvdWNoZWQsIHNldEZpZWxkVmFsdWUgfSA9IGZvcm1paztcbiAgY29uc3QgbmFtZSA9IFRJQ0tFVF9BVFRFTkRFRV9LRVlTLmNvbXBhbnk7XG4gIGNvbnN0IHZhbHVlID0gdmFsdWVzW25hbWVdO1xuICBjb25zdCBlcnJvciA9IHRvdWNoZWRbbmFtZV0gJiYgQm9vbGVhbihlcnJvcnNbbmFtZV0pO1xuICBjb25zdCBoZWxwZXJUZXh0ID0gdG91Y2hlZFtuYW1lXSAmJiBlcnJvcnNbbmFtZV07XG5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgc2V0T3B0aW9ucyh2YWx1ZSA/IFt2YWx1ZV0gOiBbXSk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHF1ZXJ5UmVnaXN0cmF0aW9uQ29tcGFuaWVzKHN1bW1pdElkLCBpbnB1dFZhbHVlLCAocmVzdWx0cykgPT4ge1xuICAgICAgbGV0IG5ld09wdGlvbnMgPSBbXTtcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIG5ld09wdGlvbnMgPSBbdmFsdWVdO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0cykge1xuICAgICAgICBuZXdPcHRpb25zID0gWy4uLm5ld09wdGlvbnMsIC4uLnJlc3VsdHNdO1xuICAgICAgfVxuXG4gICAgICBzZXRPcHRpb25zKG5ld09wdGlvbnMpO1xuICAgIH0pO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0sIFt2YWx1ZSwgaW5wdXRWYWx1ZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPEF1dG9jb21wbGV0ZVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBhdXRvQ29tcGxldGVcbiAgICAgIGZyZWVTb2xvXG4gICAgICBpbmNsdWRlSW5wdXRJbkxpc3RcbiAgICAgIGZpbHRlclNlbGVjdGVkT3B0aW9uc1xuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgb25CbHVyPXsoKSA9PiBzZXRGaWVsZFRvdWNoZWQobmFtZSwgdHJ1ZSwgdHJ1ZSl9XG4gICAgICBnZXRPcHRpb25MYWJlbD17KG9wdGlvbikgPT4ge1xuICAgICAgICAvLyBWYWx1ZSBzZWxlY3RlZCB3aXRoIGVudGVyLCByaWdodCBmcm9tIHRoZSBpbnB1dFxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWRkIFwieHh4XCIgb3B0aW9uIGNyZWF0ZWQgZHluYW1pY2FsbHlcbiAgICAgICAgaWYgKG9wdGlvbi5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbi5pbnB1dFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZ3VsYXIgb3B0aW9uXG4gICAgICAgIHJldHVybiBvcHRpb24ubmFtZTtcbiAgICAgIH19XG4gICAgICBvbkNoYW5nZT17KGV2ZW50LCBuZXdWYWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0bXBWYWx1ZSA9IG5ld1ZhbHVlPy5pbnB1dFZhbHVlIHx8IG5ld1ZhbHVlO1xuICAgICAgICBzZXRPcHRpb25zKHRtcFZhbHVlID8gW3RtcFZhbHVlLCAuLi5vcHRpb25zXSA6IG9wdGlvbnMpO1xuICAgICAgICBzZXRGaWVsZFZhbHVlKG5hbWUsIHRtcFZhbHVlKTtcbiAgICAgIH19XG4gICAgICBvbklucHV0Q2hhbmdlPXsoZXZlbnQsIG5ld0lucHV0VmFsdWUpID0+IHtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZShuZXdJbnB1dFZhbHVlKTtcbiAgICAgIH19XG4gICAgICBmaWx0ZXJPcHRpb25zPXsob3B0aW9ucywgcGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaW5wdXRWYWx1ZSB9ID0gcGFyYW1zO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IFsuLi5vcHRpb25zXTtcbiAgICAgICAgLy8gU3VnZ2VzdCB0aGUgY3JlYXRpb24gb2YgYSBuZXcgdmFsdWVcbiAgICAgICAgY29uc3QgaXNFeGlzdGluZyA9IG9wdGlvbnMuc29tZShcbiAgICAgICAgICAob3B0aW9uKSA9PiBpbnB1dFZhbHVlID09PSBvcHRpb24udGl0bGVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlucHV0VmFsdWUgIT09IFwiXCIgJiYgIWlzRXhpc3RpbmcpIHtcbiAgICAgICAgICBmaWx0ZXJlZC5wdXNoKHtcbiAgICAgICAgICAgIGlucHV0VmFsdWUsXG4gICAgICAgICAgICBuYW1lOiBgU2VsZWN0IFwiJHtpbnB1dFZhbHVlfVwiYFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgICAgfX1cbiAgICAgIHJlbmRlcklucHV0PXsocGFyYW1zKSA9PiAoXG4gICAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvanN4LXByb3BzLW5vLXNwcmVhZGluZyAqL1xuICAgICAgICAgIHsuLi5wYXJhbXN9XG4gICAgICAgICAgbGFiZWw9e3QoXCJ0aWNrZXRfZGV0YWlsLmF0dGVuZGVlX2NvbXBhbnlcIil9XG4gICAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICAgICAgaGVscGVyVGV4dD17aGVscGVyVGV4dH1cbiAgICAgICAgICBlcnJvcj17ZXJyb3J9XG4gICAgICAgIC8+XG4gICAgICApfVxuICAgICAgcmVuZGVyT3B0aW9uPXsocHJvcHMsIG9wdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB7IGtleSwgLi4ub3B0aW9uUHJvcHMgfSA9IHByb3BzO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9qc3gtcHJvcHMtbm8tc3ByZWFkaW5nXG4gICAgICAgICAgPGxpIGtleT17a2V5fSB7Li4ub3B0aW9uUHJvcHN9PlxuICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImJvZHkyXCIgc3g9e3sgY29sb3I6IFwidGV4dC5zZWNvbmRhcnlcIiB9fT5cbiAgICAgICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgICk7XG4gICAgICB9fVxuICAgIC8+XG4gICk7XG59O1xuXG5Db21wYW55RmllbGQucHJvcFR5cGVzID0ge1xuICBmb3JtaWs6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgc3VtbWl0SWQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29tcGFueUZpZWxkO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHtcbiAgQm94LFxuICBDaGVja2JveCxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Db250cm9sTGFiZWwsXG4gIEZvcm1IZWxwZXJUZXh0XG59IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgUmF3SFRNTCBmcm9tIFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi9jb21wb25lbnRzL3Jhdy1odG1sXCI7XG5pbXBvcnQgeyBUSUNLRVRfQVRURU5ERUVfS0VZUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcblxuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBSZWdpc3RyYXRpb25EaXNjbGFpbWVyID0gKHtcbiAgZGlzY2xhaW1lcixcbiAgZm9ybWlrLFxuICBpc0Rpc2FibGVkID0gZmFsc2UsXG4gIGlzUmVxdWlyZWQgPSB0cnVlXG59KSA9PiB7XG4gIGNvbnN0IG5hbWUgPSBUSUNLRVRfQVRURU5ERUVfS0VZUy5kaXNjbGFpbWVyQWNjZXB0ZWQ7XG4gIGNvbnN0IHsgZXJyb3JzLCB2YWx1ZXMsIHRvdWNoZWQsIGhhbmRsZUNoYW5nZSwgaGFuZGxlQmx1ciB9ID0gZm9ybWlrO1xuICBjb25zdCB2YWx1ZSA9IHZhbHVlc1tuYW1lXTtcbiAgY29uc3QgZXJyb3IgPSB0b3VjaGVkW25hbWVdICYmIEJvb2xlYW4oZXJyb3JzW25hbWVdKTtcbiAgY29uc3QgaGVscGVyVGV4dCA9IHRvdWNoZWRbbmFtZV0gJiYgZXJyb3JzW25hbWVdO1xuXG4gIHJldHVybiAoXG4gICAgPEJveCBjbGFzc05hbWU9e3N0eWxlcy53cmFwcGVyfT5cbiAgICAgIDxGb3JtQ29udHJvbCBmdWxsV2lkdGggZXJyb3I9e2Vycm9yfT5cbiAgICAgICAgPEZvcm1Db250cm9sTGFiZWxcbiAgICAgICAgICBjb250cm9sPXtcbiAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICAgICAgICBjaGVja2VkPXshIXZhbHVlfVxuICAgICAgICAgICAgICBsYWJlbD17PFJhd0hUTUw+e2Rpc2NsYWltZXJ9PC9SYXdIVE1MPn1cbiAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgb25CbHVyPXtoYW5kbGVCbHVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgbGFiZWw9ezxSYXdIVE1MPntkaXNjbGFpbWVyfTwvUmF3SFRNTD59XG4gICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWR9XG4gICAgICAgICAgcmVxdWlyZWQ9e2lzUmVxdWlyZWR9XG4gICAgICAgIC8+XG4gICAgICAgIHtlcnJvciAmJiA8Rm9ybUhlbHBlclRleHQ+e2hlbHBlclRleHQgPz8gXCIgXCJ9PC9Gb3JtSGVscGVyVGV4dD59XG4gICAgICA8L0Zvcm1Db250cm9sPlxuICAgIDwvQm94PlxuICApO1xufTtcblxuUmVnaXN0cmF0aW9uRGlzY2xhaW1lci5wcm9wVHlwZXMgPSB7XG4gIGRpc2NsYWltZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZm9ybWlrOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGlzRGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBpc1JlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgUmVnaXN0cmF0aW9uRGlzY2xhaW1lcjtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IFRleHRGaWVsZCB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5cbmNvbnN0IFRpY2tldERlbGVnYXRpb25GaWVsZHMgPSAoeyBmb3JtaWsgfSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFRleHRGaWVsZFxuICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgaWQ9XCJkZWxlZ2F0ZWRfZmlyc3RfbmFtZVwiXG4gICAgICAgIGxhYmVsPXt0KFwidGlja2V0X2RldGFpbC5maXJzdF9uYW1lXCIpfVxuICAgICAgICB2YWx1ZT17Zm9ybWlrLnZhbHVlcy5kZWxlZ2F0ZWRfZmlyc3RfbmFtZX1cbiAgICAgICAgb25DaGFuZ2U9e2Zvcm1pay5oYW5kbGVDaGFuZ2V9XG4gICAgICAgIG9uQmx1cj17Zm9ybWlrLmhhbmRsZUJsdXJ9XG4gICAgICAgIGVycm9yPXtcbiAgICAgICAgICBmb3JtaWsudG91Y2hlZC5kZWxlZ2F0ZWRfZmlyc3RfbmFtZSAmJlxuICAgICAgICAgIEJvb2xlYW4oZm9ybWlrLmVycm9ycy5kZWxlZ2F0ZWRfZmlyc3RfbmFtZSlcbiAgICAgICAgfVxuICAgICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgICBmb3JtaWsudG91Y2hlZC5kZWxlZ2F0ZWRfZmlyc3RfbmFtZSAmJlxuICAgICAgICAgIGZvcm1pay5lcnJvcnMuZGVsZWdhdGVkX2ZpcnN0X25hbWVcbiAgICAgICAgfVxuICAgICAgLz5cbiAgICAgIDxUZXh0RmllbGRcbiAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgIGlkPVwiZGVsZWdhdGVkX2xhc3RfbmFtZVwiXG4gICAgICAgIGxhYmVsPXt0KFwidGlja2V0X2RldGFpbC5sYXN0X25hbWVcIil9XG4gICAgICAgIHZhbHVlPXtmb3JtaWsudmFsdWVzLmRlbGVnYXRlZF9sYXN0X25hbWV9XG4gICAgICAgIG9uQ2hhbmdlPXtmb3JtaWsuaGFuZGxlQ2hhbmdlfVxuICAgICAgICBvbkJsdXI9e2Zvcm1pay5oYW5kbGVCbHVyfVxuICAgICAgICBlcnJvcj17XG4gICAgICAgICAgZm9ybWlrLnRvdWNoZWQuZGVsZWdhdGVkX2xhc3RfbmFtZSAmJlxuICAgICAgICAgIEJvb2xlYW4oZm9ybWlrLmVycm9ycy5kZWxlZ2F0ZWRfbGFzdF9uYW1lKVxuICAgICAgICB9XG4gICAgICAgIGhlbHBlclRleHQ9e1xuICAgICAgICAgIGZvcm1pay50b3VjaGVkLmRlbGVnYXRlZF9sYXN0X25hbWUgJiZcbiAgICAgICAgICBmb3JtaWsuZXJyb3JzLmRlbGVnYXRlZF9sYXN0X25hbWVcbiAgICAgICAgfVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cblRpY2tldERlbGVnYXRpb25GaWVsZHMucHJvcFR5cGVzID0ge1xuICBmb3JtaWs6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGlja2V0RGVsZWdhdGlvbkZpZWxkcztcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IEJveCwgVHlwb2dyYXBoeSB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VGb3JtaWsgfSBmcm9tIFwiZm9ybWlrXCI7XG5pbXBvcnQgRXh0cmFRdWVzdGlvbnNGaWVsZHMgZnJvbSBcIi4uLy4uLy4uL0V4dHJhUXVlc3Rpb25zRmllbGRzXCI7XG5cbmltcG9ydCB7XG4gIGdldFR5cGVWYWx1ZSxcbiAgdG9TbHVnXG59IGZyb20gXCIuLi8uLi8uLi9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL3V0aWxzXCI7XG5cbmltcG9ydCBUaWNrZXREZWxlZ2F0aW9uRmllbGRzIGZyb20gXCIuLi9UaWNrZXREZWxlZ2F0aW9uRmllbGRzXCI7XG5pbXBvcnQgVGlja2V0T3duZXJGaWVsZHMgZnJvbSBcIi4uL1RpY2tldE93bmVyRmllbGRzXCI7XG5pbXBvcnQgUmVnaXN0cmF0aW9uRGlzY2xhaW1lciBmcm9tIFwiLi4vUmVnaXN0cmF0aW9uRGlzY2xhaW1lci9SZWdpc3RyYXRpb25EaXNjbGFpbWVyXCI7XG5pbXBvcnQgRm9ybUZvb3RlciBmcm9tIFwiLi4vLi4vLi4vRm9ybUZvb3RlclwiO1xuaW1wb3J0IHVzZVNjcm9sbFRvRXJyb3IgZnJvbSBcIi4uLy4uLy4uLy4uL2hvb2tzL3VzZVNjcm9sbFRvRXJyb3JcIjtcbmltcG9ydCB7XG4gIHBhcnNlQW5zd2VycyxcbiAgYnVpbGRWYWxpZGF0aW9uU2NoZW1hXG59IGZyb20gXCIuLi8uLi8uLi8uLi91dGlscy90aWNrZXRVdGlsc1wiO1xuXG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4uLy4uL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuXG5jb25zdCBUaWNrZXRGb3JtID0gKHtcbiAgdGlja2V0LFxuICBleHRyYVF1ZXN0aW9ucyxcbiAgc3VtbWl0LFxuICBjYW5FZGl0LFxuICBvblN1Ym1pdCxcbiAgb25DbG9zZVxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IHRpY2tldE1hbmFnZXIgPSB0aWNrZXQ/Lm1hbmFnZXI7XG4gIC8qIERJU0FCTEUgREVMRUdBVElPTiBGVE0gKi9cbiAgY29uc3QgYWxsb3dzRGVsZWdhdGlvbiA9IHRpY2tldD8udGlja2V0X3R5cGU/LmFsbG93c190b19kZWxlZ2F0ZSAmJiBmYWxzZTtcbiAgY29uc3QgYW5zd2VycyA9IHRpY2tldD8ub3duZXI/LmV4dHJhX3F1ZXN0aW9ucy5yZWR1Y2UoKHJlcywgYW5zKSA9PiB7XG4gICAgY29uc3QgcXVlc3Rpb25TbHVnID0gdG9TbHVnKGFucy5xdWVzdGlvbi5uYW1lLCBhbnMucXVlc3Rpb24uaWQpO1xuICAgIHJlc1txdWVzdGlvblNsdWddID0gZ2V0VHlwZVZhbHVlKGFucy52YWx1ZSwgYW5zLnF1ZXN0aW9uLnR5cGUpO1xuICAgIHJldHVybiByZXM7XG4gIH0sIHt9KTtcblxuICBjb25zdCBmb3JtaWsgPSB1c2VGb3JtaWsoe1xuICAgIGluaXRpYWxWYWx1ZXM6IHBhcnNlQW5zd2VycyhcbiAgICAgIHRpY2tldC5vd25lcixcbiAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgYW5zd2VycyxcbiAgICAgIHRpY2tldE1hbmFnZXIsXG4gICAgICBhbGxvd3NEZWxlZ2F0aW9uLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRydWVcbiAgICApLFxuICAgIHZhbGlkYXRpb25TY2hlbWE6IGJ1aWxkVmFsaWRhdGlvblNjaGVtYShcbiAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgdHJ1ZSxcbiAgICAgIGFsbG93c0RlbGVnYXRpb24sXG4gICAgICBzdW1taXQucmVnaXN0cmF0aW9uX2Rpc2NsYWltZXJfbWFuZGF0b3J5XG4gICAgKSxcbiAgICBvblN1Ym1pdDogKHZhbHVlcykgPT4ge1xuICAgICAgY29uc3QgcmVsZXZhbnRBbnN3ZXJzID0gcGFyc2VBbnN3ZXJzKFxuICAgICAgICB0aWNrZXQub3duZXIsXG4gICAgICAgIGV4dHJhUXVlc3Rpb25zLFxuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHRpY2tldE1hbmFnZXIsXG4gICAgICAgIGFsbG93c0RlbGVnYXRpb24sXG4gICAgICAgIHRydWUsXG4gICAgICAgIHRydWUsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBvblN1Ym1pdChyZWxldmFudEFuc3dlcnMpO1xuICAgIH0sXG4gICAgZW5hYmxlUmVpbml0aWFsaXplOiB0cnVlXG4gIH0pO1xuXG4gIC8vIGNvbnNvbGUubG9nKFwiU1VNTUlUOiBcIiwgc3VtbWl0KTtcbiAgLy8gY29uc29sZS5sb2coXCJUSUNLRVQ6IFwiLCB0aWNrZXQpO1xuICAvLyBjb25zb2xlLmxvZyhcIlFVRVNUSVVPTnM6IFwiLCBleHRyYVF1ZXN0aW9ucyk7XG4gIC8vIGNvbnNvbGUubG9nKFwiQU5TV0VSUzogXCIsIGFuc3dlcnMpO1xuICAvLyBjb25zb2xlLmxvZyhcIkVSUk9SczogXCIsIGZvcm1pay5lcnJvcnMpO1xuICAvLyBjb25zb2xlLmxvZyhcIlZBTFVFUzogXCIsIGZvcm1pay52YWx1ZXMpO1xuICAvLyBjb25zb2xlLmxvZyhcIklOSVRJQUw6IFwiLCBmb3JtaWsuaW5pdGlhbFZhbHVlcyk7XG4gIC8vIGNvbnNvbGUubG9nKFwiVE9VQ0hFRDogXCIsIGZvcm1pay50b3VjaGVkKTtcblxuICAvLyBTQ1JPTEwgVE8gRVJST1JcbiAgdXNlU2Nyb2xsVG9FcnJvcihmb3JtaWssIFwiZGV0YWlsc0RyYXdlclwiKTtcblxuICByZXR1cm4gKFxuICAgIDxmb3JtIG9uU3VibWl0PXtmb3JtaWsuaGFuZGxlU3VibWl0fSBub1ZhbGlkYXRlPlxuICAgICAgPFRpY2tldE93bmVyRmllbGRzXG4gICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICBvd25lcj17dGlja2V0Lm93bmVyfVxuICAgICAgICBzdW1taXRJZD17c3VtbWl0LmlkfVxuICAgICAgICBkaXNhYmxlZD17IWNhbkVkaXR9XG4gICAgICAvPlxuXG4gICAgICB7YWxsb3dzRGVsZWdhdGlvbiAmJiAoXG4gICAgICAgIDxCb3g+XG4gICAgICAgICAgPFR5cG9ncmFwaHlcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJzdWJ0aXRsZTJcIlxuICAgICAgICAgICAgZ3V0dGVyQm90dG9tXG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5kZWxlZ2F0ZWRUb31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dChcInRpY2tldF9kZXRhaWwuZGVsZWdhdGVkX3RvXCIpfVxuICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICA8VGlja2V0RGVsZWdhdGlvbkZpZWxkcyBmb3JtaWs9e2Zvcm1pa30gLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuXG4gICAgICB7ZXh0cmFRdWVzdGlvbnM/Lmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8Qm94PlxuICAgICAgICAgIDxoNiBjbGFzc05hbWU9e3N0eWxlcy5hZGRpdGlvbmFsRGV0YWlsc30+XG4gICAgICAgICAgICB7dChcInRpY2tldF9kZXRhaWwuYWRpdGlvbmFsX2RldGFpbHNcIil9XG4gICAgICAgICAgPC9oNj5cbiAgICAgICAgICA8RXh0cmFRdWVzdGlvbnNGaWVsZHNcbiAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zPXtleHRyYVF1ZXN0aW9uc31cbiAgICAgICAgICAgIGFsbG93RWRpdD17Y2FuRWRpdH1cbiAgICAgICAgICAgIGZvcm1paz17Zm9ybWlrfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvQm94PlxuICAgICAgKX1cblxuICAgICAge3N1bW1pdC5yZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9jb250ZW50ICYmIChcbiAgICAgICAgPFJlZ2lzdHJhdGlvbkRpc2NsYWltZXJcbiAgICAgICAgICBmb3JtaWs9e2Zvcm1pa31cbiAgICAgICAgICBkaXNjbGFpbWVyPXtzdW1taXQucmVnaXN0cmF0aW9uX2Rpc2NsYWltZXJfY29udGVudH1cbiAgICAgICAgICBpc1JlcXVpcmVkPXtzdW1taXQucmVnaXN0cmF0aW9uX2Rpc2NsYWltZXJfbWFuZGF0b3J5fVxuICAgICAgICAgIGlzRGlzYWJsZWQ9eyFjYW5FZGl0fVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIDxGb3JtRm9vdGVyXG4gICAgICAgIHNhdmVMYWJlbD17dChcInRpY2tldF9kZXRhaWwuc2F2ZVwiKX1cbiAgICAgICAgY2FuY2VsTGFiZWw9e3QoXCJ0aWNrZXRfZGV0YWlsLmNhbmNlbFwiKX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Zvcm1pay5pc1N1Ym1pdHRpbmd9XG4gICAgICAvPlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cblRpY2tldEZvcm0ucHJvcFR5cGVzID0ge1xuICB0aWNrZXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIGV4dHJhUXVlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgc3VtbWl0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNhbkVkaXQ6IFByb3BUeXBlcy5ib29sLFxuICBvblN1Ym1pdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGlja2V0Rm9ybTtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTcgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqICovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IEJveCwgVGV4dEZpZWxkIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcblxuaW1wb3J0ICogYXMgc3R5bGVzIGZyb20gXCIuL3N0eWxlcy5tb2R1bGUuc2Nzc1wiO1xuaW1wb3J0IHsgVElDS0VUX0FUVEVOREVFX0tFWVMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgQ29tcGFueUZpZWxkIGZyb20gXCIuLi9Db21wYW55RmllbGRcIjtcblxuY29uc3QgVGlja2V0T3duZXJGaWVsZHMgPSAoeyBmb3JtaWssIHN1bW1pdElkLCBkaXNhYmxlZCB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgeyBlcnJvcnMsIHZhbHVlcywgdG91Y2hlZCwgaGFuZGxlQ2hhbmdlLCBoYW5kbGVCbHVyIH0gPSBmb3JtaWs7XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLndyYXBwZXJ9PlxuICAgICAgPFRleHRGaWVsZFxuICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgbmFtZT17VElDS0VUX0FUVEVOREVFX0tFWVMuZW1haWx9XG4gICAgICAgIGxhYmVsPXt0KFwidGlja2V0X2RldGFpbC5lbWFpbFwiKX1cbiAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgdmFsdWU9e3ZhbHVlc1tUSUNLRVRfQVRURU5ERUVfS0VZUy5lbWFpbF19XG4gICAgICAvPlxuICAgICAge1tUSUNLRVRfQVRURU5ERUVfS0VZUy5maXJzdE5hbWUsIFRJQ0tFVF9BVFRFTkRFRV9LRVlTLmxhc3ROYW1lXS5tYXAoXG4gICAgICAgIChuYW1lKSA9PiAoXG4gICAgICAgICAgPFRleHRGaWVsZFxuICAgICAgICAgICAgZnVsbFdpZHRoXG4gICAgICAgICAgICBrZXk9e25hbWV9XG4gICAgICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICAgICAgbGFiZWw9e3QoYHRpY2tldF9kZXRhaWwuJHtuYW1lfWApfVxuICAgICAgICAgICAgdmFsdWU9e3ZhbHVlc1tuYW1lXX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICBvbkJsdXI9e2hhbmRsZUJsdXJ9XG4gICAgICAgICAgICBlcnJvcj17dG91Y2hlZFtuYW1lXSAmJiBCb29sZWFuKGVycm9yc1tuYW1lXSl9XG4gICAgICAgICAgICBoZWxwZXJUZXh0PXtmb3JtaWsudG91Y2hlZFtuYW1lXSAmJiBmb3JtaWsuZXJyb3JzW25hbWVdfVxuICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICApfVxuICAgICAgPENvbXBhbnlGaWVsZCBmb3JtaWs9e2Zvcm1pa30gc3VtbWl0SWQ9e3N1bW1pdElkfSBpc1JlcXVpcmVkIC8+XG4gICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmluZm9Ob3RlfT57dChcInRpY2tldF9kZXRhaWwuaW5mb19ub3RlXCIpfTwvQm94PlxuICAgIDwvQm94PlxuICApO1xufTtcblxuVGlja2V0T3duZXJGaWVsZHMucHJvcFR5cGVzID0ge1xuICBmb3JtaWs6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGlja2V0T3duZXJGaWVsZHM7XG4iLCJleHBvcnQgY29uc3QgVElDS0VUX0FUVEVOREVFX0tFWVMgPSB7XG4gIGVtYWlsOiBcImF0dGVuZGVlX2VtYWlsXCIsXG4gIGZpcnN0TmFtZTogXCJhdHRlbmRlZV9maXJzdF9uYW1lXCIsXG4gIGxhc3ROYW1lOiBcImF0dGVuZGVlX2xhc3RfbmFtZVwiLFxuICBjb21wYW55OiBcImF0dGVuZGVlX2NvbXBhbnlcIixcbiAgZGlzY2xhaW1lckFjY2VwdGVkOiBcImRpc2NsYWltZXJfYWNjZXB0ZWRcIlxufTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgdXNlRGlzcGF0Y2gsIHVzZVNlbGVjdG9yIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgUVJDb2RlIGZyb20gXCJyZWFjdC1xci1jb2RlXCI7XG5pbXBvcnQgeyBCb3gsIEJ1dHRvbiwgRHJhd2VyLCBJY29uQnV0dG9uLCBUeXBvZ3JhcGh5IH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7XG4gIENsb3NlIGFzIENsb3NlSWNvbixcbiAgRmlsZURvd25sb2FkT3V0bGluZWQgYXMgRG93bmxvYWRJY29uLFxuICBFbWFpbE91dGxpbmVkIGFzIEVtYWlsSWNvblxufSBmcm9tIFwiQG11aS9pY29ucy1tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlVGlja2V0RGV0YWlscyB9IGZyb20gXCIuLi8uLi9ob29rcy91c2VUaWNrZXREZXRhaWxzXCI7XG5pbXBvcnQgQ29weVRleHQgZnJvbSBcIi4uL0NvcHlUZXh0XCI7XG5pbXBvcnQgdXNlR2V0VGlja2V0IGZyb20gXCIuLi8uLi9ob29rcy91c2VHZXRUaWNrZXRcIjtcbmltcG9ydCB7IHRyYW5zZm9ybUFud2Vyc0Zvcm1hdCB9IGZyb20gXCIuLi9FeHRyYVF1ZXN0aW9uc0ZpZWxkcy9jb21wb25lbnRzL3V0aWxzXCI7XG5pbXBvcnQgQ3VzdG9tRGlhbG9nIGZyb20gXCIuLi9DdXN0b21EaWFsb2dcIjtcbmltcG9ydCB7IE1JTExJU0VDX1RPX1NFQywgVFdPX0lURU0gfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgVGlja2V0Rm9ybSBmcm9tIFwiLi9jb21wb25lbnRzL1RpY2tldEZvcm1cIjtcbmltcG9ydCB7IGdldFRpY2tldFBERiwgc2F2ZVRpY2tldERldGFpbHMsIHJlc2VuZE5vdGlmaWNhdGlvbiB9IGZyb20gXCIuLi8uLi9hY3Rpb25zXCI7XG5cbmltcG9ydCAqIGFzIHN0eWxlcyBmcm9tIFwiLi9zdHlsZXMubW9kdWxlLnNjc3NcIjtcblxuY29uc3QgVGlja2V0RGV0YWlsID0gKHtcbiAgc3VtbWl0LFxuICB0aWNrZXRJZCxcbiAgb3JkZXJJZCxcbiAgb3duZXJJZCxcbiAgb3BlbixcbiAgb25DbG9zZVxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3Qge1xuICAgIHVzZXI6IHsgdXNlclByb2ZpbGUgfVxuICB9ID0gdXNlU2VsZWN0b3IoKHN0YXRlKSA9PiBzdGF0ZS53aWRnZXRTdGF0ZSk7XG4gIGNvbnN0IHsgdGlja2V0LCBleHRyYVF1ZXN0aW9ucyB9ID0gdXNlR2V0VGlja2V0KFxuICAgIHRpY2tldElkLFxuICAgIG9yZGVySWQsXG4gICAgb3duZXJJZCxcbiAgICBvcGVuXG4gICk7XG4gIGNvbnN0IFtzYXZlTWVzc2FnZSwgc2V0U2F2ZU1lc3NhZ2VdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFtzZW50Q29uZmlybWF0aW9uLCBzZXRTZW50Q29uZmlybWF0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaXNVc2VyT3JkZXJPd25lciA9IHRpY2tldD8ub3JkZXI/Lm93bmVyX2lkID09PSB1c2VyUHJvZmlsZT8uaWQ7XG4gIGNvbnN0IGlzVXNlclRpY2tldE93bmVyID0gdGlja2V0Py5vd25lcj8uZW1haWwgPT09IHVzZXJQcm9maWxlPy5lbWFpbDtcbiAgY29uc3QgY2FuRWRpdFRpY2tldERhdGEgPVxuICAgIChpc1VzZXJUaWNrZXRPd25lciB8fCBpc1VzZXJPcmRlck93bmVyKSAmJlxuICAgIHN1bW1pdC5hbGxvd191cGRhdGVfYXR0ZW5kZWVfZXh0cmFfcXVlc3Rpb25zO1xuICBjb25zdCB7IGlzQ29tcGxldGUgfSA9IHVzZVRpY2tldERldGFpbHModGlja2V0KTtcblxuICBjb25zdCBvblNhdmUgPSAodmFsKSA9PiB7XG4gICAgY29uc3QgYW5zd2VycyA9IHRyYW5zZm9ybUFud2Vyc0Zvcm1hdCh2YWwpO1xuXG4gICAgcmV0dXJuIGRpc3BhdGNoKHNhdmVUaWNrZXREZXRhaWxzKHRpY2tldCwgYW5zd2VycykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHNldFNhdmVNZXNzYWdlKHtcbiAgICAgICAgICB0aXRsZTogdChcInRpY2tldF9kZXRhaWwuc2F2aW5nX3N1Y2Nlc3NcIiksXG4gICAgICAgICAgZGVzY3JpcHRpb246IHQoXCJ0aWNrZXRfZGV0YWlsLnNhdmluZ19zdWNjZXNzX2Rlc2NyaXB0aW9uXCIpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgc2V0U2F2ZU1lc3NhZ2Uoe1xuICAgICAgICAgIHRpdGxlOiB0KFwidGlja2V0X2RldGFpbC5zYXZpbmdfZXJyb3JcIiksXG4gICAgICAgICAgZGVzY3JpcHRpb246IGVyci50b1N0cmluZygpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xvc2VTYXZlTWVzc2FnZSA9ICgpID0+IHtcbiAgICBzZXRTYXZlTWVzc2FnZShudWxsKTtcbiAgICBzZXRUaW1lb3V0KG9uQ2xvc2UsIE1JTExJU0VDX1RPX1NFQyk7XG4gIH07XG5cbiAgY29uc3QgZG93bmxvYWRUaWNrZXRQZGYgPSAoKSA9PiB7XG4gICAgZGlzcGF0Y2goZ2V0VGlja2V0UERGKHRpY2tldCkpO1xuICB9O1xuXG4gIGNvbnN0IG9uU2VuZEVtYWlsID0gKCkgPT4ge1xuICAgIGRpc3BhdGNoKHJlc2VuZE5vdGlmaWNhdGlvbih0aWNrZXQpKS50aGVuKCgpID0+IHtcbiAgICAgIHNldFNlbnRDb25maXJtYXRpb24odHJ1ZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2V0U2VudENvbmZpcm1hdGlvbihmYWxzZSk7XG4gICAgICB9LCBNSUxMSVNFQ19UT19TRUMgKiBUV09fSVRFTSk7XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPERyYXdlclxuICAgICAgICBpZD1cImRldGFpbHNEcmF3ZXJcIlxuICAgICAgICBvcGVuPXtvcGVufVxuICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICBhbmNob3I9XCJyaWdodFwiXG4gICAgICAgIE1vZGFsUHJvcHM9e3sga2VlcE1vdW50ZWQ6IGZhbHNlIH19XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRpY2tldERldGFpbENvbnRhaW5lcn1cbiAgICAgID5cbiAgICAgICAge3RpY2tldCAmJiBleHRyYVF1ZXN0aW9ucyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZUJ0bn1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgICAgICAgICAgIHN4PXt7IGZsb2F0OiBcInJpZ2h0XCIgfX1cbiAgICAgICAgICAgICAgICBmb250U2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxDbG9zZUljb24gLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICA8VHlwb2dyYXBoeSB2YXJpYW50PVwiaDRcIiBndXR0ZXJCb3R0b20gY2xhc3NOYW1lPXtzdHlsZXMudGl0bGV9PlxuICAgICAgICAgICAgICAgIHt0aWNrZXQ/LnRpY2tldF90eXBlPy5uYW1lfVxuICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgIDxUeXBvZ3JhcGh5XG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImJvZHkyXCJcbiAgICAgICAgICAgICAgICBndXR0ZXJCb3R0b21cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zdWJ0aXRsZX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt0KFwidGlja2V0X2RldGFpbC5wdXJjaGFzZWRfYnlcIil9IHt0aWNrZXQ/Lm93bmVyPy5lbWFpbH1cbiAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuXG4gICAgICAgICAgICAgIHtpc0NvbXBsZXRlICYmIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPEJveCBjbGFzc05hbWU9e3N0eWxlcy5xckNvZGV9PlxuICAgICAgICAgICAgICAgICAgICA8UVJDb2RlXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT17MjU2fVxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGlja2V0LnFyX2NvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNTYgMjU2XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtzdHlsZXMuc3RhdHVzfT57dChcInRpY2tldF9kZXRhaWwuc3RhdHVzXCIpfTwvcD5cbiAgICAgICAgICAgICAgICAgIDxUeXBvZ3JhcGh5XG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJib2R5MlwiXG4gICAgICAgICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5xck5vdGV9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0KFwidGlja2V0X2RldGFpbC5xcl9ub3RlXCIpfVxuICAgICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuXG4gICAgICAgICAgICAgIHshc3VtbWl0Py5pc192aXJ0dWFsICYmIGlzQ29tcGxldGUgJiYgKFxuICAgICAgICAgICAgICAgIDxCb3ggY2xhc3NOYW1lPXtzdHlsZXMuYWN0aW9uQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmRvd25sb2FkQnRufVxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiY29udGFpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZG93bmxvYWRUaWNrZXRQZGZ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxEb3dubG9hZEljb24gZm9udFNpemU9XCJsYXJnZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIHt0KFwidGlja2V0X2RldGFpbC5kb3dubG9hZFwiKX1cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5zZW5kQnRufSAke1xuICAgICAgICAgICAgICAgICAgICAgIHNlbnRDb25maXJtYXRpb24gPyBzdHlsZXMuc2VudCA6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgfWB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e29uU2VuZEVtYWlsfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VudENvbmZpcm1hdGlvbn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPEVtYWlsSWNvbiBmb250U2l6ZT1cImxhcmdlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAge3NlbnRDb25maXJtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICA/IHQoXCJ0aWNrZXRfZGV0YWlsLnNlbnRcIilcbiAgICAgICAgICAgICAgICAgICAgICA6IHQoXCJ0aWNrZXRfZGV0YWlsLnNlbmRcIil9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L0JveD5cbiAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm9yZGVyTnVtYmVyfT5cbiAgICAgICAgICAgICAgICA8Q29weVRleHRcbiAgICAgICAgICAgICAgICAgIHRleHQ9e3RpY2tldD8ub3JkZXI/Lm51bWJlcn1cbiAgICAgICAgICAgICAgICAgIHJldmVyc2VkXG4gICAgICAgICAgICAgICAgICB3aWR0aD17MTUwfVxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9e3QoXCJvcmRlcl9zdW1tYXJ5LmNvcHlfb3JkZXJfbnVtYmVyXCIpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiaDRcIlxuICAgICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlSW5mb1RpdGxlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfZGV0YWlsLmF0dGVuZGVlX2luZm9ybWF0aW9uXCIpfVxuICAgICAgICAgICAgICA8L1R5cG9ncmFwaHk+XG4gICAgICAgICAgICAgIHt0aWNrZXQgJiYgKFxuICAgICAgICAgICAgICAgIDxUaWNrZXRGb3JtXG4gICAgICAgICAgICAgICAgICB0aWNrZXQ9e3RpY2tldH1cbiAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zPXtleHRyYVF1ZXN0aW9uc31cbiAgICAgICAgICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgICAgICAgICAgY2FuRWRpdD17Y2FuRWRpdFRpY2tldERhdGF9XG4gICAgICAgICAgICAgICAgICBvblN1Ym1pdD17b25TYXZlfVxuICAgICAgICAgICAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L0RyYXdlcj5cbiAgICAgIDxDdXN0b21EaWFsb2dcbiAgICAgICAgb3Blbj17ISFzYXZlTWVzc2FnZX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZVNhdmVNZXNzYWdlfVxuICAgICAgICB0aXRsZT17c2F2ZU1lc3NhZ2U/LnRpdGxlfVxuICAgICAgICBkZXNjcmlwdGlvbj17c2F2ZU1lc3NhZ2U/LmRlc2NyaXB0aW9ufVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cblRpY2tldERldGFpbC5wcm9wVHlwZXMgPSB7XG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgdGlja2V0SWQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIG9yZGVySWQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIG93bmVySWQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWNrZXREZXRhaWw7XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDE3IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBUZXh0RmllbGQgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgdXNlRm9ybWlrIH0gZnJvbSBcImZvcm1pa1wiO1xuaW1wb3J0ICogYXMgeXVwIGZyb20gXCJ5dXBcIjtcblxuaW1wb3J0IEZvcm1Gb290ZXIgZnJvbSBcIi4uLy4uLy4uL0Zvcm1Gb290ZXJcIjtcblxuY29uc3QgUmVhc3NpZ25Gb3JtID0gKHsgb25TdWJtaXQsIG9uQ2xvc2UgfSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgZm9ybWlrID0gdXNlRm9ybWlrKHtcbiAgICBpbml0aWFsVmFsdWVzOiB7XG4gICAgICBuZXdfYXR0ZW5kZWVfZW1haWw6IFwiXCIsXG4gICAgICBwZXJzb25hbF9tZXNzYWdlOiBcIlwiXG4gICAgfSxcbiAgICB2YWxpZGF0aW9uU2NoZW1hOiB5dXAub2JqZWN0KHtcbiAgICAgIG5ld19hdHRlbmRlZV9lbWFpbDogeXVwXG4gICAgICAgIC5zdHJpbmcodChcInZhbGlkYXRpb24uZW1haWwuc3RyaW5nXCIpKVxuICAgICAgICAuZW1haWwodChcInZhbGlkYXRpb24uZW1haWwuZm9ybWF0XCIpKVxuICAgICAgICAucmVxdWlyZWQodChcInZhbGlkYXRpb24uZW1haWwucmVxdWlyZWRcIikpLFxuICAgICAgcGVyc29uYWxfbWVzc2FnZTogeXVwLnN0cmluZyh0KFwidmFsaWRhdGlvbi50ZXh0LnN0cmluZ1wiKSlcbiAgICB9KSxcbiAgICBvblN1Ym1pdFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxmb3JtIG9uU3VibWl0PXtmb3JtaWsuaGFuZGxlU3VibWl0fSBub1ZhbGlkYXRlPlxuICAgICAgPFRleHRGaWVsZFxuICAgICAgICBmdWxsV2lkdGhcbiAgICAgICAgbmFtZT1cIm5ld19hdHRlbmRlZV9lbWFpbFwiXG4gICAgICAgIGxhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLm5ld19hdHRlbmRlZV9lbWFpbFwiKX1cbiAgICAgICAgdmFsdWU9e2Zvcm1pay52YWx1ZXMubmV3X2F0dGVuZGVlX2VtYWlsfVxuICAgICAgICBvbkNoYW5nZT17Zm9ybWlrLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgb25CbHVyPXtmb3JtaWsuaGFuZGxlQmx1cn1cbiAgICAgICAgZXJyb3I9e1xuICAgICAgICAgIGZvcm1pay50b3VjaGVkLm5ld19hdHRlbmRlZV9lbWFpbCAmJlxuICAgICAgICAgIEJvb2xlYW4oZm9ybWlrLmVycm9ycy5uZXdfYXR0ZW5kZWVfZW1haWwpXG4gICAgICAgIH1cbiAgICAgICAgaGVscGVyVGV4dD17XG4gICAgICAgICAgZm9ybWlrLnRvdWNoZWQubmV3X2F0dGVuZGVlX2VtYWlsICYmIGZvcm1pay5lcnJvcnMubmV3X2F0dGVuZGVlX2VtYWlsXG4gICAgICAgIH1cbiAgICAgICAgcmVxdWlyZWRcbiAgICAgIC8+XG4gICAgICA8VGV4dEZpZWxkXG4gICAgICAgIGZ1bGxXaWR0aFxuICAgICAgICBuYW1lPVwicGVyc29uYWxfbWVzc2FnZVwiXG4gICAgICAgIGxhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLnBlcnNvbmFsX21lc3NhZ2VcIil9XG4gICAgICAgIHZhbHVlPXtmb3JtaWsudmFsdWVzLnBlcnNvbmFsX21lc3NhZ2V9XG4gICAgICAgIG11bHRpbGluZVxuICAgICAgICBtaW5Sb3dzPXs0fVxuICAgICAgICBvbkNoYW5nZT17Zm9ybWlrLmhhbmRsZUNoYW5nZX1cbiAgICAgICAgb25CbHVyPXtmb3JtaWsuaGFuZGxlQmx1cn1cbiAgICAgICAgZXJyb3I9e1xuICAgICAgICAgIGZvcm1pay50b3VjaGVkLnBlcnNvbmFsX21lc3NhZ2UgJiZcbiAgICAgICAgICBCb29sZWFuKGZvcm1pay5lcnJvcnMucGVyc29uYWxfbWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgICBoZWxwZXJUZXh0PXtcbiAgICAgICAgICBmb3JtaWsudG91Y2hlZC5wZXJzb25hbF9tZXNzYWdlICYmIGZvcm1pay5lcnJvcnMucGVyc29uYWxfbWVzc2FnZVxuICAgICAgICB9XG4gICAgICAvPlxuICAgICAgPEZvcm1Gb290ZXJcbiAgICAgICAgc2F2ZUxhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLnNhdmVcIil9XG4gICAgICAgIGNhbmNlbExhYmVsPXt0KFwidGlja2V0X3JlYXNzaWduLmNhbmNlbFwiKX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Zvcm1pay5pc1N1Ym1pdHRpbmd9XG4gICAgICAvPlxuICAgIDwvZm9ybT5cbiAgKTtcbn07XG5cblJlYXNzaWduRm9ybS5wcm9wVHlwZXMgPSB7XG4gIG9uU3VibWl0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSZWFzc2lnbkZvcm07XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgeyBCb3gsIFR5cG9ncmFwaHkgfSBmcm9tIFwiQG11aS9tYXRlcmlhbFwiO1xuaW1wb3J0IHsgcmVhc3NpZ25UaWNrZXQsIHNhdmVFeHRyYVF1ZXN0aW9ucyB9IGZyb20gXCIuLi8uLi9hY3Rpb25zXCI7XG5pbXBvcnQgUmVhc3NpZ25Gb3JtIGZyb20gXCIuL2NvbXBvbmVudHMvUmVhc3NpZ25Gb3JtXCI7XG5pbXBvcnQgUmlnaHREcmF3ZXIgZnJvbSBcIi4uL1JpZ2h0RHJhd2VyXCI7XG5cbmltcG9ydCBBc3NpZ25FUUZvcm0gZnJvbSBcIi4uL0Fzc2lnbkVRRm9ybVwiO1xuaW1wb3J0IHsgdHJhbnNmb3JtQW53ZXJzRm9ybWF0IH0gZnJvbSBcIi4uL0V4dHJhUXVlc3Rpb25zRmllbGRzL2NvbXBvbmVudHMvdXRpbHNcIjtcbmltcG9ydCBDdXN0b21EaWFsb2cgZnJvbSBcIi4uL0N1c3RvbURpYWxvZ1wiO1xuaW1wb3J0IHVzZUdldFRpY2tldCBmcm9tIFwiLi4vLi4vaG9va3MvdXNlR2V0VGlja2V0XCI7XG5pbXBvcnQgeyBNSUxMSVNFQ19UT19TRUMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IFRpY2tldFJlYXNzaWduID0gKHtcbiAgc3VtbWl0LFxuICB0aWNrZXRJZCxcbiAgb3JkZXJJZCxcbiAgb3duZXJJZCxcbiAgb3BlbixcbiAgb25DbG9zZVxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcbiAgY29uc3QgW3NhdmVNZXNzYWdlLCBzZXRTYXZlTWVzc2FnZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW3RpY2tldFJlYXNzaWduZWQsIHNldFRpY2tldFJlYXNzaWduZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7IHRpY2tldCwgZXh0cmFRdWVzdGlvbnMgfSA9IHVzZUdldFRpY2tldChcbiAgICB0aWNrZXRJZCxcbiAgICBvcmRlcklkLFxuICAgIG93bmVySWQsXG4gICAgb3BlblxuICApO1xuXG4gIGNvbnN0IG9uUmVhc3NpZ24gPSAodmFsKSA9PiB7XG4gICAgY29uc3QgeyBuZXdfYXR0ZW5kZWVfZW1haWwsIHBlcnNvbmFsX21lc3NhZ2UgfSA9IHZhbDtcbiAgICByZXR1cm4gZGlzcGF0Y2goXG4gICAgICByZWFzc2lnblRpY2tldChvcmRlcklkLCB0aWNrZXRJZCwgbmV3X2F0dGVuZGVlX2VtYWlsLCBwZXJzb25hbF9tZXNzYWdlKVxuICAgICkudGhlbigoKSA9PiB7XG4gICAgICBzZXRUaWNrZXRSZWFzc2lnbmVkKHRydWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xvc2VFUUZvcm0gPSAoKSA9PiB7XG4gICAgc2V0VGlja2V0UmVhc3NpZ25lZChmYWxzZSk7XG4gICAgb25DbG9zZSgpO1xuICB9O1xuXG4gIGNvbnN0IG9uQ2xvc2VTYXZlTWVzc2FnZSA9ICgpID0+IHtcbiAgICBzZXRTYXZlTWVzc2FnZShudWxsKTtcbiAgICBzZXRUaWNrZXRSZWFzc2lnbmVkKGZhbHNlKTtcbiAgICBzZXRUaW1lb3V0KG9uQ2xvc2UsIE1JTExJU0VDX1RPX1NFQyk7XG4gIH07XG5cbiAgY29uc3Qgb25TYXZlRVEgPSAodmFsKSA9PiB7XG4gICAgY29uc3QgYW5zd2VycyA9IHRyYW5zZm9ybUFud2Vyc0Zvcm1hdCh2YWwpO1xuXG4gICAgcmV0dXJuIGRpc3BhdGNoKHNhdmVFeHRyYVF1ZXN0aW9ucyh0aWNrZXQsIGFuc3dlcnMpKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBzZXRTYXZlTWVzc2FnZSh7XG4gICAgICAgICAgdGl0bGU6IHQoXCJ0aWNrZXRfcmVhc3NpZ24uc2F2aW5nX3N1Y2Nlc3NcIiksXG4gICAgICAgICAgZGVzY3JpcHRpb246IHQoXCJ0aWNrZXRfcmVhc3NpZ24uc2F2aW5nX3N1Y2Nlc3NfZGVzY3JpcHRpb25cIilcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBzZXRTYXZlTWVzc2FnZSh7XG4gICAgICAgICAgdGl0bGU6IHQoXCJ0aWNrZXRfcmVhc3NpZ24uc2F2aW5nX2Vycm9yXCIpLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBlcnIudG9TdHJpbmcoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gICAgICB9KTtcbiAgfTtcblxuICBjb25zdCBnZXRMYWJlbHMgPSAoKSA9PiB7XG4gICAgaWYgKHRpY2tldFJlYXNzaWduZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiB0KFwidGlja2V0X3JlYXNzaWduLnJlYXNzaWduX3RpY2tldFwiKSxcbiAgICAgICAgc3VidGl0bGU6IGAke3QoXCJ0aWNrZXRfcmVhc3NpZ24ucmVhc3NpZ25lZF90b1wiKX0gJHtcbiAgICAgICAgICB0aWNrZXQ/Lm93bmVyPy5lbWFpbFxuICAgICAgICB9YCxcbiAgICAgICAgaGVhZGVyTm90ZTogdChcInRpY2tldF9yZWFzc2lnbi5jb21wbGV0ZV9pbmZvXCIpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogdChcInRpY2tldF9yZWFzc2lnbi5yZWFzc2lnbl90aWNrZXRcIiksXG4gICAgICBzdWJ0aXRsZTogKFxuICAgICAgICA8PlxuICAgICAgICAgIHt0KFwidGlja2V0X3JlYXNzaWduLmFzc2lnbmVkX3RvXCIpfVxuICAgICAgICAgIDxiciAvPlxuICAgICAgICAgIHt0aWNrZXQ/Lm93bmVyPy5lbWFpbH1cbiAgICAgICAgPC8+XG4gICAgICApLFxuICAgICAgaGVhZGVyTm90ZTogdChcInRpY2tldF9yZWFzc2lnbi5lbnRlcl9lbWFpbF9ub3RlXCIpXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCB7IHRpdGxlLCBzdWJ0aXRsZSwgaGVhZGVyTm90ZSB9ID0gZ2V0TGFiZWxzKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFJpZ2h0RHJhd2VyXG4gICAgICAgIGlkPVwicmVhc3NpZ25EcmF3ZXJcIlxuICAgICAgICB0aXRsZT17dGl0bGV9XG4gICAgICAgIG9wZW49e29wZW59XG4gICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRpY2tldFJlYXNzaWduQ29udGFpbmVyfVxuICAgICAgPlxuICAgICAgICB7dGlja2V0ICYmIGV4dHJhUXVlc3Rpb25zICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPEJveD5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHkgdmFyaWFudD1cImg0XCIgZ3V0dGVyQm90dG9tIGNsYXNzTmFtZT17c3R5bGVzLnN1YnRpdGxlfT5cbiAgICAgICAgICAgICAgICB7c3VidGl0bGV9XG4gICAgICAgICAgICAgIDwvVHlwb2dyYXBoeT5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiYm9keTFcIlxuICAgICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlck5vdGV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7aGVhZGVyTm90ZX1cbiAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgPC9Cb3g+XG4gICAgICAgICAgICA8Qm94IGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgPFR5cG9ncmFwaHlcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwiaDRcIlxuICAgICAgICAgICAgICAgIGd1dHRlckJvdHRvbVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmF0dGVuZGVlSW5mb1RpdGxlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3RpY2tldD8udHlwZT8ubmFtZX1cbiAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuICAgICAgICAgICAgICB7dGlja2V0ICYmICF0aWNrZXRSZWFzc2lnbmVkICYmIChcbiAgICAgICAgICAgICAgICA8UmVhc3NpZ25Gb3JtXG4gICAgICAgICAgICAgICAgICB0aWNrZXQ9e3RpY2tldH1cbiAgICAgICAgICAgICAgICAgIHN1bW1pdD17c3VtbWl0fVxuICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uUmVhc3NpZ259XG4gICAgICAgICAgICAgICAgICBvbkNsb3NlPXtvbkNsb3NlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHt0aWNrZXQgJiYgdGlja2V0UmVhc3NpZ25lZCAmJiAoXG4gICAgICAgICAgICAgICAgPEFzc2lnbkVRRm9ybVxuICAgICAgICAgICAgICAgICAgdGlja2V0PXt0aWNrZXR9XG4gICAgICAgICAgICAgICAgICBzdW1taXQ9e3N1bW1pdH1cbiAgICAgICAgICAgICAgICAgIGV4dHJhUXVlc3Rpb25zPXtleHRyYVF1ZXN0aW9uc31cbiAgICAgICAgICAgICAgICAgIG9uU3VibWl0PXtvblNhdmVFUX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9e29uQ2xvc2VFUUZvcm19XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9SaWdodERyYXdlcj5cbiAgICAgIDxDdXN0b21EaWFsb2dcbiAgICAgICAgb3Blbj17ISFzYXZlTWVzc2FnZX1cbiAgICAgICAgb25DbG9zZT17b25DbG9zZVNhdmVNZXNzYWdlfVxuICAgICAgICB0aXRsZT17c2F2ZU1lc3NhZ2U/LnRpdGxlfVxuICAgICAgICBkZXNjcmlwdGlvbj17c2F2ZU1lc3NhZ2U/LmRlc2NyaXB0aW9ufVxuICAgICAgLz5cbiAgICA8Lz5cbiAgKTtcbn07XG5cblRpY2tldFJlYXNzaWduLnByb3BUeXBlcyA9IHtcbiAgc3VtbWl0OiBQcm9wVHlwZXMub2JqZWN0LFxuICB0aWNrZXRJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgb3JkZXJJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgb3duZXJJZDogUHJvcFR5cGVzLm51bWJlcixcbiAgb3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaWNrZXRSZWFzc2lnbjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSBcInJlYWN0LWkxOG5leHRcIjtcbmltcG9ydCB7IENvbnRhaW5lciwgQnV0dG9uIH0gZnJvbSBcIkBtdWkvbWF0ZXJpYWxcIjtcbmltcG9ydCB7IHVzZVRpY2tldERldGFpbHMgfSBmcm9tIFwiLi4vLi4vaG9va3MvdXNlVGlja2V0RGV0YWlsc1wiO1xuXG5pbXBvcnQgKiBhcyBzdHlsZXMgZnJvbSBcIi4vc3R5bGVzLm1vZHVsZS5zY3NzXCI7XG5cbmNvbnN0IFRpY2tldFN0YXR1cyA9ICh7IHRpY2tldCB9KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKTtcbiAgY29uc3QgaXNBY3RpdmUgPSB0aWNrZXQuaXNfYWN0aXZlO1xuICBjb25zdCByZWZ1bmRSZXF1ZXN0cyA9IHRpY2tldC5yZWZ1bmRfcmVxdWVzdHM/LmZpbmQoXG4gICAgKHIpID0+IHIuc3RhdHVzID09PSBcIlJlcXVlc3RlZFwiXG4gICk7XG4gIGNvbnN0IHsgaXNJbmNvbXBsZXRlLCBpc1VuYXNzaWduZWQsIGlzQ29tcGxldGUgfSA9IHVzZVRpY2tldERldGFpbHModGlja2V0KTtcblxuICByZXR1cm4gKFxuICAgIDxDb250YWluZXIgY2xhc3NOYW1lPXtzdHlsZXMudGlja2V0U3RhdHVzQ29udGFpbmVyfT5cbiAgICAgIHtpc0FjdGl2ZSA/IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7cmVmdW5kUmVxdWVzdHMgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cInRpY2tldCBzdGF0dXMgcmVmdW5kIHJlcXVlc3RlZFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLmJ1dHRvblBpbGx9ICR7c3R5bGVzLmJ1dHRvblJlZnVuZFJlcXVlc3RlZH1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dChcInRpY2tldF9zdGF0dXMuc3RhdHVzX3JlZnVuZF9yZXF1ZXN0ZWRcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpc0luY29tcGxldGUgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cInRpY2tldCBzdGF0dXMgaW5jb21wbGV0ZVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzLmJ1dHRvblBpbGx9ICR7c3R5bGVzLmJ1dHRvbkluY29tcGxldGV9YH1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3QoXCJ0aWNrZXRfc3RhdHVzLnN0YXR1c19pbmNvbXBsZXRlXCIpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aXNVbmFzc2lnbmVkICYmIChcbiAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJ0aWNrZXQgc3RhdHVzIHVuYXNzaWduZWRcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5idXR0b25QaWxsfSAke3N0eWxlcy5idXR0b25VbmFzc2lnbmVkfWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0KFwidGlja2V0X3N0YXR1cy5zdGF0dXNfdW5hc3NpZ25lZFwiKX1cbiAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2lzQ29tcGxldGUgJiYgKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cInRpY2tldCBzdGF0dXMgY29tcGxldGVcIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5idXR0b25QaWxsfSAke3N0eWxlcy5idXR0b25Db21wbGV0ZX1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dChcInRpY2tldF9zdGF0dXMuc3RhdHVzX2NvbXBsZXRlXCIpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC8+XG4gICAgICApIDogKFxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cInRpY2tldCBzdGF0dXMgY2FuY2VsbGVkXCJcbiAgICAgICAgICBjbGFzc05hbWU9e2Ake3N0eWxlcy5idXR0b25QaWxsfSAke3N0eWxlcy5idXR0b25DYW5jZWxsZWR9YH1cbiAgICAgICAgPlxuICAgICAgICAgIHt0KFwidGlja2V0X3N0YXR1cy5zdGF0dXNfY2FuY2VsbGVkXCIpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgICl9XG4gICAgPC9Db250YWluZXI+XG4gICk7XG59O1xuXG5UaWNrZXRTdGF0dXMucHJvcFR5cGVzID0ge1xuICB0aWNrZXQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgb3duZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBzdGF0dXM6IFByb3BUeXBlcy5zdHJpbmdcbiAgICB9KSxcbiAgICByZWZ1bmRSZXF1ZXN0czogUHJvcFR5cGVzLmFycmF5T2YoT2JqZWN0KVxuICB9KVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVGlja2V0U3RhdHVzO1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VEaXNwYXRjaCwgdXNlU2VsZWN0b3IgfSBmcm9tIFwicmVhY3QtcmVkdXhcIjtcbmltcG9ydCB7IGdldEV4dHJhUXVlc3Rpb25zLCBnZXRUaWNrZXQgfSBmcm9tIFwiLi4vYWN0aW9uc1wiO1xuXG5jb25zdCB1c2VHZXRUaWNrZXQgPSAodGlja2V0SWQsIG9yZGVySWQsIG93bmVySWQsIHJ1bikgPT4ge1xuICBjb25zdCBkaXNwYXRjaCA9IHVzZURpc3BhdGNoKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGlja2V0SWQgJiYgb3JkZXJJZCAmJiBvd25lcklkICYmIHJ1bikge1xuICAgICAgZGlzcGF0Y2goZ2V0VGlja2V0KHRpY2tldElkLCBvcmRlcklkKSk7XG4gICAgICBkaXNwYXRjaChnZXRFeHRyYVF1ZXN0aW9ucyhvd25lcklkKSk7XG4gICAgfVxuICB9LCBbdGlja2V0SWQsIG9yZGVySWQsIG93bmVySWQsIHJ1bl0pO1xuXG4gIGNvbnN0IHsgZXh0cmFRdWVzdGlvbnMsIGN1cnJlbnRUaWNrZXQ6IHRpY2tldCB9ID0gdXNlU2VsZWN0b3IoXG4gICAgKHN0YXRlKSA9PiBzdGF0ZS53aWRnZXRTdGF0ZVxuICApO1xuXG4gIHJldHVybiB7IHRpY2tldCwgZXh0cmFRdWVzdGlvbnMgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHVzZUdldFRpY2tldDtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG4vLyBTbW9vdGggc2Nyb2xsaW5nIGZ1bmN0aW9uIHVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuZnVuY3Rpb24gc21vb3RoU2Nyb2xsVG8oY29udGFpbmVyLCB0YXJnZXRTY3JvbGxUb3AsIGR1cmF0aW9uKSB7XG4gIGNvbnN0IHN0YXJ0U2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcbiAgY29uc3QgZGlzdGFuY2UgPSB0YXJnZXRTY3JvbGxUb3AgLSBzdGFydFNjcm9sbFRvcDtcbiAgbGV0IHN0YXJ0VGltZSA9IG51bGw7XG5cbiAgZnVuY3Rpb24gYW5pbWF0aW9uU3RlcCh0aW1lc3RhbXApIHtcbiAgICBpZiAoIXN0YXJ0VGltZSkgc3RhcnRUaW1lID0gdGltZXN0YW1wO1xuICAgIGNvbnN0IGVsYXBzZWQgPSB0aW1lc3RhbXAgLSBzdGFydFRpbWU7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVyc1xuICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5taW4oZWxhcHNlZCAvIGR1cmF0aW9uLCAxKTtcbiAgICBjb25zdCBlYXNlSW5PdXRRdWFkID1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICBwcm9ncmVzcyA8IDAuNSA/IDIgKiBwcm9ncmVzcyAqKiAyIDogMSAtICgtMiAqIHByb2dyZXNzICsgMikgKiogMiAvIDI7XG5cbiAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gc3RhcnRTY3JvbGxUb3AgKyBkaXN0YW5jZSAqIGVhc2VJbk91dFF1YWQ7XG5cbiAgICBpZiAoZWxhcHNlZCA8IGR1cmF0aW9uKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uU3RlcCk7XG4gICAgfVxuICB9XG5cbiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGlvblN0ZXApO1xufVxuXG5jb25zdCB1c2VTY3JvbGxUb0Vycm9yID0gKGZvcm1paywgY29udGFpbmVySWQpID0+IHtcbiAgY29uc3QgeyBlcnJvcnMsIGlzVmFsaWQsIGlzU3VibWl0dGluZyB9ID0gZm9ybWlrO1xuICBjb25zdCBlcnJvckFycmF5ID0gT2JqZWN0LmtleXMoZXJyb3JzKTtcbiAgY29uc3QgZXJyb3JDb3VudCA9IGVycm9yQXJyYXkubGVuZ3RoO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzVmFsaWQgfHwgZXJyb3JDb3VudCA9PT0gMCkgcmV0dXJuO1xuXG4gICAgLy8gc29ydCBlbGVtZW50cyBieSBwb3NpdGlvblxuICAgIGNvbnN0IGVsZW1lbnRzU29ydGVkID0gZXJyb3JBcnJheVxuICAgICAgLnJlZHVjZSgocmVzdWx0LCBlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbbmFtZT0nJHtlcnJvcn0nXWApO1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHJldHVybiByZXN1bHQ7XG5cbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBlbGVtZW50LCBlcnJvciwgdG9wOiBlbFJlY3QudG9wIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LCBbXSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRvcCAtIGIudG9wKTtcblxuICAgIGlmIChlbGVtZW50c1NvcnRlZC5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50XG4gICAgICAuZ2V0RWxlbWVudEJ5SWQoY29udGFpbmVySWQpXG4gICAgICAucXVlcnlTZWxlY3RvcihcIi5NdWlEcmF3ZXItcGFwZXJcIik7XG4gICAgY29uc3QgdGFyZ2V0ID0gZWxlbWVudHNTb3J0ZWRbMF07XG5cbiAgICBpZiAoY29udGFpbmVyPy5jb250YWlucyh0YXJnZXQuZWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgb2Zmc2V0IG9mIHRoZSB0YXJnZXQgZWxlbWVudCByZWxhdGl2ZSB0byB0aGUgY29udGFpbmVyXG4gICAgICBjb25zdCBlbGVtT2ZmZXN0ID0gMTAwO1xuICAgICAgY29uc3QgYW5pbWF0aW9uRHVyYXRpb24gPSA1MDA7XG4gICAgICBjb25zdCBzY3JvbGxUb3AgPVxuICAgICAgICB0YXJnZXQudG9wIC0gY29udGFpbmVyUmVjdC50b3AgKyBjb250YWluZXIuc2Nyb2xsVG9wIC0gZWxlbU9mZmVzdDtcblxuICAgICAgLy8gU2Nyb2xsIHRoZSBjb250YWluZXIgdG8gdGhlIHRhcmdldCBlbGVtZW50J3MgcG9zaXRpb25cbiAgICAgIHNtb290aFNjcm9sbFRvKGNvbnRhaW5lciwgc2Nyb2xsVG9wLCBhbmltYXRpb25EdXJhdGlvbik7IC8vIDUwMG1zIGR1cmF0aW9uXG4gICAgfVxuICB9LCBbaXNTdWJtaXR0aW5nXSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1c2VTY3JvbGxUb0Vycm9yO1xuIiwiaW1wb3J0IHsgaXNUaWNrZXRSZWZ1bmRhYmxlIH0gZnJvbSBcIi4uL3V0aWxzL3RpY2tldFV0aWxzXCI7XG5cbmV4cG9ydCBjb25zdCBTVEFUVVNfQ09NUExFVEUgPSBcIkNvbXBsZXRlXCI7XG5leHBvcnQgY29uc3QgU1RBVFVTX0lOQ09NUExFVEUgPSBcIkluY29tcGxldGVcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfQ0FOQ0VMTEVEID0gXCJDYW5jZWxsZWRcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfVU5BU1NJR05FRCA9IFwiVW5hc3NpZ25lZFwiO1xuXG5leHBvcnQgY29uc3QgdXNlVGlja2V0RGV0YWlscyA9ICh0aWNrZXQpID0+IHtcbiAgY29uc3QgZ2V0U3RhdHVzID0gKCkgPT4ge1xuICAgIGlmICghdGlja2V0LmlzX2FjdGl2ZSkgcmV0dXJuIFNUQVRVU19DQU5DRUxMRUQ7XG4gICAgaWYgKHRpY2tldC5vd25lcl9pZCA9PT0gMCkgcmV0dXJuIFNUQVRVU19VTkFTU0lHTkVEO1xuICAgIGlmICghdGlja2V0Lm93bmVyPy5maXJzdF9uYW1lIHx8ICF0aWNrZXQub3duZXI/Lmxhc3RfbmFtZSlcbiAgICAgIHJldHVybiBTVEFUVVNfSU5DT01QTEVURTtcbiAgICByZXR1cm4gdGlja2V0Lm93bmVyLnN0YXR1cztcbiAgfTtcblxuICBpZiAoIXRpY2tldCkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IHN0YXR1cyA9IGdldFN0YXR1cygpO1xuICBjb25zdCBpc0FjdGl2ZSA9IHRpY2tldC5pc19hY3RpdmUgJiYgc3RhdHVzICE9PSBTVEFUVVNfQ0FOQ0VMTEVEO1xuICBjb25zdCBpc1JlZnVuZGFibGUgPSBpc1RpY2tldFJlZnVuZGFibGUodGlja2V0KTtcbiAgY29uc3QgYWxsb3dzRGVsZWdhdGUgPVxuICAgICh0aWNrZXQ/LnRpY2tldF90eXBlPy5hbGxvd3NfdG9fZGVsZWdhdGUgfHxcbiAgICAgIHRpY2tldD8ucHJvbW9fY29kZT8uYWxsb3dzX3RvX2RlbGVnYXRlKSAmJlxuICAgIHN0YXR1cyAhPT0gU1RBVFVTX1VOQVNTSUdORUQgJiZcbiAgICAhdGlja2V0Lm93bmVyPy5tYW5hZ2VyPy5pZCAmJlxuICAgICF0aWNrZXQub3duZXI/Lm1hbmFnZXJfaWQ7XG4gIGNvbnN0IGlzQ29tcGxldGUgPSBzdGF0dXMgPT09IFNUQVRVU19DT01QTEVURTtcbiAgY29uc3QgaXNVbmFzc2lnbmVkID0gc3RhdHVzID09PSBTVEFUVVNfVU5BU1NJR05FRDtcbiAgY29uc3QgaXNJbmNvbXBsZXRlID0gc3RhdHVzID09PSBTVEFUVVNfSU5DT01QTEVURTtcbiAgY29uc3QgY2FuUmVhc3NpZ24gPSAhaXNVbmFzc2lnbmVkICYmIHRpY2tldC50aWNrZXRfdHlwZS5hbGxvd3NfdG9fcmVhc3NpZ24gJiYgKCF0aWNrZXQucHJvbW9fY29kZSB8fCB0aWNrZXQucHJvbW9fY29kZS5hbGxvd3NfdG9fcmVhc3NpZ24pO1xuXG4gIHJldHVybiB7XG4gICAgc3RhdHVzLFxuICAgIGlzQ29tcGxldGUsXG4gICAgaXNVbmFzc2lnbmVkLFxuICAgIGlzSW5jb21wbGV0ZSxcbiAgICBpc0FjdGl2ZSxcbiAgICBpc1JlZnVuZGFibGUsXG4gICAgYWxsb3dzRGVsZWdhdGUsXG4gICAgY2FuUmVhc3NpZ25cbiAgfTtcbn07XG4iLCJpbXBvcnQgaTE4biBmcm9tIFwiaTE4bmV4dFwiO1xuaW1wb3J0IHsgaW5pdFJlYWN0STE4bmV4dCB9IGZyb20gXCJyZWFjdC1pMThuZXh0XCI7XG5pbXBvcnQgTGFuZ3VhZ2VEZXRlY3RvciBmcm9tIFwiaTE4bmV4dC1icm93c2VyLWxhbmd1YWdlZGV0ZWN0b3JcIjtcbmltcG9ydCBlbiBmcm9tIFwiLi9sb2NhbGVzL2VuLmpzb25cIjtcbmltcG9ydCBlcyBmcm9tIFwiLi9sb2NhbGVzL2VzLmpzb25cIjtcblxuLy8gaW1wb3J0IEJhY2tlbmQgZnJvbSAnaTE4bmV4dC1odHRwLWJhY2tlbmQnO1xuLy8gZG9uJ3Qgd2FudCB0byB1c2UgdGhpcz9cbi8vIGhhdmUgYSBsb29rIGF0IHRoZSBRdWljayBzdGFydCBndWlkZVxuLy8gZm9yIHBhc3NpbmcgaW4gbG5nIGFuZCB0cmFuc2xhdGlvbnMgb24gaW5pdFxuXG5pMThuXG4gIC8vIGxvYWQgdHJhbnNsYXRpb24gdXNpbmcgaHR0cCAtPiBzZWUgL3B1YmxpYy9sb2NhbGVzIChpLmUuIGh0dHBzOi8vZ2l0aHViLmNvbS9pMThuZXh0L3JlYWN0LWkxOG5leHQvdHJlZS9tYXN0ZXIvZXhhbXBsZS9yZWFjdC9wdWJsaWMvbG9jYWxlcylcbiAgLy8gbGVhcm4gbW9yZTogaHR0cHM6Ly9naXRodWIuY29tL2kxOG5leHQvaTE4bmV4dC1odHRwLWJhY2tlbmRcbiAgLy8gd2FudCB5b3VyIHRyYW5zbGF0aW9ucyB0byBiZSBsb2FkZWQgZnJvbSBhIHByb2Zlc3Npb25hbCBDRE4/ID0+IGh0dHBzOi8vZ2l0aHViLmNvbS9sb2NpemUvcmVhY3QtdHV0b3JpYWwjc3RlcC0yLS0tdXNlLXRoZS1sb2NpemUtY2RuXG4gIC8vIC51c2UoQmFja2VuZClcbiAgLy8gZGV0ZWN0IHVzZXIgbGFuZ3VhZ2VcbiAgLy8gbGVhcm4gbW9yZTogaHR0cHM6Ly9naXRodWIuY29tL2kxOG5leHQvaTE4bmV4dC1icm93c2VyLWxhbmd1YWdlRGV0ZWN0b3JcbiAgLnVzZShMYW5ndWFnZURldGVjdG9yKVxuICAvLyBwYXNzIHRoZSBpMThuIGluc3RhbmNlIHRvIHJlYWN0LWkxOG5leHQuXG4gIC51c2UoaW5pdFJlYWN0STE4bmV4dClcbiAgLy8gaW5pdCBpMThuZXh0XG4gIC8vIGZvciBhbGwgb3B0aW9ucyByZWFkOiBodHRwczovL3d3dy5pMThuZXh0LmNvbS9vdmVydmlldy9jb25maWd1cmF0aW9uLW9wdGlvbnNcbiAgLmluaXQoe1xuICAgIGZhbGxiYWNrTG5nOiBcImVuXCIsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIHJlc291cmNlczoge1xuICAgICAgZW46IHsgdHJhbnNsYXRpb246IGVuIH0sXG4gICAgICBlczogeyB0cmFuc2xhdGlvbjogZXMgfVxuICAgIH0sXG4gICAgaW50ZXJwb2xhdGlvbjoge1xuICAgICAgZXNjYXBlVmFsdWU6IGZhbHNlIC8vIG5vdCBuZWVkZWQgZm9yIHJlYWN0IGFzIGl0IGVzY2FwZXMgYnkgZGVmYXVsdFxuICAgIH1cbiAgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG47XG4iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IE9wZW5TdGFjayBGb3VuZGF0aW9uXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiAqL1xuaW1wb3J0IHsgTE9HT1VUX1VTRVIgfSBmcm9tIFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi9zZWN1cml0eS9hY3Rpb25zXCI7XG5pbXBvcnQge1xuICBTVEFSVF9MT0FESU5HLFxuICBTVE9QX0xPQURJTkcsXG4gIFJFU0VUX0xPQURJTkdcbn0gZnJvbSBcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvdXRpbHMvYWN0aW9uc1wiO1xuaW1wb3J0IHtcbiAgUkVTRVRfU1RBVEUsXG4gIFJFU0VUX0ZJTFRFUixcbiAgU0VUX1NUQVRFLFxuICBTRVRfVVNFUixcbiAgR0VUX1VTRVJfT1JERVJTLFxuICBHRVRfVElDS0VUU19CWV9PUkRFUixcbiAgVVBEQVRFX1RJQ0tFVFNfUkVGVU5EX1JFUVVFU1RFRCxcbiAgUkVDRUlWRV9USUNLRVQsXG4gIFJFQ0VJVkVfRVhUUkFfUVVFU1RJT05TLFxuICBVUERBVEVfVElDS0VULFxuICBBU1NJR05fVElDS0VULFxuICBSRVNFVF9BUElfRVJST1IsXG4gIFNFVF9BUElfRVJST1Jcbn0gZnJvbSBcIi4vYWN0aW9uc1wiO1xuaW1wb3J0IHsgRklSU1RfUEFHRSB9IGZyb20gXCIuL3V0aWxzL2NvbnN0YW50c1wiO1xuXG5jb25zdCBERUZBVUxUX1NUQVRFID0ge1xuICBzdW1taXQ6IG51bGwsXG4gIHVzZXI6IHt9LFxuICB3aWRnZXRMb2FkaW5nOiBmYWxzZSxcbiAgbWVtYmVyT3JkZXJzOiBbXSxcbiAgZXh0cmFRdWVzdGlvbnM6IFtdLFxuICBjdXJyZW50VGlja2V0OiBudWxsLFxuICBlcnJvcnM6IHt9LFxuICBsb2FkaW5nOiBmYWxzZSxcbiAgaXNPcmRlckxvYWRpbmc6IGZhbHNlLFxuICBvcmRlcnNfY3VycmVudF9wYWdlOiAxLFxuICBvcmRlcnNfbGFzdF9wYWdlOiAxLFxuICBvcmRlcnNfcGVyX3BhZ2U6IDUsXG4gIG9yZGVyc190b3RhbDogMCxcbiAgdGlja2V0X2N1cnJlbnRfcGFnZTogMSxcbiAgdGlja2V0X2xhc3RfcGFnZTogMSxcbiAgdGlja2V0X3Blcl9wYWdlOiA1LFxuICB0aWNrZXRfdG90YWw6IDAsXG4gIGFwaUVycm9yOiBudWxsXG59O1xuXG5jb25zdCBXaWRnZXRSZWR1Y2VyID0gKHN0YXRlID0gREVGQVVMVF9TVEFURSwgeyB0eXBlLCBwYXlsb2FkIH0gPSB7fSkgPT4ge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIExPR09VVF9VU0VSOlxuICAgIGNhc2UgUkVTRVRfU1RBVEU6XG4gICAgICByZXR1cm4gREVGQVVMVF9TVEFURTtcbiAgICBjYXNlIFNUQVJUX0xPQURJTkc6XG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgbG9hZGluZzogdHJ1ZSB9O1xuICAgIGNhc2UgU1RPUF9MT0FESU5HOlxuICAgIGNhc2UgUkVTRVRfTE9BRElORzpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBsb2FkaW5nOiBmYWxzZSB9O1xuICAgIGNhc2UgUkVTRVRfQVBJX0VSUk9SOlxuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGFwaUVycm9yOiBudWxsIH07XG4gICAgY2FzZSBSRVNFVF9GSUxURVI6XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgb3JkZXJzX2N1cnJlbnRfcGFnZTogMSxcbiAgICAgICAgb3JkZXJzX2xhc3RfcGFnZTogMVxuICAgICAgfTtcbiAgICBjYXNlIFNFVF9TVEFURTpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCAuLi5wYXlsb2FkIH07XG4gICAgY2FzZSBTRVRfQVBJX0VSUk9SOiB7XG4gICAgICBjb25zdCB7IHRpdGxlLCBodG1sOiBib2R5IH0gPSBwYXlsb2FkO1xuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGFwaUVycm9yOiB7IHRpdGxlLCBib2R5IH0gfTtcbiAgICB9XG4gICAgY2FzZSBTRVRfVVNFUjpcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCB1c2VyOiBwYXlsb2FkIH07XG4gICAgY2FzZSBHRVRfVVNFUl9PUkRFUlM6IHtcbiAgICAgIGNvbnN0IHsgbWVtYmVyT3JkZXJzIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHsgZGF0YSwgdG90YWwsIGN1cnJlbnRfcGFnZSwgbGFzdF9wYWdlIH0gPSBwYXlsb2FkLnJlc3BvbnNlO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbWVtYmVyT3JkZXJzOlxuICAgICAgICAgIGN1cnJlbnRfcGFnZSA9PT0gRklSU1RfUEFHRSA/IGRhdGEgOiBbLi4ubWVtYmVyT3JkZXJzLCAuLi5kYXRhXSxcbiAgICAgICAgb3JkZXJzX3RvdGFsOiB0b3RhbCxcbiAgICAgICAgb3JkZXJzX2N1cnJlbnRfcGFnZTogY3VycmVudF9wYWdlLFxuICAgICAgICBvcmRlcnNfbGFzdF9wYWdlOiBsYXN0X3BhZ2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgR0VUX1RJQ0tFVFNfQllfT1JERVI6IHtcbiAgICAgIGNvbnN0IHsgbWVtYmVyT3JkZXJzIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHsgZGF0YSwgdG90YWwsIGN1cnJlbnRfcGFnZSwgbGFzdF9wYWdlIH0gPSBwYXlsb2FkLnJlc3BvbnNlO1xuICAgICAgY29uc3QgZm9ybWVyT3JkZXIgPSBtZW1iZXJPcmRlcnMuZmluZCgobykgPT4gby5pZCA9PT0gZGF0YVswXT8ub3JkZXJfaWQpO1xuXG4gICAgICBjb25zdCB1cGRhdGVkT3JkZXIgPSB7XG4gICAgICAgIC4uLmZvcm1lck9yZGVyLFxuICAgICAgICBtZW1iZXJUaWNrZXRzOlxuICAgICAgICAgIGN1cnJlbnRfcGFnZSA9PT0gRklSU1RfUEFHRVxuICAgICAgICAgICAgPyBkYXRhXG4gICAgICAgICAgICA6IFsuLi5mb3JtZXJPcmRlci5tZW1iZXJUaWNrZXRzLCAuLi5kYXRhXSxcbiAgICAgICAgdGlja2V0c19wYWdlX2N1cnJlbnQ6IGN1cnJlbnRfcGFnZSxcbiAgICAgICAgdGlja2V0c19wYWdlX2xhc3Q6IGxhc3RfcGFnZSxcbiAgICAgICAgdGlja2V0c190b3RhbDogdG90YWxcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbWVtYmVyT3JkZXJzOiBtZW1iZXJPcmRlcnMubWFwKChtbykgPT5cbiAgICAgICAgICBtby5pZCA9PT0gdXBkYXRlZE9yZGVyLmlkID8gdXBkYXRlZE9yZGVyIDogbW9cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBVUERBVEVfVElDS0VUU19SRUZVTkRfUkVRVUVTVEVEOiB7XG4gICAgICBjb25zdCB7IG1lbWJlck9yZGVycyB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB0aWNrZXRzUmVmdW5kUmVxdWVzdGVkID0gcGF5bG9hZDtcbiAgICAgIGNvbnN0IG9yZGVyID0gbWVtYmVyT3JkZXJzLmZpbmQoXG4gICAgICAgIChvKSA9PiBvLmlkID09PSB0aWNrZXRzUmVmdW5kUmVxdWVzdGVkWzBdPy5vcmRlcl9pZFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUaWNrZXRzID0gb3JkZXI/Lm1lbWJlclRpY2tldHMubWFwKFxuICAgICAgICAodGlja2V0KSA9PlxuICAgICAgICAgIHRpY2tldHNSZWZ1bmRSZXF1ZXN0ZWQuZmluZCgodHJyKSA9PiB0cnIuaWQgPT09IHRpY2tldC5pZCkgfHwgdGlja2V0XG4gICAgICApO1xuICAgICAgY29uc3QgdXBkYXRlZE9yZGVyID0ge1xuICAgICAgICAuLi5vcmRlcixcbiAgICAgICAgbWVtYmVyVGlja2V0czogdXBkYXRlZFRpY2tldHNcbiAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgbWVtYmVyT3JkZXJzOiBtZW1iZXJPcmRlcnMubWFwKChtbykgPT5cbiAgICAgICAgICBtby5pZCA9PT0gdXBkYXRlZE9yZGVyLmlkID8gdXBkYXRlZE9yZGVyIDogbW9cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSBSRUNFSVZFX1RJQ0tFVDoge1xuICAgICAgY29uc3QgdGlja2V0ID0gcGF5bG9hZC5yZXNwb25zZTtcbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBjdXJyZW50VGlja2V0OiB0aWNrZXQgfTtcbiAgICB9XG4gICAgY2FzZSBSRUNFSVZFX0VYVFJBX1FVRVNUSU9OUzoge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBwYXlsb2FkLnJlc3BvbnNlO1xuICAgICAgcmV0dXJuIHsgLi4uc3RhdGUsIGV4dHJhUXVlc3Rpb25zOiBkYXRhIH07XG4gICAgfVxuICAgIGNhc2UgVVBEQVRFX1RJQ0tFVDoge1xuICAgICAgY29uc3QgdGlja2V0RGF0YSA9IHBheWxvYWQucmVzcG9uc2U7XG4gICAgICBjb25zdCBuZXdPcmRlcnMgPSBzdGF0ZS5tZW1iZXJPcmRlcnMubWFwKChvcmRlcikgPT4ge1xuICAgICAgICBjb25zdCBuZXdUaWNrZXRzID0gb3JkZXIubWVtYmVyVGlja2V0cy5tYXAoKHRpY2tldCkgPT4ge1xuICAgICAgICAgIGlmICh0aWNrZXQuaWQgPT09IHRpY2tldERhdGEuaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aWNrZXREYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGlja2V0O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4geyAuLi5vcmRlciwgbWVtYmVyVGlja2V0czogbmV3VGlja2V0cyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7IC4uLnN0YXRlLCBtZW1iZXJPcmRlcnM6IG5ld09yZGVycyB9O1xuICAgIH1cbiAgICBjYXNlIEFTU0lHTl9USUNLRVQ6IHtcbiAgICAgIGNvbnN0IHRpY2tldERhdGEgPSBwYXlsb2FkLnJlc3BvbnNlO1xuICAgICAgY29uc3QgbmV3T3JkZXJzID0gc3RhdGUubWVtYmVyT3JkZXJzLm1hcCgob3JkZXIpID0+IHtcbiAgICAgICAgY29uc3QgbmV3VGlja2V0cyA9IG9yZGVyLm1lbWJlclRpY2tldHMubWFwKCh0aWNrZXQpID0+IHtcbiAgICAgICAgICBpZiAodGlja2V0LmlkID09PSB0aWNrZXREYXRhLmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGlja2V0RGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRpY2tldDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHsgLi4ub3JkZXIsIG1lbWJlclRpY2tldHM6IG5ld1RpY2tldHMgfTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyAuLi5zdGF0ZSwgY3VycmVudFRpY2tldDogdGlja2V0RGF0YSwgbWVtYmVyT3JkZXJzOiBuZXdPcmRlcnMgfTtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgV2lkZ2V0UmVkdWNlcjtcbiIsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVN0b3JlIH0gZnJvbSBcIkByZWR1eGpzL3Rvb2xraXRcIjtcbmltcG9ydCB7XG4gIHBlcnNpc3RTdG9yZSxcbiAgcGVyc2lzdFJlZHVjZXIsXG4gIEZMVVNILFxuICBSRUhZRFJBVEUsXG4gIFBBVVNFLFxuICBQRVJTSVNULFxuICBQVVJHRSxcbiAgUkVHSVNURVJcbn0gZnJvbSBcInJlZHV4LXBlcnNpc3RcIjtcbmltcG9ydCBzdG9yYWdlIGZyb20gXCJyZWR1eC1wZXJzaXN0L2xpYi9zdG9yYWdlXCI7XG5pbXBvcnQgeyBjb21iaW5lUmVkdWNlcnMgfSBmcm9tIFwicmVkdXhcIjtcbmltcG9ydCBXaWRnZXRSZWR1Y2VyIGZyb20gXCIuL3JlZHVjZXJcIjtcblxuZXhwb3J0IGNvbnN0IGdldFN0b3JlID0gKHtcbiAgY2xpZW50SWQsXG4gIGxvZ2luVXJsLFxuICBzdW1taXQsXG4gIGFwaUJhc2VVcmwsXG4gIHVwZGF0ZVByb2ZpbGVcbn0pID0+IHtcbiAgLy8gdG8gYWRkIG90aGVyIHJlZHVjZXJzIGxhdGVyXG4gIGNvbnN0IHJlZHVjZXJzID0gY29tYmluZVJlZHVjZXJzKHtcbiAgICB3aWRnZXRTdGF0ZTogV2lkZ2V0UmVkdWNlclxuICB9KTtcblxuICBjb25zdCBzdG9yZSA9IGNvbmZpZ3VyZVN0b3JlKHtcbiAgICByZWR1Y2VyOiBwZXJzaXN0UmVkdWNlcihcbiAgICAgIHtcbiAgICAgICAga2V5OiBgcm9vdF9teV9vcmRlcnNfdGlja2V0c18ke2NsaWVudElkfWAsXG4gICAgICAgIHN0b3JhZ2VcbiAgICAgIH0sXG4gICAgICByZWR1Y2Vyc1xuICAgICksXG4gICAgbWlkZGxld2FyZTogKGdldERlZmF1bHRNaWRkbGV3YXJlKSA9PlxuICAgICAgZ2V0RGVmYXVsdE1pZGRsZXdhcmUoe1xuICAgICAgICB0aHVuazoge1xuICAgICAgICAgIGV4dHJhQXJndW1lbnQ6IHtcbiAgICAgICAgICAgIGNsaWVudElkLFxuICAgICAgICAgICAgYXBpQmFzZVVybCxcbiAgICAgICAgICAgIHN1bW1pdCxcbiAgICAgICAgICAgIGxvZ2luVXJsLFxuICAgICAgICAgICAgdXBkYXRlUHJvZmlsZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaW1tdXRhYmxlQ2hlY2s6IGZhbHNlLFxuICAgICAgICBzZXJpYWxpemFibGVDaGVjazoge1xuICAgICAgICAgIGlnbm9yZWRBY3Rpb25zOiBbRkxVU0gsIFJFSFlEUkFURSwgUEFVU0UsIFBFUlNJU1QsIFBVUkdFLCBSRUdJU1RFUl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgfSk7XG5cbiAgcmV0dXJuIHN0b3JlO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUluaXRTdG9yZSA9IChjb25maWcpID0+IHtcbiAgY29uc3Qgc3RvcmUgPSB1c2VNZW1vKCgpID0+IGdldFN0b3JlKGNvbmZpZyksIFtdKTtcbiAgY29uc3QgcGVyc2lzdG9yID0gdXNlTWVtbygoKSA9PiBwZXJzaXN0U3RvcmUoc3RvcmUpLCBbc3RvcmVdKTtcblxuICByZXR1cm4ge1xuICAgIHN0b3JlLFxuICAgIHBlcnNpc3RvclxuICB9O1xufTtcbiIsImltcG9ydCB7XG4gIGluaXRMb2dPdXQsXG4gIGdldEFjY2Vzc1Rva2VuXG59IGZyb20gXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3NlY3VyaXR5L21ldGhvZHNcIjtcbmltcG9ydCAqIGFzIFNlbnRyeSBmcm9tIFwiQHNlbnRyeS9yZWFjdFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0QWNjZXNzVG9rZW5TYWZlbHkgPSBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGdldEFjY2Vzc1Rva2VuKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmxvZyhcIm15LW9yZGVycy10aWNrZXRzLXdpZGdlOjogZ2V0QWNjZXNzVG9rZW5TYWZlbHkgZXJyb3I6IFwiLCBlKTtcbiAgICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihlKTtcbiAgICBpbml0TG9nT3V0KCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XG4gIH1cbn07XG4iLCJleHBvcnQgY29uc3QgTEFTVF9IT1VSX09GXzI0X0hPVVIgPSAyMztcbmV4cG9ydCBjb25zdCBMQVNUX01JTlVURV9PRl9IT1VSID0gNTk7XG5leHBvcnQgY29uc3QgT05FX1BBR0VfTkVYVCA9IDE7XG5leHBvcnQgY29uc3QgTUlMTElTRUNfVE9fU0VDID0gMTAwMDtcbmV4cG9ydCBjb25zdCBPTkVfREFZID0gMTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lURU1TX1BFUl9QQUdFID0gNTtcbmV4cG9ydCBjb25zdCBGSVJTVF9QQUdFID0gMTtcbmV4cG9ydCBjb25zdCBQQUdJTkFUSU9OX0RJU1BMQVlfQ09VTlQgPSA1O1xuZXhwb3J0IGNvbnN0IFNURVBfT05FID0gMTtcbmV4cG9ydCBjb25zdCBTVEVQX1RXTyA9IDI7XG5cbmV4cG9ydCBjb25zdCBTVEFUVVNfQ09NUExFVEUgPSBcIlNUQVRVU19DT01QTEVURVwiO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19JTkNPTVBMRVRFID0gXCJTVEFUVVNfSU5DT01QTEVURVwiO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19QRU5ESU5HID0gXCJTVEFUVVNfUEVORElOR1wiO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19DQU5DRUxMRUQgPSBcIlNUQVRVU19DQU5DRUxMRURcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfRVJST1IgPSBcIlNUQVRVU19FUlJPUlwiO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19QUk9DRVNTSU5HID0gXCJTVEFUVVNfUFJPQ0VTU0lOR1wiO1xuZXhwb3J0IGNvbnN0IFNUQVRVU19VTkFTU0lHTkVEID0gXCJTVEFUVVNfVU5BU1NJR05FRFwiO1xuXG5leHBvcnQgY29uc3QgU1RBVFVTX1JFRlVORF9QRU5ESU5HID0gXCJTVEFUVVNfUkVGVU5EX1BFTkRJTkdcIjtcbmV4cG9ydCBjb25zdCBTVEFUVVNfUkVGVU5EX0FQUFJPVkVEID0gXCJTVEFUVVNfUkVGVU5EX0FQUFJPVkVEXCI7XG5leHBvcnQgY29uc3QgU1RBVFVTX1JFRlVORF9SRUpFQ1RFRCA9IFwiU1RBVFVTX1JFRlVORF9SRUpFQ1RFRFwiO1xuXG5leHBvcnQgY29uc3QgSkVTVF9USU1FT1VUX0lOX01JTExJU0VDID0gMTAwMDA7XG5cbmV4cG9ydCBjb25zdCBPTkVfSVRFTSA9IDE7XG5leHBvcnQgY29uc3QgVFdPX0lURU0gPSAyO1xuZXhwb3J0IGNvbnN0IEZJVkVfSVRFTSA9IDU7XG5leHBvcnQgY29uc3QgU0lYX0lURU0gPSA2O1xuXG5leHBvcnQgY29uc3QgUFJPTUlTRV9CQVRDSF9MSU1JVCA9IDEwO1xuZXhwb3J0IGNvbnN0IEZJRlRZX1BFUl9QQUdFID0gNTA7XG5cbmV4cG9ydCBjb25zdCBFUlJPUl9DT0RFUyA9IHtcbiAgNDAxOiA0MDEsXG4gIDQwMzogNDAxLFxuICA0MTI6IDQwMSxcbiAgNTAwOiA1MDBcbn07XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnQtdGltZXpvbmVcIjtcbmltcG9ydCB7IHVzZURpc3BhdGNoIH0gZnJvbSBcInJlYWN0LXJlZHV4XCI7XG5pbXBvcnQge1xuICBMQVNUX0hPVVJfT0ZfMjRfSE9VUixcbiAgTEFTVF9NSU5VVEVfT0ZfSE9VUixcbiAgTUlMTElTRUNfVE9fU0VDXG59IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q3VycmVuY3kgPSAodmFsdWUsIHsgbG9jYWxlID0gXCJlbi1VU1wiLCAuLi5vcHRpb25zIH0pID0+IHtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgY3VycmVuY3k6IFwiVVNEXCIsXG4gICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAyLFxuICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMlxuICB9O1xuXG4gIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUsIHtcbiAgICBzdHlsZTogXCJjdXJyZW5jeVwiLFxuICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgIC4uLm9wdGlvbnNcbiAgfSk7XG5cbiAgcmV0dXJuIGZvcm1hdHRlci5mb3JtYXQodmFsdWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZvcm1hdHRlZERhdGUgPSAoZGF0ZXRpbWUsIHRpbWVab25lKSA9PiB7XG4gIGlmICh0aW1lWm9uZSlcbiAgICByZXR1cm4gbW9tZW50XG4gICAgICAudHooZGF0ZXRpbWUgKiBNSUxMSVNFQ19UT19TRUMsIHRpbWVab25lKVxuICAgICAgLmZvcm1hdChcIk1NTU0gREQsIFlZWVlcIik7XG5cbiAgcmV0dXJuIG1vbWVudC51bml4KGRhdGV0aW1lKS5mb3JtYXQoXCJNTU1NIERELCBZWVlZXCIpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZU9yZGVyVG90YWxzID0gKHsgb3JkZXIsIHN1bW1pdCB9KSA9PiB7XG4gIGlmICghb3JkZXIgfHwgIXN1bW1pdCkgcmV0dXJuIHt9O1xuICBjb25zdCB0aWNrZXRzID0gb3JkZXI/Lm1lbWJlclRpY2tldHM7XG4gIGlmICghdGlja2V0cykgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IHsgcmVmdW5kZWRfYW1vdW50LCBkaXNjb3VudF9hbW91bnQsIHRheGVzX2Ftb3VudCwgYW1vdW50IH0gPSBvcmRlcjtcbiAgY29uc3QgeyB0aWNrZXRfdHlwZXMgfSA9IHN1bW1pdDtcblxuICBjb25zdCB0aWNrZXRTdW1tYXJ5ID0gW107XG4gIGxldCBwdXJjaGFzZVRpY2tldFRvdGFsID0gMDtcblxuICBjb25zdCBjdXJyZW5jeU9iamVjdCA9IHsgY3VycmVuY3k6IG9yZGVyLmN1cnJlbmN5IH07XG5cbiAgT2JqZWN0LmtleXMob3JkZXIudGlja2V0c19leGNlcnB0X2J5X3RpY2tldF90eXBlKS5tYXAoKHRpY2tldCkgPT4ge1xuICAgIGNvbnN0IHRpY2tldFR5cGUgPSB0aWNrZXRfdHlwZXM/LmZpbmQoKHR0KSA9PiB0dC5uYW1lID09PSB0aWNrZXQpO1xuICAgIGlmICghdGlja2V0VHlwZSkgcmV0dXJuIG51bGw7XG4gICAgdGlja2V0U3VtbWFyeS5wdXNoKHtcbiAgICAgIHRpY2tldF90eXBlX2lkOiB0aWNrZXRUeXBlLmlkLFxuICAgICAgdGlja2V0X3R5cGU6IHRpY2tldFR5cGUsXG4gICAgICBuYW1lOiB0aWNrZXQsXG4gICAgICBxdHk6IG9yZGVyLnRpY2tldHNfZXhjZXJwdF9ieV90aWNrZXRfdHlwZVt0aWNrZXRdXG4gICAgfSk7XG4gICAgcHVyY2hhc2VUaWNrZXRUb3RhbCArPVxuICAgICAgdGlja2V0VHlwZS5jb3N0ICogb3JkZXIudGlja2V0c19leGNlcnB0X2J5X3RpY2tldF90eXBlW3RpY2tldF07XG5cbiAgICByZXR1cm4gdGlja2V0U3VtbWFyeTtcbiAgfSk7XG5cbiAgY29uc3QgcHVyY2hhc2VUb3RhbCA9IGZvcm1hdEN1cnJlbmN5KHB1cmNoYXNlVGlja2V0VG90YWwsIGN1cnJlbmN5T2JqZWN0KTtcblxuICBjb25zdCBkaXNjb3VudFRvdGFsID0gZm9ybWF0Q3VycmVuY3koZGlzY291bnRfYW1vdW50LCBjdXJyZW5jeU9iamVjdCk7XG4gIGNvbnN0IHJlZnVuZFRvdGFsID0gZm9ybWF0Q3VycmVuY3kocmVmdW5kZWRfYW1vdW50LCBjdXJyZW5jeU9iamVjdCk7XG4gIGNvbnN0IHRheGVzVG90YWwgPSBmb3JtYXRDdXJyZW5jeSh0YXhlc19hbW91bnQsIGN1cnJlbmN5T2JqZWN0KTtcbiAgY29uc3QgYW1vdW50VG90YWwgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3JkZXIsIFwiYW1vdW50XCIpXG4gICAgPyBmb3JtYXRDdXJyZW5jeShhbW91bnQsIGN1cnJlbmN5T2JqZWN0KVxuICAgIDogZm9ybWF0Q3VycmVuY3kocHVyY2hhc2VUb3RhbCwgY3VycmVuY3lPYmplY3QpO1xuXG4gIHJldHVybiB7XG4gICAgZGlzY291bnRUb3RhbCxcbiAgICByZWZ1bmRUb3RhbCxcbiAgICB0YXhlc1RvdGFsLFxuICAgIGFtb3VudFRvdGFsLFxuICAgIHRpY2tldFN1bW1hcnlcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRPcmRlclRpY2tldHMgPSAobWVtYmVyT3JkZXJzLCBvcmRlcklkKSA9PiB7XG4gIGNvbnN0IG9yZGVycyA9IG1lbWJlck9yZGVycy5maWx0ZXIoKG8pID0+IG8uaWQgPT09IG9yZGVySWQpO1xuICByZXR1cm4gb3JkZXJzWzBdPy5tZW1iZXJUaWNrZXRzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVwb2NoTG93ZXJVcHBlckluU2Vjb25kcyA9ICh0cykgPT4ge1xuICBjb25zdCBsb3dlciA9IHRzLnNldEhvdXJzKDAsIDAsIDAsIDApIC8gTUlMTElTRUNfVE9fU0VDO1xuICBjb25zdCB1cHBlciA9XG4gICAgdHMuc2V0SG91cnMoTEFTVF9IT1VSX09GXzI0X0hPVVIsIExBU1RfTUlOVVRFX09GX0hPVVIsIDAsIDApIC9cbiAgICBNSUxMSVNFQ19UT19TRUM7XG4gIHJldHVybiB7XG4gICAgbG93ZXIsXG4gICAgdXBwZXJcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0Q3VycmVudFRpbWUgPSAoKSA9PlxuICBNYXRoLnJvdW5kKCtuZXcgRGF0ZSgpIC8gTUlMTElTRUNfVE9fU0VDKTtcblxuZXhwb3J0IGNvbnN0IGdldE5vdyA9ICgpID0+IChkaXNwYXRjaCwgZ2V0U3RhdGUpID0+IHtcbiAgY29uc3QgeyB0aW1lclN0YXRlIH0gPSBnZXRTdGF0ZSgpO1xuICByZXR1cm4gdGltZXJTdGF0ZT8ubm93VXRjID09IG51bGwgPyBkZWZhdWx0Q3VycmVudFRpbWUoKSA6IHRpbWVyU3RhdGU/Lm5vd1V0Yztcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VOb3cgPSAoKSA9PiB7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICByZXR1cm4gZGlzcGF0Y2goZ2V0Tm93KCkpO1xufTtcbiIsImltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IHsgTUlMTElTRUNfVE9fU0VDLCBPTkVfREFZIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyB1c2VOb3cgfSBmcm9tIFwiLlwiO1xuXG5leHBvcnQgY29uc3QgY2hlY2tTdW1taXRQYXN0ID0gKHN1bW1pdCwgbm93KSA9PiB7XG4gIGlmICghc3VtbWl0KSByZXR1cm4gbnVsbDtcblxuICBjb25zdCByZWFzc2lnbl9kYXRlID1cbiAgICBzdW1taXQ/LnJlYXNzaWduX3RpY2tldF90aWxsX2RhdGUgJiZcbiAgICBzdW1taXQucmVhc3NpZ25fdGlja2V0X3RpbGxfZGF0ZSA8IHN1bW1pdC5lbmRfZGF0ZVxuICAgICAgPyBzdW1taXQucmVhc3NpZ25fdGlja2V0X3RpbGxfZGF0ZVxuICAgICAgOiBzdW1taXQuZW5kX2RhdGU7XG5cbiAgcmV0dXJuIG5vdyA+IHJlYXNzaWduX2RhdGU7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tTdW1taXRTdGFydGVkID0gKHN1bW1pdCwgbm93KSA9PiB7XG4gIGlmICghc3VtbWl0KSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gc3VtbWl0LnN0YXJ0X2RhdGUgPCBub3c7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3VtbWl0RGF5c0RpZmYgPSAoc3VtbWl0KSA9PiB7XG4gIGlmICghc3VtbWl0KSByZXR1cm4gbnVsbDtcbiAgY29uc3Qgc3RhcnREYXkgPSBtb21lbnQoc3VtbWl0LnN0YXJ0X2RhdGUgKiBNSUxMSVNFQ19UT19TRUMpLnR6KFxuICAgIHN1bW1pdC50aW1lX3pvbmVfaWRcbiAgKTtcbiAgY29uc3QgZW5kRGF5ID0gbW9tZW50KHN1bW1pdC5lbmRfZGF0ZSAqIE1JTExJU0VDX1RPX1NFQykudHooXG4gICAgc3VtbWl0LnRpbWVfem9uZV9pZFxuICApO1xuICBjb25zdCBkYXlzID0gZW5kRGF5Py5kaWZmKHN0YXJ0RGF5LCBcImRheXNcIik7XG4gIHJldHVybiB7XG4gICAgc3RhcnREYXksXG4gICAgZW5kRGF5LFxuICAgIGRheXNcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdW1taXRGb3JtYXR0ZWREYXRlID0gKHN1bW1pdCkgPT4ge1xuICBpZiAoIXN1bW1pdCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHsgc3RhcnREYXksIGVuZERheSwgZGF5cyB9ID0gZ2V0U3VtbWl0RGF5c0RpZmYoc3VtbWl0KTtcbiAgaWYgKCFzdGFydERheSB8fCAhZW5kRGF5KSByZXR1cm4gbnVsbDtcbiAgbGV0IGZvcm1hdFN0YXJ0RGF0ZSA9IFwiTU1NTSBERCwgWVlZWVwiO1xuICBsZXQgZm9ybWF0RW5kRGF0ZSA9IFwiTU1NTSBERCwgWVlZWVwiO1xuICBpZiAoc3RhcnREYXkueWVhcigpID09PSBlbmREYXkueWVhcigpKSBmb3JtYXRTdGFydERhdGUgPSBcIk1NTU0gRERcIjtcbiAgaWYgKHN0YXJ0RGF5Lm1vbnRoKCkgPT09IGVuZERheS5tb250aCgpKSBmb3JtYXRFbmREYXRlID0gXCJERCwgWVlZWVwiO1xuXG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0RGF5LmZvcm1hdChmb3JtYXRTdGFydERhdGUpO1xuICBjb25zdCBlbmREYXRlID0gZW5kRGF5LmZvcm1hdChmb3JtYXRFbmREYXRlKTtcblxuICBpZiAoZGF5cyA+IE9ORV9EQVkpIHJldHVybiBgJHtzdGFydERhdGV9IC0gJHtlbmREYXRlfWA7XG5cbiAgcmV0dXJuIHN0YXJ0RGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdW1taXRMb2NhdGlvbiA9IChzdW1taXQpID0+IHtcbiAgaWYgKCFzdW1taXQpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IGxvY2F0aW9uID0gc3VtbWl0LmxvY2F0aW9ucz8uZmluZChcbiAgICAobCkgPT4gbC5jbGFzc19uYW1lID09PSBcIlN1bW1pdFZlbnVlXCIgJiYgbC5pc19tYWluID09PSB0cnVlXG4gICk7XG5cbiAgaWYgKCFsb2NhdGlvbikgcmV0dXJuIG51bGw7XG5cbiAgcmV0dXJuIGAke2xvY2F0aW9uLmNpdHl9LCAke2xvY2F0aW9uLmNvdW50cnl9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdW1taXRSZWFzc2lnbkRhdGUgPSAoc3VtbWl0KSA9PiB7XG4gIGlmICghc3VtbWl0KSByZXR1cm4gbnVsbDtcblxuICByZXR1cm4gc3VtbWl0LnJlYXNzaWduX3RpY2tldF90aWxsX2RhdGUgJiZcbiAgICBzdW1taXQucmVhc3NpZ25fdGlja2V0X3RpbGxfZGF0ZSA8IHN1bW1pdC5lbmRfZGF0ZVxuICAgID8gc3VtbWl0LnJlYXNzaWduX3RpY2tldF90aWxsX2RhdGVcbiAgICA6IHN1bW1pdC5lbmRfZGF0ZTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VTdW1taXREZXRhaWxzID0gKHsgc3VtbWl0IH0pID0+IHtcbiAgY29uc3Qgbm93ID0gdXNlTm93KCk7XG5cbiAgaWYgKCFzdW1taXQpIHJldHVybiB7fTtcblxuICBjb25zdCBsb2NhdGlvbiA9IGdldFN1bW1pdExvY2F0aW9uKHN1bW1pdCk7XG4gIGNvbnN0IGZvcm1hdHRlZERhdGUgPSBnZXRTdW1taXRGb3JtYXR0ZWREYXRlKHN1bW1pdCk7XG4gIGNvbnN0IHJlYXNzaWduRGF0ZSA9IGdldFN1bW1pdFJlYXNzaWduRGF0ZShzdW1taXQpO1xuICBjb25zdCBmb3JtYXR0ZWRSZWFzc2lnbkRhdGUgPSBtb21lbnQudHooXG4gICAgcmVhc3NpZ25EYXRlLFxuICAgIHN1bW1pdC50aW1lX3pvbmU/LnRpbWVfem9uZV9pZFxuICApO1xuICBjb25zdCBkYXlzVW50aWxSZWFzc2lnbkRlYWRsaW5lID0gZ2V0U3VtbWl0RGF5c0RpZmYoXG4gICAgbm93LFxuICAgIHJlYXNzaWduRGF0ZSxcbiAgICBzdW1taXQudGltZV96b25lPy5uYW1lXG4gICk7XG5cbiAgY29uc3QgaXNQYXN0ID0gY2hlY2tTdW1taXRQYXN0KHN1bW1pdCwgbm93KTtcbiAgY29uc3QgaXNTdGFydGVkID0gY2hlY2tTdW1taXRTdGFydGVkKHN1bW1pdCwgbm93KTtcbiAgY29uc3QgaXNSZWFzc2lnbmFibGUgPSByZWFzc2lnbkRhdGUgPiBub3c7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBzdW1taXQ/Lm5hbWUsXG4gICAgbm93LFxuICAgIGxvY2F0aW9uLFxuICAgIGZvcm1hdHRlZERhdGUsXG4gICAgcmVhc3NpZ25EYXRlLFxuICAgIGZvcm1hdHRlZFJlYXNzaWduRGF0ZSxcbiAgICBkYXlzVW50aWxSZWFzc2lnbkRlYWRsaW5lLFxuICAgIGlzUGFzdCxcbiAgICBpc1N0YXJ0ZWQsXG4gICAgaXNSZWFzc2lnbmFibGVcbiAgfTtcbn07XG4iLCJpbXBvcnQgKiBhcyB5dXAgZnJvbSBcInl1cFwiO1xuaW1wb3J0IGkxOG4gZnJvbSBcIi4uL2kxOG5cIjtcbmltcG9ydCB7XG4gIFNUQVRVU19DQU5DRUxMRUQsXG4gIFNUQVRVU19DT01QTEVURSxcbiAgU1RBVFVTX0lOQ09NUExFVEUsXG4gIFNUQVRVU19VTkFTU0lHTkVELFxuICBTVEFUVVNfUkVGVU5EX1BFTkRJTkcsXG4gIFNUQVRVU19SRUZVTkRfQVBQUk9WRUQsXG4gIFNUQVRVU19SRUZVTkRfUkVKRUNURURcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBUSUNLRVRfQVRURU5ERUVfS0VZUyB9IGZyb20gXCIuLi9jb21wb25lbnRzL1RpY2tldERldGFpbC9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGNoZWNrSWZWYWx1ZU1hdGNoLFxuICBnZXRUeXBlSW5pdGlhbFZhbHVlLFxuICB0b1NsdWdcbn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvRXh0cmFRdWVzdGlvbnNGaWVsZHMvY29tcG9uZW50cy91dGlsc1wiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb25UeXBlX0NoZWNrYm94LFxuICBRdWVzdGlvblR5cGVfQ2hlY2tCb3hMaXN0LFxuICBRdWVzdGlvblR5cGVfQ29tYm9Cb3gsXG4gIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3gsXG4gIFF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbkxpc3Rcbn0gZnJvbSBcIi4uL2NvbXBvbmVudHMvRXh0cmFRdWVzdGlvbnNGaWVsZHMvY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBjb25zdCBzdGF0dXNEYXRhID0ge1xuICBbU1RBVFVTX1VOQVNTSUdORURdOiB7XG4gICAgdHlwZTogU1RBVFVTX1VOQVNTSUdORUQsXG4gICAgdGV4dDogaTE4bi50KFwidGlja2V0X3N0YXR1cy51bmFzc2lnbmVkXCIpXG4gIH0sXG4gIFtTVEFUVVNfSU5DT01QTEVURV06IHtcbiAgICB0eXBlOiBTVEFUVVNfSU5DT01QTEVURSxcbiAgICB0ZXh0OiBpMThuLnQoXCJ0aWNrZXRfc3RhdHVzLmluY29tcGxldGVcIilcbiAgfSxcbiAgW1NUQVRVU19DT01QTEVURV06IHtcbiAgICB0eXBlOiBTVEFUVVNfQ09NUExFVEUsXG4gICAgdGV4dDogaTE4bi50KFwidGlja2V0X3N0YXR1cy5jb21wbGV0ZVwiKVxuICB9LFxuICBbU1RBVFVTX0NBTkNFTExFRF06IHtcbiAgICB0eXBlOiBTVEFUVVNfQ0FOQ0VMTEVELFxuICAgIHRleHQ6IGkxOG4udChcInRpY2tldF9zdGF0dXMuY2FuY2VsbGVkXCIpXG4gIH1cbn07XG5leHBvcnQgY29uc3QgZ2V0VGlja2V0U3RhdHVzS2V5ID0gKHRpY2tldCkgPT4ge1xuICBpZiAoIXRpY2tldC5pc19hY3RpdmUpIHJldHVybiBTVEFUVVNfQ0FOQ0VMTEVEO1xuXG4gIGlmICh0aWNrZXQub3duZXJfaWQgPT09IDApIHJldHVybiBTVEFUVVNfVU5BU1NJR05FRDtcblxuICBpZiAoIXRpY2tldC5vd25lcj8uZmlyc3RfbmFtZSB8fCAhdGlja2V0Lm93bmVyPy5sYXN0X25hbWUpXG4gICAgcmV0dXJuIFNUQVRVU19JTkNPTVBMRVRFO1xuXG4gIGlmICh0aWNrZXQub3duZXIgJiYgdGlja2V0Lm93bmVyPy5zdGF0dXMgPT09IFwiSW5jb21wbGV0ZVwiKVxuICAgIHJldHVybiBTVEFUVVNfSU5DT01QTEVURTtcblxuICBpZiAodGlja2V0Lm93bmVyICYmIHRpY2tldC5vd25lcj8uc3RhdHVzID09PSBcIkNvbXBsZXRlXCIpXG4gICAgcmV0dXJuIFNUQVRVU19DT01QTEVURTtcblxuICByZXR1cm4gU1RBVFVTX0lOQ09NUExFVEU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGlja2V0U3RhdHVzRGF0YSA9ICh0aWNrZXQsIGlzU3VtbWl0UGFzdCkgPT5cbiAgc3RhdHVzRGF0YVtnZXRUaWNrZXRTdGF0dXNLZXkodGlja2V0LCBpc1N1bW1pdFBhc3QpXTtcblxuZXhwb3J0IGNvbnN0IGdldFRpY2tldFJvbGUgPSAodGlja2V0KSA9PiB7XG4gIGlmICghdGlja2V0LmJhZGdlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCB7IGZlYXR1cmVzIH0gPSB0aWNrZXQuYmFkZ2U7XG5cbiAgaWYgKGZlYXR1cmVzLmxlbmd0aCA+IDApXG4gICAgcmV0dXJuIGZlYXR1cmVzLm1hcCgoZmVhdHVyZSkgPT4gZmVhdHVyZS5uYW1lKS5qb2luKFwiLCBcIik7XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGlja2V0VHlwZSA9ICh0aWNrZXQsIHN1bW1pdCkgPT5cbiAgc3VtbWl0LnRpY2tldF90eXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmlkID09PSB0aWNrZXQudGlja2V0X3R5cGVfaWQpO1xuXG5leHBvcnQgY29uc3QgaXNUaWNrZXRSZWZ1bmRhYmxlID0gKHRpY2tldCkgPT5cbiAgdGlja2V0Py5maW5hbF9hbW91bnQgPiAwICYmXG4gIHRpY2tldD8uZmluYWxfYW1vdW50ID4gdGlja2V0Py5yZWZ1bmRlZF9hbW91bnQgJiZcbiAgIXRpY2tldD8ucmVmdW5kX3JlcXVlc3RzPy5zb21lKChycikgPT4gcnIuc3RhdHVzID09PSBcIlJlcXVlc3RlZFwiKTtcblxuZXhwb3J0IGNvbnN0IHRpY2tldHNSZWZ1bmRhYmxlID0gKHRpY2tldHMpID0+XG4gIHRpY2tldHM/LmZpbHRlcigodGlja2V0KSA9PiBpc1RpY2tldFJlZnVuZGFibGUodGlja2V0KSkubGVuZ3RoIHx8IDA7XG5cbmV4cG9ydCBjb25zdCBnZXRSZWZ1bmRlZFJlcXVlc3RlZFRpY2tldHMgPSAodGlja2V0cykgPT5cbiAgdGlja2V0cz8uZmlsdGVyKCh0aWNrZXQpID0+XG4gICAgdGlja2V0LnJlZnVuZF9yZXF1ZXN0cz8uc29tZSgocnIpID0+IHJyLnN0YXR1cyA9PT0gXCJSZXF1ZXN0ZWRcIilcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGdldFJlZnVuZGVkUmVxdWVzdGVkU3RhdHVzID0gKHRpY2tldCkgPT4ge1xuICBpZiAodGlja2V0LnJlZnVuZF9yZXF1ZXN0cz8uc29tZSgocnIpID0+IHJyLnN0YXR1cyA9PT0gXCJSZXF1ZXN0ZWRcIikpXG4gICAgcmV0dXJuIFNUQVRVU19SRUZVTkRfUEVORElORztcbiAgaWYgKHRpY2tldC5yZWZ1bmRfcmVxdWVzdHM/LnNvbWUoKHJyKSA9PiByci5zdGF0dXMgPT09IFwiQXBwcm92ZWRcIikpXG4gICAgcmV0dXJuIFNUQVRVU19SRUZVTkRfQVBQUk9WRUQ7XG4gIGlmICh0aWNrZXQucmVmdW5kX3JlcXVlc3RzPy5zb21lKChycikgPT4gcnIuc3RhdHVzID09PSBcIlJlamVjdGVkXCIpKVxuICAgIHJldHVybiBTVEFUVVNfUkVGVU5EX1JFSkVDVEVEO1xuICByZXR1cm4gU1RBVFVTX1JFRlVORF9QRU5ESU5HO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlZnVuZFJlcXVlc3RlZFN0YXR1c0NvbG9yID0gKHRpY2tldCkgPT4ge1xuICBjb25zdCBzdGF0dXMgPSBnZXRSZWZ1bmRlZFJlcXVlc3RlZFN0YXR1cyh0aWNrZXQpO1xuICBsZXQgc3RhdHVzQ29sb3IgPSBcIlwiO1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgU1RBVFVTX1JFRlVORF9QRU5ESU5HOlxuICAgICAgc3RhdHVzQ29sb3IgPSBcInBlbmRpbmdcIjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU1RBVFVTX1JFRlVORF9BUFBST1ZFRDpcbiAgICAgIHN0YXR1c0NvbG9yID0gXCJhcHByb3ZlZFwiO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBTVEFUVVNfUkVGVU5EX1JFSkVDVEVEOlxuICAgICAgc3RhdHVzQ29sb3IgPSBcInJlamVjdGVkXCI7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc3RhdHVzQ29sb3IgPSBcInBlbmRpbmdcIjtcbiAgfVxuICByZXR1cm4gc3RhdHVzQ29sb3I7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZVZhbGlkYXRpb24gPSAodHlwZSwgbmFtZSwgaXNSZXF1aXJlZCkgPT4ge1xuICBsZXQgc2NoZW1hO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9DaGVja2JveDpcbiAgICAgIHNjaGVtYSA9IHl1cC5ib29sKCkub25lT2YoW3RydWVdLCBpMThuLnQoXCJ2YWxpZGF0aW9uLmNoZWNrYm94LnJlcXVpcmVkXCIpKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX1JhZGlvQnV0dG9uTGlzdDpcbiAgICAgIHNjaGVtYSA9IHl1cC5zdHJpbmcoYEVudGVyICR7bmFtZX1gKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgUXVlc3Rpb25UeXBlX0NoZWNrQm94TGlzdDpcbiAgICAgIHNjaGVtYSA9IHl1cC5hcnJheSgpLm9mKHl1cC5zdHJpbmcoKSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFF1ZXN0aW9uVHlwZV9Db3VudHJ5Q29tYm9Cb3g6XG4gICAgY2FzZSBRdWVzdGlvblR5cGVfQ29tYm9Cb3g6XG4gICAgICBzY2hlbWEgPSB5dXAuc3RyaW5nKGBFbnRlciAke25hbWV9YCk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgc2NoZW1hID0geXVwLnN0cmluZyhgRW50ZXIgJHtuYW1lfWApO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICBpZiAoaXNSZXF1aXJlZCkge1xuICAgIHNjaGVtYSA9IHNjaGVtYS5yZXF1aXJlZChgJHtuYW1lfSBpcyByZXF1aXJlZGApO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUFuc3dlcnMgPSAoXG4gIG93bmVyLFxuICBleHRyYVF1ZXN0aW9ucyxcbiAgYW5zd2VycyxcbiAgbWFuYWdlcixcbiAgaW5jbHVkZURlbGVnYXRpb24sXG4gIGluY2x1ZGVBdHRlbmRlZUluZm8sXG4gIGluY2x1ZGVEaXNjbGFpbWVyLFxuICBvbmx5UmVsZXZhbnQgPSBmYWxzZVxuKSA9PiB7XG4gIGNvbnN0IGluaXRpYWxWYWx1ZXMgPSB7fTtcblxuICBpZiAoaW5jbHVkZUF0dGVuZGVlSW5mbykge1xuICAgIGluaXRpYWxWYWx1ZXNbVElDS0VUX0FUVEVOREVFX0tFWVMuZW1haWxdID1cbiAgICAgIGFuc3dlcnNbVElDS0VUX0FUVEVOREVFX0tFWVMuZW1haWxdIHx8IG93bmVyLmVtYWlsO1xuICAgIGluaXRpYWxWYWx1ZXNbVElDS0VUX0FUVEVOREVFX0tFWVMuZmlyc3ROYW1lXSA9XG4gICAgICBhbnN3ZXJzW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmZpcnN0TmFtZV0gfHwgb3duZXIuZmlyc3RfbmFtZTtcbiAgICBpbml0aWFsVmFsdWVzW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmxhc3ROYW1lXSA9XG4gICAgICBhbnN3ZXJzW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmxhc3ROYW1lXSB8fCBvd25lci5sYXN0X25hbWU7XG4gICAgaW5pdGlhbFZhbHVlc1tUSUNLRVRfQVRURU5ERUVfS0VZUy5jb21wYW55XSA9XG4gICAgICBhbnN3ZXJzW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmNvbXBhbnldIHx8IG93bmVyLmNvbXBhbnk7XG4gIH1cblxuICBpZiAoaW5jbHVkZURpc2NsYWltZXIpIHtcbiAgICBpbml0aWFsVmFsdWVzW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmRpc2NsYWltZXJBY2NlcHRlZF0gPVxuICAgICAgYW5zd2Vyc1tUSUNLRVRfQVRURU5ERUVfS0VZUy5kaXNjbGFpbWVyQWNjZXB0ZWRdIHx8XG4gICAgICBvd25lci5kaXNjbGFpbWVyX2FjY2VwdGVkO1xuICB9XG5cbiAgaWYgKGluY2x1ZGVEZWxlZ2F0aW9uKSB7XG4gICAgaW5pdGlhbFZhbHVlcy5kZWxlZ2F0ZWRfZmlyc3RfbmFtZSA9XG4gICAgICBhbnN3ZXJzLmRlbGVnYXRlZF9maXJzdF9uYW1lIHx8IG1hbmFnZXI/LmZpcnN0X25hbWUgfHwgXCJcIjtcbiAgICBpbml0aWFsVmFsdWVzLmRlbGVnYXRlZF9sYXN0X25hbWUgPVxuICAgICAgYW5zd2Vycy5kZWxlZ2F0ZWRfbGFzdF9uYW1lIHx8IG1hbmFnZXI/Lmxhc3RfbmFtZSB8fCBcIlwiO1xuICB9XG5cbiAgZXh0cmFRdWVzdGlvbnMuZm9yRWFjaCgocSkgPT4ge1xuICAgIGNvbnN0IHF1ZXN0aW9uU2x1ZyA9IHRvU2x1ZyhxLm5hbWUsIHEuaWQpO1xuICAgIGNvbnN0IGFuc3dlciA9IGFuc3dlcnNbcXVlc3Rpb25TbHVnXTtcbiAgICBpbml0aWFsVmFsdWVzW3F1ZXN0aW9uU2x1Z10gPSBhbnN3ZXIgfHwgZ2V0VHlwZUluaXRpYWxWYWx1ZShxKTtcblxuICAgIGlmIChxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJRdWVzdGlvblNsdWcgPSB0b1NsdWcoXG4gICAgICAgICAgcnVsZS5zdWJfcXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICBydWxlLnN1Yl9xdWVzdGlvbi5pZFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBzdWJBbnN3ZXIgPSBhbnN3ZXJzW3N1YlF1ZXN0aW9uU2x1Z107XG4gICAgICAgIGNvbnN0IG1hdGNoID0gY2hlY2tJZlZhbHVlTWF0Y2goYW5zd2VyLCBydWxlLmFuc3dlcl92YWx1ZXMpO1xuXG4gICAgICAgIGlmICghb25seVJlbGV2YW50IHx8IG1hdGNoKSB7XG4gICAgICAgICAgaW5pdGlhbFZhbHVlc1tzdWJRdWVzdGlvblNsdWddID1cbiAgICAgICAgICAgIHN1YkFuc3dlciB8fCBnZXRUeXBlSW5pdGlhbFZhbHVlKHJ1bGUuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gaW5pdGlhbFZhbHVlcztcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFZhbGlkYXRpb25TY2hlbWEgPSAoXG4gIGV4dHJhUXVlc3Rpb25zLFxuICBpbmNsdWRlQXR0ZW5kZWVJbmZvLFxuICBhbGxvd3NEZWxlZ2F0aW9uLFxuICBkaXNjbGFpbWVyTWFuZGF0b3J5XG4pID0+IHtcbiAgY29uc3Qgc2NoZW1hID0ge307XG5cbiAgaWYgKGluY2x1ZGVBdHRlbmRlZUluZm8pIHtcbiAgICBzY2hlbWFbVElDS0VUX0FUVEVOREVFX0tFWVMuZW1haWxdID0geXVwXG4gICAgICAuc3RyaW5nKGkxOG4udChcInZhbGlkYXRpb24uZW1haWwuc3RyaW5nXCIpKVxuICAgICAgLmVtYWlsKGkxOG4udChcInZhbGlkYXRpb24uZW1haWwuZm9ybWF0XCIpKVxuICAgICAgLnJlcXVpcmVkKGkxOG4udChcInZhbGlkYXRpb24uZW1haWwucmVxdWlyZWRcIikpO1xuICAgIHNjaGVtYVtUSUNLRVRfQVRURU5ERUVfS0VZUy5maXJzdE5hbWVdID0geXVwXG4gICAgICAuc3RyaW5nKGkxOG4udChcInZhbGlkYXRpb24uZmlyc3RfbmFtZS5zdHJpbmdcIikpXG4gICAgICAucmVxdWlyZWQoaTE4bi50KFwidmFsaWRhdGlvbi5maXJzdF9uYW1lLnJlcXVpcmVkXCIpKTtcbiAgICBzY2hlbWFbVElDS0VUX0FUVEVOREVFX0tFWVMubGFzdE5hbWVdID0geXVwXG4gICAgICAuc3RyaW5nKGkxOG4udChcInZhbGlkYXRpb24ubGFzdF9uYW1lLnN0cmluZ1wiKSlcbiAgICAgIC5yZXF1aXJlZChpMThuLnQoXCJ2YWxpZGF0aW9uLmxhc3RfbmFtZS5yZXF1aXJlZFwiKSk7XG4gICAgc2NoZW1hW1RJQ0tFVF9BVFRFTkRFRV9LRVlTLmNvbXBhbnldID0geXVwLmxhenkoKHZhbHVlKSA9PlxuICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiXG4gICAgICAgID8geXVwXG4gICAgICAgICAgICAub2JqZWN0KClcbiAgICAgICAgICAgIC5yZXF1aXJlZChpMThuLnQoXCJ2YWxpZGF0aW9uLmNvbXBhbnkucmVxdWlyZWRcIikpXG4gICAgICAgICAgICAudHlwZUVycm9yKGkxOG4udChcInZhbGlkYXRpb24ucmVxdWlyZWRfZmllbGRcIikpXG4gICAgICAgIDogeXVwLnN0cmluZygpLnJlcXVpcmVkKGkxOG4udChcInZhbGlkYXRpb24uY29tcGFueS5yZXF1aXJlZFwiKSlcbiAgICApO1xuICB9XG5cbiAgaWYgKGRpc2NsYWltZXJNYW5kYXRvcnkpIHtcbiAgICBzY2hlbWFbVElDS0VUX0FUVEVOREVFX0tFWVMuZGlzY2xhaW1lckFjY2VwdGVkXSA9IHl1cFxuICAgICAgLmJvb2woKVxuICAgICAgLm9uZU9mKFt0cnVlXSwgaTE4bi50KFwidmFsaWRhdGlvbi5jaGVja2JveC5yZXF1aXJlZFwiKSk7XG4gIH1cblxuICBpZiAoYWxsb3dzRGVsZWdhdGlvbikge1xuICAgIHNjaGVtYS5kZWxlZ2F0ZWRfZmlyc3RfbmFtZSA9IHl1cFxuICAgICAgLnN0cmluZyhpMThuLnQoXCJ2YWxpZGF0aW9uLmZpcnN0X25hbWUuc3RyaW5nXCIpKVxuICAgICAgLnJlcXVpcmVkKGkxOG4udChcInZhbGlkYXRpb24uZmlyc3RfbmFtZS5yZXF1aXJlZFwiKSk7XG5cbiAgICBzY2hlbWEuZGVsZWdhdGVkX2xhc3RfbmFtZSA9IHl1cFxuICAgICAgLnN0cmluZyhpMThuLnQoXCJ2YWxpZGF0aW9uLmxhc3RfbmFtZS5zdHJpbmdcIikpXG4gICAgICAucmVxdWlyZWQoaTE4bi50KFwidmFsaWRhdGlvbi5sYXN0X25hbWUucmVxdWlyZWRcIikpO1xuICB9XG5cbiAgZXh0cmFRdWVzdGlvbnMuZm9yRWFjaCgocSkgPT4ge1xuICAgIGNvbnN0IHF1ZXN0aW9uU2x1ZyA9IHRvU2x1ZyhxLm5hbWUsIHEuaWQpO1xuICAgIHNjaGVtYVtxdWVzdGlvblNsdWddID0gZ2V0VHlwZVZhbGlkYXRpb24ocS50eXBlLCBxLm5hbWUsIHEubWFuZGF0b3J5KTtcblxuICAgIGlmIChxLnN1Yl9xdWVzdGlvbl9ydWxlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgcS5zdWJfcXVlc3Rpb25fcnVsZXMuZm9yRWFjaCgocnVsZSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJRdWVzdGlvbiA9IHJ1bGUuc3ViX3F1ZXN0aW9uO1xuICAgICAgICBjb25zdCBzdWJRdWVzdGlvblNsdWcgPSB0b1NsdWcoc3ViUXVlc3Rpb24ubmFtZSwgc3ViUXVlc3Rpb24uaWQpO1xuICAgICAgICBzY2hlbWFbc3ViUXVlc3Rpb25TbHVnXSA9IGdldFR5cGVWYWxpZGF0aW9uKFxuICAgICAgICAgIHN1YlF1ZXN0aW9uLnR5cGUsXG4gICAgICAgICAgc3ViUXVlc3Rpb24ubmFtZSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApXG4gICAgICAgICAgLm51bGxhYmxlKClcbiAgICAgICAgICAud2hlbihxdWVzdGlvblNsdWcsIHtcbiAgICAgICAgICAgIGlzOiAocXVlc3Rpb25BbnMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBjaGVja0lmVmFsdWVNYXRjaChxdWVzdGlvbkFucywgcnVsZS5hbnN3ZXJfdmFsdWVzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoZW46IChzY2gpID0+IHNjaC5yZXF1aXJlZChpMThuLnQoXCJ2YWxpZGF0aW9uLnJlcXVpcmVkX3F1ZXN0aW9uXCIpKVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4geXVwLm9iamVjdChzY2hlbWEpO1xufTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJjb3B5SWNvbl9fX2xJM2VRXCI7XG52YXIgXzIgPSBcInJldmVyc2VkX19fekp6bURcIjtcbnZhciBfMyA9IFwidHJ1bmNhdGVkX19faldTblVcIjtcbnZhciBfNCA9IFwid3JhcHBlcl9fX21WUGlSXCI7XG5leHBvcnQgeyBfMSBhcyBcImNvcHlJY29uXCIsIF8yIGFzIFwicmV2ZXJzZWRcIiwgXzMgYXMgXCJ0cnVuY2F0ZWRcIiwgXzQgYXMgXCJ3cmFwcGVyXCIgfVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG52YXIgXzEgPSBcIk11aU91dGxpbmVkSW5wdXQtbm90Y2hlZE91dGxpbmVfX19Sb2ltUlwiO1xudmFyIF8yID0gXCJNdWlQaWNrZXJzQ2FsZW5kYXJIZWFkZXItbGFiZWxDb250YWluZXJfX19vb0kwVlwiO1xudmFyIF8zID0gXCJjYWxlbmRhckRpc3BsYXlfX19pbV9qaFwiO1xudmFyIF80ID0gXCJjb250YWluZXJfX19OM1k0WFwiO1xudmFyIF81ID0gXCJkYXRlUGlja2VyQ29udGFpbmVyX19fSlcybE9cIjtcbnZhciBfNiA9IFwiZGF0ZXBpY2tlckNsb3NlX19fVjlnSENcIjtcbnZhciBfNyA9IFwiZmlsdGVyQ29udGFpbmVyX19fckdwWVZcIjtcbnZhciBfOCA9IFwiZmlsdGVyRGF0ZUxhYmVsX19faWZENHBcIjtcbnZhciBfOSA9IFwiZmlsdGVySWNvbl9fX2wyMUtJXCI7XG52YXIgX2EgPSBcImZpbHRlckxhYmVsX19fX1Awd25cIjtcbnZhciBfYiA9IFwiZmlsdGVyTGlzdENvbnRhaW5lcl9fX1ZtZEdxXCI7XG52YXIgX2MgPSBcImZpbHRlck51bUFjdGl2ZV9fX1Z1SENKXCI7XG52YXIgX2QgPSBcImZpbHRlclNvcnRDb250YWluZXJfX19hckJ2UVwiO1xudmFyIF9lID0gXCJsYWJlbF9fX3lORnlqXCI7XG52YXIgX2YgPSBcInNob3dEYXRlUGlja2VyX19fVXBRYnBcIjtcbnZhciBfMTAgPSBcInNvcnRDb250YWluZXJfX19sUnNqVVwiO1xudmFyIF8xMSA9IFwic29ydEljb25fX19mVlY1S1wiO1xudmFyIF8xMiA9IFwic29ydExhYmVsX19fVXFMVENcIjtcbnZhciBfMTMgPSBcInNvcnRMaXN0Q29udGFpbmVyX19fY21uQkRcIjtcbmV4cG9ydCB7IF8xIGFzIFwiTXVpT3V0bGluZWRJbnB1dC1ub3RjaGVkT3V0bGluZVwiLCBfMiBhcyBcIk11aVBpY2tlcnNDYWxlbmRhckhlYWRlci1sYWJlbENvbnRhaW5lclwiLCBfMyBhcyBcImNhbGVuZGFyRGlzcGxheVwiLCBfNCBhcyBcImNvbnRhaW5lclwiLCBfNSBhcyBcImRhdGVQaWNrZXJDb250YWluZXJcIiwgXzYgYXMgXCJkYXRlcGlja2VyQ2xvc2VcIiwgXzcgYXMgXCJmaWx0ZXJDb250YWluZXJcIiwgXzggYXMgXCJmaWx0ZXJEYXRlTGFiZWxcIiwgXzkgYXMgXCJmaWx0ZXJJY29uXCIsIF9hIGFzIFwiZmlsdGVyTGFiZWxcIiwgX2IgYXMgXCJmaWx0ZXJMaXN0Q29udGFpbmVyXCIsIF9jIGFzIFwiZmlsdGVyTnVtQWN0aXZlXCIsIF9kIGFzIFwiZmlsdGVyU29ydENvbnRhaW5lclwiLCBfZSBhcyBcImxhYmVsXCIsIF9mIGFzIFwic2hvd0RhdGVQaWNrZXJcIiwgXzEwIGFzIFwic29ydENvbnRhaW5lclwiLCBfMTEgYXMgXCJzb3J0SWNvblwiLCBfMTIgYXMgXCJzb3J0TGFiZWxcIiwgXzEzIGFzIFwic29ydExpc3RDb250YWluZXJcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiY2FuY2VsQnRuX19fcURleGhcIjtcbnZhciBfMiA9IFwiZm9vdGVyX19fU043MHlcIjtcbnZhciBfMyA9IFwic2F2ZUJ0bl9fX25iVTZjXCI7XG5leHBvcnQgeyBfMSBhcyBcImNhbmNlbEJ0blwiLCBfMiBhcyBcImZvb3RlclwiLCBfMyBhcyBcInNhdmVCdG5cIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiZXJyb3JMYWJlbF9fX25vY3lYXCI7XG5leHBvcnQgeyBfMSBhcyBcImVycm9yTGFiZWxcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwib3JkZXJEZXRhaWxzTW1vdW50X19fcjNrUkFcIjtcbnZhciBfMiA9IFwib3JkZXJEZXRhaWxzVGlja2V0c19fX200SWpLXCI7XG52YXIgXzMgPSBcIm9yZGVyU3VtbWFyeUJ1dHRvbl9fX3V4amh0XCI7XG52YXIgXzQgPSBcIm9yZGVyU3VtbWFyeVB1cmNoYXNlZEluZm9fX19fUkJYRVwiO1xudmFyIF81ID0gXCJvcmRlclN1bW1hcnlUYWJsZV9fX1lEbnhWXCI7XG52YXIgXzYgPSBcIm9yZGVyU3VtbWFyeVdyYXBwZXJfX19Sd0lFUlwiO1xudmFyIF83ID0gXCJyZWZ1bmREaXNhYmxlZF9fX2p2cmszXCI7XG5leHBvcnQgeyBfMSBhcyBcIm9yZGVyRGV0YWlsc01tb3VudFwiLCBfMiBhcyBcIm9yZGVyRGV0YWlsc1RpY2tldHNcIiwgXzMgYXMgXCJvcmRlclN1bW1hcnlCdXR0b25cIiwgXzQgYXMgXCJvcmRlclN1bW1hcnlQdXJjaGFzZWRJbmZvXCIsIF81IGFzIFwib3JkZXJTdW1tYXJ5VGFibGVcIiwgXzYgYXMgXCJvcmRlclN1bW1hcnlXcmFwcGVyXCIsIF83IGFzIFwicmVmdW5kRGlzYWJsZWRcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiYXNzaWduVGlja2V0QnV0dG9uX19fenpMc2NcIjtcbnZhciBfMiA9IFwiYmxhY2tCdXR0b25fX19sOWhqOVwiO1xudmFyIF8zID0gXCJkaXNwbGF5X25vbmVfX19DcXBMM1wiO1xudmFyIF80ID0gXCJsYWJlbF9fX3pYRFd6XCI7XG52YXIgXzUgPSBcIm9yZGVyVGlja2V0Q29udGFpbmVyX19fWkpMemtcIjtcbnZhciBfNiA9IFwib3JkZXJUaWNrZXRJbmZvX19fZ2VtcUJcIjtcbnZhciBfNyA9IFwib3JkZXJUaWNrZXRJbmZvQ29udGFpbmVyX19fX3A2NlZcIjtcbnZhciBfOCA9IFwib3JkZXJXcmFwcGVyX19feURCQW9cIjtcbnZhciBfOSA9IFwicmVhc3NpZ25CdXR0b25fX19Sb2pNNVwiO1xudmFyIF9hID0gXCJyZWZ1bmRCdXR0b25zX19fakRsNEhcIjtcbnZhciBfYiA9IFwidGFiQnV0dG9uc19fX3hUeUpBXCI7XG52YXIgX2MgPSBcInRpY2tldEFjdGlvbkJ1dHRvbnNfX19ycFNNUVwiO1xudmFyIF9kID0gXCJ0aWNrZXRMaXN0Q29udGFpbmVyX19fY2ZtcnJcIjtcbnZhciBfZSA9IFwidGlja2V0Tm9fX19hMmlNOVwiO1xudmFyIF9mID0gXCJ0aWNrZXRPd25lckVtYWlsX19fWnQ0T0VcIjtcbnZhciBfMTAgPSBcInRpY2tldFRpY2tldFR5cGVfX19acV9mMFwiO1xudmFyIF8xMSA9IFwidmlld0ZpbmlzaFRpY2tldEJ1dHRvbl9fX0hGNkltXCI7XG52YXIgXzEyID0gXCJ2aWV3TW9yZUJ1dHRvbl9fX0tfMXpUXCI7XG5leHBvcnQgeyBfMSBhcyBcImFzc2lnblRpY2tldEJ1dHRvblwiLCBfMiBhcyBcImJsYWNrQnV0dG9uXCIsIF8zIGFzIFwiZGlzcGxheV9ub25lXCIsIF80IGFzIFwibGFiZWxcIiwgXzUgYXMgXCJvcmRlclRpY2tldENvbnRhaW5lclwiLCBfNiBhcyBcIm9yZGVyVGlja2V0SW5mb1wiLCBfNyBhcyBcIm9yZGVyVGlja2V0SW5mb0NvbnRhaW5lclwiLCBfOCBhcyBcIm9yZGVyV3JhcHBlclwiLCBfOSBhcyBcInJlYXNzaWduQnV0dG9uXCIsIF9hIGFzIFwicmVmdW5kQnV0dG9uc1wiLCBfYiBhcyBcInRhYkJ1dHRvbnNcIiwgX2MgYXMgXCJ0aWNrZXRBY3Rpb25CdXR0b25zXCIsIF9kIGFzIFwidGlja2V0TGlzdENvbnRhaW5lclwiLCBfZSBhcyBcInRpY2tldE5vXCIsIF9mIGFzIFwidGlja2V0T3duZXJFbWFpbFwiLCBfMTAgYXMgXCJ0aWNrZXRUaWNrZXRUeXBlXCIsIF8xMSBhcyBcInZpZXdGaW5pc2hUaWNrZXRCdXR0b25cIiwgXzEyIGFzIFwidmlld01vcmVCdXR0b25cIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiYWN0aW9uQnV0dG9uc19fX3U3bVBTXCI7XG52YXIgXzIgPSBcImFwcHJvdmVkX19fc3hFSldcIjtcbnZhciBfMyA9IFwiYnV0dG9uUGlsbF9fX0xlc2F6XCI7XG52YXIgXzQgPSBcImNhbmNlbEJ1dHRvbl9fX3lmaFliXCI7XG52YXIgXzUgPSBcImNvbnRpbnVlQnV0dG9uX19fTnlYM3NcIjtcbnZhciBfNiA9IFwiZGVsZXRlSWNvbl9fX0ZTd3llXCI7XG52YXIgXzcgPSBcInBlbmRpbmdfX19hRWJXd1wiO1xudmFyIF84ID0gXCJyZWZ1bmRFcnJvck1zZ19fX0FhaHpyXCI7XG52YXIgXzkgPSBcInJlZnVuZFN1Y2Nlc3NmdWxfX196ckRRWVwiO1xudmFyIF9hID0gXCJyZWZ1bmRUaWNrZXRCb3hDb250YWluZXJfX195YTYxM1wiO1xudmFyIF9iID0gXCJyZWplY3RlZF9fX05KRTRaXCI7XG52YXIgX2MgPSBcInN1Y2Nlc3NNc2dfX19IdE1zZVwiO1xudmFyIF9kID0gXCJzdWNjZXNzTXNnMl9fX1E2em5hXCI7XG52YXIgX2UgPSBcInRpY2tldE5vX19fX0VBRDRcIjtcbmV4cG9ydCB7IF8xIGFzIFwiYWN0aW9uQnV0dG9uc1wiLCBfMiBhcyBcImFwcHJvdmVkXCIsIF8zIGFzIFwiYnV0dG9uUGlsbFwiLCBfNCBhcyBcImNhbmNlbEJ1dHRvblwiLCBfNSBhcyBcImNvbnRpbnVlQnV0dG9uXCIsIF82IGFzIFwiZGVsZXRlSWNvblwiLCBfNyBhcyBcInBlbmRpbmdcIiwgXzggYXMgXCJyZWZ1bmRFcnJvck1zZ1wiLCBfOSBhcyBcInJlZnVuZFN1Y2Nlc3NmdWxcIiwgX2EgYXMgXCJyZWZ1bmRUaWNrZXRCb3hDb250YWluZXJcIiwgX2IgYXMgXCJyZWplY3RlZFwiLCBfYyBhcyBcInN1Y2Nlc3NNc2dcIiwgX2QgYXMgXCJzdWNjZXNzTXNnMlwiLCBfZSBhcyBcInRpY2tldE5vXCIgfVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG52YXIgXzEgPSBcImNsb3NlQnRuX19feVNRQ09cIjtcbnZhciBfMiA9IFwiaGVhZGVyX19fZkJYRzlcIjtcbnZhciBfMyA9IFwidGl0bGVfX190eVplUVwiO1xudmFyIF80ID0gXCJ3cmFwcGVyX19fUk9KR3NcIjtcbmV4cG9ydCB7IF8xIGFzIFwiY2xvc2VCdG5cIiwgXzIgYXMgXCJoZWFkZXJcIiwgXzMgYXMgXCJ0aXRsZVwiLCBfNCBhcyBcIndyYXBwZXJcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiYWxpZ25DZW50ZXJfX19ONEV2T1wiO1xudmFyIF8yID0gXCJhc3NpZ25CdG5fX19GUUgzblwiO1xudmFyIF8zID0gXCJhdHRlbmRlZUNvbnRhaW5lcl9fX2QzUkdDXCI7XG52YXIgXzQgPSBcImF0dGVuZGVlSW5mb05vdGVfX19LZDF5NlwiO1xudmFyIF81ID0gXCJhdHRlbmRlZUluZm9UaXRsZV9fX1Q5VTV6XCI7XG52YXIgXzYgPSBcIm9yZGVyTm9fX195cVJyOFwiO1xudmFyIF83ID0gXCJzdWJ0aXRsZV9fX1N2UmxVXCI7XG52YXIgXzggPSBcInRpY2tldEFzc2lnbkNvbnRhaW5lcl9fX2RKNXZXXCI7XG52YXIgXzkgPSBcInRpY2tldFR5cGVfX19ZWHdPSlwiO1xuZXhwb3J0IHsgXzEgYXMgXCJhbGlnbkNlbnRlclwiLCBfMiBhcyBcImFzc2lnbkJ0blwiLCBfMyBhcyBcImF0dGVuZGVlQ29udGFpbmVyXCIsIF80IGFzIFwiYXR0ZW5kZWVJbmZvTm90ZVwiLCBfNSBhcyBcImF0dGVuZGVlSW5mb1RpdGxlXCIsIF82IGFzIFwib3JkZXJOb1wiLCBfNyBhcyBcInN1YnRpdGxlXCIsIF84IGFzIFwidGlja2V0QXNzaWduQ29udGFpbmVyXCIsIF85IGFzIFwidGlja2V0VHlwZVwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJ3cmFwcGVyX19fRXdPUnpcIjtcbmV4cG9ydCB7IF8xIGFzIFwid3JhcHBlclwiIH1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxudmFyIF8xID0gXCJpbmZvTm90ZV9fX2kxWFk5XCI7XG52YXIgXzIgPSBcIndyYXBwZXJfX19NQXVOU1wiO1xuZXhwb3J0IHsgXzEgYXMgXCJpbmZvTm90ZVwiLCBfMiBhcyBcIndyYXBwZXJcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiYWN0aW9uQnV0dG9uc0NvbnRhaW5lcl9fX0F1dnJuXCI7XG52YXIgXzIgPSBcImFkZGl0aW9uYWxEZXRhaWxzX19fbVAxaUpcIjtcbnZhciBfMyA9IFwiYXR0ZW5kZWVDb250YWluZXJfX19RMFZVelwiO1xudmFyIF80ID0gXCJhdHRlbmRlZUluZm9UaXRsZV9fX0xtcm00XCI7XG52YXIgXzUgPSBcImNsb3NlQnRuX19fV05KbEVcIjtcbnZhciBfNiA9IFwiY29weUJ0bl9fX191dEE2XCI7XG52YXIgXzcgPSBcImRlbGVnYXRlZFRvX19fU0dWUUlcIjtcbnZhciBfOCA9IFwiZG93bmxvYWRCdG5fX19xalloelwiO1xudmFyIF85ID0gXCJoZWFkZXJfX19BdWduelwiO1xudmFyIF9hID0gXCJvcmRlck51bWJlcl9fX0w1UTVhXCI7XG52YXIgX2IgPSBcInFyQ29kZV9fX2Z3cVpxXCI7XG52YXIgX2MgPSBcInFyTm90ZV9fX0djN0tuXCI7XG52YXIgX2QgPSBcInNlbmRCdG5fX19rb1dNMlwiO1xudmFyIF9lID0gXCJzZW50X19fazZXS3hcIjtcbnZhciBfZiA9IFwic3RhdHVzX19fa3dDOHlcIjtcbnZhciBfMTAgPSBcInN1YnRpdGxlX19feV9OdU9cIjtcbnZhciBfMTEgPSBcInRpY2tldERldGFpbENvbnRhaW5lcl9fX2IyVExSXCI7XG52YXIgXzEyID0gXCJ0aXRsZV9fX3dRelVOXCI7XG5leHBvcnQgeyBfMSBhcyBcImFjdGlvbkJ1dHRvbnNDb250YWluZXJcIiwgXzIgYXMgXCJhZGRpdGlvbmFsRGV0YWlsc1wiLCBfMyBhcyBcImF0dGVuZGVlQ29udGFpbmVyXCIsIF80IGFzIFwiYXR0ZW5kZWVJbmZvVGl0bGVcIiwgXzUgYXMgXCJjbG9zZUJ0blwiLCBfNiBhcyBcImNvcHlCdG5cIiwgXzcgYXMgXCJkZWxlZ2F0ZWRUb1wiLCBfOCBhcyBcImRvd25sb2FkQnRuXCIsIF85IGFzIFwiaGVhZGVyXCIsIF9hIGFzIFwib3JkZXJOdW1iZXJcIiwgX2IgYXMgXCJxckNvZGVcIiwgX2MgYXMgXCJxck5vdGVcIiwgX2QgYXMgXCJzZW5kQnRuXCIsIF9lIGFzIFwic2VudFwiLCBfZiBhcyBcInN0YXR1c1wiLCBfMTAgYXMgXCJzdWJ0aXRsZVwiLCBfMTEgYXMgXCJ0aWNrZXREZXRhaWxDb250YWluZXJcIiwgXzEyIGFzIFwidGl0bGVcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwiYXR0ZW5kZWVDb250YWluZXJfX19jSFNNdFwiO1xudmFyIF8yID0gXCJhdHRlbmRlZUluZm9UaXRsZV9fX0pzUGxHXCI7XG52YXIgXzMgPSBcImhlYWRlck5vdGVfX19iMm1yQ1wiO1xudmFyIF80ID0gXCJzdWJ0aXRsZV9fX1lYNk9EXCI7XG52YXIgXzUgPSBcInRpY2tldFJlYXNzaWduQ29udGFpbmVyX19fcEc5YjRcIjtcbmV4cG9ydCB7IF8xIGFzIFwiYXR0ZW5kZWVDb250YWluZXJcIiwgXzIgYXMgXCJhdHRlbmRlZUluZm9UaXRsZVwiLCBfMyBhcyBcImhlYWRlck5vdGVcIiwgXzQgYXMgXCJzdWJ0aXRsZVwiLCBfNSBhcyBcInRpY2tldFJlYXNzaWduQ29udGFpbmVyXCIgfVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG52YXIgXzEgPSBcImJ1dHRvbkNhbmNlbGxlZF9fX0VybERaXCI7XG52YXIgXzIgPSBcImJ1dHRvbkNvbXBsZXRlX19fbGxXa1pcIjtcbnZhciBfMyA9IFwiYnV0dG9uSW5jb21wbGV0ZV9fX1RvbEhnXCI7XG52YXIgXzQgPSBcImJ1dHRvblBpbGxfX196cTJ0Y1wiO1xudmFyIF81ID0gXCJidXR0b25SZWZ1bmRSZXF1ZXN0ZWRfX19wV3QzMFwiO1xudmFyIF82ID0gXCJidXR0b25VbmFzc2lnbmVkX19fWURkOFhcIjtcbnZhciBfNyA9IFwidGlja2V0U3RhdHVzQ29udGFpbmVyX19fcWo2ZmJcIjtcbmV4cG9ydCB7IF8xIGFzIFwiYnV0dG9uQ2FuY2VsbGVkXCIsIF8yIGFzIFwiYnV0dG9uQ29tcGxldGVcIiwgXzMgYXMgXCJidXR0b25JbmNvbXBsZXRlXCIsIF80IGFzIFwiYnV0dG9uUGlsbFwiLCBfNSBhcyBcImJ1dHRvblJlZnVuZFJlcXVlc3RlZFwiLCBfNiBhcyBcImJ1dHRvblVuYXNzaWduZWRcIiwgXzcgYXMgXCJ0aWNrZXRTdGF0dXNDb250YWluZXJcIiB9XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbnZhciBfMSA9IFwibm9PcmRlcnNGb3VuZF9fX0FvZzJwXCI7XG52YXIgXzIgPSBcInN1bW1pdFRpdGxlRGF0ZV9fX1oxOVBtXCI7XG52YXIgXzMgPSBcIndpZGdldEhlYWRlcl9fX3lZNWdlXCI7XG5leHBvcnQgeyBfMSBhcyBcIm5vT3JkZXJzRm91bmRcIiwgXzIgYXMgXCJzdW1taXRUaXRsZURhdGVcIiwgXzMgYXMgXCJ3aWRnZXRIZWFkZXJcIiB9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9pY29ucy1tYXRlcmlhbFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL2ljb25zLW1hdGVyaWFsL0NoZWNrQ2lyY2xlXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvaWNvbnMtbWF0ZXJpYWwvQ2xvc2VcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9pY29ucy1tYXRlcmlhbC9Db250ZW50Q29weVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL2ljb25zLW1hdGVyaWFsL0RlbGV0ZU91dGxpbmVcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9pY29ucy1tYXRlcmlhbC9FcnJvclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL2ljb25zLW1hdGVyaWFsL0ZpbHRlckxpc3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9pY29ucy1tYXRlcmlhbC9JbXBvcnRFeHBvcnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9pY29ucy1tYXRlcmlhbC9TZWFyY2hcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS9tYXRlcmlhbFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL21hdGVyaWFsL0NoZWNrYm94XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvRGl2aWRlclwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL21hdGVyaWFsL0lucHV0QmFzZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL21hdGVyaWFsL1N0YWNrXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvVGFiXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkvbWF0ZXJpYWwvVGFic1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL21hdGVyaWFsL3N0eWxlc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAbXVpL21hdGVyaWFsL3VzZU1lZGlhUXVlcnlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS94LWRhdGUtcGlja2Vycy9BZGFwdGVyRGF5anNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQG11aS94LWRhdGUtcGlja2Vycy9EYXRlUGlja2VyXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBtdWkveC1kYXRlLXBpY2tlcnMvTG9jYWxpemF0aW9uUHJvdmlkZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQHJlZHV4anMvdG9vbGtpdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAc2VudHJ5L3JlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImRheWpzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImZvcm1pa1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJpMThuZXh0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImkxOG5leHQtYnJvd3Nlci1sYW5ndWFnZWRldGVjdG9yXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImlkdG9rZW4tdmVyaWZpZXJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9tZW50LXRpbWV6b25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvY29tcG9uZW50cy9yYXctaHRtbFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3NlY3VyaXR5L2FjdGlvbnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi9zZWN1cml0eS9tZXRob2RzXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9saWIvdXRpbHMvYWN0aW9uc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vbGliL3V0aWxzL21ldGhvZHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2xpYi91dGlscy9xdWVyeS1hY3Rpb25zXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInAtbGltaXRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1pMThuZXh0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWluZmluaXRlLXNjcm9sbC1jb21wb25lbnRcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtcXItY29kZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC1yZWR1eFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdC9qc3gtcnVudGltZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWR1eFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWR1eC1wZXJzaXN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZHV4LXBlcnNpc3QvaW50ZWdyYXRpb24vcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVkdXgtcGVyc2lzdC9saWIvc3RvcmFnZVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ5dXBcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gXCJyZWFjdC1yZWR1eFwiO1xuaW1wb3J0IHsgUGVyc2lzdEdhdGUgfSBmcm9tIFwicmVkdXgtcGVyc2lzdC9pbnRlZ3JhdGlvbi9yZWFjdFwiO1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tIFwicmVhY3QtaTE4bmV4dFwiO1xuaW1wb3J0IHsgQm94LCBTdHlsZWRFbmdpbmVQcm92aWRlciB9IGZyb20gXCJAbXVpL21hdGVyaWFsXCI7XG5pbXBvcnQgeyB1c2VJbml0U3RvcmUgfSBmcm9tIFwiLi9zdG9yZVwiO1xuaW1wb3J0IE15T3JkZXJzVGlja2V0cyBmcm9tIFwiLi9jb21wb25lbnRzL015T3JkZXJzVGlja2V0c1wiO1xuaW1wb3J0IHsgUkVTRVRfU1RBVEUsIHNldFJlZHVjZXJTdGF0ZSB9IGZyb20gXCIuL2FjdGlvbnNcIjtcblxuY29uc3QgTXlPcmRlcnNNeVRpY2tldHNXaWRnZXQgPSAocHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGxvZ2luVXJsLFxuICAgIHN1cHBvcnRFbWFpbCxcbiAgICBzdW1taXQsXG4gICAgYXBpQmFzZVVybCxcbiAgICB1c2VyLFxuICAgIGNsaWVudElkLFxuICAgIHVwZGF0ZVByb2ZpbGVcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKCk7XG5cbiAgY29uc3QgeyBzdG9yZSwgcGVyc2lzdG9yIH0gPSB1c2VJbml0U3RvcmUoe1xuICAgIGxvZ2luVXJsLFxuICAgIHN1cHBvcnRFbWFpbCxcbiAgICBzdW1taXQsXG4gICAgdXNlcixcbiAgICBhcGlCYXNlVXJsLFxuICAgIGNsaWVudElkLFxuICAgIHVwZGF0ZVByb2ZpbGVcbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlQmVmb3JlTGlmdCA9ICgpID0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgIGNvbnN0IGZsdXNoID0gcGFyYW1zLmhhcyhcImZsdXNoU3RhdGVcIik7XG4gICAgaWYgKGZsdXNoKSBzdG9yZS5kaXNwYXRjaCh7IHR5cGU6IFJFU0VUX1NUQVRFLCBwYXlsb2FkOiBudWxsIH0pO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc3RvcmUuZGlzcGF0Y2goc2V0UmVkdWNlclN0YXRlKHN1bW1pdCwgdXNlcikpO1xuICB9LCBbc3VtbWl0LCB1c2VyXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlfT5cbiAgICAgIDxQZXJzaXN0R2F0ZVxuICAgICAgICBvbkJlZm9yZUxpZnQ9e2hhbmRsZUJlZm9yZUxpZnR9XG4gICAgICAgIGxvYWRpbmc9e251bGx9XG4gICAgICAgIHBlcnNpc3Rvcj17cGVyc2lzdG9yfVxuICAgICAgPlxuICAgICAgICA8U3R5bGVkRW5naW5lUHJvdmlkZXIgaW5qZWN0Rmlyc3Q+XG4gICAgICAgICAgPEJveCBzeD17eyBwYWRkaW5nOiB7IHhzOiAyLCBtZDogMCwgbGc6IDAgfSB9fT5cbiAgICAgICAgICAgIDxoMz57dChcIm9yZGVycy50aXRsZVwiKX08L2gzPlxuICAgICAgICAgIDwvQm94PlxuICAgICAgICAgIDxNeU9yZGVyc1RpY2tldHNcbiAgICAgICAgICAgIGxvZ2luVXJsPXtsb2dpblVybH1cbiAgICAgICAgICAgIHN1cHBvcnRFbWFpbD17c3VwcG9ydEVtYWlsfVxuICAgICAgICAgICAgc3VtbWl0PXtzdW1taXR9XG4gICAgICAgICAgICBhcGlCYXNlVXJsPXthcGlCYXNlVXJsfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3R5bGVkRW5naW5lUHJvdmlkZXI+XG4gICAgICA8L1BlcnNpc3RHYXRlPlxuICAgIDwvUHJvdmlkZXI+XG4gICk7XG59O1xuXG5NeU9yZGVyc015VGlja2V0c1dpZGdldC5wcm9wVHlwZXMgPSB7XG4gIGxvZ2luVXJsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdXBwb3J0RW1haWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHN1bW1pdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgYXBpQmFzZVVybDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdXNlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2xpZW50SWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHVwZGF0ZVByb2ZpbGU6IFByb3BUeXBlcy5mdW5jXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNeU9yZGVyc015VGlja2V0c1dpZGdldDtcbiJdLCJuYW1lcyI6WyJhdXRoRXJyb3JIYW5kbGVyIiwiZ2V0UmVxdWVzdCIsImRlbGV0ZVJlcXVlc3QiLCJjcmVhdGVBY3Rpb24iLCJzdG9wTG9hZGluZyIsInN0YXJ0TG9hZGluZyIsInB1dFJlcXVlc3QiLCJwTGltaXQiLCJnZXRJZFRva2VuIiwib2JqZWN0VG9RdWVyeVN0cmluZyIsIklkVG9rZW5WZXJpZmllciIsImkxOG4iLCJnZXRBY2Nlc3NUb2tlblNhZmVseSIsIkZJUlNUX1BBR0UiLCJERUZBVUxUX0lURU1TX1BFUl9QQUdFIiwiUFJPTUlTRV9CQVRDSF9MSU1JVCIsIkZJRlRZX1BFUl9QQUdFIiwiRVJST1JfQ09ERVMiLCJSRVNFVF9TVEFURSIsIlJFU0VUX0ZJTFRFUiIsIlJFU0VUX0FQSV9FUlJPUiIsIlNFVF9TVEFURSIsIlNFVF9BUElfRVJST1IiLCJHRVRfVVNFUl9PUkRFUlMiLCJSRUZVTkRfT1JERVIiLCJTRVRfQUNUSVZFX09SREVSX0lEIiwiRklMVEVSX1VTRVJfT1JERVJTIiwiR0VUX1RJQ0tFVFMiLCJVUERBVEVfVElDS0VUIiwiUkVDRUlWRV9USUNLRVQiLCJSRU1PVkVfVElDS0VUX0FUVEVOREVFIiwiQVNTSUdOX1RJQ0tFVCIsIlJFRlVORF9USUNLRVQiLCJSRVNFTkRfTk9USUZJQ0FUSU9OIiwiR0VUX1RJQ0tFVFNfQllfT1JERVIiLCJHRVRfVElDS0VUU19CWV9PUkRFUl9FUlJPUiIsIkdFVF9PUkRFUl9USUNLRVRfREVUQUlMUyIsIkdFVF9USUNLRVRfREVUQUlMUyIsIlJFQ0VJVkVfRVhUUkFfUVVFU1RJT05TIiwiVElDS0VUX0FUVEVOREVFX0tFWVMiLCJlbWFpbCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueSIsImRpc2NsYWltZXJBY2NlcHRlZCIsImV4dHJhUXVlc3Rpb25zIiwiVVBEQVRFX1RJQ0tFVFNfUkVGVU5EX1JFUVVFU1RFRCIsIlNUQVJUX0xPQURJTkdfSURQX1BST0ZJTEUiLCJTVE9QX0xPQURJTkdfSURQX1BST0ZJTEUiLCJVUERBVEVfSURQX1BST0ZJTEUiLCJTRVRfVVNFUiIsIlNFVF9TVU1NSVQiLCJHRVRfTUFJTl9FWFRSQV9RVUVTVElPTlMiLCJSRUNFSVZFX01BUktFVElOR19TRVRUSU5HUyIsIkNMRUFSX01BUktFVElOR19TRVRUSU5HUyIsInJlc2V0U3RhdGUiLCJkaXNwYXRjaCIsInJlc2V0RmlsdGVyIiwicmVzZXRFcnJvciIsInNldFJlZHVjZXJTdGF0ZSIsInN1bW1pdCIsInVzZXIiLCJGSUxURVJfVkFSX0RBVEUiLCJGSUxURVJfVkFSX09SREVSX05VTUJFUiIsInBhcnNlRmlsdGVyIiwiZmlsdGVyT2JqIiwiZmlsdGVyIiwidHlwZSIsInB1c2giLCJjb25jYXQiLCJuYW1lIiwibG93ZXIiLCJ1cHBlciIsInZhbHVlIiwiZ2V0U29ydERpcmVjdGlvbiIsImRpcmVjdGlvbiIsImVycm9ySGFuZGxlck5vdGlmeSIsInBheWxvYWQiLCJjYWxsYmFjayIsImN1c3RvbUF1dGhFcnJvckhhbmRsZXIiLCJlcnIiLCJyZXMiLCJjdXN0b21GZXRjaEVycm9ySGFuZGxlciIsInJlc3BvbnNlIiwiY29kZSIsInN0YXR1cyIsIm1zZyIsInQiLCJPYmplY3QiLCJlbnRyaWVzIiwiZXJyb3JzIiwiZm9yRWFjaCIsIl9yZWYiLCJrZXkiLCJOdW1iZXIiLCJpc05hTiIsInN0YXR1c1RleHQiLCJ0aXRsZSIsImh0bWwiLCJnZXRVc2VyT3JkZXJzIiwiX3JlZjIiLCJwYWdlIiwicGVyUGFnZSIsInNvcnQiLCJnZXRTdGF0ZSIsIl9yZWYzIiwiYXBpQmFzZVVybCIsIndpZGdldFN0YXRlIiwiYWNjZXNzVG9rZW4iLCJjYXRjaCIsIlByb21pc2UiLCJyZWplY3QiLCJwYXJhbXMiLCJhY2Nlc3NfdG9rZW4iLCJvcmRlciIsInJlbGF0aW9ucyIsInBlcl9wYWdlIiwia2V5cyIsImxlbmd0aCIsImZpbHRlcnMiLCJpZCIsInRoZW4iLCJlIiwic2V0QWN0aXZlT3JkZXJJZCIsIm9yZGVySWQiLCJzZXRVc2VyIiwiZ2V0VXNlclRpY2tldHMiLCJfcmVmNCIsIl9yZWY1IiwidXNlclN0YXRlIiwidXNlclByb2ZpbGUiLCJleHBhbmQiLCJmaWVsZHMiLCJnZXRUaWNrZXRzQnlPcmRlciIsIl9yZWY2IiwiX3JlZjciLCJyZXNlbmROb3RpZmljYXRpb24iLCJ0aWNrZXQiLCJfcmVmOCIsIm1lc3NhZ2UiLCJvcmRlcl9pZCIsInJlZnVuZFRpY2tldCIsIl9yZWY5IiwiX3JlZjEwIiwicmVmdW5kQnVsa1RpY2tldHMiLCJfcmVmMTEiLCJ0aWNrZXRzIiwibGltaXQiLCJhbGxSZWZ1bmRUaWNrZXRDYWxscyIsIm1hcCIsImFsbCIsInN1Y2Nlc3NmdWxseVJlcXVlc3RlZCIsInIiLCJfciRyZXNwb25zZSIsInJlZnVuZF9yZXF1ZXN0cyIsInVwZGF0ZVRpY2tldHNSZWZ1bmRSZXF1ZXN0ZWQiLCJ0aWNrZXRzUmVmdW5kUmVxdWVzdGVkIiwiZ2V0RXh0cmFRdWVzdGlvbnMiLCJhdHRlbmRlZUlkIiwiX3JlZjEyIiwiZW5kcG9pbnQiLCJnZXRUaWNrZXQiLCJ0aWNrZXRJZCIsIl9yZWYxMyIsImZpbmFsbHkiLCJub3JtYWxpemVUaWNrZXQiLCJlbnRpdHkiLCJub3JtYWxpemVkRW50aXR5IiwiX29iamVjdFNwcmVhZCIsImF0dGVuZGVlX2NvbXBhbnkiLCJhdHRlbmRlZV9jb21wYW55X2lkIiwicmVmcmVzaFByb2ZpbGUiLCJkYXRhIiwidGlja2V0T3duZXIiLCJfcmVmMTQiLCJfdGlja2V0T3duZXIkbWFuYWdlciIsInVwZGF0ZVByb2ZpbGUiLCJhdHRlbmRlZV9lbWFpbCIsImF0dGVuZGVlX2ZpcnN0X25hbWUiLCJhdHRlbmRlZV9sYXN0X25hbWUiLCJoYXNNYW5hZ2VyIiwibWFuYWdlciIsIm1hbmFnZXJfaWQiLCJpdHNNZSIsInByb2ZpbGVDaGFuZ2VkIiwiZmlyc3RfbmFtZSIsImxhc3RfbmFtZSIsIm5ld1Byb2ZpbGUiLCJzYXZlVGlja2V0RGV0YWlscyIsImFuc3dlcnMiLCJfcmVmMTUiLCJpZFRva2VuIiwidmVyaWZpZXIiLCJqd3QiLCJkZWNvZGUiLCJjb25zb2xlIiwibG9nIiwib3duZXIiLCJhc3NpZ25BdHRlbmRlZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIl9yZWYxNiIsInJlYXNzaWduVGlja2V0IiwiX3JlZjE3Iiwic2F2ZUV4dHJhUXVlc3Rpb25zIiwiX3JlZjE4IiwiZ2V0VGlja2V0UERGIiwiX3JlZjE5IiwicXVlcnlTdHJpbmciLCJhcGlVcmwiLCJmZXRjaCIsInJlc3BvbnNlVHlwZSIsImhlYWRlcnMiLCJvayIsImJsb2IiLCJwZGYiLCJsaW5rIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidXJsIiwid2luZG93IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiaHJlZiIsImRvd25sb2FkIiwiZGlzcGF0Y2hFdmVudCIsIk1vdXNlRXZlbnQiLCJSZWFjdCIsIlByb3BUeXBlcyIsInVzZVRyYW5zbGF0aW9uIiwiQm94IiwidXNlRm9ybWlrIiwiRXh0cmFRdWVzdGlvbnNGaWVsZHMiLCJGb3JtRm9vdGVyIiwidXNlU2Nyb2xsVG9FcnJvciIsIlJlZ2lzdHJhdGlvbkRpc2NsYWltZXIiLCJidWlsZFZhbGlkYXRpb25TY2hlbWEiLCJwYXJzZUFuc3dlcnMiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiQXNzaWduRVFGb3JtIiwib25TdWJtaXQiLCJvbkNsb3NlIiwiZm9ybWlrIiwiaW5pdGlhbFZhbHVlcyIsInZhbGlkYXRpb25TY2hlbWEiLCJyZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9tYW5kYXRvcnkiLCJ2YWx1ZXMiLCJyZWxldmFudEFuc3dlcnMiLCJlbmFibGVSZWluaXRpYWxpemUiLCJoYW5kbGVTdWJtaXQiLCJub1ZhbGlkYXRlIiwiY2hpbGRyZW4iLCJyZWdpc3RyYXRpb25fZGlzY2xhaW1lcl9jb250ZW50IiwiZGlzY2xhaW1lciIsImlzUmVxdWlyZWQiLCJzYXZlTGFiZWwiLCJjYW5jZWxMYWJlbCIsImRpc2FibGVkIiwiaXNTdWJtaXR0aW5nIiwicHJvcFR5cGVzIiwib2JqZWN0IiwiYXJyYXkiLCJmdW5jIiwiQ29udGVudENvcHlJY29uIiwiVG9vbHRpcCIsIk1JTExJU0VDX1RPX1NFQyIsInN0eWxlcyIsImRlZmF1bHRXaWR0aCIsIkNvcHlUZXh0IiwidGV4dCIsInRvb2x0aXBUZXh0IiwiaGlkZUNvcHkiLCJ0cnVuY2F0ZWQiLCJyZXZlcnNlZCIsIndpZHRoIiwidG9vbHRpcFRleHRUb1VzZSIsInRvb2x0aXAiLCJzZXRUb29sdGlwIiwidXNlU3RhdGUiLCJjbGFzc05hbWVzIiwiaGFuZGxlQ29weSIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsInNldFRpbWVvdXQiLCJjbGFzc05hbWUiLCJ3cmFwcGVyIiwic3R5bGUiLCJjb3B5SWNvbiIsIm9uQ2xpY2siLCJzdHJpbmciLCJib29sIiwibnVtYmVyIiwiY3JlYXRlQ29udGV4dCIsImRlZmF1bHRDb250ZXh0VmFsdWUiLCJzZXRNZXNzYWdlIiwic2V0TWVzc2FnZUNhbGxiYWNrIiwiQ3VzdG9tRGlhbG9nQ29udGV4dCIsIkRpYWxvZyIsIkRpYWxvZ0NvbnRlbnQiLCJEaWFsb2dDb250ZW50VGV4dCIsIkRpYWxvZ1RpdGxlIiwiQ3VzdG9tRGlhbG9nIiwib3BlbiIsImJvZHkiLCJUaGVtZVByb3ZpZGVyIiwiY3JlYXRlVGhlbWUiLCJkYXJrQ29sb3IiLCJyb290IiwiZG9jdW1lbnRFbGVtZW50IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFByb3BlcnR5VmFsdWUiLCJ0aGVtZSIsInBhbGV0dGUiLCJwcmltYXJ5IiwibWFpbiIsIkN1c3RvbVRoZW1lIiwibm9kZSIsIkNoZWNrYm94IiwiRm9ybUNvbnRyb2wiLCJGb3JtQ29udHJvbExhYmVsIiwiRm9ybUdyb3VwIiwiRm9ybUhlbHBlclRleHQiLCJGb3JtTGFiZWwiLCJnZXRMYWJlbCIsInRvU2x1ZyIsIkNoZWNrYm94TGlzdFF1ZXN0aW9uRmllbGQiLCJfcXVlc3Rpb24kdmFsdWVzIiwicXVlc3Rpb24iLCJxdWVzdGlvbkNsYXNzTmFtZSIsImlzRGlzYWJsZWQiLCJvbkNoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJlcnJvciIsImhlbHBlclRleHQiLCJyZXN0IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwicXVlc3Rpb25TbHVnIiwicXVlc3Rpb25MYWJlbCIsIm1hbmRhdG9yeSIsInF1ZXN0aW9uTWF4VmFsdWVzIiwibWF4X3NlbGVjdGVkX3ZhbHVlcyIsInF1ZXN0aW9uT3B0aW9ucyIsInZhbCIsImxhYmVsIiwidG9TdHJpbmciLCJoYW5kbGVDaGVja2JveExpc3RDaGFuZ2UiLCJjaGVja2VkIiwiY3VycmVudEFucyIsIm1heFNlbGVjdGlvblJlYWNoZWQiLCJuZXdWYWx1ZSIsInYiLCJyZXF1aXJlZCIsImZ1bGxXaWR0aCIsIm9wIiwiY29udHJvbCIsImluY2x1ZGVzIiwiZXYiLCJ0YXJnZXQiLCJSYXdIVE1MIiwiQ2hlY2tib3hRdWVzdGlvbkZpZWxkIiwiSW5wdXRMYWJlbCIsIk1lbnVJdGVtIiwiU2VsZWN0IiwiRHJvcGRvd25RdWVzdGlvbkZpZWxkIiwibGFiZWxJZCIsIm1hcmdpbkJvdHRvbSIsIlJhZGlvIiwiUmFkaW9Hcm91cCIsIlJhZGlvTGlzdFF1ZXN0aW9uRmllbGQiLCJUZXh0RmllbGQiLCJUZXh0UXVlc3Rpb25GaWVsZCIsIlF1ZXN0aW9uVHlwZV9DaGVja2JveCIsIlF1ZXN0aW9uVHlwZV9DaGVja0JveExpc3QiLCJRdWVzdGlvblR5cGVfQ29tYm9Cb3giLCJRdWVzdGlvblR5cGVfQ291bnRyeUNvbWJvQm94IiwiUXVlc3Rpb25UeXBlX1JhZGlvQnV0dG9uTGlzdCIsImNoZWNrUnVsZSIsInJ1bGUiLCJhbnN3ZXJfdmFsdWVzIiwiQXJyYXkiLCJpc0FycmF5IiwiYW5zd2VyX3ZhbHVlc19vcGVyYXRvciIsImNoZWNrVmlzaWJpbGl0eSIsInJ1bGVSZXN1bHQiLCJ2aXNpYmlsaXR5IiwidmlzaWJpbGl0eV9jb25kaXRpb24iLCJxdWVzdGlvbklkIiwidGV4dExDIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwicSIsIl9xJGxhYmVsIiwiaXNBbnN3ZXJlZCIsImFuc3dlciIsImNoZWNrSWZWYWx1ZU1hdGNoIiwiY29tcGFyZVZhbCIsImFuc3dlckFycmF5Iiwic29tZSIsImdldFR5cGVJbml0aWFsVmFsdWUiLCJnZXRUeXBlVmFsdWUiLCJhbnMiLCJzcGxpdCIsInRyYW5zZm9ybUFud2Vyc0Zvcm1hdCIsImRpc2NsYWltZXJfYWNjZXB0ZWQiLCJleHRyYV9xdWVzdGlvbnMiLCJmb3JtYXR0ZWRFUSIsInF1ZXN0aW9uX2lkIiwicGFyc2VJbnQiLCJwb3AiLCJRdWVzdGlvblR5cGVfVGV4dCIsIlF1ZXN0aW9uVHlwZV9UZXh0QXJlYSIsIlF1ZXN0aW9uVHlwZV9SYWRpb0J1dHRvbiIsImdldFF1ZXN0aW9uRmllbGRDb21wb25lbnQiLCJxdWVzdGlvblR5cGUiLCJGcmFnbWVudCIsInJlYWRPbmx5IiwiYWxsb3dFZGl0IiwicmVuZGVyUnVsZSIsInJlbmRlclF1ZXN0aW9uIiwic3ViX3F1ZXN0aW9uIiwiX3Ekc3ViX3F1ZXN0aW9uX3J1bGVzIiwiUXVlc3Rpb25GaWVsZENvbXBvbmVudCIsImZvcm1pa1Byb3BzIiwiaGFuZGxlQ2hhbmdlIiwib25CbHVyIiwiaGFuZGxlQmx1ciIsInRvdWNoZWQiLCJCb29sZWFuIiwic3ViX3F1ZXN0aW9uX3J1bGVzIiwiU3RhY2siLCJkYXlqcyIsIkFkYXB0ZXJEYXlqcyIsIkxvY2FsaXphdGlvblByb3ZpZGVyIiwiRGF0ZVBpY2tlciIsIkNsb3NlSWNvbiIsImdldEVwb2NoTG93ZXJVcHBlckluU2Vjb25kcyIsIl9GcmFnbWVudCIsIkJhc2ljRGF0ZVBpY2tlciIsIm9uRmlsdGVyIiwib25SZXNldCIsIm5vdyIsImRhdGVWYWx1ZSIsInNldERhdGVWYWx1ZSIsIm9uRGF0ZUNoYW5nZSIsImRhdGUiLCJEYXRlIiwiJGQiLCJvblJlc2V0QWN0aW9uIiwiZmlsdGVyRGF0ZUxhYmVsIiwiYWxpZ25JdGVtcyIsInN4IiwicHQiLCJwYiIsImRhdGVQaWNrZXJDb250YWluZXIiLCJmb250U2l6ZSIsImRhdGVwaWNrZXJDbG9zZSIsImRhdGVBZGFwdGVyIiwiY2FsZW5kYXJEaXNwbGF5IiwidXNlUmVmIiwidXNlRWZmZWN0IiwiRmlsdGVyTGlzdEljb24iLCJGaWx0ZXIiLCJzaG93RmlsdGVyTGlzdCIsInNldFNob3dGaWx0ZXJMaXN0Iiwic2hvd0RhdGVwaWNrZXIiLCJzZXRTaG93RGF0ZXBpY2tlciIsImZpbHRlck51bUFjdGl2ZSIsInNldEZpbHRlck51bUFjdGl2ZSIsImZpbHRlclJlZiIsImhhbmRsZUZpbHRlckNsaWNrT3V0c2lkZSIsImV2ZW50IiwiY3VycmVudCIsImNvbnRhaW5zIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ0b2dnbGUiLCJmaWx0ZXJDb250YWluZXIiLCJyZWYiLCJmaWx0ZXJJY29uIiwiZmlsdGVyTGFiZWwiLCJmaWx0ZXJMaXN0Q29udGFpbmVyIiwiY29udGFpbmVyIiwic2hvd0RhdGVQaWNrZXIiLCJzdHlsZWQiLCJTZWFyY2hJY29uIiwiSW5wdXRCYXNlIiwiU2VhcmNoQ29udGFpbmVyIiwicG9zaXRpb24iLCJtYXJnaW5SaWdodCIsIm1hcmdpbkxlZnQiLCJkaXNwbGF5IiwiU2VhcmNoSWNvbldyYXBwZXIiLCJoZWlnaHQiLCJqdXN0aWZ5Q29udGVudCIsIlN0eWxlZElucHV0QmFzZSIsImNvbG9yIiwiYm9yZGVyQm90dG9tIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJDbG9zZUljb25XcmFwcGVyIiwicGFkZGluZyIsInRvcCIsInJpZ2h0IiwiY3Vyc29yIiwiekluZGV4IiwiU2VhcmNoIiwib25TZWFyY2giLCJzaG93Q2xvc2UiLCJzZXRTaG93Q2xvc2UiLCJzZWFyY2hWYWx1ZSIsInNldFNlYXJjaFZhbHVlIiwib25LZXlEb3duIiwibmF0aXZlRXZlbnQiLCJyZXNldFNlYXJjaCIsInBsYWNlaG9sZGVyIiwiaW5wdXRQcm9wcyIsIkJ1dHRvbiIsIkltcG9ydEV4cG9ydEljb24iLCJTb3J0Iiwib25Tb3J0Iiwic2hvd1NvcnQiLCJzZXRTaG93U29ydCIsInNvcnRSZWYiLCJoYW5kbGVTb3J0Q2xpY2tPdXRzaWRlIiwic29ydENvbnRhaW5lciIsInNvcnRJY29uIiwic29ydExhYmVsIiwic29ydExpc3RDb250YWluZXIiLCJHcmlkIiwiRmlsdGVyU29ydFNlYXJjaCIsImp1c3RpZnkiLCJpdGVtIiwieHMiLCJnYXAiLCJmaWx0ZXJTb3J0Q29udGFpbmVyIiwiZm9vdGVyIiwiY2FuY2VsQnRuIiwic2l6ZSIsInZhcmlhbnQiLCJzYXZlQnRuIiwiRXJyb3JJY29uIiwiRXJyb3JMYWJlbCIsImRhdGFUZXN0SWQiLCJlcnJvckxhYmVsIiwiQmFja2Ryb3AiLCJDaXJjdWxhclByb2dyZXNzIiwiTG9hZGVyIiwiZHJhd2VyIiwidXNlRGlzcGF0Y2giLCJ1c2VTZWxlY3RvciIsInNoYWxsb3dFcXVhbCIsIkluZmluaXRlU2Nyb2xsIiwiT3JkZXJzTGlzdCIsImdldFN1bW1pdEZvcm1hdHRlZERhdGUiLCJPTkVfUEFHRV9ORVhUIiwiTXlPcmRlcnNUaWNrZXRzIiwibWVzc2FnZUNhbGxiYWNrIiwibWVtYmVyT3JkZXJzIiwibG9hZGluZyIsIm9yZGVyc19jdXJyZW50X3BhZ2UiLCJvcmRlcnNfbGFzdF9wYWdlIiwib3JkZXJzX3Blcl9wYWdlIiwib3JkZXJzX3RvdGFsIiwidGlja2V0X3Blcl9wYWdlIiwiYXBpRXJyb3IiLCJzdGF0ZSIsInNldEZpbHRlciIsInNldFNvcnQiLCJyZXNldEFwaUVycm9yIiwiZmV0Y2hEYXRhIiwiY3VycmVudF9wYWdlIiwid2lkZ2V0SGVhZGVyIiwibWQiLCJsZyIsInN1bW1pdFRpdGxlRGF0ZSIsIlByb3ZpZGVyIiwiZGF0YUxlbmd0aCIsIm5leHQiLCJoYXNNb3JlIiwic2Nyb2xsVGhyZXNob2xkIiwibm9PcmRlcnNGb3VuZCIsIkRpdmlkZXIiLCJjYWxjdWxhdGVPcmRlclRvdGFscyIsImZvcm1hdEN1cnJlbmN5IiwiT3JkZXJTdW1tYXJ5VGFibGUiLCJkaXNjb3VudFRvdGFsIiwicmVmdW5kVG90YWwiLCJ0YXhlc1RvdGFsIiwiYW1vdW50VG90YWwiLCJ0aWNrZXRTdW1tYXJ5IiwiaHVuZHJlZCIsIm9yZGVyU3VtbWFyeVRhYmxlIiwidGlja2V0VG90YWwiLCJxdHkiLCJ0aWNrZXRfdHlwZSIsImNvc3QiLCJhbGlnbiIsImN1cnJlbmN5IiwiY3JlYXRlZCIsImRpc2NvdW50X2Ftb3VudCIsInRheGVzX2Ftb3VudCIsInNoYXBlIiwidXNlTm93IiwidGlja2V0c1JlZnVuZGFibGUiLCJSZWZ1bmRFbWFpbFN1cHBvcnQiLCJyZWZ1bmRSZXF1ZXN0ZWQiLCJ0aWNrZXRzVG9SZWZ1bmQiLCJzdWJtaXRSZXF1ZXN0Iiwib25SZWZ1bmRDbGljayIsIm9uUmVmdW5kRGV0YWlsQ2xpY2siLCJvbkVtYWlsU3VwcG9ydENsaWNrIiwiaXNJblJlZnVuZGFibGVQZXJpb2QiLCJyZWdpc3RyYXRpb25fYWxsb3dlZF9yZWZ1bmRfcmVxdWVzdF90aWxsX2RhdGUiLCJhdExlYXN0T25lUmVmdW5kYWJsZVRpY2tldCIsImlzUmVmdW5kYWJsZSIsInJvbGUiLCJvcmRlclN1bW1hcnlCdXR0b24iLCJyZWZ1bmREaXNhYmxlZCIsImFycmF5T2YiLCJPcmRlclN1bW1hcnkiLCJvcmRlclN1bW1hcnlXcmFwcGVyIiwicHgiLCJvcmRlclN1bW1hcnlQdXJjaGFzZWRJbmZvIiwibWVtYmVyVGlja2V0cyIsIkF0dGVuZGVlU3RhdHVzIiwiX3RpY2tldCRvd25lciIsIl90aWNrZXQkb3duZXIyIiwidGlja2V0T3duZXJFbWFpbCIsImlzX2FjdGl2ZSIsIk9yZGVyTGlzdFRpY2tldHMiLCJQQUdJTkFUSU9OX0RJU1BMQVlfQ09VTlQiLCJPcmRlckxpc3RJdGVtIiwiX29yZGVyJG1lbWJlclRpY2tldHMiLCJfb3JkZXIkbWVtYmVyVGlja2V0czIiLCJvblBhZ2luYXRlQ2xpY2siLCJzZWxlY3RUb1JlZnVuZCIsIml0ZW1zVG9EaXNwbGF5Iiwic2V0SXRlbXNUb0Rpc3BsYXkiLCJzbGljZWRUaWNrZXRzIiwic2xpY2UiLCJvblZpZXdNb3JlIiwidGlja2V0c190b3RhbCIsIm9uVmlld0xlc3MiLCJpc1NlbGVjdGVkVG9SZWZ1bmQiLCJmaW5kIiwidmlld01vcmVCdXR0b24iLCJUaWNrZXRTdGF0dXMiLCJnZXRTdW1taXRSZWFzc2lnbkRhdGUiLCJUaWNrZXREZXRhaWwiLCJ1c2VUaWNrZXREZXRhaWxzIiwiVGlja2V0UmVhc3NpZ24iLCJUaWNrZXRBc3NpZ24iLCJtb2RhbFZpZXdzIiwiZGV0YWlsIiwicmVhc3NpZ24iLCJhc3NpZ24iLCJUaWNrZXRDVEFzIiwiaXNJbmNvbXBsZXRlIiwiaXNVbmFzc2lnbmVkIiwiaXNSZWFzc2lnbmFibGUiLCJvbk9wZW5DbGljayIsImFzc2lnblRpY2tldEJ1dHRvbiIsInZpZXdGaW5pc2hUaWNrZXRCdXR0b24iLCJyZWFzc2lnbkJ1dHRvbiIsIl90aWNrZXQkdGlja2V0X3R5cGUiLCJfdGlja2V0JG93bmVyMyIsImNhblJlYXNzaWduIiwibW9kYWxPcGVuIiwic2V0TW9kYWxPcGVuIiwicmVhc3NpZ25EYXRlIiwiaGFuZGxlQ2xvc2VNb2RhbCIsImhhbmRsZU9wZW5Nb2RhbCIsInZpZXciLCJvcmRlcldyYXBwZXIiLCJ0aWNrZXRUaWNrZXRUeXBlIiwidGlja2V0Tm8iLCJ0aWNrZXRBY3Rpb25CdXR0b25zIiwib3duZXJJZCIsInRvdGFsX3JlZnVuZGVkX2Ftb3VudCIsIlRhYnMiLCJUYWIiLCJSZWZ1bmRSZXF1ZXN0c01vZGFsIiwiaXNUaWNrZXRSZWZ1bmRhYmxlIiwiUmVmdW5kRGV0YWlscyIsIlRhYlBhbmVsIiwicHJvcHMiLCJpbmRleCIsImhpZGRlbiIsIk9yZGVyc0xpc3REZXNrdG9wTW9iaWxlIiwiaXNNb2JpbGUiLCJkZXRhaWxzUmVxdWlyZWQiLCJzZXRWYWx1ZSIsIl8iLCJzZXRSZWZ1bmRSZXF1ZXN0ZWQiLCJzZXRUaWNrZXRzVG9SZWZ1bmQiLCJzZXRTdWJtaXRSZXF1ZXN0IiwicmVmdW5kRGV0YWlsc09wZW4iLCJzZXRSZWZ1bmREZXRhaWxzT3BlbiIsInVuc2VsZWN0UmVmdW5kVGlja2V0cyIsImZpbHRlclNlbGVjdGVkIiwic2VsZWN0ZWRUaWNrZXQiLCJjYW5jZWxUaWNrZXRzVG9SZWZ1bmQiLCJzZWxlY3RBbGxUaWNrZXRzIiwicmVmdW5kYWJsZVRpY2tldHMiLCJyZXNldEFsbFJlZnVuZFN0YXR1c2VzIiwibW9yZURldGFpbHMiLCJ0aWNrZXRMaXN0Q29udGFpbmVyIiwiYm9yZGVyQ29sb3IiLCJ0ZXh0Q29sb3IiLCJUYWJJbmRpY2F0b3JQcm9wcyIsImJhY2tncm91bmQiLCJ0YWJCdXR0b25zIiwicmVmdW5kQnV0dG9ucyIsIm9uUmVtb3ZlU2VsZWN0ZWRSZWZ1bmRUaWNrZXRzIiwib25SZWZ1bmRTdWNjZXNzQ2xvc2UiLCJvbkNsb3NlU2xpZGVyIiwidXNlVGhlbWUiLCJ1c2VNZWRpYVF1ZXJ5IiwiZ2V0Rm9ybWF0dGVkRGF0ZSIsImJyZWFrcG9pbnRzIiwiZG93biIsImlzTW9iaWxlVmlld2FibGUiLCJzZXRNb2JpbGVWaWV3YWJsZSIsInRpY2tldHNfcGFnZV9jdXJyZW50Iiwib3JkZXJUaWNrZXRJbmZvQ29udGFpbmVyIiwib3JkZXJUaWNrZXRJbmZvIiwiYmxhY2tCdXR0b24iLCJyb3dTcGFjaW5nIiwiY29sdW1uU3BhY2luZyIsInNtIiwib3JkZXJUaWNrZXRDb250YWluZXIiLCJkaXNwbGF5X25vbmUiLCJmbGV4RGlyZWN0aW9uIiwiUmlnaHREcmF3ZXIiLCJSZWZ1bmRSZXF1ZXN0ZWRUaWNrZXQiLCJjbG9zZVNsaWRlciIsInJlZnVuZERldGFpbHMiLCJEZWxldGVPdXRsaW5lSWNvbiIsIlJlZnVuZFN0YXR1cyIsIm9uUmVtb3ZlIiwicmVmdW5kVGlja2V0Qm94Q29udGFpbmVyIiwiZGVsZXRlSWNvbiIsInVzZU1lbW8iLCJnZXRSZWZ1bmRSZXF1ZXN0ZWRTdGF0dXNDb2xvciIsInN0YXR1c0NvbG9yIiwiYnV0dG9uUGlsbCIsIlN0eWxlZEVuZ2luZVByb3ZpZGVyIiwiQ2hlY2tDaXJjbGVJY29uIiwiU1RFUF9PTkUiLCJTVEVQX1RXTyIsInN0ZXAiLCJzZXRTdGVwIiwiZXJyb3JNc2ciLCJzZXRFcnJvck1zZyIsInJlZnVuZFN1Y2Nlc3MiLCJzZXRSZWZ1bmRTdWNjZXNzIiwicmVmdW5kVGlja2V0cyIsInJlZnVuZFN0ZXBPbmUiLCJyZWZ1bmRUZXh0IiwicmVmdW5kRXJyb3JNc2ciLCJhY3Rpb25CdXR0b25zIiwiY2FuY2VsQnV0dG9uIiwiY29udGludWVCdXR0b24iLCJyZWZ1bmRTdGVwVHdvIiwicmVmdW5kU3VjY2Vzc2Z1bCIsInN1Y2Nlc3NNc2ciLCJzdWNjZXNzTXNnMiIsInJlbmRlclN0ZXBzIiwiaW5qZWN0Rmlyc3QiLCJJY29uQnV0dG9uIiwiVHlwb2dyYXBoeSIsIkRyYXdlciIsIkNsb3NlIiwiYW5jaG9yIiwiTW9kYWxQcm9wcyIsImtlZXBNb3VudGVkIiwiaGVhZGVyIiwiY2xvc2VCdG4iLCJmbG9hdCIsImd1dHRlckJvdHRvbSIsIm9uZU9mVHlwZSIsInl1cCIsIkFzc2lnbkZvcm0iLCJuZXdfYXR0ZW5kZWVfZW1haWwiLCJwZXJzb25hbF9tZXNzYWdlIiwibXVsdGlsaW5lIiwibWluUm93cyIsInVzZUNvbnRleHQiLCJfdGlja2V0JG9yZGVyIiwiX3RpY2tldCRvcmRlcjIiLCJfdGlja2V0JHR5cGUiLCJ0aWNrZXRBc3NpZ25lZCIsInNldFRpY2tldEFzc2lnbmVkIiwiY3VycmVudFRpY2tldCIsIm9uQXNzaWduVG9PdGhlciIsIm9uQXNzaWduVG9NZSIsIm9uQ2xvc2VFUUZvcm0iLCJvbkNsb3NlU2F2ZU1lc3NhZ2UiLCJvblNhdmVFUSIsInJlc29sdmUiLCJ0aWNrZXRBc3NpZ25Db250YWluZXIiLCJhbGlnbkNlbnRlciIsInN1YnRpdGxlIiwib3duZXJfZW1haWwiLCJvcmRlck5vIiwidGlja2V0VHlwZSIsImFzc2lnbkJ0biIsImF0dGVuZGVlQ29udGFpbmVyIiwiYXR0ZW5kZWVJbmZvVGl0bGUiLCJhdHRlbmRlZUluZm9Ob3RlIiwiQXV0b2NvbXBsZXRlIiwicXVlcnlSZWdpc3RyYXRpb25Db21wYW5pZXMiLCJDb21wYW55RmllbGQiLCJzdW1taXRJZCIsImlucHV0VmFsdWUiLCJzZXRJbnB1dFZhbHVlIiwib3B0aW9ucyIsInNldE9wdGlvbnMiLCJzZXRGaWVsZFRvdWNoZWQiLCJyZXN1bHRzIiwibmV3T3B0aW9ucyIsImF1dG9Db21wbGV0ZSIsImZyZWVTb2xvIiwiaW5jbHVkZUlucHV0SW5MaXN0IiwiZmlsdGVyU2VsZWN0ZWRPcHRpb25zIiwiZ2V0T3B0aW9uTGFiZWwiLCJvcHRpb24iLCJ0bXBWYWx1ZSIsIm9uSW5wdXRDaGFuZ2UiLCJuZXdJbnB1dFZhbHVlIiwiZmlsdGVyT3B0aW9ucyIsImZpbHRlcmVkIiwiaXNFeGlzdGluZyIsInJlbmRlcklucHV0IiwicmVuZGVyT3B0aW9uIiwib3B0aW9uUHJvcHMiLCJUaWNrZXREZWxlZ2F0aW9uRmllbGRzIiwiZGVsZWdhdGVkX2ZpcnN0X25hbWUiLCJkZWxlZ2F0ZWRfbGFzdF9uYW1lIiwiVGlja2V0T3duZXJGaWVsZHMiLCJUaWNrZXRGb3JtIiwiY2FuRWRpdCIsInRpY2tldE1hbmFnZXIiLCJhbGxvd3NEZWxlZ2F0aW9uIiwiYWxsb3dzX3RvX2RlbGVnYXRlIiwicmVkdWNlIiwiZGVsZWdhdGVkVG8iLCJhZGRpdGlvbmFsRGV0YWlscyIsImluZm9Ob3RlIiwiUVJDb2RlIiwiRmlsZURvd25sb2FkT3V0bGluZWQiLCJEb3dubG9hZEljb24iLCJFbWFpbE91dGxpbmVkIiwiRW1haWxJY29uIiwidXNlR2V0VGlja2V0IiwiVFdPX0lURU0iLCJzYXZlTWVzc2FnZSIsInNldFNhdmVNZXNzYWdlIiwic2VudENvbmZpcm1hdGlvbiIsInNldFNlbnRDb25maXJtYXRpb24iLCJpc1VzZXJPcmRlck93bmVyIiwib3duZXJfaWQiLCJpc1VzZXJUaWNrZXRPd25lciIsImNhbkVkaXRUaWNrZXREYXRhIiwiYWxsb3dfdXBkYXRlX2F0dGVuZGVlX2V4dHJhX3F1ZXN0aW9ucyIsImlzQ29tcGxldGUiLCJvblNhdmUiLCJkZXNjcmlwdGlvbiIsImRvd25sb2FkVGlja2V0UGRmIiwib25TZW5kRW1haWwiLCJ0aWNrZXREZXRhaWxDb250YWluZXIiLCJxckNvZGUiLCJtYXhXaWR0aCIsInFyX2NvZGUiLCJ2aWV3Qm94IiwicXJOb3RlIiwiaXNfdmlydHVhbCIsImFjdGlvbkJ1dHRvbnNDb250YWluZXIiLCJkb3dubG9hZEJ0biIsInNlbmRCdG4iLCJzZW50Iiwib3JkZXJOdW1iZXIiLCJSZWFzc2lnbkZvcm0iLCJ0aWNrZXRSZWFzc2lnbmVkIiwic2V0VGlja2V0UmVhc3NpZ25lZCIsIm9uUmVhc3NpZ24iLCJnZXRMYWJlbHMiLCJoZWFkZXJOb3RlIiwidGlja2V0UmVhc3NpZ25Db250YWluZXIiLCJDb250YWluZXIiLCJfdGlja2V0JHJlZnVuZF9yZXF1ZXMiLCJpc0FjdGl2ZSIsInJlZnVuZFJlcXVlc3RzIiwidGlja2V0U3RhdHVzQ29udGFpbmVyIiwiYnV0dG9uUmVmdW5kUmVxdWVzdGVkIiwiYnV0dG9uSW5jb21wbGV0ZSIsImJ1dHRvblVuYXNzaWduZWQiLCJidXR0b25Db21wbGV0ZSIsImJ1dHRvbkNhbmNlbGxlZCIsInJ1biIsInNtb290aFNjcm9sbFRvIiwidGFyZ2V0U2Nyb2xsVG9wIiwiZHVyYXRpb24iLCJzdGFydFNjcm9sbFRvcCIsInNjcm9sbFRvcCIsImRpc3RhbmNlIiwic3RhcnRUaW1lIiwiYW5pbWF0aW9uU3RlcCIsInRpbWVzdGFtcCIsImVsYXBzZWQiLCJwcm9ncmVzcyIsIk1hdGgiLCJtaW4iLCJlYXNlSW5PdXRRdWFkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY29udGFpbmVySWQiLCJpc1ZhbGlkIiwiZXJyb3JBcnJheSIsImVycm9yQ291bnQiLCJlbGVtZW50c1NvcnRlZCIsInJlc3VsdCIsImVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZWxSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiYSIsImIiLCJnZXRFbGVtZW50QnlJZCIsImNvbnRhaW5lclJlY3QiLCJlbGVtT2ZmZXN0IiwiYW5pbWF0aW9uRHVyYXRpb24iLCJTVEFUVVNfQ09NUExFVEUiLCJTVEFUVVNfSU5DT01QTEVURSIsIlNUQVRVU19DQU5DRUxMRUQiLCJTVEFUVVNfVU5BU1NJR05FRCIsIl90aWNrZXQkcHJvbW9fY29kZSIsIl90aWNrZXQkb3duZXI0IiwiZ2V0U3RhdHVzIiwiYWxsb3dzRGVsZWdhdGUiLCJwcm9tb19jb2RlIiwiYWxsb3dzX3RvX3JlYXNzaWduIiwiaW5pdFJlYWN0STE4bmV4dCIsIkxhbmd1YWdlRGV0ZWN0b3IiLCJlbiIsImVzIiwidXNlIiwiaW5pdCIsImZhbGxiYWNrTG5nIiwiZGVidWciLCJyZXNvdXJjZXMiLCJ0cmFuc2xhdGlvbiIsImludGVycG9sYXRpb24iLCJlc2NhcGVWYWx1ZSIsIkxPR09VVF9VU0VSIiwiU1RBUlRfTE9BRElORyIsIlNUT1BfTE9BRElORyIsIlJFU0VUX0xPQURJTkciLCJERUZBVUxUX1NUQVRFIiwid2lkZ2V0TG9hZGluZyIsImlzT3JkZXJMb2FkaW5nIiwidGlja2V0X2N1cnJlbnRfcGFnZSIsInRpY2tldF9sYXN0X3BhZ2UiLCJ0aWNrZXRfdG90YWwiLCJXaWRnZXRSZWR1Y2VyIiwidG90YWwiLCJsYXN0X3BhZ2UiLCJmb3JtZXJPcmRlciIsIm8iLCJfZGF0YSQiLCJ1cGRhdGVkT3JkZXIiLCJ0aWNrZXRzX3BhZ2VfbGFzdCIsIm1vIiwiX3RpY2tldHNSZWZ1bmRSZXF1ZXN0IiwidXBkYXRlZFRpY2tldHMiLCJ0cnIiLCJ0aWNrZXREYXRhIiwibmV3T3JkZXJzIiwibmV3VGlja2V0cyIsImNvbmZpZ3VyZVN0b3JlIiwicGVyc2lzdFN0b3JlIiwicGVyc2lzdFJlZHVjZXIiLCJGTFVTSCIsIlJFSFlEUkFURSIsIlBBVVNFIiwiUEVSU0lTVCIsIlBVUkdFIiwiUkVHSVNURVIiLCJzdG9yYWdlIiwiY29tYmluZVJlZHVjZXJzIiwiZ2V0U3RvcmUiLCJjbGllbnRJZCIsImxvZ2luVXJsIiwicmVkdWNlcnMiLCJzdG9yZSIsInJlZHVjZXIiLCJtaWRkbGV3YXJlIiwiZ2V0RGVmYXVsdE1pZGRsZXdhcmUiLCJ0aHVuayIsImV4dHJhQXJndW1lbnQiLCJpbW11dGFibGVDaGVjayIsInNlcmlhbGl6YWJsZUNoZWNrIiwiaWdub3JlZEFjdGlvbnMiLCJ1c2VJbml0U3RvcmUiLCJjb25maWciLCJwZXJzaXN0b3IiLCJpbml0TG9nT3V0IiwiZ2V0QWNjZXNzVG9rZW4iLCJTZW50cnkiLCJjYXB0dXJlRXhjZXB0aW9uIiwiTEFTVF9IT1VSX09GXzI0X0hPVVIiLCJMQVNUX01JTlVURV9PRl9IT1VSIiwiT05FX0RBWSIsIlNUQVRVU19QRU5ESU5HIiwiU1RBVFVTX0VSUk9SIiwiU1RBVFVTX1BST0NFU1NJTkciLCJTVEFUVVNfUkVGVU5EX1BFTkRJTkciLCJTVEFUVVNfUkVGVU5EX0FQUFJPVkVEIiwiU1RBVFVTX1JFRlVORF9SRUpFQ1RFRCIsIkpFU1RfVElNRU9VVF9JTl9NSUxMSVNFQyIsIk9ORV9JVEVNIiwiRklWRV9JVEVNIiwiU0lYX0lURU0iLCJtb21lbnQiLCJsb2NhbGUiLCJkZWZhdWx0T3B0aW9ucyIsIm1pbmltdW1GcmFjdGlvbkRpZ2l0cyIsIm1heGltdW1GcmFjdGlvbkRpZ2l0cyIsImZvcm1hdHRlciIsIkludGwiLCJOdW1iZXJGb3JtYXQiLCJmb3JtYXQiLCJkYXRldGltZSIsInRpbWVab25lIiwidHoiLCJ1bml4IiwicmVmdW5kZWRfYW1vdW50IiwiYW1vdW50IiwidGlja2V0X3R5cGVzIiwicHVyY2hhc2VUaWNrZXRUb3RhbCIsImN1cnJlbmN5T2JqZWN0IiwidGlja2V0c19leGNlcnB0X2J5X3RpY2tldF90eXBlIiwidHQiLCJ0aWNrZXRfdHlwZV9pZCIsInB1cmNoYXNlVG90YWwiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJnZXRPcmRlclRpY2tldHMiLCJfb3JkZXJzJCIsIm9yZGVycyIsInRzIiwic2V0SG91cnMiLCJkZWZhdWx0Q3VycmVudFRpbWUiLCJyb3VuZCIsImdldE5vdyIsInRpbWVyU3RhdGUiLCJub3dVdGMiLCJjaGVja1N1bW1pdFBhc3QiLCJyZWFzc2lnbl9kYXRlIiwicmVhc3NpZ25fdGlja2V0X3RpbGxfZGF0ZSIsImVuZF9kYXRlIiwiY2hlY2tTdW1taXRTdGFydGVkIiwic3RhcnRfZGF0ZSIsImdldFN1bW1pdERheXNEaWZmIiwic3RhcnREYXkiLCJ0aW1lX3pvbmVfaWQiLCJlbmREYXkiLCJkYXlzIiwiZGlmZiIsImZvcm1hdFN0YXJ0RGF0ZSIsImZvcm1hdEVuZERhdGUiLCJ5ZWFyIiwibW9udGgiLCJzdGFydERhdGUiLCJlbmREYXRlIiwiZ2V0U3VtbWl0TG9jYXRpb24iLCJfc3VtbWl0JGxvY2F0aW9ucyIsImxvY2F0aW9uIiwibG9jYXRpb25zIiwibCIsImNsYXNzX25hbWUiLCJpc19tYWluIiwiY2l0eSIsImNvdW50cnkiLCJ1c2VTdW1taXREZXRhaWxzIiwiX3N1bW1pdCR0aW1lX3pvbmUiLCJfc3VtbWl0JHRpbWVfem9uZTIiLCJmb3JtYXR0ZWREYXRlIiwiZm9ybWF0dGVkUmVhc3NpZ25EYXRlIiwidGltZV96b25lIiwiZGF5c1VudGlsUmVhc3NpZ25EZWFkbGluZSIsImlzUGFzdCIsImlzU3RhcnRlZCIsInN0YXR1c0RhdGEiLCJnZXRUaWNrZXRTdGF0dXNLZXkiLCJnZXRUaWNrZXRTdGF0dXNEYXRhIiwiaXNTdW1taXRQYXN0IiwiZ2V0VGlja2V0Um9sZSIsImJhZGdlIiwiZmVhdHVyZXMiLCJmZWF0dXJlIiwiam9pbiIsImdldFRpY2tldFR5cGUiLCJmaW5hbF9hbW91bnQiLCJyciIsImdldFJlZnVuZGVkUmVxdWVzdGVkVGlja2V0cyIsIl90aWNrZXQkcmVmdW5kX3JlcXVlczIiLCJnZXRSZWZ1bmRlZFJlcXVlc3RlZFN0YXR1cyIsIl90aWNrZXQkcmVmdW5kX3JlcXVlczMiLCJfdGlja2V0JHJlZnVuZF9yZXF1ZXM0IiwiX3RpY2tldCRyZWZ1bmRfcmVxdWVzNSIsImdldFR5cGVWYWxpZGF0aW9uIiwic2NoZW1hIiwib25lT2YiLCJvZiIsImluY2x1ZGVEZWxlZ2F0aW9uIiwiaW5jbHVkZUF0dGVuZGVlSW5mbyIsImluY2x1ZGVEaXNjbGFpbWVyIiwib25seVJlbGV2YW50Iiwic3ViUXVlc3Rpb25TbHVnIiwic3ViQW5zd2VyIiwibWF0Y2giLCJkaXNjbGFpbWVyTWFuZGF0b3J5IiwibGF6eSIsInR5cGVFcnJvciIsIl9xJHN1Yl9xdWVzdGlvbl9ydWxlczIiLCJzdWJRdWVzdGlvbiIsIm51bGxhYmxlIiwid2hlbiIsImlzIiwicXVlc3Rpb25BbnMiLCJzY2giLCJQZXJzaXN0R2F0ZSIsIk15T3JkZXJzTXlUaWNrZXRzV2lkZ2V0Iiwic3VwcG9ydEVtYWlsIiwiaGFuZGxlQmVmb3JlTGlmdCIsIlVSTFNlYXJjaFBhcmFtcyIsInNlYXJjaCIsImZsdXNoIiwiaGFzIiwib25CZWZvcmVMaWZ0Il0sInNvdXJjZVJvb3QiOiIifQ==