nsc-react-component 1.2.4 → 1.2.7

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.
@@ -1,10 +1,41 @@
1
1
  function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
2
2
 
3
- var _excluded = ["resizeColumn"];
3
+ import "antd/es/table/style/css";
4
+ import _Table from "antd/es/table";
5
+ import "antd/es/popover/style/css";
6
+ import _Popover from "antd/es/popover";
7
+ import "antd/es/tooltip/style/css";
8
+ import _Tooltip from "antd/es/tooltip";
9
+ import "antd/es/checkbox/style/css";
10
+ import _Checkbox from "antd/es/checkbox";
11
+ var _excluded = ["onResize", "width"],
12
+ _excluded2 = ["listeners"];
4
13
 
5
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
14
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
6
15
 
7
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
16
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
17
+
18
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
19
+
20
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
21
+
22
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
23
+
24
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
25
+
26
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
27
+
28
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
29
+
30
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
31
+
32
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
33
+
34
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
35
+
36
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
37
+
38
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
39
 
9
40
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10
41
 
@@ -28,6 +59,10 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g
28
59
 
29
60
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
30
61
 
62
+ function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
63
+
64
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
65
+
31
66
  /*
32
67
  * @Descripttion:
33
68
  * @version:
@@ -36,36 +71,559 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
36
71
  * @LastEditors: rxzhu
37
72
  * @LastEditTime: 2021-03-23 10:30:42
38
73
  */
74
+ import { AppstoreOutlined } from "@ant-design/icons";
75
+ import { isEmptyObj } from "@bj-nsc/functions";
76
+ import Store, { PageStore } from "@bj-nsc/msn";
77
+ import { utils } from "@bj-nsc/msn/lib/utils";
39
78
  import * as React from "react";
40
- import { DndContextType, IBodyRowProps } from "../common/BodyRow";
79
+ import { DndProvider } from "react-dnd";
80
+ import BodyRow, { DndContextType, IBodyRowProps } from "../common/BodyRow";
81
+ import treeUtils from "../treeUtils";
82
+ import styles from "./index.less";
83
+ var BodyRowComponent = BodyRow.BodyRowComponent,
84
+ HTML5Backend = BodyRow.HTML5Backend;
41
85
  import withZhLocale from "../common/withZhLocale";
42
- import ResizeTable from "./ResizeColumn";
43
- import NormalTable from "./NormalTabl";
86
+ import { NoData } from "..";
87
+ import { Resizable } from "react-resizable";
88
+ import "./resize.less";
44
89
  export { DndContextType, IBodyRowProps };
45
90
 
91
+ var ResizeableTitle = function ResizeableTitle(props) {
92
+ var onResize = props.onResize,
93
+ width = props.width,
94
+ restProps = _objectWithoutProperties(props, _excluded);
95
+
96
+ return /*#__PURE__*/React.createElement(Resizable, {
97
+ width: width || 150,
98
+ height: 0,
99
+ onResize: onResize,
100
+ draggableOpts: {
101
+ enableUserSelectHack: false
102
+ }
103
+ }, /*#__PURE__*/React.createElement("th", restProps));
104
+ };
105
+
46
106
  var NSCTable = /*#__PURE__*/function (_React$Component) {
47
107
  _inherits(NSCTable, _React$Component);
48
108
 
49
109
  var _super = _createSuper(NSCTable);
50
110
 
51
- function NSCTable() {
111
+ function NSCTable(props) {
112
+ var _this2;
113
+
52
114
  _classCallCheck(this, NSCTable);
53
115
 
54
- return _super.apply(this, arguments);
116
+ _this2 = _super.call(this, props);
117
+
118
+ _defineProperty(_assertThisInitialized(_this2), "store", {});
119
+
120
+ _defineProperty(_assertThisInitialized(_this2), "thIconRef", /*#__PURE__*/React.createRef());
121
+
122
+ _defineProperty(_assertThisInitialized(_this2), "state", {
123
+ dataSource: [],
124
+ columns: [],
125
+ loading: false,
126
+ pagination: {},
127
+ activeIndex: -1,
128
+ //搜索文本
129
+ searchText: null,
130
+ fieldOption: null,
131
+ searchColor: null,
132
+ cols: []
133
+ });
134
+
135
+ _defineProperty(_assertThisInitialized(_this2), "listeners", {
136
+ onBeforeLoad: null,
137
+ load: null
138
+ });
139
+
140
+ _defineProperty(_assertThisInitialized(_this2), "components", {
141
+ header: {
142
+ cell: ResizeableTitle
143
+ }
144
+ });
145
+
146
+ _defineProperty(_assertThisInitialized(_this2), "handleResize", function (index) {
147
+ return function (e, _ref) {
148
+ var size = _ref.size;
149
+ var cols = _this2.state.cols;
150
+ console.log("handleResize", cols);
151
+
152
+ var nextColumns = _toConsumableArray(cols);
153
+
154
+ nextColumns[index] = _objectSpread(_objectSpread({}, nextColumns[index]), {}, {
155
+ width: size.width
156
+ });
157
+
158
+ _this2.setState({
159
+ cols: nextColumns
160
+ });
161
+ };
162
+ });
163
+
164
+ _defineProperty(_assertThisInitialized(_this2), "moveRow", function (dragIndex, hoverIndex, drag, target) {
165
+ var _this = _assertThisInitialized(_this2);
166
+
167
+ var dragNode = drag.record;
168
+ var targetNode = target.record;
169
+ dragNode.moveArray(dragNode, targetNode);
170
+ var ids = dragNode.parentNode.getChildNodeIds();
171
+ var params = {
172
+ id: dragNode.id,
173
+ parentId: dragNode.attribute.parentId,
174
+ ids: ids
175
+ };
176
+
177
+ if (_this2.props.moveRow) {
178
+ _this2.props.moveRow(params);
179
+ } else {
180
+ _this2.store.reload();
181
+ } // request("http://demo.javasvn.com/api/admin/menus/drag", {
182
+ // method: "PATCH",
183
+ // data: params,
184
+ // callback: function (data) {
185
+ // this.store.reload();
186
+ // },
187
+ // });
188
+
189
+ });
190
+
191
+ if (props.store instanceof Store) {
192
+ _this2.store = props.store;
193
+ } else {
194
+ var _ref2 = props.store || {},
195
+ _ref2$listeners = _ref2.listeners,
196
+ listenersProps = _ref2$listeners === void 0 ? {} : _ref2$listeners,
197
+ restStore = _objectWithoutProperties(_ref2, _excluded2);
198
+
199
+ var storeProps = _objectSpread(_objectSpread({
200
+ model: "model",
201
+ component: _assertThisInitialized(_this2),
202
+ listeners: {
203
+ onBeforeLoad: function onBeforeLoad(store, options) {
204
+ _this2.setState({
205
+ loading: true
206
+ });
207
+
208
+ utils.callback(listenersProps.onBeforeLoad, _assertThisInitialized(_this2), [store, options]);
209
+ },
210
+ dataChanged: function dataChanged(data, modelData, store) {
211
+ var paging = !(_this2.props.pagination === false);
212
+
213
+ if (paging && !_this2.props.dataSource) {
214
+ _this2.setState({
215
+ dataSource: modelData,
216
+ pagination: store.getPagination(),
217
+ loading: false,
218
+ activeIndex: -1
219
+ });
220
+ } else {
221
+ _this2.setState({
222
+ dataSource: modelData,
223
+ loading: false
224
+ });
225
+ }
226
+
227
+ utils.callback(listenersProps.dataChanged, _assertThisInitialized(_this2), [data, modelData, store, paging]);
228
+ },
229
+ load: function load(data, modelData, store) {
230
+ utils.callback(listenersProps.load, _assertThisInitialized(_this2), [data, modelData, store]);
231
+ },
232
+ onErrorLoad: function onErrorLoad(err, response) {
233
+ _this2.setState({
234
+ loading: false
235
+ });
236
+
237
+ utils.callback(listenersProps.onErrorLoad, _assertThisInitialized(_this2), [err, response]);
238
+ }
239
+ },
240
+ data: restStore.data ? restStore.data : props.dataSource ? props.dataSource : null
241
+ }, restStore), {}, {
242
+ autoLoad: restStore.autoLoad === false ? false : true
243
+ });
244
+
245
+ _this2.store = new PageStore(Object.assign({}, storeProps, {
246
+ pagination: _this2.props.pagination
247
+ }));
248
+ }
249
+
250
+ return _this2;
55
251
  }
56
252
 
57
253
  _createClass(NSCTable, [{
254
+ key: "componentDidMount",
255
+ value: function componentDidMount() {
256
+ var resizeColumn = this.props.resizeColumn;
257
+
258
+ if (!resizeColumn) {
259
+ this.setState({
260
+ columns: _toConsumableArray(this.props.columns)
261
+ });
262
+ } else {
263
+ this.setState({
264
+ cols: _toConsumableArray(this.props.columns)
265
+ }); // this.resetColumn();
266
+ }
267
+
268
+ var store = this.props.store;
269
+
270
+ if (store && store.data) {
271
+ this.store.setData(store.data);
272
+ }
273
+ }
274
+ }, {
275
+ key: "componentDidUpdate",
276
+ value: function componentDidUpdate(prevProps, preState) {
277
+ var resizeColumn = this.props.resizeColumn;
278
+
279
+ if (!resizeColumn) {
280
+ if (this.props.columns !== prevProps.columns) {
281
+ this.setState({
282
+ columns: this.props.columns
283
+ });
284
+ }
285
+ } else {
286
+ if (preState.cols !== this.state.cols) {
287
+ this.resetColumn();
288
+ }
289
+ }
290
+ }
291
+ }, {
292
+ key: "resetColumn",
293
+ value: function resetColumn() {
294
+ var _this3 = this;
295
+
296
+ var cols = this.state.cols;
297
+ var newCols = [];
298
+ var colss = cols || [];
299
+ colss.map(function (col, index) {
300
+ var temp = _objectSpread(_objectSpread({}, col), {}, {
301
+ onHeaderCell: function onHeaderCell(column) {
302
+ return {
303
+ width: column.width,
304
+ onResize: _this3.handleResize(index)
305
+ };
306
+ }
307
+ });
308
+
309
+ newCols.push(temp);
310
+ });
311
+ this.setState({
312
+ columns: newCols
313
+ });
314
+ }
315
+ /**
316
+ * 清除选中颜色
317
+ */
318
+
319
+ }, {
320
+ key: "clearSelectColor",
321
+ value: function clearSelectColor() {
322
+ this.setState({
323
+ activeIndex: -1
324
+ });
325
+ return this;
326
+ }
327
+ }, {
328
+ key: "getPaginationByStore",
329
+ value: function getPaginationByStore() {
330
+ return this.store.getPagination();
331
+ }
332
+ }, {
333
+ key: "onChange",
334
+ value: function onChange(pagination, filters, sorter, extra) {
335
+ var _this4 = this;
336
+
337
+ var _this$props = this.props,
338
+ autoOnChange = _this$props.autoOnChange,
339
+ autoSort = _this$props.autoSort,
340
+ autoPagination = _this$props.autoPagination,
341
+ onChange = _this$props.onChange;
342
+
343
+ if (autoOnChange === false) {
344
+ onChange && onChange(pagination, filters, sorter, extra);
345
+ return;
346
+ }
347
+
348
+ var handlePagination = function handlePagination() {
349
+ var params = {};
350
+ var paging = _this4.getPaginationByStore() || {};
351
+
352
+ if (!isEmptyObj(pagination)) {
353
+ var _p;
354
+
355
+ var p = (_p = {}, _defineProperty(_p, paging.currentKey || "current", pagination.current), _defineProperty(_p, paging.pageSizeKey || "size", pagination.pageSize), _p);
356
+ Object.assign(params, p);
357
+ }
358
+
359
+ if (autoSort === true && !isEmptyObj(sorter)) {
360
+ if (sorter.order == "ascend") {
361
+ params.ascs = sorter.column.sortField || sorter.column.field || sorter.field;
362
+ params.descs = "";
363
+ }
364
+
365
+ if (sorter.order == "descend") {
366
+ params.descs = sorter.column.sortField || sorter.column.field || sorter.field;
367
+ params.ascs = "";
368
+ }
369
+ }
370
+
371
+ _this4.store.reload({
372
+ params: params
373
+ });
374
+ };
375
+
376
+ var onChangeFn = this.props.onChange; // 用户传了onChange保留用户自主处理表格变化的权力
377
+
378
+ if (onChangeFn) {
379
+ utils.callback(onChangeFn, this, [pagination, filters, sorter, extra]);
380
+ }
381
+
382
+ if (this.props.autoPagination) {
383
+ handlePagination();
384
+ }
385
+ }
386
+ }, {
387
+ key: "getStore",
388
+ value: function getStore() {
389
+ return this.store;
390
+ }
391
+ /**
392
+ * 获取数据模型对象
393
+ */
394
+
395
+ }, {
396
+ key: "getModel",
397
+ value: function getModel() {
398
+ return this.store.getModel();
399
+ }
400
+ /**
401
+ * 菜单搜索过滤显示
402
+ * @param {String} val
403
+ */
404
+
405
+ }, {
406
+ key: "handleSearch",
407
+ value: function handleSearch(val, fieldOption, searchColor) {
408
+ this.setState({
409
+ searchText: val,
410
+ fieldOption: fieldOption,
411
+ searchColor: searchColor
412
+ });
413
+ }
414
+ /**
415
+ * 模块列表移动排序
416
+ */
417
+
418
+ }, {
419
+ key: "filterColumn",
420
+ value: function filterColumn(checkedValue) {
421
+ var filterColumns = this.props.columns.map(function (col) {
422
+ var newCol = _objectSpread({}, col);
423
+
424
+ if (checkedValue.includes(col.dataIndex)) {
425
+ newCol.initShow = true;
426
+ } else {
427
+ newCol.initShow = false;
428
+ }
429
+
430
+ return newCol;
431
+ }); // this.setState({ columns: filterColumns });
432
+
433
+ var resizeColumn = this.props.resizeColumn;
434
+
435
+ if (!resizeColumn) {
436
+ this.setState({
437
+ columns: filterColumns
438
+ });
439
+ } else {
440
+ this.setState({
441
+ cols: filterColumns
442
+ });
443
+ }
444
+ }
445
+ }, {
446
+ key: "getColumns",
447
+ value: function getColumns() {
448
+ var _this5 = this;
449
+
450
+ var columns = this.state.columns;
451
+ var _this$props2 = this.props,
452
+ disableColumns = _this$props2.disableColumns,
453
+ colLists = _this$props2.columns;
454
+ var defaultShowCols = columns.filter(function (cols) {
455
+ return cols.initShow !== false;
456
+ });
457
+ var defaultHideCols = columns.filter(function (cols) {
458
+ return cols.initShow === false;
459
+ });
460
+ var content = /*#__PURE__*/React.createElement(_Checkbox.Group, {
461
+ onChange: this.filterColumn.bind(this),
462
+ options: colLists.map(function (col) {
463
+ return {
464
+ label: col.title,
465
+ value: col.dataIndex
466
+ };
467
+ }),
468
+ defaultValue: defaultShowCols.map(function (col) {
469
+ return col.dataIndex;
470
+ })
471
+ });
472
+ var cols = defaultShowCols.map(function (col) {
473
+ if (col.ellipsis && !col.render) {
474
+ col.ellipsis = {
475
+ showTitle: false
476
+ };
477
+
478
+ col.render = function (text) {
479
+ return /*#__PURE__*/React.createElement(_Tooltip, {
480
+ placement: "topLeft",
481
+ title: text
482
+ }, text);
483
+ };
484
+ }
485
+
486
+ return col;
487
+ });
488
+ var IconAction = {
489
+ title: /*#__PURE__*/React.createElement("div", {
490
+ className: styles["th-icon"],
491
+ ref: this.thIconRef
492
+ }, /*#__PURE__*/React.createElement(_Popover, {
493
+ title: "\u9009\u62E9\u663E\u793A\u7684\u5217",
494
+ content: content,
495
+ placement: "bottomRight",
496
+ trigger: "click",
497
+ overlayStyle: {
498
+ minWidth: 410,
499
+ maxWidth: 450
500
+ },
501
+ getPopupContainer: function getPopupContainer() {
502
+ return _this5.thIconRef.current;
503
+ }
504
+ }, /*#__PURE__*/React.createElement(AppstoreOutlined, {
505
+ size: 24,
506
+ className: styles["app-store-icon"]
507
+ }))),
508
+ dataIndex: "icon-menu",
509
+ key: "icon-menu",
510
+ width: 50,
511
+ align: "center" // fixed: "right",
512
+
513
+ };
514
+
515
+ if (this.props.filterColumn) {
516
+ cols.push(IconAction);
517
+ }
518
+
519
+ return cols;
520
+ }
521
+ }, {
58
522
  key: "render",
59
523
  value: function render() {
60
- var _this$props = this.props,
61
- resizeColumn = _this$props.resizeColumn,
62
- params = _objectWithoutProperties(_this$props, _excluded);
524
+ var _this6 = this;
525
+
526
+ var _this = this,
527
+ _this$state = this.state,
528
+ loading = _this$state.loading,
529
+ dataSource = _this$state.dataSource,
530
+ _this$state$paginatio = _this$state.pagination,
531
+ pagination = _this$state$paginatio === void 0 ? {} : _this$state$paginatio,
532
+ searchText = _this$state.searchText,
533
+ fieldOption = _this$state.fieldOption,
534
+ searchColor = _this$state.searchColor,
535
+ props = utils.omit(this.props, ["store", "onChange", "columns", "resetColumn"], {
536
+ rowKey: "id",
537
+ clickChangeColor: false
538
+ });
539
+
540
+ if (props.pagination !== false) {
541
+ props.pagination = _objectSpread(_objectSpread({
542
+ position: ["bottomRight"],
543
+ showSizeChanger: true,
544
+ showQuickJumper: true
545
+ }, props.pagination), pagination);
63
546
 
64
- if (resizeColumn) {
65
- return /*#__PURE__*/React.createElement(ResizeTable, params);
547
+ if (props.showTotal == true) {
548
+ props.pagination.showTotal = function (total, _ref3) {
549
+ var _ref4 = _slicedToArray(_ref3, 2),
550
+ from = _ref4[0],
551
+ to = _ref4[1];
552
+
553
+ // return "显示 " + from + " - " + to + "条,共 " + total + " 条";
554
+ return "共 " + total + " 条";
555
+ };
556
+ }
557
+ }
558
+
559
+ props.onChange = function (pagination, filters, sorter, extra) {
560
+ _this.onChange(pagination, filters, sorter, extra);
561
+ };
562
+
563
+ if (props.clickChangeColor) {
564
+ var onRowFn = props.onRow;
565
+
566
+ props.onRow = function (record, index) {
567
+ var custom = onRowFn ? onRowFn(record, index) : {};
568
+ var onClickFn = custom.onClick;
569
+
570
+ custom.onClick = function (event) {
571
+ _this.setState({
572
+ activeIndex: index //获取点击行的索引
573
+
574
+ });
575
+
576
+ utils.callback(onClickFn, _this, [event]);
577
+ };
578
+
579
+ return custom;
580
+ };
581
+
582
+ props.rowClassName = function (record, index) {
583
+ return index === _this.state.activeIndex ? "".concat(styles.clickRowStyle) : "";
584
+ };
585
+ }
586
+
587
+ var newDataSource = [];
588
+
589
+ if (searchText) {
590
+ var data = treeUtils.getSearchMenuDatas(this, searchText, fieldOption, searchColor);
591
+ newDataSource = data.treeDatas;
592
+ props.expandedRowKeys = data.openKeys;
66
593
  } else {
67
- return /*#__PURE__*/React.createElement(NormalTable, params);
594
+ newDataSource = dataSource;
68
595
  }
596
+
597
+ props.store = props.store || {};
598
+ props.store.autoLoad = props.store.autoLoad === false ? false : true;
599
+ var dragable = _this.props.dragable;
600
+ var dragableProps = dragable === true ? {
601
+ components: BodyRowComponent,
602
+ onRow: function onRow(record, index) {
603
+ return {
604
+ index: index,
605
+ record: record,
606
+ moveRow: _this6.moveRow
607
+ };
608
+ }
609
+ } : {};
610
+ var resizeColumn = this.props.resizeColumn;
611
+ var resizeProps = resizeColumn === true ? {
612
+ components: this.components
613
+ } : null;
614
+ var DefaultTable = /*#__PURE__*/React.createElement(_Table, _extends({
615
+ childrenColumnName: "childNodes",
616
+ dataSource: newDataSource,
617
+ columns: this.getColumns(),
618
+ loading: loading,
619
+ className: styles["nsc-table"],
620
+ locale: {
621
+ emptyText: /*#__PURE__*/React.createElement(NoData, null)
622
+ }
623
+ }, resizeProps, props, dragableProps));
624
+ return dragable === true ? /*#__PURE__*/React.createElement(DndProvider, {
625
+ backend: HTML5Backend
626
+ }, DefaultTable) : DefaultTable;
69
627
  }
70
628
  }]);
71
629
 
@@ -80,8 +638,9 @@ _defineProperty(NSCTable, "defaultProps", {
80
638
  dragUrl: "",
81
639
  autoPagination: true,
82
640
  autoSort: true,
83
- autoOnChange: true
641
+ autoOnChange: true,
642
+ resizeColumn: false
84
643
  });
85
644
 
86
645
  export default withZhLocale(NSCTable);
87
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3RhYmxlL2luZGV4LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsIndpdGhaaExvY2FsZSIsIlJlc2l6ZVRhYmxlIiwiTm9ybWFsVGFibGUiLCJOU0NUYWJsZSIsInByb3BzIiwicmVzaXplQ29sdW1uIiwicGFyYW1zIiwiQ29tcG9uZW50IiwiZGlzYWJsZUNvbHVtbnMiLCJkcmFnYWJsZSIsInNob3dUb3RhbCIsImZpbHRlckNvbHVtbiIsImRyYWdVcmwiLCJhdXRvUGFnaW5hdGlvbiIsImF1dG9Tb3J0IiwiYXV0b09uQ2hhbmdlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBY0EsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsU0FBa0JDLGNBQWxCLEVBQWtDQyxhQUFsQyxRQUF1RCxtQkFBdkQ7QUFFQSxPQUFPQyxZQUFQLE1BQXlCLHdCQUF6QjtBQUNBLE9BQU9DLFdBQVAsTUFBd0IsZ0JBQXhCO0FBQ0EsT0FBT0MsV0FBUCxNQUF3QixjQUF4QjtBQWlDQSxTQUFTSixjQUFULEVBQXlCQyxhQUF6Qjs7SUFDTUksUTs7Ozs7Ozs7Ozs7OztXQVdKLGtCQUFTO0FBQ1Asd0JBQW9DLEtBQUtDLEtBQXpDO0FBQUEsVUFBUUMsWUFBUixlQUFRQSxZQUFSO0FBQUEsVUFBeUJDLE1BQXpCOztBQUNBLFVBQUlELFlBQUosRUFBa0I7QUFDaEIsNEJBQU8sb0JBQUMsV0FBRCxFQUFpQkMsTUFBakIsQ0FBUDtBQUNELE9BRkQsTUFFTztBQUNMLDRCQUFPLG9CQUFDLFdBQUQsRUFBaUJBLE1BQWpCLENBQVA7QUFDRDtBQUNGOzs7O0VBbEJvQlQsS0FBSyxDQUFDVSxTOztnQkFBdkJKLFEsa0JBQ2tCO0FBQ3BCSyxFQUFBQSxjQUFjLEVBQUUsRUFESTtBQUVwQkMsRUFBQUEsUUFBUSxFQUFFLEtBRlU7QUFHcEJDLEVBQUFBLFNBQVMsRUFBRSxJQUhTO0FBSXBCQyxFQUFBQSxZQUFZLEVBQUUsSUFKTTtBQUtwQkMsRUFBQUEsT0FBTyxFQUFFLEVBTFc7QUFNcEJDLEVBQUFBLGNBQWMsRUFBRSxJQU5JO0FBT3BCQyxFQUFBQSxRQUFRLEVBQUUsSUFQVTtBQVFwQkMsRUFBQUEsWUFBWSxFQUFFO0FBUk0sQzs7QUFvQnhCLGVBQWVmLFlBQVksQ0FBQ0csUUFBRCxDQUEzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBEZXNjcmlwdHRpb246XHJcbiAqIEB2ZXJzaW9uOlxyXG4gKiBAQXV0aG9yOiByeHpodVxyXG4gKiBARGF0ZTogMjAyMS0wMy0yMyAwODo0NjoyMFxyXG4gKiBATGFzdEVkaXRvcnM6IHJ4emh1XHJcbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjEtMDMtMjMgMTA6MzA6NDJcclxuICovXHJcbmltcG9ydCB7IEFwcHN0b3JlT3V0bGluZWQgfSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgaXNFbXB0eU9iaiB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgU3RvcmUsIHsgUGFnZVN0b3JlLCBTdG9yZVByb3BzIH0gZnJvbSBcIkBiai1uc2MvbXNuXCI7XHJcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSBcIkBiai1uc2MvbXNuL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIENoZWNrYm94LFxyXG4gIENoZWNrYm94T3B0aW9uVHlwZSxcclxuICBQb3BvdmVyLFxyXG4gIFRhYmxlLFxyXG4gIFRhYmxlUHJvcHMsXHJcbiAgVG9vbHRpcCxcclxufSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgeyBDb2x1bW5UeXBlLCBUYWJsZVBhZ2luYXRpb25Db25maWcgfSBmcm9tIFwiYW50ZC9saWIvdGFibGVcIjtcclxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCBCb2R5Um93LCB7IERuZENvbnRleHRUeXBlLCBJQm9keVJvd1Byb3BzIH0gZnJvbSBcIi4uL2NvbW1vbi9Cb2R5Um93XCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vaW5kZXgubGVzc1wiO1xyXG5pbXBvcnQgd2l0aFpoTG9jYWxlIGZyb20gXCIuLi9jb21tb24vd2l0aFpoTG9jYWxlXCI7XHJcbmltcG9ydCBSZXNpemVUYWJsZSBmcm9tIFwiLi9SZXNpemVDb2x1bW5cIjtcclxuaW1wb3J0IE5vcm1hbFRhYmxlIGZyb20gXCIuL05vcm1hbFRhYmxcIjtcclxuXHJcbmludGVyZmFjZSBJRHJhZ1BhcmFtcyB7XHJcbiAgaWQ6IHN0cmluZyB8IG51bWJlcjtcclxuICBpZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj47XHJcbiAgcGFyZW50SWQ6IHN0cmluZyB8IG51bWJlcjtcclxufVxyXG4vLyBpbnRlcmZhY2UgU3RvcmVQcm9wcyB7fVxyXG5cclxuZXhwb3J0IHR5cGUgU3RvcmVUeXBlID0gXCJQYWdlU3RvcmVcIiB8IFwiVHJlZVN0b3JlXCIgfCBcIkJhc2VTdG9yZVwiO1xyXG5cclxuaW50ZXJmYWNlIE5TQ1RhYmxlUGFnaW5hdGlvbiBleHRlbmRzIFRhYmxlUGFnaW5hdGlvbkNvbmZpZyB7XHJcbiAgdG90YWxLZXk/OiBzdHJpbmc7XHJcbiAgcGFnZVNpemVLZXk/OiBzdHJpbmc7XHJcbiAgY3VycmVudEtleT86IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIE5TQ1RhYmxlUHJvcHMgZXh0ZW5kcyBUYWJsZVByb3BzPGFueT4ge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93VG90YWw/OiBib29sZWFuOyAvLyDmmK/lkKbmmL7npLrmgLvmnaHmlbDkv6Hmga/vvIzpu5jorqR0cnVlXHJcbiAgZGlzYWJsZUNvbHVtbnM/OiBzdHJpbmdbXTsgLy8g5LiN5Y+v6ZqQ6JeP5b+F6aG75pi+56S655qE5YiXXHJcbiAgZHJhZ2FibGU/OiBib29sZWFuOyAvLyDmmK/lkKblj6/mi5bliqgsIOm7mOiupGZhbHNlXHJcbiAgZmlsdGVyQ29sdW1uPzogYm9vbGVhbjsgLy8g5piv5ZCm5pSv5oyB6L+H5ruk5pi+56S66KGo5qC85YiXLCDpu5jorqR0cnVlXHJcbiAgbW92ZVJvdz86IChwYXJhbXM6IElEcmFnUGFyYW1zKSA9PiB2b2lkOyAvLyDmi5bmi73lrozmiJDlkI7nmoTlm57osINcclxuICBkcmFnVXJsPzogc3RyaW5nOyAvLyDkv53lrZjmi5bmi73mjpLluo/nmoTmjqXlj6NcclxuICBwYWdpbmF0aW9uPzogZmFsc2UgfCBOU0NUYWJsZVBhZ2luYXRpb247XHJcbiAgYXV0b1BhZ2luYXRpb24/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqjlpITnkIbliIbpobVcclxuICBhdXRvU29ydD86IGJvb2xlYW47IC8v57uE5Lu25piv5ZCm6Ieq5Yqo5aSE55CG5o6S5bqPXHJcbiAgYXV0b09uQ2hhbmdlPzogYm9vbGVhbjsgLy8g57uE5Lu25piv5ZCm6Ieq5Yqob25DaGFuZ2UsIGZhbHNl5YiZ5LiN5YGa5Lu75L2V5aSE55CG5YWo6YOo5Lqk57uZ6LCD55So5pa5XHJcbiAgcmVzaXplQ29sdW1uPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSU5TQ1RhYmxlUHJvcHMgPSB0eXBlb2YgTlNDVGFibGUuZGVmYXVsdFByb3BzICYgTlNDVGFibGVQcm9wcztcclxuZXhwb3J0IHsgRG5kQ29udGV4dFR5cGUsIElCb2R5Um93UHJvcHMgfTtcclxuY2xhc3MgTlNDVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SU5TQ1RhYmxlUHJvcHM+IHtcclxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xyXG4gICAgZGlzYWJsZUNvbHVtbnM6IFtdLFxyXG4gICAgZHJhZ2FibGU6IGZhbHNlLFxyXG4gICAgc2hvd1RvdGFsOiB0cnVlLFxyXG4gICAgZmlsdGVyQ29sdW1uOiB0cnVlLFxyXG4gICAgZHJhZ1VybDogXCJcIixcclxuICAgIGF1dG9QYWdpbmF0aW9uOiB0cnVlLFxyXG4gICAgYXV0b1NvcnQ6IHRydWUsXHJcbiAgICBhdXRvT25DaGFuZ2U6IHRydWUsXHJcbiAgfTtcclxuICByZW5kZXIoKSB7XHJcbiAgICBjb25zdCB7IHJlc2l6ZUNvbHVtbiwgLi4ucGFyYW1zIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKHJlc2l6ZUNvbHVtbikge1xyXG4gICAgICByZXR1cm4gPFJlc2l6ZVRhYmxlIHsuLi5wYXJhbXN9IC8+O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIDxOb3JtYWxUYWJsZSB7Li4ucGFyYW1zfSAvPjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHdpdGhaaExvY2FsZShOU0NUYWJsZSk7XHJcbiJdfQ==
646
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3RhYmxlL2luZGV4LnRzeCJdLCJuYW1lcyI6WyJBcHBzdG9yZU91dGxpbmVkIiwiaXNFbXB0eU9iaiIsIlN0b3JlIiwiUGFnZVN0b3JlIiwidXRpbHMiLCJSZWFjdCIsIkRuZFByb3ZpZGVyIiwiQm9keVJvdyIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsInRyZWVVdGlscyIsInN0eWxlcyIsIkJvZHlSb3dDb21wb25lbnQiLCJIVE1MNUJhY2tlbmQiLCJ3aXRoWmhMb2NhbGUiLCJOb0RhdGEiLCJSZXNpemFibGUiLCJSZXNpemVhYmxlVGl0bGUiLCJwcm9wcyIsIm9uUmVzaXplIiwid2lkdGgiLCJyZXN0UHJvcHMiLCJlbmFibGVVc2VyU2VsZWN0SGFjayIsIk5TQ1RhYmxlIiwiY3JlYXRlUmVmIiwiZGF0YVNvdXJjZSIsImNvbHVtbnMiLCJsb2FkaW5nIiwicGFnaW5hdGlvbiIsImFjdGl2ZUluZGV4Iiwic2VhcmNoVGV4dCIsImZpZWxkT3B0aW9uIiwic2VhcmNoQ29sb3IiLCJjb2xzIiwib25CZWZvcmVMb2FkIiwibG9hZCIsImhlYWRlciIsImNlbGwiLCJpbmRleCIsImUiLCJzaXplIiwic3RhdGUiLCJjb25zb2xlIiwibG9nIiwibmV4dENvbHVtbnMiLCJzZXRTdGF0ZSIsImRyYWdJbmRleCIsImhvdmVySW5kZXgiLCJkcmFnIiwidGFyZ2V0IiwiX3RoaXMiLCJkcmFnTm9kZSIsInJlY29yZCIsInRhcmdldE5vZGUiLCJtb3ZlQXJyYXkiLCJpZHMiLCJwYXJlbnROb2RlIiwiZ2V0Q2hpbGROb2RlSWRzIiwicGFyYW1zIiwiaWQiLCJwYXJlbnRJZCIsImF0dHJpYnV0ZSIsIm1vdmVSb3ciLCJzdG9yZSIsInJlbG9hZCIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwic3RvcmVQcm9wcyIsIm1vZGVsIiwiY29tcG9uZW50Iiwib3B0aW9ucyIsImNhbGxiYWNrIiwiZGF0YUNoYW5nZWQiLCJkYXRhIiwibW9kZWxEYXRhIiwicGFnaW5nIiwiZ2V0UGFnaW5hdGlvbiIsIm9uRXJyb3JMb2FkIiwiZXJyIiwicmVzcG9uc2UiLCJhdXRvTG9hZCIsIk9iamVjdCIsImFzc2lnbiIsInJlc2l6ZUNvbHVtbiIsInNldERhdGEiLCJwcmV2UHJvcHMiLCJwcmVTdGF0ZSIsInJlc2V0Q29sdW1uIiwibmV3Q29scyIsImNvbHNzIiwibWFwIiwiY29sIiwidGVtcCIsIm9uSGVhZGVyQ2VsbCIsImNvbHVtbiIsImhhbmRsZVJlc2l6ZSIsInB1c2giLCJmaWx0ZXJzIiwic29ydGVyIiwiZXh0cmEiLCJhdXRvT25DaGFuZ2UiLCJhdXRvU29ydCIsImF1dG9QYWdpbmF0aW9uIiwib25DaGFuZ2UiLCJoYW5kbGVQYWdpbmF0aW9uIiwiZ2V0UGFnaW5hdGlvbkJ5U3RvcmUiLCJwIiwiY3VycmVudEtleSIsImN1cnJlbnQiLCJwYWdlU2l6ZUtleSIsInBhZ2VTaXplIiwib3JkZXIiLCJhc2NzIiwic29ydEZpZWxkIiwiZmllbGQiLCJkZXNjcyIsIm9uQ2hhbmdlRm4iLCJnZXRNb2RlbCIsInZhbCIsImNoZWNrZWRWYWx1ZSIsImZpbHRlckNvbHVtbnMiLCJuZXdDb2wiLCJpbmNsdWRlcyIsImRhdGFJbmRleCIsImluaXRTaG93IiwiZGlzYWJsZUNvbHVtbnMiLCJjb2xMaXN0cyIsImRlZmF1bHRTaG93Q29scyIsImZpbHRlciIsImRlZmF1bHRIaWRlQ29scyIsImNvbnRlbnQiLCJmaWx0ZXJDb2x1bW4iLCJiaW5kIiwibGFiZWwiLCJ0aXRsZSIsInZhbHVlIiwiZWxsaXBzaXMiLCJyZW5kZXIiLCJzaG93VGl0bGUiLCJ0ZXh0IiwiSWNvbkFjdGlvbiIsInRoSWNvblJlZiIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJrZXkiLCJhbGlnbiIsIm9taXQiLCJyb3dLZXkiLCJjbGlja0NoYW5nZUNvbG9yIiwicG9zaXRpb24iLCJzaG93U2l6ZUNoYW5nZXIiLCJzaG93UXVpY2tKdW1wZXIiLCJzaG93VG90YWwiLCJ0b3RhbCIsImZyb20iLCJ0byIsIm9uUm93Rm4iLCJvblJvdyIsImN1c3RvbSIsIm9uQ2xpY2tGbiIsIm9uQ2xpY2siLCJldmVudCIsInJvd0NsYXNzTmFtZSIsImNsaWNrUm93U3R5bGUiLCJuZXdEYXRhU291cmNlIiwiZ2V0U2VhcmNoTWVudURhdGFzIiwidHJlZURhdGFzIiwiZXhwYW5kZWRSb3dLZXlzIiwib3BlbktleXMiLCJkcmFnYWJsZSIsImRyYWdhYmxlUHJvcHMiLCJjb21wb25lbnRzIiwicmVzaXplUHJvcHMiLCJEZWZhdWx0VGFibGUiLCJnZXRDb2x1bW5zIiwiZW1wdHlUZXh0IiwiQ29tcG9uZW50IiwiZHJhZ1VybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsZ0JBQVQsUUFBaUMsbUJBQWpDO0FBQ0EsU0FBU0MsVUFBVCxRQUEyQixtQkFBM0I7QUFDQSxPQUFPQyxLQUFQLElBQWdCQyxTQUFoQixRQUE2QyxhQUE3QztBQUNBLFNBQVNDLEtBQVQsUUFBc0IsdUJBQXRCO0FBVUEsT0FBTyxLQUFLQyxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsU0FBU0MsV0FBVCxRQUE0QixXQUE1QjtBQUNBLE9BQU9DLE9BQVAsSUFBa0JDLGNBQWxCLEVBQWtDQyxhQUFsQyxRQUF1RCxtQkFBdkQ7QUFDQSxPQUFPQyxTQUFQLE1BQXNCLGNBQXRCO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixjQUFuQjtBQUNBLElBQVFDLGdCQUFSLEdBQTJDTCxPQUEzQyxDQUFRSyxnQkFBUjtBQUFBLElBQTBCQyxZQUExQixHQUEyQ04sT0FBM0MsQ0FBMEJNLFlBQTFCO0FBQ0EsT0FBT0MsWUFBUCxNQUF5Qix3QkFBekI7QUFDQSxTQUFTQyxNQUFULFFBQXVCLElBQXZCO0FBQ0EsU0FBU0MsU0FBVCxRQUEwQixpQkFBMUI7QUFD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QUFFcUssVUFBQUEsU0FBUyxlQUFFLG9CQUFDLE1BQUQ7QUFBYjtBQU5WLFNBT01ILFdBUE4sRUFRTTNKLEtBUk4sRUFTTXlKLGFBVE4sRUFERjtBQWNBLGFBQU9ELFFBQVEsS0FBSyxJQUFiLGdCQUNMLG9CQUFDLFdBQUQ7QUFBYSxRQUFBLE9BQU8sRUFBRTdKO0FBQXRCLFNBQXFDaUssWUFBckMsQ0FESyxHQUdMQSxZQUhGO0FBS0Q7Ozs7RUFwZG9CekssS0FBSyxDQUFDNEssUzs7Z0JBQXZCMUosUSxrQkFDa0I7QUFDcEJ1RyxFQUFBQSxjQUFjLEVBQUUsRUFESTtBQUVwQjRDLEVBQUFBLFFBQVEsRUFBRSxLQUZVO0FBR3BCakIsRUFBQUEsU0FBUyxFQUFFLElBSFM7QUFJcEJyQixFQUFBQSxZQUFZLEVBQUUsSUFKTTtBQUtwQjhDLEVBQUFBLE9BQU8sRUFBRSxFQUxXO0FBTXBCM0UsRUFBQUEsY0FBYyxFQUFFLElBTkk7QUFPcEJELEVBQUFBLFFBQVEsRUFBRSxJQVBVO0FBUXBCRCxFQUFBQSxZQUFZLEVBQUUsSUFSTTtBQVNwQmpCLEVBQUFBLFlBQVksRUFBRTtBQVRNLEM7O0FBc2R4QixlQUFldEUsWUFBWSxDQUFDUyxRQUFELENBQTNCIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQERlc2NyaXB0dGlvbjpcclxuICogQHZlcnNpb246XHJcbiAqIEBBdXRob3I6IHJ4emh1XHJcbiAqIEBEYXRlOiAyMDIxLTAzLTIzIDA4OjQ2OjIwXHJcbiAqIEBMYXN0RWRpdG9yczogcnh6aHVcclxuICogQExhc3RFZGl0VGltZTogMjAyMS0wMy0yMyAxMDozMDo0MlxyXG4gKi9cclxuaW1wb3J0IHsgQXBwc3RvcmVPdXRsaW5lZCB9IGZyb20gXCJAYW50LWRlc2lnbi9pY29uc1wiO1xyXG5pbXBvcnQgeyBpc0VtcHR5T2JqIH0gZnJvbSBcIkBiai1uc2MvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCBTdG9yZSwgeyBQYWdlU3RvcmUsIFN0b3JlUHJvcHMgfSBmcm9tIFwiQGJqLW5zYy9tc25cIjtcclxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tIFwiQGJqLW5zYy9tc24vbGliL3V0aWxzXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2hlY2tib3gsXHJcbiAgQ2hlY2tib3hPcHRpb25UeXBlLFxyXG4gIFBvcG92ZXIsXHJcbiAgVGFibGUsXHJcbiAgVGFibGVQcm9wcyxcclxuICBUb29sdGlwLFxyXG59IGZyb20gXCJhbnRkXCI7XHJcbmltcG9ydCB7IENvbHVtblR5cGUsIFRhYmxlUGFnaW5hdGlvbkNvbmZpZyB9IGZyb20gXCJhbnRkL2xpYi90YWJsZVwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgRG5kUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtZG5kXCI7XHJcbmltcG9ydCBCb2R5Um93LCB7IERuZENvbnRleHRUeXBlLCBJQm9keVJvd1Byb3BzIH0gZnJvbSBcIi4uL2NvbW1vbi9Cb2R5Um93XCI7XHJcbmltcG9ydCB0cmVlVXRpbHMgZnJvbSBcIi4uL3RyZWVVdGlsc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2luZGV4Lmxlc3NcIjtcclxuY29uc3QgeyBCb2R5Um93Q29tcG9uZW50LCBIVE1MNUJhY2tlbmQgfSA9IEJvZHlSb3c7XHJcbmltcG9ydCB3aXRoWmhMb2NhbGUgZnJvbSBcIi4uL2NvbW1vbi93aXRoWmhMb2NhbGVcIjtcclxuaW1wb3J0IHsgTm9EYXRhIH0gZnJvbSBcIi4uXCI7XHJcbmltcG9ydCB7IFJlc2l6YWJsZSB9IGZyb20gXCJyZWFjdC1yZXNpemFibGVcIjtcclxuaW1wb3J0IFwiLi9yZXNpemUubGVzc1wiO1xyXG5cclxuaW50ZXJmYWNlIElEcmFnUGFyYW1zIHtcclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGlkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuICBwYXJlbnRJZDogc3RyaW5nIHwgbnVtYmVyO1xyXG59XHJcbi8vIGludGVyZmFjZSBTdG9yZVByb3BzIHt9XHJcblxyXG5leHBvcnQgdHlwZSBTdG9yZVR5cGUgPSBcIlBhZ2VTdG9yZVwiIHwgXCJUcmVlU3RvcmVcIiB8IFwiQmFzZVN0b3JlXCI7XHJcblxyXG5pbnRlcmZhY2UgTlNDVGFibGVQYWdpbmF0aW9uIGV4dGVuZHMgVGFibGVQYWdpbmF0aW9uQ29uZmlnIHtcclxuICB0b3RhbEtleT86IHN0cmluZztcclxuICBwYWdlU2l6ZUtleT86IHN0cmluZztcclxuICBjdXJyZW50S2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgTlNDVGFibGVQcm9wcyBleHRlbmRzIFRhYmxlUHJvcHM8YW55PiB7XHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIHNob3dUb3RhbD86IGJvb2xlYW47IC8vIOaYr+WQpuaYvuekuuaAu+adoeaVsOS/oeaBr++8jOm7mOiupHRydWVcclxuICBkaXNhYmxlQ29sdW1ucz86IHN0cmluZ1tdOyAvLyDkuI3lj6/pmpDol4/lv4XpobvmmL7npLrnmoTliJdcclxuICBkcmFnYWJsZT86IGJvb2xlYW47IC8vIOaYr+WQpuWPr+aLluWKqCwg6buY6K6kZmFsc2VcclxuICBmaWx0ZXJDb2x1bW4/OiBib29sZWFuOyAvLyDmmK/lkKbmlK/mjIHov4fmu6TmmL7npLrooajmoLzliJcsIOm7mOiupHRydWVcclxuICBtb3ZlUm93PzogKHBhcmFtczogSURyYWdQYXJhbXMpID0+IHZvaWQ7IC8vIOaLluaLveWujOaIkOWQjueahOWbnuiwg1xyXG4gIGRyYWdVcmw/OiBzdHJpbmc7IC8vIOS/neWtmOaLluaLveaOkuW6j+eahOaOpeWPo1xyXG4gIHBhZ2luYXRpb24/OiBmYWxzZSB8IE5TQ1RhYmxlUGFnaW5hdGlvbjtcclxuICBhdXRvUGFnaW5hdGlvbj86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuWIhumhtVxyXG4gIGF1dG9Tb3J0PzogYm9vbGVhbjsgLy/nu4Tku7bmmK/lkKboh6rliqjlpITnkIbmjpLluo9cclxuICBhdXRvT25DaGFuZ2U/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqhvbkNoYW5nZSwgZmFsc2XliJnkuI3lgZrku7vkvZXlpITnkIblhajpg6jkuqTnu5nosIPnlKjmlrlcclxuICByZXNpemVDb2x1bW4/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTlNDVGFibGVQcm9wcyA9IHR5cGVvZiBOU0NUYWJsZS5kZWZhdWx0UHJvcHMgJiBOU0NUYWJsZVByb3BzO1xyXG5leHBvcnQgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9O1xyXG5cclxuY29uc3QgUmVzaXplYWJsZVRpdGxlID0gKHByb3BzOiBhbnkpID0+IHtcclxuICBjb25zdCB7IG9uUmVzaXplLCB3aWR0aCwgLi4ucmVzdFByb3BzIH0gPSBwcm9wcztcclxuICByZXR1cm4gKFxyXG4gICAgPFJlc2l6YWJsZVxyXG4gICAgICB3aWR0aD17d2lkdGggfHwgMTUwfVxyXG4gICAgICBoZWlnaHQ9ezB9XHJcbiAgICAgIG9uUmVzaXplPXtvblJlc2l6ZX1cclxuICAgICAgZHJhZ2dhYmxlT3B0cz17eyBlbmFibGVVc2VyU2VsZWN0SGFjazogZmFsc2UgfX1cclxuICAgID5cclxuICAgICAgPHRoIHsuLi5yZXN0UHJvcHN9IC8+XHJcbiAgICA8L1Jlc2l6YWJsZT5cclxuICApO1xyXG59O1xyXG5jbGFzcyBOU0NUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJTlNDVGFibGVQcm9wcz4ge1xyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XHJcbiAgICBkaXNhYmxlQ29sdW1uczogW10sXHJcbiAgICBkcmFnYWJsZTogZmFsc2UsXHJcbiAgICBzaG93VG90YWw6IHRydWUsXHJcbiAgICBmaWx0ZXJDb2x1bW46IHRydWUsXHJcbiAgICBkcmFnVXJsOiBcIlwiLFxyXG4gICAgYXV0b1BhZ2luYXRpb246IHRydWUsXHJcbiAgICBhdXRvU29ydDogdHJ1ZSxcclxuICAgIGF1dG9PbkNoYW5nZTogdHJ1ZSxcclxuICAgIHJlc2l6ZUNvbHVtbjogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgc3RvcmUgPSB7fSBhcyBTdG9yZVByb3BzO1xyXG4gIHRoSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuXHJcbiAgc3RhdGUgPSB7XHJcbiAgICBkYXRhU291cmNlOiBbXSxcclxuICAgIGNvbHVtbnM6IFtdLFxyXG4gICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICBwYWdpbmF0aW9uOiB7fSxcclxuICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgIC8v5pCc57Si5paH5pysXHJcbiAgICBzZWFyY2hUZXh0OiBudWxsLFxyXG4gICAgZmllbGRPcHRpb246IG51bGwsXHJcbiAgICBzZWFyY2hDb2xvcjogbnVsbCxcclxuICAgIGNvbHM6IFtdLFxyXG4gIH07XHJcblxyXG4gIGxpc3RlbmVycyA9IHtcclxuICAgIG9uQmVmb3JlTG9hZDogbnVsbCxcclxuICAgIGxvYWQ6IG51bGwsXHJcbiAgfTtcclxuXHJcbiAgY29tcG9uZW50cyA9IHtcclxuICAgIGhlYWRlcjoge1xyXG4gICAgICBjZWxsOiBSZXNpemVhYmxlVGl0bGUsXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBpZiAocHJvcHMuc3RvcmUgaW5zdGFuY2VvZiBTdG9yZSkge1xyXG4gICAgICB0aGlzLnN0b3JlID0gcHJvcHMuc3RvcmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB7IGxpc3RlbmVyczogbGlzdGVuZXJzUHJvcHMgPSB7fSwgLi4ucmVzdFN0b3JlIH0gPVxyXG4gICAgICAgIHByb3BzLnN0b3JlIHx8IHt9O1xyXG4gICAgICBjb25zdCBzdG9yZVByb3BzID0ge1xyXG4gICAgICAgIG1vZGVsOiBcIm1vZGVsXCIsXHJcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgICAgb25CZWZvcmVMb2FkOiAoc3RvcmUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLm9uQmVmb3JlTG9hZCwgdGhpcywgW3N0b3JlLCBvcHRpb25zXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGF0YUNoYW5nZWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwYWdpbmcgPSAhKHRoaXMucHJvcHMucGFnaW5hdGlvbiA9PT0gZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBhZ2luZyAmJiAhdGhpcy5wcm9wcy5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBtb2RlbERhdGEsXHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiBzdG9yZS5nZXRQYWdpbmF0aW9uKCksXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YVNvdXJjZTogbW9kZWxEYXRhLCBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMuZGF0YUNoYW5nZWQsIHRoaXMsIFtcclxuICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgIG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICBzdG9yZSxcclxuICAgICAgICAgICAgICBwYWdpbmcsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxvYWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLmxvYWQsIHRoaXMsIFtkYXRhLCBtb2RlbERhdGEsIHN0b3JlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb25FcnJvckxvYWQ6IChlcnIsIHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMub25FcnJvckxvYWQsIHRoaXMsIFtlcnIsIHJlc3BvbnNlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YTogcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgID8gcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgIDogcHJvcHMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgPyBwcm9wcy5kYXRhU291cmNlXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgLi4ucmVzdFN0b3JlLFxyXG4gICAgICAgIGF1dG9Mb2FkOiByZXN0U3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5zdG9yZSA9IG5ldyBQYWdlU3RvcmUoXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RvcmVQcm9wcywge1xyXG4gICAgICAgICAgcGFnaW5hdGlvbjogdGhpcy5wcm9wcy5wYWdpbmF0aW9uLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNpemUgPVxyXG4gICAgKGluZGV4OiBhbnkpID0+XHJcbiAgICAoZTogYW55LCB7IHNpemUgfTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY29scyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgY29uc29sZS5sb2coXCJoYW5kbGVSZXNpemVcIiwgY29scyk7XHJcbiAgICAgIGNvbnN0IG5leHRDb2x1bW5zID0gWy4uLmNvbHNdO1xyXG4gICAgICBuZXh0Q29sdW1uc1tpbmRleF0gPSB7XHJcbiAgICAgICAgLi4ubmV4dENvbHVtbnNbaW5kZXhdLFxyXG4gICAgICAgIHdpZHRoOiBzaXplLndpZHRoLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2xzOiBuZXh0Q29sdW1ucyxcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbHVtbnM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbHM6IFsuLi50aGlzLnByb3BzLmNvbHVtbnNdIH0pO1xyXG4gICAgICAvLyB0aGlzLnJlc2V0Q29sdW1uKCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMucHJvcHMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuZGF0YSkge1xyXG4gICAgICB0aGlzLnN0b3JlLnNldERhdGEoc3RvcmUuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmVTdGF0ZSkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5zICE9PSBwcmV2UHJvcHMuY29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2x1bW5zOiB0aGlzLnByb3BzLmNvbHVtbnMgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChwcmVTdGF0ZS5jb2xzICE9PSB0aGlzLnN0YXRlLmNvbHMpIHtcclxuICAgICAgICB0aGlzLnJlc2V0Q29sdW1uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0Q29sdW1uKCkge1xyXG4gICAgY29uc3QgeyBjb2xzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgbmV3Q29sczogYW55ID0gW107XHJcbiAgICBsZXQgY29sc3MgPSBjb2xzIHx8IFtdO1xyXG4gICAgY29sc3MubWFwKChjb2w6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdGVtcCA9IHtcclxuICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgb25IZWFkZXJDZWxsOiAoY29sdW1uOiB7IHdpZHRoOiBhbnkgfSkgPT4gKHtcclxuICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgICAgICAgICBvblJlc2l6ZTogdGhpcy5oYW5kbGVSZXNpemUoaW5kZXgpLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICB9O1xyXG4gICAgICBuZXdDb2xzLnB1c2godGVtcCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBjb2x1bW5zOiBuZXdDb2xzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuIXpmaTpgInkuK3popzoibJcclxuICAgKi9cclxuICBjbGVhclNlbGVjdENvbG9yKCkge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZUluZGV4OiAtMSB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnaW5hdGlvbkJ5U3RvcmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKSB7XHJcbiAgICBjb25zdCB7IGF1dG9PbkNoYW5nZSwgYXV0b1NvcnQsIGF1dG9QYWdpbmF0aW9uLCBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmIChhdXRvT25DaGFuZ2UgPT09IGZhbHNlKSB7XHJcbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaGFuZGxlUGFnaW5hdGlvbiA9ICgpID0+IHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHt9IGFzIHtcclxuICAgICAgICBzaXplPzogc3RyaW5nO1xyXG4gICAgICAgIHBhZ2VTaXplPzogc3RyaW5nO1xyXG4gICAgICAgIGFzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgZGVzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgW3Byb3BOYW1lOiBzdHJpbmddOiBzdHJpbmc7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLmdldFBhZ2luYXRpb25CeVN0b3JlKCkgfHwge307XHJcblxyXG4gICAgICBpZiAoIWlzRW1wdHlPYmoocGFnaW5hdGlvbikpIHtcclxuICAgICAgICBjb25zdCBwID0ge1xyXG4gICAgICAgICAgW3BhZ2luZy5jdXJyZW50S2V5IHx8IFwiY3VycmVudFwiXTogcGFnaW5hdGlvbi5jdXJyZW50LFxyXG4gICAgICAgICAgW3BhZ2luZy5wYWdlU2l6ZUtleSB8fCBcInNpemVcIl06IHBhZ2luYXRpb24ucGFnZVNpemUsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHBhcmFtcywgcCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChhdXRvU29ydCA9PT0gdHJ1ZSAmJiAhaXNFbXB0eU9iaihzb3J0ZXIpKSB7XHJcbiAgICAgICAgaWYgKHNvcnRlci5vcmRlciA9PSBcImFzY2VuZFwiKSB7XHJcbiAgICAgICAgICBwYXJhbXMuYXNjcyA9XHJcbiAgICAgICAgICAgIHNvcnRlci5jb2x1bW4uc29ydEZpZWxkIHx8IHNvcnRlci5jb2x1bW4uZmllbGQgfHwgc29ydGVyLmZpZWxkO1xyXG4gICAgICAgICAgcGFyYW1zLmRlc2NzID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNvcnRlci5vcmRlciA9PSBcImRlc2NlbmRcIikge1xyXG4gICAgICAgICAgcGFyYW1zLmRlc2NzID1cclxuICAgICAgICAgICAgc29ydGVyLmNvbHVtbi5zb3J0RmllbGQgfHwgc29ydGVyLmNvbHVtbi5maWVsZCB8fCBzb3J0ZXIuZmllbGQ7XHJcbiAgICAgICAgICBwYXJhbXMuYXNjcyA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RvcmUucmVsb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbkNoYW5nZUZuID0gdGhpcy5wcm9wcy5vbkNoYW5nZTtcclxuICAgIC8vIOeUqOaIt+S8oOS6hm9uQ2hhbmdl5L+d55WZ55So5oi36Ieq5Li75aSE55CG6KGo5qC85Y+Y5YyW55qE5p2D5YqbXHJcbiAgICBpZiAob25DaGFuZ2VGbikge1xyXG4gICAgICB1dGlscy5jYWxsYmFjayhvbkNoYW5nZUZuLCB0aGlzLCBbcGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYV0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMuYXV0b1BhZ2luYXRpb24pIHtcclxuICAgICAgaGFuZGxlUGFnaW5hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaVsOaNruaooeWei+WvueixoVxyXG4gICAqL1xyXG4gIGdldE1vZGVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0TW9kZWwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiPnOWNleaQnOe0oui/h+a7pOaYvuekulxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcclxuICAgKi9cclxuICBoYW5kbGVTZWFyY2godmFsLCBmaWVsZE9wdGlvbiwgc2VhcmNoQ29sb3IpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWFyY2hUZXh0OiB2YWwsXHJcbiAgICAgIGZpZWxkT3B0aW9uOiBmaWVsZE9wdGlvbixcclxuICAgICAgc2VhcmNoQ29sb3I6IHNlYXJjaENvbG9yLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmqKHlnZfliJfooajnp7vliqjmjpLluo9cclxuICAgKi9cclxuICBtb3ZlUm93ID0gKGRyYWdJbmRleCwgaG92ZXJJbmRleCwgZHJhZywgdGFyZ2V0KSA9PiB7XHJcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICBsZXQgZHJhZ05vZGUgPSBkcmFnLnJlY29yZDtcclxuICAgIGxldCB0YXJnZXROb2RlID0gdGFyZ2V0LnJlY29yZDtcclxuICAgIGRyYWdOb2RlLm1vdmVBcnJheShkcmFnTm9kZSwgdGFyZ2V0Tm9kZSk7XHJcbiAgICBsZXQgaWRzID0gZHJhZ05vZGUucGFyZW50Tm9kZS5nZXRDaGlsZE5vZGVJZHMoKTtcclxuICAgIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgIGlkOiBkcmFnTm9kZS5pZCxcclxuICAgICAgcGFyZW50SWQ6IGRyYWdOb2RlLmF0dHJpYnV0ZS5wYXJlbnRJZCxcclxuICAgICAgaWRzOiBpZHMsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnByb3BzLm1vdmVSb3cpIHtcclxuICAgICAgdGhpcy5wcm9wcy5tb3ZlUm93KHBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b3JlLnJlbG9hZCgpO1xyXG4gICAgfVxyXG4gICAgLy8gcmVxdWVzdChcImh0dHA6Ly9kZW1vLmphdmFzdm4uY29tL2FwaS9hZG1pbi9tZW51cy9kcmFnXCIsIHtcclxuICAgIC8vICAgbWV0aG9kOiBcIlBBVENIXCIsXHJcbiAgICAvLyAgIGRhdGE6IHBhcmFtcyxcclxuICAgIC8vICAgY2FsbGJhY2s6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAvLyAgICAgdGhpcy5zdG9yZS5yZWxvYWQoKTtcclxuICAgIC8vICAgfSxcclxuICAgIC8vIH0pO1xyXG4gIH07XHJcblxyXG4gIGZpbHRlckNvbHVtbihjaGVja2VkVmFsdWUpIHtcclxuICAgIGNvbnN0IGZpbHRlckNvbHVtbnMgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKChjb2w6IENvbHVtblR5cGU8e30+KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld0NvbCA9IHsgLi4uY29sIH0gYXMgQ29sdW1uVHlwZTx7fT4gJiB7IGluaXRTaG93OiBib29sZWFuIH07XHJcbiAgICAgIGlmIChjaGVja2VkVmFsdWUuaW5jbHVkZXMoY29sLmRhdGFJbmRleCkpIHtcclxuICAgICAgICBuZXdDb2wuaW5pdFNob3cgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0NvbC5pbml0U2hvdyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXdDb2w7XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMuc2V0U3RhdGUoeyBjb2x1bW5zOiBmaWx0ZXJDb2x1bW5zIH0pO1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogZmlsdGVyQ29sdW1ucyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2xzOiBmaWx0ZXJDb2x1bW5zIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1ucygpIHtcclxuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgZGlzYWJsZUNvbHVtbnMsIGNvbHVtbnM6IGNvbExpc3RzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZGVmYXVsdFNob3dDb2xzID0gY29sdW1ucy5maWx0ZXIoKGNvbHMpID0+IGNvbHMuaW5pdFNob3cgIT09IGZhbHNlKTtcclxuICAgIGNvbnN0IGRlZmF1bHRIaWRlQ29scyA9IGNvbHVtbnMuZmlsdGVyKChjb2xzKSA9PiBjb2xzLmluaXRTaG93ID09PSBmYWxzZSk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IChcclxuICAgICAgPENoZWNrYm94Lkdyb3VwXHJcbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuZmlsdGVyQ29sdW1uLmJpbmQodGhpcyl9XHJcbiAgICAgICAgb3B0aW9ucz17Y29sTGlzdHMubWFwKFxyXG4gICAgICAgICAgKGNvbDogQ29sdW1uVHlwZTx7fT4pID0+XHJcbiAgICAgICAgICAgICh7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IGNvbC50aXRsZSxcclxuICAgICAgICAgICAgICB2YWx1ZTogY29sLmRhdGFJbmRleCxcclxuICAgICAgICAgICAgfSBhcyBDaGVja2JveE9wdGlvblR5cGUpXHJcbiAgICAgICAgKX1cclxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRTaG93Q29scy5tYXAoKGNvbCkgPT4gY29sLmRhdGFJbmRleCl9XHJcbiAgICAgID48L0NoZWNrYm94Lkdyb3VwPlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBjb2xzID0gZGVmYXVsdFNob3dDb2xzLm1hcCgoY29sKSA9PiB7XHJcbiAgICAgIGlmIChjb2wuZWxsaXBzaXMgJiYgIWNvbC5yZW5kZXIpIHtcclxuICAgICAgICBjb2wuZWxsaXBzaXMgPSB7XHJcbiAgICAgICAgICBzaG93VGl0bGU6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sLnJlbmRlciA9ICh0ZXh0KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8VG9vbHRpcCBwbGFjZW1lbnQ9XCJ0b3BMZWZ0XCIgdGl0bGU9e3RleHR9PlxyXG4gICAgICAgICAgICAgIHt0ZXh0fVxyXG4gICAgICAgICAgICA8L1Rvb2x0aXA+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbDtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IEljb25BY3Rpb246IENvbHVtblR5cGU8e30+ID0ge1xyXG4gICAgICB0aXRsZTogKFxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbXCJ0aC1pY29uXCJdfSByZWY9e3RoaXMudGhJY29uUmVmfT5cclxuICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgIHRpdGxlPVwi6YCJ5oup5pi+56S655qE5YiXXCJcclxuICAgICAgICAgICAgY29udGVudD17Y29udGVudH1cclxuICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIlxyXG4gICAgICAgICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxyXG4gICAgICAgICAgICBvdmVybGF5U3R5bGU9e3sgbWluV2lkdGg6IDQxMCwgbWF4V2lkdGg6IDQ1MCB9fVxyXG4gICAgICAgICAgICBnZXRQb3B1cENvbnRhaW5lcj17KCkgPT4gdGhpcy50aEljb25SZWYuY3VycmVudH1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPEFwcHN0b3JlT3V0bGluZWQgc2l6ZT17MjR9IGNsYXNzTmFtZT17c3R5bGVzW1wiYXBwLXN0b3JlLWljb25cIl19IC8+XHJcbiAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICksXHJcbiAgICAgIGRhdGFJbmRleDogXCJpY29uLW1lbnVcIixcclxuICAgICAga2V5OiBcImljb24tbWVudVwiLFxyXG4gICAgICB3aWR0aDogNTAsXHJcbiAgICAgIGFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAvLyBmaXhlZDogXCJyaWdodFwiLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLnByb3BzLmZpbHRlckNvbHVtbikge1xyXG4gICAgICBjb2xzLnB1c2goSWNvbkFjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbHM7XHJcbiAgfVxyXG5cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzLFxyXG4gICAgICB7XHJcbiAgICAgICAgbG9hZGluZyxcclxuICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgIHBhZ2luYXRpb24gPSB7fSxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yLFxyXG4gICAgICB9ID0gdGhpcy5zdGF0ZSxcclxuICAgICAgcHJvcHMgPSB1dGlscy5vbWl0KFxyXG4gICAgICAgIHRoaXMucHJvcHMsXHJcbiAgICAgICAgW1wic3RvcmVcIiwgXCJvbkNoYW5nZVwiLCBcImNvbHVtbnNcIiwgXCJyZXNldENvbHVtblwiXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICByb3dLZXk6IFwiaWRcIixcclxuICAgICAgICAgIGNsaWNrQ2hhbmdlQ29sb3I6IGZhbHNlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAocHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgcHJvcHMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICBwb3NpdGlvbjogW1wiYm90dG9tUmlnaHRcIl0sXHJcbiAgICAgICAgc2hvd1NpemVDaGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgIHNob3dRdWlja0p1bXBlcjogdHJ1ZSxcclxuICAgICAgICAuLi5wcm9wcy5wYWdpbmF0aW9uLFxyXG4gICAgICAgIC4uLnBhZ2luYXRpb24sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChwcm9wcy5zaG93VG90YWwgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHByb3BzLnBhZ2luYXRpb24uc2hvd1RvdGFsID0gZnVuY3Rpb24gKHRvdGFsLCBbZnJvbSwgdG9dKSB7XHJcbiAgICAgICAgICAvLyByZXR1cm4gXCLmmL7npLogXCIgKyBmcm9tICsgXCIgLSBcIiArIHRvICsgXCLmnaHvvIzlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgICAgcmV0dXJuIFwi5YWxIFwiICsgdG90YWwgKyBcIiDmnaFcIjtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvcHMub25DaGFuZ2UgPSBmdW5jdGlvbiAocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSkge1xyXG4gICAgICBfdGhpcy5vbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKTtcclxuICAgIH07XHJcbiAgICBpZiAocHJvcHMuY2xpY2tDaGFuZ2VDb2xvcikge1xyXG4gICAgICBjb25zdCBvblJvd0ZuID0gcHJvcHMub25Sb3c7XHJcbiAgICAgIHByb3BzLm9uUm93ID0gZnVuY3Rpb24gKHJlY29yZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgY3VzdG9tID0gb25Sb3dGbiA/IG9uUm93Rm4ocmVjb3JkLCBpbmRleCkgOiB7fTtcclxuICAgICAgICBjb25zdCBvbkNsaWNrRm4gPSBjdXN0b20ub25DbGljaztcclxuICAgICAgICBjdXN0b20ub25DbGljayA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmVJbmRleDogaW5kZXgsIC8v6I635Y+W54K55Ye76KGM55qE57Si5byVXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2xpY2tGbiwgX3RoaXMsIFtldmVudF0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGN1c3RvbTtcclxuICAgICAgfTtcclxuICAgICAgcHJvcHMucm93Q2xhc3NOYW1lID0gZnVuY3Rpb24gKHJlY29yZCwgaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gaW5kZXggPT09IF90aGlzLnN0YXRlLmFjdGl2ZUluZGV4XHJcbiAgICAgICAgICA/IGAke3N0eWxlcy5jbGlja1Jvd1N0eWxlfWBcclxuICAgICAgICAgIDogXCJcIjtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBuZXdEYXRhU291cmNlID0gW107XHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdHJlZVV0aWxzLmdldFNlYXJjaE1lbnVEYXRhcyhcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHNlYXJjaFRleHQsXHJcbiAgICAgICAgZmllbGRPcHRpb24sXHJcbiAgICAgICAgc2VhcmNoQ29sb3JcclxuICAgICAgKTtcclxuICAgICAgbmV3RGF0YVNvdXJjZSA9IGRhdGEudHJlZURhdGFzO1xyXG4gICAgICBwcm9wcy5leHBhbmRlZFJvd0tleXMgPSBkYXRhLm9wZW5LZXlzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICB9XHJcbiAgICBwcm9wcy5zdG9yZSA9IHByb3BzLnN0b3JlIHx8IHt9O1xyXG4gICAgcHJvcHMuc3RvcmUuYXV0b0xvYWQgPSBwcm9wcy5zdG9yZS5hdXRvTG9hZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XHJcbiAgICBjb25zdCB7IGRyYWdhYmxlIH0gPSBfdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGRyYWdhYmxlUHJvcHMgPVxyXG4gICAgICBkcmFnYWJsZSA9PT0gdHJ1ZVxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBjb21wb25lbnRzOiBCb2R5Um93Q29tcG9uZW50LFxyXG4gICAgICAgICAgICBvblJvdzogKHJlY29yZCwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICAgIG1vdmVSb3c6IHRoaXMubW92ZVJvdyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7fTtcclxuICAgIGxldCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuXHJcbiAgICBjb25zdCByZXNpemVQcm9wcyA9XHJcbiAgICAgIHJlc2l6ZUNvbHVtbiA9PT0gdHJ1ZSA/IHsgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzIH0gOiBudWxsO1xyXG5cclxuICAgIGNvbnN0IERlZmF1bHRUYWJsZSA9IChcclxuICAgICAgPFRhYmxlXHJcbiAgICAgICAgY2hpbGRyZW5Db2x1bW5OYW1lPVwiY2hpbGROb2Rlc1wiXHJcbiAgICAgICAgZGF0YVNvdXJjZT17bmV3RGF0YVNvdXJjZX1cclxuICAgICAgICBjb2x1bW5zPXt0aGlzLmdldENvbHVtbnMoKX1cclxuICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzW1wibnNjLXRhYmxlXCJdfVxyXG4gICAgICAgIGxvY2FsZT17eyBlbXB0eVRleHQ6IDxOb0RhdGEgLz4gfX1cclxuICAgICAgICB7Li4ucmVzaXplUHJvcHN9XHJcbiAgICAgICAgey4uLnByb3BzfVxyXG4gICAgICAgIHsuLi5kcmFnYWJsZVByb3BzfVxyXG4gICAgICAvPlxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gZHJhZ2FibGUgPT09IHRydWUgPyAoXHJcbiAgICAgIDxEbmRQcm92aWRlciBiYWNrZW5kPXtIVE1MNUJhY2tlbmR9PntEZWZhdWx0VGFibGV9PC9EbmRQcm92aWRlcj5cclxuICAgICkgOiAoXHJcbiAgICAgIERlZmF1bHRUYWJsZVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHdpdGhaaExvY2FsZShOU0NUYWJsZSk7XHJcbiJdfQ==