Sanakey
2021-07-09 3fc241d02fb8b671289de3d9d80bf848349c04d4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            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;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
Component({
    options: {
        addGlobalClass: true,
        multipleSlots: true
    },
    properties: {
        liveRoom: {
            type: Object,
            value: {},
            observer: function (newVal) {
                console.log('监听liveRoom的newVal', newVal);
                if (JSON.stringify(newVal) != '{}') {
                    this.setData({
                        isLive: true
                    });
                }
            }
        },
        detail: {
            type: Object,
            value: {},
            observer: function (newVal) {
                console.log('监听detail的newVal', newVal);
                if (JSON.stringify(newVal) != '{}') {
                    this.setData({
                        isDetail: true
                    });
                }
            }
        },
        sellerList: {
            type: Array,
            value: []
        },
    },
    data: {
        imgDraw: {},
        sharePath: '',
        visible: false,
        qrCodeUrl: '',
        isLive: false,
        isDetail: false
    },
    lifetimes: {
        ready: function () {
            return __awaiter(this, void 0, void 0, function () {
                return __generator(this, function (_a) {
                    return [2];
                });
            });
        }
    },
    pageLifetimes: {
        show: function () {
        },
        hide: function () {
        }
    },
    methods: {
        getLiveRoomQrCode: function () {
            return __awaiter(this, void 0, void 0, function () {
                var roomid, _a, error, result;
                return __generator(this, function (_b) {
                    switch (_b.label) {
                        case 0:
                            roomid = this.data.liveRoom.RoomId;
                            console.log(roomid);
                            return [4, wx.$utils.to(wx.$http.request({
                                    url: "/shopping/live/getSharedCode.do",
                                    data: {
                                        roomid: roomid
                                    }
                                }))];
                        case 1:
                            _a = _b.sent(), error = _a[0], result = _a[1];
                            if (error || result.state !== 'success') {
                                console.log(error);
                                wx.showToast({
                                    title: '获取二维码失败,请稍后再试',
                                    icon: 'none',
                                });
                                return [2, false];
                            }
                            console.log(result);
                            this.setData({
                                qrCodeUrl: result.cdnUrl
                            });
                            return [2, true];
                    }
                });
            });
        },
        getQrCode: function () {
            return __awaiter(this, void 0, void 0, function () {
                var _a, error, result;
                return __generator(this, function (_b) {
                    switch (_b.label) {
                        case 0: return [4, wx.$utils.to(wx.$http.request({
                                url: "/shopping/poster/getQrCodeForPoster.do",
                                data: {
                                    QrCodeType: 80,
                                    doccode: this.data.detail.doccode,
                                    SellerOpenId: wx.globalData.FromOpenId
                                }
                            }))];
                        case 1:
                            _a = _b.sent(), error = _a[0], result = _a[1];
                            if (error || result.state !== 'success') {
                                console.log(error);
                                wx.showToast({
                                    title: '获取二维码失败,请稍后再试',
                                    icon: 'none',
                                });
                                return [2, false];
                            }
                            console.log(result);
                            this.setData({
                                qrCodeUrl: result.QrCode
                            });
                            return [2, true];
                    }
                });
            });
        },
        handleClose: function () {
            this.setData({
                visible: false
            });
            this.triggerEvent('close');
        },
        clearPoster: function () {
            this.setData({
                sharePath: ''
            });
        },
        drawPic: function () {
            return __awaiter(this, void 0, void 0, function () {
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            if (this.data.sharePath) {
                                this.setData({
                                    visible: true
                                });
                                this.triggerEvent('initData');
                                return [2];
                            }
                            if (!this.data.isDetail) return [3, 2];
                            return [4, this.getQrCode()];
                        case 1:
                            if (!(_a.sent()))
                                return [2];
                            _a.label = 2;
                        case 2:
                            if (!this.data.isLive) return [3, 4];
                            return [4, this.getLiveRoomQrCode()];
                        case 3:
                            if (!(_a.sent()))
                                return [2];
                            _a.label = 4;
                        case 4:
                            if (!this.data.qrCodeUrl) {
                                wx.showToast({
                                    title: '获取二维码失败,请稍后再试',
                                    icon: 'none',
                                });
                                return [2];
                            }
                            wx.showLoading({
                                title: '生成中'
                            });
                            this.setData({
                                imgDraw: this.getImgDraw()
                            });
                            return [2];
                    }
                });
            });
        },
        getImgDraw: function () {
            var _a = this.data, detail = _a.detail, liveRoom = _a.liveRoom, sellerList = _a.sellerList, qrCodeUrl = _a.qrCodeUrl;
            var isLive = this.data.isLive;
            var isDetail = this.data.isDetail;
            var promotionsType = {
                710802: '秒杀价',
                710803: '报名价',
                710804: '团购价',
            };
            console.log(detail, liveRoom, sellerList, qrCodeUrl, isLive);
            var imgDraw = {};
            var imgDrawPromotions = {
                "width": "750rpx",
                "height": "1196rpx",
                "background": "#fff",
                "views": [
                    {
                        "type": "image",
                        "url": "/assets/images/promotions-poster-bg.jpg",
                        "css": {
                            "width": "750rpx",
                            "height": "1196rpx",
                            "top": "0px",
                            "left": "0px"
                        }
                    },
                    {
                        "type": "image",
                        "url": sellerList[0].sellerWeiXinAvatarUrl || '/assets/images/default-avatar.png',
                        "css": {
                            "width": "100rpx",
                            "height": "100rpx",
                            "top": "22rpx",
                            "left": "36rpx",
                            "borderRadius": "100rpx"
                        }
                    },
                    {
                        "type": "text",
                        "text": sellerList[0].sellerName || '昵称',
                        "css": {
                            "color": "#fff",
                            "top": "34rpx",
                            "left": "160rpx",
                            "fontSize": "32rpx",
                            "fontWeight": "bold",
                            "textAlign": "left"
                        }
                    },
                    {
                        "type": "text",
                        "text": "邀请您参与活动",
                        "css": {
                            "color": "#fff",
                            "top": "80rpx",
                            "left": "160rpx",
                            "fontSize": "28rpx",
                            "textAlign": "left"
                        }
                    },
                    {
                        "type": "image",
                        "url": detail.coverImageUrl[0] || '',
                        "css": {
                            "width": "600rpx",
                            "height": "600rpx",
                            "top": "182rpx",
                            "left": "76rpx",
                            "borderRadius": "10rpx",
                        }
                    },
                    {
                        "type": "text",
                        "text": "¥",
                        "css": {
                            "color": "#f23232",
                            "top": "820rpx",
                            "left": "76rpx",
                            "fontSize": "28rpx",
                            "textAlign": "left"
                        }
                    },
                    {
                        "type": "text",
                        "text": detail.salesPrice || 0,
                        "css": {
                            "color": "#f23232",
                            "top": "808rpx",
                            "left": "108rpx",
                            "fontSize": "44rpx",
                            "fontWeight": "bold",
                            "textAlign": "left"
                        }
                    },
                    {
                        "type": "text",
                        "text": promotionsType[detail.formId] || '',
                        "css": {
                            "color": "#f23232",
                            "background": "rgb(249, 230, 231)",
                            "width": "110rpx",
                            "height": "35rpx",
                            "top": "820rpx",
                            "left": 130 + (detail.salesPrice.toString().length * 25) + "rpx",
                            "borderRadius": "20rpx",
                            "padding": "5rpx",
                            "fontSize": "28rpx",
                            "lineHeight": "35rpx",
                            "textAlign": "center"
                        }
                    },
                    {
                        "type": "text",
                        "text": detail.formId == 710803 ? '' : '价格',
                        "css": {
                            "color": "#999",
                            "top": "884rpx",
                            "left": "84rpx",
                            "fontSize": "28rpx",
                            "textAlign": "left"
                        }
                    },
                    {
                        "type": "text",
                        "text": detail.formId == 710803 ? '' : "\uFFE5" + (detail.originalPrice || 0),
                        "css": {
                            "color": "#999",
                            "top": "885rpx",
                            "left": "150rpx",
                            "fontSize": "24rpx",
                            "textDecoration": "line-through",
                            "textAlign": "left"
                        }
                    },
                    {
                        "type": "text",
                        "text": "限时优惠",
                        "css": {
                            "color": "#f23232",
                            "width": "135rpx",
                            "height": "40rpx",
                            "top": detail.formId == 710803 ? '885rpx' : "946rpx",
                            "left": "88rpx",
                            "padding": "6rpx",
                            "borderRadius": "5rpx",
                            "borderWidth": "2rpx",
                            "borderColor": "#fde4e7",
                            "fontSize": "28rpx",
                            "lineHeight": "40rpx",
                            "textAlign": "center"
                        }
                    },
                    {
                        "type": "text",
                        "text": "\u5DF2\u552E " + (detail.orderTimes || 0),
                        "css": {
                            "color": "#999",
                            "width": "200rpx",
                            "top": "820rpx",
                            "left": "476rpx",
                            "fontSize": "28rpx",
                            "textAlign": "right"
                        }
                    },
                    {
                        "type": "text",
                        "text": "\u3010" + wx.globalData.settings.name + "\u3011" + detail.title || '活动标题',
                        "css": {
                            "color": "#333",
                            "width": "360rpx",
                            "top": detail.formId == 710803 ? '980rpx' : "1020rpx",
                            "left": "76rpx",
                            "fontSize": "36rpx",
                            "maxLines": "2",
                            "lineHeight": '50rpx',
                            "textAlign": "left"
                        }
                    },
                    {
                        "type": "image",
                        "url": qrCodeUrl,
                        "css": {
                            "width": "200rpx",
                            "height": "100px",
                            "top": "888rpx",
                            "left": "476rpx",
                        }
                    },
                    {
                        "type": "text",
                        "text": "长按扫码识别参与~",
                        "css": {
                            "color": "#666",
                            "top": "1105rpx",
                            "left": "476rpx",
                            "fontSize": "24rpx",
                            "textAlign": "left"
                        }
                    }
                ]
            };
            var imgDrawLive = {
                width: '750rpx',
                height: '1334rpx',
                background: '#f5f5f5',
                views: [
                    {
                        "type": "image",
                        "url": "/assets/images/poster-bg.png",
                        "css": {
                            "width": "750rpx",
                            "height": "1334rpx",
                            "top": "0px",
                            "left": "0px",
                            "rotate": "0",
                        }
                    },
                    {
                        type: 'image',
                        url: liveRoom.ShareImgUnidUrl,
                        css: {
                            top: '10rpx',
                            left: '10rpx',
                            right: '10rpx',
                            width: '730rpx',
                            height: '630rpx',
                            borderRadius: '16rpx'
                        },
                    },
                    {
                        type: 'image',
                        url: liveRoom.AnchorImgUnidUrl || '/assets/images/default-avatar.png',
                        css: {
                            top: '594rpx',
                            left: '328rpx',
                            width: '96rpx',
                            height: '96rpx',
                            borderWidth: '6rpx',
                            borderColor: '#FFF',
                            borderRadius: '96rpx'
                        }
                    },
                    {
                        type: 'text',
                        text: liveRoom.AnchorName || '昵称',
                        css: {
                            top: '722rpx',
                            fontSize: '28rpx',
                            left: '375rpx',
                            align: 'center',
                            color: '#3c3c3c'
                        }
                    },
                    {
                        type: 'text',
                        text: "\u9080\u8BF7\u60A8\u53C2\u4E0E\u76F4\u64AD",
                        css: {
                            top: '766rpx',
                            left: '375rpx',
                            align: 'center',
                            fontSize: '28rpx',
                            color: '#3c3c3c'
                        }
                    },
                    {
                        type: 'text',
                        text: ((liveRoom.RoomName) || '活动标题') + " ",
                        css: {
                            top: '820rpx',
                            left: '375rpx',
                            maxLines: 1,
                            align: 'center',
                            fontWeight: 'bold',
                            fontSize: '44rpx',
                            color: '#3c3c3c'
                        }
                    },
                    {
                        type: 'text',
                        text: "",
                        css: {
                            top: '765rpx',
                            left: '375rpx',
                            maxLines: 1,
                            align: 'center',
                            fontWeight: 'bold',
                            fontSize: '44rpx',
                            color: '#f23232'
                        }
                    },
                    {
                        type: 'image',
                        url: qrCodeUrl,
                        css: {
                            top: '970rpx',
                            left: '390rpx',
                            width: '300rpx',
                            height: '300rpx'
                        }
                    },
                    {
                        type: 'text',
                        text: "\u957F\u6309\u4E8C\u7EF4\u7801\u8BC6\u522B\u53C2\u4E0E",
                        css: {
                            top: '1100rpx',
                            left: '55rpx',
                            fontSize: '32rpx',
                            color: '#3c3c3c'
                        }
                    },
                ]
            };
            if (isLive) {
                imgDraw = imgDrawLive;
            }
            if (isDetail) {
                imgDraw = imgDrawPromotions;
            }
            return imgDraw;
        },
        onImgErr: function () {
            wx.hideLoading();
            wx.showToast({
                title: '生成分享图失败,请刷新页面重试'
            });
        },
        onImgOK: function (e) {
            wx.hideLoading();
            this.setData({
                sharePath: e.detail.path,
                visible: true,
            });
            this.triggerEvent('initData');
        },
        preventDefault: function () { },
        handleSavePhoto: function () {
            var _this = this;
            wx.showLoading({
                title: '正在保存...',
                mask: true
            });
            wx.saveImageToPhotosAlbum({
                filePath: this.data.sharePath,
                success: function () {
                    wx.showToast({
                        title: '保存成功'
                    });
                    setTimeout(function () {
                        _this.setData({
                            visible: false
                        });
                        _this.triggerEvent('close');
                    }, 300);
                },
                fail: function () {
                    wx.getSetting({
                        success: function (res) {
                            var authSetting = res.authSetting;
                            if (!authSetting['scope.writePhotosAlbum']) {
                                wx.showModal({
                                    title: '提示',
                                    content: '您未开启保存图片到相册的权限,请点击确定去开启权限!',
                                    success: function (res) {
                                        if (res.confirm) {
                                            wx.openSetting();
                                        }
                                    }
                                });
                            }
                        }
                    });
                    setTimeout(function () {
                        wx.hideLoading();
                        _this.setData({
                            visible: false
                        });
                        _this.triggerEvent('close');
                    }, 300);
                }
            });
        }
    }
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTLENBQUM7SUFDUixPQUFPLEVBQUU7UUFDUCxjQUFjLEVBQUMsSUFBSTtRQUNuQixhQUFhLEVBQUUsSUFBSTtLQUNwQjtJQUNELFVBQVUsRUFBRTtRQUVWLFFBQVEsRUFBRTtZQUNSLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLFlBQUMsTUFBTTtnQkFDYixPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFDO29CQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDO3dCQUNYLE1BQU0sRUFBQyxJQUFJO3FCQUNaLENBQUMsQ0FBQTtpQkFDSDtZQUNILENBQUM7U0FDRjtRQUNELE1BQU0sRUFBQztZQUNMLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLFlBQUMsTUFBTTtnQkFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFDO29CQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDO3dCQUNYLFFBQVEsRUFBRSxJQUFJO3FCQUNmLENBQUMsQ0FBQTtpQkFDSDtZQUNILENBQUM7U0FDRjtRQUNELFVBQVUsRUFBQztZQUNULElBQUksRUFBRSxLQUFLO1lBQ1gsS0FBSyxFQUFFLEVBQUU7U0FDVjtLQU1GO0lBQ0QsSUFBSSxFQUFFO1FBQ0osT0FBTyxFQUFFLEVBQUU7UUFDWCxTQUFTLEVBQUUsRUFBRTtRQUNiLE9BQU8sRUFBRSxLQUFL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Q0FDZixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7eUNBQ2pCO29DQUNILENBQUM7aUNBQ0YsQ0FBQyxDQUFBOzZCQUNIO3dCQUNILENBQUM7cUJBQ0YsQ0FBQyxDQUFBO29CQUNGLFVBQVUsQ0FBQzt3QkFDVCxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7d0JBQ2hCLEtBQUksQ0FBQyxPQUFPLENBQUM7NEJBQ1gsT0FBTyxFQUFFLEtBQUs7eUJBQ2YsQ0FBQyxDQUFBO3dCQUNGLEtBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7b0JBQzVCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDVCxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1FBQ0osQ0FBQztLQUNGO0NBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiQ29tcG9uZW50KHtcclxuICBvcHRpb25zOiB7XHJcbiAgICBhZGRHbG9iYWxDbGFzczp0cnVlLFxyXG4gICAgbXVsdGlwbGVTbG90czogdHJ1ZSAvLyDlnKjnu4Tku7blrprkuYnml7bnmoTpgInpobnkuK3lkK/nlKjlpJpzbG905pSv5oyBXHJcbiAgfSxcclxuICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAvL+WxnuaAp+WAvOWPr+S7peWcqOe7hOS7tuS9v+eUqOaXtuaMh+WumlxyXG4gICAgbGl2ZVJvb206IHtcclxuICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICB2YWx1ZToge30sXHJcbiAgICAgIG9ic2VydmVyKG5ld1ZhbCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCfnm5HlkKxsaXZlUm9vbeeahG5ld1ZhbCcsbmV3VmFsKTtcclxuICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkobmV3VmFsKSAhPSAne30nKXtcclxuICAgICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgIGlzTGl2ZTp0cnVlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGRldGFpbDp7XHJcbiAgICAgIHR5cGU6IE9iamVjdCxcclxuICAgICAgdmFsdWU6IHt9LFxyXG4gICAgICBvYnNlcnZlcihuZXdWYWwpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygn55uR5ZCsZGV0YWls55qEbmV3VmFsJyxuZXdWYWwpO1xyXG4gICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShuZXdWYWwpICE9ICd7fScpe1xyXG4gICAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgICAgaXNEZXRhaWw6IHRydWVcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgc2VsbGVyTGlzdDp7XHJcbiAgICAgIHR5cGU6IEFycmF5LFxyXG4gICAgICB2YWx1ZTogW11cclxuICAgIH0sXHJcblxyXG4gICAgLy8gdmlzaWJsZToge1xyXG4gICAgLy8gICB0eXBlOiBCb29sZWFuLFxyXG4gICAgLy8gICB2YWx1ZTogZmFsc2UsXHJcbiAgICAvLyB9XHJcbiAgfSxcclxuICBkYXRhOiB7XHJcbiAgICBpbWdEcmF3OiB7fSwgLy/nu5jliLblm77niYfnmoTlpKflr7nosaFcclxuICAgIHNoYXJlUGF0aDogJycsIC8v55Sf5oiQ55qE5YiG5Lqr5Zu+XHJcbiAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgIHFyQ29kZVVybDonJyxcclxuICAgIGlzTGl2ZTpmYWxzZSwgLy/mmK/lkKbnm7Tmkq1cclxuICAgIGlzRGV0YWlsOmZhbHNlIC8v5piv5ZCm55u05pKtXHJcbiAgfSxcclxuICBsaWZldGltZXM6e1xyXG4gICAgYXN5bmMgcmVhZHkoKXtcclxuXHJcbiAgICB9XHJcbiAgfSxcclxuICBwYWdlTGlmZXRpbWVzOiB7XHJcbiAgICBzaG93OiBmdW5jdGlvbigpIHtcclxuICAgICAgLy8g6aG16Z2i6KKr5bGV56S6XHJcblxyXG4gICAgfSxcclxuICAgIGhpZGUoKSB7XHJcblxyXG4gICAgfVxyXG4gIH0sXHJcbiAgbWV0aG9kczoge1xyXG4gICAgYXN5bmMgZ2V0TGl2ZVJvb21RckNvZGUoKXtcclxuICAgICAgbGV0IHJvb21pZCA9IHRoaXMuZGF0YS5saXZlUm9vbS5Sb29tSWQ7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJvb21pZCk7XHJcbiAgICAgIGxldCBbZXJyb3IsIHJlc3VsdF0gPSBhd2FpdCB3eC4kdXRpbHMudG8oXHJcbiAgICAgICAgd3guJGh0dHAucmVxdWVzdCh7XHJcbiAgICAgICAgICB1cmw6YC9zaG9wcGluZy9saXZlL2dldFNoYXJlZENvZGUuZG9gLFxyXG4gICAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICAgIHJvb21pZFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgaWYgKGVycm9yfHxyZXN1bHQuc3RhdGUhPT0nc3VjY2Vzcycpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgdGl0bGU6ICfojrflj5bkuoznu7TnoIHlpLHotKXvvIzor7fnqI3lkI7lho3or5UnLFxyXG4gICAgICAgICAgaWNvbjonbm9uZScsXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBxckNvZGVVcmw6cmVzdWx0LmNkblVybFxyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICBhc3luYyBnZXRRckNvZGUoKXtcclxuICAgICAgbGV0IFtlcnJvciwgcmVzdWx0XSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgICAgICB3eC4kaHR0cC5yZXF1ZXN0KHtcclxuICAgICAgICAgIHVybDpgL3Nob3BwaW5nL3Bvc3Rlci9nZXRRckNvZGVGb3JQb3N0ZXIuZG9gLFxyXG4gICAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICAgIFFyQ29kZVR5cGU6ODAsXHJcbiAgICAgICAgICAgIGRvY2NvZGU6dGhpcy5kYXRhLmRldGFpbC5kb2Njb2RlLFxyXG4gICAgICAgICAgICBTZWxsZXJPcGVuSWQ6d3guZ2xvYmFsRGF0YS5Gcm9tT3BlbklkXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICBpZiAoZXJyb3J8fHJlc3VsdC5zdGF0ZSE9PSdzdWNjZXNzJyl7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgICB0aXRsZTogJ+iOt+WPluS6jOe7tOeggeWksei0pe+8jOivt+eojeWQjuWGjeivlScsXHJcbiAgICAgICAgICBpY29uOidub25lJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHFyQ29kZVVybDpyZXN1bHQuUXJDb2RlXHJcbiAgICAgIH0pXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSxcclxuICAgIGhhbmRsZUNsb3NlKCkge1xyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHZpc2libGU6IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdjbG9zZScpXHJcbiAgICB9LFxyXG4gICAgY2xlYXJQb3N0ZXIoKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgc2hhcmVQYXRoOicnXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgYXN5bmMgZHJhd1BpYygpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0YS5zaGFyZVBhdGgpIHsgLy/lpoLmnpzlt7Lnu4/nu5jliLbov4fkuobmnKzlnLDkv53lrZjmnInlm77niYfkuI3pnIDopoHph43mlrDnu5jliLZcclxuICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2luaXREYXRhJylcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhLmlzRGV0YWlsKXtcclxuICAgICAgICBpZiAoIWF3YWl0IHRoaXMuZ2V0UXJDb2RlKCkpIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5kYXRhLmlzTGl2ZSl7XHJcbiAgICAgICAgaWYgKCFhd2FpdCB0aGlzLmdldExpdmVSb29tUXJDb2RlKCkpIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuZGF0YS5xckNvZGVVcmwpIHtcclxuICAgICAgICB3eC5zaG93VG9hc3Qoe1xyXG4gICAgICAgICAgdGl0bGU6ICfojrflj5bkuoznu7TnoIHlpLHotKXvvIzor7fnqI3lkI7lho3or5UnLFxyXG4gICAgICAgICAgaWNvbjonbm9uZScsXHJcbiAgICAgICAgfSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgd3guc2hvd0xvYWRpbmcoe1xyXG4gICAgICAgIHRpdGxlOiAn55Sf5oiQ5LitJ1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICBpbWdEcmF3OiB0aGlzLmdldEltZ0RyYXcoKVxyXG4gICAgICB9KVxyXG4gICAgfSxcclxuXHJcbiAgICAgZ2V0SW1nRHJhdygpIHtcclxuICAgICAgbGV0IHtkZXRhaWwsbGl2ZVJvb20sc2VsbGVyTGlzdCxxckNvZGVVcmx9ID0gdGhpcy5kYXRhO1xyXG4gICAgICBsZXQgaXNMaXZlID0gdGhpcy5kYXRhLmlzTGl2ZTtcclxuICAgICAgbGV0IGlzRGV0YWlsID0gdGhpcy5kYXRhLmlzRGV0YWlsO1xyXG4gICAgICBsZXQgcHJvbW90aW9uc1R5cGU6YW55ID0ge1xyXG4gICAgICAgIDcxMDgwMjogJ+enkuadgOS7tycsIC8v56eS5p2AXHJcbiAgICAgICAgNzEwODAzOiAn5oql5ZCN5Lu3JywgLy/miqXlkI1cclxuICAgICAgICA3MTA4MDQ6ICflm6LotK3ku7cnLCAvL+Wboui0rVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKGRldGFpbCxsaXZlUm9vbSxzZWxsZXJMaXN0LHFyQ29kZVVybCxpc0xpdmUpO1xyXG4gICAgICBsZXQgaW1nRHJhdyA9IHt9O1xyXG4gICAgICBsZXQgaW1nRHJhd1Byb21vdGlvbnMgPSB7XHJcbiAgICAgICAgXCJ3aWR0aFwiOiBcIjc1MHJweFwiLFxyXG4gICAgICAgIFwiaGVpZ2h0XCI6IFwiMTE5NnJweFwiLFxyXG4gICAgICAgIFwiYmFja2dyb3VuZFwiOiBcIiNmZmZcIixcclxuICAgICAgICBcInZpZXdzXCI6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW1hZ2VcIixcclxuICAgICAgICAgICAgXCJ1cmxcIjogXCIvYXNzZXRzL2ltYWdlcy9wcm9tb3Rpb25zLXBvc3Rlci1iZy5qcGdcIixcclxuICAgICAgICAgICAgXCJjc3NcIjoge1xyXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogXCI3NTBycHhcIixcclxuICAgICAgICAgICAgICBcImhlaWdodFwiOiBcIjExOTZycHhcIixcclxuICAgICAgICAgICAgICBcInRvcFwiOiBcIjBweFwiLFxyXG4gICAgICAgICAgICAgIFwibGVmdFwiOiBcIjBweFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImltYWdlXCIsXHJcbiAgICAgICAgICAgIFwidXJsXCI6IHNlbGxlckxpc3RbMF0uc2VsbGVyV2VpWGluQXZhdGFyVXJsfHwnL2Fzc2V0cy9pbWFnZXMvZGVmYXVsdC1hdmF0YXIucG5nJyxcclxuICAgICAgICAgICAgXCJjc3NcIjoge1xyXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogXCIxMDBycHhcIixcclxuICAgICAgICAgICAgICBcImhlaWdodFwiOiBcIjEwMHJweFwiLFxyXG4gICAgICAgICAgICAgIFwidG9wXCI6IFwiMjJycHhcIixcclxuICAgICAgICAgICAgICBcImxlZnRcIjogXCIzNnJweFwiLFxyXG4gICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IFwiMTAwcnB4XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICBcInRleHRcIjogc2VsbGVyTGlzdFswXS5zZWxsZXJOYW1lfHwn5pi156ewJyxcclxuICAgICAgICAgICAgXCJjc3NcIjoge1xyXG4gICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZmZmXCIsXHJcbiAgICAgICAgICAgICAgXCJ0b3BcIjogXCIzNHJweFwiLFxyXG4gICAgICAgICAgICAgIFwibGVmdFwiOiBcIjE2MHJweFwiLFxyXG4gICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIzMnJweFwiLFxyXG4gICAgICAgICAgICAgIFwiZm9udFdlaWdodFwiOiBcImJvbGRcIixcclxuICAgICAgICAgICAgICBcInRleHRBbGlnblwiOiBcImxlZnRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgIFwidGV4dFwiOiBcIumCgOivt+aCqOWPguS4jua0u+WKqFwiLFxyXG4gICAgICAgICAgICBcImNzc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmZmZcIixcclxuICAgICAgICAgICAgICBcInRvcFwiOiBcIjgwcnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJsZWZ0XCI6IFwiMTYwcnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiBcIjI4cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJ0ZXh0QWxpZ25cIjogXCJsZWZ0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW1hZ2VcIixcclxuICAgICAgICAgICAgXCJ1cmxcIjogZGV0YWlsLmNvdmVySW1hZ2VVcmxbMF18fCcnLFxyXG4gICAgICAgICAgICBcImNzc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBcIjYwMHJweFwiLFxyXG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiNjAwcnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJ0b3BcIjogXCIxODJycHhcIixcclxuICAgICAgICAgICAgICBcImxlZnRcIjogXCI3NnJweFwiLFxyXG4gICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IFwiMTBycHhcIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICBcInRleHRcIjogXCLvv6VcIixcclxuICAgICAgICAgICAgXCJjc3NcIjoge1xyXG4gICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjZjIzMjMyXCIsXHJcbiAgICAgICAgICAgICAgXCJ0b3BcIjogXCI4MjBycHhcIixcclxuICAgICAgICAgICAgICBcImxlZnRcIjogXCI3NnJweFwiLFxyXG4gICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIyOHJweFwiLFxyXG4gICAgICAgICAgICAgIFwidGV4dEFsaWduXCI6IFwibGVmdFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcclxuICAgICAgICAgICAgXCJ0ZXh0XCI6IGRldGFpbC5zYWxlc1ByaWNlfHwwLFxyXG4gICAgICAgICAgICBcImNzc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmMjMyMzJcIixcclxuICAgICAgICAgICAgICBcInRvcFwiOiBcIjgwOHJweFwiLFxyXG4gICAgICAgICAgICAgIFwibGVmdFwiOiBcIjEwOHJweFwiLFxyXG4gICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCI0NHJweFwiLFxyXG4gICAgICAgICAgICAgIFwiZm9udFdlaWdodFwiOiBcImJvbGRcIixcclxuICAgICAgICAgICAgICBcInRleHRBbGlnblwiOiBcImxlZnRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgIFwidGV4dFwiOiBwcm9tb3Rpb25zVHlwZVtkZXRhaWwuZm9ybUlkXXx8JycsXHJcbiAgICAgICAgICAgIFwiY3NzXCI6IHtcclxuICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiI2YyMzIzMlwiLFxyXG4gICAgICAgICAgICAgIFwiYmFja2dyb3VuZFwiOiBcInJnYigyNDksIDIzMCwgMjMxKVwiLFxyXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogXCIxMTBycHhcIixcclxuICAgICAgICAgICAgICBcImhlaWdodFwiOiBcIjM1cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJ0b3BcIjogXCI4MjBycHhcIixcclxuICAgICAgICAgICAgICBcImxlZnRcIjogYCR7MTMwICsgKGRldGFpbC5zYWxlc1ByaWNlLnRvU3RyaW5nKCkubGVuZ3RoKjI1KX1ycHhgLFxyXG4gICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IFwiMjBycHhcIixcclxuICAgICAgICAgICAgICBcInBhZGRpbmdcIjogXCI1cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiBcIjI4cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJsaW5lSGVpZ2h0XCI6IFwiMzVycHhcIixcclxuICAgICAgICAgICAgICBcInRleHRBbGlnblwiOiBcImNlbnRlclwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcclxuICAgICAgICAgICAgXCJ0ZXh0XCI6IGRldGFpbC5mb3JtSWQ9PTcxMDgwMz8nJzon5Lu35qC8JyxcclxuICAgICAgICAgICAgXCJjc3NcIjoge1xyXG4gICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgXCJ0b3BcIjogXCI4ODRycHhcIixcclxuICAgICAgICAgICAgICBcImxlZnRcIjogXCI4NHJweFwiLFxyXG4gICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIyOHJweFwiLFxyXG4gICAgICAgICAgICAgIFwidGV4dEFsaWduXCI6IFwibGVmdFwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInRleHRcIixcclxuICAgICAgICAgICAgXCJ0ZXh0XCI6IGRldGFpbC5mb3JtSWQ9PTcxMDgwMz8nJzpg77+lJHtkZXRhaWwub3JpZ2luYWxQcmljZXx8MH1gLFxyXG4gICAgICAgICAgICBcImNzc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICBcInRvcFwiOiBcIjg4NXJweFwiLFxyXG4gICAgICAgICAgICAgIFwibGVmdFwiOiBcIjE1MHJweFwiLFxyXG4gICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIyNHJweFwiLFxyXG4gICAgICAgICAgICAgIFwidGV4dERlY29yYXRpb25cIjogXCJsaW5lLXRocm91Z2hcIixcclxuICAgICAgICAgICAgICBcInRleHRBbGlnblwiOiBcImxlZnRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgIFwidGV4dFwiOiBcIumZkOaXtuS8mOaDoFwiLFxyXG4gICAgICAgICAgICBcImNzc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJjb2xvclwiOiBcIiNmMjMyMzJcIixcclxuICAgICAgICAgICAgICBcIndpZHRoXCI6IFwiMTM1cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJoZWlnaHRcIjogXCI0MHJweFwiLFxyXG4gICAgICAgICAgICAgIFwidG9wXCI6IGRldGFpbC5mb3JtSWQ9PTcxMDgwMz8nODg1cnB4JzpcIjk0NnJweFwiLFxyXG4gICAgICAgICAgICAgIFwibGVmdFwiOiBcIjg4cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJwYWRkaW5nXCI6IFwiNnJweFwiLFxyXG4gICAgICAgICAgICAgIFwiYm9yZGVyUmFkaXVzXCI6IFwiNXJweFwiLFxyXG4gICAgICAgICAgICAgIFwiYm9yZGVyV2lkdGhcIjogXCIycnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJib3JkZXJDb2xvclwiOiBcIiNmZGU0ZTdcIixcclxuICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IFwiMjhycHhcIixcclxuICAgICAgICAgICAgICBcImxpbmVIZWlnaHRcIjogXCI0MHJweFwiLFxyXG4gICAgICAgICAgICAgIFwidGV4dEFsaWduXCI6IFwiY2VudGVyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGV4dFwiLFxyXG4gICAgICAgICAgICBcInRleHRcIjogYOW3suWUriAke2RldGFpbC5vcmRlclRpbWVzfHwwfWAsXHJcbiAgICAgICAgICAgIFwiY3NzXCI6IHtcclxuICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogXCIyMDBycHhcIixcclxuICAgICAgICAgICAgICBcInRvcFwiOiBcIjgyMHJweFwiLFxyXG4gICAgICAgICAgICAgIFwibGVmdFwiOiBcIjQ3NnJweFwiLFxyXG4gICAgICAgICAgICAgIFwiZm9udFNpemVcIjogXCIyOHJweFwiLFxyXG4gICAgICAgICAgICAgIFwidGV4dEFsaWduXCI6IFwicmlnaHRcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgIFwidGV4dFwiOiBg44CQJHt3eC5nbG9iYWxEYXRhLnNldHRpbmdzLm5hbWV944CRJHtkZXRhaWwudGl0bGV9YHx8J+a0u+WKqOagh+mimCcsXHJcbiAgICAgICAgICAgIFwiY3NzXCI6IHtcclxuICAgICAgICAgICAgICBcImNvbG9yXCI6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogXCIzNjBycHhcIixcclxuICAgICAgICAgICAgICBcInRvcFwiOiBkZXRhaWwuZm9ybUlkPT03MTA4MDM/Jzk4MHJweCc6XCIxMDIwcnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJsZWZ0XCI6IFwiNzZycHhcIixcclxuICAgICAgICAgICAgICBcImZvbnRTaXplXCI6IFwiMzZycHhcIixcclxuICAgICAgICAgICAgICBcIm1heExpbmVzXCI6IFwiMlwiLFxyXG4gICAgICAgICAgICAgIFwibGluZUhlaWdodFwiOic1MHJweCcsXHJcbiAgICAgICAgICAgICAgXCJ0ZXh0QWxpZ25cIjogXCJsZWZ0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW1hZ2VcIixcclxuICAgICAgICAgICAgXCJ1cmxcIjogcXJDb2RlVXJsLFxyXG4gICAgICAgICAgICBcImNzc1wiOiB7XHJcbiAgICAgICAgICAgICAgXCJ3aWR0aFwiOiBcIjIwMHJweFwiLFxyXG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiMTAwcHhcIixcclxuICAgICAgICAgICAgICBcInRvcFwiOiBcIjg4OHJweFwiLFxyXG4gICAgICAgICAgICAgIFwibGVmdFwiOiBcIjQ3NnJweFwiLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXh0XCIsXHJcbiAgICAgICAgICAgIFwidGV4dFwiOiBcIumVv+aMieaJq+eggeivhuWIq+WPguS4jn5cIixcclxuICAgICAgICAgICAgXCJjc3NcIjoge1xyXG4gICAgICAgICAgICAgIFwiY29sb3JcIjogXCIjNjY2XCIsXHJcbiAgICAgICAgICAgICAgXCJ0b3BcIjogXCIxMTA1cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJsZWZ0XCI6IFwiNDc2cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJmb250U2l6ZVwiOiBcIjI0cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJ0ZXh0QWxpZ25cIjogXCJsZWZ0XCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgICAgfTtcclxuICAgICAgbGV0IGltZ0RyYXdMaXZlID0ge1xyXG4gICAgICAgIHdpZHRoOiAnNzUwcnB4JyxcclxuICAgICAgICBoZWlnaHQ6ICcxMzM0cnB4JyxcclxuICAgICAgICBiYWNrZ3JvdW5kOiAnI2Y1ZjVmNScsXHJcbiAgICAgICAgdmlld3M6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW1hZ2VcIixcclxuICAgICAgICAgICAgXCJ1cmxcIjogXCIvYXNzZXRzL2ltYWdlcy9wb3N0ZXItYmcucG5nXCIsXHJcbiAgICAgICAgICAgIFwiY3NzXCI6IHtcclxuICAgICAgICAgICAgICBcIndpZHRoXCI6IFwiNzUwcnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJoZWlnaHRcIjogXCIxMzM0cnB4XCIsXHJcbiAgICAgICAgICAgICAgXCJ0b3BcIjogXCIwcHhcIixcclxuICAgICAgICAgICAgICBcImxlZnRcIjogXCIwcHhcIixcclxuICAgICAgICAgICAgICBcInJvdGF0ZVwiOiBcIjBcIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJyxcclxuICAgICAgICAgICAgdXJsOiBsaXZlUm9vbS5TaGFyZUltZ1VuaWRVcmwsXHJcbiAgICAgICAgICAgIGNzczoge1xyXG4gICAgICAgICAgICAgIHRvcDogJzEwcnB4JyxcclxuICAgICAgICAgICAgICBsZWZ0OiAnMTBycHgnLFxyXG4gICAgICAgICAgICAgIHJpZ2h0OiAnMTBycHgnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnNzMwcnB4JyxcclxuICAgICAgICAgICAgICBoZWlnaHQ6ICc2MzBycHgnLFxyXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzE2cnB4J1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJyxcclxuICAgICAgICAgICAgdXJsOiBsaXZlUm9vbS5BbmNob3JJbWdVbmlkVXJsIHx8ICcvYXNzZXRzL2ltYWdlcy9kZWZhdWx0LWF2YXRhci5wbmcnLFxyXG4gICAgICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgICB0b3A6ICc1OTRycHgnLFxyXG4gICAgICAgICAgICAgIGxlZnQ6ICczMjhycHgnLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiAnOTZycHgnLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogJzk2cnB4JyxcclxuICAgICAgICAgICAgICBib3JkZXJXaWR0aDogJzZycHgnLFxyXG4gICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAnI0ZGRicsXHJcbiAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnOTZycHgnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgdGV4dDogbGl2ZVJvb20uQW5jaG9yTmFtZSB8fCAn5pi156ewJyxcclxuICAgICAgICAgICAgY3NzOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAnNzIycnB4JyxcclxuICAgICAgICAgICAgICBmb250U2l6ZTogJzI4cnB4JyxcclxuICAgICAgICAgICAgICBsZWZ0OiAnMzc1cnB4JyxcclxuICAgICAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgY29sb3I6ICcjM2MzYzNjJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIHRleHQ6IGDpgoDor7fmgqjlj4LkuI7nm7Tmkq1gLFxyXG4gICAgICAgICAgICBjc3M6IHtcclxuICAgICAgICAgICAgICB0b3A6ICc3NjZycHgnLFxyXG4gICAgICAgICAgICAgIGxlZnQ6ICczNzVycHgnLFxyXG4gICAgICAgICAgICAgIGFsaWduOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgICBmb250U2l6ZTogJzI4cnB4JyxcclxuICAgICAgICAgICAgICBjb2xvcjogJyMzYzNjM2MnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgdGV4dDogYCR7KGxpdmVSb29tLlJvb21OYW1lKSB8fCAn5rS75Yqo5qCH6aKYJ30gYCxcclxuICAgICAgICAgICAgY3NzOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAnODIwcnB4JyxcclxuICAgICAgICAgICAgICBsZWZ0OiAnMzc1cnB4JyxcclxuICAgICAgICAgICAgICBtYXhMaW5lczogMSxcclxuICAgICAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnNDRycHgnLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAnIzNjM2MzYydcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICB0ZXh0OiBgYCxcclxuICAgICAgICAgICAgY3NzOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAnNzY1cnB4JyxcclxuICAgICAgICAgICAgICBsZWZ0OiAnMzc1cnB4JyxcclxuICAgICAgICAgICAgICBtYXhMaW5lczogMSxcclxuICAgICAgICAgICAgICBhbGlnbjogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogJ2JvbGQnLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnNDRycHgnLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAnI2YyMzIzMidcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJyxcclxuICAgICAgICAgICAgdXJsOiBxckNvZGVVcmwsXHJcbiAgICAgICAgICAgIGNzczoge1xyXG4gICAgICAgICAgICAgIHRvcDogJzk3MHJweCcsXHJcbiAgICAgICAgICAgICAgbGVmdDogJzM5MHJweCcsXHJcbiAgICAgICAgICAgICAgd2lkdGg6ICczMDBycHgnLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogJzMwMHJweCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICB0ZXh0OiBg6ZW/5oyJ5LqM57u056CB6K+G5Yir5Y+C5LiOYCxcclxuICAgICAgICAgICAgY3NzOiB7XHJcbiAgICAgICAgICAgICAgdG9wOiAnMTEwMHJweCcsXHJcbiAgICAgICAgICAgICAgbGVmdDogJzU1cnB4JyxcclxuICAgICAgICAgICAgICBmb250U2l6ZTogJzMycnB4JyxcclxuICAgICAgICAgICAgICBjb2xvcjogJyMzYzNjM2MnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXVxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoaXNMaXZlKXtcclxuICAgICAgICBpbWdEcmF3ID0gaW1nRHJhd0xpdmU7XHJcbiAgICAgIH1cclxuICAgICAgaWYoaXNEZXRhaWwpIHtcclxuICAgICAgICBpbWdEcmF3ID0gaW1nRHJhd1Byb21vdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGltZ0RyYXc7XHJcbiAgICB9LFxyXG4gICAgb25JbWdFcnIoKSB7XHJcbiAgICAgIHd4LmhpZGVMb2FkaW5nKClcclxuICAgICAgd3guc2hvd1RvYXN0KHtcclxuICAgICAgICB0aXRsZTogJ+eUn+aIkOWIhuS6q+WbvuWksei0pe+8jOivt+WIt+aWsOmhtemdoumHjeivlSdcclxuICAgICAgfSlcclxuICAgIH0sXHJcbiAgICBvbkltZ09LKGUpIHtcclxuICAgICAgd3guaGlkZUxvYWRpbmcoKVxyXG4gICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgIHNoYXJlUGF0aDogZS5kZXRhaWwucGF0aCxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICB9KVxyXG4gICAgICAvL+mAmuefpeWklumDqOe7mOWItuWujOaIkO+8jOmHjee9rmlzQ2FuRHJhd+S4umZhbHNlXHJcbiAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdpbml0RGF0YScpXHJcbiAgICB9LFxyXG4gICAgcHJldmVudERlZmF1bHQoKSB7IH0sXHJcbiAgICAvLyDkv53lrZjlm77niYdcclxuICAgIGhhbmRsZVNhdmVQaG90bygpIHtcclxuICAgICAgd3guc2hvd0xvYWRpbmcoe1xyXG4gICAgICAgIHRpdGxlOiAn5q2j5Zyo5L+d5a2YLi4uJyxcclxuICAgICAgICBtYXNrOiB0cnVlXHJcbiAgICAgIH0pXHJcbiAgICAgIHd4LnNhdmVJbWFnZVRvUGhvdG9zQWxidW0oe1xyXG4gICAgICAgIGZpbGVQYXRoOiB0aGlzLmRhdGEuc2hhcmVQYXRoLFxyXG4gICAgICAgIHN1Y2Nlc3M6ICgpID0+IHtcclxuICAgICAgICAgIHd4LnNob3dUb2FzdCh7XHJcbiAgICAgICAgICAgIHRpdGxlOiAn5L+d5a2Y5oiQ5YqfJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdjbG9zZScpXHJcbiAgICAgICAgICB9LCAzMDApXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmYWlsOiAoKSA9PiB7XHJcbiAgICAgICAgICB3eC5nZXRTZXR0aW5nKHtcclxuICAgICAgICAgICAgc3VjY2VzczogcmVzID0+IHtcclxuICAgICAgICAgICAgICBsZXQgYXV0aFNldHRpbmcgPSByZXMuYXV0aFNldHRpbmdcclxuICAgICAgICAgICAgICBpZiAoIWF1dGhTZXR0aW5nWydzY29wZS53cml0ZVBob3Rvc0FsYnVtJ10pIHtcclxuICAgICAgICAgICAgICAgIHd4LnNob3dNb2RhbCh7XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5o+Q56S6JyxcclxuICAgICAgICAgICAgICAgICAgY29udGVudDogJ+aCqOacquW8gOWQr+S/neWtmOWbvueJh+WIsOebuOWGjOeahOadg+mZkO+8jOivt+eCueWHu+ehruWumuWOu+W8gOWQr+adg+mZkO+8gScsXHJcbiAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5jb25maXJtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB3eC5vcGVuU2V0dGluZygpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB3eC5oaWRlTG9hZGluZygpXHJcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2VcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyRXZlbnQoJ2Nsb3NlJylcclxuICAgICAgICAgIH0sIDMwMClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG59KVxyXG4iXX0=