@wppconnect/server 2.0.1 → 2.1.1
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/CHANGELOG.md +4 -0
- package/README.md +98 -28
- package/dist/config/upload.js +1 -1
- package/dist/config.js +8 -2
- package/dist/controller/catalogController.js +296 -29
- package/dist/controller/deviceController.js +875 -30
- package/dist/controller/encryptController.js +14 -2
- package/dist/controller/groupController.js +343 -9
- package/dist/controller/labelsController.js +68 -1
- package/dist/controller/messageController.js +289 -40
- package/dist/controller/miscController.js +221 -0
- package/dist/controller/orderController.js +27 -3
- package/dist/controller/sessionController.js +313 -8
- package/dist/controller/statusController.js +53 -5
- package/dist/index.js +7 -7
- package/dist/mapper/index.js +2 -2
- package/dist/middleware/auth.js +16 -15
- package/dist/middleware/healthCheck.js +15 -1
- package/dist/middleware/statusConnection.js +2 -1
- package/dist/routes/index.js +741 -710
- package/dist/swagger-backup.json +21463 -0
- package/dist/swagger.js +100 -0
- package/dist/swagger.json +5132 -20462
- package/dist/types/express/index.d.js +2 -0
- package/dist/util/chatWootClient.js +49 -45
- package/dist/util/createSessionUtil.js +55 -45
- package/dist/util/db/mongodb/db.js +7 -7
- package/dist/util/functions.js +31 -23
- package/dist/util/getAllTokens.js +1 -1
- package/dist/util/logger.js +22 -22
- package/dist/util/manageSession.js +130 -0
- package/dist/util/sessionUtil.js +5 -3
- package/dist/util/tokenStore/FileTokenStore/FileTokenStore.js +7 -7
- package/dist/util/tokenStore/mongodbTokenStory.js +2 -3
- package/dist/util/tokenStore/redisTokenStory.js +25 -25
- package/docker-compose.yml +1 -1
- package/package.json +39 -32
- package/wppconnect_tokens/wppconnect.json +0 -0
- package/dist/types/Request.js +0 -2
- package/wppconnect_tokens/bugpromo.data.json +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.checkConnectionSession = checkConnectionSession;exports.closeSession = closeSession;exports.download = download;exports.downloadMediaByMessage = downloadMediaByMessage;exports.getMediaByMessage = getMediaByMessage;exports.getQrCode = getQrCode;exports.getSessionState = getSessionState;exports.killServiceWorker = killServiceWorker;exports.logOutSession = logOutSession;exports.restartService = restartService;exports.showAllSessions = showAllSessions;exports.startAllSessions = startAllSessions;exports.startSession = startSession;exports.subscribePresence = subscribePresence;
|
|
1
|
+
"use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports, "__esModule", { value: true });exports.checkConnectionSession = checkConnectionSession;exports.closeSession = closeSession;exports.download = download;exports.downloadMediaByMessage = downloadMediaByMessage;exports.editBusinessProfile = editBusinessProfile;exports.getMediaByMessage = getMediaByMessage;exports.getQrCode = getQrCode;exports.getSessionState = getSessionState;exports.killServiceWorker = killServiceWorker;exports.logOutSession = logOutSession;exports.restartService = restartService;exports.showAllSessions = showAllSessions;exports.startAllSessions = startAllSessions;exports.startSession = startSession;exports.subscribePresence = subscribePresence;
|
|
2
|
+
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
|
|
@@ -21,7 +22,6 @@ var _qrcode = _interopRequireDefault(require("qrcode"));
|
|
|
21
22
|
|
|
22
23
|
var _package = require("../../package.json");
|
|
23
24
|
var _config = _interopRequireDefault(require("../config"));
|
|
24
|
-
|
|
25
25
|
var _createSessionUtil = _interopRequireDefault(require("../util/createSessionUtil"));
|
|
26
26
|
var _functions = require("../util/functions");
|
|
27
27
|
var _getAllTokens = _interopRequireDefault(require("../util/getAllTokens"));
|
|
@@ -59,8 +59,8 @@ var _sessionUtil = require("../util/sessionUtil"); /*
|
|
|
59
59
|
} catch (e) {
|
|
60
60
|
logger.error(e);
|
|
61
61
|
logger.warn(
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
'Erro ao descriptografar a midia, tentando fazer o download direto...'
|
|
63
|
+
);
|
|
64
64
|
try {
|
|
65
65
|
const buffer = await client.downloadMedia(message);
|
|
66
66
|
const filename = `./WhatsAppImages/file${message.t}`;
|
|
@@ -99,6 +99,19 @@ async function download(message, client, logger) {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
async function startAllSessions(req, res) {
|
|
102
|
+
/**
|
|
103
|
+
* #swagger.tags = ["Auth"]
|
|
104
|
+
#swagger.autoBody=false
|
|
105
|
+
#swagger.security = [{
|
|
106
|
+
"bearerAuth": []
|
|
107
|
+
}]
|
|
108
|
+
#swagger.parameters["session"] = {
|
|
109
|
+
schema: 'NERDWHATS_AMERICA'
|
|
110
|
+
}
|
|
111
|
+
#swagger.parameters["secretkey"] = {
|
|
112
|
+
schema: 'THISISMYSECURECODE'
|
|
113
|
+
}
|
|
114
|
+
*/
|
|
102
115
|
const { secretkey } = req.params;
|
|
103
116
|
const { authorization: token } = req.headers;
|
|
104
117
|
|
|
@@ -130,6 +143,19 @@ async function startAllSessions(req, res) {
|
|
|
130
143
|
}
|
|
131
144
|
|
|
132
145
|
async function showAllSessions(req, res) {
|
|
146
|
+
/**
|
|
147
|
+
* #swagger.tags = ["Auth"]
|
|
148
|
+
#swagger.autoBody=false
|
|
149
|
+
#swagger.security = [{
|
|
150
|
+
"bearerAuth": []
|
|
151
|
+
}]
|
|
152
|
+
#swagger.parameters["session"] = {
|
|
153
|
+
schema: 'NERDWHATS_AMERICA'
|
|
154
|
+
}
|
|
155
|
+
#swagger.parameters["secretkey"] = {
|
|
156
|
+
schema: ''
|
|
157
|
+
}
|
|
158
|
+
*/
|
|
133
159
|
const { secretkey } = req.params;
|
|
134
160
|
const { authorization: token } = req.headers;
|
|
135
161
|
|
|
@@ -158,6 +184,34 @@ async function showAllSessions(req, res) {
|
|
|
158
184
|
}
|
|
159
185
|
|
|
160
186
|
async function startSession(req, res) {
|
|
187
|
+
/**
|
|
188
|
+
* #swagger.tags = ["Auth"]
|
|
189
|
+
#swagger.autoBody=false
|
|
190
|
+
#swagger.security = [{
|
|
191
|
+
"bearerAuth": []
|
|
192
|
+
}]
|
|
193
|
+
#swagger.parameters["session"] = {
|
|
194
|
+
schema: 'NERDWHATS_AMERICA'
|
|
195
|
+
}
|
|
196
|
+
#swagger.requestBody = {
|
|
197
|
+
required: true,
|
|
198
|
+
"@content": {
|
|
199
|
+
"application/json": {
|
|
200
|
+
schema: {
|
|
201
|
+
type: "object",
|
|
202
|
+
properties: {
|
|
203
|
+
webhook: { type: "string" },
|
|
204
|
+
waitQrCode: { type: "boolean" },
|
|
205
|
+
}
|
|
206
|
+
},
|
|
207
|
+
example: {
|
|
208
|
+
webhook: "https://webhook.site/7cc2944d-3967-4cea-988c-d57ea80bce5f",
|
|
209
|
+
waitQrCode: false,
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
*/
|
|
161
215
|
const session = req.session;
|
|
162
216
|
const { waitQrCode = false } = req.body;
|
|
163
217
|
|
|
@@ -166,6 +220,32 @@ async function startSession(req, res) {
|
|
|
166
220
|
}
|
|
167
221
|
|
|
168
222
|
async function closeSession(req, res) {
|
|
223
|
+
/**
|
|
224
|
+
* #swagger.tags = ["Auth"]
|
|
225
|
+
#swagger.autoBody=false
|
|
226
|
+
#swagger.security = [{
|
|
227
|
+
"bearerAuth": []
|
|
228
|
+
}]
|
|
229
|
+
#swagger.parameters["session"] = {
|
|
230
|
+
schema: 'NERDWHATS_AMERICA'
|
|
231
|
+
}
|
|
232
|
+
#swagger.requestBody = {
|
|
233
|
+
required: true,
|
|
234
|
+
"@content": {
|
|
235
|
+
"application/json": {
|
|
236
|
+
schema: {
|
|
237
|
+
type: "object",
|
|
238
|
+
properties: {
|
|
239
|
+
clearSession: { type: "boolean" },
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
example: {
|
|
243
|
+
clearSession: false,
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
*/
|
|
169
249
|
const session = req.session;
|
|
170
250
|
const { clearSession = false } = req.body;
|
|
171
251
|
try {
|
|
@@ -203,9 +283,28 @@ async function closeSession(req, res) {
|
|
|
203
283
|
}
|
|
204
284
|
|
|
205
285
|
async function logOutSession(req, res) {
|
|
286
|
+
/**
|
|
287
|
+
* #swagger.tags = ["Auth"]
|
|
288
|
+
* #swagger.description = 'This route logout and delete session data'
|
|
289
|
+
#swagger.autoBody=false
|
|
290
|
+
#swagger.security = [{
|
|
291
|
+
"bearerAuth": []
|
|
292
|
+
}]
|
|
293
|
+
#swagger.parameters["session"] = {
|
|
294
|
+
schema: 'NERDWHATS_AMERICA'
|
|
295
|
+
}
|
|
296
|
+
*/
|
|
206
297
|
try {
|
|
207
298
|
const session = req.session;
|
|
208
299
|
await req.client.logout();
|
|
300
|
+
//await req.client.close();
|
|
301
|
+
delete _sessionUtil.clientsArray[req.session];
|
|
302
|
+
await _fs.default.promises.rm(_config.default.customUserDataDir + req.session, {
|
|
303
|
+
recursive: true
|
|
304
|
+
});
|
|
305
|
+
await _fs.default.promises.rm(
|
|
306
|
+
__dirname + `../../../tokens/${req.session}.data.json`
|
|
307
|
+
);
|
|
209
308
|
|
|
210
309
|
req.io.emit('whatsapp-status', false);
|
|
211
310
|
(0, _functions.callWebHook)(req.client, req, 'logoutsession', {
|
|
@@ -225,6 +324,16 @@ async function logOutSession(req, res) {
|
|
|
225
324
|
}
|
|
226
325
|
|
|
227
326
|
async function checkConnectionSession(req, res) {
|
|
327
|
+
/**
|
|
328
|
+
* #swagger.tags = ["Auth"]
|
|
329
|
+
#swagger.autoBody=false
|
|
330
|
+
#swagger.security = [{
|
|
331
|
+
"bearerAuth": []
|
|
332
|
+
}]
|
|
333
|
+
#swagger.parameters["session"] = {
|
|
334
|
+
schema: 'NERDWHATS_AMERICA'
|
|
335
|
+
}
|
|
336
|
+
*/
|
|
228
337
|
try {
|
|
229
338
|
await req.client.isConnected();
|
|
230
339
|
|
|
@@ -235,6 +344,32 @@ async function checkConnectionSession(req, res) {
|
|
|
235
344
|
}
|
|
236
345
|
|
|
237
346
|
async function downloadMediaByMessage(req, res) {
|
|
347
|
+
/**
|
|
348
|
+
* #swagger.tags = ["Messages"]
|
|
349
|
+
#swagger.autoBody=false
|
|
350
|
+
#swagger.security = [{
|
|
351
|
+
"bearerAuth": []
|
|
352
|
+
}]
|
|
353
|
+
#swagger.parameters["session"] = {
|
|
354
|
+
schema: 'NERDWHATS_AMERICA'
|
|
355
|
+
}
|
|
356
|
+
#swagger.requestBody = {
|
|
357
|
+
required: true,
|
|
358
|
+
"@content": {
|
|
359
|
+
"application/json": {
|
|
360
|
+
schema: {
|
|
361
|
+
type: "object",
|
|
362
|
+
properties: {
|
|
363
|
+
messageId: { type: "string" },
|
|
364
|
+
}
|
|
365
|
+
},
|
|
366
|
+
example: {
|
|
367
|
+
messageId: '<messageId>'
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
*/
|
|
238
373
|
const client = req.client;
|
|
239
374
|
const { messageId } = req.body;
|
|
240
375
|
|
|
@@ -275,6 +410,19 @@ async function downloadMediaByMessage(req, res) {
|
|
|
275
410
|
}
|
|
276
411
|
|
|
277
412
|
async function getMediaByMessage(req, res) {
|
|
413
|
+
/**
|
|
414
|
+
* #swagger.tags = ["Messages"]
|
|
415
|
+
#swagger.autoBody=false
|
|
416
|
+
#swagger.security = [{
|
|
417
|
+
"bearerAuth": []
|
|
418
|
+
}]
|
|
419
|
+
#swagger.parameters["session"] = {
|
|
420
|
+
schema: 'NERDWHATS_AMERICA'
|
|
421
|
+
}
|
|
422
|
+
#swagger.parameters["session"] = {
|
|
423
|
+
schema: 'messageId'
|
|
424
|
+
}
|
|
425
|
+
*/
|
|
278
426
|
const client = req.client;
|
|
279
427
|
const { messageId } = req.params;
|
|
280
428
|
|
|
@@ -309,6 +457,32 @@ async function getMediaByMessage(req, res) {
|
|
|
309
457
|
}
|
|
310
458
|
|
|
311
459
|
async function getSessionState(req, res) {
|
|
460
|
+
/**
|
|
461
|
+
* #swagger.tags = ["Auth"]
|
|
462
|
+
#swagger.autoBody=false
|
|
463
|
+
#swagger.security = [{
|
|
464
|
+
"bearerAuth": []
|
|
465
|
+
}]
|
|
466
|
+
#swagger.parameters["session"] = {
|
|
467
|
+
schema: 'NERDWHATS_AMERICA'
|
|
468
|
+
}
|
|
469
|
+
#swagger.requestBody = {
|
|
470
|
+
required: true,
|
|
471
|
+
"@content": {
|
|
472
|
+
"application/json": {
|
|
473
|
+
schema: {
|
|
474
|
+
type: "object",
|
|
475
|
+
properties: {
|
|
476
|
+
waitQrCode: { type: "boolean" },
|
|
477
|
+
}
|
|
478
|
+
},
|
|
479
|
+
example: {
|
|
480
|
+
waitQrCode: false
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
*/
|
|
312
486
|
try {
|
|
313
487
|
const { waitQrCode = false } = req.body;
|
|
314
488
|
const client = req.client;
|
|
@@ -337,15 +511,25 @@ async function getSessionState(req, res) {
|
|
|
337
511
|
}
|
|
338
512
|
|
|
339
513
|
async function getQrCode(req, res) {
|
|
514
|
+
/**
|
|
515
|
+
* #swagger.tags = ["Auth"]
|
|
516
|
+
#swagger.autoBody=false
|
|
517
|
+
#swagger.security = [{
|
|
518
|
+
"bearerAuth": []
|
|
519
|
+
}]
|
|
520
|
+
#swagger.parameters["session"] = {
|
|
521
|
+
schema: 'NERDWHATS_AMERICA'
|
|
522
|
+
}
|
|
523
|
+
*/
|
|
340
524
|
try {
|
|
341
525
|
if (req?.client?.urlcode) {
|
|
342
526
|
const qr = req.client.urlcode ?
|
|
343
527
|
await _qrcode.default.toDataURL(req.client.urlcode) :
|
|
344
528
|
null;
|
|
345
529
|
const img = Buffer.from(
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
530
|
+
qr.replace(/^data:image\/(png|jpeg|jpg);base64,/, ''),
|
|
531
|
+
'base64'
|
|
532
|
+
);
|
|
349
533
|
|
|
350
534
|
res.writeHead(200, {
|
|
351
535
|
'Content-Type': 'image/png',
|
|
@@ -373,6 +557,17 @@ async function getQrCode(req, res) {
|
|
|
373
557
|
}
|
|
374
558
|
|
|
375
559
|
async function killServiceWorker(req, res) {
|
|
560
|
+
/**
|
|
561
|
+
* #swagger.ignore=true
|
|
562
|
+
* #swagger.tags = ["Messages"]
|
|
563
|
+
#swagger.autoBody=false
|
|
564
|
+
#swagger.security = [{
|
|
565
|
+
"bearerAuth": []
|
|
566
|
+
}]
|
|
567
|
+
#swagger.parameters["session"] = {
|
|
568
|
+
schema: 'NERDWHATS_AMERICA'
|
|
569
|
+
}
|
|
570
|
+
*/
|
|
376
571
|
try {
|
|
377
572
|
return res.
|
|
378
573
|
status(200).
|
|
@@ -388,6 +583,17 @@ async function killServiceWorker(req, res) {
|
|
|
388
583
|
}
|
|
389
584
|
|
|
390
585
|
async function restartService(req, res) {
|
|
586
|
+
/**
|
|
587
|
+
* #swagger.ignore=true
|
|
588
|
+
* #swagger.tags = ["Messages"]
|
|
589
|
+
#swagger.autoBody=false
|
|
590
|
+
#swagger.security = [{
|
|
591
|
+
"bearerAuth": []
|
|
592
|
+
}]
|
|
593
|
+
#swagger.parameters["session"] = {
|
|
594
|
+
schema: 'NERDWHATS_AMERICA'
|
|
595
|
+
}
|
|
596
|
+
*/
|
|
391
597
|
try {
|
|
392
598
|
return res.
|
|
393
599
|
status(200).
|
|
@@ -402,6 +608,36 @@ async function restartService(req, res) {
|
|
|
402
608
|
}
|
|
403
609
|
|
|
404
610
|
async function subscribePresence(req, res) {
|
|
611
|
+
/**
|
|
612
|
+
* #swagger.tags = ["Misc"]
|
|
613
|
+
#swagger.autoBody=false
|
|
614
|
+
#swagger.security = [{
|
|
615
|
+
"bearerAuth": []
|
|
616
|
+
}]
|
|
617
|
+
#swagger.parameters["session"] = {
|
|
618
|
+
schema: 'NERDWHATS_AMERICA'
|
|
619
|
+
}
|
|
620
|
+
#swagger.requestBody = {
|
|
621
|
+
required: true,
|
|
622
|
+
"@content": {
|
|
623
|
+
"application/json": {
|
|
624
|
+
schema: {
|
|
625
|
+
type: "object",
|
|
626
|
+
properties: {
|
|
627
|
+
phone: { type: "string" },
|
|
628
|
+
isGroup: { type: "boolean" },
|
|
629
|
+
all: { type: "boolean" },
|
|
630
|
+
}
|
|
631
|
+
},
|
|
632
|
+
example: {
|
|
633
|
+
phone: '5521999999999',
|
|
634
|
+
isGroup: false,
|
|
635
|
+
all: false,
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
*/
|
|
405
641
|
try {
|
|
406
642
|
const { phone, isGroup = false, all = false } = req.body;
|
|
407
643
|
|
|
@@ -432,4 +668,73 @@ async function subscribePresence(req, res) {
|
|
|
432
668
|
});
|
|
433
669
|
}
|
|
434
670
|
}
|
|
435
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9taW1lVHlwZXMiLCJfcXJjb2RlIiwiX3BhY2thZ2UiLCJfY29uZmlnIiwiX2NyZWF0ZVNlc3Npb25VdGlsIiwiX2Z1bmN0aW9ucyIsIl9nZXRBbGxUb2tlbnMiLCJfc2Vzc2lvblV0aWwiLCJTZXNzaW9uVXRpbCIsIkNyZWF0ZVNlc3Npb25VdGlsIiwiZG93bmxvYWRGaWxlRnVuY3Rpb24iLCJtZXNzYWdlIiwiY2xpZW50IiwibG9nZ2VyIiwiYnVmZmVyIiwiZGVjcnlwdEZpbGUiLCJmaWxlbmFtZSIsInQiLCJmcyIsImV4aXN0c1N5bmMiLCJyZXN1bHQiLCJ0eXBlIiwibWltZSIsImV4dGVuc2lvbiIsIm1pbWV0eXBlIiwid3JpdGVGaWxlIiwiZXJyIiwiZXJyb3IiLCJlIiwid2FybiIsImRvd25sb2FkTWVkaWEiLCJkb3dubG9hZCIsInBhdGgiLCJyZXBsYWNlIiwic3RhcnRBbGxTZXNzaW9ucyIsInJlcSIsInJlcyIsInNlY3JldGtleSIsInBhcmFtcyIsImF1dGhvcml6YXRpb24iLCJ0b2tlbiIsImhlYWRlcnMiLCJ0b2tlbkRlY3J5cHQiLCJ1bmRlZmluZWQiLCJzcGxpdCIsImFsbFNlc3Npb25zIiwiZ2V0QWxsVG9rZW5zIiwic2VydmVyT3B0aW9ucyIsInNlY3JldEtleSIsInN0YXR1cyIsImpzb24iLCJyZXNwb25zZSIsIm1hcCIsInNlc3Npb24iLCJ1dGlsIiwib3BlbmRhdGEiLCJzaG93QWxsU2Vzc2lvbnMiLCJhcnIiLCJPYmplY3QiLCJrZXlzIiwiY2xpZW50c0FycmF5IiwiZm9yRWFjaCIsIml0ZW0iLCJwdXNoIiwic3RhcnRTZXNzaW9uIiwid2FpdFFyQ29kZSIsImJvZHkiLCJnZXRTZXNzaW9uU3RhdGUiLCJjbG9zZVNlc3Npb24iLCJjbGVhclNlc3Npb24iLCJzZXNzaW9uRm9sZGVyIiwiY29uZmlnIiwiY3VzdG9tVXNlckRhdGFEaXIiLCJjb25zb2xlIiwibG9nIiwicm1kaXJTeW5jIiwicmVjdXJzaXZlIiwiY2xvc2UiLCJpbyIsImVtaXQiLCJjYWxsV2ViSG9vayIsImNvbm5lY3RlZCIsImxvZ091dFNlc3Npb24iLCJsb2dvdXQiLCJjaGVja0Nvbm5lY3Rpb25TZXNzaW9uIiwiaXNDb25uZWN0ZWQiLCJkb3dubG9hZE1lZGlhQnlNZXNzYWdlIiwibWVzc2FnZUlkIiwiaXNNZWRpYSIsImdldE1lc3NhZ2VCeUlkIiwiaXNNTVMiLCJiYXNlNjQiLCJ0b1N0cmluZyIsImdldE1lZGlhQnlNZXNzYWdlIiwiZXgiLCJxciIsInVybGNvZGUiLCJRUkNvZGUiLCJ0b0RhdGFVUkwiLCJxcmNvZGUiLCJ2ZXJzaW9uIiwiZ2V0UXJDb2RlIiwiaW1nIiwiQnVmZmVyIiwiZnJvbSIsIndyaXRlSGVhZCIsImxlbmd0aCIsImVuZCIsImtpbGxTZXJ2aWNlV29ya2VyIiwicmVzdGFydFNlcnZpY2UiLCJzdWJzY3JpYmVQcmVzZW5jZSIsInBob25lIiwiaXNHcm91cCIsImFsbCIsImNvbnRhY3RzIiwiZ3JvdXBzIiwiZ2V0QWxsR3JvdXBzIiwicCIsImlkIiwiX3NlcmlhbGl6ZWQiLCJjaGF0cyIsImdldEFsbENvbnRhY3RzIiwiYyIsImNvbnRhdG8iLCJjb250YWN0VG9BcnJheSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVyL3Nlc3Npb25Db250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBXUFBDb25uZWN0IFRlYW1cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1jbGVhclNlc3Npb25pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IE1lc3NhZ2UsIFdoYXRzYXBwIH0gZnJvbSAnQHdwcGNvbm5lY3QtdGVhbS93cHBjb25uZWN0JztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJztcbmltcG9ydCBRUkNvZGUgZnJvbSAncXJjb2RlJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJ3dpbnN0b24nO1xuXG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuLi90eXBlcy9SZXF1ZXN0JztcbmltcG9ydCBDcmVhdGVTZXNzaW9uVXRpbCBmcm9tICcuLi91dGlsL2NyZWF0ZVNlc3Npb25VdGlsJztcbmltcG9ydCB7IGNhbGxXZWJIb29rLCBjb250YWN0VG9BcnJheSB9IGZyb20gJy4uL3V0aWwvZnVuY3Rpb25zJztcbmltcG9ydCBnZXRBbGxUb2tlbnMgZnJvbSAnLi4vdXRpbC9nZXRBbGxUb2tlbnMnO1xuaW1wb3J0IHsgY2xpZW50c0FycmF5IH0gZnJvbSAnLi4vdXRpbC9zZXNzaW9uVXRpbCc7XG5cbmNvbnN0IFNlc3Npb25VdGlsID0gbmV3IENyZWF0ZVNlc3Npb25VdGlsKCk7XG5cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkRmlsZUZ1bmN0aW9uKFxuICBtZXNzYWdlOiBNZXNzYWdlLFxuICBjbGllbnQ6IFdoYXRzYXBwLFxuICBsb2dnZXI6IExvZ2dlclxuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2xpZW50LmRlY3J5cHRGaWxlKG1lc3NhZ2UpO1xuXG4gICAgY29uc3QgZmlsZW5hbWUgPSBgLi9XaGF0c0FwcEltYWdlcy9maWxlJHttZXNzYWdlLnR9YDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZW5hbWUpKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSAncHR0Jykge1xuICAgICAgICByZXN1bHQgPSBgJHtmaWxlbmFtZX0ub2dhYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGAke2ZpbGVuYW1lfS4ke21pbWUuZXh0ZW5zaW9uKG1lc3NhZ2UubWltZXR5cGUpfWA7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShyZXN1bHQsIGJ1ZmZlciwgKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7ZmlsZW5hbWV9LiR7bWltZS5leHRlbnNpb24obWVzc2FnZS5taW1ldHlwZSl9YDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoZSk7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRXJybyBhbyBkZXNjcmlwdG9ncmFmYXIgYSBtaWRpYSwgdGVudGFuZG8gZmF6ZXIgbyBkb3dubG9hZCBkaXJldG8uLi4nXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2xpZW50LmRvd25sb2FkTWVkaWEobWVzc2FnZSk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGAuL1doYXRzQXBwSW1hZ2VzL2ZpbGUke21lc3NhZ2UudH1gO1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVuYW1lKSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdwdHQnKSB7XG4gICAgICAgICAgcmVzdWx0ID0gYCR7ZmlsZW5hbWV9Lm9nYWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gYCR7ZmlsZW5hbWV9LiR7bWltZS5leHRlbnNpb24obWVzc2FnZS5taW1ldHlwZSl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShyZXN1bHQsIGJ1ZmZlciwgKGVycikgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgJHtmaWxlbmFtZX0uJHttaW1lLmV4dGVuc2lvbihtZXNzYWdlLm1pbWV0eXBlKX1gO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihlKTtcbiAgICAgIGxvZ2dlci53YXJuKCdOw6NvIGZvaSBwb3Nzw612ZWwgYmFpeGFyIGEgbcOtZGlhLi4uJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3dubG9hZChtZXNzYWdlOiBhbnksIGNsaWVudDogYW55LCBsb2dnZXI6IGFueSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCBkb3dubG9hZEZpbGVGdW5jdGlvbihtZXNzYWdlLCBjbGllbnQsIGxvZ2dlcik7XG4gICAgcmV0dXJuIHBhdGg/LnJlcGxhY2UoJy4vJywgJycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKGUpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydEFsbFNlc3Npb25zKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgY29uc3QgeyBzZWNyZXRrZXkgfSA9IHJlcS5wYXJhbXM7XG4gIGNvbnN0IHsgYXV0aG9yaXphdGlvbjogdG9rZW4gfSA9IHJlcS5oZWFkZXJzO1xuXG4gIGxldCB0b2tlbkRlY3J5cHQgPSAnJztcblxuICBpZiAoc2VjcmV0a2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICB0b2tlbkRlY3J5cHQgPSAodG9rZW4gYXMgYW55KS5zcGxpdCgnICcpWzBdO1xuICB9IGVsc2Uge1xuICAgIHRva2VuRGVjcnlwdCA9IHNlY3JldGtleTtcbiAgfVxuXG4gIGNvbnN0IGFsbFNlc3Npb25zID0gYXdhaXQgZ2V0QWxsVG9rZW5zKHJlcSk7XG5cbiAgaWYgKHRva2VuRGVjcnlwdCAhPT0gcmVxLnNlcnZlck9wdGlvbnMuc2VjcmV0S2V5KSB7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgIHJlc3BvbnNlOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ1RoZSB0b2tlbiBpcyBpbmNvcnJlY3QnLFxuICAgIH0pO1xuICB9XG5cbiAgYWxsU2Vzc2lvbnMubWFwKGFzeW5jIChzZXNzaW9uOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB1dGlsID0gbmV3IENyZWF0ZVNlc3Npb25VdGlsKCk7XG4gICAgYXdhaXQgdXRpbC5vcGVuZGF0YShyZXEsIHNlc3Npb24pO1xuICB9KTtcblxuICByZXR1cm4gYXdhaXQgcmVzXG4gICAgLnN0YXR1cygyMDEpXG4gICAgLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgbWVzc2FnZTogJ1N0YXJ0aW5nIGFsbCBzZXNzaW9ucycgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG93QWxsU2Vzc2lvbnMocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICBjb25zdCB7IHNlY3JldGtleSB9ID0gcmVxLnBhcmFtcztcbiAgY29uc3QgeyBhdXRob3JpemF0aW9uOiB0b2tlbiB9ID0gcmVxLmhlYWRlcnM7XG5cbiAgbGV0IHRva2VuRGVjcnlwdDogYW55ID0gJyc7XG5cbiAgaWYgKHNlY3JldGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdG9rZW5EZWNyeXB0ID0gdG9rZW4/LnNwbGl0KCcgJylbMF07XG4gIH0gZWxzZSB7XG4gICAgdG9rZW5EZWNyeXB0ID0gc2VjcmV0a2V5O1xuICB9XG5cbiAgY29uc3QgYXJyOiBhbnkgPSBbXTtcblxuICBpZiAodG9rZW5EZWNyeXB0ICE9PSByZXEuc2VydmVyT3B0aW9ucy5zZWNyZXRLZXkpIHtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgcmVzcG9uc2U6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogJ1RoZSB0b2tlbiBpcyBpbmNvcnJlY3QnLFxuICAgIH0pO1xuICB9XG5cbiAgT2JqZWN0LmtleXMoY2xpZW50c0FycmF5KS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgYXJyLnB1c2goeyBzZXNzaW9uOiBpdGVtIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyByZXNwb25zZTogYXJyIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXNzaW9uKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcS5zZXNzaW9uO1xuICBjb25zdCB7IHdhaXRRckNvZGUgPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG5cbiAgYXdhaXQgZ2V0U2Vzc2lvblN0YXRlKHJlcSwgcmVzKTtcbiAgYXdhaXQgU2Vzc2lvblV0aWwub3BlbmRhdGEocmVxLCBzZXNzaW9uLCB3YWl0UXJDb2RlID8gcmVzIDogbnVsbCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVNlc3Npb24ocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICBjb25zdCBzZXNzaW9uID0gcmVxLnNlc3Npb247XG4gIGNvbnN0IHsgY2xlYXJTZXNzaW9uID0gZmFsc2UgfSA9IHJlcS5ib2R5O1xuICB0cnkge1xuICAgIGlmICgoY2xpZW50c0FycmF5IGFzIGFueSlbc2Vzc2lvbl0uc3RhdHVzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzXG4gICAgICAgIC5zdGF0dXMoMjAwKVxuICAgICAgICAuanNvbih7IHN0YXR1czogdHJ1ZSwgbWVzc2FnZTogJ1Nlc3Npb24gc3VjY2Vzc2Z1bGx5IGNsb3NlZCcgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIChjbGllbnRzQXJyYXkgYXMgYW55KVtzZXNzaW9uXSA9IHsgc3RhdHVzOiBudWxsIH07XG5cbiAgICAgIGlmIChjbGVhclNlc3Npb24pIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbkZvbGRlciA9IGAke2NvbmZpZy5jdXN0b21Vc2VyRGF0YURpcn0vJHtzZXNzaW9ufWA7XG4gICAgICAgIGlmIChmcy5leGlzdHNTeW5jKHNlc3Npb25Gb2xkZXIpKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0YW5kbyBwYXN0YTogJyArIHNlc3Npb25Gb2xkZXIpO1xuICAgICAgICAgIGZzLnJtZGlyU3luYyhzZXNzaW9uRm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgcmVxLmNsaWVudC5jbG9zZSgpO1xuICAgICAgcmVxLmlvLmVtaXQoJ3doYXRzYXBwLXN0YXR1cycsIGZhbHNlKTtcbiAgICAgIGNhbGxXZWJIb29rKHJlcS5jbGllbnQsIHJlcSwgJ2Nsb3Nlc2Vzc2lvbicsIHtcbiAgICAgICAgbWVzc2FnZTogYFNlc3Npb246ICR7c2Vzc2lvbn0gZGlzY29ubmVjdGVkYCxcbiAgICAgICAgY29ubmVjdGVkOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzXG4gICAgICAgIC5zdGF0dXMoMjAwKVxuICAgICAgICAuanNvbih7IHN0YXR1czogdHJ1ZSwgbWVzc2FnZTogJ1Nlc3Npb24gc3VjY2Vzc2Z1bGx5IGNsb3NlZCcgfSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBhd2FpdCByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6IGZhbHNlLCBtZXNzYWdlOiAnRXJyb3IgY2xvc2luZyBzZXNzaW9uJywgZXJyb3IgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvZ091dFNlc3Npb24ocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICB0cnkge1xuICAgIGNvbnN0IHNlc3Npb24gPSByZXEuc2Vzc2lvbjtcbiAgICBhd2FpdCByZXEuY2xpZW50LmxvZ291dCgpO1xuXG4gICAgcmVxLmlvLmVtaXQoJ3doYXRzYXBwLXN0YXR1cycsIGZhbHNlKTtcbiAgICBjYWxsV2ViSG9vayhyZXEuY2xpZW50LCByZXEsICdsb2dvdXRzZXNzaW9uJywge1xuICAgICAgbWVzc2FnZTogYFNlc3Npb246ICR7c2Vzc2lvbn0gbG9nZ2VkIG91dGAsXG4gICAgICBjb25uZWN0ZWQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogdHJ1ZSwgbWVzc2FnZTogJ1Nlc3Npb24gc3VjY2Vzc2Z1bGx5IGNsb3NlZCcgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIGF3YWl0IHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogZmFsc2UsIG1lc3NhZ2U6ICdFcnJvciBjbG9zaW5nIHNlc3Npb24nLCBlcnJvciB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tDb25uZWN0aW9uU2Vzc2lvbihyZXE6IFJlcXVlc3QsIHJlczogYW55KSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVxLmNsaWVudC5pc0Nvbm5lY3RlZCgpO1xuXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoMjAwKS5qc29uKHsgc3RhdHVzOiB0cnVlLCBtZXNzYWdlOiAnQ29ubmVjdGVkJyB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6IGZhbHNlLCBtZXNzYWdlOiAnRGlzY29ubmVjdGVkJyB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRNZWRpYUJ5TWVzc2FnZShyZXE6IFJlcXVlc3QsIHJlczogYW55KSB7XG4gIGNvbnN0IGNsaWVudCA9IHJlcS5jbGllbnQ7XG4gIGNvbnN0IHsgbWVzc2FnZUlkIH0gPSByZXEuYm9keTtcblxuICBsZXQgbWVzc2FnZTtcblxuICB0cnkge1xuICAgIGlmICghbWVzc2FnZUlkLmlzTWVkaWEgfHwgIW1lc3NhZ2VJZC50eXBlKSB7XG4gICAgICBtZXNzYWdlID0gYXdhaXQgY2xpZW50LmdldE1lc3NhZ2VCeUlkKG1lc3NhZ2VJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlSWQ7XG4gICAgfVxuXG4gICAgaWYgKCFtZXNzYWdlKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTWVzc2FnZSBub3QgZm91bmQnLFxuICAgICAgfSk7XG5cbiAgICBpZiAoIShtZXNzYWdlWydtaW1ldHlwZSddIHx8IG1lc3NhZ2UuaXNNZWRpYSB8fCBtZXNzYWdlLmlzTU1TKSlcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7XG4gICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgbWVzc2FnZTogJ01lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBtZWRpYScsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGNsaWVudC5kZWNyeXB0RmlsZShtZXNzYWdlKTtcblxuICAgIHJldHVybiByZXNcbiAgICAgIC5zdGF0dXMoMjAwKVxuICAgICAgLmpzb24oeyBiYXNlNjQ6IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0JyksIG1pbWV0eXBlOiBtZXNzYWdlLm1pbWV0eXBlIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0RlY3J5cHQgZmlsZSBlcnJvcicsXG4gICAgICBlcnJvcjogZSxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0TWVkaWFCeU1lc3NhZ2UocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICBjb25zdCBjbGllbnQgPSByZXEuY2xpZW50O1xuICBjb25zdCB7IG1lc3NhZ2VJZCB9ID0gcmVxLnBhcmFtcztcblxuICB0cnkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCBjbGllbnQuZ2V0TWVzc2FnZUJ5SWQobWVzc2FnZUlkKTtcblxuICAgIGlmICghbWVzc2FnZSlcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7XG4gICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgbWVzc2FnZTogJ01lc3NhZ2Ugbm90IGZvdW5kJyxcbiAgICAgIH0pO1xuXG4gICAgaWYgKCEobWVzc2FnZVsnbWltZXR5cGUnXSB8fCBtZXNzYWdlLmlzTWVkaWEgfHwgbWVzc2FnZS5pc01NUykpXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gbWVkaWEnLFxuICAgICAgfSk7XG5cbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjbGllbnQuZGVjcnlwdEZpbGUobWVzc2FnZSk7XG5cbiAgICByZXR1cm4gcmVzXG4gICAgICAuc3RhdHVzKDIwMClcbiAgICAgIC5qc29uKHsgYmFzZTY0OiBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpLCBtaW1ldHlwZTogbWVzc2FnZS5taW1ldHlwZSB9KTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGV4KTtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ1RoZSBzZXNzaW9uIGlzIG5vdCBhY3RpdmUnLFxuICAgICAgZXJyb3I6IGV4LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTZXNzaW9uU3RhdGUocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICB0cnkge1xuICAgIGNvbnN0IHsgd2FpdFFyQ29kZSA9IGZhbHNlIH0gPSByZXEuYm9keTtcbiAgICBjb25zdCBjbGllbnQgPSByZXEuY2xpZW50O1xuICAgIGNvbnN0IHFyID1cbiAgICAgIGNsaWVudD8udXJsY29kZSAhPSBudWxsICYmIGNsaWVudD8udXJsY29kZSAhPSAnJ1xuICAgICAgICA/IGF3YWl0IFFSQ29kZS50b0RhdGFVUkwoY2xpZW50LnVybGNvZGUpXG4gICAgICAgIDogbnVsbDtcblxuICAgIGlmICgoY2xpZW50ID09IG51bGwgfHwgY2xpZW50LnN0YXR1cyA9PSBudWxsKSAmJiAhd2FpdFFyQ29kZSlcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogJ0NMT1NFRCcsIHFyY29kZTogbnVsbCB9KTtcbiAgICBlbHNlIGlmIChjbGllbnQgIT0gbnVsbClcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbih7XG4gICAgICAgIHN0YXR1czogY2xpZW50LnN0YXR1cyxcbiAgICAgICAgcXJjb2RlOiBxcixcbiAgICAgICAgdXJsY29kZTogY2xpZW50LnVybGNvZGUsXG4gICAgICAgIHZlcnNpb246IHZlcnNpb24sXG4gICAgICB9KTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGV4KTtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ1RoZSBzZXNzaW9uIGlzIG5vdCBhY3RpdmUnLFxuICAgICAgZXJyb3I6IGV4LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRRckNvZGUocmVxOiBSZXF1ZXN0LCByZXM6IGFueSkge1xuICB0cnkge1xuICAgIGlmIChyZXE/LmNsaWVudD8udXJsY29kZSkge1xuICAgICAgY29uc3QgcXIgPSByZXEuY2xpZW50LnVybGNvZGVcbiAgICAgICAgPyBhd2FpdCBRUkNvZGUudG9EYXRhVVJMKHJlcS5jbGllbnQudXJsY29kZSlcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgaW1nID0gQnVmZmVyLmZyb20oXG4gICAgICAgIChxciBhcyBhbnkpLnJlcGxhY2UoL15kYXRhOmltYWdlXFwvKHBuZ3xqcGVnfGpwZyk7YmFzZTY0LC8sICcnKSxcbiAgICAgICAgJ2Jhc2U2NCdcbiAgICAgICk7XG5cbiAgICAgIHJlcy53cml0ZUhlYWQoMjAwLCB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnaW1hZ2UvcG5nJyxcbiAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoJzogaW1nLmxlbmd0aCxcbiAgICAgIH0pO1xuICAgICAgcmVzLmVuZChpbWcpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcS5jbGllbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgICBzdGF0dXM6IG51bGwsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgJ1Nlc3Npb24gbm90IHN0YXJ0ZWQuIFBsZWFzZSwgdXNlIHRoZSAvc3RhcnQtc2Vzc2lvbiByb3V0ZSwgZm9yIGluaXRpYWxpemF0aW9uIHlvdXIgc2Vzc2lvbicsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgICAgc3RhdHVzOiByZXEuY2xpZW50LnN0YXR1cyxcbiAgICAgICAgbWVzc2FnZTogJ1FSQ29kZSBpcyBub3QgYXZhaWxhYmxlLi4uJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXgpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGV4KTtcbiAgICByZXR1cm4gcmVzXG4gICAgICAuc3RhdHVzKDUwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCBtZXNzYWdlOiAnRXJyb3IgcmV0cmlldmluZyBRUkNvZGUnLCBlcnJvcjogZXggfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGtpbGxTZXJ2aWNlV29ya2VyKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVzXG4gICAgICAuc3RhdHVzKDIwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCByZXNwb25zZTogJ05vdCBpbXBsZW1lbnRlZCB5ZXQnIH0pO1xuICB9IGNhdGNoIChleCkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXgpO1xuICAgIHJldHVybiByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnVGhlIHNlc3Npb24gaXMgbm90IGFjdGl2ZScsXG4gICAgICBlcnJvcjogZXgsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc3RhcnRTZXJ2aWNlKHJlcTogUmVxdWVzdCwgcmVzOiBhbnkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVzXG4gICAgICAuc3RhdHVzKDIwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCByZXNwb25zZTogJ05vdCBpbXBsZW1lbnRlZCB5ZXQnIH0pO1xuICB9IGNhdGNoIChleCkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXgpO1xuICAgIHJldHVybiByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICByZXNwb25zZTogeyBtZXNzYWdlOiAnVGhlIHNlc3Npb24gaXMgbm90IGFjdGl2ZScsIGVycm9yOiBleCB9LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdWJzY3JpYmVQcmVzZW5jZShyZXE6IFJlcXVlc3QsIHJlczogYW55KSB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyBwaG9uZSwgaXNHcm91cCA9IGZhbHNlLCBhbGwgPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG5cbiAgICBpZiAoYWxsKSB7XG4gICAgICBsZXQgY29udGFjdHM7XG4gICAgICBpZiAoaXNHcm91cCkge1xuICAgICAgICBjb25zdCBncm91cHMgPSBhd2FpdCByZXEuY2xpZW50LmdldEFsbEdyb3VwcyhmYWxzZSk7XG4gICAgICAgIGNvbnRhY3RzID0gZ3JvdXBzLm1hcCgocDogYW55KSA9PiBwLmlkLl9zZXJpYWxpemVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoYXRzID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxDb250YWN0cygpO1xuICAgICAgICBjb250YWN0cyA9IGNoYXRzLm1hcCgoYzogYW55KSA9PiBjLmlkLl9zZXJpYWxpemVkKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHJlcS5jbGllbnQuc3Vic2NyaWJlUHJlc2VuY2UoY29udGFjdHMpO1xuICAgIH0gZWxzZVxuICAgICAgZm9yIChjb25zdCBjb250YXRvIG9mIGNvbnRhY3RUb0FycmF5KHBob25lLCBpc0dyb3VwKSkge1xuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnN1YnNjcmliZVByZXNlbmNlKGNvbnRhdG8pO1xuICAgICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgcmVzcG9uc2U6IHsgbWVzc2FnZTogJ1N1YnNjcmliZSBwcmVzZW5jZSBleGVjdXRlZCcgfSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXdhaXQgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIHN1YnNjcmliZSBwcmVzZW5jZScsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQSxJQUFBQSxHQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxVQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7OztBQUdBLElBQUFHLFFBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTs7QUFFQSxJQUFBSyxrQkFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sYUFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBLHdCQUFtRCxDQTNCbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBZUEsTUFBTVMsV0FBVyxHQUFHLElBQUlDLDBCQUFpQixFQUFFLENBRTNDLGVBQWVDLG9CQUFvQkEsQ0FDakNDLE9BQWdCLEVBQ2hCQyxNQUFnQixFQUNoQkMsTUFBYyxFQUNkLENBQ0EsSUFBSSxDQUNGLE1BQU1DLE1BQU0sR0FBRyxNQUFNRixNQUFNLENBQUNHLFdBQVcsQ0FBQ0osT0FBTyxDQUFDLENBRWhELE1BQU1LLFFBQVEsR0FBSSx3QkFBdUJMLE9BQU8sQ0FBQ00sQ0FBRSxFQUFDLENBQ3BELElBQUksQ0FBQ0MsV0FBRSxDQUFDQyxVQUFVLENBQUNILFFBQVEsQ0FBQyxFQUFFLENBQzVCLElBQUlJLE1BQU0sR0FBRyxFQUFFO01BQ2YsSUFBSVQsT0FBTyxDQUFDVSxJQUFJLEtBQUssS0FBSyxFQUFFO1FBQzFCRCxNQUFNLEdBQUksR0FBRUosUUFBUyxNQUFLO01BQzVCLENBQUMsTUFBTTtRQUNMSSxNQUFNLEdBQUksR0FBRUosUUFBUyxJQUFHTSxrQkFBSSxDQUFDQyxTQUFTLENBQUNaLE9BQU8sQ0FBQ2EsUUFBUSxDQUFFLEVBQUM7TUFDNUQ7O01BRUEsTUFBTU4sV0FBRSxDQUFDTyxTQUFTLENBQUNMLE1BQU0sRUFBRU4sTUFBTSxFQUFFLENBQUNZLEdBQUcsS0FBSztRQUMxQyxJQUFJQSxHQUFHLEVBQUU7VUFDUGIsTUFBTSxDQUFDYyxLQUFLLENBQUNELEdBQUcsQ0FBQztRQUNuQjtNQUNGLENBQUMsQ0FBQzs7TUFFRixPQUFPTixNQUFNO0lBQ2YsQ0FBQyxNQUFNO01BQ0wsT0FBUSxHQUFFSixRQUFTLElBQUdNLGtCQUFJLENBQUNDLFNBQVMsQ0FBQ1osT0FBTyxDQUFDYSxRQUFRLENBQUUsRUFBQztJQUMxRDtFQUNGLENBQUMsQ0FBQyxPQUFPSSxDQUFDLEVBQUU7SUFDVmYsTUFBTSxDQUFDYyxLQUFLLENBQUNDLENBQUMsQ0FBQztJQUNmZixNQUFNLENBQUNnQixJQUFJO0lBQ1Qsc0VBQXNFLENBQ3ZFOztJQUNELElBQUk7TUFDRixNQUFNZixNQUFNLEdBQUcsTUFBTUYsTUFBTSxDQUFDa0IsYUFBYSxDQUFDbkIsT0FBTyxDQUFDO01BQ2xELE1BQU1LLFFBQVEsR0FBSSx3QkFBdUJMLE9BQU8sQ0FBQ00sQ0FBRSxFQUFDO01BQ3BELElBQUksQ0FBQ0MsV0FBRSxDQUFDQyxVQUFVLENBQUNILFFBQVEsQ0FBQyxFQUFFO1FBQzVCLElBQUlJLE1BQU0sR0FBRyxFQUFFO1FBQ2YsSUFBSVQsT0FBTyxDQUFDVSxJQUFJLEtBQUssS0FBSyxFQUFFO1VBQzFCRCxNQUFNLEdBQUksR0FBRUosUUFBUyxNQUFLO1FBQzVCLENBQUMsTUFBTTtVQUNMSSxNQUFNLEdBQUksR0FBRUosUUFBUyxJQUFHTSxrQkFBSSxDQUFDQyxTQUFTLENBQUNaLE9BQU8sQ0FBQ2EsUUFBUSxDQUFFLEVBQUM7UUFDNUQ7O1FBRUEsTUFBTU4sV0FBRSxDQUFDTyxTQUFTLENBQUNMLE1BQU0sRUFBRU4sTUFBTSxFQUFFLENBQUNZLEdBQUcsS0FBSztVQUMxQyxJQUFJQSxHQUFHLEVBQUU7WUFDUGIsTUFBTSxDQUFDYyxLQUFLLENBQUNELEdBQUcsQ0FBQztVQUNuQjtRQUNGLENBQUMsQ0FBQzs7UUFFRixPQUFPTixNQUFNO01BQ2YsQ0FBQyxNQUFNO1FBQ0wsT0FBUSxHQUFFSixRQUFTLElBQUdNLGtCQUFJLENBQUNDLFNBQVMsQ0FBQ1osT0FBTyxDQUFDYSxRQUFRLENBQUUsRUFBQztNQUMxRDtJQUNGLENBQUMsQ0FBQyxPQUFPSSxDQUFDLEVBQUU7TUFDVmYsTUFBTSxDQUFDYyxLQUFLLENBQUNDLENBQUMsQ0FBQztNQUNmZixNQUFNLENBQUNnQixJQUFJLENBQUMsb0NBQW9DLENBQUM7SUFDbkQ7RUFDRjtBQUNGOztBQUVPLGVBQWVFLFFBQVFBLENBQUNwQixPQUFZLEVBQUVDLE1BQVcsRUFBRUMsTUFBVyxFQUFFO0VBQ3JFLElBQUk7SUFDRixNQUFNbUIsSUFBSSxHQUFHLE1BQU10QixvQkFBb0IsQ0FBQ0MsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sQ0FBQztJQUNoRSxPQUFPbUIsSUFBSSxFQUFFQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztFQUNoQyxDQUFDLENBQUMsT0FBT0wsQ0FBQyxFQUFFO0lBQ1ZmLE1BQU0sQ0FBQ2MsS0FBSyxDQUFDQyxDQUFDLENBQUM7RUFDakI7QUFDRjs7QUFFTyxlQUFlTSxnQkFBZ0JBLENBQUNDLEdBQVksRUFBRUMsR0FBUSxFQUFFO0VBQzdELE1BQU0sRUFBRUMsU0FBUyxDQUFDLENBQUMsR0FBR0YsR0FBRyxDQUFDRyxNQUFNO0VBQ2hDLE1BQU0sRUFBRUMsYUFBYSxFQUFFQyxLQUFLLENBQUMsQ0FBQyxHQUFHTCxHQUFHLENBQUNNLE9BQU87O0VBRTVDLElBQUlDLFlBQVksR0FBRyxFQUFFOztFQUVyQixJQUFJTCxTQUFTLEtBQUtNLFNBQVMsRUFBRTtJQUMzQkQsWUFBWSxHQUFJRixLQUFLLENBQVNJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDN0MsQ0FBQyxNQUFNO0lBQ0xGLFlBQVksR0FBR0wsU0FBUztFQUMxQjs7RUFFQSxNQUFNUSxXQUFXLEdBQUcsTUFBTSxJQUFBQyxxQkFBWSxFQUFDWCxHQUFHLENBQUM7O0VBRTNDLElBQUlPLFlBQVksS0FBS1AsR0FBRyxDQUFDWSxhQUFhLENBQUNDLFNBQVMsRUFBRTtJQUNoRCxPQUFPWixHQUFHLENBQUNhLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxDQUFDO01BQzFCQyxRQUFRLEVBQUUsT0FBTztNQUNqQnhDLE9BQU8sRUFBRTtJQUNYLENBQUMsQ0FBQztFQUNKOztFQUVBa0MsV0FBVyxDQUFDTyxHQUFHLENBQUMsT0FBT0MsT0FBZSxLQUFLO0lBQ3pDLE1BQU1DLElBQUksR0FBRyxJQUFJN0MsMEJBQWlCLEVBQUU7SUFDcEMsTUFBTTZDLElBQUksQ0FBQ0MsUUFBUSxDQUFDcEIsR0FBRyxFQUFFa0IsT0FBTyxDQUFDO0VBQ25DLENBQUMsQ0FBQzs7RUFFRixPQUFPLE1BQU1qQixHQUFHO0VBQ2JhLE1BQU0sQ0FBQyxHQUFHLENBQUM7RUFDWEMsSUFBSSxDQUFDLEVBQUVELE1BQU0sRUFBRSxTQUFTLEVBQUV0QyxPQUFPLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0FBQ2xFOztBQUVPLGVBQWU2QyxlQUFlQSxDQUFDckIsR0FBWSxFQUFFQyxHQUFRLEVBQUU7RUFDNUQsTUFBTSxFQUFFQyxTQUFTLENBQUMsQ0FBQyxHQUFHRixHQUFHLENBQUNHLE1BQU07RUFDaEMsTUFBTSxFQUFFQyxhQUFhLEVBQUVDLEtBQUssQ0FBQyxDQUFDLEdBQUdMLEdBQUcsQ0FBQ00sT0FBTzs7RUFFNUMsSUFBSUMsWUFBaUIsR0FBRyxFQUFFOztFQUUxQixJQUFJTCxTQUFTLEtBQUtNLFNBQVMsRUFBRTtJQUMzQkQsWUFBWSxHQUFHRixLQUFLLEVBQUVJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDckMsQ0FBQyxNQUFNO0lBQ0xGLFlBQVksR0FBR0wsU0FBUztFQUMxQjs7RUFFQSxNQUFNb0IsR0FBUSxHQUFHLEVBQUU7O0VBRW5CLElBQUlmLFlBQVksS0FBS1AsR0FBRyxDQUFDWSxhQUFhLENBQUNDLFNBQVMsRUFBRTtJQUNoRCxPQUFPWixHQUFHLENBQUNhLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxDQUFDO01BQzFCQyxRQUFRLEVBQUUsS0FBSztNQUNmeEMsT0FBTyxFQUFFO0lBQ1gsQ0FBQyxDQUFDO0VBQ0o7O0VBRUErQyxNQUFNLENBQUNDLElBQUksQ0FBQ0MseUJBQVksQ0FBQyxDQUFDQyxPQUFPLENBQUMsQ0FBQ0MsSUFBSSxLQUFLO0lBQzFDTCxHQUFHLENBQUNNLElBQUksQ0FBQyxFQUFFVixPQUFPLEVBQUVTLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDN0IsQ0FBQyxDQUFDOztFQUVGLE9BQU8xQixHQUFHLENBQUNhLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQUVDLFFBQVEsRUFBRU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRDs7QUFFTyxlQUFlTyxZQUFZQSxDQUFDN0IsR0FBWSxFQUFFQyxHQUFRLEVBQUU7RUFDekQsTUFBTWlCLE9BQU8sR0FBR2xCLEdBQUcsQ0FBQ2tCLE9BQU87RUFDM0IsTUFBTSxFQUFFWSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRzlCLEdBQUcsQ0FBQytCLElBQUk7O0VBRXZDLE1BQU1DLGVBQWUsQ0FBQ2hDLEdBQUcsRUFBRUMsR0FBRyxDQUFDO0VBQy9CLE1BQU01QixXQUFXLENBQUMrQyxRQUFRLENBQUNwQixHQUFHLEVBQUVrQixPQUFPLEVBQUVZLFVBQVUsR0FBRzdCLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDbkU7O0FBRU8sZUFBZWdDLFlBQVlBLENBQUNqQyxHQUFZLEVBQUVDLEdBQVEsRUFBRTtFQUN6RCxNQUFNaUIsT0FBTyxHQUFHbEIsR0FBRyxDQUFDa0IsT0FBTztFQUMzQixNQUFNLEVBQUVnQixZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBR2xDLEdBQUcsQ0FBQytCLElBQUk7RUFDekMsSUFBSTtJQUNGLElBQUtOLHlCQUFZLENBQVNQLE9BQU8sQ0FBQyxDQUFDSixNQUFNLEtBQUssSUFBSSxFQUFFO01BQ2xELE9BQU8sTUFBTWIsR0FBRztNQUNiYSxNQUFNLENBQUMsR0FBRyxDQUFDO01BQ1hDLElBQUksQ0FBQyxFQUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFdEMsT0FBTyxFQUFFLDZCQUE2QixDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDLE1BQU07TUFDSmlELHlCQUFZLENBQVNQLE9BQU8sQ0FBQyxHQUFHLEVBQUVKLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7TUFFakQsSUFBSW9CLFlBQVksRUFBRTtRQUNoQixNQUFNQyxhQUFhLEdBQUksR0FBRUMsZUFBTSxDQUFDQyxpQkFBa0IsSUFBR25CLE9BQVEsRUFBQztRQUM5RCxJQUFJbkMsV0FBRSxDQUFDQyxVQUFVLENBQUNtRCxhQUFhLENBQUMsRUFBRTtVQUNoQ0csT0FBTyxDQUFDQyxHQUFHLENBQUMsbUJBQW1CLEdBQUdKLGFBQWEsQ0FBQztVQUNoRHBELFdBQUUsQ0FBQ3lELFNBQVMsQ0FBQ0wsYUFBYSxFQUFFLEVBQUVNLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xEO01BQ0Y7TUFDQSxNQUFNekMsR0FBRyxDQUFDdkIsTUFBTSxDQUFDaUUsS0FBSyxFQUFFO01BQ3hCMUMsR0FBRyxDQUFDMkMsRUFBRSxDQUFDQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO01BQ3JDLElBQUFDLHNCQUFXLEVBQUM3QyxHQUFHLENBQUN2QixNQUFNLEVBQUV1QixHQUFHLEVBQUUsY0FBYyxFQUFFO1FBQzNDeEIsT0FBTyxFQUFHLFlBQVcwQyxPQUFRLGVBQWM7UUFDM0M0QixTQUFTLEVBQUU7TUFDYixDQUFDLENBQUM7O01BRUYsT0FBTyxNQUFNN0MsR0FBRztNQUNiYSxNQUFNLENBQUMsR0FBRyxDQUFDO01BQ1hDLElBQUksQ0FBQyxFQUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFdEMsT0FBTyxFQUFFLDZCQUE2QixDQUFDLENBQUMsQ0FBQztJQUNuRTtFQUNGLENBQUMsQ0FBQyxPQUFPZ0IsS0FBSyxFQUFFO0lBQ2RRLEdBQUcsQ0FBQ3RCLE1BQU0sQ0FBQ2MsS0FBSyxDQUFDQSxLQUFLLENBQUM7SUFDdkIsT0FBTyxNQUFNUyxHQUFHO0lBQ2JhLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDWEMsSUFBSSxDQUFDLEVBQUVELE1BQU0sRUFBRSxLQUFLLEVBQUV0QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUVnQixLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ3JFO0FBQ0Y7O0FBRU8sZUFBZXVELGFBQWFBLENBQUMvQyxHQUFZLEVBQUVDLEdBQVEsRUFBRTtFQUMxRCxJQUFJO0lBQ0YsTUFBTWlCLE9BQU8sR0FBR2xCLEdBQUcsQ0FBQ2tCLE9BQU87SUFDM0IsTUFBTWxCLEdBQUcsQ0FBQ3ZCLE1BQU0sQ0FBQ3VFLE1BQU0sRUFBRTs7SUFFekJoRCxHQUFHLENBQUMyQyxFQUFFLENBQUNDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7SUFDckMsSUFBQUMsc0JBQVcsRUFBQzdDLEdBQUcsQ0FBQ3ZCLE1BQU0sRUFBRXVCLEdBQUcsRUFBRSxlQUFlLEVBQUU7TUFDNUN4QixPQUFPLEVBQUcsWUFBVzBDLE9BQVEsYUFBWTtNQUN6QzRCLFNBQVMsRUFBRTtJQUNiLENBQUMsQ0FBQzs7SUFFRixPQUFPLE1BQU03QyxHQUFHO0lBQ2JhLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDWEMsSUFBSSxDQUFDLEVBQUVELE1BQU0sRUFBRSxJQUFJLEVBQUV0QyxPQUFPLEVBQUUsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO0VBQ25FLENBQUMsQ0FBQyxPQUFPZ0IsS0FBSyxFQUFFO0lBQ2RRLEdBQUcsQ0FBQ3RCLE1BQU0sQ0FBQ2MsS0FBSyxDQUFDQSxLQUFLLENBQUM7SUFDdkIsT0FBTyxNQUFNUyxHQUFHO0lBQ2JhLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDWEMsSUFBSSxDQUFDLEVBQUVELE1BQU0sRUFBRSxLQUFLLEVBQUV0QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUVnQixLQUFLLENBQUMsQ0FBQyxDQUFDO0VBQ3JFO0FBQ0Y7O0FBRU8sZUFBZXlELHNCQUFzQkEsQ0FBQ2pELEdBQVksRUFBRUMsR0FBUSxFQUFFO0VBQ25FLElBQUk7SUFDRixNQUFNRCxHQUFHLENBQUN2QixNQUFNLENBQUN5RSxXQUFXLEVBQUU7O0lBRTlCLE9BQU9qRCxHQUFHLENBQUNhLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQUVELE1BQU0sRUFBRSxJQUFJLEVBQUV0QyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztFQUNyRSxDQUFDLENBQUMsT0FBT2dCLEtBQUssRUFBRTtJQUNkLE9BQU9TLEdBQUcsQ0FBQ2EsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsRUFBRUQsTUFBTSxFQUFFLEtBQUssRUFBRXRDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0VBQ3pFO0FBQ0Y7O0FBRU8sZUFBZTJFLHNCQUFzQkEsQ0FBQ25ELEdBQVksRUFBRUMsR0FBUSxFQUFFO0VBQ25FLE1BQU14QixNQUFNLEdBQUd1QixHQUFHLENBQUN2QixNQUFNO0VBQ3pCLE1BQU0sRUFBRTJFLFNBQVMsQ0FBQyxDQUFDLEdBQUdwRCxHQUFHLENBQUMrQixJQUFJOztFQUU5QixJQUFJdkQsT0FBTzs7RUFFWCxJQUFJO0lBQ0YsSUFBSSxDQUFDNEUsU0FBUyxDQUFDQyxPQUFPLElBQUksQ0FBQ0QsU0FBUyxDQUFDbEUsSUFBSSxFQUFFO01BQ3pDVixPQUFPLEdBQUcsTUFBTUMsTUFBTSxDQUFDNkUsY0FBYyxDQUFDRixTQUFTLENBQUM7SUFDbEQsQ0FBQyxNQUFNO01BQ0w1RSxPQUFPLEdBQUc0RSxTQUFTO0lBQ3JCOztJQUVBLElBQUksQ0FBQzVFLE9BQU87SUFDVixPQUFPeUIsR0FBRyxDQUFDYSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQztNQUMxQkQsTUFBTSxFQUFFLE9BQU87TUFDZnRDLE9BQU8sRUFBRTtJQUNYLENBQUMsQ0FBQzs7SUFFSixJQUFJLEVBQUVBLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSUEsT0FBTyxDQUFDNkUsT0FBTyxJQUFJN0UsT0FBTyxDQUFDK0UsS0FBSyxDQUFDO0lBQzVELE9BQU90RCxHQUFHLENBQUNhLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxDQUFDO01BQzFCRCxNQUFNLEVBQUUsT0FBTztNQUNmdEMsT0FBTyxFQUFFO0lBQ1gsQ0FBQyxDQUFDOztJQUVKLE1BQU1HLE1BQU0sR0FBRyxNQUFNRixNQUFNLENBQUNHLFdBQVcsQ0FBQ0osT0FBTyxDQUFDOztJQUVoRCxPQUFPeUIsR0FBRztJQUNQYSxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ1hDLElBQUksQ0FBQyxFQUFFeUMsTUFBTSxFQUFFN0UsTUFBTSxDQUFDOEUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFcEUsUUFBUSxFQUFFYixPQUFPLENBQUNhLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDNUUsQ0FBQyxDQUFDLE9BQU9JLENBQUMsRUFBRTtJQUNWTyxHQUFHLENBQUN0QixNQUFNLENBQUNjLEtBQUssQ0FBQ0MsQ0FBQyxDQUFDO0lBQ25CLE9BQU9RLEdBQUcsQ0FBQ2EsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUM7TUFDMUJELE1BQU0sRUFBRSxPQUFPO01BQ2Z0QyxPQUFPLEVBQUUsb0JBQW9CO01BQzdCZ0IsS0FBSyxFQUFFQztJQUNULENBQUMsQ0FBQztFQUNKO0FBQ0Y7O0FBRU8sZUFBZWlFLGlCQUFpQkEsQ0FBQzFELEdBQVksRUFBRUMsR0FBUSxFQUFFO0VBQzlELE1BQU14QixNQUFNLEdBQUd1QixHQUFHLENBQUN2QixNQUFNO0VBQ3pCLE1BQU0sRUFBRTJFLFNBQVMsQ0FBQyxDQUFDLEdBQUdwRCxHQUFHLENBQUNHLE1BQU07O0VBRWhDLElBQUk7SUFDRixNQUFNM0IsT0FBTyxHQUFHLE1BQU1DLE1BQU0sQ0FBQzZFLGNBQWMsQ0FBQ0YsU0FBUyxDQUFDOztJQUV0RCxJQUFJLENBQUM1RSxPQUFPO0lBQ1YsT0FBT3lCLEdBQUcsQ0FBQ2EsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUM7TUFDMUJELE1BQU0sRUFBRSxPQUFPO01BQ2Z0QyxPQUFPLEVBQUU7SUFDWCxDQUFDLENBQUM7O0lBRUosSUFBSSxFQUFFQSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUlBLE9BQU8sQ0FBQzZFLE9BQU8sSUFBSTdFLE9BQU8sQ0FBQytFLEtBQUssQ0FBQztJQUM1RCxPQUFPdEQsR0FBRyxDQUFDYSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQztNQUMxQkQsTUFBTSxFQUFFLE9BQU87TUFDZnRDLE9BQU8sRUFBRTtJQUNYLENBQUMsQ0FBQzs7SUFFSixNQUFNRyxNQUFNLEdBQUcsTUFBTUYsTUFBTSxDQUFDRyxXQUFXLENBQUNKLE9BQU8sQ0FBQzs7SUFFaEQsT0FBT3lCLEdBQUc7SUFDUGEsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNYQyxJQUFJLENBQUMsRUFBRXlDLE1BQU0sRUFBRTdFLE1BQU0sQ0FBQzhFLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRXBFLFFBQVEsRUFBRWIsT0FBTyxDQUFDYSxRQUFRLENBQUMsQ0FBQyxDQUFDO0VBQzVFLENBQUMsQ0FBQyxPQUFPc0UsRUFBRSxFQUFFO0lBQ1gzRCxHQUFHLENBQUN0QixNQUFNLENBQUNjLEtBQUssQ0FBQ21FLEVBQUUsQ0FBQztJQUNwQixPQUFPMUQsR0FBRyxDQUFDYSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQztNQUMxQkQsTUFBTSxFQUFFLE9BQU87TUFDZnRDLE9BQU8sRUFBRSwyQkFBMkI7TUFDcENnQixLQUFLLEVBQUVtRTtJQUNULENBQUMsQ0FBQztFQUNKO0FBQ0Y7O0FBRU8sZUFBZTNCLGVBQWVBLENBQUNoQyxHQUFZLEVBQUVDLEdBQVEsRUFBRTtFQUM1RCxJQUFJO0lBQ0YsTUFBTSxFQUFFNkIsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUc5QixHQUFHLENBQUMrQixJQUFJO0lBQ3ZDLE1BQU10RCxNQUFNLEdBQUd1QixHQUFHLENBQUN2QixNQUFNO0lBQ3pCLE1BQU1tRixFQUFFO0lBQ05uRixNQUFNLEVBQUVvRixPQUFPLElBQUksSUFBSSxJQUFJcEYsTUFBTSxFQUFFb0YsT0FBTyxJQUFJLEVBQUU7SUFDNUMsTUFBTUMsZUFBTSxDQUFDQyxTQUFTLENBQUN0RixNQUFNLENBQUNvRixPQUFPLENBQUM7SUFDdEMsSUFBSTs7SUFFVixJQUFJLENBQUNwRixNQUFNLElBQUksSUFBSSxJQUFJQSxNQUFNLENBQUNxQyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUNnQixVQUFVO0lBQzFELE9BQU83QixHQUFHLENBQUNhLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQUVELE1BQU0sRUFBRSxRQUFRLEVBQUVrRCxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELElBQUl2RixNQUFNLElBQUksSUFBSTtJQUNyQixPQUFPd0IsR0FBRyxDQUFDYSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQztNQUMxQkQsTUFBTSxFQUFFckMsTUFBTSxDQUFDcUMsTUFBTTtNQUNyQmtELE1BQU0sRUFBRUosRUFBRTtNQUNWQyxPQUFPLEVBQUVwRixNQUFNLENBQUNvRixPQUFPO01BQ3ZCSSxPQUFPLEVBQUVBO0lBQ1gsQ0FBQyxDQUFDO0VBQ04sQ0FBQyxDQUFDLE9BQU9OLEVBQUUsRUFBRTtJQUNYM0QsR0FBRyxDQUFDdEIsTUFBTSxDQUFDYyxLQUFLLENBQUNtRSxFQUFFLENBQUM7SUFDcEIsT0FBTzFELEdBQUcsQ0FBQ2EsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUM7TUFDMUJELE1BQU0sRUFBRSxPQUFPO01BQ2Z0QyxPQUFPLEVBQUUsMkJBQTJCO01BQ3BDZ0IsS0FBSyxFQUFFbUU7SUFDVCxDQUFDLENBQUM7RUFDSjtBQUNGOztBQUVPLGVBQWVPLFNBQVNBLENBQUNsRSxHQUFZLEVBQUVDLEdBQVEsRUFBRTtFQUN0RCxJQUFJO0lBQ0YsSUFBSUQsR0FBRyxFQUFFdkIsTUFBTSxFQUFFb0YsT0FBTyxFQUFFO01BQ3hCLE1BQU1ELEVBQUUsR0FBRzVELEdBQUcsQ0FBQ3ZCLE1BQU0sQ0FBQ29GLE9BQU87TUFDekIsTUFBTUMsZUFBTSxDQUFDQyxTQUFTLENBQUMvRCxHQUFHLENBQUN2QixNQUFNLENBQUNvRixPQUFPLENBQUM7TUFDMUMsSUFBSTtNQUNSLE1BQU1NLEdBQUcsR0FBR0MsTUFBTSxDQUFDQyxJQUFJO01BQ3BCVCxFQUFFLENBQVM5RCxPQUFPLENBQUMscUNBQXFDLEVBQUUsRUFBRSxDQUFDO01BQzlELFFBQVEsQ0FDVDs7O01BRURHLEdBQUcsQ0FBQ3FFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDakIsY0FBYyxFQUFFLFdBQVc7UUFDM0IsZ0JBQWdCLEVBQUVILEdBQUcsQ0FBQ0k7TUFDeEIsQ0FBQyxDQUFDO01BQ0Z0RSxHQUFHLENBQUN1RSxHQUFHLENBQUNMLEdBQUcsQ0FBQztJQUNkLENBQUMsTUFBTSxJQUFJLE9BQU9uRSxHQUFHLENBQUN2QixNQUFNLEtBQUssV0FBVyxFQUFFO01BQzVDLE9BQU93QixHQUFHLENBQUNhLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0MsSUFBSSxDQUFDO1FBQzFCRCxNQUFNLEVBQUUsSUFBSTtRQUNadEMsT0FBTztRQUNMO01BQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQyxNQUFNO01BQ0wsT0FBT3lCLEdBQUcsQ0FBQ2EsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUM7UUFDMUJELE1BQU0sRUFBRWQsR0FBRyxDQUFDdkIsTUFBTSxDQUFDcUMsTUFBTTtRQUN6QnRDLE9BQU8sRUFBRTtNQUNYLENBQUMsQ0FBQztJQUNKO0VBQ0YsQ0FBQyxDQUFDLE9BQU9tRixFQUFFLEVBQUU7SUFDWDNELEdBQUcsQ0FBQ3RCLE1BQU0sQ0FBQ2MsS0FBSyxDQUFDbUUsRUFBRSxDQUFDO0lBQ3BCLE9BQU8xRCxHQUFHO0lBQ1BhLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDWEMsSUFBSSxDQUFDLEVBQUVELE1BQU0sRUFBRSxPQUFPLEVBQUV0QyxPQUFPLEVBQUUseUJBQXlCLEVBQUVnQixLQUFLLEVBQUVtRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0VBQzdFO0FBQ0Y7O0FBRU8sZUFBZWMsaUJBQWlCQSxDQUFDekUsR0FBWSxFQUFFQyxHQUFRLEVBQUU7RUFDOUQsSUFBSTtJQUNGLE9BQU9BLEdBQUc7SUFDUGEsTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNYQyxJQUFJLENBQUMsRUFBRUQsTUFBTSxFQUFFLE9BQU8sRUFBRUUsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUMsQ0FBQztFQUMvRCxDQUFDLENBQUMsT0FBTzJDLEVBQUUsRUFBRTtJQUNYM0QsR0FBRyxDQUFDdEIsTUFBTSxDQUFDYyxLQUFLLENBQUNtRSxFQUFFLENBQUM7SUFDcEIsT0FBTzFELEdBQUcsQ0FBQ2EsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUM7TUFDMUJELE1BQU0sRUFBRSxPQUFPO01BQ2Z0QyxPQUFPLEVBQUUsMkJBQTJCO01BQ3BDZ0IsS0FBSyxFQUFFbUU7SUFDVCxDQUFDLENBQUM7RUFDSjtBQUNGOztBQUVPLGVBQWVlLGNBQWNBLENBQUMxRSxHQUFZLEVBQUVDLEdBQVEsRUFBRTtFQUMzRCxJQUFJO0lBQ0YsT0FBT0EsR0FBRztJQUNQYSxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ1hDLElBQUksQ0FBQyxFQUFFRCxNQUFNLEVBQUUsT0FBTyxFQUFFRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDO0VBQy9ELENBQUMsQ0FBQyxPQUFPMkMsRUFBRSxFQUFFO0lBQ1gzRCxHQUFHLENBQUN0QixNQUFNLENBQUNjLEtBQUssQ0FBQ21FLEVBQUUsQ0FBQztJQUNwQixPQUFPMUQsR0FBRyxDQUFDYSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQztNQUMxQkQsTUFBTSxFQUFFLE9BQU87TUFDZkUsUUFBUSxFQUFFLEVBQUV4QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUVnQixLQUFLLEVBQUVtRSxFQUFFLENBQUM7SUFDOUQsQ0FBQyxDQUFDO0VBQ0o7QUFDRjs7QUFFTyxlQUFlZ0IsaUJBQWlCQSxDQUFDM0UsR0FBWSxFQUFFQyxHQUFRLEVBQUU7RUFDOUQsSUFBSTtJQUNGLE1BQU0sRUFBRTJFLEtBQUssRUFBRUMsT0FBTyxHQUFHLEtBQUssRUFBRUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUc5RSxHQUFHLENBQUMrQixJQUFJOztJQUV4RCxJQUFJK0MsR0FBRyxFQUFFO01BQ1AsSUFBSUMsUUFBUTtNQUNaLElBQUlGLE9BQU8sRUFBRTtRQUNYLE1BQU1HLE1BQU0sR0FBRyxNQUFNaEYsR0FBRyxDQUFDdkIsTUFBTSxDQUFDd0csWUFBWSxDQUFDLEtBQUssQ0FBQztRQUNuREYsUUFBUSxHQUFHQyxNQUFNLENBQUMvRCxHQUFHLENBQUMsQ0FBQ2lFLENBQU0sS0FBS0EsQ0FBQyxDQUFDQyxFQUFFLENBQUNDLFdBQVcsQ0FBQztNQUNyRCxDQUFDLE1BQU07UUFDTCxNQUFNQyxLQUFLLEdBQUcsTUFBTXJGLEdBQUcsQ0FBQ3ZCLE1BQU0sQ0FBQzZHLGNBQWMsRUFBRTtRQUMvQ1AsUUFBUSxHQUFHTSxLQUFLLENBQUNwRSxHQUFHLENBQUMsQ0FBQ3NFLENBQU0sS0FBS0EsQ0FBQyxDQUFDSixFQUFFLENBQUNDLFdBQVcsQ0FBQztNQUNwRDtNQUNBLE1BQU1wRixHQUFHLENBQUN2QixNQUFNLENBQUNrRyxpQkFBaUIsQ0FBQ0ksUUFBUSxDQUFDO0lBQzlDLENBQUM7SUFDQyxLQUFLLE1BQU1TLE9BQU8sSUFBSSxJQUFBQyx5QkFBYyxFQUFDYixLQUFLLEVBQUVDLE9BQU8sQ0FBQyxFQUFFO01BQ3BELE1BQU03RSxHQUFHLENBQUN2QixNQUFNLENBQUNrRyxpQkFBaUIsQ0FBQ2EsT0FBTyxDQUFDO0lBQzdDOztJQUVGLE9BQU8sTUFBTXZGLEdBQUcsQ0FBQ2EsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUM7TUFDaENELE1BQU0sRUFBRSxTQUFTO01BQ2pCRSxRQUFRLEVBQUUsRUFBRXhDLE9BQU8sRUFBRSw2QkFBNkIsQ0FBQztJQUNyRCxDQUFDLENBQUM7RUFDSixDQUFDLENBQUMsT0FBT2dCLEtBQUssRUFBRTtJQUNkLE9BQU8sTUFBTVMsR0FBRyxDQUFDYSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQztNQUNoQ0QsTUFBTSxFQUFFLE9BQU87TUFDZnRDLE9BQU8sRUFBRSw2QkFBNkI7TUFDdENnQixLQUFLLEVBQUVBO0lBQ1QsQ0FBQyxDQUFDO0VBQ0o7QUFDRiJ9
|
|
671
|
+
|
|
672
|
+
async function editBusinessProfile(req, res) {
|
|
673
|
+
/**
|
|
674
|
+
* #swagger.tags = ["Profile"]
|
|
675
|
+
* #swagger.description = 'Edit your bussiness profile'
|
|
676
|
+
#swagger.autoBody=false
|
|
677
|
+
#swagger.security = [{
|
|
678
|
+
"bearerAuth": []
|
|
679
|
+
}]
|
|
680
|
+
#swagger.parameters["session"] = {
|
|
681
|
+
schema: 'NERDWHATS_AMERICA'
|
|
682
|
+
}
|
|
683
|
+
#swagger.parameters["obj"] = {
|
|
684
|
+
in: 'body',
|
|
685
|
+
schema: {
|
|
686
|
+
$adress: 'Av. Nossa Senhora de Copacabana, 315',
|
|
687
|
+
$email: 'test@test.com.br',
|
|
688
|
+
$categories: {
|
|
689
|
+
$id: "133436743388217",
|
|
690
|
+
$localized_display_name: "Artes e entretenimento",
|
|
691
|
+
$not_a_biz: false,
|
|
692
|
+
},
|
|
693
|
+
$website: [
|
|
694
|
+
"https://www.wppconnect.io",
|
|
695
|
+
"https://www.teste2.com.br",
|
|
696
|
+
],
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
#swagger.requestBody = {
|
|
701
|
+
required: true,
|
|
702
|
+
"@content": {
|
|
703
|
+
"application/json": {
|
|
704
|
+
schema: {
|
|
705
|
+
type: "object",
|
|
706
|
+
properties: {
|
|
707
|
+
adress: { type: "string" },
|
|
708
|
+
email: { type: "string" },
|
|
709
|
+
categories: { type: "object" },
|
|
710
|
+
websites: { type: "array" },
|
|
711
|
+
}
|
|
712
|
+
},
|
|
713
|
+
example: {
|
|
714
|
+
adress: 'Av. Nossa Senhora de Copacabana, 315',
|
|
715
|
+
email: 'test@test.com.br',
|
|
716
|
+
categories: {
|
|
717
|
+
$id: "133436743388217",
|
|
718
|
+
$localized_display_name: "Artes e entretenimento",
|
|
719
|
+
$not_a_biz: false,
|
|
720
|
+
},
|
|
721
|
+
website: [
|
|
722
|
+
"https://www.wppconnect.io",
|
|
723
|
+
"https://www.teste2.com.br",
|
|
724
|
+
],
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
*/
|
|
730
|
+
try {
|
|
731
|
+
return res.status(200).json(await req.client.editBusinessProfile(req.body));
|
|
732
|
+
} catch (error) {
|
|
733
|
+
return res.status(500).json({
|
|
734
|
+
status: 'error',
|
|
735
|
+
message: 'Error on edit business profile',
|
|
736
|
+
error: error
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9taW1lVHlwZXMiLCJfcXJjb2RlIiwiX3BhY2thZ2UiLCJfY29uZmlnIiwiX2NyZWF0ZVNlc3Npb25VdGlsIiwiX2Z1bmN0aW9ucyIsIl9nZXRBbGxUb2tlbnMiLCJfc2Vzc2lvblV0aWwiLCJTZXNzaW9uVXRpbCIsIkNyZWF0ZVNlc3Npb25VdGlsIiwiZG93bmxvYWRGaWxlRnVuY3Rpb24iLCJtZXNzYWdlIiwiY2xpZW50IiwibG9nZ2VyIiwiYnVmZmVyIiwiZGVjcnlwdEZpbGUiLCJmaWxlbmFtZSIsInQiLCJmcyIsImV4aXN0c1N5bmMiLCJyZXN1bHQiLCJ0eXBlIiwibWltZSIsImV4dGVuc2lvbiIsIm1pbWV0eXBlIiwid3JpdGVGaWxlIiwiZXJyIiwiZXJyb3IiLCJlIiwid2FybiIsImRvd25sb2FkTWVkaWEiLCJkb3dubG9hZCIsInBhdGgiLCJyZXBsYWNlIiwic3RhcnRBbGxTZXNzaW9ucyIsInJlcSIsInJlcyIsInNlY3JldGtleSIsInBhcmFtcyIsImF1dGhvcml6YXRpb24iLCJ0b2tlbiIsImhlYWRlcnMiLCJ0b2tlbkRlY3J5cHQiLCJ1bmRlZmluZWQiLCJzcGxpdCIsImFsbFNlc3Npb25zIiwiZ2V0QWxsVG9rZW5zIiwic2VydmVyT3B0aW9ucyIsInNlY3JldEtleSIsInN0YXR1cyIsImpzb24iLCJyZXNwb25zZSIsIm1hcCIsInNlc3Npb24iLCJ1dGlsIiwib3BlbmRhdGEiLCJzaG93QWxsU2Vzc2lvbnMiLCJhcnIiLCJPYmplY3QiLCJrZXlzIiwiY2xpZW50c0FycmF5IiwiZm9yRWFjaCIsIml0ZW0iLCJwdXNoIiwic3RhcnRTZXNzaW9uIiwid2FpdFFyQ29kZSIsImJvZHkiLCJnZXRTZXNzaW9uU3RhdGUiLCJjbG9zZVNlc3Npb24iLCJjbGVhclNlc3Npb24iLCJzZXNzaW9uRm9sZGVyIiwiY29uZmlnIiwiY3VzdG9tVXNlckRhdGFEaXIiLCJjb25zb2xlIiwibG9nIiwicm1kaXJTeW5jIiwicmVjdXJzaXZlIiwiY2xvc2UiLCJpbyIsImVtaXQiLCJjYWxsV2ViSG9vayIsImNvbm5lY3RlZCIsImxvZ091dFNlc3Npb24iLCJsb2dvdXQiLCJwcm9taXNlcyIsInJtIiwiX19kaXJuYW1lIiwiY2hlY2tDb25uZWN0aW9uU2Vzc2lvbiIsImlzQ29ubmVjdGVkIiwiZG93bmxvYWRNZWRpYUJ5TWVzc2FnZSIsIm1lc3NhZ2VJZCIsImlzTWVkaWEiLCJnZXRNZXNzYWdlQnlJZCIsImlzTU1TIiwiYmFzZTY0IiwidG9TdHJpbmciLCJnZXRNZWRpYUJ5TWVzc2FnZSIsImV4IiwicXIiLCJ1cmxjb2RlIiwiUVJDb2RlIiwidG9EYXRhVVJMIiwicXJjb2RlIiwidmVyc2lvbiIsImdldFFyQ29kZSIsImltZyIsIkJ1ZmZlciIsImZyb20iLCJ3cml0ZUhlYWQiLCJsZW5ndGgiLCJlbmQiLCJraWxsU2VydmljZVdvcmtlciIsInJlc3RhcnRTZXJ2aWNlIiwic3Vic2NyaWJlUHJlc2VuY2UiLCJwaG9uZSIsImlzR3JvdXAiLCJhbGwiLCJjb250YWN0cyIsImdyb3VwcyIsImdldEFsbEdyb3VwcyIsInAiLCJpZCIsIl9zZXJpYWxpemVkIiwiY2hhdHMiLCJnZXRBbGxDb250YWN0cyIsImMiLCJjb250YXRvIiwiY29udGFjdFRvQXJyYXkiLCJlZGl0QnVzaW5lc3NQcm9maWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyb2xsZXIvc2Vzc2lvbkNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIxIFdQUENvbm5lY3QgVGVhbVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWNsZWFyU2Vzc2lvbmlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgTWVzc2FnZSwgV2hhdHNhcHAgfSBmcm9tICdAd3BwY29ubmVjdC10ZWFtL3dwcGNvbm5lY3QnO1xuaW1wb3J0IHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJztcbmltcG9ydCBRUkNvZGUgZnJvbSAncXJjb2RlJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJ3dpbnN0b24nO1xuXG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCBDcmVhdGVTZXNzaW9uVXRpbCBmcm9tICcuLi91dGlsL2NyZWF0ZVNlc3Npb25VdGlsJztcbmltcG9ydCB7IGNhbGxXZWJIb29rLCBjb250YWN0VG9BcnJheSB9IGZyb20gJy4uL3V0aWwvZnVuY3Rpb25zJztcbmltcG9ydCBnZXRBbGxUb2tlbnMgZnJvbSAnLi4vdXRpbC9nZXRBbGxUb2tlbnMnO1xuaW1wb3J0IHsgY2xpZW50c0FycmF5IH0gZnJvbSAnLi4vdXRpbC9zZXNzaW9uVXRpbCc7XG5cbmNvbnN0IFNlc3Npb25VdGlsID0gbmV3IENyZWF0ZVNlc3Npb25VdGlsKCk7XG5cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkRmlsZUZ1bmN0aW9uKFxuICBtZXNzYWdlOiBNZXNzYWdlLFxuICBjbGllbnQ6IFdoYXRzYXBwLFxuICBsb2dnZXI6IExvZ2dlclxuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2xpZW50LmRlY3J5cHRGaWxlKG1lc3NhZ2UpO1xuXG4gICAgY29uc3QgZmlsZW5hbWUgPSBgLi9XaGF0c0FwcEltYWdlcy9maWxlJHttZXNzYWdlLnR9YDtcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZmlsZW5hbWUpKSB7XG4gICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSAncHR0Jykge1xuICAgICAgICByZXN1bHQgPSBgJHtmaWxlbmFtZX0ub2dhYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGAke2ZpbGVuYW1lfS4ke21pbWUuZXh0ZW5zaW9uKG1lc3NhZ2UubWltZXR5cGUpfWA7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShyZXN1bHQsIGJ1ZmZlciwgKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7ZmlsZW5hbWV9LiR7bWltZS5leHRlbnNpb24obWVzc2FnZS5taW1ldHlwZSl9YDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBsb2dnZXIuZXJyb3IoZSk7XG4gICAgbG9nZ2VyLndhcm4oXG4gICAgICAnRXJybyBhbyBkZXNjcmlwdG9ncmFmYXIgYSBtaWRpYSwgdGVudGFuZG8gZmF6ZXIgbyBkb3dubG9hZCBkaXJldG8uLi4nXG4gICAgKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2xpZW50LmRvd25sb2FkTWVkaWEobWVzc2FnZSk7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGAuL1doYXRzQXBwSW1hZ2VzL2ZpbGUke21lc3NhZ2UudH1gO1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVuYW1lKSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdwdHQnKSB7XG4gICAgICAgICAgcmVzdWx0ID0gYCR7ZmlsZW5hbWV9Lm9nYWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0ID0gYCR7ZmlsZW5hbWV9LiR7bWltZS5leHRlbnNpb24obWVzc2FnZS5taW1ldHlwZSl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShyZXN1bHQsIGJ1ZmZlciwgKGVycikgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgJHtmaWxlbmFtZX0uJHttaW1lLmV4dGVuc2lvbihtZXNzYWdlLm1pbWV0eXBlKX1gO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihlKTtcbiAgICAgIGxvZ2dlci53YXJuKCdOw6NvIGZvaSBwb3Nzw612ZWwgYmFpeGFyIGEgbcOtZGlhLi4uJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3dubG9hZChtZXNzYWdlOiBhbnksIGNsaWVudDogYW55LCBsb2dnZXI6IGFueSkge1xuICB0cnkge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCBkb3dubG9hZEZpbGVGdW5jdGlvbihtZXNzYWdlLCBjbGllbnQsIGxvZ2dlcik7XG4gICAgcmV0dXJuIHBhdGg/LnJlcGxhY2UoJy4vJywgJycpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgbG9nZ2VyLmVycm9yKGUpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGFydEFsbFNlc3Npb25zKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkF1dGhcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlY3JldGtleVwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ1RISVNJU01ZU0VDVVJFQ09ERSdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgeyBzZWNyZXRrZXkgfSA9IHJlcS5wYXJhbXM7XG4gIGNvbnN0IHsgYXV0aG9yaXphdGlvbjogdG9rZW4gfSA9IHJlcS5oZWFkZXJzO1xuXG4gIGxldCB0b2tlbkRlY3J5cHQgPSAnJztcblxuICBpZiAoc2VjcmV0a2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICB0b2tlbkRlY3J5cHQgPSAodG9rZW4gYXMgYW55KS5zcGxpdCgnICcpWzBdO1xuICB9IGVsc2Uge1xuICAgIHRva2VuRGVjcnlwdCA9IHNlY3JldGtleTtcbiAgfVxuXG4gIGNvbnN0IGFsbFNlc3Npb25zID0gYXdhaXQgZ2V0QWxsVG9rZW5zKHJlcSk7XG5cbiAgaWYgKHRva2VuRGVjcnlwdCAhPT0gcmVxLnNlcnZlck9wdGlvbnMuc2VjcmV0S2V5KSB7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgIHJlc3BvbnNlOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ1RoZSB0b2tlbiBpcyBpbmNvcnJlY3QnLFxuICAgIH0pO1xuICB9XG5cbiAgYWxsU2Vzc2lvbnMubWFwKGFzeW5jIChzZXNzaW9uOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB1dGlsID0gbmV3IENyZWF0ZVNlc3Npb25VdGlsKCk7XG4gICAgYXdhaXQgdXRpbC5vcGVuZGF0YShyZXEsIHNlc3Npb24pO1xuICB9KTtcblxuICByZXR1cm4gYXdhaXQgcmVzXG4gICAgLnN0YXR1cygyMDEpXG4gICAgLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgbWVzc2FnZTogJ1N0YXJ0aW5nIGFsbCBzZXNzaW9ucycgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzaG93QWxsU2Vzc2lvbnMocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiQXV0aFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2VjcmV0a2V5XCJdID0ge1xuICAgICAgc2NoZW1hOiAnJ1xuICAgICB9XG4gICAqL1xuICBjb25zdCB7IHNlY3JldGtleSB9ID0gcmVxLnBhcmFtcztcbiAgY29uc3QgeyBhdXRob3JpemF0aW9uOiB0b2tlbiB9ID0gcmVxLmhlYWRlcnM7XG5cbiAgbGV0IHRva2VuRGVjcnlwdDogYW55ID0gJyc7XG5cbiAgaWYgKHNlY3JldGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdG9rZW5EZWNyeXB0ID0gdG9rZW4/LnNwbGl0KCcgJylbMF07XG4gIH0gZWxzZSB7XG4gICAgdG9rZW5EZWNyeXB0ID0gc2VjcmV0a2V5O1xuICB9XG5cbiAgY29uc3QgYXJyOiBhbnkgPSBbXTtcblxuICBpZiAodG9rZW5EZWNyeXB0ICE9PSByZXEuc2VydmVyT3B0aW9ucy5zZWNyZXRLZXkpIHtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgcmVzcG9uc2U6IGZhbHNlLFxuICAgICAgbWVzc2FnZTogJ1RoZSB0b2tlbiBpcyBpbmNvcnJlY3QnLFxuICAgIH0pO1xuICB9XG5cbiAgT2JqZWN0LmtleXMoY2xpZW50c0FycmF5KS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgYXJyLnB1c2goeyBzZXNzaW9uOiBpdGVtIH0pO1xuICB9KTtcblxuICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyByZXNwb25zZTogYXJyIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRTZXNzaW9uKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkF1dGhcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgd2ViaG9vazogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIHdhaXRRckNvZGU6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGU6IHtcbiAgICAgICAgICAgIHdlYmhvb2s6IFwiaHR0cHM6Ly93ZWJob29rLnNpdGUvN2NjMjk0NGQtMzk2Ny00Y2VhLTk4OGMtZDU3ZWE4MGJjZTVmXCIsXG4gICAgICAgICAgICB3YWl0UXJDb2RlOiBmYWxzZSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3Qgc2Vzc2lvbiA9IHJlcS5zZXNzaW9uO1xuICBjb25zdCB7IHdhaXRRckNvZGUgPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG5cbiAgYXdhaXQgZ2V0U2Vzc2lvblN0YXRlKHJlcSwgcmVzKTtcbiAgYXdhaXQgU2Vzc2lvblV0aWwub3BlbmRhdGEocmVxLCBzZXNzaW9uLCB3YWl0UXJDb2RlID8gcmVzIDogbnVsbCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVNlc3Npb24ocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiQXV0aFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBjbGVhclNlc3Npb246IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGU6IHtcbiAgICAgICAgICAgIGNsZWFyU2Vzc2lvbjogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIGNvbnN0IHNlc3Npb24gPSByZXEuc2Vzc2lvbjtcbiAgY29uc3QgeyBjbGVhclNlc3Npb24gPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG4gIHRyeSB7XG4gICAgaWYgKChjbGllbnRzQXJyYXkgYXMgYW55KVtzZXNzaW9uXS5zdGF0dXMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXNcbiAgICAgICAgLnN0YXR1cygyMDApXG4gICAgICAgIC5qc29uKHsgc3RhdHVzOiB0cnVlLCBtZXNzYWdlOiAnU2Vzc2lvbiBzdWNjZXNzZnVsbHkgY2xvc2VkJyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgKGNsaWVudHNBcnJheSBhcyBhbnkpW3Nlc3Npb25dID0geyBzdGF0dXM6IG51bGwgfTtcblxuICAgICAgaWYgKGNsZWFyU2Vzc2lvbikge1xuICAgICAgICBjb25zdCBzZXNzaW9uRm9sZGVyID0gYCR7Y29uZmlnLmN1c3RvbVVzZXJEYXRhRGlyfS8ke3Nlc3Npb259YDtcbiAgICAgICAgaWYgKGZzLmV4aXN0c1N5bmMoc2Vzc2lvbkZvbGRlcikpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnRGVsZXRhbmRvIHBhc3RhOiAnICsgc2Vzc2lvbkZvbGRlcik7XG4gICAgICAgICAgZnMucm1kaXJTeW5jKHNlc3Npb25Gb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCByZXEuY2xpZW50LmNsb3NlKCk7XG4gICAgICByZXEuaW8uZW1pdCgnd2hhdHNhcHAtc3RhdHVzJywgZmFsc2UpO1xuICAgICAgY2FsbFdlYkhvb2socmVxLmNsaWVudCwgcmVxLCAnY2xvc2VzZXNzaW9uJywge1xuICAgICAgICBtZXNzYWdlOiBgU2Vzc2lvbjogJHtzZXNzaW9ufSBkaXNjb25uZWN0ZWRgLFxuICAgICAgICBjb25uZWN0ZWQ6IGZhbHNlLFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXNcbiAgICAgICAgLnN0YXR1cygyMDApXG4gICAgICAgIC5qc29uKHsgc3RhdHVzOiB0cnVlLCBtZXNzYWdlOiAnU2Vzc2lvbiBzdWNjZXNzZnVsbHkgY2xvc2VkJyB9KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIGF3YWl0IHJlc1xuICAgICAgLnN0YXR1cyg1MDApXG4gICAgICAuanNvbih7IHN0YXR1czogZmFsc2UsIG1lc3NhZ2U6ICdFcnJvciBjbG9zaW5nIHNlc3Npb24nLCBlcnJvciB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9nT3V0U2Vzc2lvbihyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJBdXRoXCJdXG4gICAqICNzd2FnZ2VyLmRlc2NyaXB0aW9uID0gJ1RoaXMgcm91dGUgbG9nb3V0IGFuZCBkZWxldGUgc2Vzc2lvbiBkYXRhJ1xuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCBzZXNzaW9uID0gcmVxLnNlc3Npb247XG4gICAgYXdhaXQgcmVxLmNsaWVudC5sb2dvdXQoKTtcbiAgICAvL2F3YWl0IHJlcS5jbGllbnQuY2xvc2UoKTtcbiAgICBkZWxldGUgY2xpZW50c0FycmF5W3JlcS5zZXNzaW9uXTtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5ybShjb25maWcuY3VzdG9tVXNlckRhdGFEaXIgKyByZXEuc2Vzc2lvbiwge1xuICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIGF3YWl0IGZzLnByb21pc2VzLnJtKFxuICAgICAgX19kaXJuYW1lICsgYC4uLy4uLy4uL3Rva2Vucy8ke3JlcS5zZXNzaW9ufS5kYXRhLmpzb25gXG4gICAgKTtcblxuICAgIHJlcS5pby5lbWl0KCd3aGF0c2FwcC1zdGF0dXMnLCBmYWxzZSk7XG4gICAgY2FsbFdlYkhvb2socmVxLmNsaWVudCwgcmVxLCAnbG9nb3V0c2Vzc2lvbicsIHtcbiAgICAgIG1lc3NhZ2U6IGBTZXNzaW9uOiAke3Nlc3Npb259IGxvZ2dlZCBvdXRgLFxuICAgICAgY29ubmVjdGVkOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCByZXNcbiAgICAgIC5zdGF0dXMoMjAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6IHRydWUsIG1lc3NhZ2U6ICdTZXNzaW9uIHN1Y2Nlc3NmdWxseSBjbG9zZWQnIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBhd2FpdCByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6IGZhbHNlLCBtZXNzYWdlOiAnRXJyb3IgY2xvc2luZyBzZXNzaW9uJywgZXJyb3IgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrQ29ubmVjdGlvblNlc3Npb24ocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiQXV0aFwiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBhd2FpdCByZXEuY2xpZW50LmlzQ29ubmVjdGVkKCk7XG5cbiAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6IHRydWUsIG1lc3NhZ2U6ICdDb25uZWN0ZWQnIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbih7IHN0YXR1czogZmFsc2UsIG1lc3NhZ2U6ICdEaXNjb25uZWN0ZWQnIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3dubG9hZE1lZGlhQnlNZXNzYWdlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIk1lc3NhZ2VzXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VJZDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleGFtcGxlOiB7XG4gICAgICAgICAgICBtZXNzYWdlSWQ6ICc8bWVzc2FnZUlkPidcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgY29uc3QgY2xpZW50ID0gcmVxLmNsaWVudDtcbiAgY29uc3QgeyBtZXNzYWdlSWQgfSA9IHJlcS5ib2R5O1xuXG4gIGxldCBtZXNzYWdlO1xuXG4gIHRyeSB7XG4gICAgaWYgKCFtZXNzYWdlSWQuaXNNZWRpYSB8fCAhbWVzc2FnZUlkLnR5cGUpIHtcbiAgICAgIG1lc3NhZ2UgPSBhd2FpdCBjbGllbnQuZ2V0TWVzc2FnZUJ5SWQobWVzc2FnZUlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2VJZDtcbiAgICB9XG5cbiAgICBpZiAoIW1lc3NhZ2UpXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIG5vdCBmb3VuZCcsXG4gICAgICB9KTtcblxuICAgIGlmICghKG1lc3NhZ2VbJ21pbWV0eXBlJ10gfHwgbWVzc2FnZS5pc01lZGlhIHx8IG1lc3NhZ2UuaXNNTVMpKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTWVzc2FnZSBkb2VzIG5vdCBjb250YWluIG1lZGlhJyxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2xpZW50LmRlY3J5cHRGaWxlKG1lc3NhZ2UpO1xuXG4gICAgcmV0dXJuIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IGJhc2U2NDogYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSwgbWltZXR5cGU6IG1lc3NhZ2UubWltZXR5cGUgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRGVjcnlwdCBmaWxlIGVycm9yJyxcbiAgICAgIGVycm9yOiBlLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRNZWRpYUJ5TWVzc2FnZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ21lc3NhZ2VJZCdcbiAgICAgfVxuICAgKi9cbiAgY29uc3QgY2xpZW50ID0gcmVxLmNsaWVudDtcbiAgY29uc3QgeyBtZXNzYWdlSWQgfSA9IHJlcS5wYXJhbXM7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgY2xpZW50LmdldE1lc3NhZ2VCeUlkKG1lc3NhZ2VJZCk7XG5cbiAgICBpZiAoIW1lc3NhZ2UpXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDApLmpzb24oe1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdNZXNzYWdlIG5vdCBmb3VuZCcsXG4gICAgICB9KTtcblxuICAgIGlmICghKG1lc3NhZ2VbJ21pbWV0eXBlJ10gfHwgbWVzc2FnZS5pc01lZGlhIHx8IG1lc3NhZ2UuaXNNTVMpKVxuICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAwKS5qc29uKHtcbiAgICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTWVzc2FnZSBkb2VzIG5vdCBjb250YWluIG1lZGlhJyxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2xpZW50LmRlY3J5cHRGaWxlKG1lc3NhZ2UpO1xuXG4gICAgcmV0dXJuIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IGJhc2U2NDogYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSwgbWltZXR5cGU6IG1lc3NhZ2UubWltZXR5cGUgfSk7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihleCk7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdUaGUgc2Vzc2lvbiBpcyBub3QgYWN0aXZlJyxcbiAgICAgIGVycm9yOiBleCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2Vzc2lvblN0YXRlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkF1dGhcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICAgI3N3YWdnZXIucmVxdWVzdEJvZHkgPSB7XG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIFwiQGNvbnRlbnRcIjoge1xuICAgICAgICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgd2FpdFFyQ29kZTogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhhbXBsZToge1xuICAgICAgICAgICAgd2FpdFFyQ29kZTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICBjb25zdCB7IHdhaXRRckNvZGUgPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG4gICAgY29uc3QgY2xpZW50ID0gcmVxLmNsaWVudDtcbiAgICBjb25zdCBxciA9XG4gICAgICBjbGllbnQ/LnVybGNvZGUgIT0gbnVsbCAmJiBjbGllbnQ/LnVybGNvZGUgIT0gJydcbiAgICAgICAgPyBhd2FpdCBRUkNvZGUudG9EYXRhVVJMKGNsaWVudC51cmxjb2RlKVxuICAgICAgICA6IG51bGw7XG5cbiAgICBpZiAoKGNsaWVudCA9PSBudWxsIHx8IGNsaWVudC5zdGF0dXMgPT0gbnVsbCkgJiYgIXdhaXRRckNvZGUpXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdDTE9TRUQnLCBxcmNvZGU6IG51bGwgfSk7XG4gICAgZWxzZSBpZiAoY2xpZW50ICE9IG51bGwpXG4gICAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgICBzdGF0dXM6IGNsaWVudC5zdGF0dXMsXG4gICAgICAgIHFyY29kZTogcXIsXG4gICAgICAgIHVybGNvZGU6IGNsaWVudC51cmxjb2RlLFxuICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgfSk7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmVxLmxvZ2dlci5lcnJvcihleCk7XG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdUaGUgc2Vzc2lvbiBpcyBub3QgYWN0aXZlJyxcbiAgICAgIGVycm9yOiBleCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UXJDb2RlKHJlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkge1xuICAvKipcbiAgICogI3N3YWdnZXIudGFncyA9IFtcIkF1dGhcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgaWYgKHJlcT8uY2xpZW50Py51cmxjb2RlKSB7XG4gICAgICBjb25zdCBxciA9IHJlcS5jbGllbnQudXJsY29kZVxuICAgICAgICA/IGF3YWl0IFFSQ29kZS50b0RhdGFVUkwocmVxLmNsaWVudC51cmxjb2RlKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBpbWcgPSBCdWZmZXIuZnJvbShcbiAgICAgICAgKHFyIGFzIGFueSkucmVwbGFjZSgvXmRhdGE6aW1hZ2VcXC8ocG5nfGpwZWd8anBnKTtiYXNlNjQsLywgJycpLFxuICAgICAgICAnYmFzZTY0J1xuICAgICAgKTtcblxuICAgICAgcmVzLndyaXRlSGVhZCgyMDAsIHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdpbWFnZS9wbmcnLFxuICAgICAgICAnQ29udGVudC1MZW5ndGgnOiBpbWcubGVuZ3RoLFxuICAgICAgfSk7XG4gICAgICByZXMuZW5kKGltZyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxLmNsaWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbih7XG4gICAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAnU2Vzc2lvbiBub3Qgc3RhcnRlZC4gUGxlYXNlLCB1c2UgdGhlIC9zdGFydC1zZXNzaW9uIHJvdXRlLCBmb3IgaW5pdGlhbGl6YXRpb24geW91ciBzZXNzaW9uJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oe1xuICAgICAgICBzdGF0dXM6IHJlcS5jbGllbnQuc3RhdHVzLFxuICAgICAgICBtZXNzYWdlOiAnUVJDb2RlIGlzIG5vdCBhdmFpbGFibGUuLi4nLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGNhdGNoIChleCkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXgpO1xuICAgIHJldHVybiByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdlcnJvcicsIG1lc3NhZ2U6ICdFcnJvciByZXRyaWV2aW5nIFFSQ29kZScsIGVycm9yOiBleCB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24ga2lsbFNlcnZpY2VXb3JrZXIocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci5pZ25vcmU9dHJ1ZVxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiTWVzc2FnZXNcIl1cbiAgICAgI3N3YWdnZXIuYXV0b0JvZHk9ZmFsc2VcbiAgICAgI3N3YWdnZXIuc2VjdXJpdHkgPSBbe1xuICAgICAgICAgICAgXCJiZWFyZXJBdXRoXCI6IFtdXG4gICAgIH1dXG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJzZXNzaW9uXCJdID0ge1xuICAgICAgc2NoZW1hOiAnTkVSRFdIQVRTX0FNRVJJQ0EnXG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlc1xuICAgICAgLnN0YXR1cygyMDApXG4gICAgICAuanNvbih7IHN0YXR1czogJ2Vycm9yJywgcmVzcG9uc2U6ICdOb3QgaW1wbGVtZW50ZWQgeWV0JyB9KTtcbiAgfSBjYXRjaCAoZXgpIHtcbiAgICByZXEubG9nZ2VyLmVycm9yKGV4KTtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ1RoZSBzZXNzaW9uIGlzIG5vdCBhY3RpdmUnLFxuICAgICAgZXJyb3I6IGV4LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXN0YXJ0U2VydmljZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLmlnbm9yZT10cnVlXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNZXNzYWdlc1wiXVxuICAgICAjc3dhZ2dlci5hdXRvQm9keT1mYWxzZVxuICAgICAjc3dhZ2dlci5zZWN1cml0eSA9IFt7XG4gICAgICAgICAgICBcImJlYXJlckF1dGhcIjogW11cbiAgICAgfV1cbiAgICAgI3N3YWdnZXIucGFyYW1ldGVyc1tcInNlc3Npb25cIl0gPSB7XG4gICAgICBzY2hlbWE6ICdORVJEV0hBVFNfQU1FUklDQSdcbiAgICAgfVxuICAgKi9cbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVzXG4gICAgICAuc3RhdHVzKDIwMClcbiAgICAgIC5qc29uKHsgc3RhdHVzOiAnZXJyb3InLCByZXNwb25zZTogJ05vdCBpbXBsZW1lbnRlZCB5ZXQnIH0pO1xuICB9IGNhdGNoIChleCkge1xuICAgIHJlcS5sb2dnZXIuZXJyb3IoZXgpO1xuICAgIHJldHVybiByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICByZXNwb25zZTogeyBtZXNzYWdlOiAnVGhlIHNlc3Npb24gaXMgbm90IGFjdGl2ZScsIGVycm9yOiBleCB9LFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdWJzY3JpYmVQcmVzZW5jZShyZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpIHtcbiAgLyoqXG4gICAqICNzd2FnZ2VyLnRhZ3MgPSBbXCJNaXNjXCJdXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnJlcXVlc3RCb2R5ID0ge1xuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBcIkBjb250ZW50XCI6IHtcbiAgICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcbiAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIHBob25lOiB7IHR5cGU6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgICAgaXNHcm91cDogeyB0eXBlOiBcImJvb2xlYW5cIiB9LFxuICAgICAgICAgICAgICBhbGw6IHsgdHlwZTogXCJib29sZWFuXCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGU6IHtcbiAgICAgICAgICAgIHBob25lOiAnNTUyMTk5OTk5OTk5OScsXG4gICAgICAgICAgICBpc0dyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbDogZmFsc2UsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIH1cbiAgICovXG4gIHRyeSB7XG4gICAgY29uc3QgeyBwaG9uZSwgaXNHcm91cCA9IGZhbHNlLCBhbGwgPSBmYWxzZSB9ID0gcmVxLmJvZHk7XG5cbiAgICBpZiAoYWxsKSB7XG4gICAgICBsZXQgY29udGFjdHM7XG4gICAgICBpZiAoaXNHcm91cCkge1xuICAgICAgICBjb25zdCBncm91cHMgPSBhd2FpdCByZXEuY2xpZW50LmdldEFsbEdyb3VwcyhmYWxzZSk7XG4gICAgICAgIGNvbnRhY3RzID0gZ3JvdXBzLm1hcCgocDogYW55KSA9PiBwLmlkLl9zZXJpYWxpemVkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoYXRzID0gYXdhaXQgcmVxLmNsaWVudC5nZXRBbGxDb250YWN0cygpO1xuICAgICAgICBjb250YWN0cyA9IGNoYXRzLm1hcCgoYzogYW55KSA9PiBjLmlkLl9zZXJpYWxpemVkKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHJlcS5jbGllbnQuc3Vic2NyaWJlUHJlc2VuY2UoY29udGFjdHMpO1xuICAgIH0gZWxzZVxuICAgICAgZm9yIChjb25zdCBjb250YXRvIG9mIGNvbnRhY3RUb0FycmF5KHBob25lLCBpc0dyb3VwKSkge1xuICAgICAgICBhd2FpdCByZXEuY2xpZW50LnN1YnNjcmliZVByZXNlbmNlKGNvbnRhdG8pO1xuICAgICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHJlcy5zdGF0dXMoMjAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgcmVzcG9uc2U6IHsgbWVzc2FnZTogJ1N1YnNjcmliZSBwcmVzZW5jZSBleGVjdXRlZCcgfSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gYXdhaXQgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIHN1YnNjcmliZSBwcmVzZW5jZScsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRCdXNpbmVzc1Byb2ZpbGUocmVxOiBSZXF1ZXN0LCByZXM6IFJlc3BvbnNlKSB7XG4gIC8qKlxuICAgKiAjc3dhZ2dlci50YWdzID0gW1wiUHJvZmlsZVwiXVxuICAgKiAjc3dhZ2dlci5kZXNjcmlwdGlvbiA9ICdFZGl0IHlvdXIgYnVzc2luZXNzIHByb2ZpbGUnXG4gICAgICNzd2FnZ2VyLmF1dG9Cb2R5PWZhbHNlXG4gICAgICNzd2FnZ2VyLnNlY3VyaXR5ID0gW3tcbiAgICAgICAgICAgIFwiYmVhcmVyQXV0aFwiOiBbXVxuICAgICB9XVxuICAgICAjc3dhZ2dlci5wYXJhbWV0ZXJzW1wic2Vzc2lvblwiXSA9IHtcbiAgICAgIHNjaGVtYTogJ05FUkRXSEFUU19BTUVSSUNBJ1xuICAgICB9XG4gICAgICNzd2FnZ2VyLnBhcmFtZXRlcnNbXCJvYmpcIl0gPSB7XG4gICAgICBpbjogJ2JvZHknLFxuICAgICAgc2NoZW1hOiB7XG4gICAgICAgICRhZHJlc3M6ICdBdi4gTm9zc2EgU2VuaG9yYSBkZSBDb3BhY2FiYW5hLCAzMTUnLFxuICAgICAgICAkZW1haWw6ICd0ZXN0QHRlc3QuY29tLmJyJyxcbiAgICAgICAgJGNhdGVnb3JpZXM6IHtcbiAgICAgICAgICAkaWQ6IFwiMTMzNDM2NzQzMzg4MjE3XCIsXG4gICAgICAgICAgJGxvY2FsaXplZF9kaXNwbGF5X25hbWU6IFwiQXJ0ZXMgZSBlbnRyZXRlbmltZW50b1wiLFxuICAgICAgICAgICRub3RfYV9iaXo6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICAkd2Vic2l0ZTogW1xuICAgICAgICAgIFwiaHR0cHM6Ly93d3cud3BwY29ubmVjdC5pb1wiLFxuICAgICAgICAgIFwiaHR0cHM6Ly93d3cudGVzdGUyLmNvbS5iclwiLFxuICAgICAgICBdLFxuICAgICAgfVxuICAgICB9XG4gICAgIFxuICAgICAjc3dhZ2dlci5yZXF1ZXN0Qm9keSA9IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgXCJAY29udGVudFwiOiB7XG4gICAgICAgIFwiYXBwbGljYXRpb24vanNvblwiOiB7XG4gICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBhZHJlc3M6IHsgdHlwZTogXCJzdHJpbmdcIiB9LFxuICAgICAgICAgICAgICBlbWFpbDogeyB0eXBlOiBcInN0cmluZ1wiIH0sXG4gICAgICAgICAgICAgIGNhdGVnb3JpZXM6IHsgdHlwZTogXCJvYmplY3RcIiB9LFxuICAgICAgICAgICAgICB3ZWJzaXRlczogeyB0eXBlOiBcImFycmF5XCIgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4YW1wbGU6IHtcbiAgICAgICAgICAgIGFkcmVzczogJ0F2LiBOb3NzYSBTZW5ob3JhIGRlIENvcGFjYWJhbmEsIDMxNScsXG4gICAgICAgICAgICBlbWFpbDogJ3Rlc3RAdGVzdC5jb20uYnInLFxuICAgICAgICAgICAgY2F0ZWdvcmllczoge1xuICAgICAgICAgICAgICAkaWQ6IFwiMTMzNDM2NzQzMzg4MjE3XCIsXG4gICAgICAgICAgICAgICRsb2NhbGl6ZWRfZGlzcGxheV9uYW1lOiBcIkFydGVzIGUgZW50cmV0ZW5pbWVudG9cIixcbiAgICAgICAgICAgICAgJG5vdF9hX2JpejogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2Vic2l0ZTogW1xuICAgICAgICAgICAgICBcImh0dHBzOi8vd3d3LndwcGNvbm5lY3QuaW9cIixcbiAgICAgICAgICAgICAgXCJodHRwczovL3d3dy50ZXN0ZTIuY29tLmJyXCIsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICB9XG4gICAqL1xuICB0cnkge1xuICAgIHJldHVybiByZXMuc3RhdHVzKDIwMCkuanNvbihhd2FpdCByZXEuY2xpZW50LmVkaXRCdXNpbmVzc1Byb2ZpbGUocmVxLmJvZHkpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGVkaXQgYnVzaW5lc3MgcHJvZmlsZScsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkEsSUFBQUEsR0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsVUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBOzs7QUFHQSxJQUFBRyxRQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxrQkFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sYUFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsWUFBQSxHQUFBUixPQUFBLHdCQUFtRCxDQTNCbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBZUEsTUFBTVMsV0FBVyxHQUFHLElBQUlDLDBCQUFpQixDQUFDLENBQUMsQ0FFM0MsZUFBZUMsb0JBQW9CQSxDQUNqQ0MsT0FBZ0IsRUFDaEJDLE1BQWdCLEVBQ2hCQyxNQUFjLEVBQ2QsQ0FDQSxJQUFJLENBQ0YsTUFBTUMsTUFBTSxHQUFHLE1BQU1GLE1BQU0sQ0FBQ0csV0FBVyxDQUFDSixPQUFPLENBQUMsQ0FFaEQsTUFBTUssUUFBUSxHQUFJLHdCQUF1QkwsT0FBTyxDQUFDTSxDQUFFLEVBQUMsQ0FDcEQsSUFBSSxDQUFDQyxXQUFFLENBQUNDLFVBQVUsQ0FBQ0gsUUFBUSxDQUFDLEVBQUUs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
|