tnx-shared 5.3.292 → 5.3.294

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.
@@ -3,7 +3,7 @@ import { DatePipe } from '@angular/common';
3
3
  import { Injectable, Injector } from '@angular/core';
4
4
  import { TranslateService } from '@ngx-translate/core';
5
5
  import { isArray, isLiteralObject } from '../classes/environment-schema';
6
- import { DropdownOptions, Operator } from '../classes/form-schema';
6
+ import { DropdownControlSchema, DropdownOptions, Operator } from '../classes/form-schema';
7
7
  import { Validation } from '../configs/component-contants';
8
8
  import { ComCtxConstants } from '../configs/component-context.constant';
9
9
  import { Filter } from '../models/grid-info';
@@ -258,11 +258,11 @@ export class CrudService {
258
258
  refFields: schema.refFields,
259
259
  isTreeBaseModel: schema.isTreeBaseModel,
260
260
  // TODO: Cần điền vào không có lỗi không chạy được
261
- selectChildItem: null
261
+ selectChildItem: null,
262
+ isGetAll: !(schema instanceof DropdownControlSchema)
262
263
  });
263
264
  if (result.isServerLoad) {
264
265
  result.pageSize = schema.pageSize;
265
- // result.pageSize = 2;
266
266
  }
267
267
  return result;
268
268
  }
@@ -1010,4 +1010,4 @@ CrudService.ctorParameters = () => [
1010
1010
  { type: NotifierService },
1011
1011
  { type: ModuleConfigService }
1012
1012
  ];
1013
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUdILGVBQWUsRUFDZixRQUFRLEVBR1gsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7OztBQU1yRCxNQUFNLE9BQU8sV0FBVztJQUdwQixZQUNZLFNBQW1CLEVBQ25CLGNBQTZCLEVBQzdCLGNBQTZCLEVBQzdCLFFBQWtCLEVBQ2xCLGdCQUFpQyxFQUNqQyxvQkFBeUM7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QUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3JCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFO2dCQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hCLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xCO3FCQUNJO29CQUNELElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ1osTUFBTTtpQkFDVDthQUNKO1lBQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyx1QkFBK0I7UUFDckQsTUFBTSxJQUFJLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BCLENBQUM7Ozs7WUF4a0NKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBM0JvQixRQUFRO1lBbUJwQixhQUFhO1lBRGIsYUFBYTtZQW5CYixRQUFRO1lBdUJSLGVBQWU7WUFEZixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQge1xuICAgIENvbHVtblNjaGVtYUJhc2UsXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxuICAgIERyb3Bkb3duT3B0aW9ucyxcbiAgICBPcGVyYXRvcixcbiAgICBSZWZGaWVsZCxcbiAgICBUcmVlRGF0YU9wdGlvblxufSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250YW50cyc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMgfSBmcm9tICcuLi9tb2RlbHMvd29ya2Zsb3ctY29yZS1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4vbWFzdGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci5zZXJ2aWNlJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDcnVkU2VydmljZSB7XG4gICAgdXNlSWdub3JlQWxsQmFzZUZpbHRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgICAgIHByaXZhdGUgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXNlSWdub3JlQWxsQmFzZUZpbHRlciA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQudXNlSWdub3JlQWxsQmFzZUZpbHRlciB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IF9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyRGF0ZVRpbWUoZGF0ZXRpbWUsIGZvcm1hdDogJ25vcm1hbCcgfCAnZnJvbU5vdycgPSAnZnJvbU5vdycpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZXRpbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBkYXRldGltZSA9IG5ldyBEYXRlKGRhdGV0aW1lICsgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXkgSEg6bW0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vdzogYW55ID0gbmV3IERhdGUoKTtcbiAgICAgICAgbGV0IG1pbGlzZWNvbmQgPSBub3cgLSBkYXRldGltZTtcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPiAwKSB7XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1bDoGkgZ2nDonkgdHLGsOG7m2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gMzAwMDAgJiYgbWlsaXNlY29uZCA8IDkwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxuICAgICAgICAgICAgICAgIHJldHVybiAnTeG7mXQgcGjDunQgdHLGsOG7m2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcbiAgICAgICAgICAgICAgICAvLyA1IHBow7p0XG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIHBow7p0IHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDMwMDAwMCAmJiBtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApICsgJyBwaMO6dCB0csaw4bubYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA+PSAzNjAwMDAwICYmIG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIGdp4budIHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDE4MDAwMDAwICYmIG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxuICAgICAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKSArICcgZ2nhu50gdHLGsOG7m2MnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICdIw7RtIHF1YSBsw7pjICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gODY0MDAwMDApIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLmdldERhdGUoKSA9PSBub3cuZ2V0RGF0ZSgpIC0gMVxuICAgICAgICAgICAgICAgICAgICAmJiBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldFllYXIoKSA9PSBub3cuZ2V0WWVhcigpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnSMO0bSBxdWEgbMO6YyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGQvTU0veXl5eSBISDptbSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaWxpc2Vjb25kID0gLW1pbGlzZWNvbmQ7XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1bDoGkgZ2nDonkgbuG7r2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gMzAwMDAgJiYgbWlsaXNlY29uZCA8IDkwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxuICAgICAgICAgICAgICAgIHJldHVybiAnTeG7mXQgcGjDunQgbuG7r2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcbiAgICAgICAgICAgICAgICAvLyA1IHBow7p0XG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIHBow7p0IG7hu69hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDMwMDAwMCAmJiBtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApICsgJyBwaMO6dCBu4buvYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA+PSAzNjAwMDAwICYmIG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIGdp4budIG7hu69hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDE4MDAwMDAwICYmIG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxuICAgICAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKSArICcgZ2nhu50gbuG7r2EnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICdOZ8OgeSBtYWkgbMO6YyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDg2NDAwMDAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSAtIDFcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0TW9udGgoKSA9PSBub3cuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAmJiBkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ05nw6B5IG1haSBsw7pjICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkgLSAyXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdIYWkgbmfDoHkgbuG7r2EnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkgLSAzXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdCYSBuZ8OgeSBu4buvYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZC9NTS95eXl5IEhIOm1tJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlclRpbWVzcGFuKGRhdGV0aW1lOiBhbnkpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcnJUaW1lID0gZGF0ZXRpbWUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHJldHVybiBgJHthcnJUaW1lWzBdfToke2FyclRpbWVbMV19YDtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJEYXRlKGRhdGV0aW1lLCBmb3JtYXQ6ICdub3JtYWwnIHwgJ2Zyb21Ob3cnID0gJ25vcm1hbCcpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRldGltZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGRhdGV0aW1lID0gbmV3IERhdGUoZGF0ZXRpbWUgKyAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnZGQvTU0veXl5eScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm93OiBhbnkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXG4gICAgICAgICAgICAmJiBkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGRheXMgPSBkYXRldGltZS5nZXREYXRlKCkgLSBub3cuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgc3dpdGNoIChkYXlzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gbmF5JztcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnTmfDoHkgbWFpJztcbiAgICAgICAgICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gcXVhJztcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSGFpIG5nw6B5IG7hu69hJztcbiAgICAgICAgICAgICAgICBjYXNlIC0yOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0hhaSBuZ8OgeSB0csaw4bubYyc7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IG7hu69hJztcbiAgICAgICAgICAgICAgICBjYXNlIC0zOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5Jyk7XG4gICAgfVxuXG4gICAgaGlkZUNvbnRyb2xBbmRMYWJlbCgpIHtcbiAgICB9XG5cbiAgICBidWlsZEZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgYnVpbGRGaWx0ZXJEYXRlKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IERhdGUpOiBGaWx0ZXIge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWU6IHRoaXMuZ2V0RGF0ZSh2YWx1ZSkgfSk7XG4gICAgfVxuXG4gICAgZ2V0RGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXREYXRlKCl9LyR7dmFsdWUuZ2V0TW9udGgoKSArIDF9LyR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xuICAgIH1cblxuICAgIGJ1aWxkRmlsdGVyRGF0ZUluTGlzdFJhbmdlKGZpZWxkOiBzdHJpbmcsIGFyck1pbk1heDogRGF0ZVtdW10sIG9wZXJhdG9yTGVmdDogc3RyaW5nID0gJ2d0ZScsIG9wZXJhdG9yUmlnaHQ6IHN0cmluZyA9ICdsdGUnKTogRmlsdGVyIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBsb2dpYzogJ29yJyxcbiAgICAgICAgICAgIGZpbHRlcnM6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICBhcnJNaW5NYXguZm9yRWFjaChtaW5NYXggPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RyU3RhcnQgPSB0aGlzLmdldFN0cmluZ0RhdGVWYWx1ZShtaW5NYXhbMF0pO1xuICAgICAgICAgICAgY29uc3Qgc3RyRW5kID0gdGhpcy5nZXRTdHJpbmdEYXRlVmFsdWUobWluTWF4WzFdKTtcbiAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsIHN0clN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLCBzdHJFbmQpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFN0cmluZ0RhdGVWYWx1ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0VVRDRGF0ZSgpfS8ke3ZhbHVlLmdldFVUQ01vbnRoKCkgKyAxfS8ke3ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCl9ICR7dmFsdWUuZ2V0VVRDSG91cnMoKX06JHt2YWx1ZS5nZXRVVENNaW51dGVzKCl9OiR7dmFsdWUuZ2V0VVRDU2Vjb25kcygpfWA7XG4gICAgfVxuXG4gICAgYnVpbGRNdWx0aUZpbHRlckNvbnRhaW5zKGZpZWxkczogc3RyaW5nW10sIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGJ1aWxkRmlsdGVyQ29udGFpbk11bHRpVmFsdWVzKGZpZWxkOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pOiBGaWx0ZXIge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWE6IERyb3Bkb3duQ29udHJvbFNjaGVtYSB8IENvbHVtblNjaGVtYUJhc2UpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IERyb3Bkb3duT3B0aW9ucyh7XG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiBzY2hlbWEuZmllbGRQYXJlbnRUcmVlSXRlbSxcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogc2NoZW1hLmRpc3BsYXlGaWVsZCxcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxuICAgICAgICAgICAgZmllbGRUcmVlOiBzY2hlbWEuZmllbGRUcmVlLFxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiBzY2hlbWEuZnVuY0dldExhYmVsLFxuICAgICAgICAgICAgc29ydHM6IHNjaGVtYS5zb3J0cyxcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcbiAgICAgICAgICAgIHNvcnREaXI6IHNjaGVtYS5zb3J0RGlyLFxuICAgICAgICAgICAgcGx1c1VybDogc2NoZW1hLnBsdXNVcmwsXG4gICAgICAgICAgICBjYWxsYmFja0RhdGFGaW5pc2g6IHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2gsXG4gICAgICAgICAgICBpc1NlcnZlckxvYWQ6IHNjaGVtYS5pc1NlcnZlckxvYWQsXG4gICAgICAgICAgICByZWZGaWVsZHM6IHNjaGVtYS5yZWZGaWVsZHMsXG4gICAgICAgICAgICBpc1RyZWVCYXNlTW9kZWw6IHNjaGVtYS5pc1RyZWVCYXNlTW9kZWwsXG4gICAgICAgICAgICAvLyBUT0RPOiBD4bqnbiDEkWnhu4FuIHbDoG8ga2jDtG5nIGPDsyBs4buXaSBraMO0bmcgY2jhuqF5IMSRxrDhu6NjXG4gICAgICAgICAgICBzZWxlY3RDaGlsZEl0ZW06IG51bGxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXN1bHQuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICByZXN1bHQucGFnZVNpemUgPSBzY2hlbWEucGFnZVNpemU7XG4gICAgICAgICAgICAvLyByZXN1bHQucGFnZVNpemUgPSAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShcbiAgICAgICAgZGF0YVNvdXJjZTogYW55W10sXG4gICAgICAgIHNjaGVtYXM6IFJlZkZpZWxkW10sXG4gICAgICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd246IEZ1bmN0aW9uID0gbnVsbCxcbiAgICApIHtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlIHx8ICFkYXRhU291cmNlLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXNjaGVtYXMgfHwgIXNjaGVtYXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaGVtYUhhc09yZGVyID0gc2NoZW1hcy5maWx0ZXIoeCA9PiBOdW1iZXIuaXNJbnRlZ2VyKHgub3JkZXIpKTtcbiAgICAgICAgaWYgKHNjaGVtYUhhc09yZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRSZWZEYXRhSW5EYXRhc291cmNlV2l0aE9yZGVyKGRhdGFTb3VyY2UsIHNjaGVtYUhhc09yZGVyLCBjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlbWFzID0gc2NoZW1hcy5maWx0ZXIoeCA9PiAhTnVtYmVyLmlzSW50ZWdlcih4Lm9yZGVyKSk7XG4gICAgICAgIGNvbnN0IGRpY0RhdGE6IHtcbiAgICAgICAgICAgIHNjaGVtYXM6IFJlZkZpZWxkW10sXG4gICAgICAgICAgICBwcm9taXNlczogUHJvbWlzZTxhbnk+W107XG4gICAgICAgIH1bXSA9IFtdO1xuICAgICAgICAvLyBwcmVwcm9jZXNzIHNjaGVtYSwgdGhlbSBzY2hlbWEgdmFvIGFyciB2b2kgaW5kZXggPSBzY2hlbWEub3JkZXJcbiAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZSA/IHRoaXMucHJvY2Vzc1NjaGVtYVdpdGhCYXNlU2VydmljZShzY2hlbWEsIGRhdGFTb3VyY2UpIDogbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUodHJ1ZSkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGRpY0RhdGFbc2NoZW1hLm9yZGVyXTtcbiAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkaWNEYXRhW3NjaGVtYS5vcmRlcl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzOiBbcHJvbWlzZV0sXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYXM6IFtzY2hlbWFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEuc2NoZW1hcy5wdXNoKHNjaGVtYSk7XG4gICAgICAgICAgICBkYXRhLnByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgZGF0YSB2YSBtZXJnZSB2b2kgZGF0YVNvdXJjZVxuICAgICAgICBjb25zdCBsc3REYXRhID0gT2JqZWN0LnZhbHVlcyhkaWNEYXRhKTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGxzdERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBlbGVtZW50O1xuICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBkYXRhLnByb21pc2VzO1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hRGF0YXMgPSBkYXRhLnNjaGVtYXM7XG5cbiAgICAgICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFyclJlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgICAgIHNjaGVtYURhdGFzLmZvckVhY2goKHNjaGVtYSwgcmVzSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFEYXRhID0gYXJyUmVzW3Jlc0luZGV4XSA9PT0gdHJ1ZSA/IHNjaGVtYS5kYXRhU291cmNlIDogYXJyUmVzW3Jlc0luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCkge1xuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKDxhbnk+e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc2NoZW1hRGF0YVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2NoZW1hLmRhdGFTb3VyY2UgPSBzY2hlbWFEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oc2NoZW1hLmZpZWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhc1RvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWFEYXRhcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRSZWZEYXRhSW5EYXRhc291cmNlV2l0aE9yZGVyKFxuICAgICAgICBkYXRhU291cmNlOiBhbnlbXSxcbiAgICAgICAgc2NoZW1hczogUmVmRmllbGRbXSxcbiAgICAgICAgY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bjogRnVuY3Rpb24gPSBudWxsLFxuICAgICkge1xuICAgICAgICBzY2hlbWFzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgICAgICAgY29uc3QgZGljRGF0YToge1xuICAgICAgICAgICAgc2NoZW1hczogUmVmRmllbGRbXSxcbiAgICAgICAgICAgIHByb21pc2VzOiBhbnlbXTtcbiAgICAgICAgfVtdID0gW107XG4gICAgICAgIC8vIHByZXByb2Nlc3Mgc2NoZW1hLCB0aGVtIHNjaGVtYSB2YW8gYXJyIHZvaSBpbmRleCA9IHNjaGVtYS5vcmRlciAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRQcm9taXNlID0gKF9fZGF0YVNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2hlbWEuYmFzZVNlcnZpY2UgPyB0aGlzLnByb2Nlc3NTY2hlbWFXaXRoQmFzZVNlcnZpY2Uoc2NoZW1hLCBfX2RhdGFTb3VyY2UpIDogbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUodHJ1ZSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkaWNEYXRhW3NjaGVtYS5vcmRlcl07XG4gICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGljRGF0YVtzY2hlbWEub3JkZXJdID0ge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlczogW2Z1bmNHZXRQcm9taXNlXSxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hczogW3NjaGVtYV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5zY2hlbWFzLnB1c2goc2NoZW1hKTtcbiAgICAgICAgICAgIGRhdGEucHJvbWlzZXMucHVzaChmdW5jR2V0UHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgZGF0YSB2YSBtZXJnZSB2b2kgZGF0YVNvdXJjZVxuICAgICAgICBjb25zdCBsc3REYXRhID0gT2JqZWN0LnZhbHVlcyhkaWNEYXRhKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxzdERhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbHN0RGF0YVtpbmRleF07XG4gICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IGRhdGEucHJvbWlzZXM7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFEYXRhcyA9IGRhdGEuc2NoZW1hcztcblxuICAgICAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFsbCA9IHByb21pc2VzLm1hcCh4ID0+IHgoZGF0YVNvdXJjZSkpO1xuICAgICAgICAgICAgY29uc3QgYXJyUmVzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFsbCk7XG4gICAgICAgICAgICBzY2hlbWFEYXRhcy5mb3JFYWNoKChzY2hlbWEsIHJlc0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hRGF0YSA9IGFyclJlc1tyZXNJbmRleF0gPT09IHRydWUgPyBzY2hlbWEuZGF0YVNvdXJjZSA6IGFyclJlc1tyZXNJbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCg8YW55PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHNjaGVtYURhdGFcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjaGVtYS5kYXRhU291cmNlID0gc2NoZW1hRGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKHNjaGVtYS5maWVsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YXNUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hRGF0YXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzU2NoZW1hV2l0aEJhc2VTZXJ2aWNlKHNjaGVtYTogUmVmRmllbGQsIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChpdGVtRGF0YSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFZhbHVlTXVsdGlwbGUoYXJyVmFsdWUsIGN1cnJlbnRWYWx1ZSwgc2NoZW1hKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcbiAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlLFxuICAgICAgICAgICAgICAgIGFyclZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudXNlSWdub3JlQWxsQmFzZUZpbHRlciAmJiAhc2NoZW1hLnBsdXNVcmwpIHtcbiAgICAgICAgICAgIHNjaGVtYS5wbHVzVXJsID0gJ0lnbm9yZUFsbEJhc2VGaWx0ZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgIFt0aGlzLl9jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihzY2hlbWEudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIGFyclZhbHVlKV0sXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBWYWx1ZU11bHRpcGxlKGFyclZhbHVlOiBhbnlbXSwgdmFsdWVUb01hcCwgc2NoZW1hOiBSZWZGaWVsZCkge1xuICAgICAgICBpZiAoIXZhbHVlVG9NYXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwKSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVUb01hcC5zcGxpdCgnLCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVUb01hcDtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZ1bnRpb25HZXRMYWJlbChzY2hlbWE6IFJlZkZpZWxkKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEuZnVuY0dldExhYmVsID8gc2NoZW1hLmZ1bmNHZXRMYWJlbCA6IGl0ZW0gPT4gaXRlbVtzY2hlbWEuZGlzcGxheUZpZWxkSW5HcmlkXSB8fCBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ3RlbiddO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhc1RvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hczogUmVmRmllbGRbXSwgY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIC8vICNyZWdpb24gc2V0IGRlZmF1bHQgZnVuY3Rpb25cbiAgICAgICAgZm9yIChjb25zdCByb3dEYXRhIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gc2NoZW1hLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGREYXRhID0gc2NoZW1hLmZ1bmNHZXRWYWx1ZU9mRmllbGQocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkRGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jR2V0TGFiZWwgPSB0aGlzLmdldEZ1bnRpb25HZXRMYWJlbChzY2hlbWEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBzY2hlbWEuZnVuY1NldFZhbHVlUm93XG4gICAgICAgICAgICAgICAgICAgIDogKHJvd0l0ZW0sIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkgPSBzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5XG4gICAgICAgICAgICAgICAgICAgID8gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eVxuICAgICAgICAgICAgICAgICAgICA6IChyb3dJdGVtLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3dcbiAgICAgICAgICAgICAgICAgICAgOiAocmVmSXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZJdGVtcy5tYXAoaXRlbSA9PiBmdW5jR2V0TGFiZWwoaXRlbSkpLmpvaW4oYCR7c2NoZW1hLnNlcGFyYXRvcn0gYCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhU2luZ2xlID0gKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IGRhdGEuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBmaWVsZERhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuaXNDaGlsZE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVNpbmdsZSA9IChyb3dEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIGZpZWxkRGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAjZW5kcmVnaW9uXG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWYWx1ZU11bHRpcGxlKGlkcywgZmllbGREYXRhLCBzY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gaWRzLnNvbWUocSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgcSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KHJvd0RhdGEsIHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhU2luZ2xlKHJvd0RhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiAoY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bikge1xuICAgICAgICAgICAgLy8gICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24ocm93RGF0YSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hOiBSZWZGaWVsZCwgZGF0YTogYW55W10pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XG4gICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KSB7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShpdGVtRGF0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gI3JlZ2lvbiBzZXQgZGVmYXVsdCBmdW5jdGlvblxuICAgICAgICBjb25zdCBmdW5jR2V0TGFiZWwgPSB0aGlzLmdldEZ1bnRpb25HZXRMYWJlbChzY2hlbWEpO1xuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSA9IChyb3dJdGVtLCBkYXRhKSA9PiB7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBmdW5jR2V0UmVmRGF0YVJvdyA9IChyZWZJdGVtcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3cpIHtcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkpIHtcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdykge1xuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhU2luZ2xlID0gKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgc2NoZW1hLmZ1bmNHZXRWYWx1ZU9mRmllbGQocm93RGF0YSkpKTtcbiAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByb3dEYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xuICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNjaGVtYS5pc0NoaWxkT2JqZWN0KSB7XG4gICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVNpbmdsZSA9IChyb3dEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbXMgPSBkYXRhLmZpbHRlcihpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChyb3dEYXRhKSkpO1xuICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gI2VuZHJlZ2lvblxuICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2gocm93RGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0VmFsdWVPZkZpZWxkKHJvd0RhdGEpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwVmFsdWVNdWx0aXBsZShpZHMsIHNjaGVtYS5mdW5jR2V0VmFsdWVPZkZpZWxkKHJvd0RhdGEpLCBzY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gaWRzLnNvbWUocSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgcSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KHJvd0RhdGEsIHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHJvd0RhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChyb3dEYXRhKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhU2luZ2xlKHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3BsaXRUb0xpc3ROdW1iZXIoc3RyOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nID0gJywnKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KHNlcGFyYXRvcikubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBwdXNoQXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkT3JkZXJdID49IGFycltpXVtmaWVsZE9yZGVyXSkge1xuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSArIDEsIDAsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcnIuc3BsaWNlKDAsIDAsIGl0ZW0pO1xuICAgIH1cblxuICAgIHB1c2hEZXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRPcmRlcl0gPj0gYXJyW2ldW2ZpZWxkT3JkZXJdKSB7XG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAwLCBpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgcHVzaEFzY0J5RnVuYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZ1bmM6IEZ1bmN0aW9uKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gYXJyLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGZ1bmMoaXRlbSkgPj0gZnVuYyhhcnJbaV0pKSB7XG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpICsgMSwgMCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFyci5zcGxpY2UoMCwgMCwgaXRlbSk7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1c2hEZXNjQnlGdW5jKGFycjogYW55W10sIGl0ZW06IGFueSwgZnVuYzogRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZnVuYyhpdGVtKSA+PSBmdW5jKGFycltpXSkpIHtcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDAsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICB9XG5cbiAgICBnZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgZmllbGRPcmRlcjogc3RyaW5nLFxuICAgICAgICB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBkaXJPcmRlcjogbnVtYmVyID0gMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSwgb3B0aW9uczogYW55ID0ge31cbiAgICApOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUcmVlTm9kZVtdID0gW107XG4gICAgICAgIGNvbnN0IGZ1bmNHZXRWYWx1ZU9yZGVyID0gaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhW2ZpZWxkT3JkZXJdO1xuICAgICAgICB9O1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGRpck9yZGVyID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoQXNjQnlGdW5jKHJlc3VsdCwgcm9vdEl0ZW0sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMocmVzdWx0LCByb290SXRlbSwgZnVuY0dldFZhbHVlT3JkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW1bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihyb290SXRlbSwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZyxcbiAgICAgICAgZGlyT3JkZXI6IG51bWJlciwgZnVuY0dldFZhbHVlT3JkZXI6IEZ1bmN0aW9uLCBsZXZlbENsb3NlOiBudW1iZXIsIG9wdGlvbnM6IGFueSA9IHt9XG4gICAgKSB7XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gbm9kZVBhcmVudC5kYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNoaWxkcmVuID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IG5vZGVQYXJlbnRbJ2xldmVsJ10gKyAxLFxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChkaXJPcmRlciA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaEFzY0J5RnVuYyhub2RlUGFyZW50LmNoaWxkcmVuLCBpdGVtQ2hpbGRyZW4sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMobm9kZVBhcmVudC5jaGlsZHJlbiwgaXRlbUNoaWxkcmVuLCBmdW5jR2V0VmFsdWVPcmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW5bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGl0ZW1DaGlsZHJlbiwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW4uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW1DaGlsZHJlbi5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShpdGVtQ2hpbGRyZW4sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTksIG9wdGlvbnM6IGFueSA9IHt9KTogVHJlZU5vZGVbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocm9vdEl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbVsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhKHJvb3RJdGVtLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGEobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgbGV2ZWxDbG9zZTogbnVtYmVyLCBvcHRpb25zOiBhbnkgPSB7fSkge1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IG5vZGVQYXJlbnQuZGF0YS5pZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1DaGlsZHJlbiA9IDxUcmVlTm9kZT57XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBub2RlUGFyZW50WydsZXZlbCddICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBub2RlUGFyZW50LmNoaWxkcmVuLnB1c2goaXRlbUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YShpdGVtQ2hpbGRyZW4sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlbi5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXRlbUNoaWxkcmVuLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKGl0ZW1DaGlsZHJlbiwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIG9wdGlvbjogVHJlZURhdGFPcHRpb24sIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTkpOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlLCBmaWVsZFRyZWUsIHZhbHVlUGFyZW50Um9vdCwgbGV2ZWxDbG9zZSwge1xuICAgICAgICAgICAgbW9kaWZ5VHJlZU5vZGU6IChpdGVtVHJlZSwgaXRlbURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5sYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmV4cGFuZGVkSWNvbiA9IG9wdGlvbi5leHBhbmRlZEljb247XG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuY29sbGFwc2VkSWNvbiA9IG9wdGlvbi5jb2xsYXBzZWRJY29uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIGZpZWxkT3JkZXI6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uOiBUcmVlRGF0YU9wdGlvbiwgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgZGlyT3JkZXI6IG51bWJlciA9IDEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTlcbiAgICApOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlLCBmaWVsZFRyZWUsIGZpZWxkT3JkZXIsIHZhbHVlUGFyZW50Um9vdCwgZGlyT3JkZXIsIGxldmVsQ2xvc2UsIHtcbiAgICAgICAgICAgIG1vZGlmeVRyZWVOb2RlOiAoaXRlbVRyZWUsIGl0ZW1EYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbVRyZWUubGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5zaG9ydExhYmVsID0gaXRlbURhdGFbb3B0aW9uLnNob3J0RGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5leHBhbmRlZEljb24gPSBvcHRpb24uZXhwYW5kZWRJY29uO1xuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmNvbGxhcHNlZEljb24gPSBvcHRpb24uY29sbGFwc2VkSWNvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlR3VpZCgpIHtcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcbiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IMSRaeG7gXUga2nhu4duIHTDrG0ga2nhur9tIG3hurdjIMSR4buLbmggKEPhuqV1IGjDrG5oIGjhu4cgxJHDoG8gdOG6oW8sIG7Eg20gaOG7jWMsIGjhu41jIGvhu7MpXG4gICAgLy8gQ2jhu4kgc+G7rSBk4bulbmcgY2hvIHBo4bqnbiBt4buBbSBxdeG6o24gbMO9IMSRw6BvIHThuqFvXG4gICAgZ2V0RGVmYXVsdFNlYXJjaERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkRFRkFVTFRfREFUQSk7XG4gICAgICAgIGlmIChsb2NhbERhdGEgIT0gbnVsbCAmJiBsb2NhbERhdGEgIT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGZvcmNlU2VsZWN0RGVmYXVsdERhdGEoX2NvbXBvbmVudCwgY2IpIHtcbiAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcbiAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhlRGFvVGFvXG4gICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcbiAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhvY0t5XG4gICAgICAgICkge1xuICAgICAgICAgICAgX2NvbXBvbmVudC5tb2RlbC5yZWFkeVRvR2V0RGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULkNPTkZJR19EQVRBX0RFRkFVTFRfQ0xPU0VELCBmID0+IHtcbiAgICAgICAgICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xuICAgICAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5oZURhb1Rhb1xuICAgICAgICAgICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcbiAgICAgICAgICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaG9jS3lcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd0Vycm9yKCdC4bqhbiBwaOG6o2kgY+G6pXUgaMOsbmggdGjDtG5nIHRpbiAoaOG7hyDEkcOgbyB04bqhbywgbsSDbSBo4buNYywgaOG7jWMga+G7sykgdHLGsOG7m2MnKTtcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYikge1xuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JjZVNlbGVjdERlZmF1bHREYXRhV2l0aEZpZWxkcyhfY29tcG9uZW50LCBhcnJGaWVsZCwgYXJyRmllbGROYW1lLCBjYikge1xuICAgICAgICBpZiAoIWFyckZpZWxkIHx8IGFyckZpZWxkLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xuICAgICAgICBsZXQgZW5vdWdoRmllbGRzID0gdHJ1ZTtcbiAgICAgICAgYXJyRmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHRbZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghZW5vdWdoRmllbGRzKSB7XG4gICAgICAgICAgICBfY29tcG9uZW50Lm1vZGVsLnJlYWR5VG9HZXREYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuQ09ORklHX0RBVEFfREVGQVVMVF9DTE9TRUQsIGYgPT4ge1xuICAgICAgICAgICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0W2ZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWVub3VnaEZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93RXJyb3IoYELhuqFuIHBo4bqjaSBj4bqldSBow6xuaCB0aMO0bmcgdGluICgke2FyckZpZWxkTmFtZS50b1N0cmluZygpfSkgdHLGsOG7m2NgKTtcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYikge1xuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEZpZWxkKG1vZGVsLCBhcnJGaWVsZCkge1xuICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIG1vZGVsLmRhdGFbZmllbGRdID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VHJhY2VJZCA9ICgpID0+IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RyYWNlSWQnKTtcblxuICAgIHByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKSB7XG4gICAgICAgIHN3aXRjaCAocnMuZXJyb3IpIHtcbiAgICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbi5FUlJfQlVTSU5FU1M6XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWYWxpZGF0aW9uLkVSUl9TWVNfREVWOlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IoYF9fX19fX19fX18gRVJSX1NZU19ERVYgX19fX19fX19fXyAgOiAke3JzLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyU2VydmljZS5sb2dFcnJvcihgVHJhY2VJZCA9PT09PiAke3RoaXMuZ2V0VHJhY2VJZCgpfSDEkeG7gyBkw7luZyBjaG8gZWxhc3RpYyBzZWFyY2hgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1RoYW8gdMOhYyBjaMawYSB0aMOgbmggY8O0bmcuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUhJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVGhhbyB0w6FjIGNoxrBhIHRow6BuaCBjw7RuZy4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSEnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYENvcHkgVHJhY2VJZCA9PT09PiAke3RoaXMuZ2V0VHJhY2VJZCgpfSB2w6AgZ+G7rWkgY2hvIHF14bqjbiB0cuG7iyB2acOqbmApO1xuICAgIH1cblxuICAgIGhhbmRsZVJlc3BvbnNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAocmVzLmVycm9yID09IFZhbGlkYXRpb24uRVJSX1NZU19ERVYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLiBMacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXMubWVzc2FnZSAhPSBudWxsICYmIHJlcy5tZXNzYWdlICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbGxCYWNrRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsQmFja0Vycm9yKHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dTdWNjZXNzKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsQmFjaykge1xuICAgICAgICAgICAgY2FsbEJhY2socmVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVJlcG9uc2VQcm9taXNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2VTdWNjZXNzPzogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYS4gTGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHJlcy5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlKSBtZXNzYWdlID0gcmVzLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYENvcHkgVHJhY2VJZCA9PT09PiAke3RoaXMuZ2V0VHJhY2VJZCgpfSB2w6AgZ+G7rWkgY2hvIHF14bqjbiB0cuG7iyB2acOqbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dTdWNjZXNzKG1lc3NhZ2VTdWNjZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEZpbHRlckZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUZpbHRlcjogRmlsdGVyW10sIG1vZGVsOiBhbnksIHJvb3RNb2RlbD86IGFueSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGVtcGxhdGVGaWx0ZXIpKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUocmVzdWx0LCBmLCBtb2RlbCwgcm9vdE1vZGVsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZShyZXN1bHQsIHRlbXBsYXRlRmlsdGVyLCBtb2RlbCwgcm9vdE1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVRdXlSZXBsYWNlVmFsdWUoZmlsdGVyczogRmlsdGVyW10sIGZpbHRlcjogRmlsdGVyLCBtb2RlbDogYW55LCByb290TW9kZWw/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVGaWx0ZXIgPSB0aGlzLmdldFZhbHVlRmlsdGVyKGZpbHRlciwgbW9kZWwsIHJvb3RNb2RlbCk7XG5cbiAgICAgICAgaWYgKGZpbHRlci5sb2dpYyA9PSBudWxsXG4gICAgICAgICAgICAmJiBmaWx0ZXIub3BlcmF0b3IgIT09IE9wZXJhdG9yLmlzTnVsbFxuICAgICAgICAgICAgJiYgZmlsdGVyLm9wZXJhdG9yICE9PSBPcGVyYXRvci5pc05vdE51bGxcbiAgICAgICAgICAgICYmICh2YWx1ZUZpbHRlciA9PSBudWxsIHx8IHZhbHVlRmlsdGVyID09PSAnJyB8fCB2YWx1ZUZpbHRlci5sZW5ndGggPT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXBGaWx0ZXIgPSBuZXcgRmlsdGVyKGZpbHRlcik7XG4gICAgICAgIGRlbGV0ZSB0bXBGaWx0ZXIuc291cmNlRmllbGQ7XG4gICAgICAgIGlmIChmaWx0ZXIuaXNBcnJheUZpZWxkKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVGaWx0ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRtcEZpbHRlci5maWx0ZXJzID0gW107XG4gICAgICAgICAgICB0bXBGaWx0ZXIubG9naWMgPSAnb3InO1xuICAgICAgICAgICAgdG1wRmlsdGVyLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihmaWx0ZXIuZmllbGQsIE9wZXJhdG9yLmVxdWFsLCB2YWwudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpbHRlci5maWVsZCwgT3BlcmF0b3Iuc3RhcnRXaXRoLCBgJHt2YWx9LGApLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihmaWx0ZXIuZmllbGQsIE9wZXJhdG9yLmVuZFdpdGgsIGAsJHt2YWx9YCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpbHRlci5maWVsZCwgT3BlcmF0b3IuY29udGFpbiwgYCwke3ZhbH0sYCksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRtcEZpbHRlcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgKHRtcEZpbHRlci5mdW5jR2V0VmFsdWUpIHtcbiAgICAgICAgLy8gICAgIHZhbHVlRmlsdGVyID0gdG1wRmlsdGVyLmZ1bmNHZXRWYWx1ZSh2YWx1ZUZpbHRlcik7XG4gICAgICAgIC8vIH1cbiAgICAgICAgdG1wRmlsdGVyLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWVGaWx0ZXIpO1xuICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycyA9IFtdO1xuICAgICAgICBpZiAoZmlsdGVyLmxvZ2ljICYmIGZpbHRlci5maWx0ZXJzKSB7XG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5mb3JFYWNoKGYgPT4gdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZSh0bXBGaWx0ZXIuZmlsdGVycywgZiwgbW9kZWwsIHJvb3RNb2RlbCkpO1xuICAgICAgICAgICAgaWYgKHRtcEZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0bXBGaWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUZpbHRlcihmaWx0ZXI6IEZpbHRlciwgbW9kZWwsIHJvb3RNb2RlbCkge1xuICAgICAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGZpbHRlci5zb3VyY2VGaWVsZDtcbiAgICAgICAgY29uc3Qgc3ViRmllbGQgPSBmaWx0ZXIuc3ViRmllbGQ7XG4gICAgICAgIGNvbnN0IHRyeUdldEJ5U3ViRmllbGQgPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1YkZpZWxkID09IG51bGwpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCh4ID0+IHhbc3ViRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdCh2YWx1ZSkpIHJldHVybiB2YWx1ZVtzdWJGaWVsZF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyU2VydmljZS5sb2dFcnJvcihleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICBpZiAobW9kZWwuaGFzT3duUHJvcGVydHkoc291cmNlRmllbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyLmZ1bmNHZXRWYWx1ZSAhPSBudWxsXG4gICAgICAgICAgICAgICAgPyBmaWx0ZXIuZnVuY0dldFZhbHVlKG1vZGVsW3NvdXJjZUZpZWxkXSlcbiAgICAgICAgICAgICAgICA6IHRyeUdldEJ5U3ViRmllbGQobW9kZWxbc291cmNlRmllbGRdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm9vdE1vZGVsKSB7XG4gICAgICAgICAgICBpZiAocm9vdE1vZGVsLmhhc093blByb3BlcnR5KHNvdXJjZUZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnlHZXRCeVN1YkZpZWxkKHJvb3RNb2RlbFtzb3VyY2VGaWVsZF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBzb3VyY2VGaWVsZC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgbGV0IHRlbXAgPSByb290TW9kZWw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXAuaGFzT3duUHJvcGVydHkoZikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXBbZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRyeUdldEJ5U3ViRmllbGQodGVtcFtzdWJGaWVsZF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFdvcmtmbG93Q29yZVN0YXR1c1RleHQod29ya2Zsb3dDb3JlU3RhdHVzVmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cy5maW5kKHggPT4geC5pZCA9PSB3b3JrZmxvd0NvcmVTdGF0dXNWYWx1ZSk7XG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gaXRlbS50ZW47XG4gICAgfVxufVxuIl19
1013
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUVILHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsUUFBUSxFQUdYLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFN0MsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7QUFNckQsTUFBTSxPQUFPLFdBQVc7SUFHcEIsWUFDWSxTQUFtQixFQUNuQixjQUE2QixFQUM3QixjQUE2QixFQUM3QixRQUFrQixFQUNsQixnQkFBaUMs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LFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEMsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3JCLEtBQUssTUFBTSxDQUFDLElBQUksTUFBTSxFQUFFO2dCQUNwQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hCLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2xCO3FCQUNJO29CQUNELElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ1osTUFBTTtpQkFDVDthQUNKO1lBQ0QsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyx1QkFBK0I7UUFDckQsTUFBTSxJQUFJLEdBQUcsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BCLENBQUM7Ozs7WUF4a0NKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBM0JvQixRQUFRO1lBbUJwQixhQUFhO1lBRGIsYUFBYTtZQW5CYixRQUFRO1lBdUJSLGVBQWU7WUFEZixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQge1xuICAgIENvbHVtblNjaGVtYUJhc2UsXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxuICAgIERyb3Bkb3duT3B0aW9ucyxcbiAgICBPcGVyYXRvcixcbiAgICBSZWZGaWVsZCxcbiAgICBUcmVlRGF0YU9wdGlvblxufSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250YW50cyc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMgfSBmcm9tICcuLi9tb2RlbHMvd29ya2Zsb3ctY29yZS1zdGF0dXMuZW51bSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4vbWFzdGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci5zZXJ2aWNlJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDcnVkU2VydmljZSB7XG4gICAgdXNlSWdub3JlQWxsQmFzZUZpbHRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBfbG9nZ2VyU2VydmljZTogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgICAgIHByaXZhdGUgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMudXNlSWdub3JlQWxsQmFzZUZpbHRlciA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQudXNlSWdub3JlQWxsQmFzZUZpbHRlciB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IF9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgcmVuZGVyRGF0ZVRpbWUoZGF0ZXRpbWUsIGZvcm1hdDogJ25vcm1hbCcgfCAnZnJvbU5vdycgPSAnZnJvbU5vdycpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZXRpbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBkYXRldGltZSA9IG5ldyBEYXRlKGRhdGV0aW1lICsgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ25vcm1hbCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXkgSEg6bW0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vdzogYW55ID0gbmV3IERhdGUoKTtcbiAgICAgICAgbGV0IG1pbGlzZWNvbmQgPSBub3cgLSBkYXRldGltZTtcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPiAwKSB7XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1bDoGkgZ2nDonkgdHLGsOG7m2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gMzAwMDAgJiYgbWlsaXNlY29uZCA8IDkwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxuICAgICAgICAgICAgICAgIHJldHVybiAnTeG7mXQgcGjDunQgdHLGsOG7m2MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcbiAgICAgICAgICAgICAgICAvLyA1IHBow7p0XG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIHBow7p0IHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDMwMDAwMCAmJiBtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApICsgJyBwaMO6dCB0csaw4bubYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA+PSAzNjAwMDAwICYmIG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIGdp4budIHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDE4MDAwMDAwICYmIG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxuICAgICAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKSArICcgZ2nhu50gdHLGsOG7m2MnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICdIw7RtIHF1YSBsw7pjICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gODY0MDAwMDApIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGRhdGV0aW1lLmdldERhdGUoKSA9PSBub3cuZ2V0RGF0ZSgpIC0gMVxuICAgICAgICAgICAgICAgICAgICAmJiBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldFllYXIoKSA9PSBub3cuZ2V0WWVhcigpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnSMO0bSBxdWEgbMO6YyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZGQvTU0veXl5eSBISDptbSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBtaWxpc2Vjb25kID0gLW1pbGlzZWNvbmQ7XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonlcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1bDoGkgZ2nDonkgbuG7r2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPj0gMzAwMDAgJiYgbWlsaXNlY29uZCA8IDkwMDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxuICAgICAgICAgICAgICAgIHJldHVybiAnTeG7mXQgcGjDunQgbuG7r2EnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcbiAgICAgICAgICAgICAgICAvLyA1IHBow7p0XG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIHBow7p0IG7hu69hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDMwMDAwMCAmJiBtaWxpc2Vjb25kIDwgMzYwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApICsgJyBwaMO6dCBu4buvYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWlsaXNlY29uZCA+PSAzNjAwMDAwICYmIG1pbGlzZWNvbmQgPCAxODAwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXG4gICAgICAgICAgICAgICAgcmV0dXJuICdWw6BpIGdp4budIG7hu69hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDE4MDAwMDAwICYmIG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xuICAgICAgICAgICAgICAgIC8vIGTGsOG7m2kgMSBuZ8OgeVxuICAgICAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKSArICcgZ2nhu50gbuG7r2EnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICdOZ8OgeSBtYWkgbMO6YyAnXG4gICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtaWxpc2Vjb25kID49IDg2NDAwMDAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSAtIDFcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0TW9udGgoKSA9PSBub3cuZ2V0TW9udGgoKVxuICAgICAgICAgICAgICAgICAgICAmJiBkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ05nw6B5IG1haSBsw7pjICdcbiAgICAgICAgICAgICAgICAgICAgICAgICsgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkgLSAyXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdIYWkgbmfDoHkgbuG7r2EnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0RGF0ZSgpID09IG5vdy5nZXREYXRlKCkgLSAzXG4gICAgICAgICAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdCYSBuZ8OgeSBu4buvYSc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZC9NTS95eXl5IEhIOm1tJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlclRpbWVzcGFuKGRhdGV0aW1lOiBhbnkpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBhcnJUaW1lID0gZGF0ZXRpbWUuc3BsaXQoJzonKTtcbiAgICAgICAgICAgIHJldHVybiBgJHthcnJUaW1lWzBdfToke2FyclRpbWVbMV19YDtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJEYXRlKGRhdGV0aW1lLCBmb3JtYXQ6ICdub3JtYWwnIHwgJ2Zyb21Ob3cnID0gJ25vcm1hbCcpIHtcbiAgICAgICAgaWYgKCFkYXRldGltZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRldGltZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGRhdGV0aW1lID0gbmV3IERhdGUoZGF0ZXRpbWUgKyAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbm9ybWFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnZGQvTU0veXl5eScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm93OiBhbnkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRldGltZS5nZXRNb250aCgpID09IG5vdy5nZXRNb250aCgpXG4gICAgICAgICAgICAmJiBkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGRheXMgPSBkYXRldGltZS5nZXREYXRlKCkgLSBub3cuZ2V0RGF0ZSgpO1xuICAgICAgICAgICAgc3dpdGNoIChkYXlzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gbmF5JztcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnTmfDoHkgbWFpJztcbiAgICAgICAgICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0jDtG0gcXVhJztcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnSGFpIG5nw6B5IG7hu69hJztcbiAgICAgICAgICAgICAgICBjYXNlIC0yOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0hhaSBuZ8OgeSB0csaw4bubYyc7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IG7hu69hJztcbiAgICAgICAgICAgICAgICBjYXNlIC0zOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0JhIG5nw6B5IHRyxrDhu5tjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5Jyk7XG4gICAgfVxuXG4gICAgaGlkZUNvbnRyb2xBbmRMYWJlbCgpIHtcbiAgICB9XG5cbiAgICBidWlsZEZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgYnVpbGRGaWx0ZXJEYXRlKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IERhdGUpOiBGaWx0ZXIge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWU6IHRoaXMuZ2V0RGF0ZSh2YWx1ZSkgfSk7XG4gICAgfVxuXG4gICAgZ2V0RGF0ZSh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXREYXRlKCl9LyR7dmFsdWUuZ2V0TW9udGgoKSArIDF9LyR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xuICAgIH1cblxuICAgIGJ1aWxkRmlsdGVyRGF0ZUluTGlzdFJhbmdlKGZpZWxkOiBzdHJpbmcsIGFyck1pbk1heDogRGF0ZVtdW10sIG9wZXJhdG9yTGVmdDogc3RyaW5nID0gJ2d0ZScsIG9wZXJhdG9yUmlnaHQ6IHN0cmluZyA9ICdsdGUnKTogRmlsdGVyIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBsb2dpYzogJ29yJyxcbiAgICAgICAgICAgIGZpbHRlcnM6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICBhcnJNaW5NYXguZm9yRWFjaChtaW5NYXggPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RyU3RhcnQgPSB0aGlzLmdldFN0cmluZ0RhdGVWYWx1ZShtaW5NYXhbMF0pO1xuICAgICAgICAgICAgY29uc3Qgc3RyRW5kID0gdGhpcy5nZXRTdHJpbmdEYXRlVmFsdWUobWluTWF4WzFdKTtcbiAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsIHN0clN0YXJ0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLCBzdHJFbmQpXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFN0cmluZ0RhdGVWYWx1ZSh2YWx1ZTogRGF0ZSkge1xuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0VVRDRGF0ZSgpfS8ke3ZhbHVlLmdldFVUQ01vbnRoKCkgKyAxfS8ke3ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCl9ICR7dmFsdWUuZ2V0VVRDSG91cnMoKX06JHt2YWx1ZS5nZXRVVENNaW51dGVzKCl9OiR7dmFsdWUuZ2V0VVRDU2Vjb25kcygpfWA7XG4gICAgfVxuXG4gICAgYnVpbGRNdWx0aUZpbHRlckNvbnRhaW5zKGZpZWxkczogc3RyaW5nW10sIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGJ1aWxkRmlsdGVyQ29udGFpbk11bHRpVmFsdWVzKGZpZWxkOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pOiBGaWx0ZXIge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cblxuICAgIGNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWE6IERyb3Bkb3duQ29udHJvbFNjaGVtYSB8IENvbHVtblNjaGVtYUJhc2UpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IERyb3Bkb3duT3B0aW9ucyh7XG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiBzY2hlbWEuZmllbGRQYXJlbnRUcmVlSXRlbSxcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogc2NoZW1hLmRpc3BsYXlGaWVsZCxcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxuICAgICAgICAgICAgZmllbGRUcmVlOiBzY2hlbWEuZmllbGRUcmVlLFxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiBzY2hlbWEuZnVuY0dldExhYmVsLFxuICAgICAgICAgICAgc29ydHM6IHNjaGVtYS5zb3J0cyxcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcbiAgICAgICAgICAgIHNvcnREaXI6IHNjaGVtYS5zb3J0RGlyLFxuICAgICAgICAgICAgcGx1c1VybDogc2NoZW1hLnBsdXNVcmwsXG4gICAgICAgICAgICBjYWxsYmFja0RhdGFGaW5pc2g6IHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2gsXG4gICAgICAgICAgICBpc1NlcnZlckxvYWQ6IHNjaGVtYS5pc1NlcnZlckxvYWQsXG4gICAgICAgICAgICByZWZGaWVsZHM6IHNjaGVtYS5yZWZGaWVsZHMsXG4gICAgICAgICAgICBpc1RyZWVCYXNlTW9kZWw6IHNjaGVtYS5pc1RyZWVCYXNlTW9kZWwsXG4gICAgICAgICAgICAvLyBUT0RPOiBD4bqnbiDEkWnhu4FuIHbDoG8ga2jDtG5nIGPDsyBs4buXaSBraMO0bmcgY2jhuqF5IMSRxrDhu6NjXG4gICAgICAgICAgICBzZWxlY3RDaGlsZEl0ZW06IG51bGwsXG4gICAgICAgICAgICBpc0dldEFsbDogIShzY2hlbWEgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocmVzdWx0LmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgcmVzdWx0LnBhZ2VTaXplID0gc2NoZW1hLnBhZ2VTaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShcbiAgICAgICAgZGF0YVNvdXJjZTogYW55W10sXG4gICAgICAgIHNjaGVtYXM6IFJlZkZpZWxkW10sXG4gICAgICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd246IEZ1bmN0aW9uID0gbnVsbCxcbiAgICApIHtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlIHx8ICFkYXRhU291cmNlLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICBpZiAoIXNjaGVtYXMgfHwgIXNjaGVtYXMubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaGVtYUhhc09yZGVyID0gc2NoZW1hcy5maWx0ZXIoeCA9PiBOdW1iZXIuaXNJbnRlZ2VyKHgub3JkZXIpKTtcbiAgICAgICAgaWYgKHNjaGVtYUhhc09yZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRSZWZEYXRhSW5EYXRhc291cmNlV2l0aE9yZGVyKGRhdGFTb3VyY2UsIHNjaGVtYUhhc09yZGVyLCBjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlbWFzID0gc2NoZW1hcy5maWx0ZXIoeCA9PiAhTnVtYmVyLmlzSW50ZWdlcih4Lm9yZGVyKSk7XG4gICAgICAgIGNvbnN0IGRpY0RhdGE6IHtcbiAgICAgICAgICAgIHNjaGVtYXM6IFJlZkZpZWxkW10sXG4gICAgICAgICAgICBwcm9taXNlczogUHJvbWlzZTxhbnk+W107XG4gICAgICAgIH1bXSA9IFtdO1xuICAgICAgICAvLyBwcmVwcm9jZXNzIHNjaGVtYSwgdGhlbSBzY2hlbWEgdmFvIGFyciB2b2kgaW5kZXggPSBzY2hlbWEub3JkZXJcbiAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZSA/IHRoaXMucHJvY2Vzc1NjaGVtYVdpdGhCYXNlU2VydmljZShzY2hlbWEsIGRhdGFTb3VyY2UpIDogbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUodHJ1ZSkpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGRpY0RhdGFbc2NoZW1hLm9yZGVyXTtcbiAgICAgICAgICAgIGlmIChkYXRhID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkaWNEYXRhW3NjaGVtYS5vcmRlcl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2VzOiBbcHJvbWlzZV0sXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYXM6IFtzY2hlbWFdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEuc2NoZW1hcy5wdXNoKHNjaGVtYSk7XG4gICAgICAgICAgICBkYXRhLnByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgZGF0YSB2YSBtZXJnZSB2b2kgZGF0YVNvdXJjZVxuICAgICAgICBjb25zdCBsc3REYXRhID0gT2JqZWN0LnZhbHVlcyhkaWNEYXRhKTtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGxzdERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBlbGVtZW50O1xuICAgICAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBkYXRhLnByb21pc2VzO1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hRGF0YXMgPSBkYXRhLnNjaGVtYXM7XG5cbiAgICAgICAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFyclJlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgICAgIHNjaGVtYURhdGFzLmZvckVhY2goKHNjaGVtYSwgcmVzSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFEYXRhID0gYXJyUmVzW3Jlc0luZGV4XSA9PT0gdHJ1ZSA/IHNjaGVtYS5kYXRhU291cmNlIDogYXJyUmVzW3Jlc0luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCkge1xuICAgICAgICAgICAgICAgICAgICBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoKDxhbnk+e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc2NoZW1hRGF0YVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2NoZW1hLmRhdGFTb3VyY2UgPSBzY2hlbWFEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oc2NoZW1hLmZpZWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhc1RvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWFEYXRhcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRSZWZEYXRhSW5EYXRhc291cmNlV2l0aE9yZGVyKFxuICAgICAgICBkYXRhU291cmNlOiBhbnlbXSxcbiAgICAgICAgc2NoZW1hczogUmVmRmllbGRbXSxcbiAgICAgICAgY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bjogRnVuY3Rpb24gPSBudWxsLFxuICAgICkge1xuICAgICAgICBzY2hlbWFzLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgICAgICAgY29uc3QgZGljRGF0YToge1xuICAgICAgICAgICAgc2NoZW1hczogUmVmRmllbGRbXSxcbiAgICAgICAgICAgIHByb21pc2VzOiBhbnlbXTtcbiAgICAgICAgfVtdID0gW107XG4gICAgICAgIC8vIHByZXByb2Nlc3Mgc2NoZW1hLCB0aGVtIHNjaGVtYSB2YW8gYXJyIHZvaSBpbmRleCA9IHNjaGVtYS5vcmRlciAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bmNHZXRQcm9taXNlID0gKF9fZGF0YVNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2hlbWEuYmFzZVNlcnZpY2UgPyB0aGlzLnByb2Nlc3NTY2hlbWFXaXRoQmFzZVNlcnZpY2Uoc2NoZW1hLCBfX2RhdGFTb3VyY2UpIDogbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHJlc29sdmUodHJ1ZSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBkaWNEYXRhW3NjaGVtYS5vcmRlcl07XG4gICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGljRGF0YVtzY2hlbWEub3JkZXJdID0ge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlczogW2Z1bmNHZXRQcm9taXNlXSxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hczogW3NjaGVtYV1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS5zY2hlbWFzLnB1c2goc2NoZW1hKTtcbiAgICAgICAgICAgIGRhdGEucHJvbWlzZXMucHVzaChmdW5jR2V0UHJvbWlzZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBnZXQgZGF0YSB2YSBtZXJnZSB2b2kgZGF0YVNvdXJjZVxuICAgICAgICBjb25zdCBsc3REYXRhID0gT2JqZWN0LnZhbHVlcyhkaWNEYXRhKTtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxzdERhdGEubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbHN0RGF0YVtpbmRleF07XG4gICAgICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwcm9taXNlcyA9IGRhdGEucHJvbWlzZXM7XG4gICAgICAgICAgICBjb25zdCBzY2hlbWFEYXRhcyA9IGRhdGEuc2NoZW1hcztcblxuICAgICAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZUFsbCA9IHByb21pc2VzLm1hcCh4ID0+IHgoZGF0YVNvdXJjZSkpO1xuICAgICAgICAgICAgY29uc3QgYXJyUmVzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZUFsbCk7XG4gICAgICAgICAgICBzY2hlbWFEYXRhcy5mb3JFYWNoKChzY2hlbWEsIHJlc0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hRGF0YSA9IGFyclJlc1tyZXNJbmRleF0gPT09IHRydWUgPyBzY2hlbWEuZGF0YVNvdXJjZSA6IGFyclJlc1tyZXNJbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaCg8YW55PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHNjaGVtYURhdGFcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjaGVtYS5kYXRhU291cmNlID0gc2NoZW1hRGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICBjYWxsQmFja0FmdGVyR2V0UmVmRGF0YURyb3Bkb3duKHNjaGVtYS5maWVsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YXNUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hRGF0YXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzU2NoZW1hV2l0aEJhc2VTZXJ2aWNlKHNjaGVtYTogUmVmRmllbGQsIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChpdGVtRGF0YSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFZhbHVlTXVsdGlwbGUoYXJyVmFsdWUsIGN1cnJlbnRWYWx1ZSwgc2NoZW1hKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcbiAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlLFxuICAgICAgICAgICAgICAgIGFyclZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudXNlSWdub3JlQWxsQmFzZUZpbHRlciAmJiAhc2NoZW1hLnBsdXNVcmwpIHtcbiAgICAgICAgICAgIHNjaGVtYS5wbHVzVXJsID0gJ0lnbm9yZUFsbEJhc2VGaWx0ZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgIFt0aGlzLl9jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihzY2hlbWEudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIGFyclZhbHVlKV0sXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBWYWx1ZU11bHRpcGxlKGFyclZhbHVlOiBhbnlbXSwgdmFsdWVUb01hcCwgc2NoZW1hOiBSZWZGaWVsZCkge1xuICAgICAgICBpZiAoIXZhbHVlVG9NYXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZVRvTWFwKSkge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVUb01hcC5zcGxpdCgnLCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsdWVzID0gdmFsdWVUb01hcDtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZ1bnRpb25HZXRMYWJlbChzY2hlbWE6IFJlZkZpZWxkKSB7XG4gICAgICAgIHJldHVybiBzY2hlbWEuZnVuY0dldExhYmVsID8gc2NoZW1hLmZ1bmNHZXRMYWJlbCA6IGl0ZW0gPT4gaXRlbVtzY2hlbWEuZGlzcGxheUZpZWxkSW5HcmlkXSB8fCBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ3RlbiddO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhc1RvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hczogUmVmRmllbGRbXSwgY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIC8vICNyZWdpb24gc2V0IGRlZmF1bHQgZnVuY3Rpb25cbiAgICAgICAgZm9yIChjb25zdCByb3dEYXRhIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gc2NoZW1hLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGREYXRhID0gc2NoZW1hLmZ1bmNHZXRWYWx1ZU9mRmllbGQocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkRGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jR2V0TGFiZWwgPSB0aGlzLmdldEZ1bnRpb25HZXRMYWJlbChzY2hlbWEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBzY2hlbWEuZnVuY1NldFZhbHVlUm93XG4gICAgICAgICAgICAgICAgICAgIDogKHJvd0l0ZW0sIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkgPSBzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5XG4gICAgICAgICAgICAgICAgICAgID8gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eVxuICAgICAgICAgICAgICAgICAgICA6IChyb3dJdGVtLCBkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3dcbiAgICAgICAgICAgICAgICAgICAgPyBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3dcbiAgICAgICAgICAgICAgICAgICAgOiAocmVmSXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWZJdGVtcy5tYXAoaXRlbSA9PiBmdW5jR2V0TGFiZWwoaXRlbSkpLmpvaW4oYCR7c2NoZW1hLnNlcGFyYXRvcn0gYCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhU2luZ2xlID0gKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IGRhdGEuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBmaWVsZERhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93RGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuaXNDaGlsZE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVNpbmdsZSA9IChyb3dEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIGZpZWxkRGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAjZW5kcmVnaW9uXG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWYWx1ZU11bHRpcGxlKGlkcywgZmllbGREYXRhLCBzY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gaWRzLnNvbWUocSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgcSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KHJvd0RhdGEsIHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhU2luZ2xlKHJvd0RhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiAoY2FsbEJhY2tBZnRlckdldFJlZkRhdGFEcm9wZG93bikge1xuICAgICAgICAgICAgLy8gICAgIGNhbGxCYWNrQWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24ocm93RGF0YSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hOiBSZWZGaWVsZCwgZGF0YTogYW55W10pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XG4gICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KSB7XG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShpdGVtRGF0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gI3JlZ2lvbiBzZXQgZGVmYXVsdCBmdW5jdGlvblxuICAgICAgICBjb25zdCBmdW5jR2V0TGFiZWwgPSB0aGlzLmdldEZ1bnRpb25HZXRMYWJlbChzY2hlbWEpO1xuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHtcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSA9IChyb3dJdGVtLCBkYXRhKSA9PiB7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBmdW5jR2V0UmVmRGF0YVJvdyA9IChyZWZJdGVtcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3cpIHtcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkpIHtcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eSA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdykge1xuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhU2luZ2xlID0gKHJvd0RhdGEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgc2NoZW1hLmZ1bmNHZXRWYWx1ZU9mRmllbGQocm93RGF0YSkpKTtcbiAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByb3dEYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xuICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvd1doZW5OdWxsT3JFbXB0eShyb3dEYXRhLCByZWZJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNjaGVtYS5pc0NoaWxkT2JqZWN0KSB7XG4gICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVNpbmdsZSA9IChyb3dEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbXMgPSBkYXRhLmZpbHRlcihpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChyb3dEYXRhKSkpO1xuICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhyb3dEYXRhLCByZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3dXaGVuTnVsbE9yRW1wdHkocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gI2VuZHJlZ2lvblxuICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2gocm93RGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0VmFsdWVPZkZpZWxkKHJvd0RhdGEpICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwVmFsdWVNdWx0aXBsZShpZHMsIHNjaGVtYS5mdW5jR2V0VmFsdWVPZkZpZWxkKHJvd0RhdGEpLCBzY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gaWRzLnNvbWUocSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgcSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cocm93RGF0YSwgcmVmSXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93V2hlbk51bGxPckVtcHR5KHJvd0RhdGEsIHJlZkl0ZW1zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHJvd0RhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFZhbHVlT2ZGaWVsZChyb3dEYXRhKSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhU2luZ2xlKHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3BsaXRUb0xpc3ROdW1iZXIoc3RyOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nID0gJywnKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gc3RyLnNwbGl0KHNlcGFyYXRvcikubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW0pKTtcbiAgICB9XG5cbiAgICBwdXNoQXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkT3JkZXJdID49IGFycltpXVtmaWVsZE9yZGVyXSkge1xuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSArIDEsIDAsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcnIuc3BsaWNlKDAsIDAsIGl0ZW0pO1xuICAgIH1cblxuICAgIHB1c2hEZXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRPcmRlcl0gPj0gYXJyW2ldW2ZpZWxkT3JkZXJdKSB7XG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAwLCBpdGVtKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgfVxuXG4gICAgcHVzaEFzY0J5RnVuYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZ1bmM6IEZ1bmN0aW9uKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm4gYXJyLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKGZ1bmMoaXRlbSkgPj0gZnVuYyhhcnJbaV0pKSB7XG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpICsgMSwgMCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFyci5zcGxpY2UoMCwgMCwgaXRlbSk7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHB1c2hEZXNjQnlGdW5jKGFycjogYW55W10sIGl0ZW06IGFueSwgZnVuYzogRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZnVuYyhpdGVtKSA+PSBmdW5jKGFycltpXSkpIHtcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDAsIGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICB9XG5cbiAgICBnZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgZmllbGRPcmRlcjogc3RyaW5nLFxuICAgICAgICB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBkaXJPcmRlcjogbnVtYmVyID0gMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSwgb3B0aW9uczogYW55ID0ge31cbiAgICApOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUcmVlTm9kZVtdID0gW107XG4gICAgICAgIGNvbnN0IGZ1bmNHZXRWYWx1ZU9yZGVyID0gaXRlbSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhW2ZpZWxkT3JkZXJdO1xuICAgICAgICB9O1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGRpck9yZGVyID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoQXNjQnlGdW5jKHJlc3VsdCwgcm9vdEl0ZW0sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMocmVzdWx0LCByb290SXRlbSwgZnVuY0dldFZhbHVlT3JkZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW1bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihyb290SXRlbSwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZyxcbiAgICAgICAgZGlyT3JkZXI6IG51bWJlciwgZnVuY0dldFZhbHVlT3JkZXI6IEZ1bmN0aW9uLCBsZXZlbENsb3NlOiBudW1iZXIsIG9wdGlvbnM6IGFueSA9IHt9XG4gICAgKSB7XG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gbm9kZVBhcmVudC5kYXRhLmlkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNoaWxkcmVuID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IG5vZGVQYXJlbnRbJ2xldmVsJ10gKyAxLFxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChkaXJPcmRlciA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaEFzY0J5RnVuYyhub2RlUGFyZW50LmNoaWxkcmVuLCBpdGVtQ2hpbGRyZW4sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMobm9kZVBhcmVudC5jaGlsZHJlbiwgaXRlbUNoaWxkcmVuLCBmdW5jR2V0VmFsdWVPcmRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW5bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGl0ZW1DaGlsZHJlbiwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW4uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW1DaGlsZHJlbi5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShpdGVtQ2hpbGRyZW4sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTksIG9wdGlvbnM6IGFueSA9IHt9KTogVHJlZU5vZGVbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogVHJlZU5vZGVbXSA9IFtdO1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocm9vdEl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbVsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhKHJvb3RJdGVtLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZVF1eUdldFRyZWVUYWJsZURhdGEobm9kZVBhcmVudDogVHJlZU5vZGUsIGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgbGV2ZWxDbG9zZTogbnVtYmVyLCBvcHRpb25zOiBhbnkgPSB7fSkge1xuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IG5vZGVQYXJlbnQuZGF0YS5pZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1DaGlsZHJlbiA9IDxUcmVlTm9kZT57XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBub2RlUGFyZW50WydsZXZlbCddICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBub2RlUGFyZW50LmNoaWxkcmVuLnB1c2goaXRlbUNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YShpdGVtQ2hpbGRyZW4sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlbi5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgaXRlbUNoaWxkcmVuLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm1vZGlmeVRyZWVOb2RlKGl0ZW1DaGlsZHJlbiwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIG9wdGlvbjogVHJlZURhdGFPcHRpb24sIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTkpOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlLCBmaWVsZFRyZWUsIHZhbHVlUGFyZW50Um9vdCwgbGV2ZWxDbG9zZSwge1xuICAgICAgICAgICAgbW9kaWZ5VHJlZU5vZGU6IChpdGVtVHJlZSwgaXRlbURhdGEpID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5sYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmV4cGFuZGVkSWNvbiA9IG9wdGlvbi5leHBhbmRlZEljb247XG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuY29sbGFwc2VkSWNvbiA9IG9wdGlvbi5jb2xsYXBzZWRJY29uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIGZpZWxkT3JkZXI6IHN0cmluZyxcbiAgICAgICAgb3B0aW9uOiBUcmVlRGF0YU9wdGlvbiwgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgZGlyT3JkZXI6IG51bWJlciA9IDEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTlcbiAgICApOiBUcmVlTm9kZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlLCBmaWVsZFRyZWUsIGZpZWxkT3JkZXIsIHZhbHVlUGFyZW50Um9vdCwgZGlyT3JkZXIsIGxldmVsQ2xvc2UsIHtcbiAgICAgICAgICAgIG1vZGlmeVRyZWVOb2RlOiAoaXRlbVRyZWUsIGl0ZW1EYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbVRyZWUubGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5zaG9ydExhYmVsID0gaXRlbURhdGFbb3B0aW9uLnNob3J0RGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5leHBhbmRlZEljb24gPSBvcHRpb24uZXhwYW5kZWRJY29uO1xuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmNvbGxhcHNlZEljb24gPSBvcHRpb24uY29sbGFwc2VkSWNvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlR3VpZCgpIHtcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcbiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IMSRaeG7gXUga2nhu4duIHTDrG0ga2nhur9tIG3hurdjIMSR4buLbmggKEPhuqV1IGjDrG5oIGjhu4cgxJHDoG8gdOG6oW8sIG7Eg20gaOG7jWMsIGjhu41jIGvhu7MpXG4gICAgLy8gQ2jhu4kgc+G7rSBk4bulbmcgY2hvIHBo4bqnbiBt4buBbSBxdeG6o24gbMO9IMSRw6BvIHThuqFvXG4gICAgZ2V0RGVmYXVsdFNlYXJjaERhdGEoKSB7XG4gICAgICAgIGNvbnN0IGxvY2FsRGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkRFRkFVTFRfREFUQSk7XG4gICAgICAgIGlmIChsb2NhbERhdGEgIT0gbnVsbCAmJiBsb2NhbERhdGEgIT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGZvcmNlU2VsZWN0RGVmYXVsdERhdGEoX2NvbXBvbmVudCwgY2IpIHtcbiAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcbiAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhlRGFvVGFvXG4gICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcbiAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhvY0t5XG4gICAgICAgICkge1xuICAgICAgICAgICAgX2NvbXBvbmVudC5tb2RlbC5yZWFkeVRvR2V0RGF0YSA9IGZhbHNlO1xuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULkNPTkZJR19EQVRBX0RFRkFVTFRfQ0xPU0VELCBmID0+IHtcbiAgICAgICAgICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xuICAgICAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5oZURhb1Rhb1xuICAgICAgICAgICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcbiAgICAgICAgICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaG9jS3lcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd0Vycm9yKCdC4bqhbiBwaOG6o2kgY+G6pXUgaMOsbmggdGjDtG5nIHRpbiAoaOG7hyDEkcOgbyB04bqhbywgbsSDbSBo4buNYywgaOG7jWMga+G7sykgdHLGsOG7m2MnKTtcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYikge1xuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3JjZVNlbGVjdERlZmF1bHREYXRhV2l0aEZpZWxkcyhfY29tcG9uZW50LCBhcnJGaWVsZCwgYXJyRmllbGROYW1lLCBjYikge1xuICAgICAgICBpZiAoIWFyckZpZWxkIHx8IGFyckZpZWxkLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xuICAgICAgICBsZXQgZW5vdWdoRmllbGRzID0gdHJ1ZTtcbiAgICAgICAgYXJyRmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHRbZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghZW5vdWdoRmllbGRzKSB7XG4gICAgICAgICAgICBfY29tcG9uZW50Lm1vZGVsLnJlYWR5VG9HZXREYXRhID0gZmFsc2U7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuQ09ORklHX0RBVEFfREVGQVVMVF9DTE9TRUQsIGYgPT4ge1xuICAgICAgICAgICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0W2ZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWVub3VnaEZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93RXJyb3IoYELhuqFuIHBo4bqjaSBj4bqldSBow6xuaCB0aMO0bmcgdGluICgke2FyckZpZWxkTmFtZS50b1N0cmluZygpfSkgdHLGsOG7m2NgKTtcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYikge1xuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEZpZWxkKG1vZGVsLCBhcnJGaWVsZCkge1xuICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIG1vZGVsLmRhdGFbZmllbGRdID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VHJhY2VJZCA9ICgpID0+IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ3RyYWNlSWQnKTtcblxuICAgIHByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKSB7XG4gICAgICAgIHN3aXRjaCAocnMuZXJyb3IpIHtcbiAgICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbi5FUlJfQlVTSU5FU1M6XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWYWxpZGF0aW9uLkVSUl9TWVNfREVWOlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IoYF9fX19fX19fX18gRVJSX1NZU19ERVYgX19fX19fX19fXyAgOiAke3JzLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyU2VydmljZS5sb2dFcnJvcihgVHJhY2VJZCA9PT09PiAke3RoaXMuZ2V0VHJhY2VJZCgpfSDEkeG7gyBkw7luZyBjaG8gZWxhc3RpYyBzZWFyY2hgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1RoYW8gdMOhYyBjaMawYSB0aMOgbmggY8O0bmcuIFZ1aSBsw7JuZyB0aOG7rSBs4bqhaSBzYXUhJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVGhhbyB0w6FjIGNoxrBhIHRow6BuaCBjw7RuZy4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSEnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYENvcHkgVHJhY2VJZCA9PT09PiAke3RoaXMuZ2V0VHJhY2VJZCgpfSB2w6AgZ+G7rWkgY2hvIHF14bqjbiB0cuG7iyB2acOqbmApO1xuICAgIH1cblxuICAgIGhhbmRsZVJlc3BvbnNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAocmVzLmVycm9yID09IFZhbGlkYXRpb24uRVJSX1NZU19ERVYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLiBMacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXMubWVzc2FnZSAhPSBudWxsICYmIHJlcy5tZXNzYWdlICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbGxCYWNrRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsQmFja0Vycm9yKHJlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dTdWNjZXNzKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsQmFjaykge1xuICAgICAgICAgICAgY2FsbEJhY2socmVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhbmRsZVJlcG9uc2VQcm9taXNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2VTdWNjZXNzPzogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXMuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYS4gTGnDqm4gaOG7hyBxdeG6o24gdHLhu4sgdmnDqm4gxJHhu4MgYmnhur90IHRow6ptIGNoaSB0aeG6v3QuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHJlcy5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlKSBtZXNzYWdlID0gcmVzLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYENvcHkgVHJhY2VJZCA9PT09PiAke3RoaXMuZ2V0VHJhY2VJZCgpfSB2w6AgZ+G7rWkgY2hvIHF14bqjbiB0cuG7iyB2acOqbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2VTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dTdWNjZXNzKG1lc3NhZ2VTdWNjZXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEZpbHRlckZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUZpbHRlcjogRmlsdGVyW10sIG1vZGVsOiBhbnksIHJvb3RNb2RlbD86IGFueSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGVtcGxhdGVGaWx0ZXIpKSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUocmVzdWx0LCBmLCBtb2RlbCwgcm9vdE1vZGVsKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZShyZXN1bHQsIHRlbXBsYXRlRmlsdGVyLCBtb2RlbCwgcm9vdE1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVRdXlSZXBsYWNlVmFsdWUoZmlsdGVyczogRmlsdGVyW10sIGZpbHRlcjogRmlsdGVyLCBtb2RlbDogYW55LCByb290TW9kZWw/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgdmFsdWVGaWx0ZXIgPSB0aGlzLmdldFZhbHVlRmlsdGVyKGZpbHRlciwgbW9kZWwsIHJvb3RNb2RlbCk7XG5cbiAgICAgICAgaWYgKGZpbHRlci5sb2dpYyA9PSBudWxsXG4gICAgICAgICAgICAmJiBmaWx0ZXIub3BlcmF0b3IgIT09IE9wZXJhdG9yLmlzTnVsbFxuICAgICAgICAgICAgJiYgZmlsdGVyLm9wZXJhdG9yICE9PSBPcGVyYXRvci5pc05vdE51bGxcbiAgICAgICAgICAgICYmICh2YWx1ZUZpbHRlciA9PSBudWxsIHx8IHZhbHVlRmlsdGVyID09PSAnJyB8fCB2YWx1ZUZpbHRlci5sZW5ndGggPT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXBGaWx0ZXIgPSBuZXcgRmlsdGVyKGZpbHRlcik7XG4gICAgICAgIGRlbGV0ZSB0bXBGaWx0ZXIuc291cmNlRmllbGQ7XG4gICAgICAgIGlmIChmaWx0ZXIuaXNBcnJheUZpZWxkKSB7XG4gICAgICAgICAgICBpZiAodmFsdWVGaWx0ZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRtcEZpbHRlci5maWx0ZXJzID0gW107XG4gICAgICAgICAgICB0bXBGaWx0ZXIubG9naWMgPSAnb3InO1xuICAgICAgICAgICAgdG1wRmlsdGVyLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyLmZvckVhY2godmFsID0+IHtcbiAgICAgICAgICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihmaWx0ZXIuZmllbGQsIE9wZXJhdG9yLmVxdWFsLCB2YWwudG9TdHJpbmcoKSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpbHRlci5maWVsZCwgT3BlcmF0b3Iuc3RhcnRXaXRoLCBgJHt2YWx9LGApLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihmaWx0ZXIuZmllbGQsIE9wZXJhdG9yLmVuZFdpdGgsIGAsJHt2YWx9YCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKGZpbHRlci5maWVsZCwgT3BlcmF0b3IuY29udGFpbiwgYCwke3ZhbH0sYCksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRtcEZpbHRlcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgKHRtcEZpbHRlci5mdW5jR2V0VmFsdWUpIHtcbiAgICAgICAgLy8gICAgIHZhbHVlRmlsdGVyID0gdG1wRmlsdGVyLmZ1bmNHZXRWYWx1ZSh2YWx1ZUZpbHRlcik7XG4gICAgICAgIC8vIH1cbiAgICAgICAgdG1wRmlsdGVyLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWVGaWx0ZXIpO1xuICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycyA9IFtdO1xuICAgICAgICBpZiAoZmlsdGVyLmxvZ2ljICYmIGZpbHRlci5maWx0ZXJzKSB7XG4gICAgICAgICAgICBmaWx0ZXIuZmlsdGVycy5mb3JFYWNoKGYgPT4gdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZSh0bXBGaWx0ZXIuZmlsdGVycywgZiwgbW9kZWwsIHJvb3RNb2RlbCkpO1xuICAgICAgICAgICAgaWYgKHRtcEZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0bXBGaWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUZpbHRlcihmaWx0ZXI6IEZpbHRlciwgbW9kZWwsIHJvb3RNb2RlbCkge1xuICAgICAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGZpbHRlci5zb3VyY2VGaWVsZDtcbiAgICAgICAgY29uc3Qgc3ViRmllbGQgPSBmaWx0ZXIuc3ViRmllbGQ7XG4gICAgICAgIGNvbnN0IHRyeUdldEJ5U3ViRmllbGQgPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1YkZpZWxkID09IG51bGwpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcCh4ID0+IHhbc3ViRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdCh2YWx1ZSkpIHJldHVybiB2YWx1ZVtzdWJGaWVsZF07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyU2VydmljZS5sb2dFcnJvcihleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cblxuICAgICAgICBpZiAobW9kZWwuaGFzT3duUHJvcGVydHkoc291cmNlRmllbGQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyLmZ1bmNHZXRWYWx1ZSAhPSBudWxsXG4gICAgICAgICAgICAgICAgPyBmaWx0ZXIuZnVuY0dldFZhbHVlKG1vZGVsW3NvdXJjZUZpZWxkXSlcbiAgICAgICAgICAgICAgICA6IHRyeUdldEJ5U3ViRmllbGQobW9kZWxbc291cmNlRmllbGRdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm9vdE1vZGVsKSB7XG4gICAgICAgICAgICBpZiAocm9vdE1vZGVsLmhhc093blByb3BlcnR5KHNvdXJjZUZpZWxkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnlHZXRCeVN1YkZpZWxkKHJvb3RNb2RlbFtzb3VyY2VGaWVsZF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBzb3VyY2VGaWVsZC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgbGV0IHRlbXAgPSByb290TW9kZWw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRlbXAuaGFzT3duUHJvcGVydHkoZikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcCA9IHRlbXBbZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRyeUdldEJ5U3ViRmllbGQodGVtcFtzdWJGaWVsZF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFdvcmtmbG93Q29yZVN0YXR1c1RleHQod29ya2Zsb3dDb3JlU3RhdHVzVmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBpdGVtID0gRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cy5maW5kKHggPT4geC5pZCA9PSB3b3JrZmxvd0NvcmVTdGF0dXNWYWx1ZSk7XG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xuICAgICAgICByZXR1cm4gaXRlbS50ZW47XG4gICAgfVxufVxuIl19