openstack-uicore-foundation 3.0.82 → 3.0.83

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,324 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("openstack-uicore-foundation",[],t):"object"==typeof exports?exports["openstack-uicore-foundation"]=t():e["openstack-uicore-foundation"]=t()}(this,(function(){return function(e){var t={};function n(s){if(t[s])return t[s].exports;var i=t[s]={i:s,l:!1,exports:{}};return e[s].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,s){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(n.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(s,i,function(t){return e[t]}.bind(null,i));return s},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=26)}({26:function(e,t,n){"use strict";function s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,s)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?s(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):s(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}n.r(t),n.d(t,"CheckBoxQuestionType",(function(){return o})),n.d(t,"ComboBoxQuestionType",(function(){return u})),n.d(t,"CheckBoxListQuestionType",(function(){return a})),n.d(t,"RadioButtonListQuestionType",(function(){return l})),n.d(t,"AllowedMultipleValueQuestionType",(function(){return f})),n.d(t,"AnswerValuesOperator_And",(function(){return c})),n.d(t,"AnswerValuesOperator_Or",(function(){return p})),n.d(t,"VisibilityCondition_Equal",(function(){return h})),n.d(t,"VisibilityCondition_NotEqual",(function(){return d})),n.d(t,"Visibility_Visible",(function(){return _})),n.d(t,"MainQuestionClassType",(function(){return b})),n.d(t,"default",(function(){return y}));const o="CheckBox",u="ComboBox",a="CheckBoxList",l="RadioButtonList",f=[u,a,l],c="And",p="Or",h="Equal",d="NotEqual",_="Visible",b="MainQuestion";class y{constructor(e,t=[]){r(this,"_parseQuestion",e=>{if(this.questionByName[e.name]=e,this.questionById[parseInt(e.id)]=e,e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules)this.rules[parseInt(t.id)]=t,this._parseQuestion(t.sub_question)}),r(this,"_parseQuestions",()=>{for(let e of this.questions)this._parseQuestion(e)}),r(this,"_allowsValues",e=>f.includes(e.type)),r(this,"_allowsValue",(e,t)=>{let n=t.value.split(",").map(e=>parseInt(e));for(let t of n)if(!e.values.map(e=>e.id).includes(t))return!1;return!0}),r(this,"_getAnswerFor",e=>{let t=Number.isInteger(e)?e:e.id,n=this.answers[t]||null;return n||null}),r(this,"_hasValue",e=>""!==e.value),r(this,"_answerContains",(e,t)=>e.value.split(",").includes(t)),r(this,"_isSubQuestionVisible",e=>{let t=e.answer_values_operator===c;const n=this._getAnswerFor(e.parent_question_id);if(n)switch(e.visibility_condition){case h:for(let s of e.answer_values)t=e.answer_values_operator===c?t&&this._answerContains(n,s):t||this._answerContains(n,s);break;case d:for(let s of e.answer_values)t=e.answer_values_operator===c?t&&!this._answerContains(n,s):t||!this._answerContains(n,s)}else t=e.visibility_condition!==h;return e.visibility===_?t:!t}),r(this,"_isAnswered",e=>{const t=this._getAnswerFor(e);if(e.class===b)return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));for(let n of e.parent_rules)if(this._isSubQuestionVisible(this.rules[n]))return!e.mandatory||!!t&&(!!this._hasValue(t)&&!(this._allowsValues(e)&&!this._allowsValue(e,t)));return!0}),r(this,"_checkQuestion",e=>{let t=this._isAnswered(e);if(e.hasOwnProperty("sub_question_rules"))for(let n of e.sub_question_rules)t=t&&this._checkQuestion(n.sub_question);return t}),r(this,"_formatQuestionAnswer",e=>{var t;let n={},s=null===(t=this.originalAnswers.find(t=>t.question_id===e.id))||void 0===t?void 0:t.value;if(s&&(e.type===o&&(s="false"!==s&&!!s),e.type!==l&&e.type!==u||(s=parseInt(s)),e.type===a&&(s=s.split(",").map(e=>parseInt(e))||[])),n[e.name]=s||"",e.hasOwnProperty("sub_question_rules"))for(let t of e.sub_question_rules){let e=this._formatQuestionAnswer(t.sub_question);n=i(i({},n),e)}return n}),r(this,"formatAnswers",()=>{let e={};return this.questions.forEach(t=>{let n=this._formatQuestionAnswer(t);e=i(i({},e),n)}),e}),r(this,"completed",()=>{let e=!0;for(let t of this.questions)e=e&&this._checkQuestion(t);return e}),r(this,"getQuestionByName",e=>this.questionByName[e]||null),r(this,"getQuestionById",e=>this.questionById[parseInt(e)]||null),this.questions=e,this.originalAnswers=t,this.answers=[];for(let e of this.originalAnswers)this.answers[e.question_id]=e;this.questionByName={},this.questionById={},this.rules={},this._parseQuestions()}}}})}));
1
+ (function webpackUniversalModuleDefinition(root, factory) {
2
+ if(typeof exports === 'object' && typeof module === 'object')
3
+ module.exports = factory();
4
+ else if(typeof define === 'function' && define.amd)
5
+ define("openstack-uicore-foundation", [], factory);
6
+ else if(typeof exports === 'object')
7
+ exports["openstack-uicore-foundation"] = factory();
8
+ else
9
+ root["openstack-uicore-foundation"] = factory();
10
+ })(this, function() {
11
+ return /******/ (function(modules) { // webpackBootstrap
12
+ /******/ // The module cache
13
+ /******/ var installedModules = {};
14
+ /******/
15
+ /******/ // The require function
16
+ /******/ function __webpack_require__(moduleId) {
17
+ /******/
18
+ /******/ // Check if module is in cache
19
+ /******/ if(installedModules[moduleId]) {
20
+ /******/ return installedModules[moduleId].exports;
21
+ /******/ }
22
+ /******/ // Create a new module (and put it into the cache)
23
+ /******/ var module = installedModules[moduleId] = {
24
+ /******/ i: moduleId,
25
+ /******/ l: false,
26
+ /******/ exports: {}
27
+ /******/ };
28
+ /******/
29
+ /******/ // Execute the module function
30
+ /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
31
+ /******/
32
+ /******/ // Flag the module as loaded
33
+ /******/ module.l = true;
34
+ /******/
35
+ /******/ // Return the exports of the module
36
+ /******/ return module.exports;
37
+ /******/ }
38
+ /******/
39
+ /******/
40
+ /******/ // expose the modules object (__webpack_modules__)
41
+ /******/ __webpack_require__.m = modules;
42
+ /******/
43
+ /******/ // expose the module cache
44
+ /******/ __webpack_require__.c = installedModules;
45
+ /******/
46
+ /******/ // define getter function for harmony exports
47
+ /******/ __webpack_require__.d = function(exports, name, getter) {
48
+ /******/ if(!__webpack_require__.o(exports, name)) {
49
+ /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
50
+ /******/ }
51
+ /******/ };
52
+ /******/
53
+ /******/ // define __esModule on exports
54
+ /******/ __webpack_require__.r = function(exports) {
55
+ /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
56
+ /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
57
+ /******/ }
58
+ /******/ Object.defineProperty(exports, '__esModule', { value: true });
59
+ /******/ };
60
+ /******/
61
+ /******/ // create a fake namespace object
62
+ /******/ // mode & 1: value is a module id, require it
63
+ /******/ // mode & 2: merge all properties of value into the ns
64
+ /******/ // mode & 4: return value when already ns object
65
+ /******/ // mode & 8|1: behave like require
66
+ /******/ __webpack_require__.t = function(value, mode) {
67
+ /******/ if(mode & 1) value = __webpack_require__(value);
68
+ /******/ if(mode & 8) return value;
69
+ /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
70
+ /******/ var ns = Object.create(null);
71
+ /******/ __webpack_require__.r(ns);
72
+ /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
73
+ /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
74
+ /******/ return ns;
75
+ /******/ };
76
+ /******/
77
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
78
+ /******/ __webpack_require__.n = function(module) {
79
+ /******/ var getter = module && module.__esModule ?
80
+ /******/ function getDefault() { return module['default']; } :
81
+ /******/ function getModuleExports() { return module; };
82
+ /******/ __webpack_require__.d(getter, 'a', getter);
83
+ /******/ return getter;
84
+ /******/ };
85
+ /******/
86
+ /******/ // Object.prototype.hasOwnProperty.call
87
+ /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
88
+ /******/
89
+ /******/ // __webpack_public_path__
90
+ /******/ __webpack_require__.p = "";
91
+ /******/
92
+ /******/
93
+ /******/ // Load entry module and return exports
94
+ /******/ return __webpack_require__(__webpack_require__.s = "./src/utils/questions-set.js");
95
+ /******/ })
96
+ /************************************************************************/
97
+ /******/ ({
98
+
99
+ /***/ "./src/utils/questions-set.js":
100
+ /*!************************************!*\
101
+ !*** ./src/utils/questions-set.js ***!
102
+ \************************************/
103
+ /*! exports provided: CheckBoxQuestionType, ComboBoxQuestionType, CheckBoxListQuestionType, RadioButtonListQuestionType, AllowedMultipleValueQuestionType, AnswerValuesOperator_And, AnswerValuesOperator_Or, VisibilityCondition_Equal, VisibilityCondition_NotEqual, Visibility_Visible, MainQuestionClassType, default */
104
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
105
+
106
+ "use strict";
107
+ __webpack_require__.r(__webpack_exports__);
108
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CheckBoxQuestionType", function() { return CheckBoxQuestionType; });
109
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ComboBoxQuestionType", function() { return ComboBoxQuestionType; });
110
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CheckBoxListQuestionType", function() { return CheckBoxListQuestionType; });
111
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RadioButtonListQuestionType", function() { return RadioButtonListQuestionType; });
112
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AllowedMultipleValueQuestionType", function() { return AllowedMultipleValueQuestionType; });
113
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnswerValuesOperator_And", function() { return AnswerValuesOperator_And; });
114
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnswerValuesOperator_Or", function() { return AnswerValuesOperator_Or; });
115
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VisibilityCondition_Equal", function() { return VisibilityCondition_Equal; });
116
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VisibilityCondition_NotEqual", function() { return VisibilityCondition_NotEqual; });
117
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Visibility_Visible", function() { return Visibility_Visible; });
118
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MainQuestionClassType", function() { return MainQuestionClassType; });
119
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return QuestionsSet; });
120
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
121
+
122
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
123
+
124
+ 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; }
125
+
126
+ const CheckBoxQuestionType = 'CheckBox';
127
+ const ComboBoxQuestionType = 'ComboBox';
128
+ const CheckBoxListQuestionType = 'CheckBoxList';
129
+ const RadioButtonListQuestionType = 'RadioButtonList';
130
+ const AllowedMultipleValueQuestionType = [ComboBoxQuestionType, CheckBoxListQuestionType, RadioButtonListQuestionType];
131
+ const AnswerValuesOperator_And = 'And';
132
+ const AnswerValuesOperator_Or = 'Or';
133
+ const VisibilityCondition_Equal = 'Equal';
134
+ const VisibilityCondition_NotEqual = 'NotEqual';
135
+ const Visibility_Visible = 'Visible';
136
+ const MainQuestionClassType = 'MainQuestion';
137
+ class QuestionsSet {
138
+ constructor(questions, answers = []) {
139
+ _defineProperty(this, "_parseQuestion", q => {
140
+ this.questionByName[q.name] = q;
141
+ this.questionById[parseInt(q.id)] = q;
142
+ if (q.hasOwnProperty('sub_question_rules')) for (let r of q.sub_question_rules) {
143
+ this.rules[parseInt(r.id)] = r;
144
+
145
+ this._parseQuestion(r.sub_question);
146
+ }
147
+ });
148
+
149
+ _defineProperty(this, "_parseQuestions", () => {
150
+ for (let q of this.questions) {
151
+ this._parseQuestion(q);
152
+ }
153
+ });
154
+
155
+ _defineProperty(this, "_allowsValues", q => {
156
+ return AllowedMultipleValueQuestionType.includes(q.type);
157
+ });
158
+
159
+ _defineProperty(this, "_allowsValue", (q, answer) => {
160
+ let value = answer.value.split(',').map(v => parseInt(v));
161
+
162
+ for (let av of value) {
163
+ if (!q.values.map(e => e.id).includes(av)) return false;
164
+ }
165
+
166
+ return true;
167
+ });
168
+
169
+ _defineProperty(this, "_getAnswerFor", q => {
170
+ let id = Number.isInteger(q) ? q : q.id;
171
+ let a = this.answers[id] || null;
172
+ return a ? a : null;
173
+ });
174
+
175
+ _defineProperty(this, "_hasValue", answer => {
176
+ return answer.value !== '';
177
+ });
178
+
179
+ _defineProperty(this, "_answerContains", (answer, val) => {
180
+ return answer.value.split(',').includes(val);
181
+ });
182
+
183
+ _defineProperty(this, "_isSubQuestionVisible", rule => {
184
+ let initialCondition = rule.answer_values_operator === AnswerValuesOperator_And ? true : false;
185
+
186
+ const parentQuestionAnswer = this._getAnswerFor(rule.parent_question_id);
187
+
188
+ if (!parentQuestionAnswer) {
189
+ initialCondition = rule.visibility_condition === VisibilityCondition_Equal ? false : true;
190
+ } else {
191
+ switch (rule.visibility_condition) {
192
+ case VisibilityCondition_Equal:
193
+ {
194
+ for (let answerValue of rule.answer_values) {
195
+ if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || this._answerContains(parentQuestionAnswer, answerValue);
196
+ }
197
+ }
198
+ break;
199
+
200
+ case VisibilityCondition_NotEqual:
201
+ {
202
+ for (let answerValue of rule.answer_values) {
203
+ if (rule.answer_values_operator === AnswerValuesOperator_And) initialCondition = initialCondition && !this._answerContains(parentQuestionAnswer, answerValue);else initialCondition = initialCondition || !this._answerContains(parentQuestionAnswer, answerValue);
204
+ }
205
+ }
206
+ break;
207
+ }
208
+ } // final visibility check
209
+
210
+
211
+ if (rule.visibility === Visibility_Visible) {
212
+ return initialCondition;
213
+ } // not visible
214
+
215
+
216
+ return !initialCondition;
217
+ });
218
+
219
+ _defineProperty(this, "_isAnswered", q => {
220
+ const answer = this._getAnswerFor(q);
221
+
222
+ if (q.class === MainQuestionClassType) {
223
+ if (!q.mandatory) return true;
224
+ if (!answer) return false;
225
+ if (!this._hasValue(answer)) return false;
226
+ if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
227
+ return true;
228
+ } // check parent rules ...
229
+
230
+
231
+ for (let ruleId of q.parent_rules) {
232
+ if (!this._isSubQuestionVisible(this.rules[ruleId])) // if question is not visible skip it
233
+ continue;
234
+ if (!q.mandatory) return true;
235
+ if (!answer) return false;
236
+ if (!this._hasValue(answer)) return false;
237
+ if (this._allowsValues(q) && !this._allowsValue(q, answer)) return false;
238
+ return true;
239
+ }
240
+
241
+ return true;
242
+ });
243
+
244
+ _defineProperty(this, "_checkQuestion", q => {
245
+ let res = this._isAnswered(q);
246
+
247
+ if (q.hasOwnProperty('sub_question_rules')) for (let rule of q.sub_question_rules) {
248
+ // check recursive all the tree till leaves ...
249
+ res = res && this._checkQuestion(rule.sub_question);
250
+ }
251
+ return res;
252
+ });
253
+
254
+ _defineProperty(this, "_formatQuestionAnswer", question => {
255
+ var _this$originalAnswers;
256
+
257
+ let res = {};
258
+ let userAnswer = (_this$originalAnswers = this.originalAnswers.find(a => a.question_id === question.id)) === null || _this$originalAnswers === void 0 ? void 0 : _this$originalAnswers.value;
259
+
260
+ if (userAnswer) {
261
+ if (question.type === CheckBoxQuestionType) userAnswer = userAnswer === 'false' ? false : !!userAnswer;
262
+ if (question.type === RadioButtonListQuestionType || question.type === ComboBoxQuestionType) userAnswer = parseInt(userAnswer);
263
+ if (question.type === CheckBoxListQuestionType) userAnswer = userAnswer.split(',').map(ansVal => parseInt(ansVal)) || [];
264
+ }
265
+
266
+ res[question.name] = userAnswer || '';
267
+ if (question.hasOwnProperty('sub_question_rules')) for (let rule of question.sub_question_rules) {
268
+ // check recursive all the tree till leaves ...
269
+ let res1 = this._formatQuestionAnswer(rule.sub_question);
270
+
271
+ res = _objectSpread(_objectSpread({}, res), res1);
272
+ }
273
+ return res;
274
+ });
275
+
276
+ _defineProperty(this, "formatAnswers", () => {
277
+ let res = {};
278
+ this.questions.forEach(q => {
279
+ let res1 = this._formatQuestionAnswer(q);
280
+
281
+ res = _objectSpread(_objectSpread({}, res), res1);
282
+ });
283
+ return res;
284
+ });
285
+
286
+ _defineProperty(this, "completed", () => {
287
+ let res = true;
288
+
289
+ for (let q of this.questions) {
290
+ res = res && this._checkQuestion(q);
291
+ }
292
+
293
+ return res;
294
+ });
295
+
296
+ _defineProperty(this, "getQuestionByName", name => {
297
+ return this.questionByName[name] || null;
298
+ });
299
+
300
+ _defineProperty(this, "getQuestionById", id => {
301
+ return this.questionById[parseInt(id)] || null;
302
+ });
303
+
304
+ this.questions = questions;
305
+ this.originalAnswers = answers;
306
+ this.answers = []; // map answers to associate array
307
+
308
+ for (let a of this.originalAnswers) this.answers[a.question_id] = a;
309
+
310
+ this.questionByName = {};
311
+ this.questionById = {}; // associative array ( rule id , rule);
312
+
313
+ this.rules = {};
314
+
315
+ this._parseQuestions();
316
+ }
317
+
318
+ }
319
+
320
+ /***/ })
321
+
322
+ /******/ });
323
+ });
324
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL29wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvbi93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9vcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb24vLi9zcmMvdXRpbHMvcXVlc3Rpb25zLXNldC5qcyJdLCJuYW1lcyI6WyJDaGVja0JveFF1ZXN0aW9uVHlwZSIsIkNvbWJvQm94UXVlc3Rpb25UeXBlIiwiQ2hlY2tCb3hMaXN0UXVlc3Rpb25UeXBlIiwiUmFkaW9CdXR0b25MaXN0UXVlc3Rpb25UeXBlIiwiQWxsb3dlZE11bHRpcGxlVmFsdWVRdWVzdGlvblR5cGUiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9BbmQiLCJBbnN3ZXJWYWx1ZXNPcGVyYXRvcl9PciIsIlZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwiLCJWaXNpYmlsaXR5Q29uZGl0aW9uX05vdEVxdWFsIiwiVmlzaWJpbGl0eV9WaXNpYmxlIiwiTWFpblF1ZXN0aW9uQ2xhc3NUeXBlIiwiUXVlc3Rpb25zU2V0IiwiY29uc3RydWN0b3IiLCJxdWVzdGlvbnMiLCJhbnN3ZXJzIiwicSIsInF1ZXN0aW9uQnlOYW1lIiwibmFtZSIsInF1ZXN0aW9uQnlJZCIsInBhcnNlSW50IiwiaWQiLCJoYXNPd25Qcm9wZXJ0eSIsInIiLCJzdWJfcXVlc3Rpb25fcnVsZXMiLCJydWxlcyIsIl9wYXJzZVF1ZXN0aW9uIiwic3ViX3F1ZXN0aW9uIiwiaW5jbHVkZXMiLCJ0eXBlIiwiYW5zd2VyIiwidmFsdWUiLCJzcGxpdCIsIm1hcCIsInYiLCJhdiIsInZhbHVlcyIsImUiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJhIiwidmFsIiwicnVsZSIsImluaXRpYWxDb25kaXRpb24iLCJhbnN3ZXJfdmFsdWVzX29wZXJhdG9yIiwicGFyZW50UXVlc3Rpb25BbnN3ZXIiLCJfZ2V0QW5zd2VyRm9yIiwicGFyZW50X3F1ZXN0aW9uX2lkIiwidmlzaWJpbGl0eV9jb25kaXRpb24iLCJhbnN3ZXJWYWx1ZSIsImFuc3dlcl92YWx1ZXMiLCJfYW5zd2VyQ29udGFpbnMiLCJ2aXNpYmlsaXR5IiwiY2xhc3MiLCJtYW5kYXRvcnkiLCJfaGFzVmFsdWUiLCJfYWxsb3dzVmFsdWVzIiwiX2FsbG93c1ZhbHVlIiwicnVsZUlkIiwicGFyZW50X3J1bGVzIiwiX2lzU3ViUXVlc3Rpb25WaXNpYmxlIiwicmVzIiwiX2lzQW5zd2VyZWQiLCJfY2hlY2tRdWVzdGlvbiIsInF1ZXN0aW9uIiwidXNlckFuc3dlciIsIm9yaWdpbmFsQW5zd2VycyIsImZpbmQiLCJxdWVzdGlvbl9pZCIsImFuc1ZhbCIsInJlczEiLCJfZm9ybWF0UXVlc3Rpb25BbnN3ZXIiLCJmb3JFYWNoIiwiX3BhcnNlUXVlc3Rpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztRQ1ZBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNB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QWI7TUFDSDs7TUFDRCxPQUFPNkMsR0FBUDtJQUNILENBcEtvQzs7SUFBQSwyQ0FzS2hCM0MsSUFBRCxJQUFVO01BQzFCLE9BQU8sS0FBS0QsY0FBTCxDQUFvQkMsSUFBcEIsS0FBNkIsSUFBcEM7SUFDSCxDQXhLb0M7O0lBQUEseUNBMEtsQkcsRUFBRCxJQUFRO01BQ3RCLE9BQU8sS0FBS0YsWUFBTCxDQUFrQkMsUUFBUSxDQUFDQyxFQUFELENBQTFCLEtBQW1DLElBQTFDO0lBQ0gsQ0E1S29DOztJQUNqQyxLQUFLUCxTQUFMLEdBQWlCQSxTQUFqQjtJQUNBLEtBQUtvRCxlQUFMLEdBQXVCbkQsT0FBdkI7SUFDQSxLQUFLQSxPQUFMLEdBQWUsRUFBZixDQUhpQyxDQUlqQzs7SUFDQSxLQUFLLElBQUl5QixDQUFULElBQWMsS0FBSzBCLGVBQW5CLEVBQ0ksS0FBS25ELE9BQUwsQ0FBYXlCLENBQUMsQ0FBQzRCLFdBQWYsSUFBOEI1QixDQUE5Qjs7SUFDSixLQUFLdkIsY0FBTCxHQUFzQixFQUF0QjtJQUNBLEtBQUtFLFlBQUwsR0FBb0IsRUFBcEIsQ0FSaUMsQ0FTakM7O0lBQ0EsS0FBS00sS0FBTCxHQUFhLEVBQWI7O0lBQ0EsS0FBS2dELGVBQUw7RUFDSDs7QUFkNkIsQyIsImZpbGUiOiJ1dGlscy9xdWVzdGlvbnMtc2V0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJvcGVuc3RhY2stdWljb3JlLWZvdW5kYXRpb25cIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wib3BlbnN0YWNrLXVpY29yZS1mb3VuZGF0aW9uXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm9wZW5zdGFjay11aWNvcmUtZm91bmRhdGlvblwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL3V0aWxzL3F1ZXN0aW9ucy1zZXQuanNcIik7XG4iLCJleHBvcnQgY29uc3QgQ2hlY2tCb3hRdWVzdGlvblR5cGUgPSAnQ2hlY2tCb3gnO1xuZXhwb3J0IGNvbnN0IENvbWJvQm94UXVlc3Rpb25UeXBlID0gJ0NvbWJvQm94J1xuZXhwb3J0IGNvbnN0IENoZWNrQm94TGlzdFF1ZXN0aW9uVHlwZSA9ICdDaGVja0JveExpc3QnO1xuZXhwb3J0IGNvbnN0IFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZSA9ICdSYWRpb0J1dHRvbkxpc3QnO1xuZXhwb3J0IGNvbnN0IEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlID0gW0NvbWJvQm94UXVlc3Rpb25UeXBlLCBDaGVja0JveExpc3RRdWVzdGlvblR5cGUsIFJhZGlvQnV0dG9uTGlzdFF1ZXN0aW9uVHlwZV07XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfQW5kID0gJ0FuZCc7XG5leHBvcnQgY29uc3QgQW5zd2VyVmFsdWVzT3BlcmF0b3JfT3IgPSAnT3InO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fRXF1YWwgPSAnRXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlDb25kaXRpb25fTm90RXF1YWwgPSAnTm90RXF1YWwnO1xuZXhwb3J0IGNvbnN0IFZpc2liaWxpdHlfVmlzaWJsZSA9ICdWaXNpYmxlJztcbmV4cG9ydCBjb25zdCBNYWluUXVlc3Rpb25DbGFzc1R5cGUgPSAnTWFpblF1ZXN0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlc3Rpb25zU2V0IHtcblxuICAgIGNvbnN0cnVjdG9yKHF1ZXN0aW9ucywgYW5zd2VycyA9IFtdKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25zID0gcXVlc3Rpb25zO1xuICAgICAgICB0aGlzLm9yaWdpbmFsQW5zd2VycyA9IGFuc3dlcnNcbiAgICAgICAgdGhpcy5hbnN3ZXJzID0gW107XG4gICAgICAgIC8vIG1hcCBhbnN3ZXJzIHRvIGFzc29jaWF0ZSBhcnJheVxuICAgICAgICBmb3IgKGxldCBhIG9mIHRoaXMub3JpZ2luYWxBbnN3ZXJzKVxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJzW2EucXVlc3Rpb25faWRdID0gYTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkJ5TmFtZSA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkID0ge31cbiAgICAgICAgLy8gYXNzb2NpYXRpdmUgYXJyYXkgKCBydWxlIGlkICwgcnVsZSk7XG4gICAgICAgIHRoaXMucnVsZXMgPSB7fTtcbiAgICAgICAgdGhpcy5fcGFyc2VRdWVzdGlvbnMoKTtcbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeU5hbWVbcS5uYW1lXSA9IHE7XG4gICAgICAgIHRoaXMucXVlc3Rpb25CeUlkW3BhcnNlSW50KHEuaWQpXSA9IHE7XG4gICAgICAgIGlmKHEuaGFzT3duUHJvcGVydHkoJ3N1Yl9xdWVzdGlvbl9ydWxlcycpKVxuICAgICAgICAgICAgZm9yIChsZXQgciBvZiBxLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIHRoaXMucnVsZXNbcGFyc2VJbnQoci5pZCldID0gcjtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJzZVF1ZXN0aW9uKHIuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICB9XG5cbiAgICBfcGFyc2VRdWVzdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGZvciAobGV0IHEgb2YgdGhpcy5xdWVzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuX3BhcnNlUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfYWxsb3dzVmFsdWVzID0gKHEpID0+IHtcbiAgICAgICAgcmV0dXJuIEFsbG93ZWRNdWx0aXBsZVZhbHVlUXVlc3Rpb25UeXBlLmluY2x1ZGVzKHEudHlwZSk7XG4gICAgfVxuXG4gICAgX2FsbG93c1ZhbHVlID0gKHEsIGFuc3dlcikgPT4ge1xuICAgICAgICBsZXQgdmFsdWUgPSBhbnN3ZXIudmFsdWUuc3BsaXQoJywnKS5tYXAodiA9PiBwYXJzZUludCh2KSk7XG4gICAgICAgIGZvciAobGV0IGF2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXEudmFsdWVzLm1hcChlID0+IGUuaWQpLmluY2x1ZGVzKGF2KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2dldEFuc3dlckZvciA9IChxKSA9PiB7XG4gICAgICAgIGxldCBpZCA9IE51bWJlci5pc0ludGVnZXIocSkgPyBxIDogcS5pZDtcbiAgICAgICAgbGV0IGEgPSB0aGlzLmFuc3dlcnNbaWRdIHx8IG51bGw7XG4gICAgICAgIHJldHVybiBhID8gYSA6IG51bGw7XG4gICAgfVxuXG4gICAgX2hhc1ZhbHVlID0gKGFuc3dlcikgPT4ge1xuICAgICAgICByZXR1cm4gYW5zd2VyLnZhbHVlICE9PSAnJztcbiAgICB9XG5cbiAgICBfYW5zd2VyQ29udGFpbnMgPSAoYW5zd2VyLCB2YWwpID0+IHtcbiAgICAgICAgcmV0dXJuIGFuc3dlci52YWx1ZS5zcGxpdCgnLCcpLmluY2x1ZGVzKHZhbCk7XG4gICAgfVxuXG4gICAgX2lzU3ViUXVlc3Rpb25WaXNpYmxlID0gKHJ1bGUpID0+IHtcbiAgICAgICAgbGV0IGluaXRpYWxDb25kaXRpb24gPSBydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgY29uc3QgcGFyZW50UXVlc3Rpb25BbnN3ZXIgPSB0aGlzLl9nZXRBbnN3ZXJGb3IocnVsZS5wYXJlbnRfcXVlc3Rpb25faWQpO1xuICAgICAgICBpZiAoIXBhcmVudFF1ZXN0aW9uQW5zd2VyKSB7XG4gICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gcnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbiA9PT0gVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbCA/IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN3aXRjaCAocnVsZS52aXNpYmlsaXR5X2NvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9FcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiB0aGlzLl9hbnN3ZXJDb250YWlucyhwYXJlbnRRdWVzdGlvbkFuc3dlciwgYW5zd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxDb25kaXRpb24gPSBpbml0aWFsQ29uZGl0aW9uIHx8IHRoaXMuX2Fuc3dlckNvbnRhaW5zKHBhcmVudFF1ZXN0aW9uQW5zd2VyLCBhbnN3ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVmlzaWJpbGl0eUNvbmRpdGlvbl9Ob3RFcXVhbDoge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBhbnN3ZXJWYWx1ZSBvZiBydWxlLmFuc3dlcl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChydWxlLmFuc3dlcl92YWx1ZXNfb3BlcmF0b3IgPT09IEFuc3dlclZhbHVlc09wZXJhdG9yX0FuZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiAmJiAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsQ29uZGl0aW9uID0gaW5pdGlhbENvbmRpdGlvbiB8fCAhdGhpcy5fYW5zd2VyQ29udGFpbnMocGFyZW50UXVlc3Rpb25BbnN3ZXIsIGFuc3dlclZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWwgdmlzaWJpbGl0eSBjaGVja1xuICAgICAgICBpZiAocnVsZS52aXNpYmlsaXR5ID09PSBWaXNpYmlsaXR5X1Zpc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbml0aWFsQ29uZGl0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdCB2aXNpYmxlXG4gICAgICAgIHJldHVybiAhaW5pdGlhbENvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBfaXNBbnN3ZXJlZCA9IChxKSA9PiB7XG4gICAgICAgIGNvbnN0IGFuc3dlciA9IHRoaXMuX2dldEFuc3dlckZvcihxKTtcblxuICAgICAgICBpZiAocS5jbGFzcyA9PT0gTWFpblF1ZXN0aW9uQ2xhc3NUeXBlKSB7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBwYXJlbnQgcnVsZXMgLi4uXG4gICAgICAgIGZvciAobGV0IHJ1bGVJZCBvZiBxLnBhcmVudF9ydWxlcykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N1YlF1ZXN0aW9uVmlzaWJsZSh0aGlzLnJ1bGVzW3J1bGVJZF0pKSAvLyBpZiBxdWVzdGlvbiBpcyBub3QgdmlzaWJsZSBza2lwIGl0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoIXEubWFuZGF0b3J5KSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghYW5zd2VyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2hhc1ZhbHVlKGFuc3dlcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9hbGxvd3NWYWx1ZXMocSkgJiYgIXRoaXMuX2FsbG93c1ZhbHVlKHEsIGFuc3dlcikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBfY2hlY2tRdWVzdGlvbiA9IChxKSA9PiB7XG4gICAgICAgIGxldCByZXMgPSB0aGlzLl9pc0Fuc3dlcmVkKHEpO1xuICAgICAgICBpZihxLmhhc093blByb3BlcnR5KCdzdWJfcXVlc3Rpb25fcnVsZXMnKSlcbiAgICAgICAgICAgIGZvciAobGV0IHJ1bGUgb2YgcS5zdWJfcXVlc3Rpb25fcnVsZXMpIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVjayByZWN1cnNpdmUgYWxsIHRoZSB0cmVlIHRpbGwgbGVhdmVzIC4uLlxuICAgICAgICAgICAgICAgIHJlcyA9IHJlcyAmJiB0aGlzLl9jaGVja1F1ZXN0aW9uKHJ1bGUuc3ViX3F1ZXN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBfZm9ybWF0UXVlc3Rpb25BbnN3ZXIgPSAocXVlc3Rpb24pID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9O1xuICAgICAgICBsZXQgdXNlckFuc3dlciA9IHRoaXMub3JpZ2luYWxBbnN3ZXJzLmZpbmQoYSA9PiBhLnF1ZXN0aW9uX2lkID09PSBxdWVzdGlvbi5pZCk/LnZhbHVlO1xuXG4gICAgICAgIGlmKHVzZXJBbnN3ZXIpIHtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBDaGVja0JveFF1ZXN0aW9uVHlwZSkgdXNlckFuc3dlciA9IHVzZXJBbnN3ZXIgPT09ICdmYWxzZScgPyBmYWxzZSA6ICEhdXNlckFuc3dlcjtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBSYWRpb0J1dHRvbkxpc3RRdWVzdGlvblR5cGUgfHwgcXVlc3Rpb24udHlwZSA9PT0gQ29tYm9Cb3hRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSBwYXJzZUludCh1c2VyQW5zd2VyKTtcbiAgICAgICAgICAgIGlmIChxdWVzdGlvbi50eXBlID09PSBDaGVja0JveExpc3RRdWVzdGlvblR5cGUpIHVzZXJBbnN3ZXIgPSB1c2VyQW5zd2VyLnNwbGl0KCcsJykubWFwKGFuc1ZhbCA9PiBwYXJzZUludChhbnNWYWwpKSB8fCBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc1txdWVzdGlvbi5uYW1lXSA9ICB1c2VyQW5zd2VyIHx8ICcnO1xuICAgICAgICBpZihxdWVzdGlvbi5oYXNPd25Qcm9wZXJ0eSgnc3ViX3F1ZXN0aW9uX3J1bGVzJykpXG4gICAgICAgICAgICBmb3IgKGxldCBydWxlIG9mIHF1ZXN0aW9uLnN1Yl9xdWVzdGlvbl9ydWxlcykge1xuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHJlY3Vyc2l2ZSBhbGwgdGhlIHRyZWUgdGlsbCBsZWF2ZXMgLi4uXG4gICAgICAgICAgICAgICAgbGV0IHJlczEgPSB0aGlzLl9mb3JtYXRRdWVzdGlvbkFuc3dlcihydWxlLnN1Yl9xdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgcmVzID0gey4uLnJlcywgLi4ucmVzMX07XG4gICAgICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZm9ybWF0QW5zd2VycyA9ICgpID0+IHtcbiAgICAgICAgbGV0IHJlcyA9IHt9XG4gICAgICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2gocSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzMSA9IHRoaXMuX2Zvcm1hdFF1ZXN0aW9uQW5zd2VyKHEpO1xuICAgICAgICAgICAgcmVzID0gey4uLnJlcywuLi5yZXMxfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY29tcGxldGVkID0gKCkgPT4ge1xuICAgICAgICBsZXQgcmVzID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgcSBvZiB0aGlzLnF1ZXN0aW9ucykge1xuICAgICAgICAgICAgcmVzID0gcmVzICYmIHRoaXMuX2NoZWNrUXVlc3Rpb24ocSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBnZXRRdWVzdGlvbkJ5TmFtZSA9IChuYW1lKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlOYW1lW25hbWVdIHx8IG51bGw7XG4gICAgfVxuXG4gICAgZ2V0UXVlc3Rpb25CeUlkID0gKGlkKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uQnlJZFtwYXJzZUludChpZCldIHx8IG51bGw7XG4gICAgfVxufSJdLCJzb3VyY2VSb290IjoiIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openstack-uicore-foundation",
3
- "version": "3.0.82",
3
+ "version": "3.0.83",
4
4
  "description": "ui reactjs components for openstack marketing site",
5
5
  "main": "lib/openstack-uicore-foundation.js",
6
6
  "scripts": {