@pipeline-builder/api-core 3.4.113 → 3.4.115
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.
|
@@ -47,6 +47,19 @@ export declare function fetchParentOrgId(orgId: string, opts: OrgHierarchyHttpOp
|
|
|
47
47
|
* `string[]`.
|
|
48
48
|
*/
|
|
49
49
|
export declare function fetchOrgDescendants(orgId: string, opts: OrgHierarchyHttpOptions): Promise<string[] | undefined>;
|
|
50
|
+
/**
|
|
51
|
+
* Batch-resolve org id → display NAME via platform's `POST /organization/names`.
|
|
52
|
+
* Returns a lowercased `{ [orgId]: name }` map — ids the platform doesn't know
|
|
53
|
+
* are simply absent (caller falls back to the raw id).
|
|
54
|
+
*
|
|
55
|
+
* Best-effort by design: a non-2xx response (e.g. the caller isn't a service
|
|
56
|
+
* principal) or a malformed body yields `{}`, and it throws ONLY on a transport
|
|
57
|
+
* failure (connection/timeout) — matching the fail-soft policy of the other
|
|
58
|
+
* lookups here so a name-enrichment read never fails the caller's request. The
|
|
59
|
+
* response is validated entry-by-entry (only string→string pairs survive), so a
|
|
60
|
+
* malformed payload can't smuggle a non-string into the returned map.
|
|
61
|
+
*/
|
|
62
|
+
export declare function fetchOrgNames(orgIds: string[], opts: OrgHierarchyHttpOptions): Promise<Record<string, string>>;
|
|
50
63
|
/**
|
|
51
64
|
* Check whether `userId` is an ACTIVE member of `orgId` via platform's
|
|
52
65
|
* `GET /organization/:id/members/:userId/exists`. Returns the boolean the
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* level, degrade-to-self vs. return-undefined). A non-2xx response is treated
|
|
18
18
|
* as "no data" (returns undefined), matching what the callers previously did.
|
|
19
19
|
*/
|
|
20
|
-
import { getServiceAuthHeader } from '../middleware/auth.js';
|
|
20
|
+
import { getServiceAuthHeader, SYSTEM_ORG_ID } from '../middleware/auth.js';
|
|
21
21
|
import { InternalHttpClient } from '../services/http-client.js';
|
|
22
22
|
function buildRequest(orgId, suffix, opts) {
|
|
23
23
|
const client = new InternalHttpClient(opts.service);
|
|
@@ -74,6 +74,45 @@ export async function fetchOrgDescendants(orgId, opts) {
|
|
|
74
74
|
// Only meaningful when the (validated) subtree is larger than the org itself.
|
|
75
75
|
return orgIds.length > 1 ? orgIds : undefined;
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Batch-resolve org id → display NAME via platform's `POST /organization/names`.
|
|
79
|
+
* Returns a lowercased `{ [orgId]: name }` map — ids the platform doesn't know
|
|
80
|
+
* are simply absent (caller falls back to the raw id).
|
|
81
|
+
*
|
|
82
|
+
* Best-effort by design: a non-2xx response (e.g. the caller isn't a service
|
|
83
|
+
* principal) or a malformed body yields `{}`, and it throws ONLY on a transport
|
|
84
|
+
* failure (connection/timeout) — matching the fail-soft policy of the other
|
|
85
|
+
* lookups here so a name-enrichment read never fails the caller's request. The
|
|
86
|
+
* response is validated entry-by-entry (only string→string pairs survive), so a
|
|
87
|
+
* malformed payload can't smuggle a non-string into the returned map.
|
|
88
|
+
*/
|
|
89
|
+
export async function fetchOrgNames(orgIds, opts) {
|
|
90
|
+
if (orgIds.length === 0)
|
|
91
|
+
return {};
|
|
92
|
+
const client = new InternalHttpClient(opts.service);
|
|
93
|
+
const headers = {
|
|
94
|
+
Authorization: getServiceAuthHeader({
|
|
95
|
+
serviceName: opts.serviceName,
|
|
96
|
+
// A cross-org registry read, not a tenant-scoped op — default to the system
|
|
97
|
+
// org context when the caller doesn't pin one.
|
|
98
|
+
orgId: opts.authOrgId ?? SYSTEM_ORG_ID,
|
|
99
|
+
role: opts.role ?? 'member',
|
|
100
|
+
}),
|
|
101
|
+
...opts.headers,
|
|
102
|
+
};
|
|
103
|
+
const res = await client.post('/organization/names', { orgIds }, { headers, timeout: opts.timeout });
|
|
104
|
+
if (res.statusCode >= 400)
|
|
105
|
+
return {};
|
|
106
|
+
const names = res.body?.data?.names;
|
|
107
|
+
if (!names || typeof names !== 'object')
|
|
108
|
+
return {};
|
|
109
|
+
const out = {};
|
|
110
|
+
for (const [id, name] of Object.entries(names)) {
|
|
111
|
+
if (typeof name === 'string')
|
|
112
|
+
out[id.toLowerCase()] = name;
|
|
113
|
+
}
|
|
114
|
+
return out;
|
|
115
|
+
}
|
|
77
116
|
/**
|
|
78
117
|
* Check whether `userId` is an ACTIVE member of `orgId` via platform's
|
|
79
118
|
* `GET /organization/:id/members/:userId/exists`. Returns the boolean the
|
|
@@ -102,4 +141,4 @@ export async function fetchOrgMembership(orgId, userId, opts) {
|
|
|
102
141
|
const isMember = res.body?.data?.isMember;
|
|
103
142
|
return typeof isMember === 'boolean' ? isMember : undefined;
|
|
104
143
|
}
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWhpZXJhcmNoeS1odHRwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvb3JnLWhpZXJhcmNoeS1odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQStCaEUsU0FBUyxZQUFZLENBQ25CLEtBQWEsRUFDYixNQUFnQyxFQUNoQyxJQUE2QjtJQUU3QixNQUFNLE1BQU0sR0FBRyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRCxNQUFNLElBQUksR0FBRyxpQkFBaUIsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxFQUFFLENBQUM7SUFDcEUsTUFBTSxPQUFPLEdBQTJCO1FBQ3RDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQztZQUNsQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSztZQUM5QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxRQUFRO1NBQzVCLENBQUM7UUFDRixHQUFHLElBQUksQ0FBQyxPQUFPO0tBQ2hCLENBQUM7SUFDRixPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNuQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxLQUFhLEVBQUUsSUFBNkI7SUFDakYsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFD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QUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBPcmcg4oaSIHRlYW0gaGllcmFyY2h5IGxvb2t1cHMgb3ZlciBIVFRQIGFnYWluc3QgdGhlIHBsYXRmb3JtIHNlcnZpY2UuXG4gKlxuICogVGhlIE1vbmdvb3NlLWJhc2VkIHRyYXZlcnNhbCBpbiB7QGxpbmsgLi9vcmctaGllcmFyY2h5fSBpcyBmb3Igc2VydmljZXMgdGhhdFxuICogb3duIHRoZSBvcmcgdGFibGUgKHBsYXRmb3JtLCBxdW90YSkuIEV2ZXJ5b25lIGVsc2UgcmVhZHMgdGhlIGhpZXJhcmNoeSBvdmVyXG4gKiB0aGUgd2lyZSBmcm9tIHBsYXRmb3JtJ3MgYXV0aG9yaXRhdGl2ZSBgL29yZ2FuaXphdGlvbi86aWQvKmAgZW5kcG9pbnRzLiBUaGlzXG4gKiBtb2R1bGUgY2VudHJhbGl6ZXMgdGhlIHRyYW5zcG9ydCBmb3IgdGhvc2UgcmVhZHMg4oCUIFVSTCBjb25zdHJ1Y3Rpb24sIHRoZVxuICogc2lnbmVkIHNlcnZpY2UtdG9rZW4gYXV0aCBoZWFkZXIsIGFuZCB0aW1lb3V0K3JldHJ5IHZpYSB0aGUgc2hhcmVkXG4gKiB7QGxpbmsgSW50ZXJuYWxIdHRwQ2xpZW50fSDigJQgc28gY29tcGxpYW5jZSwgcmVwb3J0aW5nLCBhbmQgYW55IGZ1dHVyZSBjYWxsZXJcbiAqIHNoYXJlIE9ORSBtZWNoYW5pc20gaW5zdGVhZCBvZiBlYWNoIGhhbmQtcm9sbGluZyBhIGBmZXRjaGAvY2xpZW50IHdpdGggaXRzXG4gKiBvd24gYXV0aCBhbmQgZmFpbHVyZSBzZW1hbnRpY3MuXG4gKlxuICogVGhlc2UgZnVuY3Rpb25zIGRlbGliZXJhdGVseSBkbyBOT1Qgc3dhbGxvdyB0cmFuc3BvcnQgZXJyb3JzOiBhIGNvbm5lY3Rpb25cbiAqIGZhaWx1cmUvdGltZW91dCBwcm9wYWdhdGVzIHNvIGVhY2ggY2FsbGVyIGtlZXBzIGl0cyBvd24gZmFsbGJhY2sgcG9saWN5IChsb2dcbiAqIGxldmVsLCBkZWdyYWRlLXRvLXNlbGYgdnMuIHJldHVybi11bmRlZmluZWQpLiBBIG5vbi0yeHggcmVzcG9uc2UgaXMgdHJlYXRlZFxuICogYXMgXCJubyBkYXRhXCIgKHJldHVybnMgdW5kZWZpbmVkKSwgbWF0Y2hpbmcgd2hhdCB0aGUgY2FsbGVycyBwcmV2aW91c2x5IGRpZC5cbiAqL1xuXG5pbXBvcnQgeyBnZXRTZXJ2aWNlQXV0aEhlYWRlciB9IGZyb20gJy4uL21pZGRsZXdhcmUvYXV0aC5qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbEh0dHBDbGllbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb25maWcgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuXG4vKiogT3B0aW9ucyBzaGFyZWQgYnkgdGhlIHBsYXRmb3JtIG9yZy1oaWVyYXJjaHkgSFRUUCBsb29rdXBzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdIaWVyYXJjaHlIdHRwT3B0aW9ucyB7XG4gIC8qKiBQbGF0Zm9ybSBzZXJ2aWNlIGhvc3QvcG9ydCAoKyBvcHRpb25hbCBkZWZhdWx0IHRpbWVvdXQpIGZvciB0aGUgY2xpZW50LiAqL1xuICBzZXJ2aWNlOiBTZXJ2aWNlQ29uZmlnO1xuICAvKiogU2VydmljZSBuYW1lIG1pbnRlZCBpbnRvIHRoZSBzZXJ2aWNlLWF1dGggSldUIGBzdWJgIChlLmcuICdjb21wbGlhbmNlJykuICovXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcmcgaWQgZW1iZWRkZWQgaW4gdGhlIHNpZ25lZCBzZXJ2aWNlIHRva2VuJ3Mgb3JnIGNvbnRleHQuIERlZmF1bHRzIHRvIHRoZVxuICAgKiBxdWVyaWVkIGBvcmdJZGA7IHBhc3MgYSBzeXN0ZW0gb3JnIGlkIGZvciBhIHN5c3RlbS1zY29wZWQgbG9va3VwLlxuICAgKi9cbiAgYXV0aE9yZ0lkPzogc3RyaW5nO1xuICAvKiogUm9sZSBjYXJyaWVkIGJ5IHRoZSBzZXJ2aWNlIHRva2VuIChkZWZhdWx0ICdtZW1iZXInIOKAlCBsZWFzdCBwcml2aWxlZ2UpLiAqL1xuICByb2xlPzogJ293bmVyJyB8ICdhZG1pbicgfCAnbWVtYmVyJztcbiAgLyoqIEV4dHJhIHJlcXVlc3QgaGVhZGVycyBtZXJnZWQgYWZ0ZXIgYEF1dGhvcml6YXRpb25gIChlLmcuIGB4LW9yZy1pZGApLiAqL1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFBlci1yZXF1ZXN0IHRpbWVvdXQgb3ZlcnJpZGUgaW4gbXMgKGZhbGxzIGJhY2sgdG8gdGhlIGNsaWVudCBkZWZhdWx0KS4gKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgYSBub24tMnh4IHJlc3BvbnNlIFRIUk9XUyBpbnN0ZWFkIG9mIHJlc29sdmluZyB0byBgdW5kZWZpbmVkYC5cbiAgICogRGVmYXVsdCBmYWxzZSAoYSA0eHgvNXh4IG1hcHMgdG8gYHVuZGVmaW5lZGAsIHRoZSBmYWlsLXNvZnQgcG9saWN5IHRoZVxuICAgKiBtZXNzYWdlL3JlcG9ydGluZyByb290LXJlc29sdXRpb24gY2FsbGVycyByZWx5IG9uKS4gQSBjYWxsZXIgZm9yIHdob20gYVxuICAgKiBmYWlsZWQgbG9va3VwIG11c3QgZmFpbC1DTE9TRUQg4oCUIGUuZy4gYSBjb21wbGlhbmNlIHNjYW4sIHdoZXJlIHRyZWF0aW5nIGFcbiAgICogdGVhbSBvcmcgYXMgcGFyZW50LWxlc3Mgd291bGQgc2lsZW50bHkgc2tpcCBpbmhlcml0ZWQgYmxvY2tpbmcgcnVsZXMg4oCUIHNldHNcbiAgICogdGhpcyBzbyBpdCBjYW4gZGlzdGluZ3Vpc2ggXCJyb290IG9yZ1wiIChgdW5kZWZpbmVkYCkgZnJvbSBcImxvb2t1cCBmYWlsZWRcIi5cbiAgICovXG4gIHRocm93T25IdHRwRXJyb3I/OiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBidWlsZFJlcXVlc3QoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHN1ZmZpeDogJ3BhcmVudCcgfCAnZGVzY2VuZGFudHMnLFxuICBvcHRzOiBPcmdIaWVyYXJjaHlIdHRwT3B0aW9ucyxcbik6IHsgY2xpZW50OiBJbnRlcm5hbEh0dHBDbGllbnQ7IHBhdGg6IHN0cmluZzsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9IHtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEludGVybmFsSHR0cENsaWVudChvcHRzLnNlcnZpY2UpO1xuICBjb25zdCBwYXRoID0gYC9vcmdhbml6YXRpb24vJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfS8ke3N1ZmZpeH1gO1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIEF1dGhvcml6YXRpb246IGdldFNlcnZpY2VBdXRoSGVhZGVyKHtcbiAgICAgIHNlcnZpY2VOYW1lOiBvcHRzLnNlcnZpY2VOYW1lLFxuICAgICAgb3JnSWQ6IG9wdHMuYXV0aE9yZ0lkID8/IG9yZ0lkLFxuICAgICAgcm9sZTogb3B0cy5yb2xlID8/ICdtZW1iZXInLFxuICAgIH0pLFxuICAgIC4uLm9wdHMuaGVhZGVycyxcbiAgfTtcbiAgcmV0dXJuIHsgY2xpZW50LCBwYXRoLCBoZWFkZXJzIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBvcmcncyBkaXJlY3QgcGFyZW50IGlkIHZpYSBwbGF0Zm9ybSdzXG4gKiBgR0VUIC9vcmdhbml6YXRpb24vOmlkL3BhcmVudGAuIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yIGEgcm9vdCBvcmcuIEEgbm9uLTJ4eFxuICogcmVzcG9uc2UgcmVzb2x2ZXMgdG8gYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCwgb3IgVEhST1dTIHdoZW5cbiAqIGB0aHJvd09uSHR0cEVycm9yYCBpcyBzZXQuIEFsd2F5cyB0aHJvd3Mgb24gYSB0cmFuc3BvcnQgZmFpbHVyZVxuICogKGNvbm5lY3Rpb24vdGltZW91dCkgc28gdGhlIGNhbGxlciBjYW4gYXBwbHkgaXRzIG93biBmYWxsYmFjay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUGFyZW50T3JnSWQob3JnSWQ6IHN0cmluZywgb3B0czogT3JnSGllcmFyY2h5SHR0cE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGNsaWVudCwgcGF0aCwgaGVhZGVycyB9ID0gYnVpbGRSZXF1ZXN0KG9yZ0lkLCAncGFyZW50Jywgb3B0cyk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8eyBkYXRhPzogeyBwYXJlbnRPcmdJZD86IHN0cmluZyB8IG51bGwgfSB9PihwYXRoLCB7IGhlYWRlcnMsIHRpbWVvdXQ6IG9wdHMudGltZW91dCB9KTtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDQwMCkge1xuICAgIGlmIChvcHRzLnRocm93T25IdHRwRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcGFyZW50LW9yZyBsb29rdXAgZmFpbGVkIGZvciAke29yZ0lkfTogSFRUUCAke3Jlcy5zdGF0dXNDb2RlfWApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiByZXMuYm9keT8uZGF0YT8ucGFyZW50T3JnSWQgPz8gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYFtzZWxmLCAuLi5kZXNjZW5kYW50T3JnSWRzXWAgZm9yIGFuIG9yZyB2aWEgcGxhdGZvcm0nc1xuICogYEdFVCAvb3JnYW5pemF0aW9uLzppZC9kZXNjZW5kYW50c2AuIFJldHVybnMgdGhlIGlkIGxpc3Qgb25seSB3aGVuIGl0IGlzXG4gKiBsYXJnZXIgdGhhbiB0aGUgb3JnIGl0c2VsZiAoYSByZWFsIHN1YnRyZWUpLCBlbHNlIGB1bmRlZmluZWRgOyBhbHNvXG4gKiBgdW5kZWZpbmVkYCBvbiBhIG5vbi0yeHggcmVzcG9uc2UuIFRocm93cyBvbiBhIHRyYW5zcG9ydCBmYWlsdXJlIHNvIHRoZVxuICogY2FsbGVyIGNhbiBhcHBseSBpdHMgb3duIGZhbGxiYWNrLlxuICpcbiAqIFRoaXMgaXMgYSB0cnVzdCBib3VuZGFyeTogdGhlIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBlbGVtZW50LWJ5LWVsZW1lbnQgcmF0aGVyXG4gKiB0aGFuIGNhc3Qg4oCUIGV2ZXJ5IGVudHJ5IG11c3QgYmUgYSBzdHJpbmcsIGFuZCBhbnkgbm9uLXN0cmluZyBpcyBkcm9wcGVkIOKAlCBzb1xuICogYSBtYWxmb3JtZWQgcGF5bG9hZCBjYW4gbmV2ZXIgc211Z2dsZSBhIG5vbi1zdHJpbmcgaW50byB0aGUgcmV0dXJuZWRcbiAqIGBzdHJpbmdbXWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaE9yZ0Rlc2NlbmRhbnRzKG9yZ0lkOiBzdHJpbmcsIG9wdHM6IE9yZ0hpZXJhcmNoeUh0dHBPcHRpb25zKTogUHJvbWlzZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGNsaWVudCwgcGF0aCwgaGVhZGVycyB9ID0gYnVpbGRSZXF1ZXN0KG9yZ0lkLCAnZGVzY2VuZGFudHMnLCBvcHRzKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LmdldDx7IGRhdGE/OiB7IG9yZ0lkcz86IHVua25vd24gfSB9PihwYXRoLCB7IGhlYWRlcnMsIHRpbWVvdXQ6IG9wdHMudGltZW91dCB9KTtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDQwMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgaWRzID0gcmVzLmJvZHk/LmRhdGE/Lm9yZ0lkcztcbiAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IG9yZ0lkcyA9IGlkcy5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpO1xuICAvLyBPbmx5IG1lYW5pbmdmdWwgd2hlbiB0aGUgKHZhbGlkYXRlZCkgc3VidHJlZSBpcyBsYXJnZXIgdGhhbiB0aGUgb3JnIGl0c2VsZi5cbiAgcmV0dXJuIG9yZ0lkcy5sZW5ndGggPiAxID8gb3JnSWRzIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYHVzZXJJZGAgaXMgYW4gQUNUSVZFIG1lbWJlciBvZiBgb3JnSWRgIHZpYSBwbGF0Zm9ybSdzXG4gKiBgR0VUIC9vcmdhbml6YXRpb24vOmlkL21lbWJlcnMvOnVzZXJJZC9leGlzdHNgLiBSZXR1cm5zIHRoZSBib29sZWFuIHRoZVxuICogcGxhdGZvcm0gcmVwb3J0cy5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgICjigJQgXCJjb3VsZG4ndCBkZXRlcm1pbmVcIikgb24gYSBub24tMnh4IHJlc3BvbnNlLCBhbmRcbiAqIHRocm93cyBvbmx5IG9uIGEgdHJhbnNwb3J0IGZhaWx1cmUgKGNvbm5lY3Rpb24vdGltZW91dCkg4oCUIHNvIHRoZSBjYWxsZXJcbiAqIGRpc3Rpbmd1aXNoZXMgYSBkZWZpbml0aXZlIG5vdC1hLW1lbWJlciAoYGZhbHNlYCkgZnJvbSBhbiBpbmRldGVybWluYXRlXG4gKiBsb29rdXAgKGB1bmRlZmluZWRgKSBhbmQgYXBwbGllcyBpdHMgb3duIGZhaWwtb3Blbi9jbG9zZWQgcG9saWN5LiBUaGUgYHBhdGhgXG4gKiBkaWZmZXJzIGZyb20gdGhlIHBhcmVudC9kZXNjZW5kYW50cyBzaGFwZSwgc28gdGhpcyBidWlsZHMgaXRzIG93biByZXF1ZXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hPcmdNZW1iZXJzaGlwKFxuICBvcmdJZDogc3RyaW5nLFxuICB1c2VySWQ6IHN0cmluZyxcbiAgb3B0czogT3JnSGllcmFyY2h5SHR0cE9wdGlvbnMsXG4pOiBQcm9taXNlPGJvb2xlYW4gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEludGVybmFsSHR0cENsaWVudChvcHRzLnNlcnZpY2UpO1xuICBjb25zdCBwYXRoID0gYC9vcmdhbml6YXRpb24vJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfS9tZW1iZXJzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCl9L2V4aXN0c2A7XG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgQXV0aG9yaXphdGlvbjogZ2V0U2VydmljZUF1dGhIZWFkZXIoe1xuICAgICAgc2VydmljZU5hbWU6IG9wdHMuc2VydmljZU5hbWUsXG4gICAgICBvcmdJZDogb3B0cy5hdXRoT3JnSWQgPz8gb3JnSWQsXG4gICAgICByb2xlOiBvcHRzLnJvbGUgPz8gJ21lbWJlcicsXG4gICAgfSksXG4gICAgLi4ub3B0cy5oZWFkZXJzLFxuICB9O1xuICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuZ2V0PHsgZGF0YT86IHsgaXNNZW1iZXI/OiB1bmtub3duIH0gfT4ocGF0aCwgeyBoZWFkZXJzLCB0aW1lb3V0OiBvcHRzLnRpbWVvdXQgfSk7XG4gIGlmIChyZXMuc3RhdHVzQ29kZSA+PSA0MDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGlzTWVtYmVyID0gcmVzLmJvZHk/LmRhdGE/LmlzTWVtYmVyO1xuICByZXR1cm4gdHlwZW9mIGlzTWVtYmVyID09PSAnYm9vbGVhbicgPyBpc01lbWJlciA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnLWhpZXJhcmNoeS1odHRwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHBlcnMvb3JnLWhpZXJhcmNoeS1odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUErQmhFLFNBQVMsWUFBWSxDQUNuQixLQUFhLEVBQ2IsTUFBZ0MsRUFDaEMsSUFBNkI7SUFFN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEQsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDO0lBQ3BFLE1BQU0sT0FBTyxHQUEyQjtRQUN0QyxhQUFhLEVBQUUsb0JBQW9CLENBQUM7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUs7WUFDOUIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksUUFBUTtTQUM1QixDQUFDO1FBQ0YsR0FBRyxJQUFJLENBQUMsT0FBTztLQUNoQixDQUFDO0lBQ0YsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLElBQTZCO0lBQ2pGLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FB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QUksRUFBRSxRQUFRLENBQUM7SUFDMUMsT0FBTyxPQUFPLFFBQVEsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBPcmcg4oaSIHRlYW0gaGllcmFyY2h5IGxvb2t1cHMgb3ZlciBIVFRQIGFnYWluc3QgdGhlIHBsYXRmb3JtIHNlcnZpY2UuXG4gKlxuICogVGhlIE1vbmdvb3NlLWJhc2VkIHRyYXZlcnNhbCBpbiB7QGxpbmsgLi9vcmctaGllcmFyY2h5fSBpcyBmb3Igc2VydmljZXMgdGhhdFxuICogb3duIHRoZSBvcmcgdGFibGUgKHBsYXRmb3JtLCBxdW90YSkuIEV2ZXJ5b25lIGVsc2UgcmVhZHMgdGhlIGhpZXJhcmNoeSBvdmVyXG4gKiB0aGUgd2lyZSBmcm9tIHBsYXRmb3JtJ3MgYXV0aG9yaXRhdGl2ZSBgL29yZ2FuaXphdGlvbi86aWQvKmAgZW5kcG9pbnRzLiBUaGlzXG4gKiBtb2R1bGUgY2VudHJhbGl6ZXMgdGhlIHRyYW5zcG9ydCBmb3IgdGhvc2UgcmVhZHMg4oCUIFVSTCBjb25zdHJ1Y3Rpb24sIHRoZVxuICogc2lnbmVkIHNlcnZpY2UtdG9rZW4gYXV0aCBoZWFkZXIsIGFuZCB0aW1lb3V0K3JldHJ5IHZpYSB0aGUgc2hhcmVkXG4gKiB7QGxpbmsgSW50ZXJuYWxIdHRwQ2xpZW50fSDigJQgc28gY29tcGxpYW5jZSwgcmVwb3J0aW5nLCBhbmQgYW55IGZ1dHVyZSBjYWxsZXJcbiAqIHNoYXJlIE9ORSBtZWNoYW5pc20gaW5zdGVhZCBvZiBlYWNoIGhhbmQtcm9sbGluZyBhIGBmZXRjaGAvY2xpZW50IHdpdGggaXRzXG4gKiBvd24gYXV0aCBhbmQgZmFpbHVyZSBzZW1hbnRpY3MuXG4gKlxuICogVGhlc2UgZnVuY3Rpb25zIGRlbGliZXJhdGVseSBkbyBOT1Qgc3dhbGxvdyB0cmFuc3BvcnQgZXJyb3JzOiBhIGNvbm5lY3Rpb25cbiAqIGZhaWx1cmUvdGltZW91dCBwcm9wYWdhdGVzIHNvIGVhY2ggY2FsbGVyIGtlZXBzIGl0cyBvd24gZmFsbGJhY2sgcG9saWN5IChsb2dcbiAqIGxldmVsLCBkZWdyYWRlLXRvLXNlbGYgdnMuIHJldHVybi11bmRlZmluZWQpLiBBIG5vbi0yeHggcmVzcG9uc2UgaXMgdHJlYXRlZFxuICogYXMgXCJubyBkYXRhXCIgKHJldHVybnMgdW5kZWZpbmVkKSwgbWF0Y2hpbmcgd2hhdCB0aGUgY2FsbGVycyBwcmV2aW91c2x5IGRpZC5cbiAqL1xuXG5pbXBvcnQgeyBnZXRTZXJ2aWNlQXV0aEhlYWRlciwgU1lTVEVNX09SR19JRCB9IGZyb20gJy4uL21pZGRsZXdhcmUvYXV0aC5qcyc7XG5pbXBvcnQgeyBJbnRlcm5hbEh0dHBDbGllbnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9odHRwLWNsaWVudC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb25maWcgfSBmcm9tICcuLi90eXBlcy9jb21tb24uanMnO1xuXG4vKiogT3B0aW9ucyBzaGFyZWQgYnkgdGhlIHBsYXRmb3JtIG9yZy1oaWVyYXJjaHkgSFRUUCBsb29rdXBzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPcmdIaWVyYXJjaHlIdHRwT3B0aW9ucyB7XG4gIC8qKiBQbGF0Zm9ybSBzZXJ2aWNlIGhvc3QvcG9ydCAoKyBvcHRpb25hbCBkZWZhdWx0IHRpbWVvdXQpIGZvciB0aGUgY2xpZW50LiAqL1xuICBzZXJ2aWNlOiBTZXJ2aWNlQ29uZmlnO1xuICAvKiogU2VydmljZSBuYW1lIG1pbnRlZCBpbnRvIHRoZSBzZXJ2aWNlLWF1dGggSldUIGBzdWJgIChlLmcuICdjb21wbGlhbmNlJykuICovXG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPcmcgaWQgZW1iZWRkZWQgaW4gdGhlIHNpZ25lZCBzZXJ2aWNlIHRva2VuJ3Mgb3JnIGNvbnRleHQuIERlZmF1bHRzIHRvIHRoZVxuICAgKiBxdWVyaWVkIGBvcmdJZGA7IHBhc3MgYSBzeXN0ZW0gb3JnIGlkIGZvciBhIHN5c3RlbS1zY29wZWQgbG9va3VwLlxuICAgKi9cbiAgYXV0aE9yZ0lkPzogc3RyaW5nO1xuICAvKiogUm9sZSBjYXJyaWVkIGJ5IHRoZSBzZXJ2aWNlIHRva2VuIChkZWZhdWx0ICdtZW1iZXInIOKAlCBsZWFzdCBwcml2aWxlZ2UpLiAqL1xuICByb2xlPzogJ293bmVyJyB8ICdhZG1pbicgfCAnbWVtYmVyJztcbiAgLyoqIEV4dHJhIHJlcXVlc3QgaGVhZGVycyBtZXJnZWQgYWZ0ZXIgYEF1dGhvcml6YXRpb25gIChlLmcuIGB4LW9yZy1pZGApLiAqL1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFBlci1yZXF1ZXN0IHRpbWVvdXQgb3ZlcnJpZGUgaW4gbXMgKGZhbGxzIGJhY2sgdG8gdGhlIGNsaWVudCBkZWZhdWx0KS4gKi9cbiAgdGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgYSBub24tMnh4IHJlc3BvbnNlIFRIUk9XUyBpbnN0ZWFkIG9mIHJlc29sdmluZyB0byBgdW5kZWZpbmVkYC5cbiAgICogRGVmYXVsdCBmYWxzZSAoYSA0eHgvNXh4IG1hcHMgdG8gYHVuZGVmaW5lZGAsIHRoZSBmYWlsLXNvZnQgcG9saWN5IHRoZVxuICAgKiBtZXNzYWdlL3JlcG9ydGluZyByb290LXJlc29sdXRpb24gY2FsbGVycyByZWx5IG9uKS4gQSBjYWxsZXIgZm9yIHdob20gYVxuICAgKiBmYWlsZWQgbG9va3VwIG11c3QgZmFpbC1DTE9TRUQg4oCUIGUuZy4gYSBjb21wbGlhbmNlIHNjYW4sIHdoZXJlIHRyZWF0aW5nIGFcbiAgICogdGVhbSBvcmcgYXMgcGFyZW50LWxlc3Mgd291bGQgc2lsZW50bHkgc2tpcCBpbmhlcml0ZWQgYmxvY2tpbmcgcnVsZXMg4oCUIHNldHNcbiAgICogdGhpcyBzbyBpdCBjYW4gZGlzdGluZ3Vpc2ggXCJyb290IG9yZ1wiIChgdW5kZWZpbmVkYCkgZnJvbSBcImxvb2t1cCBmYWlsZWRcIi5cbiAgICovXG4gIHRocm93T25IdHRwRXJyb3I/OiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBidWlsZFJlcXVlc3QoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIHN1ZmZpeDogJ3BhcmVudCcgfCAnZGVzY2VuZGFudHMnLFxuICBvcHRzOiBPcmdIaWVyYXJjaHlIdHRwT3B0aW9ucyxcbik6IHsgY2xpZW50OiBJbnRlcm5hbEh0dHBDbGllbnQ7IHBhdGg6IHN0cmluZzsgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9IHtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEludGVybmFsSHR0cENsaWVudChvcHRzLnNlcnZpY2UpO1xuICBjb25zdCBwYXRoID0gYC9vcmdhbml6YXRpb24vJHtlbmNvZGVVUklDb21wb25lbnQob3JnSWQpfS8ke3N1ZmZpeH1gO1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIEF1dGhvcml6YXRpb246IGdldFNlcnZpY2VBdXRoSGVhZGVyKHtcbiAgICAgIHNlcnZpY2VOYW1lOiBvcHRzLnNlcnZpY2VOYW1lLFxuICAgICAgb3JnSWQ6IG9wdHMuYXV0aE9yZ0lkID8/IG9yZ0lkLFxuICAgICAgcm9sZTogb3B0cy5yb2xlID8/ICdtZW1iZXInLFxuICAgIH0pLFxuICAgIC4uLm9wdHMuaGVhZGVycyxcbiAgfTtcbiAgcmV0dXJuIHsgY2xpZW50LCBwYXRoLCBoZWFkZXJzIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBvcmcncyBkaXJlY3QgcGFyZW50IGlkIHZpYSBwbGF0Zm9ybSdzXG4gKiBgR0VUIC9vcmdhbml6YXRpb24vOmlkL3BhcmVudGAuIFJldHVybnMgYHVuZGVmaW5lZGAgZm9yIGEgcm9vdCBvcmcuIEEgbm9uLTJ4eFxuICogcmVzcG9uc2UgcmVzb2x2ZXMgdG8gYHVuZGVmaW5lZGAgYnkgZGVmYXVsdCwgb3IgVEhST1dTIHdoZW5cbiAqIGB0aHJvd09uSHR0cEVycm9yYCBpcyBzZXQuIEFsd2F5cyB0aHJvd3Mgb24gYSB0cmFuc3BvcnQgZmFpbHVyZVxuICogKGNvbm5lY3Rpb24vdGltZW91dCkgc28gdGhlIGNhbGxlciBjYW4gYXBwbHkgaXRzIG93biBmYWxsYmFjay5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUGFyZW50T3JnSWQob3JnSWQ6IHN0cmluZywgb3B0czogT3JnSGllcmFyY2h5SHR0cE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGNsaWVudCwgcGF0aCwgaGVhZGVycyB9ID0gYnVpbGRSZXF1ZXN0KG9yZ0lkLCAncGFyZW50Jywgb3B0cyk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8eyBkYXRhPzogeyBwYXJlbnRPcmdJZD86IHN0cmluZyB8IG51bGwgfSB9PihwYXRoLCB7IGhlYWRlcnMsIHRpbWVvdXQ6IG9wdHMudGltZW91dCB9KTtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDQwMCkge1xuICAgIGlmIChvcHRzLnRocm93T25IdHRwRXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcGFyZW50LW9yZyBsb29rdXAgZmFpbGVkIGZvciAke29yZ0lkfTogSFRUUCAke3Jlcy5zdGF0dXNDb2RlfWApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiByZXMuYm9keT8uZGF0YT8ucGFyZW50T3JnSWQgPz8gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYFtzZWxmLCAuLi5kZXNjZW5kYW50T3JnSWRzXWAgZm9yIGFuIG9yZyB2aWEgcGxhdGZvcm0nc1xuICogYEdFVCAvb3JnYW5pemF0aW9uLzppZC9kZXNjZW5kYW50c2AuIFJldHVybnMgdGhlIGlkIGxpc3Qgb25seSB3aGVuIGl0IGlzXG4gKiBsYXJnZXIgdGhhbiB0aGUgb3JnIGl0c2VsZiAoYSByZWFsIHN1YnRyZWUpLCBlbHNlIGB1bmRlZmluZWRgOyBhbHNvXG4gKiBgdW5kZWZpbmVkYCBvbiBhIG5vbi0yeHggcmVzcG9uc2UuIFRocm93cyBvbiBhIHRyYW5zcG9ydCBmYWlsdXJlIHNvIHRoZVxuICogY2FsbGVyIGNhbiBhcHBseSBpdHMgb3duIGZhbGxiYWNrLlxuICpcbiAqIFRoaXMgaXMgYSB0cnVzdCBib3VuZGFyeTogdGhlIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBlbGVtZW50LWJ5LWVsZW1lbnQgcmF0aGVyXG4gKiB0aGFuIGNhc3Qg4oCUIGV2ZXJ5IGVudHJ5IG11c3QgYmUgYSBzdHJpbmcsIGFuZCBhbnkgbm9uLXN0cmluZyBpcyBkcm9wcGVkIOKAlCBzb1xuICogYSBtYWxmb3JtZWQgcGF5bG9hZCBjYW4gbmV2ZXIgc211Z2dsZSBhIG5vbi1zdHJpbmcgaW50byB0aGUgcmV0dXJuZWRcbiAqIGBzdHJpbmdbXWAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaE9yZ0Rlc2NlbmRhbnRzKG9yZ0lkOiBzdHJpbmcsIG9wdHM6IE9yZ0hpZXJhcmNoeUh0dHBPcHRpb25zKTogUHJvbWlzZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGNsaWVudCwgcGF0aCwgaGVhZGVycyB9ID0gYnVpbGRSZXF1ZXN0KG9yZ0lkLCAnZGVzY2VuZGFudHMnLCBvcHRzKTtcbiAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LmdldDx7IGRhdGE/OiB7IG9yZ0lkcz86IHVua25vd24gfSB9PihwYXRoLCB7IGhlYWRlcnMsIHRpbWVvdXQ6IG9wdHMudGltZW91dCB9KTtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlID49IDQwMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgaWRzID0gcmVzLmJvZHk/LmRhdGE/Lm9yZ0lkcztcbiAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IG9yZ0lkcyA9IGlkcy5maWx0ZXIoKGlkKTogaWQgaXMgc3RyaW5nID0+IHR5cGVvZiBpZCA9PT0gJ3N0cmluZycpO1xuICAvLyBPbmx5IG1lYW5pbmdmdWwgd2hlbiB0aGUgKHZhbGlkYXRlZCkgc3VidHJlZSBpcyBsYXJnZXIgdGhhbiB0aGUgb3JnIGl0c2VsZi5cbiAgcmV0dXJuIG9yZ0lkcy5sZW5ndGggPiAxID8gb3JnSWRzIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEJhdGNoLXJlc29sdmUgb3JnIGlkIOKGkiBkaXNwbGF5IE5BTUUgdmlhIHBsYXRmb3JtJ3MgYFBPU1QgL29yZ2FuaXphdGlvbi9uYW1lc2AuXG4gKiBSZXR1cm5zIGEgbG93ZXJjYXNlZCBgeyBbb3JnSWRdOiBuYW1lIH1gIG1hcCDigJQgaWRzIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IGtub3dcbiAqIGFyZSBzaW1wbHkgYWJzZW50IChjYWxsZXIgZmFsbHMgYmFjayB0byB0aGUgcmF3IGlkKS5cbiAqXG4gKiBCZXN0LWVmZm9ydCBieSBkZXNpZ246IGEgbm9uLTJ4eCByZXNwb25zZSAoZS5nLiB0aGUgY2FsbGVyIGlzbid0IGEgc2VydmljZVxuICogcHJpbmNpcGFsKSBvciBhIG1hbGZvcm1lZCBib2R5IHlpZWxkcyBge31gLCBhbmQgaXQgdGhyb3dzIE9OTFkgb24gYSB0cmFuc3BvcnRcbiAqIGZhaWx1cmUgKGNvbm5lY3Rpb24vdGltZW91dCkg4oCUIG1hdGNoaW5nIHRoZSBmYWlsLXNvZnQgcG9saWN5IG9mIHRoZSBvdGhlclxuICogbG9va3VwcyBoZXJlIHNvIGEgbmFtZS1lbnJpY2htZW50IHJlYWQgbmV2ZXIgZmFpbHMgdGhlIGNhbGxlcidzIHJlcXVlc3QuIFRoZVxuICogcmVzcG9uc2UgaXMgdmFsaWRhdGVkIGVudHJ5LWJ5LWVudHJ5IChvbmx5IHN0cmluZ+KGknN0cmluZyBwYWlycyBzdXJ2aXZlKSwgc28gYVxuICogbWFsZm9ybWVkIHBheWxvYWQgY2FuJ3Qgc211Z2dsZSBhIG5vbi1zdHJpbmcgaW50byB0aGUgcmV0dXJuZWQgbWFwLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hPcmdOYW1lcyhcbiAgb3JnSWRzOiBzdHJpbmdbXSxcbiAgb3B0czogT3JnSGllcmFyY2h5SHR0cE9wdGlvbnMsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgaWYgKG9yZ0lkcy5sZW5ndGggPT09IDApIHJldHVybiB7fTtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEludGVybmFsSHR0cENsaWVudChvcHRzLnNlcnZpY2UpO1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIEF1dGhvcml6YXRpb246IGdldFNlcnZpY2VBdXRoSGVhZGVyKHtcbiAgICAgIHNlcnZpY2VOYW1lOiBvcHRzLnNlcnZpY2VOYW1lLFxuICAgICAgLy8gQSBjcm9zcy1vcmcgcmVnaXN0cnkgcmVhZCwgbm90IGEgdGVuYW50LXNjb3BlZCBvcCDigJQgZGVmYXVsdCB0byB0aGUgc3lzdGVtXG4gICAgICAvLyBvcmcgY29udGV4dCB3aGVuIHRoZSBjYWxsZXIgZG9lc24ndCBwaW4gb25lLlxuICAgICAgb3JnSWQ6IG9wdHMuYXV0aE9yZ0lkID8/IFNZU1RFTV9PUkdfSUQsXG4gICAgICByb2xlOiBvcHRzLnJvbGUgPz8gJ21lbWJlcicsXG4gICAgfSksXG4gICAgLi4ub3B0cy5oZWFkZXJzLFxuICB9O1xuICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQucG9zdDx7IGRhdGE/OiB7IG5hbWVzPzogdW5rbm93biB9IH0+KFxuICAgICcvb3JnYW5pemF0aW9uL25hbWVzJyxcbiAgICB7IG9yZ0lkcyB9LFxuICAgIHsgaGVhZGVycywgdGltZW91dDogb3B0cy50aW1lb3V0IH0sXG4gICk7XG4gIGlmIChyZXMuc3RhdHVzQ29kZSA+PSA0MDApIHJldHVybiB7fTtcbiAgY29uc3QgbmFtZXMgPSByZXMuYm9keT8uZGF0YT8ubmFtZXM7XG4gIGlmICghbmFtZXMgfHwgdHlwZW9mIG5hbWVzICE9PSAnb2JqZWN0JykgcmV0dXJuIHt9O1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbaWQsIG5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycpIG91dFtpZC50b0xvd2VyQ2FzZSgpXSA9IG5hbWU7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIGB1c2VySWRgIGlzIGFuIEFDVElWRSBtZW1iZXIgb2YgYG9yZ0lkYCB2aWEgcGxhdGZvcm0nc1xuICogYEdFVCAvb3JnYW5pemF0aW9uLzppZC9tZW1iZXJzLzp1c2VySWQvZXhpc3RzYC4gUmV0dXJucyB0aGUgYm9vbGVhbiB0aGVcbiAqIHBsYXRmb3JtIHJlcG9ydHMuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCAo4oCUIFwiY291bGRuJ3QgZGV0ZXJtaW5lXCIpIG9uIGEgbm9uLTJ4eCByZXNwb25zZSwgYW5kXG4gKiB0aHJvd3Mgb25seSBvbiBhIHRyYW5zcG9ydCBmYWlsdXJlIChjb25uZWN0aW9uL3RpbWVvdXQpIOKAlCBzbyB0aGUgY2FsbGVyXG4gKiBkaXN0aW5ndWlzaGVzIGEgZGVmaW5pdGl2ZSBub3QtYS1tZW1iZXIgKGBmYWxzZWApIGZyb20gYW4gaW5kZXRlcm1pbmF0ZVxuICogbG9va3VwIChgdW5kZWZpbmVkYCkgYW5kIGFwcGxpZXMgaXRzIG93biBmYWlsLW9wZW4vY2xvc2VkIHBvbGljeS4gVGhlIGBwYXRoYFxuICogZGlmZmVycyBmcm9tIHRoZSBwYXJlbnQvZGVzY2VuZGFudHMgc2hhcGUsIHNvIHRoaXMgYnVpbGRzIGl0cyBvd24gcmVxdWVzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoT3JnTWVtYmVyc2hpcChcbiAgb3JnSWQ6IHN0cmluZyxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIG9wdHM6IE9yZ0hpZXJhcmNoeUh0dHBPcHRpb25zLFxuKTogUHJvbWlzZTxib29sZWFuIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBJbnRlcm5hbEh0dHBDbGllbnQob3B0cy5zZXJ2aWNlKTtcbiAgY29uc3QgcGF0aCA9IGAvb3JnYW5pemF0aW9uLyR7ZW5jb2RlVVJJQ29tcG9uZW50KG9yZ0lkKX0vbWVtYmVycy8ke2VuY29kZVVSSUNvbXBvbmVudCh1c2VySWQpfS9leGlzdHNgO1xuICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgIEF1dGhvcml6YXRpb246IGdldFNlcnZpY2VBdXRoSGVhZGVyKHtcbiAgICAgIHNlcnZpY2VOYW1lOiBvcHRzLnNlcnZpY2VOYW1lLFxuICAgICAgb3JnSWQ6IG9wdHMuYXV0aE9yZ0lkID8/IG9yZ0lkLFxuICAgICAgcm9sZTogb3B0cy5yb2xlID8/ICdtZW1iZXInLFxuICAgIH0pLFxuICAgIC4uLm9wdHMuaGVhZGVycyxcbiAgfTtcbiAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LmdldDx7IGRhdGE/OiB7IGlzTWVtYmVyPzogdW5rbm93biB9IH0+KHBhdGgsIHsgaGVhZGVycywgdGltZW91dDogb3B0cy50aW1lb3V0IH0pO1xuICBpZiAocmVzLnN0YXR1c0NvZGUgPj0gNDAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBpc01lbWJlciA9IHJlcy5ib2R5Py5kYXRhPy5pc01lbWJlcjtcbiAgcmV0dXJuIHR5cGVvZiBpc01lbWJlciA9PT0gJ2Jvb2xlYW4nID8gaXNNZW1iZXIgOiB1bmRlZmluZWQ7XG59XG4iXX0=
|
package/lib/types/quota-tiers.js
CHANGED
|
@@ -113,6 +113,17 @@ function envStr(name, fallback) {
|
|
|
113
113
|
* on k8s these flow in via the `app-env` ConfigMap (built from `.env`).
|
|
114
114
|
*/
|
|
115
115
|
function tierLimits(tier) {
|
|
116
|
+
// `unlimited` is uncapped BY DEFINITION: EVERY quota is -1 and it is NOT
|
|
117
|
+
// env-overridable. Reading QUOTA_TIER_UNLIMITED_* here would let a stray env
|
|
118
|
+
// var silently cap the billing-DISABLED default tier — surfacing as a spurious
|
|
119
|
+
// "quota exceeded" on a deploy that meters nothing. Derive -1 for every field
|
|
120
|
+
// from the limits shape so a newly-added quota is uncapped here automatically.
|
|
121
|
+
if (tier === 'unlimited') {
|
|
122
|
+
const uncapped = { ...DEFAULT_TIER_LIMITS.unlimited };
|
|
123
|
+
for (const k of Object.keys(uncapped))
|
|
124
|
+
uncapped[k] = -1;
|
|
125
|
+
return uncapped;
|
|
126
|
+
}
|
|
116
127
|
const d = DEFAULT_TIER_LIMITS[tier];
|
|
117
128
|
const T = tier.toUpperCase();
|
|
118
129
|
return {
|
|
@@ -180,4 +191,4 @@ export function isValidTier(value) {
|
|
|
180
191
|
export function getTierLimits(tier) {
|
|
181
192
|
return isValidTier(tier) ? QUOTA_TIERS[tier].limits : QUOTA_TIERS.developer.limits;
|
|
182
193
|
}
|
|
183
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdGllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcXVvdGEtdGllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTJDdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxtQkFBbUIsR0FBdUM7SUFDOUQsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSxTQUFTLEVBQUU7UUFDVCxPQUFPLEVBQUUsRUFBRTtRQUNYLFNBQVMsRUFBRSxDQUFDO1FBQ1osUUFBUSxFQUFFLE1BQU07UUFDaEIsT0FBTyxFQUFFLEVBQUU7UUFDWCxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUU7UUFDcEIsVUFBVSxFQUFFLEVBQUU7UUFDZCxVQUFVLEVBQUUsRUFBRTtRQUNkLGlCQUFpQixFQUFFLEVBQUU7UUFDckIsVUFBVSxFQUFFLENBQUM7UUFDYixLQUFLLEVBQUUsQ0FBQztLQUNUO0lBQ0QsNENBQTRDO0lBQzVDLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFLEVBQUU7UUFDYixRQUFRLEVBQUUsT0FBTztRQUNqQixPQUFPLEVBQUUsS0FBSztRQUNkLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRTtRQUNyQixVQUFVLEVBQUUsR0FBRztRQUNmLFVBQVUsRUFBRSxHQUFHO1FBQ2YsaUJBQWlCLEVBQUUsRUFBRTtRQUNyQixVQUFVLEVBQUUsQ0FBQztRQUNiLEtBQUssRUFBRSxDQUFDO0tBQ1Q7SUFDRCw0RUFBNEU7SUFDNUUsbURBQW1EO0lBQ25ELElBQUksRUFBRTtRQUNKLE9BQU8sRUFBRSxHQUFHO1FBQ1osU0FBUyxFQUFFLEdBQUc7UUFDZCxRQUFRLEVBQUUsU0FBUztRQUNuQixPQUFPLEVBQUUsS0FBSztRQUNkLFlBQVks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QVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBWTtJQUN4QyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDcEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKiogQXZhaWxhYmxlIHF1b3RhIHRpZXIgaWRlbnRpZmllcnMuXG4gKlxuICogYHVubGltaXRlZGAgaXMgYSBzcGVjaWFsIHRpZXI6IGV2ZXJ5IHF1b3RhIGlzIGAtMWAgKHVuY2FwcGVkKSBhbmQgaXQgaW5jbHVkZXNcbiAqIGV2ZXJ5IGZlYXR1cmUvYWRkLW9uIGJ1bmRsZS4gSXQgaXMgdGhlIERFRkFVTFQgd2hlbiBiaWxsaW5nIGlzIGRpc2FibGVkIChub1xuICogbWV0ZXJpbmcvZW5mb3JjZW1lbnQgc3VyZmFjZSBleGlzdHMsIHNvIG5vdGhpbmcgaXMgY2FwcGVkKSwgYW5kIGl0IGlzIE5FVkVSXG4gKiBzaG93biBvciBzZWxlY3RhYmxlIHdoZW4gYmlsbGluZyBpcyBlbmFibGVkIOKAlCBzZWUgYFNUQU5EQVJEX1RJRVJTYC4gKi9cbmV4cG9ydCB0eXBlIFF1b3RhVGllciA9ICdkZXZlbG9wZXInIHwgJ3BybycgfCAndGVhbScgfCAnZW50ZXJwcmlzZScgfCAndW5saW1pdGVkJztcblxuLyoqIExpbWl0IHZhbHVlcyBmb3IgZWFjaCBxdW90YSB0eXBlIHdpdGhpbiBhIHRpZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhVGllckxpbWl0cyB7XG4gIHBsdWdpbnM6IG51bWJlcjtcbiAgcGlwZWxpbmVzOiBudW1iZXI7XG4gIGFwaUNhbGxzOiBudW1iZXI7XG4gIGFpQ2FsbHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEFnZ3JlZ2F0ZSByZWdpc3RyeSBzdG9yYWdlIGNhcCBpbiBCWVRFUy4gQ291bnRlZCBhY3Jvc3MgZXZlcnkgcmVwb1xuICAgKiB1bmRlciB0aGUgb3JnJ3MgYG9yZy17b3JnSWR9L2AgbmFtZXNwYWNlLiAtMSBtZWFucyB1bmxpbWl0ZWQuXG4gICAqIHB1c2gtZ2F0ZSByZWFkcyB0aGlzOyB0aGUgaW1hZ2UtcmVnaXN0cnkgcmVqZWN0cyB0b2tlbiBpc3N1YW5jZSBmb3JcbiAgICogYHB1c2hgIHNjb3BlIHdoZW4gdGhlIG9yZydzIG1lYXN1cmVkIHVzYWdlIGV4Y2VlZHMgdGhlIGxpbWl0LlxuICAgKi9cbiAgc3RvcmFnZUJ5dGVzOiBudW1iZXI7XG4gIC8qKiBDb3VudC1xdW90YXMgb24gdGhlIHVzZXItZWRpdGFibGUgZmVhdHVyZSB0YWJsZXMgYWRkZWQgdG8gY2xvc2UgcGVyLW9yZ1xuICAgKiAgRG9TIHZpYSBzcGFtLiAtMSBtZWFucyB1bmxpbWl0ZWQuICovXG4gIGRhc2hib2FyZHM6IG51bWJlcjtcbiAgYWxlcnRSdWxlczogbnVtYmVyO1xuICBhbGVydERlc3RpbmF0aW9uczogbnVtYmVyO1xuICBpZHBDb25maWdzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBNYXggb3JnIG1lbWJlcnMgKGFjdGl2ZSB1c2VycyAvIHNlYXRzKS4gLTEgPSB1bmxpbWl0ZWQuIFRoaXMgaXMgdGhlIFwiVGVhbVwiXG4gICAqIHRpZXIgZGlmZmVyZW50aWF0b3Ig4oCUIGVuZm9yY2VkIGF0IG1lbWJlci1pbnZpdGUgdGltZSAoYW4gaW52aXRlIGlzIGJsb2NrZWRcbiAgICogd2hlbiBhY3RpdmUgbWVtYmVycyArIHBlbmRpbmcgaW52aXRlcyB3b3VsZCBleGNlZWQgdGhpcykuXG4gICAqL1xuICBzZWF0czogbnVtYmVyO1xufVxuXG4vKiogRnVsbCBwcmVzZXQgZm9yIGEgc2luZ2xlIHRpZXIgKGxhYmVsICsgbGltaXRzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFUaWVyUHJlc2V0IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGltaXRzOiBRdW90YVRpZXJMaW1pdHM7XG59XG5cbi8qKlxuICogUHJlc2V0IGxpbWl0cyBmb3IgZWFjaCB0aWVyLiAtMSBtZWFucyB1bmxpbWl0ZWQuXG4gKlxuICogQUkgY2FsbHMgYXJlIHNpemVkIG11Y2ggc21hbGxlciB0aGFuIGBhcGlDYWxsc2AgYmVjYXVzZSBlYWNoIGNhbGwgaGFzXG4gKiBleHRlcm5hbCBwcm92aWRlciBjb3N0ICh+JDAuMDEkMC4xMC9jYWxsKS4gRGV2ZWxvcGVyIHRpZXIgYWxsb3dzIGxpZ2h0XG4gKiBleHBsb3JhdGlvbiAoNTAvcGVyaW9kKTsgUHJvIGxpZnRzIHRvIDIsNTAwOyBFbnRlcnByaXNlIGlzIGNhcHBlZCBoaWdoXG4gKiAoMjUsMDAwKSDigJQgZmFpci11c2UsIG5vdCBsaXRlcmFsbHkgdW5saW1pdGVkLlxuICpcbiAqIGBzdG9yYWdlQnl0ZXNgIGlzIHRoZSBhZ2dyZWdhdGUgcmVnaXN0cnkgY2FwIHBlciBvcmcuIFNpemVkXG4gKiBhcm91bmQgcGx1Z2luLWltYWdlIHJlYWxpdGllczogYSB0eXBpY2FsIHBsdWdpbiBpbWFnZSBpcyAyMDA1MDAgTUI7XG4gKiBEZXZlbG9wZXIncyAyIEdCIGhvbGRzIH40IHZlcnNpb25zIMOXIH41MDAgTUIsIFBybydzIDUwIEdCIGNvdmVycyBhXG4gKiBtYXR1cmUgY2F0YWxvZy4gT3BlcmF0b3JzIGNhbiBvdmVycmlkZSBwZXItb3JnIHZpYSB0aGUgcXVvdGEgQ1JVRCBBUEkuXG4gKi9cbmNvbnN0IEdCID0gMTAyNCAqIDEwMjQgKiAxMDI0O1xuXG4vKipcbiAqIENvZGUtZGVmYXVsdCBsaW1pdHMgcGVyIHRpZXIg4oCUIHRoZSBmYWxsYmFjayB3aGVuIG5vIGVudiBvdmVycmlkZSBpcyBzZXQuXG4gKiAtMSBtZWFucyB1bmxpbWl0ZWQuIChDb3VudHMgc2l6ZWQgdG8gXCJjb21mb3J0YWJseSBlbm91Z2ggZm9yIG9uZSB0ZWFtLCBub3RcbiAqIHNjcmlwdCBzcGFtXCI6IDIwIGRhc2hib2FyZHMsIDUwIGFsZXJ0IHJ1bGVzLCAxMCBkZXN0aW5hdGlvbnMsIDEgSWRQIGNvbmZpZ1xuICogZm9yIERldmVsb3Blcjsgc2NhbGVkIHVwIGZvciBQcm87IC0xICh1bmNhcHBlZCkgZm9yIHRoZSBjaGVhcCBjb3VudC1xdW90YXNcbiAqIG9uIFRlYW0vRW50ZXJwcmlzZSB3aGlsZSBjb3N0LWRyaXZpbmcgcXVvdGFzIOKAlCBpbmNsLiBhcGlDYWxscyDigJQgc3RheSBmaW5pdGUuKVxuICovXG5jb25zdCBERUZBVUxUX1RJRVJfTElNSVRTOiBSZWNvcmQ8UXVvdGFUaWVyLCBRdW90YVRpZXJMaW1pdHM+ID0ge1xuICAvLyBGcmVlIHRpZXI6IHNpbmdsZSBzZWF0LCBhcGlDYWxscyBDQVBQRUQgKHdhcyB1bmxpbWl0ZWQg4oCUIGEgRG9TL2FidXNlIGhvbGVcbiAgLy8gb24gYSBzaGFyZWQgcmVzb3VyY2UpOyBhaUNhbGxzIHNtYWxsIChlYWNoIGhhcyB+JDAuMDEtMC4xMCBleHRlcm5hbCBjb3N0KS5cbiAgZGV2ZWxvcGVyOiB7XG4gICAgcGx1Z2luczogMjUsXG4gICAgcGlwZWxpbmVzOiA1LFxuICAgIGFwaUNhbGxzOiAyNV8wMDAsXG4gICAgYWlDYWxsczogMjUsXG4gICAgc3RvcmFnZUJ5dGVzOiAyICogR0IsXG4gICAgZGFzaGJvYXJkczogMjAsXG4gICAgYWxlcnRSdWxlczogNTAsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IDEwLFxuICAgIGlkcENvbmZpZ3M6IDEsXG4gICAgc2VhdHM6IDEsXG4gIH0sXG4gIC8vIFBybyA9IG9uZSBwb3dlciB1c2VyLCBpbmRpdmlkdWFsIHByaWNpbmcuXG4gIHBybzoge1xuICAgIHBsdWdpbnM6IDUwLFxuICAgIHBpcGVsaW5lczogMTAsXG4gICAgYXBpQ2FsbHM6IDUwMF8wMDAsXG4gICAgYWlDYWxsczogMV8wMDAsXG4gICAgc3RvcmFnZUJ5dGVzOiAyNSAqIEdCLFxuICAgIGRhc2hib2FyZHM6IDIwMCxcbiAgICBhbGVydFJ1bGVzOiA1MDAsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IDUwLFxuICAgIGlkcENvbmZpZ3M6IDUsXG4gICAgc2VhdHM6IDEsXG4gIH0sXG4gIC8vIFRlYW0gPSBjb2xsYWJvcmF0aW9uIHRpZXI7IHRoZSBzZWF0IGxpbWl0ICgxMCkgaXMgdGhlIHJlYWwgZGlmZmVyZW50aWF0b3JcbiAgLy8gb3ZlciBQcm8uIExpbWl0cyBzaXQgYmV0d2VlbiBQcm8gYW5kIEVudGVycHJpc2UuXG4gIHRlYW06IHtcbiAgICBwbHVnaW5zOiAxMDAsXG4gICAgcGlwZWxpbmVzOiAyMDAsXG4gICAgYXBpQ2FsbHM6IDJfMDAwXzAwMCxcbiAgICBhaUNhbGxzOiA1XzAwMCxcbiAgICBzdG9yYWdlQnl0ZXM6IDE1MCAqIEdCLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiA1LFxuICAgIHNlYXRzOiAxMCxcbiAgfSxcbiAgLy8gRW50ZXJwcmlzZTogb3JnLXdpZGUsIGhpZ2ggc2VhdCBjYXAuIEZBSVItVVNFIOKAlCBjb3N0IGRyaXZlcnMgKGFwaUNhbGxzLFxuICAvLyBhaUNhbGxzLCBzdG9yYWdlQnl0ZXMpIGNhcHBlZCBoaWdoIHNvIG9uZSBhY2NvdW50IGNhbid0IHJ1biB1cCB1bmJvdW5kZWRcbiAgLy8gY29tcHV0ZS9wcm92aWRlci9zdG9yYWdlIGNvc3Qgb24gYSBmbGF0IHByaWNlOyBjaGVhcCBjb3VudC1xdW90YXMgc3RheSAtMS5cbiAgZW50ZXJwcmlzZToge1xuICAgIHBsdWdpbnM6IDI1MCxcbiAgICBwaXBlbGluZXM6IDIwMCxcbiAgICBhcGlDYWxsczogMTBfMDAwXzAwMCxcbiAgICBhaUNhbGxzOiAxNV8wMDAsXG4gICAgc3RvcmFnZUJ5dGVzOiA1MDAgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAtMSxcbiAgICBhbGVydFJ1bGVzOiAtMSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogLTEsXG4gICAgaWRwQ29uZmlnczogLTEsXG4gICAgc2VhdHM6IDI1LFxuICB9LFxuICAvLyBVbmxpbWl0ZWQ6IEVWRVJZIHF1b3RhIHVuY2FwcGVkICgtMSkuIFRoZSBkZWZhdWx0IHdoZW4gYmlsbGluZyBpcyBkaXNhYmxlZFxuICAvLyAobm8gZW5mb3JjZW1lbnQgc3VyZmFjZSkg4oCUIG5ldmVyIHNob3duL3NlbGVjdGFibGUgd2hlbiBiaWxsaW5nIGlzIGVuYWJsZWQuXG4gIHVubGltaXRlZDoge1xuICAgIHBsdWdpbnM6IC0xLFxuICAgIHBpcGVsaW5lczogLTEsXG4gICAgYXBpQ2FsbHM6IC0xLFxuICAgIGFpQ2FsbHM6IC0xLFxuICAgIHN0b3JhZ2VCeXRlczogLTEsXG4gICAgZGFzaGJvYXJkczogLTEsXG4gICAgYWxlcnRSdWxlczogLTEsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IC0xLFxuICAgIGlkcENvbmZpZ3M6IC0xLFxuICAgIHNlYXRzOiAtMSxcbiAgfSxcbn07XG5cbi8qKiBSZWFkIGFuIGludGVnZXIgZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIHRoZSBjb2RlIGRlZmF1bHQuIGAtMWAgPSB1bmxpbWl0ZWQuICovXG5mdW5jdGlvbiBlbnZJbnQobmFtZTogc3RyaW5nLCBmYWxsYmFjazogbnVtYmVyKTogbnVtYmVyIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnKSByZXR1cm4gZmFsbGJhY2s7XG4gIGNvbnN0IG4gPSBwYXJzZUludChyYXcsIDEwKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IGZhbGxiYWNrIDogbjtcbn1cblxuLyoqIFJlYWQgYSBzdHJpbmcgZW52IHZhciwgZmFsbGluZyBiYWNrIHRvIHRoZSBjb2RlIGRlZmF1bHQuICovXG5mdW5jdGlvbiBlbnZTdHIobmFtZTogc3RyaW5nLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmF3ID0gcHJvY2Vzcy5lbnZbbmFtZV07XG4gIHJldHVybiByYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09ICcnID8gZmFsbGJhY2sgOiByYXc7XG59XG5cbi8qKlxuICogUGVyLXRpZXIgbGltaXRzLCBlYWNoIG92ZXJyaWRhYmxlIHZpYSBgUVVPVEFfVElFUl88VElFUj5fPExJTUlUPmAgZW52IHZhcnNcbiAqIChlLmcuIGBRVU9UQV9USUVSX1BST19QSVBFTElORVM9MjUwYCwgYFFVT1RBX1RJRVJfREVWRUxPUEVSX1NUT1JBR0VfQllURVM9Li4uYCkuXG4gKiBVbnNldC9lbXB0eSDihpIgdGhlIGNvZGUgZGVmYXVsdC4gYC0xYCA9IHVubGltaXRlZC4gUmVhZCBvbmNlIGF0IG1vZHVsZSBsb2FkIOKAlFxuICogb24gazhzIHRoZXNlIGZsb3cgaW4gdmlhIHRoZSBgYXBwLWVudmAgQ29uZmlnTWFwIChidWlsdCBmcm9tIGAuZW52YCkuXG4gKi9cbmZ1bmN0aW9uIHRpZXJMaW1pdHModGllcjogUXVvdGFUaWVyKTogUXVvdGFUaWVyTGltaXRzIHtcbiAgY29uc3QgZCA9IERFRkFVTFRfVElFUl9MSU1JVFNbdGllcl07XG4gIGNvbnN0IFQgPSB0aWVyLnRvVXBwZXJDYXNlKCk7XG4gIHJldHVybiB7XG4gICAgcGx1Z2luczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fUExVR0lOU2AsIGQucGx1Z2lucyksXG4gICAgcGlwZWxpbmVzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9QSVBFTElORVNgLCBkLnBpcGVsaW5lcyksXG4gICAgYXBpQ2FsbHM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X0FQSV9DQUxMU2AsIGQuYXBpQ2FsbHMpLFxuICAgIGFpQ2FsbHM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X0FJX0NBTExTYCwgZC5haUNhbGxzKSxcbiAgICBzdG9yYWdlQnl0ZXM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X1NUT1JBR0VfQllURVNgLCBkLnN0b3JhZ2VCeXRlcyksXG4gICAgZGFzaGJvYXJkczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fREFTSEJPQVJEU2AsIGQuZGFzaGJvYXJkcyksXG4gICAgYWxlcnRSdWxlczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fQUxFUlRfUlVMRVNgLCBkLmFsZXJ0UnVsZXMpLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9BTEVSVF9ERVNUSU5BVElPTlNgLCBkLmFsZXJ0RGVzdGluYXRpb25zKSxcbiAgICBpZHBDb25maWdzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9JRFBfQ09ORklHU2AsIGQuaWRwQ29uZmlncyksXG4gICAgc2VhdHM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X1NFQVRTYCwgZC5zZWF0cyksXG4gIH07XG59XG5cbi8vIExhYmVscyBhcmUgb3ZlcnJpZGFibGUgdmlhIGBRVU9UQV9USUVSXzxUSUVSPl9MQUJFTGAgKGRpc3BsYXkgbmFtZSBvbmx5KS5cbmV4cG9ydCBjb25zdCBRVU9UQV9USUVSUzogUmVjb3JkPFF1b3RhVGllciwgUXVvdGFUaWVyUHJlc2V0PiA9IHtcbiAgZGV2ZWxvcGVyOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfREVWRUxPUEVSX0xBQkVMJywgJ0RldmVsb3BlcicpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ2RldmVsb3BlcicpIH0sXG4gIHBybzogeyBsYWJlbDogZW52U3RyKCdRVU9UQV9USUVSX1BST19MQUJFTCcsICdQcm8nKSwgbGltaXRzOiB0aWVyTGltaXRzKCdwcm8nKSB9LFxuICB0ZWFtOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfVEVBTV9MQUJFTCcsICdUZWFtJyksIGxpbWl0czogdGllckxpbWl0cygndGVhbScpIH0sXG4gIGVudGVycHJpc2U6IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9FTlRFUlBSSVNFX0xBQkVMJywgJ0VudGVycHJpc2UnKSwgbGltaXRzOiB0aWVyTGltaXRzKCdlbnRlcnByaXNlJykgfSxcbiAgdW5saW1pdGVkOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfVU5MSU1JVEVEX0xBQkVMJywgJ1VubGltaXRlZCcpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ3VubGltaXRlZCcpIH0sXG59O1xuXG4vKiogQWxsIHZhbGlkIHRpZXIgbmFtZXMgKGluY2wuIGB1bmxpbWl0ZWRgKS4gVXNlZCBmb3IgdmFsaWRhdGlvbiBvZiBhICpzdG9yZWQqXG4gKiAgdGllciDigJQgYHVubGltaXRlZGAgaXMgYSB2YWxpZCB2YWx1ZSBldmVuIHRob3VnaCBpdCdzIG5ldmVyIG9mZmVyZWQgZm9yIHNhbGUuICovXG5leHBvcnQgY29uc3QgVkFMSURfVElFUlM6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gT2JqZWN0LmtleXMoUVVPVEFfVElFUlMpIGFzIFF1b3RhVGllcltdO1xuXG4vKiogVGhlIHN0YW5kYXJkLCBiaWxsaW5nLXNlbGVjdGFibGUgdGllcnMg4oCUIHRoZSBvbmVzIG9mZmVyZWQgYXMgcHVyY2hhc2FibGUgcGxhbnNcbiAqICBhbmQgc2hvd24gaW4gdGllciBwaWNrZXJzLiBEZXJpdmVkIGFzIFwiZXZlcnkgdmFsaWQgdGllciBleGNlcHQgYHVubGltaXRlZGBcIixcbiAqICB3aGljaCBpcyB0aGUgYmlsbGluZy1ESVNBQkxFRCBkZWZhdWx0IGFuZCBpcyBuZXZlciBkaXNwbGF5ZWQvc2VsZWN0YWJsZSB3aGVuXG4gKiAgYmlsbGluZyBpcyBlbmFibGVkLiBLZXB0IERSWSBvZmYgYFZBTElEX1RJRVJTYCBzbyBhZGRpbmcgYSB0aWVyIGZsb3dzIHRocm91Z2guICovXG5leHBvcnQgY29uc3QgU1RBTkRBUkRfVElFUlM6IHJlYWRvbmx5IFF1b3RhVGllcltdID0gVkFMSURfVElFUlMuZmlsdGVyKCh0KSA9PiB0ICE9PSAndW5saW1pdGVkJyk7XG5cbi8qKiBUaWVycyB0aGF0IHBlcm1pdCB0aGUgb3JnIOKGkiB0ZWFtIGhpZXJhcmNoeSAobmVzdGluZyB0ZWFtcyB1bmRlciBhIHJvb3QpLiBUaGVcbiAqICBiaWxsaW5nLW9mZiBgdW5saW1pdGVkYCB0aWVyIGlzIHRlYW0tY2FwYWJsZSAoaXQncyB0aGUgbW9zdCBwZXJtaXNzaXZlKTsgdGhlXG4gKiAgZW50cnktbGV2ZWwgYGRldmVsb3BlcmAvYHByb2AgdGllcnMgYXJlIG5vdC4gU2luZ2xlIHNvdXJjZSBmb3IgdGhlIHBhcmVudC1cbiAqICBlbGlnaWJpbGl0eSArIGRvd25ncmFkZS1vdmVyY2FwIGNoZWNrcyBzbyB0aGV5IGNhbid0IGRyaWZ0LiAqL1xuZXhwb3J0IGNvbnN0IFRFQU1fQ0FQQUJMRV9USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBbJ3RlYW0nLCAnZW50ZXJwcmlzZScsICd1bmxpbWl0ZWQnXTtcbmV4cG9ydCBmdW5jdGlvbiB0aWVyQWxsb3dzVGVhbXModGllcjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCk6IGJvb2xlYW4ge1xuICByZXR1cm4gISF0aWVyICYmIChURUFNX0NBUEFCTEVfVElFUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHRpZXIpO1xufVxuXG4vKiogV2hldGhlciB0aGUgYmlsbGluZyBzZXJ2aWNlIGlzIGVuYWJsZWQgaW4gdGhpcyBkZXBsb3ltZW50IChgQklMTElOR19FTkFCTEVEYCxcbiAqICBvcHQtb3V0IGRlZmF1bHQtb24g4oCUIG1pcnJvcnMgdGhlIGJpbGxpbmcvcGxhdGZvcm0gY29uZmlncykuIFdpdGggYmlsbGluZyBPRkZcbiAqICB0aGVyZSdzIG5vIG1ldGVyaW5nL2VuZm9yY2VtZW50IHN1cmZhY2UsIHNvIHRoZSBkZWZhdWx0IHRpZXIgaXMgYHVubGltaXRlZGAuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCaWxsaW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIChwcm9jZXNzLmVudi5CSUxMSU5HX0VOQUJMRUQgfHwgJ3RydWUnKS50b0xvd2VyQ2FzZSgpICE9PSAnZmFsc2UnO1xufVxuXG4vKipcbiAqIERlZmF1bHQgdGllciBhc3NpZ25lZCB0byBuZXcgb3JnYW5pemF0aW9ucy5cbiAqIC0gQmlsbGluZyBESVNBQkxFRCDihpIgYHVubGltaXRlZGAgKG5vdGhpbmcgaXMgbWV0ZXJlZCwgc28gZXZlcnl0aGluZyBpcyB1bmNhcHBlZCkuXG4gKiAtIEJpbGxpbmcgRU5BQkxFRCAg4oaSIGBERUZBVUxUX1FVT1RBX1RJRVJgIGlmIGl0J3MgYSB2YWxpZCBzdGFuZGFyZCB0aWVyLCBlbHNlIGBkZXZlbG9wZXJgLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9USUVSOiBRdW90YVRpZXIgPSAhaXNCaWxsaW5nRW5hYmxlZCgpXG4gID8gJ3VubGltaXRlZCdcbiAgOiAoaXNWYWxpZFRpZXIocHJvY2Vzcy5lbnYuREVGQVVMVF9RVU9UQV9USUVSID8/ICcnKSAmJiBwcm9jZXNzLmVudi5ERUZBVUxUX1FVT1RBX1RJRVIgIT09ICd1bmxpbWl0ZWQnXG4gICAgPyAocHJvY2Vzcy5lbnYuREVGQVVMVF9RVU9UQV9USUVSIGFzIFF1b3RhVGllcilcbiAgICA6ICdkZXZlbG9wZXInKTtcblxuLyoqIENoZWNrIHdoZXRoZXIgYSBzdHJpbmcgaXMgYSB2YWxpZCBRdW90YVRpZXIuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFRpZXIodmFsdWU6IHN0cmluZyk6IHZhbHVlIGlzIFF1b3RhVGllciB7XG4gIC8vIFVzZSB0aGUgZXhwbGljaXQgdHVwbGUsIG5vdCBgdmFsdWUgaW4gUVVPVEFfVElFUlNgOiBgaW5gIHdhbGtzIHRoZSBwcm90b3R5cGVcbiAgLy8gY2hhaW4sIHNvIGluaGVyaXRlZCBPYmplY3Qga2V5cyAoJ3RvU3RyaW5nJywgJ2NvbnN0cnVjdG9yJywg4oCmKSB3b3VsZCByZXR1cm5cbiAgLy8gdHJ1ZSBhbmQgdGhlbiBgZ2V0VGllckxpbWl0c2Agd291bGQgcmVhZCBgLmxpbWl0c2Agb2ZmIGEgZnVuY3Rpb24g4oaSIGNyYXNoLlxuICAvLyBgdGllcmAgaXMgYXR0YWNrZXItaW5mbHVlbmNlYWJsZSAoSldUIC8gcmVxdWVzdCBib2R5IC8gREVGQVVMVF9RVU9UQV9USUVSIGVudikuXG4gIHJldHVybiAoVkFMSURfVElFUlMgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cblxuLyoqIEdldCB0aGUgZGVmYXVsdCBsaW1pdHMgZm9yIGEgZ2l2ZW4gdGllciAoZmFsbHMgYmFjayB0byBkZXZlbG9wZXIpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpZXJMaW1pdHModGllcjogc3RyaW5nKTogUXVvdGFUaWVyTGltaXRzIHtcbiAgcmV0dXJuIGlzVmFsaWRUaWVyKHRpZXIpID8gUVVPVEFfVElFUlNbdGllcl0ubGltaXRzOiBRVU9UQV9USUVSUy5kZXZlbG9wZXIubGltaXRzO1xufVxuIl19
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdGllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvcXVvdGEtdGllcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQTJDdEM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFOUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxtQkFBbUIsR0FBdUM7SUFDOUQsNEVBQTRFO0lBQzVFLDZFQUE2RTtJQUM3RSxTQUFTLEVBQUU7UUFDVCxPQUFPLEVBQUUsRUFBRTtRQUNYLFNBQVMsRUFBRSxDQUFDO1FBQ1osUUFBUSxFQUFFLE1BQU07UUFDaEIsT0FBTyxFQUFFLEVBQUU7UUFDWCxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUU7UUFDcEIsVUFBVSxFQUFFLEVBQUU7UUFDZCxVQUFVLEVBQUUsRUFBRTtRQUNkLGlCQUFpQixFQUFFLEVBQUU7UUFDckIsVUFBVSxFQUFFLENBQUM7UUFDYixLQUFLLEVBQUUsQ0FBQztLQUNUO0lBQ0QsNENBQTRDO0lBQzVDLEdBQUcsRUFBRTtRQUNILE9BQU8sRUFBRSxFQUFFO1FBQ1gsU0FBUyxFQUFFLEVBQUU7UUFDYixRQUFRLEVBQUUsT0FBTztRQUNqQixPQUFPLEVBQUUsS0FBSztRQUNkLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRTtRQUNyQixVQUFVLEVBQUUsR0FBRztRQUNmLFVBQVUsRUFBRSxHQUFHO1FBQ2YsaUJBQWlCLEVBQUUsRUFBRTtRQUNyQixVQUFVLEVBQUUsQ0FBQztRQUNiLEtBQUssRUFBRSxDQUFDO0tBQ1Q7SUFDRCw0RUFBNEU7SUFDNUUsbURBQW1EO0lBQ25ELElBQUksRUFBRTtRQUNKLE9BQU8sRUFBRSxHQUFHO1FBQ1osU0FBUyxFQUFFLEdBQUc7UUFDZCxRQUFRLEVBQUUsU0FBUztRQUNuQixPQUFPLEVBQUUsS0FBSztRQUNkLFlBQVks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QUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEtBQUssV0FBVztRQUNwRyxDQUFDLENBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBZ0M7UUFDL0MsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRW5CLG1EQUFtRDtBQUNuRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWE7SUFDdkMsK0VBQStFO0lBQy9FLDhFQUE4RTtJQUM5RSw2RUFBNkU7SUFDN0Usa0ZBQWtGO0lBQ2xGLE9BQVEsV0FBaUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELHlFQUF5RTtBQUN6RSxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVk7SUFDeEMsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ3BGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqIEF2YWlsYWJsZSBxdW90YSB0aWVyIGlkZW50aWZpZXJzLlxuICpcbiAqIGB1bmxpbWl0ZWRgIGlzIGEgc3BlY2lhbCB0aWVyOiBldmVyeSBxdW90YSBpcyBgLTFgICh1bmNhcHBlZCkgYW5kIGl0IGluY2x1ZGVzXG4gKiBldmVyeSBmZWF0dXJlL2FkZC1vbiBidW5kbGUuIEl0IGlzIHRoZSBERUZBVUxUIHdoZW4gYmlsbGluZyBpcyBkaXNhYmxlZCAobm9cbiAqIG1ldGVyaW5nL2VuZm9yY2VtZW50IHN1cmZhY2UgZXhpc3RzLCBzbyBub3RoaW5nIGlzIGNhcHBlZCksIGFuZCBpdCBpcyBORVZFUlxuICogc2hvd24gb3Igc2VsZWN0YWJsZSB3aGVuIGJpbGxpbmcgaXMgZW5hYmxlZCDigJQgc2VlIGBTVEFOREFSRF9USUVSU2AuICovXG5leHBvcnQgdHlwZSBRdW90YVRpZXIgPSAnZGV2ZWxvcGVyJyB8ICdwcm8nIHwgJ3RlYW0nIHwgJ2VudGVycHJpc2UnIHwgJ3VubGltaXRlZCc7XG5cbi8qKiBMaW1pdCB2YWx1ZXMgZm9yIGVhY2ggcXVvdGEgdHlwZSB3aXRoaW4gYSB0aWVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdW90YVRpZXJMaW1pdHMge1xuICBwbHVnaW5zOiBudW1iZXI7XG4gIHBpcGVsaW5lczogbnVtYmVyO1xuICBhcGlDYWxsczogbnVtYmVyO1xuICBhaUNhbGxzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgcmVnaXN0cnkgc3RvcmFnZSBjYXAgaW4gQllURVMuIENvdW50ZWQgYWNyb3NzIGV2ZXJ5IHJlcG9cbiAgICogdW5kZXIgdGhlIG9yZydzIGBvcmcte29yZ0lkfS9gIG5hbWVzcGFjZS4gLTEgbWVhbnMgdW5saW1pdGVkLlxuICAgKiBwdXNoLWdhdGUgcmVhZHMgdGhpczsgdGhlIGltYWdlLXJlZ2lzdHJ5IHJlamVjdHMgdG9rZW4gaXNzdWFuY2UgZm9yXG4gICAqIGBwdXNoYCBzY29wZSB3aGVuIHRoZSBvcmcncyBtZWFzdXJlZCB1c2FnZSBleGNlZWRzIHRoZSBsaW1pdC5cbiAgICovXG4gIHN0b3JhZ2VCeXRlczogbnVtYmVyO1xuICAvKiogQ291bnQtcXVvdGFzIG9uIHRoZSB1c2VyLWVkaXRhYmxlIGZlYXR1cmUgdGFibGVzIGFkZGVkIHRvIGNsb3NlIHBlci1vcmdcbiAgICogIERvUyB2aWEgc3BhbS4gLTEgbWVhbnMgdW5saW1pdGVkLiAqL1xuICBkYXNoYm9hcmRzOiBudW1iZXI7XG4gIGFsZXJ0UnVsZXM6IG51bWJlcjtcbiAgYWxlcnREZXN0aW5hdGlvbnM6IG51bWJlcjtcbiAgaWRwQ29uZmlnczogbnVtYmVyO1xuICAvKipcbiAgICogTWF4IG9yZyBtZW1iZXJzIChhY3RpdmUgdXNlcnMgLyBzZWF0cykuIC0xID0gdW5saW1pdGVkLiBUaGlzIGlzIHRoZSBcIlRlYW1cIlxuICAgKiB0aWVyIGRpZmZlcmVudGlhdG9yIOKAlCBlbmZvcmNlZCBhdCBtZW1iZXItaW52aXRlIHRpbWUgKGFuIGludml0ZSBpcyBibG9ja2VkXG4gICAqIHdoZW4gYWN0aXZlIG1lbWJlcnMgKyBwZW5kaW5nIGludml0ZXMgd291bGQgZXhjZWVkIHRoaXMpLlxuICAgKi9cbiAgc2VhdHM6IG51bWJlcjtcbn1cblxuLyoqIEZ1bGwgcHJlc2V0IGZvciBhIHNpbmdsZSB0aWVyIChsYWJlbCArIGxpbWl0cykuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1b3RhVGllclByZXNldCB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxpbWl0czogUXVvdGFUaWVyTGltaXRzO1xufVxuXG4vKipcbiAqIFByZXNldCBsaW1pdHMgZm9yIGVhY2ggdGllci4gLTEgbWVhbnMgdW5saW1pdGVkLlxuICpcbiAqIEFJIGNhbGxzIGFyZSBzaXplZCBtdWNoIHNtYWxsZXIgdGhhbiBgYXBpQ2FsbHNgIGJlY2F1c2UgZWFjaCBjYWxsIGhhc1xuICogZXh0ZXJuYWwgcHJvdmlkZXIgY29zdCAofiQwLjAxJDAuMTAvY2FsbCkuIERldmVsb3BlciB0aWVyIGFsbG93cyBsaWdodFxuICogZXhwbG9yYXRpb24gKDUwL3BlcmlvZCk7IFBybyBsaWZ0cyB0byAyLDUwMDsgRW50ZXJwcmlzZSBpcyBjYXBwZWQgaGlnaFxuICogKDI1LDAwMCkg4oCUIGZhaXItdXNlLCBub3QgbGl0ZXJhbGx5IHVubGltaXRlZC5cbiAqXG4gKiBgc3RvcmFnZUJ5dGVzYCBpcyB0aGUgYWdncmVnYXRlIHJlZ2lzdHJ5IGNhcCBwZXIgb3JnLiBTaXplZFxuICogYXJvdW5kIHBsdWdpbi1pbWFnZSByZWFsaXRpZXM6IGEgdHlwaWNhbCBwbHVnaW4gaW1hZ2UgaXMgMjAwNTAwIE1CO1xuICogRGV2ZWxvcGVyJ3MgMiBHQiBob2xkcyB+NCB2ZXJzaW9ucyDDlyB+NTAwIE1CLCBQcm8ncyA1MCBHQiBjb3ZlcnMgYVxuICogbWF0dXJlIGNhdGFsb2cuIE9wZXJhdG9ycyBjYW4gb3ZlcnJpZGUgcGVyLW9yZyB2aWEgdGhlIHF1b3RhIENSVUQgQVBJLlxuICovXG5jb25zdCBHQiA9IDEwMjQgKiAxMDI0ICogMTAyNDtcblxuLyoqXG4gKiBDb2RlLWRlZmF1bHQgbGltaXRzIHBlciB0aWVyIOKAlCB0aGUgZmFsbGJhY2sgd2hlbiBubyBlbnYgb3ZlcnJpZGUgaXMgc2V0LlxuICogLTEgbWVhbnMgdW5saW1pdGVkLiAoQ291bnRzIHNpemVkIHRvIFwiY29tZm9ydGFibHkgZW5vdWdoIGZvciBvbmUgdGVhbSwgbm90XG4gKiBzY3JpcHQgc3BhbVwiOiAyMCBkYXNoYm9hcmRzLCA1MCBhbGVydCBydWxlcywgMTAgZGVzdGluYXRpb25zLCAxIElkUCBjb25maWdcbiAqIGZvciBEZXZlbG9wZXI7IHNjYWxlZCB1cCBmb3IgUHJvOyAtMSAodW5jYXBwZWQpIGZvciB0aGUgY2hlYXAgY291bnQtcXVvdGFzXG4gKiBvbiBUZWFtL0VudGVycHJpc2Ugd2hpbGUgY29zdC1kcml2aW5nIHF1b3RhcyDigJQgaW5jbC4gYXBpQ2FsbHMg4oCUIHN0YXkgZmluaXRlLilcbiAqL1xuY29uc3QgREVGQVVMVF9USUVSX0xJTUlUUzogUmVjb3JkPFF1b3RhVGllciwgUXVvdGFUaWVyTGltaXRzPiA9IHtcbiAgLy8gRnJlZSB0aWVyOiBzaW5nbGUgc2VhdCwgYXBpQ2FsbHMgQ0FQUEVEICh3YXMgdW5saW1pdGVkIOKAlCBhIERvUy9hYnVzZSBob2xlXG4gIC8vIG9uIGEgc2hhcmVkIHJlc291cmNlKTsgYWlDYWxscyBzbWFsbCAoZWFjaCBoYXMgfiQwLjAxLTAuMTAgZXh0ZXJuYWwgY29zdCkuXG4gIGRldmVsb3Blcjoge1xuICAgIHBsdWdpbnM6IDI1LFxuICAgIHBpcGVsaW5lczogNSxcbiAgICBhcGlDYWxsczogMjVfMDAwLFxuICAgIGFpQ2FsbHM6IDI1LFxuICAgIHN0b3JhZ2VCeXRlczogMiAqIEdCLFxuICAgIGRhc2hib2FyZHM6IDIwLFxuICAgIGFsZXJ0UnVsZXM6IDUwLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAxMCxcbiAgICBpZHBDb25maWdzOiAxLFxuICAgIHNlYXRzOiAxLFxuICB9LFxuICAvLyBQcm8gPSBvbmUgcG93ZXIgdXNlciwgaW5kaXZpZHVhbCBwcmljaW5nLlxuICBwcm86IHtcbiAgICBwbHVnaW5zOiA1MCxcbiAgICBwaXBlbGluZXM6IDEwLFxuICAgIGFwaUNhbGxzOiA1MDBfMDAwLFxuICAgIGFpQ2FsbHM6IDFfMDAwLFxuICAgIHN0b3JhZ2VCeXRlczogMjUgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAyMDAsXG4gICAgYWxlcnRSdWxlczogNTAwLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiA1MCxcbiAgICBpZHBDb25maWdzOiA1LFxuICAgIHNlYXRzOiAxLFxuICB9LFxuICAvLyBUZWFtID0gY29sbGFib3JhdGlvbiB0aWVyOyB0aGUgc2VhdCBsaW1pdCAoMTApIGlzIHRoZSByZWFsIGRpZmZlcmVudGlhdG9yXG4gIC8vIG92ZXIgUHJvLiBMaW1pdHMgc2l0IGJldHdlZW4gUHJvIGFuZCBFbnRlcnByaXNlLlxuICB0ZWFtOiB7XG4gICAgcGx1Z2luczogMTAwLFxuICAgIHBpcGVsaW5lczogMjAwLFxuICAgIGFwaUNhbGxzOiAyXzAwMF8wMDAsXG4gICAgYWlDYWxsczogNV8wMDAsXG4gICAgc3RvcmFnZUJ5dGVzOiAxNTAgKiBHQixcbiAgICBkYXNoYm9hcmRzOiAtMSxcbiAgICBhbGVydFJ1bGVzOiAtMSxcbiAgICBhbGVydERlc3RpbmF0aW9uczogLTEsXG4gICAgaWRwQ29uZmlnczogNSxcbiAgICBzZWF0czogMTAsXG4gIH0sXG4gIC8vIEVudGVycHJpc2U6IG9yZy13aWRlLCBoaWdoIHNlYXQgY2FwLiBGQUlSLVVTRSDigJQgY29zdCBkcml2ZXJzIChhcGlDYWxscyxcbiAgLy8gYWlDYWxscywgc3RvcmFnZUJ5dGVzKSBjYXBwZWQgaGlnaCBzbyBvbmUgYWNjb3VudCBjYW4ndCBydW4gdXAgdW5ib3VuZGVkXG4gIC8vIGNvbXB1dGUvcHJvdmlkZXIvc3RvcmFnZSBjb3N0IG9uIGEgZmxhdCBwcmljZTsgY2hlYXAgY291bnQtcXVvdGFzIHN0YXkgLTEuXG4gIGVudGVycHJpc2U6IHtcbiAgICBwbHVnaW5zOiAyNTAsXG4gICAgcGlwZWxpbmVzOiAyMDAsXG4gICAgYXBpQ2FsbHM6IDEwXzAwMF8wMDAsXG4gICAgYWlDYWxsczogMTVfMDAwLFxuICAgIHN0b3JhZ2VCeXRlczogNTAwICogR0IsXG4gICAgZGFzaGJvYXJkczogLTEsXG4gICAgYWxlcnRSdWxlczogLTEsXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IC0xLFxuICAgIGlkcENvbmZpZ3M6IC0xLFxuICAgIHNlYXRzOiAyNSxcbiAgfSxcbiAgLy8gVW5saW1pdGVkOiBFVkVSWSBxdW90YSB1bmNhcHBlZCAoLTEpLiBUaGUgZGVmYXVsdCB3aGVuIGJpbGxpbmcgaXMgZGlzYWJsZWRcbiAgLy8gKG5vIGVuZm9yY2VtZW50IHN1cmZhY2UpIOKAlCBuZXZlciBzaG93bi9zZWxlY3RhYmxlIHdoZW4gYmlsbGluZyBpcyBlbmFibGVkLlxuICB1bmxpbWl0ZWQ6IHtcbiAgICBwbHVnaW5zOiAtMSxcbiAgICBwaXBlbGluZXM6IC0xLFxuICAgIGFwaUNhbGxzOiAtMSxcbiAgICBhaUNhbGxzOiAtMSxcbiAgICBzdG9yYWdlQnl0ZXM6IC0xLFxuICAgIGRhc2hib2FyZHM6IC0xLFxuICAgIGFsZXJ0UnVsZXM6IC0xLFxuICAgIGFsZXJ0RGVzdGluYXRpb25zOiAtMSxcbiAgICBpZHBDb25maWdzOiAtMSxcbiAgICBzZWF0czogLTEsXG4gIH0sXG59O1xuXG4vKiogUmVhZCBhbiBpbnRlZ2VyIGVudiB2YXIsIGZhbGxpbmcgYmFjayB0byB0aGUgY29kZSBkZWZhdWx0LiBgLTFgID0gdW5saW1pdGVkLiAqL1xuZnVuY3Rpb24gZW52SW50KG5hbWU6IHN0cmluZywgZmFsbGJhY2s6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W25hbWVdO1xuICBpZiAocmF3ID09PSB1bmRlZmluZWQgfHwgcmF3ID09PSAnJykgcmV0dXJuIGZhbGxiYWNrO1xuICBjb25zdCBuID0gcGFyc2VJbnQocmF3LCAxMCk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBmYWxsYmFjayA6IG47XG59XG5cbi8qKiBSZWFkIGEgc3RyaW5nIGVudiB2YXIsIGZhbGxpbmcgYmFjayB0byB0aGUgY29kZSBkZWZhdWx0LiAqL1xuZnVuY3Rpb24gZW52U3RyKG5hbWU6IHN0cmluZywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJhdyA9IHByb2Nlc3MuZW52W25hbWVdO1xuICByZXR1cm4gcmF3ID09PSB1bmRlZmluZWQgfHwgcmF3ID09PSAnJyA/IGZhbGxiYWNrIDogcmF3O1xufVxuXG4vKipcbiAqIFBlci10aWVyIGxpbWl0cywgZWFjaCBvdmVycmlkYWJsZSB2aWEgYFFVT1RBX1RJRVJfPFRJRVI+XzxMSU1JVD5gIGVudiB2YXJzXG4gKiAoZS5nLiBgUVVPVEFfVElFUl9QUk9fUElQRUxJTkVTPTI1MGAsIGBRVU9UQV9USUVSX0RFVkVMT1BFUl9TVE9SQUdFX0JZVEVTPS4uLmApLlxuICogVW5zZXQvZW1wdHkg4oaSIHRoZSBjb2RlIGRlZmF1bHQuIGAtMWAgPSB1bmxpbWl0ZWQuIFJlYWQgb25jZSBhdCBtb2R1bGUgbG9hZCDigJRcbiAqIG9uIGs4cyB0aGVzZSBmbG93IGluIHZpYSB0aGUgYGFwcC1lbnZgIENvbmZpZ01hcCAoYnVpbHQgZnJvbSBgLmVudmApLlxuICovXG5mdW5jdGlvbiB0aWVyTGltaXRzKHRpZXI6IFF1b3RhVGllcik6IFF1b3RhVGllckxpbWl0cyB7XG4gIC8vIGB1bmxpbWl0ZWRgIGlzIHVuY2FwcGVkIEJZIERFRklOSVRJT046IEVWRVJZIHF1b3RhIGlzIC0xIGFuZCBpdCBpcyBOT1RcbiAgLy8gZW52LW92ZXJyaWRhYmxlLiBSZWFkaW5nIFFVT1RBX1RJRVJfVU5MSU1JVEVEXyogaGVyZSB3b3VsZCBsZXQgYSBzdHJheSBlbnZcbiAgLy8gdmFyIHNpbGVudGx5IGNhcCB0aGUgYmlsbGluZy1ESVNBQkxFRCBkZWZhdWx0IHRpZXIg4oCUIHN1cmZhY2luZyBhcyBhIHNwdXJpb3VzXG4gIC8vIFwicXVvdGEgZXhjZWVkZWRcIiBvbiBhIGRlcGxveSB0aGF0IG1ldGVycyBub3RoaW5nLiBEZXJpdmUgLTEgZm9yIGV2ZXJ5IGZpZWxkXG4gIC8vIGZyb20gdGhlIGxpbWl0cyBzaGFwZSBzbyBhIG5ld2x5LWFkZGVkIHF1b3RhIGlzIHVuY2FwcGVkIGhlcmUgYXV0b21hdGljYWxseS5cbiAgaWYgKHRpZXIgPT09ICd1bmxpbWl0ZWQnKSB7XG4gICAgY29uc3QgdW5jYXBwZWQgPSB7IC4uLkRFRkFVTFRfVElFUl9MSU1JVFMudW5saW1pdGVkIH07XG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHVuY2FwcGVkKSBhcyAoa2V5b2YgUXVvdGFUaWVyTGltaXRzKVtdKSB1bmNhcHBlZFtrXSA9IC0xO1xuICAgIHJldHVybiB1bmNhcHBlZDtcbiAgfVxuICBjb25zdCBkID0gREVGQVVMVF9USUVSX0xJTUlUU1t0aWVyXTtcbiAgY29uc3QgVCA9IHRpZXIudG9VcHBlckNhc2UoKTtcbiAgcmV0dXJuIHtcbiAgICBwbHVnaW5zOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9QTFVHSU5TYCwgZC5wbHVnaW5zKSxcbiAgICBwaXBlbGluZXM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X1BJUEVMSU5FU2AsIGQucGlwZWxpbmVzKSxcbiAgICBhcGlDYWxsczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fQVBJX0NBTExTYCwgZC5hcGlDYWxscyksXG4gICAgYWlDYWxsczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fQUlfQ0FMTFNgLCBkLmFpQ2FsbHMpLFxuICAgIHN0b3JhZ2VCeXRlczogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fU1RPUkFHRV9CWVRFU2AsIGQuc3RvcmFnZUJ5dGVzKSxcbiAgICBkYXNoYm9hcmRzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9EQVNIQk9BUkRTYCwgZC5kYXNoYm9hcmRzKSxcbiAgICBhbGVydFJ1bGVzOiBlbnZJbnQoYFFVT1RBX1RJRVJfJHtUfV9BTEVSVF9SVUxFU2AsIGQuYWxlcnRSdWxlcyksXG4gICAgYWxlcnREZXN0aW5hdGlvbnM6IGVudkludChgUVVPVEFfVElFUl8ke1R9X0FMRVJUX0RFU1RJTkFUSU9OU2AsIGQuYWxlcnREZXN0aW5hdGlvbnMpLFxuICAgIGlkcENvbmZpZ3M6IGVudkludChgUVVPVEFfVElFUl8ke1R9X0lEUF9DT05GSUdTYCwgZC5pZHBDb25maWdzKSxcbiAgICBzZWF0czogZW52SW50KGBRVU9UQV9USUVSXyR7VH1fU0VBVFNgLCBkLnNlYXRzKSxcbiAgfTtcbn1cblxuLy8gTGFiZWxzIGFyZSBvdmVycmlkYWJsZSB2aWEgYFFVT1RBX1RJRVJfPFRJRVI+X0xBQkVMYCAoZGlzcGxheSBuYW1lIG9ubHkpLlxuZXhwb3J0IGNvbnN0IFFVT1RBX1RJRVJTOiBSZWNvcmQ8UXVvdGFUaWVyLCBRdW90YVRpZXJQcmVzZXQ+ID0ge1xuICBkZXZlbG9wZXI6IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9ERVZFTE9QRVJfTEFCRUwnLCAnRGV2ZWxvcGVyJyksIGxpbWl0czogdGllckxpbWl0cygnZGV2ZWxvcGVyJykgfSxcbiAgcHJvOiB7IGxhYmVsOiBlbnZTdHIoJ1FVT1RBX1RJRVJfUFJPX0xBQkVMJywgJ1BybycpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ3BybycpIH0sXG4gIHRlYW06IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9URUFNX0xBQkVMJywgJ1RlYW0nKSwgbGltaXRzOiB0aWVyTGltaXRzKCd0ZWFtJykgfSxcbiAgZW50ZXJwcmlzZTogeyBsYWJlbDogZW52U3RyKCdRVU9UQV9USUVSX0VOVEVSUFJJU0VfTEFCRUwnLCAnRW50ZXJwcmlzZScpLCBsaW1pdHM6IHRpZXJMaW1pdHMoJ2VudGVycHJpc2UnKSB9LFxuICB1bmxpbWl0ZWQ6IHsgbGFiZWw6IGVudlN0cignUVVPVEFfVElFUl9VTkxJTUlURURfTEFCRUwnLCAnVW5saW1pdGVkJyksIGxpbWl0czogdGllckxpbWl0cygndW5saW1pdGVkJykgfSxcbn07XG5cbi8qKiBBbGwgdmFsaWQgdGllciBuYW1lcyAoaW5jbC4gYHVubGltaXRlZGApLiBVc2VkIGZvciB2YWxpZGF0aW9uIG9mIGEgKnN0b3JlZCpcbiAqICB0aWVyIOKAlCBgdW5saW1pdGVkYCBpcyBhIHZhbGlkIHZhbHVlIGV2ZW4gdGhvdWdoIGl0J3MgbmV2ZXIgb2ZmZXJlZCBmb3Igc2FsZS4gKi9cbmV4cG9ydCBjb25zdCBWQUxJRF9USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBPYmplY3Qua2V5cyhRVU9UQV9USUVSUykgYXMgUXVvdGFUaWVyW107XG5cbi8qKiBUaGUgc3RhbmRhcmQsIGJpbGxpbmctc2VsZWN0YWJsZSB0aWVycyDigJQgdGhlIG9uZXMgb2ZmZXJlZCBhcyBwdXJjaGFzYWJsZSBwbGFuc1xuICogIGFuZCBzaG93biBpbiB0aWVyIHBpY2tlcnMuIERlcml2ZWQgYXMgXCJldmVyeSB2YWxpZCB0aWVyIGV4Y2VwdCBgdW5saW1pdGVkYFwiLFxuICogIHdoaWNoIGlzIHRoZSBiaWxsaW5nLURJU0FCTEVEIGRlZmF1bHQgYW5kIGlzIG5ldmVyIGRpc3BsYXllZC9zZWxlY3RhYmxlIHdoZW5cbiAqICBiaWxsaW5nIGlzIGVuYWJsZWQuIEtlcHQgRFJZIG9mZiBgVkFMSURfVElFUlNgIHNvIGFkZGluZyBhIHRpZXIgZmxvd3MgdGhyb3VnaC4gKi9cbmV4cG9ydCBjb25zdCBTVEFOREFSRF9USUVSUzogcmVhZG9ubHkgUXVvdGFUaWVyW10gPSBWQUxJRF9USUVSUy5maWx0ZXIoKHQpID0+IHQgIT09ICd1bmxpbWl0ZWQnKTtcblxuLyoqIFRpZXJzIHRoYXQgcGVybWl0IHRoZSBvcmcg4oaSIHRlYW0gaGllcmFyY2h5IChuZXN0aW5nIHRlYW1zIHVuZGVyIGEgcm9vdCkuIFRoZVxuICogIGJpbGxpbmctb2ZmIGB1bmxpbWl0ZWRgIHRpZXIgaXMgdGVhbS1jYXBhYmxlIChpdCdzIHRoZSBtb3N0IHBlcm1pc3NpdmUpOyB0aGVcbiAqICBlbnRyeS1sZXZlbCBgZGV2ZWxvcGVyYC9gcHJvYCB0aWVycyBhcmUgbm90LiBTaW5nbGUgc291cmNlIGZvciB0aGUgcGFyZW50LVxuICogIGVsaWdpYmlsaXR5ICsgZG93bmdyYWRlLW92ZXJjYXAgY2hlY2tzIHNvIHRoZXkgY2FuJ3QgZHJpZnQuICovXG5leHBvcnQgY29uc3QgVEVBTV9DQVBBQkxFX1RJRVJTOiByZWFkb25seSBRdW90YVRpZXJbXSA9IFsndGVhbScsICdlbnRlcnByaXNlJywgJ3VubGltaXRlZCddO1xuZXhwb3J0IGZ1bmN0aW9uIHRpZXJBbGxvd3NUZWFtcyh0aWVyOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIXRpZXIgJiYgKFRFQU1fQ0FQQUJMRV9USUVSUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModGllcik7XG59XG5cbi8qKiBXaGV0aGVyIHRoZSBiaWxsaW5nIHNlcnZpY2UgaXMgZW5hYmxlZCBpbiB0aGlzIGRlcGxveW1lbnQgKGBCSUxMSU5HX0VOQUJMRURgLFxuICogIG9wdC1vdXQgZGVmYXVsdC1vbiDigJQgbWlycm9ycyB0aGUgYmlsbGluZy9wbGF0Zm9ybSBjb25maWdzKS4gV2l0aCBiaWxsaW5nIE9GRlxuICogIHRoZXJlJ3Mgbm8gbWV0ZXJpbmcvZW5mb3JjZW1lbnQgc3VyZmFjZSwgc28gdGhlIGRlZmF1bHQgdGllciBpcyBgdW5saW1pdGVkYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JpbGxpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKHByb2Nlc3MuZW52LkJJTExJTkdfRU5BQkxFRCB8fCAndHJ1ZScpLnRvTG93ZXJDYXNlKCkgIT09ICdmYWxzZSc7XG59XG5cbi8qKlxuICogRGVmYXVsdCB0aWVyIGFzc2lnbmVkIHRvIG5ldyBvcmdhbml6YXRpb25zLlxuICogLSBCaWxsaW5nIERJU0FCTEVEIOKGkiBgdW5saW1pdGVkYCAobm90aGluZyBpcyBtZXRlcmVkLCBzbyBldmVyeXRoaW5nIGlzIHVuY2FwcGVkKS5cbiAqIC0gQmlsbGluZyBFTkFCTEVEICDihpIgYERFRkFVTFRfUVVPVEFfVElFUmAgaWYgaXQncyBhIHZhbGlkIHN0YW5kYXJkIHRpZXIsIGVsc2UgYGRldmVsb3BlcmAuXG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJRVI6IFF1b3RhVGllciA9ICFpc0JpbGxpbmdFbmFibGVkKClcbiAgPyAndW5saW1pdGVkJ1xuICA6IChpc1ZhbGlkVGllcihwcm9jZXNzLmVudi5ERUZBVUxUX1FVT1RBX1RJRVIgPz8gJycpICYmIHByb2Nlc3MuZW52LkRFRkFVTFRfUVVPVEFfVElFUiAhPT0gJ3VubGltaXRlZCdcbiAgICA/IChwcm9jZXNzLmVudi5ERUZBVUxUX1FVT1RBX1RJRVIgYXMgUXVvdGFUaWVyKVxuICAgIDogJ2RldmVsb3BlcicpO1xuXG4vKiogQ2hlY2sgd2hldGhlciBhIHN0cmluZyBpcyBhIHZhbGlkIFF1b3RhVGllci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkVGllcih2YWx1ZTogc3RyaW5nKTogdmFsdWUgaXMgUXVvdGFUaWVyIHtcbiAgLy8gVXNlIHRoZSBleHBsaWNpdCB0dXBsZSwgbm90IGB2YWx1ZSBpbiBRVU9UQV9USUVSU2A6IGBpbmAgd2Fsa3MgdGhlIHByb3RvdHlwZVxuICAvLyBjaGFpbiwgc28gaW5oZXJpdGVkIE9iamVjdCBrZXlzICgndG9TdHJpbmcnLCAnY29uc3RydWN0b3InLCDigKYpIHdvdWxkIHJldHVyblxuICAvLyB0cnVlIGFuZCB0aGVuIGBnZXRUaWVyTGltaXRzYCB3b3VsZCByZWFkIGAubGltaXRzYCBvZmYgYSBmdW5jdGlvbiDihpIgY3Jhc2guXG4gIC8vIGB0aWVyYCBpcyBhdHRhY2tlci1pbmZsdWVuY2VhYmxlIChKV1QgLyByZXF1ZXN0IGJvZHkgLyBERUZBVUxUX1FVT1RBX1RJRVIgZW52KS5cbiAgcmV0dXJuIChWQUxJRF9USUVSUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXModmFsdWUpO1xufVxuXG4vKiogR2V0IHRoZSBkZWZhdWx0IGxpbWl0cyBmb3IgYSBnaXZlbiB0aWVyIChmYWxscyBiYWNrIHRvIGRldmVsb3BlcikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGllckxpbWl0cyh0aWVyOiBzdHJpbmcpOiBRdW90YVRpZXJMaW1pdHMge1xuICByZXR1cm4gaXNWYWxpZFRpZXIodGllcikgPyBRVU9UQV9USUVSU1t0aWVyXS5saW1pdHM6IFFVT1RBX1RJRVJTLmRldmVsb3Blci5saW1pdHM7XG59XG4iXX0=
|
|
@@ -92,10 +92,29 @@ export declare const MESSAGE_MAX_ATTACHMENTS = 5;
|
|
|
92
92
|
export declare const MESSAGE_ATTACHMENT_MAX_MB: number;
|
|
93
93
|
export declare const MESSAGE_ATTACHMENT_MAX_BYTES: number;
|
|
94
94
|
/**
|
|
95
|
-
* Allow-list of attachment MIME types — common images + documents.
|
|
96
|
-
* excludes executables/scripts/HTML/SVG (stored-XSS / drive-by).
|
|
95
|
+
* Allow-list of attachment MIME types — common images + documents + zip/yaml/json.
|
|
96
|
+
* Deliberately excludes executables/scripts/HTML/SVG (stored-XSS / drive-by).
|
|
97
|
+
* zip is a download container (doesn't render in-browser); yaml/json are plain
|
|
98
|
+
* text — none carry the drive-by risk of the excluded types. Extend here.
|
|
97
99
|
*/
|
|
98
100
|
export declare const MESSAGE_ATTACHMENT_ALLOWED_MIME: ReadonlySet<string>;
|
|
101
|
+
/**
|
|
102
|
+
* Safe filename extensions. Browsers frequently send `application/octet-stream`
|
|
103
|
+
* for archives + config files (.tar/.gz/.tgz/.yaml/…) because they have no
|
|
104
|
+
* reliable registered MIME type, so the MIME allow-list alone rejects them. These
|
|
105
|
+
* extensions are accepted as a fallback ONLY when the reported MIME is that
|
|
106
|
+
* generic type (see isAllowedAttachmentType) — so a known render/execute MIME
|
|
107
|
+
* (image/svg+xml, text/html, …) is never rescued by a spoofed extension. Still
|
|
108
|
+
* excludes .html/.svg/.js/.exe/… (never listed here).
|
|
109
|
+
*/
|
|
110
|
+
export declare const MESSAGE_ATTACHMENT_ALLOWED_EXT: ReadonlySet<string>;
|
|
111
|
+
/**
|
|
112
|
+
* True if an attachment is accepted. Accepts by MIME allow-list, OR — when the
|
|
113
|
+
* browser reports the generic `application/octet-stream` (unknown binary) — by a
|
|
114
|
+
* safe filename extension. octet-stream is served as a download (never rendered),
|
|
115
|
+
* so the extension fallback can't turn into a stored-XSS vector.
|
|
116
|
+
*/
|
|
117
|
+
export declare function isAllowedAttachmentType(mimetype: string, filename: string): boolean;
|
|
99
118
|
/** Attachment metadata DTO returned to clients (never exposes the storage key). */
|
|
100
119
|
export interface MessageAttachmentDTO {
|
|
101
120
|
id: string;
|
|
@@ -61,18 +61,60 @@ export const MESSAGE_MAX_ATTACHMENTS = 5;
|
|
|
61
61
|
export const MESSAGE_ATTACHMENT_MAX_MB = Math.max(1, Number.parseInt(process.env.MESSAGE_ATTACHMENT_MAX_MB ?? '10', 10) || 10);
|
|
62
62
|
export const MESSAGE_ATTACHMENT_MAX_BYTES = MESSAGE_ATTACHMENT_MAX_MB * 1024 * 1024;
|
|
63
63
|
/**
|
|
64
|
-
* Allow-list of attachment MIME types — common images + documents.
|
|
65
|
-
* excludes executables/scripts/HTML/SVG (stored-XSS / drive-by).
|
|
64
|
+
* Allow-list of attachment MIME types — common images + documents + zip/yaml/json.
|
|
65
|
+
* Deliberately excludes executables/scripts/HTML/SVG (stored-XSS / drive-by).
|
|
66
|
+
* zip is a download container (doesn't render in-browser); yaml/json are plain
|
|
67
|
+
* text — none carry the drive-by risk of the excluded types. Extend here.
|
|
66
68
|
*/
|
|
67
69
|
export const MESSAGE_ATTACHMENT_ALLOWED_MIME = new Set([
|
|
68
70
|
'image/png', 'image/jpeg', 'image/gif', 'image/webp',
|
|
69
|
-
'application/pdf', 'text/plain', 'text/csv',
|
|
71
|
+
'application/pdf', 'text/plain', 'text/csv',
|
|
70
72
|
'application/msword',
|
|
71
73
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
72
74
|
'application/vnd.ms-excel',
|
|
73
75
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
74
76
|
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
|
77
|
+
// Archives (zip / gz / tar / tar.gz) — browsers report these variously by OS;
|
|
78
|
+
// cover the common variants. They download rather than render in-browser.
|
|
79
|
+
'application/zip', 'application/x-zip-compressed',
|
|
80
|
+
'application/gzip', 'application/x-gzip',
|
|
81
|
+
'application/x-tar', 'application/tar',
|
|
82
|
+
'application/x-compressed-tar',
|
|
83
|
+
// json (browsers may send application/json or text/json).
|
|
84
|
+
'application/json', 'text/json',
|
|
85
|
+
// yaml/yml — no single registered type; cover the common variants.
|
|
86
|
+
'application/x-yaml', 'application/yaml', 'text/yaml', 'text/x-yaml',
|
|
75
87
|
]);
|
|
88
|
+
/**
|
|
89
|
+
* Safe filename extensions. Browsers frequently send `application/octet-stream`
|
|
90
|
+
* for archives + config files (.tar/.gz/.tgz/.yaml/…) because they have no
|
|
91
|
+
* reliable registered MIME type, so the MIME allow-list alone rejects them. These
|
|
92
|
+
* extensions are accepted as a fallback ONLY when the reported MIME is that
|
|
93
|
+
* generic type (see isAllowedAttachmentType) — so a known render/execute MIME
|
|
94
|
+
* (image/svg+xml, text/html, …) is never rescued by a spoofed extension. Still
|
|
95
|
+
* excludes .html/.svg/.js/.exe/… (never listed here).
|
|
96
|
+
*/
|
|
97
|
+
export const MESSAGE_ATTACHMENT_ALLOWED_EXT = new Set([
|
|
98
|
+
'.png', '.jpg', '.jpeg', '.gif', '.webp',
|
|
99
|
+
'.pdf', '.txt', '.csv', '.doc', '.docx', '.xls', '.xlsx', '.ppt', '.pptx',
|
|
100
|
+
'.zip', '.gz', '.tgz', '.tar', '.json', '.yaml', '.yml',
|
|
101
|
+
]);
|
|
102
|
+
/**
|
|
103
|
+
* True if an attachment is accepted. Accepts by MIME allow-list, OR — when the
|
|
104
|
+
* browser reports the generic `application/octet-stream` (unknown binary) — by a
|
|
105
|
+
* safe filename extension. octet-stream is served as a download (never rendered),
|
|
106
|
+
* so the extension fallback can't turn into a stored-XSS vector.
|
|
107
|
+
*/
|
|
108
|
+
export function isAllowedAttachmentType(mimetype, filename) {
|
|
109
|
+
if (MESSAGE_ATTACHMENT_ALLOWED_MIME.has(mimetype))
|
|
110
|
+
return true;
|
|
111
|
+
if (mimetype !== 'application/octet-stream')
|
|
112
|
+
return false;
|
|
113
|
+
const dot = (filename || '').lastIndexOf('.');
|
|
114
|
+
if (dot < 0)
|
|
115
|
+
return false;
|
|
116
|
+
return MESSAGE_ATTACHMENT_ALLOWED_EXT.has(filename.slice(dot).toLowerCase());
|
|
117
|
+
}
|
|
76
118
|
/**
|
|
77
119
|
* Attachment ids to link to a message. Each is the id returned by a prior
|
|
78
120
|
* POST /messages/attachments upload; the create route links only ids that belong
|
|
@@ -111,4 +153,4 @@ export const MessageReplySchema = z.object({
|
|
|
111
153
|
export const MessageEditSchema = z.object({
|
|
112
154
|
content: z.string().min(1, 'Content is required').max(MESSAGE_CONTENT_MAX, `Content must be at most ${MESSAGE_CONTENT_MAX} characters`),
|
|
113
155
|
});
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1zY2hlbWFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vbWVzc2FnZS1zY2hlbWFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUzRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUUxRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFFMUU7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFckY7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztJQUN6RCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzlFLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFD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NUQsYUFBYSxFQUFFLG1CQUFtQjtDQUNuQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLDJCQUEyQixtQkFBbUIsYUFBYSxDQUFDO0lBQ3ZJLGFBQWEsRUFBRSxtQkFBbUI7Q0FDbkMsQ0FBQyxDQUFDO0FBRUg7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLDJCQUEyQixtQkFBbUIsYUFBYSxDQUFDO0NBQ3hJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEJhc2VGaWx0ZXJTY2hlbWEsIEJvb2xlYW5RdWVyeVNjaGVtYSB9IGZyb20gJy4vY29tbW9uLXNjaGVtYXMuanMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgdHlwZSBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VUeXBlU2NoZW1hID0gei5lbnVtKFsnYW5ub3VuY2VtZW50JywgJ2NvbnZlcnNhdGlvbiddKTtcblxuLyoqXG4gKiBNZXNzYWdlIHByaW9yaXR5IHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVByaW9yaXR5U2NoZW1hID0gei5lbnVtKFsnbm9ybWFsJywgJ2hpZ2gnLCAndXJnZW50J10pO1xuXG4vKipcbiAqIENoYW5uZWwvaW5ib3gtYnVja2V0IHNjaGVtYS4gT3Blbi1lbmRlZCBzdHJpbmcgdXAgdG8gNTAgY2hhcnMgc28gd2VcbiAqIGNhbiBhZGQgbmV3IGNoYW5uZWxzIChzdXBwb3J0LCBoZWxwLCBiaWxsaW5nLCDigKYpIHdpdGhvdXQgYSBzY2hlbWFcbiAqIG1pZ3JhdGlvbi4gQ29uc3RyYWluZWQgdG8gYS16LzAtOS9kYXNoL3VuZGVyc2NvcmUgZm9yIFVSTCBzYWZldHkgYW5kXG4gKiB0byBrZWVwIGZpbHRlciBjb25kaXRpb25zIHRyaXZpYWxseSBpbmRleGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlQ2hhbm5lbFNjaGVtYSA9IHouc3RyaW5nKCkubWluKDEpLm1heCg1MCkucmVnZXgoL15bYS16MC05Xy1dKyQvKTtcblxuLyoqXG4gKiBNZXNzYWdlIGZpbHRlciBzY2hlbWEgZm9yIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gKlxuICogQ29udmVudGlvbiBmb3IgYHRocmVhZElkYDpcbiAqIC0gT21pdHRlZCAodW5kZWZpbmVkKTogbm8gZmlsdGVyIGFwcGxpZWQg4oCUIHJldHVybnMgbWVzc2FnZXMgcmVnYXJkbGVzcyBvZiB0aHJlYWQuXG4gKiAtIGAncm9vdCdgIG9yIGBudWxsYDogZmlsdGVyIGZvciByb290IG1lc3NhZ2VzIG9ubHkgKHRyYW5zbGF0ZWQgdG8gYHRocmVhZElkIElTIE5VTExgXG4gKiAgIGJ5IHRoZSByb3V0ZSBsYXllciAvIHF1ZXJ5IGJ1aWxkZXIpLiBUaGUgc3RyaW5nIHNlbnRpbmVsIGAncm9vdCdgIGlzIHRoZVxuICogICB3aXJlIGZvcm0sIHNpbmNlIFVSTCBxdWVyeSBwYXJhbXMgY2FuJ3QgY2FycnkgYSB0cnVlIGBudWxsYC5cbiAqIC0gQSBVVUlEOiBmaWx0ZXIgZm9yIG1lc3NhZ2VzIGluIHRoYXQgc3BlY2lmaWMgdGhyZWFkLlxuICpcbiAqIGBpc1JlYWRgIGlzIGhvbm9yZWQgYnkgYGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnNgIGluIHBpcGVsaW5lLWRhdGEgdmlhIGFcbiAqIGBqc29uYl9leGlzdHMocmVhZF9ieSwgJG9yZ0lkKWAgY2hlY2sgb24gYG1lc3NhZ2VzLnJlYWRfYnlgIGZvciB0aGUgcmVxdWVzdGluZ1xuICogb3JnICh0aGUgZnVuY3Rpb24gZm9ybSwgbm90IHRoZSBgP2Agb3BlcmF0b3IsIHRvIGF2b2lkIHBhcmFtLWJpbmRpbmcgY2xhc2hlcykuXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlRmlsdGVyU2NoZW1hID0gQmFzZUZpbHRlclNjaGVtYS5leHRlbmQoe1xuICB0aHJlYWRJZDogei51bmlvbihbei5zdHJpbmcoKS51dWlkKCksIHoubGl0ZXJhbCgncm9vdCcpLCB6Lm51bGwoKV0pLm9wdGlvbmFsKCksXG4gIHJlY2lwaWVudE9yZ0lkOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlVHlwZTogTWVzc2FnZVR5cGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNSZWFkOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgcHJpb3JpdHk6IE1lc3NhZ2VQcmlvcml0eVNjaGVtYS5vcHRpb25hbCgpLFxuICBjaGFubmVsOiBNZXNzYWdlQ2hhbm5lbFNjaGVtYS5vcHRpb25hbCgpLFxuICAvLyBGcmVlLXRleHQgaW5ib3ggc2VhcmNoIG92ZXIgc3ViamVjdC9jb250ZW50LiBCb3VuZGVkIHNvIGEgcGF0aG9sb2dpY2FsIHRlcm1cbiAgLy8gY2FuJ3QgYmxvdyB1cCB0aGUgTElLRTsgdGhlIHF1ZXJ5IGJ1aWxkZXIgZXNjYXBlcyB3aWxkY2FyZHMgKyBpZ25vcmVzIGJsYW5rcy5cbiAgc2VhcmNoOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSkubWF4KDIwMCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIFVwcGVyIGJvdW5kcyBvbiBmcmVlLXRleHQgbWVzc2FnZSBmaWVsZHMuIFdpdGhvdXQgdGhlc2UgYW4gdW5ib3VuZGVkXG4gKiBzdWJqZWN0L2NvbnRlbnQgKGUuZy4gYSAxTUIgYW5ub3VuY2VtZW50KSBpcyBwZXJzaXN0ZWQgQU5EIFNTRS1icm9hZGNhc3QgdG9cbiAqIGV2ZXJ5IG9yZy4gYHN1YmplY3RgIG1hdGNoZXMgdGhlIGB2YXJjaGFyKDUwMClgIERCIGNvbHVtbiBzbyB3ZSByZWplY3QgcmF0aGVyXG4gKiB0aGFuIHNpbGVudGx5IHRydW5jYXRlOyBgY29udGVudGAgaXMgYSBgdGV4dGAgY29sdW1uIHdpdGggbm8gREIgYm91bmQsIHNvIHdlXG4gKiBjYXAgaXQgYXQgYSBzYW5lIDMyIEtpQiBhdCB0aGUgYXBwIGxheWVyLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9TVUJKRUNUX01BWCA9IDUwMDtcbmV4cG9ydCBjb25zdCBNRVNTQUdFX0NPTlRFTlRfTUFYID0gMzI3Njg7XG5cbi8qKiBNYXggYXR0YWNobWVudHMgbGlua2FibGUgdG8gYSBzaW5nbGUgbWVzc2FnZS9yZXBseS4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX01BWF9BVFRBQ0hNRU5UUyA9IDU7XG5cbi8qKlxuICogTWF4IGF0dGFjaG1lbnQgc2l6ZSAoTWlCKSDigJQgZW52LW92ZXJyaWRhYmxlLiBUaGUgdXBsb2FkIHJvdXRlIGVuZm9yY2VzIHRoaXNcbiAqIChtdWx0ZXIgYGZpbGVTaXplYCk7IGtlcHQgaGVyZSBzbyB0aGUgYm91bmQgbGl2ZXMgd2l0aCB0aGUgb3RoZXIgbWVzc2FnZVxuICogbGltaXRzIHJhdGhlciB0aGFuIG9ubHkgaW5saW5lIGluIHRoZSByb3V0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfQVRUQUNITUVOVF9NQVhfTUIgPSBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy5lbnYuTUVTU0FHRV9BVFRBQ0hNRU5UX01BWF9NQiA/PyAnMTAnLCAxMCkgfHwgMTApO1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfQVRUQUNITUVOVF9NQVhfQllURVMgPSBNRVNTQUdFX0FUVEFDSE1FTlRfTUFYX01CICogMTAyNCAqIDEwMjQ7XG5cbi8qKlxuICogQWxsb3ctbGlzdCBvZiBhdHRhY2htZW50IE1JTUUgdHlwZXMg4oCUIGNvbW1vbiBpbWFnZXMgKyBkb2N1bWVudHMuIERlbGliZXJhdGVseVxuICogZXhjbHVkZXMgZXhlY3V0YWJsZXMvc2NyaXB0cy9IVE1ML1NWRyAoc3RvcmVkLVhTUyAvIGRyaXZlLWJ5KS4gRXh0ZW5kIGhlcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0FUVEFDSE1FTlRfQUxMT1dFRF9NSU1FOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdpbWFnZS9wbmcnLCAnaW1hZ2UvanBlZycsICdpbWFnZS9naWYnLCAnaW1hZ2Uvd2VicCcsXG4gICdhcHBsaWNhdGlvbi9wZGYnLCAndGV4dC9wbGFpbicsICd0ZXh0L2NzdicsICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgJ2FwcGxpY2F0aW9uL21zd29yZCcsXG4gICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLFxuICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLFxuICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvbicsXG5dKTtcblxuLyoqIEF0dGFjaG1lbnQgbWV0YWRhdGEgRFRPIHJldHVybmVkIHRvIGNsaWVudHMgKG5ldmVyIGV4cG9zZXMgdGhlIHN0b3JhZ2Uga2V5KS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUF0dGFjaG1lbnREVE8ge1xuICBpZDogc3RyaW5nO1xuICBmaWxlbmFtZTogc3RyaW5nO1xuICBjb250ZW50VHlwZTogc3RyaW5nO1xuICBzaXplQnl0ZXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBdHRhY2htZW50IGlkcyB0byBsaW5rIHRvIGEgbWVzc2FnZS4gRWFjaCBpcyB0aGUgaWQgcmV0dXJuZWQgYnkgYSBwcmlvclxuICogUE9TVCAvbWVzc2FnZXMvYXR0YWNobWVudHMgdXBsb2FkOyB0aGUgY3JlYXRlIHJvdXRlIGxpbmtzIG9ubHkgaWRzIHRoYXQgYmVsb25nXG4gKiB0byB0aGUgY2FsbGVyIChvd24gb3JnICsgdXBsb2FkZXIpIGFuZCBhcmUgc3RpbGwgdW5hdHRhY2hlZC5cbiAqL1xuY29uc3QgQXR0YWNobWVudElkc1NjaGVtYSA9IHouYXJyYXkoei5zdHJpbmcoKS51dWlkKCkpLm1heChNRVNTQUdFX01BWF9BVFRBQ0hNRU5UUykub3B0aW9uYWwoKTtcblxuLyoqXG4gKiBNZXNzYWdlIGNyZWF0aW9uIHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZUNyZWF0ZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgcmVjaXBpZW50T3JnSWQ6IHouc3RyaW5nKCkubWluKDEsICdSZWNpcGllbnQgb3JnYW5pemF0aW9uIElEIGlzIHJlcXVpcmVkJyksXG4gIC8vIE9wdGlvbmFsIHBlci11c2VyIHRhcmdldGluZyBXSVRISU4gcmVjaXBpZW50T3JnSWQuIFdoZW4gc2V0LCBvbmx5IHRoaXMgdXNlclxuICAvLyBzZWVzIHRoZSBjb252ZXJzYXRpb24gKGVuZm9yY2VkIGluIGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnMpLiBDb252ZXJzYXRpb24tb25seVxuICAvLyBhbmQgcmVxdWlyZXMgYSBjb25jcmV0ZSByZWNpcGllbnQgb3JnIOKAlCB0aGUgcm91dGUgcmVqZWN0cyBpdCBvbiBhbm5vdW5jZW1lbnRzXG4gIC8vIGFuZCAnKicgYnJvYWRjYXN0cy4gQm91bmRlZCB0byB0aGUgcmVjaXBpZW50X3VzZXJfaWQgY29sdW1uIHdpZHRoLlxuICByZWNpcGllbnRVc2VySWQ6IHouc3RyaW5nKCkubWluKDEpLm1heCgyNTUpLm9wdGlvbmFsKCksXG4gIG1lc3NhZ2VUeXBlOiBNZXNzYWdlVHlwZVNjaGVtYS5vcHRpb25hbCgpLmRlZmF1bHQoJ2NvbnZlcnNhdGlvbicpLFxuICBjaGFubmVsOiBNZXNzYWdlQ2hhbm5lbFNjaGVtYS5vcHRpb25hbCgpLFxuICBzdWJqZWN0OiB6LnN0cmluZygpLm1pbigxLCAnU3ViamVjdCBpcyByZXF1aXJlZCcpLm1heChNRVNTQUdFX1NVQkpFQ1RfTUFYLCBgU3ViamVjdCBtdXN0IGJlIGF0IG1vc3QgJHtNRVNTQUdFX1NVQkpFQ1RfTUFYfSBjaGFyYWN0ZXJzYCksXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkubWluKDEsICdDb250ZW50IGlzIHJlcXVpcmVkJykubWF4KE1FU1NBR0VfQ09OVEVOVF9NQVgsIGBDb250ZW50IG11c3QgYmUgYXQgbW9zdCAke01FU1NBR0VfQ09OVEVOVF9NQVh9IGNoYXJhY3RlcnNgKSxcbiAgcHJpb3JpdHk6IE1lc3NhZ2VQcmlvcml0eVNjaGVtYS5vcHRpb25hbCgpLmRlZmF1bHQoJ25vcm1hbCcpLFxuICBhdHRhY2htZW50SWRzOiBBdHRhY2htZW50SWRzU2NoZW1hLFxufSk7XG5cbi8qKlxuICogTWVzc2FnZSByZXBseSBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VSZXBseVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoTUVTU0FHRV9DT05URU5UX01BWCwgYENvbnRlbnQgbXVzdCBiZSBhdCBtb3N0ICR7TUVTU0FHRV9DT05URU5UX01BWH0gY2hhcmFjdGVyc2ApLFxuICBhdHRhY2htZW50SWRzOiBBdHRhY2htZW50SWRzU2NoZW1hLFxufSk7XG5cbi8qKlxuICogRWRpdCBhbiBhbHJlYWR5LXNlbnQgbWVzc2FnZSdzIENPTlRFTlQgKGF1dGhvci1vbmx5LCBlbmZvcmNlZCBzZXJ2ZXItc2lkZSkuXG4gKiBPbmx5IHRoZSBib2R5IGlzIGVkaXRhYmxlIOKAlCBzdWJqZWN0L3JlY2lwaWVudC90eXBlL2F0dGFjaG1lbnRzIGFyZSBpbW11dGFibGVcbiAqIGFmdGVyIHNlbmQgKGNoYW5naW5nIHRoZW0gd291bGQgcmV3cml0ZSB0aGUgY29udmVyc2F0aW9uJ3Mgcm91dGluZy9tZWFuaW5nKS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VFZGl0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjb250ZW50OiB6LnN0cmluZygpLm1pbigxLCAnQ29udGVudCBpcyByZXF1aXJlZCcpLm1heChNRVNTQUdFX0NPTlRFTlRfTUFYLCBgQ29udGVudCBtdXN0IGJlIGF0IG1vc3QgJHtNRVNTQUdFX0NPTlRFTlRfTUFYfSBjaGFyYWN0ZXJzYCksXG59KTtcbiJdfQ==
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1zY2hlbWFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3ZhbGlkYXRpb24vbWVzc2FnZS1zY2hlbWFzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUN4QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUzRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUUxRTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFFMUU7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFckY7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztJQUN6RCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO0lBQzlFLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFD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QjtDQUNuQyxDQUFDLENBQUM7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLDJCQUEyQixtQkFBbUIsYUFBYSxDQUFDO0lBQ3ZJLGFBQWEsRUFBRSxtQkFBbUI7Q0FDbkMsQ0FBQyxDQUFDO0FBRUg7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDeEMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLDJCQUEyQixtQkFBbUIsYUFBYSxDQUFDO0NBQ3hJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyB6IH0gZnJvbSAnem9kJztcbmltcG9ydCB7IEJhc2VGaWx0ZXJTY2hlbWEsIEJvb2xlYW5RdWVyeVNjaGVtYSB9IGZyb20gJy4vY29tbW9uLXNjaGVtYXMuanMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgdHlwZSBzY2hlbWFcbiAqL1xuZXhwb3J0IGNvbnN0IE1lc3NhZ2VUeXBlU2NoZW1hID0gei5lbnVtKFsnYW5ub3VuY2VtZW50JywgJ2NvbnZlcnNhdGlvbiddKTtcblxuLyoqXG4gKiBNZXNzYWdlIHByaW9yaXR5IHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVByaW9yaXR5U2NoZW1hID0gei5lbnVtKFsnbm9ybWFsJywgJ2hpZ2gnLCAndXJnZW50J10pO1xuXG4vKipcbiAqIENoYW5uZWwvaW5ib3gtYnVja2V0IHNjaGVtYS4gT3Blbi1lbmRlZCBzdHJpbmcgdXAgdG8gNTAgY2hhcnMgc28gd2VcbiAqIGNhbiBhZGQgbmV3IGNoYW5uZWxzIChzdXBwb3J0LCBoZWxwLCBiaWxsaW5nLCDigKYpIHdpdGhvdXQgYSBzY2hlbWFcbiAqIG1pZ3JhdGlvbi4gQ29uc3RyYWluZWQgdG8gYS16LzAtOS9kYXNoL3VuZGVyc2NvcmUgZm9yIFVSTCBzYWZldHkgYW5kXG4gKiB0byBrZWVwIGZpbHRlciBjb25kaXRpb25zIHRyaXZpYWxseSBpbmRleGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlQ2hhbm5lbFNjaGVtYSA9IHouc3RyaW5nKCkubWluKDEpLm1heCg1MCkucmVnZXgoL15bYS16MC05Xy1dKyQvKTtcblxuLyoqXG4gKiBNZXNzYWdlIGZpbHRlciBzY2hlbWEgZm9yIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gKlxuICogQ29udmVudGlvbiBmb3IgYHRocmVhZElkYDpcbiAqIC0gT21pdHRlZCAodW5kZWZpbmVkKTogbm8gZmlsdGVyIGFwcGxpZWQg4oCUIHJldHVybnMgbWVzc2FnZXMgcmVnYXJkbGVzcyBvZiB0aHJlYWQuXG4gKiAtIGAncm9vdCdgIG9yIGBudWxsYDogZmlsdGVyIGZvciByb290IG1lc3NhZ2VzIG9ubHkgKHRyYW5zbGF0ZWQgdG8gYHRocmVhZElkIElTIE5VTExgXG4gKiAgIGJ5IHRoZSByb3V0ZSBsYXllciAvIHF1ZXJ5IGJ1aWxkZXIpLiBUaGUgc3RyaW5nIHNlbnRpbmVsIGAncm9vdCdgIGlzIHRoZVxuICogICB3aXJlIGZvcm0sIHNpbmNlIFVSTCBxdWVyeSBwYXJhbXMgY2FuJ3QgY2FycnkgYSB0cnVlIGBudWxsYC5cbiAqIC0gQSBVVUlEOiBmaWx0ZXIgZm9yIG1lc3NhZ2VzIGluIHRoYXQgc3BlY2lmaWMgdGhyZWFkLlxuICpcbiAqIGBpc1JlYWRgIGlzIGhvbm9yZWQgYnkgYGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnNgIGluIHBpcGVsaW5lLWRhdGEgdmlhIGFcbiAqIGBqc29uYl9leGlzdHMocmVhZF9ieSwgJG9yZ0lkKWAgY2hlY2sgb24gYG1lc3NhZ2VzLnJlYWRfYnlgIGZvciB0aGUgcmVxdWVzdGluZ1xuICogb3JnICh0aGUgZnVuY3Rpb24gZm9ybSwgbm90IHRoZSBgP2Agb3BlcmF0b3IsIHRvIGF2b2lkIHBhcmFtLWJpbmRpbmcgY2xhc2hlcykuXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlRmlsdGVyU2NoZW1hID0gQmFzZUZpbHRlclNjaGVtYS5leHRlbmQoe1xuICB0aHJlYWRJZDogei51bmlvbihbei5zdHJpbmcoKS51dWlkKCksIHoubGl0ZXJhbCgncm9vdCcpLCB6Lm51bGwoKV0pLm9wdGlvbmFsKCksXG4gIHJlY2lwaWVudE9yZ0lkOiB6LnN0cmluZygpLm1pbigxKS5vcHRpb25hbCgpLFxuICBtZXNzYWdlVHlwZTogTWVzc2FnZVR5cGVTY2hlbWEub3B0aW9uYWwoKSxcbiAgaXNSZWFkOiBCb29sZWFuUXVlcnlTY2hlbWEub3B0aW9uYWwoKSxcbiAgcHJpb3JpdHk6IE1lc3NhZ2VQcmlvcml0eVNjaGVtYS5vcHRpb25hbCgpLFxuICBjaGFubmVsOiBNZXNzYWdlQ2hhbm5lbFNjaGVtYS5vcHRpb25hbCgpLFxuICAvLyBGcmVlLXRleHQgaW5ib3ggc2VhcmNoIG92ZXIgc3ViamVjdC9jb250ZW50LiBCb3VuZGVkIHNvIGEgcGF0aG9sb2dpY2FsIHRlcm1cbiAgLy8gY2FuJ3QgYmxvdyB1cCB0aGUgTElLRTsgdGhlIHF1ZXJ5IGJ1aWxkZXIgZXNjYXBlcyB3aWxkY2FyZHMgKyBpZ25vcmVzIGJsYW5rcy5cbiAgc2VhcmNoOiB6LnN0cmluZygpLnRyaW0oKS5taW4oMSkubWF4KDIwMCkub3B0aW9uYWwoKSxcbn0pO1xuXG4vKipcbiAqIFVwcGVyIGJvdW5kcyBvbiBmcmVlLXRleHQgbWVzc2FnZSBmaWVsZHMuIFdpdGhvdXQgdGhlc2UgYW4gdW5ib3VuZGVkXG4gKiBzdWJqZWN0L2NvbnRlbnQgKGUuZy4gYSAxTUIgYW5ub3VuY2VtZW50KSBpcyBwZXJzaXN0ZWQgQU5EIFNTRS1icm9hZGNhc3QgdG9cbiAqIGV2ZXJ5IG9yZy4gYHN1YmplY3RgIG1hdGNoZXMgdGhlIGB2YXJjaGFyKDUwMClgIERCIGNvbHVtbiBzbyB3ZSByZWplY3QgcmF0aGVyXG4gKiB0aGFuIHNpbGVudGx5IHRydW5jYXRlOyBgY29udGVudGAgaXMgYSBgdGV4dGAgY29sdW1uIHdpdGggbm8gREIgYm91bmQsIHNvIHdlXG4gKiBjYXAgaXQgYXQgYSBzYW5lIDMyIEtpQiBhdCB0aGUgYXBwIGxheWVyLlxuICovXG5leHBvcnQgY29uc3QgTUVTU0FHRV9TVUJKRUNUX01BWCA9IDUwMDtcbmV4cG9ydCBjb25zdCBNRVNTQUdFX0NPTlRFTlRfTUFYID0gMzI3Njg7XG5cbi8qKiBNYXggYXR0YWNobWVudHMgbGlua2FibGUgdG8gYSBzaW5nbGUgbWVzc2FnZS9yZXBseS4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX01BWF9BVFRBQ0hNRU5UUyA9IDU7XG5cbi8qKlxuICogTWF4IGF0dGFjaG1lbnQgc2l6ZSAoTWlCKSDigJQgZW52LW92ZXJyaWRhYmxlLiBUaGUgdXBsb2FkIHJvdXRlIGVuZm9yY2VzIHRoaXNcbiAqIChtdWx0ZXIgYGZpbGVTaXplYCk7IGtlcHQgaGVyZSBzbyB0aGUgYm91bmQgbGl2ZXMgd2l0aCB0aGUgb3RoZXIgbWVzc2FnZVxuICogbGltaXRzIHJhdGhlciB0aGFuIG9ubHkgaW5saW5lIGluIHRoZSByb3V0ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfQVRUQUNITUVOVF9NQVhfTUIgPSBNYXRoLm1heCgxLCBOdW1iZXIucGFyc2VJbnQocHJvY2Vzcy5lbnYuTUVTU0FHRV9BVFRBQ0hNRU5UX01BWF9NQiA/PyAnMTAnLCAxMCkgfHwgMTApO1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfQVRUQUNITUVOVF9NQVhfQllURVMgPSBNRVNTQUdFX0FUVEFDSE1FTlRfTUFYX01CICogMTAyNCAqIDEwMjQ7XG5cbi8qKlxuICogQWxsb3ctbGlzdCBvZiBhdHRhY2htZW50IE1JTUUgdHlwZXMg4oCUIGNvbW1vbiBpbWFnZXMgKyBkb2N1bWVudHMgKyB6aXAveWFtbC9qc29uLlxuICogRGVsaWJlcmF0ZWx5IGV4Y2x1ZGVzIGV4ZWN1dGFibGVzL3NjcmlwdHMvSFRNTC9TVkcgKHN0b3JlZC1YU1MgLyBkcml2ZS1ieSkuXG4gKiB6aXAgaXMgYSBkb3dubG9hZCBjb250YWluZXIgKGRvZXNuJ3QgcmVuZGVyIGluLWJyb3dzZXIpOyB5YW1sL2pzb24gYXJlIHBsYWluXG4gKiB0ZXh0IOKAlCBub25lIGNhcnJ5IHRoZSBkcml2ZS1ieSByaXNrIG9mIHRoZSBleGNsdWRlZCB0eXBlcy4gRXh0ZW5kIGhlcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0FUVEFDSE1FTlRfQUxMT1dFRF9NSU1FOiBSZWFkb25seVNldDxzdHJpbmc+ID0gbmV3IFNldChbXG4gICdpbWFnZS9wbmcnLCAnaW1hZ2UvanBlZycsICdpbWFnZS9naWYnLCAnaW1hZ2Uvd2VicCcsXG4gICdhcHBsaWNhdGlvbi9wZGYnLCAndGV4dC9wbGFpbicsICd0ZXh0L2NzdicsXG4gICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnLFxuICAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLFxuICAvLyBBcmNoaXZlcyAoemlwIC8gZ3ogLyB0YXIgLyB0YXIuZ3opIOKAlCBicm93c2VycyByZXBvcnQgdGhlc2UgdmFyaW91c2x5IGJ5IE9TO1xuICAvLyBjb3ZlciB0aGUgY29tbW9uIHZhcmlhbnRzLiBUaGV5IGRvd25sb2FkIHJhdGhlciB0aGFuIHJlbmRlciBpbi1icm93c2VyLlxuICAnYXBwbGljYXRpb24vemlwJywgJ2FwcGxpY2F0aW9uL3gtemlwLWNvbXByZXNzZWQnLFxuICAnYXBwbGljYXRpb24vZ3ppcCcsICdhcHBsaWNhdGlvbi94LWd6aXAnLFxuICAnYXBwbGljYXRpb24veC10YXInLCAnYXBwbGljYXRpb24vdGFyJyxcbiAgJ2FwcGxpY2F0aW9uL3gtY29tcHJlc3NlZC10YXInLFxuICAvLyBqc29uIChicm93c2VycyBtYXkgc2VuZCBhcHBsaWNhdGlvbi9qc29uIG9yIHRleHQvanNvbikuXG4gICdhcHBsaWNhdGlvbi9qc29uJywgJ3RleHQvanNvbicsXG4gIC8vIHlhbWwveW1sIOKAlCBubyBzaW5nbGUgcmVnaXN0ZXJlZCB0eXBlOyBjb3ZlciB0aGUgY29tbW9uIHZhcmlhbnRzLlxuICAnYXBwbGljYXRpb24veC15YW1sJywgJ2FwcGxpY2F0aW9uL3lhbWwnLCAndGV4dC95YW1sJywgJ3RleHQveC15YW1sJyxcbl0pO1xuXG4vKipcbiAqIFNhZmUgZmlsZW5hbWUgZXh0ZW5zaW9ucy4gQnJvd3NlcnMgZnJlcXVlbnRseSBzZW5kIGBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1gXG4gKiBmb3IgYXJjaGl2ZXMgKyBjb25maWcgZmlsZXMgKC50YXIvLmd6Ly50Z3ovLnlhbWwv4oCmKSBiZWNhdXNlIHRoZXkgaGF2ZSBub1xuICogcmVsaWFibGUgcmVnaXN0ZXJlZCBNSU1FIHR5cGUsIHNvIHRoZSBNSU1FIGFsbG93LWxpc3QgYWxvbmUgcmVqZWN0cyB0aGVtLiBUaGVzZVxuICogZXh0ZW5zaW9ucyBhcmUgYWNjZXB0ZWQgYXMgYSBmYWxsYmFjayBPTkxZIHdoZW4gdGhlIHJlcG9ydGVkIE1JTUUgaXMgdGhhdFxuICogZ2VuZXJpYyB0eXBlIChzZWUgaXNBbGxvd2VkQXR0YWNobWVudFR5cGUpIOKAlCBzbyBhIGtub3duIHJlbmRlci9leGVjdXRlIE1JTUVcbiAqIChpbWFnZS9zdmcreG1sLCB0ZXh0L2h0bWwsIOKApikgaXMgbmV2ZXIgcmVzY3VlZCBieSBhIHNwb29mZWQgZXh0ZW5zaW9uLiBTdGlsbFxuICogZXhjbHVkZXMgLmh0bWwvLnN2Zy8uanMvLmV4ZS/igKYgKG5ldmVyIGxpc3RlZCBoZXJlKS5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfQVRUQUNITUVOVF9BTExPV0VEX0VYVDogUmVhZG9ubHlTZXQ8c3RyaW5nPiA9IG5ldyBTZXQoW1xuICAnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5naWYnLCAnLndlYnAnLFxuICAnLnBkZicsICcudHh0JywgJy5jc3YnLCAnLmRvYycsICcuZG9jeCcsICcueGxzJywgJy54bHN4JywgJy5wcHQnLCAnLnBwdHgnLFxuICAnLnppcCcsICcuZ3onLCAnLnRneicsICcudGFyJywgJy5qc29uJywgJy55YW1sJywgJy55bWwnLFxuXSk7XG5cbi8qKlxuICogVHJ1ZSBpZiBhbiBhdHRhY2htZW50IGlzIGFjY2VwdGVkLiBBY2NlcHRzIGJ5IE1JTUUgYWxsb3ctbGlzdCwgT1Ig4oCUIHdoZW4gdGhlXG4gKiBicm93c2VyIHJlcG9ydHMgdGhlIGdlbmVyaWMgYGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbWAgKHVua25vd24gYmluYXJ5KSDigJQgYnkgYVxuICogc2FmZSBmaWxlbmFtZSBleHRlbnNpb24uIG9jdGV0LXN0cmVhbSBpcyBzZXJ2ZWQgYXMgYSBkb3dubG9hZCAobmV2ZXIgcmVuZGVyZWQpLFxuICogc28gdGhlIGV4dGVuc2lvbiBmYWxsYmFjayBjYW4ndCB0dXJuIGludG8gYSBzdG9yZWQtWFNTIHZlY3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWxsb3dlZEF0dGFjaG1lbnRUeXBlKG1pbWV0eXBlOiBzdHJpbmcsIGZpbGVuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKE1FU1NBR0VfQVRUQUNITUVOVF9BTExPV0VEX01JTUUuaGFzKG1pbWV0eXBlKSkgcmV0dXJuIHRydWU7XG4gIGlmIChtaW1ldHlwZSAhPT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZG90ID0gKGZpbGVuYW1lIHx8ICcnKS5sYXN0SW5kZXhPZignLicpO1xuICBpZiAoZG90IDwgMCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gTUVTU0FHRV9BVFRBQ0hNRU5UX0FMTE9XRURfRVhULmhhcyhmaWxlbmFtZS5zbGljZShkb3QpLnRvTG93ZXJDYXNlKCkpO1xufVxuXG4vKiogQXR0YWNobWVudCBtZXRhZGF0YSBEVE8gcmV0dXJuZWQgdG8gY2xpZW50cyAobmV2ZXIgZXhwb3NlcyB0aGUgc3RvcmFnZSBrZXkpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlQXR0YWNobWVudERUTyB7XG4gIGlkOiBzdHJpbmc7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG4gIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gIHNpemVCeXRlczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEF0dGFjaG1lbnQgaWRzIHRvIGxpbmsgdG8gYSBtZXNzYWdlLiBFYWNoIGlzIHRoZSBpZCByZXR1cm5lZCBieSBhIHByaW9yXG4gKiBQT1NUIC9tZXNzYWdlcy9hdHRhY2htZW50cyB1cGxvYWQ7IHRoZSBjcmVhdGUgcm91dGUgbGlua3Mgb25seSBpZHMgdGhhdCBiZWxvbmdcbiAqIHRvIHRoZSBjYWxsZXIgKG93biBvcmcgKyB1cGxvYWRlcikgYW5kIGFyZSBzdGlsbCB1bmF0dGFjaGVkLlxuICovXG5jb25zdCBBdHRhY2htZW50SWRzU2NoZW1hID0gei5hcnJheSh6LnN0cmluZygpLnV1aWQoKSkubWF4KE1FU1NBR0VfTUFYX0FUVEFDSE1FTlRTKS5vcHRpb25hbCgpO1xuXG4vKipcbiAqIE1lc3NhZ2UgY3JlYXRpb24gc2NoZW1hXG4gKi9cbmV4cG9ydCBjb25zdCBNZXNzYWdlQ3JlYXRlU2NoZW1hID0gei5vYmplY3Qoe1xuICByZWNpcGllbnRPcmdJZDogei5zdHJpbmcoKS5taW4oMSwgJ1JlY2lwaWVudCBvcmdhbml6YXRpb24gSUQgaXMgcmVxdWlyZWQnKSxcbiAgLy8gT3B0aW9uYWwgcGVyLXVzZXIgdGFyZ2V0aW5nIFdJVEhJTiByZWNpcGllbnRPcmdJZC4gV2hlbiBzZXQsIG9ubHkgdGhpcyB1c2VyXG4gIC8vIHNlZXMgdGhlIGNvbnZlcnNhdGlvbiAoZW5mb3JjZWQgaW4gYnVpbGRNZXNzYWdlQ29uZGl0aW9ucykuIENvbnZlcnNhdGlvbi1vbmx5XG4gIC8vIGFuZCByZXF1aXJlcyBhIGNvbmNyZXRlIHJlY2lwaWVudCBvcmcg4oCUIHRoZSByb3V0ZSByZWplY3RzIGl0IG9uIGFubm91bmNlbWVudHNcbiAgLy8gYW5kICcqJyBicm9hZGNhc3RzLiBCb3VuZGVkIHRvIHRoZSByZWNpcGllbnRfdXNlcl9pZCBjb2x1bW4gd2lkdGguXG4gIHJlY2lwaWVudFVzZXJJZDogei5zdHJpbmcoKS5taW4oMSkubWF4KDI1NSkub3B0aW9uYWwoKSxcbiAgbWVzc2FnZVR5cGU6IE1lc3NhZ2VUeXBlU2NoZW1hLm9wdGlvbmFsKCkuZGVmYXVsdCgnY29udmVyc2F0aW9uJyksXG4gIGNoYW5uZWw6IE1lc3NhZ2VDaGFubmVsU2NoZW1hLm9wdGlvbmFsKCksXG4gIHN1YmplY3Q6IHouc3RyaW5nKCkubWluKDEsICdTdWJqZWN0IGlzIHJlcXVpcmVkJykubWF4KE1FU1NBR0VfU1VCSkVDVF9NQVgsIGBTdWJqZWN0IG11c3QgYmUgYXQgbW9zdCAke01FU1NBR0VfU1VCSkVDVF9NQVh9IGNoYXJhY3RlcnNgKSxcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoTUVTU0FHRV9DT05URU5UX01BWCwgYENvbnRlbnQgbXVzdCBiZSBhdCBtb3N0ICR7TUVTU0FHRV9DT05URU5UX01BWH0gY2hhcmFjdGVyc2ApLFxuICBwcmlvcml0eTogTWVzc2FnZVByaW9yaXR5U2NoZW1hLm9wdGlvbmFsKCkuZGVmYXVsdCgnbm9ybWFsJyksXG4gIGF0dGFjaG1lbnRJZHM6IEF0dGFjaG1lbnRJZHNTY2hlbWEsXG59KTtcblxuLyoqXG4gKiBNZXNzYWdlIHJlcGx5IHNjaGVtYVxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZVJlcGx5U2NoZW1hID0gei5vYmplY3Qoe1xuICBjb250ZW50OiB6LnN0cmluZygpLm1pbigxLCAnQ29udGVudCBpcyByZXF1aXJlZCcpLm1heChNRVNTQUdFX0NPTlRFTlRfTUFYLCBgQ29udGVudCBtdXN0IGJlIGF0IG1vc3QgJHtNRVNTQUdFX0NPTlRFTlRfTUFYfSBjaGFyYWN0ZXJzYCksXG4gIGF0dGFjaG1lbnRJZHM6IEF0dGFjaG1lbnRJZHNTY2hlbWEsXG59KTtcblxuLyoqXG4gKiBFZGl0IGFuIGFscmVhZHktc2VudCBtZXNzYWdlJ3MgQ09OVEVOVCAoYXV0aG9yLW9ubHksIGVuZm9yY2VkIHNlcnZlci1zaWRlKS5cbiAqIE9ubHkgdGhlIGJvZHkgaXMgZWRpdGFibGUg4oCUIHN1YmplY3QvcmVjaXBpZW50L3R5cGUvYXR0YWNobWVudHMgYXJlIGltbXV0YWJsZVxuICogYWZ0ZXIgc2VuZCAoY2hhbmdpbmcgdGhlbSB3b3VsZCByZXdyaXRlIHRoZSBjb252ZXJzYXRpb24ncyByb3V0aW5nL21lYW5pbmcpLlxuICovXG5leHBvcnQgY29uc3QgTWVzc2FnZUVkaXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkubWluKDEsICdDb250ZW50IGlzIHJlcXVpcmVkJykubWF4KE1FU1NBR0VfQ09OVEVOVF9NQVgsIGBDb250ZW50IG11c3QgYmUgYXQgbW9zdCAke01FU1NBR0VfQ09OVEVOVF9NQVh9IGNoYXJhY3RlcnNgKSxcbn0pO1xuIl19
|