@dbx-tools/teams 0.6.88 → 0.6.90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/src/config.js +9 -9
- package/lib/src/connector.d.ts +2 -2
- package/lib/src/connector.js +1 -1
- package/lib/src/conversation.d.ts +8 -8
- package/lib/src/conversation.js +3 -3
- package/lib/src/messaging.d.ts +3 -3
- package/lib/src/messaging.js +1 -1
- package/lib/src/plugin.js +4 -4
- package/package.json +4 -4
- package/src/config.ts +10 -10
- package/src/connector.ts +2 -2
- package/src/conversation.ts +10 -10
- package/src/messaging.ts +3 -3
- package/src/plugin.ts +4 -4
package/lib/src/config.js
CHANGED
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* @module
|
|
29
29
|
*/
|
|
30
30
|
import { ValidationError } from "@databricks/appkit";
|
|
31
|
-
import { config as
|
|
31
|
+
import { config as coreConfig } from "@dbx-tools/core";
|
|
32
32
|
import { object } from "@dbx-tools/shared-core";
|
|
33
33
|
import { card } from "@dbx-tools/shared-teams";
|
|
34
34
|
/** Dedicated override for the Adaptive Card schema version the builder targets. */
|
|
@@ -104,27 +104,27 @@ export const TEAMS_CONFIG_SCHEMA = {
|
|
|
104
104
|
* valid absolute URL, since that is a deploy-time mistake.
|
|
105
105
|
*/
|
|
106
106
|
export function resolveTeamsConfig(overrides) {
|
|
107
|
-
const cardVersion =
|
|
107
|
+
const cardVersion = coreConfig.string(overrides?.cardVersion, CARD_VERSION_ENV, coreConfig.ENV_ONLY) ??
|
|
108
108
|
card.ADAPTIVE_CARD_VERSION;
|
|
109
|
-
const webhookUrl =
|
|
109
|
+
const webhookUrl = coreConfig.string(overrides?.webhookUrl, WEBHOOK_URL_ENV, coreConfig.ENV_ONLY);
|
|
110
110
|
if (webhookUrl !== undefined && !isHttpsUrl(webhookUrl)) {
|
|
111
111
|
throw ValidationError.invalidValue(WEBHOOK_URL_ENV, webhookUrl, "an absolute https URL for the Teams webhook");
|
|
112
112
|
}
|
|
113
|
-
const agentPlugin =
|
|
113
|
+
const agentPlugin = coreConfig.string(overrides?.agentPlugin, AGENT_PLUGIN_ENV, coreConfig.ENV_ONLY) ??
|
|
114
114
|
DEFAULT_AGENT_PLUGIN;
|
|
115
115
|
// Two independent conditions must BOTH hold: the operator asked for it, and
|
|
116
116
|
// this is a development build. Gating on `NODE_ENV` as well means a stray
|
|
117
117
|
// variable in a production environment cannot silently expose the endpoint.
|
|
118
|
-
const requested =
|
|
118
|
+
const requested = coreConfig.boolean(overrides?.allowUnauthenticated, ALLOW_UNAUTHENTICATED_ENV, coreConfig.ENV_ONLY);
|
|
119
119
|
const allowUnauthenticated = requested === true && process.env.NODE_ENV === "development";
|
|
120
120
|
return {
|
|
121
121
|
cardVersion,
|
|
122
122
|
agentPlugin,
|
|
123
123
|
allowUnauthenticated,
|
|
124
124
|
...object.optional("webhookUrl", webhookUrl),
|
|
125
|
-
...object.optional("appId",
|
|
126
|
-
...object.optional("appPassword",
|
|
127
|
-
...object.optional("appTenantId",
|
|
125
|
+
...object.optional("appId", coreConfig.string(overrides?.appId, APP_ID_ENVS, coreConfig.ENV_ONLY)),
|
|
126
|
+
...object.optional("appPassword", coreConfig.string(overrides?.appPassword, APP_PASSWORD_ENVS, coreConfig.ENV_ONLY)),
|
|
127
|
+
...object.optional("appTenantId", coreConfig.string(overrides?.appTenantId, APP_TENANT_ENVS, coreConfig.ENV_ONLY)),
|
|
128
128
|
};
|
|
129
129
|
}
|
|
130
130
|
/** Whether `value` parses as an absolute HTTPS URL. */
|
|
@@ -136,4 +136,4 @@ function isHttpsUrl(value) {
|
|
|
136
136
|
return false;
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUVILE9BQU8sRUFBRSxlQUFlLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRy9DLG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQztBQUVyRCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDO0FBRW5ELDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQztBQUVyRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFVLENBQUM7QUFFekUsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsb0JBQW9CLEVBQUUsd0JBQXdCLENBQVUsQ0FBQztBQUUzRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSx5QkFBeUIsQ0FBVSxDQUFDO0FBRTNGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyw2QkFBNkIsQ0FBQztBQUV2RTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUM7QUFtRjdDLGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBZ0I7SUFDOUMsSUFB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QyxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUN0RjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsdURBQXVEO0FBQ3ZELFNBQVMsVUFBVSxDQUFDLEtBQWE7SUFDL0IsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO0lBQzlDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgVGVhbXMgcGx1Z2luOiB0aGUgdHlwZWQge0BsaW5rIFRlYW1zUGx1Z2luQ29uZmlnfVxuICogKHRoZSBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXQgY29uZmlnKSwgdGhlIEpTT04gU2NoZW1hIHRoZSBtYW5pZmVzdFxuICogcHVibGlzaGVzIGZvciBpdCwgYW5kIHtAbGluayByZXNvbHZlVGVhbXNDb25maWd9IHdoaWNoIGxheWVycyB0aGF0IGNvbmZpZ1xuICogb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZSB7QGxpbmsgUmVzb2x2ZWRUZWFtc0NvbmZpZ30gdGhlXG4gKiBydW50aW1lICsgdG9vbHMgcmVhZC5cbiAqXG4gKiBCdWlsZGluZyBhIGNhcmQgaXMgYSBwdXJlIHRyYW5zZm9ybSwgc28gdGhlIGNvbmZpZyBpcyBkZWxpYmVyYXRlbHkgc21hbGw6XG4gKiB0aGUgQWRhcHRpdmUgQ2FyZCB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMsIGFuIG9wdGlvbmFsIFRlYW1zXG4gKiBpbmNvbWluZy13ZWJob29rIFVSTCBhIGRlcGxveW1lbnQgY2FuIHdpcmUgdXAgdG8gYWN0dWFsbHkgUE9TVCBjYXJkcyB0byBhXG4gKiBjaGFubmVsLCBhbmQgd2hpY2ggc2libGluZyBwbHVnaW4gb3ducyB0aGUgYWdlbnRzIHRoZSBjb252ZXJzYXRpb24gZW5kcG9pbnRcbiAqIGFuc3dlcnMgd2l0aC5cbiAqXG4gKiBUaGUgcmVtYWluaW5nIGZpZWxkcyBhcmUgdGhlIEF6dXJlIEJvdCByZWdpc3RyYXRpb24gYSByZWFsIFRlYW1zIGNoYW5uZWxcbiAqIG5lZWRzOiBgYXBwSWRgIC8gYGFwcFBhc3N3b3JkYCAodGhlIGJvdCdzIEVudHJhIGFwcGxpY2F0aW9uIGNyZWRlbnRpYWxzLCB1c2VkXG4gKiBib3RoIHRvIHZhbGlkYXRlIHRoZSBpbmJvdW5kIEpXVCBhdWRpZW5jZSBhbmQgdG8gZmV0Y2ggdGhlIG91dGJvdW5kIENvbm5lY3RvclxuICogdG9rZW4pIGFuZCBgYXBwVGVuYW50SWRgIChzZXQgb25seSBmb3IgYSBzaW5nbGUtdGVuYW50IGJvdCkuIFdoZW4gbm8gYGFwcElkYFxuICogaXMgY29uZmlndXJlZCB0aGUgYC9tZXNzYWdlc2AgZW5kcG9pbnQgc3RheXMgTU9VTlRFRCBidXQgcmVmdXNlcyBldmVyeVxuICogcmVxdWVzdCwgc28gYW4gdW5jb25maWd1cmVkIGRlcGxveW1lbnQgY2Fubm90IGFjY2lkZW50YWxseSBleHBvc2UgYW5cbiAqIHVuYXV0aGVudGljYXRlZCBib3QgZW5kcG9pbnQuXG4gKlxuICogRW52IGZhbGxiYWNrczogYFRFQU1TX0NBUkRfVkVSU0lPTmAsIGBURUFNU19XRUJIT09LX1VSTGAsXG4gKiBgVEVBTVNfQUdFTlRfUExVR0lOYCwgYFRFQU1TX0FQUF9JRGAsIGBURUFNU19BUFBfUEFTU1dPUkRgLFxuICogYFRFQU1TX0FQUF9URU5BTlRfSURgLiBUaGUgYE1JQ1JPU09GVF9BUFBfKmAgc3BlbGxpbmdzIHRoZSBCb3QgRnJhbWV3b3JrIFNES1xuICogdXNlcyBhcmUgYWNjZXB0ZWQgYXMgYWxpYXNlcyBzbyBhbiBleGlzdGluZyBib3QncyBlbnZpcm9ubWVudCBkcm9wcyBpblxuICogdW5jaGFuZ2VkLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIHR5cGUgQmFzZVBsdWdpbkNvbmZpZyB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGNvbmZpZyBhcyBydW50aW1lQ29uZmlnIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGNhcmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtdGVhbXNcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcblxuLyoqIERlZGljYXRlZCBvdmVycmlkZSBmb3IgdGhlIEFkYXB0aXZlIENhcmQgc2NoZW1hIHZlcnNpb24gdGhlIGJ1aWxkZXIgdGFyZ2V0cy4gKi9cbmV4cG9ydCBjb25zdCBDQVJEX1ZFUlNJT05fRU5WID0gXCJURUFNU19DQVJEX1ZFUlNJT05cIjtcblxuLyoqIEVudmlyb25tZW50IG5hbWUgZm9yIGFuIG9wdGlvbmFsIFRlYW1zIGluY29taW5nLXdlYmhvb2sgVVJMLiAqL1xuZXhwb3J0IGNvbnN0IFdFQkhPT0tfVVJMX0VOViA9IFwiVEVBTVNfV0VCSE9PS19VUkxcIjtcblxuLyoqIEVudmlyb25tZW50IG5hbWUgb3ZlcnJpZGluZyB3aGljaCBzaWJsaW5nIHBsdWdpbiBwcm92aWRlcyB0aGUgYWdlbnRzLiAqL1xuZXhwb3J0IGNvbnN0IEFHRU5UX1BMVUdJTl9FTlYgPSBcIlRFQU1TX0FHRU5UX1BMVUdJTlwiO1xuXG4vKipcbiAqIEVudmlyb25tZW50IG5hbWVzIGZvciB0aGUgYm90J3MgRW50cmEgYXBwIGlkLCBpbiBwcmVjZWRlbmNlIG9yZGVyLiBUaGVcbiAqIGBNSUNST1NPRlRfQVBQX0lEYCBhbGlhcyBpcyB3aGF0IHRoZSBCb3QgRnJhbWV3b3JrIFNESyBhbmQgdGhlIEF6dXJlIHBvcnRhbCdzXG4gKiBnZW5lcmF0ZWQgc2V0dGluZ3MgdXNlLCBzbyBhbiBleGlzdGluZyBib3QgZGVwbG95bWVudCBuZWVkcyBubyBuZXcgdmFyaWFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBBUFBfSURfRU5WUyA9IFtcIlRFQU1TX0FQUF9JRFwiLCBcIk1JQ1JPU09GVF9BUFBfSURcIl0gYXMgY29uc3Q7XG5cbi8qKiBFbnZpcm9ubWVudCBuYW1lcyBmb3IgdGhlIGJvdCdzIGNsaWVudCBzZWNyZXQsIGluIHByZWNlZGVuY2Ugb3JkZXIuICovXG5leHBvcnQgY29uc3QgQVBQX1BBU1NXT1JEX0VOVlMgPSBbXCJURUFNU19BUFBfUEFTU1dPUkRcIiwgXCJNSUNST1NPRlRfQVBQX1BBU1NXT1JEXCJdIGFzIGNvbnN0O1xuXG4vKipcbiAqIEVudmlyb25tZW50IG5hbWVzIGZvciB0aGUgYm90J3MgdGVuYW50LCBpbiBwcmVjZWRlbmNlIG9yZGVyLiBTZXQgb25seSBmb3IgYVxuICogc2luZ2xlLXRlbmFudCBib3Q7IGEgbXVsdGktdGVuYW50IGJvdCBsZWF2ZXMgaXQgdW5zZXQuXG4gKi9cbmV4cG9ydCBjb25zdCBBUFBfVEVOQU5UX0VOVlMgPSBbXCJURUFNU19BUFBfVEVOQU5UX0lEXCIsIFwiTUlDUk9TT0ZUX0FQUF9URU5BTlRfSURcIl0gYXMgY29uc3Q7XG5cbi8qKlxuICogRW52aXJvbm1lbnQgbmFtZSBmb3IgdGhlIHVuYXV0aGVudGljYXRlZC1tZXNzYWdpbmcgZXNjYXBlIGhhdGNoLiBOYW1lZFxuICogYFRFQU1TX0FMTE9XX1VOQVVUSEVOVElDQVRFRGAgKHJhdGhlciB0aGFuIHNvbWV0aGluZyBzb2Z0ZXIgbGlrZSBgVEVBTVNfREVWYClcbiAqIHNvIHdoYXQgaXQgZGlzYWJsZXMgaXMgdW5taXN0YWthYmxlIGluIGEgc2hlbGwgaGlzdG9yeSBvciBkZXBsb3kgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBBTExPV19VTkFVVEhFTlRJQ0FURURfRU5WID0gXCJURUFNU19BTExPV19VTkFVVEhFTlRJQ0FURURcIjtcblxuLyoqXG4gKiBEZWZhdWx0IHJlZ2lzdGVyZWQgbmFtZSBvZiB0aGUgcGx1Z2luIHRoZSBjb252ZXJzYXRpb24gZW5kcG9pbnQgYXNrcyBmb3IgYW5cbiAqIGFnZW50LiBgbWFzdHJhYCBpcyB0aGUgbmFtZSBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYCByZWdpc3RlcnMgdW5kZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FHRU5UX1BMVUdJTiA9IFwibWFzdHJhXCI7XG5cbi8qKiBBcHBLaXQgY29uZmlnIGFjY2VwdGVkIGJ5IHRoZSBUZWFtcyBwbHVnaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIFRlYW1zUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBBZGFwdGl2ZSBDYXJkIHNjaGVtYSB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMuIERlZmF1bHRzIHRvXG4gICAqIHtAbGluayBjYXJkLkFEQVBUSVZFX0NBUkRfVkVSU0lPTn0gKGBcIjEuNVwiYCwgd2hhdCBUZWFtcyBzdXBwb3J0cykuIEZhbGxzXG4gICAqIGJhY2sgdG8gYFRFQU1TX0NBUkRfVkVSU0lPTmAuXG4gICAqL1xuICBjYXJkVmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFRlYW1zIGluY29taW5nLXdlYmhvb2sgVVJMLiBXaGVuIHNldCwgdGhlIHBsdWdpbidzIGBwb3N0Q2FyZGBcbiAgICogZXhwb3J0IC8gcm91dGUgcG9zdHMgdGhlIGNvbXBpbGVkIGNhcmQgdG8gdGhpcyBjaGFubmVsOyB3aGVuIHVuc2V0LFxuICAgKiBwb3N0aW5nIGlzIGRpc2FibGVkIGFuZCB0aGUgcGx1Z2luIG9ubHkgYnVpbGRzIGNhcmRzIGZvciB0aGUgVUkgdG8gcmVuZGVyLlxuICAgKiBGYWxscyBiYWNrIHRvIGBURUFNU19XRUJIT09LX1VSTGAuXG4gICAqL1xuICB3ZWJob29rVXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBzaWJsaW5nIHBsdWdpbiB3aG9zZSBhZ2VudHMgYW5zd2VyIGEgY29udmVyc2F0aW9uXG4gICAqIHR1cm4uIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0FHRU5UX1BMVUdJTn0gKGBcIm1hc3RyYVwiYCk7IHNldCBpdCB3aGVuIHRoZVxuICAgKiBNYXN0cmEgcGx1Z2luIGlzIG1vdW50ZWQgdW5kZXIgYSBgY29uZmlnLm5hbWVgIG92ZXJyaWRlLiBGYWxscyBiYWNrIHRvXG4gICAqIGBURUFNU19BR0VOVF9QTFVHSU5gLlxuICAgKi9cbiAgYWdlbnRQbHVnaW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYm90J3MgRW50cmEgYXBwbGljYXRpb24gKGNsaWVudCkgaWQgZnJvbSBpdHMgQXp1cmUgQm90IHJlZ2lzdHJhdGlvbi5cbiAgICogUmVxdWlyZWQgYmVmb3JlIGBQT1NUIC9hcGkvdGVhbXMvbWVzc2FnZXNgIHdpbGwgYWNjZXB0IGEgcmVxdWVzdDogaXQgaXMgdGhlXG4gICAqIGF1ZGllbmNlIGFuIGluYm91bmQgQm90IEZyYW1ld29yayB0b2tlbiBtdXN0IGNhcnJ5LCBhbmQgdGhlIGNsaWVudCBpZCB1c2VkXG4gICAqIHRvIGZldGNoIGFuIG91dGJvdW5kIENvbm5lY3RvciB0b2tlbi4gRmFsbHMgYmFjayB0byBgVEVBTVNfQVBQX0lEYCAvXG4gICAqIGBNSUNST1NPRlRfQVBQX0lEYC5cbiAgICovXG4gIGFwcElkPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xpZW50IHNlY3JldCBmb3Ige0BsaW5rIGFwcElkfS4gTmVlZGVkIHRvIHNlbmQgcmVwbGllcyB0aHJvdWdoIHRoZVxuICAgKiBDb25uZWN0b3IgQVBJOyB3aXRob3V0IGl0IGluYm91bmQgYWN0aXZpdGllcyBzdGlsbCB2YWxpZGF0ZSBidXQgdGhlIGJvdFxuICAgKiBjYW5ub3QgYW5zd2VyLiBGYWxscyBiYWNrIHRvIGBURUFNU19BUFBfUEFTU1dPUkRgIC9cbiAgICogYE1JQ1JPU09GVF9BUFBfUEFTU1dPUkRgLlxuICAgKi9cbiAgYXBwUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZW5hbnQgaWQgZm9yIGEgU0lOR0xFLXRlbmFudCBib3QgcmVnaXN0cmF0aW9uLiBMZWF2ZSB1bnNldCBmb3IgYVxuICAgKiBtdWx0aS10ZW5hbnQgYm90LiBGYWxscyBiYWNrIHRvIGBURUFNU19BUFBfVEVOQU5UX0lEYCAvXG4gICAqIGBNSUNST1NPRlRfQVBQX1RFTkFOVF9JRGAuXG4gICAqL1xuICBhcHBUZW5hbnRJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNlcnZlIGBQT1NUIC9tZXNzYWdlc2Agd2l0aCBOTyBpbmJvdW5kIHRva2VuIHZhbGlkYXRpb24sIGFuZCByZXBseSBpbiB0aGVcbiAgICogSFRUUCByZXNwb25zZSBpbnN0ZWFkIG9mIHRocm91Z2ggdGhlIENvbm5lY3RvciBBUEkuXG4gICAqXG4gICAqIFRoaXMgZXhpc3RzIHNvIHRoZSBtZXNzYWdpbmcgZW5kcG9pbnQgY2FuIGJlIGV4ZXJjaXNlZCBsb2NhbGx5IC0gYnkgdGhlXG4gICAqIGluLXJlcG8gcHJldmlldyBjaGF0LCBhIGBjdXJsYCwgb3IgdGhlIEJvdCBGcmFtZXdvcmsgRW11bGF0b3IgLSB3aXRob3V0IGFuXG4gICAqIEF6dXJlIEJvdCByZWdpc3RyYXRpb24uIEl0IHJlbW92ZXMgdGhlIGVuZHBvaW50J3MgT05MWSB0cnVzdCBib3VuZGFyeTogYW55XG4gICAqIGNhbGxlciB0aGF0IGNhbiByZWFjaCB0aGUgcm91dGUgY2FuIGRyaXZlIHRoZSBhZ2VudCBhbmQgcmVhZCBpdHMgYW5zd2Vycy5cbiAgICpcbiAgICogTmV2ZXIgZW5hYmxlIGl0IG9uIGEgZGVwbG95bWVudCByZWFjaGFibGUgZnJvbSB0aGUgaW50ZXJuZXQuIEl0IGlzIGlnbm9yZWRcbiAgICogdW5sZXNzIGBOT0RFX0VOVmAgaXMgYGRldmVsb3BtZW50YCAoc2VlIHtAbGluayByZXNvbHZlVGVhbXNDb25maWd9KSwgc28gYVxuICAgKiBwcm9kdWN0aW9uIGJ1aWxkIGNhbm5vdCBiZSB0YWxrZWQgaW50byBpdCBieSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbG9uZS5cbiAgICogRmFsbHMgYmFjayB0byBgVEVBTVNfQUxMT1dfVU5BVVRIRU5USUNBVEVEYC5cbiAgICovXG4gIGFsbG93VW5hdXRoZW50aWNhdGVkPzogYm9vbGVhbjtcbn1cblxuLyoqIFRoZSBjb25jcmV0ZSBjb25maWcgdGhlIHJ1bnRpbWUgcmVhZHMsIGFmdGVyIGNvbmZpZyArIGVudiByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFRlYW1zQ29uZmlnIHtcbiAgLyoqIEFkYXB0aXZlIENhcmQgc2NoZW1hIHZlcnNpb24gdGhlIGJ1aWxkZXIgc3RhbXBzIG9udG8gZXZlcnkgZG9jdW1lbnQuICovXG4gIGNhcmRWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBUZWFtcyBpbmNvbWluZy13ZWJob29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBwb3N0aW5nIGlzIGRpc2FibGVkLiAqL1xuICB3ZWJob29rVXJsPzogc3RyaW5nO1xuICAvKiogUmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBwbHVnaW4gdGhlIGNvbnZlcnNhdGlvbiBlbmRwb2ludCByZXNvbHZlcyBhZ2VudHMgZnJvbS4gKi9cbiAgYWdlbnRQbHVnaW46IHN0cmluZztcbiAgLyoqIEJvdCBhcHAgKGNsaWVudCkgaWQsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gYm90IHJlZ2lzdHJhdGlvbiBpcyBjb25maWd1cmVkLiAqL1xuICBhcHBJZD86IHN0cmluZztcbiAgLyoqIEJvdCBjbGllbnQgc2VjcmV0LCBvciBgdW5kZWZpbmVkYCB3aGVuIHJlcGxpZXMgY2Fubm90IGJlIHNlbnQuICovXG4gIGFwcFBhc3N3b3JkPzogc3RyaW5nO1xuICAvKiogVGVuYW50IGlkIGZvciBhIHNpbmdsZS10ZW5hbnQgYm90LCBvciBgdW5kZWZpbmVkYCBmb3IgYSBtdWx0aS10ZW5hbnQgb25lLiAqL1xuICBhcHBUZW5hbnRJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgYFBPU1QgL21lc3NhZ2VzYCBzZXJ2ZXMgdHVybnMgd2l0aCBOTyB0b2tlbiB2YWxpZGF0aW9uLiBTZWVcbiAgICoge0BsaW5rIFRlYW1zUGx1Z2luQ29uZmlnLmFsbG93VW5hdXRoZW50aWNhdGVkfS5cbiAgICovXG4gIGFsbG93VW5hdXRoZW50aWNhdGVkOiBib29sZWFuO1xufVxuXG4vKiogSlNPTiBTY2hlbWEgcHVibGlzaGVkIGluIHRoZSBwbHVnaW4gbWFuaWZlc3QgZm9yIHtAbGluayBUZWFtc1BsdWdpbkNvbmZpZ30uICovXG5leHBvcnQgY29uc3QgVEVBTVNfQ09ORklHX1NDSEVNQTogSlNPTlNjaGVtYTcgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgcHJvcGVydGllczoge1xuICAgIGNhcmRWZXJzaW9uOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBBZGFwdGl2ZSBDYXJkIHNjaGVtYSB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMuICR7Q0FSRF9WRVJTSU9OX0VOVn0gb3ZlcnJpZGVzIGl0LmAsXG4gICAgfSxcbiAgICB3ZWJob29rVXJsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBPcHRpb25hbCBUZWFtcyBpbmNvbWluZy13ZWJob29rIFVSTCB1c2VkIHRvIHBvc3QgY2FyZHMuICR7V0VCSE9PS19VUkxfRU5WfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFnZW50UGx1Z2luOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBSZWdpc3RlcmVkIG5hbWUgb2YgdGhlIHNpYmxpbmcgcGx1Z2luIHdob3NlIGFnZW50cyBhbnN3ZXIgYSBjb252ZXJzYXRpb24gdHVybi4gJHtBR0VOVF9QTFVHSU5fRU5WfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFwcElkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBFbnRyYSBhcHAgKGNsaWVudCkgaWQgb2YgdGhlIEF6dXJlIEJvdCByZWdpc3RyYXRpb24uIFJlcXVpcmVkIGZvciB0aGUgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50LiAke0FQUF9JRF9FTlZTWzBdfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFwcFBhc3N3b3JkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBDbGllbnQgc2VjcmV0IGZvciB0aGUgYm90IGFwcCBpZCwgdXNlZCB0byBmZXRjaCBhbiBvdXRib3VuZCBDb25uZWN0b3IgdG9rZW4uICR7QVBQX1BBU1NXT1JEX0VOVlNbMF19IG92ZXJyaWRlcyBpdC5gLFxuICAgIH0sXG4gICAgYXBwVGVuYW50SWQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogYFRlbmFudCBpZCBmb3IgYSBzaW5nbGUtdGVuYW50IGJvdCByZWdpc3RyYXRpb247IHVuc2V0IGZvciBtdWx0aS10ZW5hbnQuICR7QVBQX1RFTkFOVF9FTlZTWzBdfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFsbG93VW5hdXRoZW50aWNhdGVkOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlNlcnZlIHRoZSBUZWFtcyBtZXNzYWdpbmcgZW5kcG9pbnQgd2l0aCBOTyB0b2tlbiB2YWxpZGF0aW9uLCByZXBseWluZyBpbiBcIiArXG4gICAgICAgIFwidGhlIEhUVFAgcmVzcG9uc2UuIExvY2FsIGRldmVsb3BtZW50IG9ubHk7IGlnbm9yZWQgdW5sZXNzIE5PREVfRU5WIGlzIFwiICtcbiAgICAgICAgYGRldmVsb3BtZW50LiAke0FMTE9XX1VOQVVUSEVOVElDQVRFRF9FTlZ9IG92ZXJyaWRlcyBpdC5gLFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIExheWVyIHRoZSBwbHVnaW4gY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGUgY29uZmlnXG4gKiB0aGUgcnVudGltZSB1c2VzLiBGYWlscyBsb3VkbHkgb24gYSB3ZWJob29rIFVSTCB0aGF0IGlzIHByZXNlbnQgYnV0IG5vdCBhXG4gKiB2YWxpZCBhYnNvbHV0ZSBVUkwsIHNpbmNlIHRoYXQgaXMgYSBkZXBsb3ktdGltZSBtaXN0YWtlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRlYW1zQ29uZmlnKG92ZXJyaWRlcz86IFRlYW1zUGx1Z2luQ29uZmlnKTogUmVzb2x2ZWRUZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNhcmRWZXJzaW9uID1cbiAgICBydW50aW1lQ29uZmlnLnN0cmluZyhvdmVycmlkZXM/LmNhcmRWZXJzaW9uLCBDQVJEX1ZFUlNJT05fRU5WLCBydW50aW1lQ29uZmlnLkVOVl9PTkxZKSA/P1xuICAgIGNhcmQuQURBUFRJVkVfQ0FSRF9WRVJTSU9OO1xuICBjb25zdCB3ZWJob29rVXJsID0gcnVudGltZUNvbmZpZy5zdHJpbmcoXG4gICAgb3ZlcnJpZGVzPy53ZWJob29rVXJsLFxuICAgIFdFQkhPT0tfVVJMX0VOVixcbiAgICBydW50aW1lQ29uZmlnLkVOVl9PTkxZLFxuICApO1xuICBpZiAod2ViaG9va1VybCAhPT0gdW5kZWZpbmVkICYmICFpc0h0dHBzVXJsKHdlYmhvb2tVcmwpKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFdFQkhPT0tfVVJMX0VOVixcbiAgICAgIHdlYmhvb2tVcmwsXG4gICAgICBcImFuIGFic29sdXRlIGh0dHBzIFVSTCBmb3IgdGhlIFRlYW1zIHdlYmhvb2tcIixcbiAgICApO1xuICB9XG4gIGNvbnN0IGFnZW50UGx1Z2luID1cbiAgICBydW50aW1lQ29uZmlnLnN0cmluZyhvdmVycmlkZXM/LmFnZW50UGx1Z2luLCBBR0VOVF9QTFVHSU5fRU5WLCBydW50aW1lQ29uZmlnLkVOVl9PTkxZKSA/P1xuICAgIERFRkFVTFRfQUdFTlRfUExVR0lOO1xuICAvLyBUd28gaW5kZXBlbmRlbnQgY29uZGl0aW9ucyBtdXN0IEJPVEggaG9sZDogdGhlIG9wZXJhdG9yIGFza2VkIGZvciBpdCwgYW5kXG4gIC8vIHRoaXMgaXMgYSBkZXZlbG9wbWVudCBidWlsZC4gR2F0aW5nIG9uIGBOT0RFX0VOVmAgYXMgd2VsbCBtZWFucyBhIHN0cmF5XG4gIC8vIHZhcmlhYmxlIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCBjYW5ub3Qgc2lsZW50bHkgZXhwb3NlIHRoZSBlbmRwb2ludC5cbiAgY29uc3QgcmVxdWVzdGVkID0gcnVudGltZUNvbmZpZy5ib29sZWFuKFxuICAgIG92ZXJyaWRlcz8uYWxsb3dVbmF1dGhlbnRpY2F0ZWQsXG4gICAgQUxMT1dfVU5BVVRIRU5USUNBVEVEX0VOVixcbiAgICBydW50aW1lQ29uZmlnLkVOVl9PTkxZLFxuICApO1xuICBjb25zdCBhbGxvd1VuYXV0aGVudGljYXRlZCA9IHJlcXVlc3RlZCA9PT0gdHJ1ZSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiO1xuICByZXR1cm4ge1xuICAgIGNhcmRWZXJzaW9uLFxuICAgIGFnZW50UGx1Z2luLFxuICAgIGFsbG93VW5hdXRoZW50aWNhdGVkLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcIndlYmhvb2tVcmxcIiwgd2ViaG9va1VybCksXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJhcHBJZFwiLFxuICAgICAgcnVudGltZUNvbmZpZy5zdHJpbmcob3ZlcnJpZGVzPy5hcHBJZCwgQVBQX0lEX0VOVlMsIHJ1bnRpbWVDb25maWcuRU5WX09OTFkpLFxuICAgICksXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJhcHBQYXNzd29yZFwiLFxuICAgICAgcnVudGltZUNvbmZpZy5zdHJpbmcob3ZlcnJpZGVzPy5hcHBQYXNzd29yZCwgQVBQX1BBU1NXT1JEX0VOVlMsIHJ1bnRpbWVDb25maWcuRU5WX09OTFkpLFxuICAgICksXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJhcHBUZW5hbnRJZFwiLFxuICAgICAgcnVudGltZUNvbmZpZy5zdHJpbmcob3ZlcnJpZGVzPy5hcHBUZW5hbnRJZCwgQVBQX1RFTkFOVF9FTlZTLCBydW50aW1lQ29uZmlnLkVOVl9PTkxZKSxcbiAgICApLFxuICB9O1xufVxuXG4vKiogV2hldGhlciBgdmFsdWVgIHBhcnNlcyBhcyBhbiBhYnNvbHV0ZSBIVFRQUyBVUkwuICovXG5mdW5jdGlvbiBpc0h0dHBzVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFVSTCh2YWx1ZSkucHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUVILE9BQU8sRUFBRSxlQUFlLEVBQXlCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRy9DLG1GQUFtRjtBQUNuRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQztBQUVyRCxtRUFBbUU7QUFDbkUsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLG1CQUFtQixDQUFDO0FBRW5ELDRFQUE0RTtBQUM1RSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQztBQUVyRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFVLENBQUM7QUFFekUsMEVBQTBFO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsb0JBQW9CLEVBQUUsd0JBQXdCLENBQVUsQ0FBQztBQUUzRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSx5QkFBeUIsQ0FBVSxDQUFDO0FBRTNGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyw2QkFBNkIsQ0FBQztBQUV2RTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUM7QUFtRjdDLGtGQUFrRjtBQUNsRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBZ0I7SUFDOUMsSUFB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QyxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUNoRjtLQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsdURBQXVEO0FBQ3ZELFNBQVMsVUFBVSxDQUFDLEtBQWE7SUFDL0IsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDO0lBQzlDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciB0aGUgVGVhbXMgcGx1Z2luOiB0aGUgdHlwZWQge0BsaW5rIFRlYW1zUGx1Z2luQ29uZmlnfVxuICogKHRoZSBwbHVnaW4ncyBzbGljZSBvZiBBcHBLaXQgY29uZmlnKSwgdGhlIEpTT04gU2NoZW1hIHRoZSBtYW5pZmVzdFxuICogcHVibGlzaGVzIGZvciBpdCwgYW5kIHtAbGluayByZXNvbHZlVGVhbXNDb25maWd9IHdoaWNoIGxheWVycyB0aGF0IGNvbmZpZ1xuICogb3ZlciBlbnZpcm9ubWVudCBkZWZhdWx0cyBpbnRvIHRoZSBjb25jcmV0ZSB7QGxpbmsgUmVzb2x2ZWRUZWFtc0NvbmZpZ30gdGhlXG4gKiBydW50aW1lICsgdG9vbHMgcmVhZC5cbiAqXG4gKiBCdWlsZGluZyBhIGNhcmQgaXMgYSBwdXJlIHRyYW5zZm9ybSwgc28gdGhlIGNvbmZpZyBpcyBkZWxpYmVyYXRlbHkgc21hbGw6XG4gKiB0aGUgQWRhcHRpdmUgQ2FyZCB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMsIGFuIG9wdGlvbmFsIFRlYW1zXG4gKiBpbmNvbWluZy13ZWJob29rIFVSTCBhIGRlcGxveW1lbnQgY2FuIHdpcmUgdXAgdG8gYWN0dWFsbHkgUE9TVCBjYXJkcyB0byBhXG4gKiBjaGFubmVsLCBhbmQgd2hpY2ggc2libGluZyBwbHVnaW4gb3ducyB0aGUgYWdlbnRzIHRoZSBjb252ZXJzYXRpb24gZW5kcG9pbnRcbiAqIGFuc3dlcnMgd2l0aC5cbiAqXG4gKiBUaGUgcmVtYWluaW5nIGZpZWxkcyBhcmUgdGhlIEF6dXJlIEJvdCByZWdpc3RyYXRpb24gYSByZWFsIFRlYW1zIGNoYW5uZWxcbiAqIG5lZWRzOiBgYXBwSWRgIC8gYGFwcFBhc3N3b3JkYCAodGhlIGJvdCdzIEVudHJhIGFwcGxpY2F0aW9uIGNyZWRlbnRpYWxzLCB1c2VkXG4gKiBib3RoIHRvIHZhbGlkYXRlIHRoZSBpbmJvdW5kIEpXVCBhdWRpZW5jZSBhbmQgdG8gZmV0Y2ggdGhlIG91dGJvdW5kIENvbm5lY3RvclxuICogdG9rZW4pIGFuZCBgYXBwVGVuYW50SWRgIChzZXQgb25seSBmb3IgYSBzaW5nbGUtdGVuYW50IGJvdCkuIFdoZW4gbm8gYGFwcElkYFxuICogaXMgY29uZmlndXJlZCB0aGUgYC9tZXNzYWdlc2AgZW5kcG9pbnQgc3RheXMgTU9VTlRFRCBidXQgcmVmdXNlcyBldmVyeVxuICogcmVxdWVzdCwgc28gYW4gdW5jb25maWd1cmVkIGRlcGxveW1lbnQgY2Fubm90IGFjY2lkZW50YWxseSBleHBvc2UgYW5cbiAqIHVuYXV0aGVudGljYXRlZCBib3QgZW5kcG9pbnQuXG4gKlxuICogRW52IGZhbGxiYWNrczogYFRFQU1TX0NBUkRfVkVSU0lPTmAsIGBURUFNU19XRUJIT09LX1VSTGAsXG4gKiBgVEVBTVNfQUdFTlRfUExVR0lOYCwgYFRFQU1TX0FQUF9JRGAsIGBURUFNU19BUFBfUEFTU1dPUkRgLFxuICogYFRFQU1TX0FQUF9URU5BTlRfSURgLiBUaGUgYE1JQ1JPU09GVF9BUFBfKmAgc3BlbGxpbmdzIHRoZSBCb3QgRnJhbWV3b3JrIFNES1xuICogdXNlcyBhcmUgYWNjZXB0ZWQgYXMgYWxpYXNlcyBzbyBhbiBleGlzdGluZyBib3QncyBlbnZpcm9ubWVudCBkcm9wcyBpblxuICogdW5jaGFuZ2VkLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uRXJyb3IsIHR5cGUgQmFzZVBsdWdpbkNvbmZpZyB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7IGNvbmZpZyBhcyBjb3JlQ29uZmlnIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsgb2JqZWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGNhcmQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtdGVhbXNcIjtcbmltcG9ydCB0eXBlIHsgSlNPTlNjaGVtYTcgfSBmcm9tIFwianNvbi1zY2hlbWFcIjtcblxuLyoqIERlZGljYXRlZCBvdmVycmlkZSBmb3IgdGhlIEFkYXB0aXZlIENhcmQgc2NoZW1hIHZlcnNpb24gdGhlIGJ1aWxkZXIgdGFyZ2V0cy4gKi9cbmV4cG9ydCBjb25zdCBDQVJEX1ZFUlNJT05fRU5WID0gXCJURUFNU19DQVJEX1ZFUlNJT05cIjtcblxuLyoqIEVudmlyb25tZW50IG5hbWUgZm9yIGFuIG9wdGlvbmFsIFRlYW1zIGluY29taW5nLXdlYmhvb2sgVVJMLiAqL1xuZXhwb3J0IGNvbnN0IFdFQkhPT0tfVVJMX0VOViA9IFwiVEVBTVNfV0VCSE9PS19VUkxcIjtcblxuLyoqIEVudmlyb25tZW50IG5hbWUgb3ZlcnJpZGluZyB3aGljaCBzaWJsaW5nIHBsdWdpbiBwcm92aWRlcyB0aGUgYWdlbnRzLiAqL1xuZXhwb3J0IGNvbnN0IEFHRU5UX1BMVUdJTl9FTlYgPSBcIlRFQU1TX0FHRU5UX1BMVUdJTlwiO1xuXG4vKipcbiAqIEVudmlyb25tZW50IG5hbWVzIGZvciB0aGUgYm90J3MgRW50cmEgYXBwIGlkLCBpbiBwcmVjZWRlbmNlIG9yZGVyLiBUaGVcbiAqIGBNSUNST1NPRlRfQVBQX0lEYCBhbGlhcyBpcyB3aGF0IHRoZSBCb3QgRnJhbWV3b3JrIFNESyBhbmQgdGhlIEF6dXJlIHBvcnRhbCdzXG4gKiBnZW5lcmF0ZWQgc2V0dGluZ3MgdXNlLCBzbyBhbiBleGlzdGluZyBib3QgZGVwbG95bWVudCBuZWVkcyBubyBuZXcgdmFyaWFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBBUFBfSURfRU5WUyA9IFtcIlRFQU1TX0FQUF9JRFwiLCBcIk1JQ1JPU09GVF9BUFBfSURcIl0gYXMgY29uc3Q7XG5cbi8qKiBFbnZpcm9ubWVudCBuYW1lcyBmb3IgdGhlIGJvdCdzIGNsaWVudCBzZWNyZXQsIGluIHByZWNlZGVuY2Ugb3JkZXIuICovXG5leHBvcnQgY29uc3QgQVBQX1BBU1NXT1JEX0VOVlMgPSBbXCJURUFNU19BUFBfUEFTU1dPUkRcIiwgXCJNSUNST1NPRlRfQVBQX1BBU1NXT1JEXCJdIGFzIGNvbnN0O1xuXG4vKipcbiAqIEVudmlyb25tZW50IG5hbWVzIGZvciB0aGUgYm90J3MgdGVuYW50LCBpbiBwcmVjZWRlbmNlIG9yZGVyLiBTZXQgb25seSBmb3IgYVxuICogc2luZ2xlLXRlbmFudCBib3Q7IGEgbXVsdGktdGVuYW50IGJvdCBsZWF2ZXMgaXQgdW5zZXQuXG4gKi9cbmV4cG9ydCBjb25zdCBBUFBfVEVOQU5UX0VOVlMgPSBbXCJURUFNU19BUFBfVEVOQU5UX0lEXCIsIFwiTUlDUk9TT0ZUX0FQUF9URU5BTlRfSURcIl0gYXMgY29uc3Q7XG5cbi8qKlxuICogRW52aXJvbm1lbnQgbmFtZSBmb3IgdGhlIHVuYXV0aGVudGljYXRlZC1tZXNzYWdpbmcgZXNjYXBlIGhhdGNoLiBOYW1lZFxuICogYFRFQU1TX0FMTE9XX1VOQVVUSEVOVElDQVRFRGAgKHJhdGhlciB0aGFuIHNvbWV0aGluZyBzb2Z0ZXIgbGlrZSBgVEVBTVNfREVWYClcbiAqIHNvIHdoYXQgaXQgZGlzYWJsZXMgaXMgdW5taXN0YWthYmxlIGluIGEgc2hlbGwgaGlzdG9yeSBvciBkZXBsb3kgbWFuaWZlc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBBTExPV19VTkFVVEhFTlRJQ0FURURfRU5WID0gXCJURUFNU19BTExPV19VTkFVVEhFTlRJQ0FURURcIjtcblxuLyoqXG4gKiBEZWZhdWx0IHJlZ2lzdGVyZWQgbmFtZSBvZiB0aGUgcGx1Z2luIHRoZSBjb252ZXJzYXRpb24gZW5kcG9pbnQgYXNrcyBmb3IgYW5cbiAqIGFnZW50LiBgbWFzdHJhYCBpcyB0aGUgbmFtZSBgQGRieC10b29scy9hcHBraXQtbWFzdHJhYCByZWdpc3RlcnMgdW5kZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX0FHRU5UX1BMVUdJTiA9IFwibWFzdHJhXCI7XG5cbi8qKiBBcHBLaXQgY29uZmlnIGFjY2VwdGVkIGJ5IHRoZSBUZWFtcyBwbHVnaW4uICovXG5leHBvcnQgaW50ZXJmYWNlIFRlYW1zUGx1Z2luQ29uZmlnIGV4dGVuZHMgQmFzZVBsdWdpbkNvbmZpZyB7XG4gIC8qKlxuICAgKiBBZGFwdGl2ZSBDYXJkIHNjaGVtYSB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMuIERlZmF1bHRzIHRvXG4gICAqIHtAbGluayBjYXJkLkFEQVBUSVZFX0NBUkRfVkVSU0lPTn0gKGBcIjEuNVwiYCwgd2hhdCBUZWFtcyBzdXBwb3J0cykuIEZhbGxzXG4gICAqIGJhY2sgdG8gYFRFQU1TX0NBUkRfVkVSU0lPTmAuXG4gICAqL1xuICBjYXJkVmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIFRlYW1zIGluY29taW5nLXdlYmhvb2sgVVJMLiBXaGVuIHNldCwgdGhlIHBsdWdpbidzIGBwb3N0Q2FyZGBcbiAgICogZXhwb3J0IC8gcm91dGUgcG9zdHMgdGhlIGNvbXBpbGVkIGNhcmQgdG8gdGhpcyBjaGFubmVsOyB3aGVuIHVuc2V0LFxuICAgKiBwb3N0aW5nIGlzIGRpc2FibGVkIGFuZCB0aGUgcGx1Z2luIG9ubHkgYnVpbGRzIGNhcmRzIGZvciB0aGUgVUkgdG8gcmVuZGVyLlxuICAgKiBGYWxscyBiYWNrIHRvIGBURUFNU19XRUJIT09LX1VSTGAuXG4gICAqL1xuICB3ZWJob29rVXJsPzogc3RyaW5nO1xuICAvKipcbiAgICogUmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBzaWJsaW5nIHBsdWdpbiB3aG9zZSBhZ2VudHMgYW5zd2VyIGEgY29udmVyc2F0aW9uXG4gICAqIHR1cm4uIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX0FHRU5UX1BMVUdJTn0gKGBcIm1hc3RyYVwiYCk7IHNldCBpdCB3aGVuIHRoZVxuICAgKiBNYXN0cmEgcGx1Z2luIGlzIG1vdW50ZWQgdW5kZXIgYSBgY29uZmlnLm5hbWVgIG92ZXJyaWRlLiBGYWxscyBiYWNrIHRvXG4gICAqIGBURUFNU19BR0VOVF9QTFVHSU5gLlxuICAgKi9cbiAgYWdlbnRQbHVnaW4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYm90J3MgRW50cmEgYXBwbGljYXRpb24gKGNsaWVudCkgaWQgZnJvbSBpdHMgQXp1cmUgQm90IHJlZ2lzdHJhdGlvbi5cbiAgICogUmVxdWlyZWQgYmVmb3JlIGBQT1NUIC9hcGkvdGVhbXMvbWVzc2FnZXNgIHdpbGwgYWNjZXB0IGEgcmVxdWVzdDogaXQgaXMgdGhlXG4gICAqIGF1ZGllbmNlIGFuIGluYm91bmQgQm90IEZyYW1ld29yayB0b2tlbiBtdXN0IGNhcnJ5LCBhbmQgdGhlIGNsaWVudCBpZCB1c2VkXG4gICAqIHRvIGZldGNoIGFuIG91dGJvdW5kIENvbm5lY3RvciB0b2tlbi4gRmFsbHMgYmFjayB0byBgVEVBTVNfQVBQX0lEYCAvXG4gICAqIGBNSUNST1NPRlRfQVBQX0lEYC5cbiAgICovXG4gIGFwcElkPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xpZW50IHNlY3JldCBmb3Ige0BsaW5rIGFwcElkfS4gTmVlZGVkIHRvIHNlbmQgcmVwbGllcyB0aHJvdWdoIHRoZVxuICAgKiBDb25uZWN0b3IgQVBJOyB3aXRob3V0IGl0IGluYm91bmQgYWN0aXZpdGllcyBzdGlsbCB2YWxpZGF0ZSBidXQgdGhlIGJvdFxuICAgKiBjYW5ub3QgYW5zd2VyLiBGYWxscyBiYWNrIHRvIGBURUFNU19BUFBfUEFTU1dPUkRgIC9cbiAgICogYE1JQ1JPU09GVF9BUFBfUEFTU1dPUkRgLlxuICAgKi9cbiAgYXBwUGFzc3dvcmQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUZW5hbnQgaWQgZm9yIGEgU0lOR0xFLXRlbmFudCBib3QgcmVnaXN0cmF0aW9uLiBMZWF2ZSB1bnNldCBmb3IgYVxuICAgKiBtdWx0aS10ZW5hbnQgYm90LiBGYWxscyBiYWNrIHRvIGBURUFNU19BUFBfVEVOQU5UX0lEYCAvXG4gICAqIGBNSUNST1NPRlRfQVBQX1RFTkFOVF9JRGAuXG4gICAqL1xuICBhcHBUZW5hbnRJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFNlcnZlIGBQT1NUIC9tZXNzYWdlc2Agd2l0aCBOTyBpbmJvdW5kIHRva2VuIHZhbGlkYXRpb24sIGFuZCByZXBseSBpbiB0aGVcbiAgICogSFRUUCByZXNwb25zZSBpbnN0ZWFkIG9mIHRocm91Z2ggdGhlIENvbm5lY3RvciBBUEkuXG4gICAqXG4gICAqIFRoaXMgZXhpc3RzIHNvIHRoZSBtZXNzYWdpbmcgZW5kcG9pbnQgY2FuIGJlIGV4ZXJjaXNlZCBsb2NhbGx5IC0gYnkgdGhlXG4gICAqIGluLXJlcG8gcHJldmlldyBjaGF0LCBhIGBjdXJsYCwgb3IgdGhlIEJvdCBGcmFtZXdvcmsgRW11bGF0b3IgLSB3aXRob3V0IGFuXG4gICAqIEF6dXJlIEJvdCByZWdpc3RyYXRpb24uIEl0IHJlbW92ZXMgdGhlIGVuZHBvaW50J3MgT05MWSB0cnVzdCBib3VuZGFyeTogYW55XG4gICAqIGNhbGxlciB0aGF0IGNhbiByZWFjaCB0aGUgcm91dGUgY2FuIGRyaXZlIHRoZSBhZ2VudCBhbmQgcmVhZCBpdHMgYW5zd2Vycy5cbiAgICpcbiAgICogTmV2ZXIgZW5hYmxlIGl0IG9uIGEgZGVwbG95bWVudCByZWFjaGFibGUgZnJvbSB0aGUgaW50ZXJuZXQuIEl0IGlzIGlnbm9yZWRcbiAgICogdW5sZXNzIGBOT0RFX0VOVmAgaXMgYGRldmVsb3BtZW50YCAoc2VlIHtAbGluayByZXNvbHZlVGVhbXNDb25maWd9KSwgc28gYVxuICAgKiBwcm9kdWN0aW9uIGJ1aWxkIGNhbm5vdCBiZSB0YWxrZWQgaW50byBpdCBieSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBhbG9uZS5cbiAgICogRmFsbHMgYmFjayB0byBgVEVBTVNfQUxMT1dfVU5BVVRIRU5USUNBVEVEYC5cbiAgICovXG4gIGFsbG93VW5hdXRoZW50aWNhdGVkPzogYm9vbGVhbjtcbn1cblxuLyoqIFRoZSBjb25jcmV0ZSBjb25maWcgdGhlIHJ1bnRpbWUgcmVhZHMsIGFmdGVyIGNvbmZpZyArIGVudiByZXNvbHV0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXNvbHZlZFRlYW1zQ29uZmlnIHtcbiAgLyoqIEFkYXB0aXZlIENhcmQgc2NoZW1hIHZlcnNpb24gdGhlIGJ1aWxkZXIgc3RhbXBzIG9udG8gZXZlcnkgZG9jdW1lbnQuICovXG4gIGNhcmRWZXJzaW9uOiBzdHJpbmc7XG4gIC8qKiBUZWFtcyBpbmNvbWluZy13ZWJob29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBwb3N0aW5nIGlzIGRpc2FibGVkLiAqL1xuICB3ZWJob29rVXJsPzogc3RyaW5nO1xuICAvKiogUmVnaXN0ZXJlZCBuYW1lIG9mIHRoZSBwbHVnaW4gdGhlIGNvbnZlcnNhdGlvbiBlbmRwb2ludCByZXNvbHZlcyBhZ2VudHMgZnJvbS4gKi9cbiAgYWdlbnRQbHVnaW46IHN0cmluZztcbiAgLyoqIEJvdCBhcHAgKGNsaWVudCkgaWQsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gYm90IHJlZ2lzdHJhdGlvbiBpcyBjb25maWd1cmVkLiAqL1xuICBhcHBJZD86IHN0cmluZztcbiAgLyoqIEJvdCBjbGllbnQgc2VjcmV0LCBvciBgdW5kZWZpbmVkYCB3aGVuIHJlcGxpZXMgY2Fubm90IGJlIHNlbnQuICovXG4gIGFwcFBhc3N3b3JkPzogc3RyaW5nO1xuICAvKiogVGVuYW50IGlkIGZvciBhIHNpbmdsZS10ZW5hbnQgYm90LCBvciBgdW5kZWZpbmVkYCBmb3IgYSBtdWx0aS10ZW5hbnQgb25lLiAqL1xuICBhcHBUZW5hbnRJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgYFBPU1QgL21lc3NhZ2VzYCBzZXJ2ZXMgdHVybnMgd2l0aCBOTyB0b2tlbiB2YWxpZGF0aW9uLiBTZWVcbiAgICoge0BsaW5rIFRlYW1zUGx1Z2luQ29uZmlnLmFsbG93VW5hdXRoZW50aWNhdGVkfS5cbiAgICovXG4gIGFsbG93VW5hdXRoZW50aWNhdGVkOiBib29sZWFuO1xufVxuXG4vKiogSlNPTiBTY2hlbWEgcHVibGlzaGVkIGluIHRoZSBwbHVnaW4gbWFuaWZlc3QgZm9yIHtAbGluayBUZWFtc1BsdWdpbkNvbmZpZ30uICovXG5leHBvcnQgY29uc3QgVEVBTVNfQ09ORklHX1NDSEVNQTogSlNPTlNjaGVtYTcgPSB7XG4gIHR5cGU6IFwib2JqZWN0XCIsXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgcHJvcGVydGllczoge1xuICAgIGNhcmRWZXJzaW9uOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBBZGFwdGl2ZSBDYXJkIHNjaGVtYSB2ZXJzaW9uIHRoZSBidWlsZGVyIHRhcmdldHMuICR7Q0FSRF9WRVJTSU9OX0VOVn0gb3ZlcnJpZGVzIGl0LmAsXG4gICAgfSxcbiAgICB3ZWJob29rVXJsOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBPcHRpb25hbCBUZWFtcyBpbmNvbWluZy13ZWJob29rIFVSTCB1c2VkIHRvIHBvc3QgY2FyZHMuICR7V0VCSE9PS19VUkxfRU5WfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFnZW50UGx1Z2luOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBSZWdpc3RlcmVkIG5hbWUgb2YgdGhlIHNpYmxpbmcgcGx1Z2luIHdob3NlIGFnZW50cyBhbnN3ZXIgYSBjb252ZXJzYXRpb24gdHVybi4gJHtBR0VOVF9QTFVHSU5fRU5WfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFwcElkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBFbnRyYSBhcHAgKGNsaWVudCkgaWQgb2YgdGhlIEF6dXJlIEJvdCByZWdpc3RyYXRpb24uIFJlcXVpcmVkIGZvciB0aGUgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50LiAke0FQUF9JRF9FTlZTWzBdfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFwcFBhc3N3b3JkOiB7XG4gICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IGBDbGllbnQgc2VjcmV0IGZvciB0aGUgYm90IGFwcCBpZCwgdXNlZCB0byBmZXRjaCBhbiBvdXRib3VuZCBDb25uZWN0b3IgdG9rZW4uICR7QVBQX1BBU1NXT1JEX0VOVlNbMF19IG92ZXJyaWRlcyBpdC5gLFxuICAgIH0sXG4gICAgYXBwVGVuYW50SWQ6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogYFRlbmFudCBpZCBmb3IgYSBzaW5nbGUtdGVuYW50IGJvdCByZWdpc3RyYXRpb247IHVuc2V0IGZvciBtdWx0aS10ZW5hbnQuICR7QVBQX1RFTkFOVF9FTlZTWzBdfSBvdmVycmlkZXMgaXQuYCxcbiAgICB9LFxuICAgIGFsbG93VW5hdXRoZW50aWNhdGVkOiB7XG4gICAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIlNlcnZlIHRoZSBUZWFtcyBtZXNzYWdpbmcgZW5kcG9pbnQgd2l0aCBOTyB0b2tlbiB2YWxpZGF0aW9uLCByZXBseWluZyBpbiBcIiArXG4gICAgICAgIFwidGhlIEhUVFAgcmVzcG9uc2UuIExvY2FsIGRldmVsb3BtZW50IG9ubHk7IGlnbm9yZWQgdW5sZXNzIE5PREVfRU5WIGlzIFwiICtcbiAgICAgICAgYGRldmVsb3BtZW50LiAke0FMTE9XX1VOQVVUSEVOVElDQVRFRF9FTlZ9IG92ZXJyaWRlcyBpdC5gLFxuICAgIH0sXG4gIH0sXG59O1xuXG4vKipcbiAqIExheWVyIHRoZSBwbHVnaW4gY29uZmlnIG92ZXIgZW52aXJvbm1lbnQgZGVmYXVsdHMgaW50byB0aGUgY29uY3JldGUgY29uZmlnXG4gKiB0aGUgcnVudGltZSB1c2VzLiBGYWlscyBsb3VkbHkgb24gYSB3ZWJob29rIFVSTCB0aGF0IGlzIHByZXNlbnQgYnV0IG5vdCBhXG4gKiB2YWxpZCBhYnNvbHV0ZSBVUkwsIHNpbmNlIHRoYXQgaXMgYSBkZXBsb3ktdGltZSBtaXN0YWtlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVRlYW1zQ29uZmlnKG92ZXJyaWRlcz86IFRlYW1zUGx1Z2luQ29uZmlnKTogUmVzb2x2ZWRUZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNhcmRWZXJzaW9uID1cbiAgICBjb3JlQ29uZmlnLnN0cmluZyhvdmVycmlkZXM/LmNhcmRWZXJzaW9uLCBDQVJEX1ZFUlNJT05fRU5WLCBjb3JlQ29uZmlnLkVOVl9PTkxZKSA/P1xuICAgIGNhcmQuQURBUFRJVkVfQ0FSRF9WRVJTSU9OO1xuICBjb25zdCB3ZWJob29rVXJsID0gY29yZUNvbmZpZy5zdHJpbmcoXG4gICAgb3ZlcnJpZGVzPy53ZWJob29rVXJsLFxuICAgIFdFQkhPT0tfVVJMX0VOVixcbiAgICBjb3JlQ29uZmlnLkVOVl9PTkxZLFxuICApO1xuICBpZiAod2ViaG9va1VybCAhPT0gdW5kZWZpbmVkICYmICFpc0h0dHBzVXJsKHdlYmhvb2tVcmwpKSB7XG4gICAgdGhyb3cgVmFsaWRhdGlvbkVycm9yLmludmFsaWRWYWx1ZShcbiAgICAgIFdFQkhPT0tfVVJMX0VOVixcbiAgICAgIHdlYmhvb2tVcmwsXG4gICAgICBcImFuIGFic29sdXRlIGh0dHBzIFVSTCBmb3IgdGhlIFRlYW1zIHdlYmhvb2tcIixcbiAgICApO1xuICB9XG4gIGNvbnN0IGFnZW50UGx1Z2luID1cbiAgICBjb3JlQ29uZmlnLnN0cmluZyhvdmVycmlkZXM/LmFnZW50UGx1Z2luLCBBR0VOVF9QTFVHSU5fRU5WLCBjb3JlQ29uZmlnLkVOVl9PTkxZKSA/P1xuICAgIERFRkFVTFRfQUdFTlRfUExVR0lOO1xuICAvLyBUd28gaW5kZXBlbmRlbnQgY29uZGl0aW9ucyBtdXN0IEJPVEggaG9sZDogdGhlIG9wZXJhdG9yIGFza2VkIGZvciBpdCwgYW5kXG4gIC8vIHRoaXMgaXMgYSBkZXZlbG9wbWVudCBidWlsZC4gR2F0aW5nIG9uIGBOT0RFX0VOVmAgYXMgd2VsbCBtZWFucyBhIHN0cmF5XG4gIC8vIHZhcmlhYmxlIGluIGEgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCBjYW5ub3Qgc2lsZW50bHkgZXhwb3NlIHRoZSBlbmRwb2ludC5cbiAgY29uc3QgcmVxdWVzdGVkID0gY29yZUNvbmZpZy5ib29sZWFuKFxuICAgIG92ZXJyaWRlcz8uYWxsb3dVbmF1dGhlbnRpY2F0ZWQsXG4gICAgQUxMT1dfVU5BVVRIRU5USUNBVEVEX0VOVixcbiAgICBjb3JlQ29uZmlnLkVOVl9PTkxZLFxuICApO1xuICBjb25zdCBhbGxvd1VuYXV0aGVudGljYXRlZCA9IHJlcXVlc3RlZCA9PT0gdHJ1ZSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJkZXZlbG9wbWVudFwiO1xuICByZXR1cm4ge1xuICAgIGNhcmRWZXJzaW9uLFxuICAgIGFnZW50UGx1Z2luLFxuICAgIGFsbG93VW5hdXRoZW50aWNhdGVkLFxuICAgIC4uLm9iamVjdC5vcHRpb25hbChcIndlYmhvb2tVcmxcIiwgd2ViaG9va1VybCksXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJhcHBJZFwiLFxuICAgICAgY29yZUNvbmZpZy5zdHJpbmcob3ZlcnJpZGVzPy5hcHBJZCwgQVBQX0lEX0VOVlMsIGNvcmVDb25maWcuRU5WX09OTFkpLFxuICAgICksXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJhcHBQYXNzd29yZFwiLFxuICAgICAgY29yZUNvbmZpZy5zdHJpbmcob3ZlcnJpZGVzPy5hcHBQYXNzd29yZCwgQVBQX1BBU1NXT1JEX0VOVlMsIGNvcmVDb25maWcuRU5WX09OTFkpLFxuICAgICksXG4gICAgLi4ub2JqZWN0Lm9wdGlvbmFsKFxuICAgICAgXCJhcHBUZW5hbnRJZFwiLFxuICAgICAgY29yZUNvbmZpZy5zdHJpbmcob3ZlcnJpZGVzPy5hcHBUZW5hbnRJZCwgQVBQX1RFTkFOVF9FTlZTLCBjb3JlQ29uZmlnLkVOVl9PTkxZKSxcbiAgICApLFxuICB9O1xufVxuXG4vKiogV2hldGhlciBgdmFsdWVgIHBhcnNlcyBhcyBhbiBhYnNvbHV0ZSBIVFRQUyBVUkwuICovXG5mdW5jdGlvbiBpc0h0dHBzVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IFVSTCh2YWx1ZSkucHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
package/lib/src/connector.d.ts
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*
|
|
22
22
|
* @module
|
|
23
23
|
*/
|
|
24
|
-
import type { activity as
|
|
24
|
+
import type { activity as sharedActivity } from "@dbx-tools/shared-teams";
|
|
25
25
|
/** Everything needed to address one Connector call. */
|
|
26
26
|
export interface ConnectorTarget {
|
|
27
27
|
/** Base URL the activity arrived from, e.g. `https://smba.trafficmanager.net/amer/`. */
|
|
@@ -42,7 +42,7 @@ export interface ConnectorTarget {
|
|
|
42
42
|
* useful for a later update/delete, and for correlating logs with what a user
|
|
43
43
|
* sees in the channel.
|
|
44
44
|
*/
|
|
45
|
-
export declare const sendActivity: (activity:
|
|
45
|
+
export declare const sendActivity: (activity: sharedActivity.Activity, target: ConnectorTarget) => Promise<string | undefined>;
|
|
46
46
|
/**
|
|
47
47
|
* Show the typing indicator in the conversation.
|
|
48
48
|
*
|
package/lib/src/connector.js
CHANGED
|
@@ -79,4 +79,4 @@ export const sendTyping = async (target) => {
|
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nvbm5lY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUc3QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFnQjdDOzs7OztHQUtHO0FBQ0gsTUFBTSxhQUFhLEdBQUcsQ0FBQyxNQUF1QixFQUFVLEVBQUU7SUFDeEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbEYsT0FBTyxHQUFHLElBQUkscUJBQXFCLFlBQVksY0FBYyxNQUFNLEVBQUUsQ0FBQztBQUN4RSxDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUMvQixRQUFpQyxFQUNqQyxNQUF1QixFQUNNLEVBQUU7SUFDL0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2xELE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsY0FBYyxFQUFFLGtCQUFrQjtZQUNsQyxhQUFhLEVBQUUsVUFBVSxNQUFNLENBQUMsS0FBSyxFQUFFO1NBQ3hDO1FBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNwRCxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLDJDQUEyQyxRQUFRLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUE0QixDQUFDO0lBQ3JGLE1BQU0sRUFBRSxHQUFHLE9BQU8sT0FBTyxFQUFFLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwRSxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNoRixPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsTUFBdUIsRUFBaUIsRUFBRTtJQUN6RSxJQUFJLENBQUM7UUFDSCxNQUFNLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUU7WUFDdEMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxjQUFjO1lBQ25DLEtBQUssRUFBRyxHQUFhLENBQUMsT0FBTztTQUM5QixDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCb3QgRnJhbWV3b3JrIENvbm5lY3RvciBBUEkgY2xpZW50IC0gaG93IGEgcmVwbHkgYWN0dWFsbHkgcmVhY2hlcyBUZWFtcy5cbiAqXG4gKiBUaGlzIGlzIHRoZSBwYXJ0IHRoYXQgbWFrZXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNoYXQgQVBJIGFuZCBhIGJvdC4gQXp1cmVcbiAqIEJvdCBTZXJ2aWNlIGRvZXMgTk9UIHJlYWQgcmVwbGllcyBmcm9tIHRoZSBib2R5IG9mIHRoZSBgL21lc3NhZ2VzYCByZXNwb25zZTpcbiAqIGl0IGV4cGVjdHMgYDIwMGAgKGFuIGFja25vd2xlZGdlbWVudCB0aGF0IHRoZSBhY3Rpdml0eSB3YXMgYWNjZXB0ZWQpIGFuZCB0aGVuXG4gKiBhIHNlcGFyYXRlLCBhdXRoZW50aWNhdGVkIGNhbGwgYmFjayB0byB0aGUgYHNlcnZpY2VVcmxgIHRoZSBhY3Rpdml0eSBhcnJpdmVkXG4gKiB3aXRoLiBTbyBhIHR1cm4gaXMgaW5oZXJlbnRseSBhc3luY2hyb25vdXMgLSBhY2tub3dsZWRnZSwgdGhpbmssIHRoZW4gZGVsaXZlci5cbiAqXG4gKiBUd28gY2FsbHMgYXJlIG1vZGVsbGVkLCBib3RoIGBQT1NUYCB0byB0aGUgY29udmVyc2F0aW9uJ3MgYWN0aXZpdHkgY29sbGVjdGlvbjpcbiAqXG4gKiAgIC0ge0BsaW5rIHNlbmRBY3Rpdml0eX0gLSBgUE9TVCAvdjMvY29udmVyc2F0aW9ucy97aWR9L2FjdGl2aXRpZXMve3JlcGx5VG9JZH1gXG4gKiAgICAgZGVsaXZlcnMgYSByZXBseSB0aHJlYWRlZCB1bmRlciB0aGUgdXNlcidzIG1lc3NhZ2UuXG4gKiAgIC0ge0BsaW5rIHNlbmRUeXBpbmd9IC0gdGhlIHNhbWUgY2FsbCB3aXRoIGEgYHR5cGluZ2AgYWN0aXZpdHksIHdoaWNoIGlzIHdoYXRcbiAqICAgICBwdXRzIHRoZSBcIuKAplwiIGluZGljYXRvciBpbiB0aGUgY2hhbm5lbCB3aGlsZSB0aGUgYWdlbnQgd29ya3MuXG4gKlxuICogYHNlcnZpY2VVcmxgIGlzIGFsd2F5cyBzdXBwbGllZCBieSB0aGUgQ0FMTEVSIGZyb20gYSB2YWxpZGF0ZWQgc291cmNlIChzZWVcbiAqIGBpc0FsbG93ZWRTZXJ2aWNlVXJsYCksIG5ldmVyIHJlYWQgc3RyYWlnaHQgb2ZmIGFuIHVudHJ1c3RlZCByZXF1ZXN0IGJvZHk6XG4gKiB0aGVzZSBjYWxscyBjYXJyeSB0aGUgYm90J3MgYmVhcmVyIHRva2VuLCBzbyB0aGUgZGVzdGluYXRpb24gaG9zdCBpcyBhXG4gKiBzZWN1cml0eS1yZWxldmFudCBpbnB1dC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB0eXBlIHsgYWN0aXZpdHkgYXMgc2hhcmVkQWN0aXZpdHkgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtdGVhbXNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInRlYW1zOmNvbm5lY3RvclwiKTtcblxuLyoqIEV2ZXJ5dGhpbmcgbmVlZGVkIHRvIGFkZHJlc3Mgb25lIENvbm5lY3RvciBjYWxsLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25uZWN0b3JUYXJnZXQge1xuICAvKiogQmFzZSBVUkwgdGhlIGFjdGl2aXR5IGFycml2ZWQgZnJvbSwgZS5nLiBgaHR0cHM6Ly9zbWJhLnRyYWZmaWNtYW5hZ2VyLm5ldC9hbWVyL2AuICovXG4gIHNlcnZpY2VVcmw6IHN0cmluZztcbiAgLyoqIENvbnZlcnNhdGlvbiB0aGUgcmVwbHkgYmVsb25ncyB0by4gKi9cbiAgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgLyoqIEJlYXJlciB0b2tlbiBmb3IgdGhlIGJvdCdzIGFwcCByZWdpc3RyYXRpb24uICovXG4gIHRva2VuOiBzdHJpbmc7XG4gIC8qKiBBY3Rpdml0eSB0aGUgcmVwbHkgdGhyZWFkcyB1bmRlciwgd2hlbiByZXBseWluZyB0byBhIHNwZWNpZmljIG1lc3NhZ2UuICovXG4gIHJlcGx5VG9JZD86IHN0cmluZztcbiAgLyoqIENhbmNlbHMgdGhlIHJlcXVlc3Qgd2l0aCB0aGUgdHVybi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGFjdGl2aXRpZXMgVVJMIGZvciBhIGNvbnZlcnNhdGlvbi5cbiAqXG4gKiBgcmVwbHlUb0lkYCBzZWxlY3RzIHRoZSB0aHJlYWRlZCBmb3JtLCB3aGljaCBpcyB3aGF0IG1ha2VzIGEgcmVwbHkgYXBwZWFyXG4gKiBhdHRhY2hlZCB0byB0aGUgdXNlcidzIG1lc3NhZ2UgcmF0aGVyIHRoYW4gYXMgYSBsb29zZSBjaGFubmVsIHBvc3QuXG4gKi9cbmNvbnN0IGFjdGl2aXRpZXNVcmwgPSAodGFyZ2V0OiBDb25uZWN0b3JUYXJnZXQpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBiYXNlID0gdGFyZ2V0LnNlcnZpY2VVcmwucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTtcbiAgY29uc3QgY29udmVyc2F0aW9uID0gZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5jb252ZXJzYXRpb25JZCk7XG4gIGNvbnN0IHN1ZmZpeCA9IHRhcmdldC5yZXBseVRvSWQgPyBgLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHRhcmdldC5yZXBseVRvSWQpfWAgOiBcIlwiO1xuICByZXR1cm4gYCR7YmFzZX0vdjMvY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbn0vYWN0aXZpdGllcyR7c3VmZml4fWA7XG59O1xuXG4vKipcbiAqIERlbGl2ZXIgb25lIGFjdGl2aXR5IHRvIGEgY29udmVyc2F0aW9uIHRocm91Z2ggdGhlIENvbm5lY3RvciBBUEkuXG4gKlxuICogUmV0dXJucyB0aGUgaWQgdGhlIGNoYW5uZWwgYXNzaWduZWQgdGhlIHBvc3RlZCBhY3Rpdml0eSwgd2hlbiBpdCByZXBvcnRzIG9uZSAtXG4gKiB1c2VmdWwgZm9yIGEgbGF0ZXIgdXBkYXRlL2RlbGV0ZSwgYW5kIGZvciBjb3JyZWxhdGluZyBsb2dzIHdpdGggd2hhdCBhIHVzZXJcbiAqIHNlZXMgaW4gdGhlIGNoYW5uZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBzZW5kQWN0aXZpdHkgPSBhc3luYyAoXG4gIGFjdGl2aXR5OiBzaGFyZWRBY3Rpdml0eS5BY3Rpdml0eSxcbiAgdGFyZ2V0OiBDb25uZWN0b3JUYXJnZXQsXG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFjdGl2aXRpZXNVcmwodGFyZ2V0KSwge1xuICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgaGVhZGVyczoge1xuICAgICAgXCJjb250ZW50LXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGFyZ2V0LnRva2VufWAsXG4gICAgfSxcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShhY3Rpdml0eSksXG4gICAgLi4uKHRhcmdldC5zaWduYWwgPyB7IHNpZ25hbDogdGFyZ2V0LnNpZ25hbCB9IDoge30pLFxuICB9KTtcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IGRldGFpbCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHRlYW1zOiBjb25uZWN0b3IgcmVqZWN0ZWQgdGhlIGFjdGl2aXR5ICgke3Jlc3BvbnNlLnN0YXR1c30pICR7ZGV0YWlsfWAudHJpbSgpKTtcbiAgfVxuICBjb25zdCBwYXlsb2FkID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKS5jYXRjaCgoKSA9PiBudWxsKSkgYXMgeyBpZD86IHVua25vd24gfSB8IG51bGw7XG4gIGNvbnN0IGlkID0gdHlwZW9mIHBheWxvYWQ/LmlkID09PSBcInN0cmluZ1wiID8gcGF5bG9hZC5pZCA6IHVuZGVmaW5lZDtcbiAgbG9nZ2VyLmRlYnVnKFwiYWN0aXZpdHkgZGVsaXZlcmVkXCIsIHsgY29udmVyc2F0aW9uOiB0YXJnZXQuY29udmVyc2F0aW9uSWQsIGlkIH0pO1xuICByZXR1cm4gaWQ7XG59O1xuXG4vKipcbiAqIFNob3cgdGhlIHR5cGluZyBpbmRpY2F0b3IgaW4gdGhlIGNvbnZlcnNhdGlvbi5cbiAqXG4gKiBCZXN0LWVmZm9ydCBieSBkZXNpZ246IGEgZmFpbGVkIGluZGljYXRvciBtdXN0IG5ldmVyIGZhaWwgdGhlIHR1cm4sIGJlY2F1c2VcbiAqIHRoZSBjYXJkIHRoYXQgZm9sbG93cyBpcyB0aGUgYWN0dWFsIGFuc3dlci4gQSBmYWlsdXJlIGlzIGxvZ2dlZCBhdCBkZWJ1ZyBhbmRcbiAqIHN3YWxsb3dlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlbmRUeXBpbmcgPSBhc3luYyAodGFyZ2V0OiBDb25uZWN0b3JUYXJnZXQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzZW5kQWN0aXZpdHkoeyB0eXBlOiBcInR5cGluZ1wiIH0sIHRhcmdldCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInR5cGluZyBpbmRpY2F0b3IgZmFpbGVkXCIsIHtcbiAgICAgIGNvbnZlcnNhdGlvbjogdGFyZ2V0LmNvbnZlcnNhdGlvbklkLFxuICAgICAgZXJyb3I6IChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UsXG4gICAgfSk7XG4gIH1cbn07XG4iXX0=
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
*
|
|
37
37
|
* @module
|
|
38
38
|
*/
|
|
39
|
-
import { activity as
|
|
39
|
+
import { activity as sharedActivity, card } from "@dbx-tools/shared-teams";
|
|
40
40
|
/**
|
|
41
41
|
* Minimal structural shape of the Mastra `Agent` this module drives.
|
|
42
42
|
*
|
|
@@ -88,7 +88,7 @@ export interface AgentResult {
|
|
|
88
88
|
}[];
|
|
89
89
|
}
|
|
90
90
|
/** The bot's identity on outbound activities when the caller names none. */
|
|
91
|
-
export declare const BOT_ACCOUNT:
|
|
91
|
+
export declare const BOT_ACCOUNT: sharedActivity.ChannelAccount;
|
|
92
92
|
/**
|
|
93
93
|
* Instructions for the FORMATTING pass only - turning an answer the agent has
|
|
94
94
|
* already produced into the card vocabulary.
|
|
@@ -146,7 +146,7 @@ export interface CardTurnOptions {
|
|
|
146
146
|
/** Cancels the agent call with the request. */
|
|
147
147
|
signal?: AbortSignal;
|
|
148
148
|
/** Overrides the bot identity stamped on the reply. */
|
|
149
|
-
bot?:
|
|
149
|
+
bot?: sharedActivity.ChannelAccount;
|
|
150
150
|
/**
|
|
151
151
|
* Builds the Mastra `RequestContext` for the turn, from
|
|
152
152
|
* {@link resolveCardContextFactory}. Omitted, the turn still answers, but
|
|
@@ -176,7 +176,7 @@ export declare const resolveCardContextFactory: (plugins: ReadonlyMap<string, un
|
|
|
176
176
|
* payload is only an attachment). Those are not errors - they simply produce no
|
|
177
177
|
* reply - so this returns `null` rather than throwing.
|
|
178
178
|
*/
|
|
179
|
-
export declare const promptOf: (inbound:
|
|
179
|
+
export declare const promptOf: (inbound: sharedActivity.Activity) => string | null;
|
|
180
180
|
/**
|
|
181
181
|
* Build an outbound activity carrying `cards`, addressed back to the sender of
|
|
182
182
|
* `inbound`.
|
|
@@ -184,10 +184,10 @@ export declare const promptOf: (inbound: activityContract.Activity) => string |
|
|
|
184
184
|
* Exported because a client rendering an optimistic local reply, and a test
|
|
185
185
|
* asserting the envelope, both need the same construction the turn uses.
|
|
186
186
|
*/
|
|
187
|
-
export declare const toReplyActivity: (inbound:
|
|
188
|
-
bot?:
|
|
187
|
+
export declare const toReplyActivity: (inbound: sharedActivity.Activity, cards: card.AdaptiveCard[], options?: {
|
|
188
|
+
bot?: sharedActivity.ChannelAccount;
|
|
189
189
|
text?: string;
|
|
190
|
-
}) =>
|
|
190
|
+
}) => sharedActivity.Activity;
|
|
191
191
|
/**
|
|
192
192
|
* Recover a {@link card.CardSpec} from a full Adaptive Card DOCUMENT.
|
|
193
193
|
*
|
|
@@ -231,4 +231,4 @@ export declare const rejectedCardSpec: (err: unknown) => card.CardSpec | null;
|
|
|
231
231
|
* `create_teams_card` during pass 1 short-circuits pass 2, and a failed pass 2
|
|
232
232
|
* falls back to {@link toCardSpec} over the answer text.
|
|
233
233
|
*/
|
|
234
|
-
export declare const runCardTurn: (agent: CardAgentLike, inbound:
|
|
234
|
+
export declare const runCardTurn: (agent: CardAgentLike, inbound: sharedActivity.Activity, options?: CardTurnOptions) => Promise<sharedActivity.Activity[]>;
|
package/lib/src/conversation.js
CHANGED
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
* @module
|
|
38
38
|
*/
|
|
39
39
|
import { error, hash, json, log, object, string } from "@dbx-tools/shared-core";
|
|
40
|
-
import { activity as
|
|
40
|
+
import { activity as sharedActivity, card } from "@dbx-tools/shared-teams";
|
|
41
41
|
import { buildAdaptiveCard } from "./builder.js";
|
|
42
42
|
const logger = log.logger("teams:conversation");
|
|
43
43
|
/** Tool id whose arguments are already a {@link card.CardSpec}. */
|
|
@@ -213,7 +213,7 @@ export const toReplyActivity = (inbound, cards, options = {}) => ({
|
|
|
213
213
|
...(inbound.from ? { recipient: inbound.from } : {}),
|
|
214
214
|
...(inbound.conversation ? { conversation: inbound.conversation } : {}),
|
|
215
215
|
...(options.text ? { text: options.text } : {}),
|
|
216
|
-
attachments: cards.map((document) =>
|
|
216
|
+
attachments: cards.map((document) => sharedActivity.toCardAttachment(document)),
|
|
217
217
|
});
|
|
218
218
|
/**
|
|
219
219
|
* Recover a {@link card.CardSpec} from a full Adaptive Card DOCUMENT.
|
|
@@ -506,4 +506,4 @@ export const runCardTurn = async (agent, inbound, options = {}) => {
|
|
|
506
506
|
const document = buildAdaptiveCard(spec ?? toCardSpec({ ...answered, ...(answer ? { text: answer } : {}) }));
|
|
507
507
|
return [toReplyActivity(inbound, [document], { ...(options.bot ? { bot: options.bot } : {}) })];
|
|
508
508
|
};
|
|
509
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLElBQUksZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWpELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQW1EaEQsbUVBQW1FO0FBQ25FLE1BQU0sZUFBZSxHQUFHLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFFNUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQW1CLEVBQXdCLEVBQUU7SUFDakUsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQUUsU0FBUztRQUN2RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEYsSUFBSSxNQUFNLENBQUMsT0FBTztZQUFFLE9BQU8sTUFBTSxDQUFD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RyxNQUFNO0tBQ1YsQ0FBQyxDQUFDO0lBRUgsd0VBQXdFO0lBQ3hFLHVFQUF1RTtJQUN2RSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekUsTUFBTSxJQUFJLEdBQ1IsUUFBUTtRQUNSLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFekYsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQ2hDLElBQUksSUFBSSxVQUFVLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUN6RSxDQUFDO0lBQ0YsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIFRlYW1zIGNvbnZlcnNhdGlvbiB0dXJuOiBydW4gYSBNYXN0cmEgYWdlbnQgYWdhaW5zdCBhbiBpbmJvdW5kIEJvdFxuICogRnJhbWV3b3JrIGFjdGl2aXR5IGFuZCBhbnN3ZXIgd2l0aCBBZGFwdGl2ZSBDYXJkIGF0dGFjaG1lbnRzLlxuICpcbiAqIFRoaXMgaXMgdGhlIHBpZWNlIHRoYXQgbWFrZXMgYFBPU1QgL2FwaS90ZWFtcy9hY3Rpdml0eWAgYmVoYXZlIGxpa2UgYSBUZWFtc1xuICogYm90IHJhdGhlciB0aGFuIGEgY2hhdCBBUEkgdGhhdCBoYXBwZW5zIHRvIHJldHVybiBKU09OLiBBIHR1cm4gaXM6XG4gKlxuICogICAxLiByZWFkIHRoZSB1c2VyJ3MgdGV4dCBvZmYgdGhlIGluYm91bmQgYG1lc3NhZ2VgIGFjdGl2aXR5O1xuICogICAyLiBBTlNXRVIgaXQgLSBhIG5vcm1hbCB0b29sLXVzaW5nIGFnZW50IHR1cm4sIHdpdGggbm8gbWVudGlvbiBvZiBjYXJkcywgc29cbiAqICAgICAgdGhlIGFnZW50IHF1ZXJpZXMgR2VuaWUgLyBjYWxscyBpdHMgdG9vbHMgZXhhY3RseSBhcyBpdCB3b3VsZCBvbiBhXG4gKiAgICAgIHN0cmVhbWluZyBjaGF0IGVuZHBvaW50O1xuICogICAzLiBGT1JNQVQgdGhhdCBhbnN3ZXIgaW50byBhIHtAbGluayBjYXJkLkNhcmRTcGVjfSBpbiBhIHNlY29uZCBwYXNzLCB2aWFcbiAqICAgICAgTWFzdHJhJ3MgYHN0cnVjdHVyZWRPdXRwdXRgIChwcm9tcHQtaW5qZWN0ZWQsIHNlZVxuICogICAgICB7QGxpbmsgSlNPTl9QUk9NUFRfSU5KRUNUSU9OfSk7XG4gKiAgIDQuIGNvbXBpbGUgdGhlIHNwZWMgd2l0aCB0aGUgc2FtZSBkZXRlcm1pbmlzdGljIGJ1aWxkZXIgdGhlXG4gKiAgICAgIGBjcmVhdGVfdGVhbXNfY2FyZGAgdG9vbCB1c2VzLCBhbmQgYXR0YWNoIGl0IHRvIGFuIG91dGJvdW5kIGFjdGl2aXR5LlxuICpcbiAqIFRoZSB0d28gcGFzc2VzIGFyZSB0aGUgaW1wb3J0YW50IHBhcnQuIEFza2luZyBmb3IgdGhlIGFuc3dlciBBTkQgdGhlIGNhcmRcbiAqIHNoYXBlIGluIE9ORSByZXF1ZXN0IG1ha2VzIHRoZSBtb2RlbCB0cmVhdCBmb3JtYXR0aW5nIGFzIHRoZSB0YXNrOiBpdCBlbWl0cyBhXG4gKiBjYXJkIHN0cmFpZ2h0IGF3YXkgYW5kIG5ldmVyIGNhbGxzIGl0cyB0b29scywgc28gYSBxdWVzdGlvbiB0aGF0IHNob3VsZCBoYXZlXG4gKiBxdWVyaWVkIGEgZGF0YSBzb3VyY2UgY2FtZSBiYWNrIGFzIFwiSSBkb24ndCBoYXZlIGEgcmVhbCBzeXN0ZW0gY29ubmVjdGVkIC1cbiAqIGhlcmUgaXMgYSB0ZW1wbGF0ZSBjYXJkIHdpdGggcGxhY2Vob2xkZXJzXCIuIEFuc3dlcmluZyBmaXJzdCwgdGhlbiBmb3JtYXR0aW5nIGFcbiAqIFJFQUwgYW5zd2VyLCBtYWtlcyB0aGlzIGVuZHBvaW50J3MgY29udGVudCBpZGVudGljYWwgdG8gdGhlIHN0cmVhbWluZ1xuICogZW5kcG9pbnQnczsgb25seSB0aGUgcHJlc2VudGF0aW9uIGRpZmZlcnMuXG4gKlxuICogRm9ybWF0dGluZyBpcyBhbHNvIHdoeSB0aGUgdHVybiBkb2VzIG5vdCBzaW1wbHkgcmVseSBvbiB0aGUgYWdlbnQgY2FsbGluZ1xuICogYGNyZWF0ZV90ZWFtc19jYXJkYDogb24gdGhpcyBlbmRwb2ludCBhIGNhcmQgSVMgdGhlIHJlc3BvbnNlIGZvcm1hdCwgc28gaXRcbiAqIHNob3VsZCBiZSBhIHByb3BlcnR5IG9mIHRoZSB0dXJuIHJhdGhlciB0aGFuIGEgdG9vbCB0aGUgbW9kZWwgbWF5IGZvcmdldC5cbiAqIEFnZW50cyBrZWVwIHRoZSB0b29sIGZvciB0aGUgb3RoZXIgZGlyZWN0aW9uIC0gYW5zd2VyaW5nIGluIHByb3NlIG9uIGEgbm9ybWFsXG4gKiBjaGF0IGVuZHBvaW50IGFuZCBjaG9vc2luZyB0byBhdHRhY2ggYSBjYXJkLiBXaGVuIHRoZSBhZ2VudCBET0VTIGNhbGwgaXRcbiAqIGR1cmluZyB0aGUgYW5zd2VyaW5nIHBhc3MsIHRoYXQgc3BlYyB3aW5zIGFuZCB0aGUgZm9ybWF0dGluZyBwYXNzIGlzIHNraXBwZWQuXG4gKlxuICogVGhlIGNvbnZlcnNhdGlvbiBpZCBkb3VibGVzIGFzIHRoZSBhZ2VudCdzIG1lbW9yeSB0aHJlYWQgaWQsIHNvIGEgY2xpZW50IHRoYXRcbiAqIGtlZXBzIHBvc3RpbmcgdGhlIHNhbWUgYGNvbnZlcnNhdGlvbi5pZGAgZ2V0cyBhIGNvbnRpbnVvdXMgY29udmVyc2F0aW9uIC0gdGhlXG4gKiBzYW1lIG1hcHBpbmcgYSByZWFsIGNoYW5uZWwgcmVsaWVzIG9uLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyBlcnJvciwgaGFzaCwganNvbiwgbG9nLCBvYmplY3QsIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBhY3Rpdml0eSBhcyBhY3Rpdml0eUNvbnRyYWN0LCBjYXJkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXRlYW1zXCI7XG5pbXBvcnQgeyBidWlsZEFkYXB0aXZlQ2FyZCB9IGZyb20gXCIuL2J1aWxkZXIudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInRlYW1zOmNvbnZlcnNhdGlvblwiKTtcblxuLyoqXG4gKiBNaW5pbWFsIHN0cnVjdHVyYWwgc2hhcGUgb2YgdGhlIE1hc3RyYSBgQWdlbnRgIHRoaXMgbW9kdWxlIGRyaXZlcy5cbiAqXG4gKiBEZWNsYXJlZCBzdHJ1Y3R1cmFsbHkgcmF0aGVyIHRoYW4gaW1wb3J0aW5nIGBAbWFzdHJhL2NvcmVgJ3MgYEFnZW50YDogdGhpc1xuICogcGFja2FnZSBtdXN0IG5vdCBkZXBlbmQgb24gdGhlIE1hc3RyYSBwbHVnaW4gKHRoZSBwbHVnaW4gZGVwZW5kcyBvbiBub3RoaW5nXG4gKiBoZXJlIGVpdGhlciksIGFuZCBhIHR1cm4gb25seSBldmVyIG5lZWRzIGBnZW5lcmF0ZWAuIEFueSBvYmplY3Qgd2l0aCBhXG4gKiBjb21wYXRpYmxlIGBnZW5lcmF0ZWAgc2F0aXNmaWVzIGl0LCB3aGljaCBhbHNvIG1ha2VzIHRoZSB0dXJuIHRyaXZpYWxseVxuICogdGVzdGFibGUgd2l0aCBhIHN0dWIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZEFnZW50TGlrZSB7XG4gIGdlbmVyYXRlKFxuICAgIHByb21wdDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHN0cnVjdHVyZWRPdXRwdXQ/OiB7XG4gICAgICAgIHNjaGVtYTogdHlwZW9mIGNhcmQuY2FyZFNwZWNTY2hlbWE7XG4gICAgICAgIGpzb25Qcm9tcHRJbmplY3Rpb24/OiBib29sZWFuIHwgXCJzeXN0ZW1cIiB8IFwiaW5saW5lXCI7XG4gICAgICB9O1xuICAgICAgbWVtb3J5PzogeyB0aHJlYWQ6IHN0cmluZzsgcmVzb3VyY2U6IHN0cmluZyB9O1xuICAgICAgLyoqXG4gICAgICAgKiBNYXN0cmEncyBwZXItdHVybiBgUmVxdWVzdENvbnRleHRgLiBPcGFxdWUgaGVyZSAtIHRoZSBvYmplY3QgY29tZXMgZnJvbVxuICAgICAgICogdGhlIGFnZW50IHBsdWdpbiAoc2VlIHtAbGluayBBZ2VudFByb3ZpZGVyTGlrZS5leHBvcnRzfSkgYW5kIGlzIG9ubHlcbiAgICAgICAqIGZvcndhcmRlZCAtIGJ1dCBSRVFVSVJFRCBmb3IgcGFyaXR5IHdpdGggdGhlIGNoYXQgZW5kcG9pbnRzOiBNYXN0cmEnc1xuICAgICAgICogdXNlci1zY29wZWQgdG9vbHMgcmVhZCB0aGUgQXBwS2l0IHVzZXIgb2ZmIGl0LCBzbyBhIHR1cm4gd2l0aG91dCBvbmVcbiAgICAgICAqIGFuc3dlcnMgXCJ0aGUgZGF0YSBzb3VyY2UgaXMgdW5yZWFjaGFibGVcIiB3aGVyZSBjaGF0IGFuc3dlcnMgd2l0aCBkYXRhLlxuICAgICAgICovXG4gICAgICByZXF1ZXN0Q29udGV4dD86IHVua25vd247XG4gICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAgIH0sXG4gICk6IFByb21pc2U8QWdlbnRSZXN1bHQ+O1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBNYXN0cmEncyBgZ2VuZXJhdGVgIHJlc3VsdCBhIHR1cm4gcmVhZHMuXG4gKlxuICogYHRvb2xSZXN1bHRzYCBtYXR0ZXJzIGFzIG11Y2ggYXMgYG9iamVjdGAgaGVyZTogd2hlbiBzdHJ1Y3R1cmVkIG91dHB1dCBmYWlsc1xuICogYW5kIHRoZSB0dXJuIHJlLWFza3MgYXMgcHJvc2UsIGFuIGFnZW50IGhvbGRpbmcgdGhlIGBjcmVhdGVfdGVhbXNfY2FyZGAgdG9vbFxuICogdHlwaWNhbGx5IENBTExTIGl0LCBzbyB0aGUgYmVzdCBhdmFpbGFibGUgY2FyZCBzcGVjIGlzIHRoZSB0b29sJ3MgYXJndW1lbnRzIC1cbiAqIGFscmVhZHkgaW4gdGhlIHJpZ2h0IHZvY2FidWxhcnkgLSByYXRoZXIgdGhhbiBhbnl0aGluZyBpbiB0aGUgcHJvc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRSZXN1bHQge1xuICBvYmplY3Q/OiB1bmtub3duO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0b29sUmVzdWx0cz86IHtcbiAgICBwYXlsb2FkPzogeyB0b29sTmFtZT86IHN0cmluZzsgYXJncz86IHVua25vd24gfTtcbiAgICB0b29sTmFtZT86IHN0cmluZztcbiAgICBhcmdzPzogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKiogVG9vbCBpZCB3aG9zZSBhcmd1bWVudHMgYXJlIGFscmVhZHkgYSB7QGxpbmsgY2FyZC5DYXJkU3BlY30uICovXG5jb25zdCBDQVJEX1RPT0xfTkFNRVMgPSBbXCJjcmVhdGVfdGVhbXNfY2FyZFwiLCBcImNyZWF0ZUNhcmRcIl07XG5cbi8qKlxuICogVGhlIGNhcmQgc3BlYyBhbiBhZ2VudCBwYXNzZWQgdG8gdGhlIGNhcmQgdG9vbCwgaWYgaXQgY2FsbGVkIGl0LlxuICpcbiAqIE1hc3RyYSBuZXN0cyBhIHRvb2wgcmVzdWx0IHVuZGVyIGBwYXlsb2FkYCAoYHsgcGF5bG9hZDogeyB0b29sTmFtZSwgYXJncyB9IH1gKVxuICogYnV0IGhhcyB1c2VkIGEgZmxhdCBzaGFwZSB0b28sIHNvIGJvdGggYXJlIHJlYWQuXG4gKi9cbmNvbnN0IHRvb2xDYXJkU3BlYyA9IChyZXN1bHQ6IEFnZW50UmVzdWx0KTogY2FyZC5DYXJkU3BlYyB8IG51bGwgPT4ge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlc3VsdC50b29sUmVzdWx0cyA/PyBbXSkge1xuICAgIGNvbnN0IG5hbWUgPSBlbnRyeS5wYXlsb2FkPy50b29sTmFtZSA/PyBlbnRyeS50b29sTmFtZTtcbiAgICBpZiAoIW5hbWUgfHwgIUNBUkRfVE9PTF9OQU1FUy5pbmNsdWRlcyhuYW1lKSkgY29udGludWU7XG4gICAgY29uc3QgcGFyc2VkID0gY2FyZC5jYXJkU3BlY1NjaGVtYS5zYWZlUGFyc2UoZW50cnkucGF5bG9hZD8uYXJncyA/PyBlbnRyeS5hcmdzKTtcbiAgICBpZiAocGFyc2VkLnN1Y2Nlc3MpIHJldHVybiBwYXJzZWQuZGF0YTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogQXNrIGZvciB0aGUgY2FyZCBzaGFwZSB2aWEgUFJPTVBUIGluamVjdGlvbiByYXRoZXIgdGhhbiB0aGUgcHJvdmlkZXIncyBuYXRpdmVcbiAqIHJlc3BvbnNlIGZvcm1hdC5cbiAqXG4gKiBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgcmVqZWN0cyBhIHJlcXVlc3QgY2FycnlpbmcgYm90aCBgcmVzcG9uc2VfZm9ybWF0YCBhbmRcbiAqIGB0b29sc2AgKFwiQ2Fubm90IHNwZWNpZnkgYm90aCByZXNwb25zZV9mb3JtYXQgYW5kIHRvb2xzIGluIHRoZSBzYW1lIHJlcXVlc3RcIiksXG4gKiBhbmQgdGhlIGFnZW50cyB0aGlzIGVuZHBvaW50IGRyaXZlcyBub3JtYWxseSBkbyBoYXZlIHRvb2xzLiBOYXRpdmUgc3RydWN0dXJlZFxuICogb3V0cHV0IHdvdWxkIHRoZXJlZm9yZSBmYWlsIGZvciBleGFjdGx5IHRoZSBhZ2VudHMgd29ydGggdGFsa2luZyB0bywgc28gdGhlXG4gKiBzY2hlbWEgaXMgaW5qZWN0ZWQgYXMgaW5zdHJ1Y3Rpb25zIGluc3RlYWQgLSB3aGljaCBjb3N0cyBub3RoaW5nIGhlcmUgYmVjYXVzZVxuICogdGhlIGFuc3dlciBpcyByZS12YWxpZGF0ZWQgd2l0aCBgY2FyZFNwZWNTY2hlbWFgIGJlZm9yZSBpdCBpcyBjb21waWxlZC5cbiAqL1xuY29uc3QgSlNPTl9QUk9NUFRfSU5KRUNUSU9OID0gXCJzeXN0ZW1cIiBhcyBjb25zdDtcblxuLyoqIFRoZSBib3QncyBpZGVudGl0eSBvbiBvdXRib3VuZCBhY3Rpdml0aWVzIHdoZW4gdGhlIGNhbGxlciBuYW1lcyBub25lLiAqL1xuZXhwb3J0IGNvbnN0IEJPVF9BQ0NPVU5UOiBhY3Rpdml0eUNvbnRyYWN0LkNoYW5uZWxBY2NvdW50ID0ge1xuICBpZDogXCJkYngtdG9vbHMtdGVhbXMtYm90XCIsXG4gIG5hbWU6IFwiRGF0YWJyaWNrcyBBZ2VudFwiLFxufTtcblxuLyoqXG4gKiBJbnN0cnVjdGlvbnMgZm9yIHRoZSBGT1JNQVRUSU5HIHBhc3Mgb25seSAtIHR1cm5pbmcgYW4gYW5zd2VyIHRoZSBhZ2VudCBoYXNcbiAqIGFscmVhZHkgcHJvZHVjZWQgaW50byB0aGUgY2FyZCB2b2NhYnVsYXJ5LlxuICpcbiAqIERlbGliZXJhdGVseSBOT1Qgc2VudCB3aXRoIHRoZSB1c2VyJ3MgcXVlc3Rpb24uIEFza2luZyBmb3IgYSBjYXJkIGFuZCBhblxuICogYW5zd2VyIGluIG9uZSByZXF1ZXN0IG1ha2VzIHRoZSBtb2RlbCB0cmVhdCBmb3JtYXR0aW5nIGFzIHRoZSB0YXNrOiBpdCBlbWl0cyBhXG4gKiBjYXJkIGltbWVkaWF0ZWx5IGluc3RlYWQgb2YgY2FsbGluZyBpdHMgdG9vbHMsIHNvIGEgcXVlc3Rpb24gdGhhdCBzaG91bGQgaGF2ZVxuICogcXVlcmllZCBHZW5pZSBjYW1lIGJhY2sgYXMgXCJJIGRvbid0IGhhdmUgYSByZWFsIHN5c3RlbSBjb25uZWN0ZWQgLSBoZXJlIGlzIGFcbiAqIHRlbXBsYXRlIGNhcmRcIi4gRm9ybWF0dGluZyBpcyBhIHNlcGFyYXRlLCBzZWNvbmQgcGFzcyBvdmVyIGEgcmVhbCBhbnN3ZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBDQVJEX0ZPUk1BVF9JTlNUUlVDVElPTlMgPSBbXG4gIFwiUmVmb3JtYXQgdGhlIGFzc2lzdGFudCBhbnN3ZXIgYmVsb3cgYXMgYSBNaWNyb3NvZnQgVGVhbXMgQWRhcHRpdmUgQ2FyZC5cIixcbiAgXCJQcmVzZXJ2ZSB0aGUgYW5zd2VyJ3MgZmFjdHMgRVhBQ1RMWSAtIGV2ZXJ5IG51bWJlciwgbmFtZSwgZGF0ZSBhbmQgaWQuXCIsXG4gIFwiRG8gbm90IGFkZCBjYXZlYXRzLCBwbGFjZWhvbGRlcnMgb3IgaW52ZW50ZWQgdmFsdWVzLCBhbmQgZG8gbm90IGRlc2NyaWJlIHRoZVwiLFxuICBcImNhcmQ7IGlmIHRoZSBhbnN3ZXIgc3RhdGVzIGEgdmFsdWUsIHRoYXQgdmFsdWUgYmVsb25ncyBpbiB0aGUgY2FyZC5cIixcbiAgXCJQdXQgdGhlIGhlYWRsaW5lIGZpbmRpbmcgaW4gYHRpdGxlYCBhbmQga2VlcCBpdCB1bmRlciB+NjAgY2hhcmFjdGVycy5cIixcbiAgXCJVc2UgYHRleHRgIGZvciB0aGUgZXhwbGFuYXRpb24sIHdpdGggJy0nIGJ1bGxldHMgZm9yIGxpc3RzLlwiLFxuICBcIlVzZSBgZmFjdHNgIGZvciBrZXkvdmFsdWUgZGV0YWlsIChtZXRyaWNzLCBjb3VudHMsIG93bmVycywgaWRzKSBpbnN0ZWFkIG9mXCIsXG4gIFwid3JpdGluZyBpdCBhcyBwcm9zZS5cIixcbiAgXCJBZGQgYGFjdGlvbnNgIG9ubHkgZm9yIFVSTHMgcHJlc2VudCBpbiB0aGUgYW5zd2VyOyBuZXZlciBpbnZlbnQgYSBsaW5rLlwiLFxuICBcIkRyb3AgYW55IGBbY2hhcnQ6Li4uXWAgLyBgW2RhdGE6Li4uXWAgbWFya2VyOiBhIGNhcmQgY2Fubm90IHJlbmRlciBvbmUsIHNvXCIsXG4gIFwid3JpdGUgdGhlIHZhbHVlcyBpdCBzdG9vZCBmb3IgaW50byBgZmFjdHNgIG9yIGB0ZXh0YCBpbnN0ZWFkLlwiLFxuXS5qb2luKFwiIFwiKTtcblxuLyoqXG4gKiBOdWRnZSBhZGRlZCB0byB0aGUgQU5TV0VSSU5HIHBhc3MuXG4gKlxuICogVGhlIGFnZW50IGFuc3dlcnMgdGhlIHF1ZXN0aW9uIG5vcm1hbGx5IGhlcmUgLSB0b29scyBpbmNsdWRlZCAtIHNvIHRoaXMgb25seVxuICogYXNrcyBmb3IgdGhlIHNoYXBlIHRoYXQgc3Vydml2ZXMgY29tcHJlc3Npb24gaW50byBhIGNhcmQgd2VsbC4gSXQgbXVzdCBub3RcbiAqIG1lbnRpb24gY2FyZHMsIG9yIHRoZSBtb2RlbCBzdGFydHMgZm9ybWF0dGluZyBpbnN0ZWFkIG9mIGFuc3dlcmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IENBUkRfQU5TV0VSX0lOU1RSVUNUSU9OUyA9IFtcbiAgXCJBbnN3ZXIgdXNpbmcgeW91ciB0b29scyBhbmQgZGF0YSBzb3VyY2VzIGFzIHlvdSBub3JtYWxseSB3b3VsZC5cIixcbiAgXCJCZSBjb25jaXNlIGFuZCBsZWFkIHdpdGggdGhlIGZpbmRpbmcsIGFuZCBzdGF0ZSBjb25jcmV0ZSB2YWx1ZXNcIixcbiAgXCIobnVtYmVycywgbmFtZXMsIGRhdGVzKSBwbGFpbmx5IHNvIHRoZXkgY2FuIGJlIHN1bW1hcml6ZWQuXCIsXG4gIC8vIEFnZW50cyBvbiBhIGNoYXQgZW5kcG9pbnQgYXJlIHRvbGQgdG8gZGVmZXIgdGFibGVzIGFuZCBjaGFydHMgdG8gdGhlIGhvc3QgVUlcbiAgLy8gYXMgYFtkYXRhOjxpZD5dYCAvIGBbY2hhcnQ6PGlkPl1gIG1hcmtlcnMuIEEgY2FyZCBoYXMgbm8gZW1iZWQgc2xvdCB0byBmaWxsLFxuICAvLyBzbyBhIGRlZmVycmVkIG51bWJlciBhcnJpdmVzIGFzIGEgbGl0ZXJhbCBgW2RhdGE6MDFmMS4uLl1gIGluIHRoZSBjYXJkLiBUaGVcbiAgLy8gdHVybiBhc2tzIGZvciB0aGUgdmFsdWVzIHRoZW1zZWx2ZXMgaW5zdGVhZCwgYW5kIHN0cmlwcyBhbnkgdGhhdCBzbGlwXG4gIC8vIHRocm91Z2ggKHNlZSBFTUJFRF9NQVJLRVJfUkUpLlxuICBcIlRoaXMgY2hhbm5lbCBjYW5ub3QgZGlzcGxheSBjaGFydCBvciBkYXRhIGVtYmVkczogZG8gbm90IGVtaXRcIixcbiAgXCJgW2NoYXJ0Oi4uLl1gIG9yIGBbZGF0YTouLi5dYCBtYXJrZXJzIC0gd3JpdGUgdGhlIGFjdHVhbCBudW1iZXJzIHlvdVwiLFxuICBcInJldHJpZXZlZCBpbnRvIHlvdXIgYW5zd2VyIGluc3RlYWQuXCIsXG5dLmpvaW4oXCIgXCIpO1xuXG4vKipcbiAqIEEgaG9zdC1lbWJlZCBtYXJrZXIgKGBbY2hhcnQ6PGlkPl1gLCBgW2RhdGE6PGlkPl1gKSBpbiBhbiBhZ2VudCdzIHByb3NlLlxuICpcbiAqIENoYXQgaG9zdHMgc3dhcCB0aGVzZSBmb3IgYSByZW5kZXJlZCBjaGFydCBvciB0YWJsZS4gQW4gQWRhcHRpdmUgQ2FyZCBoYXMgbm9cbiAqIHN1Y2ggc2xvdCwgc28gYSBtYXJrZXIgdGhhdCBzdXJ2aXZlcyBpbnRvIGNhcmQgdGV4dCByZW5kZXJzIGFzIGxpdGVyYWxcbiAqIGBbZGF0YTowMWYxODk1Yy0uLi5dYCBub2lzZSB3aGVyZSBhIG51bWJlciBzaG91bGQgYmUuIFRoZSBhbnN3ZXJpbmcgcGFzcyBhc2tzXG4gKiB0aGUgYWdlbnQgbm90IHRvIGVtaXQgdGhlbTsgdGhpcyByZW1vdmVzIGFueSB0aGF0IHN0aWxsIGFycml2ZS5cbiAqXG4gKiBUaGUgZ2VuZXJpYyBgW3R5cGU6aWRdYCBncmFtbWFyIGlzIHNwZWxsZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZCBzbyB0aGlzXG4gKiBwYWNrYWdlIHN0YXlzIGEgbGVhZiBhZGQtb24gd2l0aCBubyBkZXBlbmRlbmN5IG9uIHRoZSBhZ2VudCBwbHVnaW4nc1xuICogY29udHJhY3RzIC0gaXQgb25seSBldmVyIG5lZWRzIHRvIFJFQ09HTklaRSBhIG1hcmtlciwgbmV2ZXIgcmVzb2x2ZSBvbmUuXG4gKi9cbmNvbnN0IEVNQkVEX01BUktFUl9SRSA9IC9cXFtbQS1aYS16XVtBLVphLXowLTlfLV0qOlteXFxdXFxzXStcXF0vZztcblxuLyoqXG4gKiBEcm9wIGVtYmVkIG1hcmtlcnMgZnJvbSBgdGV4dGAsIHRpZHlpbmcgdGhlIHdoaXRlc3BhY2UgdGhleSBsZWF2ZSBiZWhpbmQgc28gYVxuICogbWFya2VyIHRoYXQgc2F0IG9uIGl0cyBvd24gbGluZSBkb2VzIG5vdCBiZWNvbWUgYSBibGFuayBvbmUuXG4gKi9cbmNvbnN0IHN0cmlwRW1iZWRNYXJrZXJzID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICB0ZXh0XG4gICAgLnJlcGxhY2UoRU1CRURfTUFSS0VSX1JFLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9bIFxcdF0rJC9nbSwgXCJcIilcbiAgICAucmVwbGFjZSgvXFxuezMsfS9nLCBcIlxcblxcblwiKVxuICAgIC50cmltKCk7XG5cbi8qKlxuICogU3RydWN0dXJhbCBzaGFwZSBvZiB0aGUgc2libGluZyBwbHVnaW4gdGhhdCBvd25zIHRoZSBhZ2VudCByZWdpc3RyeSAtIHRoZVxuICogc2xpY2Ugb2YgYEBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYWAncyBgZXhwb3J0cygpYCBhIHR1cm4gbmVlZHMuXG4gKlxuICogTWF0Y2hlZCBzdHJ1Y3R1cmFsbHksIGJ5IHJlZ2lzdGVyZWQgcGx1Z2luIE5BTUUsIHJhdGhlciB0aGFuIGltcG9ydGluZyB0aGVcbiAqIE1hc3RyYSBwbHVnaW46IHRoaXMgcGFja2FnZSBzdGF5cyBhIGxlYWYgYWRkLW9uIChpdCBkZXBlbmRzIG9uIG5vIG90aGVyXG4gKiBkYngtdG9vbHMgcnVudGltZSBwYWNrYWdlLCBsaWtlIG5vZGUtZW1haWwpLCB0aGUgZGVwZW5kZW5jeSBkaXJlY3Rpb24gc3RheXNcbiAqIG9uZS13YXksIGFuZCBhbnkgcGx1Z2luIGV4cG9zaW5nIHRoZSBzYW1lIGBnZXRgIC8gYGdldERlZmF1bHRgIHBhaXIgY2FuIGJhY2tcbiAqIHRoZSBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZ2VudFByb3ZpZGVyTGlrZSB7XG4gIGV4cG9ydHMoKToge1xuICAgIGdldChpZDogc3RyaW5nKTogdW5rbm93bjtcbiAgICBnZXREZWZhdWx0KCk6IHVua25vd247XG4gICAgLyoqXG4gICAgICogQnVpbGRzIHRoZSBwZXItdHVybiBgUmVxdWVzdENvbnRleHRgIHRoZSBwcm92aWRlcidzIHRvb2xzIGV4cGVjdC4gT3B0aW9uYWxcbiAgICAgKiBzbyBhbiBvbGRlciBwcm92aWRlciAob3IgYSBkaWZmZXJlbnRseS1zaGFwZWQgb25lKSBzdGlsbCByZXNvbHZlcyBhblxuICAgICAqIGFnZW50OyB0aGUgdHVybiBzaW1wbHkgcnVucyB3aXRob3V0IHVzZXItc2NvcGVkIHRvb2wgY29udGV4dCB0aGVuLlxuICAgICAqL1xuICAgIGNyZWF0ZVJlcXVlc3RDb250ZXh0PyhvcHRpb25zOiB7IHRocmVhZElkPzogc3RyaW5nOyByZXNvdXJjZUlkPzogc3RyaW5nIH0pOiBQcm9taXNlPHVua25vd24+O1xuICB9O1xufVxuXG4vKiogVHJ1ZSB3aGVuIGB2YWx1ZWAgZXhwb3NlcyB0aGUgYGdlbmVyYXRlYCBhIHR1cm4gZHJpdmVzLiAqL1xuY29uc3QgaXNDYXJkQWdlbnQgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBDYXJkQWdlbnRMaWtlID0+XG4gIHR5cGVvZiAodmFsdWUgYXMgQ2FyZEFnZW50TGlrZSB8IG51bGwpPy5nZW5lcmF0ZSA9PT0gXCJmdW5jdGlvblwiO1xuXG4vKiogVHJ1ZSB3aGVuIGB2YWx1ZWAgZXhwb3NlcyB0aGUgYWdlbnQtcmVnaXN0cnkgYGV4cG9ydHMoKWAgYSB0dXJuIHJlYWRzLiAqL1xuY29uc3QgaXNBZ2VudFByb3ZpZGVyID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQWdlbnRQcm92aWRlckxpa2UgPT5cbiAgdHlwZW9mICh2YWx1ZSBhcyBBZ2VudFByb3ZpZGVyTGlrZSB8IG51bGwpPy5leHBvcnRzID09PSBcImZ1bmN0aW9uXCI7XG5cbi8qKlxuICogUmVhZCBvbmUgYWdlbnQgb3V0IG9mIGEgcHJvdmlkZXIncyBgZXhwb3J0cygpYC5cbiAqXG4gKiBFdmVyeSBtZW1iZXIgaXMgcHJvYmVkIGJlZm9yZSBpdCBpcyBjYWxsZWQ6IHRoZSBwcm92aWRlciBpcyBtYXRjaGVkXG4gKiBzdHJ1Y3R1cmFsbHkgYnkgcGx1Z2luIG5hbWUsIHNvIGEgRElGRkVSRU5UIHBsdWdpbiByZWdpc3RlcmVkIHVuZGVyIHRoYXQgbmFtZVxuICogY2FuIHNhdGlzZnkgYGlzQWdlbnRQcm92aWRlcmAgKGl0IGhhcyBhbiBgZXhwb3J0cygpYCkgd2hpbGUgZXhwb3Npbmcgbm8gYWdlbnRcbiAqIHJlZ2lzdHJ5IGF0IGFsbC4gQ2FsbGluZyBibGluZGx5IHdvdWxkIHRocm93IGEgYFR5cGVFcnJvcmAgb3V0IG9mIHJvdXRlXG4gKiByZXNvbHV0aW9uOyBhIG1pc3MgaXMganVzdCBcIm5vIGFnZW50XCIsIHdoaWNoIHRoZSByb3V0ZSByZXBvcnRzIGFzIDUwMy5cbiAqL1xuY29uc3QgcmVhZEFnZW50ID0gKHByb3ZpZGVyOiBBZ2VudFByb3ZpZGVyTGlrZSwgYWdlbnRJZD86IHN0cmluZyk6IHVua25vd24gPT4ge1xuICBjb25zdCByZWdpc3RyeSA9IHByb3ZpZGVyLmV4cG9ydHMoKSBhcyBQYXJ0aWFsPFJldHVyblR5cGU8QWdlbnRQcm92aWRlckxpa2VbXCJleHBvcnRzXCJdPj47XG4gIGlmIChhZ2VudElkKSByZXR1cm4gdHlwZW9mIHJlZ2lzdHJ5LmdldCA9PT0gXCJmdW5jdGlvblwiID8gcmVnaXN0cnkuZ2V0KGFnZW50SWQpIDogbnVsbDtcbiAgcmV0dXJuIHR5cGVvZiByZWdpc3RyeS5nZXREZWZhdWx0ID09PSBcImZ1bmN0aW9uXCIgPyByZWdpc3RyeS5nZXREZWZhdWx0KCkgOiBudWxsO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBhZ2VudCB0aGF0IGFuc3dlcnMgYSB0dXJuIGZyb20gdGhlIEFwcEtpdCBwbHVnaW4gcmVnaXN0cnkuXG4gKlxuICogYGFnZW50SWRgIHBpY2tzIGEgc3BlY2lmaWMgYWdlbnQ7IG9taXR0ZWQsIHRoZSBwcm92aWRlcidzIGRlZmF1bHQgYWdlbnRcbiAqIGFuc3dlcnMuIFJldHVybnMgYG51bGxgIHdoZW4gdGhlIHByb3ZpZGVyIGlzIGFic2VudCBvciB0aGUgaWQgaXMgdW5rbm93biwgc29cbiAqIHRoZSByb3V0ZSBjYW4gYW5zd2VyIDUwMyAvIDQwNCBpbnN0ZWFkIG9mIHRocm93aW5nLlxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNhcmRBZ2VudCA9IChcbiAgcGx1Z2luczogUmVhZG9ubHlNYXA8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgcHJvdmlkZXJOYW1lOiBzdHJpbmcsXG4gIGFnZW50SWQ/OiBzdHJpbmcsXG4pOiBDYXJkQWdlbnRMaWtlIHwgbnVsbCA9PiB7XG4gIGNvbnN0IHByb3ZpZGVyID0gcGx1Z2lucz8uZ2V0KHByb3ZpZGVyTmFtZSk7XG4gIGlmICghaXNBZ2VudFByb3ZpZGVyKHByb3ZpZGVyKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGZvdW5kID0gcmVhZEFnZW50KHByb3ZpZGVyLCBhZ2VudElkKTtcbiAgcmV0dXJuIGlzQ2FyZEFnZW50KGZvdW5kKSA/IGZvdW5kIDogbnVsbDtcbn07XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgcnVuQ2FyZFR1cm59LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXJkVHVybk9wdGlvbnMge1xuICAvKiogQ2FuY2VscyB0aGUgYWdlbnQgY2FsbCB3aXRoIHRoZSByZXF1ZXN0LiAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIE92ZXJyaWRlcyB0aGUgYm90IGlkZW50aXR5IHN0YW1wZWQgb24gdGhlIHJlcGx5LiAqL1xuICBib3Q/OiBhY3Rpdml0eUNvbnRyYWN0LkNoYW5uZWxBY2NvdW50O1xuICAvKipcbiAgICogQnVpbGRzIHRoZSBNYXN0cmEgYFJlcXVlc3RDb250ZXh0YCBmb3IgdGhlIHR1cm4sIGZyb21cbiAgICoge0BsaW5rIHJlc29sdmVDYXJkQ29udGV4dEZhY3Rvcnl9LiBPbWl0dGVkLCB0aGUgdHVybiBzdGlsbCBhbnN3ZXJzLCBidXRcbiAgICogd2l0aG91dCB0aGUgQXBwS2l0IHVzZXIgaXRzIHVzZXItc2NvcGVkIHRvb2xzIGNhbm5vdCByZWFjaCBEYXRhYnJpY2tzIC0gc29cbiAgICogdGhlIHJvdXRlIHNob3VsZCBhbHdheXMgc3VwcGx5IGl0LlxuICAgKi9cbiAgY3JlYXRlUmVxdWVzdENvbnRleHQ/OiBDYXJkQ29udGV4dEZhY3Rvcnk7XG59XG5cbi8qKiBCdWlsZHMgdGhlIHBlci10dXJuIHJlcXVlc3QgY29udGV4dCB0aGUgYWdlbnQncyB0b29scyByZWFkLiAqL1xuZXhwb3J0IHR5cGUgQ2FyZENvbnRleHRGYWN0b3J5ID0gKG9wdGlvbnM6IHtcbiAgdGhyZWFkSWQ/OiBzdHJpbmc7XG4gIHJlc291cmNlSWQ/OiBzdHJpbmc7XG59KSA9PiBQcm9taXNlPHVua25vd24+O1xuXG4vKipcbiAqIFRoZSBhZ2VudCBwbHVnaW4ncyByZXF1ZXN0LWNvbnRleHQgZmFjdG9yeSwgd2hlbiBpdCBleHBvc2VzIG9uZS5cbiAqXG4gKiBSZXNvbHZlZCBzZXBhcmF0ZWx5IGZyb20gdGhlIGFnZW50IGJlY2F1c2UgaXQgaXMgdGhlIHBpZWNlIHRoYXQgZ2l2ZXMgYW5cbiAqIG91dC1vZi1iYW5kIHR1cm4gdGhlIHNhbWUgdG9vbCByZWFjaCBhcyBhIGNoYXQgdHVybjsgYSBwcm92aWRlciB3aXRob3V0IGl0XG4gKiBzdGlsbCBhbnN3ZXJzLCBqdXN0IHdpdGhvdXQgdXNlci1zY29wZWQgdG9vbHMuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQ2FyZENvbnRleHRGYWN0b3J5ID0gKFxuICBwbHVnaW5zOiBSZWFkb25seU1hcDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuICBwcm92aWRlck5hbWU6IHN0cmluZyxcbik6IENhcmRDb250ZXh0RmFjdG9yeSB8IG51bGwgPT4ge1xuICBjb25zdCBwcm92aWRlciA9IHBsdWdpbnM/LmdldChwcm92aWRlck5hbWUpO1xuICBpZiAoIWlzQWdlbnRQcm92aWRlcihwcm92aWRlcikpIHJldHVybiBudWxsO1xuICBjb25zdCByZWdpc3RyeSA9IHByb3ZpZGVyLmV4cG9ydHMoKSBhcyBQYXJ0aWFsPFJldHVyblR5cGU8QWdlbnRQcm92aWRlckxpa2VbXCJleHBvcnRzXCJdPj47XG4gIGNvbnN0IGZhY3RvcnkgPSByZWdpc3RyeS5jcmVhdGVSZXF1ZXN0Q29udGV4dDtcbiAgcmV0dXJuIHR5cGVvZiBmYWN0b3J5ID09PSBcImZ1bmN0aW9uXCIgPyAob3B0aW9ucykgPT4gZmFjdG9yeS5jYWxsKHJlZ2lzdHJ5LCBvcHRpb25zKSA6IG51bGw7XG59O1xuXG4vKipcbiAqIFRoZSB0ZXh0IGEgYG1lc3NhZ2VgIGFjdGl2aXR5IGNhcnJpZXMsIG9yIGBudWxsYCB3aGVuIGl0IGNhcnJpZXMgbm9uZS5cbiAqXG4gKiBBIGNoYW5uZWwgc2VuZHMgcGxlbnR5IG9mIGFjdGl2aXRpZXMgd2l0aCBubyB1c2FibGUgdGV4dCAoYSBgdHlwaW5nYFxuICogaW5kaWNhdG9yLCBhIGBjb252ZXJzYXRpb25VcGRhdGVgIHdoZW4gc29tZW9uZSBqb2lucywgb3IgYSBgbWVzc2FnZWAgd2hvc2VcbiAqIHBheWxvYWQgaXMgb25seSBhbiBhdHRhY2htZW50KS4gVGhvc2UgYXJlIG5vdCBlcnJvcnMgLSB0aGV5IHNpbXBseSBwcm9kdWNlIG5vXG4gKiByZXBseSAtIHNvIHRoaXMgcmV0dXJucyBgbnVsbGAgcmF0aGVyIHRoYW4gdGhyb3dpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9tcHRPZiA9IChpbmJvdW5kOiBhY3Rpdml0eUNvbnRyYWN0LkFjdGl2aXR5KTogc3RyaW5nIHwgbnVsbCA9PlxuICBpbmJvdW5kLnR5cGUgPT09IFwibWVzc2FnZVwiID8gc3RyaW5nLnRyaW1Ub051bGwoaW5ib3VuZC50ZXh0ID8/IFwiXCIpIDogbnVsbDtcblxuLyoqXG4gKiBCdWlsZCBhbiBvdXRib3VuZCBhY3Rpdml0eSBjYXJyeWluZyBgY2FyZHNgLCBhZGRyZXNzZWQgYmFjayB0byB0aGUgc2VuZGVyIG9mXG4gKiBgaW5ib3VuZGAuXG4gKlxuICogRXhwb3J0ZWQgYmVjYXVzZSBhIGNsaWVudCByZW5kZXJpbmcgYW4gb3B0aW1pc3RpYyBsb2NhbCByZXBseSwgYW5kIGEgdGVzdFxuICogYXNzZXJ0aW5nIHRoZSBlbnZlbG9wZSwgYm90aCBuZWVkIHRoZSBzYW1lIGNvbnN0cnVjdGlvbiB0aGUgdHVybiB1c2VzLlxuICovXG5leHBvcnQgY29uc3QgdG9SZXBseUFjdGl2aXR5ID0gKFxuICBpbmJvdW5kOiBhY3Rpdml0eUNvbnRyYWN0LkFjdGl2aXR5LFxuICBjYXJkczogY2FyZC5BZGFwdGl2ZUNhcmRbXSxcbiAgb3B0aW9uczogeyBib3Q/OiBhY3Rpdml0eUNvbnRyYWN0LkNoYW5uZWxBY2NvdW50OyB0ZXh0Pzogc3RyaW5nIH0gPSB7fSxcbik6IGFjdGl2aXR5Q29udHJhY3QuQWN0aXZpdHkgPT4gKHtcbiAgdHlwZTogXCJtZXNzYWdlXCIsXG4gIGlkOiBoYXNoLmlkKCksXG4gIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICBmcm9tOiBvcHRpb25zLmJvdCA/PyBCT1RfQUNDT1VOVCxcbiAgLi4uKGluYm91bmQuZnJvbSA/IHsgcmVjaXBpZW50OiBpbmJvdW5kLmZyb20gfSA6IHt9KSxcbiAgLi4uKGluYm91bmQuY29udmVyc2F0aW9uID8geyBjb252ZXJzYXRpb246IGluYm91bmQuY29udmVyc2F0aW9uIH0gOiB7fSksXG4gIC4uLihvcHRpb25zLnRleHQgPyB7IHRleHQ6IG9wdGlvbnMudGV4dCB9IDoge30pLFxuICBhdHRhY2htZW50czogY2FyZHMubWFwKChkb2N1bWVudCkgPT4gYWN0aXZpdHlDb250cmFjdC50b0NhcmRBdHRhY2htZW50KGRvY3VtZW50KSksXG59KTtcblxuLyoqXG4gKiBSZWNvdmVyIGEge0BsaW5rIGNhcmQuQ2FyZFNwZWN9IGZyb20gYSBmdWxsIEFkYXB0aXZlIENhcmQgRE9DVU1FTlQuXG4gKlxuICogQSBjYXBhYmxlIG1vZGVsIGFza2VkIGZvciBcImEgTWljcm9zb2Z0IFRlYW1zIEFkYXB0aXZlIENhcmRcIiBvZnRlbiBhbnN3ZXJzIHdpdGhcbiAqIHRoZSBmaW5pc2hlZCAxLjUgZG9jdW1lbnQgaW5zdGVhZCBvZiB0aGUgc21hbGwgc3BlYyAtIGNvcnJlY3QgQWRhcHRpdmUgQ2FyZFxuICogSlNPTiwgd3Jvbmcgc2NoZW1hLCBzbyBgc3RydWN0dXJlZE91dHB1dGAgcmVqZWN0cyBpdCAoYHRpdGxlOiBleHBlY3RlZFxuICogc3RyaW5nYCkgYW5kIGEgZ2VudWluZWx5IGdvb2QgYW5zd2VyIGlzIHRocm93biBhd2F5LiBSZWFkaW5nIHRoZSBkb2N1bWVudCBiYWNrXG4gKiBpbnRvIHRoZSBzcGVjIHZvY2FidWxhcnkga2VlcHMgaXQ6IHRoZSBoZWFkaW5nIFRleHRCbG9ja3MgYmVjb21lXG4gKiB0aXRsZS9zdWJ0aXRsZSwgcmVtYWluaW5nIFRleHRCbG9ja3MgdGhlIGJvZHksIHRoZSBGYWN0U2V0IHRoZSBmYWN0cywgYW5kIGFueVxuICogYEFjdGlvbi5PcGVuVXJsYCB0aGUgYWN0aW9ucy5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgdG9sZXJhbnQgYWJvdXQgdGhlIGNvbnRhaW5lcjogYHR5cGVgIG1heSBiZSBtaXNzaW5nIGFuZCB0aGUgYm9keVxuICogbWF5IG5lc3QgZWxlbWVudHMgaW5zaWRlIGEgYENvbnRhaW5lcmAgLyBgQ29sdW1uU2V0YCwgc28gYmxvY2tzIGFyZSBjb2xsZWN0ZWRcbiAqIHJlY3Vyc2l2ZWx5IGFuZCBhbnl0aGluZyB1bnJlY29nbml6ZWQgaXMgaWdub3JlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGRvY3VtZW50Q2FyZFNwZWMgPSAodmFsdWU6IHVua25vd24pOiBjYXJkLkNhcmRTcGVjIHwgbnVsbCA9PiB7XG4gIGlmICghb2JqZWN0LmlzUmVjb3JkKHZhbHVlKSB8fCAhQXJyYXkuaXNBcnJheSh2YWx1ZS5ib2R5KSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgdGV4dHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZhY3RzOiBjYXJkLkNhcmRGYWN0W10gPSBbXTtcbiAgY29uc3QgY29sbGVjdCA9IChlbGVtZW50czogdW5rbm93bltdKTogdm9pZCA9PiB7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICBpZiAoIW9iamVjdC5pc1JlY29yZChlbGVtZW50KSkgY29udGludWU7XG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSBcIlRleHRCbG9ja1wiKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBzdHJpbmcudHJpbVRvTnVsbCh0eXBlb2YgZWxlbWVudC50ZXh0ID09PSBcInN0cmluZ1wiID8gZWxlbWVudC50ZXh0IDogXCJcIik7XG4gICAgICAgIGlmICh0ZXh0KSB0ZXh0cy5wdXNoKHRleHQpO1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09IFwiRmFjdFNldFwiICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudC5mYWN0cykpIHtcbiAgICAgICAgZm9yIChjb25zdCBmYWN0IG9mIGVsZW1lbnQuZmFjdHMpIHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBjYXJkLmNhcmRGYWN0U2NoZW1hLnNhZmVQYXJzZShmYWN0KTtcbiAgICAgICAgICBpZiAocGFyc2VkLnN1Y2Nlc3MpIGZhY3RzLnB1c2gocGFyc2VkLmRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBIENvbnRhaW5lciAvIENvbHVtblNldCAvIENvbHVtbiBuZXN0cyB0aGUgYmxvY2tzIHRoYXQgbWF0dGVyLlxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgW1wiaXRlbXNcIiwgXCJjb2x1bW5zXCJdKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZCA9IGVsZW1lbnRba2V5XTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmVzdGVkKSkgY29sbGVjdChuZXN0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29sbGVjdCh2YWx1ZS5ib2R5KTtcblxuICBjb25zdCBhY3Rpb25zOiBjYXJkLkNhcmRBY3Rpb25bXSA9IFtdO1xuICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBBcnJheS5pc0FycmF5KHZhbHVlLmFjdGlvbnMpID8gdmFsdWUuYWN0aW9ucyA6IFtdKSB7XG4gICAgaWYgKCFvYmplY3QuaXNSZWNvcmQoYWN0aW9uKSkgY29udGludWU7XG4gICAgY29uc3QgcGFyc2VkID0gY2FyZC5jYXJkQWN0aW9uU2NoZW1hLnNhZmVQYXJzZSh7IHRpdGxlOiBhY3Rpb24udGl0bGUsIHVybDogYWN0aW9uLnVybCB9KTtcbiAgICBpZiAocGFyc2VkLnN1Y2Nlc3MpIGFjdGlvbnMucHVzaChwYXJzZWQuZGF0YSk7XG4gIH1cblxuICBjb25zdCBbdGl0bGUsIC4uLnJlc3RdID0gdGV4dHM7XG4gIGlmICghdGl0bGUpIHJldHVybiBudWxsO1xuICAvLyBUaGUgc2Vjb25kIGJsb2NrIGlzIGEgc3VidGl0bGUgb25seSB3aGVuIHRoZSBkb2N1bWVudCBzdHlsZWQgaXQgYXMgb25lO1xuICAvLyBvdGhlcndpc2UgaXQgaXMgYm9keSB0ZXh0IGFuZCBtdXN0IG5vdCBiZSBkZW1vdGVkIHRvIGEgc3ViaGVhZGluZy5cbiAgY29uc3Qgc2Vjb25kID0gb2JqZWN0LmlzUmVjb3JkKHZhbHVlLmJvZHlbMV0pID8gdmFsdWUuYm9keVsxXSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgaGFzU3VidGl0bGUgPSByZXN0Lmxlbmd0aCA+IDAgJiYgc2Vjb25kPy5pc1N1YnRsZSA9PT0gdHJ1ZTtcbiAgY29uc3QgYm9keSA9IChoYXNTdWJ0aXRsZSA/IHJlc3Quc2xpY2UoMSkgOiByZXN0KS5qb2luKFwiXFxuXFxuXCIpO1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiB0b1RpdGxlKHRpdGxlKSxcbiAgICAuLi4oaGFzU3VidGl0bGUgJiYgcmVzdFswXSA/IHsgc3VidGl0bGU6IHJlc3RbMF0gfSA6IHt9KSxcbiAgICAuLi4oYm9keSA/IHsgdGV4dDogYm9keSB9IDoge30pLFxuICAgIC4uLihmYWN0cy5sZW5ndGggPiAwID8geyBmYWN0cyB9IDoge30pLFxuICAgIC4uLihhY3Rpb25zLmxlbmd0aCA+IDAgPyB7IGFjdGlvbnMgfSA6IHt9KSxcbiAgfTtcbn07XG5cbi8qKlxuICogVGhlIGNhcmQgdGhlIG1vZGVsIHByb2R1Y2VkLCB3aGVyZXZlciBpdCBlbmRlZCB1cC5cbiAqXG4gKiBgc3RydWN0dXJlZE91dHB1dGAgcmVqZWN0cyBhbnl0aGluZyBvZmYtc2NoZW1hIGJ5IFRIUk9XSU5HLCBhbmQgTWFzdHJhIHB1dHNcbiAqIHRoZSBvZmZlbmRpbmcgcGF5bG9hZCBvbiB0aGUgZXJyb3IgKGBkZXRhaWxzLnZhbHVlYCkgLSBzbyB0aGUgbW9kZWwncyByZWFsXG4gKiBhbnN3ZXIgaXMgcmVjb3ZlcmFibGUgZnJvbSBhIGZhaWxlZCBjYWxsLiBCb3RoIHRoZSBzcGVjIHNoYXBlIGFuZCBhIGZ1bGxcbiAqIEFkYXB0aXZlIENhcmQgZG9jdW1lbnQgYXJlIGFjY2VwdGVkLCBmcm9tIGFuIG9iamVjdCBvciBmcm9tIEpTT04gdGV4dC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlamVjdGVkQ2FyZFNwZWMgPSAoZXJyOiB1bmtub3duKTogY2FyZC5DYXJkU3BlYyB8IG51bGwgPT4ge1xuICBjb25zdCBkZXRhaWxzID0gb2JqZWN0LmlzUmVjb3JkKGVycikgPyBlcnIuZGV0YWlscyA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdmFsdWUgPSBvYmplY3QuaXNSZWNvcmQoZGV0YWlscykgPyBkZXRhaWxzLnZhbHVlIDogdW5kZWZpbmVkO1xuICBjb25zdCBjYW5kaWRhdGVzOiB1bmtub3duW10gPSBbXTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGNhbmRpZGF0ZXMucHVzaChqc29uLnBhcnNlKHZhbHVlLCB1bmRlZmluZWQpKTtcbiAgfSBlbHNlIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY2FuZGlkYXRlcy5wdXNoKHZhbHVlKTtcbiAgfVxuICBmb3IgKGNvbnN0IGNhbmRpZGF0ZSBvZiBjYW5kaWRhdGVzKSB7XG4gICAgY29uc3Qgc3BlYyA9IGNhcmQuY2FyZFNwZWNTY2hlbWEuc2FmZVBhcnNlKGNhbmRpZGF0ZSk7XG4gICAgaWYgKHNwZWMuc3VjY2VzcykgcmV0dXJuIHNwZWMuZGF0YTtcbiAgICBjb25zdCBmcm9tRG9jdW1lbnQgPSBkb2N1bWVudENhcmRTcGVjKGNhbmRpZGF0ZSk7XG4gICAgaWYgKGZyb21Eb2N1bWVudCkgcmV0dXJuIGZyb21Eb2N1bWVudDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogVHVybiB3aGF0ZXZlciB0aGUgYWdlbnQgcHJvZHVjZWQgaW50byBhIGNhcmQgc3BlYy5cbiAqXG4gKiBgc3RydWN0dXJlZE91dHB1dGAgaXMgYmVzdC1lZmZvcnQgaW4gcHJhY3RpY2UsIG5vdCBhIGd1YXJhbnRlZS4gQmVjYXVzZSB0aGVcbiAqIHNjaGVtYSBpcyBwcm9tcHQtaW5qZWN0ZWQgKHNlZSB7QGxpbmsgSlNPTl9QUk9NUFRfSU5KRUNUSU9OfSkgcmF0aGVyIHRoYW5cbiAqIGVuZm9yY2VkIGJ5IHRoZSBwcm92aWRlciwgYSBtb2RlbCBjYW4gYW5zd2VyIHdpdGggcHJvc2UsIHdpdGggSlNPTiB3cmFwcGVkIGluXG4gKiBhIGBgYGAgYGBganNvbiBgYGBgIGZlbmNlLCBvciAtIG9uIERhdGFicmlja3MgTW9kZWwgU2VydmluZyAtIHdpdGggYW4gZW1wdHlcbiAqIHBhcnNlZCBvYmplY3Qgd2hpbGUgdGhlIHRleHQgY2FycmllcyB0aGUgcmVhbCBhbnN3ZXIuIE9ic2VydmVkIGZhaWx1cmUgcmF0ZSBvblxuICogdGhlIGRlbW8gZW5kcG9pbnQgd2FzIHJvdWdobHkgb25lIHR1cm4gaW4gdGhyZWUsIGFsbCBvZiB3aGljaCBzdXJmYWNlZCBhcyBhXG4gKiBoYXJkIGBTVFJVQ1RVUkVEX09VVFBVVF9TQ0hFTUFfVkFMSURBVElPTl9GQUlMRURgIGFuZCBubyByZXBseSBhdCBhbGwuXG4gKlxuICogQSBtaXNzaW5nIGNhcmQgaXMgbm90IHdvcnRoIGRyb3BwaW5nIHRoZSBhbnN3ZXIgb3Zlciwgc28gdGhpcyByZWNvdmVycyBpblxuICogZm91ciBzdGFnZXM6IHRoZSBwYXJzZWQgb2JqZWN0IHdoZW4gaXQgdmFsaWRhdGVzOyBlbHNlIHRoZSBhcmd1bWVudHMgdGhlIGFnZW50XG4gKiBwYXNzZWQgdG8gYGNyZWF0ZV90ZWFtc19jYXJkYCAob24gdGhlIHByb3NlIHJldHJ5IGFuIGFnZW50IGhvbGRpbmcgdGhhdCB0b29sXG4gKiB1c3VhbGx5IGNhbGxzIGl0LCB3aGljaCBpcyBhIFJFQUwgY2FyZCBzcGVjLCBub3QgYSBndWVzcyk7IGVsc2UgYSBKU09OIG9iamVjdFxuICogZW1iZWRkZWQgaW4gdGhlIHRleHQ7IGVsc2UgdGhlIHByb3NlIHdyYXBwZWQgaW4gYSBtaW5pbWFsIHRleHQtb25seSBjYXJkLiBUaGVcbiAqIHVzZXIgYWx3YXlzIGdldHMgdGhlIGFnZW50J3MgYW5zd2VyOyBhdCB3b3JzdCBpdCBpcyBsZXNzIHN0cnVjdHVyZWQuXG4gKi9cbmNvbnN0IHRvQ2FyZFNwZWMgPSAocmVzdWx0OiBBZ2VudFJlc3VsdCk6IGNhcmQuQ2FyZFNwZWMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSBjYXJkLmNhcmRTcGVjU2NoZW1hLnNhZmVQYXJzZShyZXN1bHQub2JqZWN0KTtcbiAgaWYgKHBhcnNlZC5zdWNjZXNzKSByZXR1cm4gcGFyc2VkLmRhdGE7XG5cbiAgLy8gQSBtb2RlbCB0aGF0IGFuc3dlcmVkIHdpdGggdGhlIGZpbmlzaGVkIEFkYXB0aXZlIENhcmQgZG9jdW1lbnQgcmF0aGVyIHRoYW5cbiAgLy8gdGhlIHNwZWMgc3RpbGwgcHJvZHVjZWQgYSByZWFsIGNhcmQ7IHJlYWQgaXQgYmFjayBpbnRvIHRoZSBzcGVjIHZvY2FidWxhcnkuXG4gIGNvbnN0IGZyb21Eb2N1bWVudCA9IGRvY3VtZW50Q2FyZFNwZWMocmVzdWx0Lm9iamVjdCk7XG4gIGlmIChmcm9tRG9jdW1lbnQpIHJldHVybiBmcm9tRG9jdW1lbnQ7XG5cbiAgLy8gUHJlZmVyIGEgY2FyZCB0aGUgYWdlbnQgZXhwbGljaXRseSBjb21wb3NlZCB2aWEgdGhlIHRvb2wgb3ZlciBhbnl0aGluZ1xuICAvLyBzY3JhcGVkIG91dCBvZiBpdHMgcHJvc2UuXG4gIGNvbnN0IGZyb21Ub29sID0gdG9vbENhcmRTcGVjKHJlc3VsdCk7XG4gIGlmIChmcm9tVG9vbCkgcmV0dXJuIGZyb21Ub29sO1xuXG4gIGNvbnN0IHRleHQgPSBzdHJpbmcudHJpbVRvTnVsbChyZXN1bHQudGV4dCA/PyBcIlwiKTtcbiAgaWYgKHRleHQpIHtcbiAgICAvLyBBIGZlbmNlZCBvciBpbmxpbmUgSlNPTiBvYmplY3QgaW4gdGhlIHByb3NlOiB0aGUgbW9kZWwgZm9sbG93ZWQgdGhlXG4gICAgLy8gaW5zdHJ1Y3Rpb25zIGJ1dCB0aGUgcHJvdmlkZXIgZGlkIG5vdCBzdXJmYWNlIGEgcGFyc2VkIG9iamVjdC5cbiAgICBjb25zdCBlbWJlZGRlZCA9IHRleHQubWF0Y2goL1xce1tcXHNcXFNdKlxcfS8pO1xuICAgIGlmIChlbWJlZGRlZCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBqc29uLnBhcnNlKGVtYmVkZGVkWzBdLCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgcmV0cnkgPSBjYXJkLmNhcmRTcGVjU2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSk7XG4gICAgICBpZiAocmV0cnkuc3VjY2VzcykgcmV0dXJuIHJldHJ5LmRhdGE7XG4gICAgICBjb25zdCBhc0RvY3VtZW50ID0gZG9jdW1lbnRDYXJkU3BlYyh2YWx1ZSk7XG4gICAgICBpZiAoYXNEb2N1bWVudCkgcmV0dXJuIGFzRG9jdW1lbnQ7XG4gICAgfVxuICAgIC8vIFByb3NlIG9ubHk6IGtlZXAgdGhlIGFuc3dlciwgZHJvcCB0aGUgc3RydWN0dXJlLiBUaGUgZmlyc3QgbGluZSBiZWNvbWVzXG4gICAgLy8gdGhlIHRpdGxlIChhIGNhcmQgd2l0aCBubyB0aXRsZSByZW5kZXJzIGFzIGFuIHVudGl0bGVkIGJsb2NrKSwgdGhlIHJlc3RcbiAgICAvLyBzdGF5cyBhcyB0aGUgYm9keS5cbiAgICBjb25zdCBsaW5lcyA9IHRleHRcbiAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgLmZpbHRlcigobGluZSkgPT4gbGluZS50cmltKCkubGVuZ3RoID4gMClcbiAgICAgIC8vIEEgbW9kZWwgaW50cm9kdWNpbmcgaXRzIG93biBhbnN3ZXIgKFwiSGVyZSBpcyB0aGUgQWRhcHRpdmUgQ2FyZDpcIikgd291bGRcbiAgICAgIC8vIG90aGVyd2lzZSBiZWNvbWUgdGhlIGNhcmQncyBoZWFkbGluZSwgd2hpY2ggcmVhZHMgYXMgYSBidWcuIERyb3AgdGhlXG4gICAgICAvLyBwcmVhbWJsZSBzbyB0aGUgZmlyc3QgUkVBTCBsaW5lIGlzIHRoZSB0aXRsZS5cbiAgICAgIC5maWx0ZXIoKGxpbmUpID0+ICFQUkVBTUJMRV9SRS50ZXN0KGxpbmUudHJpbSgpKSk7XG4gICAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IGxpbmVzO1xuICAgIGNvbnN0IHRpdGxlID0gc3RyaW5nLnRyaW1Ub051bGwoZmlyc3QgPz8gXCJcIikgPz8gXCJBbnN3ZXJcIjtcbiAgICBjb25zdCBib2R5ID0gcmVzdC5qb2luKFwiXFxuXCIpLnRyaW0oKTtcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGU6IHRvVGl0bGUodGl0bGUpLFxuICAgICAgLi4uKGJvZHkgPyB7IHRleHQ6IGJvZHkgfSA6IHRpdGxlLmxlbmd0aCA+IDEyMCA/IHsgdGV4dDogdGl0bGUgfSA6IHt9KSxcbiAgICB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwidGVhbXM6IHRoZSBhZ2VudCByZXR1cm5lZCBuZWl0aGVyIGEgY2FyZCBub3IgYW55IHRleHQgdG8gZmFsbCBiYWNrIG9uXCIpO1xufTtcblxuLyoqXG4gKiBBIGxpbmUgdGhhdCBvbmx5IGFubm91bmNlcyB0aGUgY2FyZCByYXRoZXIgdGhhbiBzYXlpbmcgYW55dGhpbmcgLSBlLmcuXG4gKiBcIkhlcmUgaXMgdGhlIEFkYXB0aXZlIENhcmQ6XCIsIFwiSGVyZSdzIHlvdXIgVGVhbXMgY2FyZDpcIiwgXCJIZXJlIGFyZSB0aGUgY2FyZFxuICogZGV0YWlsczpcIi4gTWF0Y2hlZCBzbyBpdCBuZXZlciBiZWNvbWVzIHRoZSBjYXJkJ3MgdGl0bGUuXG4gKlxuICogQW5jaG9yZWQgdG8gYSBcImhlcmUgaXMvYXJlL2hlcmUncyAuLi4gY2FyZCAuLi5cIiBvcGVuZXIgdGhhdCBFTkRTIGluIGEgY29sb24sXG4gKiB3aGljaCBpcyB3aGF0IGtlZXBzIGl0IGZyb20gZWF0aW5nIGEgcmVhbCBzZW50ZW5jZSB0aGF0IG1lcmVseSBtZW50aW9ucyBhIGNhcmRcbiAqIChcIkhlcmUgaXMgdGhlIGNhcmQgcmVhZGVyIHN0YXR1czogb2ZmbGluZS5cIiBoYXMgdGV4dCBhZnRlciB0aGUgY29sb24pLlxuICovXG5jb25zdCBQUkVBTUJMRV9SRSA9IC9eKGhlcmUgKGlzfGFyZSl8aGVyZSdzKVxcYlteLiE/XSpcXGJjYXJkXFxiW14uIT86XSo6XFxzKiQvaTtcblxuLyoqXG4gKiBUcmltIGEgbGluZSBkb3duIHRvIHNvbWV0aGluZyB1c2FibGUgYXMgYSBjYXJkIHRpdGxlLiBBZGFwdGl2ZSBDYXJkIHRpdGxlcyBhcmVcbiAqIGEgc2luZ2xlIGJvbGQgbGluZSwgc28gYW4gb3Zlcmxvbmcgb25lIGlzIHRydW5jYXRlZCByYXRoZXIgdGhhbiB3cmFwcGVkOyB0aGVcbiAqIG1hcmtkb3duIGVtcGhhc2lzIGEgbW9kZWwgb2Z0ZW4gYWRkcyBpcyBzdHJpcHBlZCBzaW5jZSB0aGUgdGl0bGUgaXMgYWxyZWFkeVxuICogc3R5bGVkIGJvbGQuXG4gKi9cbmNvbnN0IHRvVGl0bGUgPSAodmFsdWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBsYWluID0gdmFsdWVcbiAgICAucmVwbGFjZSgvXiMrXFxzKi8sIFwiXCIpXG4gICAgLnJlcGxhY2UoL1xcKlxcKi9nLCBcIlwiKVxuICAgIC50cmltKCk7XG4gIHJldHVybiBwbGFpbi5sZW5ndGggPiAxMjAgPyBgJHtwbGFpbi5zbGljZSgwLCAxMTcpfS4uLmAgOiBwbGFpbjtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBhbiBhbnN3ZXIgdGhlIGFnZW50IGhhcyBhbHJlYWR5IHByb2R1Y2VkIGludG8gYSBjYXJkIHNwZWMuXG4gKlxuICogQSBzZWNvbmQsIGRlbGliZXJhdGVseSBzdGF0ZWxlc3MgcGFzczogdGhlIGZvcm1hdHRpbmcgcmVxdWVzdCBpcyBOT1QgdGhyZWFkZWRcbiAqIG9udG8gYWdlbnQgbWVtb3J5LCBzbyB0aGUgY29udmVyc2F0aW9uIHRoZSB1c2VyIHNlZXMga2VlcHMgb25seSB0aGVpciBxdWVzdGlvblxuICogYW5kIHRoZSBhbnN3ZXIsIG5vdCB0aGUgcmVmb3JtYXR0aW5nIGNoYXR0ZXIgaW4gYmV0d2Vlbi5cbiAqXG4gKiBSZXR1cm5zIGBudWxsYCB3aGVuIHRoZSBwYXNzIGlzIHVudXNhYmxlIChNYXN0cmEgdGhyb3dzIHdoZW4gdGhlIG1vZGVsIHJldHVybnNcbiAqIG5vIHBhcnNlZCBvYmplY3QpIHNvIHRoZSBjYWxsZXIgY2FuIGZhbGwgYmFjayB0byB0aGUgYW5zd2VyIHRleHQgLSBhIGxlc3NcbiAqIHN0cnVjdHVyZWQgY2FyZCBjYXJyeWluZyB0aGUgcmVhbCBhbnN3ZXIgYmVhdHMgbG9zaW5nIHRoZSBhbnN3ZXIuXG4gKi9cbmNvbnN0IGZvcm1hdEFzQ2FyZCA9IGFzeW5jIChcbiAgYWdlbnQ6IENhcmRBZ2VudExpa2UsXG4gIHByb21wdDogc3RyaW5nLFxuICBhbnN3ZXI6IHN0cmluZyxcbiAgcmVxdWVzdDogeyBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsOyByZXF1ZXN0Q29udGV4dD86IHVua25vd24gfSxcbik6IFByb21pc2U8Y2FyZC5DYXJkU3BlYyB8IG51bGw+ID0+IHtcbiAgY29uc3QgYm9keSA9IFtcbiAgICBDQVJEX0ZPUk1BVF9JTlNUUlVDVElPTlMsXG4gICAgXCJcIixcbiAgICBgUXVlc3Rpb246ICR7cHJvbXB0fWAsXG4gICAgXCJcIixcbiAgICBcIkFzc2lzdGFudCBhbnN3ZXI6XCIsXG4gICAgYW5zd2VyLFxuICBdLmpvaW4oXCJcXG5cIik7XG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgc3RydWN0dXJlZE91dHB1dDoge1xuICAgICAgc2NoZW1hOiBjYXJkLmNhcmRTcGVjU2NoZW1hLFxuICAgICAganNvblByb21wdEluamVjdGlvbjogSlNPTl9QUk9NUFRfSU5KRUNUSU9OLFxuICAgIH0sXG4gICAgLi4ucmVxdWVzdCxcbiAgfTtcbiAgLy8gTWFzdHJhIFRIUk9XUyB3aGVuIHRoZSBtb2RlbCByZXR1cm5zIG5vIHBhcnNlZCBvYmplY3QsIGFuZCBiZWNhdXNlIHRoZVxuICAvLyBzY2hlbWEgaXMgcHJvbXB0LWluamVjdGVkIHJhdGhlciB0aGFuIHByb3ZpZGVyLWVuZm9yY2VkIHRoYXQgaGFwcGVuc1xuICAvLyBpbnRlcm1pdHRlbnRseSBvbiB0aGUgc2FtZSBpbnB1dC4gT25lIHJldHJ5IGNvbnZlcnRzIG1vc3Qgb2YgdGhvc2UgbWlzc2VzXG4gIC8vIGludG8gYSBwcm9wZXIgY2FyZDsgdGhlIGFuc3dlciBpcyBhbHJlYWR5IHNhZmUgZWl0aGVyIHdheS5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCAyOyBhdHRlbXB0ICs9IDEpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRvQ2FyZFNwZWMoYXdhaXQgYWdlbnQuZ2VuZXJhdGUoYm9keSwgb3B0aW9ucykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gVGhlIHJlamVjdGVkIHBheWxvYWQgdXN1YWxseSBJUyB0aGUgY2FyZCAtIG1vc3Qgb2Z0ZW4gdGhlIGZ1bGwgQWRhcHRpdmVcbiAgICAgIC8vIENhcmQgZG9jdW1lbnQgcmF0aGVyIHRoYW4gdGhlIHNwZWMgLSBzbyBpdCBpcyBzYWx2YWdlZCBiZWZvcmUgcmV0cnlpbmcuXG4gICAgICBjb25zdCByZWplY3RlZCA9IHJlamVjdGVkQ2FyZFNwZWMoZXJyKTtcbiAgICAgIGlmIChyZWplY3RlZCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJyZWNvdmVyZWQgdGhlIGNhcmQgZnJvbSB0aGUgcmVqZWN0ZWQgc3RydWN0dXJlZCBwYXlsb2FkXCIpO1xuICAgICAgICByZXR1cm4gcmVqZWN0ZWQ7XG4gICAgICB9XG4gICAgICBsb2dnZXIud2FybihcImNhcmQgZm9ybWF0dGluZyBwYXNzIGZhaWxlZFwiLCB7XG4gICAgICAgIGF0dGVtcHQ6IGF0dGVtcHQgKyAxLFxuICAgICAgICBlcnJvcjogZXJyb3IuZXJyb3JNZXNzYWdlKGVyciksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgbG9nZ2VyLndhcm4oXCJmYWxsaW5nIGJhY2sgdG8gdGhlIGFuc3dlciB0ZXh0IGZvciB0aGUgY2FyZFwiKTtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFJ1biBvbmUgY29udmVyc2F0aW9uIHR1cm46IGRyaXZlIGBhZ2VudGAgd2l0aCB0aGUgaW5ib3VuZCBhY3Rpdml0eSdzIHRleHQgYW5kXG4gKiByZXR1cm4gdGhlIGFjdGl2aXRpZXMgdG8gYXBwZW5kIHRvIHRoZSB0cmFuc2NyaXB0LlxuICpcbiAqIFJldHVybnMgYW4gRU1QVFkgYXJyYXkgZm9yIGFuIGFjdGl2aXR5IHRoYXQgY2FycmllcyBubyBwcm9tcHQgKGEgdHlwaW5nXG4gKiBpbmRpY2F0b3IsIGEgam9pbiBldmVudCksIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBhIGJvdCBkb2VzIHdpdGggb25lIC0gdGhlXG4gKiByb3V0ZSBhbnN3ZXJzIGB7IGFjdGl2aXRpZXM6IFtdIH1gIGFuZCB0aGUgdHJhbnNjcmlwdCBpcyB1bmNoYW5nZWQuXG4gKlxuICogVHdvIGFnZW50IGNhbGxzLCBpbiB0aGlzIG9yZGVyOlxuICpcbiAqICAgMS4gdGhlIEFOU1dFUiAtIG5vIGBzdHJ1Y3R1cmVkT3V0cHV0YCwgc28gdGhlIGFnZW50J3MgdG9vbHMgYXJlIGF2YWlsYWJsZVxuICogICAgICBhbmQgdGhlIGNvbnRlbnQgbWF0Y2hlcyB3aGF0IHRoZSBzdHJlYW1pbmcgZW5kcG9pbnQgd291bGQgc2F5O1xuICogICAyLiB0aGUgRk9STUFUIC0ge0BsaW5rIGZvcm1hdEFzQ2FyZH0gY29tcGlsaW5nIHRoYXQgYW5zd2VyIGludG8gYSBjYXJkLlxuICpcbiAqIEV2ZXJ5IGZhaWx1cmUgbW9kZSBzdGlsbCB5aWVsZHMgdGhlIGFuc3dlcjogYSBjYXJkIHRoZSBhZ2VudCBjb21wb3NlZCB3aXRoXG4gKiBgY3JlYXRlX3RlYW1zX2NhcmRgIGR1cmluZyBwYXNzIDEgc2hvcnQtY2lyY3VpdHMgcGFzcyAyLCBhbmQgYSBmYWlsZWQgcGFzcyAyXG4gKiBmYWxscyBiYWNrIHRvIHtAbGluayB0b0NhcmRTcGVjfSBvdmVyIHRoZSBhbnN3ZXIgdGV4dC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJ1bkNhcmRUdXJuID0gYXN5bmMgKFxuICBhZ2VudDogQ2FyZEFnZW50TGlrZSxcbiAgaW5ib3VuZDogYWN0aXZpdHlDb250cmFjdC5BY3Rpdml0eSxcbiAgb3B0aW9uczogQ2FyZFR1cm5PcHRpb25zID0ge30sXG4pOiBQcm9taXNlPGFjdGl2aXR5Q29udHJhY3QuQWN0aXZpdHlbXT4gPT4ge1xuICBjb25zdCBwcm9tcHQgPSBwcm9tcHRPZihpbmJvdW5kKTtcbiAgaWYgKCFwcm9tcHQpIHJldHVybiBbXTtcblxuICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGluYm91bmQuY29udmVyc2F0aW9uPy5pZDtcbiAgY29uc3QgdXNlcklkID0gaW5ib3VuZC5mcm9tPy5pZDtcbiAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgPyB7IGFib3J0U2lnbmFsOiBvcHRpb25zLnNpZ25hbCB9IDoge307XG4gIC8vIFRoZSBBcHBLaXQgdXNlciByaWRlcyBvbiB0aGlzLCBzbyB0aGUgYWdlbnQncyB0b29scyAoR2VuaWUsIHNlcnZpbmcsIHRoZVxuICAvLyBtb2RlbCByZXNvbHZlcikgd29yayBleGFjdGx5IGFzIHRoZXkgZG8gb24gdGhlIGNoYXQgZW5kcG9pbnRzLiBCdWlsdCBvbmNlXG4gIC8vIGFuZCBzaGFyZWQgYnkgYm90aCBwYXNzZXMuXG4gIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gb3B0aW9ucy5jcmVhdGVSZXF1ZXN0Q29udGV4dFxuICAgID8gYXdhaXQgb3B0aW9ucy5jcmVhdGVSZXF1ZXN0Q29udGV4dCh7XG4gICAgICAgIC4uLihjb252ZXJzYXRpb25JZCA/IHsgdGhyZWFkSWQ6IGNvbnZlcnNhdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySWQgPyB7IHJlc291cmNlSWQ6IHVzZXJJZCB9IDoge30pLFxuICAgICAgfSlcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29udGV4dCA9IHJlcXVlc3RDb250ZXh0ID8geyByZXF1ZXN0Q29udGV4dCB9IDoge307XG4gIC8vIFRocmVhZCB0aGUgY29udmVyc2F0aW9uIG9udG8gYWdlbnQgbWVtb3J5IHNvIHRoZSBzYW1lIGBjb252ZXJzYXRpb24uaWRgXG4gIC8vIGNvbnRpbnVlcyBvbmUgY29udmVyc2F0aW9uLiBPbmx5IHBhc3NlZCB3aGVuIHRoZSBjbGllbnQgc3VwcGxpZWQgYm90aCBpZHMgLVxuICAvLyBNYXN0cmEgcmVxdWlyZXMgdGhlIHBhaXIsIGFuZCBhIG1lbW9yeS1sZXNzIGFnZW50IGlnbm9yZXMgaXQuXG4gIGNvbnN0IG1lbW9yeSA9XG4gICAgY29udmVyc2F0aW9uSWQgJiYgdXNlcklkID8geyBtZW1vcnk6IHsgdGhyZWFkOiBjb252ZXJzYXRpb25JZCwgcmVzb3VyY2U6IHVzZXJJZCB9IH0gOiB7fTtcblxuICBjb25zdCBhbnN3ZXJlZCA9IGF3YWl0IGFnZW50LmdlbmVyYXRlKGAke3Byb21wdH1cXG5cXG4ke0NBUkRfQU5TV0VSX0lOU1RSVUNUSU9OU31gLCB7XG4gICAgLi4ubWVtb3J5LFxuICAgIC4uLmNvbnRleHQsXG4gICAgLi4uc2lnbmFsLFxuICB9KTtcblxuICAvLyBBbiBhZ2VudCB0aGF0IGNvbXBvc2VkIGEgY2FyZCBpdHNlbGYgaGFzIGFscmVhZHkgc2FpZCBpdCBpbiB0aGUgcmlnaHRcbiAgLy8gdm9jYWJ1bGFyeTsgcmVmb3JtYXR0aW5nIGl0IHdvdWxkIG9ubHkgcmlzayBwYXJhcGhyYXNpbmcgdGhlIHZhbHVlcy5cbiAgY29uc3QgY29tcG9zZWQgPSB0b29sQ2FyZFNwZWMoYW5zd2VyZWQpO1xuICBjb25zdCBhbnN3ZXIgPSBzdHJpbmcudHJpbVRvTnVsbChzdHJpcEVtYmVkTWFya2VycyhhbnN3ZXJlZC50ZXh0ID8/IFwiXCIpKTtcbiAgY29uc3Qgc3BlYyA9XG4gICAgY29tcG9zZWQgPz9cbiAgICAoYW5zd2VyID8gYXdhaXQgZm9ybWF0QXNDYXJkKGFnZW50LCBwcm9tcHQsIGFuc3dlciwgeyAuLi5jb250ZXh0LCAuLi5zaWduYWwgfSkgOiBudWxsKTtcblxuICBjb25zdCBkb2N1bWVudCA9IGJ1aWxkQWRhcHRpdmVDYXJkKFxuICAgIHNwZWMgPz8gdG9DYXJkU3BlYyh7IC4uLmFuc3dlcmVkLCAuLi4oYW5zd2VyID8geyB0ZXh0OiBhbnN3ZXIgfSA6IHt9KSB9KSxcbiAgKTtcbiAgcmV0dXJuIFt0b1JlcGx5QWN0aXZpdHkoaW5ib3VuZCwgW2RvY3VtZW50XSwgeyAuLi4ob3B0aW9ucy5ib3QgPyB7IGJvdDogb3B0aW9ucy5ib3QgfSA6IHt9KSB9KV07XG59O1xuIl19
|
|
509
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnZlcnNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDRztBQUVILE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxRQUFRLElBQUksY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFtRGhELG1FQUFtRTtBQUNuRSxNQUFNLGVBQWUsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxDQUFDO0FBRTVEOzs7OztHQUtHO0FBQ0gsTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFtQixFQUF3QixFQUFFO0lBQ2pFLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUFFLFNBQVM7UUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hGLElBQUksTUFBTSxDQUFDLE9BQU87WUFBRSxPQUFPLE1BQU0sQ0FBQyxJ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QU07S0FDVixDQUFDLENBQUM7SUFFSCx3RUFBd0U7SUFDeEUsdUVBQXVFO0lBQ3ZFLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLElBQUksR0FDUixRQUFRO1FBQ1IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUV6RixNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FDaEMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQ3pFLENBQUM7SUFDRixPQUFPLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgVGVhbXMgY29udmVyc2F0aW9uIHR1cm46IHJ1biBhIE1hc3RyYSBhZ2VudCBhZ2FpbnN0IGFuIGluYm91bmQgQm90XG4gKiBGcmFtZXdvcmsgYWN0aXZpdHkgYW5kIGFuc3dlciB3aXRoIEFkYXB0aXZlIENhcmQgYXR0YWNobWVudHMuXG4gKlxuICogVGhpcyBpcyB0aGUgcGllY2UgdGhhdCBtYWtlcyBgUE9TVCAvYXBpL3RlYW1zL2FjdGl2aXR5YCBiZWhhdmUgbGlrZSBhIFRlYW1zXG4gKiBib3QgcmF0aGVyIHRoYW4gYSBjaGF0IEFQSSB0aGF0IGhhcHBlbnMgdG8gcmV0dXJuIEpTT04uIEEgdHVybiBpczpcbiAqXG4gKiAgIDEuIHJlYWQgdGhlIHVzZXIncyB0ZXh0IG9mZiB0aGUgaW5ib3VuZCBgbWVzc2FnZWAgYWN0aXZpdHk7XG4gKiAgIDIuIEFOU1dFUiBpdCAtIGEgbm9ybWFsIHRvb2wtdXNpbmcgYWdlbnQgdHVybiwgd2l0aCBubyBtZW50aW9uIG9mIGNhcmRzLCBzb1xuICogICAgICB0aGUgYWdlbnQgcXVlcmllcyBHZW5pZSAvIGNhbGxzIGl0cyB0b29scyBleGFjdGx5IGFzIGl0IHdvdWxkIG9uIGFcbiAqICAgICAgc3RyZWFtaW5nIGNoYXQgZW5kcG9pbnQ7XG4gKiAgIDMuIEZPUk1BVCB0aGF0IGFuc3dlciBpbnRvIGEge0BsaW5rIGNhcmQuQ2FyZFNwZWN9IGluIGEgc2Vjb25kIHBhc3MsIHZpYVxuICogICAgICBNYXN0cmEncyBgc3RydWN0dXJlZE91dHB1dGAgKHByb21wdC1pbmplY3RlZCwgc2VlXG4gKiAgICAgIHtAbGluayBKU09OX1BST01QVF9JTkpFQ1RJT059KTtcbiAqICAgNC4gY29tcGlsZSB0aGUgc3BlYyB3aXRoIHRoZSBzYW1lIGRldGVybWluaXN0aWMgYnVpbGRlciB0aGVcbiAqICAgICAgYGNyZWF0ZV90ZWFtc19jYXJkYCB0b29sIHVzZXMsIGFuZCBhdHRhY2ggaXQgdG8gYW4gb3V0Ym91bmQgYWN0aXZpdHkuXG4gKlxuICogVGhlIHR3byBwYXNzZXMgYXJlIHRoZSBpbXBvcnRhbnQgcGFydC4gQXNraW5nIGZvciB0aGUgYW5zd2VyIEFORCB0aGUgY2FyZFxuICogc2hhcGUgaW4gT05FIHJlcXVlc3QgbWFrZXMgdGhlIG1vZGVsIHRyZWF0IGZvcm1hdHRpbmcgYXMgdGhlIHRhc2s6IGl0IGVtaXRzIGFcbiAqIGNhcmQgc3RyYWlnaHQgYXdheSBhbmQgbmV2ZXIgY2FsbHMgaXRzIHRvb2xzLCBzbyBhIHF1ZXN0aW9uIHRoYXQgc2hvdWxkIGhhdmVcbiAqIHF1ZXJpZWQgYSBkYXRhIHNvdXJjZSBjYW1lIGJhY2sgYXMgXCJJIGRvbid0IGhhdmUgYSByZWFsIHN5c3RlbSBjb25uZWN0ZWQgLVxuICogaGVyZSBpcyBhIHRlbXBsYXRlIGNhcmQgd2l0aCBwbGFjZWhvbGRlcnNcIi4gQW5zd2VyaW5nIGZpcnN0LCB0aGVuIGZvcm1hdHRpbmcgYVxuICogUkVBTCBhbnN3ZXIsIG1ha2VzIHRoaXMgZW5kcG9pbnQncyBjb250ZW50IGlkZW50aWNhbCB0byB0aGUgc3RyZWFtaW5nXG4gKiBlbmRwb2ludCdzOyBvbmx5IHRoZSBwcmVzZW50YXRpb24gZGlmZmVycy5cbiAqXG4gKiBGb3JtYXR0aW5nIGlzIGFsc28gd2h5IHRoZSB0dXJuIGRvZXMgbm90IHNpbXBseSByZWx5IG9uIHRoZSBhZ2VudCBjYWxsaW5nXG4gKiBgY3JlYXRlX3RlYW1zX2NhcmRgOiBvbiB0aGlzIGVuZHBvaW50IGEgY2FyZCBJUyB0aGUgcmVzcG9uc2UgZm9ybWF0LCBzbyBpdFxuICogc2hvdWxkIGJlIGEgcHJvcGVydHkgb2YgdGhlIHR1cm4gcmF0aGVyIHRoYW4gYSB0b29sIHRoZSBtb2RlbCBtYXkgZm9yZ2V0LlxuICogQWdlbnRzIGtlZXAgdGhlIHRvb2wgZm9yIHRoZSBvdGhlciBkaXJlY3Rpb24gLSBhbnN3ZXJpbmcgaW4gcHJvc2Ugb24gYSBub3JtYWxcbiAqIGNoYXQgZW5kcG9pbnQgYW5kIGNob29zaW5nIHRvIGF0dGFjaCBhIGNhcmQuIFdoZW4gdGhlIGFnZW50IERPRVMgY2FsbCBpdFxuICogZHVyaW5nIHRoZSBhbnN3ZXJpbmcgcGFzcywgdGhhdCBzcGVjIHdpbnMgYW5kIHRoZSBmb3JtYXR0aW5nIHBhc3MgaXMgc2tpcHBlZC5cbiAqXG4gKiBUaGUgY29udmVyc2F0aW9uIGlkIGRvdWJsZXMgYXMgdGhlIGFnZW50J3MgbWVtb3J5IHRocmVhZCBpZCwgc28gYSBjbGllbnQgdGhhdFxuICoga2VlcHMgcG9zdGluZyB0aGUgc2FtZSBgY29udmVyc2F0aW9uLmlkYCBnZXRzIGEgY29udGludW91cyBjb252ZXJzYXRpb24gLSB0aGVcbiAqIHNhbWUgbWFwcGluZyBhIHJlYWwgY2hhbm5lbCByZWxpZXMgb24uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGVycm9yLCBoYXNoLCBqc29uLCBsb2csIG9iamVjdCwgc3RyaW5nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGFjdGl2aXR5IGFzIHNoYXJlZEFjdGl2aXR5LCBjYXJkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXRlYW1zXCI7XG5pbXBvcnQgeyBidWlsZEFkYXB0aXZlQ2FyZCB9IGZyb20gXCIuL2J1aWxkZXIudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInRlYW1zOmNvbnZlcnNhdGlvblwiKTtcblxuLyoqXG4gKiBNaW5pbWFsIHN0cnVjdHVyYWwgc2hhcGUgb2YgdGhlIE1hc3RyYSBgQWdlbnRgIHRoaXMgbW9kdWxlIGRyaXZlcy5cbiAqXG4gKiBEZWNsYXJlZCBzdHJ1Y3R1cmFsbHkgcmF0aGVyIHRoYW4gaW1wb3J0aW5nIGBAbWFzdHJhL2NvcmVgJ3MgYEFnZW50YDogdGhpc1xuICogcGFja2FnZSBtdXN0IG5vdCBkZXBlbmQgb24gdGhlIE1hc3RyYSBwbHVnaW4gKHRoZSBwbHVnaW4gZGVwZW5kcyBvbiBub3RoaW5nXG4gKiBoZXJlIGVpdGhlciksIGFuZCBhIHR1cm4gb25seSBldmVyIG5lZWRzIGBnZW5lcmF0ZWAuIEFueSBvYmplY3Qgd2l0aCBhXG4gKiBjb21wYXRpYmxlIGBnZW5lcmF0ZWAgc2F0aXNmaWVzIGl0LCB3aGljaCBhbHNvIG1ha2VzIHRoZSB0dXJuIHRyaXZpYWxseVxuICogdGVzdGFibGUgd2l0aCBhIHN0dWIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZEFnZW50TGlrZSB7XG4gIGdlbmVyYXRlKFxuICAgIHByb21wdDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHN0cnVjdHVyZWRPdXRwdXQ/OiB7XG4gICAgICAgIHNjaGVtYTogdHlwZW9mIGNhcmQuY2FyZFNwZWNTY2hlbWE7XG4gICAgICAgIGpzb25Qcm9tcHRJbmplY3Rpb24/OiBib29sZWFuIHwgXCJzeXN0ZW1cIiB8IFwiaW5saW5lXCI7XG4gICAgICB9O1xuICAgICAgbWVtb3J5PzogeyB0aHJlYWQ6IHN0cmluZzsgcmVzb3VyY2U6IHN0cmluZyB9O1xuICAgICAgLyoqXG4gICAgICAgKiBNYXN0cmEncyBwZXItdHVybiBgUmVxdWVzdENvbnRleHRgLiBPcGFxdWUgaGVyZSAtIHRoZSBvYmplY3QgY29tZXMgZnJvbVxuICAgICAgICogdGhlIGFnZW50IHBsdWdpbiAoc2VlIHtAbGluayBBZ2VudFByb3ZpZGVyTGlrZS5leHBvcnRzfSkgYW5kIGlzIG9ubHlcbiAgICAgICAqIGZvcndhcmRlZCAtIGJ1dCBSRVFVSVJFRCBmb3IgcGFyaXR5IHdpdGggdGhlIGNoYXQgZW5kcG9pbnRzOiBNYXN0cmEnc1xuICAgICAgICogdXNlci1zY29wZWQgdG9vbHMgcmVhZCB0aGUgQXBwS2l0IHVzZXIgb2ZmIGl0LCBzbyBhIHR1cm4gd2l0aG91dCBvbmVcbiAgICAgICAqIGFuc3dlcnMgXCJ0aGUgZGF0YSBzb3VyY2UgaXMgdW5yZWFjaGFibGVcIiB3aGVyZSBjaGF0IGFuc3dlcnMgd2l0aCBkYXRhLlxuICAgICAgICovXG4gICAgICByZXF1ZXN0Q29udGV4dD86IHVua25vd247XG4gICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAgIH0sXG4gICk6IFByb21pc2U8QWdlbnRSZXN1bHQ+O1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBNYXN0cmEncyBgZ2VuZXJhdGVgIHJlc3VsdCBhIHR1cm4gcmVhZHMuXG4gKlxuICogYHRvb2xSZXN1bHRzYCBtYXR0ZXJzIGFzIG11Y2ggYXMgYG9iamVjdGAgaGVyZTogd2hlbiBzdHJ1Y3R1cmVkIG91dHB1dCBmYWlsc1xuICogYW5kIHRoZSB0dXJuIHJlLWFza3MgYXMgcHJvc2UsIGFuIGFnZW50IGhvbGRpbmcgdGhlIGBjcmVhdGVfdGVhbXNfY2FyZGAgdG9vbFxuICogdHlwaWNhbGx5IENBTExTIGl0LCBzbyB0aGUgYmVzdCBhdmFpbGFibGUgY2FyZCBzcGVjIGlzIHRoZSB0b29sJ3MgYXJndW1lbnRzIC1cbiAqIGFscmVhZHkgaW4gdGhlIHJpZ2h0IHZvY2FidWxhcnkgLSByYXRoZXIgdGhhbiBhbnl0aGluZyBpbiB0aGUgcHJvc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRSZXN1bHQge1xuICBvYmplY3Q/OiB1bmtub3duO1xuICB0ZXh0Pzogc3RyaW5nO1xuICB0b29sUmVzdWx0cz86IHtcbiAgICBwYXlsb2FkPzogeyB0b29sTmFtZT86IHN0cmluZzsgYXJncz86IHVua25vd24gfTtcbiAgICB0b29sTmFtZT86IHN0cmluZztcbiAgICBhcmdzPzogdW5rbm93bjtcbiAgfVtdO1xufVxuXG4vKiogVG9vbCBpZCB3aG9zZSBhcmd1bWVudHMgYXJlIGFscmVhZHkgYSB7QGxpbmsgY2FyZC5DYXJkU3BlY30uICovXG5jb25zdCBDQVJEX1RPT0xfTkFNRVMgPSBbXCJjcmVhdGVfdGVhbXNfY2FyZFwiLCBcImNyZWF0ZUNhcmRcIl07XG5cbi8qKlxuICogVGhlIGNhcmQgc3BlYyBhbiBhZ2VudCBwYXNzZWQgdG8gdGhlIGNhcmQgdG9vbCwgaWYgaXQgY2FsbGVkIGl0LlxuICpcbiAqIE1hc3RyYSBuZXN0cyBhIHRvb2wgcmVzdWx0IHVuZGVyIGBwYXlsb2FkYCAoYHsgcGF5bG9hZDogeyB0b29sTmFtZSwgYXJncyB9IH1gKVxuICogYnV0IGhhcyB1c2VkIGEgZmxhdCBzaGFwZSB0b28sIHNvIGJvdGggYXJlIHJlYWQuXG4gKi9cbmNvbnN0IHRvb2xDYXJkU3BlYyA9IChyZXN1bHQ6IEFnZW50UmVzdWx0KTogY2FyZC5DYXJkU3BlYyB8IG51bGwgPT4ge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlc3VsdC50b29sUmVzdWx0cyA/PyBbXSkge1xuICAgIGNvbnN0IG5hbWUgPSBlbnRyeS5wYXlsb2FkPy50b29sTmFtZSA/PyBlbnRyeS50b29sTmFtZTtcbiAgICBpZiAoIW5hbWUgfHwgIUNBUkRfVE9PTF9OQU1FUy5pbmNsdWRlcyhuYW1lKSkgY29udGludWU7XG4gICAgY29uc3QgcGFyc2VkID0gY2FyZC5jYXJkU3BlY1NjaGVtYS5zYWZlUGFyc2UoZW50cnkucGF5bG9hZD8uYXJncyA/PyBlbnRyeS5hcmdzKTtcbiAgICBpZiAocGFyc2VkLnN1Y2Nlc3MpIHJldHVybiBwYXJzZWQuZGF0YTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbi8qKlxuICogQXNrIGZvciB0aGUgY2FyZCBzaGFwZSB2aWEgUFJPTVBUIGluamVjdGlvbiByYXRoZXIgdGhhbiB0aGUgcHJvdmlkZXIncyBuYXRpdmVcbiAqIHJlc3BvbnNlIGZvcm1hdC5cbiAqXG4gKiBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgcmVqZWN0cyBhIHJlcXVlc3QgY2FycnlpbmcgYm90aCBgcmVzcG9uc2VfZm9ybWF0YCBhbmRcbiAqIGB0b29sc2AgKFwiQ2Fubm90IHNwZWNpZnkgYm90aCByZXNwb25zZV9mb3JtYXQgYW5kIHRvb2xzIGluIHRoZSBzYW1lIHJlcXVlc3RcIiksXG4gKiBhbmQgdGhlIGFnZW50cyB0aGlzIGVuZHBvaW50IGRyaXZlcyBub3JtYWxseSBkbyBoYXZlIHRvb2xzLiBOYXRpdmUgc3RydWN0dXJlZFxuICogb3V0cHV0IHdvdWxkIHRoZXJlZm9yZSBmYWlsIGZvciBleGFjdGx5IHRoZSBhZ2VudHMgd29ydGggdGFsa2luZyB0bywgc28gdGhlXG4gKiBzY2hlbWEgaXMgaW5qZWN0ZWQgYXMgaW5zdHJ1Y3Rpb25zIGluc3RlYWQgLSB3aGljaCBjb3N0cyBub3RoaW5nIGhlcmUgYmVjYXVzZVxuICogdGhlIGFuc3dlciBpcyByZS12YWxpZGF0ZWQgd2l0aCBgY2FyZFNwZWNTY2hlbWFgIGJlZm9yZSBpdCBpcyBjb21waWxlZC5cbiAqL1xuY29uc3QgSlNPTl9QUk9NUFRfSU5KRUNUSU9OID0gXCJzeXN0ZW1cIiBhcyBjb25zdDtcblxuLyoqIFRoZSBib3QncyBpZGVudGl0eSBvbiBvdXRib3VuZCBhY3Rpdml0aWVzIHdoZW4gdGhlIGNhbGxlciBuYW1lcyBub25lLiAqL1xuZXhwb3J0IGNvbnN0IEJPVF9BQ0NPVU5UOiBzaGFyZWRBY3Rpdml0eS5DaGFubmVsQWNjb3VudCA9IHtcbiAgaWQ6IFwiZGJ4LXRvb2xzLXRlYW1zLWJvdFwiLFxuICBuYW1lOiBcIkRhdGFicmlja3MgQWdlbnRcIixcbn07XG5cbi8qKlxuICogSW5zdHJ1Y3Rpb25zIGZvciB0aGUgRk9STUFUVElORyBwYXNzIG9ubHkgLSB0dXJuaW5nIGFuIGFuc3dlciB0aGUgYWdlbnQgaGFzXG4gKiBhbHJlYWR5IHByb2R1Y2VkIGludG8gdGhlIGNhcmQgdm9jYWJ1bGFyeS5cbiAqXG4gKiBEZWxpYmVyYXRlbHkgTk9UIHNlbnQgd2l0aCB0aGUgdXNlcidzIHF1ZXN0aW9uLiBBc2tpbmcgZm9yIGEgY2FyZCBhbmQgYW5cbiAqIGFuc3dlciBpbiBvbmUgcmVxdWVzdCBtYWtlcyB0aGUgbW9kZWwgdHJlYXQgZm9ybWF0dGluZyBhcyB0aGUgdGFzazogaXQgZW1pdHMgYVxuICogY2FyZCBpbW1lZGlhdGVseSBpbnN0ZWFkIG9mIGNhbGxpbmcgaXRzIHRvb2xzLCBzbyBhIHF1ZXN0aW9uIHRoYXQgc2hvdWxkIGhhdmVcbiAqIHF1ZXJpZWQgR2VuaWUgY2FtZSBiYWNrIGFzIFwiSSBkb24ndCBoYXZlIGEgcmVhbCBzeXN0ZW0gY29ubmVjdGVkIC0gaGVyZSBpcyBhXG4gKiB0ZW1wbGF0ZSBjYXJkXCIuIEZvcm1hdHRpbmcgaXMgYSBzZXBhcmF0ZSwgc2Vjb25kIHBhc3Mgb3ZlciBhIHJlYWwgYW5zd2VyLlxuICovXG5leHBvcnQgY29uc3QgQ0FSRF9GT1JNQVRfSU5TVFJVQ1RJT05TID0gW1xuICBcIlJlZm9ybWF0IHRoZSBhc3Npc3RhbnQgYW5zd2VyIGJlbG93IGFzIGEgTWljcm9zb2Z0IFRlYW1zIEFkYXB0aXZlIENhcmQuXCIsXG4gIFwiUHJlc2VydmUgdGhlIGFuc3dlcidzIGZhY3RzIEVYQUNUTFkgLSBldmVyeSBudW1iZXIsIG5hbWUsIGRhdGUgYW5kIGlkLlwiLFxuICBcIkRvIG5vdCBhZGQgY2F2ZWF0cywgcGxhY2Vob2xkZXJzIG9yIGludmVudGVkIHZhbHVlcywgYW5kIGRvIG5vdCBkZXNjcmliZSB0aGVcIixcbiAgXCJjYXJkOyBpZiB0aGUgYW5zd2VyIHN0YXRlcyBhIHZhbHVlLCB0aGF0IHZhbHVlIGJlbG9uZ3MgaW4gdGhlIGNhcmQuXCIsXG4gIFwiUHV0IHRoZSBoZWFkbGluZSBmaW5kaW5nIGluIGB0aXRsZWAgYW5kIGtlZXAgaXQgdW5kZXIgfjYwIGNoYXJhY3RlcnMuXCIsXG4gIFwiVXNlIGB0ZXh0YCBmb3IgdGhlIGV4cGxhbmF0aW9uLCB3aXRoICctJyBidWxsZXRzIGZvciBsaXN0cy5cIixcbiAgXCJVc2UgYGZhY3RzYCBmb3Iga2V5L3ZhbHVlIGRldGFpbCAobWV0cmljcywgY291bnRzLCBvd25lcnMsIGlkcykgaW5zdGVhZCBvZlwiLFxuICBcIndyaXRpbmcgaXQgYXMgcHJvc2UuXCIsXG4gIFwiQWRkIGBhY3Rpb25zYCBvbmx5IGZvciBVUkxzIHByZXNlbnQgaW4gdGhlIGFuc3dlcjsgbmV2ZXIgaW52ZW50IGEgbGluay5cIixcbiAgXCJEcm9wIGFueSBgW2NoYXJ0Oi4uLl1gIC8gYFtkYXRhOi4uLl1gIG1hcmtlcjogYSBjYXJkIGNhbm5vdCByZW5kZXIgb25lLCBzb1wiLFxuICBcIndyaXRlIHRoZSB2YWx1ZXMgaXQgc3Rvb2QgZm9yIGludG8gYGZhY3RzYCBvciBgdGV4dGAgaW5zdGVhZC5cIixcbl0uam9pbihcIiBcIik7XG5cbi8qKlxuICogTnVkZ2UgYWRkZWQgdG8gdGhlIEFOU1dFUklORyBwYXNzLlxuICpcbiAqIFRoZSBhZ2VudCBhbnN3ZXJzIHRoZSBxdWVzdGlvbiBub3JtYWxseSBoZXJlIC0gdG9vbHMgaW5jbHVkZWQgLSBzbyB0aGlzIG9ubHlcbiAqIGFza3MgZm9yIHRoZSBzaGFwZSB0aGF0IHN1cnZpdmVzIGNvbXByZXNzaW9uIGludG8gYSBjYXJkIHdlbGwuIEl0IG11c3Qgbm90XG4gKiBtZW50aW9uIGNhcmRzLCBvciB0aGUgbW9kZWwgc3RhcnRzIGZvcm1hdHRpbmcgaW5zdGVhZCBvZiBhbnN3ZXJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBDQVJEX0FOU1dFUl9JTlNUUlVDVElPTlMgPSBbXG4gIFwiQW5zd2VyIHVzaW5nIHlvdXIgdG9vbHMgYW5kIGRhdGEgc291cmNlcyBhcyB5b3Ugbm9ybWFsbHkgd291bGQuXCIsXG4gIFwiQmUgY29uY2lzZSBhbmQgbGVhZCB3aXRoIHRoZSBmaW5kaW5nLCBhbmQgc3RhdGUgY29uY3JldGUgdmFsdWVzXCIsXG4gIFwiKG51bWJlcnMsIG5hbWVzLCBkYXRlcykgcGxhaW5seSBzbyB0aGV5IGNhbiBiZSBzdW1tYXJpemVkLlwiLFxuICAvLyBBZ2VudHMgb24gYSBjaGF0IGVuZHBvaW50IGFyZSB0b2xkIHRvIGRlZmVyIHRhYmxlcyBhbmQgY2hhcnRzIHRvIHRoZSBob3N0IFVJXG4gIC8vIGFzIGBbZGF0YTo8aWQ+XWAgLyBgW2NoYXJ0OjxpZD5dYCBtYXJrZXJzLiBBIGNhcmQgaGFzIG5vIGVtYmVkIHNsb3QgdG8gZmlsbCxcbiAgLy8gc28gYSBkZWZlcnJlZCBudW1iZXIgYXJyaXZlcyBhcyBhIGxpdGVyYWwgYFtkYXRhOjAxZjEuLi5dYCBpbiB0aGUgY2FyZC4gVGhlXG4gIC8vIHR1cm4gYXNrcyBmb3IgdGhlIHZhbHVlcyB0aGVtc2VsdmVzIGluc3RlYWQsIGFuZCBzdHJpcHMgYW55IHRoYXQgc2xpcFxuICAvLyB0aHJvdWdoIChzZWUgRU1CRURfTUFSS0VSX1JFKS5cbiAgXCJUaGlzIGNoYW5uZWwgY2Fubm90IGRpc3BsYXkgY2hhcnQgb3IgZGF0YSBlbWJlZHM6IGRvIG5vdCBlbWl0XCIsXG4gIFwiYFtjaGFydDouLi5dYCBvciBgW2RhdGE6Li4uXWAgbWFya2VycyAtIHdyaXRlIHRoZSBhY3R1YWwgbnVtYmVycyB5b3VcIixcbiAgXCJyZXRyaWV2ZWQgaW50byB5b3VyIGFuc3dlciBpbnN0ZWFkLlwiLFxuXS5qb2luKFwiIFwiKTtcblxuLyoqXG4gKiBBIGhvc3QtZW1iZWQgbWFya2VyIChgW2NoYXJ0OjxpZD5dYCwgYFtkYXRhOjxpZD5dYCkgaW4gYW4gYWdlbnQncyBwcm9zZS5cbiAqXG4gKiBDaGF0IGhvc3RzIHN3YXAgdGhlc2UgZm9yIGEgcmVuZGVyZWQgY2hhcnQgb3IgdGFibGUuIEFuIEFkYXB0aXZlIENhcmQgaGFzIG5vXG4gKiBzdWNoIHNsb3QsIHNvIGEgbWFya2VyIHRoYXQgc3Vydml2ZXMgaW50byBjYXJkIHRleHQgcmVuZGVycyBhcyBsaXRlcmFsXG4gKiBgW2RhdGE6MDFmMTg5NWMtLi4uXWAgbm9pc2Ugd2hlcmUgYSBudW1iZXIgc2hvdWxkIGJlLiBUaGUgYW5zd2VyaW5nIHBhc3MgYXNrc1xuICogdGhlIGFnZW50IG5vdCB0byBlbWl0IHRoZW07IHRoaXMgcmVtb3ZlcyBhbnkgdGhhdCBzdGlsbCBhcnJpdmUuXG4gKlxuICogVGhlIGdlbmVyaWMgYFt0eXBlOmlkXWAgZ3JhbW1hciBpcyBzcGVsbGVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgc28gdGhpc1xuICogcGFja2FnZSBzdGF5cyBhIGxlYWYgYWRkLW9uIHdpdGggbm8gZGVwZW5kZW5jeSBvbiB0aGUgYWdlbnQgcGx1Z2luJ3NcbiAqIGNvbnRyYWN0cyAtIGl0IG9ubHkgZXZlciBuZWVkcyB0byBSRUNPR05JWkUgYSBtYXJrZXIsIG5ldmVyIHJlc29sdmUgb25lLlxuICovXG5jb25zdCBFTUJFRF9NQVJLRVJfUkUgPSAvXFxbW0EtWmEtel1bQS1aYS16MC05Xy1dKjpbXlxcXVxcc10rXFxdL2c7XG5cbi8qKlxuICogRHJvcCBlbWJlZCBtYXJrZXJzIGZyb20gYHRleHRgLCB0aWR5aW5nIHRoZSB3aGl0ZXNwYWNlIHRoZXkgbGVhdmUgYmVoaW5kIHNvIGFcbiAqIG1hcmtlciB0aGF0IHNhdCBvbiBpdHMgb3duIGxpbmUgZG9lcyBub3QgYmVjb21lIGEgYmxhbmsgb25lLlxuICovXG5jb25zdCBzdHJpcEVtYmVkTWFya2VycyA9ICh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgdGV4dFxuICAgIC5yZXBsYWNlKEVNQkVEX01BUktFUl9SRSwgXCJcIilcbiAgICAucmVwbGFjZSgvWyBcXHRdKyQvZ20sIFwiXCIpXG4gICAgLnJlcGxhY2UoL1xcbnszLH0vZywgXCJcXG5cXG5cIilcbiAgICAudHJpbSgpO1xuXG4vKipcbiAqIFN0cnVjdHVyYWwgc2hhcGUgb2YgdGhlIHNpYmxpbmcgcGx1Z2luIHRoYXQgb3ducyB0aGUgYWdlbnQgcmVnaXN0cnkgLSB0aGVcbiAqIHNsaWNlIG9mIGBAZGJ4LXRvb2xzL2FwcGtpdC1tYXN0cmFgJ3MgYGV4cG9ydHMoKWAgYSB0dXJuIG5lZWRzLlxuICpcbiAqIE1hdGNoZWQgc3RydWN0dXJhbGx5LCBieSByZWdpc3RlcmVkIHBsdWdpbiBOQU1FLCByYXRoZXIgdGhhbiBpbXBvcnRpbmcgdGhlXG4gKiBNYXN0cmEgcGx1Z2luOiB0aGlzIHBhY2thZ2Ugc3RheXMgYSBsZWFmIGFkZC1vbiAoaXQgZGVwZW5kcyBvbiBubyBvdGhlclxuICogZGJ4LXRvb2xzIHJ1bnRpbWUgcGFja2FnZSwgbGlrZSBub2RlLWVtYWlsKSwgdGhlIGRlcGVuZGVuY3kgZGlyZWN0aW9uIHN0YXlzXG4gKiBvbmUtd2F5LCBhbmQgYW55IHBsdWdpbiBleHBvc2luZyB0aGUgc2FtZSBgZ2V0YCAvIGBnZXREZWZhdWx0YCBwYWlyIGNhbiBiYWNrXG4gKiB0aGUgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRQcm92aWRlckxpa2Uge1xuICBleHBvcnRzKCk6IHtcbiAgICBnZXQoaWQ6IHN0cmluZyk6IHVua25vd247XG4gICAgZ2V0RGVmYXVsdCgpOiB1bmtub3duO1xuICAgIC8qKlxuICAgICAqIEJ1aWxkcyB0aGUgcGVyLXR1cm4gYFJlcXVlc3RDb250ZXh0YCB0aGUgcHJvdmlkZXIncyB0b29scyBleHBlY3QuIE9wdGlvbmFsXG4gICAgICogc28gYW4gb2xkZXIgcHJvdmlkZXIgKG9yIGEgZGlmZmVyZW50bHktc2hhcGVkIG9uZSkgc3RpbGwgcmVzb2x2ZXMgYW5cbiAgICAgKiBhZ2VudDsgdGhlIHR1cm4gc2ltcGx5IHJ1bnMgd2l0aG91dCB1c2VyLXNjb3BlZCB0b29sIGNvbnRleHQgdGhlbi5cbiAgICAgKi9cbiAgICBjcmVhdGVSZXF1ZXN0Q29udGV4dD8ob3B0aW9uczogeyB0aHJlYWRJZD86IHN0cmluZzsgcmVzb3VyY2VJZD86IHN0cmluZyB9KTogUHJvbWlzZTx1bmtub3duPjtcbiAgfTtcbn1cblxuLyoqIFRydWUgd2hlbiBgdmFsdWVgIGV4cG9zZXMgdGhlIGBnZW5lcmF0ZWAgYSB0dXJuIGRyaXZlcy4gKi9cbmNvbnN0IGlzQ2FyZEFnZW50ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ2FyZEFnZW50TGlrZSA9PlxuICB0eXBlb2YgKHZhbHVlIGFzIENhcmRBZ2VudExpa2UgfCBudWxsKT8uZ2VuZXJhdGUgPT09IFwiZnVuY3Rpb25cIjtcblxuLyoqIFRydWUgd2hlbiBgdmFsdWVgIGV4cG9zZXMgdGhlIGFnZW50LXJlZ2lzdHJ5IGBleHBvcnRzKClgIGEgdHVybiByZWFkcy4gKi9cbmNvbnN0IGlzQWdlbnRQcm92aWRlciA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEFnZW50UHJvdmlkZXJMaWtlID0+XG4gIHR5cGVvZiAodmFsdWUgYXMgQWdlbnRQcm92aWRlckxpa2UgfCBudWxsKT8uZXhwb3J0cyA9PT0gXCJmdW5jdGlvblwiO1xuXG4vKipcbiAqIFJlYWQgb25lIGFnZW50IG91dCBvZiBhIHByb3ZpZGVyJ3MgYGV4cG9ydHMoKWAuXG4gKlxuICogRXZlcnkgbWVtYmVyIGlzIHByb2JlZCBiZWZvcmUgaXQgaXMgY2FsbGVkOiB0aGUgcHJvdmlkZXIgaXMgbWF0Y2hlZFxuICogc3RydWN0dXJhbGx5IGJ5IHBsdWdpbiBuYW1lLCBzbyBhIERJRkZFUkVOVCBwbHVnaW4gcmVnaXN0ZXJlZCB1bmRlciB0aGF0IG5hbWVcbiAqIGNhbiBzYXRpc2Z5IGBpc0FnZW50UHJvdmlkZXJgIChpdCBoYXMgYW4gYGV4cG9ydHMoKWApIHdoaWxlIGV4cG9zaW5nIG5vIGFnZW50XG4gKiByZWdpc3RyeSBhdCBhbGwuIENhbGxpbmcgYmxpbmRseSB3b3VsZCB0aHJvdyBhIGBUeXBlRXJyb3JgIG91dCBvZiByb3V0ZVxuICogcmVzb2x1dGlvbjsgYSBtaXNzIGlzIGp1c3QgXCJubyBhZ2VudFwiLCB3aGljaCB0aGUgcm91dGUgcmVwb3J0cyBhcyA1MDMuXG4gKi9cbmNvbnN0IHJlYWRBZ2VudCA9IChwcm92aWRlcjogQWdlbnRQcm92aWRlckxpa2UsIGFnZW50SWQ/OiBzdHJpbmcpOiB1bmtub3duID0+IHtcbiAgY29uc3QgcmVnaXN0cnkgPSBwcm92aWRlci5leHBvcnRzKCkgYXMgUGFydGlhbDxSZXR1cm5UeXBlPEFnZW50UHJvdmlkZXJMaWtlW1wiZXhwb3J0c1wiXT4+O1xuICBpZiAoYWdlbnRJZCkgcmV0dXJuIHR5cGVvZiByZWdpc3RyeS5nZXQgPT09IFwiZnVuY3Rpb25cIiA/IHJlZ2lzdHJ5LmdldChhZ2VudElkKSA6IG51bGw7XG4gIHJldHVybiB0eXBlb2YgcmVnaXN0cnkuZ2V0RGVmYXVsdCA9PT0gXCJmdW5jdGlvblwiID8gcmVnaXN0cnkuZ2V0RGVmYXVsdCgpIDogbnVsbDtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgYWdlbnQgdGhhdCBhbnN3ZXJzIGEgdHVybiBmcm9tIHRoZSBBcHBLaXQgcGx1Z2luIHJlZ2lzdHJ5LlxuICpcbiAqIGBhZ2VudElkYCBwaWNrcyBhIHNwZWNpZmljIGFnZW50OyBvbWl0dGVkLCB0aGUgcHJvdmlkZXIncyBkZWZhdWx0IGFnZW50XG4gKiBhbnN3ZXJzLiBSZXR1cm5zIGBudWxsYCB3aGVuIHRoZSBwcm92aWRlciBpcyBhYnNlbnQgb3IgdGhlIGlkIGlzIHVua25vd24sIHNvXG4gKiB0aGUgcm91dGUgY2FuIGFuc3dlciA1MDMgLyA0MDQgaW5zdGVhZCBvZiB0aHJvd2luZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVDYXJkQWdlbnQgPSAoXG4gIHBsdWdpbnM6IFJlYWRvbmx5TWFwPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuICBhZ2VudElkPzogc3RyaW5nLFxuKTogQ2FyZEFnZW50TGlrZSB8IG51bGwgPT4ge1xuICBjb25zdCBwcm92aWRlciA9IHBsdWdpbnM/LmdldChwcm92aWRlck5hbWUpO1xuICBpZiAoIWlzQWdlbnRQcm92aWRlcihwcm92aWRlcikpIHJldHVybiBudWxsO1xuICBjb25zdCBmb3VuZCA9IHJlYWRBZ2VudChwcm92aWRlciwgYWdlbnRJZCk7XG4gIHJldHVybiBpc0NhcmRBZ2VudChmb3VuZCkgPyBmb3VuZCA6IG51bGw7XG59O1xuXG4vKiogT3B0aW9ucyBmb3Ige0BsaW5rIHJ1bkNhcmRUdXJufS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZFR1cm5PcHRpb25zIHtcbiAgLyoqIENhbmNlbHMgdGhlIGFnZW50IGNhbGwgd2l0aCB0aGUgcmVxdWVzdC4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBPdmVycmlkZXMgdGhlIGJvdCBpZGVudGl0eSBzdGFtcGVkIG9uIHRoZSByZXBseS4gKi9cbiAgYm90Pzogc2hhcmVkQWN0aXZpdHkuQ2hhbm5lbEFjY291bnQ7XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIE1hc3RyYSBgUmVxdWVzdENvbnRleHRgIGZvciB0aGUgdHVybiwgZnJvbVxuICAgKiB7QGxpbmsgcmVzb2x2ZUNhcmRDb250ZXh0RmFjdG9yeX0uIE9taXR0ZWQsIHRoZSB0dXJuIHN0aWxsIGFuc3dlcnMsIGJ1dFxuICAgKiB3aXRob3V0IHRoZSBBcHBLaXQgdXNlciBpdHMgdXNlci1zY29wZWQgdG9vbHMgY2Fubm90IHJlYWNoIERhdGFicmlja3MgLSBzb1xuICAgKiB0aGUgcm91dGUgc2hvdWxkIGFsd2F5cyBzdXBwbHkgaXQuXG4gICAqL1xuICBjcmVhdGVSZXF1ZXN0Q29udGV4dD86IENhcmRDb250ZXh0RmFjdG9yeTtcbn1cblxuLyoqIEJ1aWxkcyB0aGUgcGVyLXR1cm4gcmVxdWVzdCBjb250ZXh0IHRoZSBhZ2VudCdzIHRvb2xzIHJlYWQuICovXG5leHBvcnQgdHlwZSBDYXJkQ29udGV4dEZhY3RvcnkgPSAob3B0aW9uczoge1xuICB0aHJlYWRJZD86IHN0cmluZztcbiAgcmVzb3VyY2VJZD86IHN0cmluZztcbn0pID0+IFByb21pc2U8dW5rbm93bj47XG5cbi8qKlxuICogVGhlIGFnZW50IHBsdWdpbidzIHJlcXVlc3QtY29udGV4dCBmYWN0b3J5LCB3aGVuIGl0IGV4cG9zZXMgb25lLlxuICpcbiAqIFJlc29sdmVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgYWdlbnQgYmVjYXVzZSBpdCBpcyB0aGUgcGllY2UgdGhhdCBnaXZlcyBhblxuICogb3V0LW9mLWJhbmQgdHVybiB0aGUgc2FtZSB0b29sIHJlYWNoIGFzIGEgY2hhdCB0dXJuOyBhIHByb3ZpZGVyIHdpdGhvdXQgaXRcbiAqIHN0aWxsIGFuc3dlcnMsIGp1c3Qgd2l0aG91dCB1c2VyLXNjb3BlZCB0b29scy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVDYXJkQ29udGV4dEZhY3RvcnkgPSAoXG4gIHBsdWdpbnM6IFJlYWRvbmx5TWFwPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gIHByb3ZpZGVyTmFtZTogc3RyaW5nLFxuKTogQ2FyZENvbnRleHRGYWN0b3J5IHwgbnVsbCA9PiB7XG4gIGNvbnN0IHByb3ZpZGVyID0gcGx1Z2lucz8uZ2V0KHByb3ZpZGVyTmFtZSk7XG4gIGlmICghaXNBZ2VudFByb3ZpZGVyKHByb3ZpZGVyKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gcHJvdmlkZXIuZXhwb3J0cygpIGFzIFBhcnRpYWw8UmV0dXJuVHlwZTxBZ2VudFByb3ZpZGVyTGlrZVtcImV4cG9ydHNcIl0+PjtcbiAgY29uc3QgZmFjdG9yeSA9IHJlZ2lzdHJ5LmNyZWF0ZVJlcXVlc3RDb250ZXh0O1xuICByZXR1cm4gdHlwZW9mIGZhY3RvcnkgPT09IFwiZnVuY3Rpb25cIiA/IChvcHRpb25zKSA9PiBmYWN0b3J5LmNhbGwocmVnaXN0cnksIG9wdGlvbnMpIDogbnVsbDtcbn07XG5cbi8qKlxuICogVGhlIHRleHQgYSBgbWVzc2FnZWAgYWN0aXZpdHkgY2Fycmllcywgb3IgYG51bGxgIHdoZW4gaXQgY2FycmllcyBub25lLlxuICpcbiAqIEEgY2hhbm5lbCBzZW5kcyBwbGVudHkgb2YgYWN0aXZpdGllcyB3aXRoIG5vIHVzYWJsZSB0ZXh0IChhIGB0eXBpbmdgXG4gKiBpbmRpY2F0b3IsIGEgYGNvbnZlcnNhdGlvblVwZGF0ZWAgd2hlbiBzb21lb25lIGpvaW5zLCBvciBhIGBtZXNzYWdlYCB3aG9zZVxuICogcGF5bG9hZCBpcyBvbmx5IGFuIGF0dGFjaG1lbnQpLiBUaG9zZSBhcmUgbm90IGVycm9ycyAtIHRoZXkgc2ltcGx5IHByb2R1Y2Ugbm9cbiAqIHJlcGx5IC0gc28gdGhpcyByZXR1cm5zIGBudWxsYCByYXRoZXIgdGhhbiB0aHJvd2luZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHByb21wdE9mID0gKGluYm91bmQ6IHNoYXJlZEFjdGl2aXR5LkFjdGl2aXR5KTogc3RyaW5nIHwgbnVsbCA9PlxuICBpbmJvdW5kLnR5cGUgPT09IFwibWVzc2FnZVwiID8gc3RyaW5nLnRyaW1Ub051bGwoaW5ib3VuZC50ZXh0ID8/IFwiXCIpIDogbnVsbDtcblxuLyoqXG4gKiBCdWlsZCBhbiBvdXRib3VuZCBhY3Rpdml0eSBjYXJyeWluZyBgY2FyZHNgLCBhZGRyZXNzZWQgYmFjayB0byB0aGUgc2VuZGVyIG9mXG4gKiBgaW5ib3VuZGAuXG4gKlxuICogRXhwb3J0ZWQgYmVjYXVzZSBhIGNsaWVudCByZW5kZXJpbmcgYW4gb3B0aW1pc3RpYyBsb2NhbCByZXBseSwgYW5kIGEgdGVzdFxuICogYXNzZXJ0aW5nIHRoZSBlbnZlbG9wZSwgYm90aCBuZWVkIHRoZSBzYW1lIGNvbnN0cnVjdGlvbiB0aGUgdHVybiB1c2VzLlxuICovXG5leHBvcnQgY29uc3QgdG9SZXBseUFjdGl2aXR5ID0gKFxuICBpbmJvdW5kOiBzaGFyZWRBY3Rpdml0eS5BY3Rpdml0eSxcbiAgY2FyZHM6IGNhcmQuQWRhcHRpdmVDYXJkW10sXG4gIG9wdGlvbnM6IHsgYm90Pzogc2hhcmVkQWN0aXZpdHkuQ2hhbm5lbEFjY291bnQ7IHRleHQ/OiBzdHJpbmcgfSA9IHt9LFxuKTogc2hhcmVkQWN0aXZpdHkuQWN0aXZpdHkgPT4gKHtcbiAgdHlwZTogXCJtZXNzYWdlXCIsXG4gIGlkOiBoYXNoLmlkKCksXG4gIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICBmcm9tOiBvcHRpb25zLmJvdCA/PyBCT1RfQUNDT1VOVCxcbiAgLi4uKGluYm91bmQuZnJvbSA/IHsgcmVjaXBpZW50OiBpbmJvdW5kLmZyb20gfSA6IHt9KSxcbiAgLi4uKGluYm91bmQuY29udmVyc2F0aW9uID8geyBjb252ZXJzYXRpb246IGluYm91bmQuY29udmVyc2F0aW9uIH0gOiB7fSksXG4gIC4uLihvcHRpb25zLnRleHQgPyB7IHRleHQ6IG9wdGlvbnMudGV4dCB9IDoge30pLFxuICBhdHRhY2htZW50czogY2FyZHMubWFwKChkb2N1bWVudCkgPT4gc2hhcmVkQWN0aXZpdHkudG9DYXJkQXR0YWNobWVudChkb2N1bWVudCkpLFxufSk7XG5cbi8qKlxuICogUmVjb3ZlciBhIHtAbGluayBjYXJkLkNhcmRTcGVjfSBmcm9tIGEgZnVsbCBBZGFwdGl2ZSBDYXJkIERPQ1VNRU5ULlxuICpcbiAqIEEgY2FwYWJsZSBtb2RlbCBhc2tlZCBmb3IgXCJhIE1pY3Jvc29mdCBUZWFtcyBBZGFwdGl2ZSBDYXJkXCIgb2Z0ZW4gYW5zd2VycyB3aXRoXG4gKiB0aGUgZmluaXNoZWQgMS41IGRvY3VtZW50IGluc3RlYWQgb2YgdGhlIHNtYWxsIHNwZWMgLSBjb3JyZWN0IEFkYXB0aXZlIENhcmRcbiAqIEpTT04sIHdyb25nIHNjaGVtYSwgc28gYHN0cnVjdHVyZWRPdXRwdXRgIHJlamVjdHMgaXQgKGB0aXRsZTogZXhwZWN0ZWRcbiAqIHN0cmluZ2ApIGFuZCBhIGdlbnVpbmVseSBnb29kIGFuc3dlciBpcyB0aHJvd24gYXdheS4gUmVhZGluZyB0aGUgZG9jdW1lbnQgYmFja1xuICogaW50byB0aGUgc3BlYyB2b2NhYnVsYXJ5IGtlZXBzIGl0OiB0aGUgaGVhZGluZyBUZXh0QmxvY2tzIGJlY29tZVxuICogdGl0bGUvc3VidGl0bGUsIHJlbWFpbmluZyBUZXh0QmxvY2tzIHRoZSBib2R5LCB0aGUgRmFjdFNldCB0aGUgZmFjdHMsIGFuZCBhbnlcbiAqIGBBY3Rpb24uT3BlblVybGAgdGhlIGFjdGlvbnMuXG4gKlxuICogRGVsaWJlcmF0ZWx5IHRvbGVyYW50IGFib3V0IHRoZSBjb250YWluZXI6IGB0eXBlYCBtYXkgYmUgbWlzc2luZyBhbmQgdGhlIGJvZHlcbiAqIG1heSBuZXN0IGVsZW1lbnRzIGluc2lkZSBhIGBDb250YWluZXJgIC8gYENvbHVtblNldGAsIHNvIGJsb2NrcyBhcmUgY29sbGVjdGVkXG4gKiByZWN1cnNpdmVseSBhbmQgYW55dGhpbmcgdW5yZWNvZ25pemVkIGlzIGlnbm9yZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBkb2N1bWVudENhcmRTcGVjID0gKHZhbHVlOiB1bmtub3duKTogY2FyZC5DYXJkU3BlYyB8IG51bGwgPT4ge1xuICBpZiAoIW9iamVjdC5pc1JlY29yZCh2YWx1ZSkgfHwgIUFycmF5LmlzQXJyYXkodmFsdWUuYm9keSkpIHJldHVybiBudWxsO1xuXG4gIGNvbnN0IHRleHRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBmYWN0czogY2FyZC5DYXJkRmFjdFtdID0gW107XG4gIGNvbnN0IGNvbGxlY3QgPSAoZWxlbWVudHM6IHVua25vd25bXSk6IHZvaWQgPT4ge1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgaWYgKCFvYmplY3QuaXNSZWNvcmQoZWxlbWVudCkpIGNvbnRpbnVlO1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gXCJUZXh0QmxvY2tcIikge1xuICAgICAgICBjb25zdCB0ZXh0ID0gc3RyaW5nLnRyaW1Ub051bGwodHlwZW9mIGVsZW1lbnQudGV4dCA9PT0gXCJzdHJpbmdcIiA/IGVsZW1lbnQudGV4dCA6IFwiXCIpO1xuICAgICAgICBpZiAodGV4dCkgdGV4dHMucHVzaCh0ZXh0KTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC50eXBlID09PSBcIkZhY3RTZXRcIiAmJiBBcnJheS5pc0FycmF5KGVsZW1lbnQuZmFjdHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZmFjdCBvZiBlbGVtZW50LmZhY3RzKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gY2FyZC5jYXJkRmFjdFNjaGVtYS5zYWZlUGFyc2UoZmFjdCk7XG4gICAgICAgICAgaWYgKHBhcnNlZC5zdWNjZXNzKSBmYWN0cy5wdXNoKHBhcnNlZC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQSBDb250YWluZXIgLyBDb2x1bW5TZXQgLyBDb2x1bW4gbmVzdHMgdGhlIGJsb2NrcyB0aGF0IG1hdHRlci5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIFtcIml0ZW1zXCIsIFwiY29sdW1uc1wiXSkge1xuICAgICAgICBjb25zdCBuZXN0ZWQgPSBlbGVtZW50W2tleV07XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5lc3RlZCkpIGNvbGxlY3QobmVzdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbGxlY3QodmFsdWUuYm9keSk7XG5cbiAgY29uc3QgYWN0aW9uczogY2FyZC5DYXJkQWN0aW9uW10gPSBbXTtcbiAgZm9yIChjb25zdCBhY3Rpb24gb2YgQXJyYXkuaXNBcnJheSh2YWx1ZS5hY3Rpb25zKSA/IHZhbHVlLmFjdGlvbnMgOiBbXSkge1xuICAgIGlmICghb2JqZWN0LmlzUmVjb3JkKGFjdGlvbikpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHBhcnNlZCA9IGNhcmQuY2FyZEFjdGlvblNjaGVtYS5zYWZlUGFyc2UoeyB0aXRsZTogYWN0aW9uLnRpdGxlLCB1cmw6IGFjdGlvbi51cmwgfSk7XG4gICAgaWYgKHBhcnNlZC5zdWNjZXNzKSBhY3Rpb25zLnB1c2gocGFyc2VkLmRhdGEpO1xuICB9XG5cbiAgY29uc3QgW3RpdGxlLCAuLi5yZXN0XSA9IHRleHRzO1xuICBpZiAoIXRpdGxlKSByZXR1cm4gbnVsbDtcbiAgLy8gVGhlIHNlY29uZCBibG9jayBpcyBhIHN1YnRpdGxlIG9ubHkgd2hlbiB0aGUgZG9jdW1lbnQgc3R5bGVkIGl0IGFzIG9uZTtcbiAgLy8gb3RoZXJ3aXNlIGl0IGlzIGJvZHkgdGV4dCBhbmQgbXVzdCBub3QgYmUgZGVtb3RlZCB0byBhIHN1YmhlYWRpbmcuXG4gIGNvbnN0IHNlY29uZCA9IG9iamVjdC5pc1JlY29yZCh2YWx1ZS5ib2R5WzFdKSA/IHZhbHVlLmJvZHlbMV0gOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGhhc1N1YnRpdGxlID0gcmVzdC5sZW5ndGggPiAwICYmIHNlY29uZD8uaXNTdWJ0bGUgPT09IHRydWU7XG4gIGNvbnN0IGJvZHkgPSAoaGFzU3VidGl0bGUgPyByZXN0LnNsaWNlKDEpIDogcmVzdCkuam9pbihcIlxcblxcblwiKTtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogdG9UaXRsZSh0aXRsZSksXG4gICAgLi4uKGhhc1N1YnRpdGxlICYmIHJlc3RbMF0gPyB7IHN1YnRpdGxlOiByZXN0WzBdIH0gOiB7fSksXG4gICAgLi4uKGJvZHkgPyB7IHRleHQ6IGJvZHkgfSA6IHt9KSxcbiAgICAuLi4oZmFjdHMubGVuZ3RoID4gMCA/IHsgZmFjdHMgfSA6IHt9KSxcbiAgICAuLi4oYWN0aW9ucy5sZW5ndGggPiAwID8geyBhY3Rpb25zIH0gOiB7fSksXG4gIH07XG59O1xuXG4vKipcbiAqIFRoZSBjYXJkIHRoZSBtb2RlbCBwcm9kdWNlZCwgd2hlcmV2ZXIgaXQgZW5kZWQgdXAuXG4gKlxuICogYHN0cnVjdHVyZWRPdXRwdXRgIHJlamVjdHMgYW55dGhpbmcgb2ZmLXNjaGVtYSBieSBUSFJPV0lORywgYW5kIE1hc3RyYSBwdXRzXG4gKiB0aGUgb2ZmZW5kaW5nIHBheWxvYWQgb24gdGhlIGVycm9yIChgZGV0YWlscy52YWx1ZWApIC0gc28gdGhlIG1vZGVsJ3MgcmVhbFxuICogYW5zd2VyIGlzIHJlY292ZXJhYmxlIGZyb20gYSBmYWlsZWQgY2FsbC4gQm90aCB0aGUgc3BlYyBzaGFwZSBhbmQgYSBmdWxsXG4gKiBBZGFwdGl2ZSBDYXJkIGRvY3VtZW50IGFyZSBhY2NlcHRlZCwgZnJvbSBhbiBvYmplY3Qgb3IgZnJvbSBKU09OIHRleHQuXG4gKi9cbmV4cG9ydCBjb25zdCByZWplY3RlZENhcmRTcGVjID0gKGVycjogdW5rbm93bik6IGNhcmQuQ2FyZFNwZWMgfCBudWxsID0+IHtcbiAgY29uc3QgZGV0YWlscyA9IG9iamVjdC5pc1JlY29yZChlcnIpID8gZXJyLmRldGFpbHMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHZhbHVlID0gb2JqZWN0LmlzUmVjb3JkKGRldGFpbHMpID8gZGV0YWlscy52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY2FuZGlkYXRlczogdW5rbm93bltdID0gW107XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBjYW5kaWRhdGVzLnB1c2goanNvbi5wYXJzZSh2YWx1ZSwgdW5kZWZpbmVkKSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGNhbmRpZGF0ZXMucHVzaCh2YWx1ZSk7XG4gIH1cbiAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgIGNvbnN0IHNwZWMgPSBjYXJkLmNhcmRTcGVjU2NoZW1hLnNhZmVQYXJzZShjYW5kaWRhdGUpO1xuICAgIGlmIChzcGVjLnN1Y2Nlc3MpIHJldHVybiBzcGVjLmRhdGE7XG4gICAgY29uc3QgZnJvbURvY3VtZW50ID0gZG9jdW1lbnRDYXJkU3BlYyhjYW5kaWRhdGUpO1xuICAgIGlmIChmcm9tRG9jdW1lbnQpIHJldHVybiBmcm9tRG9jdW1lbnQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKipcbiAqIFR1cm4gd2hhdGV2ZXIgdGhlIGFnZW50IHByb2R1Y2VkIGludG8gYSBjYXJkIHNwZWMuXG4gKlxuICogYHN0cnVjdHVyZWRPdXRwdXRgIGlzIGJlc3QtZWZmb3J0IGluIHByYWN0aWNlLCBub3QgYSBndWFyYW50ZWUuIEJlY2F1c2UgdGhlXG4gKiBzY2hlbWEgaXMgcHJvbXB0LWluamVjdGVkIChzZWUge0BsaW5rIEpTT05fUFJPTVBUX0lOSkVDVElPTn0pIHJhdGhlciB0aGFuXG4gKiBlbmZvcmNlZCBieSB0aGUgcHJvdmlkZXIsIGEgbW9kZWwgY2FuIGFuc3dlciB3aXRoIHByb3NlLCB3aXRoIEpTT04gd3JhcHBlZCBpblxuICogYSBgYGBgIGBgYGpzb24gYGBgYCBmZW5jZSwgb3IgLSBvbiBEYXRhYnJpY2tzIE1vZGVsIFNlcnZpbmcgLSB3aXRoIGFuIGVtcHR5XG4gKiBwYXJzZWQgb2JqZWN0IHdoaWxlIHRoZSB0ZXh0IGNhcnJpZXMgdGhlIHJlYWwgYW5zd2VyLiBPYnNlcnZlZCBmYWlsdXJlIHJhdGUgb25cbiAqIHRoZSBkZW1vIGVuZHBvaW50IHdhcyByb3VnaGx5IG9uZSB0dXJuIGluIHRocmVlLCBhbGwgb2Ygd2hpY2ggc3VyZmFjZWQgYXMgYVxuICogaGFyZCBgU1RSVUNUVVJFRF9PVVRQVVRfU0NIRU1BX1ZBTElEQVRJT05fRkFJTEVEYCBhbmQgbm8gcmVwbHkgYXQgYWxsLlxuICpcbiAqIEEgbWlzc2luZyBjYXJkIGlzIG5vdCB3b3J0aCBkcm9wcGluZyB0aGUgYW5zd2VyIG92ZXIsIHNvIHRoaXMgcmVjb3ZlcnMgaW5cbiAqIGZvdXIgc3RhZ2VzOiB0aGUgcGFyc2VkIG9iamVjdCB3aGVuIGl0IHZhbGlkYXRlczsgZWxzZSB0aGUgYXJndW1lbnRzIHRoZSBhZ2VudFxuICogcGFzc2VkIHRvIGBjcmVhdGVfdGVhbXNfY2FyZGAgKG9uIHRoZSBwcm9zZSByZXRyeSBhbiBhZ2VudCBob2xkaW5nIHRoYXQgdG9vbFxuICogdXN1YWxseSBjYWxscyBpdCwgd2hpY2ggaXMgYSBSRUFMIGNhcmQgc3BlYywgbm90IGEgZ3Vlc3MpOyBlbHNlIGEgSlNPTiBvYmplY3RcbiAqIGVtYmVkZGVkIGluIHRoZSB0ZXh0OyBlbHNlIHRoZSBwcm9zZSB3cmFwcGVkIGluIGEgbWluaW1hbCB0ZXh0LW9ubHkgY2FyZC4gVGhlXG4gKiB1c2VyIGFsd2F5cyBnZXRzIHRoZSBhZ2VudCdzIGFuc3dlcjsgYXQgd29yc3QgaXQgaXMgbGVzcyBzdHJ1Y3R1cmVkLlxuICovXG5jb25zdCB0b0NhcmRTcGVjID0gKHJlc3VsdDogQWdlbnRSZXN1bHQpOiBjYXJkLkNhcmRTcGVjID0+IHtcbiAgY29uc3QgcGFyc2VkID0gY2FyZC5jYXJkU3BlY1NjaGVtYS5zYWZlUGFyc2UocmVzdWx0Lm9iamVjdCk7XG4gIGlmIChwYXJzZWQuc3VjY2VzcykgcmV0dXJuIHBhcnNlZC5kYXRhO1xuXG4gIC8vIEEgbW9kZWwgdGhhdCBhbnN3ZXJlZCB3aXRoIHRoZSBmaW5pc2hlZCBBZGFwdGl2ZSBDYXJkIGRvY3VtZW50IHJhdGhlciB0aGFuXG4gIC8vIHRoZSBzcGVjIHN0aWxsIHByb2R1Y2VkIGEgcmVhbCBjYXJkOyByZWFkIGl0IGJhY2sgaW50byB0aGUgc3BlYyB2b2NhYnVsYXJ5LlxuICBjb25zdCBmcm9tRG9jdW1lbnQgPSBkb2N1bWVudENhcmRTcGVjKHJlc3VsdC5vYmplY3QpO1xuICBpZiAoZnJvbURvY3VtZW50KSByZXR1cm4gZnJvbURvY3VtZW50O1xuXG4gIC8vIFByZWZlciBhIGNhcmQgdGhlIGFnZW50IGV4cGxpY2l0bHkgY29tcG9zZWQgdmlhIHRoZSB0b29sIG92ZXIgYW55dGhpbmdcbiAgLy8gc2NyYXBlZCBvdXQgb2YgaXRzIHByb3NlLlxuICBjb25zdCBmcm9tVG9vbCA9IHRvb2xDYXJkU3BlYyhyZXN1bHQpO1xuICBpZiAoZnJvbVRvb2wpIHJldHVybiBmcm9tVG9vbDtcblxuICBjb25zdCB0ZXh0ID0gc3RyaW5nLnRyaW1Ub051bGwocmVzdWx0LnRleHQgPz8gXCJcIik7XG4gIGlmICh0ZXh0KSB7XG4gICAgLy8gQSBmZW5jZWQgb3IgaW5saW5lIEpTT04gb2JqZWN0IGluIHRoZSBwcm9zZTogdGhlIG1vZGVsIGZvbGxvd2VkIHRoZVxuICAgIC8vIGluc3RydWN0aW9ucyBidXQgdGhlIHByb3ZpZGVyIGRpZCBub3Qgc3VyZmFjZSBhIHBhcnNlZCBvYmplY3QuXG4gICAgY29uc3QgZW1iZWRkZWQgPSB0ZXh0Lm1hdGNoKC9cXHtbXFxzXFxTXSpcXH0vKTtcbiAgICBpZiAoZW1iZWRkZWQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0ganNvbi5wYXJzZShlbWJlZGRlZFswXSwgdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IHJldHJ5ID0gY2FyZC5jYXJkU3BlY1NjaGVtYS5zYWZlUGFyc2UodmFsdWUpO1xuICAgICAgaWYgKHJldHJ5LnN1Y2Nlc3MpIHJldHVybiByZXRyeS5kYXRhO1xuICAgICAgY29uc3QgYXNEb2N1bWVudCA9IGRvY3VtZW50Q2FyZFNwZWModmFsdWUpO1xuICAgICAgaWYgKGFzRG9jdW1lbnQpIHJldHVybiBhc0RvY3VtZW50O1xuICAgIH1cbiAgICAvLyBQcm9zZSBvbmx5OiBrZWVwIHRoZSBhbnN3ZXIsIGRyb3AgdGhlIHN0cnVjdHVyZS4gVGhlIGZpcnN0IGxpbmUgYmVjb21lc1xuICAgIC8vIHRoZSB0aXRsZSAoYSBjYXJkIHdpdGggbm8gdGl0bGUgcmVuZGVycyBhcyBhbiB1bnRpdGxlZCBibG9jayksIHRoZSByZXN0XG4gICAgLy8gc3RheXMgYXMgdGhlIGJvZHkuXG4gICAgY29uc3QgbGluZXMgPSB0ZXh0XG4gICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgIC5maWx0ZXIoKGxpbmUpID0+IGxpbmUudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgICAvLyBBIG1vZGVsIGludHJvZHVjaW5nIGl0cyBvd24gYW5zd2VyIChcIkhlcmUgaXMgdGhlIEFkYXB0aXZlIENhcmQ6XCIpIHdvdWxkXG4gICAgICAvLyBvdGhlcndpc2UgYmVjb21lIHRoZSBjYXJkJ3MgaGVhZGxpbmUsIHdoaWNoIHJlYWRzIGFzIGEgYnVnLiBEcm9wIHRoZVxuICAgICAgLy8gcHJlYW1ibGUgc28gdGhlIGZpcnN0IFJFQUwgbGluZSBpcyB0aGUgdGl0bGUuXG4gICAgICAuZmlsdGVyKChsaW5lKSA9PiAhUFJFQU1CTEVfUkUudGVzdChsaW5lLnRyaW0oKSkpO1xuICAgIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBsaW5lcztcbiAgICBjb25zdCB0aXRsZSA9IHN0cmluZy50cmltVG9OdWxsKGZpcnN0ID8/IFwiXCIpID8/IFwiQW5zd2VyXCI7XG4gICAgY29uc3QgYm9keSA9IHJlc3Quam9pbihcIlxcblwiKS50cmltKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiB0b1RpdGxlKHRpdGxlKSxcbiAgICAgIC4uLihib2R5ID8geyB0ZXh0OiBib2R5IH0gOiB0aXRsZS5sZW5ndGggPiAxMjAgPyB7IHRleHQ6IHRpdGxlIH0gOiB7fSksXG4gICAgfTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcInRlYW1zOiB0aGUgYWdlbnQgcmV0dXJuZWQgbmVpdGhlciBhIGNhcmQgbm9yIGFueSB0ZXh0IHRvIGZhbGwgYmFjayBvblwiKTtcbn07XG5cbi8qKlxuICogQSBsaW5lIHRoYXQgb25seSBhbm5vdW5jZXMgdGhlIGNhcmQgcmF0aGVyIHRoYW4gc2F5aW5nIGFueXRoaW5nIC0gZS5nLlxuICogXCJIZXJlIGlzIHRoZSBBZGFwdGl2ZSBDYXJkOlwiLCBcIkhlcmUncyB5b3VyIFRlYW1zIGNhcmQ6XCIsIFwiSGVyZSBhcmUgdGhlIGNhcmRcbiAqIGRldGFpbHM6XCIuIE1hdGNoZWQgc28gaXQgbmV2ZXIgYmVjb21lcyB0aGUgY2FyZCdzIHRpdGxlLlxuICpcbiAqIEFuY2hvcmVkIHRvIGEgXCJoZXJlIGlzL2FyZS9oZXJlJ3MgLi4uIGNhcmQgLi4uXCIgb3BlbmVyIHRoYXQgRU5EUyBpbiBhIGNvbG9uLFxuICogd2hpY2ggaXMgd2hhdCBrZWVwcyBpdCBmcm9tIGVhdGluZyBhIHJlYWwgc2VudGVuY2UgdGhhdCBtZXJlbHkgbWVudGlvbnMgYSBjYXJkXG4gKiAoXCJIZXJlIGlzIHRoZSBjYXJkIHJlYWRlciBzdGF0dXM6IG9mZmxpbmUuXCIgaGFzIHRleHQgYWZ0ZXIgdGhlIGNvbG9uKS5cbiAqL1xuY29uc3QgUFJFQU1CTEVfUkUgPSAvXihoZXJlIChpc3xhcmUpfGhlcmUncylcXGJbXi4hP10qXFxiY2FyZFxcYlteLiE/Ol0qOlxccyokL2k7XG5cbi8qKlxuICogVHJpbSBhIGxpbmUgZG93biB0byBzb21ldGhpbmcgdXNhYmxlIGFzIGEgY2FyZCB0aXRsZS4gQWRhcHRpdmUgQ2FyZCB0aXRsZXMgYXJlXG4gKiBhIHNpbmdsZSBib2xkIGxpbmUsIHNvIGFuIG92ZXJsb25nIG9uZSBpcyB0cnVuY2F0ZWQgcmF0aGVyIHRoYW4gd3JhcHBlZDsgdGhlXG4gKiBtYXJrZG93biBlbXBoYXNpcyBhIG1vZGVsIG9mdGVuIGFkZHMgaXMgc3RyaXBwZWQgc2luY2UgdGhlIHRpdGxlIGlzIGFscmVhZHlcbiAqIHN0eWxlZCBib2xkLlxuICovXG5jb25zdCB0b1RpdGxlID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwbGFpbiA9IHZhbHVlXG4gICAgLnJlcGxhY2UoL14jK1xccyovLCBcIlwiKVxuICAgIC5yZXBsYWNlKC9cXCpcXCovZywgXCJcIilcbiAgICAudHJpbSgpO1xuICByZXR1cm4gcGxhaW4ubGVuZ3RoID4gMTIwID8gYCR7cGxhaW4uc2xpY2UoMCwgMTE3KX0uLi5gIDogcGxhaW47XG59O1xuXG4vKipcbiAqIENvbXBpbGUgYW4gYW5zd2VyIHRoZSBhZ2VudCBoYXMgYWxyZWFkeSBwcm9kdWNlZCBpbnRvIGEgY2FyZCBzcGVjLlxuICpcbiAqIEEgc2Vjb25kLCBkZWxpYmVyYXRlbHkgc3RhdGVsZXNzIHBhc3M6IHRoZSBmb3JtYXR0aW5nIHJlcXVlc3QgaXMgTk9UIHRocmVhZGVkXG4gKiBvbnRvIGFnZW50IG1lbW9yeSwgc28gdGhlIGNvbnZlcnNhdGlvbiB0aGUgdXNlciBzZWVzIGtlZXBzIG9ubHkgdGhlaXIgcXVlc3Rpb25cbiAqIGFuZCB0aGUgYW5zd2VyLCBub3QgdGhlIHJlZm9ybWF0dGluZyBjaGF0dGVyIGluIGJldHdlZW4uXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiB0aGUgcGFzcyBpcyB1bnVzYWJsZSAoTWFzdHJhIHRocm93cyB3aGVuIHRoZSBtb2RlbCByZXR1cm5zXG4gKiBubyBwYXJzZWQgb2JqZWN0KSBzbyB0aGUgY2FsbGVyIGNhbiBmYWxsIGJhY2sgdG8gdGhlIGFuc3dlciB0ZXh0IC0gYSBsZXNzXG4gKiBzdHJ1Y3R1cmVkIGNhcmQgY2FycnlpbmcgdGhlIHJlYWwgYW5zd2VyIGJlYXRzIGxvc2luZyB0aGUgYW5zd2VyLlxuICovXG5jb25zdCBmb3JtYXRBc0NhcmQgPSBhc3luYyAoXG4gIGFnZW50OiBDYXJkQWdlbnRMaWtlLFxuICBwcm9tcHQ6IHN0cmluZyxcbiAgYW5zd2VyOiBzdHJpbmcsXG4gIHJlcXVlc3Q6IHsgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDsgcmVxdWVzdENvbnRleHQ/OiB1bmtub3duIH0sXG4pOiBQcm9taXNlPGNhcmQuQ2FyZFNwZWMgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGJvZHkgPSBbXG4gICAgQ0FSRF9GT1JNQVRfSU5TVFJVQ1RJT05TLFxuICAgIFwiXCIsXG4gICAgYFF1ZXN0aW9uOiAke3Byb21wdH1gLFxuICAgIFwiXCIsXG4gICAgXCJBc3Npc3RhbnQgYW5zd2VyOlwiLFxuICAgIGFuc3dlcixcbiAgXS5qb2luKFwiXFxuXCIpO1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHN0cnVjdHVyZWRPdXRwdXQ6IHtcbiAgICAgIHNjaGVtYTogY2FyZC5jYXJkU3BlY1NjaGVtYSxcbiAgICAgIGpzb25Qcm9tcHRJbmplY3Rpb246IEpTT05fUFJPTVBUX0lOSkVDVElPTixcbiAgICB9LFxuICAgIC4uLnJlcXVlc3QsXG4gIH07XG4gIC8vIE1hc3RyYSBUSFJPV1Mgd2hlbiB0aGUgbW9kZWwgcmV0dXJucyBubyBwYXJzZWQgb2JqZWN0LCBhbmQgYmVjYXVzZSB0aGVcbiAgLy8gc2NoZW1hIGlzIHByb21wdC1pbmplY3RlZCByYXRoZXIgdGhhbiBwcm92aWRlci1lbmZvcmNlZCB0aGF0IGhhcHBlbnNcbiAgLy8gaW50ZXJtaXR0ZW50bHkgb24gdGhlIHNhbWUgaW5wdXQuIE9uZSByZXRyeSBjb252ZXJ0cyBtb3N0IG9mIHRob3NlIG1pc3Nlc1xuICAvLyBpbnRvIGEgcHJvcGVyIGNhcmQ7IHRoZSBhbnN3ZXIgaXMgYWxyZWFkeSBzYWZlIGVpdGhlciB3YXkuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgMjsgYXR0ZW1wdCArPSAxKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0b0NhcmRTcGVjKGF3YWl0IGFnZW50LmdlbmVyYXRlKGJvZHksIG9wdGlvbnMpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRoZSByZWplY3RlZCBwYXlsb2FkIHVzdWFsbHkgSVMgdGhlIGNhcmQgLSBtb3N0IG9mdGVuIHRoZSBmdWxsIEFkYXB0aXZlXG4gICAgICAvLyBDYXJkIGRvY3VtZW50IHJhdGhlciB0aGFuIHRoZSBzcGVjIC0gc28gaXQgaXMgc2FsdmFnZWQgYmVmb3JlIHJldHJ5aW5nLlxuICAgICAgY29uc3QgcmVqZWN0ZWQgPSByZWplY3RlZENhcmRTcGVjKGVycik7XG4gICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwicmVjb3ZlcmVkIHRoZSBjYXJkIGZyb20gdGhlIHJlamVjdGVkIHN0cnVjdHVyZWQgcGF5bG9hZFwiKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdGVkO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLndhcm4oXCJjYXJkIGZvcm1hdHRpbmcgcGFzcyBmYWlsZWRcIiwge1xuICAgICAgICBhdHRlbXB0OiBhdHRlbXB0ICsgMSxcbiAgICAgICAgZXJyb3I6IGVycm9yLmVycm9yTWVzc2FnZShlcnIpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGxvZ2dlci53YXJuKFwiZmFsbGluZyBiYWNrIHRvIHRoZSBhbnN3ZXIgdGV4dCBmb3IgdGhlIGNhcmRcIik7XG4gIHJldHVybiBudWxsO1xufTtcblxuLyoqXG4gKiBSdW4gb25lIGNvbnZlcnNhdGlvbiB0dXJuOiBkcml2ZSBgYWdlbnRgIHdpdGggdGhlIGluYm91bmQgYWN0aXZpdHkncyB0ZXh0IGFuZFxuICogcmV0dXJuIHRoZSBhY3Rpdml0aWVzIHRvIGFwcGVuZCB0byB0aGUgdHJhbnNjcmlwdC5cbiAqXG4gKiBSZXR1cm5zIGFuIEVNUFRZIGFycmF5IGZvciBhbiBhY3Rpdml0eSB0aGF0IGNhcnJpZXMgbm8gcHJvbXB0IChhIHR5cGluZ1xuICogaW5kaWNhdG9yLCBhIGpvaW4gZXZlbnQpLCB3aGljaCBpcyBleGFjdGx5IHdoYXQgYSBib3QgZG9lcyB3aXRoIG9uZSAtIHRoZVxuICogcm91dGUgYW5zd2VycyBgeyBhY3Rpdml0aWVzOiBbXSB9YCBhbmQgdGhlIHRyYW5zY3JpcHQgaXMgdW5jaGFuZ2VkLlxuICpcbiAqIFR3byBhZ2VudCBjYWxscywgaW4gdGhpcyBvcmRlcjpcbiAqXG4gKiAgIDEuIHRoZSBBTlNXRVIgLSBubyBgc3RydWN0dXJlZE91dHB1dGAsIHNvIHRoZSBhZ2VudCdzIHRvb2xzIGFyZSBhdmFpbGFibGVcbiAqICAgICAgYW5kIHRoZSBjb250ZW50IG1hdGNoZXMgd2hhdCB0aGUgc3RyZWFtaW5nIGVuZHBvaW50IHdvdWxkIHNheTtcbiAqICAgMi4gdGhlIEZPUk1BVCAtIHtAbGluayBmb3JtYXRBc0NhcmR9IGNvbXBpbGluZyB0aGF0IGFuc3dlciBpbnRvIGEgY2FyZC5cbiAqXG4gKiBFdmVyeSBmYWlsdXJlIG1vZGUgc3RpbGwgeWllbGRzIHRoZSBhbnN3ZXI6IGEgY2FyZCB0aGUgYWdlbnQgY29tcG9zZWQgd2l0aFxuICogYGNyZWF0ZV90ZWFtc19jYXJkYCBkdXJpbmcgcGFzcyAxIHNob3J0LWNpcmN1aXRzIHBhc3MgMiwgYW5kIGEgZmFpbGVkIHBhc3MgMlxuICogZmFsbHMgYmFjayB0byB7QGxpbmsgdG9DYXJkU3BlY30gb3ZlciB0aGUgYW5zd2VyIHRleHQuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5DYXJkVHVybiA9IGFzeW5jIChcbiAgYWdlbnQ6IENhcmRBZ2VudExpa2UsXG4gIGluYm91bmQ6IHNoYXJlZEFjdGl2aXR5LkFjdGl2aXR5LFxuICBvcHRpb25zOiBDYXJkVHVybk9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8c2hhcmVkQWN0aXZpdHkuQWN0aXZpdHlbXT4gPT4ge1xuICBjb25zdCBwcm9tcHQgPSBwcm9tcHRPZihpbmJvdW5kKTtcbiAgaWYgKCFwcm9tcHQpIHJldHVybiBbXTtcblxuICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGluYm91bmQuY29udmVyc2F0aW9uPy5pZDtcbiAgY29uc3QgdXNlcklkID0gaW5ib3VuZC5mcm9tPy5pZDtcbiAgY29uc3Qgc2lnbmFsID0gb3B0aW9ucy5zaWduYWwgPyB7IGFib3J0U2lnbmFsOiBvcHRpb25zLnNpZ25hbCB9IDoge307XG4gIC8vIFRoZSBBcHBLaXQgdXNlciByaWRlcyBvbiB0aGlzLCBzbyB0aGUgYWdlbnQncyB0b29scyAoR2VuaWUsIHNlcnZpbmcsIHRoZVxuICAvLyBtb2RlbCByZXNvbHZlcikgd29yayBleGFjdGx5IGFzIHRoZXkgZG8gb24gdGhlIGNoYXQgZW5kcG9pbnRzLiBCdWlsdCBvbmNlXG4gIC8vIGFuZCBzaGFyZWQgYnkgYm90aCBwYXNzZXMuXG4gIGNvbnN0IHJlcXVlc3RDb250ZXh0ID0gb3B0aW9ucy5jcmVhdGVSZXF1ZXN0Q29udGV4dFxuICAgID8gYXdhaXQgb3B0aW9ucy5jcmVhdGVSZXF1ZXN0Q29udGV4dCh7XG4gICAgICAgIC4uLihjb252ZXJzYXRpb25JZCA/IHsgdGhyZWFkSWQ6IGNvbnZlcnNhdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySWQgPyB7IHJlc291cmNlSWQ6IHVzZXJJZCB9IDoge30pLFxuICAgICAgfSlcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29udGV4dCA9IHJlcXVlc3RDb250ZXh0ID8geyByZXF1ZXN0Q29udGV4dCB9IDoge307XG4gIC8vIFRocmVhZCB0aGUgY29udmVyc2F0aW9uIG9udG8gYWdlbnQgbWVtb3J5IHNvIHRoZSBzYW1lIGBjb252ZXJzYXRpb24uaWRgXG4gIC8vIGNvbnRpbnVlcyBvbmUgY29udmVyc2F0aW9uLiBPbmx5IHBhc3NlZCB3aGVuIHRoZSBjbGllbnQgc3VwcGxpZWQgYm90aCBpZHMgLVxuICAvLyBNYXN0cmEgcmVxdWlyZXMgdGhlIHBhaXIsIGFuZCBhIG1lbW9yeS1sZXNzIGFnZW50IGlnbm9yZXMgaXQuXG4gIGNvbnN0IG1lbW9yeSA9XG4gICAgY29udmVyc2F0aW9uSWQgJiYgdXNlcklkID8geyBtZW1vcnk6IHsgdGhyZWFkOiBjb252ZXJzYXRpb25JZCwgcmVzb3VyY2U6IHVzZXJJZCB9IH0gOiB7fTtcblxuICBjb25zdCBhbnN3ZXJlZCA9IGF3YWl0IGFnZW50LmdlbmVyYXRlKGAke3Byb21wdH1cXG5cXG4ke0NBUkRfQU5TV0VSX0lOU1RSVUNUSU9OU31gLCB7XG4gICAgLi4ubWVtb3J5LFxuICAgIC4uLmNvbnRleHQsXG4gICAgLi4uc2lnbmFsLFxuICB9KTtcblxuICAvLyBBbiBhZ2VudCB0aGF0IGNvbXBvc2VkIGEgY2FyZCBpdHNlbGYgaGFzIGFscmVhZHkgc2FpZCBpdCBpbiB0aGUgcmlnaHRcbiAgLy8gdm9jYWJ1bGFyeTsgcmVmb3JtYXR0aW5nIGl0IHdvdWxkIG9ubHkgcmlzayBwYXJhcGhyYXNpbmcgdGhlIHZhbHVlcy5cbiAgY29uc3QgY29tcG9zZWQgPSB0b29sQ2FyZFNwZWMoYW5zd2VyZWQpO1xuICBjb25zdCBhbnN3ZXIgPSBzdHJpbmcudHJpbVRvTnVsbChzdHJpcEVtYmVkTWFya2VycyhhbnN3ZXJlZC50ZXh0ID8/IFwiXCIpKTtcbiAgY29uc3Qgc3BlYyA9XG4gICAgY29tcG9zZWQgPz9cbiAgICAoYW5zd2VyID8gYXdhaXQgZm9ybWF0QXNDYXJkKGFnZW50LCBwcm9tcHQsIGFuc3dlciwgeyAuLi5jb250ZXh0LCAuLi5zaWduYWwgfSkgOiBudWxsKTtcblxuICBjb25zdCBkb2N1bWVudCA9IGJ1aWxkQWRhcHRpdmVDYXJkKFxuICAgIHNwZWMgPz8gdG9DYXJkU3BlYyh7IC4uLmFuc3dlcmVkLCAuLi4oYW5zd2VyID8geyB0ZXh0OiBhbnN3ZXIgfSA6IHt9KSB9KSxcbiAgKTtcbiAgcmV0dXJuIFt0b1JlcGx5QWN0aXZpdHkoaW5ib3VuZCwgW2RvY3VtZW50XSwgeyAuLi4ob3B0aW9ucy5ib3QgPyB7IGJvdDogb3B0aW9ucy5ib3QgfSA6IHt9KSB9KV07XG59O1xuIl19
|
package/lib/src/messaging.d.ts
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
*
|
|
24
24
|
* @module
|
|
25
25
|
*/
|
|
26
|
-
import { activity as
|
|
26
|
+
import { activity as sharedActivity } from "@dbx-tools/shared-teams";
|
|
27
27
|
import { type CardAgentLike, type CardContextFactory } from "./conversation.ts";
|
|
28
28
|
/** Resolved bot credentials a delivered turn needs. */
|
|
29
29
|
export interface BotCredentials {
|
|
@@ -39,7 +39,7 @@ export interface DeliverTurnOptions {
|
|
|
39
39
|
/** The agent that composes the card. */
|
|
40
40
|
agent: CardAgentLike;
|
|
41
41
|
/** The validated inbound activity. */
|
|
42
|
-
activity:
|
|
42
|
+
activity: sharedActivity.Activity;
|
|
43
43
|
/** Bot credentials used to fetch the outbound Connector token. */
|
|
44
44
|
credentials: BotCredentials;
|
|
45
45
|
/**
|
|
@@ -63,7 +63,7 @@ export interface DeliverTurnOptions {
|
|
|
63
63
|
* against the verified token's own `serviceurl` claim before anything
|
|
64
64
|
* authenticated is sent there.
|
|
65
65
|
*/
|
|
66
|
-
export declare const resolveServiceUrl: (activity:
|
|
66
|
+
export declare const resolveServiceUrl: (activity: sharedActivity.Activity, tokenServiceUrl?: string) => string | null;
|
|
67
67
|
/**
|
|
68
68
|
* Run one turn and deliver the card back through the Connector API.
|
|
69
69
|
*
|
package/lib/src/messaging.js
CHANGED
|
@@ -111,4 +111,4 @@ export const deliverTurn = async (options) => {
|
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
};
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lc3NhZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBK0MsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFN0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxZQUFZLEdBQUcsd0VBQXdFLENBQUM7QUFtQzlGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLFFBQW1DLEVBQ25DLGVBQXdCLEVBQ1QsRUFBRTtJQUNqQixNQUFNLEdBQUcsR0FBSSxRQUFxQyxDQUFDLFVBQVUsQ0FBQztJQUM5RCxNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUIsT0FBTyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzVFLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsT0FBMkIsRUFBaUIsRUFBRTtJQUM5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SUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUFDLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRTtnQkFDMUQsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ25DLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50J3MgdHVybjogd2hhdCBoYXBwZW5zIGJldHdlZW4gQXp1cmUgQm90IFNlcnZpY2VcbiAqIFBPU1RpbmcgYW4gYWN0aXZpdHkgYW5kIGEgY2FyZCBhcHBlYXJpbmcgaW4gdGhlIGNoYW5uZWwuXG4gKlxuICogU3BsaXQgb3V0IGZyb20gYGNvbnZlcnNhdGlvbi50c2AgYmVjYXVzZSB0aGUgdHdvIGNhbGxlcnMgaGF2ZSBnZW51aW5lbHlcbiAqIGRpZmZlcmVudCBjb250cmFjdHMuIGBjb252ZXJzYXRpb24udHNgIHJ1bnMgYSB0dXJuIGFuZCBSRVRVUk5TIHRoZSByZXBseSwgd2hpY2hcbiAqIGlzIHdoYXQgYSBkaXJlY3QgSFRUUCBjYWxsZXIgKG9yIHRoZSBpbi1yZXBvIHByZXZpZXcgVUkpIHdhbnRzLiBBIHJlYWwgY2hhbm5lbFxuICogY2Fubm90IHdvcmsgdGhhdCB3YXk6IEJvdCBTZXJ2aWNlIGlnbm9yZXMgdGhlIHJlc3BvbnNlIGJvZHkgYW5kIGV4cGVjdHMgYSBmYXN0XG4gKiBgMjAwYCwgc28gdGhpcyBtb2R1bGUgYWNrbm93bGVkZ2VzIGZpcnN0IGFuZCBkZWxpdmVycyB0aGUgcmVwbHkgb3V0LW9mLWJhbmRcbiAqIHRocm91Z2ggdGhlIENvbm5lY3RvciBBUEkuXG4gKlxuICogVGhlIHNlcXVlbmNlIGZvciBhIGBtZXNzYWdlYCBhY3Rpdml0eTpcbiAqXG4gKiAgIDEuIHZhbGlkYXRlIHRoZSBpbmJvdW5kIEpXVCBhbmQgcGluIHRoZSByZXBseSBkZXN0aW5hdGlvbiB0byB0aGVcbiAqICAgICAgdG9rZW4ncyBgc2VydmljZVVybGAgKHNlZSBgYXV0aC50c2ApO1xuICogICAyLiByZXR1cm4gYDIwMGAgaW1tZWRpYXRlbHkgLSBCb3QgU2VydmljZSByZXRyaWVzIGFuIGFjdGl2aXR5IGl0IHRoaW5rc1xuICogICAgICB0aW1lZCBvdXQsIGFuZCBhIGR1cGxpY2F0ZSB0dXJuIG1lYW5zIGEgZHVwbGljYXRlIGNhcmQ7XG4gKiAgIDMuIHNob3cgdGhlIHR5cGluZyBpbmRpY2F0b3IsIHJ1biB0aGUgYWdlbnQsIGFuZCBQT1NUIHRoZSBjYXJkIGJhY2suXG4gKlxuICogU3RlcCAyIGlzIHdoeSB0aGlzIGlzIGZpcmUtYW5kLWZvcmdldCByYXRoZXIgdGhhbiBhd2FpdGVkOiBhIGNhcmQtcHJvZHVjaW5nXG4gKiBhZ2VudCB0dXJuIHRha2VzIHNlY29uZHMgdG8gdGVucyBvZiBzZWNvbmRzLCBmYXIgbG9uZ2VyIHRoYW4gdGhlIH4xNXMgQm90XG4gKiBTZXJ2aWNlIGFsbG93cyBhIGJvdCB0byBhY2tub3dsZWRnZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZXJyb3IsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBhY3Rpdml0eSBhcyBhY3Rpdml0eUNvbnRyYWN0IH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXRlYW1zXCI7XG5pbXBvcnQgeyBjb25uZWN0b3JUb2tlbiwgaXNBbGxvd2VkU2VydmljZVVybCB9IGZyb20gXCIuL2F1dGgudHNcIjtcbmltcG9ydCB7IHNlbmRBY3Rpdml0eSwgc2VuZFR5cGluZyB9IGZyb20gXCIuL2Nvbm5lY3Rvci50c1wiO1xuaW1wb3J0IHsgcnVuQ2FyZFR1cm4sIHR5cGUgQ2FyZEFnZW50TGlrZSwgdHlwZSBDYXJkQ29udGV4dEZhY3RvcnkgfSBmcm9tIFwiLi9jb252ZXJzYXRpb24udHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcInRlYW1zOm1lc3NhZ2luZ1wiKTtcblxuLyoqXG4gKiBNZXNzYWdlIHNob3duIGluIHRoZSBjaGFubmVsIHdoZW4gYSB0dXJuIGZhaWxzLlxuICpcbiAqIEEgYm90IHRoYXQgc2lsZW50bHkgZHJvcHMgYSBmYWlsZWQgdHVybiBsb29rcyBicm9rZW4gLSB0aGUgdXNlciBzZWVzIHRoZWlyXG4gKiBtZXNzYWdlIGxhbmQgYW5kIG5vdGhpbmcgY29tZSBiYWNrLCBmb3JldmVyLiBBIHNob3J0IGFwb2xvZ3kgaXMgcG9zdGVkIGluc3RlYWRcbiAqIHNvIHRoZSBjb252ZXJzYXRpb24gc3RheXMgbGVnaWJsZTsgdGhlIHJlYWwgZXJyb3IgZ29lcyB0byB0aGUgbG9ncy5cbiAqL1xuY29uc3QgRkFJTFVSRV9URVhUID0gXCJTb3JyeSAtIEkgY291bGQgbm90IHB1dCB0b2dldGhlciBhbiBhbnN3ZXIgZm9yIHRoYXQuIFBsZWFzZSB0cnkgYWdhaW4uXCI7XG5cbi8qKiBSZXNvbHZlZCBib3QgY3JlZGVudGlhbHMgYSBkZWxpdmVyZWQgdHVybiBuZWVkcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm90Q3JlZGVudGlhbHMge1xuICAvKiogRW50cmEgYXBwIChjbGllbnQpIGlkIG9mIHRoZSBib3QgcmVnaXN0cmF0aW9uLiAqL1xuICBhcHBJZDogc3RyaW5nO1xuICAvKiogQ2xpZW50IHNlY3JldCBmb3Ige0BsaW5rIGFwcElkfS4gKi9cbiAgYXBwUGFzc3dvcmQ6IHN0cmluZztcbiAgLyoqIFRlbmFudCBpZCBmb3IgYSBzaW5nbGUtdGVuYW50IGJvdC4gKi9cbiAgYXBwVGVuYW50SWQ/OiBzdHJpbmc7XG59XG5cbi8qKiBFdmVyeXRoaW5nIHtAbGluayBkZWxpdmVyVHVybn0gbmVlZHMgdG8gYW5zd2VyIG9uZSBpbmJvdW5kIGFjdGl2aXR5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWxpdmVyVHVybk9wdGlvbnMge1xuICAvKiogVGhlIGFnZW50IHRoYXQgY29tcG9zZXMgdGhlIGNhcmQuICovXG4gIGFnZW50OiBDYXJkQWdlbnRMaWtlO1xuICAvKiogVGhlIHZhbGlkYXRlZCBpbmJvdW5kIGFjdGl2aXR5LiAqL1xuICBhY3Rpdml0eTogYWN0aXZpdHlDb250cmFjdC5BY3Rpdml0eTtcbiAgLyoqIEJvdCBjcmVkZW50aWFscyB1c2VkIHRvIGZldGNoIHRoZSBvdXRib3VuZCBDb25uZWN0b3IgdG9rZW4uICovXG4gIGNyZWRlbnRpYWxzOiBCb3RDcmVkZW50aWFscztcbiAgLyoqXG4gICAqIFJlcGx5IGRlc3RpbmF0aW9uLCBhbHJlYWR5IHZhbGlkYXRlZCBhZ2FpbnN0IHRoZSBpbmJvdW5kIHRva2VuLiBQYXNzaW5nIHRoaXNcbiAgICogZXhwbGljaXRseSAocmF0aGVyIHRoYW4gcmVhZGluZyBgYWN0aXZpdHkuc2VydmljZVVybGApIGtlZXBzIHRoZSBzZWN1cml0eVxuICAgKiBkZWNpc2lvbiBpbiB0aGUgY2FsbGVyLCB3aGVyZSB0aGUgdG9rZW4gaXMgaW4gc2NvcGUuXG4gICAqL1xuICBzZXJ2aWNlVXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGFnZW50J3MgcGVyLXR1cm4gcmVxdWVzdCBjb250ZXh0LCBzbyB0aGUgZGVsaXZlcmVkIHR1cm4gaGFzIHRoZVxuICAgKiBzYW1lIHRvb2wgcmVhY2ggKEdlbmllIGFuZCBldmVyeSBvdGhlciB1c2VyLXNjb3BlZCB0b29sKSBhcyBhIGNoYXQgdHVybi5cbiAgICovXG4gIGNyZWF0ZVJlcXVlc3RDb250ZXh0PzogQ2FyZENvbnRleHRGYWN0b3J5O1xuICAvKiogQ2FuY2VscyB0aGUgdHVybiAocHJvY2VzcyBzaHV0ZG93biwgb3IgYSB0ZXN0IHRlYXJpbmcgZG93bikuICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xufVxuXG4vKipcbiAqIFJlYWQgdGhlIHJlcGx5IGRlc3RpbmF0aW9uIG9mZiBhbiBpbmJvdW5kIGFjdGl2aXR5LCBpZiBpdCBuYW1lcyBhIHVzYWJsZSBvbmUuXG4gKlxuICogYHNlcnZpY2VVcmxgIHJpZGVzIG9uIHRoZSBhY3Rpdml0eSBhcyBhIHBsYWluIHN0cmluZywgc28gaXQgaXMgdmFsaWRhdGVkXG4gKiBhZ2FpbnN0IHRoZSB2ZXJpZmllZCB0b2tlbidzIG93biBgc2VydmljZXVybGAgY2xhaW0gYmVmb3JlIGFueXRoaW5nXG4gKiBhdXRoZW50aWNhdGVkIGlzIHNlbnQgdGhlcmUuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlU2VydmljZVVybCA9IChcbiAgYWN0aXZpdHk6IGFjdGl2aXR5Q29udHJhY3QuQWN0aXZpdHksXG4gIHRva2VuU2VydmljZVVybD86IHN0cmluZyxcbik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCByYXcgPSAoYWN0aXZpdHkgYXMgeyBzZXJ2aWNlVXJsPzogdW5rbm93biB9KS5zZXJ2aWNlVXJsO1xuICBjb25zdCBjYW5kaWRhdGUgPSB0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiID8gcmF3LnRyaW0oKSA6IFwiXCI7XG4gIGlmICghY2FuZGlkYXRlKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGlzQWxsb3dlZFNlcnZpY2VVcmwoY2FuZGlkYXRlLCB0b2tlblNlcnZpY2VVcmwpID8gY2FuZGlkYXRlIDogbnVsbDtcbn07XG5cbi8qKlxuICogUnVuIG9uZSB0dXJuIGFuZCBkZWxpdmVyIHRoZSBjYXJkIGJhY2sgdGhyb3VnaCB0aGUgQ29ubmVjdG9yIEFQSS5cbiAqXG4gKiBBd2FpdGVkIGJ5IG5vYm9keSBvbiB0aGUgcmVxdWVzdCBwYXRoICh0aGUgcm91dGUgaGFzIGFscmVhZHkgYW5zd2VyZWQgYDIwMGApLFxuICogc28gdGhpcyBvd25zIGl0cyBvd24gZXJyb3IgaGFuZGxpbmc6IGEgZmFpbHVyZSBwb3N0cyB7QGxpbmsgRkFJTFVSRV9URVhUfSB0b1xuICogdGhlIGNoYW5uZWwgYW5kIGlzIGxvZ2dlZCwgbmV2ZXIgcmV0aHJvd24gaW50byBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZGVsaXZlclR1cm4gPSBhc3luYyAob3B0aW9uczogRGVsaXZlclR1cm5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHsgYWdlbnQsIGFjdGl2aXR5LCBjcmVkZW50aWFscywgc2VydmljZVVybCB9ID0gb3B0aW9ucztcbiAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBhY3Rpdml0eS5jb252ZXJzYXRpb24/LmlkO1xuICBpZiAoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJkcm9wcGluZyBhY3Rpdml0eSB3aXRoIG5vIGNvbnZlcnNhdGlvbiBpZFwiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBiYXNlID0ge1xuICAgIHNlcnZpY2VVcmwsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgLi4uKGFjdGl2aXR5LmlkID8geyByZXBseVRvSWQ6IGFjdGl2aXR5LmlkIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMuc2lnbmFsID8geyBzaWduYWw6IG9wdGlvbnMuc2lnbmFsIH0gOiB7fSksXG4gIH07XG5cbiAgbGV0IHRva2VuOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgdG9rZW4gPSBhd2FpdCBjb25uZWN0b3JUb2tlbih7XG4gICAgICBhcHBJZDogY3JlZGVudGlhbHMuYXBwSWQsXG4gICAgICBhcHBQYXNzd29yZDogY3JlZGVudGlhbHMuYXBwUGFzc3dvcmQsXG4gICAgICAuLi4oY3JlZGVudGlhbHMuYXBwVGVuYW50SWQgPyB7IGFwcFRlbmFudElkOiBjcmVkZW50aWFscy5hcHBUZW5hbnRJZCB9IDoge30pLFxuICAgICAgLi4uKG9wdGlvbnMuc2lnbmFsID8geyBzaWduYWw6IG9wdGlvbnMuc2lnbmFsIH0gOiB7fSksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIE5vIHRva2VuIG1lYW5zIG5vdGhpbmcgY2FuIGJlIGRlbGl2ZXJlZCAtIG5vdCBldmVuIHRoZSBhcG9sb2d5IC0gc28gdGhpc1xuICAgIC8vIGlzIHRoZSBvbmUgZmFpbHVyZSB0aGF0IGNhbiBvbmx5IGJlIGxvZ2dlZC5cbiAgICBsb2dnZXIuZXJyb3IoXCJjb3VsZCBub3Qgb2J0YWluIGEgY29ubmVjdG9yIHRva2VuXCIsIHsgZXJyb3I6IGVycm9yLmVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldCA9IHsgLi4uYmFzZSwgdG9rZW4gfTtcbiAgYXdhaXQgc2VuZFR5cGluZyh0YXJnZXQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgYWN0aXZpdGllcyA9IGF3YWl0IHJ1bkNhcmRUdXJuKGFnZW50LCBhY3Rpdml0eSwge1xuICAgICAgLi4uKG9wdGlvbnMuY3JlYXRlUmVxdWVzdENvbnRleHRcbiAgICAgICAgPyB7IGNyZWF0ZVJlcXVlc3RDb250ZXh0OiBvcHRpb25zLmNyZWF0ZVJlcXVlc3RDb250ZXh0IH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucy5zaWduYWwgPyB7IHNpZ25hbDogb3B0aW9ucy5zaWduYWwgfSA6IHt9KSxcbiAgICB9KTtcbiAgICBmb3IgKGNvbnN0IHJlcGx5IG9mIGFjdGl2aXRpZXMpIHtcbiAgICAgIGF3YWl0IHNlbmRBY3Rpdml0eShyZXBseSwgdGFyZ2V0KTtcbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oXCJ0dXJuIGRlbGl2ZXJlZFwiLCB7IGNvbnZlcnNhdGlvbjogY29udmVyc2F0aW9uSWQsIHJlcGxpZXM6IGFjdGl2aXRpZXMubGVuZ3RoIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZXJyb3IoXCJ0dXJuIGZhaWxlZFwiLCB7IGNvbnZlcnNhdGlvbjogY29udmVyc2F0aW9uSWQsIGVycm9yOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZEFjdGl2aXR5KHsgdHlwZTogXCJtZXNzYWdlXCIsIHRleHQ6IEZBSUxVUkVfVEVYVCB9LCB0YXJnZXQpO1xuICAgIH0gY2F0Y2ggKHBvc3RFcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcImNvdWxkIG5vdCByZXBvcnQgdGhlIGZhaWx1cmUgdG8gdGhlIGNoYW5uZWxcIiwge1xuICAgICAgICBlcnJvcjogZXJyb3IuZXJyb3JNZXNzYWdlKHBvc3RFcnIpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59O1xuIl19
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lc3NhZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBRUgsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBK0MsTUFBTSxtQkFBbUIsQ0FBQztBQUU3RixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFN0M7Ozs7OztHQU1HO0FBQ0gsTUFBTSxZQUFZLEdBQUcsd0VBQXdFLENBQUM7QUFtQzlGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLFFBQWlDLEVBQ2pDLGVBQXdCLEVBQ1QsRUFBRTtJQUNqQixNQUFNLEdBQUcsR0FBSSxRQUFxQyxDQUFDLFVBQVUsQ0FBQztJQUM5RCxNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzVELElBQUksQ0FBQyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUIsT0FBTyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzVFLENBQUMsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsT0FBMkIsRUFBaUIsRUFBRTtJQUM5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SUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUFDLE9BQU8sT0FBTyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRTtnQkFDMUQsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO2FBQ25DLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50J3MgdHVybjogd2hhdCBoYXBwZW5zIGJldHdlZW4gQXp1cmUgQm90IFNlcnZpY2VcbiAqIFBPU1RpbmcgYW4gYWN0aXZpdHkgYW5kIGEgY2FyZCBhcHBlYXJpbmcgaW4gdGhlIGNoYW5uZWwuXG4gKlxuICogU3BsaXQgb3V0IGZyb20gYGNvbnZlcnNhdGlvbi50c2AgYmVjYXVzZSB0aGUgdHdvIGNhbGxlcnMgaGF2ZSBnZW51aW5lbHlcbiAqIGRpZmZlcmVudCBjb250cmFjdHMuIGBjb252ZXJzYXRpb24udHNgIHJ1bnMgYSB0dXJuIGFuZCBSRVRVUk5TIHRoZSByZXBseSwgd2hpY2hcbiAqIGlzIHdoYXQgYSBkaXJlY3QgSFRUUCBjYWxsZXIgKG9yIHRoZSBpbi1yZXBvIHByZXZpZXcgVUkpIHdhbnRzLiBBIHJlYWwgY2hhbm5lbFxuICogY2Fubm90IHdvcmsgdGhhdCB3YXk6IEJvdCBTZXJ2aWNlIGlnbm9yZXMgdGhlIHJlc3BvbnNlIGJvZHkgYW5kIGV4cGVjdHMgYSBmYXN0XG4gKiBgMjAwYCwgc28gdGhpcyBtb2R1bGUgYWNrbm93bGVkZ2VzIGZpcnN0IGFuZCBkZWxpdmVycyB0aGUgcmVwbHkgb3V0LW9mLWJhbmRcbiAqIHRocm91Z2ggdGhlIENvbm5lY3RvciBBUEkuXG4gKlxuICogVGhlIHNlcXVlbmNlIGZvciBhIGBtZXNzYWdlYCBhY3Rpdml0eTpcbiAqXG4gKiAgIDEuIHZhbGlkYXRlIHRoZSBpbmJvdW5kIEpXVCBhbmQgcGluIHRoZSByZXBseSBkZXN0aW5hdGlvbiB0byB0aGVcbiAqICAgICAgdG9rZW4ncyBgc2VydmljZVVybGAgKHNlZSBgYXV0aC50c2ApO1xuICogICAyLiByZXR1cm4gYDIwMGAgaW1tZWRpYXRlbHkgLSBCb3QgU2VydmljZSByZXRyaWVzIGFuIGFjdGl2aXR5IGl0IHRoaW5rc1xuICogICAgICB0aW1lZCBvdXQsIGFuZCBhIGR1cGxpY2F0ZSB0dXJuIG1lYW5zIGEgZHVwbGljYXRlIGNhcmQ7XG4gKiAgIDMuIHNob3cgdGhlIHR5cGluZyBpbmRpY2F0b3IsIHJ1biB0aGUgYWdlbnQsIGFuZCBQT1NUIHRoZSBjYXJkIGJhY2suXG4gKlxuICogU3RlcCAyIGlzIHdoeSB0aGlzIGlzIGZpcmUtYW5kLWZvcmdldCByYXRoZXIgdGhhbiBhd2FpdGVkOiBhIGNhcmQtcHJvZHVjaW5nXG4gKiBhZ2VudCB0dXJuIHRha2VzIHNlY29uZHMgdG8gdGVucyBvZiBzZWNvbmRzLCBmYXIgbG9uZ2VyIHRoYW4gdGhlIH4xNXMgQm90XG4gKiBTZXJ2aWNlIGFsbG93cyBhIGJvdCB0byBhY2tub3dsZWRnZS5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgZXJyb3IsIGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBhY3Rpdml0eSBhcyBzaGFyZWRBY3Rpdml0eSB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC10ZWFtc1wiO1xuaW1wb3J0IHsgY29ubmVjdG9yVG9rZW4sIGlzQWxsb3dlZFNlcnZpY2VVcmwgfSBmcm9tIFwiLi9hdXRoLnRzXCI7XG5pbXBvcnQgeyBzZW5kQWN0aXZpdHksIHNlbmRUeXBpbmcgfSBmcm9tIFwiLi9jb25uZWN0b3IudHNcIjtcbmltcG9ydCB7IHJ1bkNhcmRUdXJuLCB0eXBlIENhcmRBZ2VudExpa2UsIHR5cGUgQ2FyZENvbnRleHRGYWN0b3J5IH0gZnJvbSBcIi4vY29udmVyc2F0aW9uLnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ0ZWFtczptZXNzYWdpbmdcIik7XG5cbi8qKlxuICogTWVzc2FnZSBzaG93biBpbiB0aGUgY2hhbm5lbCB3aGVuIGEgdHVybiBmYWlscy5cbiAqXG4gKiBBIGJvdCB0aGF0IHNpbGVudGx5IGRyb3BzIGEgZmFpbGVkIHR1cm4gbG9va3MgYnJva2VuIC0gdGhlIHVzZXIgc2VlcyB0aGVpclxuICogbWVzc2FnZSBsYW5kIGFuZCBub3RoaW5nIGNvbWUgYmFjaywgZm9yZXZlci4gQSBzaG9ydCBhcG9sb2d5IGlzIHBvc3RlZCBpbnN0ZWFkXG4gKiBzbyB0aGUgY29udmVyc2F0aW9uIHN0YXlzIGxlZ2libGU7IHRoZSByZWFsIGVycm9yIGdvZXMgdG8gdGhlIGxvZ3MuXG4gKi9cbmNvbnN0IEZBSUxVUkVfVEVYVCA9IFwiU29ycnkgLSBJIGNvdWxkIG5vdCBwdXQgdG9nZXRoZXIgYW4gYW5zd2VyIGZvciB0aGF0LiBQbGVhc2UgdHJ5IGFnYWluLlwiO1xuXG4vKiogUmVzb2x2ZWQgYm90IGNyZWRlbnRpYWxzIGEgZGVsaXZlcmVkIHR1cm4gbmVlZHMuICovXG5leHBvcnQgaW50ZXJmYWNlIEJvdENyZWRlbnRpYWxzIHtcbiAgLyoqIEVudHJhIGFwcCAoY2xpZW50KSBpZCBvZiB0aGUgYm90IHJlZ2lzdHJhdGlvbi4gKi9cbiAgYXBwSWQ6IHN0cmluZztcbiAgLyoqIENsaWVudCBzZWNyZXQgZm9yIHtAbGluayBhcHBJZH0uICovXG4gIGFwcFBhc3N3b3JkOiBzdHJpbmc7XG4gIC8qKiBUZW5hbnQgaWQgZm9yIGEgc2luZ2xlLXRlbmFudCBib3QuICovXG4gIGFwcFRlbmFudElkPzogc3RyaW5nO1xufVxuXG4vKiogRXZlcnl0aGluZyB7QGxpbmsgZGVsaXZlclR1cm59IG5lZWRzIHRvIGFuc3dlciBvbmUgaW5ib3VuZCBhY3Rpdml0eS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVsaXZlclR1cm5PcHRpb25zIHtcbiAgLyoqIFRoZSBhZ2VudCB0aGF0IGNvbXBvc2VzIHRoZSBjYXJkLiAqL1xuICBhZ2VudDogQ2FyZEFnZW50TGlrZTtcbiAgLyoqIFRoZSB2YWxpZGF0ZWQgaW5ib3VuZCBhY3Rpdml0eS4gKi9cbiAgYWN0aXZpdHk6IHNoYXJlZEFjdGl2aXR5LkFjdGl2aXR5O1xuICAvKiogQm90IGNyZWRlbnRpYWxzIHVzZWQgdG8gZmV0Y2ggdGhlIG91dGJvdW5kIENvbm5lY3RvciB0b2tlbi4gKi9cbiAgY3JlZGVudGlhbHM6IEJvdENyZWRlbnRpYWxzO1xuICAvKipcbiAgICogUmVwbHkgZGVzdGluYXRpb24sIGFscmVhZHkgdmFsaWRhdGVkIGFnYWluc3QgdGhlIGluYm91bmQgdG9rZW4uIFBhc3NpbmcgdGhpc1xuICAgKiBleHBsaWNpdGx5IChyYXRoZXIgdGhhbiByZWFkaW5nIGBhY3Rpdml0eS5zZXJ2aWNlVXJsYCkga2VlcHMgdGhlIHNlY3VyaXR5XG4gICAqIGRlY2lzaW9uIGluIHRoZSBjYWxsZXIsIHdoZXJlIHRoZSB0b2tlbiBpcyBpbiBzY29wZS5cbiAgICovXG4gIHNlcnZpY2VVcmw6IHN0cmluZztcbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgYWdlbnQncyBwZXItdHVybiByZXF1ZXN0IGNvbnRleHQsIHNvIHRoZSBkZWxpdmVyZWQgdHVybiBoYXMgdGhlXG4gICAqIHNhbWUgdG9vbCByZWFjaCAoR2VuaWUgYW5kIGV2ZXJ5IG90aGVyIHVzZXItc2NvcGVkIHRvb2wpIGFzIGEgY2hhdCB0dXJuLlxuICAgKi9cbiAgY3JlYXRlUmVxdWVzdENvbnRleHQ/OiBDYXJkQ29udGV4dEZhY3Rvcnk7XG4gIC8qKiBDYW5jZWxzIHRoZSB0dXJuIChwcm9jZXNzIHNodXRkb3duLCBvciBhIHRlc3QgdGVhcmluZyBkb3duKS4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG59XG5cbi8qKlxuICogUmVhZCB0aGUgcmVwbHkgZGVzdGluYXRpb24gb2ZmIGFuIGluYm91bmQgYWN0aXZpdHksIGlmIGl0IG5hbWVzIGEgdXNhYmxlIG9uZS5cbiAqXG4gKiBgc2VydmljZVVybGAgcmlkZXMgb24gdGhlIGFjdGl2aXR5IGFzIGEgcGxhaW4gc3RyaW5nLCBzbyBpdCBpcyB2YWxpZGF0ZWRcbiAqIGFnYWluc3QgdGhlIHZlcmlmaWVkIHRva2VuJ3Mgb3duIGBzZXJ2aWNldXJsYCBjbGFpbSBiZWZvcmUgYW55dGhpbmdcbiAqIGF1dGhlbnRpY2F0ZWQgaXMgc2VudCB0aGVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVTZXJ2aWNlVXJsID0gKFxuICBhY3Rpdml0eTogc2hhcmVkQWN0aXZpdHkuQWN0aXZpdHksXG4gIHRva2VuU2VydmljZVVybD86IHN0cmluZyxcbik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBjb25zdCByYXcgPSAoYWN0aXZpdHkgYXMgeyBzZXJ2aWNlVXJsPzogdW5rbm93biB9KS5zZXJ2aWNlVXJsO1xuICBjb25zdCBjYW5kaWRhdGUgPSB0eXBlb2YgcmF3ID09PSBcInN0cmluZ1wiID8gcmF3LnRyaW0oKSA6IFwiXCI7XG4gIGlmICghY2FuZGlkYXRlKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIGlzQWxsb3dlZFNlcnZpY2VVcmwoY2FuZGlkYXRlLCB0b2tlblNlcnZpY2VVcmwpID8gY2FuZGlkYXRlIDogbnVsbDtcbn07XG5cbi8qKlxuICogUnVuIG9uZSB0dXJuIGFuZCBkZWxpdmVyIHRoZSBjYXJkIGJhY2sgdGhyb3VnaCB0aGUgQ29ubmVjdG9yIEFQSS5cbiAqXG4gKiBBd2FpdGVkIGJ5IG5vYm9keSBvbiB0aGUgcmVxdWVzdCBwYXRoICh0aGUgcm91dGUgaGFzIGFscmVhZHkgYW5zd2VyZWQgYDIwMGApLFxuICogc28gdGhpcyBvd25zIGl0cyBvd24gZXJyb3IgaGFuZGxpbmc6IGEgZmFpbHVyZSBwb3N0cyB7QGxpbmsgRkFJTFVSRV9URVhUfSB0b1xuICogdGhlIGNoYW5uZWwgYW5kIGlzIGxvZ2dlZCwgbmV2ZXIgcmV0aHJvd24gaW50byBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZGVsaXZlclR1cm4gPSBhc3luYyAob3B0aW9uczogRGVsaXZlclR1cm5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHsgYWdlbnQsIGFjdGl2aXR5LCBjcmVkZW50aWFscywgc2VydmljZVVybCB9ID0gb3B0aW9ucztcbiAgY29uc3QgY29udmVyc2F0aW9uSWQgPSBhY3Rpdml0eS5jb252ZXJzYXRpb24/LmlkO1xuICBpZiAoIWNvbnZlcnNhdGlvbklkKSB7XG4gICAgbG9nZ2VyLndhcm4oXCJkcm9wcGluZyBhY3Rpdml0eSB3aXRoIG5vIGNvbnZlcnNhdGlvbiBpZFwiKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBiYXNlID0ge1xuICAgIHNlcnZpY2VVcmwsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgLi4uKGFjdGl2aXR5LmlkID8geyByZXBseVRvSWQ6IGFjdGl2aXR5LmlkIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMuc2lnbmFsID8geyBzaWduYWw6IG9wdGlvbnMuc2lnbmFsIH0gOiB7fSksXG4gIH07XG5cbiAgbGV0IHRva2VuOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgdG9rZW4gPSBhd2FpdCBjb25uZWN0b3JUb2tlbih7XG4gICAgICBhcHBJZDogY3JlZGVudGlhbHMuYXBwSWQsXG4gICAgICBhcHBQYXNzd29yZDogY3JlZGVudGlhbHMuYXBwUGFzc3dvcmQsXG4gICAgICAuLi4oY3JlZGVudGlhbHMuYXBwVGVuYW50SWQgPyB7IGFwcFRlbmFudElkOiBjcmVkZW50aWFscy5hcHBUZW5hbnRJZCB9IDoge30pLFxuICAgICAgLi4uKG9wdGlvbnMuc2lnbmFsID8geyBzaWduYWw6IG9wdGlvbnMuc2lnbmFsIH0gOiB7fSksXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIE5vIHRva2VuIG1lYW5zIG5vdGhpbmcgY2FuIGJlIGRlbGl2ZXJlZCAtIG5vdCBldmVuIHRoZSBhcG9sb2d5IC0gc28gdGhpc1xuICAgIC8vIGlzIHRoZSBvbmUgZmFpbHVyZSB0aGF0IGNhbiBvbmx5IGJlIGxvZ2dlZC5cbiAgICBsb2dnZXIuZXJyb3IoXCJjb3VsZCBub3Qgb2J0YWluIGEgY29ubmVjdG9yIHRva2VuXCIsIHsgZXJyb3I6IGVycm9yLmVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRhcmdldCA9IHsgLi4uYmFzZSwgdG9rZW4gfTtcbiAgYXdhaXQgc2VuZFR5cGluZyh0YXJnZXQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgYWN0aXZpdGllcyA9IGF3YWl0IHJ1bkNhcmRUdXJuKGFnZW50LCBhY3Rpdml0eSwge1xuICAgICAgLi4uKG9wdGlvbnMuY3JlYXRlUmVxdWVzdENvbnRleHRcbiAgICAgICAgPyB7IGNyZWF0ZVJlcXVlc3RDb250ZXh0OiBvcHRpb25zLmNyZWF0ZVJlcXVlc3RDb250ZXh0IH1cbiAgICAgICAgOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucy5zaWduYWwgPyB7IHNpZ25hbDogb3B0aW9ucy5zaWduYWwgfSA6IHt9KSxcbiAgICB9KTtcbiAgICBmb3IgKGNvbnN0IHJlcGx5IG9mIGFjdGl2aXRpZXMpIHtcbiAgICAgIGF3YWl0IHNlbmRBY3Rpdml0eShyZXBseSwgdGFyZ2V0KTtcbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oXCJ0dXJuIGRlbGl2ZXJlZFwiLCB7IGNvbnZlcnNhdGlvbjogY29udmVyc2F0aW9uSWQsIHJlcGxpZXM6IGFjdGl2aXRpZXMubGVuZ3RoIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBsb2dnZXIuZXJyb3IoXCJ0dXJuIGZhaWxlZFwiLCB7IGNvbnZlcnNhdGlvbjogY29udmVyc2F0aW9uSWQsIGVycm9yOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZEFjdGl2aXR5KHsgdHlwZTogXCJtZXNzYWdlXCIsIHRleHQ6IEZBSUxVUkVfVEVYVCB9LCB0YXJnZXQpO1xuICAgIH0gY2F0Y2ggKHBvc3RFcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcImNvdWxkIG5vdCByZXBvcnQgdGhlIGZhaWx1cmUgdG8gdGhlIGNoYW5uZWxcIiwge1xuICAgICAgICBlcnJvcjogZXJyb3IuZXJyb3JNZXNzYWdlKHBvc3RFcnIpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59O1xuIl19
|
package/lib/src/plugin.js
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
import { Plugin, toPlugin, } from "@databricks/appkit";
|
|
37
37
|
import { defineTool, executeFromRegistry, toolsFromRegistry, } from "@databricks/appkit/beta";
|
|
38
38
|
import { error, log, object, string } from "@dbx-tools/shared-core";
|
|
39
|
-
import { activity as
|
|
39
|
+
import { activity as sharedActivity, card } from "@dbx-tools/shared-teams";
|
|
40
40
|
import { verifyBotToken } from "./auth.js";
|
|
41
41
|
import { TEAMS_CONFIG_SCHEMA } from "./config.js";
|
|
42
42
|
import { promptOf, resolveCardAgent, resolveCardContextFactory, runCardTurn, } from "./conversation.js";
|
|
@@ -300,7 +300,7 @@ export class TeamsPlugin extends Plugin {
|
|
|
300
300
|
res.status(401).json({ error: "unauthorized" });
|
|
301
301
|
return;
|
|
302
302
|
}
|
|
303
|
-
const parsed =
|
|
303
|
+
const parsed = sharedActivity.activitySchema.safeParse(req.body);
|
|
304
304
|
if (!parsed.success) {
|
|
305
305
|
res.status(400).json({ error: parsed.error.message });
|
|
306
306
|
return;
|
|
@@ -358,7 +358,7 @@ export class TeamsPlugin extends Plugin {
|
|
|
358
358
|
* problem).
|
|
359
359
|
*/
|
|
360
360
|
async executeTurn(body) {
|
|
361
|
-
const parsed =
|
|
361
|
+
const parsed = sharedActivity.activityRequestSchema.safeParse(body);
|
|
362
362
|
if (!parsed.success) {
|
|
363
363
|
return { ok: false, status: 400, message: parsed.error.message };
|
|
364
364
|
}
|
|
@@ -427,4 +427,4 @@ function readHeader(headers, name) {
|
|
|
427
427
|
const value = Array.isArray(direct) ? direct[0] : direct;
|
|
428
428
|
return typeof value === "string" ? (string.trimToNull(value) ?? undefined) : undefined;
|
|
429
429
|
}
|
|
430
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUVILE9BQU8sRUFDTCxNQUFNLEVBQ04sUUFBUSxHQUlULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsaUJBQWlCLEdBSWxCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLElBQUksZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBQzFFLE9BQU8sRUFDTCxRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixXQUFXLEdBQ1osTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsZ0JBQWdCLEdBQ2pCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwRCxzRUFBc0U7QUFDdEUsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDO0FBRTNCLGlGQUFpRjtBQUNqRixNQUFNLFVBQVUsR0FB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LEVBQUUsSUFBWTtJQUNoRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN6RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcGx1Z2luIChyZWdpc3RlcmVkIG5hbWU6IGB0ZWFtc2ApIHRoYXQgb3ducyB0aGUgVGVhbXMgQWRhcHRpdmUgQ2FyZFxuICogcnVudGltZSAtIHRoZSByZXNvbHZlZCBjYXJkIHZlcnNpb24gYW5kIHRoZSBvcHRpb25hbCBpbmNvbWluZy13ZWJob29rIFVSTCB0aGVcbiAqIHtAbGluayB0ZWFtc0NhcmRUb29sfSBhbmQgdGhlIEFwcEtpdCBgdGVhbXMuY3JlYXRlQ2FyZGAgdG9vbCByZWFkLiBSZWdpc3RlcmluZ1xuICogaXQgcmVzb2x2ZXMgYW5kIGxvZ3MgdGhlIGVmZmVjdGl2ZSBjb25maWcgKHdoaWNoIGNhcmQgdmVyc2lvbiBpcyBpbiBmb3JjZSxcbiAqIHdoZXRoZXIgYSB3ZWJob29rIGlzIHdpcmVkIHVwKSBzbyBhIG1pc2NvbmZpZ3VyYXRpb24gaXMgdmlzaWJsZSBpbiB0aGUgYm9vdFxuICogbG9ncyByYXRoZXIgdGhhbiBvbiB0aGUgZmlyc3QgY2FyZCwgYW5kIGluc3RhbGxzIHRoZSBwbHVnaW4ncyBgZXhlY3V0ZSgpYCBhc1xuICogdGhlIHJ1bnRpbWUncyBleGVjdXRvciBzbyBldmVyeSBidWlsZCAvIHBvc3QgcGlja3MgdXAgQXBwS2l0J3MgY2FjaGUgLyByZXRyeSAvXG4gKiB0aW1lb3V0IC8gdGVsZW1ldHJ5IGNoYWluLlxuICpcbiAqIFRoZSBwbHVnaW4gaXMgYWxzbyBhIGBUb29sUHJvdmlkZXJgLCBzbyBhbiBBcHBLaXQgYWdlbnQgY2FuIHJlYWNoIGFcbiAqIGB0ZWFtcy5jcmVhdGVDYXJkYCB0b29sIGRpcmVjdGx5OyB0aGUge0BsaW5rIHRlYW1zQ2FyZFRvb2x9IGV4cG9ydCBpcyB0aGUgc2FtZVxuICogY2FwYWJpbGl0eSBmb3IgYSBNYXN0cmEgYWdlbnQuIEJvdGggc2hhcmUgdGhlIHJ1bnRpbWUgcHJpbWVkIGhlcmUuXG4gKlxuICogVGhlIHBsdWdpbiBtb3VudHMgZm91ciByb3V0ZXMgdW5kZXIgaXRzIGJhc2UgcGF0aCAoYC9hcGkvdGVhbXNgKTpcbiAqXG4gKiAgIC0gYFBPU1QgL21lc3NhZ2VzYCBpcyB0aGUgUkVBTCBNaWNyb3NvZnQgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50IC0gdGhlIFVSTFxuICogICAgIGFuIEF6dXJlIEJvdCByZWdpc3RyYXRpb24gcG9pbnRzIGF0LiBJdCB2YWxpZGF0ZXMgdGhlIEJvdCBTZXJ2aWNlIEpXVCxcbiAqICAgICBhY2tub3dsZWRnZXMgaW1tZWRpYXRlbHksIGFuZCBkZWxpdmVycyB0aGUgYWdlbnQncyBjYXJkIGJhY2sgb3ZlciB0aGVcbiAqICAgICBDb25uZWN0b3IgQVBJLiBUaGlzIGlzIHRoZSByb3V0ZSB0aGF0IG1ha2VzIGEgVGVhbXMgY2hhbm5lbCBhYmxlIHRvIGNoYXRcbiAqICAgICB3aXRoIHRoZSBhcHAncyBhZ2VudHMsIHRoZSBzYW1lIHdheSB0aGUgTWFzdHJhIHBsdWdpbiBleHBvc2VzIE1DUCBhdCBhXG4gKiAgICAgcGF0aC5cbiAqICAgLSBgUE9TVCAvYWN0aXZpdHlgIHJ1bnMgdGhlIHNhbWUgdHVybiBTWU5DSFJPTk9VU0xZLCBhbnN3ZXJpbmcgd2l0aCB0aGVcbiAqICAgICByZXBseSBhY3Rpdml0aWVzIGluIHRoZSByZXNwb25zZSBib2R5LiBJdCBuZWVkcyBubyBib3QgcmVnaXN0cmF0aW9uLCBzb1xuICogICAgIGl0IGlzIHdoYXQgYSBsb2NhbCBjbGllbnQgKHRoZSBpbi1yZXBvIHByZXZpZXcgY2hhdCksIGEgdGVzdCwgb3IgYW55XG4gKiAgICAgbm9uLVRlYW1zIGNhbGxlciB1c2VzLlxuICogICAtIGBQT1NUIC9jYXJkYCBjb21waWxlcyBhIHtAbGluayBjYXJkLkNhcmRTcGVjfSBpbnRvIGFuIEFkYXB0aXZlIENhcmRcbiAqICAgICBkb2N1bWVudCAodGhlIHByZXZpZXcgcGFnZSBwb3N0cyBoZXJlKS5cbiAqICAgLSBgUE9TVCAvcG9zdGAgcHVzaGVzIGEgY29tcGlsZWQgY2FyZCB0byB0aGUgY29uZmlndXJlZCBUZWFtcyBpbmNvbWluZ1xuICogICAgIHdlYmhvb2sgd2hlbiBvbmUgaXMgc2V0LlxuICpcbiAqIE1pcnJvcnMgdGhlIG5vZGUtZW1haWwgYWRkLW9uJ3Mgc2hhcGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIFBsdWdpbixcbiAgdG9QbHVnaW4sXG4gIHR5cGUgRXhlY3V0aW9uUmVzdWx0LFxuICB0eXBlIElBcHBSb3V0ZXIsXG4gIHR5cGUgUGx1Z2luTWFuaWZlc3QsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIGRlZmluZVRvb2wsXG4gIGV4ZWN1dGVGcm9tUmVnaXN0cnksXG4gIHRvb2xzRnJvbVJlZ2lzdHJ5LFxuICB0eXBlIEFnZW50VG9vbERlZmluaXRpb24sXG4gIHR5cGUgVG9vbFByb3ZpZGVyLFxuICB0eXBlIFRvb2xSZWdpc3RyeSxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBlcnJvciwgbG9nLCBvYmplY3QsIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBhY3Rpdml0eSBhcyBhY3Rpdml0eUNvbnRyYWN0LCBjYXJkIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLXRlYW1zXCI7XG5pbXBvcnQgeyB2ZXJpZnlCb3RUb2tlbiB9IGZyb20gXCIuL2F1dGgudHNcIjtcbmltcG9ydCB7IFRFQU1TX0NPTkZJR19TQ0hFTUEsIHR5cGUgVGVhbXNQbHVnaW5Db25maWcgfSBmcm9tIFwiLi9jb25maWcudHNcIjtcbmltcG9ydCB7XG4gIHByb21wdE9mLFxuICByZXNvbHZlQ2FyZEFnZW50LFxuICByZXNvbHZlQ2FyZENvbnRleHRGYWN0b3J5LFxuICBydW5DYXJkVHVybixcbn0gZnJvbSBcIi4vY29udmVyc2F0aW9uLnRzXCI7XG5pbXBvcnQgeyBURUFNU19CVUlMRF9TRVRUSU5HUywgVEVBTVNfUE9TVF9TRVRUSU5HUywgVEVBTVNfVFVSTl9TRVRUSU5HUyB9IGZyb20gXCIuL2RlZmF1bHRzLnRzXCI7XG5pbXBvcnQgeyBkZWxpdmVyVHVybiwgcmVzb2x2ZVNlcnZpY2VVcmwgfSBmcm9tIFwiLi9tZXNzYWdpbmcudHNcIjtcbmltcG9ydCB7XG4gIGJ1aWxkQ2FyZCxcbiAgZ2V0VGVhbXNSdW50aW1lLFxuICBwb3N0Q2FyZCxcbiAgcmVzZXRUZWFtc1J1bnRpbWUsXG4gIHNldFRlYW1zRXhlY3V0b3IsXG59IGZyb20gXCIuL3J1bnRpbWUudHNcIjtcbmltcG9ydCB7IENSRUFURV9DQVJEX0RFU0NSSVBUSU9OIH0gZnJvbSBcIi4vdG9vbC50c1wiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgKHVuZGVyIGAvYXBpL3RlYW1zYCkgZm9yIGNvbXBpbGluZyBhIGNhcmQuICovXG5jb25zdCBDQVJEX1JPVVRFID0gXCIvY2FyZFwiO1xuXG4vKiogTW91bnQtcmVsYXRpdmUgcm91dGUgKHVuZGVyIGAvYXBpL3RlYW1zYCkgZm9yIHBvc3RpbmcgYSBjYXJkIHRvIGEgd2ViaG9vay4gKi9cbmNvbnN0IFBPU1RfUk9VVEUgPSBcIi9wb3N0XCI7XG5cbi8qKlxuICogTW91bnQtcmVsYXRpdmUgcm91dGUgKHVuZGVyIGAvYXBpL3RlYW1zYCkgZm9yIG9uZSBjb252ZXJzYXRpb24gdHVybjogYSBCb3RcbiAqIEZyYW1ld29yayBhY3Rpdml0eSBpbiwgYWN0aXZpdGllcyBjYXJyeWluZyBBZGFwdGl2ZSBDYXJkcyBiYWNrLlxuICovXG5jb25zdCBBQ1RJVklUWV9ST1VURSA9IFwiL2FjdGl2aXR5XCI7XG5cbi8qKlxuICogTW91bnQtcmVsYXRpdmUgcm91dGUgKHVuZGVyIGAvYXBpL3RlYW1zYCkgZm9yIHRoZSBUZWFtcyBtZXNzYWdpbmcgZW5kcG9pbnQuXG4gKiBUaGlzIGlzIHRoZSBwYXRoIGEgYm90IHJlZ2lzdHJhdGlvbidzIG1lc3NhZ2luZyBlbmRwb2ludCBwb2ludHMgYXQsIGkuZS5cbiAqIGBodHRwczovLzxob3N0Pi9hcGkvdGVhbXMvbWVzc2FnZXNgLlxuICovXG5jb25zdCBNRVNTQUdFU19ST1VURSA9IFwiL21lc3NhZ2VzXCI7XG5cbi8qKiBSZWdpc3RyeSBrZXkgb2YgdGhlIGFnZW50IHRvb2wsIHdoaWNoIGFnZW50cyBhZGRyZXNzIGFzIGB0ZWFtcy5jcmVhdGVDYXJkYC4gKi9cbmNvbnN0IENSRUFURV9UT09MID0gXCJjcmVhdGVDYXJkXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJ0ZWFtc1wiKTtcblxuLyoqXG4gKiBBcHBLaXQgcGx1Z2luIHRoYXQgY29uZmlndXJlcyB0aGUgQWRhcHRpdmUgQ2FyZCBidWlsZGVyIHVzZWQgYnkgdGhlXG4gKiBgY3JlYXRlX3RlYW1zX2NhcmRgIHRvb2wsIGFuZCBleHBvc2VzIGNhcmQgYnVpbGRpbmcgYXMgYW4gQXBwS2l0IGFnZW50IHRvb2wuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyB0ZWFtc1BsdWdpbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3RlYW1zXCI7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW1xuICogICAgIHNlcnZlcigpLFxuICogICAgIHRlYW1zUGx1Z2luLnRlYW1zKHsgd2ViaG9va1VybDogcHJvY2Vzcy5lbnYuVEVBTVNfV0VCSE9PS19VUkwgfSksXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgVGVhbXNQbHVnaW4gZXh0ZW5kcyBQbHVnaW48VGVhbXNQbHVnaW5Db25maWc+IGltcGxlbWVudHMgVG9vbFByb3ZpZGVyIHtcbiAgc3RhdGljIG1hbmlmZXN0ID0ge1xuICAgIG5hbWU6IFwidGVhbXNcIixcbiAgICBkaXNwbGF5TmFtZTogXCJUZWFtc1wiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJBbnN3ZXJzIGNoYXQgdHVybnMgYXMgTWljcm9zb2Z0IFRlYW1zIEFkYXB0aXZlIENhcmRzIG92ZXIgYSBCb3QgXCIgK1xuICAgICAgXCJGcmFtZXdvcmsgYWN0aXZpdHkgZW5kcG9pbnQsIGJ1aWxkcyBjYXJkcyBmcm9tIGEgc21hbGwgc3RydWN0dXJlZCBjYXJkIFwiICtcbiAgICAgIFwiZGVzY3JpcHRpb24sIGFuZCBvcHRpb25hbGx5IHBvc3RzIHRoZW0gdG8gYSBUZWFtcyBpbmNvbWluZyB3ZWJob29rLlwiLFxuICAgIHN0YWJpbGl0eTogXCJiZXRhXCIsXG4gICAgcmVzb3VyY2VzOiB7XG4gICAgICByZXF1aXJlZDogW10sXG4gICAgICBvcHRpb25hbDogW10sXG4gICAgfSxcbiAgICBjb25maWc6IHsgc2NoZW1hOiBURUFNU19DT05GSUdfU0NIRU1BIH0sXG4gIH0gc2F0aXNmaWVzIFBsdWdpbk1hbmlmZXN0PFwidGVhbXNcIj47XG5cbiAgLyoqXG4gICAqIFRoZSB0b29sIHRoaXMgcGx1Z2luIG9mZmVycyB0byBhbiBBcHBLaXQgYWdlbnQuXG4gICAqXG4gICAqIE1hcmtlZCBgYXV0b0luaGVyaXRhYmxlYDogYnVpbGRpbmcgYSBjYXJkIGlzIGEgcHVyZSwgc2lkZS1lZmZlY3QtZnJlZVxuICAgKiB0cmFuc2Zvcm0gKG5vdGhpbmcgbGVhdmVzIHRoZSBidWlsZGluZyksIHNvIGl0IGlzIHNhZmUgdG8gaGFuZCB0byBhbnlcbiAgICogYWdlbnQgYnkgZGVmYXVsdCAtIHVubGlrZSBhIHNlbmQuXG4gICAqXG4gICAqIGBleGVjdXRlYCByZS1wYXJzZXMgaXRzIGFyZ3VtZW50cyB3aXRoIHRoZSBsb2NhbCBzY2hlbWE6IEFwcEtpdCB2YWxpZGF0ZXNcbiAgICogYWdhaW5zdCB0aGUgc2FtZSBzY2hlbWEgZmlyc3QsIGJ1dCByZS1wYXJzaW5nIGlzIHdoYXQgZ2l2ZXMgdGhlIGJvZHkgdHlwZWRcbiAgICogYXJndW1lbnRzIGluc3RlYWQgb2YgYHVua25vd25gLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSB0b29sczogVG9vbFJlZ2lzdHJ5ID0ge1xuICAgIFtDUkVBVEVfVE9PTF06IGRlZmluZVRvb2woe1xuICAgICAgZGVzY3JpcHRpb246IENSRUFURV9DQVJEX0RFU0NSSVBUSU9OLFxuICAgICAgc2NoZW1hOiBjYXJkLmNhcmRTcGVjU2NoZW1hLFxuICAgICAgYW5ub3RhdGlvbnM6IHsgZWZmZWN0OiBcInJlYWRcIiB9LFxuICAgICAgYXV0b0luaGVyaXRhYmxlOiB0cnVlLFxuICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3MsIHNpZ25hbCkgPT4gYnVpbGRDYXJkKGNhcmQuY2FyZFNwZWNTY2hlbWEucGFyc2UoYXJncyksIHNpZ25hbCksXG4gICAgfSksXG4gIH07XG5cbiAgLyoqXG4gICAqIFByaW1lIHRoZSBzaGFyZWQgcnVudGltZSBmcm9tIHRoaXMgcGx1Z2luJ3MgY29uZmlnIChvdmVyIGVudiksIHJvdXRlIHRoZVxuICAgKiB0b29sJ3MgYnVpbGRzIHRocm91Z2ggdGhpcyBwbHVnaW4ncyBpbnRlcmNlcHRvciBjaGFpbiwgYW5kIGxvZyB0aGVcbiAgICogZWZmZWN0aXZlIGNvbmZpZyBzbyB0aGUgcmVzb2x2ZWQgY2FyZCB2ZXJzaW9uIGFuZCB3aGV0aGVyIGEgd2ViaG9vayBpc1xuICAgKiB3aXJlZCB1cCBhcmUgb2J2aW91cyBhdCBib290LlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgc2V0dXAoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldFRlYW1zUnVudGltZSh0aGlzLmNvbmZpZyk7XG4gICAgc2V0VGVhbXNFeGVjdXRvcigoZm4sIHNldHRpbmdzKSA9PiB0aGlzLmV4ZWN1dGUoZm4sIHNldHRpbmdzKSk7XG4gICAgbG9nZ2VyLmluZm8oXCJyZWFkeVwiLCB7XG4gICAgICBjYXJkVmVyc2lvbjogY29uZmlnLmNhcmRWZXJzaW9uLFxuICAgICAgd2ViaG9vazogY29uZmlnLndlYmhvb2tVcmwgPyBcImNvbmZpZ3VyZWRcIiA6IFwiZGlzYWJsZWRcIixcbiAgICAgIG1lc3NhZ2luZzogY29uZmlnLmFsbG93VW5hdXRoZW50aWNhdGVkXG4gICAgICAgID8gXCJVTkFVVEhFTlRJQ0FURUQgKGRldmVsb3BtZW50KVwiXG4gICAgICAgIDogY29uZmlnLmFwcElkICYmIGNvbmZpZy5hcHBQYXNzd29yZFxuICAgICAgICAgID8gXCJib3QgcmVnaXN0cmF0aW9uIGNvbmZpZ3VyZWRcIlxuICAgICAgICAgIDogXCJkaXNhYmxlZCAobm8gYXBwSWQvYXBwUGFzc3dvcmQpXCIsXG4gICAgfSk7XG4gICAgLy8gQW4gZW5kcG9pbnQgc2VydmluZyBhZ2VudCB0dXJucyB3aXRoIG5vIGF1dGggaXMgd29ydGggYSB3YXJuaW5nIG9uIGV2ZXJ5XG4gICAgLy8gYm9vdCwgbm90IGEgbGluZSBidXJpZWQgaW4gYW4gaW5mbyBwYXlsb2FkLlxuICAgIGlmIChjb25maWcuYWxsb3dVbmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBcIlBPU1QgL21lc3NhZ2VzIGlzIHNlcnZpbmcgVU5BVVRIRU5USUNBVEVEIHR1cm5zIC0gYW55IGNhbGxlciB0aGF0IGNhbiBcIiArXG4gICAgICAgICAgXCJyZWFjaCB0aGlzIHJvdXRlIGNhbiBkcml2ZSB0aGUgYWdlbnQuIERldmVsb3BtZW50IG9ubHk7IG5ldmVyIGV4cG9zZSB0aGlzLlwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogRHJvcCB0aGUgc2hhcmVkIHJ1bnRpbWUuIElkZW1wb3RlbnQuICovXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJlc2V0VGVhbXNSdW50aW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogTW91bnQgdGhlIGNhcmQtYnVpbGRpbmcgYW5kIGNhcmQtcG9zdGluZyByb3V0ZXMgdW5kZXIgdGhlIHBsdWdpbiBiYXNlXG4gICAqIHBhdGggKGAvYXBpL3RlYW1zYCkuIGBQT1NUIC9jYXJkYCBpcyB3aGF0IHRoZSBkZXYgZGlzcGxheSBwYWdlIGNhbGxzIHRvXG4gICAqIHByZXZpZXcgYSBjYXJkIGxpdmU7IGBQT1NUIC9wb3N0YCBwdXNoZXMgYSBjb21waWxlZCBjYXJkIHRvIHRoZSBjb25maWd1cmVkXG4gICAqIFRlYW1zIGluY29taW5nIHdlYmhvb2suXG4gICAqXG4gICAqIE5laXRoZXIgcm91dGUgaXMgd3JhcHBlZCBpbiBgYXNVc2VyKHJlcSlgOiBjb21waWxpbmcgYSBjYXJkIGlzIGEgcHVyZVxuICAgKiB0cmFuc2Zvcm0gb2YgdGhlIHJlcXVlc3QgYm9keSBhbmQgcG9zdGluZyBnb2VzIHRvIGEgcHJlY29uZmlndXJlZCB3ZWJob29rLFxuICAgKiBzbyBuZWl0aGVyIHJlYWRzIHdvcmtzcGFjZSBkYXRhIG9uIHRoZSBjYWxsZXIncyBiZWhhbGYgYW5kIG5laXRoZXIgbmVlZHMgYW5cbiAgICogT0JPIHRva2VuLiBXcmFwcGluZyB0aGVtIHdvdWxkIG1ha2UgdGhlIHJvdXRlcyB0aHJvd1xuICAgKiBgQXV0aGVudGljYXRpb25FcnJvcmAgd2hlbmV2ZXIgdGhlIHVzZXItdG9rZW4gaGVhZGVyIGlzIGFic2VudCAoYSBsb2NhbFxuICAgKiBgY3VybGAsIGEgaGVhbHRoIHByb2JlKSwgd2hpY2ggLSBzaW5jZSBBcHBLaXQgZG9lcyBub3QgY2F0Y2ggYSByZWplY3Rpb25cbiAgICogcmFpc2VkIGluc2lkZSB0aGUgaGFuZGxlciAtIHRha2VzIHRoZSBwcm9jZXNzIGRvd24gcmF0aGVyIHRoYW4gYW5zd2VyaW5nXG4gICAqIDQwMS5cbiAgICovXG4gIG92ZXJyaWRlIGluamVjdFJvdXRlcyhyb3V0ZXI6IElBcHBSb3V0ZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJidWlsZENhcmRcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBDQVJEX1JPVVRFLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUJ1aWxkKHJlcS5ib2R5KTtcbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5qc29uKHJlc3VsdC5kYXRhKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiYWN0aXZpdHlcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBBQ1RJVklUWV9ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVUdXJuKHJlcS5ib2R5KTtcbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5qc29uKHJlc3VsdC5kYXRhKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwicG9zdENhcmRcIixcbiAgICAgIG1ldGhvZDogXCJwb3N0XCIsXG4gICAgICBwYXRoOiBQT1NUX1JPVVRFLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVBvc3QocmVxLmJvZHkpO1xuICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICAgIHJlcy5zdGF0dXMocmVzdWx0LnN0YXR1cykuanNvbih7IGVycm9yOiByZXN1bHQubWVzc2FnZSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVzLmpzb24oeyBvazogdHJ1ZSB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gVGhlIHJlYWwgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50LiBVbmxpa2UgZXZlcnkgb3RoZXIgcm91dGUgaGVyZSBpdCBpc1xuICAgIC8vIGNhbGxlZCBieSBBenVyZSBCb3QgU2VydmljZSBvdmVyIHRoZSBwdWJsaWMgaW50ZXJuZXQsIHNvIGl0IGF1dGhlbnRpY2F0ZXNcbiAgICAvLyBpdHNlbGYgZnJvbSB0aGUgaW5ib3VuZCBKV1QgYW5kIGFuc3dlcnMgYDIwMGAgYmVmb3JlIHRoZSBhZ2VudCBoYXMgcnVuLlxuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcIm1lc3NhZ2VzXCIsXG4gICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgcGF0aDogTUVTU0FHRVNfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVNZXNzYWdlKHJlcSwgcmVzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBleHBvcnRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIENvbXBpbGUgYSBjYXJkIHNwZWMgaW50byBhbiBBZGFwdGl2ZSBDYXJkIGRvY3VtZW50LiBGb3IgYWdlbnQtZHJpdmVuXG4gICAgICAgKiBidWlsZHMgdXNlIHtAbGluayB0ZWFtc0NhcmRUb29sfSBpbnN0ZWFkLlxuICAgICAgICovXG4gICAgICBidWlsZENhcmQ6IChzcGVjOiBjYXJkLkNhcmRTcGVjLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Y2FyZC5DYXJkUmVzdWx0PiA9PlxuICAgICAgICBidWlsZENhcmQoc3BlYywgc2lnbmFsKSxcbiAgICAgIC8qKlxuICAgICAgICogUG9zdCBhIGNvbXBpbGVkIGNhcmQgdG8gdGhlIGNvbmZpZ3VyZWQgVGVhbXMgaW5jb21pbmcgd2ViaG9vay4gVGhyb3dzXG4gICAgICAgKiB3aGVuIG5vIHdlYmhvb2sgaXMgY29uZmlndXJlZC5cbiAgICAgICAqL1xuICAgICAgcG9zdENhcmQ6IChjYXJkRG9jdW1lbnQ6IGNhcmQuQWRhcHRpdmVDYXJkLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4gPT5cbiAgICAgICAgcG9zdENhcmQoY2FyZERvY3VtZW50LCBzaWduYWwpLFxuICAgIH07XG4gIH1cblxuICAvKiogQXBwS2l0IGBUb29sUHJvdmlkZXJgOiB0aGUgdG9vbCBkZWZpbml0aW9ucyBvZmZlcmVkIHRvIGFuIGFnZW50LiAqL1xuICBnZXRBZ2VudFRvb2xzKCk6IEFnZW50VG9vbERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRvb2xzRnJvbVJlZ2lzdHJ5KHRoaXMudG9vbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcEtpdCBgVG9vbFByb3ZpZGVyYDogcnVuIG9uZSB0b29sIGNhbGwuIEFyZ3VtZW50cyBhcmUgdmFsaWRhdGVkIGFnYWluc3RcbiAgICogdGhlIHRvb2wncyBzY2hlbWEgZmlyc3QsIGFuZCBhIHZhbGlkYXRpb24gZmFpbHVyZSBjb21lcyBiYWNrIGFzIGFuXG4gICAqIExMTS1mcmllbmRseSBzdHJpbmcgc28gdGhlIG1vZGVsIGNhbiBjb3JyZWN0IGl0c2VsZiBvbiB0aGUgbmV4dCB0dXJuLlxuICAgKi9cbiAgYXN5bmMgZXhlY3V0ZUFnZW50VG9vbChuYW1lOiBzdHJpbmcsIGFyZ3M6IHVua25vd24sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIGV4ZWN1dGVGcm9tUmVnaXN0cnkodGhpcy50b29scywgbmFtZSwgYXJncywgc2lnbmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgb25lIGluYm91bmQgcmVxdWVzdCBmcm9tIEF6dXJlIEJvdCBTZXJ2aWNlIG9uIGBQT1NUIC9tZXNzYWdlc2AuXG4gICAqXG4gICAqIFRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGlzIGRpY3RhdGVkIGJ5IGhvdyBCb3QgU2VydmljZSBiZWhhdmVzLCBub3QgYnlcbiAgICogY29udmVuaWVuY2U6XG4gICAqXG4gICAqICAgMS4gKipSZWZ1c2Ugd2hlbiB1bmNvbmZpZ3VyZWQuKiogV2l0aCBubyBgYXBwSWRgIHRoZXJlIGlzIG5vIGF1ZGllbmNlIHRvXG4gICAqICAgICAgdmFsaWRhdGUgYSB0b2tlbiBhZ2FpbnN0LCBzbyB0aGUgZW5kcG9pbnQgY2Fubm90IGJlIG9wZXJhdGVkIHNhZmVseTtcbiAgICogICAgICBpdCBhbnN3ZXJzIDUwMyByYXRoZXIgdGhhbiBwcm9jZXNzaW5nIGFuIHVuYXV0aGVudGljYXRlZCBhY3Rpdml0eS5cbiAgICogICAyLiAqKlZhbGlkYXRlIHRoZSBKV1QgYmVmb3JlIHBhcnNpbmcgdGhlIGJvZHkuKiogVGhlIHRva2VuIGlzIHRoZSBvbmx5XG4gICAqICAgICAgdHJ1c3QgYm91bmRhcnkgdGhpcyBlbmRwb2ludCBoYXMuXG4gICAqICAgMy4gKipQaW4gdGhlIHJlcGx5IGRlc3RpbmF0aW9uIHRvIHRoZSB0b2tlbi4qKiBgc2VydmljZVVybGAgYXJyaXZlcyBpbiB0aGVcbiAgICogICAgICBib2R5LCBhbmQgcmVwbGllcyBjYXJyeSB0aGUgYm90J3MgY3JlZGVudGlhbHMsIHNvIGl0IGlzIG9ubHkgaG9ub3JlZFxuICAgKiAgICAgIHdoZW4gaXQgbWF0Y2hlcyB0aGUgdmVyaWZpZWQgdG9rZW4uXG4gICAqICAgNC4gKipBbnN3ZXIgMjAwIGltbWVkaWF0ZWx5LCB0aGVuIHJ1biB0aGUgYWdlbnQuKiogQm90IFNlcnZpY2UgdGltZXMgb3V0XG4gICAqICAgICAgYW4gdW5hY2tub3dsZWRnZWQgYWN0aXZpdHkgaW4gc2Vjb25kcyBhbmQgUkVUUklFUyBpdDsgYSBjYXJkIHRha2VzIGZhclxuICAgKiAgICAgIGxvbmdlciB0aGFuIHRoYXQsIGFuZCBhIHJldHJ5IHdvdWxkIHBvc3QgYSBkdXBsaWNhdGUgY2FyZC5cbiAgICpcbiAgICogQWN0aXZpdGllcyB0aGF0IGNhcnJ5IG5vIHByb21wdCAoYHR5cGluZ2AsIGBjb252ZXJzYXRpb25VcGRhdGVgLCBhblxuICAgKiBhdHRhY2htZW50LW9ubHkgbWVzc2FnZSkgYXJlIGFja25vd2xlZGdlZCBhbmQgZHJvcHBlZCAtIGV4YWN0bHkgd2hhdCBhIGJvdFxuICAgKiBkb2VzIHdpdGggdGhlbS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlTWVzc2FnZShcbiAgICByZXE6IHsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGJvZHk6IHVua25vd24gfSxcbiAgICByZXM6IHtcbiAgICAgIHN0YXR1cyhjb2RlOiBudW1iZXIpOiB7IGpzb24oYm9keTogdW5rbm93bik6IHZvaWQgfTtcbiAgICAgIGpzb24oYm9keTogdW5rbm93bik6IHZvaWQ7XG4gICAgICBoZWFkZXJzU2VudD86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IGdldFRlYW1zUnVudGltZSh0aGlzLmNvbmZpZyk7XG5cbiAgICAvLyBMb2NhbCBkZXZlbG9wbWVudCBtb2RlOiBubyBib3QgcmVnaXN0cmF0aW9uLCBubyB0b2tlbiwgYW5kIHRoZSByZXBseSBjb21lc1xuICAgIC8vIGJhY2sgaW4gdGhlIEhUVFAgcmVzcG9uc2UgcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGUgQ29ubmVjdG9yIEFQSSAodGhlcmUgaXNcbiAgICAvLyBubyBgc2VydmljZVVybGAgdG8gY2FsbCBiYWNrIHRvKS4gVGhpcyBpcyB3aGF0IGxldHMgdGhlIGluLXJlcG8gcHJldmlld1xuICAgIC8vIGNoYXQgYW5kIHRoZSBCb3QgRnJhbWV3b3JrIEVtdWxhdG9yIGRyaXZlIHRoZSBzYW1lIHJvdXRlIFRlYW1zIHVzZXMuXG4gICAgaWYgKGNvbmZpZy5hbGxvd1VuYXV0aGVudGljYXRlZCkge1xuICAgICAgLy8gQWNjZXB0IGJvdGggZW52ZWxvcGVzOiBhIGJhcmUgYWN0aXZpdHkgKHdoYXQgQm90IFNlcnZpY2UgYW5kIHRoZVxuICAgICAgLy8gZW11bGF0b3IgUE9TVCkgYW5kIHRoZSBgeyBhY3Rpdml0eSwgYWdlbnRJZCB9YCByZXF1ZXN0IHNoYXBlIHRoZVxuICAgICAgLy8gYC9hY3Rpdml0eWAgcm91dGUgdGFrZXMsIHNvIGEgbG9jYWwgY2xpZW50IGNhbiBzdGlsbCBjaG9vc2UgYW4gYWdlbnQuXG4gICAgICBjb25zdCBib2R5ID1cbiAgICAgICAgb2JqZWN0LmlzUmVjb3JkKHJlcS5ib2R5KSAmJiBvYmplY3QuaXNSZWNvcmQocmVxLmJvZHkuYWN0aXZpdHkpXG4gICAgICAgICAgPyByZXEuYm9keVxuICAgICAgICAgIDogeyBhY3Rpdml0eTogcmVxLmJvZHkgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZVR1cm4oYm9keSk7XG4gICAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlcy5qc29uKHJlc3VsdC5kYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5hcHBJZCB8fCAhY29uZmlnLmFwcFBhc3N3b3JkKSB7XG4gICAgICByZXMuc3RhdHVzKDUwMykuanNvbih7XG4gICAgICAgIGVycm9yOlxuICAgICAgICAgIFwidGVhbXM6IG1lc3NhZ2luZyBlbmRwb2ludCBpcyBub3QgY29uZmlndXJlZCAtIHNldCBhcHBJZC9hcHBQYXNzd29yZCBcIiArXG4gICAgICAgICAgXCIoVEVBTVNfQVBQX0lEIC8gVEVBTVNfQVBQX1BBU1NXT1JEKSBmcm9tIHRoZSBBenVyZSBCb3QgcmVnaXN0cmF0aW9uXCIsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRob3JpemF0aW9uID0gcmVhZEhlYWRlcihyZXEuaGVhZGVycywgXCJhdXRob3JpemF0aW9uXCIpO1xuICAgIGxldCB2ZXJpZmllZDtcbiAgICB0cnkge1xuICAgICAgdmVyaWZpZWQgPSBhd2FpdCB2ZXJpZnlCb3RUb2tlbihhdXRob3JpemF0aW9uLCB7XG4gICAgICAgIGFwcElkOiBjb25maWcuYXBwSWQsXG4gICAgICAgIC4uLihjb25maWcuYXBwVGVuYW50SWQgPyB7IGFwcFRlbmFudElkOiBjb25maWcuYXBwVGVuYW50SWQgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gRGVsaWJlcmF0ZWx5IHRlcnNlOiBhIGNhbGxlciBmYWlsaW5nIGF1dGhlbnRpY2F0aW9uIGxlYXJucyBvbmx5IHRoYXQgaXRcbiAgICAgIC8vIGZhaWxlZCwgd2hpbGUgdGhlIHJlYXNvbiBnb2VzIHRvIHRoZSBsb2dzLlxuICAgICAgbG9nZ2VyLndhcm4oXCJyZWplY3RlZCBhbiB1bmF1dGhlbnRpY2F0ZWQgcmVxdWVzdFwiLCB7IGVycm9yOiBlcnJvci5lcnJvck1lc3NhZ2UoZXJyKSB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAxKS5qc29uKHsgZXJyb3I6IFwidW5hdXRob3JpemVkXCIgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gYWN0aXZpdHlDb250cmFjdC5hY3Rpdml0eVNjaGVtYS5zYWZlUGFyc2UocmVxLmJvZHkpO1xuICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IHBhcnNlZC5lcnJvci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmJvdW5kID0gcGFyc2VkLmRhdGE7XG5cbiAgICBjb25zdCBzZXJ2aWNlVXJsID0gcmVzb2x2ZVNlcnZpY2VVcmwoaW5ib3VuZCwgdmVyaWZpZWQuc2VydmljZVVybCk7XG4gICAgaWYgKCFzZXJ2aWNlVXJsKSB7XG4gICAgICBsb2dnZXIud2FybihcInJlamVjdGVkIGFuIGFjdGl2aXR5IHdpdGggbm8gdXNhYmxlIHNlcnZpY2VVcmxcIiwge1xuICAgICAgICB0eXBlOiBpbmJvdW5kLnR5cGUsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAwKS5qc29uKHsgZXJyb3I6IFwiYWN0aXZpdHkgY2FycmllZCBubyBhY2NlcHRhYmxlIHNlcnZpY2VVcmxcIiB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhZ2VudCA9IHJlc29sdmVDYXJkQWdlbnQodGhpcy5jb250ZXh0Py5nZXRQbHVnaW5zKCksIGNvbmZpZy5hZ2VudFBsdWdpbik7XG4gICAgaWYgKCFhZ2VudCkge1xuICAgICAgbG9nZ2VyLmVycm9yKFwibm8gYWdlbnQgYXZhaWxhYmxlIHRvIGFuc3dlciBhIFRlYW1zIHR1cm5cIiwge1xuICAgICAgICBhZ2VudFBsdWdpbjogY29uZmlnLmFnZW50UGx1Z2luLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDUwMykuanNvbih7IGVycm9yOiBcIm5vIGFnZW50IGF2YWlsYWJsZVwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFja25vd2xlZGdlIEZJUlNULiBFdmVyeXRoaW5nIGFmdGVyIHRoaXMgcG9pbnQgaXMgb3V0LW9mLWJhbmQgd29yayB3aG9zZVxuICAgIC8vIHJlc3VsdCByZWFjaGVzIHRoZSB1c2VyIHRocm91Z2ggdGhlIENvbm5lY3RvciBBUEksIG5vdCB0aGlzIHJlc3BvbnNlLlxuICAgIHJlcy5zdGF0dXMoMjAwKS5qc29uKHt9KTtcblxuICAgIGlmICghcHJvbXB0T2YoaW5ib3VuZCkpIHJldHVybjtcblxuICAgIGNvbnN0IGNyZWF0ZVJlcXVlc3RDb250ZXh0ID0gcmVzb2x2ZUNhcmRDb250ZXh0RmFjdG9yeShcbiAgICAgIHRoaXMuY29udGV4dD8uZ2V0UGx1Z2lucygpLFxuICAgICAgY29uZmlnLmFnZW50UGx1Z2luLFxuICAgICk7XG5cbiAgICB2b2lkIGRlbGl2ZXJUdXJuKHtcbiAgICAgIGFnZW50LFxuICAgICAgYWN0aXZpdHk6IGluYm91bmQsXG4gICAgICBzZXJ2aWNlVXJsLFxuICAgICAgLi4uKGNyZWF0ZVJlcXVlc3RDb250ZXh0ID8geyBjcmVhdGVSZXF1ZXN0Q29udGV4dCB9IDoge30pLFxuICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgYXBwSWQ6IGNvbmZpZy5hcHBJZCxcbiAgICAgICAgYXBwUGFzc3dvcmQ6IGNvbmZpZy5hcHBQYXNzd29yZCxcbiAgICAgICAgLi4uKGNvbmZpZy5hcHBUZW5hbnRJZCA/IHsgYXBwVGVuYW50SWQ6IGNvbmZpZy5hcHBUZW5hbnRJZCB9IDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDb21waWxlIGEgY2FyZCwgdmFsaWRhdGluZyB0aGUgcmVxdWVzdCBib2R5IGFnYWluc3QgdGhlIHNwZWMgc2NoZW1hLiAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVCdWlsZChib2R5OiB1bmtub3duKTogUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8Y2FyZC5DYXJkUmVzdWx0Pj4ge1xuICAgIGNvbnN0IHBhcnNlZCA9IGNhcmQuY2FyZFNwZWNTY2hlbWEuc2FmZVBhcnNlKGJvZHkpO1xuICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgc3RhdHVzOiA0MDAsIG1lc3NhZ2U6IHBhcnNlZC5lcnJvci5tZXNzYWdlIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoYXN5bmMgKHNpZ25hbCkgPT4gYnVpbGRDYXJkKHBhcnNlZC5kYXRhLCBzaWduYWwpLCBURUFNU19CVUlMRF9TRVRUSU5HUyk7XG4gIH1cblxuICAvKipcbiAgICogUnVuIG9uZSBjb252ZXJzYXRpb24gdHVybjogdmFsaWRhdGUgdGhlIGluYm91bmQgYWN0aXZpdHksIHJlc29sdmUgdGhlIGFnZW50XG4gICAqIGZyb20gdGhlIHNpYmxpbmcgYWdlbnQgcGx1Z2luLCBhbmQgYW5zd2VyIHdpdGggY2FyZC1jYXJyeWluZyBhY3Rpdml0aWVzLlxuICAgKlxuICAgKiBSZXNvbHV0aW9uIGZhaWx1cmVzIGFyZSByZXBvcnRlZCBkaXN0aW5jdGx5IGJlY2F1c2UgdGhleSBoYXZlIGRpZmZlcmVudFxuICAgKiBmaXhlczogNTAzIHdoZW4gbm8gYWdlbnQgcGx1Z2luIGlzIG1vdW50ZWQgYXQgYWxsIChhIHdpcmluZyBwcm9ibGVtKSwgNDA0XG4gICAqIHdoZW4gdGhlIGNhbGxlciBuYW1lZCBhbiBgYWdlbnRJZGAgdGhhdCBpcyBub3QgcmVnaXN0ZXJlZCAoYSByZXF1ZXN0XG4gICAqIHByb2JsZW0pLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlVHVybihcbiAgICBib2R5OiB1bmtub3duLFxuICApOiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdDxhY3Rpdml0eUNvbnRyYWN0LkFjdGl2aXR5UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcGFyc2VkID0gYWN0aXZpdHlDb250cmFjdC5hY3Rpdml0eVJlcXVlc3RTY2hlbWEuc2FmZVBhcnNlKGJvZHkpO1xuICAgIGlmICghcGFyc2VkLnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgc3RhdHVzOiA0MDAsIG1lc3NhZ2U6IHBhcnNlZC5lcnJvci5tZXNzYWdlIH07XG4gICAgfVxuICAgIGNvbnN0IHsgYWN0aXZpdHksIGFnZW50SWQgfSA9IHBhcnNlZC5kYXRhO1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRUZWFtc1J1bnRpbWUodGhpcy5jb25maWcpO1xuICAgIGNvbnN0IGFnZW50ID0gcmVzb2x2ZUNhcmRBZ2VudCh0aGlzLmNvbnRleHQ/LmdldFBsdWdpbnMoKSwgY29uZmlnLmFnZW50UGx1Z2luLCBhZ2VudElkKTtcbiAgICBpZiAoIWFnZW50KSB7XG4gICAgICByZXR1cm4gYWdlbnRJZFxuICAgICAgICA/IHsgb2s6IGZhbHNlLCBzdGF0dXM6IDQwNCwgbWVzc2FnZTogYHRlYW1zOiB1bmtub3duIGFnZW50ICcke2FnZW50SWR9J2AgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogNTAzLFxuICAgICAgICAgICAgbWVzc2FnZTogYHRlYW1zOiBubyBhZ2VudCBhdmFpbGFibGUgLSBpcyB0aGUgJyR7Y29uZmlnLmFnZW50UGx1Z2lufScgcGx1Z2luIHJlZ2lzdGVyZWQ/YCxcbiAgICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBjcmVhdGVSZXF1ZXN0Q29udGV4dCA9IHJlc29sdmVDYXJkQ29udGV4dEZhY3RvcnkoXG4gICAgICB0aGlzLmNvbnRleHQ/LmdldFBsdWdpbnMoKSxcbiAgICAgIGNvbmZpZy5hZ2VudFBsdWdpbixcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoYXN5bmMgKHNpZ25hbCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZpdGllcyA9IGF3YWl0IHJ1bkNhcmRUdXJuKGFnZW50LCBhY3Rpdml0eSwge1xuICAgICAgICAuLi4oY3JlYXRlUmVxdWVzdENvbnRleHQgPyB7IGNyZWF0ZVJlcXVlc3RDb250ZXh0IH0gOiB7fSksXG4gICAgICAgIC4uLihzaWduYWwgPyB7IHNpZ25hbCB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBhY3Rpdml0aWVzIH07XG4gICAgfSwgVEVBTVNfVFVSTl9TRVRUSU5HUyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGlsZSB0aGVuIHBvc3QgYSBjYXJkLCB2YWxpZGF0aW5nIHRoZSByZXF1ZXN0IGJvZHkgYWdhaW5zdCB0aGUgc3BlY1xuICAgKiBzY2hlbWEuIFRoZSBjb21waWxlIGlzIGZvbGRlZCBJTlRPIHRoZSBleGVjdXRlZCBjYWxsYmFjayBzbyBhIHRocm93IGZyb21cbiAgICogZWl0aGVyIGhhbGYgKGEgYnVpbGQgZmFpbHVyZSwgb3IgYHBvc3RDYXJkYCByZWZ1c2luZyBiZWNhdXNlIG5vIHdlYmhvb2sgaXNcbiAgICogY29uZmlndXJlZCkgY29tZXMgYmFjayBhcyBhIGZhaWxlZCB7QGxpbmsgRXhlY3V0aW9uUmVzdWx0fSB0aGUgcm91dGUgY2FuXG4gICAqIGFuc3dlciB3aXRoLCByYXRoZXIgdGhhbiBlc2NhcGluZyB0aGUgaGFuZGxlciBhcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlUG9zdChib2R5OiB1bmtub3duKTogUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQ8dm9pZD4+IHtcbiAgICBjb25zdCBwYXJzZWQgPSBjYXJkLmNhcmRTcGVjU2NoZW1hLnNhZmVQYXJzZShib2R5KTtcbiAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIHN0YXR1czogNDAwLCBtZXNzYWdlOiBwYXJzZWQuZXJyb3IubWVzc2FnZSB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKGFzeW5jIChzaWduYWwpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWx0ID0gYXdhaXQgYnVpbGRDYXJkKHBhcnNlZC5kYXRhLCBzaWduYWwpO1xuICAgICAgYXdhaXQgcG9zdENhcmQoYnVpbHQuY2FyZCwgc2lnbmFsKTtcbiAgICB9LCBURUFNU19QT1NUX1NFVFRJTkdTKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVyIHRoZSBUZWFtcyBwbHVnaW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBjcmVhdGVBcHAsIHNlcnZlciB9IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbiAqIGltcG9ydCB7IHBsdWdpbiBhcyB0ZWFtc1BsdWdpbiB9IGZyb20gXCJAZGJ4LXRvb2xzL3RlYW1zXCI7XG4gKlxuICogYXdhaXQgY3JlYXRlQXBwKHtcbiAqICAgcGx1Z2luczogW3NlcnZlcigpLCB0ZWFtc1BsdWdpbi50ZWFtcygpXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjb25zdCB0ZWFtcyA9IHRvUGx1Z2luKFRlYW1zUGx1Z2luKTtcblxuLyoqXG4gKiBSZWFkIG9uZSBoZWFkZXIgdmFsdWUsIG5vcm1hbGl6aW5nIE5vZGUncyBgc3RyaW5nIHwgc3RyaW5nW11gIHNoYXBlLlxuICpcbiAqIEV4cHJlc3MgbG93ZXItY2FzZXMgaW5jb21pbmcgaGVhZGVyIG5hbWVzLCBidXQgdGhpcyBpcyB3cml0dGVuIGFnYWluc3QgYVxuICogc3RydWN0dXJhbCBgaGVhZGVyc2AgcmVjb3JkIChzbyB0aGUgaGFuZGxlciBzdGF5cyB0ZXN0YWJsZSB3aXRob3V0IGFuIEV4cHJlc3NcbiAqIHJlcXVlc3QpLCBoZW5jZSB0aGUgZXhwbGljaXQgY2FzZS1pbnNlbnNpdGl2ZSBsb29rdXAuXG4gKi9cbmZ1bmN0aW9uIHJlYWRIZWFkZXIoaGVhZGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGRpcmVjdCA9IGhlYWRlcnNbbmFtZV0gPz8gaGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICBjb25zdCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkoZGlyZWN0KSA/IGRpcmVjdFswXSA6IGRpcmVjdDtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IChzdHJpbmcudHJpbVRvTnVsbCh2YWx1ZSkgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
430
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUVILE9BQU8sRUFDTCxNQUFNLEVBQ04sUUFBUSxHQUlULE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLFVBQVUsRUFDVixtQkFBbUIsRUFDbkIsaUJBQWlCLEdBSWxCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxRQUFRLElBQUksY0FBYyxFQUFFLElBQUksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUEwQixNQUFNLGFBQWEsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsUUFBUSxFQUNSLGdCQUFnQixFQUNoQix5QkFBeUIsRUFDekIsV0FBVyxHQUNaLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixRQUFRLEVBQ1IsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUNqQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEQsc0VBQXNFO0FBQ3RFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQztBQUUzQixpRkFBaUY7QUFDakYsTUFBTSxVQUFVLEdBQUcs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SUFBWTtJQUNoRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pELE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN6RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcHBLaXQgcGx1Z2luIChyZWdpc3RlcmVkIG5hbWU6IGB0ZWFtc2ApIHRoYXQgb3ducyB0aGUgVGVhbXMgQWRhcHRpdmUgQ2FyZFxuICogcnVudGltZSAtIHRoZSByZXNvbHZlZCBjYXJkIHZlcnNpb24gYW5kIHRoZSBvcHRpb25hbCBpbmNvbWluZy13ZWJob29rIFVSTCB0aGVcbiAqIHtAbGluayB0ZWFtc0NhcmRUb29sfSBhbmQgdGhlIEFwcEtpdCBgdGVhbXMuY3JlYXRlQ2FyZGAgdG9vbCByZWFkLiBSZWdpc3RlcmluZ1xuICogaXQgcmVzb2x2ZXMgYW5kIGxvZ3MgdGhlIGVmZmVjdGl2ZSBjb25maWcgKHdoaWNoIGNhcmQgdmVyc2lvbiBpcyBpbiBmb3JjZSxcbiAqIHdoZXRoZXIgYSB3ZWJob29rIGlzIHdpcmVkIHVwKSBzbyBhIG1pc2NvbmZpZ3VyYXRpb24gaXMgdmlzaWJsZSBpbiB0aGUgYm9vdFxuICogbG9ncyByYXRoZXIgdGhhbiBvbiB0aGUgZmlyc3QgY2FyZCwgYW5kIGluc3RhbGxzIHRoZSBwbHVnaW4ncyBgZXhlY3V0ZSgpYCBhc1xuICogdGhlIHJ1bnRpbWUncyBleGVjdXRvciBzbyBldmVyeSBidWlsZCAvIHBvc3QgcGlja3MgdXAgQXBwS2l0J3MgY2FjaGUgLyByZXRyeSAvXG4gKiB0aW1lb3V0IC8gdGVsZW1ldHJ5IGNoYWluLlxuICpcbiAqIFRoZSBwbHVnaW4gaXMgYWxzbyBhIGBUb29sUHJvdmlkZXJgLCBzbyBhbiBBcHBLaXQgYWdlbnQgY2FuIHJlYWNoIGFcbiAqIGB0ZWFtcy5jcmVhdGVDYXJkYCB0b29sIGRpcmVjdGx5OyB0aGUge0BsaW5rIHRlYW1zQ2FyZFRvb2x9IGV4cG9ydCBpcyB0aGUgc2FtZVxuICogY2FwYWJpbGl0eSBmb3IgYSBNYXN0cmEgYWdlbnQuIEJvdGggc2hhcmUgdGhlIHJ1bnRpbWUgcHJpbWVkIGhlcmUuXG4gKlxuICogVGhlIHBsdWdpbiBtb3VudHMgZm91ciByb3V0ZXMgdW5kZXIgaXRzIGJhc2UgcGF0aCAoYC9hcGkvdGVhbXNgKTpcbiAqXG4gKiAgIC0gYFBPU1QgL21lc3NhZ2VzYCBpcyB0aGUgUkVBTCBNaWNyb3NvZnQgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50IC0gdGhlIFVSTFxuICogICAgIGFuIEF6dXJlIEJvdCByZWdpc3RyYXRpb24gcG9pbnRzIGF0LiBJdCB2YWxpZGF0ZXMgdGhlIEJvdCBTZXJ2aWNlIEpXVCxcbiAqICAgICBhY2tub3dsZWRnZXMgaW1tZWRpYXRlbHksIGFuZCBkZWxpdmVycyB0aGUgYWdlbnQncyBjYXJkIGJhY2sgb3ZlciB0aGVcbiAqICAgICBDb25uZWN0b3IgQVBJLiBUaGlzIGlzIHRoZSByb3V0ZSB0aGF0IG1ha2VzIGEgVGVhbXMgY2hhbm5lbCBhYmxlIHRvIGNoYXRcbiAqICAgICB3aXRoIHRoZSBhcHAncyBhZ2VudHMsIHRoZSBzYW1lIHdheSB0aGUgTWFzdHJhIHBsdWdpbiBleHBvc2VzIE1DUCBhdCBhXG4gKiAgICAgcGF0aC5cbiAqICAgLSBgUE9TVCAvYWN0aXZpdHlgIHJ1bnMgdGhlIHNhbWUgdHVybiBTWU5DSFJPTk9VU0xZLCBhbnN3ZXJpbmcgd2l0aCB0aGVcbiAqICAgICByZXBseSBhY3Rpdml0aWVzIGluIHRoZSByZXNwb25zZSBib2R5LiBJdCBuZWVkcyBubyBib3QgcmVnaXN0cmF0aW9uLCBzb1xuICogICAgIGl0IGlzIHdoYXQgYSBsb2NhbCBjbGllbnQgKHRoZSBpbi1yZXBvIHByZXZpZXcgY2hhdCksIGEgdGVzdCwgb3IgYW55XG4gKiAgICAgbm9uLVRlYW1zIGNhbGxlciB1c2VzLlxuICogICAtIGBQT1NUIC9jYXJkYCBjb21waWxlcyBhIHtAbGluayBjYXJkLkNhcmRTcGVjfSBpbnRvIGFuIEFkYXB0aXZlIENhcmRcbiAqICAgICBkb2N1bWVudCAodGhlIHByZXZpZXcgcGFnZSBwb3N0cyBoZXJlKS5cbiAqICAgLSBgUE9TVCAvcG9zdGAgcHVzaGVzIGEgY29tcGlsZWQgY2FyZCB0byB0aGUgY29uZmlndXJlZCBUZWFtcyBpbmNvbWluZ1xuICogICAgIHdlYmhvb2sgd2hlbiBvbmUgaXMgc2V0LlxuICpcbiAqIE1pcnJvcnMgdGhlIG5vZGUtZW1haWwgYWRkLW9uJ3Mgc2hhcGUuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7XG4gIFBsdWdpbixcbiAgdG9QbHVnaW4sXG4gIHR5cGUgRXhlY3V0aW9uUmVzdWx0LFxuICB0eXBlIElBcHBSb3V0ZXIsXG4gIHR5cGUgUGx1Z2luTWFuaWZlc3QsXG59IGZyb20gXCJAZGF0YWJyaWNrcy9hcHBraXRcIjtcbmltcG9ydCB7XG4gIGRlZmluZVRvb2wsXG4gIGV4ZWN1dGVGcm9tUmVnaXN0cnksXG4gIHRvb2xzRnJvbVJlZ2lzdHJ5LFxuICB0eXBlIEFnZW50VG9vbERlZmluaXRpb24sXG4gIHR5cGUgVG9vbFByb3ZpZGVyLFxuICB0eXBlIFRvb2xSZWdpc3RyeSxcbn0gZnJvbSBcIkBkYXRhYnJpY2tzL2FwcGtpdC9iZXRhXCI7XG5pbXBvcnQgeyBlcnJvciwgbG9nLCBvYmplY3QsIHN0cmluZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBhY3Rpdml0eSBhcyBzaGFyZWRBY3Rpdml0eSwgY2FyZCB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC10ZWFtc1wiO1xuaW1wb3J0IHsgdmVyaWZ5Qm90VG9rZW4gfSBmcm9tIFwiLi9hdXRoLnRzXCI7XG5pbXBvcnQgeyBURUFNU19DT05GSUdfU0NIRU1BLCB0eXBlIFRlYW1zUGx1Z2luQ29uZmlnIH0gZnJvbSBcIi4vY29uZmlnLnRzXCI7XG5pbXBvcnQge1xuICBwcm9tcHRPZixcbiAgcmVzb2x2ZUNhcmRBZ2VudCxcbiAgcmVzb2x2ZUNhcmRDb250ZXh0RmFjdG9yeSxcbiAgcnVuQ2FyZFR1cm4sXG59IGZyb20gXCIuL2NvbnZlcnNhdGlvbi50c1wiO1xuaW1wb3J0IHsgVEVBTVNfQlVJTERfU0VUVElOR1MsIFRFQU1TX1BPU1RfU0VUVElOR1MsIFRFQU1TX1RVUk5fU0VUVElOR1MgfSBmcm9tIFwiLi9kZWZhdWx0cy50c1wiO1xuaW1wb3J0IHsgZGVsaXZlclR1cm4sIHJlc29sdmVTZXJ2aWNlVXJsIH0gZnJvbSBcIi4vbWVzc2FnaW5nLnRzXCI7XG5pbXBvcnQge1xuICBidWlsZENhcmQsXG4gIGdldFRlYW1zUnVudGltZSxcbiAgcG9zdENhcmQsXG4gIHJlc2V0VGVhbXNSdW50aW1lLFxuICBzZXRUZWFtc0V4ZWN1dG9yLFxufSBmcm9tIFwiLi9ydW50aW1lLnRzXCI7XG5pbXBvcnQgeyBDUkVBVEVfQ0FSRF9ERVNDUklQVElPTiB9IGZyb20gXCIuL3Rvb2wudHNcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlICh1bmRlciBgL2FwaS90ZWFtc2ApIGZvciBjb21waWxpbmcgYSBjYXJkLiAqL1xuY29uc3QgQ0FSRF9ST1VURSA9IFwiL2NhcmRcIjtcblxuLyoqIE1vdW50LXJlbGF0aXZlIHJvdXRlICh1bmRlciBgL2FwaS90ZWFtc2ApIGZvciBwb3N0aW5nIGEgY2FyZCB0byBhIHdlYmhvb2suICovXG5jb25zdCBQT1NUX1JPVVRFID0gXCIvcG9zdFwiO1xuXG4vKipcbiAqIE1vdW50LXJlbGF0aXZlIHJvdXRlICh1bmRlciBgL2FwaS90ZWFtc2ApIGZvciBvbmUgY29udmVyc2F0aW9uIHR1cm46IGEgQm90XG4gKiBGcmFtZXdvcmsgYWN0aXZpdHkgaW4sIGFjdGl2aXRpZXMgY2FycnlpbmcgQWRhcHRpdmUgQ2FyZHMgYmFjay5cbiAqL1xuY29uc3QgQUNUSVZJVFlfUk9VVEUgPSBcIi9hY3Rpdml0eVwiO1xuXG4vKipcbiAqIE1vdW50LXJlbGF0aXZlIHJvdXRlICh1bmRlciBgL2FwaS90ZWFtc2ApIGZvciB0aGUgVGVhbXMgbWVzc2FnaW5nIGVuZHBvaW50LlxuICogVGhpcyBpcyB0aGUgcGF0aCBhIGJvdCByZWdpc3RyYXRpb24ncyBtZXNzYWdpbmcgZW5kcG9pbnQgcG9pbnRzIGF0LCBpLmUuXG4gKiBgaHR0cHM6Ly88aG9zdD4vYXBpL3RlYW1zL21lc3NhZ2VzYC5cbiAqL1xuY29uc3QgTUVTU0FHRVNfUk9VVEUgPSBcIi9tZXNzYWdlc1wiO1xuXG4vKiogUmVnaXN0cnkga2V5IG9mIHRoZSBhZ2VudCB0b29sLCB3aGljaCBhZ2VudHMgYWRkcmVzcyBhcyBgdGVhbXMuY3JlYXRlQ2FyZGAuICovXG5jb25zdCBDUkVBVEVfVE9PTCA9IFwiY3JlYXRlQ2FyZFwiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwidGVhbXNcIik7XG5cbi8qKlxuICogQXBwS2l0IHBsdWdpbiB0aGF0IGNvbmZpZ3VyZXMgdGhlIEFkYXB0aXZlIENhcmQgYnVpbGRlciB1c2VkIGJ5IHRoZVxuICogYGNyZWF0ZV90ZWFtc19jYXJkYCB0b29sLCBhbmQgZXhwb3NlcyBjYXJkIGJ1aWxkaW5nIGFzIGFuIEFwcEtpdCBhZ2VudCB0b29sLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBwbHVnaW4gYXMgdGVhbXNQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy90ZWFtc1wiO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtcbiAqICAgICBzZXJ2ZXIoKSxcbiAqICAgICB0ZWFtc1BsdWdpbi50ZWFtcyh7IHdlYmhvb2tVcmw6IHByb2Nlc3MuZW52LlRFQU1TX1dFQkhPT0tfVVJMIH0pLFxuICogICBdLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFRlYW1zUGx1Z2luIGV4dGVuZHMgUGx1Z2luPFRlYW1zUGx1Z2luQ29uZmlnPiBpbXBsZW1lbnRzIFRvb2xQcm92aWRlciB7XG4gIHN0YXRpYyBtYW5pZmVzdCA9IHtcbiAgICBuYW1lOiBcInRlYW1zXCIsXG4gICAgZGlzcGxheU5hbWU6IFwiVGVhbXNcIixcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgIFwiQW5zd2VycyBjaGF0IHR1cm5zIGFzIE1pY3Jvc29mdCBUZWFtcyBBZGFwdGl2ZSBDYXJkcyBvdmVyIGEgQm90IFwiICtcbiAgICAgIFwiRnJhbWV3b3JrIGFjdGl2aXR5IGVuZHBvaW50LCBidWlsZHMgY2FyZHMgZnJvbSBhIHNtYWxsIHN0cnVjdHVyZWQgY2FyZCBcIiArXG4gICAgICBcImRlc2NyaXB0aW9uLCBhbmQgb3B0aW9uYWxseSBwb3N0cyB0aGVtIHRvIGEgVGVhbXMgaW5jb21pbmcgd2ViaG9vay5cIixcbiAgICBzdGFiaWxpdHk6IFwiYmV0YVwiLFxuICAgIHJlc291cmNlczoge1xuICAgICAgcmVxdWlyZWQ6IFtdLFxuICAgICAgb3B0aW9uYWw6IFtdLFxuICAgIH0sXG4gICAgY29uZmlnOiB7IHNjaGVtYTogVEVBTVNfQ09ORklHX1NDSEVNQSB9LFxuICB9IHNhdGlzZmllcyBQbHVnaW5NYW5pZmVzdDxcInRlYW1zXCI+O1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbCB0aGlzIHBsdWdpbiBvZmZlcnMgdG8gYW4gQXBwS2l0IGFnZW50LlxuICAgKlxuICAgKiBNYXJrZWQgYGF1dG9Jbmhlcml0YWJsZWA6IGJ1aWxkaW5nIGEgY2FyZCBpcyBhIHB1cmUsIHNpZGUtZWZmZWN0LWZyZWVcbiAgICogdHJhbnNmb3JtIChub3RoaW5nIGxlYXZlcyB0aGUgYnVpbGRpbmcpLCBzbyBpdCBpcyBzYWZlIHRvIGhhbmQgdG8gYW55XG4gICAqIGFnZW50IGJ5IGRlZmF1bHQgLSB1bmxpa2UgYSBzZW5kLlxuICAgKlxuICAgKiBgZXhlY3V0ZWAgcmUtcGFyc2VzIGl0cyBhcmd1bWVudHMgd2l0aCB0aGUgbG9jYWwgc2NoZW1hOiBBcHBLaXQgdmFsaWRhdGVzXG4gICAqIGFnYWluc3QgdGhlIHNhbWUgc2NoZW1hIGZpcnN0LCBidXQgcmUtcGFyc2luZyBpcyB3aGF0IGdpdmVzIHRoZSBib2R5IHR5cGVkXG4gICAqIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIGB1bmtub3duYC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbHM6IFRvb2xSZWdpc3RyeSA9IHtcbiAgICBbQ1JFQVRFX1RPT0xdOiBkZWZpbmVUb29sKHtcbiAgICAgIGRlc2NyaXB0aW9uOiBDUkVBVEVfQ0FSRF9ERVNDUklQVElPTixcbiAgICAgIHNjaGVtYTogY2FyZC5jYXJkU3BlY1NjaGVtYSxcbiAgICAgIGFubm90YXRpb25zOiB7IGVmZmVjdDogXCJyZWFkXCIgfSxcbiAgICAgIGF1dG9Jbmhlcml0YWJsZTogdHJ1ZSxcbiAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzLCBzaWduYWwpID0+IGJ1aWxkQ2FyZChjYXJkLmNhcmRTcGVjU2NoZW1hLnBhcnNlKGFyZ3MpLCBzaWduYWwpLFxuICAgIH0pLFxuICB9O1xuXG4gIC8qKlxuICAgKiBQcmltZSB0aGUgc2hhcmVkIHJ1bnRpbWUgZnJvbSB0aGlzIHBsdWdpbidzIGNvbmZpZyAob3ZlciBlbnYpLCByb3V0ZSB0aGVcbiAgICogdG9vbCdzIGJ1aWxkcyB0aHJvdWdoIHRoaXMgcGx1Z2luJ3MgaW50ZXJjZXB0b3IgY2hhaW4sIGFuZCBsb2cgdGhlXG4gICAqIGVmZmVjdGl2ZSBjb25maWcgc28gdGhlIHJlc29sdmVkIGNhcmQgdmVyc2lvbiBhbmQgd2hldGhlciBhIHdlYmhvb2sgaXNcbiAgICogd2lyZWQgdXAgYXJlIG9idmlvdXMgYXQgYm9vdC5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHNldHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRUZWFtc1J1bnRpbWUodGhpcy5jb25maWcpO1xuICAgIHNldFRlYW1zRXhlY3V0b3IoKGZuLCBzZXR0aW5ncykgPT4gdGhpcy5leGVjdXRlKGZuLCBzZXR0aW5ncykpO1xuICAgIGxvZ2dlci5pbmZvKFwicmVhZHlcIiwge1xuICAgICAgY2FyZFZlcnNpb246IGNvbmZpZy5jYXJkVmVyc2lvbixcbiAgICAgIHdlYmhvb2s6IGNvbmZpZy53ZWJob29rVXJsID8gXCJjb25maWd1cmVkXCIgOiBcImRpc2FibGVkXCIsXG4gICAgICBtZXNzYWdpbmc6IGNvbmZpZy5hbGxvd1VuYXV0aGVudGljYXRlZFxuICAgICAgICA/IFwiVU5BVVRIRU5USUNBVEVEIChkZXZlbG9wbWVudClcIlxuICAgICAgICA6IGNvbmZpZy5hcHBJZCAmJiBjb25maWcuYXBwUGFzc3dvcmRcbiAgICAgICAgICA/IFwiYm90IHJlZ2lzdHJhdGlvbiBjb25maWd1cmVkXCJcbiAgICAgICAgICA6IFwiZGlzYWJsZWQgKG5vIGFwcElkL2FwcFBhc3N3b3JkKVwiLFxuICAgIH0pO1xuICAgIC8vIEFuIGVuZHBvaW50IHNlcnZpbmcgYWdlbnQgdHVybnMgd2l0aCBubyBhdXRoIGlzIHdvcnRoIGEgd2FybmluZyBvbiBldmVyeVxuICAgIC8vIGJvb3QsIG5vdCBhIGxpbmUgYnVyaWVkIGluIGFuIGluZm8gcGF5bG9hZC5cbiAgICBpZiAoY29uZmlnLmFsbG93VW5hdXRoZW50aWNhdGVkKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgXCJQT1NUIC9tZXNzYWdlcyBpcyBzZXJ2aW5nIFVOQVVUSEVOVElDQVRFRCB0dXJucyAtIGFueSBjYWxsZXIgdGhhdCBjYW4gXCIgK1xuICAgICAgICAgIFwicmVhY2ggdGhpcyByb3V0ZSBjYW4gZHJpdmUgdGhlIGFnZW50LiBEZXZlbG9wbWVudCBvbmx5OyBuZXZlciBleHBvc2UgdGhpcy5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIERyb3AgdGhlIHNoYXJlZCBydW50aW1lLiBJZGVtcG90ZW50LiAqL1xuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXNldFRlYW1zUnVudGltZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vdW50IHRoZSBjYXJkLWJ1aWxkaW5nIGFuZCBjYXJkLXBvc3Rpbmcgcm91dGVzIHVuZGVyIHRoZSBwbHVnaW4gYmFzZVxuICAgKiBwYXRoIChgL2FwaS90ZWFtc2ApLiBgUE9TVCAvY2FyZGAgaXMgd2hhdCB0aGUgZGV2IGRpc3BsYXkgcGFnZSBjYWxscyB0b1xuICAgKiBwcmV2aWV3IGEgY2FyZCBsaXZlOyBgUE9TVCAvcG9zdGAgcHVzaGVzIGEgY29tcGlsZWQgY2FyZCB0byB0aGUgY29uZmlndXJlZFxuICAgKiBUZWFtcyBpbmNvbWluZyB3ZWJob29rLlxuICAgKlxuICAgKiBOZWl0aGVyIHJvdXRlIGlzIHdyYXBwZWQgaW4gYGFzVXNlcihyZXEpYDogY29tcGlsaW5nIGEgY2FyZCBpcyBhIHB1cmVcbiAgICogdHJhbnNmb3JtIG9mIHRoZSByZXF1ZXN0IGJvZHkgYW5kIHBvc3RpbmcgZ29lcyB0byBhIHByZWNvbmZpZ3VyZWQgd2ViaG9vayxcbiAgICogc28gbmVpdGhlciByZWFkcyB3b3Jrc3BhY2UgZGF0YSBvbiB0aGUgY2FsbGVyJ3MgYmVoYWxmIGFuZCBuZWl0aGVyIG5lZWRzIGFuXG4gICAqIE9CTyB0b2tlbi4gV3JhcHBpbmcgdGhlbSB3b3VsZCBtYWtlIHRoZSByb3V0ZXMgdGhyb3dcbiAgICogYEF1dGhlbnRpY2F0aW9uRXJyb3JgIHdoZW5ldmVyIHRoZSB1c2VyLXRva2VuIGhlYWRlciBpcyBhYnNlbnQgKGEgbG9jYWxcbiAgICogYGN1cmxgLCBhIGhlYWx0aCBwcm9iZSksIHdoaWNoIC0gc2luY2UgQXBwS2l0IGRvZXMgbm90IGNhdGNoIGEgcmVqZWN0aW9uXG4gICAqIHJhaXNlZCBpbnNpZGUgdGhlIGhhbmRsZXIgLSB0YWtlcyB0aGUgcHJvY2VzcyBkb3duIHJhdGhlciB0aGFuIGFuc3dlcmluZ1xuICAgKiA0MDEuXG4gICAqL1xuICBvdmVycmlkZSBpbmplY3RSb3V0ZXMocm91dGVyOiBJQXBwUm91dGVyKTogdm9pZCB7XG4gICAgdGhpcy5yb3V0ZShyb3V0ZXIsIHtcbiAgICAgIG5hbWU6IFwiYnVpbGRDYXJkXCIsXG4gICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgcGF0aDogQ0FSRF9ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVCdWlsZChyZXEuYm9keSk7XG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzKS5qc29uKHsgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXMuanNvbihyZXN1bHQuZGF0YSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcImFjdGl2aXR5XCIsXG4gICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgcGF0aDogQUNUSVZJVFlfUk9VVEUsXG4gICAgICBoYW5kbGVyOiBhc3luYyAocmVxLCByZXMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlVHVybihyZXEuYm9keSk7XG4gICAgICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzKS5qc29uKHsgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXMuanNvbihyZXN1bHQuZGF0YSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHRoaXMucm91dGUocm91dGVyLCB7XG4gICAgICBuYW1lOiBcInBvc3RDYXJkXCIsXG4gICAgICBtZXRob2Q6IFwicG9zdFwiLFxuICAgICAgcGF0aDogUE9TVF9ST1VURSxcbiAgICAgIGhhbmRsZXI6IGFzeW5jIChyZXEsIHJlcykgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVQb3N0KHJlcS5ib2R5KTtcbiAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5zdGF0dXMpLmpzb24oeyBlcnJvcjogcmVzdWx0Lm1lc3NhZ2UgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlcy5qc29uKHsgb2s6IHRydWUgfSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIC8vIFRoZSByZWFsIFRlYW1zIG1lc3NhZ2luZyBlbmRwb2ludC4gVW5saWtlIGV2ZXJ5IG90aGVyIHJvdXRlIGhlcmUgaXQgaXNcbiAgICAvLyBjYWxsZWQgYnkgQXp1cmUgQm90IFNlcnZpY2Ugb3ZlciB0aGUgcHVibGljIGludGVybmV0LCBzbyBpdCBhdXRoZW50aWNhdGVzXG4gICAgLy8gaXRzZWxmIGZyb20gdGhlIGluYm91bmQgSldUIGFuZCBhbnN3ZXJzIGAyMDBgIGJlZm9yZSB0aGUgYWdlbnQgaGFzIHJ1bi5cbiAgICB0aGlzLnJvdXRlKHJvdXRlciwge1xuICAgICAgbmFtZTogXCJtZXNzYWdlc1wiLFxuICAgICAgbWV0aG9kOiBcInBvc3RcIixcbiAgICAgIHBhdGg6IE1FU1NBR0VTX1JPVVRFLFxuICAgICAgaGFuZGxlcjogYXN5bmMgKHJlcSwgcmVzKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlTWVzc2FnZShyZXEsIHJlcyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZXhwb3J0cygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLyoqXG4gICAgICAgKiBDb21waWxlIGEgY2FyZCBzcGVjIGludG8gYW4gQWRhcHRpdmUgQ2FyZCBkb2N1bWVudC4gRm9yIGFnZW50LWRyaXZlblxuICAgICAgICogYnVpbGRzIHVzZSB7QGxpbmsgdGVhbXNDYXJkVG9vbH0gaW5zdGVhZC5cbiAgICAgICAqL1xuICAgICAgYnVpbGRDYXJkOiAoc3BlYzogY2FyZC5DYXJkU3BlYywgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPGNhcmQuQ2FyZFJlc3VsdD4gPT5cbiAgICAgICAgYnVpbGRDYXJkKHNwZWMsIHNpZ25hbCksXG4gICAgICAvKipcbiAgICAgICAqIFBvc3QgYSBjb21waWxlZCBjYXJkIHRvIHRoZSBjb25maWd1cmVkIFRlYW1zIGluY29taW5nIHdlYmhvb2suIFRocm93c1xuICAgICAgICogd2hlbiBubyB3ZWJob29rIGlzIGNvbmZpZ3VyZWQuXG4gICAgICAgKi9cbiAgICAgIHBvc3RDYXJkOiAoY2FyZERvY3VtZW50OiBjYXJkLkFkYXB0aXZlQ2FyZCwgc2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgIHBvc3RDYXJkKGNhcmREb2N1bWVudCwgc2lnbmFsKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEFwcEtpdCBgVG9vbFByb3ZpZGVyYDogdGhlIHRvb2wgZGVmaW5pdGlvbnMgb2ZmZXJlZCB0byBhbiBhZ2VudC4gKi9cbiAgZ2V0QWdlbnRUb29scygpOiBBZ2VudFRvb2xEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0b29sc0Zyb21SZWdpc3RyeSh0aGlzLnRvb2xzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBLaXQgYFRvb2xQcm92aWRlcmA6IHJ1biBvbmUgdG9vbCBjYWxsLiBBcmd1bWVudHMgYXJlIHZhbGlkYXRlZCBhZ2FpbnN0XG4gICAqIHRoZSB0b29sJ3Mgc2NoZW1hIGZpcnN0LCBhbmQgYSB2YWxpZGF0aW9uIGZhaWx1cmUgY29tZXMgYmFjayBhcyBhblxuICAgKiBMTE0tZnJpZW5kbHkgc3RyaW5nIHNvIHRoZSBtb2RlbCBjYW4gY29ycmVjdCBpdHNlbGYgb24gdGhlIG5leHQgdHVybi5cbiAgICovXG4gIGFzeW5jIGV4ZWN1dGVBZ2VudFRvb2wobmFtZTogc3RyaW5nLCBhcmdzOiB1bmtub3duLCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dW5rbm93bj4ge1xuICAgIHJldHVybiBleGVjdXRlRnJvbVJlZ2lzdHJ5KHRoaXMudG9vbHMsIG5hbWUsIGFyZ3MsIHNpZ25hbCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG9uZSBpbmJvdW5kIHJlcXVlc3QgZnJvbSBBenVyZSBCb3QgU2VydmljZSBvbiBgUE9TVCAvbWVzc2FnZXNgLlxuICAgKlxuICAgKiBUaGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpcyBkaWN0YXRlZCBieSBob3cgQm90IFNlcnZpY2UgYmVoYXZlcywgbm90IGJ5XG4gICAqIGNvbnZlbmllbmNlOlxuICAgKlxuICAgKiAgIDEuICoqUmVmdXNlIHdoZW4gdW5jb25maWd1cmVkLioqIFdpdGggbm8gYGFwcElkYCB0aGVyZSBpcyBubyBhdWRpZW5jZSB0b1xuICAgKiAgICAgIHZhbGlkYXRlIGEgdG9rZW4gYWdhaW5zdCwgc28gdGhlIGVuZHBvaW50IGNhbm5vdCBiZSBvcGVyYXRlZCBzYWZlbHk7XG4gICAqICAgICAgaXQgYW5zd2VycyA1MDMgcmF0aGVyIHRoYW4gcHJvY2Vzc2luZyBhbiB1bmF1dGhlbnRpY2F0ZWQgYWN0aXZpdHkuXG4gICAqICAgMi4gKipWYWxpZGF0ZSB0aGUgSldUIGJlZm9yZSBwYXJzaW5nIHRoZSBib2R5LioqIFRoZSB0b2tlbiBpcyB0aGUgb25seVxuICAgKiAgICAgIHRydXN0IGJvdW5kYXJ5IHRoaXMgZW5kcG9pbnQgaGFzLlxuICAgKiAgIDMuICoqUGluIHRoZSByZXBseSBkZXN0aW5hdGlvbiB0byB0aGUgdG9rZW4uKiogYHNlcnZpY2VVcmxgIGFycml2ZXMgaW4gdGhlXG4gICAqICAgICAgYm9keSwgYW5kIHJlcGxpZXMgY2FycnkgdGhlIGJvdCdzIGNyZWRlbnRpYWxzLCBzbyBpdCBpcyBvbmx5IGhvbm9yZWRcbiAgICogICAgICB3aGVuIGl0IG1hdGNoZXMgdGhlIHZlcmlmaWVkIHRva2VuLlxuICAgKiAgIDQuICoqQW5zd2VyIDIwMCBpbW1lZGlhdGVseSwgdGhlbiBydW4gdGhlIGFnZW50LioqIEJvdCBTZXJ2aWNlIHRpbWVzIG91dFxuICAgKiAgICAgIGFuIHVuYWNrbm93bGVkZ2VkIGFjdGl2aXR5IGluIHNlY29uZHMgYW5kIFJFVFJJRVMgaXQ7IGEgY2FyZCB0YWtlcyBmYXJcbiAgICogICAgICBsb25nZXIgdGhhbiB0aGF0LCBhbmQgYSByZXRyeSB3b3VsZCBwb3N0IGEgZHVwbGljYXRlIGNhcmQuXG4gICAqXG4gICAqIEFjdGl2aXRpZXMgdGhhdCBjYXJyeSBubyBwcm9tcHQgKGB0eXBpbmdgLCBgY29udmVyc2F0aW9uVXBkYXRlYCwgYW5cbiAgICogYXR0YWNobWVudC1vbmx5IG1lc3NhZ2UpIGFyZSBhY2tub3dsZWRnZWQgYW5kIGRyb3BwZWQgLSBleGFjdGx5IHdoYXQgYSBib3RcbiAgICogZG9lcyB3aXRoIHRoZW0uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRsZU1lc3NhZ2UoXG4gICAgcmVxOiB7IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBib2R5OiB1bmtub3duIH0sXG4gICAgcmVzOiB7XG4gICAgICBzdGF0dXMoY29kZTogbnVtYmVyKTogeyBqc29uKGJvZHk6IHVua25vd24pOiB2b2lkIH07XG4gICAgICBqc29uKGJvZHk6IHVua25vd24pOiB2b2lkO1xuICAgICAgaGVhZGVyc1NlbnQ/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBnZXRUZWFtc1J1bnRpbWUodGhpcy5jb25maWcpO1xuXG4gICAgLy8gTG9jYWwgZGV2ZWxvcG1lbnQgbW9kZTogbm8gYm90IHJlZ2lzdHJhdGlvbiwgbm8gdG9rZW4sIGFuZCB0aGUgcmVwbHkgY29tZXNcbiAgICAvLyBiYWNrIGluIHRoZSBIVFRQIHJlc3BvbnNlIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIENvbm5lY3RvciBBUEkgKHRoZXJlIGlzXG4gICAgLy8gbm8gYHNlcnZpY2VVcmxgIHRvIGNhbGwgYmFjayB0bykuIFRoaXMgaXMgd2hhdCBsZXRzIHRoZSBpbi1yZXBvIHByZXZpZXdcbiAgICAvLyBjaGF0IGFuZCB0aGUgQm90IEZyYW1ld29yayBFbXVsYXRvciBkcml2ZSB0aGUgc2FtZSByb3V0ZSBUZWFtcyB1c2VzLlxuICAgIGlmIChjb25maWcuYWxsb3dVbmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIC8vIEFjY2VwdCBib3RoIGVudmVsb3BlczogYSBiYXJlIGFjdGl2aXR5ICh3aGF0IEJvdCBTZXJ2aWNlIGFuZCB0aGVcbiAgICAgIC8vIGVtdWxhdG9yIFBPU1QpIGFuZCB0aGUgYHsgYWN0aXZpdHksIGFnZW50SWQgfWAgcmVxdWVzdCBzaGFwZSB0aGVcbiAgICAgIC8vIGAvYWN0aXZpdHlgIHJvdXRlIHRha2VzLCBzbyBhIGxvY2FsIGNsaWVudCBjYW4gc3RpbGwgY2hvb3NlIGFuIGFnZW50LlxuICAgICAgY29uc3QgYm9keSA9XG4gICAgICAgIG9iamVjdC5pc1JlY29yZChyZXEuYm9keSkgJiYgb2JqZWN0LmlzUmVjb3JkKHJlcS5ib2R5LmFjdGl2aXR5KVxuICAgICAgICAgID8gcmVxLmJvZHlcbiAgICAgICAgICA6IHsgYWN0aXZpdHk6IHJlcS5ib2R5IH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVUdXJuKGJvZHkpO1xuICAgICAgaWYgKCFyZXN1bHQub2spIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQuc3RhdHVzKS5qc29uKHsgZXJyb3I6IHJlc3VsdC5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXMuanNvbihyZXN1bHQuZGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcuYXBwSWQgfHwgIWNvbmZpZy5hcHBQYXNzd29yZCkge1xuICAgICAgcmVzLnN0YXR1cyg1MDMpLmpzb24oe1xuICAgICAgICBlcnJvcjpcbiAgICAgICAgICBcInRlYW1zOiBtZXNzYWdpbmcgZW5kcG9pbnQgaXMgbm90IGNvbmZpZ3VyZWQgLSBzZXQgYXBwSWQvYXBwUGFzc3dvcmQgXCIgK1xuICAgICAgICAgIFwiKFRFQU1TX0FQUF9JRCAvIFRFQU1TX0FQUF9QQVNTV09SRCkgZnJvbSB0aGUgQXp1cmUgQm90IHJlZ2lzdHJhdGlvblwiLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXV0aG9yaXphdGlvbiA9IHJlYWRIZWFkZXIocmVxLmhlYWRlcnMsIFwiYXV0aG9yaXphdGlvblwiKTtcbiAgICBsZXQgdmVyaWZpZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZlcmlmaWVkID0gYXdhaXQgdmVyaWZ5Qm90VG9rZW4oYXV0aG9yaXphdGlvbiwge1xuICAgICAgICBhcHBJZDogY29uZmlnLmFwcElkLFxuICAgICAgICAuLi4oY29uZmlnLmFwcFRlbmFudElkID8geyBhcHBUZW5hbnRJZDogY29uZmlnLmFwcFRlbmFudElkIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIERlbGliZXJhdGVseSB0ZXJzZTogYSBjYWxsZXIgZmFpbGluZyBhdXRoZW50aWNhdGlvbiBsZWFybnMgb25seSB0aGF0IGl0XG4gICAgICAvLyBmYWlsZWQsIHdoaWxlIHRoZSByZWFzb24gZ29lcyB0byB0aGUgbG9ncy5cbiAgICAgIGxvZ2dlci53YXJuKFwicmVqZWN0ZWQgYW4gdW5hdXRoZW50aWNhdGVkIHJlcXVlc3RcIiwgeyBlcnJvcjogZXJyb3IuZXJyb3JNZXNzYWdlKGVycikgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMSkuanNvbih7IGVycm9yOiBcInVuYXV0aG9yaXplZFwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IHNoYXJlZEFjdGl2aXR5LmFjdGl2aXR5U2NoZW1hLnNhZmVQYXJzZShyZXEuYm9keSk7XG4gICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogcGFyc2VkLmVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluYm91bmQgPSBwYXJzZWQuZGF0YTtcblxuICAgIGNvbnN0IHNlcnZpY2VVcmwgPSByZXNvbHZlU2VydmljZVVybChpbmJvdW5kLCB2ZXJpZmllZC5zZXJ2aWNlVXJsKTtcbiAgICBpZiAoIXNlcnZpY2VVcmwpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwicmVqZWN0ZWQgYW4gYWN0aXZpdHkgd2l0aCBubyB1c2FibGUgc2VydmljZVVybFwiLCB7XG4gICAgICAgIHR5cGU6IGluYm91bmQudHlwZSxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDApLmpzb24oeyBlcnJvcjogXCJhY3Rpdml0eSBjYXJyaWVkIG5vIGFjY2VwdGFibGUgc2VydmljZVVybFwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFnZW50ID0gcmVzb2x2ZUNhcmRBZ2VudCh0aGlzLmNvbnRleHQ/LmdldFBsdWdpbnMoKSwgY29uZmlnLmFnZW50UGx1Z2luKTtcbiAgICBpZiAoIWFnZW50KSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXCJubyBhZ2VudCBhdmFpbGFibGUgdG8gYW5zd2VyIGEgVGVhbXMgdHVyblwiLCB7XG4gICAgICAgIGFnZW50UGx1Z2luOiBjb25maWcuYWdlbnRQbHVnaW4sXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNTAzKS5qc29uKHsgZXJyb3I6IFwibm8gYWdlbnQgYXZhaWxhYmxlXCIgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQWNrbm93bGVkZ2UgRklSU1QuIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhpcyBwb2ludCBpcyBvdXQtb2YtYmFuZCB3b3JrIHdob3NlXG4gICAgLy8gcmVzdWx0IHJlYWNoZXMgdGhlIHVzZXIgdGhyb3VnaCB0aGUgQ29ubmVjdG9yIEFQSSwgbm90IHRoaXMgcmVzcG9uc2UuXG4gICAgcmVzLnN0YXR1cygyMDApLmpzb24oe30pO1xuXG4gICAgaWYgKCFwcm9tcHRPZihpbmJvdW5kKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY3JlYXRlUmVxdWVzdENvbnRleHQgPSByZXNvbHZlQ2FyZENvbnRleHRGYWN0b3J5KFxuICAgICAgdGhpcy5jb250ZXh0Py5nZXRQbHVnaW5zKCksXG4gICAgICBjb25maWcuYWdlbnRQbHVnaW4sXG4gICAgKTtcblxuICAgIHZvaWQgZGVsaXZlclR1cm4oe1xuICAgICAgYWdlbnQsXG4gICAgICBhY3Rpdml0eTogaW5ib3VuZCxcbiAgICAgIHNlcnZpY2VVcmwsXG4gICAgICAuLi4oY3JlYXRlUmVxdWVzdENvbnRleHQgPyB7IGNyZWF0ZVJlcXVlc3RDb250ZXh0IH0gOiB7fSksXG4gICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICBhcHBJZDogY29uZmlnLmFwcElkLFxuICAgICAgICBhcHBQYXNzd29yZDogY29uZmlnLmFwcFBhc3N3b3JkLFxuICAgICAgICAuLi4oY29uZmlnLmFwcFRlbmFudElkID8geyBhcHBUZW5hbnRJZDogY29uZmlnLmFwcFRlbmFudElkIH0gOiB7fSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENvbXBpbGUgYSBjYXJkLCB2YWxpZGF0aW5nIHRoZSByZXF1ZXN0IGJvZHkgYWdhaW5zdCB0aGUgc3BlYyBzY2hlbWEuICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUJ1aWxkKGJvZHk6IHVua25vd24pOiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdDxjYXJkLkNhcmRSZXN1bHQ+PiB7XG4gICAgY29uc3QgcGFyc2VkID0gY2FyZC5jYXJkU3BlY1NjaGVtYS5zYWZlUGFyc2UoYm9keSk7XG4gICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBzdGF0dXM6IDQwMCwgbWVzc2FnZTogcGFyc2VkLmVycm9yLm1lc3NhZ2UgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShhc3luYyAoc2lnbmFsKSA9PiBidWlsZENhcmQocGFyc2VkLmRhdGEsIHNpZ25hbCksIFRFQU1TX0JVSUxEX1NFVFRJTkdTKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gb25lIGNvbnZlcnNhdGlvbiB0dXJuOiB2YWxpZGF0ZSB0aGUgaW5ib3VuZCBhY3Rpdml0eSwgcmVzb2x2ZSB0aGUgYWdlbnRcbiAgICogZnJvbSB0aGUgc2libGluZyBhZ2VudCBwbHVnaW4sIGFuZCBhbnN3ZXIgd2l0aCBjYXJkLWNhcnJ5aW5nIGFjdGl2aXRpZXMuXG4gICAqXG4gICAqIFJlc29sdXRpb24gZmFpbHVyZXMgYXJlIHJlcG9ydGVkIGRpc3RpbmN0bHkgYmVjYXVzZSB0aGV5IGhhdmUgZGlmZmVyZW50XG4gICAqIGZpeGVzOiA1MDMgd2hlbiBubyBhZ2VudCBwbHVnaW4gaXMgbW91bnRlZCBhdCBhbGwgKGEgd2lyaW5nIHByb2JsZW0pLCA0MDRcbiAgICogd2hlbiB0aGUgY2FsbGVyIG5hbWVkIGFuIGBhZ2VudElkYCB0aGF0IGlzIG5vdCByZWdpc3RlcmVkIChhIHJlcXVlc3RcbiAgICogcHJvYmxlbSkuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVUdXJuKFxuICAgIGJvZHk6IHVua25vd24sXG4gICk6IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0PHNoYXJlZEFjdGl2aXR5LkFjdGl2aXR5UmVzcG9uc2U+PiB7XG4gICAgY29uc3QgcGFyc2VkID0gc2hhcmVkQWN0aXZpdHkuYWN0aXZpdHlSZXF1ZXN0U2NoZW1hLnNhZmVQYXJzZShib2R5KTtcbiAgICBpZiAoIXBhcnNlZC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4geyBvazogZmFsc2UsIHN0YXR1czogNDAwLCBtZXNzYWdlOiBwYXJzZWQuZXJyb3IubWVzc2FnZSB9O1xuICAgIH1cbiAgICBjb25zdCB7IGFjdGl2aXR5LCBhZ2VudElkIH0gPSBwYXJzZWQuZGF0YTtcbiAgICBjb25zdCB7IGNvbmZpZyB9ID0gZ2V0VGVhbXNSdW50aW1lKHRoaXMuY29uZmlnKTtcbiAgICBjb25zdCBhZ2VudCA9IHJlc29sdmVDYXJkQWdlbnQodGhpcy5jb250ZXh0Py5nZXRQbHVnaW5zKCksIGNvbmZpZy5hZ2VudFBsdWdpbiwgYWdlbnRJZCk7XG4gICAgaWYgKCFhZ2VudCkge1xuICAgICAgcmV0dXJuIGFnZW50SWRcbiAgICAgICAgPyB7IG9rOiBmYWxzZSwgc3RhdHVzOiA0MDQsIG1lc3NhZ2U6IGB0ZWFtczogdW5rbm93biBhZ2VudCAnJHthZ2VudElkfSdgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXM6IDUwMyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGB0ZWFtczogbm8gYWdlbnQgYXZhaWxhYmxlIC0gaXMgdGhlICcke2NvbmZpZy5hZ2VudFBsdWdpbn0nIHBsdWdpbiByZWdpc3RlcmVkP2AsXG4gICAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgY3JlYXRlUmVxdWVzdENvbnRleHQgPSByZXNvbHZlQ2FyZENvbnRleHRGYWN0b3J5KFxuICAgICAgdGhpcy5jb250ZXh0Py5nZXRQbHVnaW5zKCksXG4gICAgICBjb25maWcuYWdlbnRQbHVnaW4sXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKGFzeW5jIChzaWduYWwpID0+IHtcbiAgICAgIGNvbnN0IGFjdGl2aXRpZXMgPSBhd2FpdCBydW5DYXJkVHVybihhZ2VudCwgYWN0aXZpdHksIHtcbiAgICAgICAgLi4uKGNyZWF0ZVJlcXVlc3RDb250ZXh0ID8geyBjcmVhdGVSZXF1ZXN0Q29udGV4dCB9IDoge30pLFxuICAgICAgICAuLi4oc2lnbmFsID8geyBzaWduYWwgfSA6IHt9KSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgYWN0aXZpdGllcyB9O1xuICAgIH0sIFRFQU1TX1RVUk5fU0VUVElOR1MpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBpbGUgdGhlbiBwb3N0IGEgY2FyZCwgdmFsaWRhdGluZyB0aGUgcmVxdWVzdCBib2R5IGFnYWluc3QgdGhlIHNwZWNcbiAgICogc2NoZW1hLiBUaGUgY29tcGlsZSBpcyBmb2xkZWQgSU5UTyB0aGUgZXhlY3V0ZWQgY2FsbGJhY2sgc28gYSB0aHJvdyBmcm9tXG4gICAqIGVpdGhlciBoYWxmIChhIGJ1aWxkIGZhaWx1cmUsIG9yIGBwb3N0Q2FyZGAgcmVmdXNpbmcgYmVjYXVzZSBubyB3ZWJob29rIGlzXG4gICAqIGNvbmZpZ3VyZWQpIGNvbWVzIGJhY2sgYXMgYSBmYWlsZWQge0BsaW5rIEV4ZWN1dGlvblJlc3VsdH0gdGhlIHJvdXRlIGNhblxuICAgKiBhbnN3ZXIgd2l0aCwgcmF0aGVyIHRoYW4gZXNjYXBpbmcgdGhlIGhhbmRsZXIgYXMgYW4gdW5oYW5kbGVkIHJlamVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZVBvc3QoYm9keTogdW5rbm93bik6IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0PHZvaWQ+PiB7XG4gICAgY29uc3QgcGFyc2VkID0gY2FyZC5jYXJkU3BlY1NjaGVtYS5zYWZlUGFyc2UoYm9keSk7XG4gICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBzdGF0dXM6IDQwMCwgbWVzc2FnZTogcGFyc2VkLmVycm9yLm1lc3NhZ2UgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShhc3luYyAoc2lnbmFsKSA9PiB7XG4gICAgICBjb25zdCBidWlsdCA9IGF3YWl0IGJ1aWxkQ2FyZChwYXJzZWQuZGF0YSwgc2lnbmFsKTtcbiAgICAgIGF3YWl0IHBvc3RDYXJkKGJ1aWx0LmNhcmQsIHNpZ25hbCk7XG4gICAgfSwgVEVBTVNfUE9TVF9TRVRUSU5HUyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgVGVhbXMgcGx1Z2luLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgY3JlYXRlQXBwLCBzZXJ2ZXIgfSBmcm9tIFwiQGRhdGFicmlja3MvYXBwa2l0XCI7XG4gKiBpbXBvcnQgeyBwbHVnaW4gYXMgdGVhbXNQbHVnaW4gfSBmcm9tIFwiQGRieC10b29scy90ZWFtc1wiO1xuICpcbiAqIGF3YWl0IGNyZWF0ZUFwcCh7XG4gKiAgIHBsdWdpbnM6IFtzZXJ2ZXIoKSwgdGVhbXNQbHVnaW4udGVhbXMoKV0sXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgdGVhbXMgPSB0b1BsdWdpbihUZWFtc1BsdWdpbik7XG5cbi8qKlxuICogUmVhZCBvbmUgaGVhZGVyIHZhbHVlLCBub3JtYWxpemluZyBOb2RlJ3MgYHN0cmluZyB8IHN0cmluZ1tdYCBzaGFwZS5cbiAqXG4gKiBFeHByZXNzIGxvd2VyLWNhc2VzIGluY29taW5nIGhlYWRlciBuYW1lcywgYnV0IHRoaXMgaXMgd3JpdHRlbiBhZ2FpbnN0IGFcbiAqIHN0cnVjdHVyYWwgYGhlYWRlcnNgIHJlY29yZCAoc28gdGhlIGhhbmRsZXIgc3RheXMgdGVzdGFibGUgd2l0aG91dCBhbiBFeHByZXNzXG4gKiByZXF1ZXN0KSwgaGVuY2UgdGhlIGV4cGxpY2l0IGNhc2UtaW5zZW5zaXRpdmUgbG9va3VwLlxuICovXG5mdW5jdGlvbiByZWFkSGVhZGVyKGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBkaXJlY3QgPSBoZWFkZXJzW25hbWVdID8/IGhlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgY29uc3QgdmFsdWUgPSBBcnJheS5pc0FycmF5KGRpcmVjdCkgPyBkaXJlY3RbMF0gOiBkaXJlY3Q7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyAoc3RyaW5nLnRyaW1Ub051bGwodmFsdWUpID8/IHVuZGVmaW5lZCkgOiB1bmRlZmluZWQ7XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@databricks/appkit": "^0.43.0",
|
|
29
|
-
"@dbx-tools/core": "0.6.
|
|
30
|
-
"@dbx-tools/shared-core": "0.6.
|
|
31
|
-
"@dbx-tools/shared-teams": "0.6.
|
|
29
|
+
"@dbx-tools/core": "0.6.90",
|
|
30
|
+
"@dbx-tools/shared-core": "0.6.90",
|
|
31
|
+
"@dbx-tools/shared-teams": "0.6.90",
|
|
32
32
|
"@mastra/core": "^1.47.0",
|
|
33
33
|
"jose": "^6.2.3",
|
|
34
34
|
"zod": "4.3.6"
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"./package.json": "./package.json"
|
|
48
48
|
}
|
|
49
49
|
},
|
|
50
|
-
"version": "0.6.
|
|
50
|
+
"version": "0.6.90",
|
|
51
51
|
"types": "./lib/index.d.ts",
|
|
52
52
|
"type": "module",
|
|
53
53
|
"exports": {
|
package/src/config.ts
CHANGED
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
*/
|
|
30
30
|
|
|
31
31
|
import { ValidationError, type BasePluginConfig } from "@databricks/appkit";
|
|
32
|
-
import { config as
|
|
32
|
+
import { config as coreConfig } from "@dbx-tools/core";
|
|
33
33
|
import { object } from "@dbx-tools/shared-core";
|
|
34
34
|
import { card } from "@dbx-tools/shared-teams";
|
|
35
35
|
import type { JSONSchema7 } from "json-schema";
|
|
@@ -199,12 +199,12 @@ export const TEAMS_CONFIG_SCHEMA: JSONSchema7 = {
|
|
|
199
199
|
*/
|
|
200
200
|
export function resolveTeamsConfig(overrides?: TeamsPluginConfig): ResolvedTeamsConfig {
|
|
201
201
|
const cardVersion =
|
|
202
|
-
|
|
202
|
+
coreConfig.string(overrides?.cardVersion, CARD_VERSION_ENV, coreConfig.ENV_ONLY) ??
|
|
203
203
|
card.ADAPTIVE_CARD_VERSION;
|
|
204
|
-
const webhookUrl =
|
|
204
|
+
const webhookUrl = coreConfig.string(
|
|
205
205
|
overrides?.webhookUrl,
|
|
206
206
|
WEBHOOK_URL_ENV,
|
|
207
|
-
|
|
207
|
+
coreConfig.ENV_ONLY,
|
|
208
208
|
);
|
|
209
209
|
if (webhookUrl !== undefined && !isHttpsUrl(webhookUrl)) {
|
|
210
210
|
throw ValidationError.invalidValue(
|
|
@@ -214,15 +214,15 @@ export function resolveTeamsConfig(overrides?: TeamsPluginConfig): ResolvedTeams
|
|
|
214
214
|
);
|
|
215
215
|
}
|
|
216
216
|
const agentPlugin =
|
|
217
|
-
|
|
217
|
+
coreConfig.string(overrides?.agentPlugin, AGENT_PLUGIN_ENV, coreConfig.ENV_ONLY) ??
|
|
218
218
|
DEFAULT_AGENT_PLUGIN;
|
|
219
219
|
// Two independent conditions must BOTH hold: the operator asked for it, and
|
|
220
220
|
// this is a development build. Gating on `NODE_ENV` as well means a stray
|
|
221
221
|
// variable in a production environment cannot silently expose the endpoint.
|
|
222
|
-
const requested =
|
|
222
|
+
const requested = coreConfig.boolean(
|
|
223
223
|
overrides?.allowUnauthenticated,
|
|
224
224
|
ALLOW_UNAUTHENTICATED_ENV,
|
|
225
|
-
|
|
225
|
+
coreConfig.ENV_ONLY,
|
|
226
226
|
);
|
|
227
227
|
const allowUnauthenticated = requested === true && process.env.NODE_ENV === "development";
|
|
228
228
|
return {
|
|
@@ -232,15 +232,15 @@ export function resolveTeamsConfig(overrides?: TeamsPluginConfig): ResolvedTeams
|
|
|
232
232
|
...object.optional("webhookUrl", webhookUrl),
|
|
233
233
|
...object.optional(
|
|
234
234
|
"appId",
|
|
235
|
-
|
|
235
|
+
coreConfig.string(overrides?.appId, APP_ID_ENVS, coreConfig.ENV_ONLY),
|
|
236
236
|
),
|
|
237
237
|
...object.optional(
|
|
238
238
|
"appPassword",
|
|
239
|
-
|
|
239
|
+
coreConfig.string(overrides?.appPassword, APP_PASSWORD_ENVS, coreConfig.ENV_ONLY),
|
|
240
240
|
),
|
|
241
241
|
...object.optional(
|
|
242
242
|
"appTenantId",
|
|
243
|
-
|
|
243
|
+
coreConfig.string(overrides?.appTenantId, APP_TENANT_ENVS, coreConfig.ENV_ONLY),
|
|
244
244
|
),
|
|
245
245
|
};
|
|
246
246
|
}
|
package/src/connector.ts
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
*/
|
|
24
24
|
|
|
25
25
|
import { log } from "@dbx-tools/shared-core";
|
|
26
|
-
import type { activity as
|
|
26
|
+
import type { activity as sharedActivity } from "@dbx-tools/shared-teams";
|
|
27
27
|
|
|
28
28
|
const logger = log.logger("teams:connector");
|
|
29
29
|
|
|
@@ -62,7 +62,7 @@ const activitiesUrl = (target: ConnectorTarget): string => {
|
|
|
62
62
|
* sees in the channel.
|
|
63
63
|
*/
|
|
64
64
|
export const sendActivity = async (
|
|
65
|
-
activity:
|
|
65
|
+
activity: sharedActivity.Activity,
|
|
66
66
|
target: ConnectorTarget,
|
|
67
67
|
): Promise<string | undefined> => {
|
|
68
68
|
const response = await fetch(activitiesUrl(target), {
|
package/src/conversation.ts
CHANGED
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
*/
|
|
39
39
|
|
|
40
40
|
import { error, hash, json, log, object, string } from "@dbx-tools/shared-core";
|
|
41
|
-
import { activity as
|
|
41
|
+
import { activity as sharedActivity, card } from "@dbx-tools/shared-teams";
|
|
42
42
|
import { buildAdaptiveCard } from "./builder.ts";
|
|
43
43
|
|
|
44
44
|
const logger = log.logger("teams:conversation");
|
|
@@ -125,7 +125,7 @@ const toolCardSpec = (result: AgentResult): card.CardSpec | null => {
|
|
|
125
125
|
const JSON_PROMPT_INJECTION = "system" as const;
|
|
126
126
|
|
|
127
127
|
/** The bot's identity on outbound activities when the caller names none. */
|
|
128
|
-
export const BOT_ACCOUNT:
|
|
128
|
+
export const BOT_ACCOUNT: sharedActivity.ChannelAccount = {
|
|
129
129
|
id: "dbx-tools-teams-bot",
|
|
130
130
|
name: "Databricks Agent",
|
|
131
131
|
};
|
|
@@ -269,7 +269,7 @@ export interface CardTurnOptions {
|
|
|
269
269
|
/** Cancels the agent call with the request. */
|
|
270
270
|
signal?: AbortSignal;
|
|
271
271
|
/** Overrides the bot identity stamped on the reply. */
|
|
272
|
-
bot?:
|
|
272
|
+
bot?: sharedActivity.ChannelAccount;
|
|
273
273
|
/**
|
|
274
274
|
* Builds the Mastra `RequestContext` for the turn, from
|
|
275
275
|
* {@link resolveCardContextFactory}. Omitted, the turn still answers, but
|
|
@@ -311,7 +311,7 @@ export const resolveCardContextFactory = (
|
|
|
311
311
|
* payload is only an attachment). Those are not errors - they simply produce no
|
|
312
312
|
* reply - so this returns `null` rather than throwing.
|
|
313
313
|
*/
|
|
314
|
-
export const promptOf = (inbound:
|
|
314
|
+
export const promptOf = (inbound: sharedActivity.Activity): string | null =>
|
|
315
315
|
inbound.type === "message" ? string.trimToNull(inbound.text ?? "") : null;
|
|
316
316
|
|
|
317
317
|
/**
|
|
@@ -322,10 +322,10 @@ export const promptOf = (inbound: activityContract.Activity): string | null =>
|
|
|
322
322
|
* asserting the envelope, both need the same construction the turn uses.
|
|
323
323
|
*/
|
|
324
324
|
export const toReplyActivity = (
|
|
325
|
-
inbound:
|
|
325
|
+
inbound: sharedActivity.Activity,
|
|
326
326
|
cards: card.AdaptiveCard[],
|
|
327
|
-
options: { bot?:
|
|
328
|
-
):
|
|
327
|
+
options: { bot?: sharedActivity.ChannelAccount; text?: string } = {},
|
|
328
|
+
): sharedActivity.Activity => ({
|
|
329
329
|
type: "message",
|
|
330
330
|
id: hash.id(),
|
|
331
331
|
timestamp: new Date().toISOString(),
|
|
@@ -333,7 +333,7 @@ export const toReplyActivity = (
|
|
|
333
333
|
...(inbound.from ? { recipient: inbound.from } : {}),
|
|
334
334
|
...(inbound.conversation ? { conversation: inbound.conversation } : {}),
|
|
335
335
|
...(options.text ? { text: options.text } : {}),
|
|
336
|
-
attachments: cards.map((document) =>
|
|
336
|
+
attachments: cards.map((document) => sharedActivity.toCardAttachment(document)),
|
|
337
337
|
});
|
|
338
338
|
|
|
339
339
|
/**
|
|
@@ -594,9 +594,9 @@ const formatAsCard = async (
|
|
|
594
594
|
*/
|
|
595
595
|
export const runCardTurn = async (
|
|
596
596
|
agent: CardAgentLike,
|
|
597
|
-
inbound:
|
|
597
|
+
inbound: sharedActivity.Activity,
|
|
598
598
|
options: CardTurnOptions = {},
|
|
599
|
-
): Promise<
|
|
599
|
+
): Promise<sharedActivity.Activity[]> => {
|
|
600
600
|
const prompt = promptOf(inbound);
|
|
601
601
|
if (!prompt) return [];
|
|
602
602
|
|
package/src/messaging.ts
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
*/
|
|
26
26
|
|
|
27
27
|
import { error, log } from "@dbx-tools/shared-core";
|
|
28
|
-
import { activity as
|
|
28
|
+
import { activity as sharedActivity } from "@dbx-tools/shared-teams";
|
|
29
29
|
import { connectorToken, isAllowedServiceUrl } from "./auth.ts";
|
|
30
30
|
import { sendActivity, sendTyping } from "./connector.ts";
|
|
31
31
|
import { runCardTurn, type CardAgentLike, type CardContextFactory } from "./conversation.ts";
|
|
@@ -56,7 +56,7 @@ export interface DeliverTurnOptions {
|
|
|
56
56
|
/** The agent that composes the card. */
|
|
57
57
|
agent: CardAgentLike;
|
|
58
58
|
/** The validated inbound activity. */
|
|
59
|
-
activity:
|
|
59
|
+
activity: sharedActivity.Activity;
|
|
60
60
|
/** Bot credentials used to fetch the outbound Connector token. */
|
|
61
61
|
credentials: BotCredentials;
|
|
62
62
|
/**
|
|
@@ -82,7 +82,7 @@ export interface DeliverTurnOptions {
|
|
|
82
82
|
* authenticated is sent there.
|
|
83
83
|
*/
|
|
84
84
|
export const resolveServiceUrl = (
|
|
85
|
-
activity:
|
|
85
|
+
activity: sharedActivity.Activity,
|
|
86
86
|
tokenServiceUrl?: string,
|
|
87
87
|
): string | null => {
|
|
88
88
|
const raw = (activity as { serviceUrl?: unknown }).serviceUrl;
|
package/src/plugin.ts
CHANGED
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
type ToolRegistry,
|
|
51
51
|
} from "@databricks/appkit/beta";
|
|
52
52
|
import { error, log, object, string } from "@dbx-tools/shared-core";
|
|
53
|
-
import { activity as
|
|
53
|
+
import { activity as sharedActivity, card } from "@dbx-tools/shared-teams";
|
|
54
54
|
import { verifyBotToken } from "./auth.ts";
|
|
55
55
|
import { TEAMS_CONFIG_SCHEMA, type TeamsPluginConfig } from "./config.ts";
|
|
56
56
|
import {
|
|
@@ -357,7 +357,7 @@ export class TeamsPlugin extends Plugin<TeamsPluginConfig> implements ToolProvid
|
|
|
357
357
|
return;
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
const parsed =
|
|
360
|
+
const parsed = sharedActivity.activitySchema.safeParse(req.body);
|
|
361
361
|
if (!parsed.success) {
|
|
362
362
|
res.status(400).json({ error: parsed.error.message });
|
|
363
363
|
return;
|
|
@@ -426,8 +426,8 @@ export class TeamsPlugin extends Plugin<TeamsPluginConfig> implements ToolProvid
|
|
|
426
426
|
*/
|
|
427
427
|
private async executeTurn(
|
|
428
428
|
body: unknown,
|
|
429
|
-
): Promise<ExecutionResult<
|
|
430
|
-
const parsed =
|
|
429
|
+
): Promise<ExecutionResult<sharedActivity.ActivityResponse>> {
|
|
430
|
+
const parsed = sharedActivity.activityRequestSchema.safeParse(body);
|
|
431
431
|
if (!parsed.success) {
|
|
432
432
|
return { ok: false, status: 400, message: parsed.error.message };
|
|
433
433
|
}
|