@reveldigital/player-client 2.1.0 → 2.2.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.
@@ -32,21 +32,13 @@ export class DataTableRef {
32
32
  this.rowCreated$ = new Subject();
33
33
  /** Emits when a row is removed. */
34
34
  this.rowDeleted$ = new Subject();
35
- /** @ignore */
36
- this._onRowUpdated = (change) => this.rowUpdated$.next(change);
37
- /** @ignore */
38
- this._onRowCreated = (change) => this.rowCreated$.next(change);
39
- /** @ignore */
40
- this._onRowDeleted = (change) => this.rowDeleted$.next(change);
41
35
  const lib = window.gadgets?.['reveldigital.datatable'];
42
36
  if (!lib || typeof lib.create !== 'function') {
43
37
  throw new Error('RevelDigital DataTable library is not available. ' +
44
38
  'Ensure the datatable feature is enabled for this gadget.');
45
39
  }
46
40
  this._instance = lib.create(tableId, options);
47
- this._instance.on('rowUpdated', this._onRowUpdated);
48
- this._instance.on('rowCreated', this._onRowCreated);
49
- this._instance.on('rowDeleted', this._onRowDeleted);
41
+ this._wireEvents();
50
42
  }
51
43
  /**
52
44
  * Fetches rows from the data table.
@@ -119,5 +111,86 @@ export class DataTableRef {
119
111
  this.rowCreated$.complete();
120
112
  this.rowDeleted$.complete();
121
113
  }
114
+ /** @ignore */
115
+ static _fromInstance(instance) {
116
+ const ref = Object.create(DataTableRef.prototype);
117
+ ref.rowUpdated$ = new Subject();
118
+ ref.rowCreated$ = new Subject();
119
+ ref.rowDeleted$ = new Subject();
120
+ ref._instance = instance;
121
+ ref._wireEvents();
122
+ return ref;
123
+ }
124
+ /** @ignore */
125
+ _wireEvents() {
126
+ this._onRowUpdated = (change) => this.rowUpdated$.next(change);
127
+ this._onRowCreated = (change) => this.rowCreated$.next(change);
128
+ this._onRowDeleted = (change) => this.rowDeleted$.next(change);
129
+ this._instance.on('rowUpdated', this._onRowUpdated);
130
+ this._instance.on('rowCreated', this._onRowCreated);
131
+ this._instance.on('rowDeleted', this._onRowDeleted);
132
+ }
133
+ }
134
+ /**
135
+ * Wrapper around a data table created from a gadget preference value.
136
+ *
137
+ * Automatically configures filter and sort settings from the preference,
138
+ * and provides a `getFilteredRows()` convenience method that applies them.
139
+ *
140
+ * ```typescript
141
+ * const cfg = this.client.createDataTableFromPref(prefs.getString('rdDataTable'));
142
+ *
143
+ * // Fetch rows with auto-wired filter + sort from the preference
144
+ * const result = await cfg.getFilteredRows();
145
+ *
146
+ * // Access the underlying DataTableRef for schema, events, etc.
147
+ * cfg.dataTable.rowUpdated$.subscribe(change => console.log(change));
148
+ *
149
+ * // Cleanup
150
+ * cfg.dispose();
151
+ * ```
152
+ */
153
+ export class DataTablePrefRef {
154
+ /**
155
+ * Creates a new DataTablePrefRef from a gadget preference JSON string.
156
+ *
157
+ * @param prefValue - The raw gadget preference string (JSON)
158
+ * @param options - Optional configuration overrides
159
+ * @throws Error if the global datatable library is not loaded
160
+ */
161
+ constructor(prefValue, options) {
162
+ const lib = window.gadgets?.['reveldigital.datatable'];
163
+ if (!lib || typeof lib.createFromPref !== 'function') {
164
+ throw new Error('RevelDigital DataTable library is not available. ' +
165
+ 'Ensure the datatable feature is enabled for this gadget.');
166
+ }
167
+ this._config = lib.createFromPref(prefValue, options);
168
+ this.pref = this._config.pref;
169
+ this.dataTable = DataTableRef._fromInstance(this._config.dt);
170
+ }
171
+ /**
172
+ * Fetches rows with the filter and sort settings from the preference automatically applied.
173
+ * Additional query parameters can override or supplement the preference settings.
174
+ *
175
+ * @param params - Optional additional query parameters
176
+ * @returns Promise resolving to the result set
177
+ *
178
+ * ```typescript
179
+ * // Use preference defaults
180
+ * const result = await cfg.getFilteredRows();
181
+ *
182
+ * // Override page size
183
+ * const page = await cfg.getFilteredRows({ pageSize: 10 });
184
+ * ```
185
+ */
186
+ getFilteredRows(params) {
187
+ return this._config.getFilteredRows(params);
188
+ }
189
+ /**
190
+ * Releases all resources held by the underlying DataTableRef.
191
+ */
192
+ dispose() {
193
+ this.dataTable.dispose();
194
+ }
122
195
  }
123
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvZGF0YXRhYmxlLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVS9COzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBcUJ2Qjs7Ozs7O09BTUc7SUFDSCxZQUFZLE9BQWUsRUFBRSxPQUEyQjtRQTFCeEQsOENBQThDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFFMUQscUNBQXFDO1FBQzlCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFFMUQsbUNBQW1DO1FBQzVCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFLMUQsY0FBYztRQUNOLGtCQUFhLEdBQUcsQ0FBQyxNQUE2QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RixjQUFjO1FBQ04sa0JBQWEsR0FBRyxDQUFDLE1BQTZCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pGLGNBQWM7UUFDTixrQkFBYSxHQUFHLENBQUMsTUFBNkIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFXdkYsTUFBTSxHQUFHLEdBQUksTUFBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FDYixtREFBbUQ7Z0JBQ25ELDBEQUEwRCxDQUMzRCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ksT0FBTyxDQUFDLE1BQThCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxTQUFTO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxNQUE4QjtRQUNsRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxVQUFtQjtRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU87UUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIElEYXRhVGFibGVDaGFuZ2VFdmVudCxcbiAgSURhdGFUYWJsZUNvbHVtbixcbiAgSURhdGFUYWJsZU9wdGlvbnMsXG4gIElEYXRhVGFibGVRdWVyeVBhcmFtcyxcbiAgSURhdGFUYWJsZVJlc3VsdCxcbiAgSURhdGFUYWJsZVNjaGVtYVxufSBmcm9tICcuL2ludGVyZmFjZXMvZGF0YXRhYmxlLmludGVyZmFjZSc7XG5cbi8qKlxuICogQW5ndWxhci1mcmllbmRseSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2xvYmFsIGBnYWRnZXRzLnJldmVsZGlnaXRhbC5kYXRhdGFibGVgIGxpYnJhcnkuXG4gKlxuICogUHJvdmlkZXMgdHlwZWQgUHJvbWlzZS1iYXNlZCBtZXRob2RzIGFuZCBSeEpTIE9ic2VydmFibGVzIGZvciByZWFsLXRpbWUgZXZlbnRzLlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGR0ID0gdGhpcy5jbGllbnQuY3JlYXRlRGF0YVRhYmxlKCd0YmxfbWVudV9pdGVtcycpO1xuICpcbiAqIC8vIEZldGNoIHJvd3NcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGR0LmdldFJvd3MoeyBzb3J0OiAncHJpY2UnLCBzb3J0RGlyOiAnYXNjJyB9KTtcbiAqXG4gKiAvLyBSZWFsLXRpbWUgdXBkYXRlc1xuICogZHQucm93VXBkYXRlZCQuc3Vic2NyaWJlKGNoYW5nZSA9PiBjb25zb2xlLmxvZygnVXBkYXRlZDonLCBjaGFuZ2UpKTtcbiAqXG4gKiAvLyBDbGVhbnVwXG4gKiBkdC5kaXNwb3NlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFUYWJsZVJlZiB7XG5cbiAgLyoqIEVtaXRzIHdoZW4gYW4gZXhpc3Rpbmcgcm93IGlzIG1vZGlmaWVkLiAqL1xuICBwdWJsaWMgcm93VXBkYXRlZCQgPSBuZXcgU3ViamVjdDxJRGF0YVRhYmxlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gYSBuZXcgcm93IGlzIGFkZGVkLiAqL1xuICBwdWJsaWMgcm93Q3JlYXRlZCQgPSBuZXcgU3ViamVjdDxJRGF0YVRhYmxlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gYSByb3cgaXMgcmVtb3ZlZC4gKi9cbiAgcHVibGljIHJvd0RlbGV0ZWQkID0gbmV3IFN1YmplY3Q8SURhdGFUYWJsZUNoYW5nZUV2ZW50PigpO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX2luc3RhbmNlOiBhbnk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb25Sb3dVcGRhdGVkID0gKGNoYW5nZTogSURhdGFUYWJsZUNoYW5nZUV2ZW50KSA9PiB0aGlzLnJvd1VwZGF0ZWQkLm5leHQoY2hhbmdlKTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb25Sb3dDcmVhdGVkID0gKGNoYW5nZTogSURhdGFUYWJsZUNoYW5nZUV2ZW50KSA9PiB0aGlzLnJvd0NyZWF0ZWQkLm5leHQoY2hhbmdlKTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb25Sb3dEZWxldGVkID0gKGNoYW5nZTogSURhdGFUYWJsZUNoYW5nZUV2ZW50KSA9PiB0aGlzLnJvd0RlbGV0ZWQkLm5leHQoY2hhbmdlKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBEYXRhVGFibGVSZWYuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZUlkIC0gVGhlIGRhdGEgdGFibGUgSUQgKGUuZy4gJ3RibF9tZW51X2l0ZW1zJylcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG92ZXJyaWRlc1xuICAgKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBnbG9iYWwgZGF0YXRhYmxlIGxpYnJhcnkgaXMgbm90IGxvYWRlZFxuICAgKi9cbiAgY29uc3RydWN0b3IodGFibGVJZDogc3RyaW5nLCBvcHRpb25zPzogSURhdGFUYWJsZU9wdGlvbnMpIHtcblxuICAgIGNvbnN0IGxpYiA9ICh3aW5kb3cgYXMgYW55KS5nYWRnZXRzPy5bJ3JldmVsZGlnaXRhbC5kYXRhdGFibGUnXTtcblxuICAgIGlmICghbGliIHx8IHR5cGVvZiBsaWIuY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdSZXZlbERpZ2l0YWwgRGF0YVRhYmxlIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4gJyArXG4gICAgICAgICdFbnN1cmUgdGhlIGRhdGF0YWJsZSBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIHRoaXMgZ2FkZ2V0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5zdGFuY2UgPSBsaWIuY3JlYXRlKHRhYmxlSWQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy5faW5zdGFuY2Uub24oJ3Jvd1VwZGF0ZWQnLCB0aGlzLl9vblJvd1VwZGF0ZWQpO1xuICAgIHRoaXMuX2luc3RhbmNlLm9uKCdyb3dDcmVhdGVkJywgdGhpcy5fb25Sb3dDcmVhdGVkKTtcbiAgICB0aGlzLl9pbnN0YW5jZS5vbigncm93RGVsZXRlZCcsIHRoaXMuX29uUm93RGVsZXRlZCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyByb3dzIGZyb20gdGhlIGRhdGEgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzIChmaWx0ZXIsIHNvcnQsIHBhZ2luYXRpb24pXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXN1bHQgc2V0XG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZHQuZ2V0Um93cyh7XG4gICAqICAgZmlsdGVyOiB7IGNhdGVnb3J5OiAnRW50cmVlJywgcHJpY2U6IHsgb3A6ICdsdGUnLCB2YWx1ZTogMjUgfSB9LFxuICAgKiAgIHNvcnQ6ICdpdGVtTmFtZScsXG4gICAqICAgc29ydERpcjogJ2FzYycsXG4gICAqICAgcGFnZVNpemU6IDIwXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBnZXRSb3dzKHBhcmFtcz86IElEYXRhVGFibGVRdWVyeVBhcmFtcyk6IFByb21pc2U8SURhdGFUYWJsZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5nZXRSb3dzKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgdGFibGUgc2NoZW1hIChjb2x1bW4gZGVmaW5pdGlvbnMgYW5kIG1ldGFkYXRhKS5cbiAgICpcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRhYmxlIHNjaGVtYVxuICAgKi9cbiAgcHVibGljIGdldFNjaGVtYSgpOiBQcm9taXNlPElEYXRhVGFibGVTY2hlbWE+IHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuZ2V0U2NoZW1hKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB2aXNpYmxlIChub24taGlkZGVuKSBjb2x1bW5zIGZyb20gdGhlIHRhYmxlIHNjaGVtYS5cbiAgICpcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYW4gYXJyYXkgb2YgdmlzaWJsZSBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICovXG4gIHB1YmxpYyBnZXRWaXNpYmxlQ29sdW1ucygpOiBQcm9taXNlPElEYXRhVGFibGVDb2x1bW5bXT4ge1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5nZXRWaXNpYmxlQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgcm93cyB3aXRoIGhpZGRlbiBjb2x1bW4gZGF0YSBzdHJpcHBlZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIE9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgKHNhbWUgYXMgZ2V0Um93cylcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJlc3VsdCBzZXQgd2l0aCBoaWRkZW4gZmllbGRzIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyBnZXRWaXNpYmxlUm93cyhwYXJhbXM/OiBJRGF0YVRhYmxlUXVlcnlQYXJhbXMpOiBQcm9taXNlPElEYXRhVGFibGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuZ2V0VmlzaWJsZVJvd3MocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgcG9sbGluZyBmb3IgY2hhbmdlcyBhdCB0aGUgZ2l2ZW4gaW50ZXJ2YWwuXG4gICAqIEVtaXRzIG9uIGByb3dVcGRhdGVkJGAgd2hlbiBuZXcgZGF0YSBpcyBkZXRlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIGludGVydmFsTXMgLSBQb2xsaW5nIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyAoZGVmYXVsdCAzMDAwMClcbiAgICovXG4gIHB1YmxpYyBzdGFydFBvbGxpbmcoaW50ZXJ2YWxNcz86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLnN0YXJ0UG9sbGluZyhpbnRlcnZhbE1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyBwb2xsaW5nIGZvciBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIHN0b3BQb2xsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX2luc3RhbmNlLnN0b3BQb2xsaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZXMgYWxsIHJlc291cmNlczogc3RvcHMgcG9sbGluZywgY2xvc2VzIHRoZSByZWFsLXRpbWUgY29ubmVjdGlvbixcbiAgICogcmVtb3ZlcyBldmVudCBsaXN0ZW5lcnMsIGFuZCBjb21wbGV0ZXMgYWxsIFJ4SlMgb2JzZXJ2YWJsZXMuXG4gICAqL1xuICBwdWJsaWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5vZmYoJ3Jvd1VwZGF0ZWQnLCB0aGlzLl9vblJvd1VwZGF0ZWQpO1xuICAgIHRoaXMuX2luc3RhbmNlLm9mZigncm93Q3JlYXRlZCcsIHRoaXMuX29uUm93Q3JlYXRlZCk7XG4gICAgdGhpcy5faW5zdGFuY2Uub2ZmKCdyb3dEZWxldGVkJywgdGhpcy5fb25Sb3dEZWxldGVkKTtcblxuICAgIHRoaXMuX2luc3RhbmNlLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMucm93VXBkYXRlZCQuY29tcGxldGUoKTtcbiAgICB0aGlzLnJvd0NyZWF0ZWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5yb3dEZWxldGVkJC5jb21wbGV0ZSgpO1xuICB9XG59XG4iXX0=
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvZGF0YXRhYmxlLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBVy9COzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBcUJ2Qjs7Ozs7O09BTUc7SUFDSCxZQUFZLE9BQWUsRUFBRSxPQUEyQjtRQTFCeEQsOENBQThDO1FBQ3ZDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFFMUQscUNBQXFDO1FBQzlCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFFMUQsbUNBQW1DO1FBQzVCLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFxQnhELE1BQU0sR0FBRyxHQUFJLE1BQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxLQUFLLENBQ2IsbURBQW1EO2dCQUNuRCwwREFBMEQsQ0FDM0QsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxPQUFPLENBQUMsTUFBOEI7UUFDM0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxpQkFBaUI7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksY0FBYyxDQUFDLE1BQThCO1FBQ2xELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksWUFBWSxDQUFDLFVBQW1CO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNJLFdBQVc7UUFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWM7SUFDZCxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQWE7UUFDaEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFpQixDQUFDO1FBQ2xFLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXlCLENBQUM7UUFDdkQsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBeUIsQ0FBQztRQUN2RCxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO1FBQ3ZELEdBQUcsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxjQUFjO0lBQ04sV0FBVztRQUNqQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsTUFBNkIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLE1BQTZCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxNQUE2QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV0RixJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RCxDQUFDO0NBQ0Y7QUFHRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQVczQjs7Ozs7O09BTUc7SUFDSCxZQUFZLFNBQWlCLEVBQUUsT0FBMkI7UUFFeEQsTUFBTSxHQUFHLEdBQUksTUFBYyxDQUFDLE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsQ0FBQyxjQUFjLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDckQsTUFBTSxJQUFJLEtBQUssQ0FDYixtREFBbUQ7Z0JBQ25ELDBEQUEwRCxDQUMzRCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSSxlQUFlLENBQUMsTUFBOEI7UUFDbkQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQsXG4gIElEYXRhVGFibGVDb2x1bW4sXG4gIElEYXRhVGFibGVPcHRpb25zLFxuICBJRGF0YVRhYmxlUHJlZixcbiAgSURhdGFUYWJsZVF1ZXJ5UGFyYW1zLFxuICBJRGF0YVRhYmxlUmVzdWx0LFxuICBJRGF0YVRhYmxlU2NoZW1hXG59IGZyb20gJy4vaW50ZXJmYWNlcy9kYXRhdGFibGUuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBBbmd1bGFyLWZyaWVuZGx5IHdyYXBwZXIgYXJvdW5kIHRoZSBnbG9iYWwgYGdhZGdldHMucmV2ZWxkaWdpdGFsLmRhdGF0YWJsZWAgbGlicmFyeS5cbiAqXG4gKiBQcm92aWRlcyB0eXBlZCBQcm9taXNlLWJhc2VkIG1ldGhvZHMgYW5kIFJ4SlMgT2JzZXJ2YWJsZXMgZm9yIHJlYWwtdGltZSBldmVudHMuXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZHQgPSB0aGlzLmNsaWVudC5jcmVhdGVEYXRhVGFibGUoJ3RibF9tZW51X2l0ZW1zJyk7XG4gKlxuICogLy8gRmV0Y2ggcm93c1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZHQuZ2V0Um93cyh7IHNvcnQ6ICdwcmljZScsIHNvcnREaXI6ICdhc2MnIH0pO1xuICpcbiAqIC8vIFJlYWwtdGltZSB1cGRhdGVzXG4gKiBkdC5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKCdVcGRhdGVkOicsIGNoYW5nZSkpO1xuICpcbiAqIC8vIENsZWFudXBcbiAqIGR0LmRpc3Bvc2UoKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlUmVmIHtcblxuICAvKiogRW1pdHMgd2hlbiBhbiBleGlzdGluZyByb3cgaXMgbW9kaWZpZWQuICovXG4gIHB1YmxpYyByb3dVcGRhdGVkJCA9IG5ldyBTdWJqZWN0PElEYXRhVGFibGVDaGFuZ2VFdmVudD4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBhIG5ldyByb3cgaXMgYWRkZWQuICovXG4gIHB1YmxpYyByb3dDcmVhdGVkJCA9IG5ldyBTdWJqZWN0PElEYXRhVGFibGVDaGFuZ2VFdmVudD4oKTtcblxuICAvKiogRW1pdHMgd2hlbiBhIHJvdyBpcyByZW1vdmVkLiAqL1xuICBwdWJsaWMgcm93RGVsZXRlZCQgPSBuZXcgU3ViamVjdDxJRGF0YVRhYmxlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfaW5zdGFuY2U6IGFueTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9vblJvd1VwZGF0ZWQhOiAoY2hhbmdlOiBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQpID0+IHZvaWQ7XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgX29uUm93Q3JlYXRlZCE6IChjaGFuZ2U6IElEYXRhVGFibGVDaGFuZ2VFdmVudCkgPT4gdm9pZDtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfb25Sb3dEZWxldGVkITogKGNoYW5nZTogSURhdGFUYWJsZUNoYW5nZUV2ZW50KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IERhdGFUYWJsZVJlZi5cbiAgICpcbiAgICogQHBhcmFtIHRhYmxlSWQgLSBUaGUgZGF0YSB0YWJsZSBJRCAoZS5nLiAndGJsX21lbnVfaXRlbXMnKVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0YWJsZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBJRGF0YVRhYmxlT3B0aW9ucykge1xuXG4gICAgY29uc3QgbGliID0gKHdpbmRvdyBhcyBhbnkpLmdhZGdldHM/LlsncmV2ZWxkaWdpdGFsLmRhdGF0YWJsZSddO1xuXG4gICAgaWYgKCFsaWIgfHwgdHlwZW9mIGxpYi5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JldmVsRGlnaXRhbCBEYXRhVGFibGUgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlLiAnICtcbiAgICAgICAgJ0Vuc3VyZSB0aGUgZGF0YXRhYmxlIGZlYXR1cmUgaXMgZW5hYmxlZCBmb3IgdGhpcyBnYWRnZXQuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnN0YW5jZSA9IGxpYi5jcmVhdGUodGFibGVJZCwgb3B0aW9ucyk7XG4gICAgdGhpcy5fd2lyZUV2ZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgcm93cyBmcm9tIHRoZSBkYXRhIHRhYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gT3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyAoZmlsdGVyLCBzb3J0LCBwYWdpbmF0aW9uKVxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmVzdWx0IHNldFxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGR0LmdldFJvd3Moe1xuICAgKiAgIGZpbHRlcjogeyBjYXRlZ29yeTogJ0VudHJlZScsIHByaWNlOiB7IG9wOiAnbHRlJywgdmFsdWU6IDI1IH0gfSxcbiAgICogICBzb3J0OiAnaXRlbU5hbWUnLFxuICAgKiAgIHNvcnREaXI6ICdhc2MnLFxuICAgKiAgIHBhZ2VTaXplOiAyMFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgZ2V0Um93cyhwYXJhbXM/OiBJRGF0YVRhYmxlUXVlcnlQYXJhbXMpOiBQcm9taXNlPElEYXRhVGFibGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuZ2V0Um93cyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIHRhYmxlIHNjaGVtYSAoY29sdW1uIGRlZmluaXRpb25zIGFuZCBtZXRhZGF0YSkuXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB0YWJsZSBzY2hlbWFcbiAgICovXG4gIHB1YmxpYyBnZXRTY2hlbWEoKTogUHJvbWlzZTxJRGF0YVRhYmxlU2NoZW1hPiB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmdldFNjaGVtYSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdmlzaWJsZSAobm9uLWhpZGRlbikgY29sdW1ucyBmcm9tIHRoZSB0YWJsZSBzY2hlbWEuXG4gICAqXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5IG9mIHZpc2libGUgY29sdW1uIGRlZmluaXRpb25zXG4gICAqL1xuICBwdWJsaWMgZ2V0VmlzaWJsZUNvbHVtbnMoKTogUHJvbWlzZTxJRGF0YVRhYmxlQ29sdW1uW10+IHtcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2UuZ2V0VmlzaWJsZUNvbHVtbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHJvd3Mgd2l0aCBoaWRkZW4gY29sdW1uIGRhdGEgc3RyaXBwZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzIChzYW1lIGFzIGdldFJvd3MpXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXN1bHQgc2V0IHdpdGggaGlkZGVuIGZpZWxkcyByZW1vdmVkXG4gICAqL1xuICBwdWJsaWMgZ2V0VmlzaWJsZVJvd3MocGFyYW1zPzogSURhdGFUYWJsZVF1ZXJ5UGFyYW1zKTogUHJvbWlzZTxJRGF0YVRhYmxlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlLmdldFZpc2libGVSb3dzKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHBvbGxpbmcgZm9yIGNoYW5nZXMgYXQgdGhlIGdpdmVuIGludGVydmFsLlxuICAgKiBFbWl0cyBvbiBgcm93VXBkYXRlZCRgIHdoZW4gbmV3IGRhdGEgaXMgZGV0ZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBpbnRlcnZhbE1zIC0gUG9sbGluZyBpbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgKGRlZmF1bHQgMzAwMDApXG4gICAqL1xuICBwdWJsaWMgc3RhcnRQb2xsaW5nKGludGVydmFsTXM/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5zdGFydFBvbGxpbmcoaW50ZXJ2YWxNcyk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcHMgcG9sbGluZyBmb3IgY2hhbmdlcy5cbiAgICovXG4gIHB1YmxpYyBzdG9wUG9sbGluZygpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZS5zdG9wUG9sbGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGFsbCByZXNvdXJjZXM6IHN0b3BzIHBvbGxpbmcsIGNsb3NlcyB0aGUgcmVhbC10aW1lIGNvbm5lY3Rpb24sXG4gICAqIHJlbW92ZXMgZXZlbnQgbGlzdGVuZXJzLCBhbmQgY29tcGxldGVzIGFsbCBSeEpTIG9ic2VydmFibGVzLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faW5zdGFuY2Uub2ZmKCdyb3dVcGRhdGVkJywgdGhpcy5fb25Sb3dVcGRhdGVkKTtcbiAgICB0aGlzLl9pbnN0YW5jZS5vZmYoJ3Jvd0NyZWF0ZWQnLCB0aGlzLl9vblJvd0NyZWF0ZWQpO1xuICAgIHRoaXMuX2luc3RhbmNlLm9mZigncm93RGVsZXRlZCcsIHRoaXMuX29uUm93RGVsZXRlZCk7XG5cbiAgICB0aGlzLl9pbnN0YW5jZS5kaXNwb3NlKCk7XG5cbiAgICB0aGlzLnJvd1VwZGF0ZWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5yb3dDcmVhdGVkJC5jb21wbGV0ZSgpO1xuICAgIHRoaXMucm93RGVsZXRlZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHN0YXRpYyBfZnJvbUluc3RhbmNlKGluc3RhbmNlOiBhbnkpOiBEYXRhVGFibGVSZWYge1xuICAgIGNvbnN0IHJlZiA9IE9iamVjdC5jcmVhdGUoRGF0YVRhYmxlUmVmLnByb3RvdHlwZSkgYXMgRGF0YVRhYmxlUmVmO1xuICAgIHJlZi5yb3dVcGRhdGVkJCA9IG5ldyBTdWJqZWN0PElEYXRhVGFibGVDaGFuZ2VFdmVudD4oKTtcbiAgICByZWYucm93Q3JlYXRlZCQgPSBuZXcgU3ViamVjdDxJRGF0YVRhYmxlQ2hhbmdlRXZlbnQ+KCk7XG4gICAgcmVmLnJvd0RlbGV0ZWQkID0gbmV3IFN1YmplY3Q8SURhdGFUYWJsZUNoYW5nZUV2ZW50PigpO1xuICAgIHJlZi5faW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICByZWYuX3dpcmVFdmVudHMoKTtcbiAgICByZXR1cm4gcmVmO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBfd2lyZUV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vblJvd1VwZGF0ZWQgPSAoY2hhbmdlOiBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQpID0+IHRoaXMucm93VXBkYXRlZCQubmV4dChjaGFuZ2UpO1xuICAgIHRoaXMuX29uUm93Q3JlYXRlZCA9IChjaGFuZ2U6IElEYXRhVGFibGVDaGFuZ2VFdmVudCkgPT4gdGhpcy5yb3dDcmVhdGVkJC5uZXh0KGNoYW5nZSk7XG4gICAgdGhpcy5fb25Sb3dEZWxldGVkID0gKGNoYW5nZTogSURhdGFUYWJsZUNoYW5nZUV2ZW50KSA9PiB0aGlzLnJvd0RlbGV0ZWQkLm5leHQoY2hhbmdlKTtcblxuICAgIHRoaXMuX2luc3RhbmNlLm9uKCdyb3dVcGRhdGVkJywgdGhpcy5fb25Sb3dVcGRhdGVkKTtcbiAgICB0aGlzLl9pbnN0YW5jZS5vbigncm93Q3JlYXRlZCcsIHRoaXMuX29uUm93Q3JlYXRlZCk7XG4gICAgdGhpcy5faW5zdGFuY2Uub24oJ3Jvd0RlbGV0ZWQnLCB0aGlzLl9vblJvd0RlbGV0ZWQpO1xuICB9XG59XG5cblxuLyoqXG4gKiBXcmFwcGVyIGFyb3VuZCBhIGRhdGEgdGFibGUgY3JlYXRlZCBmcm9tIGEgZ2FkZ2V0IHByZWZlcmVuY2UgdmFsdWUuXG4gKlxuICogQXV0b21hdGljYWxseSBjb25maWd1cmVzIGZpbHRlciBhbmQgc29ydCBzZXR0aW5ncyBmcm9tIHRoZSBwcmVmZXJlbmNlLFxuICogYW5kIHByb3ZpZGVzIGEgYGdldEZpbHRlcmVkUm93cygpYCBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBhcHBsaWVzIHRoZW0uXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2ZnID0gdGhpcy5jbGllbnQuY3JlYXRlRGF0YVRhYmxlRnJvbVByZWYocHJlZnMuZ2V0U3RyaW5nKCdyZERhdGFUYWJsZScpKTtcbiAqXG4gKiAvLyBGZXRjaCByb3dzIHdpdGggYXV0by13aXJlZCBmaWx0ZXIgKyBzb3J0IGZyb20gdGhlIHByZWZlcmVuY2VcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNmZy5nZXRGaWx0ZXJlZFJvd3MoKTtcbiAqXG4gKiAvLyBBY2Nlc3MgdGhlIHVuZGVybHlpbmcgRGF0YVRhYmxlUmVmIGZvciBzY2hlbWEsIGV2ZW50cywgZXRjLlxuICogY2ZnLmRhdGFUYWJsZS5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKGNoYW5nZSkpO1xuICpcbiAqIC8vIENsZWFudXBcbiAqIGNmZy5kaXNwb3NlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFUYWJsZVByZWZSZWYge1xuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBEYXRhVGFibGVSZWYgd2l0aCBmdWxsIGFjY2VzcyB0byBzY2hlbWEsIGV2ZW50cywgcG9sbGluZywgZXRjLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGF0YVRhYmxlOiBEYXRhVGFibGVSZWY7XG5cbiAgLyoqIFRoZSBwYXJzZWQgcHJlZmVyZW5jZSBvYmplY3QuICovXG4gIHB1YmxpYyByZWFkb25seSBwcmVmOiBJRGF0YVRhYmxlUHJlZjtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIF9jb25maWc6IGFueTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBEYXRhVGFibGVQcmVmUmVmIGZyb20gYSBnYWRnZXQgcHJlZmVyZW5jZSBKU09OIHN0cmluZy5cbiAgICpcbiAgICogQHBhcmFtIHByZWZWYWx1ZSAtIFRoZSByYXcgZ2FkZ2V0IHByZWZlcmVuY2Ugc3RyaW5nIChKU09OKVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwcmVmVmFsdWU6IHN0cmluZywgb3B0aW9ucz86IElEYXRhVGFibGVPcHRpb25zKSB7XG5cbiAgICBjb25zdCBsaWIgPSAod2luZG93IGFzIGFueSkuZ2FkZ2V0cz8uWydyZXZlbGRpZ2l0YWwuZGF0YXRhYmxlJ107XG5cbiAgICBpZiAoIWxpYiB8fCB0eXBlb2YgbGliLmNyZWF0ZUZyb21QcmVmICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdSZXZlbERpZ2l0YWwgRGF0YVRhYmxlIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZS4gJyArXG4gICAgICAgICdFbnN1cmUgdGhlIGRhdGF0YWJsZSBmZWF0dXJlIGlzIGVuYWJsZWQgZm9yIHRoaXMgZ2FkZ2V0LidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlnID0gbGliLmNyZWF0ZUZyb21QcmVmKHByZWZWYWx1ZSwgb3B0aW9ucyk7XG4gICAgdGhpcy5wcmVmID0gdGhpcy5fY29uZmlnLnByZWY7XG4gICAgdGhpcy5kYXRhVGFibGUgPSBEYXRhVGFibGVSZWYuX2Zyb21JbnN0YW5jZSh0aGlzLl9jb25maWcuZHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgcm93cyB3aXRoIHRoZSBmaWx0ZXIgYW5kIHNvcnQgc2V0dGluZ3MgZnJvbSB0aGUgcHJlZmVyZW5jZSBhdXRvbWF0aWNhbGx5IGFwcGxpZWQuXG4gICAqIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyBjYW4gb3ZlcnJpZGUgb3Igc3VwcGxlbWVudCB0aGUgcHJlZmVyZW5jZSBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIE9wdGlvbmFsIGFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVyc1xuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmVzdWx0IHNldFxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFVzZSBwcmVmZXJlbmNlIGRlZmF1bHRzXG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNmZy5nZXRGaWx0ZXJlZFJvd3MoKTtcbiAgICpcbiAgICogLy8gT3ZlcnJpZGUgcGFnZSBzaXplXG4gICAqIGNvbnN0IHBhZ2UgPSBhd2FpdCBjZmcuZ2V0RmlsdGVyZWRSb3dzKHsgcGFnZVNpemU6IDEwIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBnZXRGaWx0ZXJlZFJvd3MocGFyYW1zPzogSURhdGFUYWJsZVF1ZXJ5UGFyYW1zKTogUHJvbWlzZTxJRGF0YVRhYmxlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5nZXRGaWx0ZXJlZFJvd3MocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyBhbGwgcmVzb3VyY2VzIGhlbGQgYnkgdGhlIHVuZGVybHlpbmcgRGF0YVRhYmxlUmVmLlxuICAgKi9cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhVGFibGUuZGlzcG9zZSgpO1xuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvaW50ZXJmYWNlcy9kYXRhdGFibGUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbHRlciBvcGVyYXRvcnMgc3VwcG9ydGVkIGJ5IGRhdGEgdGFibGUgcXVlcmllcy5cbiAqXG4gKiAtIFNpbXBsZSBlcXVhbGl0eTogYHsgY29sdW1uS2V5OiAndmFsdWUnIH1gXG4gKiAtIE9wZXJhdG9yLWJhc2VkOiBgeyBjb2x1bW5LZXk6IHsgb3A6ICdjb250YWlucycsIHZhbHVlOiAnc2VhcmNoJyB9IH1gXG4gKiAtIFJhbmdlOiBgeyBjb2x1bW5LZXk6IHsgb3A6ICdpblJhbmdlJywgZnJvbTogNSwgdG86IDIwIH0gfWBcbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVRhYmxlRmlsdGVyT3AgPVxuICB8ICdlcSdcbiAgfCAnbmVxJ1xuICB8ICdpc0VtcHR5J1xuICB8ICdpc05vdEVtcHR5J1xuICB8ICdjb250YWlucydcbiAgfCAnbm90Q29udGFpbnMnXG4gIHwgJ2d0J1xuICB8ICdndGUnXG4gIHwgJ2x0J1xuICB8ICdsdGUnXG4gIHwgJ3Bvc2l0aXZlJ1xuICB8ICduZWdhdGl2ZSdcbiAgfCAnaW5SYW5nZSdcbiAgfCAnb3V0T2ZSYW5nZSc7XG5cbi8qKlxuICogT3BlcmF0b3ItYmFzZWQgZmlsdGVyIGV4cHJlc3Npb24gZm9yIGEgc2luZ2xlIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlRmlsdGVyT3BlcmF0b3Ige1xuICBvcDogRGF0YVRhYmxlRmlsdGVyT3A7XG4gIHZhbHVlPzogYW55O1xuICBmcm9tPzogYW55O1xuICB0bz86IGFueTtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgdmFsdWUgZm9yIGEgc2luZ2xlIGNvbHVtbi5cbiAqIENhbiBiZSBhIHNpbXBsZSBlcXVhbGl0eSB2YWx1ZSAoc3RyaW5nL251bWJlci9ib29sZWFuKSBvciBhbiBvcGVyYXRvciBleHByZXNzaW9uLlxuICovXG5leHBvcnQgdHlwZSBEYXRhVGFibGVGaWx0ZXJWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBJRGF0YVRhYmxlRmlsdGVyT3BlcmF0b3I7XG5cbi8qKlxuICogRmlsdGVyIG1hcCBrZXllZCBieSBjb2x1bW4ga2V5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVGaWx0ZXIge1xuICBbY29sdW1uS2V5OiBzdHJpbmddOiBEYXRhVGFibGVGaWx0ZXJWYWx1ZTtcbn1cblxuLyoqXG4gKiBDb2x1bW4gZGF0YSB0eXBlcyByZXR1cm5lZCBieSB0aGUgdGFibGUgc2NoZW1hLlxuICovXG5leHBvcnQgdHlwZSBEYXRhVGFibGVDb2x1bW5UeXBlID0gJ3RleHQnIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnZGF0ZScgfCAnaW1hZ2UnIHwgJ2hpZGRlbic7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBEYXRhVGFibGUgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZU9wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgYXV0by1yZXNvbHZlZCBkZXZpY2UgcmVnaXN0cmF0aW9uIGtleS4gKi9cbiAgcmVnaXN0cmF0aW9uS2V5Pzogc3RyaW5nO1xuICAvKiogT3ZlcnJpZGUgdGhlIEFQSSBiYXNlIFVSTC4gKi9cbiAgYmFzZVVybD86IHN0cmluZztcbiAgLyoqIFNpZ25hbFIgaHViIFVSTC4gU2V0IHRvIGBudWxsYCB0byBkaXNhYmxlIHJlYWwtdGltZSB1cGRhdGVzLiAqL1xuICBzaWduYWxSVXJsPzogc3RyaW5nIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBRdWVyeSBwYXJhbWV0ZXJzIGZvciBmZXRjaGluZyByb3dzIGZyb20gYSBkYXRhIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVRdWVyeVBhcmFtcyB7XG4gIC8qKiBGaWx0ZXIgcnVsZXMga2V5ZWQgYnkgY29sdW1uIGtleS4gKi9cbiAgZmlsdGVyPzogSURhdGFUYWJsZUZpbHRlcjtcbiAgLyoqIENvbHVtbiBrZXkgdG8gc29ydCBieS4gKi9cbiAgc29ydD86IHN0cmluZztcbiAgLyoqIFNvcnQgZGlyZWN0aW9uLiAqL1xuICBzb3J0RGlyPzogJ2FzYycgfCAnZGVzYyc7XG4gIC8qKiBSZXN1bHRzIHBlciBwYWdlIChtYXggMTAwKS4gKi9cbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIC8qKiBQYWdpbmF0aW9uIGN1cnNvciBmcm9tIGEgcHJldmlvdXMgcmVzdWx0LiAqL1xuICBjb250aW51YXRpb25Ub2tlbj86IHN0cmluZztcbiAgLyoqIENvbW1hLXNlcGFyYXRlZCBjb2x1bW4ga2V5cyB0byBpbmNsdWRlLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgcm93IHJldHVybmVkIGZyb20gdGhlIGRhdGEgdGFibGUgQVBJLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVSb3cge1xuICAvKiogUm93IElELiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogU29ydCBvcmRlciB2YWx1ZS4gKi9cbiAgc29ydE9yZGVyOiBudW1iZXI7XG4gIC8qKiBDb2x1bW4ga2V5LXZhbHVlIHBhaXJzLiAqL1xuICBkYXRhOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAvKiogSVNPIDg2MDEgbGFzdC1tb2RpZmllZCB0aW1lc3RhbXAuICovXG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc3VsdCBzZXQgcmV0dXJuZWQgYnkgYGdldFJvd3MoKWAgYW5kIGBnZXRWaXNpYmxlUm93cygpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlUmVzdWx0IHtcbiAgLyoqIFJvdyBvYmplY3RzLiAqL1xuICBkYXRhOiBJRGF0YVRhYmxlUm93W107XG4gIC8qKiBUb3RhbCBtYXRjaGluZyByb3dzIGFjcm9zcyBhbGwgcGFnZXMuICovXG4gIHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgLyoqIFRva2VuIGZvciBmZXRjaGluZyB0aGUgbmV4dCBwYWdlLCBvciBgbnVsbGAgaWYgbm8gbW9yZSBwYWdlcy4gKi9cbiAgY29udGludWF0aW9uVG9rZW46IHN0cmluZyB8IG51bGw7XG4gIC8qKiBJU08gODYwMSBjYWNoZSBleHBpcnkgdGltZXN0YW1wLiAqL1xuICBjYWNoZVVudGlsOiBzdHJpbmc7XG4gIC8qKiBgdHJ1ZWAgd2hlbiBkYXRhIGlzIHVuY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBmZXRjaCAoRVRhZyBtYXRjaCkuICovXG4gIG5vdE1vZGlmaWVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb2x1bW4gZGVmaW5pdGlvbiByZXR1cm5lZCBieSB0aGUgdGFibGUgc2NoZW1hLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVDb2x1bW4ge1xuICAvKiogQ29sdW1uIElELiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogRGlzcGxheSBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBEYXRhIGtleSB1c2VkIGluIGByb3cuZGF0YWAuICovXG4gIGtleTogc3RyaW5nO1xuICAvKiogQ29sdW1uIGRhdGEgdHlwZS4gKi9cbiAgdHlwZTogRGF0YVRhYmxlQ29sdW1uVHlwZTtcbiAgLyoqIFdoZXRoZXIgdGhlIGNvbHVtbiBpcyByZXF1aXJlZC4gKi9cbiAgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBjb2x1bW4gc3VwcG9ydHMgc29ydGluZy4gKi9cbiAgc29ydGFibGU6IGJvb2xlYW47XG4gIC8qKiBDb2x1bW4tc3BlY2lmaWMgb3B0aW9ucy4gKi9cbiAgb3B0aW9uczogYW55O1xufVxuXG4vKipcbiAqIFRhYmxlIHNjaGVtYSBpbmNsdWRpbmcgY29sdW1uIGRlZmluaXRpb25zIGFuZCBtZXRhZGF0YS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlU2NoZW1hIHtcbiAgLyoqIFRhYmxlIElELiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogVGFibGUgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGFibGUgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBDb2x1bW4gZGVmaW5pdGlvbnMuICovXG4gIGNvbHVtbnM6IElEYXRhVGFibGVDb2x1bW5bXTtcbiAgLyoqIFRvdGFsIHJvd3MgaW4gdGhlIHRhYmxlLiAqL1xuICByb3dDb3VudDogbnVtYmVyO1xuICAvKiogSVNPIDg2MDEgbGFzdC1tb2RpZmllZCB0aW1lc3RhbXAuICovXG4gIHVwZGF0ZWRBdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIENoYW5nZSBldmVudCBlbWl0dGVkIGZvciByZWFsLXRpbWUgZGF0YSB0YWJsZSB1cGRhdGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVDaGFuZ2VFdmVudCB7XG4gIC8qKiBUaGUgdGFibGUgdGhhdCBjaGFuZ2VkLiAqL1xuICB0YWJsZUlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgYWZmZWN0ZWQgcm93IElELiAqL1xuICByb3dJZDogc3RyaW5nO1xuICAvKiogUm93IGRhdGEgKHByZXNlbnQgZm9yIGNyZWF0ZWQvdXBkYXRlZCBldmVudHMpLiAqL1xuICBkYXRhPzogYW55O1xuICAvKiogVGhlIHR5cGUgb2YgY2hhbmdlLiAqL1xuICBhY3Rpb246ICd1cGRhdGUnIHwgJ2NyZWF0ZScgfCAnZGVsZXRlJyB8ICdwb2xsJztcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvaW50ZXJmYWNlcy9kYXRhdGFibGUuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZpbHRlciBvcGVyYXRvcnMgc3VwcG9ydGVkIGJ5IGRhdGEgdGFibGUgcXVlcmllcy5cbiAqXG4gKiAtIFNpbXBsZSBlcXVhbGl0eTogYHsgY29sdW1uS2V5OiAndmFsdWUnIH1gXG4gKiAtIE9wZXJhdG9yLWJhc2VkOiBgeyBjb2x1bW5LZXk6IHsgb3A6ICdjb250YWlucycsIHZhbHVlOiAnc2VhcmNoJyB9IH1gXG4gKiAtIFJhbmdlOiBgeyBjb2x1bW5LZXk6IHsgb3A6ICdpblJhbmdlJywgZnJvbTogNSwgdG86IDIwIH0gfWBcbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVRhYmxlRmlsdGVyT3AgPVxuICB8ICdlcSdcbiAgfCAnbmVxJ1xuICB8ICdpc0VtcHR5J1xuICB8ICdpc05vdEVtcHR5J1xuICB8ICdjb250YWlucydcbiAgfCAnbm90Q29udGFpbnMnXG4gIHwgJ2d0J1xuICB8ICdndGUnXG4gIHwgJ2x0J1xuICB8ICdsdGUnXG4gIHwgJ3Bvc2l0aXZlJ1xuICB8ICduZWdhdGl2ZSdcbiAgfCAnaW5SYW5nZSdcbiAgfCAnb3V0T2ZSYW5nZSc7XG5cbi8qKlxuICogT3BlcmF0b3ItYmFzZWQgZmlsdGVyIGV4cHJlc3Npb24gZm9yIGEgc2luZ2xlIGNvbHVtbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlRmlsdGVyT3BlcmF0b3Ige1xuICBvcDogRGF0YVRhYmxlRmlsdGVyT3A7XG4gIHZhbHVlPzogYW55O1xuICBmcm9tPzogYW55O1xuICB0bz86IGFueTtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgdmFsdWUgZm9yIGEgc2luZ2xlIGNvbHVtbi5cbiAqIENhbiBiZSBhIHNpbXBsZSBlcXVhbGl0eSB2YWx1ZSAoc3RyaW5nL251bWJlci9ib29sZWFuKSBvciBhbiBvcGVyYXRvciBleHByZXNzaW9uLlxuICovXG5leHBvcnQgdHlwZSBEYXRhVGFibGVGaWx0ZXJWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBJRGF0YVRhYmxlRmlsdGVyT3BlcmF0b3I7XG5cbi8qKlxuICogRmlsdGVyIG1hcCBrZXllZCBieSBjb2x1bW4ga2V5LlxuICpcbiAqIFN1cHBvcnRzIGxvZ2ljYWwgY29tYmluYXRpb25zOlxuICogLSAqKkFORCoqIChkZWZhdWx0KTogbXVsdGlwbGUgcHJvcGVydGllcyBpbiBhIHNpbmdsZSBvYmplY3RcbiAqICAgYHsgc3RhdHVzOiAnYWN0aXZlJywgcHJpY2U6IHsgb3A6ICdsdGUnLCB2YWx1ZTogMjUgfSB9YFxuICogLSAqKk9SKio6IHdyYXAgZWFjaCBjb25kaXRpb24gaW4gYSBgJG9yYCBhcnJheVxuICogICBgeyAkb3I6IFt7IHN0YXR1czogJ2FjdGl2ZScgfSwgeyBzdGF0dXM6ICdwZW5kaW5nJyB9XSB9YFxuICogLSAqKk1peGVkKio6IEFORCBjb25kaXRpb25zIGFsb25nc2lkZSBhbiBPUiBncm91cFxuICogICBgeyAkb3I6IFt7IHN0YXR1czogJ2FjdGl2ZScgfSwgeyBzdGF0dXM6ICdwZW5kaW5nJyB9XSwgcHJpY2U6IHsgb3A6ICdndCcsIHZhbHVlOiAwIH0gfWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlRmlsdGVyIHtcbiAgLyoqIE9SIGdyb3VwOiByb3dzIG1hdGNoaW5nIGFueSBjb25kaXRpb24gaW4gdGhlIGFycmF5LiAqL1xuICAkb3I/OiBBcnJheTx7IFtjb2x1bW5LZXk6IHN0cmluZ106IERhdGFUYWJsZUZpbHRlclZhbHVlIH0+O1xuICBbY29sdW1uS2V5OiBzdHJpbmddOiBEYXRhVGFibGVGaWx0ZXJWYWx1ZSB8IEFycmF5PHsgW2NvbHVtbktleTogc3RyaW5nXTogRGF0YVRhYmxlRmlsdGVyVmFsdWUgfT4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29sdW1uIGRhdGEgdHlwZXMgcmV0dXJuZWQgYnkgdGhlIHRhYmxlIHNjaGVtYS5cbiAqL1xuZXhwb3J0IHR5cGUgRGF0YVRhYmxlQ29sdW1uVHlwZSA9ICd0ZXh0JyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2RhdGUnIHwgJ2ltYWdlJyB8ICdoaWRkZW4nO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgRGF0YVRhYmxlIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVPcHRpb25zIHtcbiAgLyoqIE92ZXJyaWRlIGF1dG8tcmVzb2x2ZWQgZGV2aWNlIHJlZ2lzdHJhdGlvbiBrZXkuICovXG4gIHJlZ2lzdHJhdGlvbktleT86IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlIHRoZSBBUEkgYmFzZSBVUkwuICovXG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKiBTaWduYWxSIGh1YiBVUkwuIFNldCB0byBgbnVsbGAgdG8gZGlzYWJsZSByZWFsLXRpbWUgdXBkYXRlcy4gKi9cbiAgc2lnbmFsUlVybD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKlxuICogUXVlcnkgcGFyYW1ldGVycyBmb3IgZmV0Y2hpbmcgcm93cyBmcm9tIGEgZGF0YSB0YWJsZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlUXVlcnlQYXJhbXMge1xuICAvKiogRmlsdGVyIHJ1bGVzIGtleWVkIGJ5IGNvbHVtbiBrZXkuICovXG4gIGZpbHRlcj86IElEYXRhVGFibGVGaWx0ZXI7XG4gIC8qKiBDb2x1bW4ga2V5IHRvIHNvcnQgYnkuICovXG4gIHNvcnQ/OiBzdHJpbmc7XG4gIC8qKiBTb3J0IGRpcmVjdGlvbi4gKi9cbiAgc29ydERpcj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAvKiogUmVzdWx0cyBwZXIgcGFnZSAobWF4IDEwMCkuICovXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICAvKiogUGFnaW5hdGlvbiBjdXJzb3IgZnJvbSBhIHByZXZpb3VzIHJlc3VsdC4gKi9cbiAgY29udGludWF0aW9uVG9rZW4/OiBzdHJpbmc7XG4gIC8qKiBDb21tYS1zZXBhcmF0ZWQgY29sdW1uIGtleXMgdG8gaW5jbHVkZS4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIHJvdyByZXR1cm5lZCBmcm9tIHRoZSBkYXRhIHRhYmxlIEFQSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlUm93IHtcbiAgLyoqIFJvdyBJRC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFNvcnQgb3JkZXIgdmFsdWUuICovXG4gIHNvcnRPcmRlcjogbnVtYmVyO1xuICAvKiogQ29sdW1uIGtleS12YWx1ZSBwYWlycy4gKi9cbiAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgLyoqIElTTyA4NjAxIGxhc3QtbW9kaWZpZWQgdGltZXN0YW1wLiAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgc2V0IHJldHVybmVkIGJ5IGBnZXRSb3dzKClgIGFuZCBgZ2V0VmlzaWJsZVJvd3MoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZVJlc3VsdCB7XG4gIC8qKiBSb3cgb2JqZWN0cy4gKi9cbiAgZGF0YTogSURhdGFUYWJsZVJvd1tdO1xuICAvKiogVG90YWwgbWF0Y2hpbmcgcm93cyBhY3Jvc3MgYWxsIHBhZ2VzLiAqL1xuICB0b3RhbENvdW50OiBudW1iZXI7XG4gIC8qKiBUb2tlbiBmb3IgZmV0Y2hpbmcgdGhlIG5leHQgcGFnZSwgb3IgYG51bGxgIGlmIG5vIG1vcmUgcGFnZXMuICovXG4gIGNvbnRpbnVhdGlvblRva2VuOiBzdHJpbmcgfCBudWxsO1xuICAvKiogSVNPIDg2MDEgY2FjaGUgZXhwaXJ5IHRpbWVzdGFtcC4gKi9cbiAgY2FjaGVVbnRpbDogc3RyaW5nO1xuICAvKiogYHRydWVgIHdoZW4gZGF0YSBpcyB1bmNoYW5nZWQgc2luY2UgdGhlIGxhc3QgZmV0Y2ggKEVUYWcgbWF0Y2gpLiAqL1xuICBub3RNb2RpZmllZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29sdW1uIGRlZmluaXRpb24gcmV0dXJuZWQgYnkgdGhlIHRhYmxlIHNjaGVtYS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlQ29sdW1uIHtcbiAgLyoqIENvbHVtbiBJRC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIERpc3BsYXkgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogRGF0YSBrZXkgdXNlZCBpbiBgcm93LmRhdGFgLiAqL1xuICBrZXk6IHN0cmluZztcbiAgLyoqIENvbHVtbiBkYXRhIHR5cGUuICovXG4gIHR5cGU6IERhdGFUYWJsZUNvbHVtblR5cGU7XG4gIC8qKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgcmVxdWlyZWQuICovXG4gIHJlcXVpcmVkOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY29sdW1uIHN1cHBvcnRzIHNvcnRpbmcuICovXG4gIHNvcnRhYmxlOiBib29sZWFuO1xuICAvKiogQ29sdW1uLXNwZWNpZmljIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IGFueTtcbn1cblxuLyoqXG4gKiBUYWJsZSBzY2hlbWEgaW5jbHVkaW5nIGNvbHVtbiBkZWZpbml0aW9ucyBhbmQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZVNjaGVtYSB7XG4gIC8qKiBUYWJsZSBJRC4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRhYmxlIG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRhYmxlIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQ29sdW1uIGRlZmluaXRpb25zLiAqL1xuICBjb2x1bW5zOiBJRGF0YVRhYmxlQ29sdW1uW107XG4gIC8qKiBUb3RhbCByb3dzIGluIHRoZSB0YWJsZS4gKi9cbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgLyoqIElTTyA4NjAxIGxhc3QtbW9kaWZpZWQgdGltZXN0YW1wLiAqL1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDaGFuZ2UgZXZlbnQgZW1pdHRlZCBmb3IgcmVhbC10aW1lIGRhdGEgdGFibGUgdXBkYXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGF0YVRhYmxlQ2hhbmdlRXZlbnQge1xuICAvKiogVGhlIHRhYmxlIHRoYXQgY2hhbmdlZC4gKi9cbiAgdGFibGVJZDogc3RyaW5nO1xuICAvKiogVGhlIGFmZmVjdGVkIHJvdyBJRC4gKi9cbiAgcm93SWQ6IHN0cmluZztcbiAgLyoqIFJvdyBkYXRhIChwcmVzZW50IGZvciBjcmVhdGVkL3VwZGF0ZWQgZXZlbnRzKS4gKi9cbiAgZGF0YT86IGFueTtcbiAgLyoqIFRoZSB0eXBlIG9mIGNoYW5nZS4gKi9cbiAgYWN0aW9uOiAndXBkYXRlJyB8ICdjcmVhdGUnIHwgJ2RlbGV0ZScgfCAncG9sbCc7XG59XG5cbi8qKlxuICogQSBzaW5nbGUgZmlsdGVyIHJ1bGUgd2l0aGluIGEgZGF0YXRhYmxlIHByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFUYWJsZVByZWZGaWx0ZXJSdWxlIHtcbiAgLyoqIENvbHVtbiBrZXkgdG8gZmlsdGVyIG9uLiAqL1xuICBjb2x1bW5LZXk6IHN0cmluZztcbiAgLyoqIEZpbHRlciBvcGVyYXRvciAoZGVmYXVsdHMgdG8gJ2VxJykuICovXG4gIG9wZXJhdG9yPzogRGF0YVRhYmxlRmlsdGVyT3A7XG4gIC8qKiBWYWx1ZSB0byBjb21wYXJlIGFnYWluc3QuICovXG4gIHZhbHVlPzogYW55O1xufVxuXG4vKipcbiAqIFBhcnNlZCBkYXRhdGFibGUgZ2FkZ2V0IHByZWZlcmVuY2UgYXMgc2VyaWFsaXplZCBieSB0aGUgdGVtcGxhdGUgZWRpdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEYXRhVGFibGVQcmVmIHtcbiAgLyoqIFRoZSBkYXRhIHRhYmxlIElELiAqL1xuICB0YWJsZUlkPzogc3RyaW5nO1xuICAvKiogUHJpbWFyeSBjb2x1bW4ga2V5LiAqL1xuICBjb2x1bW5LZXk/OiBzdHJpbmc7XG4gIC8qKiBGaWx0ZXIgcnVsZXMgKG5ldyBtdWx0aS1maWx0ZXIgZm9ybWF0KS4gKi9cbiAgZmlsdGVycz86IElEYXRhVGFibGVQcmVmRmlsdGVyUnVsZVtdO1xuICAvKiogTG9naWNhbCBjb21iaW5hdGlvbiBmb3IgZmlsdGVycy4gKi9cbiAgZmlsdGVyTG9naWM/OiAnYW5kJyB8ICdvcic7XG4gIC8qKiBDb2x1bW4ga2V5IHRvIHNvcnQgYnkuICovXG4gIHNvcnRDb2x1bW5LZXk/OiBzdHJpbmc7XG4gIC8qKiBTb3J0IGRpcmVjdGlvbi4gKi9cbiAgc29ydERpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAvKiogQGRlcHJlY2F0ZWQgTGVnYWN5IHNpbmdsZS1maWx0ZXIgY29sdW1uIGtleS4gVXNlIGBmaWx0ZXJzYCBpbnN0ZWFkLiAqL1xuICBmaWx0ZXJDb2x1bW5LZXk/OiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCBMZWdhY3kgc2luZ2xlLWZpbHRlciBvcGVyYXRvci4gVXNlIGBmaWx0ZXJzYCBpbnN0ZWFkLiAqL1xuICBmaWx0ZXJPcGVyYXRvcj86IERhdGFUYWJsZUZpbHRlck9wO1xuICAvKiogQGRlcHJlY2F0ZWQgTGVnYWN5IHNpbmdsZS1maWx0ZXIgdmFsdWUuIFVzZSBgZmlsdGVyc2AgaW5zdGVhZC4gKi9cbiAgZmlsdGVyVmFsdWU/OiBhbnk7XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BehaviorSubject, fromEvent, Subject } from 'rxjs';
3
3
  import { filter, map, share, tap } from 'rxjs/operators';
4
- import { DataTableRef } from './datatable-ref';
4
+ import { DataTableRef, DataTablePrefRef } from './datatable-ref';
5
5
  import { version } from './version';
6
6
  import * as i0 from "@angular/core";
7
7
  /**
@@ -824,6 +824,35 @@ export class PlayerClientService {
824
824
  createDataTable(tableId, options) {
825
825
  return new DataTableRef(tableId, options);
826
826
  }
827
+ /**
828
+ * Creates a typed data table wrapper from a gadget preference value.
829
+ *
830
+ * The preference JSON string (as serialized by the template editor's datatable
831
+ * option) is parsed and used to auto-configure filter, sort, and logic settings.
832
+ * The returned {@link DataTablePrefRef} provides a `getFilteredRows()` convenience
833
+ * method that applies these settings automatically.
834
+ *
835
+ * @param prefValue - The raw gadget preference string (JSON)
836
+ * @param options - Optional configuration overrides
837
+ * @returns A {@link DataTablePrefRef} instance
838
+ * @throws Error if the global datatable library is not loaded
839
+ *
840
+ * ```typescript
841
+ * const cfg = this.client.createDataTableFromPref(prefs.getString('rdDataTable'));
842
+ *
843
+ * // Fetch rows with auto-wired filter + sort
844
+ * const result = await cfg.getFilteredRows();
845
+ *
846
+ * // Access the underlying DataTableRef for events, schema, etc.
847
+ * cfg.dataTable.rowUpdated$.subscribe(change => console.log(change));
848
+ *
849
+ * // Cleanup when done
850
+ * cfg.dispose();
851
+ * ```
852
+ */
853
+ createDataTableFromPref(prefValue, options) {
854
+ return new DataTablePrefRef(prefValue, options);
855
+ }
827
856
  // ---
828
857
  // PRIVATE METHODS.
829
858
  // ---
@@ -959,4 +988,4 @@ class NoopClient {
959
988
  }
960
989
  }
961
990
  }
962
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmV2ZWxkaWdpdGFsL3BsYXllci1jbGllbnQvc3JjL2xpYi9wbGF5ZXItY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBY3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQW1LOUIsY0FBYztJQUNkLFlBQVksSUFBWTtRQS9KeEI7Ozs7Ozs7Ozs7O1dBV0c7UUFDSSxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztRQUU1Qzs7Ozs7Ozs7Ozs7O1dBWUc7UUFDSSxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0M7Ozs7Ozs7Ozs7V0FVRztRQUNJLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWhDOzs7Ozs7Ozs7OztXQVdHO1FBQ0ksWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFL0I7Ozs7Ozs7OztXQVNHO1FBQ0ksY0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFakM7Ozs7Ozs7Ozs7V0FVRztRQUNJLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVV0QyxjQUFjO1FBQ04s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Q0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFDbkIsR0FBRyxDQUNKLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdhZGdldHMgfSBmcm9tICdAcmV2ZWxkaWdpdGFsL2dhZGdldC10eXBlcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc2hhcmUsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElDbGllbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvY2xpZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJQ29tbWFuZCB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb21tYW5kLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGljdGlvbmFyeSB9IGZyb20gJy4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEYXRhVGFibGVPcHRpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2RhdGF0YWJsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURldmljZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9kZXZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IElFdmVudFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvZXZlbnQtcHJvcGVydGllcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGF0YVRhYmxlUmVmIH0gZnJvbSAnLi9kYXRhdGFibGUtcmVmJztcbmltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24nO1xuXG4vL2ltcG9ydCB7IHZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24uanMnO1xuXG4vLyBTbyB0aGF0IFR5cGVTY3JpcHQgZG9lc24ndCBjb21wbGFpbiwgd2UncmUgZ29pbmcgdG8gYXVnbWVudCB0aGUgR0xPQkFMIC8gV0lORE9XIFxuLy8gbmFtZS1zcGFjZSBkZWZpbml0aW9uIHRvIGluY2x1ZGUgdGhlIFRyYWNrZXIgQVBJLiBUaGlzIGFsc28gcHJvdmlkZXMgdXMgd2l0aCBhIHBsYWNlXG4vLyB0byBhY3R1YWxseSBET0NVTUVOVCB0aGUgQVBJIHNvIHRoYXQgb3VyIGRldmVsb3BlcnMgYXJlbid0IGd1ZXNzaW5nIGFib3V0IHdoYXQnc1xuLy8gYXZhaWxhYmxlIG9uIHRoZSBsaWJyYXJ5LlxuXG4vKiogQGlnbm9yZSAqL1xuZGVjbGFyZSBnbG9iYWwge1xuICBsZXQgQ2xpZW50OiBJQ2xpZW50O1xufVxuXG4vKipcbiAqIFNlcnZpY2UgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIFJldmVsIERpZ2l0YWwgcGxheWVyIGNsaWVudC5cbiAqIFxuICogVGhpcyBzZXJ2aWNlIHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSBpbnRlcmZhY2UgZm9yIGdhZGdldHMgYW5kIHdlYiBhcHBsaWNhdGlvbnNcbiAqIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIFJldmVsIERpZ2l0YWwgcGxheWVyIGVudmlyb25tZW50LiBJdCBoYW5kbGVzIGRldmljZVxuICogaW5mb3JtYXRpb24sIGNvbW1hbmRzLCBldmVudHMsIGFuYWx5dGljcyB0cmFja2luZywgYW5kIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudC5cbiAqIFxuICogVGhlIHNlcnZpY2Ugc3VwcG9ydHMgYm90aCBkaXJlY3QgQVBJIGNhbGxzIGFuZCBldmVudC1iYXNlZCBjb21tdW5pY2F0aW9uIHBhdHRlcm5zLFxuICogYWxsb3dpbmcgZ2FkZ2V0cyB0byByZXNwb25kIHRvIHBsYXllciBsaWZlY3ljbGUgZXZlbnRzIChzdGFydCwgc3RvcCwgY29tbWFuZHMpIGFuZFxuICogc2VuZCBkYXRhIGJhY2sgdG8gdGhlIHBsYXllciBvciByZW1vdGUgZGV2aWNlcy5cbiAqIFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3RydWN0b3IocHJpdmF0ZSBjbGllbnQ6IFBsYXllckNsaWVudFNlcnZpY2UpIHtcbiAqICAgLy8gU3Vic2NyaWJlIHRvIHBsYXllciBldmVudHNcbiAqICAgdGhpcy5jbGllbnQub25TdGFydCQuc3Vic2NyaWJlKCgpID0+IHtcbiAqICAgICBjb25zb2xlLmxvZygnR2FkZ2V0IHN0YXJ0ZWQnKTtcbiAqICAgfSk7XG4gKiAgIFxuICogICB0aGlzLmNsaWVudC5vbkNvbW1hbmQkLnN1YnNjcmliZShjb21tYW5kID0+IHtcbiAqICAgICBjb25zb2xlLmxvZygnUmVjZWl2ZWQgY29tbWFuZDonLCBjb21tYW5kKTtcbiAqICAgfSk7XG4gKiB9XG4gKiBcbiAqIGFzeW5jIG5nT25Jbml0KCkge1xuICogICAvLyBHZXQgZGV2aWNlIGluZm9ybWF0aW9uXG4gKiAgIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZSgpO1xuICogICBjb25zdCBkZXZpY2VUaW1lID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZSgpO1xuICogICBcbiAqICAgLy8gVHJhY2sgYW5hbHl0aWNzXG4gKiAgIHRoaXMuY2xpZW50LnRyYWNrKCdnYWRnZXRfbG9hZGVkJywgeyB2ZXJzaW9uOiAnMS4wJyB9KTtcbiAqIH1cbiAqIGBgYFxuICogXG4gKiBAc2luY2UgMS4wLjBcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxheWVyQ2xpZW50U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBjbGllbnRQcm9taXNlOiBQcm9taXNlPElDbGllbnQ+IHwgbnVsbDtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgY29tbWFuZHMgc2VudCB0byB0aGlzIHBsYXllciBmcm9tIHRoZSBSZXZlbCBEaWdpdGFsIHBsYXRmb3JtLlxuICAgKiBTdWJzY3JpYmUgdG8gdGhpcyB0byBoYW5kbGUgY3VzdG9tIGNvbW1hbmRzIHNlbnQgZnJvbSB0ZW1wbGF0ZXMsIHBsYXlsaXN0cywgb3IgcmVtb3RlIGRldmljZXMuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRoaXMuY2xpZW50Lm9uQ29tbWFuZCQuc3Vic2NyaWJlKGNvbW1hbmQgPT4ge1xuICAgKiAgIGlmIChjb21tYW5kLm5hbWUgPT09ICdjdXN0b21BY3Rpb24nKSB7XG4gICAqICAgICB0aGlzLmhhbmRsZUN1c3RvbUFjdGlvbihjb21tYW5kLmFyZyk7XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgb25Db21tYW5kJCA9IG5ldyBTdWJqZWN0PElDb21tYW5kPigpO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHRoYXQgc2lnbmFscyB3aGVuIHRoZSBnYWRnZXQgaGFzIGJlZW4gbG9hZGVkIGFuZCBpcyByZWFkeSB0byBzdGFydC5cbiAgICogRW1pdHMgYHRydWVgIHdoZW4gcmVhZHksIGBmYWxzZWAgd2hlbiBkZXN0cm95ZWQuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRoaXMuY2xpZW50Lm9uUmVhZHkkLnN1YnNjcmliZShpc1JlYWR5ID0+IHtcbiAgICogICBpZiAoaXNSZWFkeSkge1xuICAgKiAgICAgY29uc29sZS5sb2coJ0NsaWVudCBpcyByZWFkeScpO1xuICAgKiAgICAgdGhpcy5pbml0aWFsaXplR2FkZ2V0KCk7XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgb25SZWFkeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZ2FkZ2V0IGhhcyBiZWVuIHN0YXJ0ZWQgYnkgdGhlIHBsYXllci5cbiAgICogVGhpcyBldmVudCBvY2N1cnMgd2hlbiB0aGUgcGxheWVyIGJlZ2lucyBleGVjdXRpb24gb2YgdGhlIGdhZGdldCBjb250ZW50LlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vblN0YXJ0JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKCdHYWRnZXQgc3RhcnRlZCcpO1xuICAgKiAgIHRoaXMuc3RhcnRBbmltYXRpb24oKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uU3RhcnQkID0gbmV3IFN1YmplY3QoKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZ2FkZ2V0IGhhcyBiZWVuIHN0b3BwZWQgYnkgdGhlIHBsYXllci5cbiAgICogVGhpcyBldmVudCBvY2N1cnMgd2hlbiB0aGUgcGxheWVyIHN0b3BzIGV4ZWN1dGlvbiwgdHlwaWNhbGx5IHdoZW4gbW92aW5nXG4gICAqIHRvIHRoZSBuZXh0IGl0ZW0gaW4gYSBwbGF5bGlzdCBvciB3aGVuIHRoZSBjb250ZW50IGR1cmF0aW9uIGV4cGlyZXMuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRoaXMuY2xpZW50Lm9uU3RvcCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICogICBjb25zb2xlLmxvZygnR2FkZ2V0IHN0b3BwZWQnKTtcbiAgICogICB0aGlzLmNsZWFudXAoKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uU3RvcCQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHRoYXQgc2lnbmFscyB3aGVuIHRoZSBnYWRnZXQgc2hvdWxkIG9wZW4gdGhlIGNvbmZpZ3VyYXRpb24gd2luZG93LlxuICAgKiBUaGlzIGFsbG93cyBnYWRnZXRzIHRvIHJlc3BvbmQgdG8gY29uZmlndXJhdGlvbiByZXF1ZXN0cyBmcm9tIHRoZSBwbGF5ZXIuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIHRoaXMuY2xpZW50Lm9uQ29uZmlnJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgKiAgIHRoaXMub3BlbkNvbmZpZ3VyYXRpb25EaWFsb2coKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uQ29uZmlnJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGdhZGdldCBoYXMgcmVjZWl2ZWQgYSBwb3N0TWVzc2FnZSBldmVudCBmcm9tIHRoZSBwbGF5ZXIuXG4gICAqIFRoaXMgaGFuZGxlcyBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIGdhZGdldCBhbmQgcGxheWVyIHZpYSB0aGUgcG9zdE1lc3NhZ2UgQVBJLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vblBvc3RNZXNzYWdlJC5zdWJzY3JpYmUobWVzc2FnZSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIG1lc3NhZ2U6JywgbWVzc2FnZSk7XG4gICAqICAgdGhpcy5oYW5kbGVQbGF5ZXJNZXNzYWdlKG1lc3NhZ2UpO1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgb25Qb3N0TWVzc2FnZSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8vXG4gIC8vIFR3byBtZXRob2RzIGF2YWlsYWJsZSBmb3IgY2FsbGluZyBpbnRvIHRoZSBsaWJyYXJ5OlxuICAvL1xuICAvLyAxKSBVc2luZyBkaXNwYXRjaEV2ZW50KCkgd2l0aCB0aGUgZm9sbG93aW5nIGN1c3RvbSBldmVudHNcbiAgLy8gMikgVXNpbmcgdGhlIHdpbmRvdyBzY29wZWQgUmV2ZWxEaWdpdGFsIG9iamVjdCBhcyBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3RvclxuICAvL1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uU3RhcnRTdWI6IFN1YnNjcmlwdGlvbjtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvblN0YXJ0RXZ0JCA9IGZyb21FdmVudCh3aW5kb3csICdSZXZlbERpZ2l0YWwuU3RhcnQnKS5waXBlKFxuICAgIHNoYXJlKCksXG4gICAgdGFwKHRoaXMub25TdGFydCQpXG4gICk7XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgb25TdG9wU3ViOiBTdWJzY3JpcHRpb247XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgb25TdG9wRXZ0JCA9IGZyb21FdmVudCh3aW5kb3csICdSZXZlbERpZ2l0YWwuU3RvcCcpLnBpcGUoXG4gICAgc2hhcmUoKSxcbiAgICB0YXAodGhpcy5vblN0b3AkKVxuICApO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uQ29tbWFuZFN1YjogU3Vic2NyaXB0aW9uO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uQ29tbWFuZEV2dCQgPSBmcm9tRXZlbnQ8SUNvbW1hbmQ+KHdpbmRvdywgJ1JldmVsRGlnaXRhbC5Db21tYW5kJykucGlwZShcbiAgICBtYXAoKGU6IGFueSkgPT4geyByZXR1cm4geyBuYW1lOiBlLmRldGFpbC5uYW1lLCBhcmc6IGUuZGV0YWlsLmFyZyB9IGFzIElDb21tYW5kIH0pLFxuICAgIHNoYXJlKCksXG4gICAgdGFwKHRoaXMub25Db21tYW5kJClcbiAgKTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgLy8gcHJpdmF0ZSBvbkNvbmZpZ1N1YjogU3Vic2NyaXB0aW9uO1xuICAvLyAvKiogQGlnbm9yZSAqL1xuICAvLyBwcml2YXRlIG9uQ29uZmlnRXZ0JCA9IGZyb21FdmVudCh3aW5kb3csICdSZXZlbERpZ2l0YWwuQ29uZmlnJykucGlwZShcbiAgLy8gICBzaGFyZSgpLFxuICAvLyAgIHRhcCgoZTogQ3VzdG9tRXZlbnQpID0+IHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKGUpO1xuXG4gIC8vICAgICBpZiAoZS5kZXRhaWwudHlwZSA9PT0gJ2FwcGx5Q29uZmlnJyAmJiBlLmRldGFpbC5pc09wZW5lcikge1xuICAvLyAgICAgICB0aGlzLmFwcGx5Q29uZmlnKGUuZGV0YWlsLmNvbmZpZyk7IC8vIHByb3BhZ2F0ZSBjb25maWcgdG8gaWZyYW1lIHBhcmVudCBmcm9tIHRoZSBwb3B1cCB3aW5kb3dcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIHRoaXMub25Db25maWckLm5leHQoZS5kZXRhaWwpO1xuICAvLyAgICAgfVxuICAvLyAgIH0pXG4gIC8vICk7XG4gIC8vIHByaXZhdGUgb25Qb3N0TWVzc2FnZVN1YjogU3Vic2NyaXB0aW9uO1xuICAvLyBwcml2YXRlIG9uUG9zdE1lc3NhZ2VFdnQkID0gZnJvbUV2ZW50KHdpbmRvdywgJ21lc3NhZ2UnKS5waXBlKFxuICAvLyAgIGZpbHRlcigobWVzc2FnZUV2ZW50OiBNZXNzYWdlRXZlbnQpID0+XG4gIC8vICAgICBtZXNzYWdlRXZlbnQuc291cmNlICE9PSB3aW5kb3cucGFyZW50ICYmXG4gIC8vICAgICB0eXBlb2YgbWVzc2FnZUV2ZW50LmRhdGEgPT09ICdzdHJpbmcnICYmXG4gIC8vICAgICBtZXNzYWdlRXZlbnQuZGF0YS5zdGFydHNXaXRoKCdyZXZlbGRpZ2l0YWw6JykpLFxuICAvLyAgIG1hcCgoZTogYW55KSA9PiB7IHJldHVybiBKU09OLnBhcnNlKGUuc3Vic3RyaW5nKDEzKSkgYXMgQ29tbWFuZCB9KSxcbiAgLy8gICBzaGFyZSgpLFxuICAvLyAgIHRhcCh0aGlzLm9uQ29tbWFuZCQpXG4gIC8vICk7XG5cbiAgcHJpdmF0ZSBvblBvc3RNZXNzYWdlU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgb25Qb3N0TWVzc2FnZUV2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnbWVzc2FnZScpLnBpcGUoXG4gICAgZmlsdGVyKChtZXNzYWdlRXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT5cbiAgICAgIC8vbWVzc2FnZUV2ZW50LnNvdXJjZSAhPT0gd2luZG93LnBhcmVudCAmJlxuICAgICAgdHlwZW9mIG1lc3NhZ2VFdmVudC5kYXRhID09PSAnc3RyaW5nJyksXG4gICAgbWFwKChlOiBhbnkpID0+IEpTT04ucGFyc2UoZS5kYXRhKSksXG4gICAgc2hhcmUoKSxcbiAgICB0YXAoKGU6IGFueSkgPT4ge1xuICAgICAgaWYgKGUudHlwZSA9PT0gJ2FwcGx5Q29uZmlnJyAmJiBlLmlzT3BlbmVyKSB7XG4gICAgICAgIGUuaXNPcGVuZXIgPSBmYWxzZTtcbiAgICAgICAgLy8gcHJvcGFnYXRlIGNvbmZpZyB0byBpZnJhbWUgcGFyZW50IGZyb20gdGhlIHBvcHVwIHdpbmRvd1xuICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgICcqJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChlLnR5cGUgPT09ICdvcGVuQ29uZmlnJykge1xuICAgICAgICB0aGlzLm9uQ29uZmlnJC5uZXh0KG51bGwpO1xuICAgICAgfVxuICAgIH0pLFxuICAgIHRhcChlID0+IHRoaXMub25Qb3N0TWVzc2FnZSQubmV4dChlKSlcbiAgKTtcblxuXG4gIC8qKiBAaWdub3JlICovXG4gIGNvbnN0cnVjdG9yKHpvbmU6IE5nWm9uZSkge1xuXG4gICAgKHdpbmRvdyBhcyBhbnkpLlJldmVsRGlnaXRhbCA9IHtcbiAgICAgIENvbnRyb2xsZXI6IHtcbiAgICAgICAgb25Db21tYW5kOiAobmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db21tYW5kJC5uZXh0KHsgbmFtZTogbmFtZSwgYXJnOiBhcmcgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU3RhcnQ6ICgpID0+IHtcbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU3RhcnQkLm5leHQobnVsbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uU3RvcDogKCkgPT4ge1xuICAgICAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TdG9wJC5uZXh0KG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vblN0YXJ0U3ViID0gdGhpcy5vblN0YXJ0RXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcbiAgICB0aGlzLm9uU3RvcFN1YiA9IHRoaXMub25TdG9wRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcbiAgICB0aGlzLm9uQ29tbWFuZFN1YiA9IHRoaXMub25Db21tYW5kRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcbiAgICAvL3RoaXMub25Db25maWdTdWIgPSB0aGlzLm9uQ29uZmlnRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcbiAgICB0aGlzLm9uUG9zdE1lc3NhZ2VTdWIgPSB0aGlzLm9uUG9zdE1lc3NhZ2VFdnQkLnN1YnNjcmliZSgoKSA9PiB7IH0pO1xuXG4gICAgdGhpcy5jbGllbnRQcm9taXNlID0gbnVsbDtcblxuICAgIHRoaXMub25SZWFkeSQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuXG4gICAgdGhpcy5vblN0YXJ0U3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25TdG9wU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub25Db21tYW5kU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIC8vdGhpcy5vbkNvbmZpZ1N1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uUG9zdE1lc3NhZ2VTdWI/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm9uUmVhZHkkLm5leHQoZmFsc2UpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHN0YXRpYyBpbml0KGRhdGE6IGFueSkge1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICAnJWPimpnvuI8gSW5pdGlhbGl6aW5nIFJldmVsIERpZ2l0YWwgY2xpZW50IGxpYnJhcnknLFxuICAgICAgJ2JhY2tncm91bmQtY29sb3I6Ymx1ZTsgY29sb3I6eWVsbG93OydcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgY2FsbGJhY2sgdG8gcGxheWVyIHNjcmlwdGluZyB3aXRoIHZhcmlhYmxlIGFyZ3VtZW50cy5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGFsbG93cyB0aGUgZ2FkZ2V0IHRvIGNvbW11bmljYXRlIHdpdGggcGxheWVyIHNjcmlwdGluZy5cbiAgICogSWYgdGhlIGFwcHJvcHJpYXRlIHNjcmlwdGluZyBpcyBpbiBwbGFjZSBpbiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGVtcGxhdGUsIFxuICAgKiBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgaW5pdGlhdGUgYSBjYWxsYmFjayB3aGljaCBjYW4gYmUgYWN0ZWQgdXBvbiBpbiBwbGF5ZXIgc2NyaXB0LlxuICAgKiBcbiAgICogQHBhcmFtIGFyZ3MgLSBWYXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrIChtYXggNSBhcmd1bWVudHMpXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFNlbmQgYSBzaW1wbGUgY2FsbGJhY2tcbiAgICogdGhpcy5jbGllbnQuY2FsbGJhY2soJ3Rlc3QnLCAnZGF0YScpO1xuICAgKiBcbiAgICogLy8gU2VuZCBtdWx0aXBsZSBwYXJhbWV0ZXJzXG4gICAqIHRoaXMuY2xpZW50LmNhbGxiYWNrKCdhY3Rpb24nLCAndmFsdWUxJywgJ3ZhbHVlMicsIHsgZGF0YTogJ29iamVjdCcgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGNhbGxiYWNrKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG5cbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xuXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzFdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzJdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzNdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGNsaWVudC5jYWxsYmFjayhhcmdzWzRdKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHVzZXIgcHJlZmVyZW5jZXMgaW50ZXJmYWNlIGV4cG9zZWQgYnkgdGhlIEdvb2dsZSBHYWRnZXRzIEFQSS5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGFjY2VzcyB0byBnYWRnZXQgcHJlZmVyZW5jZXMgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWRcbiAgICogaW4gdGhlIFJldmVsIERpZ2l0YWwgQ01TLiBVc2UgdGhpcyB0byByZXRyaWV2ZSB1c2VyLWNvbmZpZ3VyYWJsZSBzZXR0aW5nc1xuICAgKiBmb3IgeW91ciBnYWRnZXQuXG4gICAqIFxuICAgKiBAcmV0dXJucyBUaGUgR2FkZ2V0cyBBUEkgUHJlZnMgb2JqZWN0IGZvciBhY2Nlc3NpbmcgcHJlZmVyZW5jZSB2YWx1ZXNcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3RydWN0b3IocHVibGljIGNsaWVudDogUGxheWVyQ2xpZW50U2VydmljZSkge1xuICAgKiAgIGNvbnN0IHByZWZzID0gY2xpZW50LmdldFByZWZzKCk7XG4gICAqICAgY29uc3QgbXlTdHJpbmcgPSBwcmVmcy5nZXRTdHJpbmcoJ215U3RyaW5nUHJlZicpO1xuICAgKiAgIGNvbnN0IG15TnVtYmVyID0gcHJlZnMuZ2V0SW50KCdteU51bWJlclByZWYnKTtcbiAgICogICBjb25zdCBteUJvb2wgPSBwcmVmcy5nZXRCb29sKCdteUJvb2xQcmVmJyk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqIFxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9nYWRnZXRzL2RvY3MvYmFzaWN9IEdvb2dsZSBHYWRnZXRzIEFQSSBkb2N1bWVudGF0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJlZnMoKTogZ2FkZ2V0cy5QcmVmcyB7XG5cbiAgICByZXR1cm4gbmV3IHdpbmRvd1snZ2FkZ2V0cyddWydQcmVmcyddKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgY3VycmVudCBkZXZpY2UgdGltZSBpbiBJU084NjAxIGZvcm1hdC5cbiAgICogXG4gICAqIEN1cnJlbnQgZGV2aWNlIHRpbWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgZGV2aWNlIHRpbWV6b25lIGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UgaW4gdGhlIENNUy5cbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgdGltZS1zZW5zaXRpdmUgY29udGVudCBvciBzY2hlZHVsaW5nIG9wZXJhdGlvbnMgYmFzZWQgb25cbiAgICogdGhlIGRldmljZSdzIGxvY2FsIHRpbWUgcmF0aGVyIHRoYW4gYnJvd3NlciB0aW1lLlxuICAgKiBcbiAgICogQHBhcmFtIGRhdGUgLSBPcHRpb25hbC4gSWYgc3VwcGxpZWQsIHdpbGwgdHJhbnNsYXRlIHRoZSBzdXBwbGllZCBkYXRlL3RpbWUgdG8gZGV2aWNlIHRpbWUgYmFzZWQgb24gcmVzcGVjdGl2ZSB0aW1lem9uZXNcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gZGF0ZS90aW1lIGluIElTTzg2MDEgZm9ybWF0XG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEdldCBjdXJyZW50IGRldmljZSB0aW1lXG4gICAqIGNvbnN0IGN1cnJlbnRUaW1lID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZSgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIHRpbWU6JywgY3VycmVudFRpbWUpO1xuICAgKiBcbiAgICogLy8gQ29udmVydCBhIHNwZWNpZmljIGRhdGUgdG8gZGV2aWNlIHRpbWVcbiAgICogY29uc3Qgc3BlY2lmaWNEYXRlID0gbmV3IERhdGUoJzIwMjMtMDEtMDFUMTI6MDA6MDBaJyk7XG4gICAqIGNvbnN0IGRldmljZVRpbWUgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXREZXZpY2VUaW1lKHNwZWNpZmljRGF0ZSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWUoZGF0ZT86IERhdGUpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIGlmIChkYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZShkYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGltZXpvbmUgbmFtZSBjdXJyZW50bHkgYXNzaWduZWQgdG8gdGhlIGRldmljZS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB0aW1lem9uZSBuYW1lIChlLmcuLCBcIkFtZXJpY2EvTmV3X1lvcmtcIilcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdGltZXpvbmVOYW1lID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk7XG4gICAqIGNvbnNvbGUubG9nKCdEZXZpY2UgdGltZXpvbmU6JywgdGltZXpvbmVOYW1lKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lWm9uZU5hbWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0aW1lem9uZSBJRCBjdXJyZW50bHkgYXNzaWduZWQgdG8gdGhlIGRldmljZS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSB0aW1lem9uZSBJRFxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB0aW1lem9uZUlkID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVJRCgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIHRpbWV6b25lIElEOicsIHRpbWV6b25lSWQpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZUlEKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VUaW1lWm9uZUlEKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbnVtZXJpY2FsIG9mZnNldCBmcm9tIEdNVCBvZiB0aGUgdGltZXpvbmUgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdGltZXpvbmUgb2Zmc2V0IGluIGhvdXJzIChlLmcuLCAtNSBmb3IgRVNUKVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBvZmZzZXQgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXREZXZpY2VUaW1lWm9uZU9mZnNldCgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIHRpbWV6b25lIG9mZnNldDonLCBvZmZzZXQsICdob3VycyBmcm9tIEdNVCcpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZU9mZnNldCgpOiBQcm9taXNlPG51bWJlcj4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYW5ndWFnZSBjb2RlIG9mIHRoZSBsYW5ndWFnZSBjdXJyZW50bHkgYXNzaWduZWQgdG8gdGhlIGRldmljZS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBsYW5ndWFnZSBjb2RlIChlLmcuLCBcImVuLVVTXCIsIFwiZnItRlJcIilcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbGFuZ3VhZ2VDb2RlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0TGFuZ3VhZ2VDb2RlKCk7XG4gICAqIGNvbnNvbGUubG9nKCdEZXZpY2UgbGFuZ3VhZ2U6JywgbGFuZ3VhZ2VDb2RlKTtcbiAgICogLy8gVXNlIGZvciBsb2NhbGl6YXRpb25cbiAgICogdGhpcy5sb2FkTGFuZ3VhZ2VSZXNvdXJjZXMobGFuZ3VhZ2VDb2RlKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXRMYW5ndWFnZUNvZGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB1bmlxdWUgUmV2ZWwgRGlnaXRhbCBkZXZpY2Uga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLlxuICAgKiBcbiAgICogVGhlIGRldmljZSBrZXkgaXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzcGVjaWZpYyBwbGF5ZXIgZGV2aWNlXG4gICAqIGFuZCBjYW4gYmUgdXNlZCBmb3IgZGV2aWNlLXNwZWNpZmljIG9wZXJhdGlvbnMgb3IgcmVtb3RlIGNvbW1hbmRzLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGRldmljZSBrZXkgc3RyaW5nXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRldmljZUtleSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZUtleSgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIGtleTonLCBkZXZpY2VLZXkpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VLZXkoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZUtleSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgY29tbWFuZCB0byB0aGUgbG9jYWwgcGxheWVyIGRldmljZS5cbiAgICogXG4gICAqIENvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBwbGF5ZXIgb3IgdHJpZ2dlclxuICAgKiBzcGVjaWZpYyBiZWhhdmlvcnMuIFRoZSBjb21tYW5kIGlzIHByb2Nlc3NlZCBieSB0aGUgbG9jYWwgcGxheWVyIG9ubHkuXG4gICAqIFxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBjb21tYW5kIG5hbWUvaWRlbnRpZmllclxuICAgKiBAcGFyYW0gYXJnIC0gVGhlIGNvbW1hbmQgYXJndW1lbnQvcGF5bG9hZFxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTZW5kIGEgc2ltcGxlIGNvbW1hbmRcbiAgICogdGhpcy5jbGllbnQuc2VuZENvbW1hbmQoJ3JlZnJlc2gnLCAnJyk7XG4gICAqIFxuICAgKiAvLyBTZW5kIGEgY29tbWFuZCB3aXRoIGRhdGFcbiAgICogdGhpcy5jbGllbnQuc2VuZENvbW1hbmQoJ3NldFZvbHVtZScsICc1MCcpO1xuICAgKiBcbiAgICogLy8gU2VuZCBhIGNvbW1hbmQgd2l0aCBKU09OIGRhdGFcbiAgICogdGhpcy5jbGllbnQuc2VuZENvbW1hbmQoJ2NvbmZpZ3VyZScsIEpTT04uc3RyaW5naWZ5KHsgc2V0dGluZzogJ3ZhbHVlJyB9KSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHNlbmRDb21tYW5kKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XG4gICAgICBjbGllbnQuc2VuZENvbW1hbmQobmFtZSwgYXJnKTtcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgY29tbWFuZCB0byByZW1vdGUgcGxheWVyIGRldmljZXMgd2l0aCB0aGUgc3BlY2lmaWVkIGRldmljZSBrZXlzLlxuICAgKiBcbiAgICogUmVtb3RlIGNvbW1hbmRzIGFsbG93IGNyb3NzLWRldmljZSBjb21tdW5pY2F0aW9uIHdpdGhpbiB0aGUgc2FtZSBSZXZlbCBEaWdpdGFsIGFjY291bnQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBzeW5jaHJvbml6ZWQgZGlzcGxheXMsIGRldmljZSBjb29yZGluYXRpb24sIG9yIHJlbW90ZSBjb250cm9sIHNjZW5hcmlvcy5cbiAgICogXG4gICAqIE5vdGU6IFJlbW90ZSBjb21tYW5kcyBjYW4gb25seSBiZSBkZWxpdmVyZWQgdG8gZGV2aWNlcyB3aXRoaW4gdGhlIHNhbWUgYWNjb3VudCBhcyB0aGUgc2VuZGVyIGRldmljZS5cbiAgICogXG4gICAqIEBwYXJhbSBkZXZpY2VLZXlzIC0gQXJyYXkgb2YgdGFyZ2V0IGRldmljZSBrZXlzIHRvIHNlbmQgdGhlIGNvbW1hbmQgdG9cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgY29tbWFuZCBuYW1lL2lkZW50aWZpZXJcbiAgICogQHBhcmFtIGFyZyAtIFRoZSBjb21tYW5kIGFyZ3VtZW50L3BheWxvYWRcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gU2VuZCBjb21tYW5kIHRvIHNwZWNpZmljIGRldmljZXNcbiAgICogY29uc3QgdGFyZ2V0RGV2aWNlcyA9IFsnZGV2aWNlLWtleS0xJywgJ2RldmljZS1rZXktMiddO1xuICAgKiB0aGlzLmNsaWVudC5zZW5kUmVtb3RlQ29tbWFuZCh0YXJnZXREZXZpY2VzLCAnc3luY0FjdGlvbicsICdzdGFydCcpO1xuICAgKiBcbiAgICogLy8gQnJvYWRjYXN0IHRvIG11bHRpcGxlIGRldmljZXNcbiAgICogdGhpcy5jbGllbnQuc2VuZFJlbW90ZUNvbW1hbmQoXG4gICAqICAgWydsb2JieS1kaXNwbGF5JywgJ2tpb3NrLTEnLCAna2lvc2stMiddLCBcbiAgICogICAndXBkYXRlQ29udGVudCcsIFxuICAgKiAgIEpTT04uc3RyaW5naWZ5KHsgY29udGVudElkOiAnMTIzNDUnIH0pXG4gICAqICk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHNlbmRSZW1vdGVDb21tYW5kKGRldmljZUtleXM6IHN0cmluZ1tdLCBuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xuICAgICAgY2xpZW50LnNlbmRSZW1vdGVDb21tYW5kKGRldmljZUtleXMsIG5hbWUsIGFyZyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyBhbiBhbmFseXRpY3MgZXZlbnQgZm9yIHVzZSB3aXRoIEFkSGF3ayBhbmFseXRpY3MgYW5kIHJlcG9ydGluZy5cbiAgICogXG4gICAqIEV2ZW50cyBhcmUgdXNlZCBmb3IgdHJhY2tpbmcgdmFyaW91cyBtZXRyaWNzIGluY2x1ZGluZyB1c2FnZSBzdGF0aXN0aWNzLCBcbiAgICogcGxheWVyIGNvbmRpdGlvbiwgc3RhdGUgY2hhbmdlcywgdXNlciBpbnRlcmFjdGlvbnMsIGFuZCBjdXN0b20gYnVzaW5lc3MgbWV0cmljcy5cbiAgICogVGhlc2UgZXZlbnRzIGNhbiBiZSB2aWV3ZWQgaW4gdGhlIFJldmVsIERpZ2l0YWwgYW5hbHl0aWNzIGRhc2hib2FyZC5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudE5hbWUgLSBVbmlxdWUgbmFtZSBmb3IgdGhpcyBldmVudCAoc2hvdWxkIGJlIGRlc2NyaXB0aXZlIGFuZCBjb25zaXN0ZW50KVxuICAgKiBAcGFyYW0gcHJvcGVydGllcyAtIE9wdGlvbmFsIG1hcCBvZiB1c2VyLWRlZmluZWQgcHJvcGVydGllcyB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIGV2ZW50XG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFNpbXBsZSBldmVudCB0cmFja2luZ1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygnZ2FkZ2V0X2xvYWRlZCcpO1xuICAgKiBcbiAgICogLy8gRXZlbnQgd2l0aCBwcm9wZXJ0aWVzXG4gICAqIHRoaXMuY2xpZW50LnRyYWNrKCd1c2VyX2ludGVyYWN0aW9uJywge1xuICAgKiAgIGFjdGlvbjogJ2J1dHRvbl9jbGljaycsXG4gICAqICAgYnV0dG9uX2lkOiAnc3RhcnRfYnV0dG9uJyxcbiAgICogICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgKiB9KTtcbiAgICogXG4gICAqIC8vIFBlcmZvcm1hbmNlIHRyYWNraW5nXG4gICAqIHRoaXMuY2xpZW50LnRyYWNrKCdjb250ZW50X2Rpc3BsYXllZCcsIHtcbiAgICogICBjb250ZW50X3R5cGU6ICd2aWRlbycsXG4gICAqICAgZHVyYXRpb246IDMwLFxuICAgKiAgIHF1YWxpdHk6ICdIRCdcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHRyYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzogSUV2ZW50UHJvcGVydGllcyk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcbiAgICAgIGNsaWVudC50cmFjayhldmVudE5hbWUsIEpTT04uc3RyaW5naWZ5KHByb3BlcnRpZXMpKTtcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyBhIHRpbWVkIGV2ZW50IGZvciBkdXJhdGlvbiB0cmFja2luZy5cbiAgICogXG4gICAqIFRpbWVkIGV2ZW50cyBhcmUgdXNlZnVsIGZvciB0cmFja2luZyB0aGUgZHVyYXRpb24gb2Ygb3BlcmF0aW9ucyBvciB1c2VyIGludGVyYWN0aW9ucy5cbiAgICogVGhpcyBtZXRob2QgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGNhbGwgdG8gdHJhY2soKSB3aXRoIHRoZSBzYW1lIGV2ZW50IG5hbWUgdG8gY29tcGxldGVcbiAgICogdGhlIHRpbWluZyBtZWFzdXJlbWVudC4gVGhlIGR1cmF0aW9uIHdpbGwgYmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGFuZCBpbmNsdWRlZFxuICAgKiBpbiB0aGUgZXZlbnQgcHJvcGVydGllcy5cbiAgICogXG4gICAqIEBwYXJhbSBldmVudE5hbWUgLSBVbmlxdWUgbmFtZSBmb3IgdGhpcyB0aW1lZCBldmVudCAobXVzdCBtYXRjaCB0aGUgc3Vic2VxdWVudCB0cmFjaygpIGNhbGwpXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFN0YXJ0IHRpbWluZyBhbiBldmVudFxuICAgKiB0aGlzLmNsaWVudC50aW1lRXZlbnQoJ3ZpZGVvX3BsYXliYWNrJyk7XG4gICAqIFxuICAgKiAvLyAuLi4gdmlkZW8gcGxheXMgZm9yIHNvbWUgZHVyYXRpb24gLi4uXG4gICAqIFxuICAgKiAvLyBFbmQgdGltaW5nIGFuZCBsb2cgdGhlIGV2ZW50IHdpdGggZHVyYXRpb25cbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3ZpZGVvX3BsYXliYWNrJywge1xuICAgKiAgIHZpZGVvX2lkOiAnYWJjMTIzJyxcbiAgICogICBxdWFsaXR5OiAnSEQnXG4gICAqIH0pOyAvLyBEdXJhdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWRcbiAgICogXG4gICAqIC8vIEV4YW1wbGUgZm9yIHVzZXIgaW50ZXJhY3Rpb24gdGltaW5nXG4gICAqIHRoaXMuY2xpZW50LnRpbWVFdmVudCgnZm9ybV9jb21wbGV0aW9uJyk7XG4gICAqIC8vIC4uLiB1c2VyIGZpbGxzIG91dCBmb3JtIC4uLlxuICAgKiB0aGlzLmNsaWVudC50cmFjaygnZm9ybV9jb21wbGV0aW9uJywgeyBmb3JtX3R5cGU6ICdjb250YWN0JyB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgdGltZUV2ZW50KGV2ZW50TmFtZTogc3RyaW5nKTogdm9pZCB7XG5cbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xuICAgICAgY2xpZW50LnRpbWVFdmVudChldmVudE5hbWUpO1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBhbmFseXRpY3MgZXZlbnQgc2Vzc2lvbiBmb3IgZ3JvdXBpbmcgcmVsYXRlZCBldmVudHMuXG4gICAqIFxuICAgKiBBIHNlc3Npb24gaXMgYSB3YXkgb2YgZ3JvdXBpbmcgZXZlbnRzIHRvZ2V0aGVyIGZvciBhbmFseXNpcy4gRWFjaCBldmVudCB0cmFja2VkXG4gICAqIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2Qgd2lsbCBoYXZlIHRoZSBzYW1lIHNlc3Npb24gSUQgdW50aWwgYSBuZXcgc2Vzc2lvbiBpcyBjcmVhdGVkLlxuICAgKiBTZXNzaW9uIElEcyBhcmUgcmFuZG9tbHkgZ2VuZXJhdGVkIHVubGVzcyBleHBsaWNpdGx5IHByb3ZpZGVkLlxuICAgKiBcbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIHRyYWNraW5nIHVzZXIgam91cm5leXMsIHdvcmtmbG93IGNvbXBsZXRpb24sIG9yIGdyb3VwaW5nXG4gICAqIHJlbGF0ZWQgaW50ZXJhY3Rpb25zIHdpdGhpbiBhIHNwZWNpZmljIHRpbWUgcGVyaW9kLlxuICAgKiBcbiAgICogQHBhcmFtIGlkIC0gT3B0aW9uYWwgdXNlci1zdXBwbGllZCBzZXNzaW9uIElELiBJZiBub3QgcHJvdmlkZWQsIGEgcmFuZG9tIHNlc3Npb24gSUQgd2lsbCBiZSBnZW5lcmF0ZWRcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gU3RhcnQgYSBuZXcgc2Vzc2lvbiB3aXRoIGF1dG8tZ2VuZXJhdGVkIElEXG4gICAqIHRoaXMuY2xpZW50Lm5ld0V2ZW50U2Vzc2lvbigpO1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygnc2Vzc2lvbl9zdGFydCcpO1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygndXNlcl9hY3Rpb25fMScpO1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygndXNlcl9hY3Rpb25fMicpO1xuICAgKiBcbiAgICogLy8gU3RhcnQgYSBzZXNzaW9uIHdpdGggY3VzdG9tIElEXG4gICAqIHRoaXMuY2xpZW50Lm5ld0V2ZW50U2Vzc2lvbigndXNlci13b3JrZmxvdy0xMjM0NScpO1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygnd29ya2Zsb3dfc3RhcnQnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3N0ZXBfY29tcGxldGVkJywgeyBzdGVwOiAxIH0pO1xuICAgKiBcbiAgICogLy8gU3RhcnQgYSBuZXcgc2Vzc2lvbiBmb3IgZGlmZmVyZW50IHdvcmtmbG93XG4gICAqIHRoaXMuY2xpZW50Lm5ld0V2ZW50U2Vzc2lvbigpO1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygnZGlmZmVyZW50X3dvcmtmbG93X3N0YXJ0Jyk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG5ld0V2ZW50U2Vzc2lvbihpZD86IHN0cmluZyk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcbiAgICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudC5uZXdFdmVudFNlc3Npb24oaWQpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgcm9vdCBmb2xkZXIgcGF0aCB1dGlsaXplZCBieSB0aGlzIHBsYXllciBkZXZpY2UuXG4gICAqIFxuICAgKiBUaGlzIHJldHVybnMgdGhlIGJhc2UgZGlyZWN0b3J5IHBhdGggd2hlcmUgdGhlIFJldmVsIERpZ2l0YWwgcGxheWVyXG4gICAqIHN0b3JlcyBpdHMgZmlsZXMgYW5kIHJlc291cmNlcyBvbiB0aGUgbG9jYWwgZGV2aWNlLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHBhdGggb2YgdGhlIHJvb3QgZm9sZGVyXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJvb3RQYXRoID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0UmV2ZWxSb290KCk7XG4gICAqIGNvbnNvbGUubG9nKCdQbGF5ZXIgcm9vdCBkaXJlY3Rvcnk6Jywgcm9vdFBhdGgpO1xuICAgKiAvLyBVc2UgZm9yIGNvbnN0cnVjdGluZyBmaWxlIHBhdGhzIG9yIHVuZGVyc3RhbmRpbmcgc3RvcmFnZSBzdHJ1Y3R1cmVcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmV2ZWxSb290KCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXRSZXZlbFJvb3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgbWFwIG9mIGNvbW1hbmRzIGN1cnJlbnRseSBhY3RpdmUgZm9yIHRoaXMgZGV2aWNlLlxuICAgKiBcbiAgICogVGhpcyByZXR1cm5zIHRoZSBjdXJyZW50IGNvbW1hbmQgY29uZmlndXJhdGlvbiB0aGF0IGRlZmluZXMgaG93IHRoZSBkZXZpY2VcbiAgICogcmVzcG9uZHMgdG8gdmFyaW91cyBjb21tYW5kIHRyaWdnZXJzIGFuZCByZW1vdGUgY29tbWFuZHMuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBhIG1hcCBvZiBjdXJyZW50bHkgYWN0aXZlIGNvbW1hbmRzXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGNvbW1hbmRNYXAgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRDb21tYW5kTWFwKCk7XG4gICAqIGNvbnNvbGUubG9nKCdBY3RpdmUgY29tbWFuZHM6JywgY29tbWFuZE1hcCk7XG4gICAqIFxuICAgKiAvLyBDaGVjayBpZiBzcGVjaWZpYyBjb21tYW5kIGlzIGF2YWlsYWJsZVxuICAgKiBpZiAoY29tbWFuZE1hcFsnY3VzdG9tQ29tbWFuZCddKSB7XG4gICAqICAgY29uc29sZS5sb2coJ0N1c3RvbSBjb21tYW5kIGlzIGF2YWlsYWJsZScpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENvbW1hbmRNYXAoKTogUHJvbWlzZTxhbnk+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCBjbGllbnQuZ2V0Q29tbWFuZE1hcCgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduYWxzIHRvIHRoZSBwbGF5ZXIgdGhhdCB0aGlzIGdhZGdldCBoYXMgY29tcGxldGVkIGl0cyB2aXN1YWxpemF0aW9uLlxuICAgKiBcbiAgICogVGhpcyBtZXRob2Qgbm90aWZpZXMgdGhlIHBsYXllciB0aGF0IHRoZSBjdXJyZW50IGdhZGdldCBoYXMgZmluaXNoZWQgaXRzXG4gICAqIGNvbnRlbnQgZGlzcGxheSBvciBpbnRlcmFjdGlvbiBjeWNsZS4gVGhlIHBsYXllciBjYW4gdGhlbiBwcm9jZWVkIHdpdGhcbiAgICogdGhlIG5leHQgaXRlbSBpbiBhIHBsYXlsaXN0IGlmIGFwcGxpY2FibGUsIG9yIGhhbmRsZSB0aGUgY29tcGxldGlvblxuICAgKiBhY2NvcmRpbmcgdG8gaXRzIGNvbmZpZ3VyYXRpb24uXG4gICAqIFxuICAgKiBDYWxsIHRoaXMgbWV0aG9kIHdoZW4geW91ciBnYWRnZXQgaGFzIGNvbXBsZXRlZCBpdHMgaW50ZW5kZWQgZnVuY3Rpb24sXG4gICAqIHN1Y2ggYXMgZmluaXNoaW5nIGFuIGFuaW1hdGlvbiwgY29tcGxldGluZyBhIGZvcm0sIG9yIHJlYWNoaW5nIGEgbmF0dXJhbFxuICAgKiBzdG9wcGluZyBwb2ludC5cbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gQWZ0ZXIgY29tcGxldGluZyBhbiBhbmltYXRpb25cbiAgICogcHJpdmF0ZSBvbkFuaW1hdGlvbkNvbXBsZXRlKCk6IHZvaWQge1xuICAgKiAgIHRoaXMuY2xpZW50LmZpbmlzaCgpO1xuICAgKiB9XG4gICAqIFxuICAgKiAvLyBBZnRlciB1c2VyIGludGVyYWN0aW9uIGlzIGNvbXBsZXRlXG4gICAqIHByaXZhdGUgb25Gb3JtU3VibWl0dGVkKCk6IHZvaWQge1xuICAgKiAgIHRoaXMuc2F2ZUZvcm1EYXRhKCk7XG4gICAqICAgdGhpcy5jbGllbnQuZmluaXNoKCk7XG4gICAqIH1cbiAgICogXG4gICAqIC8vIEFmdGVyIGEgdGltZWQgZGlzcGxheSBwZXJpb2RcbiAgICogc2V0VGltZW91dCgoKSA9PiB7XG4gICAqICAgdGhpcy5jbGllbnQuZmluaXNoKCk7XG4gICAqIH0sIDMwMDAwKTsgLy8gMzAgc2Vjb25kc1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBmaW5pc2goKTogdm9pZCB7XG5cbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xuXG4gICAgICBjbGllbnQuZmluaXNoKCk7XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGdhZGdldCBpcyBydW5uaW5nIGluIHByZXZpZXcgbW9kZS5cbiAgICogXG4gICAqIFByZXZpZXcgbW9kZSBpcyBlbmFibGVkIHdoZW4gdGhlIGdhZGdldCBpcyBiZWluZyBlZGl0ZWQgaW4gdGhlIFJldmVsIERpZ2l0YWwgQ01TLFxuICAgKiB0ZXN0ZWQgaW4gdGhlIGdhZGdldCBlZGl0b3IsIG9yIG90aGVyd2lzZSBub3QgcnVubmluZyBpbiBhIG5vcm1hbCBwbGF5ZXIgZW52aXJvbm1lbnQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBwcm92aWRpbmcgZGlmZmVyZW50IGJlaGF2aW9yIGR1cmluZyBkZXZlbG9wbWVudC90ZXN0aW5nIHZlcnN1c1xuICAgKiBwcm9kdWN0aW9uIGRlcGxveW1lbnQuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0cnVlIGlmIHJ1bm5pbmcgaW4gcHJldmlldyBtb2RlLCBmYWxzZSBpZiBydW5uaW5nIG9uIGFjdHVhbCBwbGF5ZXJcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgaXNQcmV2aWV3ID0gYXdhaXQgdGhpcy5jbGllbnQuaXNQcmV2aWV3TW9kZSgpO1xuICAgKiBcbiAgICogaWYgKGlzUHJldmlldykge1xuICAgKiAgIGNvbnNvbGUubG9nKCdSdW5uaW5nIGluIHByZXZpZXcgbW9kZSAtIHVzaW5nIG1vY2sgZGF0YScpO1xuICAgKiAgIHRoaXMubG9hZE1vY2tEYXRhKCk7XG4gICAqIH0gZWxzZSB7XG4gICAqICAgY29uc29sZS5sb2coJ1J1bm5pbmcgb24gcGxheWVyIGRldmljZSAtIHVzaW5nIGxpdmUgZGF0YScpO1xuICAgKiAgIHRoaXMubG9hZExpdmVEYXRhKCk7XG4gICAqIH1cbiAgICogXG4gICAqIC8vIFNob3cgZGlmZmVyZW50IFVJIGluIHByZXZpZXdcbiAgICogdGhpcy5zaG93UHJldmlld0luZGljYXRvciA9IGlzUHJldmlldztcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaXNQcmV2aWV3TW9kZSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gY2xpZW50IGluc3RhbmNlb2YgTm9vcENsaWVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXZpY2UgcnVubmluZyB0aGUgcGxheWVyLlxuICAgKiBcbiAgICogUmV0dXJucyBjb21wcmVoZW5zaXZlIGRldmljZSBkZXRhaWxzIGluY2x1ZGluZyBuYW1lLCByZWdpc3RyYXRpb24ga2V5LCB0eXBlLFxuICAgKiBzZXJ2aWNlIGRhdGUsIGxhbmd1YWdlLCB0aW1lem9uZSwgdGFncywgYW5kIGxvY2F0aW9uIGluZm9ybWF0aW9uLiBUaGlzIGRhdGFcbiAgICogaXMgY29uZmlndXJlZCBpbiB0aGUgUmV2ZWwgRGlnaXRhbCBDTVMgZm9yIGVhY2ggZGV2aWNlLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gZGV2aWNlIGRldGFpbHMgb2JqZWN0LCBvciBudWxsIGlmIG5vdCBhdmFpbGFibGVcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZGV2aWNlID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlKCk7XG4gICAqIFxuICAgKiBpZiAoZGV2aWNlKSB7XG4gICAqICAgY29uc29sZS5sb2coJ0RldmljZSBuYW1lOicsIGRldmljZS5uYW1lKTtcbiAgICogICBjb25zb2xlLmxvZygnRGV2aWNlIHR5cGU6JywgZGV2aWNlLmRldmljZVR5cGUpO1xuICAgKiAgIGNvbnNvbGUubG9nKCdMb2NhdGlvbjonLCBkZXZpY2UubG9jYXRpb24uY2l0eSwgZGV2aWNlLmxvY2F0aW9uLnN0YXRlKTtcbiAgICogICBjb25zb2xlLmxvZygnVGFnczonLCBkZXZpY2UudGFncyk7XG4gICAqICAgXG4gICAqICAgLy8gVXNlIGRldmljZSBpbmZvIGZvciBjdXN0b21pemF0aW9uXG4gICAqICAgaWYgKGRldmljZS5sb2NhdGlvbi5jb3VudHJ5ID09PSAnVVMnKSB7XG4gICAqICAgICB0aGlzLmxvYWRVU0NvbnRlbnQoKTtcbiAgICogICB9XG4gICAqICAgXG4gICAqICAgLy8gQ2hlY2sgZGV2aWNlIGNhcGFiaWxpdGllcyBiYXNlZCBvbiB0eXBlXG4gICAqICAgaWYgKGRldmljZS5kZXZpY2VUeXBlID09PSAnYW5kcm9pZCcpIHtcbiAgICogICAgIHRoaXMuZW5hYmxlVG91Y2hGZWF0dXJlcygpO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2UoKTogUHJvbWlzZTxJRGV2aWNlIHwgbnVsbD4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIGNvbnN0IG9iajogYW55ID0gSlNPTi5wYXJzZSg8c3RyaW5nPmF3YWl0IGNsaWVudC5nZXREZXZpY2UoKSk7XG5cbiAgICBjb25zdCBkZXZpY2U6IElEZXZpY2VbXSA9IFtvYmpdLm1hcCgoZGV2aWNlOiBhbnkpID0+IHtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogZGV2aWNlLm5hbWUsXG4gICAgICAgIHJlZ2lzdHJhdGlvbktleTogZGV2aWNlLmtleSxcbiAgICAgICAgZGV2aWNlVHlwZTogZGV2aWNlLmRldmljZXR5cGUsXG4gICAgICAgIGVudGVyZWRTZXJ2aWNlOiBuZXcgRGF0ZShkZXZpY2UuZW50ZXJlZHNlcnZpY2UpLFxuICAgICAgICBsYW5nQ29kZTogZGV2aWNlLmxhbmdjb2RlLFxuICAgICAgICB0aW1lWm9uZTogZGV2aWNlLnRpbWV6b25lLFxuICAgICAgICB0YWdzOiBkZXZpY2UuZGVzY3JpcHRpb24/LnNwbGl0KCdcXG4nKSxcbiAgICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgICBjaXR5OiBkZXZpY2UubG9jYXRpb24/LmNpdHksXG4gICAgICAgICAgc3RhdGU6IGRldmljZS5sb2NhdGlvbj8uc3RhdGUsXG4gICAgICAgICAgY291bnRyeTogZGV2aWNlLmxvY2F0aW9uPy5jb3VudHJ5LFxuICAgICAgICAgIHBvc3RhbENvZGU6IGRldmljZS5sb2NhdGlvbj8ucG9zdGFsY29kZSxcbiAgICAgICAgICBhZGRyZXNzOiBkZXZpY2UubG9jYXRpb24/LmFkZHJlc3MsXG4gICAgICAgICAgbGF0aXR1ZGU6IGRldmljZS5sb2NhdGlvbj8ubGF0aXR1ZGUsXG4gICAgICAgICAgbG9uZ2l0dWRlOiBkZXZpY2UubG9jYXRpb24/LmxvbmdpdHVkZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRldmljZVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB3aWR0aCBvZiB0aGUgdmlzdWFsaXphdGlvbiBhcmVhIGluIHBpeGVscy5cbiAgICogXG4gICAqIFRoaXMgcmV0dXJucyB0aGUgYXZhaWxhYmxlIHdpZHRoIGZvciBjb250ZW50IGRpc3BsYXksIHdoaWNoIG1heSBiZVxuICAgKiBkaWZmZXJlbnQgZnJvbSB0aGUgZnVsbCBzY3JlZW4gd2lkdGggZGVwZW5kaW5nIG9uIHBsYXllciBjb25maWd1cmF0aW9uXG4gICAqIGFuZCB0ZW1wbGF0ZSBsYXlvdXQuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB3aWR0aCBpbiBwaXhlbHMsIG9yIG51bGwgaWYgbm90IGF2YWlsYWJsZVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB3aWR0aCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFdpZHRoKCk7XG4gICAqIFxuICAgKiBpZiAod2lkdGgpIHtcbiAgICogICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIHdpZHRoOicsIHdpZHRoLCAncGl4ZWxzJyk7XG4gICAqICAgXG4gICAqICAgLy8gQWRhcHQgY29udGVudCBsYXlvdXQgYmFzZWQgb24gd2lkdGhcbiAgICogICBpZiAod2lkdGggPCA4MDApIHtcbiAgICogICAgIHRoaXMuZW5hYmxlTW9iaWxlTGF5b3V0KCk7XG4gICAqICAgfSBlbHNlIHtcbiAgICogICAgIHRoaXMuZW5hYmxlRGVza3RvcExheW91dCgpO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRXaWR0aCgpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gY2xpZW50LmdldFdpZHRoKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSB2aXN1YWxpemF0aW9uIGFyZWEgaW4gcGl4ZWxzLlxuICAgKiBcbiAgICogVGhpcyByZXR1cm5zIHRoZSBhdmFpbGFibGUgaGVpZ2h0IGZvciBjb250ZW50IGRpc3BsYXksIHdoaWNoIG1heSBiZVxuICAgKiBkaWZmZXJlbnQgZnJvbSB0aGUgZnVsbCBzY3JlZW4gaGVpZ2h0IGRlcGVuZGluZyBvbiBwbGF5ZXIgY29uZmlndXJhdGlvblxuICAgKiBhbmQgdGVtcGxhdGUgbGF5b3V0LlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gaGVpZ2h0IGluIHBpeGVscywgb3IgbnVsbCBpZiBub3QgYXZhaWxhYmxlXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGhlaWdodCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldEhlaWdodCgpO1xuICAgKiBcbiAgICogaWYgKGhlaWdodCkge1xuICAgKiAgIGNvbnNvbGUubG9nKCdBdmFpbGFibGUgaGVpZ2h0OicsIGhlaWdodCwgJ3BpeGVscycpO1xuICAgKiAgIFxuICAgKiAgIC8vIENhbGN1bGF0ZSBhc3BlY3QgcmF0aW8gZm9yIHJlc3BvbnNpdmUgZGVzaWduXG4gICAqICAgY29uc3Qgd2lkdGggPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRXaWR0aCgpO1xuICAgKiAgIGNvbnN0IGFzcGVjdFJhdGlvID0gd2lkdGggLyBoZWlnaHQ7XG4gICAqICAgdGhpcy5hZGp1c3RDb250ZW50Rm9yQXNwZWN0UmF0aW8oYXNwZWN0UmF0aW8pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEhlaWdodCgpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gY2xpZW50LmdldEhlaWdodCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGR1cmF0aW9uIG9mIHRoZSBjdXJyZW50bHkgcGxheWluZyBjb250ZW50IGl0ZW0uXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBpcyBvbmx5IGFwcGxpY2FibGUgd2hlbiB0aGUgZ2FkZ2V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHBsYXlsaXN0XG4gICAqIGFuZCByZXR1cm5zIHRoZSBkdXJhdGlvbiBhc3NpZ25lZCB0byB0aGUgY3VycmVudCBwbGF5bGlzdCBpdGVtLiBUaGUgZHVyYXRpb25cbiAgICogZGV0ZXJtaW5lcyBob3cgbG9uZyB0aGUgY29udGVudCBzaG91bGQgYmUgZGlzcGxheWVkIGJlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQgaXRlbS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcywgb3IgbnVsbCBpZiBub3QgYXBwbGljYWJsZS9hdmFpbGFibGVcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZHVyYXRpb24gPSBhd2FpdCB0aGlzLmNsaWVudC5nZXREdXJhdGlvbigpO1xuICAgKiBcbiAgICogaWYgKGR1cmF0aW9uKSB7XG4gICAqICAgY29uc29sZS5sb2coJ0NvbnRlbnQgZHVyYXRpb246JywgZHVyYXRpb24sICdtaWxsaXNlY29uZHMnKTtcbiAgICogICBcbiAgICogICAvLyBTZXQgdXAgYXV0by1maW5pc2ggdGltZXJcbiAgICogICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICogICAgIHRoaXMuY2xpZW50LmZpbmlzaCgpO1xuICAgKiAgIH0sIGR1cmF0aW9uKTtcbiAgICogICBcbiAgICogICAvLyBTaG93IHByb2dyZXNzIGluZGljYXRvclxuICAgKiAgIHRoaXMuc3RhcnRQcm9ncmVzc0luZGljYXRvcihkdXJhdGlvbik7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RHVyYXRpb24oKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXREdXJhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgUmV2ZWwgRGlnaXRhbCBTREsuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgU0RLIHZlcnNpb24gc3RyaW5nXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHZlcnNpb24gPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRTZGtWZXJzaW9uKCk7XG4gICAqIGNvbnNvbGUubG9nKCdTREsgVmVyc2lvbjonLCB2ZXJzaW9uKTtcbiAgICogXG4gICAqIC8vIFVzZSBmb3IgY29tcGF0aWJpbGl0eSBjaGVja3Mgb3IgbG9nZ2luZ1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygnZ2FkZ2V0X2xvYWRlZCcsIHsgc2RrVmVyc2lvbjogdmVyc2lvbiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U2RrVmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2ZXJzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGNvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXMgdG8gdGhlIGdhZGdldCAocHJldmlldyBtb2RlIG9ubHkpLlxuICAgKiBcbiAgICogVGhpcyBtZXRob2QgaXMgb25seSBhdmFpbGFibGUgd2hlbiBydW5uaW5nIGluIHByZXZpZXcgbW9kZSAodHlwaWNhbGx5IGR1cmluZ1xuICAgKiBnYWRnZXQgZGV2ZWxvcG1lbnQgb3IgdGVzdGluZyBpbiB0aGUgQ01TKS4gSXQgYWxsb3dzIGFwcGx5aW5nIGNvbmZpZ3VyYXRpb25cbiAgICogY2hhbmdlcyB0aGF0IHdvdWxkIG5vcm1hbGx5IGNvbWUgZnJvbSB0aGUgZ2FkZ2V0J3MgcHJlZmVyZW5jZSBzZXR0aW5ncy5cbiAgICogXG4gICAqIEBwYXJhbSBwcmVmcyAtIERpY3Rpb25hcnkgb2YgcHJlZmVyZW5jZSBrZXktdmFsdWUgcGFpcnMgdG8gYXBwbHlcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaWYgKGF3YWl0IHRoaXMuY2xpZW50LmlzUHJldmlld01vZGUoKSkge1xuICAgKiAgIC8vIEFwcGx5IHRlc3QgY29uZmlndXJhdGlvbiBpbiBwcmV2aWV3XG4gICAqICAgYXdhaXQgdGhpcy5jbGllbnQuYXBwbHlDb25maWcoe1xuICAgKiAgICAgJ3RpdGxlJzogJ1Rlc3QgVGl0bGUnLFxuICAgKiAgICAgJ2JhY2tncm91bmRDb2xvcic6ICcjZmYwMDAwJyxcbiAgICogICAgICdzaG93Qm9yZGVyJzogdHJ1ZSxcbiAgICogICAgICdyZWZyZXNoSW50ZXJ2YWwnOiAzMFxuICAgKiAgIH0pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFwcGx5Q29uZmlnKHByZWZzOiBJRGljdGlvbmFyeTxhbnk+KSB7XG5cbiAgICBpZiAoYXdhaXQgdGhpcy5pc1ByZXZpZXdNb2RlKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG4gICAgICBjbGllbnQuYXBwbHlDb25maWcocHJlZnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgJyVjYXBwbHlDb25maWcoKSBpcyBvbmx5IGF2YWlsYWJsZSBpbiBwcmV2aWV3IG1vZGUuJyxcbiAgICAgICAgJ2JhY2tncm91bmQtY29sb3I6Ymx1ZTsgY29sb3I6eWVsbG93OydcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0eXBlZCB3cmFwcGVyIGZvciBhIFJldmVsIERpZ2l0YWwgZGF0YSB0YWJsZS5cbiAgICpcbiAgICogVGhlIGRhdGEgdGFibGUgZmVhdHVyZSBtdXN0IGJlIGVuYWJsZWQgZm9yIHRoZSBnYWRnZXQuIFRoZSByZXR1cm5lZFxuICAgKiB7QGxpbmsgRGF0YVRhYmxlUmVmfSBwcm92aWRlcyB0eXBlZCBQcm9taXNlLWJhc2VkIG1ldGhvZHMgYW5kIFJ4SlNcbiAgICogT2JzZXJ2YWJsZXMgZm9yIHJlYWwtdGltZSByb3cgY2hhbmdlIGV2ZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHRhYmxlSWQgLSBUaGUgZGF0YSB0YWJsZSBJRCAoZS5nLiAndGJsX21lbnVfaXRlbXMnKVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERhdGFUYWJsZVJlZn0gaW5zdGFuY2VcbiAgICogQHRocm93cyBFcnJvciBpZiB0aGUgZ2xvYmFsIGRhdGF0YWJsZSBsaWJyYXJ5IGlzIG5vdCBsb2FkZWRcbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkdCA9IHRoaXMuY2xpZW50LmNyZWF0ZURhdGFUYWJsZSgndGJsX21lbnVfaXRlbXMnKTtcbiAgICpcbiAgICogLy8gRmV0Y2ggcm93cyB3aXRoIGZpbHRlcmluZyBhbmQgc29ydGluZ1xuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBkdC5nZXRSb3dzKHtcbiAgICogICBmaWx0ZXI6IHsgY2F0ZWdvcnk6ICdFbnRyZWUnLCBwcmljZTogeyBvcDogJ2x0ZScsIHZhbHVlOiAyNSB9IH0sXG4gICAqICAgc29ydDogJ3ByaWNlJyxcbiAgICogICBzb3J0RGlyOiAnYXNjJ1xuICAgKiB9KTtcbiAgICpcbiAgICogLy8gU3Vic2NyaWJlIHRvIHJlYWwtdGltZSB1cGRhdGVzXG4gICAqIGR0LnJvd1VwZGF0ZWQkLnN1YnNjcmliZShjaGFuZ2UgPT4gY29uc29sZS5sb2coJ1JvdyB1cGRhdGVkOicsIGNoYW5nZSkpO1xuICAgKiBkdC5yb3dDcmVhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKCdSb3cgY3JlYXRlZDonLCBjaGFuZ2UpKTtcbiAgICogZHQucm93RGVsZXRlZCQuc3Vic2NyaWJlKGNoYW5nZSA9PiBjb25zb2xlLmxvZygnUm93IGRlbGV0ZWQ6JywgY2hhbmdlKSk7XG4gICAqXG4gICAqIC8vIENsZWFudXAgd2hlbiBkb25lXG4gICAqIGR0LmRpc3Bvc2UoKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlRGF0YVRhYmxlKHRhYmxlSWQ6IHN0cmluZywgb3B0aW9ucz86IElEYXRhVGFibGVPcHRpb25zKTogRGF0YVRhYmxlUmVmIHtcbiAgICByZXR1cm4gbmV3IERhdGFUYWJsZVJlZih0YWJsZUlkLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8vIC0tLVxuICAvLyBQUklWQVRFIE1FVEhPRFMuXG4gIC8vIC0tLVxuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIGdldENsaWVudCgpOiBQcm9taXNlPElDbGllbnQ+IHtcblxuICAgIGlmICh0aGlzLmNsaWVudFByb21pc2UpIHtcblxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UpO1xuICAgIH1cblxuICAgIGlmICgod2luZG93IGFzIGFueSkuQ2xpZW50KSB7XG5cbiAgICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCh3aW5kb3cgYXMgYW55KS5DbGllbnQpKTtcbiAgICB9XG5cbiAgICAvLyBBIFwiY29tcGxldGVcIiBzdGF0dXMgaW5kaWNhdGVzIHRoYXQgdGhlIFwibG9hZFwiIGV2ZW50IGhhcyBiZWVuIGZpcmVkIG9uIHRoZVxuICAgIC8vIHdpbmRvdzsgYW5kLCB0aGF0IGFsbCBzdWItcmVzb3VyY2VzIHN1Y2ggYXMgU2NyaXB0cywgSW1hZ2VzLCBhbmQgRnJhbWVzIGhhdmVcbiAgICAvLyBiZWVuIGxvYWRlZC5cbiAgICBpZiAod2luZG93LmRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuXG4gICAgICAvLyBJZiB0aGlzIGV2ZW50IGhhcyBmaXJlZCBBTkQgdGhlIDNyZC1wYXJ0eSBzY3JpcHQgaXNuJ3QgYXZhaWxhYmxlIChzZWUgSUYtXG4gICAgICAvLyBjb25kaXRpb24gQkVGT1JFIHRoaXMgb25lKSwgaXQgbWVhbnMgdGhhdCB0aGUgM3JkLXBhcnR5IHNjcmlwdCBlaXRoZXJcbiAgICAgIC8vIGZhaWxlZCBvbiB0aGUgbmV0d29yayBvciB3YXMgQkxPQ0tFRCBieSBhbiBhZC1ibG9ja2VyLiBBcyBzdWNoLCB3ZSBoYXZlIHRvXG4gICAgICAvLyBmYWxsLWJhY2sgdG8gdXNpbmcgYSBtb2NrIEFQSS5cbiAgICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG5ldyBOb29wQ2xpZW50KCkpKTtcbiAgICB9XG5cbiAgICAvLyBBU1NFUlQ6IElmIHdlIG1hZGUgaXQgdGhpcyBmYXIsIHRoZSBkb2N1bWVudCBoYXMgbm90IGNvbXBsZXRlZCBsb2FkaW5nIChidXQgaXRcbiAgICAvLyBtYXkgYmUgaW4gYW4gXCJpbnRlcmFjdGl2ZVwiIHN0YXRlIHdoaWNoIGlzIHdoZW4gSSBiZWxpZXZlIHRoYXQgdGhlIEFuZ3VsYXIgYXBwXG4gICAgLy8gZ2V0cyBib290c3RyYXBwZWQpLiBBcyBzdWNoLCB3ZSBuZWVkIGJpbmQgdG8gdGhlIExPQUQgZXZlbnQgdG8gd2FpdCBmb3Igb3VyXG4gICAgLy8gdGhpcmQtcGFydHkgc2NyaXB0cyB0byBsb2FkIChvciBmYWlsIHRvIGxvYWQsIG9yIGJlIGJsb2NrZWQpLlxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG5ldyBQcm9taXNlPElDbGllbnQ+KFxuICAgICAgKHJlc29sdmUpID0+IHtcblxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICBcImxvYWRcIixcbiAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVXaW5kb3dMb2FkKCkge1xuXG4gICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgM3JkLXBhcnR5IGxpYnJhcnkgaXMgZWl0aGVyIGF2YWlsYWJsZSBvclxuICAgICAgICAgICAgLy8gaXQncyBub3QgLSB0aGVyZSdzIG5vIGZ1cnRoZXIgbG9hZGluZyB0byBkby4gSWYgaXQncyBub3RcbiAgICAgICAgICAgIC8vIHByZXNlbnQgb24gdGhlIGdsb2JhbCBzY29wZSwgd2UncmUgZ29pbmcgdG8gZmFsbC1iYWNrIHRvIHVzaW5nXG4gICAgICAgICAgICAvLyBhIG1vY2sgQVBJLlxuICAgICAgICAgICAgcmVzb2x2ZSgod2luZG93IGFzIGFueSkuQ2xpZW50IHx8IG5ldyBOb29wQ2xpZW50KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSk7XG4gIH1cbn1cblxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xuXG4vKipcbiAqIE1vY2sgaW1wbGVtZW50YXRpb24gb2YgdGhlIElDbGllbnQgaW50ZXJmYWNlLlxuICogXG4gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbm8tb3BlcmF0aW9uIChOT09QKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY2xpZW50IEFQSVxuICogdGhhdCBhbGxvd3MgY29uc3VtaW5nIGNvZGUgdG8gZnVuY3Rpb24gbm9ybWFsbHkgZXZlbiB3aGVuIHRoZSBhY3R1YWwgcGxheWVyXG4gKiBBUEkgaXMgbm90IGF2YWlsYWJsZS4gVGhpcyB0eXBpY2FsbHkgb2NjdXJzIGR1cmluZyBkZXZlbG9wbWVudCwgdGVzdGluZyxcbiAqIG9yIHdoZW4gdGhlIHBsYXllciBzY3JpcHQgaXMgYmxvY2tlZCBieSBhZC1ibG9ja2Vycy5cbiAqIFxuICogQWxsIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBlaXRoZXIgcmV0dXJuIG51bGwvZW1wdHkgdmFsdWVzIG9yIHBlcmZvcm0gbm9cbiAqIG9wZXJhdGlvbnMsIGFsbG93aW5nIGdhZGdldHMgdG8gZnVuY3Rpb24gd2l0aG91dCBlcnJvcnMgd2hpbGUgcHJvdmlkaW5nXG4gKiBhcHByb3ByaWF0ZSBmYWxsYmFjayBiZWhhdmlvci5cbiAqIFxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTm9vcENsaWVudCBpbXBsZW1lbnRzIElDbGllbnQge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuXG4gICAgY29uc29sZS5sb2coXG4gICAgICAnJWNDbGllbnQgQVBJIG5vdCBhdmFpbGFibGUsIGZhbGxpbmcgYmFjayB0byBtb2NrIEFQSScsXG4gICAgICAnYmFja2dyb3VuZC1jb2xvcjpibHVlOyBjb2xvcjp5ZWxsb3c7J1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY2FsbGJhY2soLi4uYXJnczogYW55W10pOiB2b2lkIHtcblxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxuICB9XG5cbiAgcHVibGljIGdldERldmljZVRpbWUoZGF0ZT86IERhdGUpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lTmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lWm9uZUlEKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lT2Zmc2V0KCk6IFByb21pc2U8bnVtYmVyPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldExhbmd1YWdlQ29kZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VLZXkoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgc2VuZENvbW1hbmQobmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgc2VuZFJlbW90ZUNvbW1hbmQoZGV2aWNlS2V5czogc3RyaW5nW10sIG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpIHtcblxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxuICB9XG5cbiAgcHVibGljIHRyYWNrKGV2ZW50TmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cbiAgfVxuXG4gIHB1YmxpYyB0aW1lRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxuICB9XG5cbiAgcHVibGljIG5ld0V2ZW50U2Vzc2lvbihpZD86IHN0cmluZyk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmV2ZWxSb290KCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENvbW1hbmRNYXAoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ3t9Jyk7XG4gIH1cblxuICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlKCk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRXaWR0aCgpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SGVpZ2h0KCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREdXJhdGlvbigpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2RrVmVyc2lvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2ZXJzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseUNvbmZpZyhwcmVmczogSURpY3Rpb25hcnk8YW55Pik6IHZvaWQge1xuXG4gICAgY29uc3QgZXZ0ID0geyB0eXBlOiAnYXBwbHlDb25maWcnLCBwcmVmczogcHJlZnMsIGlzT3BlbmVyOiB3aW5kb3cub3BlbmVyICE9PSBudWxsIH07XG5cbiAgICBpZiAod2luZG93Lm9wZW5lcikge1xuICAgICAgd2luZG93Lm9wZW5lci5wb3N0TWVzc2FnZShcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoZXZ0KSxcbiAgICAgICAgJyonXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShldnQpLFxuICAgICAgICAnKidcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
991
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWVyLWNsaWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmV2ZWxkaWdpdGFsL3BsYXllci1jbGllbnQvc3JjL2xpYi9wbGF5ZXItY2xpZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUN6RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPekQsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBY3BDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBSUgsTUFBTSxPQUFPLG1CQUFtQjtJQW1LOUIsY0FBYztJQUNkLFlBQVksSUFBWTtRQS9KeEI7Ozs7Ozs7Ozs7O1dBV0c7UUFDSSxlQUFVLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztRQUU1Qzs7Ozs7Ozs7Ozs7O1dBWUc7UUFDSSxhQUFRLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0M7Ozs7Ozs7Ozs7V0FVRztRQUNJLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWhDOzs7Ozs7Ozs7OztXQVdHO1FBQ0ksWUFBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFL0I7Ozs7Ozs7OztXQVNHO1FBQ0ksY0FBUyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFakM7Ozs7Ozs7Ozs7V0FVRztRQUNJLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVV0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LElBQUksRUFBRSxDQUFDO1FBRXBGLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUNuQixHQUFHLENBQ0osQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQ25CLEdBQUcsQ0FDSixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnYWRnZXRzIH0gZnJvbSAnQHJldmVsZGlnaXRhbC9nYWRnZXQtdHlwZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tRXZlbnQsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHNoYXJlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NsaWVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUNvbW1hbmQgfSBmcm9tICcuL2ludGVyZmFjZXMvY29tbWFuZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURpY3Rpb25hcnkgfSBmcm9tICcuL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGF0YVRhYmxlT3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9kYXRhdGFibGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEZXZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMvZGV2aWNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRXZlbnRQcm9wZXJ0aWVzIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2V2ZW50LXByb3BlcnRpZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IERhdGFUYWJsZVJlZiwgRGF0YVRhYmxlUHJlZlJlZiB9IGZyb20gJy4vZGF0YXRhYmxlLXJlZic7XG5pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuLy9pbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcblxuLy8gU28gdGhhdCBUeXBlU2NyaXB0IGRvZXNuJ3QgY29tcGxhaW4sIHdlJ3JlIGdvaW5nIHRvIGF1Z21lbnQgdGhlIEdMT0JBTCAvIFdJTkRPVyBcbi8vIG5hbWUtc3BhY2UgZGVmaW5pdGlvbiB0byBpbmNsdWRlIHRoZSBUcmFja2VyIEFQSS4gVGhpcyBhbHNvIHByb3ZpZGVzIHVzIHdpdGggYSBwbGFjZVxuLy8gdG8gYWN0dWFsbHkgRE9DVU1FTlQgdGhlIEFQSSBzbyB0aGF0IG91ciBkZXZlbG9wZXJzIGFyZW4ndCBndWVzc2luZyBhYm91dCB3aGF0J3Ncbi8vIGF2YWlsYWJsZSBvbiB0aGUgbGlicmFyeS5cblxuLyoqIEBpZ25vcmUgKi9cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgbGV0IENsaWVudDogSUNsaWVudDtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBSZXZlbCBEaWdpdGFsIHBsYXllciBjbGllbnQuXG4gKiBcbiAqIFRoaXMgc2VydmljZSBwcm92aWRlcyBhIGNvbXByZWhlbnNpdmUgaW50ZXJmYWNlIGZvciBnYWRnZXRzIGFuZCB3ZWIgYXBwbGljYXRpb25zXG4gKiB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBSZXZlbCBEaWdpdGFsIHBsYXllciBlbnZpcm9ubWVudC4gSXQgaGFuZGxlcyBkZXZpY2VcbiAqIGluZm9ybWF0aW9uLCBjb21tYW5kcywgZXZlbnRzLCBhbmFseXRpY3MgdHJhY2tpbmcsIGFuZCBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQuXG4gKiBcbiAqIFRoZSBzZXJ2aWNlIHN1cHBvcnRzIGJvdGggZGlyZWN0IEFQSSBjYWxscyBhbmQgZXZlbnQtYmFzZWQgY29tbXVuaWNhdGlvbiBwYXR0ZXJucyxcbiAqIGFsbG93aW5nIGdhZGdldHMgdG8gcmVzcG9uZCB0byBwbGF5ZXIgbGlmZWN5Y2xlIGV2ZW50cyAoc3RhcnQsIHN0b3AsIGNvbW1hbmRzKSBhbmRcbiAqIHNlbmQgZGF0YSBiYWNrIHRvIHRoZSBwbGF5ZXIgb3IgcmVtb3RlIGRldmljZXMuXG4gKiBcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0cnVjdG9yKHByaXZhdGUgY2xpZW50OiBQbGF5ZXJDbGllbnRTZXJ2aWNlKSB7XG4gKiAgIC8vIFN1YnNjcmliZSB0byBwbGF5ZXIgZXZlbnRzXG4gKiAgIHRoaXMuY2xpZW50Lm9uU3RhcnQkLnN1YnNjcmliZSgoKSA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ0dhZGdldCBzdGFydGVkJyk7XG4gKiAgIH0pO1xuICogICBcbiAqICAgdGhpcy5jbGllbnQub25Db21tYW5kJC5zdWJzY3JpYmUoY29tbWFuZCA9PiB7XG4gKiAgICAgY29uc29sZS5sb2coJ1JlY2VpdmVkIGNvbW1hbmQ6JywgY29tbWFuZCk7XG4gKiAgIH0pO1xuICogfVxuICogXG4gKiBhc3luYyBuZ09uSW5pdCgpIHtcbiAqICAgLy8gR2V0IGRldmljZSBpbmZvcm1hdGlvblxuICogICBjb25zdCBkZXZpY2UgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXREZXZpY2UoKTtcbiAqICAgY29uc3QgZGV2aWNlVGltZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWUoKTtcbiAqICAgXG4gKiAgIC8vIFRyYWNrIGFuYWx5dGljc1xuICogICB0aGlzLmNsaWVudC50cmFjaygnZ2FkZ2V0X2xvYWRlZCcsIHsgdmVyc2lvbjogJzEuMCcgfSk7XG4gKiB9XG4gKiBgYGBcbiAqIFxuICogQHNpbmNlIDEuMC4wXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYXllckNsaWVudFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgY2xpZW50UHJvbWlzZTogUHJvbWlzZTxJQ2xpZW50PiB8IG51bGw7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIGNvbW1hbmRzIHNlbnQgdG8gdGhpcyBwbGF5ZXIgZnJvbSB0aGUgUmV2ZWwgRGlnaXRhbCBwbGF0Zm9ybS5cbiAgICogU3Vic2NyaWJlIHRvIHRoaXMgdG8gaGFuZGxlIGN1c3RvbSBjb21tYW5kcyBzZW50IGZyb20gdGVtcGxhdGVzLCBwbGF5bGlzdHMsIG9yIHJlbW90ZSBkZXZpY2VzLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vbkNvbW1hbmQkLnN1YnNjcmliZShjb21tYW5kID0+IHtcbiAgICogICBpZiAoY29tbWFuZC5uYW1lID09PSAnY3VzdG9tQWN0aW9uJykge1xuICAgKiAgICAgdGhpcy5oYW5kbGVDdXN0b21BY3Rpb24oY29tbWFuZC5hcmcpO1xuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uQ29tbWFuZCQgPSBuZXcgU3ViamVjdDxJQ29tbWFuZD4oKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZ2FkZ2V0IGhhcyBiZWVuIGxvYWRlZCBhbmQgaXMgcmVhZHkgdG8gc3RhcnQuXG4gICAqIEVtaXRzIGB0cnVlYCB3aGVuIHJlYWR5LCBgZmFsc2VgIHdoZW4gZGVzdHJveWVkLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vblJlYWR5JC5zdWJzY3JpYmUoaXNSZWFkeSA9PiB7XG4gICAqICAgaWYgKGlzUmVhZHkpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdDbGllbnQgaXMgcmVhZHknKTtcbiAgICogICAgIHRoaXMuaW5pdGlhbGl6ZUdhZGdldCgpO1xuICAgKiAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uUmVhZHkkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGdhZGdldCBoYXMgYmVlbiBzdGFydGVkIGJ5IHRoZSBwbGF5ZXIuXG4gICAqIFRoaXMgZXZlbnQgb2NjdXJzIHdoZW4gdGhlIHBsYXllciBiZWdpbnMgZXhlY3V0aW9uIG9mIHRoZSBnYWRnZXQgY29udGVudC5cbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGhpcy5jbGllbnQub25TdGFydCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICogICBjb25zb2xlLmxvZygnR2FkZ2V0IHN0YXJ0ZWQnKTtcbiAgICogICB0aGlzLnN0YXJ0QW5pbWF0aW9uKCk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBvblN0YXJ0JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgdGhhdCBzaWduYWxzIHdoZW4gdGhlIGdhZGdldCBoYXMgYmVlbiBzdG9wcGVkIGJ5IHRoZSBwbGF5ZXIuXG4gICAqIFRoaXMgZXZlbnQgb2NjdXJzIHdoZW4gdGhlIHBsYXllciBzdG9wcyBleGVjdXRpb24sIHR5cGljYWxseSB3aGVuIG1vdmluZ1xuICAgKiB0byB0aGUgbmV4dCBpdGVtIGluIGEgcGxheWxpc3Qgb3Igd2hlbiB0aGUgY29udGVudCBkdXJhdGlvbiBleHBpcmVzLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vblN0b3AkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coJ0dhZGdldCBzdG9wcGVkJyk7XG4gICAqICAgdGhpcy5jbGVhbnVwKCk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBvblN0b3AkID0gbmV3IFN1YmplY3QoKTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSB0aGF0IHNpZ25hbHMgd2hlbiB0aGUgZ2FkZ2V0IHNob3VsZCBvcGVuIHRoZSBjb25maWd1cmF0aW9uIHdpbmRvdy5cbiAgICogVGhpcyBhbGxvd3MgZ2FkZ2V0cyB0byByZXNwb25kIHRvIGNvbmZpZ3VyYXRpb24gcmVxdWVzdHMgZnJvbSB0aGUgcGxheWVyLlxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLmNsaWVudC5vbkNvbmZpZyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICogICB0aGlzLm9wZW5Db25maWd1cmF0aW9uRGlhbG9nKCk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBvbkNvbmZpZyQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHRoYXQgc2lnbmFscyB3aGVuIHRoZSBnYWRnZXQgaGFzIHJlY2VpdmVkIGEgcG9zdE1lc3NhZ2UgZXZlbnQgZnJvbSB0aGUgcGxheWVyLlxuICAgKiBUaGlzIGhhbmRsZXMgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBnYWRnZXQgYW5kIHBsYXllciB2aWEgdGhlIHBvc3RNZXNzYWdlIEFQSS5cbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGhpcy5jbGllbnQub25Qb3N0TWVzc2FnZSQuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKCdSZWNlaXZlZCBtZXNzYWdlOicsIG1lc3NhZ2UpO1xuICAgKiAgIHRoaXMuaGFuZGxlUGxheWVyTWVzc2FnZShtZXNzYWdlKTtcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIG9uUG9zdE1lc3NhZ2UkID0gbmV3IFN1YmplY3QoKTtcblxuICAvL1xuICAvLyBUd28gbWV0aG9kcyBhdmFpbGFibGUgZm9yIGNhbGxpbmcgaW50byB0aGUgbGlicmFyeTpcbiAgLy9cbiAgLy8gMSkgVXNpbmcgZGlzcGF0Y2hFdmVudCgpIHdpdGggdGhlIGZvbGxvd2luZyBjdXN0b20gZXZlbnRzXG4gIC8vIDIpIFVzaW5nIHRoZSB3aW5kb3cgc2NvcGVkIFJldmVsRGlnaXRhbCBvYmplY3QgYXMgZGVmaW5lZCBpbiB0aGUgY29uc3RydWN0b3JcbiAgLy9cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvblN0YXJ0U3ViOiBTdWJzY3JpcHRpb247XG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgb25TdGFydEV2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnUmV2ZWxEaWdpdGFsLlN0YXJ0JykucGlwZShcbiAgICBzaGFyZSgpLFxuICAgIHRhcCh0aGlzLm9uU3RhcnQkKVxuICApO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uU3RvcFN1YjogU3Vic2NyaXB0aW9uO1xuICAvKiogQGlnbm9yZSAqL1xuICBwcml2YXRlIG9uU3RvcEV2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnUmV2ZWxEaWdpdGFsLlN0b3AnKS5waXBlKFxuICAgIHNoYXJlKCksXG4gICAgdGFwKHRoaXMub25TdG9wJClcbiAgKTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvbkNvbW1hbmRTdWI6IFN1YnNjcmlwdGlvbjtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHJpdmF0ZSBvbkNvbW1hbmRFdnQkID0gZnJvbUV2ZW50PElDb21tYW5kPih3aW5kb3csICdSZXZlbERpZ2l0YWwuQ29tbWFuZCcpLnBpcGUoXG4gICAgbWFwKChlOiBhbnkpID0+IHsgcmV0dXJuIHsgbmFtZTogZS5kZXRhaWwubmFtZSwgYXJnOiBlLmRldGFpbC5hcmcgfSBhcyBJQ29tbWFuZCB9KSxcbiAgICBzaGFyZSgpLFxuICAgIHRhcCh0aGlzLm9uQ29tbWFuZCQpXG4gICk7XG4gIC8qKiBAaWdub3JlICovXG4gIC8vIHByaXZhdGUgb25Db25maWdTdWI6IFN1YnNjcmlwdGlvbjtcbiAgLy8gLyoqIEBpZ25vcmUgKi9cbiAgLy8gcHJpdmF0ZSBvbkNvbmZpZ0V2dCQgPSBmcm9tRXZlbnQod2luZG93LCAnUmV2ZWxEaWdpdGFsLkNvbmZpZycpLnBpcGUoXG4gIC8vICAgc2hhcmUoKSxcbiAgLy8gICB0YXAoKGU6IEN1c3RvbUV2ZW50KSA9PiB7XG4gIC8vICAgICBjb25zb2xlLmxvZyhlKTtcblxuICAvLyAgICAgaWYgKGUuZGV0YWlsLnR5cGUgPT09ICdhcHBseUNvbmZpZycgJiYgZS5kZXRhaWwuaXNPcGVuZXIpIHtcbiAgLy8gICAgICAgdGhpcy5hcHBseUNvbmZpZyhlLmRldGFpbC5jb25maWcpOyAvLyBwcm9wYWdhdGUgY29uZmlnIHRvIGlmcmFtZSBwYXJlbnQgZnJvbSB0aGUgcG9wdXAgd2luZG93XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICB0aGlzLm9uQ29uZmlnJC5uZXh0KGUuZGV0YWlsKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KVxuICAvLyApO1xuICAvLyBwcml2YXRlIG9uUG9zdE1lc3NhZ2VTdWI6IFN1YnNjcmlwdGlvbjtcbiAgLy8gcHJpdmF0ZSBvblBvc3RNZXNzYWdlRXZ0JCA9IGZyb21FdmVudCh3aW5kb3csICdtZXNzYWdlJykucGlwZShcbiAgLy8gICBmaWx0ZXIoKG1lc3NhZ2VFdmVudDogTWVzc2FnZUV2ZW50KSA9PlxuICAvLyAgICAgbWVzc2FnZUV2ZW50LnNvdXJjZSAhPT0gd2luZG93LnBhcmVudCAmJlxuICAvLyAgICAgdHlwZW9mIG1lc3NhZ2VFdmVudC5kYXRhID09PSAnc3RyaW5nJyAmJlxuICAvLyAgICAgbWVzc2FnZUV2ZW50LmRhdGEuc3RhcnRzV2l0aCgncmV2ZWxkaWdpdGFsOicpKSxcbiAgLy8gICBtYXAoKGU6IGFueSkgPT4geyByZXR1cm4gSlNPTi5wYXJzZShlLnN1YnN0cmluZygxMykpIGFzIENvbW1hbmQgfSksXG4gIC8vICAgc2hhcmUoKSxcbiAgLy8gICB0YXAodGhpcy5vbkNvbW1hbmQkKVxuICAvLyApO1xuXG4gIHByaXZhdGUgb25Qb3N0TWVzc2FnZVN1YjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIG9uUG9zdE1lc3NhZ2VFdnQkID0gZnJvbUV2ZW50KHdpbmRvdywgJ21lc3NhZ2UnKS5waXBlKFxuICAgIGZpbHRlcigobWVzc2FnZUV2ZW50OiBNZXNzYWdlRXZlbnQpID0+XG4gICAgICAvL21lc3NhZ2VFdmVudC5zb3VyY2UgIT09IHdpbmRvdy5wYXJlbnQgJiZcbiAgICAgIHR5cGVvZiBtZXNzYWdlRXZlbnQuZGF0YSA9PT0gJ3N0cmluZycpLFxuICAgIG1hcCgoZTogYW55KSA9PiBKU09OLnBhcnNlKGUuZGF0YSkpLFxuICAgIHNoYXJlKCksXG4gICAgdGFwKChlOiBhbnkpID0+IHtcbiAgICAgIGlmIChlLnR5cGUgPT09ICdhcHBseUNvbmZpZycgJiYgZS5pc09wZW5lcikge1xuICAgICAgICBlLmlzT3BlbmVyID0gZmFsc2U7XG4gICAgICAgIC8vIHByb3BhZ2F0ZSBjb25maWcgdG8gaWZyYW1lIHBhcmVudCBmcm9tIHRoZSBwb3B1cCB3aW5kb3dcbiAgICAgICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShlKSxcbiAgICAgICAgICAnKidcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoZS50eXBlID09PSAnb3BlbkNvbmZpZycpIHtcbiAgICAgICAgdGhpcy5vbkNvbmZpZyQubmV4dChudWxsKTtcbiAgICAgIH1cbiAgICB9KSxcbiAgICB0YXAoZSA9PiB0aGlzLm9uUG9zdE1lc3NhZ2UkLm5leHQoZSkpXG4gICk7XG5cblxuICAvKiogQGlnbm9yZSAqL1xuICBjb25zdHJ1Y3Rvcih6b25lOiBOZ1pvbmUpIHtcblxuICAgICh3aW5kb3cgYXMgYW55KS5SZXZlbERpZ2l0YWwgPSB7XG4gICAgICBDb250cm9sbGVyOiB7XG4gICAgICAgIG9uQ29tbWFuZDogKG5hbWU6IHN0cmluZywgYXJnOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29tbWFuZCQubmV4dCh7IG5hbWU6IG5hbWUsIGFyZzogYXJnIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblN0YXJ0OiAoKSA9PiB7XG4gICAgICAgICAgem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblN0YXJ0JC5uZXh0KG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvblN0b3A6ICgpID0+IHtcbiAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU3RvcCQubmV4dChudWxsKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub25TdGFydFN1YiA9IHRoaXMub25TdGFydEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgdGhpcy5vblN0b3BTdWIgPSB0aGlzLm9uU3RvcEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgdGhpcy5vbkNvbW1hbmRTdWIgPSB0aGlzLm9uQ29tbWFuZEV2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgLy90aGlzLm9uQ29uZmlnU3ViID0gdGhpcy5vbkNvbmZpZ0V2dCQuc3Vic2NyaWJlKCgpID0+IHsgfSk7XG4gICAgdGhpcy5vblBvc3RNZXNzYWdlU3ViID0gdGhpcy5vblBvc3RNZXNzYWdlRXZ0JC5zdWJzY3JpYmUoKCkgPT4geyB9KTtcblxuICAgIHRoaXMuY2xpZW50UHJvbWlzZSA9IG51bGw7XG5cbiAgICB0aGlzLm9uUmVhZHkkLm5leHQodHJ1ZSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIHRoaXMub25TdGFydFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uU3RvcFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm9uQ29tbWFuZFN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICAvL3RoaXMub25Db25maWdTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vblBvc3RNZXNzYWdlU3ViPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5vblJlYWR5JC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBzdGF0aWMgaW5pdChkYXRhOiBhbnkpIHtcblxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJyVj4pqZ77iPIEluaXRpYWxpemluZyBSZXZlbCBEaWdpdGFsIGNsaWVudCBsaWJyYXJ5JyxcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IGNvbG9yOnllbGxvdzsnXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNhbGxiYWNrIHRvIHBsYXllciBzY3JpcHRpbmcgd2l0aCB2YXJpYWJsZSBhcmd1bWVudHMuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBhbGxvd3MgdGhlIGdhZGdldCB0byBjb21tdW5pY2F0ZSB3aXRoIHBsYXllciBzY3JpcHRpbmcuXG4gICAqIElmIHRoZSBhcHByb3ByaWF0ZSBzY3JpcHRpbmcgaXMgaW4gcGxhY2UgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRlbXBsYXRlLCBcbiAgICogY2FsbGluZyB0aGlzIG1ldGhvZCB3aWxsIGluaXRpYXRlIGEgY2FsbGJhY2sgd2hpY2ggY2FuIGJlIGFjdGVkIHVwb24gaW4gcGxheWVyIHNjcmlwdC5cbiAgICogXG4gICAqIEBwYXJhbSBhcmdzIC0gVmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjYWxsYmFjayAobWF4IDUgYXJndW1lbnRzKVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTZW5kIGEgc2ltcGxlIGNhbGxiYWNrXG4gICAqIHRoaXMuY2xpZW50LmNhbGxiYWNrKCd0ZXN0JywgJ2RhdGEnKTtcbiAgICogXG4gICAqIC8vIFNlbmQgbXVsdGlwbGUgcGFyYW1ldGVyc1xuICAgKiB0aGlzLmNsaWVudC5jYWxsYmFjaygnYWN0aW9uJywgJ3ZhbHVlMScsICd2YWx1ZTInLCB7IGRhdGE6ICdvYmplY3QnIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBjYWxsYmFjayguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcblxuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgY2xpZW50LmNhbGxiYWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1sxXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1syXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1szXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBjbGllbnQuY2FsbGJhY2soYXJnc1s0XSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB1c2VyIHByZWZlcmVuY2VzIGludGVyZmFjZSBleHBvc2VkIGJ5IHRoZSBHb29nbGUgR2FkZ2V0cyBBUEkuXG4gICAqIFxuICAgKiBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gZ2FkZ2V0IHByZWZlcmVuY2VzIHdoaWNoIGNhbiBiZSBjb25maWd1cmVkXG4gICAqIGluIHRoZSBSZXZlbCBEaWdpdGFsIENNUy4gVXNlIHRoaXMgdG8gcmV0cmlldmUgdXNlci1jb25maWd1cmFibGUgc2V0dGluZ3NcbiAgICogZm9yIHlvdXIgZ2FkZ2V0LlxuICAgKiBcbiAgICogQHJldHVybnMgVGhlIEdhZGdldHMgQVBJIFByZWZzIG9iamVjdCBmb3IgYWNjZXNzaW5nIHByZWZlcmVuY2UgdmFsdWVzXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0cnVjdG9yKHB1YmxpYyBjbGllbnQ6IFBsYXllckNsaWVudFNlcnZpY2UpIHtcbiAgICogICBjb25zdCBwcmVmcyA9IGNsaWVudC5nZXRQcmVmcygpO1xuICAgKiAgIGNvbnN0IG15U3RyaW5nID0gcHJlZnMuZ2V0U3RyaW5nKCdteVN0cmluZ1ByZWYnKTtcbiAgICogICBjb25zdCBteU51bWJlciA9IHByZWZzLmdldEludCgnbXlOdW1iZXJQcmVmJyk7XG4gICAqICAgY29uc3QgbXlCb29sID0gcHJlZnMuZ2V0Qm9vbCgnbXlCb29sUHJlZicpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKiBcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vZ2FkZ2V0cy9kb2NzL2Jhc2ljfSBHb29nbGUgR2FkZ2V0cyBBUEkgZG9jdW1lbnRhdGlvblxuICAgKi9cbiAgcHVibGljIGdldFByZWZzKCk6IGdhZGdldHMuUHJlZnMge1xuXG4gICAgcmV0dXJuIG5ldyB3aW5kb3dbJ2dhZGdldHMnXVsnUHJlZnMnXSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgZGV2aWNlIHRpbWUgaW4gSVNPODYwMSBmb3JtYXQuXG4gICAqIFxuICAgKiBDdXJyZW50IGRldmljZSB0aW1lIGlzIGRldGVybWluZWQgYnkgdGhlIGRldmljZSB0aW1lem9uZSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlIGluIHRoZSBDTVMuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBkaXNwbGF5aW5nIHRpbWUtc2Vuc2l0aXZlIGNvbnRlbnQgb3Igc2NoZWR1bGluZyBvcGVyYXRpb25zIGJhc2VkIG9uXG4gICAqIHRoZSBkZXZpY2UncyBsb2NhbCB0aW1lIHJhdGhlciB0aGFuIGJyb3dzZXIgdGltZS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlIC0gT3B0aW9uYWwuIElmIHN1cHBsaWVkLCB3aWxsIHRyYW5zbGF0ZSB0aGUgc3VwcGxpZWQgZGF0ZS90aW1lIHRvIGRldmljZSB0aW1lIGJhc2VkIG9uIHJlc3BlY3RpdmUgdGltZXpvbmVzXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGRhdGUvdGltZSBpbiBJU084NjAxIGZvcm1hdFxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBHZXQgY3VycmVudCBkZXZpY2UgdGltZVxuICAgKiBjb25zdCBjdXJyZW50VGltZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWUoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSB0aW1lOicsIGN1cnJlbnRUaW1lKTtcbiAgICogXG4gICAqIC8vIENvbnZlcnQgYSBzcGVjaWZpYyBkYXRlIHRvIGRldmljZSB0aW1lXG4gICAqIGNvbnN0IHNwZWNpZmljRGF0ZSA9IG5ldyBEYXRlKCcyMDIzLTAxLTAxVDEyOjAwOjAwWicpO1xuICAgKiBjb25zdCBkZXZpY2VUaW1lID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZShzcGVjaWZpY0RhdGUpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2VUaW1lKGRhdGU/OiBEYXRlKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICBpZiAoZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWUoZGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHRpbWV6b25lIG5hbWUgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdGltZXpvbmUgbmFtZSAoZS5nLiwgXCJBbWVyaWNhL05ld19Zb3JrXCIpXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRpbWV6b25lTmFtZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWVab25lTmFtZSgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIHRpbWV6b25lOicsIHRpbWV6b25lTmFtZSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lTmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGltZXpvbmUgSUQgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgdGltZXpvbmUgSURcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdGltZXpvbmVJZCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZVRpbWVab25lSUQoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSB0aW1lem9uZSBJRDonLCB0aW1lem9uZUlkKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVJRCgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVJRCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG51bWVyaWNhbCBvZmZzZXQgZnJvbSBHTVQgb2YgdGhlIHRpbWV6b25lIGN1cnJlbnRseSBhc3NpZ25lZCB0byB0aGUgZGV2aWNlLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHRpbWV6b25lIG9mZnNldCBpbiBob3VycyAoZS5nLiwgLTUgZm9yIEVTVClcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgb2Zmc2V0ID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSB0aW1lem9uZSBvZmZzZXQ6Jywgb2Zmc2V0LCAnaG91cnMgZnJvbSBHTVQnKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTogUHJvbWlzZTxudW1iZXI+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICByZXR1cm4gY2xpZW50LmdldERldmljZVRpbWVab25lT2Zmc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFuZ3VhZ2UgY29kZSBvZiB0aGUgbGFuZ3VhZ2UgY3VycmVudGx5IGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbGFuZ3VhZ2UgY29kZSAoZS5nLiwgXCJlbi1VU1wiLCBcImZyLUZSXCIpXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGxhbmd1YWdlQ29kZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldExhbmd1YWdlQ29kZSgpO1xuICAgKiBjb25zb2xlLmxvZygnRGV2aWNlIGxhbmd1YWdlOicsIGxhbmd1YWdlQ29kZSk7XG4gICAqIC8vIFVzZSBmb3IgbG9jYWxpemF0aW9uXG4gICAqIHRoaXMubG9hZExhbmd1YWdlUmVzb3VyY2VzKGxhbmd1YWdlQ29kZSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExhbmd1YWdlQ29kZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0TGFuZ3VhZ2VDb2RlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdW5pcXVlIFJldmVsIERpZ2l0YWwgZGV2aWNlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZS5cbiAgICogXG4gICAqIFRoZSBkZXZpY2Uga2V5IGlzIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3BlY2lmaWMgcGxheWVyIGRldmljZVxuICAgKiBhbmQgY2FuIGJlIHVzZWQgZm9yIGRldmljZS1zcGVjaWZpYyBvcGVyYXRpb25zIG9yIHJlbW90ZSBjb21tYW5kcy5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZXZpY2Uga2V5IHN0cmluZ1xuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkZXZpY2VLZXkgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXREZXZpY2VLZXkoKTtcbiAgICogY29uc29sZS5sb2coJ0RldmljZSBrZXk6JywgZGV2aWNlS2V5KTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlS2V5KCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXREZXZpY2VLZXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNvbW1hbmQgdG8gdGhlIGxvY2FsIHBsYXllciBkZXZpY2UuXG4gICAqIFxuICAgKiBDb21tYW5kcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHZhcmlvdXMgYXNwZWN0cyBvZiB0aGUgcGxheWVyIG9yIHRyaWdnZXJcbiAgICogc3BlY2lmaWMgYmVoYXZpb3JzLiBUaGUgY29tbWFuZCBpcyBwcm9jZXNzZWQgYnkgdGhlIGxvY2FsIHBsYXllciBvbmx5LlxuICAgKiBcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgY29tbWFuZCBuYW1lL2lkZW50aWZpZXJcbiAgICogQHBhcmFtIGFyZyAtIFRoZSBjb21tYW5kIGFyZ3VtZW50L3BheWxvYWRcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gU2VuZCBhIHNpbXBsZSBjb21tYW5kXG4gICAqIHRoaXMuY2xpZW50LnNlbmRDb21tYW5kKCdyZWZyZXNoJywgJycpO1xuICAgKiBcbiAgICogLy8gU2VuZCBhIGNvbW1hbmQgd2l0aCBkYXRhXG4gICAqIHRoaXMuY2xpZW50LnNlbmRDb21tYW5kKCdzZXRWb2x1bWUnLCAnNTAnKTtcbiAgICogXG4gICAqIC8vIFNlbmQgYSBjb21tYW5kIHdpdGggSlNPTiBkYXRhXG4gICAqIHRoaXMuY2xpZW50LnNlbmRDb21tYW5kKCdjb25maWd1cmUnLCBKU09OLnN0cmluZ2lmeSh7IHNldHRpbmc6ICd2YWx1ZScgfSkpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBzZW5kQ29tbWFuZChuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICB0aGlzLmdldENsaWVudCgpLnRoZW4oKGNsaWVudCkgPT4ge1xuICAgICAgY2xpZW50LnNlbmRDb21tYW5kKG5hbWUsIGFyZyk7XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGNvbW1hbmQgdG8gcmVtb3RlIHBsYXllciBkZXZpY2VzIHdpdGggdGhlIHNwZWNpZmllZCBkZXZpY2Uga2V5cy5cbiAgICogXG4gICAqIFJlbW90ZSBjb21tYW5kcyBhbGxvdyBjcm9zcy1kZXZpY2UgY29tbXVuaWNhdGlvbiB3aXRoaW4gdGhlIHNhbWUgUmV2ZWwgRGlnaXRhbCBhY2NvdW50LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3luY2hyb25pemVkIGRpc3BsYXlzLCBkZXZpY2UgY29vcmRpbmF0aW9uLCBvciByZW1vdGUgY29udHJvbCBzY2VuYXJpb3MuXG4gICAqIFxuICAgKiBOb3RlOiBSZW1vdGUgY29tbWFuZHMgY2FuIG9ubHkgYmUgZGVsaXZlcmVkIHRvIGRldmljZXMgd2l0aGluIHRoZSBzYW1lIGFjY291bnQgYXMgdGhlIHNlbmRlciBkZXZpY2UuXG4gICAqIFxuICAgKiBAcGFyYW0gZGV2aWNlS2V5cyAtIEFycmF5IG9mIHRhcmdldCBkZXZpY2Uga2V5cyB0byBzZW5kIHRoZSBjb21tYW5kIHRvXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIGNvbW1hbmQgbmFtZS9pZGVudGlmaWVyXG4gICAqIEBwYXJhbSBhcmcgLSBUaGUgY29tbWFuZCBhcmd1bWVudC9wYXlsb2FkXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFNlbmQgY29tbWFuZCB0byBzcGVjaWZpYyBkZXZpY2VzXG4gICAqIGNvbnN0IHRhcmdldERldmljZXMgPSBbJ2RldmljZS1rZXktMScsICdkZXZpY2Uta2V5LTInXTtcbiAgICogdGhpcy5jbGllbnQuc2VuZFJlbW90ZUNvbW1hbmQodGFyZ2V0RGV2aWNlcywgJ3N5bmNBY3Rpb24nLCAnc3RhcnQnKTtcbiAgICogXG4gICAqIC8vIEJyb2FkY2FzdCB0byBtdWx0aXBsZSBkZXZpY2VzXG4gICAqIHRoaXMuY2xpZW50LnNlbmRSZW1vdGVDb21tYW5kKFxuICAgKiAgIFsnbG9iYnktZGlzcGxheScsICdraW9zay0xJywgJ2tpb3NrLTInXSwgXG4gICAqICAgJ3VwZGF0ZUNvbnRlbnQnLCBcbiAgICogICBKU09OLnN0cmluZ2lmeSh7IGNvbnRlbnRJZDogJzEyMzQ1JyB9KVxuICAgKiApO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcbiAgICAgIGNsaWVudC5zZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzLCBuYW1lLCBhcmcpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvZ3MgYW4gYW5hbHl0aWNzIGV2ZW50IGZvciB1c2Ugd2l0aCBBZEhhd2sgYW5hbHl0aWNzIGFuZCByZXBvcnRpbmcuXG4gICAqIFxuICAgKiBFdmVudHMgYXJlIHVzZWQgZm9yIHRyYWNraW5nIHZhcmlvdXMgbWV0cmljcyBpbmNsdWRpbmcgdXNhZ2Ugc3RhdGlzdGljcywgXG4gICAqIHBsYXllciBjb25kaXRpb24sIHN0YXRlIGNoYW5nZXMsIHVzZXIgaW50ZXJhY3Rpb25zLCBhbmQgY3VzdG9tIGJ1c2luZXNzIG1ldHJpY3MuXG4gICAqIFRoZXNlIGV2ZW50cyBjYW4gYmUgdmlld2VkIGluIHRoZSBSZXZlbCBEaWdpdGFsIGFuYWx5dGljcyBkYXNoYm9hcmQuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnROYW1lIC0gVW5pcXVlIG5hbWUgZm9yIHRoaXMgZXZlbnQgKHNob3VsZCBiZSBkZXNjcmlwdGl2ZSBhbmQgY29uc2lzdGVudClcbiAgICogQHBhcmFtIHByb3BlcnRpZXMgLSBPcHRpb25hbCBtYXAgb2YgdXNlci1kZWZpbmVkIHByb3BlcnRpZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBldmVudFxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTaW1wbGUgZXZlbnQgdHJhY2tpbmdcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2dhZGdldF9sb2FkZWQnKTtcbiAgICogXG4gICAqIC8vIEV2ZW50IHdpdGggcHJvcGVydGllc1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygndXNlcl9pbnRlcmFjdGlvbicsIHtcbiAgICogICBhY3Rpb246ICdidXR0b25fY2xpY2snLFxuICAgKiAgIGJ1dHRvbl9pZDogJ3N0YXJ0X2J1dHRvbicsXG4gICAqICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICogfSk7XG4gICAqIFxuICAgKiAvLyBQZXJmb3JtYW5jZSB0cmFja2luZ1xuICAgKiB0aGlzLmNsaWVudC50cmFjaygnY29udGVudF9kaXNwbGF5ZWQnLCB7XG4gICAqICAgY29udGVudF90eXBlOiAndmlkZW8nLFxuICAgKiAgIGR1cmF0aW9uOiAzMCxcbiAgICogICBxdWFsaXR5OiAnSEQnXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyB0cmFjayhldmVudE5hbWU6IHN0cmluZywgcHJvcGVydGllcz86IElFdmVudFByb3BlcnRpZXMpOiB2b2lkIHtcblxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XG4gICAgICBjbGllbnQudHJhY2soZXZlbnROYW1lLCBKU09OLnN0cmluZ2lmeShwcm9wZXJ0aWVzKSk7XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgYSB0aW1lZCBldmVudCBmb3IgZHVyYXRpb24gdHJhY2tpbmcuXG4gICAqIFxuICAgKiBUaW1lZCBldmVudHMgYXJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgdGhlIGR1cmF0aW9uIG9mIG9wZXJhdGlvbnMgb3IgdXNlciBpbnRlcmFjdGlvbnMuXG4gICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIHRyYWNrKCkgd2l0aCB0aGUgc2FtZSBldmVudCBuYW1lIHRvIGNvbXBsZXRlXG4gICAqIHRoZSB0aW1pbmcgbWVhc3VyZW1lbnQuIFRoZSBkdXJhdGlvbiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZCBhbmQgaW5jbHVkZWRcbiAgICogaW4gdGhlIGV2ZW50IHByb3BlcnRpZXMuXG4gICAqIFxuICAgKiBAcGFyYW0gZXZlbnROYW1lIC0gVW5pcXVlIG5hbWUgZm9yIHRoaXMgdGltZWQgZXZlbnQgKG11c3QgbWF0Y2ggdGhlIHN1YnNlcXVlbnQgdHJhY2soKSBjYWxsKVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTdGFydCB0aW1pbmcgYW4gZXZlbnRcbiAgICogdGhpcy5jbGllbnQudGltZUV2ZW50KCd2aWRlb19wbGF5YmFjaycpO1xuICAgKiBcbiAgICogLy8gLi4uIHZpZGVvIHBsYXlzIGZvciBzb21lIGR1cmF0aW9uIC4uLlxuICAgKiBcbiAgICogLy8gRW5kIHRpbWluZyBhbmQgbG9nIHRoZSBldmVudCB3aXRoIGR1cmF0aW9uXG4gICAqIHRoaXMuY2xpZW50LnRyYWNrKCd2aWRlb19wbGF5YmFjaycsIHtcbiAgICogICB2aWRlb19pZDogJ2FiYzEyMycsXG4gICAqICAgcXVhbGl0eTogJ0hEJ1xuICAgKiB9KTsgLy8gRHVyYXRpb24gd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkXG4gICAqIFxuICAgKiAvLyBFeGFtcGxlIGZvciB1c2VyIGludGVyYWN0aW9uIHRpbWluZ1xuICAgKiB0aGlzLmNsaWVudC50aW1lRXZlbnQoJ2Zvcm1fY29tcGxldGlvbicpO1xuICAgKiAvLyAuLi4gdXNlciBmaWxscyBvdXQgZm9ybSAuLi5cbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2Zvcm1fY29tcGxldGlvbicsIHsgZm9ybV90eXBlOiAnY29udGFjdCcgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIHRpbWVFdmVudChldmVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcbiAgICAgIGNsaWVudC50aW1lRXZlbnQoZXZlbnROYW1lKTtcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgYW5hbHl0aWNzIGV2ZW50IHNlc3Npb24gZm9yIGdyb3VwaW5nIHJlbGF0ZWQgZXZlbnRzLlxuICAgKiBcbiAgICogQSBzZXNzaW9uIGlzIGEgd2F5IG9mIGdyb3VwaW5nIGV2ZW50cyB0b2dldGhlciBmb3IgYW5hbHlzaXMuIEVhY2ggZXZlbnQgdHJhY2tlZFxuICAgKiBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIHdpbGwgaGF2ZSB0aGUgc2FtZSBzZXNzaW9uIElEIHVudGlsIGEgbmV3IHNlc3Npb24gaXMgY3JlYXRlZC5cbiAgICogU2Vzc2lvbiBJRHMgYXJlIHJhbmRvbWx5IGdlbmVyYXRlZCB1bmxlc3MgZXhwbGljaXRseSBwcm92aWRlZC5cbiAgICogXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciB0cmFja2luZyB1c2VyIGpvdXJuZXlzLCB3b3JrZmxvdyBjb21wbGV0aW9uLCBvciBncm91cGluZ1xuICAgKiByZWxhdGVkIGludGVyYWN0aW9ucyB3aXRoaW4gYSBzcGVjaWZpYyB0aW1lIHBlcmlvZC5cbiAgICogXG4gICAqIEBwYXJhbSBpZCAtIE9wdGlvbmFsIHVzZXItc3VwcGxpZWQgc2Vzc2lvbiBJRC4gSWYgbm90IHByb3ZpZGVkLCBhIHJhbmRvbSBzZXNzaW9uIElEIHdpbGwgYmUgZ2VuZXJhdGVkXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFN0YXJ0IGEgbmV3IHNlc3Npb24gd2l0aCBhdXRvLWdlbmVyYXRlZCBJRFxuICAgKiB0aGlzLmNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3Nlc3Npb25fc3RhcnQnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3VzZXJfYWN0aW9uXzEnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3VzZXJfYWN0aW9uXzInKTtcbiAgICogXG4gICAqIC8vIFN0YXJ0IGEgc2Vzc2lvbiB3aXRoIGN1c3RvbSBJRFxuICAgKiB0aGlzLmNsaWVudC5uZXdFdmVudFNlc3Npb24oJ3VzZXItd29ya2Zsb3ctMTIzNDUnKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ3dvcmtmbG93X3N0YXJ0Jyk7XG4gICAqIHRoaXMuY2xpZW50LnRyYWNrKCdzdGVwX2NvbXBsZXRlZCcsIHsgc3RlcDogMSB9KTtcbiAgICogXG4gICAqIC8vIFN0YXJ0IGEgbmV3IHNlc3Npb24gZm9yIGRpZmZlcmVudCB3b3JrZmxvd1xuICAgKiB0aGlzLmNsaWVudC5uZXdFdmVudFNlc3Npb24oKTtcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2RpZmZlcmVudF93b3JrZmxvd19zdGFydCcpO1xuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBuZXdFdmVudFNlc3Npb24oaWQ/OiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIHRoaXMuZ2V0Q2xpZW50KCkudGhlbigoY2xpZW50KSA9PiB7XG4gICAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGllbnQubmV3RXZlbnRTZXNzaW9uKGlkKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvb3QgZm9sZGVyIHBhdGggdXRpbGl6ZWQgYnkgdGhpcyBwbGF5ZXIgZGV2aWNlLlxuICAgKiBcbiAgICogVGhpcyByZXR1cm5zIHRoZSBiYXNlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBSZXZlbCBEaWdpdGFsIHBsYXllclxuICAgKiBzdG9yZXMgaXRzIGZpbGVzIGFuZCByZXNvdXJjZXMgb24gdGhlIGxvY2FsIGRldmljZS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBwYXRoIG9mIHRoZSByb290IGZvbGRlclxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByb290UGF0aCA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFJldmVsUm9vdCgpO1xuICAgKiBjb25zb2xlLmxvZygnUGxheWVyIHJvb3QgZGlyZWN0b3J5OicsIHJvb3RQYXRoKTtcbiAgICogLy8gVXNlIGZvciBjb25zdHJ1Y3RpbmcgZmlsZSBwYXRocyBvciB1bmRlcnN0YW5kaW5nIHN0b3JhZ2Ugc3RydWN0dXJlXG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFJldmVsUm9vdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0UmV2ZWxSb290KCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIG1hcCBvZiBjb21tYW5kcyBjdXJyZW50bHkgYWN0aXZlIGZvciB0aGlzIGRldmljZS5cbiAgICogXG4gICAqIFRoaXMgcmV0dXJucyB0aGUgY3VycmVudCBjb21tYW5kIGNvbmZpZ3VyYXRpb24gdGhhdCBkZWZpbmVzIGhvdyB0aGUgZGV2aWNlXG4gICAqIHJlc3BvbmRzIHRvIHZhcmlvdXMgY29tbWFuZCB0cmlnZ2VycyBhbmQgcmVtb3RlIGNvbW1hbmRzLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gYSBtYXAgb2YgY3VycmVudGx5IGFjdGl2ZSBjb21tYW5kc1xuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBjb21tYW5kTWFwID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0Q29tbWFuZE1hcCgpO1xuICAgKiBjb25zb2xlLmxvZygnQWN0aXZlIGNvbW1hbmRzOicsIGNvbW1hbmRNYXApO1xuICAgKiBcbiAgICogLy8gQ2hlY2sgaWYgc3BlY2lmaWMgY29tbWFuZCBpcyBhdmFpbGFibGVcbiAgICogaWYgKGNvbW1hbmRNYXBbJ2N1c3RvbUNvbW1hbmQnXSkge1xuICAgKiAgIGNvbnNvbGUubG9nKCdDdXN0b20gY29tbWFuZCBpcyBhdmFpbGFibGUnKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDb21tYW5kTWFwKCk6IFByb21pc2U8YW55PiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgY2xpZW50LmdldENvbW1hbmRNYXAoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbmFscyB0byB0aGUgcGxheWVyIHRoYXQgdGhpcyBnYWRnZXQgaGFzIGNvbXBsZXRlZCBpdHMgdmlzdWFsaXphdGlvbi5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIG5vdGlmaWVzIHRoZSBwbGF5ZXIgdGhhdCB0aGUgY3VycmVudCBnYWRnZXQgaGFzIGZpbmlzaGVkIGl0c1xuICAgKiBjb250ZW50IGRpc3BsYXkgb3IgaW50ZXJhY3Rpb24gY3ljbGUuIFRoZSBwbGF5ZXIgY2FuIHRoZW4gcHJvY2VlZCB3aXRoXG4gICAqIHRoZSBuZXh0IGl0ZW0gaW4gYSBwbGF5bGlzdCBpZiBhcHBsaWNhYmxlLCBvciBoYW5kbGUgdGhlIGNvbXBsZXRpb25cbiAgICogYWNjb3JkaW5nIHRvIGl0cyBjb25maWd1cmF0aW9uLlxuICAgKiBcbiAgICogQ2FsbCB0aGlzIG1ldGhvZCB3aGVuIHlvdXIgZ2FkZ2V0IGhhcyBjb21wbGV0ZWQgaXRzIGludGVuZGVkIGZ1bmN0aW9uLFxuICAgKiBzdWNoIGFzIGZpbmlzaGluZyBhbiBhbmltYXRpb24sIGNvbXBsZXRpbmcgYSBmb3JtLCBvciByZWFjaGluZyBhIG5hdHVyYWxcbiAgICogc3RvcHBpbmcgcG9pbnQuXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIEFmdGVyIGNvbXBsZXRpbmcgYW4gYW5pbWF0aW9uXG4gICAqIHByaXZhdGUgb25BbmltYXRpb25Db21wbGV0ZSgpOiB2b2lkIHtcbiAgICogICB0aGlzLmNsaWVudC5maW5pc2goKTtcbiAgICogfVxuICAgKiBcbiAgICogLy8gQWZ0ZXIgdXNlciBpbnRlcmFjdGlvbiBpcyBjb21wbGV0ZVxuICAgKiBwcml2YXRlIG9uRm9ybVN1Ym1pdHRlZCgpOiB2b2lkIHtcbiAgICogICB0aGlzLnNhdmVGb3JtRGF0YSgpO1xuICAgKiAgIHRoaXMuY2xpZW50LmZpbmlzaCgpO1xuICAgKiB9XG4gICAqIFxuICAgKiAvLyBBZnRlciBhIHRpbWVkIGRpc3BsYXkgcGVyaW9kXG4gICAqIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgKiAgIHRoaXMuY2xpZW50LmZpbmlzaCgpO1xuICAgKiB9LCAzMDAwMCk7IC8vIDMwIHNlY29uZHNcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgZmluaXNoKCk6IHZvaWQge1xuXG4gICAgdGhpcy5nZXRDbGllbnQoKS50aGVuKChjbGllbnQpID0+IHtcblxuICAgICAgY2xpZW50LmZpbmlzaCgpO1xuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBnYWRnZXQgaXMgcnVubmluZyBpbiBwcmV2aWV3IG1vZGUuXG4gICAqIFxuICAgKiBQcmV2aWV3IG1vZGUgaXMgZW5hYmxlZCB3aGVuIHRoZSBnYWRnZXQgaXMgYmVpbmcgZWRpdGVkIGluIHRoZSBSZXZlbCBEaWdpdGFsIENNUyxcbiAgICogdGVzdGVkIGluIHRoZSBnYWRnZXQgZWRpdG9yLCBvciBvdGhlcndpc2Ugbm90IHJ1bm5pbmcgaW4gYSBub3JtYWwgcGxheWVyIGVudmlyb25tZW50LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJvdmlkaW5nIGRpZmZlcmVudCBiZWhhdmlvciBkdXJpbmcgZGV2ZWxvcG1lbnQvdGVzdGluZyB2ZXJzdXNcbiAgICogcHJvZHVjdGlvbiBkZXBsb3ltZW50LlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSBpZiBydW5uaW5nIGluIHByZXZpZXcgbW9kZSwgZmFsc2UgaWYgcnVubmluZyBvbiBhY3R1YWwgcGxheWVyXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGlzUHJldmlldyA9IGF3YWl0IHRoaXMuY2xpZW50LmlzUHJldmlld01vZGUoKTtcbiAgICogXG4gICAqIGlmIChpc1ByZXZpZXcpIHtcbiAgICogICBjb25zb2xlLmxvZygnUnVubmluZyBpbiBwcmV2aWV3IG1vZGUgLSB1c2luZyBtb2NrIGRhdGEnKTtcbiAgICogICB0aGlzLmxvYWRNb2NrRGF0YSgpO1xuICAgKiB9IGVsc2Uge1xuICAgKiAgIGNvbnNvbGUubG9nKCdSdW5uaW5nIG9uIHBsYXllciBkZXZpY2UgLSB1c2luZyBsaXZlIGRhdGEnKTtcbiAgICogICB0aGlzLmxvYWRMaXZlRGF0YSgpO1xuICAgKiB9XG4gICAqIFxuICAgKiAvLyBTaG93IGRpZmZlcmVudCBVSSBpbiBwcmV2aWV3XG4gICAqIHRoaXMuc2hvd1ByZXZpZXdJbmRpY2F0b3IgPSBpc1ByZXZpZXc7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGlzUHJldmlld01vZGUoKTogUHJvbWlzZTxib29sZWFuPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudCBpbnN0YW5jZW9mIE5vb3BDbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGV2aWNlIHJ1bm5pbmcgdGhlIHBsYXllci5cbiAgICogXG4gICAqIFJldHVybnMgY29tcHJlaGVuc2l2ZSBkZXZpY2UgZGV0YWlscyBpbmNsdWRpbmcgbmFtZSwgcmVnaXN0cmF0aW9uIGtleSwgdHlwZSxcbiAgICogc2VydmljZSBkYXRlLCBsYW5ndWFnZSwgdGltZXpvbmUsIHRhZ3MsIGFuZCBsb2NhdGlvbiBpbmZvcm1hdGlvbi4gVGhpcyBkYXRhXG4gICAqIGlzIGNvbmZpZ3VyZWQgaW4gdGhlIFJldmVsIERpZ2l0YWwgQ01TIGZvciBlYWNoIGRldmljZS5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGRldmljZSBkZXRhaWxzIG9iamVjdCwgb3IgbnVsbCBpZiBub3QgYXZhaWxhYmxlXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRldmljZSA9IGF3YWl0IHRoaXMuY2xpZW50LmdldERldmljZSgpO1xuICAgKiBcbiAgICogaWYgKGRldmljZSkge1xuICAgKiAgIGNvbnNvbGUubG9nKCdEZXZpY2UgbmFtZTonLCBkZXZpY2UubmFtZSk7XG4gICAqICAgY29uc29sZS5sb2coJ0RldmljZSB0eXBlOicsIGRldmljZS5kZXZpY2VUeXBlKTtcbiAgICogICBjb25zb2xlLmxvZygnTG9jYXRpb246JywgZGV2aWNlLmxvY2F0aW9uLmNpdHksIGRldmljZS5sb2NhdGlvbi5zdGF0ZSk7XG4gICAqICAgY29uc29sZS5sb2coJ1RhZ3M6JywgZGV2aWNlLnRhZ3MpO1xuICAgKiAgIFxuICAgKiAgIC8vIFVzZSBkZXZpY2UgaW5mbyBmb3IgY3VzdG9taXphdGlvblxuICAgKiAgIGlmIChkZXZpY2UubG9jYXRpb24uY291bnRyeSA9PT0gJ1VTJykge1xuICAgKiAgICAgdGhpcy5sb2FkVVNDb250ZW50KCk7XG4gICAqICAgfVxuICAgKiAgIFxuICAgKiAgIC8vIENoZWNrIGRldmljZSBjYXBhYmlsaXRpZXMgYmFzZWQgb24gdHlwZVxuICAgKiAgIGlmIChkZXZpY2UuZGV2aWNlVHlwZSA9PT0gJ2FuZHJvaWQnKSB7XG4gICAqICAgICB0aGlzLmVuYWJsZVRvdWNoRmVhdHVyZXMoKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlKCk6IFByb21pc2U8SURldmljZSB8IG51bGw+IHtcblxuICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHRoaXMuZ2V0Q2xpZW50KCk7XG5cbiAgICBjb25zdCBvYmo6IGFueSA9IEpTT04ucGFyc2UoPHN0cmluZz5hd2FpdCBjbGllbnQuZ2V0RGV2aWNlKCkpO1xuXG4gICAgY29uc3QgZGV2aWNlOiBJRGV2aWNlW10gPSBbb2JqXS5tYXAoKGRldmljZTogYW55KSA9PiB7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGRldmljZS5uYW1lLFxuICAgICAgICByZWdpc3RyYXRpb25LZXk6IGRldmljZS5rZXksXG4gICAgICAgIGRldmljZVR5cGU6IGRldmljZS5kZXZpY2V0eXBlLFxuICAgICAgICBlbnRlcmVkU2VydmljZTogbmV3IERhdGUoZGV2aWNlLmVudGVyZWRzZXJ2aWNlKSxcbiAgICAgICAgbGFuZ0NvZGU6IGRldmljZS5sYW5nY29kZSxcbiAgICAgICAgdGltZVpvbmU6IGRldmljZS50aW1lem9uZSxcbiAgICAgICAgdGFnczogZGV2aWNlLmRlc2NyaXB0aW9uPy5zcGxpdCgnXFxuJyksXG4gICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgY2l0eTogZGV2aWNlLmxvY2F0aW9uPy5jaXR5LFxuICAgICAgICAgIHN0YXRlOiBkZXZpY2UubG9jYXRpb24/LnN0YXRlLFxuICAgICAgICAgIGNvdW50cnk6IGRldmljZS5sb2NhdGlvbj8uY291bnRyeSxcbiAgICAgICAgICBwb3N0YWxDb2RlOiBkZXZpY2UubG9jYXRpb24/LnBvc3RhbGNvZGUsXG4gICAgICAgICAgYWRkcmVzczogZGV2aWNlLmxvY2F0aW9uPy5hZGRyZXNzLFxuICAgICAgICAgIGxhdGl0dWRlOiBkZXZpY2UubG9jYXRpb24/LmxhdGl0dWRlLFxuICAgICAgICAgIGxvbmdpdHVkZTogZGV2aWNlLmxvY2F0aW9uPy5sb25naXR1ZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkZXZpY2VbMF07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgd2lkdGggb2YgdGhlIHZpc3VhbGl6YXRpb24gYXJlYSBpbiBwaXhlbHMuXG4gICAqIFxuICAgKiBUaGlzIHJldHVybnMgdGhlIGF2YWlsYWJsZSB3aWR0aCBmb3IgY29udGVudCBkaXNwbGF5LCB3aGljaCBtYXkgYmVcbiAgICogZGlmZmVyZW50IGZyb20gdGhlIGZ1bGwgc2NyZWVuIHdpZHRoIGRlcGVuZGluZyBvbiBwbGF5ZXIgY29uZmlndXJhdGlvblxuICAgKiBhbmQgdGVtcGxhdGUgbGF5b3V0LlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gd2lkdGggaW4gcGl4ZWxzLCBvciBudWxsIGlmIG5vdCBhdmFpbGFibGVcbiAgICogXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3Qgd2lkdGggPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRXaWR0aCgpO1xuICAgKiBcbiAgICogaWYgKHdpZHRoKSB7XG4gICAqICAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSB3aWR0aDonLCB3aWR0aCwgJ3BpeGVscycpO1xuICAgKiAgIFxuICAgKiAgIC8vIEFkYXB0IGNvbnRlbnQgbGF5b3V0IGJhc2VkIG9uIHdpZHRoXG4gICAqICAgaWYgKHdpZHRoIDwgODAwKSB7XG4gICAqICAgICB0aGlzLmVuYWJsZU1vYmlsZUxheW91dCgpO1xuICAgKiAgIH0gZWxzZSB7XG4gICAqICAgICB0aGlzLmVuYWJsZURlc2t0b3BMYXlvdXQoKTtcbiAgICogICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0V2lkdGgoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXRXaWR0aCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGhlaWdodCBvZiB0aGUgdmlzdWFsaXphdGlvbiBhcmVhIGluIHBpeGVscy5cbiAgICogXG4gICAqIFRoaXMgcmV0dXJucyB0aGUgYXZhaWxhYmxlIGhlaWdodCBmb3IgY29udGVudCBkaXNwbGF5LCB3aGljaCBtYXkgYmVcbiAgICogZGlmZmVyZW50IGZyb20gdGhlIGZ1bGwgc2NyZWVuIGhlaWdodCBkZXBlbmRpbmcgb24gcGxheWVyIGNvbmZpZ3VyYXRpb25cbiAgICogYW5kIHRlbXBsYXRlIGxheW91dC5cbiAgICogXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGhlaWdodCBpbiBwaXhlbHMsIG9yIG51bGwgaWYgbm90IGF2YWlsYWJsZVxuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBoZWlnaHQgPSBhd2FpdCB0aGlzLmNsaWVudC5nZXRIZWlnaHQoKTtcbiAgICogXG4gICAqIGlmIChoZWlnaHQpIHtcbiAgICogICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIGhlaWdodDonLCBoZWlnaHQsICdwaXhlbHMnKTtcbiAgICogICBcbiAgICogICAvLyBDYWxjdWxhdGUgYXNwZWN0IHJhdGlvIGZvciByZXNwb25zaXZlIGRlc2lnblxuICAgKiAgIGNvbnN0IHdpZHRoID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0V2lkdGgoKTtcbiAgICogICBjb25zdCBhc3BlY3RSYXRpbyA9IHdpZHRoIC8gaGVpZ2h0O1xuICAgKiAgIHRoaXMuYWRqdXN0Q29udGVudEZvckFzcGVjdFJhdGlvKGFzcGVjdFJhdGlvKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRIZWlnaHQoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG5cbiAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuXG4gICAgcmV0dXJuIGNsaWVudC5nZXRIZWlnaHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBkdXJhdGlvbiBvZiB0aGUgY3VycmVudGx5IHBsYXlpbmcgY29udGVudCBpdGVtLlxuICAgKiBcbiAgICogVGhpcyBtZXRob2QgaXMgb25seSBhcHBsaWNhYmxlIHdoZW4gdGhlIGdhZGdldCBpcyBhc3NvY2lhdGVkIHdpdGggYSBwbGF5bGlzdFxuICAgKiBhbmQgcmV0dXJucyB0aGUgZHVyYXRpb24gYXNzaWduZWQgdG8gdGhlIGN1cnJlbnQgcGxheWxpc3QgaXRlbS4gVGhlIGR1cmF0aW9uXG4gICAqIGRldGVybWluZXMgaG93IGxvbmcgdGhlIGNvbnRlbnQgc2hvdWxkIGJlIGRpc3BsYXllZCBiZWZvcmUgbW92aW5nIHRvIHRoZSBuZXh0IGl0ZW0uXG4gICAqIFxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMsIG9yIG51bGwgaWYgbm90IGFwcGxpY2FibGUvYXZhaWxhYmxlXG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGR1cmF0aW9uID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0RHVyYXRpb24oKTtcbiAgICogXG4gICAqIGlmIChkdXJhdGlvbikge1xuICAgKiAgIGNvbnNvbGUubG9nKCdDb250ZW50IGR1cmF0aW9uOicsIGR1cmF0aW9uLCAnbWlsbGlzZWNvbmRzJyk7XG4gICAqICAgXG4gICAqICAgLy8gU2V0IHVwIGF1dG8tZmluaXNoIHRpbWVyXG4gICAqICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAqICAgICB0aGlzLmNsaWVudC5maW5pc2goKTtcbiAgICogICB9LCBkdXJhdGlvbik7XG4gICAqICAgXG4gICAqICAgLy8gU2hvdyBwcm9ncmVzcyBpbmRpY2F0b3JcbiAgICogICB0aGlzLnN0YXJ0UHJvZ3Jlc3NJbmRpY2F0b3IoZHVyYXRpb24pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldER1cmF0aW9uKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuXG4gICAgY29uc3QgY2xpZW50ID0gYXdhaXQgdGhpcy5nZXRDbGllbnQoKTtcblxuICAgIHJldHVybiBjbGllbnQuZ2V0RHVyYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIFJldmVsIERpZ2l0YWwgU0RLLlxuICAgKiBcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIFNESyB2ZXJzaW9uIHN0cmluZ1xuICAgKiBcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB2ZXJzaW9uID0gYXdhaXQgdGhpcy5jbGllbnQuZ2V0U2RrVmVyc2lvbigpO1xuICAgKiBjb25zb2xlLmxvZygnU0RLIFZlcnNpb246JywgdmVyc2lvbik7XG4gICAqIFxuICAgKiAvLyBVc2UgZm9yIGNvbXBhdGliaWxpdHkgY2hlY2tzIG9yIGxvZ2dpbmdcbiAgICogdGhpcy5jbGllbnQudHJhY2soJ2dhZGdldF9sb2FkZWQnLCB7IHNka1ZlcnNpb246IHZlcnNpb24gfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFNka1ZlcnNpb24oKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmVyc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzIHRvIHRoZSBnYWRnZXQgKHByZXZpZXcgbW9kZSBvbmx5KS5cbiAgICogXG4gICAqIFRoaXMgbWV0aG9kIGlzIG9ubHkgYXZhaWxhYmxlIHdoZW4gcnVubmluZyBpbiBwcmV2aWV3IG1vZGUgKHR5cGljYWxseSBkdXJpbmdcbiAgICogZ2FkZ2V0IGRldmVsb3BtZW50IG9yIHRlc3RpbmcgaW4gdGhlIENNUykuIEl0IGFsbG93cyBhcHBseWluZyBjb25maWd1cmF0aW9uXG4gICAqIGNoYW5nZXMgdGhhdCB3b3VsZCBub3JtYWxseSBjb21lIGZyb20gdGhlIGdhZGdldCdzIHByZWZlcmVuY2Ugc2V0dGluZ3MuXG4gICAqIFxuICAgKiBAcGFyYW0gcHJlZnMgLSBEaWN0aW9uYXJ5IG9mIHByZWZlcmVuY2Uga2V5LXZhbHVlIHBhaXJzIHRvIGFwcGx5XG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGlmIChhd2FpdCB0aGlzLmNsaWVudC5pc1ByZXZpZXdNb2RlKCkpIHtcbiAgICogICAvLyBBcHBseSB0ZXN0IGNvbmZpZ3VyYXRpb24gaW4gcHJldmlld1xuICAgKiAgIGF3YWl0IHRoaXMuY2xpZW50LmFwcGx5Q29uZmlnKHtcbiAgICogICAgICd0aXRsZSc6ICdUZXN0IFRpdGxlJyxcbiAgICogICAgICdiYWNrZ3JvdW5kQ29sb3InOiAnI2ZmMDAwMCcsXG4gICAqICAgICAnc2hvd0JvcmRlcic6IHRydWUsXG4gICAqICAgICAncmVmcmVzaEludGVydmFsJzogMzBcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhcHBseUNvbmZpZyhwcmVmczogSURpY3Rpb25hcnk8YW55Pikge1xuXG4gICAgaWYgKGF3YWl0IHRoaXMuaXNQcmV2aWV3TW9kZSgpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCB0aGlzLmdldENsaWVudCgpO1xuICAgICAgY2xpZW50LmFwcGx5Q29uZmlnKHByZWZzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICclY2FwcGx5Q29uZmlnKCkgaXMgb25seSBhdmFpbGFibGUgaW4gcHJldmlldyBtb2RlLicsXG4gICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IGNvbG9yOnllbGxvdzsnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHlwZWQgd3JhcHBlciBmb3IgYSBSZXZlbCBEaWdpdGFsIGRhdGEgdGFibGUuXG4gICAqXG4gICAqIFRoZSBkYXRhIHRhYmxlIGZlYXR1cmUgbXVzdCBiZSBlbmFibGVkIGZvciB0aGUgZ2FkZ2V0LiBUaGUgcmV0dXJuZWRcbiAgICoge0BsaW5rIERhdGFUYWJsZVJlZn0gcHJvdmlkZXMgdHlwZWQgUHJvbWlzZS1iYXNlZCBtZXRob2RzIGFuZCBSeEpTXG4gICAqIE9ic2VydmFibGVzIGZvciByZWFsLXRpbWUgcm93IGNoYW5nZSBldmVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZUlkIC0gVGhlIGRhdGEgdGFibGUgSUQgKGUuZy4gJ3RibF9tZW51X2l0ZW1zJylcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG92ZXJyaWRlc1xuICAgKiBAcmV0dXJucyBBIHtAbGluayBEYXRhVGFibGVSZWZ9IGluc3RhbmNlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZHQgPSB0aGlzLmNsaWVudC5jcmVhdGVEYXRhVGFibGUoJ3RibF9tZW51X2l0ZW1zJyk7XG4gICAqXG4gICAqIC8vIEZldGNoIHJvd3Mgd2l0aCBmaWx0ZXJpbmcgYW5kIHNvcnRpbmdcbiAgICogY29uc3QgcmVzdWx0ID0gYXdhaXQgZHQuZ2V0Um93cyh7XG4gICAqICAgZmlsdGVyOiB7IGNhdGVnb3J5OiAnRW50cmVlJywgcHJpY2U6IHsgb3A6ICdsdGUnLCB2YWx1ZTogMjUgfSB9LFxuICAgKiAgIHNvcnQ6ICdwcmljZScsXG4gICAqICAgc29ydERpcjogJ2FzYydcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFN1YnNjcmliZSB0byByZWFsLXRpbWUgdXBkYXRlc1xuICAgKiBkdC5yb3dVcGRhdGVkJC5zdWJzY3JpYmUoY2hhbmdlID0+IGNvbnNvbGUubG9nKCdSb3cgdXBkYXRlZDonLCBjaGFuZ2UpKTtcbiAgICogZHQucm93Q3JlYXRlZCQuc3Vic2NyaWJlKGNoYW5nZSA9PiBjb25zb2xlLmxvZygnUm93IGNyZWF0ZWQ6JywgY2hhbmdlKSk7XG4gICAqIGR0LnJvd0RlbGV0ZWQkLnN1YnNjcmliZShjaGFuZ2UgPT4gY29uc29sZS5sb2coJ1JvdyBkZWxldGVkOicsIGNoYW5nZSkpO1xuICAgKlxuICAgKiAvLyBDbGVhbnVwIHdoZW4gZG9uZVxuICAgKiBkdC5kaXNwb3NlKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgcHVibGljIGNyZWF0ZURhdGFUYWJsZSh0YWJsZUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBJRGF0YVRhYmxlT3B0aW9ucyk6IERhdGFUYWJsZVJlZiB7XG4gICAgcmV0dXJuIG5ldyBEYXRhVGFibGVSZWYodGFibGVJZCwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHR5cGVkIGRhdGEgdGFibGUgd3JhcHBlciBmcm9tIGEgZ2FkZ2V0IHByZWZlcmVuY2UgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBwcmVmZXJlbmNlIEpTT04gc3RyaW5nIChhcyBzZXJpYWxpemVkIGJ5IHRoZSB0ZW1wbGF0ZSBlZGl0b3IncyBkYXRhdGFibGVcbiAgICogb3B0aW9uKSBpcyBwYXJzZWQgYW5kIHVzZWQgdG8gYXV0by1jb25maWd1cmUgZmlsdGVyLCBzb3J0LCBhbmQgbG9naWMgc2V0dGluZ3MuXG4gICAqIFRoZSByZXR1cm5lZCB7QGxpbmsgRGF0YVRhYmxlUHJlZlJlZn0gcHJvdmlkZXMgYSBgZ2V0RmlsdGVyZWRSb3dzKClgIGNvbnZlbmllbmNlXG4gICAqIG1ldGhvZCB0aGF0IGFwcGxpZXMgdGhlc2Ugc2V0dGluZ3MgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogQHBhcmFtIHByZWZWYWx1ZSAtIFRoZSByYXcgZ2FkZ2V0IHByZWZlcmVuY2Ugc3RyaW5nIChKU09OKVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGVzXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIERhdGFUYWJsZVByZWZSZWZ9IGluc3RhbmNlXG4gICAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGdsb2JhbCBkYXRhdGFibGUgbGlicmFyeSBpcyBub3QgbG9hZGVkXG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgY2ZnID0gdGhpcy5jbGllbnQuY3JlYXRlRGF0YVRhYmxlRnJvbVByZWYocHJlZnMuZ2V0U3RyaW5nKCdyZERhdGFUYWJsZScpKTtcbiAgICpcbiAgICogLy8gRmV0Y2ggcm93cyB3aXRoIGF1dG8td2lyZWQgZmlsdGVyICsgc29ydFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjZmcuZ2V0RmlsdGVyZWRSb3dzKCk7XG4gICAqXG4gICAqIC8vIEFjY2VzcyB0aGUgdW5kZXJseWluZyBEYXRhVGFibGVSZWYgZm9yIGV2ZW50cywgc2NoZW1hLCBldGMuXG4gICAqIGNmZy5kYXRhVGFibGUucm93VXBkYXRlZCQuc3Vic2NyaWJlKGNoYW5nZSA9PiBjb25zb2xlLmxvZyhjaGFuZ2UpKTtcbiAgICpcbiAgICogLy8gQ2xlYW51cCB3aGVuIGRvbmVcbiAgICogY2ZnLmRpc3Bvc2UoKTtcbiAgICogYGBgXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlRGF0YVRhYmxlRnJvbVByZWYocHJlZlZhbHVlOiBzdHJpbmcsIG9wdGlvbnM/OiBJRGF0YVRhYmxlT3B0aW9ucyk6IERhdGFUYWJsZVByZWZSZWYge1xuICAgIHJldHVybiBuZXcgRGF0YVRhYmxlUHJlZlJlZihwcmVmVmFsdWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gLS0tXG4gIC8vIFBSSVZBVEUgTUVUSE9EUy5cbiAgLy8gLS0tXG4gIC8qKiBAaWdub3JlICovXG4gIHByaXZhdGUgZ2V0Q2xpZW50KCk6IFByb21pc2U8SUNsaWVudD4ge1xuXG4gICAgaWYgKHRoaXMuY2xpZW50UHJvbWlzZSkge1xuXG4gICAgICByZXR1cm4gKHRoaXMuY2xpZW50UHJvbWlzZSk7XG4gICAgfVxuXG4gICAgaWYgKCh3aW5kb3cgYXMgYW55KS5DbGllbnQpIHtcblxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKHdpbmRvdyBhcyBhbnkpLkNsaWVudCkpO1xuICAgIH1cblxuICAgIC8vIEEgXCJjb21wbGV0ZVwiIHN0YXR1cyBpbmRpY2F0ZXMgdGhhdCB0aGUgXCJsb2FkXCIgZXZlbnQgaGFzIGJlZW4gZmlyZWQgb24gdGhlXG4gICAgLy8gd2luZG93OyBhbmQsIHRoYXQgYWxsIHN1Yi1yZXNvdXJjZXMgc3VjaCBhcyBTY3JpcHRzLCBJbWFnZXMsIGFuZCBGcmFtZXMgaGF2ZVxuICAgIC8vIGJlZW4gbG9hZGVkLlxuICAgIGlmICh3aW5kb3cuZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB7XG5cbiAgICAgIC8vIElmIHRoaXMgZXZlbnQgaGFzIGZpcmVkIEFORCB0aGUgM3JkLXBhcnR5IHNjcmlwdCBpc24ndCBhdmFpbGFibGUgKHNlZSBJRi1cbiAgICAgIC8vIGNvbmRpdGlvbiBCRUZPUkUgdGhpcyBvbmUpLCBpdCBtZWFucyB0aGF0IHRoZSAzcmQtcGFydHkgc2NyaXB0IGVpdGhlclxuICAgICAgLy8gZmFpbGVkIG9uIHRoZSBuZXR3b3JrIG9yIHdhcyBCTE9DS0VEIGJ5IGFuIGFkLWJsb2NrZXIuIEFzIHN1Y2gsIHdlIGhhdmUgdG9cbiAgICAgIC8vIGZhbGwtYmFjayB0byB1c2luZyBhIG1vY2sgQVBJLlxuICAgICAgcmV0dXJuICh0aGlzLmNsaWVudFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobmV3IE5vb3BDbGllbnQoKSkpO1xuICAgIH1cblxuICAgIC8vIEFTU0VSVDogSWYgd2UgbWFkZSBpdCB0aGlzIGZhciwgdGhlIGRvY3VtZW50IGhhcyBub3QgY29tcGxldGVkIGxvYWRpbmcgKGJ1dCBpdFxuICAgIC8vIG1heSBiZSBpbiBhbiBcImludGVyYWN0aXZlXCIgc3RhdGUgd2hpY2ggaXMgd2hlbiBJIGJlbGlldmUgdGhhdCB0aGUgQW5ndWxhciBhcHBcbiAgICAvLyBnZXRzIGJvb3RzdHJhcHBlZCkuIEFzIHN1Y2gsIHdlIG5lZWQgYmluZCB0byB0aGUgTE9BRCBldmVudCB0byB3YWl0IGZvciBvdXJcbiAgICAvLyB0aGlyZC1wYXJ0eSBzY3JpcHRzIHRvIGxvYWQgKG9yIGZhaWwgdG8gbG9hZCwgb3IgYmUgYmxvY2tlZCkuXG4gICAgdGhpcy5jbGllbnRQcm9taXNlID0gbmV3IFByb21pc2U8SUNsaWVudD4oXG4gICAgICAocmVzb2x2ZSkgPT4ge1xuXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIFwibG9hZFwiLFxuICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZVdpbmRvd0xvYWQoKSB7XG5cbiAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSAzcmQtcGFydHkgbGlicmFyeSBpcyBlaXRoZXIgYXZhaWxhYmxlIG9yXG4gICAgICAgICAgICAvLyBpdCdzIG5vdCAtIHRoZXJlJ3Mgbm8gZnVydGhlciBsb2FkaW5nIHRvIGRvLiBJZiBpdCdzIG5vdFxuICAgICAgICAgICAgLy8gcHJlc2VudCBvbiB0aGUgZ2xvYmFsIHNjb3BlLCB3ZSdyZSBnb2luZyB0byBmYWxsLWJhY2sgdG8gdXNpbmdcbiAgICAgICAgICAgIC8vIGEgbW9jayBBUEkuXG4gICAgICAgICAgICByZXNvbHZlKCh3aW5kb3cgYXMgYW55KS5DbGllbnQgfHwgbmV3IE5vb3BDbGllbnQoKSk7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJldHVybiAodGhpcy5jbGllbnRQcm9taXNlKTtcbiAgfVxufVxuXG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXG5cbi8qKlxuICogTW9jayBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSUNsaWVudCBpbnRlcmZhY2UuXG4gKiBcbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBuby1vcGVyYXRpb24gKE5PT1ApIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjbGllbnQgQVBJXG4gKiB0aGF0IGFsbG93cyBjb25zdW1pbmcgY29kZSB0byBmdW5jdGlvbiBub3JtYWxseSBldmVuIHdoZW4gdGhlIGFjdHVhbCBwbGF5ZXJcbiAqIEFQSSBpcyBub3QgYXZhaWxhYmxlLiBUaGlzIHR5cGljYWxseSBvY2N1cnMgZHVyaW5nIGRldmVsb3BtZW50LCB0ZXN0aW5nLFxuICogb3Igd2hlbiB0aGUgcGxheWVyIHNjcmlwdCBpcyBibG9ja2VkIGJ5IGFkLWJsb2NrZXJzLlxuICogXG4gKiBBbGwgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIGVpdGhlciByZXR1cm4gbnVsbC9lbXB0eSB2YWx1ZXMgb3IgcGVyZm9ybSBub1xuICogb3BlcmF0aW9ucywgYWxsb3dpbmcgZ2FkZ2V0cyB0byBmdW5jdGlvbiB3aXRob3V0IGVycm9ycyB3aGlsZSBwcm92aWRpbmdcbiAqIGFwcHJvcHJpYXRlIGZhbGxiYWNrIGJlaGF2aW9yLlxuICogXG4gKiBAcHJpdmF0ZVxuICovXG5jbGFzcyBOb29wQ2xpZW50IGltcGxlbWVudHMgSUNsaWVudCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG5cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgICclY0NsaWVudCBBUEkgbm90IGF2YWlsYWJsZSwgZmFsbGluZyBiYWNrIHRvIG1vY2sgQVBJJyxcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yOmJsdWU7IGNvbG9yOnllbGxvdzsnXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjYWxsYmFjayguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgZ2V0RGV2aWNlVGltZShkYXRlPzogRGF0ZSk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVOYW1lKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERldmljZVRpbWVab25lSUQoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0RGV2aWNlVGltZVpvbmVPZmZzZXQoKTogUHJvbWlzZTxudW1iZXI+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TGFuZ3VhZ2VDb2RlKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERldmljZUtleSgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBzZW5kQ29tbWFuZChuYW1lOiBzdHJpbmcsIGFyZzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cbiAgfVxuXG4gIHB1YmxpYyBzZW5kUmVtb3RlQ29tbWFuZChkZXZpY2VLZXlzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBhcmc6IHN0cmluZykge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgdHJhY2soZXZlbnROYW1lOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBzdHJpbmcpOiB2b2lkIHtcblxuICAgIC8vIE5PT1AgaW1wbGVtZW50LCBub3RoaW5nIHRvIGRvLi4uLlxuICB9XG5cbiAgcHVibGljIHRpbWVFdmVudChldmVudE5hbWU6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgLy8gTk9PUCBpbXBsZW1lbnQsIG5vdGhpbmcgdG8gZG8uLi4uXG4gIH1cblxuICBwdWJsaWMgbmV3RXZlbnRTZXNzaW9uKGlkPzogc3RyaW5nKTogdm9pZCB7XG5cbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZXZlbFJvb3QoKTogUHJvbWlzZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q29tbWFuZE1hcCgpOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgne30nKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5pc2goKTogdm9pZCB7XG5cbiAgICAvLyBOT09QIGltcGxlbWVudCwgbm90aGluZyB0byBkby4uLi5cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXREZXZpY2UoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFdpZHRoKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRIZWlnaHQoKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldER1cmF0aW9uKCk6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTZGtWZXJzaW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZlcnNpb24pO1xuICB9XG5cbiAgcHVibGljIGFwcGx5Q29uZmlnKHByZWZzOiBJRGljdGlvbmFyeTxhbnk+KTogdm9pZCB7XG5cbiAgICBjb25zdCBldnQgPSB7IHR5cGU6ICdhcHBseUNvbmZpZycsIHByZWZzOiBwcmVmcywgaXNPcGVuZXI6IHdpbmRvdy5vcGVuZXIgIT09IG51bGwgfTtcblxuICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XG4gICAgICB3aW5kb3cub3BlbmVyLnBvc3RNZXNzYWdlKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShldnQpLFxuICAgICAgICAnKidcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KGV2dCksXG4gICAgICAgICcqJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,3 +1,3 @@
1
1
  // Generated by genversion.
2
- export const version = '2.1.0';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7QUFDM0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBnZW52ZXJzaW9uLlxuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSAnMi4xLjAnXG4iXX0=
2
+ export const version = '2.2.0';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JldmVsZGlnaXRhbC9wbGF5ZXItY2xpZW50L3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQkFBMkI7QUFDM0IsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBnZW52ZXJzaW9uLlxuZXhwb3J0IGNvbnN0IHZlcnNpb24gPSAnMi4yLjAnXG4iXX0=