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>
205 lines (175 loc) • 25.5 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 _testUtils = require("react-dom/test-utils");
var _KeyCode = _interopRequireDefault(require("rc-util/lib/KeyCode"));
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 _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
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); }
var ColorPickerMounter = function (_Component) {
_inherits(ColorPickerMounter, _Component);
var _super = _createSuper(ColorPickerMounter);
function ColorPickerMounter() {
var _this;
_classCallCheck(this, ColorPickerMounter);
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 = {
value: "#07C160"
};
return _this;
}
_createClass(ColorPickerMounter, [{
key: "render",
value: function render() {
var _this2 = this;
var value = this.state.value;
return _react["default"].createElement(_["default"], _extends({
value: value,
onChange: function onChange(val) {
return _this2.setState({
value: val
});
}
}, this.props));
}
}]);
return ColorPickerMounter;
}(_react.Component);
describe("ColorPicker", function () {
beforeAll(function () {
jest.useFakeTimers();
Element.prototype.getBoundingClientRect = jest.fn(function () {
return {
width: 160,
height: 90,
top: 0,
left: 0,
bottom: 0,
right: 0,
x: 0,
y: 0,
toJSON: function toJSON() {}
};
});
});
afterAll(function () {
jest.useRealTimers();
});
it("其他事件验证", function () {
var onFinishChange = jest.fn();
var wrapper = (0, _enzyme.mount)(_react["default"].createElement(_["default"], {
defaultValue: "#07C160",
onFinishChange: onFinishChange,
recentColors: ["#00BB9C"]
}));
var input = wrapper.find("input").at(0);
input.simulate("change", {
target: {
value: "11"
}
});
expect(wrapper.find("input").at(0).props().value).toBe("11");
input.simulate("blur");
expect(wrapper.find("input").at(0).props().value).toBe("07C160");
input.simulate("change", {
target: {
value: "00BB9C"
}
});
input.simulate("blur");
expect(onFinishChange).toHaveBeenCalledWith("#00BB9C");
wrapper.find("button").simulate("click");
wrapper.find(".adui-cp-recent i").at(0).simulate("click");
wrapper.find(".adui-cp-standard i").at(11).simulate("click");
wrapper.find("button").simulate("click");
jest.advanceTimersByTime(200);
expect(onFinishChange).toHaveBeenCalledWith("#5BDEC8");
wrapper.find("button").simulate("click");
jest.advanceTimersByTime(350);
var head0 = wrapper.find(".adui-cp-collapse-header").at(0);
var head1 = wrapper.find(".adui-cp-collapse-header").at(1);
var head2 = wrapper.find(".adui-cp-collapse-header").at(2);
expect(wrapper.find(".adui-cp-collapse-content")).toHaveLength(2);
head0.simulate("click");
head2.simulate("click");
head1.simulate("click");
head2.simulate("click");
wrapper.find("Slider").at(0).simulate("focus");
wrapper.find("Slider").at(0).find(".adui-slider-handle").at(0).simulate("keyDown", {
keyCode: _KeyCode["default"].RIGHT
});
expect(wrapper.find(".adui-cp").at(0).props()["data-value"]).toBe("#5BDECA");
wrapper.find("Slider").at(1).simulate("focus");
wrapper.find("Slider").at(1).find(".adui-slider-handle").at(0).simulate("keyDown", {
keyCode: _KeyCode["default"].RIGHT
});
expect(wrapper.find(".adui-cp").at(0).props()["data-value"]).toBe("#59DECA");
wrapper.find("Slider").at(2).simulate("focus");
wrapper.find("Slider").at(2).find(".adui-slider-handle").at(0).simulate("keyDown", {
keyCode: _KeyCode["default"].RIGHT
});
expect(wrapper.find(".adui-cp").at(0).props()["data-value"]).toBe("#5AE0CC");
var map = {};
window.addEventListener = jest.fn(function (event, cb) {
map[event] = cb;
});
var classWrapper = (0, _enzyme.mount)(_react["default"].createElement(ColorPickerMounter, null));
classWrapper.find("button").simulate("click");
jest.advanceTimersByTime(10);
(0, _testUtils.act)(function () {
classWrapper.find(".adui-cp-collapse-header").at(1).simulate("click");
jest.runAllTimers();
classWrapper.update();
});
(0, _testUtils.act)(function () {
classWrapper.find(".adui-cp-palette").at(0).simulate("mouseDown");
map.mousemove({});
map.mousemove({
pageX: 10000,
pageY: 0
});
jest.runAllTimers();
classWrapper.update();
expect(classWrapper.find(".adui-cp").at(0).props()["data-s"]).toBe(100);
map.mousemove({
pageX: -10000,
pageY: 0
});
jest.runAllTimers();
classWrapper.update();
expect(classWrapper.find(".adui-cp").at(0).props()["data-s"]).toBe(0);
map.mousemove({
pageY: 10000,
pageX: 0
});
jest.runAllTimers();
classWrapper.update();
expect(classWrapper.find(".adui-cp").at(0).props()["data-b"]).toBe(0);
map.mousemove({
pageY: -10000,
pageX: 0
});
jest.runAllTimers();
classWrapper.update();
expect(classWrapper.find(".adui-cp").at(0).props()["data-b"]).toBe(100);
map.mouseup({});
});
});
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2xvclBpY2tlck1vdW50ZXIiLCJzdGF0ZSIsInZhbHVlIiwidmFsIiwic2V0U3RhdGUiLCJwcm9wcyIsIkNvbXBvbmVudCIsImRlc2NyaWJlIiwiYmVmb3JlQWxsIiwiamVzdCIsInVzZUZha2VUaW1lcnMiLCJFbGVtZW50IiwicHJvdG90eXBlIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZm4iLCJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCIsIngiLCJ5IiwidG9KU09OIiwiYWZ0ZXJBbGwiLCJ1c2VSZWFsVGltZXJzIiwiaXQiLCJvbkZpbmlzaENoYW5nZSIsIndyYXBwZXIiLCJtb3VudCIsImlucHV0IiwiZmluZCIsImF0Iiwic2ltdWxhdGUiLCJ0YXJnZXQiLCJleHBlY3QiLCJ0b0JlIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJhZHZhbmNlVGltZXJzQnlUaW1lIiwiaGVhZDAiLCJoZWFkMSIsImhlYWQyIiwidG9IYXZlTGVuZ3RoIiwia2V5Q29kZSIsIlJJR0hUIiwibWFwIiwid2luZG93IiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiY2IiLCJjbGFzc1dyYXBwZXIiLCJhY3QiLCJydW5BbGxUaW1lcnMiLCJ1cGRhdGUiLCJtb3VzZW1vdmUiLCJwYWdlWCIsInBhZ2VZIiwibW91c2V1cCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvY29sb3ItcGlja2VyL19fdGVzdHNfXy9ldmVudHMudGVzdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgbW91bnQgfSBmcm9tIFwiZW56eW1lXCJcbmltcG9ydCB7IGFjdCB9IGZyb20gXCJyZWFjdC1kb20vdGVzdC11dGlsc1wiXG5pbXBvcnQga2V5Q29kZSBmcm9tIFwicmMtdXRpbC9saWIvS2V5Q29kZVwiXG5pbXBvcnQgQ29sb3JQaWNrZXIgZnJvbSBcIi4uXCJcblxuY2xhc3MgQ29sb3JQaWNrZXJNb3VudGVyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgc3RhdGUgPSB7XG4gICAgdmFsdWU6IFwiIzA3QzE2MFwiLFxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXMuc3RhdGVcbiAgICByZXR1cm4gKFxuICAgICAgPENvbG9yUGlja2VyXG4gICAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgICAgb25DaGFuZ2U9eyh2YWwpID0+IHRoaXMuc2V0U3RhdGUoeyB2YWx1ZTogdmFsIH0pfVxuICAgICAgICB7Li4udGhpcy5wcm9wc31cbiAgICAgIC8+XG4gICAgKVxuICB9XG59XG5cbmRlc2NyaWJlKFwiQ29sb3JQaWNrZXJcIiwgKCkgPT4ge1xuICBiZWZvcmVBbGwoKCkgPT4ge1xuICAgIGplc3QudXNlRmFrZVRpbWVycygpXG5cbiAgICAvKipcbiAgICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDAwMDY2NjNcbiAgICAgKiDpgJrov4cgbW9jayBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YO+8jOS5i+WQjui/kOihjOeahOaJgOaciSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCDpg73kvJrov5Tlm57ov5nlkIzkuIDkuKrlgLzjgIJcbiAgICAgKi9cbiAgICBFbGVtZW50LnByb3RvdHlwZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPSBqZXN0LmZuKCgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiAxNjAsXG4gICAgICAgIGhlaWdodDogOTAsXG4gICAgICAgIHRvcDogMCxcbiAgICAgICAgbGVmdDogMCxcbiAgICAgICAgYm90dG9tOiAwLFxuICAgICAgICByaWdodDogMCxcbiAgICAgICAgeDogMCxcbiAgICAgICAgeTogMCxcbiAgICAgICAgdG9KU09OOiAoKSA9PiB7fSxcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIGFmdGVyQWxsKCgpID0+IHtcbiAgICBqZXN0LnVzZVJlYWxUaW1lcnMoKVxuICB9KVxuXG4gIGl0KFwi5YW25LuW5LqL5Lu26aqM6K+BXCIsICgpID0+IHtcbiAgICBjb25zdCBvbkZpbmlzaENoYW5nZSA9IGplc3QuZm4oKVxuICAgIGNvbnN0IHdyYXBwZXIgPSBtb3VudChcbiAgICAgIDxDb2xvclBpY2tlclxuICAgICAgICBkZWZhdWx0VmFsdWU9XCIjMDdDMTYwXCJcbiAgICAgICAgb25GaW5pc2hDaGFuZ2U9e29uRmluaXNoQ2hhbmdlfVxuICAgICAgICByZWNlbnRDb2xvcnM9e1tcIiMwMEJCOUNcIl19XG4gICAgICAvPlxuICAgIClcbiAgICBjb25zdCBpbnB1dCA9IHdyYXBwZXIuZmluZChcImlucHV0XCIpLmF0KDApXG5cbiAgICAvLyDpqozor4EgaW5wdXQg5L+u5pS55Li66Z2e5rOV5YC85ZCO77yM5ZyoIGJsdXIg5pe25Lya6YeN572uXG4gICAgaW5wdXQuc2ltdWxhdGUoXCJjaGFuZ2VcIiwgeyB0YXJnZXQ6IHsgdmFsdWU6IFwiMTFcIiB9IH0pXG4gICAgZXhwZWN0KHdyYXBwZXIuZmluZChcImlucHV0XCIpLmF0KDApLnByb3BzKCkudmFsdWUpLnRvQmUoXCIxMVwiKVxuICAgIGlucHV0LnNpbXVsYXRlKFwiYmx1clwiKVxuICAgIGV4cGVjdCh3cmFwcGVyLmZpbmQoXCJpbnB1dFwiKS5hdCgwKS5wcm9wcygpLnZhbHVlKS50b0JlKFwiMDdDMTYwXCIpXG5cbiAgICBpbnB1dC5zaW11bGF0ZShcImNoYW5nZVwiLCB7IHRhcmdldDogeyB2YWx1ZTogXCIwMEJCOUNcIiB9IH0pXG4gICAgaW5wdXQuc2ltdWxhdGUoXCJibHVyXCIpXG4gICAgZXhwZWN0KG9uRmluaXNoQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcIiMwMEJCOUNcIilcblxuICAgIHdyYXBwZXIuZmluZChcImJ1dHRvblwiKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgd3JhcHBlci5maW5kKFwiLmFkdWktY3AtcmVjZW50IGlcIikuYXQoMCkuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIHdyYXBwZXIuZmluZChcIi5hZHVpLWNwLXN0YW5kYXJkIGlcIikuYXQoMTEpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICB3cmFwcGVyLmZpbmQoXCJidXR0b25cIikuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIC8vIOetieW+hSAyMDBtc1xuICAgIGplc3QuYWR2YW5jZVRpbWVyc0J5VGltZSgyMDApXG4gICAgZXhwZWN0KG9uRmluaXNoQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcIiM1QkRFQzhcIilcblxuICAgIC8vIOa1i+ivlSBDb2xsYXBzZVxuICAgIHdyYXBwZXIuZmluZChcImJ1dHRvblwiKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgLy8g562J5b6FIDM1MG1zXG4gICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDM1MClcbiAgICBjb25zdCBoZWFkMCA9IHdyYXBwZXIuZmluZChcIi5hZHVpLWNwLWNvbGxhcHNlLWhlYWRlclwiKS5hdCgwKVxuICAgIGNvbnN0IGhlYWQxID0gd3JhcHBlci5maW5kKFwiLmFkdWktY3AtY29sbGFwc2UtaGVhZGVyXCIpLmF0KDEpXG4gICAgY29uc3QgaGVhZDIgPSB3cmFwcGVyLmZpbmQoXCIuYWR1aS1jcC1jb2xsYXBzZS1oZWFkZXJcIikuYXQoMilcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiLmFkdWktY3AtY29sbGFwc2UtY29udGVudFwiKSkudG9IYXZlTGVuZ3RoKDIpXG4gICAgaGVhZDAuc2ltdWxhdGUoXCJjbGlja1wiKVxuICAgIGhlYWQyLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICBoZWFkMS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgaGVhZDIuc2ltdWxhdGUoXCJjbGlja1wiKVxuXG4gICAgd3JhcHBlci5maW5kKFwiU2xpZGVyXCIpLmF0KDApLnNpbXVsYXRlKFwiZm9jdXNcIilcbiAgICB3cmFwcGVyXG4gICAgICAuZmluZChcIlNsaWRlclwiKVxuICAgICAgLmF0KDApXG4gICAgICAuZmluZChcIi5hZHVpLXNsaWRlci1oYW5kbGVcIilcbiAgICAgIC5hdCgwKVxuICAgICAgLnNpbXVsYXRlKFwia2V5RG93blwiLCB7IGtleUNvZGU6IGtleUNvZGUuUklHSFQgfSlcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiLmFkdWktY3BcIikuYXQoMCkucHJvcHMoKVtcImRhdGEtdmFsdWVcIl0pLnRvQmUoXCIjNUJERUNBXCIpXG4gICAgd3JhcHBlci5maW5kKFwiU2xpZGVyXCIpLmF0KDEpLnNpbXVsYXRlKFwiZm9jdXNcIilcbiAgICB3cmFwcGVyXG4gICAgICAuZmluZChcIlNsaWRlclwiKVxuICAgICAgLmF0KDEpXG4gICAgICAuZmluZChcIi5hZHVpLXNsaWRlci1oYW5kbGVcIilcbiAgICAgIC5hdCgwKVxuICAgICAgLnNpbXVsYXRlKFwia2V5RG93blwiLCB7IGtleUNvZGU6IGtleUNvZGUuUklHSFQgfSlcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiLmFkdWktY3BcIikuYXQoMCkucHJvcHMoKVtcImRhdGEtdmFsdWVcIl0pLnRvQmUoXCIjNTlERUNBXCIpXG4gICAgd3JhcHBlci5maW5kKFwiU2xpZGVyXCIpLmF0KDIpLnNpbXVsYXRlKFwiZm9jdXNcIilcbiAgICB3cmFwcGVyXG4gICAgICAuZmluZChcIlNsaWRlclwiKVxuICAgICAgLmF0KDIpXG4gICAgICAuZmluZChcIi5hZHVpLXNsaWRlci1oYW5kbGVcIilcbiAgICAgIC5hdCgwKVxuICAgICAgLnNpbXVsYXRlKFwia2V5RG93blwiLCB7IGtleUNvZGU6IGtleUNvZGUuUklHSFQgfSlcbiAgICBleHBlY3Qod3JhcHBlci5maW5kKFwiLmFkdWktY3BcIikuYXQoMCkucHJvcHMoKVtcImRhdGEtdmFsdWVcIl0pLnRvQmUoXCIjNUFFMENDXCIpXG5cbiAgICBjb25zdCBtYXAgPSB7fVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA9IGplc3QuZm4oKGV2ZW50LCBjYikgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgbWFwW2V2ZW50XSA9IGNiXG4gICAgfSlcblxuICAgIGNvbnN0IGNsYXNzV3JhcHBlciA9IG1vdW50KDxDb2xvclBpY2tlck1vdW50ZXIgLz4pXG5cbiAgICBjbGFzc1dyYXBwZXIuZmluZChcImJ1dHRvblwiKS5zaW11bGF0ZShcImNsaWNrXCIpXG4gICAgamVzdC5hZHZhbmNlVGltZXJzQnlUaW1lKDEwKVxuXG4gICAgYWN0KCgpID0+IHtcbiAgICAgIGNsYXNzV3JhcHBlci5maW5kKFwiLmFkdWktY3AtY29sbGFwc2UtaGVhZGVyXCIpLmF0KDEpLnNpbXVsYXRlKFwiY2xpY2tcIilcbiAgICAgIGplc3QucnVuQWxsVGltZXJzKClcbiAgICAgIGNsYXNzV3JhcHBlci51cGRhdGUoKVxuICAgIH0pXG5cbiAgICBhY3QoKCkgPT4ge1xuICAgICAgY2xhc3NXcmFwcGVyLmZpbmQoXCIuYWR1aS1jcC1wYWxldHRlXCIpLmF0KDApLnNpbXVsYXRlKFwibW91c2VEb3duXCIpXG5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG1hcC5tb3VzZW1vdmUoe30pXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBtYXAubW91c2Vtb3ZlKHsgcGFnZVg6IDEwMDAwLCBwYWdlWTogMCB9KVxuXG4gICAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gICAgICBjbGFzc1dyYXBwZXIudXBkYXRlKClcbiAgICAgIGV4cGVjdChjbGFzc1dyYXBwZXIuZmluZChcIi5hZHVpLWNwXCIpLmF0KDApLnByb3BzKClbXCJkYXRhLXNcIl0pLnRvQmUoMTAwKVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgbWFwLm1vdXNlbW92ZSh7IHBhZ2VYOiAtMTAwMDAsIHBhZ2VZOiAwIH0pXG4gICAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gICAgICBjbGFzc1dyYXBwZXIudXBkYXRlKClcbiAgICAgIGV4cGVjdChjbGFzc1dyYXBwZXIuZmluZChcIi5hZHVpLWNwXCIpLmF0KDApLnByb3BzKClbXCJkYXRhLXNcIl0pLnRvQmUoMClcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG1hcC5tb3VzZW1vdmUoeyBwYWdlWTogMTAwMDAsIHBhZ2VYOiAwIH0pXG4gICAgICBqZXN0LnJ1bkFsbFRpbWVycygpXG4gICAgICBjbGFzc1dyYXBwZXIudXBkYXRlKClcbiAgICAgIGV4cGVjdChjbGFzc1dyYXBwZXIuZmluZChcIi5hZHVpLWNwXCIpLmF0KDApLnByb3BzKClbXCJkYXRhLWJcIl0pLnRvQmUoMClcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG1hcC5tb3VzZW1vdmUoeyBwYWdlWTogLTEwMDAwLCBwYWdlWDogMCB9KVxuICAgICAgamVzdC5ydW5BbGxUaW1lcnMoKVxuICAgICAgY2xhc3NXcmFwcGVyLnVwZGF0ZSgpXG4gICAgICBleHBlY3QoY2xhc3NXcmFwcGVyLmZpbmQoXCIuYWR1aS1jcFwiKS5hdCgwKS5wcm9wcygpW1wiZGF0YS1iXCJdKS50b0JlKDEwMClcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG1hcC5tb3VzZXVwKHt9KVxuICAgIH0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVNQSxrQjs7Ozs7Ozs7Ozs7Ozs7O1VBQ0pDLEssR0FBUTtNQUNOQyxLQUFLLEVBQUU7SUFERCxDOzs7Ozs7V0FJUixrQkFBUztNQUFBOztNQUNQLElBQVFBLEtBQVIsR0FBa0IsS0FBS0QsS0FBdkIsQ0FBUUMsS0FBUjtNQUNBLE9BQ0UsZ0NBQUMsWUFBRDtRQUNFLEtBQUssRUFBRUEsS0FEVDtRQUVFLFFBQVEsRUFBRSxrQkFBQ0MsR0FBRDtVQUFBLE9BQVMsTUFBSSxDQUFDQyxRQUFMLENBQWM7WUFBRUYsS0FBSyxFQUFFQztVQUFULENBQWQsQ0FBVDtRQUFBO01BRlosR0FHTSxLQUFLRSxLQUhYLEVBREY7SUFPRDs7OztFQWQ4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