@vacayou/tripfusion-js-sdk 1.3.0 → 1.9.0

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.
package/dist/main.js DELETED
@@ -1,1359 +0,0 @@
1
- /******/ (() => { // webpackBootstrap
2
- /******/ "use strict";
3
- /******/ var __webpack_modules__ = ({
4
-
5
- /***/ "./node_modules/css-loader/dist/cjs.js!./src/styles.css":
6
- /*!**************************************************************!*\
7
- !*** ./node_modules/css-loader/dist/cjs.js!./src/styles.css ***!
8
- \**************************************************************/
9
- /***/ ((module, __webpack_exports__, __webpack_require__) => {
10
-
11
- __webpack_require__.r(__webpack_exports__);
12
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
13
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
14
- /* harmony export */ });
15
- /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/sourceMaps.js */ "./node_modules/css-loader/dist/runtime/sourceMaps.js");
16
- /* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);
17
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js");
18
- /* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);
19
- // Imports
20
-
21
-
22
- var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));
23
- ___CSS_LOADER_EXPORT___.push([module.id, "@import url(https://use.typekit.net/sag8ceb.css);"]);
24
- // Module
25
- ___CSS_LOADER_EXPORT___.push([module.id, `#tripfusion-loader {
26
- color: white;
27
- margin-right: -50%;
28
- position: absolute;
29
- top: 50%;
30
- left: 50%;
31
- font-family: futura-lt-w01-book, futura-lt-w05-book, Arial, Helvetica, sans-serif;
32
- transform: translate(-50%, -50%);
33
- }
34
- #tripfusion-loader span {
35
- font-weight: bold;
36
- font-size: 1.3rem;
37
- }
38
-
39
- #tripfusion-resume-button {
40
- position: fixed;
41
- overflow: hidden;
42
- cursor: pointer;
43
- display: flex;
44
- justify-content: space-evenly;
45
- align-items: center;
46
- padding: 12px 32px;
47
- box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25), 0px 4px 4px rgba(0, 0, 0, 0.1);
48
- right: 30px;
49
- z-index: 100000000000;
50
- bottom: 40px;
51
- border: none;
52
- transform: translateX(400px);
53
- background-color: #092b43;
54
- border-radius: 23px;
55
- }
56
-
57
- #tripfusion-resume-button span {
58
- display: block !important;
59
- font-family: sweet-sans-pro, sans-serif;
60
- font-size: 1rem;
61
- font-weight: 700;
62
- line-height: 1.2;
63
- letter-spacing: 1.5px;
64
- text-transform: uppercase !important;
65
- color: white !important;
66
- }
67
-
68
- #tripfusion-widget-wrapper {
69
- background: rgba(0, 0, 0, 0);
70
- position: fixed;
71
- top: 0;
72
- right: 0;
73
- width: 100%;
74
- transition: background 0.5s ease-out;
75
- }
76
-
77
- #tripfusion-widget {
78
- position: absolute;
79
- width: 100%;
80
- height: 100%;
81
- top: 0px;
82
- right: 0px;
83
- }
84
-
85
- #tripfusion-widget-inner-wrapper {
86
- position: fixed;
87
- display: flex;
88
- flex-direction: column;
89
- min-width: 320px;
90
- width: 100%;
91
- height: 100%;
92
- right: 0px;
93
- bottom: 0px;
94
- background: white;
95
- border-radius: 8px;
96
- box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2);
97
- font-family: "Roboto", "Helvetica", "Arial", sans-serif;
98
- font-weight: 400;
99
- font-size: 1rem;
100
- line-height: 1.5;
101
- letter-spacing: 0.00938em;
102
- }
103
-
104
- @media (min-width: 768px) {
105
- #tripfusion-widget-inner-wrapper {
106
- height: calc(100% - 40px);
107
- right: 20px;
108
- bottom: 20px;
109
- width: 500px;
110
- }
111
- }
112
-
113
- #tripfusion-widget-header {
114
- height: 60px;
115
- background-color: #092b43;
116
- border-bottom: 1px solid #f1f1f1;
117
- padding: 0 16px 0 16px;
118
- display: flex;
119
- justify-content: space-between;
120
- align-items: center;
121
- color: white;
122
- }
123
-
124
- #tripfusion-widget-iframe {
125
- height: 100%;
126
- border: none;
127
- }
128
-
129
- #tripfusion-widget-header-title {
130
- font-family: sweet-sans-pro, sans-serif;
131
- line-height: 1.2;
132
- font-weight: 700;
133
- font-size: 1rem;
134
- letter-spacing: 1.5px;
135
- text-transform: uppercase;
136
- }
137
-
138
- #tripfusion-widget-close-button {
139
- overflow: hidden;
140
- position: relative;
141
- border: none;
142
- padding: 0;
143
- width: 2em;
144
- height: 2em;
145
- border-radius: 50%;
146
- background: transparent;
147
- font: inherit;
148
- text-indent: 100%;
149
- cursor: pointer;
150
-
151
- &:focus {
152
- outline: solid 0 transparent;
153
- background-color: rgba(0, 0, 0, 0.04);
154
- }
155
-
156
- &:hover {
157
- background-color: rgba(0, 0, 0, 0.04);
158
- }
159
-
160
- &:before,
161
- &:after {
162
- position: absolute;
163
- top: 25%;
164
- left: calc(50% - 0.0625em);
165
- width: 0.125em;
166
- height: 50%;
167
- border-radius: 0.125em;
168
- transform: rotate(45deg);
169
- background: currentcolor;
170
- color: white;
171
- content: "";
172
- }
173
-
174
- &:after {
175
- transform: rotate(-45deg);
176
- }
177
- }
178
-
179
- .dismiss-btn-slide-in {
180
- -webkit-transition: 500ms;
181
- -moz-transition: 500ms;
182
- transition: 500ms;
183
- transform: translateX(0) !important;
184
- }
185
-
186
- .dismiss-btn-slide-out {
187
- -webkit-transition: 500ms;
188
- -moz-transition: 500ms;
189
- transition: 500ms;
190
- transform: translateX(400px) !important;
191
- }
192
-
193
- .dismiss-btn-slide-out span {
194
- display: none;
195
- }
196
-
197
- .dismiss-btn-resize-in {
198
- width: 46px !important;
199
- height: 46px !important;
200
- transition: 500ms;
201
- right: 30px !important;
202
- }
203
-
204
- .dismiss-btn-resize-in span {
205
- display: none;
206
- }
207
-
208
- .dismiss-btn-resize-in:hover {
209
- width: 217px !important;
210
- height: 46px !important;
211
- transition: all 300ms linear;
212
- cursor: pointer;
213
- }
214
-
215
- .dismiss-btn-resize-in:hover span {
216
- display: inline;
217
- height: 20px !important;
218
- overflow: hidden;
219
- }
220
-
221
- .dismiss-btn-resize-out {
222
- width: 46px !important;
223
- height: 46px !important;
224
- transition: 500ms;
225
- right: -100px !important;
226
- }
227
-
228
- .slide-in {
229
- transform: translateX(100%);
230
- -webkit-transform: translateX(100%);
231
- animation: slide-in 0.8s forwards !important;
232
- -webkit-animation: slide-in 0.8s forwards !important;
233
- z-index: 1000000000000;
234
- }
235
-
236
- .slide-out {
237
- transform: translateX(100%);
238
- -webkit-transform: translateX(100%);
239
- animation: slide-out 1s forwards !important;
240
- -webkit-animation: slide-out 1s forwards !important;
241
- z-index: -1000000000000;
242
- }
243
-
244
- @media screen and (max-width: 495px) {
245
- .slide-in {
246
- transform: translateY(100%);
247
- -webkit-transform: translateY(100%);
248
- animation: slide-up 0.8s forwards !important;
249
- -webkit-animation: slide-up 0.8s forwards !important;
250
- z-index: 1000000000000;
251
- }
252
-
253
- .slide-out {
254
- transform: translateY(100%);
255
- -webkit-transform: translateY(100%);
256
- animation: slide-down 0.5s forwards !important;
257
- -webkit-animation: slide-down 1s forwards !important;
258
- z-index: -1000000000000;
259
- }
260
- }
261
-
262
- @keyframes slide-in {
263
- 100% {
264
- transform: translateX(0%);
265
- }
266
- }
267
-
268
- @-webkit-keyframes slide-in {
269
- 100% {
270
- -webkit-transform: translateX(0%);
271
- }
272
- }
273
-
274
- @keyframes slide-up {
275
- 100% {
276
- transform: translateY(0%);
277
- }
278
- }
279
-
280
- @-webkit-keyframes slide-up {
281
- 100% {
282
- -webkit-transform: translateY(0%);
283
- }
284
- }
285
-
286
- @keyframes slide-out {
287
- 0% {
288
- transform: translateX(0%);
289
- }
290
-
291
- 100% {
292
- transform: translateX(100%);
293
- }
294
- }
295
-
296
- @-webkit-keyframes slide-out {
297
- 0% {
298
- -webkit-transform: translateX(0%);
299
- }
300
-
301
- 100% {
302
- -webkit-transform: translateX(100%);
303
- }
304
- }
305
-
306
- @keyframes slide-down {
307
- 0% {
308
- transform: translateY(0%);
309
- }
310
-
311
- 100% {
312
- transform: translateY(100%);
313
- }
314
- }
315
-
316
- @-webkit-keyframes slide-down {
317
- 0% {
318
- -webkit-transform: translateY(0%);
319
- }
320
-
321
- 100% {
322
- -webkit-transform: translateY(100%);
323
- }
324
- }
325
- `, "",{"version":3,"sources":["webpack://./src/styles.css"],"names":[],"mappings":"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","sourcesContent":["@import url(\"https://use.typekit.net/sag8ceb.css\");\n\n#tripfusion-loader {\n color: white;\n margin-right: -50%;\n position: absolute;\n top: 50%;\n left: 50%;\n font-family: futura-lt-w01-book, futura-lt-w05-book, Arial, Helvetica, sans-serif;\n transform: translate(-50%, -50%);\n}\n#tripfusion-loader span {\n font-weight: bold;\n font-size: 1.3rem;\n}\n\n#tripfusion-resume-button {\n position: fixed;\n overflow: hidden;\n cursor: pointer;\n display: flex;\n justify-content: space-evenly;\n align-items: center;\n padding: 12px 32px;\n box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.25), 0px 4px 4px rgba(0, 0, 0, 0.1);\n right: 30px;\n z-index: 100000000000;\n bottom: 40px;\n border: none;\n transform: translateX(400px);\n background-color: #092b43;\n border-radius: 23px;\n}\n\n#tripfusion-resume-button span {\n display: block !important;\n font-family: sweet-sans-pro, sans-serif;\n font-size: 1rem;\n font-weight: 700;\n line-height: 1.2;\n letter-spacing: 1.5px;\n text-transform: uppercase !important;\n color: white !important;\n}\n\n#tripfusion-widget-wrapper {\n background: rgba(0, 0, 0, 0);\n position: fixed;\n top: 0;\n right: 0;\n width: 100%;\n transition: background 0.5s ease-out;\n}\n\n#tripfusion-widget {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0px;\n right: 0px;\n}\n\n#tripfusion-widget-inner-wrapper {\n position: fixed;\n display: flex;\n flex-direction: column;\n min-width: 320px;\n width: 100%;\n height: 100%;\n right: 0px;\n bottom: 0px;\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2);\n font-family: \"Roboto\", \"Helvetica\", \"Arial\", sans-serif;\n font-weight: 400;\n font-size: 1rem;\n line-height: 1.5;\n letter-spacing: 0.00938em;\n}\n\n@media (min-width: 768px) {\n #tripfusion-widget-inner-wrapper {\n height: calc(100% - 40px);\n right: 20px;\n bottom: 20px;\n width: 500px;\n }\n}\n\n#tripfusion-widget-header {\n height: 60px;\n background-color: #092b43;\n border-bottom: 1px solid #f1f1f1;\n padding: 0 16px 0 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n color: white;\n}\n\n#tripfusion-widget-iframe {\n height: 100%;\n border: none;\n}\n\n#tripfusion-widget-header-title {\n font-family: sweet-sans-pro, sans-serif;\n line-height: 1.2;\n font-weight: 700;\n font-size: 1rem;\n letter-spacing: 1.5px;\n text-transform: uppercase;\n}\n\n#tripfusion-widget-close-button {\n overflow: hidden;\n position: relative;\n border: none;\n padding: 0;\n width: 2em;\n height: 2em;\n border-radius: 50%;\n background: transparent;\n font: inherit;\n text-indent: 100%;\n cursor: pointer;\n\n &:focus {\n outline: solid 0 transparent;\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:hover {\n background-color: rgba(0, 0, 0, 0.04);\n }\n\n &:before,\n &:after {\n position: absolute;\n top: 25%;\n left: calc(50% - 0.0625em);\n width: 0.125em;\n height: 50%;\n border-radius: 0.125em;\n transform: rotate(45deg);\n background: currentcolor;\n color: white;\n content: \"\";\n }\n\n &:after {\n transform: rotate(-45deg);\n }\n}\n\n.dismiss-btn-slide-in {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(0) !important;\n}\n\n.dismiss-btn-slide-out {\n -webkit-transition: 500ms;\n -moz-transition: 500ms;\n transition: 500ms;\n transform: translateX(400px) !important;\n}\n\n.dismiss-btn-slide-out span {\n display: none;\n}\n\n.dismiss-btn-resize-in {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: 30px !important;\n}\n\n.dismiss-btn-resize-in span {\n display: none;\n}\n\n.dismiss-btn-resize-in:hover {\n width: 217px !important;\n height: 46px !important;\n transition: all 300ms linear;\n cursor: pointer;\n}\n\n.dismiss-btn-resize-in:hover span {\n display: inline;\n height: 20px !important;\n overflow: hidden;\n}\n\n.dismiss-btn-resize-out {\n width: 46px !important;\n height: 46px !important;\n transition: 500ms;\n right: -100px !important;\n}\n\n.slide-in {\n transform: translateX(100%);\n -webkit-transform: translateX(100%);\n animation: slide-in 0.8s forwards !important;\n -webkit-animation: slide-in 0.8s forwards !important;\n z-index: 1000000000000;\n}\n\n.slide-out {\n transform: translateX(100%);\n -webkit-transform: translateX(100%);\n animation: slide-out 1s forwards !important;\n -webkit-animation: slide-out 1s forwards !important;\n z-index: -1000000000000;\n}\n\n@media screen and (max-width: 495px) {\n .slide-in {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-up 0.8s forwards !important;\n -webkit-animation: slide-up 0.8s forwards !important;\n z-index: 1000000000000;\n }\n\n .slide-out {\n transform: translateY(100%);\n -webkit-transform: translateY(100%);\n animation: slide-down 0.5s forwards !important;\n -webkit-animation: slide-down 1s forwards !important;\n z-index: -1000000000000;\n }\n}\n\n@keyframes slide-in {\n 100% {\n transform: translateX(0%);\n }\n}\n\n@-webkit-keyframes slide-in {\n 100% {\n -webkit-transform: translateX(0%);\n }\n}\n\n@keyframes slide-up {\n 100% {\n transform: translateY(0%);\n }\n}\n\n@-webkit-keyframes slide-up {\n 100% {\n -webkit-transform: translateY(0%);\n }\n}\n\n@keyframes slide-out {\n 0% {\n transform: translateX(0%);\n }\n\n 100% {\n transform: translateX(100%);\n }\n}\n\n@-webkit-keyframes slide-out {\n 0% {\n -webkit-transform: translateX(0%);\n }\n\n 100% {\n -webkit-transform: translateX(100%);\n }\n}\n\n@keyframes slide-down {\n 0% {\n transform: translateY(0%);\n }\n\n 100% {\n transform: translateY(100%);\n }\n}\n\n@-webkit-keyframes slide-down {\n 0% {\n -webkit-transform: translateY(0%);\n }\n\n 100% {\n -webkit-transform: translateY(100%);\n }\n}\n"],"sourceRoot":""}]);
326
- // Exports
327
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
328
-
329
-
330
- /***/ }),
331
-
332
- /***/ "./node_modules/css-loader/dist/runtime/api.js":
333
- /*!*****************************************************!*\
334
- !*** ./node_modules/css-loader/dist/runtime/api.js ***!
335
- \*****************************************************/
336
- /***/ ((module) => {
337
-
338
-
339
-
340
- /*
341
- MIT License http://www.opensource.org/licenses/mit-license.php
342
- Author Tobias Koppers @sokra
343
- */
344
- module.exports = function (cssWithMappingToString) {
345
- var list = [];
346
-
347
- // return the list of modules as css string
348
- list.toString = function toString() {
349
- return this.map(function (item) {
350
- var content = "";
351
- var needLayer = typeof item[5] !== "undefined";
352
- if (item[4]) {
353
- content += "@supports (".concat(item[4], ") {");
354
- }
355
- if (item[2]) {
356
- content += "@media ".concat(item[2], " {");
357
- }
358
- if (needLayer) {
359
- content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {");
360
- }
361
- content += cssWithMappingToString(item);
362
- if (needLayer) {
363
- content += "}";
364
- }
365
- if (item[2]) {
366
- content += "}";
367
- }
368
- if (item[4]) {
369
- content += "}";
370
- }
371
- return content;
372
- }).join("");
373
- };
374
-
375
- // import a list of modules into the list
376
- list.i = function i(modules, media, dedupe, supports, layer) {
377
- if (typeof modules === "string") {
378
- modules = [[null, modules, undefined]];
379
- }
380
- var alreadyImportedModules = {};
381
- if (dedupe) {
382
- for (var k = 0; k < this.length; k++) {
383
- var id = this[k][0];
384
- if (id != null) {
385
- alreadyImportedModules[id] = true;
386
- }
387
- }
388
- }
389
- for (var _k = 0; _k < modules.length; _k++) {
390
- var item = [].concat(modules[_k]);
391
- if (dedupe && alreadyImportedModules[item[0]]) {
392
- continue;
393
- }
394
- if (typeof layer !== "undefined") {
395
- if (typeof item[5] === "undefined") {
396
- item[5] = layer;
397
- } else {
398
- item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}");
399
- item[5] = layer;
400
- }
401
- }
402
- if (media) {
403
- if (!item[2]) {
404
- item[2] = media;
405
- } else {
406
- item[1] = "@media ".concat(item[2], " {").concat(item[1], "}");
407
- item[2] = media;
408
- }
409
- }
410
- if (supports) {
411
- if (!item[4]) {
412
- item[4] = "".concat(supports);
413
- } else {
414
- item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}");
415
- item[4] = supports;
416
- }
417
- }
418
- list.push(item);
419
- }
420
- };
421
- return list;
422
- };
423
-
424
- /***/ }),
425
-
426
- /***/ "./node_modules/css-loader/dist/runtime/sourceMaps.js":
427
- /*!************************************************************!*\
428
- !*** ./node_modules/css-loader/dist/runtime/sourceMaps.js ***!
429
- \************************************************************/
430
- /***/ ((module) => {
431
-
432
-
433
-
434
- module.exports = function (item) {
435
- var content = item[1];
436
- var cssMapping = item[3];
437
- if (!cssMapping) {
438
- return content;
439
- }
440
- if (typeof btoa === "function") {
441
- var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));
442
- var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
443
- var sourceMapping = "/*# ".concat(data, " */");
444
- return [content].concat([sourceMapping]).join("\n");
445
- }
446
- return [content].join("\n");
447
- };
448
-
449
- /***/ }),
450
-
451
- /***/ "./src/styles.css":
452
- /*!************************!*\
453
- !*** ./src/styles.css ***!
454
- \************************/
455
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
456
-
457
- __webpack_require__.r(__webpack_exports__);
458
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
459
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
460
- /* harmony export */ });
461
- /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
462
- /* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
463
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ "./node_modules/style-loader/dist/runtime/styleDomAPI.js");
464
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);
465
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ "./node_modules/style-loader/dist/runtime/insertBySelector.js");
466
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);
467
- /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js");
468
- /* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);
469
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ "./node_modules/style-loader/dist/runtime/insertStyleElement.js");
470
- /* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);
471
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ "./node_modules/style-loader/dist/runtime/styleTagTransform.js");
472
- /* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);
473
- /* harmony import */ var _node_modules_css_loader_dist_cjs_js_styles_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!./styles.css */ "./node_modules/css-loader/dist/cjs.js!./src/styles.css");
474
-
475
-
476
-
477
-
478
-
479
-
480
-
481
-
482
-
483
-
484
-
485
- var options = {};
486
-
487
- options.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());
488
- options.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());
489
- options.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, "head");
490
- options.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());
491
- options.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());
492
-
493
- var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"], options);
494
-
495
-
496
-
497
-
498
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"] && _node_modules_css_loader_dist_cjs_js_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals ? _node_modules_css_loader_dist_cjs_js_styles_css__WEBPACK_IMPORTED_MODULE_6__["default"].locals : undefined);
499
-
500
-
501
- /***/ }),
502
-
503
- /***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
504
- /*!****************************************************************************!*\
505
- !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
506
- \****************************************************************************/
507
- /***/ ((module) => {
508
-
509
-
510
-
511
- var stylesInDOM = [];
512
- function getIndexByIdentifier(identifier) {
513
- var result = -1;
514
- for (var i = 0; i < stylesInDOM.length; i++) {
515
- if (stylesInDOM[i].identifier === identifier) {
516
- result = i;
517
- break;
518
- }
519
- }
520
- return result;
521
- }
522
- function modulesToDom(list, options) {
523
- var idCountMap = {};
524
- var identifiers = [];
525
- for (var i = 0; i < list.length; i++) {
526
- var item = list[i];
527
- var id = options.base ? item[0] + options.base : item[0];
528
- var count = idCountMap[id] || 0;
529
- var identifier = "".concat(id, " ").concat(count);
530
- idCountMap[id] = count + 1;
531
- var indexByIdentifier = getIndexByIdentifier(identifier);
532
- var obj = {
533
- css: item[1],
534
- media: item[2],
535
- sourceMap: item[3],
536
- supports: item[4],
537
- layer: item[5]
538
- };
539
- if (indexByIdentifier !== -1) {
540
- stylesInDOM[indexByIdentifier].references++;
541
- stylesInDOM[indexByIdentifier].updater(obj);
542
- } else {
543
- var updater = addElementStyle(obj, options);
544
- options.byIndex = i;
545
- stylesInDOM.splice(i, 0, {
546
- identifier: identifier,
547
- updater: updater,
548
- references: 1
549
- });
550
- }
551
- identifiers.push(identifier);
552
- }
553
- return identifiers;
554
- }
555
- function addElementStyle(obj, options) {
556
- var api = options.domAPI(options);
557
- api.update(obj);
558
- var updater = function updater(newObj) {
559
- if (newObj) {
560
- if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {
561
- return;
562
- }
563
- api.update(obj = newObj);
564
- } else {
565
- api.remove();
566
- }
567
- };
568
- return updater;
569
- }
570
- module.exports = function (list, options) {
571
- options = options || {};
572
- list = list || [];
573
- var lastIdentifiers = modulesToDom(list, options);
574
- return function update(newList) {
575
- newList = newList || [];
576
- for (var i = 0; i < lastIdentifiers.length; i++) {
577
- var identifier = lastIdentifiers[i];
578
- var index = getIndexByIdentifier(identifier);
579
- stylesInDOM[index].references--;
580
- }
581
- var newLastIdentifiers = modulesToDom(newList, options);
582
- for (var _i = 0; _i < lastIdentifiers.length; _i++) {
583
- var _identifier = lastIdentifiers[_i];
584
- var _index = getIndexByIdentifier(_identifier);
585
- if (stylesInDOM[_index].references === 0) {
586
- stylesInDOM[_index].updater();
587
- stylesInDOM.splice(_index, 1);
588
- }
589
- }
590
- lastIdentifiers = newLastIdentifiers;
591
- };
592
- };
593
-
594
- /***/ }),
595
-
596
- /***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
597
- /*!********************************************************************!*\
598
- !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
599
- \********************************************************************/
600
- /***/ ((module) => {
601
-
602
-
603
-
604
- var memo = {};
605
-
606
- /* istanbul ignore next */
607
- function getTarget(target) {
608
- if (typeof memo[target] === "undefined") {
609
- var styleTarget = document.querySelector(target);
610
-
611
- // Special case to return head of iframe instead of iframe itself
612
- if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
613
- try {
614
- // This will throw an exception if access to iframe is blocked
615
- // due to cross-origin restrictions
616
- styleTarget = styleTarget.contentDocument.head;
617
- } catch (e) {
618
- // istanbul ignore next
619
- styleTarget = null;
620
- }
621
- }
622
- memo[target] = styleTarget;
623
- }
624
- return memo[target];
625
- }
626
-
627
- /* istanbul ignore next */
628
- function insertBySelector(insert, style) {
629
- var target = getTarget(insert);
630
- if (!target) {
631
- throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
632
- }
633
- target.appendChild(style);
634
- }
635
- module.exports = insertBySelector;
636
-
637
- /***/ }),
638
-
639
- /***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
640
- /*!**********************************************************************!*\
641
- !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
642
- \**********************************************************************/
643
- /***/ ((module) => {
644
-
645
-
646
-
647
- /* istanbul ignore next */
648
- function insertStyleElement(options) {
649
- var element = document.createElement("style");
650
- options.setAttributes(element, options.attributes);
651
- options.insert(element, options.options);
652
- return element;
653
- }
654
- module.exports = insertStyleElement;
655
-
656
- /***/ }),
657
-
658
- /***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
659
- /*!**********************************************************************************!*\
660
- !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
661
- \**********************************************************************************/
662
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
663
-
664
-
665
-
666
- /* istanbul ignore next */
667
- function setAttributesWithoutAttributes(styleElement) {
668
- var nonce = true ? __webpack_require__.nc : 0;
669
- if (nonce) {
670
- styleElement.setAttribute("nonce", nonce);
671
- }
672
- }
673
- module.exports = setAttributesWithoutAttributes;
674
-
675
- /***/ }),
676
-
677
- /***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
678
- /*!***************************************************************!*\
679
- !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
680
- \***************************************************************/
681
- /***/ ((module) => {
682
-
683
-
684
-
685
- /* istanbul ignore next */
686
- function apply(styleElement, options, obj) {
687
- var css = "";
688
- if (obj.supports) {
689
- css += "@supports (".concat(obj.supports, ") {");
690
- }
691
- if (obj.media) {
692
- css += "@media ".concat(obj.media, " {");
693
- }
694
- var needLayer = typeof obj.layer !== "undefined";
695
- if (needLayer) {
696
- css += "@layer".concat(obj.layer.length > 0 ? " ".concat(obj.layer) : "", " {");
697
- }
698
- css += obj.css;
699
- if (needLayer) {
700
- css += "}";
701
- }
702
- if (obj.media) {
703
- css += "}";
704
- }
705
- if (obj.supports) {
706
- css += "}";
707
- }
708
- var sourceMap = obj.sourceMap;
709
- if (sourceMap && typeof btoa !== "undefined") {
710
- css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
711
- }
712
-
713
- // For old IE
714
- /* istanbul ignore if */
715
- options.styleTagTransform(css, styleElement, options.options);
716
- }
717
- function removeStyleElement(styleElement) {
718
- // istanbul ignore if
719
- if (styleElement.parentNode === null) {
720
- return false;
721
- }
722
- styleElement.parentNode.removeChild(styleElement);
723
- }
724
-
725
- /* istanbul ignore next */
726
- function domAPI(options) {
727
- if (typeof document === "undefined") {
728
- return {
729
- update: function update() {},
730
- remove: function remove() {}
731
- };
732
- }
733
- var styleElement = options.insertStyleElement(options);
734
- return {
735
- update: function update(obj) {
736
- apply(styleElement, options, obj);
737
- },
738
- remove: function remove() {
739
- removeStyleElement(styleElement);
740
- }
741
- };
742
- }
743
- module.exports = domAPI;
744
-
745
- /***/ }),
746
-
747
- /***/ "./node_modules/style-loader/dist/runtime/styleTagTransform.js":
748
- /*!*********************************************************************!*\
749
- !*** ./node_modules/style-loader/dist/runtime/styleTagTransform.js ***!
750
- \*********************************************************************/
751
- /***/ ((module) => {
752
-
753
-
754
-
755
- /* istanbul ignore next */
756
- function styleTagTransform(css, styleElement) {
757
- if (styleElement.styleSheet) {
758
- styleElement.styleSheet.cssText = css;
759
- } else {
760
- while (styleElement.firstChild) {
761
- styleElement.removeChild(styleElement.firstChild);
762
- }
763
- styleElement.appendChild(document.createTextNode(css));
764
- }
765
- }
766
- module.exports = styleTagTransform;
767
-
768
- /***/ }),
769
-
770
- /***/ "./src/const.ts":
771
- /*!**********************!*\
772
- !*** ./src/const.ts ***!
773
- \**********************/
774
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
775
-
776
- __webpack_require__.r(__webpack_exports__);
777
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
778
- /* harmony export */ BOOKING_MODE: () => (/* binding */ BOOKING_MODE),
779
- /* harmony export */ LOADER_ID: () => (/* binding */ LOADER_ID),
780
- /* harmony export */ RESUME_BUTTON_ID: () => (/* binding */ RESUME_BUTTON_ID),
781
- /* harmony export */ SDK_SCRIPT_ID: () => (/* binding */ SDK_SCRIPT_ID),
782
- /* harmony export */ TRIPFUSION_BASE_URL: () => (/* binding */ TRIPFUSION_BASE_URL),
783
- /* harmony export */ WIDGET_CLOSE_BUTTON_ID: () => (/* binding */ WIDGET_CLOSE_BUTTON_ID),
784
- /* harmony export */ WIDGET_HEADER_ID: () => (/* binding */ WIDGET_HEADER_ID),
785
- /* harmony export */ WIDGET_HEADER_TITLE_ID: () => (/* binding */ WIDGET_HEADER_TITLE_ID),
786
- /* harmony export */ WIDGET_ID: () => (/* binding */ WIDGET_ID),
787
- /* harmony export */ WIDGET_IFRAME_ID: () => (/* binding */ WIDGET_IFRAME_ID),
788
- /* harmony export */ WIDGET_INNER_WRAPPER_ID: () => (/* binding */ WIDGET_INNER_WRAPPER_ID),
789
- /* harmony export */ WIDGET_WRAPPER_ID: () => (/* binding */ WIDGET_WRAPPER_ID)
790
- /* harmony export */ });
791
- var TRIPFUSION_BASE_URL = false ? 0 : "http://localhost:3000/";
792
- var SDK_SCRIPT_ID = "tripfusion-sdk";
793
- var WIDGET_ID = "tripfusion-widget";
794
- var WIDGET_INNER_WRAPPER_ID = "tripfusion-widget-inner-wrapper";
795
- var WIDGET_HEADER_ID = "tripfusion-widget-header";
796
- var WIDGET_CLOSE_BUTTON_ID = "tripfusion-widget-close-button";
797
- var WIDGET_HEADER_TITLE_ID = "tripfusion-widget-header-title";
798
- var WIDGET_WRAPPER_ID = "tripfusion-widget-wrapper";
799
- var WIDGET_IFRAME_ID = "tripfusion-widget-iframe";
800
- var RESUME_BUTTON_ID = "tripfusion-resume-button";
801
- var LOADER_ID = "tripfusion-loader";
802
- var BOOKING_MODE = {
803
- normal: "normal",
804
- append: "append",
805
- };
806
-
807
-
808
- /***/ }),
809
-
810
- /***/ "./src/dom.ts":
811
- /*!********************!*\
812
- !*** ./src/dom.ts ***!
813
- \********************/
814
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
815
-
816
- __webpack_require__.r(__webpack_exports__);
817
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
818
- /* harmony export */ closeWidget: () => (/* binding */ closeWidget),
819
- /* harmony export */ displayLoadingOverlay: () => (/* binding */ displayLoadingOverlay),
820
- /* harmony export */ injectIframe: () => (/* binding */ injectIframe),
821
- /* harmony export */ injectResumeButton: () => (/* binding */ injectResumeButton),
822
- /* harmony export */ lockPageScroll: () => (/* binding */ lockPageScroll)
823
- /* harmony export */ });
824
- /* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./const */ "./src/const.ts");
825
- /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
826
-
827
-
828
- function displayLoadingOverlay() {
829
- var widgetWrapper = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_WRAPPER_ID);
830
- if (widgetWrapper) {
831
- var loadingDiv = document.createElement("div");
832
- loadingDiv.id = _const__WEBPACK_IMPORTED_MODULE_0__.LOADER_ID;
833
- loadingDiv.innerHTML = "Loading <span>TripFusion</span>";
834
- widgetWrapper.appendChild(loadingDiv);
835
- widgetWrapper.style.zIndex = "".concat(1e11);
836
- widgetWrapper.style.height = "100%";
837
- widgetWrapper.style.background = "rgba(0, 0, 0, .74)";
838
- lockPageScroll();
839
- }
840
- }
841
- function injectResumeButton() {
842
- try {
843
- var widget = document.createElement("div"), widgetWrapper = document.createElement("div"), widgetInnerWrapper = document.createElement("div"), widgetHeader = document.createElement("div"), widgetHeaderTitle = document.createElement("span"), widgetCloseButton = document.createElement("button"), resumeButton = document.createElement("button"), resumeButtonText = document.createElement("span");
844
- resumeButton.id = _const__WEBPACK_IMPORTED_MODULE_0__.RESUME_BUTTON_ID;
845
- resumeButtonText.innerHTML = "Complete your booking";
846
- resumeButton.appendChild(resumeButtonText);
847
- widget.id = _const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_ID;
848
- widget.style.display = "none";
849
- widgetWrapper.id = _const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_WRAPPER_ID;
850
- widgetInnerWrapper.id = _const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_INNER_WRAPPER_ID;
851
- widgetHeader.id = _const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_HEADER_ID;
852
- widgetCloseButton.id = _const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_CLOSE_BUTTON_ID;
853
- widgetCloseButton.addEventListener("click", closeWidget);
854
- widgetHeaderTitle.id = _const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_HEADER_TITLE_ID;
855
- widgetHeaderTitle.innerHTML = "Booking";
856
- widgetWrapper.appendChild(widget);
857
- widget.appendChild(widgetInnerWrapper);
858
- widgetInnerWrapper.appendChild(widgetHeader);
859
- widgetHeader.appendChild(widgetHeaderTitle);
860
- widgetHeader.appendChild(widgetCloseButton);
861
- document.body.appendChild(widgetWrapper);
862
- document.body.appendChild(resumeButton);
863
- }
864
- catch (error) {
865
- (0,_utils__WEBPACK_IMPORTED_MODULE_1__.logger)("Widget: Error injecting resume button: ".concat(error));
866
- console.error("Tripfusion: Error injecting resume button: ", error);
867
- }
868
- }
869
- function closeWidget() {
870
- try {
871
- var widget = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_ID), widgetWrapper = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_WRAPPER_ID), resumeButton = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.RESUME_BUTTON_ID);
872
- if (widget && widgetWrapper && resumeButton) {
873
- document.body.style.overflow = "initial";
874
- widget.setAttribute("class", "slide-out");
875
- widgetWrapper.style.background = "rgba(0, 0, 0, 0)";
876
- widget.style.display = "none";
877
- widgetWrapper.style.zIndex = "".concat(-1e11);
878
- resumeButton.setAttribute("class", "dismiss-btn-slide-in");
879
- resumeButton.focus();
880
- }
881
- }
882
- catch (error) {
883
- (0,_utils__WEBPACK_IMPORTED_MODULE_1__.logger)("Widget: Error closing widget: ".concat(error));
884
- console.error("Tripfusion: Error closing widget: ", error);
885
- }
886
- }
887
- function injectIframe(_a) {
888
- var config = _a.config, bookingData = _a.bookingData;
889
- try {
890
- var innerWrapper = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_INNER_WRAPPER_ID);
891
- if (innerWrapper) {
892
- var widgetIframe = document.createElement("iframe");
893
- var url = "".concat(_const__WEBPACK_IMPORTED_MODULE_0__.TRIPFUSION_BASE_URL).concat(config.client, "/").concat(config.propertyId);
894
- if (config.mode === _const__WEBPACK_IMPORTED_MODULE_0__.BOOKING_MODE.append && config.bookingId) {
895
- url += "/booking/".concat(config.bookingId, "/append");
896
- }
897
- if (bookingData) {
898
- var additionalParams = Object.entries(bookingData)
899
- .filter(function (_a) {
900
- var _ = _a[0], value = _a[1];
901
- return !!value;
902
- })
903
- .map(function (_a) {
904
- var key = _a[0], value = _a[1];
905
- return "".concat(key, "=").concat(value).toLowerCase();
906
- })
907
- .join("&");
908
- if (additionalParams) {
909
- url += "?".concat(additionalParams);
910
- }
911
- }
912
- widgetIframe.setAttribute("src", url);
913
- widgetIframe.id = _const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_IFRAME_ID;
914
- innerWrapper.appendChild(widgetIframe);
915
- }
916
- }
917
- catch (error) {
918
- (0,_utils__WEBPACK_IMPORTED_MODULE_1__.logger)("Widget: Error injecting iframe: ".concat(error));
919
- console.error("Tripfusion: Error injecting iframe: ", error);
920
- }
921
- }
922
- function lockPageScroll() {
923
- document.body.style.overflow = "hidden";
924
- }
925
-
926
-
927
- /***/ }),
928
-
929
- /***/ "./src/utils.ts":
930
- /*!**********************!*\
931
- !*** ./src/utils.ts ***!
932
- \**********************/
933
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
934
-
935
- __webpack_require__.r(__webpack_exports__);
936
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
937
- /* harmony export */ getParamsFromUrl: () => (/* binding */ getParamsFromUrl),
938
- /* harmony export */ logger: () => (/* binding */ logger)
939
- /* harmony export */ });
940
- /* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./const */ "./src/const.ts");
941
- var __assign = (undefined && undefined.__assign) || function () {
942
- __assign = Object.assign || function(t) {
943
- for (var s, i = 1, n = arguments.length; i < n; i++) {
944
- s = arguments[i];
945
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
946
- t[p] = s[p];
947
- }
948
- return t;
949
- };
950
- return __assign.apply(this, arguments);
951
- };
952
- var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
953
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
954
- return new (P || (P = Promise))(function (resolve, reject) {
955
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
956
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
957
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
958
- step((generator = generator.apply(thisArg, _arguments || [])).next());
959
- });
960
- };
961
- var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
962
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
963
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
964
- function verb(n) { return function (v) { return step([n, v]); }; }
965
- function step(op) {
966
- if (f) throw new TypeError("Generator is already executing.");
967
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
968
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
969
- if (y = 0, t) op = [op[0] & 2, t.value];
970
- switch (op[0]) {
971
- case 0: case 1: t = op; break;
972
- case 4: _.label++; return { value: op[1], done: false };
973
- case 5: _.label++; y = op[1]; op = [0]; continue;
974
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
975
- default:
976
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
977
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
978
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
979
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
980
- if (t[2]) _.ops.pop();
981
- _.trys.pop(); continue;
982
- }
983
- op = body.call(thisArg, _);
984
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
985
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
986
- }
987
- };
988
-
989
- function getParamsFromUrl(urlSearchParams) {
990
- var availableSearchParamsMap = {
991
- tripfusion: "tripfusion",
992
- client: "client",
993
- propertyid: "propertyId",
994
- mode: "mode",
995
- offerid: "offerId",
996
- bookingid: "bookingId",
997
- checkin: "checkIn",
998
- checkout: "checkOut",
999
- adults: "adults",
1000
- children: "children",
1001
- };
1002
- return Array.from(urlSearchParams.entries()).reduce(function (prev, _a) {
1003
- var _b;
1004
- var searchParamKey = _a[0], searchParamValue = _a[1];
1005
- return (__assign(__assign({}, prev), (_b = {}, _b[availableSearchParamsMap[searchParamKey.toLowerCase()]] = searchParamValue, _b)));
1006
- }, {});
1007
- }
1008
- function logger(message_1) {
1009
- return __awaiter(this, arguments, void 0, function (message, type) {
1010
- var url, payload, headers;
1011
- if (type === void 0) { type = "error"; }
1012
- return __generator(this, function (_a) {
1013
- url = "".concat(_const__WEBPACK_IMPORTED_MODULE_0__.TRIPFUSION_BASE_URL, "api/vacayou/log");
1014
- payload = {
1015
- message: message,
1016
- page: window.location.href,
1017
- };
1018
- headers = {
1019
- "content-type": "application/json",
1020
- };
1021
- return [2, fetch(url, {
1022
- method: "POST",
1023
- body: JSON.stringify({
1024
- type: type,
1025
- payload: payload,
1026
- }),
1027
- headers: headers,
1028
- })
1029
- .then(function (response) { return response.json(); })
1030
- .catch(function (error) {
1031
- console.log("Tripfusion: failed to log message: ".concat(error));
1032
- })];
1033
- });
1034
- });
1035
- }
1036
-
1037
-
1038
- /***/ })
1039
-
1040
- /******/ });
1041
- /************************************************************************/
1042
- /******/ // The module cache
1043
- /******/ var __webpack_module_cache__ = {};
1044
- /******/
1045
- /******/ // The require function
1046
- /******/ function __webpack_require__(moduleId) {
1047
- /******/ // Check if module is in cache
1048
- /******/ var cachedModule = __webpack_module_cache__[moduleId];
1049
- /******/ if (cachedModule !== undefined) {
1050
- /******/ return cachedModule.exports;
1051
- /******/ }
1052
- /******/ // Create a new module (and put it into the cache)
1053
- /******/ var module = __webpack_module_cache__[moduleId] = {
1054
- /******/ id: moduleId,
1055
- /******/ // no module.loaded needed
1056
- /******/ exports: {}
1057
- /******/ };
1058
- /******/
1059
- /******/ // Execute the module function
1060
- /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
1061
- /******/
1062
- /******/ // Return the exports of the module
1063
- /******/ return module.exports;
1064
- /******/ }
1065
- /******/
1066
- /************************************************************************/
1067
- /******/ /* webpack/runtime/compat get default export */
1068
- /******/ (() => {
1069
- /******/ // getDefaultExport function for compatibility with non-harmony modules
1070
- /******/ __webpack_require__.n = (module) => {
1071
- /******/ var getter = module && module.__esModule ?
1072
- /******/ () => (module['default']) :
1073
- /******/ () => (module);
1074
- /******/ __webpack_require__.d(getter, { a: getter });
1075
- /******/ return getter;
1076
- /******/ };
1077
- /******/ })();
1078
- /******/
1079
- /******/ /* webpack/runtime/define property getters */
1080
- /******/ (() => {
1081
- /******/ // define getter functions for harmony exports
1082
- /******/ __webpack_require__.d = (exports, definition) => {
1083
- /******/ for(var key in definition) {
1084
- /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
1085
- /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
1086
- /******/ }
1087
- /******/ }
1088
- /******/ };
1089
- /******/ })();
1090
- /******/
1091
- /******/ /* webpack/runtime/hasOwnProperty shorthand */
1092
- /******/ (() => {
1093
- /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
1094
- /******/ })();
1095
- /******/
1096
- /******/ /* webpack/runtime/make namespace object */
1097
- /******/ (() => {
1098
- /******/ // define __esModule on exports
1099
- /******/ __webpack_require__.r = (exports) => {
1100
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
1101
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1102
- /******/ }
1103
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
1104
- /******/ };
1105
- /******/ })();
1106
- /******/
1107
- /******/ /* webpack/runtime/nonce */
1108
- /******/ (() => {
1109
- /******/ __webpack_require__.nc = undefined;
1110
- /******/ })();
1111
- /******/
1112
- /************************************************************************/
1113
- var __webpack_exports__ = {};
1114
- /*!**********************!*\
1115
- !*** ./src/index.ts ***!
1116
- \**********************/
1117
- __webpack_require__.r(__webpack_exports__);
1118
- /* harmony import */ var _const__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./const */ "./src/const.ts");
1119
- /* harmony import */ var _dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom */ "./src/dom.ts");
1120
- /* harmony import */ var _styles_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./styles.css */ "./src/styles.css");
1121
- /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
1122
- var __assign = (undefined && undefined.__assign) || function () {
1123
- __assign = Object.assign || function(t) {
1124
- for (var s, i = 1, n = arguments.length; i < n; i++) {
1125
- s = arguments[i];
1126
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
1127
- t[p] = s[p];
1128
- }
1129
- return t;
1130
- };
1131
- return __assign.apply(this, arguments);
1132
- };
1133
-
1134
-
1135
-
1136
-
1137
- var client = null;
1138
- var propertyId = null;
1139
- var bookingContext = null;
1140
- var isIframeReady = false;
1141
- function addLinkEventListeners() {
1142
- document.querySelectorAll("a").forEach(function (linkElement) {
1143
- linkElement.addEventListener("click", handleLinkClick);
1144
- });
1145
- }
1146
- function handleLinkClick(event) {
1147
- var _a, _b;
1148
- try {
1149
- var target = event.target;
1150
- if (target.tagName !== "A" && ((_a = target.parentNode) === null || _a === void 0 ? void 0 : _a.tagName) === "A") {
1151
- target.href = target.parentNode.href;
1152
- }
1153
- var linkHref = target.href || "";
1154
- if (!linkHref.includes("?")) {
1155
- return;
1156
- }
1157
- var urlParams = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getParamsFromUrl)(new URLSearchParams(linkHref.substring(linkHref.indexOf("?"))));
1158
- if (urlParams.tripfusion === "true") {
1159
- event.preventDefault();
1160
- book({
1161
- config: {
1162
- client: (_b = urlParams.client) !== null && _b !== void 0 ? _b : client,
1163
- propertyId: urlParams.propertyId ? +urlParams.propertyId : propertyId,
1164
- mode: urlParams.mode === _const__WEBPACK_IMPORTED_MODULE_0__.BOOKING_MODE.append ? _const__WEBPACK_IMPORTED_MODULE_0__.BOOKING_MODE.append : _const__WEBPACK_IMPORTED_MODULE_0__.BOOKING_MODE.normal,
1165
- bookingId: (urlParams === null || urlParams === void 0 ? void 0 : urlParams.bookingId) && (urlParams === null || urlParams === void 0 ? void 0 : urlParams.mode) === _const__WEBPACK_IMPORTED_MODULE_0__.BOOKING_MODE.append ? +urlParams.bookingId : null,
1166
- },
1167
- bookingData: {
1168
- offerId: urlParams.offerId ? +urlParams.offerId : undefined,
1169
- checkIn: urlParams.checkIn,
1170
- checkOut: urlParams.checkOut,
1171
- adults: urlParams.adults ? +urlParams.adults : undefined,
1172
- children: urlParams.children ? urlParams.children.split(",").map(function (age) { return +age; }) : undefined,
1173
- },
1174
- });
1175
- }
1176
- }
1177
- catch (error) {
1178
- (0,_utils__WEBPACK_IMPORTED_MODULE_3__.logger)("Widget: Error in link click handler: ".concat(error));
1179
- console.error("Tripfusion: Error in link click handler: ", error);
1180
- }
1181
- }
1182
- function addPageLoadListener() {
1183
- if (document.readyState === "complete") {
1184
- onLoadHandler();
1185
- }
1186
- else {
1187
- window.addEventListener("load", onLoadHandler);
1188
- }
1189
- }
1190
- function onLoadHandler() {
1191
- setTimeout(function () {
1192
- var _a;
1193
- var urlParams = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getParamsFromUrl)(new URLSearchParams(window.location.search));
1194
- if (urlParams.tripfusion === "true" && (client || urlParams.client) && (propertyId || urlParams.propertyId)) {
1195
- book({
1196
- config: {
1197
- client: (_a = urlParams.client) !== null && _a !== void 0 ? _a : client,
1198
- propertyId: urlParams.propertyId ? +urlParams.propertyId : propertyId,
1199
- mode: urlParams.mode === _const__WEBPACK_IMPORTED_MODULE_0__.BOOKING_MODE.append ? _const__WEBPACK_IMPORTED_MODULE_0__.BOOKING_MODE.append : _const__WEBPACK_IMPORTED_MODULE_0__.BOOKING_MODE.normal,
1200
- bookingId: (urlParams === null || urlParams === void 0 ? void 0 : urlParams.bookingId) && (urlParams === null || urlParams === void 0 ? void 0 : urlParams.mode) === _const__WEBPACK_IMPORTED_MODULE_0__.BOOKING_MODE.append ? +urlParams.bookingId : null,
1201
- },
1202
- bookingData: {
1203
- offerId: urlParams.offerId ? +urlParams.offerId : undefined,
1204
- checkIn: urlParams.checkIn,
1205
- checkOut: urlParams.checkOut,
1206
- adults: urlParams.adults ? +urlParams.adults : undefined,
1207
- children: urlParams.children ? urlParams.children.split(",").map(function (age) { return +age; }) : undefined,
1208
- },
1209
- });
1210
- }
1211
- }, 500);
1212
- }
1213
- function initResumeWidget() {
1214
- var checkIfDocumentLoadedInterval = setInterval(function () {
1215
- if (document.readyState === "complete") {
1216
- (0,_dom__WEBPACK_IMPORTED_MODULE_1__.injectResumeButton)();
1217
- addLinkEventListeners();
1218
- clearInterval(checkIfDocumentLoadedInterval);
1219
- }
1220
- }, 100);
1221
- addPageLoadListener();
1222
- }
1223
- function book(props) {
1224
- var _a, _b, _c, _d, _e;
1225
- try {
1226
- var widget_1 = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_ID), widgetWrapper_1 = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_WRAPPER_ID), resumeWidget = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.RESUME_BUTTON_ID), resumeWidgetClass = resumeWidget ? resumeWidget.getAttribute("class") : null;
1227
- if (resumeWidgetClass === null || resumeWidgetClass === void 0 ? void 0 : resumeWidgetClass.includes("dismiss-btn")) {
1228
- resumeWidget.setAttribute("class", "dismiss-btn-slide-out");
1229
- }
1230
- var iframeConfig = __assign(__assign({}, props), { config: __assign(__assign({}, props === null || props === void 0 ? void 0 : props.config), { client: (_b = (_a = props === null || props === void 0 ? void 0 : props.config) === null || _a === void 0 ? void 0 : _a.client) !== null && _b !== void 0 ? _b : client, propertyId: (_d = (_c = props === null || props === void 0 ? void 0 : props.config) === null || _c === void 0 ? void 0 : _c.propertyId) !== null && _d !== void 0 ? _d : propertyId }) });
1231
- if (JSON.stringify(bookingContext) !== JSON.stringify(iframeConfig)) {
1232
- isIframeReady = false;
1233
- (0,_dom__WEBPACK_IMPORTED_MODULE_1__.displayLoadingOverlay)();
1234
- (_e = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_IFRAME_ID)) === null || _e === void 0 ? void 0 : _e.remove();
1235
- (0,_dom__WEBPACK_IMPORTED_MODULE_1__.injectIframe)(iframeConfig);
1236
- bookingContext = iframeConfig;
1237
- var resumeButton = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.RESUME_BUTTON_ID);
1238
- var resumeButtonText = resumeButton === null || resumeButton === void 0 ? void 0 : resumeButton.querySelector("span");
1239
- if (resumeButtonText) {
1240
- resumeButtonText.innerHTML = "Complete your booking";
1241
- }
1242
- }
1243
- var intervalId_1 = setInterval(function () {
1244
- var _a;
1245
- if (!isIframeReady) {
1246
- return;
1247
- }
1248
- (_a = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.LOADER_ID)) === null || _a === void 0 ? void 0 : _a.remove();
1249
- clearInterval(intervalId_1);
1250
- if (widget_1.style.display === "none") {
1251
- Object.assign(widgetWrapper_1.style, {
1252
- zIndex: 1000000000011,
1253
- height: "100%",
1254
- background: "rgba(0, 0, 0, .4)",
1255
- });
1256
- (0,_dom__WEBPACK_IMPORTED_MODULE_1__.lockPageScroll)();
1257
- setTimeout(function () {
1258
- widget_1.style.display = "block";
1259
- widget_1.setAttribute("class", "slide-in");
1260
- }, 20);
1261
- setTimeout(function () {
1262
- var widgetIframe = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_IFRAME_ID);
1263
- widgetIframe === null || widgetIframe === void 0 ? void 0 : widgetIframe.focus();
1264
- }, 250);
1265
- }
1266
- var resumeButton = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.RESUME_BUTTON_ID);
1267
- resumeButton === null || resumeButton === void 0 ? void 0 : resumeButton.addEventListener("click", function () {
1268
- try {
1269
- var resumeButtonClass = resumeButton.getAttribute("class");
1270
- if (resumeButtonClass === null || resumeButtonClass === void 0 ? void 0 : resumeButtonClass.includes("dismiss-btn")) {
1271
- resumeButton.setAttribute("class", "dismiss-btn-slide-out");
1272
- }
1273
- Object.assign(widgetWrapper_1.style, {
1274
- zIndex: 1000000000011,
1275
- height: "100%",
1276
- background: "rgba(0, 0, 0, .5)",
1277
- });
1278
- document.body.style.overflow = "hidden";
1279
- widget_1.style.display = "block";
1280
- widget_1.setAttribute("class", "slide-in");
1281
- setTimeout(function () {
1282
- var widgetIframe = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_IFRAME_ID);
1283
- widgetIframe === null || widgetIframe === void 0 ? void 0 : widgetIframe.focus();
1284
- }, 500);
1285
- }
1286
- catch (error) {
1287
- (0,_utils__WEBPACK_IMPORTED_MODULE_3__.logger)("Widget: resume button error: ".concat(error));
1288
- console.error("Tripfusion: resume button error", error);
1289
- }
1290
- });
1291
- }, 100);
1292
- }
1293
- catch (error) {
1294
- (0,_utils__WEBPACK_IMPORTED_MODULE_3__.logger)("Widget: failed to book: ".concat(error));
1295
- console.error("Tripfusion: failed to book: ".concat(error));
1296
- }
1297
- }
1298
- function initTripfusionSdk() {
1299
- var _a;
1300
- try {
1301
- var jsSdk = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.SDK_SCRIPT_ID);
1302
- var jsSdkSrc = jsSdk.getAttribute("src");
1303
- var urlParams = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.getParamsFromUrl)(new URLSearchParams(jsSdkSrc.substring(jsSdkSrc.indexOf("?"))));
1304
- client = (_a = urlParams["client"]) !== null && _a !== void 0 ? _a : null;
1305
- propertyId = urlParams["propertyId"] ? +urlParams["propertyId"] : null;
1306
- if (!client || !propertyId) {
1307
- throw new Error("(!) Tripfusion: client and propertyId are required.");
1308
- }
1309
- initResumeWidget();
1310
- Object.assign(window, { book: book, closeWidget: _dom__WEBPACK_IMPORTED_MODULE_1__.closeWidget });
1311
- window.onmessage = function (e) {
1312
- var message = e.data;
1313
- switch (message.type) {
1314
- case "tripfusion-widget-ready": {
1315
- isIframeReady = true;
1316
- break;
1317
- }
1318
- case "tripfusion-booking-completed": {
1319
- var resumeButton = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.RESUME_BUTTON_ID);
1320
- var resumeButtonText = resumeButton === null || resumeButton === void 0 ? void 0 : resumeButton.querySelector("span");
1321
- if (resumeButtonText) {
1322
- resumeButtonText.innerHTML = "Booking completed!";
1323
- }
1324
- break;
1325
- }
1326
- case "tripfusion-set-client-theme": {
1327
- var messageData = message.data;
1328
- var clientTheme = messageData.primary;
1329
- var resumeButton = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.RESUME_BUTTON_ID);
1330
- var widgetHeader = document.getElementById(_const__WEBPACK_IMPORTED_MODULE_0__.WIDGET_HEADER_ID);
1331
- if (clientTheme) {
1332
- if (resumeButton) {
1333
- resumeButton.style["backgroundColor"] = clientTheme;
1334
- }
1335
- if (widgetHeader) {
1336
- widgetHeader.style["backgroundColor"] = clientTheme;
1337
- }
1338
- }
1339
- else {
1340
- resumeButton === null || resumeButton === void 0 ? void 0 : resumeButton.removeAttribute("style");
1341
- widgetHeader === null || widgetHeader === void 0 ? void 0 : widgetHeader.removeAttribute("style");
1342
- }
1343
- break;
1344
- }
1345
- default:
1346
- break;
1347
- }
1348
- };
1349
- }
1350
- catch (error) {
1351
- (0,_utils__WEBPACK_IMPORTED_MODULE_3__.logger)("Widget: failed to init Tripfusion JS SDK: ".concat(error));
1352
- console.error("Tripfusion: failed to init SDK: ".concat(error));
1353
- }
1354
- }
1355
- initTripfusionSdk();
1356
-
1357
- /******/ })()
1358
- ;
1359
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUMwRztBQUNqQjtBQUN6Riw4QkFBOEIsbUZBQTJCLENBQUMsNEZBQXFDO0FBQy9GLDJGQUEyRjtBQUMzRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLGlGQUFpRixVQUFVLFlBQVksYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsV0FBVyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxNQUFNLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLFdBQVcsT0FBTyxLQUFLLFVBQVUsVUFBVSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxXQUFXLFlBQVksWUFBWSxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLE1BQU0sWUFBWSxXQUFXLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsVUFBVSxNQUFNLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxXQUFXLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsTUFBTSxNQUFNLEtBQUssS0FBSyxZQUFZLE1BQU0sTUFBTSxLQUFLLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxLQUFLLFlBQVksTUFBTSxNQUFNLEtBQUssS0FBSyxZQUFZLE1BQU0sTUFBTSxLQUFLLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxLQUFLLFlBQVksT0FBTyxLQUFLLFlB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dUJBQVosWUFBWSxDQUFFLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDM0MsQ0FBQztvQkFDRCxNQUFNO2dCQUNWLENBQUM7Z0JBQ0Q7b0JBQ0ksTUFBTTtZQUNkLENBQUM7UUFDTCxDQUFDLENBQUM7SUFDTixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNiLDhDQUFNLENBQUMsb0RBQTZDLEtBQUssQ0FBRSxDQUFDLENBQUM7UUFDN0QsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBbUMsS0FBSyxDQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0FBQ0wsQ0FBQztBQUVELGlCQUFpQixFQUFFLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL3NyYy9zdHlsZXMuY3NzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vc3JjL3N0eWxlcy5jc3M/NDRiMiIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qcyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vc3JjL2NvbnN0LnRzIiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrLy4vc3JjL2RvbS50cyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL3NyYy91dGlscy50cyIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQHZhY2F5b3UvdHJpcGZ1c2lvbi1qcy1zZGsvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL0B2YWNheW91L3RyaXBmdXNpb24tanMtc2RrL3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9AdmFjYXlvdS90cmlwZnVzaW9uLWpzLXNkay8uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJAaW1wb3J0IHVybChodHRwczovL3VzZS50eXBla2l0Lm5ldC9zYWc4Y2ViLmNzcyk7XCJdKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgI3RyaXBmdXNpb24tbG9hZGVyIHtcbiAgICBjb2xvcjogd2hpdGU7XG4gICAgbWFyZ2luLXJpZ2h0OiAtNTAlO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgZm9udC1mYW1pbHk6IGZ1dHVyYS1sdC13MDEtYm9vaywgZnV0dXJhLWx0LXcwNS1ib29rLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuI3RyaXBmdXNpb24tbG9hZGVyIHNwYW4ge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGZvbnQtc2l6ZTogMS4zcmVtO1xufVxuXG4jdHJpcGZ1c2lvbi1yZXN1bWUtYnV0dG9uIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEycHggMzJweDtcbiAgICBib3gtc2hhZG93OiAwcHggMHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMjUpLCAwcHggNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XG4gICAgcmlnaHQ6IDMwcHg7XG4gICAgei1pbmRleDogMTAwMDAwMDAwMDAwO1xuICAgIGJvdHRvbTogNDBweDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDQwMHB4KTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDkyYjQzO1xuICAgIGJvcmRlci1yYWRpdXM6IDIzcHg7XG59XG5cbiN0cmlwZnVzaW9uLXJlc3VtZS1idXR0b24gc3BhbiB7XG4gICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDtcbiAgICBmb250LWZhbWlseTogc3dlZXQtc2Fucy1wcm8sIHNhbnMtc2VyaWY7XG4gICAgZm9udC1zaXplOiAxcmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICBsZXR0ZXItc3BhY2luZzogMS41cHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSAhaW1wb3J0YW50O1xuICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xufVxuXG4jdHJpcGZ1c2lvbi13aWRnZXQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwKTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC41cyBlYXNlLW91dDtcbn1cblxuI3RyaXBmdXNpb24td2lkZ2V0IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRvcDogMHB4O1xuICAgIHJpZ2h0OiAwcHg7XG59XG5cbiN0cmlwZnVzaW9uLXdpZGdldC1pbm5lci13cmFwcGVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG1pbi13aWR0aDogMzIwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHJpZ2h0OiAwcHg7XG4gICAgYm90dG9tOiAwcHg7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMik7XG4gICAgZm9udC1mYW1pbHk6IFwiUm9ib3RvXCIsIFwiSGVsdmV0aWNhXCIsIFwiQXJpYWxcIiwgc2Fucy1zZXJpZjtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS41O1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjAwOTM4ZW07XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAgICN0cmlwZnVzaW9uLXdpZGdldC1pbm5lci13cmFwcGVyIHtcbiAgICAgICAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0MHB4KTtcbiAgICAgICAgcmlnaHQ6IDIwcHg7XG4gICAgICAgIGJvdHRvbTogMjBweDtcbiAgICAgICAgd2lkdGg6IDUwMHB4O1xuICAgIH1cbn1cblxuI3RyaXBmdXNpb24td2lkZ2V0LWhlYWRlciB7XG4gICAgaGVpZ2h0OiA2MHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICMwOTJiNDM7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMWYxZjE7XG4gICAgcGFkZGluZzogMCAxNnB4IDAgMTZweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGNvbG9yOiB3aGl0ZTtcbn1cblxuI3RyaXBmdXNpb24td2lkZ2V0LWlmcmFtZSB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlcjogbm9uZTtcbn1cblxuI3RyaXBmdXNpb24td2lkZ2V0LWhlYWRlci10aXRsZSB7XG4gICAgZm9udC1mYW1pbHk6IHN3ZWV0LXNhbnMtcHJvLCBzYW5zLXNlcmlmO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBmb250LXNpemU6IDFyZW07XG4gICAgbGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG5cbiN0cmlwZnVzaW9uLXdpZGdldC1jbG9zZS1idXR0b24ge1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHdpZHRoOiAyZW07XG4gICAgaGVpZ2h0OiAyZW07XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgdGV4dC1pbmRlbnQ6IDEwMCU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgJjpmb2N1cyB7XG4gICAgICAgIG91dGxpbmU6IHNvbGlkIDAgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgfVxuXG4gICAgJjpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNCk7XG4gICAgfVxuXG4gICAgJjpiZWZvcmUsXG4gICAgJjphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAyNSU7XG4gICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMC4wNjI1ZW0pO1xuICAgICAgICB3aWR0aDogMC4xMjVlbTtcbiAgICAgICAgaGVpZ2h0OiA1MCU7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMTI1ZW07XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgICAgICAgYmFja2dyb3VuZDogY3VycmVudGNvbG9yO1xuICAgICAgICBjb2xvcjogd2hpdGU7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgfVxuXG4gICAgJjphZnRlciB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XG4gICAgfVxufVxuXG4uZGlzbWlzcy1idG4tc2xpZGUtaW4ge1xuICAgIC13ZWJraXQtdHJhbnNpdGlvbjogNTAwbXM7XG4gICAgLW1vei10cmFuc2l0aW9uOiA1MDBtcztcbiAgICB0cmFuc2l0aW9uOiA1MDBtcztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCkgIWltcG9ydGFudDtcbn1cblxuLmRpc21pc3MtYnRuLXNsaWRlLW91dCB7XG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiA1MDBtcztcbiAgICAtbW96LXRyYW5zaXRpb246IDUwMG1zO1xuICAgIHRyYW5zaXRpb246IDUwMG1zO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0MDBweCkgIWltcG9ydGFudDtcbn1cblxuLmRpc21pc3MtYnRuLXNsaWRlLW91dCBzcGFuIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uZGlzbWlzcy1idG4tcmVzaXplLWluIHtcbiAgICB3aWR0aDogNDZweCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogNDZweCAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb246IDUwMG1zO1xuICAgIHJpZ2h0OiAzMHB4ICFpbXBvcnRhbnQ7XG59XG5cbi5kaXNtaXNzLWJ0bi1yZXNpemUtaW4gc3BhbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmRpc21pc3MtYnRuLXJlc2l6ZS1pbjpob3ZlciB7XG4gICAgd2lkdGg6IDIxN3B4ICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiA0NnB4ICFpbXBvcnRhbnQ7XG4gICAgdHJhbnNpdGlvbjogYWxsIDMwMG1zIGxpbmVhcjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXNtaXNzLWJ0bi1yZXNpemUtaW46aG92ZXIgc3BhbiB7XG4gICAgZGlzcGxheTogaW5saW5lO1xuICAgIGhlaWdodDogMjBweCAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXNtaXNzLWJ0bi1yZXNpemUtb3V0IHtcbiAgICB3aWR0aDogNDZweCAhaW1wb3J0YW50O1xuICAgIGhlaWdodDogNDZweCAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb246IDUwMG1zO1xuICAgIHJpZ2h0OiAtMTAwcHggIWltcG9ydGFudDtcbn1cblxuLnNsaWRlLWluIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgYW5pbWF0aW9uOiBzbGlkZS1pbiAwLjhzIGZvcndhcmRzICFpbXBvcnRhbnQ7XG4gICAgLXdlYmtpdC1hbmltYXRpb246IHNsaWRlLWluIDAuOHMgZm9yd2FyZHMgIWltcG9ydGFudDtcbiAgICB6LWluZGV4OiAxMDAwMDAwMDAwMDAwO1xufVxuXG4uc2xpZGUtb3V0IHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gICAgYW5pbWF0aW9uOiBzbGlkZS1vdXQgMXMgZm9yd2FyZHMgIWltcG9ydGFudDtcbiAgICAtd2Via2l0LWFuaW1hdGlvbjogc2xpZGUtb3V0IDFzIGZvcndhcmRzICFpbXBvcnRhbnQ7XG4gICAgei1pbmRleDogLTEwMDAwMDAwMDAwMDA7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ5NXB4KSB7XG4gICAgLnNsaWRlLWluIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICAgICAgYW5pbWF0aW9uOiBzbGlkZS11cCAwLjhzIGZvcndhcmRzICFpbXBvcnRhbnQ7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzbGlkZS11cCAwLjhzIGZvcndhcmRzICFpbXBvcnRhbnQ7XG4gICAgICAgIHotaW5kZXg6IDEwMDAwMDAwMDAwMDA7XG4gICAgfVxuXG4gICAgLnNsaWRlLW91dCB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgICAgIGFuaW1hdGlvbjogc2xpZGUtZG93biAwLjVzIGZvcndhcmRzICFpbXBvcnRhbnQ7XG4gICAgICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzbGlkZS1kb3duIDFzIGZvcndhcmRzICFpbXBvcnRhbnQ7XG4gICAgICAgIHotaW5kZXg6IC0xMDAwMDAwMDAwMDAwO1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyBzbGlkZS1pbiB7XG4gICAgMTAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSk7XG4gICAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtaW4ge1xuICAgIDEwMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSk7XG4gICAgfVxufVxuXG5Aa2V5ZnJhbWVzIHNsaWRlLXVwIHtcbiAgICAxMDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBzbGlkZS11cCB7XG4gICAgMTAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgc2xpZGUtb3V0IHtcbiAgICAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwJSk7XG4gICAgfVxuXG4gICAgMTAwJSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICB9XG59XG5cbkAtd2Via2l0LWtleWZyYW1lcyBzbGlkZS1vdXQge1xuICAgIDAlIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCUpO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gICAgMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xuICAgIH1cblxuICAgIDEwMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XG4gICAgfVxufVxuXG5ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtZG93biB7XG4gICAgMCUge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XG4gICAgfVxuXG4gICAgMTAwJSB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xuICAgIH1cbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3N0eWxlcy5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBRUE7SUFDSSxZQUFZO0lBQ1osa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsU0FBUztJQUNULGlGQUFpRjtJQUNqRixnQ0FBZ0M7QUFDcEM7QUFDQTtJQUNJLGlCQUFpQjtJQUNqQixpQkFB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bkMsMkNBQTJDO0lBQzNDLG1EQUFtRDtJQUNuRCx1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSTtRQUNJLDJCQUEyQjtRQUMzQixtQ0FBbUM7UUFDbkMsNENBQTRDO1FBQzVDLG9EQUFvRDtRQUNwRCxzQkFBc0I7SUFDMUI7O0lBRUE7UUFDSSwyQkFBMkI7UUFDM0IsbUNBQW1DO1FBQ25DLDhDQUE4QztRQUM5QyxvREFBb0Q7UUFDcEQsdUJBQXVCO0lBQzNCO0FBQ0o7O0FBRUE7SUFDSTtRQUNJLHlCQUF5QjtJQUM3QjtBQUNKOztBQUVBO0lBQ0k7UUFDSSxpQ0FBaUM7SUFDckM7QUFDSjs7QUFFQTtJQUNJO1FBQ0kseUJBQXlCO0lBQzdCO0FBQ0o7O0FBRUE7SUFDSTtRQUNJLGlDQUFpQztJQUNyQztBQUNKOztBQUVBO0lBQ0k7UUFDSSx5QkFBeUI7SUFDN0I7O0lBRUE7UUFDSSwyQkFBMkI7SUFDL0I7QUFDSjs7QUFFQTtJQUNJO1FBQ0ksaUNBQWlDO0lBQ3JDOztJQUVBO1FBQ0ksbUNBQW1DO0lBQ3ZDO0FBQ0o7O0FBRUE7SUFDSTtRQUNJLHlCQUF5QjtJQUM3Qjs7SUFFQTtRQUNJLDJCQUEyQjtJQUMvQjtBQUNKOztBQUVBO0lBQ0k7UUFDSSxpQ0FBaUM7SUFDckM7O0lBRUE7UUFDSSxtQ0FBbUM7SUFDdkM7QUFDSlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAaW1wb3J0IHVybChcXFwiaHR0cHM6Ly91c2UudHlwZWtpdC5uZXQvc2FnOGNlYi5jc3NcXFwiKTtcXG5cXG4jdHJpcGZ1c2lvbi1sb2FkZXIge1xcbiAgICBjb2xvcjogd2hpdGU7XFxuICAgIG1hcmdpbi1yaWdodDogLTUwJTtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB0b3A6IDUwJTtcXG4gICAgbGVmdDogNTAlO1xcbiAgICBmb250LWZhbWlseTogZnV0dXJhLWx0LXcwMS1ib29rLCBmdXR1cmEtbHQtdzA1LWJvb2ssIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xcbn1cXG4jdHJpcGZ1c2lvbi1sb2FkZXIgc3BhbiB7XFxuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICBmb250LXNpemU6IDEuM3JlbTtcXG59XFxuXFxuI3RyaXBmdXNpb24tcmVzdW1lLWJ1dHRvbiB7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgcGFkZGluZzogMTJweCAzMnB4O1xcbiAgICBib3gtc2hhZG93OiAwcHggMHB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMjUpLCAwcHggNHB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxuICAgIHJpZ2h0OiAzMHB4O1xcbiAgICB6LWluZGV4OiAxMDAwMDAwMDAwMDA7XFxuICAgIGJvdHRvbTogNDBweDtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoNDAwcHgpO1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDkyYjQzO1xcbiAgICBib3JkZXItcmFkaXVzOiAyM3B4O1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi1yZXN1bWUtYnV0dG9uIHNwYW4ge1xcbiAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50O1xcbiAgICBmb250LWZhbWlseTogc3dlZXQtc2Fucy1wcm8sIHNhbnMtc2VyaWY7XFxuICAgIGZvbnQtc2l6ZTogMXJlbTtcXG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlICFpbXBvcnRhbnQ7XFxuICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi13aWRnZXQtd3JhcHBlciB7XFxuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMCk7XFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXG4gICAgdG9wOiAwO1xcbiAgICByaWdodDogMDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC41cyBlYXNlLW91dDtcXG59XFxuXFxuI3RyaXBmdXNpb24td2lkZ2V0IHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB3aWR0aDogMTAwJTtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICB0b3A6IDBweDtcXG4gICAgcmlnaHQ6IDBweDtcXG59XFxuXFxuI3RyaXBmdXNpb24td2lkZ2V0LWlubmVyLXdyYXBwZXIge1xcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICAgIG1pbi13aWR0aDogMzIwcHg7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBoZWlnaHQ6IDEwMCU7XFxuICAgIHJpZ2h0OiAwcHg7XFxuICAgIGJvdHRvbTogMHB4O1xcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcXG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xcbiAgICBib3gtc2hhZG93OiAwIDJweCAxMHB4IDAgcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgICBmb250LWZhbWlseTogXFxcIlJvYm90b1xcXCIsIFxcXCJIZWx2ZXRpY2FcXFwiLCBcXFwiQXJpYWxcXFwiLCBzYW5zLXNlcmlmO1xcbiAgICBmb250LXdlaWdodDogNDAwO1xcbiAgICBmb250LXNpemU6IDFyZW07XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XFxuICAgIGxldHRlci1zcGFjaW5nOiAwLjAwOTM4ZW07XFxufVxcblxcbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xcbiAgICAjdHJpcGZ1c2lvbi13aWRnZXQtaW5uZXItd3JhcHBlciB7XFxuICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDQwcHgpO1xcbiAgICAgICAgcmlnaHQ6IDIwcHg7XFxuICAgICAgICBib3R0b206IDIwcHg7XFxuICAgICAgICB3aWR0aDogNTAwcHg7XFxuICAgIH1cXG59XFxuXFxuI3RyaXBmdXNpb24td2lkZ2V0LWhlYWRlciB7XFxuICAgIGhlaWdodDogNjBweDtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzA5MmI0MztcXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmMWYxZjE7XFxuICAgIHBhZGRpbmc6IDAgMTZweCAwIDE2cHg7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgY29sb3I6IHdoaXRlO1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi13aWRnZXQtaWZyYW1lIHtcXG4gICAgaGVpZ2h0OiAxMDAlO1xcbiAgICBib3JkZXI6IG5vbmU7XFxufVxcblxcbiN0cmlwZnVzaW9uLXdpZGdldC1oZWFkZXItdGl0bGUge1xcbiAgICBmb250LWZhbWlseTogc3dlZXQtc2Fucy1wcm8sIHNhbnMtc2VyaWY7XFxuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XFxuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICAgIGZvbnQtc2l6ZTogMXJlbTtcXG4gICAgbGV0dGVyLXNwYWNpbmc6IDEuNXB4O1xcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbn1cXG5cXG4jdHJpcGZ1c2lvbi13aWRnZXQtY2xvc2UtYnV0dG9uIHtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIHBhZGRpbmc6IDA7XFxuICAgIHdpZHRoOiAyZW07XFxuICAgIGhlaWdodDogMmVtO1xcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgICBmb250OiBpbmhlcml0O1xcbiAgICB0ZXh0LWluZGVudDogMTAwJTtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcblxcbiAgICAmOmZvY3VzIHtcXG4gICAgICAgIG91dGxpbmU6IHNvbGlkIDAgdHJhbnNwYXJlbnQ7XFxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDQpO1xcbiAgICB9XFxuXFxuICAgICY6aG92ZXIge1xcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA0KTtcXG4gICAgfVxcblxcbiAgICAmOmJlZm9yZSxcXG4gICAgJjphZnRlciB7XFxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB0b3A6IDI1JTtcXG4gICAgICAgIGxlZnQ6IGNhbGMoNTAlIC0gMC4wNjI1ZW0pO1xcbiAgICAgICAgd2lkdGg6IDAuMTI1ZW07XFxuICAgICAgICBoZWlnaHQ6IDUwJTtcXG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMTI1ZW07XFxuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxuICAgICAgICBiYWNrZ3JvdW5kOiBjdXJyZW50Y29sb3I7XFxuICAgICAgICBjb2xvcjogd2hpdGU7XFxuICAgICAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgfVxcblxcbiAgICAmOmFmdGVyIHtcXG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICAgIH1cXG59XFxuXFxuLmRpc21pc3MtYnRuLXNsaWRlLWluIHtcXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgLW1vei10cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgdHJhbnNpdGlvbjogNTAwbXM7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKSAhaW1wb3J0YW50O1xcbn1cXG5cXG4uZGlzbWlzcy1idG4tc2xpZGUtb3V0IHtcXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgLW1vei10cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgdHJhbnNpdGlvbjogNTAwbXM7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCg0MDBweCkgIWltcG9ydGFudDtcXG59XFxuXFxuLmRpc21pc3MtYnRuLXNsaWRlLW91dCBzcGFuIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmRpc21pc3MtYnRuLXJlc2l6ZS1pbiB7XFxuICAgIHdpZHRoOiA0NnB4ICFpbXBvcnRhbnQ7XFxuICAgIGhlaWdodDogNDZweCAhaW1wb3J0YW50O1xcbiAgICB0cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgcmlnaHQ6IDMwcHggIWltcG9ydGFudDtcXG59XFxuXFxuLmRpc21pc3MtYnRuLXJlc2l6ZS1pbiBzcGFuIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmRpc21pc3MtYnRuLXJlc2l6ZS1pbjpob3ZlciB7XFxuICAgIHdpZHRoOiAyMTdweCAhaW1wb3J0YW50O1xcbiAgICBoZWlnaHQ6IDQ2cHggIWltcG9ydGFudDtcXG4gICAgdHJhbnNpdGlvbjogYWxsIDMwMG1zIGxpbmVhcjtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uZGlzbWlzcy1idG4tcmVzaXplLWluOmhvdmVyIHNwYW4ge1xcbiAgICBkaXNwbGF5OiBpbmxpbmU7XFxuICAgIGhlaWdodDogMjBweCAhaW1wb3J0YW50O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uZGlzbWlzcy1idG4tcmVzaXplLW91dCB7XFxuICAgIHdpZHRoOiA0NnB4ICFpbXBvcnRhbnQ7XFxuICAgIGhlaWdodDogNDZweCAhaW1wb3J0YW50O1xcbiAgICB0cmFuc2l0aW9uOiA1MDBtcztcXG4gICAgcmlnaHQ6IC0xMDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4uc2xpZGUtaW4ge1xcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpO1xcbiAgICBhbmltYXRpb246IHNsaWRlLWluIDAuOHMgZm9yd2FyZHMgIWltcG9ydGFudDtcXG4gICAgLXdlYmtpdC1hbmltYXRpb246IHNsaWRlLWluIDAuOHMgZm9yd2FyZHMgIWltcG9ydGFudDtcXG4gICAgei1pbmRleDogMTAwMDAwMDAwMDAwMDtcXG59XFxuXFxuLnNsaWRlLW91dCB7XFxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxuICAgIGFuaW1hdGlvbjogc2xpZGUtb3V0IDFzIGZvcndhcmRzICFpbXBvcnRhbnQ7XFxuICAgIC13ZWJraXQtYW5pbWF0aW9uOiBzbGlkZS1vdXQgMXMgZm9yd2FyZHMgIWltcG9ydGFudDtcXG4gICAgei1pbmRleDogLTEwMDAwMDAwMDAwMDA7XFxufVxcblxcbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ5NXB4KSB7XFxuICAgIC5zbGlkZS1pbiB7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XFxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcXG4gICAgICAgIGFuaW1hdGlvbjogc2xpZGUtdXAgMC44cyBmb3J3YXJkcyAhaW1wb3J0YW50O1xcbiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IHNsaWRlLXVwIDAuOHMgZm9yd2FyZHMgIWltcG9ydGFudDtcXG4gICAgICAgIHotaW5kZXg6IDEwMDAwMDAwMDAwMDA7XFxuICAgIH1cXG5cXG4gICAgLnNsaWRlLW91dCB7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTAwJSk7XFxuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcXG4gICAgICAgIGFuaW1hdGlvbjogc2xpZGUtZG93biAwLjVzIGZvcndhcmRzICFpbXBvcnRhbnQ7XFxuICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc2xpZGUtZG93biAxcyBmb3J3YXJkcyAhaW1wb3J0YW50O1xcbiAgICAgICAgei1pbmRleDogLTEwMDAwMDAwMDAwMDA7XFxuICAgIH1cXG59XFxuXFxuQGtleWZyYW1lcyBzbGlkZS1pbiB7XFxuICAgIDEwMCUge1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAlKTtcXG4gICAgfVxcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtaW4ge1xcbiAgICAxMDAlIHtcXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAlKTtcXG4gICAgfVxcbn1cXG5cXG5Aa2V5ZnJhbWVzIHNsaWRlLXVwIHtcXG4gICAgMTAwJSB7XFxuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xcbiAgICB9XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyBzbGlkZS11cCB7XFxuICAgIDEwMCUge1xcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCUpO1xcbiAgICB9XFxufVxcblxcbkBrZXlmcmFtZXMgc2xpZGUtb3V0IHtcXG4gICAgMCUge1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDAlKTtcXG4gICAgfVxcblxcbiAgICAxMDAlIHtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcXG4gICAgfVxcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtb3V0IHtcXG4gICAgMCUge1xcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCUpO1xcbiAgICB9XFxuXFxuICAgIDEwMCUge1xcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XFxuICAgIH1cXG59XFxuXFxuQGtleWZyYW1lcyBzbGlkZS1kb3duIHtcXG4gICAgMCUge1xcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcXG4gICAgfVxcblxcbiAgICAxMDAlIHtcXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxMDAlKTtcXG4gICAgfVxcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgc2xpZGUtZG93biB7XFxuICAgIDAlIHtcXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcXG4gICAgfVxcblxcbiAgICAxMDAlIHtcXG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwMCUpO1xcbiAgICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiXG4gICAgICBpbXBvcnQgQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydEJ5U2VsZWN0b3IuanNcIjtcbiAgICAgIGltcG9ydCBzZXRBdHRyaWJ1dGVzIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzXCI7XG4gICAgICBpbXBvcnQgY29udGVudCwgKiBhcyBuYW1lZEV4cG9ydCBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlcy5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZXMuY3NzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cbiAgY3NzICs9IG9iai5jc3M7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH1cblxuICAvLyBGb3Igb2xkIElFXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7fSxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICB9O1xuICB9XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCJleHBvcnQgY29uc3QgVFJJUEZVU0lPTl9CQVNFX1VSTCA9XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiID8gXCJodHRwczovL2RldmVsb3AuYm9va2luZ3MudmFjYXlvdS5jb20vXCIgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9cIjtcbmV4cG9ydCBjb25zdCBTREtfU0NSSVBUX0lEID0gXCJ0cmlwZnVzaW9uLXNka1wiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9JRCA9IFwidHJpcGZ1c2lvbi13aWRnZXRcIjtcbmV4cG9ydCBjb25zdCBXSURHRVRfSU5ORVJfV1JBUFBFUl9JRCA9IFwidHJpcGZ1c2lvbi13aWRnZXQtaW5uZXItd3JhcHBlclwiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9IRUFERVJfSUQgPSBcInRyaXBmdXNpb24td2lkZ2V0LWhlYWRlclwiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9DTE9TRV9CVVRUT05fSUQgPSBcInRyaXBmdXNpb24td2lkZ2V0LWNsb3NlLWJ1dHRvblwiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9IRUFERVJfVElUTEVfSUQgPSBcInRyaXBmdXNpb24td2lkZ2V0LWhlYWRlci10aXRsZVwiO1xuZXhwb3J0IGNvbnN0IFdJREdFVF9XUkFQUEVSX0lEID0gXCJ0cmlwZnVzaW9uLXdpZGdldC13cmFwcGVyXCI7XG5leHBvcnQgY29uc3QgV0lER0VUX0lGUkFNRV9JRCA9IFwidHJpcGZ1c2lvbi13aWRnZXQtaWZyYW1lXCI7XG5leHBvcnQgY29uc3QgUkVTVU1FX0JVVFRPTl9JRCA9IFwidHJpcGZ1c2lvbi1yZXN1bWUtYnV0dG9uXCI7XG5leHBvcnQgY29uc3QgTE9BREVSX0lEID0gXCJ0cmlwZnVzaW9uLWxvYWRlclwiO1xuZXhwb3J0IGNvbnN0IEJPT0tJTkdfTU9ERSA9IHtcbiAgICBub3JtYWw6IFwibm9ybWFsXCIsXG4gICAgYXBwZW5kOiBcImFwcGVuZFwiLFxufSBhcyBjb25zdDtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB0eXBlIHsgV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi9pbmRleC50eXBlc1wiO1xuaW1wb3J0IHtcbiAgICBCT09LSU5HX01PREUsXG4gICAgTE9BREVSX0lELFxuICAgIFJFU1VNRV9CVVRUT05fSUQsXG4gICAgVFJJUEZVU0lPTl9CQVNFX1VSTCxcbiAgICBXSURHRVRfQ0xPU0VfQlVUVE9OX0lELFxuICAgIFdJREdFVF9IRUFERVJfSUQsXG4gICAgV0lER0VUX0hFQURFUl9USVRMRV9JRCxcbiAgICBXSURHRVRfSUQsXG4gICAgV0lER0VUX0lGUkFNRV9JRCxcbiAgICBXSURHRVRfSU5ORVJfV1JBUFBFUl9JRCxcbiAgICBXSURHRVRfV1JBUFBFUl9JRCxcbn0gZnJvbSBcIi4vY29uc3RcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5TG9hZGluZ092ZXJsYXkoKSB7XG4gICAgY29uc3Qgd2lkZ2V0V3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9XUkFQUEVSX0lEKTtcblxuICAgIGlmICh3aWRnZXRXcmFwcGVyKSB7XG4gICAgICAgIGNvbnN0IGxvYWRpbmdEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBsb2FkaW5nRGl2LmlkID0gTE9BREVSX0lEO1xuICAgICAgICBsb2FkaW5nRGl2LmlubmVySFRNTCA9IFwiTG9hZGluZyA8c3Bhbj5UcmlwRnVzaW9uPC9zcGFuPlwiO1xuICAgICAgICB3aWRnZXRXcmFwcGVyLmFwcGVuZENoaWxkKGxvYWRpbmdEaXYpO1xuXG4gICAgICAgIHdpZGdldFdyYXBwZXIuc3R5bGUuekluZGV4ID0gYCR7MWUxMX1gO1xuICAgICAgICB3aWRnZXRXcmFwcGVyLnN0eWxlLmhlaWdodCA9IFwiMTAwJVwiO1xuICAgICAgICB3aWRnZXRXcmFwcGVyLnN0eWxlLmJhY2tncm91bmQgPSBcInJnYmEoMCwgMCwgMCwgLjc0KVwiO1xuICAgICAgICBsb2NrUGFnZVNjcm9sbCgpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFJlc3VtZUJ1dHRvbigpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB3aWRnZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgICAgICAgd2lkZ2V0V3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICAgICAgICB3aWRnZXRJbm5lcldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFxuICAgICAgICAgICAgd2lkZ2V0SGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgICAgICAgICAgIHdpZGdldEhlYWRlclRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIiksXG4gICAgICAgICAgICB3aWRnZXRDbG9zZUJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiksXG4gICAgICAgICAgICByZXN1bWVCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpLFxuICAgICAgICAgICAgcmVzdW1lQnV0dG9uVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXG4gICAgICAgIC8vIENvbmZpZ3VyZSByZXN1bWUgYnV0dG9uXG4gICAgICAgIHJlc3VtZUJ1dHRvbi5pZCA9IFJFU1VNRV9CVVRUT05fSUQ7XG5cbiAgICAgICAgLy8gQ29uZmlndXJlIGJ1dHRvbiB0ZXh0XG4gICAgICAgIHJlc3VtZUJ1dHRvblRleHQuaW5uZXJIVE1MID0gXCJDb21wbGV0ZSB5b3VyIGJvb2tpbmdcIjtcbiAgICAgICAgcmVzdW1lQnV0dG9uLmFwcGVuZENoaWxkKHJlc3VtZUJ1dHRvblRleHQpO1xuXG4gICAgICAgIC8vIENvbmZpZ3VyZSB3aWRnZXQgYW5kIHdyYXBwZXJcbiAgICAgICAgd2lkZ2V0LmlkID0gV0lER0VUX0lEO1xuICAgICAgICB3aWRnZXQuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICB3aWRnZXRXcmFwcGVyLmlkID0gV0lER0VUX1dSQVBQRVJfSUQ7XG5cbiAgICAgICAgLy8gQ29uZmlndXJlIHdpZGdldCBpbm5lciB3cmFwcGVyXG4gICAgICAgIHdpZGdldElubmVyV3JhcHBlci5pZCA9IFdJREdFVF9JTk5FUl9XUkFQUEVSX0lEO1xuICAgICAgICB3aWRnZXRIZWFkZXIuaWQgPSBXSURHRVRfSEVBREVSX0lEO1xuICAgICAgICB3aWRnZXRDbG9zZUJ1dHRvbi5pZCA9IFdJREdFVF9DTE9TRV9CVVRUT05fSUQ7XG4gICAgICAgIHdpZGdldENsb3NlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjbG9zZVdpZGdldCk7XG4gICAgICAgIHdpZGdldEhlYWRlclRpdGxlLmlkID0gV0lER0VUX0hFQURFUl9USVRMRV9JRDtcbiAgICAgICAgd2lkZ2V0SGVhZGVyVGl0bGUuaW5uZXJIVE1MID0gXCJCb29raW5nXCI7XG5cbiAgICAgICAgLy8gQXBwZW5kIHdpZGdldCB0byB3cmFwcGVyIGFuZCB3cmFwcGVyIHRvIGRvY3VtZW50IGJvZHlcbiAgICAgICAgd2lkZ2V0V3JhcHBlci5hcHBlbmRDaGlsZCh3aWRnZXQpO1xuICAgICAgICB3aWRnZXQuYXBwZW5kQ2hpbGQod2lkZ2V0SW5uZXJXcmFwcGVyKTtcbiAgICAgICAgd2lkZ2V0SW5uZXJXcmFwcGVyLmFwcGVuZENoaWxkKHdpZGdldEhlYWRlcik7XG4gICAgICAgIHdpZGdldEhlYWRlci5hcHBlbmRDaGlsZCh3aWRnZXRIZWFkZXJUaXRsZSk7XG4gICAgICAgIHdpZGdldEhlYWRlci5hcHBlbmRDaGlsZCh3aWRnZXRDbG9zZUJ1dHRvbik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQod2lkZ2V0V3JhcHBlcik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocmVzdW1lQnV0dG9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIoYFdpZGdldDogRXJyb3IgaW5qZWN0aW5nIHJlc3VtZSBidXR0b246ICR7ZXJyb3J9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUcmlwZnVzaW9uOiBFcnJvciBpbmplY3RpbmcgcmVzdW1lIGJ1dHRvbjogXCIsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVdpZGdldCgpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB3aWRnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChXSURHRVRfSUQpLFxuICAgICAgICAgICAgd2lkZ2V0V3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9XUkFQUEVSX0lEKSxcbiAgICAgICAgICAgIHJlc3VtZUJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFJFU1VNRV9CVVRUT05fSUQpO1xuXG4gICAgICAgIGlmICh3aWRnZXQgJiYgd2lkZ2V0V3JhcHBlciAmJiByZXN1bWVCdXR0b24pIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcImluaXRpYWxcIjtcbiAgICAgICAgICAgIHdpZGdldC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNsaWRlLW91dFwiKTtcbiAgICAgICAgICAgIHdpZGdldFdyYXBwZXIuc3R5bGUuYmFja2dyb3VuZCA9IFwicmdiYSgwLCAwLCAwLCAwKVwiO1xuICAgICAgICAgICAgd2lkZ2V0LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgICAgIHdpZGdldFdyYXBwZXIuc3R5bGUuekluZGV4ID0gYCR7LTFlMTF9YDtcbiAgICAgICAgICAgIHJlc3VtZUJ1dHRvbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImRpc21pc3MtYnRuLXNsaWRlLWluXCIpO1xuICAgICAgICAgICAgcmVzdW1lQnV0dG9uLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIoYFdpZGdldDogRXJyb3IgY2xvc2luZyB3aWRnZXQ6ICR7ZXJyb3J9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUcmlwZnVzaW9uOiBFcnJvciBjbG9zaW5nIHdpZGdldDogXCIsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJZnJhbWUoeyBjb25maWcsIGJvb2tpbmdEYXRhIH06IFdpZGdldFByb3BzKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaW5uZXJXcmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV0lER0VUX0lOTkVSX1dSQVBQRVJfSUQpO1xuICAgICAgICBpZiAoaW5uZXJXcmFwcGVyKSB7XG4gICAgICAgICAgICBjb25zdCB3aWRnZXRJZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuICAgICAgICAgICAgbGV0IHVybCA9IGAke1RSSVBGVVNJT05fQkFTRV9VUkx9JHtjb25maWcuY2xpZW50fS8ke2NvbmZpZy5wcm9wZXJ0eUlkfWA7XG4gICAgICAgICAgICBpZiAoY29uZmlnLm1vZGUgPT09IEJPT0tJTkdfTU9ERS5hcHBlbmQgJiYgY29uZmlnLmJvb2tpbmdJZCkge1xuICAgICAgICAgICAgICAgIHVybCArPSBgL2Jvb2tpbmcvJHtjb25maWcuYm9va2luZ0lkfS9hcHBlbmRgO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYm9va2luZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRpdGlvbmFsUGFyYW1zID0gT2JqZWN0LmVudHJpZXMoYm9va2luZ0RhdGEpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWAudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgICAgICAgICAgICAgIGlmIChhZGRpdGlvbmFsUGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIHVybCArPSBgPyR7YWRkaXRpb25hbFBhcmFtc31gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2lkZ2V0SWZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCB1cmwpO1xuICAgICAgICAgICAgd2lkZ2V0SWZyYW1lLmlkID0gV0lER0VUX0lGUkFNRV9JRDtcbiAgICAgICAgICAgIGlubmVyV3JhcHBlci5hcHBlbmRDaGlsZCh3aWRnZXRJZnJhbWUpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyKGBXaWRnZXQ6IEVycm9yIGluamVjdGluZyBpZnJhbWU6ICR7ZXJyb3J9YCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJUcmlwZnVzaW9uOiBFcnJvciBpbmplY3RpbmcgaWZyYW1lOiBcIiwgZXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2tQYWdlU2Nyb2xsKCkge1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHsgVFJJUEZVU0lPTl9CQVNFX1VSTCB9IGZyb20gXCIuL2NvbnN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbXNGcm9tVXJsKHVybFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgYXZhaWxhYmxlU2VhcmNoUGFyYW1zTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICB0cmlwZnVzaW9uOiBcInRyaXBmdXNpb25cIixcbiAgICAgICAgY2xpZW50OiBcImNsaWVudFwiLFxuICAgICAgICBwcm9wZXJ0eWlkOiBcInByb3BlcnR5SWRcIixcbiAgICAgICAgbW9kZTogXCJtb2RlXCIsXG4gICAgICAgIG9mZmVyaWQ6IFwib2ZmZXJJZFwiLFxuICAgICAgICBib29raW5naWQ6IFwiYm9va2luZ0lkXCIsXG4gICAgICAgIGNoZWNraW46IFwiY2hlY2tJblwiLFxuICAgICAgICBjaGVja291dDogXCJjaGVja091dFwiLFxuICAgICAgICBhZHVsdHM6IFwiYWR1bHRzXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcImNoaWxkcmVuXCIsXG4gICAgfTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh1cmxTZWFyY2hQYXJhbXMuZW50cmllcygpKS5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBbc2VhcmNoUGFyYW1LZXksIHNlYXJjaFBhcmFtVmFsdWVdKSA9PiAoe1xuICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgIFthdmFpbGFibGVTZWFyY2hQYXJhbXNNYXBbc2VhcmNoUGFyYW1LZXkudG9Mb3dlckNhc2UoKV1dOiBzZWFyY2hQYXJhbVZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICAge31cbiAgICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nZ2VyKG1lc3NhZ2U6IHN0cmluZywgdHlwZTogXCJlcnJvclwiIHwgXCJsb2dcIiA9IFwiZXJyb3JcIikge1xuICAgIGNvbnN0IHVybCA9IGAke1RSSVBGVVNJT05fQkFTRV9VUkx9YXBpL3ZhY2F5b3UvbG9nYDtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBwYWdlOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICB9O1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgIFwiY29udGVudC10eXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgIH07XG4gICAgcmV0dXJuIGZldGNoKHVybCwge1xuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgfSksXG4gICAgICAgIGhlYWRlcnMsXG4gICAgfSlcbiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVHJpcGZ1c2lvbjogZmFpbGVkIHRvIGxvZyBtZXNzYWdlOiAke2Vycm9yfWApO1xuICAgICAgICB9KTtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5jID0gdW5kZWZpbmVkOyIsIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB0eXBlIHsgQXBwTWVzc2FnZSwgV2lkZ2V0UHJvcHMgfSBmcm9tIFwiLi9pbmRleC50eXBlc1wiO1xuaW1wb3J0IHtcbiAgICBCT09LSU5HX01PREUsXG4gICAgTE9BREVSX0lELFxuICAgIFJFU1VNRV9CVVRUT05fSUQsXG4gICAgU0RLX1NDUklQVF9JRCxcbiAgICBXSURHRVRfSEVBREVSX0lELFxuICAgIFdJREdFVF9JRCxcbiAgICBXSURHRVRfSUZSQU1FX0lELFxuICAgIFdJREdFVF9XUkFQUEVSX0lELFxufSBmcm9tIFwiLi9jb25zdFwiO1xuaW1wb3J0IHsgY2xvc2VXaWRnZXQsIGRpc3BsYXlMb2FkaW5nT3ZlcmxheSwgaW5qZWN0SWZyYW1lLCBpbmplY3RSZXN1bWVCdXR0b24sIGxvY2tQYWdlU2Nyb2xsIH0gZnJvbSBcIi4vZG9tXCI7XG5pbXBvcnQgXCIuL3N0eWxlcy5jc3NcIjtcbmltcG9ydCB7IGdldFBhcmFtc0Zyb21VcmwsIGxvZ2dlciB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmxldCBjbGllbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xubGV0IHByb3BlcnR5SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xubGV0IGJvb2tpbmdDb250ZXh0OiBXaWRnZXRQcm9wcyB8IG51bGwgPSBudWxsO1xubGV0IGlzSWZyYW1lUmVhZHkgPSBmYWxzZTtcblxuZnVuY3Rpb24gYWRkTGlua0V2ZW50TGlzdGVuZXJzKCkge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpLmZvckVhY2goKGxpbmtFbGVtZW50KSA9PiB7XG4gICAgICAgIGxpbmtFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVMaW5rQ2xpY2spO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIGV2ZW50IHRhcmdldCBoYXMgYSB2YWxpZCBocmVmXG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSAhPT0gXCJBXCIgJiYgdGFyZ2V0LnBhcmVudE5vZGU/LnRhZ05hbWUgPT09IFwiQVwiKSB7XG4gICAgICAgICAgICB0YXJnZXQuaHJlZiA9IHRhcmdldC5wYXJlbnROb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5rSHJlZiA9IHRhcmdldC5ocmVmIHx8IFwiXCI7XG4gICAgICAgIGlmICghbGlua0hyZWYuaW5jbHVkZXMoXCI/XCIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBnZXRQYXJhbXNGcm9tVXJsKG5ldyBVUkxTZWFyY2hQYXJhbXMobGlua0hyZWYuc3Vic3RyaW5nKGxpbmtIcmVmLmluZGV4T2YoXCI/XCIpKSkpO1xuXG4gICAgICAgIGlmICh1cmxQYXJhbXMudHJpcGZ1c2lvbiA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBib29rKHtcbiAgICAgICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50OiB1cmxQYXJhbXMuY2xpZW50ID8/IGNsaWVudCxcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlJZDogdXJsUGFyYW1zLnByb3BlcnR5SWQgPyArdXJsUGFyYW1zLnByb3BlcnR5SWQgOiAocHJvcGVydHlJZCBhcyBudW1iZXIpLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiB1cmxQYXJhbXMubW9kZSA9PT0gQk9PS0lOR19NT0RFLmFwcGVuZCA/IEJPT0tJTkdfTU9ERS5hcHBlbmQgOiBCT09LSU5HX01PREUubm9ybWFsLFxuICAgICAgICAgICAgICAgICAgICBib29raW5nSWQ6XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmxQYXJhbXM/LmJvb2tpbmdJZCAmJiB1cmxQYXJhbXM/Lm1vZGUgPT09IEJPT0tJTkdfTU9ERS5hcHBlbmQgPyArdXJsUGFyYW1zLmJvb2tpbmdJZCA6IG51bGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBib29raW5nRGF0YToge1xuICAgICAgICAgICAgICAgICAgICBvZmZlcklkOiB1cmxQYXJhbXMub2ZmZXJJZCA/ICt1cmxQYXJhbXMub2ZmZXJJZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tJbjogdXJsUGFyYW1zLmNoZWNrSW4sXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrT3V0OiB1cmxQYXJhbXMuY2hlY2tPdXQsXG4gICAgICAgICAgICAgICAgICAgIGFkdWx0czogdXJsUGFyYW1zLmFkdWx0cyA/ICt1cmxQYXJhbXMuYWR1bHRzIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogdXJsUGFyYW1zLmNoaWxkcmVuID8gdXJsUGFyYW1zLmNoaWxkcmVuLnNwbGl0KFwiLFwiKS5tYXAoKGFnZSkgPT4gK2FnZSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyKGBXaWRnZXQ6IEVycm9yIGluIGxpbmsgY2xpY2sgaGFuZGxlcjogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlRyaXBmdXNpb246IEVycm9yIGluIGxpbmsgY2xpY2sgaGFuZGxlcjogXCIsIGVycm9yKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGFkZFBhZ2VMb2FkTGlzdGVuZXIoKSB7XG4gICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICBvbkxvYWRIYW5kbGVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZEhhbmRsZXIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gb25Mb2FkSGFuZGxlcigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gZ2V0UGFyYW1zRnJvbVVybChuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpKTtcbiAgICAgICAgaWYgKHVybFBhcmFtcy50cmlwZnVzaW9uID09PSBcInRydWVcIiAmJiAoY2xpZW50IHx8IHVybFBhcmFtcy5jbGllbnQpICYmIChwcm9wZXJ0eUlkIHx8IHVybFBhcmFtcy5wcm9wZXJ0eUlkKSkge1xuICAgICAgICAgICAgYm9vayh7XG4gICAgICAgICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWVudDogdXJsUGFyYW1zLmNsaWVudCA/PyBjbGllbnQsXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5SWQ6IHVybFBhcmFtcy5wcm9wZXJ0eUlkID8gK3VybFBhcmFtcy5wcm9wZXJ0eUlkIDogKHByb3BlcnR5SWQgYXMgbnVtYmVyKSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogdXJsUGFyYW1zLm1vZGUgPT09IEJPT0tJTkdfTU9ERS5hcHBlbmQgPyBCT09LSU5HX01PREUuYXBwZW5kIDogQk9PS0lOR19NT0RFLm5vcm1hbCxcbiAgICAgICAgICAgICAgICAgICAgYm9va2luZ0lkOlxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsUGFyYW1zPy5ib29raW5nSWQgJiYgdXJsUGFyYW1zPy5tb2RlID09PSBCT09LSU5HX01PREUuYXBwZW5kID8gK3VybFBhcmFtcy5ib29raW5nSWQgOiBudWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYm9va2luZ0RhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJJZDogdXJsUGFyYW1zLm9mZmVySWQgPyArdXJsUGFyYW1zLm9mZmVySWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrSW46IHVybFBhcmFtcy5jaGVja0luLFxuICAgICAgICAgICAgICAgICAgICBjaGVja091dDogdXJsUGFyYW1zLmNoZWNrT3V0LFxuICAgICAgICAgICAgICAgICAgICBhZHVsdHM6IHVybFBhcmFtcy5hZHVsdHMgPyArdXJsUGFyYW1zLmFkdWx0cyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHVybFBhcmFtcy5jaGlsZHJlbiA/IHVybFBhcmFtcy5jaGlsZHJlbi5zcGxpdChcIixcIikubWFwKChhZ2UpID0+ICthZ2UpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIDUwMCk7XG59XG5cbmZ1bmN0aW9uIGluaXRSZXN1bWVXaWRnZXQoKSB7XG4gICAgY29uc3QgY2hlY2tJZkRvY3VtZW50TG9hZGVkSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgIGluamVjdFJlc3VtZUJ1dHRvbigpO1xuICAgICAgICAgICAgYWRkTGlua0V2ZW50TGlzdGVuZXJzKCk7XG5cbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoY2hlY2tJZkRvY3VtZW50TG9hZGVkSW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgfSwgMTAwKTtcbiAgICBhZGRQYWdlTG9hZExpc3RlbmVyKCk7XG59XG5cbmZ1bmN0aW9uIGJvb2socHJvcHM/OiBQYXJ0aWFsPFdpZGdldFByb3BzPikge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHdpZGdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFdJREdFVF9JRCkgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICB3aWRnZXRXcmFwcGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV0lER0VUX1dSQVBQRVJfSUQpIGFzIEhUTUxFbGVtZW50LFxuICAgICAgICAgICAgcmVzdW1lV2lkZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUkVTVU1FX0JVVFRPTl9JRCkgYXMgSFRNTEVsZW1lbnQsXG4gICAgICAgICAgICByZXN1bWVXaWRnZXRDbGFzcyA9IHJlc3VtZVdpZGdldCA/IHJlc3VtZVdpZGdldC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSA6IG51bGw7XG5cbiAgICAgICAgaWYgKHJlc3VtZVdpZGdldENsYXNzPy5pbmNsdWRlcyhcImRpc21pc3MtYnRuXCIpKSB7XG4gICAgICAgICAgICByZXN1bWVXaWRnZXQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJkaXNtaXNzLWJ0bi1zbGlkZS1vdXRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpZnJhbWVDb25maWcgPSB7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICAgIC4uLnByb3BzPy5jb25maWcsXG4gICAgICAgICAgICAgICAgY2xpZW50OiBwcm9wcz8uY29uZmlnPy5jbGllbnQgPz8gKGNsaWVudCBhcyBzdHJpbmcpLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5SWQ6IHByb3BzPy5jb25maWc/LnByb3BlcnR5SWQgPz8gKHByb3BlcnR5SWQgYXMgbnVtYmVyKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGJvb2tpbmdDb250ZXh0KSAhPT0gSlNPTi5zdHJpbmdpZnkoaWZyYW1lQ29uZmlnKSkge1xuICAgICAgICAgICAgaXNJZnJhbWVSZWFkeSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBkaXNwbGF5TG9hZGluZ092ZXJsYXkoKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV0lER0VUX0lGUkFNRV9JRCk/LnJlbW92ZSgpO1xuICAgICAgICAgICAgaW5qZWN0SWZyYW1lKGlmcmFtZUNvbmZpZyk7XG4gICAgICAgICAgICBib29raW5nQ29udGV4dCA9IGlmcmFtZUNvbmZpZztcblxuICAgICAgICAgICAgY29uc3QgcmVzdW1lQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUkVTVU1FX0JVVFRPTl9JRCk7XG4gICAgICAgICAgICBjb25zdCByZXN1bWVCdXR0b25UZXh0ID0gcmVzdW1lQnV0dG9uPy5xdWVyeVNlbGVjdG9yKFwic3BhblwiKTtcbiAgICAgICAgICAgIGlmIChyZXN1bWVCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgcmVzdW1lQnV0dG9uVGV4dC5pbm5lckhUTUwgPSBcIkNvbXBsZXRlIHlvdXIgYm9va2luZ1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIElmcmFtZSBpcyBsb2FkZWRcbiAgICAgICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGlmICghaXNJZnJhbWVSZWFkeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTE9BREVSX0lEKT8ucmVtb3ZlKCk7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuXG4gICAgICAgICAgICAvLyBEaXNwbGF5IHdpZGdldCBhbmQgdXBkYXRlIHN0eWxlc1xuICAgICAgICAgICAgaWYgKHdpZGdldC5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24od2lkZ2V0V3JhcHBlci5zdHlsZSwge1xuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDAwMDAwMDAwMTEsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IFwicmdiYSgwLCAwLCAwLCAuNClcIixcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxvY2tQYWdlU2Nyb2xsKCk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgIHdpZGdldC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInNsaWRlLWluXCIpO1xuICAgICAgICAgICAgICAgIH0sIDIwKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRJZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChXSURHRVRfSUZSQU1FX0lEKTtcbiAgICAgICAgICAgICAgICAgICAgd2lkZ2V0SWZyYW1lPy5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0sIDI1MCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJlc3VtZSBidXR0b24gY2xpY2sgaGFuZGxlclxuICAgICAgICAgICAgY29uc3QgcmVzdW1lQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoUkVTVU1FX0JVVFRPTl9JRCk7XG4gICAgICAgICAgICByZXN1bWVCdXR0b24/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdW1lQnV0dG9uQ2xhc3MgPSByZXN1bWVCdXR0b24uZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VtZUJ1dHRvbkNsYXNzPy5pbmNsdWRlcyhcImRpc21pc3MtYnRuXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVCdXR0b24uc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJkaXNtaXNzLWJ0bi1zbGlkZS1vdXRcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHdpZGdldFdyYXBwZXIuc3R5bGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHpJbmRleDogMTAwMDAwMDAwMDAxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBcInJnYmEoMCwgMCwgMCwgLjUpXCIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuICAgICAgICAgICAgICAgICAgICB3aWRnZXQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgd2lkZ2V0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwic2xpZGUtaW5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWRnZXRJZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChXSURHRVRfSUZSQU1FX0lEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldElmcmFtZT8uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIoYFdpZGdldDogcmVzdW1lIGJ1dHRvbiBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIlRyaXBmdXNpb246IHJlc3VtZSBidXR0b24gZXJyb3JcIiwgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCAxMDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlcihgV2lkZ2V0OiBmYWlsZWQgdG8gYm9vazogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgVHJpcGZ1c2lvbjogZmFpbGVkIHRvIGJvb2s6ICR7ZXJyb3J9YCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0VHJpcGZ1c2lvblNkaygpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBqc1NkayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFNES19TQ1JJUFRfSUQpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBqc1Nka1NyYyA9IGpzU2RrLmdldEF0dHJpYnV0ZShcInNyY1wiKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IGdldFBhcmFtc0Zyb21VcmwobmV3IFVSTFNlYXJjaFBhcmFtcyhqc1Nka1NyYy5zdWJzdHJpbmcoanNTZGtTcmMuaW5kZXhPZihcIj9cIikpKSk7XG5cbiAgICAgICAgY2xpZW50ID0gdXJsUGFyYW1zW1wiY2xpZW50XCJdID8/IG51bGw7XG4gICAgICAgIHByb3BlcnR5SWQgPSB1cmxQYXJhbXNbXCJwcm9wZXJ0eUlkXCJdID8gK3VybFBhcmFtc1tcInByb3BlcnR5SWRcIl0gOiBudWxsO1xuXG4gICAgICAgIGlmICghY2xpZW50IHx8ICFwcm9wZXJ0eUlkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIoISkgVHJpcGZ1c2lvbjogY2xpZW50IGFuZCBwcm9wZXJ0eUlkIGFyZSByZXF1aXJlZC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpbml0UmVzdW1lV2lkZ2V0KCk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24od2luZG93LCB7IGJvb2ssIGNsb3NlV2lkZ2V0IH0pO1xuICAgICAgICB3aW5kb3cub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2U6IEFwcE1lc3NhZ2UgPSBlLmRhdGE7XG4gICAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0cmlwZnVzaW9uLXdpZGdldC1yZWFkeVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlzSWZyYW1lUmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBcInRyaXBmdXNpb24tYm9va2luZy1jb21wbGV0ZWRcIjoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bWVCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChSRVNVTUVfQlVUVE9OX0lEKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdW1lQnV0dG9uVGV4dCA9IHJlc3VtZUJ1dHRvbj8ucXVlcnlTZWxlY3RvcihcInNwYW5cIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bWVCdXR0b25UZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVCdXR0b25UZXh0LmlubmVySFRNTCA9IFwiQm9va2luZyBjb21wbGV0ZWQhXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgXCJ0cmlwZnVzaW9uLXNldC1jbGllbnQtdGhlbWVcIjoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlRGF0YSA9IG1lc3NhZ2UuZGF0YSBhcyB7IHByaW1hcnk/OiBzdHJpbmcgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpZW50VGhlbWUgPSBtZXNzYWdlRGF0YS5wcmltYXJ5O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bWVCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChSRVNVTUVfQlVUVE9OX0lEKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkZ2V0SGVhZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoV0lER0VUX0hFQURFUl9JRCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnRUaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VtZUJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZUJ1dHRvbi5zdHlsZVtcImJhY2tncm91bmRDb2xvclwiXSA9IGNsaWVudFRoZW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZGdldEhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldEhlYWRlci5zdHlsZVtcImJhY2tncm91bmRDb2xvclwiXSA9IGNsaWVudFRoZW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdW1lQnV0dG9uPy5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldEhlYWRlcj8ucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlcihgV2lkZ2V0OiBmYWlsZWQgdG8gaW5pdCBUcmlwZnVzaW9uIEpTIFNESzogJHtlcnJvcn1gKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihgVHJpcGZ1c2lvbjogZmFpbGVkIHRvIGluaXQgU0RLOiAke2Vycm9yfWApO1xuICAgIH1cbn1cblxuaW5pdFRyaXBmdXNpb25TZGsoKTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==