@cdktn/provider-generator 0.24.0-pre.72 → 0.24.0-pre.73

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.
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AttributeModel = exports.escapeAttributeName = void 0;
4
+ // Copyright (c) HashiCorp, Inc
5
+ // SPDX-License-Identifier: MPL-2.0
6
+ const commons_1 = require("@cdktn/commons");
4
7
  function escapeAttributeName(name) {
5
8
  // `self` and `build` doesn't work in as property name in Python
6
9
  if (name === "self" || name === "build")
@@ -34,6 +37,7 @@ function escapeAttributeName(name) {
34
37
  exports.escapeAttributeName = escapeAttributeName;
35
38
  class AttributeModel {
36
39
  constructor(options) {
40
+ this.loggedStoredClassUnavailable = false;
37
41
  this.storageName = options.storageName;
38
42
  this._name = options.name;
39
43
  this.type = options.type;
@@ -78,12 +82,53 @@ class AttributeModel {
78
82
  else if (this.computed &&
79
83
  !this.isAssignable &&
80
84
  (!this.type.isTokenizable || this.type.typeModelType === "map")) {
81
- getterType = {
82
- _type: "stored_class",
83
- };
85
+ if (this.type.isStoredClassUnavailable) {
86
+ // Defensive fallback: neither the composed stored class name (e.g.
87
+ // "StringListMapMap") nor a collapsed nearest-Any wrapper (e.g. "AnyMapMap")
88
+ // exists in the core cdktn package for this type. This should be rare - see
89
+ // resolveStoredClassName in supported-stored-classes.ts - so log it loudly to
90
+ // make regressions in the collapse logic visible.
91
+ if (!this.loggedStoredClassUnavailable) {
92
+ this.loggedStoredClassUnavailable = true;
93
+ commons_1.logger.debug(`No stored class (not even a collapsed nearest-Any wrapper) is available for computed attribute "${this.terraformFullName}" (composed storedClassType: "${this.type.storedClassType}"). Falling back to a plain, untyped getter.`);
94
+ }
95
+ }
96
+ else {
97
+ getterType = {
98
+ _type: "stored_class",
99
+ };
100
+ }
84
101
  }
85
102
  return getterType;
86
103
  }
104
+ // Reports whether this attribute's getter sits at a "stored class boundary" that is
105
+ // worth documenting: "collapsed" when a deeper, unsupported nesting was collapsed into
106
+ // the nearest typed "Any"-wrapper (e.g. "AnyMapMap"), or "fallback" when no stored class
107
+ // at all is available and a plain, untyped getter is emitted instead. Mirrors the same
108
+ // condition tree as getterType above, so it only ever reports a boundary for attributes
109
+ // that actually went through that computed-collection branch - plain getters for
110
+ // ordinary tokenizable types (e.g. list(string)) are never flagged.
111
+ get storedClassBoundaryKind() {
112
+ if (this.forcePlainGetterType || this.isProvider) {
113
+ return undefined;
114
+ }
115
+ if (this.type.hasReferenceClass) {
116
+ return undefined;
117
+ }
118
+ if (this.computed &&
119
+ !this.isAssignable &&
120
+ (!this.type.isTokenizable || this.type.typeModelType === "map")) {
121
+ if (this.type.isStoredClassUnavailable) {
122
+ return "fallback";
123
+ }
124
+ const resolvedStoredClass = this.type
125
+ .resolvedStoredClass;
126
+ if (resolvedStoredClass === null || resolvedStoredClass === void 0 ? void 0 : resolvedStoredClass.collapsed) {
127
+ return "collapsed";
128
+ }
129
+ }
130
+ return undefined;
131
+ }
87
132
  get isStored() {
88
133
  return this.isAssignable;
89
134
  }
@@ -157,4 +202,4 @@ class AttributeModel {
157
202
  }
158
203
  }
159
204
  exports.AttributeModel = AttributeModel;
160
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL2F0dHJpYnV0ZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxQ0EsU0FBZ0IsbUJBQW1CLENBQUMsSUFBWTtJQUM5QyxnRUFBZ0U7SUFDaEUsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPO1FBQUUsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ25FLDJFQUEyRTtJQUMzRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRSx3Q0FBd0M7SUFDeEMsSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3hDLHNEQUFzRDtJQUN0RCxJQUFJLElBQUksS0FBSyxNQUFNO1FBQUUsT0FBTyxlQUFlLENBQUM7SUFDNUMsd0RBQXdEO0lBQ3hELElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLGlCQUFpQixDQUFDO0lBQ2hELGdHQUFnRztJQUNoRyxJQUFJLElBQUksS0FBSyxnQkFBZ0I7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDekQsc0VBQXNFO0lBQ3RFLElBQUksSUFBSSxLQUFLLFlBQVk7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDckQseURBQXlEO0lBQ3pELElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDakQsc0ZBQXNGO0lBQ3RGLElBQUksSUFBSSxLQUFLLFVBQVU7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDbkQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBcEJELGtEQW9CQztBQUVELE1BQWEsY0FBYztJQWF6QixZQUFZLE9BQThCO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztJQUMzRCxDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDckUsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLElBQUksVUFBVSxHQUFlLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBRWhELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUIsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoQyxVQUFVLEdBQUc7Z0JBQ1gsS0FBSyxFQUFFLGNBQWM7YUFDdEIsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUNMLElBQUksQ0FBQyxRQUFRO1lBQ2IsQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUNsQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLEVBQy9ELENBQUM7WUFDRCxVQUFVLEdBQUc7Z0JBQ1gsS0FBSyxFQUFFLGNBQWM7YUFDdEIsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUM3QyxPQUFPO2dCQUNMLEtBQUssRUFBRSxjQUFjO2dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7YUFDcEMsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixHQUNwQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQ3JDLEVBQUU7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUNuQyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFXLFdBQVc7O1FBQ3BCLE9BQU8sTUFBQSxJQUFJLENBQUMsWUFBWSwwQ0FBRSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxjQUF1QjtRQUMvQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztRQUUzQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxQyxDQUFDO1FBRUQsSUFDRSxDQUFDLGFBQWEsQ0FBQyxZQUFZO1lBQzNCLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxNQUFNO2dCQUNuQyxhQUFhLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxFQUN0QyxDQUFDO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsQ0FBQzthQUFNLElBQUksYUFBYSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMvQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxDQUFDO2FBQU0sSUFBSSxhQUFhLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25ELEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEQsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEMsQ0FBQzthQUFNLElBQUksYUFBYSxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuRCxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxDQUFDO2FBQU0sSUFBSSxhQUFhLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2xELEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxJQUNMLGFBQWEsQ0FBQyxXQUFXLEtBQUssVUFBVTtZQUN4QyxhQUFhLENBQUMsV0FBVyxLQUFLLFNBQVM7WUFDdkMsYUFBYSxDQUFDLFdBQVcsS0FBSyxTQUFTO1lBQ3ZDLGFBQWEsQ0FBQyxXQUFXLElBQUksUUFBUSxFQUNyQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxxREFBcUQ7UUFFckQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE1SkQsd0NBNEpDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IEF0dHJpYnV0ZVR5cGVNb2RlbCB9IGZyb20gXCIuL2F0dHJpYnV0ZS10eXBlLW1vZGVsXCI7XG5cbmV4cG9ydCB0eXBlIEdldHRlclR5cGUgPVxuICB8IHsgX3R5cGU6IFwicGxhaW5cIiB9XG4gIHwge1xuICAgICAgX3R5cGU6IFwiYXJnc1wiO1xuICAgICAgYXJnczogc3RyaW5nO1xuICAgICAgcmV0dXJuVHlwZT86IHN0cmluZztcbiAgICAgIHJldHVyblN0YXRlbWVudDogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICBfdHlwZTogXCJzdG9yZWRfY2xhc3NcIjtcbiAgICB9O1xuXG5leHBvcnQgdHlwZSBTZXR0ZXJUeXBlID1cbiAgfCB7IF90eXBlOiBcIm5vbmVcIiB9XG4gIHwgeyBfdHlwZTogXCJzZXRcIjsgdHlwZTogc3RyaW5nIH1cbiAgfCB7IF90eXBlOiBcInB1dFwiOyB0eXBlOiBzdHJpbmcgfVxuICB8IHsgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCI7IHR5cGU6IHN0cmluZyB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZU1vZGVsT3B0aW9ucyB7XG4gIHN0b3JhZ2VOYW1lOiBzdHJpbmc7IC8vIHByaXZhdGUgcHJvcGVydHlcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWw7XG4gIG9wdGlvbmFsOiBib29sZWFuO1xuICBjb21wdXRlZDogYm9vbGVhbjtcbiAgdGVycmFmb3JtTmFtZTogc3RyaW5nO1xuICB0ZXJyYWZvcm1GdWxsTmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZ2V0QXR0Q2FsbD86IHN0cmluZztcbiAgcHJvdmlkZXI6IGJvb2xlYW47XG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICBmb3JjZVBsYWluR2V0dGVyVHlwZT86IGJvb2xlYW47IC8vIHVzZWQgZm9yIHNraXBwaW5nIGF0dHJpYnV0ZSB0eXBlIGF0dHJpYnV0ZXMgdGhhdCB1c2UgdGhlIFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWwgd2hpY2ggcmV0dXJucyBhbiBpbnRlcnBvbGF0aW9uIGFuZCBoYXMgbm8gc3RvcmVkIHR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUF0dHJpYnV0ZU5hbWUobmFtZTogc3RyaW5nKSB7XG4gIC8vIGBzZWxmYCBhbmQgYGJ1aWxkYCBkb2Vzbid0IHdvcmsgaW4gYXMgcHJvcGVydHkgbmFtZSBpbiBQeXRob25cbiAgaWYgKG5hbWUgPT09IFwic2VsZlwiIHx8IG5hbWUgPT09IFwiYnVpbGRcIikgcmV0dXJuIGAke25hbWV9QXR0cmlidXRlYDtcbiAgLy8ganNpaSBjYW4ndCBoYW5kbGUgYGdldEZvb2AgcHJvcGVydGllcywgc2luY2UgaXQncyBpbmNvbXBhdGlibGUgd2l0aCBKYXZhXG4gIGlmIChuYW1lLm1hdGNoKC9eZ2V0W0EtWmEtel0rLykpIHJldHVybiBuYW1lLnJlcGxhY2UoXCJnZXRcIiwgXCJmZXRjaFwiKTtcbiAgLy8gYGVxdWFsc2AgaXMgYSBwcm9oaWJpdGVkIG5hbWUgaW4ganNpaVxuICBpZiAobmFtZSA9PT0gXCJlcXVhbHNcIikgcmV0dXJuIFwiZXF1YWxUb1wiO1xuICAvLyBgbm9kZWAgaXMgYWxyZWFkeSB1c2VkIGJ5IHRoZSBDb25zdHJ1Y3RzIGJhc2UgY2xhc3NcbiAgaWYgKG5hbWUgPT09IFwibm9kZVwiKSByZXR1cm4gXCJub2RlQXR0cmlidXRlXCI7XG4gIC8vIGBTeXN0ZW1gIHNoYWRvd3MgYnVpbHQtaW4gdHlwZXMgaW4gQ1NoYXJwIChzZWUgIzE0MjApXG4gIGlmIChuYW1lID09PSBcInN5c3RlbVwiKSByZXR1cm4gXCJzeXN0ZW1BdHRyaWJ1dGVcIjtcbiAgLy8gYHRmUmVzb3VyY2VUeXBlYCBpcyBhbHJlYWR5IHVzZWQgYnkgcmVzb3VyY2VzIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IHJlc291cmNlIHR5cGVzXG4gIGlmIChuYW1lID09PSBcInRmUmVzb3VyY2VUeXBlXCIpIHJldHVybiBgJHtuYW1lfUF0dHJpYnV0ZWA7XG4gIC8vIGBpbXBvcnRGcm9tYCBoYXMgcG90ZW50aWFsIGZvciBjb21tb24gbmFtZSBjb2xsaXNpb24gd2l0aCBwcm92aWRlcnNcbiAgaWYgKG5hbWUgPT09IFwiaW1wb3J0RnJvbVwiKSByZXR1cm4gYCR7bmFtZX1BdHRyaWJ1dGVgO1xuICAvLyBgbW92ZWAgY291bGQgaGF2ZSBjb21tb24gbmFtZSBjb2xsaXNpb24gd2l0aCBwcm92aWRlcnNcbiAgaWYgKG5hbWUgPT09IFwibW92ZVRvXCIpIHJldHVybiBgJHtuYW1lfUF0dHJpYnV0ZWA7XG4gIC8vIGBzb2Z0d2FyZWAgYXR0cmlidXRlIGNhbiBiZSBjb25mdXNlZCB3aXRoIHRoZSBKU0lJIEphdmEgcnVudGltZSBwYWNrYWdlIChzZWUgIzMxMTUpXG4gIGlmIChuYW1lID09PSBcInNvZnR3YXJlXCIpIHJldHVybiBgJHtuYW1lfUF0dHJpYnV0ZWA7XG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgY2xhc3MgQXR0cmlidXRlTW9kZWwge1xuICBwdWJsaWMgc3RvcmFnZU5hbWU6IHN0cmluZzsgLy8gcHJpdmF0ZSBwcm9wZXJ0eVxuICBwcml2YXRlIF9uYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyB0eXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWw7XG4gIHB1YmxpYyBvcHRpb25hbDogYm9vbGVhbjtcbiAgcHVibGljIGNvbXB1dGVkOiBib29sZWFuO1xuICBwdWJsaWMgdGVycmFmb3JtTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdGVycmFmb3JtRnVsbE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBfZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHB1YmxpYyBwcm92aWRlcjogYm9vbGVhbjtcbiAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xuICBwdWJsaWMgZm9yY2VQbGFpbkdldHRlclR5cGU/OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEF0dHJpYnV0ZU1vZGVsT3B0aW9ucykge1xuICAgIHRoaXMuc3RvcmFnZU5hbWUgPSBvcHRpb25zLnN0b3JhZ2VOYW1lO1xuICAgIHRoaXMuX25hbWUgPSBvcHRpb25zLm5hbWU7XG4gICAgdGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xuICAgIHRoaXMub3B0aW9uYWwgPSBvcHRpb25zLm9wdGlvbmFsO1xuICAgIHRoaXMuY29tcHV0ZWQgPSBvcHRpb25zLmNvbXB1dGVkO1xuICAgIHRoaXMudGVycmFmb3JtTmFtZSA9IG9wdGlvbnMudGVycmFmb3JtTmFtZTtcbiAgICB0aGlzLnRlcnJhZm9ybUZ1bGxOYW1lID0gb3B0aW9ucy50ZXJyYWZvcm1GdWxsTmFtZTtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XG4gICAgdGhpcy5wcm92aWRlciA9IG9wdGlvbnMucHJvdmlkZXI7XG4gICAgdGhpcy5yZXF1aXJlZCA9IG9wdGlvbnMucmVxdWlyZWQ7XG4gICAgdGhpcy5mb3JjZVBsYWluR2V0dGVyVHlwZSA9IG9wdGlvbnMuZm9yY2VQbGFpbkdldHRlclR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHR5cGVEZWZpbml0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbmFsID0gdGhpcy5vcHRpb25hbCA/IFwiP1wiIDogXCJcIjtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSR7b3B0aW9uYWx9OiAke3RoaXMudHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQXNzaWduYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1aXJlZCB8fCB0aGlzLm9wdGlvbmFsO1xuICB9XG5cbiAgcHVibGljIGdldCBpc09wdGlvbmFsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbmFsO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVkO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1Byb3ZpZGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVyO1xuICB9XG5cbiAgcHVibGljIGdldCBnZXR0ZXJUeXBlKCk6IEdldHRlclR5cGUge1xuICAgIGxldCBnZXR0ZXJUeXBlOiBHZXR0ZXJUeXBlID0geyBfdHlwZTogXCJwbGFpblwiIH07XG5cbiAgICBpZiAodGhpcy5mb3JjZVBsYWluR2V0dGVyVHlwZSkge1xuICAgICAgcmV0dXJuIGdldHRlclR5cGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNQcm92aWRlcikge1xuICAgICAgcmV0dXJuIGdldHRlclR5cGU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZS5oYXNSZWZlcmVuY2VDbGFzcykge1xuICAgICAgZ2V0dGVyVHlwZSA9IHtcbiAgICAgICAgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCIsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmNvbXB1dGVkICYmXG4gICAgICAhdGhpcy5pc0Fzc2lnbmFibGUgJiZcbiAgICAgICghdGhpcy50eXBlLmlzVG9rZW5pemFibGUgfHwgdGhpcy50eXBlLnR5cGVNb2RlbFR5cGUgPT09IFwibWFwXCIpXG4gICAgKSB7XG4gICAgICBnZXR0ZXJUeXBlID0ge1xuICAgICAgICBfdHlwZTogXCJzdG9yZWRfY2xhc3NcIixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldHRlclR5cGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzU3RvcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQXNzaWduYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2V0dGVyVHlwZSgpOiBTZXR0ZXJUeXBlIHtcbiAgICBpZiAoIXRoaXMuaXNTdG9yZWQpIHtcbiAgICAgIHJldHVybiB7IF90eXBlOiBcIm5vbmVcIiB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdldHRlclR5cGUuX3R5cGUgPT09IFwic3RvcmVkX2NsYXNzXCIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIF90eXBlOiBcInN0b3JlZF9jbGFzc1wiLFxuICAgICAgICB0eXBlOiB0aGlzLnR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF90eXBlOiBcInNldFwiLFxuICAgICAgdHlwZTogYCR7dGhpcy50eXBlLmlucHV0VHlwZURlZmluaXRpb259JHtcbiAgICAgICAgdGhpcy5pc1Byb3ZpZGVyID8gXCIgfCB1bmRlZmluZWRcIiA6IFwiXCJcbiAgICAgIH1gLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQXR0cmlidXRlTW9kZWwuZXNjYXBlTmFtZSh0aGlzLl9uYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZXNjYXBlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBlc2NhcGVBdHRyaWJ1dGVOYW1lKG5hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kZXNjcmlwdGlvbj8ucmVwbGFjZSgvJycnL2dpLCBcImBgYFwiKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSZWZlcmVuY2VkVHlwZXMoaXNDb25maWdTdHJ1Y3Q6IGJvb2xlYW4pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgYXR0VHlwZVN0cnVjdCA9IHRoaXMudHlwZS5zdHJ1Y3Q7XG4gICAgaWYgKCFhdHRUeXBlU3RydWN0KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMuaXNBc3NpZ25hYmxlKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubmFtZSk7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubWFwcGVyTmFtZSk7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QuaGNsTWFwcGVyTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWF0dFR5cGVTdHJ1Y3QuaXNTaW5nbGVJdGVtICYmXG4gICAgICAoYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0XCIgfHxcbiAgICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRcIilcbiAgICApIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5saXN0TmFtZSk7XG4gICAgfSBlbHNlIGlmIChhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcIm1hcFwiKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubWFwTmFtZSk7XG4gICAgfSBlbHNlIGlmIChhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcIm1hcGxpc3RcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lm1hcExpc3ROYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwc2V0XCIpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5tYXBMaXN0TmFtZSk7XG4gICAgfSBlbHNlIGlmIChhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RtYXBcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3RNYXBOYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwic2V0bWFwXCIpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5saXN0TWFwTmFtZSk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibGlzdGxpc3RcIiB8fFxuICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0c2V0XCIgfHxcbiAgICAgIGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwic2V0bGlzdFwiIHx8XG4gICAgICBhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09IFwic2V0c2V0XCJcbiAgICApIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5saXN0TGlzdE5hbWUpO1xuICAgIH0gZWxzZSBpZiAoIWlzQ29uZmlnU3RydWN0KSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3Qub3V0cHV0UmVmZXJlbmNlTmFtZSk7XG4gICAgfVxuICAgIC8vIG90aGVyIHR5cGVzIG9mIG5lc3RlZCBjb2xsZWN0aW9ucyBhcmVuJ3Qgc3VwcG9ydGVkXG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cbn1cbiJdfQ==
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2dldC9nZW5lcmF0b3IvbW9kZWxzL2F0dHJpYnV0ZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDRDQUF3QztBQXVDeEMsU0FBZ0IsbUJBQW1CLENBQUMsSUFBWTtJQUM5QyxnRUFBZ0U7SUFDaEUsSUFBSSxJQUFJLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxPQUFPO1FBQUUsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDO0lBQ25FLDJFQUEyRTtJQUMzRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNyRSx3Q0FBd0M7SUFDeEMsSUFBSSxJQUFJLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3hDLHNEQUFzRDtJQUN0RCxJQUFJLElBQUksS0FBSyxNQUFNO1FBQUUsT0FBTyxlQUFlLENBQUM7SUFDNUMsd0RBQXdEO0lBQ3hELElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLGlCQUFpQixDQUFDO0lBQ2hELGdHQUFnRztJQUNoRyxJQUFJLElBQUksS0FBSyxnQkFBZ0I7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDekQsc0VBQXNFO0lBQ3RFLElBQUksSUFBSSxLQUFLLFlBQVk7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDckQseURBQXlEO0lBQ3pELElBQUksSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDakQsc0ZBQXNGO0lBQ3RGLElBQUksSUFBSSxLQUFLLFVBQVU7UUFBRSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUM7SUFDbkQsT0FBTyxJQUFJLENBQUM7QUFD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V0FBVyxLQUFLLFNBQVM7WUFDdkMsYUFBYSxDQUFDLFdBQVcsS0FBSyxTQUFTO1lBQ3ZDLGFBQWEsQ0FBQyxXQUFXLElBQUksUUFBUSxFQUNyQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMzQixLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFDRCxxREFBcUQ7UUFFckQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUE5TUQsd0NBOE1DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHtcbiAgQXR0cmlidXRlVHlwZU1vZGVsLFxuICBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsLFxufSBmcm9tIFwiLi9hdHRyaWJ1dGUtdHlwZS1tb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBHZXR0ZXJUeXBlID1cbiAgfCB7IF90eXBlOiBcInBsYWluXCIgfVxuICB8IHtcbiAgICAgIF90eXBlOiBcImFyZ3NcIjtcbiAgICAgIGFyZ3M6IHN0cmluZztcbiAgICAgIHJldHVyblR5cGU/OiBzdHJpbmc7XG4gICAgICByZXR1cm5TdGF0ZW1lbnQ6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCI7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU2V0dGVyVHlwZSA9XG4gIHwgeyBfdHlwZTogXCJub25lXCIgfVxuICB8IHsgX3R5cGU6IFwic2V0XCI7IHR5cGU6IHN0cmluZyB9XG4gIHwgeyBfdHlwZTogXCJwdXRcIjsgdHlwZTogc3RyaW5nIH1cbiAgfCB7IF90eXBlOiBcInN0b3JlZF9jbGFzc1wiOyB0eXBlOiBzdHJpbmcgfTtcblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGVNb2RlbE9wdGlvbnMge1xuICBzdG9yYWdlTmFtZTogc3RyaW5nOyAvLyBwcml2YXRlIHByb3BlcnR5XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogQXR0cmlidXRlVHlwZU1vZGVsO1xuICBvcHRpb25hbDogYm9vbGVhbjtcbiAgY29tcHV0ZWQ6IGJvb2xlYW47XG4gIHRlcnJhZm9ybU5hbWU6IHN0cmluZztcbiAgdGVycmFmb3JtRnVsbE5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGdldEF0dENhbGw/OiBzdHJpbmc7XG4gIHByb3ZpZGVyOiBib29sZWFuO1xuICByZXF1aXJlZDogYm9vbGVhbjtcbiAgZm9yY2VQbGFpbkdldHRlclR5cGU/OiBib29sZWFuOyAvLyB1c2VkIGZvciBza2lwcGluZyBhdHRyaWJ1dGUgdHlwZSBhdHRyaWJ1dGVzIHRoYXQgdXNlIHRoZSBTa2lwcGVkQXR0cmlidXRlVHlwZU1vZGVsIHdoaWNoIHJldHVybnMgYW4gaW50ZXJwb2xhdGlvbiBhbmQgaGFzIG5vIHN0b3JlZCB0eXBlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVBdHRyaWJ1dGVOYW1lKG5hbWU6IHN0cmluZykge1xuICAvLyBgc2VsZmAgYW5kIGBidWlsZGAgZG9lc24ndCB3b3JrIGluIGFzIHByb3BlcnR5IG5hbWUgaW4gUHl0aG9uXG4gIGlmIChuYW1lID09PSBcInNlbGZcIiB8fCBuYW1lID09PSBcImJ1aWxkXCIpIHJldHVybiBgJHtuYW1lfUF0dHJpYnV0ZWA7XG4gIC8vIGpzaWkgY2FuJ3QgaGFuZGxlIGBnZXRGb29gIHByb3BlcnRpZXMsIHNpbmNlIGl0J3MgaW5jb21wYXRpYmxlIHdpdGggSmF2YVxuICBpZiAobmFtZS5tYXRjaCgvXmdldFtBLVphLXpdKy8pKSByZXR1cm4gbmFtZS5yZXBsYWNlKFwiZ2V0XCIsIFwiZmV0Y2hcIik7XG4gIC8vIGBlcXVhbHNgIGlzIGEgcHJvaGliaXRlZCBuYW1lIGluIGpzaWlcbiAgaWYgKG5hbWUgPT09IFwiZXF1YWxzXCIpIHJldHVybiBcImVxdWFsVG9cIjtcbiAgLy8gYG5vZGVgIGlzIGFscmVhZHkgdXNlZCBieSB0aGUgQ29uc3RydWN0cyBiYXNlIGNsYXNzXG4gIGlmIChuYW1lID09PSBcIm5vZGVcIikgcmV0dXJuIFwibm9kZUF0dHJpYnV0ZVwiO1xuICAvLyBgU3lzdGVtYCBzaGFkb3dzIGJ1aWx0LWluIHR5cGVzIGluIENTaGFycCAoc2VlICMxNDIwKVxuICBpZiAobmFtZSA9PT0gXCJzeXN0ZW1cIikgcmV0dXJuIFwic3lzdGVtQXR0cmlidXRlXCI7XG4gIC8vIGB0ZlJlc291cmNlVHlwZWAgaXMgYWxyZWFkeSB1c2VkIGJ5IHJlc291cmNlcyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCByZXNvdXJjZSB0eXBlc1xuICBpZiAobmFtZSA9PT0gXCJ0ZlJlc291cmNlVHlwZVwiKSByZXR1cm4gYCR7bmFtZX1BdHRyaWJ1dGVgO1xuICAvLyBgaW1wb3J0RnJvbWAgaGFzIHBvdGVudGlhbCBmb3IgY29tbW9uIG5hbWUgY29sbGlzaW9uIHdpdGggcHJvdmlkZXJzXG4gIGlmIChuYW1lID09PSBcImltcG9ydEZyb21cIikgcmV0dXJuIGAke25hbWV9QXR0cmlidXRlYDtcbiAgLy8gYG1vdmVgIGNvdWxkIGhhdmUgY29tbW9uIG5hbWUgY29sbGlzaW9uIHdpdGggcHJvdmlkZXJzXG4gIGlmIChuYW1lID09PSBcIm1vdmVUb1wiKSByZXR1cm4gYCR7bmFtZX1BdHRyaWJ1dGVgO1xuICAvLyBgc29mdHdhcmVgIGF0dHJpYnV0ZSBjYW4gYmUgY29uZnVzZWQgd2l0aCB0aGUgSlNJSSBKYXZhIHJ1bnRpbWUgcGFja2FnZSAoc2VlICMzMTE1KVxuICBpZiAobmFtZSA9PT0gXCJzb2Z0d2FyZVwiKSByZXR1cm4gYCR7bmFtZX1BdHRyaWJ1dGVgO1xuICByZXR1cm4gbmFtZTtcbn1cblxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZU1vZGVsIHtcbiAgcHVibGljIHN0b3JhZ2VOYW1lOiBzdHJpbmc7IC8vIHByaXZhdGUgcHJvcGVydHlcbiAgcHJpdmF0ZSBfbmFtZTogc3RyaW5nO1xuICBwdWJsaWMgdHlwZTogQXR0cmlidXRlVHlwZU1vZGVsO1xuICBwdWJsaWMgb3B0aW9uYWw6IGJvb2xlYW47XG4gIHB1YmxpYyBjb21wdXRlZDogYm9vbGVhbjtcbiAgcHVibGljIHRlcnJhZm9ybU5hbWU6IHN0cmluZztcbiAgcHVibGljIHRlcnJhZm9ybUZ1bGxOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvdmlkZXI6IGJvb2xlYW47XG4gIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcbiAgcHVibGljIGZvcmNlUGxhaW5HZXR0ZXJUeXBlPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBsb2dnZWRTdG9yZWRDbGFzc1VuYXZhaWxhYmxlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQXR0cmlidXRlTW9kZWxPcHRpb25zKSB7XG4gICAgdGhpcy5zdG9yYWdlTmFtZSA9IG9wdGlvbnMuc3RvcmFnZU5hbWU7XG4gICAgdGhpcy5fbmFtZSA9IG9wdGlvbnMubmFtZTtcbiAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG4gICAgdGhpcy5vcHRpb25hbCA9IG9wdGlvbnMub3B0aW9uYWw7XG4gICAgdGhpcy5jb21wdXRlZCA9IG9wdGlvbnMuY29tcHV0ZWQ7XG4gICAgdGhpcy50ZXJyYWZvcm1OYW1lID0gb3B0aW9ucy50ZXJyYWZvcm1OYW1lO1xuICAgIHRoaXMudGVycmFmb3JtRnVsbE5hbWUgPSBvcHRpb25zLnRlcnJhZm9ybUZ1bGxOYW1lO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gb3B0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLnByb3ZpZGVyID0gb3B0aW9ucy5wcm92aWRlcjtcbiAgICB0aGlzLnJlcXVpcmVkID0gb3B0aW9ucy5yZXF1aXJlZDtcbiAgICB0aGlzLmZvcmNlUGxhaW5HZXR0ZXJUeXBlID0gb3B0aW9ucy5mb3JjZVBsYWluR2V0dGVyVHlwZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdHlwZURlZmluaXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsID8gXCI/XCIgOiBcIlwiO1xuICAgIHJldHVybiBgJHt0aGlzLm5hbWV9JHtvcHRpb25hbH06ICR7dGhpcy50eXBlLmlucHV0VHlwZURlZmluaXRpb259YDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNBc3NpZ25hYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVpcmVkIHx8IHRoaXMub3B0aW9uYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzT3B0aW9uYWwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9uYWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUHJvdmlkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXI7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGdldHRlclR5cGUoKTogR2V0dGVyVHlwZSB7XG4gICAgbGV0IGdldHRlclR5cGU6IEdldHRlclR5cGUgPSB7IF90eXBlOiBcInBsYWluXCIgfTtcblxuICAgIGlmICh0aGlzLmZvcmNlUGxhaW5HZXR0ZXJUeXBlKSB7XG4gICAgICByZXR1cm4gZ2V0dGVyVHlwZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Byb3ZpZGVyKSB7XG4gICAgICByZXR1cm4gZ2V0dGVyVHlwZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50eXBlLmhhc1JlZmVyZW5jZUNsYXNzKSB7XG4gICAgICBnZXR0ZXJUeXBlID0ge1xuICAgICAgICBfdHlwZTogXCJzdG9yZWRfY2xhc3NcIixcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuY29tcHV0ZWQgJiZcbiAgICAgICF0aGlzLmlzQXNzaWduYWJsZSAmJlxuICAgICAgKCF0aGlzLnR5cGUuaXNUb2tlbml6YWJsZSB8fCB0aGlzLnR5cGUudHlwZU1vZGVsVHlwZSA9PT0gXCJtYXBcIilcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnR5cGUuaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKSB7XG4gICAgICAgIC8vIERlZmVuc2l2ZSBmYWxsYmFjazogbmVpdGhlciB0aGUgY29tcG9zZWQgc3RvcmVkIGNsYXNzIG5hbWUgKGUuZy5cbiAgICAgICAgLy8gXCJTdHJpbmdMaXN0TWFwTWFwXCIpIG5vciBhIGNvbGxhcHNlZCBuZWFyZXN0LUFueSB3cmFwcGVyIChlLmcuIFwiQW55TWFwTWFwXCIpXG4gICAgICAgIC8vIGV4aXN0cyBpbiB0aGUgY29yZSBjZGt0biBwYWNrYWdlIGZvciB0aGlzIHR5cGUuIFRoaXMgc2hvdWxkIGJlIHJhcmUgLSBzZWVcbiAgICAgICAgLy8gcmVzb2x2ZVN0b3JlZENsYXNzTmFtZSBpbiBzdXBwb3J0ZWQtc3RvcmVkLWNsYXNzZXMudHMgLSBzbyBsb2cgaXQgbG91ZGx5IHRvXG4gICAgICAgIC8vIG1ha2UgcmVncmVzc2lvbnMgaW4gdGhlIGNvbGxhcHNlIGxvZ2ljIHZpc2libGUuXG4gICAgICAgIGlmICghdGhpcy5sb2dnZWRTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKSB7XG4gICAgICAgICAgdGhpcy5sb2dnZWRTdG9yZWRDbGFzc1VuYXZhaWxhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgTm8gc3RvcmVkIGNsYXNzIChub3QgZXZlbiBhIGNvbGxhcHNlZCBuZWFyZXN0LUFueSB3cmFwcGVyKSBpcyBhdmFpbGFibGUgZm9yIGNvbXB1dGVkIGF0dHJpYnV0ZSBcIiR7dGhpcy50ZXJyYWZvcm1GdWxsTmFtZX1cIiAoY29tcG9zZWQgc3RvcmVkQ2xhc3NUeXBlOiBcIiR7dGhpcy50eXBlLnN0b3JlZENsYXNzVHlwZX1cIikuIEZhbGxpbmcgYmFjayB0byBhIHBsYWluLCB1bnR5cGVkIGdldHRlci5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldHRlclR5cGUgPSB7XG4gICAgICAgICAgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldHRlclR5cGU7XG4gIH1cblxuICAvLyBSZXBvcnRzIHdoZXRoZXIgdGhpcyBhdHRyaWJ1dGUncyBnZXR0ZXIgc2l0cyBhdCBhIFwic3RvcmVkIGNsYXNzIGJvdW5kYXJ5XCIgdGhhdCBpc1xuICAvLyB3b3J0aCBkb2N1bWVudGluZzogXCJjb2xsYXBzZWRcIiB3aGVuIGEgZGVlcGVyLCB1bnN1cHBvcnRlZCBuZXN0aW5nIHdhcyBjb2xsYXBzZWQgaW50b1xuICAvLyB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgKGUuZy4gXCJBbnlNYXBNYXBcIiksIG9yIFwiZmFsbGJhY2tcIiB3aGVuIG5vIHN0b3JlZCBjbGFzc1xuICAvLyBhdCBhbGwgaXMgYXZhaWxhYmxlIGFuZCBhIHBsYWluLCB1bnR5cGVkIGdldHRlciBpcyBlbWl0dGVkIGluc3RlYWQuIE1pcnJvcnMgdGhlIHNhbWVcbiAgLy8gY29uZGl0aW9uIHRyZWUgYXMgZ2V0dGVyVHlwZSBhYm92ZSwgc28gaXQgb25seSBldmVyIHJlcG9ydHMgYSBib3VuZGFyeSBmb3IgYXR0cmlidXRlc1xuICAvLyB0aGF0IGFjdHVhbGx5IHdlbnQgdGhyb3VnaCB0aGF0IGNvbXB1dGVkLWNvbGxlY3Rpb24gYnJhbmNoIC0gcGxhaW4gZ2V0dGVycyBmb3JcbiAgLy8gb3JkaW5hcnkgdG9rZW5pemFibGUgdHlwZXMgKGUuZy4gbGlzdChzdHJpbmcpKSBhcmUgbmV2ZXIgZmxhZ2dlZC5cbiAgcHVibGljIGdldCBzdG9yZWRDbGFzc0JvdW5kYXJ5S2luZCgpOiBcImNvbGxhcHNlZFwiIHwgXCJmYWxsYmFja1wiIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5mb3JjZVBsYWluR2V0dGVyVHlwZSB8fCB0aGlzLmlzUHJvdmlkZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudHlwZS5oYXNSZWZlcmVuY2VDbGFzcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbXB1dGVkICYmXG4gICAgICAhdGhpcy5pc0Fzc2lnbmFibGUgJiZcbiAgICAgICghdGhpcy50eXBlLmlzVG9rZW5pemFibGUgfHwgdGhpcy50eXBlLnR5cGVNb2RlbFR5cGUgPT09IFwibWFwXCIpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy50eXBlLmlzU3RvcmVkQ2xhc3NVbmF2YWlsYWJsZSkge1xuICAgICAgICByZXR1cm4gXCJmYWxsYmFja1wiO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNvbHZlZFN0b3JlZENsYXNzID0gKHRoaXMudHlwZSBhcyBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsKVxuICAgICAgICAucmVzb2x2ZWRTdG9yZWRDbGFzcztcbiAgICAgIGlmIChyZXNvbHZlZFN0b3JlZENsYXNzPy5jb2xsYXBzZWQpIHtcbiAgICAgICAgcmV0dXJuIFwiY29sbGFwc2VkXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNTdG9yZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBc3NpZ25hYmxlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZXR0ZXJUeXBlKCk6IFNldHRlclR5cGUge1xuICAgIGlmICghdGhpcy5pc1N0b3JlZCkge1xuICAgICAgcmV0dXJuIHsgX3R5cGU6IFwibm9uZVwiIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0dGVyVHlwZS5fdHlwZSA9PT0gXCJzdG9yZWRfY2xhc3NcIikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgX3R5cGU6IFwic3RvcmVkX2NsYXNzXCIsXG4gICAgICAgIHR5cGU6IHRoaXMudHlwZS5pbnB1dFR5cGVEZWZpbml0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX3R5cGU6IFwic2V0XCIsXG4gICAgICB0eXBlOiBgJHt0aGlzLnR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn0ke1xuICAgICAgICB0aGlzLmlzUHJvdmlkZXIgPyBcIiB8IHVuZGVmaW5lZFwiIDogXCJcIlxuICAgICAgfWAsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBBdHRyaWJ1dGVNb2RlbC5lc2NhcGVOYW1lKHRoaXMuX25hbWUpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBlc2NhcGVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGVzY2FwZUF0dHJpYnV0ZU5hbWUobmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRlc2NyaXB0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uPy5yZXBsYWNlKC8nJycvZ2ksIFwiYGBgXCIpO1xuICB9XG5cbiAgcHVibGljIGdldFJlZmVyZW5jZWRUeXBlcyhpc0NvbmZpZ1N0cnVjdDogYm9vbGVhbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBhdHRUeXBlU3RydWN0ID0gdGhpcy50eXBlLnN0cnVjdDtcbiAgICBpZiAoIWF0dFR5cGVTdHJ1Y3QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAodGhpcy5pc0Fzc2lnbmFibGUpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5uYW1lKTtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5tYXBwZXJOYW1lKTtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5oY2xNYXBwZXJOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhYXR0VHlwZVN0cnVjdC5pc1NpbmdsZUl0ZW0gJiZcbiAgICAgIChhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RcIiB8fFxuICAgICAgICBhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcInNldFwiKVxuICAgICkge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3ROYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwXCIpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5tYXBOYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibWFwbGlzdFwiKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubWFwTGlzdE5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJtYXBzZXRcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lm1hcExpc3ROYW1lKTtcbiAgICB9IGVsc2UgaWYgKGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT09IFwibGlzdG1hcFwiKSB7XG4gICAgICB0eXBlcy5wdXNoKGF0dFR5cGVTdHJ1Y3QubGlzdE1hcE5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRtYXBcIikge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3RNYXBOYW1lKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJsaXN0bGlzdFwiIHx8XG4gICAgICBhdHRUeXBlU3RydWN0Lm5lc3RpbmdNb2RlID09PSBcImxpc3RzZXRcIiB8fFxuICAgICAgYXR0VHlwZVN0cnVjdC5uZXN0aW5nTW9kZSA9PT0gXCJzZXRsaXN0XCIgfHxcbiAgICAgIGF0dFR5cGVTdHJ1Y3QubmVzdGluZ01vZGUgPT0gXCJzZXRzZXRcIlxuICAgICkge1xuICAgICAgdHlwZXMucHVzaChhdHRUeXBlU3RydWN0Lmxpc3RMaXN0TmFtZSk7XG4gICAgfSBlbHNlIGlmICghaXNDb25maWdTdHJ1Y3QpIHtcbiAgICAgIHR5cGVzLnB1c2goYXR0VHlwZVN0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lKTtcbiAgICB9XG4gICAgLy8gb3RoZXIgdHlwZXMgb2YgbmVzdGVkIGNvbGxlY3Rpb25zIGFyZW4ndCBzdXBwb3J0ZWRcblxuICAgIHJldHVybiB0eXBlcztcbiAgfVxufVxuIl19
@@ -11,7 +11,9 @@ export interface AttributeTypeModel {
11
11
  readonly typeModelType: string;
12
12
  readonly hasReferenceClass: boolean;
13
13
  readonly isTokenizable: boolean;
14
+ readonly isStoredClassUnavailable: boolean;
14
15
  }
16
+ export declare function describeTerraformType(model: AttributeTypeModel): string;
15
17
  export declare class SkippedAttributeTypeModel implements AttributeTypeModel {
16
18
  constructor();
17
19
  get typeModelType(): string;
@@ -25,6 +27,7 @@ export declare class SkippedAttributeTypeModel implements AttributeTypeModel {
25
27
  get toHclTerraformFunction(): string;
26
28
  get hasReferenceClass(): boolean;
27
29
  get isTokenizable(): boolean;
30
+ get isStoredClassUnavailable(): boolean;
28
31
  }
29
32
  export declare class SimpleAttributeTypeModel implements AttributeTypeModel {
30
33
  readonly type: string;
@@ -40,6 +43,7 @@ export declare class SimpleAttributeTypeModel implements AttributeTypeModel {
40
43
  get toHclTerraformFunction(): string;
41
44
  get hasReferenceClass(): boolean;
42
45
  get isTokenizable(): boolean;
46
+ get isStoredClassUnavailable(): boolean;
43
47
  }
44
48
  export declare class StructAttributeTypeModel implements AttributeTypeModel {
45
49
  readonly struct: Struct;
@@ -54,9 +58,14 @@ export declare class StructAttributeTypeModel implements AttributeTypeModel {
54
58
  get toHclTerraformFunction(): string;
55
59
  get hasReferenceClass(): boolean;
56
60
  get isTokenizable(): boolean;
61
+ get isStoredClassUnavailable(): boolean;
57
62
  }
58
63
  export interface CollectionAttributeTypeModel extends AttributeTypeModel {
59
64
  elementType: AttributeTypeModel;
65
+ readonly resolvedStoredClass: {
66
+ name: string;
67
+ collapsed: boolean;
68
+ } | undefined;
60
69
  }
61
70
  export declare class ListAttributeTypeModel implements CollectionAttributeTypeModel {
62
71
  readonly elementType: AttributeTypeModel;
@@ -68,12 +77,17 @@ export declare class ListAttributeTypeModel implements CollectionAttributeTypeMo
68
77
  get isComplex(): boolean;
69
78
  getStoredClassInitializer(name: string): string;
70
79
  get storedClassType(): string;
80
+ get resolvedStoredClass(): {
81
+ name: string;
82
+ collapsed: boolean;
83
+ } | undefined;
71
84
  get inputTypeDefinition(): string;
72
85
  getAttributeAccessFunction(name: string): string;
73
86
  get toTerraformFunction(): string;
74
87
  get toHclTerraformFunction(): string;
75
88
  get hasReferenceClass(): boolean;
76
89
  get isTokenizable(): boolean;
90
+ get isStoredClassUnavailable(): boolean;
77
91
  }
78
92
  export declare class SetAttributeTypeModel implements CollectionAttributeTypeModel {
79
93
  readonly elementType: AttributeTypeModel;
@@ -85,12 +99,17 @@ export declare class SetAttributeTypeModel implements CollectionAttributeTypeMod
85
99
  get isComplex(): boolean;
86
100
  getStoredClassInitializer(name: string): string;
87
101
  get storedClassType(): string;
102
+ get resolvedStoredClass(): {
103
+ name: string;
104
+ collapsed: boolean;
105
+ } | undefined;
88
106
  get inputTypeDefinition(): string;
89
107
  getAttributeAccessFunction(name: string): string;
90
108
  get toTerraformFunction(): string;
91
109
  get toHclTerraformFunction(): string;
92
110
  get hasReferenceClass(): boolean;
93
111
  get isTokenizable(): boolean;
112
+ get isStoredClassUnavailable(): boolean;
94
113
  }
95
114
  export declare class MapAttributeTypeModel implements CollectionAttributeTypeModel {
96
115
  readonly elementType: AttributeTypeModel;
@@ -100,11 +119,16 @@ export declare class MapAttributeTypeModel implements CollectionAttributeTypeMod
100
119
  get isComplex(): boolean;
101
120
  getStoredClassInitializer(name: string): string;
102
121
  get storedClassType(): string;
122
+ get resolvedStoredClass(): {
123
+ name: string;
124
+ collapsed: boolean;
125
+ } | undefined;
103
126
  get inputTypeDefinition(): string;
104
127
  getAttributeAccessFunction(name: string): string;
105
128
  get toTerraformFunction(): string;
106
129
  get toHclTerraformFunction(): string;
107
130
  get hasReferenceClass(): boolean;
108
131
  get isTokenizable(): boolean;
132
+ get isStoredClassUnavailable(): boolean;
109
133
  }
110
134
  //# sourceMappingURL=attribute-type-model.d.ts.map
@@ -1,7 +1,32 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MapAttributeTypeModel = exports.SetAttributeTypeModel = exports.ListAttributeTypeModel = exports.StructAttributeTypeModel = exports.SimpleAttributeTypeModel = exports.SkippedAttributeTypeModel = void 0;
3
+ exports.MapAttributeTypeModel = exports.SetAttributeTypeModel = exports.ListAttributeTypeModel = exports.StructAttributeTypeModel = exports.SimpleAttributeTypeModel = exports.SkippedAttributeTypeModel = exports.describeTerraformType = void 0;
4
4
  const util_1 = require("../../../util");
5
+ const supported_stored_classes_1 = require("./supported-stored-classes");
6
+ // Describes the Terraform type of an attribute as its `list(...)`/`set(...)`/`map(...)`
7
+ // composed notation (matching how Terraform itself describes nested collection types),
8
+ // for use in generated JSDoc. Used only for collapsed/fallback getters (see
9
+ // AttributesEmitter) so it never needs to be exhaustive/perfectly stable for every shape.
10
+ function describeTerraformType(model) {
11
+ switch (model.typeModelType) {
12
+ case "list":
13
+ return `list(${describeTerraformType(model.elementType)})`;
14
+ case "set":
15
+ return `set(${describeTerraformType(model.elementType)})`;
16
+ case "map":
17
+ return `map(${describeTerraformType(model.elementType)})`;
18
+ case "struct":
19
+ return "object";
20
+ default:
21
+ // Covers both SimpleAttributeTypeModel (storedClassType is the Terraform primitive
22
+ // name, e.g. "string" | "number" | "boolean" | "any") and SkippedAttributeTypeModel
23
+ // (storedClassType is always "any").
24
+ return model.storedClassType === "boolean"
25
+ ? "bool"
26
+ : model.storedClassType;
27
+ }
28
+ }
29
+ exports.describeTerraformType = describeTerraformType;
5
30
  class SkippedAttributeTypeModel {
6
31
  constructor() { }
7
32
  get typeModelType() {
@@ -38,6 +63,9 @@ class SkippedAttributeTypeModel {
38
63
  get isTokenizable() {
39
64
  return false;
40
65
  }
66
+ get isStoredClassUnavailable() {
67
+ return false;
68
+ }
41
69
  }
42
70
  exports.SkippedAttributeTypeModel = SkippedAttributeTypeModel;
43
71
  class SimpleAttributeTypeModel {
@@ -83,6 +111,9 @@ class SimpleAttributeTypeModel {
83
111
  get isTokenizable() {
84
112
  return true;
85
113
  }
114
+ get isStoredClassUnavailable() {
115
+ return false;
116
+ }
86
117
  }
87
118
  exports.SimpleAttributeTypeModel = SimpleAttributeTypeModel;
88
119
  class StructAttributeTypeModel {
@@ -120,6 +151,9 @@ class StructAttributeTypeModel {
120
151
  get isTokenizable() {
121
152
  return false;
122
153
  }
154
+ get isStoredClassUnavailable() {
155
+ return false;
156
+ }
123
157
  }
124
158
  exports.StructAttributeTypeModel = StructAttributeTypeModel;
125
159
  class ListAttributeTypeModel {
@@ -149,13 +183,16 @@ class ListAttributeTypeModel {
149
183
  return `new ${this.storedClassType}(this, "${name}", false)`;
150
184
  }
151
185
  else {
152
- return `new cdktn.${(0, util_1.uppercaseFirst)(this.storedClassType)}(this, "${name}", false)`;
186
+ return `new cdktn.${this.resolvedStoredClass.name}(this, "${name}", false)`;
153
187
  }
154
188
  }
155
189
  }
156
190
  get storedClassType() {
157
191
  return `${this.elementType.storedClassType}List`;
158
192
  }
193
+ get resolvedStoredClass() {
194
+ return (0, supported_stored_classes_1.resolveStoredClassName)(this.storedClassType, this.elementType.typeModelType);
195
+ }
159
196
  get inputTypeDefinition() {
160
197
  if (this.isSingleItem) {
161
198
  return this.elementType.inputTypeDefinition;
@@ -207,6 +244,33 @@ class ListAttributeTypeModel {
207
244
  return false;
208
245
  }
209
246
  }
247
+ // Complex (struct) elements generate their own class in the provider output, so they
248
+ // are always fine. Otherwise a stored class is only emitted if resolvedStoredClass
249
+ // finds one - see getStoredClassInitializer above. Note: hasReferenceClass (which
250
+ // triggers a stored_class getter) is only ever true here when isSingleItem or isComplex
251
+ // is true, and isSingleItem is only set for struct/block nesting (which is also
252
+ // isComplex), so this check only needs to guard the non-complex, non-single-item case.
253
+ //
254
+ // storedClassType is itself built up recursively (elementType.storedClassType is
255
+ // composed the same way for nested collections), so it already fully encodes the
256
+ // entire nested chain in one string (e.g. map(map(list(string))) composes all the way
257
+ // up to "stringListMapMap"). resolvedStoredClass first checks this type's own composed
258
+ // name (e.g. "StringListMapMap") against the fixed set of hand-written core classes; if
259
+ // that name doesn't exist, it falls back to the nearest typed "Any"-wrapper that still
260
+ // encodes this type's own layer and its element's layer (e.g. "AnyMapMap"), collapsing
261
+ // only the unsupported inner shape while preserving typed navigation for the outer
262
+ // layers; only if neither exists does it fall through to the plain, untyped getter (see
263
+ // AttributeModel.getterType). It must NOT also OR in
264
+ // elementType.isStoredClassUnavailable, since an inner element's un-composed name (e.g.
265
+ // "StringList" for a plain list(string) nested inside a map) is never separately
266
+ // instantiated and is irrelevant on its own; ORing it in would produce false positives
267
+ // that regress supported nestings such as map(list(string)) => cdktn.StringListMap.
268
+ get isStoredClassUnavailable() {
269
+ if (this.isComplex) {
270
+ return false;
271
+ }
272
+ return this.resolvedStoredClass === undefined;
273
+ }
210
274
  }
211
275
  exports.ListAttributeTypeModel = ListAttributeTypeModel;
212
276
  class SetAttributeTypeModel {
@@ -236,13 +300,16 @@ class SetAttributeTypeModel {
236
300
  return `new ${this.storedClassType}(this, "${name}", true)`;
237
301
  }
238
302
  else {
239
- return `new cdktn.${(0, util_1.uppercaseFirst)(this.storedClassType)}(this, "${name}", true)`;
303
+ return `new cdktn.${this.resolvedStoredClass.name}(this, "${name}", true)`;
240
304
  }
241
305
  }
242
306
  }
243
307
  get storedClassType() {
244
308
  return `${this.elementType.storedClassType}List`;
245
309
  }
310
+ get resolvedStoredClass() {
311
+ return (0, supported_stored_classes_1.resolveStoredClassName)(this.storedClassType, this.elementType.typeModelType);
312
+ }
246
313
  get inputTypeDefinition() {
247
314
  if (this.isSingleItem) {
248
315
  return this.elementType.inputTypeDefinition;
@@ -301,6 +368,14 @@ class SetAttributeTypeModel {
301
368
  return false;
302
369
  }
303
370
  }
371
+ // See comment on ListAttributeTypeModel.isStoredClassUnavailable above - same
372
+ // reasoning applies here.
373
+ get isStoredClassUnavailable() {
374
+ if (this.isComplex) {
375
+ return false;
376
+ }
377
+ return this.resolvedStoredClass === undefined;
378
+ }
304
379
  }
305
380
  exports.SetAttributeTypeModel = SetAttributeTypeModel;
306
381
  class MapAttributeTypeModel {
@@ -321,12 +396,15 @@ class MapAttributeTypeModel {
321
396
  return `new ${this.storedClassType}(this, "${name}")`;
322
397
  }
323
398
  else {
324
- return `new cdktn.${(0, util_1.uppercaseFirst)(this.storedClassType)}(this, "${name}")`;
399
+ return `new cdktn.${this.resolvedStoredClass.name}(this, "${name}")`;
325
400
  }
326
401
  }
327
402
  get storedClassType() {
328
403
  return `${this.elementType.storedClassType}Map`;
329
404
  }
405
+ get resolvedStoredClass() {
406
+ return (0, supported_stored_classes_1.resolveStoredClassName)(this.storedClassType, this.elementType.typeModelType);
407
+ }
330
408
  get inputTypeDefinition() {
331
409
  // map of booleans has token support, but booleans don't
332
410
  if (this.elementType.storedClassType === "boolean") {
@@ -371,6 +449,14 @@ class MapAttributeTypeModel {
371
449
  return false;
372
450
  }
373
451
  }
452
+ // See comment on ListAttributeTypeModel.isStoredClassUnavailable above - same
453
+ // reasoning applies here (MapAttributeTypeModel.hasReferenceClass is just isComplex).
454
+ get isStoredClassUnavailable() {
455
+ if (this.isComplex) {
456
+ return false;
457
+ }
458
+ return this.resolvedStoredClass === undefined;
459
+ }
374
460
  }
375
461
  exports.MapAttributeTypeModel = MapAttributeTypeModel;
376
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXR5cGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvYXR0cmlidXRlLXR5cGUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0Esd0NBQThEO0FBZ0I5RCxNQUFhLHlCQUF5QjtJQUNwQyxnQkFBZSxDQUFDO0lBRWhCLElBQUksYUFBYTtRQUNmLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBYTtRQUNyQyxXQUFXO1FBQ1gsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDBCQUEwQixDQUFDLElBQVk7UUFDckMsT0FBTyxtQ0FBbUMsSUFBSSxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8seUJBQXlCLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBL0NELDhEQStDQztBQUVELE1BQWEsd0JBQXdCO0lBQ25DLFlBQTRCLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO0lBQUcsQ0FBQztJQUU1QyxJQUFJLGFBQWE7UUFDZixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFD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SyxRQUFRLEVBQUUsQ0FBQztZQUNuRSxPQUFPLG1DQUFtQyxJQUFJLElBQUksQ0FBQztRQUNyRCxDQUFDO1FBRUQsT0FBTyxXQUFXLElBQUEscUJBQWMsRUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FDckIsY0FBYyxJQUFJLElBQUksQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxvQkFBb0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLHVCQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixHQUFHLENBQUM7SUFDM0UsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pDLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssU0FBUztnQkFDWixPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssS0FBSztnQkFDUixPQUFPLElBQUksQ0FBQztZQUNkO2dCQUNFLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUE5RUQsc0RBOEVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFN0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHsgdXBwZXJjYXNlRmlyc3QsIGRvd25jYXNlRmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIHJlYWRvbmx5IHN0cnVjdD86IFN0cnVjdDsgLy8gY29tcGxleCBvYmplY3QgdHlwZSBjb250YWluZWQgd2l0aGluIHRoZSB0eXBlXG4gIHJlYWRvbmx5IGlzQ29tcGxleDogYm9vbGVhbjsgLy8gYmFzaWNhbGx5IHRoZSBzYW1lIGFzIGhhdmluZyBhIHN0cnVjdFxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZyk6IHN0cmluZzsgLy8gaW5pdGlhbGl6ZXIgZm9yIGtlZXBpbmcgY2xhc3MgbmVlZGVkIHRvIGtlZXAgdHJhY2sgb2YgcmVmZXJlbmNlIGFjY2Vzc1xuICByZWFkb25seSBzdG9yZWRDbGFzc1R5cGU6IHN0cmluZzsgLy8gdXNlZCBtYWlubHkgYnkgY29sbGVjdGlvbiB0eXBlcyB0byBnZW5lcmF0ZSB0aGVpciBzdG9yZWQgY2xhc3MgaW5pdGlhbGl6ZXJcbiAgcmVhZG9ubHkgaW5wdXRUeXBlRGVmaW5pdGlvbjogc3RyaW5nOyAvLyB0aGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIGlucHV0dGluZyB2YWx1ZXNcbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKTogc3RyaW5nOyAvLyB0aGlzIGlzIGZvciBnZXR0aW5nIHJlZmVyZW5jZSBmb3Igc2ltcGxlIHR5cGVzXG4gIHJlYWRvbmx5IHRvVGVycmFmb3JtRnVuY3Rpb246IHN0cmluZzsgLy8gdGhpcyBpcyBmb3IgY29udmVydGluZyBpbnB1dCB2YWx1ZXMgdG8gVGVycmFmb3JtIHN5bnRheFxuICByZWFkb25seSB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uOiBzdHJpbmc7IC8vIHRoaXMgaXMgZm9yIGNvbnZlcnRpbmcgaW5wdXQgdmFsdWVzIHRvIFRlcnJhZm9ybSBzeW50YXggaW4gSENMXG4gIHJlYWRvbmx5IHR5cGVNb2RlbFR5cGU6IHN0cmluZzsgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgaW5zdGFuY2VvZlxuICByZWFkb25seSBoYXNSZWZlcmVuY2VDbGFzczogYm9vbGVhbjsgLy8gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBzdG9yZWRfY2xhc3MgZ2V0dGVyIHNob3VsZCBiZSB1c2VkXG4gIHJlYWRvbmx5IGlzVG9rZW5pemFibGU6IGJvb2xlYW47IC8vIGNhbiB0aGUgdHlwZSBiZSByZXByZXNlbnRlZCBieSBhIHRva2VuIHR5cGVcbn1cblxuZXhwb3J0IGNsYXNzIFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBBdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwic2ltcGxlXCI7XG4gIH1cblxuICBnZXQgc3RydWN0KCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgaXNDb21wbGV4KCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIoX25hbWU6IHN0cmluZykge1xuICAgIC8vIG5vdCB1c2VkXG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiBcImFueVwiO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIFwiYW55XCI7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uYW55VG9UZXJyYWZvcm1gO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi5hbnlUb0hjbFRlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBBdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdHlwZTogc3RyaW5nKSB7fVxuXG4gIGdldCB0eXBlTW9kZWxUeXBlKCkge1xuICAgIHJldHVybiBcInNpbXBsZVwiO1xuICB9XG5cbiAgZ2V0IHN0cnVjdCgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKF9uYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBub3QgdXNlZFxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcImJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlO1xuICAgIH1cbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgdGhpcy5nZXQke3VwcGVyY2FzZUZpcnN0KHRoaXMudHlwZSl9QXR0cmlidXRlKCcke25hbWV9JylgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi4ke3RoaXMudHlwZX1Ub1RlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLiR7dGhpcy50eXBlfVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsIGltcGxlbWVudHMgQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHN0cnVjdDogU3RydWN0KSB7fVxuXG4gIGdldCB0eXBlTW9kZWxUeXBlKCkge1xuICAgIHJldHVybiBcInN0cnVjdFwiO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfSh0aGlzLCBcIiR7bmFtZX1cIilgO1xuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJ1Y3QubmFtZTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0cnVjdC5uYW1lO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgLy8gVGhpcyBzaG91bG4ndCBhY3R1YWxseSBiZSBjYWxsZWRcbiAgICByZXR1cm4gYHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwgZXh0ZW5kcyBBdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBlbGVtZW50VHlwZTogQXR0cmlidXRlVHlwZU1vZGVsO1xufVxuXG5leHBvcnQgY2xhc3MgTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNTaW5nbGVJdGVtOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCbG9jazogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKHRoaXMuc3RydWN0KSB7XG4gICAgICB0aGlzLnN0cnVjdC5pc1NpbmdsZUl0ZW0gPSB0aGlzLmlzU2luZ2xlSXRlbSB8fCBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJsaXN0XCI7XG4gIH1cblxuICBnZXQgc3RydWN0KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnN0cnVjdDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9T3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwiJHtuYW1lfVwiKWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgICByZXR1cm4gYG5ldyAke3RoaXMuc3RvcmVkQ2xhc3NUeXBlfSh0aGlzLCBcIiR7bmFtZX1cIiwgZmFsc2UpYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBgbmV3IGNka3RuLiR7dXBwZXJjYXNlRmlyc3QoXG4gICAgICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICAgICl9KHRoaXMsIFwiJHtuYW1lfVwiLCBmYWxzZSlgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfUxpc3RgO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9uO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJBcnJheTxib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU+IHwgY2RrdG4uSVJlc29sdmFibGVcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9W10gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCIpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259W10gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259W11gO1xuICAgIH1cbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIGB0aGlzLmdldExpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiBgdGhpcy5nZXROdW1iZXJMaXN0QXR0cmlidXRlKCcke25hbWV9JylgO1xuICAgIH1cblxuICAgIHJldHVybiBgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JylgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b1RlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gYGNka3RuLmxpc3RNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259LCAke3RoaXMuaXNCbG9ja30pYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gYGNka3RuLmxpc3RNYXBwZXJIY2woJHt0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb259LCAke3RoaXMuaXNCbG9ja30pYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUl0ZW0gfHwgdGhpcy5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNTaW5nbGVJdGVtOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCbG9jazogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKHRoaXMuc3RydWN0KSB7XG4gICAgICB0aGlzLnN0cnVjdC5pc1NpbmdsZUl0ZW0gPSB0aGlzLmlzU2luZ2xlSXRlbSB8fCBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzZXRcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1PdXRwdXRSZWZlcmVuY2UodGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5zdG9yZWRDbGFzc1R5cGV9KHRoaXMsIFwiJHtuYW1lfVwiLCB0cnVlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3VwcGVyY2FzZUZpcnN0KFxuICAgICAgICAgIHRoaXMuc3RvcmVkQ2xhc3NUeXBlLFxuICAgICAgICApfSh0aGlzLCBcIiR7bmFtZX1cIiwgdHJ1ZSlgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfUxpc3RgO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9uO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJBcnJheTxib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGU+IHwgY2RrdG4uSVJlc29sdmFibGVcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9W10gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCIpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259W10gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259W11gO1xuICAgIH1cbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIGBjZGt0bi5Gbi50b2xpc3QodGhpcy5nZXRMaXN0QXR0cmlidXRlKCcke25hbWV9JykpYDtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIGBjZGt0bi5Ub2tlbi5hc051bWJlckxpc3QoY2RrdG4uRm4udG9saXN0KHRoaXMuZ2V0TnVtYmVyTGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpKSlgO1xuICAgIH1cblxuICAgIC8vIFRva2VuLmFzQW55IGlzIHJlcXVpcmVkIGJlY2F1c2UgdG9saXN0IHJldHVybnMgYW4gQXJyYXkgZW5jb2RlZCB0b2tlbiB3aGljaCB0aGUgbGlzdE1hcHBlclxuICAgIC8vIHdvdWxkIHRyeSB0byBtYXAgb3ZlciB3aGVuIHRoaXMgaXMgcGFzc2VkIHRvIGFub3RoZXIgcmVzb3VyY2UuIFdpdGggVG9rZW4uYXNBbnkoKSBpdCBpcyBsZWZ0XG4gICAgLy8gYXMgaXMgYnkgdGhlIGxpc3RNYXBwZXIgYW5kIGlzIGxhdGVyIHByb3Blcmx5IHJlc29sdmVkIHRvIGEgcmVmZXJlbmNlXG4gICAgLy8gKHRoaXMgb25seSB3b3JrcyBpbiBUeXBlU2NyaXB0IGN1cnJlbnRseSwgc2FtZSBhcyBmb3IgcmVmZXJlbmNpbmcgbGlzdHNcbiAgICAvLyBbc2VlIFwiaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSguLi4pXCIgZnVydGhlciBiZWxvd10pXG4gICAgcmV0dXJuIGBjZGt0bi5Ub2tlbi5hc0FueShjZGt0bi5Gbi50b2xpc3QodGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JykpKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlcigke3RoaXMuZWxlbWVudFR5cGUudG9UZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGBjZGt0bi5saXN0TWFwcGVySGNsKCR7dGhpcy5lbGVtZW50VHlwZS50b0hjbFRlcnJhZm9ybUZ1bmN0aW9ufSwgJHt0aGlzLmlzQmxvY2t9KWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVJdGVtIHx8IHRoaXMuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNYXBBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGVsZW1lbnRUeXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWwpIHt9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwibWFwXCI7XG4gIH1cblxuICBnZXQgc3RydWN0KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnN0cnVjdDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5zdG9yZWRDbGFzc1R5cGV9KHRoaXMsIFwiJHtuYW1lfVwiKWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgbmV3IGNka3RuLiR7dXBwZXJjYXNlRmlyc3QoXG4gICAgICAgIHRoaXMuc3RvcmVkQ2xhc3NUeXBlLFxuICAgICAgKX0odGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1NYXBgO1xuICB9XG5cbiAgZ2V0IGlucHV0VHlwZURlZmluaXRpb24oKSB7XG4gICAgLy8gbWFwIG9mIGJvb2xlYW5zIGhhcyB0b2tlbiBzdXBwb3J0LCBidXQgYm9vbGVhbnMgZG9uJ3RcbiAgICBpZiAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogKCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9IHwgY2RrdG4uSVJlc29sdmFibGUpIH1gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgIHJldHVybiBgeyBba2V5OiBzdHJpbmddOiAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfSB9IHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlICE9PSBcInNpbXBsZVwiKSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb259IH0gfCBjZGt0bi5JUmVzb2x2YWJsZWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgeyBba2V5OiBzdHJpbmddOiAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfSB9YDtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuaXNDb21wbGV4ICYmIHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGB0aGlzLmdldCR7dXBwZXJjYXNlRmlyc3QoXG4gICAgICB0aGlzLnN0b3JlZENsYXNzVHlwZSxcbiAgICApfUF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uaGFzaE1hcHBlcigke3RoaXMuZWxlbWVudFR5cGUudG9UZXJyYWZvcm1GdW5jdGlvbn0pYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uaGFzaE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0pYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBcImFueVwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cmlidXRlLXR5cGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ2V0L2dlbmVyYXRvci9tb2RlbHMvYXR0cmlidXRlLXR5cGUtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0Esd0NBQThEO0FBQzlELHlFQUFvRTtBQWlCcEUsd0ZBQXdGO0FBQ3hGLHVGQUF1RjtBQUN2Riw0RUFBNEU7QUFDNUUsMEZBQTBGO0FBQzFGLFNBQWdCLHFCQUFxQixDQUFDLEtBQXlCO0lBQzdELFFBQVEsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzVCLEtBQUssTUFBTTtZQUNULE9BQU8sUUFBUSxxQkFBcUIsQ0FDakMsS0FBc0MsQ0FBQyxXQUFXLENBQ3BELEdBQUcsQ0FBQztRQUNQLEtBQUssS0FBSztZQUNSLE9BQU8sT0FBTyxxQkFBcUIsQ0FDaEMsS0FBc0MsQ0FBQyxXQUFXLENBQ3BELEdBQUcsQ0FBQztRQUNQLEtBQUssS0FBSztZQUNSLE9BQU8sT0FBTyxxQkFBcUIsQ0FDaEMsS0FBc0MsQ0FBQyxXQUFXLENBQ3BELEdBQUcsQ0FBQztRQUNQLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCO1lBQ0UsbUZBQW1GO1lBQ25GLG9GQUFvRjtZQUNwRixxQ0FBcUM7WUFDckMsT0FBTyxLQUFLLENBQUMsZUFBZSxLQUFLLFNBQVM7Z0JBQ3hDLENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7QUFDSCxDQUFDO0FBeEJELHNEQXdCQztBQUVELE1BQWEseUJBQXlCO0lBQ3BDLGdCQUFlLENBQUM7SUFFaEIsSUFBSSxhQUFhO1FBQ2YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxLQUFhO1FBQ3JDLFdBQVc7UUFDWCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsMEJBQTBCLENBQUMsSUFBWTtRQUNyQyxPQUFPLG1DQUFtQyxJQUFJLElBQUksQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxzQkFBc0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyx5QkFBeUIsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSx3QkFBd0I7UUFDMUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFuREQsOERBbURDO0FBRUQsTUFBYSx3QkFBd0I7SUFDbkMsWUFBNEIsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7SUFBRyxDQUFDO0lBRTVDLElBQUksYUFBYTtRQUNmLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBYTtRQUNyQyxXQUFXO1FBQ1gsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sNkJBQTZCLENBQUM7UUFDdkMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxJQUFZO1FBQ3JDLE9BQU8sV0FBVyxJQUFBLHFCQUFjLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDO0lBQ3BFLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLFNBQVMsSUFBSSxDQUFDLElBQUksYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLFNBQVMsSUFBSSxDQUFDLElBQUksZ0JBQWdCLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksd0JBQXdCO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBdkRELDREQXVEQztBQUVELE1BQWEsd0JBQXdCO0lBQ25DLFlBQTRCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUU5QyxJQUFJLGFBQWE7UUFDZixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBWTtRQUNwQyxPQUFPLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsV0FBVyxJQUFJLElBQUksQ0FBQztJQUNuRSxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELDBCQUEwQixDQUFDLElBQVk7UUFDckMsbUNBQW1DO1FBQ25DLE9BQU8sbUNBQW1DLElBQUksSUFBSSxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLEdBQUcsSUFBQSxvQkFBYSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxHQUFHLElBQUEsb0JBQWEsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsSUFBSSx3QkFBd0I7UUFDMUIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUEvQ0QsNERBK0NDO0FBYUQsTUFBYSxzQkFBc0I7SUFDakMsWUFDa0IsV0FBK0IsRUFDL0IsWUFBcUIsRUFDcEIsT0FBZ0I7UUFGakIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUFTO1FBQ3BCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFFakMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQseUJBQXlCLENBQUMsSUFBWTtRQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixPQUFPLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLDBCQUEwQixJQUFJLElBQUksQ0FBQztRQUNuRixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixPQUFPLE9BQU8sSUFBSSxDQUFDLGVBQWUsV0FBVyxJQUFJLFdBQVcsQ0FBQztZQUMvRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxhQUFhLElBQUksQ0FBQyxtQkFBb0IsQ0FBQyxJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUM7WUFDL0UsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsTUFBTSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUEsaURBQXNCLEVBQzNCLElBQUksQ0FBQyxlQUFlLEVBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztRQUM5QyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxRCxPQUFPLHdEQUF3RCxDQUFDO1FBQ2xFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMxQixPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLHdCQUF3QixDQUFDO1FBQ3JFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQix3QkFBd0IsQ0FBQztRQUN6RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixJQUFJLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxJQUFZO1FBQ3JDLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTywwQkFBMEIsSUFBSSxJQUFJLENBQUM7WUFDNUMsS0FBSyxRQUFRO2dCQUNYLE9BQU8sZ0NBQWdDLElBQUksSUFBSSxDQUFDO1FBQ3BELENBQUM7UUFFRCxPQUFPLG1DQUFtQyxJQUFJLElBQUksQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDO1FBQzlDLENBQUM7UUFDRCxPQUFPLG9CQUFvQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixLQUFLLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQztJQUN0RixDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDO1FBQ2pELENBQUM7UUFFRCxPQUFPLHVCQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixLQUFLLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQztJQUM1RixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZDtnQkFDRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELHFGQUFxRjtJQUNyRixtRkFBbUY7SUFDbkYsa0ZBQWtGO0lBQ2xGLHdGQUF3RjtJQUN4RixnRkFBZ0Y7SUFDaEYsdUZBQXVGO0lBQ3ZGLEVBQUU7SUFDRixpRkFBaUY7SUFDakYsaUZBQWlGO0lBQ2pGLHNGQUFzRjtJQUN0Rix1RkFBdUY7SUFDdkYsd0ZBQXdGO0lBQ3hGLHVGQUF1RjtJQUN2Rix1RkFBdUY7SUFDdkYsbUZBQW1GO0lBQ25GLHdGQUF3RjtJQUN4RixxREFBcUQ7SUFDckQsd0ZBQXdGO0lBQ3hGLGlGQUFpRjtJQUNqRix1RkFBdUY7SUFDdkYsb0ZBQW9GO0lBQ3BGLElBQUksd0JBQXdCO1FBQzFCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUFoSUQsd0RBZ0lDO0FBRUQsTUFBYSxxQkFBcUI7SUFDaEMsWUFDa0IsV0FBK0IsRUFDL0IsWUFBcUIsRUFDcEIsT0FBZ0I7UUFGakIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGlCQUFZLEdBQVosWUFBWSxDQUFTO1FBQ3BCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFFakMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7UUFDeEQsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO0lBQ3BDLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxJQUFZO1FBQ3BDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsMEJBQTBCLElBQUksSUFBSSxDQUFDO1FBQ25GLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sT0FBTyxJQUFJLENBQUMsZUFBZSxXQUFXLElBQUksVUFBVSxDQUFDO1lBQzlELENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLGFBQWEsSUFBSSxDQUFDLG1CQUFvQixDQUFDLElBQUksV0FBVyxJQUFJLFVBQVUsQ0FBQztZQUM5RSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxNQUFNLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBQSxpREFBc0IsRUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQy9CLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDO1FBQzlDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzFELE9BQU8sd0RBQXdELENBQUM7UUFDbEUsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsd0JBQXdCLENBQUM7UUFDckUsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDdkQsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLHdCQUF3QixDQUFDO1FBQ3pFLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLElBQUksQ0FBQztRQUNyRCxDQUFDO0lBQ0gsQ0FBQztJQUVELDBCQUEwQixDQUFDLElBQVk7UUFDckMsUUFBUSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pDLEtBQUssUUFBUTtnQkFDWCxPQUFPLDBDQUEwQyxJQUFJLEtBQUssQ0FBQztZQUM3RCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyx5RUFBeUUsSUFBSSxNQUFNLENBQUM7UUFDL0YsQ0FBQztRQUVELDZGQUE2RjtRQUM3RiwrRkFBK0Y7UUFDL0Ysd0VBQXdFO1FBQ3hFLDBFQUEwRTtRQUMxRSx3REFBd0Q7UUFDeEQsT0FBTyxxRUFBcUUsSUFBSSxNQUFNLENBQUM7SUFDekYsQ0FBQztJQUVELElBQUksbUJBQW1CO1FBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztRQUM5QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sb0JBQW9CLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEtBQUssSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDO1FBQ3RGLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDO1FBQ2pELENBQUM7UUFDRCxPQUFPLHVCQUF1QixJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixLQUFLLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQztJQUM1RixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUM7WUFDZDtnQkFDRSxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSwwQkFBMEI7SUFDMUIsSUFBSSx3QkFBd0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLEtBQUssU0FBUyxDQUFDO0lBQ2hELENBQUM7Q0FDRjtBQWxIRCxzREFrSEM7QUFFRCxNQUFhLHFCQUFxQjtJQUNoQyxZQUE0QixXQUErQjtRQUEvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7SUFBRyxDQUFDO0lBRS9ELElBQUksYUFBYTtRQUNmLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDcEMsQ0FBQztJQUVELHlCQUF5QixDQUFDLElBQVk7UUFDcEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsT0FBTyxPQUFPLElBQUksQ0FBQyxlQUFlLFdBQVcsSUFBSSxJQUFJLENBQUM7UUFDeEQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLGFBQWEsSUFBSSxDQUFDLG1CQUFvQixDQUFDLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEtBQUssQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDckIsT0FBTyxJQUFBLGlEQUFzQixFQUMzQixJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQix3REFBd0Q7UUFDeEQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuRCxPQUFPLHFCQUFxQixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUseUJBQXlCLENBQUM7UUFDeEYsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sb0JBQW9CLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSx3QkFBd0IsQ0FBQztRQUN0RixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2RCxPQUFPLG9CQUFvQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQix3QkFBd0IsQ0FBQztRQUMxRixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sb0JBQW9CLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxJQUFJLENBQUM7UUFDbEUsQ0FBQztJQUNILENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxJQUFZO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ25FLE9BQU8sbUNBQW1DLElBQUksSUFBSSxDQUFDO1FBQ3JELENBQUM7UUFFRCxPQUFPLFdBQVcsSUFBQSxxQkFBYyxFQUM5QixJQUFJLENBQUMsZUFBZSxDQUNyQixjQUFjLElBQUksSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLG9CQUFvQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixHQUFHLENBQUM7SUFDckUsQ0FBQztJQUVELElBQUksc0JBQXNCO1FBQ3hCLE9BQU8sdUJBQXVCLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEdBQUcsQ0FBQztJQUMzRSxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekMsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxLQUFLO2dCQUNSLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCw4RUFBOEU7SUFDOUUsc0ZBQXNGO0lBQ3RGLElBQUksd0JBQXdCO1FBQzFCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixLQUFLLFNBQVMsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUE1RkQsc0RBNEZDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IFN0cnVjdCB9IGZyb20gXCIuL3N0cnVjdFwiO1xuaW1wb3J0IHsgdXBwZXJjYXNlRmlyc3QsIGRvd25jYXNlRmlyc3QgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbFwiO1xuaW1wb3J0IHsgcmVzb2x2ZVN0b3JlZENsYXNzTmFtZSB9IGZyb20gXCIuL3N1cHBvcnRlZC1zdG9yZWQtY2xhc3Nlc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIHJlYWRvbmx5IHN0cnVjdD86IFN0cnVjdDsgLy8gY29tcGxleCBvYmplY3QgdHlwZSBjb250YWluZWQgd2l0aGluIHRoZSB0eXBlXG4gIHJlYWRvbmx5IGlzQ29tcGxleDogYm9vbGVhbjsgLy8gYmFzaWNhbGx5IHRoZSBzYW1lIGFzIGhhdmluZyBhIHN0cnVjdFxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZyk6IHN0cmluZzsgLy8gaW5pdGlhbGl6ZXIgZm9yIGtlZXBpbmcgY2xhc3MgbmVlZGVkIHRvIGtlZXAgdHJhY2sgb2YgcmVmZXJlbmNlIGFjY2Vzc1xuICByZWFkb25seSBzdG9yZWRDbGFzc1R5cGU6IHN0cmluZzsgLy8gdXNlZCBtYWlubHkgYnkgY29sbGVjdGlvbiB0eXBlcyB0byBnZW5lcmF0ZSB0aGVpciBzdG9yZWQgY2xhc3MgaW5pdGlhbGl6ZXJcbiAgcmVhZG9ubHkgaW5wdXRUeXBlRGVmaW5pdGlvbjogc3RyaW5nOyAvLyB0aGlzIGlzIHRoZSB0eXBlIHVzZWQgZm9yIGlucHV0dGluZyB2YWx1ZXNcbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKTogc3RyaW5nOyAvLyB0aGlzIGlzIGZvciBnZXR0aW5nIHJlZmVyZW5jZSBmb3Igc2ltcGxlIHR5cGVzXG4gIHJlYWRvbmx5IHRvVGVycmFmb3JtRnVuY3Rpb246IHN0cmluZzsgLy8gdGhpcyBpcyBmb3IgY29udmVydGluZyBpbnB1dCB2YWx1ZXMgdG8gVGVycmFmb3JtIHN5bnRheFxuICByZWFkb25seSB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uOiBzdHJpbmc7IC8vIHRoaXMgaXMgZm9yIGNvbnZlcnRpbmcgaW5wdXQgdmFsdWVzIHRvIFRlcnJhZm9ybSBzeW50YXggaW4gSENMXG4gIHJlYWRvbmx5IHR5cGVNb2RlbFR5cGU6IHN0cmluZzsgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byB1c2UgaW5zdGFuY2VvZlxuICByZWFkb25seSBoYXNSZWZlcmVuY2VDbGFzczogYm9vbGVhbjsgLy8gdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBzdG9yZWRfY2xhc3MgZ2V0dGVyIHNob3VsZCBiZSB1c2VkXG4gIHJlYWRvbmx5IGlzVG9rZW5pemFibGU6IGJvb2xlYW47IC8vIGNhbiB0aGUgdHlwZSBiZSByZXByZXNlbnRlZCBieSBhIHRva2VuIHR5cGVcbiAgcmVhZG9ubHkgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlOiBib29sZWFuOyAvLyB0cnVlIHdoZW4gbm8gXCJjZGt0bi48TmFtZT5cIiBzdG9yZWQgY2xhc3MgKG5vdCBldmVuIGEgY29sbGFwc2VkIG5lYXJlc3QtQW55IHdyYXBwZXIpIGlzIGF2YWlsYWJsZSBmb3IgdGhpcyB0eXBlXG59XG5cbi8vIERlc2NyaWJlcyB0aGUgVGVycmFmb3JtIHR5cGUgb2YgYW4gYXR0cmlidXRlIGFzIGl0cyBgbGlzdCguLi4pYC9gc2V0KC4uLilgL2BtYXAoLi4uKWBcbi8vIGNvbXBvc2VkIG5vdGF0aW9uIChtYXRjaGluZyBob3cgVGVycmFmb3JtIGl0c2VsZiBkZXNjcmliZXMgbmVzdGVkIGNvbGxlY3Rpb24gdHlwZXMpLFxuLy8gZm9yIHVzZSBpbiBnZW5lcmF0ZWQgSlNEb2MuIFVzZWQgb25seSBmb3IgY29sbGFwc2VkL2ZhbGxiYWNrIGdldHRlcnMgKHNlZVxuLy8gQXR0cmlidXRlc0VtaXR0ZXIpIHNvIGl0IG5ldmVyIG5lZWRzIHRvIGJlIGV4aGF1c3RpdmUvcGVyZmVjdGx5IHN0YWJsZSBmb3IgZXZlcnkgc2hhcGUuXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVUZXJyYWZvcm1UeXBlKG1vZGVsOiBBdHRyaWJ1dGVUeXBlTW9kZWwpOiBzdHJpbmcge1xuICBzd2l0Y2ggKG1vZGVsLnR5cGVNb2RlbFR5cGUpIHtcbiAgICBjYXNlIFwibGlzdFwiOlxuICAgICAgcmV0dXJuIGBsaXN0KCR7ZGVzY3JpYmVUZXJyYWZvcm1UeXBlKFxuICAgICAgICAobW9kZWwgYXMgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCkuZWxlbWVudFR5cGUsXG4gICAgICApfSlgO1xuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIHJldHVybiBgc2V0KCR7ZGVzY3JpYmVUZXJyYWZvcm1UeXBlKFxuICAgICAgICAobW9kZWwgYXMgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCkuZWxlbWVudFR5cGUsXG4gICAgICApfSlgO1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgIHJldHVybiBgbWFwKCR7ZGVzY3JpYmVUZXJyYWZvcm1UeXBlKFxuICAgICAgICAobW9kZWwgYXMgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCkuZWxlbWVudFR5cGUsXG4gICAgICApfSlgO1xuICAgIGNhc2UgXCJzdHJ1Y3RcIjpcbiAgICAgIHJldHVybiBcIm9iamVjdFwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBDb3ZlcnMgYm90aCBTaW1wbGVBdHRyaWJ1dGVUeXBlTW9kZWwgKHN0b3JlZENsYXNzVHlwZSBpcyB0aGUgVGVycmFmb3JtIHByaW1pdGl2ZVxuICAgICAgLy8gbmFtZSwgZS5nLiBcInN0cmluZ1wiIHwgXCJudW1iZXJcIiB8IFwiYm9vbGVhblwiIHwgXCJhbnlcIikgYW5kIFNraXBwZWRBdHRyaWJ1dGVUeXBlTW9kZWxcbiAgICAgIC8vIChzdG9yZWRDbGFzc1R5cGUgaXMgYWx3YXlzIFwiYW55XCIpLlxuICAgICAgcmV0dXJuIG1vZGVsLnN0b3JlZENsYXNzVHlwZSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgPyBcImJvb2xcIlxuICAgICAgICA6IG1vZGVsLnN0b3JlZENsYXNzVHlwZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2tpcHBlZEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzaW1wbGVcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihfbmFtZTogc3RyaW5nKSB7XG4gICAgLy8gbm90IHVzZWRcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIFwiYW55XCI7XG4gIH1cblxuICBnZXQgaW5wdXRUeXBlRGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gXCJhbnlcIjtcbiAgfVxuXG4gIGdldEF0dHJpYnV0ZUFjY2Vzc0Z1bmN0aW9uKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JylgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi5hbnlUb1RlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmFueVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNUb2tlbml6YWJsZSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2ltcGxlQXR0cmlidXRlVHlwZU1vZGVsIGltcGxlbWVudHMgQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHR5cGU6IHN0cmluZykge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzaW1wbGVcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBpc0NvbXBsZXgoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0U3RvcmVkQ2xhc3NJbml0aWFsaXplcihfbmFtZTogc3RyaW5nKSB7XG4gICAgLy8gbm90IHVzZWRcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGdldCBzdG9yZWRDbGFzc1R5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIGlmICh0aGlzLnR5cGUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICByZXR1cm4gXCJib29sZWFuIHwgY2RrdG4uSVJlc29sdmFibGVcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYHRoaXMuZ2V0JHt1cHBlcmNhc2VGaXJzdCh0aGlzLnR5cGUpfUF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgY2RrdG4uJHt0aGlzLnR5cGV9VG9UZXJyYWZvcm1gO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGBjZGt0bi4ke3RoaXMudHlwZX1Ub0hjbFRlcnJhZm9ybWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RydWN0QXR0cmlidXRlVHlwZU1vZGVsIGltcGxlbWVudHMgQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHN0cnVjdDogU3RydWN0KSB7fVxuXG4gIGdldCB0eXBlTW9kZWxUeXBlKCkge1xuICAgIHJldHVybiBcInN0cnVjdFwiO1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0cnVjdC5vdXRwdXRSZWZlcmVuY2VOYW1lfSh0aGlzLCBcIiR7bmFtZX1cIilgO1xuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJ1Y3QubmFtZTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0cnVjdC5uYW1lO1xuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgLy8gVGhpcyBzaG91bG4ndCBhY3R1YWxseSBiZSBjYWxsZWRcbiAgICByZXR1cm4gYHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgfVxuXG4gIGdldCB0b1RlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCB0b0hjbFRlcnJhZm9ybUZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBgJHtkb3duY2FzZUZpcnN0KHRoaXMuc3RydWN0Lm5hbWUpfVRvSGNsVGVycmFmb3JtYDtcbiAgfVxuXG4gIGdldCBoYXNSZWZlcmVuY2VDbGFzcygpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldCBpc1N0b3JlZENsYXNzVW5hdmFpbGFibGUoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbkF0dHJpYnV0ZVR5cGVNb2RlbCBleHRlbmRzIEF0dHJpYnV0ZVR5cGVNb2RlbCB7XG4gIGVsZW1lbnRUeXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWw7XG4gIC8vIFJlc29sdmVzIHRoZSBcImNka3RuLjxuYW1lPlwiIHN0b3JlZCBjbGFzcyB0byBpbnN0YW50aWF0ZSBmb3IgdGhpcyAobm9uLWNvbXBsZXgpXG4gIC8vIGNvbGxlY3Rpb24gdHlwZSwgYW5kIHdoZXRoZXIgdGhhdCByZXNvbHV0aW9uIGNvbGxhcHNlZCBhIGRlZXBlciwgdW5zdXBwb3J0ZWQgbmVzdGluZ1xuICAvLyBpbnRvIHRoZSBuZWFyZXN0IHR5cGVkIFwiQW55XCItd3JhcHBlci4gdW5kZWZpbmVkIG9ubHkgZGVmZW5zaXZlbHkgLSBzZWVcbiAgLy8gcmVzb2x2ZVN0b3JlZENsYXNzTmFtZSBpbiBzdXBwb3J0ZWQtc3RvcmVkLWNsYXNzZXMudHMuXG4gIHJlYWRvbmx5IHJlc29sdmVkU3RvcmVkQ2xhc3M6XG4gICAgfCB7IG5hbWU6IHN0cmluZzsgY29sbGFwc2VkOiBib29sZWFuIH1cbiAgICB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNsYXNzIExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwgaW1wbGVtZW50cyBDb2xsZWN0aW9uQXR0cmlidXRlVHlwZU1vZGVsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnRUeXBlOiBBdHRyaWJ1dGVUeXBlTW9kZWwsXG4gICAgcHVibGljIHJlYWRvbmx5IGlzU2luZ2xlSXRlbTogYm9vbGVhbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzQmxvY2s6IGJvb2xlYW4sXG4gICkge1xuICAgIGlmICh0aGlzLnN0cnVjdCkge1xuICAgICAgdGhpcy5zdHJ1Y3QuaXNTaW5nbGVJdGVtID0gdGhpcy5pc1NpbmdsZUl0ZW0gfHwgZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHR5cGVNb2RlbFR5cGUoKSB7XG4gICAgcmV0dXJuIFwibGlzdFwiO1xuICB9XG5cbiAgZ2V0IHN0cnVjdCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5zdHJ1Y3Q7XG4gIH1cblxuICBnZXQgaXNDb21wbGV4KCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gYG5ldyAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfU91dHB1dFJlZmVyZW5jZSh0aGlzLCBcIiR7bmFtZX1cIilgO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0b3JlZENsYXNzVHlwZX0odGhpcywgXCIke25hbWV9XCIsIGZhbHNlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3RoaXMucmVzb2x2ZWRTdG9yZWRDbGFzcyEubmFtZX0odGhpcywgXCIke25hbWV9XCIsIGZhbHNlKWA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9TGlzdGA7XG4gIH1cblxuICBnZXQgcmVzb2x2ZWRTdG9yZWRDbGFzcygpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVN0b3JlZENsYXNzTmFtZShcbiAgICAgIHRoaXMuc3RvcmVkQ2xhc3NUeXBlLFxuICAgICAgdGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlLFxuICAgICk7XG4gIH1cblxuICBnZXQgaW5wdXRUeXBlRGVmaW5pdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLmlucHV0VHlwZURlZmluaXRpb247XG4gICAgfSBlbHNlIGlmICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHJldHVybiBcIkFycmF5PGJvb2xlYW4gfCBjZGt0bi5JUmVzb2x2YWJsZT4gfCBjZGt0bi5JUmVzb2x2YWJsZVwiO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NvbXBsZXgpIHtcbiAgICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1bXSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn1bXSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbn1bXWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gYHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpYDtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIGB0aGlzLmdldE51bWJlckxpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGB0aGlzLmludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlcigke3RoaXMuZWxlbWVudFR5cGUudG9UZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IHRvSGNsVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b0hjbFRlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IGhhc1JlZmVyZW5jZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlSXRlbSB8fCB0aGlzLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbXBsZXggKHN0cnVjdCkgZWxlbWVudHMgZ2VuZXJhdGUgdGhlaXIgb3duIGNsYXNzIGluIHRoZSBwcm92aWRlciBvdXRwdXQsIHNvIHRoZXlcbiAgLy8gYXJlIGFsd2F5cyBmaW5lLiBPdGhlcndpc2UgYSBzdG9yZWQgY2xhc3MgaXMgb25seSBlbWl0dGVkIGlmIHJlc29sdmVkU3RvcmVkQ2xhc3NcbiAgLy8gZmluZHMgb25lIC0gc2VlIGdldFN0b3JlZENsYXNzSW5pdGlhbGl6ZXIgYWJvdmUuIE5vdGU6IGhhc1JlZmVyZW5jZUNsYXNzICh3aGljaFxuICAvLyB0cmlnZ2VycyBhIHN0b3JlZF9jbGFzcyBnZXR0ZXIpIGlzIG9ubHkgZXZlciB0cnVlIGhlcmUgd2hlbiBpc1NpbmdsZUl0ZW0gb3IgaXNDb21wbGV4XG4gIC8vIGlzIHRydWUsIGFuZCBpc1NpbmdsZUl0ZW0gaXMgb25seSBzZXQgZm9yIHN0cnVjdC9ibG9jayBuZXN0aW5nICh3aGljaCBpcyBhbHNvXG4gIC8vIGlzQ29tcGxleCksIHNvIHRoaXMgY2hlY2sgb25seSBuZWVkcyB0byBndWFyZCB0aGUgbm9uLWNvbXBsZXgsIG5vbi1zaW5nbGUtaXRlbSBjYXNlLlxuICAvL1xuICAvLyBzdG9yZWRDbGFzc1R5cGUgaXMgaXRzZWxmIGJ1aWx0IHVwIHJlY3Vyc2l2ZWx5IChlbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUgaXNcbiAgLy8gY29tcG9zZWQgdGhlIHNhbWUgd2F5IGZvciBuZXN0ZWQgY29sbGVjdGlvbnMpLCBzbyBpdCBhbHJlYWR5IGZ1bGx5IGVuY29kZXMgdGhlXG4gIC8vIGVudGlyZSBuZXN0ZWQgY2hhaW4gaW4gb25lIHN0cmluZyAoZS5nLiBtYXAobWFwKGxpc3Qoc3RyaW5nKSkpIGNvbXBvc2VzIGFsbCB0aGUgd2F5XG4gIC8vIHVwIHRvIFwic3RyaW5nTGlzdE1hcE1hcFwiKS4gcmVzb2x2ZWRTdG9yZWRDbGFzcyBmaXJzdCBjaGVja3MgdGhpcyB0eXBlJ3Mgb3duIGNvbXBvc2VkXG4gIC8vIG5hbWUgKGUuZy4gXCJTdHJpbmdMaXN0TWFwTWFwXCIpIGFnYWluc3QgdGhlIGZpeGVkIHNldCBvZiBoYW5kLXdyaXR0ZW4gY29yZSBjbGFzc2VzOyBpZlxuICAvLyB0aGF0IG5hbWUgZG9lc24ndCBleGlzdCwgaXQgZmFsbHMgYmFjayB0byB0aGUgbmVhcmVzdCB0eXBlZCBcIkFueVwiLXdyYXBwZXIgdGhhdCBzdGlsbFxuICAvLyBlbmNvZGVzIHRoaXMgdHlwZSdzIG93biBsYXllciBhbmQgaXRzIGVsZW1lbnQncyBsYXllciAoZS5nLiBcIkFueU1hcE1hcFwiKSwgY29sbGFwc2luZ1xuICAvLyBvbmx5IHRoZSB1bnN1cHBvcnRlZCBpbm5lciBzaGFwZSB3aGlsZSBwcmVzZXJ2aW5nIHR5cGVkIG5hdmlnYXRpb24gZm9yIHRoZSBvdXRlclxuICAvLyBsYXllcnM7IG9ubHkgaWYgbmVpdGhlciBleGlzdHMgZG9lcyBpdCBmYWxsIHRocm91Z2ggdG8gdGhlIHBsYWluLCB1bnR5cGVkIGdldHRlciAoc2VlXG4gIC8vIEF0dHJpYnV0ZU1vZGVsLmdldHRlclR5cGUpLiBJdCBtdXN0IE5PVCBhbHNvIE9SIGluXG4gIC8vIGVsZW1lbnRUeXBlLmlzU3RvcmVkQ2xhc3NVbmF2YWlsYWJsZSwgc2luY2UgYW4gaW5uZXIgZWxlbWVudCdzIHVuLWNvbXBvc2VkIG5hbWUgKGUuZy5cbiAgLy8gXCJTdHJpbmdMaXN0XCIgZm9yIGEgcGxhaW4gbGlzdChzdHJpbmcpIG5lc3RlZCBpbnNpZGUgYSBtYXApIGlzIG5ldmVyIHNlcGFyYXRlbHlcbiAgLy8gaW5zdGFudGlhdGVkIGFuZCBpcyBpcnJlbGV2YW50IG9uIGl0cyBvd247IE9SaW5nIGl0IGluIHdvdWxkIHByb2R1Y2UgZmFsc2UgcG9zaXRpdmVzXG4gIC8vIHRoYXQgcmVncmVzcyBzdXBwb3J0ZWQgbmVzdGluZ3Mgc3VjaCBhcyBtYXAobGlzdChzdHJpbmcpKSA9PiBjZGt0bi5TdHJpbmdMaXN0TWFwLlxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFN0b3JlZENsYXNzID09PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCxcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNTaW5nbGVJdGVtOiBib29sZWFuLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNCbG9jazogYm9vbGVhbixcbiAgKSB7XG4gICAgaWYgKHRoaXMuc3RydWN0KSB7XG4gICAgICB0aGlzLnN0cnVjdC5pc1NpbmdsZUl0ZW0gPSB0aGlzLmlzU2luZ2xlSXRlbSB8fCBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJzZXRcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1PdXRwdXRSZWZlcmVuY2UodGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICAgIHJldHVybiBgbmV3ICR7dGhpcy5zdG9yZWRDbGFzc1R5cGV9KHRoaXMsIFwiJHtuYW1lfVwiLCB0cnVlKWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYG5ldyBjZGt0bi4ke3RoaXMucmVzb2x2ZWRTdG9yZWRDbGFzcyEubmFtZX0odGhpcywgXCIke25hbWV9XCIsIHRydWUpYDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc3RvcmVkQ2xhc3NUeXBlKCkge1xuICAgIHJldHVybiBgJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX1MaXN0YDtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFN0b3JlZENsYXNzKCkge1xuICAgIHJldHVybiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlSXRlbSkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuaW5wdXRUeXBlRGVmaW5pdGlvbjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIFwiQXJyYXk8Ym9vbGVhbiB8IGNka3RuLklSZXNvbHZhYmxlPiB8IGNka3RuLklSZXNvbHZhYmxlXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfVtdIHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50VHlwZS50eXBlTW9kZWxUeXBlICE9PSBcInNpbXBsZVwiKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufVtdIHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufVtdYDtcbiAgICB9XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVBY2Nlc3NGdW5jdGlvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHJldHVybiBgY2RrdG4uRm4udG9saXN0KHRoaXMuZ2V0TGlzdEF0dHJpYnV0ZSgnJHtuYW1lfScpKWA7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiBgY2RrdG4uVG9rZW4uYXNOdW1iZXJMaXN0KGNka3RuLkZuLnRvbGlzdCh0aGlzLmdldE51bWJlckxpc3RBdHRyaWJ1dGUoJyR7bmFtZX0nKSkpYDtcbiAgICB9XG5cbiAgICAvLyBUb2tlbi5hc0FueSBpcyByZXF1aXJlZCBiZWNhdXNlIHRvbGlzdCByZXR1cm5zIGFuIEFycmF5IGVuY29kZWQgdG9rZW4gd2hpY2ggdGhlIGxpc3RNYXBwZXJcbiAgICAvLyB3b3VsZCB0cnkgdG8gbWFwIG92ZXIgd2hlbiB0aGlzIGlzIHBhc3NlZCB0byBhbm90aGVyIHJlc291cmNlLiBXaXRoIFRva2VuLmFzQW55KCkgaXQgaXMgbGVmdFxuICAgIC8vIGFzIGlzIGJ5IHRoZSBsaXN0TWFwcGVyIGFuZCBpcyBsYXRlciBwcm9wZXJseSByZXNvbHZlZCB0byBhIHJlZmVyZW5jZVxuICAgIC8vICh0aGlzIG9ubHkgd29ya3MgaW4gVHlwZVNjcmlwdCBjdXJyZW50bHksIHNhbWUgYXMgZm9yIHJlZmVyZW5jaW5nIGxpc3RzXG4gICAgLy8gW3NlZSBcImludGVycG9sYXRpb25Gb3JBdHRyaWJ1dGUoLi4uKVwiIGZ1cnRoZXIgYmVsb3ddKVxuICAgIHJldHVybiBgY2RrdG4uVG9rZW4uYXNBbnkoY2RrdG4uRm4udG9saXN0KHRoaXMuaW50ZXJwb2xhdGlvbkZvckF0dHJpYnV0ZSgnJHtuYW1lfScpKSlgO1xuICB9XG5cbiAgZ2V0IHRvVGVycmFmb3JtRnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGVJdGVtKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS50b1RlcnJhZm9ybUZ1bmN0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYGNka3RuLmxpc3RNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259LCAke3RoaXMuaXNCbG9ja30pYDtcbiAgICB9XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZUl0ZW0pIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBgY2RrdG4ubGlzdE1hcHBlckhjbCgke3RoaXMuZWxlbWVudFR5cGUudG9IY2xUZXJyYWZvcm1GdW5jdGlvbn0sICR7dGhpcy5pc0Jsb2NrfSlgO1xuICB9XG5cbiAgZ2V0IGhhc1JlZmVyZW5jZUNsYXNzKCkge1xuICAgIHJldHVybiB0aGlzLmlzU2luZ2xlSXRlbSB8fCB0aGlzLmlzQ29tcGxleDtcbiAgfVxuXG4gIGdldCBpc1Rva2VuaXphYmxlKCkge1xuICAgIHN3aXRjaCAodGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBjb21tZW50IG9uIExpc3RBdHRyaWJ1dGVUeXBlTW9kZWwuaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlIGFib3ZlIC0gc2FtZVxuICAvLyByZWFzb25pbmcgYXBwbGllcyBoZXJlLlxuICBnZXQgaXNTdG9yZWRDbGFzc1VuYXZhaWxhYmxlKCkge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFN0b3JlZENsYXNzID09PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1hcEF0dHJpYnV0ZVR5cGVNb2RlbCBpbXBsZW1lbnRzIENvbGxlY3Rpb25BdHRyaWJ1dGVUeXBlTW9kZWwge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFR5cGU6IEF0dHJpYnV0ZVR5cGVNb2RlbCkge31cblxuICBnZXQgdHlwZU1vZGVsVHlwZSgpIHtcbiAgICByZXR1cm4gXCJtYXBcIjtcbiAgfVxuXG4gIGdldCBzdHJ1Y3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUuc3RydWN0O1xuICB9XG5cbiAgZ2V0IGlzQ29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5pc0NvbXBsZXg7XG4gIH1cblxuICBnZXRTdG9yZWRDbGFzc0luaXRpYWxpemVyKG5hbWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmlzQ29tcGxleCkge1xuICAgICAgcmV0dXJuIGBuZXcgJHt0aGlzLnN0b3JlZENsYXNzVHlwZX0odGhpcywgXCIke25hbWV9XCIpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBuZXcgY2RrdG4uJHt0aGlzLnJlc29sdmVkU3RvcmVkQ2xhc3MhLm5hbWV9KHRoaXMsIFwiJHtuYW1lfVwiKWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0b3JlZENsYXNzVHlwZSgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5lbGVtZW50VHlwZS5zdG9yZWRDbGFzc1R5cGV9TWFwYDtcbiAgfVxuXG4gIGdldCByZXNvbHZlZFN0b3JlZENsYXNzKCkge1xuICAgIHJldHVybiByZXNvbHZlU3RvcmVkQ2xhc3NOYW1lKFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgICB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBpbnB1dFR5cGVEZWZpbml0aW9uKCkge1xuICAgIC8vIG1hcCBvZiBib29sZWFucyBoYXMgdG9rZW4gc3VwcG9ydCwgYnV0IGJvb2xlYW5zIGRvbid0XG4gICAgaWYgKHRoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIGB7IFtrZXk6IHN0cmluZ106ICgke3RoaXMuZWxlbWVudFR5cGUuc3RvcmVkQ2xhc3NUeXBlfSB8IGNka3RuLklSZXNvbHZhYmxlKSB9YDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX0gfSB8IGNka3RuLklSZXNvbHZhYmxlYDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZWxlbWVudFR5cGUudHlwZU1vZGVsVHlwZSAhPT0gXCJzaW1wbGVcIikge1xuICAgICAgcmV0dXJuIGB7IFtrZXk6IHN0cmluZ106ICR7dGhpcy5lbGVtZW50VHlwZS5pbnB1dFR5cGVEZWZpbml0aW9ufSB9IHwgY2RrdG4uSVJlc29sdmFibGVgO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYHsgW2tleTogc3RyaW5nXTogJHt0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZX0gfWA7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlQWNjZXNzRnVuY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmlzQ29tcGxleCAmJiB0aGlzLmVsZW1lbnRUeXBlLnR5cGVNb2RlbFR5cGUgIT09IFwic2ltcGxlXCIpIHtcbiAgICAgIHJldHVybiBgdGhpcy5pbnRlcnBvbGF0aW9uRm9yQXR0cmlidXRlKCcke25hbWV9JylgO1xuICAgIH1cblxuICAgIHJldHVybiBgdGhpcy5nZXQke3VwcGVyY2FzZUZpcnN0KFxuICAgICAgdGhpcy5zdG9yZWRDbGFzc1R5cGUsXG4gICAgKX1BdHRyaWJ1dGUoJyR7bmFtZX0nKWA7XG4gIH1cblxuICBnZXQgdG9UZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmhhc2hNYXBwZXIoJHt0aGlzLmVsZW1lbnRUeXBlLnRvVGVycmFmb3JtRnVuY3Rpb259KWA7XG4gIH1cblxuICBnZXQgdG9IY2xUZXJyYWZvcm1GdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYGNka3RuLmhhc2hNYXBwZXJIY2woJHt0aGlzLmVsZW1lbnRUeXBlLnRvSGNsVGVycmFmb3JtRnVuY3Rpb259KWA7XG4gIH1cblxuICBnZXQgaGFzUmVmZXJlbmNlQ2xhc3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb21wbGV4O1xuICB9XG5cbiAgZ2V0IGlzVG9rZW5pemFibGUoKSB7XG4gICAgc3dpdGNoICh0aGlzLmVsZW1lbnRUeXBlLnN0b3JlZENsYXNzVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGNvbW1lbnQgb24gTGlzdEF0dHJpYnV0ZVR5cGVNb2RlbC5pc1N0b3JlZENsYXNzVW5hdmFpbGFibGUgYWJvdmUgLSBzYW1lXG4gIC8vIHJlYXNvbmluZyBhcHBsaWVzIGhlcmUgKE1hcEF0dHJpYnV0ZVR5cGVNb2RlbC5oYXNSZWZlcmVuY2VDbGFzcyBpcyBqdXN0IGlzQ29tcGxleCkuXG4gIGdldCBpc1N0b3JlZENsYXNzVW5hdmFpbGFibGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDb21wbGV4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlc29sdmVkU3RvcmVkQ2xhc3MgPT09IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ export declare function resolveStoredClassName(ownStoredClassType: string, elementTypeModelType: string): {
2
+ name: string;
3
+ collapsed: boolean;
4
+ } | undefined;
5
+ //# sourceMappingURL=supported-stored-classes.d.ts.map