@churchillliving/se-ui-toolkit 6.54.161 → 6.54.162

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.
@@ -1390,7 +1390,11 @@ export class GridService {
1390
1390
  let linkIdRes;
1391
1391
  props?.forEach((prop) => {
1392
1392
  setLinkId = false;
1393
- if (prop.propName && !prop.label && (prop.propValue || prop.propValue === false || prop.propValue === '')) {
1393
+ if (prop.propName && prop.propName === EGridRowPropName.LINKID) {
1394
+ setLinkId = true;
1395
+ linkIdRes = this.setHyperlinks({ records: [row] }, columns, prop.params);
1396
+ }
1397
+ else if (prop.propName && !prop.label && (prop.propValue || prop.propValue === false || prop.propValue === '')) {
1394
1398
  if (prop.field && row) {
1395
1399
  let fieldName = Object.keys(row)?.find((key) => key?.toLowerCase() === prop?.field?.toLowerCase());
1396
1400
  let fieldNameObj = fieldName?.includes('_obj') ? fieldName?.toLowerCase() : fieldName?.toLowerCase() + '_obj';
@@ -1439,10 +1443,6 @@ export class GridService {
1439
1443
  row[propName] = { ...row[propName], reportParam: prop.params };
1440
1444
  }
1441
1445
  }
1442
- else if (prop.propName && prop.propName === EGridRowPropName.LINKID) {
1443
- setLinkId = true;
1444
- linkIdRes = this.setHyperlinks({ records: [row] }, columns, prop.params);
1445
- }
1446
1446
  });
1447
1447
  if (!setLinkId) {
1448
1448
  return row;
@@ -1582,4 +1582,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
1582
1582
  providedIn: 'root',
1583
1583
  }]
1584
1584
  }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i2.HyperlinkService }, { type: i3.DropdownService }, { type: i4.AlertService }, { type: i5.RequestService }, { type: i6.ActivatedRoute }]; } });
1585
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsRUFFZCxVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFJOUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUtqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQzs7Ozs7Ozs7QUFNeEMsTUFBTSxPQUFPLFdBQVc7SUFRdEIsWUFDUyxRQUFrQixFQUNqQixnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsS0FBcUI7UUFMdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFidkIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDbEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUNqQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQ3BCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNqQyxZQUFPLEdBQUcsQ0FBQyxDQUFDO0lBUWpCLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsY0FBYyxDQUFD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QUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFdBQW1CLEVBQUU7UUFDN0IsSUFBSSxTQUFTLEdBQVEsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztpSUExeURVLFdBQVc7cUlBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBJQXV0b0NvbXBsZXRlU2F2ZSwgSURyb3BEb3duUmVxdWVzdCB9IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEVHcmlkU29ydERpcmVjdGlvbixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICBJR2xvYmFsRmlsdGVyLFxuICBJR3JpZEZpbHRlcixcbiAgSUdyaWRTb3J0LFxuICBFR3JpZENvbHVtblR5cGUsXG4gIGFkZENvbHVtbixcbiAgYWRkRmlsdGVyQ29sdW1uLFxuICBhZGRHbG9iYWxGaWx0ZXIsXG4gIElHcmlkQ29sdW1uLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgSUdyaWRQcm9wLFxuICBJR3JpZFByb3BGaWx0ZXIsXG4gIElHcmlkUm93UHJvcCxcbiAgSUdyaWRSZXBvcnRCdG4sXG4gIEVHcmlkUm93QWN0aW9uLFxuICBJRGlhbG9nQ29sdW1uLFxuICBFR3JpZEZvcm1hdHRlcixcbiAgSUdyaWRVcGRhdGUsXG4gIEVHcmlkRXhjZWwsXG4gIEVHcmlkUm93UHJvcE5hbWUsXG59IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tICcuL2Ryb3Bkb3duLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4vaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4vdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IFdvcmtTaGVldCB9IGZyb20gJ3hsc3gnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSB7XG4gIHByaXZhdGUgbnVtYmVyT2ZDYWxsczogbnVtYmVyID0gMDtcbiAgdXNlclNlYXJjaGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHNvZnRDYWNoaW5nRmlsdGVyczogYW55ID0ge307XG4gIGFwcGx5RmlsdGVyRXZlbnQ6IGJvb2xlYW4gPSB0cnVlO1xuICByb3dVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbHVtbkZvY3VzZWRPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBjb3VudGVyID0gMTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICApIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIGFmdGVyIHByb3BlciBtYXBwaW5nXG4gICAqL1xuICBnZXRHcmlkRmlsdGVycyhldmVudDogTGF6eUxvYWRFdmVudCwgY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLm1hcEZpbHRlcnMoZXZlbnQsIGNvbHVtbnMpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVycyk7XG4gIH1cbiAgZ2V0TmV4dElkKCk6IHN0cmluZyB7XG4gICAgXG4gICAgcmV0dXJuIGBzdGF0aWMtJHt0aGlzLmNvdW50ZXIrK31gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBmaWx0ZXJzXG4gICAqIFJlY2VpdmVzIGZpbHRlcnMgYW5kIHJldHVybnMgYXJyYXkgYWZ0ZXIgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICAgKiBhbmQgY3JlYXRpbmcgY29tbWEgc2VwYXJhdGVkIHZhbHVlcyBmb3Igc2FtZSBmaWx0ZXJzXG4gICAqL1xuICBoYW5kbGVNdWx0aUZpbHRlckZpZWxkKGZpbHRlcnM6IElHcmlkRmlsdGVyW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICByZXR1cm4gZmlsdGVyc1xuICAgICAgLm1hcCgoeCwgaSwgYXJyKSA9PlxuICAgICAgICBhcnIuc29tZShcbiAgICAgICAgICAoeSwgaWR4KSA9PlxuICAgICAgICAgICAgeS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0geC5maWVsZD8udG9Mb3dlckNhc2UoKSAmJiBpICE9PSBpZHhcbiAgICAgICAgKVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICB2YWx1ZTogYXJyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICh6KSA9PiB6LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoKGEpID0+IGEudmFsdWUpXG4gICAgICAgICAgICAgICAgLmpvaW4oKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHhcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoKGYsIGksIGFycikgPT4gYXJyLmZpbmRJbmRleCgoeCkgPT4geC52YWx1ZSA9PT0gZi52YWx1ZSkgPT09IGkpO1xuICB9XG5cbiAgLy8gUHJlcGFyZSBiYXNpYyBncmlkIGZpbHRlcnNcbiAgcHJlcGFyZUJhc2ljRmlsdGVycyhcbiAgICBldmVudDogTGF6eUxvYWRFdmVudCxcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdXG4gICk6IElHcmlkRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLm1hcEZpbHRlcnMoZXZlbnQsIGNvbHVtbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBmaWx0ZXJzIGhhcyB2YWx1ZXMgdGhlbiBjb252ZXJ0cyBnbG9iYWwgZmlsdGVyIHZhbHVlcyB0eXBlIGludG8gSUdyaWRGaWx0ZXIuXG4gICAqL1xuICBwcmVwYXJlR2xvYmFsRmlsdGVycyhnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICBjb25zdCBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XG5cbiAgICBnbG9iYWxGaWx0ZXJzPy5mb3JFYWNoKChmaWx0ZXI6IElHbG9iYWxGaWx0ZXIpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgKCh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGZpbHRlci52YWx1ZSkpICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlLmxlbmd0aCkgfHxcbiAgICAgICAgKHR5cGVvZiBmaWx0ZXIudmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSAmJlxuICAgICAgICAgIGZpbHRlci52YWx1ZSkgfHxcbiAgICAgICAgKHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdib29sZWFuJyAmJiBmaWx0ZXIudmFsdWUgIT09IG51bGwpIHx8XG4gICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0VcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSAmJlxuICAgICAgICAgIGZpbHRlci52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ3wnKVxuICAgICAgICApIHsgICAgICAgICBcblxuICAgICAgICAgIC8vIGFkZCBmaWx0ZXIgZm9yIGVuZCBkYXRlXG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlciwgZmFsc2UpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBmaWx0ZXIubWF0Y2hNb2RlID8gZmlsdGVyLm1hdGNoTW9kZSA6ICdsdGUnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyLCBmYWxzZSksXG4gICAgICAgICAgICB0YWJsZUFsaWFzOiBmaWx0ZXIudGFibGVBbGlhcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgICAvLyBhZGQgZmlsdGVyIGZvciBzdGFydCBkYXRlXG4gICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBmaWx0ZXIubWF0Y2hNb2RlID8gZmlsdGVyLm1hdGNoTW9kZSA6ICdndGUnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci50eXBlICE9PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UpIHtcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyKSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTpcbiAgICAgICAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVFxuICAgICAgICAgICAgICAgID8gJ2luJ1xuICAgICAgICAgICAgICAgIDogZmlsdGVyLm1hdGNoTW9kZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICB0YWJsZUFsaWFzOiBmaWx0ZXIudGFibGVBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnbG9iYWxEYXRhO1xuICB9XG5cbiAgc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyOiBhbnksIGlzU3RhcnREYXRlOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UpIHtcbiAgICAgIGlmIChpc1N0YXJ0RGF0ZSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyLmZyb21GaWVsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIudG9GaWVsZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbHRlci5maWVsZDtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZ2xvYmFsIGZpbHRlciB2YWx1ZVxuICBzZXRHbG9iYWxGaWx0ZXJWYWx1ZShcbiAgICBmaWx0ZXI6IElHbG9iYWxGaWx0ZXIsXG4gICAgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHN0cmluZyB8IG51bWJlciB8IERhdGUgfCBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDpcbiAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgYXMgYW55W10pLmpvaW4oJywnKTtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGZpbHRlci52YWx1ZSBhcyBEYXRlKTtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFOlxuICAgICAgICBsZXQgZGF0ZVZhbHVlczogc3RyaW5nW10gPSBmaWx0ZXIudmFsdWVcbiAgICAgICAgICA/IGZpbHRlci52YWx1ZS50b1N0cmluZygpLnNwbGl0KCd8JylcbiAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAoZGF0ZVZhbHVlcyAmJiBkYXRlVmFsdWVzLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSA9IGlzU3RhcnREYXRlXG4gICAgICAgICAgICA/IG5ldyBEYXRlKGRhdGVWYWx1ZXNbMF0pXG4gICAgICAgICAgICA6IG5ldyBEYXRlKGRhdGVWYWx1ZXNbMV0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZGF0ZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YOlxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tWYWxpZGl0eShjb2x1bW5zOiBJR3JpZENvbHVtbltdLCByb3c6IGFueSwgc2luZ2xlQ2VsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGNvbHVtbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGlmIChpdGVtLnZhbGlkYXRpb25zICYmICFpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIGl0ZW0uaXN2YWxpZCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS52YWxpZGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG1pbk1heFZhbGlkRGF0ZSA9IHV0aWxpdGllcy5jYWxlbmRhck1pbk1heFZhbHVlKFxuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSxcbiAgICAgICAgICAgIGlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gaXRlbS52YWxpZGF0aW9ucyAmJiBpdGVtLmhlYWRlcjtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhc2luZ2xlQ2VsbCAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlJFUVVJUkVEICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAhaXRlbS5oaWRkZW4gJiZcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGAke3ZhbGlkfSBpcyByZXF1aXJlZGApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1JTkxFTkdUSCAmJlxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1pbmltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWExFTkdUSCAmJlxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1heGltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWE9QVElPTlMgXG5cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBvcHRpb25zOm51bWJlcj0xO1xuICAgICAgICAgICAgdmFyIHZhbHVlPXJvd1tpdGVtLmZpZWxkXTtcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdmFsdWUubGVuZ3RoIC0gMTsgeCsrKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZVt4XSA9PSAnOycpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vYmx1ZTtyZWQ7Z3JlZW4gbWF4PTNcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAvLyByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgb3B0aW9ucyA8PSBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gbWF4aW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gb3B0aW9uJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24+MT8ncyc6Jyd9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1JTklNVU0gJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIG1pbk1heFZhbGlkRGF0ZSA9PT0gJ21pbmltdW0nXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tpdGVtLmZpZWxkXSA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWluaW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWElNVU0gJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIG1pbk1heFZhbGlkRGF0ZSA9PT0gJ2dyZWF0ZXInXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYE1heGltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tpdGVtLmZpZWxkXSA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBBVFRFUk4gJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0ubWF0Y2goaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubWF0Y2goaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTlVNRVJJQyAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKSQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubWF0Y2goL14oMHxbMS05XVxcZCopJC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYEVudGVyICR7aXRlbS52YWxpZGF0aW9uc1tpXS50eXBlfSBmb3IgJHt2YWxpZH1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBIT05FICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKD89LipbMC05XSlbLSgpMC05XFxzK3hdKyQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHNdKyQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuREVDSU1BTCAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXigwfFstKCkxLTldXFxkKikoXFwuXFxkKyk/JC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXigwfFsxLTldXFxkKikoXFwuXFxkKyk/JC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYEVudGVyICR7aXRlbS52YWxpZGF0aW9uc1tpXS50eXBlfSBmb3IgJHt2YWxpZH1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLkVNQUlMICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAubWF0Y2goL15bYS16QS1aMC05Ll8tXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLDZ9JC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXVxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cblxuICBzZXRFcnJvck1lc3NhZ2UoaXRlbTogSUdyaWRDb2x1bW4sIGVycm9yTWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaXRlbS5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgaXRlbS5pc3ZhbGlkID0gZmFsc2U7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gc2V0IGJhc2ljIGZpbHRlciB2YWx1ZVxuICBzZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlcjogYW55KTogYW55IHtcbiAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShmaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZmlsdGVyID8gMSA6IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIHNvcnQgYXJyYXlcbiAgICovXG4gIGdldEdyaWRTb3J0cyhcbiAgICB7IG11bHRpU29ydE1ldGEgfTogTGF6eUxvYWRFdmVudCxcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdXG4gICk6IElHcmlkU29ydFtdIHtcbiAgICByZXR1cm4gKG11bHRpU29ydE1ldGEgfHwgW10pLm1hcCgoeyBmaWVsZCwgb3JkZXIgfSwgaSk6IGFueSA9PiAoe1xuICAgICAgZmllbGQsXG4gICAgICBkaXJlY3Rpb246IG9yZGVyID4gMCA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0MgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQyxcbiAgICAgIHByaW9yaXR5OiBpICsgMSxcbiAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBIYW5kbGVzIGRlZmF1bHQgYW5kIGxvb2t1cCBmaWx0ZXJzXG4gICAqL1xuICBtYXBGaWx0ZXJzKGV2ZW50OiBhbnksIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBJR3JpZEZpbHRlcltdID0gW107XG4gICAgT2JqZWN0LmVudHJpZXMoZXZlbnQuZmlsdGVycykuZm9yRWFjaCgoW2ZpZWxkLCB2YWx1ZV06IGFueSkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICh2YWx1ZSBhcyBJR3JpZEZpbHRlcltdKS5mb3JFYWNoKFxuICAgICAgICAgICh7IG1hdGNoTW9kZSwgb3BlcmF0b3IsIHZhbHVlOiBmaWx0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlLnZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6ICdlcXVhbHMnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKHZhbHVlLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICh2YWx1ZS52YWx1ZSB8fCBbXSkuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgcGFnZSBudW1iZXJcbiAgICovXG4gIGdldEdyaWRQYWdpbmF0aW9uKGV2ZW50OiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiBpc05hTihldmVudC5maXJzdCAvIGV2ZW50LnJvd3MpID8gMSA6IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyArIDE7XG4gIH1cblxuICAvLyBnZXQgZm9ybWF0dGVkIGRhdGVcbiAgZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGAke3ZhbHVlfSBaYCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gIH1cblxuICAgLy8gY2hhbmdlIHJvdyBrZXkgYW5kIHZhbHVlIHdoZW4gdXNpbmcgc2V0R3JpZFJvd1Byb3BWYWx1ZSBmdW5jdGlvblxuICAgc2V0Um93VmFsdWUocm93RGF0YTogYW55KSB7XG4gICAgT2JqZWN0LmtleXMocm93RGF0YSk/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgY29uc3Qgcm93T2JqID0gcm93Kydfb2JqJztcbiAgICAgIGlmKHJvdyA9PT0gRUdyaWRSb3dBY3Rpb24uREVMRVRFQlROIHx8IHJvdyA9PT0gRUdyaWRSb3dBY3Rpb24uRURJVEJUTil7XG4gICAgICAgIGRlbGV0ZSByb3dEYXRhW3Jvd107XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgcm93RGF0YVtyb3dPYmpdICYmXG4gICAgICAgIHR5cGVvZihyb3dEYXRhW3Jvd09ial0pID09PSAnb2JqZWN0J1xuICAgICAgKSB7XG4gICAgICAgIGRlbGV0ZSByb3dEYXRhW3Jvd09ial07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvd0RhdGE7XG4gIH1cblxuICAvLyBjb252ZXJ0IHJvdyBhY3Rpb25zIG9iamVjdCBpbnRvIHNpbXBsZSB2YWx1ZVxuICBzZXRHcmlkUm93RGF0YShyb3dEYXRhKXtcbiAgICBpZihBcnJheS5pc0FycmF5KHJvd0RhdGEpKXtcbiAgICAgIHJvd0RhdGEuZm9yRWFjaCgocm93KT0+e1xuICAgICAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dEYXRhID0gdGhpcy5zZXRSb3dWYWx1ZShyb3dEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd0RhdGE7XG4gIH1cblxuICAvLyBnZXQgYWxsb3dTYXZlIHRydWUgcm93IGxpc3RcbiAgZ2V0QWxsb3dTYXZlUm93bGlzdChyb3dzRGF0YTogYW55W10gPSBbXSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIHJvd3NEYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJvd3NEYXRhKTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpPT57XG4gICAgICAgIHJvdyA9IHRoaXMucmVtb3ZlUm93T2JqKHJvdywgZmllbGQsIGNvbHVtbnMpO1xuICAgICAgfSlcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZSkge1xuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBsZXQgb2JqID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgICBpZiAob2JqPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvYmouZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5pbmNsdWRlcygnX29iaicpICYmIHR5cGVvZiByb3dbeF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJvd1t4XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIHJvd1tmaWVsZF07XG4gICAgICAgICAgcm93ID0gdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikge1xuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSByb3dbZmllbGRdXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5OVU1FUklDKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJzEnIDogJzAnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQk9PTEVBTikge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICdoaDptbSBhJyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSkge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmICFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHJvd1tmaWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJvd3NEYXRhO1xuICB9XG5cbiAgLy8gZ2V0IGFsbG93U2F2ZSB0cnVlIHx8IHVuZGVmaW5lIHJvd1xuICBnZXRBbGxvd1NhdmVSb3cocm93SW5mbzoge30gPSB7fSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIGxldCByb3cgPSB7IC4uLnJvd0luZm8gfTtcbiAgICByb3cgPSB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIocm93KTtcbiAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3csIGZpZWxkLCBjb2x1bW5zKTtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dTYXZlID09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpXG4gICAgICAgIGtleXMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgIGlmICh4LmluY2x1ZGVzKCdfb2JqJykgJiYgdHlwZW9mIHJvd1t4XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByb3dbeF07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBrZXkgPSBrZXlzLmZpbmQoKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikge1xuICAgICAgICBsZXQgdmFsdWUgPSByb3dbZmllbGRdXG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5OVU1FUklDKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICcxJyA6ICcwJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5CT09MRUFOKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGZvcm1hdFxuICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSkge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHJvd1tmaWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICAvLyByZW1vdmUgb2JqLCBkYXRhIGFuZCBzZWNvbmR0eXBlIGRhdGEgZnJvbSByb3dcbiAgcmVtb3ZlUm93T2JqKHJvdywgZmllbGQsIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pe1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBpZihrZXlzPy5sZW5ndGggPiAwKXtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBpZihrZXkgPT09IGZpZWxkICsgJy1kYXRhJyB8fCBrZXkgPT09IGZpZWxkICsgJ19zZWNvbmRUeXBlJyB8fCBrZXkgPT09IGZpZWxkICsgJ19vYmonKXtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJvdyA9IHRoaXMucmVtb3ZlRXh0cmFOZXdSb3dPYmoocm93LCBjb2x1bW5zKVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICByZW1vdmVFeHRyYU5ld1Jvd09iaihyb3csIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pe1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmKGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYga2V5cz8ubGVuZ3RoID4gMCl7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgY29uc3QgbWF0Y2hLZXkgPSBjb2x1bW5zLnNvbWUoKGNvbHVtbik9PiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSlcbiAgICAgICAgaWYoIW1hdGNoS2V5KXtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQ29sdW1uKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoY29sdW1uSW5mby50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcbiAgICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgICA6ICdsYWJlbCc7XG4gICAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgICAgOiAndmFsdWUnO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uSW5mby50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICBpZiAoIWNvbHVtbkluZm8uZmlsdGVyaW5nICYmICFjb2x1bW5JbmZvLmZpbHRlcikge1xuICAgICAgICBjb2x1bW5JbmZvLmZpbHRlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbkluZm8ucGFyYW1zICYmICFjb2x1bW5JbmZvLmRhdGEpIHtcbiAgICAgICAgY29sdW1uSW5mby5kYXRhID0gY29sdW1uSW5mby5wYXJhbXM7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XG4gICAgICBhbGxvd1RvZ2dsZTogY29sdW1uSW5mby5hbGxvd1RvZ2dsZSB8fCBmYWxzZSxcbiAgICAgIGFsbG93U2VhcmNoOiBjb2x1bW5JbmZvLmFsbG93U2VhcmNoLFxuICAgICAgYWxsb3dBdXRvQ29tcGxldGVTYXZlOiBjb2x1bW5JbmZvLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSxcbiAgICAgIHVuaXF1ZUtleTogY29sdW1uSW5mby51bmlxdWVLZXksXG4gICAgICBmaWVsZDogY29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogY29sdW1uSW5mby5oZWFkZXIsXG4gICAgICBzdHlsZTogY29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHR5cGU6IGNvbHVtbkluZm8udHlwZSxcbiAgICAgIGZvcm1hdDogY29sdW1uSW5mby5mb3JtYXQsXG4gICAgICBkYXRhOiBjb2x1bW5JbmZvLmRhdGEsXG4gICAgICBmaWx0ZXJWYWx1ZTpjb2x1bW5JbmZvLmZpbHRlclZhbHVlLFxuICAgICAgZmlsdGVyaW5nOiBjb2x1bW5JbmZvLmZpbHRlcmluZyxcbiAgICAgIGhpZGRlbjogY29sdW1uSW5mby5oaWRkZW4sXG4gICAgICBzaG93OiBjb2x1bW5JbmZvLnNob3csXG4gICAgICBzb3J0aW5nOiBjb2x1bW5JbmZvLnNvcnRpbmcsXG4gICAgICBmaWx0ZXI6IGNvbHVtbkluZm8uZmlsdGVyLFxuICAgICAgaHlwZXJsaW5rOiBjb2x1bW5JbmZvLmh5cGVybGluayxcbiAgICAgIHRhYmxlQWxpYXM6IGNvbHVtbkluZm8udGFibGVBbGlhcyxcbiAgICAgIGxpbmtJZDogY29sdW1uSW5mby5saW5rSWQsXG4gICAgICBtaW51dGVzSW50ZXJ2YWw6IGNvbHVtbkluZm8ubWludXRlc0ludGVydmFsLFxuICAgICAgcGFyYW1zOiBjb2x1bW5JbmZvLnBhcmFtcyxcbiAgICAgIHNob3dPcHRpb246IGNvbHVtbkluZm8uc2hvd09wdGlvbixcbiAgICAgIGRpc3BsYXlUZXh0OiBjb2x1bW5JbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgdGFyZ2V0OiBjb2x1bW5JbmZvLnRhcmdldCxcbiAgICAgIGRpc2FibGVkOiBjb2x1bW5JbmZvLmRpc2FibGVkLFxuICAgICAgYWxsb3dTYXZlOiBjb2x1bW5JbmZvLmFsbG93U2F2ZSxcbiAgICAgIGFsbG93RWRpdDogY29sdW1uSW5mby5hbGxvd0VkaXQsXG4gICAgICBlZGl0YWJsZTogY29sdW1uSW5mby5lZGl0YWJsZSxcbiAgICAgIGVkaXRMaW5rOiBjb2x1bW5JbmZvLmVkaXRMaW5rLFxuICAgICAgc2F2ZUFzU3RyaW5nOiBjb2x1bW5JbmZvLnNhdmVBc1N0cmluZyxcbiAgICAgIGNvbXBvbmVudDogY29sdW1uSW5mby5jb21wb25lbnQsXG4gICAgICBvbkNsaWNrOiBjb2x1bW5JbmZvLm9uQ2xpY2ssXG4gICAgICBvblJldHVybjogY29sdW1uSW5mby5vblJldHVybixcbiAgICAgIG9uRm9jdXNPdXQ6IGNvbHVtbkluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uQ2hhbmdlOiBjb2x1bW5JbmZvLm9uQ2hhbmdlLFxuICAgICAgYWdncmVnYXRlOiBjb2x1bW5JbmZvLmFnZ3JlZ2F0ZSxcbiAgICAgIGZvcm1hdHRlcjogY29sdW1uSW5mby5mb3JtYXR0ZXIsXG4gICAgICBwZXJtaXNzaW9uczogY29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICAgIG9wdGlvbkxhYmVsOiBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9uVmFsdWU6IGNvbHVtbkluZm8ub3B0aW9uVmFsdWUsXG4gICAgICBkcm9wRG93blByb3A6IGNvbHVtbkluZm8uZHJvcERvd25Qcm9wLFxuICAgICAgaG92ZXJEYXRhOiBjb2x1bW5JbmZvLmhvdmVyRGF0YSxcbiAgICAgIHNob3dUaW1lOiBjb2x1bW5JbmZvLnNob3dUaW1lLFxuICAgICAgdGltZU9ubHk6IGNvbHVtbkluZm8udGltZU9ubHksXG4gICAgICBsb29rdXBDb250cm9sOiBjb2x1bW5JbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBkaXNwbGF5RmllbGQ6IGNvbHVtbkluZm8uZGlzcGxheUZpZWxkLFxuICAgICAgaWNvbjogY29sdW1uSW5mby5pY29uLFxuICAgICAgY29sb3I6IGNvbHVtbkluZm8uY29sb3IsXG4gICAgICBpZDogY29sdW1uSW5mby5pZCxcbiAgICAgIHZhbHVlOiBjb2x1bW5JbmZvLnZhbHVlLFxuICAgICAgdmFsaWRhdGlvbnM6IGNvbHVtbkluZm8udmFsaWRhdGlvbnMsXG4gICAgICB0ZXh0VHlwZTpjb2x1bW5JbmZvLnRleHRUeXBlLFxuICAgICAgY29sdW1uV2lkdGg6IGNvbHVtbkluZm8uY29sdW1uV2lkdGhcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIEFkZGluZyBSZXBvcnQgQnV0dG9uIEZ1bmN0aW9uIGZvciBHcmlkXG4gIGFkZFJlcG9ydEJ0bihjb2x1bW5JbmZvOiBJR3JpZFJlcG9ydEJ0bikge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5SRVBPUlQ7XG4gICAgcmV0dXJuIGNvbHVtbkluZm87XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGlucHV0IGdyaWQgY29sdW1uXG4gIGFkZElucHV0Q29sdW1uKFxuICAgIGZpbHRlckNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGZpbHRlckNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oZmlsdGVyQ29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oZmlsdGVyQ29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIG51bWVyaWMgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGROdW1lcmljQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBjb2x1bW5JbmZvPy5maWx0ZXI/LnR5cGUgPyBjb2x1bW5JbmZvLmZpbHRlci50eXBlIDogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVCxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgY2FsZW5kYXIgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDYWxlbmRhckNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBjb2x1bW5JbmZvPy5maWx0ZXI/LnR5cGUgPyBjb2x1bW5JbmZvLmZpbHRlci50eXBlIDogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29sdW1uSW5mby50eXBlID0gY29sdW1uSW5mby50eXBlID8gY29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgc2V0Q29uZmlnRGF0YShjb25maWc6IGFueSkge1xuICAgIGxldCBjb25maWdEYXRhOiBhbnkgPSB7fTtcbiAgICBpZiAoY29uZmlnPy5kYXRhICYmIE9iamVjdC5rZXlzKGNvbmZpZz8uZGF0YSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmZpZ0RhdGEgPSBjb25maWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbTogYW55KSA9PiB7XG4gICAgICAgIGlmIChwYXJhbSAmJiBPYmplY3Qua2V5cyhwYXJhbSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25maWdEYXRhWydkYXRhJ10gPSBwYXJhbTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ0RhdGE7XG4gIH1cbiAgICAgXG5cbiAgLy8gYWRkIHNpbXBsZSBib29sZWFuIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQm9vbGVhbkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICAoY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pLFxuICAgICAgICAoY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YLFxuICAgICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuIC8vIGFkZCBMb29rVXAgY29sdW1uIGZvciBHcmlkXG4gYWRkTG9va1VwQ29sdW1uKGNvbHVtbkluZm86IElEaWFsb2dDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xuICBpZiAoc2hvd0ZpbHRlcikge1xuICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVDtcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xufVxuXG4vLyBhZGQgZGlhbG9nIGNvbHVtbiBmb3IgR3JpZFxuIGFkZERpYWxvZ0NvbHVtbihjb2x1bW5JbmZvOiBJRGlhbG9nQ29sdW1uLCBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IElHcmlkQ29sdW1uIHtcbiAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRztcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuIH1cblxuICAvLyBhZGQgQnV0dG9uIGZvciBncmlkIGNvbHVtblxuICBhZGRCdXR0b25Db2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5BRERfQlVUVE9OO1xuICAgIGlmICghY29sdW1uSW5mby5maWVsZCkge1xuICAgICAgY29sdW1uSW5mby5maWVsZCA9IGNvbHVtbkluZm8udmFsdWUgPyBjb2x1bW5JbmZvLnZhbHVlIDogY29sdW1uSW5mby5pY29uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cbiAgXG4gIC8vIGFkZCBBdXRvQ29tcGxldGUgZm9yIGdyaWQgY29sdW1uXG4gIGFkZEF1dG9Db21wbGV0ZShjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBTZWFyY2ggQXV0b0NvbXBsZXRlIERhdGEgZm9yIEdyaWRcbiAgZ2V0QXV0b0NvbXBsZXRlRGF0YShcbiAgICBjb2x1bW4/OiBhbnksXG4gICAgdW5pcXVlS2V5Pzogc3RyaW5nLFxuICAgIGZpbHRlcnM/OiBhbnlbXSxcbiAgICBzZWFyY2g6IHN0cmluZyA9ICcnXG4gICk6IGFueSB7XG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZVxuICAgICAgLmdldDxhbnlbXSwgYW55PignL0RhdGEvRmV0Y2gnLCB7IHVuaXF1ZUtleTogdW5pcXVlS2V5LCBmaWx0ZXJzIH0pXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbHVtbi5kYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpO1xuICAgICAgfSwoeyBlcnJvciB9KSA9PiB7XG4gICAgICAgIGxldCByZXNwb25zZTphbnk9IHt9O1xuICAgICAgICByZXNwb25zZVsncmVjb3JkcyddID0gW107XG4gICAgICAgIGNvbHVtbi5kYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpO1xuICAgICAgfSk7XG4gIH1cbiBhc3luYyBhZGRBdXRvQ29tcGxldGVWYWx1ZSh1bmlxdWVLZXk6IElBdXRvQ29tcGxldGVTYXZlLCB2YWx1ZTphbnksIGNvbHVtbjphbnksIHJvdzphbnkpIHtcbiAgbGV0IG5ld1ZhbHVlID0ge31cblxuICBmb3IodmFyIGkgPTA7aTx1bmlxdWVLZXkudmFsdWVzLmxlbmd0aDsgaSsrKXtcbiAgICBpZih1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKT09Y29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpfHx1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKT09Y29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSl7XG4gICAgICBuZXdWYWx1ZVt1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWVdPXZhbHVlO1xuICAgIFxuICAgIH1lbHNle1xuICAgICAgbmV3VmFsdWVbdW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lXT10aGlzLmdldFNvZnRDb2RpbmdWYWx1ZSh1bmlxdWVLZXkudmFsdWVzW2ldLnZhbHVlLCByb3cpXG4gICAgfSBcbiAgfVxuXG5cbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlXG4gICAgICAuZ2V0PGFueVtdLCBhbnk+KCcvRGF0YS9TYXZlJywgeyB1bmlxdWVLZXk6dW5pcXVlS2V5Lm5hbWUsICB2YWx1ZXM6IG5ld1ZhbHVlIH0pXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICh7ZXJyb3J9KT0+e1xuICAgICAgICAgIHJldHVybiBlcnJvclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnc3VjY2Vzcyc7XG4gICAgICB9KTtcbiAgfVxuICBnZXRTb2Z0Q29kaW5nVmFsdWUodmFsdWUsIHJvdyl7XG4gICAgbGV0IHJldHVyblZhbHVlO1xuICAgIGlmKHZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSYmdmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygnfScpKXtcbiAgICAgIHZhbHVlPXZhbHVlLnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKTtcbiAgICAgIGxldCByb3dLZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGxldCBrZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICByZXR1cm5WYWx1ZT1yb3dba2V5XTtcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVyblZhbHVlPXZhbHVlXG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgZHJvcGRvd24gZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGREcm9wZG93bkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgIDogJ2xhYmVsJztcbiAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA6ICd2YWx1ZSc7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV04sXG4gICAgICAgIGRhdGE6XG4gICAgICAgICAgIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhZHJvcERvd25Qcm9wICYmIGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgIDogY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gZHJvcERvd25Qcm9wO1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgY29sdW1uSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgICB9XG4gIH1cbiAgLy8gYWRkIE11bHRpU2VsZWN0RHJvcERvd24gZ3JpZCBjb2x1bW5cbiAgYWRkTXVsdGlTZWxlY3REcm9wRG93bkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgbXVsdGlTZWxlY3RQcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgOiAnbGFiZWwnO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgIDogJ3ZhbHVlJztcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1Q7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1QsXG4gICAgICAgIGRhdGE6XG4gICAgICAgICAgIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhbXVsdGlTZWxlY3RQcm9wICYmIGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgIDogY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChtdWx0aVNlbGVjdFByb3ApIHtcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gbXVsdGlTZWxlY3RQcm9wO1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IG11bHRpU2VsZWN0UHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gbXVsdGlTZWxlY3RQcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBtdWx0aVNlbGVjdFByb3AuZmlsdGVycztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgY29sdW1uSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgICB9XG4gIH1cblxuICBzaG93RmlsdGVySWNvbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uSW5mby5maWx0ZXIgJiYgY29sdW1uSW5mby5maWx0ZXIuc2hvd0ZpbHRlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZXREcm9wZG93bkRhdGEoXG4gICAgY29sdW1uOiBJR3JpZENvbHVtbixcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZVByb3A6IHN0cmluZyxcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcbiAgICBmaWx0ZXJzOiBhbnlbXSxcbiAgICByb3c/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICk6IFByb21pc2U8YW55PiB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25TZXJ2aWNlXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMpXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX2RhdGEnXSA9IHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4uZGF0YSA9IHJlcztcbiAgICAgICAgICBpZiAoY29sdW1uLmZpbHRlciAmJiAoY29sdW1uLmZpbHRlci50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ211bHRpLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICBjb2x1bW4uZmlsdGVyLmRhdGEgPSByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW4pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCBjb2x1bW4gd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkRmlsdGVyQ29sdW1uKGZpbHRlckNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb25zdCBjb2x1bW46IGFueSA9IHtcbiAgICAgIGZpZWxkOiBmaWx0ZXJDb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBmaWx0ZXJDb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIGZpbHRlcjogeyB0eXBlOiBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlciB9LFxuICAgICAgZmlsdGVyaW5nOiBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlcmluZyxcbiAgICAgIGhpZGRlbjogZmlsdGVyQ29sdW1uSW5mby5oaWRkZW4sXG4gICAgICBzdHlsZTogZmlsdGVyQ29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHRhYmxlQWxpYXM6IGZpbHRlckNvbHVtbkluZm8udGFibGVBbGlhcyxcbiAgICAgIHBlcm1pc3Npb25zOiBmaWx0ZXJDb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgIH07XG5cbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGRhdGUgZ3JpZCBjb2x1bW4gd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkRGF0ZUNvbHVtbihkYXRlQ29sdW1uSW5mbzogYWRkRmlsdGVyQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XG4gICAgICBmaWVsZDogZGF0ZUNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGRhdGVDb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIHR5cGU6IGRhdGVDb2x1bW5JbmZvLnR5cGUgPyBkYXRlQ29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEUsXG4gICAgICBmaWx0ZXJpbmc6IGRhdGVDb2x1bW5JbmZvLmZpbHRlcmluZyxcbiAgICAgIGZpbHRlcjogeyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVIgfSxcbiAgICAgIGZvcm1hdDogZGF0ZUNvbHVtbkluZm8uZm9ybWF0LFxuICAgICAgc3R5bGU6IGRhdGVDb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdGFibGVBbGlhczogZGF0ZUNvbHVtbkluZm8udGFibGVBbGlhcyxcbiAgICAgIGRpc2FibGVkOiBkYXRlQ29sdW1uSW5mby5kaXNhYmxlZCxcbiAgICAgIGFsbG93U2F2ZTogZGF0ZUNvbHVtbkluZm8uYWxsb3dTYXZlLFxuICAgICAgcGVybWlzc2lvbnM6IGRhdGVDb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgICAgY29tcG9uZW50OiBkYXRlQ29sdW1uSW5mby5jb21wb25lbnQsXG4gICAgICBzaG93VGltZTogZGF0ZUNvbHVtbkluZm8uc2hvd1RpbWUsXG4gICAgICB0aW1lT25seTogZGF0ZUNvbHVtbkluZm8udGltZU9ubHksXG4gICAgICBkYXRhOiBkYXRlQ29sdW1uSW5mby5kYXRhLFxuICAgICAgaGlkZGVuOiBkYXRlQ29sdW1uSW5mby5oaWRkZW4sXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgc2V0TG9va1VwRmlsdGVyKGNvbHVtbjogYW55LCBkaWFsb2dTZXJ2aWNlOiBhbnksIGdsb2JhbEZpbHRlckxvb2t1cDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGNvbHVtbi5sb29rdXBDb250cm9sKSB7XG4gICAgICBsZXQgZGF0YVZhbHVlOiBhbnlbXSA9IFtdO1xuICAgICAgbGV0IGRhdGFLZXk6IGFueVtdID0gW107XG4gICAgICBsZXQgZGF0YSA9IGNvbHVtbi5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhO1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgaWYgKGRhdGEgJiYga2V5cz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhW2tleV0udG9TdHJpbmcoKS5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgICBkYXRhVmFsdWUudW5zaGlmdChkYXRhW2tleV0pO1xuICAgICAgICAgICAgZGF0YUtleS51bnNoaWZ0KGtleSk7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVmID0gZGlhbG9nU2VydmljZS5vcGVuKFxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5jb21wb25lbnQsXG4gICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICk7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSBkaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQocmVmKTtcbiAgICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnQgPSBkaWFsb2dSZWY/Lmluc3RhbmNlIGFzIER5bmFtaWNEaWFsb2dDb21wb25lbnQ7XG4gICAgICBjb25zdCBhcmlhTGFiZWxsZWRCeSA9IGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcbiAgICAgIGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkgPSAoKSA9PiBhcmlhTGFiZWxsZWRCeTtcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkYXRhS2V5Py5sZW5ndGggPiAwICYmIGRhdGFWYWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF0YUtleS5mb3JFYWNoKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGRhdGFWYWx1ZS5mb3JFYWNoKCh2YWx1ZSwgdmFsdWVJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXlJbmRleCA9PT0gdmFsdWVJbmRleCkge1xuICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX2ZpbHRlcicpPy5mb2N1cygpO1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgIGNvbHVtbj8ubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgcmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGdsb2JhbEZpbHRlckxvb2t1cCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlVHdvID0gdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29sdW1uLnZhbHVlID0gdmFsdWU/LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgIDogcmVzW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICBjb25zdCBnbG9iYWxGaWx0ZXJMb29rdXBJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZCk7XG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlckxvb2t1cElucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB2YWx1ZT8udmFsdWVcbiAgICAgICAgICAgICAgICA/IHZhbHVlLnZhbHVlXG4gICAgICAgICAgICAgICAgOiByZXNbZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoeyBlcnJvciB9OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IEh5cGVybGluayBmaWVsZCBhcyBhIHBhcmFtIFZhbHVlXG4gIHNldEZpZWxkQXNMaW5rUGFyYW0oY29sdW1uczogYW55LCBmaWVsZDogc3RyaW5nLCByZXNwb25zZTogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY29sdW1ucyAmJlxuICAgICAgY29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICBmaWVsZCAmJlxuICAgICAgcmVzcG9uc2UucmVjb3JkcyAmJlxuICAgICAgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3JkcykuZm9yRWFjaCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeDogYW55KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4gICAgICAgIGlmIChvYmogJiYgb2JqLnBhcmFtcykge1xuICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmoucGFyYW1zKTtcbiAgICAgICAgICBrZXlzLmZvckVhY2goKGtleTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAob2JqLnBhcmFtc1trZXldICYmIG9iai5wYXJhbXNba2V5XS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gb2JqLnBhcmFtc1trZXldXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBvYmoucGFyYW1zW2tleV0gPSByZXNbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYXNBbnlMaW5rQ29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucyAmJlxuICAgICAgY29sdW1ucy5zb21lKFxuICAgICAgICAoeCkgPT5cbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLklGUkFNRSB8fFxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8XG4gICAgICAgICAgKHgubGlua0lkICYmIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzZXRIeXBlcmxpbmtzKGZldGNoUmVzcG9uc2U6IGFueSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSwgbGlua1BhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIGxldCByZWNvcmRzOiBhbnkgPSBbXTtcbiAgICBsZXQgZGF0YSA9XG4gICAgICBmZXRjaFJlc3BvbnNlICYmIGZldGNoUmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXREYXRhRmllbGRzKGZldGNoUmVzcG9uc2UucmVjb3JkcylcbiAgICAgICAgOiBbXTtcbiAgICBsZXQgbmV3Um93OiBhbnk7XG5cbiAgICBpZihkYXRhPy5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiB0aGlzLmh5cGVybGlua1NlcnZpY2VcbiAgICAgIC5hZGRIeXBlcmxpbmtzKGNvbHVtbnMsIGZldGNoUmVzcG9uc2U/LnJlY29yZHMpXG4gICAgICAudGhlbigobGlua1Jlc3BvbnNlczogYW55KSA9PiB7XG4gICAgICAgIGRhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldExpbmtJZCA9IGZldGNoUmVzcG9uc2U/LnJlY29yZHNbMF1bY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubGlua0lkO1xuICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICAgICAgICAgIGNvbC5maWVsZCA9IGNvbC5maWVsZCA/IGNvbC5maWVsZCA6IGNvbC5oZWFkZXI7XG4gICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXSA9IHsgLi4uY29sIH07XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAmJiByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldID8gcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICAgIDogY29sLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgICBsZXQgY29sdW1uRGF0YSA9IHsgLi4uY29sPy5kYXRhIH07XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5EYXRhICYmIGNvbHVtbkRhdGEuZGF0YSkge1xuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlhbG9nRGF0YSA9IHV0aWxpdGllcy5maW5kS2V5c0FuZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgY29sdW1uRGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgcm93XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlua1Jlc3BvbnNlcykgJiYgbGlua1Jlc3BvbnNlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsaW5rUmVzcG9uc2VzLmZvckVhY2goKGxpbmtSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLklGUkFNRSB8fFxuICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCkgJiZcbiAgICAgICAgICAgICAgICAgIGNvbC5saW5rSWQgJiZcbiAgICAgICAgICAgICAgICAgIChjb2wubGlua0lkID09PSBsaW5rUmVzcG9uc2UubGlua0lkIHx8XG4gICAgICAgICAgICAgICAgICAgIHNldExpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtS2V5czogc3RyaW5nW10gPSBsaW5rUGFyYW1zICYmIE9iamVjdC5rZXlzKGxpbmtQYXJhbXMpPy5sZW5ndGggPyBPYmplY3Qua2V5cyhsaW5rUGFyYW1zKSA6IGNvbC5wYXJhbXMgPyBPYmplY3Qua2V5cyhjb2wucGFyYW1zKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGluazogYW55ID0gdXRpbGl0aWVzLnNldEh5cGVybGluayhcbiAgICAgICAgICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBsaW5rUmVzcG9uc2UudXJsLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbC5wYXJhbXNcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5oeXBlcmxpbmsgPSBsaW5rO1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVjb3Jkcy5wdXNoKG5ld1Jvdyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVjb3JkcztcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgIH0pXG4gICAgfVxuICAgIFxuICB9XG5cbiAgLy9zZXQgcm93cyB0byByZXNwb25zZS5yZWNvcmRzXG4gIGFzeW5jIHNldFJvd0RhdGEoY29sdW1uczogSUdyaWRDb2x1bW5bXSwgcmVzcG9uc2U6IGFueSkge1xuICAgIGlmKHJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMCl7XG4gICAgICBpZiAodGhpcy5oYXNBbnlMaW5rQ29sdW1uKGNvbHVtbnMpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldEh5cGVybGlua3MocmVzcG9uc2UsIGNvbHVtbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlY29yZHM7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIFtdXG4gIH1cbiAgIFxuXG4gIC8vIGFkZCBncmlkIGdsb2JhbCBmaWx0ZXIgd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRVcGRhdGUgPSB7XG4gICAgICBmaWVsZDogZ3JpZFVwZGF0ZUluZm8uZmllbGQsXG4gICAgICBkaXNwbGF5VGV4dDogZ3JpZFVwZGF0ZUluZm8uZGlzcGxheVRleHQsXG4gICAgICB0eXBlOiBncmlkVXBkYXRlSW5mby50eXBlLFxuICAgICAgZGF0YTogZ3JpZFVwZGF0ZUluZm8uZGF0YSxcbiAgICAgIHZhbHVlOiBncmlkVXBkYXRlSW5mby52YWx1ZSxcbiAgICAgIHZhbHVlVHdvOiBncmlkVXBkYXRlSW5mby52YWx1ZVR3byxcbiAgICAgIG1hdGNoTW9kZTogZ3JpZFVwZGF0ZUluZm8ubWF0Y2hNb2RlLFxuICAgICAgb3BlcmF0b3I6IGdyaWRVcGRhdGVJbmZvLm9wZXJhdG9yLFxuICAgICAgdGFibGVBbGlhczogZ3JpZFVwZGF0ZUluZm8udGFibGVBbGlhcyxcbiAgICAgIG9wdGlvbkxhYmVsOiBncmlkVXBkYXRlSW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBncmlkVXBkYXRlSW5mby5vcHRpb25WYWx1ZSxcbiAgICAgIG9uRm9jdXNPdXQ6IGdyaWRVcGRhdGVJbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvblJldHVybjogZ3JpZFVwZGF0ZUluZm8ub25SZXR1cm4sXG4gICAgICBmaWx0ZXJpbmc6IGdyaWRVcGRhdGVJbmZvLmZpbHRlcmluZyxcbiAgICAgIGNvbHVtbjogZ3JpZFVwZGF0ZUluZm8uY29sdW1uLFxuICAgICAgZGF5UmFuZ2U6IGdyaWRVcGRhdGVJbmZvLmRheVJhbmdlLFxuICAgICAgZnJvbUZpZWxkOiBncmlkVXBkYXRlSW5mby5mcm9tRmllbGQsXG4gICAgICB0b0ZpZWxkOiBncmlkVXBkYXRlSW5mby50b0ZpZWxkLFxuICAgICAgbG9va3VwQ29udHJvbDogZ3JpZFVwZGF0ZUluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGFsbG93U2VhcmNoOiBncmlkVXBkYXRlSW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGRpc2FibGVkOiBncmlkVXBkYXRlSW5mby5kaXNhYmxlZCxcbiAgICAgIGhpZGRlbjogZ3JpZFVwZGF0ZUluZm8uaGlkZGVuLFxuICAgICAgbGFiZWxUZXh0OiBncmlkVXBkYXRlSW5mby5sYWJlbFRleHQsXG4gICAgICBwcmVmaXg6IGdyaWRVcGRhdGVJbmZvLnByZWZpeCxcbiAgICAgIGNvbG9yOiBncmlkVXBkYXRlSW5mby5jb2xvcixcbiAgICAgIGZvcm1hdDogZ3JpZFVwZGF0ZUluZm8uZm9ybWF0LFxuICAgICAgaW50ZXJmYWNlVHlwZTogJ2J1bGtVcGRhdGUnXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGlucHV0IGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVJbnB1dChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgZHJvcGRvd24gZmllbGRcbiAgYWRkR3JpZFVwZGF0ZURyb3Bkb3duKFxuICAgIGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSxcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IGFueSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTjtcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gZHJvcERvd25Qcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBncmlkVXBkYXRlSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzLCBcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGRyb3Bkb3duIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVCb29sZWFuKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBudW1lcmljIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVOdW1lcmljKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgY2FsZW5kYXIgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUNhbGVuZGFyKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vYWRkIGdyaWQgdXBkYXRlIGxvb2t1cCBmaWVsZFxuICBhZGRHcmlkVXBkYXRlTG9va3VwKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSl7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVRcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pXG4gIH1cbiAgXG4gIC8vIGFkZCBncmlkIGdsb2JhbCBmaWx0ZXIgd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGNvbnN0IGNvbHVtbjogYWRkR2xvYmFsRmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGdsb2JhbEZpbHRlckluZm8uZmllbGQsXG4gICAgICBkaXNwbGF5VGV4dDogZ2xvYmFsRmlsdGVySW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIGRpc3BsYXlTdHlsZTpnbG9iYWxGaWx0ZXJJbmZvLmRpc3BsYXlTdHlsZSxcbiAgICAgIHZhbGlkYXRpb25zOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbGlkYXRpb25zLFxuICAgICAgdHlwZTogZ2xvYmFsRmlsdGVySW5mby50eXBlLFxuICAgICAgZGF0YTogZ2xvYmFsRmlsdGVySW5mby5kYXRhLFxuICAgICAgdmFsdWU6IGdsb2JhbEZpbHRlckluZm8udmFsdWUsXG4gICAgICB2YWx1ZVR3bzogZ2xvYmFsRmlsdGVySW5mby52YWx1ZVR3byxcbiAgICAgIG1hdGNoTW9kZTogZ2xvYmFsRmlsdGVySW5mby5tYXRjaE1vZGUsXG4gICAgICBvcGVyYXRvcjogZ2xvYmFsRmlsdGVySW5mby5vcGVyYXRvcixcbiAgICAgIHRhYmxlQWxpYXM6IGdsb2JhbEZpbHRlckluZm8udGFibGVBbGlhcyxcbiAgICAgIG9wdGlvbkxhYmVsOiBnbG9iYWxGaWx0ZXJJbmZvLm9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9uVmFsdWU6IGdsb2JhbEZpbHRlckluZm8ub3B0aW9uVmFsdWUsXG4gICAgICAgb25DbGljazpnbG9iYWxGaWx0ZXJJbmZvLm9uQ2xpY2ssXG4gICAgICBvbkZvY3VzT3V0OiBnbG9iYWxGaWx0ZXJJbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvblJldHVybjogZ2xvYmFsRmlsdGVySW5mby5vblJldHVybixcbiAgICAgIGZpbHRlcmluZzogZ2xvYmFsRmlsdGVySW5mby5maWx0ZXJpbmcsXG4gICAgICBjb2x1bW46IGdsb2JhbEZpbHRlckluZm8uY29sdW1uLFxuICAgICAgZGF5UmFuZ2U6IGdsb2JhbEZpbHRlckluZm8uZGF5UmFuZ2UsXG4gICAgICBmcm9tRmllbGQ6IGdsb2JhbEZpbHRlckluZm8uZnJvbUZpZWxkLFxuICAgICAgdG9GaWVsZDogZ2xvYmFsRmlsdGVySW5mby50b0ZpZWxkLFxuICAgICAgbG9va3VwQ29udHJvbDogZ2xvYmFsRmlsdGVySW5mby5sb29rdXBDb250cm9sLFxuICAgICAgYWxsb3dTZWFyY2g6IGdsb2JhbEZpbHRlckluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBkaXNhYmxlZDogZ2xvYmFsRmlsdGVySW5mby5kaXNhYmxlZCxcbiAgICAgIGhpZGRlbjogZ2xvYmFsRmlsdGVySW5mby5oaWRkZW4sXG4gICAgICBsYWJlbFRleHQ6IGdsb2JhbEZpbHRlckluZm8ubGFiZWxUZXh0LFxuICAgICAgcHJlZml4OiBnbG9iYWxGaWx0ZXJJbmZvLnByZWZpeCxcbiAgICAgIGNvbG9yOiBnbG9iYWxGaWx0ZXJJbmZvLmNvbG9yLFxuICAgICAgZm9ybWF0OiBnbG9iYWxGaWx0ZXJJbmZvLmZvcm1hdCxcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGlucHV0IGZpbHRlclxuICBhZGRHbG9iYWxJbnB1dEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBkcm9wZG93biBmaWx0ZXJcbiAgYWRkR2xvYmFsRHJvcGRvd25GaWx0ZXIoXG4gICAgZ2xvYmFsRmlsdGVySW5mbzogSUdsb2JhbEZpbHRlcixcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IGFueSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOO1xuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBsZXQgc29ydHMgPSBkcm9wRG93blByb3Auc29ydHM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGdsb2JhbEZpbHRlckluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gICAgfVxuICB9XG4gIC8vYWRkIGdsb2JhbCByYWRpbyBidXR0b24gZmlsdGVyXG4gIGFkZEdsb2JhbFNlbGVjdEJ1dHRvbkZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuU0VMRUNUQlVUVE9OO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuICAvLyBhZGQgZ2xvYmFsIE11bHRpU2VsZWN0IGRyb3Bkb3duIGZpbHRlclxuICBhZGRHbG9iYWxNdWx0aVNlbGVjdERyb3BEb3duRmlsdGVyKFxuICAgIGdsb2JhbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsXG4gICAgbXVsdGlTZWxlY3RQcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDtcbiAgICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBtdWx0aVNlbGVjdFByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IG11bHRpU2VsZWN0UHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gbXVsdGlTZWxlY3RQcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBnbG9iYWxGaWx0ZXJJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIGdldERyb3Bkb3duRGF0YShcbiAgICBmaWVsZEluZm86IGFueSxcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZVByb3A6IHN0cmluZyxcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcbiAgICBmaWx0ZXJzOiBhbnksXG4gICAgc29ydHM6IElHcmlkU29ydFtdID0gW10sIFxuICAgIGdyaWRVcGRhdGVGaWVsZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzLCBzb3J0cylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBmaWVsZEluZm8uZGF0YSA9IHJlcztcbiAgICAgICAgcmV0dXJuIGdyaWRVcGRhdGVGaWVsZCA/IHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGZpZWxkSW5mbykgOiB0aGlzLmFkZEdsb2JhbEZpbHRlcihmaWVsZEluZm8pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICByZXR1cm4gZ3JpZFVwZGF0ZUZpZWxkID8gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZmllbGRJbmZvKSA6IHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KTtcbiAgfVxuICBcbiAgLy8gYWRkIGdsb2JhbCBmaWx0ZXIgU3BhY2UgRmllbGRcbiAgYWRkR2xvYmFsRmlsdGVyU3BhY2VGaWVsZChnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuU1BBQ0VSO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgYm9vbGVhbiBmaWx0ZXJcbiAgYWRkR2xvYmFsQm9vbGVhbkZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxEYXRlUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG4gIFxuICAvLyBhZGQgTnVtZXJpYyBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTnVtZXJpY1JhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuICAvLyBhZGQgTnVtZXJpYyBpbnB1dCBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxOdW1lcmljSW5wdXQoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgTG9va1VwIEZpZWxkIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbExvb2t1cEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gICAvL2FkZCBjYWxlbmRhciBmaWx0ZXIgZm9yIGdsb2JhbCBmaWx0ZXJcbiAgIGFkZEdsb2JhbERhdGVGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKXtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGU9R3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueSwgZGF0YUtleTogc3RyaW5nID0gXCJcIikge1xuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgICAgcmVzcG9uc2UubWFwKCh4OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHggPz8ge30pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBPYmplY3Qua2V5cyh4KT8ucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50LnRvTG93ZXJDYXNlKCldOiB4W2N1cnJlbnRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0YUtleSAmJlxuICAgICAgICAgICAgZGF0YUtleS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhT2JqZWN0LmtleXMocmVzdWx0KT8uaW5jbHVkZXMoZGF0YUtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJlc3VsdFtkYXRhS2V5XSA9IGluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzZXRDb2x1bW5GaWVsZHMoY29sdW1uczogYW55W10pIHtcbiAgICBsZXQgY29sdW1uOiBhbnkgPSBbXTtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBjb2x1bW4ucHVzaCh7IC4uLmNvbCwgZmllbGQ6IGNvbD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuICB9XG5cbiAgLy8gY2hhbmdlIGxpbmtJZCBpbiBlZGl0IG1vZGUsIGlmIGNoYW5nZUxpbmsgaXMgdHJ1ZSB0aGVuIGl0IGNoYW5nZSB0aGUgZWRpdGVkIHJvdyBoeXBlcmxpbmsgdmFsdWVcbiAgc2V0TGlua0lkKFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBsaW5rSWQ6IHN0cmluZyxcbiAgICByZWNvcmQ6IGFueSxcbiAgICB1c2VyczogYW55LFxuICAgIHBhcmFtczogYW55ID0gbnVsbCxcbiAgICBjaGFuZ2VMaW5rOiBib29sZWFuID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNvbHVtbi5saW5rSWQgPSBsaW5rSWQ7XG4gICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgY29sdW1uLnBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SHlwZXJsaW5rcyh7IHJlY29yZHM6IFtyZWNvcmRdIH0sIGNvbHVtbnMpLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICBpZiAoY2hhbmdlTGluaykge1xuICAgICAgICBkZWxldGUgcmVzWzBdW2ZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xuICAgICAgICBsZXQgaW5kZXggPSB1c2Vycy5maW5kSW5kZXgoXG4gICAgICAgICAgKGk6IGFueSkgPT4gaVtmaWVsZC50b0xvd2VyQ2FzZSgpXSA9PT0gcmVjb3JkW2ZpZWxkLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAodXNlcnNbaW5kZXhdW2ZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICAgICAgdXNlcnNbaW5kZXhdW2ZpZWxkICsgJ19vYmonXS5oeXBlcmxpbmsgPVxuICAgICAgICAgICAgICByZXNbMF1bZmllbGQgKyAnX29iaiddLmh5cGVybGluaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBncmlkIGRhdGEgYW5kIHNldCBzZWxlY3RlZCByb3cgYmFzZWQgb24gc2VsZWN0aW9uIHZhbHVlXG4gIHNldERhdGFXaXRoU2VsZWN0ZWRSb3cocmVjb3JkczogYW55LCBjb25maWdEYXRhOiBhbnkpIHtcbiAgICBpZiAoKGNvbmZpZ0RhdGE/LnZhbHVlUHJvcCB8fCBjb25maWdEYXRhPy5sYWJlbFByb3ApICYmIGNvbmZpZ0RhdGEuZGF0YS5zZWxlY3Rpb24pIHtcbiAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMocmVjb3JkKT8uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBjb25maWdEYXRhLmxhYmVsUHJvcCA/IGNvbmZpZ0RhdGEubGFiZWxQcm9wPy50b0xvd2VyQ2FzZSgpIDogY29uZmlnRGF0YS52YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY29uZmlnRGF0YS5kYXRhLnZhbHVlICYmXG4gICAgICAgICAgICAgIHJlY29yZFtrZXldID09PSBjb25maWdEYXRhLmRhdGEudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkW2tleV0/LnRvU3RyaW5nKCkgPT09IGNvbmZpZ0RhdGEuZGF0YS5zZWxlY3Rpb24/LnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgcmVjb3JkWydoaWdobGlnaHRSb3cnXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbiAgc2V0VGFibGVBbGlhcyhmaWVsZDogc3RyaW5nLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICh4OiBhbnkpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG5cbiAgICAgIGlmIChjb2x1bW4gIT0gbnVsbCAmJiBjb2x1bW4udGFibGVBbGlhcyAmJiBjb2x1bW4udGFibGVBbGlhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4udGFibGVBbGlhcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBzZXRHcmlkUHJvcFZhbHVlcyhcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdLFxuICAgIHByb3BzOiBJR3JpZFByb3BbXSxcbiAgICBmaWx0ZXI/OiBJR3JpZFByb3BGaWx0ZXIsXG4gICAgcmVjb3Jkcz86IGFueVtdXG4gICkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCAmJiBwcm9wcyAmJiBwcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaXNNYXRjaGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyICYmIGZpbHRlci5maWVsZCAmJiByZWNvcmRzICYmIHJlY29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBpc01hdGNoZWQgPSByZWNvcmRzLnNvbWUoXG4gICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIoeClbZmlsdGVyLmZpZWxkLnRvTG93ZXJDYXNlKCldID09PVxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcy5tYXAoKHByb3A6IElHcmlkUHJvcCkgPT4ge1xuICAgICAgICBsZXQgY29sOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgIWlzTWF0Y2hlZCAmJiAhZmlsdGVyPy5maWVsZCkge1xuICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaGVkKSB7XG4gICAgICAgICAgaWYgKHByb3AuZmllbGQpIHtcbiAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlcj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wgJiYgY29sLmhhc093blByb3BlcnR5KHByb3AubmFtZSkpIHtcbiAgICAgICAgICBjb2xbcHJvcC5uYW1lXSA9IHByb3AudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBncmlkIHJvdyBwcm9wVmFsdWVzXG4gIHNldEdyaWRSb3dQcm9wVmFsdWUocm93OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcm9wczogSUdyaWRSb3dQcm9wW10sIGNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXSkge1xuICAgIGxldCBzZXRMaW5rSWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgbGlua0lkUmVzOiBhbnk7XG4gICAgcHJvcHM/LmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgIHNldExpbmtJZCA9IGZhbHNlO1xuICAgICAgaWYgKHByb3AucHJvcE5hbWUgJiYgIXByb3AubGFiZWwgJiYgKHByb3AucHJvcFZhbHVlIHx8IHByb3AucHJvcFZhbHVlID09PSBmYWxzZSB8fCBwcm9wLnByb3BWYWx1ZSA9PT0gJycpKSB7XG4gICAgICAgIGlmIChwcm9wLmZpZWxkICYmIHJvdykge1xuICAgICAgICAgIGxldCBmaWVsZE5hbWUgPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGxldCBmaWVsZE5hbWVPYmogPSBmaWVsZE5hbWU/LmluY2x1ZGVzKCdfb2JqJykgPyBmaWVsZE5hbWU/LnRvTG93ZXJDYXNlKCkgOiBmaWVsZE5hbWU/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgaWYgKCFmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd09iaiA9IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgICAgZmllbGROYW1lT2JqID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5OiBhbnkpID0+IChrZXk/LnRvTG93ZXJDYXNlKCkgPT09IHJvd09iaikgJiYgKHJvd1tyb3dPYmpdPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8IHJvd1tyb3dPYmpdPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8IHJvd1tyb3dPYmpdPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykpO1xuICAgICAgICAgICAgaWYgKGZpZWxkTmFtZU9iaikge1xuICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWVPYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3cpPy5pbmNsdWRlcyhmaWVsZE5hbWVPYmopKSB7XG4gICAgICAgICAgICAgIHJvd1tmaWVsZE5hbWVPYmpdID0geyAuLi5yb3dbZmllbGROYW1lT2JqXSwgdGV4dDogcm93W2ZpZWxkTmFtZV0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tmaWVsZE5hbWVPYmpdID0geyB0ZXh0OiByb3dbZmllbGROYW1lXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1ucz8uc29tZSgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcEZpZWxkID0gcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BGaWVsZE9iaiA9IHByb3BGaWVsZCArICdfb2JqJztcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3cpPy5pbmNsdWRlcyhmaWVsZE5hbWVPYmopKSB7XG4gICAgICAgICAgICAgIHJvd1twcm9wRmllbGRPYmpdID0geyAuLi5yb3dbcHJvcEZpZWxkT2JqXSwgdGV4dDogcm93W3Byb3AuZmllbGRdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbcHJvcEZpZWxkT2JqXSA9IHsgdGV4dDogcm93W3Byb3AuZmllbGRdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocHJvcD8uYWN0aW9uID09PSBFR3JpZFJvd0FjdGlvbi5ERUxFVEVCVE4pIHtcbiAgICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAocHJvcD8uYWN0aW9uID09PSBFR3JpZFJvd0FjdGlvbi5FRElUQlROKSB7XG4gICAgICAgICAgICByb3dbcHJvcC5hY3Rpb25dID0gcHJvcC5wcm9wVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3AubGFiZWwpIHtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBwcm9wLmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICBpZiAocHJvcC5wcm9wTmFtZSA9PT0gRUdyaWRSb3dQcm9wTmFtZS5SRVBPUlROQU1FKSB7XG4gICAgICAgICAgcm93W3Byb3BOYW1lXSA9IHsgLi4ucm93W3Byb3BOYW1lXSwgcmVwb3J0TmFtZTogcHJvcD8ucHJvcFZhbHVlIH07XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcC5wcm9wTmFtZSA9PT0gRUdyaWRSb3dQcm9wTmFtZS5SRVBPUlRQQVJBTSAmJiBwcm9wPy5wYXJhbXMpIHtcbiAgICAgICAgICByb3dbcHJvcE5hbWVdID0geyAuLi5yb3dbcHJvcE5hbWVdLCByZXBvcnRQYXJhbTogcHJvcC5wYXJhbXMgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BOYW1lICYmIHByb3AucHJvcE5hbWUgPT09IEVHcmlkUm93UHJvcE5hbWUuTElOS0lEKSB7XG4gICAgICAgIHNldExpbmtJZCA9IHRydWU7XG4gICAgICAgIGxpbmtJZFJlcyA9IHRoaXMuc2V0SHlwZXJsaW5rcyh7IHJlY29yZHM6IFtyb3ddIH0sIGNvbHVtbnMsIHByb3AucGFyYW1zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXNldExpbmtJZCkge1xuICAgICAgcmV0dXJuIHJvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxpbmtJZFJlcztcbiAgICB9XG4gIH1cblxuICAvLyByZW1vdmUgdGhlIHJvd0FjdGlvbnMgZnJvbSB0aGUgcmVjb3Jkc1xuICByZW1vdmVSb3dBY3Rpb25zKHJlY29yZHMpIHtcbiAgICBpZiAocmVjb3Jkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKHJvdy5yb3dBY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGUgcm93Wydyb3dBY3Rpb24nXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbiAgZXhwb3J0RXhjZWwocm93c0RhdGEsIGNvbHVtbnMsIHJlcG9ydE5hbWU6IHN0cmluZyA9IEVHcmlkRXhjZWwuRVhQT1JUKSB7XG4gICAgaW1wb3J0KCd4bHN4JykudGhlbigoeGxzeCkgPT4ge1xuICAgICAgY29uc3Qgd29ya3NoZWV0OiBXb3JrU2hlZXQgPSB4bHN4LnV0aWxzLmpzb25fdG9fc2hlZXQocm93c0RhdGEpO1xuICAgICAgbGV0IHJvd0luZGV4ID0gMDtcbiAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIGxldCBjb2xJbmRleCA9IDA7XG4gICAgICAgIGNvbHVtbnM/LmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sLmhlYWRlcl07XG4gICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiBjZWxsVmFsdWUgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IDAgJiYgY2VsbFZhbHVlLmluZGV4T2YoJ3wnKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUZXh0OiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgICAgIGxldCBsaW5rVXJsOiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVsxXTtcbiAgICAgICAgICAgIGlmIChsaW5rVXJsICYmICFsaW5rVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBpZiAoIWxpbmtVcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgbGlua1VybCA9ICcvJyArIGxpbmtVcmw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGlua1VybCA9XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICtcbiAgICAgICAgICAgICAgICAnLy8nICtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgK1xuICAgICAgICAgICAgICAgIGxpbmtVcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjZWxsQWRkcmVzcyA9IHhsc3gudXRpbHMuZW5jb2RlX2NlbGwoe1xuICAgICAgICAgICAgICBjOiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgcjogcm93SW5kZXggKyAxLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdvcmtzaGVldFtjZWxsQWRkcmVzc10gPSB7XG4gICAgICAgICAgICAgIGY6IGA9SFlQRVJMSU5LKFwiJHtsaW5rVXJsfVwiLCBcIiR7bGlua1RleHR9XCIpYCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgIH0pO1xuICAgICAgICByb3dJbmRleCsrO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB3b3JrYm9vayA9IHtcbiAgICAgICAgU2hlZXRzOiB7IHNoZWV0MTogd29ya3NoZWV0IH0sXG4gICAgICAgIFNoZWV0TmFtZXM6IFsnc2hlZXQxJ10sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHtcbiAgICAgICAgYm9va1R5cGU6ICd4bHN4JyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIHJlcG9ydE5hbWUpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChzdWItbWV0aG9kKVxuICAgKi9cbiAgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCByZXBvcnROYW1lKTogdm9pZCB7XG4gICAgbGV0IEVYQ0VMX1RZUEUgPVxuICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBFWENFTF9UWVBFIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSk7XG4gIH1cblxuICBzYXZlQXNUZXh0RmlsZShyb3dzSW5mbzogYW55LCByZXBvcnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZHNUb0Rpc3BsYXkgPSBPYmplY3Qua2V5cyhyb3dzSW5mb1swXSk7XG4gICAgY29uc3QgaGVhZGVyUm93ID0gZmllbGRzVG9EaXNwbGF5LmpvaW4oJ1xcdCcpO1xuICAgIGNvbnN0IGZvcm1hdHRlZFJvd3MgPSByb3dzSW5mby5tYXAoKHJvdykgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkc1RvRGlzcGxheS5tYXAoKGZpZWxkKSA9PiByb3dbZmllbGRdKS5qb2luKCdcXHQnKTtcbiAgICB9KTtcbiAgICBjb25zdCByb3dzRGF0YSA9IFtoZWFkZXJSb3csIC4uLmZvcm1hdHRlZFJvd3NdLmpvaW4oJ1xcbicpO1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgQmxvYihbcm93c0RhdGFdLCB7IHR5cGU6ICd0ZXh0JyB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIHJlcG9ydE5hbWUpO1xuICB9XG5cbiAgc2F2ZURhdGFBc0Nzdihyb3dzSW5mbzogYW55LCByZXBvcnROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXJvd3NJbmZvIHx8ICFyb3dzSW5mby5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gJywnO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBPYmplY3Qua2V5cyhyb3dzSW5mb1swXSk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKS5maWx0ZXIoayA9PiB7XG4gICAgICBpZiAoY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zLmluY2x1ZGVzKGspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9XG4gICAgICBrZXlzLmpvaW4oc2VwYXJhdG9yKSArXG4gICAgICAnXFxuJyArXG4gICAgICByb3dzSW5mby5tYXAocm93ID0+IHtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKGsgPT4ge1xuICAgICAgICAgIGxldCBjZWxsID0gcm93W2tdID09PSBudWxsIHx8IHJvd1trXSA9PT0gdW5kZWZpbmVkID8gJycgOiByb3dba107XG4gICAgICAgICAgY2VsbCA9IGNlbGwgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICA/IGNlbGwudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgICAgOiBjZWxsLnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1wiXCInKTtcbiAgICAgICAgICBpZiAoY2VsbC5zZWFyY2goLyhcInwsfFxcbikvZykgPj0gMCkge1xuICAgICAgICAgICAgY2VsbCA9IGBcIiR7Y2VsbH1cImA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICB9KS5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICB0aGlzLnNhdmVBc0NzdkZpbGUoY3N2Q29udGVudCwgcmVwb3J0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRvIENTViAoc3ViLW1ldGhvZClcbiAgICovXG5cbiAgc2F2ZUFzQ3N2RmlsZShjc3ZDb250ZW50OiBzdHJpbmcsIHJlcG9ydE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIHJlcG9ydE5hbWUgKyAnLmNzdicpO1xuICB9XG5cbiAgYWRkTmV3Um93KGdyaWROYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIGxldCBhZGRCdXR0b246IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dsb2JhbC1hZGQtYnRuJyArIGdyaWROYW1lKTtcbiAgICBpZiAoYWRkQnV0dG9uICYmIGFkZEJ1dHRvbi5sZW5ndGggPiAwKSB7XG4gICAgICBhZGRCdXR0b25bMF0/LmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgaW5jcmVtZW50Q2FsbHMoKSB7XG4gICAgdGhpcy5udW1iZXJPZkNhbGxzKys7XG4gIH1cblxuICBnZXROdW1iZXJPZkNhbGxzKCkge1xuICAgIHJldHVybiB0aGlzLm51bWJlck9mQ2FsbHM7XG4gIH1cbn0iXX0=
1585
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsRUFFZCxVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFJOUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUtqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQzs7Ozs7Ozs7QUFNeEMsTUFBTSxPQUFPLFdBQVc7SUFRdEIsWUFDUyxRQUFrQixFQUNqQixnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsS0FBcUI7UUFMdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFidkIsa0JBQWEsR0FBVyxDQUFDLENBQUM7UUFDbEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUNqQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQ3BCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNqQyxZQUFPLEdBQUcsQ0FBQyxDQUFDO0lBUWpCLENBQUM7SUFFSjs7OztPQUlHO0lBQ0gsY0FBYyxDQUFD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QUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFdBQW1CLEVBQUU7UUFDN0IsSUFBSSxTQUFTLEdBQVEsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztpSUExeURVLFdBQVc7cUlBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBJQXV0b0NvbXBsZXRlU2F2ZSwgSURyb3BEb3duUmVxdWVzdCB9IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEVHcmlkU29ydERpcmVjdGlvbixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICBJR2xvYmFsRmlsdGVyLFxuICBJR3JpZEZpbHRlcixcbiAgSUdyaWRTb3J0LFxuICBFR3JpZENvbHVtblR5cGUsXG4gIGFkZENvbHVtbixcbiAgYWRkRmlsdGVyQ29sdW1uLFxuICBhZGRHbG9iYWxGaWx0ZXIsXG4gIElHcmlkQ29sdW1uLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgSUdyaWRQcm9wLFxuICBJR3JpZFByb3BGaWx0ZXIsXG4gIElHcmlkUm93UHJvcCxcbiAgSUdyaWRSZXBvcnRCdG4sXG4gIEVHcmlkUm93QWN0aW9uLFxuICBJRGlhbG9nQ29sdW1uLFxuICBFR3JpZEZvcm1hdHRlcixcbiAgSUdyaWRVcGRhdGUsXG4gIEVHcmlkRXhjZWwsXG4gIEVHcmlkUm93UHJvcE5hbWUsXG59IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tICcuL2Ryb3Bkb3duLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4vaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4vdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IFdvcmtTaGVldCB9IGZyb20gJ3hsc3gnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSB7XG4gIHByaXZhdGUgbnVtYmVyT2ZDYWxsczogbnVtYmVyID0gMDtcbiAgdXNlclNlYXJjaGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHNvZnRDYWNoaW5nRmlsdGVyczogYW55ID0ge307XG4gIGFwcGx5RmlsdGVyRXZlbnQ6IGJvb2xlYW4gPSB0cnVlO1xuICByb3dVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbHVtbkZvY3VzZWRPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBjb3VudGVyID0gMTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICApIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIGFmdGVyIHByb3BlciBtYXBwaW5nXG4gICAqL1xuICBnZXRHcmlkRmlsdGVycyhldmVudDogTGF6eUxvYWRFdmVudCwgY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLm1hcEZpbHRlcnMoZXZlbnQsIGNvbHVtbnMpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVycyk7XG4gIH1cbiAgZ2V0TmV4dElkKCk6IHN0cmluZyB7XG4gICAgXG4gICAgcmV0dXJuIGBzdGF0aWMtJHt0aGlzLmNvdW50ZXIrK31gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBmaWx0ZXJzXG4gICAqIFJlY2VpdmVzIGZpbHRlcnMgYW5kIHJldHVybnMgYXJyYXkgYWZ0ZXIgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICAgKiBhbmQgY3JlYXRpbmcgY29tbWEgc2VwYXJhdGVkIHZhbHVlcyBmb3Igc2FtZSBmaWx0ZXJzXG4gICAqL1xuICBoYW5kbGVNdWx0aUZpbHRlckZpZWxkKGZpbHRlcnM6IElHcmlkRmlsdGVyW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICByZXR1cm4gZmlsdGVyc1xuICAgICAgLm1hcCgoeCwgaSwgYXJyKSA9PlxuICAgICAgICBhcnIuc29tZShcbiAgICAgICAgICAoeSwgaWR4KSA9PlxuICAgICAgICAgICAgeS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0geC5maWVsZD8udG9Mb3dlckNhc2UoKSAmJiBpICE9PSBpZHhcbiAgICAgICAgKVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICB2YWx1ZTogYXJyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICh6KSA9PiB6LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5tYXAoKGEpID0+IGEudmFsdWUpXG4gICAgICAgICAgICAgICAgLmpvaW4oKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHhcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoKGYsIGksIGFycikgPT4gYXJyLmZpbmRJbmRleCgoeCkgPT4geC52YWx1ZSA9PT0gZi52YWx1ZSkgPT09IGkpO1xuICB9XG5cbiAgLy8gUHJlcGFyZSBiYXNpYyBncmlkIGZpbHRlcnNcbiAgcHJlcGFyZUJhc2ljRmlsdGVycyhcbiAgICBldmVudDogTGF6eUxvYWRFdmVudCxcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdXG4gICk6IElHcmlkRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLm1hcEZpbHRlcnMoZXZlbnQsIGNvbHVtbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBmaWx0ZXJzIGhhcyB2YWx1ZXMgdGhlbiBjb252ZXJ0cyBnbG9iYWwgZmlsdGVyIHZhbHVlcyB0eXBlIGludG8gSUdyaWRGaWx0ZXIuXG4gICAqL1xuICBwcmVwYXJlR2xvYmFsRmlsdGVycyhnbG9iYWxGaWx0ZXJzOiBJR2xvYmFsRmlsdGVyW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICBjb25zdCBnbG9iYWxEYXRhOiBJR3JpZEZpbHRlcltdID0gW107XG5cbiAgICBnbG9iYWxGaWx0ZXJzPy5mb3JFYWNoKChmaWx0ZXI6IElHbG9iYWxGaWx0ZXIpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgKCh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGZpbHRlci52YWx1ZSkpICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlLmxlbmd0aCkgfHxcbiAgICAgICAgKHR5cGVvZiBmaWx0ZXIudmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgIUFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSAmJlxuICAgICAgICAgIGZpbHRlci52YWx1ZSkgfHxcbiAgICAgICAgKHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdib29sZWFuJyAmJiBmaWx0ZXIudmFsdWUgIT09IG51bGwpIHx8XG4gICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0VcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSAmJlxuICAgICAgICAgIGZpbHRlci52YWx1ZT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ3wnKVxuICAgICAgICApIHsgICAgICAgICBcblxuICAgICAgICAgIC8vIGFkZCBmaWx0ZXIgZm9yIGVuZCBkYXRlXG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlciwgZmFsc2UpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBmaWx0ZXIubWF0Y2hNb2RlID8gZmlsdGVyLm1hdGNoTW9kZSA6ICdsdGUnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyLCBmYWxzZSksXG4gICAgICAgICAgICB0YWJsZUFsaWFzOiBmaWx0ZXIudGFibGVBbGlhcyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgICAvLyBhZGQgZmlsdGVyIGZvciBzdGFydCBkYXRlXG4gICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOiBmaWx0ZXIubWF0Y2hNb2RlID8gZmlsdGVyLm1hdGNoTW9kZSA6ICdndGUnLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci50eXBlICE9PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UpIHtcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyKSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTpcbiAgICAgICAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVFxuICAgICAgICAgICAgICAgID8gJ2luJ1xuICAgICAgICAgICAgICAgIDogZmlsdGVyLm1hdGNoTW9kZSxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICB0YWJsZUFsaWFzOiBmaWx0ZXIudGFibGVBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBnbG9iYWxEYXRhO1xuICB9XG5cbiAgc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyOiBhbnksIGlzU3RhcnREYXRlOiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UpIHtcbiAgICAgIGlmIChpc1N0YXJ0RGF0ZSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyLmZyb21GaWVsZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIudG9GaWVsZDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbHRlci5maWVsZDtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZ2xvYmFsIGZpbHRlciB2YWx1ZVxuICBzZXRHbG9iYWxGaWx0ZXJWYWx1ZShcbiAgICBmaWx0ZXI6IElHbG9iYWxGaWx0ZXIsXG4gICAgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlXG4gICk6IHN0cmluZyB8IG51bWJlciB8IERhdGUgfCBib29sZWFuIHtcbiAgICBzd2l0Y2ggKGZpbHRlci50eXBlKSB7XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDpcbiAgICAgICAgcmV0dXJuIChmaWx0ZXIudmFsdWUgYXMgYW55W10pLmpvaW4oJywnKTtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGZpbHRlci52YWx1ZSBhcyBEYXRlKTtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFOlxuICAgICAgICBsZXQgZGF0ZVZhbHVlczogc3RyaW5nW10gPSBmaWx0ZXIudmFsdWVcbiAgICAgICAgICA/IGZpbHRlci52YWx1ZS50b1N0cmluZygpLnNwbGl0KCd8JylcbiAgICAgICAgICA6IFtdO1xuICAgICAgICBpZiAoZGF0ZVZhbHVlcyAmJiBkYXRlVmFsdWVzLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgbGV0IGRhdGVWYWx1ZTogRGF0ZSA9IGlzU3RhcnREYXRlXG4gICAgICAgICAgICA/IG5ldyBEYXRlKGRhdGVWYWx1ZXNbMF0pXG4gICAgICAgICAgICA6IG5ldyBEYXRlKGRhdGVWYWx1ZXNbMV0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZGF0ZVZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YOlxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSBhcyBzdHJpbmc7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tWYWxpZGl0eShjb2x1bW5zOiBJR3JpZENvbHVtbltdLCByb3c6IGFueSwgc2luZ2xlQ2VsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGNvbHVtbnMubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGlmIChpdGVtLnZhbGlkYXRpb25zICYmICFpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIGl0ZW0uaXN2YWxpZCA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbS52YWxpZGF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG1pbk1heFZhbGlkRGF0ZSA9IHV0aWxpdGllcy5jYWxlbmRhck1pbk1heFZhbHVlKFxuICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSxcbiAgICAgICAgICAgIGlcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZhbGlkID0gaXRlbS52YWxpZGF0aW9ucyAmJiBpdGVtLmhlYWRlcjtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhc2luZ2xlQ2VsbCAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlJFUVVJUkVEICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAhaXRlbS5oaWRkZW4gJiZcbiAgICAgICAgICAgIHZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGAke3ZhbGlkfSBpcyByZXF1aXJlZGApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1JTkxFTkdUSCAmJlxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1pbmltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWExFTkdUSCAmJlxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1heGltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IGNoYXJhY3RlcnNgXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWE9QVElPTlMgXG5cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHZhciBvcHRpb25zOm51bWJlcj0xO1xuICAgICAgICAgICAgdmFyIHZhbHVlPXJvd1tpdGVtLmZpZWxkXTtcbiAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgdmFsdWUubGVuZ3RoIC0gMTsgeCsrKSB7XG4gICAgICAgICAgICAgIGlmICh2YWx1ZVt4XSA9PSAnOycpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vYmx1ZTtyZWQ7Z3JlZW4gbWF4PTNcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAvLyByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgb3B0aW9ucyA8PSBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gbWF4aW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gb3B0aW9uJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24+MT8ncyc6Jyd9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1JTklNVU0gJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIG1pbk1heFZhbGlkRGF0ZSA9PT0gJ21pbmltdW0nXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tpdGVtLmZpZWxkXSA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWluaW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk1BWElNVU0gJiZcbiAgICAgICAgICAgIGlzVmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIG1pbk1heFZhbGlkRGF0ZSA9PT0gJ2dyZWF0ZXInXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYE1heGltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tpdGVtLmZpZWxkXSA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbikge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBBVFRFUk4gJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0ubWF0Y2goaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubWF0Y2goaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTlVNRVJJQyAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKSQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJiByb3dbaXRlbS5maWVsZF0ubWF0Y2goL14oMHxbMS05XVxcZCopJC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYEVudGVyICR7aXRlbS52YWxpZGF0aW9uc1tpXS50eXBlfSBmb3IgJHt2YWxpZH1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLlBIT05FICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKD89LipbMC05XSlbLSgpMC05XFxzK3hdKyQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHNdKyQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuREVDSU1BTCAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXigwfFstKCkxLTldXFxkKikoXFwuXFxkKyk/JC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXigwfFsxLTldXFxkKikoXFwuXFxkKyk/JC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYEVudGVyICR7aXRlbS52YWxpZGF0aW9uc1tpXS50eXBlfSBmb3IgJHt2YWxpZH1gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLkVNQUlMICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAubWF0Y2goL15bYS16QS1aMC05Ll8tXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLDZ9JC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXVxuICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIC5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cblxuICBzZXRFcnJvck1lc3NhZ2UoaXRlbTogSUdyaWRDb2x1bW4sIGVycm9yTWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaXRlbS5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgaXRlbS5pc3ZhbGlkID0gZmFsc2U7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gc2V0IGJhc2ljIGZpbHRlciB2YWx1ZVxuICBzZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlcjogYW55KTogYW55IHtcbiAgICBpZiAoZmlsdGVyIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShmaWx0ZXIpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlciA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gZmlsdGVyID8gMSA6IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIHNvcnQgYXJyYXlcbiAgICovXG4gIGdldEdyaWRTb3J0cyhcbiAgICB7IG11bHRpU29ydE1ldGEgfTogTGF6eUxvYWRFdmVudCxcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdXG4gICk6IElHcmlkU29ydFtdIHtcbiAgICByZXR1cm4gKG11bHRpU29ydE1ldGEgfHwgW10pLm1hcCgoeyBmaWVsZCwgb3JkZXIgfSwgaSk6IGFueSA9PiAoe1xuICAgICAgZmllbGQsXG4gICAgICBkaXJlY3Rpb246IG9yZGVyID4gMCA/IEVHcmlkU29ydERpcmVjdGlvbi5BU0MgOiBFR3JpZFNvcnREaXJlY3Rpb24uREVTQyxcbiAgICAgIHByaW9yaXR5OiBpICsgMSxcbiAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBIYW5kbGVzIGRlZmF1bHQgYW5kIGxvb2t1cCBmaWx0ZXJzXG4gICAqL1xuICBtYXBGaWx0ZXJzKGV2ZW50OiBhbnksIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBJR3JpZEZpbHRlcltdID0gW107XG4gICAgT2JqZWN0LmVudHJpZXMoZXZlbnQuZmlsdGVycykuZm9yRWFjaCgoW2ZpZWxkLCB2YWx1ZV06IGFueSkgPT4ge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICh2YWx1ZSBhcyBJR3JpZEZpbHRlcltdKS5mb3JFYWNoKFxuICAgICAgICAgICh7IG1hdGNoTW9kZSwgb3BlcmF0b3IsIHZhbHVlOiBmaWx0ZXIgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRCYXNpY0ZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlLnZhbHVlICE9PSAnJykge1xuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6ICdlcXVhbHMnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiAnZXF1YWwnLFxuICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKHZhbHVlLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICh2YWx1ZS52YWx1ZSB8fCBbXSkuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHgudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgcGFnZSBudW1iZXJcbiAgICovXG4gIGdldEdyaWRQYWdpbmF0aW9uKGV2ZW50OiBhbnkpOiBudW1iZXIge1xuICAgIHJldHVybiBpc05hTihldmVudC5maXJzdCAvIGV2ZW50LnJvd3MpID8gMSA6IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cyArIDE7XG4gIH1cblxuICAvLyBnZXQgZm9ybWF0dGVkIGRhdGVcbiAgZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGAke3ZhbHVlfSBaYCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxMCk7XG4gIH1cblxuICAgLy8gY2hhbmdlIHJvdyBrZXkgYW5kIHZhbHVlIHdoZW4gdXNpbmcgc2V0R3JpZFJvd1Byb3BWYWx1ZSBmdW5jdGlvblxuICAgc2V0Um93VmFsdWUocm93RGF0YTogYW55KSB7XG4gICAgT2JqZWN0LmtleXMocm93RGF0YSk/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgY29uc3Qgcm93T2JqID0gcm93Kydfb2JqJztcbiAgICAgIGlmKHJvdyA9PT0gRUdyaWRSb3dBY3Rpb24uREVMRVRFQlROIHx8IHJvdyA9PT0gRUdyaWRSb3dBY3Rpb24uRURJVEJUTil7XG4gICAgICAgIGRlbGV0ZSByb3dEYXRhW3Jvd107XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgcm93RGF0YVtyb3dPYmpdICYmXG4gICAgICAgIHR5cGVvZihyb3dEYXRhW3Jvd09ial0pID09PSAnb2JqZWN0J1xuICAgICAgKSB7XG4gICAgICAgIGRlbGV0ZSByb3dEYXRhW3Jvd09ial07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJvd0RhdGE7XG4gIH1cblxuICAvLyBjb252ZXJ0IHJvdyBhY3Rpb25zIG9iamVjdCBpbnRvIHNpbXBsZSB2YWx1ZVxuICBzZXRHcmlkUm93RGF0YShyb3dEYXRhKXtcbiAgICBpZihBcnJheS5pc0FycmF5KHJvd0RhdGEpKXtcbiAgICAgIHJvd0RhdGEuZm9yRWFjaCgocm93KT0+e1xuICAgICAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dEYXRhID0gdGhpcy5zZXRSb3dWYWx1ZShyb3dEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd0RhdGE7XG4gIH1cblxuICAvLyBnZXQgYWxsb3dTYXZlIHRydWUgcm93IGxpc3RcbiAgZ2V0QWxsb3dTYXZlUm93bGlzdChyb3dzRGF0YTogYW55W10gPSBbXSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIHJvd3NEYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJvd3NEYXRhKTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpPT57XG4gICAgICAgIHJvdyA9IHRoaXMucmVtb3ZlUm93T2JqKHJvdywgZmllbGQsIGNvbHVtbnMpO1xuICAgICAgfSlcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZSkge1xuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBsZXQgb2JqID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgICBpZiAob2JqPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvYmouZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoeC5pbmNsdWRlcygnX29iaicpICYmIHR5cGVvZiByb3dbeF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJvd1t4XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIHJvd1tmaWVsZF07XG4gICAgICAgICAgcm93ID0gdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikge1xuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBsZXQgdmFsdWUgPSByb3dbZmllbGRdXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5OVU1FUklDKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJzEnIDogJzAnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQk9PTEVBTikge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICdoaDptbSBhJyk7XG4gICAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSkge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmICFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHJvd1tmaWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJvd3NEYXRhO1xuICB9XG5cbiAgLy8gZ2V0IGFsbG93U2F2ZSB0cnVlIHx8IHVuZGVmaW5lIHJvd1xuICBnZXRBbGxvd1NhdmVSb3cocm93SW5mbzoge30gPSB7fSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSkge1xuICAgIGxldCByb3cgPSB7IC4uLnJvd0luZm8gfTtcbiAgICByb3cgPSB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIocm93KTtcbiAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGxldCBmaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3csIGZpZWxkLCBjb2x1bW5zKTtcbiAgICAgIGlmIChjb2x1bW4uYWxsb3dTYXZlID09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpXG4gICAgICAgIGtleXMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgIGlmICh4LmluY2x1ZGVzKCdfb2JqJykgJiYgdHlwZW9mIHJvd1t4XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGRlbGV0ZSByb3dbeF07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBrZXkgPSBrZXlzLmZpbmQoKHgpID0+IHgudG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikge1xuICAgICAgICBsZXQgdmFsdWUgPSByb3dbZmllbGRdXG4gICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5OVU1FUklDKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICcxJyA6ICcwJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5CT09MRUFOKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGZvcm1hdFxuICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgfSBlbHNlIGlmICghY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zaG93VGltZSkge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHJvd1tmaWVsZF0udG9Mb2NhbGVEYXRlU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICAvLyByZW1vdmUgb2JqLCBkYXRhIGFuZCBzZWNvbmR0eXBlIGRhdGEgZnJvbSByb3dcbiAgcmVtb3ZlUm93T2JqKHJvdywgZmllbGQsIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pe1xuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBpZihrZXlzPy5sZW5ndGggPiAwKXtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBpZihrZXkgPT09IGZpZWxkICsgJy1kYXRhJyB8fCBrZXkgPT09IGZpZWxkICsgJ19zZWNvbmRUeXBlJyB8fCBrZXkgPT09IGZpZWxkICsgJ19vYmonKXtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJvdyA9IHRoaXMucmVtb3ZlRXh0cmFOZXdSb3dPYmoocm93LCBjb2x1bW5zKVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICByZW1vdmVFeHRyYU5ld1Jvd09iaihyb3csIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pe1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmKGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYga2V5cz8ubGVuZ3RoID4gMCl7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgY29uc3QgbWF0Y2hLZXkgPSBjb2x1bW5zLnNvbWUoKGNvbHVtbik9PiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSlcbiAgICAgICAgaWYoIW1hdGNoS2V5KXtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQ29sdW1uKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoY29sdW1uSW5mby50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04pIHtcbiAgICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgICA6ICdsYWJlbCc7XG4gICAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgICAgOiAndmFsdWUnO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uSW5mby50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICBpZiAoIWNvbHVtbkluZm8uZmlsdGVyaW5nICYmICFjb2x1bW5JbmZvLmZpbHRlcikge1xuICAgICAgICBjb2x1bW5JbmZvLmZpbHRlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbkluZm8ucGFyYW1zICYmICFjb2x1bW5JbmZvLmRhdGEpIHtcbiAgICAgICAgY29sdW1uSW5mby5kYXRhID0gY29sdW1uSW5mby5wYXJhbXM7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XG4gICAgICBhbGxvd1RvZ2dsZTogY29sdW1uSW5mby5hbGxvd1RvZ2dsZSB8fCBmYWxzZSxcbiAgICAgIGFsbG93U2VhcmNoOiBjb2x1bW5JbmZvLmFsbG93U2VhcmNoLFxuICAgICAgYWxsb3dBdXRvQ29tcGxldGVTYXZlOiBjb2x1bW5JbmZvLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSxcbiAgICAgIHVuaXF1ZUtleTogY29sdW1uSW5mby51bmlxdWVLZXksXG4gICAgICBmaWVsZDogY29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogY29sdW1uSW5mby5oZWFkZXIsXG4gICAgICBzdHlsZTogY29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHR5cGU6IGNvbHVtbkluZm8udHlwZSxcbiAgICAgIGZvcm1hdDogY29sdW1uSW5mby5mb3JtYXQsXG4gICAgICBkYXRhOiBjb2x1bW5JbmZvLmRhdGEsXG4gICAgICBmaWx0ZXJWYWx1ZTpjb2x1bW5JbmZvLmZpbHRlclZhbHVlLFxuICAgICAgZmlsdGVyaW5nOiBjb2x1bW5JbmZvLmZpbHRlcmluZyxcbiAgICAgIGhpZGRlbjogY29sdW1uSW5mby5oaWRkZW4sXG4gICAgICBzaG93OiBjb2x1bW5JbmZvLnNob3csXG4gICAgICBzb3J0aW5nOiBjb2x1bW5JbmZvLnNvcnRpbmcsXG4gICAgICBmaWx0ZXI6IGNvbHVtbkluZm8uZmlsdGVyLFxuICAgICAgaHlwZXJsaW5rOiBjb2x1bW5JbmZvLmh5cGVybGluayxcbiAgICAgIHRhYmxlQWxpYXM6IGNvbHVtbkluZm8udGFibGVBbGlhcyxcbiAgICAgIGxpbmtJZDogY29sdW1uSW5mby5saW5rSWQsXG4gICAgICBtaW51dGVzSW50ZXJ2YWw6IGNvbHVtbkluZm8ubWludXRlc0ludGVydmFsLFxuICAgICAgcGFyYW1zOiBjb2x1bW5JbmZvLnBhcmFtcyxcbiAgICAgIHNob3dPcHRpb246IGNvbHVtbkluZm8uc2hvd09wdGlvbixcbiAgICAgIGRpc3BsYXlUZXh0OiBjb2x1bW5JbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgdGFyZ2V0OiBjb2x1bW5JbmZvLnRhcmdldCxcbiAgICAgIGRpc2FibGVkOiBjb2x1bW5JbmZvLmRpc2FibGVkLFxuICAgICAgYWxsb3dTYXZlOiBjb2x1bW5JbmZvLmFsbG93U2F2ZSxcbiAgICAgIGFsbG93RWRpdDogY29sdW1uSW5mby5hbGxvd0VkaXQsXG4gICAgICBlZGl0YWJsZTogY29sdW1uSW5mby5lZGl0YWJsZSxcbiAgICAgIGVkaXRMaW5rOiBjb2x1bW5JbmZvLmVkaXRMaW5rLFxuICAgICAgc2F2ZUFzU3RyaW5nOiBjb2x1bW5JbmZvLnNhdmVBc1N0cmluZyxcbiAgICAgIGNvbXBvbmVudDogY29sdW1uSW5mby5jb21wb25lbnQsXG4gICAgICBvbkNsaWNrOiBjb2x1bW5JbmZvLm9uQ2xpY2ssXG4gICAgICBvblJldHVybjogY29sdW1uSW5mby5vblJldHVybixcbiAgICAgIG9uRm9jdXNPdXQ6IGNvbHVtbkluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uQ2hhbmdlOiBjb2x1bW5JbmZvLm9uQ2hhbmdlLFxuICAgICAgYWdncmVnYXRlOiBjb2x1bW5JbmZvLmFnZ3JlZ2F0ZSxcbiAgICAgIGZvcm1hdHRlcjogY29sdW1uSW5mby5mb3JtYXR0ZXIsXG4gICAgICBwZXJtaXNzaW9uczogY29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICAgIG9wdGlvbkxhYmVsOiBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9uVmFsdWU6IGNvbHVtbkluZm8ub3B0aW9uVmFsdWUsXG4gICAgICBkcm9wRG93blByb3A6IGNvbHVtbkluZm8uZHJvcERvd25Qcm9wLFxuICAgICAgaG92ZXJEYXRhOiBjb2x1bW5JbmZvLmhvdmVyRGF0YSxcbiAgICAgIHNob3dUaW1lOiBjb2x1bW5JbmZvLnNob3dUaW1lLFxuICAgICAgdGltZU9ubHk6IGNvbHVtbkluZm8udGltZU9ubHksXG4gICAgICBsb29rdXBDb250cm9sOiBjb2x1bW5JbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBkaXNwbGF5RmllbGQ6IGNvbHVtbkluZm8uZGlzcGxheUZpZWxkLFxuICAgICAgaWNvbjogY29sdW1uSW5mby5pY29uLFxuICAgICAgY29sb3I6IGNvbHVtbkluZm8uY29sb3IsXG4gICAgICBpZDogY29sdW1uSW5mby5pZCxcbiAgICAgIHZhbHVlOiBjb2x1bW5JbmZvLnZhbHVlLFxuICAgICAgdmFsaWRhdGlvbnM6IGNvbHVtbkluZm8udmFsaWRhdGlvbnMsXG4gICAgICB0ZXh0VHlwZTpjb2x1bW5JbmZvLnRleHRUeXBlLFxuICAgICAgY29sdW1uV2lkdGg6IGNvbHVtbkluZm8uY29sdW1uV2lkdGhcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIEFkZGluZyBSZXBvcnQgQnV0dG9uIEZ1bmN0aW9uIGZvciBHcmlkXG4gIGFkZFJlcG9ydEJ0bihjb2x1bW5JbmZvOiBJR3JpZFJlcG9ydEJ0bikge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5SRVBPUlQ7XG4gICAgcmV0dXJuIGNvbHVtbkluZm87XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGlucHV0IGdyaWQgY29sdW1uXG4gIGFkZElucHV0Q29sdW1uKFxuICAgIGZpbHRlckNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGZpbHRlckNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oZmlsdGVyQ29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oZmlsdGVyQ29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIG51bWVyaWMgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGROdW1lcmljQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBjb2x1bW5JbmZvPy5maWx0ZXI/LnR5cGUgPyBjb2x1bW5JbmZvLmZpbHRlci50eXBlIDogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVCxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgY2FsZW5kYXIgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDYWxlbmRhckNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBjb2x1bW5JbmZvPy5maWx0ZXI/LnR5cGUgPyBjb2x1bW5JbmZvLmZpbHRlci50eXBlIDogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29sdW1uSW5mby50eXBlID0gY29sdW1uSW5mby50eXBlID8gY29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgc2V0Q29uZmlnRGF0YShjb25maWc6IGFueSkge1xuICAgIGxldCBjb25maWdEYXRhOiBhbnkgPSB7fTtcbiAgICBpZiAoY29uZmlnPy5kYXRhICYmIE9iamVjdC5rZXlzKGNvbmZpZz8uZGF0YSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmZpZ0RhdGEgPSBjb25maWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbTogYW55KSA9PiB7XG4gICAgICAgIGlmIChwYXJhbSAmJiBPYmplY3Qua2V5cyhwYXJhbSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25maWdEYXRhWydkYXRhJ10gPSBwYXJhbTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ0RhdGE7XG4gIH1cbiAgICAgXG5cbiAgLy8gYWRkIHNpbXBsZSBib29sZWFuIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQm9vbGVhbkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICAoY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pLFxuICAgICAgICAoY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YLFxuICAgICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuIC8vIGFkZCBMb29rVXAgY29sdW1uIGZvciBHcmlkXG4gYWRkTG9va1VwQ29sdW1uKGNvbHVtbkluZm86IElEaWFsb2dDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xuICBpZiAoc2hvd0ZpbHRlcikge1xuICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVDtcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xufVxuXG4vLyBhZGQgZGlhbG9nIGNvbHVtbiBmb3IgR3JpZFxuIGFkZERpYWxvZ0NvbHVtbihjb2x1bW5JbmZvOiBJRGlhbG9nQ29sdW1uLCBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IElHcmlkQ29sdW1uIHtcbiAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRztcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuIH1cblxuICAvLyBhZGQgQnV0dG9uIGZvciBncmlkIGNvbHVtblxuICBhZGRCdXR0b25Db2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5BRERfQlVUVE9OO1xuICAgIGlmICghY29sdW1uSW5mby5maWVsZCkge1xuICAgICAgY29sdW1uSW5mby5maWVsZCA9IGNvbHVtbkluZm8udmFsdWUgPyBjb2x1bW5JbmZvLnZhbHVlIDogY29sdW1uSW5mby5pY29uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cbiAgXG4gIC8vIGFkZCBBdXRvQ29tcGxldGUgZm9yIGdyaWQgY29sdW1uXG4gIGFkZEF1dG9Db21wbGV0ZShjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBTZWFyY2ggQXV0b0NvbXBsZXRlIERhdGEgZm9yIEdyaWRcbiAgZ2V0QXV0b0NvbXBsZXRlRGF0YShcbiAgICBjb2x1bW4/OiBhbnksXG4gICAgdW5pcXVlS2V5Pzogc3RyaW5nLFxuICAgIGZpbHRlcnM/OiBhbnlbXSxcbiAgICBzZWFyY2g6IHN0cmluZyA9ICcnXG4gICk6IGFueSB7XG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZVxuICAgICAgLmdldDxhbnlbXSwgYW55PignL0RhdGEvRmV0Y2gnLCB7IHVuaXF1ZUtleTogdW5pcXVlS2V5LCBmaWx0ZXJzIH0pXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbHVtbi5kYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpO1xuICAgICAgfSwoeyBlcnJvciB9KSA9PiB7XG4gICAgICAgIGxldCByZXNwb25zZTphbnk9IHt9O1xuICAgICAgICByZXNwb25zZVsncmVjb3JkcyddID0gW107XG4gICAgICAgIGNvbHVtbi5kYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpO1xuICAgICAgfSk7XG4gIH1cbiBhc3luYyBhZGRBdXRvQ29tcGxldGVWYWx1ZSh1bmlxdWVLZXk6IElBdXRvQ29tcGxldGVTYXZlLCB2YWx1ZTphbnksIGNvbHVtbjphbnksIHJvdzphbnkpIHtcbiAgbGV0IG5ld1ZhbHVlID0ge31cblxuICBmb3IodmFyIGkgPTA7aTx1bmlxdWVLZXkudmFsdWVzLmxlbmd0aDsgaSsrKXtcbiAgICBpZih1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKT09Y29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpfHx1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKT09Y29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSl7XG4gICAgICBuZXdWYWx1ZVt1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWVdPXZhbHVlO1xuICAgIFxuICAgIH1lbHNle1xuICAgICAgbmV3VmFsdWVbdW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lXT10aGlzLmdldFNvZnRDb2RpbmdWYWx1ZSh1bmlxdWVLZXkudmFsdWVzW2ldLnZhbHVlLCByb3cpXG4gICAgfSBcbiAgfVxuXG5cbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlXG4gICAgICAuZ2V0PGFueVtdLCBhbnk+KCcvRGF0YS9TYXZlJywgeyB1bmlxdWVLZXk6dW5pcXVlS2V5Lm5hbWUsICB2YWx1ZXM6IG5ld1ZhbHVlIH0pXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICh7ZXJyb3J9KT0+e1xuICAgICAgICAgIHJldHVybiBlcnJvclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnc3VjY2Vzcyc7XG4gICAgICB9KTtcbiAgfVxuICBnZXRTb2Z0Q29kaW5nVmFsdWUodmFsdWUsIHJvdyl7XG4gICAgbGV0IHJldHVyblZhbHVlO1xuICAgIGlmKHZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSYmdmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygnfScpKXtcbiAgICAgIHZhbHVlPXZhbHVlLnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKTtcbiAgICAgIGxldCByb3dLZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGxldCBrZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICByZXR1cm5WYWx1ZT1yb3dba2V5XTtcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVyblZhbHVlPXZhbHVlXG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgZHJvcGRvd24gZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGREcm9wZG93bkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgIDogJ2xhYmVsJztcbiAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA6ICd2YWx1ZSc7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV04sXG4gICAgICAgIGRhdGE6XG4gICAgICAgICAgIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhZHJvcERvd25Qcm9wICYmIGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgIDogY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gZHJvcERvd25Qcm9wO1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgY29sdW1uSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgICB9XG4gIH1cbiAgLy8gYWRkIE11bHRpU2VsZWN0RHJvcERvd24gZ3JpZCBjb2x1bW5cbiAgYWRkTXVsdGlTZWxlY3REcm9wRG93bkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgbXVsdGlTZWxlY3RQcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgOiAnbGFiZWwnO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgIDogJ3ZhbHVlJztcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1Q7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1QsXG4gICAgICAgIGRhdGE6XG4gICAgICAgICAgIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhbXVsdGlTZWxlY3RQcm9wICYmIGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgIDogY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChtdWx0aVNlbGVjdFByb3ApIHtcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gbXVsdGlTZWxlY3RQcm9wO1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IG11bHRpU2VsZWN0UHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gbXVsdGlTZWxlY3RQcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBtdWx0aVNlbGVjdFByb3AuZmlsdGVycztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgY29sdW1uSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgICB9XG4gIH1cblxuICBzaG93RmlsdGVySWNvbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uSW5mby5maWx0ZXIgJiYgY29sdW1uSW5mby5maWx0ZXIuc2hvd0ZpbHRlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZXREcm9wZG93bkRhdGEoXG4gICAgY29sdW1uOiBJR3JpZENvbHVtbixcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZVByb3A6IHN0cmluZyxcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcbiAgICBmaWx0ZXJzOiBhbnlbXSxcbiAgICByb3c/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICk6IFByb21pc2U8YW55PiB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25TZXJ2aWNlXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMpXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX2RhdGEnXSA9IHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4uZGF0YSA9IHJlcztcbiAgICAgICAgICBpZiAoY29sdW1uLmZpbHRlciAmJiAoY29sdW1uLmZpbHRlci50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ211bHRpLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICBjb2x1bW4uZmlsdGVyLmRhdGEgPSByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW4pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCBjb2x1bW4gd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkRmlsdGVyQ29sdW1uKGZpbHRlckNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb25zdCBjb2x1bW46IGFueSA9IHtcbiAgICAgIGZpZWxkOiBmaWx0ZXJDb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBmaWx0ZXJDb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIGZpbHRlcjogeyB0eXBlOiBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlciB9LFxuICAgICAgZmlsdGVyaW5nOiBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlcmluZyxcbiAgICAgIGhpZGRlbjogZmlsdGVyQ29sdW1uSW5mby5oaWRkZW4sXG4gICAgICBzdHlsZTogZmlsdGVyQ29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHRhYmxlQWxpYXM6IGZpbHRlckNvbHVtbkluZm8udGFibGVBbGlhcyxcbiAgICAgIHBlcm1pc3Npb25zOiBmaWx0ZXJDb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgIH07XG5cbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGRhdGUgZ3JpZCBjb2x1bW4gd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkRGF0ZUNvbHVtbihkYXRlQ29sdW1uSW5mbzogYWRkRmlsdGVyQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XG4gICAgICBmaWVsZDogZGF0ZUNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGRhdGVDb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIHR5cGU6IGRhdGVDb2x1bW5JbmZvLnR5cGUgPyBkYXRlQ29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEUsXG4gICAgICBmaWx0ZXJpbmc6IGRhdGVDb2x1bW5JbmZvLmZpbHRlcmluZyxcbiAgICAgIGZpbHRlcjogeyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVIgfSxcbiAgICAgIGZvcm1hdDogZGF0ZUNvbHVtbkluZm8uZm9ybWF0LFxuICAgICAgc3R5bGU6IGRhdGVDb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdGFibGVBbGlhczogZGF0ZUNvbHVtbkluZm8udGFibGVBbGlhcyxcbiAgICAgIGRpc2FibGVkOiBkYXRlQ29sdW1uSW5mby5kaXNhYmxlZCxcbiAgICAgIGFsbG93U2F2ZTogZGF0ZUNvbHVtbkluZm8uYWxsb3dTYXZlLFxuICAgICAgcGVybWlzc2lvbnM6IGRhdGVDb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgICAgY29tcG9uZW50OiBkYXRlQ29sdW1uSW5mby5jb21wb25lbnQsXG4gICAgICBzaG93VGltZTogZGF0ZUNvbHVtbkluZm8uc2hvd1RpbWUsXG4gICAgICB0aW1lT25seTogZGF0ZUNvbHVtbkluZm8udGltZU9ubHksXG4gICAgICBkYXRhOiBkYXRlQ29sdW1uSW5mby5kYXRhLFxuICAgICAgaGlkZGVuOiBkYXRlQ29sdW1uSW5mby5oaWRkZW4sXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgc2V0TG9va1VwRmlsdGVyKGNvbHVtbjogYW55LCBkaWFsb2dTZXJ2aWNlOiBhbnksIGdsb2JhbEZpbHRlckxvb2t1cDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGNvbHVtbi5sb29rdXBDb250cm9sKSB7XG4gICAgICBsZXQgZGF0YVZhbHVlOiBhbnlbXSA9IFtdO1xuICAgICAgbGV0IGRhdGFLZXk6IGFueVtdID0gW107XG4gICAgICBsZXQgZGF0YSA9IGNvbHVtbi5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhO1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgaWYgKGRhdGEgJiYga2V5cz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhW2tleV0udG9TdHJpbmcoKS5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgICBkYXRhVmFsdWUudW5zaGlmdChkYXRhW2tleV0pO1xuICAgICAgICAgICAgZGF0YUtleS51bnNoaWZ0KGtleSk7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVmID0gZGlhbG9nU2VydmljZS5vcGVuKFxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5jb21wb25lbnQsXG4gICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICk7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSBkaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQocmVmKTtcbiAgICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnQgPSBkaWFsb2dSZWY/Lmluc3RhbmNlIGFzIER5bmFtaWNEaWFsb2dDb21wb25lbnQ7XG4gICAgICBjb25zdCBhcmlhTGFiZWxsZWRCeSA9IGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcbiAgICAgIGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkgPSAoKSA9PiBhcmlhTGFiZWxsZWRCeTtcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkYXRhS2V5Py5sZW5ndGggPiAwICYmIGRhdGFWYWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF0YUtleS5mb3JFYWNoKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGRhdGFWYWx1ZS5mb3JFYWNoKCh2YWx1ZSwgdmFsdWVJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXlJbmRleCA9PT0gdmFsdWVJbmRleCkge1xuICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX2ZpbHRlcicpPy5mb2N1cygpO1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgIGNvbHVtbj8ubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgcmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGdsb2JhbEZpbHRlckxvb2t1cCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlVHdvID0gdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29sdW1uLnZhbHVlID0gdmFsdWU/LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgIDogcmVzW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICBjb25zdCBnbG9iYWxGaWx0ZXJMb29rdXBJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZCk7XG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlckxvb2t1cElucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB2YWx1ZT8udmFsdWVcbiAgICAgICAgICAgICAgICA/IHZhbHVlLnZhbHVlXG4gICAgICAgICAgICAgICAgOiByZXNbZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoeyBlcnJvciB9OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IEh5cGVybGluayBmaWVsZCBhcyBhIHBhcmFtIFZhbHVlXG4gIHNldEZpZWxkQXNMaW5rUGFyYW0oY29sdW1uczogYW55LCBmaWVsZDogc3RyaW5nLCByZXNwb25zZTogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY29sdW1ucyAmJlxuICAgICAgY29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICBmaWVsZCAmJlxuICAgICAgcmVzcG9uc2UucmVjb3JkcyAmJlxuICAgICAgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3JkcykuZm9yRWFjaCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeDogYW55KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4gICAgICAgIGlmIChvYmogJiYgb2JqLnBhcmFtcykge1xuICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmoucGFyYW1zKTtcbiAgICAgICAgICBrZXlzLmZvckVhY2goKGtleTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAob2JqLnBhcmFtc1trZXldICYmIG9iai5wYXJhbXNba2V5XS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gb2JqLnBhcmFtc1trZXldXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBvYmoucGFyYW1zW2tleV0gPSByZXNbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYXNBbnlMaW5rQ29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucyAmJlxuICAgICAgY29sdW1ucy5zb21lKFxuICAgICAgICAoeCkgPT5cbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLklGUkFNRSB8fFxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8XG4gICAgICAgICAgKHgubGlua0lkICYmIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzZXRIeXBlcmxpbmtzKGZldGNoUmVzcG9uc2U6IGFueSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSwgbGlua1BhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIGxldCByZWNvcmRzOiBhbnkgPSBbXTtcbiAgICBsZXQgZGF0YSA9XG4gICAgICBmZXRjaFJlc3BvbnNlICYmIGZldGNoUmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXREYXRhRmllbGRzKGZldGNoUmVzcG9uc2UucmVjb3JkcylcbiAgICAgICAgOiBbXTtcbiAgICBsZXQgbmV3Um93OiBhbnk7XG5cbiAgICBpZihkYXRhPy5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiB0aGlzLmh5cGVybGlua1NlcnZpY2VcbiAgICAgIC5hZGRIeXBlcmxpbmtzKGNvbHVtbnMsIGZldGNoUmVzcG9uc2U/LnJlY29yZHMpXG4gICAgICAudGhlbigobGlua1Jlc3BvbnNlczogYW55KSA9PiB7XG4gICAgICAgIGRhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldExpbmtJZCA9IGZldGNoUmVzcG9uc2U/LnJlY29yZHNbMF1bY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubGlua0lkO1xuICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICAgICAgICAgIGNvbC5maWVsZCA9IGNvbC5maWVsZCA/IGNvbC5maWVsZCA6IGNvbC5oZWFkZXI7XG4gICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXSA9IHsgLi4uY29sIH07XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAmJiByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldID8gcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICAgIDogY29sLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgICBsZXQgY29sdW1uRGF0YSA9IHsgLi4uY29sPy5kYXRhIH07XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5EYXRhICYmIGNvbHVtbkRhdGEuZGF0YSkge1xuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlhbG9nRGF0YSA9IHV0aWxpdGllcy5maW5kS2V5c0FuZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgY29sdW1uRGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgcm93XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlua1Jlc3BvbnNlcykgJiYgbGlua1Jlc3BvbnNlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsaW5rUmVzcG9uc2VzLmZvckVhY2goKGxpbmtSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLklGUkFNRSB8fFxuICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCkgJiZcbiAgICAgICAgICAgICAgICAgIGNvbC5saW5rSWQgJiZcbiAgICAgICAgICAgICAgICAgIChjb2wubGlua0lkID09PSBsaW5rUmVzcG9uc2UubGlua0lkIHx8XG4gICAgICAgICAgICAgICAgICAgIHNldExpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtS2V5czogc3RyaW5nW10gPSBsaW5rUGFyYW1zICYmIE9iamVjdC5rZXlzKGxpbmtQYXJhbXMpPy5sZW5ndGggPyBPYmplY3Qua2V5cyhsaW5rUGFyYW1zKSA6IGNvbC5wYXJhbXMgPyBPYmplY3Qua2V5cyhjb2wucGFyYW1zKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGluazogYW55ID0gdXRpbGl0aWVzLnNldEh5cGVybGluayhcbiAgICAgICAgICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBsaW5rUmVzcG9uc2UudXJsLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbC5wYXJhbXNcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5oeXBlcmxpbmsgPSBsaW5rO1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sLmZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVjb3Jkcy5wdXNoKG5ld1Jvdyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVjb3JkcztcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgIH0pXG4gICAgfVxuICAgIFxuICB9XG5cbiAgLy9zZXQgcm93cyB0byByZXNwb25zZS5yZWNvcmRzXG4gIGFzeW5jIHNldFJvd0RhdGEoY29sdW1uczogSUdyaWRDb2x1bW5bXSwgcmVzcG9uc2U6IGFueSkge1xuICAgIGlmKHJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMCl7XG4gICAgICBpZiAodGhpcy5oYXNBbnlMaW5rQ29sdW1uKGNvbHVtbnMpKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNldEh5cGVybGlua3MocmVzcG9uc2UsIGNvbHVtbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnJlY29yZHM7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgcmV0dXJuIFtdXG4gIH1cbiAgIFxuXG4gIC8vIGFkZCBncmlkIGdsb2JhbCBmaWx0ZXIgd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRVcGRhdGUgPSB7XG4gICAgICBmaWVsZDogZ3JpZFVwZGF0ZUluZm8uZmllbGQsXG4gICAgICBkaXNwbGF5VGV4dDogZ3JpZFVwZGF0ZUluZm8uZGlzcGxheVRleHQsXG4gICAgICB0eXBlOiBncmlkVXBkYXRlSW5mby50eXBlLFxuICAgICAgZGF0YTogZ3JpZFVwZGF0ZUluZm8uZGF0YSxcbiAgICAgIHZhbHVlOiBncmlkVXBkYXRlSW5mby52YWx1ZSxcbiAgICAgIHZhbHVlVHdvOiBncmlkVXBkYXRlSW5mby52YWx1ZVR3byxcbiAgICAgIG1hdGNoTW9kZTogZ3JpZFVwZGF0ZUluZm8ubWF0Y2hNb2RlLFxuICAgICAgb3BlcmF0b3I6IGdyaWRVcGRhdGVJbmZvLm9wZXJhdG9yLFxuICAgICAgdGFibGVBbGlhczogZ3JpZFVwZGF0ZUluZm8udGFibGVBbGlhcyxcbiAgICAgIG9wdGlvbkxhYmVsOiBncmlkVXBkYXRlSW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBncmlkVXBkYXRlSW5mby5vcHRpb25WYWx1ZSxcbiAgICAgIG9uRm9jdXNPdXQ6IGdyaWRVcGRhdGVJbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvblJldHVybjogZ3JpZFVwZGF0ZUluZm8ub25SZXR1cm4sXG4gICAgICBmaWx0ZXJpbmc6IGdyaWRVcGRhdGVJbmZvLmZpbHRlcmluZyxcbiAgICAgIGNvbHVtbjogZ3JpZFVwZGF0ZUluZm8uY29sdW1uLFxuICAgICAgZGF5UmFuZ2U6IGdyaWRVcGRhdGVJbmZvLmRheVJhbmdlLFxuICAgICAgZnJvbUZpZWxkOiBncmlkVXBkYXRlSW5mby5mcm9tRmllbGQsXG4gICAgICB0b0ZpZWxkOiBncmlkVXBkYXRlSW5mby50b0ZpZWxkLFxuICAgICAgbG9va3VwQ29udHJvbDogZ3JpZFVwZGF0ZUluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGFsbG93U2VhcmNoOiBncmlkVXBkYXRlSW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGRpc2FibGVkOiBncmlkVXBkYXRlSW5mby5kaXNhYmxlZCxcbiAgICAgIGhpZGRlbjogZ3JpZFVwZGF0ZUluZm8uaGlkZGVuLFxuICAgICAgbGFiZWxUZXh0OiBncmlkVXBkYXRlSW5mby5sYWJlbFRleHQsXG4gICAgICBwcmVmaXg6IGdyaWRVcGRhdGVJbmZvLnByZWZpeCxcbiAgICAgIGNvbG9yOiBncmlkVXBkYXRlSW5mby5jb2xvcixcbiAgICAgIGZvcm1hdDogZ3JpZFVwZGF0ZUluZm8uZm9ybWF0LFxuICAgICAgaW50ZXJmYWNlVHlwZTogJ2J1bGtVcGRhdGUnXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGlucHV0IGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVJbnB1dChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgZHJvcGRvd24gZmllbGRcbiAgYWRkR3JpZFVwZGF0ZURyb3Bkb3duKFxuICAgIGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSxcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IGFueSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTjtcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gZHJvcERvd25Qcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBncmlkVXBkYXRlSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzLCBcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGRyb3Bkb3duIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVCb29sZWFuKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBudW1lcmljIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVOdW1lcmljKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgY2FsZW5kYXIgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUNhbGVuZGFyKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vYWRkIGdyaWQgdXBkYXRlIGxvb2t1cCBmaWVsZFxuICBhZGRHcmlkVXBkYXRlTG9va3VwKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSl7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVRcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pXG4gIH1cbiAgXG4gIC8vIGFkZCBncmlkIGdsb2JhbCBmaWx0ZXIgd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGNvbnN0IGNvbHVtbjogYWRkR2xvYmFsRmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGdsb2JhbEZpbHRlckluZm8uZmllbGQsXG4gICAgICBkaXNwbGF5VGV4dDogZ2xvYmFsRmlsdGVySW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIGRpc3BsYXlTdHlsZTpnbG9iYWxGaWx0ZXJJbmZvLmRpc3BsYXlTdHlsZSxcbiAgICAgIHZhbGlkYXRpb25zOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbGlkYXRpb25zLFxuICAgICAgdHlwZTogZ2xvYmFsRmlsdGVySW5mby50eXBlLFxuICAgICAgZGF0YTogZ2xvYmFsRmlsdGVySW5mby5kYXRhLFxuICAgICAgdmFsdWU6IGdsb2JhbEZpbHRlckluZm8udmFsdWUsXG4gICAgICB2YWx1ZVR3bzogZ2xvYmFsRmlsdGVySW5mby52YWx1ZVR3byxcbiAgICAgIG1hdGNoTW9kZTogZ2xvYmFsRmlsdGVySW5mby5tYXRjaE1vZGUsXG4gICAgICBvcGVyYXRvcjogZ2xvYmFsRmlsdGVySW5mby5vcGVyYXRvcixcbiAgICAgIHRhYmxlQWxpYXM6IGdsb2JhbEZpbHRlckluZm8udGFibGVBbGlhcyxcbiAgICAgIG9wdGlvbkxhYmVsOiBnbG9iYWxGaWx0ZXJJbmZvLm9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9uVmFsdWU6IGdsb2JhbEZpbHRlckluZm8ub3B0aW9uVmFsdWUsXG4gICAgICAgb25DbGljazpnbG9iYWxGaWx0ZXJJbmZvLm9uQ2xpY2ssXG4gICAgICBvbkZvY3VzT3V0OiBnbG9iYWxGaWx0ZXJJbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvblJldHVybjogZ2xvYmFsRmlsdGVySW5mby5vblJldHVybixcbiAgICAgIGZpbHRlcmluZzogZ2xvYmFsRmlsdGVySW5mby5maWx0ZXJpbmcsXG4gICAgICBjb2x1bW46IGdsb2JhbEZpbHRlckluZm8uY29sdW1uLFxuICAgICAgZGF5UmFuZ2U6IGdsb2JhbEZpbHRlckluZm8uZGF5UmFuZ2UsXG4gICAgICBmcm9tRmllbGQ6IGdsb2JhbEZpbHRlckluZm8uZnJvbUZpZWxkLFxuICAgICAgdG9GaWVsZDogZ2xvYmFsRmlsdGVySW5mby50b0ZpZWxkLFxuICAgICAgbG9va3VwQ29udHJvbDogZ2xvYmFsRmlsdGVySW5mby5sb29rdXBDb250cm9sLFxuICAgICAgYWxsb3dTZWFyY2g6IGdsb2JhbEZpbHRlckluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBkaXNhYmxlZDogZ2xvYmFsRmlsdGVySW5mby5kaXNhYmxlZCxcbiAgICAgIGhpZGRlbjogZ2xvYmFsRmlsdGVySW5mby5oaWRkZW4sXG4gICAgICBsYWJlbFRleHQ6IGdsb2JhbEZpbHRlckluZm8ubGFiZWxUZXh0LFxuICAgICAgcHJlZml4OiBnbG9iYWxGaWx0ZXJJbmZvLnByZWZpeCxcbiAgICAgIGNvbG9yOiBnbG9iYWxGaWx0ZXJJbmZvLmNvbG9yLFxuICAgICAgZm9ybWF0OiBnbG9iYWxGaWx0ZXJJbmZvLmZvcm1hdCxcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGlucHV0IGZpbHRlclxuICBhZGRHbG9iYWxJbnB1dEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBkcm9wZG93biBmaWx0ZXJcbiAgYWRkR2xvYmFsRHJvcGRvd25GaWx0ZXIoXG4gICAgZ2xvYmFsRmlsdGVySW5mbzogSUdsb2JhbEZpbHRlcixcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IGFueSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOO1xuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBsZXQgc29ydHMgPSBkcm9wRG93blByb3Auc29ydHM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGdsb2JhbEZpbHRlckluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gICAgfVxuICB9XG4gIC8vYWRkIGdsb2JhbCByYWRpbyBidXR0b24gZmlsdGVyXG4gIGFkZEdsb2JhbFNlbGVjdEJ1dHRvbkZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuU0VMRUNUQlVUVE9OO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuICAvLyBhZGQgZ2xvYmFsIE11bHRpU2VsZWN0IGRyb3Bkb3duIGZpbHRlclxuICBhZGRHbG9iYWxNdWx0aVNlbGVjdERyb3BEb3duRmlsdGVyKFxuICAgIGdsb2JhbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsXG4gICAgbXVsdGlTZWxlY3RQcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDtcbiAgICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBtdWx0aVNlbGVjdFByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IG11bHRpU2VsZWN0UHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gbXVsdGlTZWxlY3RQcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBnbG9iYWxGaWx0ZXJJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIGdldERyb3Bkb3duRGF0YShcbiAgICBmaWVsZEluZm86IGFueSxcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZVByb3A6IHN0cmluZyxcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcbiAgICBmaWx0ZXJzOiBhbnksXG4gICAgc29ydHM6IElHcmlkU29ydFtdID0gW10sIFxuICAgIGdyaWRVcGRhdGVGaWVsZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzLCBzb3J0cylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBmaWVsZEluZm8uZGF0YSA9IHJlcztcbiAgICAgICAgcmV0dXJuIGdyaWRVcGRhdGVGaWVsZCA/IHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGZpZWxkSW5mbykgOiB0aGlzLmFkZEdsb2JhbEZpbHRlcihmaWVsZEluZm8pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICByZXR1cm4gZ3JpZFVwZGF0ZUZpZWxkID8gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZmllbGRJbmZvKSA6IHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KTtcbiAgfVxuICBcbiAgLy8gYWRkIGdsb2JhbCBmaWx0ZXIgU3BhY2UgRmllbGRcbiAgYWRkR2xvYmFsRmlsdGVyU3BhY2VGaWVsZChnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuU1BBQ0VSO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgYm9vbGVhbiBmaWx0ZXJcbiAgYWRkR2xvYmFsQm9vbGVhbkZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxEYXRlUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG4gIFxuICAvLyBhZGQgTnVtZXJpYyBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTnVtZXJpY1JhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuICAvLyBhZGQgTnVtZXJpYyBpbnB1dCBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxOdW1lcmljSW5wdXQoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgTG9va1VwIEZpZWxkIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbExvb2t1cEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gICAvL2FkZCBjYWxlbmRhciBmaWx0ZXIgZm9yIGdsb2JhbCBmaWx0ZXJcbiAgIGFkZEdsb2JhbERhdGVGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKXtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGU9R3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueSwgZGF0YUtleTogc3RyaW5nID0gXCJcIikge1xuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgICAgcmVzcG9uc2UubWFwKCh4OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHggPz8ge30pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBPYmplY3Qua2V5cyh4KT8ucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50LnRvTG93ZXJDYXNlKCldOiB4W2N1cnJlbnRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0YUtleSAmJlxuICAgICAgICAgICAgZGF0YUtleS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhT2JqZWN0LmtleXMocmVzdWx0KT8uaW5jbHVkZXMoZGF0YUtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJlc3VsdFtkYXRhS2V5XSA9IGluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzZXRDb2x1bW5GaWVsZHMoY29sdW1uczogYW55W10pIHtcbiAgICBsZXQgY29sdW1uOiBhbnkgPSBbXTtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBjb2x1bW4ucHVzaCh7IC4uLmNvbCwgZmllbGQ6IGNvbD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuICB9XG5cbiAgLy8gY2hhbmdlIGxpbmtJZCBpbiBlZGl0IG1vZGUsIGlmIGNoYW5nZUxpbmsgaXMgdHJ1ZSB0aGVuIGl0IGNoYW5nZSB0aGUgZWRpdGVkIHJvdyBoeXBlcmxpbmsgdmFsdWVcbiAgc2V0TGlua0lkKFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBsaW5rSWQ6IHN0cmluZyxcbiAgICByZWNvcmQ6IGFueSxcbiAgICB1c2VyczogYW55LFxuICAgIHBhcmFtczogYW55ID0gbnVsbCxcbiAgICBjaGFuZ2VMaW5rOiBib29sZWFuID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNvbHVtbi5saW5rSWQgPSBsaW5rSWQ7XG4gICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgY29sdW1uLnBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SHlwZXJsaW5rcyh7IHJlY29yZHM6IFtyZWNvcmRdIH0sIGNvbHVtbnMpLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICBpZiAoY2hhbmdlTGluaykge1xuICAgICAgICBkZWxldGUgcmVzWzBdW2ZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xuICAgICAgICBsZXQgaW5kZXggPSB1c2Vycy5maW5kSW5kZXgoXG4gICAgICAgICAgKGk6IGFueSkgPT4gaVtmaWVsZC50b0xvd2VyQ2FzZSgpXSA9PT0gcmVjb3JkW2ZpZWxkLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAodXNlcnNbaW5kZXhdW2ZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICAgICAgdXNlcnNbaW5kZXhdW2ZpZWxkICsgJ19vYmonXS5oeXBlcmxpbmsgPVxuICAgICAgICAgICAgICByZXNbMF1bZmllbGQgKyAnX29iaiddLmh5cGVybGluaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBncmlkIGRhdGEgYW5kIHNldCBzZWxlY3RlZCByb3cgYmFzZWQgb24gc2VsZWN0aW9uIHZhbHVlXG4gIHNldERhdGFXaXRoU2VsZWN0ZWRSb3cocmVjb3JkczogYW55LCBjb25maWdEYXRhOiBhbnkpIHtcbiAgICBpZiAoKGNvbmZpZ0RhdGE/LnZhbHVlUHJvcCB8fCBjb25maWdEYXRhPy5sYWJlbFByb3ApICYmIGNvbmZpZ0RhdGEuZGF0YS5zZWxlY3Rpb24pIHtcbiAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMocmVjb3JkKT8uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBjb25maWdEYXRhLmxhYmVsUHJvcCA/IGNvbmZpZ0RhdGEubGFiZWxQcm9wPy50b0xvd2VyQ2FzZSgpIDogY29uZmlnRGF0YS52YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY29uZmlnRGF0YS5kYXRhLnZhbHVlICYmXG4gICAgICAgICAgICAgIHJlY29yZFtrZXldID09PSBjb25maWdEYXRhLmRhdGEudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkW2tleV0/LnRvU3RyaW5nKCkgPT09IGNvbmZpZ0RhdGEuZGF0YS5zZWxlY3Rpb24/LnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgcmVjb3JkWydoaWdobGlnaHRSb3cnXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbiAgc2V0VGFibGVBbGlhcyhmaWVsZDogc3RyaW5nLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICh4OiBhbnkpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG5cbiAgICAgIGlmIChjb2x1bW4gIT0gbnVsbCAmJiBjb2x1bW4udGFibGVBbGlhcyAmJiBjb2x1bW4udGFibGVBbGlhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4udGFibGVBbGlhcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBzZXRHcmlkUHJvcFZhbHVlcyhcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdLFxuICAgIHByb3BzOiBJR3JpZFByb3BbXSxcbiAgICBmaWx0ZXI/OiBJR3JpZFByb3BGaWx0ZXIsXG4gICAgcmVjb3Jkcz86IGFueVtdXG4gICkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCAmJiBwcm9wcyAmJiBwcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaXNNYXRjaGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyICYmIGZpbHRlci5maWVsZCAmJiByZWNvcmRzICYmIHJlY29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBpc01hdGNoZWQgPSByZWNvcmRzLnNvbWUoXG4gICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIoeClbZmlsdGVyLmZpZWxkLnRvTG93ZXJDYXNlKCldID09PVxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcy5tYXAoKHByb3A6IElHcmlkUHJvcCkgPT4ge1xuICAgICAgICBsZXQgY29sOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgIWlzTWF0Y2hlZCAmJiAhZmlsdGVyPy5maWVsZCkge1xuICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaGVkKSB7XG4gICAgICAgICAgaWYgKHByb3AuZmllbGQpIHtcbiAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlcj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wgJiYgY29sLmhhc093blByb3BlcnR5KHByb3AubmFtZSkpIHtcbiAgICAgICAgICBjb2xbcHJvcC5uYW1lXSA9IHByb3AudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBncmlkIHJvdyBwcm9wVmFsdWVzXG4gIHNldEdyaWRSb3dQcm9wVmFsdWUocm93OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcm9wczogSUdyaWRSb3dQcm9wW10sIGNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXSkge1xuICAgIGxldCBzZXRMaW5rSWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgbGlua0lkUmVzOiBhbnk7XG4gICAgcHJvcHM/LmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgIHNldExpbmtJZCA9IGZhbHNlO1xuICAgICAgaWYgKHByb3AucHJvcE5hbWUgJiYgcHJvcC5wcm9wTmFtZSA9PT0gRUdyaWRSb3dQcm9wTmFtZS5MSU5LSUQpIHtcbiAgICAgICAgc2V0TGlua0lkID0gdHJ1ZTtcbiAgICAgICAgbGlua0lkUmVzID0gdGhpcy5zZXRIeXBlcmxpbmtzKHsgcmVjb3JkczogW3Jvd10gfSwgY29sdW1ucywgcHJvcC5wYXJhbXMpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BOYW1lICYmICFwcm9wLmxhYmVsICYmIChwcm9wLnByb3BWYWx1ZSB8fCBwcm9wLnByb3BWYWx1ZSA9PT0gZmFsc2UgfHwgcHJvcC5wcm9wVmFsdWUgPT09ICcnKSkge1xuICAgICAgICBpZiAocHJvcC5maWVsZCAmJiByb3cpIHtcbiAgICAgICAgICBsZXQgZmllbGROYW1lID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXk/LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICBsZXQgZmllbGROYW1lT2JqID0gZmllbGROYW1lPy5pbmNsdWRlcygnX29iaicpID8gZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpIDogZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgIGlmICghZmllbGROYW1lKSB7XG4gICAgICAgICAgICBjb25zdCByb3dPYmogPSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgIGZpZWxkTmFtZU9iaiA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleTogYW55KSA9PiAoa2V5Py50b0xvd2VyQ2FzZSgpID09PSByb3dPYmopICYmIChyb3dbcm93T2JqXT8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fCByb3dbcm93T2JqXT8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLklGUkFNRSB8fCByb3dbcm93T2JqXT8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspKTtcbiAgICAgICAgICAgIGlmIChmaWVsZE5hbWVPYmopIHtcbiAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGROYW1lT2JqO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmllbGROYW1lKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uaW5jbHVkZXMoZmllbGROYW1lT2JqKSkge1xuICAgICAgICAgICAgICByb3dbZmllbGROYW1lT2JqXSA9IHsgLi4ucm93W2ZpZWxkTmFtZU9ial0sIHRleHQ6IHJvd1tmaWVsZE5hbWVdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbZmllbGROYW1lT2JqXSA9IHsgdGV4dDogcm93W2ZpZWxkTmFtZV0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbnM/LnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BGaWVsZCA9IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBwcm9wRmllbGRPYmogPSBwcm9wRmllbGQgKyAnX29iaic7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uaW5jbHVkZXMoZmllbGROYW1lT2JqKSkge1xuICAgICAgICAgICAgICByb3dbcHJvcEZpZWxkT2JqXSA9IHsgLi4ucm93W3Byb3BGaWVsZE9ial0sIHRleHQ6IHJvd1twcm9wLmZpZWxkXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W3Byb3BGaWVsZE9ial0gPSB7IHRleHQ6IHJvd1twcm9wLmZpZWxkXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHByb3A/LmFjdGlvbiA9PT0gRUdyaWRSb3dBY3Rpb24uREVMRVRFQlROKSB7XG4gICAgICAgICAgICByb3dbcHJvcC5hY3Rpb25dID0gcHJvcC5wcm9wVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHByb3A/LmFjdGlvbiA9PT0gRUdyaWRSb3dBY3Rpb24uRURJVEJUTikge1xuICAgICAgICAgICAgcm93W3Byb3AuYWN0aW9uXSA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wLmxhYmVsKSB7XG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gcHJvcC5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgaWYgKHByb3AucHJvcE5hbWUgPT09IEVHcmlkUm93UHJvcE5hbWUuUkVQT1JUTkFNRSkge1xuICAgICAgICAgIHJvd1twcm9wTmFtZV0gPSB7IC4uLnJvd1twcm9wTmFtZV0sIHJlcG9ydE5hbWU6IHByb3A/LnByb3BWYWx1ZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKHByb3AucHJvcE5hbWUgPT09IEVHcmlkUm93UHJvcE5hbWUuUkVQT1JUUEFSQU0gJiYgcHJvcD8ucGFyYW1zKSB7XG4gICAgICAgICAgcm93W3Byb3BOYW1lXSA9IHsgLi4ucm93W3Byb3BOYW1lXSwgcmVwb3J0UGFyYW06IHByb3AucGFyYW1zIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXNldExpbmtJZCkge1xuICAgICAgcmV0dXJuIHJvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxpbmtJZFJlcztcbiAgICB9XG4gIH1cblxuICAvLyByZW1vdmUgdGhlIHJvd0FjdGlvbnMgZnJvbSB0aGUgcmVjb3Jkc1xuICByZW1vdmVSb3dBY3Rpb25zKHJlY29yZHMpIHtcbiAgICBpZiAocmVjb3Jkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKHJvdy5yb3dBY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGUgcm93Wydyb3dBY3Rpb24nXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbiAgZXhwb3J0RXhjZWwocm93c0RhdGEsIGNvbHVtbnMsIHJlcG9ydE5hbWU6IHN0cmluZyA9IEVHcmlkRXhjZWwuRVhQT1JUKSB7XG4gICAgaW1wb3J0KCd4bHN4JykudGhlbigoeGxzeCkgPT4ge1xuICAgICAgY29uc3Qgd29ya3NoZWV0OiBXb3JrU2hlZXQgPSB4bHN4LnV0aWxzLmpzb25fdG9fc2hlZXQocm93c0RhdGEpO1xuICAgICAgbGV0IHJvd0luZGV4ID0gMDtcbiAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIGxldCBjb2xJbmRleCA9IDA7XG4gICAgICAgIGNvbHVtbnM/LmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sLmhlYWRlcl07XG4gICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiBjZWxsVmFsdWUgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IDAgJiYgY2VsbFZhbHVlLmluZGV4T2YoJ3wnKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtUZXh0OiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgICAgIGxldCBsaW5rVXJsOiBzdHJpbmcgPSBjZWxsVmFsdWUuc3BsaXQoJ3wnKVsxXTtcbiAgICAgICAgICAgIGlmIChsaW5rVXJsICYmICFsaW5rVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICBpZiAoIWxpbmtVcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgbGlua1VybCA9ICcvJyArIGxpbmtVcmw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGlua1VybCA9XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICtcbiAgICAgICAgICAgICAgICAnLy8nICtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgK1xuICAgICAgICAgICAgICAgIGxpbmtVcmw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjZWxsQWRkcmVzcyA9IHhsc3gudXRpbHMuZW5jb2RlX2NlbGwoe1xuICAgICAgICAgICAgICBjOiBjb2xJbmRleCxcbiAgICAgICAgICAgICAgcjogcm93SW5kZXggKyAxLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHdvcmtzaGVldFtjZWxsQWRkcmVzc10gPSB7XG4gICAgICAgICAgICAgIGY6IGA9SFlQRVJMSU5LKFwiJHtsaW5rVXJsfVwiLCBcIiR7bGlua1RleHR9XCIpYCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgIH0pO1xuICAgICAgICByb3dJbmRleCsrO1xuICAgICAgfSk7XG4gICAgICBjb25zdCB3b3JrYm9vayA9IHtcbiAgICAgICAgU2hlZXRzOiB7IHNoZWV0MTogd29ya3NoZWV0IH0sXG4gICAgICAgIFNoZWV0TmFtZXM6IFsnc2hlZXQxJ10sXG4gICAgICB9O1xuICAgICAgY29uc3QgZXhjZWxCdWZmZXI6IGFueSA9IHhsc3gud3JpdGUod29ya2Jvb2ssIHtcbiAgICAgICAgYm9va1R5cGU6ICd4bHN4JyxcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIHJlcG9ydE5hbWUpO1xuICAgIH0pO1xuICB9XG4gIFxuICAvKipcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChzdWItbWV0aG9kKVxuICAgKi9cbiAgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCByZXBvcnROYW1lKTogdm9pZCB7XG4gICAgbGV0IEVYQ0VMX1RZUEUgPVxuICAgICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBFWENFTF9UWVBFIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSk7XG4gIH1cblxuICBzYXZlQXNUZXh0RmlsZShyb3dzSW5mbzogYW55LCByZXBvcnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZHNUb0Rpc3BsYXkgPSBPYmplY3Qua2V5cyhyb3dzSW5mb1swXSk7XG4gICAgY29uc3QgaGVhZGVyUm93ID0gZmllbGRzVG9EaXNwbGF5LmpvaW4oJ1xcdCcpO1xuICAgIGNvbnN0IGZvcm1hdHRlZFJvd3MgPSByb3dzSW5mby5tYXAoKHJvdykgPT4ge1xuICAgICAgcmV0dXJuIGZpZWxkc1RvRGlzcGxheS5tYXAoKGZpZWxkKSA9PiByb3dbZmllbGRdKS5qb2luKCdcXHQnKTtcbiAgICB9KTtcbiAgICBjb25zdCByb3dzRGF0YSA9IFtoZWFkZXJSb3csIC4uLmZvcm1hdHRlZFJvd3NdLmpvaW4oJ1xcbicpO1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgQmxvYihbcm93c0RhdGFdLCB7IHR5cGU6ICd0ZXh0JyB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIHJlcG9ydE5hbWUpO1xuICB9XG5cbiAgc2F2ZURhdGFBc0Nzdihyb3dzSW5mbzogYW55LCByZXBvcnROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXJvd3NJbmZvIHx8ICFyb3dzSW5mby5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gJywnO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBPYmplY3Qua2V5cyhyb3dzSW5mb1swXSk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKS5maWx0ZXIoayA9PiB7XG4gICAgICBpZiAoY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zLmluY2x1ZGVzKGspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9XG4gICAgICBrZXlzLmpvaW4oc2VwYXJhdG9yKSArXG4gICAgICAnXFxuJyArXG4gICAgICByb3dzSW5mby5tYXAocm93ID0+IHtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKGsgPT4ge1xuICAgICAgICAgIGxldCBjZWxsID0gcm93W2tdID09PSBudWxsIHx8IHJvd1trXSA9PT0gdW5kZWZpbmVkID8gJycgOiByb3dba107XG4gICAgICAgICAgY2VsbCA9IGNlbGwgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICA/IGNlbGwudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgICAgOiBjZWxsLnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1wiXCInKTtcbiAgICAgICAgICBpZiAoY2VsbC5zZWFyY2goLyhcInwsfFxcbikvZykgPj0gMCkge1xuICAgICAgICAgICAgY2VsbCA9IGBcIiR7Y2VsbH1cImA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICB9KS5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICB0aGlzLnNhdmVBc0NzdkZpbGUoY3N2Q29udGVudCwgcmVwb3J0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRvIENTViAoc3ViLW1ldGhvZClcbiAgICovXG5cbiAgc2F2ZUFzQ3N2RmlsZShjc3ZDb250ZW50OiBzdHJpbmcsIHJlcG9ydE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIHJlcG9ydE5hbWUgKyAnLmNzdicpO1xuICB9XG5cbiAgYWRkTmV3Um93KGdyaWROYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIGxldCBhZGRCdXR0b246IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dsb2JhbC1hZGQtYnRuJyArIGdyaWROYW1lKTtcbiAgICBpZiAoYWRkQnV0dG9uICYmIGFkZEJ1dHRvbi5sZW5ndGggPiAwKSB7XG4gICAgICBhZGRCdXR0b25bMF0/LmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgaW5jcmVtZW50Q2FsbHMoKSB7XG4gICAgdGhpcy5udW1iZXJPZkNhbGxzKys7XG4gIH1cblxuICBnZXROdW1iZXJPZkNhbGxzKCkge1xuICAgIHJldHVybiB0aGlzLm51bWJlck9mQ2FsbHM7XG4gIH1cbn0iXX0=