@nlabs/reaktor 0.1.5 → 0.1.7
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/lib/config.js +20 -11
- package/lib/data/conversations.js +69 -39
- package/lib/data/dynamodb.js +60 -27
- package/lib/data/email.js +50 -19
- package/lib/data/files.js +103 -46
- package/lib/data/groups.js +114 -67
- package/lib/data/images.js +169 -102
- package/lib/data/index.js +234 -24
- package/lib/data/ios.js +48 -23
- package/lib/data/locations.js +45 -29
- package/lib/data/messages.d.ts +2 -2
- package/lib/data/messages.js +105 -72
- package/lib/data/notifications.js +31 -14
- package/lib/data/payments.js +164 -114
- package/lib/data/posts.js +144 -87
- package/lib/data/reactions.js +58 -33
- package/lib/data/s3.js +54 -24
- package/lib/data/search.js +32 -19
- package/lib/data/sms.js +35 -15
- package/lib/data/subscription.js +78 -51
- package/lib/data/tags.js +90 -51
- package/lib/data/users.js +119 -72
- package/lib/index.js +42 -8
- package/lib/types/apps.js +1 -1
- package/lib/types/arangodb.js +1 -1
- package/lib/types/auth.js +1 -1
- package/lib/types/conversations.js +1 -1
- package/lib/types/email.js +1 -1
- package/lib/types/files.js +1 -1
- package/lib/types/google.js +1 -1
- package/lib/types/groups.js +1 -1
- package/lib/types/images.js +1 -1
- package/lib/types/index.js +210 -22
- package/lib/types/locations.js +1 -1
- package/lib/types/messages.d.ts +12 -7
- package/lib/types/messages.js +1 -1
- package/lib/types/notifications.js +1 -1
- package/lib/types/payments.js +1 -1
- package/lib/types/posts.js +1 -1
- package/lib/types/reactions.js +1 -1
- package/lib/types/tags.js +1 -1
- package/lib/types/users.d.ts +0 -1
- package/lib/types/users.js +1 -1
- package/lib/utils/analytics.js +23 -11
- package/lib/utils/arangodb.js +48 -19
- package/lib/utils/auth.js +31 -15
- package/lib/utils/graphql.js +16 -4
- package/lib/utils/index.js +78 -11
- package/lib/utils/objects.js +30 -10
- package/lib/utils/redis.js +21 -8
- package/package.json +5 -5
- package/index.d.ts +0 -1
package/lib/data/tags.js
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.extractTags = exports.linkTags = exports.createTagEdge = exports.createTag = exports.deleteTag = exports.updateTag = exports.tagPost = exports.addTag = exports.getTag = exports.getTagList = void 0;
|
|
7
|
+
|
|
8
|
+
var _utils = require("@nlabs/utils");
|
|
9
|
+
|
|
10
|
+
var _arangojs = require("arangojs");
|
|
11
|
+
|
|
12
|
+
var _words = _interopRequireDefault(require("lodash/words"));
|
|
13
|
+
|
|
14
|
+
var _utils2 = require("../utils");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
1
18
|
function _templateObject5() {
|
|
2
19
|
var data = _taggedTemplateLiteral(["REMOVE {_key:", "} IN isTagged"]);
|
|
3
20
|
|
|
@@ -54,30 +71,23 @@ function _templateObject() {
|
|
|
54
71
|
|
|
55
72
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
56
73
|
|
|
57
|
-
/**
|
|
58
|
-
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
59
|
-
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
60
|
-
*/
|
|
61
|
-
import { createHash, parseId, parseVarChar } from '@nlabs/utils';
|
|
62
|
-
import { aql } from 'arangojs';
|
|
63
|
-
import words from 'lodash/words';
|
|
64
|
-
import { getLimit, logError, useDb } from '../utils';
|
|
65
74
|
var eventCategory = 'tags';
|
|
66
|
-
|
|
75
|
+
|
|
76
|
+
var getTagList = function getTagList(context) {
|
|
67
77
|
var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
68
78
|
var to = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 30;
|
|
69
79
|
var action = 'getList';
|
|
70
80
|
var database = context.database,
|
|
71
81
|
sessionId = context.userId;
|
|
72
|
-
var limit = getLimit(from, to);
|
|
82
|
+
var limit = (0, _utils2.getLimit)(from, to);
|
|
73
83
|
var aqlQry = "FOR t IN tagList\n FILTER t.userId == \"".concat(sessionId, "\"\n ").concat(limit.aql, "\n SORT t.added\n RETURN t");
|
|
74
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
84
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
75
85
|
return cursor.all();
|
|
76
86
|
}).then(function () {
|
|
77
87
|
var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
78
88
|
return list;
|
|
79
89
|
}).catch(function (error) {
|
|
80
|
-
return logError({
|
|
90
|
+
return (0, _utils2.logError)({
|
|
81
91
|
action: action,
|
|
82
92
|
category: eventCategory,
|
|
83
93
|
label: 'db_error'
|
|
@@ -88,18 +98,21 @@ export var getTagList = function getTagList(context) {
|
|
|
88
98
|
});
|
|
89
99
|
});
|
|
90
100
|
};
|
|
91
|
-
|
|
101
|
+
|
|
102
|
+
exports.getTagList = getTagList;
|
|
103
|
+
|
|
104
|
+
var getTag = function getTag(context, tagId) {
|
|
92
105
|
var action = 'getItem';
|
|
93
106
|
var database = context.database;
|
|
94
|
-
var formatId = JSON.stringify(parseId(tagId));
|
|
107
|
+
var formatId = JSON.stringify((0, _utils.parseId)(tagId));
|
|
95
108
|
var aqlQry = "FOR t IN tags\n FILTER t._key == ".concat(formatId, "\n LIMIT 1\n RETURN t");
|
|
96
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
109
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
97
110
|
return cursor.next();
|
|
98
111
|
}).then(function () {
|
|
99
112
|
var tag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
100
113
|
return tag;
|
|
101
114
|
}).catch(function (error) {
|
|
102
|
-
return logError({
|
|
115
|
+
return (0, _utils2.logError)({
|
|
103
116
|
action: action,
|
|
104
117
|
category: eventCategory,
|
|
105
118
|
label: 'db_error'
|
|
@@ -110,29 +123,32 @@ export var getTag = function getTag(context, tagId) {
|
|
|
110
123
|
});
|
|
111
124
|
});
|
|
112
125
|
};
|
|
113
|
-
|
|
126
|
+
|
|
127
|
+
exports.getTag = getTag;
|
|
128
|
+
|
|
129
|
+
var addTag = function addTag(context, tag) {
|
|
114
130
|
var action = 'add';
|
|
115
131
|
var database = context.database,
|
|
116
132
|
sessionId = context.userId;
|
|
117
133
|
var now = Date.now();
|
|
118
|
-
var formatId = createHash("tag-".concat(sessionId));
|
|
134
|
+
var formatId = (0, _utils.createHash)("tag-".concat(sessionId));
|
|
119
135
|
var description = tag.description,
|
|
120
136
|
name = tag.name;
|
|
121
137
|
var insert = {
|
|
122
138
|
_key: formatId,
|
|
123
139
|
added: now,
|
|
124
|
-
description: parseVarChar(description, 64),
|
|
140
|
+
description: (0, _utils.parseVarChar)(description, 64),
|
|
125
141
|
modified: now,
|
|
126
|
-
name: parseVarChar(name, 32)
|
|
142
|
+
name: (0, _utils.parseVarChar)(name, 32)
|
|
127
143
|
};
|
|
128
|
-
var aqlQry = aql(_templateObject(), insert);
|
|
129
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
144
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject(), insert);
|
|
145
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
130
146
|
return cursor.next();
|
|
131
147
|
}).then(function () {
|
|
132
148
|
var tag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
133
149
|
return tag;
|
|
134
150
|
}).catch(function (error) {
|
|
135
|
-
return logError({
|
|
151
|
+
return (0, _utils2.logError)({
|
|
136
152
|
action: action,
|
|
137
153
|
category: eventCategory,
|
|
138
154
|
label: 'db_error'
|
|
@@ -143,13 +159,16 @@ export var addTag = function addTag(context, tag) {
|
|
|
143
159
|
});
|
|
144
160
|
});
|
|
145
161
|
};
|
|
146
|
-
|
|
162
|
+
|
|
163
|
+
exports.addTag = addTag;
|
|
164
|
+
|
|
165
|
+
var tagPost = function tagPost(context, tagId, postId) {
|
|
147
166
|
var action = 'tagPost';
|
|
148
167
|
var database = context.database,
|
|
149
168
|
sessionId = context.userId;
|
|
150
169
|
var added = Date.now();
|
|
151
|
-
var edgeId = createHash("tagPost-".concat(sessionId));
|
|
152
|
-
var edgeCollection = useDb(database).edgeCollection('isTagged');
|
|
170
|
+
var edgeId = (0, _utils.createHash)("tagPost-".concat(sessionId));
|
|
171
|
+
var edgeCollection = (0, _utils2.useDb)(database).edgeCollection('isTagged');
|
|
153
172
|
var edge = {
|
|
154
173
|
_key: edgeId,
|
|
155
174
|
added: added
|
|
@@ -158,7 +177,7 @@ export var tagPost = function tagPost(context, tagId, postId) {
|
|
|
158
177
|
var post = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
159
178
|
return post;
|
|
160
179
|
}).catch(function (error) {
|
|
161
|
-
return logError({
|
|
180
|
+
return (0, _utils2.logError)({
|
|
162
181
|
action: action,
|
|
163
182
|
category: eventCategory,
|
|
164
183
|
label: 'db_error'
|
|
@@ -169,7 +188,10 @@ export var tagPost = function tagPost(context, tagId, postId) {
|
|
|
169
188
|
});
|
|
170
189
|
});
|
|
171
190
|
};
|
|
172
|
-
|
|
191
|
+
|
|
192
|
+
exports.tagPost = tagPost;
|
|
193
|
+
|
|
194
|
+
var updateTag = function updateTag(context) {
|
|
173
195
|
var item = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
174
196
|
var action = 'update';
|
|
175
197
|
var database = context.database;
|
|
@@ -177,28 +199,28 @@ export var updateTag = function updateTag(context) {
|
|
|
177
199
|
var description = item.description,
|
|
178
200
|
id = item.id,
|
|
179
201
|
name = item.name;
|
|
180
|
-
var formatName = parseVarChar(name, 32);
|
|
202
|
+
var formatName = (0, _utils.parseVarChar)(name, 32);
|
|
181
203
|
var update = {
|
|
182
|
-
description: parseVarChar(description, 64),
|
|
204
|
+
description: (0, _utils.parseVarChar)(description, 64),
|
|
183
205
|
modified: now,
|
|
184
206
|
name: formatName
|
|
185
207
|
};
|
|
186
|
-
var formatId = parseId(id);
|
|
187
|
-
var tagId = !formatId ? createHash("tag-".concat(formatName.toLowerCase()), null) : formatId;
|
|
208
|
+
var formatId = (0, _utils.parseId)(id);
|
|
209
|
+
var tagId = !formatId ? (0, _utils.createHash)("tag-".concat(formatName.toLowerCase()), null) : formatId;
|
|
188
210
|
|
|
189
211
|
var insert = _objectSpread({}, update, {
|
|
190
212
|
_key: tagId,
|
|
191
213
|
added: now
|
|
192
214
|
});
|
|
193
215
|
|
|
194
|
-
var aqlQry = aql(_templateObject2(), tagId, insert, update);
|
|
195
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
216
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject2(), tagId, insert, update);
|
|
217
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
196
218
|
return cursor.next();
|
|
197
219
|
}).then(function () {
|
|
198
220
|
var tag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
199
221
|
return tag;
|
|
200
222
|
}).catch(function (error) {
|
|
201
|
-
return logError({
|
|
223
|
+
return (0, _utils2.logError)({
|
|
202
224
|
action: action,
|
|
203
225
|
category: eventCategory,
|
|
204
226
|
label: 'db_error'
|
|
@@ -209,18 +231,21 @@ export var updateTag = function updateTag(context) {
|
|
|
209
231
|
});
|
|
210
232
|
});
|
|
211
233
|
};
|
|
212
|
-
|
|
234
|
+
|
|
235
|
+
exports.updateTag = updateTag;
|
|
236
|
+
|
|
237
|
+
var deleteTag = function deleteTag(context, tagId) {
|
|
213
238
|
var action = 'delete';
|
|
214
239
|
var database = context.database;
|
|
215
|
-
var formatTagId = parseId(tagId);
|
|
216
|
-
var aqlQry = aql(_templateObject3(), formatTagId);
|
|
217
|
-
return useDb(database).query(aqlQry).then(function (cursor) {
|
|
240
|
+
var formatTagId = (0, _utils.parseId)(tagId);
|
|
241
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject3(), formatTagId);
|
|
242
|
+
return (0, _utils2.useDb)(database).query(aqlQry).then(function (cursor) {
|
|
218
243
|
return cursor.next();
|
|
219
244
|
}).then(function () {
|
|
220
245
|
var tag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
221
246
|
return tag;
|
|
222
247
|
}).catch(function (error) {
|
|
223
|
-
return logError({
|
|
248
|
+
return (0, _utils2.logError)({
|
|
224
249
|
action: action,
|
|
225
250
|
category: eventCategory,
|
|
226
251
|
label: 'db_error'
|
|
@@ -231,14 +256,17 @@ export var deleteTag = function deleteTag(context, tagId) {
|
|
|
231
256
|
});
|
|
232
257
|
});
|
|
233
258
|
};
|
|
234
|
-
|
|
235
|
-
|
|
259
|
+
|
|
260
|
+
exports.deleteTag = deleteTag;
|
|
261
|
+
|
|
262
|
+
var createTag = function createTag(db, tagName) {
|
|
263
|
+
var tagId = (0, _utils.createHash)("tag-".concat(tagName));
|
|
236
264
|
var insert = {
|
|
237
265
|
_key: tagId,
|
|
238
266
|
added: Date.now(),
|
|
239
267
|
name: tagName
|
|
240
268
|
};
|
|
241
|
-
var aqlQry = aql(_templateObject4(), tagId, insert);
|
|
269
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject4(), tagId, insert);
|
|
242
270
|
return db.query(aqlQry).then(function (cursor) {
|
|
243
271
|
return cursor.next();
|
|
244
272
|
}).then(function () {
|
|
@@ -248,11 +276,14 @@ export var createTag = function createTag(db, tagName) {
|
|
|
248
276
|
throw error;
|
|
249
277
|
});
|
|
250
278
|
};
|
|
251
|
-
|
|
279
|
+
|
|
280
|
+
exports.createTag = createTag;
|
|
281
|
+
|
|
282
|
+
var createTagEdge = function createTagEdge(db, tag, itemType, itemId) {
|
|
252
283
|
var edgeCollection = db.edgeCollection('isTagged');
|
|
253
284
|
var tagId = tag._id,
|
|
254
285
|
tagKey = tag._key;
|
|
255
|
-
var edgeId = createHash("tag-".concat(itemType, "-").concat(tagKey, "-").concat(itemId));
|
|
286
|
+
var edgeId = (0, _utils.createHash)("tag-".concat(itemType, "-").concat(tagKey, "-").concat(itemId));
|
|
256
287
|
var edge = {
|
|
257
288
|
_key: edgeId,
|
|
258
289
|
added: Date.now(),
|
|
@@ -262,16 +293,22 @@ export var createTagEdge = function createTagEdge(db, tag, itemType, itemId) {
|
|
|
262
293
|
return tag;
|
|
263
294
|
});
|
|
264
295
|
};
|
|
265
|
-
|
|
296
|
+
|
|
297
|
+
exports.createTagEdge = createTagEdge;
|
|
298
|
+
|
|
299
|
+
var linkTags = function linkTags(db, tagNames, itemType, itemId) {
|
|
266
300
|
return Promise.all(tagNames.map(function (tagId) {
|
|
267
301
|
return createTag(db, tagId).then(function (tag) {
|
|
268
302
|
return createTagEdge(db, tag, itemType, itemId);
|
|
269
303
|
});
|
|
270
304
|
}));
|
|
271
305
|
};
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
306
|
+
|
|
307
|
+
exports.linkTags = linkTags;
|
|
308
|
+
|
|
309
|
+
var extractTags = function extractTags(db, itemType, itemId, content) {
|
|
310
|
+
var tags = (0, _words.default)(content, /#[a-zA-Z\d-]+/g).map(function (tag) {
|
|
311
|
+
return (0, _utils.parseId)(tag);
|
|
275
312
|
});
|
|
276
313
|
var edgeCollection = db.edgeCollection('isTagged');
|
|
277
314
|
return edgeCollection.inEdges(itemId).then(function (edges) {
|
|
@@ -279,7 +316,7 @@ export var extractTags = function extractTags(db, itemType, itemId, content) {
|
|
|
279
316
|
// Remove linked edges
|
|
280
317
|
return Promise.all(edges.map(function (edge) {
|
|
281
318
|
var edgeKey = edge._key;
|
|
282
|
-
var aqlQry = aql(_templateObject5(), edgeKey);
|
|
319
|
+
var aqlQry = (0, _arangojs.aql)(_templateObject5(), edgeKey);
|
|
283
320
|
return db.query(aqlQry).catch(function (error) {
|
|
284
321
|
throw error;
|
|
285
322
|
});
|
|
@@ -301,4 +338,6 @@ export var extractTags = function extractTags(db, itemType, itemId, content) {
|
|
|
301
338
|
throw error;
|
|
302
339
|
});
|
|
303
340
|
};
|
|
304
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL3RhZ3MudHMiXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlSWQiLCJwYXJzZVZhckNoYXIiLCJhcWwiLCJ3b3JkcyIsImdldExpbWl0IiwibG9nRXJyb3IiLCJ1c2VEYiIsImV2ZW50Q2F0ZWdvcnkiLCJnZXRUYWdMaXN0IiwiY29udGV4dCIsImZyb20iLCJ0byIsImFjdGlvbiIsImRhdGFiYXNlIiwic2Vzc2lvbklkIiwidXNlcklkIiwibGltaXQiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJhbGwiLCJsaXN0IiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJQcm9taXNlIiwicmVqZWN0IiwiZ2V0VGFnIiwidGFnSWQiLCJmb3JtYXRJZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXh0IiwidGFnIiwiYWRkVGFnIiwibm93IiwiRGF0ZSIsImRlc2NyaXB0aW9uIiwibmFtZSIsImluc2VydCIsIl9rZXkiLCJhZGRlZCIsIm1vZGlmaWVkIiwidGFnUG9zdCIsInBvc3RJZCIsImVkZ2VJZCIsImVkZ2VDb2xsZWN0aW9uIiwiZWRnZSIsInNhdmUiLCJwb3N0IiwidXBkYXRlVGFnIiwiaXRlbSIsImlkIiwiZm9ybWF0TmFtZSIsInVwZGF0ZSIsInRvTG93ZXJDYXNlIiwiZGVsZXRlVGFnIiwiZm9ybWF0VGFnSWQiLCJjcmVhdGVUYWciLCJkYiIsInRhZ05hbWUiLCJjcmVhdGVUYWdFZGdlIiwiaXRlbVR5cGUiLCJpdGVtSWQiLCJfaWQiLCJ0YWdLZXkiLCJ0eXBlIiwibGlua1RhZ3MiLCJ0YWdOYW1lcyIsIm1hcCIsImV4dHJhY3RUYWdzIiwiY29udGVudCIsInRhZ3MiLCJpbkVkZ2VzIiwiZWRnZXMiLCJsZW5ndGgiLCJlZGdlS2V5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBSUEsU0FBUUEs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LElBQUQsRUFBVTtBQUFBLFlBQ0w2QixPQURLLEdBQ003QixJQUROLENBQ1hQLElBRFc7QUFFbEIsWUFBTXpCLE1BQU0sR0FBR2YsR0FBSCxxQkFBc0I0RSxPQUF0QixDQUFaO0FBQ0EsZUFBT2pCLEVBQUUsQ0FBQzNDLEtBQUgsQ0FBU0QsTUFBVCxFQUFpQk0sS0FBakIsQ0FBdUIsVUFBQ0MsS0FBRCxFQUFrQjtBQUM5QyxnQkFBTUEsS0FBTjtBQUNELFNBRk0sQ0FBUDtBQUdELE9BTkQsQ0FESyxFQVFKTCxJQVJJLENBUUMsWUFBTTtBQUNWLFlBQUd1RCxJQUFJLENBQUNHLE1BQVIsRUFBZ0I7QUFDZDtBQUNBLGlCQUFPUixRQUFRLENBQUNSLEVBQUQsRUFBS2EsSUFBTCxFQUFXVixRQUFYLEVBQXFCQyxNQUFyQixDQUFmO0FBQ0Q7O0FBQ0QsZUFBTyxFQUFQO0FBQ0QsT0FkSSxDQUFQO0FBZUQsS0FqQkQsTUFpQk8sSUFBR1MsSUFBSSxDQUFDRyxNQUFSLEVBQWdCO0FBQ3JCO0FBQ0EsYUFBT1IsUUFBUSxDQUFDUixFQUFELEVBQUthLElBQUwsRUFBV1YsUUFBWCxFQUFxQkMsTUFBckIsQ0FBZjtBQUNEOztBQUNELFdBQU8sRUFBUDtBQUNELEdBeEJJLEVBeUJKMUMsS0F6QkksQ0F5QkUsVUFBQ0MsS0FBRCxFQUFrQjtBQUN2QixVQUFNQSxLQUFOO0FBQ0QsR0EzQkksQ0FBUDtBQTRCRCxDQWhDTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWQsIHBhcnNlVmFyQ2hhcn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsLCBEYXRhYmFzZSwgRWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvYXFsLXF1ZXJ5JztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvY3Vyc29yJztcbmltcG9ydCB3b3JkcyBmcm9tICdsb2Rhc2gvd29yZHMnO1xuXG5pbXBvcnQge0FyYW5nb0RCTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aCc7XG5pbXBvcnQge1Bvc3RUeXBlfSBmcm9tICcuLi90eXBlcy9wb3N0cyc7XG5pbXBvcnQge1RhZ1R5cGV9IGZyb20gJy4uL3R5cGVzL3RhZ3MnO1xuaW1wb3J0IHtnZXRMaW1pdCwgbG9nRXJyb3IsIHVzZURifSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICd0YWdzJztcblxuZXhwb3J0IGNvbnN0IGdldFRhZ0xpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyID0gMCwgdG86IG51bWJlciA9IDMwKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB0IElOIHRhZ0xpc3RcbiAgICAgIEZJTFRFUiB0LnVzZXJJZCA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICAke2xpbWl0LmFxbH1cbiAgICAgIFNPUlQgdC5hZGRlZFxuICAgICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3QgPSBbXSkgPT4gbGlzdClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0YWdJZDogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHBhcnNlSWQodGFnSWQpKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHQgSU4gdGFnc1xuICAgICAgRklMVEVSIHQuX2tleSA9PSAke2Zvcm1hdElkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZzogVGFnVHlwZSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHRhZy0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3Qge2Rlc2NyaXB0aW9uLCBuYW1lfSA9IHRhZztcblxuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICBfa2V5OiBmb3JtYXRJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGRlc2NyaXB0aW9uOiBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDY0KSxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IHBhcnNlVmFyQ2hhcihuYW1lLCAzMilcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gdGFncyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnOiBUYWdUeXBlID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRhZ1Bvc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnSWQsIHBvc3RJZCk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndGFnUG9zdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgYWRkZWQ6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgdGFnUG9zdC0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2UpLmVkZ2VDb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7X2tleTogZWRnZUlkLCBhZGRlZH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwgYHRhZ3MvJHt0YWdJZH1gLCBgcG9zdHMvJHtwb3N0SWR9YClcbiAgICAudGhlbigocG9zdDogUG9zdFR5cGUgPSB7fSkgPT4gcG9zdClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBUYWdUeXBlID0ge30pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge2Rlc2NyaXB0aW9uLCBpZCwgbmFtZX0gPSBpdGVtO1xuICBjb25zdCBmb3JtYXROYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIobmFtZSwgMzIpO1xuXG4gIGNvbnN0IHVwZGF0ZTogVGFnVHlwZSA9IHtcbiAgICBkZXNjcmlwdGlvbjogcGFyc2VWYXJDaGFyKGRlc2NyaXB0aW9uLCA2NCksXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBmb3JtYXROYW1lXG4gIH07XG5cbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQoaWQpO1xuICBjb25zdCB0YWdJZDogc3RyaW5nID0gIWZvcm1hdElkID8gY3JlYXRlSGFzaChgdGFnLSR7Zm9ybWF0TmFtZS50b0xvd2VyQ2FzZSgpfWAsIG51bGwpIDogZm9ybWF0SWQ7XG5cbiAgY29uc3QgaW5zZXJ0OiBUYWdUeXBlID0ge1xuICAgIC4uLnVwZGF0ZSxcbiAgICBfa2V5OiB0YWdJZCxcbiAgICBhZGRlZDogbm93XG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke3RhZ0lkfX1cbiAgICAgIElOU0VSVCAke2luc2VydH1cbiAgICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICAgIElOIHRhZ3MgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZyA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGUnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VGFnSWQ6IHN0cmluZyA9IHBhcnNlSWQodGFnSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB0IElOIHRhZ3NcbiAgICBGSUxURVIgdC5fa2V5ID09ICR7Zm9ybWF0VGFnSWR9XG4gICAgUkVNT1ZFIHQgSU4gdGFnc1xuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWc6IFRhZ1R5cGUgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGFnID0gKGRiOiBEYXRhYmFzZSwgdGFnTmFtZTogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IHRhZ0lkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGB0YWctJHt0YWdOYW1lfWApO1xuICBjb25zdCBpbnNlcnQ6IFRhZ1R5cGUgPSB7XG4gICAgX2tleTogdGFnSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgbmFtZTogdGFnTmFtZVxuICB9O1xuXG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7dGFnSWR9fVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUge31cbiAgICBJTiB0YWdzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZyA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRhZ0VkZ2UgPSAoZGI6IERhdGFiYXNlLCB0YWc6IFRhZ1R5cGUsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uID0gZGIuZWRnZUNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG4gIGNvbnN0IHtfaWQ6IHRhZ0lkLCBfa2V5OiB0YWdLZXl9ID0gdGFnO1xuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGB0YWctJHtpdGVtVHlwZX0tJHt0YWdLZXl9LSR7aXRlbUlkfWApO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2tleTogZWRnZUlkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIHR5cGU6IGl0ZW1UeXBlXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwgdGFnSWQsIGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gKS50aGVuKCgpID0+IHRhZyk7XG59O1xuXG5leHBvcnQgY29uc3QgbGlua1RhZ3MgPSAoZGI6IERhdGFiYXNlLCB0YWdOYW1lczogc3RyaW5nW10sIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+XG4gIFByb21pc2UuYWxsKFxuICAgIHRhZ05hbWVzLm1hcCgodGFnSWQ6IHN0cmluZykgPT4gY3JlYXRlVGFnKGRiLCB0YWdJZClcbiAgICAgIC50aGVuKCh0YWc6IFRhZ1R5cGUpID0+IGNyZWF0ZVRhZ0VkZ2UoZGIsIHRhZywgaXRlbVR5cGUsIGl0ZW1JZCkpKVxuICApO1xuXG5cbmV4cG9ydCBjb25zdCBleHRyYWN0VGFncyA9IChkYjogRGF0YWJhc2UsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZCwgY29udGVudCk6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHRhZ3M6IHN0cmluZ1tdID0gd29yZHMoY29udGVudCwgLyNbYS16QS1aXFxkLV0rL2cpLm1hcCgodGFnOiBzdHJpbmcpID0+IHBhcnNlSWQodGFnKSk7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uID0gZGIuZWRnZUNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLmluRWRnZXMoaXRlbUlkKVxuICAgIC50aGVuKChlZGdlcykgPT4ge1xuICAgICAgaWYoZWRnZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBsaW5rZWQgZWRnZXNcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBSRU1PVkUge19rZXk6JHtlZGdlS2V5fX0gSU4gaXNUYWdnZWRgO1xuICAgICAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSkuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmKHRhZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSB0YWdzXG4gICAgICAgICAgICAgIHJldHVybiBsaW5rVGFncyhkYiwgdGFncywgaXRlbVR5cGUsIGl0ZW1JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYodGFncy5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ3JlYXRlIHRhZ3NcbiAgICAgICAgcmV0dXJuIGxpbmtUYWdzKGRiLCB0YWdzLCBpdGVtVHlwZSwgaXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG4iXX0=
|
|
341
|
+
|
|
342
|
+
exports.extractTags = extractTags;
|
|
343
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhL3RhZ3MudHMiXSwibmFtZXMiOlsiZXZlbnRDYXRlZ29yeSIsImdldFRhZ0xpc3QiLCJjb250ZXh0IiwiZnJvbSIsInRvIiwiYWN0aW9uIiwiZGF0YWJhc2UiLCJzZXNzaW9uSWQiLCJ1c2VySWQiLCJsaW1pdCIsImFxbFFyeSIsImFxbCIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImFsbCIsImxpc3QiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJsYWJlbCIsIlByb21pc2UiLCJyZWplY3QiLCJnZXRUYWciLCJ0YWdJZCIsImZvcm1hdElkIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5leHQiLCJ0YWciLCJhZGRUYWciLCJub3ciLCJEYXRlIiwiZGVzY3JpcHRpb24iLCJuYW1lIiwiaW5zZXJ0IiwiX2tleSIsImFkZGVkIiwibW9kaWZpZWQiLCJ0YWdQb3N0IiwicG9zdElkIiwiZWRnZUlkIiwiZWRnZUNvbGxlY3Rpb24iLCJlZGdlIiwic2F2ZSIsInBvc3QiLCJ1cGRhdGVUYWciLCJpdGVtIiwiaWQiLCJmb3JtYXROYW1lIiwidXBkYXRlIiwidG9Mb3dlckNhc2UiLCJkZWxldGVUYWciLCJmb3JtYXRUYWdJZCIsImNyZWF0ZVRhZyIsImRiIiwidGFnTmFtZSIsImNyZWF0ZVRhZ0VkZ2UiLCJpdGVtVHlwZSIsIml0ZW1JZCIsIl9pZCIsInRhZ0tleSIsInR5cGUiLCJsaW5rVGFncyIsInRhZ05hbWVzIiwibWFwIiwiZXh0cmFjdFRhZ3MiLCJjb250ZW50IiwidGFncyIsImluRWRnZXMiLCJlZGdlcyIsImxlbmd0aCIsImVkZ2VLZXkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFHQTs7QUFNQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsYUFBcUIsR0FBRyxNQUE5Qjs7QUFFTyxJQUFNQyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxD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QUFELEVBQUthLElBQUwsRUFBV1YsUUFBWCxFQUFxQkMsTUFBckIsQ0FBZjtBQUNEOztBQUNELFdBQU8sRUFBUDtBQUNELEdBeEJJLEVBeUJKMUMsS0F6QkksQ0F5QkUsVUFBQ0MsS0FBRCxFQUFrQjtBQUN2QixVQUFNQSxLQUFOO0FBQ0QsR0EzQkksQ0FBUDtBQTRCRCxDQWhDTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWQsIHBhcnNlVmFyQ2hhcn0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsLCBEYXRhYmFzZSwgRWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvYXFsLXF1ZXJ5JztcbmltcG9ydCB7QXJyYXlDdXJzb3J9IGZyb20gJ2FyYW5nb2pzL2xpYi9janMvY3Vyc29yJztcbmltcG9ydCB3b3JkcyBmcm9tICdsb2Rhc2gvd29yZHMnO1xuXG5pbXBvcnQge0FyYW5nb0RCTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aCc7XG5pbXBvcnQge1Bvc3RUeXBlfSBmcm9tICcuLi90eXBlcy9wb3N0cyc7XG5pbXBvcnQge1RhZ1R5cGV9IGZyb20gJy4uL3R5cGVzL3RhZ3MnO1xuaW1wb3J0IHtnZXRMaW1pdCwgbG9nRXJyb3IsIHVzZURifSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICd0YWdzJztcblxuZXhwb3J0IGNvbnN0IGdldFRhZ0xpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgZnJvbTogbnVtYmVyID0gMCwgdG86IG51bWJlciA9IDMwKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgbGltaXQ6IEFyYW5nb0RCTGltaXQgPSBnZXRMaW1pdChmcm9tLCB0byk7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB0IElOIHRhZ0xpc3RcbiAgICAgIEZJTFRFUiB0LnVzZXJJZCA9PSBcIiR7c2Vzc2lvbklkfVwiXG4gICAgICAke2xpbWl0LmFxbH1cbiAgICAgIFNPUlQgdC5hZGRlZFxuICAgICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3QgPSBbXSkgPT4gbGlzdClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0YWdJZDogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHBhcnNlSWQodGFnSWQpKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHQgSU4gdGFnc1xuICAgICAgRklMVEVSIHQuX2tleSA9PSAke2Zvcm1hdElkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWcgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVGFnID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHRhZzogVGFnVHlwZSk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGQnO1xuICBjb25zdCB7ZGF0YWJhc2UsIHVzZXJJZDogc2Vzc2lvbklkfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHRhZy0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3Qge2Rlc2NyaXB0aW9uLCBuYW1lfSA9IHRhZztcblxuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICBfa2V5OiBmb3JtYXRJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGRlc2NyaXB0aW9uOiBwYXJzZVZhckNoYXIoZGVzY3JpcHRpb24sIDY0KSxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWU6IHBhcnNlVmFyQ2hhcihuYW1lLCAzMilcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gdGFncyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2UpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yOiBBcnJheUN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodGFnOiBUYWdUeXBlID0ge30pID0+IHRhZylcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRhZ1Bvc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnSWQsIHBvc3RJZCk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndGFnUG9zdCc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcbiAgY29uc3QgYWRkZWQ6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgdGFnUG9zdC0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2UpLmVkZ2VDb2xsZWN0aW9uKCdpc1RhZ2dlZCcpO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7X2tleTogZWRnZUlkLCBhZGRlZH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwgYHRhZ3MvJHt0YWdJZH1gLCBgcG9zdHMvJHtwb3N0SWR9YClcbiAgICAudGhlbigocG9zdDogUG9zdFR5cGUgPSB7fSkgPT4gcG9zdClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ2RiX2Vycm9yJ1xuICAgIH0sIGVycm9yLCB7fSkudGhlbigoKSA9PiBudWxsKS5jYXRjaCgoZXJyb3IpID0+IFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVRhZyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtOiBUYWdUeXBlID0ge30pOiBQcm9taXNlPFRhZ1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qge2Rlc2NyaXB0aW9uLCBpZCwgbmFtZX0gPSBpdGVtO1xuICBjb25zdCBmb3JtYXROYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIobmFtZSwgMzIpO1xuXG4gIGNvbnN0IHVwZGF0ZTogVGFnVHlwZSA9IHtcbiAgICBkZXNjcmlwdGlvbjogcGFyc2VWYXJDaGFyKGRlc2NyaXB0aW9uLCA2NCksXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBmb3JtYXROYW1lXG4gIH07XG5cbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQoaWQpO1xuICBjb25zdCB0YWdJZDogc3RyaW5nID0gIWZvcm1hdElkID8gY3JlYXRlSGFzaChgdGFnLSR7Zm9ybWF0TmFtZS50b0xvd2VyQ2FzZSgpfWAsIG51bGwpIDogZm9ybWF0SWQ7XG5cbiAgY29uc3QgaW5zZXJ0OiBUYWdUeXBlID0ge1xuICAgIC4uLnVwZGF0ZSxcbiAgICBfa2V5OiB0YWdJZCxcbiAgICBhZGRlZDogbm93XG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke3RhZ0lkfX1cbiAgICAgIElOU0VSVCAke2luc2VydH1cbiAgICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICAgIElOIHRhZ3MgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZyA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICdkYl9lcnJvcidcbiAgICB9LCBlcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkuY2F0Y2goKGVycm9yKSA9PiBQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVUYWcgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdGFnSWQ6IHN0cmluZyk6IFByb21pc2U8VGFnVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGUnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VGFnSWQ6IHN0cmluZyA9IHBhcnNlSWQodGFnSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB0IElOIHRhZ3NcbiAgICBGSUxURVIgdC5fa2V5ID09ICR7Zm9ybWF0VGFnSWR9XG4gICAgUkVNT1ZFIHQgSU4gdGFnc1xuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3I6IEFycmF5Q3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh0YWc6IFRhZ1R5cGUgPSB7fSkgPT4gdGFnKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnZGJfZXJyb3InXG4gICAgfSwgZXJyb3IsIHt9KS50aGVuKCgpID0+IG51bGwpLmNhdGNoKChlcnJvcikgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGFnID0gKGRiOiBEYXRhYmFzZSwgdGFnTmFtZTogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IHRhZ0lkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGB0YWctJHt0YWdOYW1lfWApO1xuICBjb25zdCBpbnNlcnQ6IFRhZ1R5cGUgPSB7XG4gICAgX2tleTogdGFnSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgbmFtZTogdGFnTmFtZVxuICB9O1xuXG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7dGFnSWR9fVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUge31cbiAgICBJTiB0YWdzIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYi5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcjogQXJyYXlDdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHRhZyA9IHt9KSA9PiB0YWcpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRhZ0VkZ2UgPSAoZGI6IERhdGFiYXNlLCB0YWc6IFRhZ1R5cGUsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlPiA9PiB7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uID0gZGIuZWRnZUNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG4gIGNvbnN0IHtfaWQ6IHRhZ0lkLCBfa2V5OiB0YWdLZXl9ID0gdGFnO1xuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGB0YWctJHtpdGVtVHlwZX0tJHt0YWdLZXl9LSR7aXRlbUlkfWApO1xuICBjb25zdCBlZGdlOiBhbnkgPSB7XG4gICAgX2tleTogZWRnZUlkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIHR5cGU6IGl0ZW1UeXBlXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwgdGFnSWQsIGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gKS50aGVuKCgpID0+IHRhZyk7XG59O1xuXG5leHBvcnQgY29uc3QgbGlua1RhZ3MgPSAoZGI6IERhdGFiYXNlLCB0YWdOYW1lczogc3RyaW5nW10sIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxUYWdUeXBlW10+ID0+XG4gIFByb21pc2UuYWxsKFxuICAgIHRhZ05hbWVzLm1hcCgodGFnSWQ6IHN0cmluZykgPT4gY3JlYXRlVGFnKGRiLCB0YWdJZClcbiAgICAgIC50aGVuKCh0YWc6IFRhZ1R5cGUpID0+IGNyZWF0ZVRhZ0VkZ2UoZGIsIHRhZywgaXRlbVR5cGUsIGl0ZW1JZCkpKVxuICApO1xuXG5cbmV4cG9ydCBjb25zdCBleHRyYWN0VGFncyA9IChkYjogRGF0YWJhc2UsIGl0ZW1UeXBlOiBzdHJpbmcsIGl0ZW1JZCwgY29udGVudCk6IFByb21pc2U8VGFnVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHRhZ3M6IHN0cmluZ1tdID0gd29yZHMoY29udGVudCwgLyNbYS16QS1aXFxkLV0rL2cpLm1hcCgodGFnOiBzdHJpbmcpID0+IHBhcnNlSWQodGFnKSk7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uID0gZGIuZWRnZUNvbGxlY3Rpb24oJ2lzVGFnZ2VkJyk7XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLmluRWRnZXMoaXRlbUlkKVxuICAgIC50aGVuKChlZGdlcykgPT4ge1xuICAgICAgaWYoZWRnZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBsaW5rZWQgZWRnZXNcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBSRU1PVkUge19rZXk6JHtlZGdlS2V5fX0gSU4gaXNUYWdnZWRgO1xuICAgICAgICAgICAgcmV0dXJuIGRiLnF1ZXJ5KGFxbFFyeSkuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKVxuICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmKHRhZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIENyZWF0ZSB0YWdzXG4gICAgICAgICAgICAgIHJldHVybiBsaW5rVGFncyhkYiwgdGFncywgaXRlbVR5cGUsIGl0ZW1JZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYodGFncy5sZW5ndGgpIHtcbiAgICAgICAgLy8gQ3JlYXRlIHRhZ3NcbiAgICAgICAgcmV0dXJuIGxpbmtUYWdzKGRiLCB0YWdzLCBpdGVtVHlwZSwgaXRlbUlkKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG4iXX0=
|