@kaspernj/api-maker 1.0.2166 → 1.0.2167
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/build/devise.d.ts +12 -4
- package/build/devise.d.ts.map +1 -1
- package/build/devise.js +18 -3
- package/package.json +1 -1
package/build/devise.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export default class ApiMakerDevise {
|
|
|
32
32
|
* @param {string} username
|
|
33
33
|
* @param {string} password
|
|
34
34
|
* @param {DeviseScopeArgs} args
|
|
35
|
-
* @returns {Promise<{model: import("./base-model.js").default
|
|
35
|
+
* @returns {Promise<{model: import("./base-model.js").default, response: DeviseSignInResponse}>}
|
|
36
36
|
*/
|
|
37
37
|
static signIn(username: string, password: string, args?: DeviseScopeArgs): Promise<{
|
|
38
38
|
model: {
|
|
@@ -135,7 +135,7 @@ export default class ApiMakerDevise {
|
|
|
135
135
|
getModel: (relationshipType: string, relationshipId: number | string) => /*elided*/ any;
|
|
136
136
|
}): void;
|
|
137
137
|
primaryKey(): number | string;
|
|
138
|
-
}
|
|
138
|
+
};
|
|
139
139
|
response: DeviseSignInResponse;
|
|
140
140
|
}>;
|
|
141
141
|
/**
|
|
@@ -147,10 +147,18 @@ export default class ApiMakerDevise {
|
|
|
147
147
|
static persistSession(args?: DeviseScopeArgs): Promise<DeviseSessionStatusResult>;
|
|
148
148
|
/**
|
|
149
149
|
* Updates the locally cached current model for one scope.
|
|
150
|
-
*
|
|
150
|
+
*
|
|
151
|
+
* Always requires a real model instance. Writing a falsy value here used to
|
|
152
|
+
* be a silent foot-gun: when a caller awaited a query that returned
|
|
153
|
+
* `undefined` (for example `Collection#first()` on an empty result) and
|
|
154
|
+
* passed the value through, the scope cache flipped to "signed out" without
|
|
155
|
+
* any indication, dropping the user back on the sign-in screen right after
|
|
156
|
+
* a successful sign-in. Use `Devise.setSignedOut({scope})` to sign out.
|
|
157
|
+
*
|
|
158
|
+
* @param {NonNullable<DeviseCurrentScope>} model
|
|
151
159
|
* @param {DeviseScopeArgs} args
|
|
152
160
|
*/
|
|
153
|
-
static updateSession(model: DeviseCurrentScope
|
|
161
|
+
static updateSession(model: NonNullable<DeviseCurrentScope>, args?: DeviseScopeArgs): void;
|
|
154
162
|
/**
|
|
155
163
|
* Marks one scope as signed out in the local current-model cache.
|
|
156
164
|
* @param {DeviseScopeArgs} args
|
package/build/devise.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devise.d.ts","sourceRoot":"/src/","sources":["devise.js"],"names":[],"mappings":"AAmDA,sBAAsB;AACtB;IACE;;;;OAIG;IACH,8BAHW,eAAe,GACb,IAAI,CAIhB;IAED,gCAAgC;IAChC,kBADc,cAAc,CAO3B;IAED;;;OAGG;IACH,iBAFa,OAAO,MAAM,CAIzB;IAED;;;;OAIG;IACH,2BAHW,MAAM,SACN,eAAe,QAezB;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACJ,WAAW,CAOvB;IAED,0BAA0B;IAC1B,2BADc,MAAM,EAAE,CAGrB;IAED;;;;;;OAMG;IACH,wBALW,MAAM,YACN,MAAM,SACN,eAAe,GACb,OAAO,CAAC;QAAC,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"devise.d.ts","sourceRoot":"/src/","sources":["devise.js"],"names":[],"mappings":"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"}
|
package/build/devise.js
CHANGED
|
@@ -105,7 +105,7 @@ export default class ApiMakerDevise {
|
|
|
105
105
|
* @param {string} username
|
|
106
106
|
* @param {string} password
|
|
107
107
|
* @param {DeviseScopeArgs} args
|
|
108
|
-
* @returns {Promise<{model: import("./base-model.js").default
|
|
108
|
+
* @returns {Promise<{model: import("./base-model.js").default, response: DeviseSignInResponse}>}
|
|
109
109
|
*/
|
|
110
110
|
static async signIn(username, password, args = {}) {
|
|
111
111
|
if (!args.scope)
|
|
@@ -117,6 +117,9 @@ export default class ApiMakerDevise {
|
|
|
117
117
|
let model = response.model;
|
|
118
118
|
if (Array.isArray(model))
|
|
119
119
|
model = model[0];
|
|
120
|
+
if (!model) {
|
|
121
|
+
throw new Error(`Devise.signIn: Devise::SignIn response for scope "${args.scope}" did not include a model`);
|
|
122
|
+
}
|
|
120
123
|
await ApiMakerDevise.syncSessionStatusAndRefreshWebsocket({
|
|
121
124
|
httpResponse: response,
|
|
122
125
|
scope: args.scope,
|
|
@@ -153,12 +156,24 @@ export default class ApiMakerDevise {
|
|
|
153
156
|
}
|
|
154
157
|
/**
|
|
155
158
|
* Updates the locally cached current model for one scope.
|
|
156
|
-
*
|
|
159
|
+
*
|
|
160
|
+
* Always requires a real model instance. Writing a falsy value here used to
|
|
161
|
+
* be a silent foot-gun: when a caller awaited a query that returned
|
|
162
|
+
* `undefined` (for example `Collection#first()` on an empty result) and
|
|
163
|
+
* passed the value through, the scope cache flipped to "signed out" without
|
|
164
|
+
* any indication, dropping the user back on the sign-in screen right after
|
|
165
|
+
* a successful sign-in. Use `Devise.setSignedOut({scope})` to sign out.
|
|
166
|
+
*
|
|
167
|
+
* @param {NonNullable<DeviseCurrentScope>} model
|
|
157
168
|
* @param {DeviseScopeArgs} args
|
|
158
169
|
*/
|
|
159
170
|
static updateSession(model, args = {}) {
|
|
160
171
|
if (!args.scope)
|
|
161
172
|
args.scope = "user";
|
|
173
|
+
if (!model) {
|
|
174
|
+
throw new Error(`Devise.updateSession was called with a falsy model for scope "${args.scope}". ` +
|
|
175
|
+
"Use Devise.setSignedOut({scope}) to sign out instead.");
|
|
176
|
+
}
|
|
162
177
|
const camelizedScopeName = inflection.camelize(args.scope, true);
|
|
163
178
|
ApiMakerDevise.current().currents[camelizedScopeName] = model;
|
|
164
179
|
}
|
|
@@ -295,4 +310,4 @@ export default class ApiMakerDevise {
|
|
|
295
310
|
return modelInstance;
|
|
296
311
|
}
|
|
297
312
|
}
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aXNlLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJkZXZpc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUNaLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBLENBQUMsbUNBQW1DO0FBQzVFLE9BQU8sbUJBQW1CLE1BQU0sNEJBQTRCLENBQUE7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNuQyxPQUFPLFlBQVksTUFBTSxtQkFBbUIsQ0FBQSxDQUFDLG1DQUFtQztBQUNoRixPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxpQkFBaUIsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLG9CQUFvQixNQUFNLDZCQUE2QixDQUFBLENBQUMsbUNBQW1DO0FBQ2xHLE9BQU8sUUFBUSxNQUFNLGVBQWUsQ0FBQSxDQUFDLG1DQUFtQztBQUV4RSxpSEFBaUg7QUFDakgsK0RBQStEO0FBQy9EOzs7Ozs7R0FNRztBQUNILHVIQUF1SDtBQUN2SCxvSkFBb0o7QUFDcEosMEhBQTBIO0FBQzFILDZFQUE2RTtBQUU3RSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWM7SUFBRSxVQUFVLENBQUMsY0FBYyxHQUFHLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFBO0FBRXhFLE1BQU0sTUFBTSxHQUFHLG1DQUFtQyxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBRTlFLG1CQUFtQjtBQUNuQixNQUFNLFdBQVc7SUFDZjs7OztPQUlHO0lBQ0gsWUFBWSxLQUFLLEVBQUUsSUFBSTtRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFB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Q3JELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxxQkFBcUIsQ0FBQyxLQUFLO1FBQ3pCLElBQUksVUFBVSxDQUFDLHFCQUFxQixJQUFJLEtBQUssSUFBSSxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNsRixPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUE7UUFDYixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRXpELElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTyxJQUFJLENBQUE7UUFFM0IsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUVyRCxxREFBcUQ7UUFDckQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUFFLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTdELE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzNDLE1BQU0sYUFBYSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBQyxDQUFDLENBQUE7UUFFN0QsT0FBTyxhQUFhLENBQUE7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCBDYWJsZUNvbm5lY3Rpb25Qb29sIGZyb20gXCIuL2NhYmxlLWNvbm5lY3Rpb24tcG9vbC5qc1wiXG5pbXBvcnQge2NyZWF0ZUNvbnRleHR9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgRGVzZXJpYWxpemVyIGZyb20gXCIuL2Rlc2VyaWFsaXplci5qc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5pbXBvcnQgZXZlbnRzIGZyb20gXCIuL2V2ZW50cy5qc1wiXG5pbXBvcnQgbW9kZWxDbGFzc1JlcXVpcmUgZnJvbSBcIi4vbW9kZWwtY2xhc3MtcmVxdWlyZS5qc1wiXG5pbXBvcnQgU2Vzc2lvblN0YXR1c1VwZGF0ZXIgZnJvbSBcIi4vc2Vzc2lvbi1zdGF0dXMtdXBkYXRlci5qc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5pbXBvcnQgU2VydmljZXMgZnJvbSBcIi4vc2VydmljZXMuanNcIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuXG4vKiogQHR5cGVkZWYge3tzY29wZXM/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiwgY3VycmVudEFwaU1ha2VyRGV2aXNlPzogQXBpTWFrZXJEZXZpc2V9fSBBcGlNYWtlckRldmlzZVNoYXJlZCAqL1xuLyoqIEB0eXBlZGVmIHt7c2lnbmVkX2luOiBib29sZWFufX0gRGV2aXNlU2Vzc2lvblN0YXR1c1Njb3BlICovXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IERldmlzZVNlc3Npb25TdGF0dXNSZXN1bHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY3NyZl90b2tlbl1cbiAqIEBwcm9wZXJ0eSB7UmVjb3JkPHN0cmluZywgRGV2aXNlU2Vzc2lvblN0YXR1c1Njb3BlPn0gc2NvcGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3NoYWRvd19zZXNzaW9uX3Rva2VuXVxuICogQHByb3BlcnR5IHtEZXZpc2VTZXNzaW9uU3RhdHVzUmVzdWx0fSBbc2Vzc2lvbl9zdGF0dXNdXG4gKi9cbi8qKiBAdHlwZWRlZiB7e3JlbWVtYmVyTWU/OiBib29sZWFuLCBzY29wZT86IHN0cmluZywgc2lnbmVkSW4/OiBib29sZWFuLCBza2lwU2lnbkluRXZlbnQ/OiBib29sZWFufX0gRGV2aXNlU2NvcGVBcmdzICovXG4vKiogQHR5cGVkZWYge0RldmlzZVNlc3Npb25TdGF0dXNSZXN1bHQgJiB7bW9kZWw/OiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCB8IGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0W119fSBEZXZpc2VTaWduSW5SZXNwb25zZSAqL1xuLyoqIEB0eXBlZGVmIHt7aHR0cFJlc3BvbnNlOiBEZXZpc2VTZXNzaW9uU3RhdHVzUmVzdWx0LCBzY29wZTogc3RyaW5nLCB3ZWJzb2NrZXRBcmdzOiBEZXZpc2VTY29wZUFyZ3N9fSBTeW5jU2Vzc2lvbkFyZ3MgKi9cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi9iYXNlLW1vZGVsLmpzXCIpLmRlZmF1bHQgfCBudWxsfSBEZXZpc2VDdXJyZW50U2NvcGUgKi9cblxuaWYgKCFnbG9iYWxUaGlzLkFwaU1ha2VyRGV2aXNlKSBnbG9iYWxUaGlzLkFwaU1ha2VyRGV2aXNlID0ge3Njb3Blczoge319XG5cbmNvbnN0IHNoYXJlZCA9IC8qKiBAdHlwZSB7QXBpTWFrZXJEZXZpc2VTaGFyZWR9ICovIChnbG9iYWxUaGlzLkFwaU1ha2VyRGV2aXNlKVxuXG4vKiogRGV2aXNlU2NvcGUuICovXG5jbGFzcyBEZXZpc2VTY29wZSB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlXG4gICAqIEBwYXJhbSB7RGV2aXNlU2NvcGVBcmdzfSBhcmdzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZSwgYXJncykge1xuICAgIHRoaXMuYXJncyA9IGFyZ3NcbiAgICB0aGlzLmNvbnRleHQgPSBjcmVhdGVDb250ZXh0KHVuZGVmaW5lZClcbiAgICB0aGlzLnNjb3BlID0gc2NvcGVcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgUHJvdmlkZXIgd3JpdGVzIGEgYHtsb2FkZWQsIG1vZGVsfWAgd3JhcHBlciAoc2VlXG4gICAqIGBVc2VDdXJyZW50VXNlckNvbnRleHRgKTsgYHVzZUN1cnJlbnRVc2VyYCB1bndyYXBzIGl0IG9uIHJlYWQuIFRoZVxuICAgKiBjb250ZXh0IHR5cGUgaXMgdGhlIHdyYXBwZXIsIG5vdCB0aGUgcmF3IG1vZGVsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7aW1wb3J0KFwicmVhY3RcIikuQ29udGV4dDxpbXBvcnQoXCIuL3VzZS1jdXJyZW50LXVzZXIuanNcIikuQ3VycmVudFVzZXJDb250ZXh0VmFsdWUgfCB1bmRlZmluZWQ+fVxuICAgKi9cbiAgZ2V0Q29udGV4dCA9ICgpID0+IHRoaXMuY29udGV4dFxufVxuXG4vKiogQXBpTWFrZXJEZXZpc2UuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcGlNYWtlckRldmlzZSB7XG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgc2hhcmVkIHNpZ24tb3V0IGV2ZW50IHBheWxvYWQgZm9yIG9uZSBzY29wZS5cbiAgICogQHBhcmFtIHtEZXZpc2VTY29wZUFyZ3N9IGFyZ3NcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgY2FsbFNpZ25PdXRFdmVudChhcmdzKSB7XG4gICAgZXZlbnRzLmVtaXQoXCJvbkRldmlzZVNpZ25PdXRcIiwge2FyZ3N9KVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIHtBcGlNYWtlckRldmlzZX0gKi9cbiAgc3RhdGljIGN1cnJlbnQoKSB7XG4gICAgaWYgKCFzaGFyZWQuY3VycmVudEFwaU1ha2VyRGV2aXNlKSB7XG4gICAgICBzaGFyZWQuY3VycmVudEFwaU1ha2VyRGV2aXNlID0gbmV3IEFwaU1ha2VyRGV2aXNlKClcbiAgICB9XG5cbiAgICByZXR1cm4gc2hhcmVkLmN1cnJlbnRBcGlNYWtlckRldmlzZVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNoYXJlZCBldmVudCBlbWl0dGVyIHVzZWQgZm9yIERldmlzZSBsaWZlY3ljbGUgZXZlbnRzLlxuICAgKiBAcmV0dXJucyB7dHlwZW9mIGV2ZW50c31cbiAgICovXG4gIHN0YXRpYyBldmVudHMoKSB7XG4gICAgcmV0dXJuIGV2ZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBvbmUgRGV2aXNlIHNjb3BlIGFuZCBpdHMgaGVscGVyIGFjY2Vzc29ycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlXG4gICAqIEBwYXJhbSB7RGV2aXNlU2NvcGVBcmdzfSBhcmdzXG4gICAqL1xuICBzdGF0aWMgYWRkVXNlclNjb3BlKHNjb3BlLCBhcmdzID0ge30pIHtcbiAgICBjb25zdCBzY29wZUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUoc2NvcGUpXG4gICAgY29uc3QgY3VycmVudE1ldGhvZE5hbWUgPSBgY3VycmVudCR7c2NvcGVDYW1lbGl6ZWR9YFxuICAgIGNvbnN0IGlzU2lnbmVkSW5NZXRob2ROYW1lID0gYGlzJHtzY29wZUNhbWVsaXplZH1TaWduZWRJbmBcbiAgICBjb25zdCBnZXRBcmdzTWV0aG9kTmFtZSA9IGBnZXQke3Njb3BlQ2FtZWxpemVkfUFyZ3NgXG4gICAgY29uc3QgZ2V0U2NvcGVOYW1lID0gYGdldCR7c2NvcGVDYW1lbGl6ZWR9U2NvcGVgXG4gICAgY29uc3Qgc2NvcGVJbnN0YW5jZSA9IG5ldyBEZXZpc2VTY29wZShzY29wZSwgYXJncylcblxuICAgIHNoYXJlZC5zY29wZXNbc2NvcGVdID0gdHJ1ZVxuICAgIEFwaU1ha2VyRGV2aXNlW2N1cnJlbnRNZXRob2ROYW1lXSA9ICgpID0+IEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5nZXRDdXJyZW50U2NvcGUoc2NvcGUpXG4gICAgQXBpTWFrZXJEZXZpc2VbaXNTaWduZWRJbk1ldGhvZE5hbWVdID0gKCkgPT4gQm9vbGVhbihBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuZ2V0Q3VycmVudFNjb3BlKHNjb3BlKSlcbiAgICBBcGlNYWtlckRldmlzZVtnZXRBcmdzTWV0aG9kTmFtZV0gPSAoKSA9PiBhcmdzXG4gICAgQXBpTWFrZXJEZXZpc2VbZ2V0U2NvcGVOYW1lXSA9ICgpID0+IHNjb3BlSW5zdGFuY2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZWdpc3RlcmVkIHNjb3BlIGhlbHBlciBmb3Igb25lIHNjb3BlIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZVxuICAgKiBAcmV0dXJucyB7RGV2aXNlU2NvcGV9XG4gICAqL1xuICBzdGF0aWMgZ2V0U2NvcGUoc2NvcGUpIHtcbiAgICBjb25zdCBzY29wZUNhbWVsaXplZCA9IGluZmxlY3Rpb24uY2FtZWxpemUoc2NvcGUpXG4gICAgY29uc3QgZ2V0U2NvcGVOYW1lID0gYGdldCR7c2NvcGVDYW1lbGl6ZWR9U2NvcGVgXG5cbiAgICByZXR1cm4gQXBpTWFrZXJEZXZpc2VbZ2V0U2NvcGVOYW1lXSgpXG4gIH1cblxuICAvKiogQHJldHVybnMge3N0cmluZ1tdfSAqL1xuICBzdGF0aWMgcmVnaXN0ZXJlZFNjb3BlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc2hhcmVkLnNjb3BlcylcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyBpbiBvbmUgc2NvcGUgb3ZlciBIVFRQIGFuZCByZWZyZXNoZXMgd2Vic29ja2V0IGF1dGggc3RhdGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VybmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFzc3dvcmRcbiAgICogQHBhcmFtIHtEZXZpc2VTY29wZUFyZ3N9IGFyZ3NcbiAgICogQHJldHVybnMge1Byb21pc2U8e21vZGVsOiBpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCB8IHVuZGVmaW5lZCwgcmVzcG9uc2U6IERldmlzZVNpZ25JblJlc3BvbnNlfT59XG4gICAqL1xuICBzdGF0aWMgYXN5bmMgc2lnbkluKHVzZXJuYW1lLCBwYXNzd29yZCwgYXJncyA9IHt9KSB7XG4gICAgaWYgKCFhcmdzLnNjb3BlKSBhcmdzLnNjb3BlID0gXCJ1c2VyXCJcblxuICAgIGNvbnN0IHBvc3REYXRhID0ge3VzZXJuYW1lLCBwYXNzd29yZCwgYXJnc31cblxuICAgIC8vIFNpZ24gaW4gb3ZlciBIVFRQIGZpcnN0IHNvIERldmlzZSBjYW4gd3JpdGUgdGhlIHJlYWwgc2Vzc2lvbiBjb29raWUgYW5kXG4gICAgLy8gcmVtZW1iZXItbWUgdG9rZW4gaW4gdGhlIEhUVFAgcmVzcG9uc2UuXG4gICAgY29uc3QgcmVzcG9uc2UgPSAvKiogQHR5cGUge0RldmlzZVNpZ25JblJlc3BvbnNlfSAqLyAoXG4gICAgICBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJEZXZpc2U6OlNpZ25JblwiLCBwb3N0RGF0YSwge2ZvcmNlSHR0cDogdHJ1ZX0pXG4gICAgKVxuXG4gICAgbGV0IG1vZGVsID0gcmVzcG9uc2UubW9kZWxcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsKSkgbW9kZWwgPSBtb2RlbFswXVxuXG4gICAgYXdhaXQgQXBpTWFrZXJEZXZpc2Uuc3luY1Nlc3Npb25TdGF0dXNBbmRSZWZyZXNoV2Vic29ja2V0KHtcbiAgICAgIGh0dHBSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgICBzY29wZTogYXJncy5zY29wZSxcbiAgICAgIHdlYnNvY2tldEFyZ3M6IHtcbiAgICAgICAgcmVtZW1iZXJNZTogYXJncy5yZW1lbWJlck1lLFxuICAgICAgICBzY29wZTogYXJncy5zY29wZSxcbiAgICAgICAgc2lnbmVkSW46IHRydWVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgQXBpTWFrZXJEZXZpc2UudXBkYXRlU2Vzc2lvbihtb2RlbClcblxuICAgIGlmICghYXJncy5za2lwU2lnbkluRXZlbnQpIHtcbiAgICAgIGV2ZW50cy5lbWl0KFwib25EZXZpc2VTaWduSW5cIiwge3VzZXJuYW1lLCAuLi5hcmdzfSlcbiAgICB9XG5cbiAgICByZXR1cm4ge21vZGVsLCByZXNwb25zZX1cbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZXMgdGhlIGN1cnJlbnQgYmFja2VuZCBhdXRoIHN0YXRlIGludG8gcmVhbCBIVFRQIHJlc3BvbnNlIGNvb2tpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RGV2aXNlU2NvcGVBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aXNlU2Vzc2lvblN0YXR1c1Jlc3VsdD59XG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcGVyc2lzdFNlc3Npb24oYXJncyA9IHt9KSB7XG4gICAgaWYgKCFhcmdzLnNjb3BlKSBhcmdzLnNjb3BlID0gXCJ1c2VyXCJcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gLyoqIEB0eXBlIHtEZXZpc2VTZXNzaW9uU3RhdHVzUmVzdWx0fSAqLyAoXG4gICAgICBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJEZXZpc2U6OlBlcnNpc3RTZXNzaW9uXCIsIGFyZ3MsIHtmb3JjZUh0dHA6IHRydWV9KVxuICAgIClcblxuICAgIGNvbnN0IHNlc3Npb25TdGF0dXNVcGRhdGVyID0gU2Vzc2lvblN0YXR1c1VwZGF0ZXIuY3VycmVudCgpXG5cbiAgICBpZiAocmVzcG9uc2Uuc2Vzc2lvbl9zdGF0dXMpIHtcbiAgICAgIHNlc3Npb25TdGF0dXNVcGRhdGVyLmFwcGx5UmVzdWx0KHJlc3BvbnNlLnNlc3Npb25fc3RhdHVzKVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzZXNzaW9uU3RhdHVzVXBkYXRlci51cGRhdGVTZXNzaW9uU3RhdHVzKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsb2NhbGx5IGNhY2hlZCBjdXJyZW50IG1vZGVsIGZvciBvbmUgc2NvcGUuXG4gICAqIEBwYXJhbSB7RGV2aXNlQ3VycmVudFNjb3BlfSBtb2RlbFxuICAgKiBAcGFyYW0ge0RldmlzZVNjb3BlQXJnc30gYXJnc1xuICAgKi9cbiAgc3RhdGljIHVwZGF0ZVNlc3Npb24obW9kZWwsIGFyZ3MgPSB7fSkge1xuICAgIGlmICghYXJncy5zY29wZSkgYXJncy5zY29wZSA9IFwidXNlclwiXG5cbiAgICBjb25zdCBjYW1lbGl6ZWRTY29wZU5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKGFyZ3Muc2NvcGUsIHRydWUpXG5cbiAgICBBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuY3VycmVudHNbY2FtZWxpemVkU2NvcGVOYW1lXSA9IG1vZGVsXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHNjb3BlIGNhY2hlIGhhcyBiZWVuIGluaXRpYWxpemVkIGxvY2FsbHkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc0N1cnJlbnRTY29wZShzY29wZSkge1xuICAgIGNvbnN0IGNhbWVsaXplZFNjb3BlTmFtZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoc2NvcGUsIHRydWUpXG5cbiAgICByZXR1cm4gY2FtZWxpemVkU2NvcGVOYW1lIGluIEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5jdXJyZW50c1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmtzIG9uZSBzY29wZSBhcyBzaWduZWQgb3V0IGluIHRoZSBsb2NhbCBjdXJyZW50LW1vZGVsIGNhY2hlLlxuICAgKiBAcGFyYW0ge0RldmlzZVNjb3BlQXJnc30gYXJnc1xuICAgKi9cbiAgc3RhdGljIHNldFNpZ25lZE91dChhcmdzKSB7XG4gICAgQXBpTWFrZXJEZXZpc2UuY3VycmVudCgpLmN1cnJlbnRzW2luZmxlY3Rpb24uY2FtZWxpemUoYXJncy5zY29wZSwgdHJ1ZSldID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIG91dCBvbmUgc2NvcGUgb3ZlciBIVFRQIGFuZCByZWZyZXNoZXMgd2Vic29ja2V0IGF1dGggc3RhdGUuXG4gICAqIEBwYXJhbSB7RGV2aXNlU2NvcGVBcmdzfSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERldmlzZVNlc3Npb25TdGF0dXNSZXN1bHQ+fVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHNpZ25PdXQoYXJncyA9IHt9KSB7XG4gICAgaWYgKCFhcmdzLnNjb3BlKSB7XG4gICAgICBhcmdzLnNjb3BlID0gXCJ1c2VyXCJcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IC8qKiBAdHlwZSB7RGV2aXNlU2Vzc2lvblN0YXR1c1Jlc3VsdH0gKi8gKFxuICAgICAgYXdhaXQgU2VydmljZXMuY3VycmVudCgpLnNlbmRSZXF1ZXN0KFwiRGV2aXNlOjpTaWduT3V0XCIsIHthcmdzfSwge2ZvcmNlSHR0cDogdHJ1ZX0pXG4gICAgKVxuICAgIGNvbnN0IHNlc3Npb25TdGF0dXMgPSBhd2FpdCBBcGlNYWtlckRldmlzZS5zeW5jU2Vzc2lvblN0YXR1c0FuZFJlZnJlc2hXZWJzb2NrZXQoe1xuICAgICAgaHR0cFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAgIHNjb3BlOiBhcmdzLnNjb3BlLFxuICAgICAgd2Vic29ja2V0QXJnczoge1xuICAgICAgICBzY29wZTogYXJncy5zY29wZSxcbiAgICAgICAgc2lnbmVkSW46IGZhbHNlXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmICghc2Vzc2lvblN0YXR1cy5zY29wZXM/LlthcmdzLnNjb3BlXT8uc2lnbmVkX2luKSB7XG4gICAgICBBcGlNYWtlckRldmlzZS5zZXRTaWduZWRPdXQoYXJncylcbiAgICAgIEFwaU1ha2VyRGV2aXNlLmNhbGxTaWduT3V0RXZlbnQoYXJncylcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSBsYXRlc3QgSFRUUCBzZXNzaW9uIHN0YXR1cyBsb2NhbGx5LCB0aGVuIHJlZnJlc2hlcyB0aGVcbiAgICogZXhpc3Rpbmcgd2Vic29ja2V0IGNvbm5lY3Rpb24gc28gQXBpTWFrZXIgY29tbWFuZHMgdXNlIHRoZSBzYW1lIGF1dGguXG4gICAqXG4gICAqIEBwYXJhbSB7U3luY1Nlc3Npb25BcmdzfSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERldmlzZVNlc3Npb25TdGF0dXNSZXN1bHQ+fVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHN5bmNTZXNzaW9uU3RhdHVzQW5kUmVmcmVzaFdlYnNvY2tldChhcmdzKSB7XG4gICAgY29uc3Qgc2Vzc2lvblN0YXR1cyA9IGF3YWl0IEFwaU1ha2VyRGV2aXNlLnN5bmNTZXNzaW9uU3RhdHVzRnJvbUh0dHBSZXNwb25zZShhcmdzLmh0dHBSZXNwb25zZSlcbiAgICBjb25zdCB3ZWJzb2NrZXRBcmdzID0ge1xuICAgICAgLi4uYXJncy53ZWJzb2NrZXRBcmdzLFxuICAgICAgc2hhZG93U2Vzc2lvblRva2VuOiBzZXNzaW9uU3RhdHVzLnNoYWRvd19zZXNzaW9uX3Rva2VuXG4gICAgfVxuXG4gICAgYXdhaXQgQXBpTWFrZXJEZXZpc2UucmVmcmVzaFdlYnNvY2tldFNlc3Npb24od2Vic29ja2V0QXJncylcbiAgICBhd2FpdCBBcGlNYWtlckRldmlzZS5yZWZyZXNoU3Vic2NyaXB0aW9uQXV0aGVudGljYXRpb24od2Vic29ja2V0QXJncylcblxuICAgIHJldHVybiBzZXNzaW9uU3RhdHVzXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBsb2NhbCBzZXNzaW9uIHN0YXR1cyBmcm9tIG9uZSBIVFRQIHJlc3BvbnNlIHBheWxvYWQuXG4gICAqIEBwYXJhbSB7RGV2aXNlU2Vzc2lvblN0YXR1c1Jlc3VsdH0gaHR0cFJlc3BvbnNlXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERldmlzZVNlc3Npb25TdGF0dXNSZXN1bHQ+fVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHN5bmNTZXNzaW9uU3RhdHVzRnJvbUh0dHBSZXNwb25zZShodHRwUmVzcG9uc2UpIHtcbiAgICBjb25zdCBzZXNzaW9uU3RhdHVzVXBkYXRlciA9IFNlc3Npb25TdGF0dXNVcGRhdGVyLmN1cnJlbnQoKVxuICAgIGNvbnN0IHNlc3Npb25TdGF0dXMgPSBodHRwUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0dXMgfHwgYXdhaXQgc2Vzc2lvblN0YXR1c1VwZGF0ZXIuc2Vzc2lvblN0YXR1cygpXG5cbiAgICBzZXNzaW9uU3RhdHVzVXBkYXRlci5hcHBseVJlc3VsdChzZXNzaW9uU3RhdHVzKVxuXG4gICAgcmV0dXJuIHNlc3Npb25TdGF0dXNcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgQXBpTWFrZXIgYXV0aCBpbnNpZGUgdGhlIGV4aXN0aW5nIHdlYnNvY2tldCBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge0RldmlzZVNjb3BlQXJncyAmIHtzaGFkb3dTZXNzaW9uVG9rZW4/OiBzdHJpbmd9fSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPERldmlzZVNlc3Npb25TdGF0dXNSZXN1bHQ+fVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJlZnJlc2hXZWJzb2NrZXRTZXNzaW9uKGFyZ3MpIHtcbiAgICByZXR1cm4gLyoqIEB0eXBlIHtEZXZpc2VTZXNzaW9uU3RhdHVzUmVzdWx0fSAqLyAoYXdhaXQgU2VydmljZXMuY3VycmVudCgpLnNlbmRSZXF1ZXN0KFwiRGV2aXNlOjpQZXJzaXN0U2Vzc2lvblwiLCBhcmdzKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgYXV0aCBvbiB0aGUgZXhpc3Rpbmcgc3Vic2NyaXB0aW9ucyBjaGFubmVsIHBvb2xzLlxuICAgKlxuICAgKiBAcGFyYW0ge0RldmlzZVNjb3BlQXJncyAmIHtzaGFkb3dTZXNzaW9uVG9rZW4/OiBzdHJpbmd9fSBhcmdzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgc3RhdGljIGFzeW5jIHJlZnJlc2hTdWJzY3JpcHRpb25BdXRoZW50aWNhdGlvbihhcmdzKSB7XG4gICAgYXdhaXQgQ2FibGVDb25uZWN0aW9uUG9vbC5jdXJyZW50KCkucmVmcmVzaEF1dGhlbnRpY2F0aW9uKGFyZ3MpXG4gIH1cblxuICAvKiogQ29uc3RydWN0b3IuICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY3VycmVudHMgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIERldmlzZUN1cnJlbnRTY29wZT59ICovICh7fSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG1vZGVsIGNhY2hlZCBmb3Igb25lIHNjb3BlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVcbiAgICogQHJldHVybnMge0RldmlzZUN1cnJlbnRTY29wZX1cbiAgICovXG4gIGdldEN1cnJlbnRTY29wZShzY29wZSkge1xuICAgIGlmICghKHNjb3BlIGluIHRoaXMuY3VycmVudHMpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRzW3Njb3BlXSA9IHRoaXMubG9hZEN1cnJlbnRTY29wZShzY29wZSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50c1tzY29wZV1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIHNlcnZlciByZW5kZXJlZCBjdXJyZW50LXNjb3BlIHBheWxvYWQgZm9yIG9uZSBzY29wZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaGFzR2xvYmFsQ3VycmVudFNjb3BlKHNjb3BlKSB7XG4gICAgaWYgKGdsb2JhbFRoaXMuYXBpTWFrZXJEZXZpc2VDdXJyZW50ICYmIHNjb3BlIGluIGdsb2JhbFRoaXMuYXBpTWFrZXJEZXZpc2VDdXJyZW50KSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEh5ZHJhdGVzIHRoZSBjdXJyZW50IHNjb3BlIG1vZGVsIGZyb20gdGhlIHNlcnZlciByZW5kZXJlZCBwYXlsb2FkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVcbiAgICogQHJldHVybnMge0RldmlzZUN1cnJlbnRTY29wZX1cbiAgICovXG4gIGxvYWRDdXJyZW50U2NvcGUoc2NvcGUpIHtcbiAgICBpZiAoIXRoaXMuaGFzR2xvYmFsQ3VycmVudFNjb3BlKHNjb3BlKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBzY29wZURhdGEgPSBnbG9iYWxUaGlzLmFwaU1ha2VyRGV2aXNlQ3VycmVudFtzY29wZV1cblxuICAgIGlmICghc2NvcGVEYXRhKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcGFyc2VkU2NvcGVEYXRhID0gRGVzZXJpYWxpemVyLnBhcnNlKHNjb3BlRGF0YSlcblxuICAgIC8vIE1pZ2h0IGJlIGEgY29sbGVjdGlvbiB3aXRoIHByZWxvYWRlZCByZWxhdGlvbnNoaXBzXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkU2NvcGVEYXRhKSkgcmV0dXJuIHBhcnNlZFNjb3BlRGF0YVswXVxuXG4gICAgY29uc3QgTW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NSZXF1aXJlKHNjb3BlKVxuICAgIGNvbnN0IG1vZGVsSW5zdGFuY2UgPSBuZXcgTW9kZWxDbGFzcyh7ZGF0YTogcGFyc2VkU2NvcGVEYXRhfSlcblxuICAgIHJldHVybiBtb2RlbEluc3RhbmNlXG4gIH1cbn1cbiJdfQ==
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aXNlLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJkZXZpc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUNaLE9BQU8sS0FBSyxVQUFVLE1BQU0sWUFBWSxDQUFBLENBQUMsbUNBQW1DO0FBQzVFLE9BQU8sbUJBQW1CLE1BQU0sNEJBQTRCLENBQUE7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNuQyxPQUFPLFlBQVksTUFBTSxtQkFBbUIsQ0FBQSxDQUFDLG1DQUFtQztBQUNoRixPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFDaEMsT0FBTyxpQkFBaUIsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLG9CQUFvQixNQUFNLDZCQUE2QixDQUFBLENBQUMsbUNBQW1DO0FBQ2xHLE9BQU8sUUFBUSxNQUFNLGVBQWUsQ0FBQSxDQUFDLG1DQUFtQztBQUV4RSxpSEFBaUg7QUFDakgsK0RBQStEO0FBQy9EOzs7Ozs7R0FNRztBQUNILHVIQUF1SDtBQUN2SCxvSkFBb0o7QUFDcEosMEhBQTBIO0FBQzFILDZFQUE2RTtBQUU3RSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWM7SUFBRSxVQUFVLENBQUMsY0FBYyxHQUFHLEVBQUMsTUFBTSxFQUFFLEVBQUUsRUFBQyxDQUFBO0FBRXhFLE1BQU0sTUFBTSxHQUFHLG1DQUFtQyxDQUFDLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBRTlFLG1CQUFtQjtBQUNuQixNQUFNLFdBQVc7SUFDZjs7OztPQUlHO0lBQ0gsWUFBWSxLQUFLLEVBQUUsSUFBSTtRQUNyQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtJQUNwQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFB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SSxVQUFVLENBQUMsRUFBQyxJQUFJLEVBQUUsZUFBZSxFQUFDLENBQUMsQ0FBQTtRQUU3RCxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNvcnQtaW1wb3J0c1xuaW1wb3J0IENhYmxlQ29ubmVjdGlvblBvb2wgZnJvbSBcIi4vY2FibGUtY29ubmVjdGlvbi1wb29sLmpzXCJcbmltcG9ydCB7Y3JlYXRlQ29udGV4dH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBEZXNlcmlhbGl6ZXIgZnJvbSBcIi4vZGVzZXJpYWxpemVyLmpzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi9tb2RlbC1jbGFzcy1yZXF1aXJlLmpzXCJcbmltcG9ydCBTZXNzaW9uU3RhdHVzVXBkYXRlciBmcm9tIFwiLi9zZXNzaW9uLXN0YXR1cy11cGRhdGVyLmpzXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBzb3J0LWltcG9ydHNcbmltcG9ydCBTZXJ2aWNlcyBmcm9tIFwiLi9zZXJ2aWNlcy5qc1wiIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc29ydC1pbXBvcnRzXG5cbi8qKiBAdHlwZWRlZiB7e3Njb3Blcz86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LCBjdXJyZW50QXBpTWFrZXJEZXZpc2U/OiBBcGlNYWtlckRldmlzZX19IEFwaU1ha2VyRGV2aXNlU2hhcmVkICovXG4vKiogQHR5cGVkZWYge3tzaWduZWRfaW46IGJvb2xlYW59fSBEZXZpc2VTZXNzaW9uU3RhdHVzU2NvcGUgKi9cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRGV2aXNlU2Vzc2lvblN0YXR1c1Jlc3VsdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjc3JmX3Rva2VuXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLCBEZXZpc2VTZXNzaW9uU3RhdHVzU2NvcGU+fSBzY29wZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2hhZG93X3Nlc3Npb25fdG9rZW5dXG4gKiBAcHJvcGVydHkge0RldmlzZVNlc3Npb25TdGF0dXNSZXN1bHR9IFtzZXNzaW9uX3N0YXR1c11cbiAqL1xuLyoqIEB0eXBlZGVmIHt7cmVtZW1iZXJNZT86IGJvb2xlYW4sIHNjb3BlPzogc3RyaW5nLCBzaWduZWRJbj86IGJvb2xlYW4sIHNraXBTaWduSW5FdmVudD86IGJvb2xlYW59fSBEZXZpc2VTY29wZUFyZ3MgKi9cbi8qKiBAdHlwZWRlZiB7RGV2aXNlU2Vzc2lvblN0YXR1c1Jlc3VsdCAmIHttb2RlbD86IGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0IHwgaW1wb3J0KFwiLi9iYXNlLW1vZGVsLmpzXCIpLmRlZmF1bHRbXX19IERldmlzZVNpZ25JblJlc3BvbnNlICovXG4vKiogQHR5cGVkZWYge3todHRwUmVzcG9uc2U6IERldmlzZVNlc3Npb25TdGF0dXNSZXN1bHQsIHNjb3BlOiBzdHJpbmcsIHdlYnNvY2tldEFyZ3M6IERldmlzZVNjb3BlQXJnc319IFN5bmNTZXNzaW9uQXJncyAqL1xuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCIuL2Jhc2UtbW9kZWwuanNcIikuZGVmYXVsdCB8IG51bGx9IERldmlzZUN1cnJlbnRTY29wZSAqL1xuXG5pZiAoIWdsb2JhbFRoaXMuQXBpTWFrZXJEZXZpc2UpIGdsb2JhbFRoaXMuQXBpTWFrZXJEZXZpc2UgPSB7c2NvcGVzOiB7fX1cblxuY29uc3Qgc2hhcmVkID0gLyoqIEB0eXBlIHtBcGlNYWtlckRldmlzZVNoYXJlZH0gKi8gKGdsb2JhbFRoaXMuQXBpTWFrZXJEZXZpc2UpXG5cbi8qKiBEZXZpc2VTY29wZS4gKi9cbmNsYXNzIERldmlzZVNjb3BlIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVcbiAgICogQHBhcmFtIHtEZXZpc2VTY29wZUFyZ3N9IGFyZ3NcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNjb3BlLCBhcmdzKSB7XG4gICAgdGhpcy5hcmdzID0gYXJnc1xuICAgIHRoaXMuY29udGV4dCA9IGNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKVxuICAgIHRoaXMuc2NvcGUgPSBzY29wZVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBQcm92aWRlciB3cml0ZXMgYSBge2xvYWRlZCwgbW9kZWx9YCB3cmFwcGVyIChzZWVcbiAgICogYFVzZUN1cnJlbnRVc2VyQ29udGV4dGApOyBgdXNlQ3VycmVudFVzZXJgIHVud3JhcHMgaXQgb24gcmVhZC4gVGhlXG4gICAqIGNvbnRleHQgdHlwZSBpcyB0aGUgd3JhcHBlciwgbm90IHRoZSByYXcgbW9kZWwuXG4gICAqXG4gICAqIEByZXR1cm5zIHtpbXBvcnQoXCJyZWFjdFwiKS5Db250ZXh0PGltcG9ydChcIi4vdXNlLWN1cnJlbnQtdXNlci5qc1wiKS5DdXJyZW50VXNlckNvbnRleHRWYWx1ZSB8IHVuZGVmaW5lZD59XG4gICAqL1xuICBnZXRDb250ZXh0ID0gKCkgPT4gdGhpcy5jb250ZXh0XG59XG5cbi8qKiBBcGlNYWtlckRldmlzZS4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwaU1ha2VyRGV2aXNlIHtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBzaGFyZWQgc2lnbi1vdXQgZXZlbnQgcGF5bG9hZCBmb3Igb25lIHNjb3BlLlxuICAgKiBAcGFyYW0ge0RldmlzZVNjb3BlQXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBjYWxsU2lnbk91dEV2ZW50KGFyZ3MpIHtcbiAgICBldmVudHMuZW1pdChcIm9uRGV2aXNlU2lnbk91dFwiLCB7YXJnc30pXG4gIH1cblxuICAvKiogQHJldHVybnMge0FwaU1ha2VyRGV2aXNlfSAqL1xuICBzdGF0aWMgY3VycmVudCgpIHtcbiAgICBpZiAoIXNoYXJlZC5jdXJyZW50QXBpTWFrZXJEZXZpc2UpIHtcbiAgICAgIHNoYXJlZC5jdXJyZW50QXBpTWFrZXJEZXZpc2UgPSBuZXcgQXBpTWFrZXJEZXZpc2UoKVxuICAgIH1cblxuICAgIHJldHVybiBzaGFyZWQuY3VycmVudEFwaU1ha2VyRGV2aXNlXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2hhcmVkIGV2ZW50IGVtaXR0ZXIgdXNlZCBmb3IgRGV2aXNlIGxpZmVjeWNsZSBldmVudHMuXG4gICAqIEByZXR1cm5zIHt0eXBlb2YgZXZlbnRzfVxuICAgKi9cbiAgc3RhdGljIGV2ZW50cygpIHtcbiAgICByZXR1cm4gZXZlbnRzXG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIG9uZSBEZXZpc2Ugc2NvcGUgYW5kIGl0cyBoZWxwZXIgYWNjZXNzb3JzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVcbiAgICogQHBhcmFtIHtEZXZpc2VTY29wZUFyZ3N9IGFyZ3NcbiAgICovXG4gIHN0YXRpYyBhZGRVc2VyU2NvcGUoc2NvcGUsIGFyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHNjb3BlQ2FtZWxpemVkID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShzY29wZSlcbiAgICBjb25zdCBjdXJyZW50TWV0aG9kTmFtZSA9IGBjdXJyZW50JHtzY29wZUNhbWVsaXplZH1gXG4gICAgY29uc3QgaXNTaWduZWRJbk1ldGhvZE5hbWUgPSBgaXMke3Njb3BlQ2FtZWxpemVkfVNpZ25lZEluYFxuICAgIGNvbnN0IGdldEFyZ3NNZXRob2ROYW1lID0gYGdldCR7c2NvcGVDYW1lbGl6ZWR9QXJnc2BcbiAgICBjb25zdCBnZXRTY29wZU5hbWUgPSBgZ2V0JHtzY29wZUNhbWVsaXplZH1TY29wZWBcbiAgICBjb25zdCBzY29wZUluc3RhbmNlID0gbmV3IERldmlzZVNjb3BlKHNjb3BlLCBhcmdzKVxuXG4gICAgc2hhcmVkLnNjb3Blc1tzY29wZV0gPSB0cnVlXG4gICAgQXBpTWFrZXJEZXZpc2VbY3VycmVudE1ldGhvZE5hbWVdID0gKCkgPT4gQXBpTWFrZXJEZXZpc2UuY3VycmVudCgpLmdldEN1cnJlbnRTY29wZShzY29wZSlcbiAgICBBcGlNYWtlckRldmlzZVtpc1NpZ25lZEluTWV0aG9kTmFtZV0gPSAoKSA9PiBCb29sZWFuKEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5nZXRDdXJyZW50U2NvcGUoc2NvcGUpKVxuICAgIEFwaU1ha2VyRGV2aXNlW2dldEFyZ3NNZXRob2ROYW1lXSA9ICgpID0+IGFyZ3NcbiAgICBBcGlNYWtlckRldmlzZVtnZXRTY29wZU5hbWVdID0gKCkgPT4gc2NvcGVJbnN0YW5jZVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJlZ2lzdGVyZWQgc2NvcGUgaGVscGVyIGZvciBvbmUgc2NvcGUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlXG4gICAqIEByZXR1cm5zIHtEZXZpc2VTY29wZX1cbiAgICovXG4gIHN0YXRpYyBnZXRTY29wZShzY29wZSkge1xuICAgIGNvbnN0IHNjb3BlQ2FtZWxpemVkID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShzY29wZSlcbiAgICBjb25zdCBnZXRTY29wZU5hbWUgPSBgZ2V0JHtzY29wZUNhbWVsaXplZH1TY29wZWBcblxuICAgIHJldHVybiBBcGlNYWtlckRldmlzZVtnZXRTY29wZU5hbWVdKClcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyB7c3RyaW5nW119ICovXG4gIHN0YXRpYyByZWdpc3RlcmVkU2NvcGVzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzaGFyZWQuc2NvcGVzKVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIGluIG9uZSBzY29wZSBvdmVyIEhUVFAgYW5kIHJlZnJlc2hlcyB3ZWJzb2NrZXQgYXV0aCBzdGF0ZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzd29yZFxuICAgKiBAcGFyYW0ge0RldmlzZVNjb3BlQXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7bW9kZWw6IGltcG9ydChcIi4vYmFzZS1tb2RlbC5qc1wiKS5kZWZhdWx0LCByZXNwb25zZTogRGV2aXNlU2lnbkluUmVzcG9uc2V9Pn1cbiAgICovXG4gIHN0YXRpYyBhc3luYyBzaWduSW4odXNlcm5hbWUsIHBhc3N3b3JkLCBhcmdzID0ge30pIHtcbiAgICBpZiAoIWFyZ3Muc2NvcGUpIGFyZ3Muc2NvcGUgPSBcInVzZXJcIlxuXG4gICAgY29uc3QgcG9zdERhdGEgPSB7dXNlcm5hbWUsIHBhc3N3b3JkLCBhcmdzfVxuXG4gICAgLy8gU2lnbiBpbiBvdmVyIEhUVFAgZmlyc3Qgc28gRGV2aXNlIGNhbiB3cml0ZSB0aGUgcmVhbCBzZXNzaW9uIGNvb2tpZSBhbmRcbiAgICAvLyByZW1lbWJlci1tZSB0b2tlbiBpbiB0aGUgSFRUUCByZXNwb25zZS5cbiAgICBjb25zdCByZXNwb25zZSA9IC8qKiBAdHlwZSB7RGV2aXNlU2lnbkluUmVzcG9uc2V9ICovIChcbiAgICAgIGF3YWl0IFNlcnZpY2VzLmN1cnJlbnQoKS5zZW5kUmVxdWVzdChcIkRldmlzZTo6U2lnbkluXCIsIHBvc3REYXRhLCB7Zm9yY2VIdHRwOiB0cnVlfSlcbiAgICApXG5cbiAgICBsZXQgbW9kZWwgPSByZXNwb25zZS5tb2RlbFxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWwpKSBtb2RlbCA9IG1vZGVsWzBdXG5cbiAgICBpZiAoIW1vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYERldmlzZS5zaWduSW46IERldmlzZTo6U2lnbkluIHJlc3BvbnNlIGZvciBzY29wZSBcIiR7YXJncy5zY29wZX1cIiBkaWQgbm90IGluY2x1ZGUgYSBtb2RlbGApXG4gICAgfVxuXG4gICAgYXdhaXQgQXBpTWFrZXJEZXZpc2Uuc3luY1Nlc3Npb25TdGF0dXNBbmRSZWZyZXNoV2Vic29ja2V0KHtcbiAgICAgIGh0dHBSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgICBzY29wZTogYXJncy5zY29wZSxcbiAgICAgIHdlYnNvY2tldEFyZ3M6IHtcbiAgICAgICAgcmVtZW1iZXJNZTogYXJncy5yZW1lbWJlck1lLFxuICAgICAgICBzY29wZTogYXJncy5zY29wZSxcbiAgICAgICAgc2lnbmVkSW46IHRydWVcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgQXBpTWFrZXJEZXZpc2UudXBkYXRlU2Vzc2lvbihtb2RlbClcblxuICAgIGlmICghYXJncy5za2lwU2lnbkluRXZlbnQpIHtcbiAgICAgIGV2ZW50cy5lbWl0KFwib25EZXZpc2VTaWduSW5cIiwge3VzZXJuYW1lLCAuLi5hcmdzfSlcbiAgICB9XG5cbiAgICByZXR1cm4ge21vZGVsLCByZXNwb25zZX1cbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZXMgdGhlIGN1cnJlbnQgYmFja2VuZCBhdXRoIHN0YXRlIGludG8gcmVhbCBIVFRQIHJlc3BvbnNlIGNvb2tpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RGV2aXNlU2NvcGVBcmdzfSBbYXJnc11cbiAgICogQHJldHVybnMge1Byb21pc2U8RGV2aXNlU2Vzc2lvblN0YXR1c1Jlc3VsdD59XG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcGVyc2lzdFNlc3Npb24oYXJncyA9IHt9KSB7XG4gICAgaWYgKCFhcmdzLnNjb3BlKSBhcmdzLnNjb3BlID0gXCJ1c2VyXCJcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gLyoqIEB0eXBlIHtEZXZpc2VTZXNzaW9uU3RhdHVzUmVzdWx0fSAqLyAoXG4gICAgICBhd2FpdCBTZXJ2aWNlcy5jdXJyZW50KCkuc2VuZFJlcXVlc3QoXCJEZXZpc2U6OlBlcnNpc3RTZXNzaW9uXCIsIGFyZ3MsIHtmb3JjZUh0dHA6IHRydWV9KVxuICAgIClcblxuICAgIGNvbnN0IHNlc3Npb25TdGF0dXNVcGRhdGVyID0gU2Vzc2lvblN0YXR1c1VwZGF0ZXIuY3VycmVudCgpXG5cbiAgICBpZiAocmVzcG9uc2Uuc2Vzc2lvbl9zdGF0dXMpIHtcbiAgICAgIHNlc3Npb25TdGF0dXNVcGRhdGVyLmFwcGx5UmVzdWx0KHJlc3BvbnNlLnNlc3Npb25fc3RhdHVzKVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzZXNzaW9uU3RhdHVzVXBkYXRlci51cGRhdGVTZXNzaW9uU3RhdHVzKClcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsb2NhbGx5IGNhY2hlZCBjdXJyZW50IG1vZGVsIGZvciBvbmUgc2NvcGUuXG4gICAqXG4gICAqIEFsd2F5cyByZXF1aXJlcyBhIHJlYWwgbW9kZWwgaW5zdGFuY2UuIFdyaXRpbmcgYSBmYWxzeSB2YWx1ZSBoZXJlIHVzZWQgdG9cbiAgICogYmUgYSBzaWxlbnQgZm9vdC1ndW46IHdoZW4gYSBjYWxsZXIgYXdhaXRlZCBhIHF1ZXJ5IHRoYXQgcmV0dXJuZWRcbiAgICogYHVuZGVmaW5lZGAgKGZvciBleGFtcGxlIGBDb2xsZWN0aW9uI2ZpcnN0KClgIG9uIGFuIGVtcHR5IHJlc3VsdCkgYW5kXG4gICAqIHBhc3NlZCB0aGUgdmFsdWUgdGhyb3VnaCwgdGhlIHNjb3BlIGNhY2hlIGZsaXBwZWQgdG8gXCJzaWduZWQgb3V0XCIgd2l0aG91dFxuICAgKiBhbnkgaW5kaWNhdGlvbiwgZHJvcHBpbmcgdGhlIHVzZXIgYmFjayBvbiB0aGUgc2lnbi1pbiBzY3JlZW4gcmlnaHQgYWZ0ZXJcbiAgICogYSBzdWNjZXNzZnVsIHNpZ24taW4uIFVzZSBgRGV2aXNlLnNldFNpZ25lZE91dCh7c2NvcGV9KWAgdG8gc2lnbiBvdXQuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9uTnVsbGFibGU8RGV2aXNlQ3VycmVudFNjb3BlPn0gbW9kZWxcbiAgICogQHBhcmFtIHtEZXZpc2VTY29wZUFyZ3N9IGFyZ3NcbiAgICovXG4gIHN0YXRpYyB1cGRhdGVTZXNzaW9uKG1vZGVsLCBhcmdzID0ge30pIHtcbiAgICBpZiAoIWFyZ3Muc2NvcGUpIGFyZ3Muc2NvcGUgPSBcInVzZXJcIlxuXG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGV2aXNlLnVwZGF0ZVNlc3Npb24gd2FzIGNhbGxlZCB3aXRoIGEgZmFsc3kgbW9kZWwgZm9yIHNjb3BlIFwiJHthcmdzLnNjb3BlfVwiLiBgICtcbiAgICAgICAgXCJVc2UgRGV2aXNlLnNldFNpZ25lZE91dCh7c2NvcGV9KSB0byBzaWduIG91dCBpbnN0ZWFkLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgY2FtZWxpemVkU2NvcGVOYW1lID0gaW5mbGVjdGlvbi5jYW1lbGl6ZShhcmdzLnNjb3BlLCB0cnVlKVxuXG4gICAgQXBpTWFrZXJEZXZpc2UuY3VycmVudCgpLmN1cnJlbnRzW2NhbWVsaXplZFNjb3BlTmFtZV0gPSBtb2RlbFxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBzY29wZSBjYWNoZSBoYXMgYmVlbiBpbml0aWFsaXplZCBsb2NhbGx5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NvcGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBoYXNDdXJyZW50U2NvcGUoc2NvcGUpIHtcbiAgICBjb25zdCBjYW1lbGl6ZWRTY29wZU5hbWUgPSBpbmZsZWN0aW9uLmNhbWVsaXplKHNjb3BlLCB0cnVlKVxuXG4gICAgcmV0dXJuIGNhbWVsaXplZFNjb3BlTmFtZSBpbiBBcGlNYWtlckRldmlzZS5jdXJyZW50KCkuY3VycmVudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyBvbmUgc2NvcGUgYXMgc2lnbmVkIG91dCBpbiB0aGUgbG9jYWwgY3VycmVudC1tb2RlbCBjYWNoZS5cbiAgICogQHBhcmFtIHtEZXZpc2VTY29wZUFyZ3N9IGFyZ3NcbiAgICovXG4gIHN0YXRpYyBzZXRTaWduZWRPdXQoYXJncykge1xuICAgIEFwaU1ha2VyRGV2aXNlLmN1cnJlbnQoKS5jdXJyZW50c1tpbmZsZWN0aW9uLmNhbWVsaXplKGFyZ3Muc2NvcGUsIHRydWUpXSA9IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWducyBvdXQgb25lIHNjb3BlIG92ZXIgSFRUUCBhbmQgcmVmcmVzaGVzIHdlYnNvY2tldCBhdXRoIHN0YXRlLlxuICAgKiBAcGFyYW0ge0RldmlzZVNjb3BlQXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpc2VTZXNzaW9uU3RhdHVzUmVzdWx0Pn1cbiAgICovXG4gIHN0YXRpYyBhc3luYyBzaWduT3V0KGFyZ3MgPSB7fSkge1xuICAgIGlmICghYXJncy5zY29wZSkge1xuICAgICAgYXJncy5zY29wZSA9IFwidXNlclwiXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSAvKiogQHR5cGUge0RldmlzZVNlc3Npb25TdGF0dXNSZXN1bHR9ICovIChcbiAgICAgIGF3YWl0IFNlcnZpY2VzLmN1cnJlbnQoKS5zZW5kUmVxdWVzdChcIkRldmlzZTo6U2lnbk91dFwiLCB7YXJnc30sIHtmb3JjZUh0dHA6IHRydWV9KVxuICAgIClcbiAgICBjb25zdCBzZXNzaW9uU3RhdHVzID0gYXdhaXQgQXBpTWFrZXJEZXZpc2Uuc3luY1Nlc3Npb25TdGF0dXNBbmRSZWZyZXNoV2Vic29ja2V0KHtcbiAgICAgIGh0dHBSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgICBzY29wZTogYXJncy5zY29wZSxcbiAgICAgIHdlYnNvY2tldEFyZ3M6IHtcbiAgICAgICAgc2NvcGU6IGFyZ3Muc2NvcGUsXG4gICAgICAgIHNpZ25lZEluOiBmYWxzZVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAoIXNlc3Npb25TdGF0dXMuc2NvcGVzPy5bYXJncy5zY29wZV0/LnNpZ25lZF9pbikge1xuICAgICAgQXBpTWFrZXJEZXZpc2Uuc2V0U2lnbmVkT3V0KGFyZ3MpXG4gICAgICBBcGlNYWtlckRldmlzZS5jYWxsU2lnbk91dEV2ZW50KGFyZ3MpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgbGF0ZXN0IEhUVFAgc2Vzc2lvbiBzdGF0dXMgbG9jYWxseSwgdGhlbiByZWZyZXNoZXMgdGhlXG4gICAqIGV4aXN0aW5nIHdlYnNvY2tldCBjb25uZWN0aW9uIHNvIEFwaU1ha2VyIGNvbW1hbmRzIHVzZSB0aGUgc2FtZSBhdXRoLlxuICAgKlxuICAgKiBAcGFyYW0ge1N5bmNTZXNzaW9uQXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpc2VTZXNzaW9uU3RhdHVzUmVzdWx0Pn1cbiAgICovXG4gIHN0YXRpYyBhc3luYyBzeW5jU2Vzc2lvblN0YXR1c0FuZFJlZnJlc2hXZWJzb2NrZXQoYXJncykge1xuICAgIGNvbnN0IHNlc3Npb25TdGF0dXMgPSBhd2FpdCBBcGlNYWtlckRldmlzZS5zeW5jU2Vzc2lvblN0YXR1c0Zyb21IdHRwUmVzcG9uc2UoYXJncy5odHRwUmVzcG9uc2UpXG4gICAgY29uc3Qgd2Vic29ja2V0QXJncyA9IHtcbiAgICAgIC4uLmFyZ3Mud2Vic29ja2V0QXJncyxcbiAgICAgIHNoYWRvd1Nlc3Npb25Ub2tlbjogc2Vzc2lvblN0YXR1cy5zaGFkb3dfc2Vzc2lvbl90b2tlblxuICAgIH1cblxuICAgIGF3YWl0IEFwaU1ha2VyRGV2aXNlLnJlZnJlc2hXZWJzb2NrZXRTZXNzaW9uKHdlYnNvY2tldEFyZ3MpXG4gICAgYXdhaXQgQXBpTWFrZXJEZXZpc2UucmVmcmVzaFN1YnNjcmlwdGlvbkF1dGhlbnRpY2F0aW9uKHdlYnNvY2tldEFyZ3MpXG5cbiAgICByZXR1cm4gc2Vzc2lvblN0YXR1c1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgbG9jYWwgc2Vzc2lvbiBzdGF0dXMgZnJvbSBvbmUgSFRUUCByZXNwb25zZSBwYXlsb2FkLlxuICAgKiBAcGFyYW0ge0RldmlzZVNlc3Npb25TdGF0dXNSZXN1bHR9IGh0dHBSZXNwb25zZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpc2VTZXNzaW9uU3RhdHVzUmVzdWx0Pn1cbiAgICovXG4gIHN0YXRpYyBhc3luYyBzeW5jU2Vzc2lvblN0YXR1c0Zyb21IdHRwUmVzcG9uc2UoaHR0cFJlc3BvbnNlKSB7XG4gICAgY29uc3Qgc2Vzc2lvblN0YXR1c1VwZGF0ZXIgPSBTZXNzaW9uU3RhdHVzVXBkYXRlci5jdXJyZW50KClcbiAgICBjb25zdCBzZXNzaW9uU3RhdHVzID0gaHR0cFJlc3BvbnNlLnNlc3Npb25fc3RhdHVzIHx8IGF3YWl0IHNlc3Npb25TdGF0dXNVcGRhdGVyLnNlc3Npb25TdGF0dXMoKVxuXG4gICAgc2Vzc2lvblN0YXR1c1VwZGF0ZXIuYXBwbHlSZXN1bHQoc2Vzc2lvblN0YXR1cylcblxuICAgIHJldHVybiBzZXNzaW9uU3RhdHVzXG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIEFwaU1ha2VyIGF1dGggaW5zaWRlIHRoZSBleGlzdGluZyB3ZWJzb2NrZXQgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtEZXZpc2VTY29wZUFyZ3MgJiB7c2hhZG93U2Vzc2lvblRva2VuPzogc3RyaW5nfX0gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxEZXZpc2VTZXNzaW9uU3RhdHVzUmVzdWx0Pn1cbiAgICovXG4gIHN0YXRpYyBhc3luYyByZWZyZXNoV2Vic29ja2V0U2Vzc2lvbihhcmdzKSB7XG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7RGV2aXNlU2Vzc2lvblN0YXR1c1Jlc3VsdH0gKi8gKGF3YWl0IFNlcnZpY2VzLmN1cnJlbnQoKS5zZW5kUmVxdWVzdChcIkRldmlzZTo6UGVyc2lzdFNlc3Npb25cIiwgYXJncykpXG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIGF1dGggb24gdGhlIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMgY2hhbm5lbCBwb29scy5cbiAgICpcbiAgICogQHBhcmFtIHtEZXZpc2VTY29wZUFyZ3MgJiB7c2hhZG93U2Vzc2lvblRva2VuPzogc3RyaW5nfX0gYXJnc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIHN0YXRpYyBhc3luYyByZWZyZXNoU3Vic2NyaXB0aW9uQXV0aGVudGljYXRpb24oYXJncykge1xuICAgIGF3YWl0IENhYmxlQ29ubmVjdGlvblBvb2wuY3VycmVudCgpLnJlZnJlc2hBdXRoZW50aWNhdGlvbihhcmdzKVxuICB9XG5cbiAgLyoqIENvbnN0cnVjdG9yLiAqL1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmN1cnJlbnRzID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBEZXZpc2VDdXJyZW50U2NvcGU+fSAqLyAoe30pXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBtb2RlbCBjYWNoZWQgZm9yIG9uZSBzY29wZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlXG4gICAqIEByZXR1cm5zIHtEZXZpc2VDdXJyZW50U2NvcGV9XG4gICAqL1xuICBnZXRDdXJyZW50U2NvcGUoc2NvcGUpIHtcbiAgICBpZiAoIShzY29wZSBpbiB0aGlzLmN1cnJlbnRzKSkge1xuICAgICAgdGhpcy5jdXJyZW50c1tzY29wZV0gPSB0aGlzLmxvYWRDdXJyZW50U2NvcGUoc2NvcGUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3VycmVudHNbc2NvcGVdXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBzZXJ2ZXIgcmVuZGVyZWQgY3VycmVudC1zY29wZSBwYXlsb2FkIGZvciBvbmUgc2NvcGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY29wZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGhhc0dsb2JhbEN1cnJlbnRTY29wZShzY29wZSkge1xuICAgIGlmIChnbG9iYWxUaGlzLmFwaU1ha2VyRGV2aXNlQ3VycmVudCAmJiBzY29wZSBpbiBnbG9iYWxUaGlzLmFwaU1ha2VyRGV2aXNlQ3VycmVudCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBIeWRyYXRlcyB0aGUgY3VycmVudCBzY29wZSBtb2RlbCBmcm9tIHRoZSBzZXJ2ZXIgcmVuZGVyZWQgcGF5bG9hZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHNjb3BlXG4gICAqIEByZXR1cm5zIHtEZXZpc2VDdXJyZW50U2NvcGV9XG4gICAqL1xuICBsb2FkQ3VycmVudFNjb3BlKHNjb3BlKSB7XG4gICAgaWYgKCF0aGlzLmhhc0dsb2JhbEN1cnJlbnRTY29wZShzY29wZSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3Qgc2NvcGVEYXRhID0gZ2xvYmFsVGhpcy5hcGlNYWtlckRldmlzZUN1cnJlbnRbc2NvcGVdXG5cbiAgICBpZiAoIXNjb3BlRGF0YSkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHBhcnNlZFNjb3BlRGF0YSA9IERlc2VyaWFsaXplci5wYXJzZShzY29wZURhdGEpXG5cbiAgICAvLyBNaWdodCBiZSBhIGNvbGxlY3Rpb24gd2l0aCBwcmVsb2FkZWQgcmVsYXRpb25zaGlwc1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZFNjb3BlRGF0YSkpIHJldHVybiBwYXJzZWRTY29wZURhdGFbMF1cblxuICAgIGNvbnN0IE1vZGVsQ2xhc3MgPSBtb2RlbENsYXNzUmVxdWlyZShzY29wZSlcbiAgICBjb25zdCBtb2RlbEluc3RhbmNlID0gbmV3IE1vZGVsQ2xhc3Moe2RhdGE6IHBhcnNlZFNjb3BlRGF0YX0pXG5cbiAgICByZXR1cm4gbW9kZWxJbnN0YW5jZVxuICB9XG59XG4iXX0=
|