ably-ui 8.7.0.dev.7021bee → 8.7.0.dev.7072b07
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -6
- data/README.md +15 -4
- data/lib/ably_ui/core/code/component.css +2 -0
- data/lib/ably_ui/core/code/component.js +739 -1
- data/lib/ably_ui/core/company_autocomplete/component.css +2 -0
- data/lib/ably_ui/core/company_autocomplete/component.js +1161 -1
- data/lib/ably_ui/core/connect_state_wrapper/component.js +22 -1
- data/lib/ably_ui/core/contact_footer/component.css +2 -0
- data/lib/ably_ui/core/contact_footer/component.js +211 -1
- data/lib/ably_ui/core/cookie_message/component.css +2 -0
- data/lib/ably_ui/core/cookie_message/component.js +82 -1
- data/lib/ably_ui/core/core.rb +12 -4
- data/lib/ably_ui/core/customer_logos/component.js +22 -1
- data/lib/ably_ui/core/dropdown_menu/component.js +22 -1
- data/lib/ably_ui/core/feature_footer/component.css +2 -0
- data/lib/ably_ui/core/feature_footer/component.js +211 -1
- data/lib/ably_ui/core/featured_link/component.css +2 -0
- data/lib/ably_ui/core/featured_link/component.js +82 -1
- data/lib/ably_ui/core/flash/component.css +2 -0
- data/lib/ably_ui/core/flash/component.js +82 -1
- data/lib/ably_ui/core/footer/component.css +23 -1
- data/lib/ably_ui/core/footer/component.js +82 -1
- data/lib/ably_ui/core/footer/footer.html.erb +120 -63
- data/lib/ably_ui/core/icon/component.js +22 -1
- data/lib/ably_ui/core/images/best-support-2023.svg +1 -0
- data/lib/ably_ui/core/images/fastest-implementation-2023.svg +1 -0
- data/lib/ably_ui/core/images/high-performer-2022.png +0 -0
- data/lib/ably_ui/core/images/high-performer-2023.svg +1 -0
- data/lib/ably_ui/core/images/highest-user-adoption-2022.png +0 -0
- data/lib/ably_ui/core/images/highest-user-adoption-2023.svg +1 -0
- data/lib/ably_ui/core/images/users-love-us-2022.png +0 -0
- data/lib/ably_ui/core/loader/component.js +22 -1
- data/lib/ably_ui/core/logo/component.js +22 -1
- data/lib/ably_ui/core/meganav/component.css +3 -3
- data/lib/ably_ui/core/meganav/component.js +992 -1
- data/lib/ably_ui/core/meganav/component.json +2 -2
- data/lib/ably_ui/core/meganav/meganav.rb +6 -6
- data/lib/ably_ui/core/meganav_blog_posts_list/component.js +1159 -1
- data/lib/ably_ui/core/meganav_content_company/component.js +22 -1
- data/lib/ably_ui/core/meganav_content_company/meganav_content_company.html.erb +9 -0
- data/lib/ably_ui/core/meganav_content_developers/component.js +22 -1
- data/lib/ably_ui/core/meganav_content_developers/meganav_content_developers.html.erb +30 -14
- data/lib/ably_ui/core/meganav_content_products/component.js +22 -0
- data/lib/ably_ui/core/{meganav_content_platform/meganav_content_platform.html.erb → meganav_content_products/meganav_content_products.html.erb} +15 -33
- data/lib/ably_ui/core/{meganav_content_platform/meganav_content_platform.rb → meganav_content_products/meganav_content_products.rb} +1 -1
- data/lib/ably_ui/core/meganav_content_use_cases/component.js +22 -1
- data/lib/ably_ui/core/meganav_content_use_cases/meganav_content_use_cases.html.erb +42 -38
- data/lib/ably_ui/core/meganav_control/component.js +241 -1
- data/lib/ably_ui/core/meganav_control_mobile_dropdown/component.js +180 -1
- data/lib/ably_ui/core/meganav_control_mobile_panel_close/component.js +142 -1
- data/lib/ably_ui/core/meganav_control_mobile_panel_open/component.js +170 -1
- data/lib/ably_ui/core/meganav_items_desktop/component.js +22 -1
- data/lib/ably_ui/core/meganav_items_desktop/meganav_items_desktop.rb +1 -1
- data/lib/ably_ui/core/meganav_items_mobile/component.js +22 -1
- data/lib/ably_ui/core/meganav_items_signed_in/component.js +22 -1
- data/lib/ably_ui/core/meganav_search/component.js +22 -1
- data/lib/ably_ui/core/meganav_search_autocomplete/component.js +295 -1
- data/lib/ably_ui/core/meganav_search_panel/component.js +22 -1
- data/lib/ably_ui/core/meganav_search_suggestions/component.js +258 -1
- data/lib/ably_ui/core/notice/component.css +2 -0
- data/lib/ably_ui/core/notice/component.js +872 -1
- data/lib/ably_ui/core/scripts.js +1465 -1
- data/lib/ably_ui/core/showcase/component.css +2 -0
- data/lib/ably_ui/core/showcase/component.js +343 -1
- data/lib/ably_ui/core/sign_out_link/component.js +22 -1
- data/lib/ably_ui/core/slider/component.css +2 -0
- data/lib/ably_ui/core/slider/component.js +255 -1
- data/lib/ably_ui/core/sprites.svg +99 -0
- data/lib/ably_ui/core/styles.css +3 -7
- data/lib/ably_ui/core/uptime/component.css +2 -0
- data/lib/ably_ui/core/uptime/component.js +82 -1
- data/lib/ably_ui/reset/scripts.js +1 -1
- data/lib/ably_ui/reset/styles.css +1 -11
- data/lib/ably_ui/version.rb +1 -1
- metadata +12 -7
- data/lib/ably_ui/core/meganav_content_platform/component.js +0 -1
- data/lib/ably_ui/react/connect_state_wrapper/component.js +0 -1
- data/lib/ably_ui/react/scripts.js +0 -1
@@ -1 +1,872 @@
|
|
1
|
-
|
1
|
+
(function webpackUniversalModuleDefinition(root, factory) {
|
2
|
+
if(typeof exports === 'object' && typeof module === 'object')
|
3
|
+
module.exports = factory(require("dompurify"), require("js-cookie"), require("lodash.throttle"), require("prop-types"), require("react"), require("redux"));
|
4
|
+
else if(typeof define === 'function' && define.amd)
|
5
|
+
define([, , , , , ], factory);
|
6
|
+
else if(typeof exports === 'object')
|
7
|
+
exports["AblyUi"] = factory(require("dompurify"), require("js-cookie"), require("lodash.throttle"), require("prop-types"), require("react"), require("redux"));
|
8
|
+
else
|
9
|
+
root["AblyUi"] = root["AblyUi"] || {}, root["AblyUi"]["Core"] = root["AblyUi"]["Core"] || {}, root["AblyUi"]["Core"]["Notice"] = factory(root[undefined], root[undefined], root[undefined], root[undefined], root[undefined], root[undefined]);
|
10
|
+
})(this, (__WEBPACK_EXTERNAL_MODULE_dompurify__, __WEBPACK_EXTERNAL_MODULE_js_cookie__, __WEBPACK_EXTERNAL_MODULE_lodash_throttle__, __WEBPACK_EXTERNAL_MODULE_prop_types__, __WEBPACK_EXTERNAL_MODULE_react__, __WEBPACK_EXTERNAL_MODULE_redux__) => {
|
11
|
+
return /******/ (() => { // webpackBootstrap
|
12
|
+
/******/ "use strict";
|
13
|
+
/******/ var __webpack_modules__ = ({
|
14
|
+
|
15
|
+
/***/ "./src/core/ConnectStateWrapper/component.jsx":
|
16
|
+
/*!****************************************************!*\
|
17
|
+
!*** ./src/core/ConnectStateWrapper/component.jsx ***!
|
18
|
+
\****************************************************/
|
19
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
20
|
+
|
21
|
+
__webpack_require__.r(__webpack_exports__);
|
22
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
23
|
+
/* harmony export */ "ConnectStateWrapper": () => (/* binding */ ConnectStateWrapper),
|
24
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
25
|
+
/* harmony export */ });
|
26
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
27
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
28
|
+
/* harmony import */ var _remote_data_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../remote-data-store */ "./src/core/remote-data-store.js");
|
29
|
+
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); }
|
30
|
+
|
31
|
+
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; }
|
32
|
+
|
33
|
+
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; }
|
34
|
+
|
35
|
+
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; }
|
36
|
+
|
37
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
38
|
+
|
39
|
+
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."); }
|
40
|
+
|
41
|
+
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); }
|
42
|
+
|
43
|
+
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; }
|
44
|
+
|
45
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr && (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; }
|
46
|
+
|
47
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
/*
|
52
|
+
Connect a react component to a global store.
|
53
|
+
This is similar to what react-redux does but uses our global store so
|
54
|
+
can share state with other React mount points or anything that uses the
|
55
|
+
store.
|
56
|
+
- selectors is an object where keys are your prop names and values are your select
|
57
|
+
functions that work on the store to retrieve the state you are interested in
|
58
|
+
- initial state is set in useEffect so the wrapped component needs to handle it's props set to undefined initially
|
59
|
+
*/
|
60
|
+
|
61
|
+
var ConnectStateWrapper = function ConnectStateWrapper(Component, selectors) {
|
62
|
+
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}),
|
63
|
+
_useState2 = _slicedToArray(_useState, 2),
|
64
|
+
state = _useState2[0],
|
65
|
+
setState = _useState2[1];
|
66
|
+
|
67
|
+
var setStateForKey = function setStateForKey(key) {
|
68
|
+
return function (storeState) {
|
69
|
+
return setState(function () {
|
70
|
+
return _defineProperty({}, key, storeState);
|
71
|
+
});
|
72
|
+
};
|
73
|
+
};
|
74
|
+
|
75
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
|
76
|
+
var store = (0,_remote_data_store__WEBPACK_IMPORTED_MODULE_1__.getRemoteDataStore)();
|
77
|
+
var resolvedState = Object.keys(selectors).reduce(function (acc, key) {
|
78
|
+
return _objectSpread(_objectSpread({}, acc), {}, _defineProperty({}, key, selectors[key](store)));
|
79
|
+
}, {}); // Set initial state
|
80
|
+
|
81
|
+
setState(resolvedState); // Create a store subscription for each selector. Depending on your use case, this can be inefficient.
|
82
|
+
// When optimising for renders, look for wins with selectors better for your use and using connectState directly.
|
83
|
+
|
84
|
+
Object.keys(selectors).forEach(function (key) {
|
85
|
+
(0,_remote_data_store__WEBPACK_IMPORTED_MODULE_1__.connectState)(selectors[key], setStateForKey(key));
|
86
|
+
});
|
87
|
+
}, []);
|
88
|
+
|
89
|
+
var WrappedComponent = function WrappedComponent(props) {
|
90
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Component, _extends({}, props, state));
|
91
|
+
};
|
92
|
+
|
93
|
+
return WrappedComponent;
|
94
|
+
};
|
95
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ConnectStateWrapper);
|
96
|
+
|
97
|
+
/***/ }),
|
98
|
+
|
99
|
+
/***/ "./src/core/Flash/component.jsx":
|
100
|
+
/*!**************************************!*\
|
101
|
+
!*** ./src/core/Flash/component.jsx ***!
|
102
|
+
\**************************************/
|
103
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
104
|
+
|
105
|
+
__webpack_require__.r(__webpack_exports__);
|
106
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
107
|
+
/* harmony export */ "FLASH_DATA_ID": () => (/* binding */ FLASH_DATA_ID),
|
108
|
+
/* harmony export */ "Flashes": () => (/* binding */ Flashes),
|
109
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
110
|
+
/* harmony export */ "reducerFlashes": () => (/* binding */ reducerFlashes)
|
111
|
+
/* harmony export */ });
|
112
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
113
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
114
|
+
/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dompurify */ "dompurify");
|
115
|
+
/* harmony import */ var dompurify__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dompurify__WEBPACK_IMPORTED_MODULE_1__);
|
116
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! prop-types */ "prop-types");
|
117
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_2__);
|
118
|
+
/* harmony import */ var nanoid_non_secure__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! nanoid/non-secure */ "./node_modules/nanoid/non-secure/index.js");
|
119
|
+
/* harmony import */ var _remote_data_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../remote-data-store */ "./src/core/remote-data-store.js");
|
120
|
+
/* harmony import */ var _ConnectStateWrapper_component_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ConnectStateWrapper/component.jsx */ "./src/core/ConnectStateWrapper/component.jsx");
|
121
|
+
/* harmony import */ var _Icon_component_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../Icon/component.jsx */ "./src/core/Icon/component.jsx");
|
122
|
+
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); }
|
123
|
+
|
124
|
+
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; }
|
125
|
+
|
126
|
+
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; }
|
127
|
+
|
128
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
129
|
+
|
130
|
+
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."); }
|
131
|
+
|
132
|
+
function _iterableToArrayLimit(arr, i) { var _i = arr && (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; }
|
133
|
+
|
134
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
135
|
+
|
136
|
+
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; }
|
137
|
+
|
138
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
139
|
+
|
140
|
+
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."); }
|
141
|
+
|
142
|
+
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); }
|
143
|
+
|
144
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
145
|
+
|
146
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
147
|
+
|
148
|
+
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; }
|
149
|
+
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
var REDUCER_KEY = "flashes";
|
158
|
+
var FLASH_DATA_ID = "ui-flashes";
|
159
|
+
var initialState = {
|
160
|
+
items: []
|
161
|
+
};
|
162
|
+
|
163
|
+
var reducerFlashes = _defineProperty({}, REDUCER_KEY, function () {
|
164
|
+
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState;
|
165
|
+
var action = arguments.length > 1 ? arguments[1] : undefined;
|
166
|
+
|
167
|
+
switch (action.type) {
|
168
|
+
case "flash/push":
|
169
|
+
{
|
170
|
+
var flashes = Array.isArray(action.payload) ? action.payload : [action.payload];
|
171
|
+
return {
|
172
|
+
items: [].concat(_toConsumableArray(state.items), _toConsumableArray(flashes))
|
173
|
+
};
|
174
|
+
}
|
175
|
+
|
176
|
+
default:
|
177
|
+
return state;
|
178
|
+
}
|
179
|
+
});
|
180
|
+
|
181
|
+
var selectFlashes = function selectFlashes(store) {
|
182
|
+
return store.getState()[REDUCER_KEY];
|
183
|
+
};
|
184
|
+
|
185
|
+
var FlashT = {
|
186
|
+
type: prop_types__WEBPACK_IMPORTED_MODULE_2___default().oneOf(["error", "success", "notice", "info", "alert"]),
|
187
|
+
content: (prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)
|
188
|
+
};
|
189
|
+
var FLASH_BG_COLOR = {
|
190
|
+
error: "bg-gui-error",
|
191
|
+
success: "bg-zingy-green",
|
192
|
+
notice: "bg-electric-cyan",
|
193
|
+
info: "bg-electric-cyan",
|
194
|
+
alert: "bg-active-orange"
|
195
|
+
};
|
196
|
+
var FLASH_TEXT_COLOR = {
|
197
|
+
error: "text-white",
|
198
|
+
success: "text-cool-black",
|
199
|
+
notice: "text-cool-black",
|
200
|
+
info: "text-cool-black",
|
201
|
+
alert: "text-white"
|
202
|
+
};
|
203
|
+
var AUTO_HIDE = ["success", "info", "notice"];
|
204
|
+
var AUTO_HIDE_TIME = 8000;
|
205
|
+
|
206
|
+
var useAutoHide = function useAutoHide(type, closeFlash) {
|
207
|
+
var timeoutId = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
|
208
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
|
209
|
+
if (AUTO_HIDE.includes(type)) {
|
210
|
+
timeoutId.current = setTimeout(function () {
|
211
|
+
closeFlash();
|
212
|
+
}, AUTO_HIDE_TIME);
|
213
|
+
}
|
214
|
+
|
215
|
+
return function () {
|
216
|
+
if (timeoutId.current) {
|
217
|
+
clearTimeout(timeoutId.current);
|
218
|
+
}
|
219
|
+
};
|
220
|
+
}, []);
|
221
|
+
};
|
222
|
+
|
223
|
+
var Flash = function Flash(_ref) {
|
224
|
+
var id = _ref.id,
|
225
|
+
type = _ref.type,
|
226
|
+
content = _ref.content,
|
227
|
+
removeFlash = _ref.removeFlash;
|
228
|
+
var ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);
|
229
|
+
|
230
|
+
var _useState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),
|
231
|
+
_useState2 = _slicedToArray(_useState, 2),
|
232
|
+
closed = _useState2[0],
|
233
|
+
setClosed = _useState2[1];
|
234
|
+
|
235
|
+
var _useState3 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0),
|
236
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
237
|
+
flashHeight = _useState4[0],
|
238
|
+
setFlashHeight = _useState4[1];
|
239
|
+
|
240
|
+
var _useState5 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false),
|
241
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
242
|
+
triggerEntryAnimation = _useState6[0],
|
243
|
+
setTriggerEntryAnimation = _useState6[1];
|
244
|
+
|
245
|
+
var closeFlash = function closeFlash() {
|
246
|
+
if (ref.current) {
|
247
|
+
setFlashHeight(ref.current.getBoundingClientRect().height);
|
248
|
+
}
|
249
|
+
|
250
|
+
setClosed(true);
|
251
|
+
setTimeout(function () {
|
252
|
+
removeFlash(id);
|
253
|
+
}, 100);
|
254
|
+
};
|
255
|
+
|
256
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
|
257
|
+
return setTriggerEntryAnimation(true);
|
258
|
+
}, []);
|
259
|
+
useAutoHide(type, closeFlash);
|
260
|
+
var animateEntry = triggerEntryAnimation && !closed;
|
261
|
+
var style;
|
262
|
+
|
263
|
+
if (flashHeight && !closed) {
|
264
|
+
style = {
|
265
|
+
height: "".concat(flashHeight, "px")
|
266
|
+
};
|
267
|
+
} else if (closed) {
|
268
|
+
style = {
|
269
|
+
height: 0,
|
270
|
+
marginTop: 0,
|
271
|
+
zIndex: -1
|
272
|
+
};
|
273
|
+
} else {
|
274
|
+
style = {};
|
275
|
+
}
|
276
|
+
|
277
|
+
var safeContent = dompurify__WEBPACK_IMPORTED_MODULE_1___default().sanitize(content, {
|
278
|
+
ALLOWED_TAGS: ["a"],
|
279
|
+
ALLOWED_ATTR: ["href", "data-method", "rel"]
|
280
|
+
});
|
281
|
+
var withIcons = {
|
282
|
+
notice: "icon-gui-ably-badge",
|
283
|
+
success: "icon-gui-tick",
|
284
|
+
error: "icon-gui-warning",
|
285
|
+
alert: "icon-gui-warning"
|
286
|
+
};
|
287
|
+
var iconColor = {
|
288
|
+
notice: "text-cool-black",
|
289
|
+
success: "text-cool-black",
|
290
|
+
error: "text-white",
|
291
|
+
alert: "text-white"
|
292
|
+
};
|
293
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
294
|
+
className: "ui-flash-message ui-grid-px ".concat(animateEntry ? "ui-flash-message-enter" : ""),
|
295
|
+
style: style,
|
296
|
+
ref: ref,
|
297
|
+
"data-id": "ui-flash"
|
298
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
299
|
+
className: "".concat(FLASH_BG_COLOR[type], " p-32 flex align-center rounded shadow-container-subtle")
|
300
|
+
}, withIcons[type] && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Icon_component_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
301
|
+
name: withIcons[type],
|
302
|
+
color: iconColor[type],
|
303
|
+
size: "1.5rem",
|
304
|
+
additionalCSS: "mr-16 self-baseline"
|
305
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("p", {
|
306
|
+
className: "ui-flash-text ".concat(FLASH_TEXT_COLOR[type]),
|
307
|
+
dangerouslySetInnerHTML: {
|
308
|
+
__html: safeContent
|
309
|
+
}
|
310
|
+
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", {
|
311
|
+
type: "button",
|
312
|
+
className: "p-0 ml-auto self-start focus:outline-none",
|
313
|
+
onClick: closeFlash
|
314
|
+
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_Icon_component_jsx__WEBPACK_IMPORTED_MODULE_5__["default"], {
|
315
|
+
name: "icon-gui-close",
|
316
|
+
color: iconColor[type],
|
317
|
+
size: "1.5rem",
|
318
|
+
additionalCSS: "transition-colors"
|
319
|
+
}))));
|
320
|
+
};
|
321
|
+
|
322
|
+
Flash.propTypes = _objectSpread({}, FlashT);
|
323
|
+
|
324
|
+
var Flashes = function Flashes(_ref2) {
|
325
|
+
var flashes = _ref2.flashes;
|
326
|
+
|
327
|
+
var _useState7 = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]),
|
328
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
329
|
+
flashesWithIds = _useState8[0],
|
330
|
+
setFlashesWithIds = _useState8[1];
|
331
|
+
|
332
|
+
var removeFlash = function removeFlash(flashId) {
|
333
|
+
return setFlashesWithIds(function (items) {
|
334
|
+
return items.filter(function (item) {
|
335
|
+
return item.id !== flashId;
|
336
|
+
});
|
337
|
+
});
|
338
|
+
};
|
339
|
+
|
340
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
|
341
|
+
setFlashesWithIds(function (state) {
|
342
|
+
return [].concat(_toConsumableArray(state), _toConsumableArray(((flashes === null || flashes === void 0 ? void 0 : flashes.items) || []).map(function (flash) {
|
343
|
+
return _objectSpread(_objectSpread({}, flash), {}, {
|
344
|
+
id: (0,nanoid_non_secure__WEBPACK_IMPORTED_MODULE_6__.nanoid)(),
|
345
|
+
removed: false
|
346
|
+
});
|
347
|
+
})));
|
348
|
+
});
|
349
|
+
}, [flashes]);
|
350
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
|
351
|
+
className: "ui-flash",
|
352
|
+
"data-id": FLASH_DATA_ID
|
353
|
+
}, flashesWithIds.filter(function (item) {
|
354
|
+
return !item.removed;
|
355
|
+
}).map(function (flash) {
|
356
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(Flash, _extends({
|
357
|
+
removeFlash: removeFlash,
|
358
|
+
key: flash.id
|
359
|
+
}, flash));
|
360
|
+
}));
|
361
|
+
};
|
362
|
+
|
363
|
+
Flashes.propTypes = {
|
364
|
+
flashes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape({
|
365
|
+
items: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default().shape(FlashT))
|
366
|
+
})
|
367
|
+
};
|
368
|
+
|
369
|
+
var BackendFlashes = function BackendFlashes(_ref3) {
|
370
|
+
var flashes = _ref3.flashes;
|
371
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(function () {
|
372
|
+
var transformedFlashes = flashes.map(function (flash) {
|
373
|
+
var _flash = _slicedToArray(flash, 2),
|
374
|
+
type = _flash[0],
|
375
|
+
content = _flash[1];
|
376
|
+
|
377
|
+
return {
|
378
|
+
type: type,
|
379
|
+
content: content
|
380
|
+
};
|
381
|
+
}) || [];
|
382
|
+
|
383
|
+
if (transformedFlashes.length > 0) {
|
384
|
+
var store = (0,_remote_data_store__WEBPACK_IMPORTED_MODULE_3__.getRemoteDataStore)();
|
385
|
+
store.dispatch({
|
386
|
+
type: "flash/push",
|
387
|
+
payload: transformedFlashes
|
388
|
+
});
|
389
|
+
}
|
390
|
+
}, []);
|
391
|
+
var WrappedFlashes = (0,_ConnectStateWrapper_component_jsx__WEBPACK_IMPORTED_MODULE_4__["default"])(Flashes, {
|
392
|
+
flashes: selectFlashes
|
393
|
+
});
|
394
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(WrappedFlashes, null);
|
395
|
+
};
|
396
|
+
|
397
|
+
BackendFlashes.propTypes = {
|
398
|
+
flashes: prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_2___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_2___default().string)))
|
399
|
+
};
|
400
|
+
|
401
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BackendFlashes);
|
402
|
+
|
403
|
+
/***/ }),
|
404
|
+
|
405
|
+
/***/ "./src/core/Icon/component.jsx":
|
406
|
+
/*!*************************************!*\
|
407
|
+
!*** ./src/core/Icon/component.jsx ***!
|
408
|
+
\*************************************/
|
409
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
410
|
+
|
411
|
+
__webpack_require__.r(__webpack_exports__);
|
412
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
413
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
414
|
+
/* harmony export */ });
|
415
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
416
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
417
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ "prop-types");
|
418
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
|
419
|
+
var _excluded = ["name", "size", "color", "additionalCSS"];
|
420
|
+
|
421
|
+
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); }
|
422
|
+
|
423
|
+
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; }
|
424
|
+
|
425
|
+
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; }
|
426
|
+
|
427
|
+
|
428
|
+
|
429
|
+
|
430
|
+
var Icon = function Icon(_ref) {
|
431
|
+
var name = _ref.name,
|
432
|
+
_ref$size = _ref.size,
|
433
|
+
size = _ref$size === void 0 ? "0.75rem" : _ref$size,
|
434
|
+
_ref$color = _ref.color,
|
435
|
+
color = _ref$color === void 0 ? "" : _ref$color,
|
436
|
+
_ref$additionalCSS = _ref.additionalCSS,
|
437
|
+
additionalCSS = _ref$additionalCSS === void 0 ? "" : _ref$additionalCSS,
|
438
|
+
additionalAttributes = _objectWithoutProperties(_ref, _excluded);
|
439
|
+
|
440
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("svg", _extends({
|
441
|
+
className: "".concat(color, " ").concat(additionalCSS),
|
442
|
+
style: {
|
443
|
+
width: size,
|
444
|
+
height: size
|
445
|
+
}
|
446
|
+
}, additionalAttributes), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("use", {
|
447
|
+
xlinkHref: "#sprite-".concat(name)
|
448
|
+
}));
|
449
|
+
};
|
450
|
+
|
451
|
+
Icon.propTypes = {
|
452
|
+
name: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string.isRequired),
|
453
|
+
size: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
|
454
|
+
color: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string),
|
455
|
+
additionalCSS: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string)
|
456
|
+
};
|
457
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Icon);
|
458
|
+
|
459
|
+
/***/ }),
|
460
|
+
|
461
|
+
/***/ "./src/core/dom-query.js":
|
462
|
+
/*!*******************************!*\
|
463
|
+
!*** ./src/core/dom-query.js ***!
|
464
|
+
\*******************************/
|
465
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
466
|
+
|
467
|
+
__webpack_require__.r(__webpack_exports__);
|
468
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
469
|
+
/* harmony export */ "queryId": () => (/* binding */ queryId),
|
470
|
+
/* harmony export */ "queryIdAll": () => (/* binding */ queryIdAll)
|
471
|
+
/* harmony export */ });
|
472
|
+
var queryId = function queryId(val) {
|
473
|
+
var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
|
474
|
+
return root.querySelector("[data-id=".concat(val, "]"));
|
475
|
+
};
|
476
|
+
var queryIdAll = function queryIdAll(val) {
|
477
|
+
var root = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
|
478
|
+
return root.querySelectorAll("[data-id=".concat(val, "]"));
|
479
|
+
};
|
480
|
+
|
481
|
+
/***/ }),
|
482
|
+
|
483
|
+
/***/ "./src/core/remote-data-store.js":
|
484
|
+
/*!***************************************!*\
|
485
|
+
!*** ./src/core/remote-data-store.js ***!
|
486
|
+
\***************************************/
|
487
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
488
|
+
|
489
|
+
__webpack_require__.r(__webpack_exports__);
|
490
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
491
|
+
/* harmony export */ "attachStoreToWindow": () => (/* binding */ attachStoreToWindow),
|
492
|
+
/* harmony export */ "connectState": () => (/* binding */ connectState),
|
493
|
+
/* harmony export */ "createRemoteDataStore": () => (/* binding */ createRemoteDataStore),
|
494
|
+
/* harmony export */ "getRemoteDataStore": () => (/* binding */ getRemoteDataStore)
|
495
|
+
/* harmony export */ });
|
496
|
+
/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! redux */ "redux");
|
497
|
+
/* harmony import */ var redux__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(redux__WEBPACK_IMPORTED_MODULE_0__);
|
498
|
+
|
499
|
+
var attachStoreToWindow = function attachStoreToWindow(store) {
|
500
|
+
window.AblyUi = window.AblyUi || {};
|
501
|
+
window.AblyUi.RemoteDataStore = store;
|
502
|
+
};
|
503
|
+
var getRemoteDataStore = function getRemoteDataStore() {
|
504
|
+
if (!window.AblyUi.RemoteDataStore) {
|
505
|
+
throw new Error("Remote store was called before one was created");
|
506
|
+
}
|
507
|
+
|
508
|
+
return window.AblyUi.RemoteDataStore;
|
509
|
+
};
|
510
|
+
var connectState = function connectState(selector, setState) {
|
511
|
+
var store = getRemoteDataStore();
|
512
|
+
var cachedOldState = selector(store);
|
513
|
+
store.subscribe(function () {
|
514
|
+
var newState = selector(store); // Do nothing, state is the same
|
515
|
+
|
516
|
+
if (newState === cachedOldState) {
|
517
|
+
return;
|
518
|
+
}
|
519
|
+
|
520
|
+
cachedOldState = newState;
|
521
|
+
setState(newState);
|
522
|
+
});
|
523
|
+
};
|
524
|
+
var createRemoteDataStore = function createRemoteDataStore(reducers) {
|
525
|
+
return (0,redux__WEBPACK_IMPORTED_MODULE_0__.createStore)((0,redux__WEBPACK_IMPORTED_MODULE_0__.combineReducers)(reducers));
|
526
|
+
};
|
527
|
+
|
528
|
+
/***/ }),
|
529
|
+
|
530
|
+
/***/ "./src/core/Notice/component.css":
|
531
|
+
/*!***************************************!*\
|
532
|
+
!*** ./src/core/Notice/component.css ***!
|
533
|
+
\***************************************/
|
534
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
535
|
+
|
536
|
+
__webpack_require__.r(__webpack_exports__);
|
537
|
+
// extracted by mini-css-extract-plugin
|
538
|
+
|
539
|
+
|
540
|
+
/***/ }),
|
541
|
+
|
542
|
+
/***/ "dompurify":
|
543
|
+
/*!*****************************************************************!*\
|
544
|
+
!*** external {"commonjs":"dompurify","commonjs2":"dompurify"} ***!
|
545
|
+
\*****************************************************************/
|
546
|
+
/***/ ((module) => {
|
547
|
+
|
548
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_dompurify__;
|
549
|
+
|
550
|
+
/***/ }),
|
551
|
+
|
552
|
+
/***/ "js-cookie":
|
553
|
+
/*!*****************************************************************!*\
|
554
|
+
!*** external {"commonjs":"js-cookie","commonjs2":"js-cookie"} ***!
|
555
|
+
\*****************************************************************/
|
556
|
+
/***/ ((module) => {
|
557
|
+
|
558
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_js_cookie__;
|
559
|
+
|
560
|
+
/***/ }),
|
561
|
+
|
562
|
+
/***/ "lodash.throttle":
|
563
|
+
/*!*****************************************************************************!*\
|
564
|
+
!*** external {"commonjs":"lodash.throttle","commonjs2":"lodash.throttle"} ***!
|
565
|
+
\*****************************************************************************/
|
566
|
+
/***/ ((module) => {
|
567
|
+
|
568
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_lodash_throttle__;
|
569
|
+
|
570
|
+
/***/ }),
|
571
|
+
|
572
|
+
/***/ "prop-types":
|
573
|
+
/*!*******************************************************************!*\
|
574
|
+
!*** external {"commonjs":"prop-types","commonjs2":"prop-types"} ***!
|
575
|
+
\*******************************************************************/
|
576
|
+
/***/ ((module) => {
|
577
|
+
|
578
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_prop_types__;
|
579
|
+
|
580
|
+
/***/ }),
|
581
|
+
|
582
|
+
/***/ "react":
|
583
|
+
/*!*********************************************************!*\
|
584
|
+
!*** external {"commonjs":"react","commonjs2":"react"} ***!
|
585
|
+
\*********************************************************/
|
586
|
+
/***/ ((module) => {
|
587
|
+
|
588
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_react__;
|
589
|
+
|
590
|
+
/***/ }),
|
591
|
+
|
592
|
+
/***/ "redux":
|
593
|
+
/*!*********************************************************!*\
|
594
|
+
!*** external {"commonjs":"redux","commonjs2":"redux"} ***!
|
595
|
+
\*********************************************************/
|
596
|
+
/***/ ((module) => {
|
597
|
+
|
598
|
+
module.exports = __WEBPACK_EXTERNAL_MODULE_redux__;
|
599
|
+
|
600
|
+
/***/ }),
|
601
|
+
|
602
|
+
/***/ "./node_modules/nanoid/non-secure/index.js":
|
603
|
+
/*!*************************************************!*\
|
604
|
+
!*** ./node_modules/nanoid/non-secure/index.js ***!
|
605
|
+
\*************************************************/
|
606
|
+
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
607
|
+
|
608
|
+
__webpack_require__.r(__webpack_exports__);
|
609
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
610
|
+
/* harmony export */ "customAlphabet": () => (/* binding */ customAlphabet),
|
611
|
+
/* harmony export */ "nanoid": () => (/* binding */ nanoid)
|
612
|
+
/* harmony export */ });
|
613
|
+
let urlAlphabet =
|
614
|
+
'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'
|
615
|
+
let customAlphabet = (alphabet, defaultSize = 21) => {
|
616
|
+
return (size = defaultSize) => {
|
617
|
+
let id = ''
|
618
|
+
let i = size
|
619
|
+
while (i--) {
|
620
|
+
id += alphabet[(Math.random() * alphabet.length) | 0]
|
621
|
+
}
|
622
|
+
return id
|
623
|
+
}
|
624
|
+
}
|
625
|
+
let nanoid = (size = 21) => {
|
626
|
+
let id = ''
|
627
|
+
let i = size
|
628
|
+
while (i--) {
|
629
|
+
id += urlAlphabet[(Math.random() * 64) | 0]
|
630
|
+
}
|
631
|
+
return id
|
632
|
+
}
|
633
|
+
|
634
|
+
|
635
|
+
/***/ })
|
636
|
+
|
637
|
+
/******/ });
|
638
|
+
/************************************************************************/
|
639
|
+
/******/ // The module cache
|
640
|
+
/******/ var __webpack_module_cache__ = {};
|
641
|
+
/******/
|
642
|
+
/******/ // The require function
|
643
|
+
/******/ function __webpack_require__(moduleId) {
|
644
|
+
/******/ // Check if module is in cache
|
645
|
+
/******/ var cachedModule = __webpack_module_cache__[moduleId];
|
646
|
+
/******/ if (cachedModule !== undefined) {
|
647
|
+
/******/ return cachedModule.exports;
|
648
|
+
/******/ }
|
649
|
+
/******/ // Create a new module (and put it into the cache)
|
650
|
+
/******/ var module = __webpack_module_cache__[moduleId] = {
|
651
|
+
/******/ // no module.id needed
|
652
|
+
/******/ // no module.loaded needed
|
653
|
+
/******/ exports: {}
|
654
|
+
/******/ };
|
655
|
+
/******/
|
656
|
+
/******/ // Execute the module function
|
657
|
+
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
658
|
+
/******/
|
659
|
+
/******/ // Return the exports of the module
|
660
|
+
/******/ return module.exports;
|
661
|
+
/******/ }
|
662
|
+
/******/
|
663
|
+
/************************************************************************/
|
664
|
+
/******/ /* webpack/runtime/compat get default export */
|
665
|
+
/******/ (() => {
|
666
|
+
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
667
|
+
/******/ __webpack_require__.n = (module) => {
|
668
|
+
/******/ var getter = module && module.__esModule ?
|
669
|
+
/******/ () => (module['default']) :
|
670
|
+
/******/ () => (module);
|
671
|
+
/******/ __webpack_require__.d(getter, { a: getter });
|
672
|
+
/******/ return getter;
|
673
|
+
/******/ };
|
674
|
+
/******/ })();
|
675
|
+
/******/
|
676
|
+
/******/ /* webpack/runtime/define property getters */
|
677
|
+
/******/ (() => {
|
678
|
+
/******/ // define getter functions for harmony exports
|
679
|
+
/******/ __webpack_require__.d = (exports, definition) => {
|
680
|
+
/******/ for(var key in definition) {
|
681
|
+
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
682
|
+
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
683
|
+
/******/ }
|
684
|
+
/******/ }
|
685
|
+
/******/ };
|
686
|
+
/******/ })();
|
687
|
+
/******/
|
688
|
+
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
689
|
+
/******/ (() => {
|
690
|
+
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
691
|
+
/******/ })();
|
692
|
+
/******/
|
693
|
+
/******/ /* webpack/runtime/make namespace object */
|
694
|
+
/******/ (() => {
|
695
|
+
/******/ // define __esModule on exports
|
696
|
+
/******/ __webpack_require__.r = (exports) => {
|
697
|
+
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
698
|
+
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
699
|
+
/******/ }
|
700
|
+
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
701
|
+
/******/ };
|
702
|
+
/******/ })();
|
703
|
+
/******/
|
704
|
+
/************************************************************************/
|
705
|
+
var __webpack_exports__ = {};
|
706
|
+
// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
707
|
+
(() => {
|
708
|
+
/*!**************************************!*\
|
709
|
+
!*** ./src/core/Notice/component.js ***!
|
710
|
+
\**************************************/
|
711
|
+
__webpack_require__.r(__webpack_exports__);
|
712
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
713
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
714
|
+
/* harmony export */ });
|
715
|
+
/* harmony import */ var _component_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./component.css */ "./src/core/Notice/component.css");
|
716
|
+
/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! js-cookie */ "js-cookie");
|
717
|
+
/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(js_cookie__WEBPACK_IMPORTED_MODULE_1__);
|
718
|
+
/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash.throttle */ "lodash.throttle");
|
719
|
+
/* harmony import */ var lodash_throttle__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_throttle__WEBPACK_IMPORTED_MODULE_2__);
|
720
|
+
/* harmony import */ var _dom_query__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-query */ "./src/core/dom-query.js");
|
721
|
+
/* harmony import */ var _Flash_component_jsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../Flash/component.jsx */ "./src/core/Flash/component.jsx");
|
722
|
+
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; }
|
723
|
+
|
724
|
+
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; }
|
725
|
+
|
726
|
+
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; }
|
727
|
+
|
728
|
+
|
729
|
+
|
730
|
+
|
731
|
+
|
732
|
+
|
733
|
+
var COOKIE_EXPIRY = 90;
|
734
|
+
var COLLAPSE_TRIGGER_DISTANCE = 5;
|
735
|
+
var SCROLL_LISTENER_THROTTLE = 100;
|
736
|
+
var RESIZE_LISTENER_THROTTLE = 100;
|
737
|
+
|
738
|
+
var isMdViewport = function isMdViewport() {
|
739
|
+
return !window.matchMedia("(min-width: 65rem)").matches;
|
740
|
+
};
|
741
|
+
|
742
|
+
var adjustFlashMargin = function adjustFlashMargin(open) {
|
743
|
+
// HACK ALERT
|
744
|
+
// Add margin to flashes when opening the notice.
|
745
|
+
// Flashes are react components and this notice needs to work as a view-component and react component.
|
746
|
+
// We could do this with redux but then we potentially update state on every scroll event, which
|
747
|
+
// even with debounce will deplate our frame budget.
|
748
|
+
var flash = (0,_dom_query__WEBPACK_IMPORTED_MODULE_3__.queryId)(_Flash_component_jsx__WEBPACK_IMPORTED_MODULE_4__.FLASH_DATA_ID);
|
749
|
+
|
750
|
+
if (flash) {
|
751
|
+
flash.style.marginTop = open ? "4rem" : null;
|
752
|
+
}
|
753
|
+
};
|
754
|
+
|
755
|
+
var hideOnMobile = function hideOnMobile(bannerContainer) {
|
756
|
+
if (isMdViewport()) {
|
757
|
+
bannerContainer.style.display = "none";
|
758
|
+
} else {
|
759
|
+
bannerContainer.style.display = null;
|
760
|
+
}
|
761
|
+
};
|
762
|
+
|
763
|
+
var hideNotice = function hideNotice(bannerContainer) {
|
764
|
+
bannerContainer.style.maxHeight = 0;
|
765
|
+
bannerContainer.style.overflow = "hidden";
|
766
|
+
adjustFlashMargin(false);
|
767
|
+
};
|
768
|
+
|
769
|
+
var showNotice = function showNotice(bannerContainer) {
|
770
|
+
bannerContainer.style.maxHeight = null;
|
771
|
+
bannerContainer.style.overflow = null;
|
772
|
+
adjustFlashMargin(true);
|
773
|
+
};
|
774
|
+
|
775
|
+
var setupRememberClosed = function setupRememberClosed(cookieId, noticeId) {
|
776
|
+
var cookie = js_cookie__WEBPACK_IMPORTED_MODULE_1___default().get(cookieId) || "";
|
777
|
+
js_cookie__WEBPACK_IMPORTED_MODULE_1___default().set(cookieId, "".concat(cookie.replace("".concat(noticeId, ","), "") + noticeId, ","), {
|
778
|
+
expires: COOKIE_EXPIRY
|
779
|
+
});
|
780
|
+
};
|
781
|
+
|
782
|
+
var hasBeenClosedBefore = function hasBeenClosedBefore(cookieId, noticeId) {
|
783
|
+
return (js_cookie__WEBPACK_IMPORTED_MODULE_1___default().get(cookieId) || "").includes(noticeId);
|
784
|
+
};
|
785
|
+
|
786
|
+
var setupNoticeCollapse = function setupNoticeCollapse(bannerContainer) {
|
787
|
+
var scrollTop = window.scrollY;
|
788
|
+
|
789
|
+
if (scrollTop > COLLAPSE_TRIGGER_DISTANCE) {
|
790
|
+
hideNotice(bannerContainer);
|
791
|
+
}
|
792
|
+
|
793
|
+
var listener = lodash_throttle__WEBPACK_IMPORTED_MODULE_2___default()(function () {
|
794
|
+
var scrollTop = window.scrollY;
|
795
|
+
|
796
|
+
if (scrollTop > COLLAPSE_TRIGGER_DISTANCE) {
|
797
|
+
hideNotice(bannerContainer);
|
798
|
+
} else if (bannerContainer.style.overflow) {
|
799
|
+
showNotice(bannerContainer);
|
800
|
+
}
|
801
|
+
}, SCROLL_LISTENER_THROTTLE);
|
802
|
+
document.addEventListener("scroll", listener);
|
803
|
+
return function () {
|
804
|
+
return document.removeEventListener("scroll", listener);
|
805
|
+
};
|
806
|
+
};
|
807
|
+
|
808
|
+
var setupCloseBtn = function setupCloseBtn(bannerContainer, cookieId, noticeId, collapseUnmountListeners) {
|
809
|
+
var closeBtn = bannerContainer.querySelector("button");
|
810
|
+
if (!closeBtn) return function () {};
|
811
|
+
|
812
|
+
var listener = function listener() {
|
813
|
+
if (cookieId && noticeId) setupRememberClosed(cookieId, noticeId);
|
814
|
+
hideNotice(bannerContainer);
|
815
|
+
collapseUnmountListeners();
|
816
|
+
};
|
817
|
+
|
818
|
+
closeBtn.addEventListener("click", listener);
|
819
|
+
return function () {
|
820
|
+
return document.removeEventListener("click", listener);
|
821
|
+
};
|
822
|
+
};
|
823
|
+
|
824
|
+
var resizeHandler = function resizeHandler(bannerContainer) {
|
825
|
+
var handler = lodash_throttle__WEBPACK_IMPORTED_MODULE_2___default()(function () {
|
826
|
+
hideOnMobile(bannerContainer);
|
827
|
+
}, RESIZE_LISTENER_THROTTLE);
|
828
|
+
window.addEventListener("resize", handler);
|
829
|
+
return function () {
|
830
|
+
return window.removeEventListener("resize", handler);
|
831
|
+
};
|
832
|
+
};
|
833
|
+
|
834
|
+
var Notice = function Notice(_ref) {
|
835
|
+
var bannerContainer = _ref.bannerContainer,
|
836
|
+
cookieId = _ref.cookieId,
|
837
|
+
noticeId = _ref.noticeId,
|
838
|
+
options = _ref.options;
|
839
|
+
if (typeof window === "undefined") return function () {};
|
840
|
+
|
841
|
+
if (!bannerContainer) {
|
842
|
+
console.warn("A Notice component was initited but no notice container was found.");
|
843
|
+
return function () {};
|
844
|
+
}
|
845
|
+
|
846
|
+
if (hasBeenClosedBefore(cookieId, noticeId)) return function () {};
|
847
|
+
hideOnMobile(bannerContainer);
|
848
|
+
showNotice(bannerContainer);
|
849
|
+
|
850
|
+
var opts = _objectSpread({
|
851
|
+
collapse: true
|
852
|
+
}, options);
|
853
|
+
|
854
|
+
var collapseUnmountListeners = opts.collapse ? setupNoticeCollapse(bannerContainer) : function () {};
|
855
|
+
var closeBtnUnmountListeners = setupCloseBtn(bannerContainer, cookieId, noticeId, collapseUnmountListeners);
|
856
|
+
var resizeUnmountListener = resizeHandler(bannerContainer);
|
857
|
+
return function () {
|
858
|
+
[closeBtnUnmountListeners, collapseUnmountListeners, resizeUnmountListener].forEach(function (unmount) {
|
859
|
+
return unmount();
|
860
|
+
});
|
861
|
+
};
|
862
|
+
};
|
863
|
+
|
864
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Notice);
|
865
|
+
})();
|
866
|
+
|
867
|
+
__webpack_exports__ = __webpack_exports__["default"];
|
868
|
+
/******/ return __webpack_exports__;
|
869
|
+
/******/ })()
|
870
|
+
;
|
871
|
+
});
|
872
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL0Nvbm5lY3RTdGF0ZVdyYXBwZXIvY29tcG9uZW50LmpzeCIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL0ZsYXNoL2NvbXBvbmVudC5qc3giLCJ3ZWJwYWNrOi8vQWJseVVpLkNvcmUvLi9zcmMvY29yZS9JY29uL2NvbXBvbmVudC5qc3giLCJ3ZWJwYWNrOi8vQWJseVVpLkNvcmUvLi9zcmMvY29yZS9kb20tcXVlcnkuanMiLCJ3ZWJwYWNrOi8vQWJseVVpLkNvcmUvLi9zcmMvY29yZS9yZW1vdGUtZGF0YS1zdG9yZS5qcyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS8uL3NyYy9jb3JlL05vdGljZS9jb21wb25lbnQuY3NzP2IxZDgiLCJ3ZWJwYWNrOi8vQWJseVVpLkNvcmUvZXh0ZXJuYWwgdW1kIHtcImNvbW1vbmpzXCI6XCJkb21wdXJpZnlcIixcImNvbW1vbmpzMlwiOlwiZG9tcHVyaWZ5XCJ9Iiwid2VicGFjazovL0FibHlVaS5Db3JlL2V4dGVybmFsIHVtZCB7XCJjb21tb25qc1wiOlwianMtY29va2llXCIsXCJjb21tb25qczJcIjpcImpzLWNvb2tpZVwifSIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS9leHRlcm5hbCB1bWQge1wiY29tbW9uanNcIjpcImxvZGFzaC50aHJvdHRsZVwiLFwiY29tbW9uanMyXCI6XCJsb2Rhc2gudGhyb3R0bGVcIn0iLCJ3ZWJwYWNrOi8vQWJseVVpLkNvcmUvZXh0ZXJuYWwgdW1kIHtcImNvbW1vbmpzXCI6XCJwcm9wLXR5cGVzXCIsXCJjb21tb25qczJcIjpcInByb3AtdHlwZXNcIn0iLCJ3ZWJwYWNrOi8vQWJseVVpLkNvcmUvZXh0ZXJuYWwgdW1kIHtcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS9leHRlcm5hbCB1bWQge1wiY29tbW9uanNcIjpcInJlZHV4XCIsXCJjb21tb25qczJcIjpcInJlZHV4XCJ9Iiwid2VicGFjazovL0FibHlVaS5Db3JlLy4vbm9kZV9tb2R1bGVzL25hbm9pZC9ub24tc2VjdXJlL2luZGV4LmpzIiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9BYmx5VWkuQ29yZS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0FibHlVaS5Db3JlL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQWJseVVpLkNvcmUvLi9zcmMvY29yZS9Ob3RpY2UvY29tcG9uZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImRvbXB1cmlmeVwiKSwgcmVxdWlyZShcImpzLWNvb2tpZVwiKSwgcmVxdWlyZShcImxvZGFzaC50aHJvdHRsZVwiKSwgcmVxdWlyZShcInByb3AtdHlwZXNcIiksIHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlZHV4XCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFssICwgLCAsICwgXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJBYmx5VWlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJkb21wdXJpZnlcIiksIHJlcXVpcmUoXCJqcy1jb29raWVcIiksIHJlcXVpcmUoXCJsb2Rhc2gudGhyb3R0bGVcIiksIHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpLCByZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWR1eFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiQWJseVVpXCJdID0gcm9vdFtcIkFibHlVaVwiXSB8fCB7fSwgcm9vdFtcIkFibHlVaVwiXVtcIkNvcmVcIl0gPSByb290W1wiQWJseVVpXCJdW1wiQ29yZVwiXSB8fCB7fSwgcm9vdFtcIkFibHlVaVwiXVtcIkNvcmVcIl1bXCJOb3RpY2VcIl0gPSBmYWN0b3J5KHJvb3RbdW5kZWZpbmVkXSwgcm9vdFt1bmRlZmluZWRdLCByb290W3VuZGVmaW5lZF0sIHJvb3RbdW5kZWZpbmVkXSwgcm9vdFt1bmRlZmluZWRdLCByb290W3VuZGVmaW5lZF0pO1xufSkodGhpcywgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZG9tcHVyaWZ5X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfanNfY29va2llX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfbG9kYXNoX3Rocm90dGxlX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcHJvcF90eXBlc19fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX3JlYWN0X18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcmVkdXhfXykgPT4ge1xucmV0dXJuICIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IGNvbm5lY3RTdGF0ZSwgZ2V0UmVtb3RlRGF0YVN0b3JlIH0gZnJvbSBcIi4uL3JlbW90ZS1kYXRhLXN0b3JlXCI7XG5cbi8qXG4gIENvbm5lY3QgYSByZWFjdCBjb21wb25lbnQgdG8gYSBnbG9iYWwgc3RvcmUuXG4gIFRoaXMgaXMgc2ltaWxhciB0byB3aGF0IHJlYWN0LXJlZHV4IGRvZXMgYnV0IHVzZXMgb3VyIGdsb2JhbCBzdG9yZSBzb1xuICBjYW4gc2hhcmUgc3RhdGUgd2l0aCBvdGhlciBSZWFjdCBtb3VudCBwb2ludHMgb3IgYW55dGhpbmcgdGhhdCB1c2VzIHRoZVxuICBzdG9yZS5cbiAgLSBzZWxlY3RvcnMgaXMgYW4gb2JqZWN0IHdoZXJlIGtleXMgYXJlIHlvdXIgcHJvcCBuYW1lcyBhbmQgdmFsdWVzIGFyZSB5b3VyIHNlbGVjdFxuICBmdW5jdGlvbnMgdGhhdCB3b3JrIG9uIHRoZSBzdG9yZSB0byByZXRyaWV2ZSB0aGUgc3RhdGUgeW91IGFyZSBpbnRlcmVzdGVkIGluXG4gIC0gaW5pdGlhbCBzdGF0ZSBpcyBzZXQgaW4gdXNlRWZmZWN0IHNvIHRoZSB3cmFwcGVkIGNvbXBvbmVudCBuZWVkcyB0byBoYW5kbGUgaXQncyBwcm9wcyBzZXQgdG8gdW5kZWZpbmVkIGluaXRpYWxseVxuKi9cblxuZXhwb3J0IGNvbnN0IENvbm5lY3RTdGF0ZVdyYXBwZXIgPSAoQ29tcG9uZW50LCBzZWxlY3RvcnMpID0+IHtcbiAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZSh7fSk7XG5cbiAgY29uc3Qgc2V0U3RhdGVGb3JLZXkgPSAoa2V5KSA9PiAoc3RvcmVTdGF0ZSkgPT4gc2V0U3RhdGUoKCkgPT4gKHsgW2tleV06IHN0b3JlU3RhdGUgfSkpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3RvcmUgPSBnZXRSZW1vdGVEYXRhU3RvcmUoKTtcbiAgICBjb25zdCByZXNvbHZlZFN0YXRlID0gT2JqZWN0LmtleXMoc2VsZWN0b3JzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiAoeyAuLi5hY2MsIFtrZXldOiBzZWxlY3RvcnNba2V5XShzdG9yZSkgfSksIHt9KTtcblxuICAgIC8vIFNldCBpbml0aWFsIHN0YXRlXG4gICAgc2V0U3RhdGUocmVzb2x2ZWRTdGF0ZSk7XG5cbiAgICAvLyBDcmVhdGUgYSBzdG9yZSBzdWJzY3JpcHRpb24gZm9yIGVhY2ggc2VsZWN0b3IuIERlcGVuZGluZyBvbiB5b3VyIHVzZSBjYXNlLCB0aGlzIGNhbiBiZSBpbmVmZmljaWVudC5cbiAgICAvLyBXaGVuIG9wdGltaXNpbmcgZm9yIHJlbmRlcnMsIGxvb2sgZm9yIHdpbnMgd2l0aCBzZWxlY3RvcnMgYmV0dGVyIGZvciB5b3VyIHVzZSBhbmQgdXNpbmcgY29ubmVjdFN0YXRlIGRpcmVjdGx5LlxuICAgIE9iamVjdC5rZXlzKHNlbGVjdG9ycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25uZWN0U3RhdGUoc2VsZWN0b3JzW2tleV0sIHNldFN0YXRlRm9yS2V5KGtleSkpO1xuICAgIH0pO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgV3JhcHBlZENvbXBvbmVudCA9IChwcm9wcykgPT4gPENvbXBvbmVudCB7Li4ucHJvcHN9IHsuLi5zdGF0ZX0gLz47XG5cbiAgcmV0dXJuIFdyYXBwZWRDb21wb25lbnQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDb25uZWN0U3RhdGVXcmFwcGVyO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IERPTVB1cmlmeSBmcm9tIFwiZG9tcHVyaWZ5XCI7XG5pbXBvcnQgVCBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSBcIm5hbm9pZC9ub24tc2VjdXJlXCI7XG5cbmltcG9ydCB7IGdldFJlbW90ZURhdGFTdG9yZSB9IGZyb20gXCIuLi9yZW1vdGUtZGF0YS1zdG9yZVwiO1xuaW1wb3J0IENvbm5lY3RTdGF0ZVdyYXBwZXIgZnJvbSBcIi4uL0Nvbm5lY3RTdGF0ZVdyYXBwZXIvY29tcG9uZW50LmpzeFwiO1xuaW1wb3J0IEljb24gZnJvbSBcIi4uL0ljb24vY29tcG9uZW50LmpzeFwiO1xuXG5jb25zdCBSRURVQ0VSX0tFWSA9IFwiZmxhc2hlc1wiO1xuY29uc3QgRkxBU0hfREFUQV9JRCA9IFwidWktZmxhc2hlc1wiO1xuXG5jb25zdCBpbml0aWFsU3RhdGUgPSB7IGl0ZW1zOiBbXSB9O1xuXG5jb25zdCByZWR1Y2VyRmxhc2hlcyA9IHtcbiAgW1JFRFVDRVJfS0VZXTogKHN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb24pID0+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlIFwiZmxhc2gvcHVzaFwiOiB7XG4gICAgICAgIGNvbnN0IGZsYXNoZXMgPSBBcnJheS5pc0FycmF5KGFjdGlvbi5wYXlsb2FkKSA/IGFjdGlvbi5wYXlsb2FkIDogW2FjdGlvbi5wYXlsb2FkXTtcbiAgICAgICAgcmV0dXJuIHsgaXRlbXM6IFsuLi5zdGF0ZS5pdGVtcywgLi4uZmxhc2hlc10gfTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH0sXG59O1xuXG5jb25zdCBzZWxlY3RGbGFzaGVzID0gKHN0b3JlKSA9PiBzdG9yZS5nZXRTdGF0ZSgpW1JFRFVDRVJfS0VZXTtcblxuY29uc3QgRmxhc2hUID0ge1xuICB0eXBlOiBULm9uZU9mKFtcImVycm9yXCIsIFwic3VjY2Vzc1wiLCBcIm5vdGljZVwiLCBcImluZm9cIiwgXCJhbGVydFwiXSksXG4gIGNvbnRlbnQ6IFQuc3RyaW5nLFxufTtcblxuY29uc3QgRkxBU0hfQkdfQ09MT1IgPSB7XG4gIGVycm9yOiBcImJnLWd1aS1lcnJvclwiLFxuICBzdWNjZXNzOiBcImJnLXppbmd5LWdyZWVuXCIsXG4gIG5vdGljZTogXCJiZy1lbGVjdHJpYy1jeWFuXCIsXG4gIGluZm86IFwiYmctZWxlY3RyaWMtY3lhblwiLFxuICBhbGVydDogXCJiZy1hY3RpdmUtb3JhbmdlXCIsXG59O1xuXG5jb25zdCBGTEFTSF9URVhUX0NPTE9SID0ge1xuICBlcnJvcjogXCJ0ZXh0LXdoaXRlXCIsXG4gIHN1Y2Nlc3M6IFwidGV4dC1jb29sLWJsYWNrXCIsXG4gIG5vdGljZTogXCJ0ZXh0LWNvb2wtYmxhY2tcIixcbiAgaW5mbzogXCJ0ZXh0LWNvb2wtYmxhY2tcIixcbiAgYWxlcnQ6IFwidGV4dC13aGl0ZVwiLFxufTtcblxuY29uc3QgQVVUT19ISURFID0gW1wic3VjY2Vzc1wiLCBcImluZm9cIiwgXCJub3RpY2VcIl07XG5jb25zdCBBVVRPX0hJREVfVElNRSA9IDgwMDA7XG5cbmNvbnN0IHVzZUF1dG9IaWRlID0gKHR5cGUsIGNsb3NlRmxhc2gpID0+IHtcbiAgY29uc3QgdGltZW91dElkID0gdXNlUmVmKG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKEFVVE9fSElERS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgdGltZW91dElkLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY2xvc2VGbGFzaCgpO1xuICAgICAgfSwgQVVUT19ISURFX1RJTUUpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodGltZW91dElkLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZC5jdXJyZW50KTtcbiAgICAgIH1cbiAgICB9O1xuICB9LCBbXSk7XG59O1xuXG5jb25zdCBGbGFzaCA9ICh7IGlkLCB0eXBlLCBjb250ZW50LCByZW1vdmVGbGFzaCB9KSA9PiB7XG4gIGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgW2Nsb3NlZCwgc2V0Q2xvc2VkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2ZsYXNoSGVpZ2h0LCBzZXRGbGFzaEhlaWdodF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3RyaWdnZXJFbnRyeUFuaW1hdGlvbiwgc2V0VHJpZ2dlckVudHJ5QW5pbWF0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBjbG9zZUZsYXNoID0gKCkgPT4ge1xuICAgIGlmIChyZWYuY3VycmVudCkge1xuICAgICAgc2V0Rmxhc2hIZWlnaHQocmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBzZXRDbG9zZWQodHJ1ZSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlbW92ZUZsYXNoKGlkKTtcbiAgICB9LCAxMDApO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRUcmlnZ2VyRW50cnlBbmltYXRpb24odHJ1ZSksIFtdKTtcbiAgdXNlQXV0b0hpZGUodHlwZSwgY2xvc2VGbGFzaCk7XG5cbiAgY29uc3QgYW5pbWF0ZUVudHJ5ID0gdHJpZ2dlckVudHJ5QW5pbWF0aW9uICYmICFjbG9zZWQ7XG5cbiAgbGV0IHN0eWxlO1xuXG4gIGlmIChmbGFzaEhlaWdodCAmJiAhY2xvc2VkKSB7XG4gICAgc3R5bGUgPSB7IGhlaWdodDogYCR7Zmxhc2hIZWlnaHR9cHhgIH07XG4gIH0gZWxzZSBpZiAoY2xvc2VkKSB7XG4gICAgc3R5bGUgPSB7IGhlaWdodDogMCwgbWFyZ2luVG9wOiAwLCB6SW5kZXg6IC0xIH07XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUgPSB7fTtcbiAgfVxuXG4gIGNvbnN0IHNhZmVDb250ZW50ID0gRE9NUHVyaWZ5LnNhbml0aXplKGNvbnRlbnQsIHtcbiAgICBBTExPV0VEX1RBR1M6IFtcImFcIl0sXG4gICAgQUxMT1dFRF9BVFRSOiBbXCJocmVmXCIsIFwiZGF0YS1tZXRob2RcIiwgXCJyZWxcIl0sXG4gIH0pO1xuXG4gIGNvbnN0IHdpdGhJY29ucyA9IHtcbiAgICBub3RpY2U6IFwiaWNvbi1ndWktYWJseS1iYWRnZVwiLFxuICAgIHN1Y2Nlc3M6IFwiaWNvbi1ndWktdGlja1wiLFxuICAgIGVycm9yOiBcImljb24tZ3VpLXdhcm5pbmdcIixcbiAgICBhbGVydDogXCJpY29uLWd1aS13YXJuaW5nXCIsXG4gIH07XG5cbiAgY29uc3QgaWNvbkNvbG9yID0ge1xuICAgIG5vdGljZTogXCJ0ZXh0LWNvb2wtYmxhY2tcIixcbiAgICBzdWNjZXNzOiBcInRleHQtY29vbC1ibGFja1wiLFxuICAgIGVycm9yOiBcInRleHQtd2hpdGVcIixcbiAgICBhbGVydDogXCJ0ZXh0LXdoaXRlXCIsXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YHVpLWZsYXNoLW1lc3NhZ2UgdWktZ3JpZC1weCAke2FuaW1hdGVFbnRyeSA/IFwidWktZmxhc2gtbWVzc2FnZS1lbnRlclwiIDogXCJcIn1gfSBzdHlsZT17c3R5bGV9IHJlZj17cmVmfSBkYXRhLWlkPVwidWktZmxhc2hcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtGTEFTSF9CR19DT0xPUlt0eXBlXX0gcC0zMiBmbGV4IGFsaWduLWNlbnRlciByb3VuZGVkIHNoYWRvdy1jb250YWluZXItc3VidGxlYH0+XG4gICAgICAgIHt3aXRoSWNvbnNbdHlwZV0gJiYgPEljb24gbmFtZT17d2l0aEljb25zW3R5cGVdfSBjb2xvcj17aWNvbkNvbG9yW3R5cGVdfSBzaXplPVwiMS41cmVtXCIgYWRkaXRpb25hbENTUz1cIm1yLTE2IHNlbGYtYmFzZWxpbmVcIiAvPn1cbiAgICAgICAgPHAgY2xhc3NOYW1lPXtgdWktZmxhc2gtdGV4dCAke0ZMQVNIX1RFWFRfQ09MT1JbdHlwZV19YH0gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3sgX19odG1sOiBzYWZlQ29udGVudCB9fSAvPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJwLTAgbWwtYXV0byBzZWxmLXN0YXJ0IGZvY3VzOm91dGxpbmUtbm9uZVwiIG9uQ2xpY2s9e2Nsb3NlRmxhc2h9PlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJpY29uLWd1aS1jbG9zZVwiIGNvbG9yPXtpY29uQ29sb3JbdHlwZV19IHNpemU9XCIxLjVyZW1cIiBhZGRpdGlvbmFsQ1NTPVwidHJhbnNpdGlvbi1jb2xvcnNcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuRmxhc2gucHJvcFR5cGVzID0ge1xuICAuLi5GbGFzaFQsXG59O1xuXG5jb25zdCBGbGFzaGVzID0gKHsgZmxhc2hlcyB9KSA9PiB7XG4gIGNvbnN0IFtmbGFzaGVzV2l0aElkcywgc2V0Rmxhc2hlc1dpdGhJZHNdID0gdXNlU3RhdGUoW10pO1xuXG4gIGNvbnN0IHJlbW92ZUZsYXNoID0gKGZsYXNoSWQpID0+IHNldEZsYXNoZXNXaXRoSWRzKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkICE9PSBmbGFzaElkKSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRGbGFzaGVzV2l0aElkcygoc3RhdGUpID0+IHtcbiAgICAgIHJldHVybiBbLi4uc3RhdGUsIC4uLihmbGFzaGVzPy5pdGVtcyB8fCBbXSkubWFwKChmbGFzaCkgPT4gKHsgLi4uZmxhc2gsIGlkOiBuYW5vaWQoKSwgcmVtb3ZlZDogZmFsc2UgfSkpXTtcbiAgICB9KTtcbiAgfSwgW2ZsYXNoZXNdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwidWktZmxhc2hcIiBkYXRhLWlkPXtGTEFTSF9EQVRBX0lEfT5cbiAgICAgIHtmbGFzaGVzV2l0aElkc1xuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5yZW1vdmVkKVxuICAgICAgICAubWFwKChmbGFzaCkgPT4gKFxuICAgICAgICAgIDxGbGFzaCByZW1vdmVGbGFzaD17cmVtb3ZlRmxhc2h9IGtleT17Zmxhc2guaWR9IHsuLi5mbGFzaH0gLz5cbiAgICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5GbGFzaGVzLnByb3BUeXBlcyA9IHtcbiAgZmxhc2hlczogVC5zaGFwZSh7IGl0ZW1zOiBULmFycmF5T2YoVC5zaGFwZShGbGFzaFQpKSB9KSxcbn07XG5cbmNvbnN0IEJhY2tlbmRGbGFzaGVzID0gKHsgZmxhc2hlcyB9KSA9PiB7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtZWRGbGFzaGVzID1cbiAgICAgIGZsYXNoZXMubWFwKChmbGFzaCkgPT4ge1xuICAgICAgICBjb25zdCBbdHlwZSwgY29udGVudF0gPSBmbGFzaDtcbiAgICAgICAgcmV0dXJuIHsgdHlwZSwgY29udGVudCB9O1xuICAgICAgfSkgfHwgW107XG5cbiAgICBpZiAodHJhbnNmb3JtZWRGbGFzaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN0b3JlID0gZ2V0UmVtb3RlRGF0YVN0b3JlKCk7XG5cbiAgICAgIHN0b3JlLmRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogXCJmbGFzaC9wdXNoXCIsXG4gICAgICAgIHBheWxvYWQ6IHRyYW5zZm9ybWVkRmxhc2hlcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW10pO1xuXG4gIGNvbnN0IFdyYXBwZWRGbGFzaGVzID0gQ29ubmVjdFN0YXRlV3JhcHBlcihGbGFzaGVzLCB7IGZsYXNoZXM6IHNlbGVjdEZsYXNoZXMgfSk7XG5cbiAgcmV0dXJuIDxXcmFwcGVkRmxhc2hlcyAvPjtcbn07XG5cbkJhY2tlbmRGbGFzaGVzLnByb3BUeXBlcyA9IHtcbiAgZmxhc2hlczogVC5hcnJheU9mKFQuYXJyYXlPZihULnN0cmluZykpLFxufTtcblxuZXhwb3J0IHsgcmVkdWNlckZsYXNoZXMsIEZMQVNIX0RBVEFfSUQsIEZsYXNoZXMgfTtcbmV4cG9ydCBkZWZhdWx0IEJhY2tlbmRGbGFzaGVzO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFQgZnJvbSBcInByb3AtdHlwZXNcIjtcblxuY29uc3QgSWNvbiA9ICh7IG5hbWUsIHNpemUgPSBcIjAuNzVyZW1cIiwgY29sb3IgPSBcIlwiLCBhZGRpdGlvbmFsQ1NTID0gXCJcIiwgLi4uYWRkaXRpb25hbEF0dHJpYnV0ZXMgfSkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxzdmcgY2xhc3NOYW1lPXtgJHtjb2xvcn0gJHthZGRpdGlvbmFsQ1NTfWB9IHN0eWxlPXt7IHdpZHRoOiBzaXplLCBoZWlnaHQ6IHNpemUgfX0gey4uLmFkZGl0aW9uYWxBdHRyaWJ1dGVzfT5cbiAgICAgIDx1c2UgeGxpbmtIcmVmPXtgI3Nwcml0ZS0ke25hbWV9YH0gLz5cbiAgICA8L3N2Zz5cbiAgKTtcbn07XG5cbkljb24ucHJvcFR5cGVzID0ge1xuICBuYW1lOiBULnN0cmluZy5pc1JlcXVpcmVkLFxuICBzaXplOiBULnN0cmluZyxcbiAgY29sb3I6IFQuc3RyaW5nLFxuICBhZGRpdGlvbmFsQ1NTOiBULnN0cmluZyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEljb247XG4iLCJleHBvcnQgY29uc3QgcXVlcnlJZCA9ICh2YWwsIHJvb3QgPSBkb2N1bWVudCkgPT5cbiAgcm9vdC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1pZD0ke3ZhbH1dYCk7XG5cbmV4cG9ydCBjb25zdCBxdWVyeUlkQWxsID0gKHZhbCwgcm9vdCA9IGRvY3VtZW50KSA9PlxuICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLWlkPSR7dmFsfV1gKTtcbiIsImltcG9ydCB7IGNyZWF0ZVN0b3JlLCBjb21iaW5lUmVkdWNlcnMgfSBmcm9tIFwicmVkdXhcIjtcblxuZXhwb3J0IGNvbnN0IGF0dGFjaFN0b3JlVG9XaW5kb3cgPSAoc3RvcmUpID0+IHtcbiAgd2luZG93LkFibHlVaSA9IHdpbmRvdy5BYmx5VWkgfHwge307XG4gIHdpbmRvdy5BYmx5VWkuUmVtb3RlRGF0YVN0b3JlID0gc3RvcmU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVtb3RlRGF0YVN0b3JlID0gKCkgPT4ge1xuICBpZiAoIXdpbmRvdy5BYmx5VWkuUmVtb3RlRGF0YVN0b3JlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUmVtb3RlIHN0b3JlIHdhcyBjYWxsZWQgYmVmb3JlIG9uZSB3YXMgY3JlYXRlZFwiKTtcbiAgfVxuXG4gIHJldHVybiB3aW5kb3cuQWJseVVpLlJlbW90ZURhdGFTdG9yZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25uZWN0U3RhdGUgPSAoc2VsZWN0b3IsIHNldFN0YXRlKSA9PiB7XG4gIGNvbnN0IHN0b3JlID0gZ2V0UmVtb3RlRGF0YVN0b3JlKCk7XG4gIGxldCBjYWNoZWRPbGRTdGF0ZSA9IHNlbGVjdG9yKHN0b3JlKTtcblxuICBzdG9yZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0gc2VsZWN0b3Ioc3RvcmUpO1xuXG4gICAgLy8gRG8gbm90aGluZywgc3RhdGUgaXMgdGhlIHNhbWVcbiAgICBpZiAobmV3U3RhdGUgPT09IGNhY2hlZE9sZFN0YXRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2FjaGVkT2xkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICBzZXRTdGF0ZShuZXdTdGF0ZSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlbW90ZURhdGFTdG9yZSA9IChyZWR1Y2VycykgPT5cbiAgY3JlYXRlU3RvcmUoY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSk7XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCB7fTsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfZG9tcHVyaWZ5X187IiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX2pzX2Nvb2tpZV9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9sb2Rhc2hfdGhyb3R0bGVfXzsiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfcHJvcF90eXBlc19fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWFjdF9fOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9yZWR1eF9fOyIsImxldCB1cmxBbHBoYWJldCA9XG4gICd1c2VhbmRvbS0yNlQxOTgzNDBQWDc1cHhKQUNLVkVSWU1JTkRCVVNIV09MRl9HUVpiZmdoamtscXZ3eXpyaWN0J1xuZXhwb3J0IGxldCBjdXN0b21BbHBoYWJldCA9IChhbHBoYWJldCwgZGVmYXVsdFNpemUgPSAyMSkgPT4ge1xuICByZXR1cm4gKHNpemUgPSBkZWZhdWx0U2l6ZSkgPT4ge1xuICAgIGxldCBpZCA9ICcnXG4gICAgbGV0IGkgPSBzaXplXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgaWQgKz0gYWxwaGFiZXRbKE1hdGgucmFuZG9tKCkgKiBhbHBoYWJldC5sZW5ndGgpIHwgMF1cbiAgICB9XG4gICAgcmV0dXJuIGlkXG4gIH1cbn1cbmV4cG9ydCBsZXQgbmFub2lkID0gKHNpemUgPSAyMSkgPT4ge1xuICBsZXQgaWQgPSAnJ1xuICBsZXQgaSA9IHNpemVcbiAgd2hpbGUgKGktLSkge1xuICAgIGlkICs9IHVybEFscGhhYmV0WyhNYXRoLnJhbmRvbSgpICogNjQpIHwgMF1cbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJpbXBvcnQgXCIuL2NvbXBvbmVudC5jc3NcIjtcbmltcG9ydCBDb29raWUgZnJvbSBcImpzLWNvb2tpZVwiO1xuaW1wb3J0IHRocm90dGxlIGZyb20gXCJsb2Rhc2gudGhyb3R0bGVcIjtcblxuaW1wb3J0IHsgcXVlcnlJZCB9IGZyb20gXCIuLi9kb20tcXVlcnlcIjtcbmltcG9ydCB7IEZMQVNIX0RBVEFfSUQgfSBmcm9tIFwiLi4vRmxhc2gvY29tcG9uZW50LmpzeFwiO1xuXG5jb25zdCBDT09LSUVfRVhQSVJZID0gOTA7XG5jb25zdCBDT0xMQVBTRV9UUklHR0VSX0RJU1RBTkNFID0gNTtcbmNvbnN0IFNDUk9MTF9MSVNURU5FUl9USFJPVFRMRSA9IDEwMDtcbmNvbnN0IFJFU0laRV9MSVNURU5FUl9USFJPVFRMRSA9IDEwMDtcblxuY29uc3QgaXNNZFZpZXdwb3J0ID0gKCkgPT4gIXdpbmRvdy5tYXRjaE1lZGlhKGAobWluLXdpZHRoOiA2NXJlbSlgKS5tYXRjaGVzO1xuXG5jb25zdCBhZGp1c3RGbGFzaE1hcmdpbiA9IChvcGVuKSA9PiB7XG4gIC8vIEhBQ0sgQUxFUlRcbiAgLy8gQWRkIG1hcmdpbiB0byBmbGFzaGVzIHdoZW4gb3BlbmluZyB0aGUgbm90aWNlLlxuICAvLyBGbGFzaGVzIGFyZSByZWFjdCBjb21wb25lbnRzIGFuZCB0aGlzIG5vdGljZSBuZWVkcyB0byB3b3JrIGFzIGEgdmlldy1jb21wb25lbnQgYW5kIHJlYWN0IGNvbXBvbmVudC5cbiAgLy8gV2UgY291bGQgZG8gdGhpcyB3aXRoIHJlZHV4IGJ1dCB0aGVuIHdlIHBvdGVudGlhbGx5IHVwZGF0ZSBzdGF0ZSBvbiBldmVyeSBzY3JvbGwgZXZlbnQsIHdoaWNoXG4gIC8vIGV2ZW4gd2l0aCBkZWJvdW5jZSB3aWxsIGRlcGxhdGUgb3VyIGZyYW1lIGJ1ZGdldC5cblxuICBjb25zdCBmbGFzaCA9IHF1ZXJ5SWQoRkxBU0hfREFUQV9JRCk7XG5cbiAgaWYgKGZsYXNoKSB7XG4gICAgZmxhc2guc3R5bGUubWFyZ2luVG9wID0gb3BlbiA/IGA0cmVtYCA6IG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGhpZGVPbk1vYmlsZSA9IChiYW5uZXJDb250YWluZXIpID0+IHtcbiAgaWYgKGlzTWRWaWV3cG9ydCgpKSB7XG4gICAgYmFubmVyQ29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgfSBlbHNlIHtcbiAgICBiYW5uZXJDb250YWluZXIuc3R5bGUuZGlzcGxheSA9IG51bGw7XG4gIH1cbn07XG5cbmNvbnN0IGhpZGVOb3RpY2UgPSAoYmFubmVyQ29udGFpbmVyKSA9PiB7XG4gIGJhbm5lckNvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQgPSAwO1xuICBiYW5uZXJDb250YWluZXIuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXG4gIGFkanVzdEZsYXNoTWFyZ2luKGZhbHNlKTtcbn07XG5cbmNvbnN0IHNob3dOb3RpY2UgPSAoYmFubmVyQ29udGFpbmVyKSA9PiB7XG4gIGJhbm5lckNvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQgPSBudWxsO1xuICBiYW5uZXJDb250YWluZXIuc3R5bGUub3ZlcmZsb3cgPSBudWxsO1xuXG4gIGFkanVzdEZsYXNoTWFyZ2luKHRydWUpO1xufTtcblxuY29uc3Qgc2V0dXBSZW1lbWJlckNsb3NlZCA9IChjb29raWVJZCwgbm90aWNlSWQpID0+IHtcbiAgY29uc3QgY29va2llID0gQ29va2llLmdldChjb29raWVJZCkgfHwgXCJcIjtcblxuICBDb29raWUuc2V0KGNvb2tpZUlkLCBgJHtjb29raWUucmVwbGFjZShgJHtub3RpY2VJZH0sYCwgXCJcIikgKyBub3RpY2VJZH0sYCwge1xuICAgIGV4cGlyZXM6IENPT0tJRV9FWFBJUlksXG4gIH0pO1xufTtcblxuY29uc3QgaGFzQmVlbkNsb3NlZEJlZm9yZSA9IChjb29raWVJZCwgbm90aWNlSWQpID0+XG4gIChDb29raWUuZ2V0KGNvb2tpZUlkKSB8fCBcIlwiKS5pbmNsdWRlcyhub3RpY2VJZCk7XG5cbmNvbnN0IHNldHVwTm90aWNlQ29sbGFwc2UgPSAoYmFubmVyQ29udGFpbmVyKSA9PiB7XG4gIGNvbnN0IHNjcm9sbFRvcCA9IHdpbmRvdy5zY3JvbGxZO1xuXG4gIGlmIChzY3JvbGxUb3AgPiBDT0xMQVBTRV9UUklHR0VSX0RJU1RBTkNFKSB7XG4gICAgaGlkZU5vdGljZShiYW5uZXJDb250YWluZXIpO1xuICB9XG5cbiAgY29uc3QgbGlzdGVuZXIgPSB0aHJvdHRsZSgoKSA9PiB7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gd2luZG93LnNjcm9sbFk7XG5cbiAgICBpZiAoc2Nyb2xsVG9wID4gQ09MTEFQU0VfVFJJR0dFUl9ESVNUQU5DRSkge1xuICAgICAgaGlkZU5vdGljZShiYW5uZXJDb250YWluZXIpO1xuICAgIH0gZWxzZSBpZiAoYmFubmVyQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93KSB7XG4gICAgICBzaG93Tm90aWNlKGJhbm5lckNvbnRhaW5lcik7XG4gICAgfVxuICB9LCBTQ1JPTExfTElTVEVORVJfVEhST1RUTEUpO1xuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgbGlzdGVuZXIpO1xuXG4gIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGxpc3RlbmVyKTtcbn07XG5cbmNvbnN0IHNldHVwQ2xvc2VCdG4gPSAoXG4gIGJhbm5lckNvbnRhaW5lcixcbiAgY29va2llSWQsXG4gIG5vdGljZUlkLFxuICBjb2xsYXBzZVVubW91bnRMaXN0ZW5lcnNcbikgPT4ge1xuICBjb25zdCBjbG9zZUJ0biA9IGJhbm5lckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiYnV0dG9uXCIpO1xuXG4gIGlmICghY2xvc2VCdG4pIHJldHVybiAoKSA9PiB7fTtcblxuICBjb25zdCBsaXN0ZW5lciA9ICgpID0+IHtcbiAgICBpZiAoY29va2llSWQgJiYgbm90aWNlSWQpIHNldHVwUmVtZW1iZXJDbG9zZWQoY29va2llSWQsIG5vdGljZUlkKTtcblxuICAgIGhpZGVOb3RpY2UoYmFubmVyQ29udGFpbmVyKTtcbiAgICBjb2xsYXBzZVVubW91bnRMaXN0ZW5lcnMoKTtcbiAgfTtcblxuICBjbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbGlzdGVuZXIpO1xuXG4gIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbGlzdGVuZXIpO1xufTtcblxuY29uc3QgcmVzaXplSGFuZGxlciA9IChiYW5uZXJDb250YWluZXIpID0+IHtcbiAgY29uc3QgaGFuZGxlciA9IHRocm90dGxlKCgpID0+IHtcbiAgICBoaWRlT25Nb2JpbGUoYmFubmVyQ29udGFpbmVyKTtcbiAgfSwgUkVTSVpFX0xJU1RFTkVSX1RIUk9UVExFKTtcblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoYW5kbGVyKTtcblxuICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgaGFuZGxlcik7XG59O1xuXG5jb25zdCBOb3RpY2UgPSAoeyBiYW5uZXJDb250YWluZXIsIGNvb2tpZUlkLCBub3RpY2VJZCwgb3B0aW9ucyB9KSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gKCkgPT4ge307XG5cbiAgaWYgKCFiYW5uZXJDb250YWluZXIpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIkEgTm90aWNlIGNvbXBvbmVudCB3YXMgaW5pdGl0ZWQgYnV0IG5vIG5vdGljZSBjb250YWluZXIgd2FzIGZvdW5kLlwiXG4gICAgKTtcbiAgICByZXR1cm4gKCkgPT4ge307XG4gIH1cblxuICBpZiAoaGFzQmVlbkNsb3NlZEJlZm9yZShjb29raWVJZCwgbm90aWNlSWQpKSByZXR1cm4gKCkgPT4ge307XG5cbiAgaGlkZU9uTW9iaWxlKGJhbm5lckNvbnRhaW5lcik7XG4gIHNob3dOb3RpY2UoYmFubmVyQ29udGFpbmVyKTtcblxuICBjb25zdCBvcHRzID0geyBjb2xsYXBzZTogdHJ1ZSwgLi4ub3B0aW9ucyB9O1xuXG4gIGNvbnN0IGNvbGxhcHNlVW5tb3VudExpc3RlbmVycyA9IG9wdHMuY29sbGFwc2VcbiAgICA/IHNldHVwTm90aWNlQ29sbGFwc2UoYmFubmVyQ29udGFpbmVyKVxuICAgIDogKCkgPT4ge307XG5cbiAgY29uc3QgY2xvc2VCdG5Vbm1vdW50TGlzdGVuZXJzID0gc2V0dXBDbG9zZUJ0bihcbiAgICBiYW5uZXJDb250YWluZXIsXG4gICAgY29va2llSWQsXG4gICAgbm90aWNlSWQsXG4gICAgY29sbGFwc2VVbm1vdW50TGlzdGVuZXJzXG4gICk7XG5cbiAgY29uc3QgcmVzaXplVW5tb3VudExpc3RlbmVyID0gcmVzaXplSGFuZGxlcihiYW5uZXJDb250YWluZXIpO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgW1xuICAgICAgY2xvc2VCdG5Vbm1vdW50TGlzdGVuZXJzLFxuICAgICAgY29sbGFwc2VVbm1vdW50TGlzdGVuZXJzLFxuICAgICAgcmVzaXplVW5tb3VudExpc3RlbmVyLFxuICAgIF0uZm9yRWFjaCgodW5tb3VudCkgPT4gdW5tb3VudCgpKTtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5vdGljZTtcbiJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiY29ubmVjdFN0YXRlIiwiZ2V0UmVtb3RlRGF0YVN0b3JlIiwiQ29ubmVjdFN0YXRlV3JhcHBlciIsIkNvbXBvbmVudCIsInNlbGVjdG9ycyIsInN0YXRlIiwic2V0U3RhdGUiLCJzZXRTdGF0ZUZvcktleSIsImtleSIsInN0b3JlU3RhdGUiLCJzdG9yZSIsInJlc29sdmVkU3RhdGUiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwiYWNjIiwiZm9yRWFjaCIsIldyYXBwZWRDb21wb25lbnQiLCJwcm9wcyIsInVzZVJlZiIsIkRPTVB1cmlmeSIsIlQiLCJuYW5vaWQiLCJJY29uIiwiUkVEVUNFUl9LRVkiLCJGTEFTSF9EQVRBX0lEIiwiaW5pdGlhbFN0YXRlIiwiaXRlbXMiLCJyZWR1Y2VyRmxhc2hlcyIsImFjdGlvbiIsInR5cGUiLCJmbGFzaGVzIiwiQXJyYXkiLCJpc0FycmF5IiwicGF5bG9hZCIsInNlbGVjdEZsYXNoZXMiLCJnZXRTdGF0ZSIsIkZsYXNoVCIsIm9uZU9mIiwiY29udGVudCIsInN0cmluZyIsIkZMQVNIX0JHX0NPTE9SIiwiZXJyb3IiLCJzdWNjZXNzIiwibm90aWNlIiwiaW5mbyIsImFsZXJ0IiwiRkxBU0hfVEVYVF9DT0xPUiIsIkFVVE9fSElERSIsIkFVVE9fSElERV9USU1FIiwidXNlQXV0b0hpZGUiLCJjbG9zZUZsYXNoIiwidGltZW91dElkIiwiaW5jbHVkZXMiLCJjdXJyZW50Iiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsIkZsYXNoIiwiaWQiLCJyZW1vdmVGbGFzaCIsInJlZiIsImNsb3NlZCIsInNldENsb3NlZCIsImZsYXNoSGVpZ2h0Iiwic2V0Rmxhc2hIZWlnaHQiLCJ0cmlnZ2VyRW50cnlBbmltYXRpb24iLCJzZXRUcmlnZ2VyRW50cnlBbmltYXRpb24iLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJoZWlnaHQiLCJhbmltYXRlRW50cnkiLCJzdHlsZSIsIm1hcmdpblRvcCIsInpJbmRleCIsInNhZmVDb250ZW50Iiwic2FuaXRpemUiLCJBTExPV0VEX1RBR1MiLCJBTExPV0VEX0FUVFIiLCJ3aXRoSWNvbnMiLCJpY29uQ29sb3IiLCJfX2h0bWwiLCJwcm9wVHlwZXMiLCJGbGFzaGVzIiwiZmxhc2hlc1dpdGhJZHMiLCJzZXRGbGFzaGVzV2l0aElkcyIsImZsYXNoSWQiLCJmaWx0ZXIiLCJpdGVtIiwibWFwIiwiZmxhc2giLCJyZW1vdmVkIiwic2hhcGUiLCJhcnJheU9mIiwiQmFja2VuZEZsYXNoZXMiLCJ0cmFuc2Zvcm1lZEZsYXNoZXMiLCJsZW5ndGgiLCJkaXNwYXRjaCIsIldyYXBwZWRGbGFzaGVzIiwibmFtZSIsInNpemUiLCJjb2xvciIsImFkZGl0aW9uYWxDU1MiLCJhZGRpdGlvbmFsQXR0cmlidXRlcyIsIndpZHRoIiwiaXNSZXF1aXJlZCIsInF1ZXJ5SWQiLCJ2YWwiLCJyb290IiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlJZEFsbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJjcmVhdGVTdG9yZSIsImNvbWJpbmVSZWR1Y2VycyIsImF0dGFjaFN0b3JlVG9XaW5kb3ciLCJ3aW5kb3ciLCJBYmx5VWkiLCJSZW1vdGVEYXRhU3RvcmUiLCJFcnJvciIsInNlbGVjdG9yIiwiY2FjaGVkT2xkU3RhdGUiLCJzdWJzY3JpYmUiLCJuZXdTdGF0ZSIsImNyZWF0ZVJlbW90ZURhdGFTdG9yZSIsInJlZHVjZXJzIiwiQ29va2llIiwidGhyb3R0bGUiLCJDT09LSUVfRVhQSVJZIiwiQ09MTEFQU0VfVFJJR0dFUl9ESVNUQU5DRSIsIlNDUk9MTF9MSVNURU5FUl9USFJPVFRMRSIsIlJFU0laRV9MSVNURU5FUl9USFJPVFRMRSIsImlzTWRWaWV3cG9ydCIsIm1hdGNoTWVkaWEiLCJtYXRjaGVzIiwiYWRqdXN0Rmxhc2hNYXJnaW4iLCJvcGVuIiwiaGlkZU9uTW9iaWxlIiwiYmFubmVyQ29udGFpbmVyIiwiZGlzcGxheSIsImhpZGVOb3RpY2UiLCJtYXhIZWlnaHQiLCJvdmVyZmxvdyIsInNob3dOb3RpY2UiLCJzZXR1cFJlbWVtYmVyQ2xvc2VkIiwiY29va2llSWQiLCJub3RpY2VJZCIsImNvb2tpZSIsImdldCIsInNldCIsInJlcGxhY2UiLCJleHBpcmVzIiwiaGFzQmVlbkNsb3NlZEJlZm9yZSIsInNldHVwTm90aWNlQ29sbGFwc2UiLCJzY3JvbGxUb3AiLCJzY3JvbGxZIiwibGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInNldHVwQ2xvc2VCdG4iLCJjb2xsYXBzZVVubW91bnRMaXN0ZW5lcnMiLCJjbG9zZUJ0biIsInJlc2l6ZUhhbmRsZXIiLCJoYW5kbGVyIiwiTm90aWNlIiwib3B0aW9ucyIsImNvbnNvbGUiLCJ3YXJuIiwib3B0cyIsImNvbGxhcHNlIiwiY2xvc2VCdG5Vbm1vdW50TGlzdGVuZXJzIiwicmVzaXplVW5tb3VudExpc3RlbmVyIiwidW5tb3VudCJdLCJzb3VyY2VSb290IjoiIn0=
|