@hestia-earth/ui-components 0.5.0 → 0.5.2

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.
@@ -44,16 +44,12 @@ const logColor = {
44
44
  [LogStatus.dataProvided]: 'dark',
45
45
  [LogStatus.notRequired]: 'grey'
46
46
  };
47
- const methodIdLabel = (methodId, model) => ((model === null || model === void 0 ? void 0 : model.modelKey) && methodId === 'cycle'
47
+ const methodIdLabel = (methodId, model) => (methodId
48
48
  ? ({
49
- transformation: 'Data From Transformation'
50
- })[model.modelKey]
51
- : methodId
52
- ? ({
53
- transformation: 'Data From Transformation',
54
- impact_assessment: 'Data From Cycle'
55
- })[methodId]
56
- : '') || keyToLabel(methodId);
49
+ 'cycle/transformation': 'Data From Transformation',
50
+ impact_assessment: 'Data From Cycle'
51
+ })[methodId]
52
+ : '') || (methodId.includes('/') ? methodId.split('/')[0] : keyToLabel(methodId));
57
53
  const getModelsAt = (log, index) => ('modelsInSubValues' in log ? !log.modelsInSubValues || !log.isOpen : true) && log.configModels[index];
58
54
  const requirementKeys = (requirements) => Object.keys(requirements).filter(k => !nodeTypesLowerCase.includes(k));
59
55
  const requirementColor = (value) => !value || ['None', 'False', '0', '0.0'].includes(value) ? 'danger' : 'white';
@@ -169,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
169
165
  }], logsKey: [{
170
166
  type: Input
171
167
  }] } });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbm9kZS9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLW1vZGVscy9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pHLE9BQU8sRUFBZSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCxPQUFPLEVBQ2lDLFNBQVMsRUFBMkIsZ0JBQWdCLEVBQUUsZUFBZSxFQUMzRyxVQUFVLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFDeEMsTUFBTSwwQkFBMEIsQ0FBQztBQUdsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFeEQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FB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QUF1Qjt5R0FBdkIsdUJBQXVCLDZQQ25FcEMsNmtjQWdVQTs0RkQ3UGEsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFdBQVcsRUFBRSxtQ0FBbUM7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2lCQUNqRDtnS0FPUyxJQUFJO3NCQURYLEtBQUs7Z0JBTUUsT0FBTztzQkFEZCxLQUFLO2dCQUdFLGNBQWM7c0JBRHJCLEtBQUs7Z0JBR0Usa0JBQWtCO3NCQUR6QixLQUFLO2dCQUdFLEtBQUs7c0JBRFosS0FBSztnQkFHRSxlQUFlO3NCQUR0QixLQUFLO2dCQUdFLE9BQU87c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3QsIGZpbHRlciwgcmVkdWNlLCB0b0FycmF5LCBtYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJVGVybUpTT05MRCwgTm9kZVR5cGUsIFRlcm1UZXJtVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IGtleVRvTGFiZWwgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5cbmltcG9ydCB7XG4gIElCbGFua05vZGVMb2dTdWJWYWx1ZSwgSUJsYW5rTm9kZUxvZywgTG9nU3RhdHVzLCBJQ29uZmlnTW9kZWwsIGJsYW5rTm9kZSwgZ3JvdXBMb2dzQnlNb2RlbCwgZ3JvdXBMb2dzQnlUZXJtLFxuICBtb2RlbENvdW50LCBjb21wdXRlVGVybXMsIGxvZ1ZhbHVlQXJyYXlcbn0gZnJvbSAnLi9ub2RlLWxvZ3MtbW9kZWxzLm1vZGVsJztcbmltcG9ydCB7IElKU09OTm9kZSwgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBIZUVuZ2luZVNlcnZpY2UsIElNb2RlbCB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBtYXRjaFRlcm1UeXBlLCBtYXRjaFR5cGUgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBiYXNlVXJsLCBpc0V4dGVybmFsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IHRlcm1UeXBlTGFiZWwgfSBmcm9tICcuLi8uLi90ZXJtcy90ZXJtcy5tb2RlbCc7XG5cbmNvbnN0IG5vZGVUeXBlc0xvd2VyQ2FzZSA9IE9iamVjdC52YWx1ZXMoTm9kZVR5cGUpLm1hcCh2ID0+IHYudG9Mb3dlckNhc2UoKSk7XG5cbmNvbnN0IGxvZ0ljb246IHtcbiAgW3N0YXR1cyBpbiBMb2dTdGF0dXNdOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn0gPSB7XG4gIFtMb2dTdGF0dXMuc3VjY2Vzc106ICdjaGVjaycsXG4gIFtMb2dTdGF0dXMuZXJyb3JdOiAndGltZXMnLFxuICBbTG9nU3RhdHVzLnNraXBIaWVyYXJjaHldOiBbJ2ZhcicsICdjaXJjbGUnXSxcbiAgW0xvZ1N0YXR1cy5kYXRhUHJvdmlkZWRdOiAnY2lyY2xlJyxcbiAgW0xvZ1N0YXR1cy5ub3RSZXF1aXJlZF06ICdkb3QtY2lyY2xlJ1xufTtcblxuY29uc3QgbG9nQ29sb3I6IHtcbiAgW3N0YXR1cyBpbiBMb2dTdGF0dXNdOiBzdHJpbmc7XG59ID0ge1xuICBbTG9nU3RhdHVzLnN1Y2Nlc3NdOiAnc3VjY2VzcycsXG4gIFtMb2dTdGF0dXMuZXJyb3JdOiAnZGFuZ2VyJyxcbiAgW0xvZ1N0YXR1cy5za2lwSGllcmFyY2h5XTogJ2RhcmsnLFxuICBbTG9nU3RhdHVzLmRhdGFQcm92aWRlZF06ICdkYXJrJyxcbiAgW0xvZ1N0YXR1cy5ub3RSZXF1aXJlZF06ICdncmV5J1xufTtcblxuY29uc3QgbWV0aG9kSWRMYWJlbCA9IChtZXRob2RJZDogc3RyaW5nLCBtb2RlbD86IElNb2RlbCkgPT5cbiAgKFxuICAgIG1vZGVsPy5tb2RlbEtleSAmJiBtZXRob2RJZCA9PT0gJ2N5Y2xlJ1xuICAgICAgPyAoe1xuICAgICAgICB0cmFuc2Zvcm1hdGlvbjogJ0RhdGEgRnJvbSBUcmFuc2Zvcm1hdGlvbidcbiAgICAgIH0pW21vZGVsLm1vZGVsS2V5XVxuICAgICAgOiBtZXRob2RJZFxuICAgICAgICA/ICh7XG4gICAgICAgICAgdHJhbnNmb3JtYXRpb246ICdEYXRhIEZyb20gVHJhbnNmb3JtYXRpb24nLFxuICAgICAgICAgIGltcGFjdF9hc3Nlc3NtZW50OiAnRGF0YSBGcm9tIEN5Y2xlJ1xuICAgICAgICB9KVttZXRob2RJZF1cbiAgICAgICAgOiAnJ1xuICApIHx8IGtleVRvTGFiZWwobWV0aG9kSWQpO1xuXG5jb25zdCBnZXRNb2RlbHNBdCA9IChsb2c6IElCbGFua05vZGVMb2dTdWJWYWx1ZSB8IElCbGFua05vZGVMb2csIGluZGV4OiBudW1iZXIpID0+XG4gICgnbW9kZWxzSW5TdWJWYWx1ZXMnIGluIGxvZyA/ICFsb2cubW9kZWxzSW5TdWJWYWx1ZXMgfHwgIWxvZy5pc09wZW4gOiB0cnVlKSAmJiBsb2cuY29uZmlnTW9kZWxzW2luZGV4XTtcblxuY29uc3QgcmVxdWlyZW1lbnRLZXlzID0gKHJlcXVpcmVtZW50czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT5cbiAgT2JqZWN0LmtleXMocmVxdWlyZW1lbnRzKS5maWx0ZXIoayA9PiAhbm9kZVR5cGVzTG93ZXJDYXNlLmluY2x1ZGVzKGspKTtcblxuY29uc3QgcmVxdWlyZW1lbnRDb2xvciA9ICh2YWx1ZTogYW55KSA9PiAhdmFsdWUgfHwgWydOb25lJywgJ0ZhbHNlJywgJzAnLCAnMC4wJ10uaW5jbHVkZXModmFsdWUpID8gJ2RhbmdlcicgOiAnd2hpdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdoZS1ub2RlLWxvZ3MtbW9kZWxzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTm9kZUxvZ3NNb2RlbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIGxvZ3M6IHN0cmluZztcbiAgcHJpdmF0ZSBhbGxUZXJtczogSVRlcm1KU09OTERbXSA9IFtdO1xuICBwcml2YXRlIGFsbEJsYW5rTm9kZXM6IElCbGFua05vZGVMb2dbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbm9kZT86IElKU09OTm9kZTtcbiAgLyoqXG4gICAqIFJlc3RyaWN0IG1vZGVscyBieSBrZXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwcml2YXRlIG5vZGVLZXk/OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgb3JpZ2luYWxWYWx1ZXM6IGJsYW5rTm9kZVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVkVmFsdWVzOiBibGFua05vZGVbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwcml2YXRlIHRlcm1zOiBJVGVybUpTT05MRFtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgZmlsdGVyVGVybVR5cGVzPzogVGVybVRlcm1UeXBlW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbG9nc0tleT86IHN0cmluZztcblxuICBwdWJsaWMgbG9nc1VybD86IHN0cmluZztcbiAgcHVibGljIGJhc2VVcmwgPSBiYXNlVXJsKCk7XG4gIHB1YmxpYyBpc0V4dGVybmFsID0gaXNFeHRlcm5hbCgpO1xuICBwdWJsaWMgTG9nU3RhdHVzID0gTG9nU3RhdHVzO1xuICBwdWJsaWMgbG9nSWNvbiA9IGxvZ0ljb247XG4gIHB1YmxpYyBsb2dDb2xvciA9IGxvZ0NvbG9yO1xuICBwdWJsaWMgcHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWU7XG4gIHB1YmxpYyBnZXRNb2RlbHNBdCA9IGdldE1vZGVsc0F0O1xuICBwdWJsaWMgcmVxdWlyZW1lbnRLZXlzID0gcmVxdWlyZW1lbnRLZXlzO1xuICBwdWJsaWMgcmVxdWlyZW1lbnRDb2xvciA9IHJlcXVpcmVtZW50Q29sb3I7XG4gIHB1YmxpYyBsb2dWYWx1ZUFycmF5ID0gbG9nVmFsdWVBcnJheTtcbiAgcHVibGljIGxvYWRpbmcgPSB0cnVlO1xuICBwdWJsaWMgYmxhbmtOb2RlczogSUJsYW5rTm9kZUxvZ1tdID0gW107XG4gIHB1YmxpYyBtZXRob2RNb2RlbHNDb3VudCA9IDA7XG4gIHB1YmxpYyByb3dzQ291bnQgPSAwO1xuICBwdWJsaWMgbWV0aG9kc0J5SWQ/OiBhbnk7XG4gIHB1YmxpYyBvbmx5UmVxdWlyZWQgPSB0cnVlO1xuICBwdWJsaWMgc2hvd0xlZ2VuZCA9IHRydWU7XG5cbiAgcHVibGljIHRlcm0/OiBzdHJpbmc7XG4gIHB1YmxpYyBzdWdnZXN0VGVybSA9ICh0ZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+KSA9PlxuICAgIHRleHQkLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKHYgPT4gdGhpcy5zdWdnZXN0QnlUZXJtKHYpKSxcbiAgICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbm9kZVNlcnZpY2U6IEhlTm9kZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWFyY2hTZXJ2aWNlOiBIZVNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbmdpbmVTZXJ2aWNlOiBIZUVuZ2luZVNlcnZpY2VcbiAgKSB7IH1cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvZ3NVcmwgPSB0aGlzLm5vZGVTZXJ2aWNlLm5vZGVMb2dzVXJsKHRoaXMubm9kZSk7XG4gICAgLy8gc2F2ZSBhcyBsb2NhbCB2YXJpYWJsZSB0byBhdm9pZCBcInJlc2VydmVkIHlpZWxkIGtleXdvcmRcIiBpc3N1ZVxuICAgIHRoaXMubG9ncyA9IGF3YWl0IHRoaXMuZ2V0TG9ncygpO1xuICAgIGNvbnN0IGdyb3VwZWRMb2dzID0gZ3JvdXBMb2dzQnlNb2RlbCh0aGlzLmxvZ3MpO1xuICAgIGNvbnN0IGxvZ3MgPSB0aGlzLmxvZ3NLZXkgPyBncm91cGVkTG9nc1t0aGlzLmxvZ3NLZXldIDogZ3JvdXBlZExvZ3M7XG5cbiAgICBjb25zdCBub2RlVHlwZSA9IHRoaXMubm9kZVsnQHR5cGUnXSB8fCB0aGlzLm5vZGUudHlwZTtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmVuZ2luZVNlcnZpY2Uub2NoZXN0cmF0b3JDb25maWcobm9kZVR5cGUpO1xuXG4gICAgY29uc3QgeyByZXN1bHRzOiBtb2RlbHMgfSA9IGF3YWl0IHRoaXMuc2VhcmNoU2VydmljZS5zZWFyY2g8SVRlcm1KU09OTEQsIE5vZGVUeXBlLlRlcm0+KHtcbiAgICAgIGZpZWxkczogWydAdHlwZScsICdAaWQnLCAnbmFtZSddLFxuICAgICAgbGltaXQ6IDEwMDAsXG4gICAgICBxdWVyeToge1xuICAgICAgICBib29sOiB7XG4gICAgICAgICAgbXVzdDogW1xuICAgICAgICAgICAgbWF0Y2hUeXBlKE5vZGVUeXBlLlRlcm0pLFxuICAgICAgICAgICAgbWF0Y2hUZXJtVHlwZShUZXJtVGVybVR5cGUubW9kZWwpXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLm1ldGhvZHNCeUlkID0gYXdhaXQgZnJvbShtb2RlbHMpLnBpcGUoXG4gICAgICBmaWx0ZXIodiA9PiAhIXYpLFxuICAgICAgZGlzdGluY3QodiA9PiB2WydAaWQnXSksXG4gICAgICByZWR1Y2UoKHByZXYsIGN1cnIpID0+ICh7IC4uLnByZXYsIFtjdXJyWydAaWQnXV06IGN1cnIgfSksIHt9KVxuICAgICkudG9Qcm9taXNlKCk7XG5cbiAgICAvLyBmcm9tIGBtb2RlbC1saW5rcy5qc29uYCBmaWxlXG4gICAgY29uc3QgZW5naW5lTW9kZWxzID0gYXdhaXQgdGhpcy5lbmdpbmVTZXJ2aWNlLm1vZGVscygpO1xuXG4gICAgdGhpcy5hbGxUZXJtcyA9IGF3YWl0IGNvbXB1dGVUZXJtcyh0aGlzLm9yaWdpbmFsVmFsdWVzLCB0aGlzLnJlY2FsY3VsYXRlZFZhbHVlcywgdGhpcy50ZXJtcywgdGhpcy5maWx0ZXJUZXJtVHlwZXMpO1xuXG4gICAgdGhpcy5hbGxCbGFua05vZGVzID0gdGhpcy5hbGxUZXJtcy5mbGF0TWFwKFxuICAgICAgZ3JvdXBMb2dzQnlUZXJtKG5vZGVUeXBlLCBsb2dzLCBlbmdpbmVNb2RlbHMsIGNvbmZpZywgdGhpcy5vcmlnaW5hbFZhbHVlcywgdGhpcy5yZWNhbGN1bGF0ZWRWYWx1ZXMsIHRoaXMubm9kZUtleSlcbiAgICApO1xuICAgIHRoaXMubWV0aG9kTW9kZWxzQ291bnQgPSBtb2RlbENvdW50KHRoaXMuYWxsQmxhbmtOb2Rlcyk7XG4gICAgdGhpcy5yb3dzQ291bnQgPSB0aGlzLmFsbEJsYW5rTm9kZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgMSArIGN1cnIuc3ViVmFsdWVzLmxlbmd0aCArIGN1cnIua2V5cy5sZW5ndGgsIDApO1xuXG4gICAgdGhpcy5maWx0ZXJSZXN1bHRzKCk7XG5cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9ncygpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlU2VydmljZS5nZXRMb2codGhpcy5ub2RlKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VnZ2VzdEJ5VGVybSh0ZXJtOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmFsbFRlcm1zKS5waXBlKFxuICAgICAgbWFwKHYgPT4gdi5uYW1lKSxcbiAgICAgIGZpbHRlcih2ID0+IHYudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtLnRvTG93ZXJDYXNlKCkpKSxcbiAgICAgIHRvQXJyYXkoKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUJsYW5rTm9kZShfaW5kZXg6IG51bWJlciwgbm9kZTogSUJsYW5rTm9kZUxvZykge1xuICAgIHJldHVybiBub2RlLnRlcm1JZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyZWRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclRlcm1UeXBlcz8ubWFwKHRlcm1UeXBlTGFiZWwpLmpvaW4oJyAmICcpO1xuICB9XG5cbiAgcHVibGljIGZpbHRlclJlc3VsdHMoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmJsYW5rTm9kZXMgPSB0aGlzLmFsbEJsYW5rTm9kZXMuZmlsdGVyKCh7IGlzUmVxdWlyZWQsIHRlcm06IHsgbmFtZSB9LCBzdWJWYWx1ZXMgfSkgPT5cbiAgICAgICAgdGhpcy50ZXJtXG4gICAgICAgICAgPyBuYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXJtLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgOiAhdGhpcy5vbmx5UmVxdWlyZWQgfHwgIXRoaXMuZmlsdGVyVGVybVR5cGVzPy5sZW5ndGggfHwgaXNSZXF1aXJlZCB8fCBzdWJWYWx1ZXMuc29tZSh2ID0+IHYuaXNSZXF1aXJlZClcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0aG9kTmFtZSh7IG1ldGhvZElkLCBtb2RlbCB9OiBJQ29uZmlnTW9kZWwpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRob2RzQnlJZFttZXRob2RJZF0/Lm5hbWUgfHwgbWV0aG9kSWRMYWJlbChtZXRob2RJZCwgbW9kZWwpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicHgtMyBwYi0zXCI+XG4gIDxkaXYgY2xhc3M9XCJoYXMtdGV4dC1yaWdodCBtYi0yXCIgKm5nSWY9XCIhaXNFeHRlcm5hbFwiPlxuICAgIDxhIGNsYXNzPVwiaXMtc2l6ZS03XCIgKm5nSWY9XCJsb2dzVXJsXCIgW2hyZWZdPVwibG9nc1VybFwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgPGZhLWljb24gaWNvbj1cImV4dGVybmFsLWxpbmstYWx0XCI+PC9mYS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJwbC0yXCI+T3BlbiBGdWxsIExvZ3M8L3NwYW4+XG4gICAgPC9hPlxuICA8L2Rpdj5cblxuICA8aGUtZGF0YS10YWJsZSBjbGFzcz1cIm1iLTEgaXMtc21hbGxcIiBbc21hbGxdPVwidHJ1ZVwiIFtuYlJvd3NdPVwicm93c0NvdW50XCIgbWF4SGVpZ2h0PVwiMzIwXCI+XG4gICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtbmFycm93IGlzLXN0cmlwZWRcIj5cbiAgICAgIDx0aGVhZD5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBjbGFzcz1cIndpZHRoLWF1dG9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbCBpcy1leHBhbmRlZCBoYXMtaWNvbnMtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJpbnB1dCBzZWFyY2gtaW5wdXQgaXMtc21hbGxcIlxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZXJtXCIgbmFtZT1cInRlcm1cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgYnkgbmFtZVwiXG4gICAgICAgICAgICAgICAgICBbbmdiVHlwZWFoZWFkXT1cInN1Z2dlc3RUZXJtXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c0ZpcnN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsdGVyUmVzdWx0cygpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpY29uIGlzLXNtYWxsIGlzLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXRlcm1cIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRlcm0gPSAnJzsgZmlsdGVyUmVzdWx0cygpO1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInRpbWVzXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDx0aCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj5Vbml0czwvdGg+XG4gICAgICAgICAgPHRoPk9yaWdpbmFsPC90aD5cbiAgICAgICAgICA8dGg+UmVjYWxjdWxhdGVkPC90aD5cbiAgICAgICAgICA8dGg+RGlmZmVyZW5jZTwvdGg+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjIG9mIG1ldGhvZE1vZGVsc0NvdW50IHwgdGltZXM7IGxldCBpID0gaW5kZXhcIj4oe3tpICsgMX19KTwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8dHIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLXRleHQtY2VudGVyZWRcIiBjb2xzcGFuPVwiNlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LWNlbnRlciBweS0zXCI+XG4gICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJzcGlubmVyXCIgW3B1bHNlXT1cInRydWVcIiBzaXplPVwibGdcIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgKm5nSWY9XCIhbG9hZGluZyAmJiBibGFua05vZGVzLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImhhcy10ZXh0LWNlbnRlcmVkXCIgY29sc3Bhbj1cIjZcIj5cbiAgICAgICAgICAgIDxzcGFuPk5vIGRhdGE8L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYmxhbmtOb2RlIG9mIGJsYW5rTm9kZXM7IHRyYWNrQnk6IHRyYWNrQnlCbGFua05vZGVcIj5cbiAgICAgICAgICA8dHIgW2NsYXNzLmhhcy1zdWItcm93c109XCJibGFua05vZGUuY2FuT3BlblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0b1wiIFthdHRyLnRpdGxlXT1cImJsYW5rTm9kZS50ZXJtLm5hbWVcIj5cbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtYWxpZ24tdG9wIHByLTIgb3Blbi1ub2RlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmxhbmtOb2RlLmlzT3BlbiA9ICFibGFua05vZGUuaXNPcGVuXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImJsYW5rTm9kZS5jYW5PcGVuXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1kb3duXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhYmxhbmtOb2RlLmlzT3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwiYW5nbGUtcmlnaHRcIiBbY2xhc3MuaXMtaGlkZGVuXT1cImJsYW5rTm9kZS5pc09wZW5cIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayBjbGFzcz1cImlzLWlubGluZS1ibG9ja1wiIFtub2RlXT1cImJsYW5rTm9kZS50ZXJtXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e2JsYW5rTm9kZS50ZXJtLm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPlxuICAgICAgICAgICAgICA8c3Bhbj57e2JsYW5rTm9kZS50ZXJtPy51bml0c319PC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0T3JpZ2luYWxWYWx1ZT5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e2JsYW5rTm9kZS5vcmlnaW5hbFZhbHVlIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319PC9zcGFuPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxhbmtOb2RlLmFsbFBhcmFsbGVsOyBlbHNlIGRlZmF1bHRPcmlnaW5hbFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbW9kZWwgb2YgYmxhbmtOb2RlLmNvbmZpZ01vZGVsc1swXVwiPnt7YmxhbmtOb2RlLm9yaWdpbmFsVmFsdWVCeU1ldGhvZElkW21vZGVsLm1ldGhvZElkXSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYmxhbmtOb2RlLmlzT3JpZ2luYWwgfHwgYmxhbmtOb2RlLmlzUmVjYWxjdWxhdGVkOyBlbHNlIG5vdFJlY2FsY3VsYXRlZFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJlY2FsY3VsYXRlZFZhbHVlPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tibGFua05vZGUucmVjYWxjdWxhdGVkVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxhbmtOb2RlLmFsbFBhcmFsbGVsOyBlbHNlIGRlZmF1bHRSZWNhbGN1bGF0ZWRWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgbW9kZWwgb2YgYmxhbmtOb2RlLmNvbmZpZ01vZGVsc1swXVwiPnt7YmxhbmtOb2RlLnJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZFttb2RlbC5tZXRob2RJZF0gfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiaXMtbm93cmFwXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdERlbHRhVmFsdWU+XG4gICAgICAgICAgICAgICAgPGhlLWJsYW5rLW5vZGUtdmFsdWUtZGVsdGEgKm5nSWY9XCJibGFua05vZGUub3JpZ2luYWwubGVuZ3RoICYmIGJsYW5rTm9kZS5pc1JlY2FsY3VsYXRlZDsgZWxzZSBub1ZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJibGFua05vZGUucmVjYWxjdWxhdGVkVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW29yaWdpbmFsVmFsdWVdPVwiYmxhbmtOb2RlLm9yaWdpbmFsVmFsdWVcIlxuICAgICAgICAgICAgICAgID48L2hlLWJsYW5rLW5vZGUtdmFsdWUtZGVsdGE+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibGFua05vZGUuYWxsUGFyYWxsZWw7IGVsc2UgZGVmYXVsdERlbHRhVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBibGFua05vZGUuY29uZmlnTW9kZWxzWzBdXCI+XG4gICAgICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS12YWx1ZS1kZWx0YSAqbmdJZj1cImJsYW5rTm9kZS5vcmlnaW5hbFZhbHVlQnlNZXRob2RJZFttb2RlbC5tZXRob2RJZF0gIT09IG51bGwgJiYgYmxhbmtOb2RlLnJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZFttb2RlbC5tZXRob2RJZF0gIT09IG51bGw7IGVsc2Ugbm9WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJibGFua05vZGUucmVjYWxjdWxhdGVkVmFsdWVCeU1ldGhvZElkW21vZGVsLm1ldGhvZElkXVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcmlnaW5hbFZhbHVlXT1cImJsYW5rTm9kZS5vcmlnaW5hbFZhbHVlQnlNZXRob2RJZFttb2RlbC5tZXRob2RJZF1cIlxuICAgICAgICAgICAgICAgICAgPjwvaGUtYmxhbmstbm9kZS12YWx1ZS1kZWx0YT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsczsgY29udGV4dDoge2RhdGE6IGJsYW5rTm9kZX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuXG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3ViVmFsdWUgb2YgYmxhbmtOb2RlLmtleXNcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWhpZGRlbl09XCIhYmxhbmtOb2RlLmlzT3BlblwiXG4gICAgICAgICAgICBbY2xhc3MuaGFzLXN1Yi1yb3dzXT1cImJsYW5rTm9kZS5zdWJWYWx1ZXM/Lmxlbmd0aFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLXRvcCBwbC0zIHByLTEgZmllbGQtbm9kZVwiPkZpZWxkOjwvc3Bhbj5cblxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImlzLWlubGluZS1ibG9ja1wiICpuZ0lmPVwiYmxhbmtOb2RlLnR5cGVcIlxuICAgICAgICAgICAgICAgIFtocmVmXT1cImJhc2VVcmwgKyAnL3NjaGVtYS8nICsgYmxhbmtOb2RlLnR5cGUgKyAnIycgKyBzdWJWYWx1ZS5rZXlcIiB0YXJnZXQ9XCJfYmxhbmtcIiBbdGl0bGVdPVwic3ViVmFsdWUua2V5XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtbm93cmFwIGhhcy10ZXh0LWVsbGlwc2lzXCI+e3tzdWJWYWx1ZS5rZXl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi10b3BcIiAqbmdJZj1cIiFibGFua05vZGUudHlwZVwiPnt7c3ViVmFsdWUua2V5fX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPjwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic3ViVmFsdWUub3JpZ2luYWxWYWx1ZSAhPT0gbnVsbDsgZWxzZSBub1ZhbHVlXCI+e3tzdWJWYWx1ZS5vcmlnaW5hbFZhbHVlIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319PC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJWYWx1ZS5pc1JlY2FsY3VsYXRlZCB8fCBzdWJWYWx1ZS5rZXkgPT09ICdpbXBhY3RBc3Nlc3NtZW50JzsgZWxzZSBub3RSZWNhbGN1bGF0ZWRcIj5cbiAgICAgICAgICAgICAgICB7e3N1YlZhbHVlLnJlY2FsY3VsYXRlZFZhbHVlIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+LTwvdGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxhbmtOb2RlTW9kZWxzOyBjb250ZXh0OiB7ZGF0YTogc3ViVmFsdWV9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90cj5cblxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN1YlZhbHVlIG9mIGJsYW5rTm9kZS5zdWJWYWx1ZXNcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWhpZGRlbl09XCIhYmxhbmtOb2RlLmlzT3BlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwid2lkdGgtYXV0byBoYXMtdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLXRvcCBwbC0zXCI+e3tzdWJWYWx1ZS5rZXkgfCBrZXlUb0xhYmVsfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YlZhbHVlLmlkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIiBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi10b3AgcHItMVwiPjo8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdWJWYWx1ZS5rZXlcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgKm5nU3dpdGNoQ2FzZT1cIidiYWNrZ3JvdW5kRGF0YSdcIj57e3N1YlZhbHVlLmlkIHwga2V5VG9MYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGhlLW5vZGUtbGluayAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwiaXMtYmxvY2sgcGwtNFwiIFtub2RlXT1cInsnQHR5cGUnOidUZXJtJywnQGlkJzpzdWJWYWx1ZS5pZH1cIiBbYXR0ci50aXRsZV09XCJzdWJWYWx1ZS5pZCB8IGtleVRvTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e3N1YlZhbHVlLmlkIHwga2V5VG9MYWJlbH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9oZS1ub2RlLWxpbms+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImhhcy1ib3JkZXItcmlnaHRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJWYWx1ZS5rZXkgPT09ICdpbnB1dCdcIj57e2JsYW5rTm9kZS50ZXJtPy51bml0c319PC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJWYWx1ZS5vcmlnaW5hbFZhbHVlICE9PSBudWxsOyBlbHNlIG5vVmFsdWVcIj57e3N1YlZhbHVlLm9yaWdpbmFsVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN1YlZhbHVlLmlzUmVjYWxjdWxhdGVkOyBlbHNlIG5vdFJlY2FsY3VsYXRlZFwiPlxuICAgICAgICAgICAgICAgIHt7c3ViVmFsdWUucmVjYWxjdWxhdGVkVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD4tPC90ZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJibGFua05vZGVNb2RlbHM7IGNvbnRleHQ6IHtkYXRhOiBzdWJWYWx1ZX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9oZS1kYXRhLXRhYmxlPlxuXG4gIDxkaXYgY2xhc3M9XCJpcy1zaXplLTcgaXMtaXRhbGljXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbnMgaXMtdmFyaWFibGUgaXMtMSBteS0wXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGlzLW5hcnJvd1wiPlxuICAgICAgICA8cD5cbiAgICAgICAgICA8YSBjbGFzcz1cImlzLWlubGluZS1ibG9jayBwci0yXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzaG93TGVnZW5kID0gIXNob3dMZWdlbmRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1kb3duXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhc2hvd0xlZ2VuZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1yaWdodFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwic2hvd0xlZ2VuZFwiPjwvZmEtaWNvbj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIj5MZWdlbmQ6PC9zcGFuPlxuICAgICAgICA8L3A+XG4gICAgICAgIDx1bCBjbGFzcz1cImNvbnRlbnQgcGwtMlwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiIXNob3dMZWdlbmRcIj5cbiAgICAgICAgICA8bGlcbiAgICAgICAgICAgIGNsYXNzPVwiaGFzLXRleHQte3tsb2dDb2xvcltzdGF0dXMudmFsdWVdfX1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0YXR1cyBvZiBMb2dTdGF0dXMgfCBrZXlzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJsb2dJY29uW3N0YXR1cy52YWx1ZV1cIj48L2ZhLWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTFcIj57e3N0YXR1cy52YWx1ZX19PC9zcGFuPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaGFzLXRleHQtcmlnaHRcIiAqbmdJZj1cImZpbHRlcmVkVHlwZVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgY2hlY2tib3hcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJzZWxlY3RvclwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm9ubHlSZXF1aXJlZFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImZpbHRlclJlc3VsdHMoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiISF0ZXJtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yXCI+U2hvdyBvbmx5IHJlbGV2YW50IHt7ZmlsdGVyZWRUeXBlIHwgcGx1cmFsaXplfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNibGFua05vZGVNb2RlbHMgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDx0ZCBjbGFzcz1cImJsYW5rLW5vZGUtaW5kZXgte3tpfX1cIiAqbmdGb3I9XCJsZXQgYyBvZiBtZXRob2RNb2RlbHNDb3VudCB8IHRpbWVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldE1vZGVsc0F0KGRhdGEsIGkpOyBsZXQgbW9kZWxzOyBlbHNlIG5vVmFsdWVcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbW9kZWxTZXJpZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsOyBjb250ZXh0OiB7bW9kZWw6bW9kZWxzfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxkaXYgKm5nSWY9XCJtb2RlbHMgfCBpc0FycmF5OyBlbHNlIG1vZGVsU2VyaWVcIj5cbiAgICAgICAgPHAgKm5nRm9yPVwibGV0IG1vZGVsIG9mIG1vZGVsc1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJibGFua05vZGVNb2RlbDsgY29udGV4dDoge21vZGVsfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3A+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC90ZD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYmxhbmtOb2RlTW9kZWwgbGV0LW1vZGVsPVwibW9kZWxcIj5cbiAgPHNwYW5cbiAgICBbY2xhc3MudHJpZ2dlci1wb3BvdmVyXT1cIm1vZGVsLnNob3dMb2dzXCJcbiAgICBbbmdiUG9wb3Zlcl09XCJsb2dEZXRhaWxzXCIgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgIHRyaWdnZXJzPVwibWFudWFsXCIgI3A9XCJuZ2JQb3BvdmVyXCIgcGxhY2VtZW50PVwibGVmdFwiIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgIChjbGljayk9XCJwLmlzT3BlbigpID8gcC5jbG9zZSgpIDogKG1vZGVsLnNob3dMb2dzID8gcC5vcGVuKHsgbG9nczogbW9kZWwubG9ncyB9KSA6IG51bGwpXCJcbiAgPlxuICAgIDxzcGFuIGNsYXNzPVwiaXMtY2FwaXRhbGl6ZWRcIj57e21ldGhvZE5hbWUobW9kZWwpfX08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJwbC0xXCIgKm5nSWY9XCJtb2RlbC5sb2dzPy5tZXRob2RUaWVyXCI+W3t7bW9kZWwubG9ncy5tZXRob2RUaWVyfX1dPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicGwtMSBoYXMtdGV4dC17e2xvZ0NvbG9yW21vZGVsLnN0YXR1c119fVwiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwibG9nSWNvblttb2RlbC5zdGF0dXNdXCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInBsLTFcIiAqbmdJZj1cIm1vZGVsLm1vZGVsXCI+XG4gICAgICAoPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRvY3NMaW5rOyBjb250ZXh0OiB7JGltcGxpY2l0OiBtb2RlbC5tb2RlbH1cIj48L25nLWNvbnRhaW5lcj4pXG4gICAgPC9zcGFuPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vVmFsdWU+LTwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbm90UmVjYWxjdWxhdGVkPm5vdCByZWNhbGN1bGF0ZWQ8L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvZ0RldGFpbHMgbGV0LWxvZ3M9XCJsb2dzXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2dzPy5yZXF1aXJlbWVudHNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaXMtcmVxdWlyZW1lbnRcIiAqbmdGb3I9XCJsZXQga2V5IG9mIHJlcXVpcmVtZW50S2V5cyhsb2dzLnJlcXVpcmVtZW50cylcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2dMaW5lOyBjb250ZXh0OntrZXksIHZhbHVlOmxvZ3MucmVxdWlyZW1lbnRzW2tleV19XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9ncz8ubG9nc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJpcy1sb2dcIiAqbmdGb3I9XCJsZXQga2V5IG9mIGxvZ3MubG9ncyB8IGtleXNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2dMaW5lOyBjb250ZXh0OmtleVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvZ3M/Lm1pc3NpbmdMb29rdXBzPy5sZW5ndGhcIj5cbiAgICA8cCBjbGFzcz1cIm10LTJcIj5PcHRpb25hbCBkYXRhIG1pc3Npbmc6PC9wPlxuXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lciBkYXRhLXRhYmxlLWNvbnRhaW5lclwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtZnVsbHdpZHRoIG1iLTBcIj5cbiAgICAgICAgPHRoZWFkIGNsYXNzPVwiaGFzLWJhY2tncm91bmQtYmxhY2tcIj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIj5GaWxlbmFtZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIj5Db2x1bW4gVGl0bGU8L3NwYW4+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhhcy10ZXh0LXdoaXRlXCI+Um93ICh0ZXJtLmlkKTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5IGNsYXNzPVwiaGFzLWJhY2tncm91bmQtYmxhY2sgaGFzLXRleHQtd2hpdGVcIj5cbiAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2YgbG9ncy5taXNzaW5nTG9va3Vwc1wiPlxuICAgICAgICAgICAgPHRkPnt7ZGF0YS5maWxlbmFtZX19PC90ZD5cbiAgICAgICAgICAgIDx0ZD57e2RhdGEuY29sdW1ufX08L3RkPlxuICAgICAgICAgICAgPHRkPnt7ZGF0YS50ZXJtSWR9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNsb2dMaW5lIGxldC1rZXk9XCJrZXlcIiBsZXQtdmFsdWU9XCJ2YWx1ZVwiPlxuICA8bmctY29udGFpbmVyICpiaW5kT25jZT1cInZhbHVlXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJwci0xIGlzLWlubGluZS1ibG9jayBpcy1hbGlnbi1taWRkbGVcIj57e2tleX19Ojwvc3Bhbj5cbiAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVZhbHVlPlxuICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtYWxpZ24tbWlkZGxlXCI+e3t2YWx1ZX19PC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi1taWRkbGVcIiAqbmdJZj1cImxvZ1ZhbHVlQXJyYXkodmFsdWUpOyBsZXQgdmFsdWVBcnJheTsgZWxzZSBzaW5nbGVWYWx1ZVwiPlxuICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgaXMtYm9yZGVyZWQgaGFzLWJhY2tncm91bmQtYmxhY2sgaGFzLXRleHQtd2hpdGVcIj5cbiAgICAgICAgPHRoZWFkICpuZ0lmPVwidmFsdWVBcnJheVswXSB8IGlzT2JqZWN0XCI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIiAqbmdGb3I9XCJsZXQgdiBvZiB2YWx1ZUFycmF5WzBdIHwga2V5c1wiPnt7di5rZXl9fTwvdGg+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90aGVhZD5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdiBvZiB2YWx1ZUFycmF5XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUFycmF5VmFsdWU+XG4gICAgICAgICAgICAgIDx0ZD57e3Z9fTwvdGQ+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInYgfCBpc09iamVjdDsgZWxzZSBzaW5nbGVBcnJheVZhbHVlXCI+XG4gICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgdnYgb2YgdiB8IGtleXNcIj57e3Z2LnZhbHVlfX08L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkb2NzTGluayBsZXQtbW9kZWw+XG4gIDxhIFtocmVmXT1cIm1vZGVsLmFwaURvY3NQYXRoIHx8IG1vZGVsLmRvY1BhdGggfHwgbW9kZWwucGF0aFwiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICA8c3Bhbj5Eb2NzPC9zcGFuPlxuICAgIDxmYS1pY29uIGNsYXNzPVwibWwtMVwiIGljb249XCJleHRlcm5hbC1saW5rLWFsdFwiIHNpemU9XCJzbVwiPjwvZmEtaWNvbj5cbiAgPC9hPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbm9kZS9ub2RlLWxvZ3MtbW9kZWxzL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL25vZGUvbm9kZS1sb2dzLW1vZGVscy9ub2RlLWxvZ3MtbW9kZWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pHLE9BQU8sRUFBZSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUU5RCxPQUFPLEVBQ2lDLFNBQVMsRUFBMkIsZ0JBQWdCLEVBQUUsZUFBZSxFQUMzRyxVQUFVLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFDeEMsTUFBTSwwQkFBMEIsQ0FBQztBQUdsQyxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFeEQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FB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UGEsdUJBQXVCO2tCQUxuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFdBQVcsRUFBRSxtQ0FBbUM7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2lCQUNqRDtnS0FPUyxJQUFJO3NCQURYLEtBQUs7Z0JBTUUsT0FBTztzQkFEZCxLQUFLO2dCQUdFLGNBQWM7c0JBRHJCLEtBQUs7Z0JBR0Usa0JBQWtCO3NCQUR6QixLQUFLO2dCQUdFLEtBQUs7c0JBRFosS0FBSztnQkFHRSxlQUFlO3NCQUR0QixLQUFLO2dCQUdFLE9BQU87c0JBRGQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3QsIGZpbHRlciwgcmVkdWNlLCB0b0FycmF5LCBtYXAsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJVGVybUpTT05MRCwgTm9kZVR5cGUsIFRlcm1UZXJtVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IGtleVRvTGFiZWwgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5cbmltcG9ydCB7XG4gIElCbGFua05vZGVMb2dTdWJWYWx1ZSwgSUJsYW5rTm9kZUxvZywgTG9nU3RhdHVzLCBJQ29uZmlnTW9kZWwsIGJsYW5rTm9kZSwgZ3JvdXBMb2dzQnlNb2RlbCwgZ3JvdXBMb2dzQnlUZXJtLFxuICBtb2RlbENvdW50LCBjb21wdXRlVGVybXMsIGxvZ1ZhbHVlQXJyYXlcbn0gZnJvbSAnLi9ub2RlLWxvZ3MtbW9kZWxzLm1vZGVsJztcbmltcG9ydCB7IElKU09OTm9kZSwgSGVOb2RlU2VydmljZSB9IGZyb20gJy4uL25vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBIZUVuZ2luZVNlcnZpY2UsIElNb2RlbCB9IGZyb20gJy4uLy4uL2VuZ2luZS9lbmdpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBtYXRjaFRlcm1UeXBlLCBtYXRjaFR5cGUgfSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoLm1vZGVsJztcbmltcG9ydCB7IEhlU2VhcmNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBiYXNlVXJsLCBpc0V4dGVybmFsIH0gZnJvbSAnLi4vLi4vY29tbW9uL3V0aWxzJztcbmltcG9ydCB7IHRlcm1UeXBlTGFiZWwgfSBmcm9tICcuLi8uLi90ZXJtcy90ZXJtcy5tb2RlbCc7XG5cbmNvbnN0IG5vZGVUeXBlc0xvd2VyQ2FzZSA9IE9iamVjdC52YWx1ZXMoTm9kZVR5cGUpLm1hcCh2ID0+IHYudG9Mb3dlckNhc2UoKSk7XG5cbmNvbnN0IGxvZ0ljb246IHtcbiAgW3N0YXR1cyBpbiBMb2dTdGF0dXNdOiBzdHJpbmcgfCBzdHJpbmdbXTtcbn0gPSB7XG4gIFtMb2dTdGF0dXMuc3VjY2Vzc106ICdjaGVjaycsXG4gIFtMb2dTdGF0dXMuZXJyb3JdOiAndGltZXMnLFxuICBbTG9nU3RhdHVzLnNraXBIaWVyYXJjaHldOiBbJ2ZhcicsICdjaXJjbGUnXSxcbiAgW0xvZ1N0YXR1cy5kYXRhUHJvdmlkZWRdOiAnY2lyY2xlJyxcbiAgW0xvZ1N0YXR1cy5ub3RSZXF1aXJlZF06ICdkb3QtY2lyY2xlJ1xufTtcblxuY29uc3QgbG9nQ29sb3I6IHtcbiAgW3N0YXR1cyBpbiBMb2dTdGF0dXNdOiBzdHJpbmc7XG59ID0ge1xuICBbTG9nU3RhdHVzLnN1Y2Nlc3NdOiAnc3VjY2VzcycsXG4gIFtMb2dTdGF0dXMuZXJyb3JdOiAnZGFuZ2VyJyxcbiAgW0xvZ1N0YXR1cy5za2lwSGllcmFyY2h5XTogJ2RhcmsnLFxuICBbTG9nU3RhdHVzLmRhdGFQcm92aWRlZF06ICdkYXJrJyxcbiAgW0xvZ1N0YXR1cy5ub3RSZXF1aXJlZF06ICdncmV5J1xufTtcblxuY29uc3QgbWV0aG9kSWRMYWJlbCA9IChtZXRob2RJZDogc3RyaW5nLCBtb2RlbD86IElNb2RlbCkgPT5cbiAgKFxuICAgIG1ldGhvZElkXG4gICAgICA/ICh7XG4gICAgICAgICdjeWNsZS90cmFuc2Zvcm1hdGlvbic6ICdEYXRhIEZyb20gVHJhbnNmb3JtYXRpb24nLFxuICAgICAgICBpbXBhY3RfYXNzZXNzbWVudDogJ0RhdGEgRnJvbSBDeWNsZSdcbiAgICAgIH0pW21ldGhvZElkXVxuICAgICAgOiAnJ1xuICApIHx8IChcbiAgICBtZXRob2RJZC5pbmNsdWRlcygnLycpID8gbWV0aG9kSWQuc3BsaXQoJy8nKVswXSA6IGtleVRvTGFiZWwobWV0aG9kSWQpXG4gICk7XG5cbmNvbnN0IGdldE1vZGVsc0F0ID0gKGxvZzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHwgSUJsYW5rTm9kZUxvZywgaW5kZXg6IG51bWJlcikgPT5cbiAgKCdtb2RlbHNJblN1YlZhbHVlcycgaW4gbG9nID8gIWxvZy5tb2RlbHNJblN1YlZhbHVlcyB8fCAhbG9nLmlzT3BlbiA6IHRydWUpICYmIGxvZy5jb25maWdNb2RlbHNbaW5kZXhdO1xuXG5jb25zdCByZXF1aXJlbWVudEtleXMgPSAocmVxdWlyZW1lbnRzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PlxuICBPYmplY3Qua2V5cyhyZXF1aXJlbWVudHMpLmZpbHRlcihrID0+ICFub2RlVHlwZXNMb3dlckNhc2UuaW5jbHVkZXMoaykpO1xuXG5jb25zdCByZXF1aXJlbWVudENvbG9yID0gKHZhbHVlOiBhbnkpID0+ICF2YWx1ZSB8fCBbJ05vbmUnLCAnRmFsc2UnLCAnMCcsICcwLjAnXS5pbmNsdWRlcyh2YWx1ZSkgPyAnZGFuZ2VyJyA6ICd3aGl0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hlLW5vZGUtbG9ncy1tb2RlbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbm9kZS1sb2dzLW1vZGVscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL25vZGUtbG9ncy1tb2RlbHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBOb2RlTG9nc01vZGVsc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgbG9nczogc3RyaW5nO1xuICBwcml2YXRlIGFsbFRlcm1zOiBJVGVybUpTT05MRFtdID0gW107XG4gIHByaXZhdGUgYWxsQmxhbmtOb2RlczogSUJsYW5rTm9kZUxvZ1tdID0gW107XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBub2RlPzogSUpTT05Ob2RlO1xuICAvKipcbiAgICogUmVzdHJpY3QgbW9kZWxzIGJ5IGtleS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgbm9kZUtleT86IHN0cmluZztcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBvcmlnaW5hbFZhbHVlczogYmxhbmtOb2RlW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSByZWNhbGN1bGF0ZWRWYWx1ZXM6IGJsYW5rTm9kZVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHByaXZhdGUgdGVybXM6IElUZXJtSlNPTkxEW10gPSBbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBmaWx0ZXJUZXJtVHlwZXM/OiBUZXJtVGVybVR5cGVbXTtcbiAgQElucHV0KClcbiAgcHJpdmF0ZSBsb2dzS2V5Pzogc3RyaW5nO1xuXG4gIHB1YmxpYyBsb2dzVXJsPzogc3RyaW5nO1xuICBwdWJsaWMgYmFzZVVybCA9IGJhc2VVcmwoKTtcbiAgcHVibGljIGlzRXh0ZXJuYWwgPSBpc0V4dGVybmFsKCk7XG4gIHB1YmxpYyBMb2dTdGF0dXMgPSBMb2dTdGF0dXM7XG4gIHB1YmxpYyBsb2dJY29uID0gbG9nSWNvbjtcbiAgcHVibGljIGxvZ0NvbG9yID0gbG9nQ29sb3I7XG4gIHB1YmxpYyBwcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTtcbiAgcHVibGljIGdldE1vZGVsc0F0ID0gZ2V0TW9kZWxzQXQ7XG4gIHB1YmxpYyByZXF1aXJlbWVudEtleXMgPSByZXF1aXJlbWVudEtleXM7XG4gIHB1YmxpYyByZXF1aXJlbWVudENvbG9yID0gcmVxdWlyZW1lbnRDb2xvcjtcbiAgcHVibGljIGxvZ1ZhbHVlQXJyYXkgPSBsb2dWYWx1ZUFycmF5O1xuICBwdWJsaWMgbG9hZGluZyA9IHRydWU7XG4gIHB1YmxpYyBibGFua05vZGVzOiBJQmxhbmtOb2RlTG9nW10gPSBbXTtcbiAgcHVibGljIG1ldGhvZE1vZGVsc0NvdW50ID0gMDtcbiAgcHVibGljIHJvd3NDb3VudCA9IDA7XG4gIHB1YmxpYyBtZXRob2RzQnlJZD86IGFueTtcbiAgcHVibGljIG9ubHlSZXF1aXJlZCA9IHRydWU7XG4gIHB1YmxpYyBzaG93TGVnZW5kID0gdHJ1ZTtcblxuICBwdWJsaWMgdGVybT86IHN0cmluZztcbiAgcHVibGljIHN1Z2dlc3RUZXJtID0gKHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4pID0+XG4gICAgdGV4dCQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLnN1Z2dlc3RCeVRlcm0odikpLFxuICAgICk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBub2RlU2VydmljZTogSGVOb2RlU2VydmljZSxcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IEhlU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIGVuZ2luZVNlcnZpY2U6IEhlRW5naW5lU2VydmljZVxuICApIHsgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9nc1VybCA9IHRoaXMubm9kZVNlcnZpY2Uubm9kZUxvZ3NVcmwodGhpcy5ub2RlKTtcbiAgICAvLyBzYXZlIGFzIGxvY2FsIHZhcmlhYmxlIHRvIGF2b2lkIFwicmVzZXJ2ZWQgeWllbGQga2V5d29yZFwiIGlzc3VlXG4gICAgdGhpcy5sb2dzID0gYXdhaXQgdGhpcy5nZXRMb2dzKCk7XG4gICAgY29uc3QgZ3JvdXBlZExvZ3MgPSBncm91cExvZ3NCeU1vZGVsKHRoaXMubG9ncyk7XG4gICAgY29uc3QgbG9ncyA9IHRoaXMubG9nc0tleSA/IGdyb3VwZWRMb2dzW3RoaXMubG9nc0tleV0gOiBncm91cGVkTG9ncztcblxuICAgIGNvbnN0IG5vZGVUeXBlID0gdGhpcy5ub2RlWydAdHlwZSddIHx8IHRoaXMubm9kZS50eXBlO1xuICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IHRoaXMuZW5naW5lU2VydmljZS5vY2hlc3RyYXRvckNvbmZpZyhub2RlVHlwZSk7XG5cbiAgICBjb25zdCB7IHJlc3VsdHM6IG1vZGVscyB9ID0gYXdhaXQgdGhpcy5zZWFyY2hTZXJ2aWNlLnNlYXJjaDxJVGVybUpTT05MRCwgTm9kZVR5cGUuVGVybT4oe1xuICAgICAgZmllbGRzOiBbJ0B0eXBlJywgJ0BpZCcsICduYW1lJ10sXG4gICAgICBsaW1pdDogMTAwMCxcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIGJvb2w6IHtcbiAgICAgICAgICBtdXN0OiBbXG4gICAgICAgICAgICBtYXRjaFR5cGUoTm9kZVR5cGUuVGVybSksXG4gICAgICAgICAgICBtYXRjaFRlcm1UeXBlKFRlcm1UZXJtVHlwZS5tb2RlbClcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMubWV0aG9kc0J5SWQgPSBhd2FpdCBmcm9tKG1vZGVscykucGlwZShcbiAgICAgIGZpbHRlcih2ID0+ICEhdiksXG4gICAgICBkaXN0aW5jdCh2ID0+IHZbJ0BpZCddKSxcbiAgICAgIHJlZHVjZSgocHJldiwgY3VycikgPT4gKHsgLi4ucHJldiwgW2N1cnJbJ0BpZCddXTogY3VyciB9KSwge30pXG4gICAgKS50b1Byb21pc2UoKTtcblxuICAgIC8vIGZyb20gYG1vZGVsLWxpbmtzLmpzb25gIGZpbGVcbiAgICBjb25zdCBlbmdpbmVNb2RlbHMgPSBhd2FpdCB0aGlzLmVuZ2luZVNlcnZpY2UubW9kZWxzKCk7XG5cbiAgICB0aGlzLmFsbFRlcm1zID0gYXdhaXQgY29tcHV0ZVRlcm1zKHRoaXMub3JpZ2luYWxWYWx1ZXMsIHRoaXMucmVjYWxjdWxhdGVkVmFsdWVzLCB0aGlzLnRlcm1zLCB0aGlzLmZpbHRlclRlcm1UeXBlcyk7XG5cbiAgICB0aGlzLmFsbEJsYW5rTm9kZXMgPSB0aGlzLmFsbFRlcm1zLmZsYXRNYXAoXG4gICAgICBncm91cExvZ3NCeVRlcm0obm9kZVR5cGUsIGxvZ3MsIGVuZ2luZU1vZGVscywgY29uZmlnLCB0aGlzLm9yaWdpbmFsVmFsdWVzLCB0aGlzLnJlY2FsY3VsYXRlZFZhbHVlcywgdGhpcy5ub2RlS2V5KVxuICAgICk7XG4gICAgdGhpcy5tZXRob2RNb2RlbHNDb3VudCA9IG1vZGVsQ291bnQodGhpcy5hbGxCbGFua05vZGVzKTtcbiAgICB0aGlzLnJvd3NDb3VudCA9IHRoaXMuYWxsQmxhbmtOb2Rlcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyAxICsgY3Vyci5zdWJWYWx1ZXMubGVuZ3RoICsgY3Vyci5rZXlzLmxlbmd0aCwgMCk7XG5cbiAgICB0aGlzLmZpbHRlclJlc3VsdHMoKTtcblxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2dzKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGVTZXJ2aWNlLmdldExvZyh0aGlzLm5vZGUpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWdnZXN0QnlUZXJtKHRlcm06IHN0cmluZykge1xuICAgIHJldHVybiBmcm9tKHRoaXMuYWxsVGVybXMpLnBpcGUoXG4gICAgICBtYXAodiA9PiB2Lm5hbWUpLFxuICAgICAgZmlsdGVyKHYgPT4gdi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0udG9Mb3dlckNhc2UoKSkpLFxuICAgICAgdG9BcnJheSgpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5QmxhbmtOb2RlKF9pbmRleDogbnVtYmVyLCBub2RlOiBJQmxhbmtOb2RlTG9nKSB7XG4gICAgcmV0dXJuIG5vZGUudGVybUlkO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJlZFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyVGVybVR5cGVzPy5tYXAodGVybVR5cGVMYWJlbCkuam9pbignICYgJyk7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyUmVzdWx0cygpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYmxhbmtOb2RlcyA9IHRoaXMuYWxsQmxhbmtOb2Rlcy5maWx0ZXIoKHsgaXNSZXF1aXJlZCwgdGVybTogeyBuYW1lIH0sIHN1YlZhbHVlcyB9KSA9PlxuICAgICAgICB0aGlzLnRlcm1cbiAgICAgICAgICA/IG5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRlcm0udG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICA6ICF0aGlzLm9ubHlSZXF1aXJlZCB8fCAhdGhpcy5maWx0ZXJUZXJtVHlwZXM/Lmxlbmd0aCB8fCBpc1JlcXVpcmVkIHx8IHN1YlZhbHVlcy5zb21lKHYgPT4gdi5pc1JlcXVpcmVkKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRob2ROYW1lKHsgbWV0aG9kSWQsIG1vZGVsIH06IElDb25maWdNb2RlbCkge1xuICAgIHJldHVybiB0aGlzLm1ldGhvZHNCeUlkW21ldGhvZElkXT8ubmFtZSB8fCBtZXRob2RJZExhYmVsKG1ldGhvZElkLCBtb2RlbCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJweC0zIHBiLTNcIj5cbiAgPGRpdiBjbGFzcz1cImhhcy10ZXh0LXJpZ2h0IG1iLTJcIiAqbmdJZj1cIiFpc0V4dGVybmFsXCI+XG4gICAgPGEgY2xhc3M9XCJpcy1zaXplLTdcIiAqbmdJZj1cImxvZ3NVcmxcIiBbaHJlZl09XCJsb2dzVXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICA8ZmEtaWNvbiBpY29uPVwiZXh0ZXJuYWwtbGluay1hbHRcIj48L2ZhLWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInBsLTJcIj5PcGVuIEZ1bGwgTG9nczwvc3Bhbj5cbiAgICA8L2E+XG4gIDwvZGl2PlxuXG4gIDxoZS1kYXRhLXRhYmxlIGNsYXNzPVwibWItMSBpcy1zbWFsbFwiIFtzbWFsbF09XCJ0cnVlXCIgW25iUm93c109XCJyb3dzQ291bnRcIiBtYXhIZWlnaHQ9XCIzMjBcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1uYXJyb3cgaXMtc3RyaXBlZFwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIGNsYXNzPVwid2lkdGgtYXV0b1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sIGlzLWV4cGFuZGVkIGhhcy1pY29ucy1yaWdodFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImlucHV0IHNlYXJjaC1pbnB1dCBpcy1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlcm1cIiBuYW1lPVwidGVybVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieSBuYW1lXCJcbiAgICAgICAgICAgICAgICAgIFtuZ2JUeXBlYWhlYWRdPVwic3VnZ2VzdFRlcm1cIlxuICAgICAgICAgICAgICAgICAgW2ZvY3VzRmlyc3RdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJmaWx0ZXJSZXN1bHRzKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImljb24gaXMtc21hbGwgaXMtcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWhpZGRlbl09XCIhdGVybVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwidGVybSA9ICcnOyBmaWx0ZXJSZXN1bHRzKCk7XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZmEtaWNvbiBpY29uPVwidGltZXNcIj48L2ZhLWljb24+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPlVuaXRzPC90aD5cbiAgICAgICAgICA8dGg+T3JpZ2luYWw8L3RoPlxuICAgICAgICAgIDx0aD5SZWNhbGN1bGF0ZWQ8L3RoPlxuICAgICAgICAgIDx0aD5EaWZmZXJlbmNlPC90aD5cbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGMgb2YgbWV0aG9kTW9kZWxzQ291bnQgfCB0aW1lczsgbGV0IGkgPSBpbmRleFwiPih7e2kgKyAxfX0pPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0ciAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtdGV4dC1jZW50ZXJlZFwiIGNvbHNwYW49XCI2XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGFzLXRleHQtY2VudGVyIHB5LTNcIj5cbiAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cInNwaW5uZXJcIiBbcHVsc2VdPVwidHJ1ZVwiIHNpemU9XCJsZ1wiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciAqbmdJZj1cIiFsb2FkaW5nICYmIGJsYW5rTm9kZXMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLXRleHQtY2VudGVyZWRcIiBjb2xzcGFuPVwiNlwiPlxuICAgICAgICAgICAgPHNwYW4+Tm8gZGF0YTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBibGFua05vZGUgb2YgYmxhbmtOb2RlczsgdHJhY2tCeTogdHJhY2tCeUJsYW5rTm9kZVwiPlxuICAgICAgICAgIDx0ciBbY2xhc3MuaGFzLXN1Yi1yb3dzXT1cImJsYW5rTm9kZS5jYW5PcGVuXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvXCIgW2F0dHIudGl0bGVdPVwiYmxhbmtOb2RlLnRlcm0ubmFtZVwiPlxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi10b3AgcHItMiBvcGVuLW5vZGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJibGFua05vZGUuaXNPcGVuID0gIWJsYW5rTm9kZS5pc09wZW5cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxhbmtOb2RlLmNhbk9wZW5cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLWRvd25cIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgICAgIDxmYS1pY29uIGljb249XCJhbmdsZS1yaWdodFwiIFtjbGFzcy5pcy1oaWRkZW5dPVwiYmxhbmtOb2RlLmlzT3BlblwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgW25vZGVdPVwiYmxhbmtOb2RlLnRlcm1cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPnt7YmxhbmtOb2RlLnRlcm0ubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7YmxhbmtOb2RlLnRlcm0/LnVuaXRzfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRPcmlnaW5hbFZhbHVlPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7YmxhbmtOb2RlLm9yaWdpbmFsVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibGFua05vZGUuYWxsUGFyYWxsZWw7IGVsc2UgZGVmYXVsdE9yaWdpbmFsVmFsdWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBibGFua05vZGUuY29uZmlnTW9kZWxzWzBdXCI+e3tibGFua05vZGUub3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWRbbW9kZWwubWV0aG9kSWRdIHwgcHJlY2lzaW9uOjMgfCBkZWZhdWx0OictJ319PC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFibGFua05vZGUuaXNPcmlnaW5hbCB8fCBibGFua05vZGUuaXNSZWNhbGN1bGF0ZWQ7IGVsc2Ugbm90UmVjYWxjdWxhdGVkXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UmVjYWxjdWxhdGVkVmFsdWU+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57e2JsYW5rTm9kZS5yZWNhbGN1bGF0ZWRWYWx1ZSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibGFua05vZGUuYWxsUGFyYWxsZWw7IGVsc2UgZGVmYXVsdFJlY2FsY3VsYXRlZFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBibGFua05vZGUuY29uZmlnTW9kZWxzWzBdXCI+e3tibGFua05vZGUucmVjYWxjdWxhdGVkVmFsdWVCeU1ldGhvZElkW21vZGVsLm1ldGhvZElkXSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJpcy1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RGVsdGFWYWx1ZT5cbiAgICAgICAgICAgICAgICA8aGUtYmxhbmstbm9kZS12YWx1ZS1kZWx0YSAqbmdJZj1cImJsYW5rTm9kZS5vcmlnaW5hbC5sZW5ndGggJiYgYmxhbmtOb2RlLmlzUmVjYWxjdWxhdGVkOyBlbHNlIG5vVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJsYW5rTm9kZS5yZWNhbGN1bGF0ZWRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbb3JpZ2luYWxWYWx1ZV09XCJibGFua05vZGUub3JpZ2luYWxWYWx1ZVwiXG4gICAgICAgICAgICAgICAgPjwvaGUtYmxhbmstbm9kZS12YWx1ZS1kZWx0YT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsYW5rTm9kZS5hbGxQYXJhbGxlbDsgZWxzZSBkZWZhdWx0RGVsdGFWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG1vZGVsIG9mIGJsYW5rTm9kZS5jb25maWdNb2RlbHNbMF1cIj5cbiAgICAgICAgICAgICAgICAgIDxoZS1ibGFuay1ub2RlLXZhbHVlLWRlbHRhICpuZ0lmPVwiYmxhbmtOb2RlLm9yaWdpbmFsVmFsdWVCeU1ldGhvZElkW21vZGVsLm1ldGhvZElkXSAhPT0gbnVsbCAmJiBibGFua05vZGUucmVjYWxjdWxhdGVkVmFsdWVCeU1ldGhvZElkW21vZGVsLm1ldGhvZElkXSAhPT0gbnVsbDsgZWxzZSBub1ZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImJsYW5rTm9kZS5yZWNhbGN1bGF0ZWRWYWx1ZUJ5TWV0aG9kSWRbbW9kZWwubWV0aG9kSWRdXCJcbiAgICAgICAgICAgICAgICAgICAgW29yaWdpbmFsVmFsdWVdPVwiYmxhbmtOb2RlLm9yaWdpbmFsVmFsdWVCeU1ldGhvZElkW21vZGVsLm1ldGhvZElkXVwiXG4gICAgICAgICAgICAgICAgICA+PC9oZS1ibGFuay1ub2RlLXZhbHVlLWRlbHRhPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxhbmtOb2RlTW9kZWxzOyBjb250ZXh0OiB7ZGF0YTogYmxhbmtOb2RlfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWJWYWx1ZSBvZiBibGFua05vZGUua2V5c1wiXG4gICAgICAgICAgICBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCJcbiAgICAgICAgICAgIFtjbGFzcy5oYXMtc3ViLXJvd3NdPVwiYmxhbmtOb2RlLnN1YlZhbHVlcz8ubGVuZ3RoXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy10ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtYWxpZ24tdG9wIHBsLTMgcHItMSBmaWVsZC1ub2RlXCI+RmllbGQ6PC9zcGFuPlxuXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrXCIgKm5nSWY9XCJibGFua05vZGUudHlwZVwiXG4gICAgICAgICAgICAgICAgW2hyZWZdPVwiYmFzZVVybCArICcvc2NoZW1hLycgKyBibGFua05vZGUudHlwZSArICcjJyArIHN1YlZhbHVlLmtleVwiIHRhcmdldD1cIl9ibGFua1wiIFt0aXRsZV09XCJzdWJWYWx1ZS5rZXlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1ub3dyYXAgaGFzLXRleHQtZWxsaXBzaXNcIj57e3N1YlZhbHVlLmtleX19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLXRvcFwiICpuZ0lmPVwiIWJsYW5rTm9kZS50eXBlXCI+e3tzdWJWYWx1ZS5rZXl9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJoYXMtYm9yZGVyLXJpZ2h0XCI+PC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdWJWYWx1ZS5vcmlnaW5hbFZhbHVlICE9PSBudWxsOyBlbHNlIG5vVmFsdWVcIj57e3N1YlZhbHVlLm9yaWdpbmFsVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN1YlZhbHVlLmlzUmVjYWxjdWxhdGVkIHx8IHN1YlZhbHVlLmtleSA9PT0gJ2ltcGFjdEFzc2Vzc21lbnQnOyBlbHNlIG5vdFJlY2FsY3VsYXRlZFwiPlxuICAgICAgICAgICAgICAgIHt7c3ViVmFsdWUucmVjYWxjdWxhdGVkVmFsdWUgfCBwcmVjaXNpb246MyB8IGRlZmF1bHQ6Jy0nfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD4tPC90ZD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJibGFua05vZGVNb2RlbHM7IGNvbnRleHQ6IHtkYXRhOiBzdWJWYWx1ZX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuXG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3ViVmFsdWUgb2YgYmxhbmtOb2RlLnN1YlZhbHVlc1wiXG4gICAgICAgICAgICBbY2xhc3MuaXMtaGlkZGVuXT1cIiFibGFua05vZGUuaXNPcGVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJ3aWR0aC1hdXRvIGhhcy10ZXh0LWxlZnRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2sgaXMtYWxpZ24tdG9wIHBsLTNcIj57e3N1YlZhbHVlLmtleSB8IGtleVRvTGFiZWx9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3ViVmFsdWUuaWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1ibG9ja1wiIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLXRvcCBwci0xXCI+Ojwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN1YlZhbHVlLmtleVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpcy1pbmxpbmUtYmxvY2tcIiAqbmdTd2l0Y2hDYXNlPVwiJ2JhY2tncm91bmREYXRhJ1wiPnt7c3ViVmFsdWUuaWQgfCBrZXlUb0xhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8aGUtbm9kZS1saW5rICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJpcy1ibG9jayBwbC00XCIgW25vZGVdPVwieydAdHlwZSc6J1Rlcm0nLCdAaWQnOnN1YlZhbHVlLmlkfVwiIFthdHRyLnRpdGxlXT1cInN1YlZhbHVlLmlkIHwga2V5VG9MYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLW5vd3JhcCBoYXMtdGV4dC1lbGxpcHNpc1wiPnt7c3ViVmFsdWUuaWQgfCBrZXlUb0xhYmVsfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2hlLW5vZGUtbGluaz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiaGFzLWJvcmRlci1yaWdodFwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN1YlZhbHVlLmtleSA9PT0gJ2lucHV0J1wiPnt7YmxhbmtOb2RlLnRlcm0/LnVuaXRzfX08L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN1YlZhbHVlLm9yaWdpbmFsVmFsdWUgIT09IG51bGw7IGVsc2Ugbm9WYWx1ZVwiPnt7c3ViVmFsdWUub3JpZ2luYWxWYWx1ZSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic3ViVmFsdWUuaXNSZWNhbGN1bGF0ZWQ7IGVsc2Ugbm90UmVjYWxjdWxhdGVkXCI+XG4gICAgICAgICAgICAgICAge3tzdWJWYWx1ZS5yZWNhbGN1bGF0ZWRWYWx1ZSB8IHByZWNpc2lvbjozIHwgZGVmYXVsdDonLSd9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkPi08L3RkPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsczsgY29udGV4dDoge2RhdGE6IHN1YlZhbHVlfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L2hlLWRhdGEtdGFibGU+XG5cbiAgPGRpdiBjbGFzcz1cImlzLXNpemUtNyBpcy1pdGFsaWNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1ucyBpcy12YXJpYWJsZSBpcy0xIG15LTBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gaXMtbmFycm93XCI+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxhIGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIHByLTJcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNob3dMZWdlbmQgPSAhc2hvd0xlZ2VuZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLWRvd25cIiBbY2xhc3MuaXMtaGlkZGVuXT1cIiFzaG93TGVnZW5kXCI+PC9mYS1pY29uPlxuICAgICAgICAgICAgPGZhLWljb24gaWNvbj1cImFuZ2xlLXJpZ2h0XCIgW2NsYXNzLmlzLWhpZGRlbl09XCJzaG93TGVnZW5kXCI+PC9mYS1pY29uPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1ibG9ja1wiPkxlZ2VuZDo8L3NwYW4+XG4gICAgICAgIDwvcD5cbiAgICAgICAgPHVsIGNsYXNzPVwiY29udGVudCBwbC0yXCIgW2NsYXNzLmlzLWhpZGRlbl09XCIhc2hvd0xlZ2VuZFwiPlxuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgY2xhc3M9XCJoYXMtdGV4dC17e2xvZ0NvbG9yW3N0YXR1cy52YWx1ZV19fVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIExvZ1N0YXR1cyB8IGtleXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImxvZ0ljb25bc3RhdHVzLnZhbHVlXVwiPjwvZmEtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGwtMVwiPnt7c3RhdHVzLnZhbHVlfX08L3NwYW4+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBoYXMtdGV4dC1yaWdodFwiICpuZ0lmPVwiZmlsdGVyZWRUeXBlXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImlzLWlubGluZS1ibG9jayBjaGVja2JveFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cInNlbGVjdG9yXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwib25seVJlcXVpcmVkXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsdGVyUmVzdWx0cygpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhIXRlcm1cIlxuICAgICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTJcIj5TaG93IG9ubHkgcmVsZXZhbnQge3tmaWx0ZXJlZFR5cGUgfCBwbHVyYWxpemV9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2JsYW5rTm9kZU1vZGVscyBsZXQtZGF0YT1cImRhdGFcIj5cbiAgPHRkIGNsYXNzPVwiYmxhbmstbm9kZS1pbmRleC17e2l9fVwiICpuZ0Zvcj1cImxldCBjIG9mIG1ldGhvZE1vZGVsc0NvdW50IHwgdGltZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0TW9kZWxzQXQoZGF0YSwgaSk7IGxldCBtb2RlbHM7IGVsc2Ugbm9WYWx1ZVwiPlxuICAgICAgPG5nLXRlbXBsYXRlICNtb2RlbFNlcmllPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmxhbmtOb2RlTW9kZWw7IGNvbnRleHQ6IHttb2RlbDptb2RlbHN9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiAqbmdJZj1cIm1vZGVscyB8IGlzQXJyYXk7IGVsc2UgbW9kZWxTZXJpZVwiPlxuICAgICAgICA8cCAqbmdGb3I9XCJsZXQgbW9kZWwgb2YgbW9kZWxzXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJsYW5rTm9kZU1vZGVsOyBjb250ZXh0OiB7bW9kZWx9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3RkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNibGFua05vZGVNb2RlbCBsZXQtbW9kZWw9XCJtb2RlbFwiPlxuICA8c3BhblxuICAgIFtjbGFzcy50cmlnZ2VyLXBvcG92ZXJdPVwibW9kZWwuc2hvd0xvZ3NcIlxuICAgIFtuZ2JQb3BvdmVyXT1cImxvZ0RldGFpbHNcIiBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgdHJpZ2dlcnM9XCJtYW51YWxcIiAjcD1cIm5nYlBvcG92ZXJcIiBwbGFjZW1lbnQ9XCJsZWZ0XCIgY29udGFpbmVyPVwiYm9keVwiXG4gICAgKGNsaWNrKT1cInAuaXNPcGVuKCkgPyBwLmNsb3NlKCkgOiAobW9kZWwuc2hvd0xvZ3MgPyBwLm9wZW4oeyBsb2dzOiBtb2RlbC5sb2dzIH0pIDogbnVsbClcIlxuICA+XG4gICAgPHNwYW4gY2xhc3M9XCJpcy1jYXBpdGFsaXplZFwiPnt7bWV0aG9kTmFtZShtb2RlbCl9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInBsLTFcIiAqbmdJZj1cIm1vZGVsLmxvZ3M/Lm1ldGhvZFRpZXJcIj5be3ttb2RlbC5sb2dzLm1ldGhvZFRpZXJ9fV08L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJwbC0xIGhhcy10ZXh0LXt7bG9nQ29sb3JbbW9kZWwuc3RhdHVzXX19XCI+XG4gICAgICA8ZmEtaWNvbiBbaWNvbl09XCJsb2dJY29uW21vZGVsLnN0YXR1c11cIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwicGwtMVwiICpuZ0lmPVwibW9kZWwubW9kZWxcIj5cbiAgICAgICg8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZG9jc0xpbms7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG1vZGVsLm1vZGVsfVwiPjwvbmctY29udGFpbmVyPilcbiAgICA8L3NwYW4+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbm9WYWx1ZT4tPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub3RSZWNhbGN1bGF0ZWQ+bm90IHJlY2FsY3VsYXRlZDwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9nRGV0YWlscyBsZXQtbG9ncz1cImxvZ3NcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvZ3M/LnJlcXVpcmVtZW50c1wiPlxuICAgIDxkaXYgY2xhc3M9XCJpcy1yZXF1aXJlbWVudFwiICpuZ0Zvcj1cImxldCBrZXkgb2YgcmVxdWlyZW1lbnRLZXlzKGxvZ3MucmVxdWlyZW1lbnRzKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvZ0xpbmU7IGNvbnRleHQ6e2tleSwgdmFsdWU6bG9ncy5yZXF1aXJlbWVudHNba2V5XX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJsb2dzPy5sb2dzXCI+XG4gICAgPGRpdiBjbGFzcz1cImlzLWxvZ1wiICpuZ0Zvcj1cImxldCBrZXkgb2YgbG9ncy5sb2dzIHwga2V5c1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvZ0xpbmU7IGNvbnRleHQ6a2V5XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9ncz8ubWlzc2luZ0xvb2t1cHM/Lmxlbmd0aFwiPlxuICAgIDxwIGNsYXNzPVwibXQtMlwiPk9wdGlvbmFsIGRhdGEgbWlzc2luZzo8L3A+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyIGRhdGEtdGFibGUtY29udGFpbmVyXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1mdWxsd2lkdGggbWItMFwiPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJoYXMtYmFja2dyb3VuZC1ibGFja1wiPlxuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPkZpbGVuYW1lPC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiPkNvbHVtbiBUaXRsZTwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGg+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGFzLXRleHQtd2hpdGVcIj5Sb3cgKHRlcm0uaWQpPC9zcGFuPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJoYXMtYmFja2dyb3VuZC1ibGFjayBoYXMtdGV4dC13aGl0ZVwiPlxuICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBsb2dzLm1pc3NpbmdMb29rdXBzXCI+XG4gICAgICAgICAgICA8dGQ+e3tkYXRhLmZpbGVuYW1lfX08L3RkPlxuICAgICAgICAgICAgPHRkPnt7ZGF0YS5jb2x1bW59fTwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3tkYXRhLnRlcm1JZH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2xvZ0xpbmUgbGV0LWtleT1cImtleVwiIGxldC12YWx1ZT1cInZhbHVlXCI+XG4gIDxuZy1jb250YWluZXIgKmJpbmRPbmNlPVwidmFsdWVcIj5cbiAgICA8c3BhbiBjbGFzcz1cInByLTEgaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLW1pZGRsZVwiPnt7a2V5fX06PC9zcGFuPlxuICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlVmFsdWU+XG4gICAgICA8c3BhbiBjbGFzcz1cImlzLWlubGluZS1ibG9jayBpcy1hbGlnbi1taWRkbGVcIj57e3ZhbHVlfX08L3NwYW4+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiaXMtaW5saW5lLWJsb2NrIGlzLWFsaWduLW1pZGRsZVwiICpuZ0lmPVwibG9nVmFsdWVBcnJheSh2YWx1ZSk7IGxldCB2YWx1ZUFycmF5OyBlbHNlIHNpbmdsZVZhbHVlXCI+XG4gICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBpcy1ib3JkZXJlZCBoYXMtYmFja2dyb3VuZC1ibGFjayBoYXMtdGV4dC13aGl0ZVwiPlxuICAgICAgICA8dGhlYWQgKm5nSWY9XCJ2YWx1ZUFycmF5WzBdIHwgaXNPYmplY3RcIj5cbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGggY2xhc3M9XCJoYXMtdGV4dC13aGl0ZVwiICpuZ0Zvcj1cImxldCB2IG9mIHZhbHVlQXJyYXlbMF0gfCBrZXlzXCI+e3t2LmtleX19PC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB2IG9mIHZhbHVlQXJyYXlcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlQXJyYXlWYWx1ZT5cbiAgICAgICAgICAgICAgPHRkPnt7dn19PC90ZD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidiB8IGlzT2JqZWN0OyBlbHNlIHNpbmdsZUFycmF5VmFsdWVcIj5cbiAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCB2diBvZiB2IHwga2V5c1wiPnt7dnYudmFsdWV9fTwvdGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RvY3NMaW5rIGxldC1tb2RlbD5cbiAgPGEgW2hyZWZdPVwibW9kZWwuYXBpRG9jc1BhdGggfHwgbW9kZWwuZG9jUGF0aCB8fCBtb2RlbC5wYXRoXCIgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgPlxuICAgIDxzcGFuPkRvY3M8L3NwYW4+XG4gICAgPGZhLWljb24gY2xhc3M9XCJtbC0xXCIgaWNvbj1cImV4dGVybmFsLWxpbmstYWx0XCIgc2l6ZT1cInNtXCI+PC9mYS1pY29uPlxuICA8L2E+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -138,28 +138,34 @@ const hasLogDetails = (status, logs) => [
138
138
  LogStatus.success,
139
139
  LogStatus.error
140
140
  ].includes(status) && hasLogs(logs);
141
- const logStatus = (data, logs, index) => hasLog(logs)
142
- ? (!data.isRequired
143
- ? LogStatus.notRequired
144
- : isRunOrchestrator(logs)
145
- ? ('shouldRun' in logs
146
- ? logs.shouldRun
147
- ? data.isRecalculated
148
- ? LogStatus.success
149
- : LogStatus.dataProvided
150
- : data.isRecalculated && index > 0
151
- ? LogStatus.skipHierarchy
152
- : LogStatus.error
153
- : LogStatus.dataProvided)
154
- : data.isRecalculated
155
- ? LogStatus.skipHierarchy
156
- : LogStatus.dataProvided)
157
- : ([
141
+ const logStatus = (data, logs, index) => {
142
+ const withLogs = hasLog(logs);
143
+ const isCalculated = [
158
144
  typeof data.originalValue === 'undefined',
159
145
  data.isRecalculated // is recalculated
160
- ].every(Boolean)
161
- ? LogStatus.skipHierarchy
162
- : LogStatus.dataProvided);
146
+ ].every(Boolean);
147
+ // can be not required for a specific model
148
+ const isRequired = !!logs && 'runRequired' in logs ? logs.runRequired : data.isRequired;
149
+ return withLogs
150
+ ? (!isRequired
151
+ ? LogStatus.notRequired
152
+ : isRunOrchestrator(logs)
153
+ ? ('shouldRun' in logs
154
+ ? logs.shouldRun
155
+ ? data.isRecalculated
156
+ ? LogStatus.success
157
+ : LogStatus.dataProvided
158
+ : data.isRecalculated && index > 0
159
+ ? LogStatus.skipHierarchy
160
+ : LogStatus.error
161
+ : LogStatus.dataProvided)
162
+ : data.isRecalculated
163
+ ? LogStatus.skipHierarchy
164
+ : LogStatus.dataProvided)
165
+ : (isCalculated
166
+ ? LogStatus.skipHierarchy
167
+ : LogStatus.dataProvided);
168
+ };
163
169
  const mergeSubValues = (values) => Object.values(values.reduce((prev, { id, key, configModels }) => {
164
170
  const uniqueKey = [key, id].filter(Boolean).join('.');
165
171
  prev[uniqueKey] = {
@@ -225,7 +231,7 @@ const logProperties = (nodes, models) => nodes.flatMap(node => (node.properties
225
231
  const logEmissionTransformations = (emissions) => emissions.filter(({ transformation }) => !!(transformation === null || transformation === void 0 ? void 0 : transformation['@id'])).map(({ transformation }) => ({
226
232
  id: transformation === null || transformation === void 0 ? void 0 : transformation['@id'],
227
233
  key: 'transformation',
228
- configModels: ['cycle']
234
+ configModels: ['cycle/transformation']
229
235
  }));
230
236
  const includeCycleSubValue = (subValues) => subValues.some(v => v.key !== 'property');
231
237
  const cycleSubValue = ({ termId, configModels, isRequired, subValues, original, recalculated }) => {
@@ -332,7 +338,9 @@ const configModelWithDocs = (models, { nodeType, type, termId, termType }, subVa
332
338
  // handle "input.hestiaAggregatedData"
333
339
  findMatchingModel(models, modelKeyParams(node, `${type === null || type === void 0 ? void 0 : type.toLowerCase()}.${methodId}`)) ||
334
340
  // handle "transformation"
335
- findMatchingModel(models, modelKeyParams(node, subValue === null || subValue === void 0 ? void 0 : subValue.key))
341
+ ((subValue === null || subValue === void 0 ? void 0 : subValue.key) ? findMatchingModel(models, modelKeyParams(node, subValue === null || subValue === void 0 ? void 0 : subValue.key)) : undefined) ||
342
+ // handle "transformation/excreta" and other models with "/"
343
+ (methodId.includes('/') ? findMatchingModel(models, { model: methodId.split('/')[0], modelKey: methodId.split('/')[1] }) : undefined)
336
344
  };
337
345
  };
338
346
  const configModelWithLogs = (data, logs) => (model, index = 0) => {
@@ -435,10 +443,10 @@ export const modelCount = (blankNodeLogs) => Math.max.apply(Math.max, [
435
443
  ...(v.keys.map(s => { var _a; return ((_a = s.configModels) === null || _a === void 0 ? void 0 : _a.length) || 0; }))
436
444
  ])
437
445
  ]);
438
- export const logValueArray = (value) => value.includes(';') ?
446
+ export const logValueArray = (value) => [';', ':'].some(v => value.includes(v)) ?
439
447
  value.split(';').flatMap(v => {
440
448
  const res = v.split('_').map(vv => vv.split(':'));
441
449
  return res.length <= 1 ? res.flat() : Object.fromEntries(res);
442
450
  }) :
443
451
  null;
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFDSyxrQkFBa0IsRUFDbEIsWUFBWSxFQUFZLFVBQVUsRUFBRSxVQUFVLEVBQ3pELE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFMUMsT0FBTyxFQUM0RCxVQUFVLEVBQzNFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQy9DLE1BQU0sNkJBQTZCLENBQUM7QUFvQ3JDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFOUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFD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SUFDSixJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdCwgdG9BcnJheSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmlsZVRvRXh0LCBTdXBwb3J0ZWRFeHRlbnNpb25zIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9hcGknO1xuaW1wb3J0IHtcbiAgRW1pc3Npb24sIEVtaXNzaW9uTWV0aG9kVGllciwgSVRlcm1KU09OTEQsIFByb2R1Y3QsIElucHV0IGFzIEhlc3RpYUlucHV0LFxuICBOb2RlVHlwZSwgVGVybVRlcm1UeXBlLCBQcm9wZXJ0eSwgU2NoZW1hVHlwZSwgaXNUeXBlTm9kZSwgSW5kaWNhdG9yXG59IGZyb20gJ0BoZXN0aWEtZWFydGgvc2NoZW1hJztcbmltcG9ydCB7IHVuaXF1ZSwgaXNVbmRlZmluZWQsIGlzRW1wdHkgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7IHByb3BlcnR5VmFsdWUgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzL2Rpc3QvdGVybSc7XG5jb25zdCBnZXQgPSByZXF1aXJlKCdsb2Rhc2guZ2V0Jyk7XG5jb25zdCBzZXQgPSByZXF1aXJlKCdsb2Rhc2guc2V0Jyk7XG5jb25zdCBvcmRlckJ5ID0gcmVxdWlyZSgnbG9kYXNoLm9yZGVyYnknKTtcblxuaW1wb3J0IHtcbiAgSU9yY2hlc3RyYXRvckNvbmZpZywgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnLCBmaW5kQ29uZmlnTW9kZWxzLCBmaW5kTW9kZWxzLCBJTW9kZWwsXG4gIGZpbmRNYXRjaGluZ01vZGVsLCBtb2RlbFBhcmFtcywgbW9kZWxLZXlQYXJhbXNcbn0gZnJvbSAnLi4vLi4vZW5naW5lL2VuZ2luZS5zZXJ2aWNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZU1pc3NpbmdMb29rdXBMb2cge1xuICBmaWxlbmFtZTogc3RyaW5nO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgY29sdW1uOiBzdHJpbmc7XG4gIC8vIGF0dHJpYnV0ZXMgbGlua2VkIHRvIHRoZSBtb2RlbHNcbiAgbW9kZWw/OiBzdHJpbmc7XG4gIHRlcm0/OiBzdHJpbmc7XG4gIGtleT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZVRlcm1Mb2cge1xuICBydW5SZXF1aXJlZD86IGJvb2xlYW47XG4gIHNob3VsZFJ1bj86IGJvb2xlYW47XG4gIHNob3VsZFJ1bk9yY2hlc3RyYXRvcj86IGJvb2xlYW47XG4gIG1pc3NpbmdMb29rdXBzPzogSU5vZGVNaXNzaW5nTG9va3VwTG9nW107XG4gIHJlcXVpcmVtZW50cz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIGxvZ3M/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIC8vIHBvc3NpYmxlIHN1YiB2YWx1ZXNcbiAgaW5wdXQ/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcHJvcGVydHk/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZVRlcm1Mb2dzIHtcbiAgW21vZGVsS2V5OiBzdHJpbmddOiBhbnkgfCBJTm9kZVRlcm1Mb2c7XG4gIG1vZGVsczogc3RyaW5nW107XG4gIGlzS2V5PzogYm9vbGVhbjtcbiAgaXNQcm9wZXJ0eT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVMb2dzIHtcbiAgW3Rlcm06IHN0cmluZ106IElOb2RlVGVybUxvZ3M7XG59XG5cbmNvbnN0IHRlcm1UeXBlcyA9IE9iamVjdC52YWx1ZXMoVGVybVRlcm1UeXBlKTtcblxuY29uc3QgYmxhbmtOb2RlVHlwZXMgPSBPYmplY3QudmFsdWVzKFNjaGVtYVR5cGUpLmZpbHRlcih0ID0+ICFpc1R5cGVOb2RlKHQpKTtcblxuY29uc3Qgc2NoZW1hVHlwZXNMb3dlckNhc2UgPSBPYmplY3QudmFsdWVzKFNjaGVtYVR5cGUpLm1hcCh2ID0+IHYudG9Mb3dlckNhc2UoKSk7XG5cbmNvbnN0IGJsYW5rTm9kZVR5cGVzTG93ZXJDYXNlID0gYmxhbmtOb2RlVHlwZXMubWFwKHYgPT4gdi50b0xvd2VyQ2FzZSgpKTtcblxuY29uc3QgbWlzc2luZ0xvb2t1cFByZWZpeCA9ICdNaXNzaW5nIGxvb2t1cCc7XG5cbmNvbnN0IHBhcnNlRmlsZW5hbWUgPSAoZmlsZXBhdGg6IHN0cmluZykgPT4ge1xuICBjb25zdCBbZmlsZW5hbWVdID0gZmlsZXBhdGguc3BsaXQoJy4nKTtcbiAgY29uc3QgZXh0ID0gdGVybVR5cGVzLmluY2x1ZGVzKGZpbGVuYW1lIGFzIGFueSkgPyBTdXBwb3J0ZWRFeHRlbnNpb25zLnhsc3ggOiBTdXBwb3J0ZWRFeHRlbnNpb25zLmNzdjtcbiAgcmV0dXJuIGZpbGVUb0V4dChmaWxlbmFtZSwgZXh0KTtcbn07XG5cbmNvbnN0IHBhcnNlTG9va3VwID0gKHsgY29sdW1uLCB0ZXJtaWQsIFttaXNzaW5nTG9va3VwUHJlZml4XTogbWlzc2luZ0xvb2t1cCB9KSA9PiAoe1xuICBmaWxlbmFtZTogcGFyc2VGaWxlbmFtZShtaXNzaW5nTG9va3VwKSwgdGVybUlkOiB0ZXJtaWQsIGNvbHVtblxufSk7XG5cbmNvbnN0IGNzdlZhbHVlID0gKHZhbHVlOiBzdHJpbmcpID0+ICh2YWx1ZSB8fCAnJykucmVwbGFjZSgnWycsICcnKS5yZXBsYWNlKCddJywgJycpO1xuXG5jb25zdCBwYXJzZU1lc3NhZ2UgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UobWVzc2FnZSk7XG4gICAgcmV0dXJuIGRhdGEubWVzc2FnZS5zcGxpdCgnLCcpLnJlZHVjZSgocHJldiwgcGFydHMpID0+IHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IHBhcnRzLnNwbGl0KCc9Jyk7XG4gICAgICBjb25zdCB2YWwgPSBjc3ZWYWx1ZSh2YWx1ZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICAuLi4oa2V5ICYmIHZhbCA/IHsgW2tleS50cmltKCldOiB2YWwgfSA6IHt9KVxuICAgICAgfTtcbiAgICB9LCB7IGxvZ2dlcjogZGF0YS5sb2dnZXIgfSk7XG4gIH1cbiAgY2F0Y2ggKGVycikge1xuICAgIC8vIG1ha2Ugc3VyZSBpdCB3b3JrcyBldmVuIGlmIG9uZSBsb2cgaXMgbWFsZm9ybWVkXG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5jb25zdCBvbWl0TG9nS2V5cyA9IChsb2c6IGFueSkgPT5cbiAgT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGxvZykuZmlsdGVyKChba2V5XSkgPT4gIXNjaGVtYVR5cGVzTG93ZXJDYXNlLmluY2x1ZGVzKGtleSkpKTtcblxuY29uc3QgaW5jbHVkZUJsYW5rTm9kZXMgPSAobG9ncywgbG9nKSA9PlxuICBPYmplY3RcbiAgICAua2V5cyhsb2cpXG4gICAgLmZpbHRlcihrZXkgPT4gYmxhbmtOb2RlVHlwZXNMb3dlckNhc2UuaW5jbHVkZXMoa2V5KSlcbiAgICAucmVkdWNlKChwcmV2LCBrZXkpID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgW2tleV06IHVuaXF1ZShbXG4gICAgICAgIC4uLigodHlwZW9mIHByZXZba2V5XSA9PT0gJ3N0cmluZycgPyBbcHJldltrZXldXSA6IHByZXZba2V5XSkgfHwgW10pLFxuICAgICAgICBsb2dba2V5XVxuICAgICAgXSlcbiAgICB9KSwgbG9ncyk7XG5cbmNvbnN0IGdyb3VwTG9nID0gKGdyb3VwLCB7IGxvZ2dlciwgdGVybSwgbW9kZWwsIGtleSwgc2hvdWxkX3J1biwgcnVuX3JlcXVpcmVkLCBwcm9wZXJ0eSwgLi4ubG9nIH06IGFueSkgPT4ge1xuICBjb25zdCBpc09yY2hlc3RyYXRvciA9IGxvZ2dlci5pbmNsdWRlcygnb3JjaGVzdHJhdG9yJyk7XG4gIGNvbnN0IGlzS2V5ID0gIWlzT3JjaGVzdHJhdG9yICYmICEha2V5O1xuICBjb25zdCBpc1Byb3BlcnR5ID0gIWlzT3JjaGVzdHJhdG9yICYmICEhcHJvcGVydHk7XG4gIGNvbnN0IHBhcmVudExvZ0tleSA9IFtgW1wiJHt0ZXJtfVwiXWAsICFpc09yY2hlc3RyYXRvciAmJiBrZXkgfHwgcHJvcGVydHldLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG4gIGNvbnN0IGxvZ01vZGVsS2V5ID0gW3BhcmVudExvZ0tleSwgbW9kZWxdLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG5cbiAgc2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9Lm1vZGVsc2AsIHVuaXF1ZShbXG4gICAgLi4uZ2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9Lm1vZGVsc2AsIFtdKSxcbiAgICBtb2RlbFxuICBdKSk7XG4gIHNldChncm91cCwgYCR7cGFyZW50TG9nS2V5fS5pc0tleWAsIGlzS2V5KTtcbiAgc2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9LmlzUHJvcGVydHlgLCBpc1Byb3BlcnR5KTtcblxuICBsZXQgZGF0YSA9IGdldChncm91cCwgbG9nTW9kZWxLZXksIHt9KTtcblxuICBkYXRhID0gaW5jbHVkZUJsYW5rTm9kZXMoZGF0YSwgbG9nKTtcblxuICBpZiAodHlwZW9mIHNob3VsZF9ydW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY29uc3Qgc2hvdWxkUnVuID0gc2hvdWxkX3J1biA9PT0gJ1RydWUnO1xuXG4gICAgZGF0YSA9IGlzT3JjaGVzdHJhdG9yID9cbiAgICAgIHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgc2hvdWxkUnVuT3JjaGVzdHJhdG9yOiBzaG91bGRSdW5cbiAgICAgIH0gOlxuICAgICAge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICAuLi5vbWl0TG9nS2V5cyhsb2cpLFxuICAgICAgICBzaG91bGRSdW5cbiAgICAgIH07XG4gIH1cbiAgZWxzZSBpZiAodHlwZW9mIHJ1bl9yZXF1aXJlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCBydW5SZXF1aXJlZCA9IHJ1bl9yZXF1aXJlZCA9PT0gJ1RydWUnO1xuXG4gICAgZGF0YSA9ICB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgLi4uKHJ1blJlcXVpcmVkID8ge30gOiBvbWl0TG9nS2V5cyhsb2cpKSwgLy8gbm8gbmVlZCB0byBzYXZlIGxvZ3MgaWYgd2UgbmVlZCB0byBydW4gdGhlIG1vZGVsXG4gICAgICBydW5SZXF1aXJlZFxuICAgIH07XG4gIH1cbiAgZWxzZSBpZiAoJ3JlcXVpcmVtZW50cycgaW4gbG9nKSB7XG4gICAgY29uc3QgeyByZXF1aXJlbWVudHMsIC4uLmxvZ0RhdGEgfSA9IGxvZztcblxuICAgIGRhdGEucmVxdWlyZW1lbnRzID0ge1xuICAgICAgLi4uKGRhdGEucmVxdWlyZW1lbnRzIHx8IHt9KSxcbiAgICAgIC4uLmxvZ0RhdGFcbiAgICB9O1xuICB9XG4gIGVsc2UgaWYgKG1pc3NpbmdMb29rdXBQcmVmaXggaW4gbG9nKSB7XG4gICAgZGF0YS5taXNzaW5nTG9va3VwcyA9IHVuaXF1ZShbXG4gICAgICAuLi4oZGF0YS5taXNzaW5nTG9va3VwcyB8fCBbXSksXG4gICAgICBwYXJzZUxvb2t1cChsb2cpXG4gICAgXSk7XG4gIH1cbiAgZWxzZSBpZiAoIWlzT3JjaGVzdHJhdG9yKSB7XG4gICAgZGF0YS5sb2dzID0ge1xuICAgICAgLi4uKGRhdGEubG9ncyB8fCB7fSksXG4gICAgICAuLi5vbWl0TG9nS2V5cyhsb2cpXG4gICAgfTtcbiAgfVxuXG4gIHNldChncm91cCwgbG9nTW9kZWxLZXksIGRhdGEpO1xuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5jb25zdCBncm91cExvZ1N1YlZhbHVlID0gKGdyb3VwLCBsb2csIGtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGlkID0gbG9nW2tleV07XG4gIGNvbnN0IGRhdGEgPSBncm91cExvZyhncm91cFtpZF0gfHwge30sIGxvZyk7XG4gIGdyb3VwW2lkXSA9IGRhdGE7XG5cbiAgaWYgKGtleSA9PT0gJ3RyYW5zZm9ybWF0aW9uJykge1xuICAgIC8vIGFkZCB2YWx1ZSB0byB0aGUgc2FtZSB0ZXJtL21vZGVsIG9uIHBhcmVudCBncm91cFxuICAgIE9iamVjdC5lbnRyaWVzKGdyb3VwW2lkXSkubWFwKChbdGVybSwgbW9kZWxzXSkgPT5cbiAgICAgIE9iamVjdC5rZXlzKG1vZGVscykubWFwKG1vZGVsID0+IHtcbiAgICAgICAgaWYgKGdyb3VwPy5bdGVybV0/Llttb2RlbF0pIHtcbiAgICAgICAgICBncm91cFt0ZXJtXVttb2RlbF1ba2V5XSA9IHVuaXF1ZShbXG4gICAgICAgICAgICAuLi4oZ3JvdXBbdGVybV1bbW9kZWxdW2tleV0gfHwgW10pLFxuICAgICAgICAgICAgaWRcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGdyb3VwO1xufTtcblxuY29uc3Qgc3ViVmFsdWVLZXlzID0gW1xuICAndHJhbnNmb3JtYXRpb24nXG5dO1xuXG5leHBvcnQgY29uc3QgZ3JvdXBMb2dzQnlNb2RlbCA9IChkYXRhOiBzdHJpbmcpOiBJTm9kZUxvZ3MgPT5cbiAgZGF0YS50cmltKCkuc3BsaXQoJ1xcbicpXG4gICAgLm1hcChwYXJzZU1lc3NhZ2UpXG4gICAgLmZpbHRlcih2ID0+ICEhdj8udGVybSAmJiB2Py50ZXJtICE9PSAnTm9uZScgJiYgISF2Py5tb2RlbClcbiAgICAucmVkdWNlKChncm91cCwgbG9nKSA9PiB7XG4gICAgICBjb25zdCBzdWJWYWx1ZSA9IHN1YlZhbHVlS2V5cy5maW5kKHYgPT4gISFsb2dbdl0pO1xuICAgICAgcmV0dXJuIHN1YlZhbHVlID9cbiAgICAgICAgc3ViVmFsdWUgPT09ICd0cmFuc2Zvcm1hdGlvbicgP1xuICAgICAgICAgIC8vIGZvciB0cmFuc2Zvcm1hdGlvbiwgZG8gbm90IGFkZCB0byB0b3AtbGV2ZWwgbW9kZWxcbiAgICAgICAgICBncm91cExvZ1N1YlZhbHVlKGdyb3VwLCBsb2csIHN1YlZhbHVlKSA6XG4gICAgICAgICAgZ3JvdXBMb2coZ3JvdXBMb2dTdWJWYWx1ZShncm91cCwgbG9nLCBzdWJWYWx1ZSksIGxvZylcbiAgICAgICAgOiBncm91cExvZyhncm91cCwgbG9nKTtcbiAgICB9LCB7fSk7XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlVGVybXMgPSAoXG4gIG9yaWdpbmFsVmFsdWVzOiBibGFua05vZGVbXSwgcmVjYWxjdWxhdGVkVmFsdWVzOiBibGFua05vZGVbXSwgdGVybXM/OiBJVGVybUpTT05MRFtdLCBmaWx0ZXJUZXJtVHlwZXM/OiBUZXJtVGVybVR5cGVbXVxuKSA9PiBmcm9tKFxuICAgIHRlcm1zPy5sZW5ndGggP1xuICAgICAgdGVybXMgOlxuICAgICAgW1xuICAgICAgICAuLi4ob3JpZ2luYWxWYWx1ZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0pLFxuICAgICAgICAuLi4ocmVjYWxjdWxhdGVkVmFsdWVzIHx8IFtdKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtKVxuICAgICAgXS5maWx0ZXIobm9kZSA9PiAhZmlsdGVyVGVybVR5cGVzPy5sZW5ndGggfHwgZmlsdGVyVGVybVR5cGVzLmluY2x1ZGVzKG5vZGUudGVybVR5cGUpKVxuICApLnBpcGUoXG4gICAgZGlzdGluY3QodiA9PiB2IVsnQGlkJ10pLFxuICAgIHRvQXJyYXkoKSxcbiAgICBtYXAodiA9PiBvcmRlckJ5KHYsIFsnbmFtZSddLCBbJ2FzYyddKSlcbiAgKS50b1Byb21pc2UoKTtcblxuZXhwb3J0IHR5cGUgYmxhbmtOb2RlID0gRW1pc3Npb24gfCBQcm9kdWN0IHwgSGVzdGlhSW5wdXQgfCBQcm9wZXJ0eSB8IEluZGljYXRvcjtcblxuZXhwb3J0IGVudW0gTG9nU3RhdHVzIHtcbiAgc3VjY2VzcyA9ICdzdWNjZXNzZnVsJyxcbiAgZXJyb3IgPSAnZmFpbGVkJyxcbiAgc2tpcEhpZXJhcmNoeSA9ICdub3QgcnVuIChtb2RlbCBoaWdoZXIgdXAgaGllcmFyY2h5IHJ1biBpbnN0ZWFkKScsXG4gIGRhdGFQcm92aWRlZCA9ICdub3QgcnVuICh1c2VyIHByb3ZpZGVkIGRhdGEgcmV0YWluZWQpJyxcbiAgbm90UmVxdWlyZWQgPSAnbm90IHJlbGV2YW50J1xufVxuXG5jb25zdCBoYXNMb2dzID0gKGxvZ3M/OiBJTm9kZVRlcm1Mb2cpID0+ICEhbG9ncz8ucmVxdWlyZW1lbnRzIHx8ICEhbG9ncz8ubG9ncyB8fCBsb2dzPy5taXNzaW5nTG9va3Vwcz8ubGVuZ3RoID4gMDtcblxuY29uc3QgaGFzTG9nRGV0YWlscyA9IChzdGF0dXM6IExvZ1N0YXR1cywgbG9ncz86IElOb2RlVGVybUxvZykgPT5cbiAgW1xuICAgIExvZ1N0YXR1cy5zdWNjZXNzLFxuICAgIExvZ1N0YXR1cy5lcnJvclxuICBdLmluY2x1ZGVzKHN0YXR1cykgJiYgaGFzTG9ncyhsb2dzKTtcblxuY29uc3QgbG9nU3RhdHVzID0gKGRhdGE6IElCbGFua05vZGVMb2dTdWJWYWx1ZSB8IElCbGFua05vZGVMb2csIGxvZ3M/OiBJTm9kZVRlcm1Mb2csIGluZGV4PzogbnVtYmVyKSA9PlxuICBoYXNMb2cobG9ncylcbiAgICA/IChcbiAgICAgICFkYXRhLmlzUmVxdWlyZWRcbiAgICAgICAgPyBMb2dTdGF0dXMubm90UmVxdWlyZWRcbiAgICAgICAgOiBpc1J1bk9yY2hlc3RyYXRvcihsb2dzKVxuICAgICAgICAgID8gKFxuICAgICAgICAgICAgJ3Nob3VsZFJ1bicgaW4gbG9nc1xuICAgICAgICAgICAgICA/IGxvZ3Muc2hvdWxkUnVuXG4gICAgICAgICAgICAgICAgPyBkYXRhLmlzUmVjYWxjdWxhdGVkXG4gICAgICAgICAgICAgICAgICA/IExvZ1N0YXR1cy5zdWNjZXNzXG4gICAgICAgICAgICAgICAgICA6IExvZ1N0YXR1cy5kYXRhUHJvdmlkZWRcbiAgICAgICAgICAgICAgICA6IGRhdGEuaXNSZWNhbGN1bGF0ZWQgJiYgaW5kZXggPiAwXG4gICAgICAgICAgICAgICAgICA/IExvZ1N0YXR1cy5za2lwSGllcmFyY2h5XG4gICAgICAgICAgICAgICAgICA6IExvZ1N0YXR1cy5lcnJvclxuICAgICAgICAgICAgICA6IExvZ1N0YXR1cy5kYXRhUHJvdmlkZWRcbiAgICAgICAgICApXG4gICAgICAgICAgOiBkYXRhLmlzUmVjYWxjdWxhdGVkXG4gICAgICAgICAgICA/IExvZ1N0YXR1cy5za2lwSGllcmFyY2h5XG4gICAgICAgICAgICA6IExvZ1N0YXR1cy5kYXRhUHJvdmlkZWRcbiAgICApXG4gICAgOiAoXG4gICAgICBbXG4gICAgICAgIHR5cGVvZiBkYXRhLm9yaWdpbmFsVmFsdWUgPT09ICd1bmRlZmluZWQnLCAvLyBubyBvcmlnaW5hbCB2YWx1ZVxuICAgICAgICBkYXRhLmlzUmVjYWxjdWxhdGVkIC8vIGlzIHJlY2FsY3VsYXRlZFxuICAgICAgXS5ldmVyeShCb29sZWFuKVxuICAgICAgICA/IExvZ1N0YXR1cy5za2lwSGllcmFyY2h5XG4gICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmZpZ01vZGVsIHtcbiAgbWV0aG9kSWQ6IHN0cmluZztcbiAgbG9ncz86IElOb2RlVGVybUxvZztcbiAgc2hvd0xvZ3M/OiBib29sZWFuO1xuICBzdGF0dXM/OiBMb2dTdGF0dXM7XG4gIG1vZGVsPzogSU1vZGVsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2dTdWJWYWx1ZSB7XG4gIGtleTogc3RyaW5nO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpZD86IGFueTtcbiAgY29uZmlnTW9kZWxzPzogSUNvbmZpZ01vZGVsW107XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElCbGFua05vZGVMb2cge1xuICBpc09wZW46IGJvb2xlYW47XG4gIGNhbk9wZW46IGJvb2xlYW47XG4gIHRlcm06IElUZXJtSlNPTkxEO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgdHlwZT86IFNjaGVtYVR5cGU7XG4gIGNvbmZpZ01vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdO1xuICBvcmlnaW5hbDogYmxhbmtOb2RlW107XG4gIG9yaWdpbmFsVmFsdWU6IG51bWJlcjtcbiAgLy8gd2hlbiBtdWx0aXBsZSBtb2RlbHMgYXJlIHJ1bm5pbmcgaW4gcGFyYWxsZWxcbiAgb3JpZ2luYWxWYWx1ZUJ5TWV0aG9kSWQ/OiB7XG4gICAgW21ldGhvZElkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG4gIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW107XG4gIHJlY2FsY3VsYXRlZFZhbHVlOiBudW1iZXI7XG4gIC8vIHdoZW4gbXVsdGlwbGUgbW9kZWxzIGFyZSBydW5uaW5nIGluIHBhcmFsbGVsXG4gIHJlY2FsY3VsYXRlZFZhbHVlQnlNZXRob2RJZD86IHtcbiAgICBbbWV0aG9kSWQ6IHN0cmluZ106IG51bWJlcjtcbiAgfTtcbiAgaXNPcmlnaW5hbDogYm9vbGVhbjtcbiAgaXNSZWNhbGN1bGF0ZWQ6IGJvb2xlYW47XG4gIGhhc0RhdGE6IGJvb2xlYW47XG4gIGlzUmVxdWlyZWQ6IGJvb2xlYW47XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2dzO1xuICBrZXlzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXTtcbiAgLy8gbW9kZWxzIGFyZSBwcmVzZW50IGFzIHdlbGwgaW4gb25lIG9mIHRoZSBTdWJWYWx1ZXMsIGRvIG5vdCBzaG93IHR3aWNlXG4gIG1vZGVsc0luU3ViVmFsdWVzPzogYm9vbGVhbjtcbiAgLy8gY29udGFpbnMgbXVsdGlwbGUgbW9kZWxzIGFsbCBydW5uaW5nIGluIHBhcmFsbGVsXG4gIGFsbFBhcmFsbGVsPzogYm9vbGVhbjtcbn1cblxuY29uc3QgbWVyZ2VTdWJWYWx1ZXMgPSAodmFsdWVzOiBhbnlbXSk6IGFueVtdID0+XG4gIE9iamVjdC52YWx1ZXMoXG4gICAgdmFsdWVzLnJlZHVjZSgocHJldiwgeyBpZCwga2V5LCBjb25maWdNb2RlbHMgfSkgPT4ge1xuICAgICAgY29uc3QgdW5pcXVlS2V5ID0gW2tleSwgaWRdLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG4gICAgICBwcmV2W3VuaXF1ZUtleV0gPSB7XG4gICAgICAgIGlkLCBrZXksIGNvbmZpZ01vZGVsczogWy4uLigocHJldlt1bmlxdWVLZXldIHx8IHt9KS5jb25maWdNb2RlbHMgfHwgW10pLCAuLi4oY29uZmlnTW9kZWxzIHx8IFtdKV1cbiAgICAgIH07XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCB7fSlcbiAgKTtcblxuY29uc3QgcmVkdWNlVmFsdWVzID0gKHZhbHVlczogYW55W10sIHRlcm1JZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHByb3BlcnR5VmFsdWVzID0gdmFsdWVzXG4gICAgLm1hcCgoeyB2YWx1ZSB9KSA9PiBwcm9wZXJ0eVZhbHVlKHZhbHVlLCB0ZXJtSWQpKVxuICAgIC8vIHByb3BlcnR5VmFsdWUgbWF5IHJldHVybiBudWxsIGlmIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlcmVmb3JlIHJlbW92ZSB0aGVtIGZyb20gdG90YWxcbiAgICAuZmlsdGVyKHYgPT4gdiAhPT0gbnVsbCk7XG4gIHJldHVybiBwcm9wZXJ0eVZhbHVlcy5sZW5ndGggPyBwcm9wZXJ0eVZhbHVlcy5yZWR1Y2UoKHAsIHYpID0+IHAgKyB2LCAwKSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGlzUnVuT3JjaGVzdHJhdG9yID0gKGxvZzogSU5vZGVUZXJtTG9nKSA9PiAhKCdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZykgfHwgbG9nLnNob3VsZFJ1bk9yY2hlc3RyYXRvcjtcblxuY29uc3QgaGFzTG9nID0gKGxvZzogSU5vZGVUZXJtTG9nLCB3aXRoT3JjaGVzdHJhdG9yID0gdHJ1ZSkgPT5cbiAgISFsb2cgJiYgKFxuICAgICdzaG91bGRSdW4nIGluIGxvZyB8fFxuICAgICdydW5SZXF1aXJlZCcgaW4gbG9nIHx8XG4gICAgKHdpdGhPcmNoZXN0cmF0b3IgJiYgJ3Nob3VsZFJ1bk9yY2hlc3RyYXRvcicgaW4gbG9nKVxuICApO1xuXG5jb25zdCBpc1JlY2FsY3VsYXRlZCA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBrZXkgPSAndmFsdWUnKSA9PiB2YWx1ZXMuc29tZSh2ID0+IChbXG4gIC4uLih2LmFkZGVkIHx8IFtdKSxcbiAgLi4uKHYudXBkYXRlZCB8fCBbXSlcbl0pLmluY2x1ZGVzKGtleSkpO1xuXG5jb25zdCBibGFua05vZGVWYWx1ZUJ5S2V5OiB7XG4gIFtrZXk6IHN0cmluZ106ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBrZXk/OiBzdHJpbmcsIGlkPzogc3RyaW5nKSA9PiBudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuO1xufSA9IHtcbiAgcHJvcGVydHk6ICh2YWx1ZXM6IChFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dClbXSwgX2ssIGlkKSA9PiAhIWlkICYmIHZhbHVlcz8ubGVuZ3RoXG4gICAgPyAodmFsdWVzWzBdLnByb3BlcnRpZXMgfHwgW10pLmZpbmQocCA9PiBwLnRlcm1bJ0BpZCddID09PSBpZCk/LnZhbHVlIHx8ICcnXG4gICAgOiAnJyxcbiAgaW5wdXQ6ICh2YWx1ZXM6IEVtaXNzaW9uW10sIF9rLCBpZCkgPT4gISFpZCAmJiB2YWx1ZXM/Lmxlbmd0aFxuICAgID8gcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCgoeyBpbnB1dHMgfSkgPT4gKGlucHV0cyB8fCBbXSkuc29tZShpbnB1dCA9PiBpbnB1dFsnQGlkJ10gPT09IGlkKSk/LnZhbHVlLCBpZClcbiAgICA6ICcnLFxuICB0cmFuc2Zvcm1hdGlvbjogKHZhbHVlczogRW1pc3Npb25bXSwgX2ssIGlkKSA9PiB2YWx1ZXMubGVuZ3RoXG4gICAgPyBwcm9wZXJ0eVZhbHVlKHZhbHVlcy5maW5kKCh7IHRyYW5zZm9ybWF0aW9uIH0pID0+IHRyYW5zZm9ybWF0aW9uPy5bJ0BpZCddID09PSBpZCk/LnZhbHVlLCBpZClcbiAgICA6ICcnLFxuICBkZWZhdWx0OiAoYmxhbmtOb2Rlcywga2V5KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBibGFua05vZGVzPy5sZW5ndGggPyBibGFua05vZGVzWzBdW2tleV0gOiBudWxsO1xuICAgIHJldHVybiBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsICd1bmRlZmluZWQnXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpXG4gICAgICA/IGlzVW5kZWZpbmVkKHZhbHVlKVxuICAgICAgPyAnJ1xuICAgICAgOiB2YWx1ZVxuICAgICAgOiBudWxsO1xuICB9XG59O1xuXG5jb25zdCBibGFua05vZGVWYWx1ZSA9IChibGFua05vZGVzOiBibGFua05vZGVbXSwga2V5OiBzdHJpbmcsIGlkPzogc3RyaW5nKSA9PlxuICBibGFua05vZGVWYWx1ZUJ5S2V5W2tleSBpbiBibGFua05vZGVWYWx1ZUJ5S2V5ID8ga2V5IDogJ2RlZmF1bHQnXShibGFua05vZGVzLCBrZXksIGlkKTtcblxuY29uc3Qgc3ViVmFsdWVMb2dLZXkgPSAoeyBrZXksIGlkIH06IElCbGFua05vZGVMb2dTdWJWYWx1ZSk6IHN0cmluZyA9PlxuICBrZXkgPT09ICd0cmFuc2Zvcm1hdGlvbicgPyBrZXkgOiAoaWQgfHwga2V5IHx8IG51bGwpO1xuXG5jb25zdCBsb2dTdWJWYWx1ZSA9IChsb2dzOiBJTm9kZVRlcm1Mb2dzLCBrZXk6IHN0cmluZywgcHJvcDogc3RyaW5nKSA9PlxuICBsb2dzW2tleV1bcHJvcF0gPyAoXG4gICAgQXJyYXkuaXNBcnJheShsb2dzW2tleV1bcHJvcF0pID9cbiAgICAgIChsb2dzW2tleV1bcHJvcF0gYXMgc3RyaW5nW10pLm1hcChpZCA9PiAoeyBrZXk6IHByb3AsIGlkIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKSkgOlxuICAgICAgeyBrZXk6IHByb3AsIGlkOiBsb2dzW2tleV1bcHJvcF0gfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWVcbiAgKSA6IHVuZGVmaW5lZDtcblxuY29uc3QgbG9nUHJvcGVydGllcyA9IChub2RlczogYmxhbmtOb2RlW10sIG1vZGVsczogSU1vZGVsW10pID0+XG4gIG5vZGVzLmZsYXRNYXAobm9kZSA9PlxuICAgICgobm9kZSBhcyBhbnkpLnByb3BlcnRpZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm1bJ0BpZCddKVxuICApLm1hcChpZCA9PiAoeyBrZXk6ICdwcm9wZXJ0eScsIGlkLCBjb25maWdNb2RlbHM6IGZpbmRNb2RlbHMobW9kZWxzLCBpZCkubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsKSB9KSk7XG5cbi8qKlxuICogSW5jbHVkZSB0cmFuc2Zvcm1hdGlvbiBtb2RlbCAoY29weSBFbWlzc2lvbnMgZnJvbSBUcmFuc2Zvcm1hdGlvbiB0byBDeWNsZSkgYXMgc3ViVmFsdWUuXG4gKlxuICogQHBhcmFtIGVtaXNzaW9uc1xuICogQHJldHVybnNcbiAqL1xuY29uc3QgbG9nRW1pc3Npb25UcmFuc2Zvcm1hdGlvbnMgPSAoZW1pc3Npb25zOiBFbWlzc2lvbltdKSA9PlxuICBlbWlzc2lvbnMuZmlsdGVyKCh7IHRyYW5zZm9ybWF0aW9uIH0pID0+ICEhdHJhbnNmb3JtYXRpb24/LlsnQGlkJ10pLm1hcCgoeyB0cmFuc2Zvcm1hdGlvbiB9KSA9PiAoe1xuICAgIGlkOiB0cmFuc2Zvcm1hdGlvbj8uWydAaWQnXSxcbiAgICBrZXk6ICd0cmFuc2Zvcm1hdGlvbicsXG4gICAgY29uZmlnTW9kZWxzOiBbJ2N5Y2xlJ11cbiAgfSkpO1xuXG5jb25zdCBpbmNsdWRlQ3ljbGVTdWJWYWx1ZSA9IChzdWJWYWx1ZXM6IElCbGFua05vZGVMb2dTdWJWYWx1ZVtdKSA9PlxuICBzdWJWYWx1ZXMuc29tZSh2ID0+IHYua2V5ICE9PSAncHJvcGVydHknKTtcblxuY29uc3QgY3ljbGVTdWJWYWx1ZSA9ICh7XG4gIHRlcm1JZCwgY29uZmlnTW9kZWxzLCBpc1JlcXVpcmVkLCBzdWJWYWx1ZXMsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWRcbn06IElCbGFua05vZGVMb2cpID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHJlZHVjZVZhbHVlcyhvcmlnaW5hbC5maWx0ZXIoKHY6IGFueSkgPT4gIXYuaW5wdXRzPy5sZW5ndGggJiYgIXYudHJhbnNmb3JtYXRpb24pLCB0ZXJtSWQpO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZXMgPSByZWNhbGN1bGF0ZWQuZmlsdGVyKCh2OiBhbnkpID0+ICF2LmlucHV0cz8ubGVuZ3RoICYmICF2LnRyYW5zZm9ybWF0aW9uKTtcbiAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWUgPSByZWR1Y2VWYWx1ZXMocmVjYWxjdWxhdGVkVmFsdWVzLCB0ZXJtSWQpO1xuICByZXR1cm4gaW5jbHVkZUN5Y2xlU3ViVmFsdWUoc3ViVmFsdWVzKSAmJiAhaXNFbXB0eShyZWNhbGN1bGF0ZWRWYWx1ZSkgPyB7XG4gICAga2V5OiAnY3ljbGUnLFxuICAgIGNvbmZpZ01vZGVscyxcbiAgICBpc1JlcXVpcmVkLFxuICAgIG9yaWdpbmFsVmFsdWUsXG4gICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKHJlY2FsY3VsYXRlZFZhbHVlcylcbiAgfSBhcyBJQmxhbmtOb2RlTG9nU3ViVmFsdWUgOiBudWxsO1xufTtcblxuY29uc3QgbG9nU3ViVmFsdWVzID0gKFxuICBhbGxMb2dzOiBJTm9kZUxvZ3MsIGxvZ3M6IElOb2RlVGVybUxvZ3MsIG9yaWdpbmFsOiBibGFua05vZGVbXSwgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXSwgbW9kZWxzOiBJTW9kZWxbXSxcbiAgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH06IElDb25maWdNb2RlbERvY3NEYXRhXG4pOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXSA9PlxuICBtZXJnZVN1YlZhbHVlcyhbXG4gICAgLy8gaW5jbHVkZSBwcm9wZXJ0aWVzXG4gICAgLi4uT2JqZWN0LmtleXMobG9ncylcbiAgICAgIC5maWx0ZXIoaWQgPT4gbG9nc1tpZF0uaXNQcm9wZXJ0eSlcbiAgICAgIC5tYXAoaWQgPT4gKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGtleTogJ3Byb3BlcnR5JyxcbiAgICAgICAgY29uZmlnTW9kZWxzOiAobG9nc1tpZF0ubW9kZWxzIHx8IFtdKS5maWx0ZXIodiA9PiBoYXNMb2cobG9nc1tpZF1bdl0pKVxuICAgICAgfSkpLFxuICAgIC4uLih0eXBlID09PSBTY2hlbWFUeXBlLkVtaXNzaW9uID8gbG9nRW1pc3Npb25UcmFuc2Zvcm1hdGlvbnMocmVjYWxjdWxhdGVkIGFzIEVtaXNzaW9uW10pIDogW10pLFxuICAgIC4uLk9iamVjdC5rZXlzKGxvZ3MpLmZsYXRNYXAoa2V5ID0+XG4gICAgICBbXG4gICAgICAgIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ2lucHV0JyksXG4gICAgICAgIGxvZ1N1YlZhbHVlKGxvZ3MsIGtleSwgJ3Byb3BlcnR5JylcbiAgICAgIF1cbiAgICAgICAgLmZsYXQoKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5tYXAodiA9PiAoeyAuLi52LCBjb25maWdNb2RlbHM6ICh2LmNvbmZpZ01vZGVscyBhcyBhbnlbXSkgfHwgW2tleV0gfSkpXG4gICAgKSxcbiAgICAuLi5sb2dQcm9wZXJ0aWVzKG9yaWdpbmFsLCBtb2RlbHMpLFxuICAgIC4uLmxvZ1Byb3BlcnRpZXMocmVjYWxjdWxhdGVkLCBtb2RlbHMpXG4gIF0pXG4gICAgLm1hcCgoeyBrZXksIGlkLCBjb25maWdNb2RlbHMsIG9yaWdpbmFsVmFsdWUsIHJlY2FsY3VsYXRlZFZhbHVlIH0pID0+IHtcbiAgICAgIG9yaWdpbmFsVmFsdWUgPSBvcmlnaW5hbFZhbHVlIHx8IGJsYW5rTm9kZVZhbHVlKG9yaWdpbmFsLCBrZXksIGlkKTtcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlID0gcmVjYWxjdWxhdGVkVmFsdWUgfHwgYmxhbmtOb2RlVmFsdWUocmVjYWxjdWxhdGVkLCBrZXksIGlkKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleSxcbiAgICAgICAgaWQsXG4gICAgICAgIGNvbmZpZ01vZGVsczogY29uZmlnTW9kZWxzLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH0sIHsga2V5LCBpZCB9IGFzIGFueSkpLFxuICAgICAgICBvcmlnaW5hbFZhbHVlLFxuICAgICAgICByZWNhbGN1bGF0ZWRWYWx1ZSxcbiAgICAgICAgaXNSZWNhbGN1bGF0ZWQ6ICFpc1VuZGVmaW5lZChyZWNhbGN1bGF0ZWRWYWx1ZSkgJiYgcmVjYWxjdWxhdGVkVmFsdWUgIT09IG9yaWdpbmFsVmFsdWUsXG4gICAgICAgIGlzUmVxdWlyZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfSlcbiAgICAuZmlsdGVyKHYgPT4gdi5jb25maWdNb2RlbHMubGVuZ3RoID4gMClcbiAgICAubWFwKHYgPT4gdi5rZXkgPT09ICdpbnB1dCcgPyBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyhhbGxMb2dzKSh2KSA6IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKHYpKTtcblxuY29uc3QgbG9nS2V5cyA9IChcbiAgbG9nczogSU5vZGVUZXJtTG9ncywgb3JpZ2luYWw6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfVxuKTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW10gPT5cbiAgT2JqZWN0LmtleXMobG9ncylcbiAgICAuZmlsdGVyKGtleSA9PiBsb2dzW2tleV0uaXNLZXkgJiYga2V5ICE9PSAndHJhbnNmb3JtYXRpb24nKVxuICAgIC5tYXAoa2V5ID0+ICh7XG4gICAgICBrZXksXG4gICAgICBjb25maWdNb2RlbHM6IChsb2dzW2tleV0ubW9kZWxzIHx8IFtdKVxuICAgICAgICAubWFwKGNvbmZpZ01vZGVsV2l0aERvY3MobW9kZWxzLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQgfSwgeyBrZXkgfSBhcyBhbnkpKVxuICAgICAgICAvLyBvbmx5IHRha2UgdGhvc2Ugd2UgZm91bmQgYSBtYXRjaGluZyBtb2RlbCAoYXZvaWQgbWF0Y2hpbmcga2V5IG9uIHdyb25nIG5vZGUgdHlwZSlcbiAgICAgICAgLmZpbHRlcih2ID0+ICEhdi5tb2RlbCksXG4gICAgICBvcmlnaW5hbFZhbHVlOiBibGFua05vZGVWYWx1ZShvcmlnaW5hbCwga2V5KSxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiBibGFua05vZGVWYWx1ZShyZWNhbGN1bGF0ZWQsIGtleSksXG4gICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkLCBrZXkpLFxuICAgICAgaXNSZXF1aXJlZDogdHJ1ZVxuICAgIH0pKVxuICAgIC5maWx0ZXIodiA9PiB2LmNvbmZpZ01vZGVscy5sZW5ndGggPiAwKVxuICAgIC5tYXAoZGF0YVdpdGhDb25maWdNb2RlbExvZ3MobG9ncykpO1xuXG5jb25zdCBpc0JhY2tncm91bmROb0lucHV0ID0gKGxvZ3M6IElOb2RlVGVybUxvZykgPT4gbG9ncy5tZXRob2RUaWVyID09PSBFbWlzc2lvbk1ldGhvZFRpZXIuYmFja2dyb3VuZCAmJiAhbG9ncy5pbnB1dDtcblxuY29uc3QgaXNNb2RlbExvZyA9IChsb2dzOiBJTm9kZVRlcm1Mb2cpID0+XG4gIFtcbiAgICAhaXNCYWNrZ3JvdW5kTm9JbnB1dChsb2dzKSxcbiAgICAhbG9ncy5pc0tleSxcbiAgICAhbG9ncy5pbnB1dCxcbiAgICAhbG9ncy5wcm9wZXJ0eVxuICBdLmV2ZXJ5KEJvb2xlYW4pICYmIFtcbiAgICAnc2hvdWxkUnVuJyBpbiBsb2dzLFxuICAgICdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZ3MsXG4gICAgJ3J1blJlcXVpcmVkJyBpbiBsb2dzXG4gIF0uc29tZShCb29sZWFuKTtcblxuY29uc3QgbW9kZWxDb25maWdPcmRlciA9IChcbiAgbW9kZWxzOiAoSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnIHwgSU9yY2hlc3RyYXRvck1vZGVsQ29uZmlnW10pW10sIHRlcm1JZDogc3RyaW5nLCBtb2RlbEtleTogc3RyaW5nLCBtb2RlbDogc3RyaW5nXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBpbmRleGVzID0gbW9kZWxzLm1hcCgobSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBhcnJheUluZGV4ID0gQXJyYXkuaXNBcnJheShtKSA/IG1vZGVsQ29uZmlnT3JkZXIobSwgdGVybUlkLCBtb2RlbEtleSwgbW9kZWwpIDogJyc7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobSlcbiAgICAgID8gYXJyYXlJbmRleFxuICAgICAgICA/IFtpbmRleCwgYXJyYXlJbmRleF0uam9pbignLicpXG4gICAgICAgIDogJydcbiAgICAgIDogW3Rlcm1JZCA9PT0gbS52YWx1ZSwgbW9kZWxLZXkgPT09IG0ua2V5LCBtb2RlbCA9PT0gbS5tb2RlbF0uZXZlcnkoQm9vbGVhbilcbiAgICAgICAgPyBgJHtpbmRleH1gXG4gICAgICAgIDogJyc7XG4gIH0pLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIGluZGV4ZXMubGVuZ3RoID8gaW5kZXhlc1swXSA6ICcnO1xufTtcblxuaW50ZXJmYWNlIElDb25maWdNb2RlbERvY3NEYXRhIHtcbiAgbm9kZVR5cGU6IE5vZGVUeXBlO1xuICB0eXBlOiBTY2hlbWFUeXBlO1xuICB0ZXJtSWQ6IHN0cmluZztcbiAgdGVybVR5cGU/OiBUZXJtVGVybVR5cGU7XG59XG5cbmNvbnN0IGNvbmZpZ01vZGVsV2l0aERvY3MgPSAoXG4gIG1vZGVsczogSU1vZGVsW10sIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCwgdGVybVR5cGUgfTogSUNvbmZpZ01vZGVsRG9jc0RhdGEsIHN1YlZhbHVlPzogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlXG4pID0+IChtZXRob2RJZDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG5vZGUgPSB7XG4gICAgJ0B0eXBlJzogbm9kZVR5cGUsXG4gICAgdGVybTogeyAnQGlkJzogc3ViVmFsdWU/LmlkIHx8IHRlcm1JZCB9LFxuICAgIG1ldGhvZE1vZGVsOiB7ICdAaWQnOiBtZXRob2RJZCB9XG4gIH0gYXMgYW55O1xuICByZXR1cm4ge1xuICAgIG1ldGhvZElkLFxuICAgIG1vZGVsOiBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsUGFyYW1zKG5vZGUpKSB8fFxuICAgICAgLy8gaGFuZGxlIFwibGl2ZUFuaW1hbFwiXG4gICAgICAodGVybVR5cGUgJiYgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCB0ZXJtVHlwZSkpKSB8fFxuICAgICAgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCBgJHtzdWJWYWx1ZT8ua2V5fS4ke21ldGhvZElkfWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwiaW5wdXQucHJpY2VcIlxuICAgICAgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCBgJHt0eXBlPy50b0xvd2VyQ2FzZSgpfS4ke3N1YlZhbHVlPy5rZXl9YCkpIHx8XG4gICAgICAvLyBoYW5kbGUgXCJpbnB1dC5oZXN0aWFBZ2dyZWdhdGVkRGF0YVwiXG4gICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIGAke3R5cGU/LnRvTG93ZXJDYXNlKCl9LiR7bWV0aG9kSWR9YCkpIHx8XG4gICAgICAvLyBoYW5kbGUgXCJ0cmFuc2Zvcm1hdGlvblwiXG4gICAgICBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIHN1YlZhbHVlPy5rZXkpKVxuICB9O1xufTtcblxuY29uc3QgY29uZmlnTW9kZWxXaXRoTG9ncyA9IChkYXRhOiBJQmxhbmtOb2RlTG9nIHwgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlLCBsb2dzOiBJTm9kZVRlcm1Mb2dzKSA9PiAoXG4gIG1vZGVsOiBJQ29uZmlnTW9kZWwsIGluZGV4ID0gMFxuKSA9PiB7XG4gIGNvbnN0IHN0YXR1cyA9IGxvZ1N0YXR1cyhkYXRhLCBsb2dzPy5bbW9kZWwubWV0aG9kSWRdLCBpbmRleCk7XG4gIHJldHVybiB7XG4gICAgLi4ubW9kZWwsXG4gICAgbG9nczogbG9ncz8uW21vZGVsLm1ldGhvZElkXSxcbiAgICBzdGF0dXMsXG4gICAgc2hvd0xvZ3M6IGhhc0xvZ0RldGFpbHMoc3RhdHVzLCBsb2dzPy5bbW9kZWwubWV0aG9kSWRdKVxuICB9IGFzIElDb25maWdNb2RlbDtcbn07XG5cbmNvbnN0IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzID0gKFxuICBsb2dzOiBJTm9kZUxvZ3MgfCBJTm9kZVRlcm1Mb2dzXG4pID0+IDxUIGV4dGVuZHMgKElCbGFua05vZGVMb2cgfCBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpPihkYXRhOiBUKSA9PiB7XG4gIGNvbnN0IHN1YkxvZ0tleSA9IHN1YlZhbHVlTG9nS2V5KGRhdGEgYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKTtcbiAgY29uc3QgbG9nID0gc3ViTG9nS2V5ID8gbG9nc1tzdWJMb2dLZXldIDogbG9ncztcbiAgcmV0dXJuIHtcbiAgICAuLi5kYXRhLFxuICAgIGNvbmZpZ01vZGVsczogZGF0YS5jb25maWdNb2RlbHMubWFwKChtb2RlbCwgaW5kZXgpID0+XG4gICAgICBBcnJheS5pc0FycmF5KG1vZGVsKSA/IG1vZGVsLm1hcChjb25maWdNb2RlbFdpdGhMb2dzKGRhdGEsIGxvZykpIDogY29uZmlnTW9kZWxXaXRoTG9ncyhkYXRhLCBsb2cpKG1vZGVsLCBpbmRleClcbiAgICApXG4gIH0gYXMgVDtcbn07XG5cbi8qKlxuICogR3JvdXAgbW9kZWxzIHJ1bm5pbmcgaW4gcGFyYWxsZWwgdW5kZXIgdGhlIHNhbWUgYXJyYXksIGFzIHRoZXkgc2hvdWxkIGFwcGVhciB2ZXJ0aWNhbGx5LlxuICpcbiAqIEBwYXJhbSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0gbW9kZWxzIFRoZSBsaXN0IG9mIG1vZGVsc1xuICovXG5jb25zdCBncm91cFBhcmFsbGVsTW9kZWxzID0gKGNvbmZpZzogSU9yY2hlc3RyYXRvckNvbmZpZywgdGVybUlkOiBzdHJpbmcsIG1vZGVsS2V5OiBzdHJpbmcsIG1vZGVsczogSUNvbmZpZ01vZGVsW10pID0+IHtcbiAgY29uc3QgbW9kZWxzV2l0aE9yZGVyID0gbW9kZWxzLm1hcChtb2RlbCA9PiAoe1xuICAgIG1vZGVsLFxuICAgIG9yZGVyOiBtb2RlbENvbmZpZ09yZGVyKGNvbmZpZy5tb2RlbHMsIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsLm1ldGhvZElkKVxuICB9KSk7XG4gIHJldHVybiBtb2RlbHNXaXRoT3JkZXJcbiAgICAucmVkdWNlKChwcmV2LCB7IG1vZGVsLCBvcmRlciB9KSA9PiB7XG4gICAgICBjb25zdCBpc0FycmF5ID0gb3JkZXIuaW5jbHVkZXMoJy4nKTtcbiAgICAgIGNvbnN0IGFycmF5SW5kZXggPSBpc0FycmF5ID8gb3JkZXIuc3BsaXQoJy4nKVswXSA6IHByZXYubGVuZ3RoO1xuICAgICAgcHJldlthcnJheUluZGV4XSA9IGlzQXJyYXkgPyBbLi4uKHByZXZbYXJyYXlJbmRleF0gfHwgW10pLCBtb2RlbF0gOiBtb2RlbDtcbiAgICAgIHJldHVybiBwcmV2O1xuICAgIH0sIFtdIGFzIElDb25maWdNb2RlbFtdW10pXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5tYXAodiA9PiB2Lmxlbmd0aCA9PT0gMSA/IHZbMF0gOiB2KTtcbn07XG5cbmNvbnN0IGFsbFBhcmFsbGVsID0gKG1vZGVsczogKElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdKVtdKSA9PlxuICBtb2RlbHMubGVuZ3RoID09PSAxICYmIEFycmF5LmlzQXJyYXkobW9kZWxzWzBdKSAmJiBtb2RlbHNbMF0ubGVuZ3RoID4gMTtcblxuY29uc3QgdmFsdWVCeU1ldGhvZElkID0gKHZhbHVlczogYmxhbmtOb2RlW10sIG1ldGhvZElkOiBzdHJpbmcsIHRlcm1JZDogc3RyaW5nKSA9PlxuICBwcm9wZXJ0eVZhbHVlKHZhbHVlcy5maW5kKHYgPT4gdi5tZXRob2RNb2RlbD8uWydAaWQnXSA9PT0gbWV0aG9kSWQpPy52YWx1ZSBhcyBudW1iZXJbXSwgdGVybUlkKTtcblxuY29uc3QgZ3JvdXBQYXJhbGxlbFZhbHVlcyA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElDb25maWdNb2RlbCB8IElDb25maWdNb2RlbFtdLCB0ZXJtSWQ6IHN0cmluZykgPT5cbiAgQXJyYXkuaXNBcnJheShtb2RlbHMpXG4gICAgPyBPYmplY3QuZnJvbUVudHJpZXMobW9kZWxzLm1hcChtb2RlbCA9PiBbbW9kZWwubWV0aG9kSWQsIHZhbHVlQnlNZXRob2RJZCh2YWx1ZXMsIG1vZGVsLm1ldGhvZElkLCB0ZXJtSWQpXSkpXG4gICAgOiB7fTtcblxuZXhwb3J0IGNvbnN0IGdyb3VwTG9nc0J5VGVybSA9IChcbiAgbm9kZVR5cGU6IE5vZGVUeXBlLCBsb2dzOiBJTm9kZUxvZ3MsIG1vZGVsczogSU1vZGVsW10sIGNvbmZpZzogSU9yY2hlc3RyYXRvckNvbmZpZyxcbiAgYWxsT3JpZ2luYWxWYWx1ZXM6IGJsYW5rTm9kZVtdLCBhbGxSZWNhbGN1bGF0ZWRWYWx1ZXM6IGJsYW5rTm9kZVtdLFxuICBub2RlS2V5Pzogc3RyaW5nXG4pID0+IHtcbiAgY29uc3Qgb3JpZ2luYWxWYWx1ZXMgPSAoYWxsT3JpZ2luYWxWYWx1ZXMgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiAhKHZhbHVlIGFzIGFueSkuZGVsZXRlZCk7XG4gIGNvbnN0IHJlY2FsY3VsYXRlZFZhbHVlcyA9IChhbGxSZWNhbGN1bGF0ZWRWYWx1ZXMgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiAhKHZhbHVlIGFzIGFueSkuZGVsZXRlZCk7XG4gIGNvbnN0IHR5cGU6IFNjaGVtYVR5cGUgPSBvcmlnaW5hbFZhbHVlcy5sZW5ndGggP1xuICAgIG9yaWdpbmFsVmFsdWVzWzBdWydAdHlwZSddIHx8IG9yaWdpbmFsVmFsdWVzWzBdLnR5cGUgOlxuICAgIHJlY2FsY3VsYXRlZFZhbHVlcy5sZW5ndGggP1xuICAgICAgcmVjYWxjdWxhdGVkVmFsdWVzWzBdWydAdHlwZSddIHx8IHJlY2FsY3VsYXRlZFZhbHVlc1swXS50eXBlIDpcbiAgICAgIHVuZGVmaW5lZDtcblxuICByZXR1cm4gKHRlcm06IElUZXJtSlNPTkxEKTogSUJsYW5rTm9kZUxvZyA9PiB7XG4gICAgY29uc3QgdGVybUlkID0gdGVybVsnQGlkJ107XG4gICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLnRlcm1UeXBlO1xuICAgIGNvbnN0IHRlcm1Mb2dzID0gZ2V0KGxvZ3MsIHRlcm1JZCwge30pIGFzIElOb2RlVGVybUxvZ3M7XG4gICAgY29uc3Qgb3JpZ2luYWwgPSBvcmlnaW5hbFZhbHVlcy5maWx0ZXIodiA9PiB0ZXJtSWQgPT09IHYudGVybSFbJ0BpZCddKTtcbiAgICBjb25zdCByZWNhbGN1bGF0ZWQgPSByZWNhbGN1bGF0ZWRWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgY29uc3QgaGFzRGF0YSA9ICEhb3JpZ2luYWwubGVuZ3RoIHx8ICEhcmVjYWxjdWxhdGVkLmxlbmd0aCB8fCBPYmplY3Qua2V5cyh0ZXJtTG9ncykubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjb25maWdNb2RlbHNEYXRhID0geyBub2RlVHlwZSwgdHlwZSwgdGVybUlkLCB0ZXJtVHlwZSB9O1xuICAgIGNvbnN0IGNvbmZpZ01vZGVscyA9IGdyb3VwUGFyYWxsZWxNb2RlbHMoXG4gICAgICBjb25maWcsIHRlcm1JZCwgbm9kZUtleSEsXG4gICAgICB1bmlxdWUoW1xuICAgICAgICAuLi4odGVybUxvZ3MubW9kZWxzIHx8IFtdKS5maWx0ZXIoa2V5ID0+IGlzTW9kZWxMb2codGVybUxvZ3Nba2V5XSkpLFxuICAgICAgICAvLyAuLi5maW5kQ29uZmlnTW9kZWxzKGNvbmZpZywgdGVybUlkLCBub2RlS2V5ISwgbW9kZWxzKS5tYXAoKHsgbW9kZWwgfSkgPT4gbW9kZWwgYXMgc3RyaW5nKVxuICAgICAgXSkubWFwKGNvbmZpZ01vZGVsV2l0aERvY3MobW9kZWxzLCBjb25maWdNb2RlbHNEYXRhKSlcbiAgICApO1xuICAgIGNvbnN0IGtleXMgPSBsb2dLZXlzKHRlcm1Mb2dzLCBvcmlnaW5hbCwgcmVjYWxjdWxhdGVkLCBtb2RlbHMsIGNvbmZpZ01vZGVsc0RhdGEpO1xuICAgIGNvbnN0IHN1YlZhbHVlcyA9IGxvZ1N1YlZhbHVlcyhsb2dzLCB0ZXJtTG9ncywgb3JpZ2luYWwsIHJlY2FsY3VsYXRlZCwgbW9kZWxzLCBjb25maWdNb2RlbHNEYXRhKTtcbiAgICBjb25zdCBpc1JlcXVpcmVkID0gIU9iamVjdC52YWx1ZXModGVybUxvZ3MpXG4gICAgICAuZmlsdGVyKHYgPT4gdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpICYmICF2LmlzS2V5KVxuICAgICAgLy8gaWdub3JlIG1vZGVscyB0aGF0IHdlcmUgbmV2ZXIgZ29pbmcgdG8gcnVuXG4gICAgICAuZmlsdGVyKGlzUnVuT3JjaGVzdHJhdG9yKVxuICAgICAgLmV2ZXJ5KHYgPT4gdi5ydW5SZXF1aXJlZCA9PT0gZmFsc2UpO1xuXG4gICAgY29uc3Qgbm9kZUxvZzogSUJsYW5rTm9kZUxvZyA9IGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKHRlcm1Mb2dzKSh7XG4gICAgICBpc09wZW46IHRydWUsXG4gICAgICBjYW5PcGVuOiBrZXlzLmxlbmd0aCA+IDAgfHwgc3ViVmFsdWVzLmxlbmd0aCA+IDAsXG4gICAgICB0ZXJtSWQsXG4gICAgICB0ZXJtLFxuICAgICAgdHlwZSxcbiAgICAgIGNvbmZpZ01vZGVscyxcbiAgICAgIG9yaWdpbmFsLFxuICAgICAgb3JpZ2luYWxWYWx1ZTogcmVkdWNlVmFsdWVzKG9yaWdpbmFsLCB0ZXJtSWQpLFxuICAgICAgcmVjYWxjdWxhdGVkLFxuICAgICAgcmVjYWxjdWxhdGVkVmFsdWU6IHJlZHVjZVZhbHVlcyhyZWNhbGN1bGF0ZWQsIHRlcm1JZCksXG4gICAgICBpc09yaWdpbmFsOiAhIW9yaWdpbmFsLmxlbmd0aCxcbiAgICAgIGlzUmVjYWxjdWxhdGVkOiBpc1JlY2FsY3VsYXRlZChyZWNhbGN1bGF0ZWQpLFxuICAgICAgaGFzRGF0YSxcbiAgICAgIGlzUmVxdWlyZWQsXG4gICAgICBsb2dzOiB0ZXJtTG9ncyxcbiAgICAgIGtleXMsXG4gICAgICBzdWJWYWx1ZXMsXG4gICAgICBhbGxQYXJhbGxlbDogYWxsUGFyYWxsZWwoY29uZmlnTW9kZWxzKSxcbiAgICAgIG9yaWdpbmFsVmFsdWVCeU1ldGhvZElkOiBncm91cFBhcmFsbGVsVmFsdWVzKG9yaWdpbmFsLCBjb25maWdNb2RlbHNbMF0sIHRlcm1JZCksXG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZUJ5TWV0aG9kSWQ6IGdyb3VwUGFyYWxsZWxWYWx1ZXMocmVjYWxjdWxhdGVkLCBjb25maWdNb2RlbHNbMF0sIHRlcm1JZClcbiAgICB9KTtcbiAgICBjb25zdCBzdWJWYWx1ZSA9IGN5Y2xlU3ViVmFsdWUobm9kZUxvZyk7XG5cbiAgICByZXR1cm4gc3ViVmFsdWVcbiAgICAgID8ge1xuICAgICAgICAuLi5ub2RlTG9nLFxuICAgICAgICBtb2RlbHNJblN1YlZhbHVlczogdHJ1ZSxcbiAgICAgICAgc3ViVmFsdWVzOiBbXG4gICAgICAgICAgc3ViVmFsdWUsXG4gICAgICAgICAgLi4uc3ViVmFsdWVzXG4gICAgICAgIF1cbiAgICAgIH0gLy8gaWYgd2UgaW5jbHVkZSB0aGUgQ3ljbGUgdmFsdWUsIGl0IGJlY29tZXMgdGhlIG1haW4gcmVmZXJlbmNlIG9mIHRoZSBtb2RlbHNcbiAgICAgIDogbm9kZUxvZztcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBtb2RlbENvdW50ID0gKGJsYW5rTm9kZUxvZ3M6IElCbGFua05vZGVMb2dbXSkgPT4gTWF0aC5tYXguYXBwbHkoTWF0aC5tYXgsIFtcbiAgMCxcbiAgLi4uYmxhbmtOb2RlTG9ncy5mbGF0TWFwKHYgPT4gW1xuICAgIHYuY29uZmlnTW9kZWxzLmxlbmd0aCxcbiAgICAuLi4odi5zdWJWYWx1ZXMubWFwKHMgPT4gcy5jb25maWdNb2RlbHM/Lmxlbmd0aCB8fCAwKSksXG4gICAgLi4uKHYua2V5cy5tYXAocyA9PiBzLmNvbmZpZ01vZGVscz8ubGVuZ3RoIHx8IDApKVxuICBdKVxuXSk7XG5cbmV4cG9ydCBjb25zdCBsb2dWYWx1ZUFycmF5ID0gKHZhbHVlOiBzdHJpbmcpOiBhbnlbXSA9PlxuICB2YWx1ZS5pbmNsdWRlcygnOycpID9cbiAgICB2YWx1ZS5zcGxpdCgnOycpLmZsYXRNYXAodiA9PiB7XG4gICAgICBjb25zdCByZXMgPSB2LnNwbGl0KCdfJykubWFwKHZ2ID0+IHZ2LnNwbGl0KCc6JykpO1xuICAgICAgcmV0dXJuIHJlcy5sZW5ndGggPD0gMSA/IHJlcy5mbGF0KCkgOiBPYmplY3QuZnJvbUVudHJpZXMocmVzKTtcbiAgICB9KSA6XG4gICAgbnVsbDtcbiJdfQ==
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1sb2dzLW1vZGVscy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9ub2RlL25vZGUtbG9ncy1tb2RlbHMvbm9kZS1sb2dzLW1vZGVscy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25FLE9BQU8sRUFDSyxrQkFBa0IsRUFDbEIsWUFBWSxFQUFZLFVBQVUsRUFBRSxVQUFVLEVBQ3pELE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFFMUMsT0FBTyxFQUM0RCxVQUFVLEVBQzNFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQy9DLE1BQU0sNkJBQTZCLENBQUM7QUFvQ3JDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFOUMsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFD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LEVBQUUsV0FBQyxPQUFBLENBQUEsTUFBQSxDQUFDLENBQUMsWUFBWSwwQ0FBRSxNQUFNLEtBQUksQ0FBQyxDQUFBLEVBQUEsQ0FBQyxDQUFDO0tBQ2xELENBQUM7Q0FDSCxDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFhLEVBQVMsRUFBRSxDQUNwRCxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUMzQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNKLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNvbXBsZXhpdHkgKi9cbmltcG9ydCB7IGZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0LCB0b0FycmF5LCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBmaWxlVG9FeHQsIFN1cHBvcnRlZEV4dGVuc2lvbnMgfSBmcm9tICdAaGVzdGlhLWVhcnRoL2FwaSc7XG5pbXBvcnQge1xuICBFbWlzc2lvbiwgRW1pc3Npb25NZXRob2RUaWVyLCBJVGVybUpTT05MRCwgUHJvZHVjdCwgSW5wdXQgYXMgSGVzdGlhSW5wdXQsXG4gIE5vZGVUeXBlLCBUZXJtVGVybVR5cGUsIFByb3BlcnR5LCBTY2hlbWFUeXBlLCBpc1R5cGVOb2RlLCBJbmRpY2F0b3Jcbn0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgdW5pcXVlLCBpc1VuZGVmaW5lZCwgaXNFbXB0eSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMnO1xuaW1wb3J0IHsgcHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvdXRpbHMvZGlzdC90ZXJtJztcbmNvbnN0IGdldCA9IHJlcXVpcmUoJ2xvZGFzaC5nZXQnKTtcbmNvbnN0IHNldCA9IHJlcXVpcmUoJ2xvZGFzaC5zZXQnKTtcbmNvbnN0IG9yZGVyQnkgPSByZXF1aXJlKCdsb2Rhc2gub3JkZXJieScpO1xuXG5pbXBvcnQge1xuICBJT3JjaGVzdHJhdG9yQ29uZmlnLCBJT3JjaGVzdHJhdG9yTW9kZWxDb25maWcsIGZpbmRDb25maWdNb2RlbHMsIGZpbmRNb2RlbHMsIElNb2RlbCxcbiAgZmluZE1hdGNoaW5nTW9kZWwsIG1vZGVsUGFyYW1zLCBtb2RlbEtleVBhcmFtc1xufSBmcm9tICcuLi8uLi9lbmdpbmUvZW5naW5lLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlTWlzc2luZ0xvb2t1cExvZyB7XG4gIGZpbGVuYW1lOiBzdHJpbmc7XG4gIHRlcm1JZDogc3RyaW5nO1xuICBjb2x1bW46IHN0cmluZztcbiAgLy8gYXR0cmlidXRlcyBsaW5rZWQgdG8gdGhlIG1vZGVsc1xuICBtb2RlbD86IHN0cmluZztcbiAgdGVybT86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlVGVybUxvZyB7XG4gIHJ1blJlcXVpcmVkPzogYm9vbGVhbjtcbiAgc2hvdWxkUnVuPzogYm9vbGVhbjtcbiAgc2hvdWxkUnVuT3JjaGVzdHJhdG9yPzogYm9vbGVhbjtcbiAgbWlzc2luZ0xvb2t1cHM/OiBJTm9kZU1pc3NpbmdMb29rdXBMb2dbXTtcbiAgcmVxdWlyZW1lbnRzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgbG9ncz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgLy8gcG9zc2libGUgc3ViIHZhbHVlc1xuICBpbnB1dD86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwcm9wZXJ0eT86IHN0cmluZyB8IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlVGVybUxvZ3Mge1xuICBbbW9kZWxLZXk6IHN0cmluZ106IGFueSB8IElOb2RlVGVybUxvZztcbiAgbW9kZWxzOiBzdHJpbmdbXTtcbiAgaXNLZXk/OiBib29sZWFuO1xuICBpc1Byb3BlcnR5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTm9kZUxvZ3Mge1xuICBbdGVybTogc3RyaW5nXTogSU5vZGVUZXJtTG9ncztcbn1cblxuY29uc3QgdGVybVR5cGVzID0gT2JqZWN0LnZhbHVlcyhUZXJtVGVybVR5cGUpO1xuXG5jb25zdCBibGFua05vZGVUeXBlcyA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkuZmlsdGVyKHQgPT4gIWlzVHlwZU5vZGUodCkpO1xuXG5jb25zdCBzY2hlbWFUeXBlc0xvd2VyQ2FzZSA9IE9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkubWFwKHYgPT4gdi50b0xvd2VyQ2FzZSgpKTtcblxuY29uc3QgYmxhbmtOb2RlVHlwZXNMb3dlckNhc2UgPSBibGFua05vZGVUeXBlcy5tYXAodiA9PiB2LnRvTG93ZXJDYXNlKCkpO1xuXG5jb25zdCBtaXNzaW5nTG9va3VwUHJlZml4ID0gJ01pc3NpbmcgbG9va3VwJztcblxuY29uc3QgcGFyc2VGaWxlbmFtZSA9IChmaWxlcGF0aDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IFtmaWxlbmFtZV0gPSBmaWxlcGF0aC5zcGxpdCgnLicpO1xuICBjb25zdCBleHQgPSB0ZXJtVHlwZXMuaW5jbHVkZXMoZmlsZW5hbWUgYXMgYW55KSA/IFN1cHBvcnRlZEV4dGVuc2lvbnMueGxzeCA6IFN1cHBvcnRlZEV4dGVuc2lvbnMuY3N2O1xuICByZXR1cm4gZmlsZVRvRXh0KGZpbGVuYW1lLCBleHQpO1xufTtcblxuY29uc3QgcGFyc2VMb29rdXAgPSAoeyBjb2x1bW4sIHRlcm1pZCwgW21pc3NpbmdMb29rdXBQcmVmaXhdOiBtaXNzaW5nTG9va3VwIH0pID0+ICh7XG4gIGZpbGVuYW1lOiBwYXJzZUZpbGVuYW1lKG1pc3NpbmdMb29rdXApLCB0ZXJtSWQ6IHRlcm1pZCwgY29sdW1uXG59KTtcblxuY29uc3QgY3N2VmFsdWUgPSAodmFsdWU6IHN0cmluZykgPT4gKHZhbHVlIHx8ICcnKS5yZXBsYWNlKCdbJywgJycpLnJlcGxhY2UoJ10nLCAnJyk7XG5cbmNvbnN0IHBhcnNlTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShtZXNzYWdlKTtcbiAgICByZXR1cm4gZGF0YS5tZXNzYWdlLnNwbGl0KCcsJykucmVkdWNlKChwcmV2LCBwYXJ0cykgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFydHMuc3BsaXQoJz0nKTtcbiAgICAgIGNvbnN0IHZhbCA9IGNzdlZhbHVlKHZhbHVlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIC4uLihrZXkgJiYgdmFsID8geyBba2V5LnRyaW0oKV06IHZhbCB9IDoge30pXG4gICAgICB9O1xuICAgIH0sIHsgbG9nZ2VyOiBkYXRhLmxvZ2dlciB9KTtcbiAgfVxuICBjYXRjaCAoZXJyKSB7XG4gICAgLy8gbWFrZSBzdXJlIGl0IHdvcmtzIGV2ZW4gaWYgb25lIGxvZyBpcyBtYWxmb3JtZWRcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmNvbnN0IG9taXRMb2dLZXlzID0gKGxvZzogYW55KSA9PlxuICBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMobG9nKS5maWx0ZXIoKFtrZXldKSA9PiAhc2NoZW1hVHlwZXNMb3dlckNhc2UuaW5jbHVkZXMoa2V5KSkpO1xuXG5jb25zdCBpbmNsdWRlQmxhbmtOb2RlcyA9IChsb2dzLCBsb2cpID0+XG4gIE9iamVjdFxuICAgIC5rZXlzKGxvZylcbiAgICAuZmlsdGVyKGtleSA9PiBibGFua05vZGVUeXBlc0xvd2VyQ2FzZS5pbmNsdWRlcyhrZXkpKVxuICAgIC5yZWR1Y2UoKHByZXYsIGtleSkgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBba2V5XTogdW5pcXVlKFtcbiAgICAgICAgLi4uKCh0eXBlb2YgcHJldltrZXldID09PSAnc3RyaW5nJyA/IFtwcmV2W2tleV1dIDogcHJldltrZXldKSB8fCBbXSksXG4gICAgICAgIGxvZ1trZXldXG4gICAgICBdKVxuICAgIH0pLCBsb2dzKTtcblxuY29uc3QgZ3JvdXBMb2cgPSAoZ3JvdXAsIHsgbG9nZ2VyLCB0ZXJtLCBtb2RlbCwga2V5LCBzaG91bGRfcnVuLCBydW5fcmVxdWlyZWQsIHByb3BlcnR5LCAuLi5sb2cgfTogYW55KSA9PiB7XG4gIGNvbnN0IGlzT3JjaGVzdHJhdG9yID0gbG9nZ2VyLmluY2x1ZGVzKCdvcmNoZXN0cmF0b3InKTtcbiAgY29uc3QgaXNLZXkgPSAhaXNPcmNoZXN0cmF0b3IgJiYgISFrZXk7XG4gIGNvbnN0IGlzUHJvcGVydHkgPSAhaXNPcmNoZXN0cmF0b3IgJiYgISFwcm9wZXJ0eTtcbiAgY29uc3QgcGFyZW50TG9nS2V5ID0gW2BbXCIke3Rlcm19XCJdYCwgIWlzT3JjaGVzdHJhdG9yICYmIGtleSB8fCBwcm9wZXJ0eV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4nKTtcbiAgY29uc3QgbG9nTW9kZWxLZXkgPSBbcGFyZW50TG9nS2V5LCBtb2RlbF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy4nKTtcblxuICBzZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0ubW9kZWxzYCwgdW5pcXVlKFtcbiAgICAuLi5nZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0ubW9kZWxzYCwgW10pLFxuICAgIG1vZGVsXG4gIF0pKTtcbiAgc2V0KGdyb3VwLCBgJHtwYXJlbnRMb2dLZXl9LmlzS2V5YCwgaXNLZXkpO1xuICBzZXQoZ3JvdXAsIGAke3BhcmVudExvZ0tleX0uaXNQcm9wZXJ0eWAsIGlzUHJvcGVydHkpO1xuXG4gIGxldCBkYXRhID0gZ2V0KGdyb3VwLCBsb2dNb2RlbEtleSwge30pO1xuXG4gIGRhdGEgPSBpbmNsdWRlQmxhbmtOb2RlcyhkYXRhLCBsb2cpO1xuXG4gIGlmICh0eXBlb2Ygc2hvdWxkX3J1biAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zdCBzaG91bGRSdW4gPSBzaG91bGRfcnVuID09PSAnVHJ1ZSc7XG5cbiAgICBkYXRhID0gaXNPcmNoZXN0cmF0b3IgP1xuICAgICAge1xuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBzaG91bGRSdW5PcmNoZXN0cmF0b3I6IHNob3VsZFJ1blxuICAgICAgfSA6XG4gICAgICB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIC4uLm9taXRMb2dLZXlzKGxvZyksXG4gICAgICAgIHNob3VsZFJ1blxuICAgICAgfTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgcnVuX3JlcXVpcmVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IHJ1blJlcXVpcmVkID0gcnVuX3JlcXVpcmVkID09PSAnVHJ1ZSc7XG5cbiAgICBkYXRhID0gIHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi4ocnVuUmVxdWlyZWQgPyB7fSA6IG9taXRMb2dLZXlzKGxvZykpLCAvLyBubyBuZWVkIHRvIHNhdmUgbG9ncyBpZiB3ZSBuZWVkIHRvIHJ1biB0aGUgbW9kZWxcbiAgICAgIHJ1blJlcXVpcmVkXG4gICAgfTtcbiAgfVxuICBlbHNlIGlmICgncmVxdWlyZW1lbnRzJyBpbiBsb2cpIHtcbiAgICBjb25zdCB7IHJlcXVpcmVtZW50cywgLi4ubG9nRGF0YSB9ID0gbG9nO1xuXG4gICAgZGF0YS5yZXF1aXJlbWVudHMgPSB7XG4gICAgICAuLi4oZGF0YS5yZXF1aXJlbWVudHMgfHwge30pLFxuICAgICAgLi4ubG9nRGF0YVxuICAgIH07XG4gIH1cbiAgZWxzZSBpZiAobWlzc2luZ0xvb2t1cFByZWZpeCBpbiBsb2cpIHtcbiAgICBkYXRhLm1pc3NpbmdMb29rdXBzID0gdW5pcXVlKFtcbiAgICAgIC4uLihkYXRhLm1pc3NpbmdMb29rdXBzIHx8IFtdKSxcbiAgICAgIHBhcnNlTG9va3VwKGxvZylcbiAgICBdKTtcbiAgfVxuICBlbHNlIGlmICghaXNPcmNoZXN0cmF0b3IpIHtcbiAgICBkYXRhLmxvZ3MgPSB7XG4gICAgICAuLi4oZGF0YS5sb2dzIHx8IHt9KSxcbiAgICAgIC4uLm9taXRMb2dLZXlzKGxvZylcbiAgICB9O1xuICB9XG5cbiAgc2V0KGdyb3VwLCBsb2dNb2RlbEtleSwgZGF0YSk7XG4gIHJldHVybiBncm91cDtcbn07XG5cbmNvbnN0IGdyb3VwTG9nU3ViVmFsdWUgPSAoZ3JvdXAsIGxvZywga2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgaWQgPSBsb2dba2V5XTtcbiAgY29uc3QgZGF0YSA9IGdyb3VwTG9nKGdyb3VwW2lkXSB8fCB7fSwgbG9nKTtcbiAgZ3JvdXBbaWRdID0gZGF0YTtcblxuICBpZiAoa2V5ID09PSAndHJhbnNmb3JtYXRpb24nKSB7XG4gICAgLy8gYWRkIHZhbHVlIHRvIHRoZSBzYW1lIHRlcm0vbW9kZWwgb24gcGFyZW50IGdyb3VwXG4gICAgT2JqZWN0LmVudHJpZXMoZ3JvdXBbaWRdKS5tYXAoKFt0ZXJtLCBtb2RlbHNdKSA9PlxuICAgICAgT2JqZWN0LmtleXMobW9kZWxzKS5tYXAobW9kZWwgPT4ge1xuICAgICAgICBpZiAoZ3JvdXA/Llt0ZXJtXT8uW21vZGVsXSkge1xuICAgICAgICAgIGdyb3VwW3Rlcm1dW21vZGVsXVtrZXldID0gdW5pcXVlKFtcbiAgICAgICAgICAgIC4uLihncm91cFt0ZXJtXVttb2RlbF1ba2V5XSB8fCBbXSksXG4gICAgICAgICAgICBpZFxuICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZ3JvdXA7XG59O1xuXG5jb25zdCBzdWJWYWx1ZUtleXMgPSBbXG4gICd0cmFuc2Zvcm1hdGlvbidcbl07XG5cbmV4cG9ydCBjb25zdCBncm91cExvZ3NCeU1vZGVsID0gKGRhdGE6IHN0cmluZyk6IElOb2RlTG9ncyA9PlxuICBkYXRhLnRyaW0oKS5zcGxpdCgnXFxuJylcbiAgICAubWFwKHBhcnNlTWVzc2FnZSlcbiAgICAuZmlsdGVyKHYgPT4gISF2Py50ZXJtICYmIHY/LnRlcm0gIT09ICdOb25lJyAmJiAhIXY/Lm1vZGVsKVxuICAgIC5yZWR1Y2UoKGdyb3VwLCBsb2cpID0+IHtcbiAgICAgIGNvbnN0IHN1YlZhbHVlID0gc3ViVmFsdWVLZXlzLmZpbmQodiA9PiAhIWxvZ1t2XSk7XG4gICAgICByZXR1cm4gc3ViVmFsdWUgP1xuICAgICAgICBzdWJWYWx1ZSA9PT0gJ3RyYW5zZm9ybWF0aW9uJyA/XG4gICAgICAgICAgLy8gZm9yIHRyYW5zZm9ybWF0aW9uLCBkbyBub3QgYWRkIHRvIHRvcC1sZXZlbCBtb2RlbFxuICAgICAgICAgIGdyb3VwTG9nU3ViVmFsdWUoZ3JvdXAsIGxvZywgc3ViVmFsdWUpIDpcbiAgICAgICAgICBncm91cExvZyhncm91cExvZ1N1YlZhbHVlKGdyb3VwLCBsb2csIHN1YlZhbHVlKSwgbG9nKVxuICAgICAgICA6IGdyb3VwTG9nKGdyb3VwLCBsb2cpO1xuICAgIH0sIHt9KTtcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVUZXJtcyA9IChcbiAgb3JpZ2luYWxWYWx1ZXM6IGJsYW5rTm9kZVtdLCByZWNhbGN1bGF0ZWRWYWx1ZXM6IGJsYW5rTm9kZVtdLCB0ZXJtcz86IElUZXJtSlNPTkxEW10sIGZpbHRlclRlcm1UeXBlcz86IFRlcm1UZXJtVHlwZVtdXG4pID0+IGZyb20oXG4gICAgdGVybXM/Lmxlbmd0aCA/XG4gICAgICB0ZXJtcyA6XG4gICAgICBbXG4gICAgICAgIC4uLihvcmlnaW5hbFZhbHVlcyB8fCBbXSkubWFwKCh7IHRlcm0gfSkgPT4gdGVybSksXG4gICAgICAgIC4uLihyZWNhbGN1bGF0ZWRWYWx1ZXMgfHwgW10pLm1hcCgoeyB0ZXJtIH0pID0+IHRlcm0pXG4gICAgICBdLmZpbHRlcihub2RlID0+ICFmaWx0ZXJUZXJtVHlwZXM/Lmxlbmd0aCB8fCBmaWx0ZXJUZXJtVHlwZXMuaW5jbHVkZXMobm9kZS50ZXJtVHlwZSkpXG4gICkucGlwZShcbiAgICBkaXN0aW5jdCh2ID0+IHYhWydAaWQnXSksXG4gICAgdG9BcnJheSgpLFxuICAgIG1hcCh2ID0+IG9yZGVyQnkodiwgWyduYW1lJ10sIFsnYXNjJ10pKVxuICApLnRvUHJvbWlzZSgpO1xuXG5leHBvcnQgdHlwZSBibGFua05vZGUgPSBFbWlzc2lvbiB8IFByb2R1Y3QgfCBIZXN0aWFJbnB1dCB8IFByb3BlcnR5IHwgSW5kaWNhdG9yO1xuXG5leHBvcnQgZW51bSBMb2dTdGF0dXMge1xuICBzdWNjZXNzID0gJ3N1Y2Nlc3NmdWwnLFxuICBlcnJvciA9ICdmYWlsZWQnLFxuICBza2lwSGllcmFyY2h5ID0gJ25vdCBydW4gKG1vZGVsIGhpZ2hlciB1cCBoaWVyYXJjaHkgcnVuIGluc3RlYWQpJyxcbiAgZGF0YVByb3ZpZGVkID0gJ25vdCBydW4gKHVzZXIgcHJvdmlkZWQgZGF0YSByZXRhaW5lZCknLFxuICBub3RSZXF1aXJlZCA9ICdub3QgcmVsZXZhbnQnXG59XG5cbmNvbnN0IGhhc0xvZ3MgPSAobG9ncz86IElOb2RlVGVybUxvZykgPT4gISFsb2dzPy5yZXF1aXJlbWVudHMgfHwgISFsb2dzPy5sb2dzIHx8IGxvZ3M/Lm1pc3NpbmdMb29rdXBzPy5sZW5ndGggPiAwO1xuXG5jb25zdCBoYXNMb2dEZXRhaWxzID0gKHN0YXR1czogTG9nU3RhdHVzLCBsb2dzPzogSU5vZGVUZXJtTG9nKSA9PlxuICBbXG4gICAgTG9nU3RhdHVzLnN1Y2Nlc3MsXG4gICAgTG9nU3RhdHVzLmVycm9yXG4gIF0uaW5jbHVkZXMoc3RhdHVzKSAmJiBoYXNMb2dzKGxvZ3MpO1xuXG5jb25zdCBsb2dTdGF0dXMgPSAoZGF0YTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIHwgSUJsYW5rTm9kZUxvZywgbG9ncz86IElOb2RlVGVybUxvZywgaW5kZXg/OiBudW1iZXIpID0+IHtcbiAgY29uc3Qgd2l0aExvZ3MgPSBoYXNMb2cobG9ncyk7XG4gIGNvbnN0IGlzQ2FsY3VsYXRlZCA9IFtcbiAgICB0eXBlb2YgZGF0YS5vcmlnaW5hbFZhbHVlID09PSAndW5kZWZpbmVkJywgLy8gbm8gb3JpZ2luYWwgdmFsdWVcbiAgICBkYXRhLmlzUmVjYWxjdWxhdGVkIC8vIGlzIHJlY2FsY3VsYXRlZFxuICBdLmV2ZXJ5KEJvb2xlYW4pO1xuICAvLyBjYW4gYmUgbm90IHJlcXVpcmVkIGZvciBhIHNwZWNpZmljIG1vZGVsXG4gIGNvbnN0IGlzUmVxdWlyZWQgPSAhIWxvZ3MgJiYgJ3J1blJlcXVpcmVkJyBpbiBsb2dzID8gbG9ncy5ydW5SZXF1aXJlZCA6IGRhdGEuaXNSZXF1aXJlZDtcbiAgcmV0dXJuIHdpdGhMb2dzXG4gICAgPyAoXG4gICAgICAhaXNSZXF1aXJlZFxuICAgICAgICA/IExvZ1N0YXR1cy5ub3RSZXF1aXJlZFxuICAgICAgICA6IGlzUnVuT3JjaGVzdHJhdG9yKGxvZ3MpXG4gICAgICAgICAgPyAoXG4gICAgICAgICAgICAnc2hvdWxkUnVuJyBpbiBsb2dzXG4gICAgICAgICAgICAgID8gbG9ncy5zaG91bGRSdW5cbiAgICAgICAgICAgICAgICA/IGRhdGEuaXNSZWNhbGN1bGF0ZWRcbiAgICAgICAgICAgICAgICAgID8gTG9nU3RhdHVzLnN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICAgICAgICAgICAgIDogZGF0YS5pc1JlY2FsY3VsYXRlZCAmJiBpbmRleCA+IDBcbiAgICAgICAgICAgICAgICAgID8gTG9nU3RhdHVzLnNraXBIaWVyYXJjaHlcbiAgICAgICAgICAgICAgICAgIDogTG9nU3RhdHVzLmVycm9yXG4gICAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICAgICAgIClcbiAgICAgICAgICA6IGRhdGEuaXNSZWNhbGN1bGF0ZWRcbiAgICAgICAgICAgID8gTG9nU3RhdHVzLnNraXBIaWVyYXJjaHlcbiAgICAgICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgIClcbiAgICA6IChcbiAgICAgIGlzQ2FsY3VsYXRlZFxuICAgICAgICA/IExvZ1N0YXR1cy5za2lwSGllcmFyY2h5XG4gICAgICAgIDogTG9nU3RhdHVzLmRhdGFQcm92aWRlZFxuICAgICk7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElDb25maWdNb2RlbCB7XG4gIG1ldGhvZElkOiBzdHJpbmc7XG4gIGxvZ3M/OiBJTm9kZVRlcm1Mb2c7XG4gIHNob3dMb2dzPzogYm9vbGVhbjtcbiAgc3RhdHVzPzogTG9nU3RhdHVzO1xuICBtb2RlbD86IElNb2RlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmxhbmtOb2RlTG9nU3ViVmFsdWUge1xuICBrZXk6IHN0cmluZztcbiAgb3JpZ2luYWxWYWx1ZTogbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbiAgcmVjYWxjdWxhdGVkVmFsdWU6IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW47XG4gIGlzUmVjYWxjdWxhdGVkOiBib29sZWFuO1xuICBpc1JlcXVpcmVkPzogYm9vbGVhbjtcbiAgaWQ/OiBhbnk7XG4gIGNvbmZpZ01vZGVscz86IElDb25maWdNb2RlbFtdO1xuICBsb2dzPzogSU5vZGVUZXJtTG9ncztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQmxhbmtOb2RlTG9nIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBjYW5PcGVuOiBib29sZWFuO1xuICB0ZXJtOiBJVGVybUpTT05MRDtcbiAgdGVybUlkOiBzdHJpbmc7XG4gIHR5cGU/OiBTY2hlbWFUeXBlO1xuICBjb25maWdNb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXTtcbiAgb3JpZ2luYWw6IGJsYW5rTm9kZVtdO1xuICBvcmlnaW5hbFZhbHVlOiBudW1iZXI7XG4gIC8vIHdoZW4gbXVsdGlwbGUgbW9kZWxzIGFyZSBydW5uaW5nIGluIHBhcmFsbGVsXG4gIG9yaWdpbmFsVmFsdWVCeU1ldGhvZElkPzoge1xuICAgIFttZXRob2RJZDogc3RyaW5nXTogbnVtYmVyO1xuICB9O1xuICByZWNhbGN1bGF0ZWQ6IGJsYW5rTm9kZVtdO1xuICByZWNhbGN1bGF0ZWRWYWx1ZTogbnVtYmVyO1xuICAvLyB3aGVuIG11bHRpcGxlIG1vZGVscyBhcmUgcnVubmluZyBpbiBwYXJhbGxlbFxuICByZWNhbGN1bGF0ZWRWYWx1ZUJ5TWV0aG9kSWQ/OiB7XG4gICAgW21ldGhvZElkOiBzdHJpbmddOiBudW1iZXI7XG4gIH07XG4gIGlzT3JpZ2luYWw6IGJvb2xlYW47XG4gIGlzUmVjYWxjdWxhdGVkOiBib29sZWFuO1xuICBoYXNEYXRhOiBib29sZWFuO1xuICBpc1JlcXVpcmVkOiBib29sZWFuO1xuICBsb2dzPzogSU5vZGVUZXJtTG9ncztcbiAga2V5czogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW107XG4gIHN1YlZhbHVlczogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW107XG4gIC8vIG1vZGVscyBhcmUgcHJlc2VudCBhcyB3ZWxsIGluIG9uZSBvZiB0aGUgU3ViVmFsdWVzLCBkbyBub3Qgc2hvdyB0d2ljZVxuICBtb2RlbHNJblN1YlZhbHVlcz86IGJvb2xlYW47XG4gIC8vIGNvbnRhaW5zIG11bHRpcGxlIG1vZGVscyBhbGwgcnVubmluZyBpbiBwYXJhbGxlbFxuICBhbGxQYXJhbGxlbD86IGJvb2xlYW47XG59XG5cbmNvbnN0IG1lcmdlU3ViVmFsdWVzID0gKHZhbHVlczogYW55W10pOiBhbnlbXSA9PlxuICBPYmplY3QudmFsdWVzKFxuICAgIHZhbHVlcy5yZWR1Y2UoKHByZXYsIHsgaWQsIGtleSwgY29uZmlnTW9kZWxzIH0pID0+IHtcbiAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IFtrZXksIGlkXS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuICAgICAgcHJldlt1bmlxdWVLZXldID0ge1xuICAgICAgICBpZCwga2V5LCBjb25maWdNb2RlbHM6IFsuLi4oKHByZXZbdW5pcXVlS2V5XSB8fCB7fSkuY29uZmlnTW9kZWxzIHx8IFtdKSwgLi4uKGNvbmZpZ01vZGVscyB8fCBbXSldXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHByZXY7XG4gICAgfSwge30pXG4gICk7XG5cbmNvbnN0IHJlZHVjZVZhbHVlcyA9ICh2YWx1ZXM6IGFueVtdLCB0ZXJtSWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBwcm9wZXJ0eVZhbHVlcyA9IHZhbHVlc1xuICAgIC5tYXAoKHsgdmFsdWUgfSkgPT4gcHJvcGVydHlWYWx1ZSh2YWx1ZSwgdGVybUlkKSlcbiAgICAvLyBwcm9wZXJ0eVZhbHVlIG1heSByZXR1cm4gbnVsbCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZXJlZm9yZSByZW1vdmUgdGhlbSBmcm9tIHRvdGFsXG4gICAgLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xuICByZXR1cm4gcHJvcGVydHlWYWx1ZXMubGVuZ3RoID8gcHJvcGVydHlWYWx1ZXMucmVkdWNlKChwLCB2KSA9PiBwICsgdiwgMCkgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBpc1J1bk9yY2hlc3RyYXRvciA9IChsb2c6IElOb2RlVGVybUxvZykgPT4gISgnc2hvdWxkUnVuT3JjaGVzdHJhdG9yJyBpbiBsb2cpIHx8IGxvZy5zaG91bGRSdW5PcmNoZXN0cmF0b3I7XG5cbmNvbnN0IGhhc0xvZyA9IChsb2c6IElOb2RlVGVybUxvZywgd2l0aE9yY2hlc3RyYXRvciA9IHRydWUpID0+XG4gICEhbG9nICYmIChcbiAgICAnc2hvdWxkUnVuJyBpbiBsb2cgfHxcbiAgICAncnVuUmVxdWlyZWQnIGluIGxvZyB8fFxuICAgICh3aXRoT3JjaGVzdHJhdG9yICYmICdzaG91bGRSdW5PcmNoZXN0cmF0b3InIGluIGxvZylcbiAgKTtcblxuY29uc3QgaXNSZWNhbGN1bGF0ZWQgPSAodmFsdWVzOiBibGFua05vZGVbXSwga2V5ID0gJ3ZhbHVlJykgPT4gdmFsdWVzLnNvbWUodiA9PiAoW1xuICAuLi4odi5hZGRlZCB8fCBbXSksXG4gIC4uLih2LnVwZGF0ZWQgfHwgW10pXG5dKS5pbmNsdWRlcyhrZXkpKTtcblxuY29uc3QgYmxhbmtOb2RlVmFsdWVCeUtleToge1xuICBba2V5OiBzdHJpbmddOiAodmFsdWVzOiBibGFua05vZGVbXSwga2V5Pzogc3RyaW5nLCBpZD86IHN0cmluZykgPT4gbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbjtcbn0gPSB7XG4gIHByb3BlcnR5OiAodmFsdWVzOiAoRW1pc3Npb24gfCBQcm9kdWN0IHwgSGVzdGlhSW5wdXQpW10sIF9rLCBpZCkgPT4gISFpZCAmJiB2YWx1ZXM/Lmxlbmd0aFxuICAgID8gKHZhbHVlc1swXS5wcm9wZXJ0aWVzIHx8IFtdKS5maW5kKHAgPT4gcC50ZXJtWydAaWQnXSA9PT0gaWQpPy52YWx1ZSB8fCAnJ1xuICAgIDogJycsXG4gIGlucHV0OiAodmFsdWVzOiBFbWlzc2lvbltdLCBfaywgaWQpID0+ICEhaWQgJiYgdmFsdWVzPy5sZW5ndGhcbiAgICA/IHByb3BlcnR5VmFsdWUodmFsdWVzLmZpbmQoKHsgaW5wdXRzIH0pID0+IChpbnB1dHMgfHwgW10pLnNvbWUoaW5wdXQgPT4gaW5wdXRbJ0BpZCddID09PSBpZCkpPy52YWx1ZSwgaWQpXG4gICAgOiAnJyxcbiAgdHJhbnNmb3JtYXRpb246ICh2YWx1ZXM6IEVtaXNzaW9uW10sIF9rLCBpZCkgPT4gdmFsdWVzLmxlbmd0aFxuICAgID8gcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCgoeyB0cmFuc2Zvcm1hdGlvbiB9KSA9PiB0cmFuc2Zvcm1hdGlvbj8uWydAaWQnXSA9PT0gaWQpPy52YWx1ZSwgaWQpXG4gICAgOiAnJyxcbiAgZGVmYXVsdDogKGJsYW5rTm9kZXMsIGtleSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gYmxhbmtOb2Rlcz8ubGVuZ3RoID8gYmxhbmtOb2Rlc1swXVtrZXldIDogbnVsbDtcbiAgICByZXR1cm4gWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAndW5kZWZpbmVkJ10uaW5jbHVkZXModHlwZW9mIHZhbHVlKVxuICAgICAgPyBpc1VuZGVmaW5lZCh2YWx1ZSlcbiAgICAgID8gJydcbiAgICAgIDogdmFsdWVcbiAgICAgIDogbnVsbDtcbiAgfVxufTtcblxuY29uc3QgYmxhbmtOb2RlVmFsdWUgPSAoYmxhbmtOb2RlczogYmxhbmtOb2RlW10sIGtleTogc3RyaW5nLCBpZD86IHN0cmluZykgPT5cbiAgYmxhbmtOb2RlVmFsdWVCeUtleVtrZXkgaW4gYmxhbmtOb2RlVmFsdWVCeUtleSA/IGtleSA6ICdkZWZhdWx0J10oYmxhbmtOb2Rlcywga2V5LCBpZCk7XG5cbmNvbnN0IHN1YlZhbHVlTG9nS2V5ID0gKHsga2V5LCBpZCB9OiBJQmxhbmtOb2RlTG9nU3ViVmFsdWUpOiBzdHJpbmcgPT5cbiAga2V5ID09PSAndHJhbnNmb3JtYXRpb24nID8ga2V5IDogKGlkIHx8IGtleSB8fCBudWxsKTtcblxuY29uc3QgbG9nU3ViVmFsdWUgPSAobG9nczogSU5vZGVUZXJtTG9ncywga2V5OiBzdHJpbmcsIHByb3A6IHN0cmluZykgPT5cbiAgbG9nc1trZXldW3Byb3BdID8gKFxuICAgIEFycmF5LmlzQXJyYXkobG9nc1trZXldW3Byb3BdKSA/XG4gICAgICAobG9nc1trZXldW3Byb3BdIGFzIHN0cmluZ1tdKS5tYXAoaWQgPT4gKHsga2V5OiBwcm9wLCBpZCB9IGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSkpIDpcbiAgICAgIHsga2V5OiBwcm9wLCBpZDogbG9nc1trZXldW3Byb3BdIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlXG4gICkgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IGxvZ1Byb3BlcnRpZXMgPSAobm9kZXM6IGJsYW5rTm9kZVtdLCBtb2RlbHM6IElNb2RlbFtdKSA9PlxuICBub2Rlcy5mbGF0TWFwKG5vZGUgPT5cbiAgICAoKG5vZGUgYXMgYW55KS5wcm9wZXJ0aWVzIHx8IFtdKS5tYXAoKHsgdGVybSB9KSA9PiB0ZXJtWydAaWQnXSlcbiAgKS5tYXAoaWQgPT4gKHsga2V5OiAncHJvcGVydHknLCBpZCwgY29uZmlnTW9kZWxzOiBmaW5kTW9kZWxzKG1vZGVscywgaWQpLm1hcCgoeyBtb2RlbCB9KSA9PiBtb2RlbCkgfSkpO1xuXG4vKipcbiAqIEluY2x1ZGUgdHJhbnNmb3JtYXRpb24gbW9kZWwgKGNvcHkgRW1pc3Npb25zIGZyb20gVHJhbnNmb3JtYXRpb24gdG8gQ3ljbGUpIGFzIHN1YlZhbHVlLlxuICpcbiAqIEBwYXJhbSBlbWlzc2lvbnNcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGxvZ0VtaXNzaW9uVHJhbnNmb3JtYXRpb25zID0gKGVtaXNzaW9uczogRW1pc3Npb25bXSkgPT5cbiAgZW1pc3Npb25zLmZpbHRlcigoeyB0cmFuc2Zvcm1hdGlvbiB9KSA9PiAhIXRyYW5zZm9ybWF0aW9uPy5bJ0BpZCddKS5tYXAoKHsgdHJhbnNmb3JtYXRpb24gfSkgPT4gKHtcbiAgICBpZDogdHJhbnNmb3JtYXRpb24/LlsnQGlkJ10sXG4gICAga2V5OiAndHJhbnNmb3JtYXRpb24nLFxuICAgIGNvbmZpZ01vZGVsczogWydjeWNsZS90cmFuc2Zvcm1hdGlvbiddXG4gIH0pKTtcblxuY29uc3QgaW5jbHVkZUN5Y2xlU3ViVmFsdWUgPSAoc3ViVmFsdWVzOiBJQmxhbmtOb2RlTG9nU3ViVmFsdWVbXSkgPT5cbiAgc3ViVmFsdWVzLnNvbWUodiA9PiB2LmtleSAhPT0gJ3Byb3BlcnR5Jyk7XG5cbmNvbnN0IGN5Y2xlU3ViVmFsdWUgPSAoe1xuICB0ZXJtSWQsIGNvbmZpZ01vZGVscywgaXNSZXF1aXJlZCwgc3ViVmFsdWVzLCBvcmlnaW5hbCwgcmVjYWxjdWxhdGVkXG59OiBJQmxhbmtOb2RlTG9nKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsVmFsdWUgPSByZWR1Y2VWYWx1ZXMob3JpZ2luYWwuZmlsdGVyKCh2OiBhbnkpID0+ICF2LmlucHV0cz8ubGVuZ3RoICYmICF2LnRyYW5zZm9ybWF0aW9uKSwgdGVybUlkKTtcbiAgY29uc3QgcmVjYWxjdWxhdGVkVmFsdWVzID0gcmVjYWxjdWxhdGVkLmZpbHRlcigodjogYW55KSA9PiAhdi5pbnB1dHM/Lmxlbmd0aCAmJiAhdi50cmFuc2Zvcm1hdGlvbik7XG4gIGNvbnN0IHJlY2FsY3VsYXRlZFZhbHVlID0gcmVkdWNlVmFsdWVzKHJlY2FsY3VsYXRlZFZhbHVlcywgdGVybUlkKTtcbiAgcmV0dXJuIGluY2x1ZGVDeWNsZVN1YlZhbHVlKHN1YlZhbHVlcykgJiYgIWlzRW1wdHkocmVjYWxjdWxhdGVkVmFsdWUpID8ge1xuICAgIGtleTogJ2N5Y2xlJyxcbiAgICBjb25maWdNb2RlbHMsXG4gICAgaXNSZXF1aXJlZCxcbiAgICBvcmlnaW5hbFZhbHVlLFxuICAgIHJlY2FsY3VsYXRlZFZhbHVlLFxuICAgIGlzUmVjYWxjdWxhdGVkOiBpc1JlY2FsY3VsYXRlZChyZWNhbGN1bGF0ZWRWYWx1ZXMpXG4gIH0gYXMgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlIDogbnVsbDtcbn07XG5cbmNvbnN0IGxvZ1N1YlZhbHVlcyA9IChcbiAgYWxsTG9nczogSU5vZGVMb2dzLCBsb2dzOiBJTm9kZVRlcm1Mb2dzLCBvcmlnaW5hbDogYmxhbmtOb2RlW10sIHJlY2FsY3VsYXRlZDogYmxhbmtOb2RlW10sIG1vZGVsczogSU1vZGVsW10sXG4gIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9OiBJQ29uZmlnTW9kZWxEb2NzRGF0YVxuKTogSUJsYW5rTm9kZUxvZ1N1YlZhbHVlW10gPT5cbiAgbWVyZ2VTdWJWYWx1ZXMoW1xuICAgIC8vIGluY2x1ZGUgcHJvcGVydGllc1xuICAgIC4uLk9iamVjdC5rZXlzKGxvZ3MpXG4gICAgICAuZmlsdGVyKGlkID0+IGxvZ3NbaWRdLmlzUHJvcGVydHkpXG4gICAgICAubWFwKGlkID0+ICh7XG4gICAgICAgIGlkLFxuICAgICAgICBrZXk6ICdwcm9wZXJ0eScsXG4gICAgICAgIGNvbmZpZ01vZGVsczogKGxvZ3NbaWRdLm1vZGVscyB8fCBbXSkuZmlsdGVyKHYgPT4gaGFzTG9nKGxvZ3NbaWRdW3ZdKSlcbiAgICAgIH0pKSxcbiAgICAuLi4odHlwZSA9PT0gU2NoZW1hVHlwZS5FbWlzc2lvbiA/IGxvZ0VtaXNzaW9uVHJhbnNmb3JtYXRpb25zKHJlY2FsY3VsYXRlZCBhcyBFbWlzc2lvbltdKSA6IFtdKSxcbiAgICAuLi5PYmplY3Qua2V5cyhsb2dzKS5mbGF0TWFwKGtleSA9PlxuICAgICAgW1xuICAgICAgICBsb2dTdWJWYWx1ZShsb2dzLCBrZXksICdpbnB1dCcpLFxuICAgICAgICBsb2dTdWJWYWx1ZShsb2dzLCBrZXksICdwcm9wZXJ0eScpXG4gICAgICBdXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAubWFwKHYgPT4gKHsgLi4udiwgY29uZmlnTW9kZWxzOiAodi5jb25maWdNb2RlbHMgYXMgYW55W10pIHx8IFtrZXldIH0pKVxuICAgICksXG4gICAgLi4ubG9nUHJvcGVydGllcyhvcmlnaW5hbCwgbW9kZWxzKSxcbiAgICAuLi5sb2dQcm9wZXJ0aWVzKHJlY2FsY3VsYXRlZCwgbW9kZWxzKVxuICBdKVxuICAgIC5tYXAoKHsga2V5LCBpZCwgY29uZmlnTW9kZWxzLCBvcmlnaW5hbFZhbHVlLCByZWNhbGN1bGF0ZWRWYWx1ZSB9KSA9PiB7XG4gICAgICBvcmlnaW5hbFZhbHVlID0gb3JpZ2luYWxWYWx1ZSB8fCBibGFua05vZGVWYWx1ZShvcmlnaW5hbCwga2V5LCBpZCk7XG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZSA9IHJlY2FsY3VsYXRlZFZhbHVlIHx8IGJsYW5rTm9kZVZhbHVlKHJlY2FsY3VsYXRlZCwga2V5LCBpZCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIGlkLFxuICAgICAgICBjb25maWdNb2RlbHM6IGNvbmZpZ01vZGVscy5tYXAoY29uZmlnTW9kZWxXaXRoRG9jcyhtb2RlbHMsIHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCB9LCB7IGtleSwgaWQgfSBhcyBhbnkpKSxcbiAgICAgICAgb3JpZ2luYWxWYWx1ZSxcbiAgICAgICAgcmVjYWxjdWxhdGVkVmFsdWUsXG4gICAgICAgIGlzUmVjYWxjdWxhdGVkOiAhaXNVbmRlZmluZWQocmVjYWxjdWxhdGVkVmFsdWUpICYmIHJlY2FsY3VsYXRlZFZhbHVlICE9PSBvcmlnaW5hbFZhbHVlLFxuICAgICAgICBpc1JlcXVpcmVkOiB0cnVlXG4gICAgICB9O1xuICAgIH0pXG4gICAgLmZpbHRlcih2ID0+IHYuY29uZmlnTW9kZWxzLmxlbmd0aCA+IDApXG4gICAgLm1hcCh2ID0+IHYua2V5ID09PSAnaW5wdXQnID8gZGF0YVdpdGhDb25maWdNb2RlbExvZ3MoYWxsTG9ncykodikgOiBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyhsb2dzKSh2KSk7XG5cbmNvbnN0IGxvZ0tleXMgPSAoXG4gIGxvZ3M6IElOb2RlVGVybUxvZ3MsIG9yaWdpbmFsOiBibGFua05vZGVbXSwgcmVjYWxjdWxhdGVkOiBibGFua05vZGVbXSwgbW9kZWxzOiBJTW9kZWxbXSwgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH1cbik6IElCbGFua05vZGVMb2dTdWJWYWx1ZVtdID0+XG4gIE9iamVjdC5rZXlzKGxvZ3MpXG4gICAgLmZpbHRlcihrZXkgPT4gbG9nc1trZXldLmlzS2V5ICYmIGtleSAhPT0gJ3RyYW5zZm9ybWF0aW9uJylcbiAgICAubWFwKGtleSA9PiAoe1xuICAgICAga2V5LFxuICAgICAgY29uZmlnTW9kZWxzOiAobG9nc1trZXldLm1vZGVscyB8fCBbXSlcbiAgICAgICAgLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgeyBub2RlVHlwZSwgdHlwZSwgdGVybUlkIH0sIHsga2V5IH0gYXMgYW55KSlcbiAgICAgICAgLy8gb25seSB0YWtlIHRob3NlIHdlIGZvdW5kIGEgbWF0Y2hpbmcgbW9kZWwgKGF2b2lkIG1hdGNoaW5nIGtleSBvbiB3cm9uZyBub2RlIHR5cGUpXG4gICAgICAgIC5maWx0ZXIodiA9PiAhIXYubW9kZWwpLFxuICAgICAgb3JpZ2luYWxWYWx1ZTogYmxhbmtOb2RlVmFsdWUob3JpZ2luYWwsIGtleSksXG4gICAgICByZWNhbGN1bGF0ZWRWYWx1ZTogYmxhbmtOb2RlVmFsdWUocmVjYWxjdWxhdGVkLCBrZXkpLFxuICAgICAgaXNSZWNhbGN1bGF0ZWQ6IGlzUmVjYWxjdWxhdGVkKHJlY2FsY3VsYXRlZCwga2V5KSxcbiAgICAgIGlzUmVxdWlyZWQ6IHRydWVcbiAgICB9KSlcbiAgICAuZmlsdGVyKHYgPT4gdi5jb25maWdNb2RlbHMubGVuZ3RoID4gMClcbiAgICAubWFwKGRhdGFXaXRoQ29uZmlnTW9kZWxMb2dzKGxvZ3MpKTtcblxuY29uc3QgaXNCYWNrZ3JvdW5kTm9JbnB1dCA9IChsb2dzOiBJTm9kZVRlcm1Mb2cpID0+IGxvZ3MubWV0aG9kVGllciA9PT0gRW1pc3Npb25NZXRob2RUaWVyLmJhY2tncm91bmQgJiYgIWxvZ3MuaW5wdXQ7XG5cbmNvbnN0IGlzTW9kZWxMb2cgPSAobG9nczogSU5vZGVUZXJtTG9nKSA9PlxuICBbXG4gICAgIWlzQmFja2dyb3VuZE5vSW5wdXQobG9ncyksXG4gICAgIWxvZ3MuaXNLZXksXG4gICAgIWxvZ3MuaW5wdXQsXG4gICAgIWxvZ3MucHJvcGVydHlcbiAgXS5ldmVyeShCb29sZWFuKSAmJiBbXG4gICAgJ3Nob3VsZFJ1bicgaW4gbG9ncyxcbiAgICAnc2hvdWxkUnVuT3JjaGVzdHJhdG9yJyBpbiBsb2dzLFxuICAgICdydW5SZXF1aXJlZCcgaW4gbG9nc1xuICBdLnNvbWUoQm9vbGVhbik7XG5cbmNvbnN0IG1vZGVsQ29uZmlnT3JkZXIgPSAoXG4gIG1vZGVsczogKElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZyB8IElPcmNoZXN0cmF0b3JNb2RlbENvbmZpZ1tdKVtdLCB0ZXJtSWQ6IHN0cmluZywgbW9kZWxLZXk6IHN0cmluZywgbW9kZWw6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgaW5kZXhlcyA9IG1vZGVscy5tYXAoKG0sIGluZGV4KSA9PiB7XG4gICAgY29uc3QgYXJyYXlJbmRleCA9IEFycmF5LmlzQXJyYXkobSkgPyBtb2RlbENvbmZpZ09yZGVyKG0sIHRlcm1JZCwgbW9kZWxLZXksIG1vZGVsKSA6ICcnO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG0pXG4gICAgICA/IGFycmF5SW5kZXhcbiAgICAgICAgPyBbaW5kZXgsIGFycmF5SW5kZXhdLmpvaW4oJy4nKVxuICAgICAgICA6ICcnXG4gICAgICA6IFt0ZXJtSWQgPT09IG0udmFsdWUsIG1vZGVsS2V5ID09PSBtLmtleSwgbW9kZWwgPT09IG0ubW9kZWxdLmV2ZXJ5KEJvb2xlYW4pXG4gICAgICAgID8gYCR7aW5kZXh9YFxuICAgICAgICA6ICcnO1xuICB9KS5maWx0ZXIoQm9vbGVhbik7XG4gIHJldHVybiBpbmRleGVzLmxlbmd0aCA/IGluZGV4ZXNbMF0gOiAnJztcbn07XG5cbmludGVyZmFjZSBJQ29uZmlnTW9kZWxEb2NzRGF0YSB7XG4gIG5vZGVUeXBlOiBOb2RlVHlwZTtcbiAgdHlwZTogU2NoZW1hVHlwZTtcbiAgdGVybUlkOiBzdHJpbmc7XG4gIHRlcm1UeXBlPzogVGVybVRlcm1UeXBlO1xufVxuXG5jb25zdCBjb25maWdNb2RlbFdpdGhEb2NzID0gKFxuICBtb2RlbHM6IElNb2RlbFtdLCB7IG5vZGVUeXBlLCB0eXBlLCB0ZXJtSWQsIHRlcm1UeXBlIH06IElDb25maWdNb2RlbERvY3NEYXRhLCBzdWJWYWx1ZT86IElCbGFua05vZGVMb2dTdWJWYWx1ZVxuKSA9PiAobWV0aG9kSWQ6IHN0cmluZykgPT4ge1xuICBjb25zdCBub2RlID0ge1xuICAgICdAdHlwZSc6IG5vZGVUeXBlLFxuICAgIHRlcm06IHsgJ0BpZCc6IHN1YlZhbHVlPy5pZCB8fCB0ZXJtSWQgfSxcbiAgICBtZXRob2RNb2RlbDogeyAnQGlkJzogbWV0aG9kSWQgfVxuICB9IGFzIGFueTtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2RJZCxcbiAgICBtb2RlbDogZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbFBhcmFtcyhub2RlKSkgfHxcbiAgICAgIC8vIGhhbmRsZSBcImxpdmVBbmltYWxcIlxuICAgICAgKHRlcm1UeXBlICYmIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgdGVybVR5cGUpKSkgfHxcbiAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7c3ViVmFsdWU/LmtleX0uJHttZXRob2RJZH1gKSkgfHxcbiAgICAgIC8vIGhhbmRsZSBcImlucHV0LnByaWNlXCJcbiAgICAgIGZpbmRNYXRjaGluZ01vZGVsKG1vZGVscywgbW9kZWxLZXlQYXJhbXMobm9kZSwgYCR7dHlwZT8udG9Mb3dlckNhc2UoKX0uJHtzdWJWYWx1ZT8ua2V5fWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwiaW5wdXQuaGVzdGlhQWdncmVnYXRlZERhdGFcIlxuICAgICAgZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCBtb2RlbEtleVBhcmFtcyhub2RlLCBgJHt0eXBlPy50b0xvd2VyQ2FzZSgpfS4ke21ldGhvZElkfWApKSB8fFxuICAgICAgLy8gaGFuZGxlIFwidHJhbnNmb3JtYXRpb25cIlxuICAgICAgKHN1YlZhbHVlPy5rZXkgPyBmaW5kTWF0Y2hpbmdNb2RlbChtb2RlbHMsIG1vZGVsS2V5UGFyYW1zKG5vZGUsIHN1YlZhbHVlPy5rZXkpKSA6IHVuZGVmaW5lZCkgfHxcbiAgICAgIC8vIGhhbmRsZSBcInRyYW5zZm9ybWF0aW9uL2V4Y3JldGFcIiBhbmQgb3RoZXIgbW9kZWxzIHdpdGggXCIvXCJcbiAgICAgIChtZXRob2RJZC5pbmNsdWRlcygnLycpID8gZmluZE1hdGNoaW5nTW9kZWwobW9kZWxzLCB7IG1vZGVsOiBtZXRob2RJZC5zcGxpdCgnLycpWzBdLCBtb2RlbEtleTogbWV0aG9kSWQuc3BsaXQoJy8nKVsxXSB9KSA6IHVuZGVmaW5lZClcbiAgfTtcbn07XG5cbmNvbnN0IGNvbmZpZ01vZGVsV2l0aExvZ3MgPSAoZGF0YTogSUJsYW5rTm9kZUxvZyB8IElCbGFua05vZGVMb2dTdWJWYWx1ZSwgbG9nczogSU5vZGVUZXJtTG9ncykgPT4gKFxuICBtb2RlbDogSUNvbmZpZ01vZGVsLCBpbmRleCA9IDBcbikgPT4ge1xuICBjb25zdCBzdGF0dXMgPSBsb2dTdGF0dXMoZGF0YSwgbG9ncz8uW21vZGVsLm1ldGhvZElkXSwgaW5kZXgpO1xuICByZXR1cm4ge1xuICAgIC4uLm1vZGVsLFxuICAgIGxvZ3M6IGxvZ3M/Llttb2RlbC5tZXRob2RJZF0sXG4gICAgc3RhdHVzLFxuICAgIHNob3dMb2dzOiBoYXNMb2dEZXRhaWxzKHN0YXR1cywgbG9ncz8uW21vZGVsLm1ldGhvZElkXSlcbiAgfSBhcyBJQ29uZmlnTW9kZWw7XG59O1xuXG5jb25zdCBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyA9IChcbiAgbG9nczogSU5vZGVMb2dzIHwgSU5vZGVUZXJtTG9nc1xuKSA9PiA8VCBleHRlbmRzIChJQmxhbmtOb2RlTG9nIHwgSUJsYW5rTm9kZUxvZ1N1YlZhbHVlKT4oZGF0YTogVCkgPT4ge1xuICBjb25zdCBzdWJMb2dLZXkgPSBzdWJWYWx1ZUxvZ0tleShkYXRhIGFzIElCbGFua05vZGVMb2dTdWJWYWx1ZSk7XG4gIGNvbnN0IGxvZyA9IHN1YkxvZ0tleSA/IGxvZ3Nbc3ViTG9nS2V5XSA6IGxvZ3M7XG4gIHJldHVybiB7XG4gICAgLi4uZGF0YSxcbiAgICBjb25maWdNb2RlbHM6IGRhdGEuY29uZmlnTW9kZWxzLm1hcCgobW9kZWwsIGluZGV4KSA9PlxuICAgICAgQXJyYXkuaXNBcnJheShtb2RlbCkgPyBtb2RlbC5tYXAoY29uZmlnTW9kZWxXaXRoTG9ncyhkYXRhLCBsb2cpKSA6IGNvbmZpZ01vZGVsV2l0aExvZ3MoZGF0YSwgbG9nKShtb2RlbCwgaW5kZXgpXG4gICAgKVxuICB9IGFzIFQ7XG59O1xuXG4vKipcbiAqIEdyb3VwIG1vZGVscyBydW5uaW5nIGluIHBhcmFsbGVsIHVuZGVyIHRoZSBzYW1lIGFycmF5LCBhcyB0aGV5IHNob3VsZCBhcHBlYXIgdmVydGljYWxseS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIG1vZGVscyBUaGUgbGlzdCBvZiBtb2RlbHNcbiAqL1xuY29uc3QgZ3JvdXBQYXJhbGxlbE1vZGVscyA9IChjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsIHRlcm1JZDogc3RyaW5nLCBtb2RlbEtleTogc3RyaW5nLCBtb2RlbHM6IElDb25maWdNb2RlbFtdKSA9PiB7XG4gIGNvbnN0IG1vZGVsc1dpdGhPcmRlciA9IG1vZGVscy5tYXAobW9kZWwgPT4gKHtcbiAgICBtb2RlbCxcbiAgICBvcmRlcjogbW9kZWxDb25maWdPcmRlcihjb25maWcubW9kZWxzLCB0ZXJtSWQsIG1vZGVsS2V5LCBtb2RlbC5tZXRob2RJZClcbiAgfSkpO1xuICByZXR1cm4gbW9kZWxzV2l0aE9yZGVyXG4gICAgLnJlZHVjZSgocHJldiwgeyBtb2RlbCwgb3JkZXIgfSkgPT4ge1xuICAgICAgY29uc3QgaXNBcnJheSA9IG9yZGVyLmluY2x1ZGVzKCcuJyk7XG4gICAgICBjb25zdCBhcnJheUluZGV4ID0gaXNBcnJheSA/IG9yZGVyLnNwbGl0KCcuJylbMF0gOiBwcmV2Lmxlbmd0aDtcbiAgICAgIHByZXZbYXJyYXlJbmRleF0gPSBpc0FycmF5ID8gWy4uLihwcmV2W2FycmF5SW5kZXhdIHx8IFtdKSwgbW9kZWxdIDogbW9kZWw7XG4gICAgICByZXR1cm4gcHJldjtcbiAgICB9LCBbXSBhcyBJQ29uZmlnTW9kZWxbXVtdKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAubWFwKHYgPT4gdi5sZW5ndGggPT09IDEgPyB2WzBdIDogdik7XG59O1xuXG5jb25zdCBhbGxQYXJhbGxlbCA9IChtb2RlbHM6IChJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSlbXSkgPT5cbiAgbW9kZWxzLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KG1vZGVsc1swXSkgJiYgbW9kZWxzWzBdLmxlbmd0aCA+IDE7XG5cbmNvbnN0IHZhbHVlQnlNZXRob2RJZCA9ICh2YWx1ZXM6IGJsYW5rTm9kZVtdLCBtZXRob2RJZDogc3RyaW5nLCB0ZXJtSWQ6IHN0cmluZykgPT5cbiAgcHJvcGVydHlWYWx1ZSh2YWx1ZXMuZmluZCh2ID0+IHYubWV0aG9kTW9kZWw/LlsnQGlkJ10gPT09IG1ldGhvZElkKT8udmFsdWUgYXMgbnVtYmVyW10sIHRlcm1JZCk7XG5cbmNvbnN0IGdyb3VwUGFyYWxsZWxWYWx1ZXMgPSAodmFsdWVzOiBibGFua05vZGVbXSwgbW9kZWxzOiBJQ29uZmlnTW9kZWwgfCBJQ29uZmlnTW9kZWxbXSwgdGVybUlkOiBzdHJpbmcpID0+XG4gIEFycmF5LmlzQXJyYXkobW9kZWxzKVxuICAgID8gT2JqZWN0LmZyb21FbnRyaWVzKG1vZGVscy5tYXAobW9kZWwgPT4gW21vZGVsLm1ldGhvZElkLCB2YWx1ZUJ5TWV0aG9kSWQodmFsdWVzLCBtb2RlbC5tZXRob2RJZCwgdGVybUlkKV0pKVxuICAgIDoge307XG5cbmV4cG9ydCBjb25zdCBncm91cExvZ3NCeVRlcm0gPSAoXG4gIG5vZGVUeXBlOiBOb2RlVHlwZSwgbG9nczogSU5vZGVMb2dzLCBtb2RlbHM6IElNb2RlbFtdLCBjb25maWc6IElPcmNoZXN0cmF0b3JDb25maWcsXG4gIGFsbE9yaWdpbmFsVmFsdWVzOiBibGFua05vZGVbXSwgYWxsUmVjYWxjdWxhdGVkVmFsdWVzOiBibGFua05vZGVbXSxcbiAgbm9kZUtleT86IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsVmFsdWVzID0gKGFsbE9yaWdpbmFsVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCByZWNhbGN1bGF0ZWRWYWx1ZXMgPSAoYWxsUmVjYWxjdWxhdGVkVmFsdWVzIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gISh2YWx1ZSBhcyBhbnkpLmRlbGV0ZWQpO1xuICBjb25zdCB0eXBlOiBTY2hlbWFUeXBlID0gb3JpZ2luYWxWYWx1ZXMubGVuZ3RoID9cbiAgICBvcmlnaW5hbFZhbHVlc1swXVsnQHR5cGUnXSB8fCBvcmlnaW5hbFZhbHVlc1swXS50eXBlIDpcbiAgICByZWNhbGN1bGF0ZWRWYWx1ZXMubGVuZ3RoID9cbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlc1swXVsnQHR5cGUnXSB8fCByZWNhbGN1bGF0ZWRWYWx1ZXNbMF0udHlwZSA6XG4gICAgICB1bmRlZmluZWQ7XG5cbiAgcmV0dXJuICh0ZXJtOiBJVGVybUpTT05MRCk6IElCbGFua05vZGVMb2cgPT4ge1xuICAgIGNvbnN0IHRlcm1JZCA9IHRlcm1bJ0BpZCddO1xuICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS50ZXJtVHlwZTtcbiAgICBjb25zdCB0ZXJtTG9ncyA9IGdldChsb2dzLCB0ZXJtSWQsIHt9KSBhcyBJTm9kZVRlcm1Mb2dzO1xuICAgIGNvbnN0IG9yaWdpbmFsID0gb3JpZ2luYWxWYWx1ZXMuZmlsdGVyKHYgPT4gdGVybUlkID09PSB2LnRlcm0hWydAaWQnXSk7XG4gICAgY29uc3QgcmVjYWxjdWxhdGVkID0gcmVjYWxjdWxhdGVkVmFsdWVzLmZpbHRlcih2ID0+IHRlcm1JZCA9PT0gdi50ZXJtIVsnQGlkJ10pO1xuICAgIGNvbnN0IGhhc0RhdGEgPSAhIW9yaWdpbmFsLmxlbmd0aCB8fCAhIXJlY2FsY3VsYXRlZC5sZW5ndGggfHwgT2JqZWN0LmtleXModGVybUxvZ3MpLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgY29uZmlnTW9kZWxzRGF0YSA9IHsgbm9kZVR5cGUsIHR5cGUsIHRlcm1JZCwgdGVybVR5cGUgfTtcbiAgICBjb25zdCBjb25maWdNb2RlbHMgPSBncm91cFBhcmFsbGVsTW9kZWxzKFxuICAgICAgY29uZmlnLCB0ZXJtSWQsIG5vZGVLZXkhLFxuICAgICAgdW5pcXVlKFtcbiAgICAgICAgLi4uKHRlcm1Mb2dzLm1vZGVscyB8fCBbXSkuZmlsdGVyKGtleSA9PiBpc01vZGVsTG9nKHRlcm1Mb2dzW2tleV0pKSxcbiAgICAgICAgLy8gLi4uZmluZENvbmZpZ01vZGVscyhjb25maWcsIHRlcm1JZCwgbm9kZUtleSEsIG1vZGVscykubWFwKCh7IG1vZGVsIH0pID0+IG1vZGVsIGFzIHN0cmluZylcbiAgICAgIF0pLm1hcChjb25maWdNb2RlbFdpdGhEb2NzKG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSkpXG4gICAgKTtcbiAgICBjb25zdCBrZXlzID0gbG9nS2V5cyh0ZXJtTG9ncywgb3JpZ2luYWwsIHJlY2FsY3VsYXRlZCwgbW9kZWxzLCBjb25maWdNb2RlbHNEYXRhKTtcbiAgICBjb25zdCBzdWJWYWx1ZXMgPSBsb2dTdWJWYWx1ZXMobG9ncywgdGVybUxvZ3MsIG9yaWdpbmFsLCByZWNhbGN1bGF0ZWQsIG1vZGVscywgY29uZmlnTW9kZWxzRGF0YSk7XG4gICAgY29uc3QgaXNSZXF1aXJlZCA9ICFPYmplY3QudmFsdWVzKHRlcm1Mb2dzKVxuICAgICAgLmZpbHRlcih2ID0+IHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KSAmJiAhdi5pc0tleSlcbiAgICAgIC8vIGlnbm9yZSBtb2RlbHMgdGhhdCB3ZXJlIG5ldmVyIGdvaW5nIHRvIHJ1blxuICAgICAgLmZpbHRlcihpc1J1bk9yY2hlc3RyYXRvcilcbiAgICAgIC5ldmVyeSh2ID0+IHYucnVuUmVxdWlyZWQgPT09IGZhbHNlKTtcblxuICAgIGNvbnN0IG5vZGVMb2c6IElCbGFua05vZGVMb2cgPSBkYXRhV2l0aENvbmZpZ01vZGVsTG9ncyh0ZXJtTG9ncykoe1xuICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgY2FuT3Blbjoga2V5cy5sZW5ndGggPiAwIHx8IHN1YlZhbHVlcy5sZW5ndGggPiAwLFxuICAgICAgdGVybUlkLFxuICAgICAgdGVybSxcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWdNb2RlbHMsXG4gICAgICBvcmlnaW5hbCxcbiAgICAgIG9yaWdpbmFsVmFsdWU6IHJlZHVjZVZhbHVlcyhvcmlnaW5hbCwgdGVybUlkKSxcbiAgICAgIHJlY2FsY3VsYXRlZCxcbiAgICAgIHJlY2FsY3VsYXRlZFZhbHVlOiByZWR1Y2VWYWx1ZXMocmVjYWxjdWxhdGVkLCB0ZXJtSWQpLFxuICAgICAgaXNPcmlnaW5hbDogISFvcmlnaW5hbC5sZW5ndGgsXG4gICAgICBpc1JlY2FsY3VsYXRlZDogaXNSZWNhbGN1bGF0ZWQocmVjYWxjdWxhdGVkKSxcbiAgICAgIGhhc0RhdGEsXG4gICAgICBpc1JlcXVpcmVkLFxuICAgICAgbG9nczogdGVybUxvZ3MsXG4gICAgICBrZXlzLFxuICAgICAgc3ViVmFsdWVzLFxuICAgICAgYWxsUGFyYWxsZWw6IGFsbFBhcmFsbGVsKGNvbmZpZ01vZGVscyksXG4gICAgICBvcmlnaW5hbFZhbHVlQnlNZXRob2RJZDogZ3JvdXBQYXJhbGxlbFZhbHVlcyhvcmlnaW5hbCwgY29uZmlnTW9kZWxzWzBdLCB0ZXJtSWQpLFxuICAgICAgcmVjYWxjdWxhdGVkVmFsdWVCeU1ldGhvZElkOiBncm91cFBhcmFsbGVsVmFsdWVzKHJlY2FsY3VsYXRlZCwgY29uZmlnTW9kZWxzWzBdLCB0ZXJtSWQpXG4gICAgfSk7XG4gICAgY29uc3Qgc3ViVmFsdWUgPSBjeWNsZVN1YlZhbHVlKG5vZGVMb2cpO1xuXG4gICAgcmV0dXJuIHN1YlZhbHVlXG4gICAgICA/IHtcbiAgICAgICAgLi4ubm9kZUxvZyxcbiAgICAgICAgbW9kZWxzSW5TdWJWYWx1ZXM6IHRydWUsXG4gICAgICAgIHN1YlZhbHVlczogW1xuICAgICAgICAgIHN1YlZhbHVlLFxuICAgICAgICAgIC4uLnN1YlZhbHVlc1xuICAgICAgICBdXG4gICAgICB9IC8vIGlmIHdlIGluY2x1ZGUgdGhlIEN5Y2xlIHZhbHVlLCBpdCBiZWNvbWVzIHRoZSBtYWluIHJlZmVyZW5jZSBvZiB0aGUgbW9kZWxzXG4gICAgICA6IG5vZGVMb2c7XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbW9kZWxDb3VudCA9IChibGFua05vZGVMb2dzOiBJQmxhbmtOb2RlTG9nW10pID0+IE1hdGgubWF4LmFwcGx5KE1hdGgubWF4LCBbXG4gIDAsXG4gIC4uLmJsYW5rTm9kZUxvZ3MuZmxhdE1hcCh2ID0+IFtcbiAgICB2LmNvbmZpZ01vZGVscy5sZW5ndGgsXG4gICAgLi4uKHYuc3ViVmFsdWVzLm1hcChzID0+IHMuY29uZmlnTW9kZWxzPy5sZW5ndGggfHwgMCkpLFxuICAgIC4uLih2LmtleXMubWFwKHMgPT4gcy5jb25maWdNb2RlbHM/Lmxlbmd0aCB8fCAwKSlcbiAgXSlcbl0pO1xuXG5leHBvcnQgY29uc3QgbG9nVmFsdWVBcnJheSA9ICh2YWx1ZTogc3RyaW5nKTogYW55W10gPT5cbiAgWyc7JywgJzonXS5zb21lKHYgPT4gdmFsdWUuaW5jbHVkZXModikpID9cbiAgICB2YWx1ZS5zcGxpdCgnOycpLmZsYXRNYXAodiA9PiB7XG4gICAgICBjb25zdCByZXMgPSB2LnNwbGl0KCdfJykubWFwKHZ2ID0+IHZ2LnNwbGl0KCc6JykpO1xuICAgICAgcmV0dXJuIHJlcy5sZW5ndGggPD0gMSA/IHJlcy5mbGF0KCkgOiBPYmplY3QuZnJvbUVudHJpZXMocmVzKTtcbiAgICB9KSA6XG4gICAgbnVsbDtcbiJdfQ==