@dbx-tools/email 0.9.5 → 0.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -17
- package/exports.ts +2 -0
- package/index.ts +2 -1
- package/lib/exports.d.ts +2 -0
- package/lib/exports.js +3 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.js +3 -2
- package/lib/src/config.js +15 -14
- package/lib/src/email-html.d.ts +2 -2
- package/lib/src/email-html.js +3 -3
- package/lib/src/outbox.js +3 -3
- package/lib/src/plugin.d.ts +10 -17
- package/lib/src/plugin.js +14 -26
- package/lib/src/sender.js +6 -6
- package/lib/src/tool.js +3 -3
- package/lib/src/transport.js +6 -14
- package/package.json +7 -6
- package/src/config.ts +19 -13
- package/src/email-html.ts +2 -2
- package/src/outbox.ts +2 -2
- package/src/plugin.ts +12 -34
- package/src/sender.ts +5 -5
- package/src/tool.ts +2 -2
- package/src/transport.ts +5 -18
package/lib/src/plugin.js
CHANGED
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
*
|
|
23
23
|
* @module
|
|
24
24
|
*/
|
|
25
|
-
import { AuthenticationError, ConfigurationError, ConnectionError, ExecutionError, getExecutionContext,
|
|
26
|
-
import { defineTool
|
|
27
|
-
import {
|
|
28
|
-
import { log,
|
|
25
|
+
import { AuthenticationError, ConfigurationError, ConnectionError, ExecutionError, getExecutionContext, toPlugin, ValidationError, } from "@databricks/appkit";
|
|
26
|
+
import { defineTool } from "@databricks/appkit/beta";
|
|
27
|
+
import { brandContext, ToolRegistryPlugin } from "@dbx-tools/appkit";
|
|
28
|
+
import { log, stringUtils, token } from "@dbx-tools/shared-core";
|
|
29
29
|
import { email as sharedEmail, } from "@dbx-tools/shared-email";
|
|
30
30
|
import { emailBrandFromContext } from "./brand.js";
|
|
31
31
|
import { EMAIL_CONFIG_SCHEMA } from "./config.js";
|
|
@@ -45,12 +45,12 @@ const logger = log.logger("email");
|
|
|
45
45
|
* @example
|
|
46
46
|
* ```ts
|
|
47
47
|
* import { createApp, server } from "@databricks/appkit";
|
|
48
|
-
* import {
|
|
48
|
+
* import { email } from "@dbx-tools/email";
|
|
49
49
|
*
|
|
50
50
|
* await createApp({
|
|
51
51
|
* plugins: [
|
|
52
52
|
* server(),
|
|
53
|
-
*
|
|
53
|
+
* email({
|
|
54
54
|
* smtp: { host: "smtp.example.com", user: "apikey", password: process.env.SMTP_KEY },
|
|
55
55
|
* domain: "mail.example.com",
|
|
56
56
|
* }),
|
|
@@ -58,7 +58,7 @@ const logger = log.logger("email");
|
|
|
58
58
|
* });
|
|
59
59
|
* ```
|
|
60
60
|
*/
|
|
61
|
-
export class EmailPlugin extends
|
|
61
|
+
export class EmailPlugin extends ToolRegistryPlugin {
|
|
62
62
|
static manifest = {
|
|
63
63
|
name: "email",
|
|
64
64
|
displayName: "Email",
|
|
@@ -82,7 +82,7 @@ export class EmailPlugin extends Plugin {
|
|
|
82
82
|
* against the same schema first, but re-parsing is what gives the body typed
|
|
83
83
|
* arguments instead of `unknown`.
|
|
84
84
|
*/
|
|
85
|
-
|
|
85
|
+
toolRegistry = {
|
|
86
86
|
[SEND_TOOL]: defineTool({
|
|
87
87
|
description: SEND_EMAIL_DESCRIPTION,
|
|
88
88
|
schema: sharedEmail.emailMessageSchema,
|
|
@@ -105,7 +105,7 @@ export class EmailPlugin extends Plugin {
|
|
|
105
105
|
async setup() {
|
|
106
106
|
const { transporter, config } = getEmailRuntime({
|
|
107
107
|
...this.config,
|
|
108
|
-
brand: this.config.brand ?? emailBrandFromContext(
|
|
108
|
+
brand: this.config.brand ?? emailBrandFromContext(brandContext.getBrandContext()),
|
|
109
109
|
});
|
|
110
110
|
setEmailExecutor((fn, settings) => this.execute(fn, settings));
|
|
111
111
|
const policy = {
|
|
@@ -180,7 +180,7 @@ export class EmailPlugin extends Plugin {
|
|
|
180
180
|
method: "get",
|
|
181
181
|
path: SENDERS_ROUTE,
|
|
182
182
|
handler: async (req, res) => {
|
|
183
|
-
const oboToken =
|
|
183
|
+
const oboToken = stringUtils.trimToNull(req.header(token.ACCESS_TOKEN_HEADER));
|
|
184
184
|
const scoped = oboToken === null ? this : this.asUser(req);
|
|
185
185
|
const result = await scoped.executeListSenders();
|
|
186
186
|
if (!result.ok) {
|
|
@@ -206,18 +206,6 @@ export class EmailPlugin extends Plugin {
|
|
|
206
206
|
listSenders: async () => unwrap(await this.executeListSenders()),
|
|
207
207
|
};
|
|
208
208
|
}
|
|
209
|
-
/** AppKit `ToolProvider`: the tool definitions offered to an agent. */
|
|
210
|
-
getAgentTools() {
|
|
211
|
-
return toolsFromRegistry(this.tools);
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* AppKit `ToolProvider`: run one tool call. Arguments are validated against
|
|
215
|
-
* the tool's schema first, and a validation failure comes back as an
|
|
216
|
-
* LLM-friendly string so the model can correct itself on the next turn.
|
|
217
|
-
*/
|
|
218
|
-
async executeAgentTool(name, args, signal) {
|
|
219
|
-
return executeFromRegistry(this.tools, name, args, signal);
|
|
220
|
-
}
|
|
221
209
|
/**
|
|
222
210
|
* Send one message, resolving the sender for the caller in scope when
|
|
223
211
|
* `from` is not pinned. The interceptor chain is applied inside
|
|
@@ -297,19 +285,19 @@ function unwrap(result) {
|
|
|
297
285
|
* @example
|
|
298
286
|
* ```ts
|
|
299
287
|
* import { createApp, server } from "@databricks/appkit";
|
|
300
|
-
* import {
|
|
288
|
+
* import { defaultEmailBrand, email } from "@dbx-tools/email";
|
|
301
289
|
*
|
|
302
290
|
* await createApp({
|
|
303
291
|
* plugins: [
|
|
304
292
|
* server(),
|
|
305
|
-
*
|
|
293
|
+
* email({
|
|
306
294
|
* domain: "mail.example.com",
|
|
307
295
|
* allowedSenders: ["*@mail.example.com"],
|
|
308
|
-
* brand:
|
|
296
|
+
* brand: defaultEmailBrand,
|
|
309
297
|
* }),
|
|
310
298
|
* ],
|
|
311
299
|
* });
|
|
312
300
|
* ```
|
|
313
301
|
*/
|
|
314
302
|
export const email = toPlugin(EmailPlugin);
|
|
315
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsR0FLaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsVUFBVSxFQUNWLG1CQUFtQixFQUNuQixpQkFBaUIsR0FJbEIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsS0FBSyxJQUFJLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFDTCxLQUFLLElBQUksV0FBVyxHQUlyQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsZ0JBQWdCLEVBQ2hCLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLCtFQUErRTtBQUMvRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFFakMsNEVBQTRFO0FB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IGBlbWFpbGApIHRoYXQgb3ducyB0aGUgU01UUCBydW50aW1lXG4gKiBmb3Igb3V0Ym91bmQgbWFpbC4gUmVnaXN0ZXJpbmcgaXQgdmFsaWRhdGVzIHRoZSBTTVRQIGNvbmZpZ3VyYXRpb25cbiAqIGFuZCB2ZXJpZmllcyBjb25uZWN0aXZpdHkgYXQgc3RhcnR1cCwgc28gYSBiYWQgaG9zdCAvIGNyZWRlbnRpYWxcbiAqIHN1cmZhY2VzIGluIHRoZSBib290IGxvZ3MgaW5zdGVhZCBvZiBvbiB0aGUgZmlyc3QgYXBwcm92ZWQgc2VuZCwgYW5kXG4gKiBpbnN0YWxscyB0aGlzIHBsdWdpbidzIGBleGVjdXRlKClgIGFzIHRoZSBydW50aW1lJ3MgZXhlY3V0b3Igc28gZXZlcnlcbiAqIHNlbmQgcGlja3MgdXAgQXBwS2l0J3MgcmV0cnkgLyB0aW1lb3V0IC8gdGVsZW1ldHJ5IGNoYWluLlxuICpcbiAqIFRoZSBwbHVnaW4gaXMgYWxzbyBhIGBUb29sUHJvdmlkZXJgLCBzbyBhbiBBcHBLaXQgYWdlbnQgY2FuIHJlYWNoIGFuXG4gKiBgZW1haWwuc2VuZGAgdG9vbCBkaXJlY3RseTsgdGhlIHtAbGluayBlbWFpbFRvb2x9IGV4cG9ydCBpcyB0aGUgc2FtZVxuICogY2FwYWJpbGl0eSBmb3IgYSBNYXN0cmEgYWdlbnQuIEJvdGggc2hhcmUgdGhlIHRyYW5zcG9ydCBwcmltZWQgaGVyZSxcbiAqIGFuZCB7QGxpbmsgc2VuZEVtYWlsfSBpcyBhdmFpbGFibGUgdG8gbm9uLWFnZW50IGNhbGxlcnMuXG4gKlxuICogQ29uZmlndXJhdGlvbiBpcyB0aGUgbWFuaWZlc3QtcHVibGlzaGVkIHtAbGluayBFbWFpbFBsdWdpbkNvbmZpZ31cbiAqIChTTVRQIGhvc3QvcG9ydC9jcmVkZW50aWFscywgc2VuZGVyIGRvbWFpbiBvciBleHBsaWNpdCBgZnJvbWAsIHRoZVxuICogc2VuZGVyIHBvbGljeSwgYW5kIGFuIG9wdGlvbmFsIGBhbGxvd2VkU2VuZGVyc2AgcmVzdHJpY3Rpb24pLCB3aXRoXG4gKiB1bnByZWZpeGVkIGBTTVRQXypgIC8gYEVNQUlMXypgIGVudmlyb25tZW50IGZhbGxiYWNrcy5cbiAqXG4gKiBUaGUgcGx1Z2luIG1vdW50cyBvbmUgcm91dGUgdW5kZXIgaXRzIGJhc2UgcGF0aCAoYC9hcGkvZW1haWxgKTpcbiAqIGBHRVQgL3NlbmRlcnNgIHJldHVybnMgdGhlIHBlcm1pdHRlZCBgRnJvbWAgb3B0aW9ucyBmb3IgdGhlIGNhbGxpbmdcbiAqIHVzZXIsIHNvIGEgY29tcG9zZSBVSSBjYW4gb2ZmZXIgdGhlbSBpbiBhIGRyb3Bkb3duLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBBdXRoZW50aWNhdGlvbkVycm9yLFxuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgRXhlY3V0aW9uRXJyb3IsXG4gIGdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIFBsdWdpbixcbiAgdG9QbHVnaW4sXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgdHlwZSBBcHBLaXRFcnJvcixcbiAgdHlwZSBFeGVjdXRpb25SZXN1bHQsXG4gIHR5cGUgSUFwcFJvdXRlcixcbiAgdHlwZSBQbHVnaW5NYW5pZmVzdCxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHtcbiAgZGVmaW5lVG9vbCxcbiAgZXhlY3V0ZUZyb21SZWdpc3RyeSxcbiAgdG9vbHNGcm9tUmVnaXN0cnksXG4gIHR5cGUgQWdlbnRUb29sRGVmaW5pdGlvbixcbiAgdHlwZSBUb29sUHJvdmlkZXIsXG4gIHR5cGUgVG9vbFJlZ2lzdHJ5LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0L2JldGFcIjtcbmltcG9ydCB7IGJyYW5kIGFzIGFwcGtpdEJyYW5kIH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2csIHN0cmluZywgdG9rZW4gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgZW1haWwgYXMgc2hhcmVkRW1haWwsXG4gIHR5cGUgRW1haWxNZXNzYWdlLFxuICB0eXBlIEVtYWlsUmVzdWx0LFxuICB0eXBlIEVtYWlsU2VuZGVycyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgeyBlbWFpbEJyYW5kRnJvbUNvbnRleHQgfSBmcm9tIFwiLi9icmFuZC50c1wiO1xuaW1wb3J0IHsgRU1BSUxfQ09ORklHX1NDSEVNQSwgdHlwZSBFbWFpbFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgRU1BSUxfU0VOREVSU19TRVRUSU5HUywgRU1BSUxfVkVSSUZZX1NFVFRJTkdTIH0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IGlzU2VuZGVyQWxsb3dlZCwgbGlzdFNlbmRlck9wdGlvbnMsIHJlc29sdmVTZW5kZXJBZGRyZXNzIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5pbXBvcnQgeyBTRU5EX0VNQUlMX0RFU0NSSVBUSU9OIH0gZnJvbSBcIi4vdG9vbC50c1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW1haWxSdW50aW1lLFxuICByZXNldEVtYWlsUnVudGltZSxcbiAgc2VuZEVtYWlsLFxuICB0eXBlIFNlbmRFbWFpbE9wdGlvbnMsXG4gIHNldEVtYWlsRXhlY3V0b3IsXG4gIHZlcmlmeUVtYWlsVHJhbnNwb3J0LFxufSBmcm9tIFwiLi90cmFuc3BvcnQudHNcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlICh1bmRlciBgL2FwaS9lbWFpbGApIGZvciB0aGUgc2VuZGVyLW9wdGlvbnMgbG9va3VwLiAqL1xuY29uc3QgU0VOREVSU19ST1VURSA9IFwiL3NlbmRlcnNcIjtcblxuLyoqIFJlZ2lzdHJ5IGtleSBvZiB0aGUgYWdlbnQgdG9vbCwgd2hpY2ggYWdlbnRzIGFkZHJlc3MgYXMgYGVtYWlsLnNlbmRgLiAqL1xuY29uc3QgU0VORF9UT09MID0gXCJzZW5kXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJlbWFpbFwiKTtcblxuLyoqXG4gKiBBcHBLaXQgcGx1Z2luIHRoYXQgY29uZmlndXJlcyBhbmQgdmVyaWZpZXMgdGhlIFNNVFAgdHJhbnNwb3J0IHVzZWQgYnlcbiAqIHRoZSBgc2VuZF9lbWFpbGAgdG9vbCwgYW5kIGV4cG9zZXMgc2VuZGluZyBhcyBhbiBBcHBLaXQgYWdlbnQgdG9vbC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgcGx1Z2luIGFzIGVtYWlsUGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvZW1haWxcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgZW1haWxQbHVnaW4uZW1haWwoe1xuICogICAgICAgc210cDogeyBob3N0OiBcInNtdHAuZXhhbXBsZS5jb21cIiwgdXNlcjogXCJhcGlrZXlcIiwgcGFzc3dvcmQ6IHByb2Nlc3MuZW52LlNNVFBfS0VZIH0sXG4gKiAgICAgICBkb21haW46IFwibWFpbC5leGFtcGxlLmNvbVwiLFxuICogICAgIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEVtYWlsUGx1Z2luIGV4dGVuZHMgUGx1Z2luPEVtYWlsUGx1Z2luQ29uZmlnPiBpbXBsZW1lbnRzIFRvb2xQcm92aWRlciB7XG4gIHN0YXRpYyBtYW5pZmVzdCA9IHtcbiAgICBuYW1lOiBcImVtYWlsXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiRW1haWxcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiU2VuZHMgYXBwcm92YWwtZ2F0ZWQgZW1haWwgb3ZlciBTTVRQLCB3aXRoIHRoZSBzZW5kZXIgZGVyaXZlZCBmcm9tIFwiICtcbiAgICAgIFwidGhlIG9uLWJlaGFsZi1vZiB1c2VyJ3MgYWRkcmVzcyBvbiBhIGNvbmZpZ3VyZWQgZG9tYWluLlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7XG4gICAgICByZXF1aXJlZDogW10sXG4gICAgICBvcHRpb25hbDogW10sXG4gICAgfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBFTUFJTF9DT05GSUdfU0NIRU1BIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwiZW1haWxcIj47XG5cbiAgLyoqXG4gICAqIFRoZSB0b29sIHRoaXMgcGx1Z2luIG9mZmVycyB0byBhbiBBcHBLaXQgYWdlbnQuXG4gICAqXG4gICAqIE5vdCBgYXV0b0luaGVyaXRhYmxlYDogYSBzZW5kIGlzIGlycmV2ZXJzaWJsZSBhbmQgbGVhdmVzIHRoZSB3b3Jrc3BhY2UsXG4gICAqIHNvIGl0IG11c3Qgb25seSBhcHBlYXIgaW4gYW4gYWdlbnQgdGhhdCBhc2tlZCBmb3IgaXQgYW5kIGFjY2VwdGVkIHRoZVxuICAgKiBzZW5kZXIgcG9saWN5IHRoYXQgY29tZXMgd2l0aCBpdC5cbiAgICpcbiAgICogYGV4ZWN1dGVgIHJlLXBhcnNlcyBpdHMgYXJndW1lbnRzIHdpdGggdGhlIGxvY2FsIHNjaGVtYTogQXBwS2l0IHZhbGlkYXRlc1xuICAgKiBhZ2FpbnN0IHRoZSBzYW1lIHNjaGVtYSBmaXJzdCwgYnV0IHJlLXBhcnNpbmcgaXMgd2hhdCBnaXZlcyB0aGUgYm9keSB0eXBlZFxuICAgKiBhcmd1bWVudHMgaW5zdGVhZCBvZiBgdW5rbm93bmAuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHRvb2xzOiBUb29sUmVnaXN0cnkgPSB7XG4gICAgW1NFTkRfVE9PTF06IGRlZmluZVRvb2woe1xuICAgICAgZGVzY3JpcHRpb246IFNFTkRfRU1BSUxfREVTQ1JJUFRJT04sXG4gICAgICBzY2hlbWE6IHNoYXJlZEVtYWlsLmVtYWlsTWVzc2FnZVNjaGVtYSxcbiAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJ3cml0ZVwiLCByZXF1aXJlc1VzZXJDb250ZXh0OiB0cnVlIH0sXG4gICAgICBhdXRvSW5oZXJpdGFibGU6IGZhbHNlLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT5cbiAgICAgICAgdGhpcy5zZW5kKHNoYXJlZEVtYWlsLmVtYWlsTWVzc2FnZVNjaGVtYS5wYXJzZShhcmdzKSwgdW5kZWZpbmVkLCBzaWduYWwpLFxuICAgIH0pLFxuICB9O1xuXG4gIC8qKlxuICAgKiBQcmltZSB0aGUgc2hhcmVkIHJ1bnRpbWUgZnJvbSB0aGlzIHBsdWdpbidzIGNvbmZpZyAob3ZlciBlbnYpLCByb3V0ZSB0aGVcbiAgICogdG9vbHMnIHNlbmRzIHRocm91Z2ggdGhpcyBwbHVnaW4ncyBpbnRlcmNlcHRvciBjaGFpbiwgYW5kIGxvZyB0aGVcbiAgICogZWZmZWN0aXZlIHNlbmRlciBwb2xpY3kgc28gYW4gYWN0aXZlIHJlc3RyaWN0aW9uIGlzIG9idmlvdXMgYXQgYm9vdC4gSW5cbiAgICogU01UUCBtb2RlLCBmYWlsIHNldHVwIHdoZW4gdGhlIHRyYW5zcG9ydCBjYW5ub3QgYmUgdmVyaWZpZWQ6IGEgYmFkIGhvc3RcbiAgICogb3IgY3JlZGVudGlhbCBpcyBhIGRlcGxveS10aW1lIG1pc3Rha2UgYW5kIHNob3VsZCBzdG9wIHRoZSBhcHAgcmF0aGVyXG4gICAqIHRoYW4gd2FpdCBmb3IgYSB1c2VyIHRvIGFwcHJvdmUgYSBzZW5kIHRoYXQgY2Fubm90IHdvcmsuIFdpdGggbm8gU01UUFxuICAgKiBjcmVkZW50aWFscyB0aGUgcnVudGltZSBpcyBpbiBmaWxlL291dGJveCBtb2RlIChvbmx5IHdoZW5cbiAgICogYEVNQUlMX09VVEJPWF9NT0RFYCBpcyBzZXQpLCBsb2dnZWQgbG91ZGx5IGhlcmUgc28gaXQgaXMgb2J2aW91cyBtYWlsXG4gICAqIGlzIGJlaW5nIHdyaXR0ZW4gdG8gZGlzayByYXRoZXIgdGhhbiBzZW50LlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB0cmFuc3BvcnRlciwgY29uZmlnIH0gPSBnZXRFbWFpbFJ1bnRpbWUoe1xuICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgICBicmFuZDogdGhpcy5jb25maWcuYnJhbmQgPz8gZW1haWxCcmFuZEZyb21Db250ZXh0KGFwcGtpdEJyYW5kLmdldEJyYW5kQ29udGV4dCgpKSxcbiAgICB9KTtcbiAgICBzZXRFbWFpbEV4ZWN1dG9yKChmbiwgc2V0dGluZ3MpID0+IHRoaXMuZXhlY3V0ZShmbiwgc2V0dGluZ3MpKTtcbiAgICBjb25zdCBwb2xpY3kgPSB7XG4gICAgICBtb2RlOiBjb25maWcubW9kZSxcbiAgICAgIHNlbmRlclBvbGljeTogY29uZmlnLnNlbmRlclBvbGljeSxcbiAgICAgIHJlc3RyaWN0ZWQ6IGNvbmZpZy5hbGxvd2VkU2VuZGVycy5sZW5ndGggPiAwLFxuICAgICAgLi4uKGNvbmZpZy5hbGxvd2VkU2VuZGVycy5sZW5ndGggPiAwID8geyBhbGxvd2VkU2VuZGVyczogY29uZmlnLmFsbG93ZWRTZW5kZXJzIH0gOiB7fSksXG4gICAgfTtcbiAgICBpZiAoY29uZmlnLm1vZGUgPT09IFwiZmlsZVwiKSB7XG4gICAgICBsb2dnZXIud2FybihcIm91dGJveDplbmFibGVkXCIsIHtcbiAgICAgICAgZGlyOiBjb25maWcub3V0RGlyLFxuICAgICAgICByZWFzb246IFwibm8gU01UUCBjcmVkZW50aWFscyBjb25maWd1cmVkOyBlbWFpbHMgYXJlIHdyaXR0ZW4gdG8gZGlzayBpbnN0ZWFkIG9mIHNlbnRcIixcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCBwb2xpY3kpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2ZXJpZmllZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZShcbiAgICAgIGFzeW5jIChzaWduYWwpID0+IHZlcmlmeUVtYWlsVHJhbnNwb3J0KHRyYW5zcG9ydGVyLCBzaWduYWwpLFxuICAgICAgRU1BSUxfVkVSSUZZX1NFVFRJTkdTLFxuICAgICk7XG4gICAgaWYgKCF2ZXJpZmllZC5vaykge1xuICAgICAgbG9nZ2VyLmVycm9yKFwic210cDp1bnZlcmlmaWVkXCIsIHtcbiAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgICBzdGF0dXM6IHZlcmlmaWVkLnN0YXR1cyxcbiAgICAgICAgZXJyb3I6IHZlcmlmaWVkLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgICAgXCJTTVRQXCIsXG4gICAgICAgIGBDb3VsZCBub3QgdmVyaWZ5ICR7Y29uZmlnLmhvc3R9OiR7Y29uZmlnLnBvcnR9LiBDaGVjayBTTVRQX0hPU1QsIFNNVFBfUE9SVCwgU01UUF9TRUNVUkUsIGFuZCB0aGUgY3JlZGVudGlhbHMsIG9yIHNldCBFTUFJTF9PVVRCT1hfTU9ERT0xIGZvciBsb2NhbCBvdXRib3ggdGVzdGluZy5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7XG4gICAgICAuLi5wb2xpY3ksXG4gICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgc2VjdXJlOiBjb25maWcuc2VjdXJlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBTTVRQIGNvbm5lY3Rpb24gcG9vbC4gSWRlbXBvdGVudC4gKi9cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVzZXRFbWFpbFJ1bnRpbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBYm9ydCBpbi1mbGlnaHQgd29yay4gQXBwS2l0J3MgZ3JhY2VmdWwgc2h1dGRvd24gb25seSBpbnZva2VzIHRoaXMgaG9vayAtXG4gICAqIGl0IG5ldmVyIGNhbGxzIHtAbGluayBzaHV0ZG93bn0gLSBzbyB0aGUgU01UUCBwb29sIGlzIGNsb3NlZCBmcm9tIGhlcmUgb3JcbiAgICogaXQgbGVha3MgYXQgU0lHVEVSTS4gVGhlIHRlYXJkb3duIGlzIHN5bmNocm9ub3VzIGFuZCBpZGVtcG90ZW50LCBzbyB0aGVcbiAgICogdW4tYXdhaXRlZCBjYWxsIGNvc3RzIG5vdGhpbmcuXG4gICAqL1xuICBvdmVycmlkZSBhYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTogdm9pZCB7XG4gICAgc3VwZXIuYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk7XG4gICAgdm9pZCB0aGlzLnNodXRkb3duKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlIHRoZSBzZW5kZXItb3B0aW9ucyBsb29rdXAgc28gVUkgY29tcG9zZSB2aWV3cyBjYW4gcG9wdWxhdGUgYVxuICAgKiBgRnJvbWAgZHJvcGRvd24gZnJvbSB0aGUgY29uZmlndXJlZCBhbGxvdy1saXN0LiBNb3VudGVkIHVuZGVyIHRoZVxuICAgKiBwbHVnaW4gYmFzZSBwYXRoLCBpLmUuIGBHRVQgL2FwaS9lbWFpbC9zZW5kZXJzYC4gUnVucyBpbiB0aGUgT0JPXG4gICAqIHVzZXIgc2NvcGUgc28gZG9tYWluIHdpbGRjYXJkcyByZXNvbHZlIGFnYWluc3QgdGhlIGNhbGxlcidzIG93blxuICAgKiBsb2NhbCBwYXJ0LlxuICAgKlxuICAgKiBPQk8gaXMgdXNlZCBvbmx5IFdIRU4gdGhlIHJlcXVlc3QgY2FuIHN1cHBvcnQgaXQuIGBhc1VzZXIocmVxKWAgdGhyb3dzXG4gICAqIGBBdXRoZW50aWNhdGlvbkVycm9yYCBvdXRzaWRlIGBOT0RFX0VOVj1kZXZlbG9wbWVudGAgaWYgdGhlIHJlcXVlc3QgY2Fycmllc1xuICAgKiBubyBmb3J3YXJkZWQgT0JPIHRva2VuLCBhbmQgQXBwS2l0IGRvZXMgbm90IGNhdGNoIGEgcmVqZWN0aW9uIHJhaXNlZCBpbnNpZGVcbiAgICogYSBoYW5kbGVyIC0gc28gdW5jb25kaXRpb25hbGx5IHdyYXBwaW5nIHRoaXMgcm91dGUgdGFrZXMgdGhlIHByb2Nlc3MgZG93blxuICAgKiBmb3IgYSBjYWxsZXIgdGhhdCBhdXRoZW50aWNhdGVkIHNvbWUgb3RoZXIgd2F5IChhIGBAZGJ4LXRvb2xzL3R1bm5lbGBcbiAgICogT1RQIHNlc3Npb24sIGEgaGVhbHRoIHByb2JlLCBhIGxvY2FsIGBjdXJsYCkuIFRoZSB1c2VyIGNvbnRleHQgaXMgb25seSBldmVyXG4gICAqIGFuIEVOUklDSE1FTlQgaGVyZTogd2l0aG91dCBpdCwgd2lsZGNhcmQgc2VuZGVycyBzaW1wbHkgZXhwYW5kIGFnYWluc3Qgbm9cbiAgICogbG9jYWwgcGFydC4gRGVncmFkaW5nIHRvIHRoZSBzZXJ2aWNlIGNvbnRleHQgdGhlcmVmb3JlIGFuc3dlcnMgY29ycmVjdGx5XG4gICAqIGluc3RlYWQgb2YgZmFpbGluZywgYW5kIGEgZnJvbnQtZG9vciByZXF1ZXN0IGlzIHVuY2hhbmdlZC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgc2FtZSBydWxlIGBAZGJ4LXRvb2xzL2FwcGtpdGAncyBgaWRlbnRpdHlgIG1vZHVsZSBhcHBsaWVzIGluXG4gICAqIGBcImF1dG9cImAgbW9kZTsgdGhlIGhlYWRlciBjaGVjayBpcyBpbmxpbmVkIHJhdGhlciB0aGFuIHRha2luZyBhIGRlcGVuZGVuY3lcbiAgICogb24gdGhhdCBwYWNrYWdlIGZvciBvbmUgcHJlZGljYXRlLlxuICAgKi9cbiAgb3ZlcnJpZGUgaW5qZWN0Um91dGVzKHJvdXRlcjogSUFwcFJvdXRlcik6IHZvaWQge1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcImxpc3RTZW5kZXJzXCIsXG4gICAgICBtZXRob2Q6IFwiZ2V0XCIsXG4gICAgICBwYXRoOiBTRU5ERVJTX1JPVVRFLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IG9ib1Rva2VuID0gc3RyaW5nLnRyaW1Ub051bGwocmVxLmhlYWRlcih0b2tlbi5BQ0NFU1NfVE9LRU5fSEVBREVSKSk7XG4gICAgICAgIGNvbnN0IHNjb3BlZCA9IG9ib1Rva2VuID09PSBudWxsID8gdGhpcyA6IHRoaXMuYXNVc2VyKHJlcSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNjb3BlZC5leGVjdXRlTGlzdFNlbmRlcnMoKTtcbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5qc29uKHJlc3VsdC5kYXRhKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIFNlbmQgYSBtZXNzYWdlIGltbWVkaWF0ZWx5IGZyb20gYGZyb21gIHRocm91Z2ggdGhlIHNoYXJlZFxuICAgICAgICogdHJhbnNwb3J0LCBieXBhc3NpbmcgdGhlIGFwcHJvdmFsIGZsb3cuIEZvciBhZ2VudC1kcml2ZW4gc2VuZHNcbiAgICAgICAqIHVzZSB7QGxpbmsgZW1haWxUb29sfSBpbnN0ZWFkLlxuICAgICAgICovXG4gICAgICBzZW5kRW1haWw6IChcbiAgICAgICAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICAgICAgICBmcm9tOiBzdHJpbmcsXG4gICAgICAgIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICAgICAgICBvcHRpb25zPzogU2VuZEVtYWlsT3B0aW9ucyxcbiAgICAgICk6IFByb21pc2U8RW1haWxSZXN1bHQ+ID0+IHRoaXMuc2VuZChtZXNzYWdlLCBmcm9tLCBzaWduYWwsIG9wdGlvbnMpLFxuICAgICAgLyoqXG4gICAgICAgKiBTZW5kZXIgb3B0aW9ucyBmb3IgdGhlIGN1cnJlbnQgdXNlciAodGhlIGBHRVQgL3NlbmRlcnNgIHBheWxvYWQpLlxuICAgICAgICogQXBwS2l0IHdyYXBzIHRoaXMgd2l0aCBgYXNVc2VyKHJlcSlgIGZvciBPQk8gc2NvcGluZy5cbiAgICAgICAqL1xuICAgICAgbGlzdFNlbmRlcnM6IGFzeW5jICgpOiBQcm9taXNlPEVtYWlsU2VuZGVycz4gPT4gdW53cmFwKGF3YWl0IHRoaXMuZXhlY3V0ZUxpc3RTZW5kZXJzKCkpLFxuICAgIH07XG4gIH1cblxuICAvKiogQXBwS2l0IGBUb29sUHJvdmlkZXJgOiB0aGUgdG9vbCBkZWZpbml0aW9ucyBvZmZlcmVkIHRvIGFuIGFnZW50LiAqL1xuICBnZXRBZ2VudFRvb2xzKCk6IEFnZW50VG9vbERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRvb2xzRnJvbVJlZ2lzdHJ5KHRoaXMudG9vbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcEtpdCBgVG9vbFByb3ZpZGVyYDogcnVuIG9uZSB0b29sIGNhbGwuIEFyZ3VtZW50cyBhcmUgdmFsaWRhdGVkIGFnYWluc3RcbiAgICogdGhlIHRvb2wncyBzY2hlbWEgZmlyc3QsIGFuZCBhIHZhbGlkYXRpb24gZmFpbHVyZSBjb21lcyBiYWNrIGFzIGFuXG4gICAqIExMTS1mcmllbmRseSBzdHJpbmcgc28gdGhlIG1vZGVsIGNhbiBjb3JyZWN0IGl0c2VsZiBvbiB0aGUgbmV4dCB0dXJuLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUFnZW50VG9vbChuYW1lOiBzdHJpbmcsIGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGV4ZWN1dGVGcm9tUmVnaXN0cnkodGhpcy50b29scywgbmFtZSwgYXJncywgc2lnbmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIG9uZSBtZXNzYWdlLCByZXNvbHZpbmcgdGhlIHNlbmRlciBmb3IgdGhlIGNhbGxlciBpbiBzY29wZSB3aGVuXG4gICAqIGBmcm9tYCBpcyBub3QgcGlubmVkLiBUaGUgaW50ZXJjZXB0b3IgY2hhaW4gaXMgYXBwbGllZCBpbnNpZGVcbiAgICoge0BsaW5rIHNlbmRFbWFpbH0gdGhyb3VnaCB0aGUgZXhlY3V0b3IgaW5zdGFsbGVkIGF0IHNldHVwLCBzbyB0aGlzIG11c3RcbiAgICogbm90IHdyYXAgaXQgYWdhaW4uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNlbmQoXG4gICAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICAgIGZyb206IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgICBvcHRpb25zPzogU2VuZEVtYWlsT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4ge1xuICAgIHJldHVybiBzZW5kRW1haWwobWVzc2FnZSwgZnJvbSA/PyB0aGlzLnJlc29sdmVTZW5kZXIoKSwgc2lnbmFsLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBSdW4gdGhlIHNlbmRlci1vcHRpb25zIGxvb2t1cCB0aHJvdWdoIHRoZSBwbHVnaW4ncyBpbnRlcmNlcHRvciBjaGFpbi4gKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTGlzdFNlbmRlcnMoKTogUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8RW1haWxTZW5kZXJzPj4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoYXN5bmMgKCkgPT4gdGhpcy5saXN0U2VuZGVycygpLCBFTUFJTF9TRU5ERVJTX1NFVFRJTkdTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBgRnJvbWAgb3B0aW9ucyBvZmZlcmVkIHRvIHRoZSBjdXJyZW50IHVzZXI6IHRoZSBjb25jcmV0ZVxuICAgKiBhZGRyZXNzZXMgdGhlIGVmZmVjdGl2ZSBhbGxvdy1saXN0IHBlcm1pdHMgKGRvbWFpbiB3aWxkY2FyZHMgZXhwYW5kZWRcbiAgICogYWdhaW5zdCB0aGUgT0JPIHVzZXIncyBsb2NhbCBwYXJ0KSwgdGhlIGRlZmF1bHQgYW1vbmcgdGhlbSwgYW5kXG4gICAqIHdoZXRoZXIgdGhlIGxpc3QgaXMgYW4gZW5mb3JjZWQgcmVzdHJpY3Rpb24uIFNlZVxuICAgKiB7QGxpbmsgbGlzdFNlbmRlck9wdGlvbnN9LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsaXN0U2VuZGVycygpOiBQcm9taXNlPEVtYWlsU2VuZGVycz4ge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgICBjb25zdCBzZW5kZXJzID0gbGlzdFNlbmRlck9wdGlvbnMoY29uZmlnLCBjdXJyZW50VXNlckVtYWlsKCkpO1xuICAgIC8vIFByZWZlciB0aGUgYWRkcmVzcyBhIHNlbmQgd291bGQgYWN0dWFsbHkgZGVmYXVsdCB0bzsgZmFsbCBiYWNrIHRvXG4gICAgLy8gdGhlIGZpcnN0IG9mZmVyZWQgb3B0aW9uIHdoZW4gdGhhdCBjYW4ndCBiZSByZXNvbHZlZCAvIHBlcm1pdHRlZC5cbiAgICBsZXQgZGVmYXVsdFNlbmRlciA9IHNlbmRlcnNbMF07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlU2VuZGVyKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChpc1NlbmRlckFsbG93ZWQocmVzb2x2ZWQsIGNvbmZpZy5hbGxvd2VkU2VuZGVycykpIGRlZmF1bHRTZW5kZXIgPSByZXNvbHZlZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IG9mZmVyZWQgb3B0aW9uIChvciBub25lKSBhcyB0aGUgZGVmYXVsdC5cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmRlcnMsXG4gICAgICAuLi4oZGVmYXVsdFNlbmRlciA/IHsgZGVmYXVsdFNlbmRlciB9IDoge30pLFxuICAgICAgcmVzdHJpY3RlZDogY29uZmlnLmFsbG93ZWRTZW5kZXJzLmxlbmd0aCA+IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBUaGUgYEZyb21gIGEgc2VuZCBkZWZhdWx0cyB0byBmb3IgdGhlIGNhbGxlciBpbiBzY29wZS4gKi9cbiAgcHJpdmF0ZSByZXNvbHZlU2VuZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVTZW5kZXJBZGRyZXNzKGdldEVtYWlsUnVudGltZSgpLmNvbmZpZywgY3VycmVudFVzZXJFbWFpbCgpKTtcbiAgfVxufVxuXG4vKiogVGhlIE9CTyB1c2VyJ3MgYWRkcmVzcywgb3IgdW5kZWZpbmVkIG91dHNpZGUgYSB1c2VyIGNvbnRleHQuICovXG5mdW5jdGlvbiBjdXJyZW50VXNlckVtYWlsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGN0eCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKTtcbiAgcmV0dXJuIFwiaXNVc2VyQ29udGV4dFwiIGluIGN0eCA/IGN0eC51c2VyRW1haWwgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmUtcmFpc2UgYSBmYWlsZWQgZXhlY3V0aW9uIGFzIHRoZSBBcHBLaXQgZXJyb3IgY2xhc3MgdGhhdCBhbHJlYWR5IGNhcnJpZXNcbiAqIHRoZSBzdGF0dXMgQXBwS2l0IHJlc29sdmVkLCBzbyBhIHByb2dyYW1tYXRpYyBjYWxsZXIgc2VlcyB0aGUgc2FtZSA0MDAgL1xuICogNDAxIC8gNTAzIGFuIEhUVFAgY2FsbGVyIHdvdWxkLlxuICovXG5mdW5jdGlvbiB0b0FwcEtpdEVycm9yKHN0YXR1czogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcpOiBBcHBLaXRFcnJvciB7XG4gIGlmIChzdGF0dXMgPT09IDQwMCkgcmV0dXJuIG5ldyBWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSk7XG4gIGlmIChzdGF0dXMgPT09IDQwMSkgcmV0dXJuIG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKG1lc3NhZ2UpO1xuICBpZiAoc3RhdHVzID09PSA1MDMpIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gbmV3IEV4ZWN1dGlvbkVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFN1cmZhY2UgYSBmYWlsZWQge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gdG8gYSBwcm9ncmFtbWF0aWMgY2FsbGVyIGFzIGFcbiAqIHRocm93LiBIVFRQIGhhbmRsZXJzIG1hcCBgc3RhdHVzYCBvbnRvIHRoZSByZXNwb25zZSBpbnN0ZWFkLlxuICovXG5mdW5jdGlvbiB1bndyYXA8VD4ocmVzdWx0OiBFeGVjdXRpb25SZXN1bHQ8VD4pOiBUIHtcbiAgaWYgKHJlc3VsdC5vaykgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB0aHJvdyB0b0FwcEtpdEVycm9yKHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5tZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgZW1haWwgcGx1Z2luLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBicmFuZCwgcGx1Z2luIGFzIGVtYWlsUGx1Z2luIH0gZnJvbSBcIkBkYngtdG9vbHMvZW1haWxcIjtcbiAqXG4gKiBhd2FpdCBjcmVhdGVBcHAoe1xuICogICBwbHVnaW5zOiBbXG4gKiAgICAgc2VydmVyKCksXG4gKiAgICAgZW1haWxQbHVnaW4uZW1haWwoe1xuICogICAgICAgZG9tYWluOiBcIm1haWwuZXhhbXBsZS5jb21cIixcbiAqICAgICAgIGFsbG93ZWRTZW5kZXJzOiBbXCIqQG1haWwuZXhhbXBsZS5jb21cIl0sXG4gKiAgICAgICBicmFuZDogYnJhbmQuZGVmYXVsdEVtYWlsQnJhbmQsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgZW1haWwgPSB0b1BsdWdpbihFbWFpbFBsdWdpbik7XG4iXX0=
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixRQUFRLEVBQ1IsZUFBZSxHQUtoQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxVQUFVLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxLQUFLLElBQUksV0FBVyxHQUlyQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsZ0JBQWdCLEVBQ2hCLG9CQUFvQixHQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLCtFQUErRTtBQUMvRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7QUFFakMsNEVBQTRFO0FBQzVFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQztBQUV6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QVMsQ0FBQztBQUM1RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLE1BQWMsRUFBRSxPQUFlO0lBQ3BELElBQUksTUFBTSxLQUFLLEdBQUc7UUFBRSxPQUFPLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELElBQUksTUFBTSxLQUFLLEdBQUc7UUFBRSxPQUFPLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUQsSUFBSSxNQUFNLEtBQUssR0FBRztRQUFFLE9BQU8sSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsT0FBTyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxNQUFNLENBQUksTUFBMEI7SUFDM0MsSUFBSSxNQUFNLENBQUMsRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztJQUNsQyxNQUFNLGFBQWEsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcGx1Z2luIChyZWdpc3RlcmVkIG5hbWU6IGBlbWFpbGApIHRoYXQgb3ducyB0aGUgU01UUCBydW50aW1lXG4gKiBmb3Igb3V0Ym91bmQgbWFpbC4gUmVnaXN0ZXJpbmcgaXQgdmFsaWRhdGVzIHRoZSBTTVRQIGNvbmZpZ3VyYXRpb25cbiAqIGFuZCB2ZXJpZmllcyBjb25uZWN0aXZpdHkgYXQgc3RhcnR1cCwgc28gYSBiYWQgaG9zdCAvIGNyZWRlbnRpYWxcbiAqIHN1cmZhY2VzIGluIHRoZSBib290IGxvZ3MgaW5zdGVhZCBvZiBvbiB0aGUgZmlyc3QgYXBwcm92ZWQgc2VuZCwgYW5kXG4gKiBpbnN0YWxscyB0aGlzIHBsdWdpbidzIGBleGVjdXRlKClgIGFzIHRoZSBydW50aW1lJ3MgZXhlY3V0b3Igc28gZXZlcnlcbiAqIHNlbmQgcGlja3MgdXAgQXBwS2l0J3MgcmV0cnkgLyB0aW1lb3V0IC8gdGVsZW1ldHJ5IGNoYWluLlxuICpcbiAqIFRoZSBwbHVnaW4gaXMgYWxzbyBhIGBUb29sUHJvdmlkZXJgLCBzbyBhbiBBcHBLaXQgYWdlbnQgY2FuIHJlYWNoIGFuXG4gKiBgZW1haWwuc2VuZGAgdG9vbCBkaXJlY3RseTsgdGhlIHtAbGluayBlbWFpbFRvb2x9IGV4cG9ydCBpcyB0aGUgc2FtZVxuICogY2FwYWJpbGl0eSBmb3IgYSBNYXN0cmEgYWdlbnQuIEJvdGggc2hhcmUgdGhlIHRyYW5zcG9ydCBwcmltZWQgaGVyZSxcbiAqIGFuZCB7QGxpbmsgc2VuZEVtYWlsfSBpcyBhdmFpbGFibGUgdG8gbm9uLWFnZW50IGNhbGxlcnMuXG4gKlxuICogQ29uZmlndXJhdGlvbiBpcyB0aGUgbWFuaWZlc3QtcHVibGlzaGVkIHtAbGluayBFbWFpbFBsdWdpbkNvbmZpZ31cbiAqIChTTVRQIGhvc3QvcG9ydC9jcmVkZW50aWFscywgc2VuZGVyIGRvbWFpbiBvciBleHBsaWNpdCBgZnJvbWAsIHRoZVxuICogc2VuZGVyIHBvbGljeSwgYW5kIGFuIG9wdGlvbmFsIGBhbGxvd2VkU2VuZGVyc2AgcmVzdHJpY3Rpb24pLCB3aXRoXG4gKiB1bnByZWZpeGVkIGBTTVRQXypgIC8gYEVNQUlMXypgIGVudmlyb25tZW50IGZhbGxiYWNrcy5cbiAqXG4gKiBUaGUgcGx1Z2luIG1vdW50cyBvbmUgcm91dGUgdW5kZXIgaXRzIGJhc2UgcGF0aCAoYC9hcGkvZW1haWxgKTpcbiAqIGBHRVQgL3NlbmRlcnNgIHJldHVybnMgdGhlIHBlcm1pdHRlZCBgRnJvbWAgb3B0aW9ucyBmb3IgdGhlIGNhbGxpbmdcbiAqIHVzZXIsIHNvIGEgY29tcG9zZSBVSSBjYW4gb2ZmZXIgdGhlbSBpbiBhIGRyb3Bkb3duLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBBdXRoZW50aWNhdGlvbkVycm9yLFxuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIENvbm5lY3Rpb25FcnJvcixcbiAgRXhlY3V0aW9uRXJyb3IsXG4gIGdldEV4ZWN1dGlvbkNvbnRleHQsXG4gIHRvUGx1Z2luLFxuICBWYWxpZGF0aW9uRXJyb3IsXG4gIHR5cGUgQXBwS2l0RXJyb3IsXG4gIHR5cGUgRXhlY3V0aW9uUmVzdWx0LFxuICB0eXBlIElBcHBSb3V0ZXIsXG4gIHR5cGUgUGx1Z2luTWFuaWZlc3QsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGRlZmluZVRvb2wsIHR5cGUgVG9vbFJlZ2lzdHJ5IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBicmFuZENvbnRleHQsIFRvb2xSZWdpc3RyeVBsdWdpbiB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgbG9nLCBzdHJpbmdVdGlscywgdG9rZW4gfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHtcbiAgZW1haWwgYXMgc2hhcmVkRW1haWwsXG4gIHR5cGUgRW1haWxNZXNzYWdlLFxuICB0eXBlIEVtYWlsUmVzdWx0LFxuICB0eXBlIEVtYWlsU2VuZGVycyxcbn0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgeyBlbWFpbEJyYW5kRnJvbUNvbnRleHQgfSBmcm9tIFwiLi9icmFuZC50c1wiO1xuaW1wb3J0IHsgRU1BSUxfQ09ORklHX1NDSEVNQSwgdHlwZSBFbWFpbFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHsgRU1BSUxfU0VOREVSU19TRVRUSU5HUywgRU1BSUxfVkVSSUZZX1NFVFRJTkdTIH0gZnJvbSBcIi4vZGVmYXVsdHMudHNcIjtcbmltcG9ydCB7IGlzU2VuZGVyQWxsb3dlZCwgbGlzdFNlbmRlck9wdGlvbnMsIHJlc29sdmVTZW5kZXJBZGRyZXNzIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5pbXBvcnQgeyBTRU5EX0VNQUlMX0RFU0NSSVBUSU9OIH0gZnJvbSBcIi4vdG9vbC50c1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW1haWxSdW50aW1lLFxuICByZXNldEVtYWlsUnVudGltZSxcbiAgc2VuZEVtYWlsLFxuICB0eXBlIFNlbmRFbWFpbE9wdGlvbnMsXG4gIHNldEVtYWlsRXhlY3V0b3IsXG4gIHZlcmlmeUVtYWlsVHJhbnNwb3J0LFxufSBmcm9tIFwiLi90cmFuc3BvcnQudHNcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlICh1bmRlciBgL2FwaS9lbWFpbGApIGZvciB0aGUgc2VuZGVyLW9wdGlvbnMgbG9va3VwLiAqL1xuY29uc3QgU0VOREVSU19ST1VURSA9IFwiL3NlbmRlcnNcIjtcblxuLyoqIFJlZ2lzdHJ5IGtleSBvZiB0aGUgYWdlbnQgdG9vbCwgd2hpY2ggYWdlbnRzIGFkZHJlc3MgYXMgYGVtYWlsLnNlbmRgLiAqL1xuY29uc3QgU0VORF9UT09MID0gXCJzZW5kXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJlbWFpbFwiKTtcblxuLyoqXG4gKiBBcHBLaXQgcGx1Z2luIHRoYXQgY29uZmlndXJlcyBhbmQgdmVyaWZpZXMgdGhlIFNNVFAgdHJhbnNwb3J0IHVzZWQgYnlcbiAqIHRoZSBgc2VuZF9lbWFpbGAgdG9vbCwgYW5kIGV4cG9zZXMgc2VuZGluZyBhcyBhbiBBcHBLaXQgYWdlbnQgdG9vbC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IGNyZWF0ZUFwcCwgc2VydmVyIH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuICogaW1wb3J0IHsgZW1haWwgfSBmcm9tIFwiQGRieC10b29scy9lbWFpbFwiO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtcbiAqICAgICBzZXJ2ZXIoKSxcbiAqICAgICBlbWFpbCh7XG4gKiAgICAgICBzbXRwOiB7IGhvc3Q6IFwic210cC5leGFtcGxlLmNvbVwiLCB1c2VyOiBcImFwaWtleVwiLCBwYXNzd29yZDogcHJvY2Vzcy5lbnYuU01UUF9LRVkgfSxcbiAqICAgICAgIGRvbWFpbjogXCJtYWlsLmV4YW1wbGUuY29tXCIsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRW1haWxQbHVnaW4gZXh0ZW5kcyBUb29sUmVnaXN0cnlQbHVnaW48RW1haWxQbHVnaW5Db25maWc+IHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwiZW1haWxcIixcbiAgICBkaXNwbGF5TmFtZTogXCJFbWFpbFwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJTZW5kcyBhcHByb3ZhbC1nYXRlZCBlbWFpbCBvdmVyIFNNVFAsIHdpdGggdGhlIHNlbmRlciBkZXJpdmVkIGZyb20gXCIgK1xuICAgICAgXCJ0aGUgb24tYmVoYWxmLW9mIHVzZXIncyBhZGRyZXNzIG9uIGEgY29uZmlndXJlZCBkb21haW4uXCIsXG4gICAgc3RhYmlsaXR5OiBcImJldGFcIixcbiAgICByZXNvdXJjZXM6IHtcbiAgICAgIHJlcXVpcmVkOiBbXSxcbiAgICAgIG9wdGlvbmFsOiBbXSxcbiAgICB9LFxuICAgIGNvbmZpZzogeyBzY2hlbWE6IEVNQUlMX0NPTkZJR19TQ0hFTUEgfSxcbiAgfSBzYXRpc2ZpZXMgUGx1Z2luTWFuaWZlc3Q8XCJlbWFpbFwiPjtcblxuICAvKipcbiAgICogVGhlIHRvb2wgdGhpcyBwbHVnaW4gb2ZmZXJzIHRvIGFuIEFwcEtpdCBhZ2VudC5cbiAgICpcbiAgICogTm90IGBhdXRvSW5oZXJpdGFibGVgOiBhIHNlbmQgaXMgaXJyZXZlcnNpYmxlIGFuZCBsZWF2ZXMgdGhlIHdvcmtzcGFjZSxcbiAgICogc28gaXQgbXVzdCBvbmx5IGFwcGVhciBpbiBhbiBhZ2VudCB0aGF0IGFza2VkIGZvciBpdCBhbmQgYWNjZXB0ZWQgdGhlXG4gICAqIHNlbmRlciBwb2xpY3kgdGhhdCBjb21lcyB3aXRoIGl0LlxuICAgKlxuICAgKiBgZXhlY3V0ZWAgcmUtcGFyc2VzIGl0cyBhcmd1bWVudHMgd2l0aCB0aGUgbG9jYWwgc2NoZW1hOiBBcHBLaXQgdmFsaWRhdGVzXG4gICAqIGFnYWluc3QgdGhlIHNhbWUgc2NoZW1hIGZpcnN0LCBidXQgcmUtcGFyc2luZyBpcyB3aGF0IGdpdmVzIHRoZSBib2R5IHR5cGVkXG4gICAqIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGB1bmtub3duYC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB0b29sUmVnaXN0cnk6IFRvb2xSZWdpc3RyeSA9IHtcbiAgICBbU0VORF9UT09MXTogZGVmaW5lVG9vbCh7XG4gICAgICBkZXNjcmlwdGlvbjogU0VORF9FTUFJTF9ERVNDUklQVElPTixcbiAgICAgIHNjaGVtYTogc2hhcmVkRW1haWwuZW1haWxNZXNzYWdlU2NoZW1hLFxuICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcIndyaXRlXCIsIHJlcXVpcmVzVXNlckNvbnRleHQ6IHRydWUgfSxcbiAgICAgIGF1dG9Jbmhlcml0YWJsZTogZmFsc2UsXG4gICAgICBleGVjdXRlOiBhc3luYyAoYXJncywgc2lnbmFsKSA9PlxuICAgICAgICB0aGlzLnNlbmQoc2hhcmVkRW1haWwuZW1haWxNZXNzYWdlU2NoZW1hLnBhcnNlKGFyZ3MpLCB1bmRlZmluZWQsIHNpZ25hbCksXG4gICAgfSksXG4gIH07XG5cbiAgLyoqXG4gICAqIFByaW1lIHRoZSBzaGFyZWQgcnVudGltZSBmcm9tIHRoaXMgcGx1Z2luJ3MgY29uZmlnIChvdmVyIGVudiksIHJvdXRlIHRoZVxuICAgKiB0b29scycgc2VuZHMgdGhyb3VnaCB0aGlzIHBsdWdpbidzIGludGVyY2VwdG9yIGNoYWluLCBhbmQgbG9nIHRoZVxuICAgKiBlZmZlY3RpdmUgc2VuZGVyIHBvbGljeSBzbyBhbiBhY3RpdmUgcmVzdHJpY3Rpb24gaXMgb2J2aW91cyBhdCBib290LiBJblxuICAgKiBTTVRQIG1vZGUsIGZhaWwgc2V0dXAgd2hlbiB0aGUgdHJhbnNwb3J0IGNhbm5vdCBiZSB2ZXJpZmllZDogYSBiYWQgaG9zdFxuICAgKiBvciBjcmVkZW50aWFsIGlzIGEgZGVwbG95LXRpbWUgbWlzdGFrZSBhbmQgc2hvdWxkIHN0b3AgdGhlIGFwcCByYXRoZXJcbiAgICogdGhhbiB3YWl0IGZvciBhIHVzZXIgdG8gYXBwcm92ZSBhIHNlbmQgdGhhdCBjYW5ub3Qgd29yay4gV2l0aCBubyBTTVRQXG4gICAqIGNyZWRlbnRpYWxzIHRoZSBydW50aW1lIGlzIGluIGZpbGUvb3V0Ym94IG1vZGUgKG9ubHkgd2hlblxuICAgKiBgRU1BSUxfT1VUQk9YX01PREVgIGlzIHNldCksIGxvZ2dlZCBsb3VkbHkgaGVyZSBzbyBpdCBpcyBvYnZpb3VzIG1haWxcbiAgICogaXMgYmVpbmcgd3JpdHRlbiB0byBkaXNrIHJhdGhlciB0aGFuIHNlbnQuXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBzZXR1cCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRyYW5zcG9ydGVyLCBjb25maWcgfSA9IGdldEVtYWlsUnVudGltZSh7XG4gICAgICAuLi50aGlzLmNvbmZpZyxcbiAgICAgIGJyYW5kOiB0aGlzLmNvbmZpZy5icmFuZCA/PyBlbWFpbEJyYW5kRnJvbUNvbnRleHQoYnJhbmRDb250ZXh0LmdldEJyYW5kQ29udGV4dCgpKSxcbiAgICB9KTtcbiAgICBzZXRFbWFpbEV4ZWN1dG9yKChmbiwgc2V0dGluZ3MpID0+IHRoaXMuZXhlY3V0ZShmbiwgc2V0dGluZ3MpKTtcbiAgICBjb25zdCBwb2xpY3kgPSB7XG4gICAgICBtb2RlOiBjb25maWcubW9kZSxcbiAgICAgIHNlbmRlclBvbGljeTogY29uZmlnLnNlbmRlclBvbGljeSxcbiAgICAgIHJlc3RyaWN0ZWQ6IGNvbmZpZy5hbGxvd2VkU2VuZGVycy5sZW5ndGggPiAwLFxuICAgICAgLi4uKGNvbmZpZy5hbGxvd2VkU2VuZGVycy5sZW5ndGggPiAwID8geyBhbGxvd2VkU2VuZGVyczogY29uZmlnLmFsbG93ZWRTZW5kZXJzIH0gOiB7fSksXG4gICAgfTtcbiAgICBpZiAoY29uZmlnLm1vZGUgPT09IFwiZmlsZVwiKSB7XG4gICAgICBsb2dnZXIud2FybihcIm91dGJveDplbmFibGVkXCIsIHtcbiAgICAgICAgZGlyOiBjb25maWcub3V0RGlyLFxuICAgICAgICByZWFzb246IFwibm8gU01UUCBjcmVkZW50aWFscyBjb25maWd1cmVkOyBlbWFpbHMgYXJlIHdyaXR0ZW4gdG8gZGlzayBpbnN0ZWFkIG9mIHNlbnRcIixcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCBwb2xpY3kpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2ZXJpZmllZCA9IGF3YWl0IHRoaXMuZXhlY3V0ZShcbiAgICAgIGFzeW5jIChzaWduYWwpID0+IHZlcmlmeUVtYWlsVHJhbnNwb3J0KHRyYW5zcG9ydGVyLCBzaWduYWwpLFxuICAgICAgRU1BSUxfVkVSSUZZX1NFVFRJTkdTLFxuICAgICk7XG4gICAgaWYgKCF2ZXJpZmllZC5vaykge1xuICAgICAgbG9nZ2VyLmVycm9yKFwic210cDp1bnZlcmlmaWVkXCIsIHtcbiAgICAgICAgaG9zdDogY29uZmlnLmhvc3QsXG4gICAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgICBzdGF0dXM6IHZlcmlmaWVkLnN0YXR1cyxcbiAgICAgICAgZXJyb3I6IHZlcmlmaWVkLm1lc3NhZ2UsXG4gICAgICB9KTtcbiAgICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgICAgXCJTTVRQXCIsXG4gICAgICAgIGBDb3VsZCBub3QgdmVyaWZ5ICR7Y29uZmlnLmhvc3R9OiR7Y29uZmlnLnBvcnR9LiBDaGVjayBTTVRQX0hPU1QsIFNNVFBfUE9SVCwgU01UUF9TRUNVUkUsIGFuZCB0aGUgY3JlZGVudGlhbHMsIG9yIHNldCBFTUFJTF9PVVRCT1hfTU9ERT0xIGZvciBsb2NhbCBvdXRib3ggdGVzdGluZy5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7XG4gICAgICAuLi5wb2xpY3ksXG4gICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgIHBvcnQ6IGNvbmZpZy5wb3J0LFxuICAgICAgc2VjdXJlOiBjb25maWcuc2VjdXJlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBTTVRQIGNvbm5lY3Rpb24gcG9vbC4gSWRlbXBvdGVudC4gKi9cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVzZXRFbWFpbFJ1bnRpbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBYm9ydCBpbi1mbGlnaHQgd29yay4gQXBwS2l0J3MgZ3JhY2VmdWwgc2h1dGRvd24gb25seSBpbnZva2VzIHRoaXMgaG9vayAtXG4gICAqIGl0IG5ldmVyIGNhbGxzIHtAbGluayBzaHV0ZG93bn0gLSBzbyB0aGUgU01UUCBwb29sIGlzIGNsb3NlZCBmcm9tIGhlcmUgb3JcbiAgICogaXQgbGVha3MgYXQgU0lHVEVSTS4gVGhlIHRlYXJkb3duIGlzIHN5bmNocm9ub3VzIGFuZCBpZGVtcG90ZW50LCBzbyB0aGVcbiAgICogdW4tYXdhaXRlZCBjYWxsIGNvc3RzIG5vdGhpbmcuXG4gICAqL1xuICBvdmVycmlkZSBhYm9ydEFjdGl2ZU9wZXJhdGlvbnMoKTogdm9pZCB7XG4gICAgc3VwZXIuYWJvcnRBY3RpdmVPcGVyYXRpb25zKCk7XG4gICAgdm9pZCB0aGlzLnNodXRkb3duKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlIHRoZSBzZW5kZXItb3B0aW9ucyBsb29rdXAgc28gVUkgY29tcG9zZSB2aWV3cyBjYW4gcG9wdWxhdGUgYVxuICAgKiBgRnJvbWAgZHJvcGRvd24gZnJvbSB0aGUgY29uZmlndXJlZCBhbGxvdy1saXN0LiBNb3VudGVkIHVuZGVyIHRoZVxuICAgKiBwbHVnaW4gYmFzZSBwYXRoLCBpLmUuIGBHRVQgL2FwaS9lbWFpbC9zZW5kZXJzYC4gUnVucyBpbiB0aGUgT0JPXG4gICAqIHVzZXIgc2NvcGUgc28gZG9tYWluIHdpbGRjYXJkcyByZXNvbHZlIGFnYWluc3QgdGhlIGNhbGxlcidzIG93blxuICAgKiBsb2NhbCBwYXJ0LlxuICAgKlxuICAgKiBPQk8gaXMgdXNlZCBvbmx5IFdIRU4gdGhlIHJlcXVlc3QgY2FuIHN1cHBvcnQgaXQuIGBhc1VzZXIocmVxKWAgdGhyb3dzXG4gICAqIGBBdXRoZW50aWNhdGlvbkVycm9yYCBvdXRzaWRlIGBOT0RFX0VOVj1kZXZlbG9wbWVudGAgaWYgdGhlIHJlcXVlc3QgY2Fycmllc1xuICAgKiBubyBmb3J3YXJkZWQgT0JPIHRva2VuLCBhbmQgQXBwS2l0IGRvZXMgbm90IGNhdGNoIGEgcmVqZWN0aW9uIHJhaXNlZCBpbnNpZGVcbiAgICogYSBoYW5kbGVyIC0gc28gdW5jb25kaXRpb25hbGx5IHdyYXBwaW5nIHRoaXMgcm91dGUgdGFrZXMgdGhlIHByb2Nlc3MgZG93blxuICAgKiBmb3IgYSBjYWxsZXIgdGhhdCBhdXRoZW50aWNhdGVkIHNvbWUgb3RoZXIgd2F5IChhIGBAZGJ4LXRvb2xzL3R1bm5lbGBcbiAgICogT1RQIHNlc3Npb24sIGEgaGVhbHRoIHByb2JlLCBhIGxvY2FsIGBjdXJsYCkuIFRoZSB1c2VyIGNvbnRleHQgaXMgb25seSBldmVyXG4gICAqIGFuIEVOUklDSE1FTlQgaGVyZTogd2l0aG91dCBpdCwgd2lsZGNhcmQgc2VuZGVycyBzaW1wbHkgZXhwYW5kIGFnYWluc3Qgbm9cbiAgICogbG9jYWwgcGFydC4gRGVncmFkaW5nIHRvIHRoZSBzZXJ2aWNlIGNvbnRleHQgdGhlcmVmb3JlIGFuc3dlcnMgY29ycmVjdGx5XG4gICAqIGluc3RlYWQgb2YgZmFpbGluZywgYW5kIGEgZnJvbnQtZG9vciByZXF1ZXN0IGlzIHVuY2hhbmdlZC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgc2FtZSBydWxlIGBAZGJ4LXRvb2xzL2FwcGtpdGAncyBgaWRlbnRpdHlgIG1vZHVsZSBhcHBsaWVzIGluXG4gICAqIGBcImF1dG9cImAgbW9kZTsgdGhlIGhlYWRlciBjaGVjayBpcyBpbmxpbmVkIHJhdGhlciB0aGFuIHRha2luZyBhIGRlcGVuZGVuY3lcbiAgICogb24gdGhhdCBwYWNrYWdlIGZvciBvbmUgcHJlZGljYXRlLlxuICAgKi9cbiAgb3ZlcnJpZGUgaW5qZWN0Um91dGVzKHJvdXRlcjogSUFwcFJvdXRlcik6IHZvaWQge1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcImxpc3RTZW5kZXJzXCIsXG4gICAgICBtZXRob2Q6IFwiZ2V0XCIsXG4gICAgICBwYXRoOiBTRU5ERVJTX1JPVVRFLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IG9ib1Rva2VuID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbChyZXEuaGVhZGVyKHRva2VuLkFDQ0VTU19UT0tFTl9IRUFERVIpKTtcbiAgICAgICAgY29uc3Qgc2NvcGVkID0gb2JvVG9rZW4gPT09IG51bGwgPyB0aGlzIDogdGhpcy5hc1VzZXIocmVxKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2NvcGVkLmV4ZWN1dGVMaXN0U2VuZGVycygpO1xuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIHJlcy5zdGF0dXMocmVzdWx0LnN0YXR1cykuanNvbih7IGVycm9yOiByZXN1bHQubWVzc2FnZSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVzLmpzb24ocmVzdWx0LmRhdGEpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGV4cG9ydHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogU2VuZCBhIG1lc3NhZ2UgaW1tZWRpYXRlbHkgZnJvbSBgZnJvbWAgdGhyb3VnaCB0aGUgc2hhcmVkXG4gICAgICAgKiB0cmFuc3BvcnQsIGJ5cGFzc2luZyB0aGUgYXBwcm92YWwgZmxvdy4gRm9yIGFnZW50LWRyaXZlbiBzZW5kc1xuICAgICAgICogdXNlIHtAbGluayBlbWFpbFRvb2x9IGluc3RlYWQuXG4gICAgICAgKi9cbiAgICAgIHNlbmRFbWFpbDogKFxuICAgICAgICBtZXNzYWdlOiBFbWFpbE1lc3NhZ2UsXG4gICAgICAgIGZyb206IHN0cmluZyxcbiAgICAgICAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gICAgICAgIG9wdGlvbnM/OiBTZW5kRW1haWxPcHRpb25zLFxuICAgICAgKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4gPT4gdGhpcy5zZW5kKG1lc3NhZ2UsIGZyb20sIHNpZ25hbCwgb3B0aW9ucyksXG4gICAgICAvKipcbiAgICAgICAqIFNlbmRlciBvcHRpb25zIGZvciB0aGUgY3VycmVudCB1c2VyICh0aGUgYEdFVCAvc2VuZGVyc2AgcGF5bG9hZCkuXG4gICAgICAgKiBBcHBLaXQgd3JhcHMgdGhpcyB3aXRoIGBhc1VzZXIocmVxKWAgZm9yIE9CTyBzY29waW5nLlxuICAgICAgICovXG4gICAgICBsaXN0U2VuZGVyczogYXN5bmMgKCk6IFByb21pc2U8RW1haWxTZW5kZXJzPiA9PiB1bndyYXAoYXdhaXQgdGhpcy5leGVjdXRlTGlzdFNlbmRlcnMoKSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIG9uZSBtZXNzYWdlLCByZXNvbHZpbmcgdGhlIHNlbmRlciBmb3IgdGhlIGNhbGxlciBpbiBzY29wZSB3aGVuXG4gICAqIGBmcm9tYCBpcyBub3QgcGlubmVkLiBUaGUgaW50ZXJjZXB0b3IgY2hhaW4gaXMgYXBwbGllZCBpbnNpZGVcbiAgICoge0BsaW5rIHNlbmRFbWFpbH0gdGhyb3VnaCB0aGUgZXhlY3V0b3IgaW5zdGFsbGVkIGF0IHNldHVwLCBzbyB0aGlzIG11c3RcbiAgICogbm90IHdyYXAgaXQgYWdhaW4uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNlbmQoXG4gICAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICAgIGZyb206IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgICBvcHRpb25zPzogU2VuZEVtYWlsT3B0aW9ucyxcbiAgKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4ge1xuICAgIHJldHVybiBzZW5kRW1haWwobWVzc2FnZSwgZnJvbSA/PyB0aGlzLnJlc29sdmVTZW5kZXIoKSwgc2lnbmFsLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKiBSdW4gdGhlIHNlbmRlci1vcHRpb25zIGxvb2t1cCB0aHJvdWdoIHRoZSBwbHVnaW4ncyBpbnRlcmNlcHRvciBjaGFpbi4gKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTGlzdFNlbmRlcnMoKTogUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8RW1haWxTZW5kZXJzPj4ge1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoYXN5bmMgKCkgPT4gdGhpcy5saXN0U2VuZGVycygpLCBFTUFJTF9TRU5ERVJTX1NFVFRJTkdTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBgRnJvbWAgb3B0aW9ucyBvZmZlcmVkIHRvIHRoZSBjdXJyZW50IHVzZXI6IHRoZSBjb25jcmV0ZVxuICAgKiBhZGRyZXNzZXMgdGhlIGVmZmVjdGl2ZSBhbGxvdy1saXN0IHBlcm1pdHMgKGRvbWFpbiB3aWxkY2FyZHMgZXhwYW5kZWRcbiAgICogYWdhaW5zdCB0aGUgT0JPIHVzZXIncyBsb2NhbCBwYXJ0KSwgdGhlIGRlZmF1bHQgYW1vbmcgdGhlbSwgYW5kXG4gICAqIHdoZXRoZXIgdGhlIGxpc3QgaXMgYW4gZW5mb3JjZWQgcmVzdHJpY3Rpb24uIFNlZVxuICAgKiB7QGxpbmsgbGlzdFNlbmRlck9wdGlvbnN9LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsaXN0U2VuZGVycygpOiBQcm9taXNlPEVtYWlsU2VuZGVycz4ge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgICBjb25zdCBzZW5kZXJzID0gbGlzdFNlbmRlck9wdGlvbnMoY29uZmlnLCBjdXJyZW50VXNlckVtYWlsKCkpO1xuICAgIC8vIFByZWZlciB0aGUgYWRkcmVzcyBhIHNlbmQgd291bGQgYWN0dWFsbHkgZGVmYXVsdCB0bzsgZmFsbCBiYWNrIHRvXG4gICAgLy8gdGhlIGZpcnN0IG9mZmVyZWQgb3B0aW9uIHdoZW4gdGhhdCBjYW4ndCBiZSByZXNvbHZlZCAvIHBlcm1pdHRlZC5cbiAgICBsZXQgZGVmYXVsdFNlbmRlciA9IHNlbmRlcnNbMF07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gdGhpcy5yZXNvbHZlU2VuZGVyKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChpc1NlbmRlckFsbG93ZWQocmVzb2x2ZWQsIGNvbmZpZy5hbGxvd2VkU2VuZGVycykpIGRlZmF1bHRTZW5kZXIgPSByZXNvbHZlZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEtlZXAgdGhlIGZpcnN0IG9mZmVyZWQgb3B0aW9uIChvciBub25lKSBhcyB0aGUgZGVmYXVsdC5cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbmRlcnMsXG4gICAgICAuLi4oZGVmYXVsdFNlbmRlciA/IHsgZGVmYXVsdFNlbmRlciB9IDoge30pLFxuICAgICAgcmVzdHJpY3RlZDogY29uZmlnLmFsbG93ZWRTZW5kZXJzLmxlbmd0aCA+IDAsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBUaGUgYEZyb21gIGEgc2VuZCBkZWZhdWx0cyB0byBmb3IgdGhlIGNhbGxlciBpbiBzY29wZS4gKi9cbiAgcHJpdmF0ZSByZXNvbHZlU2VuZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlc29sdmVTZW5kZXJBZGRyZXNzKGdldEVtYWlsUnVudGltZSgpLmNvbmZpZywgY3VycmVudFVzZXJFbWFpbCgpKTtcbiAgfVxufVxuXG4vKiogVGhlIE9CTyB1c2VyJ3MgYWRkcmVzcywgb3IgdW5kZWZpbmVkIG91dHNpZGUgYSB1c2VyIGNvbnRleHQuICovXG5mdW5jdGlvbiBjdXJyZW50VXNlckVtYWlsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGN0eCA9IGdldEV4ZWN1dGlvbkNvbnRleHQoKTtcbiAgcmV0dXJuIFwiaXNVc2VyQ29udGV4dFwiIGluIGN0eCA/IGN0eC51c2VyRW1haWwgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmUtcmFpc2UgYSBmYWlsZWQgZXhlY3V0aW9uIGFzIHRoZSBBcHBLaXQgZXJyb3IgY2xhc3MgdGhhdCBhbHJlYWR5IGNhcnJpZXNcbiAqIHRoZSBzdGF0dXMgQXBwS2l0IHJlc29sdmVkLCBzbyBhIHByb2dyYW1tYXRpYyBjYWxsZXIgc2VlcyB0aGUgc2FtZSA0MDAgL1xuICogNDAxIC8gNTAzIGFuIEhUVFAgY2FsbGVyIHdvdWxkLlxuICovXG5mdW5jdGlvbiB0b0FwcEtpdEVycm9yKHN0YXR1czogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcpOiBBcHBLaXRFcnJvciB7XG4gIGlmIChzdGF0dXMgPT09IDQwMCkgcmV0dXJuIG5ldyBWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSk7XG4gIGlmIChzdGF0dXMgPT09IDQwMSkgcmV0dXJuIG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKG1lc3NhZ2UpO1xuICBpZiAoc3RhdHVzID09PSA1MDMpIHJldHVybiBuZXcgQ29ubmVjdGlvbkVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gbmV3IEV4ZWN1dGlvbkVycm9yKG1lc3NhZ2UpO1xufVxuXG4vKipcbiAqIFN1cmZhY2UgYSBmYWlsZWQge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gdG8gYSBwcm9ncmFtbWF0aWMgY2FsbGVyIGFzIGFcbiAqIHRocm93LiBIVFRQIGhhbmRsZXJzIG1hcCBgc3RhdHVzYCBvbnRvIHRoZSByZXNwb25zZSBpbnN0ZWFkLlxuICovXG5mdW5jdGlvbiB1bndyYXA8VD4ocmVzdWx0OiBFeGVjdXRpb25SZXN1bHQ8VD4pOiBUIHtcbiAgaWYgKHJlc3VsdC5vaykgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICB0aHJvdyB0b0FwcEtpdEVycm9yKHJlc3VsdC5zdGF0dXMsIHJlc3VsdC5tZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgZW1haWwgcGx1Z2luLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBkZWZhdWx0RW1haWxCcmFuZCwgZW1haWwgfSBmcm9tIFwiQGRieC10b29scy9lbWFpbFwiO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtcbiAqICAgICBzZXJ2ZXIoKSxcbiAqICAgICBlbWFpbCh7XG4gKiAgICAgICBkb21haW46IFwibWFpbC5leGFtcGxlLmNvbVwiLFxuICogICAgICAgYWxsb3dlZFNlbmRlcnM6IFtcIipAbWFpbC5leGFtcGxlLmNvbVwiXSxcbiAqICAgICAgIGJyYW5kOiBkZWZhdWx0RW1haWxCcmFuZCxcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHRvUGx1Z2luKEVtYWlsUGx1Z2luKTtcbiJdfQ==
|
package/lib/src/sender.js
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
* @module
|
|
28
28
|
*/
|
|
29
29
|
import { ConfigurationError, ValidationError } from "@databricks/appkit";
|
|
30
|
-
import { log, net,
|
|
30
|
+
import { log, net, stringUtils } from "@dbx-tools/shared-core";
|
|
31
31
|
const logger = log.logger("email/sender");
|
|
32
32
|
/**
|
|
33
33
|
* Re-home a user's local part on `domain`. Throws when no usable local part is
|
|
@@ -116,13 +116,13 @@ export const SYSTEM_SENDER_LOCAL_PART = "no-reply";
|
|
|
116
116
|
* result into the sender allow-list before any send happens.
|
|
117
117
|
*/
|
|
118
118
|
export function systemSenderAddress(source) {
|
|
119
|
-
const explicit =
|
|
119
|
+
const explicit = stringUtils.trimToNull(source.systemFrom);
|
|
120
120
|
if (explicit)
|
|
121
121
|
return explicit;
|
|
122
|
-
const domain =
|
|
122
|
+
const domain = stringUtils.trimToNull(source.domain);
|
|
123
123
|
if (domain)
|
|
124
124
|
return `${SYSTEM_SENDER_LOCAL_PART}@${domain}`;
|
|
125
|
-
return
|
|
125
|
+
return stringUtils.trimToNull(source.from) ?? undefined;
|
|
126
126
|
}
|
|
127
127
|
/**
|
|
128
128
|
* The `From` for a send with no user in scope. Throws when no sender source is
|
|
@@ -145,7 +145,7 @@ export function resolveSystemSenderAddress(config) {
|
|
|
145
145
|
* none of those yield an address.
|
|
146
146
|
*/
|
|
147
147
|
export function resolveSenderAddress(config, userEmail) {
|
|
148
|
-
const email =
|
|
148
|
+
const email = stringUtils.trimToNull(userEmail);
|
|
149
149
|
if (!email)
|
|
150
150
|
return resolveSystemSenderAddress(config);
|
|
151
151
|
if (config.from)
|
|
@@ -197,4 +197,4 @@ export function listSenderOptions(config, userEmail) {
|
|
|
197
197
|
}
|
|
198
198
|
return options;
|
|
199
199
|
}
|
|
200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTFELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUE2QixFQUFFLE1BQWM7SUFDL0UsTUFBTSxLQUFLLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMvQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLGtCQUFrQixDQUFDLGdCQUFnQixDQUN2Qyx5QkFBeUIsRUFDekIsK0VBQStFLENBQ2hGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxHQUFHLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBa0M7SUFDcEUsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsU0FBUyxtQkFBbUIsQ0FBQyxPQUFlO0lBQzFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELElBQUks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LENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3JFLElBQUksS0FBSztnQkFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlbmRlci1hZGRyZXNzIHBvbGljeTogdHVybiB0aGUgb24tYmVoYWxmLW9mIHVzZXIncyBlbWFpbCBpbnRvIGFuXG4gKiBvdXRib3VuZCBgRnJvbWAsIGFuZCAob3B0aW9uYWxseSkgcmVzdHJpY3Qgd2hpY2ggYWRkcmVzc2VzIG1heSBzZW5kLlxuICpcbiAqIFRoZSBkZWZhdWx0IGBGcm9tYCByZS1ob21lcyB0aGUgbG9jYWwgcGFydCAoZXZlcnl0aGluZyBiZWZvcmUgYEBgKSBvZlxuICogdGhlIE9CTyBlbWFpbCBvbiB0aGUgY29uZmlndXJlZCBzZW5kaW5nIGRvbWFpbiwgc28gYGFsaWNlQGRhdGFicmlja3MuY29tYFxuICogdGhyb3VnaCBhIGRvbWFpbiBvZiBgbWFpbC5leGFtcGxlLmNvbWAgZ29lcyBvdXQgYXNcbiAqIGBhbGljZUBtYWlsLmV4YW1wbGUuY29tYC4gTm90aGluZyBoYXMgdG8gYmUgY29uZmlndXJlZCBmb3IgdGhhdCBiZXlvbmQgdGhlXG4gKiBkb21haW46IGEgZml4ZWQgYGZyb21gIGlzIGFuIE9WRVJSSURFLCBub3QgYSByZXF1aXJlbWVudC4gVGhlIGZpbGUvb3V0Ym94XG4gKiBmYWxsYmFjayAobm8gZG9tYWluKSBrZWVwcyB0aGUgdXNlcidzIGFkZHJlc3MgdmVyYmF0aW0gc28gdGVzdCBhcnRpZmFjdHMgbGFuZFxuICogdW5kZXIgYSByZWNvZ25pemFibGUgZm9sZGVyLlxuICpcbiAqIEEgc2VuZCB3aXRoIE5PIHVzZXIgaW4gc2NvcGUgaXMgU1lTVEVNIG1haWwgLSBhIHNpZ24taW4gY29kZSwgYSBwYXNzd29yZFxuICogcmVzZXQsIGFuIGFsZXJ0IC0gYW5kIGdvZXMgZnJvbSB0aGUgZG8tbm90LXJlcGx5IGFkZHJlc3MgaW5zdGVhZFxuICogKHtAbGluayByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzc30pLCBiZWNhdXNlIGEgcmVjaXBpZW50IGNhbm5vdCB1c2VmdWxseVxuICogcmVwbHkgdG8gYSBtYWNoaW5lIGFuZCBhIGh1bWFuJ3MgYWRkcmVzcyBvbiBtYWNoaW5lIG1haWwgaW52aXRlcyB0aGVtIHRvIHRyeS5cbiAqXG4gKiBUaGUgcmVzb2x2ZWQgYEZyb21gIGlzIHRoZW4gY29uc3RyYWluZWQgdG8gdGhlIGVmZmVjdGl2ZSBhbGxvdy1saXN0OiBhXG4gKiBwYXR0ZXJuIGlzIGVpdGhlciBhbiBleGFjdCBhZGRyZXNzIChgdXNlckBkb21haW4uY29tYCksIGEgZG9tYWluIHdpbGRjYXJkXG4gKiAoYCpAZG9tYWluLmNvbWAgb3IgdGhlIGJhcmUgYGRvbWFpbi5jb21gLCBtYXRjaGluZyBhbnkgbG9jYWwgcGFydCBvbiB0aGF0XG4gKiBkb21haW4pLCBvciBgKmAgKGFueSkuIFRoaXMgbW9kdWxlIG9ubHkgbWF0Y2hlcyBwYXR0ZXJuczsgd2hpY2ggcGF0dGVybnNcbiAqIGFwcGx5IGlzIGRlY2lkZWQgYnkgdGhlIGNvbmZpZ3VyZWQgc2VuZGVyIHBvbGljeSBpbiBgLi9jb25maWdgLCB3aGljaFxuICogdW5kZXIgdGhlIGRlZmF1bHQgYFwiYWxsb3dsaXN0XCJgIG1vZGUgZmlsbHMgYW4gZW1wdHkgbGlzdCBpbiBmcm9tIHRoZVxuICogc2VuZGVyIHNvdXJjZS4ge0BsaW5rIGxpc3RTZW5kZXJPcHRpb25zfSBleHBhbmRzIHRoZSBlZmZlY3RpdmUgbGlzdCBpbnRvXG4gKiB0aGUgY29uY3JldGUgYWRkcmVzc2VzIGEgVUkgZHJvcGRvd24gY2FuIG9mZmVyIGZvciB0aGUgY3VycmVudCB1c2VyLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZywgbmV0LCBzdHJpbmcgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuXG5pbXBvcnQgdHlwZSB7IFJlc29sdmVkRW1haWxDb25maWcsIFJlc29sdmVkU2VuZGVyIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJlbWFpbC9zZW5kZXJcIik7XG5cbi8qKlxuICogUmUtaG9tZSBhIHVzZXIncyBsb2NhbCBwYXJ0IG9uIGBkb21haW5gLiBUaHJvd3Mgd2hlbiBubyB1c2FibGUgbG9jYWwgcGFydCBpc1xuICogYXZhaWxhYmxlOyBjYWxsZXJzIHdpdGggbm8gdXNlciBpbiBzY29wZSB3YW50XG4gKiB7QGxpbmsgcmVzb2x2ZVN5c3RlbVNlbmRlckFkZHJlc3N9IGluc3RlYWQgb2YgYSBmaXhlZCBgZnJvbWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVTZW5kZXJBZGRyZXNzKHVzZXJFbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkLCBkb21haW46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxvY2FsID0gdXNlckVtYWlsPy5zcGxpdChcIkBcIilbMF0/LnRyaW0oKTtcbiAgaWYgKCFsb2NhbCkge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5yZXNvdXJjZU5vdEZvdW5kKFxuICAgICAgXCJPbi1iZWhhbGYtb2YgdXNlciBlbWFpbFwiLFxuICAgICAgXCJTZXQgYGZyb21gIC8gRU1BSUxfRlJPTSB0byBzZW5kIGZyb20gYSBmaXhlZCBhZGRyZXNzIGluc3RlYWQgb2YgZGVyaXZpbmcgb25lLlwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGAke2xvY2FsfUAke2RvbWFpbn1gO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIHNlbmRlciBhbGxvdy1saXN0IGZyb20gY29uZmlnIChhIGBzdHJpbmdbXWApIG9yIGFuIGVudiB2YXJcbiAqIChhIENTViAvIHdoaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZykuIERlbGVnYXRlcyB0byB0aGUgc2hhcmVkXG4gKiB7QGxpbmsgbmV0LnBhcnNlRW1haWxzfSBzbyBhbGxvdy1saXN0IHBhdHRlcm5zIGFyZSByZWFkIGV4YWN0bHlcbiAqIGxpa2UgcmVjaXBpZW50IGxpc3RzIGVsc2V3aGVyZTogZW50cmllcyBhcmUgdHJpbW1lZCwgbG93ZXItY2FzZWQgKHNvXG4gKiBtYXRjaGluZyBpbiB7QGxpbmsgaXNTZW5kZXJBbGxvd2VkfSBpcyBjYXNlLWluc2Vuc2l0aXZlKSwgYW5kXG4gKiBkZS1kdXBsaWNhdGVkOyBlbXB0aWVzIGFyZSBkcm9wcGVkLiBBbiBlbXB0eSByZXN1bHQgbWVhbnMgXCJub1xuICogcmVzdHJpY3Rpb25cIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWxsb3dlZFNlbmRlcnMocmF3OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIG5ldC5wYXJzZUVtYWlscyhyYXcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pO1xufVxuXG4vKiogVGhlIGBAZG9tYWluYCBzdWZmaXggYSB3aWxkY2FyZCAvIGJhcmUtZG9tYWluIHBhdHRlcm4gbWF0Y2hlcywgZWxzZSBudWxsLiAqL1xuZnVuY3Rpb24gcGF0dGVybkRvbWFpblN1ZmZpeChwYXR0ZXJuOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHBhdHRlcm4uc3RhcnRzV2l0aChcIipAXCIpKSByZXR1cm4gYEAke3BhdHRlcm4uc2xpY2UoMil9YDtcbiAgaWYgKCFwYXR0ZXJuLmluY2x1ZGVzKFwiQFwiKSkgcmV0dXJuIGBAJHtwYXR0ZXJufWA7XG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogV2hldGhlciBgYWRkcmVzc2AgKGFscmVhZHkgbG93ZXItY2FzZWQpIHNhdGlzZmllcyBhIHNpbmdsZSBwYXR0ZXJuLiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1BhdHRlcm4oYWRkcmVzczogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHBhdHRlcm4gPT09IFwiKlwiKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3Qgc3VmZml4ID0gcGF0dGVybkRvbWFpblN1ZmZpeChwYXR0ZXJuKTtcbiAgaWYgKHN1ZmZpeCkgcmV0dXJuIGFkZHJlc3MubGVuZ3RoID4gc3VmZml4Lmxlbmd0aCAmJiBhZGRyZXNzLmVuZHNXaXRoKHN1ZmZpeCk7XG4gIHJldHVybiBhZGRyZXNzID09PSBwYXR0ZXJuO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYGZyb21gIGlzIHBlcm1pdHRlZCBieSB0aGUgYWxsb3ctbGlzdC4gQW4gZW1wdHkgKG9yIGFic2VudClcbiAqIGFsbG93LWxpc3QgcGVybWl0cyBldmVyeXRoaW5nOiB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfSBpcyB3aGF0IHR1cm5zXG4gKiB0aGUgY29uZmlndXJlZCB7QGxpbmsgU2VuZGVyUG9saWN5fSBpbnRvIGNvbmNyZXRlIHBhdHRlcm5zLCBzbyBhbiBlbXB0eVxuICogbGlzdCBoZXJlIG1lYW5zIHRoZSBwb2xpY3kgaGFkIG5vdGhpbmcgdG8gbmFycm93IHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZW5kZXJBbGxvd2VkKGZyb206IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGlmIChwYXR0ZXJucy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICBjb25zdCBhZGRyZXNzID0gZnJvbS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHBhdHRlcm5zLnNvbWUoKHBhdHRlcm4pID0+IG1hdGNoZXNQYXR0ZXJuKGFkZHJlc3MsIHBhdHRlcm4pKTtcbn1cblxuLyoqXG4gKiBUaHJvdyB3aGVuIGBmcm9tYCBpcyBub3QgcGVybWl0dGVkIGJ5IHRoZSBhbGxvdy1saXN0LiBOby1vcCB3aGVuIHRoZVxuICogYWxsb3ctbGlzdCBpcyBlbXB0eS4gVGhlIHNpbmdsZSBlbmZvcmNlbWVudCBwb2ludCBmb3IgdGhlIHJlc3RyaWN0aW9uXG4gKiAoY2FsbGVkIGZyb20ge0BsaW5rIHNlbmRFbWFpbH0pLCBzbyBldmVyeSBzZW5kIHBhdGggaXMgY292ZXJlZCB3aGV0aGVyXG4gKiB0aGUgYWRkcmVzcyB3YXMgZGVyaXZlZCBzZXJ2ZXItc2lkZSBvciBjaG9zZW4gaW4gYSBVSS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydFNlbmRlckFsbG93ZWQoZnJvbTogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pOiB2b2lkIHtcbiAgaWYgKGlzU2VuZGVyQWxsb3dlZChmcm9tLCBwYXR0ZXJucykpIHJldHVybjtcbiAgLy8gVGhlIHRocm93biBtZXNzYWdlIG5hbWVzIHRoZSBmaWVsZCBvbmx5OyB0aGUgcGF0dGVybnMgYXJlIHBvbGljeSBkZXRhaWxcbiAgLy8gdGhhdCBiZWxvbmdzIGluIHRoZSBvcGVyYXRvcidzIGxvZ3MsIG5vdCBpbiBhIGNsaWVudCBvciBtb2RlbCByZXNwb25zZS5cbiAgbG9nZ2VyLndhcm4oXCJzZW5kZXI6ZGVuaWVkXCIsIHsgZnJvbSwgYWxsb3dlZFNlbmRlcnM6IHBhdHRlcm5zIH0pO1xuICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgIFwiZnJvbVwiLFxuICAgIGZyb20sXG4gICAgXCJhbiBhZGRyZXNzIHBlcm1pdHRlZCBieSB0aGUgY29uZmlndXJlZCBzZW5kZXIgYWxsb3ctbGlzdFwiLFxuICApO1xufVxuXG4vKipcbiAqIExvY2FsIHBhcnQgb2YgdGhlIGRlZmF1bHQgZG8tbm90LXJlcGx5IHNlbmRlciwgdXNlZCBmb3IgbWFpbCB0aGF0IG5vIHVzZXJcbiAqIGFza2VkIGZvciBhbmQgbm9ib2R5IGNhbiByZXBseSB0by5cbiAqL1xuZXhwb3J0IGNvbnN0IFNZU1RFTV9TRU5ERVJfTE9DQUxfUEFSVCA9IFwibm8tcmVwbHlcIjtcblxuLyoqIFRoZSBzZW5kZXIgZmllbGRzIHtAbGluayBzeXN0ZW1TZW5kZXJBZGRyZXNzfSByZWFkcywgcmVzb2x2ZWQgb3IgcmF3LiAqL1xudHlwZSBTZW5kZXJTb3VyY2UgPSBQaWNrPFJlc29sdmVkU2VuZGVyLCBcInN5c3RlbUZyb21cIiB8IFwiZG9tYWluXCIgfCBcImZyb21cIj47XG5cbi8qKlxuICogVGhlIGFkZHJlc3MgU1lTVEVNIG1haWwgc2VuZHMgZnJvbSwgb3IgdW5kZWZpbmVkIHdoZW4gbm90aGluZyBjb25maWd1cmVkXG4gKiB5aWVsZHMgb25lOiBhbiBleHBsaWNpdCB7QGxpbmsgUmVzb2x2ZWRTZW5kZXIuc3lzdGVtRnJvbX0gd2lucywgZWxzZVxuICogYG5vLXJlcGx5QDxkb21haW4+YCwgZWxzZSB0aGUgZml4ZWQgYGZyb21gLlxuICpcbiAqIGBuby1yZXBseUA8ZG9tYWluPmAgb3V0cmFua3MgYSBjb25maWd1cmVkIGBmcm9tYCBvbiBwdXJwb3NlLiBBIGZpeGVkIGBmcm9tYCBpc1xuICogdHlwaWNhbGx5IGEgcGVyc29uIG9yIGEgdGVhbSBhZGRyZXNzIGNob3NlbiBmb3IgbWFpbCBhIEhVTUFOIHNlbnQsIGFuZCBhXG4gKiB2ZXJpZmljYXRpb24gY29kZSBhcnJpdmluZyBmcm9tIGl0IGludml0ZXMgYSByZXBseSBub2JvZHkgcmVhZHMuIFNldFxuICogYHN5c3RlbUZyb21gIC8gRU1BSUxfU1lTVEVNX0ZST00gdG8gbmFtZSB0aGUgYWRkcmVzcyBleHBsaWNpdGx5IChhIG1vbml0b3JlZFxuICogYHN1cHBvcnRAYCwgYSBkaWZmZXJlbnRseS1zcGVsbGVkIGBkb25vdHJlcGx5QGApLlxuICpcbiAqIFJldHVybnMgdW5kZWZpbmVkIHJhdGhlciB0aGFuIHRocm93aW5nIHNvIGNvbmZpZyByZXNvbHV0aW9uIGNhbiBmb2xkIHRoZVxuICogcmVzdWx0IGludG8gdGhlIHNlbmRlciBhbGxvdy1saXN0IGJlZm9yZSBhbnkgc2VuZCBoYXBwZW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3lzdGVtU2VuZGVyQWRkcmVzcyhzb3VyY2U6IFNlbmRlclNvdXJjZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGV4cGxpY2l0ID0gc3RyaW5nLnRyaW1Ub051bGwoc291cmNlLnN5c3RlbUZyb20pO1xuICBpZiAoZXhwbGljaXQpIHJldHVybiBleHBsaWNpdDtcbiAgY29uc3QgZG9tYWluID0gc3RyaW5nLnRyaW1Ub051bGwoc291cmNlLmRvbWFpbik7XG4gIGlmIChkb21haW4pIHJldHVybiBgJHtTWVNURU1fU0VOREVSX0xPQ0FMX1BBUlR9QCR7ZG9tYWlufWA7XG4gIHJldHVybiBzdHJpbmcudHJpbVRvTnVsbChzb3VyY2UuZnJvbSkgPz8gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBgRnJvbWAgZm9yIGEgc2VuZCB3aXRoIG5vIHVzZXIgaW4gc2NvcGUuIFRocm93cyB3aGVuIG5vIHNlbmRlciBzb3VyY2UgaXNcbiAqIGNvbmZpZ3VyZWQgYXQgYWxsLCB3aGljaCBpbiBTTVRQIG1vZGUge0BsaW5rIHJlc29sdmVFbWFpbENvbmZpZ30gaGFzIGFscmVhZHlcbiAqIHJ1bGVkIG91dCAtIHNvIHRoaXMgb25seSBmaXJlcyBmb3IgYW4gb3V0Ym94IHdpdGggbm90aGluZyBjb25maWd1cmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVN5c3RlbVNlbmRlckFkZHJlc3MoY29uZmlnOiBSZXNvbHZlZEVtYWlsQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgYWRkcmVzcyA9IHN5c3RlbVNlbmRlckFkZHJlc3MoY29uZmlnKTtcbiAgaWYgKGFkZHJlc3MpIHJldHVybiBhZGRyZXNzO1xuICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IucmVzb3VyY2VOb3RGb3VuZChcbiAgICBcIkVtYWlsIHNlbmRlciBhZGRyZXNzXCIsXG4gICAgXCJTZXQgYGRvbWFpbmAgLyBFTUFJTF9ET01BSU4gdG8gc2VuZCBzeXN0ZW0gbWFpbCBhcyBuby1yZXBseUA8ZG9tYWluPiwgb3IgYHN5c3RlbUZyb21gIC8gRU1BSUxfU1lTVEVNX0ZST00gdG8gbmFtZSB0aGUgYWRkcmVzcy5cIixcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBgRnJvbWAgYWRkcmVzcyBmb3IgYSBzZW5kIGZyb20gdGhlIHJlc29sdmVkIGNvbmZpZyBhbmQgdGhlXG4gKiBjdXJyZW50IE9CTyB1c2VyLlxuICpcbiAqIFdpdGggYSB1c2VyIGluIHNjb3BlOiBhbiBleHBsaWNpdCBgZnJvbWAgd2lucywgdGhlbiBgPGxvY2FsPkA8ZG9tYWluPmAsIHRoZW5cbiAqIChmaWxlL291dGJveCBtb2RlIG9ubHkpIHRoZSB1c2VyJ3MgZW1haWwgdmVyYmF0aW0uIFdpdGggTk8gdXNlciB0aGUgc2VuZCBpc1xuICogc3lzdGVtIG1haWwsIHNvIGl0IGdvZXMgZnJvbSB7QGxpbmsgcmVzb2x2ZVN5c3RlbVNlbmRlckFkZHJlc3N9LiBUaHJvd3Mgd2hlblxuICogbm9uZSBvZiB0aG9zZSB5aWVsZCBhbiBhZGRyZXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVNlbmRlckFkZHJlc3MoXG4gIGNvbmZpZzogUmVzb2x2ZWRFbWFpbENvbmZpZyxcbiAgdXNlckVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBzdHJpbmcge1xuICBjb25zdCBlbWFpbCA9IHN0cmluZy50cmltVG9OdWxsKHVzZXJFbWFpbCk7XG4gIGlmICghZW1haWwpIHJldHVybiByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzcyhjb25maWcpO1xuICBpZiAoY29uZmlnLmZyb20pIHJldHVybiBjb25maWcuZnJvbTtcbiAgaWYgKGNvbmZpZy5kb21haW4pIHJldHVybiBkZXJpdmVTZW5kZXJBZGRyZXNzKGVtYWlsLCBjb25maWcuZG9tYWluKTtcbiAgcmV0dXJuIGVtYWlsO1xufVxuXG4vKipcbiAqIEV4cGFuZCB0aGUgcmVzb2x2ZWQgY29uZmlnJ3MgYWxsb3ctbGlzdCBpbnRvIHRoZSBjb25jcmV0ZSBgRnJvbWBcbiAqIGFkZHJlc3NlcyBvZmZlcmVkIHRvIHRoZSBjdXJyZW50IHVzZXIgLSB0aGUgZGF0YSBhIFVJIHNlbmRlciBkcm9wZG93blxuICogcmVuZGVycy4gRXhhY3QtYWRkcmVzcyBwYXR0ZXJucyBwYXNzIHRocm91Z2g7IGRvbWFpbiB3aWxkY2FyZHNcbiAqIChgKkBkb21haW4uY29tYCAvIGJhcmUgYGRvbWFpbi5jb21gKSBhcmUgY29uY3JldGl6ZWQgYXNcbiAqIGA8dXNlci1sb2NhbD5APGRvbWFpbj5gIGFuZCBkcm9wcGVkIHdoZW4gbm8gT0JPIHVzZXIgbG9jYWwgcGFydCBpc1xuICogYXZhaWxhYmxlLiBXaGVuIG5vIGFsbG93LWxpc3QgaXMgY29uZmlndXJlZCwgdGhlIHNpbmdsZSBkZWZhdWx0IHNlbmRlclxuICogKHtAbGluayByZXNvbHZlU2VuZGVyQWRkcmVzc30pIGlzIHJldHVybmVkIHdoZW4gaXQgY2FuIGJlIHJlc29sdmVkLFxuICogZWxzZSBhbiBlbXB0eSBsaXN0LiBUaGUgZGVmYXVsdCByZXNvbHZlZCBzZW5kZXIsIHdoZW4gcGVybWl0dGVkLCBpc1xuICogb3JkZXJlZCBmaXJzdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxpc3RTZW5kZXJPcHRpb25zKFxuICBjb25maWc6IFJlc29sdmVkRW1haWxDb25maWcsXG4gIHVzZXJFbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXR0ZXJucyA9IGNvbmZpZy5hbGxvd2VkU2VuZGVycyA/PyBbXTtcbiAgY29uc3QgbG9jYWwgPSB1c2VyRW1haWw/LnNwbGl0KFwiQFwiKVswXT8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IG9wdGlvbnM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGFkZCA9IChhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkID0+IHtcbiAgICBpZiAoYWRkcmVzcyAmJiAhb3B0aW9ucy5pbmNsdWRlcyhhZGRyZXNzKSkgb3B0aW9ucy5wdXNoKGFkZHJlc3MpO1xuICB9O1xuXG4gIC8vIFN1cmZhY2UgdGhlIGFkZHJlc3MgYSBzZW5kIHdvdWxkIHVzZSBieSBkZWZhdWx0IGZpcnN0LCB3aGVuIGl0IGNhblxuICAvLyBiZSByZXNvbHZlZCBhbmQgdGhlIGFsbG93LWxpc3QgKGlmIGFueSkgcGVybWl0cyBpdC5cbiAgdHJ5IHtcbiAgICBjb25zdCBmYWxsYmFjayA9IHJlc29sdmVTZW5kZXJBZGRyZXNzKGNvbmZpZywgdXNlckVtYWlsKTtcbiAgICBpZiAoaXNTZW5kZXJBbGxvd2VkKGZhbGxiYWNrLCBwYXR0ZXJucykpIGFkZChmYWxsYmFjay50b0xvd2VyQ2FzZSgpKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gTm8gZGVmYXVsdCByZXNvbHZhYmxlIChlLmcuIGZpbGUgbW9kZSB3aXRoIG5vIHVzZXIgLyBkb21haW4gLyBmcm9tKS5cbiAgfVxuXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGlmIChwYXR0ZXJuID09PSBcIipcIikgY29udGludWU7IC8vIFwiYW55XCIgY2FuJ3QgYmUgZW51bWVyYXRlZCBhcyBhIGNob2ljZVxuICAgIGlmIChwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIqQFwiKSB8fCAhcGF0dGVybi5pbmNsdWRlcyhcIkBcIikpIHtcbiAgICAgIGNvbnN0IGRvbWFpbiA9IHBhdHRlcm4uc3RhcnRzV2l0aChcIipAXCIpID8gcGF0dGVybi5zbGljZSgyKSA6IHBhdHRlcm47XG4gICAgICBpZiAobG9jYWwpIGFkZChgJHtsb2NhbH1AJHtkb21haW59YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFkZChwYXR0ZXJuKTsgLy8gZXhhY3QgYWRkcmVzc1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cbiJdfQ==
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSS9ELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFMUM7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUE2QixFQUFFLE1BQWM7SUFDL0UsTUFBTSxLQUFLLEdBQUcsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUMvQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxNQUFNLGtCQUFrQixDQUFDLGdCQUFnQixDQUN2Qyx5QkFBeUIsRUFDekIsK0VBQStFLENBQ2hGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxHQUFHLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBa0M7SUFDcEUsT0FBTyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsU0FBUyxtQkFBbUIsQ0FBQyxPQUFlO0lBQzFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELElBQUks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LENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3JFLElBQUksS0FBSztnQkFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGdCQUFnQjtRQUNoQyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlbmRlci1hZGRyZXNzIHBvbGljeTogdHVybiB0aGUgb24tYmVoYWxmLW9mIHVzZXIncyBlbWFpbCBpbnRvIGFuXG4gKiBvdXRib3VuZCBgRnJvbWAsIGFuZCAob3B0aW9uYWxseSkgcmVzdHJpY3Qgd2hpY2ggYWRkcmVzc2VzIG1heSBzZW5kLlxuICpcbiAqIFRoZSBkZWZhdWx0IGBGcm9tYCByZS1ob21lcyB0aGUgbG9jYWwgcGFydCAoZXZlcnl0aGluZyBiZWZvcmUgYEBgKSBvZlxuICogdGhlIE9CTyBlbWFpbCBvbiB0aGUgY29uZmlndXJlZCBzZW5kaW5nIGRvbWFpbiwgc28gYGFsaWNlQGRhdGFicmlja3MuY29tYFxuICogdGhyb3VnaCBhIGRvbWFpbiBvZiBgbWFpbC5leGFtcGxlLmNvbWAgZ29lcyBvdXQgYXNcbiAqIGBhbGljZUBtYWlsLmV4YW1wbGUuY29tYC4gTm90aGluZyBoYXMgdG8gYmUgY29uZmlndXJlZCBmb3IgdGhhdCBiZXlvbmQgdGhlXG4gKiBkb21haW46IGEgZml4ZWQgYGZyb21gIGlzIGFuIE9WRVJSSURFLCBub3QgYSByZXF1aXJlbWVudC4gVGhlIGZpbGUvb3V0Ym94XG4gKiBmYWxsYmFjayAobm8gZG9tYWluKSBrZWVwcyB0aGUgdXNlcidzIGFkZHJlc3MgdmVyYmF0aW0gc28gdGVzdCBhcnRpZmFjdHMgbGFuZFxuICogdW5kZXIgYSByZWNvZ25pemFibGUgZm9sZGVyLlxuICpcbiAqIEEgc2VuZCB3aXRoIE5PIHVzZXIgaW4gc2NvcGUgaXMgU1lTVEVNIG1haWwgLSBhIHNpZ24taW4gY29kZSwgYSBwYXNzd29yZFxuICogcmVzZXQsIGFuIGFsZXJ0IC0gYW5kIGdvZXMgZnJvbSB0aGUgZG8tbm90LXJlcGx5IGFkZHJlc3MgaW5zdGVhZFxuICogKHtAbGluayByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzc30pLCBiZWNhdXNlIGEgcmVjaXBpZW50IGNhbm5vdCB1c2VmdWxseVxuICogcmVwbHkgdG8gYSBtYWNoaW5lIGFuZCBhIGh1bWFuJ3MgYWRkcmVzcyBvbiBtYWNoaW5lIG1haWwgaW52aXRlcyB0aGVtIHRvIHRyeS5cbiAqXG4gKiBUaGUgcmVzb2x2ZWQgYEZyb21gIGlzIHRoZW4gY29uc3RyYWluZWQgdG8gdGhlIGVmZmVjdGl2ZSBhbGxvdy1saXN0OiBhXG4gKiBwYXR0ZXJuIGlzIGVpdGhlciBhbiBleGFjdCBhZGRyZXNzIChgdXNlckBkb21haW4uY29tYCksIGEgZG9tYWluIHdpbGRjYXJkXG4gKiAoYCpAZG9tYWluLmNvbWAgb3IgdGhlIGJhcmUgYGRvbWFpbi5jb21gLCBtYXRjaGluZyBhbnkgbG9jYWwgcGFydCBvbiB0aGF0XG4gKiBkb21haW4pLCBvciBgKmAgKGFueSkuIFRoaXMgbW9kdWxlIG9ubHkgbWF0Y2hlcyBwYXR0ZXJuczsgd2hpY2ggcGF0dGVybnNcbiAqIGFwcGx5IGlzIGRlY2lkZWQgYnkgdGhlIGNvbmZpZ3VyZWQgc2VuZGVyIHBvbGljeSBpbiBgLi9jb25maWdgLCB3aGljaFxuICogdW5kZXIgdGhlIGRlZmF1bHQgYFwiYWxsb3dsaXN0XCJgIG1vZGUgZmlsbHMgYW4gZW1wdHkgbGlzdCBpbiBmcm9tIHRoZVxuICogc2VuZGVyIHNvdXJjZS4ge0BsaW5rIGxpc3RTZW5kZXJPcHRpb25zfSBleHBhbmRzIHRoZSBlZmZlY3RpdmUgbGlzdCBpbnRvXG4gKiB0aGUgY29uY3JldGUgYWRkcmVzc2VzIGEgVUkgZHJvcGRvd24gY2FuIG9mZmVyIGZvciB0aGUgY3VycmVudCB1c2VyLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZywgbmV0LCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5cbmltcG9ydCB0eXBlIHsgUmVzb2x2ZWRFbWFpbENvbmZpZywgUmVzb2x2ZWRTZW5kZXIgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImVtYWlsL3NlbmRlclwiKTtcblxuLyoqXG4gKiBSZS1ob21lIGEgdXNlcidzIGxvY2FsIHBhcnQgb24gYGRvbWFpbmAuIFRocm93cyB3aGVuIG5vIHVzYWJsZSBsb2NhbCBwYXJ0IGlzXG4gKiBhdmFpbGFibGU7IGNhbGxlcnMgd2l0aCBubyB1c2VyIGluIHNjb3BlIHdhbnRcbiAqIHtAbGluayByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzc30gaW5zdGVhZCBvZiBhIGZpeGVkIGBmcm9tYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZVNlbmRlckFkZHJlc3ModXNlckVtYWlsOiBzdHJpbmcgfCB1bmRlZmluZWQsIGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbG9jYWwgPSB1c2VyRW1haWw/LnNwbGl0KFwiQFwiKVswXT8udHJpbSgpO1xuICBpZiAoIWxvY2FsKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLnJlc291cmNlTm90Rm91bmQoXG4gICAgICBcIk9uLWJlaGFsZi1vZiB1c2VyIGVtYWlsXCIsXG4gICAgICBcIlNldCBgZnJvbWAgLyBFTUFJTF9GUk9NIHRvIHNlbmQgZnJvbSBhIGZpeGVkIGFkZHJlc3MgaW5zdGVhZCBvZiBkZXJpdmluZyBvbmUuXCIsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gYCR7bG9jYWx9QCR7ZG9tYWlufWA7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGEgc2VuZGVyIGFsbG93LWxpc3QgZnJvbSBjb25maWcgKGEgYHN0cmluZ1tdYCkgb3IgYW4gZW52IHZhclxuICogKGEgQ1NWIC8gd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nKS4gRGVsZWdhdGVzIHRvIHRoZSBzaGFyZWRcbiAqIHtAbGluayBuZXQucGFyc2VFbWFpbHN9IHNvIGFsbG93LWxpc3QgcGF0dGVybnMgYXJlIHJlYWQgZXhhY3RseVxuICogbGlrZSByZWNpcGllbnQgbGlzdHMgZWxzZXdoZXJlOiBlbnRyaWVzIGFyZSB0cmltbWVkLCBsb3dlci1jYXNlZCAoc29cbiAqIG1hdGNoaW5nIGluIHtAbGluayBpc1NlbmRlckFsbG93ZWR9IGlzIGNhc2UtaW5zZW5zaXRpdmUpLCBhbmRcbiAqIGRlLWR1cGxpY2F0ZWQ7IGVtcHRpZXMgYXJlIGRyb3BwZWQuIEFuIGVtcHR5IHJlc3VsdCBtZWFucyBcIm5vXG4gKiByZXN0cmljdGlvblwiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBbGxvd2VkU2VuZGVycyhyYXc6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogc3RyaW5nW10ge1xuICByZXR1cm4gbmV0LnBhcnNlRW1haWxzKHJhdywgeyBsb3dlcmNhc2U6IHRydWUgfSk7XG59XG5cbi8qKiBUaGUgYEBkb21haW5gIHN1ZmZpeCBhIHdpbGRjYXJkIC8gYmFyZS1kb21haW4gcGF0dGVybiBtYXRjaGVzLCBlbHNlIG51bGwuICovXG5mdW5jdGlvbiBwYXR0ZXJuRG9tYWluU3VmZml4KHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAocGF0dGVybi5zdGFydHNXaXRoKFwiKkBcIikpIHJldHVybiBgQCR7cGF0dGVybi5zbGljZSgyKX1gO1xuICBpZiAoIXBhdHRlcm4uaW5jbHVkZXMoXCJAXCIpKSByZXR1cm4gYEAke3BhdHRlcm59YDtcbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKiBXaGV0aGVyIGBhZGRyZXNzYCAoYWxyZWFkeSBsb3dlci1jYXNlZCkgc2F0aXNmaWVzIGEgc2luZ2xlIHBhdHRlcm4uICovXG5mdW5jdGlvbiBtYXRjaGVzUGF0dGVybihhZGRyZXNzOiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAocGF0dGVybiA9PT0gXCIqXCIpIHJldHVybiB0cnVlO1xuICBjb25zdCBzdWZmaXggPSBwYXR0ZXJuRG9tYWluU3VmZml4KHBhdHRlcm4pO1xuICBpZiAoc3VmZml4KSByZXR1cm4gYWRkcmVzcy5sZW5ndGggPiBzdWZmaXgubGVuZ3RoICYmIGFkZHJlc3MuZW5kc1dpdGgoc3VmZml4KTtcbiAgcmV0dXJuIGFkZHJlc3MgPT09IHBhdHRlcm47XG59XG5cbi8qKlxuICogV2hldGhlciBgZnJvbWAgaXMgcGVybWl0dGVkIGJ5IHRoZSBhbGxvdy1saXN0LiBBbiBlbXB0eSAob3IgYWJzZW50KVxuICogYWxsb3ctbGlzdCBwZXJtaXRzIGV2ZXJ5dGhpbmc6IHtAbGluayByZXNvbHZlRW1haWxDb25maWd9IGlzIHdoYXQgdHVybnNcbiAqIHRoZSBjb25maWd1cmVkIHtAbGluayBTZW5kZXJQb2xpY3l9IGludG8gY29uY3JldGUgcGF0dGVybnMsIHNvIGFuIGVtcHR5XG4gKiBsaXN0IGhlcmUgbWVhbnMgdGhlIHBvbGljeSBoYWQgbm90aGluZyB0byBuYXJyb3cgdG8uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlbmRlckFsbG93ZWQoZnJvbTogc3RyaW5nLCBwYXR0ZXJuczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgaWYgKHBhdHRlcm5zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGFkZHJlc3MgPSBmcm9tLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gcGF0dGVybnMuc29tZSgocGF0dGVybikgPT4gbWF0Y2hlc1BhdHRlcm4oYWRkcmVzcywgcGF0dGVybikpO1xufVxuXG4vKipcbiAqIFRocm93IHdoZW4gYGZyb21gIGlzIG5vdCBwZXJtaXR0ZWQgYnkgdGhlIGFsbG93LWxpc3QuIE5vLW9wIHdoZW4gdGhlXG4gKiBhbGxvdy1saXN0IGlzIGVtcHR5LiBUaGUgc2luZ2xlIGVuZm9yY2VtZW50IHBvaW50IGZvciB0aGUgcmVzdHJpY3Rpb25cbiAqIChjYWxsZWQgZnJvbSB7QGxpbmsgc2VuZEVtYWlsfSksIHNvIGV2ZXJ5IHNlbmQgcGF0aCBpcyBjb3ZlcmVkIHdoZXRoZXJcbiAqIHRoZSBhZGRyZXNzIHdhcyBkZXJpdmVkIHNlcnZlci1zaWRlIG9yIGNob3NlbiBpbiBhIFVJLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0U2VuZGVyQWxsb3dlZChmcm9tOiBzdHJpbmcsIHBhdHRlcm5zOiBzdHJpbmdbXSk6IHZvaWQge1xuICBpZiAoaXNTZW5kZXJBbGxvd2VkKGZyb20sIHBhdHRlcm5zKSkgcmV0dXJuO1xuICAvLyBUaGUgdGhyb3duIG1lc3NhZ2UgbmFtZXMgdGhlIGZpZWxkIG9ubHk7IHRoZSBwYXR0ZXJucyBhcmUgcG9saWN5IGRldGFpbFxuICAvLyB0aGF0IGJlbG9uZ3MgaW4gdGhlIG9wZXJhdG9yJ3MgbG9ncywgbm90IGluIGEgY2xpZW50IG9yIG1vZGVsIHJlc3BvbnNlLlxuICBsb2dnZXIud2FybihcInNlbmRlcjpkZW5pZWRcIiwgeyBmcm9tLCBhbGxvd2VkU2VuZGVyczogcGF0dGVybnMgfSk7XG4gIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgXCJmcm9tXCIsXG4gICAgZnJvbSxcbiAgICBcImFuIGFkZHJlc3MgcGVybWl0dGVkIGJ5IHRoZSBjb25maWd1cmVkIHNlbmRlciBhbGxvdy1saXN0XCIsXG4gICk7XG59XG5cbi8qKlxuICogTG9jYWwgcGFydCBvZiB0aGUgZGVmYXVsdCBkby1ub3QtcmVwbHkgc2VuZGVyLCB1c2VkIGZvciBtYWlsIHRoYXQgbm8gdXNlclxuICogYXNrZWQgZm9yIGFuZCBub2JvZHkgY2FuIHJlcGx5IHRvLlxuICovXG5leHBvcnQgY29uc3QgU1lTVEVNX1NFTkRFUl9MT0NBTF9QQVJUID0gXCJuby1yZXBseVwiO1xuXG4vKiogVGhlIHNlbmRlciBmaWVsZHMge0BsaW5rIHN5c3RlbVNlbmRlckFkZHJlc3N9IHJlYWRzLCByZXNvbHZlZCBvciByYXcuICovXG50eXBlIFNlbmRlclNvdXJjZSA9IFBpY2s8UmVzb2x2ZWRTZW5kZXIsIFwic3lzdGVtRnJvbVwiIHwgXCJkb21haW5cIiB8IFwiZnJvbVwiPjtcblxuLyoqXG4gKiBUaGUgYWRkcmVzcyBTWVNURU0gbWFpbCBzZW5kcyBmcm9tLCBvciB1bmRlZmluZWQgd2hlbiBub3RoaW5nIGNvbmZpZ3VyZWRcbiAqIHlpZWxkcyBvbmU6IGFuIGV4cGxpY2l0IHtAbGluayBSZXNvbHZlZFNlbmRlci5zeXN0ZW1Gcm9tfSB3aW5zLCBlbHNlXG4gKiBgbm8tcmVwbHlAPGRvbWFpbj5gLCBlbHNlIHRoZSBmaXhlZCBgZnJvbWAuXG4gKlxuICogYG5vLXJlcGx5QDxkb21haW4+YCBvdXRyYW5rcyBhIGNvbmZpZ3VyZWQgYGZyb21gIG9uIHB1cnBvc2UuIEEgZml4ZWQgYGZyb21gIGlzXG4gKiB0eXBpY2FsbHkgYSBwZXJzb24gb3IgYSB0ZWFtIGFkZHJlc3MgY2hvc2VuIGZvciBtYWlsIGEgSFVNQU4gc2VudCwgYW5kIGFcbiAqIHZlcmlmaWNhdGlvbiBjb2RlIGFycml2aW5nIGZyb20gaXQgaW52aXRlcyBhIHJlcGx5IG5vYm9keSByZWFkcy4gU2V0XG4gKiBgc3lzdGVtRnJvbWAgLyBFTUFJTF9TWVNURU1fRlJPTSB0byBuYW1lIHRoZSBhZGRyZXNzIGV4cGxpY2l0bHkgKGEgbW9uaXRvcmVkXG4gKiBgc3VwcG9ydEBgLCBhIGRpZmZlcmVudGx5LXNwZWxsZWQgYGRvbm90cmVwbHlAYCkuXG4gKlxuICogUmV0dXJucyB1bmRlZmluZWQgcmF0aGVyIHRoYW4gdGhyb3dpbmcgc28gY29uZmlnIHJlc29sdXRpb24gY2FuIGZvbGQgdGhlXG4gKiByZXN1bHQgaW50byB0aGUgc2VuZGVyIGFsbG93LWxpc3QgYmVmb3JlIGFueSBzZW5kIGhhcHBlbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeXN0ZW1TZW5kZXJBZGRyZXNzKHNvdXJjZTogU2VuZGVyU291cmNlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXhwbGljaXQgPSBzdHJpbmdVdGlscy50cmltVG9OdWxsKHNvdXJjZS5zeXN0ZW1Gcm9tKTtcbiAgaWYgKGV4cGxpY2l0KSByZXR1cm4gZXhwbGljaXQ7XG4gIGNvbnN0IGRvbWFpbiA9IHN0cmluZ1V0aWxzLnRyaW1Ub051bGwoc291cmNlLmRvbWFpbik7XG4gIGlmIChkb21haW4pIHJldHVybiBgJHtTWVNURU1fU0VOREVSX0xPQ0FMX1BBUlR9QCR7ZG9tYWlufWA7XG4gIHJldHVybiBzdHJpbmdVdGlscy50cmltVG9OdWxsKHNvdXJjZS5mcm9tKSA/PyB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGBGcm9tYCBmb3IgYSBzZW5kIHdpdGggbm8gdXNlciBpbiBzY29wZS4gVGhyb3dzIHdoZW4gbm8gc2VuZGVyIHNvdXJjZSBpc1xuICogY29uZmlndXJlZCBhdCBhbGwsIHdoaWNoIGluIFNNVFAgbW9kZSB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfSBoYXMgYWxyZWFkeVxuICogcnVsZWQgb3V0IC0gc28gdGhpcyBvbmx5IGZpcmVzIGZvciBhbiBvdXRib3ggd2l0aCBub3RoaW5nIGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzcyhjb25maWc6IFJlc29sdmVkRW1haWxDb25maWcpOiBzdHJpbmcge1xuICBjb25zdCBhZGRyZXNzID0gc3lzdGVtU2VuZGVyQWRkcmVzcyhjb25maWcpO1xuICBpZiAoYWRkcmVzcykgcmV0dXJuIGFkZHJlc3M7XG4gIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5yZXNvdXJjZU5vdEZvdW5kKFxuICAgIFwiRW1haWwgc2VuZGVyIGFkZHJlc3NcIixcbiAgICBcIlNldCBgZG9tYWluYCAvIEVNQUlMX0RPTUFJTiB0byBzZW5kIHN5c3RlbSBtYWlsIGFzIG5vLXJlcGx5QDxkb21haW4+LCBvciBgc3lzdGVtRnJvbWAgLyBFTUFJTF9TWVNURU1fRlJPTSB0byBuYW1lIHRoZSBhZGRyZXNzLlwiLFxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgdGhlIGBGcm9tYCBhZGRyZXNzIGZvciBhIHNlbmQgZnJvbSB0aGUgcmVzb2x2ZWQgY29uZmlnIGFuZCB0aGVcbiAqIGN1cnJlbnQgT0JPIHVzZXIuXG4gKlxuICogV2l0aCBhIHVzZXIgaW4gc2NvcGU6IGFuIGV4cGxpY2l0IGBmcm9tYCB3aW5zLCB0aGVuIGA8bG9jYWw+QDxkb21haW4+YCwgdGhlblxuICogKGZpbGUvb3V0Ym94IG1vZGUgb25seSkgdGhlIHVzZXIncyBlbWFpbCB2ZXJiYXRpbS4gV2l0aCBOTyB1c2VyIHRoZSBzZW5kIGlzXG4gKiBzeXN0ZW0gbWFpbCwgc28gaXQgZ29lcyBmcm9tIHtAbGluayByZXNvbHZlU3lzdGVtU2VuZGVyQWRkcmVzc30uIFRocm93cyB3aGVuXG4gKiBub25lIG9mIHRob3NlIHlpZWxkIGFuIGFkZHJlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU2VuZGVyQWRkcmVzcyhcbiAgY29uZmlnOiBSZXNvbHZlZEVtYWlsQ29uZmlnLFxuICB1c2VyRW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGVtYWlsID0gc3RyaW5nVXRpbHMudHJpbVRvTnVsbCh1c2VyRW1haWwpO1xuICBpZiAoIWVtYWlsKSByZXR1cm4gcmVzb2x2ZVN5c3RlbVNlbmRlckFkZHJlc3MoY29uZmlnKTtcbiAgaWYgKGNvbmZpZy5mcm9tKSByZXR1cm4gY29uZmlnLmZyb207XG4gIGlmIChjb25maWcuZG9tYWluKSByZXR1cm4gZGVyaXZlU2VuZGVyQWRkcmVzcyhlbWFpbCwgY29uZmlnLmRvbWFpbik7XG4gIHJldHVybiBlbWFpbDtcbn1cblxuLyoqXG4gKiBFeHBhbmQgdGhlIHJlc29sdmVkIGNvbmZpZydzIGFsbG93LWxpc3QgaW50byB0aGUgY29uY3JldGUgYEZyb21gXG4gKiBhZGRyZXNzZXMgb2ZmZXJlZCB0byB0aGUgY3VycmVudCB1c2VyIC0gdGhlIGRhdGEgYSBVSSBzZW5kZXIgZHJvcGRvd25cbiAqIHJlbmRlcnMuIEV4YWN0LWFkZHJlc3MgcGF0dGVybnMgcGFzcyB0aHJvdWdoOyBkb21haW4gd2lsZGNhcmRzXG4gKiAoYCpAZG9tYWluLmNvbWAgLyBiYXJlIGBkb21haW4uY29tYCkgYXJlIGNvbmNyZXRpemVkIGFzXG4gKiBgPHVzZXItbG9jYWw+QDxkb21haW4+YCBhbmQgZHJvcHBlZCB3aGVuIG5vIE9CTyB1c2VyIGxvY2FsIHBhcnQgaXNcbiAqIGF2YWlsYWJsZS4gV2hlbiBubyBhbGxvdy1saXN0IGlzIGNvbmZpZ3VyZWQsIHRoZSBzaW5nbGUgZGVmYXVsdCBzZW5kZXJcbiAqICh7QGxpbmsgcmVzb2x2ZVNlbmRlckFkZHJlc3N9KSBpcyByZXR1cm5lZCB3aGVuIGl0IGNhbiBiZSByZXNvbHZlZCxcbiAqIGVsc2UgYW4gZW1wdHkgbGlzdC4gVGhlIGRlZmF1bHQgcmVzb2x2ZWQgc2VuZGVyLCB3aGVuIHBlcm1pdHRlZCwgaXNcbiAqIG9yZGVyZWQgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaXN0U2VuZGVyT3B0aW9ucyhcbiAgY29uZmlnOiBSZXNvbHZlZEVtYWlsQ29uZmlnLFxuICB1c2VyRW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgcGF0dGVybnMgPSBjb25maWcuYWxsb3dlZFNlbmRlcnMgPz8gW107XG4gIGNvbnN0IGxvY2FsID0gdXNlckVtYWlsPy5zcGxpdChcIkBcIilbMF0/LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBvcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBhZGQgPSAoYWRkcmVzczogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCA9PiB7XG4gICAgaWYgKGFkZHJlc3MgJiYgIW9wdGlvbnMuaW5jbHVkZXMoYWRkcmVzcykpIG9wdGlvbnMucHVzaChhZGRyZXNzKTtcbiAgfTtcblxuICAvLyBTdXJmYWNlIHRoZSBhZGRyZXNzIGEgc2VuZCB3b3VsZCB1c2UgYnkgZGVmYXVsdCBmaXJzdCwgd2hlbiBpdCBjYW5cbiAgLy8gYmUgcmVzb2x2ZWQgYW5kIHRoZSBhbGxvdy1saXN0IChpZiBhbnkpIHBlcm1pdHMgaXQuXG4gIHRyeSB7XG4gICAgY29uc3QgZmFsbGJhY2sgPSByZXNvbHZlU2VuZGVyQWRkcmVzcyhjb25maWcsIHVzZXJFbWFpbCk7XG4gICAgaWYgKGlzU2VuZGVyQWxsb3dlZChmYWxsYmFjaywgcGF0dGVybnMpKSBhZGQoZmFsbGJhY2sudG9Mb3dlckNhc2UoKSk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vIGRlZmF1bHQgcmVzb2x2YWJsZSAoZS5nLiBmaWxlIG1vZGUgd2l0aCBubyB1c2VyIC8gZG9tYWluIC8gZnJvbSkuXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICBpZiAocGF0dGVybiA9PT0gXCIqXCIpIGNvbnRpbnVlOyAvLyBcImFueVwiIGNhbid0IGJlIGVudW1lcmF0ZWQgYXMgYSBjaG9pY2VcbiAgICBpZiAocGF0dGVybi5zdGFydHNXaXRoKFwiKkBcIikgfHwgIXBhdHRlcm4uaW5jbHVkZXMoXCJAXCIpKSB7XG4gICAgICBjb25zdCBkb21haW4gPSBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCIqQFwiKSA/IHBhdHRlcm4uc2xpY2UoMikgOiBwYXR0ZXJuO1xuICAgICAgaWYgKGxvY2FsKSBhZGQoYCR7bG9jYWx9QCR7ZG9tYWlufWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhZGQocGF0dGVybik7IC8vIGV4YWN0IGFkZHJlc3NcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG4iXX0=
|
package/lib/src/tool.js
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* @module
|
|
18
18
|
*/
|
|
19
19
|
import { getExecutionContext } from "@databricks/appkit";
|
|
20
|
-
import { log,
|
|
20
|
+
import { log, stringUtils } from "@dbx-tools/shared-core";
|
|
21
21
|
import { email } from "@dbx-tools/shared-email";
|
|
22
22
|
import { createTool } from "@mastra/core/tools";
|
|
23
23
|
import { resolveSenderAddress } from "./sender.js";
|
|
@@ -28,7 +28,7 @@ const logger = log.logger("email/tool/send-email");
|
|
|
28
28
|
* {@link emailTool} and the AppKit `email.send` tool so both agents get the
|
|
29
29
|
* same guidance about approval and scope.
|
|
30
30
|
*/
|
|
31
|
-
export const SEND_EMAIL_DESCRIPTION =
|
|
31
|
+
export const SEND_EMAIL_DESCRIPTION = stringUtils.toDescription(`
|
|
32
32
|
Send an email on the user's behalf. Pass one or more recipient
|
|
33
33
|
addresses (with optional cc / bcc and file attachments), a subject,
|
|
34
34
|
and a body; the configured approval policy runs before it goes out.
|
|
@@ -77,4 +77,4 @@ export function emailTool(opts = {}) {
|
|
|
77
77
|
},
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxVQUFVLEVBQW1CLE1BQU0sb0JBQW9CLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBRW5EOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDOzs7Ozs7Ozs7Q0FTL0QsQ0FBQyxDQUFDO0FBa0JIOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBeUIsRUFBRTtJQUNuRCxPQUFPLFVBQVUsQ0FBQztRQUNoQixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxZQUFZO1FBQzNCLFdBQVcsRUFBRSxzQkFBc0I7UUFDbkMsV0FBVyxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7UUFDckMsWUFBWSxFQUFFLEtBQUssQ0FBQyxpQkFBaUI7UUFDckMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSTtRQUM3QyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sU0FBUyxHQUFHLGVBQWUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNyRSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDckQsTUFBTSxNQUFNLEdBQUcsTUFBTSxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDcEUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xCLEVBQUUsRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDcEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO2dCQUNqQixHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDN0QsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBgc2VuZF9lbWFpbGAgTWFzdHJhIHRvb2w6IGh1bWFuIGFwcHJvdmFsIGlzIHJlcXVpcmVkIGJ5IGRlZmF1bHQsIHdpdGggYW5cbiAqIG9wdGlvbmFsIE1hc3RyYS1uYXRpdmUgY29uZGl0aW9uYWwgYXBwcm92YWwgZnVuY3Rpb24gZm9yIGNhbGxlci1vd25lZCBwb2xpY3kuXG4gKiBPbmNlIGFsbG93ZWQsIHRoZSBzZW5kZXIgaXMgcmVzb2x2ZWQgKGV4cGxpY2l0IGBmcm9tYCBjb25maWcsIGVsc2UgZGVyaXZlZFxuICogZnJvbSB0aGUgb24tYmVoYWxmLW9mIHVzZXIncyBlbWFpbCkgYW5kIHRoZSBtZXNzYWdlIGlzIGRpc3BhdGNoZWQgdGhyb3VnaFxuICogdGhlIHNoYXJlZCBTTVRQIHRyYW5zcG9ydC5cbiAqXG4gKiBUaGUgc2VuZGVyIGRlcml2YXRpb24gcnVucyBpbnNpZGUgdGhlIEFwcEtpdCB1c2VyIHNjb3BlLCBzb1xuICogYGdldEV4ZWN1dGlvbkNvbnRleHQoKWAgcmV0dXJucyB0aGUgT0JPIHVzZXIgd2hvc2UgbG9jYWwtcGFydCBzZWVkc1xuICogdGhlIGFkZHJlc3MgKHNlZSB7QGxpbmsgZGVyaXZlU2VuZGVyQWRkcmVzc30pLlxuICpcbiAqIFRoZSBkaXNwYXRjaCBpdHNlbGYgZ29lcyB0aHJvdWdoIHRoZSBleGVjdXRvciB0aGUgcGx1Z2luIGluc3RhbGxzIG9uIHRoZVxuICogc2hhcmVkIHJ1bnRpbWUsIHNvIGEgc2VuZCBmcm9tIHRoaXMgdG9vbCBwaWNrcyB1cCB0aGUgc2FtZSByZXRyeSAvIHRpbWVvdXQgL1xuICogdGVsZW1ldHJ5IGNoYWluIGFzIG9uZSBmcm9tIHRoZSBBcHBLaXQgdG9vbC4gSW4gYSBNYXN0cmEgYXBwIHdpdGggbm8gQXBwS2l0XG4gKiBwbHVnaW4gcmVnaXN0ZXJlZCB0aGUgc2VuZCBzdGlsbCBydW5zLCBqdXN0IHdpdGhvdXQgaW50ZXJjZXB0b3JzLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBnZXRFeGVjdXRpb25Db250ZXh0IH0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdFwiO1xuaW1wb3J0IHsgbG9nLCBzdHJpbmdVdGlscyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBlbWFpbCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbFwiO1xuaW1wb3J0IHsgY3JlYXRlVG9vbCwgdHlwZSBUb29sQWN0aW9uIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZVNlbmRlckFkZHJlc3MgfSBmcm9tIFwiLi9zZW5kZXIudHNcIjtcbmltcG9ydCB7IGdldEVtYWlsUnVudGltZSwgc2VuZEVtYWlsIH0gZnJvbSBcIi4vdHJhbnNwb3J0LnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJlbWFpbC90b29sL3NlbmQtZW1haWxcIik7XG5cbi8qKlxuICogVGhlIG1vZGVsLWZhY2luZyBkZXNjcmlwdGlvbiBvZiB0aGUgc2VuZCBjYXBhYmlsaXR5LCBzaGFyZWQgYnkgdGhlIE1hc3RyYVxuICoge0BsaW5rIGVtYWlsVG9vbH0gYW5kIHRoZSBBcHBLaXQgYGVtYWlsLnNlbmRgIHRvb2wgc28gYm90aCBhZ2VudHMgZ2V0IHRoZVxuICogc2FtZSBndWlkYW5jZSBhYm91dCBhcHByb3ZhbCBhbmQgc2NvcGUuXG4gKi9cbmV4cG9ydCBjb25zdCBTRU5EX0VNQUlMX0RFU0NSSVBUSU9OID0gc3RyaW5nVXRpbHMudG9EZXNjcmlwdGlvbihgXG4gIFNlbmQgYW4gZW1haWwgb24gdGhlIHVzZXIncyBiZWhhbGYuIFBhc3Mgb25lIG9yIG1vcmUgcmVjaXBpZW50XG4gIGFkZHJlc3NlcyAod2l0aCBvcHRpb25hbCBjYyAvIGJjYyBhbmQgZmlsZSBhdHRhY2htZW50cyksIGEgc3ViamVjdCxcbiAgYW5kIGEgYm9keTsgdGhlIGNvbmZpZ3VyZWQgYXBwcm92YWwgcG9saWN5IHJ1bnMgYmVmb3JlIGl0IGdvZXMgb3V0LlxuICBVc2UgaXQgb25seSB3aGVuIHRoZSB1c2VyXG4gIGV4cGxpY2l0bHkgYXNrcyB0byBzZW5kIC8gZm9yd2FyZCAvIHNoYXJlIHNvbWV0aGluZyB2aWEgZW1haWwgLVxuICBuZXZlciBhdXRvbm9tb3VzbHkuIENvbXBvc2Ugd2hhdGV2ZXIgc3ViamVjdCBhbmQgYm9keSBiZXN0IGZ1bGZpbGxcbiAgdGhlIHVzZXIncyByZXF1ZXN0OyB0aGUgY29uZmlndXJlZCBSZWFjdCBFbWFpbCB0ZW1wbGF0ZSBoYW5kbGVzIHRoZVxuICByZXNwb25zaXZlIGxheW91dCwgcmljaCBwcmVzZW50YXRpb24sIGFuZCBicmFuZCBzdHlsaW5nLlxuYCk7XG5cbi8qKiBPcHRpb25zIGFjY2VwdGVkIGJ5IHtAbGluayBlbWFpbFRvb2x9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFRvb2xPcHRpb25zIHtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSB0b29sIGlkLiBEZWZhdWx0cyB0byBgXCJzZW5kX2VtYWlsXCJgOyB0aGUgY2hhdCBVSSdzXG4gICAqIGFwcHJvdmFsIGdhdGUga2V5cyBvZmYgdGhpcyBpZCwgc28ga2VlcCBpdCB1bmxlc3MgeW91IGFsc28gdGVhY2hcbiAgICogdGhlIGNsaWVudCBhYm91dCB0aGUgbmV3IG5hbWUuXG4gICAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqXG4gICAqIE1hc3RyYS1uYXRpdmUgc3RhdGljIG9yIHBlci1jYWxsIGFwcHJvdmFsIHByZWRpY2F0ZS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKiBVc2UgYSBmdW5jdGlvbiBvciBDbGFzc2lmaWVyLWJhY2tlZCBwb2xpY3kgdG8gYWxsb3cgbG93LXJpc2sgY2FsbHMgd2hpbGVcbiAgICogcmV0YWluaW5nIGh1bWFuIHJldmlldyBmb3IgdW5jZXJ0YWluIG9uZXMuXG4gICAqL1xuICByZXF1aXJlQXBwcm92YWw/OiBUb29sQWN0aW9uPGVtYWlsLkVtYWlsTWVzc2FnZSwgZW1haWwuRW1haWxSZXN1bHQ+W1wicmVxdWlyZUFwcHJvdmFsXCJdO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBhcHByb3ZhbC1nYXRlZCBgc2VuZF9lbWFpbGAgdG9vbC4gU3ByZWFkIGl0IGludG8gdGhlIGFnZW50c1xuICogdGhhdCBzaG91bGQgYmUgYWJsZSB0byBkcmFmdCBtYWlsOyBpdCBpcyBpbnRlbnRpb25hbGx5IG5vdCBpbnN0YWxsZWRcbiAqIGV2ZXJ5d2hlcmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBlbWFpbFRvb2wgfSBmcm9tIFwiQGRieC10b29scy9lbWFpbFwiO1xuICogaW1wb3J0IHsgY3JlYXRlQWdlbnQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXQtbWFzdHJhXCI7XG4gKlxuICogY29uc3Qgc3VwcG9ydCA9IGNyZWF0ZUFnZW50KHtcbiAqICAgaW5zdHJ1Y3Rpb25zOiBcIi4uLlwiLFxuICogICB0b29sczogKCkgPT4gKHsgc2VuZF9lbWFpbDogZW1haWxUb29sKCkgfSksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1haWxUb29sKG9wdHM6IEVtYWlsVG9vbE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdHMuaWQgPz8gXCJzZW5kX2VtYWlsXCIsXG4gICAgZGVzY3JpcHRpb246IFNFTkRfRU1BSUxfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IGVtYWlsLmVtYWlsTWVzc2FnZVNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IGVtYWlsLmVtYWlsUmVzdWx0U2NoZW1hLFxuICAgIHJlcXVpcmVBcHByb3ZhbDogb3B0cy5yZXF1aXJlQXBwcm92YWwgPz8gdHJ1ZSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlbWFpbC5lbWFpbE1lc3NhZ2VTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgY29uc3QgeyBjb25maWcgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICAgICAgY29uc3QgY3R4ID0gZ2V0RXhlY3V0aW9uQ29udGV4dCgpO1xuICAgICAgY29uc3QgdXNlckVtYWlsID0gXCJpc1VzZXJDb250ZXh0XCIgaW4gY3R4ID8gY3R4LnVzZXJFbWFpbCA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGZyb20gPSByZXNvbHZlU2VuZGVyQWRkcmVzcyhjb25maWcsIHVzZXJFbWFpbCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZW5kRW1haWwobWVzc2FnZSwgZnJvbSwgY29udGV4dD8uYWJvcnRTaWduYWwpO1xuICAgICAgbG9nZ2VyLmluZm8oXCJzZW50XCIsIHtcbiAgICAgICAgdG86IHJlc3VsdC5yZWNpcGllbnQsXG4gICAgICAgIGZyb206IHJlc3VsdC5mcm9tLFxuICAgICAgICAuLi4ocmVzdWx0Lm1lc3NhZ2VJZCA/IHsgbWVzc2FnZUlkOiByZXN1bHQubWVzc2FnZUlkIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
|
package/lib/src/transport.js
CHANGED
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
*
|
|
22
22
|
* @module
|
|
23
23
|
*/
|
|
24
|
-
import { ConfigurationError,
|
|
24
|
+
import { ConfigurationError, ValidationError } from "@databricks/appkit";
|
|
25
|
+
import { pluginExecution } from "@dbx-tools/appkit";
|
|
25
26
|
import { execution, log } from "@dbx-tools/shared-core";
|
|
26
27
|
import nodemailer from "nodemailer";
|
|
27
28
|
import { resolveEmailConfig } from "./config.js";
|
|
@@ -102,23 +103,14 @@ export function resetEmailRuntime() {
|
|
|
102
103
|
*/
|
|
103
104
|
export async function executeWrite(operation, settings, fn, signal) {
|
|
104
105
|
const { execute } = getEmailRuntime();
|
|
105
|
-
return
|
|
106
|
+
return pluginExecution.runPluginExecution({
|
|
107
|
+
plugin: "email",
|
|
108
|
+
logger,
|
|
106
109
|
operation,
|
|
107
110
|
settings,
|
|
108
111
|
execute,
|
|
109
112
|
fn,
|
|
110
113
|
signal,
|
|
111
|
-
canceled: ExecutionError.canceled,
|
|
112
|
-
failed: (failure) => {
|
|
113
|
-
logger.warn("execution-failed", {
|
|
114
|
-
operation: failure.operation,
|
|
115
|
-
status: failure.status,
|
|
116
|
-
error: failure.message,
|
|
117
|
-
});
|
|
118
|
-
return new ExecutionError(`email: ${failure.operation} failed`, {
|
|
119
|
-
context: { operation: failure.operation, status: failure.status },
|
|
120
|
-
});
|
|
121
|
-
},
|
|
122
114
|
});
|
|
123
115
|
}
|
|
124
116
|
/**
|
|
@@ -298,4 +290,4 @@ export async function sendEmail(message, from, signal, options) {
|
|
|
298
290
|
assertSenderAllowed(from, getEmailRuntime().config.allowedSenders);
|
|
299
291
|
return executeWrite("send", EMAIL_SEND_SETTINGS, (executeSignal) => dispatch(message, from, executeSignal, options), signal);
|
|
300
292
|
}
|
|
301
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGVBQWUsR0FFaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXhELE9BQU8sVUFBc0QsTUFBTSxZQUFZLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFvRCxNQUFNLGFBQWEsQ0FBQztBQUNuRyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixvQkFBb0IsRUFDcEIsMkJBQTJCLEVBQzNCLGNBQWMsR0FFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVsRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFvQjdDOzs7O0dBSUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsY0FBYyxFQUEwQixDQUFDO0FBRXpFLElBQUksT0FBaUMsQ0FBQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsU0FBNkI7SUFDM0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0MsT0FBTyxHQUFHO1lBQ1IsTUFBTTtZQUNOLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLEdBQUcsQ0FBQyxNQUFN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dUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sWUFBWSxDQUNqQixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQ2xFLE1BQU0sQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGVtYWlsIHJ1bnRpbWU6IGEgbGF6aWx5LWJ1aWx0LCBwcm9jZXNzLXdpZGUgZGlzcGF0Y2hlciBwbHVzIGl0c1xuICogcmVzb2x2ZWQgY29uZmlnLCBhbmQge0BsaW5rIHNlbmRFbWFpbH0gd2hpY2ggc2VuZHMgb25lXG4gKiB7QGxpbmsgRW1haWxNZXNzYWdlfSB0aHJvdWdoIGl0LiBJbiBTTVRQIG1vZGUgdGhlIHJ1bnRpbWUgaG9sZHMgYVxuICogbWVtb2l6ZWQgbm9kZW1haWxlciB0cmFuc3BvcnQgKHNoYXJlZCBieSB0aGUgcGx1Z2luJ3Mgc2V0dXAgYW5kIHRoZVxuICogYWdlbnQgdG9vbCwgc28gdGhleSByZXVzZSBvbmUgY29ubmVjdGlvbiBwb29sKTsgaW4gZmlsZS9vdXRib3ggbW9kZSBpdFxuICogaG9sZHMgbm8gdHJhbnNwb3J0IGFuZCB7QGxpbmsgc2VuZEVtYWlsfSB3cml0ZXMgSFRNTCB0byBkaXNrIGluc3RlYWQuXG4gKiBUaGUgZmlyc3QgY2FsbGVyIChub3JtYWxseSB0aGUgcGx1Z2luIGF0IHNldHVwKSBwcmltZXMgaXQgd2l0aCB0aGVcbiAqIHBsdWdpbidzIGNvbmZpZzsgbGF0ZXIgY2FsbGVycyByZXVzZSBpdC5cbiAqXG4gKiBUaGUgcnVudGltZSBhbHNvIGNhcnJpZXMgdGhlIHtAbGluayBFbWFpbEV4ZWN1dG9yfSBldmVyeSBvdXRib3VuZCBzZW5kIHJ1bnNcbiAqIHRocm91Z2guIFRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93biBgZXhlY3V0ZSgpYCB0aGVyZSBhdCBzZXR1cCwgd2hpY2ggaXNcbiAqIGhvdyB0aGUgTWFzdHJhIHRvb2wgLSBhIHBsYWluIGZ1bmN0aW9uIHdpdGggbm8gcGx1Z2luIGluc3RhbmNlIGluIHNjb3BlIC1cbiAqIHN0aWxsIGdldHMgQXBwS2l0J3MgcmV0cnkgLyB0aW1lb3V0IC8gdGVsZW1ldHJ5IGNoYWluLiBXaXRob3V0IGEgcmVnaXN0ZXJlZFxuICogcGx1Z2luIChhIGRpcmVjdCBjYWxsIGZyb20gYSBzY3JpcHQgb3IgYSB0ZXN0KSB0aGUgc2VuZCBzdGlsbCBydW5zLCBqdXN0XG4gKiB3aXRob3V0IGludGVyY2VwdG9ycy5cbiAqXG4gKiBFdmVyeSBlbnRyeSBwb2ludCB0YWtlcyBhbiBvcHRpb25hbCB7QGxpbmsgQWJvcnRTaWduYWx9IHNvIHRoZSBwbHVnaW4nc1xuICogYGV4ZWN1dGUoKWAgdGltZW91dCBhbmQgYSBjbGllbnQgZGlzY29ubmVjdCBib3RoIHN0b3AgdGhlIGNhbGxlciB3YWl0aW5nXG4gKiBvbiBTTVRQLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQge1xuICBDb25maWd1cmF0aW9uRXJyb3IsXG4gIEV4ZWN1dGlvbkVycm9yLFxuICBWYWxpZGF0aW9uRXJyb3IsXG4gIHR5cGUgRXhlY3V0aW9uUmVzdWx0LFxufSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBleGVjdXRpb24sIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEVtYWlsQXR0YWNobWVudCwgRW1haWxNZXNzYWdlLCBFbWFpbFJlc3VsdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1lbWFpbFwiO1xuaW1wb3J0IG5vZGVtYWlsZXIsIHsgdHlwZSBTZW5kTWFpbE9wdGlvbnMsIHR5cGUgVHJhbnNwb3J0ZXIgfSBmcm9tIFwibm9kZW1haWxlclwiO1xuaW1wb3J0IHsgcmVzb2x2ZUVtYWlsQ29uZmlnLCB0eXBlIEVtYWlsUGx1Z2luQ29uZmlnLCB0eXBlIFJlc29sdmVkRW1haWxDb25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7XG4gIEVNQUlMX1NFTkRfU0VUVElOR1MsXG4gIE1BWF9BVFRBQ0hNRU5UX0JZVEVTLFxuICBNQVhfQVRUQUNITUVOVF9DT1VOVCxcbiAgTUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTLFxuICBNQVhfQk9EWV9DSEFSUyxcbiAgdHlwZSBFbWFpbEV4ZWN1dGlvblNldHRpbmdzLFxufSBmcm9tIFwiLi9kZWZhdWx0cy50c1wiO1xuaW1wb3J0IHsgcmVuZGVyRW1haWwgfSBmcm9tIFwiLi9lbWFpbC1odG1sLnRzXCI7XG5pbXBvcnQgeyB3cml0ZU91dGJveEVtYWlsIH0gZnJvbSBcIi4vb3V0Ym94LnRzXCI7XG5pbXBvcnQgeyBhc3NlcnRTZW5kZXJBbGxvd2VkIH0gZnJvbSBcIi4vc2VuZGVyLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJlbWFpbC90cmFuc3BvcnRcIik7XG5cbi8qKlxuICogUnVucyBvbmUgb3V0Ym91bmQgc2VuZCB0aHJvdWdoIEFwcEtpdCdzIGludGVyY2VwdG9yIGNoYWluLiBNYXRjaGVzXG4gKiBgUGx1Z2luLmV4ZWN1dGUoKWAsIHdoaWNoIG5ldmVyIHRocm93czogYSBmYWlsdXJlIGNvbWVzIGJhY2sgYXNcbiAqIGB7IG9rOiBmYWxzZSB9YC5cbiAqL1xuZXhwb3J0IHR5cGUgRW1haWxFeGVjdXRvciA9IDxUPihcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2V0dGluZ3M6IEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MsXG4pID0+IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0PFQ+PjtcblxuLyoqIFRoZSBzaGFyZWQgZGlzcGF0Y2hlciwgaXRzIHJlc29sdmVkIGNvbmZpZywgYW5kIHRoZSBzZW5kIGV4ZWN1dG9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWFpbFJ1bnRpbWUge1xuICAvKiogUHJlc2VudCBvbmx5IGluIFNNVFAgbW9kZS4gKi9cbiAgdHJhbnNwb3J0ZXI/OiBUcmFuc3BvcnRlcjtcbiAgY29uZmlnOiBSZXNvbHZlZEVtYWlsQ29uZmlnO1xuICBleGVjdXRlOiBFbWFpbEV4ZWN1dG9yO1xufVxuXG4vKipcbiAqIEV4ZWN1dG9yIHVzZWQgdW50aWwgKG9yIHVubGVzcykgdGhlIHBsdWdpbiBpbnN0YWxscyBpdHMgb3duOiBydW4gdGhlIHNlbmRcbiAqIGRpcmVjdGx5LCBtYXBwaW5nIGEgdGhyb3cgb250byB0aGUgc2FtZSB7QGxpbmsgRXhlY3V0aW9uUmVzdWx0fSBzaGFwZSBzb1xuICogY2FsbCBzaXRlcyBicmFuY2ggb24gYG9rYCBlaXRoZXIgd2F5LlxuICovXG5jb25zdCBkaXJlY3RFeGVjdXRlID0gZXhlY3V0aW9uLmRpcmVjdEV4ZWN1dG9yPEVtYWlsRXhlY3V0aW9uU2V0dGluZ3M+KCk7XG5cbmxldCBydW50aW1lOiBFbWFpbFJ1bnRpbWUgfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzaGFyZWQgcnVudGltZSwgYnVpbGRpbmcgaXQgb24gZmlyc3QgdXNlIGJ5IHJlc29sdmluZ1xuICogYG92ZXJyaWRlc2Agb3ZlciB0aGUgZW52aXJvbm1lbnQgKGBTTVRQX0hPU1RgLCBgU01UUF9QT1JUYCxcbiAqIGBTTVRQX1NFQ1VSRWAsIGBTTVRQX1VTRVJgLCBgU01UUF9QQVNTV09SRGAsIGBFTUFJTF9ET01BSU5gLFxuICogYEVNQUlMX0ZST01gLCBgRU1BSUxfQUxMT1dFRF9TRU5ERVJTYCwgYEVNQUlMX1NFTkRFUl9QT0xJQ1lgLFxuICogYEVNQUlMX09VVEJPWF9NT0RFYCwgYEVNQUlMX09VVEJPWF9ESVJgKSB0aHJvdWdoXG4gKiB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfS4gV2l0aCBTTVRQIGNyZWRlbnRpYWxzIHByZXNlbnQgaXQgaG9sZHMgYVxuICogbm9kZW1haWxlciB0cmFuc3BvcnQgYW5kIGl0cyBjb25uZWN0aW9uIHBvb2w7IG90aGVyd2lzZSBpdCBpcyBpblxuICogZmlsZS9vdXRib3ggbW9kZSBhbmQgaG9sZHMgbm9uZS5cbiAqXG4gKiBgb3ZlcnJpZGVzYCBpcyByZWFkIG9ubHkgb24gdGhlIGNhbGwgdGhhdCBidWlsZHMgdGhlIHJ1bnRpbWUsIHNvIHByaW1lIGl0XG4gKiBmcm9tIHRoZSBwbHVnaW4ncyBjb25maWcgYXQgc2V0dXA7IGxhdGVyIGNhbGxlcnMgKHRoZSB0b29sJ3MgYGV4ZWN1dGVgLFxuICogdGhlIHNlbmRlci1vcHRpb25zIHJvdXRlKSBwYXNzIG5vdGhpbmcgYW5kIGdldCB0aGUgc2FtZSBpbnN0YW5jZS4gVGhyb3dzXG4gKiB3aGF0ZXZlciB7QGxpbmsgcmVzb2x2ZUVtYWlsQ29uZmlnfSB0aHJvd3MgZm9yIGFuIHVudXNhYmxlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWFpbFJ1bnRpbWUob3ZlcnJpZGVzPzogRW1haWxQbHVnaW5Db25maWcpOiBFbWFpbFJ1bnRpbWUge1xuICBpZiAoIXJ1bnRpbWUpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXNvbHZlRW1haWxDb25maWcob3ZlcnJpZGVzKTtcbiAgICBydW50aW1lID0ge1xuICAgICAgY29uZmlnLFxuICAgICAgZXhlY3V0ZTogZGlyZWN0RXhlY3V0ZSxcbiAgICAgIC4uLihjb25maWcubW9kZSA9PT0gXCJzbXRwXCJcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0cmFuc3BvcnRlcjogbm9kZW1haWxlci5jcmVhdGVUcmFuc3BvcnQoe1xuICAgICAgICAgICAgICBob3N0OiBjb25maWcuaG9zdCxcbiAgICAgICAgICAgICAgcG9ydDogY29uZmlnLnBvcnQsXG4gICAgICAgICAgICAgIHNlY3VyZTogY29uZmlnLnNlY3VyZSxcbiAgICAgICAgICAgICAgYXV0aDogY29uZmlnLmF1dGgsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge30pLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJ1bnRpbWU7XG59XG5cbi8qKlxuICogSW5zdGFsbCB0aGUgZXhlY3V0b3Igb3V0Ym91bmQgc2VuZHMgcnVuIHRocm91Z2guIFRoZSBwbHVnaW4gY2FsbHMgdGhpcyBhdFxuICogc2V0dXAgd2l0aCBpdHMgb3duIGBleGVjdXRlKClgOyBhIHNlY29uZCBjYWxsIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBvbmUsIHNvXG4gKiBhIHJlLXJlZ2lzdGVyZWQgcGx1Z2luIGRvZXMgbm90IGxlYXZlIHRoZSB0b29scyBib3VuZCB0byBhIGRlYWQgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFbWFpbEV4ZWN1dG9yKGV4ZWN1dGU6IEVtYWlsRXhlY3V0b3IpOiB2b2lkIHtcbiAgZ2V0RW1haWxSdW50aW1lKCkuZXhlY3V0ZSA9IGV4ZWN1dGU7XG59XG5cbi8qKlxuICogRHJvcCB0aGUgbWVtb2l6ZWQgcnVudGltZSwgY2xvc2luZyB0aGUgU01UUCBjb25uZWN0aW9uIHBvb2wsIHNvIHRoZSBuZXh0XG4gKiB7QGxpbmsgZ2V0RW1haWxSdW50aW1lfSByZWJ1aWxkcyBpdCBmcm9tIGZyZXNoIGNvbmZpZyBhbmQgc3RvcHMgY2FsbGluZ1xuICogdGhyb3VnaCBhIHRvcm4tZG93biBwbHVnaW4ncyBgZXhlY3V0ZSgpYC4gSWRlbXBvdGVudCwgYW5kIHRoZSBwbHVnaW4nc1xuICogYHNodXRkb3duKClgIGhvb2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEVtYWlsUnVudGltZSgpOiB2b2lkIHtcbiAgcnVudGltZT8udHJhbnNwb3J0ZXI/LmNsb3NlKCk7XG4gIHJ1bnRpbWUgPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUnVuIG9uZSBub24taWRlbXBvdGVudCB3cml0ZSB0aHJvdWdoIHRoZSBzaGFyZWQgZXhlY3V0b3IgYW5kIHVud3JhcCBpdC5cbiAqXG4gKiBgZXhlY3V0ZSgpYCBuZXZlciB0aHJvd3MsIHNvIGEgZmFpbGVkIHNlbmQgYXJyaXZlcyBhcyBgeyBvazogZmFsc2UgfWAgd2l0aCBhXG4gKiBzdGF0dXMgdGhlIGludGVyY2VwdG9ycyBhbHJlYWR5IHNhbml0aXplZDsgaXQgaXMgbG9nZ2VkIGhlcmUgYW5kIHJlLXJhaXNlZFxuICogYXMgYSBzdGFibGUge0BsaW5rIEV4ZWN1dGlvbkVycm9yfSBzbyBhbiB1cHN0cmVhbSBtZXNzYWdlIG5ldmVyIGJlY29tZXMgdGhlXG4gKiBjYWxsZXIncyBlcnJvciB0ZXh0LiBgc2lnbmFsYCBpcyB0aGUgY2FsbGVyJ3Mgb3duIGNhbmNlbGxhdGlvbiAoYW4gYWdlbnRcbiAqIHJ1biwgYSByZXF1ZXN0IHRlYXJkb3duKTsgaXQgaXMgbWVyZ2VkIHdpdGggdGhlIHNpZ25hbCB0aGUgdGltZW91dFxuICogaW50ZXJjZXB0b3Igc3VwcGxpZXMgc28gZWl0aGVyIG9uZSB1bndpbmRzIHRoZSBJL08uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlV3JpdGU8VD4oXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBzZXR0aW5nczogRW1haWxFeGVjdXRpb25TZXR0aW5ncyxcbiAgZm46IChzaWduYWw/OiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzZTxUPixcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgeyBleGVjdXRlIH0gPSBnZXRFbWFpbFJ1bnRpbWUoKTtcbiAgcmV0dXJuIGV4ZWN1dGlvbi5ydW4oe1xuICAgIG9wZXJhdGlvbixcbiAgICBzZXR0aW5ncyxcbiAgICBleGVjdXRlLFxuICAgIGZuLFxuICAgIHNpZ25hbCxcbiAgICBjYW5jZWxlZDogRXhlY3V0aW9uRXJyb3IuY2FuY2VsZWQsXG4gICAgZmFpbGVkOiAoZmFpbHVyZSkgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oXCJleGVjdXRpb24tZmFpbGVkXCIsIHtcbiAgICAgICAgb3BlcmF0aW9uOiBmYWlsdXJlLm9wZXJhdGlvbixcbiAgICAgICAgc3RhdHVzOiBmYWlsdXJlLnN0YXR1cyxcbiAgICAgICAgZXJyb3I6IGZhaWx1cmUubWVzc2FnZSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBFeGVjdXRpb25FcnJvcihgZW1haWw6ICR7ZmFpbHVyZS5vcGVyYXRpb259IGZhaWxlZGAsIHtcbiAgICAgICAgY29udGV4dDogeyBvcGVyYXRpb246IGZhaWx1cmUub3BlcmF0aW9uLCBzdGF0dXM6IGZhaWx1cmUuc3RhdHVzIH0sXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBPcGVuIGFuZCB0ZWFyIGRvd24gb25lIFNNVFAgY29ubmVjdGlvbiB0byBwcm92ZSB0aGUgaG9zdCwgcG9ydCwgYW5kXG4gKiBjcmVkZW50aWFscyB3b3JrLiBDYWxsZWQgYXQgcGx1Z2luIHNldHVwIHNvIGEgYmFkIHJlbGF5IHNob3dzIHVwIGluIHRoZVxuICogYm9vdCBsb2dzIHJhdGhlciB0aGFuIG9uIHRoZSBmaXJzdCBhcHByb3ZlZCBzZW5kLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdmVyaWZ5RW1haWxUcmFuc3BvcnQoXG4gIHRyYW5zcG9ydGVyOiBUcmFuc3BvcnRlciB8IHVuZGVmaW5lZCxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCF0cmFuc3BvcnRlcikge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgIFwiU01UUFwiLFxuICAgICAgXCJUaGUgcnVudGltZSByZXNvbHZlZCB0byBvdXRib3ggbW9kZSwgc28gdGhlcmUgaXMgbm8gdHJhbnNwb3J0IHRvIHZlcmlmeS5cIixcbiAgICApO1xuICB9XG4gIGF3YWl0IGFib3J0YWJsZSh0cmFuc3BvcnRlci52ZXJpZnkoKSwgc2lnbmFsKTtcbn1cblxuLyoqXG4gKiBTdG9wIGF3YWl0aW5nIGBwcm9taXNlYCBhcyBzb29uIGFzIGBzaWduYWxgIGFib3J0cy4gbm9kZW1haWxlciBleHBvc2VzIG5vXG4gKiBjYW5jZWxsYXRpb24gaG9vaywgc28gdGhlIFNNVFAgY29udmVyc2F0aW9uIGl0c2VsZiBmaW5pc2hlcyBvbiBpdHMgb3duXG4gKiBjb25uZWN0aW9uOyB3aGF0IHVud2luZHMgaXMgdGhlIGNhbGxlciBhbmQgZXZlcnl0aGluZyBkb3duc3RyZWFtIG9mIGl0LlxuICovXG5mdW5jdGlvbiBhYm9ydGFibGU8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgc2lnbmFsOiBBYm9ydFNpZ25hbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8VD4ge1xuICBpZiAoIXNpZ25hbCkgcmV0dXJuIHByb21pc2U7XG4gIHNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAvLyBUaGUgbGlzdGVuZXIgaXMgZGV0YWNoZWQgb25jZSB0aGUgcmFjZSBzZXR0bGVzIHNvIGEgbG9uZy1saXZlZCBydW4gc2lnbmFsXG4gIC8vIGRvZXMgbm90IGFjY3VtdWxhdGUgb25lIHBlciBzZW5kLlxuICBjb25zdCBsaXN0ZW5lciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgYWJvcnRlZCA9IG5ldyBQcm9taXNlPG5ldmVyPigoXywgcmVqZWN0KSA9PiB7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCAoKSA9PiByZWplY3Qoc2lnbmFsLnJlYXNvbiksIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBzaWduYWw6IGxpc3RlbmVyLnNpZ25hbCxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3Byb21pc2UsIGFib3J0ZWRdKS5maW5hbGx5KCgpID0+IGxpc3RlbmVyLmFib3J0KCkpO1xufVxuXG4vKiogVGhlIGNvbW1hLWpvaW5lZCByZWNpcGllbnQgc3RyaW5nIGVjaG9lZCBiYWNrIGluIHtAbGluayBFbWFpbFJlc3VsdH0uICovXG5mdW5jdGlvbiByZWNpcGllbnRFY2hvKHRvOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiB0by5qb2luKFwiLCBcIik7XG59XG5cbi8qKlxuICogTm9kZSBidWZmZXIgZW5jb2RpbmdzIGEgd2lyZSBhdHRhY2htZW50IG1heSBuYW1lIGZvciBpdHMgaW5saW5lIGBjb250ZW50YC5cbiAqIEFueXRoaW5nIGVsc2UgaXMgbWVhc3VyZWQgYXMgVVRGLTgsIHdoaWNoIG92ZXItY291bnRzIHJhdGhlciB0aGFuIGxldHRpbmdcbiAqIGFuIHVucmVjb2duaXplZCBlbmNvZGluZyBzbGlwIHBhc3QgdGhlIHNpemUgY2FwLlxuICovXG5jb25zdCBDT05URU5UX0VOQ09ESU5HUzogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICBcImFzY2lpXCIsXG4gIFwiYmFzZTY0XCIsXG4gIFwiYmFzZTY0dXJsXCIsXG4gIFwiYmluYXJ5XCIsXG4gIFwiaGV4XCIsXG4gIFwibGF0aW4xXCIsXG4gIFwidWNzMlwiLFxuICBcInVjcy0yXCIsXG4gIFwidXRmOFwiLFxuICBcInV0Zi04XCIsXG4gIFwidXRmMTZsZVwiLFxuICBcInV0Zi0xNmxlXCIsXG5dKTtcblxuLyoqIERlY29kZWQgYnl0ZSBzaXplIG9mIG9uZSBhdHRhY2htZW50J3MgaW5saW5lIGNvbnRlbnQuICovXG5mdW5jdGlvbiBhdHRhY2htZW50Qnl0ZXMoYXR0YWNobWVudDogRW1haWxBdHRhY2htZW50KTogbnVtYmVyIHtcbiAgY29uc3QgeyBjb250ZW50LCBlbmNvZGluZyB9ID0gYXR0YWNobWVudDtcbiAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIGNvbnN0IGRlY2xhcmVkID0gZW5jb2Rpbmc/LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHJlc29sdmVkID1cbiAgICBkZWNsYXJlZCAmJiBDT05URU5UX0VOQ09ESU5HUy5oYXMoZGVjbGFyZWQpID8gKGRlY2xhcmVkIGFzIEJ1ZmZlckVuY29kaW5nKSA6IFwidXRmOFwiO1xuICByZXR1cm4gQnVmZmVyLmJ5dGVMZW5ndGgoY29udGVudCwgcmVzb2x2ZWQpO1xufVxuXG4vKipcbiAqIFJlamVjdCBhIG1lc3NhZ2Ugd2hvc2UgYm9keSBvciBhdHRhY2htZW50cyBleGNlZWQgdGhlIHBsdWdpbidzIGNhcHMuIFRoZVxuICogYm9keSBhbmQgYXR0YWNobWVudCBsaXN0IGFycml2ZSBmcm9tIGEgbW9kZWwsIHNvIHRoZXkgYXJlIHVuYm91bmRlZCB1bnRpbFxuICogc29tZXRoaW5nIGJvdW5kcyB0aGVtOyBtb3N0IFNNVFAgcmVsYXlzIGFsc28gcmVqZWN0IGFuIG92ZXJzaXplZCBtZXNzYWdlXG4gKiBvbmx5IGFmdGVyIHRoZSB3aG9sZSBwYXlsb2FkIGhhcyBiZWVuIHVwbG9hZGVkLlxuICovXG5mdW5jdGlvbiBhc3NlcnRNZXNzYWdlV2l0aGluQ2FwcyhtZXNzYWdlOiBFbWFpbE1lc3NhZ2UpOiB2b2lkIHtcbiAgaWYgKG1lc3NhZ2UuYm9keS5sZW5ndGggPiBNQVhfQk9EWV9DSEFSUykge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImJvZHlcIixcbiAgICAgIG1lc3NhZ2UuYm9keS5sZW5ndGgsXG4gICAgICBgYXQgbW9zdCAke01BWF9CT0RZX0NIQVJTfSBjaGFyYWN0ZXJzYCxcbiAgICApO1xuICB9XG4gIGNvbnN0IGF0dGFjaG1lbnRzID0gbWVzc2FnZS5hdHRhY2htZW50cyA/PyBbXTtcbiAgaWYgKGF0dGFjaG1lbnRzLmxlbmd0aCA+IE1BWF9BVFRBQ0hNRU5UX0NPVU5UKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFwiYXR0YWNobWVudHNcIixcbiAgICAgIGF0dGFjaG1lbnRzLmxlbmd0aCxcbiAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRfQ09VTlR9IGZpbGVzYCxcbiAgICApO1xuICB9XG4gIGxldCB0b3RhbCA9IDA7XG4gIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBhdHRhY2htZW50cykge1xuICAgIGNvbnN0IGJ5dGVzID0gYXR0YWNobWVudEJ5dGVzKGF0dGFjaG1lbnQpO1xuICAgIGlmIChieXRlcyA+IE1BWF9BVFRBQ0hNRU5UX0JZVEVTKSB7XG4gICAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgICBcImF0dGFjaG1lbnRzW10uY29udGVudFwiLFxuICAgICAgICBieXRlcyxcbiAgICAgICAgYGF0IG1vc3QgJHtNQVhfQVRUQUNITUVOVF9CWVRFU30gYnl0ZXMgcGVyIGZpbGVgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdG90YWwgKz0gYnl0ZXM7XG4gIH1cbiAgaWYgKHRvdGFsID4gTUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFwiYXR0YWNobWVudHNcIixcbiAgICAgIHRvdGFsLFxuICAgICAgYGF0IG1vc3QgJHtNQVhfQVRUQUNITUVOVFNfVE9UQUxfQllURVN9IGJ5dGVzIGFjcm9zcyBhbGwgZmlsZXNgLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYXAgdGhlIHdpcmUtZm9ybWF0IHtAbGluayBFbWFpbEF0dGFjaG1lbnR9cyBvbnRvIG5vZGVtYWlsZXInc1xuICogYXR0YWNobWVudCBzaGFwZSwgZHJvcHBpbmcgdW5zZXQgb3B0aW9uYWwga2V5cyBzbyBub2RlbWFpbGVyIGFwcGxpZXNcbiAqIGl0cyBvd24gZGVmYXVsdHMgKHV0Zi04IGVuY29kaW5nLCBmaWxlbmFtZS1pbmZlcnJlZCBjb250ZW50IHR5cGUpLiBUaGVcbiAqIHdpcmUgZmllbGRzIGFyZSBhIGRlbGliZXJhdGUgc3Vic2V0IG9mIG5vZGVtYWlsZXIncywgc28gdGhpcyBpcyBhXG4gKiBzdHJhaWdodCBzdHJ1Y3R1cmFsIHBhc3MtdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gdG9NYWlsQXR0YWNobWVudHMoXG4gIGF0dGFjaG1lbnRzOiBFbWFpbEF0dGFjaG1lbnRbXSB8IHVuZGVmaW5lZCxcbik6IFNlbmRNYWlsT3B0aW9uc1tcImF0dGFjaG1lbnRzXCJdIHtcbiAgaWYgKCFhdHRhY2htZW50cyB8fCBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBhdHRhY2htZW50cy5tYXAoKGF0dCkgPT4gKHtcbiAgICBmaWxlbmFtZTogYXR0LmZpbGVuYW1lLFxuICAgIC4uLihhdHQuY29udGVudCAhPT0gdW5kZWZpbmVkID8geyBjb250ZW50OiBhdHQuY29udGVudCB9IDoge30pLFxuICAgIC4uLihhdHQuZW5jb2RpbmcgIT09IHVuZGVmaW5lZCA/IHsgZW5jb2Rpbmc6IGF0dC5lbmNvZGluZyB9IDoge30pLFxuICAgIC4uLihhdHQuY29udGVudFR5cGUgIT09IHVuZGVmaW5lZCA/IHsgY29udGVudFR5cGU6IGF0dC5jb250ZW50VHlwZSB9IDoge30pLFxuICB9KSk7XG59XG5cbi8qKlxuICogSGFuZCBvbmUgYWxyZWFkeS12YWxpZGF0ZWQgbWVzc2FnZSB0byBTTVRQLCBvciB3cml0ZSBpdCB0byB0aGUgb3V0Ym94IHdoZW5cbiAqIG5vIGNyZWRlbnRpYWxzIGFyZSBjb25maWd1cmVkLiBUaGUgaGFsZiBvZiBhIHNlbmQgdGhhdCBwZXJmb3JtcyBJL08sIHNvIGl0XG4gKiBpcyB3aGF0IHJ1bnMgaW5zaWRlIHRoZSBpbnRlcmNlcHRvciBjaGFpbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGlzcGF0Y2goXG4gIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgZnJvbTogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgb3B0aW9ucz86IFNlbmRFbWFpbE9wdGlvbnMsXG4pOiBQcm9taXNlPEVtYWlsUmVzdWx0PiB7XG4gIGNvbnN0IHsgY29uZmlnLCB0cmFuc3BvcnRlciB9ID0gZ2V0RW1haWxSdW50aW1lKCk7XG4gIGNvbnN0IHJlY2lwaWVudCA9IHJlY2lwaWVudEVjaG8obWVzc2FnZS50byk7XG4gIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICBpZiAoY29uZmlnLm1vZGUgPT09IFwiZmlsZVwiKSB7XG4gICAgY29uc3QgcGF0aCA9IGF3YWl0IHdyaXRlT3V0Ym94RW1haWwobWVzc2FnZSwgZnJvbSwgY29uZmlnLm91dERpciwgY29uZmlnLmJyYW5kLCB7XG4gICAgICAuLi4ob3B0aW9ucz8uaGVhZGluZyAhPT0gdW5kZWZpbmVkID8geyBoZWFkaW5nOiBvcHRpb25zLmhlYWRpbmcgfSA6IHt9KSxcbiAgICAgIC4uLihvcHRpb25zPy5wcmV2aWV3ICE9PSB1bmRlZmluZWQgPyB7IHByZXZpZXc6IG9wdGlvbnMucHJldmlldyB9IDoge30pLFxuICAgIH0pO1xuICAgIHJldHVybiB7IHNlbnQ6IHRydWUsIHJlY2lwaWVudCwgZnJvbSwgbWVzc2FnZUlkOiBwYXRoIH07XG4gIH1cblxuICBpZiAoIXRyYW5zcG9ydGVyKSB7XG4gICAgdGhyb3cgQ29uZmlndXJhdGlvbkVycm9yLmludmFsaWRDb25uZWN0aW9uKFxuICAgICAgXCJTTVRQXCIsXG4gICAgICBcIk5vIHRyYW5zcG9ydCB3YXMgYnVpbHQgZm9yIHRoZSByZXNvbHZlZCBjb25maWd1cmF0aW9uLlwiLFxuICAgICk7XG4gIH1cbiAgY29uc3QgYXR0YWNobWVudHMgPSB0b01haWxBdHRhY2htZW50cyhtZXNzYWdlLmF0dGFjaG1lbnRzKTtcbiAgY29uc3QgcmVuZGVyZWQgPSBhd2FpdCByZW5kZXJFbWFpbCh7XG4gICAgc3ViamVjdDogbWVzc2FnZS5zdWJqZWN0LFxuICAgIGJvZHk6IG1lc3NhZ2UuYm9keSxcbiAgICBicmFuZDogY29uZmlnLmJyYW5kLFxuICAgIC4uLihvcHRpb25zPy5oZWFkaW5nICE9PSB1bmRlZmluZWQgPyB7IGhlYWRpbmc6IG9wdGlvbnMuaGVhZGluZyB9IDoge30pLFxuICAgIC4uLihvcHRpb25zPy5wcmV2aWV3ICE9PSB1bmRlZmluZWQgPyB7IHByZXZpZXc6IG9wdGlvbnMucHJldmlldyB9IDoge30pLFxuICB9KTtcbiAgY29uc3QgaW5mbyA9IGF3YWl0IGFib3J0YWJsZShcbiAgICB0cmFuc3BvcnRlci5zZW5kTWFpbCh7XG4gICAgICBmcm9tLFxuICAgICAgdG86IG1lc3NhZ2UudG8sXG4gICAgICBzdWJqZWN0OiBtZXNzYWdlLnN1YmplY3QsXG4gICAgICAvLyBBIGNhbGxlci1zdXBwbGllZCBwbGFpbi10ZXh0IHBhcnQgV0lOUyBvdmVyIHRoZSBnZW5lcmF0ZWQgb25lLiBCb3RoIHBhcnRzXG4gICAgICAvLyBzdGlsbCBjb21lIGZyb20gdGhlIHNhbWUgY29udGVudDsgdGhpcyBvbmx5IGxldHMgYSBjYWxsZXIgY29udHJvbCB0aGVcbiAgICAgIC8vIHRleHQgYWx0ZXJuYXRpdmUncyBleGFjdCBsaW5lIGxheW91dCwgd2hpY2ggc29tZSBjbGllbnRzIHBhcnNlIChzZWVcbiAgICAgIC8vIGBTZW5kRW1haWxPcHRpb25zLnRleHRgKS5cbiAgICAgIHRleHQ6IG9wdGlvbnM/LnRleHQgPz8gcmVuZGVyZWQudGV4dCxcbiAgICAgIGh0bWw6IHJlbmRlcmVkLmh0bWwsXG4gICAgICAuLi4obWVzc2FnZS5jYyAmJiBtZXNzYWdlLmNjLmxlbmd0aCA+IDAgPyB7IGNjOiBtZXNzYWdlLmNjIH0gOiB7fSksXG4gICAgICAuLi4obWVzc2FnZS5iY2MgJiYgbWVzc2FnZS5iY2MubGVuZ3RoID4gMCA/IHsgYmNjOiBtZXNzYWdlLmJjYyB9IDoge30pLFxuICAgICAgLi4uKGF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgIH0pLFxuICAgIHNpZ25hbCxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICBzZW50OiB0cnVlLFxuICAgIHJlY2lwaWVudCxcbiAgICBmcm9tLFxuICAgIC4uLihpbmZvLm1lc3NhZ2VJZCA/IHsgbWVzc2FnZUlkOiBpbmZvLm1lc3NhZ2VJZCB9IDoge30pLFxuICB9O1xufVxuXG4vKipcbiAqIERlbGl2ZXJ5LXRpbWUgb3B0aW9ucyB0aGF0IGFyZSBOT1QgcGFydCBvZiB0aGUgbWVzc2FnZSBhIG1vZGVsIGNvbXBvc2VzLlxuICpcbiAqIERlbGliZXJhdGVseSBzZXBhcmF0ZSBmcm9tIHtAbGluayBFbWFpbE1lc3NhZ2V9OiB0aGF0IHNjaGVtYSBpcyB0aGUgYWdlbnRcbiAqIHRvb2wncyBpbnB1dCwgc28gYW55dGhpbmcgYWRkZWQgdG8gaXQgYmVjb21lcyBhIGZpZWxkIGEgbW9kZWwgY2FuIHNldC4gVGhlc2VcbiAqIGRlc2NyaWJlIGhvdyBhIG1lc3NhZ2UgaXMgREVMSVZFUkVELCBzbyB0aGV5IGFyZSB0aGUgY2FsbGVyJ3MgdG8gc3VwcGx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbmRFbWFpbE9wdGlvbnMge1xuICAvKipcbiAgICogVmlzaWJsZSBoZWFkaW5nIGluc2lkZSB0aGUgYnJhbmRlZCBIVE1MIGNhcmQuIERlZmF1bHRzIHRvIHRoZSBtZXNzYWdlXG4gICAqIHN1YmplY3QuIFVzZSB0aGlzIHdoZW4gdGhlIHRyYW5zcG9ydCBzdWJqZWN0IGNhcnJpZXMgbm90aWZpY2F0aW9uLXNwZWNpZmljXG4gICAqIGRldGFpbHMgdGhhdCB3b3VsZCBiZSBub2lzeSBpZiByZXBlYXRlZCBpbnNpZGUgdGhlIG9wZW5lZCBlbWFpbC5cbiAgICovXG4gIGhlYWRpbmc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBleHBsaWNpdCBgdGV4dC9wbGFpbmAgYWx0ZXJuYXRpdmUsIHJlcGxhY2luZyB0aGUgb25lIGdlbmVyYXRlZCBmcm9tIHRoZVxuICAgKiBSZWFjdCBFbWFpbCB0cmVlLiBUaGUgSFRNTCBwYXJ0IGlzIHVudG91Y2hlZCwgc28gdGhlIHJlY2lwaWVudCBzdGlsbCBnZXRzIHRoZVxuICAgKiBmdWxsIGJyYW5kZWQgdGVtcGxhdGUuXG4gICAqXG4gICAqIFRoaXMgZXhpc3RzIGJlY2F1c2UgdGhlIGdlbmVyYXRlZCB0ZXh0IHBhcnQgaXMgYSBSRU5ERVJJTkcgb2YgdGhlIEhUTUw6IGl0XG4gICAqIGNhcnJpZXMgdGhlIGJyYW5kIGhlYWRlciBhbmQgZm9vdGVyLCBhbmQgaXQgdHVybnMgQ1NTIG1hcmdpbiBpbnRvIGJsYW5rXG4gICAqIGxpbmVzLiBUaGF0IGlzIGZpbmUgZm9yIHByb3NlIGFuZCB3cm9uZyBmb3IgY29udGVudCBhIG1hY2hpbmUgcGFyc2VzLiBBXG4gICAqIG9uZS10aW1lLWNvZGUgZW1haWwgaXMgdGhlIGNhc2UgaW4gcG9pbnQgLSBjbGllbnRzIGxvb2sgZm9yIHRoZSBjb2RlIG9uIHRoZVxuICAgKiBsaW5lIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBwcm9tcHQsIGFuZCBhIHN0eWxlZCBgPGgyPmAgY29kZSBsYW5kcyB0d28gYmxhbmtcbiAgICogbGluZXMgYmVsb3cgaXQsIHNvIGF1dG9maWxsIHN0b3BzIGJlaW5nIG9mZmVyZWQgZXZlbiB0aG91Z2ggdGhlIEhUTUwgbG9va3NcbiAgICogcGVyZmVjdC4gU3VwcGx5aW5nIHRoZSB0ZXh0IHBhcnQgZGlyZWN0bHkga2VlcHMgdGhlIG5pY2UgdGVtcGxhdGUgQU5EIHRoZVxuICAgKiBsYXlvdXQgdGhvc2UgY2xpZW50cyBleHBlY3QuXG4gICAqXG4gICAqIEtlZXAgdGhlIHNhbWUgaW5mb3JtYXRpb24gaW4gYm90aCBwYXJ0czsgYSB0ZXh0IGFsdGVybmF0aXZlIHRoYXQgZGlzYWdyZWVzXG4gICAqIHdpdGggdGhlIEhUTUwgcmVhZHMgYXMgcGhpc2hpbmcgdG8gc3BhbSBmaWx0ZXJzLlxuICAgKi9cbiAgdGV4dD86IHN0cmluZztcbiAgLyoqXG4gICAqIFByZWhlYWRlciB0ZXh0IGZvciB0aGUgSFRNTCBwYXJ0IC0gdGhlIHNuaXBwZXQgc2hvd24gYmVzaWRlIHRoZSBzdWJqZWN0IGluIGFuXG4gICAqIGluYm94IGxpc3QsIGFuZCB0aGUgYm9keSBvZiB0aGUgUFVTSCBOT1RJRklDQVRJT04gYSBtb2JpbGUgbWFpbCBhcHAgcG9zdHMuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzdWJqZWN0LlxuICAgKlxuICAgKiBEZWxpdmVyeS10aW1lIHJhdGhlciB0aGFuIHBhcnQgb2Yge0BsaW5rIEVtYWlsTWVzc2FnZX0gZm9yIHRoZSBzYW1lIHJlYXNvbiBhc1xuICAgKiBgdGV4dGA6IGl0IGlzIHByZXNlbnRhdGlvbiB0aGUgc2VuZGluZyBDT0RFIGNob29zZXMsIG5vdCBjb250ZW50IGEgbW9kZWxcbiAgICogY29tcG9zZXMuIFRoZSBvbmUtdGltZS1jb2RlIHBhdGggc2V0cyBpdCBzbyB0aGUgY29kZSBpdHNlbGYgcmlkZXMgaW4gdGhlXG4gICAqIG5vdGlmaWNhdGlvbiwgd2hpY2ggaXMgdGhlIG9ubHkgdGV4dCBpT1MgYXV0b2ZpbGwgZ2V0cyB0byByZWFkLlxuICAgKi9cbiAgcHJldmlldz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIChTTVRQIG1vZGUpIG9yIHBlcnNpc3QgKGZpbGUvb3V0Ym94IG1vZGUpIG9uZSBtZXNzYWdlIGZyb20gdGhlXG4gKiByZXNvbHZlZCBgZnJvbWAgYWRkcmVzcy4gYHRvYCAoYW5kIG9wdGlvbmFsIGBjY2AgLyBgYmNjYCkgZWFjaCBhY2NlcHRcbiAqIG9uZSBvciBtb3JlIGFkZHJlc3NlcywgYW5kIGBhdHRhY2htZW50c2AgYXJlIGZvcndhcmRlZCBhcyBmaWxlcy4gVGhlXG4gKiBib2R5IGlzIHJlbmRlcmVkIGJ5IFJlYWN0IEVtYWlsIGludG8gbWF0Y2hpbmcgcGxhaW4tdGV4dCBhbmQgSFRNTCBNSU1FXG4gKiBhbHRlcm5hdGl2ZXMsIGFuZCB0aGUgb3V0Ym94IGVtYmVkcyB0aGVcbiAqIHJlbmRlcmVkIEhUTUwgaW4gYSBkb2N1bWVudC4gSW4gZmlsZSBtb2RlIHRoZSByZXR1cm5lZCBgbWVzc2FnZUlkYCBpc1xuICogdGhlIHBhdGggd3JpdHRlbi4gVGhyb3dzIHdoZW4gYHRvYCBjYXJyaWVzIG5vIHJlY2lwaWVudCwgd2hlbiB0aGUgYm9keVxuICogb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLCBvciB3aGVuIGBmcm9tYCBpcyBub3QgcGVybWl0dGVkXG4gKiBieSB0aGUgZWZmZWN0aXZlIHNlbmRlciBhbGxvdy1saXN0LlxuICpcbiAqIFRoZSByZWNpcGllbnQsIGNhcCwgYW5kIHNlbmRlciBjaGVja3MgcnVuIGJlZm9yZSB0aGUgaW50ZXJjZXB0b3IgY2hhaW4gc29cbiAqIHRoZWlyIHNwZWNpZmljIHN0YXR1cyBhbmQgYWN0aW9uYWJsZSBtZXNzYWdlIHJlYWNoIHRoZSBjYWxsZXIgaW5zdGVhZCBvZlxuICogdGhlIGNoYWluJ3Mgc3RhYmxlIGZhaWx1cmUgdGV4dC4gYHNpZ25hbGAgY2FuY2VscyB0aGUgc2VuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRFbWFpbChcbiAgbWVzc2FnZTogRW1haWxNZXNzYWdlLFxuICBmcm9tOiBzdHJpbmcsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuICBvcHRpb25zPzogU2VuZEVtYWlsT3B0aW9ucyxcbik6IFByb21pc2U8RW1haWxSZXN1bHQ+IHtcbiAgaWYgKG1lc3NhZ2UudG8ubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLm1pc3NpbmdGaWVsZChcInRvXCIpO1xuICB9XG4gIGFzc2VydE1lc3NhZ2VXaXRoaW5DYXBzKG1lc3NhZ2UpO1xuICBhc3NlcnRTZW5kZXJBbGxvd2VkKGZyb20sIGdldEVtYWlsUnVudGltZSgpLmNvbmZpZy5hbGxvd2VkU2VuZGVycyk7XG4gIHJldHVybiBleGVjdXRlV3JpdGUoXG4gICAgXCJzZW5kXCIsXG4gICAgRU1BSUxfU0VORF9TRVRUSU5HUyxcbiAgICAoZXhlY3V0ZVNpZ25hbCkgPT4gZGlzcGF0Y2gobWVzc2FnZSwgZnJvbSwgZXhlY3V0ZVNpZ25hbCwgb3B0aW9ucyksXG4gICAgc2lnbmFsLFxuICApO1xufVxuIl19
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQXdCLE1BQU0sb0JBQW9CLENBQUM7QUFDL0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFeEQsT0FBTyxVQUFzRCxNQUFNLFlBQVksQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQW9ELE1BQU0sYUFBYSxDQUFDO0FBQ25HLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLG9CQUFvQixFQUNwQiwyQkFBMkIsRUFDM0IsY0FBYyxHQUVmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWxELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQW9CN0M7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxjQUFjLEVBQTBCLENBQUM7QUFFekUsSUFBSSxPQUFpQyxDQUFDO0FBRXRDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxTQUE2QjtJQUMzRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxPQUFPLEdBQUc7WUFDUixNQUFNO1lBQ04sT0FB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Q0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDeEMsQ0FBQyxFQUNGLE1BQU0sQ0FDUCxDQUFDO0lBQ0YsT0FBTztRQUNMLElBQUksRUFBRSxJQUFJO1FBQ1YsU0FBUztRQUNULElBQUk7UUFDSixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDekQsQ0FBQztBQUNKLENBQUM7QUErQ0Q7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFNBQVMsQ0FDN0IsT0FBcUIsRUFDckIsSUFBWSxFQUNaLE1BQW9CLEVBQ3BCLE9BQTBCO0lBRTFCLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDNUIsTUFBTSxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sWUFBWSxDQUNqQixNQUFNLEVBQ04sbUJBQW1CLEVBQ25CLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLEVBQ2xFLE1BQU0sQ0FDUCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGVtYWlsIHJ1bnRpbWU6IGEgbGF6aWx5LWJ1aWx0LCBwcm9jZXNzLXdpZGUgZGlzcGF0Y2hlciBwbHVzIGl0c1xuICogcmVzb2x2ZWQgY29uZmlnLCBhbmQge0BsaW5rIHNlbmRFbWFpbH0gd2hpY2ggc2VuZHMgb25lXG4gKiB7QGxpbmsgRW1haWxNZXNzYWdlfSB0aHJvdWdoIGl0LiBJbiBTTVRQIG1vZGUgdGhlIHJ1bnRpbWUgaG9sZHMgYVxuICogbWVtb2l6ZWQgbm9kZW1haWxlciB0cmFuc3BvcnQgKHNoYXJlZCBieSB0aGUgcGx1Z2luJ3Mgc2V0dXAgYW5kIHRoZVxuICogYWdlbnQgdG9vbCwgc28gdGhleSByZXVzZSBvbmUgY29ubmVjdGlvbiBwb29sKTsgaW4gZmlsZS9vdXRib3ggbW9kZSBpdFxuICogaG9sZHMgbm8gdHJhbnNwb3J0IGFuZCB7QGxpbmsgc2VuZEVtYWlsfSB3cml0ZXMgSFRNTCB0byBkaXNrIGluc3RlYWQuXG4gKiBUaGUgZmlyc3QgY2FsbGVyIChub3JtYWxseSB0aGUgcGx1Z2luIGF0IHNldHVwKSBwcmltZXMgaXQgd2l0aCB0aGVcbiAqIHBsdWdpbidzIGNvbmZpZzsgbGF0ZXIgY2FsbGVycyByZXVzZSBpdC5cbiAqXG4gKiBUaGUgcnVudGltZSBhbHNvIGNhcnJpZXMgdGhlIHtAbGluayBFbWFpbEV4ZWN1dG9yfSBldmVyeSBvdXRib3VuZCBzZW5kIHJ1bnNcbiAqIHRocm91Z2guIFRoZSBwbHVnaW4gaW5zdGFsbHMgaXRzIG93biBgZXhlY3V0ZSgpYCB0aGVyZSBhdCBzZXR1cCwgd2hpY2ggaXNcbiAqIGhvdyB0aGUgTWFzdHJhIHRvb2wgLSBhIHBsYWluIGZ1bmN0aW9uIHdpdGggbm8gcGx1Z2luIGluc3RhbmNlIGluIHNjb3BlIC1cbiAqIHN0aWxsIGdldHMgQXBwS2l0J3MgcmV0cnkgLyB0aW1lb3V0IC8gdGVsZW1ldHJ5IGNoYWluLiBXaXRob3V0IGEgcmVnaXN0ZXJlZFxuICogcGx1Z2luIChhIGRpcmVjdCBjYWxsIGZyb20gYSBzY3JpcHQgb3IgYSB0ZXN0KSB0aGUgc2VuZCBzdGlsbCBydW5zLCBqdXN0XG4gKiB3aXRob3V0IGludGVyY2VwdG9ycy5cbiAqXG4gKiBFdmVyeSBlbnRyeSBwb2ludCB0YWtlcyBhbiBvcHRpb25hbCB7QGxpbmsgQWJvcnRTaWduYWx9IHNvIHRoZSBwbHVnaW4nc1xuICogYGV4ZWN1dGUoKWAgdGltZW91dCBhbmQgYSBjbGllbnQgZGlzY29ubmVjdCBib3RoIHN0b3AgdGhlIGNhbGxlciB3YWl0aW5nXG4gKiBvbiBTTVRQLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRXJyb3IsIFZhbGlkYXRpb25FcnJvciwgdHlwZSBFeGVjdXRpb25SZXN1bHQgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG5pbXBvcnQgeyBwbHVnaW5FeGVjdXRpb24gfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGV4ZWN1dGlvbiwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgRW1haWxBdHRhY2htZW50LCBFbWFpbE1lc3NhZ2UsIEVtYWlsUmVzdWx0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWVtYWlsXCI7XG5pbXBvcnQgbm9kZW1haWxlciwgeyB0eXBlIFNlbmRNYWlsT3B0aW9ucywgdHlwZSBUcmFuc3BvcnRlciB9IGZyb20gXCJub2RlbWFpbGVyXCI7XG5pbXBvcnQgeyByZXNvbHZlRW1haWxDb25maWcsIHR5cGUgRW1haWxQbHVnaW5Db25maWcsIHR5cGUgUmVzb2x2ZWRFbWFpbENvbmZpZyB9IGZyb20gXCIuL2NvbmZpZy50c1wiO1xuaW1wb3J0IHtcbiAgRU1BSUxfU0VORF9TRVRUSU5HUyxcbiAgTUFYX0FUVEFDSE1FTlRfQllURVMsXG4gIE1BWF9BVFRBQ0hNRU5UX0NPVU5ULFxuICBNQVhfQVRUQUNITUVOVFNfVE9UQUxfQllURVMsXG4gIE1BWF9CT0RZX0NIQVJTLFxuICB0eXBlIEVtYWlsRXhlY3V0aW9uU2V0dGluZ3MsXG59IGZyb20gXCIuL2RlZmF1bHRzLnRzXCI7XG5pbXBvcnQgeyByZW5kZXJFbWFpbCB9IGZyb20gXCIuL2VtYWlsLWh0bWwudHNcIjtcbmltcG9ydCB7IHdyaXRlT3V0Ym94RW1haWwgfSBmcm9tIFwiLi9vdXRib3gudHNcIjtcbmltcG9ydCB7IGFzc2VydFNlbmRlckFsbG93ZWQgfSBmcm9tIFwiLi9zZW5kZXIudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImVtYWlsL3RyYW5zcG9ydFwiKTtcblxuLyoqXG4gKiBSdW5zIG9uZSBvdXRib3VuZCBzZW5kIHRocm91Z2ggQXBwS2l0J3MgaW50ZXJjZXB0b3IgY2hhaW4uIE1hdGNoZXNcbiAqIGBQbHVnaW4uZXhlY3V0ZSgpYCwgd2hpY2ggbmV2ZXIgdGhyb3dzOiBhIGZhaWx1cmUgY29tZXMgYmFjayBhc1xuICogYHsgb2s6IGZhbHNlIH1gLlxuICovXG5leHBvcnQgdHlwZSBFbWFpbEV4ZWN1dG9yID0gPFQ+KFxuICBmbjogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFQ+LFxuICBzZXR0aW5nczogRW1haWxFeGVjdXRpb25TZXR0aW5ncyxcbikgPT4gUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8VD4+O1xuXG4vKiogVGhlIHNoYXJlZCBkaXNwYXRjaGVyLCBpdHMgcmVzb2x2ZWQgY29uZmlnLCBhbmQgdGhlIHNlbmQgZXhlY3V0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtYWlsUnVudGltZSB7XG4gIC8qKiBQcmVzZW50IG9ubHkgaW4gU01UUCBtb2RlLiAqL1xuICB0cmFuc3BvcnRlcj86IFRyYW5zcG9ydGVyO1xuICBjb25maWc6IFJlc29sdmVkRW1haWxDb25maWc7XG4gIGV4ZWN1dGU6IEVtYWlsRXhlY3V0b3I7XG59XG5cbi8qKlxuICogRXhlY3V0b3IgdXNlZCB1bnRpbCAob3IgdW5sZXNzKSB0aGUgcGx1Z2luIGluc3RhbGxzIGl0cyBvd246IHJ1biB0aGUgc2VuZFxuICogZGlyZWN0bHksIG1hcHBpbmcgYSB0aHJvdyBvbnRvIHRoZSBzYW1lIHtAbGluayBFeGVjdXRpb25SZXN1bHR9IHNoYXBlIHNvXG4gKiBjYWxsIHNpdGVzIGJyYW5jaCBvbiBgb2tgIGVpdGhlciB3YXkuXG4gKi9cbmNvbnN0IGRpcmVjdEV4ZWN1dGUgPSBleGVjdXRpb24uZGlyZWN0RXhlY3V0b3I8RW1haWxFeGVjdXRpb25TZXR0aW5ncz4oKTtcblxubGV0IHJ1bnRpbWU6IEVtYWlsUnVudGltZSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIHNoYXJlZCBydW50aW1lLCBidWlsZGluZyBpdCBvbiBmaXJzdCB1c2UgYnkgcmVzb2x2aW5nXG4gKiBgb3ZlcnJpZGVzYCBvdmVyIHRoZSBlbnZpcm9ubWVudCAoYFNNVFBfSE9TVGAsIGBTTVRQX1BPUlRgLFxuICogYFNNVFBfU0VDVVJFYCwgYFNNVFBfVVNFUmAsIGBTTVRQX1BBU1NXT1JEYCwgYEVNQUlMX0RPTUFJTmAsXG4gKiBgRU1BSUxfRlJPTWAsIGBFTUFJTF9BTExPV0VEX1NFTkRFUlNgLCBgRU1BSUxfU0VOREVSX1BPTElDWWAsXG4gKiBgRU1BSUxfT1VUQk9YX01PREVgLCBgRU1BSUxfT1VUQk9YX0RJUmApIHRocm91Z2hcbiAqIHtAbGluayByZXNvbHZlRW1haWxDb25maWd9LiBXaXRoIFNNVFAgY3JlZGVudGlhbHMgcHJlc2VudCBpdCBob2xkcyBhXG4gKiBub2RlbWFpbGVyIHRyYW5zcG9ydCBhbmQgaXRzIGNvbm5lY3Rpb24gcG9vbDsgb3RoZXJ3aXNlIGl0IGlzIGluXG4gKiBmaWxlL291dGJveCBtb2RlIGFuZCBob2xkcyBub25lLlxuICpcbiAqIGBvdmVycmlkZXNgIGlzIHJlYWQgb25seSBvbiB0aGUgY2FsbCB0aGF0IGJ1aWxkcyB0aGUgcnVudGltZSwgc28gcHJpbWUgaXRcbiAqIGZyb20gdGhlIHBsdWdpbidzIGNvbmZpZyBhdCBzZXR1cDsgbGF0ZXIgY2FsbGVycyAodGhlIHRvb2wncyBgZXhlY3V0ZWAsXG4gKiB0aGUgc2VuZGVyLW9wdGlvbnMgcm91dGUpIHBhc3Mgbm90aGluZyBhbmQgZ2V0IHRoZSBzYW1lIGluc3RhbmNlLiBUaHJvd3NcbiAqIHdoYXRldmVyIHtAbGluayByZXNvbHZlRW1haWxDb25maWd9IHRocm93cyBmb3IgYW4gdW51c2FibGUgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVtYWlsUnVudGltZShvdmVycmlkZXM/OiBFbWFpbFBsdWdpbkNvbmZpZyk6IEVtYWlsUnVudGltZSB7XG4gIGlmICghcnVudGltZSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlc29sdmVFbWFpbENvbmZpZyhvdmVycmlkZXMpO1xuICAgIHJ1bnRpbWUgPSB7XG4gICAgICBjb25maWcsXG4gICAgICBleGVjdXRlOiBkaXJlY3RFeGVjdXRlLFxuICAgICAgLi4uKGNvbmZpZy5tb2RlID09PSBcInNtdHBcIlxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHRyYW5zcG9ydGVyOiBub2RlbWFpbGVyLmNyZWF0ZVRyYW5zcG9ydCh7XG4gICAgICAgICAgICAgIGhvc3Q6IGNvbmZpZy5ob3N0LFxuICAgICAgICAgICAgICBwb3J0OiBjb25maWcucG9ydCxcbiAgICAgICAgICAgICAgc2VjdXJlOiBjb25maWcuc2VjdXJlLFxuICAgICAgICAgICAgICBhdXRoOiBjb25maWcuYXV0aCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fSksXG4gICAgfTtcbiAgfVxuICByZXR1cm4gcnVudGltZTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIHRoZSBleGVjdXRvciBvdXRib3VuZCBzZW5kcyBydW4gdGhyb3VnaC4gVGhlIHBsdWdpbiBjYWxscyB0aGlzIGF0XG4gKiBzZXR1cCB3aXRoIGl0cyBvd24gYGV4ZWN1dGUoKWA7IGEgc2Vjb25kIGNhbGwgcmVwbGFjZXMgdGhlIHByZXZpb3VzIG9uZSwgc29cbiAqIGEgcmUtcmVnaXN0ZXJlZCBwbHVnaW4gZG9lcyBub3QgbGVhdmUgdGhlIHRvb2xzIGJvdW5kIHRvIGEgZGVhZCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEVtYWlsRXhlY3V0b3IoZXhlY3V0ZTogRW1haWxFeGVjdXRvcik6IHZvaWQge1xuICBnZXRFbWFpbFJ1bnRpbWUoKS5leGVjdXRlID0gZXhlY3V0ZTtcbn1cblxuLyoqXG4gKiBEcm9wIHRoZSBtZW1vaXplZCBydW50aW1lLCBjbG9zaW5nIHRoZSBTTVRQIGNvbm5lY3Rpb24gcG9vbCwgc28gdGhlIG5leHRcbiAqIHtAbGluayBnZXRFbWFpbFJ1bnRpbWV9IHJlYnVpbGRzIGl0IGZyb20gZnJlc2ggY29uZmlnIGFuZCBzdG9wcyBjYWxsaW5nXG4gKiB0aHJvdWdoIGEgdG9ybi1kb3duIHBsdWdpbidzIGBleGVjdXRlKClgLiBJZGVtcG90ZW50LCBhbmQgdGhlIHBsdWdpbidzXG4gKiBgc2h1dGRvd24oKWAgaG9vay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0RW1haWxSdW50aW1lKCk6IHZvaWQge1xuICBydW50aW1lPy50cmFuc3BvcnRlcj8uY2xvc2UoKTtcbiAgcnVudGltZSA9IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSdW4gb25lIG5vbi1pZGVtcG90ZW50IHdyaXRlIHRocm91Z2ggdGhlIHNoYXJlZCBleGVjdXRvciBhbmQgdW53cmFwIGl0LlxuICpcbiAqIGBleGVjdXRlKClgIG5ldmVyIHRocm93cywgc28gYSBmYWlsZWQgc2VuZCBhcnJpdmVzIGFzIGB7IG9rOiBmYWxzZSB9YCB3aXRoIGFcbiAqIHN0YXR1cyB0aGUgaW50ZXJjZXB0b3JzIGFscmVhZHkgc2FuaXRpemVkOyBpdCBpcyBsb2dnZWQgaGVyZSBhbmQgcmUtcmFpc2VkXG4gKiBhcyBhIHN0YWJsZSB7QGxpbmsgRXhlY3V0aW9uRXJyb3J9IHNvIGFuIHVwc3RyZWFtIG1lc3NhZ2UgbmV2ZXIgYmVjb21lcyB0aGVcbiAqIGNhbGxlcidzIGVycm9yIHRleHQuIGBzaWduYWxgIGlzIHRoZSBjYWxsZXIncyBvd24gY2FuY2VsbGF0aW9uIChhbiBhZ2VudFxuICogcnVuLCBhIHJlcXVlc3QgdGVhcmRvd24pOyBpdCBpcyBtZXJnZWQgd2l0aCB0aGUgc2lnbmFsIHRoZSB0aW1lb3V0XG4gKiBpbnRlcmNlcHRvciBzdXBwbGllcyBzbyBlaXRoZXIgb25lIHVud2luZHMgdGhlIEkvTy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVXcml0ZTxUPihcbiAgb3BlcmF0aW9uOiBzdHJpbmcsXG4gIHNldHRpbmdzOiBFbWFpbEV4ZWN1dGlvblNldHRpbmdzLFxuICBmbjogKHNpZ25hbD86IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFQ+LFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbik6IFByb21pc2U8VD4ge1xuICBjb25zdCB7IGV4ZWN1dGUgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICByZXR1cm4gcGx1Z2luRXhlY3V0aW9uLnJ1blBsdWdpbkV4ZWN1dGlvbih7XG4gICAgcGx1Z2luOiBcImVtYWlsXCIsXG4gICAgbG9nZ2VyLFxuICAgIG9wZXJhdGlvbixcbiAgICBzZXR0aW5ncyxcbiAgICBleGVjdXRlLFxuICAgIGZuLFxuICAgIHNpZ25hbCxcbiAgfSk7XG59XG5cbi8qKlxuICogT3BlbiBhbmQgdGVhciBkb3duIG9uZSBTTVRQIGNvbm5lY3Rpb24gdG8gcHJvdmUgdGhlIGhvc3QsIHBvcnQsIGFuZFxuICogY3JlZGVudGlhbHMgd29yay4gQ2FsbGVkIGF0IHBsdWdpbiBzZXR1cCBzbyBhIGJhZCByZWxheSBzaG93cyB1cCBpbiB0aGVcbiAqIGJvb3QgbG9ncyByYXRoZXIgdGhhbiBvbiB0aGUgZmlyc3QgYXBwcm92ZWQgc2VuZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUVtYWlsVHJhbnNwb3J0KFxuICB0cmFuc3BvcnRlcjogVHJhbnNwb3J0ZXIgfCB1bmRlZmluZWQsXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghdHJhbnNwb3J0ZXIpIHtcbiAgICB0aHJvdyBDb25maWd1cmF0aW9uRXJyb3IuaW52YWxpZENvbm5lY3Rpb24oXG4gICAgICBcIlNNVFBcIixcbiAgICAgIFwiVGhlIHJ1bnRpbWUgcmVzb2x2ZWQgdG8gb3V0Ym94IG1vZGUsIHNvIHRoZXJlIGlzIG5vIHRyYW5zcG9ydCB0byB2ZXJpZnkuXCIsXG4gICAgKTtcbiAgfVxuICBhd2FpdCBhYm9ydGFibGUodHJhbnNwb3J0ZXIudmVyaWZ5KCksIHNpZ25hbCk7XG59XG5cbi8qKlxuICogU3RvcCBhd2FpdGluZyBgcHJvbWlzZWAgYXMgc29vbiBhcyBgc2lnbmFsYCBhYm9ydHMuIG5vZGVtYWlsZXIgZXhwb3NlcyBub1xuICogY2FuY2VsbGF0aW9uIGhvb2ssIHNvIHRoZSBTTVRQIGNvbnZlcnNhdGlvbiBpdHNlbGYgZmluaXNoZXMgb24gaXRzIG93blxuICogY29ubmVjdGlvbjsgd2hhdCB1bndpbmRzIGlzIHRoZSBjYWxsZXIgYW5kIGV2ZXJ5dGhpbmcgZG93bnN0cmVhbSBvZiBpdC5cbiAqL1xuZnVuY3Rpb24gYWJvcnRhYmxlPFQ+KHByb21pc2U6IFByb21pc2U8VD4sIHNpZ25hbDogQWJvcnRTaWduYWwgfCB1bmRlZmluZWQpOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFzaWduYWwpIHJldHVybiBwcm9taXNlO1xuICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgLy8gVGhlIGxpc3RlbmVyIGlzIGRldGFjaGVkIG9uY2UgdGhlIHJhY2Ugc2V0dGxlcyBzbyBhIGxvbmctbGl2ZWQgcnVuIHNpZ25hbFxuICAvLyBkb2VzIG5vdCBhY2N1bXVsYXRlIG9uZSBwZXIgc2VuZC5cbiAgY29uc3QgbGlzdGVuZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IGFib3J0ZWQgPSBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT4ge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgKCkgPT4gcmVqZWN0KHNpZ25hbC5yZWFzb24pLCB7XG4gICAgICBvbmNlOiB0cnVlLFxuICAgICAgc2lnbmFsOiBsaXN0ZW5lci5zaWduYWwsXG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gUHJvbWlzZS5yYWNlKFtwcm9taXNlLCBhYm9ydGVkXSkuZmluYWxseSgoKSA9PiBsaXN0ZW5lci5hYm9ydCgpKTtcbn1cblxuLyoqIFRoZSBjb21tYS1qb2luZWQgcmVjaXBpZW50IHN0cmluZyBlY2hvZWQgYmFjayBpbiB7QGxpbmsgRW1haWxSZXN1bHR9LiAqL1xuZnVuY3Rpb24gcmVjaXBpZW50RWNobyh0bzogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gdG8uam9pbihcIiwgXCIpO1xufVxuXG4vKipcbiAqIE5vZGUgYnVmZmVyIGVuY29kaW5ncyBhIHdpcmUgYXR0YWNobWVudCBtYXkgbmFtZSBmb3IgaXRzIGlubGluZSBgY29udGVudGAuXG4gKiBBbnl0aGluZyBlbHNlIGlzIG1lYXN1cmVkIGFzIFVURi04LCB3aGljaCBvdmVyLWNvdW50cyByYXRoZXIgdGhhbiBsZXR0aW5nXG4gKiBhbiB1bnJlY29nbml6ZWQgZW5jb2Rpbmcgc2xpcCBwYXN0IHRoZSBzaXplIGNhcC5cbiAqL1xuY29uc3QgQ09OVEVOVF9FTkNPRElOR1M6IFJlYWRvbmx5U2V0PHN0cmluZz4gPSBuZXcgU2V0KFtcbiAgXCJhc2NpaVwiLFxuICBcImJhc2U2NFwiLFxuICBcImJhc2U2NHVybFwiLFxuICBcImJpbmFyeVwiLFxuICBcImhleFwiLFxuICBcImxhdGluMVwiLFxuICBcInVjczJcIixcbiAgXCJ1Y3MtMlwiLFxuICBcInV0ZjhcIixcbiAgXCJ1dGYtOFwiLFxuICBcInV0ZjE2bGVcIixcbiAgXCJ1dGYtMTZsZVwiLFxuXSk7XG5cbi8qKiBEZWNvZGVkIGJ5dGUgc2l6ZSBvZiBvbmUgYXR0YWNobWVudCdzIGlubGluZSBjb250ZW50LiAqL1xuZnVuY3Rpb24gYXR0YWNobWVudEJ5dGVzKGF0dGFjaG1lbnQ6IEVtYWlsQXR0YWNobWVudCk6IG51bWJlciB7XG4gIGNvbnN0IHsgY29udGVudCwgZW5jb2RpbmcgfSA9IGF0dGFjaG1lbnQ7XG4gIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICBjb25zdCBkZWNsYXJlZCA9IGVuY29kaW5nPy50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCByZXNvbHZlZCA9XG4gICAgZGVjbGFyZWQgJiYgQ09OVEVOVF9FTkNPRElOR1MuaGFzKGRlY2xhcmVkKSA/IChkZWNsYXJlZCBhcyBCdWZmZXJFbmNvZGluZykgOiBcInV0ZjhcIjtcbiAgcmV0dXJuIEJ1ZmZlci5ieXRlTGVuZ3RoKGNvbnRlbnQsIHJlc29sdmVkKTtcbn1cblxuLyoqXG4gKiBSZWplY3QgYSBtZXNzYWdlIHdob3NlIGJvZHkgb3IgYXR0YWNobWVudHMgZXhjZWVkIHRoZSBwbHVnaW4ncyBjYXBzLiBUaGVcbiAqIGJvZHkgYW5kIGF0dGFjaG1lbnQgbGlzdCBhcnJpdmUgZnJvbSBhIG1vZGVsLCBzbyB0aGV5IGFyZSB1bmJvdW5kZWQgdW50aWxcbiAqIHNvbWV0aGluZyBib3VuZHMgdGhlbTsgbW9zdCBTTVRQIHJlbGF5cyBhbHNvIHJlamVjdCBhbiBvdmVyc2l6ZWQgbWVzc2FnZVxuICogb25seSBhZnRlciB0aGUgd2hvbGUgcGF5bG9hZCBoYXMgYmVlbiB1cGxvYWRlZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0TWVzc2FnZVdpdGhpbkNhcHMobWVzc2FnZTogRW1haWxNZXNzYWdlKTogdm9pZCB7XG4gIGlmIChtZXNzYWdlLmJvZHkubGVuZ3RoID4gTUFYX0JPRFlfQ0hBUlMpIHtcbiAgICB0aHJvdyBWYWxpZGF0aW9uRXJyb3IuaW52YWxpZFZhbHVlKFxuICAgICAgXCJib2R5XCIsXG4gICAgICBtZXNzYWdlLmJvZHkubGVuZ3RoLFxuICAgICAgYGF0IG1vc3QgJHtNQVhfQk9EWV9DSEFSU30gY2hhcmFjdGVyc2AsXG4gICAgKTtcbiAgfVxuICBjb25zdCBhdHRhY2htZW50cyA9IG1lc3NhZ2UuYXR0YWNobWVudHMgPz8gW107XG4gIGlmIChhdHRhY2htZW50cy5sZW5ndGggPiBNQVhfQVRUQUNITUVOVF9DT1VOVCkge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgICBhdHRhY2htZW50cy5sZW5ndGgsXG4gICAgICBgYXQgbW9zdCAke01BWF9BVFRBQ0hNRU5UX0NPVU5UfSBmaWxlc2AsXG4gICAgKTtcbiAgfVxuICBsZXQgdG90YWwgPSAwO1xuICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICBjb25zdCBieXRlcyA9IGF0dGFjaG1lbnRCeXRlcyhhdHRhY2htZW50KTtcbiAgICBpZiAoYnl0ZXMgPiBNQVhfQVRUQUNITUVOVF9CWVRFUykge1xuICAgICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgICAgXCJhdHRhY2htZW50c1tdLmNvbnRlbnRcIixcbiAgICAgICAgYnl0ZXMsXG4gICAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRfQllURVN9IGJ5dGVzIHBlciBmaWxlYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRvdGFsICs9IGJ5dGVzO1xuICB9XG4gIGlmICh0b3RhbCA+IE1BWF9BVFRBQ0hNRU5UU19UT1RBTF9CWVRFUykge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5pbnZhbGlkVmFsdWUoXG4gICAgICBcImF0dGFjaG1lbnRzXCIsXG4gICAgICB0b3RhbCxcbiAgICAgIGBhdCBtb3N0ICR7TUFYX0FUVEFDSE1FTlRTX1RPVEFMX0JZVEVTfSBieXRlcyBhY3Jvc3MgYWxsIGZpbGVzYCxcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogTWFwIHRoZSB3aXJlLWZvcm1hdCB7QGxpbmsgRW1haWxBdHRhY2htZW50fXMgb250byBub2RlbWFpbGVyJ3NcbiAqIGF0dGFjaG1lbnQgc2hhcGUsIGRyb3BwaW5nIHVuc2V0IG9wdGlvbmFsIGtleXMgc28gbm9kZW1haWxlciBhcHBsaWVzXG4gKiBpdHMgb3duIGRlZmF1bHRzICh1dGYtOCBlbmNvZGluZywgZmlsZW5hbWUtaW5mZXJyZWQgY29udGVudCB0eXBlKS4gVGhlXG4gKiB3aXJlIGZpZWxkcyBhcmUgYSBkZWxpYmVyYXRlIHN1YnNldCBvZiBub2RlbWFpbGVyJ3MsIHNvIHRoaXMgaXMgYVxuICogc3RyYWlnaHQgc3RydWN0dXJhbCBwYXNzLXRocm91Z2guXG4gKi9cbmZ1bmN0aW9uIHRvTWFpbEF0dGFjaG1lbnRzKFxuICBhdHRhY2htZW50czogRW1haWxBdHRhY2htZW50W10gfCB1bmRlZmluZWQsXG4pOiBTZW5kTWFpbE9wdGlvbnNbXCJhdHRhY2htZW50c1wiXSB7XG4gIGlmICghYXR0YWNobWVudHMgfHwgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gYXR0YWNobWVudHMubWFwKChhdHQpID0+ICh7XG4gICAgZmlsZW5hbWU6IGF0dC5maWxlbmFtZSxcbiAgICAuLi4oYXR0LmNvbnRlbnQgIT09IHVuZGVmaW5lZCA/IHsgY29udGVudDogYXR0LmNvbnRlbnQgfSA6IHt9KSxcbiAgICAuLi4oYXR0LmVuY29kaW5nICE9PSB1bmRlZmluZWQgPyB7IGVuY29kaW5nOiBhdHQuZW5jb2RpbmcgfSA6IHt9KSxcbiAgICAuLi4oYXR0LmNvbnRlbnRUeXBlICE9PSB1bmRlZmluZWQgPyB7IGNvbnRlbnRUeXBlOiBhdHQuY29udGVudFR5cGUgfSA6IHt9KSxcbiAgfSkpO1xufVxuXG4vKipcbiAqIEhhbmQgb25lIGFscmVhZHktdmFsaWRhdGVkIG1lc3NhZ2UgdG8gU01UUCwgb3Igd3JpdGUgaXQgdG8gdGhlIG91dGJveCB3aGVuXG4gKiBubyBjcmVkZW50aWFscyBhcmUgY29uZmlndXJlZC4gVGhlIGhhbGYgb2YgYSBzZW5kIHRoYXQgcGVyZm9ybXMgSS9PLCBzbyBpdFxuICogaXMgd2hhdCBydW5zIGluc2lkZSB0aGUgaW50ZXJjZXB0b3IgY2hhaW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoKFxuICBtZXNzYWdlOiBFbWFpbE1lc3NhZ2UsXG4gIGZyb206IHN0cmluZyxcbiAgc2lnbmFsPzogQWJvcnRTaWduYWwsXG4gIG9wdGlvbnM/OiBTZW5kRW1haWxPcHRpb25zLFxuKTogUHJvbWlzZTxFbWFpbFJlc3VsdD4ge1xuICBjb25zdCB7IGNvbmZpZywgdHJhbnNwb3J0ZXIgfSA9IGdldEVtYWlsUnVudGltZSgpO1xuICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRFY2hvKG1lc3NhZ2UudG8pO1xuICBzaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgaWYgKGNvbmZpZy5tb2RlID09PSBcImZpbGVcIikge1xuICAgIGNvbnN0IHBhdGggPSBhd2FpdCB3cml0ZU91dGJveEVtYWlsKG1lc3NhZ2UsIGZyb20sIGNvbmZpZy5vdXREaXIsIGNvbmZpZy5icmFuZCwge1xuICAgICAgLi4uKG9wdGlvbnM/LmhlYWRpbmcgIT09IHVuZGVmaW5lZCA/IHsgaGVhZGluZzogb3B0aW9ucy5oZWFkaW5nIH0gOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucz8ucHJldmlldyAhPT0gdW5kZWZpbmVkID8geyBwcmV2aWV3OiBvcHRpb25zLnByZXZpZXcgfSA6IHt9KSxcbiAgICB9KTtcbiAgICByZXR1cm4geyBzZW50OiB0cnVlLCByZWNpcGllbnQsIGZyb20sIG1lc3NhZ2VJZDogcGF0aCB9O1xuICB9XG5cbiAgaWYgKCF0cmFuc3BvcnRlcikge1xuICAgIHRocm93IENvbmZpZ3VyYXRpb25FcnJvci5pbnZhbGlkQ29ubmVjdGlvbihcbiAgICAgIFwiU01UUFwiLFxuICAgICAgXCJObyB0cmFuc3BvcnQgd2FzIGJ1aWx0IGZvciB0aGUgcmVzb2x2ZWQgY29uZmlndXJhdGlvbi5cIixcbiAgICApO1xuICB9XG4gIGNvbnN0IGF0dGFjaG1lbnRzID0gdG9NYWlsQXR0YWNobWVudHMobWVzc2FnZS5hdHRhY2htZW50cyk7XG4gIGNvbnN0IHJlbmRlcmVkID0gYXdhaXQgcmVuZGVyRW1haWwoe1xuICAgIHN1YmplY3Q6IG1lc3NhZ2Uuc3ViamVjdCxcbiAgICBib2R5OiBtZXNzYWdlLmJvZHksXG4gICAgYnJhbmQ6IGNvbmZpZy5icmFuZCxcbiAgICAuLi4ob3B0aW9ucz8uaGVhZGluZyAhPT0gdW5kZWZpbmVkID8geyBoZWFkaW5nOiBvcHRpb25zLmhlYWRpbmcgfSA6IHt9KSxcbiAgICAuLi4ob3B0aW9ucz8ucHJldmlldyAhPT0gdW5kZWZpbmVkID8geyBwcmV2aWV3OiBvcHRpb25zLnByZXZpZXcgfSA6IHt9KSxcbiAgfSk7XG4gIGNvbnN0IGluZm8gPSBhd2FpdCBhYm9ydGFibGUoXG4gICAgdHJhbnNwb3J0ZXIuc2VuZE1haWwoe1xuICAgICAgZnJvbSxcbiAgICAgIHRvOiBtZXNzYWdlLnRvLFxuICAgICAgc3ViamVjdDogbWVzc2FnZS5zdWJqZWN0LFxuICAgICAgLy8gQSBjYWxsZXItc3VwcGxpZWQgcGxhaW4tdGV4dCBwYXJ0IFdJTlMgb3ZlciB0aGUgZ2VuZXJhdGVkIG9uZS4gQm90aCBwYXJ0c1xuICAgICAgLy8gc3RpbGwgY29tZSBmcm9tIHRoZSBzYW1lIGNvbnRlbnQ7IHRoaXMgb25seSBsZXRzIGEgY2FsbGVyIGNvbnRyb2wgdGhlXG4gICAgICAvLyB0ZXh0IGFsdGVybmF0aXZlJ3MgZXhhY3QgbGluZSBsYXlvdXQsIHdoaWNoIHNvbWUgY2xpZW50cyBwYXJzZSAoc2VlXG4gICAgICAvLyBgU2VuZEVtYWlsT3B0aW9ucy50ZXh0YCkuXG4gICAgICB0ZXh0OiBvcHRpb25zPy50ZXh0ID8/IHJlbmRlcmVkLnRleHQsXG4gICAgICBodG1sOiByZW5kZXJlZC5odG1sLFxuICAgICAgLi4uKG1lc3NhZ2UuY2MgJiYgbWVzc2FnZS5jYy5sZW5ndGggPiAwID8geyBjYzogbWVzc2FnZS5jYyB9IDoge30pLFxuICAgICAgLi4uKG1lc3NhZ2UuYmNjICYmIG1lc3NhZ2UuYmNjLmxlbmd0aCA+IDAgPyB7IGJjYzogbWVzc2FnZS5iY2MgfSA6IHt9KSxcbiAgICAgIC4uLihhdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICB9KSxcbiAgICBzaWduYWwsXG4gICk7XG4gIHJldHVybiB7XG4gICAgc2VudDogdHJ1ZSxcbiAgICByZWNpcGllbnQsXG4gICAgZnJvbSxcbiAgICAuLi4oaW5mby5tZXNzYWdlSWQgPyB7IG1lc3NhZ2VJZDogaW5mby5tZXNzYWdlSWQgfSA6IHt9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBEZWxpdmVyeS10aW1lIG9wdGlvbnMgdGhhdCBhcmUgTk9UIHBhcnQgb2YgdGhlIG1lc3NhZ2UgYSBtb2RlbCBjb21wb3Nlcy5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgc2VwYXJhdGUgZnJvbSB7QGxpbmsgRW1haWxNZXNzYWdlfTogdGhhdCBzY2hlbWEgaXMgdGhlIGFnZW50XG4gKiB0b29sJ3MgaW5wdXQsIHNvIGFueXRoaW5nIGFkZGVkIHRvIGl0IGJlY29tZXMgYSBmaWVsZCBhIG1vZGVsIGNhbiBzZXQuIFRoZXNlXG4gKiBkZXNjcmliZSBob3cgYSBtZXNzYWdlIGlzIERFTElWRVJFRCwgc28gdGhleSBhcmUgdGhlIGNhbGxlcidzIHRvIHN1cHBseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZW5kRW1haWxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFZpc2libGUgaGVhZGluZyBpbnNpZGUgdGhlIGJyYW5kZWQgSFRNTCBjYXJkLiBEZWZhdWx0cyB0byB0aGUgbWVzc2FnZVxuICAgKiBzdWJqZWN0LiBVc2UgdGhpcyB3aGVuIHRoZSB0cmFuc3BvcnQgc3ViamVjdCBjYXJyaWVzIG5vdGlmaWNhdGlvbi1zcGVjaWZpY1xuICAgKiBkZXRhaWxzIHRoYXQgd291bGQgYmUgbm9pc3kgaWYgcmVwZWF0ZWQgaW5zaWRlIHRoZSBvcGVuZWQgZW1haWwuXG4gICAqL1xuICBoZWFkaW5nPzogc3RyaW5nO1xuICAvKipcbiAgICogQW4gZXhwbGljaXQgYHRleHQvcGxhaW5gIGFsdGVybmF0aXZlLCByZXBsYWNpbmcgdGhlIG9uZSBnZW5lcmF0ZWQgZnJvbSB0aGVcbiAgICogUmVhY3QgRW1haWwgdHJlZS4gVGhlIEhUTUwgcGFydCBpcyB1bnRvdWNoZWQsIHNvIHRoZSByZWNpcGllbnQgc3RpbGwgZ2V0cyB0aGVcbiAgICogZnVsbCBicmFuZGVkIHRlbXBsYXRlLlxuICAgKlxuICAgKiBUaGlzIGV4aXN0cyBiZWNhdXNlIHRoZSBnZW5lcmF0ZWQgdGV4dCBwYXJ0IGlzIGEgUkVOREVSSU5HIG9mIHRoZSBIVE1MOiBpdFxuICAgKiBjYXJyaWVzIHRoZSBicmFuZCBoZWFkZXIgYW5kIGZvb3RlciwgYW5kIGl0IHR1cm5zIENTUyBtYXJnaW4gaW50byBibGFua1xuICAgKiBsaW5lcy4gVGhhdCBpcyBmaW5lIGZvciBwcm9zZSBhbmQgd3JvbmcgZm9yIGNvbnRlbnQgYSBtYWNoaW5lIHBhcnNlcy4gQVxuICAgKiBvbmUtdGltZS1jb2RlIGVtYWlsIGlzIHRoZSBjYXNlIGluIHBvaW50IC0gY2xpZW50cyBsb29rIGZvciB0aGUgY29kZSBvbiB0aGVcbiAgICogbGluZSBpbW1lZGlhdGVseSBhZnRlciB0aGUgcHJvbXB0LCBhbmQgYSBzdHlsZWQgYDxoMj5gIGNvZGUgbGFuZHMgdHdvIGJsYW5rXG4gICAqIGxpbmVzIGJlbG93IGl0LCBzbyBhdXRvZmlsbCBzdG9wcyBiZWluZyBvZmZlcmVkIGV2ZW4gdGhvdWdoIHRoZSBIVE1MIGxvb2tzXG4gICAqIHBlcmZlY3QuIFN1cHBseWluZyB0aGUgdGV4dCBwYXJ0IGRpcmVjdGx5IGtlZXBzIHRoZSBuaWNlIHRlbXBsYXRlIEFORCB0aGVcbiAgICogbGF5b3V0IHRob3NlIGNsaWVudHMgZXhwZWN0LlxuICAgKlxuICAgKiBLZWVwIHRoZSBzYW1lIGluZm9ybWF0aW9uIGluIGJvdGggcGFydHM7IGEgdGV4dCBhbHRlcm5hdGl2ZSB0aGF0IGRpc2FncmVlc1xuICAgKiB3aXRoIHRoZSBIVE1MIHJlYWRzIGFzIHBoaXNoaW5nIHRvIHNwYW0gZmlsdGVycy5cbiAgICovXG4gIHRleHQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQcmVoZWFkZXIgdGV4dCBmb3IgdGhlIEhUTUwgcGFydCAtIHRoZSBzbmlwcGV0IHNob3duIGJlc2lkZSB0aGUgc3ViamVjdCBpbiBhblxuICAgKiBpbmJveCBsaXN0LCBhbmQgdGhlIGJvZHkgb2YgdGhlIFBVU0ggTk9USUZJQ0FUSU9OIGEgbW9iaWxlIG1haWwgYXBwIHBvc3RzLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3ViamVjdC5cbiAgICpcbiAgICogRGVsaXZlcnktdGltZSByYXRoZXIgdGhhbiBwYXJ0IG9mIHtAbGluayBFbWFpbE1lc3NhZ2V9IGZvciB0aGUgc2FtZSByZWFzb24gYXNcbiAgICogYHRleHRgOiBpdCBpcyBwcmVzZW50YXRpb24gdGhlIHNlbmRpbmcgQ09ERSBjaG9vc2VzLCBub3QgY29udGVudCBhIG1vZGVsXG4gICAqIGNvbXBvc2VzLiBUaGUgb25lLXRpbWUtY29kZSBwYXRoIHNldHMgaXQgc28gdGhlIGNvZGUgaXRzZWxmIHJpZGVzIGluIHRoZVxuICAgKiBub3RpZmljYXRpb24sIHdoaWNoIGlzIHRoZSBvbmx5IHRleHQgaU9TIGF1dG9maWxsIGdldHMgdG8gcmVhZC5cbiAgICovXG4gIHByZXZpZXc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VuZCAoU01UUCBtb2RlKSBvciBwZXJzaXN0IChmaWxlL291dGJveCBtb2RlKSBvbmUgbWVzc2FnZSBmcm9tIHRoZVxuICogcmVzb2x2ZWQgYGZyb21gIGFkZHJlc3MuIGB0b2AgKGFuZCBvcHRpb25hbCBgY2NgIC8gYGJjY2ApIGVhY2ggYWNjZXB0XG4gKiBvbmUgb3IgbW9yZSBhZGRyZXNzZXMsIGFuZCBgYXR0YWNobWVudHNgIGFyZSBmb3J3YXJkZWQgYXMgZmlsZXMuIFRoZVxuICogYm9keSBpcyByZW5kZXJlZCBieSBSZWFjdCBFbWFpbCBpbnRvIG1hdGNoaW5nIHBsYWluLXRleHQgYW5kIEhUTUwgTUlNRVxuICogYWx0ZXJuYXRpdmVzLCBhbmQgdGhlIG91dGJveCBlbWJlZHMgdGhlXG4gKiByZW5kZXJlZCBIVE1MIGluIGEgZG9jdW1lbnQuIEluIGZpbGUgbW9kZSB0aGUgcmV0dXJuZWQgYG1lc3NhZ2VJZGAgaXNcbiAqIHRoZSBwYXRoIHdyaXR0ZW4uIFRocm93cyB3aGVuIGB0b2AgY2FycmllcyBubyByZWNpcGllbnQsIHdoZW4gdGhlIGJvZHlcbiAqIG9yIGF0dGFjaG1lbnRzIGV4Y2VlZCB0aGUgcGx1Z2luJ3MgY2Fwcywgb3Igd2hlbiBgZnJvbWAgaXMgbm90IHBlcm1pdHRlZFxuICogYnkgdGhlIGVmZmVjdGl2ZSBzZW5kZXIgYWxsb3ctbGlzdC5cbiAqXG4gKiBUaGUgcmVjaXBpZW50LCBjYXAsIGFuZCBzZW5kZXIgY2hlY2tzIHJ1biBiZWZvcmUgdGhlIGludGVyY2VwdG9yIGNoYWluIHNvXG4gKiB0aGVpciBzcGVjaWZpYyBzdGF0dXMgYW5kIGFjdGlvbmFibGUgbWVzc2FnZSByZWFjaCB0aGUgY2FsbGVyIGluc3RlYWQgb2ZcbiAqIHRoZSBjaGFpbidzIHN0YWJsZSBmYWlsdXJlIHRleHQuIGBzaWduYWxgIGNhbmNlbHMgdGhlIHNlbmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kRW1haWwoXG4gIG1lc3NhZ2U6IEVtYWlsTWVzc2FnZSxcbiAgZnJvbTogc3RyaW5nLFxuICBzaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgb3B0aW9ucz86IFNlbmRFbWFpbE9wdGlvbnMsXG4pOiBQcm9taXNlPEVtYWlsUmVzdWx0PiB7XG4gIGlmIChtZXNzYWdlLnRvLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IFZhbGlkYXRpb25FcnJvci5taXNzaW5nRmllbGQoXCJ0b1wiKTtcbiAgfVxuICBhc3NlcnRNZXNzYWdlV2l0aGluQ2FwcyhtZXNzYWdlKTtcbiAgYXNzZXJ0U2VuZGVyQWxsb3dlZChmcm9tLCBnZXRFbWFpbFJ1bnRpbWUoKS5jb25maWcuYWxsb3dlZFNlbmRlcnMpO1xuICByZXR1cm4gZXhlY3V0ZVdyaXRlKFxuICAgIFwic2VuZFwiLFxuICAgIEVNQUlMX1NFTkRfU0VUVElOR1MsXG4gICAgKGV4ZWN1dGVTaWduYWwpID0+IGRpc3BhdGNoKG1lc3NhZ2UsIGZyb20sIGV4ZWN1dGVTaWduYWwsIG9wdGlvbnMpLFxuICAgIHNpZ25hbCxcbiAgKTtcbn1cbiJdfQ==
|