UNPKG

adui

Version:

<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>

216 lines (193 loc) 25.8 kB
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 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); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; } 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 } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 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); }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 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; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } import * as React from "react"; import { mount } from "enzyme"; import TestRenderer from "react-test-renderer"; import Table from ".."; window.ResizeObserver = window.ResizeObserver || jest.fn().mockImplementation(function () { return { disconnect: jest.fn(), observe: jest.fn(), unobserve: jest.fn() }; }); var Column = Table.Column; var dataSource = [{ key: 0, one: "第一项" }, { key: 1, one: "第二项" }, { key: 2, one: "第三项" }]; var RadioMounter = function (_React$Component) { _inherits(RadioMounter, _React$Component); var _super = _createSuper(RadioMounter); function RadioMounter() { var _this; _classCallCheck(this, RadioMounter); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _super.call.apply(_super, [this].concat(args)); _this.state = { keys: null }; return _this; } _createClass(RadioMounter, [{ key: "render", value: function render() { var _this2 = this; var keys = this.state.keys; return React.createElement(Table, { dataSource: dataSource, selectedRowKeys: keys, selectMultiple: false, onSelectChange: function onSelectChange(args) { return _this2.setState({ keys: args }); } }, React.createElement(Column, { title: "one", dataIndex: "one" })); } }]); return RadioMounter; }(React.Component); describe("disabled 验证", function () { it("单选", function () { var onSelectChange = jest.fn(); var wrapper = mount(React.createElement(Table, { dataSource: dataSource, onSelectChange: onSelectChange, defaultSelectedRowKeys: [1], selectMultiple: false, getSelectProps: function getSelectProps(row) { if (row) { if (row.key === 0 || row.key === 1) { return { disabled: true }; } } return {}; } }, React.createElement(Column, { title: "one", dataIndex: "one" }))); wrapper.find(".adui-radio-indicator").at(0).simulate("click"); expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1]); wrapper.find(".adui-radio-indicator").at(1).simulate("click"); expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1]); wrapper.find(".adui-radio-indicator").at(2).simulate("click"); expect(wrapper.find("Table").state().selectedRowKeys).toEqual([2]); }); it("多选", function () { var onSelectChange = jest.fn(); var wrapper = mount(React.createElement(Table, { dataSource: dataSource, onSelectChange: onSelectChange, defaultSelectedRowKeys: [1, "多余项"], selectMultiple: true, getSelectProps: function getSelectProps(row) { if (row) { if (row.key === 0 || row.key === 1) { return { disabled: true }; } } return {}; } }, React.createElement(Column, { title: "one", dataIndex: "one" }))); wrapper.find(".adui-checkbox-indicator").at(0).simulate("click"); expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1, "多余项", 2]); wrapper.find(".adui-checkbox-indicator").at(0).simulate("click"); expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1, "多余项"]); wrapper.find(".adui-checkbox-indicator").at(3).simulate("click"); expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1, "多余项", 2]); wrapper.find(".adui-checkbox-indicator").at(3).simulate("click"); expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1, "多余项"]); }); }); describe("base", function () { it("快照核对", function () { var wrapper = TestRenderer.create(React.createElement(Table, { dataSource: dataSource, defaultSelectedRowKeys: [1], selectMultiple: false, onSelectChange: function onSelectChange() {} }, React.createElement(Column, { title: "one", dataIndex: "one" }))); expect(wrapper).toMatchSnapshot(); }); it("是否能内部驱动", function () { var onSelectChange = jest.fn(); var wrapper = mount(React.createElement(Table, { dataSource: dataSource, onSelectChange: onSelectChange, defaultSelectedRowKeys: [1], selectMultiple: false }, React.createElement(Column, { title: "one", dataIndex: "one" }))); expect(wrapper.find("Table").state().selectedRowKeys).toEqual([1]); wrapper.find(".adui-radio-indicator").at(0).simulate("click"); expect(wrapper.find("Table").state().selectedRowKeys).toEqual([0]); }); it("是否能外部控制", function () { var onSelectChange = jest.fn(); var wrapper0 = mount(React.createElement(Table, { dataSource: dataSource, onSelectChange: onSelectChange, selectedRowKeys: [1], selectMultiple: false }, React.createElement(Column, { title: "one", dataIndex: "one" }))); expect(wrapper0.find("Table").state().selectedRowKeys).toEqual([1]); wrapper0.find(".adui-radio-indicator").at(0).simulate("click"); expect(wrapper0.find("Table").state().selectedRowKeys).toEqual([1]); var wrapper1 = mount(React.createElement(RadioMounter, null)); expect(wrapper1.find("Table").state().selectedRowKeys).toEqual([]); wrapper1.find(".adui-radio-indicator").at(0).simulate("click"); expect(wrapper1.find("Table").state().selectedRowKeys).toEqual([0]); }); it("是否支持 selectOnRowClick", function () { var onSelectChange = jest.fn(); var wrapper = mount(React.createElement(Table, { dataSource: dataSource, defaultSelectedRowKeys: [1], onSelectChange: onSelectChange, selectOnRowClick: true }, React.createElement(Column, { title: "one", dataIndex: "one" }))); wrapper.find('[role="row"]').at(0).simulate("click"); expect(onSelectChange).toHaveBeenCalledWith([1, 0]); }); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1vdW50IiwiVGVzdFJlbmRlcmVyIiwiVGFibGUiLCJ3aW5kb3ciLCJSZXNpemVPYnNlcnZlciIsImplc3QiLCJmbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiQ29sdW1uIiwiZGF0YVNvdXJjZSIsImtleSIsIm9uZSIsIlJhZGlvTW91bnRlciIsInN0YXRlIiwia2V5cyIsImFyZ3MiLCJzZXRTdGF0ZSIsIkNvbXBvbmVudCIsImRlc2NyaWJlIiwiaXQiLCJvblNlbGVjdENoYW5nZSIsIndyYXBwZXIiLCJyb3ciLCJkaXNhYmxlZCIsImZpbmQiLCJhdCIsInNpbXVsYXRlIiwiZXhwZWN0Iiwic2VsZWN0ZWRSb3dLZXlzIiwidG9FcXVhbCIsImNyZWF0ZSIsInRvTWF0Y2hTbmFwc2hvdCIsIndyYXBwZXIwIiwid3JhcHBlcjEiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvdGFibGUvX190ZXN0c19fL3NlbGVjdFJvdy50ZXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgbW91bnQgfSBmcm9tIFwiZW56eW1lXCJcbmltcG9ydCBUZXN0UmVuZGVyZXIgZnJvbSBcInJlYWN0LXRlc3QtcmVuZGVyZXJcIlxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLlwiXG5cbndpbmRvdy5SZXNpemVPYnNlcnZlciA9XG4gIHdpbmRvdy5SZXNpemVPYnNlcnZlciB8fFxuICBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgZGlzY29ubmVjdDogamVzdC5mbigpLFxuICAgIG9ic2VydmU6IGplc3QuZm4oKSxcbiAgICB1bm9ic2VydmU6IGplc3QuZm4oKSxcbiAgfSkpXG5cbmNvbnN0IHsgQ29sdW1uIH0gPSBUYWJsZVxuXG5jb25zdCBkYXRhU291cmNlID0gW1xuICB7XG4gICAga2V5OiAwLFxuICAgIG9uZTogXCLnrKzkuIDpoblcIixcbiAgfSxcbiAge1xuICAgIGtleTogMSxcbiAgICBvbmU6IFwi56ys5LqM6aG5XCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IDIsXG4gICAgb25lOiBcIuesrOS4iemhuVwiLFxuICB9LFxuXVxuXG5jbGFzcyBSYWRpb01vdW50ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0ZSA9IHtcbiAgICBrZXlzOiBudWxsLFxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsga2V5cyB9ID0gdGhpcy5zdGF0ZVxuICAgIHJldHVybiAoXG4gICAgICA8VGFibGVcbiAgICAgICAgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX1cbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzPXtrZXlzfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXsoYXJncykgPT4gdGhpcy5zZXRTdGF0ZSh7IGtleXM6IGFyZ3MgfSl9XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gIH1cbn1cblxuZGVzY3JpYmUoXCJkaXNhYmxlZCDpqozor4FcIiwgKCkgPT4ge1xuICBpdChcIuWNlemAiVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgb25TZWxlY3RDaGFuZ2UgPSBqZXN0LmZuKClcbiAgICAvKipcbiAgICAgKiDmqKHmi5/liY3kuKTpobnnpoHmraLvvIzlhbbkuK3kuIDkuKrkuLrmnKrpgInkuK3vvIzlj6bkuIDkuKrkuLrlt7LpgInkuK1cbiAgICAgKi9cbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8VGFibGVcbiAgICAgICAgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX1cbiAgICAgICAgb25TZWxlY3RDaGFuZ2U9e29uU2VsZWN0Q2hhbmdlfVxuICAgICAgICBkZWZhdWx0U2VsZWN0ZWRSb3dLZXlzPXtbMV19XG4gICAgICAgIHNlbGVjdE11bHRpcGxlPXtmYWxzZX1cbiAgICAgICAgZ2V0U2VsZWN0UHJvcHM9eyhyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICBpZiAocm93LmtleSA9PT0gMCB8fCByb3cua2V5ID09PSAxKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktcmFkaW8taW5kaWNhdG9yXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzFdKVxuICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLXJhZGlvLWluZGljYXRvclwiKS5hdCgxKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFsxXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1yYWRpby1pbmRpY2F0b3JcIikuYXQoMikuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMl0pXG4gIH0pXG5cbiAgaXQoXCLlpJrpgIlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgLyoqXG4gICAgICog5qih5ouf5YmN5Lik6aG556aB5q2i77yM5YW25Lit5LiA5Liq5Li65pyq6YCJ5Lit77yM5Y+m5LiA5Liq5Li65bey6YCJ5LitXG4gICAgICovXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkUm93S2V5cz17WzEsIFwi5aSa5L2Z6aG5XCJdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZVxuICAgICAgICBnZXRTZWxlY3RQcm9wcz17KHJvdykgPT4ge1xuICAgICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIGlmIChyb3cua2V5ID09PSAwIHx8IHJvdy5rZXkgPT09IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPENvbHVtbiB0aXRsZT1cIm9uZVwiIGRhdGFJbmRleD1cIm9uZVwiIC8+XG4gICAgICA8L1RhYmxlPlxuICAgIClcbiAgICAvLyDlpJrpgInml7bmib7liLDnmoTnrKzkuIDkuKrlhYPntKDmmK/lhajpgInmoYZcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1jaGVja2JveC1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbXG4gICAgICAxLFxuICAgICAgXCLlpJrkvZnpoblcIixcbiAgICAgIDIsXG4gICAgXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1jaGVja2JveC1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMSwgXCLlpJrkvZnpoblcIl0pXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktY2hlY2tib3gtaW5kaWNhdG9yXCIpLmF0KDMpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoW1xuICAgICAgMSxcbiAgICAgIFwi5aSa5L2Z6aG5XCIsXG4gICAgICAyLFxuICAgIF0pXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktY2hlY2tib3gtaW5kaWNhdG9yXCIpLmF0KDMpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzEsIFwi5aSa5L2Z6aG5XCJdKVxuICB9KVxufSlcblxuZGVzY3JpYmUoXCJiYXNlXCIsICgpID0+IHtcbiAgaXQoXCLlv6vnhafmoLjlr7lcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBUZXN0UmVuZGVyZXIuY3JlYXRlKFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZFJvd0tleXM9e1sxXX1cbiAgICAgICAgc2VsZWN0TXVsdGlwbGU9e2ZhbHNlfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17KCkgPT4ge319XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG5cbiAgaXQoXCLmmK/lkKbog73lhoXpg6jpqbHliqhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkUm93S2V5cz17WzFdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFsxXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1yYWRpby1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMF0pXG4gIH0pXG5cbiAgaXQoXCLmmK/lkKbog73lpJbpg6jmjqfliLZcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgY29uc3Qgd3JhcHBlcjAgPSBtb3VudChcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17b25TZWxlY3RDaGFuZ2V9XG4gICAgICAgIHNlbGVjdGVkUm93S2V5cz17WzFdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIwLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMV0pXG4gICAgd3JhcHBlcjAuZmluZChcIi5hZHVpLXJhZGlvLWluZGljYXRvclwiKS5hdCgwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIwLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMV0pXG5cbiAgICBjb25zdCB3cmFwcGVyMSA9IG1vdW50KDxSYWRpb01vdW50ZXIgLz4pXG4gICAgZXhwZWN0KHdyYXBwZXIxLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbXSlcbiAgICB3cmFwcGVyMS5maW5kKFwiLmFkdWktcmFkaW8taW5kaWNhdG9yXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlcjEuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFswXSlcbiAgfSlcblxuICBpdChcIuaYr+WQpuaUr+aMgSBzZWxlY3RPblJvd0NsaWNrXCIsICgpID0+IHtcbiAgICBjb25zdCBvblNlbGVjdENoYW5nZSA9IGplc3QuZm4oKVxuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBkZWZhdWx0U2VsZWN0ZWRSb3dLZXlzPXtbMV19XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgc2VsZWN0T25Sb3dDbGlja1xuICAgICAgPlxuICAgICAgICA8Q29sdW1uIHRpdGxlPVwib25lXCIgZGF0YUluZGV4PVwib25lXCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIHdyYXBwZXIuZmluZCgnW3JvbGU9XCJyb3dcIl0nKS5hdCgwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KG9uU2VsZWN0Q2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbMSwgMF0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixRQUF0QjtBQUNBLE9BQU9DLFlBQVAsTUFBeUIscUJBQXpCO0FBQ0EsT0FBT0MsS0FBUCxNQUFrQixJQUFsQjtBQUVBQyxNQUFNLENBQUNDLGNBQVAsR0FDRUQsTUFBTSxDQUFDQyxjQUFQLElBQ0FDLElBQUksQ0FBQ0MsRUFBTCxHQUFVQyxrQkFBVixDQUE2QjtFQUFBLE9BQU87SUFDbENDLFVBQVUsRUFBRUgsSUFBSSxDQUFDQyxFQUFMLEVBRHNCO0lBRWxDRyxPQUFPLEVBQUVKLElBQUksQ0FBQ0MsRUFBTCxFQUZ5QjtJQUdsQ0ksU0FBUyxFQUFFTCxJQUFJLENBQUNDLEVBQUw7RUFIdUIsQ0FBUDtBQUFBLENBQTdCLENBRkY7QUFRQSxJQUFRSyxNQUFSLEdBQW1CVCxLQUFuQixDQUFRUyxNQUFSO0FBRUEsSUFBTUMsVUFBVSxHQUFHLENBQ2pCO0VBQ0VDLEdBQUcsRUFBRSxDQURQO0VBRUVDLEdBQUcsRUFBRTtBQUZQLENBRGlCLEVBS2pCO0VBQ0VELEdBQUcsRUFBRSxDQURQO0VBRUVDLEdBQUcsRUFBRTtBQUZQLENBTGlCLEVBU2pCO0VBQ0VELEdBQUcsRUFBRSxDQURQO0VBRUVDLEdBQUcsRUFBRTtBQUZQLENBVGlCLENBQW5COztJQWVNQyxZOzs7Ozs7Ozs7Ozs7Ozs7VUFDSkMsSyxHQUFRO01BQ05DLElBQUksRUFBRTtJQURBLEM7Ozs7OztXQUlSLGtCQUFTO01BQUE7O01BQ1AsSUFBUUEsSUFBUixHQUFpQixLQUFLRCxLQUF0QixDQUFRQyxJQUFSO01BQ0EsT0FDRSxvQkFBQyxLQUFEO1FBQ0UsVUFBVSxFQUFFTCxVQURkO1FBRUUsZUFBZSxFQUFFSyxJQUZuQjtRQUdFLGNB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