@payloadcms/graphql 3.0.0-alpha.4 → 3.0.0-alpha.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +27 -83
- package/dist/resolvers/auth/access.d.ts +1 -1
- package/dist/resolvers/auth/access.d.ts.map +1 -1
- package/dist/resolvers/auth/access.js +8 -23
- package/dist/resolvers/auth/forgotPassword.js +6 -16
- package/dist/resolvers/auth/init.d.ts +1 -1
- package/dist/resolvers/auth/init.d.ts.map +1 -1
- package/dist/resolvers/auth/init.js +6 -16
- package/dist/resolvers/auth/login.d.ts +1 -4
- package/dist/resolvers/auth/login.d.ts.map +1 -1
- package/dist/resolvers/auth/login.js +8 -18
- package/dist/resolvers/auth/logout.js +8 -18
- package/dist/resolvers/auth/me.js +6 -16
- package/dist/resolvers/auth/refresh.d.ts +1 -2
- package/dist/resolvers/auth/refresh.d.ts.map +1 -1
- package/dist/resolvers/auth/refresh.js +9 -19
- package/dist/resolvers/auth/resetPassword.d.ts +1 -2
- package/dist/resolvers/auth/resetPassword.d.ts.map +1 -1
- package/dist/resolvers/auth/resetPassword.js +8 -18
- package/dist/resolvers/auth/unlock.d.ts +1 -1
- package/dist/resolvers/auth/unlock.d.ts.map +1 -1
- package/dist/resolvers/auth/unlock.js +6 -16
- package/dist/resolvers/auth/verifyEmail.d.ts +1 -1
- package/dist/resolvers/auth/verifyEmail.d.ts.map +1 -1
- package/dist/resolvers/auth/verifyEmail.js +6 -16
- package/dist/resolvers/collections/create.js +6 -16
- package/dist/resolvers/collections/delete.js +8 -18
- package/dist/resolvers/collections/docAccess.js +6 -16
- package/dist/resolvers/collections/find.js +8 -18
- package/dist/resolvers/collections/findByID.js +8 -18
- package/dist/resolvers/collections/findVersionByID.js +8 -18
- package/dist/resolvers/collections/findVersions.js +8 -18
- package/dist/resolvers/collections/restoreVersion.js +6 -16
- package/dist/resolvers/collections/update.js +8 -18
- package/dist/resolvers/globals/docAccess.js +6 -16
- package/dist/resolvers/globals/findOne.js +6 -16
- package/dist/resolvers/globals/findVersionByID.js +6 -16
- package/dist/resolvers/globals/findVersions.js +6 -16
- package/dist/resolvers/globals/index.d.ts +5 -5
- package/dist/resolvers/globals/index.d.ts.map +1 -1
- package/dist/resolvers/globals/index.js +7 -38
- package/dist/resolvers/globals/restoreVersion.js +6 -16
- package/dist/resolvers/globals/update.js +6 -16
- package/dist/resolvers/types.js +2 -5
- package/dist/schema/buildFallbackLocaleInputType.js +6 -21
- package/dist/schema/buildLocaleInputType.js +6 -21
- package/dist/schema/buildMutationInputType.js +53 -75
- package/dist/schema/buildObjectType.js +55 -70
- package/dist/schema/buildPaginatedListType.js +15 -25
- package/dist/schema/buildPoliciesType.js +27 -53
- package/dist/schema/buildWhereInputType.js +19 -34
- package/dist/schema/fieldToWhereInputSchemaMap.d.ts.map +1 -1
- package/dist/schema/fieldToWhereInputSchemaMap.js +34 -48
- package/dist/schema/initCollections.js +120 -135
- package/dist/schema/initGlobals.js +41 -56
- package/dist/schema/isFieldNullable.js +4 -14
- package/dist/schema/operators.js +2 -12
- package/dist/schema/recursivelyBuildNestedPaths.js +9 -24
- package/dist/schema/withNullableType.js +4 -14
- package/dist/schema/withOperators.js +80 -84
- package/dist/utilities/combineParentName.js +4 -19
- package/dist/utilities/formatName.js +2 -12
- package/dist/utilities/formatName.spec.js +3 -12
- package/dist/utilities/formatOptions.js +5 -20
- package/dist/utilities/getCheckIfLocaleObject.js +2 -12
- package/dist/utilities/groupOrTabHasRequiredSubfield.js +4 -14
- package/dist/utilities/uppercase.js +2 -12
- package/dist/utilities/wrapCustomResolver.d.ts +2 -2
- package/dist/utilities/wrapCustomResolver.d.ts.map +1 -1
- package/dist/utilities/wrapCustomResolver.js +4 -14
- package/package.json +5 -4
- package/src/index.ts +7 -7
- package/dist/utilities/isolateTransactionID.d.ts +0 -2
- package/dist/utilities/isolateTransactionID.d.ts.map +0 -1
- package/dist/utilities/isolateTransactionID.js +0 -3
|
@@ -1,46 +1,31 @@
|
|
|
1
|
-
/* eslint-disable no-param-reassign */
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const _formatName = /*#__PURE__*/ _interop_require_default(require("../utilities/formatName"));
|
|
30
|
-
const _create = /*#__PURE__*/ _interop_require_default(require("../resolvers/collections/create"));
|
|
31
|
-
const _delete = /*#__PURE__*/ _interop_require_default(require("../resolvers/collections/delete"));
|
|
32
|
-
const _docAccess = require("../resolvers/collections/docAccess");
|
|
33
|
-
const _find = /*#__PURE__*/ _interop_require_default(require("../resolvers/collections/find"));
|
|
34
|
-
const _findByID = /*#__PURE__*/ _interop_require_default(require("../resolvers/collections/findByID"));
|
|
35
|
-
const _findVersionByID = /*#__PURE__*/ _interop_require_default(require("../resolvers/collections/findVersionByID"));
|
|
36
|
-
const _findVersions = /*#__PURE__*/ _interop_require_default(require("../resolvers/collections/findVersions"));
|
|
37
|
-
const _restoreVersion = /*#__PURE__*/ _interop_require_default(require("../resolvers/collections/restoreVersion"));
|
|
38
|
-
const _update = /*#__PURE__*/ _interop_require_default(require("../resolvers/collections/update"));
|
|
39
|
-
function _interop_require_default(obj) {
|
|
40
|
-
return obj && obj.__esModule ? obj : {
|
|
41
|
-
default: obj
|
|
42
|
-
};
|
|
43
|
-
}
|
|
1
|
+
/* eslint-disable no-param-reassign */ import { GraphQLBoolean, GraphQLInt, GraphQLNonNull, GraphQLObjectType, GraphQLString } from 'graphql';
|
|
2
|
+
import { flattenTopLevelFields, formatNames, toWords } from 'payload/utilities';
|
|
3
|
+
import { fieldAffectsData } from 'payload/types';
|
|
4
|
+
import { buildVersionCollectionFields } from 'payload/versions';
|
|
5
|
+
import forgotPassword from '../resolvers/auth/forgotPassword.js';
|
|
6
|
+
import init from '../resolvers/auth/init.js';
|
|
7
|
+
import login from '../resolvers/auth/login.js';
|
|
8
|
+
import logout from '../resolvers/auth/logout.js';
|
|
9
|
+
import me from '../resolvers/auth/me.js';
|
|
10
|
+
import refresh from '../resolvers/auth/refresh.js';
|
|
11
|
+
import resetPassword from '../resolvers/auth/resetPassword.js';
|
|
12
|
+
import unlock from '../resolvers/auth/unlock.js';
|
|
13
|
+
import verifyEmail from '../resolvers/auth/verifyEmail.js';
|
|
14
|
+
import { buildMutationInputType, getCollectionIDType } from './buildMutationInputType.js';
|
|
15
|
+
import buildObjectType from './buildObjectType.js';
|
|
16
|
+
import buildPaginatedListType from './buildPaginatedListType.js';
|
|
17
|
+
import { buildPolicyType } from './buildPoliciesType.js';
|
|
18
|
+
import buildWhereInputType from './buildWhereInputType.js';
|
|
19
|
+
import formatName from '../utilities/formatName.js';
|
|
20
|
+
import createResolver from '../resolvers/collections/create.js';
|
|
21
|
+
import getDeleteResolver from '../resolvers/collections/delete.js';
|
|
22
|
+
import { docAccessResolver } from '../resolvers/collections/docAccess.js';
|
|
23
|
+
import findResolver from '../resolvers/collections/find.js';
|
|
24
|
+
import findByIDResolver from '../resolvers/collections/findByID.js';
|
|
25
|
+
import findVersionByIDResolver from '../resolvers/collections/findVersionByID.js';
|
|
26
|
+
import findVersionsResolver from '../resolvers/collections/findVersions.js';
|
|
27
|
+
import restoreVersionResolver from '../resolvers/collections/restoreVersion.js';
|
|
28
|
+
import updateResolver from '../resolvers/collections/update.js';
|
|
44
29
|
function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
45
30
|
Object.keys(graphqlResult.collections).forEach((slug)=>{
|
|
46
31
|
const collection = graphqlResult.collections[slug];
|
|
@@ -48,14 +33,14 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
48
33
|
if (!graphQL) return;
|
|
49
34
|
let singularName;
|
|
50
35
|
let pluralName;
|
|
51
|
-
const fromSlug =
|
|
36
|
+
const fromSlug = formatNames(collection.config.slug);
|
|
52
37
|
if (graphQL.singularName) {
|
|
53
|
-
singularName =
|
|
38
|
+
singularName = toWords(graphQL.singularName, true);
|
|
54
39
|
} else {
|
|
55
40
|
singularName = fromSlug.singular;
|
|
56
41
|
}
|
|
57
42
|
if (graphQL.pluralName) {
|
|
58
|
-
pluralName =
|
|
43
|
+
pluralName = toWords(graphQL.pluralName, true);
|
|
59
44
|
} else {
|
|
60
45
|
pluralName = fromSlug.plural;
|
|
61
46
|
}
|
|
@@ -67,8 +52,8 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
67
52
|
pluralName = `all${singularName}`;
|
|
68
53
|
}
|
|
69
54
|
collection.graphQL = {};
|
|
70
|
-
const hasIDField =
|
|
71
|
-
const idType =
|
|
55
|
+
const hasIDField = flattenTopLevelFields(fields).findIndex((field)=>fieldAffectsData(field) && field.name === 'id') > -1;
|
|
56
|
+
const idType = getCollectionIDType(config.db.defaultIDType, collectionConfig);
|
|
72
57
|
const baseFields = {};
|
|
73
58
|
const whereInputFields = [
|
|
74
59
|
...fields
|
|
@@ -83,7 +68,7 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
83
68
|
});
|
|
84
69
|
}
|
|
85
70
|
const forceNullableObjectType = Boolean(versions?.drafts);
|
|
86
|
-
collection.graphQL.type = (
|
|
71
|
+
collection.graphQL.type = buildObjectType({
|
|
87
72
|
name: singularName,
|
|
88
73
|
baseFields,
|
|
89
74
|
fields,
|
|
@@ -92,8 +77,8 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
92
77
|
graphqlResult,
|
|
93
78
|
config
|
|
94
79
|
});
|
|
95
|
-
collection.graphQL.paginatedType = (
|
|
96
|
-
collection.graphQL.whereInputType = (
|
|
80
|
+
collection.graphQL.paginatedType = buildPaginatedListType(pluralName, collection.graphQL.type);
|
|
81
|
+
collection.graphQL.whereInputType = buildWhereInputType({
|
|
97
82
|
name: singularName,
|
|
98
83
|
fields: whereInputFields,
|
|
99
84
|
parentName: singularName
|
|
@@ -106,7 +91,7 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
106
91
|
type: 'text'
|
|
107
92
|
});
|
|
108
93
|
}
|
|
109
|
-
const createMutationInputType =
|
|
94
|
+
const createMutationInputType = buildMutationInputType({
|
|
110
95
|
name: singularName,
|
|
111
96
|
fields,
|
|
112
97
|
parentName: singularName,
|
|
@@ -114,26 +99,26 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
114
99
|
config
|
|
115
100
|
});
|
|
116
101
|
if (createMutationInputType) {
|
|
117
|
-
collection.graphQL.mutationInputType = new
|
|
102
|
+
collection.graphQL.mutationInputType = new GraphQLNonNull(createMutationInputType);
|
|
118
103
|
}
|
|
119
|
-
const updateMutationInputType =
|
|
104
|
+
const updateMutationInputType = buildMutationInputType({
|
|
120
105
|
name: `${singularName}Update`,
|
|
121
|
-
fields: fields.filter((field)=>!(
|
|
106
|
+
fields: fields.filter((field)=>!(fieldAffectsData(field) && field.name === 'id')),
|
|
122
107
|
parentName: `${singularName}Update`,
|
|
123
108
|
forceNullable: true,
|
|
124
109
|
graphqlResult,
|
|
125
110
|
config
|
|
126
111
|
});
|
|
127
112
|
if (updateMutationInputType) {
|
|
128
|
-
collection.graphQL.updateMutationInputType = new
|
|
113
|
+
collection.graphQL.updateMutationInputType = new GraphQLNonNull(updateMutationInputType);
|
|
129
114
|
}
|
|
130
115
|
graphqlResult.Query.fields[singularName] = {
|
|
131
116
|
args: {
|
|
132
117
|
id: {
|
|
133
|
-
type: new
|
|
118
|
+
type: new GraphQLNonNull(idType)
|
|
134
119
|
},
|
|
135
120
|
draft: {
|
|
136
|
-
type:
|
|
121
|
+
type: GraphQLBoolean
|
|
137
122
|
},
|
|
138
123
|
...config.localization ? {
|
|
139
124
|
fallbackLocale: {
|
|
@@ -144,13 +129,13 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
144
129
|
}
|
|
145
130
|
} : {}
|
|
146
131
|
},
|
|
147
|
-
resolve: (
|
|
132
|
+
resolve: findByIDResolver(collection),
|
|
148
133
|
type: collection.graphQL.type
|
|
149
134
|
};
|
|
150
135
|
graphqlResult.Query.fields[pluralName] = {
|
|
151
136
|
args: {
|
|
152
137
|
draft: {
|
|
153
|
-
type:
|
|
138
|
+
type: GraphQLBoolean
|
|
154
139
|
},
|
|
155
140
|
where: {
|
|
156
141
|
type: collection.graphQL.whereInputType
|
|
@@ -164,26 +149,26 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
164
149
|
}
|
|
165
150
|
} : {},
|
|
166
151
|
limit: {
|
|
167
|
-
type:
|
|
152
|
+
type: GraphQLInt
|
|
168
153
|
},
|
|
169
154
|
page: {
|
|
170
|
-
type:
|
|
155
|
+
type: GraphQLInt
|
|
171
156
|
},
|
|
172
157
|
sort: {
|
|
173
|
-
type:
|
|
158
|
+
type: GraphQLString
|
|
174
159
|
}
|
|
175
160
|
},
|
|
176
|
-
resolve: (
|
|
177
|
-
type: (
|
|
161
|
+
resolve: findResolver(collection),
|
|
162
|
+
type: buildPaginatedListType(pluralName, collection.graphQL.type)
|
|
178
163
|
};
|
|
179
164
|
graphqlResult.Query.fields[`docAccess${singularName}`] = {
|
|
180
165
|
args: {
|
|
181
166
|
id: {
|
|
182
|
-
type: new
|
|
167
|
+
type: new GraphQLNonNull(idType)
|
|
183
168
|
}
|
|
184
169
|
},
|
|
185
|
-
resolve:
|
|
186
|
-
type:
|
|
170
|
+
resolve: docAccessResolver(collection),
|
|
171
|
+
type: buildPolicyType({
|
|
187
172
|
entity: collectionConfig,
|
|
188
173
|
scope: 'docAccess',
|
|
189
174
|
type: 'collection',
|
|
@@ -198,7 +183,7 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
198
183
|
}
|
|
199
184
|
} : {},
|
|
200
185
|
draft: {
|
|
201
|
-
type:
|
|
186
|
+
type: GraphQLBoolean
|
|
202
187
|
},
|
|
203
188
|
...config.localization ? {
|
|
204
189
|
locale: {
|
|
@@ -206,16 +191,16 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
206
191
|
}
|
|
207
192
|
} : {}
|
|
208
193
|
},
|
|
209
|
-
resolve: (
|
|
194
|
+
resolve: createResolver(collection),
|
|
210
195
|
type: collection.graphQL.type
|
|
211
196
|
};
|
|
212
197
|
graphqlResult.Mutation.fields[`update${singularName}`] = {
|
|
213
198
|
args: {
|
|
214
199
|
id: {
|
|
215
|
-
type: new
|
|
200
|
+
type: new GraphQLNonNull(idType)
|
|
216
201
|
},
|
|
217
202
|
autosave: {
|
|
218
|
-
type:
|
|
203
|
+
type: GraphQLBoolean
|
|
219
204
|
},
|
|
220
205
|
...updateMutationInputType ? {
|
|
221
206
|
data: {
|
|
@@ -223,7 +208,7 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
223
208
|
}
|
|
224
209
|
} : {},
|
|
225
210
|
draft: {
|
|
226
|
-
type:
|
|
211
|
+
type: GraphQLBoolean
|
|
227
212
|
},
|
|
228
213
|
...config.localization ? {
|
|
229
214
|
locale: {
|
|
@@ -231,22 +216,22 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
231
216
|
}
|
|
232
217
|
} : {}
|
|
233
218
|
},
|
|
234
|
-
resolve: (
|
|
219
|
+
resolve: updateResolver(collection),
|
|
235
220
|
type: collection.graphQL.type
|
|
236
221
|
};
|
|
237
222
|
graphqlResult.Mutation.fields[`delete${singularName}`] = {
|
|
238
223
|
args: {
|
|
239
224
|
id: {
|
|
240
|
-
type: new
|
|
225
|
+
type: new GraphQLNonNull(idType)
|
|
241
226
|
}
|
|
242
227
|
},
|
|
243
|
-
resolve: (
|
|
228
|
+
resolve: getDeleteResolver(collection),
|
|
244
229
|
type: collection.graphQL.type
|
|
245
230
|
};
|
|
246
231
|
if (collectionConfig.versions) {
|
|
247
|
-
const versionIDType = config.db.defaultIDType === 'text' ?
|
|
232
|
+
const versionIDType = config.db.defaultIDType === 'text' ? GraphQLString : GraphQLInt;
|
|
248
233
|
const versionCollectionFields = [
|
|
249
|
-
...
|
|
234
|
+
...buildVersionCollectionFields(collectionConfig),
|
|
250
235
|
{
|
|
251
236
|
name: 'id',
|
|
252
237
|
type: config.db.defaultIDType
|
|
@@ -262,7 +247,7 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
262
247
|
type: 'date'
|
|
263
248
|
}
|
|
264
249
|
];
|
|
265
|
-
collection.graphQL.versionType = (
|
|
250
|
+
collection.graphQL.versionType = buildObjectType({
|
|
266
251
|
name: `${singularName}Version`,
|
|
267
252
|
fields: versionCollectionFields,
|
|
268
253
|
forceNullable: forceNullableObjectType,
|
|
@@ -270,7 +255,7 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
270
255
|
graphqlResult,
|
|
271
256
|
config
|
|
272
257
|
});
|
|
273
|
-
graphqlResult.Query.fields[`version${(
|
|
258
|
+
graphqlResult.Query.fields[`version${formatName(singularName)}`] = {
|
|
274
259
|
args: {
|
|
275
260
|
id: {
|
|
276
261
|
type: versionIDType
|
|
@@ -284,13 +269,13 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
284
269
|
}
|
|
285
270
|
} : {}
|
|
286
271
|
},
|
|
287
|
-
resolve: (
|
|
272
|
+
resolve: findVersionByIDResolver(collection),
|
|
288
273
|
type: collection.graphQL.versionType
|
|
289
274
|
};
|
|
290
275
|
graphqlResult.Query.fields[`versions${pluralName}`] = {
|
|
291
276
|
args: {
|
|
292
277
|
where: {
|
|
293
|
-
type: (
|
|
278
|
+
type: buildWhereInputType({
|
|
294
279
|
name: `versions${singularName}`,
|
|
295
280
|
fields: versionCollectionFields,
|
|
296
281
|
parentName: `versions${singularName}`
|
|
@@ -305,25 +290,25 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
305
290
|
}
|
|
306
291
|
} : {},
|
|
307
292
|
limit: {
|
|
308
|
-
type:
|
|
293
|
+
type: GraphQLInt
|
|
309
294
|
},
|
|
310
295
|
page: {
|
|
311
|
-
type:
|
|
296
|
+
type: GraphQLInt
|
|
312
297
|
},
|
|
313
298
|
sort: {
|
|
314
|
-
type:
|
|
299
|
+
type: GraphQLString
|
|
315
300
|
}
|
|
316
301
|
},
|
|
317
|
-
resolve: (
|
|
318
|
-
type: (
|
|
302
|
+
resolve: findVersionsResolver(collection),
|
|
303
|
+
type: buildPaginatedListType(`versions${formatName(pluralName)}`, collection.graphQL.versionType)
|
|
319
304
|
};
|
|
320
|
-
graphqlResult.Mutation.fields[`restoreVersion${(
|
|
305
|
+
graphqlResult.Mutation.fields[`restoreVersion${formatName(singularName)}`] = {
|
|
321
306
|
args: {
|
|
322
307
|
id: {
|
|
323
308
|
type: versionIDType
|
|
324
309
|
}
|
|
325
310
|
},
|
|
326
|
-
resolve: (
|
|
311
|
+
resolve: restoreVersionResolver(collection),
|
|
327
312
|
type: collection.graphQL.type
|
|
328
313
|
};
|
|
329
314
|
}
|
|
@@ -335,10 +320,10 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
335
320
|
type: 'email'
|
|
336
321
|
}
|
|
337
322
|
];
|
|
338
|
-
collection.graphQL.JWT = (
|
|
339
|
-
name: (
|
|
323
|
+
collection.graphQL.JWT = buildObjectType({
|
|
324
|
+
name: formatName(`${slug}JWT`),
|
|
340
325
|
fields: [
|
|
341
|
-
...collectionConfig.fields.filter((field)=>
|
|
326
|
+
...collectionConfig.fields.filter((field)=>fieldAffectsData(field) && field.saveToJWT),
|
|
342
327
|
...authFields,
|
|
343
328
|
{
|
|
344
329
|
name: 'collection',
|
|
@@ -346,23 +331,23 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
346
331
|
type: 'text'
|
|
347
332
|
}
|
|
348
333
|
],
|
|
349
|
-
parentName: (
|
|
334
|
+
parentName: formatName(`${slug}JWT`),
|
|
350
335
|
graphqlResult,
|
|
351
336
|
config
|
|
352
337
|
});
|
|
353
338
|
graphqlResult.Query.fields[`me${singularName}`] = {
|
|
354
|
-
resolve: (
|
|
355
|
-
type: new
|
|
356
|
-
name: (
|
|
339
|
+
resolve: me(collection),
|
|
340
|
+
type: new GraphQLObjectType({
|
|
341
|
+
name: formatName(`${slug}Me`),
|
|
357
342
|
fields: {
|
|
358
343
|
collection: {
|
|
359
|
-
type:
|
|
344
|
+
type: GraphQLString
|
|
360
345
|
},
|
|
361
346
|
exp: {
|
|
362
|
-
type:
|
|
347
|
+
type: GraphQLInt
|
|
363
348
|
},
|
|
364
349
|
token: {
|
|
365
|
-
type:
|
|
350
|
+
type: GraphQLString
|
|
366
351
|
},
|
|
367
352
|
user: {
|
|
368
353
|
type: collection.graphQL.type
|
|
@@ -371,24 +356,24 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
371
356
|
})
|
|
372
357
|
};
|
|
373
358
|
graphqlResult.Query.fields[`initialized${singularName}`] = {
|
|
374
|
-
resolve: (
|
|
375
|
-
type:
|
|
359
|
+
resolve: init(collection.config.slug),
|
|
360
|
+
type: GraphQLBoolean
|
|
376
361
|
};
|
|
377
362
|
graphqlResult.Mutation.fields[`refreshToken${singularName}`] = {
|
|
378
363
|
args: {
|
|
379
364
|
token: {
|
|
380
|
-
type:
|
|
365
|
+
type: GraphQLString
|
|
381
366
|
}
|
|
382
367
|
},
|
|
383
|
-
resolve: (
|
|
384
|
-
type: new
|
|
385
|
-
name: (
|
|
368
|
+
resolve: refresh(collection),
|
|
369
|
+
type: new GraphQLObjectType({
|
|
370
|
+
name: formatName(`${slug}Refreshed${singularName}`),
|
|
386
371
|
fields: {
|
|
387
372
|
exp: {
|
|
388
|
-
type:
|
|
373
|
+
type: GraphQLInt
|
|
389
374
|
},
|
|
390
375
|
refreshedToken: {
|
|
391
|
-
type:
|
|
376
|
+
type: GraphQLString
|
|
392
377
|
},
|
|
393
378
|
user: {
|
|
394
379
|
type: collection.graphQL.JWT
|
|
@@ -397,39 +382,39 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
397
382
|
})
|
|
398
383
|
};
|
|
399
384
|
graphqlResult.Mutation.fields[`logout${singularName}`] = {
|
|
400
|
-
resolve: (
|
|
401
|
-
type:
|
|
385
|
+
resolve: logout(collection),
|
|
386
|
+
type: GraphQLString
|
|
402
387
|
};
|
|
403
388
|
if (!collectionConfig.auth.disableLocalStrategy) {
|
|
404
389
|
if (collectionConfig.auth.maxLoginAttempts > 0) {
|
|
405
390
|
graphqlResult.Mutation.fields[`unlock${singularName}`] = {
|
|
406
391
|
args: {
|
|
407
392
|
email: {
|
|
408
|
-
type: new
|
|
393
|
+
type: new GraphQLNonNull(GraphQLString)
|
|
409
394
|
}
|
|
410
395
|
},
|
|
411
|
-
resolve: (
|
|
412
|
-
type: new
|
|
396
|
+
resolve: unlock(collection),
|
|
397
|
+
type: new GraphQLNonNull(GraphQLBoolean)
|
|
413
398
|
};
|
|
414
399
|
}
|
|
415
400
|
graphqlResult.Mutation.fields[`login${singularName}`] = {
|
|
416
401
|
args: {
|
|
417
402
|
email: {
|
|
418
|
-
type:
|
|
403
|
+
type: GraphQLString
|
|
419
404
|
},
|
|
420
405
|
password: {
|
|
421
|
-
type:
|
|
406
|
+
type: GraphQLString
|
|
422
407
|
}
|
|
423
408
|
},
|
|
424
|
-
resolve: (
|
|
425
|
-
type: new
|
|
426
|
-
name: (
|
|
409
|
+
resolve: login(collection),
|
|
410
|
+
type: new GraphQLObjectType({
|
|
411
|
+
name: formatName(`${slug}LoginResult`),
|
|
427
412
|
fields: {
|
|
428
413
|
exp: {
|
|
429
|
-
type:
|
|
414
|
+
type: GraphQLInt
|
|
430
415
|
},
|
|
431
416
|
token: {
|
|
432
|
-
type:
|
|
417
|
+
type: GraphQLString
|
|
433
418
|
},
|
|
434
419
|
user: {
|
|
435
420
|
type: collection.graphQL.type
|
|
@@ -440,33 +425,33 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
440
425
|
graphqlResult.Mutation.fields[`forgotPassword${singularName}`] = {
|
|
441
426
|
args: {
|
|
442
427
|
disableEmail: {
|
|
443
|
-
type:
|
|
428
|
+
type: GraphQLBoolean
|
|
444
429
|
},
|
|
445
430
|
email: {
|
|
446
|
-
type: new
|
|
431
|
+
type: new GraphQLNonNull(GraphQLString)
|
|
447
432
|
},
|
|
448
433
|
expiration: {
|
|
449
|
-
type:
|
|
434
|
+
type: GraphQLInt
|
|
450
435
|
}
|
|
451
436
|
},
|
|
452
|
-
resolve: (
|
|
453
|
-
type: new
|
|
437
|
+
resolve: forgotPassword(collection),
|
|
438
|
+
type: new GraphQLNonNull(GraphQLBoolean)
|
|
454
439
|
};
|
|
455
440
|
graphqlResult.Mutation.fields[`resetPassword${singularName}`] = {
|
|
456
441
|
args: {
|
|
457
442
|
password: {
|
|
458
|
-
type:
|
|
443
|
+
type: GraphQLString
|
|
459
444
|
},
|
|
460
445
|
token: {
|
|
461
|
-
type:
|
|
446
|
+
type: GraphQLString
|
|
462
447
|
}
|
|
463
448
|
},
|
|
464
|
-
resolve: (
|
|
465
|
-
type: new
|
|
466
|
-
name: (
|
|
449
|
+
resolve: resetPassword(collection),
|
|
450
|
+
type: new GraphQLObjectType({
|
|
451
|
+
name: formatName(`${slug}ResetPassword`),
|
|
467
452
|
fields: {
|
|
468
453
|
token: {
|
|
469
|
-
type:
|
|
454
|
+
type: GraphQLString
|
|
470
455
|
},
|
|
471
456
|
user: {
|
|
472
457
|
type: collection.graphQL.type
|
|
@@ -477,16 +462,16 @@ function initCollectionsGraphQL({ config, graphqlResult }) {
|
|
|
477
462
|
graphqlResult.Mutation.fields[`verifyEmail${singularName}`] = {
|
|
478
463
|
args: {
|
|
479
464
|
token: {
|
|
480
|
-
type:
|
|
465
|
+
type: GraphQLString
|
|
481
466
|
}
|
|
482
467
|
},
|
|
483
|
-
resolve: (
|
|
484
|
-
type:
|
|
468
|
+
resolve: verifyEmail(collection),
|
|
469
|
+
type: GraphQLBoolean
|
|
485
470
|
};
|
|
486
471
|
}
|
|
487
472
|
}
|
|
488
473
|
});
|
|
489
474
|
}
|
|
490
|
-
|
|
475
|
+
export default initCollectionsGraphQL;
|
|
491
476
|
|
|
492
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvaW5pdENvbGxlY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5pbXBvcnQge1xuICBHcmFwaFFMQm9vbGVhbixcbiAgR3JhcGhRTEludCxcbiAgR3JhcGhRTE5vbk51bGwsXG4gIEdyYXBoUUxPYmplY3RUeXBlLFxuICBHcmFwaFFMU3RyaW5nLFxufSBmcm9tICdncmFwaHFsJ1xuXG5pbXBvcnQgeyBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMsIGZvcm1hdE5hbWVzLCB0b1dvcmRzIH0gZnJvbSAncGF5bG9hZC91dGlsaXRpZXMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGJ1aWxkVmVyc2lvbkNvbGxlY3Rpb25GaWVsZHMgfSBmcm9tICdwYXlsb2FkL3ZlcnNpb25zJ1xuaW1wb3J0IHR5cGUgeyBHcmFwaFFMSW5mbyB9IGZyb20gJ3BheWxvYWQvY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBGaWVsZCwgQ29sbGVjdGlvbiwgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZywgU2FuaXRpemVkQ29uZmlnIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHR5cGUgeyBPYmplY3RUeXBlQ29uZmlnIH0gZnJvbSAnLi9idWlsZE9iamVjdFR5cGUnXG5pbXBvcnQgZm9yZ290UGFzc3dvcmQgZnJvbSAnLi4vcmVzb2x2ZXJzL2F1dGgvZm9yZ290UGFzc3dvcmQnXG5pbXBvcnQgaW5pdCBmcm9tICcuLi9yZXNvbHZlcnMvYXV0aC9pbml0J1xuaW1wb3J0IGxvZ2luIGZyb20gJy4uL3Jlc29sdmVycy9hdXRoL2xvZ2luJ1xuaW1wb3J0IGxvZ291dCBmcm9tICcuLi9yZXNvbHZlcnMvYXV0aC9sb2dvdXQnXG5pbXBvcnQgbWUgZnJvbSAnLi4vcmVzb2x2ZXJzL2F1dGgvbWUnXG5pbXBvcnQgcmVmcmVzaCBmcm9tICcuLi9yZXNvbHZlcnMvYXV0aC9yZWZyZXNoJ1xuaW1wb3J0IHJlc2V0UGFzc3dvcmQgZnJvbSAnLi4vcmVzb2x2ZXJzL2F1dGgvcmVzZXRQYXNzd29yZCdcbmltcG9ydCB1bmxvY2sgZnJvbSAnLi4vcmVzb2x2ZXJzL2F1dGgvdW5sb2NrJ1xuaW1wb3J0IHZlcmlmeUVtYWlsIGZyb20gJy4uL3Jlc29sdmVycy9hdXRoL3ZlcmlmeUVtYWlsJ1xuaW1wb3J0IHsgYnVpbGRNdXRhdGlvbklucHV0VHlwZSwgZ2V0Q29sbGVjdGlvbklEVHlwZSB9IGZyb20gJy4vYnVpbGRNdXRhdGlvbklucHV0VHlwZSdcbmltcG9ydCBidWlsZE9iamVjdFR5cGUgZnJvbSAnLi9idWlsZE9iamVjdFR5cGUnXG5pbXBvcnQgYnVpbGRQYWdpbmF0ZWRMaXN0VHlwZSBmcm9tICcuL2J1aWxkUGFnaW5hdGVkTGlzdFR5cGUnXG5pbXBvcnQgeyBidWlsZFBvbGljeVR5cGUgfSBmcm9tICcuL2J1aWxkUG9saWNpZXNUeXBlJ1xuaW1wb3J0IGJ1aWxkV2hlcmVJbnB1dFR5cGUgZnJvbSAnLi9idWlsZFdoZXJlSW5wdXRUeXBlJ1xuaW1wb3J0IGZvcm1hdE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2Zvcm1hdE5hbWUnXG5pbXBvcnQgY3JlYXRlUmVzb2x2ZXIgZnJvbSAnLi4vcmVzb2x2ZXJzL2NvbGxlY3Rpb25zL2NyZWF0ZSdcbmltcG9ydCBnZXREZWxldGVSZXNvbHZlciBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvZGVsZXRlJ1xuaW1wb3J0IHsgZG9jQWNjZXNzUmVzb2x2ZXIgfSBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvZG9jQWNjZXNzJ1xuaW1wb3J0IGZpbmRSZXNvbHZlciBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvZmluZCdcbmltcG9ydCBmaW5kQnlJRFJlc29sdmVyIGZyb20gJy4uL3Jlc29sdmVycy9jb2xsZWN0aW9ucy9maW5kQnlJRCdcbmltcG9ydCBmaW5kVmVyc2lvbkJ5SURSZXNvbHZlciBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvZmluZFZlcnNpb25CeUlEJ1xuaW1wb3J0IGZpbmRWZXJzaW9uc1Jlc29sdmVyIGZyb20gJy4uL3Jlc29sdmVycy9jb2xsZWN0aW9ucy9maW5kVmVyc2lvbnMnXG5pbXBvcnQgcmVzdG9yZVZlcnNpb25SZXNvbHZlciBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvcmVzdG9yZVZlcnNpb24nXG5pbXBvcnQgdXBkYXRlUmVzb2x2ZXIgZnJvbSAnLi4vcmVzb2x2ZXJzL2NvbGxlY3Rpb25zL3VwZGF0ZSdcblxudHlwZSBJbml0Q29sbGVjdGlvbnNHcmFwaFFMQXJncyA9IHtcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWdcbiAgZ3JhcGhxbFJlc3VsdDogR3JhcGhRTEluZm9cbn1cbmZ1bmN0aW9uIGluaXRDb2xsZWN0aW9uc0dyYXBoUUwoeyBjb25maWcsIGdyYXBocWxSZXN1bHQgfTogSW5pdENvbGxlY3Rpb25zR3JhcGhRTEFyZ3MpOiB2b2lkIHtcbiAgT2JqZWN0LmtleXMoZ3JhcGhxbFJlc3VsdC5jb2xsZWN0aW9ucykuZm9yRWFjaCgoc2x1ZykgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb24gPSBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW3NsdWddXG4gICAgY29uc3Qge1xuICAgICAgY29uZmlnOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgY29uZmlnOiB7IGZpZWxkcywgZ3JhcGhRTCA9IHt9IGFzIFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ2dyYXBoUUwnXSwgdmVyc2lvbnMgfSxcbiAgICB9ID0gY29sbGVjdGlvblxuXG4gICAgaWYgKCFncmFwaFFMKSByZXR1cm5cblxuICAgIGxldCBzaW5ndWxhck5hbWVcbiAgICBsZXQgcGx1cmFsTmFtZVxuICAgIGNvbnN0IGZyb21TbHVnID0gZm9ybWF0TmFtZXMoY29sbGVjdGlvbi5jb25maWcuc2x1ZylcbiAgICBpZiAoZ3JhcGhRTC5zaW5ndWxhck5hbWUpIHtcbiAgICAgIHNpbmd1bGFyTmFtZSA9IHRvV29yZHMoZ3JhcGhRTC5zaW5ndWxhck5hbWUsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNpbmd1bGFyTmFtZSA9IGZyb21TbHVnLnNpbmd1bGFyXG4gICAgfVxuICAgIGlmIChncmFwaFFMLnBsdXJhbE5hbWUpIHtcbiAgICAgIHBsdXJhbE5hbWUgPSB0b1dvcmRzKGdyYXBoUUwucGx1cmFsTmFtZSwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcGx1cmFsTmFtZSA9IGZyb21TbHVnLnBsdXJhbFxuICAgIH1cblxuICAgIC8vIEZvciBjb2xsZWN0aW9ucyBuYW1lZCAnTWVkaWEnIG9yIHNpbWlsYXIsXG4gICAgLy8gdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBzaW5ndWxhciBuYW1lXG4gICAgLy8gd2lsbCBlcXVhbCB0aGUgcGx1cmFsIG5hbWUuIEFwcGVuZCBgYWxsYCB0byB0aGUgYmVnaW5uaW5nXG4gICAgLy8gb2YgcG90ZW50aWFsIGNvbmZsaWN0c1xuICAgIGlmIChzaW5ndWxhck5hbWUgPT09IHBsdXJhbE5hbWUpIHtcbiAgICAgIHBsdXJhbE5hbWUgPSBgYWxsJHtzaW5ndWxhck5hbWV9YFxuICAgIH1cblxuICAgIGNvbGxlY3Rpb24uZ3JhcGhRTCA9IHt9IGFzIENvbGxlY3Rpb25bJ2dyYXBoUUwnXVxuXG4gICAgY29uc3QgaGFzSURGaWVsZCA9XG4gICAgICBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGRzKS5maW5kSW5kZXgoXG4gICAgICAgIChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJyxcbiAgICAgICkgPiAtMVxuXG4gICAgY29uc3QgaWRUeXBlID0gZ2V0Q29sbGVjdGlvbklEVHlwZShjb25maWcuZGIuZGVmYXVsdElEVHlwZSwgY29sbGVjdGlvbkNvbmZpZylcblxuICAgIGNvbnN0IGJhc2VGaWVsZHM6IE9iamVjdFR5cGVDb25maWcgPSB7fVxuXG4gICAgY29uc3Qgd2hlcmVJbnB1dEZpZWxkcyA9IFsuLi5maWVsZHNdXG5cbiAgICBpZiAoIWhhc0lERmllbGQpIHtcbiAgICAgIGJhc2VGaWVsZHMuaWQgPSB7IHR5cGU6IGlkVHlwZSB9XG4gICAgICB3aGVyZUlucHV0RmllbGRzLnB1c2goe1xuICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICB0eXBlOiBjb25maWcuZGIuZGVmYXVsdElEVHlwZSBhcyAndGV4dCcsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGZvcmNlTnVsbGFibGVPYmplY3RUeXBlID0gQm9vbGVhbih2ZXJzaW9ucz8uZHJhZnRzKVxuXG4gICAgY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgbmFtZTogc2luZ3VsYXJOYW1lLFxuICAgICAgYmFzZUZpZWxkcyxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGZvcmNlTnVsbGFibGU6IGZvcmNlTnVsbGFibGVPYmplY3RUeXBlLFxuICAgICAgcGFyZW50TmFtZTogc2luZ3VsYXJOYW1lLFxuICAgICAgZ3JhcGhxbFJlc3VsdCxcbiAgICAgIGNvbmZpZyxcbiAgICB9KVxuXG4gICAgY29sbGVjdGlvbi5ncmFwaFFMLnBhZ2luYXRlZFR5cGUgPSBidWlsZFBhZ2luYXRlZExpc3RUeXBlKHBsdXJhbE5hbWUsIGNvbGxlY3Rpb24uZ3JhcGhRTC50eXBlKVxuXG4gICAgY29sbGVjdGlvbi5ncmFwaFFMLndoZXJlSW5wdXRUeXBlID0gYnVpbGRXaGVyZUlucHV0VHlwZSh7XG4gICAgICBuYW1lOiBzaW5ndWxhck5hbWUsXG4gICAgICBmaWVsZHM6IHdoZXJlSW5wdXRGaWVsZHMsXG4gICAgICBwYXJlbnROYW1lOiBzaW5ndWxhck5hbWUsXG4gICAgfSlcblxuICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnLmF1dGggJiYgIWNvbGxlY3Rpb25Db25maWcuYXV0aC5kaXNhYmxlTG9jYWxTdHJhdGVneSkge1xuICAgICAgZmllbGRzLnB1c2goe1xuICAgICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgICBsYWJlbDogJ1Bhc3N3b3JkJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlTXV0YXRpb25JbnB1dFR5cGUgPSBidWlsZE11dGF0aW9uSW5wdXRUeXBlKHtcbiAgICAgIG5hbWU6IHNpbmd1bGFyTmFtZSxcbiAgICAgIGZpZWxkcyxcbiAgICAgIHBhcmVudE5hbWU6IHNpbmd1bGFyTmFtZSxcbiAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICBjb25maWcsXG4gICAgfSlcbiAgICBpZiAoY3JlYXRlTXV0YXRpb25JbnB1dFR5cGUpIHtcbiAgICAgIGNvbGxlY3Rpb24uZ3JhcGhRTC5tdXRhdGlvbklucHV0VHlwZSA9IG5ldyBHcmFwaFFMTm9uTnVsbChjcmVhdGVNdXRhdGlvbklucHV0VHlwZSlcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVNdXRhdGlvbklucHV0VHlwZSA9IGJ1aWxkTXV0YXRpb25JbnB1dFR5cGUoe1xuICAgICAgbmFtZTogYCR7c2luZ3VsYXJOYW1lfVVwZGF0ZWAsXG4gICAgICBmaWVsZHM6IGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiAhKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpKSxcbiAgICAgIHBhcmVudE5hbWU6IGAke3Npbmd1bGFyTmFtZX1VcGRhdGVgLFxuICAgICAgZm9yY2VOdWxsYWJsZTogdHJ1ZSxcbiAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICBjb25maWcsXG4gICAgfSlcbiAgICBpZiAodXBkYXRlTXV0YXRpb25JbnB1dFR5cGUpIHtcbiAgICAgIGNvbGxlY3Rpb24uZ3JhcGhRTC51cGRhdGVNdXRhdGlvbklucHV0VHlwZSA9IG5ldyBHcmFwaFFMTm9uTnVsbCh1cGRhdGVNdXRhdGlvbklucHV0VHlwZSlcbiAgICB9XG5cbiAgICBncmFwaHFsUmVzdWx0LlF1ZXJ5LmZpZWxkc1tzaW5ndWxhck5hbWVdID0ge1xuICAgICAgYXJnczoge1xuICAgICAgICBpZDogeyB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoaWRUeXBlKSB9LFxuICAgICAgICBkcmFmdDogeyB0eXBlOiBHcmFwaFFMQm9vbGVhbiB9LFxuICAgICAgICAuLi4oY29uZmlnLmxvY2FsaXphdGlvblxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBmYWxsYmFja0xvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlIH0sXG4gICAgICAgICAgICAgIGxvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmxvY2FsZUlucHV0VHlwZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IGZpbmRCeUlEUmVzb2x2ZXIoY29sbGVjdGlvbiksXG4gICAgICB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudHlwZSxcbiAgICB9XG5cbiAgICBncmFwaHFsUmVzdWx0LlF1ZXJ5LmZpZWxkc1twbHVyYWxOYW1lXSA9IHtcbiAgICAgIGFyZ3M6IHtcbiAgICAgICAgZHJhZnQ6IHsgdHlwZTogR3JhcGhRTEJvb2xlYW4gfSxcbiAgICAgICAgd2hlcmU6IHsgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLndoZXJlSW5wdXRUeXBlIH0sXG4gICAgICAgIC4uLihjb25maWcubG9jYWxpemF0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUgfSxcbiAgICAgICAgICAgICAgbG9jYWxlOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMubG9jYWxlSW5wdXRUeXBlIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGxpbWl0OiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgICAgcGFnZTogeyB0eXBlOiBHcmFwaFFMSW50IH0sXG4gICAgICAgIHNvcnQ6IHsgdHlwZTogR3JhcGhRTFN0cmluZyB9LFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IGZpbmRSZXNvbHZlcihjb2xsZWN0aW9uKSxcbiAgICAgIHR5cGU6IGJ1aWxkUGFnaW5hdGVkTGlzdFR5cGUocGx1cmFsTmFtZSwgY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUpLFxuICAgIH1cblxuICAgIGdyYXBocWxSZXN1bHQuUXVlcnkuZmllbGRzW2Bkb2NBY2Nlc3Mke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgIGFyZ3M6IHtcbiAgICAgICAgaWQ6IHsgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKGlkVHlwZSkgfSxcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiBkb2NBY2Nlc3NSZXNvbHZlcihjb2xsZWN0aW9uKSxcbiAgICAgIHR5cGU6IGJ1aWxkUG9saWN5VHlwZSh7XG4gICAgICAgIGVudGl0eTogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgc2NvcGU6ICdkb2NBY2Nlc3MnLFxuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHR5cGVTdWZmaXg6ICdEb2NBY2Nlc3MnLFxuICAgICAgfSksXG4gICAgfVxuXG4gICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYGNyZWF0ZSR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgYXJnczoge1xuICAgICAgICAuLi4oY3JlYXRlTXV0YXRpb25JbnB1dFR5cGVcbiAgICAgICAgICA/IHsgZGF0YTogeyB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwubXV0YXRpb25JbnB1dFR5cGUgfSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGRyYWZ0OiB7IHR5cGU6IEdyYXBoUUxCb29sZWFuIH0sXG4gICAgICAgIC4uLihjb25maWcubG9jYWxpemF0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGxvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmxvY2FsZUlucHV0VHlwZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IGNyZWF0ZVJlc29sdmVyKGNvbGxlY3Rpb24pLFxuICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUsXG4gICAgfVxuXG4gICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYHVwZGF0ZSR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgYXJnczoge1xuICAgICAgICBpZDogeyB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoaWRUeXBlKSB9LFxuICAgICAgICBhdXRvc2F2ZTogeyB0eXBlOiBHcmFwaFFMQm9vbGVhbiB9LFxuICAgICAgICAuLi4odXBkYXRlTXV0YXRpb25JbnB1dFR5cGVcbiAgICAgICAgICA/IHsgZGF0YTogeyB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudXBkYXRlTXV0YXRpb25JbnB1dFR5cGUgfSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGRyYWZ0OiB7IHR5cGU6IEdyYXBoUUxCb29sZWFuIH0sXG4gICAgICAgIC4uLihjb25maWcubG9jYWxpemF0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGxvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmxvY2FsZUlucHV0VHlwZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IHVwZGF0ZVJlc29sdmVyKGNvbGxlY3Rpb24pLFxuICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUsXG4gICAgfVxuXG4gICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYGRlbGV0ZSR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgYXJnczoge1xuICAgICAgICBpZDogeyB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoaWRUeXBlKSB9LFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IGdldERlbGV0ZVJlc29sdmVyKGNvbGxlY3Rpb24pLFxuICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUsXG4gICAgfVxuXG4gICAgaWYgKGNvbGxlY3Rpb25Db25maWcudmVyc2lvbnMpIHtcbiAgICAgIGNvbnN0IHZlcnNpb25JRFR5cGUgPSBjb25maWcuZGIuZGVmYXVsdElEVHlwZSA9PT0gJ3RleHQnID8gR3JhcGhRTFN0cmluZyA6IEdyYXBoUUxJbnRcbiAgICAgIGNvbnN0IHZlcnNpb25Db2xsZWN0aW9uRmllbGRzOiBGaWVsZFtdID0gW1xuICAgICAgICAuLi5idWlsZFZlcnNpb25Db2xsZWN0aW9uRmllbGRzKGNvbGxlY3Rpb25Db25maWcpLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICB0eXBlOiBjb25maWcuZGIuZGVmYXVsdElEVHlwZSBhcyAndGV4dCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3JlYXRlZEF0JyxcbiAgICAgICAgICBsYWJlbDogJ0NyZWF0ZWQgQXQnLFxuICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd1cGRhdGVkQXQnLFxuICAgICAgICAgIGxhYmVsOiAnVXBkYXRlZCBBdCcsXG4gICAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgICB9LFxuICAgICAgXVxuXG4gICAgICBjb2xsZWN0aW9uLmdyYXBoUUwudmVyc2lvblR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICBuYW1lOiBgJHtzaW5ndWxhck5hbWV9VmVyc2lvbmAsXG4gICAgICAgIGZpZWxkczogdmVyc2lvbkNvbGxlY3Rpb25GaWVsZHMsXG4gICAgICAgIGZvcmNlTnVsbGFibGU6IGZvcmNlTnVsbGFibGVPYmplY3RUeXBlLFxuICAgICAgICBwYXJlbnROYW1lOiBgJHtzaW5ndWxhck5hbWV9VmVyc2lvbmAsXG4gICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgIH0pXG5cbiAgICAgIGdyYXBocWxSZXN1bHQuUXVlcnkuZmllbGRzW2B2ZXJzaW9uJHtmb3JtYXROYW1lKHNpbmd1bGFyTmFtZSl9YF0gPSB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBpZDogeyB0eXBlOiB2ZXJzaW9uSURUeXBlIH0sXG4gICAgICAgICAgLi4uKGNvbmZpZy5sb2NhbGl6YXRpb25cbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUgfSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHsgdHlwZTogZ3JhcGhxbFJlc3VsdC50eXBlcy5sb2NhbGVJbnB1dFR5cGUgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmU6IGZpbmRWZXJzaW9uQnlJRFJlc29sdmVyKGNvbGxlY3Rpb24pLFxuICAgICAgICB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudmVyc2lvblR5cGUsXG4gICAgICB9XG4gICAgICBncmFwaHFsUmVzdWx0LlF1ZXJ5LmZpZWxkc1tgdmVyc2lvbnMke3BsdXJhbE5hbWV9YF0gPSB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgdHlwZTogYnVpbGRXaGVyZUlucHV0VHlwZSh7XG4gICAgICAgICAgICAgIG5hbWU6IGB2ZXJzaW9ucyR7c2luZ3VsYXJOYW1lfWAsXG4gICAgICAgICAgICAgIGZpZWxkczogdmVyc2lvbkNvbGxlY3Rpb25GaWVsZHMsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWU6IGB2ZXJzaW9ucyR7c2luZ3VsYXJOYW1lfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLihjb25maWcubG9jYWxpemF0aW9uXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBmYWxsYmFja0xvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlIH0sXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMubG9jYWxlSW5wdXRUeXBlIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIGxpbWl0OiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgICAgICBwYWdlOiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgICAgICBzb3J0OiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZTogZmluZFZlcnNpb25zUmVzb2x2ZXIoY29sbGVjdGlvbiksXG4gICAgICAgIHR5cGU6IGJ1aWxkUGFnaW5hdGVkTGlzdFR5cGUoXG4gICAgICAgICAgYHZlcnNpb25zJHtmb3JtYXROYW1lKHBsdXJhbE5hbWUpfWAsXG4gICAgICAgICAgY29sbGVjdGlvbi5ncmFwaFFMLnZlcnNpb25UeXBlLFxuICAgICAgICApLFxuICAgICAgfVxuICAgICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYHJlc3RvcmVWZXJzaW9uJHtmb3JtYXROYW1lKHNpbmd1bGFyTmFtZSl9YF0gPSB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBpZDogeyB0eXBlOiB2ZXJzaW9uSURUeXBlIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmU6IHJlc3RvcmVWZXJzaW9uUmVzb2x2ZXIoY29sbGVjdGlvbiksXG4gICAgICAgIHR5cGU6IGNvbGxlY3Rpb24uZ3JhcGhRTC50eXBlLFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IGF1dGhGaWVsZHM6IEZpZWxkW10gPSBjb2xsZWN0aW9uQ29uZmlnLmF1dGguZGlzYWJsZUxvY2FsU3RyYXRlZ3lcbiAgICAgICAgPyBbXVxuICAgICAgICA6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgIGNvbGxlY3Rpb24uZ3JhcGhRTC5KV1QgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9SldUYCksXG4gICAgICAgIGZpZWxkczogW1xuICAgICAgICAgIC4uLmNvbGxlY3Rpb25Db25maWcuZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLnNhdmVUb0pXVCksXG4gICAgICAgICAgLi4uYXV0aEZpZWxkcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY29sbGVjdGlvbicsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwYXJlbnROYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9SldUYCksXG4gICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgIH0pXG5cbiAgICAgIGdyYXBocWxSZXN1bHQuUXVlcnkuZmllbGRzW2BtZSR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgICByZXNvbHZlOiBtZShjb2xsZWN0aW9uKSxcbiAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9TWVgKSxcbiAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogR3JhcGhRTFN0cmluZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHA6IHtcbiAgICAgICAgICAgICAgdHlwZTogR3JhcGhRTEludCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgICB0eXBlOiBHcmFwaFFMU3RyaW5nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfVxuXG4gICAgICBncmFwaHFsUmVzdWx0LlF1ZXJ5LmZpZWxkc1tgaW5pdGlhbGl6ZWQke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgcmVzb2x2ZTogaW5pdChjb2xsZWN0aW9uLmNvbmZpZy5zbHVnKSxcbiAgICAgICAgdHlwZTogR3JhcGhRTEJvb2xlYW4sXG4gICAgICB9XG5cbiAgICAgIGdyYXBocWxSZXN1bHQuTXV0YXRpb24uZmllbGRzW2ByZWZyZXNoVG9rZW4ke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgYXJnczoge1xuICAgICAgICAgIHRva2VuOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZTogcmVmcmVzaChjb2xsZWN0aW9uKSxcbiAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9UmVmcmVzaGVkJHtzaW5ndWxhck5hbWV9YCksXG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICBleHA6IHtcbiAgICAgICAgICAgICAgdHlwZTogR3JhcGhRTEludCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWZyZXNoZWRUb2tlbjoge1xuICAgICAgICAgICAgICB0eXBlOiBHcmFwaFFMU3RyaW5nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLkpXVCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9XG5cbiAgICAgIGdyYXBocWxSZXN1bHQuTXV0YXRpb24uZmllbGRzW2Bsb2dvdXQke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgcmVzb2x2ZTogbG9nb3V0KGNvbGxlY3Rpb24pLFxuICAgICAgICB0eXBlOiBHcmFwaFFMU3RyaW5nLFxuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbGxlY3Rpb25Db25maWcuYXV0aC5kaXNhYmxlTG9jYWxTdHJhdGVneSkge1xuICAgICAgICBpZiAoY29sbGVjdGlvbkNvbmZpZy5hdXRoLm1heExvZ2luQXR0ZW1wdHMgPiAwKSB7XG4gICAgICAgICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYHVubG9jayR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICBlbWFpbDogeyB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoR3JhcGhRTFN0cmluZykgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNvbHZlOiB1bmxvY2soY29sbGVjdGlvbiksXG4gICAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoR3JhcGhRTEJvb2xlYW4pLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdyYXBocWxSZXN1bHQuTXV0YXRpb24uZmllbGRzW2Bsb2dpbiR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIGVtYWlsOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IGxvZ2luKGNvbGxlY3Rpb24pLFxuICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9TG9naW5SZXN1bHRgKSxcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBleHA6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBHcmFwaFFMSW50LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IEdyYXBoUUxTdHJpbmcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudHlwZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cblxuICAgICAgICBncmFwaHFsUmVzdWx0Lk11dGF0aW9uLmZpZWxkc1tgZm9yZ290UGFzc3dvcmQke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBkaXNhYmxlRW1haWw6IHsgdHlwZTogR3JhcGhRTEJvb2xlYW4gfSxcbiAgICAgICAgICAgIGVtYWlsOiB7IHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChHcmFwaFFMU3RyaW5nKSB9LFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogeyB0eXBlOiBHcmFwaFFMSW50IH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiBmb3Jnb3RQYXNzd29yZChjb2xsZWN0aW9uKSxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoR3JhcGhRTEJvb2xlYW4pLFxuICAgICAgICB9XG5cbiAgICAgICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYHJlc2V0UGFzc3dvcmQke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBwYXNzd29yZDogeyB0eXBlOiBHcmFwaFFMU3RyaW5nIH0sXG4gICAgICAgICAgICB0b2tlbjogeyB0eXBlOiBHcmFwaFFMU3RyaW5nIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiByZXNldFBhc3N3b3JkKGNvbGxlY3Rpb24pLFxuICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9UmVzZXRQYXNzd29yZGApLFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIHRva2VuOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgICAgICAgdXNlcjogeyB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudHlwZSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfVxuXG4gICAgICAgIGdyYXBocWxSZXN1bHQuTXV0YXRpb24uZmllbGRzW2B2ZXJpZnlFbWFpbCR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIHRva2VuOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IHZlcmlmeUVtYWlsKGNvbGxlY3Rpb24pLFxuICAgICAgICAgIHR5cGU6IEdyYXBoUUxCb29sZWFuLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q29sbGVjdGlvbnNHcmFwaFFMXG4iXSwibmFtZXMiOlsiaW5pdENvbGxlY3Rpb25zR3JhcGhRTCIsImNvbmZpZyIsImdyYXBocWxSZXN1bHQiLCJPYmplY3QiLCJrZXlzIiwiY29sbGVjdGlvbnMiLCJmb3JFYWNoIiwic2x1ZyIsImNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uQ29uZmlnIiwiZmllbGRzIiwiZ3JhcGhRTCIsInZlcnNpb25zIiwic2luZ3VsYXJOYW1lIiwicGx1cmFsTmFtZSIsImZyb21TbHVnIiwiZm9ybWF0TmFtZXMiLCJ0b1dvcmRzIiwic2luZ3VsYXIiLCJwbHVyYWwiLCJoYXNJREZpZWxkIiwiZmxhdHRlblRvcExldmVsRmllbGRzIiwiZmluZEluZGV4IiwiZmllbGQiLCJmaWVsZEFmZmVjdHNEYXRhIiwibmFtZSIsImlkVHlwZSIsImdldENvbGxlY3Rpb25JRFR5cGUiLCJkYiIsImRlZmF1bHRJRFR5cGUiLCJiYXNlRmllbGRzIiwid2hlcmVJbnB1dEZpZWxkcyIsImlkIiwidHlwZSIsInB1c2giLCJmb3JjZU51bGxhYmxlT2JqZWN0VHlwZSIsIkJvb2xlYW4iLCJkcmFmdHMiLCJidWlsZE9iamVjdFR5cGUiLCJmb3JjZU51bGxhYmxlIiwicGFyZW50TmFtZSIsInBhZ2luYXRlZFR5cGUiLCJidWlsZFBhZ2luYXRlZExpc3RUeXBlIiwid2hlcmVJbnB1dFR5cGUiLCJidWlsZFdoZXJlSW5wdXRUeXBlIiwiYXV0aCIsImRpc2FibGVMb2NhbFN0cmF0ZWd5IiwibGFiZWwiLCJyZXF1aXJlZCIsImNyZWF0ZU11dGF0aW9uSW5wdXRUeXBlIiwiYnVpbGRNdXRhdGlvbklucHV0VHlwZSIsIm11dGF0aW9uSW5wdXRUeXBlIiwiR3JhcGhRTE5vbk51bGwiLCJ1cGRhdGVNdXRhdGlvbklucHV0VHlwZSIsImZpbHRlciIsIlF1ZXJ5IiwiYXJncyIsImRyYWZ0IiwiR3JhcGhRTEJvb2xlYW4iLCJsb2NhbGl6YXRpb24iLCJmYWxsYmFja0xvY2FsZSIsInR5cGVzIiwiZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUiLCJsb2NhbGUiLCJsb2NhbGVJbnB1dFR5cGUiLCJyZXNvbHZlIiwiZmluZEJ5SURSZXNvbHZlciIsIndoZXJlIiwibGltaXQiLCJHcmFwaFFMSW50IiwicGFnZSIsInNvcnQiLCJHcmFwaFFMU3RyaW5nIiwiZmluZFJlc29sdmVyIiwiZG9jQWNjZXNzUmVzb2x2ZXIiLCJidWlsZFBvbGljeVR5cGUiLCJlbnRpdHkiLCJzY29wZSIsInR5cGVTdWZmaXgiLCJNdXRhdGlvbiIsImRhdGEiLCJjcmVhdGVSZXNvbHZlciIsImF1dG9zYXZlIiwidXBkYXRlUmVzb2x2ZXIiLCJnZXREZWxldGVSZXNvbHZlciIsInZlcnNpb25JRFR5cGUiLCJ2ZXJzaW9uQ29sbGVjdGlvbkZpZWxkcyIsImJ1aWxkVmVyc2lvbkNvbGxlY3Rpb25GaWVsZHMiLCJ2ZXJzaW9uVHlwZSIsImZvcm1hdE5hbWUiLCJmaW5kVmVyc2lvbkJ5SURSZXNvbHZlciIsImZpbmRWZXJzaW9uc1Jlc29sdmVyIiwicmVzdG9yZVZlcnNpb25SZXNvbHZlciIsImF1dGhGaWVsZHMiLCJKV1QiLCJzYXZlVG9KV1QiLCJtZSIsIkdyYXBoUUxPYmplY3RUeXBlIiwiZXhwIiwidG9rZW4iLCJ1c2VyIiwiaW5pdCIsInJlZnJlc2giLCJyZWZyZXNoZWRUb2tlbiIsImxvZ291dCIsIm1heExvZ2luQXR0ZW1wdHMiLCJlbWFpbCIsInVubG9jayIsInBhc3N3b3JkIiwibG9naW4iLCJkaXNhYmxlRW1haWwiLCJleHBpcmF0aW9uIiwiZm9yZ290UGFzc3dvcmQiLCJyZXNldFBhc3N3b3JkIiwidmVyaWZ5RW1haWwiXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFvQzs7OzsrQkE4Y3BDOzs7ZUFBQTs7O3lCQXZjTzsyQkFFcUQ7dUJBQzNCOzBCQUNZO3VFQUtsQjs2REFDVjs4REFDQzsrREFDQzsyREFDSjtnRUFDSztzRUFDTTsrREFDUDtvRUFDSzt3Q0FDb0M7d0VBQ2hDOytFQUNPO21DQUNIOzRFQUNBO21FQUNUOytEQUNJOytEQUNHOzJCQUNJOzZEQUNUO2lFQUNJO3dFQUNPO3FFQUNIO3VFQUNFOytEQUNSOzs7Ozs7QUFNM0IsU0FBU0EsdUJBQXVCLEVBQUVDLE1BQU0sRUFBRUMsYUFBYSxFQUE4QjtJQUNuRkMsT0FBT0Ms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
|
|
477
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvaW5pdENvbGxlY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5pbXBvcnQge1xuICBHcmFwaFFMQm9vbGVhbixcbiAgR3JhcGhRTEludCxcbiAgR3JhcGhRTE5vbk51bGwsXG4gIEdyYXBoUUxPYmplY3RUeXBlLFxuICBHcmFwaFFMU3RyaW5nLFxufSBmcm9tICdncmFwaHFsJ1xuXG5pbXBvcnQgeyBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMsIGZvcm1hdE5hbWVzLCB0b1dvcmRzIH0gZnJvbSAncGF5bG9hZC91dGlsaXRpZXMnXG5pbXBvcnQgeyBmaWVsZEFmZmVjdHNEYXRhIH0gZnJvbSAncGF5bG9hZC90eXBlcydcbmltcG9ydCB7IGJ1aWxkVmVyc2lvbkNvbGxlY3Rpb25GaWVsZHMgfSBmcm9tICdwYXlsb2FkL3ZlcnNpb25zJ1xuaW1wb3J0IHR5cGUgeyBHcmFwaFFMSW5mbyB9IGZyb20gJ3BheWxvYWQvY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBGaWVsZCwgQ29sbGVjdGlvbiwgU2FuaXRpemVkQ29sbGVjdGlvbkNvbmZpZywgU2FuaXRpemVkQ29uZmlnIH0gZnJvbSAncGF5bG9hZC90eXBlcydcblxuaW1wb3J0IHR5cGUgeyBPYmplY3RUeXBlQ29uZmlnIH0gZnJvbSAnLi9idWlsZE9iamVjdFR5cGUuanMnXG5pbXBvcnQgZm9yZ290UGFzc3dvcmQgZnJvbSAnLi4vcmVzb2x2ZXJzL2F1dGgvZm9yZ290UGFzc3dvcmQuanMnXG5pbXBvcnQgaW5pdCBmcm9tICcuLi9yZXNvbHZlcnMvYXV0aC9pbml0LmpzJ1xuaW1wb3J0IGxvZ2luIGZyb20gJy4uL3Jlc29sdmVycy9hdXRoL2xvZ2luLmpzJ1xuaW1wb3J0IGxvZ291dCBmcm9tICcuLi9yZXNvbHZlcnMvYXV0aC9sb2dvdXQuanMnXG5pbXBvcnQgbWUgZnJvbSAnLi4vcmVzb2x2ZXJzL2F1dGgvbWUuanMnXG5pbXBvcnQgcmVmcmVzaCBmcm9tICcuLi9yZXNvbHZlcnMvYXV0aC9yZWZyZXNoLmpzJ1xuaW1wb3J0IHJlc2V0UGFzc3dvcmQgZnJvbSAnLi4vcmVzb2x2ZXJzL2F1dGgvcmVzZXRQYXNzd29yZC5qcydcbmltcG9ydCB1bmxvY2sgZnJvbSAnLi4vcmVzb2x2ZXJzL2F1dGgvdW5sb2NrLmpzJ1xuaW1wb3J0IHZlcmlmeUVtYWlsIGZyb20gJy4uL3Jlc29sdmVycy9hdXRoL3ZlcmlmeUVtYWlsLmpzJ1xuaW1wb3J0IHsgYnVpbGRNdXRhdGlvbklucHV0VHlwZSwgZ2V0Q29sbGVjdGlvbklEVHlwZSB9IGZyb20gJy4vYnVpbGRNdXRhdGlvbklucHV0VHlwZS5qcydcbmltcG9ydCBidWlsZE9iamVjdFR5cGUgZnJvbSAnLi9idWlsZE9iamVjdFR5cGUuanMnXG5pbXBvcnQgYnVpbGRQYWdpbmF0ZWRMaXN0VHlwZSBmcm9tICcuL2J1aWxkUGFnaW5hdGVkTGlzdFR5cGUuanMnXG5pbXBvcnQgeyBidWlsZFBvbGljeVR5cGUgfSBmcm9tICcuL2J1aWxkUG9saWNpZXNUeXBlLmpzJ1xuaW1wb3J0IGJ1aWxkV2hlcmVJbnB1dFR5cGUgZnJvbSAnLi9idWlsZFdoZXJlSW5wdXRUeXBlLmpzJ1xuaW1wb3J0IGZvcm1hdE5hbWUgZnJvbSAnLi4vdXRpbGl0aWVzL2Zvcm1hdE5hbWUuanMnXG5pbXBvcnQgY3JlYXRlUmVzb2x2ZXIgZnJvbSAnLi4vcmVzb2x2ZXJzL2NvbGxlY3Rpb25zL2NyZWF0ZS5qcydcbmltcG9ydCBnZXREZWxldGVSZXNvbHZlciBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvZGVsZXRlLmpzJ1xuaW1wb3J0IHsgZG9jQWNjZXNzUmVzb2x2ZXIgfSBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvZG9jQWNjZXNzLmpzJ1xuaW1wb3J0IGZpbmRSZXNvbHZlciBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvZmluZC5qcydcbmltcG9ydCBmaW5kQnlJRFJlc29sdmVyIGZyb20gJy4uL3Jlc29sdmVycy9jb2xsZWN0aW9ucy9maW5kQnlJRC5qcydcbmltcG9ydCBmaW5kVmVyc2lvbkJ5SURSZXNvbHZlciBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvZmluZFZlcnNpb25CeUlELmpzJ1xuaW1wb3J0IGZpbmRWZXJzaW9uc1Jlc29sdmVyIGZyb20gJy4uL3Jlc29sdmVycy9jb2xsZWN0aW9ucy9maW5kVmVyc2lvbnMuanMnXG5pbXBvcnQgcmVzdG9yZVZlcnNpb25SZXNvbHZlciBmcm9tICcuLi9yZXNvbHZlcnMvY29sbGVjdGlvbnMvcmVzdG9yZVZlcnNpb24uanMnXG5pbXBvcnQgdXBkYXRlUmVzb2x2ZXIgZnJvbSAnLi4vcmVzb2x2ZXJzL2NvbGxlY3Rpb25zL3VwZGF0ZS5qcydcblxudHlwZSBJbml0Q29sbGVjdGlvbnNHcmFwaFFMQXJncyA9IHtcbiAgY29uZmlnOiBTYW5pdGl6ZWRDb25maWdcbiAgZ3JhcGhxbFJlc3VsdDogR3JhcGhRTEluZm9cbn1cbmZ1bmN0aW9uIGluaXRDb2xsZWN0aW9uc0dyYXBoUUwoeyBjb25maWcsIGdyYXBocWxSZXN1bHQgfTogSW5pdENvbGxlY3Rpb25zR3JhcGhRTEFyZ3MpOiB2b2lkIHtcbiAgT2JqZWN0LmtleXMoZ3JhcGhxbFJlc3VsdC5jb2xsZWN0aW9ucykuZm9yRWFjaCgoc2x1ZykgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb246IENvbGxlY3Rpb24gPSBncmFwaHFsUmVzdWx0LmNvbGxlY3Rpb25zW3NsdWddXG4gICAgY29uc3Qge1xuICAgICAgY29uZmlnOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgY29uZmlnOiB7IGZpZWxkcywgZ3JhcGhRTCA9IHt9IGFzIFNhbml0aXplZENvbGxlY3Rpb25Db25maWdbJ2dyYXBoUUwnXSwgdmVyc2lvbnMgfSxcbiAgICB9ID0gY29sbGVjdGlvblxuXG4gICAgaWYgKCFncmFwaFFMKSByZXR1cm5cblxuICAgIGxldCBzaW5ndWxhck5hbWVcbiAgICBsZXQgcGx1cmFsTmFtZVxuICAgIGNvbnN0IGZyb21TbHVnID0gZm9ybWF0TmFtZXMoY29sbGVjdGlvbi5jb25maWcuc2x1ZylcbiAgICBpZiAoZ3JhcGhRTC5zaW5ndWxhck5hbWUpIHtcbiAgICAgIHNpbmd1bGFyTmFtZSA9IHRvV29yZHMoZ3JhcGhRTC5zaW5ndWxhck5hbWUsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNpbmd1bGFyTmFtZSA9IGZyb21TbHVnLnNpbmd1bGFyXG4gICAgfVxuICAgIGlmIChncmFwaFFMLnBsdXJhbE5hbWUpIHtcbiAgICAgIHBsdXJhbE5hbWUgPSB0b1dvcmRzKGdyYXBoUUwucGx1cmFsTmFtZSwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcGx1cmFsTmFtZSA9IGZyb21TbHVnLnBsdXJhbFxuICAgIH1cblxuICAgIC8vIEZvciBjb2xsZWN0aW9ucyBuYW1lZCAnTWVkaWEnIG9yIHNpbWlsYXIsXG4gICAgLy8gdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBzaW5ndWxhciBuYW1lXG4gICAgLy8gd2lsbCBlcXVhbCB0aGUgcGx1cmFsIG5hbWUuIEFwcGVuZCBgYWxsYCB0byB0aGUgYmVnaW5uaW5nXG4gICAgLy8gb2YgcG90ZW50aWFsIGNvbmZsaWN0c1xuICAgIGlmIChzaW5ndWxhck5hbWUgPT09IHBsdXJhbE5hbWUpIHtcbiAgICAgIHBsdXJhbE5hbWUgPSBgYWxsJHtzaW5ndWxhck5hbWV9YFxuICAgIH1cblxuICAgIGNvbGxlY3Rpb24uZ3JhcGhRTCA9IHt9IGFzIENvbGxlY3Rpb25bJ2dyYXBoUUwnXVxuXG4gICAgY29uc3QgaGFzSURGaWVsZCA9XG4gICAgICBmbGF0dGVuVG9wTGV2ZWxGaWVsZHMoZmllbGRzKS5maW5kSW5kZXgoXG4gICAgICAgIChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJyxcbiAgICAgICkgPiAtMVxuXG4gICAgY29uc3QgaWRUeXBlID0gZ2V0Q29sbGVjdGlvbklEVHlwZShjb25maWcuZGIuZGVmYXVsdElEVHlwZSwgY29sbGVjdGlvbkNvbmZpZylcblxuICAgIGNvbnN0IGJhc2VGaWVsZHM6IE9iamVjdFR5cGVDb25maWcgPSB7fVxuXG4gICAgY29uc3Qgd2hlcmVJbnB1dEZpZWxkcyA9IFsuLi5maWVsZHNdXG5cbiAgICBpZiAoIWhhc0lERmllbGQpIHtcbiAgICAgIGJhc2VGaWVsZHMuaWQgPSB7IHR5cGU6IGlkVHlwZSB9XG4gICAgICB3aGVyZUlucHV0RmllbGRzLnB1c2goe1xuICAgICAgICBuYW1lOiAnaWQnLFxuICAgICAgICB0eXBlOiBjb25maWcuZGIuZGVmYXVsdElEVHlwZSBhcyAndGV4dCcsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGZvcmNlTnVsbGFibGVPYmplY3RUeXBlID0gQm9vbGVhbih2ZXJzaW9ucz8uZHJhZnRzKVxuXG4gICAgY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgbmFtZTogc2luZ3VsYXJOYW1lLFxuICAgICAgYmFzZUZpZWxkcyxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGZvcmNlTnVsbGFibGU6IGZvcmNlTnVsbGFibGVPYmplY3RUeXBlLFxuICAgICAgcGFyZW50TmFtZTogc2luZ3VsYXJOYW1lLFxuICAgICAgZ3JhcGhxbFJlc3VsdCxcbiAgICAgIGNvbmZpZyxcbiAgICB9KVxuXG4gICAgY29sbGVjdGlvbi5ncmFwaFFMLnBhZ2luYXRlZFR5cGUgPSBidWlsZFBhZ2luYXRlZExpc3RUeXBlKHBsdXJhbE5hbWUsIGNvbGxlY3Rpb24uZ3JhcGhRTC50eXBlKVxuXG4gICAgY29sbGVjdGlvbi5ncmFwaFFMLndoZXJlSW5wdXRUeXBlID0gYnVpbGRXaGVyZUlucHV0VHlwZSh7XG4gICAgICBuYW1lOiBzaW5ndWxhck5hbWUsXG4gICAgICBmaWVsZHM6IHdoZXJlSW5wdXRGaWVsZHMsXG4gICAgICBwYXJlbnROYW1lOiBzaW5ndWxhck5hbWUsXG4gICAgfSlcblxuICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnLmF1dGggJiYgIWNvbGxlY3Rpb25Db25maWcuYXV0aC5kaXNhYmxlTG9jYWxTdHJhdGVneSkge1xuICAgICAgZmllbGRzLnB1c2goe1xuICAgICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgICBsYWJlbDogJ1Bhc3N3b3JkJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRlTXV0YXRpb25JbnB1dFR5cGUgPSBidWlsZE11dGF0aW9uSW5wdXRUeXBlKHtcbiAgICAgIG5hbWU6IHNpbmd1bGFyTmFtZSxcbiAgICAgIGZpZWxkcyxcbiAgICAgIHBhcmVudE5hbWU6IHNpbmd1bGFyTmFtZSxcbiAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICBjb25maWcsXG4gICAgfSlcbiAgICBpZiAoY3JlYXRlTXV0YXRpb25JbnB1dFR5cGUpIHtcbiAgICAgIGNvbGxlY3Rpb24uZ3JhcGhRTC5tdXRhdGlvbklucHV0VHlwZSA9IG5ldyBHcmFwaFFMTm9uTnVsbChjcmVhdGVNdXRhdGlvbklucHV0VHlwZSlcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVNdXRhdGlvbklucHV0VHlwZSA9IGJ1aWxkTXV0YXRpb25JbnB1dFR5cGUoe1xuICAgICAgbmFtZTogYCR7c2luZ3VsYXJOYW1lfVVwZGF0ZWAsXG4gICAgICBmaWVsZHM6IGZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiAhKGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLm5hbWUgPT09ICdpZCcpKSxcbiAgICAgIHBhcmVudE5hbWU6IGAke3Npbmd1bGFyTmFtZX1VcGRhdGVgLFxuICAgICAgZm9yY2VOdWxsYWJsZTogdHJ1ZSxcbiAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICBjb25maWcsXG4gICAgfSlcbiAgICBpZiAodXBkYXRlTXV0YXRpb25JbnB1dFR5cGUpIHtcbiAgICAgIGNvbGxlY3Rpb24uZ3JhcGhRTC51cGRhdGVNdXRhdGlvbklucHV0VHlwZSA9IG5ldyBHcmFwaFFMTm9uTnVsbCh1cGRhdGVNdXRhdGlvbklucHV0VHlwZSlcbiAgICB9XG5cbiAgICBncmFwaHFsUmVzdWx0LlF1ZXJ5LmZpZWxkc1tzaW5ndWxhck5hbWVdID0ge1xuICAgICAgYXJnczoge1xuICAgICAgICBpZDogeyB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoaWRUeXBlKSB9LFxuICAgICAgICBkcmFmdDogeyB0eXBlOiBHcmFwaFFMQm9vbGVhbiB9LFxuICAgICAgICAuLi4oY29uZmlnLmxvY2FsaXphdGlvblxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBmYWxsYmFja0xvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlIH0sXG4gICAgICAgICAgICAgIGxvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmxvY2FsZUlucHV0VHlwZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IGZpbmRCeUlEUmVzb2x2ZXIoY29sbGVjdGlvbiksXG4gICAgICB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudHlwZSxcbiAgICB9XG5cbiAgICBncmFwaHFsUmVzdWx0LlF1ZXJ5LmZpZWxkc1twbHVyYWxOYW1lXSA9IHtcbiAgICAgIGFyZ3M6IHtcbiAgICAgICAgZHJhZnQ6IHsgdHlwZTogR3JhcGhRTEJvb2xlYW4gfSxcbiAgICAgICAgd2hlcmU6IHsgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLndoZXJlSW5wdXRUeXBlIH0sXG4gICAgICAgIC4uLihjb25maWcubG9jYWxpemF0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUgfSxcbiAgICAgICAgICAgICAgbG9jYWxlOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMubG9jYWxlSW5wdXRUeXBlIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGxpbWl0OiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgICAgcGFnZTogeyB0eXBlOiBHcmFwaFFMSW50IH0sXG4gICAgICAgIHNvcnQ6IHsgdHlwZTogR3JhcGhRTFN0cmluZyB9LFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IGZpbmRSZXNvbHZlcihjb2xsZWN0aW9uKSxcbiAgICAgIHR5cGU6IGJ1aWxkUGFnaW5hdGVkTGlzdFR5cGUocGx1cmFsTmFtZSwgY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUpLFxuICAgIH1cblxuICAgIGdyYXBocWxSZXN1bHQuUXVlcnkuZmllbGRzW2Bkb2NBY2Nlc3Mke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgIGFyZ3M6IHtcbiAgICAgICAgaWQ6IHsgdHlwZTogbmV3IEdyYXBoUUxOb25OdWxsKGlkVHlwZSkgfSxcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiBkb2NBY2Nlc3NSZXNvbHZlcihjb2xsZWN0aW9uKSxcbiAgICAgIHR5cGU6IGJ1aWxkUG9saWN5VHlwZSh7XG4gICAgICAgIGVudGl0eTogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgc2NvcGU6ICdkb2NBY2Nlc3MnLFxuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHR5cGVTdWZmaXg6ICdEb2NBY2Nlc3MnLFxuICAgICAgfSksXG4gICAgfVxuXG4gICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYGNyZWF0ZSR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgYXJnczoge1xuICAgICAgICAuLi4oY3JlYXRlTXV0YXRpb25JbnB1dFR5cGVcbiAgICAgICAgICA/IHsgZGF0YTogeyB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwubXV0YXRpb25JbnB1dFR5cGUgfSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGRyYWZ0OiB7IHR5cGU6IEdyYXBoUUxCb29sZWFuIH0sXG4gICAgICAgIC4uLihjb25maWcubG9jYWxpemF0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGxvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmxvY2FsZUlucHV0VHlwZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IGNyZWF0ZVJlc29sdmVyKGNvbGxlY3Rpb24pLFxuICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUsXG4gICAgfVxuXG4gICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYHVwZGF0ZSR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgYXJnczoge1xuICAgICAgICBpZDogeyB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoaWRUeXBlKSB9LFxuICAgICAgICBhdXRvc2F2ZTogeyB0eXBlOiBHcmFwaFFMQm9vbGVhbiB9LFxuICAgICAgICAuLi4odXBkYXRlTXV0YXRpb25JbnB1dFR5cGVcbiAgICAgICAgICA/IHsgZGF0YTogeyB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudXBkYXRlTXV0YXRpb25JbnB1dFR5cGUgfSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGRyYWZ0OiB7IHR5cGU6IEdyYXBoUUxCb29sZWFuIH0sXG4gICAgICAgIC4uLihjb25maWcubG9jYWxpemF0aW9uXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGxvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmxvY2FsZUlucHV0VHlwZSB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IHVwZGF0ZVJlc29sdmVyKGNvbGxlY3Rpb24pLFxuICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUsXG4gICAgfVxuXG4gICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYGRlbGV0ZSR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgYXJnczoge1xuICAgICAgICBpZDogeyB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoaWRUeXBlKSB9LFxuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IGdldERlbGV0ZVJlc29sdmVyKGNvbGxlY3Rpb24pLFxuICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUsXG4gICAgfVxuXG4gICAgaWYgKGNvbGxlY3Rpb25Db25maWcudmVyc2lvbnMpIHtcbiAgICAgIGNvbnN0IHZlcnNpb25JRFR5cGUgPSBjb25maWcuZGIuZGVmYXVsdElEVHlwZSA9PT0gJ3RleHQnID8gR3JhcGhRTFN0cmluZyA6IEdyYXBoUUxJbnRcbiAgICAgIGNvbnN0IHZlcnNpb25Db2xsZWN0aW9uRmllbGRzOiBGaWVsZFtdID0gW1xuICAgICAgICAuLi5idWlsZFZlcnNpb25Db2xsZWN0aW9uRmllbGRzKGNvbGxlY3Rpb25Db25maWcpLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICB0eXBlOiBjb25maWcuZGIuZGVmYXVsdElEVHlwZSBhcyAndGV4dCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnY3JlYXRlZEF0JyxcbiAgICAgICAgICBsYWJlbDogJ0NyZWF0ZWQgQXQnLFxuICAgICAgICAgIHR5cGU6ICdkYXRlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICd1cGRhdGVkQXQnLFxuICAgICAgICAgIGxhYmVsOiAnVXBkYXRlZCBBdCcsXG4gICAgICAgICAgdHlwZTogJ2RhdGUnLFxuICAgICAgICB9LFxuICAgICAgXVxuXG4gICAgICBjb2xsZWN0aW9uLmdyYXBoUUwudmVyc2lvblR5cGUgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICBuYW1lOiBgJHtzaW5ndWxhck5hbWV9VmVyc2lvbmAsXG4gICAgICAgIGZpZWxkczogdmVyc2lvbkNvbGxlY3Rpb25GaWVsZHMsXG4gICAgICAgIGZvcmNlTnVsbGFibGU6IGZvcmNlTnVsbGFibGVPYmplY3RUeXBlLFxuICAgICAgICBwYXJlbnROYW1lOiBgJHtzaW5ndWxhck5hbWV9VmVyc2lvbmAsXG4gICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgIH0pXG5cbiAgICAgIGdyYXBocWxSZXN1bHQuUXVlcnkuZmllbGRzW2B2ZXJzaW9uJHtmb3JtYXROYW1lKHNpbmd1bGFyTmFtZSl9YF0gPSB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBpZDogeyB0eXBlOiB2ZXJzaW9uSURUeXBlIH0sXG4gICAgICAgICAgLi4uKGNvbmZpZy5sb2NhbGl6YXRpb25cbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGZhbGxiYWNrTG9jYWxlOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMuZmFsbGJhY2tMb2NhbGVJbnB1dFR5cGUgfSxcbiAgICAgICAgICAgICAgICBsb2NhbGU6IHsgdHlwZTogZ3JhcGhxbFJlc3VsdC50eXBlcy5sb2NhbGVJbnB1dFR5cGUgfSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmU6IGZpbmRWZXJzaW9uQnlJRFJlc29sdmVyKGNvbGxlY3Rpb24pLFxuICAgICAgICB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudmVyc2lvblR5cGUsXG4gICAgICB9XG4gICAgICBncmFwaHFsUmVzdWx0LlF1ZXJ5LmZpZWxkc1tgdmVyc2lvbnMke3BsdXJhbE5hbWV9YF0gPSB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICB3aGVyZToge1xuICAgICAgICAgICAgdHlwZTogYnVpbGRXaGVyZUlucHV0VHlwZSh7XG4gICAgICAgICAgICAgIG5hbWU6IGB2ZXJzaW9ucyR7c2luZ3VsYXJOYW1lfWAsXG4gICAgICAgICAgICAgIGZpZWxkczogdmVyc2lvbkNvbGxlY3Rpb25GaWVsZHMsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWU6IGB2ZXJzaW9ucyR7c2luZ3VsYXJOYW1lfWAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLihjb25maWcubG9jYWxpemF0aW9uXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBmYWxsYmFja0xvY2FsZTogeyB0eXBlOiBncmFwaHFsUmVzdWx0LnR5cGVzLmZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlIH0sXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB7IHR5cGU6IGdyYXBocWxSZXN1bHQudHlwZXMubG9jYWxlSW5wdXRUeXBlIH0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIGxpbWl0OiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgICAgICBwYWdlOiB7IHR5cGU6IEdyYXBoUUxJbnQgfSxcbiAgICAgICAgICBzb3J0OiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZTogZmluZFZlcnNpb25zUmVzb2x2ZXIoY29sbGVjdGlvbiksXG4gICAgICAgIHR5cGU6IGJ1aWxkUGFnaW5hdGVkTGlzdFR5cGUoXG4gICAgICAgICAgYHZlcnNpb25zJHtmb3JtYXROYW1lKHBsdXJhbE5hbWUpfWAsXG4gICAgICAgICAgY29sbGVjdGlvbi5ncmFwaFFMLnZlcnNpb25UeXBlLFxuICAgICAgICApLFxuICAgICAgfVxuICAgICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYHJlc3RvcmVWZXJzaW9uJHtmb3JtYXROYW1lKHNpbmd1bGFyTmFtZSl9YF0gPSB7XG4gICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICBpZDogeyB0eXBlOiB2ZXJzaW9uSURUeXBlIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHJlc29sdmU6IHJlc3RvcmVWZXJzaW9uUmVzb2x2ZXIoY29sbGVjdGlvbiksXG4gICAgICAgIHR5cGU6IGNvbGxlY3Rpb24uZ3JhcGhRTC50eXBlLFxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IGF1dGhGaWVsZHM6IEZpZWxkW10gPSBjb2xsZWN0aW9uQ29uZmlnLmF1dGguZGlzYWJsZUxvY2FsU3RyYXRlZ3lcbiAgICAgICAgPyBbXVxuICAgICAgICA6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgIHR5cGU6ICdlbWFpbCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF1cbiAgICAgIGNvbGxlY3Rpb24uZ3JhcGhRTC5KV1QgPSBidWlsZE9iamVjdFR5cGUoe1xuICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9SldUYCksXG4gICAgICAgIGZpZWxkczogW1xuICAgICAgICAgIC4uLmNvbGxlY3Rpb25Db25maWcuZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkQWZmZWN0c0RhdGEoZmllbGQpICYmIGZpZWxkLnNhdmVUb0pXVCksXG4gICAgICAgICAgLi4uYXV0aEZpZWxkcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY29sbGVjdGlvbicsXG4gICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwYXJlbnROYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9SldUYCksXG4gICAgICAgIGdyYXBocWxSZXN1bHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgIH0pXG5cbiAgICAgIGdyYXBocWxSZXN1bHQuUXVlcnkuZmllbGRzW2BtZSR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgICByZXNvbHZlOiBtZShjb2xsZWN0aW9uKSxcbiAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9TWVgKSxcbiAgICAgICAgICBmaWVsZHM6IHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IHtcbiAgICAgICAgICAgICAgdHlwZTogR3JhcGhRTFN0cmluZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleHA6IHtcbiAgICAgICAgICAgICAgdHlwZTogR3JhcGhRTEludCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgICB0eXBlOiBHcmFwaFFMU3RyaW5nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLnR5cGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgfVxuXG4gICAgICBncmFwaHFsUmVzdWx0LlF1ZXJ5LmZpZWxkc1tgaW5pdGlhbGl6ZWQke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgcmVzb2x2ZTogaW5pdChjb2xsZWN0aW9uLmNvbmZpZy5zbHVnKSxcbiAgICAgICAgdHlwZTogR3JhcGhRTEJvb2xlYW4sXG4gICAgICB9XG5cbiAgICAgIGdyYXBocWxSZXN1bHQuTXV0YXRpb24uZmllbGRzW2ByZWZyZXNoVG9rZW4ke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgYXJnczoge1xuICAgICAgICAgIHRva2VuOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZTogcmVmcmVzaChjb2xsZWN0aW9uKSxcbiAgICAgICAgdHlwZTogbmV3IEdyYXBoUUxPYmplY3RUeXBlKHtcbiAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9UmVmcmVzaGVkJHtzaW5ndWxhck5hbWV9YCksXG4gICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICBleHA6IHtcbiAgICAgICAgICAgICAgdHlwZTogR3JhcGhRTEludCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWZyZXNoZWRUb2tlbjoge1xuICAgICAgICAgICAgICB0eXBlOiBHcmFwaFFMU3RyaW5nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgdHlwZTogY29sbGVjdGlvbi5ncmFwaFFMLkpXVCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICB9XG5cbiAgICAgIGdyYXBocWxSZXN1bHQuTXV0YXRpb24uZmllbGRzW2Bsb2dvdXQke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgcmVzb2x2ZTogbG9nb3V0KGNvbGxlY3Rpb24pLFxuICAgICAgICB0eXBlOiBHcmFwaFFMU3RyaW5nLFxuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbGxlY3Rpb25Db25maWcuYXV0aC5kaXNhYmxlTG9jYWxTdHJhdGVneSkge1xuICAgICAgICBpZiAoY29sbGVjdGlvbkNvbmZpZy5hdXRoLm1heExvZ2luQXR0ZW1wdHMgPiAwKSB7XG4gICAgICAgICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYHVubG9jayR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICBlbWFpbDogeyB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoR3JhcGhRTFN0cmluZykgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNvbHZlOiB1bmxvY2soY29sbGVjdGlvbiksXG4gICAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoR3JhcGhRTEJvb2xlYW4pLFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdyYXBocWxSZXN1bHQuTXV0YXRpb24uZmllbGRzW2Bsb2dpbiR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIGVtYWlsOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgICAgIHBhc3N3b3JkOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IGxvZ2luKGNvbGxlY3Rpb24pLFxuICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9TG9naW5SZXN1bHRgKSxcbiAgICAgICAgICAgIGZpZWxkczoge1xuICAgICAgICAgICAgICBleHA6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBHcmFwaFFMSW50LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0b2tlbjoge1xuICAgICAgICAgICAgICAgIHR5cGU6IEdyYXBoUUxTdHJpbmcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVzZXI6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudHlwZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH1cblxuICAgICAgICBncmFwaHFsUmVzdWx0Lk11dGF0aW9uLmZpZWxkc1tgZm9yZ290UGFzc3dvcmQke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBkaXNhYmxlRW1haWw6IHsgdHlwZTogR3JhcGhRTEJvb2xlYW4gfSxcbiAgICAgICAgICAgIGVtYWlsOiB7IHR5cGU6IG5ldyBHcmFwaFFMTm9uTnVsbChHcmFwaFFMU3RyaW5nKSB9LFxuICAgICAgICAgICAgZXhwaXJhdGlvbjogeyB0eXBlOiBHcmFwaFFMSW50IH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiBmb3Jnb3RQYXNzd29yZChjb2xsZWN0aW9uKSxcbiAgICAgICAgICB0eXBlOiBuZXcgR3JhcGhRTE5vbk51bGwoR3JhcGhRTEJvb2xlYW4pLFxuICAgICAgICB9XG5cbiAgICAgICAgZ3JhcGhxbFJlc3VsdC5NdXRhdGlvbi5maWVsZHNbYHJlc2V0UGFzc3dvcmQke3Npbmd1bGFyTmFtZX1gXSA9IHtcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBwYXNzd29yZDogeyB0eXBlOiBHcmFwaFFMU3RyaW5nIH0sXG4gICAgICAgICAgICB0b2tlbjogeyB0eXBlOiBHcmFwaFFMU3RyaW5nIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiByZXNldFBhc3N3b3JkKGNvbGxlY3Rpb24pLFxuICAgICAgICAgIHR5cGU6IG5ldyBHcmFwaFFMT2JqZWN0VHlwZSh7XG4gICAgICAgICAgICBuYW1lOiBmb3JtYXROYW1lKGAke3NsdWd9UmVzZXRQYXNzd29yZGApLFxuICAgICAgICAgICAgZmllbGRzOiB7XG4gICAgICAgICAgICAgIHRva2VuOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgICAgICAgdXNlcjogeyB0eXBlOiBjb2xsZWN0aW9uLmdyYXBoUUwudHlwZSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfVxuXG4gICAgICAgIGdyYXBocWxSZXN1bHQuTXV0YXRpb24uZmllbGRzW2B2ZXJpZnlFbWFpbCR7c2luZ3VsYXJOYW1lfWBdID0ge1xuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIHRva2VuOiB7IHR5cGU6IEdyYXBoUUxTdHJpbmcgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IHZlcmlmeUVtYWlsKGNvbGxlY3Rpb24pLFxuICAgICAgICAgIHR5cGU6IEdyYXBoUUxCb29sZWFuLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0Q29sbGVjdGlvbnNHcmFwaFFMXG4iXSwibmFtZXMiOlsiR3JhcGhRTEJvb2xlYW4iLCJHcmFwaFFMSW50IiwiR3JhcGhRTE5vbk51bGwiLCJHcmFwaFFMT2JqZWN0VHlwZSIsIkdyYXBoUUxTdHJpbmciLCJmbGF0dGVuVG9wTGV2ZWxGaWVsZHMiLCJmb3JtYXROYW1lcyIsInRvV29yZHMiLCJmaWVsZEFmZmVjdHNEYXRhIiwiYnVpbGRWZXJzaW9uQ29sbGVjdGlvbkZpZWxkcyIsImZvcmdvdFBhc3N3b3JkIiwiaW5pdCIsImxvZ2luIiwibG9nb3V0IiwibWUiLCJyZWZyZXNoIiwicmVzZXRQYXNzd29yZCIsInVubG9jayIsInZlcmlmeUVtYWlsIiwiYnVpbGRNdXRhdGlvbklucHV0VHlwZSIsImdldENvbGxlY3Rpb25JRFR5cGUiLCJidWlsZE9iamVjdFR5cGUiLCJidWlsZFBhZ2luYXRlZExpc3RUeXBlIiwiYnVpbGRQb2xpY3lUeXBlIiwiYnVpbGRXaGVyZUlucHV0VHlwZSIsImZvcm1hdE5hbWUiLCJjcmVhdGVSZXNvbHZlciIsImdldERlbGV0ZVJlc29sdmVyIiwiZG9jQWNjZXNzUmVzb2x2ZXIiLCJmaW5kUmVzb2x2ZXIiLCJmaW5kQnlJRFJlc29sdmVyIiwiZmluZFZlcnNpb25CeUlEUmVzb2x2ZXIiLCJmaW5kVmVyc2lvbnNSZXNvbHZlciIsInJlc3RvcmVWZXJzaW9uUmVzb2x2ZXIiLCJ1cGRhdGVSZXNvbHZlciIsImluaXRDb2xsZWN0aW9uc0dyYXBoUUwiLCJjb25maWciLCJncmFwaHFsUmVzdWx0IiwiT2JqZWN0Iiwia2V5cyIsImNvbGxlY3Rpb25zIiwiZm9yRWFjaCIsInNsdWciLCJjb2xsZWN0aW9uIiwiY29sbGVjdGlvbkNvbmZpZyIsImZpZWxkcyIsImdyYXBoUUwiLCJ2ZXJzaW9ucyIsInNpbmd1bGFyTmFtZSIsInBsdXJhbE5hbWUiLCJmcm9tU2x1ZyIsInNpbmd1bGFyIiwicGx1cmFsIiwiaGFzSURGaWVsZCIsImZpbmRJbmRleCIsImZpZWxkIiwibmFtZSIsImlkVHlwZSIsImRiIiwiZGVmYXVsdElEVHlwZSIsImJhc2VGaWVsZHMiLCJ3aGVyZUlucHV0RmllbGRzIiwiaWQiLCJ0eXBlIiwicHVzaCIsImZvcmNlTnVsbGFibGVPYmplY3RUeXBlIiwiQm9vbGVhbiIsImRyYWZ0cyIsImZvcmNlTnVsbGFibGUiLCJwYXJlbnROYW1lIiwicGFnaW5hdGVkVHlwZSIsIndoZXJlSW5wdXRUeXBlIiwiYXV0aCIsImRpc2FibGVMb2NhbFN0cmF0ZWd5IiwibGFiZWwiLCJyZXF1aXJlZCIsImNyZWF0ZU11dGF0aW9uSW5wdXRUeXBlIiwibXV0YXRpb25JbnB1dFR5cGUiLCJ1cGRhdGVNdXRhdGlvbklucHV0VHlwZSIsImZpbHRlciIsIlF1ZXJ5IiwiYXJncyIsImRyYWZ0IiwibG9jYWxpemF0aW9uIiwiZmFsbGJhY2tMb2NhbGUiLCJ0eXBlcyIsImZhbGxiYWNrTG9jYWxlSW5wdXRUeXBlIiwibG9jYWxlIiwibG9jYWxlSW5wdXRUeXBlIiwicmVzb2x2ZSIsIndoZXJlIiwibGltaXQiLCJwYWdlIiwic29ydCIsImVudGl0eSIsInNjb3BlIiwidHlwZVN1ZmZpeCIsIk11dGF0aW9uIiwiZGF0YSIsImF1dG9zYXZlIiwidmVyc2lvbklEVHlwZSIsInZlcnNpb25Db2xsZWN0aW9uRmllbGRzIiwidmVyc2lvblR5cGUiLCJhdXRoRmllbGRzIiwiSldUIiwic2F2ZVRvSldUIiwiZXhwIiwidG9rZW4iLCJ1c2VyIiwicmVmcmVzaGVkVG9rZW4iLCJtYXhMb2dpbkF0dGVtcHRzIiwiZW1haWwiLCJwYXNzd29yZCIsImRpc2FibGVFbWFpbCIsImV4cGlyYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBLG9DQUFvQyxHQUNwQyxTQUNFQSxjQUFjLEVBQ2RDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxpQkFBaUIsRUFDakJDLGFBQWEsUUFDUixVQUFTO0FBRWhCLFNBQVNDLHFCQUFxQixFQUFFQyxXQUFXLEVBQUVDLE9BQU8sUUFBUSxvQkFBbUI7QUFDL0UsU0FBU0MsZ0JBQWdCLFFBQVEsZ0JBQWU7QUFDaEQsU0FBU0MsNEJBQTRCLFFBQVEsbUJB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
|