@mnaoumov/obsidian-lib 8.0.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/__merged.cjs +22 -13
- package/dist/lib/cjs/__merged.d.cts +4 -3
- package/dist/lib/cjs/canvas.cjs +2 -2
- package/dist/lib/cjs/components/incremental-file-index-component.cjs +69 -5
- package/dist/lib/cjs/components/incremental-file-index-component.d.cts +16 -1
- package/dist/lib/cjs/components/rename-delete-handler-component.cjs +14 -14
- package/dist/lib/cjs/data-stores/local-data-store.cjs +16 -13
- package/dist/lib/cjs/data-stores/local-data-store.d.cts +9 -1
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +1 -0
- package/dist/lib/cjs/link.cjs +99 -75
- package/dist/lib/cjs/link.d.cts +112 -65
- package/dist/lib/cjs/metadata-cache.cjs +7 -7
- package/dist/lib/cjs/metadata-cache.d.cts +14 -13
- package/dist/lib/cjs/position.cjs +113 -0
- package/dist/lib/cjs/position.d.cts +55 -0
- package/dist/lib/cjs/reference.cjs +14 -2
- package/dist/lib/cjs/reference.d.cts +21 -1
- package/dist/lib/esm/__merged.d.mts +4 -3
- package/dist/lib/esm/__merged.mjs +23 -13
- package/dist/lib/esm/canvas.mjs +3 -3
- package/dist/lib/esm/components/incremental-file-index-component.d.mts +16 -1
- package/dist/lib/esm/components/incremental-file-index-component.mjs +69 -5
- package/dist/lib/esm/components/rename-delete-handler-component.mjs +17 -17
- package/dist/lib/esm/data-stores/local-data-store.d.mts +9 -1
- package/dist/lib/esm/data-stores/local-data-store.mjs +16 -13
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/index.d.mts +1 -0
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/link.d.mts +112 -65
- package/dist/lib/esm/link.mjs +96 -71
- package/dist/lib/esm/metadata-cache.d.mts +14 -13
- package/dist/lib/esm/metadata-cache.mjs +6 -6
- package/dist/lib/esm/position.d.mts +55 -0
- package/dist/lib/esm/position.mjs +23 -0
- package/dist/lib/esm/reference.d.mts +21 -1
- package/dist/lib/esm/reference.mjs +16 -2
- package/package.json +2 -2
|
@@ -71,7 +71,17 @@ class IncrementalFileIndexComponent extends ComponentEx {
|
|
|
71
71
|
*/
|
|
72
72
|
constructor(params) {
|
|
73
73
|
super();
|
|
74
|
-
this.options = {
|
|
74
|
+
this.options = {
|
|
75
|
+
accepts: params.accepts,
|
|
76
|
+
app: params.app,
|
|
77
|
+
indexFile: params.indexFile,
|
|
78
|
+
load: params.load,
|
|
79
|
+
onRemove: params.onRemove,
|
|
80
|
+
onSet: params.onSet,
|
|
81
|
+
save: params.save,
|
|
82
|
+
shouldAwaitMetadataChange: params.shouldAwaitMetadataChange ?? (() => false),
|
|
83
|
+
shouldMoveRecordsOnRename: params.shouldMoveRecordsOnRename ?? false
|
|
84
|
+
};
|
|
75
85
|
this.requestSave = debounce(
|
|
76
86
|
() => {
|
|
77
87
|
invokeAsyncSafely(() => this.flush());
|
|
@@ -113,8 +123,8 @@ class IncrementalFileIndexComponent extends ComponentEx {
|
|
|
113
123
|
this.registerEvent(app.metadataCache.on("changed", (file, content) => {
|
|
114
124
|
this.setText(file, content);
|
|
115
125
|
}));
|
|
116
|
-
this.registerEvent(app.vault.on("create", this.
|
|
117
|
-
this.registerEvent(app.vault.on("modify", this.
|
|
126
|
+
this.registerEvent(app.vault.on("create", this.handleContentEvent.bind(this)));
|
|
127
|
+
this.registerEvent(app.vault.on("modify", this.handleContentEvent.bind(this)));
|
|
118
128
|
this.registerEvent(app.vault.on("delete", (file) => {
|
|
119
129
|
if (file instanceof TFile) {
|
|
120
130
|
this.removeRecord(file.path);
|
|
@@ -175,12 +185,39 @@ class IncrementalFileIndexComponent extends ComponentEx {
|
|
|
175
185
|
await this.scanFile(file);
|
|
176
186
|
}
|
|
177
187
|
}
|
|
188
|
+
handleContentEvent(file) {
|
|
189
|
+
if (!(file instanceof TFile)) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (!this.options.shouldAwaitMetadataChange(file)) {
|
|
193
|
+
this.queueScan(file);
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
if (!this.options.accepts(file)) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
this.removeRecord(file.path);
|
|
200
|
+
this.revisions.set(file, {});
|
|
201
|
+
}
|
|
178
202
|
markDirty() {
|
|
179
203
|
this.revision++;
|
|
180
204
|
if (this.isBuiltValue && !this.isUnloaded()) {
|
|
181
205
|
this.requestSave();
|
|
182
206
|
}
|
|
183
207
|
}
|
|
208
|
+
moveRecord(file, oldPath) {
|
|
209
|
+
const entry = this.records.get(oldPath);
|
|
210
|
+
if (entry) {
|
|
211
|
+
this.removeRecord(oldPath);
|
|
212
|
+
if (this.options.accepts(file)) {
|
|
213
|
+
this.setRecord(file.path, entry);
|
|
214
|
+
}
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
if (!this.records.has(file.path)) {
|
|
218
|
+
this.queueScan(file);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
184
221
|
queueScan(file) {
|
|
185
222
|
if (file instanceof TFile) {
|
|
186
223
|
invokeAsyncSafely(() => this.scanFile(file));
|
|
@@ -202,6 +239,10 @@ class IncrementalFileIndexComponent extends ComponentEx {
|
|
|
202
239
|
}
|
|
203
240
|
}
|
|
204
241
|
rename(file, oldPath) {
|
|
242
|
+
if (this.options.shouldMoveRecordsOnRename) {
|
|
243
|
+
this.renameMovingRecords(file, oldPath);
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
205
246
|
if (file instanceof TFile) {
|
|
206
247
|
this.removeRecord(oldPath);
|
|
207
248
|
} else {
|
|
@@ -212,6 +253,21 @@ class IncrementalFileIndexComponent extends ComponentEx {
|
|
|
212
253
|
Vault.recurseChildren(file, this.queueScan.bind(this));
|
|
213
254
|
}
|
|
214
255
|
}
|
|
256
|
+
renameMovingRecords(file, oldPath) {
|
|
257
|
+
if (file instanceof TFile) {
|
|
258
|
+
this.moveRecord(file, oldPath);
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (!(file instanceof TFolder)) {
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
Vault.recurseChildren(file, (child) => {
|
|
265
|
+
if (child instanceof TFile) {
|
|
266
|
+
this.moveRecord(child, `${oldPath}${child.path.slice(file.path.length)}`);
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
this.removeTree(oldPath);
|
|
270
|
+
}
|
|
215
271
|
async saveChanges() {
|
|
216
272
|
while (this.isBuiltValue && this.savedRevision !== this.revision) {
|
|
217
273
|
const revision = this.revision;
|
|
@@ -233,7 +289,15 @@ class IncrementalFileIndexComponent extends ComponentEx {
|
|
|
233
289
|
if (!isCurrent()) {
|
|
234
290
|
return;
|
|
235
291
|
}
|
|
236
|
-
|
|
292
|
+
let content;
|
|
293
|
+
try {
|
|
294
|
+
content = await this.options.app.vault.cachedRead(file);
|
|
295
|
+
} catch (error) {
|
|
296
|
+
if (isCurrent()) {
|
|
297
|
+
throw error;
|
|
298
|
+
}
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
237
301
|
if (!isCurrent()) {
|
|
238
302
|
return;
|
|
239
303
|
}
|
|
@@ -257,4 +321,4 @@ class IncrementalFileIndexComponent extends ComponentEx {
|
|
|
257
321
|
export {
|
|
258
322
|
IncrementalFileIndexComponent
|
|
259
323
|
};
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luY3JlbWVudGFsLWZpbGUtaW5kZXgtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbmNyZW1lbnRhbCBwZXItZmlsZSBwcm9qZWN0aW9ucyB3aXRoIHN0YXQtYmFzZWQgcmVzdG9yYXRpb24gYW5kIGluamVjdGVkIHBlcnNpc3RlbmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBEZWJvdW5jZXIsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7XG4gIGRlYm91bmNlLFxuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuY29uc3QgU0FWRV9ERUJPVU5DRV9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4vKipcbiAqIERlcGVuZGVuY2llcyBvZiBhbiBpbmNyZW1lbnRhbCBpbmRleC4gUGVyc2lzdGVuY2UgbXVzdCB2YWxpZGF0ZSBpdHMgb3duIHNjaGVtYS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgaW1tdXRhYmxlIHBlci1maWxlIHByb2plY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhY2NlcHRlZCBieSB0aGlzIGluZGV4LCBmb3IgZXhhbXBsZSBNYXJrZG93biBmaWxlcyBvbmx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0czogKGZpbGU6IFRGaWxlKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG93bmluZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBpbW11dGFibGUgcmVjb3JkIHN5bmNocm9ub3VzbHk7IHRleHQgaXMgbmV2ZXIgcmV0YWluZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBpbmRleEZpbGU6IChwYXJhbXM6IEluZGV4RmlsZVBhcmFtcykgPT4gVDtcbiAgLyoqXG4gICAqIFJlYWRzIHZhbGlkYXRlZCByZWNvcmRzLCBvciBhbiBlbXB0eSBtYXAgZm9yIGEgbWlzc2luZy9pbmNvbXBhdGlibGUgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBsb2FkOiAoKSA9PiBQcm9taXNlPFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+PjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZWNvcmQgZnJvbSBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LiBDYWxsZWQgZm9yIGtub3duIHJlY29yZHMgb25seS5cbiAgICovXG4gIHJlYWRvbmx5IG9uUmVtb3ZlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LCBpbmNsdWRpbmcgcmVzdG9yZWQgcmVjb3Jkcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2V0OiAocGF0aDogc3RyaW5nLCByZWNvcmQ6IFQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIHNuYXBzaG90OyB3cml0ZXMgYXJlIHNlcmlhbGl6ZWQgYW5kIHJldHJpZWQgYnkgdGhlIG5leHQgZmx1c2ggYWZ0ZXIgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhdmU6IChyZWNvcmRzOiBSZWFkb25seU1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PikgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBBIHByb2plY3Rpb24gYW5kIHRoZSBmaWxlIHN0YXRzIG9ic2VydmVkIGJlZm9yZSByZWFkaW5nIGl0cyB0ZXh0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBpbW11dGFibGUgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleGVkRmlsZVJlY29yZDxUPiB7XG4gIC8qKlxuICAgKiBMYXN0IG1vZGlmaWNhdGlvbiB0aW1lLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBtdGltZTogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGNvbnN1bWVyJ3MgaW1tdXRhYmxlIHByb2plY3Rpb24uXG4gICAqL1xuICByZWFkb25seSByZWNvcmQ6IFQ7XG4gIC8qKlxuICAgKiBGaWxlIHNpemUgaW4gYnl0ZXMuXG4gICAqL1xuICByZWFkb25seSBzaXplOiBudW1iZXI7XG59XG5cbi8qKlxuICogSW5wdXRzIHRvIGEgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleEZpbGVQYXJhbXMge1xuICAvKipcbiAgICogVGV4dCByZWFkIGZyb20gdGhlIHZhdWx0LCBvciBzdXBwbGllZCBieSBhIG1ldGFkYXRhLWNhY2hlIGV2ZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGZpbGUgYmVpbmcgaW5kZXhlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGU6IFRGaWxlO1xufVxuXG4vKipcbiAqIEtlZXBzIHBlci1maWxlIHByb2plY3Rpb25zIGN1cnJlbnQgd2hpbGUgbG9hZGVkLiBDYWxsIGxvYWRXaXRoUHJvbWlzZXMgYWZ0ZXIgbWV0YWRhdGEgcmVhZGluZXNzIGlmIHRoZVxuICogcHJvamVjdGlvbiBuZWVkcyBjYWNoZWQgbWV0YWRhdGEuIExpc3RlbmVycyBhcmUgaW5zdGFsbGVkIGJlZm9yZSByZXN0b3JhdGlvbiwgYW5kIGV2ZW50cyB3aW4gb3ZlciBvbGRlciByZWFkcy5cbiAqIFJlYWRzIGFyZSBzZXF1ZW50aWFsLCBib3VuZGluZyBtZW1vcnkgYW5kIEkvTzsgY29uc3VtZXJzIG93biBzY2hlbWEsIHN0b3JhZ2UgbG9jYXRpb24gYW5kIHNlY29uZGFyeSBpbmRleGVzLlxuICogVW5jaGFuZ2VkIHJlY29yZHMgYXJlIHJldXNlZCBieSBtdGltZSBhbmQgc2l6ZSwgd2hpY2ggY2Fubm90IGRldGVjdCBhIHNhbWUtc3RhdCBleHRlcm5hbCByZXdyaXRlLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSBpbW11dGFibGUgcGVyLWZpbGUgcHJvamVjdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEluY3JlbWVudGFsRmlsZUluZGV4Q29tcG9uZW50PFQ+IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICAvKipcbiAgICogV2hldGhlciBzdGFydHVwIHJlY29uY2lsaWF0aW9uIGhhcyBjb21wbGV0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGluZGV4IGNvbXBsZXRlZCBpdHMgZmlyc3QgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGlzQnVpbHQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCdWlsdFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2plY3Rpb24sIG5vdGlmaWNhdGlvbnMgYW5kIHBlcnNpc3RlbmNlIHN1cHBsaWVkIGJ5IHRoZSBjb25zdW1lci5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBvcHRpb25zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+O1xuXG4gIHByaXZhdGUgaXNCdWlsdFZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZFRhaWw6IFByb21pc2U8dm9pZD4gPSBub29wQXN5bmMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWNvcmRzID0gbmV3IE1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RTYXZlOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuICBwcml2YXRlIHJldmlzaW9uID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXZpc2lvbnMgPSBuZXcgV2Vha01hcDxURmlsZSwgb2JqZWN0PigpO1xuICBwcml2YXRlIHNhdmVkUmV2aXNpb24gPSAwO1xuICBwcml2YXRlIHNhdmVQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5kZXggd2l0aCBjb25zdW1lci1vd25lZCBwcm9qZWN0aW9uIGFuZCBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBpbmRleCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7IGFjY2VwdHM6IHBhcmFtcy5hY2NlcHRzLCBhcHA6IHBhcmFtcy5hcHAsIGluZGV4RmlsZTogcGFyYW1zLmluZGV4RmlsZSwgbG9hZDogcGFyYW1zLmxvYWQsIG9uUmVtb3ZlOiBwYXJhbXMub25SZW1vdmUsIG9uU2V0OiBwYXJhbXMub25TZXQsIHNhdmU6IHBhcmFtcy5zYXZlIH07XG4gICAgdGhpcy5yZXF1ZXN0U2F2ZSA9IGRlYm91bmNlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgICAgfSxcbiAgICAgIFNBVkVfREVCT1VOQ0VfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgc25hcHNob3QgYWZ0ZXIgcHJldmlvdXMgd3JpdGVzIGZpbmlzaCwgaW5jbHVkaW5nIGNoYW5nZXMgYXJyaXZpbmcgZHVyaW5nIGEgd3JpdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIENvbXBsZXRpb24gb2YgdGhlIHNlcmlhbGl6ZWQgd3JpdGVzOyByZWplY3RzIG9uIHBlcnNpc3RlbmNlIGZhaWx1cmUgd2l0aG91dCBtYXJraW5nIGl0IHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnNhdmVQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNhdmVQcm9taXNlID0gdGhpcy5zYXZlQ2hhbmdlcygpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNoYWxsb3cgc25hcHNob3Q7IGNvbnN1bWVycyBtdXN0IHRyZWF0IHJlY29yZHMgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBDdXJyZW50IHJlY29yZHMgYnkgdmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBnZXRSZWNvcmRzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLnJlY29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjaGFuZ2VzIGJlZm9yZSBzdGFydHVwIHJlc3RvcmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAubWV0YWRhdGFDYWNoZS5vbignY2hhbmdlZCcsIChmaWxlLCBjb250ZW50KSA9PiB7XG4gICAgICB0aGlzLnNldFRleHQoZmlsZSwgY29udGVudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KGFwcC52YXVsdC5vbignY3JlYXRlJywgdGhpcy5xdWV1ZVNjYW4uYmluZCh0aGlzKSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ21vZGlmeScsIHRoaXMucXVldWVTY2FuLmJpbmQodGhpcykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoYXBwLnZhdWx0Lm9uKCdkZWxldGUnLCAoZmlsZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUcmVlKGZpbGUucGF0aCk7XG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ3JlbmFtZScsIChmaWxlLCBvbGRQYXRoKSA9PiB7XG4gICAgICB0aGlzLnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2VzIHVuY2hhbmdlZCBzYXZlZCByZWNvcmRzIGFuZCByZWFkcyBvdGhlciBmaWxlcyBvbmUgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLm9wdGlvbnMubG9hZCgpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVzKCkpIHtcbiAgICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpIHx8IHRoaXMucmV2aXNpb25zLmhhcyhmaWxlKSB8fCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgoZmlsZS5wYXRoKSAhPT0gZmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5ID0gc2F2ZWQuZ2V0KGZpbGUucGF0aCk7XG4gICAgICBpZiAoZW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWUgJiYgZW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCBlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNjYW5GaWxlKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlYWRUYWlsO1xuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNCdWlsdFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGRlYm91bmNlIGFuZCBmbHVzaGVzIGNvbXBsZXRlZCBpbmRleGVzIGJlZm9yZSBkaXNwb3NpbmcgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdFNhdmUuY2FuY2VsKCk7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgIH1cbiAgICBzdXBlci5vbnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGRzIHByb2plY3Rpb25zIGZvciBldmVyeSBhY2NlcHRlZCBmaWxlLCBmb3IgZXhhbXBsZSBhZnRlciBhIGNvbnN1bWVyIGxlYXJucyBuZXcgbmFtZXMgdG8gZmluZCBpbiB0ZXh0LlxuICAgKiBFdmVudHMgYXJyaXZpbmcgZHVyaW5nIHRoZSBzY2FuIHN1cGVyc2VkZSBpdHMgb2xkZXIgcmVhZHMuIENvbnN1bWVycyBjb29yZGluYXRlIGFueSBkb21haW4gc2NhbiBtYXJrZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHRoZSBib3VuZGVkIGZ1bGwgc2Nhbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNjYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMub3B0aW9ucy5hcHAudmF1bHQuZ2V0RmlsZXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5zY2FuRmlsZShmaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcmtEaXJ0eSgpOiB2b2lkIHtcbiAgICB0aGlzLnJldmlzaW9uKys7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlICYmICF0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgdGhpcy5yZXF1ZXN0U2F2ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcXVldWVTY2FuKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLnNjYW5GaWxlKGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVjb3Jkcy5kZWxldGUocGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMub25SZW1vdmUocGF0aCk7XG4gICAgdGhpcy5tYXJrRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVHJlZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLnJlY29yZHMua2V5cygpKSB7XG4gICAgICBpZiAoIShrZXkgPT09IHBhdGggfHwga2V5LnN0YXJ0c1dpdGgoYCR7cGF0aH0vYCkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlUmVjb3JkKG9sZFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZVRyZWUob2xkUGF0aCk7XG4gICAgfVxuICAgIHRoaXMucXVldWVTY2FuKGZpbGUpO1xuICAgIGlmIChmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikge1xuICAgICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKGZpbGUsIHRoaXMucXVldWVTY2FuLmJpbmQodGhpcykpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2F2ZUNoYW5nZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHRoaXMuaXNCdWlsdFZhbHVlICYmIHRoaXMuc2F2ZWRSZXZpc2lvbiAhPT0gdGhpcy5yZXZpc2lvbikge1xuICAgICAgY29uc3QgcmV2aXNpb24gPSB0aGlzLnJldmlzaW9uO1xuICAgICAgYXdhaXQgdGhpcy5vcHRpb25zLnNhdmUobmV3IE1hcCh0aGlzLnJlY29yZHMpKTtcbiAgICAgIHRoaXMuc2F2ZWRSZXZpc2lvbiA9IHJldmlzaW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2NhbkZpbGUoZmlsZTogVEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkgfHwgIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlUmVjb3JkKGZpbGUucGF0aCk7XG4gICAgY29uc3QgdG9rZW4gPSB7fTtcbiAgICB0aGlzLnJldmlzaW9ucy5zZXQoZmlsZSwgdG9rZW4pO1xuICAgIGNvbnN0IHsgcGF0aCB9ID0gZmlsZTtcbiAgICBjb25zdCB7IG10aW1lLCBzaXplIH0gPSBmaWxlLnN0YXQ7XG4gICAgY29uc3QgaXNDdXJyZW50ID0gKCk6IGJvb2xlYW4gPT5cbiAgICAgICF0aGlzLmlzVW5sb2FkZWQoKSAmJiB0aGlzLnJldmlzaW9ucy5nZXQoZmlsZSkgPT09IHRva2VuICYmIGZpbGUucGF0aCA9PT0gcGF0aFxuICAgICAgJiYgZmlsZS5zdGF0Lm10aW1lID09PSBtdGltZSAmJiBmaWxlLnN0YXQuc2l6ZSA9PT0gc2l6ZSAmJiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgocGF0aCkgPT09IGZpbGU7XG4gICAgY29uc3QgcmVhZCA9IHRoaXMucmVhZFRhaWwudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoIWlzQ3VycmVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSk7XG4gICAgICBpZiAoIWlzQ3VycmVudCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VGV4dChmaWxlLCBjb250ZW50KTtcbiAgICB9KTtcbiAgICB0aGlzLnJlYWRUYWlsID0gcmVhZC5jYXRjaChub29wKTtcbiAgICBhd2FpdCByZWFkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRSZWNvcmQocGF0aDogc3RyaW5nLCBlbnRyeTogSW5kZXhlZEZpbGVSZWNvcmQ8VD4pOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZHMuc2V0KHBhdGgsIGVudHJ5KTtcbiAgICB0aGlzLm9wdGlvbnMub25TZXQocGF0aCwgZW50cnkucmVjb3JkKTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRUZXh0KGZpbGU6IFRGaWxlLCBjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJldmlzaW9ucy5zZXQoZmlsZSwge30pO1xuICAgIGlmICghdGhpcy5pc1VubG9hZGVkKCkgJiYgdGhpcy5vcHRpb25zLmFjY2VwdHMoZmlsZSkpIHtcbiAgICAgIHRoaXMuc2V0UmVjb3JkKGZpbGUucGF0aCwgeyBtdGltZTogZmlsZS5zdGF0Lm10aW1lLCByZWNvcmQ6IHRoaXMub3B0aW9ucy5pbmRleEZpbGUoeyBjb250ZW50LCBmaWxlIH0pLCBzaXplOiBmaWxlLnN0YXQuc2l6ZSB9KTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSxTQUFTLHlCQUF5QjtBQUNsQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFFUCxTQUFTLG1CQUFtQjtBQUU1QixNQUFNLGdDQUFnQztBQWdGL0IsTUFBTSxzQ0FBeUMsWUFBWTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1oRSxJQUFXLFVBQW1CO0FBQzVCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUttQjtBQUFBLEVBRVgsZUFBZTtBQUFBLEVBQ2YsV0FBMEIsVUFBVTtBQUFBLEVBQzNCLFVBQVUsb0JBQUksSUFBa0M7QUFBQSxFQUNoRDtBQUFBLEVBQ1QsV0FBVztBQUFBLEVBQ0YsWUFBWSxvQkFBSSxRQUF1QjtBQUFBLEVBQ2hELGdCQUFnQjtBQUFBLEVBQ2hCLGNBQW9DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT3JDLFlBQVksUUFBMkQ7QUFDNUUs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
|
|
324
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2luY3JlbWVudGFsLWZpbGUtaW5kZXgtY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBJbmNyZW1lbnRhbCBwZXItZmlsZSBwcm9qZWN0aW9ucyB3aXRoIHN0YXQtYmFzZWQgcmVzdG9yYXRpb24gYW5kIGluamVjdGVkIHBlcnNpc3RlbmNlLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBEZWJvdW5jZXIsXG4gIFRBYnN0cmFjdEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpbnZva2VBc3luY1NhZmVseSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hc3luYyc7XG5pbXBvcnQge1xuICBub29wLFxuICBub29wQXN5bmNcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Z1bmN0aW9uJztcbmltcG9ydCB7XG4gIGRlYm91bmNlLFxuICBURmlsZSxcbiAgVEZvbGRlcixcbiAgVmF1bHRcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuY29uc3QgU0FWRV9ERUJPVU5DRV9JTl9NSUxMSVNFQ09ORFMgPSA1MDAwO1xuXG4vKipcbiAqIERlcGVuZGVuY2llcyBvZiBhbiBpbmNyZW1lbnRhbCBpbmRleC4gUGVyc2lzdGVuY2UgbXVzdCB2YWxpZGF0ZSBpdHMgb3duIHNjaGVtYS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgaW1tdXRhYmxlIHBlci1maWxlIHByb2plY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtczxUPiB7XG4gIC8qKlxuICAgKiBGaWxlcyBhY2NlcHRlZCBieSB0aGlzIGluZGV4LCBmb3IgZXhhbXBsZSBNYXJrZG93biBmaWxlcyBvbmx5LlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXB0czogKGZpbGU6IFRGaWxlKSA9PiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIGFwcGxpY2F0aW9uIG93bmluZyB0aGUgdmF1bHQuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBpbW11dGFibGUgcmVjb3JkIHN5bmNocm9ub3VzbHk7IHRleHQgaXMgbmV2ZXIgcmV0YWluZWQgYnkgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBpbmRleEZpbGU6IChwYXJhbXM6IEluZGV4RmlsZVBhcmFtcykgPT4gVDtcbiAgLyoqXG4gICAqIFJlYWRzIHZhbGlkYXRlZCByZWNvcmRzLCBvciBhbiBlbXB0eSBtYXAgZm9yIGEgbWlzc2luZy9pbmNvbXBhdGlibGUgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBsb2FkOiAoKSA9PiBQcm9taXNlPFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+PjtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSByZWNvcmQgZnJvbSBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LiBDYWxsZWQgZm9yIGtub3duIHJlY29yZHMgb25seS5cbiAgICovXG4gIHJlYWRvbmx5IG9uUmVtb3ZlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbnN1bWVyJ3Mgc2Vjb25kYXJ5IGluZGV4LCBpbmNsdWRpbmcgcmVzdG9yZWQgcmVjb3Jkcy5cbiAgICovXG4gIHJlYWRvbmx5IG9uU2V0OiAocGF0aDogc3RyaW5nLCByZWNvcmQ6IFQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIHNuYXBzaG90OyB3cml0ZXMgYXJlIHNlcmlhbGl6ZWQgYW5kIHJldHJpZWQgYnkgdGhlIG5leHQgZmx1c2ggYWZ0ZXIgZmFpbHVyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNhdmU6IChyZWNvcmRzOiBSZWFkb25seU1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBjcmVhdGUgb3IgbW9kaWZ5IG9mIHRoZSBmaWxlIGlzIGZvbGxvd2VkIGJ5IGEgbWV0YWRhdGEtY2FjaGUgYGNoYW5nZWRgIGV2ZW50IGNhcnJ5aW5nIGl0cyB0ZXh0LCBhcyBmb3JcbiAgICogTWFya2Rvd24gbm90ZXMuIFN1Y2ggYSBmaWxlIGRyb3BzIGl0cyBzdGFsZSBwcm9qZWN0aW9uIGFuZCBpcyBub3QgcmVhZDsgaXRzIHJlY29yZCByZXR1cm5zIHdpdGggdGhhdCBldmVudCwgb3JcbiAgICogd2l0aCB0aGUgbmV4dCBzdGFydHVwIG9yIHtAbGluayBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudC5yZXNjYW59IHdoZW4gT2JzaWRpYW4gcmFpc2VzIG5vbmUgKGEgbW9kaWZ5IHRoYXQgbGVmdFxuICAgKiB0aGUgY29udGVudCB1bmNoYW5nZWQpLiBDb25zdW1lcnMgbXVzdCB0cmVhdCBhIGZpbGUgd2l0aG91dCBhIHJlY29yZCBhcyB1bmtub3duLiBEZWZhdWx0cyB0byBuZXZlci5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEF3YWl0TWV0YWRhdGFDaGFuZ2U/OiAoZmlsZTogVEZpbGUpID0+IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgcHJvamVjdGlvbiBkZXBlbmRzIG9uIHRleHQgYWxvbmUsIHNvIGEgcmVuYW1lIG1vdmVzIGl0IHdpdGggaXRzIHN0YXRzIGluc3RlYWQgb2YgcmVhZGluZyB0aGUgZmlsZSBhZ2Fpbi5cbiAgICogQSBmaWxlIHJlbmFtZWQgdG8gYSBwYXRoIHtAbGluayBhY2NlcHRzfSByZWplY3RzIGxvc2VzIGl0cyByZWNvcmQgZWl0aGVyIHdheS4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZE1vdmVSZWNvcmRzT25SZW5hbWU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgcHJvamVjdGlvbiBhbmQgdGhlIGZpbGUgc3RhdHMgb2JzZXJ2ZWQgYmVmb3JlIHJlYWRpbmcgaXRzIHRleHQuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIGltbXV0YWJsZSBwZXItZmlsZSBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4ZWRGaWxlUmVjb3JkPFQ+IHtcbiAgLyoqXG4gICAqIExhc3QgbW9kaWZpY2F0aW9uIHRpbWUsIGluIG1pbGxpc2Vjb25kcy5cbiAgICovXG4gIHJlYWRvbmx5IG10aW1lOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgY29uc3VtZXIncyBpbW11dGFibGUgcHJvamVjdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZDogVDtcbiAgLyoqXG4gICAqIEZpbGUgc2l6ZSBpbiBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNpemU6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJbnB1dHMgdG8gYSBwZXItZmlsZSBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4RmlsZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUZXh0IHJlYWQgZnJvbSB0aGUgdmF1bHQsIG9yIHN1cHBsaWVkIGJ5IGEgbWV0YWRhdGEtY2FjaGUgZXZlbnQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBiZWluZyBpbmRleGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZTogVEZpbGU7XG59XG5cbi8qKlxuICogS2VlcHMgcGVyLWZpbGUgcHJvamVjdGlvbnMgY3VycmVudCB3aGlsZSBsb2FkZWQuIENhbGwgbG9hZFdpdGhQcm9taXNlcyBhZnRlciBtZXRhZGF0YSByZWFkaW5lc3MgaWYgdGhlXG4gKiBwcm9qZWN0aW9uIG5lZWRzIGNhY2hlZCBtZXRhZGF0YS4gTGlzdGVuZXJzIGFyZSBpbnN0YWxsZWQgYmVmb3JlIHJlc3RvcmF0aW9uLCBhbmQgZXZlbnRzIHdpbiBvdmVyIG9sZGVyIHJlYWRzLlxuICogUmVhZHMgYXJlIHNlcXVlbnRpYWwsIGJvdW5kaW5nIG1lbW9yeSBhbmQgSS9POyBjb25zdW1lcnMgb3duIHNjaGVtYSwgc3RvcmFnZSBsb2NhdGlvbiBhbmQgc2Vjb25kYXJ5IGluZGV4ZXMuXG4gKiBVbmNoYW5nZWQgcmVjb3JkcyBhcmUgcmV1c2VkIGJ5IG10aW1lIGFuZCBzaXplLCB3aGljaCBjYW5ub3QgZGV0ZWN0IGEgc2FtZS1zdGF0IGV4dGVybmFsIHJld3JpdGUuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIGltbXV0YWJsZSBwZXItZmlsZSBwcm9qZWN0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSW5jcmVtZW50YWxGaWxlSW5kZXhDb21wb25lbnQ8VD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24gaGFzIGNvbXBsZXRlZC5cbiAgICpcbiAgICogQHJldHVybnMgV2hldGhlciB0aGUgaW5kZXggY29tcGxldGVkIGl0cyBmaXJzdCByZWNvbmNpbGlhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXQgaXNCdWlsdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0J1aWx0VmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvamVjdGlvbiwgbm90aWZpY2F0aW9ucyBhbmQgcGVyc2lzdGVuY2Ugc3VwcGxpZWQgYnkgdGhlIGNvbnN1bWVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnM6IFJlcXVpcmVkPEluY3JlbWVudGFsRmlsZUluZGV4Q29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXM8VD4+O1xuXG4gIHByaXZhdGUgaXNCdWlsdFZhbHVlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVhZFRhaWw6IFByb21pc2U8dm9pZD4gPSBub29wQXN5bmMoKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWNvcmRzID0gbmV3IE1hcDxzdHJpbmcsIEluZGV4ZWRGaWxlUmVjb3JkPFQ+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RTYXZlOiBEZWJvdW5jZXI8W10sIHZvaWQ+O1xuICBwcml2YXRlIHJldmlzaW9uID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSByZXZpc2lvbnMgPSBuZXcgV2Vha01hcDxURmlsZSwgb2JqZWN0PigpO1xuICBwcml2YXRlIHNhdmVkUmV2aXNpb24gPSAwO1xuICBwcml2YXRlIHNhdmVQcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiA9IG51bGw7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5kZXggd2l0aCBjb25zdW1lci1vd25lZCBwcm9qZWN0aW9uIGFuZCBwZXJzaXN0ZW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBpbmRleCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBJbmNyZW1lbnRhbEZpbGVJbmRleENvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFQ+KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICBhY2NlcHRzOiBwYXJhbXMuYWNjZXB0cyxcbiAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgIGluZGV4RmlsZTogcGFyYW1zLmluZGV4RmlsZSxcbiAgICAgIGxvYWQ6IHBhcmFtcy5sb2FkLFxuICAgICAgb25SZW1vdmU6IHBhcmFtcy5vblJlbW92ZSxcbiAgICAgIG9uU2V0OiBwYXJhbXMub25TZXQsXG4gICAgICBzYXZlOiBwYXJhbXMuc2F2ZSxcbiAgICAgIHNob3VsZEF3YWl0TWV0YWRhdGFDaGFuZ2U6IHBhcmFtcy5zaG91bGRBd2FpdE1ldGFkYXRhQ2hhbmdlID8/ICgoKTogYm9vbGVhbiA9PiBmYWxzZSksXG4gICAgICBzaG91bGRNb3ZlUmVjb3Jkc09uUmVuYW1lOiBwYXJhbXMuc2hvdWxkTW92ZVJlY29yZHNPblJlbmFtZSA/PyBmYWxzZVxuICAgIH07XG4gICAgdGhpcy5yZXF1ZXN0U2F2ZSA9IGRlYm91bmNlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgICAgfSxcbiAgICAgIFNBVkVfREVCT1VOQ0VfSU5fTUlMTElTRUNPTkRTLFxuICAgICAgZmFsc2VcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIGEgc25hcHNob3QgYWZ0ZXIgcHJldmlvdXMgd3JpdGVzIGZpbmlzaCwgaW5jbHVkaW5nIGNoYW5nZXMgYXJyaXZpbmcgZHVyaW5nIGEgd3JpdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIENvbXBsZXRpb24gb2YgdGhlIHNlcmlhbGl6ZWQgd3JpdGVzOyByZWplY3RzIG9uIHBlcnNpc3RlbmNlIGZhaWx1cmUgd2l0aG91dCBtYXJraW5nIGl0IHNhdmVkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnNhdmVQcm9taXNlKSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNhdmVQcm9taXNlID0gdGhpcy5zYXZlQ2hhbmdlcygpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnNhdmVQcm9taXNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNhdmVQcm9taXNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHNoYWxsb3cgc25hcHNob3Q7IGNvbnN1bWVycyBtdXN0IHRyZWF0IHJlY29yZHMgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBAcmV0dXJucyBDdXJyZW50IHJlY29yZHMgYnkgdmF1bHQtcmVsYXRpdmUgcGF0aC5cbiAgICovXG4gIHB1YmxpYyBnZXRSZWNvcmRzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgSW5kZXhlZEZpbGVSZWNvcmQ8VD4+IHtcbiAgICByZXR1cm4gbmV3IE1hcCh0aGlzLnJlY29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjaGFuZ2VzIGJlZm9yZSBzdGFydHVwIHJlc3RvcmF0aW9uLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAubWV0YWRhdGFDYWNoZS5vbignY2hhbmdlZCcsIChmaWxlLCBjb250ZW50KSA9PiB7XG4gICAgICB0aGlzLnNldFRleHQoZmlsZSwgY29udGVudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5yZWdpc3RlckV2ZW50KGFwcC52YXVsdC5vbignY3JlYXRlJywgdGhpcy5oYW5kbGVDb250ZW50RXZlbnQuYmluZCh0aGlzKSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ21vZGlmeScsIHRoaXMuaGFuZGxlQ29udGVudEV2ZW50LmJpbmQodGhpcykpKTtcbiAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoYXBwLnZhdWx0Lm9uKCdkZWxldGUnLCAoZmlsZSkgPT4ge1xuICAgICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUcmVlKGZpbGUucGF0aCk7XG4gICAgICB9XG4gICAgfSkpO1xuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ3JlbmFtZScsIChmaWxlLCBvbGRQYXRoKSA9PiB7XG4gICAgICB0aGlzLnJlbmFtZShmaWxlLCBvbGRQYXRoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogUmV1c2VzIHVuY2hhbmdlZCBzYXZlZCByZWNvcmRzIGFuZCByZWFkcyBvdGhlciBmaWxlcyBvbmUgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHN0YXJ0dXAgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2F2ZWQgPSBhd2FpdCB0aGlzLm9wdGlvbnMubG9hZCgpO1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVzKCkpIHtcbiAgICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy5hY2NlcHRzKGZpbGUpIHx8IHRoaXMucmV2aXNpb25zLmhhcyhmaWxlKSB8fCB0aGlzLm9wdGlvbnMuYXBwLnZhdWx0LmdldEZpbGVCeVBhdGgoZmlsZS5wYXRoKSAhPT0gZmlsZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVudHJ5ID0gc2F2ZWQuZ2V0KGZpbGUucGF0aCk7XG4gICAgICBpZiAoZW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWUgJiYgZW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemUpIHtcbiAgICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCBlbnRyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNjYW5GaWxlKGZpbGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlYWRUYWlsO1xuICAgIGlmICh0aGlzLmlzVW5sb2FkZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNCdWlsdFZhbHVlID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtEaXJ0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgdGhlIGRlYm91bmNlIGFuZCBmbHVzaGVzIGNvbXBsZXRlZCBpbmRleGVzIGJlZm9yZSBkaXNwb3NpbmcgZXZlbnQgbGlzdGVuZXJzLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdFNhdmUuY2FuY2VsKCk7XG4gICAgaWYgKHRoaXMuaXNCdWlsdFZhbHVlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLmZsdXNoKCkpO1xuICAgIH1cbiAgICBzdXBlci5vbnVubG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGRzIHByb2plY3Rpb25zIGZvciBldmVyeSBhY2NlcHRlZCBmaWxlLCBmb3IgZXhhbXBsZSBhZnRlciBhIGNvbnN1bWVyIGxlYXJucyBuZXcgbmFtZXMgdG8gZmluZCBpbiB0ZXh0LlxuICAgKiBFdmVudHMgYXJyaXZpbmcgZHVyaW5nIHRoZSBzY2FuIHN1cGVyc2VkZSBpdHMgb2xkZXIgcmVhZHMuIENvbnN1bWVycyBjb29yZGluYXRlIGFueSBkb21haW4gc2NhbiBtYXJrZXJzLlxuICAgKlxuICAgKiBAcmV0dXJucyBDb21wbGV0aW9uIG9mIHRoZSBib3VuZGVkIGZ1bGwgc2Nhbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZXNjYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMub3B0aW9ucy5hcHAudmF1bHQuZ2V0RmlsZXMoKSkge1xuICAgICAgYXdhaXQgdGhpcy5zY2FuRmlsZShmaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbnRlbnRFdmVudChmaWxlOiBUQWJzdHJhY3RGaWxlKTogdm9pZCB7XG4gICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zaG91bGRBd2FpdE1ldGFkYXRhQ2hhbmdlKGZpbGUpKSB7XG4gICAgICB0aGlzLnF1ZXVlU2NhbihmaWxlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgIC8vIEEgZnJlc2ggdG9rZW4gc3VwZXJzZWRlcyBxdWV1ZWQgcmVhZHMsIGFuZCBzdGFydHVwIGxlYXZlcyB0aGUgc2F2ZWQgZW50cnkgdG8gdGhlIGNvbWluZyBgY2hhbmdlZGAgZXZlbnQuXG4gICAgdGhpcy5yZXZpc2lvbnMuc2V0KGZpbGUsIHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0RpcnR5KCk6IHZvaWQge1xuICAgIHRoaXMucmV2aXNpb24rKztcbiAgICBpZiAodGhpcy5pc0J1aWx0VmFsdWUgJiYgIXRoaXMuaXNVbmxvYWRlZCgpKSB7XG4gICAgICB0aGlzLnJlcXVlc3RTYXZlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlUmVjb3JkKGZpbGU6IFRGaWxlLCBvbGRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMucmVjb3Jkcy5nZXQob2xkUGF0aCk7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChvbGRQYXRoKTtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgICB0aGlzLnNldFJlY29yZChmaWxlLnBhdGgsIGVudHJ5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gQSByZWNvcmQgYWxyZWFkeSBhdCB0aGUgbmV3IHBhdGggbWVhbnMgYW5vdGhlciBldmVudCBmb3IgdGhpcyByZW5hbWUgbW92ZWQgaXQgZmlyc3QuXG4gICAgaWYgKCF0aGlzLnJlY29yZHMuaGFzKGZpbGUucGF0aCkpIHtcbiAgICAgIHRoaXMucXVldWVTY2FuKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcXVldWVTY2FuKGZpbGU6IFRBYnN0cmFjdEZpbGUpOiB2b2lkIHtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICBpbnZva2VBc3luY1NhZmVseSgoKSA9PiB0aGlzLnNjYW5GaWxlKGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlY29yZChwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVjb3Jkcy5kZWxldGUocGF0aCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMub25SZW1vdmUocGF0aCk7XG4gICAgdGhpcy5tYXJrRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlVHJlZShwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiB0aGlzLnJlY29yZHMua2V5cygpKSB7XG4gICAgICBpZiAoIShrZXkgPT09IHBhdGggfHwga2V5LnN0YXJ0c1dpdGgoYCR7cGF0aH0vYCkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuYW1lKGZpbGU6IFRBYnN0cmFjdEZpbGUsIG9sZFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc2hvdWxkTW92ZVJlY29yZHNPblJlbmFtZSkge1xuICAgICAgdGhpcy5yZW5hbWVNb3ZpbmdSZWNvcmRzKGZpbGUsIG9sZFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XG4gICAgICB0aGlzLnJlbW92ZVJlY29yZChvbGRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVUcmVlKG9sZFBhdGgpO1xuICAgIH1cbiAgICB0aGlzLnF1ZXVlU2NhbihmaWxlKTtcbiAgICBpZiAoZmlsZSBpbnN0YW5jZW9mIFRGb2xkZXIpIHtcbiAgICAgIFZhdWx0LnJlY3Vyc2VDaGlsZHJlbihmaWxlLCB0aGlzLnF1ZXVlU2Nhbi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmFtZU1vdmluZ1JlY29yZHMoZmlsZTogVEFic3RyYWN0RmlsZSwgb2xkUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgdGhpcy5tb3ZlUmVjb3JkKGZpbGUsIG9sZFBhdGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gT2JzaWRpYW4gbWF5IGFsc28gcmFpc2UgYSByZW5hbWUgcGVyIGRlc2NlbmRhbnQsIGluIGVpdGhlciBvcmRlcjsgbW92aW5nIGlzIGlkZW1wb3RlbnQgYWNyb3NzIGJvdGguXG4gICAgVmF1bHQucmVjdXJzZUNoaWxkcmVuKGZpbGUsIChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgdGhpcy5tb3ZlUmVjb3JkKGNoaWxkLCBgJHtvbGRQYXRofSR7Y2hpbGQucGF0aC5zbGljZShmaWxlLnBhdGgubGVuZ3RoKX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnJlbW92ZVRyZWUob2xkUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNhdmVDaGFuZ2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHdoaWxlICh0aGlzLmlzQnVpbHRWYWx1ZSAmJiB0aGlzLnNhdmVkUmV2aXNpb24gIT09IHRoaXMucmV2aXNpb24pIHtcbiAgICAgIGNvbnN0IHJldmlzaW9uID0gdGhpcy5yZXZpc2lvbjtcbiAgICAgIGF3YWl0IHRoaXMub3B0aW9ucy5zYXZlKG5ldyBNYXAodGhpcy5yZWNvcmRzKSk7XG4gICAgICB0aGlzLnNhdmVkUmV2aXNpb24gPSByZXZpc2lvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNjYW5GaWxlKGZpbGU6IFRGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNVbmxvYWRlZCgpIHx8ICF0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZVJlY29yZChmaWxlLnBhdGgpO1xuICAgIGNvbnN0IHRva2VuID0ge307XG4gICAgdGhpcy5yZXZpc2lvbnMuc2V0KGZpbGUsIHRva2VuKTtcbiAgICBjb25zdCB7IHBhdGggfSA9IGZpbGU7XG4gICAgY29uc3QgeyBtdGltZSwgc2l6ZSB9ID0gZmlsZS5zdGF0O1xuICAgIGNvbnN0IGlzQ3VycmVudCA9ICgpOiBib29sZWFuID0+XG4gICAgICAhdGhpcy5pc1VubG9hZGVkKCkgJiYgdGhpcy5yZXZpc2lvbnMuZ2V0KGZpbGUpID09PSB0b2tlbiAmJiBmaWxlLnBhdGggPT09IHBhdGhcbiAgICAgICYmIGZpbGUuc3RhdC5tdGltZSA9PT0gbXRpbWUgJiYgZmlsZS5zdGF0LnNpemUgPT09IHNpemUgJiYgdGhpcy5vcHRpb25zLmFwcC52YXVsdC5nZXRGaWxlQnlQYXRoKHBhdGgpID09PSBmaWxlO1xuICAgIGNvbnN0IHJlYWQgPSB0aGlzLnJlYWRUYWlsLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKCFpc0N1cnJlbnQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgY29udGVudDogc3RyaW5nO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29udGVudCA9IGF3YWl0IHRoaXMub3B0aW9ucy5hcHAudmF1bHQuY2FjaGVkUmVhZChmaWxlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgZmlsZSBkZWxldGVkIG9yIHJlbmFtZWQgZHVyaW5nIGl0cyByZWFkIGlzIHRoZSBldmVudCBoYW5kbGVycycgdG8gYWNjb3VudCBmb3IuXG4gICAgICAgIGlmIChpc0N1cnJlbnQoKSkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghaXNDdXJyZW50KCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRUZXh0KGZpbGUsIGNvbnRlbnQpO1xuICAgIH0pO1xuICAgIHRoaXMucmVhZFRhaWwgPSByZWFkLmNhdGNoKG5vb3ApO1xuICAgIGF3YWl0IHJlYWQ7XG4gIH1cblxuICBwcml2YXRlIHNldFJlY29yZChwYXRoOiBzdHJpbmcsIGVudHJ5OiBJbmRleGVkRmlsZVJlY29yZDxUPik6IHZvaWQge1xuICAgIHRoaXMucmVjb3Jkcy5zZXQocGF0aCwgZW50cnkpO1xuICAgIHRoaXMub3B0aW9ucy5vblNldChwYXRoLCBlbnRyeS5yZWNvcmQpO1xuICAgIHRoaXMubWFya0RpcnR5KCk7XG4gIH1cblxuICBwcml2YXRlIHNldFRleHQoZmlsZTogVEZpbGUsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmV2aXNpb25zLnNldChmaWxlLCB7fSk7XG4gICAgaWYgKCF0aGlzLmlzVW5sb2FkZWQoKSAmJiB0aGlzLm9wdGlvbnMuYWNjZXB0cyhmaWxlKSkge1xuICAgICAgdGhpcy5zZXRSZWNvcmQoZmlsZS5wYXRoLCB7IG10aW1lOiBmaWxlLnN0YXQubXRpbWUsIHJlY29yZDogdGhpcy5vcHRpb25zLmluZGV4RmlsZSh7IGNvbnRlbnQsIGZpbGUgfSksIHNpemU6IGZpbGUuc3RhdC5zaXplIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlBLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsbUJBQW1CO0FBRTVCLE1BQU0sZ0NBQWdDO0FBNEYvQixNQUFNLHNDQUF5QyxZQUFZO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTWhFLElBQVcsVUFBbUI7QUFDNUIsV0FBTyxL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
|