nsc-react-component 2.0.15 → 2.0.18

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 (235) hide show
  1. package/lib/{affix → base/affix}/index.d.ts +0 -0
  2. package/lib/{affix → base/affix}/index.js +1 -1
  3. package/lib/{alert → base/alert}/index.d.ts +0 -0
  4. package/lib/{alert → base/alert}/index.js +1 -1
  5. package/lib/{anchor → base/anchor}/index.d.ts +0 -0
  6. package/lib/{anchor → base/anchor}/index.js +1 -1
  7. package/lib/{avatar → base/avatar}/index.d.ts +0 -0
  8. package/lib/{avatar → base/avatar}/index.js +1 -1
  9. package/lib/{backTop → base/backTop}/index.d.ts +0 -0
  10. package/lib/{backTop → base/backTop}/index.js +1 -1
  11. package/lib/{badge → base/badge}/index.d.ts +0 -0
  12. package/lib/{badge → base/badge}/index.js +1 -1
  13. package/lib/{breadcrumb → base/breadcrumb}/index.d.ts +0 -0
  14. package/lib/{breadcrumb → base/breadcrumb}/index.js +1 -1
  15. package/lib/{button → base/button}/index.d.ts +0 -0
  16. package/lib/{button → base/button}/index.js +2 -2
  17. package/lib/{button → base/button}/index.less +0 -0
  18. package/lib/{calendar → base/calendar}/index.d.ts +0 -0
  19. package/lib/{calendar → base/calendar}/index.js +1 -1
  20. package/lib/{card → base/card}/index.d.ts +0 -0
  21. package/lib/{card → base/card}/index.js +1 -1
  22. package/lib/{carousel → base/carousel}/index.d.ts +0 -0
  23. package/lib/{carousel → base/carousel}/index.js +1 -1
  24. package/lib/{cascader → base/cascader}/index.d.ts +0 -0
  25. package/lib/base/cascader/index.js +268 -0
  26. package/lib/{chart → base/chart}/index.d.ts +0 -0
  27. package/lib/base/chart/index.js +353 -0
  28. package/lib/{checkbox → base/checkbox}/CheckboxGroup.d.ts +0 -0
  29. package/lib/base/checkbox/CheckboxGroup.js +340 -0
  30. package/lib/{checkbox → base/checkbox}/index.d.ts +0 -0
  31. package/lib/{checkbox → base/checkbox}/index.js +1 -1
  32. package/lib/{collapse → base/collapse}/index.d.ts +0 -0
  33. package/lib/{collapse → base/collapse}/index.js +1 -1
  34. package/lib/{comment → base/comment}/index.d.ts +0 -0
  35. package/lib/{comment → base/comment}/index.js +1 -1
  36. package/lib/{common → base/common}/BodyRow/index.d.ts +0 -0
  37. package/lib/{common → base/common}/BodyRow/index.js +1 -1
  38. package/lib/{common → base/common}/BodyRow/index.less +0 -0
  39. package/lib/{common → base/common}/Icon.d.ts +0 -0
  40. package/lib/{common → base/common}/Icon.js +1 -1
  41. package/lib/{common → base/common}/IconFont.d.ts +0 -0
  42. package/lib/base/common/IconFont.js +17 -0
  43. package/lib/{common → base/common}/NoAuthority.d.ts +0 -0
  44. package/lib/{common → base/common}/NoAuthority.js +1 -1
  45. package/lib/{common → base/common}/NoData.d.ts +0 -0
  46. package/lib/{common → base/common}/NoData.js +1 -1
  47. package/lib/{common → base/common}/NoData.less +0 -0
  48. package/lib/{common → base/common}/NoMessage.d.ts +0 -0
  49. package/lib/{common → base/common}/NoMessage.js +1 -1
  50. package/lib/{common → base/common}/NoNetWork.d.ts +0 -0
  51. package/lib/{common → base/common}/NoNetWork.js +1 -1
  52. package/lib/{common → base/common}/Page404.d.ts +0 -0
  53. package/lib/{common → base/common}/Page404.js +1 -1
  54. package/lib/{common → base/common}/PageRequest.d.ts +0 -0
  55. package/lib/{common → base/common}/PageRequest.js +1 -1
  56. package/lib/{common → base/common}/TreePanel.d.ts +2 -1
  57. package/lib/base/common/TreePanel.js +290 -0
  58. package/lib/{common → base/common}/img/NoAuthority.png +0 -0
  59. package/lib/{common → base/common}/img/NoData.png +0 -0
  60. package/lib/{common → base/common}/img/NoMessage.png +0 -0
  61. package/lib/{common → base/common}/img/NoNetWork.png +0 -0
  62. package/lib/{common → base/common}/img/Page404.png +0 -0
  63. package/lib/{common → base/common}/withZhLocale.d.ts +0 -0
  64. package/lib/base/common/withZhLocale.js +20 -0
  65. package/lib/{configProvider → base/configProvider}/index.d.ts +0 -0
  66. package/lib/{configProvider → base/configProvider}/index.js +1 -1
  67. package/lib/{datepick → base/datepick}/Rangepicker.d.ts +0 -0
  68. package/lib/base/datepick/Rangepicker.js +553 -0
  69. package/lib/{datepick → base/datepick}/index.d.ts +0 -0
  70. package/lib/{datepick → base/datepick}/index.js +1 -1
  71. package/lib/{datepick → base/datepick}/index.less +0 -0
  72. package/lib/{descriptions → base/descriptions}/index.d.ts +0 -0
  73. package/lib/{descriptions → base/descriptions}/index.js +1 -1
  74. package/lib/{divider → base/divider}/index.d.ts +0 -0
  75. package/lib/{divider → base/divider}/index.js +1 -1
  76. package/lib/{drawer → base/drawer}/index.d.ts +0 -0
  77. package/lib/{drawer → base/drawer}/index.js +1 -1
  78. package/lib/{dropdown → base/dropdown}/index.d.ts +0 -0
  79. package/lib/{dropdown → base/dropdown}/index.js +1 -1
  80. package/lib/{form → base/form}/Form.d.ts +0 -0
  81. package/lib/base/form/Form.js +415 -0
  82. package/lib/{form → base/form}/filed/Cascader.d.ts +0 -0
  83. package/lib/{form → base/form}/filed/Cascader.js +1 -1
  84. package/lib/{form → base/form}/filed/Checkbox.d.ts +0 -0
  85. package/lib/{form → base/form}/filed/Checkbox.js +1 -1
  86. package/lib/{form → base/form}/filed/DatePicker.d.ts +0 -0
  87. package/lib/{form → base/form}/filed/DatePicker.js +1 -1
  88. package/lib/{form → base/form}/filed/FormItem.d.ts +0 -0
  89. package/lib/{form → base/form}/filed/FormItem.js +1 -1
  90. package/lib/{form → base/form}/filed/Input.d.ts +0 -0
  91. package/lib/{form → base/form}/filed/Input.js +1 -1
  92. package/lib/{form → base/form}/filed/InputEamil.d.ts +0 -0
  93. package/lib/{form → base/form}/filed/InputEamil.js +1 -1
  94. package/lib/{form → base/form}/filed/InputNumber.d.ts +0 -0
  95. package/lib/{form → base/form}/filed/InputNumber.js +1 -1
  96. package/lib/{form → base/form}/filed/InputPassword.d.ts +0 -0
  97. package/lib/{form → base/form}/filed/InputPassword.js +1 -1
  98. package/lib/{form → base/form}/filed/Item.d.ts +0 -0
  99. package/lib/base/form/filed/Item.js +161 -0
  100. package/lib/{form → base/form}/filed/Radio.d.ts +0 -0
  101. package/lib/{form → base/form}/filed/Radio.js +1 -1
  102. package/lib/{form → base/form}/filed/RangerPicker.d.ts +0 -0
  103. package/lib/{form → base/form}/filed/RangerPicker.js +1 -1
  104. package/lib/{form → base/form}/filed/Rate.d.ts +0 -0
  105. package/lib/{form → base/form}/filed/Rate.js +1 -1
  106. package/lib/{form → base/form}/filed/Select.d.ts +0 -0
  107. package/lib/{form → base/form}/filed/Select.js +1 -1
  108. package/lib/{form → base/form}/filed/Slider.d.ts +0 -0
  109. package/lib/{form → base/form}/filed/Slider.js +1 -1
  110. package/lib/{form → base/form}/filed/Switch.d.ts +0 -0
  111. package/lib/{form → base/form}/filed/Switch.js +1 -1
  112. package/lib/{form → base/form}/filed/TagSelect.d.ts +0 -0
  113. package/lib/{form → base/form}/filed/TagSelect.js +1 -1
  114. package/lib/{form → base/form}/filed/TextArea.d.ts +0 -0
  115. package/lib/{form → base/form}/filed/TextArea.js +1 -1
  116. package/lib/{form → base/form}/filed/Upload.d.ts +0 -0
  117. package/lib/{form → base/form}/filed/Upload.js +1 -1
  118. package/lib/{form → base/form}/index.d.ts +0 -0
  119. package/lib/{form → base/form}/index.js +1 -1
  120. package/lib/{grid → base/grid}/Col.d.ts +0 -0
  121. package/lib/{grid → base/grid}/Col.js +1 -1
  122. package/lib/{grid → base/grid}/Row.d.ts +0 -0
  123. package/lib/{grid → base/grid}/Row.js +1 -1
  124. package/lib/{grid → base/grid}/index.d.ts +0 -0
  125. package/lib/{grid → base/grid}/index.js +0 -0
  126. package/lib/{image → base/image}/index.d.ts +0 -0
  127. package/lib/{image → base/image}/index.js +1 -1
  128. package/lib/{input → base/input}/Email.d.ts +0 -0
  129. package/lib/{input → base/input}/Email.js +1 -1
  130. package/lib/{input → base/input}/Number.d.ts +0 -0
  131. package/lib/{input → base/input}/Number.js +1 -1
  132. package/lib/{input → base/input}/Password.d.ts +0 -3
  133. package/lib/{input → base/input}/Password.js +1 -1
  134. package/lib/{input → base/input}/Search.d.ts +0 -3
  135. package/lib/{input → base/input}/Search.js +1 -1
  136. package/lib/{input → base/input}/TextArea.d.ts +0 -3
  137. package/lib/{input → base/input}/TextArea.js +1 -1
  138. package/lib/{input → base/input}/index.d.ts +0 -0
  139. package/lib/base/input/index.js +242 -0
  140. package/lib/{input → base/input}/index.less +0 -0
  141. package/lib/{layout → base/layout}/index.d.ts +0 -0
  142. package/lib/{layout → base/layout}/index.js +1 -1
  143. package/lib/{list → base/list}/index.d.ts +0 -0
  144. package/lib/{list → base/list}/index.js +1 -1
  145. package/lib/{menu → base/menu}/index.d.ts +0 -0
  146. package/lib/base/menu/index.js +247 -0
  147. package/lib/{message → base/message}/index.d.ts +0 -0
  148. package/lib/{message → base/message}/index.js +1 -1
  149. package/lib/{modal → base/modal}/index.d.ts +0 -0
  150. package/lib/{modal → base/modal}/index.js +1 -1
  151. package/lib/{notification → base/notification}/index.d.ts +0 -0
  152. package/lib/{notification → base/notification}/index.js +1 -1
  153. package/lib/{pageHeader → base/pageHeader}/index.d.ts +0 -0
  154. package/lib/{pageHeader → base/pageHeader}/index.js +1 -1
  155. package/lib/{pagination → base/pagination}/index.d.ts +0 -0
  156. package/lib/{pagination → base/pagination}/index.js +1 -1
  157. package/lib/{popconfirm → base/popconfirm}/index.d.ts +0 -0
  158. package/lib/{popconfirm → base/popconfirm}/index.js +1 -1
  159. package/lib/{popover → base/popover}/index.d.ts +0 -0
  160. package/lib/{popover → base/popover}/index.js +1 -1
  161. package/lib/{progress → base/progress}/index.d.ts +0 -0
  162. package/lib/{progress → base/progress}/index.js +1 -1
  163. package/lib/{radio → base/radio}/RadioGroup.d.ts +0 -0
  164. package/lib/base/radio/RadioGroup.js +378 -0
  165. package/lib/{radio → base/radio}/index.d.ts +0 -0
  166. package/lib/{radio → base/radio}/index.js +1 -1
  167. package/lib/{result → base/result}/index.d.ts +0 -0
  168. package/lib/{result → base/result}/index.js +1 -1
  169. package/lib/{select → base/select}/index.d.ts +0 -0
  170. package/lib/base/select/index.js +529 -0
  171. package/lib/{select → base/select}/index.less +0 -0
  172. package/lib/{skeleton → base/skeleton}/index.d.ts +0 -0
  173. package/lib/{skeleton → base/skeleton}/index.js +1 -1
  174. package/lib/{space → base/space}/index.d.ts +0 -0
  175. package/lib/{space → base/space}/index.js +1 -1
  176. package/lib/{spin → base/spin}/index.d.ts +0 -0
  177. package/lib/{spin → base/spin}/index.js +1 -1
  178. package/lib/{statistic → base/statistic}/index.d.ts +0 -0
  179. package/lib/{statistic → base/statistic}/index.js +1 -1
  180. package/lib/{steps → base/steps}/index.d.ts +0 -0
  181. package/lib/{steps → base/steps}/index.js +1 -1
  182. package/lib/{table → base/table}/index.d.ts +10 -2
  183. package/lib/base/table/index.js +902 -0
  184. package/lib/{table → base/table}/index.module.less +22 -0
  185. package/lib/{table → base/table}/resize.module.less +0 -0
  186. package/lib/{tabs → base/tabs}/Tabpane.d.ts +0 -0
  187. package/lib/{tabs → base/tabs}/Tabpane.js +1 -1
  188. package/lib/{tabs → base/tabs}/index.d.ts +0 -0
  189. package/lib/{tabs → base/tabs}/index.js +1 -1
  190. package/lib/{tagSelect → base/tagSelect}/TagSelect.d.ts +0 -0
  191. package/lib/base/tagSelect/TagSelect.js +268 -0
  192. package/lib/{tagSelect → base/tagSelect}/index.d.ts +0 -0
  193. package/lib/base/tagSelect/index.js +188 -0
  194. package/lib/{tagSelect → base/tagSelect}/index.less +0 -0
  195. package/lib/{timeline → base/timeline}/index.d.ts +0 -0
  196. package/lib/{timeline → base/timeline}/index.js +1 -1
  197. package/lib/{tooltip → base/tooltip}/index.d.ts +0 -0
  198. package/lib/{tooltip → base/tooltip}/index.js +1 -1
  199. package/lib/{tree → base/tree}/TreeSearch.d.ts +0 -0
  200. package/lib/base/tree/TreeSearch.js +273 -0
  201. package/lib/{tree → base/tree}/index.d.ts +0 -0
  202. package/lib/base/tree/index.js +307 -0
  203. package/lib/{tree → base/tree}/index.less +0 -0
  204. package/lib/{typography → base/typography}/index.d.ts +0 -0
  205. package/lib/{typography → base/typography}/index.js +1 -1
  206. package/lib/index.d.ts +63 -63
  207. package/lib/index.js +63 -63
  208. package/lib/{pageComponents → page}/BasePage/Form.d.ts +0 -0
  209. package/lib/page/BasePage/Form.js +244 -0
  210. package/lib/{pageComponents → page}/BasePage/index.d.ts +0 -0
  211. package/lib/page/BasePage/index.js +636 -0
  212. package/lib/{pageComponents → page}/BasePage/index.module.less +0 -0
  213. package/lib/utils.d.ts +1 -0
  214. package/lib/utils.js +16 -9
  215. package/package.json +1 -1
  216. package/lib/cascader/index.js +0 -268
  217. package/lib/chart/index.js +0 -353
  218. package/lib/checkbox/CheckboxGroup.js +0 -340
  219. package/lib/common/IconFont.js +0 -17
  220. package/lib/common/TreePanel.js +0 -303
  221. package/lib/common/withZhLocale.js +0 -20
  222. package/lib/datepick/Rangepicker.js +0 -553
  223. package/lib/form/Form.js +0 -415
  224. package/lib/form/filed/Item.js +0 -161
  225. package/lib/input/index.js +0 -242
  226. package/lib/menu/index.js +0 -247
  227. package/lib/pageComponents/BasePage/Form.js +0 -244
  228. package/lib/pageComponents/BasePage/index.js +0 -658
  229. package/lib/radio/RadioGroup.js +0 -378
  230. package/lib/select/index.js +0 -529
  231. package/lib/table/index.js +0 -756
  232. package/lib/tagSelect/TagSelect.js +0 -268
  233. package/lib/tagSelect/index.js +0 -188
  234. package/lib/tree/TreeSearch.js +0 -274
  235. package/lib/tree/index.js +0 -293
@@ -1,756 +0,0 @@
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
-
3
- import "antd/es/table/style/css";
4
- import _Table from "antd/es/table";
5
- import "antd/es/space/style/css";
6
- import _Space from "antd/es/space";
7
- import "antd/es/button/style/css";
8
- import _Button from "antd/es/button";
9
- import "antd/es/popover/style/css";
10
- import _Popover from "antd/es/popover";
11
- import "antd/es/tooltip/style/css";
12
- import _Tooltip from "antd/es/tooltip";
13
- import "antd/es/checkbox/style/css";
14
- import _Checkbox from "antd/es/checkbox";
15
- var _excluded = ["onResize", "width"],
16
- _excluded2 = ["listeners"];
17
-
18
- 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); }
19
-
20
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
21
-
22
- 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."); }
23
-
24
- 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; }
25
-
26
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
-
28
- 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; }
29
-
30
- 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; }
31
-
32
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
33
-
34
- 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."); }
35
-
36
- 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); }
37
-
38
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
39
-
40
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
41
-
42
- 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; }
43
-
44
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
45
-
46
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
47
-
48
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
49
-
50
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
51
-
52
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
53
-
54
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
55
-
56
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
57
-
58
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
59
-
60
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
61
-
62
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
63
-
64
- 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; }
65
-
66
- 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; }
67
-
68
- 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; }
69
-
70
- /*
71
- * @Descripttion:
72
- * @version:
73
- * @Author: rxzhu
74
- * @Date: 2021-03-23 08:46:20
75
- * @LastEditors: rxzhu
76
- * @LastEditTime: 2021-03-23 10:30:42
77
- */
78
- import { AppstoreOutlined, CheckOutlined, SearchOutlined } from "@ant-design/icons";
79
- import { isEmptyObj } from "@bj-nsc/functions";
80
- import Store, { PageStore } from "@bj-nsc/msn";
81
- import { utils } from "@bj-nsc/msn/lib/utils";
82
- import * as React from "react";
83
- import { DndProvider } from "react-dnd";
84
- import BodyRow, { DndContextType, IBodyRowProps } from "../common/BodyRow";
85
- import treeUtils from "../treeUtils";
86
- import styles from "./index.module.less";
87
- var BodyRowComponent = BodyRow.BodyRowComponent,
88
- HTML5Backend = BodyRow.HTML5Backend;
89
- import withZhLocale from "../common/withZhLocale";
90
- import { NoData } from "..";
91
- import { Resizable } from "react-resizable";
92
- import "./resize.module.less";
93
- import { getNode } from "../utils";
94
- export { DndContextType, IBodyRowProps };
95
-
96
- var ResizeableTitle = function ResizeableTitle(props) {
97
- var onResize = props.onResize,
98
- width = props.width,
99
- restProps = _objectWithoutProperties(props, _excluded);
100
-
101
- return /*#__PURE__*/React.createElement(Resizable, {
102
- width: width || 150,
103
- height: 0,
104
- onResize: onResize,
105
- draggableOpts: {
106
- enableUserSelectHack: false
107
- }
108
- }, /*#__PURE__*/React.createElement("th", restProps));
109
- };
110
-
111
- var NSCTable = /*#__PURE__*/function (_React$Component) {
112
- _inherits(NSCTable, _React$Component);
113
-
114
- var _super = _createSuper(NSCTable);
115
-
116
- function NSCTable(props) {
117
- var _this2;
118
-
119
- _classCallCheck(this, NSCTable);
120
-
121
- _this2 = _super.call(this, props);
122
-
123
- _defineProperty(_assertThisInitialized(_this2), "store", {});
124
-
125
- _defineProperty(_assertThisInitialized(_this2), "thIconRef", /*#__PURE__*/React.createRef());
126
-
127
- _defineProperty(_assertThisInitialized(_this2), "tableSearchRef", /*#__PURE__*/React.createRef());
128
-
129
- _defineProperty(_assertThisInitialized(_this2), "state", {
130
- dataSource: [],
131
- columns: [],
132
- loading: false,
133
- pagination: {},
134
- activeIndex: -1,
135
- //搜索文本
136
- searchText: null,
137
- fieldOption: null,
138
- searchColor: null,
139
- cols: [],
140
- sorts: [],
141
- filterParams: {},
142
- tableSize: "middle",
143
- sortType: "sigle"
144
- });
145
-
146
- _defineProperty(_assertThisInitialized(_this2), "listeners", {
147
- onBeforeLoad: null,
148
- load: null
149
- });
150
-
151
- _defineProperty(_assertThisInitialized(_this2), "components", {
152
- header: {
153
- cell: ResizeableTitle
154
- }
155
- });
156
-
157
- _defineProperty(_assertThisInitialized(_this2), "handleResize", function (index) {
158
- return function (e, _ref) {
159
- var size = _ref.size;
160
- var cols = _this2.state.cols;
161
-
162
- var nextColumns = _toConsumableArray(cols);
163
-
164
- nextColumns[index] = _objectSpread(_objectSpread({}, nextColumns[index]), {}, {
165
- width: size.width
166
- });
167
-
168
- _this2.setState({
169
- cols: nextColumns
170
- });
171
- };
172
- });
173
-
174
- _defineProperty(_assertThisInitialized(_this2), "moveRow", function (dragIndex, hoverIndex, drag, target) {
175
- var _this = _assertThisInitialized(_this2);
176
-
177
- var dragNode = drag.record;
178
- var targetNode = target.record;
179
- dragNode.moveArray(dragNode, targetNode);
180
- var ids = dragNode.parentNode.getChildNodeIds();
181
- var params = {
182
- id: dragNode.id,
183
- parentId: dragNode.attribute.parentId,
184
- ids: ids
185
- };
186
-
187
- if (_this2.props.moveRow) {
188
- _this2.props.moveRow(params);
189
- } else {
190
- _this2.store.reload();
191
- }
192
- });
193
-
194
- if (props.store instanceof Store) {
195
- _this2.store = props.store;
196
- } else {
197
- var _ref2 = props.store || {},
198
- _ref2$listeners = _ref2.listeners,
199
- listenersProps = _ref2$listeners === void 0 ? {} : _ref2$listeners,
200
- restStore = _objectWithoutProperties(_ref2, _excluded2);
201
-
202
- var storeProps = _objectSpread(_objectSpread({
203
- model: "model",
204
- component: _assertThisInitialized(_this2),
205
- listeners: {
206
- onBeforeLoad: function onBeforeLoad(store, options) {
207
- _this2.setState({
208
- loading: true
209
- });
210
-
211
- utils.callback(listenersProps.onBeforeLoad, _assertThisInitialized(_this2), [store, options]);
212
- },
213
- dataChanged: function dataChanged(data, modelData, store) {
214
- var paging = !(_this2.props.pagination === false);
215
-
216
- if (paging && !_this2.props.dataSource) {
217
- _this2.setState({
218
- dataSource: modelData,
219
- pagination: store.getPagination(),
220
- loading: false,
221
- activeIndex: -1
222
- });
223
- } else {
224
- _this2.setState({
225
- dataSource: modelData,
226
- loading: false
227
- });
228
- }
229
-
230
- utils.callback(listenersProps.dataChanged, _assertThisInitialized(_this2), [data, modelData, store, paging]);
231
- },
232
- load: function load(data, modelData, store) {
233
- utils.callback(listenersProps.load, _assertThisInitialized(_this2), [data, modelData, store]);
234
- },
235
- onErrorLoad: function onErrorLoad(err, response) {
236
- _this2.setState({
237
- loading: false
238
- });
239
-
240
- utils.callback(listenersProps.onErrorLoad, _assertThisInitialized(_this2), [err, response]);
241
- }
242
- },
243
- data: restStore.data ? restStore.data : props.dataSource ? props.dataSource : null
244
- }, restStore), {}, {
245
- autoLoad: restStore.autoLoad === false ? false : true
246
- });
247
-
248
- _this2.store = new PageStore(Object.assign({}, storeProps, {
249
- pagination: _objectSpread({
250
- current: 1
251
- }, _this2.props.pagination)
252
- }));
253
- }
254
-
255
- return _this2;
256
- }
257
-
258
- _createClass(NSCTable, [{
259
- key: "componentDidMount",
260
- value: function componentDidMount() {
261
- var resizeColumn = this.props.resizeColumn;
262
-
263
- if (!resizeColumn) {
264
- this.setState({
265
- columns: _toConsumableArray(this.props.columns)
266
- });
267
- } else {
268
- this.setState({
269
- cols: _toConsumableArray(this.props.columns)
270
- }); // this.resetColumn();
271
- }
272
-
273
- var store = this.props.store;
274
-
275
- if (store && store.data) {
276
- this.store.setData(store.data);
277
- }
278
- }
279
- }, {
280
- key: "componentDidUpdate",
281
- value: function componentDidUpdate(prevProps, preState) {
282
- var resizeColumn = this.props.resizeColumn;
283
-
284
- if (!resizeColumn) {
285
- if (this.props.columns !== prevProps.columns) {
286
- this.setState({
287
- columns: this.props.columns
288
- });
289
- }
290
- } else {
291
- if (preState.cols !== this.state.cols) {
292
- this.resetColumn();
293
- }
294
- }
295
- }
296
- }, {
297
- key: "resetColumn",
298
- value: function resetColumn() {
299
- var _this3 = this;
300
-
301
- var cols = this.state.cols;
302
- var newCols = [];
303
- var colss = cols || [];
304
- colss.map(function (col, index) {
305
- var temp = _objectSpread(_objectSpread({}, col), {}, {
306
- onHeaderCell: function onHeaderCell(column) {
307
- return {
308
- width: column.width,
309
- onResize: _this3.handleResize(index)
310
- };
311
- }
312
- });
313
-
314
- newCols.push(temp);
315
- });
316
- this.setState({
317
- columns: newCols
318
- });
319
- }
320
- /**
321
- * 清除选中颜色
322
- */
323
-
324
- }, {
325
- key: "clearSelectColor",
326
- value: function clearSelectColor() {
327
- this.setState({
328
- activeIndex: -1
329
- });
330
- return this;
331
- }
332
- }, {
333
- key: "getPaginationByStore",
334
- value: function getPaginationByStore() {
335
- return this.store.getPagination();
336
- }
337
- }, {
338
- key: "onChange",
339
- value: function onChange(pagination, filters, sorter, extra) {
340
- var _this4 = this;
341
-
342
- console.log("sorter", sorter);
343
- var _this$props = this.props,
344
- autoOnChange = _this$props.autoOnChange,
345
- autoSort = _this$props.autoSort,
346
- autoPagination = _this$props.autoPagination,
347
- onChange = _this$props.onChange;
348
- console.log("autoSort", autoSort);
349
- console.log("autoPagination", autoPagination);
350
- var filterParams = this.state.filterParams;
351
-
352
- if (autoOnChange === false) {
353
- onChange && onChange(pagination, filters, sorter, extra);
354
- return;
355
- }
356
-
357
- var handlePagination = function handlePagination() {
358
- var params = {};
359
- var paging = _this4.getPaginationByStore() || {};
360
-
361
- if (!isEmptyObj(pagination)) {
362
- var _p;
363
-
364
- var p = (_p = {}, _defineProperty(_p, paging.currentKey || "current", pagination.current), _defineProperty(_p, paging.pageSizeKey || "size", pagination.pageSize), _p);
365
- Object.assign(params, p);
366
- }
367
-
368
- if (autoSort === true && !isEmptyObj(sorter)) {
369
- if (sorter.order == "ascend") {
370
- params.ascs = sorter.column.sortField || sorter.column.field || sorter.field;
371
- params.descs = "";
372
- }
373
-
374
- if (sorter.order == "descend") {
375
- params.descs = sorter.column.sortField || sorter.column.field || sorter.field;
376
- params.ascs = "";
377
- }
378
- }
379
-
380
- params = _objectSpread(_objectSpread({}, filterParams), params);
381
-
382
- _this4.store.reload({
383
- params: params
384
- });
385
- };
386
-
387
- var onChangeFn = this.props.onChange; // 用户传了onChange保留用户自主处理表格变化的权力
388
-
389
- if (onChangeFn) {
390
- utils.callback(onChangeFn, this, [pagination, filters, sorter, extra]);
391
- }
392
-
393
- if (this.props.autoPagination) {
394
- handlePagination();
395
- }
396
- }
397
- }, {
398
- key: "getStore",
399
- value: function getStore() {
400
- return this.store;
401
- }
402
- /**
403
- * 获取数据模型对象
404
- */
405
-
406
- }, {
407
- key: "getModel",
408
- value: function getModel() {
409
- return this.store.getModel();
410
- }
411
- /**
412
- * 菜单搜索过滤显示
413
- * @param {String} val
414
- */
415
-
416
- }, {
417
- key: "handleSearch",
418
- value: function handleSearch(val, fieldOption, searchColor) {
419
- this.setState({
420
- searchText: val,
421
- fieldOption: fieldOption,
422
- searchColor: searchColor
423
- });
424
- }
425
- /**
426
- * 模块列表移动排序
427
- */
428
-
429
- }, {
430
- key: "filterColumn",
431
- value: function filterColumn(checkedValue) {
432
- var filterColumns = this.props.columns.map(function (col) {
433
- var newCol = _objectSpread({}, col);
434
-
435
- if (checkedValue.includes(col.dataIndex)) {
436
- newCol.initShow = true;
437
- } else {
438
- newCol.initShow = false;
439
- }
440
-
441
- return newCol;
442
- }); // this.setState({ columns: filterColumns });
443
-
444
- var resizeColumn = this.props.resizeColumn;
445
-
446
- if (!resizeColumn) {
447
- this.setState({
448
- columns: filterColumns
449
- });
450
- } else {
451
- this.setState({
452
- cols: filterColumns
453
- });
454
- }
455
- }
456
- }, {
457
- key: "getColumns",
458
- value: function getColumns() {
459
- var _this5 = this;
460
-
461
- var _this = this;
462
-
463
- var columns = this.state.columns;
464
- var colLists = this.props.columns;
465
- var defaultShowCols = columns.filter(function (cols) {
466
- return cols.initShow !== false;
467
- });
468
- var content = /*#__PURE__*/React.createElement(_Checkbox.Group, {
469
- onChange: this.filterColumn.bind(this),
470
- options: colLists.map(function (col) {
471
- return {
472
- label: col.title,
473
- value: col.dataIndex,
474
- disabled: col.filterColumn === false
475
- };
476
- }),
477
- defaultValue: defaultShowCols.map(function (col) {
478
- return col.dataIndex;
479
- })
480
- });
481
- var cols = defaultShowCols.map(function (col) {
482
- if (col.ellipsis && !col.render) {
483
- col.ellipsis = {
484
- showTitle: false
485
- };
486
-
487
- col.render = function (text) {
488
- return /*#__PURE__*/React.createElement(_Tooltip, {
489
- placement: "topLeft",
490
- title: text
491
- }, text);
492
- };
493
- }
494
-
495
- return col;
496
- });
497
- var IconAction = {
498
- title: /*#__PURE__*/React.createElement("div", {
499
- className: styles["th-icon"],
500
- ref: this.thIconRef
501
- }, /*#__PURE__*/React.createElement(_Popover, {
502
- title: "\u9009\u62E9\u663E\u793A\u7684\u5217",
503
- content: content,
504
- placement: "bottomRight",
505
- trigger: "click",
506
- overlayStyle: {
507
- minWidth: 410,
508
- maxWidth: 450
509
- },
510
- getPopupContainer: function getPopupContainer() {
511
- return _this5.thIconRef.current;
512
- }
513
- }, /*#__PURE__*/React.createElement(AppstoreOutlined, {
514
- size: 24,
515
- className: styles["app-store-icon"]
516
- }))),
517
- dataIndex: "icon-menu",
518
- key: "icon-menu",
519
- width: 50,
520
- align: "center" // fixed: "right",
521
-
522
- };
523
-
524
- if (this.props.filterColumn) {
525
- cols.push(IconAction);
526
- }
527
-
528
- cols.map(function (item, index) {
529
- if (!isEmptyObj(item.filterProps)) {
530
- var obj = _objectSpread({}, item);
531
-
532
- var _item$filterProps = item.filterProps,
533
- type = _item$filterProps.type,
534
- props = _item$filterProps.props,
535
- searchKey = _item$filterProps.searchKey;
536
- var Div = null;
537
- var text = item.title;
538
- Div = getNode(type, _objectSpread(_objectSpread({}, props), {}, {
539
- placeholder: "\u641C\u7D22".concat(text)
540
- }));
541
- obj = _objectSpread({
542
- filterDropdown: function filterDropdown(_ref3) {
543
- var setSelectedKeys = _ref3.setSelectedKeys,
544
- selectedKeys = _ref3.selectedKeys,
545
- confirm = _ref3.confirm,
546
- clearFilters = _ref3.clearFilters;
547
- return /*#__PURE__*/React.createElement("div", {
548
- className: styles["search"]
549
- }, /*#__PURE__*/React.createElement("div", {
550
- className: styles["space"]
551
- }, Div), /*#__PURE__*/React.createElement(_Space, null, /*#__PURE__*/React.createElement(_Button, {
552
- type: "primary",
553
- onClick: function onClick() {
554
- var _this5$tableSearchRef;
555
-
556
- confirm();
557
- var filterParams = _this5.state.filterParams;
558
-
559
- var newFilterParams = _objectSpread({}, filterParams);
560
-
561
- var key = item.field || item.dataIndex;
562
- newFilterParams[key] = (_this5$tableSearchRef = _this5.tableSearchRef.current) === null || _this5$tableSearchRef === void 0 ? void 0 : _this5$tableSearchRef.getValue();
563
-
564
- _this5.setState({
565
- filterParams: _objectSpread({}, newFilterParams)
566
- });
567
-
568
- _this5.store.load({
569
- params: _objectSpread({}, newFilterParams)
570
- });
571
- },
572
- size: "small",
573
- className: styles["button"]
574
- }, "\u67E5\u8BE2")));
575
- },
576
- filterIcon: function filterIcon() {
577
- return /*#__PURE__*/React.createElement(SearchOutlined, null);
578
- }
579
- }, obj);
580
- cols[index] = obj;
581
- }
582
- });
583
- return cols;
584
- }
585
- }, {
586
- key: "render",
587
- value: function render() {
588
- var _this6 = this;
589
-
590
- var _this = this,
591
- _this$state = this.state,
592
- loading = _this$state.loading,
593
- dataSource = _this$state.dataSource,
594
- _this$state$paginatio = _this$state.pagination,
595
- pagination = _this$state$paginatio === void 0 ? {} : _this$state$paginatio,
596
- searchText = _this$state.searchText,
597
- fieldOption = _this$state.fieldOption,
598
- searchColor = _this$state.searchColor,
599
- tableSize = _this$state.tableSize,
600
- props = utils.omit(this.props, ["store", "onChange", "columns", "resetColumn"], {
601
- rowKey: "id",
602
- clickChangeColor: false
603
- });
604
-
605
- if (props.pagination !== false) {
606
- props.pagination = _objectSpread(_objectSpread({
607
- position: ["bottomRight"],
608
- showSizeChanger: true,
609
- showQuickJumper: true
610
- }, props.pagination), pagination);
611
-
612
- if (props.showTotal == true) {
613
- props.pagination.showTotal = function (total, _ref4) {
614
- var _ref5 = _slicedToArray(_ref4, 2),
615
- from = _ref5[0],
616
- to = _ref5[1];
617
-
618
- // return "显示 " + from + " - " + to + "条,共 " + total + " 条";
619
- return "共 " + total + " 条";
620
- };
621
- }
622
- }
623
-
624
- props.onChange = function (pagination, filters, sorter, extra) {
625
- _this.onChange(pagination, filters, sorter, extra);
626
- };
627
-
628
- if (props.clickChangeColor) {
629
- var onRowFn = props.onRow;
630
-
631
- props.onRow = function (record, index) {
632
- var custom = onRowFn ? onRowFn(record, index) : {};
633
- var onClickFn = custom.onClick;
634
-
635
- custom.onClick = function (event) {
636
- _this.setState({
637
- activeIndex: index //获取点击行的索引
638
-
639
- });
640
-
641
- utils.callback(onClickFn, _this, [event]);
642
- };
643
-
644
- return custom;
645
- };
646
-
647
- props.rowClassName = function (record, index) {
648
- return index === _this.state.activeIndex ? "".concat(styles.clickRowStyle) : "";
649
- };
650
- }
651
-
652
- var newDataSource = [];
653
-
654
- if (searchText) {
655
- var data = treeUtils.getSearchMenuDatas(this, searchText, fieldOption, searchColor);
656
- newDataSource = data.treeDatas;
657
- props.expandedRowKeys = data.openKeys;
658
- } else {
659
- newDataSource = dataSource;
660
- }
661
-
662
- props.store = props.store || {};
663
- props.store.autoLoad = props.store.autoLoad === false ? false : true;
664
- var dragable = _this.props.dragable;
665
- var dragableProps = dragable === true ? {
666
- components: BodyRowComponent,
667
- onRow: function onRow(record, index) {
668
- return {
669
- index: index,
670
- record: record,
671
- moveRow: _this6.moveRow
672
- };
673
- }
674
- } : {};
675
- var resizeColumn = this.props.resizeColumn;
676
- var resizeProps = resizeColumn === true ? {
677
- components: this.components
678
- } : null;
679
- var sizeItem = [{
680
- title: "宽松",
681
- key: "default"
682
- }, {
683
- title: "中等",
684
- key: "middle"
685
- }, {
686
- title: "紧凑",
687
- key: "small"
688
- }];
689
- var sortItem = [{
690
- title: "单字段排序",
691
- key: "sigle"
692
- }, {
693
- title: "多字段排序",
694
- key: "multiple"
695
- }];
696
- var sortContent = /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, "\u5F53\u524D\u6392\u5E8F"), sortItem.map(function (item, index) {
697
- return /*#__PURE__*/React.createElement("div", {
698
- key: item.key,
699
- onClick: function onClick() {
700
- console.log("item.key", item.key);
701
-
702
- _this6.setState({
703
- tableSize: item.key
704
- });
705
- }
706
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("span", null, tableSize == item.key && /*#__PURE__*/React.createElement(CheckOutlined, null)), item.title));
707
- }));
708
- var sizeContent = /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", null, "\u8868\u683C\u5BC6\u5EA6"), sizeItem.map(function (item, index) {
709
- return /*#__PURE__*/React.createElement("div", {
710
- key: item.key,
711
- onClick: function onClick() {
712
- console.log("item.key", item.key);
713
-
714
- _this6.setState({
715
- tableSize: item.key
716
- });
717
- }
718
- }, /*#__PURE__*/React.createElement("span", null, /*#__PURE__*/React.createElement("span", null, tableSize == item.key && /*#__PURE__*/React.createElement(CheckOutlined, null)), item.title));
719
- }));
720
- var DefaultTable = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_Table, _extends({
721
- childrenColumnName: "childNodes",
722
- dataSource: newDataSource,
723
- columns: this.getColumns(),
724
- loading: loading // className={styles["nsc-table"]}
725
- ,
726
- locale: {
727
- emptyText: /*#__PURE__*/React.createElement(NoData, null)
728
- },
729
- scroll: {
730
- x: true
731
- },
732
- size: tableSize
733
- }, resizeProps, props, dragableProps)));
734
- return dragable === true ? /*#__PURE__*/React.createElement(DndProvider, {
735
- backend: HTML5Backend
736
- }, DefaultTable) : DefaultTable;
737
- }
738
- }]);
739
-
740
- return NSCTable;
741
- }(React.Component);
742
-
743
- _defineProperty(NSCTable, "defaultProps", {
744
- disableColumns: [],
745
- dragable: false,
746
- showTotal: true,
747
- filterColumn: false,
748
- dragUrl: "",
749
- autoPagination: true,
750
- autoSort: true,
751
- autoOnChange: true,
752
- resizeColumn: true
753
- });
754
-
755
- export default withZhLocale(NSCTable);
756
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3RhYmxlL2luZGV4LnRzeCJdLCJuYW1lcyI6WyJBcHBzdG9yZU91dGxpbmVkIiwiQ2hlY2tPdXRsaW5lZCIsIlNlYXJjaE91dGxpbmVkIiwiaXNFbXB0eU9iaiIsIlN0b3JlIiwiUGFnZVN0b3JlIiwidXRpbHMiLCJSZWFjdCIsIkRuZFByb3ZpZGVyIiwiQm9keVJvdyIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsInRyZWVVdGlscyIsInN0eWxlcyIsIkJvZHlSb3dDb21wb25lbnQiLCJIVE1MNUJhY2tlbmQiLCJ3aXRoWmhMb2NhbGUiLCJOb0RhdGEiLCJSZXNpemFibGUiLCJnZXROb2RlIiwiUmVzaXplYWJsZVRpdGxlIiwicHJvcHMiLCJvblJlc2l6ZSIsIndpZHRoIiwicmVzdFByb3BzIiwiZW5hYmxlVXNlclNlbGVjdEhhY2siLCJOU0NUYWJsZSIsImNyZWF0ZVJlZiIsImRhdGFTb3VyY2UiLCJjb2x1bW5zIiwibG9hZGluZyIsInBhZ2luYXRpb24iLCJhY3RpdmVJbmRleCIsInNlYXJjaFRleHQiLCJmaWVsZE9wdGlvbiIsInNlYXJjaENvbG9yIiwiY29scyIsInNvcnRzIiwiZmlsdGVyUGFyYW1zIiwidGFibGVTaXplIiwic29ydFR5cGUiLCJvbkJlZm9yZUxvYWQiLCJsb2FkIiwiaGVhZGVyIiwiY2VsbCIsImluZGV4IiwiZSIsInNpemUiLCJzdGF0ZSIsIm5leHRDb2x1bW5zIiwic2V0U3RhdGUiLCJkcmFnSW5kZXgiLCJob3ZlckluZGV4IiwiZHJhZyIsInRhcmdldCIsIl90aGlzIiwiZHJhZ05vZGUiLCJyZWNvcmQiLCJ0YXJnZXROb2RlIiwibW92ZUFycmF5IiwiaWRzIiwicGFyZW50Tm9kZSIsImdldENoaWxkTm9kZUlkcyIsInBhcmFtcyIsImlkIiwicGFyZW50SWQiLCJhdHRyaWJ1dGUiLCJtb3ZlUm93Iiwic3RvcmUiLCJyZWxvYWQiLCJsaXN0ZW5lcnMiLCJsaXN0ZW5lcnNQcm9wcyIsInJlc3RTdG9yZSIsInN0b3JlUHJvcHMiLCJtb2RlbCIsImNvbXBvbmVudCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsImRhdGFDaGFuZ2VkIiwiZGF0YSIsIm1vZGVsRGF0YSIsInBhZ2luZyIsImdldFBhZ2luYXRpb24iLCJvbkVycm9yTG9hZCIsImVyciIsInJlc3BvbnNlIiwiYXV0b0xvYWQiLCJPYmplY3QiLCJhc3NpZ24iLCJjdXJyZW50IiwicmVzaXplQ29sdW1uIiwic2V0RGF0YSIsInByZXZQcm9wcyIsInByZVN0YXRlIiwicmVzZXRDb2x1bW4iLCJuZXdDb2xzIiwiY29sc3MiLCJtYXAiLCJjb2wiLCJ0ZW1wIiwib25IZWFkZXJDZWxsIiwiY29sdW1uIiwiaGFuZGxlUmVzaXplIiwicHVzaCIsImZpbHRlcnMiLCJzb3J0ZXIiLCJleHRyYSIsImNvbnNvbGUiLCJsb2ciLCJhdXRvT25DaGFuZ2UiLCJhdXRvU29ydCIsImF1dG9QYWdpbmF0aW9uIiwib25DaGFuZ2UiLCJoYW5kbGVQYWdpbmF0aW9uIiwiZ2V0UGFnaW5hdGlvbkJ5U3RvcmUiLCJwIiwiY3VycmVudEtleSIsInBhZ2VTaXplS2V5IiwicGFnZVNpemUiLCJvcmRlciIsImFzY3MiLCJzb3J0RmllbGQiLCJmaWVsZCIsImRlc2NzIiwib25DaGFuZ2VGbiIsImdldE1vZGVsIiwidmFsIiwiY2hlY2tlZFZhbHVlIiwiZmlsdGVyQ29sdW1ucyIsIm5ld0NvbCIsImluY2x1ZGVzIiwiZGF0YUluZGV4IiwiaW5pdFNob3ciLCJjb2xMaXN0cyIsImRlZmF1bHRTaG93Q29scyIsImZpbHRlciIsImNvbnRlbnQiLCJmaWx0ZXJDb2x1bW4iLCJiaW5kIiwibGFiZWwiLCJ0aXRsZSIsInZhbHVlIiwiZGlzYWJsZWQiLCJlbGxpcHNpcyIsInJlbmRlciIsInNob3dUaXRsZSIsInRleHQiLCJJY29uQWN0aW9uIiwidGhJY29uUmVmIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImtleSIsImFsaWduIiwiaXRlbSIsImZpbHRlclByb3BzIiwib2JqIiwidHlwZSIsInNlYXJjaEtleSIsIkRpdiIsInBsYWNlaG9sZGVyIiwiZmlsdGVyRHJvcGRvd24iLCJzZXRTZWxlY3RlZEtleXMiLCJzZWxlY3RlZEtleXMiLCJjb25maXJtIiwiY2xlYXJGaWx0ZXJzIiwibmV3RmlsdGVyUGFyYW1zIiwidGFibGVTZWFyY2hSZWYiLCJnZXRWYWx1ZSIsImZpbHRlckljb24iLCJvbWl0Iiwicm93S2V5IiwiY2xpY2tDaGFuZ2VDb2xvciIsInBvc2l0aW9uIiwic2hvd1NpemVDaGFuZ2VyIiwic2hvd1F1aWNrSnVtcGVyIiwic2hvd1RvdGFsIiwidG90YWwiLCJmcm9tIiwidG8iLCJvblJvd0ZuIiwib25Sb3ciLCJjdXN0b20iLCJvbkNsaWNrRm4iLCJvbkNsaWNrIiwiZXZlbnQiLCJyb3dDbGFzc05hbWUiLCJjbGlja1Jvd1N0eWxlIiwibmV3RGF0YVNvdXJjZSIsImdldFNlYXJjaE1lbnVEYXRhcyIsInRyZWVEYXRhcyIsImV4cGFuZGVkUm93S2V5cyIsIm9wZW5LZXlzIiwiZHJhZ2FibGUiLCJkcmFnYWJsZVByb3BzIiwiY29tcG9uZW50cyIsInJlc2l6ZVByb3BzIiwic2l6ZUl0ZW0iLCJzb3J0SXRlbSIsInNvcnRDb250ZW50Iiwic2l6ZUNvbnRlbnQiLCJEZWZhdWx0VGFibGUiLCJnZXRDb2x1bW5zIiwiZW1wdHlUZXh0IiwieCIsIkNvbXBvbmVudCIsImRpc2FibGVDb2x1bW5zIiwiZHJhZ1VybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQ0VBLGdCQURGLEVBRUVDLGFBRkYsRUFJRUMsY0FKRixRQU1PLG1CQU5QO0FBT0EsU0FBU0MsVUFBVCxRQUEyQixtQkFBM0I7QUFDQSxPQUFPQyxLQUFQLElBQWdCQyxTQUFoQixRQUE2QyxhQUE3QztBQUNBLFNBQVNDLEtBQVQs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LEVBV000SyxhQVhOLEVBWEYsQ0FERjtBQTRCQSxhQUFPRCxRQUFRLEtBQUssSUFBYixnQkFDTCxvQkFBQyxXQUFEO0FBQWEsUUFBQSxPQUFPLEVBQUVqTDtBQUF0QixTQUFxQ3lMLFlBQXJDLENBREssR0FHTEEsWUFIRjtBQUtEOzs7O0VBemtCb0JqTSxLQUFLLENBQUNxTSxTOztnQkFBdkJsTCxRLGtCQUNrQjtBQUNwQm1MLEVBQUFBLGNBQWMsRUFBRSxFQURJO0FBRXBCYixFQUFBQSxRQUFRLEVBQUUsS0FGVTtBQUdwQmpCLEVBQUFBLFNBQVMsRUFBRSxJQUhTO0FBSXBCdEMsRUFBQUEsWUFBWSxFQUFFLEtBSk07QUFLcEJxRSxFQUFBQSxPQUFPLEVBQUUsRUFMVztBQU1wQi9GLEVBQUFBLGNBQWMsRUFBRSxJQU5JO0FBT3BCRCxFQUFBQSxRQUFRLEVBQUUsSUFQVTtBQVFwQkQsRUFBQUEsWUFBWSxFQUFFLElBUk07QUFTcEJuQixFQUFBQSxZQUFZLEVBQUU7QUFUTSxDOztBQTJrQnhCLGVBQWUxRSxZQUFZLENBQUNVLFFBQUQsQ0FBM0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBARGVzY3JpcHR0aW9uOlxyXG4gKiBAdmVyc2lvbjpcclxuICogQEF1dGhvcjogcnh6aHVcclxuICogQERhdGU6IDIwMjEtMDMtMjMgMDg6NDY6MjBcclxuICogQExhc3RFZGl0b3JzOiByeHpodVxyXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIxLTAzLTIzIDEwOjMwOjQyXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gIEFwcHN0b3JlT3V0bGluZWQsXHJcbiAgQ2hlY2tPdXRsaW5lZCxcclxuICBDb2x1bW5IZWlnaHRPdXRsaW5lZCxcclxuICBTZWFyY2hPdXRsaW5lZCxcclxuICBTb3J0QXNjZW5kaW5nT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCB7IGlzRW1wdHlPYmogfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJAYmotbnNjL21zbi9saWIvdXRpbHNcIjtcclxuaW1wb3J0IHtcclxuICBCdXR0b24sXHJcbiAgQ2hlY2tib3gsXHJcbiAgQ2hlY2tib3hPcHRpb25UeXBlLFxyXG4gIE1lbnUsXHJcbiAgUG9wb3ZlcixcclxuICBTcGFjZSxcclxuICBUYWJsZSxcclxuICBUYWJsZVByb3BzLFxyXG4gIFRvb2x0aXAsXHJcbn0gZnJvbSBcImFudGRcIjtcclxuaW1wb3J0IHsgQ29sdW1uVHlwZSwgVGFibGVQYWdpbmF0aW9uQ29uZmlnIH0gZnJvbSBcImFudGQvbGliL3RhYmxlXCI7XHJcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBEbmRQcm92aWRlciB9IGZyb20gXCJyZWFjdC1kbmRcIjtcclxuaW1wb3J0IEJvZHlSb3csIHsgRG5kQ29udGV4dFR5cGUsIElCb2R5Um93UHJvcHMgfSBmcm9tIFwiLi4vY29tbW9uL0JvZHlSb3dcIjtcclxuaW1wb3J0IHRyZWVVdGlscyBmcm9tIFwiLi4vdHJlZVV0aWxzXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vaW5kZXgubW9kdWxlLmxlc3NcIjtcclxuY29uc3QgeyBCb2R5Um93Q29tcG9uZW50LCBIVE1MNUJhY2tlbmQgfSA9IEJvZHlSb3c7XHJcbmltcG9ydCB3aXRoWmhMb2NhbGUgZnJvbSBcIi4uL2NvbW1vbi93aXRoWmhMb2NhbGVcIjtcclxuaW1wb3J0IHsgSWNvbiwgTm9EYXRhLCBJbnB1dCwgU2VsZWN0IH0gZnJvbSBcIi4uXCI7XHJcbmltcG9ydCB7IFJlc2l6YWJsZSB9IGZyb20gXCJyZWFjdC1yZXNpemFibGVcIjtcclxuaW1wb3J0IFwiLi9yZXNpemUubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IHsgZ2V0Tm9kZSB9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5cclxuaW50ZXJmYWNlIElEcmFnUGFyYW1zIHtcclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGlkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuICBwYXJlbnRJZDogc3RyaW5nIHwgbnVtYmVyO1xyXG59XHJcbi8vIGludGVyZmFjZSBTdG9yZVByb3BzIHt9XHJcblxyXG5leHBvcnQgdHlwZSBTdG9yZVR5cGUgPSBcIlBhZ2VTdG9yZVwiIHwgXCJUcmVlU3RvcmVcIiB8IFwiQmFzZVN0b3JlXCI7XHJcblxyXG5pbnRlcmZhY2UgTlNDVGFibGVQYWdpbmF0aW9uIGV4dGVuZHMgVGFibGVQYWdpbmF0aW9uQ29uZmlnIHtcclxuICB0b3RhbEtleT86IHN0cmluZztcclxuICBwYWdlU2l6ZUtleT86IHN0cmluZztcclxuICBjdXJyZW50S2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgTlNDVGFibGVQcm9wcyBleHRlbmRzIFRhYmxlUHJvcHM8YW55PiB7XHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIHNob3dUb3RhbD86IGJvb2xlYW47IC8vIOaYr+WQpuaYvuekuuaAu+adoeaVsOS/oeaBr++8jOm7mOiupHRydWVcclxuICBkaXNhYmxlQ29sdW1ucz86IHN0cmluZ1tdOyAvLyDkuI3lj6/pmpDol4/lv4XpobvmmL7npLrnmoTliJdcclxuICBkcmFnYWJsZT86IGJvb2xlYW47IC8vIOaYr+WQpuWPr+aLluWKqCwg6buY6K6kZmFsc2VcclxuICBmaWx0ZXJDb2x1bW4/OiBib29sZWFuOyAvLyDmmK/lkKbmlK/mjIHov4fmu6TmmL7npLrooajmoLzliJcsIOm7mOiupHRydWVcclxuICBtb3ZlUm93PzogKHBhcmFtczogSURyYWdQYXJhbXMpID0+IHZvaWQ7IC8vIOaLluaLveWujOaIkOWQjueahOWbnuiwg1xyXG4gIGRyYWdVcmw/OiBzdHJpbmc7IC8vIOS/neWtmOaLluaLveaOkuW6j+eahOaOpeWPo1xyXG4gIHBhZ2luYXRpb24/OiBmYWxzZSB8IE5TQ1RhYmxlUGFnaW5hdGlvbjtcclxuICBhdXRvUGFnaW5hdGlvbj86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuWIhumhtVxyXG4gIGF1dG9Tb3J0PzogYm9vbGVhbjsgLy/nu4Tku7bmmK/lkKboh6rliqjlpITnkIbmjpLluo9cclxuICBhdXRvT25DaGFuZ2U/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqhvbkNoYW5nZSwgZmFsc2XliJnkuI3lgZrku7vkvZXlpITnkIblhajpg6jkuqTnu5nosIPnlKjmlrlcclxuICByZXNpemVDb2x1bW4/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTlNDVGFibGVQcm9wcyA9IHR5cGVvZiBOU0NUYWJsZS5kZWZhdWx0UHJvcHMgJiBOU0NUYWJsZVByb3BzO1xyXG5leHBvcnQgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9O1xyXG5cclxuY29uc3QgUmVzaXplYWJsZVRpdGxlID0gKHByb3BzOiBhbnkpID0+IHtcclxuICBjb25zdCB7IG9uUmVzaXplLCB3aWR0aCwgLi4ucmVzdFByb3BzIH0gPSBwcm9wcztcclxuICByZXR1cm4gKFxyXG4gICAgPFJlc2l6YWJsZVxyXG4gICAgICB3aWR0aD17d2lkdGggfHwgMTUwfVxyXG4gICAgICBoZWlnaHQ9ezB9XHJcbiAgICAgIG9uUmVzaXplPXtvblJlc2l6ZX1cclxuICAgICAgZHJhZ2dhYmxlT3B0cz17eyBlbmFibGVVc2VyU2VsZWN0SGFjazogZmFsc2UgfX1cclxuICAgID5cclxuICAgICAgPHRoIHsuLi5yZXN0UHJvcHN9IC8+XHJcbiAgICA8L1Jlc2l6YWJsZT5cclxuICApO1xyXG59O1xyXG5jbGFzcyBOU0NUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJTlNDVGFibGVQcm9wcz4ge1xyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XHJcbiAgICBkaXNhYmxlQ29sdW1uczogW10sXHJcbiAgICBkcmFnYWJsZTogZmFsc2UsXHJcbiAgICBzaG93VG90YWw6IHRydWUsXHJcbiAgICBmaWx0ZXJDb2x1bW46IGZhbHNlLFxyXG4gICAgZHJhZ1VybDogXCJcIixcclxuICAgIGF1dG9QYWdpbmF0aW9uOiB0cnVlLFxyXG4gICAgYXV0b1NvcnQ6IHRydWUsXHJcbiAgICBhdXRvT25DaGFuZ2U6IHRydWUsXHJcbiAgICByZXNpemVDb2x1bW46IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgc3RvcmUgPSB7fSBhcyBTdG9yZVByb3BzO1xyXG4gIHRoSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuICB0YWJsZVNlYXJjaFJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc3RhdGUgPSB7XHJcbiAgICBkYXRhU291cmNlOiBbXSxcclxuICAgIGNvbHVtbnM6IFtdLFxyXG4gICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICBwYWdpbmF0aW9uOiB7fSxcclxuICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgIC8v5pCc57Si5paH5pysXHJcbiAgICBzZWFyY2hUZXh0OiBudWxsLFxyXG4gICAgZmllbGRPcHRpb246IG51bGwsXHJcbiAgICBzZWFyY2hDb2xvcjogbnVsbCxcclxuICAgIGNvbHM6IFtdLFxyXG4gICAgc29ydHM6IFtdLFxyXG4gICAgZmlsdGVyUGFyYW1zOiB7fSxcclxuICAgIHRhYmxlU2l6ZTogXCJtaWRkbGVcIixcclxuICAgIHNvcnRUeXBlOiBcInNpZ2xlXCIsXHJcbiAgfTtcclxuXHJcbiAgbGlzdGVuZXJzID0ge1xyXG4gICAgb25CZWZvcmVMb2FkOiBudWxsLFxyXG4gICAgbG9hZDogbnVsbCxcclxuICB9O1xyXG5cclxuICBjb21wb25lbnRzID0ge1xyXG4gICAgaGVhZGVyOiB7XHJcbiAgICAgIGNlbGw6IFJlc2l6ZWFibGVUaXRsZSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgIHN1cGVyKHByb3BzKTtcclxuICAgIGlmIChwcm9wcy5zdG9yZSBpbnN0YW5jZW9mIFN0b3JlKSB7XHJcbiAgICAgIHRoaXMuc3RvcmUgPSBwcm9wcy5zdG9yZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHsgbGlzdGVuZXJzOiBsaXN0ZW5lcnNQcm9wcyA9IHt9LCAuLi5yZXN0U3RvcmUgfSA9XHJcbiAgICAgICAgcHJvcHMuc3RvcmUgfHwge307XHJcbiAgICAgIGNvbnN0IHN0b3JlUHJvcHMgPSB7XHJcbiAgICAgICAgbW9kZWw6IFwibW9kZWxcIixcclxuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgbGlzdGVuZXJzOiB7XHJcbiAgICAgICAgICBvbkJlZm9yZUxvYWQ6IChzdG9yZSwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgbG9hZGluZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMub25CZWZvcmVMb2FkLCB0aGlzLCBbc3RvcmUsIG9wdGlvbnNdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBkYXRhQ2hhbmdlZDogKGRhdGEsIG1vZGVsRGF0YSwgc3RvcmUpID0+IHtcclxuICAgICAgICAgICAgbGV0IHBhZ2luZyA9ICEodGhpcy5wcm9wcy5wYWdpbmF0aW9uID09PSBmYWxzZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFnaW5nICYmICF0aGlzLnByb3BzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHN0b3JlLmdldFBhZ2luYXRpb24oKSxcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlSW5kZXg6IC0xLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkYXRhU291cmNlOiBtb2RlbERhdGEsIGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5kYXRhQ2hhbmdlZCwgdGhpcywgW1xyXG4gICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgbW9kZWxEYXRhLFxyXG4gICAgICAgICAgICAgIHN0b3JlLFxyXG4gICAgICAgICAgICAgIHBhZ2luZyxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgbG9hZDogKGRhdGEsIG1vZGVsRGF0YSwgc3RvcmUpID0+IHtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMubG9hZCwgdGhpcywgW2RhdGEsIG1vZGVsRGF0YSwgc3RvcmVdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvbkVycm9yTG9hZDogKGVyciwgcmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5vbkVycm9yTG9hZCwgdGhpcywgW2VyciwgcmVzcG9uc2VdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiByZXN0U3RvcmUuZGF0YVxyXG4gICAgICAgICAgPyByZXN0U3RvcmUuZGF0YVxyXG4gICAgICAgICAgOiBwcm9wcy5kYXRhU291cmNlXHJcbiAgICAgICAgICA/IHByb3BzLmRhdGFTb3VyY2VcclxuICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAuLi5yZXN0U3RvcmUsXHJcbiAgICAgICAgYXV0b0xvYWQ6IHJlc3RTdG9yZS5hdXRvTG9hZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgUGFnZVN0b3JlKFxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlUHJvcHMsIHtcclxuICAgICAgICAgIHBhZ2luYXRpb246IHsgY3VycmVudDogMSwgLi4udGhpcy5wcm9wcy5wYWdpbmF0aW9uIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVJlc2l6ZSA9XHJcbiAgICAoaW5kZXg6IGFueSkgPT5cclxuICAgIChlOiBhbnksIHsgc2l6ZSB9OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjb2xzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICBjb25zdCBuZXh0Q29sdW1ucyA9IFsuLi5jb2xzXTtcclxuICAgICAgbmV4dENvbHVtbnNbaW5kZXhdID0ge1xyXG4gICAgICAgIC4uLm5leHRDb2x1bW5zW2luZGV4XSxcclxuICAgICAgICB3aWR0aDogc2l6ZS53aWR0aCxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sczogbmV4dENvbHVtbnMsXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghcmVzaXplQ29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2x1bW5zOiBbLi4udGhpcy5wcm9wcy5jb2x1bW5zXSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2xzOiBbLi4udGhpcy5wcm9wcy5jb2x1bW5zXSB9KTtcclxuICAgICAgLy8gdGhpcy5yZXNldENvbHVtbigpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RvcmUgPSB0aGlzLnByb3BzLnN0b3JlO1xyXG4gICAgaWYgKHN0b3JlICYmIHN0b3JlLmRhdGEpIHtcclxuICAgICAgdGhpcy5zdG9yZS5zZXREYXRhKHN0b3JlLmRhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJlU3RhdGUpIHtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1ucyAhPT0gcHJldlByb3BzLmNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocHJlU3RhdGUuY29scyAhPT0gdGhpcy5zdGF0ZS5jb2xzKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldENvbHVtbigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldENvbHVtbigpIHtcclxuICAgIGNvbnN0IHsgY29scyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IG5ld0NvbHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IGNvbHNzID0gY29scyB8fCBbXTtcclxuICAgIGNvbHNzLm1hcCgoY29sOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgbGV0IHRlbXAgPSB7XHJcbiAgICAgICAgLi4uY29sLFxyXG4gICAgICAgIG9uSGVhZGVyQ2VsbDogKGNvbHVtbjogeyB3aWR0aDogYW55IH0pID0+ICh7XHJcbiAgICAgICAgICB3aWR0aDogY29sdW1uLndpZHRoLFxyXG4gICAgICAgICAgb25SZXNpemU6IHRoaXMuaGFuZGxlUmVzaXplKGluZGV4KSxcclxuICAgICAgICB9KSxcclxuICAgICAgfTtcclxuICAgICAgbmV3Q29scy5wdXNoKHRlbXApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgY29sdW1uczogbmV3Q29scyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5riF6Zmk6YCJ5Lit6aKc6ImyXHJcbiAgICovXHJcbiAgY2xlYXJTZWxlY3RDb2xvcigpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBhY3RpdmVJbmRleDogLTEgfSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGdldFBhZ2luYXRpb25CeVN0b3JlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0UGFnaW5hdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2UocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSkge1xyXG4gICAgY29uc29sZS5sb2coXCJzb3J0ZXJcIiwgc29ydGVyKTtcclxuICAgIGNvbnN0IHsgYXV0b09uQ2hhbmdlLCBhdXRvU29ydCwgYXV0b1BhZ2luYXRpb24sIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc29sZS5sb2coXCJhdXRvU29ydFwiLCBhdXRvU29ydCk7XHJcbiAgICBjb25zb2xlLmxvZyhcImF1dG9QYWdpbmF0aW9uXCIsIGF1dG9QYWdpbmF0aW9uKTtcclxuICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgaWYgKGF1dG9PbkNoYW5nZSA9PT0gZmFsc2UpIHtcclxuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhbmRsZVBhZ2luYXRpb24gPSAoKSA9PiB7XHJcbiAgICAgIGxldCBwYXJhbXMgPSB7fSBhcyB7XHJcbiAgICAgICAgc2l6ZT86IHN0cmluZztcclxuICAgICAgICBwYWdlU2l6ZT86IHN0cmluZztcclxuICAgICAgICBhc2NzPzogc3RyaW5nO1xyXG4gICAgICAgIGRlc2NzPzogc3RyaW5nO1xyXG4gICAgICAgIFtwcm9wTmFtZTogc3RyaW5nXTogc3RyaW5nO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy5nZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHx8IHt9O1xyXG5cclxuICAgICAgaWYgKCFpc0VtcHR5T2JqKHBhZ2luYXRpb24pKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IHtcclxuICAgICAgICAgIFtwYWdpbmcuY3VycmVudEtleSB8fCBcImN1cnJlbnRcIl06IHBhZ2luYXRpb24uY3VycmVudCxcclxuICAgICAgICAgIFtwYWdpbmcucGFnZVNpemVLZXkgfHwgXCJzaXplXCJdOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYXV0b1NvcnQgPT09IHRydWUgJiYgIWlzRW1wdHlPYmooc29ydGVyKSkge1xyXG4gICAgICAgIGlmIChzb3J0ZXIub3JkZXIgPT0gXCJhc2NlbmRcIikge1xyXG4gICAgICAgICAgcGFyYW1zLmFzY3MgPVxyXG4gICAgICAgICAgICBzb3J0ZXIuY29sdW1uLnNvcnRGaWVsZCB8fCBzb3J0ZXIuY29sdW1uLmZpZWxkIHx8IHNvcnRlci5maWVsZDtcclxuICAgICAgICAgIHBhcmFtcy5kZXNjcyA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzb3J0ZXIub3JkZXIgPT0gXCJkZXNjZW5kXCIpIHtcclxuICAgICAgICAgIHBhcmFtcy5kZXNjcyA9XHJcbiAgICAgICAgICAgIHNvcnRlci5jb2x1bW4uc29ydEZpZWxkIHx8IHNvcnRlci5jb2x1bW4uZmllbGQgfHwgc29ydGVyLmZpZWxkO1xyXG4gICAgICAgICAgcGFyYW1zLmFzY3MgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBwYXJhbXMgPSB7IC4uLmZpbHRlclBhcmFtcywgLi4ucGFyYW1zIH07XHJcbiAgICAgIHRoaXMuc3RvcmUucmVsb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbkNoYW5nZUZuID0gdGhpcy5wcm9wcy5vbkNoYW5nZTtcclxuICAgIC8vIOeUqOaIt+S8oOS6hm9uQ2hhbmdl5L+d55WZ55So5oi36Ieq5Li75aSE55CG6KGo5qC85Y+Y5YyW55qE5p2D5YqbXHJcbiAgICBpZiAob25DaGFuZ2VGbikge1xyXG4gICAgICB1dGlscy5jYWxsYmFjayhvbkNoYW5nZUZuLCB0aGlzLCBbcGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYV0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMuYXV0b1BhZ2luYXRpb24pIHtcclxuICAgICAgaGFuZGxlUGFnaW5hdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluaVsOaNruaooeWei+WvueixoVxyXG4gICAqL1xyXG4gIGdldE1vZGVsKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0TW9kZWwoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiPnOWNleaQnOe0oui/h+a7pOaYvuekulxyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWxcclxuICAgKi9cclxuICBoYW5kbGVTZWFyY2godmFsLCBmaWVsZE9wdGlvbiwgc2VhcmNoQ29sb3IpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWFyY2hUZXh0OiB2YWwsXHJcbiAgICAgIGZpZWxkT3B0aW9uOiBmaWVsZE9wdGlvbixcclxuICAgICAgc2VhcmNoQ29sb3I6IHNlYXJjaENvbG9yLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmqKHlnZfliJfooajnp7vliqjmjpLluo9cclxuICAgKi9cclxuICBtb3ZlUm93ID0gKGRyYWdJbmRleCwgaG92ZXJJbmRleCwgZHJhZywgdGFyZ2V0KSA9PiB7XHJcbiAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICBsZXQgZHJhZ05vZGUgPSBkcmFnLnJlY29yZDtcclxuICAgIGxldCB0YXJnZXROb2RlID0gdGFyZ2V0LnJlY29yZDtcclxuICAgIGRyYWdOb2RlLm1vdmVBcnJheShkcmFnTm9kZSwgdGFyZ2V0Tm9kZSk7XHJcbiAgICBsZXQgaWRzID0gZHJhZ05vZGUucGFyZW50Tm9kZS5nZXRDaGlsZE5vZGVJZHMoKTtcclxuICAgIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgIGlkOiBkcmFnTm9kZS5pZCxcclxuICAgICAgcGFyZW50SWQ6IGRyYWdOb2RlLmF0dHJpYnV0ZS5wYXJlbnRJZCxcclxuICAgICAgaWRzOiBpZHMsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnByb3BzLm1vdmVSb3cpIHtcclxuICAgICAgdGhpcy5wcm9wcy5tb3ZlUm93KHBhcmFtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0b3JlLnJlbG9hZCgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGZpbHRlckNvbHVtbihjaGVja2VkVmFsdWUpIHtcclxuICAgIGNvbnN0IGZpbHRlckNvbHVtbnMgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKChjb2w6IENvbHVtblR5cGU8e30+KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld0NvbCA9IHsgLi4uY29sIH0gYXMgQ29sdW1uVHlwZTx7fT4gJiB7IGluaXRTaG93OiBib29sZWFuIH07XHJcbiAgICAgIGlmIChjaGVja2VkVmFsdWUuaW5jbHVkZXMoY29sLmRhdGFJbmRleCkpIHtcclxuICAgICAgICBuZXdDb2wuaW5pdFNob3cgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0NvbC5pbml0U2hvdyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXdDb2w7XHJcbiAgICB9KTtcclxuICAgIC8vIHRoaXMuc2V0U3RhdGUoeyBjb2x1bW5zOiBmaWx0ZXJDb2x1bW5zIH0pO1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogZmlsdGVyQ29sdW1ucyB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2xzOiBmaWx0ZXJDb2x1bW5zIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29sdW1ucygpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IGNvbHVtbnM6IGNvbExpc3RzIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZGVmYXVsdFNob3dDb2xzID0gY29sdW1ucy5maWx0ZXIoKGNvbHMpID0+IGNvbHMuaW5pdFNob3cgIT09IGZhbHNlKTtcclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gKFxyXG4gICAgICA8Q2hlY2tib3guR3JvdXBcclxuICAgICAgICBvbkNoYW5nZT17dGhpcy5maWx0ZXJDb2x1bW4uYmluZCh0aGlzKX1cclxuICAgICAgICBvcHRpb25zPXtjb2xMaXN0cy5tYXAoXHJcbiAgICAgICAgICAoY29sOiBDb2x1bW5UeXBlPHt9PiAmIHsgZmlsdGVyQ29sdW1uOiBib29sZWFuIH0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBsYWJlbDogY29sLnRpdGxlLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBjb2wuZGF0YUluZGV4LFxyXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBjb2wuZmlsdGVyQ29sdW1uID09PSBmYWxzZSxcclxuICAgICAgICAgICAgfSBhcyBDaGVja2JveE9wdGlvblR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKX1cclxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRTaG93Q29scy5tYXAoKGNvbCkgPT4gY29sLmRhdGFJbmRleCl9XHJcbiAgICAgID48L0NoZWNrYm94Lkdyb3VwPlxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNvbHMgPSBkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wpID0+IHtcclxuICAgICAgaWYgKGNvbC5lbGxpcHNpcyAmJiAhY29sLnJlbmRlcikge1xyXG4gICAgICAgIGNvbC5lbGxpcHNpcyA9IHtcclxuICAgICAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2wucmVuZGVyID0gKHRleHQpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxUb29sdGlwIHBsYWNlbWVudD1cInRvcExlZnRcIiB0aXRsZT17dGV4dH0+XHJcbiAgICAgICAgICAgICAge3RleHR9XHJcbiAgICAgICAgICAgIDwvVG9vbHRpcD5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29sO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgSWNvbkFjdGlvbjogQ29sdW1uVHlwZTx7fT4gPSB7XHJcbiAgICAgIHRpdGxlOiAoXHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1tcInRoLWljb25cIl19IHJlZj17dGhpcy50aEljb25SZWZ9PlxyXG4gICAgICAgICAgPFBvcG92ZXJcclxuICAgICAgICAgICAgdGl0bGU9XCLpgInmi6nmmL7npLrnmoTliJdcIlxyXG4gICAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21SaWdodFwiXHJcbiAgICAgICAgICAgIHRyaWdnZXI9XCJjbGlja1wiXHJcbiAgICAgICAgICAgIG92ZXJsYXlTdHlsZT17eyBtaW5XaWR0aDogNDEwLCBtYXhXaWR0aDogNDUwIH19XHJcbiAgICAgICAgICAgIGdldFBvcHVwQ29udGFpbmVyPXsoKSA9PiB0aGlzLnRoSWNvblJlZi5jdXJyZW50fVxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8QXBwc3RvcmVPdXRsaW5lZCBzaXplPXsyNH0gY2xhc3NOYW1lPXtzdHlsZXNbXCJhcHAtc3RvcmUtaWNvblwiXX0gLz5cclxuICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKSxcclxuICAgICAgZGF0YUluZGV4OiBcImljb24tbWVudVwiLFxyXG4gICAgICBrZXk6IFwiaWNvbi1tZW51XCIsXHJcbiAgICAgIHdpZHRoOiA1MCxcclxuICAgICAgYWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIC8vIGZpeGVkOiBcInJpZ2h0XCIsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMucHJvcHMuZmlsdGVyQ29sdW1uKSB7XHJcbiAgICAgIGNvbHMucHVzaChJY29uQWN0aW9uKTtcclxuICAgIH1cclxuICAgIGNvbHMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoIWlzRW1wdHlPYmooaXRlbS5maWx0ZXJQcm9wcykpIHtcclxuICAgICAgICBsZXQgb2JqID0geyAuLi5pdGVtIH07XHJcbiAgICAgICAgY29uc3QgeyB0eXBlLCBwcm9wcywgc2VhcmNoS2V5IH0gPSBpdGVtLmZpbHRlclByb3BzO1xyXG4gICAgICAgIGxldCBEaXYgPSBudWxsO1xyXG4gICAgICAgIGxldCB0ZXh0ID0gaXRlbS50aXRsZTtcclxuICAgICAgICBEaXYgPSBnZXROb2RlKHR5cGUsIHsgLi4ucHJvcHMsIHBsYWNlaG9sZGVyOiBg5pCc57SiJHt0ZXh0fWAgfSk7XHJcbiAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgZmlsdGVyRHJvcGRvd246ICh7XHJcbiAgICAgICAgICAgIHNldFNlbGVjdGVkS2V5cyxcclxuICAgICAgICAgICAgc2VsZWN0ZWRLZXlzLFxyXG4gICAgICAgICAgICBjb25maXJtLFxyXG4gICAgICAgICAgICBjbGVhckZpbHRlcnMsXHJcbiAgICAgICAgICB9KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1tcInNlYXJjaFwiXX0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzW1wic3BhY2VcIl19PntEaXZ9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8U3BhY2U+XHJcbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uZmlybSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaWx0ZXJQYXJhbXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3RmlsdGVyUGFyYW1zID0geyAuLi5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPWl0ZW0uZmllbGQgfHwgaXRlbS5kYXRhSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgICBuZXdGaWx0ZXJQYXJhbXNba2V5XSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTZWFyY2hSZWYuY3VycmVudD8uZ2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJQYXJhbXM6IHsgLi4ubmV3RmlsdGVyUGFyYW1zIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUubG9hZCh7IHBhcmFtczogeyAuLi5uZXdGaWx0ZXJQYXJhbXMgfSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbXCJidXR0b25cIl19XHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICDmn6Xor6JcclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L1NwYWNlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZpbHRlckljb246ICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIDxTZWFyY2hPdXRsaW5lZCAvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi5vYmosXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2xzW2luZGV4XSA9IG9iajtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29scztcclxuICB9XHJcblxyXG4gIHJlbmRlcigpIHtcclxuICAgIGxldCBfdGhpcyA9IHRoaXMsXHJcbiAgICAgIHtcclxuICAgICAgICBsb2FkaW5nLFxyXG4gICAgICAgIGRhdGFTb3VyY2UsXHJcbiAgICAgICAgcGFnaW5hdGlvbiA9IHt9LFxyXG4gICAgICAgIHNlYXJjaFRleHQsXHJcbiAgICAgICAgZmllbGRPcHRpb24sXHJcbiAgICAgICAgc2VhcmNoQ29sb3IsXHJcbiAgICAgICAgdGFibGVTaXplLFxyXG4gICAgICB9ID0gdGhpcy5zdGF0ZSxcclxuICAgICAgcHJvcHMgPSB1dGlscy5vbWl0KFxyXG4gICAgICAgIHRoaXMucHJvcHMsXHJcbiAgICAgICAgW1wic3RvcmVcIiwgXCJvbkNoYW5nZVwiLCBcImNvbHVtbnNcIiwgXCJyZXNldENvbHVtblwiXSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICByb3dLZXk6IFwiaWRcIixcclxuICAgICAgICAgIGNsaWNrQ2hhbmdlQ29sb3I6IGZhbHNlLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIGlmIChwcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSkge1xyXG4gICAgICBwcm9wcy5wYWdpbmF0aW9uID0ge1xyXG4gICAgICAgIHBvc2l0aW9uOiBbXCJib3R0b21SaWdodFwiXSxcclxuICAgICAgICBzaG93U2l6ZUNoYW5nZXI6IHRydWUsXHJcbiAgICAgICAgc2hvd1F1aWNrSnVtcGVyOiB0cnVlLFxyXG4gICAgICAgIC4uLnByb3BzLnBhZ2luYXRpb24sXHJcbiAgICAgICAgLi4ucGFnaW5hdGlvbixcclxuICAgICAgfTtcclxuICAgICAgaWYgKHByb3BzLnNob3dUb3RhbCA9PSB0cnVlKSB7XHJcbiAgICAgICAgcHJvcHMucGFnaW5hdGlvbi5zaG93VG90YWwgPSBmdW5jdGlvbiAodG90YWwsIFtmcm9tLCB0b10pIHtcclxuICAgICAgICAgIC8vIHJldHVybiBcIuaYvuekuiBcIiArIGZyb20gKyBcIiAtIFwiICsgdG8gKyBcIuadoe+8jOWFsSBcIiArIHRvdGFsICsgXCIg5p2hXCI7XHJcbiAgICAgICAgICByZXR1cm4gXCLlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm9wcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKSB7XHJcbiAgICAgIF90aGlzLm9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgfTtcclxuICAgIGlmIChwcm9wcy5jbGlja0NoYW5nZUNvbG9yKSB7XHJcbiAgICAgIGNvbnN0IG9uUm93Rm4gPSBwcm9wcy5vblJvdztcclxuICAgICAgcHJvcHMub25Sb3cgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBjdXN0b20gPSBvblJvd0ZuID8gb25Sb3dGbihyZWNvcmQsIGluZGV4KSA6IHt9O1xyXG4gICAgICAgIGNvbnN0IG9uQ2xpY2tGbiA9IGN1c3RvbS5vbkNsaWNrO1xyXG4gICAgICAgIGN1c3RvbS5vbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiBpbmRleCwgLy/ojrflj5bngrnlh7vooYznmoTntKLlvJVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXRpbHMuY2FsbGJhY2sob25DbGlja0ZuLCBfdGhpcywgW2V2ZW50XSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3VzdG9tO1xyXG4gICAgICB9O1xyXG4gICAgICBwcm9wcy5yb3dDbGFzc05hbWUgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gX3RoaXMuc3RhdGUuYWN0aXZlSW5kZXhcclxuICAgICAgICAgID8gYCR7c3R5bGVzLmNsaWNrUm93U3R5bGV9YFxyXG4gICAgICAgICAgOiBcIlwiO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld0RhdGFTb3VyY2UgPSBbXTtcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0cmVlVXRpbHMuZ2V0U2VhcmNoTWVudURhdGFzKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgc2VhcmNoVGV4dCxcclxuICAgICAgICBmaWVsZE9wdGlvbixcclxuICAgICAgICBzZWFyY2hDb2xvclxyXG4gICAgICApO1xyXG4gICAgICBuZXdEYXRhU291cmNlID0gZGF0YS50cmVlRGF0YXM7XHJcbiAgICAgIHByb3BzLmV4cGFuZGVkUm93S2V5cyA9IGRhdGEub3BlbktleXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdEYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuICAgIH1cclxuICAgIHByb3BzLnN0b3JlID0gcHJvcHMuc3RvcmUgfHwge307XHJcbiAgICBwcm9wcy5zdG9yZS5hdXRvTG9hZCA9IHByb3BzLnN0b3JlLmF1dG9Mb2FkID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIGNvbnN0IHsgZHJhZ2FibGUgfSA9IF90aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZHJhZ2FibGVQcm9wcyA9XHJcbiAgICAgIGRyYWdhYmxlID09PSB0cnVlXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IEJvZHlSb3dDb21wb25lbnQsXHJcbiAgICAgICAgICAgIG9uUm93OiAocmVjb3JkLCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgICBpbmRleCxcclxuICAgICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgICAgbW92ZVJvdzogdGhpcy5tb3ZlUm93LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IHt9O1xyXG4gICAgbGV0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGNvbnN0IHJlc2l6ZVByb3BzID1cclxuICAgICAgcmVzaXplQ29sdW1uID09PSB0cnVlID8geyBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHMgfSA6IG51bGw7XHJcblxyXG4gICAgY29uc3Qgc2l6ZUl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5a695p2+XCIsIGtleTogXCJkZWZhdWx0XCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLkuK3nrYlcIiwga2V5OiBcIm1pZGRsZVwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi57Sn5YeRXCIsIGtleTogXCJzbWFsbFwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc29ydEl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5Y2V5a2X5q615o6S5bqPXCIsIGtleTogXCJzaWdsZVwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi5aSa5a2X5q615o6S5bqPXCIsIGtleTogXCJtdWx0aXBsZVwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc29ydENvbnRlbnQgPSAoXHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdj7lvZPliY3mjpLluo88L2Rpdj5cclxuICAgICAgICB7c29ydEl0ZW0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGtleT17aXRlbS5rZXl9XHJcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJpdGVtLmtleVwiLCBpdGVtLmtleSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgdGFibGVTaXplOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt0YWJsZVNpemUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAge2l0ZW0udGl0bGV9XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNpemVDb250ZW50ID0gKFxyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxkaXY+6KGo5qC85a+G5bqmPC9kaXY+XHJcbiAgICAgICAge3NpemVJdGVtLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICBrZXk9e2l0ZW0ua2V5fVxyXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiaXRlbS5rZXlcIiwgaXRlbS5rZXkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgIHRhYmxlU2l6ZTogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57dGFibGVTaXplID09IGl0ZW0ua2V5ICYmIDxDaGVja091dGxpbmVkIC8+fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIHtpdGVtLnRpdGxlfVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcbiAgICBjb25zdCBEZWZhdWx0VGFibGUgPSAoXHJcbiAgICAgIDw+XHJcbiAgICAgICAgey8qIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogXCJmbGV4XCIgfX0+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8UG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250ZW50PXtzaXplQ29udGVudH0gdHJpZ2dlcj1cImNsaWNrXCI+XHJcbiAgICAgICAgICAgICAgPENvbHVtbkhlaWdodE91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPFBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGVudD17c29ydENvbnRlbnR9IHRyaWdnZXI9XCJjbGlja1wiPlxyXG4gICAgICAgICAgICA8U29ydEFzY2VuZGluZ091dGxpbmVkIC8+XHJcbiAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgPC9kaXY+ICovfVxyXG4gICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgY2hpbGRyZW5Db2x1bW5OYW1lPVwiY2hpbGROb2Rlc1wiXHJcbiAgICAgICAgICBkYXRhU291cmNlPXtuZXdEYXRhU291cmNlfVxyXG4gICAgICAgICAgY29sdW1ucz17dGhpcy5nZXRDb2x1bW5zKCl9XHJcbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgICAgICAgLy8gY2xhc3NOYW1lPXtzdHlsZXNbXCJuc2MtdGFibGVcIl19XHJcbiAgICAgICAgICBsb2NhbGU9e3sgZW1wdHlUZXh0OiA8Tm9EYXRhIC8+IH19XHJcbiAgICAgICAgICBzY3JvbGw9e3sgeDogdHJ1ZSB9fVxyXG4gICAgICAgICAgc2l6ZT17dGFibGVTaXplfVxyXG4gICAgICAgICAgey4uLnJlc2l6ZVByb3BzfVxyXG4gICAgICAgICAgey4uLnByb3BzfVxyXG4gICAgICAgICAgey4uLmRyYWdhYmxlUHJvcHN9XHJcbiAgICAgICAgLz5cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBkcmFnYWJsZSA9PT0gdHJ1ZSA/IChcclxuICAgICAgPERuZFByb3ZpZGVyIGJhY2tlbmQ9e0hUTUw1QmFja2VuZH0+e0RlZmF1bHRUYWJsZX08L0RuZFByb3ZpZGVyPlxyXG4gICAgKSA6IChcclxuICAgICAgRGVmYXVsdFRhYmxlXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgd2l0aFpoTG9jYWxlKE5TQ1RhYmxlKTtcclxuIl19