asksuite-citrus 2.6.1 → 2.6.3

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.
@@ -118,7 +118,6 @@ export class RichtextWrapper {
118
118
  matchers: [
119
119
  [Node.TEXT_NODE, this.urlMatcher.bind(this)],
120
120
  ['IMG', this.imageMatcher.bind(this)],
121
- ['PICTURE', this.imageMatcher.bind(this)],
122
121
  [Node.ELEMENT_NODE, this.htmlPanelMatcher.bind(this)]
123
122
  ],
124
123
  },
@@ -226,14 +225,16 @@ export class RichtextWrapper {
226
225
  this.templateReplacerSubscription?.unsubscribe();
227
226
  this.templateReplacerSubscription = fromEvent(this.quill, 'text-change').subscribe(([_delta, _oldDelta, _source]) => {
228
227
  const delta = _delta;
228
+ const source = _source;
229
229
  delta.ops?.forEach((op) => {
230
- if (op.insert === key) {
231
- const range = this.quill.getSelection();
232
- if (!range)
233
- return;
234
- const newPos = range.index;
235
- this.quill.deleteText(newPos - 1, 1);
236
- this.quill.insertText(newPos - 1, template);
230
+ if (op.insert === key && source === 'user') {
231
+ const position = delta.ops[0].retain || 0;
232
+ delta.ops.pop();
233
+ delta.ops.push({ delete: key.length }, { insert: template });
234
+ this.quill.updateContents(delta, 'silent');
235
+ setTimeout(() => {
236
+ this.quill.setSelection(position + 1 + template.length, -1);
237
+ });
237
238
  }
238
239
  });
239
240
  });
@@ -376,4 +377,4 @@ export const QuillProxy = {
376
377
  export const RichtextWrapperProxy = {
377
378
  RichtextWrapper
378
379
  };
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaHRleHQtd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fza3N1aXRlLWNpdHJ1cy9zcmMvbGliL2NsYXNzZXMvcmljaHRleHQtd3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQTRHLE1BQU0sT0FBTyxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUQsTUFBTSxPQUFPLGVBQWU7SUFxRzFCLElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUE7SUFDOUIsQ0FBQztJQUlELElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDO2FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FDbkQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3JELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDckIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxZQUNVLE1BQWMsRUFDZCxFQUFxQixFQUNyQixVQUFtQztRQUZuQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7UUE1SHJDLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBYTtZQUNqRCxZQUFZLEVBQUUsS0FBSztZQUNuQixRQUFRLEVBQUUsS0FBSztZQUNmLE9BQU8sRUFBRTtnQkFDUCxNQUFNLEVBQUUsS0FBSztnQkFDYixJQUFJLEVBQUUsS0FBSztnQkFDWCxTQUFTLEVBQUUsS0FBSztnQkFDaEIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixZQUFZLEVBQUUsS0FBSztnQkFDbkIsY0FBYyxFQUFFLEtBQUs7Z0JBQ3JCLGFBQWEsRUFBRSxLQUFLO2FBQ3JCO1lBQ0QsYUFBYSxFQUFFLEVBQUU7U0FDbEIsQ0FBQyxDQUFDO1FBQ0ssU0FBSSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDOUIsV0FBTSxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDaEMsY0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2YsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsaUJBQVksR0FBRztZQUNyQixZQUFZO1lBQ1osTUFBTTtZQUNOLE9BQU87WUFDUCxNQUFNO1lBQ04sTUFBTTtZQUNOLFFBQVE7WUFDUixNQUFNO1lBQ04sTUFBTTtZQUNOLFFBQVE7WUFDUixRQUFRO1lBQ1IsV0FBVztZQUNYLFlBQVk7WUFDWixRQUFRO1lBQ1IsUUFBUTtZQUNSLE1BQU07WUFDTixPQUFPO1lBQ1AsV0FBVztZQUNYLFlBQVk7WUFDWixTQUFTO1lBQ1QsT0FBTztZQUNQLFdBQVc7WUFDWCxVQUFVO1NBQ1gsQ0FBQTtRQUVPLHNCQUFpQixHQUFzQixHQUFHLEVBQUU7WUFDbEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztRQUVNLDJCQUFzQixHQUEyQixDQUN2RCxLQUFrQixFQUNsQixRQUFxQixFQUNyQixNQUFlLEVBQ2YsRUFBRTtZQUNGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFTSxhQUFRLEdBQUc7WUFDakIsSUFBSSxFQUFFO2dCQUNKLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNmLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7YUFDRjtZQUNELE1BQU0sRUFBRTtnQkFDTixPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDakIsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQzthQUNGO1lBQ0QsU0FBUyxFQUFFO2dCQUNULE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDO2FBQ0Y7WUFDRCxNQUFNLEVBQUM7Z0JBQ0wsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDWixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDckIsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQzthQUNGO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLEdBQUcsRUFBRSxPQUFPO2dCQUNaLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztnQkFDM0IsQ0FBQzthQUNGO1NBRUYsQ0FBQztRQU1LLFdBQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBMkIzQyxNQUFNLFFBQVEsR0FBRyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLEVBQUU7WUFDaEQsV0FBVyxFQUFFLEVBQUU7WUFDZixPQUFPLEVBQUU7Z0JBQ1AsU0FBUyxFQUFFO29CQUNULFFBQVEsRUFBRTt3QkFDUixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzVDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNyQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDekMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ3REO2lCQUNGO2dCQUNELFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFO2FBQ3RDO1lBQ0QsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZO1NBQzNCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTSxTQUFTO1FBQ2QsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU87UUFDekMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUFFLE9BQU07UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPO1FBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUztRQUNkLElBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sZUFBZTtRQUNwQixJQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO1lBQUUsT0FBTztRQUNoRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWE7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDOztZQUVoQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxlQUFlO1FBQ3BCLElBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7WUFBRSxPQUFPO1FBQ2hELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYTtZQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7O1lBRWhDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFZO1FBQ3pCLElBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPO1FBRXZDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTdELE1BQU0sS0FBSyxHQUFHLEtBQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQ3BDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUVsQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7WUFBRSxPQUFPO1FBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLGdCQUFnQjtRQUNyQixJQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUM7WUFBRSxPQUFPO1FBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztZQUFFLE9BQU87UUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRU0sU0FBUztRQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUMsSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsU0FBVSxDQUFDLEtBQUssRUFBRSxTQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxjQUFjLENBQUMsV0FBbUI7UUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFdBQVcsQ0FBQztJQUN2RCxDQUFDO0lBRU0sT0FBTyxDQUFDLElBQVk7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBYSxFQUFFLElBQVksRUFBRSxTQUFrQjtRQUMvRCxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDNUMsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxRQUFnQjtRQUNwRCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFFbkQsSUFBSSxDQUFDLDRCQUE0QixHQUFHLFNBQVMsQ0FDM0MsSUFBSSxDQUFDLEtBQUssRUFDVixhQUFhLENBQ2QsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtZQUMzQyxNQUFNLEtBQUssR0FBRyxNQUFnQyxDQUFDO1lBQy9DLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLEtBQUs7d0JBQUUsT0FBTztvQkFDbkIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztvQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDOUMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLE1BQWM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7UUFFeEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFDLElBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDO1lBQ25CLElBQUksQ0FBQyxxQkFBcUI7Z0JBQ3hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQztxQkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztxQkFDM0QsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQWU7UUFDckMsSUFBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQzVFLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUN4RSxDQUFDO0lBRU0sY0FBYyxDQUFDLFNBQWlCO1FBQ3JDLElBQUcsQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU0sYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxZQUFxQjtRQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0lBRU0sY0FBYyxDQUFDLFdBQW9CO1FBQ3hDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0lBQ2pDLENBQUM7SUFFTSx3QkFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUFVO1FBQy9CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN6RCxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVMsRUFBRSxLQUFVO1FBQ3RDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEQsSUFBSSxTQUFTLENBQUMsTUFBTTtnQkFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVUsQ0FBQyxLQUFLLEVBQUUsU0FBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRWpFLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNmLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQVU7Z0JBQ2xDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUNqQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDakUsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQUM7WUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUIsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbEIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFTLEVBQUUsS0FBVTtRQUN4QyxJQUFHLElBQUksQ0FBQyxXQUFXO1lBQUcsT0FBTyxLQUFLLENBQUM7UUFFbkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNuQyxPQUFPLElBQUksS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxJQUFpQixFQUFFLEtBQVk7UUFDdEQsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzVCLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFDLEVBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFHTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFHTyxNQUFNO1FBQ1osSUFBSSxNQUFnQyxDQUFDO1FBQ3JDLElBQUksVUFBVSxDQUFDO1FBRWYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSyxLQUFLLEVBQUMsQ0FBQztZQUNWLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6RCxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFRLENBQUM7UUFDbEQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFvQjtZQUMvQixNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxLQUFLO1lBQ25DLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxJQUFJLEtBQUs7WUFDL0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLElBQUksS0FBSztZQUN6QyxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sSUFBSSxLQUFLO1lBQ25DLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUU7WUFDNUIsYUFBYSxFQUFFLFVBQVUsRUFBRSxJQUFJLEtBQUssUUFBUTtZQUM1QyxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksS0FBSyxTQUFTO1lBQzdDLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxLQUFLLE1BQU07WUFDMUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxLQUFLLEtBQUssUUFBUTtZQUM5QyxhQUFhLEVBQUUsVUFBVSxFQUFFLEtBQUssS0FBSyxPQUFPO1NBQzdDLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBRXpCLE1BQU0sUUFBUSxHQUFlO1lBQzNCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO1lBQ3RCLFlBQVk7WUFDWixPQUFPO1lBQ1AsTUFBTTtZQUNOLFFBQVE7U0FDVCxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFFRCxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFFO0lBQ3ZCLEtBQUs7Q0FDTixDQUFBO0FBRUQsa0NBQWtDO0FBQ2xDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHO0lBQ2xDLGVBQWU7Q0FDaEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBRdWlsbCwgeyBCb3VuZHNTdGF0aWMsIERlbHRhLCBEZWx0YVN0YXRpYywgUmFuZ2VTdGF0aWMsIFNlbGVjdGlvbkNoYW5nZUhhbmRsZXIsIFNvdXJjZXMsIFRleHRDaGFuZ2VIYW5kbGVyIH0gZnJvbSAncXVpbGwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZpbHRlciwgZnJvbUV2ZW50LCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIFJpY2hUZXh0RnVuY3Rpb25zLFxuICBSaWNodGV4dEZvcm1hdHMsXG4gIFRvb2wsXG4gIFRvb2xLZXlzLFxuICBUb29sc1N0YXRlLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL3JpY2h0ZXh0LXRvb2xib3guaW50ZXJmYWNlJztcbmltcG9ydCB7IFVSTF9SRUdFWCB9IGZyb20gJy4uL2NvbnN0YW50cy91cmwtcmVnZXguY29uc3RhbnQnO1xuXG5leHBvcnQgY2xhc3MgUmljaHRleHRXcmFwcGVyIGltcGxlbWVudHMgUmljaFRleHRGdW5jdGlvbnMge1xuICBwcml2YXRlIHF1aWxsITogUXVpbGw7XG5cbiAgcHJpdmF0ZSBtYXhMZW5ndGhTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgdGVtcGxhdGVSZXBsYWNlclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHN0YXRlU3ViID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUb29sc1N0YXRlPih7XG4gICAgaGFzU2VsZWN0aW9uOiBmYWxzZSxcbiAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgZm9ybWF0czoge1xuICAgICAgaXRhbGljOiBmYWxzZSxcbiAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgdW5kZXJsaW5lOiBmYWxzZSxcbiAgICAgIHN0cmlrZTogZmFsc2UsXG4gICAgICBsaW5rOiAnJyxcbiAgICAgIGxpc3RfYnVsbGV0ZWQ6IGZhbHNlLFxuICAgICAgbGlzdF9udW1iZXJlZDogZmFsc2UsXG4gICAgICBqdXN0aWZ5X2xlZnQ6IGZhbHNlLFxuICAgICAganVzdGlmeV9jZW50ZXI6IGZhbHNlLFxuICAgICAganVzdGlmeV9yaWdodDogZmFsc2UsXG4gICAgfSxcbiAgICBkaXNhYmxlZFRvb2xzOiBbXVxuICB9KTtcbiAgcHJpdmF0ZSBlc2MkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBlbnRlciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIG1heExlbmd0aCA9IC0xO1xuICBwcml2YXRlIGJyZWFrT25FbnRlciA9IGZhbHNlO1xuICBwcml2YXRlIGFsbG93SW1hZ2VzID0gZmFsc2U7XG4gIHByaXZhdGUgcXVpbGxGb3JtYXRzID0gW1xuICAgICdiYWNrZ3JvdW5kJyxcbiAgICAnYm9sZCcsXG4gICAgJ2NvbG9yJyxcbiAgICAnZm9udCcsXG4gICAgJ2NvZGUnLFxuICAgICdpdGFsaWMnLFxuICAgICdsaW5rJyxcbiAgICAnc2l6ZScsXG4gICAgJ3N0cmlrZScsXG4gICAgJ3NjcmlwdCcsXG4gICAgJ3VuZGVybGluZScsXG4gICAgJ2Jsb2NrcXVvdGUnLFxuICAgICdoZWFkZXInLFxuICAgICdpbmRlbnQnLFxuICAgICdsaXN0JyxcbiAgICAnYWxpZ24nLFxuICAgICdkaXJlY3Rpb24nLFxuICAgICdjb2RlLWJsb2NrJyxcbiAgICAnZm9ybXVsYScsXG4gICAgJ2ltYWdlJyxcbiAgICAnaHRtbFBhbmVsJ1xuICAgIC8vICd2aWRlbydcbiAgXVxuXG4gIHByaXZhdGUgdGV4dENoYW5nZUhhbmRsZXI6IFRleHRDaGFuZ2VIYW5kbGVyID0gKCkgPT4ge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzZWxlY3Rpb25DaGFuZ2VIYW5kbGVyOiBTZWxlY3Rpb25DaGFuZ2VIYW5kbGVyID0gKFxuICAgIHZhbHVlOiBSYW5nZVN0YXRpYyxcbiAgICBvbGRSYW5nZTogUmFuZ2VTdGF0aWMsXG4gICAgc291cmNlOiBTb3VyY2VzXG4gICkgPT4ge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBiaW5kaW5ncyA9IHtcbiAgICBib2xkOiB7XG4gICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0Qm9sZCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgIH0sXG4gICAgaXRhbGljOiB7XG4gICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc2V0SXRhbGljKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICB1bmRlcmxpbmU6IHtcbiAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRVbmRlcmxpbmUoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIGVzY2FwZTp7XG4gICAgICBrZXk6ICdlc2NhcGUnLFxuICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmVzYyQubmV4dCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgZW50ZXI6IHtcbiAgICAgIGtleTogJ2VudGVyJyxcbiAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgdGhpcy5lbnRlciQubmV4dCh0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnJlYWtPbkVudGVyO1xuICAgICAgfVxuICAgIH1cblxuICB9O1xuXG4gIHB1YmxpYyBnZXQgc3RhdGUoKXtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlU3ViLnZhbHVlXG4gIH1cbiAgXG4gIHB1YmxpYyBzdGF0ZSQgPSB0aGlzLnN0YXRlU3ViLmFzT2JzZXJ2YWJsZSgpO1xuICAgIFxuICBwdWJsaWMgZ2V0IGxpc3RlblRleHRDaGFuZ2VzJCgpe1xuICAgIHJldHVybiBmcm9tRXZlbnQodGhpcy5xdWlsbCwgJ3RleHQtY2hhbmdlJylcbiAgICAgIC5waXBlKG1hcCgoKSA9PiB0aGlzLnF1aWxsLnJvb3QuaW5uZXJIVE1MKSk7IFxuICB9XG5cbiAgcHVibGljIGdldCBsaXN0ZW5PblRvdWNoZWQkKCkge1xuICAgIHJldHVybiBmcm9tRXZlbnQodGhpcy5xdWlsbCwgJ3NlbGVjdGlvbi1jaGFuZ2UnKS5waXBlKFxuICAgICAgZmlsdGVyKCgpID0+IEJvb2xlYW4odGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oZmFsc2UpKSksXG4gICAgICBtYXAoKCkgPT4gbnVsbClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBsaXN0ZW5Fc2NhcGUkKCl7XG4gICAgcmV0dXJuIHRoaXMuZXNjJC5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgcHVibGljIGdldCBsaXN0ZW5FbnRlciQoKXtcbiAgICByZXR1cm4gdGhpcy5lbnRlciQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICkge1xuICAgIGNvbnN0IGVkaXRvcklkID0gYGVkaXRvci0ke25ldyBEYXRlKCkuZ2V0VGltZSgpfWA7XG4gICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIGVkaXRvcklkKTtcbiAgICB0aGlzLnF1aWxsID0gbmV3IFF1aWxsUHJveHkuUXVpbGwoYCMke2VkaXRvcklkfWAsIHtcbiAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgIG1vZHVsZXM6IHtcbiAgICAgICAgY2xpcGJvYXJkOiB7XG4gICAgICAgICAgbWF0Y2hlcnM6IFtcbiAgICAgICAgICAgIFtOb2RlLlRFWFRfTk9ERSwgdGhpcy51cmxNYXRjaGVyLmJpbmQodGhpcyldLFxuICAgICAgICAgICAgWydJTUcnLCB0aGlzLmltYWdlTWF0Y2hlci5iaW5kKHRoaXMpXSxcbiAgICAgICAgICAgIFsnUElDVFVSRScsIHRoaXMuaW1hZ2VNYXRjaGVyLmJpbmQodGhpcyldLFxuICAgICAgICAgICAgW05vZGUuRUxFTUVOVF9OT0RFLCB0aGlzLmh0bWxQYW5lbE1hdGNoZXIuYmluZCh0aGlzKV1cbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBrZXlib2FyZDogeyBiaW5kaW5nczogdGhpcy5iaW5kaW5ncyB9LFxuICAgICAgfSxcbiAgICAgIGZvcm1hdHM6IHRoaXMucXVpbGxGb3JtYXRzXG4gICAgfSk7XG4gICAgdGhpcy5saXN0ZW5FZGl0b3JDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXRhbGljKCkge1xuICAgIGlmKHRoaXMuaXNUb29sRGlzYWJsZWQoJ2l0YWxpYycpKSByZXR1cm47XG4gICAgdGhpcy5xdWlsbC5mb3JtYXQoJ2l0YWxpYycsICF0aGlzLnN0YXRlLmZvcm1hdHMuaXRhbGljKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEJvbGQoKSB7XG4gICAgaWYodGhpcy5pc1Rvb2xEaXNhYmxlZCgnYm9sZCcpKSByZXR1cm5cbiAgICB0aGlzLnF1aWxsLmZvcm1hdCgnYm9sZCcsICF0aGlzLnN0YXRlLmZvcm1hdHMuYm9sZCk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRVbmRlcmxpbmUoKSB7XG4gICAgaWYodGhpcy5pc1Rvb2xEaXNhYmxlZCgndW5kZXJsaW5lJykpIHJldHVybjtcbiAgICB0aGlzLnF1aWxsLmZvcm1hdCgndW5kZXJsaW5lJywgIXRoaXMuc3RhdGUuZm9ybWF0cy51bmRlcmxpbmUpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3RyaWtlKCkge1xuICAgIGlmKHRoaXMuaXNUb29sRGlzYWJsZWQoJ3N0cmlrZScpKSByZXR1cm47XG4gICAgdGhpcy5xdWlsbC5mb3JtYXQoJ3N0cmlrZScsICF0aGlzLnN0YXRlLmZvcm1hdHMuc3RyaWtlKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldExpc3ROdW1iZXJlZCgpIHtcbiAgICBpZih0aGlzLmlzVG9vbERpc2FibGVkKCdsaXN0X251bWJlcmVkJykpIHJldHVybjtcbiAgICBpZiAodGhpcy5zdGF0ZS5mb3JtYXRzLmxpc3RfbnVtYmVyZWQpXG4gICAgICB0aGlzLnF1aWxsLmZvcm1hdCgnbGlzdCcsIG51bGwpO1xuICAgIGVsc2UgIFxuICAgICAgdGhpcy5xdWlsbC5mb3JtYXQoJ2xpc3QnLCAnb3JkZXJlZCcpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TGlzdEJ1bGxldGVkKCkge1xuICAgIGlmKHRoaXMuaXNUb29sRGlzYWJsZWQoJ2xpc3RfYnVsbGV0ZWQnKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnN0YXRlLmZvcm1hdHMubGlzdF9idWxsZXRlZClcbiAgICAgIHRoaXMucXVpbGwuZm9ybWF0KCdsaXN0JywgbnVsbCk7XG4gICAgZWxzZSAgXG4gICAgICB0aGlzLnF1aWxsLmZvcm1hdCgnbGlzdCcsICdidWxsZXRlZCcpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TGluayhsaW5rOiBzdHJpbmcpIHtcbiAgICBpZih0aGlzLmlzVG9vbERpc2FibGVkKCdsaW5rJykpIHJldHVybjtcblxuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24odHJ1ZSk7XG5cbiAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmxlbmd0aCkge1xuICAgICAgY29uc3QgW3RleHRCbG9hdCwgb2Zmc2V0XSA9IHRoaXMucXVpbGwuZ2V0TGVhZihyYW5nZSEuaW5kZXgpO1xuXG4gICAgICBjb25zdCBzdGFydCA9IHJhbmdlIS5pbmRleCAtIG9mZnNldDtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHRleHRCbG9hdC5sZW5ndGgoKTtcblxuICAgICAgdGhpcy5xdWlsbC5mb3JtYXRUZXh0KHN0YXJ0LCBsZW5ndGgsICdsaW5rJywgbGluayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVpbGwuZm9ybWF0KCdsaW5rJywgbGluayk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRKdXN0aWZ5TGVmdCgpIHtcbiAgICBpZih0aGlzLmlzVG9vbERpc2FibGVkKCdqdXN0aWZ5X2xlZnQnKSkgcmV0dXJuO1xuICAgIHRoaXMucXVpbGwuZm9ybWF0KCdhbGlnbicsIG51bGwpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SnVzdGlmeUNlbnRlcigpIHtcbiAgICBpZih0aGlzLmlzVG9vbERpc2FibGVkKCdqdXN0aWZ5X2NlbnRlcicpKSByZXR1cm47XG4gICAgdGhpcy5xdWlsbC5mb3JtYXQoJ2FsaWduJywgJ2NlbnRlcicpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SnVzdGlmeVJpZ2h0KCkge1xuICAgIGlmKHRoaXMuaXNUb29sRGlzYWJsZWQoJ2p1c3RpZnlfcmlnaHQnKSkgcmV0dXJuO1xuICAgIHRoaXMucXVpbGwuZm9ybWF0KCdhbGlnbicsICdyaWdodCcpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UmVtb3ZlKCkge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbikgdGhpcy5xdWlsbC5yZW1vdmVGb3JtYXQoc2VsZWN0aW9uIS5pbmRleCwgc2VsZWN0aW9uIS5sZW5ndGgpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyl7XG4gICAgdGhpcy5xdWlsbC5yb290LmRhdGFzZXRbJ3BsYWNlaG9sZGVyJ10gPSBwbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUZXh0KHRleHQ6IHN0cmluZyl7XG4gICAgdGhpcy5xdWlsbC5jbGlwYm9hcmQuZGFuZ2Vyb3VzbHlQYXN0ZUhUTUwodGV4dCwgJ3NpbGVudCcpO1xuICB9XG5cbiAgcHVibGljIGdldFRleHRXaXRob3V0SHRtbFRhZ3MoKXtcbiAgICByZXR1cm4gdGhpcy5xdWlsbC5nZXRUZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0VGV4dChpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcsIGVtaXRFdmVudDogYm9vbGVhbil7XG4gICAgY29uc3Qgc291cmNlID0gZW1pdEV2ZW50ID8gJ3VzZXInIDogJ3NpbGVudCc7XG4gICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KGluZGV4LCB0ZXh0LCBzb3VyY2UpXG4gIH1cblxuICBwdWJsaWMgc2V0U2hvcnRjdXRUZW1wbGF0ZShrZXk6IHN0cmluZywgdGVtcGxhdGU6IHN0cmluZykge1xuICAgICAgdGhpcy50ZW1wbGF0ZVJlcGxhY2VyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy50ZW1wbGF0ZVJlcGxhY2VyU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KFxuICAgICAgdGhpcy5xdWlsbCxcbiAgICAgICd0ZXh0LWNoYW5nZSdcbiAgICApLnN1YnNjcmliZSgoW19kZWx0YSwgX29sZERlbHRhLCBfc291cmNlXSkgPT4ge1xuICAgICAgY29uc3QgZGVsdGEgPSBfZGVsdGEgYXMgdW5rbm93biBhcyBEZWx0YVN0YXRpYztcbiAgICAgIGRlbHRhLm9wcz8uZm9yRWFjaCgob3ApID0+IHtcbiAgICAgICAgaWYgKG9wLmluc2VydCA9PT0ga2V5KSB7XG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgIGlmICghcmFuZ2UpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBuZXdQb3MgPSByYW5nZS5pbmRleDtcbiAgICAgICAgICB0aGlzLnF1aWxsLmRlbGV0ZVRleHQobmV3UG9zIC0gMSwgMSk7XG4gICAgICAgICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KG5ld1BvcyAtIDEsIHRlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0TWF4TGVuZ3RoKGxlbmd0aDogbnVtYmVyKXtcbiAgICB0aGlzLm1heExlbmd0aCA9IGxlbmd0aDtcblxuICAgIHRoaXMubWF4TGVuZ3RoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIGlmKHRoaXMubWF4TGVuZ3RoID4gMClcbiAgICAgIHRoaXMubWF4TGVuZ3RoU3Vic2NyaXB0aW9uID0gXG4gICAgICAgIGZyb21FdmVudCh0aGlzLnF1aWxsLCAndGV4dC1jaGFuZ2UnKVxuICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5xdWlsbC5nZXRMZW5ndGgoKSA+IHRoaXMubWF4TGVuZ3RoKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5xdWlsbC5kZWxldGVUZXh0KHRoaXMubWF4TGVuZ3RoIC0xLCB0aGlzLnF1aWxsLmdldExlbmd0aCgpKTtcbiAgICAgIH0pXG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRUb29scyh0b29sczogVG9vbEtleXMpe1xuICAgIGlmKEpTT04uc3RyaW5naWZ5KHRvb2xzKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZVN1Yi52YWx1ZS5kaXNhYmxlZFRvb2xzKSlcbiAgICAgIHRoaXMuc3RhdGVTdWIubmV4dCh7Li4udGhpcy5zdGF0ZVN1Yi52YWx1ZSwgZGlzYWJsZWRUb29sczogdG9vbHMsIH0pXG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdG9yQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpe1xuICAgIGlmKCFjbGFzc05hbWUpIHJldHVybjtcbiAgICB0aGlzLnF1aWxsLnJvb3QuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICB9XG5cbiAgcHVibGljIGdldEVkaXRvckVsZW1lbnQoKXtcbiAgICByZXR1cm4gdGhpcy5xdWlsbC5yb290O1xuICB9XG5cbiAgcHVibGljIGdldFRleHRMZW5ndGgoKXtcbiAgICByZXR1cm4gdGhpcy5xdWlsbC5nZXRMZW5ndGgoKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhYmxlKCl7XG4gICAgdGhpcy5xdWlsbC5kaXNhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZW5hYmxlKCl7XG4gICAgdGhpcy5xdWlsbC5lbmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1cygpe1xuICAgIHRoaXMucXVpbGwuZm9jdXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRCcmVha09uRW50ZXIoYnJlYWtPbkVudGVyOiBib29sZWFuKXtcbiAgICB0aGlzLmJyZWFrT25FbnRlciA9IGJyZWFrT25FbnRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBbGxvd0ltYWdlcyhhbGxvd0ltYWdlczogYm9vbGVhbil7XG4gICAgdGhpcy5hbGxvd0ltYWdlcyA9IGFsbG93SW1hZ2VzO1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRDdXJzb3JQb3NpdGlvbigpe1xuICAgIHJldHVybiB0aGlzLnF1aWxsLmdldFNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5xdWlsbC5vZmYoJ3NlbGVjdGlvbi1jaGFuZ2UnLCB0aGlzLnNlbGVjdGlvbkNoYW5nZUhhbmRsZXIpO1xuICAgIHRoaXMucXVpbGwub2ZmKCd0ZXh0LWNoYW5nZScsIHRoaXMudGV4dENoYW5nZUhhbmRsZXIpO1xuICAgIHRoaXMuZXNjJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZW50ZXIkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdGF0ZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubWF4TGVuZ3RoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudGVtcGxhdGVSZXBsYWNlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNUb29sRGlzYWJsZWQodG9vbDogVG9vbCl7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWIudmFsdWUuZGlzYWJsZWRUb29scy5pbmNsdWRlcyh0b29sKVxuICB9XG5cbiAgcHJpdmF0ZSB1cmxNYXRjaGVyKG5vZGU6IGFueSwgZGVsdGE6IGFueSkge1xuICAgIGlmICh0eXBlb2Ygbm9kZS5kYXRhICE9PSAnc3RyaW5nJykgcmV0dXJuO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBub2RlLmRhdGEubWF0Y2goVVJMX1JFR0VYKTtcblxuICAgIGlmIChtYXRjaGVzICYmIG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHRleHQgPSAnJztcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgaWYgKHNlbGVjdGlvbi5sZW5ndGgpXG4gICAgICAgIHRleHQgPSB0aGlzLnF1aWxsLmdldFRleHQoc2VsZWN0aW9uIS5pbmRleCwgc2VsZWN0aW9uIS5sZW5ndGgpO1xuXG4gICAgICBjb25zdCBvcHMgPSBbXTtcbiAgICAgIGxldCBzdHIgPSBub2RlLmRhdGE7XG4gICAgICBtYXRjaGVzLmZvckVhY2goZnVuY3Rpb24gKG1hdGNoOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc3BsaXQgPSBzdHIuc3BsaXQobWF0Y2gpO1xuICAgICAgICBjb25zdCBiZWZvcmVMaW5rID0gc3BsaXQuc2hpZnQoKTtcbiAgICAgICAgb3BzLnB1c2goeyBpbnNlcnQ6IGJlZm9yZUxpbmsgfSk7XG4gICAgICAgIG9wcy5wdXNoKHsgaW5zZXJ0OiB0ZXh0IHx8IG1hdGNoLCBhdHRyaWJ1dGVzOiB7IGxpbms6IG1hdGNoIH0gfSk7XG4gICAgICAgIHN0ciA9IHNwbGl0LmpvaW4obWF0Y2gpO1xuICAgICAgfSk7XG4gICAgICBvcHMucHVzaCh7IGluc2VydDogc3RyIH0pO1xuICAgICAgZGVsdGEub3BzID0gb3BzO1xuICAgIH1cblxuICAgIHJldHVybiBkZWx0YTtcbiAgfVxuXG4gIHByaXZhdGUgaW1hZ2VNYXRjaGVyKG5vZGU6IGFueSwgZGVsdGE6IGFueSl7XG4gICAgaWYodGhpcy5hbGxvd0ltYWdlcykgIHJldHVybiBkZWx0YTtcblxuICAgIGNvbnN0IERlbHRhID0gUXVpbGwuaW1wb3J0KCdkZWx0YScpXG4gICAgcmV0dXJuIG5ldyBEZWx0YSgpLmluc2VydCgnJylcbiAgfVxuXG4gIHByaXZhdGUgaHRtbFBhbmVsTWF0Y2hlcihub2RlOiBIVE1MRWxlbWVudCwgZGVsdGE6IERlbHRhKSB7XG4gICAgaWYgKG5vZGUuaWQgPT09ICdodG1sUGFuZWwnKSB7XG4gICAgICBkZWx0YS5vcHMgPSBbeyBpbnNlcnQ6IHtodG1sUGFuZWw6IG5vZGUuaW5uZXJIVE1MfX1dO1xuICAgIH1cbiAgICByZXR1cm4gZGVsdGE7XG4gIH1cblxuXG4gIHByaXZhdGUgbGlzdGVuRWRpdG9yQ2hhbmdlcygpIHtcbiAgICB0aGlzLnF1aWxsLm9uKCdzZWxlY3Rpb24tY2hhbmdlJywgdGhpcy5zZWxlY3Rpb25DaGFuZ2VIYW5kbGVyKTtcbiAgICB0aGlzLnF1aWxsLm9uKCd0ZXh0LWNoYW5nZScsIHRoaXMudGV4dENoYW5nZUhhbmRsZXIpO1xuICB9XG5cblxuICBwcml2YXRlIHVwZGF0ZSgpIHtcbiAgICBsZXQgYm91bmRzOiBCb3VuZHNTdGF0aWMgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZvcm1hdHNBcnI7XG5cbiAgICBjb25zdCByYW5nZSA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBpZiAgKHJhbmdlKXsgXG4gICAgICBib3VuZHMgPSB0aGlzLnF1aWxsLmdldEJvdW5kcyhyYW5nZS5pbmRleCwgcmFuZ2UubGVuZ3RoKTtcbiAgICAgIGZvcm1hdHNBcnIgPSB0aGlzLnF1aWxsLmdldEZvcm1hdChyYW5nZSkgYXMgYW55O1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1hdHM6IFJpY2h0ZXh0Rm9ybWF0cyA9IHtcbiAgICAgIGl0YWxpYzogZm9ybWF0c0Fycj8uaXRhbGljIHx8IGZhbHNlLFxuICAgICAgYm9sZDogZm9ybWF0c0Fycj8uYm9sZCB8fCBmYWxzZSxcbiAgICAgIHVuZGVybGluZTogZm9ybWF0c0Fycj8udW5kZXJsaW5lIHx8IGZhbHNlLFxuICAgICAgc3RyaWtlOiBmb3JtYXRzQXJyPy5zdHJpa2UgfHwgZmFsc2UsXG4gICAgICBsaW5rOiBmb3JtYXRzQXJyPy5saW5rIHx8ICcnLFxuICAgICAgbGlzdF9idWxsZXRlZDogZm9ybWF0c0Fycj8ubGlzdCA9PT0gJ2J1bGxldCcsXG4gICAgICBsaXN0X251bWJlcmVkOiBmb3JtYXRzQXJyPy5saXN0ID09PSAnb3JkZXJlZCcsXG4gICAgICBqdXN0aWZ5X2xlZnQ6IGZvcm1hdHNBcnI/LmFsaWduID09PSAnbGVmdCcsXG4gICAgICBqdXN0aWZ5X2NlbnRlcjogZm9ybWF0c0Fycj8uYWxpZ24gPT09ICdjZW50ZXInLFxuICAgICAganVzdGlmeV9yaWdodDogZm9ybWF0c0Fycj8uYWxpZ24gPT09ICdyaWdodCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGhhc1NlbGVjdGlvbiA9ICEhcmFuZ2U/Lmxlbmd0aDtcbiAgICBjb25zdCBoYXNGb2N1cyA9ICEhcmFuZ2U7XG5cbiAgICBjb25zdCBuZXdTdGF0ZTogVG9vbHNTdGF0ZSA9IHsgXG4gICAgICAuLi50aGlzLnN0YXRlU3ViLnZhbHVlLCBcbiAgICAgIGhhc1NlbGVjdGlvbiwgXG4gICAgICBmb3JtYXRzLCBcbiAgICAgIGJvdW5kcywgXG4gICAgICBoYXNGb2N1cyBcbiAgICB9O1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMuc3RhdGVTdWIubmV4dChuZXdTdGF0ZSk7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pXG4gIH1cbn1cblxuLy90byB3b3JrIGFyb3VuZCB0ZXN0aW5nIHByb2JsZW1zIFxuZXhwb3J0IGNvbnN0IFF1aWxsUHJveHkgPXtcbiAgUXVpbGxcbn1cblxuLy90byB3b3JrIGFyb3VuZCB0ZXN0aW5nIHByb2JsZW1zIFxuZXhwb3J0IGNvbnN0IFJpY2h0ZXh0V3JhcHBlclByb3h5ID0ge1xuICBSaWNodGV4dFdyYXBwZXJcbn0iXX0=
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaHRleHQtd3JhcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Fza3N1aXRlLWNpdHJ1cy9zcmMvbGliL2NsYXNzZXMvcmljaHRleHQtd3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQTRHLE1BQU0sT0FBTyxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVF0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUQsTUFBTSxPQUFPLGVBQWU7SUFxRzFCLElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUE7SUFDOUIsQ0FBQztJQUlELElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDO2FBQ3hDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDekIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FDbkQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3JELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ2pDLENBQUM7SUFFRCxJQUFX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M0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7WUFDdEIsWUFBWTtZQUNaLE9BQU87WUFDUCxNQUFNO1lBQ04sUUFBUTtTQUNULENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQUVELGtDQUFrQztBQUNsQyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUU7SUFDdkIsS0FBSztDQUNOLENBQUE7QUFFRCxrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUc7SUFDbEMsZUFBZTtDQUNoQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IFF1aWxsLCB7IEJvdW5kc1N0YXRpYywgRGVsdGEsIERlbHRhU3RhdGljLCBSYW5nZVN0YXRpYywgU2VsZWN0aW9uQ2hhbmdlSGFuZGxlciwgU291cmNlcywgVGV4dENoYW5nZUhhbmRsZXIgfSBmcm9tICdxdWlsbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUmljaFRleHRGdW5jdGlvbnMsXG4gIFJpY2h0ZXh0Rm9ybWF0cyxcbiAgVG9vbCxcbiAgVG9vbEtleXMsXG4gIFRvb2xzU3RhdGUsXG59IGZyb20gJy4uL2ludGVyZmFjZXMvcmljaHRleHQtdG9vbGJveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVVJMX1JFR0VYIH0gZnJvbSAnLi4vY29uc3RhbnRzL3VybC1yZWdleC5jb25zdGFudCc7XG5cbmV4cG9ydCBjbGFzcyBSaWNodGV4dFdyYXBwZXIgaW1wbGVtZW50cyBSaWNoVGV4dEZ1bmN0aW9ucyB7XG4gIHByaXZhdGUgcXVpbGwhOiBRdWlsbDtcblxuICBwcml2YXRlIG1heExlbmd0aFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZVJlcGxhY2VyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc3RhdGVTdWIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRvb2xzU3RhdGU+KHtcbiAgICBoYXNTZWxlY3Rpb246IGZhbHNlLFxuICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICBmb3JtYXRzOiB7XG4gICAgICBpdGFsaWM6IGZhbHNlLFxuICAgICAgYm9sZDogZmFsc2UsXG4gICAgICB1bmRlcmxpbmU6IGZhbHNlLFxuICAgICAgc3RyaWtlOiBmYWxzZSxcbiAgICAgIGxpbms6ICcnLFxuICAgICAgbGlzdF9idWxsZXRlZDogZmFsc2UsXG4gICAgICBsaXN0X251bWJlcmVkOiBmYWxzZSxcbiAgICAgIGp1c3RpZnlfbGVmdDogZmFsc2UsXG4gICAgICBqdXN0aWZ5X2NlbnRlcjogZmFsc2UsXG4gICAgICBqdXN0aWZ5X3JpZ2h0OiBmYWxzZSxcbiAgICB9LFxuICAgIGRpc2FibGVkVG9vbHM6IFtdXG4gIH0pO1xuICBwcml2YXRlIGVzYyQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIGVudGVyJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHByaXZhdGUgbWF4TGVuZ3RoID0gLTE7XG4gIHByaXZhdGUgYnJlYWtPbkVudGVyID0gZmFsc2U7XG4gIHByaXZhdGUgYWxsb3dJbWFnZXMgPSBmYWxzZTtcbiAgcHJpdmF0ZSBxdWlsbEZvcm1hdHMgPSBbXG4gICAgJ2JhY2tncm91bmQnLFxuICAgICdib2xkJyxcbiAgICAnY29sb3InLFxuICAgICdmb250JyxcbiAgICAnY29kZScsXG4gICAgJ2l0YWxpYycsXG4gICAgJ2xpbmsnLFxuICAgICdzaXplJyxcbiAgICAnc3RyaWtlJyxcbiAgICAnc2NyaXB0JyxcbiAgICAndW5kZXJsaW5lJyxcbiAgICAnYmxvY2txdW90ZScsXG4gICAgJ2hlYWRlcicsXG4gICAgJ2luZGVudCcsXG4gICAgJ2xpc3QnLFxuICAgICdhbGlnbicsXG4gICAgJ2RpcmVjdGlvbicsXG4gICAgJ2NvZGUtYmxvY2snLFxuICAgICdmb3JtdWxhJyxcbiAgICAnaW1hZ2UnLFxuICAgICdodG1sUGFuZWwnXG4gICAgLy8gJ3ZpZGVvJ1xuICBdXG5cbiAgcHJpdmF0ZSB0ZXh0Q2hhbmdlSGFuZGxlcjogVGV4dENoYW5nZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfTtcblxuICBwcml2YXRlIHNlbGVjdGlvbkNoYW5nZUhhbmRsZXI6IFNlbGVjdGlvbkNoYW5nZUhhbmRsZXIgPSAoXG4gICAgdmFsdWU6IFJhbmdlU3RhdGljLFxuICAgIG9sZFJhbmdlOiBSYW5nZVN0YXRpYyxcbiAgICBzb3VyY2U6IFNvdXJjZXNcbiAgKSA9PiB7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfTtcblxuICBwcml2YXRlIGJpbmRpbmdzID0ge1xuICAgIGJvbGQ6IHtcbiAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRCb2xkKCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgfSxcbiAgICBpdGFsaWM6IHtcbiAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRJdGFsaWMoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHVuZGVybGluZToge1xuICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFVuZGVybGluZSgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgIH0sXG4gICAgZXNjYXBlOntcbiAgICAgIGtleTogJ2VzY2FwZScsXG4gICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZXNjJC5uZXh0KHRydWUpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbnRlcjoge1xuICAgICAga2V5OiAnZW50ZXInLFxuICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmVudGVyJC5uZXh0KHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5icmVha09uRW50ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gIH07XG5cbiAgcHVibGljIGdldCBzdGF0ZSgpe1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdWIudmFsdWVcbiAgfVxuICBcbiAgcHVibGljIHN0YXRlJCA9IHRoaXMuc3RhdGVTdWIuYXNPYnNlcnZhYmxlKCk7XG4gICAgXG4gIHB1YmxpYyBnZXQgbGlzdGVuVGV4dENoYW5nZXMkKCl7XG4gICAgcmV0dXJuIGZyb21FdmVudCh0aGlzLnF1aWxsLCAndGV4dC1jaGFuZ2UnKVxuICAgICAgLnBpcGUobWFwKCgpID0+IHRoaXMucXVpbGwucm9vdC5pbm5lckhUTUwpKTsgXG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpc3Rlbk9uVG91Y2hlZCQoKSB7XG4gICAgcmV0dXJuIGZyb21FdmVudCh0aGlzLnF1aWxsLCAnc2VsZWN0aW9uLWNoYW5nZScpLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gQm9vbGVhbih0aGlzLnF1aWxsLmdldFNlbGVjdGlvbihmYWxzZSkpKSxcbiAgICAgIG1hcCgoKSA9PiBudWxsKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpc3RlbkVzY2FwZSQoKXtcbiAgICByZXR1cm4gdGhpcy5lc2MkLmFzT2JzZXJ2YWJsZSgpXG4gIH1cblxuICBwdWJsaWMgZ2V0IGxpc3RlbkVudGVyJCgpe1xuICAgIHJldHVybiB0aGlzLmVudGVyJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgKSB7XG4gICAgY29uc3QgZWRpdG9ySWQgPSBgZWRpdG9yLSR7bmV3IERhdGUoKS5nZXRUaW1lKCl9YDtcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgZWRpdG9ySWQpO1xuICAgIHRoaXMucXVpbGwgPSBuZXcgUXVpbGxQcm94eS5RdWlsbChgIyR7ZWRpdG9ySWR9YCwge1xuICAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgbW9kdWxlczoge1xuICAgICAgICBjbGlwYm9hcmQ6IHtcbiAgICAgICAgICBtYXRjaGVyczogW1xuICAgICAgICAgICAgW05vZGUuVEVYVF9OT0RFLCB0aGlzLnVybE1hdGNoZXIuYmluZCh0aGlzKV0sXG4gICAgICAgICAgICBbJ0lNRycsIHRoaXMuaW1hZ2VNYXRjaGVyLmJpbmQodGhpcyldLFxuICAgICAgICAgICAgW05vZGUuRUxFTUVOVF9OT0RFLCB0aGlzLmh0bWxQYW5lbE1hdGNoZXIuYmluZCh0aGlzKV1cbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICBrZXlib2FyZDogeyBiaW5kaW5nczogdGhpcy5iaW5kaW5ncyB9LFxuICAgICAgfSxcbiAgICAgIGZvcm1hdHM6IHRoaXMucXVpbGxGb3JtYXRzXG4gICAgfSk7XG4gICAgdGhpcy5saXN0ZW5FZGl0b3JDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXRhbGljKCkge1xuICAgIGlmKHRoaXMuaXNUb29sRGlzYWJsZWQoJ2l0YWxpYycpKSByZXR1cm47XG4gICAgdGhpcy5xdWlsbC5mb3JtYXQoJ2l0YWxpYycsICF0aGlzLnN0YXRlLmZvcm1hdHMuaXRhbGljKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEJvbGQoKSB7XG4gICAgaWYodGhpcy5pc1Rvb2xEaXNhYmxlZCgnYm9sZCcpKSByZXR1cm5cbiAgICB0aGlzLnF1aWxsLmZvcm1hdCgnYm9sZCcsICF0aGlzLnN0YXRlLmZvcm1hdHMuYm9sZCk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRVbmRlcmxpbmUoKSB7XG4gICAgaWYodGhpcy5pc1Rvb2xEaXNhYmxlZCgndW5kZXJsaW5lJykpIHJldHVybjtcbiAgICB0aGlzLnF1aWxsLmZvcm1hdCgndW5kZXJsaW5lJywgIXRoaXMuc3RhdGUuZm9ybWF0cy51bmRlcmxpbmUpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3RyaWtlKCkge1xuICAgIGlmKHRoaXMuaXNUb29sRGlzYWJsZWQoJ3N0cmlrZScpKSByZXR1cm47XG4gICAgdGhpcy5xdWlsbC5mb3JtYXQoJ3N0cmlrZScsICF0aGlzLnN0YXRlLmZvcm1hdHMuc3RyaWtlKTtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldExpc3ROdW1iZXJlZCgpIHtcbiAgICBpZih0aGlzLmlzVG9vbERpc2FibGVkKCdsaXN0X251bWJlcmVkJykpIHJldHVybjtcbiAgICBpZiAodGhpcy5zdGF0ZS5mb3JtYXRzLmxpc3RfbnVtYmVyZWQpXG4gICAgICB0aGlzLnF1aWxsLmZvcm1hdCgnbGlzdCcsIG51bGwpO1xuICAgIGVsc2UgIFxuICAgICAgdGhpcy5xdWlsbC5mb3JtYXQoJ2xpc3QnLCAnb3JkZXJlZCcpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TGlzdEJ1bGxldGVkKCkge1xuICAgIGlmKHRoaXMuaXNUb29sRGlzYWJsZWQoJ2xpc3RfYnVsbGV0ZWQnKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnN0YXRlLmZvcm1hdHMubGlzdF9idWxsZXRlZClcbiAgICAgIHRoaXMucXVpbGwuZm9ybWF0KCdsaXN0JywgbnVsbCk7XG4gICAgZWxzZSAgXG4gICAgICB0aGlzLnF1aWxsLmZvcm1hdCgnbGlzdCcsICdidWxsZXRlZCcpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0TGluayhsaW5rOiBzdHJpbmcpIHtcbiAgICBpZih0aGlzLmlzVG9vbERpc2FibGVkKCdsaW5rJykpIHJldHVybjtcblxuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24odHJ1ZSk7XG5cbiAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLmxlbmd0aCkge1xuICAgICAgY29uc3QgW3RleHRCbG9hdCwgb2Zmc2V0XSA9IHRoaXMucXVpbGwuZ2V0TGVhZihyYW5nZSEuaW5kZXgpO1xuXG4gICAgICBjb25zdCBzdGFydCA9IHJhbmdlIS5pbmRleCAtIG9mZnNldDtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHRleHRCbG9hdC5sZW5ndGgoKTtcblxuICAgICAgdGhpcy5xdWlsbC5mb3JtYXRUZXh0KHN0YXJ0LCBsZW5ndGgsICdsaW5rJywgbGluayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVpbGwuZm9ybWF0KCdsaW5rJywgbGluayk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRKdXN0aWZ5TGVmdCgpIHtcbiAgICBpZih0aGlzLmlzVG9vbERpc2FibGVkKCdqdXN0aWZ5X2xlZnQnKSkgcmV0dXJuO1xuICAgIHRoaXMucXVpbGwuZm9ybWF0KCdhbGlnbicsIG51bGwpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SnVzdGlmeUNlbnRlcigpIHtcbiAgICBpZih0aGlzLmlzVG9vbERpc2FibGVkKCdqdXN0aWZ5X2NlbnRlcicpKSByZXR1cm47XG4gICAgdGhpcy5xdWlsbC5mb3JtYXQoJ2FsaWduJywgJ2NlbnRlcicpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SnVzdGlmeVJpZ2h0KCkge1xuICAgIGlmKHRoaXMuaXNUb29sRGlzYWJsZWQoJ2p1c3RpZnlfcmlnaHQnKSkgcmV0dXJuO1xuICAgIHRoaXMucXVpbGwuZm9ybWF0KCdhbGlnbicsICdyaWdodCcpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UmVtb3ZlKCkge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKHNlbGVjdGlvbikgdGhpcy5xdWlsbC5yZW1vdmVGb3JtYXQoc2VsZWN0aW9uIS5pbmRleCwgc2VsZWN0aW9uIS5sZW5ndGgpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyl7XG4gICAgdGhpcy5xdWlsbC5yb290LmRhdGFzZXRbJ3BsYWNlaG9sZGVyJ10gPSBwbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUZXh0KHRleHQ6IHN0cmluZyl7XG4gICAgdGhpcy5xdWlsbC5jbGlwYm9hcmQuZGFuZ2Vyb3VzbHlQYXN0ZUhUTUwodGV4dCwgJ3NpbGVudCcpO1xuICB9XG5cbiAgcHVibGljIGdldFRleHRXaXRob3V0SHRtbFRhZ3MoKXtcbiAgICByZXR1cm4gdGhpcy5xdWlsbC5nZXRUZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgaW5zZXJ0VGV4dChpbmRleDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcsIGVtaXRFdmVudDogYm9vbGVhbil7XG4gICAgY29uc3Qgc291cmNlID0gZW1pdEV2ZW50ID8gJ3VzZXInIDogJ3NpbGVudCc7XG4gICAgdGhpcy5xdWlsbC5pbnNlcnRUZXh0KGluZGV4LCB0ZXh0LCBzb3VyY2UpXG4gIH1cblxuICBwdWJsaWMgc2V0U2hvcnRjdXRUZW1wbGF0ZShrZXk6IHN0cmluZywgdGVtcGxhdGU6IHN0cmluZykge1xuICAgIHRoaXMudGVtcGxhdGVSZXBsYWNlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMudGVtcGxhdGVSZXBsYWNlclN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChcbiAgICAgIHRoaXMucXVpbGwsXG4gICAgICAndGV4dC1jaGFuZ2UnXG4gICAgKS5zdWJzY3JpYmUoKFtfZGVsdGEsIF9vbGREZWx0YSwgX3NvdXJjZV0pICA9PiB7XG4gICAgICBjb25zdCBkZWx0YSA9IF9kZWx0YSBhcyB1bmtub3duIGFzIERlbHRhU3RhdGljO1xuICAgICAgY29uc3Qgc291cmNlID0gX3NvdXJjZSBhcyBTb3VyY2VzO1xuXG4gICAgICBkZWx0YS5vcHM/LmZvckVhY2goKG9wKSA9PiB7XG4gICAgICAgIGlmIChvcC5pbnNlcnQgPT09IGtleSAmJiBzb3VyY2UgPT09ICd1c2VyJykge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZGVsdGEub3BzIVswXS5yZXRhaW4gfHwgMDtcbiAgICAgICAgICBkZWx0YS5vcHMhLnBvcCgpO1xuICAgICAgICAgIGRlbHRhLm9wcyEucHVzaCh7IGRlbGV0ZToga2V5Lmxlbmd0aCB9LCB7IGluc2VydDogdGVtcGxhdGUgfSk7XG5cbiAgICAgICAgICB0aGlzLnF1aWxsLnVwZGF0ZUNvbnRlbnRzKGRlbHRhLCAnc2lsZW50Jyk7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucXVpbGwuc2V0U2VsZWN0aW9uKHBvc2l0aW9uICsgMSArIHRlbXBsYXRlLmxlbmd0aCwgLTEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRNYXhMZW5ndGgobGVuZ3RoOiBudW1iZXIpe1xuICAgIHRoaXMubWF4TGVuZ3RoID0gbGVuZ3RoO1xuXG4gICAgdGhpcy5tYXhMZW5ndGhTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgaWYodGhpcy5tYXhMZW5ndGggPiAwKVxuICAgICAgdGhpcy5tYXhMZW5ndGhTdWJzY3JpcHRpb24gPSBcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMucXVpbGwsICd0ZXh0LWNoYW5nZScpXG4gICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiB0aGlzLnF1aWxsLmdldExlbmd0aCgpID4gdGhpcy5tYXhMZW5ndGgpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnF1aWxsLmRlbGV0ZVRleHQodGhpcy5tYXhMZW5ndGggLTEsIHRoaXMucXVpbGwuZ2V0TGVuZ3RoKCkpO1xuICAgICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBzZXREaXNhYmxlZFRvb2xzKHRvb2xzOiBUb29sS2V5cyl7XG4gICAgaWYoSlNPTi5zdHJpbmdpZnkodG9vbHMpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRlU3ViLnZhbHVlLmRpc2FibGVkVG9vbHMpKVxuICAgICAgdGhpcy5zdGF0ZVN1Yi5uZXh0KHsuLi50aGlzLnN0YXRlU3ViLnZhbHVlLCBkaXNhYmxlZFRvb2xzOiB0b29scywgfSlcbiAgfVxuXG4gIHB1YmxpYyBzZXRFZGl0b3JDbGFzcyhjbGFzc05hbWU6IHN0cmluZyl7XG4gICAgaWYoIWNsYXNzTmFtZSkgcmV0dXJuO1xuICAgIHRoaXMucXVpbGwucm9vdC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RWRpdG9yRWxlbWVudCgpe1xuICAgIHJldHVybiB0aGlzLnF1aWxsLnJvb3Q7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGV4dExlbmd0aCgpe1xuICAgIHJldHVybiB0aGlzLnF1aWxsLmdldExlbmd0aCgpO1xuICB9XG5cbiAgcHVibGljIGRpc2FibGUoKXtcbiAgICB0aGlzLnF1aWxsLmRpc2FibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBlbmFibGUoKXtcbiAgICB0aGlzLnF1aWxsLmVuYWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKCl7XG4gICAgdGhpcy5xdWlsbC5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIHNldEJyZWFrT25FbnRlcihicmVha09uRW50ZXI6IGJvb2xlYW4pe1xuICAgIHRoaXMuYnJlYWtPbkVudGVyID0gYnJlYWtPbkVudGVyO1xuICB9XG5cbiAgcHVibGljIHNldEFsbG93SW1hZ2VzKGFsbG93SW1hZ2VzOiBib29sZWFuKXtcbiAgICB0aGlzLmFsbG93SW1hZ2VzID0gYWxsb3dJbWFnZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3VycmVudEN1cnNvclBvc2l0aW9uKCl7XG4gICAgcmV0dXJuIHRoaXMucXVpbGwuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICB0aGlzLnF1aWxsLm9mZignc2VsZWN0aW9uLWNoYW5nZScsIHRoaXMuc2VsZWN0aW9uQ2hhbmdlSGFuZGxlcik7XG4gICAgdGhpcy5xdWlsbC5vZmYoJ3RleHQtY2hhbmdlJywgdGhpcy50ZXh0Q2hhbmdlSGFuZGxlcik7XG4gICAgdGhpcy5lc2MkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5lbnRlciQudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN0YXRlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5tYXhMZW5ndGhTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy50ZW1wbGF0ZVJlcGxhY2VyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Rvb2xEaXNhYmxlZCh0b29sOiBUb29sKXtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZVN1Yi52YWx1ZS5kaXNhYmxlZFRvb2xzLmluY2x1ZGVzKHRvb2wpXG4gIH1cblxuICBwcml2YXRlIHVybE1hdGNoZXIobm9kZTogYW55LCBkZWx0YTogYW55KSB7XG4gICAgaWYgKHR5cGVvZiBub2RlLmRhdGEgIT09ICdzdHJpbmcnKSByZXR1cm47XG4gICAgY29uc3QgbWF0Y2hlcyA9IG5vZGUuZGF0YS5tYXRjaChVUkxfUkVHRVgpO1xuXG4gICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBpZiAoc2VsZWN0aW9uLmxlbmd0aClcbiAgICAgICAgdGV4dCA9IHRoaXMucXVpbGwuZ2V0VGV4dChzZWxlY3Rpb24hLmluZGV4LCBzZWxlY3Rpb24hLmxlbmd0aCk7XG5cbiAgICAgIGNvbnN0IG9wcyA9IFtdO1xuICAgICAgbGV0IHN0ciA9IG5vZGUuZGF0YTtcbiAgICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbiAobWF0Y2g6IGFueSkge1xuICAgICAgICBjb25zdCBzcGxpdCA9IHN0ci5zcGxpdChtYXRjaCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZUxpbmsgPSBzcGxpdC5zaGlmdCgpO1xuICAgICAgICBvcHMucHVzaCh7IGluc2VydDogYmVmb3JlTGluayB9KTtcbiAgICAgICAgb3BzLnB1c2goeyBpbnNlcnQ6IHRleHQgfHwgbWF0Y2gsIGF0dHJpYnV0ZXM6IHsgbGluazogbWF0Y2ggfSB9KTtcbiAgICAgICAgc3RyID0gc3BsaXQuam9pbihtYXRjaCk7XG4gICAgICB9KTtcbiAgICAgIG9wcy5wdXNoKHsgaW5zZXJ0OiBzdHIgfSk7XG4gICAgICBkZWx0YS5vcHMgPSBvcHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbHRhO1xuICB9XG5cbiAgcHJpdmF0ZSBpbWFnZU1hdGNoZXIobm9kZTogYW55LCBkZWx0YTogYW55KXtcbiAgICBpZih0aGlzLmFsbG93SW1hZ2VzKSAgcmV0dXJuIGRlbHRhO1xuXG4gICAgY29uc3QgRGVsdGEgPSBRdWlsbC5pbXBvcnQoJ2RlbHRhJylcbiAgICByZXR1cm4gbmV3IERlbHRhKCkuaW5zZXJ0KCcnKVxuICB9XG5cbiAgcHJpdmF0ZSBodG1sUGFuZWxNYXRjaGVyKG5vZGU6IEhUTUxFbGVtZW50LCBkZWx0YTogRGVsdGEpIHtcbiAgICBpZiAobm9kZS5pZCA9PT0gJ2h0bWxQYW5lbCcpIHtcbiAgICAgIGRlbHRhLm9wcyA9IFt7IGluc2VydDoge2h0bWxQYW5lbDogbm9kZS5pbm5lckhUTUx9fV07XG4gICAgfVxuICAgIHJldHVybiBkZWx0YTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBsaXN0ZW5FZGl0b3JDaGFuZ2VzKCkge1xuICAgIHRoaXMucXVpbGwub24oJ3NlbGVjdGlvbi1jaGFuZ2UnLCB0aGlzLnNlbGVjdGlvbkNoYW5nZUhhbmRsZXIpO1xuICAgIHRoaXMucXVpbGwub24oJ3RleHQtY2hhbmdlJywgdGhpcy50ZXh0Q2hhbmdlSGFuZGxlcik7XG4gIH1cblxuXG4gIHByaXZhdGUgdXBkYXRlKCkge1xuICAgIGxldCBib3VuZHM6IEJvdW5kc1N0YXRpYyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZm9ybWF0c0FycjtcblxuICAgIGNvbnN0IHJhbmdlID0gdGhpcy5xdWlsbC5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICAocmFuZ2UpeyBcbiAgICAgIGJvdW5kcyA9IHRoaXMucXVpbGwuZ2V0Qm91bmRzKHJhbmdlLmluZGV4LCByYW5nZS5sZW5ndGgpO1xuICAgICAgZm9ybWF0c0FyciA9IHRoaXMucXVpbGwuZ2V0Rm9ybWF0KHJhbmdlKSBhcyBhbnk7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0czogUmljaHRleHRGb3JtYXRzID0ge1xuICAgICAgaXRhbGljOiBmb3JtYXRzQXJyPy5pdGFsaWMgfHwgZmFsc2UsXG4gICAgICBib2xkOiBmb3JtYXRzQXJyPy5ib2xkIHx8IGZhbHNlLFxuICAgICAgdW5kZXJsaW5lOiBmb3JtYXRzQXJyPy51bmRlcmxpbmUgfHwgZmFsc2UsXG4gICAgICBzdHJpa2U6IGZvcm1hdHNBcnI/LnN0cmlrZSB8fCBmYWxzZSxcbiAgICAgIGxpbms6IGZvcm1hdHNBcnI/LmxpbmsgfHwgJycsXG4gICAgICBsaXN0X2J1bGxldGVkOiBmb3JtYXRzQXJyPy5saXN0ID09PSAnYnVsbGV0JyxcbiAgICAgIGxpc3RfbnVtYmVyZWQ6IGZvcm1hdHNBcnI/Lmxpc3QgPT09ICdvcmRlcmVkJyxcbiAgICAgIGp1c3RpZnlfbGVmdDogZm9ybWF0c0Fycj8uYWxpZ24gPT09ICdsZWZ0JyxcbiAgICAgIGp1c3RpZnlfY2VudGVyOiBmb3JtYXRzQXJyPy5hbGlnbiA9PT0gJ2NlbnRlcicsXG4gICAgICBqdXN0aWZ5X3JpZ2h0OiBmb3JtYXRzQXJyPy5hbGlnbiA9PT0gJ3JpZ2h0JyxcbiAgICB9O1xuXG4gICAgY29uc3QgaGFzU2VsZWN0aW9uID0gISFyYW5nZT8ubGVuZ3RoO1xuICAgIGNvbnN0IGhhc0ZvY3VzID0gISFyYW5nZTtcblxuICAgIGNvbnN0IG5ld1N0YXRlOiBUb29sc1N0YXRlID0geyBcbiAgICAgIC4uLnRoaXMuc3RhdGVTdWIudmFsdWUsIFxuICAgICAgaGFzU2VsZWN0aW9uLCBcbiAgICAgIGZvcm1hdHMsIFxuICAgICAgYm91bmRzLCBcbiAgICAgIGhhc0ZvY3VzIFxuICAgIH07XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZVN1Yi5uZXh0KG5ld1N0YXRlKTtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfSlcbiAgfVxufVxuXG4vL3RvIHdvcmsgYXJvdW5kIHRlc3RpbmcgcHJvYmxlbXMgXG5leHBvcnQgY29uc3QgUXVpbGxQcm94eSA9e1xuICBRdWlsbFxufVxuXG4vL3RvIHdvcmsgYXJvdW5kIHRlc3RpbmcgcHJvYmxlbXMgXG5leHBvcnQgY29uc3QgUmljaHRleHRXcmFwcGVyUHJveHkgPSB7XG4gIFJpY2h0ZXh0V3JhcHBlclxufSJdfQ==