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.
Files changed (95) hide show
  1. package/lib/components/ajaxloader.js +184 -1
  2. package/lib/components/attendance-tracker.js +1992 -1
  3. package/lib/components/bulk-actions-selector.js +194 -1
  4. package/lib/components/circle-button.js +223 -1
  5. package/lib/components/clock.js +678 -1
  6. package/lib/components/exclusive-wrapper.js +151 -1
  7. package/lib/components/extra-questions.js +1902 -1
  8. package/lib/components/form-validation.js +190 -1
  9. package/lib/components/forms/rsvp-form.js +940 -1
  10. package/lib/components/forms/simple-form.js +708 -1
  11. package/lib/components/free-text-search.js +2042 -1
  12. package/lib/components/google-map.js +576 -1
  13. package/lib/components/index.js +12840 -1
  14. package/lib/components/inputs/access-levels-input.js +2306 -1
  15. package/lib/components/inputs/action-dropdown.js +219 -1
  16. package/lib/components/inputs/checkbox-list.js +339 -1
  17. package/lib/components/inputs/company-input.js +2341 -1
  18. package/lib/components/inputs/country-dropdown.js +2399 -1
  19. package/lib/components/inputs/country-input.js +2302 -1
  20. package/lib/components/inputs/datetimepicker.js +314 -1
  21. package/lib/components/inputs/dropdown.js +259 -1
  22. package/lib/components/inputs/editor-input.js +270 -1
  23. package/lib/components/inputs/event-input.js +2280 -1
  24. package/lib/components/inputs/free-multi-text-input.js +252 -1
  25. package/lib/components/inputs/group-input.js +2275 -1
  26. package/lib/components/inputs/grouped-dropdown.js +244 -1
  27. package/lib/components/inputs/language-input.js +2307 -1
  28. package/lib/components/inputs/member-input.js +2302 -1
  29. package/lib/components/inputs/operator-input.js +328 -1
  30. package/lib/components/inputs/organization-input.js +2325 -1
  31. package/lib/components/inputs/promocode-input.js +2310 -1
  32. package/lib/components/inputs/radio-list.js +297 -1
  33. package/lib/components/inputs/registration-company-input.js +2470 -1
  34. package/lib/components/inputs/speaker-input.js +2336 -1
  35. package/lib/components/inputs/sponsor-input.js +2284 -1
  36. package/lib/components/inputs/stepped-select.js +197 -1
  37. package/lib/components/inputs/summit-days-select.js +162 -1
  38. package/lib/components/inputs/summit-input.js +2282 -1
  39. package/lib/components/inputs/summit-venues-select.js +172 -1
  40. package/lib/components/inputs/tag-input.js +2352 -1
  41. package/lib/components/inputs/text-input.js +202 -1
  42. package/lib/components/inputs/textarea-input.js +181 -1
  43. package/lib/components/inputs/ticket-types-input.js +2338 -1
  44. package/lib/components/inputs/upload-input-v2.js +834 -1
  45. package/lib/components/inputs/upload-input.js +391 -1
  46. package/lib/components/progressive-img.js +289 -1
  47. package/lib/components/raw-html.js +125 -1
  48. package/lib/components/schedule-builder-constants.js +81 -1
  49. package/lib/components/schedule-builder-view.js +1684 -1
  50. package/lib/components/sections/panel.js +156 -1
  51. package/lib/components/simple-link-list.js +790 -1
  52. package/lib/components/sponsored-project-input.js +2281 -1
  53. package/lib/components/summit-dropdown.js +214 -1
  54. package/lib/components/table-editable.js +895 -1
  55. package/lib/components/table-selectable.js +552 -1
  56. package/lib/components/table-sortable.js +657 -1
  57. package/lib/components/table.js +510 -1
  58. package/lib/components/video-stream.js +226 -1
  59. package/lib/css/components/bulk-actions-selector.css +16 -1
  60. package/lib/css/components/circle-button.css +24 -1
  61. package/lib/css/components/extra-questions.css +29 -1
  62. package/lib/css/components/form-validation.css +29 -1
  63. package/lib/css/components/free-text-search.css +29 -1
  64. package/lib/css/components/index.css +1354 -2
  65. package/lib/css/components/inputs/action-dropdown.css +46 -1
  66. package/lib/css/components/inputs/datetimepicker.css +208 -1
  67. package/lib/css/components/inputs/grouped-dropdown.css +25 -1
  68. package/lib/css/components/inputs/stepped-select.css +12 -1
  69. package/lib/css/components/inputs/upload-input-v2.css +106 -1
  70. package/lib/css/components/inputs/upload-input.css +43 -1
  71. package/lib/css/components/progressive-img.css +16 -1
  72. package/lib/css/components/schedule-builder-view.css +230 -1
  73. package/lib/css/components/simple-link-list.css +189 -1
  74. package/lib/css/components/summit-dropdown.css +35 -1
  75. package/lib/css/components/table-editable.css +145 -1
  76. package/lib/css/components/table-selectable.css +147 -1
  77. package/lib/css/components/table-sortable.css +150 -1
  78. package/lib/css/components/table.css +147 -1
  79. package/lib/i18n.js +449 -1
  80. package/lib/models/index.js +238 -1
  81. package/lib/models/summit-event.js +210 -1
  82. package/lib/security/abstract-auth-callback-route.js +2114 -1
  83. package/lib/security/actions.js +1818 -1
  84. package/lib/security/constants.js +71 -1
  85. package/lib/security/methods.js +1818 -1
  86. package/lib/security/reducers.js +1961 -1
  87. package/lib/security/session-checker.js +2179 -1
  88. package/lib/utils/actions.js +1818 -1
  89. package/lib/utils/fragment-parser.js +207 -1
  90. package/lib/utils/methods.js +369 -1
  91. package/lib/utils/query-actions.js +2154 -1
  92. package/lib/utils/questions-set.js +609 -1
  93. package/lib/utils/reducers.js +1874 -1
  94. package/lib/utils/use-fit-text.js +178 -1
  95. package/package.json +1 -1
@@ -1 +1,895 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("openstack-uicore-foundation",[],t):"object"==typeof exports?exports["openstack-uicore-foundation"]=t():e["openstack-uicore-foundation"]=t()}(this,(()=>(()=>{"use strict";var e={6793:(e,t,n)=>{n.d(t,{shallowEqual:()=>a});n(8362),n(6530);const a=(e,t)=>{const n=Object.keys(e),a=Object.keys(t);if(n.length!==a.length)return!1;for(let a of n)if(e[a]!==t[a])return!1;return!0}},8779:e=>{e.exports=require("@babel/runtime/helpers/defineProperty")},4656:e=>{e.exports=require("i18n-react/dist/i18n-react")},8362:e=>{e.exports=require("moment-timezone")},6689:e=>{e.exports=require("react")},2076:e=>{e.exports=require("react-tooltip")},271:e=>{e.exports=require("sweetalert2")},6530:e=>{e.exports=require("urijs")}},t={};function n(a){var s=t[a];if(void 0!==s)return s.exports;var r=t[a]={exports:{}};return e[a](r,r.exports,n),r.exports}(()=>{n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t}})(),(()=>{n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})}})(),(()=>{n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t)})(),(()=>{n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}})();var a={};return(()=>{n.r(a),n.d(a,{default:()=>E});var e=n(8779),t=n.n(e),s=n(6689),r=n.n(s);class i extends r().Component{constructor(e){super(e)}render(){return r().createElement("th",{width:this.props.width},this.props.children)}}const o=i,l=e=>e.is_edit?r().createElement("td",null,!e.shouldUseTextArea&&r().createElement("input",{type:"text",className:"form-control",defaultValue:e.children,name:e.name,id:e.id,onChange:e.handleChange}),e.shouldUseTextArea&&r().createElement("textarea",{className:"form-control",defaultValue:e.children,name:e.name,id:e.id,onChange:e.handleChange})):r().createElement("td",null,e.children);class c extends r().Component{constructor(e){super(e),this.state={is_editing:!1}}onDelete(e,t){t.preventDefault(),t.stopPropagation(),this.props.actions.delete(e)}onSave(e,t){t.preventDefault(),t.stopPropagation(),this.setState({is_editing:!1}),this.props.actions.save(e)}onEdit(e,t){t.preventDefault(),t.stopPropagation(),this.setState({is_editing:!0}),this.props.actions.edit(e)}onCancel(e,t){t.preventDefault(),t.stopPropagation(),this.setState({is_editing:!1}),this.props.actions.cancel(e)}render(){let{actions:e,id:t}=this.props;return this.state.is_editing?r().createElement("td",{className:"actions"},r().createElement("a",{href:"",onClick:this.onSave.bind(this,t),"data-tip":"save"},r().createElement("i",{className:"fa fa-floppy-o"})),r().createElement("a",{href:"",onClick:this.onCancel.bind(this,t),"data-tip":"cancel"},r().createElement("i",{className:"fa fa-times"}))):r().createElement("td",{className:"actions"},"edit"in e&&r().createElement("a",{href:"",onClick:this.onEdit.bind(this,t),"data-tip":"edit"},r().createElement("i",{className:"fa fa-pencil-square-o"})),"delete"in e&&r().createElement("a",{href:"",onClick:this.onDelete.bind(this,t),"data-tip":"delete"},r().createElement("i",{className:"fa fa-trash-o delete-icon"})))}}class d extends r().Component{render(){const{children:e,even:t,id:n}=this.props;return r().createElement("tr",{id:n,role:"row",className:t?"even":"odd"},e)}}var h=n(271),p=n.n(h),u=n(4656),m=n.n(u),w=n(2076),f=n.n(w),g=n(6793);function y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function b(e){for(var n=1;n<arguments.length;n++){var a=null!=arguments[n]?arguments[n]:{};n%2?y(Object(a),!0).forEach((function(n){t()(e,n,a[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):y(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}const v="";class E extends r().Component{constructor(e){super(e),this.state={rows:e.data,new_row:{}},this.onSave=e.options.actions.save.onClick,this.actions=b({},e.options.actions),this.actions.edit=this.editRow.bind(this),this.actions.save=this.saveRow.bind(this),this.actions.delete=this.deleteClick.bind(this),this.actions.handleChange=this.onChangeCell.bind(this),this.actions.cancel=this.editRowCancel.bind(this),this.saveNewRow=this.saveNewRow.bind(this),this.handleNewChange=this.onChangeNewCell.bind(this)}componentDidUpdate(e,t,n){(0,g.shallowEqual)(this.props.data,e.data)||this.setState({rows:this.props.data})}saveRow(e,t){const{rows:n}=this.state;let a=n.find((t=>t.id==e));a.is_edit=!1,this.editing_row=null,this.setState({rows:n}),this.onSave(a)}deleteClick(e){let t=this.props.options.actions.delete.onClick;this.props.options.hasOwnProperty("noAlert")?t(e):p().fire({title:m().translate("general.are_you_sure"),text:m().translate("general.remove_warning"),type:"warning",showCancelButton:!0,confirmButtonColor:"#DD6B55",confirmButtonText:m().translate("general.yes_delete")}).then((function(n){n.value&&t(e)}))}editRow(e,t){const{rows:n}=this.state;let a=n.find((t=>t.id==e));this.editing_row=b({},a),a.is_edit=!0,this.setState({rows:n})}editRowCancel(e,t){const{rows:n}=this.state;n.forEach((e=>{e.is_edit=!1}));let a=n.findIndex((t=>t.id==e));n[a]=this.editing_row,this.setState({rows:n})}onChangeCell(e){const{rows:t}=this.state;let n=e.target;t.find((e=>e.id==n.id))[n.name]=n.value,this.setState({rows:t})}onChangeNewCell(e){const{new_row:t}=this.state;let n=e.target;t[n.name]=n.value,this.setState({new_row:t})}saveNewRow(e){const{new_row:t}=this.state;e.preventDefault(),this.onSave(t),this.setState({new_row:{}})}render(){let{options:e,columns:t}=this.props,n=e.hasOwnProperty("className")?e.className:"",a=this.props.hasOwnProperty("textArea");return r().createElement("div",null,r().createElement("table",{className:"table table-striped table-bordered editableTable "+n},r().createElement("thead",null,r().createElement("tr",null,t.map(((e,t)=>{let n=e.width?e.width:v;return r().createElement(o,{width:n,key:"heading_"+t},e.value)})),this.actions&&r().createElement(o,{key:"actions_heading"},"Actions"))),r().createElement("tbody",null,t.length>0&&this.state.rows.map(((e,n)=>Array.isArray(e)&&e.length!==t.length?(console.warn(`Data at row ${n} is ${e.length}. It should be ${t.length}.`),r().createElement("tr",null)):r().createElement(d,{even:n%2==0,key:"row_"+e.id,id:e.id},((e,t,n,a)=>{var s=t.map(((t,s)=>r().createElement(l,{shouldUseTextArea:a,key:e.id+"_field"+s,name:t.columnKey,id:e.id,is_edit:e.is_edit,handleChange:n.handleChange},e[t.columnKey])));return n&&s.push(r().createElement(c,{key:"actions_"+e.id,id:e.id,actions:n})),s})(e,t,this.actions,a)))),r().createElement(d,{even:0,id:"new_row",key:"new_row"},((e,t,n,a,s)=>{var i=e.map(((e,n)=>{let i=void 0!==t[e.columnKey]?t[e.columnKey]:"";return r().createElement("td",{key:"new_row_"+n},s&&r().createElement("textarea",{className:"form-control",id:"new_"+e.columnKey,name:e.columnKey,onChange:a,value:i}),!s&&r().createElement("input",{className:"form-control",id:"new_"+e.columnKey,name:e.columnKey,onChange:a,value:i}))}));return i.push(r().createElement("td",{key:"add_new"},r().createElement("button",{className:"btn btn-default",onClick:n}," Add "))),i})(t,this.state.new_row,this.saveNewRow,this.handleNewChange,a)))),r().createElement(f(),{delayShow:10}))}}})(),a})()));
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZBO0FBRWUsTUFBTUMsd0JBQU4sU0FBdUNELHdEQUF2QyxDQUF1RDtFQUVsRUcsV0FBVyxDQUFDQyxLQUFELEVBQVE7SUFDZixNQUFNQSxLQUFOO0lBRUEsS0FBS0MsS0FBTCxHQUFhO01BQ1RDLFVBQVUsRUFBRTtJQURILENBQWI7RUFJSDs7RUFFREMsUUFBUSxDQUFDQyxFQUFELEVBQUtDLEVBQUwsRUFBUztJQUNiQSxFQUFFLENBQUNDLGNBQUg7SUFDQUQsRUFBRSxDQUFDRSxlQUFIO0lBRUEsS0FBS1AsS0FBTCxDQUFXUSxPQUFYLENBQW1CQyxNQUFuQixDQUEwQkwsRUFBMUI7RUFDSDs7RUFFRE0sTUFBTSxDQUFDTixFQUFELEVBQUtDLEVBQUwsRUFBUztJQUNYQSxFQUFFLENBQUNDLGNBQUg7SUFDQUQsRUFBRSxDQUFDRSxlQUFIO0lBRUEsS0FBS0ksUUFBTCxDQUFjO01BQ1ZULFVBQVUsRUFBRTtJQURGLENBQWQ7SUFJQSxLQUFLRixLQUFMLENBQVdRLE9BQVgsQ0FBbUJJLElBQW5CLENBQXdCUixFQUF4QjtFQUNIOztFQUVEUyxNQUFNLENBQUNULEVBQUQsRUFBS0MsRUFBTCxFQUFTO0lBQ1hBLEVBQUUsQ0FBQ0MsY0FBSDtJQUNBRCxFQUFFLENBQUNFLGVBQUg7SUFFQSxLQUFLSSxRQUFMLENBQWM7TUFDVlQsVUFBVSxFQUFFO0lBREYsQ0FBZDtJQUlBLEtBQUtGLEtBQUwsQ0FBV1EsT0FBWCxDQUFtQk0sSUFBbkIsQ0FBd0JWLEVBQXhCO0VBQ0g7O0VBRURXLFFBQVEsQ0FBQ1gsRUFBRCxFQUFLQyxFQUFMLEVBQVM7SUFDYkEsRUFBRSxDQUFDQyxjQUFIO0lBQ0FELEVBQUUsQ0FBQ0UsZUFBSDtJQUVBLEtBQUtJLFFBQUwsQ0FBYztNQUNWVCxVQUFVLEVBQUU7SUFERixDQUFkO0lBSUEsS0FBS0YsS0FBTCxDQUFXUSxPQUFYLENBQW1CUSxNQUFuQixDQUEwQlosRUFBMUI7RUFDSDs7RUFFRGEsTUFBTSxHQUFHO0lBQ0wsSUFBSTtNQUFDVCxPQUFEO01BQVVKO0lBQVYsSUFBZ0IsS0FBS0osS0FBekI7O0lBRUEsSUFBSSxLQUFLQyxLQUFMLENBQVdDLFVBQWYsRUFBMkI7TUFDdkIsb0JBQ0k7UUFBSSxTQUFTLEVBQUM7TUFBZCxnQkFDSTtRQUFHLElBQUksRUFBQyxFQUFSO1FBQVcsT0FBTyxFQUFFLEtBQUtRLE1BQUwsQ0FBWVEsSUFBWixDQUFpQixJQUFqQixFQUFzQmQsRUFBdEIsQ0FBcEI7UUFBK0MsWUFBUztNQUF4RCxnQkFDSTtRQUFHLFNBQVMsRUFBQztNQUFiLEVBREosQ0FESixlQUlJO1FBQUcsSUFBSSxFQUFDLEVBQVI7UUFBVyxPQUFPLEVBQUUsS0FBS1csUUFBTCxDQUFjRyxJQUFkLENBQW1CLElBQW5CLEVBQXdCZCxFQUF4QixDQUFwQjtRQUFpRCxZQUFTO01BQTFELGdCQUNJO1FBQUcsU0FBUyxFQUFDO01BQWIsRUFESixDQUpKLENBREo7SUFVSCxDQVhELE1BV087TUFDSCxvQkFDSTtRQUFJLFNBQVMsRUFBQztNQUFkLEdBQ0ssVUFBVUksT0FBVixpQkFDRztRQUFHLElBQUksRUFBQyxFQUFSO1FBQVcsT0FBTyxFQUFFLEtBQUtLLE1BQUwsQ0FBWUssSUFBWixDQUFpQixJQUFqQixFQUFzQmQsRUFBdEIsQ0FBcEI7UUFBK0MsWUFBUztNQUF4RCxnQkFDSTtRQUFHLFNBQVMsRUFBQztNQUFiLEVBREosQ0FGUixFQU1LLFlBQVlJLE9BQVosaUJBQ0c7UUFBRyxJQUFJLEVBQUMsRUFBUjtRQUFXLE9BQU8sRUFBRSxLQUFLTCxRQUFMLENBQWNlLElBQWQsQ0FBbUIsSUFBbkIsRUFBd0JkLEVBQXhCLENBQXBCO1FBQWlELFlBQVM7TUFBMUQsZ0JBQ0k7UUFBRyxTQUFTLEVBQUM7TUFBYixFQURKLENBUFIsQ0FESjtJQWNIO0VBQ0o7O0FBakZpRTtBQWtGckU7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwRkQ7O0FBRUEsTUFBTWUsaUJBQWlCLEdBQUluQixLQUFELElBQVc7RUFFakMsSUFBSUEsS0FBSyxDQUFDb0IsT0FBVixFQUFtQjtJQUNmLG9CQUNJLHVFQUNLLENBQUNwQixLQUFLLENBQUNxQixpQkFBUCxpQkFDRztNQUFPLElBQUksRUFBQyxNQUFaO01BQW1CLFNBQVMsRUFBQyxjQUE3QjtNQUE0QyxZQUFZLEVBQUVyQixLQUFLLENBQUNzQixRQUFoRTtNQUEwRSxJQUFJLEVBQUV0QixLQUFLLENBQUN1QixJQUF0RjtNQUE0RixFQUFFLEVBQUV2QixLQUFLLENBQUNJLEVBQXRHO01BQTBHLFFBQVEsRUFBRUosS0FBSyxDQUFDd0I7SUFBMUgsRUFGUixFQUlLeEIsS0FBSyxDQUFDcUIsaUJBQU4saUJBQ0c7TUFBVSxTQUFTLEVBQUMsY0FBcEI7TUFBbUMsWUFBWSxFQUFFckIsS0FBSyxDQUFDc0IsUUFBdkQ7TUFBaUUsSUFBSSxFQUFFdEIsS0FBSyxDQUFDdUIsSUFBN0U7TUFBbUYsRUFBRSxFQUFFdkIsS0FBSyxDQUFDSSxFQUE3RjtNQUFpRyxRQUFRLEVBQUVKLEtBQUssQ0FBQ3dCO0lBQWpILEVBTFIsQ0FESjtFQVVILENBWEQsTUFXTztJQUNILG9CQUNJLHVFQUFLeEIsS0FBSyxDQUFDc0IsUUFBWCxDQURKO0VBR0g7QUFFSixDQW5CRDs7QUFxQkEsaUVBQWVILGlCQUFmOzs7Ozs7Ozs7Ozs7Ozs7O0FDdkJBOztBQUVBLE1BQU1NLG9CQUFOLFNBQW1DN0Isd0RBQW5DLENBQW1EO0VBRS9DRyxXQUFXLENBQUVDLEtBQUYsRUFBUztJQUNoQixNQUFNQSxLQUFOO0VBQ0g7O0VBRURpQixNQUFNLEdBQUk7SUFDTixvQkFDSTtNQUFJLEtBQUssRUFBRSxLQUFLakIsS0FBTCxDQUFXMEI7SUFBdEIsR0FDUyxLQUFLMUIsS0FBTCxDQUFXc0IsUUFEcEIsQ0FESjtFQUtIOztBQVo4Qzs7QUFnQm5ELGlFQUFlRyxvQkFBZjs7Ozs7Ozs7Ozs7Ozs7OztBQ2xCQTtBQUVlLE1BQU1FLGdCQUFOLFNBQStCL0Isd0RBQS9CLENBQStDO0VBRTFEcUIsTUFBTSxHQUFHO0lBQ0wsTUFBTTtNQUFFSyxRQUFGO01BQVlNLElBQVo7TUFBa0J4QjtJQUFsQixJQUF5QixLQUFLSixLQUFwQztJQUVBLG9CQUNJO01BQUksRUFBRSxFQUFFSSxFQUFSO01BQVksSUFBSSxFQUFDLEtBQWpCO01BQXVCLFNBQVMsRUFBRXdCLElBQUksR0FBRyxNQUFILEdBQVk7SUFBbEQsR0FDS04sUUFETCxDQURKO0VBS0g7O0FBVnlEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNGOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVPLE1BQU1TLGNBQWMsR0FBSUMsR0FBRCxJQUFTO0VBQ25DLElBQUlDLE1BQU0sR0FBRyxDQUFDLEVBQWQ7O0VBQ0EsSUFBSUQsR0FBRyxDQUFDRSxZQUFSLEVBQXNCO0lBQ2xCLEdBQUc7TUFDQ0QsTUFBTSxJQUFJRCxHQUFHLENBQUNHLFNBQWQ7SUFDSCxDQUZELFFBRVNILEdBQUcsR0FBR0EsR0FBRyxDQUFDRSxZQUZuQjs7SUFHQSxPQUFPLENBQUNELE1BQUQsQ0FBUDtFQUNIO0FBQ0osQ0FSTTtBQVVBLE1BQU1HLGFBQWEsR0FBSUMsS0FBRCxJQUFXO0VBQ3BDLElBQUcsQ0FBQ0EsS0FBSixFQUFXLE9BQU9BLEtBQVA7RUFDWEEsS0FBSyxHQUFHQSxLQUFLLEdBQUcsSUFBaEI7RUFDQSxPQUFPUixzREFBTSxDQUFDUSxLQUFELENBQWI7QUFDSCxDQUpNO0FBTUEsTUFBTUMscUJBQXFCLEdBQUcsQ0FBQ0QsS0FBRCxFQUFRRSxTQUFSLEtBQXNCO0VBQ3ZELElBQUcsQ0FBQ0YsS0FBSixFQUFXLE9BQU9BLEtBQVA7RUFDWEEsS0FBSyxHQUFHQSxLQUFLLEdBQUcsSUFBaEI7RUFDQSxPQUFPUixzREFBTSxDQUFDUSxLQUFELENBQU4sQ0FBY0csRUFBZCxDQUFpQkQsU0FBakIsQ0FBUDtBQUNILENBSk07QUFNQSxNQUFNRSxXQUFXLEdBQUcsQ0FBQ0osS0FBRCxFQUFRSyxNQUFNLEdBQUcsaUJBQWpCLEtBQXVDO0VBQzlELElBQUcsQ0FBQ0wsS0FBSixFQUFXLE9BQU9BLEtBQVA7RUFDWCxPQUFPRCxhQUFhLENBQUNDLEtBQUQsQ0FBYixDQUFxQkssTUFBckIsQ0FBNEJBLE1BQTVCLENBQVA7QUFDSCxDQUhNO0FBS0EsTUFBTUMsbUJBQW1CLEdBQUlYLEdBQUQsSUFBUztFQUN4QyxJQUFJWSxHQUFHLEdBQUcsRUFBVjs7RUFDQSxLQUFLLElBQUlDLEdBQVQsSUFBZ0JiLEdBQWhCLEVBQXFCO0lBQ2pCLElBQUlZLEdBQUcsSUFBSSxFQUFYLEVBQWU7TUFDWEEsR0FBRyxJQUFJLEdBQVA7SUFDSDs7SUFDREEsR0FBRyxJQUFJQyxHQUFHLEdBQUcsR0FBTixHQUFZQyxrQkFBa0IsQ0FBQ2QsR0FBRyxDQUFDYSxHQUFELENBQUosQ0FBckM7RUFDSDs7RUFFRCxPQUFPRCxHQUFQO0FBQ0gsQ0FWTTtBQVlBLE1BQU1HLFVBQVUsR0FBRyxNQUFNO0VBQzVCLElBQUlDLEdBQUcsR0FBUWxCLDRDQUFHLENBQUNtQixNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLElBQWpCLENBQWxCO0VBQ0EsSUFBSUMsS0FBSyxHQUFNSixHQUFHLENBQUNLLE1BQUosQ0FBVyxJQUFYLENBQWY7RUFDQSxJQUFJQyxRQUFRLEdBQUdOLEdBQUcsQ0FBQ00sUUFBSixFQUFmO0VBQ0EsSUFBSUMsT0FBTyxHQUFJSCxLQUFLLENBQUNJLGNBQU4sQ0FBcUIsU0FBckIsSUFBa0NKLEtBQUssQ0FBQyxTQUFELENBQXZDLEdBQXFELElBQXBFOztFQUNBLElBQUdFLFFBQVEsSUFBSSxJQUFaLElBQW9CQSxRQUFRLElBQUksRUFBbkMsRUFBc0M7SUFDbENDLE9BQU8sSUFBSyxJQUFHRCxRQUFTLEVBQXhCO0VBQ0g7O0VBQ0QsT0FBT0MsT0FBUDtBQUNILENBVE07QUFXQSxNQUFNRSxNQUFNLEdBQUlDLElBQUQsSUFBUztFQUMzQkEsSUFBSSxHQUFHQSxJQUFJLENBQUNDLFdBQUwsRUFBUDtFQUNBLE9BQU9ELElBQUksQ0FBQ0UsT0FBTCxDQUFhLGdCQUFiLEVBQThCLEdBQTlCLENBQVA7QUFDSCxDQUhNO0FBS0EsTUFBTUMsZUFBZSxHQUFHLE1BQU07RUFDakMsSUFBRyxPQUFPWixNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLE9BQVEsR0FBRUEsTUFBTSxDQUFDQyxRQUFQLENBQWdCWSxNQUFPLGdCQUFqQztFQUNIOztFQUNELE9BQU8sSUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxrQkFBa0IsR0FBRyxNQUFNO0VBQ3BDLElBQUliLFFBQVEsR0FBRyxFQUFmOztFQUNBLElBQUcsT0FBT0QsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QkMsUUFBUSxHQUFHRCxNQUFNLENBQUNDLFFBQWxCLENBRDhCLENBRTlCOztJQUNBLElBQUlELE1BQU0sQ0FBQ2UsR0FBWCxFQUNJZCxRQUFRLEdBQUdELE1BQU0sQ0FBQ2UsR0FBUCxDQUFXZCxRQUF0QjtFQUNQOztFQUNELE9BQU9BLFFBQVA7QUFDSCxDQVRNO0FBV0EsTUFBTWUsU0FBUyxHQUFHLE1BQU07RUFDM0IsSUFBRyxPQUFPaEIsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QixPQUFPQSxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JZLE1BQXZCO0VBQ0g7O0VBQ0QsT0FBTyxJQUFQO0FBQ0gsQ0FMTTtBQU9BLE1BQU1JLGtCQUFrQixHQUFHLE1BQU07RUFDcEMsSUFBRyxPQUFPakIsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUMvQixPQUFPQSxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JpQixRQUF2QjtFQUNGOztFQUNELE9BQU8sSUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxjQUFjLEdBQUcsTUFBTTtFQUNoQyxJQUFHLE9BQU9uQixNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLE9BQU9BLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsSUFBdkI7RUFDSDs7RUFDRCxPQUFPLElBQVA7QUFDSCxDQUxNO0FBT0EsTUFBTWtCLG9CQUFvQixHQUFHLE1BQU07RUFDdEMsSUFBRyxPQUFPcEIsTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QixPQUFPQSxNQUFNLENBQUNxQixtQkFBUCxJQUE4QixFQUFyQztFQUNIOztFQUNELE9BQU8sSUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxlQUFlLEdBQUlDLFdBQUQsSUFBaUI7RUFDNUMsSUFBRyxPQUFPdkIsTUFBUCxLQUFrQixXQUFyQixFQUFpQztJQUM3QixPQUFRLEdBQUVBLE1BQU0sQ0FBQ3dCLFlBQWEsR0FBRUQsV0FBWSxFQUE1QztFQUNIOztFQUNELE9BQU8sSUFBSyxFQUFaO0FBQ0gsQ0FMTTtBQU9BLE1BQU1FLGlCQUFpQixHQUFHLENBQUM3QixHQUFELEVBQU04QixLQUFOLEtBQWdCO0VBQzdDLElBQUcsT0FBTzFCLE1BQVAsS0FBa0IsV0FBckIsRUFBa0M7SUFDOUJBLE1BQU0sQ0FBQzJCLFlBQVAsQ0FBb0JDLE9BQXBCLENBQTRCaEMsR0FBNUIsRUFBaUM4QixLQUFqQztFQUNIO0FBQ0osQ0FKTTtBQU1BLE1BQU1HLG1CQUFtQixHQUFHLENBQUNqQyxHQUFELEVBQU1rQyxRQUFOLEtBQW1CO0VBQ2xELElBQUcsT0FBTzlCLE1BQVAsS0FBa0IsV0FBckIsRUFBa0M7SUFDOUIsSUFBSStCLEdBQUcsR0FBRy9CLE1BQU0sQ0FBQzJCLFlBQVAsQ0FBb0JLLE9BQXBCLENBQTRCcEMsR0FBNUIsQ0FBVjs7SUFDQSxJQUFHa0MsUUFBSCxFQUFZO01BQ1JHLE9BQU8sQ0FBQ0MsR0FBUixDQUFhLG9DQUFtQ3RDLEdBQUksRUFBcEQ7TUFDQXVDLHNCQUFzQixDQUFDdkMsR0FBRCxDQUF0QjtJQUNIOztJQUNELE9BQU9tQyxHQUFQO0VBQ0g7O0VBQ0QsT0FBTyxJQUFQO0FBQ0gsQ0FWTTtBQVlBLE1BQU1JLHNCQUFzQixHQUFJdkMsR0FBRCxJQUFTO0VBQzNDLElBQUcsT0FBT0ksTUFBUCxLQUFrQixXQUFyQixFQUFrQztJQUM5QkEsTUFBTSxDQUFDMkIsWUFBUCxDQUFvQlMsVUFBcEIsQ0FBK0J4QyxHQUEvQjtFQUNIO0FBQ0osQ0FKTTtBQU1BLE1BQU15QyxzQkFBc0IsR0FBRyxNQUFNO0VBQ3hDLElBQUcsT0FBT3JDLE1BQVAsS0FBa0IsV0FBckIsRUFBa0M7SUFDOUIsT0FBT0EsTUFBTSxDQUFDc0Msc0JBQWQ7RUFDSDs7RUFDRCxPQUFPLEtBQVA7QUFDSCxDQUxNO0FBT0EsTUFBTUMsdUJBQXVCLEdBQUlSLEdBQUQsSUFBUztFQUM1QyxJQUFHLE9BQU8vQixNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCQSxNQUFNLENBQUNzQyxzQkFBUCxHQUFnQ1AsR0FBaEM7RUFDSDtBQUNKLENBSk07QUFNQSxNQUFNUyxzQkFBc0IsR0FBRyxNQUFNO0VBQ3hDLElBQUlDLFFBQVEsR0FBRyxJQUFmOztFQUNBLElBQUcsT0FBT0MsU0FBUCxLQUFxQixXQUF4QixFQUFxQztJQUNqQ0QsUUFBUSxHQUFJQyxTQUFTLENBQUNDLFNBQVYsSUFBdUJELFNBQVMsQ0FBQ0MsU0FBVixDQUFvQixDQUFwQixDQUF4QixJQUFtREQsU0FBUyxDQUFDRCxRQUE3RCxJQUF5RUMsU0FBUyxDQUFDRSxZQUE5RjtFQUNIOztFQUNELE9BQU9ILFFBQVA7QUFDSCxDQU5NO0FBUUEsTUFBTUksYUFBYSxHQUFJQyxNQUFELElBQVk7RUFDckMsSUFBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVlGLE1BQVosRUFBb0JHLE1BQXBCLEdBQTZCLENBQWhDLEVBQW1DO0lBQy9CLE1BQU1DLFVBQVUsR0FBR0gsTUFBTSxDQUFDQyxJQUFQLENBQVlGLE1BQVosRUFBb0IsQ0FBcEIsQ0FBbkI7SUFDQSxNQUFNSyxTQUFTLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QkgsVUFBeEIsQ0FBbEI7SUFDQSxJQUFJQyxTQUFKLEVBQWVuRCxNQUFNLENBQUNzRCxRQUFQLENBQWdCLENBQWhCLEVBQW1CeEUsY0FBYyxDQUFDcUUsU0FBRCxDQUFqQztFQUNsQjtBQUNKLENBTk07QUFRQSxNQUFNSSxTQUFTLEdBQUcsQ0FBQ0MsS0FBRCxFQUFRVixNQUFSLEtBQW1CO0VBQ3hDLElBQUdVLEtBQUssSUFBSVYsTUFBWixFQUFvQjtJQUNoQixPQUFPQSxNQUFNLENBQUNVLEtBQUQsQ0FBYjtFQUNIOztFQUNELE9BQU8sRUFBUDtBQUNILENBTE07QUFPQSxNQUFNQyxZQUFZLEdBQUcsQ0FBQ0MsT0FBRCxFQUFVQyxPQUFWLEtBQXNCO0VBQzlDLE1BQU1DLEtBQUssR0FBR2IsTUFBTSxDQUFDQyxJQUFQLENBQVlVLE9BQVosQ0FBZDtFQUNBLE1BQU1HLEtBQUssR0FBR2QsTUFBTSxDQUFDQyxJQUFQLENBQVlXLE9BQVosQ0FBZDs7RUFFQSxJQUFJQyxLQUFLLENBQUNYLE1BQU4sS0FBaUJZLEtBQUssQ0FBQ1osTUFBM0IsRUFBbUM7SUFDL0IsT0FBTyxLQUFQO0VBQ0g7O0VBRUQsS0FBSyxJQUFJckQsR0FBVCxJQUFnQmdFLEtBQWhCLEVBQXVCO0lBQ25CLElBQUlGLE9BQU8sQ0FBQzlELEdBQUQsQ0FBUCxLQUFpQitELE9BQU8sQ0FBQy9ELEdBQUQsQ0FBNUIsRUFBbUM7TUFDL0IsT0FBTyxLQUFQO0lBQ0g7RUFDSjs7RUFFRCxPQUFPLElBQVA7QUFDSCxDQWZNO0FBaUJBLE1BQU1rRSxXQUFXLEdBQUcsQ0FBQ0MsRUFBRCxFQUFLQyxFQUFMLEtBQ3ZCRCxFQUFFLENBQUNkLE1BQUgsS0FBY2UsRUFBRSxDQUFDZixNQUFqQixJQUEyQmMsRUFBRSxDQUFDRSxLQUFILENBQVMsQ0FBQ0MsQ0FBRCxFQUFJQyxHQUFKLEtBQVlWLFlBQVksQ0FBQ1MsQ0FBRCxFQUFJRixFQUFFLENBQUNHLEdBQUQsQ0FBTixDQUFqQyxDQUR4QjtBQUdBLE1BQU1DLE9BQU8sR0FBSXJGLEdBQUQsSUFBUztFQUM1QixPQUFPZ0UsTUFBTSxDQUFDQyxJQUFQLENBQVlqRSxHQUFaLEVBQWlCa0UsTUFBakIsS0FBNEIsQ0FBbkM7QUFDSCxDQUZNO0FBS0EsTUFBTW9CLGVBQWUsR0FBSTFFLEdBQUQsSUFBUztFQUNwQyxPQUFPQSxHQUFHLENBQ0wyRSxRQURFLENBQ08sUUFEUCxFQUVGM0QsT0FGRSxDQUVNLEtBRk4sRUFFYSxHQUZiLEVBR0ZBLE9BSEUsQ0FHTSxLQUhOLEVBR2EsR0FIYixFQUlGQSxPQUpFLENBSU0sSUFKTixFQUlZLEVBSlosQ0FBUDtBQUtILENBTk07QUFRQSxNQUFNNEQsWUFBWSxHQUFHLE9BQ3hCQyxFQUR3QixFQUV4QkMsa0JBQWtCLEdBQUcsQ0FGRyxLQUd2QjtFQUNELEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBR0Qsa0JBQXBCLEVBQXdDQyxDQUFDLEVBQXpDLEVBQTZDO0lBQ3pDLElBQUksTUFBTUYsRUFBRSxFQUFaLEVBQWdCO01BQ1osT0FBTyxJQUFQO0lBQ0g7RUFDSjs7RUFFRCxPQUFPLEtBQVA7QUFDSCxDQVhNO0FBYUEsTUFBTUcsaUJBQWlCLEdBQUcsTUFBTTtFQUNuQyxJQUFHLE9BQU8zRSxNQUFQLEtBQWtCLFdBQXJCLEVBQWtDO0lBQzlCLE9BQU9BLE1BQU0sQ0FBQzRFLDZCQUFQLElBQXdDQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsNkJBQTNEO0VBQ0g7O0VBQ0QsT0FBTyxJQUFQO0FBQ0gsQ0FMTTs7Ozs7Ozs7Ozs7QUN0T1A7Ozs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7O0FDQUE7Ozs7OztVQ0FBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7O1dDdEJBO1dBQ0E7V0FDQTtXQUNBO1dBQ0E7V0FDQSxpQ0FBaUMsV0FBVztXQUM1QztXQUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7Ozs7O1dDQUE7V0FDQTtXQUNBO1dBQ0EsdURBQXVELGlCQUFpQjtXQUN4RTtXQUNBLGdEQUFnRCxhQUFhO1dBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1NLFFBQVEsR0FBRztFQUNiQyxRQUFRLEVBQUU7QUFERyxDQUFqQjs7QUFJQSxNQUFNQyxTQUFTLEdBQUcsQ0FBQ0MsR0FBRCxFQUFNQyxPQUFOLEVBQWUvSCxPQUFmLEVBQXdCYSxpQkFBeEIsS0FBOEM7RUFFNUQsSUFBSW1ILGNBQWMsR0FBRyxFQUFyQjtFQUNBLElBQUlDLEtBQUssR0FBR0YsT0FBTyxDQUFDRyxHQUFSLENBQVksQ0FBQ0MsR0FBRCxFQUFLaEIsQ0FBTCxLQUFXO0lBQy9CLG9CQUNJLDJEQUFDLDBEQUFEO01BQW1CLGlCQUFpQixFQUFFdEcsaUJBQXRDO01BQXlELEdBQUcsRUFBRWlILEdBQUcsQ0FBQyxJQUFELENBQUgsR0FBWSxRQUFaLEdBQXVCWCxDQUFyRjtNQUF3RixJQUFJLEVBQUVnQixHQUFHLENBQUNDLFNBQWxHO01BQTZHLEVBQUUsRUFBRU4sR0FBRyxDQUFDbEksRUFBckg7TUFBeUgsT0FBTyxFQUFFa0ksR0FBRyxDQUFDbEgsT0FBdEk7TUFBK0ksWUFBWSxFQUFFWixPQUFPLENBQUNnQjtJQUFySyxHQUNLOEcsR0FBRyxDQUFDSyxHQUFHLENBQUNDLFNBQUwsQ0FEUixDQURKO0VBS0gsQ0FOVyxDQUFaOztFQVFBLElBQUlwSSxPQUFKLEVBQWE7SUFDVGlJLEtBQUssQ0FBQ0ksSUFBTixlQUFXLDJEQUFDLGlFQUFEO01BQTBCLEdBQUcsRUFBRSxhQUFhUCxHQUFHLENBQUMsSUFBRCxDQUEvQztNQUF1RCxFQUFFLEVBQUVBLEdBQUcsQ0FBQyxJQUFELENBQTlEO01BQXNFLE9BQU8sRUFBRTlIO0lBQS9FLEVBQVg7RUFDSDs7RUFFRCxPQUFPaUksS0FBUDtBQUNILENBaEJEOztBQWtCQSxNQUFNSyxZQUFZLEdBQUcsQ0FBQ1AsT0FBRCxFQUFVUSxPQUFWLEVBQW1CQyxNQUFuQixFQUEyQnhILFlBQTNCLEVBQXlDSCxpQkFBekMsS0FBK0Q7RUFFaEYsSUFBSW9ILEtBQUssR0FBR0YsT0FBTyxDQUFDRyxHQUFSLENBQVksQ0FBQ0MsR0FBRCxFQUFLaEIsQ0FBTCxLQUFXO0lBQy9CLElBQUlzQixVQUFVLEdBQUksT0FBT0YsT0FBTyxDQUFDSixHQUFHLENBQUNDLFNBQUwsQ0FBZCxLQUFrQyxXQUFuQyxHQUFrREcsT0FBTyxDQUFDSixHQUFHLENBQUNDLFNBQUwsQ0FBekQsR0FBMkUsRUFBNUY7SUFDQSxvQkFDSTtNQUFJLEdBQUcsRUFBRSxhQUFhakI7SUFBdEIsR0FDS3RHLGlCQUFpQixpQkFDZDtNQUFVLFNBQVMsRUFBQyxjQUFwQjtNQUFtQyxFQUFFLEVBQUUsU0FBU3NILEdBQUcsQ0FBQ0MsU0FBcEQ7TUFBK0QsSUFBSSxFQUFFRCxHQUFHLENBQUNDLFNBQXpFO01BQW9GLFFBQVEsRUFBRXBILFlBQTlGO01BQ08sS0FBSyxFQUFFeUg7SUFEZCxFQUZSLEVBS0ssQ0FBQzVILGlCQUFELGlCQUNHO01BQU8sU0FBUyxFQUFDLGNBQWpCO01BQWdDLEVBQUUsRUFBRSxTQUFTc0gsR0FBRyxDQUFDQyxTQUFqRDtNQUE0RCxJQUFJLEVBQUVELEdBQUcsQ0FBQ0MsU0FBdEU7TUFBaUYsUUFBUSxFQUFFcEgsWUFBM0Y7TUFDTyxLQUFLLEVBQUV5SDtJQURkLEVBTlIsQ0FESjtFQVlILENBZFcsQ0FBWjtFQWdCQVIsS0FBSyxDQUFDSSxJQUFOLGVBQ0k7SUFBSSxHQUFHLEVBQUM7RUFBUixnQkFDSTtJQUFRLFNBQVMsRUFBQyxpQkFBbEI7SUFBb0MsT0FBTyxFQUFFRztFQUE3QyxXQURKLENBREo7RUFNQSxPQUFPUCxLQUFQO0FBQ0gsQ0F6QkQ7O0FBNEJlLE1BQU1TLGFBQU4sU0FBNEJ0Six3REFBNUIsQ0FBNEM7RUFFdkRHLFdBQVcsQ0FBQ0MsS0FBRCxFQUFRO0lBQ2YsTUFBTUEsS0FBTjtJQUVBLEtBQUtDLEtBQUwsR0FBYTtNQUNUa0osSUFBSSxFQUFFbkosS0FBSyxDQUFDb0osSUFESDtNQUVUTCxPQUFPLEVBQUU7SUFGQSxDQUFiLENBSGUsQ0FRZjs7SUFDQSxLQUFLckksTUFBTCxHQUFjVixLQUFLLENBQUNxSixPQUFOLENBQWM3SSxPQUFkLENBQXNCSSxJQUF0QixDQUEyQjBJLE9BQXpDO0lBRUEsS0FBSzlJLE9BQUwscUJBQW1CUixLQUFLLENBQUNxSixPQUFOLENBQWM3SSxPQUFqQztJQUNBLEtBQUtBLE9BQUwsQ0FBYU0sSUFBYixHQUFvQixLQUFLeUksT0FBTCxDQUFhckksSUFBYixDQUFrQixJQUFsQixDQUFwQjtJQUNBLEtBQUtWLE9BQUwsQ0FBYUksSUFBYixHQUFvQixLQUFLNEksT0FBTCxDQUFhdEksSUFBYixDQUFrQixJQUFsQixDQUFwQjtJQUNBLEtBQUtWLE9BQUwsQ0FBYUMsTUFBYixHQUFzQixLQUFLZ0osV0FBTCxDQUFpQnZJLElBQWpCLENBQXNCLElBQXRCLENBQXRCO0lBQ0EsS0FBS1YsT0FBTCxDQUFhZ0IsWUFBYixHQUE0QixLQUFLa0ksWUFBTCxDQUFrQnhJLElBQWxCLENBQXVCLElBQXZCLENBQTVCO0lBQ0EsS0FBS1YsT0FBTCxDQUFhUSxNQUFiLEdBQXNCLEtBQUsySSxhQUFMLENBQW1CekksSUFBbkIsQ0FBd0IsSUFBeEIsQ0FBdEI7SUFFQSxLQUFLMEksVUFBTCxHQUFrQixLQUFLQSxVQUFMLENBQWdCMUksSUFBaEIsQ0FBcUIsSUFBckIsQ0FBbEI7SUFDQSxLQUFLMkksZUFBTCxHQUF1QixLQUFLQyxlQUFMLENBQXFCNUksSUFBckIsQ0FBMEIsSUFBMUIsQ0FBdkI7RUFDSDs7RUFFRDZJLGtCQUFrQixDQUFDQyxTQUFELEVBQVlDLFNBQVosRUFBdUJDLFFBQXZCLEVBQWlDO0lBQy9DLElBQUcsQ0FBQ3hELDZEQUFZLENBQUMsS0FBSzFHLEtBQUwsQ0FBV29KLElBQVosRUFBa0JZLFNBQVMsQ0FBQ1osSUFBNUIsQ0FBaEIsRUFBbUQ7TUFDL0MsS0FBS3pJLFFBQUwsQ0FBYztRQUFDd0ksSUFBSSxFQUFFLEtBQUtuSixLQUFMLENBQVdvSjtNQUFsQixDQUFkO0lBQ0g7RUFDSjs7RUFFREksT0FBTyxDQUFDcEosRUFBRCxFQUFLQyxFQUFMLEVBQVM7SUFDWixNQUFNO01BQUU4STtJQUFGLElBQVcsS0FBS2xKLEtBQXRCO0lBQ0EsSUFBSXFJLEdBQUcsR0FBR2EsSUFBSSxDQUFDZ0IsSUFBTCxDQUFVQyxDQUFDLElBQUlBLENBQUMsQ0FBQ2hLLEVBQUYsSUFBUUEsRUFBdkIsQ0FBVjtJQUNBa0ksR0FBRyxDQUFDbEgsT0FBSixHQUFjLEtBQWQ7SUFFQSxLQUFLaUosV0FBTCxHQUFtQixJQUFuQjtJQUVBLEtBQUsxSixRQUFMLENBQWM7TUFDVndJLElBQUksRUFBRUE7SUFESSxDQUFkO0lBSUEsS0FBS3pJLE1BQUwsQ0FBWTRILEdBQVo7RUFDSDs7RUFFRG1CLFdBQVcsQ0FBQ3JKLEVBQUQsRUFBSztJQUNaLElBQUlELFFBQVEsR0FBRyxLQUFLSCxLQUFMLENBQVdxSixPQUFYLENBQW1CN0ksT0FBbkIsQ0FBMkJDLE1BQTNCLENBQWtDNkksT0FBakQ7SUFDQSxJQUFJZ0IsT0FBTyxHQUFHLEtBQUt0SyxLQUFMLENBQVdxSixPQUFYLENBQW1CN0YsY0FBbkIsQ0FBa0MsU0FBbEMsQ0FBZDs7SUFFQSxJQUFJOEcsT0FBSixFQUFhO01BQ1RuSyxRQUFRLENBQUNDLEVBQUQsQ0FBUjtJQUNILENBRkQsTUFFTztNQUNINEgsdURBQUEsQ0FBVTtRQUNOd0MsS0FBSyxFQUFFdkMsMkVBQUEsQ0FBWSxzQkFBWixDQUREO1FBRU52RSxJQUFJLEVBQUV1RSwyRUFBQSxDQUFZLHdCQUFaLENBRkE7UUFHTnlDLElBQUksRUFBRSxTQUhBO1FBSU5DLGdCQUFnQixFQUFFLElBSlo7UUFLTkMsa0JBQWtCLEVBQUUsU0FMZDtRQU1OQyxpQkFBaUIsRUFBRTVDLDJFQUFBLENBQVksb0JBQVo7TUFOYixDQUFWLEVBT0c2QyxJQVBILENBT1EsVUFBU0MsTUFBVCxFQUFnQjtRQUNwQixJQUFJQSxNQUFNLENBQUNwRyxLQUFYLEVBQWtCO1VBQ2R4RSxRQUFRLENBQUNDLEVBQUQsQ0FBUjtRQUNIO01BQ0osQ0FYRDtJQVlIO0VBQ0o7O0VBRURtSixPQUFPLENBQUNuSixFQUFELEVBQUtDLEVBQUwsRUFBUztJQUNaLE1BQU07TUFBRThJO0lBQUYsSUFBVyxLQUFLbEosS0FBdEI7SUFDQSxJQUFJcUksR0FBRyxHQUFHYSxJQUFJLENBQUNnQixJQUFMLENBQVVDLENBQUMsSUFBSUEsQ0FBQyxDQUFDaEssRUFBRixJQUFRQSxFQUF2QixDQUFWLENBRlksQ0FJWjs7SUFDQSxLQUFLaUssV0FBTCxxQkFBdUIvQixHQUF2QjtJQUVBQSxHQUFHLENBQUNsSCxPQUFKLEdBQWMsSUFBZDtJQUVBLEtBQUtULFFBQUwsQ0FBYztNQUNWd0ksSUFBSSxFQUFFQTtJQURJLENBQWQ7RUFHSDs7RUFFRFEsYUFBYSxDQUFDdkosRUFBRCxFQUFLQyxFQUFMLEVBQVM7SUFDbEIsTUFBTTtNQUFFOEk7SUFBRixJQUFXLEtBQUtsSixLQUF0QjtJQUNBa0osSUFBSSxDQUFDNkIsT0FBTCxDQUFhWixDQUFDLElBQUk7TUFDZEEsQ0FBQyxDQUFDaEosT0FBRixHQUFZLEtBQVo7SUFDSCxDQUZEO0lBSUEsSUFBSTZKLE1BQU0sR0FBRzlCLElBQUksQ0FBQytCLFNBQUwsQ0FBZWQsQ0FBQyxJQUFJQSxDQUFDLENBQUNoSyxFQUFGLElBQVFBLEVBQTVCLENBQWI7SUFFQStJLElBQUksQ0FBQzhCLE1BQUQsQ0FBSixHQUFlLEtBQUtaLFdBQXBCO0lBRUEsS0FBSzFKLFFBQUwsQ0FBYztNQUNWd0ksSUFBSSxFQUFFQTtJQURJLENBQWQ7RUFHSDs7RUFFRE8sWUFBWSxDQUFDckosRUFBRCxFQUFLO0lBQ2IsTUFBTTtNQUFFOEk7SUFBRixJQUFXLEtBQUtsSixLQUF0QjtJQUNBLElBQUl3RyxLQUFLLEdBQUdwRyxFQUFFLENBQUM4SyxNQUFmO0lBQ0EsSUFBSTdDLEdBQUcsR0FBR2EsSUFBSSxDQUFDZ0IsSUFBTCxDQUFVQyxDQUFDLElBQUlBLENBQUMsQ0FBQ2hLLEVBQUYsSUFBUXFHLEtBQUssQ0FBQ3JHLEVBQTdCLENBQVY7SUFFQWtJLEdBQUcsQ0FBQzdCLEtBQUssQ0FBQ2xGLElBQVAsQ0FBSCxHQUFrQmtGLEtBQUssQ0FBQzlCLEtBQXhCO0lBRUEsS0FBS2hFLFFBQUwsQ0FBYztNQUNWd0ksSUFBSSxFQUFFQTtJQURJLENBQWQ7RUFHSDs7RUFFRFcsZUFBZSxDQUFDekosRUFBRCxFQUFLO0lBQ2hCLE1BQU07TUFBQzBJO0lBQUQsSUFBWSxLQUFLOUksS0FBdkI7SUFDQSxJQUFJd0csS0FBSyxHQUFHcEcsRUFBRSxDQUFDOEssTUFBZjtJQUVBcEMsT0FBTyxDQUFDdEMsS0FBSyxDQUFDbEYsSUFBUCxDQUFQLEdBQXNCa0YsS0FBSyxDQUFDOUIsS0FBNUI7SUFFQSxLQUFLaEUsUUFBTCxDQUFjO01BQ1ZvSSxPQUFPLEVBQUVBO0lBREMsQ0FBZDtFQUdIOztFQUVEYSxVQUFVLENBQUN2SixFQUFELEVBQUs7SUFDWCxNQUFNO01BQUMwSTtJQUFELElBQVksS0FBSzlJLEtBQXZCO0lBQ0FJLEVBQUUsQ0FBQ0MsY0FBSDtJQUVBLEtBQUtJLE1BQUwsQ0FBWXFJLE9BQVo7SUFFQSxLQUFLcEksUUFBTCxDQUFjO01BQ1ZvSSxPQUFPLEVBQUU7SUFEQyxDQUFkO0VBR0g7O0VBRUQ5SCxNQUFNLEdBQUc7SUFDTCxJQUFJO01BQUNvSSxPQUFEO01BQVVkO0lBQVYsSUFBc0IsS0FBS3ZJLEtBQS9CO0lBQ0EsSUFBSW9MLFVBQVUsR0FBRy9CLE9BQU8sQ0FBQzdGLGNBQVIsQ0FBdUIsV0FBdkIsSUFBc0M2RixPQUFPLENBQUNnQyxTQUE5QyxHQUEwRCxFQUEzRTtJQUNBLElBQUlDLFFBQVEsR0FBRyxLQUFLdEwsS0FBTCxDQUFXd0QsY0FBWCxDQUEwQixVQUExQixDQUFmO0lBQ0Esb0JBQ0kscUZBQ0k7TUFBTyxTQUFTLEVBQUUsc0RBQXNENEg7SUFBeEUsZ0JBQ0ksdUZBQ0ksdUVBQ0s3QyxPQUFPLENBQUNHLEdBQVIsQ0FBWSxDQUFDQyxHQUFELEVBQUtoQixDQUFMLEtBQVc7TUFDcEIsSUFBSVMsUUFBUSxHQUFJTyxHQUFHLENBQUNqSCxLQUFMLEdBQWNpSCxHQUFHLENBQUNqSCxLQUFsQixHQUEwQnlHLFFBQVEsQ0FBQ0MsUUFBbEQ7TUFDQSxvQkFDSSwyREFBQyw2REFBRDtRQUFzQixLQUFLLEVBQUVBLFFBQTdCO1FBQXVDLEdBQUcsRUFBRSxhQUFhVDtNQUF6RCxHQUNLZ0IsR0FBRyxDQUFDaEUsS0FEVCxDQURKO0lBS0gsQ0FQQSxDQURMLEVBU0ssS0FBS25FLE9BQUwsaUJBQ0csMkRBQUMsNkRBQUQ7TUFBc0IsR0FBRyxFQUFDO0lBQTFCLGFBVlIsQ0FESixDQURKLGVBa0JJLDBFQUNLK0gsT0FBTyxDQUFDckMsTUFBUixHQUFpQixDQUFqQixJQUFzQixLQUFLakcsS0FBTCxDQUFXa0osSUFBWCxDQUFnQlQsR0FBaEIsQ0FBb0IsQ0FBQ0osR0FBRCxFQUFLWCxDQUFMLEtBQVc7TUFDbEQsSUFBRzRELEtBQUssQ0FBQ0MsT0FBTixDQUFjbEQsR0FBZCxLQUFzQkEsR0FBRyxDQUFDcEMsTUFBSixLQUFlcUMsT0FBTyxDQUFDckMsTUFBaEQsRUFBd0Q7UUFDcERoQixPQUFPLENBQUN1RyxJQUFSLENBQWMsZUFBYzlELENBQUUsT0FBTVcsR0FBRyxDQUFDcEMsTUFBTyxrQkFBaUJxQyxPQUFPLENBQUNyQyxNQUFPLEdBQS9FO1FBQ0Esb0JBQU8sc0VBQVA7TUFDSDs7TUFDRCxvQkFDSSwyREFBQyx5REFBRDtRQUFrQixJQUFJLEVBQUV5QixDQUFDLEdBQUMsQ0FBRixLQUFRLENBQWhDO1FBQW1DLEdBQUcsRUFBRSxTQUFTVyxHQUFHLENBQUNsSSxFQUFyRDtRQUF5RCxFQUFFLEVBQUVrSSxHQUFHLENBQUNsSTtNQUFqRSxHQUNLaUksU0FBUyxDQUFDQyxHQUFELEVBQU1DLE9BQU4sRUFBZSxLQUFLL0gsT0FBcEIsRUFBNkI4SyxRQUE3QixDQURkLENBREo7SUFNSCxDQVhzQixDQUQzQixlQWFJLDJEQUFDLHlEQUFEO01BQWtCLElBQUksRUFBRSxDQUF4QjtNQUEyQixFQUFFLEVBQUMsU0FBOUI7TUFBd0MsR0FBRyxFQUFDO0lBQTVDLEdBQ0t4QyxZQUFZLENBQUNQLE9BQUQsRUFBVSxLQUFLdEksS0FBTCxDQUFXOEksT0FBckIsRUFBOEIsS0FBS2EsVUFBbkMsRUFBK0MsS0FBS0MsZUFBcEQsRUFBcUV5QixRQUFyRSxDQURqQixDQWJKLENBbEJKLENBREosZUFxQ0ksMkRBQUMsc0RBQUQ7TUFBYyxTQUFTLEVBQUU7SUFBekIsRUFyQ0osQ0FESjtFQXlDSDs7QUE5S3NEO0FBK0sxRCxDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9FZGl0YWJsZUFjdGlvbnNUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZUNlbGwuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZUhlYWRpbmcuanMiLCJ3ZWJwYWNrOi8vb3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uLy4vc3JjL2NvbXBvbmVudHMvdGFibGUtZWRpdGFibGUvRWRpdGFibGVUYWJsZVJvdy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvdXRpbHMvbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvY29tcG9uZW50cy90YWJsZS1lZGl0YWJsZS9lZGl0YWJsZS10YWJsZS5jc3M/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==