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>
229 lines (197 loc) • 27.2 kB
JavaScript
;
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); }
var React = _interopRequireWildcard(require("react"));
var _enzyme = require("enzyme");
var _reactTestRenderer = _interopRequireDefault(require("react-test-renderer"));
var _ = _interopRequireDefault(require(".."));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
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); }
window.ResizeObserver = window.ResizeObserver || jest.fn().mockImplementation(function () {
return {
disconnect: jest.fn(),
observe: jest.fn(),
unobserve: jest.fn()
};
});
var Column = _["default"].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(_["default"], {
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 = (0, _enzyme.mount)(React.createElement(_["default"], {
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 = (0, _enzyme.mount)(React.createElement(_["default"], {
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 = _reactTestRenderer["default"].create(React.createElement(_["default"], {
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 = (0, _enzyme.mount)(React.createElement(_["default"], {
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 = (0, _enzyme.mount)(React.createElement(_["default"], {
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 = (0, _enzyme.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 = (0, _enzyme.mount)(React.createElement(_["default"], {
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJSZXNpemVPYnNlcnZlciIsImplc3QiLCJmbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImRpc2Nvbm5lY3QiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiQ29sdW1uIiwiVGFibGUiLCJkYXRhU291cmNlIiwia2V5Iiwib25lIiwiUmFkaW9Nb3VudGVyIiwic3RhdGUiLCJrZXlzIiwiYXJncyIsInNldFN0YXRlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJkZXNjcmliZSIsIml0Iiwib25TZWxlY3RDaGFuZ2UiLCJ3cmFwcGVyIiwibW91bnQiLCJyb3ciLCJkaXNhYmxlZCIsImZpbmQiLCJhdCIsInNpbXVsYXRlIiwiZXhwZWN0Iiwic2VsZWN0ZWRSb3dLZXlzIiwidG9FcXVhbCIsIlRlc3RSZW5kZXJlciIsImNyZWF0ZSIsInRvTWF0Y2hTbmFwc2hvdCIsIndyYXBwZXIwIiwid3JhcHBlcjEiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvdGFibGUvX190ZXN0c19fL3NlbGVjdFJvdy50ZXN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgbW91bnQgfSBmcm9tIFwiZW56eW1lXCJcbmltcG9ydCBUZXN0UmVuZGVyZXIgZnJvbSBcInJlYWN0LXRlc3QtcmVuZGVyZXJcIlxuaW1wb3J0IFRhYmxlIGZyb20gXCIuLlwiXG5cbndpbmRvdy5SZXNpemVPYnNlcnZlciA9XG4gIHdpbmRvdy5SZXNpemVPYnNlcnZlciB8fFxuICBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gICAgZGlzY29ubmVjdDogamVzdC5mbigpLFxuICAgIG9ic2VydmU6IGplc3QuZm4oKSxcbiAgICB1bm9ic2VydmU6IGplc3QuZm4oKSxcbiAgfSkpXG5cbmNvbnN0IHsgQ29sdW1uIH0gPSBUYWJsZVxuXG5jb25zdCBkYXRhU291cmNlID0gW1xuICB7XG4gICAga2V5OiAwLFxuICAgIG9uZTogXCLnrKzkuIDpoblcIixcbiAgfSxcbiAge1xuICAgIGtleTogMSxcbiAgICBvbmU6IFwi56ys5LqM6aG5XCIsXG4gIH0sXG4gIHtcbiAgICBrZXk6IDIsXG4gICAgb25lOiBcIuesrOS4iemhuVwiLFxuICB9LFxuXVxuXG5jbGFzcyBSYWRpb01vdW50ZXIgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0ZSA9IHtcbiAgICBrZXlzOiBudWxsLFxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsga2V5cyB9ID0gdGhpcy5zdGF0ZVxuICAgIHJldHVybiAoXG4gICAgICA8VGFibGVcbiAgICAgICAgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX1cbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzPXtrZXlzfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXsoYXJncykgPT4gdGhpcy5zZXRTdGF0ZSh7IGtleXM6IGFyZ3MgfSl9XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gIH1cbn1cblxuZGVzY3JpYmUoXCJkaXNhYmxlZCDpqozor4FcIiwgKCkgPT4ge1xuICBpdChcIuWNlemAiVwiLCAoKSA9PiB7XG4gICAgY29uc3Qgb25TZWxlY3RDaGFuZ2UgPSBqZXN0LmZuKClcbiAgICAvKipcbiAgICAgKiDmqKHmi5/liY3kuKTpobnnpoHmraLvvIzlhbbkuK3kuIDkuKrkuLrmnKrpgInkuK3vvIzlj6bkuIDkuKrkuLrlt7LpgInkuK1cbiAgICAgKi9cbiAgICBjb25zdCB3cmFwcGVyID0gbW91bnQoXG4gICAgICA8VGFibGVcbiAgICAgICAgZGF0YVNvdXJjZT17ZGF0YVNvdXJjZX1cbiAgICAgICAgb25TZWxlY3RDaGFuZ2U9e29uU2VsZWN0Q2hhbmdlfVxuICAgICAgICBkZWZhdWx0U2VsZWN0ZWRSb3dLZXlzPXtbMV19XG4gICAgICAgIHNlbGVjdE11bHRpcGxlPXtmYWxzZX1cbiAgICAgICAgZ2V0U2VsZWN0UHJvcHM9eyhyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICBpZiAocm93LmtleSA9PT0gMCB8fCByb3cua2V5ID09PSAxKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktcmFkaW8taW5kaWNhdG9yXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzFdKVxuICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLXJhZGlvLWluZGljYXRvclwiKS5hdCgxKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFsxXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1yYWRpby1pbmRpY2F0b3JcIikuYXQoMikuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMl0pXG4gIH0pXG5cbiAgaXQoXCLlpJrpgIlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgLyoqXG4gICAgICog5qih5ouf5YmN5Lik6aG556aB5q2i77yM5YW25Lit5LiA5Liq5Li65pyq6YCJ5Lit77yM5Y+m5LiA5Liq5Li65bey6YCJ5LitXG4gICAgICovXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkUm93S2V5cz17WzEsIFwi5aSa5L2Z6aG5XCJdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZVxuICAgICAgICBnZXRTZWxlY3RQcm9wcz17KHJvdykgPT4ge1xuICAgICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIGlmIChyb3cua2V5ID09PSAwIHx8IHJvdy5rZXkgPT09IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge31cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPENvbHVtbiB0aXRsZT1cIm9uZVwiIGRhdGFJbmRleD1cIm9uZVwiIC8+XG4gICAgICA8L1RhYmxlPlxuICAgIClcbiAgICAvLyDlpJrpgInml7bmib7liLDnmoTnrKzkuIDkuKrlhYPntKDmmK/lhajpgInmoYZcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1jaGVja2JveC1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbXG4gICAgICAxLFxuICAgICAgXCLlpJrkvZnpoblcIixcbiAgICAgIDIsXG4gICAgXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1jaGVja2JveC1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMSwgXCLlpJrkvZnpoblcIl0pXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktY2hlY2tib3gtaW5kaWNhdG9yXCIpLmF0KDMpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoW1xuICAgICAgMSxcbiAgICAgIFwi5aSa5L2Z6aG5XCIsXG4gICAgICAyLFxuICAgIF0pXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktY2hlY2tib3gtaW5kaWNhdG9yXCIpLmF0KDMpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiVGFibGVcIikuc3RhdGUoKS5zZWxlY3RlZFJvd0tleXMpLnRvRXF1YWwoWzEsIFwi5aSa5L2Z6aG5XCJdKVxuICB9KVxufSlcblxuZGVzY3JpYmUoXCJiYXNlXCIsICgpID0+IHtcbiAgaXQoXCLlv6vnhafmoLjlr7lcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHdyYXBwZXIgPSBUZXN0UmVuZGVyZXIuY3JlYXRlKFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZFJvd0tleXM9e1sxXX1cbiAgICAgICAgc2VsZWN0TXVsdGlwbGU9e2ZhbHNlfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17KCkgPT4ge319XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvTWF0Y2hTbmFwc2hvdCgpXG4gIH0pXG5cbiAgaXQoXCLmmK/lkKbog73lhoXpg6jpqbHliqhcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgY29uc3Qgd3JhcHBlciA9IG1vdW50KFxuICAgICAgPFRhYmxlXG4gICAgICAgIGRhdGFTb3VyY2U9e2RhdGFTb3VyY2V9XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkUm93S2V5cz17WzFdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFsxXSlcbiAgICB3cmFwcGVyLmZpbmQoXCIuYWR1aS1yYWRpby1pbmRpY2F0b3JcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMF0pXG4gIH0pXG5cbiAgaXQoXCLmmK/lkKbog73lpJbpg6jmjqfliLZcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG9uU2VsZWN0Q2hhbmdlID0gamVzdC5mbigpXG4gICAgY29uc3Qgd3JhcHBlcjAgPSBtb3VudChcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBvblNlbGVjdENoYW5nZT17b25TZWxlY3RDaGFuZ2V9XG4gICAgICAgIHNlbGVjdGVkUm93S2V5cz17WzFdfVxuICAgICAgICBzZWxlY3RNdWx0aXBsZT17ZmFsc2V9XG4gICAgICA+XG4gICAgICAgIDxDb2x1bW4gdGl0bGU9XCJvbmVcIiBkYXRhSW5kZXg9XCJvbmVcIiAvPlxuICAgICAgPC9UYWJsZT5cbiAgICApXG4gICAgZXhwZWN0KHdyYXBwZXIwLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMV0pXG4gICAgd3JhcHBlcjAuZmluZChcIi5hZHVpLXJhZGlvLWluZGljYXRvclwiKS5hdCgwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KHdyYXBwZXIwLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbMV0pXG5cbiAgICBjb25zdCB3cmFwcGVyMSA9IG1vdW50KDxSYWRpb01vdW50ZXIgLz4pXG4gICAgZXhwZWN0KHdyYXBwZXIxLmZpbmQoXCJUYWJsZVwiKS5zdGF0ZSgpLnNlbGVjdGVkUm93S2V5cykudG9FcXVhbChbXSlcbiAgICB3cmFwcGVyMS5maW5kKFwiLmFkdWktcmFkaW8taW5kaWNhdG9yXCIpLmF0KDApLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBleHBlY3Qod3JhcHBlcjEuZmluZChcIlRhYmxlXCIpLnN0YXRlKCkuc2VsZWN0ZWRSb3dLZXlzKS50b0VxdWFsKFswXSlcbiAgfSlcblxuICBpdChcIuaYr+WQpuaUr+aMgSBzZWxlY3RPblJvd0NsaWNrXCIsICgpID0+IHtcbiAgICBjb25zdCBvblNlbGVjdENoYW5nZSA9IGplc3QuZm4oKVxuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgICAgIDxUYWJsZVxuICAgICAgICBkYXRhU291cmNlPXtkYXRhU291cmNlfVxuICAgICAgICBkZWZhdWx0U2VsZWN0ZWRSb3dLZXlzPXtbMV19XG4gICAgICAgIG9uU2VsZWN0Q2hhbmdlPXtvblNlbGVjdENoYW5nZX1cbiAgICAgICAgc2VsZWN0T25Sb3dDbGlja1xuICAgICAgPlxuICAgICAgICA8Q29sdW1uIHRpdGxlPVwib25lXCIgZGF0YUluZGV4PVwib25lXCIgLz5cbiAgICAgIDwvVGFibGU+XG4gICAgKVxuICAgIHdyYXBwZXIuZmluZCgnW3JvbGU9XCJyb3dcIl0nKS5hdCgwKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgZXhwZWN0KG9uU2VsZWN0Q2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbMSwgMF0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQUEsTUFBTSxDQUFDQyxjQUFQLEdBQ0VELE1BQU0sQ0FBQ0MsY0FBUCxJQUNBQyxJQUFJLENBQUNDLEVBQUwsR0FBVUMsa0JBQVYsQ0FBNkI7RUFBQSxPQUFPO0lBQ2xDQyxVQUFVLEVBQUVILElBQUksQ0FBQ0MsRUFBTCxFQURzQjtJQUVsQ0csT0FBTyxFQUFFSixJQUFJLENBQUNDLEVBQUwsRUFGeUI7SUFHbENJLFNBQVMsRUFBRUwsSUFBSSxDQUFDQyxFQUFMO0VBSHVCLENBQVA7QUFBQSxDQUE3QixDQUZGO0FBUUEsSUFBUUssTUFBUixHQUFtQkMsWUFBbkIsQ0FBUUQsTUFBUjtBQUVBLElBQU1FLFVBQVUsR0FBRyxDQUNqQjtFQUNFQyxHQUFHLEVBQUUsQ0FEUDtFQUVFQyxHQUFHLEVBQUU7QUFGUCxDQURpQixFQUtqQjtFQUNFRCxHQUFHLEVBQUUsQ0FEUDtFQUVFQyxHQUFHLEVBQUU7QUFGUCxDQUxpQixFQVNqQjtFQUNFRCxHQUFHLEVBQUUsQ0FEUDtFQUVFQyxHQUFHLEVBQUU7QUFGUCxDQVRpQixDQUFuQjs7SUFlTUMsWTs7Ozs7Ozs7Ozs7Ozs7O1VBQ0pDLEssR0FBUTtNQUNOQyxJQUFJLEVBQUU7SUFEQSxDOzs7Ozs7V0FJUixrQkFBUztNQUFBOztNQUNQLElBQVFBLElBQVIsR0FBaUIsS0FBS0QsS0FBdEIsQ0FBUUMsSUFBUjtNQUNBLE9BQ0Usb0JBQUMsWUFBRDtRQUNFLFVBQVUsRUFBRUwsVUFEZDtRQUVFLGVBQWUsRUFBRUssSUFGbkI7UUFHRSxjQUFjLEVBQUUsS0FIbEI7UUFJRSxjQUFjLEVBQUUsd0JBQUNDLElBQUQ7VUFBQSxPQUFVLE1BQUksQ0FBQ0MsUUFBTCxDQUFjO1lBQUVGLElBQUksRUFB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