@nlabs/reaktor 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -0
- package/lib/actions/analytics.js +1 -1
- package/lib/actions/apps.js +1 -1
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +1 -1
- package/lib/actions/conversations.js +1 -1
- package/lib/actions/crm.js +1 -1
- package/lib/actions/crud.js +1 -1
- package/lib/actions/dynamodb.js +1 -1
- package/lib/actions/email.js +1 -1
- package/lib/actions/files.js +1 -1
- package/lib/actions/flags.js +1 -1
- package/lib/actions/groups.js +1 -1
- package/lib/actions/images.js +1 -1
- package/lib/actions/index.js +1 -1
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +1 -1
- package/lib/actions/messages.js +1 -1
- package/lib/actions/notifications.js +1 -1
- package/lib/actions/payments.js +1 -1
- package/lib/actions/personas.js +1 -1
- package/lib/actions/posts.js +1 -1
- package/lib/actions/query.js +1 -1
- package/lib/actions/reactions.js +1 -1
- package/lib/actions/rum.js +1 -1
- package/lib/actions/s3.js +1 -1
- package/lib/actions/search.js +1 -1
- package/lib/actions/sms.js +1 -1
- package/lib/actions/statistics.js +1 -1
- package/lib/actions/subscriptions.js +1 -1
- package/lib/actions/tags.js +1 -1
- package/lib/actions/users.js +1 -1
- package/lib/actions/videos.js +1 -1
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +1 -1
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/index.js +1 -1
- package/lib/adapters/messageAdapter.js +1 -1
- package/lib/adapters/postAdapter.js +1 -1
- package/lib/adapters/reaktorAdapter.js +1 -1
- package/lib/adapters/tagAdapter.js +1 -1
- package/lib/adapters/userAdapter.js +1 -1
- package/lib/config.js +1 -1
- package/lib/constants/collections.js +1 -1
- package/lib/durableChat/conversations.d.ts +62 -0
- package/lib/durableChat/conversations.js +729 -0
- package/lib/durableChat/errors.d.ts +6 -0
- package/lib/durableChat/errors.js +11 -0
- package/lib/durableChat/events.d.ts +22 -0
- package/lib/durableChat/events.js +50 -0
- package/lib/durableChat/index.d.ts +8 -0
- package/lib/durableChat/index.js +10 -0
- package/lib/durableChat/membership.d.ts +24 -0
- package/lib/durableChat/membership.js +85 -0
- package/lib/durableChat/messageTypes.d.ts +76 -0
- package/lib/durableChat/messageTypes.js +3 -0
- package/lib/durableChat/messages.d.ts +16 -0
- package/lib/durableChat/messages.js +257 -0
- package/lib/durableChat/transaction.d.ts +10 -0
- package/lib/durableChat/transaction.js +53 -0
- package/lib/durableChat/types.d.ts +81 -0
- package/lib/durableChat/types.js +3 -0
- package/lib/handlers/graphqlHandler.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/lambdas/actions/websockets.js +1 -1
- package/lib/lambdas/authorizer.js +1 -1
- package/lib/lambdas/connection.js +1 -1
- package/lib/lambdas/utils/message.js +1 -1
- package/lib/lambdas/utils/websocket.js +1 -1
- package/lib/mocks/conversation.js +1 -1
- package/lib/mocks/file.js +1 -1
- package/lib/mocks/group.js +1 -1
- package/lib/mocks/image.js +1 -1
- package/lib/mocks/post.js +1 -1
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.js +1 -1
- package/lib/mocks/video.js +1 -1
- package/lib/mutations/analytics/analytics.js +1 -1
- package/lib/mutations/content/content.js +1 -1
- package/lib/mutations/crm/crm.js +1 -1
- package/lib/mutations/events/events.js +1 -1
- package/lib/mutations/flags/flags.js +1 -1
- package/lib/mutations/groups/groups.js +1 -1
- package/lib/mutations/images/images.js +1 -1
- package/lib/mutations/index.js +1 -1
- package/lib/mutations/locations/locations.js +1 -1
- package/lib/mutations/messages/messages.js +1 -1
- package/lib/mutations/personas/personas.js +1 -1
- package/lib/mutations/posts/posts.js +1 -1
- package/lib/mutations/reactions/reactions.js +1 -1
- package/lib/mutations/rum/rum.js +1 -1
- package/lib/mutations/statistics/statistics.js +1 -1
- package/lib/mutations/subscriptions/subscriptions.js +1 -1
- package/lib/mutations/tags/tags.js +1 -1
- package/lib/mutations/users/users.js +1 -1
- package/lib/mutations/videos/videos.js +1 -1
- package/lib/objectTypes/analytics.js +1 -1
- package/lib/objectTypes/app.js +1 -1
- package/lib/objectTypes/bankAccount.js +1 -1
- package/lib/objectTypes/connection.js +1 -1
- package/lib/objectTypes/content.js +1 -1
- package/lib/objectTypes/conversation.js +1 -1
- package/lib/objectTypes/creditCard.js +1 -1
- package/lib/objectTypes/crm.js +1 -1
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +1 -1
- package/lib/objectTypes/event.js +1 -1
- package/lib/objectTypes/external.js +1 -1
- package/lib/objectTypes/file.js +1 -1
- package/lib/objectTypes/filter.js +1 -1
- package/lib/objectTypes/flag.js +1 -1
- package/lib/objectTypes/group.js +1 -1
- package/lib/objectTypes/iapSubscription.js +1 -1
- package/lib/objectTypes/image.js +1 -1
- package/lib/objectTypes/index.js +1 -1
- package/lib/objectTypes/location.js +1 -1
- package/lib/objectTypes/message.js +1 -1
- package/lib/objectTypes/passcode.js +1 -1
- package/lib/objectTypes/persona.js +1 -1
- package/lib/objectTypes/plan.js +1 -1
- package/lib/objectTypes/post.js +1 -1
- package/lib/objectTypes/query.js +1 -1
- package/lib/objectTypes/reaction.js +1 -1
- package/lib/objectTypes/relation.js +1 -1
- package/lib/objectTypes/rum.js +1 -1
- package/lib/objectTypes/search.js +1 -1
- package/lib/objectTypes/statistics.js +1 -1
- package/lib/objectTypes/subscription.js +1 -1
- package/lib/objectTypes/tag.js +1 -1
- package/lib/objectTypes/user.js +1 -1
- package/lib/objectTypes/video.js +1 -1
- package/lib/queries/analytics/analytics.js +1 -1
- package/lib/queries/content/content.js +1 -1
- package/lib/queries/crm/crm.js +1 -1
- package/lib/queries/events/events.js +1 -1
- package/lib/queries/flags/flags.js +1 -1
- package/lib/queries/groups/groups.js +1 -1
- package/lib/queries/images/images.js +1 -1
- package/lib/queries/index.js +1 -1
- package/lib/queries/locations/locations.js +1 -1
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +1 -1
- package/lib/queries/posts/posts.js +1 -1
- package/lib/queries/query/query.js +1 -1
- package/lib/queries/reactions/reactions.js +1 -1
- package/lib/queries/statistics/statistics.js +1 -1
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +1 -1
- package/lib/queries/users/users.js +1 -1
- package/lib/queries/videos/videos.js +1 -1
- package/lib/templates/email/layout.js +1 -1
- package/lib/templates/email/passwordForgot.js +1 -1
- package/lib/templates/email/passwordRecovery.js +1 -1
- package/lib/templates/email/verifyEmail.js +1 -1
- package/lib/templates/email/welcome.js +1 -1
- package/lib/templates/sms/passwordForgot.js +1 -1
- package/lib/templates/sms/passwordRecovery.js +1 -1
- package/lib/templates/sms/verifyEmail.js +1 -1
- package/lib/templates/sms/verifyPhone.js +1 -1
- package/lib/templates/sms/welcome.js +1 -1
- package/lib/types/analytics.types.js +1 -1
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/auth.types.js +1 -1
- package/lib/types/connections.types.js +1 -1
- package/lib/types/content.types.js +1 -1
- package/lib/types/conversations.types.js +1 -1
- package/lib/types/crm.types.js +1 -1
- package/lib/types/email.types.js +1 -1
- package/lib/types/error.types.js +1 -1
- package/lib/types/files.types.js +1 -1
- package/lib/types/flags.types.js +1 -1
- package/lib/types/google.types.js +1 -1
- package/lib/types/groups.types.js +1 -1
- package/lib/types/images.types.js +1 -1
- package/lib/types/index.js +1 -1
- package/lib/types/locations.types.js +1 -1
- package/lib/types/messages.types.js +1 -1
- package/lib/types/notifications.types.js +1 -1
- package/lib/types/payments.types.js +1 -1
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.js +1 -1
- package/lib/types/rum.types.js +1 -1
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.js +1 -1
- package/lib/types/users.types.js +1 -1
- package/lib/types/videos.types.js +1 -1
- package/lib/types/websockets.types.js +1 -1
- package/lib/upload.js +1 -1
- package/lib/utils/adapterUtils.js +1 -1
- package/lib/utils/analyticsUtils.js +1 -1
- package/lib/utils/appContext.js +1 -1
- package/lib/utils/aqlHelpers.js +1 -1
- package/lib/utils/arangodbUtils.js +1 -1
- package/lib/utils/authUtils.js +1 -1
- package/lib/utils/awsUtils.js +1 -1
- package/lib/utils/collectionRegistry.js +1 -1
- package/lib/utils/contextUtils.js +1 -1
- package/lib/utils/dbI18n.example.js +1 -1
- package/lib/utils/dbI18n.js +1 -1
- package/lib/utils/googleTranslate.js +1 -1
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.js +1 -1
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.example.js +1 -1
- package/lib/utils/localeUtils.js +1 -1
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/queryBuilder.js +1 -1
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.js +1 -1
- package/lib/utils/stripeUtils.js +2 -1
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +1 -1
- package/lib/utils/translationQueue.example.js +1 -1
- package/lib/utils/translationQueue.js +1 -1
- package/lib/videoProcessing.js +1 -1
- package/package.json +3 -3
|
@@ -336,4 +336,4 @@ export const deleteUserFromConversation = (context, { conversationId, userId })=
|
|
|
336
336
|
}, error, context));
|
|
337
337
|
};
|
|
338
338
|
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2NvbnZlcnNhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Y2xvbmVEZWVwfSBmcm9tICdAbmxhYnMvdXRpbHMvb2JqZWN0cy9jbG9uZSc7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgc29ydElkcywgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUsIGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7Z2V0VXNlckJ5SWR9IGZyb20gJy4vdXNlcnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcbmltcG9ydCB0eXBlIHtBcmFuZ29EYkxpbWl0LCBFZGdlVHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0Nvbm5lY3Rpb25UeXBlfSBmcm9tICcuLi90eXBlcy9jb25uZWN0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvbnZlcnNhdGlvbk9wdGlvbnMsXG4gIENvbnZlcnNhdGlvblR5cGUsXG4gIENvbnZlcnNhdGlvblVzZXJzUGFyYW1zLFxuICBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXMsXG4gIFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbn0gZnJvbSAnLi4vdHlwZXMvY29udmVyc2F0aW9ucy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdjb252ZXJzYXRpb25zJztcbmNvbnN0IGhhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKCdoYXNDb252ZXJzYXRpb24nKTtcblxuY29uc3QgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVVzZXJJZDogc3RyaW5nLFxuICB0b1VzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgW2Zyb21Vc2VyLCB0b1VzZXJdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IGZyb21Vc2VySWR9KSxcbiAgICBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiB0b1VzZXJJZH0pXG4gIF0pO1xuICBjb25zdCBmcm9tUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoZnJvbVVzZXI/LnBlcnNvbmFJZCB8fCAnJykpO1xuICBjb25zdCB0b1BlcnNvbmFJZCA9IHBhcnNlSWQoU3RyaW5nKHRvVXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgaWYoIWZyb21QZXJzb25hSWQgfHwgIXRvUGVyc29uYUlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBjb25zdCByZWxhdGlvbnNoaXAgPSBhd2FpdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUoY29udGV4dCwgdG9QZXJzb25hSWQsIGZyb21QZXJzb25hSWQpO1xuXG4gIGlmKCFyZWxhdGlvbnNoaXAuaXNGcmllbmQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxufTtcblxuY29uc3QgZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbnM6IENvbnZlcnNhdGlvblR5cGVbXSA9IFtdXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBzZXNzaW9uUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgaWYoIXNlc3Npb25QZXJzb25hSWQgfHwgIWNvbnZlcnNhdGlvbnMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGNvbnZlcnNhdGlvbnM7XG4gIH1cblxuICBjb25zdCB2aXNpYmlsaXR5ID0gYXdhaXQgUHJvbWlzZS5hbGwoY29udmVyc2F0aW9ucy5tYXAoYXN5bmMgKGNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGlmKCFjb252ZXJzYXRpb24/LmlzRGlyZWN0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0aWNpcGFudCA9IEFycmF5LmlzQXJyYXkoY29udmVyc2F0aW9uPy51c2VycylcbiAgICAgID8gY29udmVyc2F0aW9uLnVzZXJzLmZpbmQoKHVzZXIpID0+IHBhcnNlSWQoU3RyaW5nKHVzZXI/LnVzZXJJZCB8fCB1c2VyPy5fa2V5IHx8ICcnKSkgIT09IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpKVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IHBhcnRpY2lwYW50UGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcocGFydGljaXBhbnQ/LnBlcnNvbmFJZCB8fCAnJykpO1xuXG4gICAgaWYoIXBhcnRpY2lwYW50UGVyc29uYUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIShhd2FpdCBpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZChjb250ZXh0LCBwYXJ0aWNpcGFudFBlcnNvbmFJZCwgc2Vzc2lvblBlcnNvbmFJZCkpO1xuICB9KSk7XG5cbiAgcmV0dXJuIGNvbnZlcnNhdGlvbnMuZmlsdGVyKChfY29udmVyc2F0aW9uLCBpbmRleCkgPT4gdmlzaWJpbGl0eVtpbmRleF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGVuc3VyZUNvbnZlcnNhdGlvbk1lc3NhZ2luZ0FsbG93ZWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbklkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCBnZXRDb252ZXJzYXRpb25CeUlkKGNvbnRleHQsIGNvbnZlcnNhdGlvbklkKTtcblxuICBpZighY29udmVyc2F0aW9uPy5jb252ZXJzYXRpb25JZCAmJiAhY29udmVyc2F0aW9uPy5fa2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBpZighY29udmVyc2F0aW9uPy5pc0RpcmVjdCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25Vc2VySWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3QgcGFydGljaXBhbnQgPSBBcnJheS5pc0FycmF5KGNvbnZlcnNhdGlvbj8udXNlcnMpXG4gICAgPyBjb252ZXJzYXRpb24udXNlcnMuZmluZCgodXNlcikgPT4gcGFyc2VJZChTdHJpbmcodXNlcj8udXNlcklkIHx8IHVzZXI/Ll9rZXkgfHwgJycpKSAhPT0gc2Vzc2lvblVzZXJJZClcbiAgICA6IG51bGw7XG4gIGNvbnN0IHBhcnRpY2lwYW50VXNlcklkID0gcGFyc2VJZChTdHJpbmcocGFydGljaXBhbnQ/LnVzZXJJZCB8fCBwYXJ0aWNpcGFudD8uX2tleSB8fCAnJykpO1xuXG4gIGlmKCFzZXNzaW9uVXNlcklkIHx8ICFwYXJ0aWNpcGFudFVzZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG5cbiAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBzZXNzaW9uVXNlcklkLCBwYXJ0aWNpcGFudFVzZXJJZCk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb252ZXJzYXRpb25PcHRpb25zID0gKG9wdGlvbnM6IENvbnZlcnNhdGlvbk9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvbkxpc3RCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIG9wdGlvbnM/KTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbnZlcnNhdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke3VzZXJJZH1gO1xuICBjb25zdCBhcWxRcnkgPSBhcWxgXG4gICAgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3VzZXJEb2NJZH0gJHtoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9ufVxuICAgICAgU09SVCBjLmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgTEVUIHVzZXJzID0gKFxuICAgICAgICBGT1IgdSwgdWMgSU4gMS4uMSBJTkJPVU5EIGMuX2lkICR7aGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgdS5faWQgIT0gJHt1c2VyRG9jSWR9XG4gICAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnN9KVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb252ZXJzYXRpb25UeXBlW10pXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbnMpID0+IGZpbHRlckJsb2NrZWRDb252ZXJzYXRpb25zKGNvbnRleHQsIGNvbnZlcnNhdGlvbnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbnMtJHtzb3J0ZWRVc2VySWRzLmpvaW4oJy0nKX1gLCBudWxsKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgYyA9IERPQ1VNRU5UKCR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSkgUkVUVVJOIGNgO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuXG4gICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICByZXR1cm4gey4uLmNvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZERpcmVjdENvbnZlcnNhdGlvbihjb250ZXh0LCB7ZnJvbUlkLCB0b0lkLCB0b1VzZXI6IHVzZXJ9KTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBkYXRhYmFzZUVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0RGlyZWN0Q29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQgPSBwYXJzZUlkKHRvSWQpO1xuICAgIGF3YWl0IGVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAoY29udGV4dCwgZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkKTtcbiAgICBjb25zdCB1c2VySWRzID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkcyA9IHNvcnRJZHModXNlcklkcyk7XG4gICAgY29uc3QgdXNlcjogVXNlclR5cGUgPSB0b1VzZXIgfHwgYXdhaXQgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuXG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgX2tleTogY29udmVyc2F0aW9uSWQsXG4gICAgICBpc0RpcmVjdDogdHJ1ZVxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlZENvbnZlcnNhdGlvbiA9IGF3YWl0IGFkZEl0ZW08Q29udmVyc2F0aW9uVHlwZT4oY29udGV4dCwgJ2NvbnZlcnNhdGlvbnMnLCBpbnNlcnQpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodXNlcklkcy5tYXAoKHVzZXJJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzQ29udmVyc2F0aW9uLSR7dXNlcklkfS0ke2NvbnZlcnNhdGlvbklkfWApO1xuICAgICAgY29uc3QgZWRnZTogRWRnZVR5cGUgPSB7XG4gICAgICAgIF9mcm9tOiBgdXNlcnMvJHt1c2VySWR9YCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGBjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgYWRkZWQ6IERhdGUubm93KClcbiAgICAgIH07XG4gICAgICBjb25zdCBpbnNlcnRFZGdlUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2VkZ2V9IElOIGhhc0NvbnZlcnNhdGlvbiBSRVRVUk4gTkVXYDtcbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGluc2VydEVkZ2VRdWVyeSk7XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHsuLi51cGRhdGVkQ29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25Vc2VyTGlzdCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRDb25uZWN0aW9uVXNlckxpc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRk9SIGMgSU4gY29ubmVjdGlvbnNcbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICBSRVRVUk4gY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbm5lY3Rpb25UeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25Vc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbnZlcnNhdGlvblVzZXJzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25cbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29udmVyc2F0aW9uVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uQnlJZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke3BhcnNlSWQoY29udmVyc2F0aW9uSWQpfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7c2Vzc2lvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgYy5faWQgPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMRVQgdSA9IChcbiAgICAgIEZPUiBpblVzZXIsIGluRWRnZSBJTiAxLi4xIElOQk9VTkQgJHtjb252ZXJzYXRpb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgICBSRVRVUk4gaW5Vc2VyXG4gICAgKVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTUVSR0UoYywge3VzZXJzOiB1fSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGUpID0+IHtcbiAgICAgIGlmKCFjb252ZXJzYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnZlcnNhdGlvbjtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVDb252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZVxuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbi0ke3Nlc3Npb25JZH0gYCksXG4gICAgaXNEaXJlY3QgPSBmYWxzZSxcbiAgICBuYW1lXG4gIH0gPSBjb252ZXJzYXRpb247XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBpc0RpcmVjdCxcbiAgICBuYW1lXG4gIH07XG5cbiAgY29uc3QgaW5zZXJ0ID0ge1xuICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgIF9rZXk6IGZvcm1hdENvbnZlcnNhdGlvbklkXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9IH1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4gY29udmVyc2F0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9Db252ZXJzYXRpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICB1c2VySWRcbiAgfTogVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRVc2VyVG9Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBoY2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGhhc0NvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhaGFzQ29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gaGFzQ29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNDb252ZXJzYXRpb24nKTtcbiAgICAgIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbi0ke2Zvcm1hdENvbnZlcnNhdGlvbklkfS0ke2Zvcm1hdFVzZXJJZH1gKTtcblxuICAgICAgY29uc3QgZWRnZTogQ29udmVyc2F0aW9uVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IHVzZXJEb2NJZCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGNvbnZlcnNhdGlvbkRvY0lkLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uXG4gICAgICAgIC5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgICAudGhlbigoKSA9PiBlZGdlKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZCA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkID0gYGNvbnZlcnNhdGlvbnMvJHtmb3JtYXRDb252ZXJzYXRpb25JZH1gO1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGhjLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcbiJdLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJjcmVhdGVIYXNoIiwicGFyc2VJZCIsImFxbCIsImxpdGVyYWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJnZXRMaW1pdCIsInNvcnRJZHMiLCJ1c2VEYiIsImFkZEl0ZW0iLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJpc1BlcnNvbmFWaXNpYmlsaXR5QmxvY2tlZCIsImdldFVzZXJCeUlkIiwiZXZlbnRDYXRlZ29yeSIsImhhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb24iLCJlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwIiwiY29udGV4dCIsImZyb21Vc2VySWQiLCJ0b1VzZXJJZCIsImZyb21Vc2VyIiwidG9Vc2VyIiwiUHJvbWlzZSIsImFsbCIsInVzZXJJZCIsImZyb21QZXJzb25hSWQiLCJTdHJpbmciLCJwZXJzb25hSWQiLCJ0b1BlcnNvbmFJZCIsIkVycm9yIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwiZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMiLCJjb252ZXJzYXRpb25zIiwic2Vzc2lvblBlcnNvbmFJZCIsInNlc3Npb24iLCJsZW5ndGgiLCJ2aXNpYmlsaXR5IiwibWFwIiwiY29udmVyc2F0aW9uIiwiaXNEaXJlY3QiLCJwYXJ0aWNpcGFudCIsIkFycmF5IiwiaXNBcnJheSIsInVzZXJzIiwiZmluZCIsInVzZXIiLCJfa2V5IiwicGFydGljaXBhbnRQZXJzb25hSWQiLCJmaWx0ZXIiLCJfY29udmVyc2F0aW9uIiwiaW5kZXgiLCJlbnN1cmVDb252ZXJzYXRpb25NZXNzYWdpbmdBbGxvd2VkIiwiY29udmVyc2F0aW9uSWQiLCJnZXRDb252ZXJzYXRpb25CeUlkIiwic2Vzc2lvblVzZXJJZCIsInBhcnRpY2lwYW50VXNlcklkIiwicGFyc2VDb252ZXJzYXRpb25PcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsImxpbWl0IiwiZ2V0Q29udmVyc2F0aW9uTGlzdEJ5VXNlciIsImFjdGlvbiIsImRhdGFiYXNlTmFtZSIsInVzZXJEb2NJZCIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJnZXREaXJlY3RDb252ZXJzYXRpb24iLCJmcm9tSWQiLCJ0b0lkIiwiZm9ybWF0RnJvbUlkIiwiZm9ybWF0VG9JZCIsInVzZXJJZHMiLCJzb3J0ZWRVc2VySWRzIiwiam9pbiIsIm5leHQiLCJhZGREaXJlY3RDb252ZXJzYXRpb24iLCJkYXRhYmFzZUVycm9yIiwiaW5zZXJ0IiwidXBkYXRlZENvbnZlcnNhdGlvbiIsImVkZ2VJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImFkZGVkIiwiRGF0ZSIsIm5vdyIsImluc2VydEVkZ2VRdWVyeSIsImdldENvbm5lY3Rpb25Vc2VyTGlzdCIsImluY2x1ZGVBbGwiLCJmaWx0ZXJzIiwicHVzaCIsImdldENvbnZlcnNhdGlvblVzZXJzIiwic2Vzc2lvbklkIiwic2Vzc2lvbkRvY0lkIiwiY29udmVyc2F0aW9uRG9jSWQiLCJ1cGRhdGVDb252ZXJzYXRpb24iLCJuYW1lIiwiZm9ybWF0Q29udmVyc2F0aW9uSWQiLCJ1cGRhdGUiLCJhZGRVc2VyVG9Db252ZXJzYXRpb24iLCJmb3JtYXRVc2VySWQiLCJoYXNDb252ZXJzYXRpb25FZGdlIiwiZWRnZUNvbGxlY3Rpb24iLCJjb2xsZWN0aW9uIiwic2F2ZSIsInJldHVybk5ldyIsImRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8sNkJBQTZCO0FBQ3JELFNBQVFDLFVBQVUsRUFBRUMsT0FBTyxRQUFPLCtCQUErQjtBQUNqRSxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUNyQyxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBQ25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFDcEQsU0FBUUMsUUFBUSxFQUFFQyxPQUFPLEVBQUVDLEtBQUssUUFBTyw0QkFBNEI7QUFDbkUsU0FBUUMsT0FBTyxRQUFPLFlBQVk7QUFDbEMsU0FBUUMsMkJBQTJCLEVBQUVDLDBCQUEwQixRQUFPLGdCQUFnQjtBQUN0RixTQUFRQyxXQUFXLFFBQU8sYUFBYTtBQWdCdkMsTUFBTUMsZ0JBQWdCO0FBQ3RCLE1BQU1DLDRCQUE0QlgsUUFBUTtBQUUxQyxNQUFNWSxxQ0FBcUMsT0FDekNDLFNBQ0FDLFlBQ0FDO0lBRUEsTUFBTSxDQUFDQyxVQUFVQyxPQUFPLEdBQUcsTUFBTUMsUUFBUUMsR0FBRyxDQUFDO1FBQzNDVixZQUFZSSxTQUFTO1lBQUNPLFFBQVFOO1FBQVU7UUFDeENMLFlBQVlJLFNBQVM7WUFBQ08sUUFBUUw7UUFBUTtLQUN2QztJ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
|
|
339
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtjbG9uZURlZXB9IGZyb20gJ0BubGFicy91dGlscy9vYmplY3RzL2Nsb25lJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2dldExpbWl0LCBzb3J0SWRzLCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2dldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSwgaXNQZXJzb25hVmlzaWJpbGl0eUJsb2NrZWR9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtnZXRVc2VyQnlJZH0gZnJvbSAnLi91c2Vycy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0FyYW5nb0RiTGltaXQsIEVkZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q29ubmVjdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2Nvbm5lY3Rpb25zLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29udmVyc2F0aW9uT3B0aW9ucyxcbiAgQ29udmVyc2F0aW9uVHlwZSxcbiAgQ29udmVyc2F0aW9uVXNlcnNQYXJhbXMsXG4gIERpcmVjdENvbnZlcnNhdGlvblBhcmFtcyxcbiAgVXBkYXRlQ29udmVyc2F0aW9uVXNlclBhcmFtc1xufSBmcm9tICcuLi90eXBlcy9jb252ZXJzYXRpb25zLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VyVHlwZX0gZnJvbSAnLi4vdHlwZXMvdXNlcnMudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2NvbnZlcnNhdGlvbnMnO1xuY29uc3QgaGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoJ2hhc0NvbnZlcnNhdGlvbicpO1xuXG5jb25zdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVXNlcklkOiBzdHJpbmcsXG4gIHRvVXNlcklkOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBbZnJvbVVzZXIsIHRvVXNlcl0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgZ2V0VXNlckJ5SWQoY29udGV4dCwge3VzZXJJZDogZnJvbVVzZXJJZH0pLFxuICAgIGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IHRvVXNlcklkfSlcbiAgXSk7XG4gIGNvbnN0IGZyb21QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhmcm9tVXNlcj8ucGVyc29uYUlkIHx8ICcnKSk7XG4gIGNvbnN0IHRvUGVyc29uYUlkID0gcGFyc2VJZChTdHJpbmcodG9Vc2VyPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZighZnJvbVBlcnNvbmFJZCB8fCAhdG9QZXJzb25hSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCB0b1BlcnNvbmFJZCwgZnJvbVBlcnNvbmFJZCk7XG5cbiAgaWYoIXJlbGF0aW9uc2hpcC5pc0ZyaWVuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG59O1xuXG5jb25zdCBmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uczogQ29udmVyc2F0aW9uVHlwZVtdID0gW11cbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHNlc3Npb25QZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy5wZXJzb25hSWQgfHwgJycpKTtcblxuICBpZighc2Vzc2lvblBlcnNvbmFJZCB8fCAhY29udmVyc2F0aW9ucy5sZW5ndGgpIHtcbiAgICByZXR1cm4gY29udmVyc2F0aW9ucztcbiAgfVxuXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBhd2FpdCBQcm9taXNlLmFsbChjb252ZXJzYXRpb25zLm1hcChhc3luYyAoY29udmVyc2F0aW9uKSA9PiB7XG4gICAgaWYoIWNvbnZlcnNhdGlvbj8uaXNEaXJlY3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRpY2lwYW50ID0gQXJyYXkuaXNBcnJheShjb252ZXJzYXRpb24/LnVzZXJzKVxuICAgICAgPyBjb252ZXJzYXRpb24udXNlcnMuZmluZCgodXNlcikgPT4gcGFyc2VJZChTdHJpbmcodXNlcj8udXNlcklkIHx8IHVzZXI/Ll9rZXkgfHwgJycpKSAhPT0gcGFyc2VJZChTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSkpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgcGFydGljaXBhbnRQZXJzb25hSWQgPSBwYXJzZUlkKFN0cmluZyhwYXJ0aWNpcGFudD8ucGVyc29uYUlkIHx8ICcnKSk7XG5cbiAgICBpZighcGFydGljaXBhbnRQZXJzb25hSWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAhKGF3YWl0IGlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkKGNvbnRleHQsIHBhcnRpY2lwYW50UGVyc29uYUlkLCBzZXNzaW9uUGVyc29uYUlkKSk7XG4gIH0pKTtcblxuICByZXR1cm4gY29udmVyc2F0aW9ucy5maWx0ZXIoKF9jb252ZXJzYXRpb24sIGluZGV4KSA9PiB2aXNpYmlsaXR5W2luZGV4XSk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5zdXJlQ29udmVyc2F0aW9uTWVzc2FnaW5nQWxsb3dlZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IGdldENvbnZlcnNhdGlvbkJ5SWQoY29udGV4dCwgY29udmVyc2F0aW9uSWQpO1xuXG4gIGlmKCFjb252ZXJzYXRpb24/LmNvbnZlcnNhdGlvbklkICYmICFjb252ZXJzYXRpb24/Ll9rZXkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIGlmKCFjb252ZXJzYXRpb24/LmlzRGlyZWN0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2Vzc2lvblVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBwYXJ0aWNpcGFudCA9IEFycmF5LmlzQXJyYXkoY29udmVyc2F0aW9uPy51c2VycylcbiAgICA/IGNvbnZlcnNhdGlvbi51c2Vycy5maW5kKCh1c2VyKSA9PiBwYXJzZUlkKFN0cmluZyh1c2VyPy51c2VySWQgfHwgdXNlcj8uX2tleSB8fCAnJykpICE9PSBzZXNzaW9uVXNlcklkKVxuICAgIDogbnVsbDtcbiAgY29uc3QgcGFydGljaXBhbnRVc2VySWQgPSBwYXJzZUlkKFN0cmluZyhwYXJ0aWNpcGFudD8udXNlcklkIHx8IHBhcnRpY2lwYW50Py5fa2V5IHx8ICcnKSk7XG5cbiAgaWYoIXNlc3Npb25Vc2VySWQgfHwgIXBhcnRpY2lwYW50VXNlcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICBhd2FpdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwKGNvbnRleHQsIHNlc3Npb25Vc2VySWQsIHBhcnRpY2lwYW50VXNlcklkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMgPSAob3B0aW9uczogQ29udmVyc2F0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uTGlzdEJ5VXNlciA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz8pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29udmVyc2F0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlQ29udmVyc2F0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7dXNlcklkfWA7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBcbiAgICBGT1IgYywgZSBJTiAxLi4xIE9VVEJPVU5EICR7dXNlckRvY0lkfSAke2hhc0NvbnZlcnNhdGlvbkNvbGxlY3Rpb259XG4gICAgICBTT1JUIGMuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBMRVQgdXNlcnMgPSAoXG4gICAgICAgIEZPUiB1LCB1YyBJTiAxLi4xIElOQk9VTkQgYy5faWQgJHtoYXNDb252ZXJzYXRpb25Db2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiB1Ll9pZCAhPSAke3VzZXJEb2NJZH1cbiAgICAgICAgICBSRVRVUk4gdVxuICAgICAgKVxuICAgICAgUkVUVVJOIE1FUkdFKGMsIHt1c2Vyc30pXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbnZlcnNhdGlvblR5cGVbXSlcbiAgICAudGhlbigoY29udmVyc2F0aW9ucykgPT4gZmlsdGVyQmxvY2tlZENvbnZlcnNhdGlvbnMoY29udGV4dCwgY29udmVyc2F0aW9ucykpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXJlY3RDb252ZXJzYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBmcm9tSWQsXG4gICAgdG9JZCxcbiAgICB0b1VzZXJcbiAgfTogRGlyZWN0Q29udmVyc2F0aW9uUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZCA9IHBhcnNlSWQoZnJvbUlkKTtcbiAgICBjb25zdCBmb3JtYXRUb0lkID0gcGFyc2VJZCh0b0lkKTtcbiAgICBhd2FpdCBlbnN1cmVEaXJlY3RDb252ZXJzYXRpb25GcmllbmRzaGlwKGNvbnRleHQsIGZvcm1hdEZyb21JZCwgZm9ybWF0VG9JZCk7XG4gICAgY29uc3QgdXNlcklkcyA9IFtmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWRdO1xuICAgIGNvbnN0IHNvcnRlZFVzZXJJZHMgPSBzb3J0SWRzKHVzZXJJZHMpO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IHVzZXI6IFVzZXJUeXBlID0gdG9Vc2VyIHx8IGF3YWl0IGdldFVzZXJCeUlkKGNvbnRleHQsIHt1c2VySWQ6IGZvcm1hdFRvSWR9KTtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBjID0gRE9DVU1FTlQoJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9KSBSRVRVUk4gY2A7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG5cbiAgICBpZihjb252ZXJzYXRpb24pIHtcbiAgICAgIHJldHVybiB7Li4uY29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRkRGlyZWN0Q29udmVyc2F0aW9uKGNvbnRleHQsIHtmcm9tSWQsIHRvSWQsIHRvVXNlcjogdXNlcn0pO1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBmb3JtYXRGcm9tSWQgPSBwYXJzZUlkKGZyb21JZCk7XG4gICAgY29uc3QgZm9ybWF0VG9JZCA9IHBhcnNlSWQodG9JZCk7XG4gICAgYXdhaXQgZW5zdXJlRGlyZWN0Q29udmVyc2F0aW9uRnJpZW5kc2hpcChjb250ZXh0LCBmb3JtYXRGcm9tSWQsIGZvcm1hdFRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyQnlJZChjb250ZXh0LCB7dXNlcklkOiBmb3JtYXRUb0lkfSk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBjcmVhdGVIYXNoKGBjb252ZXJzYXRpb25zLSR7c29ydGVkVXNlcklkcy5qb2luKCctJyl9YCwgbnVsbCk7XG5cbiAgICBjb25zdCBpbnNlcnQgPSB7XG4gICAgICBfa2V5OiBjb252ZXJzYXRpb25JZCxcbiAgICAgIGlzRGlyZWN0OiB0cnVlXG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVkQ29udmVyc2F0aW9uID0gYXdhaXQgYWRkSXRlbTxDb252ZXJzYXRpb25UeXBlPihjb250ZXh0LCAnY29udmVyc2F0aW9ucycsIGluc2VydCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh1c2VySWRzLm1hcCgodXNlcklkKSA9PiB7XG4gICAgICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNDb252ZXJzYXRpb24tJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBFZGdlVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IGB1c2Vycy8ke3VzZXJJZH1gLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7ZWRnZX0gSU4gaGFzQ29udmVyc2F0aW9uIFJFVFVSTiBORVdgO1xuICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoaW5zZXJ0RWRnZVF1ZXJ5KTtcbiAgICB9KSk7XG5cbiAgICByZXR1cm4gey4uLnVwZGF0ZWRDb252ZXJzYXRpb24sIHVzZXJzOiBbdXNlcl19O1xuICB9IGNhdGNoKGRhdGFiYXNlRXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGF0YWJhc2VFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29ubmVjdGlvblVzZXJMaXN0ID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbm5lY3Rpb25UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENvbm5lY3Rpb25Vc2VyTGlzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gWydjLnVzZXJJZCA9PSB1Ll9rZXknXTtcblxuICBpZighaW5jbHVkZUFsbCkge1xuICAgIGZpbHRlcnMucHVzaChgdS5fa2V5ICE9ICR7c2Vzc2lvblVzZXJJZH1gKTtcbiAgfVxuICBpZihpc0RpcmVjdCkge1xuICAgIGZpbHRlcnMucHVzaChgcC52ZXJ0aWNlc1swXS5pc0RpcmVjdCA9PSAke2lzRGlyZWN0fWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgdSwgZSxwIElOIDEuLjEgSU5CT1VORCAke2Bjb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uSWR9YH0gaGFzQ29udmVyc2F0aW9uXG4gICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidXNlcnNcIn1cbiAgICBGT1IgYyBJTiBjb25uZWN0aW9uc1xuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29ubmVjdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0Q29udmVyc2F0aW9uVXNlcnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmaWx0ZXJzOiBzdHJpbmdbXSA9IFsnYy51c2VySWQgPT0gdS5fa2V5J107XG5cbiAgaWYoIWluY2x1ZGVBbGwpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHUuX2tleSAhPSAke3Nlc3Npb25Vc2VySWR9YCk7XG4gIH1cbiAgaWYoaXNEaXJlY3QpIHtcbiAgICBmaWx0ZXJzLnB1c2goYHAudmVydGljZXNbMF0uaXNEaXJlY3QgPT0gJHtpc0RpcmVjdH1gKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHUsIGUscCBJTiAxLi4xIElOQk9VTkQgJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9IGhhc0NvbnZlcnNhdGlvblxuICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInVzZXJzXCJ9XG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBDb252ZXJzYXRpb25UeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJzYXRpb25CeUlkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldEl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7cGFyc2VJZChjb252ZXJzYXRpb25JZCl9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBjLl9pZCA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExFVCB1ID0gKFxuICAgICAgRk9SIGluVXNlciwgaW5FZGdlIElOIDEuLjEgSU5CT1VORCAke2NvbnZlcnNhdGlvbkRvY0lkfSBoYXNDb252ZXJzYXRpb25cbiAgICAgIFJFVFVSTiBpblVzZXJcbiAgICApXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHV9KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udmVyc2F0aW9uO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUNvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUNvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBpc0RpcmVjdCA9IGZhbHNlLFxuICAgIG5hbWVcbiAgfSA9IGNvbnZlcnNhdGlvbjtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgdXBkYXRlID0ge1xuICAgIGlzRGlyZWN0LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQgPSB7XG4gICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgX2tleTogZm9ybWF0Q29udmVyc2F0aW9uSWRcbiAgfTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCB7X2tleTogJHtmb3JtYXRDb252ZXJzYXRpb25JZH0gfVxuICAgIElOU0VSVCAke2luc2VydH1cbiAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgSU4gY29udmVyc2F0aW9ucyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiBjb252ZXJzYXRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXJUb0NvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFVzZXJUb0NvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZCA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBoYy5fdG8gPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGhjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoaGFzQ29udmVyc2F0aW9uRWRnZSkgPT4ge1xuICAgICAgaWYoISFoYXNDb252ZXJzYXRpb25FZGdlKSB7XG4gICAgICAgIHJldHVybiBoYXNDb252ZXJzYXRpb25FZGdlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0NvbnZlcnNhdGlvbicpO1xuICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9LSR7Zm9ybWF0VXNlcklkfWApO1xuXG4gICAgICBjb25zdCBlZGdlOiBDb252ZXJzYXRpb25UeXBlID0ge1xuICAgICAgICBfZnJvbTogdXNlckRvY0lkLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogY29udmVyc2F0aW9uRG9jSWQsXG4gICAgICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb25cbiAgICAgICAgLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAgIC50aGVuKCgpID0+IGVkZ2UpO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXJGcm9tQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgdXNlcklkXG4gIH06IFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IGB1c2Vycy8ke2Zvcm1hdFVzZXJJZH1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGhjIElOIGhhc0NvbnZlcnNhdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke3VzZXJEb2NJZH0gJiYgaGMuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFTU9WRSBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuIl0sIm5hbWVzIjpbImNsb25lRGVlcCIsImNyZWF0ZUhhc2giLCJwYXJzZUlkIiwiYXFsIiwibGl0ZXJhbCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImdldExpbWl0Iiwic29ydElkcyIsInVzZURiIiwiYWRkSXRlbSIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsImlzUGVyc29uYVZpc2liaWxpdHlCbG9ja2VkIiwiZ2V0VXNlckJ5SWQiLCJldmVudENhdGVnb3J5IiwiaGFzQ29udmVyc2F0aW9uQ29sbGVjdGlvbiIsImVuc3VyZURpcmVjdENvbnZlcnNhdGlvbkZyaWVuZHNoaXAiLCJjb250ZXh0IiwiZnJvbVVzZXJJZCIsInRvVXNlcklkIiwiZnJvbVVzZXIiLCJ0b1VzZXIiLCJQcm9taXNlIiwiYWxsIiwidXNlcklkIiwiZnJvbVBlcnNvbmFJZCIsIlN0cmluZyIsInBlcnNvbmFJZCIsInRvUGVyc29uYUlkIiwiRXJyb3IiLCJJTlZBTElEX0FVVEhFTlRJQ0FUSU9OIiwicmVsYXRpb25zaGlwIiwiaXNGcmllbmQiLCJmaWx0ZXJCbG9ja2VkQ29udmVyc2F0aW9ucyIsImNvbnZlcnNhdGlvbnMiLCJzZXNzaW9uUGVyc29uYUlkIiwic2Vzc2lvbiIsImxlbmd0aCIsInZpc2liaWxpdHkiLCJtYXAiLCJjb252ZXJzYXRpb24iLCJpc0RpcmVjdCIsInBhcnRpY2lwYW50IiwiQXJyYXkiLCJpc0FycmF5IiwidXNlcnMiLCJmaW5kIiwidXNlciIsIl9rZXkiLCJwYXJ0aWNpcGFudFBlcnNvbmFJZCIsImZpbHRlciIsIl9jb252ZXJzYXRpb24iLCJpbmRleCIsImVuc3VyZUNvbnZlcnNhdGlvbk1lc3NhZ2luZ0FsbG93ZWQiLCJjb252ZXJzYXRpb25JZCIsImdldENvbnZlcnNhdGlvbkJ5SWQiLCJzZXNzaW9uVXNlcklkIiwicGFydGljaXBhbnRVc2VySWQiLCJwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwibGltaXQiLCJnZXRDb252ZXJzYXRpb25MaXN0QnlVc2VyIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwidXNlckRvY0lkIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsImdldERpcmVjdENvbnZlcnNhdGlvbiIsImZyb21JZCIsInRvSWQiLCJmb3JtYXRGcm9tSWQiLCJmb3JtYXRUb0lkIiwidXNlcklkcyIsInNvcnRlZFVzZXJJZHMiLCJqb2luIiwibmV4dCIsImFkZERpcmVjdENvbnZlcnNhdGlvbiIsImRhdGFiYXNlRXJyb3IiLCJpbnNlcnQiLCJ1cGRhdGVkQ29udmVyc2F0aW9uIiwiZWRnZUlkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiYWRkZWQiLCJEYXRlIiwibm93IiwiaW5zZXJ0RWRnZVF1ZXJ5IiwiZ2V0Q29ubmVjdGlvblVzZXJMaXN0IiwiaW5jbHVkZUFsbCIsImZpbHRlcnMiLCJwdXNoIiwiZ2V0Q29udmVyc2F0aW9uVXNlcnMiLCJzZXNzaW9uSWQiLCJzZXNzaW9uRG9jSWQiLCJjb252ZXJzYXRpb25Eb2NJZCIsInVwZGF0ZUNvbnZlcnNhdGlvbiIsIm5hbWUiLCJmb3JtYXRDb252ZXJzYXRpb25JZCIsInVwZGF0ZSIsImFkZFVzZXJUb0NvbnZlcnNhdGlvbiIsImZvcm1hdFVzZXJJZCIsImhhc0NvbnZlcnNhdGlvbkVkZ2UiLCJlZGdlQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJzYXZlIiwicmV0dXJuTmV3IiwiZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyw2QkFBNkI7QUFDckQsU0FBUUMsVUFBVSxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQ2pFLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBQ3JDLFNBQVFDLFVBQVUsUUFBTywwQkFBMEI7QUFDbkQsU0FBUUMsUUFBUSxRQUFPLDZCQUE2QjtBQUNwRCxTQUFRQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNuRSxTQUFRQyxPQUFPLFFBQU8sWUFBWTtBQUNsQyxTQUFRQywyQkFBMkIsRUFBRUMsMEJBQTBCLFFBQU8sZ0JBQWdCO0FBQ3RGLFNBQVFDLFdBQVcsUUFBTyxhQUFhO0FBZ0J2QyxNQUFNQyxnQkFBZ0I7QUFDdEIsTUFBTUMsNEJBQTRCWCxRQUFRO0FBRTFDLE1BQU1ZLHFDQUFxQyxPQUN6Q0MsU0FDQUMsWUFDQUM7SUFFQSxNQUFNLENBQUNDLFVBQVVDLE9BQU8sR0FBRyxNQUFNQyxRQUFRQyxHQUFHLENBQUM7UUFDM0NWLFlBQVlJLFNBQVM7WUFBQ08sUUFBUU47UUFBVTtRQUN4Q0wsWUFB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
|
package/lib/actions/crm.js
CHANGED
|
@@ -925,4 +925,4 @@ export const getCustomerNotificationsByUser = (context, userId)=>{
|
|
|
925
925
|
return useDb(context.databaseName).query(query).then((cursor)=>cursor.all());
|
|
926
926
|
};
|
|
927
927
|
|
|
928
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL2NybS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNi1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkLCBwYXJzZVBob25lLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2lzQWRtaW5Vc2VyfSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuaW1wb3J0IHtzZXNTZW5kfSBmcm9tICcuL2VtYWlsLmpzJztcblxuaW1wb3J0IHR5cGUge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBDdXN0b21lck5vdGlmaWNhdGlvblR5cGUsXG4gIEN1c3RvbWVyT3JkZXJUeXBlLFxuICBDcm1DYW1wYWlnbklucHV0LFxuICBDcm1DYW1wYWlnblR5cGUsXG4gIENybUNvbnRhY3RGaWx0ZXIsXG4gIENybUZvcm1TdWJtaXNzaW9uSW5wdXQsXG4gIENybUZvcm1TdWJtaXNzaW9uVHlwZSxcbiAgTWFpbGluZ0xpc3RUeXBlLFxuICBQdWJsaWNTdXBwb3J0VGlja2V0RmVlZCxcbiAgUHVibGljU3VwcG9ydFRpY2tldElucHV0LFxuICBTaG9waWZ5Q3VzdG9tZXJPcmRlcklucHV0LFxuICBTdXBwb3J0VGlja2V0RXZlbnRUeXBlLFxuICBTdXBwb3J0VGlja2V0TWVzc2FnZVR5cGUsXG4gIFN1cHBvcnRUaWNrZXRTdGF0dXMsXG4gIFN1cHBvcnRUaWNrZXRUeXBlRGF0YVxufSBmcm9tICcuLi90eXBlcy9jcm0udHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1VzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5cbmNvbnN0IG5vdyA9ICgpOiBudW1iZXIgPT4gRGF0ZS5ub3coKTtcbmNvbnN0IGNvbGxlY3Rpb24gPSAobmFtZTogc3RyaW5nKSA9PiBsaXRlcmFsKG5hbWUpO1xuY29uc3QgZG9jS2V5ID0gKHZhbHVlID0gJycpOiBzdHJpbmcgPT4gcGFyc2VJZChTdHJpbmcodmFsdWUpKTtcbmNvbnN0IGRvY0lkID0gKGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcsIGtleSA9ICcnKTogc3RyaW5nID0+IGAke2NvbGxlY3Rpb25OYW1lfS8ke2RvY0tleShrZXkpfWA7XG5jb25zdCBleHRlcm5hbEtleSA9IChwcmVmaXg6IHN0cmluZywgaWQgPSAnJyk6IHN0cmluZyA9PiBjcmVhdGVIYXNoKGAke3ByZWZpeH0tJHtTdHJpbmcoaWQpfWAsIG51bGwpO1xuY29uc3QgY2xlYW5TdHJpbmcgPSAodmFsdWU6IHVua25vd24sIGxlbmd0aCA9IDY0MCk6IHN0cmluZyA9PiBwYXJzZVN0cmluZyhTdHJpbmcodmFsdWUgfHwgJycpLCBsZW5ndGgpO1xuY29uc3QgY2xlYW5FeHRlcm5hbElkID0gKHZhbHVlOiB1bmtub3duLCBsZW5ndGggPSAzMjApOiBzdHJpbmcgPT4gU3RyaW5nKHZhbHVlIHx8ICcnKS50cmltKCkuc2xpY2UoMCwgbGVuZ3RoKTtcbmNvbnN0IGVuc3VyZURvY3VtZW50Q29sbGVjdGlvbiA9IGFzeW5jIChkYXRhYmFzZTogUmV0dXJuVHlwZTx0eXBlb2YgdXNlRGI+LCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgdGFyZ2V0ID0gZGF0YWJhc2UuY29sbGVjdGlvbihuYW1lKTtcbiAgaWYoYXdhaXQgdGFyZ2V0LmV4aXN0cygpKSByZXR1cm47XG4gIHRyeSB7XG4gICAgYXdhaXQgZGF0YWJhc2UuY3JlYXRlQ29sbGVjdGlvbihuYW1lKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKCFhd2FpdCB0YXJnZXQuZXhpc3RzKCkpIHRocm93IGVycm9yO1xuICB9XG59O1xuY29uc3QgZW5zdXJlRWRnZUNvbGxlY3Rpb24gPSBhc3luYyAoZGF0YWJhc2U6IFJldHVyblR5cGU8dHlwZW9mIHVzZURiPiwgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHRhcmdldCA9IGRhdGFiYXNlLmNvbGxlY3Rpb24obmFtZSk7XG4gIGlmKGF3YWl0IHRhcmdldC5leGlzdHMoKSkgcmV0dXJuO1xuICB0cnkge1xuICAgIGF3YWl0IGRhdGFiYXNlLmNyZWF0ZUVkZ2VDb2xsZWN0aW9uKG5hbWUpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoIWF3YWl0IHRhcmdldC5leGlzdHMoKSkgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IHJlcXVpcmVDcm1BZG1pbiA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogdm9pZCA9PiB7XG4gIGlmKCFpc0FkbWluVXNlcihjb250ZXh0LnNlc3Npb24gYXMgYW55KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYWRtaW5pc3RyYXRvcl9hY2Nlc3NfcmVxdWlyZWQnKTtcbiAgfVxufTtcbmV4cG9ydCBjb25zdCByZXF1aXJlQ3JtQWRtaW5pc3RyYXRvciA9IHJlcXVpcmVDcm1BZG1pbjtcblxuY29uc3QgYWxsb3dlZENvbnRhY3RGaWVsZHMgPSBuZXcgU2V0KFsnZW1haWwnLCAnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJywgJ3Bob25lJywgJ21hcmtldGluZ0NvbnNlbnRTb3VyY2UnLCAnY3JtU291cmNlJ10pO1xuY29uc3Qgc3VwcG9ydFByaW9yaXRpZXMgPSBuZXcgU2V0KFsnbG93JywgJ25vcm1hbCcsICdoaWdoJywgJ3VyZ2VudCddKTtcbmNvbnN0IHN1cHBvcnRTdGF0dXNlcyA9IG5ldyBTZXQoWydzdWJtaXR0ZWQnLCAnaW5fcHJvZ3Jlc3MnLCAnZG9uZScsICdjb21wbGV0ZWQnXSk7XG5jb25zdCBzdXBwb3J0VHlwZXMgPSBuZXcgU2V0KFsnZGVsaXZlcnlfaXNzdWUnLCAncmVmdW5kX3JlcXVlc3QnLCAnYnVnX3JlcG9ydCcsICdhY2NvdW50X2lzc3VlJywgJ2dlbmVyYWxfc3VwcG9ydCddKTtcbmNvbnN0IGVtYWlsUGF0dGVybiA9IC9eW15cXHNAXStAW15cXHNAXStcXC5bXlxcc0BdKyQvdTtcbmNvbnN0IGVzY2FwZUh0bWwgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB2YWx1ZS5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7JykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpO1xuY29uc3Qgc2FuaXRpemVIdG1sID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IFN0cmluZyh2YWx1ZSB8fCAnJylcbiAgLnJlcGxhY2UoLzwoc2NyaXB0fGlmcmFtZXxvYmplY3R8ZW1iZWQpXFxiW14+XSo+W1xcc1xcU10qPzxcXC9cXDE+L2dpLCAnJylcbiAgLnJlcGxhY2UoL1xcc29uXFx3K1xccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccz5dKykvZ2ksICcnKTtcbmNvbnN0IHNhbml0aXplQ3NzID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IFN0cmluZyh2YWx1ZSB8fCAnJylcbiAgLnJlcGxhY2UoLzxcXC8/c3R5bGVcXGJbXj5dKj4vZ2ksICcnKVxuICAucmVwbGFjZSgvQGltcG9ydFxccytbXjtdKzs/L2dpLCAnJylcbiAgLnJlcGxhY2UoL3VybFxccypcXChcXHMqKFsnXCJdPylqYXZhc2NyaXB0OlteKV0rXFwpL2dpLCAnJyk7XG5jb25zdCBodG1sVG9UZXh0ID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4gdmFsdWUucmVwbGFjZSgvPFtePl0rPi9nLCAnICcpLnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG5jb25zdCBjaHVuayA9IDxUPihpdGVtczogcmVhZG9ubHkgVFtdLCBzaXplOiBudW1iZXIpOiBUW11bXSA9PiB7XG4gIGNvbnN0IGdyb3VwczogVFtdW10gPSBbXTtcbiAgZm9yKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaXRlbXMubGVuZ3RoOyBpbmRleCArPSBzaXplKSBncm91cHMucHVzaChpdGVtcy5zbGljZShpbmRleCwgaW5kZXggKyBzaXplKSk7XG4gIHJldHVybiBncm91cHM7XG59O1xuXG5leHBvcnQgY29uc3Qgc3VibWl0Q3JtRm9ybSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IENybUZvcm1TdWJtaXNzaW9uSW5wdXRcbik6IFByb21pc2U8Q3JtRm9ybVN1Ym1pc3Npb25UeXBlPiA9PiB7XG4gIGlmKHR5cGVvZiBpbnB1dD8ubWFya2V0aW5nT3B0SW4gIT09ICdib29sZWFuJykgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9tYXJrZXRpbmdPcHRJbicpO1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGlucHV0LmVtYWlsLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJhd1Bob25lID0gY2xlYW5TdHJpbmcoaW5wdXQucGhvbmUsIDgwKTtcbiAgY29uc3QgcGhvbmUgPSByYXdQaG9uZSA/IChwYXJzZVBob25lKHJhd1Bob25lKSB8fCByYXdQaG9uZSkgOiAnJztcbiAgaWYoIWVtYWlsICYmICFwaG9uZSkgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9lbWFpbF9vcl9waG9uZScpO1xuXG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBhd2FpdCBlbnN1cmVEb2N1bWVudENvbGxlY3Rpb24oZGF0YWJhc2UsIENPTExFQ1RJT05TLkNSTV9GT1JNX1NVQk1JU1NJT05TKTtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHNvdXJjZSA9IGNsZWFuU3RyaW5nKGlucHV0LnNvdXJjZSB8fCBpbnB1dC5mb3JtSWQgfHwgJ2Zvcm0nLCAxNjApO1xuICBjb25zdCB2YWx1ZXMgPSBpbnB1dC52YWx1ZXMgfHwge307XG4gIGNvbnN0IGZpcnN0TmFtZSA9IGNsZWFuU3RyaW5nKGlucHV0LmZpcnN0TmFtZSB8fCB2YWx1ZXMuZmlyc3ROYW1lLCAxNjApO1xuICBjb25zdCBsYXN0TmFtZSA9IGNsZWFuU3RyaW5nKGlucHV0Lmxhc3ROYW1lIHx8IHZhbHVlcy5sYXN0TmFtZSwgMTYwKTtcbiAgY29uc3QgZ2VuZXJhdGVkVXNlcktleSA9IGNyZWF0ZUhhc2goZW1haWwgfHwgcGhvbmUsIG51bGwpO1xuICBjb25zdCBjb25zZW50ID0gaW5wdXQubWFya2V0aW5nT3B0SW5cbiAgICA/IHttYXJrZXRpbmdPcHRJbkF0OiB0aW1lc3RhbXAsIG1hcmtldGluZ09wdE91dEF0OiBudWxsfVxuICAgIDoge21hcmtldGluZ09wdE91dEF0OiB0aW1lc3RhbXB9O1xuICBjb25zdCB1c2VySW5zZXJ0ID0ge1xuICAgIF9rZXk6IGdlbmVyYXRlZFVzZXJLZXksXG4gICAgYWN0aXZlOiBmYWxzZSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGVtYWlsLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBtYWlsaW5nTGlzdDogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogc291cmNlLFxuICAgIG1hcmtldGluZ09wdEluOiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHBob25lLFxuICAgIHR5cGU6ICdjcm1Db250YWN0JyxcbiAgICB1c2VyQWNjZXNzOiAwLFxuICAgIHVzZXJJZDogZ2VuZXJhdGVkVXNlcktleSxcbiAgICB2ZXJpZmllZEVtYWlsOiBmYWxzZSxcbiAgICB2ZXJpZmllZFBob25lOiBmYWxzZSxcbiAgICAuLi5jb25zZW50XG4gIH07XG4gIGNvbnN0IHVzZXJVcGRhdGUgPSB7XG4gICAgLi4uKGVtYWlsID8ge2VtYWlsfSA6IHt9KSxcbiAgICAuLi4oZmlyc3ROYW1lID8ge2ZpcnN0TmFtZX0gOiB7fSksXG4gICAgLi4uKGxhc3ROYW1lID8ge2xhc3ROYW1lfSA6IHt9KSxcbiAgICAuLi4ocGhvbmUgPyB7cGhvbmV9IDoge30pLFxuICAgIG1haWxpbmdMaXN0OiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiBzb3VyY2UsXG4gICAgbWFya2V0aW5nT3B0SW46IGlucHV0Lm1hcmtldGluZ09wdEluLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgLi4uY29uc2VudFxuICB9O1xuICBjb25zdCB1c2VyID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgIExFVCBleGlzdGluZyA9IEZJUlNUKFxuICAgICAgRk9SIHVzZXIgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgICAgRklMVEVSICgke2VtYWlsfSAhPSBcIlwiICYmIExPV0VSKHVzZXIuZW1haWwgfHwgXCJcIikgPT0gJHtlbWFpbH0pXG4gICAgICAgICAgfHwgKCR7cGhvbmV9ICE9IFwiXCIgJiYgdXNlci5waG9uZSA9PSAke3Bob25lfSlcbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gdXNlclxuICAgIClcbiAgICBMRVQgdXNlcktleSA9IGV4aXN0aW5nID8gZXhpc3RpbmcuX2tleSA6ICR7Z2VuZXJhdGVkVXNlcktleX1cbiAgICBVUFNFUlQge19rZXk6IHVzZXJLZXl9XG4gICAgSU5TRVJUIE1FUkdFKCR7dXNlckluc2VydH0sIHtfa2V5OiB1c2VyS2V5LCB1c2VySWQ6IHVzZXJLZXl9KVxuICAgIFVQREFURSAke3VzZXJVcGRhdGV9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlIHwgbnVsbDtcbiAgY29uc3QgdXNlcklkID0gZG9jS2V5KFN0cmluZyh1c2VyPy5fa2V5IHx8IHVzZXI/LnVzZXJJZCB8fCBnZW5lcmF0ZWRVc2VyS2V5KSk7XG5cbiAgY29uc3Qgc3VibWlzc2lvbklkID0gY3JlYXRlSGFzaChgY3JtLXN1Ym1pc3Npb24tJHt0aW1lc3RhbXB9LSR7ZW1haWx9LSR7cGhvbmV9YCwgbnVsbCk7XG4gIGNvbnN0IHN1Ym1pc3Npb24gPSB7XG4gICAgX2tleTogc3VibWlzc2lvbklkLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgZW1haWwsXG4gICAgZm9ybUlkOiBjbGVhblN0cmluZyhpbnB1dC5mb3JtSWQsIDE2MCksXG4gICAgbWFya2V0aW5nT3B0SW46IGlucHV0Lm1hcmtldGluZ09wdEluLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcGhvbmUsXG4gICAgc291cmNlLFxuICAgIHN1Ym1pc3Npb25JZCxcbiAgICB1c2VySWQsXG4gICAgdmFsdWVzXG4gIH07XG4gIGNvbnN0IHNhdmVkID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgIElOU0VSVCAke3N1Ym1pc3Npb259IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DUk1fRk9STV9TVUJNSVNTSU9OUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gIHJldHVybiBzYXZlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDcm1Gb3JtU3VibWlzc2lvbnMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8Q3JtRm9ybVN1Ym1pc3Npb25UeXBlW10+ID0+IHtcbiAgcmVxdWlyZUNybUFkbWluKGNvbnRleHQpO1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgcmV0dXJuIChhc3luYyAoKSA9PiB7XG4gICAgaWYoIWF3YWl0IGRhdGFiYXNlLmNvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0ZPUk1fU1VCTUlTU0lPTlMpLmV4aXN0cygpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICAgIEZPUiBzdWJtaXNzaW9uIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DUk1fRk9STV9TVUJNSVNTSU9OUyl9XG4gICAgICAgIFNPUlQgc3VibWlzc2lvbi5hZGRlZCBERVNDXG4gICAgICAgIExJTUlUIDUwMFxuICAgICAgICBSRVRVUk4gc3VibWlzc2lvblxuICAgIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgfSkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDcm1Db250YWN0cyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmaWx0ZXI6IENybUNvbnRhY3RGaWx0ZXIgPSB7fSk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICByZXF1aXJlQ3JtQWRtaW4oY29udGV4dCk7XG4gIGNvbnN0IHNlYXJjaCA9IGNsZWFuU3RyaW5nKGZpbHRlci5zZWFyY2gsIDMyMCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgZmllbGQgPSBhbGxvd2VkQ29udGFjdEZpZWxkcy5oYXMoZmlsdGVyLmZpZWxkIHx8ICcnKSA/IFN0cmluZyhmaWx0ZXIuZmllbGQpIDogJyc7XG4gIGNvbnN0IHZhbHVlID0gY2xlYW5TdHJpbmcoZmlsdGVyLnZhbHVlLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG9wdGVkSW5Pbmx5ID0gZmlsdGVyLm9wdGVkSW5Pbmx5ICE9PSBmYWxzZTtcbiAgY29uc3Qgb3BlcmF0b3IgPSBbJ2NvbnRhaW5zJywgJ2VxdWFscycsICdleGlzdHMnXS5pbmNsdWRlcyhmaWx0ZXIub3BlcmF0b3IgfHwgJycpID8gZmlsdGVyLm9wZXJhdG9yIDogJ2NvbnRhaW5zJztcbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgRk9SIHVzZXIgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgIEZJTFRFUiAkeyFvcHRlZEluT25seX0gfHwgdXNlci5tYXJrZXRpbmdPcHRJbiA9PSB0cnVlXG4gICAgICBGSUxURVIgJHshc2VhcmNofSB8fCBDT05UQUlOUyhMT1dFUihDT05DQVRfU0VQQVJBVE9SKFwiIFwiLCB1c2VyLmZpcnN0TmFtZSwgdXNlci5sYXN0TmFtZSwgdXNlci5lbWFpbCwgdXNlci5waG9uZSkpLCAke3NlYXJjaH0pXG4gICAgICBGSUxURVIgJHshZmllbGR9IHx8ICgke29wZXJhdG9yID09PSAnZXhpc3RzJ31cbiAgICAgICAgPyBIQVModXNlciwgJHtmaWVsZH0pXG4gICAgICAgIDogKCR7b3BlcmF0b3IgPT09ICdlcXVhbHMnfSA/IExPV0VSKFRPX1NUUklORyh1c2VyWyR7ZmllbGR9XSkpID09ICR7dmFsdWV9IDogQ09OVEFJTlMoTE9XRVIoVE9fU1RSSU5HKHVzZXJbJHtmaWVsZH1dKSksICR7dmFsdWV9KSkpXG4gICAgICBTT1JUIHVzZXIuYWRkZWQgREVTQ1xuICAgICAgTElNSVQgMTAwMFxuICAgICAgUkVUVVJOIE1FUkdFKHVzZXIsIHtjcm1Tb3VyY2U6IHVzZXIubWFya2V0aW5nQ29uc2VudFNvdXJjZX0pXG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kQ3JtQ2FtcGFpZ24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBDcm1DYW1wYWlnbklucHV0XG4pOiBQcm9taXNlPENybUNhbXBhaWduVHlwZT4gPT4ge1xuICByZXF1aXJlQ3JtQWRtaW4oY29udGV4dCk7XG4gIGNvbnN0IHN1YmplY3QgPSBjbGVhblN0cmluZyhpbnB1dC5zdWJqZWN0LCAzMjApO1xuICBjb25zdCBib2R5SHRtbCA9IHNhbml0aXplSHRtbChpbnB1dC5odG1sKTtcbiAgY29uc3QgY3NzID0gc2FuaXRpemVDc3MoaW5wdXQuY3NzKTtcbiAgaWYoIXN1YmplY3QgfHwgIWJvZHlIdG1sKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX2NhbXBhaWduX2NvbnRlbnQnKTtcblxuICBjb25zdCBjYW5kaWRhdGVzID0gYXdhaXQgZ2V0Q3JtQ29udGFjdHMoY29udGV4dCwgey4uLmlucHV0LmZpbHRlciwgb3B0ZWRJbk9ubHk6IHRydWV9KTtcbiAgY29uc3Qgc2VsZWN0ZWRJZHMgPSBuZXcgU2V0KChpbnB1dC51c2VySWRzIHx8IFtdKS5tYXAoKGlkKSA9PiBkb2NLZXkoaWQpKSk7XG4gIGNvbnN0IHJlY2lwaWVudHMgPSBjYW5kaWRhdGVzLmZpbHRlcigodXNlcikgPT5cbiAgICBCb29sZWFuKHVzZXIuZW1haWwpICYmICghc2VsZWN0ZWRJZHMuc2l6ZSB8fCBzZWxlY3RlZElkcy5oYXMoZG9jS2V5KHVzZXIudXNlcklkIHx8IHVzZXIuX2tleSkpKSk7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBjYW1wYWlnbklkID0gY3JlYXRlSGFzaChgY3JtLWNhbXBhaWduLSR7dGltZXN0YW1wfS0ke3N1YmplY3R9YCwgbnVsbCk7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBjb25zdCBjYW1wYWlnbiA9IHtcbiAgICBfa2V5OiBjYW1wYWlnbklkLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgY2FtcGFpZ25JZCxcbiAgICBjc3MsXG4gICAgZmFpbGVkQ291bnQ6IDAsXG4gICAgaHRtbDogYm9keUh0bWwsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICByZWNpcGllbnRDb3VudDogcmVjaXBpZW50cy5sZW5ndGgsXG4gICAgc2VudENvdW50OiAwLFxuICAgIHN0YXR1czogJ3NlbmRpbmcnLFxuICAgIHN1YmplY3RcbiAgfTtcbiAgYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYElOU0VSVCAke2NhbXBhaWdufSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1JNX0NBTVBBSUdOUyl9YCk7XG5cbiAgbGV0IGZhaWxlZENvdW50ID0gMDtcbiAgbGV0IHNlbnRDb3VudCA9IDA7XG4gIGZvcihjb25zdCByZWNpcGllbnRzQmF0Y2ggb2YgY2h1bmsocmVjaXBpZW50cywgNTApKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlc1NlbmQoe1xuICAgICAgICBEZXN0aW5hdGlvbjoge0JjY0FkZHJlc3NlczogcmVjaXBpZW50c0JhdGNoLm1hcCgocmVjaXBpZW50KSA9PiBTdHJpbmcocmVjaXBpZW50LmVtYWlsKSl9LFxuICAgICAgICBNZXNzYWdlOiB7XG4gICAgICAgICAgQm9keToge0h0bWw6IHtEYXRhOiBgPHN0eWxlPiR7Y3NzfTwvc3R5bGU+JHtib2R5SHRtbH1gfSwgVGV4dDoge0RhdGE6IGh0bWxUb1RleHQoYm9keUh0bWwpfX0sXG4gICAgICAgICAgU3ViamVjdDoge0RhdGE6IHN1YmplY3R9XG4gICAgICAgIH0sXG4gICAgICAgIFNvdXJjZTogYFwiJHtjb250ZXh0LmNvbmZpZz8uZGV0YWlscz8uc3VwcG9ydE5hbWUgfHwgJ1JlYWt0b3InfVwiIDwke2NvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5zdXBwb3J0RW1haWwgfHwgJ3N1cHBvcnRAcmVha3Rvci5pbyd9PmBcbiAgICAgIH0pO1xuICAgICAgc2VudENvdW50ICs9IHJlY2lwaWVudHNCYXRjaC5sZW5ndGg7XG4gICAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICAgIGZhaWxlZENvdW50ICs9IHJlY2lwaWVudHNCYXRjaC5sZW5ndGg7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHsuLi5jYW1wYWlnbiwgZmFpbGVkQ291bnQsIHNlbnRBdDogbm93KCksIHNlbnRDb3VudCwgc3RhdHVzOiBmYWlsZWRDb3VudCA/IChzZW50Q291bnQgPyAncGFydGlhbCcgOiAnZmFpbGVkJykgOiAnc2VudCd9O1xuICBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgVVBEQVRFICR7Y2FtcGFpZ25JZH0gV0lUSCAke3tcbiAgICAgIGZhaWxlZENvdW50OiByZXN1bHQuZmFpbGVkQ291bnQsXG4gICAgICBtb2RpZmllZDogcmVzdWx0LnNlbnRBdCxcbiAgICAgIHNlbnRBdDogcmVzdWx0LnNlbnRBdCxcbiAgICAgIHNlbnRDb3VudDogcmVzdWx0LnNlbnRDb3VudCxcbiAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1c1xuICAgIH19IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DUk1fQ0FNUEFJR05TKX1cbiAgYCk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBzYXZlRWRnZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZWRnZUNvbGxlY3Rpb246IHN0cmluZyxcbiAgZWRnZUtleTogc3RyaW5nLFxuICBmcm9tOiBzdHJpbmcsXG4gIHRvOiBzdHJpbmcsXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge31cbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgZWRnZSA9IHtcbiAgICBfZnJvbTogZnJvbSxcbiAgICBfa2V5OiBlZGdlS2V5LFxuICAgIF90bzogdG8sXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIC4uLmRhdGFcbiAgfTtcbiAgY29uc3QgcXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIFVQU0VSVCB7X2tleTogJHtlZGdlS2V5fX1cbiAgICBJTlNFUlQgJHtlZGdlfVxuICAgIFVQREFURSAke2RhdGF9IElOICR7Y29sbGVjdGlvbihlZGdlQ29sbGVjdGlvbil9XG4gIGA7XG5cbiAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNYWlsaW5nTGlzdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFBhcnRpYWw8TWFpbGluZ0xpc3RUeXBlPlxuKTogUHJvbWlzZTxNYWlsaW5nTGlzdFR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IG1haWxpbmdMaXN0SWQgPSBkb2NLZXkoU3RyaW5nKGlucHV0Py5tYWlsaW5nTGlzdElkIHx8IGNyZWF0ZUhhc2goYG1haWxpbmctbGlzdC0ke2lucHV0Py5uYW1lfS0ke3RpbWVzdGFtcH1gKSkpO1xuICBjb25zdCBtYWlsaW5nTGlzdCA9IHtcbiAgICBfa2V5OiBtYWlsaW5nTGlzdElkLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgY3JlYXRlZEJ5VXNlcklkOiBkb2NLZXkoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpLFxuICAgIGRlc2NyaXB0aW9uOiBjbGVhblN0cmluZyhpbnB1dD8uZGVzY3JpcHRpb24sIDIwMDApLFxuICAgIG1haWxpbmdMaXN0SWQsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBuYW1lOiBjbGVhblN0cmluZyhpbnB1dD8ubmFtZSwgMTYwKSxcbiAgICBzdGF0dXM6IGlucHV0Py5zdGF0dXMgfHwgJ2FjdGl2ZSdcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgVVBTRVJUIHtfa2V5OiAke21haWxpbmdMaXN0SWR9fVxuICAgIElOU0VSVCAke21haWxpbmdMaXN0fVxuICAgIFVQREFURSAke3tcbiAgICAgIGRlc2NyaXB0aW9uOiBtYWlsaW5nTGlzdC5kZXNjcmlwdGlvbixcbiAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICBuYW1lOiBtYWlsaW5nTGlzdC5uYW1lLFxuICAgICAgc3RhdHVzOiBtYWlsaW5nTGlzdC5zdGF0dXNcbiAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuTUFJTElOR19MSVNUUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWFpbGluZ0xpc3RzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPE1haWxpbmdMaXN0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBsaXN0IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTKX1cbiAgICAgIEZJTFRFUiBsaXN0LnN0YXR1cyAhPSBcImFyY2hpdmVkXCJcbiAgICAgIFNPUlQgbGlzdC5hZGRlZCBERVNDXG4gICAgICBSRVRVUk4gbGlzdFxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyVG9NYWlsaW5nTGlzdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIG1haWxpbmdMaXN0SWQ6IHN0cmluZyxcbiAgc291cmNlID0gJ21hbnVhbCdcbik6IFByb21pc2U8TWFpbGluZ0xpc3RUeXBlIHwgbnVsbD4gPT4ge1xuICBjb25zdCB1c2VyS2V5ID0gZG9jS2V5KHVzZXJJZCk7XG4gIGNvbnN0IGxpc3RLZXkgPSBkb2NLZXkobWFpbGluZ0xpc3RJZCk7XG4gIGNvbnN0IGVkZ2VLZXkgPSBjcmVhdGVIYXNoKGBoYXNNYWlsaW5nTGlzdC0ke3VzZXJLZXl9LSR7bGlzdEtleX1gKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19NQUlMSU5HX0xJU1QsXG4gICAgZWRnZUtleSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdXNlcktleSksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuTUFJTElOR19MSVNUUywgbGlzdEtleSksXG4gICAge1xuICAgICAgYWRkZWRCeVVzZXJJZDogZG9jS2V5KFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICAgIHNvdXJjZTogY2xlYW5TdHJpbmcoc291cmNlLCA4MCksXG4gICAgICBzdGF0dXM6ICdhY3RpdmUnXG4gICAgfVxuICApO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSlcbiAgICAucXVlcnkoYXFsYFJFVFVSTiBET0NVTUVOVCgke2RvY0lkKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMsIGxpc3RLZXkpfSlgKVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVVzZXJGcm9tTWFpbGluZ0xpc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBtYWlsaW5nTGlzdElkOiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB1c2VyS2V5ID0gZG9jS2V5KHVzZXJJZCk7XG4gIGNvbnN0IGxpc3RLZXkgPSBkb2NLZXkobWFpbGluZ0xpc3RJZCk7XG4gIGNvbnN0IGVkZ2VLZXkgPSBjcmVhdGVIYXNoKGBoYXNNYWlsaW5nTGlzdC0ke3VzZXJLZXl9LSR7bGlzdEtleX1gKTtcbiAgY29uc3QgdXBkYXRlID0ge1xuICAgIG1vZGlmaWVkOiBub3coKSxcbiAgICByZW1vdmVkQXQ6IG5vdygpLFxuICAgIHN0YXR1czogJ3JlbW92ZWQnXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIFVQREFURSAke2VkZ2VLZXl9IFdJVEggJHt1cGRhdGV9IElOICR7Y29sbGVjdGlvbihFREdFUy5IQVNfTUFJTElOR19MSVNUKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKS50aGVuKEJvb2xlYW4pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE1haWxpbmdMaXN0VXNlcnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG1haWxpbmdMaXN0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGxpc3RJZCA9IGRvY0lkKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMsIG1haWxpbmdMaXN0SWQpO1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1IgdXNlciwgZWRnZSBJTiAxLi4xIElOQk9VTkQgJHtsaXN0SWR9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfTUFJTElOR19MSVNUKX1cbiAgICAgIEZJTFRFUiBlZGdlLnN0YXR1cyA9PSBcImFjdGl2ZVwiXG4gICAgICBTT1JUIHVzZXIuZW1haWwgQVNDXG4gICAgICBSRVRVUk4gdXNlclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2Vyc0J5UHVyY2hhc2VkUHJvZHVjdCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcHJvZHVjdElkOiBzdHJpbmdcbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBwcm9kdWN0S2V5ID0gZXh0ZXJuYWxLZXkoJ3Nob3BpZnktcHJvZHVjdCcsIHByb2R1Y3RJZCk7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBvcmRlciBJTiAxLi4xIElOQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5TSE9QSUZZX1BST0RVQ1RTLCBwcm9kdWN0S2V5KX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19QVVJDSEFTRURfUFJPRFVDVCl9XG4gICAgICBGT1IgdXNlciBJTiAxLi4xIElOQk9VTkQgb3JkZXIuX2lkICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIpfVxuICAgICAgICBTT1JUIHVzZXIuZW1haWwgQVNDXG4gICAgICAgIFJFVFVSTiBESVNUSU5DVCB1c2VyXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsaWdpYmxlTWFpbGluZ1VzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBvcHRpb25zOiB7cmVhZG9ubHkgbWFpbGluZ0xpc3RJZD86IHN0cmluZzsgcmVhZG9ubHkgcHJvZHVjdElkPzogc3RyaW5nOyByZWFkb25seSBleGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzPzogYm9vbGVhbn0gPSB7fVxuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGV4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHMgPSBvcHRpb25zLmV4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHMgIT09IGZhbHNlO1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBMRVQgYmFzZVVzZXJzID0gKFxuICAgICAgRk9SIHVzZXIgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgICAgRklMVEVSIHVzZXIubWFya2V0aW5nT3B0SW4gPT0gdHJ1ZVxuICAgICAgICBGSUxURVIgdXNlci5lbWFpbCAhPSBudWxsICYmIHVzZXIuZW1haWwgIT0gXCJcIlxuICAgICAgICBGSUxURVIgdXNlci5lbWFpbERlbGl2ZXJ5U3RhdHVzID09IG51bGwgfHwgdXNlci5lbWFpbERlbGl2ZXJ5U3RhdHVzID09IFwidmFsaWRcIlxuICAgICAgICAke29wdGlvbnMubWFpbGluZ0xpc3RJZCA/IGFxbGBcbiAgICAgICAgICBGSUxURVIgTEVOR1RIKFxuICAgICAgICAgICAgRk9SIGxpc3QgSU4gMS4uMSBPVVRCT1VORCB1c2VyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX01BSUxJTkdfTElTVCl9XG4gICAgICAgICAgICAgIEZJTFRFUiBsaXN0Ll9rZXkgPT0gJHtkb2NLZXkob3B0aW9ucy5tYWlsaW5nTGlzdElkKX1cbiAgICAgICAgICAgICAgUkVUVVJOIGxpc3RcbiAgICAgICAgICApID4gMFxuICAgICAgICBgIDogYXFsYGB9XG4gICAgICAgICR7b3B0aW9ucy5wcm9kdWN0SWQgPyBhcWxgXG4gICAgICAgICAgRklMVEVSIExFTkdUSChcbiAgICAgICAgICAgIEZPUiBvcmRlciBJTiAxLi4xIE9VVEJPVU5EIHVzZXIuX2lkICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIpfVxuICAgICAgICAgICAgICBGT1IgcHJvZHVjdCBJTiAxLi4xIE9VVEJPVU5EIG9yZGVyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1BVUkNIQVNFRF9QUk9EVUNUKX1cbiAgICAgICAgICAgICAgICBGSUxURVIgcHJvZHVjdC5wcm9kdWN0SWQgPT0gJHtTdHJpbmcob3B0aW9ucy5wcm9kdWN0SWQpfVxuICAgICAgICAgICAgICAgIFJFVFVSTiBwcm9kdWN0XG4gICAgICAgICAgKSA+IDBcbiAgICAgICAgYCA6IGFxbGBgfVxuICAgICAgICAke2V4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHMgPyBhcWxgXG4gICAgICAgICAgRklMVEVSIExFTkdUSChcbiAgICAgICAgICAgIEZPUiB0aWNrZXQgSU4gMS4uMSBPVVRCT1VORCB1c2VyLl9pZCAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUKX1cbiAgICAgICAgICAgICAgRklMVEVSIHRpY2tldC5zdGF0dXMgSU4gW1wib3BlblwiLCBcImluX3Byb2dyZXNzXCIsIFwid2FpdGluZ19vbl9jdXN0b21lclwiLCBcIndhaXRpbmdfb25faW50ZXJuYWxcIl1cbiAgICAgICAgICAgICAgRklMVEVSIHRpY2tldC5wcmlvcml0eSBJTiBbXCJoaWdoXCIsIFwidXJnZW50XCJdXG4gICAgICAgICAgICAgIFJFVFVSTiB0aWNrZXRcbiAgICAgICAgICApID09IDBcbiAgICAgICAgYCA6IGFxbGBgfVxuICAgICAgICBSRVRVUk4gdXNlclxuICAgIClcbiAgICBGT1IgdXNlciBJTiBiYXNlVXNlcnNcbiAgICAgIFNPUlQgdXNlci5lbWFpbCBBU0NcbiAgICAgIFJFVFVSTiBESVNUSU5DVCB1c2VyXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluZ2VzdFNob3BpZnlDdXN0b21lck9yZGVyID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogU2hvcGlmeUN1c3RvbWVyT3JkZXJJbnB1dFxuKTogUHJvbWlzZTxDdXN0b21lck9yZGVyVHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3Qgc2hvcGlmeUN1c3RvbWVySWQgPSBjbGVhbkV4dGVybmFsSWQoaW5wdXQuc2hvcGlmeUN1c3RvbWVySWQsIDE2MCk7XG4gIGNvbnN0IHNob3BpZnlPcmRlcklkID0gY2xlYW5FeHRlcm5hbElkKGlucHV0LnNob3BpZnlPcmRlcklkLCAxNjApO1xuICBjb25zdCBjdXN0b21lciA9IGlucHV0LmN1c3RvbWVyIHx8IHt9O1xuICBjb25zdCBlbWFpbCA9IGNsZWFuU3RyaW5nKGN1c3RvbWVyLmVtYWlsLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHByb2R1Y3RJZHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLihpbnB1dC5wcm9kdWN0SWRzIHx8IFtdKSwgLi4uKGlucHV0LnByb2R1Y3RzIHx8IFtdKS5tYXAoKHByb2R1Y3QpID0+IHByb2R1Y3QucHJvZHVjdElkKV1cbiAgICAubWFwKChwcm9kdWN0SWQpID0+IGNsZWFuRXh0ZXJuYWxJZChwcm9kdWN0SWQsIDMyMCkpXG4gICAgLmZpbHRlcihCb29sZWFuKSkpO1xuXG4gIGlmKCFzaG9waWZ5Q3VzdG9tZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfc2hvcGlmeUN1c3RvbWVySWQnKTtcbiAgfVxuICBpZighc2hvcGlmeU9yZGVySWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3Nob3BpZnlPcmRlcklkJyk7XG4gIH1cbiAgaWYoIWVtYWlsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9jdXN0b21lckVtYWlsJyk7XG4gIH1cblxuICBjb25zdCB1c2VyS2V5ID0gZXh0ZXJuYWxLZXkoJ3Nob3BpZnktdXNlcicsIHNob3BpZnlDdXN0b21lcklkKTtcbiAgY29uc3QgdXNlckluc2VydCA9IHtcbiAgICBfa2V5OiB1c2VyS2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgZW1haWwsXG4gICAgZmlyc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5maXJzdE5hbWUsIDE2MCksXG4gICAgbGFzdE5hbWU6IGNsZWFuU3RyaW5nKGN1c3RvbWVyLmxhc3ROYW1lLCAxNjApLFxuICAgIG1hcmtldGluZ0NvbnNlbnRTb3VyY2U6ICdzaG9waWZ5JyxcbiAgICBtYXJrZXRpbmdPcHRJbjogY3VzdG9tZXIubWFya2V0aW5nT3B0SW4gPT09IHRydWUsXG4gICAgbWFya2V0aW5nT3B0SW5BdDogY3VzdG9tZXIubWFya2V0aW5nT3B0SW4gPT09IHRydWUgPyB0aW1lc3RhbXAgOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzaG9waWZ5Q3VzdG9tZXJJZCxcbiAgICB0eXBlOiAnY3JtQ29udGFjdCcsXG4gICAgdXNlcklkOiB1c2VyS2V5XG4gIH07XG4gIGNvbnN0IHVzZXJVcGRhdGUgPSB7XG4gICAgZW1haWwsXG4gICAgZmlyc3ROYW1lOiBjbGVhblN0cmluZyhjdXN0b21lci5maXJzdE5hbWUsIDE2MCksXG4gICAgbGFzdE5hbWU6IGNsZWFuU3RyaW5nKGN1c3RvbWVyLmxhc3ROYW1lLCAxNjApLFxuICAgIGxhc3RQdXJjaGFzZWRBdDogaW5wdXQucHVyY2hhc2VkQXQgfHwgdGltZXN0YW1wLFxuICAgIG1hcmtldGluZ0NvbnNlbnRTb3VyY2U6ICdzaG9waWZ5JyxcbiAgICBtYXJrZXRpbmdPcHRJbjogY3VzdG9tZXIubWFya2V0aW5nT3B0SW4gPT09IHRydWUsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzaG9waWZ5Q3VzdG9tZXJJZFxuICB9O1xuICBjb25zdCB1c2VyUXVlcnkgPSBhcWxgXG4gICAgTEVUIGV4aXN0aW5nID0gRklSU1QoXG4gICAgICBGT1IgdXNlciBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgICAgICBGSUxURVIgdXNlci5zaG9waWZ5Q3VzdG9tZXJJZCA9PSAke3Nob3BpZnlDdXN0b21lcklkfSB8fCB1c2VyLmVtYWlsID09ICR7ZW1haWx9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVzZXJcbiAgICApXG4gICAgTEVUIHVzZXJLZXkgPSBleGlzdGluZyA/IGV4aXN0aW5nLl9rZXkgOiAke3VzZXJLZXl9XG4gICAgVVBTRVJUIHtfa2V5OiB1c2VyS2V5fVxuICAgIElOU0VSVCBNRVJHRSgke3VzZXJJbnNlcnR9LCB7X2tleTogdXNlcktleSwgdXNlcklkOiB1c2VyS2V5fSlcbiAgICBVUERBVEUgJHt1c2VyVXBkYXRlfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3QgdXNlciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeSh1c2VyUXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgVXNlclR5cGU7XG4gIGNvbnN0IHJlc29sdmVkVXNlcktleSA9IGRvY0tleShTdHJpbmcodXNlcj8uX2tleSB8fCB1c2VyPy51c2VySWQgfHwgdXNlcktleSkpO1xuICBjb25zdCBvcmRlcktleSA9IGV4dGVybmFsS2V5KCdzaG9waWZ5LW9yZGVyJywgc2hvcGlmeU9yZGVySWQpO1xuICBjb25zdCBvcmRlciA9IHtcbiAgICBfa2V5OiBvcmRlcktleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGN1cnJlbmN5OiBjbGVhblN0cmluZyhpbnB1dC5jdXJyZW5jeSwgMykudG9VcHBlckNhc2UoKSxcbiAgICBjdXN0b21lck9yZGVySWQ6IG9yZGVyS2V5LFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcHJvZHVjdElkcyxcbiAgICBwdXJjaGFzZWRBdDogaW5wdXQucHVyY2hhc2VkQXQgfHwgdGltZXN0YW1wLFxuICAgIHNob3BpZnlDdXN0b21lcklkLFxuICAgIHNob3BpZnlPcmRlcklkLFxuICAgIHRvdGFsUHJpY2U6IE51bWJlcihpbnB1dC50b3RhbFByaWNlIHx8IDApLFxuICAgIHVzZXJJZDogcmVzb2x2ZWRVc2VyS2V5XG4gIH07XG4gIGNvbnN0IG9yZGVyUXVlcnkgPSBhcWxgXG4gICAgVVBTRVJUIHtfa2V5OiAke29yZGVyS2V5fX1cbiAgICBJTlNFUlQgJHtvcmRlcn1cbiAgICBVUERBVEUgJHt7XG4gICAgICBjdXJyZW5jeTogb3JkZXIuY3VycmVuY3ksXG4gICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgcHJvZHVjdElkcyxcbiAgICAgIHB1cmNoYXNlZEF0OiBvcmRlci5wdXJjaGFzZWRBdCxcbiAgICAgIHRvdGFsUHJpY2U6IG9yZGVyLnRvdGFsUHJpY2UsXG4gICAgICB1c2VySWQ6IHJlc29sdmVkVXNlcktleVxuICAgIH19IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DVVNUT01FUl9PUkRFUlMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWRPcmRlciA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShvcmRlclF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIEN1c3RvbWVyT3JkZXJUeXBlO1xuXG4gIGF3YWl0IHNhdmVFZGdlKFxuICAgIGNvbnRleHQsXG4gICAgRURHRVMuSEFTX0NVU1RPTUVSX09SREVSLFxuICAgIGNyZWF0ZUhhc2goYGhhc0N1c3RvbWVyT3JkZXItJHtyZXNvbHZlZFVzZXJLZXl9LSR7b3JkZXJLZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHJlc29sdmVkVXNlcktleSksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuQ1VTVE9NRVJfT1JERVJTLCBvcmRlcktleSksXG4gICAge3B1cmNoYXNlZEF0OiBvcmRlci5wdXJjaGFzZWRBdCwgc2hvcGlmeUN1c3RvbWVySWQsIHNob3BpZnlPcmRlcklkfVxuICApO1xuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb2R1Y3RJZHMubWFwKGFzeW5jIChwcm9kdWN0SWQpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0ID0gKGlucHV0LnByb2R1Y3RzIHx8IFtdKS5maW5kKChpdGVtKSA9PiBpdGVtLnByb2R1Y3RJZCA9PT0gcHJvZHVjdElkKSB8fCB7cHJvZHVjdElkfTtcbiAgICBjb25zdCBwcm9kdWN0S2V5ID0gZXh0ZXJuYWxLZXkoJ3Nob3BpZnktcHJvZHVjdCcsIHByb2R1Y3RJZCk7XG4gICAgY29uc3QgcHJvZHVjdERvYyA9IHtcbiAgICAgIF9rZXk6IHByb2R1Y3RLZXksXG4gICAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgIHByb2R1Y3RJZCxcbiAgICAgIHRpdGxlOiBjbGVhblN0cmluZyhwcm9kdWN0LnRpdGxlLCAzMjApLFxuICAgICAgdmFyaWFudElkOiBjbGVhbkV4dGVybmFsSWQocHJvZHVjdC52YXJpYW50SWQsIDE2MClcbiAgICB9O1xuICAgIGNvbnN0IHByb2R1Y3RRdWVyeSA9IGFxbGBcbiAgICAgIFVQU0VSVCB7X2tleTogJHtwcm9kdWN0S2V5fX1cbiAgICAgIElOU0VSVCAke3Byb2R1Y3REb2N9XG4gICAgICBVUERBVEUgJHt7XG4gICAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICAgIHRpdGxlOiBwcm9kdWN0RG9jLnRpdGxlLFxuICAgICAgICB2YXJpYW50SWQ6IHByb2R1Y3REb2MudmFyaWFudElkXG4gICAgICB9fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU0hPUElGWV9QUk9EVUNUUyl9XG4gICAgYDtcbiAgICBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocHJvZHVjdFF1ZXJ5KTtcbiAgICBhd2FpdCBzYXZlRWRnZShcbiAgICAgIGNvbnRleHQsXG4gICAgICBFREdFUy5IQVNfUFVSQ0hBU0VEX1BST0RVQ1QsXG4gICAgICBjcmVhdGVIYXNoKGBoYXNQdXJjaGFzZWRQcm9kdWN0LSR7b3JkZXJLZXl9LSR7cHJvZHVjdEtleX1gKSxcbiAgICAgIGRvY0lkKENPTExFQ1RJT05TLkNVU1RPTUVSX09SREVSUywgb3JkZXJLZXkpLFxuICAgICAgZG9jSWQoQ09MTEVDVElPTlMuU0hPUElGWV9QUk9EVUNUUywgcHJvZHVjdEtleSksXG4gICAgICB7cHJvZHVjdElkLCBwdXJjaGFzZWRBdDogb3JkZXIucHVyY2hhc2VkQXR9XG4gICAgKTtcbiAgfSkpO1xuXG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgVVBEQVRFICR7cmVzb2x2ZWRVc2VyS2V5fVxuICAgIFdJVEgge1xuICAgICAgbGFzdFB1cmNoYXNlZEF0OiAke29yZGVyLnB1cmNoYXNlZEF0fSxcbiAgICAgIHRvdGFsT3JkZXJDb3VudDogTEVOR1RIKFxuICAgICAgICBGT1Igb3JkZXIgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCByZXNvbHZlZFVzZXJLZXkpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX09SREVSKX1cbiAgICAgICAgICBSRVRVUk4gb3JkZXJcbiAgICAgICksXG4gICAgICB0b3RhbFNwZW5kOiBTVU0oXG4gICAgICAgIEZPUiBvcmRlciBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHJlc29sdmVkVXNlcktleSl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIpfVxuICAgICAgICAgIFJFVFVSTiBUT19OVU1CRVIob3JkZXIudG90YWxQcmljZSlcbiAgICAgIClcbiAgICB9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gIGApO1xuXG4gIHJldHVybiBzYXZlZE9yZGVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEN1c3RvbWVyT3JkZXJzQnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxDdXN0b21lck9yZGVyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBvcmRlciBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJJZCl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIpfVxuICAgICAgU09SVCBvcmRlci5wdXJjaGFzZWRBdCBERVNDXG4gICAgICBSRVRVUk4gb3JkZXJcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5jb25zdCBzZW5kU3VwcG9ydFRpY2tldEVtYWlsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0aWNrZXQ6IFN1cHBvcnRUaWNrZXRUeXBlRGF0YSxcbiAgZGV0YWlsczogc3RyaW5nLFxuICBoZWFkaW5nOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB1c2VyID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBSRVRVUk4gRE9DVU1FTlQoJHtkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdGlja2V0LnVzZXJJZCl9KVxuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlIHwgbnVsbDtcbiAgaWYoIXVzZXI/LmVtYWlsKSByZXR1cm47XG4gIGNvbnN0IHN1cHBvcnROYW1lID0gY29udGV4dC5jb25maWc/LmRldGFpbHM/LnN1cHBvcnROYW1lIHx8IENvbmZpZy5nZXQoJ2RldGFpbHMuc3VwcG9ydE5hbWUnKSB8fCAnUmVha3RvciBTdXBwb3J0JztcbiAgY29uc3Qgc3VwcG9ydEVtYWlsID0gY29udGV4dC5jb25maWc/LmRldGFpbHM/LnN1cHBvcnRFbWFpbCB8fCBDb25maWcuZ2V0KCdkZXRhaWxzLnN1cHBvcnRFbWFpbCcpIHx8ICdzdXBwb3J0QHJlYWt0b3IuaW8nO1xuICBjb25zdCB0aWNrZXROdW1iZXIgPSBTdHJpbmcodGlja2V0LnRpY2tldE51bWJlciB8fCB0aWNrZXQuc3VwcG9ydFRpY2tldElkIHx8IHRpY2tldC5fa2V5IHx8ICcnKTtcbiAgY29uc3Qgc3RhdHVzVXJsID0gYGh0dHBzOi8vY3JtLnJlYWt0b3IuaW8vc3VwcG9ydC9zdGF0dXM/dGlja2V0PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRpY2tldE51bWJlcil9YDtcbiAgY29uc3QgdGV4dCA9IGAke2hlYWRpbmd9XFxuXFxuVGlja2V0OiAke3RpY2tldE51bWJlcn1cXG5TdGF0dXM6ICR7dGlja2V0LnN0YXR1cyB8fCAnc3VibWl0dGVkJ31cXG5cXG4ke2RldGFpbHN9XFxuXFxuVHJhY2sgdGhpcyB0aWNrZXQ6ICR7c3RhdHVzVXJsfWA7XG4gIGF3YWl0IHNlc1NlbmQoe1xuICAgIERlc3RpbmF0aW9uOiB7VG9BZGRyZXNzZXM6IFtTdHJpbmcodXNlci5lbWFpbCldfSxcbiAgICBNZXNzYWdlOiB7XG4gICAgICBCb2R5OiB7SHRtbDoge0RhdGE6IGA8aDE+JHtlc2NhcGVIdG1sKGhlYWRpbmcpfTwvaDE+PHA+PHN0cm9uZz5UaWNrZXQ6PC9zdHJvbmc+ICR7ZXNjYXBlSHRtbCh0aWNrZXROdW1iZXIpfTwvcD48cD48c3Ryb25nPlN0YXR1czo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKFN0cmluZyh0aWNrZXQuc3RhdHVzIHx8ICdzdWJtaXR0ZWQnKSl9PC9wPjxwcmUgc3R5bGU9XCJ3aGl0ZS1zcGFjZTpwcmUtd3JhcDtmb250LWZhbWlseTppbmhlcml0XCI+JHtlc2NhcGVIdG1sKGRldGFpbHMpfTwvcHJlPjxwPjxhIGhyZWY9XCIke2VzY2FwZUh0bWwoc3RhdHVzVXJsKX1cIj5UcmFjayB0aGlzIHRpY2tldCBvbmxpbmU8L2E+PC9wPmB9LCBUZXh0OiB7RGF0YTogdGV4dH19LFxuICAgICAgU3ViamVjdDoge0RhdGE6IGBbJHt0aWNrZXROdW1iZXJ9XSAke2hlYWRpbmd9YH1cbiAgICB9LFxuICAgIFNvdXJjZTogYFwiJHtzdXBwb3J0TmFtZX1cIiA8JHtzdXBwb3J0RW1haWx9PmBcbiAgfSkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdXBwb3J0VGlja2V0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUGFydGlhbDxTdXBwb3J0VGlja2V0VHlwZURhdGE+XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleShTdHJpbmcoaW5wdXQudXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IHRpY2tldEtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldElkIHx8IGNyZWF0ZUhhc2goYHN1cHBvcnQtdGlja2V0LSR7dXNlcktleX0tJHt0aW1lc3RhbXB9YCkpKTtcbiAgY29uc3QgdGlja2V0TnVtYmVyID0gY2xlYW5TdHJpbmcoaW5wdXQudGlja2V0TnVtYmVyLCA4MCkgfHwgYFJLVC0ke25ldyBEYXRlKHRpbWVzdGFtcCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCkucmVwbGFjZSgvLS9nLCAnJyl9LSR7dGlja2V0S2V5LnNsaWNlKDAsIDgpLnRvVXBwZXJDYXNlKCl9YDtcbiAgY29uc3QgdGlja2V0ID0ge1xuICAgIF9rZXk6IHRpY2tldEtleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGFzc2lnbmVkVG9Vc2VySWQ6IGRvY0tleShTdHJpbmcoaW5wdXQuYXNzaWduZWRUb1VzZXJJZCB8fCAnJykpLFxuICAgIGRlc2NyaXB0aW9uOiBjbGVhblN0cmluZyhpbnB1dC5kZXNjcmlwdGlvbiwgNDAwMCksXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBwcmlvcml0eTogaW5wdXQucHJpb3JpdHkgfHwgJ25vcm1hbCcsXG4gICAgcHJvZHVjdElkOiBjbGVhbkV4dGVybmFsSWQoaW5wdXQucHJvZHVjdElkLCAzMjApLFxuICAgIHNob3BpZnlPcmRlcklkOiBjbGVhblN0cmluZyhpbnB1dC5zaG9waWZ5T3JkZXJJZCwgMTYwKSxcbiAgICBzdGF0dXM6ICdzdWJtaXR0ZWQnLFxuICAgIHN1YmplY3Q6IGNsZWFuU3RyaW5nKGlucHV0LnN1YmplY3QsIDMyMCksXG4gICAgc3VwcG9ydFRpY2tldElkOiB0aWNrZXRLZXksXG4gICAgdGlja2V0TnVtYmVyLFxuICAgIHR5cGU6IGlucHV0LnR5cGUgfHwgJ2dlbmVyYWxfc3VwcG9ydCcsXG4gICAgdXNlcklkOiB1c2VyS2V5XG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIElOU0VSVCAke3RpY2tldH0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBzYXZlZFRpY2tldCA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVCxcbiAgICBjcmVhdGVIYXNoKGBoYXNTdXBwb3J0VGlja2V0LSR7dXNlcktleX0tJHt0aWNrZXRLZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KSxcbiAgICB7cHJpb3JpdHk6IHRpY2tldC5wcmlvcml0eSwgc3RhdHVzOiB0aWNrZXQuc3RhdHVzLCB0eXBlOiB0aWNrZXQudHlwZX1cbiAgKTtcbiAgYXdhaXQgYWRkU3VwcG9ydFRpY2tldEV2ZW50KGNvbnRleHQsIHtcbiAgICBhY3RvclVzZXJJZDogZG9jS2V5KFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgdXNlcktleSkpLFxuICAgIGV2ZW50VHlwZTogJ3N1Ym1pdHRlZCcsXG4gICAgbWV0YWRhdGE6IHtkZXRhaWxzOiB0aWNrZXQuZGVzY3JpcHRpb259LFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHRvVmFsdWU6IHRpY2tldC5zdGF0dXNcbiAgfSk7XG5cbiAgcmV0dXJuIHNhdmVkVGlja2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IHN1Ym1pdFB1YmxpY1N1cHBvcnRUaWNrZXQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBQdWJsaWNTdXBwb3J0VGlja2V0SW5wdXRcbik6IFByb21pc2U8U3VwcG9ydFRpY2tldFR5cGVEYXRhPiA9PiB7XG4gIGNvbnN0IGVtYWlsID0gY2xlYW5TdHJpbmcoaW5wdXQuZW1haWwsIDMyMCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgZGVzY3JpcHRpb24gPSBjbGVhblN0cmluZyhpbnB1dC5kZXNjcmlwdGlvbiwgNDAwMCk7XG4gIGNvbnN0IHN1YmplY3QgPSBjbGVhblN0cmluZyhpbnB1dC5zdWJqZWN0LCAzMjApO1xuICBpZighZW1haWxQYXR0ZXJuLnRlc3QoZW1haWwpKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3ZhbGlkX2VtYWlsJyk7XG4gIGlmKCFzdWJqZWN0KSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3N1YmplY3QnKTtcbiAgaWYoIWRlc2NyaXB0aW9uKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX2Rlc2NyaXB0aW9uJyk7XG5cbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9FVkVOVFMsXG4gICAgQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfTUVTU0FHRVMsXG4gICAgQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLFxuICAgIENPTExFQ1RJT05TLlVTRVJTXG4gIF0ubWFwKChuYW1lKSA9PiBlbnN1cmVEb2N1bWVudENvbGxlY3Rpb24oZGF0YWJhc2UsIG5hbWUpKSk7XG4gIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQsXG4gICAgRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUX0VWRU5ULFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFXG4gIF0ubWFwKChuYW1lKSA9PiBlbnN1cmVFZGdlQ29sbGVjdGlvbihkYXRhYmFzZSwgbmFtZSkpKTtcblxuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgZ2VuZXJhdGVkVXNlcktleSA9IGNyZWF0ZUhhc2goZW1haWwsIG51bGwpO1xuICBjb25zdCBvcHRlZEluID0gaW5wdXQubWFya2V0aW5nT3B0SW4gPT09IHRydWU7XG4gIGNvbnN0IHVzZXJJbnNlcnQgPSB7XG4gICAgX2tleTogZ2VuZXJhdGVkVXNlcktleSxcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgZW1haWwsXG4gICAgZmlyc3ROYW1lOiBjbGVhblN0cmluZyhpbnB1dC5maXJzdE5hbWUsIDE2MCksXG4gICAgbGFzdE5hbWU6IGNsZWFuU3RyaW5nKGlucHV0Lmxhc3ROYW1lLCAxNjApLFxuICAgIG1haWxpbmdMaXN0OiBvcHRlZEluLFxuICAgIG1hcmtldGluZ09wdEluOiBvcHRlZEluLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgdXNlcklkOiBnZW5lcmF0ZWRVc2VyS2V5XG4gIH07XG4gIGNvbnN0IHVzZXJVcGRhdGUgPSB7XG4gICAgLi4uKG9wdGVkSW4gPyB7bWFpbGluZ0xpc3Q6IHRydWUsIG1hcmtldGluZ09wdEluOiB0cnVlLCBtYXJrZXRpbmdPcHRJbkF0OiB0aW1lc3RhbXB9IDoge30pLFxuICAgIGZpcnN0TmFtZTogY2xlYW5TdHJpbmcoaW5wdXQuZmlyc3ROYW1lLCAxNjApIHx8IHVuZGVmaW5lZCxcbiAgICBsYXN0TmFtZTogY2xlYW5TdHJpbmcoaW5wdXQubGFzdE5hbWUsIDE2MCkgfHwgdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXBcbiAgfTtcbiAgY29uc3QgdXNlciA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBVUFNFUlQge2VtYWlsOiAke2VtYWlsfX1cbiAgICAgIElOU0VSVCAke3VzZXJJbnNlcnR9XG4gICAgICBVUERBVEUgJHt1c2VyVXBkYXRlfVxuICAgICAgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICAgIFJFVFVSTiBORVdcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZTtcbiAgY29uc3QgdGlja2V0ID0gYXdhaXQgY3JlYXRlU3VwcG9ydFRpY2tldChjb250ZXh0LCB7XG4gICAgZGVzY3JpcHRpb24sXG4gICAgcHJpb3JpdHk6IHN1cHBvcnRQcmlvcml0aWVzLmhhcyhTdHJpbmcoaW5wdXQucHJpb3JpdHkpKSA/IGlucHV0LnByaW9yaXR5IDogJ25vcm1hbCcsXG4gICAgc3ViamVjdCxcbiAgICB0eXBlOiBzdXBwb3J0VHlwZXMuaGFzKFN0cmluZyhpbnB1dC50eXBlKSkgPyBpbnB1dC50eXBlIDogJ2dlbmVyYWxfc3VwcG9ydCcsXG4gICAgdXNlcklkOiBTdHJpbmcodXNlcj8uX2tleSB8fCB1c2VyPy51c2VySWQgfHwgZ2VuZXJhdGVkVXNlcktleSlcbiAgfSk7XG4gIGF3YWl0IHNlbmRTdXBwb3J0VGlja2V0RW1haWwoY29udGV4dCwgdGlja2V0LCBkZXNjcmlwdGlvbiwgJ1dlIHJlY2VpdmVkIHlvdXIgc3VwcG9ydCB0aWNrZXQnKTtcbiAgcmV0dXJuIHRpY2tldDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQdWJsaWNTdXBwb3J0VGlja2V0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB0aWNrZXROdW1iZXI6IHN0cmluZyxcbiAgZW1haWxBZGRyZXNzOiBzdHJpbmdcbik6IFByb21pc2U8UHVibGljU3VwcG9ydFRpY2tldEZlZWQgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGVtYWlsID0gY2xlYW5TdHJpbmcoZW1haWxBZGRyZXNzLCAzMjApLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG51bWJlciA9IGNsZWFuU3RyaW5nKHRpY2tldE51bWJlciwgODApLnRvVXBwZXJDYXNlKCk7XG4gIGlmKCFlbWFpbFBhdHRlcm4udGVzdChlbWFpbCkgfHwgIW51bWJlcikgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICBpZighYXdhaXQgZGF0YWJhc2UuY29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpLmV4aXN0cygpKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBGT1IgdGlja2V0IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgICAgRklMVEVSIFVQUEVSKHRpY2tldC50aWNrZXROdW1iZXIpID09ICR7bnVtYmVyfVxuICAgICAgTEVUIHVzZXIgPSBET0NVTUVOVCgke0NPTExFQ1RJT05TLlVTRVJTfSwgdGlja2V0LnVzZXJJZClcbiAgICAgIEZJTFRFUiBMT1dFUih1c2VyLmVtYWlsKSA9PSAke2VtYWlsfVxuICAgICAgTEVUIG1lc3NhZ2VzID0gKFxuICAgICAgICBGT1IgbWVzc2FnZSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfTUVTU0FHRVMpfVxuICAgICAgICAgIEZJTFRFUiBtZXNzYWdlLnN1cHBvcnRUaWNrZXRJZCA9PSB0aWNrZXQuX2tleSBBTkQgbWVzc2FnZS52aXNpYmlsaXR5ID09IFwiY3VzdG9tZXJcIlxuICAgICAgICAgIFNPUlQgbWVzc2FnZS5hZGRlZCBBU0NcbiAgICAgICAgICBSRVRVUk4gbWVzc2FnZVxuICAgICAgKVxuICAgICAgTEVUIGV2ZW50cyA9IChcbiAgICAgICAgRk9SIGV2ZW50IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9FVkVOVFMpfVxuICAgICAgICAgIEZJTFRFUiBldmVudC5zdXBwb3J0VGlja2V0SWQgPT0gdGlja2V0Ll9rZXlcbiAgICAgICAgICBTT1JUIGV2ZW50LmFkZGVkIEFTQ1xuICAgICAgICAgIFJFVFVSTiBldmVudFxuICAgICAgKVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHt0aWNrZXQsIG1lc3NhZ2VzLCBldmVudHN9XG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgUHJvbWlzZTxQdWJsaWNTdXBwb3J0VGlja2V0RmVlZCB8IG51bGw+O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1cHBvcnRUaWNrZXRzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmaWx0ZXJzOiB7cmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nOyByZWFkb25seSB1c2VySWQ/OiBzdHJpbmd9ID0ge31cbik6IFByb21pc2U8U3VwcG9ydFRpY2tldFR5cGVEYXRhW10+ID0+IHtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIHJldHVybiAoYXN5bmMgKCkgPT4ge1xuICAgIGlmKCFhd2FpdCBkYXRhYmFzZS5jb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUykuZXhpc3RzKCkpIHJldHVybiBbXTtcbiAgICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICAgIEZPUiB0aWNrZXQgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUyl9XG4gICAgICAgICR7ZmlsdGVycy5zdGF0dXMgPyBhcWxgRklMVEVSIHRpY2tldC5zdGF0dXMgPT0gJHtmaWx0ZXJzLnN0YXR1c31gIDogYXFsYGB9XG4gICAgICAgICR7ZmlsdGVycy51c2VySWQgPyBhcWxgRklMVEVSIHRpY2tldC51c2VySWQgPT0gJHtkb2NLZXkoZmlsdGVycy51c2VySWQpfWAgOiBhcWxgYH1cbiAgICAgICAgTEVUIHVzZXIgPSBET0NVTUVOVCgke0NPTExFQ1RJT05TLlVTRVJTfSwgdGlja2V0LnVzZXJJZClcbiAgICAgICAgU09SVCB0aWNrZXQuYWRkZWQgREVTQ1xuICAgICAgICBSRVRVUk4gTUVSR0UodGlja2V0LCB7dXNlcn0pXG4gICAgYDtcbiAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbiAgfSkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVTdXBwb3J0VGlja2V0U3RhdHVzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBzdXBwb3J0VGlja2V0SWQ6IHN0cmluZyxcbiAgc3RhdHVzOiBTdXBwb3J0VGlja2V0U3RhdHVzLFxuICByZXNvbHV0aW9uU3VtbWFyeSA9ICcnXG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT4gPT4ge1xuICBjb25zdCB0aWNrZXRLZXkgPSBkb2NLZXkoc3VwcG9ydFRpY2tldElkKTtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHByZXZpb3VzID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpXG4gICAgLnF1ZXJ5KGFxbGBSRVRVUk4gRE9DVU1FTlQoJHtkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHRpY2tldEtleSl9KWApXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgU3VwcG9ydFRpY2tldFR5cGVEYXRhIHwgbnVsbDtcbiAgY29uc3QgdXBkYXRlID0ge1xuICAgIC4uLihzdGF0dXMgPT09ICdjb21wbGV0ZWQnICYmIHtjb21wbGV0ZWRBdDogdGltZXN0YW1wLCByZXNvbHV0aW9uU3VtbWFyeTogY2xlYW5TdHJpbmcocmVzb2x1dGlvblN1bW1hcnksIDQwMDApfSksXG4gICAgLi4uKHN0YXR1cyA9PT0gJ2RvbmUnICYmIHtkb25lQXQ6IHRpbWVzdGFtcCwgcmVzb2x1dGlvblN1bW1hcnk6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5LCA0MDAwKX0pLFxuICAgIC4uLihzdGF0dXMgPT09ICdyZXNvbHZlZCcgJiYge3Jlc29sdmVkQXQ6IHRpbWVzdGFtcCwgcmVzb2x1dGlvblN1bW1hcnk6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5LCA0MDAwKX0pLFxuICAgIC4uLihzdGF0dXMgPT09ICdjbG9zZWQnICYmIHtjbG9zZWRBdDogdGltZXN0YW1wfSksXG4gICAgbGFzdFVwZGF0ZURldGFpbHM6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5LCA0MDAwKSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHN0YXR1c1xuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBVUERBVEUgJHt0aWNrZXRLZXl9IFdJVEggJHt1cGRhdGV9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3QgdGlja2V0ID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFN1cHBvcnRUaWNrZXRUeXBlRGF0YTtcblxuICBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIEZPUiBlZGdlIElOICR7Y29sbGVjdGlvbihFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQpfVxuICAgICAgRklMVEVSIGVkZ2UuX3RvID09ICR7ZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpfVxuICAgICAgVVBEQVRFIGVkZ2UgV0lUSCAke3tcbiAgICAgICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgICAgcmVzb2x2ZWRBdDogc3RhdHVzID09PSAncmVzb2x2ZWQnID8gdGltZXN0YW1wIDogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXNcbiAgICAgIH19IElOICR7Y29sbGVjdGlvbihFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQpfVxuICBgKTtcbiAgYXdhaXQgYWRkU3VwcG9ydFRpY2tldEV2ZW50KGNvbnRleHQsIHtcbiAgICBhY3RvclVzZXJJZDogZG9jS2V5KFN0cmluZyhjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKSxcbiAgICBldmVudFR5cGU6ICdzdGF0dXNfY2hhbmdlZCcsXG4gICAgZnJvbVZhbHVlOiBwcmV2aW91cz8uc3RhdHVzLFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHRvVmFsdWU6IHN0YXR1c1xuICB9KTtcblxuICBpZihzdGF0dXMgPT09ICdyZXNvbHZlZCcpIHtcbiAgICBhd2FpdCBjcmVhdGVDdXN0b21lck5vdGlmaWNhdGlvbihjb250ZXh0LCB7XG4gICAgICBib2R5OiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSB8fCAnWW91ciBzdXBwb3J0IHRpY2tldCBoYXMgYmVlbiByZXNvbHZlZC4nLCA0MDAwKSxcbiAgICAgIHN0YXR1czogJ3F1ZXVlZCcsXG4gICAgICBzdWJqZWN0OiBgUmVzb2x2ZWQ6ICR7dGlja2V0LnN1YmplY3QgfHwgJ1N1cHBvcnQgdGlja2V0J31gLFxuICAgICAgc3VwcG9ydFRpY2tldElkOiB0aWNrZXRLZXksXG4gICAgICB0eXBlOiAnc3VwcG9ydF90aWNrZXRfcmVzb2x2ZWQnLFxuICAgICAgdXNlcklkOiB0aWNrZXQudXNlcklkXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGlja2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVN1cHBvcnRUaWNrZXRQcm9ncmVzcyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgc3VwcG9ydFRpY2tldElkOiBzdHJpbmcsXG4gIHN0YXR1czogU3VwcG9ydFRpY2tldFN0YXR1cyxcbiAgZGV0YWlsczogc3RyaW5nXG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT4gPT4ge1xuICByZXF1aXJlQ3JtQWRtaW4oY29udGV4dCk7XG4gIGlmKCFzdXBwb3J0U3RhdHVzZXMuaGFzKHN0YXR1cykpIHRocm93IG5ldyBFcnJvcignaW52YWxpZF9zdXBwb3J0X3RpY2tldF9zdGF0dXMnKTtcbiAgY29uc3QgbWFya2Rvd24gPSBjbGVhblN0cmluZyhkZXRhaWxzLCA0MDAwKTtcbiAgaWYoIW1hcmtkb3duKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX3VwZGF0ZV9kZXRhaWxzJyk7XG4gIGNvbnN0IHRpY2tldCA9IGF3YWl0IHVwZGF0ZVN1cHBvcnRUaWNrZXRTdGF0dXMoY29udGV4dCwgc3VwcG9ydFRpY2tldElkLCBzdGF0dXMsIG1hcmtkb3duKTtcbiAgYXdhaXQgYWRkU3VwcG9ydFRpY2tldE1lc3NhZ2UoY29udGV4dCwge1xuICAgIGF1dGhvclVzZXJJZDogU3RyaW5nKGNvbnRleHQuc2Vzc2lvbj8udXNlcklkIHx8ICcnKSxcbiAgICBib2R5OiBtYXJrZG93bixcbiAgICBzdXBwb3J0VGlja2V0SWQsXG4gICAgdmlzaWJpbGl0eTogJ2N1c3RvbWVyJ1xuICB9KTtcbiAgYXdhaXQgY3JlYXRlQ3VzdG9tZXJOb3RpZmljYXRpb24oY29udGV4dCwge1xuICAgIGJvZHk6IG1hcmtkb3duLFxuICAgIHN0YXR1czogJ3NlbnQnLFxuICAgIHN1YmplY3Q6IGBUaWNrZXQgJHt0aWNrZXQudGlja2V0TnVtYmVyIHx8IHN1cHBvcnRUaWNrZXRJZH06ICR7c3RhdHVzLnJlcGxhY2UoL18vZywgJyAnKX1gLFxuICAgIHN1cHBvcnRUaWNrZXRJZCxcbiAgICB0eXBlOiAnc3VwcG9ydF90aWNrZXRfcHJvZ3Jlc3MnLFxuICAgIHVzZXJJZDogdGlja2V0LnVzZXJJZFxuICB9KTtcbiAgYXdhaXQgc2VuZFN1cHBvcnRUaWNrZXRFbWFpbChjb250ZXh0LCB0aWNrZXQsIG1hcmtkb3duLCBgU3VwcG9ydCB0aWNrZXQgJHtzdGF0dXMucmVwbGFjZSgvXy9nLCAnICcpfWApO1xuICByZXR1cm4gdGlja2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFN1cHBvcnRUaWNrZXRNZXNzYWdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUGFydGlhbDxTdXBwb3J0VGlja2V0TWVzc2FnZVR5cGU+XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgdGlja2V0S2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC5zdXBwb3J0VGlja2V0SWQgfHwgJycpKTtcbiAgY29uc3QgbWVzc2FnZUtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldE1lc3NhZ2VJZCB8fCBjcmVhdGVIYXNoKGBzdXBwb3J0LXRpY2tldC1tZXNzYWdlLSR7dGlja2V0S2V5fS0ke3RpbWVzdGFtcH1gKSkpO1xuICBjb25zdCBtZXNzYWdlID0ge1xuICAgIF9rZXk6IG1lc3NhZ2VLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBhdXRob3JVc2VySWQ6IGRvY0tleShTdHJpbmcoaW5wdXQuYXV0aG9yVXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpLFxuICAgIGJvZHk6IGNsZWFuU3RyaW5nKGlucHV0LmJvZHksIDQwMDApLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc3VwcG9ydFRpY2tldElkOiB0aWNrZXRLZXksXG4gICAgc3VwcG9ydFRpY2tldE1lc3NhZ2VJZDogbWVzc2FnZUtleSxcbiAgICB2aXNpYmlsaXR5OiBpbnB1dC52aXNpYmlsaXR5IHx8ICdjdXN0b21lcidcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgSU5TRVJUICR7bWVzc2FnZX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkTWVzc2FnZSA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFLFxuICAgIGNyZWF0ZUhhc2goYGhhc1N1cHBvcnRUaWNrZXRNZXNzYWdlLSR7dGlja2V0S2V5fS0ke21lc3NhZ2VLZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX01FU1NBR0VTLCBtZXNzYWdlS2V5KSxcbiAgICB7YXV0aG9yVXNlcklkOiBtZXNzYWdlLmF1dGhvclVzZXJJZCwgdmlzaWJpbGl0eTogbWVzc2FnZS52aXNpYmlsaXR5fVxuICApO1xuXG4gIHJldHVybiBzYXZlZE1lc3NhZ2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3VwcG9ydFRpY2tldE1lc3NhZ2VzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBzdXBwb3J0VGlja2V0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0TWVzc2FnZVR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1IgbWVzc2FnZSBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCBzdXBwb3J0VGlja2V0SWQpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUX01FU1NBR0UpfVxuICAgICAgU09SVCBtZXNzYWdlLmFkZGVkIEFTQ1xuICAgICAgUkVUVVJOIG1lc3NhZ2VcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3VwcG9ydFRpY2tldEV2ZW50ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUGFydGlhbDxTdXBwb3J0VGlja2V0RXZlbnRUeXBlPlxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0RXZlbnRUeXBlPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCB0aWNrZXRLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRJZCB8fCAnJykpO1xuICBjb25zdCBldmVudEtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldEV2ZW50SWQgfHwgY3JlYXRlSGFzaChgc3VwcG9ydC10aWNrZXQtZXZlbnQtJHt0aWNrZXRLZXl9LSR7dGltZXN0YW1wfS0ke2lucHV0LmV2ZW50VHlwZX1gKSkpO1xuICBjb25zdCBldmVudCA9IHtcbiAgICBfa2V5OiBldmVudEtleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGFjdG9yVXNlcklkOiBkb2NLZXkoU3RyaW5nKGlucHV0LmFjdG9yVXNlcklkIHx8ICcnKSksXG4gICAgZXZlbnRUeXBlOiBjbGVhblN0cmluZyhpbnB1dC5ldmVudFR5cGUsIDE2MCksXG4gICAgZnJvbVZhbHVlOiBjbGVhblN0cmluZyhpbnB1dC5mcm9tVmFsdWUsIDMyMCksXG4gICAgbWV0YWRhdGE6IGlucHV0Lm1ldGFkYXRhIHx8IHt9LFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc3VwcG9ydFRpY2tldEV2ZW50SWQ6IGV2ZW50S2V5LFxuICAgIHN1cHBvcnRUaWNrZXRJZDogdGlja2V0S2V5LFxuICAgIHRvVmFsdWU6IGNsZWFuU3RyaW5nKGlucHV0LnRvVmFsdWUsIDMyMClcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgSU5TRVJUICR7ZXZlbnR9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9FVkVOVFMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWRFdmVudCA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCxcbiAgICBjcmVhdGVIYXNoKGBoYXNTdXBwb3J0VGlja2V0RXZlbnQtJHt0aWNrZXRLZXl9LSR7ZXZlbnRLZXl9YCksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX0VWRU5UUywgZXZlbnRLZXkpLFxuICAgIHthY3RvclVzZXJJZDogZXZlbnQuYWN0b3JVc2VySWQsIGV2ZW50VHlwZTogZXZlbnQuZXZlbnRUeXBlfVxuICApO1xuXG4gIHJldHVybiBzYXZlZEV2ZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN1cHBvcnRUaWNrZXRFdmVudHMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHN1cHBvcnRUaWNrZXRJZDogc3RyaW5nXG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRFdmVudFR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1IgZXZlbnQgSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgc3VwcG9ydFRpY2tldElkKX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVF9FVkVOVCl9XG4gICAgICBTT1JUIGV2ZW50LmFkZGVkIEFTQ1xuICAgICAgUkVUVVJOIGV2ZW50XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUN1c3RvbWVyTm90aWZpY2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUGFydGlhbDxDdXN0b21lck5vdGlmaWNhdGlvblR5cGU+XG4pOiBQcm9taXNlPEN1c3RvbWVyTm90aWZpY2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgdXNlcktleSA9IGRvY0tleShTdHJpbmcoaW5wdXQudXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbktleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuY3VzdG9tZXJOb3RpZmljYXRpb25JZCB8fCBjcmVhdGVIYXNoKGBjdXN0b21lci1ub3RpZmljYXRpb24tJHt1c2VyS2V5fS0ke3RpbWVzdGFtcH1gKSkpO1xuICBjb25zdCBub3RpZmljYXRpb24gPSB7XG4gICAgX2tleTogbm90aWZpY2F0aW9uS2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgYm9keTogY2xlYW5TdHJpbmcoaW5wdXQuYm9keSwgNDAwMCksXG4gICAgY3VzdG9tZXJOb3RpZmljYXRpb25JZDogbm90aWZpY2F0aW9uS2V5LFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc2VudEF0OiBpbnB1dC5zZW50QXQsXG4gICAgc3RhdHVzOiBpbnB1dC5zdGF0dXMgfHwgJ3F1ZXVlZCcsXG4gICAgc3ViamVjdDogY2xlYW5TdHJpbmcoaW5wdXQuc3ViamVjdCwgMzIwKSxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldElkIHx8ICcnKSksXG4gICAgdHlwZTogY2xlYW5TdHJpbmcoaW5wdXQudHlwZSwgMTYwKSxcbiAgICB1c2VySWQ6IHVzZXJLZXlcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgSU5TRVJUICR7bm90aWZpY2F0aW9ufSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuQ1VTVE9NRVJfTk9USUZJQ0FUSU9OUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBzYXZlZE5vdGlmaWNhdGlvbiA9IGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcblxuICBhd2FpdCBzYXZlRWRnZShcbiAgICBjb250ZXh0LFxuICAgIEVER0VTLkhBU19DVVNUT01FUl9OT1RJRklDQVRJT04sXG4gICAgY3JlYXRlSGFzaChgaGFzQ3VzdG9tZXJOb3RpZmljYXRpb24tJHt1c2VyS2V5fS0ke25vdGlmaWNhdGlvbktleX1gKSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdXNlcktleSksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuQ1VTVE9NRVJfTk9USUZJQ0FUSU9OUywgbm90aWZpY2F0aW9uS2V5KSxcbiAgICB7XG4gICAgICBzdGF0dXM6IG5vdGlmaWNhdGlvbi5zdGF0dXMsXG4gICAgICBzdXBwb3J0VGlja2V0SWQ6IG5vdGlmaWNhdGlvbi5zdXBwb3J0VGlja2V0SWQsXG4gICAgICB0eXBlOiBub3RpZmljYXRpb24udHlwZVxuICAgIH1cbiAgKTtcblxuICByZXR1cm4gc2F2ZWROb3RpZmljYXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VzdG9tZXJOb3RpZmljYXRpb25zQnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxDdXN0b21lck5vdGlmaWNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBGT1Igbm90aWZpY2F0aW9uIElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdXNlcklkKX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19DVVNUT01FUl9OT1RJRklDQVRJT04pfVxuICAgICAgU09SVCBub3RpZmljYXRpb24uYWRkZWQgREVTQ1xuICAgICAgUkVUVVJOIG5vdGlmaWNhdGlvblxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInBhcnNlSWQiLCJwYXJzZVBob25lIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsIkNvbmZpZyIsInVzZURiIiwiaXNBZG1pblVzZXIiLCJzZXNTZW5kIiwibm93IiwiRGF0ZSIsImNvbGxlY3Rpb24iLCJuYW1lIiwiZG9jS2V5IiwidmFsdWUiLCJTdHJpbmciLCJkb2NJZCIsImNvbGxlY3Rpb25OYW1lIiwia2V5IiwiZXh0ZXJuYWxLZXkiLCJwcmVmaXgiLCJpZCIsImNsZWFuU3RyaW5nIiwibGVuZ3RoIiwiY2xlYW5FeHRlcm5hbElkIiwidHJpbSIsInNsaWNlIiwiZW5zdXJlRG9jdW1lbnRDb2xsZWN0aW9uIiwiZGF0YWJhc2UiLCJ0YXJnZXQiLCJleGlzdHMiLCJjcmVhdGVDb2xsZWN0aW9uIiwiZXJyb3IiLCJlbnN1cmVFZGdlQ29sbGVjdGlvbiIsImNyZWF0ZUVkZ2VDb2xsZWN0aW9uIiwicmVxdWlyZUNybUFkbWluIiwiY29udGV4dCIsInNlc3Npb24iLCJFcnJvciIsInJlcXVpcmVDcm1BZG1pbmlzdHJhdG9yIiwiYWxsb3dlZENvbnRhY3RGaWVsZHMiLCJTZXQiLCJzdXBwb3J0UHJpb3JpdGllcyIsInN1cHBvcnRTdGF0dXNlcyIsInN1cHBvcnRUeXBlcyIsImVtYWlsUGF0dGVybiIsImVzY2FwZUh0bWwiLCJyZXBsYWNlIiwic2FuaXRpemVIdG1sIiwic2FuaXRpemVDc3MiLCJodG1sVG9UZXh0IiwiY2h1bmsiLCJpdGVtcyIsInNpemUiLCJncm91cHMiLCJpbmRleCIsInB1c2giLCJzdWJtaXRDcm1Gb3JtIiwiaW5wdXQiLCJtYXJrZXRpbmdPcHRJbiIsImVtYWlsIiwidG9Mb3dlckNhc2UiLCJyYXdQaG9uZSIsInBob25lIiwiZGF0YWJhc2VOYW1lIiwiQ1JNX0ZPUk1fU1VCTUlTU0lPTlMiLCJ0aW1lc3RhbXAiLCJzb3VyY2UiLCJmb3JtSWQiLCJ2YWx1ZXMiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImdlbmVyYXRlZFVzZXJLZXkiLCJjb25zZW50IiwibWFya2V0aW5nT3B0SW5BdCIsIm1hcmtldGluZ09wdE91dEF0IiwidXNlckluc2VydCIsIl9rZXkiLCJhY3RpdmUiLCJhZGRlZCIsIm1haWxpbmdMaXN0IiwibWFya2V0aW5nQ29uc2VudFNvdXJjZSIsIm1vZGlmaWVkIiwidHlwZSIsInVzZXJBY2Nlc3MiLCJ1c2VySWQiLCJ2ZXJpZmllZEVtYWlsIiwidmVyaWZpZWRQaG9uZSIsInVzZXJVcGRhdGUiLCJ1c2VyIiwicXVlcnkiLCJVU0VSUyIsInRoZW4iLCJjdXJzb3IiLCJuZXh0Iiwic3VibWlzc2lvbklkIiwic3VibWlzc2lvbiIsInNhdmVkIiwiZ2V0Q3JtRm9ybVN1Ym1pc3Npb25zIiwiYWxsIiwiZ2V0Q3JtQ29udGFjdHMiLCJmaWx0ZXIiLCJzZWFyY2giLCJmaWVsZCIsImhhcyIsIm9wdGVkSW5Pbmx5Iiwib3BlcmF0b3IiLCJpbmNsdWRlcyIsInNlbmRDcm1DYW1wYWlnbiIsInN1YmplY3QiLCJib2R5SHRtbCIsImh0bWwiLCJjc3MiLCJjYW5kaWRhdGVzIiwic2VsZWN0ZWRJZHMiLCJ1c2VySWRzIiwibWFwIiwicmVjaXBpZW50cyIsIkJvb2xlYW4iLCJjYW1wYWlnbklkIiwiY2FtcGFpZ24iLCJmYWlsZWRDb3VudCIsInJlY2lwaWVudENvdW50Iiwic2VudENvdW50Iiwic3RhdHVzIiwiQ1JNX0NBTVBBSUdOUyIsInJlY2lwaWVudHNCYXRjaCIsIkRlc3RpbmF0aW9uIiwiQmNjQWRkcmVzc2VzIiwicmVjaXBpZW50IiwiTWVzc2FnZSIsIkJvZHkiLCJIdG1sIiwiRGF0YSIsIlRleHQiLCJTdWJqZWN0IiwiU291cmNlIiwiY29uZmlnIiwiZGV0YWlscyIsInN1cHBvcnROYW1lIiwic3VwcG9ydEVtYWlsIiwiX2Vycm9yIiwicmVzdWx0Iiwic2VudEF0Iiwic2F2ZUVkZ2UiLCJlZGdlQ29sbGVjdGlvbiIsImVkZ2VLZXkiLCJmcm9tIiwidG8iLCJkYXRhIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiY3JlYXRlTWFpbGluZ0xpc3QiLCJtYWlsaW5nTGlzdElkIiwiY3JlYXRlZEJ5VXNlcklkIiwiZGVzY3JpcHRpb24iLCJNQUlMSU5HX0xJU1RTIiwiZ2V0TWFpbGluZ0xpc3RzIiwiYWRkVXNlclRvTWFpbGluZ0xpc3QiLCJ1c2VyS2V5IiwibGlzdEtleSIsIkhBU19NQUlMSU5HX0xJU1QiLCJhZGRlZEJ5VXNlcklkIiwicmVtb3ZlVXNlckZyb21NYWlsaW5nTGlzdCIsInVwZGF0ZSIsInJlbW92ZWRBdCIsImdldE1haWxpbmdMaXN0VXNlcnMiLCJsaXN0SWQiLCJnZXRVc2Vyc0J5UHVyY2hhc2VkUHJvZHVjdCIsInByb2R1Y3RJZCIsInByb2R1Y3RLZXkiLCJTSE9QSUZZX1BST0RVQ1RTIiwiSEFTX1BVUkNIQVNFRF9QUk9EVUNUIiwiSEFTX0NVU1RPTUVSX09SREVSIiwiZ2V0RWxpZ2libGVNYWlsaW5nVXNlcnMiLCJvcHRpb25zIiwiZXhjbHVkZU9wZW5TdXBwb3J0VGlja2V0cyIsIkhBU19TVVBQT1JUX1RJQ0tFVCIsImluZ2VzdFNob3BpZnlDdXN0b21lck9yZGVyIiwic2hvcGlmeUN1c3RvbWVySWQiLCJzaG9waWZ5T3JkZXJJZCIsImN1c3RvbWVyIiwicHJvZHVjdElkcyIsIkFycmF5IiwicHJvZHVjdHMiLCJwcm9kdWN0IiwidW5kZWZpbmVkIiwibGFzdFB1cmNoYXNlZEF0IiwicHVyY2hhc2VkQXQiLCJ1c2VyUXVlcnkiLCJyZXNvbHZlZFVzZXJLZXkiLCJvcmRlcktleSIsIm9yZGVyIiwiY3VycmVuY3kiLCJ0b1VwcGVyQ2FzZSIsImN1c3RvbWVyT3JkZXJJZCIsInRvdGFsUHJpY2UiLCJOdW1iZXIiLCJvcmRlclF1ZXJ5IiwiQ1VTVE9NRVJfT1JERVJTIiwic2F2ZWRPcmRlciIsIlByb21pc2UiLCJmaW5kIiwiaXRlbSIsInByb2R1Y3REb2MiLCJ0aXRsZSIsInZhcmlhbnRJZCIsInByb2R1Y3RRdWVyeSIsImdldEN1c3RvbWVyT3JkZXJzQnlVc2VyIiwic2VuZFN1cHBvcnRUaWNrZXRFbWFpbCIsInRpY2tldCIsImhlYWRpbmciLCJnZXQiLCJ0aWNrZXROdW1iZXIiLCJzdXBwb3J0VGlja2V0SWQiLCJzdGF0dXNVcmwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0ZXh0IiwiVG9BZGRyZXNzZXMiLCJjYXRjaCIsImNyZWF0ZVN1cHBvcnRUaWNrZXQiLCJ0aWNrZXRLZXkiLCJ0b0lTT1N0cmluZyIsImFzc2lnbmVkVG9Vc2VySWQiLCJwcmlvcml0eSIsIlNVUFBPUlRfVElDS0VUUyIsInNhdmVkVGlja2V0IiwiYWRkU3VwcG9ydFRpY2tldEV2ZW50IiwiYWN0b3JVc2VySWQiLCJldmVudFR5cGUiLCJtZXRhZGF0YSIsInRvVmFsdWUiLCJzdWJtaXRQdWJsaWNTdXBwb3J0VGlja2V0IiwidGVzdCIsIlNVUFBPUlRfVElDS0VUX0VWRU5UUyIsIlNVUFBPUlRfVElDS0VUX01FU1NBR0VTIiwiSEFTX1NVUFBPUlRfVElDS0VUX0VWRU5UIiwiSEFTX1NVUFBPUlRfVElDS0VUX01FU1NBR0UiLCJvcHRlZEluIiwiZ2V0UHVibGljU3VwcG9ydFRpY2tldCIsImVtYWlsQWRkcmVzcyIsIm51bWJlciIsImdldFN1cHBvcnRUaWNrZXRzIiwiZmlsdGVycyIsInVwZGF0ZVN1cHBvcnRUaWNrZXRTdGF0dXMiLCJyZXNvbHV0aW9uU3VtbWFyeSIsInByZXZpb3VzIiwiY29tcGxldGVkQXQiLCJkb25lQXQiLCJyZXNvbHZlZEF0IiwiY2xvc2VkQXQiLCJsYXN0VXBkYXRlRGV0YWlscyIsImZyb21WYWx1ZSIsImNyZWF0ZUN1c3RvbWVyTm90aWZpY2F0aW9uIiwiYm9keSIsInVwZGF0ZVN1cHBvcnRUaWNrZXRQcm9ncmVzcyIsIm1hcmtkb3duIiwiYWRkU3VwcG9ydFRpY2tldE1lc3NhZ2UiLCJhdXRob3JVc2VySWQiLCJ2aXNpYmlsaXR5IiwibWVzc2FnZUtleSIsInN1cHBvcnRUaWNrZXRNZXNzYWdlSWQiLCJtZXNzYWdlIiwic2F2ZWRNZXNzYWdlIiwiZ2V0U3VwcG9ydFRpY2tldE1lc3NhZ2VzIiwiZXZlbnRLZXkiLCJzdXBwb3J0VGlja2V0RXZlbnRJZCIsImV2ZW50Iiwic2F2ZWRFdmVudCIsImdldFN1cHBvcnRUaWNrZXRFdmVudHMiLCJub3RpZmljYXRpb25LZXkiLCJjdXN0b21lck5vdGlmaWNhdGlvbklkIiwibm90aWZpY2F0aW9uIiwiQ1VTVE9NRVJfTk9USUZJQ0FUSU9OUyIsInNhdmVkTm90aWZpY2F0aW9uIiwiSEFTX0NVU1RPTUVSX05PVElGSUNBVElPTiIsImdldEN1c3RvbWVyTm90aWZpY2F0aW9uc0J5VXNlciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsVUFBVSxFQUFFQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUMxRixTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFRQyxPQUFPLFFBQU8sZUFBZTtBQUVyQyxTQUFRQyxXQUFXLEVBQUVDLEtBQUssUUFBTyw4QkFBOEI7QUFDL0QsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsS0FBSyxRQUFPLDRCQUE0QjtBQUNoRCxTQUFRQyxXQUFXLFFBQU8sMkJBQTJCO0FBQ3JELFNBQVFDLE9BQU8sUUFBTyxhQUFhO0FBdUJuQyxNQUFNQyxNQUFNLElBQWNDLEtBQUtELEdBQUc7QUFDbEMsTUFBTUUsYUFBYSxDQUFDQyxPQUFpQlYsUUFBUVU7QUFDN0MsTUFBTUMsU0FBUyxDQUFDQyxRQUFRLEVBQUUsR0FBYWhCLFFBQVFpQixPQUFPRDtBQUN0RCxNQUFNRSxRQUFRLENBQUNDLGdCQUF3QkMsTUFBTSxFQUFFLEdBQWEsR0FBR0QsZUFBZSxDQUFDLEVBQUVKLE9BQU9LLE1BQU07QUFDOUYsTUFBTUMsY0FBYyxDQUFDQyxRQUFnQkMsS0FBSyxFQUFFLEdBQWF4QixXQUFXLEdBQUd1QixPQUFPLENBQUMsRUFBRUwsT0FBT00sS0FBSyxFQUFFO0FBQy9GLE1BQU1DLGNBQWMsQ0FBQ1IsT0FBZ0JTLFNBQVMsR0FBRyxHQUFhdkIsWUFBWWUsT0FBT0QsU0FBUyxLQUFLUztBQUMvRixNQUFNQyxrQkFBa0IsQ0FBQ1YsT0FBZ0JTLFNBQVMsR0FBRyxHQUFhUixPQUFPRCxTQUFTLElBQUlXLElBQUksR0FBR0MsS0FBSyxDQUFDLEdBQUdIO0FBQ3RHLE1BQU1JLDJCQUEyQixPQUFPQyxV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
|
|
928
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvY3JtLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI2LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlSWQsIHBhcnNlUGhvbmUsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge2xpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7aXNBZG1pblVzZXJ9IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25VdGlscy5qcyc7XG5pbXBvcnQge3Nlc1NlbmR9IGZyb20gJy4vZW1haWwuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEN1c3RvbWVyTm90aWZpY2F0aW9uVHlwZSxcbiAgQ3VzdG9tZXJPcmRlclR5cGUsXG4gIENybUNhbXBhaWduSW5wdXQsXG4gIENybUNhbXBhaWduVHlwZSxcbiAgQ3JtQ29udGFjdEZpbHRlcixcbiAgQ3JtRm9ybVN1Ym1pc3Npb25JbnB1dCxcbiAgQ3JtRm9ybVN1Ym1pc3Npb25UeXBlLFxuICBNYWlsaW5nTGlzdFR5cGUsXG4gIFB1YmxpY1N1cHBvcnRUaWNrZXRGZWVkLFxuICBQdWJsaWNTdXBwb3J0VGlja2V0SW5wdXQsXG4gIFNob3BpZnlDdXN0b21lck9yZGVySW5wdXQsXG4gIFN1cHBvcnRUaWNrZXRFdmVudFR5cGUsXG4gIFN1cHBvcnRUaWNrZXRNZXNzYWdlVHlwZSxcbiAgU3VwcG9ydFRpY2tldFN0YXR1cyxcbiAgU3VwcG9ydFRpY2tldFR5cGVEYXRhXG59IGZyb20gJy4uL3R5cGVzL2NybS50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcblxuY29uc3Qgbm93ID0gKCk6IG51bWJlciA9PiBEYXRlLm5vdygpO1xuY29uc3QgY29sbGVjdGlvbiA9IChuYW1lOiBzdHJpbmcpID0+IGxpdGVyYWwobmFtZSk7XG5jb25zdCBkb2NLZXkgPSAodmFsdWUgPSAnJyk6IHN0cmluZyA9PiBwYXJzZUlkKFN0cmluZyh2YWx1ZSkpO1xuY29uc3QgZG9jSWQgPSAoY29sbGVjdGlvbk5hbWU6IHN0cmluZywga2V5ID0gJycpOiBzdHJpbmcgPT4gYCR7Y29sbGVjdGlvbk5hbWV9LyR7ZG9jS2V5KGtleSl9YDtcbmNvbnN0IGV4dGVybmFsS2V5ID0gKHByZWZpeDogc3RyaW5nLCBpZCA9ICcnKTogc3RyaW5nID0+IGNyZWF0ZUhhc2goYCR7cHJlZml4fS0ke1N0cmluZyhpZCl9YCwgbnVsbCk7XG5jb25zdCBjbGVhblN0cmluZyA9ICh2YWx1ZTogdW5rbm93biwgbGVuZ3RoID0gNjQwKTogc3RyaW5nID0+IHBhcnNlU3RyaW5nKFN0cmluZyh2YWx1ZSB8fCAnJyksIGxlbmd0aCk7XG5jb25zdCBjbGVhbkV4dGVybmFsSWQgPSAodmFsdWU6IHVua25vd24sIGxlbmd0aCA9IDMyMCk6IHN0cmluZyA9PiBTdHJpbmcodmFsdWUgfHwgJycpLnRyaW0oKS5zbGljZSgwLCBsZW5ndGgpO1xuY29uc3QgZW5zdXJlRG9jdW1lbnRDb2xsZWN0aW9uID0gYXN5bmMgKGRhdGFiYXNlOiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VEYj4sIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB0YXJnZXQgPSBkYXRhYmFzZS5jb2xsZWN0aW9uKG5hbWUpO1xuICBpZihhd2FpdCB0YXJnZXQuZXhpc3RzKCkpIHJldHVybjtcbiAgdHJ5IHtcbiAgICBhd2FpdCBkYXRhYmFzZS5jcmVhdGVDb2xsZWN0aW9uKG5hbWUpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoIWF3YWl0IHRhcmdldC5leGlzdHMoKSkgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5jb25zdCBlbnN1cmVFZGdlQ29sbGVjdGlvbiA9IGFzeW5jIChkYXRhYmFzZTogUmV0dXJuVHlwZTx0eXBlb2YgdXNlRGI+LCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgdGFyZ2V0ID0gZGF0YWJhc2UuY29sbGVjdGlvbihuYW1lKTtcbiAgaWYoYXdhaXQgdGFyZ2V0LmV4aXN0cygpKSByZXR1cm47XG4gIHRyeSB7XG4gICAgYXdhaXQgZGF0YWJhc2UuY3JlYXRlRWRnZUNvbGxlY3Rpb24obmFtZSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZighYXdhaXQgdGFyZ2V0LmV4aXN0cygpKSB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgcmVxdWlyZUNybUFkbWluID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiB2b2lkID0+IHtcbiAgaWYoIWlzQWRtaW5Vc2VyKGNvbnRleHQuc2Vzc2lvbiBhcyBhbnkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhZG1pbmlzdHJhdG9yX2FjY2Vzc19yZXF1aXJlZCcpO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IHJlcXVpcmVDcm1BZG1pbmlzdHJhdG9yID0gcmVxdWlyZUNybUFkbWluO1xuXG5jb25zdCBhbGxvd2VkQ29udGFjdEZpZWxkcyA9IG5ldyBTZXQoWydlbWFpbCcsICdmaXJzdE5hbWUnLCAnbGFzdE5hbWUnLCAncGhvbmUnLCAnbWFya2V0aW5nQ29uc2VudFNvdXJjZScsICdjcm1Tb3VyY2UnXSk7XG5jb25zdCBzdXBwb3J0UHJpb3JpdGllcyA9IG5ldyBTZXQoWydsb3cnLCAnbm9ybWFsJywgJ2hpZ2gnLCAndXJnZW50J10pO1xuY29uc3Qgc3VwcG9ydFN0YXR1c2VzID0gbmV3IFNldChbJ3N1Ym1pdHRlZCcsICdpbl9wcm9ncmVzcycsICdkb25lJywgJ2NvbXBsZXRlZCddKTtcbmNvbnN0IHN1cHBvcnRUeXBlcyA9IG5ldyBTZXQoWydkZWxpdmVyeV9pc3N1ZScsICdyZWZ1bmRfcmVxdWVzdCcsICdidWdfcmVwb3J0JywgJ2FjY291bnRfaXNzdWUnLCAnZ2VuZXJhbF9zdXBwb3J0J10pO1xuY29uc3QgZW1haWxQYXR0ZXJuID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC91O1xuY29uc3QgZXNjYXBlSHRtbCA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHZhbHVlLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7Jyk7XG5jb25zdCBzYW5pdGl6ZUh0bWwgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4gU3RyaW5nKHZhbHVlIHx8ICcnKVxuICAucmVwbGFjZSgvPChzY3JpcHR8aWZyYW1lfG9iamVjdHxlbWJlZClcXGJbXj5dKj5bXFxzXFxTXSo/PFxcL1xcMT4vZ2ksICcnKVxuICAucmVwbGFjZSgvXFxzb25cXHcrXFxzKj1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteXFxzPl0rKS9naSwgJycpO1xuY29uc3Qgc2FuaXRpemVDc3MgPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4gU3RyaW5nKHZhbHVlIHx8ICcnKVxuICAucmVwbGFjZSgvPFxcLz9zdHlsZVxcYltePl0qPi9naSwgJycpXG4gIC5yZXBsYWNlKC9AaW1wb3J0XFxzK1teO10rOz8vZ2ksICcnKVxuICAucmVwbGFjZSgvdXJsXFxzKlxcKFxccyooWydcIl0/KWphdmFzY3JpcHQ6W14pXStcXCkvZ2ksICcnKTtcbmNvbnN0IGh0bWxUb1RleHQgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB2YWx1ZS5yZXBsYWNlKC88W14+XSs+L2csICcgJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnRyaW0oKTtcbmNvbnN0IGNodW5rID0gPFQ+KGl0ZW1zOiByZWFkb25seSBUW10sIHNpemU6IG51bWJlcik6IFRbXVtdID0+IHtcbiAgY29uc3QgZ3JvdXBzOiBUW11bXSA9IFtdO1xuICBmb3IobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtcy5sZW5ndGg7IGluZGV4ICs9IHNpemUpIGdyb3Vwcy5wdXNoKGl0ZW1zLnNsaWNlKGluZGV4LCBpbmRleCArIHNpemUpKTtcbiAgcmV0dXJuIGdyb3Vwcztcbn07XG5cbmV4cG9ydCBjb25zdCBzdWJtaXRDcm1Gb3JtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogQ3JtRm9ybVN1Ym1pc3Npb25JbnB1dFxuKTogUHJvbWlzZTxDcm1Gb3JtU3VibWlzc2lvblR5cGU+ID0+IHtcbiAgaWYodHlwZW9mIGlucHV0Py5tYXJrZXRpbmdPcHRJbiAhPT0gJ2Jvb2xlYW4nKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX21hcmtldGluZ09wdEluJyk7XG4gIGNvbnN0IGVtYWlsID0gY2xlYW5TdHJpbmcoaW5wdXQuZW1haWwsIDMyMCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcmF3UGhvbmUgPSBjbGVhblN0cmluZyhpbnB1dC5waG9uZSwgODApO1xuICBjb25zdCBwaG9uZSA9IHJhd1Bob25lID8gKHBhcnNlUGhvbmUocmF3UGhvbmUpIHx8IHJhd1Bob25lKSA6ICcnO1xuICBpZighZW1haWwgJiYgIXBob25lKSB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX2VtYWlsX29yX3Bob25lJyk7XG5cbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGF3YWl0IGVuc3VyZURvY3VtZW50Q29sbGVjdGlvbihkYXRhYmFzZSwgQ09MTEVDVElPTlMuQ1JNX0ZPUk1fU1VCTUlTU0lPTlMpO1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3Qgc291cmNlID0gY2xlYW5TdHJpbmcoaW5wdXQuc291cmNlIHx8IGlucHV0LmZvcm1JZCB8fCAnZm9ybScsIDE2MCk7XG4gIGNvbnN0IHZhbHVlcyA9IGlucHV0LnZhbHVlcyB8fCB7fTtcbiAgY29uc3QgZmlyc3ROYW1lID0gY2xlYW5TdHJpbmcoaW5wdXQuZmlyc3ROYW1lIHx8IHZhbHVlcy5maXJzdE5hbWUsIDE2MCk7XG4gIGNvbnN0IGxhc3ROYW1lID0gY2xlYW5TdHJpbmcoaW5wdXQubGFzdE5hbWUgfHwgdmFsdWVzLmxhc3ROYW1lLCAxNjApO1xuICBjb25zdCBnZW5lcmF0ZWRVc2VyS2V5ID0gY3JlYXRlSGFzaChlbWFpbCB8fCBwaG9uZSwgbnVsbCk7XG4gIGNvbnN0IGNvbnNlbnQgPSBpbnB1dC5tYXJrZXRpbmdPcHRJblxuICAgID8ge21hcmtldGluZ09wdEluQXQ6IHRpbWVzdGFtcCwgbWFya2V0aW5nT3B0T3V0QXQ6IG51bGx9XG4gICAgOiB7bWFya2V0aW5nT3B0T3V0QXQ6IHRpbWVzdGFtcH07XG4gIGNvbnN0IHVzZXJJbnNlcnQgPSB7XG4gICAgX2tleTogZ2VuZXJhdGVkVXNlcktleSxcbiAgICBhY3RpdmU6IGZhbHNlLFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgZW1haWwsXG4gICAgZmlyc3ROYW1lLFxuICAgIGxhc3ROYW1lLFxuICAgIG1haWxpbmdMaXN0OiBpbnB1dC5tYXJrZXRpbmdPcHRJbixcbiAgICBtYXJrZXRpbmdDb25zZW50U291cmNlOiBzb3VyY2UsXG4gICAgbWFya2V0aW5nT3B0SW46IGlucHV0Lm1hcmtldGluZ09wdEluLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgcGhvbmUsXG4gICAgdHlwZTogJ2NybUNvbnRhY3QnLFxuICAgIHVzZXJBY2Nlc3M6IDAsXG4gICAgdXNlcklkOiBnZW5lcmF0ZWRVc2VyS2V5LFxuICAgIHZlcmlmaWVkRW1haWw6IGZhbHNlLFxuICAgIHZlcmlmaWVkUGhvbmU6IGZhbHNlLFxuICAgIC4uLmNvbnNlbnRcbiAgfTtcbiAgY29uc3QgdXNlclVwZGF0ZSA9IHtcbiAgICAuLi4oZW1haWwgPyB7ZW1haWx9IDoge30pLFxuICAgIC4uLihmaXJzdE5hbWUgPyB7Zmlyc3ROYW1lfSA6IHt9KSxcbiAgICAuLi4obGFzdE5hbWUgPyB7bGFzdE5hbWV9IDoge30pLFxuICAgIC4uLihwaG9uZSA/IHtwaG9uZX0gOiB7fSksXG4gICAgbWFpbGluZ0xpc3Q6IGlucHV0Lm1hcmtldGluZ09wdEluLFxuICAgIG1hcmtldGluZ0NvbnNlbnRTb3VyY2U6IHNvdXJjZSxcbiAgICBtYXJrZXRpbmdPcHRJbjogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAuLi5jb25zZW50XG4gIH07XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgTEVUIGV4aXN0aW5nID0gRklSU1QoXG4gICAgICBGT1IgdXNlciBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgICAgICBGSUxURVIgKCR7ZW1haWx9ICE9IFwiXCIgJiYgTE9XRVIodXNlci5lbWFpbCB8fCBcIlwiKSA9PSAke2VtYWlsfSlcbiAgICAgICAgICB8fCAoJHtwaG9uZX0gIT0gXCJcIiAmJiB1c2VyLnBob25lID09ICR7cGhvbmV9KVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiB1c2VyXG4gICAgKVxuICAgIExFVCB1c2VyS2V5ID0gZXhpc3RpbmcgPyBleGlzdGluZy5fa2V5IDogJHtnZW5lcmF0ZWRVc2VyS2V5fVxuICAgIFVQU0VSVCB7X2tleTogdXNlcktleX1cbiAgICBJTlNFUlQgTUVSR0UoJHt1c2VySW5zZXJ0fSwge19rZXk6IHVzZXJLZXksIHVzZXJJZDogdXNlcktleX0pXG4gICAgVVBEQVRFICR7dXNlclVwZGF0ZX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgVXNlclR5cGUgfCBudWxsO1xuICBjb25zdCB1c2VySWQgPSBkb2NLZXkoU3RyaW5nKHVzZXI/Ll9rZXkgfHwgdXNlcj8udXNlcklkIHx8IGdlbmVyYXRlZFVzZXJLZXkpKTtcblxuICBjb25zdCBzdWJtaXNzaW9uSWQgPSBjcmVhdGVIYXNoKGBjcm0tc3VibWlzc2lvbi0ke3RpbWVzdGFtcH0tJHtlbWFpbH0tJHtwaG9uZX1gLCBudWxsKTtcbiAgY29uc3Qgc3VibWlzc2lvbiA9IHtcbiAgICBfa2V5OiBzdWJtaXNzaW9uSWQsXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBlbWFpbCxcbiAgICBmb3JtSWQ6IGNsZWFuU3RyaW5nKGlucHV0LmZvcm1JZCwgMTYwKSxcbiAgICBtYXJrZXRpbmdPcHRJbjogaW5wdXQubWFya2V0aW5nT3B0SW4sXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBwaG9uZSxcbiAgICBzb3VyY2UsXG4gICAgc3VibWlzc2lvbklkLFxuICAgIHVzZXJJZCxcbiAgICB2YWx1ZXNcbiAgfTtcbiAgY29uc3Qgc2F2ZWQgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxgXG4gICAgSU5TRVJUICR7c3VibWlzc2lvbn0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNSTV9GT1JNX1NVQk1JU1NJT05TKX1cbiAgICBSRVRVUk4gTkVXXG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG5cbiAgcmV0dXJuIHNhdmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENybUZvcm1TdWJtaXNzaW9ucyA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxDcm1Gb3JtU3VibWlzc2lvblR5cGVbXT4gPT4ge1xuICByZXF1aXJlQ3JtQWRtaW4oY29udGV4dCk7XG4gIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICBpZighYXdhaXQgZGF0YWJhc2UuY29sbGVjdGlvbihDT0xMRUNUSU9OUy5DUk1fRk9STV9TVUJNSVNTSU9OUykuZXhpc3RzKCkpIHJldHVybiBbXTtcbiAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgICAgRk9SIHN1Ym1pc3Npb24gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNSTV9GT1JNX1NVQk1JU1NJT05TKX1cbiAgICAgICAgU09SVCBzdWJtaXNzaW9uLmFkZGVkIERFU0NcbiAgICAgICAgTElNSVQgNTAwXG4gICAgICAgIFJFVFVSTiBzdWJtaXNzaW9uXG4gICAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xuICB9KSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENybUNvbnRhY3RzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZpbHRlcjogQ3JtQ29udGFjdEZpbHRlciA9IHt9KTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIHJlcXVpcmVDcm1BZG1pbihjb250ZXh0KTtcbiAgY29uc3Qgc2VhcmNoID0gY2xlYW5TdHJpbmcoZmlsdGVyLnNlYXJjaCwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBmaWVsZCA9IGFsbG93ZWRDb250YWN0RmllbGRzLmhhcyhmaWx0ZXIuZmllbGQgfHwgJycpID8gU3RyaW5nKGZpbHRlci5maWVsZCkgOiAnJztcbiAgY29uc3QgdmFsdWUgPSBjbGVhblN0cmluZyhmaWx0ZXIudmFsdWUsIDMyMCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgb3B0ZWRJbk9ubHkgPSBmaWx0ZXIub3B0ZWRJbk9ubHkgIT09IGZhbHNlO1xuICBjb25zdCBvcGVyYXRvciA9IFsnY29udGFpbnMnLCAnZXF1YWxzJywgJ2V4aXN0cyddLmluY2x1ZGVzKGZpbHRlci5vcGVyYXRvciB8fCAnJykgPyBmaWx0ZXIub3BlcmF0b3IgOiAnY29udGFpbnMnO1xuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBGT1IgdXNlciBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgICAgRklMVEVSICR7IW9wdGVkSW5Pbmx5fSB8fCB1c2VyLm1hcmtldGluZ09wdEluID09IHRydWVcbiAgICAgIEZJTFRFUiAkeyFzZWFyY2h9IHx8IENPTlRBSU5TKExPV0VSKENPTkNBVF9TRVBBUkFUT1IoXCIgXCIsIHVzZXIuZmlyc3ROYW1lLCB1c2VyLmxhc3ROYW1lLCB1c2VyLmVtYWlsLCB1c2VyLnBob25lKSksICR7c2VhcmNofSlcbiAgICAgIEZJTFRFUiAkeyFmaWVsZH0gfHwgKCR7b3BlcmF0b3IgPT09ICdleGlzdHMnfVxuICAgICAgICA/IEhBUyh1c2VyLCAke2ZpZWxkfSlcbiAgICAgICAgOiAoJHtvcGVyYXRvciA9PT0gJ2VxdWFscyd9ID8gTE9XRVIoVE9fU1RSSU5HKHVzZXJbJHtmaWVsZH1dKSkgPT0gJHt2YWx1ZX0gOiBDT05UQUlOUyhMT1dFUihUT19TVFJJTkcodXNlclske2ZpZWxkfV0pKSwgJHt2YWx1ZX0pKSlcbiAgICAgIFNPUlQgdXNlci5hZGRlZCBERVNDXG4gICAgICBMSU1JVCAxMDAwXG4gICAgICBSRVRVUk4gTUVSR0UodXNlciwge2NybVNvdXJjZTogdXNlci5tYXJrZXRpbmdDb25zZW50U291cmNlfSlcbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlbmRDcm1DYW1wYWlnbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IENybUNhbXBhaWduSW5wdXRcbik6IFByb21pc2U8Q3JtQ2FtcGFpZ25UeXBlPiA9PiB7XG4gIHJlcXVpcmVDcm1BZG1pbihjb250ZXh0KTtcbiAgY29uc3Qgc3ViamVjdCA9IGNsZWFuU3RyaW5nKGlucHV0LnN1YmplY3QsIDMyMCk7XG4gIGNvbnN0IGJvZHlIdG1sID0gc2FuaXRpemVIdG1sKGlucHV0Lmh0bWwpO1xuICBjb25zdCBjc3MgPSBzYW5pdGl6ZUNzcyhpbnB1dC5jc3MpO1xuICBpZighc3ViamVjdCB8fCAhYm9keUh0bWwpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfY2FtcGFpZ25fY29udGVudCcpO1xuXG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBhd2FpdCBnZXRDcm1Db250YWN0cyhjb250ZXh0LCB7Li4uaW5wdXQuZmlsdGVyLCBvcHRlZEluT25seTogdHJ1ZX0pO1xuICBjb25zdCBzZWxlY3RlZElkcyA9IG5ldyBTZXQoKGlucHV0LnVzZXJJZHMgfHwgW10pLm1hcCgoaWQpID0+IGRvY0tleShpZCkpKTtcbiAgY29uc3QgcmVjaXBpZW50cyA9IGNhbmRpZGF0ZXMuZmlsdGVyKCh1c2VyKSA9PlxuICAgIEJvb2xlYW4odXNlci5lbWFpbCkgJiYgKCFzZWxlY3RlZElkcy5zaXplIHx8IHNlbGVjdGVkSWRzLmhhcyhkb2NLZXkodXNlci51c2VySWQgfHwgdXNlci5fa2V5KSkpKTtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IGNhbXBhaWduSWQgPSBjcmVhdGVIYXNoKGBjcm0tY2FtcGFpZ24tJHt0aW1lc3RhbXB9LSR7c3ViamVjdH1gLCBudWxsKTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IGNhbXBhaWduID0ge1xuICAgIF9rZXk6IGNhbXBhaWduSWQsXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBjYW1wYWlnbklkLFxuICAgIGNzcyxcbiAgICBmYWlsZWRDb3VudDogMCxcbiAgICBodG1sOiBib2R5SHRtbCxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHJlY2lwaWVudENvdW50OiByZWNpcGllbnRzLmxlbmd0aCxcbiAgICBzZW50Q291bnQ6IDAsXG4gICAgc3RhdHVzOiAnc2VuZGluZycsXG4gICAgc3ViamVjdFxuICB9O1xuICBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxgSU5TRVJUICR7Y2FtcGFpZ259IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DUk1fQ0FNUEFJR05TKX1gKTtcblxuICBsZXQgZmFpbGVkQ291bnQgPSAwO1xuICBsZXQgc2VudENvdW50ID0gMDtcbiAgZm9yKGNvbnN0IHJlY2lwaWVudHNCYXRjaCBvZiBjaHVuayhyZWNpcGllbnRzLCA1MCkpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VzU2VuZCh7XG4gICAgICAgIERlc3RpbmF0aW9uOiB7QmNjQWRkcmVzc2VzOiByZWNpcGllbnRzQmF0Y2gubWFwKChyZWNpcGllbnQpID0+IFN0cmluZyhyZWNpcGllbnQuZW1haWwpKX0sXG4gICAgICAgIE1lc3NhZ2U6IHtcbiAgICAgICAgICBCb2R5OiB7SHRtbDoge0RhdGE6IGA8c3R5bGU+JHtjc3N9PC9zdHlsZT4ke2JvZHlIdG1sfWB9LCBUZXh0OiB7RGF0YTogaHRtbFRvVGV4dChib2R5SHRtbCl9fSxcbiAgICAgICAgICBTdWJqZWN0OiB7RGF0YTogc3ViamVjdH1cbiAgICAgICAgfSxcbiAgICAgICAgU291cmNlOiBgXCIke2NvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5zdXBwb3J0TmFtZSB8fCAnUmVha3Rvcid9XCIgPCR7Y29udGV4dC5jb25maWc/LmRldGFpbHM/LnN1cHBvcnRFbWFpbCB8fCAnc3VwcG9ydEByZWFrdG9yLmlvJ30+YFxuICAgICAgfSk7XG4gICAgICBzZW50Q291bnQgKz0gcmVjaXBpZW50c0JhdGNoLmxlbmd0aDtcbiAgICB9IGNhdGNoKF9lcnJvcikge1xuICAgICAgZmFpbGVkQ291bnQgKz0gcmVjaXBpZW50c0JhdGNoLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gey4uLmNhbXBhaWduLCBmYWlsZWRDb3VudCwgc2VudEF0OiBub3coKSwgc2VudENvdW50LCBzdGF0dXM6IGZhaWxlZENvdW50ID8gKHNlbnRDb3VudCA/ICdwYXJ0aWFsJyA6ICdmYWlsZWQnKSA6ICdzZW50J307XG4gIGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbGBcbiAgICBVUERBVEUgJHtjYW1wYWlnbklkfSBXSVRIICR7e1xuICAgICAgZmFpbGVkQ291bnQ6IHJlc3VsdC5mYWlsZWRDb3VudCxcbiAgICAgIG1vZGlmaWVkOiByZXN1bHQuc2VudEF0LFxuICAgICAgc2VudEF0OiByZXN1bHQuc2VudEF0LFxuICAgICAgc2VudENvdW50OiByZXN1bHQuc2VudENvdW50LFxuICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzXG4gICAgfX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNSTV9DQU1QQUlHTlMpfVxuICBgKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IHNhdmVFZGdlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBlZGdlQ29sbGVjdGlvbjogc3RyaW5nLFxuICBlZGdlS2V5OiBzdHJpbmcsXG4gIGZyb206IHN0cmluZyxcbiAgdG86IHN0cmluZyxcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBlZGdlID0ge1xuICAgIF9mcm9tOiBmcm9tLFxuICAgIF9rZXk6IGVkZ2VLZXksXG4gICAgX3RvOiB0byxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgLi4uZGF0YVxuICB9O1xuICBjb25zdCBxdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgVVBTRVJUIHtfa2V5OiAke2VkZ2VLZXl9fVxuICAgIElOU0VSVCAke2VkZ2V9XG4gICAgVVBEQVRFICR7ZGF0YX0gSU4gJHtjb2xsZWN0aW9uKGVkZ2VDb2xsZWN0aW9uKX1cbiAgYDtcblxuICBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU1haWxpbmdMaXN0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbnB1dDogUGFydGlhbDxNYWlsaW5nTGlzdFR5cGU+XG4pOiBQcm9taXNlPE1haWxpbmdMaXN0VHlwZT4gPT4ge1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgbWFpbGluZ0xpc3RJZCA9IGRvY0tleShTdHJpbmcoaW5wdXQ/Lm1haWxpbmdMaXN0SWQgfHwgY3JlYXRlSGFzaChgbWFpbGluZy1saXN0LSR7aW5wdXQ/Lm5hbWV9LSR7dGltZXN0YW1wfWApKSk7XG4gIGNvbnN0IG1haWxpbmdMaXN0ID0ge1xuICAgIF9rZXk6IG1haWxpbmdMaXN0SWQsXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBjcmVhdGVkQnlVc2VySWQ6IGRvY0tleShTdHJpbmcoY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSksXG4gICAgZGVzY3JpcHRpb246IGNsZWFuU3RyaW5nKGlucHV0Py5kZXNjcmlwdGlvbiwgMjAwMCksXG4gICAgbWFpbGluZ0xpc3RJZCxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIG5hbWU6IGNsZWFuU3RyaW5nKGlucHV0Py5uYW1lLCAxNjApLFxuICAgIHN0YXR1czogaW5wdXQ/LnN0YXR1cyB8fCAnYWN0aXZlJ1xuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBVUFNFUlQge19rZXk6ICR7bWFpbGluZ0xpc3RJZH19XG4gICAgSU5TRVJUICR7bWFpbGluZ0xpc3R9XG4gICAgVVBEQVRFICR7e1xuICAgICAgZGVzY3JpcHRpb246IG1haWxpbmdMaXN0LmRlc2NyaXB0aW9uLFxuICAgICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgIG5hbWU6IG1haWxpbmdMaXN0Lm5hbWUsXG4gICAgICBzdGF0dXM6IG1haWxpbmdMaXN0LnN0YXR1c1xuICAgIH19IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNYWlsaW5nTGlzdHMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8TWFpbGluZ0xpc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIGxpc3QgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLk1BSUxJTkdfTElTVFMpfVxuICAgICAgRklMVEVSIGxpc3Quc3RhdHVzICE9IFwiYXJjaGl2ZWRcIlxuICAgICAgU09SVCBsaXN0LmFkZGVkIERFU0NcbiAgICAgIFJFVFVSTiBsaXN0XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXJUb01haWxpbmdMaXN0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgbWFpbGluZ0xpc3RJZDogc3RyaW5nLFxuICBzb3VyY2UgPSAnbWFudWFsJ1xuKTogUHJvbWlzZTxNYWlsaW5nTGlzdFR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IHVzZXJLZXkgPSBkb2NLZXkodXNlcklkKTtcbiAgY29uc3QgbGlzdEtleSA9IGRvY0tleShtYWlsaW5nTGlzdElkKTtcbiAgY29uc3QgZWRnZUtleSA9IGNyZWF0ZUhhc2goYGhhc01haWxpbmdMaXN0LSR7dXNlcktleX0tJHtsaXN0S2V5fWApO1xuXG4gIGF3YWl0IHNhdmVFZGdlKFxuICAgIGNvbnRleHQsXG4gICAgRURHRVMuSEFTX01BSUxJTkdfTElTVCxcbiAgICBlZGdlS2V5LFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB1c2VyS2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5NQUlMSU5HX0xJU1RTLCBsaXN0S2V5KSxcbiAgICB7XG4gICAgICBhZGRlZEJ5VXNlcklkOiBkb2NLZXkoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpLFxuICAgICAgc291cmNlOiBjbGVhblN0cmluZyhzb3VyY2UsIDgwKSxcbiAgICAgIHN0YXR1czogJ2FjdGl2ZSdcbiAgICB9XG4gICk7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKVxuICAgIC5xdWVyeShhcWxgUkVUVVJOIERPQ1VNRU5UKCR7ZG9jSWQoQ09MTEVDVElPTlMuTUFJTElOR19MSVNUUywgbGlzdEtleSl9KWApXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlVXNlckZyb21NYWlsaW5nTGlzdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIG1haWxpbmdMaXN0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHVzZXJLZXkgPSBkb2NLZXkodXNlcklkKTtcbiAgY29uc3QgbGlzdEtleSA9IGRvY0tleShtYWlsaW5nTGlzdElkKTtcbiAgY29uc3QgZWRnZUtleSA9IGNyZWF0ZUhhc2goYGhhc01haWxpbmdMaXN0LSR7dXNlcktleX0tJHtsaXN0S2V5fWApO1xuICBjb25zdCB1cGRhdGUgPSB7XG4gICAgbW9kaWZpZWQ6IG5vdygpLFxuICAgIHJlbW92ZWRBdDogbm93KCksXG4gICAgc3RhdHVzOiAncmVtb3ZlZCdcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgVVBEQVRFICR7ZWRnZUtleX0gV0lUSCAke3VwZGF0ZX0gSU4gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19NQUlMSU5HX0xJU1QpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpLnRoZW4oQm9vbGVhbik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TWFpbGluZ0xpc3RVc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbWFpbGluZ0xpc3RJZDogc3RyaW5nXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgbGlzdElkID0gZG9jSWQoQ09MTEVDVElPTlMuTUFJTElOR19MSVNUUywgbWFpbGluZ0xpc3RJZCk7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB1c2VyLCBlZGdlIElOIDEuLjEgSU5CT1VORCAke2xpc3RJZH0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19NQUlMSU5HX0xJU1QpfVxuICAgICAgRklMVEVSIGVkZ2Uuc3RhdHVzID09IFwiYWN0aXZlXCJcbiAgICAgIFNPUlQgdXNlci5lbWFpbCBBU0NcbiAgICAgIFJFVFVSTiB1c2VyXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJzQnlQdXJjaGFzZWRQcm9kdWN0ID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwcm9kdWN0SWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHByb2R1Y3RLZXkgPSBleHRlcm5hbEtleSgnc2hvcGlmeS1wcm9kdWN0JywgcHJvZHVjdElkKTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIG9yZGVyIElOIDEuLjEgSU5CT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlNIT1BJRllfUFJPRFVDVFMsIHByb2R1Y3RLZXkpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1BVUkNIQVNFRF9QUk9EVUNUKX1cbiAgICAgIEZPUiB1c2VyIElOIDEuLjEgSU5CT1VORCBvcmRlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19DVVNUT01FUl9PUkRFUil9XG4gICAgICAgIFNPUlQgdXNlci5lbWFpbCBBU0NcbiAgICAgICAgUkVUVVJOIERJU1RJTkNUIHVzZXJcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RWxpZ2libGVNYWlsaW5nVXNlcnMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIG9wdGlvbnM6IHtyZWFkb25seSBtYWlsaW5nTGlzdElkPzogc3RyaW5nOyByZWFkb25seSBwcm9kdWN0SWQ/OiBzdHJpbmc7IHJlYWRvbmx5IGV4Y2x1ZGVPcGVuU3VwcG9ydFRpY2tldHM/OiBib29sZWFufSA9IHt9XG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgZXhjbHVkZU9wZW5TdXBwb3J0VGlja2V0cyA9IG9wdGlvbnMuZXhjbHVkZU9wZW5TdXBwb3J0VGlja2V0cyAhPT0gZmFsc2U7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIExFVCBiYXNlVXNlcnMgPSAoXG4gICAgICBGT1IgdXNlciBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgICAgICBGSUxURVIgdXNlci5tYXJrZXRpbmdPcHRJbiA9PSB0cnVlXG4gICAgICAgIEZJTFRFUiB1c2VyLmVtYWlsICE9IG51bGwgJiYgdXNlci5lbWFpbCAhPSBcIlwiXG4gICAgICAgIEZJTFRFUiB1c2VyLmVtYWlsRGVsaXZlcnlTdGF0dXMgPT0gbnVsbCB8fCB1c2VyLmVtYWlsRGVsaXZlcnlTdGF0dXMgPT0gXCJ2YWxpZFwiXG4gICAgICAgICR7b3B0aW9ucy5tYWlsaW5nTGlzdElkID8gYXFsYFxuICAgICAgICAgIEZJTFRFUiBMRU5HVEgoXG4gICAgICAgICAgICBGT1IgbGlzdCBJTiAxLi4xIE9VVEJPVU5EIHVzZXIuX2lkICR7Y29sbGVjdGlvbihFREdFUy5IQVNfTUFJTElOR19MSVNUKX1cbiAgICAgICAgICAgICAgRklMVEVSIGxpc3QuX2tleSA9PSAke2RvY0tleShvcHRpb25zLm1haWxpbmdMaXN0SWQpfVxuICAgICAgICAgICAgICBSRVRVUk4gbGlzdFxuICAgICAgICAgICkgPiAwXG4gICAgICAgIGAgOiBhcWxgYH1cbiAgICAgICAgJHtvcHRpb25zLnByb2R1Y3RJZCA/IGFxbGBcbiAgICAgICAgICBGSUxURVIgTEVOR1RIKFxuICAgICAgICAgICAgRk9SIG9yZGVyIElOIDEuLjEgT1VUQk9VTkQgdXNlci5faWQgJHtjb2xsZWN0aW9uKEVER0VTLkhBU19DVVNUT01FUl9PUkRFUil9XG4gICAgICAgICAgICAgIEZPUiBwcm9kdWN0IElOIDEuLjEgT1VUQk9VTkQgb3JkZXIuX2lkICR7Y29sbGVjdGlvbihFREdFUy5IQVNfUFVSQ0hBU0VEX1BST0RVQ1QpfVxuICAgICAgICAgICAgICAgIEZJTFRFUiBwcm9kdWN0LnByb2R1Y3RJZCA9PSAke1N0cmluZyhvcHRpb25zLnByb2R1Y3RJZCl9XG4gICAgICAgICAgICAgICAgUkVUVVJOIHByb2R1Y3RcbiAgICAgICAgICApID4gMFxuICAgICAgICBgIDogYXFsYGB9XG4gICAgICAgICR7ZXhjbHVkZU9wZW5TdXBwb3J0VGlja2V0cyA/IGFxbGBcbiAgICAgICAgICBGSUxURVIgTEVOR1RIKFxuICAgICAgICAgICAgRk9SIHRpY2tldCBJTiAxLi4xIE9VVEJPVU5EIHVzZXIuX2lkICR7Y29sbGVjdGlvbihFREdFUy5IQVNfU1VQUE9SVF9USUNLRVQpfVxuICAgICAgICAgICAgICBGSUxURVIgdGlja2V0LnN0YXR1cyBJTiBbXCJvcGVuXCIsIFwiaW5fcHJvZ3Jlc3NcIiwgXCJ3YWl0aW5nX29uX2N1c3RvbWVyXCIsIFwid2FpdGluZ19vbl9pbnRlcm5hbFwiXVxuICAgICAgICAgICAgICBGSUxURVIgdGlja2V0LnByaW9yaXR5IElOIFtcImhpZ2hcIiwgXCJ1cmdlbnRcIl1cbiAgICAgICAgICAgICAgUkVUVVJOIHRpY2tldFxuICAgICAgICAgICkgPT0gMFxuICAgICAgICBgIDogYXFsYGB9XG4gICAgICAgIFJFVFVSTiB1c2VyXG4gICAgKVxuICAgIEZPUiB1c2VyIElOIGJhc2VVc2Vyc1xuICAgICAgU09SVCB1c2VyLmVtYWlsIEFTQ1xuICAgICAgUkVUVVJOIERJU1RJTkNUIHVzZXJcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5nZXN0U2hvcGlmeUN1c3RvbWVyT3JkZXIgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBTaG9waWZ5Q3VzdG9tZXJPcmRlcklucHV0XG4pOiBQcm9taXNlPEN1c3RvbWVyT3JkZXJUeXBlPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBzaG9waWZ5Q3VzdG9tZXJJZCA9IGNsZWFuRXh0ZXJuYWxJZChpbnB1dC5zaG9waWZ5Q3VzdG9tZXJJZCwgMTYwKTtcbiAgY29uc3Qgc2hvcGlmeU9yZGVySWQgPSBjbGVhbkV4dGVybmFsSWQoaW5wdXQuc2hvcGlmeU9yZGVySWQsIDE2MCk7XG4gIGNvbnN0IGN1c3RvbWVyID0gaW5wdXQuY3VzdG9tZXIgfHwge307XG4gIGNvbnN0IGVtYWlsID0gY2xlYW5TdHJpbmcoY3VzdG9tZXIuZW1haWwsIDMyMCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgcHJvZHVjdElkcyA9IEFycmF5LmZyb20obmV3IFNldChbLi4uKGlucHV0LnByb2R1Y3RJZHMgfHwgW10pLCAuLi4oaW5wdXQucHJvZHVjdHMgfHwgW10pLm1hcCgocHJvZHVjdCkgPT4gcHJvZHVjdC5wcm9kdWN0SWQpXVxuICAgIC5tYXAoKHByb2R1Y3RJZCkgPT4gY2xlYW5FeHRlcm5hbElkKHByb2R1Y3RJZCwgMzIwKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pKSk7XG5cbiAgaWYoIXNob3BpZnlDdXN0b21lcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9zaG9waWZ5Q3VzdG9tZXJJZCcpO1xuICB9XG4gIGlmKCFzaG9waWZ5T3JkZXJJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfc2hvcGlmeU9yZGVySWQnKTtcbiAgfVxuICBpZighZW1haWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlcXVpcmVkX2N1c3RvbWVyRW1haWwnKTtcbiAgfVxuXG4gIGNvbnN0IHVzZXJLZXkgPSBleHRlcm5hbEtleSgnc2hvcGlmeS11c2VyJywgc2hvcGlmeUN1c3RvbWVySWQpO1xuICBjb25zdCB1c2VySW5zZXJ0ID0ge1xuICAgIF9rZXk6IHVzZXJLZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBlbWFpbCxcbiAgICBmaXJzdE5hbWU6IGNsZWFuU3RyaW5nKGN1c3RvbWVyLmZpcnN0TmFtZSwgMTYwKSxcbiAgICBsYXN0TmFtZTogY2xlYW5TdHJpbmcoY3VzdG9tZXIubGFzdE5hbWUsIDE2MCksXG4gICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogJ3Nob3BpZnknLFxuICAgIG1hcmtldGluZ09wdEluOiBjdXN0b21lci5tYXJrZXRpbmdPcHRJbiA9PT0gdHJ1ZSxcbiAgICBtYXJrZXRpbmdPcHRJbkF0OiBjdXN0b21lci5tYXJrZXRpbmdPcHRJbiA9PT0gdHJ1ZSA/IHRpbWVzdGFtcCA6IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHNob3BpZnlDdXN0b21lcklkLFxuICAgIHR5cGU6ICdjcm1Db250YWN0JyxcbiAgICB1c2VySWQ6IHVzZXJLZXlcbiAgfTtcbiAgY29uc3QgdXNlclVwZGF0ZSA9IHtcbiAgICBlbWFpbCxcbiAgICBmaXJzdE5hbWU6IGNsZWFuU3RyaW5nKGN1c3RvbWVyLmZpcnN0TmFtZSwgMTYwKSxcbiAgICBsYXN0TmFtZTogY2xlYW5TdHJpbmcoY3VzdG9tZXIubGFzdE5hbWUsIDE2MCksXG4gICAgbGFzdFB1cmNoYXNlZEF0OiBpbnB1dC5wdXJjaGFzZWRBdCB8fCB0aW1lc3RhbXAsXG4gICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogJ3Nob3BpZnknLFxuICAgIG1hcmtldGluZ09wdEluOiBjdXN0b21lci5tYXJrZXRpbmdPcHRJbiA9PT0gdHJ1ZSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHNob3BpZnlDdXN0b21lcklkXG4gIH07XG4gIGNvbnN0IHVzZXJRdWVyeSA9IGFxbGBcbiAgICBMRVQgZXhpc3RpbmcgPSBGSVJTVChcbiAgICAgIEZPUiB1c2VyIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgICAgIEZJTFRFUiB1c2VyLnNob3BpZnlDdXN0b21lcklkID09ICR7c2hvcGlmeUN1c3RvbWVySWR9IHx8IHVzZXIuZW1haWwgPT0gJHtlbWFpbH1cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBSRVRVUk4gdXNlclxuICAgIClcbiAgICBMRVQgdXNlcktleSA9IGV4aXN0aW5nID8gZXhpc3RpbmcuX2tleSA6ICR7dXNlcktleX1cbiAgICBVUFNFUlQge19rZXk6IHVzZXJLZXl9XG4gICAgSU5TRVJUIE1FUkdFKCR7dXNlckluc2VydH0sIHtfa2V5OiB1c2VyS2V5LCB1c2VySWQ6IHVzZXJLZXl9KVxuICAgIFVQREFURSAke3VzZXJVcGRhdGV9IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5VU0VSUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCB1c2VyID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHVzZXJRdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZTtcbiAgY29uc3QgcmVzb2x2ZWRVc2VyS2V5ID0gZG9jS2V5KFN0cmluZyh1c2VyPy5fa2V5IHx8IHVzZXI/LnVzZXJJZCB8fCB1c2VyS2V5KSk7XG4gIGNvbnN0IG9yZGVyS2V5ID0gZXh0ZXJuYWxLZXkoJ3Nob3BpZnktb3JkZXInLCBzaG9waWZ5T3JkZXJJZCk7XG4gIGNvbnN0IG9yZGVyID0ge1xuICAgIF9rZXk6IG9yZGVyS2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgY3VycmVuY3k6IGNsZWFuU3RyaW5nKGlucHV0LmN1cnJlbmN5LCAzKS50b1VwcGVyQ2FzZSgpLFxuICAgIGN1c3RvbWVyT3JkZXJJZDogb3JkZXJLZXksXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBwcm9kdWN0SWRzLFxuICAgIHB1cmNoYXNlZEF0OiBpbnB1dC5wdXJjaGFzZWRBdCB8fCB0aW1lc3RhbXAsXG4gICAgc2hvcGlmeUN1c3RvbWVySWQsXG4gICAgc2hvcGlmeU9yZGVySWQsXG4gICAgdG90YWxQcmljZTogTnVtYmVyKGlucHV0LnRvdGFsUHJpY2UgfHwgMCksXG4gICAgdXNlcklkOiByZXNvbHZlZFVzZXJLZXlcbiAgfTtcbiAgY29uc3Qgb3JkZXJRdWVyeSA9IGFxbGBcbiAgICBVUFNFUlQge19rZXk6ICR7b3JkZXJLZXl9fVxuICAgIElOU0VSVCAke29yZGVyfVxuICAgIFVQREFURSAke3tcbiAgICAgIGN1cnJlbmN5OiBvcmRlci5jdXJyZW5jeSxcbiAgICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgICBwcm9kdWN0SWRzLFxuICAgICAgcHVyY2hhc2VkQXQ6IG9yZGVyLnB1cmNoYXNlZEF0LFxuICAgICAgdG90YWxQcmljZTogb3JkZXIudG90YWxQcmljZSxcbiAgICAgIHVzZXJJZDogcmVzb2x2ZWRVc2VyS2V5XG4gICAgfX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLkNVU1RPTUVSX09SREVSUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBzYXZlZE9yZGVyID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KG9yZGVyUXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgQ3VzdG9tZXJPcmRlclR5cGU7XG5cbiAgYXdhaXQgc2F2ZUVkZ2UoXG4gICAgY29udGV4dCxcbiAgICBFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIsXG4gICAgY3JlYXRlSGFzaChgaGFzQ3VzdG9tZXJPcmRlci0ke3Jlc29sdmVkVXNlcktleX0tJHtvcmRlcktleX1gKSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgcmVzb2x2ZWRVc2VyS2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5DVVNUT01FUl9PUkRFUlMsIG9yZGVyS2V5KSxcbiAgICB7cHVyY2hhc2VkQXQ6IG9yZGVyLnB1cmNoYXNlZEF0LCBzaG9waWZ5Q3VzdG9tZXJJZCwgc2hvcGlmeU9yZGVySWR9XG4gICk7XG5cbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvZHVjdElkcy5tYXAoYXN5bmMgKHByb2R1Y3RJZCkgPT4ge1xuICAgIGNvbnN0IHByb2R1Y3QgPSAoaW5wdXQucHJvZHVjdHMgfHwgW10pLmZpbmQoKGl0ZW0pID0+IGl0ZW0ucHJvZHVjdElkID09PSBwcm9kdWN0SWQpIHx8IHtwcm9kdWN0SWR9O1xuICAgIGNvbnN0IHByb2R1Y3RLZXkgPSBleHRlcm5hbEtleSgnc2hvcGlmeS1wcm9kdWN0JywgcHJvZHVjdElkKTtcbiAgICBjb25zdCBwcm9kdWN0RG9jID0ge1xuICAgICAgX2tleTogcHJvZHVjdEtleSxcbiAgICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgcHJvZHVjdElkLFxuICAgICAgdGl0bGU6IGNsZWFuU3RyaW5nKHByb2R1Y3QudGl0bGUsIDMyMCksXG4gICAgICB2YXJpYW50SWQ6IGNsZWFuRXh0ZXJuYWxJZChwcm9kdWN0LnZhcmlhbnRJZCwgMTYwKVxuICAgIH07XG4gICAgY29uc3QgcHJvZHVjdFF1ZXJ5ID0gYXFsYFxuICAgICAgVVBTRVJUIHtfa2V5OiAke3Byb2R1Y3RLZXl9fVxuICAgICAgSU5TRVJUICR7cHJvZHVjdERvY31cbiAgICAgIFVQREFURSAke3tcbiAgICAgICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgICAgdGl0bGU6IHByb2R1Y3REb2MudGl0bGUsXG4gICAgICAgIHZhcmlhbnRJZDogcHJvZHVjdERvYy52YXJpYW50SWRcbiAgICAgIH19IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TSE9QSUZZX1BST0RVQ1RTKX1cbiAgICBgO1xuICAgIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShwcm9kdWN0UXVlcnkpO1xuICAgIGF3YWl0IHNhdmVFZGdlKFxuICAgICAgY29udGV4dCxcbiAgICAgIEVER0VTLkhBU19QVVJDSEFTRURfUFJPRFVDVCxcbiAgICAgIGNyZWF0ZUhhc2goYGhhc1B1cmNoYXNlZFByb2R1Y3QtJHtvcmRlcktleX0tJHtwcm9kdWN0S2V5fWApLFxuICAgICAgZG9jSWQoQ09MTEVDVElPTlMuQ1VTVE9NRVJfT1JERVJTLCBvcmRlcktleSksXG4gICAgICBkb2NJZChDT0xMRUNUSU9OUy5TSE9QSUZZX1BST0RVQ1RTLCBwcm9kdWN0S2V5KSxcbiAgICAgIHtwcm9kdWN0SWQsIHB1cmNoYXNlZEF0OiBvcmRlci5wdXJjaGFzZWRBdH1cbiAgICApO1xuICB9KSk7XG5cbiAgYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICBVUERBVEUgJHtyZXNvbHZlZFVzZXJLZXl9XG4gICAgV0lUSCB7XG4gICAgICBsYXN0UHVyY2hhc2VkQXQ6ICR7b3JkZXIucHVyY2hhc2VkQXR9LFxuICAgICAgdG90YWxPcmRlckNvdW50OiBMRU5HVEgoXG4gICAgICAgIEZPUiBvcmRlciBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIHJlc29sdmVkVXNlcktleSl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfQ1VTVE9NRVJfT1JERVIpfVxuICAgICAgICAgIFJFVFVSTiBvcmRlclxuICAgICAgKSxcbiAgICAgIHRvdGFsU3BlbmQ6IFNVTShcbiAgICAgICAgRk9SIG9yZGVyIElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgcmVzb2x2ZWRVc2VyS2V5KX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19DVVNUT01FUl9PUkRFUil9XG4gICAgICAgICAgUkVUVVJOIFRPX05VTUJFUihvcmRlci50b3RhbFByaWNlKVxuICAgICAgKVxuICAgIH0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlVTRVJTKX1cbiAgYCk7XG5cbiAgcmV0dXJuIHNhdmVkT3JkZXI7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3VzdG9tZXJPcmRlcnNCeVVzZXIgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPEN1c3RvbWVyT3JkZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgRk9SIG9yZGVyIElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdXNlcklkKX0gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19DVVNUT01FUl9PUkRFUil9XG4gICAgICBTT1JUIG9yZGVyLnB1cmNoYXNlZEF0IERFU0NcbiAgICAgIFJFVFVSTiBvcmRlclxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmNvbnN0IHNlbmRTdXBwb3J0VGlja2V0RW1haWwgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRpY2tldDogU3VwcG9ydFRpY2tldFR5cGVEYXRhLFxuICBkZXRhaWxzOiBzdHJpbmcsXG4gIGhlYWRpbmc6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHVzZXIgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkoYXFsYFxuICAgIFJFVFVSTiBET0NVTUVOVCgke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB0aWNrZXQudXNlcklkKX0pXG4gIGApLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgVXNlclR5cGUgfCBudWxsO1xuICBpZighdXNlcj8uZW1haWwpIHJldHVybjtcbiAgY29uc3Qgc3VwcG9ydE5hbWUgPSBjb250ZXh0LmNvbmZpZz8uZGV0YWlscz8uc3VwcG9ydE5hbWUgfHwgQ29uZmlnLmdldCgnZGV0YWlscy5zdXBwb3J0TmFtZScpIHx8ICdSZWFrdG9yIFN1cHBvcnQnO1xuICBjb25zdCBzdXBwb3J0RW1haWwgPSBjb250ZXh0LmNvbmZpZz8uZGV0YWlscz8uc3VwcG9ydEVtYWlsIHx8IENvbmZpZy5nZXQoJ2RldGFpbHMuc3VwcG9ydEVtYWlsJykgfHwgJ3N1cHBvcnRAcmVha3Rvci5pbyc7XG4gIGNvbnN0IHRpY2tldE51bWJlciA9IFN0cmluZyh0aWNrZXQudGlja2V0TnVtYmVyIHx8IHRpY2tldC5zdXBwb3J0VGlja2V0SWQgfHwgdGlja2V0Ll9rZXkgfHwgJycpO1xuICBjb25zdCBzdGF0dXNVcmwgPSBgaHR0cHM6Ly9jcm0ucmVha3Rvci5pby9zdXBwb3J0L3N0YXR1cz90aWNrZXQ9JHtlbmNvZGVVUklDb21wb25lbnQodGlja2V0TnVtYmVyKX1gO1xuICBjb25zdCB0ZXh0ID0gYCR7aGVhZGluZ31cXG5cXG5UaWNrZXQ6ICR7dGlja2V0TnVtYmVyfVxcblN0YXR1czogJHt0aWNrZXQuc3RhdHVzIHx8ICdzdWJtaXR0ZWQnfVxcblxcbiR7ZGV0YWlsc31cXG5cXG5UcmFjayB0aGlzIHRpY2tldDogJHtzdGF0dXNVcmx9YDtcbiAgYXdhaXQgc2VzU2VuZCh7XG4gICAgRGVzdGluYXRpb246IHtUb0FkZHJlc3NlczogW1N0cmluZyh1c2VyLmVtYWlsKV19LFxuICAgIE1lc3NhZ2U6IHtcbiAgICAgIEJvZHk6IHtIdG1sOiB7RGF0YTogYDxoMT4ke2VzY2FwZUh0bWwoaGVhZGluZyl9PC9oMT48cD48c3Ryb25nPlRpY2tldDo8L3N0cm9uZz4gJHtlc2NhcGVIdG1sKHRpY2tldE51bWJlcil9PC9wPjxwPjxzdHJvbmc+U3RhdHVzOjwvc3Ryb25nPiAke2VzY2FwZUh0bWwoU3RyaW5nKHRpY2tldC5zdGF0dXMgfHwgJ3N1Ym1pdHRlZCcpKX08L3A+PHByZSBzdHlsZT1cIndoaXRlLXNwYWNlOnByZS13cmFwO2ZvbnQtZmFtaWx5OmluaGVyaXRcIj4ke2VzY2FwZUh0bWwoZGV0YWlscyl9PC9wcmU+PHA+PGEgaHJlZj1cIiR7ZXNjYXBlSHRtbChzdGF0dXNVcmwpfVwiPlRyYWNrIHRoaXMgdGlja2V0IG9ubGluZTwvYT48L3A+YH0sIFRleHQ6IHtEYXRhOiB0ZXh0fX0sXG4gICAgICBTdWJqZWN0OiB7RGF0YTogYFske3RpY2tldE51bWJlcn1dICR7aGVhZGluZ31gfVxuICAgIH0sXG4gICAgU291cmNlOiBgXCIke3N1cHBvcnROYW1lfVwiIDwke3N1cHBvcnRFbWFpbH0+YFxuICB9KS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVN1cHBvcnRUaWNrZXQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBQYXJ0aWFsPFN1cHBvcnRUaWNrZXRUeXBlRGF0YT5cbik6IFByb21pc2U8U3VwcG9ydFRpY2tldFR5cGVEYXRhPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCB1c2VyS2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC51c2VySWQgfHwgJycpKTtcbiAgY29uc3QgdGlja2V0S2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC5zdXBwb3J0VGlja2V0SWQgfHwgY3JlYXRlSGFzaChgc3VwcG9ydC10aWNrZXQtJHt1c2VyS2V5fS0ke3RpbWVzdGFtcH1gKSkpO1xuICBjb25zdCB0aWNrZXROdW1iZXIgPSBjbGVhblN0cmluZyhpbnB1dC50aWNrZXROdW1iZXIsIDgwKSB8fCBgUktULSR7bmV3IERhdGUodGltZXN0YW1wKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKS5yZXBsYWNlKC8tL2csICcnKX0tJHt0aWNrZXRLZXkuc2xpY2UoMCwgOCkudG9VcHBlckNhc2UoKX1gO1xuICBjb25zdCB0aWNrZXQgPSB7XG4gICAgX2tleTogdGlja2V0S2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgYXNzaWduZWRUb1VzZXJJZDogZG9jS2V5KFN0cmluZyhpbnB1dC5hc3NpZ25lZFRvVXNlcklkIHx8ICcnKSksXG4gICAgZGVzY3JpcHRpb246IGNsZWFuU3RyaW5nKGlucHV0LmRlc2NyaXB0aW9uLCA0MDAwKSxcbiAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgIHByaW9yaXR5OiBpbnB1dC5wcmlvcml0eSB8fCAnbm9ybWFsJyxcbiAgICBwcm9kdWN0SWQ6IGNsZWFuRXh0ZXJuYWxJZChpbnB1dC5wcm9kdWN0SWQsIDMyMCksXG4gICAgc2hvcGlmeU9yZGVySWQ6IGNsZWFuU3RyaW5nKGlucHV0LnNob3BpZnlPcmRlcklkLCAxNjApLFxuICAgIHN0YXR1czogJ3N1Ym1pdHRlZCcsXG4gICAgc3ViamVjdDogY2xlYW5TdHJpbmcoaW5wdXQuc3ViamVjdCwgMzIwKSxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICB0aWNrZXROdW1iZXIsXG4gICAgdHlwZTogaW5wdXQudHlwZSB8fCAnZ2VuZXJhbF9zdXBwb3J0JyxcbiAgICB1c2VySWQ6IHVzZXJLZXlcbiAgfTtcbiAgY29uc3QgcXVlcnkgPSBhcWxgXG4gICAgSU5TRVJUICR7dGlja2V0fSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkVGlja2V0ID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gIGF3YWl0IHNhdmVFZGdlKFxuICAgIGNvbnRleHQsXG4gICAgRURHRVMuSEFTX1NVUFBPUlRfVElDS0VULFxuICAgIGNyZWF0ZUhhc2goYGhhc1N1cHBvcnRUaWNrZXQtJHt1c2VyS2V5fS0ke3RpY2tldEtleX1gKSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5VU0VSUywgdXNlcktleSksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCB0aWNrZXRLZXkpLFxuICAgIHtwcmlvcml0eTogdGlja2V0LnByaW9yaXR5LCBzdGF0dXM6IHRpY2tldC5zdGF0dXMsIHR5cGU6IHRpY2tldC50eXBlfVxuICApO1xuICBhd2FpdCBhZGRTdXBwb3J0VGlja2V0RXZlbnQoY29udGV4dCwge1xuICAgIGFjdG9yVXNlcklkOiBkb2NLZXkoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCB1c2VyS2V5KSksXG4gICAgZXZlbnRUeXBlOiAnc3VibWl0dGVkJyxcbiAgICBtZXRhZGF0YToge2RldGFpbHM6IHRpY2tldC5kZXNjcmlwdGlvbn0sXG4gICAgc3VwcG9ydFRpY2tldElkOiB0aWNrZXRLZXksXG4gICAgdG9WYWx1ZTogdGlja2V0LnN0YXR1c1xuICB9KTtcblxuICByZXR1cm4gc2F2ZWRUaWNrZXQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc3VibWl0UHVibGljU3VwcG9ydFRpY2tldCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5wdXQ6IFB1YmxpY1N1cHBvcnRUaWNrZXRJbnB1dFxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGE+ID0+IHtcbiAgY29uc3QgZW1haWwgPSBjbGVhblN0cmluZyhpbnB1dC5lbWFpbCwgMzIwKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBkZXNjcmlwdGlvbiA9IGNsZWFuU3RyaW5nKGlucHV0LmRlc2NyaXB0aW9uLCA0MDAwKTtcbiAgY29uc3Qgc3ViamVjdCA9IGNsZWFuU3RyaW5nKGlucHV0LnN1YmplY3QsIDMyMCk7XG4gIGlmKCFlbWFpbFBhdHRlcm4udGVzdChlbWFpbCkpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfdmFsaWRfZW1haWwnKTtcbiAgaWYoIXN1YmplY3QpIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfc3ViamVjdCcpO1xuICBpZighZGVzY3JpcHRpb24pIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfZGVzY3JpcHRpb24nKTtcblxuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX0VWRU5UUyxcbiAgICBDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUyxcbiAgICBDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsXG4gICAgQ09MTEVDVElPTlMuVVNFUlNcbiAgXS5tYXAoKG5hbWUpID0+IGVuc3VyZURvY3VtZW50Q29sbGVjdGlvbihkYXRhYmFzZSwgbmFtZSkpKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVCxcbiAgICBFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfRVZFTlQsXG4gICAgRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUX01FU1NBR0VcbiAgXS5tYXAoKG5hbWUpID0+IGVuc3VyZUVkZ2VDb2xsZWN0aW9uKGRhdGFiYXNlLCBuYW1lKSkpO1xuXG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCBnZW5lcmF0ZWRVc2VyS2V5ID0gY3JlYXRlSGFzaChlbWFpbCwgbnVsbCk7XG4gIGNvbnN0IG9wdGVkSW4gPSBpbnB1dC5tYXJrZXRpbmdPcHRJbiA9PT0gdHJ1ZTtcbiAgY29uc3QgdXNlckluc2VydCA9IHtcbiAgICBfa2V5OiBnZW5lcmF0ZWRVc2VyS2V5LFxuICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBlbWFpbCxcbiAgICBmaXJzdE5hbWU6IGNsZWFuU3RyaW5nKGlucHV0LmZpcnN0TmFtZSwgMTYwKSxcbiAgICBsYXN0TmFtZTogY2xlYW5TdHJpbmcoaW5wdXQubGFzdE5hbWUsIDE2MCksXG4gICAgbWFpbGluZ0xpc3Q6IG9wdGVkSW4sXG4gICAgbWFya2V0aW5nT3B0SW46IG9wdGVkSW4sXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICB1c2VySWQ6IGdlbmVyYXRlZFVzZXJLZXlcbiAgfTtcbiAgY29uc3QgdXNlclVwZGF0ZSA9IHtcbiAgICAuLi4ob3B0ZWRJbiA/IHttYWlsaW5nTGlzdDogdHJ1ZSwgbWFya2V0aW5nT3B0SW46IHRydWUsIG1hcmtldGluZ09wdEluQXQ6IHRpbWVzdGFtcH0gOiB7fSksXG4gICAgZmlyc3ROYW1lOiBjbGVhblN0cmluZyhpbnB1dC5maXJzdE5hbWUsIDE2MCkgfHwgdW5kZWZpbmVkLFxuICAgIGxhc3ROYW1lOiBjbGVhblN0cmluZyhpbnB1dC5sYXN0TmFtZSwgMTYwKSB8fCB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcFxuICB9O1xuICBjb25zdCB1c2VyID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgIFVQU0VSVCB7ZW1haWw6ICR7ZW1haWx9fVxuICAgICAgSU5TRVJUICR7dXNlckluc2VydH1cbiAgICAgIFVQREFURSAke3VzZXJVcGRhdGV9XG4gICAgICBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuVVNFUlMpfVxuICAgICAgUkVUVVJOIE5FV1xuICBgKS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpIGFzIFVzZXJUeXBlO1xuICBjb25zdCB0aWNrZXQgPSBhd2FpdCBjcmVhdGVTdXBwb3J0VGlja2V0KGNvbnRleHQsIHtcbiAgICBkZXNjcmlwdGlvbixcbiAgICBwcmlvcml0eTogc3VwcG9ydFByaW9yaXRpZXMuaGFzKFN0cmluZyhpbnB1dC5wcmlvcml0eSkpID8gaW5wdXQucHJpb3JpdHkgOiAnbm9ybWFsJyxcbiAgICBzdWJqZWN0LFxuICAgIHR5cGU6IHN1cHBvcnRUeXBlcy5oYXMoU3RyaW5nKGlucHV0LnR5cGUpKSA/IGlucHV0LnR5cGUgOiAnZ2VuZXJhbF9zdXBwb3J0JyxcbiAgICB1c2VySWQ6IFN0cmluZyh1c2VyPy5fa2V5IHx8IHVzZXI/LnVzZXJJZCB8fCBnZW5lcmF0ZWRVc2VyS2V5KVxuICB9KTtcbiAgYXdhaXQgc2VuZFN1cHBvcnRUaWNrZXRFbWFpbChjb250ZXh0LCB0aWNrZXQsIGRlc2NyaXB0aW9uLCAnV2UgcmVjZWl2ZWQgeW91ciBzdXBwb3J0IHRpY2tldCcpO1xuICByZXR1cm4gdGlja2V0O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFB1YmxpY1N1cHBvcnRUaWNrZXQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHRpY2tldE51bWJlcjogc3RyaW5nLFxuICBlbWFpbEFkZHJlc3M6IHN0cmluZ1xuKTogUHJvbWlzZTxQdWJsaWNTdXBwb3J0VGlja2V0RmVlZCB8IG51bGw+ID0+IHtcbiAgY29uc3QgZW1haWwgPSBjbGVhblN0cmluZyhlbWFpbEFkZHJlc3MsIDMyMCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgbnVtYmVyID0gY2xlYW5TdHJpbmcodGlja2V0TnVtYmVyLCA4MCkudG9VcHBlckNhc2UoKTtcbiAgaWYoIWVtYWlsUGF0dGVybi50ZXN0KGVtYWlsKSB8fCAhbnVtYmVyKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGlmKCFhd2FpdCBkYXRhYmFzZS5jb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUykuZXhpc3RzKCkpIHJldHVybiBudWxsO1xuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsYFxuICAgIEZPUiB0aWNrZXQgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUyl9XG4gICAgICBGSUxURVIgVVBQRVIodGlja2V0LnRpY2tldE51bWJlcikgPT0gJHtudW1iZXJ9XG4gICAgICBMRVQgdXNlciA9IERPQ1VNRU5UKCR7Q09MTEVDVElPTlMuVVNFUlN9LCB0aWNrZXQudXNlcklkKVxuICAgICAgRklMVEVSIExPV0VSKHVzZXIuZW1haWwpID09ICR7ZW1haWx9XG4gICAgICBMRVQgbWVzc2FnZXMgPSAoXG4gICAgICAgIEZPUiBtZXNzYWdlIElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVF9NRVNTQUdFUyl9XG4gICAgICAgICAgRklMVEVSIG1lc3NhZ2Uuc3VwcG9ydFRpY2tldElkID09IHRpY2tldC5fa2V5IEFORCBtZXNzYWdlLnZpc2liaWxpdHkgPT0gXCJjdXN0b21lclwiXG4gICAgICAgICAgU09SVCBtZXNzYWdlLmFkZGVkIEFTQ1xuICAgICAgICAgIFJFVFVSTiBtZXNzYWdlXG4gICAgICApXG4gICAgICBMRVQgZXZlbnRzID0gKFxuICAgICAgICBGT1IgZXZlbnQgSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX0VWRU5UUyl9XG4gICAgICAgICAgRklMVEVSIGV2ZW50LnN1cHBvcnRUaWNrZXRJZCA9PSB0aWNrZXQuX2tleVxuICAgICAgICAgIFNPUlQgZXZlbnQuYWRkZWQgQVNDXG4gICAgICAgICAgUkVUVVJOIGV2ZW50XG4gICAgICApXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4ge3RpY2tldCwgbWVzc2FnZXMsIGV2ZW50c31cbiAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBQcm9taXNlPFB1YmxpY1N1cHBvcnRUaWNrZXRGZWVkIHwgbnVsbD47XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3VwcG9ydFRpY2tldHMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGZpbHRlcnM6IHtyZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7IHJlYWRvbmx5IHVzZXJJZD86IHN0cmluZ30gPSB7fVxuKTogUHJvbWlzZTxTdXBwb3J0VGlja2V0VHlwZURhdGFbXT4gPT4ge1xuICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgcmV0dXJuIChhc3luYyAoKSA9PiB7XG4gICAgaWYoIWF3YWl0IGRhdGFiYXNlLmNvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKS5leGlzdHMoKSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgICAgRk9SIHRpY2tldCBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTKX1cbiAgICAgICAgJHtmaWx0ZXJzLnN0YXR1cyA/IGFxbGBGSUxURVIgdGlja2V0LnN0YXR1cyA9PSAke2ZpbHRlcnMuc3RhdHVzfWAgOiBhcWxgYH1cbiAgICAgICAgJHtmaWx0ZXJzLnVzZXJJZCA/IGFxbGBGSUxURVIgdGlja2V0LnVzZXJJZCA9PSAke2RvY0tleShmaWx0ZXJzLnVzZXJJZCl9YCA6IGFxbGBgfVxuICAgICAgICBMRVQgdXNlciA9IERPQ1VNRU5UKCR7Q09MTEVDVElPTlMuVVNFUlN9LCB0aWNrZXQudXNlcklkKVxuICAgICAgICBTT1JUIHRpY2tldC5hZGRlZCBERVNDXG4gICAgICAgIFJFVFVSTiBNRVJHRSh0aWNrZXQsIHt1c2VyfSlcbiAgICBgO1xuICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xuICB9KSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVN1cHBvcnRUaWNrZXRTdGF0dXMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHN1cHBvcnRUaWNrZXRJZDogc3RyaW5nLFxuICBzdGF0dXM6IFN1cHBvcnRUaWNrZXRTdGF0dXMsXG4gIHJlc29sdXRpb25TdW1tYXJ5ID0gJydcbik6IFByb21pc2U8U3VwcG9ydFRpY2tldFR5cGVEYXRhPiA9PiB7XG4gIGNvbnN0IHRpY2tldEtleSA9IGRvY0tleShzdXBwb3J0VGlja2V0SWQpO1xuICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgY29uc3QgcHJldmlvdXMgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSlcbiAgICAucXVlcnkoYXFsYFJFVFVSTiBET0NVTUVOVCgke2RvY0lkKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUywgdGlja2V0S2V5KX0pYClcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBTdXBwb3J0VGlja2V0VHlwZURhdGEgfCBudWxsO1xuICBjb25zdCB1cGRhdGUgPSB7XG4gICAgLi4uKHN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcgJiYge2NvbXBsZXRlZEF0OiB0aW1lc3RhbXAsIHJlc29sdXRpb25TdW1tYXJ5OiBjbGVhblN0cmluZyhyZXNvbHV0aW9uU3VtbWFyeSwgNDAwMCl9KSxcbiAgICAuLi4oc3RhdHVzID09PSAnZG9uZScgJiYge2RvbmVBdDogdGltZXN0YW1wLCByZXNvbHV0aW9uU3VtbWFyeTogY2xlYW5TdHJpbmcocmVzb2x1dGlvblN1bW1hcnksIDQwMDApfSksXG4gICAgLi4uKHN0YXR1cyA9PT0gJ3Jlc29sdmVkJyAmJiB7cmVzb2x2ZWRBdDogdGltZXN0YW1wLCByZXNvbHV0aW9uU3VtbWFyeTogY2xlYW5TdHJpbmcocmVzb2x1dGlvblN1bW1hcnksIDQwMDApfSksXG4gICAgLi4uKHN0YXR1cyA9PT0gJ2Nsb3NlZCcgJiYge2Nsb3NlZEF0OiB0aW1lc3RhbXB9KSxcbiAgICBsYXN0VXBkYXRlRGV0YWlsczogY2xlYW5TdHJpbmcocmVzb2x1dGlvblN1bW1hcnksIDQwMDApLFxuICAgIG1vZGlmaWVkOiB0aW1lc3RhbXAsXG4gICAgc3RhdHVzXG4gIH07XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIFVQREFURSAke3RpY2tldEtleX0gV0lUSCAke3VwZGF0ZX0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCB0aWNrZXQgPSBhd2FpdCB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSkgYXMgU3VwcG9ydFRpY2tldFR5cGVEYXRhO1xuXG4gIGF3YWl0IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxgXG4gICAgRk9SIGVkZ2UgSU4gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVCl9XG4gICAgICBGSUxURVIgZWRnZS5fdG8gPT0gJHtkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHRpY2tldEtleSl9XG4gICAgICBVUERBVEUgZWRnZSBXSVRIICR7e1xuICAgICAgICBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgICByZXNvbHZlZEF0OiBzdGF0dXMgPT09ICdyZXNvbHZlZCcgPyB0aW1lc3RhbXAgOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXR1c1xuICAgICAgfX0gSU4gJHtjb2xsZWN0aW9uKEVER0VTLkhBU19TVVBQT1JUX1RJQ0tFVCl9XG4gIGApO1xuICBhd2FpdCBhZGRTdXBwb3J0VGlja2V0RXZlbnQoY29udGV4dCwge1xuICAgIGFjdG9yVXNlcklkOiBkb2NLZXkoU3RyaW5nKGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpLFxuICAgIGV2ZW50VHlwZTogJ3N0YXR1c19jaGFuZ2VkJyxcbiAgICBmcm9tVmFsdWU6IHByZXZpb3VzPy5zdGF0dXMsXG4gICAgc3VwcG9ydFRpY2tldElkOiB0aWNrZXRLZXksXG4gICAgdG9WYWx1ZTogc3RhdHVzXG4gIH0pO1xuXG4gIGlmKHN0YXR1cyA9PT0gJ3Jlc29sdmVkJykge1xuICAgIGF3YWl0IGNyZWF0ZUN1c3RvbWVyTm90aWZpY2F0aW9uKGNvbnRleHQsIHtcbiAgICAgIGJvZHk6IGNsZWFuU3RyaW5nKHJlc29sdXRpb25TdW1tYXJ5IHx8ICdZb3VyIHN1cHBvcnQgdGlja2V0IGhhcyBiZWVuIHJlc29sdmVkLicsIDQwMDApLFxuICAgICAgc3RhdHVzOiAncXVldWVkJyxcbiAgICAgIHN1YmplY3Q6IGBSZXNvbHZlZDogJHt0aWNrZXQuc3ViamVjdCB8fCAnU3VwcG9ydCB0aWNrZXQnfWAsXG4gICAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICAgIHR5cGU6ICdzdXBwb3J0X3RpY2tldF9yZXNvbHZlZCcsXG4gICAgICB1c2VySWQ6IHRpY2tldC51c2VySWRcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0aWNrZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlU3VwcG9ydFRpY2tldFByb2dyZXNzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBzdXBwb3J0VGlja2V0SWQ6IHN0cmluZyxcbiAgc3RhdHVzOiBTdXBwb3J0VGlja2V0U3RhdHVzLFxuICBkZXRhaWxzOiBzdHJpbmdcbik6IFByb21pc2U8U3VwcG9ydFRpY2tldFR5cGVEYXRhPiA9PiB7XG4gIHJlcXVpcmVDcm1BZG1pbihjb250ZXh0KTtcbiAgaWYoIXN1cHBvcnRTdGF0dXNlcy5oYXMoc3RhdHVzKSkgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkX3N1cHBvcnRfdGlja2V0X3N0YXR1cycpO1xuICBjb25zdCBtYXJrZG93biA9IGNsZWFuU3RyaW5nKGRldGFpbHMsIDQwMDApO1xuICBpZighbWFya2Rvd24pIHRocm93IG5ldyBFcnJvcigncmVxdWlyZWRfdXBkYXRlX2RldGFpbHMnKTtcbiAgY29uc3QgdGlja2V0ID0gYXdhaXQgdXBkYXRlU3VwcG9ydFRpY2tldFN0YXR1cyhjb250ZXh0LCBzdXBwb3J0VGlja2V0SWQsIHN0YXR1cywgbWFya2Rvd24pO1xuICBhd2FpdCBhZGRTdXBwb3J0VGlja2V0TWVzc2FnZShjb250ZXh0LCB7XG4gICAgYXV0aG9yVXNlcklkOiBTdHJpbmcoY29udGV4dC5zZXNzaW9uPy51c2VySWQgfHwgJycpLFxuICAgIGJvZHk6IG1hcmtkb3duLFxuICAgIHN1cHBvcnRUaWNrZXRJZCxcbiAgICB2aXNpYmlsaXR5OiAnY3VzdG9tZXInXG4gIH0pO1xuICBhd2FpdCBjcmVhdGVDdXN0b21lck5vdGlmaWNhdGlvbihjb250ZXh0LCB7XG4gICAgYm9keTogbWFya2Rvd24sXG4gICAgc3RhdHVzOiAnc2VudCcsXG4gICAgc3ViamVjdDogYFRpY2tldCAke3RpY2tldC50aWNrZXROdW1iZXIgfHwgc3VwcG9ydFRpY2tldElkfTogJHtzdGF0dXMucmVwbGFjZSgvXy9nLCAnICcpfWAsXG4gICAgc3VwcG9ydFRpY2tldElkLFxuICAgIHR5cGU6ICdzdXBwb3J0X3RpY2tldF9wcm9ncmVzcycsXG4gICAgdXNlcklkOiB0aWNrZXQudXNlcklkXG4gIH0pO1xuICBhd2FpdCBzZW5kU3VwcG9ydFRpY2tldEVtYWlsKGNvbnRleHQsIHRpY2tldCwgbWFya2Rvd24sIGBTdXBwb3J0IHRpY2tldCAke3N0YXR1cy5yZXBsYWNlKC9fL2csICcgJyl9YCk7XG4gIHJldHVybiB0aWNrZXQ7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkU3VwcG9ydFRpY2tldE1lc3NhZ2UgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBQYXJ0aWFsPFN1cHBvcnRUaWNrZXRNZXNzYWdlVHlwZT5cbik6IFByb21pc2U8U3VwcG9ydFRpY2tldE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCB0aWNrZXRLZXkgPSBkb2NLZXkoU3RyaW5nKGlucHV0LnN1cHBvcnRUaWNrZXRJZCB8fCAnJykpO1xuICBjb25zdCBtZXNzYWdlS2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC5zdXBwb3J0VGlja2V0TWVzc2FnZUlkIHx8IGNyZWF0ZUhhc2goYHN1cHBvcnQtdGlja2V0LW1lc3NhZ2UtJHt0aWNrZXRLZXl9LSR7dGltZXN0YW1wfWApKSk7XG4gIGNvbnN0IG1lc3NhZ2UgPSB7XG4gICAgX2tleTogbWVzc2FnZUtleSxcbiAgICBhZGRlZDogdGltZXN0YW1wLFxuICAgIGF1dGhvclVzZXJJZDogZG9jS2V5KFN0cmluZyhpbnB1dC5hdXRob3JVc2VySWQgfHwgY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSksXG4gICAgYm9keTogY2xlYW5TdHJpbmcoaW5wdXQuYm9keSwgNDAwMCksXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzdXBwb3J0VGlja2V0SWQ6IHRpY2tldEtleSxcbiAgICBzdXBwb3J0VGlja2V0TWVzc2FnZUlkOiBtZXNzYWdlS2V5LFxuICAgIHZpc2liaWxpdHk6IGlucHV0LnZpc2liaWxpdHkgfHwgJ2N1c3RvbWVyJ1xuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBJTlNFUlQgJHttZXNzYWdlfSBJTiAke2NvbGxlY3Rpb24oQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfTUVTU0FHRVMpfVxuICAgIFJFVFVSTiBORVdcbiAgYDtcbiAgY29uc3Qgc2F2ZWRNZXNzYWdlID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gIGF3YWl0IHNhdmVFZGdlKFxuICAgIGNvbnRleHQsXG4gICAgRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUX01FU1NBR0UsXG4gICAgY3JlYXRlSGFzaChgaGFzU3VwcG9ydFRpY2tldE1lc3NhZ2UtJHt0aWNrZXRLZXl9LSR7bWVzc2FnZUtleX1gKSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHRpY2tldEtleSksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfTUVTU0FHRVMsIG1lc3NhZ2VLZXkpLFxuICAgIHthdXRob3JVc2VySWQ6IG1lc3NhZ2UuYXV0aG9yVXNlcklkLCB2aXNpYmlsaXR5OiBtZXNzYWdlLnZpc2liaWxpdHl9XG4gICk7XG5cbiAgcmV0dXJuIHNhdmVkTWVzc2FnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdXBwb3J0VGlja2V0TWVzc2FnZXMgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHN1cHBvcnRUaWNrZXRJZDogc3RyaW5nXG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRNZXNzYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBtZXNzYWdlIElOIDEuLjEgT1VUQk9VTkQgJHtkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHN1cHBvcnRUaWNrZXRJZCl9ICR7Y29sbGVjdGlvbihFREdFUy5IQVNfU1VQUE9SVF9USUNLRVRfTUVTU0FHRSl9XG4gICAgICBTT1JUIG1lc3NhZ2UuYWRkZWQgQVNDXG4gICAgICBSRVRVUk4gbWVzc2FnZVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkucXVlcnkocXVlcnkpLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRTdXBwb3J0VGlja2V0RXZlbnQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBQYXJ0aWFsPFN1cHBvcnRUaWNrZXRFdmVudFR5cGU+XG4pOiBQcm9taXNlPFN1cHBvcnRUaWNrZXRFdmVudFR5cGU+ID0+IHtcbiAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gIGNvbnN0IHRpY2tldEtleSA9IGRvY0tleShTdHJpbmcoaW5wdXQuc3VwcG9ydFRpY2tldElkIHx8ICcnKSk7XG4gIGNvbnN0IGV2ZW50S2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC5zdXBwb3J0VGlja2V0RXZlbnRJZCB8fCBjcmVhdGVIYXNoKGBzdXBwb3J0LXRpY2tldC1ldmVudC0ke3RpY2tldEtleX0tJHt0aW1lc3RhbXB9LSR7aW5wdXQuZXZlbnRUeXBlfWApKSk7XG4gIGNvbnN0IGV2ZW50ID0ge1xuICAgIF9rZXk6IGV2ZW50S2V5LFxuICAgIGFkZGVkOiB0aW1lc3RhbXAsXG4gICAgYWN0b3JVc2VySWQ6IGRvY0tleShTdHJpbmcoaW5wdXQuYWN0b3JVc2VySWQgfHwgJycpKSxcbiAgICBldmVudFR5cGU6IGNsZWFuU3RyaW5nKGlucHV0LmV2ZW50VHlwZSwgMTYwKSxcbiAgICBmcm9tVmFsdWU6IGNsZWFuU3RyaW5nKGlucHV0LmZyb21WYWx1ZSwgMzIwKSxcbiAgICBtZXRhZGF0YTogaW5wdXQubWV0YWRhdGEgfHwge30sXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzdXBwb3J0VGlja2V0RXZlbnRJZDogZXZlbnRLZXksXG4gICAgc3VwcG9ydFRpY2tldElkOiB0aWNrZXRLZXksXG4gICAgdG9WYWx1ZTogY2xlYW5TdHJpbmcoaW5wdXQudG9WYWx1ZSwgMzIwKVxuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBJTlNFUlQgJHtldmVudH0gSU4gJHtjb2xsZWN0aW9uKENPTExFQ1RJT05TLlNVUFBPUlRfVElDS0VUX0VWRU5UUyl9XG4gICAgUkVUVVJOIE5FV1xuICBgO1xuICBjb25zdCBzYXZlZEV2ZW50ID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gIGF3YWl0IHNhdmVFZGdlKFxuICAgIGNvbnRleHQsXG4gICAgRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUX0VWRU5ULFxuICAgIGNyZWF0ZUhhc2goYGhhc1N1cHBvcnRUaWNrZXRFdmVudC0ke3RpY2tldEtleX0tJHtldmVudEtleX1gKSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5TVVBQT1JUX1RJQ0tFVFMsIHRpY2tldEtleSksXG4gICAgZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRfRVZFTlRTLCBldmVudEtleSksXG4gICAge2FjdG9yVXNlcklkOiBldmVudC5hY3RvclVzZXJJZCwgZXZlbnRUeXBlOiBldmVudC5ldmVudFR5cGV9XG4gICk7XG5cbiAgcmV0dXJuIHNhdmVkRXZlbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3VwcG9ydFRpY2tldEV2ZW50cyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgc3VwcG9ydFRpY2tldElkOiBzdHJpbmdcbik6IFByb21pc2U8U3VwcG9ydFRpY2tldEV2ZW50VHlwZVtdPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBldmVudCBJTiAxLi4xIE9VVEJPVU5EICR7ZG9jSWQoQ09MTEVDVElPTlMuU1VQUE9SVF9USUNLRVRTLCBzdXBwb3J0VGlja2V0SWQpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX1NVUFBPUlRfVElDS0VUX0VWRU5UKX1cbiAgICAgIFNPUlQgZXZlbnQuYWRkZWQgQVNDXG4gICAgICBSRVRVUk4gZXZlbnRcbiAgYDtcblxuICByZXR1cm4gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ3VzdG9tZXJOb3RpZmljYXRpb24gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGlucHV0OiBQYXJ0aWFsPEN1c3RvbWVyTm90aWZpY2F0aW9uVHlwZT5cbik6IFByb21pc2U8Q3VzdG9tZXJOb3RpZmljYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IG5vdygpO1xuICBjb25zdCB1c2VyS2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC51c2VySWQgfHwgJycpKTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uS2V5ID0gZG9jS2V5KFN0cmluZyhpbnB1dC5jdXN0b21lck5vdGlmaWNhdGlvbklkIHx8IGNyZWF0ZUhhc2goYGN1c3RvbWVyLW5vdGlmaWNhdGlvbi0ke3VzZXJLZXl9LSR7dGltZXN0YW1wfWApKSk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHtcbiAgICBfa2V5OiBub3RpZmljYXRpb25LZXksXG4gICAgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICBib2R5OiBjbGVhblN0cmluZyhpbnB1dC5ib2R5LCA0MDAwKSxcbiAgICBjdXN0b21lck5vdGlmaWNhdGlvbklkOiBub3RpZmljYXRpb25LZXksXG4gICAgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICBzZW50QXQ6IGlucHV0LnNlbnRBdCxcbiAgICBzdGF0dXM6IGlucHV0LnN0YXR1cyB8fCAncXVldWVkJyxcbiAgICBzdWJqZWN0OiBjbGVhblN0cmluZyhpbnB1dC5zdWJqZWN0LCAzMjApLFxuICAgIHN1cHBvcnRUaWNrZXRJZDogZG9jS2V5KFN0cmluZyhpbnB1dC5zdXBwb3J0VGlja2V0SWQgfHwgJycpKSxcbiAgICB0eXBlOiBjbGVhblN0cmluZyhpbnB1dC50eXBlLCAxNjApLFxuICAgIHVzZXJJZDogdXNlcktleVxuICB9O1xuICBjb25zdCBxdWVyeSA9IGFxbGBcbiAgICBJTlNFUlQgJHtub3RpZmljYXRpb259IElOICR7Y29sbGVjdGlvbihDT0xMRUNUSU9OUy5DVVNUT01FUl9OT1RJRklDQVRJT05TKX1cbiAgICBSRVRVUk4gTkVXXG4gIGA7XG4gIGNvbnN0IHNhdmVkTm90aWZpY2F0aW9uID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KHF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gIGF3YWl0IHNhdmVFZGdlKFxuICAgIGNvbnRleHQsXG4gICAgRURHRVMuSEFTX0NVU1RPTUVSX05PVElGSUNBVElPTixcbiAgICBjcmVhdGVIYXNoKGBoYXNDdXN0b21lck5vdGlmaWNhdGlvbi0ke3VzZXJLZXl9LSR7bm90aWZpY2F0aW9uS2V5fWApLFxuICAgIGRvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB1c2VyS2V5KSxcbiAgICBkb2NJZChDT0xMRUNUSU9OUy5DVVNUT01FUl9OT1RJRklDQVRJT05TLCBub3RpZmljYXRpb25LZXkpLFxuICAgIHtcbiAgICAgIHN0YXR1czogbm90aWZpY2F0aW9uLnN0YXR1cyxcbiAgICAgIHN1cHBvcnRUaWNrZXRJZDogbm90aWZpY2F0aW9uLnN1cHBvcnRUaWNrZXRJZCxcbiAgICAgIHR5cGU6IG5vdGlmaWNhdGlvbi50eXBlXG4gICAgfVxuICApO1xuXG4gIHJldHVybiBzYXZlZE5vdGlmaWNhdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDdXN0b21lck5vdGlmaWNhdGlvbnNCeVVzZXIgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nXG4pOiBQcm9taXNlPEN1c3RvbWVyTm90aWZpY2F0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBub3RpZmljYXRpb24gSU4gMS4uMSBPVVRCT1VORCAke2RvY0lkKENPTExFQ1RJT05TLlVTRVJTLCB1c2VySWQpfSAke2NvbGxlY3Rpb24oRURHRVMuSEFTX0NVU1RPTUVSX05PVElGSUNBVElPTil9XG4gICAgICBTT1JUIG5vdGlmaWNhdGlvbi5hZGRlZCBERVNDXG4gICAgICBSRVRVUk4gbm90aWZpY2F0aW9uXG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKS5xdWVyeShxdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xufTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVIYXNoIiwicGFyc2VJZCIsInBhcnNlUGhvbmUiLCJwYXJzZVN0cmluZyIsImFxbCIsImxpdGVyYWwiLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiQ29uZmlnIiwidXNlRGIiLCJpc0FkbWluVXNlciIsInNlc1NlbmQiLCJub3ciLCJEYXRlIiwiY29sbGVjdGlvbiIsIm5hbWUiLCJkb2NLZXkiLCJ2YWx1ZSIsIlN0cmluZyIsImRvY0lkIiwiY29sbGVjdGlvbk5hbWUiLCJrZXkiLCJleHRlcm5hbEtleSIsInByZWZpeCIsImlkIiwiY2xlYW5TdHJpbmciLCJsZW5ndGgiLCJjbGVhbkV4dGVybmFsSWQiLCJ0cmltIiwic2xpY2UiLCJlbnN1cmVEb2N1bWVudENvbGxlY3Rpb24iLCJkYXRhYmFzZSIsInRhcmdldCIsImV4aXN0cyIsImNyZWF0ZUNvbGxlY3Rpb24iLCJlcnJvciIsImVuc3VyZUVkZ2VDb2xsZWN0aW9uIiwiY3JlYXRlRWRnZUNvbGxlY3Rpb24iLCJyZXF1aXJlQ3JtQWRtaW4iLCJjb250ZXh0Iiwic2Vzc2lvbiIsIkVycm9yIiwicmVxdWlyZUNybUFkbWluaXN0cmF0b3IiLCJhbGxvd2VkQ29udGFjdEZpZWxkcyIsIlNldCIsInN1cHBvcnRQcmlvcml0aWVzIiwic3VwcG9ydFN0YXR1c2VzIiwic3VwcG9ydFR5cGVzIiwiZW1haWxQYXR0ZXJuIiwiZXNjYXBlSHRtbCIsInJlcGxhY2UiLCJzYW5pdGl6ZUh0bWwiLCJzYW5pdGl6ZUNzcyIsImh0bWxUb1RleHQiLCJjaHVuayIsIml0ZW1zIiwic2l6ZSIsImdyb3VwcyIsImluZGV4IiwicHVzaCIsInN1Ym1pdENybUZvcm0iLCJpbnB1dCIsIm1hcmtldGluZ09wdEluIiwiZW1haWwiLCJ0b0xvd2VyQ2FzZSIsInJhd1Bob25lIiwicGhvbmUiLCJkYXRhYmFzZU5hbWUiLCJDUk1fRk9STV9TVUJNSVNTSU9OUyIsInRpbWVzdGFtcCIsInNvdXJjZSIsImZvcm1JZCIsInZhbHVlcyIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiZ2VuZXJhdGVkVXNlcktleSIsImNvbnNlbnQiLCJtYXJrZXRpbmdPcHRJbkF0IiwibWFya2V0aW5nT3B0T3V0QXQiLCJ1c2VySW5zZXJ0IiwiX2tleSIsImFjdGl2ZSIsImFkZGVkIiwibWFpbGluZ0xpc3QiLCJtYXJrZXRpbmdDb25zZW50U291cmNlIiwibW9kaWZpZWQiLCJ0eXBlIiwidXNlckFjY2VzcyIsInVzZXJJZCIsInZlcmlmaWVkRW1haWwiLCJ2ZXJpZmllZFBob25lIiwidXNlclVwZGF0ZSIsInVzZXIiLCJxdWVyeSIsIlVTRVJTIiwidGhlbiIsImN1cnNvciIsIm5leHQiLCJzdWJtaXNzaW9uSWQiLCJzdWJtaXNzaW9uIiwic2F2ZWQiLCJnZXRDcm1Gb3JtU3VibWlzc2lvbnMiLCJhbGwiLCJnZXRDcm1Db250YWN0cyIsImZpbHRlciIsInNlYXJjaCIsImZpZWxkIiwiaGFzIiwib3B0ZWRJbk9ubHkiLCJvcGVyYXRvciIsImluY2x1ZGVzIiwic2VuZENybUNhbXBhaWduIiwic3ViamVjdCIsImJvZHlIdG1sIiwiaHRtbCIsImNzcyIsImNhbmRpZGF0ZXMiLCJzZWxlY3RlZElkcyIsInVzZXJJZHMiLCJtYXAiLCJyZWNpcGllbnRzIiwiQm9vbGVhbiIsImNhbXBhaWduSWQiLCJjYW1wYWlnbiIsImZhaWxlZENvdW50IiwicmVjaXBpZW50Q291bnQiLCJzZW50Q291bnQiLCJzdGF0dXMiLCJDUk1fQ0FNUEFJR05TIiwicmVjaXBpZW50c0JhdGNoIiwiRGVzdGluYXRpb24iLCJCY2NBZGRyZXNzZXMiLCJyZWNpcGllbnQiLCJNZXNzYWdlIiwiQm9keSIsIkh0bWwiLCJEYXRhIiwiVGV4dCIsIlN1YmplY3QiLCJTb3VyY2UiLCJjb25maWciLCJkZXRhaWxzIiwic3VwcG9ydE5hbWUiLCJzdXBwb3J0RW1haWwiLCJfZXJyb3IiLCJyZXN1bHQiLCJzZW50QXQiLCJzYXZlRWRnZSIsImVkZ2VDb2xsZWN0aW9uIiwiZWRnZUtleSIsImZyb20iLCJ0byIsImRhdGEiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJjcmVhdGVNYWlsaW5nTGlzdCIsIm1haWxpbmdMaXN0SWQiLCJjcmVhdGVkQnlVc2VySWQiLCJkZXNjcmlwdGlvbiIsIk1BSUxJTkdfTElTVFMiLCJnZXRNYWlsaW5nTGlzdHMiLCJhZGRVc2VyVG9NYWlsaW5nTGlzdCIsInVzZXJLZXkiLCJsaXN0S2V5IiwiSEFTX01BSUxJTkdfTElTVCIsImFkZGVkQnlVc2VySWQiLCJyZW1vdmVVc2VyRnJvbU1haWxpbmdMaXN0IiwidXBkYXRlIiwicmVtb3ZlZEF0IiwiZ2V0TWFpbGluZ0xpc3RVc2VycyIsImxpc3RJZCIsImdldFVzZXJzQnlQdXJjaGFzZWRQcm9kdWN0IiwicHJvZHVjdElkIiwicHJvZHVjdEtleSIsIlNIT1BJRllfUFJPRFVDVFMiLCJIQVNfUFVSQ0hBU0VEX1BST0RVQ1QiLCJIQVNfQ1VTVE9NRVJfT1JERVIiLCJnZXRFbGlnaWJsZU1haWxpbmdVc2VycyIsIm9wdGlvbnMiLCJleGNsdWRlT3BlblN1cHBvcnRUaWNrZXRzIiwiSEFTX1NVUFBPUlRfVElDS0VUIiwiaW5nZXN0U2hvcGlmeUN1c3RvbWVyT3JkZXIiLCJzaG9waWZ5Q3VzdG9tZXJJZCIsInNob3BpZnlPcmRlcklkIiwiY3VzdG9tZXIiLCJwcm9kdWN0SWRzIiwiQXJyYXkiLCJwcm9kdWN0cyIsInByb2R1Y3QiLCJ1bmRlZmluZWQiLCJsYXN0UHVyY2hhc2VkQXQiLCJwdXJjaGFzZWRBdCIsInVzZXJRdWVyeSIsInJlc29sdmVkVXNlcktleSIsIm9yZGVyS2V5Iiwib3JkZXIiLCJjdXJyZW5jeSIsInRvVXBwZXJDYXNlIiwiY3VzdG9tZXJPcmRlcklkIiwidG90YWxQcmljZSIsIk51bWJlciIsIm9yZGVyUXVlcnkiLCJDVVNUT01FUl9PUkRFUlMiLCJzYXZlZE9yZGVyIiwiUHJvbWlzZSIsImZpbmQiLCJpdGVtIiwicHJvZHVjdERvYyIsInRpdGxlIiwidmFyaWFudElkIiwicHJvZHVjdFF1ZXJ5IiwiZ2V0Q3VzdG9tZXJPcmRlcnNCeVVzZXIiLCJzZW5kU3VwcG9ydFRpY2tldEVtYWlsIiwidGlja2V0IiwiaGVhZGluZyIsImdldCIsInRpY2tldE51bWJlciIsInN1cHBvcnRUaWNrZXRJZCIsInN0YXR1c1VybCIsImVuY29kZVVSSUNvbXBvbmVudCIsInRleHQiLCJUb0FkZHJlc3NlcyIsImNhdGNoIiwiY3JlYXRlU3VwcG9ydFRpY2tldCIsInRpY2tldEtleSIsInRvSVNPU3RyaW5nIiwiYXNzaWduZWRUb1VzZXJJZCIsInByaW9yaXR5IiwiU1VQUE9SVF9USUNLRVRTIiwic2F2ZWRUaWNrZXQiLCJhZGRTdXBwb3J0VGlja2V0RXZlbnQiLCJhY3RvclVzZXJJZCIsImV2ZW50VHlwZSIsIm1ldGFkYXRhIiwidG9WYWx1ZSIsInN1Ym1pdFB1YmxpY1N1cHBvcnRUaWNrZXQiLCJ0ZXN0IiwiU1VQUE9SVF9USUNLRVRfRVZFTlRTIiwiU1VQUE9SVF9USUNLRVRfTUVTU0FHRVMiLCJIQVNfU1VQUE9SVF9USUNLRVRfRVZFTlQiLCJIQVNfU1VQUE9SVF9USUNLRVRfTUVTU0FHRSIsIm9wdGVkSW4iLCJnZXRQdWJsaWNTdXBwb3J0VGlja2V0IiwiZW1haWxBZGRyZXNzIiwibnVtYmVyIiwiZ2V0U3VwcG9ydFRpY2tldHMiLCJmaWx0ZXJzIiwidXBkYXRlU3VwcG9ydFRpY2tldFN0YXR1cyIsInJlc29sdXRpb25TdW1tYXJ5IiwicHJldmlvdXMiLCJjb21wbGV0ZWRBdCIsImRvbmVBdCIsInJlc29sdmVkQXQiLCJjbG9zZWRBdCIsImxhc3RVcGRhdGVEZXRhaWxzIiwiZnJvbVZhbHVlIiwiY3JlYXRlQ3VzdG9tZXJOb3RpZmljYXRpb24iLCJib2R5IiwidXBkYXRlU3VwcG9ydFRpY2tldFByb2dyZXNzIiwibWFya2Rvd24iLCJhZGRTdXBwb3J0VGlja2V0TWVzc2FnZSIsImF1dGhvclVzZXJJZCIsInZpc2liaWxpdHkiLCJtZXNzYWdlS2V5Iiwic3VwcG9ydFRpY2tldE1lc3NhZ2VJZCIsIm1lc3NhZ2UiLCJzYXZlZE1lc3NhZ2UiLCJnZXRTdXBwb3J0VGlja2V0TWVzc2FnZXMiLCJldmVudEtleSIsInN1cHBvcnRUaWNrZXRFdmVudElkIiwiZXZlbnQiLCJzYXZlZEV2ZW50IiwiZ2V0U3VwcG9ydFRpY2tldEV2ZW50cyIsIm5vdGlmaWNhdGlvbktleSIsImN1c3RvbWVyTm90aWZpY2F0aW9uSWQiLCJub3RpZmljYXRpb24iLCJDVVNUT01FUl9OT1RJRklDQVRJT05TIiwic2F2ZWROb3RpZmljYXRpb24iLCJIQVNfQ1VTVE9NRVJfTk9USUZJQ0FUSU9OIiwiZ2V0Q3VzdG9tZXJOb3RpZmljYXRpb25zQnlVc2VyIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQzFGLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQVFDLE9BQU8sUUFBTyxlQUFlO0FBRXJDLFNBQVFDLFdBQVcsRUFBRUMsS0FBSyxRQUFPLDhCQUE4QjtBQUMvRCxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLFdBQVcsUUFBTywyQkFBMkI7QUFDckQsU0FBUUMsT0FBTyxRQUFPLGFBQWE7QUF1Qm5DLE1BQU1DLE1BQU0sSUFBY0MsS0FBS0QsR0FBRztBQUNsQyxNQUFNRSxhQUFhLENBQUNDLE9BQWlCVixRQUFRVTtBQUM3QyxNQUFNQyxTQUFTLENBQUNDLFFBQVEsRUFBRSxHQUFhaEIsUUFBUWlCLE9BQU9EO0FBQ3RELE1BQU1FLFFBQVEsQ0FBQ0MsZ0JBQXdCQyxNQUFNLEVBQUUsR0FBYSxHQUFHRCxlQUFlLENBQUMsRUFBRUosT0FBT0ssTUFBTTtBQUM5RixNQUFNQyxjQUFjLENBQUNDLFFBQWdCQyxLQUFLLEVBQUUsR0FBYXhCLFdBQVcsR0FBR3VCLE9BQU8sQ0FBQyxFQUFFTCxPQUFPTSxLQUFLLEVBQUU7QUFDL0YsTUFBTUMsY0FBYyxDQUFDUixPQUFnQlMsU0FBUyxHQUFHLEdBQWF2QixZQUFZZSxPQUFPRCxTQUFTLEtBQUtTO0FBQy9GLE1BQU1DLGtCQUFrQixDQUFDVixPQUFnQlMsU0FBUyxHQUFHLEdBQWFSLE9BQU9ELFNBQVMsSUFBSVcsSUFBSSxHQUFHQyxLQUFLLENBQUMs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
|