openstack-uicore-foundation 4.0.97 → 4.0.98
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/lib/components/ajaxloader.js +184 -1
- package/lib/components/attendance-tracker.js +1992 -1
- package/lib/components/bulk-actions-selector.js +194 -1
- package/lib/components/circle-button.js +223 -1
- package/lib/components/clock.js +678 -1
- package/lib/components/exclusive-wrapper.js +151 -1
- package/lib/components/extra-questions.js +1902 -1
- package/lib/components/form-validation.js +190 -1
- package/lib/components/forms/rsvp-form.js +940 -1
- package/lib/components/forms/simple-form.js +708 -1
- package/lib/components/free-text-search.js +2042 -1
- package/lib/components/google-map.js +576 -1
- package/lib/components/index.js +12840 -1
- package/lib/components/inputs/access-levels-input.js +2306 -1
- package/lib/components/inputs/action-dropdown.js +219 -1
- package/lib/components/inputs/checkbox-list.js +339 -1
- package/lib/components/inputs/company-input.js +2341 -1
- package/lib/components/inputs/country-dropdown.js +2399 -1
- package/lib/components/inputs/country-input.js +2302 -1
- package/lib/components/inputs/datetimepicker.js +314 -1
- package/lib/components/inputs/dropdown.js +259 -1
- package/lib/components/inputs/editor-input.js +270 -1
- package/lib/components/inputs/event-input.js +2280 -1
- package/lib/components/inputs/free-multi-text-input.js +252 -1
- package/lib/components/inputs/group-input.js +2275 -1
- package/lib/components/inputs/grouped-dropdown.js +244 -1
- package/lib/components/inputs/language-input.js +2307 -1
- package/lib/components/inputs/member-input.js +2302 -1
- package/lib/components/inputs/operator-input.js +328 -1
- package/lib/components/inputs/organization-input.js +2325 -1
- package/lib/components/inputs/promocode-input.js +2310 -1
- package/lib/components/inputs/radio-list.js +297 -1
- package/lib/components/inputs/registration-company-input.js +2470 -1
- package/lib/components/inputs/speaker-input.js +2336 -1
- package/lib/components/inputs/sponsor-input.js +2284 -1
- package/lib/components/inputs/stepped-select.js +197 -1
- package/lib/components/inputs/summit-days-select.js +162 -1
- package/lib/components/inputs/summit-input.js +2282 -1
- package/lib/components/inputs/summit-venues-select.js +172 -1
- package/lib/components/inputs/tag-input.js +2352 -1
- package/lib/components/inputs/text-input.js +202 -1
- package/lib/components/inputs/textarea-input.js +181 -1
- package/lib/components/inputs/ticket-types-input.js +2338 -1
- package/lib/components/inputs/upload-input-v2.js +834 -1
- package/lib/components/inputs/upload-input.js +391 -1
- package/lib/components/progressive-img.js +289 -1
- package/lib/components/raw-html.js +125 -1
- package/lib/components/schedule-builder-constants.js +81 -1
- package/lib/components/schedule-builder-view.js +1684 -1
- package/lib/components/sections/panel.js +156 -1
- package/lib/components/simple-link-list.js +790 -1
- package/lib/components/sponsored-project-input.js +2281 -1
- package/lib/components/summit-dropdown.js +214 -1
- package/lib/components/table-editable.js +895 -1
- package/lib/components/table-selectable.js +552 -1
- package/lib/components/table-sortable.js +657 -1
- package/lib/components/table.js +510 -1
- package/lib/components/video-stream.js +226 -1
- package/lib/css/components/bulk-actions-selector.css +16 -1
- package/lib/css/components/circle-button.css +24 -1
- package/lib/css/components/extra-questions.css +29 -1
- package/lib/css/components/form-validation.css +29 -1
- package/lib/css/components/free-text-search.css +29 -1
- package/lib/css/components/index.css +1354 -2
- package/lib/css/components/inputs/action-dropdown.css +46 -1
- package/lib/css/components/inputs/datetimepicker.css +208 -1
- package/lib/css/components/inputs/grouped-dropdown.css +25 -1
- package/lib/css/components/inputs/stepped-select.css +12 -1
- package/lib/css/components/inputs/upload-input-v2.css +106 -1
- package/lib/css/components/inputs/upload-input.css +43 -1
- package/lib/css/components/progressive-img.css +16 -1
- package/lib/css/components/schedule-builder-view.css +230 -1
- package/lib/css/components/simple-link-list.css +189 -1
- package/lib/css/components/summit-dropdown.css +35 -1
- package/lib/css/components/table-editable.css +145 -1
- package/lib/css/components/table-selectable.css +147 -1
- package/lib/css/components/table-sortable.css +150 -1
- package/lib/css/components/table.css +147 -1
- package/lib/i18n.js +449 -1
- package/lib/models/index.js +238 -1
- package/lib/models/summit-event.js +210 -1
- package/lib/security/abstract-auth-callback-route.js +2114 -1
- package/lib/security/actions.js +1818 -1
- package/lib/security/constants.js +71 -1
- package/lib/security/methods.js +1818 -1
- package/lib/security/reducers.js +1961 -1
- package/lib/security/session-checker.js +2179 -1
- package/lib/utils/actions.js +1818 -1
- package/lib/utils/fragment-parser.js +207 -1
- package/lib/utils/methods.js +369 -1
- package/lib/utils/query-actions.js +2154 -1
- package/lib/utils/questions-set.js +609 -1
- package/lib/utils/reducers.js +1874 -1
- package/lib/utils/use-fit-text.js +178 -1
- package/package.json +1 -1
|
@@ -1 +1,895 @@
|
|
|
1
|
-
|
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
|
2
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
|
3
|
+
module.exports = factory();
|
|
4
|
+
else if(typeof define === 'function' && define.amd)
|
|
5
|
+
define("openstack-uicore-foundation", [], factory);
|
|
6
|
+
else if(typeof exports === 'object')
|
|
7
|
+
exports["openstack-uicore-foundation"] = factory();
|
|
8
|
+
else
|
|
9
|
+
root["openstack-uicore-foundation"] = factory();
|
|
10
|
+
})(this, () => {
|
|
11
|
+
return /******/ (() => { // webpackBootstrap
|
|
12
|
+
/******/ "use strict";
|
|
13
|
+
/******/ var __webpack_modules__ = ({
|
|
14
|
+
|
|
15
|
+
/***/ "./src/components/table-editable/EditableActionsTableCell.js":
|
|
16
|
+
/*!*******************************************************************!*\
|
|
17
|
+
!*** ./src/components/table-editable/EditableActionsTableCell.js ***!
|
|
18
|
+
\*******************************************************************/
|
|
19
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
20
|
+
|
|
21
|
+
__webpack_require__.r(__webpack_exports__);
|
|
22
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
23
|
+
/* harmony export */ "default": () => (/* binding */ EditableActionsTableCell)
|
|
24
|
+
/* harmony export */ });
|
|
25
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
26
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
27
|
+
|
|
28
|
+
class EditableActionsTableCell extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
|
|
29
|
+
constructor(props) {
|
|
30
|
+
super(props);
|
|
31
|
+
this.state = {
|
|
32
|
+
is_editing: false
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
onDelete(id, ev) {
|
|
37
|
+
ev.preventDefault();
|
|
38
|
+
ev.stopPropagation();
|
|
39
|
+
this.props.actions.delete(id);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
onSave(id, ev) {
|
|
43
|
+
ev.preventDefault();
|
|
44
|
+
ev.stopPropagation();
|
|
45
|
+
this.setState({
|
|
46
|
+
is_editing: false
|
|
47
|
+
});
|
|
48
|
+
this.props.actions.save(id);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
onEdit(id, ev) {
|
|
52
|
+
ev.preventDefault();
|
|
53
|
+
ev.stopPropagation();
|
|
54
|
+
this.setState({
|
|
55
|
+
is_editing: true
|
|
56
|
+
});
|
|
57
|
+
this.props.actions.edit(id);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
onCancel(id, ev) {
|
|
61
|
+
ev.preventDefault();
|
|
62
|
+
ev.stopPropagation();
|
|
63
|
+
this.setState({
|
|
64
|
+
is_editing: false
|
|
65
|
+
});
|
|
66
|
+
this.props.actions.cancel(id);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
render() {
|
|
70
|
+
let {
|
|
71
|
+
actions,
|
|
72
|
+
id
|
|
73
|
+
} = this.props;
|
|
74
|
+
|
|
75
|
+
if (this.state.is_editing) {
|
|
76
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", {
|
|
77
|
+
className: "actions"
|
|
78
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
|
79
|
+
href: "",
|
|
80
|
+
onClick: this.onSave.bind(this, id),
|
|
81
|
+
"data-tip": "save"
|
|
82
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
|
|
83
|
+
className: "fa fa-floppy-o"
|
|
84
|
+
})), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
|
85
|
+
href: "",
|
|
86
|
+
onClick: this.onCancel.bind(this, id),
|
|
87
|
+
"data-tip": "cancel"
|
|
88
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
|
|
89
|
+
className: "fa fa-times"
|
|
90
|
+
})));
|
|
91
|
+
} else {
|
|
92
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", {
|
|
93
|
+
className: "actions"
|
|
94
|
+
}, 'edit' in actions && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
|
95
|
+
href: "",
|
|
96
|
+
onClick: this.onEdit.bind(this, id),
|
|
97
|
+
"data-tip": "edit"
|
|
98
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
|
|
99
|
+
className: "fa fa-pencil-square-o"
|
|
100
|
+
})), 'delete' in actions && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
|
|
101
|
+
href: "",
|
|
102
|
+
onClick: this.onDelete.bind(this, id),
|
|
103
|
+
"data-tip": "delete"
|
|
104
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("i", {
|
|
105
|
+
className: "fa fa-trash-o delete-icon"
|
|
106
|
+
})));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
}
|
|
111
|
+
;
|
|
112
|
+
|
|
113
|
+
/***/ }),
|
|
114
|
+
|
|
115
|
+
/***/ "./src/components/table-editable/EditableTableCell.js":
|
|
116
|
+
/*!************************************************************!*\
|
|
117
|
+
!*** ./src/components/table-editable/EditableTableCell.js ***!
|
|
118
|
+
\************************************************************/
|
|
119
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
120
|
+
|
|
121
|
+
__webpack_require__.r(__webpack_exports__);
|
|
122
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
123
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
124
|
+
/* harmony export */ });
|
|
125
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
126
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
const EditableTableCell = props => {
|
|
130
|
+
if (props.is_edit) {
|
|
131
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", null, !props.shouldUseTextArea && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("input", {
|
|
132
|
+
type: "text",
|
|
133
|
+
className: "form-control",
|
|
134
|
+
defaultValue: props.children,
|
|
135
|
+
name: props.name,
|
|
136
|
+
id: props.id,
|
|
137
|
+
onChange: props.handleChange
|
|
138
|
+
}), props.shouldUseTextArea && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("textarea", {
|
|
139
|
+
className: "form-control",
|
|
140
|
+
defaultValue: props.children,
|
|
141
|
+
name: props.name,
|
|
142
|
+
id: props.id,
|
|
143
|
+
onChange: props.handleChange
|
|
144
|
+
}));
|
|
145
|
+
} else {
|
|
146
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("td", null, props.children);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EditableTableCell);
|
|
151
|
+
|
|
152
|
+
/***/ }),
|
|
153
|
+
|
|
154
|
+
/***/ "./src/components/table-editable/EditableTableHeading.js":
|
|
155
|
+
/*!***************************************************************!*\
|
|
156
|
+
!*** ./src/components/table-editable/EditableTableHeading.js ***!
|
|
157
|
+
\***************************************************************/
|
|
158
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
159
|
+
|
|
160
|
+
__webpack_require__.r(__webpack_exports__);
|
|
161
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
162
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
163
|
+
/* harmony export */ });
|
|
164
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
165
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class EditableTableHeading extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
|
|
169
|
+
constructor(props) {
|
|
170
|
+
super(props);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
render() {
|
|
174
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("th", {
|
|
175
|
+
width: this.props.width
|
|
176
|
+
}, this.props.children);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (EditableTableHeading);
|
|
182
|
+
|
|
183
|
+
/***/ }),
|
|
184
|
+
|
|
185
|
+
/***/ "./src/components/table-editable/EditableTableRow.js":
|
|
186
|
+
/*!***********************************************************!*\
|
|
187
|
+
!*** ./src/components/table-editable/EditableTableRow.js ***!
|
|
188
|
+
\***********************************************************/
|
|
189
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
190
|
+
|
|
191
|
+
__webpack_require__.r(__webpack_exports__);
|
|
192
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
193
|
+
/* harmony export */ "default": () => (/* binding */ EditableTableRow)
|
|
194
|
+
/* harmony export */ });
|
|
195
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
196
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
197
|
+
|
|
198
|
+
class EditableTableRow extends (react__WEBPACK_IMPORTED_MODULE_0___default().Component) {
|
|
199
|
+
render() {
|
|
200
|
+
const {
|
|
201
|
+
children,
|
|
202
|
+
even,
|
|
203
|
+
id
|
|
204
|
+
} = this.props;
|
|
205
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("tr", {
|
|
206
|
+
id: id,
|
|
207
|
+
role: "row",
|
|
208
|
+
className: even ? 'even' : 'odd'
|
|
209
|
+
}, children);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/***/ }),
|
|
215
|
+
|
|
216
|
+
/***/ "./src/utils/methods.js":
|
|
217
|
+
/*!******************************!*\
|
|
218
|
+
!*** ./src/utils/methods.js ***!
|
|
219
|
+
\******************************/
|
|
220
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
221
|
+
|
|
222
|
+
__webpack_require__.r(__webpack_exports__);
|
|
223
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
224
|
+
/* harmony export */ "arraysEqual": () => (/* binding */ arraysEqual),
|
|
225
|
+
/* harmony export */ "base64URLEncode": () => (/* binding */ base64URLEncode),
|
|
226
|
+
/* harmony export */ "buildAPIBaseUrl": () => (/* binding */ buildAPIBaseUrl),
|
|
227
|
+
/* harmony export */ "epochToMoment": () => (/* binding */ epochToMoment),
|
|
228
|
+
/* harmony export */ "epochToMomentTimeZone": () => (/* binding */ epochToMomentTimeZone),
|
|
229
|
+
/* harmony export */ "findElementPos": () => (/* binding */ findElementPos),
|
|
230
|
+
/* harmony export */ "formatEpoch": () => (/* binding */ formatEpoch),
|
|
231
|
+
/* harmony export */ "getAllowedUserGroups": () => (/* binding */ getAllowedUserGroups),
|
|
232
|
+
/* harmony export */ "getAuthCallback": () => (/* binding */ getAuthCallback),
|
|
233
|
+
/* harmony export */ "getBackURL": () => (/* binding */ getBackURL),
|
|
234
|
+
/* harmony export */ "getCurrentHref": () => (/* binding */ getCurrentHref),
|
|
235
|
+
/* harmony export */ "getCurrentLocation": () => (/* binding */ getCurrentLocation),
|
|
236
|
+
/* harmony export */ "getCurrentPathName": () => (/* binding */ getCurrentPathName),
|
|
237
|
+
/* harmony export */ "getCurrentUserLanguage": () => (/* binding */ getCurrentUserLanguage),
|
|
238
|
+
/* harmony export */ "getFromLocalStorage": () => (/* binding */ getFromLocalStorage),
|
|
239
|
+
/* harmony export */ "getOrigin": () => (/* binding */ getOrigin),
|
|
240
|
+
/* harmony export */ "getTimeServiceUrl": () => (/* binding */ getTimeServiceUrl),
|
|
241
|
+
/* harmony export */ "hasErrors": () => (/* binding */ hasErrors),
|
|
242
|
+
/* harmony export */ "isClearingSessionState": () => (/* binding */ isClearingSessionState),
|
|
243
|
+
/* harmony export */ "isEmpty": () => (/* binding */ isEmpty),
|
|
244
|
+
/* harmony export */ "objectToQueryString": () => (/* binding */ objectToQueryString),
|
|
245
|
+
/* harmony export */ "putOnLocalStorage": () => (/* binding */ putOnLocalStorage),
|
|
246
|
+
/* harmony export */ "removeFromLocalStorage": () => (/* binding */ removeFromLocalStorage),
|
|
247
|
+
/* harmony export */ "retryPromise": () => (/* binding */ retryPromise),
|
|
248
|
+
/* harmony export */ "scrollToError": () => (/* binding */ scrollToError),
|
|
249
|
+
/* harmony export */ "setSessionClearingState": () => (/* binding */ setSessionClearingState),
|
|
250
|
+
/* harmony export */ "shallowEqual": () => (/* binding */ shallowEqual),
|
|
251
|
+
/* harmony export */ "toSlug": () => (/* binding */ toSlug)
|
|
252
|
+
/* harmony export */ });
|
|
253
|
+
/* harmony import */ var moment_timezone__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! moment-timezone */ "moment-timezone");
|
|
254
|
+
/* harmony import */ var moment_timezone__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(moment_timezone__WEBPACK_IMPORTED_MODULE_0__);
|
|
255
|
+
/* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! urijs */ "urijs");
|
|
256
|
+
/* harmony import */ var urijs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(urijs__WEBPACK_IMPORTED_MODULE_1__);
|
|
257
|
+
/**
|
|
258
|
+
* Copyright 2018 OpenStack Foundation
|
|
259
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
260
|
+
* you may not use this file except in compliance with the License.
|
|
261
|
+
* You may obtain a copy of the License at
|
|
262
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
263
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
264
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
265
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
266
|
+
* See the License for the specific language governing permissions and
|
|
267
|
+
* limitations under the License.
|
|
268
|
+
**/
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
const findElementPos = obj => {
|
|
272
|
+
var curtop = -70;
|
|
273
|
+
|
|
274
|
+
if (obj.offsetParent) {
|
|
275
|
+
do {
|
|
276
|
+
curtop += obj.offsetTop;
|
|
277
|
+
} while (obj = obj.offsetParent);
|
|
278
|
+
|
|
279
|
+
return [curtop];
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
const epochToMoment = atime => {
|
|
283
|
+
if (!atime) return atime;
|
|
284
|
+
atime = atime * 1000;
|
|
285
|
+
return moment_timezone__WEBPACK_IMPORTED_MODULE_0___default()(atime);
|
|
286
|
+
};
|
|
287
|
+
const epochToMomentTimeZone = (atime, time_zone) => {
|
|
288
|
+
if (!atime) return atime;
|
|
289
|
+
atime = atime * 1000;
|
|
290
|
+
return moment_timezone__WEBPACK_IMPORTED_MODULE_0___default()(atime).tz(time_zone);
|
|
291
|
+
};
|
|
292
|
+
const formatEpoch = (atime, format = 'M/D/YYYY h:mm a') => {
|
|
293
|
+
if (!atime) return atime;
|
|
294
|
+
return epochToMoment(atime).format(format);
|
|
295
|
+
};
|
|
296
|
+
const objectToQueryString = obj => {
|
|
297
|
+
var str = "";
|
|
298
|
+
|
|
299
|
+
for (var key in obj) {
|
|
300
|
+
if (str != "") {
|
|
301
|
+
str += "&";
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
str += key + "=" + encodeURIComponent(obj[key]);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return str;
|
|
308
|
+
};
|
|
309
|
+
const getBackURL = () => {
|
|
310
|
+
let url = urijs__WEBPACK_IMPORTED_MODULE_1___default()(window.location.href);
|
|
311
|
+
let query = url.search(true);
|
|
312
|
+
let fragment = url.fragment();
|
|
313
|
+
let backUrl = query.hasOwnProperty('BackUrl') ? query['BackUrl'] : null;
|
|
314
|
+
|
|
315
|
+
if (fragment != null && fragment != '') {
|
|
316
|
+
backUrl += `#${fragment}`;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
return backUrl;
|
|
320
|
+
};
|
|
321
|
+
const toSlug = text => {
|
|
322
|
+
text = text.toLowerCase();
|
|
323
|
+
return text.replace(/[^a-zA-Z0-9]+/g, '_');
|
|
324
|
+
};
|
|
325
|
+
const getAuthCallback = () => {
|
|
326
|
+
if (typeof window !== 'undefined') {
|
|
327
|
+
return `${window.location.origin}/auth/callback`;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
return null;
|
|
331
|
+
};
|
|
332
|
+
const getCurrentLocation = () => {
|
|
333
|
+
let location = '';
|
|
334
|
+
|
|
335
|
+
if (typeof window !== 'undefined') {
|
|
336
|
+
location = window.location; // check if we are on iframe
|
|
337
|
+
|
|
338
|
+
if (window.top) location = window.top.location;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
return location;
|
|
342
|
+
};
|
|
343
|
+
const getOrigin = () => {
|
|
344
|
+
if (typeof window !== 'undefined') {
|
|
345
|
+
return window.location.origin;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
return null;
|
|
349
|
+
};
|
|
350
|
+
const getCurrentPathName = () => {
|
|
351
|
+
if (typeof window !== 'undefined') {
|
|
352
|
+
return window.location.pathname;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
return null;
|
|
356
|
+
};
|
|
357
|
+
const getCurrentHref = () => {
|
|
358
|
+
if (typeof window !== 'undefined') {
|
|
359
|
+
return window.location.href;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
return null;
|
|
363
|
+
};
|
|
364
|
+
const getAllowedUserGroups = () => {
|
|
365
|
+
if (typeof window !== 'undefined') {
|
|
366
|
+
return window.ALLOWED_USER_GROUPS || '';
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
return null;
|
|
370
|
+
};
|
|
371
|
+
const buildAPIBaseUrl = relativeUrl => {
|
|
372
|
+
if (typeof window !== 'undefined') {
|
|
373
|
+
return `${window.API_BASE_URL}${relativeUrl}`;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
return null``;
|
|
377
|
+
};
|
|
378
|
+
const putOnLocalStorage = (key, value) => {
|
|
379
|
+
if (typeof window !== 'undefined') {
|
|
380
|
+
window.localStorage.setItem(key, value);
|
|
381
|
+
}
|
|
382
|
+
};
|
|
383
|
+
const getFromLocalStorage = (key, removeIt) => {
|
|
384
|
+
if (typeof window !== 'undefined') {
|
|
385
|
+
let val = window.localStorage.getItem(key);
|
|
386
|
+
|
|
387
|
+
if (removeIt) {
|
|
388
|
+
console.log(`getFromLocalStorage removing key ${key}`);
|
|
389
|
+
removeFromLocalStorage(key);
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
return val;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
return null;
|
|
396
|
+
};
|
|
397
|
+
const removeFromLocalStorage = key => {
|
|
398
|
+
if (typeof window !== 'undefined') {
|
|
399
|
+
window.localStorage.removeItem(key);
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
const isClearingSessionState = () => {
|
|
403
|
+
if (typeof window !== 'undefined') {
|
|
404
|
+
return window.clearing_session_state;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
return false;
|
|
408
|
+
};
|
|
409
|
+
const setSessionClearingState = val => {
|
|
410
|
+
if (typeof window !== 'undefined') {
|
|
411
|
+
window.clearing_session_state = val;
|
|
412
|
+
}
|
|
413
|
+
};
|
|
414
|
+
const getCurrentUserLanguage = () => {
|
|
415
|
+
let language = 'en';
|
|
416
|
+
|
|
417
|
+
if (typeof navigator !== 'undefined') {
|
|
418
|
+
language = navigator.languages && navigator.languages[0] || navigator.language || navigator.userLanguage;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
return language;
|
|
422
|
+
};
|
|
423
|
+
const scrollToError = errors => {
|
|
424
|
+
if (Object.keys(errors).length > 0) {
|
|
425
|
+
const firstError = Object.keys(errors)[0];
|
|
426
|
+
const firstNode = document.getElementById(firstError);
|
|
427
|
+
if (firstNode) window.scrollTo(0, findElementPos(firstNode));
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
const hasErrors = (field, errors) => {
|
|
431
|
+
if (field in errors) {
|
|
432
|
+
return errors[field];
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
return '';
|
|
436
|
+
};
|
|
437
|
+
const shallowEqual = (object1, object2) => {
|
|
438
|
+
const keys1 = Object.keys(object1);
|
|
439
|
+
const keys2 = Object.keys(object2);
|
|
440
|
+
|
|
441
|
+
if (keys1.length !== keys2.length) {
|
|
442
|
+
return false;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
for (let key of keys1) {
|
|
446
|
+
if (object1[key] !== object2[key]) {
|
|
447
|
+
return false;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
return true;
|
|
452
|
+
};
|
|
453
|
+
const arraysEqual = (a1, a2) => a1.length === a2.length && a1.every((o, idx) => shallowEqual(o, a2[idx]));
|
|
454
|
+
const isEmpty = obj => {
|
|
455
|
+
return Object.keys(obj).length === 0;
|
|
456
|
+
};
|
|
457
|
+
const base64URLEncode = str => {
|
|
458
|
+
return str.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
459
|
+
};
|
|
460
|
+
const retryPromise = async (cb, maxNumberOfRetries = 3) => {
|
|
461
|
+
for (let i = 0; i < maxNumberOfRetries; i++) {
|
|
462
|
+
if (await cb()) {
|
|
463
|
+
return true;
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
return false;
|
|
468
|
+
};
|
|
469
|
+
const getTimeServiceUrl = () => {
|
|
470
|
+
if (typeof window !== 'undefined') {
|
|
471
|
+
return window.TIMEINTERVALSINCE1970_API_URL || process.env.TIMEINTERVALSINCE1970_API_URL;
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
return null;
|
|
475
|
+
};
|
|
476
|
+
|
|
477
|
+
/***/ }),
|
|
478
|
+
|
|
479
|
+
/***/ "./src/components/table-editable/editable-table.css":
|
|
480
|
+
/*!**********************************************************!*\
|
|
481
|
+
!*** ./src/components/table-editable/editable-table.css ***!
|
|
482
|
+
\**********************************************************/
|
|
483
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
484
|
+
|
|
485
|
+
__webpack_require__.r(__webpack_exports__);
|
|
486
|
+
// extracted by mini-css-extract-plugin
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
/***/ }),
|
|
490
|
+
|
|
491
|
+
/***/ "@babel/runtime/helpers/defineProperty":
|
|
492
|
+
/*!********************************************************!*\
|
|
493
|
+
!*** external "@babel/runtime/helpers/defineProperty" ***!
|
|
494
|
+
\********************************************************/
|
|
495
|
+
/***/ ((module) => {
|
|
496
|
+
|
|
497
|
+
module.exports = require("@babel/runtime/helpers/defineProperty");
|
|
498
|
+
|
|
499
|
+
/***/ }),
|
|
500
|
+
|
|
501
|
+
/***/ "i18n-react/dist/i18n-react":
|
|
502
|
+
/*!*********************************************!*\
|
|
503
|
+
!*** external "i18n-react/dist/i18n-react" ***!
|
|
504
|
+
\*********************************************/
|
|
505
|
+
/***/ ((module) => {
|
|
506
|
+
|
|
507
|
+
module.exports = require("i18n-react/dist/i18n-react");
|
|
508
|
+
|
|
509
|
+
/***/ }),
|
|
510
|
+
|
|
511
|
+
/***/ "moment-timezone":
|
|
512
|
+
/*!**********************************!*\
|
|
513
|
+
!*** external "moment-timezone" ***!
|
|
514
|
+
\**********************************/
|
|
515
|
+
/***/ ((module) => {
|
|
516
|
+
|
|
517
|
+
module.exports = require("moment-timezone");
|
|
518
|
+
|
|
519
|
+
/***/ }),
|
|
520
|
+
|
|
521
|
+
/***/ "react":
|
|
522
|
+
/*!************************!*\
|
|
523
|
+
!*** external "react" ***!
|
|
524
|
+
\************************/
|
|
525
|
+
/***/ ((module) => {
|
|
526
|
+
|
|
527
|
+
module.exports = require("react");
|
|
528
|
+
|
|
529
|
+
/***/ }),
|
|
530
|
+
|
|
531
|
+
/***/ "react-tooltip":
|
|
532
|
+
/*!********************************!*\
|
|
533
|
+
!*** external "react-tooltip" ***!
|
|
534
|
+
\********************************/
|
|
535
|
+
/***/ ((module) => {
|
|
536
|
+
|
|
537
|
+
module.exports = require("react-tooltip");
|
|
538
|
+
|
|
539
|
+
/***/ }),
|
|
540
|
+
|
|
541
|
+
/***/ "sweetalert2":
|
|
542
|
+
/*!******************************!*\
|
|
543
|
+
!*** external "sweetalert2" ***!
|
|
544
|
+
\******************************/
|
|
545
|
+
/***/ ((module) => {
|
|
546
|
+
|
|
547
|
+
module.exports = require("sweetalert2");
|
|
548
|
+
|
|
549
|
+
/***/ }),
|
|
550
|
+
|
|
551
|
+
/***/ "urijs":
|
|
552
|
+
/*!************************!*\
|
|
553
|
+
!*** external "urijs" ***!
|
|
554
|
+
\************************/
|
|
555
|
+
/***/ ((module) => {
|
|
556
|
+
|
|
557
|
+
module.exports = require("urijs");
|
|
558
|
+
|
|
559
|
+
/***/ })
|
|
560
|
+
|
|
561
|
+
/******/ });
|
|
562
|
+
/************************************************************************/
|
|
563
|
+
/******/ // The module cache
|
|
564
|
+
/******/ var __webpack_module_cache__ = {};
|
|
565
|
+
/******/
|
|
566
|
+
/******/ // The require function
|
|
567
|
+
/******/ function __webpack_require__(moduleId) {
|
|
568
|
+
/******/ // Check if module is in cache
|
|
569
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
|
570
|
+
/******/ if (cachedModule !== undefined) {
|
|
571
|
+
/******/ return cachedModule.exports;
|
|
572
|
+
/******/ }
|
|
573
|
+
/******/ // Create a new module (and put it into the cache)
|
|
574
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
|
575
|
+
/******/ // no module.id needed
|
|
576
|
+
/******/ // no module.loaded needed
|
|
577
|
+
/******/ exports: {}
|
|
578
|
+
/******/ };
|
|
579
|
+
/******/
|
|
580
|
+
/******/ // Execute the module function
|
|
581
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
582
|
+
/******/
|
|
583
|
+
/******/ // Return the exports of the module
|
|
584
|
+
/******/ return module.exports;
|
|
585
|
+
/******/ }
|
|
586
|
+
/******/
|
|
587
|
+
/************************************************************************/
|
|
588
|
+
/******/ /* webpack/runtime/compat get default export */
|
|
589
|
+
/******/ (() => {
|
|
590
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
591
|
+
/******/ __webpack_require__.n = (module) => {
|
|
592
|
+
/******/ var getter = module && module.__esModule ?
|
|
593
|
+
/******/ () => (module['default']) :
|
|
594
|
+
/******/ () => (module);
|
|
595
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
|
596
|
+
/******/ return getter;
|
|
597
|
+
/******/ };
|
|
598
|
+
/******/ })();
|
|
599
|
+
/******/
|
|
600
|
+
/******/ /* webpack/runtime/define property getters */
|
|
601
|
+
/******/ (() => {
|
|
602
|
+
/******/ // define getter functions for harmony exports
|
|
603
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
|
604
|
+
/******/ for(var key in definition) {
|
|
605
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
606
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
607
|
+
/******/ }
|
|
608
|
+
/******/ }
|
|
609
|
+
/******/ };
|
|
610
|
+
/******/ })();
|
|
611
|
+
/******/
|
|
612
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
613
|
+
/******/ (() => {
|
|
614
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
615
|
+
/******/ })();
|
|
616
|
+
/******/
|
|
617
|
+
/******/ /* webpack/runtime/make namespace object */
|
|
618
|
+
/******/ (() => {
|
|
619
|
+
/******/ // define __esModule on exports
|
|
620
|
+
/******/ __webpack_require__.r = (exports) => {
|
|
621
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
622
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
623
|
+
/******/ }
|
|
624
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
625
|
+
/******/ };
|
|
626
|
+
/******/ })();
|
|
627
|
+
/******/
|
|
628
|
+
/************************************************************************/
|
|
629
|
+
var __webpack_exports__ = {};
|
|
630
|
+
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
|
631
|
+
(() => {
|
|
632
|
+
/*!********************************************************!*\
|
|
633
|
+
!*** ./src/components/table-editable/EditableTable.js ***!
|
|
634
|
+
\********************************************************/
|
|
635
|
+
__webpack_require__.r(__webpack_exports__);
|
|
636
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
637
|
+
/* harmony export */ "default": () => (/* binding */ EditableTable)
|
|
638
|
+
/* harmony export */ });
|
|
639
|
+
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ "@babel/runtime/helpers/defineProperty");
|
|
640
|
+
/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0__);
|
|
641
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
|
|
642
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
643
|
+
/* harmony import */ var _EditableTableHeading__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./EditableTableHeading */ "./src/components/table-editable/EditableTableHeading.js");
|
|
644
|
+
/* harmony import */ var _EditableTableCell__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./EditableTableCell */ "./src/components/table-editable/EditableTableCell.js");
|
|
645
|
+
/* harmony import */ var _EditableActionsTableCell__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./EditableActionsTableCell */ "./src/components/table-editable/EditableActionsTableCell.js");
|
|
646
|
+
/* harmony import */ var _EditableTableRow__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./EditableTableRow */ "./src/components/table-editable/EditableTableRow.js");
|
|
647
|
+
/* harmony import */ var sweetalert2__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! sweetalert2 */ "sweetalert2");
|
|
648
|
+
/* harmony import */ var sweetalert2__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(sweetalert2__WEBPACK_IMPORTED_MODULE_6__);
|
|
649
|
+
/* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! i18n-react/dist/i18n-react */ "i18n-react/dist/i18n-react");
|
|
650
|
+
/* harmony import */ var i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_7__);
|
|
651
|
+
/* harmony import */ var _editable_table_css__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./editable-table.css */ "./src/components/table-editable/editable-table.css");
|
|
652
|
+
/* harmony import */ var react_tooltip__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! react-tooltip */ "react-tooltip");
|
|
653
|
+
/* harmony import */ var react_tooltip__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(react_tooltip__WEBPACK_IMPORTED_MODULE_9__);
|
|
654
|
+
/* harmony import */ var _utils_methods__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/methods */ "./src/utils/methods.js");
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
658
|
+
|
|
659
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_0___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
|
|
663
|
+
|
|
664
|
+
|
|
665
|
+
|
|
666
|
+
|
|
667
|
+
|
|
668
|
+
|
|
669
|
+
|
|
670
|
+
|
|
671
|
+
const defaults = {
|
|
672
|
+
colWidth: ''
|
|
673
|
+
};
|
|
674
|
+
|
|
675
|
+
const createRow = (row, columns, actions, shouldUseTextArea) => {
|
|
676
|
+
var action_buttons = '';
|
|
677
|
+
var cells = columns.map((col, i) => {
|
|
678
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_EditableTableCell__WEBPACK_IMPORTED_MODULE_3__["default"], {
|
|
679
|
+
shouldUseTextArea: shouldUseTextArea,
|
|
680
|
+
key: row['id'] + '_field' + i,
|
|
681
|
+
name: col.columnKey,
|
|
682
|
+
id: row.id,
|
|
683
|
+
is_edit: row.is_edit,
|
|
684
|
+
handleChange: actions.handleChange
|
|
685
|
+
}, row[col.columnKey]);
|
|
686
|
+
});
|
|
687
|
+
|
|
688
|
+
if (actions) {
|
|
689
|
+
cells.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_EditableActionsTableCell__WEBPACK_IMPORTED_MODULE_4__["default"], {
|
|
690
|
+
key: 'actions_' + row['id'],
|
|
691
|
+
id: row['id'],
|
|
692
|
+
actions: actions
|
|
693
|
+
}));
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
return cells;
|
|
697
|
+
};
|
|
698
|
+
|
|
699
|
+
const createNewRow = (columns, new_row, addNew, handleChange, shouldUseTextArea) => {
|
|
700
|
+
var cells = columns.map((col, i) => {
|
|
701
|
+
let cell_value = typeof new_row[col.columnKey] !== 'undefined' ? new_row[col.columnKey] : '';
|
|
702
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("td", {
|
|
703
|
+
key: 'new_row_' + i
|
|
704
|
+
}, shouldUseTextArea && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("textarea", {
|
|
705
|
+
className: "form-control",
|
|
706
|
+
id: 'new_' + col.columnKey,
|
|
707
|
+
name: col.columnKey,
|
|
708
|
+
onChange: handleChange,
|
|
709
|
+
value: cell_value
|
|
710
|
+
}), !shouldUseTextArea && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("input", {
|
|
711
|
+
className: "form-control",
|
|
712
|
+
id: 'new_' + col.columnKey,
|
|
713
|
+
name: col.columnKey,
|
|
714
|
+
onChange: handleChange,
|
|
715
|
+
value: cell_value
|
|
716
|
+
}));
|
|
717
|
+
});
|
|
718
|
+
cells.push( /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("td", {
|
|
719
|
+
key: "add_new"
|
|
720
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", {
|
|
721
|
+
className: "btn btn-default",
|
|
722
|
+
onClick: addNew
|
|
723
|
+
}, " Add ")));
|
|
724
|
+
return cells;
|
|
725
|
+
};
|
|
726
|
+
|
|
727
|
+
class EditableTable extends (react__WEBPACK_IMPORTED_MODULE_1___default().Component) {
|
|
728
|
+
constructor(props) {
|
|
729
|
+
super(props);
|
|
730
|
+
this.state = {
|
|
731
|
+
rows: props.data,
|
|
732
|
+
new_row: {}
|
|
733
|
+
}; // we store the delete and save functions in props cause we need to extend them
|
|
734
|
+
|
|
735
|
+
this.onSave = props.options.actions.save.onClick;
|
|
736
|
+
this.actions = _objectSpread({}, props.options.actions);
|
|
737
|
+
this.actions.edit = this.editRow.bind(this);
|
|
738
|
+
this.actions.save = this.saveRow.bind(this);
|
|
739
|
+
this.actions.delete = this.deleteClick.bind(this);
|
|
740
|
+
this.actions.handleChange = this.onChangeCell.bind(this);
|
|
741
|
+
this.actions.cancel = this.editRowCancel.bind(this);
|
|
742
|
+
this.saveNewRow = this.saveNewRow.bind(this);
|
|
743
|
+
this.handleNewChange = this.onChangeNewCell.bind(this);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
componentDidUpdate(prevProps, prevState, snapshot) {
|
|
747
|
+
if (!(0,_utils_methods__WEBPACK_IMPORTED_MODULE_10__.shallowEqual)(this.props.data, prevProps.data)) {
|
|
748
|
+
this.setState({
|
|
749
|
+
rows: this.props.data
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
saveRow(id, ev) {
|
|
755
|
+
const {
|
|
756
|
+
rows
|
|
757
|
+
} = this.state;
|
|
758
|
+
let row = rows.find(r => r.id == id);
|
|
759
|
+
row.is_edit = false;
|
|
760
|
+
this.editing_row = null;
|
|
761
|
+
this.setState({
|
|
762
|
+
rows: rows
|
|
763
|
+
});
|
|
764
|
+
this.onSave(row);
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
deleteClick(id) {
|
|
768
|
+
let onDelete = this.props.options.actions.delete.onClick;
|
|
769
|
+
let noAlert = this.props.options.hasOwnProperty('noAlert');
|
|
770
|
+
|
|
771
|
+
if (noAlert) {
|
|
772
|
+
onDelete(id);
|
|
773
|
+
} else {
|
|
774
|
+
sweetalert2__WEBPACK_IMPORTED_MODULE_6___default().fire({
|
|
775
|
+
title: i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_7___default().translate("general.are_you_sure"),
|
|
776
|
+
text: i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_7___default().translate("general.remove_warning"),
|
|
777
|
+
type: "warning",
|
|
778
|
+
showCancelButton: true,
|
|
779
|
+
confirmButtonColor: "#DD6B55",
|
|
780
|
+
confirmButtonText: i18n_react_dist_i18n_react__WEBPACK_IMPORTED_MODULE_7___default().translate("general.yes_delete")
|
|
781
|
+
}).then(function (result) {
|
|
782
|
+
if (result.value) {
|
|
783
|
+
onDelete(id);
|
|
784
|
+
}
|
|
785
|
+
});
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
editRow(id, ev) {
|
|
790
|
+
const {
|
|
791
|
+
rows
|
|
792
|
+
} = this.state;
|
|
793
|
+
let row = rows.find(r => r.id == id); //save editing row for cancel
|
|
794
|
+
|
|
795
|
+
this.editing_row = _objectSpread({}, row);
|
|
796
|
+
row.is_edit = true;
|
|
797
|
+
this.setState({
|
|
798
|
+
rows: rows
|
|
799
|
+
});
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
editRowCancel(id, ev) {
|
|
803
|
+
const {
|
|
804
|
+
rows
|
|
805
|
+
} = this.state;
|
|
806
|
+
rows.forEach(r => {
|
|
807
|
+
r.is_edit = false;
|
|
808
|
+
});
|
|
809
|
+
let rowIdx = rows.findIndex(r => r.id == id);
|
|
810
|
+
rows[rowIdx] = this.editing_row;
|
|
811
|
+
this.setState({
|
|
812
|
+
rows: rows
|
|
813
|
+
});
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
onChangeCell(ev) {
|
|
817
|
+
const {
|
|
818
|
+
rows
|
|
819
|
+
} = this.state;
|
|
820
|
+
let field = ev.target;
|
|
821
|
+
let row = rows.find(r => r.id == field.id);
|
|
822
|
+
row[field.name] = field.value;
|
|
823
|
+
this.setState({
|
|
824
|
+
rows: rows
|
|
825
|
+
});
|
|
826
|
+
}
|
|
827
|
+
|
|
828
|
+
onChangeNewCell(ev) {
|
|
829
|
+
const {
|
|
830
|
+
new_row
|
|
831
|
+
} = this.state;
|
|
832
|
+
let field = ev.target;
|
|
833
|
+
new_row[field.name] = field.value;
|
|
834
|
+
this.setState({
|
|
835
|
+
new_row: new_row
|
|
836
|
+
});
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
saveNewRow(ev) {
|
|
840
|
+
const {
|
|
841
|
+
new_row
|
|
842
|
+
} = this.state;
|
|
843
|
+
ev.preventDefault();
|
|
844
|
+
this.onSave(new_row);
|
|
845
|
+
this.setState({
|
|
846
|
+
new_row: {}
|
|
847
|
+
});
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
render() {
|
|
851
|
+
let {
|
|
852
|
+
options,
|
|
853
|
+
columns
|
|
854
|
+
} = this.props;
|
|
855
|
+
let tableClass = options.hasOwnProperty('className') ? options.className : '';
|
|
856
|
+
let textArea = this.props.hasOwnProperty("textArea");
|
|
857
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("table", {
|
|
858
|
+
className: "table table-striped table-bordered editableTable " + tableClass
|
|
859
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("thead", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("tr", null, columns.map((col, i) => {
|
|
860
|
+
let colWidth = col.width ? col.width : defaults.colWidth;
|
|
861
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_EditableTableHeading__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
|
862
|
+
width: colWidth,
|
|
863
|
+
key: 'heading_' + i
|
|
864
|
+
}, col.value);
|
|
865
|
+
}), this.actions && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_EditableTableHeading__WEBPACK_IMPORTED_MODULE_2__["default"], {
|
|
866
|
+
key: "actions_heading"
|
|
867
|
+
}, "Actions"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("tbody", null, columns.length > 0 && this.state.rows.map((row, i) => {
|
|
868
|
+
if (Array.isArray(row) && row.length !== columns.length) {
|
|
869
|
+
console.warn(`Data at row ${i} is ${row.length}. It should be ${columns.length}.`);
|
|
870
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("tr", null);
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_EditableTableRow__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
|
874
|
+
even: i % 2 === 0,
|
|
875
|
+
key: 'row_' + row.id,
|
|
876
|
+
id: row.id
|
|
877
|
+
}, createRow(row, columns, this.actions, textArea));
|
|
878
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_EditableTableRow__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
|
879
|
+
even: 0,
|
|
880
|
+
id: "new_row",
|
|
881
|
+
key: "new_row"
|
|
882
|
+
}, createNewRow(columns, this.state.new_row, this.saveNewRow, this.handleNewChange, textArea)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement((react_tooltip__WEBPACK_IMPORTED_MODULE_9___default()), {
|
|
883
|
+
delayShow: 10
|
|
884
|
+
}));
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
}
|
|
888
|
+
;
|
|
889
|
+
})();
|
|
890
|
+
|
|
891
|
+
/******/ return __webpack_exports__;
|
|
892
|
+
/******/ })()
|
|
893
|
+
;
|
|
894
|
+
});
|
|
895
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O01BQWtCLElBQUksRUFBRSxDQUF4QjtNQUEyQixFQUFFLEVBQUMsU0FBOUI7TUFBd0MsR0FBRyxFQUFDO0lBQTVDLEdBQ0t4QyxZQUFZLENBQUNQLE9BQUQsRUFBVSxLQUFLdEksS0FBTCxDQUFXOEksT0FBckIsRUFBOEIsS0FBS2EsVUFBbkMsRUFBK0MsS0FBS0MsZUFBcEQsRUFBcUV5QixRQUFyRSxDQURqQixDQWJKLENBbEJKLENBREosZUFxQ0ksMkRBQUMsc0RBQUQ7TUFBYyxTQUFTLEVBQUU7SUFBekIsRUFyQ0osQ0FESjtFQXlDSDs7QUE5S3NEO0FBK0sxRCxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvdXRpbHMvbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9lZGl0YWJsZS10YWJsZS5jc3M/N2UwYyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5XCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL2V4dGVybmFsIGNvbW1vbmpzIFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJtb21lbnQtdGltZXpvbmVcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdFwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LXRvb2x0aXBcIiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vZXh0ZXJuYWwgY29tbW9uanMgXCJzd2VldGFsZXJ0MlwiIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi9leHRlcm5hbCBjb21tb25qcyBcInVyaWpzXCIiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi8uL3NyYy9jb21wb25lbnRzL3RhYmxlLWVkaXRhYmxlL0VkaXRhYmxlVGFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsICgpID0+IHtcbnJldHVybiAiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBpc19lZGl0aW5nOiBmYWxzZVxuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBvbkRlbGV0ZShpZCwgZXYpIHtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmRlbGV0ZShpZCk7XG4gICAgfVxuXG4gICAgb25TYXZlKGlkLCBldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGlzX2VkaXRpbmc6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5zYXZlKGlkKTtcbiAgICB9XG5cbiAgICBvbkVkaXQoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfZWRpdGluZzogdHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnByb3BzLmFjdGlvbnMuZWRpdChpZCk7XG4gICAgfVxuXG4gICAgb25DYW5jZWwoaWQsIGV2KSB7XG4gICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgaXNfZWRpdGluZzogZmFsc2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLmNhbmNlbChpZCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBsZXQge2FjdGlvbnMsIGlkfSA9IHRoaXMucHJvcHM7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuaXNfZWRpdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vblNhdmUuYmluZCh0aGlzLGlkKX0gZGF0YS10aXA9XCJzYXZlXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtZmxvcHB5LW9cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIlwiIG9uQ2xpY2s9e3RoaXMub25DYW5jZWwuYmluZCh0aGlzLGlkKX0gZGF0YS10aXA9XCJjYW5jZWxcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3NOYW1lPVwiYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICB7J2VkaXQnIGluIGFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJcIiBvbkNsaWNrPXt0aGlzLm9uRWRpdC5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cImVkaXRcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3NOYW1lPVwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHsnZGVsZXRlJyBpbiBhY3Rpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiXCIgb25DbGljaz17dGhpcy5vbkRlbGV0ZS5iaW5kKHRoaXMsaWQpfSBkYXRhLXRpcD1cImRlbGV0ZVwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzc05hbWU9XCJmYSBmYS10cmFzaC1vIGRlbGV0ZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgRWRpdGFibGVUYWJsZUNlbGwgPSAocHJvcHMpID0+IHtcblxuICAgIGlmIChwcm9wcy5pc19lZGl0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgeyFwcm9wcy5zaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkZWZhdWx0VmFsdWU9e3Byb3BzLmNoaWxkcmVufSBuYW1lPXtwcm9wcy5uYW1lfSBpZD17cHJvcHMuaWR9IG9uQ2hhbmdlPXtwcm9wcy5oYW5kbGVDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAge3Byb3BzLnNob3VsZFVzZVRleHRBcmVhICYmXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiBkZWZhdWx0VmFsdWU9e3Byb3BzLmNoaWxkcmVufSBuYW1lPXtwcm9wcy5uYW1lfSBpZD17cHJvcHMuaWR9IG9uQ2hhbmdlPXtwcm9wcy5oYW5kbGVDaGFuZ2V9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGQ+e3Byb3BzLmNoaWxkcmVufTwvdGQ+XG4gICAgICAgICk7XG4gICAgfVxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFZGl0YWJsZVRhYmxlQ2VsbDsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5jbGFzcyBFZGl0YWJsZVRhYmxlSGVhZGluZyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG5cbiAgICBjb25zdHJ1Y3RvciAocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHJlbmRlciAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8dGggd2lkdGg9e3RoaXMucHJvcHMud2lkdGh9PlxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICk7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRhYmxlVGFibGVIZWFkaW5nOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlVGFibGVSb3cgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuLCBldmVuLCBpZCB9ID0gdGhpcy5wcm9wcztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPHRyIGlkPXtpZH0gcm9sZT1cInJvd1wiIGNsYXNzTmFtZT17ZXZlbiA/ICdldmVuJyA6ICdvZGQnfT5cbiAgICAgICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTggT3BlblN0YWNrIEZvdW5kYXRpb25cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqKi9cblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0IFVSSSBmcm9tIFwidXJpanNcIjtcblxuZXhwb3J0IGNvbnN0IGZpbmRFbGVtZW50UG9zID0gKG9iaikgPT4ge1xuICAgIHZhciBjdXJ0b3AgPSAtNzA7XG4gICAgaWYgKG9iai5vZmZzZXRQYXJlbnQpIHtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgY3VydG9wICs9IG9iai5vZmZzZXRUb3A7XG4gICAgICAgIH0gd2hpbGUgKG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpO1xuICAgICAgICByZXR1cm4gW2N1cnRvcF07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGVwb2NoVG9Nb21lbnQgPSAoYXRpbWUpID0+IHtcbiAgICBpZighYXRpbWUpIHJldHVybiBhdGltZTtcbiAgICBhdGltZSA9IGF0aW1lICogMTAwMDtcbiAgICByZXR1cm4gbW9tZW50KGF0aW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBlcG9jaFRvTW9tZW50VGltZVpvbmUgPSAoYXRpbWUsIHRpbWVfem9uZSkgPT4ge1xuICAgIGlmKCFhdGltZSkgcmV0dXJuIGF0aW1lO1xuICAgIGF0aW1lID0gYXRpbWUgKiAxMDAwO1xuICAgIHJldHVybiBtb21lbnQoYXRpbWUpLnR6KHRpbWVfem9uZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RXBvY2ggPSAoYXRpbWUsIGZvcm1hdCA9ICdNL0QvWVlZWSBoOm1tIGEnKSA9PiB7XG4gICAgaWYoIWF0aW1lKSByZXR1cm4gYXRpbWU7XG4gICAgcmV0dXJuIGVwb2NoVG9Nb21lbnQoYXRpbWUpLmZvcm1hdChmb3JtYXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IG9iamVjdFRvUXVlcnlTdHJpbmcgPSAob2JqKSA9PiB7XG4gICAgdmFyIHN0ciA9IFwiXCI7XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoc3RyICE9IFwiXCIpIHtcbiAgICAgICAgICAgIHN0ciArPSBcIiZcIjtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0ga2V5ICsgXCI9XCIgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2tleV0pO1xuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QmFja1VSTCA9ICgpID0+IHtcbiAgICBsZXQgdXJsICAgICAgPSBVUkkod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGxldCBxdWVyeSAgICA9IHVybC5zZWFyY2godHJ1ZSk7XG4gICAgbGV0IGZyYWdtZW50ID0gdXJsLmZyYWdtZW50KCk7XG4gICAgbGV0IGJhY2tVcmwgID0gcXVlcnkuaGFzT3duUHJvcGVydHkoJ0JhY2tVcmwnKSA/IHF1ZXJ5WydCYWNrVXJsJ10gOiBudWxsO1xuICAgIGlmKGZyYWdtZW50ICE9IG51bGwgJiYgZnJhZ21lbnQgIT0gJycpe1xuICAgICAgICBiYWNrVXJsICs9IGAjJHtmcmFnbWVudH1gO1xuICAgIH1cbiAgICByZXR1cm4gYmFja1VybDtcbn07XG5cbmV4cG9ydCBjb25zdCB0b1NsdWcgPSAodGV4dCkgPT57XG4gICAgdGV4dCA9IHRleHQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csJ18nKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldEF1dGhDYWxsYmFjayA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vYXV0aC9jYWxsYmFja2A7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRMb2NhdGlvbiA9ICgpID0+IHtcbiAgICBsZXQgbG9jYXRpb24gPSAnJztcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcbiAgICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG9uIGlmcmFtZVxuICAgICAgICBpZiAod2luZG93LnRvcClcbiAgICAgICAgICAgIGxvY2F0aW9uID0gd2luZG93LnRvcC5sb2NhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE9yaWdpbiA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBhdGhOYW1lID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudEhyZWYgPSAoKSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkVXNlckdyb3VwcyA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LkFMTE9XRURfVVNFUl9HUk9VUFMgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQVBJQmFzZVVybCA9IChyZWxhdGl2ZVVybCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgcmV0dXJuIGAke3dpbmRvdy5BUElfQkFTRV9VUkx9JHtyZWxhdGl2ZVVybH1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbGBgO1xufTtcblxuZXhwb3J0IGNvbnN0IHB1dE9uTG9jYWxTdG9yYWdlID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5LCByZW1vdmVJdCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxldCB2YWwgPSB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgaWYocmVtb3ZlSXQpe1xuICAgICAgICAgICAgY29uc29sZS5sb2coYGdldEZyb21Mb2NhbFN0b3JhZ2UgcmVtb3Zpbmcga2V5ICR7a2V5fWApO1xuICAgICAgICAgICAgcmVtb3ZlRnJvbUxvY2FsU3RvcmFnZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUZyb21Mb2NhbFN0b3JhZ2UgPSAoa2V5KSA9PiB7XG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaXNDbGVhcmluZ1Nlc3Npb25TdGF0ZSA9ICgpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gd2luZG93LmNsZWFyaW5nX3Nlc3Npb25fc3RhdGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uQ2xlYXJpbmdTdGF0ZSA9ICh2YWwpID0+IHtcbiAgICBpZih0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICB3aW5kb3cuY2xlYXJpbmdfc2Vzc2lvbl9zdGF0ZSA9IHZhbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFVzZXJMYW5ndWFnZSA9ICgpID0+IHtcbiAgICBsZXQgbGFuZ3VhZ2UgPSAnZW4nO1xuICAgIGlmKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxhbmd1YWdlID0gKG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlc1swXSkgfHwgbmF2aWdhdG9yLmxhbmd1YWdlIHx8IG5hdmlnYXRvci51c2VyTGFuZ3VhZ2U7XG4gICAgfVxuICAgIHJldHVybiBsYW5ndWFnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBzY3JvbGxUb0Vycm9yID0gKGVycm9ycykgPT4ge1xuICAgIGlmKE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBmaXJzdEVycm9yID0gT2JqZWN0LmtleXMoZXJyb3JzKVswXTtcbiAgICAgICAgY29uc3QgZmlyc3ROb2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZmlyc3RFcnJvcik7XG4gICAgICAgIGlmIChmaXJzdE5vZGUpIHdpbmRvdy5zY3JvbGxUbygwLCBmaW5kRWxlbWVudFBvcyhmaXJzdE5vZGUpKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaGFzRXJyb3JzID0gKGZpZWxkLCBlcnJvcnMpID0+IHtcbiAgICBpZihmaWVsZCBpbiBlcnJvcnMpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yc1tmaWVsZF07XG4gICAgfVxuICAgIHJldHVybiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFsbG93RXF1YWwgPSAob2JqZWN0MSwgb2JqZWN0MikgPT4ge1xuICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMob2JqZWN0MSk7XG4gICAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyhvYmplY3QyKTtcblxuICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQga2V5IG9mIGtleXMxKSB7XG4gICAgICAgIGlmIChvYmplY3QxW2tleV0gIT09IG9iamVjdDJba2V5XSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgYXJyYXlzRXF1YWwgPSAoYTEsIGEyKSA9PlxuICAgIGExLmxlbmd0aCA9PT0gYTIubGVuZ3RoICYmIGExLmV2ZXJ5KChvLCBpZHgpID0+IHNoYWxsb3dFcXVhbChvLCBhMltpZHhdKSk7XG5cbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKG9iaikgPT4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGJhc2U2NFVSTEVuY29kZSA9IChzdHIpID0+IHtcbiAgICByZXR1cm4gc3RyXG4gICAgICAgIC50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAgIC5yZXBsYWNlKC9cXC8vZywgJ18nKVxuICAgICAgICAucmVwbGFjZSgvPS9nLCAnJylcbn1cblxuZXhwb3J0IGNvbnN0IHJldHJ5UHJvbWlzZSA9IGFzeW5jIChcbiAgICBjYixcbiAgICBtYXhOdW1iZXJPZlJldHJpZXMgPSAzXG4pID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1heE51bWJlck9mUmV0cmllczsgaSsrKSB7XG4gICAgICAgIGlmIChhd2FpdCBjYigpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVTZXJ2aWNlVXJsID0gKCkgPT4ge1xuICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuVElNRUlOVEVSVkFMU0lOQ0UxOTcwX0FQSV9VUkwgfHwgcHJvY2Vzcy5lbnYuVElNRUlOVEVSVkFMU0lOQ0UxOTcwX0FQSV9VUkw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaTE4bi1yZWFjdC9kaXN0L2kxOG4tcmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibW9tZW50LXRpbWV6b25lXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LXRvb2x0aXBcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwic3dlZXRhbGVydDJcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXJpanNcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgRWRpdGFibGVUYWJsZUhlYWRpbmcgZnJvbSAnLi9FZGl0YWJsZVRhYmxlSGVhZGluZyc7XG5pbXBvcnQgRWRpdGFibGVUYWJsZUNlbGwgZnJvbSAnLi9FZGl0YWJsZVRhYmxlQ2VsbCc7XG5pbXBvcnQgRWRpdGFibGVBY3Rpb25zVGFibGVDZWxsIGZyb20gJy4vRWRpdGFibGVBY3Rpb25zVGFibGVDZWxsJztcbmltcG9ydCBFZGl0YWJsZVRhYmxlUm93IGZyb20gJy4vRWRpdGFibGVUYWJsZVJvdyc7XG5pbXBvcnQgU3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcbmltcG9ydCBUIGZyb20gXCJpMThuLXJlYWN0L2Rpc3QvaTE4bi1yZWFjdFwiO1xuaW1wb3J0ICcuL2VkaXRhYmxlLXRhYmxlLmNzcyc7XG5pbXBvcnQgUmVhY3RUb29sdGlwIGZyb20gXCJyZWFjdC10b29sdGlwXCI7XG5pbXBvcnQgeyBzaGFsbG93RXF1YWwgfSBmcm9tICcuLi8uLi91dGlscy9tZXRob2RzJ1xuXG5jb25zdCBkZWZhdWx0cyA9IHtcbiAgICBjb2xXaWR0aDogJydcbn07XG5cbmNvbnN0IGNyZWF0ZVJvdyA9IChyb3csIGNvbHVtbnMsIGFjdGlvbnMsIHNob3VsZFVzZVRleHRBcmVhKSA9PiB7XG5cbiAgICB2YXIgYWN0aW9uX2J1dHRvbnMgPSAnJztcbiAgICB2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlQ2VsbCBzaG91bGRVc2VUZXh0QXJlYT17c2hvdWxkVXNlVGV4dEFyZWF9IGtleT17cm93WydpZCddICsgJ19maWVsZCcgKyBpfSBuYW1lPXtjb2wuY29sdW1uS2V5fSBpZD17cm93LmlkfSBpc19lZGl0PXtyb3cuaXNfZWRpdH0gaGFuZGxlQ2hhbmdlPXthY3Rpb25zLmhhbmRsZUNoYW5nZX0+XG4gICAgICAgICAgICAgICAge3Jvd1tjb2wuY29sdW1uS2V5XX1cbiAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZUNlbGw+XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoYWN0aW9ucykge1xuICAgICAgICBjZWxscy5wdXNoKDxFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwga2V5PXsnYWN0aW9uc18nICsgcm93WydpZCddfSBpZD17cm93WydpZCddfSBhY3Rpb25zPXthY3Rpb25zfS8+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5jb25zdCBjcmVhdGVOZXdSb3cgPSAoY29sdW1ucywgbmV3X3JvdywgYWRkTmV3LCBoYW5kbGVDaGFuZ2UsIHNob3VsZFVzZVRleHRBcmVhKSA9PiB7XG5cbiAgICB2YXIgY2VsbHMgPSBjb2x1bW5zLm1hcCgoY29sLGkpID0+IHtcbiAgICAgICAgbGV0IGNlbGxfdmFsdWUgPSAodHlwZW9mIG5ld19yb3dbY29sLmNvbHVtbktleV0gIT09ICd1bmRlZmluZWQnKSA/IG5ld19yb3dbY29sLmNvbHVtbktleV0gOiAnJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDx0ZCBrZXk9eyduZXdfcm93XycgKyBpfT5cbiAgICAgICAgICAgICAgICB7c2hvdWxkVXNlVGV4dEFyZWEgJiZcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIGlkPXsnbmV3XycgKyBjb2wuY29sdW1uS2V5fSBuYW1lPXtjb2wuY29sdW1uS2V5fSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2NlbGxfdmFsdWV9Lz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeyFzaG91bGRVc2VUZXh0QXJlYSAmJlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCIgaWQ9eyduZXdfJyArIGNvbC5jb2x1bW5LZXl9IG5hbWU9e2NvbC5jb2x1bW5LZXl9IG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Y2VsbF92YWx1ZX0vPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjZWxscy5wdXNoKFxuICAgICAgICA8dGQga2V5PSdhZGRfbmV3Jz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0XCIgb25DbGljaz17YWRkTmV3fT4gQWRkIDwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICk7XG5cbiAgICByZXR1cm4gY2VsbHM7XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICAgICAgc3VwZXIocHJvcHMpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICByb3dzOiBwcm9wcy5kYXRhLFxuICAgICAgICAgICAgbmV3X3Jvdzoge31cbiAgICAgICAgfTtcblxuICAgICAgICAvLyB3ZSBzdG9yZSB0aGUgZGVsZXRlIGFuZCBzYXZlIGZ1bmN0aW9ucyBpbiBwcm9wcyBjYXVzZSB3ZSBuZWVkIHRvIGV4dGVuZCB0aGVtXG4gICAgICAgIHRoaXMub25TYXZlID0gcHJvcHMub3B0aW9ucy5hY3Rpb25zLnNhdmUub25DbGljaztcblxuICAgICAgICB0aGlzLmFjdGlvbnMgPSB7Li4ucHJvcHMub3B0aW9ucy5hY3Rpb25zfTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmVkaXQgPSB0aGlzLmVkaXRSb3cuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLnNhdmUgPSB0aGlzLnNhdmVSb3cuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmRlbGV0ZSA9IHRoaXMuZGVsZXRlQ2xpY2suYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hY3Rpb25zLmhhbmRsZUNoYW5nZSA9IHRoaXMub25DaGFuZ2VDZWxsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYWN0aW9ucy5jYW5jZWwgPSB0aGlzLmVkaXRSb3dDYW5jZWwuYmluZCh0aGlzKTtcblxuICAgICAgICB0aGlzLnNhdmVOZXdSb3cgPSB0aGlzLnNhdmVOZXdSb3cuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5oYW5kbGVOZXdDaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlTmV3Q2VsbC5iaW5kKHRoaXMpO1xuICAgIH1cblxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgc25hcHNob3QpIHtcbiAgICAgICAgaWYoIXNoYWxsb3dFcXVhbCh0aGlzLnByb3BzLmRhdGEsIHByZXZQcm9wcy5kYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cm93czogdGhpcy5wcm9wcy5kYXRhfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNhdmVSb3coaWQsIGV2KSB7XG4gICAgICAgIGNvbnN0IHsgcm93cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgbGV0IHJvdyA9IHJvd3MuZmluZChyID0+IHIuaWQgPT0gaWQpO1xuICAgICAgICByb3cuaXNfZWRpdCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuZWRpdGluZ19yb3cgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgcm93czogcm93c1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm9uU2F2ZShyb3cpO1xuICAgIH1cblxuICAgIGRlbGV0ZUNsaWNrKGlkKSB7XG4gICAgICAgIGxldCBvbkRlbGV0ZSA9IHRoaXMucHJvcHMub3B0aW9ucy5hY3Rpb25zLmRlbGV0ZS5vbkNsaWNrO1xuICAgICAgICBsZXQgbm9BbGVydCA9IHRoaXMucHJvcHMub3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnbm9BbGVydCcpO1xuXG4gICAgICAgIGlmIChub0FsZXJ0KSB7XG4gICAgICAgICAgICBvbkRlbGV0ZShpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBULnRyYW5zbGF0ZShcImdlbmVyYWwuYXJlX3lvdV9zdXJlXCIpLFxuICAgICAgICAgICAgICAgIHRleHQ6IFQudHJhbnNsYXRlKFwiZ2VuZXJhbC5yZW1vdmVfd2FybmluZ1wiKSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcIndhcm5pbmdcIixcbiAgICAgICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogXCIjREQ2QjU1XCIsXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFQudHJhbnNsYXRlKFwiZ2VuZXJhbC55ZXNfZGVsZXRlXCIpXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBvbkRlbGV0ZShpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlZGl0Um93KGlkLCBldikge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCByb3cgPSByb3dzLmZpbmQociA9PiByLmlkID09IGlkKTtcblxuICAgICAgICAvL3NhdmUgZWRpdGluZyByb3cgZm9yIGNhbmNlbFxuICAgICAgICB0aGlzLmVkaXRpbmdfcm93ID0gey4uLnJvd307XG5cbiAgICAgICAgcm93LmlzX2VkaXQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgcm93czogcm93c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlZGl0Um93Q2FuY2VsKGlkLCBldikge1xuICAgICAgICBjb25zdCB7IHJvd3MgfSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIHJvd3MuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgIHIuaXNfZWRpdCA9IGZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgcm93SWR4ID0gcm93cy5maW5kSW5kZXgociA9PiByLmlkID09IGlkKTtcblxuICAgICAgICByb3dzW3Jvd0lkeF0gPSB0aGlzLmVkaXRpbmdfcm93O1xuXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgcm93czogcm93c1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZUNlbGwoZXYpIHtcbiAgICAgICAgY29uc3QgeyByb3dzIH0gPSB0aGlzLnN0YXRlO1xuICAgICAgICBsZXQgZmllbGQgPSBldi50YXJnZXQ7XG4gICAgICAgIGxldCByb3cgPSByb3dzLmZpbmQociA9PiByLmlkID09IGZpZWxkLmlkKTtcblxuICAgICAgICByb3dbZmllbGQubmFtZV0gPSBmaWVsZC52YWx1ZTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHJvd3M6IHJvd3NcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VOZXdDZWxsKGV2KSB7XG4gICAgICAgIGNvbnN0IHtuZXdfcm93fSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIGxldCBmaWVsZCA9IGV2LnRhcmdldDtcblxuICAgICAgICBuZXdfcm93W2ZpZWxkLm5hbWVdID0gZmllbGQudmFsdWU7XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBuZXdfcm93OiBuZXdfcm93XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNhdmVOZXdSb3coZXYpIHtcbiAgICAgICAgY29uc3Qge25ld19yb3d9ID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLm9uU2F2ZShuZXdfcm93KTtcblxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIG5ld19yb3c6IHt9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgICAgbGV0IHtvcHRpb25zLCBjb2x1bW5zIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICBsZXQgdGFibGVDbGFzcyA9IG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NsYXNzTmFtZScpID8gb3B0aW9ucy5jbGFzc05hbWUgOiAnJztcbiAgICAgICAgbGV0IHRleHRBcmVhID0gdGhpcy5wcm9wcy5oYXNPd25Qcm9wZXJ0eShcInRleHRBcmVhXCIpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPXtcInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtYm9yZGVyZWQgZWRpdGFibGVUYWJsZSBcIiArIHRhYmxlQ2xhc3N9PlxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wsaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sV2lkdGggPSAoY29sLndpZHRoKSA/IGNvbC53aWR0aCA6IGRlZmF1bHRzLmNvbFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVIZWFkaW5nIHdpZHRoPXtjb2xXaWR0aH0ga2V5PXsnaGVhZGluZ18nICsgaX0gPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudmFsdWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0VkaXRhYmxlVGFibGVIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aGlzLmFjdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVIZWFkaW5nIGtleT0nYWN0aW9uc19oZWFkaW5nJyA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZUhlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubGVuZ3RoID4gMCAmJiB0aGlzLnN0YXRlLnJvd3MubWFwKChyb3csaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocm93KSAmJiByb3cubGVuZ3RoICE9PSBjb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYERhdGEgYXQgcm93ICR7aX0gaXMgJHtyb3cubGVuZ3RofS4gSXQgc2hvdWxkIGJlICR7Y29sdW1ucy5sZW5ndGh9LmApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gPHRyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxFZGl0YWJsZVRhYmxlUm93IGV2ZW49e2klMiA9PT0gMH0ga2V5PXsncm93XycgKyByb3cuaWR9IGlkPXtyb3cuaWR9ID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjcmVhdGVSb3cocm93LCBjb2x1bW5zLCB0aGlzLmFjdGlvbnMsIHRleHRBcmVhKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9FZGl0YWJsZVRhYmxlUm93PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPEVkaXRhYmxlVGFibGVSb3cgZXZlbj17MH0gaWQ9J25ld19yb3cnIGtleT0nbmV3X3Jvdyc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2NyZWF0ZU5ld1Jvdyhjb2x1bW5zLCB0aGlzLnN0YXRlLm5ld19yb3csIHRoaXMuc2F2ZU5ld1JvdywgdGhpcy5oYW5kbGVOZXdDaGFuZ2UsIHRleHRBcmVhKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvRWRpdGFibGVUYWJsZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDxSZWFjdFRvb2x0aXAgZGVsYXlTaG93PXsxMH0gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cbn07XG4iXSwibmFtZXMiOlsiUmVhY3QiLCJFZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3RhdGUiLCJpc19lZGl0aW5nIiwib25EZWxldGUiLCJpZCIsImV2IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJhY3Rpb25zIiwiZGVsZXRlIiwib25TYXZlIiwic2V0U3RhdGUiLCJzYXZlIiwib25FZGl0IiwiZWRpdCIsIm9uQ2FuY2VsIiwiY2FuY2VsIiwicmVuZGVyIiwiYmluZCIsIkVkaXRhYmxlVGFibGVDZWxsIiwiaXNfZWRpdCIsInNob3VsZFVzZVRleHRBcmVhIiwiY2hpbGRyZW4iLCJuYW1lIiwiaGFuZGxlQ2hhbmdlIiwiRWRpdGFibGVUYWJsZUhlYWRpbmciLCJ3aWR0aCIsIkVkaXRhYmxlVGFibGVSb3ciLCJldmVuIiwibW9tZW50IiwiVVJJIiwiZmluZEVsZW1lbnRQb3MiLCJvYmoiLCJjdXJ0b3AiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRUb3AiLCJlcG9jaFRvTW9tZW50IiwiYXRpbWUiLCJlcG9jaFRvTW9tZW50VGltZVpvbmUiLCJ0aW1lX3pvbmUiLCJ0eiIsImZvcm1hdEVwb2NoIiwiZm9ybWF0Iiwib2JqZWN0VG9RdWVyeVN0cmluZyIsInN0ciIsImtleSIsImVuY29kZVVSSUNvbXBvbmVudCIsImdldEJhY2tVUkwiLCJ1cmwiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJxdWVyeSIsInNlYXJjaCIsImZyYWdtZW50IiwiYmFja1VybCIsImhhc093blByb3BlcnR5IiwidG9TbHVnIiwidGV4dCIsInRvTG93ZXJDYXNlIiwicmVwbGFjZSIsImdldEF1dGhDYWxsYmFjayIsIm9yaWdpbiIsImdldEN1cnJlbnRMb2NhdGlvbiIsInRvcCIsImdldE9yaWdpbiIsImdldEN1cnJlbnRQYXRoTmFtZSIsInBhdGhuYW1lIiwiZ2V0Q3VycmVudEhyZWYiLCJnZXRBbGxvd2VkVXNlckdyb3VwcyIsIkFMTE9XRURfVVNFUl9HUk9VUFMiLCJidWlsZEFQSUJhc2VVcmwiLCJyZWxhdGl2ZVVybCIsIkFQSV9CQVNFX1VSTCIsInB1dE9uTG9jYWxTdG9yYWdlIiwidmFsdWUiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiZ2V0RnJvbUxvY2FsU3RvcmFnZSIsInJlbW92ZUl0IiwidmFsIiwiZ2V0SXRlbSIsImNvbnNvbGUiLCJsb2ciLCJyZW1vdmVGcm9tTG9jYWxTdG9yYWdlIiwicmVtb3ZlSXRlbSIsImlzQ2xlYXJpbmdTZXNzaW9uU3RhdGUiLCJjbGVhcmluZ19zZXNzaW9uX3N0YXRlIiwic2V0U2Vzc2lvbkNsZWFyaW5nU3RhdGUiLCJnZXRDdXJyZW50VXNlckxhbmd1YWdlIiwibGFuZ3VhZ2UiLCJuYXZpZ2F0b3IiLCJsYW5ndWFnZXMiLCJ1c2VyTGFuZ3VhZ2UiLCJzY3JvbGxUb0Vycm9yIiwiZXJyb3JzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImZpcnN0RXJyb3IiLCJmaXJzdE5vZGUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwic2Nyb2xsVG8iLCJoYXNFcnJvcnMiLCJmaWVsZCIsInNoYWxsb3dFcXVhbCIsIm9iamVjdDEiLCJvYmplY3QyIiwia2V5czEiLCJrZXlzMiIsImFycmF5c0VxdWFsIiwiYTEiLCJhMiIsImV2ZXJ5IiwibyIsImlkeCIsImlzRW1wdHkiLCJiYXNlNjRVUkxFbmNvZGUiLCJ0b1N0cmluZyIsInJldHJ5UHJvbWlzZSIsImNiIiwibWF4TnVtYmVyT2ZSZXRyaWVzIiwiaSIsImdldFRpbWVTZXJ2aWNlVXJsIiwiVElNRUlOVEVSVkFMU0lOQ0UxOTcwX0FQSV9VUkwiLCJwcm9jZXNzIiwiZW52IiwiU3dhbCIsIlQiLCJSZWFjdFRvb2x0aXAiLCJkZWZhdWx0cyIsImNvbFdpZHRoIiwiY3JlYXRlUm93Iiwicm93IiwiY29sdW1ucyIsImFjdGlvbl9idXR0b25zIiwiY2VsbHMiLCJtYXAiLCJjb2wiLCJjb2x1bW5LZXkiLCJwdXNoIiwiY3JlYXRlTmV3Um93IiwibmV3X3JvdyIsImFkZE5ldyIsImNlbGxfdmFsdWUiLCJFZGl0YWJsZVRhYmxlIiwicm93cyIsImRhdGEiLCJvcHRpb25zIiwib25DbGljayIsImVkaXRSb3ciLCJzYXZlUm93IiwiZGVsZXRlQ2xpY2siLCJvbkNoYW5nZUNlbGwiLCJlZGl0Um93Q2FuY2VsIiwic2F2ZU5ld1JvdyIsImhhbmRsZU5ld0NoYW5nZSIsIm9uQ2hhbmdlTmV3Q2VsbCIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsInNuYXBzaG90IiwiZmluZCIsInIiLCJlZGl0aW5nX3JvdyIsIm5vQWxlcnQiLCJmaXJlIiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwic2hvd0NhbmNlbEJ1dHRvbiIsImNvbmZpcm1CdXR0b25Db2xvciIsImNvbmZpcm1CdXR0b25UZXh0IiwidGhlbiIsInJlc3VsdCIsImZvckVhY2giLCJyb3dJZHgiLCJmaW5kSW5kZXgiLCJ0YXJnZXQiLCJ0YWJsZUNsYXNzIiwiY2xhc3NOYW1lIiwidGV4dEFyZWEiLCJBcnJheSIsImlzQXJyYXkiLCJ3YXJuIl0sInNvdXJjZVJvb3QiOiIifQ==
|