angular-toolbox 0.10.2 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A library that provides useful tools for Angular apps development.
4
4
 
5
- [![Angular Toolbox version](https://img.shields.io/badge/Angular%20Toolbox-beta:.0.10.2-%231E90FF.svg)]()
5
+ [![Angular Toolbox version](https://img.shields.io/badge/Angular%20Toolbox-beta:.0.11.0-%231E90FF.svg)]()
6
6
 
7
7
  ## License
8
8
 
@@ -129,29 +129,35 @@ export class DelegateXhr extends XhrBase {
129
129
  let timer = httpResponseMock.delay || 0;
130
130
  if (timer > MAX_TIMER)
131
131
  timer = MAX_TIMER;
132
- this._loadSubscription = this.loadData(httpResponseMock).subscribe((data) => {
133
- this._dataStorage = DataStorageBuilder.buildDataStorage(httpResponseMock, data);
134
- const error = this._dataStorage.httpResponse.error;
135
- setTimeout(() => {
136
- this.setReadyState(this.HEADERS_RECEIVED);
137
- if (error)
138
- return this.onError(error);
139
- this.setReadyState(this.LOADING);
140
- const response = this._dataStorage.httpResponse;
141
- let headers = response.headers;
142
- if (headers) {
143
- this._headers.keys().forEach((key) => {
144
- headers = headers.set(key, this._headers.get(key));
145
- });
146
- this._headers = headers;
147
- }
148
- if (!this._progressiveDownload) {
149
- this._statusText = response.statusText || EMPTY_STRING;
150
- this._status = response.status || 0;
151
- return this.onLoadComplete();
152
- }
153
- this.doProgressiveDownload();
154
- }, timer);
132
+ this._loadSubscription = this.loadData(httpResponseMock).subscribe({
133
+ next: (data) => {
134
+ this.setDataStorage(httpResponseMock, data);
135
+ const error = this._dataStorage.httpResponse.error;
136
+ setTimeout(() => {
137
+ this.setReadyState(this.HEADERS_RECEIVED);
138
+ if (error)
139
+ return this.onError(error);
140
+ this.setReadyState(this.LOADING);
141
+ const response = this._dataStorage.httpResponse;
142
+ let headers = response.headers;
143
+ if (headers) {
144
+ this._headers.keys().forEach((key) => {
145
+ headers = headers.set(key, this._headers.get(key));
146
+ });
147
+ this._headers = headers;
148
+ }
149
+ if (!this._progressiveDownload) {
150
+ this._statusText = response.statusText || EMPTY_STRING;
151
+ this._status = response.status || 0;
152
+ return this.onLoadComplete();
153
+ }
154
+ this.doProgressiveDownload();
155
+ }, timer);
156
+ },
157
+ error: (err) => {
158
+ this.setDataStorage(httpResponseMock);
159
+ this.onError(err);
160
+ }
155
161
  });
156
162
  }
157
163
  /**
@@ -216,7 +222,7 @@ export class DelegateXhr extends XhrBase {
216
222
  const methodConfig = routeConfig.methodConfig;
217
223
  this._routeConfig = routeConfig;
218
224
  this._progressiveDownload = methodConfig.progressive || false;
219
- this.responseType = methodConfig.responseType || "";
225
+ this.responseType = methodConfig.responseType || EMPTY_STRING;
220
226
  this._headers = new HttpHeaders();
221
227
  }
222
228
  /**
@@ -312,5 +318,11 @@ export class DelegateXhr extends XhrBase {
312
318
  const responseBody = httpResponseMock.body;
313
319
  return (responseBody instanceof Observable) ? responseBody : of(responseBody);
314
320
  }
321
+ /**
322
+ * @private
323
+ */
324
+ setDataStorage(responseMock, data = null) {
325
+ this._dataStorage = DataStorageBuilder.buildDataStorage(responseMock, data);
326
+ }
315
327
  }
316
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGUteGhyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10b29sYm94L3NyYy9saWIvZnJhbWV3b3JrL21vY2svaHR0cC94aHIvZGVsZWdhdGUteGhyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsVUFBVSxFQUFnQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEU7OztHQUdHO0FBQ0gsTUFBTSxTQUFTLEdBQVcsS0FBSyxDQUFDO0FBRWhDOzs7R0FHRztBQUNILE1BQU0sd0JBQXdCLEdBQVUsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUVoRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFdBQVksU0FBUSxPQUFPO0lBb0VwQzs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLE1BQU07UUFDTixPQUFP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WUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEYsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0LCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBYaHJQcm94eSwgSHR0cFJlc3BvbnNlTW9jaywgSHR0cE1ldGhvZE1vY2ssIEh0dHBNb2NrRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxcIjtcclxuaW1wb3J0IHsgUHJvZ3Jlc3NFdmVudE1vY2sgfSBmcm9tIFwiLi4vZXZlbnQvcHJvZ3Jlc3MtZXZlbnQtbW9ja1wiO1xyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBYaHJCYXNlIH0gZnJvbSBcIi4veGhyLWJhc2VcIjtcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnNVdGlsIH0gZnJvbSBcIi4uL3V0aWwvaHR0cC1oZWFkZXJzLnV0aWxcIjtcclxuaW1wb3J0IHsgUm91dGVNb2NrQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9yb3V0ZS1tb2NrLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRGF0YVN0b3JhZ2UgfSBmcm9tIFwiLi4vY29yZS9kYXRhLXN0b3JhZ2VcIjtcclxuaW1wb3J0IHsgRGF0YVN0b3JhZ2VCdWlsZGVyIH0gZnJvbSBcIi4uL3V0aWwvZGF0YS1zdG9yYWdlLmJ1aWxkZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBkZWxheWVkIEhUVFAgcmVzcG9uc2UuXHJcbiAqL1xyXG5jb25zdCBNQVhfVElNRVI6IG51bWJlciA9IDEwMDAwO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEludGVuYWwgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBldmVudC5cclxuICovXHJcbmNvbnN0IFJFQURZX1NUQVRFX0NIQU5HRV9FVkVOVDogRXZlbnQgPSBuZXcgRXZlbnQoXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIik7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IEVWVF9QUk9QU19DT05GSUc6IGFueSA9ICB7IHdyaXRhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfTtcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBBIHV0aWxpdHkgY2xhc3MgdXNlZCBhcyBkZWxlZ2F0ZSBvZiBgWE1MSHR0cFJlcXVlc3RgIGZ1bmN0aW9uYWxpdGllcyB3aGVuXHJcbiAqIGEgSFRUUCByZXF1ZXN0IGlzIGludGVyY2VwdGVkIGJ5IHRoZSBNb2NraW5nIEZyYW1ld29yayAuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGVsZWdhdGVYaHIgZXh0ZW5kcyBYaHJCYXNlIGltcGxlbWVudHMgWGhyUHJveHkge1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvZ3Jlc3NpdmUgZG93bmxvYWQgaXMgYWN0aXZhdGVkLCBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3Byb2dyZXNzaXZlRG93bmxvYWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBUaGUgY29uZmlnIGZvciB0aGUgaW50ZXJjZXB0ZWQgcm91dGUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3JvdXRlQ29uZmlnOiBSb3V0ZU1vY2tDb25maWc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBJbnRlcm5hbCBzdG9yYWdlIGZvciBIVFRQIHJlc3BvbnNlIGBkYXRhYC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZGF0YVN0b3JhZ2U6IERhdGFTdG9yYWdlID0gbnVsbCBhcyBhbnk7IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogSW50ZXJuYWwgc3RvcmFnZSBmb3IgdGhlIEhUVFAgcmVxdWVzdCBgbWV0aG9kYC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbWV0aG9kOiB1bmtub3duOyBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIEludGVybmFsIHN0b3JhZ2UgZm9yIHRoZSBIVFRQIHJlcXVlc3QgVVJMLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF91cmw6IHVua25vd247IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogSW50ZXJuYWwgc3RvcmFnZSBmb3IgdGhlIEhUVFAgcmVxdWVzdCBgcmVhZHlTdGF0ZWAuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3JlYWR5U3RhdGU6IG51bWJlciA9IHRoaXMuVU5TRU5UO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogSW50ZXJuYWwgc3RvcmFnZSBmb3IgdGhlIEhUVFAgcmVxdWVzdCBgaGVhZGVyc2AuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2hlYWRlcnM6IEh0dHBIZWFkZXJzID0gbnVsbCBhcyBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBJbnRlcm5hbCBzdG9yYWdlIGZvciB0aGUgSFRUUCByZXF1ZXN0IGBzdGF0dXNgLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9zdGF0dXM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBJbnRlcm5hbCBzdG9yYWdlIGZvciB0aGUgSFRUUCByZXF1ZXN0IGBzdGF0dXNUZXh0YC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfc3RhdHVzVGV4dDogc3RyaW5nID0gRU1QVFlfU1RSSU5HO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbG9hZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByZXNwb25zZSBib2R5IGNvbnRlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvcmVzcG9uc2VcclxuICAgICAqL1xyXG4gICAgZ2V0IHJlc3BvbnNlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTdG9yYWdlPy5kYXRhIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1lcmljYWwgSFRUUCBzdGF0dXMgY29kZSBvZiB0aGUgYFhNTEh0dHBSZXF1ZXN0YCByZXNwb25zZS5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9zdGF0dXNcclxuICAgICAqL1xyXG4gICAgZ2V0IHN0YXR1cygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlc3BvbnNlIHN0YXR1cyBtZXNzYWdlIGFzIHJldHVybmVkIGJ5IHRoZSBIVFRQIHNlcnZlci5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9zdGF0dXNUZXh0XHJcbiAgICAgKi9cclxuICAgIGdldCBzdGF0dXNUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1c1RleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSB0aGUgYFhNTEh0dHBSZXF1ZXN0YCBjbGllbnQgaXMgaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvcmVhZHlTdGF0ZVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhZHlTdGF0ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkeVN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2VyaWFsaXplZCBVUkwgb2YgdGhlIHJlc3BvbnNlIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlIFVSTCBpcyBgbnVsbGAuIFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlVVJMXHJcbiAgICAgKi9cclxuICAgIGdldCByZXNwb25zZVVSTCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91cmwgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdGV4dCByZWNlaXZlZCBmcm9tIGEgc2VydmVyIGZvbGxvd2luZyBhIHJlcXVlc3QgYmVpbmcgc2VudC5cclxuICAgICAqXHJcbiAgICAgKiBUaHJvd3MgYW4gYEludmFsaWRTdGF0ZUVycm9yYCBET01FeGNlcHRpb24gaWYgcmVzcG9uc2VUeXBlIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nIG9yIFwidGV4dFwiLlxyXG4gICAgICpcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlVGV4dFxyXG4gICAgICovXHJcbiAgICBnZXQgcmVzcG9uc2VUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTdG9yYWdlPy5zdHJpbmdpZmllZERhdGEgfHwgRU1QVFlfU1RSSU5HO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFJldHVybnMgYW4gYFhNTEh0dHBSZXF1ZXN0VXBsb2FkYCBvYmplY3QgdGhhdCBjYW4gYmUgb2JzZXJ2ZWQgdG8gbW9uaXRvciBhbiB1cGxvYWQgcHJvZ3Jlc3MuIFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3VwbG9hZFxyXG4gICAgICovXHJcbiAgICBnZXQgdXBsb2FkKCk6IFhNTEh0dHBSZXF1ZXN0VXBsb2FkIHtcclxuICAgICAgICByZXR1cm4gbnVsbCBhcyBhbnk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogIFJldHVybnMgYW4gYW4gZW51bWVyYXRlZCBzdHJpbmcgdmFsdWUgc3BlY2lmeWluZyB0aGUgdHlwZSBvZiBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgcmVzcG9uc2UuIFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlVHlwZVxyXG4gICAgICovXHJcbiAgICByZXNwb25zZVR5cGU6IFhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlID0gXCJcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHktY3JlYXRlZCByZXF1ZXN0LCBvciByZS1pbml0aWFsaXplcyBhbiBleGlzdGluZyBvbmUuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBtZXRob2QgVGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgdG8gdXNlLCBzdWNoIGFzIGBcIkdFVFwiYCwgYFwiUE9TVFwiYCwgYFwiUFVUXCJgLCBgXCJERUxFVEVcImAsXHJcbiAgICAgKiAgICAgICAgICAgICAgIGV0Yy4gSWdub3JlZCBmb3Igbm9uLUhUVFAoUykgVVJMcy5cclxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgb3IgYW55IG90aGVyIG9iamVjdCB3aXRoIGEgc3RyaW5naWZpZXIg4oCUIGluY2x1ZGluZyBhIFVSTCBvYmplY3Qg4oCUXHJcbiAgICAgKiAgICAgICAgICAgIHRoYXQgcHJvdmlkZXMgdGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UgdG8gc2VuZCB0aGUgcmVxdWVzdCB0by5cclxuICAgICAqL1xyXG4gICAgb3BlbihtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcgfCBVUkwpOiB2b2lkO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBvcGVuKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZyB8IFVSTCwgYXN5bmM6IGJvb2xlYW4sIHVzZXJuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFzc3dvcmQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZDtcclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgb3BlbihtZXRob2Q6IHVua25vd24sIHVybDogdW5rbm93biwgYXN5bmM/OiB1bmtub3duLCB1c2VybmFtZT86IHVua25vd24sIHBhc3N3b3JkPzogdW5rbm93bik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX21ldGhvZCA9IG1ldGhvZDtcclxuICAgICAgICB0aGlzLl91cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5zZXRSZWFkeVN0YXRlKHRoaXMuT1BFTkVEKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFib3J0cyB0aGUgcmVxdWVzdCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHNlbnQuIFdoZW4gYSByZXF1ZXN0IGlzIGFib3J0ZWQsIGl0cyBgcmVhZHlTdGF0ZWBcclxuICAgICAqIGlzIGNoYW5nZWQgdG8gYFhNTEh0dHBSZXF1ZXN0LlVOU0VOVGAgYW5kIHRoZSByZXF1ZXN0IHN0YXR1cyBjb2RlIGlzIHNldCB0byBgMGAuXHJcbiAgICAgKi9cclxuICAgIGFib3J0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3JlYWR5U3RhdGUgPSB0aGlzLlVOU0VOVDtcclxuICAgICAgICB0aGlzLl9zdGF0dXMgPSAwO1xyXG4gICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaChcImFib3J0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgdGhlIHJlc3BvbnNlIGhlYWRlcnMsIHNlcGFyYXRlZCBieSBDUkxGLCBhcyBhIHN0cmluZywgb3IgcmV0dXJucyBgbnVsbGBcclxuICAgICAqIGlmIG5vIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBBbGwgdGhlIHJlc3BvbnNlIGhlYWRlcnMsIHNlcGFyYXRlZCBieSBDUkxGLCBhcyBhIHN0cmluZywgb3IgcmV0dXJucyBgbnVsbGBcclxuICAgICAqICAgICAgICAgIGlmIG5vIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVN0b3JhZ2UgPyBIdHRwSGVhZGVyc1V0aWwuc3RyaW5naWZ5KHRoaXMuX2hlYWRlcnMpIDogRU1QVFlfU1RSSU5HO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHNlcnZlci5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJvZHkgQSBib2R5IG9mIGRhdGEgdG8gYmUgc2VudCBpbiB0aGUgWEhSIHJlcXVlc3QuXHJcbiAgICAgKi9cclxuICAgIHNlbmQoYm9keT86IERvY3VtZW50IHwgWE1MSHR0cFJlcXVlc3RCb2R5SW5pdCB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+ID0gbmV3IEh0dHBSZXF1ZXN0PGFueT4odGhpcy5fbWV0aG9kIGFzIHN0cmluZywgdGhpcy5fdXJsIGFzIGFueSwgYm9keSk7XHJcbiAgICAgICAgY29uc3QgcmM6IFJvdXRlTW9ja0NvbmZpZyA9IHRoaXMuX3JvdXRlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IGh0dHBSZXNwb25zZU1vY2s6IEh0dHBSZXNwb25zZU1vY2sgPSAocmMubWV0aG9kQ29uZmlnIGFzIGFueSkuZGF0YShyZXF1ZXN0LCByYy5wYXJhbWV0ZXJzKTtcclxuICAgICAgICBsZXQgdGltZXI6IG51bWJlciA9IGh0dHBSZXNwb25zZU1vY2suZGVsYXkgfHwgMDtcclxuICAgICAgICBpZiAodGltZXIgPiBNQVhfVElNRVIpIHRpbWVyID0gTUFYX1RJTUVSO1xyXG4gICAgICAgIHRoaXMuX2xvYWRTdWJzY3JpcHRpb24gPSB0aGlzLmxvYWREYXRhKGh0dHBSZXNwb25zZU1vY2spLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTdG9yYWdlID0gRGF0YVN0b3JhZ2VCdWlsZGVyLmJ1aWxkRGF0YVN0b3JhZ2UoaHR0cFJlc3BvbnNlTW9jaywgZGF0YSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yOiBIdHRwTW9ja0Vycm9yIHwgbnVsbCA9IHRoaXMuX2RhdGFTdG9yYWdlLmh0dHBSZXNwb25zZS5lcnJvcjtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVhZHlTdGF0ZSh0aGlzLkhFQURFUlNfUkVDRUlWRUQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSByZXR1cm4gdGhpcy5vbkVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVhZHlTdGF0ZSh0aGlzLkxPQURJTkcpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2U6IEh0dHBSZXNwb25zZU1vY2sgPSB0aGlzLl9kYXRhU3RvcmFnZS5odHRwUmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVyczogYW55ID0gcmVzcG9uc2UuaGVhZGVycztcclxuICAgICAgICAgICAgICAgIGlmIChoZWFkZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVycy5rZXlzKCkuZm9yRWFjaCgoa2V5OiBzdHJpbmcpPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoa2V5LCB0aGlzLl9oZWFkZXJzLmdldChrZXkpIGFzIGFueSlcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzID0gaGVhZGVycztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcHJvZ3Jlc3NpdmVEb3dubG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0dXNUZXh0IHx8IEVNUFRZX1NUUklORztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vbkxvYWRDb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kb1Byb2dyZXNzaXZlRG93bmxvYWQoKTtcclxuICAgICAgICAgICAgfSwgdGltZXIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgYW4gSFRUUCByZXF1ZXN0IGhlYWRlci5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhlYWRlciB3aG9zZSB2YWx1ZSBpcyB0byBiZSBzZXQuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldCBhcyB0aGUgYm9keSBvZiB0aGUgaGVhZGVyLlxyXG4gICAgICovXHJcbiAgICBzZXRSZXF1ZXN0SGVhZGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hlYWRlcnMgPSB0aGlzLl9oZWFkZXJzLnNldChuYW1lLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZSBcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3Iocm91dGVDb25maWc6IFJvdXRlTW9ja0NvbmZpZykge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgY29uc3QgbWV0aG9kQ29uZmlnOiBIdHRwTWV0aG9kTW9jayA9IHJvdXRlQ29uZmlnLm1ldGhvZENvbmZpZztcclxuICAgICAgICB0aGlzLl9yb3V0ZUNvbmZpZyA9IHJvdXRlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMuX3Byb2dyZXNzaXZlRG93bmxvYWQgPSBtZXRob2RDb25maWcucHJvZ3Jlc3NpdmUgfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZXNwb25zZVR5cGUgPSBtZXRob2RDb25maWcucmVzcG9uc2VUeXBlIHx8IFwiXCI7XHJcbiAgICAgICAgdGhpcy5faGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlIFxyXG4gICAgICogSW50ZXJuYWxseSB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gZGVsZXRlIGEgYERlbGVnYXRlWGhyYCBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fcm91dGVDb25maWcgPSBudWxsIGFzIGFueTtcclxuICAgICAgICB0aGlzLl9oZWFkZXJzID0gbnVsbCBhcyBhbnk7XHJcbiAgICAgICAgdGhpcy5fZGF0YVN0b3JhZ2UgPSBudWxsIGFzIGFueTtcclxuICAgICAgICBpZiAodGhpcy5fbG9hZFN1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLl9sb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlIFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRvUHJvZ3Jlc3NpdmVEb3dubG9hZCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB0b3RhbDogbnVtYmVyID0gdGhpcy5fZGF0YVN0b3JhZ2UudG90YWw7XHJcbiAgICAgICAgaWYgKHRvdGFsIDw9IDIwMCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbQW5ndWxhciBUb29sYm94XTogQm9keSBjb250ZW50IGlzIHRvbyBzbWFsbCBmb3IgZW11bGF0aW5nIHByb2dyZXNzaXZlIGRvd25sb2FkISBNaW5pbXVtIHNpemUgaXMgMjAwIG9jdGV0cy5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uTG9hZENvbXBsZXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGFtZWxpb3JhdGUgdGhlIGZvbGxvd2luZyBwcm9jZXNzOlxyXG4gICAgICAgIGNvbnN0IHNlbGY6IERlbGVnYXRlWGhyID0gdGhpcztcclxuICAgICAgICBjb25zdCBjaHVuY2tTaXplOiBudW1iZXIgPSBNYXRoLmZsb29yKHRvdGFsIC8gMTApO1xyXG4gICAgICAgIGxldCBjdXJzb3I6IG51bWJlciA9IDA7XHJcbiAgICAgICAgdGhpcy5fc3RhdHVzVGV4dCA9IFwiUGFydGlhbCBDb250ZW50XCI7XHJcbiAgICAgICAgdGhpcy5fc3RhdHVzID0gSHR0cFN0YXR1c0NvZGUuUGFydGlhbENvbnRlbnQ7XHJcbiAgICAgICAgY29uc3QgaWR4ID0gc2V0SW50ZXJ2YWwoKCk9PiB7XHJcbiAgICAgICAgICAgIGN1cnNvciArPSBjaHVuY2tTaXplO1xyXG4gICAgICAgICAgICBpZiAoY3Vyc29yID4gdG90YWwpIHtcclxuICAgICAgICAgICAgICAgIGN1cnNvciA9IHRvdGFsO1xyXG4gICAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpZHgpO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5vbkxvYWRDb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVN0b3JhZ2UubG9hZGVkID0gY3Vyc29yO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaFByb2dyZXNzRXZlbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9uTG9hZENvbXBsZXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RhdGFTdG9yYWdlLmxvYWRlZCA9IHRoaXMuX2RhdGFTdG9yYWdlLnRvdGFsO1xyXG4gICAgICAgIHRoaXMuc2V0UmVhZHlTdGF0ZSh0aGlzLkRPTkUpO1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KFwibG9hZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb25FcnJvcihlcnJvcjogSHR0cE1vY2tFcnJvcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3N0YXR1cyA9IGVycm9yLnN0YXR1cztcclxuICAgICAgICB0aGlzLl9zdGF0dXNUZXh0ID0gZXJyb3Iuc3RhdHVzVGV4dDtcclxuICAgICAgICB0aGlzLnNldFJlYWR5U3RhdGUodGhpcy5ET05FKTtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoUHJvZ3Jlc3NFdmVudChcImVycm9yXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBldmVudERpc3BhdGNoKHR5cGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50OiBFdmVudCA9IG5ldyBFdmVudCh0eXBlKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICd0YXJnZXQnLCBFVlRfUFJPUFNfQ09ORklHKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICdjdXJyZW50VGFyZ2V0JywgRVZUX1BST1BTX0NPTkZJRyk7XHJcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlIFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGRpc3BhdGNoUHJvZ3Jlc3NFdmVudCh0eXBlOiBzdHJpbmcgPSBcInByb2dyZXNzXCIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkOiBhbnkgPSB0aGlzLl9kYXRhU3RvcmFnZTtcclxuICAgICAgICBjb25zdCBldmVudDogUHJvZ3Jlc3NFdmVudE1vY2sgPSBuZXcgUHJvZ3Jlc3NFdmVudE1vY2sodHlwZSk7XHJcbiAgICAgICAgZXZlbnQubG9hZGVkID0gZC5sb2FkZWQ7XHJcbiAgICAgICAgZXZlbnQudG90YWwgPSBkLnRvdGFsO1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZSBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRSZWFkeVN0YXRlKHN0YXRlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yZWFkeVN0YXRlID0gc3RhdGU7XHJcbiAgICAgICAgY29uc3QgZXZlbnQ6IGFueSA9IHRoaXMub25yZWFkeXN0YXRlY2hhbmdlO1xyXG4gICAgICAgIGlmIChldmVudCkgZXZlbnQuY2FsbCh0aGlzLCBSRUFEWV9TVEFURV9DSEFOR0VfRVZFTlQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGUgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbG9hZERhdGEoaHR0cFJlc3BvbnNlTW9jazogSHR0cFJlc3BvbnNlTW9jayk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5OiBhbnkgfCBPYnNlcnZhYmxlPGFueT4gPSBodHRwUmVzcG9uc2VNb2NrLmJvZHk7XHJcbiAgICAgICAgcmV0dXJuIChyZXNwb25zZUJvZHkgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSA/IHJlc3BvbnNlQm9keSA6IG9mKHJlc3BvbnNlQm9keSk7XHJcbiAgICB9XHJcbn0iXX0=
328
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZWdhdGUteGhyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci10b29sYm94L3NyYy9saWIvZnJhbWV3b3JrL21vY2svaHR0cC94aHIvZGVsZWdhdGUteGhyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsVUFBVSxFQUFnQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbEU7OztHQUdHO0FBQ0gsTUFBTSxTQUFTLEdBQVcsS0FBSyxDQUFDO0FBRWhDOzs7R0FHRztBQUNILE1BQU0sd0JBQXdCLEdBQVUsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUVoRTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFdBQVksU0FBUSxPQUFPO0lBb0VwQzs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJLE1BQU07UUFDTixPQUFP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QUksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7T0FFRztJQUNLLFFBQVEsQ0FBQyxnQkFBa0M7UUFDL0MsTUFBTSxZQUFZLEdBQTBCLGdCQUFnQixDQUFDLElBQUksQ0FBQztRQUNsRSxPQUFPLENBQUMsWUFBWSxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBQ0Q7O09BRUc7SUFDSyxjQUFjLENBQUMsWUFBOEIsRUFBRSxPQUFZLElBQUk7UUFDbkUsSUFBSSxDQUFDLFlBQVksR0FBSSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakYsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCBQYXNjYWwgRUNIRU1BTk4uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluXHJcbiAqIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9wYXNjYWxlY2hlbWFubi5jb20vYW5ndWxhci10b29sYm94L3Jlc291cmNlcy9saWNlbnNlXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXF1ZXN0LCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBYaHJQcm94eSwgSHR0cFJlc3BvbnNlTW9jaywgSHR0cE1ldGhvZE1vY2ssIEh0dHBNb2NrRXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWxcIjtcclxuaW1wb3J0IHsgUHJvZ3Jlc3NFdmVudE1vY2sgfSBmcm9tIFwiLi4vZXZlbnQvcHJvZ3Jlc3MtZXZlbnQtbW9ja1wiO1xyXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBYaHJCYXNlIH0gZnJvbSBcIi4veGhyLWJhc2VcIjtcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnNVdGlsIH0gZnJvbSBcIi4uL3V0aWwvaHR0cC1oZWFkZXJzLnV0aWxcIjtcclxuaW1wb3J0IHsgUm91dGVNb2NrQ29uZmlnIH0gZnJvbSBcIi4uL2NvbmZpZy9yb3V0ZS1tb2NrLWNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRGF0YVN0b3JhZ2UgfSBmcm9tIFwiLi4vY29yZS9kYXRhLXN0b3JhZ2VcIjtcclxuaW1wb3J0IHsgRGF0YVN0b3JhZ2VCdWlsZGVyIH0gZnJvbSBcIi4uL3V0aWwvZGF0YS1zdG9yYWdlLmJ1aWxkZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBkZWxheWVkIEhUVFAgcmVzcG9uc2UuXHJcbiAqL1xyXG5jb25zdCBNQVhfVElNRVI6IG51bWJlciA9IDEwMDAwO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqIEludGVuYWwgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBldmVudC5cclxuICovXHJcbmNvbnN0IFJFQURZX1NUQVRFX0NIQU5HRV9FVkVOVDogRXZlbnQgPSBuZXcgRXZlbnQoXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIik7XHJcblxyXG4vKipcclxuICogQHByaXZhdGVcclxuICovXHJcbmNvbnN0IEVWVF9QUk9QU19DT05GSUc6IGFueSA9ICB7IHdyaXRhYmxlOiBmYWxzZSwgdmFsdWU6IHRoaXMgfTtcclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKiBBIHV0aWxpdHkgY2xhc3MgdXNlZCBhcyBkZWxlZ2F0ZSBvZiBgWE1MSHR0cFJlcXVlc3RgIGZ1bmN0aW9uYWxpdGllcyB3aGVuXHJcbiAqIGEgSFRUUCByZXF1ZXN0IGlzIGludGVyY2VwdGVkIGJ5IHRoZSBNb2NraW5nIEZyYW1ld29yayAuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRGVsZWdhdGVYaHIgZXh0ZW5kcyBYaHJCYXNlIGltcGxlbWVudHMgWGhyUHJveHkge1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcHJvZ3Jlc3NpdmUgZG93bmxvYWQgaXMgYWN0aXZhdGVkLCBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3Byb2dyZXNzaXZlRG93bmxvYWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBUaGUgY29uZmlnIGZvciB0aGUgaW50ZXJjZXB0ZWQgcm91dGUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3JvdXRlQ29uZmlnOiBSb3V0ZU1vY2tDb25maWc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBJbnRlcm5hbCBzdG9yYWdlIGZvciBIVFRQIHJlc3BvbnNlIGBkYXRhYC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZGF0YVN0b3JhZ2U6IERhdGFTdG9yYWdlID0gbnVsbCBhcyBhbnk7IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogSW50ZXJuYWwgc3RvcmFnZSBmb3IgdGhlIEhUVFAgcmVxdWVzdCBgbWV0aG9kYC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbWV0aG9kOiB1bmtub3duOyBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKiBcclxuICAgICAqIEludGVybmFsIHN0b3JhZ2UgZm9yIHRoZSBIVFRQIHJlcXVlc3QgVVJMLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF91cmw6IHVua25vd247IFxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogSW50ZXJuYWwgc3RvcmFnZSBmb3IgdGhlIEhUVFAgcmVxdWVzdCBgcmVhZHlTdGF0ZWAuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3JlYWR5U3RhdGU6IG51bWJlciA9IHRoaXMuVU5TRU5UO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqIFxyXG4gICAgICogSW50ZXJuYWwgc3RvcmFnZSBmb3IgdGhlIEhUVFAgcmVxdWVzdCBgaGVhZGVyc2AuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2hlYWRlcnM6IEh0dHBIZWFkZXJzID0gbnVsbCBhcyBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBJbnRlcm5hbCBzdG9yYWdlIGZvciB0aGUgSFRUUCByZXF1ZXN0IGBzdGF0dXNgLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9zdGF0dXM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICogXHJcbiAgICAgKiBJbnRlcm5hbCBzdG9yYWdlIGZvciB0aGUgSFRUUCByZXF1ZXN0IGBzdGF0dXNUZXh0YC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfc3RhdHVzVGV4dDogc3RyaW5nID0gRU1QVFlfU1RSSU5HO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbG9hZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSByZXNwb25zZSBib2R5IGNvbnRlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvcmVzcG9uc2VcclxuICAgICAqL1xyXG4gICAgZ2V0IHJlc3BvbnNlKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTdG9yYWdlPy5kYXRhIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1lcmljYWwgSFRUUCBzdGF0dXMgY29kZSBvZiB0aGUgYFhNTEh0dHBSZXF1ZXN0YCByZXNwb25zZS5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9zdGF0dXNcclxuICAgICAqL1xyXG4gICAgZ2V0IHN0YXR1cygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlc3BvbnNlIHN0YXR1cyBtZXNzYWdlIGFzIHJldHVybmVkIGJ5IHRoZSBIVFRQIHNlcnZlci5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9YTUxIdHRwUmVxdWVzdC9zdGF0dXNUZXh0XHJcbiAgICAgKi9cclxuICAgIGdldCBzdGF0dXNUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1c1RleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBzdGF0ZSB0aGUgYFhNTEh0dHBSZXF1ZXN0YCBjbGllbnQgaXMgaW4uXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvWE1MSHR0cFJlcXVlc3QvcmVhZHlTdGF0ZVxyXG4gICAgICovXHJcbiAgICBnZXQgcmVhZHlTdGF0ZSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkeVN0YXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgc2VyaWFsaXplZCBVUkwgb2YgdGhlIHJlc3BvbnNlIG9yIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhlIFVSTCBpcyBgbnVsbGAuIFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlVVJMXHJcbiAgICAgKi9cclxuICAgIGdldCByZXNwb25zZVVSTCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91cmwgYXMgc3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdGV4dCByZWNlaXZlZCBmcm9tIGEgc2VydmVyIGZvbGxvd2luZyBhIHJlcXVlc3QgYmVpbmcgc2VudC5cclxuICAgICAqXHJcbiAgICAgKiBUaHJvd3MgYW4gYEludmFsaWRTdGF0ZUVycm9yYCBET01FeGNlcHRpb24gaWYgcmVzcG9uc2VUeXBlIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nIG9yIFwidGV4dFwiLlxyXG4gICAgICpcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlVGV4dFxyXG4gICAgICovXHJcbiAgICBnZXQgcmVzcG9uc2VUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTdG9yYWdlPy5zdHJpbmdpZmllZERhdGEgfHwgRU1QVFlfU1RSSU5HO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFJldHVybnMgYW4gYFhNTEh0dHBSZXF1ZXN0VXBsb2FkYCBvYmplY3QgdGhhdCBjYW4gYmUgb2JzZXJ2ZWQgdG8gbW9uaXRvciBhbiB1cGxvYWQgcHJvZ3Jlc3MuIFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3VwbG9hZFxyXG4gICAgICovXHJcbiAgICBnZXQgdXBsb2FkKCk6IFhNTEh0dHBSZXF1ZXN0VXBsb2FkIHtcclxuICAgICAgICByZXR1cm4gbnVsbCBhcyBhbnk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogIFJldHVybnMgYW4gYW4gZW51bWVyYXRlZCBzdHJpbmcgdmFsdWUgc3BlY2lmeWluZyB0aGUgdHlwZSBvZiBkYXRhIGNvbnRhaW5lZCBpbiB0aGUgcmVzcG9uc2UuIFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L3Jlc3BvbnNlVHlwZVxyXG4gICAgICovXHJcbiAgICByZXNwb25zZVR5cGU6IFhNTEh0dHBSZXF1ZXN0UmVzcG9uc2VUeXBlID0gXCJcIjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHktY3JlYXRlZCByZXF1ZXN0LCBvciByZS1pbml0aWFsaXplcyBhbiBleGlzdGluZyBvbmUuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBtZXRob2QgVGhlIEhUVFAgcmVxdWVzdCBtZXRob2QgdG8gdXNlLCBzdWNoIGFzIGBcIkdFVFwiYCwgYFwiUE9TVFwiYCwgYFwiUFVUXCJgLCBgXCJERUxFVEVcImAsXHJcbiAgICAgKiAgICAgICAgICAgICAgIGV0Yy4gSWdub3JlZCBmb3Igbm9uLUhUVFAoUykgVVJMcy5cclxuICAgICAqIEBwYXJhbSB1cmwgQSBzdHJpbmcgb3IgYW55IG90aGVyIG9iamVjdCB3aXRoIGEgc3RyaW5naWZpZXIg4oCUIGluY2x1ZGluZyBhIFVSTCBvYmplY3Qg4oCUXHJcbiAgICAgKiAgICAgICAgICAgIHRoYXQgcHJvdmlkZXMgdGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UgdG8gc2VuZCB0aGUgcmVxdWVzdCB0by5cclxuICAgICAqL1xyXG4gICAgb3BlbihtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcgfCBVUkwpOiB2b2lkO1xyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBvcGVuKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZyB8IFVSTCwgYXN5bmM6IGJvb2xlYW4sIHVzZXJuYW1lPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFzc3dvcmQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZDtcclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgb3BlbihtZXRob2Q6IHVua25vd24sIHVybDogdW5rbm93biwgYXN5bmM/OiB1bmtub3duLCB1c2VybmFtZT86IHVua25vd24sIHBhc3N3b3JkPzogdW5rbm93bik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX21ldGhvZCA9IG1ldGhvZDtcclxuICAgICAgICB0aGlzLl91cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5zZXRSZWFkeVN0YXRlKHRoaXMuT1BFTkVEKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFib3J0cyB0aGUgcmVxdWVzdCBpZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHNlbnQuIFdoZW4gYSByZXF1ZXN0IGlzIGFib3J0ZWQsIGl0cyBgcmVhZHlTdGF0ZWBcclxuICAgICAqIGlzIGNoYW5nZWQgdG8gYFhNTEh0dHBSZXF1ZXN0LlVOU0VOVGAgYW5kIHRoZSByZXF1ZXN0IHN0YXR1cyBjb2RlIGlzIHNldCB0byBgMGAuXHJcbiAgICAgKi9cclxuICAgIGFib3J0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3JlYWR5U3RhdGUgPSB0aGlzLlVOU0VOVDtcclxuICAgICAgICB0aGlzLl9zdGF0dXMgPSAwO1xyXG4gICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaChcImFib3J0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBhbGwgdGhlIHJlc3BvbnNlIGhlYWRlcnMsIHNlcGFyYXRlZCBieSBDUkxGLCBhcyBhIHN0cmluZywgb3IgcmV0dXJucyBgbnVsbGBcclxuICAgICAqIGlmIG5vIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBBbGwgdGhlIHJlc3BvbnNlIGhlYWRlcnMsIHNlcGFyYXRlZCBieSBDUkxGLCBhcyBhIHN0cmluZywgb3IgcmV0dXJucyBgbnVsbGBcclxuICAgICAqICAgICAgICAgIGlmIG5vIHJlc3BvbnNlIGhhcyBiZWVuIHJlY2VpdmVkLlxyXG4gICAgICovXHJcbiAgICBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVN0b3JhZ2UgPyBIdHRwSGVhZGVyc1V0aWwuc3RyaW5naWZ5KHRoaXMuX2hlYWRlcnMpIDogRU1QVFlfU1RSSU5HO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VuZHMgdGhlIHJlcXVlc3QgdG8gdGhlIHNlcnZlci5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGJvZHkgQSBib2R5IG9mIGRhdGEgdG8gYmUgc2VudCBpbiB0aGUgWEhSIHJlcXVlc3QuXHJcbiAgICAgKi9cclxuICAgIHNlbmQoYm9keT86IERvY3VtZW50IHwgWE1MSHR0cFJlcXVlc3RCb2R5SW5pdCB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+ID0gbmV3IEh0dHBSZXF1ZXN0PGFueT4odGhpcy5fbWV0aG9kIGFzIHN0cmluZywgdGhpcy5fdXJsIGFzIGFueSwgYm9keSk7XHJcbiAgICAgICAgY29uc3QgcmM6IFJvdXRlTW9ja0NvbmZpZyA9IHRoaXMuX3JvdXRlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IGh0dHBSZXNwb25zZU1vY2s6IEh0dHBSZXNwb25zZU1vY2sgPSAocmMubWV0aG9kQ29uZmlnIGFzIGFueSkuZGF0YShyZXF1ZXN0LCByYy5wYXJhbWV0ZXJzKTtcclxuICAgICAgICBsZXQgdGltZXI6IG51bWJlciA9IGh0dHBSZXNwb25zZU1vY2suZGVsYXkgfHwgMDtcclxuICAgICAgICBpZiAodGltZXIgPiBNQVhfVElNRVIpIHRpbWVyID0gTUFYX1RJTUVSO1xyXG4gICAgICAgIHRoaXMuX2xvYWRTdWJzY3JpcHRpb24gPSB0aGlzLmxvYWREYXRhKGh0dHBSZXNwb25zZU1vY2spLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YVN0b3JhZ2UoaHR0cFJlc3BvbnNlTW9jaywgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvcjogSHR0cE1vY2tFcnJvciB8IG51bGwgPSB0aGlzLl9kYXRhU3RvcmFnZS5odHRwUmVzcG9uc2UuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVhZHlTdGF0ZSh0aGlzLkhFQURFUlNfUkVDRUlWRUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikgcmV0dXJuIHRoaXMub25FcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZWFkeVN0YXRlKHRoaXMuTE9BRElORyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2U6IEh0dHBSZXNwb25zZU1vY2sgPSB0aGlzLl9kYXRhU3RvcmFnZS5odHRwUmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnM6IGFueSA9IHJlc3BvbnNlLmhlYWRlcnM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVycy5rZXlzKCkuZm9yRWFjaCgoa2V5OiBzdHJpbmcpPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KGtleSwgdGhpcy5faGVhZGVycy5nZXQoa2V5KSBhcyBhbnkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzID0gaGVhZGVycztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9wcm9ncmVzc2l2ZURvd25sb2FkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0dXNUZXh0IHx8IEVNUFRZX1NUUklORztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzIHx8IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9uTG9hZENvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9Qcm9ncmVzc2l2ZURvd25sb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9LCB0aW1lcik7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YVN0b3JhZ2UoaHR0cFJlc3BvbnNlTW9jayk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhbiBIVFRQIHJlcXVlc3QgaGVhZGVyLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaGVhZGVyIHdob3NlIHZhbHVlIGlzIHRvIGJlIHNldC5cclxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0IGFzIHRoZSBib2R5IG9mIHRoZSBoZWFkZXIuXHJcbiAgICAgKi9cclxuICAgIHNldFJlcXVlc3RIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faGVhZGVycyA9IHRoaXMuX2hlYWRlcnMuc2V0KG5hbWUsIHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlIFxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3Rvcihyb3V0ZUNvbmZpZzogUm91dGVNb2NrQ29uZmlnKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICBjb25zdCBtZXRob2RDb25maWc6IEh0dHBNZXRob2RNb2NrID0gcm91dGVDb25maWcubWV0aG9kQ29uZmlnO1xyXG4gICAgICAgIHRoaXMuX3JvdXRlQ29uZmlnID0gcm91dGVDb25maWc7XHJcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb3dubG9hZCA9IG1ldGhvZENvbmZpZy5wcm9ncmVzc2l2ZSB8fCBmYWxzZTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IG1ldGhvZENvbmZpZy5yZXNwb25zZVR5cGUgfHwgRU1QVFlfU1RSSU5HIGFzIGFueTtcclxuICAgICAgICB0aGlzLl9oZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGUgXHJcbiAgICAgKiBJbnRlcm5hbGx5IHVzZWQgYnkgdGhlIGZyYW1ld29yayB0byBkZWxldGUgYSBgRGVsZWdhdGVYaHJgIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yb3V0ZUNvbmZpZyA9IG51bGwgYXMgYW55O1xyXG4gICAgICAgIHRoaXMuX2hlYWRlcnMgPSBudWxsIGFzIGFueTtcclxuICAgICAgICB0aGlzLl9kYXRhU3RvcmFnZSA9IG51bGwgYXMgYW55O1xyXG4gICAgICAgIGlmICh0aGlzLl9sb2FkU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZFN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGUgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZG9Qcm9ncmVzc2l2ZURvd25sb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRvdGFsOiBudW1iZXIgPSB0aGlzLl9kYXRhU3RvcmFnZS50b3RhbDtcclxuICAgICAgICBpZiAodG90YWwgPD0gMjAwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIltBbmd1bGFyIFRvb2xib3hdOiBCb2R5IGNvbnRlbnQgaXMgdG9vIHNtYWxsIGZvciBlbXVsYXRpbmcgcHJvZ3Jlc3NpdmUgZG93bmxvYWQhIE1pbmltdW0gc2l6ZSBpcyAyMDAgb2N0ZXRzLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMub25Mb2FkQ29tcGxldGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogYW1lbGlvcmF0ZSB0aGUgZm9sbG93aW5nIHByb2Nlc3M6XHJcbiAgICAgICAgY29uc3Qgc2VsZjogRGVsZWdhdGVYaHIgPSB0aGlzO1xyXG4gICAgICAgIGNvbnN0IGNodW5ja1NpemU6IG51bWJlciA9IE1hdGguZmxvb3IodG90YWwgLyAxMCk7XHJcbiAgICAgICAgbGV0IGN1cnNvcjogbnVtYmVyID0gMDtcclxuICAgICAgICB0aGlzLl9zdGF0dXNUZXh0ID0gXCJQYXJ0aWFsIENvbnRlbnRcIjtcclxuICAgICAgICB0aGlzLl9zdGF0dXMgPSBIdHRwU3RhdHVzQ29kZS5QYXJ0aWFsQ29udGVudDtcclxuICAgICAgICBjb25zdCBpZHggPSBzZXRJbnRlcnZhbCgoKT0+IHtcclxuICAgICAgICAgICAgY3Vyc29yICs9IGNodW5ja1NpemU7XHJcbiAgICAgICAgICAgIGlmIChjdXJzb3IgPiB0b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgY3Vyc29yID0gdG90YWw7XHJcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGlkeCk7XHJcbiAgICAgICAgICAgICAgICBzZWxmLm9uTG9hZENvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU3RvcmFnZS5sb2FkZWQgPSBjdXJzb3I7XHJcbiAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoUHJvZ3Jlc3NFdmVudCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgb25Mb2FkQ29tcGxldGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGF0YVN0b3JhZ2UubG9hZGVkID0gdGhpcy5fZGF0YVN0b3JhZ2UudG90YWw7XHJcbiAgICAgICAgdGhpcy5zZXRSZWFkeVN0YXRlKHRoaXMuRE9ORSk7XHJcbiAgICAgICAgdGhpcy5kaXNwYXRjaFByb2dyZXNzRXZlbnQoXCJsb2FkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBvbkVycm9yKGVycm9yOiBIdHRwTW9ja0Vycm9yKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc3RhdHVzID0gZXJyb3Iuc3RhdHVzO1xyXG4gICAgICAgIHRoaXMuX3N0YXR1c1RleHQgPSBlcnJvci5zdGF0dXNUZXh0O1xyXG4gICAgICAgIHRoaXMuc2V0UmVhZHlTdGF0ZSh0aGlzLkRPTkUpO1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KFwiZXJyb3JcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV2ZW50RGlzcGF0Y2godHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZXZlbnQ6IEV2ZW50ID0gbmV3IEV2ZW50KHR5cGUpO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3RhcmdldCcsIEVWVF9QUk9QU19DT05GSUcpO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ2N1cnJlbnRUYXJnZXQnLCBFVlRfUFJPUFNfQ09ORklHKTtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGUgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZGlzcGF0Y2hQcm9ncmVzc0V2ZW50KHR5cGU6IHN0cmluZyA9IFwicHJvZ3Jlc3NcIik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGQ6IGFueSA9IHRoaXMuX2RhdGFTdG9yYWdlO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50OiBQcm9ncmVzc0V2ZW50TW9jayA9IG5ldyBQcm9ncmVzc0V2ZW50TW9jayh0eXBlKTtcclxuICAgICAgICBldmVudC5sb2FkZWQgPSBkLmxvYWRlZDtcclxuICAgICAgICBldmVudC50b3RhbCA9IGQudG90YWw7XHJcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwcml2YXRlIFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldFJlYWR5U3RhdGUoc3RhdGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3JlYWR5U3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICBjb25zdCBldmVudDogYW55ID0gdGhpcy5vbnJlYWR5c3RhdGVjaGFuZ2U7XHJcbiAgICAgICAgaWYgKGV2ZW50KSBldmVudC5jYWxsKHRoaXMsIFJFQURZX1NUQVRFX0NIQU5HRV9FVkVOVCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcHJpdmF0ZSBcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsb2FkRGF0YShodHRwUmVzcG9uc2VNb2NrOiBIdHRwUmVzcG9uc2VNb2NrKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZUJvZHk6IGFueSB8IE9ic2VydmFibGU8YW55PiA9IGh0dHBSZXNwb25zZU1vY2suYm9keTtcclxuICAgICAgICByZXR1cm4gKHJlc3BvbnNlQm9keSBpbnN0YW5jZW9mIE9ic2VydmFibGUpID8gcmVzcG9uc2VCb2R5IDogb2YocmVzcG9uc2VCb2R5KTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQHByaXZhdGUgXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0RGF0YVN0b3JhZ2UocmVzcG9uc2VNb2NrOiBIdHRwUmVzcG9uc2VNb2NrLCBkYXRhOiBhbnkgPSBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGF0YVN0b3JhZ2UgPSAgRGF0YVN0b3JhZ2VCdWlsZGVyLmJ1aWxkRGF0YVN0b3JhZ2UocmVzcG9uc2VNb2NrLCBkYXRhKTtcclxuICAgIH1cclxufSJdfQ==
@@ -14,9 +14,9 @@ import * as i0 from "@angular/core";
14
14
  */
15
15
  const LAYERS_VERSION_CONFIG = {
16
16
  major: 0,
17
- minor: 10,
18
- patch: 2,
19
- buildTimestamp: 1721804425756,
17
+ minor: 11,
18
+ patch: 0,
19
+ buildTimestamp: 1721903923427,
20
20
  metadata: "beta"
21
21
  };
22
22
  /**
@@ -35,4 +35,4 @@ export class AngularToolboxVersionService extends AbstractVersionManager {
35
35
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: AngularToolboxVersionService, decorators: [{
36
36
  type: Injectable
37
37
  }], ctorParameters: () => [] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10b29sYm94LXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL21vZGVsL3NlcnZpY2UvdmVyc2lvbi9hbmd1bGFyLXRvb2xib3gtdmVyc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd2RDs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFrQjtJQUMzQyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxFQUFFO0lBQ1QsS0FBSyxFQUFFLENBQUM7SUFDUixjQUFjLEVBQUUsYUFBYTtJQUM3QixRQUFRLEVBQUUsTUFBTTtDQUNqQixDQUFDO0FBRUY7O0dBRUc7QUFFSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsc0JBQXNCO0lBRXRFOztPQUVHO0lBQ0g7UUFDRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMvQixDQUFDOzhHQVBVLDRCQUE0QjtrSEFBNUIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFZlcnNpb25NYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBWZXJzaW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vYnVzaW5lc3MnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBBbmd1bGFyIFRvb2xib3ggbGlicmFyeS5cbiAqL1xuY29uc3QgTEFZRVJTX1ZFUlNJT05fQ09ORklHOiBWZXJzaW9uQ29uZmlnID0ge1xuICBtYWpvcjogMCxcbiAgbWlub3I6IDEwLFxuICBwYXRjaDogMixcbiAgYnVpbGRUaW1lc3RhbXA6IDE3MjE4MDQ0MjU3NTYsXG4gIG1ldGFkYXRhOiBcImJldGFcIlxufTtcblxuLyoqXG4gKiBUaGUgcHVibGljIHNlcnZpY2UgdGhhdCBleHBvc2VzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIEFuZ3VsYXIgVG9vbGJveCBsaWJyYXJ5LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQW5ndWxhclRvb2xib3hWZXJzaW9uU2VydmljZSBleHRlbmRzIEFic3RyYWN0VmVyc2lvbk1hbmFnZXIge1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoTEFZRVJTX1ZFUlNJT05fQ09ORklHKTtcbiAgfVxufVxuIl19
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10b29sYm94LXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdG9vbGJveC9zcmMvbGliL21vZGVsL3NlcnZpY2UvdmVyc2lvbi9hbmd1bGFyLXRvb2xib3gtdmVyc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd2RDs7O0dBR0c7QUFDSCxNQUFNLHFCQUFxQixHQUFrQjtJQUMzQyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxFQUFFO0lBQ1QsS0FBSyxFQUFFLENBQUM7SUFDUixjQUFjLEVBQUUsYUFBYTtJQUM3QixRQUFRLEVBQUUsTUFBTTtDQUNqQixDQUFDO0FBRUY7O0dBRUc7QUFFSCxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsc0JBQXNCO0lBRXRFOztPQUVHO0lBQ0g7UUFDRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMvQixDQUFDOzhHQVBVLDRCQUE0QjtrSEFBNUIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IFBhc2NhbCBFQ0hFTUFOTi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpblxuICogdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Bhc2NhbGVjaGVtYW5uLmNvbS9hbmd1bGFyLXRvb2xib3gvcmVzb3VyY2VzL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdFZlcnNpb25NYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBWZXJzaW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vYnVzaW5lc3MnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBBbmd1bGFyIFRvb2xib3ggbGlicmFyeS5cbiAqL1xuY29uc3QgTEFZRVJTX1ZFUlNJT05fQ09ORklHOiBWZXJzaW9uQ29uZmlnID0ge1xuICBtYWpvcjogMCxcbiAgbWlub3I6IDExLFxuICBwYXRjaDogMCxcbiAgYnVpbGRUaW1lc3RhbXA6IDE3MjE5MDM5MjM0MjcsXG4gIG1ldGFkYXRhOiBcImJldGFcIlxufTtcblxuLyoqXG4gKiBUaGUgcHVibGljIHNlcnZpY2UgdGhhdCBleHBvc2VzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIEFuZ3VsYXIgVG9vbGJveCBsaWJyYXJ5LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQW5ndWxhclRvb2xib3hWZXJzaW9uU2VydmljZSBleHRlbmRzIEFic3RyYWN0VmVyc2lvbk1hbmFnZXIge1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoTEFZRVJTX1ZFUlNJT05fQ09ORklHKTtcbiAgfVxufVxuIl19
@@ -542,9 +542,9 @@ class AbstractVersionManager {
542
542
  */
543
543
  const LAYERS_VERSION_CONFIG = {
544
544
  major: 0,
545
- minor: 10,
546
- patch: 2,
547
- buildTimestamp: 1721804425756,
545
+ minor: 11,
546
+ patch: 0,
547
+ buildTimestamp: 1721903923427,
548
548
  metadata: "beta"
549
549
  };
550
550
  /**
@@ -3640,29 +3640,35 @@ class DelegateXhr extends XhrBase {
3640
3640
  let timer = httpResponseMock.delay || 0;
3641
3641
  if (timer > MAX_TIMER)
3642
3642
  timer = MAX_TIMER;
3643
- this._loadSubscription = this.loadData(httpResponseMock).subscribe((data) => {
3644
- this._dataStorage = DataStorageBuilder.buildDataStorage(httpResponseMock, data);
3645
- const error = this._dataStorage.httpResponse.error;
3646
- setTimeout(() => {
3647
- this.setReadyState(this.HEADERS_RECEIVED);
3648
- if (error)
3649
- return this.onError(error);
3650
- this.setReadyState(this.LOADING);
3651
- const response = this._dataStorage.httpResponse;
3652
- let headers = response.headers;
3653
- if (headers) {
3654
- this._headers.keys().forEach((key) => {
3655
- headers = headers.set(key, this._headers.get(key));
3656
- });
3657
- this._headers = headers;
3658
- }
3659
- if (!this._progressiveDownload) {
3660
- this._statusText = response.statusText || EMPTY_STRING;
3661
- this._status = response.status || 0;
3662
- return this.onLoadComplete();
3663
- }
3664
- this.doProgressiveDownload();
3665
- }, timer);
3643
+ this._loadSubscription = this.loadData(httpResponseMock).subscribe({
3644
+ next: (data) => {
3645
+ this.setDataStorage(httpResponseMock, data);
3646
+ const error = this._dataStorage.httpResponse.error;
3647
+ setTimeout(() => {
3648
+ this.setReadyState(this.HEADERS_RECEIVED);
3649
+ if (error)
3650
+ return this.onError(error);
3651
+ this.setReadyState(this.LOADING);
3652
+ const response = this._dataStorage.httpResponse;
3653
+ let headers = response.headers;
3654
+ if (headers) {
3655
+ this._headers.keys().forEach((key) => {
3656
+ headers = headers.set(key, this._headers.get(key));
3657
+ });
3658
+ this._headers = headers;
3659
+ }
3660
+ if (!this._progressiveDownload) {
3661
+ this._statusText = response.statusText || EMPTY_STRING;
3662
+ this._status = response.status || 0;
3663
+ return this.onLoadComplete();
3664
+ }
3665
+ this.doProgressiveDownload();
3666
+ }, timer);
3667
+ },
3668
+ error: (err) => {
3669
+ this.setDataStorage(httpResponseMock);
3670
+ this.onError(err);
3671
+ }
3666
3672
  });
3667
3673
  }
3668
3674
  /**
@@ -3727,7 +3733,7 @@ class DelegateXhr extends XhrBase {
3727
3733
  const methodConfig = routeConfig.methodConfig;
3728
3734
  this._routeConfig = routeConfig;
3729
3735
  this._progressiveDownload = methodConfig.progressive || false;
3730
- this.responseType = methodConfig.responseType || "";
3736
+ this.responseType = methodConfig.responseType || EMPTY_STRING;
3731
3737
  this._headers = new HttpHeaders();
3732
3738
  }
3733
3739
  /**
@@ -3823,6 +3829,12 @@ class DelegateXhr extends XhrBase {
3823
3829
  const responseBody = httpResponseMock.body;
3824
3830
  return (responseBody instanceof Observable) ? responseBody : of(responseBody);
3825
3831
  }
3832
+ /**
3833
+ * @private
3834
+ */
3835
+ setDataStorage(responseMock, data = null) {
3836
+ this._dataStorage = DataStorageBuilder.buildDataStorage(responseMock, data);
3837
+ }
3826
3838
  }
3827
3839
 
3828
3840
  /**