@esfaenza/extensions 11.2.49 → 11.2.50

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.
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"ExtensionsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1}}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"ExtensionsModule"},"providers":[{"provide":{"__symbolic":"reference","name":"EXT_LOCALE"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"EXT_FANCY_ALERTS"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"fancy_alerts"},"right":true}},{"provide":{"__symbolic":"reference","name":"APPSEARCH_PREFIX"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"appsearch_prefix"},"right":"Hot"}},{"provide":{"__symbolic":"reference","name":"EXT_ALLOW_UTC"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"==","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"allow_utc"},"right":null},"thenExpression":false,"elseExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"allow_utc"}}}]}}}},"FullExtensionsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":28,"character":1}}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"FullExtensionsModule"},"providers":[{"__symbolic":"reference","name":"ClipboardService"},{"__symbolic":"reference","name":"DateService"},{"__symbolic":"reference","name":"ExportService"},{"__symbolic":"reference","name":"HashingService"},{"__symbolic":"reference","name":"MessageService"},{"__symbolic":"reference","name":"UtilityService"},{"__symbolic":"reference","name":"InterComService"},{"provide":{"__symbolic":"reference","name":"EXT_LOCALE"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"EXT_FANCY_ALERTS"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"fancy_alerts"},"right":true}},{"provide":{"__symbolic":"reference","name":"APPSEARCH_PREFIX"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"appsearch_prefix"},"right":"Hot"}},{"provide":{"__symbolic":"reference","name":"EXT_ALLOW_UTC"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"==","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"allow_utc"},"right":null},"thenExpression":false,"elseExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"allow_utc"}}}]}}}},"DateService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":15,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":50,"character":24}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":50,"character":36},"arguments":[{"__symbolic":"reference","name":"EXT_LOCALE"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":50,"character":80}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":50,"character":92},"arguments":[{"__symbolic":"reference","name":"EXT_ALLOW_UTC"}]}]],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"}]}],"adjustDateToFinalInstant":[{"__symbolic":"method"}],"dateSort":[{"__symbolic":"method"}],"trimSeconds":[{"__symbolic":"method"}],"getMinMaxDatesRange":[{"__symbolic":"method"}],"getDateConvertion":[{"__symbolic":"method"}],"isJsDate":[{"__symbolic":"method"}],"isDayJs":[{"__symbolic":"method"}],"getFormatted":[{"__symbolic":"method"}]}},"Export":{"__symbolic":"error","message":"Lambda not supported","line":40,"character":22,"module":"./lib/services/extensions.exports.service"},"ExportAs":{"__symbolic":"error","message":"Lambda not supported","line":86,"character":24,"module":"./lib/services/extensions.exports.service"},"ExportList":{"__symbolic":"error","message":"Lambda not supported","line":131,"character":26,"module":"./lib/services/extensions.exports.service"},"ExportDictionary":{"__symbolic":"error","message":"Lambda not supported","line":159,"character":32,"module":"./lib/services/extensions.exports.service"},"ExportService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":174,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"DateService"}]}],"setupForExport":[{"__symbolic":"method"}],"setupForGenericExport":[{"__symbolic":"method"}],"parseAndGetGenericHeaders":[{"__symbolic":"method"}],"parseAndGetHeaders":[{"__symbolic":"method"}],"parseProperty":[{"__symbolic":"method"}],"parseObject":[{"__symbolic":"method"}],"parseList":[{"__symbolic":"method"}],"parseDictionary":[{"__symbolic":"method"}],"deserializeForExport":[{"__symbolic":"method"}]}},"ClipboardService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":11,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":61,"character":60}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":61,"character":72},"arguments":[{"__symbolic":"reference","name":"EXT_LOCALE"}]}]],"parameters":[{"__symbolic":"reference","name":"MessageService"},{"__symbolic":"reference","name":"string"}]}],"getClipboard":[{"__symbolic":"method"}],"doClipboardDataGet":[{"__symbolic":"method"}],"getClipboardLines":[{"__symbolic":"method"}],"getClipboardMatrix":[{"__symbolic":"method"}],"copyTextToClipboard":[{"__symbolic":"method"}]}},"HashingService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1}}],"members":{"getGUID":[{"__symbolic":"method"}],"hashObject":[{"__symbolic":"method"}],"simpleHash":[{"__symbolic":"method"}],"stringify":[{"__symbolic":"method"}],"md5":[{"__symbolic":"method"}],"md5cycle":[{"__symbolic":"method"}],"cmn":[{"__symbolic":"method"}],"ff":[{"__symbolic":"method"}],"gg":[{"__symbolic":"method"}],"hh":[{"__symbolic":"method"}],"ii":[{"__symbolic":"method"}],"md51":[{"__symbolic":"method"}],"md5blk":[{"__symbolic":"method"}],"rhex":[{"__symbolic":"method"}],"hex":[{"__symbolic":"method"}],"add32":[{"__symbolic":"method"}]}},"MessageService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":18,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":74,"character":55}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":74,"character":67},"arguments":[{"__symbolic":"reference","name":"EXT_FANCY_ALERTS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":74,"character":124}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":74,"character":136},"arguments":[{"__symbolic":"reference","name":"EXT_LOCALE"}]}]],"parameters":[{"__symbolic":"reference","module":"ngx-toastr","name":"ToastrService","line":74,"character":39},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"string"}]}],"simpleSuccess":[{"__symbolic":"method"}],"simpleInfo":[{"__symbolic":"method"}],"simpleError":[{"__symbolic":"method"}],"simpleWarning":[{"__symbolic":"method"}],"clearMessages":[{"__symbolic":"method"}],"promiseWarningWithChoice":[{"__symbolic":"method"}],"toastrOrSwal":[{"__symbolic":"method"}],"simpleWarningWithChoice":[{"__symbolic":"method"}],"simpleSuccessWithChoice":[{"__symbolic":"method"}],"observableSimpleWarningWithChoice":[{"__symbolic":"method"}],"expiredSessionMessage":[{"__symbolic":"method"}],"manageCallResultResponse":[{"__symbolic":"method"}],"manageStringResponse":[{"__symbolic":"method"}],"manageStringResponseBool":[{"__symbolic":"method"}]}},"UtilityService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":10,"character":1}}],"members":{"clearTextSelection":[{"__symbolic":"method"}],"getSelectedItem":[{"__symbolic":"method"}],"cleanForm":[{"__symbolic":"method"}],"fileDownload":[{"__symbolic":"method"}],"msToTime":[{"__symbolic":"method"}],"saveFile":[{"__symbolic":"method"}],"base64ToArrayBuffer":[{"__symbolic":"method"}],"saveByteArray":[{"__symbolic":"method"}],"swap":[{"__symbolic":"method"}],"getJsTypeFromTypeCode":[{"__symbolic":"method"}],"deepClone":[{"__symbolic":"method"}],"recursiveStep":[{"__symbolic":"method"}]}},"EXT_LOCALE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":54},"arguments":["EXT_LOCALE"]},"EXT_FANCY_ALERTS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":10,"character":61},"arguments":["EXT_FANCY_ALERTS"]},"APPSEARCH_PREFIX":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":15,"character":60},"arguments":["APPSEARCH_PREFIX"]},"EXT_ALLOW_UTC":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":20,"character":58},"arguments":["EXT_ALLOW_UTC"]},"CallResult":{"__symbolic":"class","arity":1,"members":{}},"CsvHeaders":{"__symbolic":"class","members":{}},"GenericItem":{"__symbolic":"class","members":{}},"InboundMessageTypes":{"Navigation":0},"InterComMessage":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"any"}]}]}},"InterComService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":10,"character":1}}],"members":{"send":[{"__symbolic":"method"}],"register":[{"__symbolic":"method"}]}}},"origins":{"ExtensionsModule":"./lib/modules/extensions.module","FullExtensionsModule":"./lib/modules/extensions.full.module","DateService":"./lib/services/extensions.dates.service","Export":"./lib/services/extensions.exports.service","ExportAs":"./lib/services/extensions.exports.service","ExportList":"./lib/services/extensions.exports.service","ExportDictionary":"./lib/services/extensions.exports.service","ExportService":"./lib/services/extensions.exports.service","ClipboardService":"./lib/services/extensions.clipboard.service","HashingService":"./lib/services/extensions.hashing.service","MessageService":"./lib/services/extensions.messages.service","UtilityService":"./lib/services/extensions.utilities.service","EXT_LOCALE":"./lib/tokens","EXT_FANCY_ALERTS":"./lib/tokens","APPSEARCH_PREFIX":"./lib/tokens","EXT_ALLOW_UTC":"./lib/tokens","CallResult":"./lib/models/CallResult","CsvHeaders":"./lib/models/CsvHeaders","GenericItem":"./lib/models/GenericItem","InboundMessageTypes":"./lib/models/InboundMessageTypes","InterComMessage":"./lib/models/InterComMessage","InterComService":"./lib/services/extensions.intercom.service"},"importAs":"@esfaenza/extensions"}
1
+ {"__symbolic":"module","version":4,"metadata":{"ExtensionsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1}}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"ExtensionsModule"},"providers":[{"provide":{"__symbolic":"reference","name":"EXT_LOCALE"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"EXT_FANCY_ALERTS"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"fancy_alerts"},"right":true}},{"provide":{"__symbolic":"reference","name":"APPSEARCH_PREFIX"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"appsearch_prefix"},"right":"Hot"}},{"provide":{"__symbolic":"reference","name":"EXT_ALLOW_UTC"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"==","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"allow_utc"},"right":null},"thenExpression":false,"elseExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"allow_utc"}}}]}}}},"FullExtensionsModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":28,"character":1}}],"members":{},"statics":{"forRoot":{"__symbolic":"function","parameters":["config"],"value":{"ngModule":{"__symbolic":"reference","name":"FullExtensionsModule"},"providers":[{"__symbolic":"reference","name":"ClipboardService"},{"__symbolic":"reference","name":"DateService"},{"__symbolic":"reference","name":"ExportService"},{"__symbolic":"reference","name":"HashingService"},{"__symbolic":"reference","name":"MessageService"},{"__symbolic":"reference","name":"UtilityService"},{"__symbolic":"reference","name":"InterComService"},{"provide":{"__symbolic":"reference","name":"EXT_LOCALE"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"locale"},"right":"it-IT"}},{"provide":{"__symbolic":"reference","name":"EXT_FANCY_ALERTS"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"fancy_alerts"},"right":true}},{"provide":{"__symbolic":"reference","name":"APPSEARCH_PREFIX"},"useValue":{"__symbolic":"binop","operator":"||","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"appsearch_prefix"},"right":"Hot"}},{"provide":{"__symbolic":"reference","name":"EXT_ALLOW_UTC"},"useValue":{"__symbolic":"if","condition":{"__symbolic":"binop","operator":"==","left":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"allow_utc"},"right":null},"thenExpression":false,"elseExpression":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"config"},"member":"allow_utc"}}}]}}}},"DateService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":15,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":50,"character":24}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":50,"character":36},"arguments":[{"__symbolic":"reference","name":"EXT_LOCALE"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":50,"character":80}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":50,"character":92},"arguments":[{"__symbolic":"reference","name":"EXT_ALLOW_UTC"}]}]],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"boolean"}]}],"adjustDateToFinalInstant":[{"__symbolic":"method"}],"dateSort":[{"__symbolic":"method"}],"trimSeconds":[{"__symbolic":"method"}],"getMinMaxDatesRange":[{"__symbolic":"method"}],"getDateConvertion":[{"__symbolic":"method"}],"isJsDate":[{"__symbolic":"method"}],"isDayJs":[{"__symbolic":"method"}],"getFormatted":[{"__symbolic":"method"}]}},"Export":{"__symbolic":"error","message":"Lambda not supported","line":40,"character":22,"module":"./lib/services/extensions.exports.service"},"ExportAs":{"__symbolic":"error","message":"Lambda not supported","line":86,"character":24,"module":"./lib/services/extensions.exports.service"},"ExportList":{"__symbolic":"error","message":"Lambda not supported","line":132,"character":26,"module":"./lib/services/extensions.exports.service"},"ExportDictionary":{"__symbolic":"error","message":"Lambda not supported","line":160,"character":32,"module":"./lib/services/extensions.exports.service"},"ExportService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":175,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"DateService"}]}],"setupForExport":[{"__symbolic":"method"}],"setupForGenericExport":[{"__symbolic":"method"}],"parseAndGetGenericHeaders":[{"__symbolic":"method"}],"parseAndGetHeaders":[{"__symbolic":"method"}],"parseProperty":[{"__symbolic":"method"}],"parseObject":[{"__symbolic":"method"}],"parseList":[{"__symbolic":"method"}],"parseDictionary":[{"__symbolic":"method"}],"deserializeForExport":[{"__symbolic":"method"}]}},"ClipboardService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":11,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":61,"character":60}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":61,"character":72},"arguments":[{"__symbolic":"reference","name":"EXT_LOCALE"}]}]],"parameters":[{"__symbolic":"reference","name":"MessageService"},{"__symbolic":"reference","name":"string"}]}],"getClipboard":[{"__symbolic":"method"}],"doClipboardDataGet":[{"__symbolic":"method"}],"getClipboardLines":[{"__symbolic":"method"}],"getClipboardMatrix":[{"__symbolic":"method"}],"copyTextToClipboard":[{"__symbolic":"method"}]}},"HashingService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1}}],"members":{"getGUID":[{"__symbolic":"method"}],"hashObject":[{"__symbolic":"method"}],"simpleHash":[{"__symbolic":"method"}],"stringify":[{"__symbolic":"method"}],"md5":[{"__symbolic":"method"}],"md5cycle":[{"__symbolic":"method"}],"cmn":[{"__symbolic":"method"}],"ff":[{"__symbolic":"method"}],"gg":[{"__symbolic":"method"}],"hh":[{"__symbolic":"method"}],"ii":[{"__symbolic":"method"}],"md51":[{"__symbolic":"method"}],"md5blk":[{"__symbolic":"method"}],"rhex":[{"__symbolic":"method"}],"hex":[{"__symbolic":"method"}],"add32":[{"__symbolic":"method"}]}},"MessageService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":18,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":74,"character":55}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":74,"character":67},"arguments":[{"__symbolic":"reference","name":"EXT_FANCY_ALERTS"}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":74,"character":124}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":74,"character":136},"arguments":[{"__symbolic":"reference","name":"EXT_LOCALE"}]}]],"parameters":[{"__symbolic":"reference","module":"ngx-toastr","name":"ToastrService","line":74,"character":39},{"__symbolic":"reference","name":"boolean"},{"__symbolic":"reference","name":"string"}]}],"simpleSuccess":[{"__symbolic":"method"}],"simpleInfo":[{"__symbolic":"method"}],"simpleError":[{"__symbolic":"method"}],"simpleWarning":[{"__symbolic":"method"}],"clearMessages":[{"__symbolic":"method"}],"promiseWarningWithChoice":[{"__symbolic":"method"}],"toastrOrSwal":[{"__symbolic":"method"}],"simpleWarningWithChoice":[{"__symbolic":"method"}],"simpleSuccessWithChoice":[{"__symbolic":"method"}],"observableSimpleWarningWithChoice":[{"__symbolic":"method"}],"expiredSessionMessage":[{"__symbolic":"method"}],"manageCallResultResponse":[{"__symbolic":"method"}],"manageStringResponse":[{"__symbolic":"method"}],"manageStringResponseBool":[{"__symbolic":"method"}]}},"UtilityService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":10,"character":1}}],"members":{"clearTextSelection":[{"__symbolic":"method"}],"getSelectedItem":[{"__symbolic":"method"}],"cleanForm":[{"__symbolic":"method"}],"fileDownload":[{"__symbolic":"method"}],"msToTime":[{"__symbolic":"method"}],"saveFile":[{"__symbolic":"method"}],"base64ToArrayBuffer":[{"__symbolic":"method"}],"saveByteArray":[{"__symbolic":"method"}],"swap":[{"__symbolic":"method"}],"getJsTypeFromTypeCode":[{"__symbolic":"method"}],"deepClone":[{"__symbolic":"method"}],"recursiveStep":[{"__symbolic":"method"}]}},"EXT_LOCALE":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":5,"character":54},"arguments":["EXT_LOCALE"]},"EXT_FANCY_ALERTS":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":10,"character":61},"arguments":["EXT_FANCY_ALERTS"]},"APPSEARCH_PREFIX":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":15,"character":60},"arguments":["APPSEARCH_PREFIX"]},"EXT_ALLOW_UTC":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":20,"character":58},"arguments":["EXT_ALLOW_UTC"]},"CallResult":{"__symbolic":"class","arity":1,"members":{}},"CsvHeaders":{"__symbolic":"class","members":{}},"GenericItem":{"__symbolic":"class","members":{}},"InboundMessageTypes":{"Navigation":0},"InterComMessage":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"any"},{"__symbolic":"reference","name":"any"}]}]}},"InterComService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":10,"character":1}}],"members":{"send":[{"__symbolic":"method"}],"register":[{"__symbolic":"method"}]}}},"origins":{"ExtensionsModule":"./lib/modules/extensions.module","FullExtensionsModule":"./lib/modules/extensions.full.module","DateService":"./lib/services/extensions.dates.service","Export":"./lib/services/extensions.exports.service","ExportAs":"./lib/services/extensions.exports.service","ExportList":"./lib/services/extensions.exports.service","ExportDictionary":"./lib/services/extensions.exports.service","ExportService":"./lib/services/extensions.exports.service","ClipboardService":"./lib/services/extensions.clipboard.service","HashingService":"./lib/services/extensions.hashing.service","MessageService":"./lib/services/extensions.messages.service","UtilityService":"./lib/services/extensions.utilities.service","EXT_LOCALE":"./lib/tokens","EXT_FANCY_ALERTS":"./lib/tokens","APPSEARCH_PREFIX":"./lib/tokens","EXT_ALLOW_UTC":"./lib/tokens","CallResult":"./lib/models/CallResult","CsvHeaders":"./lib/models/CsvHeaders","GenericItem":"./lib/models/GenericItem","InboundMessageTypes":"./lib/models/InboundMessageTypes","InterComMessage":"./lib/models/InterComMessage","InterComService":"./lib/services/extensions.intercom.service"},"importAs":"@esfaenza/extensions"}
@@ -75,8 +75,9 @@ export const Export = (order, header, format = null, tableid = null) => (target,
75
75
  */
76
76
  export const ExportAs = (order, type) => (target, propertyKey) => {
77
77
  var t = new type();
78
- for (var prop in t) {
79
- //Niente hasownproperty perché le proprietà dell'oggetto interno sono dentro al prototype
78
+ var props = t[exportList];
79
+ for (let i = 0; i < props.length; i++) {
80
+ let prop = props[i].replace(csvVisPrefix, '');
80
81
  if (typeof t[prop + csvVisPrefix] !== "undefined") {
81
82
  var toEmit = t[prop + csvVisPrefix];
82
83
  var lbl = t[prop + csvHdrPrefix];
@@ -189,7 +190,7 @@ export class ExportService {
189
190
  }
190
191
  }
191
192
  }
192
- if (!columns)
193
+ if (!columns || columns.length == 0)
193
194
  return headers.sort((a, b) => a.order - b.order);
194
195
  else {
195
196
  // Se mi arriva la lista di colonne non mi dà solo la visibilità, ma anche l'ordinamento
@@ -503,4 +504,4 @@ ExportService.decorators = [
503
504
  ExportService.ctorParameters = () => [
504
505
  { type: DateService }
505
506
  ];
506
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NyYy9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTztBQUNQLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BQLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU16RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxTQUFpQixJQUFJLEVBQUUsVUFBa0IsSUFBSSxFQUFFLEVBQUUsQ0FDckcsQ0FBQyxNQUFjLEVBQUUsV0FBbUIsRUFBRSxFQUFFO0lBQ3RDLElBQUksTUFBTTtRQUNSLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUs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ZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIExpYnNcclxuaW1wb3J0IHsgRGVzZXJpYWxpemUgfSBmcm9tIFwiY2VyaWFsaXplXCI7XHJcblxyXG4vLyBDb25maWd1cmF6aW9uaVxyXG5cclxuaW1wb3J0IHsgZXhwb3J0TGlzdCwgY3N2Rm9ybWF0UHJlZml4LCBjc3ZIZHJQcmVmaXgsIGNzdk9yZFByZWZpeCwgY3N2VmFsdWVOYXZpZ2F0b3IsIGNzdlZpc1ByZWZpeCwgZGljdGlvbmFyeUNzdkhkclByZWZpeCwgZGljdGlvbmFyeUNzdlZhbFByZWZpeCwgbGlzdENzdkhkclByZWZpeCwgbGlzdENzdlZhbEZvcm1hdCwgbGlzdENzdlZhbFByZWZpeCwgY3N2UHJvcEtleSB9IGZyb20gXCIuLi9tb2RlbHMvRXhwb3J0Q29uc3RzXCI7XHJcbmltcG9ydCB7IERhdGVTZXJ2aWNlIH0gZnJvbSAnLi9leHRlbnNpb25zLmRhdGVzLnNlcnZpY2UnO1xyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBDc3ZIZWFkZXJzIH0gZnJvbSBcIi4uL21vZGVscy9Dc3ZIZWFkZXJzXCI7XHJcbmltcG9ydCB7IEdlbmVyaWNJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9HZW5lcmljSXRlbVwiO1xyXG5cclxuLyoqXHJcbiAqIERlY29yYXRvcmUgZGkgZXNwb3J0YXppb25lIHV0aWxpenphYmlsZSBzdSB1bmEgcHJvcHJpZXTDoCBzaW5nb2xhLiBcclxuICogVmVycmFubm8gZ2VuZXJhdGUgMyBwcm9wcmlldMOgIGNoZSBnZXN0aXJhbm5vIGwnZXNwb3J0YXppb25lOiAocHJvcCwgcHJvcF9jc3Z2aXMsIHByb3BfY3N2aGRyKS4gXHJcbiAqIFxyXG4gKiBBZCBlc2VtcGlvLCBkYSBxdWVzdGEgY29uZmlndXJhemlvbmU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogQEV4cG9ydCh0cnVlLCBcIk15SGVhZGVyXCIpXHJcbiAqIGNpYW86IHN0cmluZztcclxuICogYGBgXHJcbiAqIFxyXG4gKiBOYXNjZXJhbm5vIGxlIHNlZ3VlbnRpIHByb3ByaWV0w6AgbmVsbCdvZ2dldHRvIGVzcG9ydGFiaWxlOlxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogYGBgXHJcbiAqIGNpYW9fY3N2dmlzOiBzdHJpbmc7ID0+IHRydWVcclxuICogY2lhbzogc3RyaW5nO1xyXG4gKiBjaWFvX2Nzdmhkcjogc3RyaW5nID0+IFwiTXlIZWFkZXJcIlxyXG4gKiBgYGBcclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcmRlciBPcmRpbmUgZGkgZXNwb3J0YXppb25lLiBQacO5IHBpY2NvbG8gw6gsIHByaW1hIGFwcGFyZSBpbCB2YWxvcmVcclxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlciBUaXRvbG8gZGVsbGEgY29sb25uYSBuZWwgZmlsZSBDU1YgZXNwb3J0YXRvXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgRm9ybWF0byBkaSBlc3BvcnRhemlvbmUuIFB1w7IgZXNzZXJlIHVuIGZvcm1hdG8gZGF0YSBwZXIgaSBjYW1waSBkYXRhIG8gJ0YnIHBlciBpIGNhbXBpIGZsb2F0aW5nIHBvaW50XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0ID0gKG9yZGVyOiBudW1iZXIsIGhlYWRlcjogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyA9IG51bGwsIHRhYmxlaWQ6IHN0cmluZyA9IG51bGwpID0+XHJcbiAgKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICBpZiAoZm9ybWF0KVxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdkZvcm1hdFByZWZpeCwgeyB2YWx1ZTogZm9ybWF0LCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdk9yZFByZWZpeCwgeyB2YWx1ZTogb3JkZXIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2VmlzUHJlZml4LCB7IHZhbHVlOiAhIWhlYWRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IGhlYWRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgaWYodGFibGVpZClcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZQcm9wS2V5LCB7IHZhbHVlOiB0YWJsZWlkLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcblxyXG4gICAgaWYgKHRhcmdldFtleHBvcnRMaXN0XSlcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdLnB1c2gocHJvcGVydHlLZXkgKyBjc3ZWaXNQcmVmaXgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0gPSBbcHJvcGVydHlLZXkgKyBjc3ZWaXNQcmVmaXhdXHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGRpIGVzcG9ydGF6aW9uZSB1dGlsaXp6YWJpbGUgc3UgdW4gb2dnZXR0by4gXHJcbiAqIFBlciBvZ25pIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIHZlcnJhbm5vIGdlbmVyYXRlIDMgcHJvcHJpZXTDoCBjaGUgZ2VzdGlyYW5ubyBsJ2VzcG9ydGF6aW9uZTogKHByb3AsIHByb3BfY3N2dmlzLCBwcm9wX2NzdmhkcikuIFxyXG4gKiBQZXIgZXNzZXJlIGVzcG9ydGF0ZSwgbGUgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gZGV2b25vIGVzc2VyZSBtYXJjYXRlIGNvbiBpIERlY29yYXRvcmkgZGkgZXNwb3J0YXppb25lXHJcbiAqIFxyXG4gKiBBZCBlc2VtcGlvLCBkYSBxdWVzdGEgY29uZmlndXJhemlvbmU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogTXlPYmoge1xyXG4gKiAgICAgQEV4cG9ydCh0cnVlLCBcIk15SGVhZGVyXCIpXHJcbiAqICAgICBjaWFvOiBzdHJpbmc7XHJcbiAqIH1cclxuICogXHJcbiAqIEBFeHBvcnRPYmplY3QodHJ1ZSwgXCJNeUhlYWRlclwiKVxyXG4gKiB0ZXN0OiBNeU9iajsgXHJcbiAqIGBgYFxyXG4gKiBcclxuICogTmFzY2VyYW5ubyBsZSBzZWd1ZW50aSBwcm9wcmlldMOgIG5lbGwnb2dnZXR0byBlc3BvcnRhYmlsZTpcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYFxyXG4gKiB0ZXN0Y2lhbzogc3RyaW5nOyA9PiBWYWxvcmUgZGkgTXlPYmouY2lhb1xyXG4gKiB0ZXN0Y2lhb19jc3Z2aXM6IHN0cmluZzsgPT4gdHJ1ZVxyXG4gKiB0ZXN0Y2lhb19jc3ZoZHI6IHN0cmluZyA9PiBcIk15SGVhZGVyXCIgXHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gb3JkZXIgT3JkaW5lIGRpIGVzcG9ydGF6aW9uZS4gUGnDuSBwaWNjb2xvIMOoLCBwcmltYSBhcHBhcmUgaWwgdmFsb3JlXHJcbiAqIEBwYXJhbSB7YW55fSB0eXBlIFRpcG8gZGEgZXNwb3J0YXJlXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0QXMgPSAob3JkZXI6IG51bWJlciwgdHlwZTogYW55KSA9PlxyXG4gICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgdmFyIHQgPSBuZXcgdHlwZSgpO1xyXG4gICAgZm9yICh2YXIgcHJvcCBpbiB0KSB7XHJcbiAgICAgIC8vTmllbnRlIGhhc293bnByb3BlcnR5IHBlcmNow6kgbGUgcHJvcHJpZXTDoCBkZWxsJ29nZ2V0dG8gaW50ZXJubyBzb25vIGRlbnRybyBhbCBwcm90b3R5cGVcclxuICAgICAgaWYgKHR5cGVvZiB0W3Byb3AgKyBjc3ZWaXNQcmVmaXhdICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgdmFyIHRvRW1pdDogYm9vbGVhbiA9IHRbcHJvcCArIGNzdlZpc1ByZWZpeF07XHJcbiAgICAgICAgdmFyIGxibCA9IHRbcHJvcCArIGNzdkhkclByZWZpeF07XHJcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRbcHJvcCArIGNzdkZvcm1hdFByZWZpeF07XHJcbiAgICAgICAgdmFyIG9yZGVyUHJvcCA9IHRbcHJvcCArIGNzdk9yZFByZWZpeF07XHJcbiAgICAgICAgaWYgKGZvcm1hdClcclxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdkZvcm1hdFByZWZpeCwgeyB2YWx1ZTogZm9ybWF0LCB3cml0YWJsZTogZmFsc2UgfSk7XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdk9yZFByZWZpeCwgeyB2YWx1ZTogb3JkZXJQcm9wICsgb3JkZXIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AsIHsgdmFsdWU6IG51bGwsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZhbHVlTmF2aWdhdG9yLCB7IHZhbHVlOiBwcm9wZXJ0eUtleSArIFwiLlwiICsgcHJvcCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZpc1ByZWZpeCwgeyB2YWx1ZTogdG9FbWl0LCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wICsgY3N2SGRyUHJlZml4LCB7IHZhbHVlOiBsYmwsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuXHJcbiAgICAgICAgaWYgKHRhcmdldFtleHBvcnRMaXN0XSlcclxuICAgICAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZpc1ByZWZpeCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdID0gW3Byb3BlcnR5S2V5ICsgcHJvcCArIGNzdlZpc1ByZWZpeF1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBkaSBlc3BvcnRhemlvbmUgdXRpbGl6emFiaWxlIHN1IHVuYSBsaXN0YSwgXHJcbiAqIHNpIHV0aWxpenphbm8gMiBuYXZpZ2F0b3IgcmlzcGV0dGl2YW1lbnRlIHBlciBsYSB2YWxvcml6emF6aW9uZSBkZWxsJ0hlYWRlciBlIGRlbCBWYWxvcmUgZSBcclxuICogcGVyIG9nbmkgZWxlbWVudG8gZGVsbCdhcnJheSB2ZXJyYW5ubyBnZW5lcmF0ZSAzIHByb3ByaWV0w6AgY2hlIGdlc3RpcmFubm8gbCdlc3BvcnRhemlvbmU6IChwcm9wLCBwcm9wX2NzdnZpcywgcHJvcF9jc3ZoZHIpXHJcbiAqIFxyXG4gKiBBVFRFTlpJT05FOiBHbGkgb2dnZXR0aSBlc3BvcnRhdGkgaW4gcXVlc3RhIG1vZGFsaXTDoCBub24gZGV2b25vIHByZXNlbnRhcmUgYWx0cmkgdGFnIGRpIHRpcG8gQEV4cG9ydHsuLi59IGFsbCdpbnRlcm5vLiBGYSB0dXR0byBxdWVzdG8gZGVjb3JhdG9yZVxyXG4gKiBcclxuICogSSBuYXZpZ2F0b3IgaGFubm8gcXVlc3RhIGNvbnZlbnppb25lOlxyXG4gKiBcclxuICogLiAtLT4gZGl2aWRlIGR1ZSBwcm9wcmlldMOgIGRhIHJpY2hpYW1hcmUgY29uc2VjdXRpdmFtZW50ZTogXCJhLmJcIiByaWNoaWFtZXLDoCBcIm9iai5hLmJcIjtcclxuICogXHJcbiAqIHwgLS0+IGRpdmlkZSBwacO5IHByb3ByaWV0w6AgcGVyIGxlIGNvbmNhdGVuYXppb25pIGNvbiB1bm8gc3BhemlvIGZyYSB1bmEgZSBsJ2FsdHJhOiBcInJlZ2Rlc2N8c2xpY2Uuc2xpY2VuYW1lXCIgZGl2ZW50ZXLDoCBvYmoucmVnZGVzYyArIFwiIFwiICsgb2JqLnNsaWNlLnNsaWNlbmFtZVxyXG4gKiBcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVhZGVybmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB0aXRvbG8gcGVyIGxhIGNvbG9ubmFcclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlbmF2aWdhdG9yIE5hdmlnYXRvciBjb2wgY29tcGl0byBkaSBzZWxlemlvbmFyZSBpbCB2YWxvcmUgcGVyIGxhIGNvbG9ubmFcclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlZm9ybWF0IEZvcm1hdG8gZGkgZXNwb3J0YXppb25lIHBlciBpIHZhbG9yaSBzZWxlemlvbmF0aSBkYWwgKip2YWx1ZW5hdmlnYXRvcioqLiBQdcOyIGVzc2VyZSB1biBmb3JtYXRvIGRhdGEgcGVyIGkgY2FtcGkgZGF0YSBvICdGJyBwZXIgaSBjYW1waSBmbG9hdGluZyBwb2ludFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9ydExpc3QgPSAob3JkZXI6IG51bWJlciwgaGVhZGVybmF2aWdhdG9yOiBzdHJpbmcsIHZhbHVlbmF2aWdhdG9yOiBzdHJpbmcsIHZhbHVlZm9ybWF0OiBzdHJpbmcgPSBudWxsKSA9PlxyXG4gICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZPcmRQcmVmaXgsIHsgdmFsdWU6IG9yZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGxpc3RDc3ZWYWxQcmVmaXgsIHsgdmFsdWU6IHZhbHVlbmF2aWdhdG9yLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGxpc3RDc3ZIZHJQcmVmaXgsIHsgdmFsdWU6IGhlYWRlcm5hdmlnYXRvciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBsaXN0Q3N2VmFsRm9ybWF0LCB7IHZhbHVlOiB2YWx1ZWZvcm1hdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgIGlmICh0YXJnZXRbZXhwb3J0TGlzdF0pXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgbGlzdENzdkhkclByZWZpeCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XSA9IFtwcm9wZXJ0eUtleSArIGxpc3RDc3ZIZHJQcmVmaXhdXHJcbiAgfTtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGRpIGVzcG9ydGF6aW9uZSB1dGlsaXp6YWJpbGUgc3UgdW4gZGl6aW9uYXJpby4gU2UgYWQgZXNlbXBpbyBzaSB2b2dsaW9ubyBnZW5lcmFyZSBsZSBjb2xvbm5lXHJcbiAqIFxyXG4gKiBWYWxvcmUgQSA9IDFcclxuICogXHJcbiAqIFZhbG9yZSBCID0gMlxyXG4gKiBcclxuICogVmFsb3JlIEMgPSAzXHJcbiAqIFxyXG4gKiBwYXJ0ZW5kbyBkYSB1biBvZ2dldHRvIGluaXppYWxlIHsgVmFsb3JlIHsgQTogMSwgQjogMiwgQzogMyB9IH1cclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcmRlciBPcmRpbmUgZGkgZXNwb3J0YXppb25lLiBQacO5IHBpY2NvbG8gw6gsIHByaW1hIGFwcGFyZSBpbCB2YWxvcmVcclxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlcm5hdmlnYXRvciBOYXZpZ2F0b3IgY29sIGNvbXBpdG8gZGkgc2VsZXppb25hcmUgaWwgdGl0b2xvIHBlciBsYSBjb2xvbm5hXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZW5hdmlnYXRvciBOYXZpZ2F0b3IgY29sIGNvbXBpdG8gZGkgc2VsZXppb25hcmUgaWwgdmFsb3JlIHBlciBsYSBjb2xvbm5hXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgRXhwb3J0RGljdGlvbmFyeSA9IChvcmRlcjogbnVtYmVyLCBoZWFkZXJuYXZpZ2F0b3I6IHN0cmluZywgdmFsdWVuYXZpZ2F0b3I6IHN0cmluZykgPT5cclxuICAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2T3JkUHJlZml4LCB7IHZhbHVlOiBvcmRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2VmFsUHJlZml4LCB7IHZhbHVlOiB2YWx1ZW5hdmlnYXRvciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4LCB7IHZhbHVlOiBoZWFkZXJuYXZpZ2F0b3IsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0W2V4cG9ydExpc3RdKVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0ucHVzaChwcm9wZXJ0eUtleSArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0gPSBbcHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4XVxyXG4gIH07XHJcblxyXG4vKipcclxuICogU2VydmljZSBjaGUgc2kgb2NjdXBhIGRlbGwnZXNwb3J0YXppb25lIGRlZ2xpIG9nZ2V0dGkgbWFyY2F0aSBkYWkgRGVjb3JhdG9yaSAqKkV4cG9ydERpY3Rpb25hcnkqKiwgKipFeHBvcnRMaXN0KiosICoqRXhwb3J0QXMqKiBvICoqRXhwb3J0KipcclxuICovXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEV4cG9ydFNlcnZpY2Uge1xyXG5cclxuICAvKipcclxuICAgKiBDb3N0cnV0dG9yZVxyXG4gICAqIFxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRlczogRGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHVuYSBsaXN0YSBkaSBvZ2dldHRpIGdlbmVyYSBnbGkgaGVhZGVyIHBlciBsJ2VzcG9ydGF6aW9uZSBlIGludGVncmEgb2duaSBvZ2dldHRvIGNvbiBsZSBwcm9wcmlldMOgIGVzcG9ydGFiaWxpIGRhbGxhIGxpYnJlcmlhICoqQGN0cmwvbmd4LWNzdioqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnlbXX0gb2JqcyBPZ2dldHRpIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDc3ZIZWFkZXJzW119IEhlYWRlciBkaSBlc3BvcnRhemlvbmUgZ2nDoCBvcmRpbmF0aSBjb3JyZXR0YW1lbnRlXHJcbiAgICovXHJcbiAgcHVibGljIHNldHVwRm9yRXhwb3J0KG9ianM6IGFueVtdLCBjb2x1bW5zOiBzdHJpbmdbXSA9IFtdKTogQ3N2SGVhZGVyc1tdIHtcclxuICAgIGxldCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10gPSBbXTtcclxuICAgIGxldCBoZWFkZXJzQ2FjaGUgPSB7fTtcclxuXHJcbiAgICBpZiAoIW9ianMgfHwgb2Jqcy5sZW5ndGggPT0gMClcclxuICAgICAgcmV0dXJuIGhlYWRlcnM7XHJcblxyXG4gICAgLy8gRGV2byBwZXIgZm9yemEgZmFybG8gcGVyIHR1dHRpIGdsaSBvZ2dldHRpIGRhdG8gY2hlIGRldm8gZXNwb3JyZSBsZSBwcm9wcmlldMOgIGNoZSBtaSBzZXJ2b25vIGRhIGVzcG9ydGFyZVxyXG4gICAgLy8gR2xpIGhlYWRlciBsaSByYWNjb2xnbyB0dXR0aSBwb2kgZmFjY2lvIHVhbiBkaXN0aW5jdCBpbiBtb2RvIGRhIGVzcG9ydGFyZSB0dXR0ZSBsZSBwcm9wcmlldMOgIHBlciBiZW5lXHJcbiAgICBsZXQgY29sdW1uU2VsZWN0aW9uRGljdGlvbmFyeTogeyBbaWQ6IHN0cmluZ106IHRydWUgfSA9IHt9O1xyXG5cclxuICAgIGlmIChjb2x1bW5zPy5sZW5ndGggPiAwKVxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHVtbnM/Lmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGNvbHVtblNlbGVjdGlvbkRpY3Rpb25hcnlbY29sdW1uc1tpXV0gPSB0cnVlO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgaGRzID0gdGhpcy5wYXJzZUFuZEdldEhlYWRlcnMob2Jqc1tpXSwgY29sdW1uU2VsZWN0aW9uRGljdGlvbmFyeSk7XHJcbiAgICAgIC8vIEFnZ2l1bmdvIGdsaSBoZWFkZXIgZmFjZW5kbyBpbiBtb2RvIGRpIG5vbiBhZ2dpdW5nZXJuZSBtYWkgZHVlIHVndWFsaSBwZXIgbm9uIGRvdmVyIGZhcmUgdW5hIGRpc3RpbmN0IGRvcG9cclxuICAgICAgLy8gY2hlIGNvc3RlcmViYmUgY29tdW5xdWUgcmlzb3JzZS4gVXRpbGl6em8gdW4gZGl6aW9uYXJpbyBkJ2FwcG9nZ2lvIHBlciBsb29rdXAgaXN0YW50YW5laVxyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IGhkcy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIGlmICghaGVhZGVyc0NhY2hlW2hkc1trXS5rZXldKSB7XHJcbiAgICAgICAgICBoZWFkZXJzQ2FjaGVbaGRzW2tdLmtleV0gPSB0cnVlO1xyXG4gICAgICAgICAgaGVhZGVycy5wdXNoKGhkc1trXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb2x1bW5zKVxyXG4gICAgICByZXR1cm4gaGVhZGVycy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gU2UgbWkgYXJyaXZhIGxhIGxpc3RhIGRpIGNvbG9ubmUgbm9uIG1pIGTDoCBzb2xvIGxhIHZpc2liaWxpdMOgLCBtYSBhbmNoZSBsJ29yZGluYW1lbnRvXHJcbiAgICAgIC8vIGxlIGVzcG9ydG8gZGkgY29uc2VndWVuemFcclxuICAgICAgbGV0IG9yZGVyZWRIZWFkZXJzID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCB0aGlzSWQgPSBjb2x1bW5zW2ldO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGhlYWRlcnNbaV0ucHJvcEtleSA9PSB0aGlzSWQpIHtcclxuICAgICAgICAgICAgb3JkZXJlZEhlYWRlcnMucHVzaChoZWFkZXJzW2ldKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvcmRlcmVkSGVhZGVycztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGEgdW5hIGxpc3RhIGRpIG9nZ2V0dGkgZ2VuZXJpY2kgZ2VuZXJhIGdsaSBoZWFkZXIgcGVyIGwnZXNwb3J0YXppb25lIGUgaW50ZWdyYSBvZ25pIG9nZ2V0dG8gY29uIGxlIHByb3ByaWV0w6AgZXNwb3J0YWJpbGkgZGFsbGEgbGlicmVyaWEgKipAY3RybC9uZ3gtY3N2KipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge0dlbmVyaWNJdGVtW119IG9ianMgT2dnZXR0aSBnZW5lcmljaSBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkhlYWRlcnNbXX0gY29sdW1ucyBDb2xvbm5lIHJpY2hpZXN0ZSBkYWxsJ2VzcG9ydGF6aW9uZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDc3ZIZWFkZXJzW119IEhlYWRlciBkaSBlc3BvcnRhemlvbmUgZ2nDoCBvcmRpbmF0aSBjb3JyZXR0YW1lbnRlXHJcbiAgICovXHJcbiAgcHVibGljIHNldHVwRm9yR2VuZXJpY0V4cG9ydChvYmpzOiBHZW5lcmljSXRlbVtdLCBjb2x1bW5zOiBDc3ZIZWFkZXJzW10pOiBDc3ZIZWFkZXJzW10ge1xyXG4gICAgbGV0IGhlYWRlcnM6IENzdkhlYWRlcnNbXSA9IFtdO1xyXG4gICAgaWYgKCFvYmpzIHx8IG9ianMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBoZWFkZXJzO1xyXG5cclxuICAgIC8vIERldm8gcGVyIGZvcnphIGZhcmxvIHBlciB0dXR0aSBnbGkgb2dnZXR0aSBkYXRvIGNoZSBkZXZvIGVzcG9ycmUgbGUgcHJvcHJpZXTDoCBjaGUgbWkgc2Vydm9ubyBkYSBlc3BvcnRhcmVcclxuICAgIG9ianMuZm9yRWFjaCgob2JqLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoaW5kZXggPT0gMClcclxuICAgICAgICBoZWFkZXJzID0gdGhpcy5wYXJzZUFuZEdldEdlbmVyaWNIZWFkZXJzKG9iaiwgY29sdW1ucyk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLnBhcnNlQW5kR2V0R2VuZXJpY0hlYWRlcnMob2JqLCBjb2x1bW5zKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBoZWFkZXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0byB1biBvZ2dldHRvIGdlbmVyaWNvIGdlbmVyYSBnbGkgaGVhZGVyIHBlciBsJ2VzcG9ydGF6aW9uZSBlIGxvIGludGVncmEgY29uIGxlIHByb3ByaWV0w6AgZXNwb3J0YWJpbGkgZGFsbGEgbGlicmVyaWEgKipAY3RybC9uZ3gtY3N2KipcclxuICAgKiBcclxuICAgKiBNZXRvZG8gaW50ZXJubyByaWNoaWFtYXRvIGRhICoqc2V0dXBGb3JHZW5lcmljRXhwb3J0KipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge0dlbmVyaWNJdGVtfSBvYmogT2dnZXR0byBnZW5lcmljbyBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkNvbHVtbltdfSBjb2x1bW5zIENvbG9ubmUgcmljaGllc3RlIGRhbGwnZXNwb3J0YXppb25lXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0NzdkhlYWRlcnNbXX0gSGVhZGVyIGRpIGVzcG9ydGF6aW9uZSBnacOgIG9yZGluYXRpIGNvcnJldHRhbWVudGVcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlQW5kR2V0R2VuZXJpY0hlYWRlcnMob2JqOiBHZW5lcmljSXRlbSwgY29sdW1uczogQ3N2SGVhZGVyc1tdKTogQ3N2SGVhZGVyc1tdIHtcclxuICAgIGlmICghb2JqLnByb3BlcnRpZXMpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIHZhciBoZWFkZXJzOiBDc3ZIZWFkZXJzW10gPSBbXTtcclxuXHJcbiAgICAvL01pcmFjbGUgaW5jb21pbmdcclxuICAgIGNvbHVtbnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgdmFyIHByb3BWYWx1ZSA9IG9iai5wcm9wZXJ0aWVzW3Qua2V5XTtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgdC5rZXkgKyBcIl9leHBcIiwgeyB2YWx1ZTogcHJvcFZhbHVlLCB3cml0YWJsZTogZmFsc2UsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsOiB0LmxhYmVsLCBrZXk6IHQua2V5ICsgXCJfZXhwXCIsIG9yZGVyOiB0Lm9yZGVyLCB0eXBlOiB0LnR5cGUsIHByb3BLZXk6IG51bGwgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL1RpcmF0aSBmdW9yaSB0dXR0aSBnbGkgaGVhZGVyIGZhY2NpbyBzb3J0IHN1bGwnb3JkaW5hbWVudG9cclxuICAgIHJldHVybiBoZWFkZXJzLnNvcnQoKGEsIGIpID0+IHsgcmV0dXJuIGEub3JkZXIgLSBiLm9yZGVyIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0byB1biBvZ2dldHRvIGdlbmVyYSBnbGkgaGVhZGVyIHBlciBsJ2VzcG9ydGF6aW9uZSBlIGxvIGludGVncmEgY29uIGxlIHByb3ByaWV0w6AgZXNwb3J0YWJpbGkgZGFsbGEgbGlicmVyaWEgKipAY3RybC9uZ3gtY3N2KipcclxuICAgKiBcclxuICAgKiBNZXRvZG8gaW50ZXJubyByaWNoaWFtYXRvIGRhICoqc2V0dXBGb3JFeHBvcnQqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBnZW5lcmljbyBkYSBlc3BvcnRhcmVcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Q3N2SGVhZGVyc1tdfSBIZWFkZXIgZGkgZXNwb3J0YXppb25lIGdpw6Agb3JkaW5hdGkgY29ycmV0dGFtZW50ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VBbmRHZXRIZWFkZXJzKG9iajogYW55LCBjb2x1bW5zU2VsZWN0aW9uPzogeyBbaWQ6IHN0cmluZ106IHRydWUgfSk6IENzdkhlYWRlcnNbXSB7XHJcbiAgICB2YXIgaGVhZGVyczogQ3N2SGVhZGVyc1tdID0gW107XHJcblxyXG4gICAgLy8gTWlyYWNsZSBpbmNvbWluZ1xyXG4gICAgbGV0IGV4cG9ydFByb3BzID0gb2JqW2V4cG9ydExpc3RdIHx8IFtdO1xyXG4gICAgaWYgKGV4cG9ydFByb3BzLmxlbmd0aCA9PSAwKVxyXG4gICAgICBjb25zb2xlLndhcm4oXCJbQGVzZmFlbnphL2V4dGVuc2lvbnNdIE5lc3N1bmEgY29sb25uYSBjb25maWd1cmF0YSBkYSBlc3BvcnRhcmUhXCIpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwb3J0UHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHByb3AgPSBleHBvcnRQcm9wc1tpXTtcclxuICAgICAgbGV0IHByb3BCYXNlID0gXCJcIjtcclxuICAgICAgbGV0IHRvQ2FsbDogRnVuY3Rpb247XHJcbiAgICAgIGlmIChwcm9wLmVuZHNXaXRoKGxpc3RDc3ZIZHJQcmVmaXgpKSB7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UobGlzdENzdkhkclByZWZpeCwgJycpO1xyXG4gICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VMaXN0LmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocHJvcC5lbmRzV2l0aChkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4KSkge1xyXG4gICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VEaWN0aW9uYXJ5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UoZGljdGlvbmFyeUNzdkhkclByZWZpeCwgJycpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHByb3AuZW5kc1dpdGgoY3N2VmlzUHJlZml4KSkge1xyXG4gICAgICAgIHByb3BCYXNlID0gcHJvcC5yZXBsYWNlKGNzdlZpc1ByZWZpeCwgJycpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW3Byb3BCYXNlICsgY3N2VmFsdWVOYXZpZ2F0b3JdICE9PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgdG9DYWxsID0gdGhpcy5wYXJzZU9iamVjdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VQcm9wZXJ0eS5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9DYWxsKVxyXG4gICAgICAgIHRvQ2FsbChvYmosIHByb3BCYXNlLCBoZWFkZXJzLCBjb2x1bW5zU2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVhZGVycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHVwIHBlciBsJ2VzcG9ydGF6aW9uZSBkaSB1bmEgc2luZ29sYSBwcm9wcmlldMOgLiBcclxuICAgKiBWaWVuZSBnZW5lcmF0byBsJ2hlYWRlciBlIGxhIHByb3ByaWV0w6AgcmVsYXRpdmEgYWwgdmFsb3JlIGZvcm1hdHRhdG8gbyBub1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZVByb3BlcnR5KG9iajogYW55LCBwcm9wOiBzdHJpbmcsIGhlYWRlcnM6IENzdkhlYWRlcnNbXSwgY29sdW1uc1NlbGVjdGlvbj86IHsgW2lkOiBzdHJpbmddOiB0cnVlIH0pIHtcclxuICAgIGxldCB0b0VtaXQ6IGJvb2xlYW4gPSBvYmpbcHJvcCArIGNzdlZpc1ByZWZpeF07XHJcbiAgICBsZXQgZm9ybWF0OiBzdHJpbmcgPSBvYmpbcHJvcCArIGNzdkZvcm1hdFByZWZpeF07XHJcbiAgICBsZXQgcHJvcEtleSA9IG9ialtwcm9wICsgY3N2UHJvcEtleV07XHJcblxyXG4gICAgaWYgKHByb3BLZXkgJiYgIWNvbHVtbnNTZWxlY3Rpb25bcHJvcEtleV0gJiYgT2JqZWN0LmtleXMoY29sdW1uc1NlbGVjdGlvbikubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIltAZXNmYWVuemEvZXh0ZW5zaW9uc10gQ29sb25uYSBkYSBub24gZXNwb3J0YXJlOiBcIiArIHByb3BLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxibCA9IG9ialtwcm9wICsgY3N2SGRyUHJlZml4XTtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuICAgIGlmICh0b0VtaXQgJiYgbGJsICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIC8vIFNlIG5vbiBobyB1biBmb3JtYXRvIGVzcG9ydG8gZGlyZXR0YW1lbnRlXHJcbiAgICAgIGlmICghZm9ybWF0KSB7XHJcbiAgICAgICAgLy8gU2Ugw6ggdW4gZm9ybWF0byBkYXRhIG1pIGFzc2ljdXJvIGRpIG5vbiBzdGFtcGFyZSBtYWkgdW5hIGRhdGEgMDA6MDA6MDAgYWx0cmltZW50aSBpbiBlc3BvcnRhemlvbmUgdmllbmUgdW5vIHNjaGlmb1xyXG4gICAgICAgIHZhciB2YWwgPSBvYmpbcHJvcF0gPyB0aGlzLmRhdGVzLnRyaW1TZWNvbmRzKG9ialtwcm9wXS50b1N0cmluZygpKSA6IFwiXCI7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCArIFwiX25vZm10XCIsIHsgdmFsdWU6IHZhbCwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsOiBsYmwgPyBsYmwgOiBwcm9wICsgXCJfbm9mbXRcIiwga2V5OiBwcm9wICsgXCJfbm9mbXRcIiwgb3JkZXI6IG9yZGVyLCB0eXBlOiBcInN0cmluZ1wiLCBwcm9wS2V5OiBwcm9wS2V5IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIENhc28gZm9ybWF0byBudW1lcmljb1xyXG4gICAgICAgIGlmIChmb3JtYXQgPT0gXCJGXCIpIHtcclxuICAgICAgICAgIC8vIENoZWNrIGNvbnNpZGVyYW5kbyBsYSBwb3NzaWJpbGl0w6AgZGkgemVyaVxyXG4gICAgICAgICAgbGV0IHZhbCA9IG9ialtwcm9wXSAhPSBudWxsID8gb2JqW3Byb3BdLnRvU3RyaW5nKCkgOiBcIlwiO1xyXG4gICAgICAgICAgLy8gRWxpbWlubyB0dXR0ZSBsZSB2aXJnb2xlIChpbmRpY2F0b3JpIGRpIG1pZ2xpYWlhIHBlciBsYSBjdWx0dXJlIGRlZmF1bHQgZW4tVVMpXHJcbiAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgvLC8sIFwiXCIpO1xyXG4gICAgICAgICAgLy8gSWwgc2luZ29sbyBwdW50byBjaGUgYyfDqCwgc2UgcHJlc2VudGUgKHNlcGFyYXRvcmUgZGVjaW1hbGkpIGxvIHRyYXNmb3JtbyBpbiB2aXJnb2xhXHJcbiAgICAgICAgICBsZXQgdmFsQ29udmVydGVkID0gdmFsLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuXHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wICsgXCJfZm10XCIsIHsgdmFsdWU6IHZhbENvbnZlcnRlZCwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWw6IGxibCA/IGxibCA6IHByb3AgKyBcIl9mbXRcIiwga2V5OiBwcm9wICsgXCJfZm10XCIsIG9yZGVyOiBvcmRlciwgdHlwZTogXCJudW1iZXJcIiwgcHJvcEtleTogcHJvcEtleSB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gU2UgaG8gdW4gZm9ybWF0byBkYXRhIHRyYXNmb3JtbyBpbiBkYXlqcywgZm9ybWF0dG8gZWQgZXNwb3J0b1xyXG4gICAgICAgICAgLy8gUGVyIGxhIHRyYXNmb3JtYXppb25lIGluIGRheWpzIHByb3ZvIHByaW1hIGEgcGFzc2FyZ2xpIGxhIHN0cmluZ2EgZGkgbmV0dG8sIHNwZXJhbmRvIGxhIHJpY29ub3NjYVxyXG4gICAgICAgICAgLy8gU2Ugbm9uIGZ1bnppb25hIHByb3ZvIGEgZGVmaW5pcmdsaSBsYSBmb3JtYXR0YXppb25lIHN0YW5kYXJkIGRlbCBtZXRlcmluZyBwZXIgcXVlbCBsaW5ndWFnZ2lvXHJcbiAgICAgICAgICBsZXQgdmFsID0gdGhpcy5kYXRlcy5nZXRGb3JtYXR0ZWQob2JqW3Byb3BdLCBmb3JtYXQubGVuZ3RoIDw9IDEwLCBmb3JtYXQubGVuZ3RoID4gMTYpO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCArIFwiX2ZtdFwiLCB7IHZhbHVlOiB2YWwgPz8gXCJcIiwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWw6IGxibCA/IGxibCA6IHByb3AgKyBcIl9mbXRcIiwga2V5OiBwcm9wICsgXCJfZm10XCIsIG9yZGVyOiBvcmRlciwgdHlwZTogXCJkYXRlXCIsIHByb3BLZXk6IHByb3BLZXkgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR1cCBwZXIgbCdlc3BvcnRhemlvbmUgZGkgdW5hIHNpbmdvbGEgcHJvcHJpZXTDoCBkYSB1biBvZ2dldHRvLiBcclxuICAgKiBWaWVuZSBnZW5lcmF0byBsJ2hlYWRlciBlIGxhIHByb3ByaWV0w6AgcmVsYXRpdmEgYWwgdmFsb3JlIGZvcm1hdHRhdG8gbyBuby4gXHJcbiAgICogXHJcbiAgICogUGVyIG90dGVuZXJlIGlsIHZhbG9yZSBlIGwnaGVhZGVyIGRlbGxhIHByb3ByaWV0w6AgdmVuZ29ubyB1dGlsaXp6YXRpIGkgbmF2aWdhdG9yaSBhdXRvLWdlbmVyYXRpIG5lbCBkZWNvcmF0b3JlICoqRXhwb3J0QXMqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZU9iamVjdChvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10pIHtcclxuICAgIC8vc2UgcXVlc3RhIHByb3ByaWV0w6AgaGEgdW4gbmF2aWdhdG9yIHNpZ25pZmljYSBjaGUgZGVyaXZhIGRhIHVuIG9nZ2V0dG8gaW50ZXJubywgcmVjdXBlcm8gaWwgdmFsb3JlIGluIHF1ZXN0YSBmYXNlIGRhdG8gY2hlIHByaW1hIG5vbiBjZSBsJ2hvXHJcbiAgICBsZXQgdmFsdWVuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGNzdlZhbHVlTmF2aWdhdG9yXTtcclxuXHJcbiAgICAvL0VzLiBkaSB2YWx1ZW5hdmlnYXRvciBvYmouc3Vib2JqLnN1YnN1Ym9iai5wcm9wZXJ0eVxyXG4gICAgbGV0IGptcHMgPSB2YWx1ZW5hdmlnYXRvci5zcGxpdChcIi5cIik7XHJcbiAgICAvL01pIGNsb25vIGwnb2dnZXR0byBvcmlnaW5hbGUgcGVyIG5vbiB1Y2NpZGVyZ2xpIGkgcmlmZXJpbWVudGlcclxuICAgIGxldCBjbG9uZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XHJcbiAgICAvL1NhbHRvIHJpY29yc2l2YW1lbnRlIHN1IG1lIHN0ZXNzbyBwZXIgYXJyaXZhcmUgYWxsYSBwcm9wcmlldMOgXHJcbiAgICAvL1NhbHRvIDEgPiBkaXZlbnRhIG9ialxyXG4gICAgLy9TYWx0byAyID4gZGl2ZW50YSBvYmouc3Vib2JqXHJcbiAgICAvL2VjYy4uLlxyXG4gICAgam1wcy5mb3JFYWNoKHBwID0+IHsgY2xvbmUgPSBjbG9uZVtwcF07IH0pO1xyXG5cclxuICAgIC8vVmFsb3JlIGZpbmFsZSA6RFxyXG4gICAgbGV0IHZhbHVlID0gY2xvbmU7XHJcbiAgICBsZXQgbGJsID0gb2JqW3Byb3AgKyBjc3ZIZHJQcmVmaXhdO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIC8vU2UgcGVyIHF1ZXN0YSBwcm9wcmlldMOgIGhvIHVuIGZvcm1hdG8gbG8gYXBwbGljb1xyXG4gICAgbGV0IGZvcm1hdDogc3RyaW5nID0gb2JqW3Byb3AgKyBjc3ZGb3JtYXRQcmVmaXhdO1xyXG4gICAgbGV0IHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnZGF0ZScgPSBcInN0cmluZ1wiO1xyXG4gICAgaWYgKGZvcm1hdCA9PSBcIkZcIikge1xyXG4gICAgICBsZXQgdmFsID0gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLywvLCBcIlwiKTtcclxuICAgICAgdmFsdWUgPSB2YWwucmVwbGFjZShcIi5cIiwgXCIsXCIpO1xyXG4gICAgICB0eXBlID0gXCJudW1iZXJcIjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvcm1hdCkge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZGF0ZXMuZ2V0Rm9ybWF0dGVkKHZhbHVlLCBmb3JtYXQubGVuZ3RoIDw9IDEwLCBmb3JtYXQubGVuZ3RoID4gMTYpO1xyXG4gICAgICB0eXBlID0gXCJkYXRlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgeyB2YWx1ZTogdmFsdWUsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsOiBsYmwgPyBsYmwgOiBwcm9wLCBrZXk6IHByb3AsIG9yZGVyOiBvcmRlciwgdHlwZTogdHlwZSwgcHJvcEtleTogbnVsbCB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHVwIHBlciBsJ2VzcG9ydGF6aW9uZSBkaSB1bmEgbGlzdGEgZGkgdmFsb3JpIHBpdm90dGF0aSBkaW5hbWljYW1lbnRlOlxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGlsIHZhbG9yZSB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBSZWN1cGVybyBsJ2hlYWRlciB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBDb24gaWwgdmFsb3JlIGNpIGNyZW8gbGEgcHJvcGVydHlcclxuICAgKiBcclxuICAgKiA9PiBDb24gbCdoZWFkZXIgZSBpbCByaWZlcmltZW50byBhbGxhIHByb3BlcnR5IGFwcGVuYSBjcmVhdGEgY3JlbyB1biByZWNvcmQgbmVnbGkgaGVhZGVyIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUxpc3Qob2JqOiBhbnksIHByb3A6IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdKSB7XHJcbiAgICBsZXQgaGVhZGVybmF2aWdhdG9yID0gb2JqW3Byb3AgKyBsaXN0Q3N2SGRyUHJlZml4XTtcclxuICAgIGxldCB2YWx1ZW5hdmlnYXRvciA9IG9ialtwcm9wICsgbGlzdENzdlZhbFByZWZpeF07XHJcbiAgICBsZXQgdmFsdWVmb3JtYXQgPSBvYmpbcHJvcCArIGxpc3RDc3ZWYWxGb3JtYXRdO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIHZhciBqdW1wczogc3RyaW5nW10sIHRtcFJlczogYW55O1xyXG4gICAgdmFyIG9ianM6IGFueVtdID0gb2JqW3Byb3BdO1xyXG5cclxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG9ianMubGVuZ3RoOyBpZHgrKykge1xyXG4gICAgICBsZXQgbGlzdGl0ZW0gPSBvYmpzW2lkeF07XHJcblxyXG4gICAgICB2YXIgaGVhZGVyc3BsaXQgPSBoZWFkZXJuYXZpZ2F0b3Iuc3BsaXQoXCIgXCIpO1xyXG4gICAgICB2YXIgaGVhZGVyID0gXCJcIjtcclxuXHJcbiAgICAgIC8vIFBlciBsJ2hlYWRlciBzaSBjb25zaWRlcmEgYSBzZSBzdGFudGUgb2duaSBwZXp6byBzZXBhcmF0byBkYSBzcGF6aW8gcGVyIGZhcmUgbGUgY29uY2F0ZW5hemlvbmlcclxuICAgICAgaGVhZGVyc3BsaXQuZm9yRWFjaChwciA9PiB7XHJcbiAgICAgICAganVtcHMgPSBwci5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgdG1wUmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaXN0aXRlbSkpO1xyXG4gICAgICAgIGp1bXBzLmZvckVhY2gocHAgPT4geyB0bXBSZXMgPSB0bXBSZXNbcHBdOyB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFoZWFkZXIpIGhlYWRlciA9IHRtcFJlcztcclxuICAgICAgICBlbHNlIGhlYWRlciArPSBcIiBcIiArIHRtcFJlcztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBqdW1wcyA9IHZhbHVlbmF2aWdhdG9yLnNwbGl0KFwiLlwiKTtcclxuICAgICAgdG1wUmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaXN0aXRlbSkpO1xyXG4gICAgICBqdW1wcy5mb3JFYWNoKHBwID0+IHsgdG1wUmVzID0gdG1wUmVzW3BwXTsgfSk7XHJcbiAgICAgIGxldCB2YWx1ZSA9IHRtcFJlcztcclxuXHJcbiAgICAgIGxldCB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnID0gXCJzdHJpbmdcIjtcclxuICAgICAgaWYgKHZhbHVlZm9ybWF0ID09IFwiRlwiKSB7XHJcbiAgICAgICAgbGV0IHZhbCA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgvLC8sIFwiXCIpO1xyXG4gICAgICAgIHZhbHVlID0gdmFsLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuICAgICAgICB0eXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh2YWx1ZWZvcm1hdCkge1xyXG4gICAgICAgIHZhbHVlID0gdGhpcy5kYXRlcy5nZXRGb3JtYXR0ZWQob2JqW3Byb3BdLCB2YWx1ZWZvcm1hdC5sZW5ndGggPD0gMTAsIHZhbHVlZm9ybWF0Lmxlbmd0aCA+IDE2KTtcclxuICAgICAgICB0eXBlID0gXCJkYXRlXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AgKyBpZHgsIHsgdmFsdWU6IHZhbHVlLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsOiBoZWFkZXIsIGtleTogcHJvcCArIGlkeCwgb3JkZXI6IG9yZGVyICsgaWR4LCB0eXBlOiB0eXBlLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgcGVyIGwnZXNwb3J0YXppb25lIGRpIHVuYSBsaXN0YSBkaSB2YWxvcmkgcGl2b3R0YXRpIGRpbmFtaWNhbWVudGU6XHJcbiAgICogXHJcbiAgICogPT4gUmVjdXBlcm8gaWwgdmFsb3JlIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGwnaGVhZGVyIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBpbCB2YWxvcmUgY2kgY3JlbyBsYSBwcm9wZXJ0eVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBsJ2hlYWRlciBlIGlsIHJpZmVyaW1lbnRvIGFsbGEgcHJvcGVydHkgYXBwZW5hIGNyZWF0YSBjcmVvIHVuIHJlY29yZCBuZWdsaSBoZWFkZXIgZGEgZXNwb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRpIGN1aSBlc3BvcnRhcmUgbGEgcHJvcHJpZXTDoCAqKnByb3AqKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3ByaWV0w6AgZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZIZWFkZXJzfSBoZWFkZXJzIENvbnRlbml0b3JlIGRlZ2xpIGhlYWRlciwgdmVycsOgIHJpZW1waXRvIGRhIHF1ZXN0YSBmdW56aW9uZSBcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlRGljdGlvbmFyeShvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10pIHtcclxuICAgIGxldCBoZWFkZXJuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXhdO1xyXG4gICAgbGV0IHZhbHVlbmF2aWdhdG9yID0gb2JqW3Byb3AgKyBkaWN0aW9uYXJ5Q3N2VmFsUHJlZml4XTtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuXHJcbiAgICB2YXIganVtcHM6IHN0cmluZ1tdLCB0bXBSZXM6IGFueTtcclxuICAgIHZhciBvYmpzOiBhbnlbXSA9IG9ialtwcm9wXTtcclxuXHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBvYmpzLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgbGV0IGxpc3RpdGVtID0gb2Jqc1tpZHhdO1xyXG4gICAgICB2YXIgaGVhZGVyc3BsaXQgPSBoZWFkZXJuYXZpZ2F0b3Iuc3BsaXQoXCIgXCIpO1xyXG4gICAgICB2YXIgaGVhZGVyID0gXCJcIjtcclxuXHJcbiAgICAgIGhlYWRlcnNwbGl0LmZvckVhY2gocHIgPT4ge1xyXG4gICAgICAgIGp1bXBzID0gcHIuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHRtcFJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGlzdGl0ZW0pKTtcclxuICAgICAgICBqdW1wcy5mb3JFYWNoKHBwID0+IHsgdG1wUmVzID0gdG1wUmVzW3BwXTsgfSk7XHJcblxyXG4gICAgICAgIGlmICghaGVhZGVyKSBoZWFkZXIgPSB0bXBSZXM7XHJcbiAgICAgICAgZWxzZSBoZWFkZXIgKz0gXCIgXCIgKyB0bXBSZXM7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdmFyIHZhbHVlc3BsaXQgPSB2YWx1ZW5hdmlnYXRvci5zcGxpdChcIixcIik7XHJcbiAgICAgIHZhbHVlc3BsaXQuZm9yRWFjaCgodCwgaWR4aW50ZXJuYWwpID0+IHtcclxuICAgICAgICB2YXIgbmF2aWcgPSB0LnNwbGl0KFwiLVwiKVsxXTtcclxuICAgICAgICB2YXIgZGVzYyA9IHQuc3BsaXQoXCItXCIpWzBdO1xyXG5cclxuICAgICAgICBqdW1wcyA9IG5hdmlnLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB0bXBSZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxpc3RpdGVtKSk7XHJcbiAgICAgICAganVtcHMuZm9yRWFjaChwcCA9PiB7IHRtcFJlcyA9IHRtcFJlc1twcF07IH0pO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRtcFJlcztcclxuXHJcbiAgICAgICAgbGV0IHByb3BuYW1lID0gcHJvcCArIGlkeC50b1N0cmluZygpICsgaWR4aW50ZXJuYWwudG9TdHJpbmcoKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wbmFtZSwgeyB2YWx1ZTogdmFsdWUsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbDogaGVhZGVyICsgXCIgXCIgKyBkZXNjLCBrZXk6IHByb3BuYW1lLCBvcmRlcjogb3JkZXIgKyBpZHgsIHR5cGU6ICdzdHJpbmcnLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2kgb2NjdXBhIGRlbGxhIGRlc2VyaWFsaXp6YXppb25lIGRlZ2xpIG9nZ2V0dGkgZGEgZXNwb3J0YXJlLiBNZXNzbyBhIGxpdmVsbG8gZGkgbGlicmVyaWEgaW4gbW9kbyBjaGUgcXVhbG9yYSBjaSBmb3NzZSBkYSBjYW1iaWFyZSBsaWJyZXJpYSBcclxuICAgKiB0dXR0ZSBsZSBtYW51dGVuemlvbmkgc2lhbm8gY29uY2VudHJhdGUgcXVpXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkYSBkZXNlcmlhbGl6emFyZVxyXG4gICAqIEBwYXJhbSB7YW55fSB0eXBlIFRpcG8gZGEgdXNhcmUgY29tZSBwcm90b3RpcG8gcGVyIGxhIGRlc2VyaWFsaXp6YXppb25lXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge2FueX0gT2dnZXR0aSBkZXNlcmlhbGl6emF0aVxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZXNlcmlhbGl6ZUZvckV4cG9ydChpdGVtczogYW55W10sIHR5cGU6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gRGVzZXJpYWxpemUoaXRlbXMsIHR5cGUpO1xyXG4gIH1cclxufSJdfQ==
507
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHRlbnNpb25zL3NyYy9saWIvc2VydmljZXMvZXh0ZW5zaW9ucy5leHBvcnRzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTztBQUNQLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsaUJBQWlCO0FBRWpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixFQUFFLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BQLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU16RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxTQUFpQixJQUFJLEVBQUUsVUFBa0IsSUFBSSxFQUFFLEVBQUUsQ0FDckcsQ0FBQyxNQUFjLEVBQUUsV0FBbUIsRUFBRSxFQUFFO0lBQ3RDLElBQUksTUFBTTtRQUNSLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFdBQVcsR0FBRyxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUs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QztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksb0JBQW9CLENBQUMsS0FBWSxFQUFFLElBQVM7UUFDakQsT0FBTyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7OztZQS9YRixVQUFVOzs7WUF0S0YsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXJcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBMaWJzXHJcbmltcG9ydCB7IERlc2VyaWFsaXplIH0gZnJvbSBcImNlcmlhbGl6ZVwiO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuXHJcbmltcG9ydCB7IGV4cG9ydExpc3QsIGNzdkZvcm1hdFByZWZpeCwgY3N2SGRyUHJlZml4LCBjc3ZPcmRQcmVmaXgsIGNzdlZhbHVlTmF2aWdhdG9yLCBjc3ZWaXNQcmVmaXgsIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXgsIGRpY3Rpb25hcnlDc3ZWYWxQcmVmaXgsIGxpc3RDc3ZIZHJQcmVmaXgsIGxpc3RDc3ZWYWxGb3JtYXQsIGxpc3RDc3ZWYWxQcmVmaXgsIGNzdlByb3BLZXkgfSBmcm9tIFwiLi4vbW9kZWxzL0V4cG9ydENvbnN0c1wiO1xyXG5pbXBvcnQgeyBEYXRlU2VydmljZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy5kYXRlcy5zZXJ2aWNlJztcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQ3N2SGVhZGVycyB9IGZyb20gXCIuLi9tb2RlbHMvQ3N2SGVhZGVyc1wiO1xyXG5pbXBvcnQgeyBHZW5lcmljSXRlbSB9IGZyb20gXCIuLi9tb2RlbHMvR2VuZXJpY0l0ZW1cIjtcclxuXHJcbi8qKlxyXG4gKiBEZWNvcmF0b3JlIGRpIGVzcG9ydGF6aW9uZSB1dGlsaXp6YWJpbGUgc3UgdW5hIHByb3ByaWV0w6Agc2luZ29sYS4gXHJcbiAqIFZlcnJhbm5vIGdlbmVyYXRlIDMgcHJvcHJpZXTDoCBjaGUgZ2VzdGlyYW5ubyBsJ2VzcG9ydGF6aW9uZTogKHByb3AsIHByb3BfY3N2dmlzLCBwcm9wX2NzdmhkcikuIFxyXG4gKiBcclxuICogQWQgZXNlbXBpbywgZGEgcXVlc3RhIGNvbmZpZ3VyYXppb25lOlxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogYGBgXHJcbiAqIEBFeHBvcnQodHJ1ZSwgXCJNeUhlYWRlclwiKVxyXG4gKiBjaWFvOiBzdHJpbmc7XHJcbiAqIGBgYFxyXG4gKiBcclxuICogTmFzY2VyYW5ubyBsZSBzZWd1ZW50aSBwcm9wcmlldMOgIG5lbGwnb2dnZXR0byBlc3BvcnRhYmlsZTpcclxuICogXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYFxyXG4gKiBjaWFvX2NzdnZpczogc3RyaW5nOyA9PiB0cnVlXHJcbiAqIGNpYW86IHN0cmluZztcclxuICogY2lhb19jc3ZoZHI6IHN0cmluZyA9PiBcIk15SGVhZGVyXCJcclxuICogYGBgXHJcbiAqIFxyXG4gKiBAcGFyYW0ge251bWJlcn0gb3JkZXIgT3JkaW5lIGRpIGVzcG9ydGF6aW9uZS4gUGnDuSBwaWNjb2xvIMOoLCBwcmltYSBhcHBhcmUgaWwgdmFsb3JlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXIgVGl0b2xvIGRlbGxhIGNvbG9ubmEgbmVsIGZpbGUgQ1NWIGVzcG9ydGF0b1xyXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IEZvcm1hdG8gZGkgZXNwb3J0YXppb25lLiBQdcOyIGVzc2VyZSB1biBmb3JtYXRvIGRhdGEgcGVyIGkgY2FtcGkgZGF0YSBvICdGJyBwZXIgaSBjYW1waSBmbG9hdGluZyBwb2ludFxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9ydCA9IChvcmRlcjogbnVtYmVyLCBoZWFkZXI6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcgPSBudWxsLCB0YWJsZWlkOiBzdHJpbmcgPSBudWxsKSA9PlxyXG4gICh0YXJnZXQ6IE9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKGZvcm1hdClcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZGb3JtYXRQcmVmaXgsIHsgdmFsdWU6IGZvcm1hdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBjc3ZPcmRQcmVmaXgsIHsgdmFsdWU6IG9yZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdlZpc1ByZWZpeCwgeyB2YWx1ZTogISFoZWFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2SGRyUHJlZml4LCB7IHZhbHVlOiBoZWFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIGlmKHRhYmxlaWQpXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2UHJvcEtleSwgeyB2YWx1ZTogdGFibGVpZCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgIGlmICh0YXJnZXRbZXhwb3J0TGlzdF0pXHJcbiAgICAgIHRhcmdldFtleHBvcnRMaXN0XS5wdXNoKHByb3BlcnR5S2V5ICsgY3N2VmlzUHJlZml4KTtcclxuICAgIGVsc2VcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdID0gW3Byb3BlcnR5S2V5ICsgY3N2VmlzUHJlZml4XVxyXG4gIH07XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBkaSBlc3BvcnRhemlvbmUgdXRpbGl6emFiaWxlIHN1IHVuIG9nZ2V0dG8uIFxyXG4gKiBQZXIgb2duaSBwcm9wcmlldMOgIGRlbGwnb2dnZXR0byB2ZXJyYW5ubyBnZW5lcmF0ZSAzIHByb3ByaWV0w6AgY2hlIGdlc3RpcmFubm8gbCdlc3BvcnRhemlvbmU6IChwcm9wLCBwcm9wX2NzdnZpcywgcHJvcF9jc3ZoZHIpLiBcclxuICogUGVyIGVzc2VyZSBlc3BvcnRhdGUsIGxlIHByb3ByaWV0w6AgZGVsbCdvZ2dldHRvIGRldm9ubyBlc3NlcmUgbWFyY2F0ZSBjb24gaSBEZWNvcmF0b3JpIGRpIGVzcG9ydGF6aW9uZVxyXG4gKiBcclxuICogQWQgZXNlbXBpbywgZGEgcXVlc3RhIGNvbmZpZ3VyYXppb25lOlxyXG4gKiBcclxuICogQGV4YW1wbGVcclxuICogYGBgXHJcbiAqIE15T2JqIHtcclxuICogICAgIEBFeHBvcnQodHJ1ZSwgXCJNeUhlYWRlclwiKVxyXG4gKiAgICAgY2lhbzogc3RyaW5nO1xyXG4gKiB9XHJcbiAqIFxyXG4gKiBARXhwb3J0T2JqZWN0KHRydWUsIFwiTXlIZWFkZXJcIilcclxuICogdGVzdDogTXlPYmo7IFxyXG4gKiBgYGBcclxuICogXHJcbiAqIE5hc2NlcmFubm8gbGUgc2VndWVudGkgcHJvcHJpZXTDoCBuZWxsJ29nZ2V0dG8gZXNwb3J0YWJpbGU6XHJcbiAqIFxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBcclxuICogdGVzdGNpYW86IHN0cmluZzsgPT4gVmFsb3JlIGRpIE15T2JqLmNpYW9cclxuICogdGVzdGNpYW9fY3N2dmlzOiBzdHJpbmc7ID0+IHRydWVcclxuICogdGVzdGNpYW9fY3N2aGRyOiBzdHJpbmcgPT4gXCJNeUhlYWRlclwiIFxyXG4gKiBgYGBcclxuICpcclxuICogQHBhcmFtIHtudW1iZXJ9IG9yZGVyIE9yZGluZSBkaSBlc3BvcnRhemlvbmUuIFBpw7kgcGljY29sbyDDqCwgcHJpbWEgYXBwYXJlIGlsIHZhbG9yZVxyXG4gKiBAcGFyYW0ge2FueX0gdHlwZSBUaXBvIGRhIGVzcG9ydGFyZVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9ydEFzID0gKG9yZGVyOiBudW1iZXIsIHR5cGU6IGFueSkgPT5cclxuICAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcclxuICAgIHZhciB0ID0gbmV3IHR5cGUoKTtcclxuICAgIHZhciBwcm9wcyA9IHRbZXhwb3J0TGlzdF07XHJcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspe1xyXG4gICAgICBsZXQgcHJvcCA9IHByb3BzW2ldLnJlcGxhY2UoY3N2VmlzUHJlZml4LCAnJyk7XHJcbiAgICAgIGlmICh0eXBlb2YgdFtwcm9wICsgY3N2VmlzUHJlZml4XSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIHZhciB0b0VtaXQ6IGJvb2xlYW4gPSB0W3Byb3AgKyBjc3ZWaXNQcmVmaXhdO1xyXG4gICAgICAgIHZhciBsYmwgPSB0W3Byb3AgKyBjc3ZIZHJQcmVmaXhdO1xyXG4gICAgICAgIHZhciBmb3JtYXQgPSB0W3Byb3AgKyBjc3ZGb3JtYXRQcmVmaXhdO1xyXG4gICAgICAgIHZhciBvcmRlclByb3AgPSB0W3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG4gICAgICAgIGlmIChmb3JtYXQpXHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZGb3JtYXRQcmVmaXgsIHsgdmFsdWU6IGZvcm1hdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG5cclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZPcmRQcmVmaXgsIHsgdmFsdWU6IG9yZGVyUHJvcCArIG9yZGVyLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBwcm9wLCB7IHZhbHVlOiBudWxsLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWYWx1ZU5hdmlnYXRvciwgeyB2YWx1ZTogcHJvcGVydHlLZXkgKyBcIi5cIiArIHByb3AsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWaXNQcmVmaXgsIHsgdmFsdWU6IHRvRW1pdCwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgcHJvcCArIGNzdkhkclByZWZpeCwgeyB2YWx1ZTogbGJsLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcblxyXG4gICAgICAgIGlmICh0YXJnZXRbZXhwb3J0TGlzdF0pXHJcbiAgICAgICAgICB0YXJnZXRbZXhwb3J0TGlzdF0ucHVzaChwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWaXNQcmVmaXgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRhcmdldFtleHBvcnRMaXN0XSA9IFtwcm9wZXJ0eUtleSArIHByb3AgKyBjc3ZWaXNQcmVmaXhdXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuLyoqXHJcbiAqIERlY29yYXRvcmUgZGkgZXNwb3J0YXppb25lIHV0aWxpenphYmlsZSBzdSB1bmEgbGlzdGEsIFxyXG4gKiBzaSB1dGlsaXp6YW5vIDIgbmF2aWdhdG9yIHJpc3BldHRpdmFtZW50ZSBwZXIgbGEgdmFsb3JpenphemlvbmUgZGVsbCdIZWFkZXIgZSBkZWwgVmFsb3JlIGUgXHJcbiAqIHBlciBvZ25pIGVsZW1lbnRvIGRlbGwnYXJyYXkgdmVycmFubm8gZ2VuZXJhdGUgMyBwcm9wcmlldMOgIGNoZSBnZXN0aXJhbm5vIGwnZXNwb3J0YXppb25lOiAocHJvcCwgcHJvcF9jc3Z2aXMsIHByb3BfY3N2aGRyKVxyXG4gKiBcclxuICogQVRURU5aSU9ORTogR2xpIG9nZ2V0dGkgZXNwb3J0YXRpIGluIHF1ZXN0YSBtb2RhbGl0w6Agbm9uIGRldm9ubyBwcmVzZW50YXJlIGFsdHJpIHRhZyBkaSB0aXBvIEBFeHBvcnR7Li4ufSBhbGwnaW50ZXJuby4gRmEgdHV0dG8gcXVlc3RvIGRlY29yYXRvcmVcclxuICogXHJcbiAqIEkgbmF2aWdhdG9yIGhhbm5vIHF1ZXN0YSBjb252ZW56aW9uZTpcclxuICogXHJcbiAqIC4gLS0+IGRpdmlkZSBkdWUgcHJvcHJpZXTDoCBkYSByaWNoaWFtYXJlIGNvbnNlY3V0aXZhbWVudGU6IFwiYS5iXCIgcmljaGlhbWVyw6AgXCJvYmouYS5iXCI7XHJcbiAqIFxyXG4gKiB8IC0tPiBkaXZpZGUgcGnDuSBwcm9wcmlldMOgIHBlciBsZSBjb25jYXRlbmF6aW9uaSBjb24gdW5vIHNwYXppbyBmcmEgdW5hIGUgbCdhbHRyYTogXCJyZWdkZXNjfHNsaWNlLnNsaWNlbmFtZVwiIGRpdmVudGVyw6Agb2JqLnJlZ2Rlc2MgKyBcIiBcIiArIG9iai5zbGljZS5zbGljZW5hbWVcclxuICogXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcmRlciBPcmRpbmUgZGkgZXNwb3J0YXppb25lLiBQacO5IHBpY2NvbG8gw6gsIHByaW1hIGFwcGFyZSBpbCB2YWxvcmVcclxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlcm5hdmlnYXRvciBOYXZpZ2F0b3IgY29sIGNvbXBpdG8gZGkgc2VsZXppb25hcmUgaWwgdGl0b2xvIHBlciBsYSBjb2xvbm5hXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZW5hdmlnYXRvciBOYXZpZ2F0b3IgY29sIGNvbXBpdG8gZGkgc2VsZXppb25hcmUgaWwgdmFsb3JlIHBlciBsYSBjb2xvbm5hXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZWZvcm1hdCBGb3JtYXRvIGRpIGVzcG9ydGF6aW9uZSBwZXIgaSB2YWxvcmkgc2VsZXppb25hdGkgZGFsICoqdmFsdWVuYXZpZ2F0b3IqKi4gUHXDsiBlc3NlcmUgdW4gZm9ybWF0byBkYXRhIHBlciBpIGNhbXBpIGRhdGEgbyAnRicgcGVyIGkgY2FtcGkgZmxvYXRpbmcgcG9pbnRcclxuICovXHJcbmV4cG9ydCBjb25zdCBFeHBvcnRMaXN0ID0gKG9yZGVyOiBudW1iZXIsIGhlYWRlcm5hdmlnYXRvcjogc3RyaW5nLCB2YWx1ZW5hdmlnYXRvcjogc3RyaW5nLCB2YWx1ZWZvcm1hdDogc3RyaW5nID0gbnVsbCkgPT5cclxuICAodGFyZ2V0OiBPYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgY3N2T3JkUHJlZml4LCB7IHZhbHVlOiBvcmRlciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBsaXN0Q3N2VmFsUHJlZml4LCB7IHZhbHVlOiB2YWx1ZW5hdmlnYXRvciwgd3JpdGFibGU6IGZhbHNlIH0pO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkgKyBsaXN0Q3N2SGRyUHJlZml4LCB7IHZhbHVlOiBoZWFkZXJuYXZpZ2F0b3IsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgbGlzdENzdlZhbEZvcm1hdCwgeyB2YWx1ZTogdmFsdWVmb3JtYXQsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuXHJcbiAgICBpZiAodGFyZ2V0W2V4cG9ydExpc3RdKVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0ucHVzaChwcm9wZXJ0eUtleSArIGxpc3RDc3ZIZHJQcmVmaXgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0YXJnZXRbZXhwb3J0TGlzdF0gPSBbcHJvcGVydHlLZXkgKyBsaXN0Q3N2SGRyUHJlZml4XVxyXG4gIH07XHJcblxyXG4vKipcclxuICogRGVjb3JhdG9yZSBkaSBlc3BvcnRhemlvbmUgdXRpbGl6emFiaWxlIHN1IHVuIGRpemlvbmFyaW8uIFNlIGFkIGVzZW1waW8gc2kgdm9nbGlvbm8gZ2VuZXJhcmUgbGUgY29sb25uZVxyXG4gKiBcclxuICogVmFsb3JlIEEgPSAxXHJcbiAqIFxyXG4gKiBWYWxvcmUgQiA9IDJcclxuICogXHJcbiAqIFZhbG9yZSBDID0gM1xyXG4gKiBcclxuICogcGFydGVuZG8gZGEgdW4gb2dnZXR0byBpbml6aWFsZSB7IFZhbG9yZSB7IEE6IDEsIEI6IDIsIEM6IDMgfSB9XHJcbiAqIFxyXG4gKiBAcGFyYW0ge251bWJlcn0gb3JkZXIgT3JkaW5lIGRpIGVzcG9ydGF6aW9uZS4gUGnDuSBwaWNjb2xvIMOoLCBwcmltYSBhcHBhcmUgaWwgdmFsb3JlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJuYXZpZ2F0b3IgTmF2aWdhdG9yIGNvbCBjb21waXRvIGRpIHNlbGV6aW9uYXJlIGlsIHRpdG9sbyBwZXIgbGEgY29sb25uYVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVuYXZpZ2F0b3IgTmF2aWdhdG9yIGNvbCBjb21waXRvIGRpIHNlbGV6aW9uYXJlIGlsIHZhbG9yZSBwZXIgbGEgY29sb25uYVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IEV4cG9ydERpY3Rpb25hcnkgPSAob3JkZXI6IG51bWJlciwgaGVhZGVybmF2aWdhdG9yOiBzdHJpbmcsIHZhbHVlbmF2aWdhdG9yOiBzdHJpbmcpID0+XHJcbiAgKHRhcmdldDogT2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSArIGNzdk9yZFByZWZpeCwgeyB2YWx1ZTogb3JkZXIsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgZGljdGlvbmFyeUNzdlZhbFByZWZpeCwgeyB2YWx1ZTogdmFsdWVuYXZpZ2F0b3IsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5ICsgZGljdGlvbmFyeUNzdkhkclByZWZpeCwgeyB2YWx1ZTogaGVhZGVybmF2aWdhdG9yLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcblxyXG4gICAgaWYgKHRhcmdldFtleHBvcnRMaXN0XSlcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdLnB1c2gocHJvcGVydHlLZXkgKyBkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4KTtcclxuICAgIGVsc2VcclxuICAgICAgdGFyZ2V0W2V4cG9ydExpc3RdID0gW3Byb3BlcnR5S2V5ICsgZGljdGlvbmFyeUNzdkhkclByZWZpeF1cclxuICB9O1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgY2hlIHNpIG9jY3VwYSBkZWxsJ2VzcG9ydGF6aW9uZSBkZWdsaSBvZ2dldHRpIG1hcmNhdGkgZGFpIERlY29yYXRvcmkgKipFeHBvcnREaWN0aW9uYXJ5KiosICoqRXhwb3J0TGlzdCoqLCAqKkV4cG9ydEFzKiogbyAqKkV4cG9ydCoqXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBFeHBvcnRTZXJ2aWNlIHtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29zdHJ1dHRvcmVcclxuICAgKiBcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZXM6IERhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0YSB1bmEgbGlzdGEgZGkgb2dnZXR0aSBnZW5lcmEgZ2xpIGhlYWRlciBwZXIgbCdlc3BvcnRhemlvbmUgZSBpbnRlZ3JhIG9nbmkgb2dnZXR0byBjb24gbGUgcHJvcHJpZXTDoCBlc3BvcnRhYmlsaSBkYWxsYSBsaWJyZXJpYSAqKkBjdHJsL25neC1jc3YqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55W119IG9ianMgT2dnZXR0aSBkYSBlc3BvcnRhcmVcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Q3N2SGVhZGVyc1tdfSBIZWFkZXIgZGkgZXNwb3J0YXppb25lIGdpw6Agb3JkaW5hdGkgY29ycmV0dGFtZW50ZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXR1cEZvckV4cG9ydChvYmpzOiBhbnlbXSwgY29sdW1uczogc3RyaW5nW10gPSBbXSk6IENzdkhlYWRlcnNbXSB7XHJcbiAgICBsZXQgaGVhZGVyczogQ3N2SGVhZGVyc1tdID0gW107XHJcbiAgICBsZXQgaGVhZGVyc0NhY2hlID0ge307XHJcblxyXG4gICAgaWYgKCFvYmpzIHx8IG9ianMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBoZWFkZXJzO1xyXG5cclxuICAgIC8vIERldm8gcGVyIGZvcnphIGZhcmxvIHBlciB0dXR0aSBnbGkgb2dnZXR0aSBkYXRvIGNoZSBkZXZvIGVzcG9ycmUgbGUgcHJvcHJpZXTDoCBjaGUgbWkgc2Vydm9ubyBkYSBlc3BvcnRhcmVcclxuICAgIC8vIEdsaSBoZWFkZXIgbGkgcmFjY29sZ28gdHV0dGkgcG9pIGZhY2NpbyB1YW4gZGlzdGluY3QgaW4gbW9kbyBkYSBlc3BvcnRhcmUgdHV0dGUgbGUgcHJvcHJpZXTDoCBwZXIgYmVuZVxyXG4gICAgbGV0IGNvbHVtblNlbGVjdGlvbkRpY3Rpb25hcnk6IHsgW2lkOiBzdHJpbmddOiB0cnVlIH0gPSB7fTtcclxuXHJcbiAgICBpZiAoY29sdW1ucz8ubGVuZ3RoID4gMClcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zPy5sZW5ndGg7IGkrKylcclxuICAgICAgICBjb2x1bW5TZWxlY3Rpb25EaWN0aW9uYXJ5W2NvbHVtbnNbaV1dID0gdHJ1ZTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGhkcyA9IHRoaXMucGFyc2VBbmRHZXRIZWFkZXJzKG9ianNbaV0sIGNvbHVtblNlbGVjdGlvbkRpY3Rpb25hcnkpO1xyXG4gICAgICAvLyBBZ2dpdW5nbyBnbGkgaGVhZGVyIGZhY2VuZG8gaW4gbW9kbyBkaSBub24gYWdnaXVuZ2VybmUgbWFpIGR1ZSB1Z3VhbGkgcGVyIG5vbiBkb3ZlciBmYXJlIHVuYSBkaXN0aW5jdCBkb3BvXHJcbiAgICAgIC8vIGNoZSBjb3N0ZXJlYmJlIGNvbXVucXVlIHJpc29yc2UuIFV0aWxpenpvIHVuIGRpemlvbmFyaW8gZCdhcHBvZ2dpbyBwZXIgbG9va3VwIGlzdGFudGFuZWlcclxuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBoZHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBpZiAoIWhlYWRlcnNDYWNoZVtoZHNba10ua2V5XSkge1xyXG4gICAgICAgICAgaGVhZGVyc0NhY2hlW2hkc1trXS5rZXldID0gdHJ1ZTtcclxuICAgICAgICAgIGhlYWRlcnMucHVzaChoZHNba10pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghY29sdW1ucyB8fCBjb2x1bW5zLmxlbmd0aCA9PSAwKVxyXG4gICAgICByZXR1cm4gaGVhZGVycy5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gU2UgbWkgYXJyaXZhIGxhIGxpc3RhIGRpIGNvbG9ubmUgbm9uIG1pIGTDoCBzb2xvIGxhIHZpc2liaWxpdMOgLCBtYSBhbmNoZSBsJ29yZGluYW1lbnRvXHJcbiAgICAgIC8vIGxlIGVzcG9ydG8gZGkgY29uc2VndWVuemFcclxuICAgICAgbGV0IG9yZGVyZWRIZWFkZXJzID0gW107XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCB0aGlzSWQgPSBjb2x1bW5zW2ldO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgaWYgKGhlYWRlcnNbaV0ucHJvcEtleSA9PSB0aGlzSWQpIHtcclxuICAgICAgICAgICAgb3JkZXJlZEhlYWRlcnMucHVzaChoZWFkZXJzW2ldKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBvcmRlcmVkSGVhZGVycztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGEgdW5hIGxpc3RhIGRpIG9nZ2V0dGkgZ2VuZXJpY2kgZ2VuZXJhIGdsaSBoZWFkZXIgcGVyIGwnZXNwb3J0YXppb25lIGUgaW50ZWdyYSBvZ25pIG9nZ2V0dG8gY29uIGxlIHByb3ByaWV0w6AgZXNwb3J0YWJpbGkgZGFsbGEgbGlicmVyaWEgKipAY3RybC9uZ3gtY3N2KipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge0dlbmVyaWNJdGVtW119IG9ianMgT2dnZXR0aSBnZW5lcmljaSBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkhlYWRlcnNbXX0gY29sdW1ucyBDb2xvbm5lIHJpY2hpZXN0ZSBkYWxsJ2VzcG9ydGF6aW9uZVxyXG4gICAqIFxyXG4gICAqIEByZXR1cm5zIHtDc3ZIZWFkZXJzW119IEhlYWRlciBkaSBlc3BvcnRhemlvbmUgZ2nDoCBvcmRpbmF0aSBjb3JyZXR0YW1lbnRlXHJcbiAgICovXHJcbiAgcHVibGljIHNldHVwRm9yR2VuZXJpY0V4cG9ydChvYmpzOiBHZW5lcmljSXRlbVtdLCBjb2x1bW5zOiBDc3ZIZWFkZXJzW10pOiBDc3ZIZWFkZXJzW10ge1xyXG4gICAgbGV0IGhlYWRlcnM6IENzdkhlYWRlcnNbXSA9IFtdO1xyXG4gICAgaWYgKCFvYmpzIHx8IG9ianMubGVuZ3RoID09IDApXHJcbiAgICAgIHJldHVybiBoZWFkZXJzO1xyXG5cclxuICAgIC8vIERldm8gcGVyIGZvcnphIGZhcmxvIHBlciB0dXR0aSBnbGkgb2dnZXR0aSBkYXRvIGNoZSBkZXZvIGVzcG9ycmUgbGUgcHJvcHJpZXTDoCBjaGUgbWkgc2Vydm9ubyBkYSBlc3BvcnRhcmVcclxuICAgIG9ianMuZm9yRWFjaCgob2JqLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoaW5kZXggPT0gMClcclxuICAgICAgICBoZWFkZXJzID0gdGhpcy5wYXJzZUFuZEdldEdlbmVyaWNIZWFkZXJzKG9iaiwgY29sdW1ucyk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLnBhcnNlQW5kR2V0R2VuZXJpY0hlYWRlcnMob2JqLCBjb2x1bW5zKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBoZWFkZXJzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0byB1biBvZ2dldHRvIGdlbmVyaWNvIGdlbmVyYSBnbGkgaGVhZGVyIHBlciBsJ2VzcG9ydGF6aW9uZSBlIGxvIGludGVncmEgY29uIGxlIHByb3ByaWV0w6AgZXNwb3J0YWJpbGkgZGFsbGEgbGlicmVyaWEgKipAY3RybC9uZ3gtY3N2KipcclxuICAgKiBcclxuICAgKiBNZXRvZG8gaW50ZXJubyByaWNoaWFtYXRvIGRhICoqc2V0dXBGb3JHZW5lcmljRXhwb3J0KipcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge0dlbmVyaWNJdGVtfSBvYmogT2dnZXR0byBnZW5lcmljbyBkYSBlc3BvcnRhcmVcclxuICAgKiBAcGFyYW0ge0NzdkNvbHVtbltdfSBjb2x1bW5zIENvbG9ubmUgcmljaGllc3RlIGRhbGwnZXNwb3J0YXppb25lXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge0NzdkhlYWRlcnNbXX0gSGVhZGVyIGRpIGVzcG9ydGF6aW9uZSBnacOgIG9yZGluYXRpIGNvcnJldHRhbWVudGVcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlQW5kR2V0R2VuZXJpY0hlYWRlcnMob2JqOiBHZW5lcmljSXRlbSwgY29sdW1uczogQ3N2SGVhZGVyc1tdKTogQ3N2SGVhZGVyc1tdIHtcclxuICAgIGlmICghb2JqLnByb3BlcnRpZXMpXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG5cclxuICAgIHZhciBoZWFkZXJzOiBDc3ZIZWFkZXJzW10gPSBbXTtcclxuXHJcbiAgICAvL01pcmFjbGUgaW5jb21pbmdcclxuICAgIGNvbHVtbnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgdmFyIHByb3BWYWx1ZSA9IG9iai5wcm9wZXJ0aWVzW3Qua2V5XTtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgdC5rZXkgKyBcIl9leHBcIiwgeyB2YWx1ZTogcHJvcFZhbHVlLCB3cml0YWJsZTogZmFsc2UsIGVudW1lcmFibGU6IHRydWUgfSk7XHJcbiAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsOiB0LmxhYmVsLCBrZXk6IHQua2V5ICsgXCJfZXhwXCIsIG9yZGVyOiB0Lm9yZGVyLCB0eXBlOiB0LnR5cGUsIHByb3BLZXk6IG51bGwgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL1RpcmF0aSBmdW9yaSB0dXR0aSBnbGkgaGVhZGVyIGZhY2NpbyBzb3J0IHN1bGwnb3JkaW5hbWVudG9cclxuICAgIHJldHVybiBoZWFkZXJzLnNvcnQoKGEsIGIpID0+IHsgcmV0dXJuIGEub3JkZXIgLSBiLm9yZGVyIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGF0byB1biBvZ2dldHRvIGdlbmVyYSBnbGkgaGVhZGVyIHBlciBsJ2VzcG9ydGF6aW9uZSBlIGxvIGludGVncmEgY29uIGxlIHByb3ByaWV0w6AgZXNwb3J0YWJpbGkgZGFsbGEgbGlicmVyaWEgKipAY3RybC9uZ3gtY3N2KipcclxuICAgKiBcclxuICAgKiBNZXRvZG8gaW50ZXJubyByaWNoaWFtYXRvIGRhICoqc2V0dXBGb3JFeHBvcnQqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBnZW5lcmljbyBkYSBlc3BvcnRhcmVcclxuICAgKiBcclxuICAgKiBAcmV0dXJucyB7Q3N2SGVhZGVyc1tdfSBIZWFkZXIgZGkgZXNwb3J0YXppb25lIGdpw6Agb3JkaW5hdGkgY29ycmV0dGFtZW50ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgcGFyc2VBbmRHZXRIZWFkZXJzKG9iajogYW55LCBjb2x1bW5zU2VsZWN0aW9uPzogeyBbaWQ6IHN0cmluZ106IHRydWUgfSk6IENzdkhlYWRlcnNbXSB7XHJcbiAgICB2YXIgaGVhZGVyczogQ3N2SGVhZGVyc1tdID0gW107XHJcblxyXG4gICAgLy8gTWlyYWNsZSBpbmNvbWluZ1xyXG4gICAgbGV0IGV4cG9ydFByb3BzID0gb2JqW2V4cG9ydExpc3RdIHx8IFtdO1xyXG4gICAgaWYgKGV4cG9ydFByb3BzLmxlbmd0aCA9PSAwKVxyXG4gICAgICBjb25zb2xlLndhcm4oXCJbQGVzZmFlbnphL2V4dGVuc2lvbnNdIE5lc3N1bmEgY29sb25uYSBjb25maWd1cmF0YSBkYSBlc3BvcnRhcmUhXCIpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwb3J0UHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHByb3AgPSBleHBvcnRQcm9wc1tpXTtcclxuICAgICAgbGV0IHByb3BCYXNlID0gXCJcIjtcclxuICAgICAgbGV0IHRvQ2FsbDogRnVuY3Rpb247XHJcbiAgICAgIGlmIChwcm9wLmVuZHNXaXRoKGxpc3RDc3ZIZHJQcmVmaXgpKSB7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UobGlzdENzdkhkclByZWZpeCwgJycpO1xyXG4gICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VMaXN0LmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocHJvcC5lbmRzV2l0aChkaWN0aW9uYXJ5Q3N2SGRyUHJlZml4KSkge1xyXG4gICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VEaWN0aW9uYXJ5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgcHJvcEJhc2UgPSBwcm9wLnJlcGxhY2UoZGljdGlvbmFyeUNzdkhkclByZWZpeCwgJycpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHByb3AuZW5kc1dpdGgoY3N2VmlzUHJlZml4KSkge1xyXG4gICAgICAgIHByb3BCYXNlID0gcHJvcC5yZXBsYWNlKGNzdlZpc1ByZWZpeCwgJycpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqW3Byb3BCYXNlICsgY3N2VmFsdWVOYXZpZ2F0b3JdICE9PSBcInVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgdG9DYWxsID0gdGhpcy5wYXJzZU9iamVjdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRvQ2FsbCA9IHRoaXMucGFyc2VQcm9wZXJ0eS5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodG9DYWxsKVxyXG4gICAgICAgIHRvQ2FsbChvYmosIHByb3BCYXNlLCBoZWFkZXJzLCBjb2x1bW5zU2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVhZGVycztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHVwIHBlciBsJ2VzcG9ydGF6aW9uZSBkaSB1bmEgc2luZ29sYSBwcm9wcmlldMOgLiBcclxuICAgKiBWaWVuZSBnZW5lcmF0byBsJ2hlYWRlciBlIGxhIHByb3ByaWV0w6AgcmVsYXRpdmEgYWwgdmFsb3JlIGZvcm1hdHRhdG8gbyBub1xyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZVByb3BlcnR5KG9iajogYW55LCBwcm9wOiBzdHJpbmcsIGhlYWRlcnM6IENzdkhlYWRlcnNbXSwgY29sdW1uc1NlbGVjdGlvbj86IHsgW2lkOiBzdHJpbmddOiB0cnVlIH0pIHtcclxuICAgIGxldCB0b0VtaXQ6IGJvb2xlYW4gPSBvYmpbcHJvcCArIGNzdlZpc1ByZWZpeF07XHJcbiAgICBsZXQgZm9ybWF0OiBzdHJpbmcgPSBvYmpbcHJvcCArIGNzdkZvcm1hdFByZWZpeF07XHJcbiAgICBsZXQgcHJvcEtleSA9IG9ialtwcm9wICsgY3N2UHJvcEtleV07XHJcblxyXG4gICAgaWYgKHByb3BLZXkgJiYgIWNvbHVtbnNTZWxlY3Rpb25bcHJvcEtleV0gJiYgT2JqZWN0LmtleXMoY29sdW1uc1NlbGVjdGlvbikubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIltAZXNmYWVuemEvZXh0ZW5zaW9uc10gQ29sb25uYSBkYSBub24gZXNwb3J0YXJlOiBcIiArIHByb3BLZXkpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGxibCA9IG9ialtwcm9wICsgY3N2SGRyUHJlZml4XTtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuICAgIGlmICh0b0VtaXQgJiYgbGJsICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgIC8vIFNlIG5vbiBobyB1biBmb3JtYXRvIGVzcG9ydG8gZGlyZXR0YW1lbnRlXHJcbiAgICAgIGlmICghZm9ybWF0KSB7XHJcbiAgICAgICAgLy8gU2Ugw6ggdW4gZm9ybWF0byBkYXRhIG1pIGFzc2ljdXJvIGRpIG5vbiBzdGFtcGFyZSBtYWkgdW5hIGRhdGEgMDA6MDA6MDAgYWx0cmltZW50aSBpbiBlc3BvcnRhemlvbmUgdmllbmUgdW5vIHNjaGlmb1xyXG4gICAgICAgIHZhciB2YWwgPSBvYmpbcHJvcF0gPyB0aGlzLmRhdGVzLnRyaW1TZWNvbmRzKG9ialtwcm9wXS50b1N0cmluZygpKSA6IFwiXCI7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCArIFwiX25vZm10XCIsIHsgdmFsdWU6IHZhbCwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsOiBsYmwgPyBsYmwgOiBwcm9wICsgXCJfbm9mbXRcIiwga2V5OiBwcm9wICsgXCJfbm9mbXRcIiwgb3JkZXI6IG9yZGVyLCB0eXBlOiBcInN0cmluZ1wiLCBwcm9wS2V5OiBwcm9wS2V5IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIENhc28gZm9ybWF0byBudW1lcmljb1xyXG4gICAgICAgIGlmIChmb3JtYXQgPT0gXCJGXCIpIHtcclxuICAgICAgICAgIC8vIENoZWNrIGNvbnNpZGVyYW5kbyBsYSBwb3NzaWJpbGl0w6AgZGkgemVyaVxyXG4gICAgICAgICAgbGV0IHZhbCA9IG9ialtwcm9wXSAhPSBudWxsID8gb2JqW3Byb3BdLnRvU3RyaW5nKCkgOiBcIlwiO1xyXG4gICAgICAgICAgLy8gRWxpbWlubyB0dXR0ZSBsZSB2aXJnb2xlIChpbmRpY2F0b3JpIGRpIG1pZ2xpYWlhIHBlciBsYSBjdWx0dXJlIGRlZmF1bHQgZW4tVVMpXHJcbiAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgvLC8sIFwiXCIpO1xyXG4gICAgICAgICAgLy8gSWwgc2luZ29sbyBwdW50byBjaGUgYyfDqCwgc2UgcHJlc2VudGUgKHNlcGFyYXRvcmUgZGVjaW1hbGkpIGxvIHRyYXNmb3JtbyBpbiB2aXJnb2xhXHJcbiAgICAgICAgICBsZXQgdmFsQ29udmVydGVkID0gdmFsLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuXHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wICsgXCJfZm10XCIsIHsgdmFsdWU6IHZhbENvbnZlcnRlZCwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWw6IGxibCA/IGxibCA6IHByb3AgKyBcIl9mbXRcIiwga2V5OiBwcm9wICsgXCJfZm10XCIsIG9yZGVyOiBvcmRlciwgdHlwZTogXCJudW1iZXJcIiwgcHJvcEtleTogcHJvcEtleSB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gU2UgaG8gdW4gZm9ybWF0byBkYXRhIHRyYXNmb3JtbyBpbiBkYXlqcywgZm9ybWF0dG8gZWQgZXNwb3J0b1xyXG4gICAgICAgICAgLy8gUGVyIGxhIHRyYXNmb3JtYXppb25lIGluIGRheWpzIHByb3ZvIHByaW1hIGEgcGFzc2FyZ2xpIGxhIHN0cmluZ2EgZGkgbmV0dG8sIHNwZXJhbmRvIGxhIHJpY29ub3NjYVxyXG4gICAgICAgICAgLy8gU2Ugbm9uIGZ1bnppb25hIHByb3ZvIGEgZGVmaW5pcmdsaSBsYSBmb3JtYXR0YXppb25lIHN0YW5kYXJkIGRlbCBtZXRlcmluZyBwZXIgcXVlbCBsaW5ndWFnZ2lvXHJcbiAgICAgICAgICBsZXQgdmFsID0gdGhpcy5kYXRlcy5nZXRGb3JtYXR0ZWQob2JqW3Byb3BdLCBmb3JtYXQubGVuZ3RoIDw9IDEwLCBmb3JtYXQubGVuZ3RoID4gMTYpO1xyXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCArIFwiX2ZtdFwiLCB7IHZhbHVlOiB2YWwgPz8gXCJcIiwgd3JpdGFibGU6IGZhbHNlLCBlbnVtZXJhYmxlOiB0cnVlIH0pO1xyXG4gICAgICAgICAgaGVhZGVycy5wdXNoKHsgbGFiZWw6IGxibCA/IGxibCA6IHByb3AgKyBcIl9mbXRcIiwga2V5OiBwcm9wICsgXCJfZm10XCIsIG9yZGVyOiBvcmRlciwgdHlwZTogXCJkYXRlXCIsIHByb3BLZXk6IHByb3BLZXkgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR1cCBwZXIgbCdlc3BvcnRhemlvbmUgZGkgdW5hIHNpbmdvbGEgcHJvcHJpZXTDoCBkYSB1biBvZ2dldHRvLiBcclxuICAgKiBWaWVuZSBnZW5lcmF0byBsJ2hlYWRlciBlIGxhIHByb3ByaWV0w6AgcmVsYXRpdmEgYWwgdmFsb3JlIGZvcm1hdHRhdG8gbyBuby4gXHJcbiAgICogXHJcbiAgICogUGVyIG90dGVuZXJlIGlsIHZhbG9yZSBlIGwnaGVhZGVyIGRlbGxhIHByb3ByaWV0w6AgdmVuZ29ubyB1dGlsaXp6YXRpIGkgbmF2aWdhdG9yaSBhdXRvLWdlbmVyYXRpIG5lbCBkZWNvcmF0b3JlICoqRXhwb3J0QXMqKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZU9iamVjdChvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10pIHtcclxuICAgIC8vc2UgcXVlc3RhIHByb3ByaWV0w6AgaGEgdW4gbmF2aWdhdG9yIHNpZ25pZmljYSBjaGUgZGVyaXZhIGRhIHVuIG9nZ2V0dG8gaW50ZXJubywgcmVjdXBlcm8gaWwgdmFsb3JlIGluIHF1ZXN0YSBmYXNlIGRhdG8gY2hlIHByaW1hIG5vbiBjZSBsJ2hvXHJcbiAgICBsZXQgdmFsdWVuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGNzdlZhbHVlTmF2aWdhdG9yXTtcclxuXHJcbiAgICAvL0VzLiBkaSB2YWx1ZW5hdmlnYXRvciBvYmouc3Vib2JqLnN1YnN1Ym9iai5wcm9wZXJ0eVxyXG4gICAgbGV0IGptcHMgPSB2YWx1ZW5hdmlnYXRvci5zcGxpdChcIi5cIik7XHJcbiAgICAvL01pIGNsb25vIGwnb2dnZXR0byBvcmlnaW5hbGUgcGVyIG5vbiB1Y2NpZGVyZ2xpIGkgcmlmZXJpbWVudGlcclxuICAgIGxldCBjbG9uZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XHJcbiAgICAvL1NhbHRvIHJpY29yc2l2YW1lbnRlIHN1IG1lIHN0ZXNzbyBwZXIgYXJyaXZhcmUgYWxsYSBwcm9wcmlldMOgXHJcbiAgICAvL1NhbHRvIDEgPiBkaXZlbnRhIG9ialxyXG4gICAgLy9TYWx0byAyID4gZGl2ZW50YSBvYmouc3Vib2JqXHJcbiAgICAvL2VjYy4uLlxyXG4gICAgam1wcy5mb3JFYWNoKHBwID0+IHsgY2xvbmUgPSBjbG9uZVtwcF07IH0pO1xyXG5cclxuICAgIC8vVmFsb3JlIGZpbmFsZSA6RFxyXG4gICAgbGV0IHZhbHVlID0gY2xvbmU7XHJcbiAgICBsZXQgbGJsID0gb2JqW3Byb3AgKyBjc3ZIZHJQcmVmaXhdO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIC8vU2UgcGVyIHF1ZXN0YSBwcm9wcmlldMOgIGhvIHVuIGZvcm1hdG8gbG8gYXBwbGljb1xyXG4gICAgbGV0IGZvcm1hdDogc3RyaW5nID0gb2JqW3Byb3AgKyBjc3ZGb3JtYXRQcmVmaXhdO1xyXG4gICAgbGV0IHR5cGU6ICdzdHJpbmcnIHwgJ251bWJlcicgfCAnZGF0ZScgPSBcInN0cmluZ1wiO1xyXG4gICAgaWYgKGZvcm1hdCA9PSBcIkZcIikge1xyXG4gICAgICBsZXQgdmFsID0gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgdmFsID0gdmFsLnJlcGxhY2UoLywvLCBcIlwiKTtcclxuICAgICAgdmFsdWUgPSB2YWwucmVwbGFjZShcIi5cIiwgXCIsXCIpO1xyXG4gICAgICB0eXBlID0gXCJudW1iZXJcIjtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZvcm1hdCkge1xyXG4gICAgICB2YWx1ZSA9IHRoaXMuZGF0ZXMuZ2V0Rm9ybWF0dGVkKHZhbHVlLCBmb3JtYXQubGVuZ3RoIDw9IDEwLCBmb3JtYXQubGVuZ3RoID4gMTYpO1xyXG4gICAgICB0eXBlID0gXCJkYXRlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwgeyB2YWx1ZTogdmFsdWUsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1ZSB9KTtcclxuICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsOiBsYmwgPyBsYmwgOiBwcm9wLCBrZXk6IHByb3AsIG9yZGVyOiBvcmRlciwgdHlwZTogdHlwZSwgcHJvcEtleTogbnVsbCB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHVwIHBlciBsJ2VzcG9ydGF6aW9uZSBkaSB1bmEgbGlzdGEgZGkgdmFsb3JpIHBpdm90dGF0aSBkaW5hbWljYW1lbnRlOlxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGlsIHZhbG9yZSB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBSZWN1cGVybyBsJ2hlYWRlciB1dGlsaXp6YW5kbyBpIG5hdmlnYXRvcmlcclxuICAgKiBcclxuICAgKiA9PiBDb24gaWwgdmFsb3JlIGNpIGNyZW8gbGEgcHJvcGVydHlcclxuICAgKiBcclxuICAgKiA9PiBDb24gbCdoZWFkZXIgZSBpbCByaWZlcmltZW50byBhbGxhIHByb3BlcnR5IGFwcGVuYSBjcmVhdGEgY3JlbyB1biByZWNvcmQgbmVnbGkgaGVhZGVyIGRhIGVzcG9ydGFyZVxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkaSBjdWkgZXNwb3J0YXJlIGxhIHByb3ByaWV0w6AgKipwcm9wKipcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBQcm9wcmlldMOgIGRhIGVzcG9ydGFyZVxyXG4gICAqIEBwYXJhbSB7Q3N2SGVhZGVyc30gaGVhZGVycyBDb250ZW5pdG9yZSBkZWdsaSBoZWFkZXIsIHZlcnLDoCByaWVtcGl0byBkYSBxdWVzdGEgZnVuemlvbmUgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUxpc3Qob2JqOiBhbnksIHByb3A6IHN0cmluZywgaGVhZGVyczogQ3N2SGVhZGVyc1tdKSB7XHJcbiAgICBsZXQgaGVhZGVybmF2aWdhdG9yID0gb2JqW3Byb3AgKyBsaXN0Q3N2SGRyUHJlZml4XTtcclxuICAgIGxldCB2YWx1ZW5hdmlnYXRvciA9IG9ialtwcm9wICsgbGlzdENzdlZhbFByZWZpeF07XHJcbiAgICBsZXQgdmFsdWVmb3JtYXQgPSBvYmpbcHJvcCArIGxpc3RDc3ZWYWxGb3JtYXRdO1xyXG4gICAgbGV0IG9yZGVyID0gb2JqW3Byb3AgKyBjc3ZPcmRQcmVmaXhdO1xyXG5cclxuICAgIHZhciBqdW1wczogc3RyaW5nW10sIHRtcFJlczogYW55O1xyXG4gICAgdmFyIG9ianM6IGFueVtdID0gb2JqW3Byb3BdO1xyXG5cclxuICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IG9ianMubGVuZ3RoOyBpZHgrKykge1xyXG4gICAgICBsZXQgbGlzdGl0ZW0gPSBvYmpzW2lkeF07XHJcblxyXG4gICAgICB2YXIgaGVhZGVyc3BsaXQgPSBoZWFkZXJuYXZpZ2F0b3Iuc3BsaXQoXCIgXCIpO1xyXG4gICAgICB2YXIgaGVhZGVyID0gXCJcIjtcclxuXHJcbiAgICAgIC8vIFBlciBsJ2hlYWRlciBzaSBjb25zaWRlcmEgYSBzZSBzdGFudGUgb2duaSBwZXp6byBzZXBhcmF0byBkYSBzcGF6aW8gcGVyIGZhcmUgbGUgY29uY2F0ZW5hemlvbmlcclxuICAgICAgaGVhZGVyc3BsaXQuZm9yRWFjaChwciA9PiB7XHJcbiAgICAgICAganVtcHMgPSBwci5zcGxpdChcIi5cIik7XHJcbiAgICAgICAgdG1wUmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaXN0aXRlbSkpO1xyXG4gICAgICAgIGp1bXBzLmZvckVhY2gocHAgPT4geyB0bXBSZXMgPSB0bXBSZXNbcHBdOyB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFoZWFkZXIpIGhlYWRlciA9IHRtcFJlcztcclxuICAgICAgICBlbHNlIGhlYWRlciArPSBcIiBcIiArIHRtcFJlcztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBqdW1wcyA9IHZhbHVlbmF2aWdhdG9yLnNwbGl0KFwiLlwiKTtcclxuICAgICAgdG1wUmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsaXN0aXRlbSkpO1xyXG4gICAgICBqdW1wcy5mb3JFYWNoKHBwID0+IHsgdG1wUmVzID0gdG1wUmVzW3BwXTsgfSk7XHJcbiAgICAgIGxldCB2YWx1ZSA9IHRtcFJlcztcclxuXHJcbiAgICAgIGxldCB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnID0gXCJzdHJpbmdcIjtcclxuICAgICAgaWYgKHZhbHVlZm9ybWF0ID09IFwiRlwiKSB7XHJcbiAgICAgICAgbGV0IHZhbCA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgvLC8sIFwiXCIpO1xyXG4gICAgICAgIHZhbHVlID0gdmFsLnJlcGxhY2UoXCIuXCIsIFwiLFwiKTtcclxuICAgICAgICB0eXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh2YWx1ZWZvcm1hdCkge1xyXG4gICAgICAgIHZhbHVlID0gdGhpcy5kYXRlcy5nZXRGb3JtYXR0ZWQob2JqW3Byb3BdLCB2YWx1ZWZvcm1hdC5sZW5ndGggPD0gMTAsIHZhbHVlZm9ybWF0Lmxlbmd0aCA+IDE2KTtcclxuICAgICAgICB0eXBlID0gXCJkYXRlXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AgKyBpZHgsIHsgdmFsdWU6IHZhbHVlLCB3cml0YWJsZTogZmFsc2UgfSk7XHJcbiAgICAgIGhlYWRlcnMucHVzaCh7IGxhYmVsOiBoZWFkZXIsIGtleTogcHJvcCArIGlkeCwgb3JkZXI6IG9yZGVyICsgaWR4LCB0eXBlOiB0eXBlLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgcGVyIGwnZXNwb3J0YXppb25lIGRpIHVuYSBsaXN0YSBkaSB2YWxvcmkgcGl2b3R0YXRpIGRpbmFtaWNhbWVudGU6XHJcbiAgICogXHJcbiAgICogPT4gUmVjdXBlcm8gaWwgdmFsb3JlIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IFJlY3VwZXJvIGwnaGVhZGVyIHV0aWxpenphbmRvIGkgbmF2aWdhdG9yaVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBpbCB2YWxvcmUgY2kgY3JlbyBsYSBwcm9wZXJ0eVxyXG4gICAqIFxyXG4gICAqID0+IENvbiBsJ2hlYWRlciBlIGlsIHJpZmVyaW1lbnRvIGFsbGEgcHJvcGVydHkgYXBwZW5hIGNyZWF0YSBjcmVvIHVuIHJlY29yZCBuZWdsaSBoZWFkZXIgZGEgZXNwb3J0YXJlXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRpIGN1aSBlc3BvcnRhcmUgbGEgcHJvcHJpZXTDoCAqKnByb3AqKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIFByb3ByaWV0w6AgZGEgZXNwb3J0YXJlXHJcbiAgICogQHBhcmFtIHtDc3ZIZWFkZXJzfSBoZWFkZXJzIENvbnRlbml0b3JlIGRlZ2xpIGhlYWRlciwgdmVycsOgIHJpZW1waXRvIGRhIHF1ZXN0YSBmdW56aW9uZSBcclxuICAgKi9cclxuICBwcml2YXRlIHBhcnNlRGljdGlvbmFyeShvYmo6IGFueSwgcHJvcDogc3RyaW5nLCBoZWFkZXJzOiBDc3ZIZWFkZXJzW10pIHtcclxuICAgIGxldCBoZWFkZXJuYXZpZ2F0b3IgPSBvYmpbcHJvcCArIGRpY3Rpb25hcnlDc3ZIZHJQcmVmaXhdO1xyXG4gICAgbGV0IHZhbHVlbmF2aWdhdG9yID0gb2JqW3Byb3AgKyBkaWN0aW9uYXJ5Q3N2VmFsUHJlZml4XTtcclxuICAgIGxldCBvcmRlciA9IG9ialtwcm9wICsgY3N2T3JkUHJlZml4XTtcclxuXHJcbiAgICB2YXIganVtcHM6IHN0cmluZ1tdLCB0bXBSZXM6IGFueTtcclxuICAgIHZhciBvYmpzOiBhbnlbXSA9IG9ialtwcm9wXTtcclxuXHJcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBvYmpzLmxlbmd0aDsgaWR4KyspIHtcclxuICAgICAgbGV0IGxpc3RpdGVtID0gb2Jqc1tpZHhdO1xyXG4gICAgICB2YXIgaGVhZGVyc3BsaXQgPSBoZWFkZXJuYXZpZ2F0b3Iuc3BsaXQoXCIgXCIpO1xyXG4gICAgICB2YXIgaGVhZGVyID0gXCJcIjtcclxuXHJcbiAgICAgIGhlYWRlcnNwbGl0LmZvckVhY2gocHIgPT4ge1xyXG4gICAgICAgIGp1bXBzID0gcHIuc3BsaXQoXCIuXCIpO1xyXG4gICAgICAgIHRtcFJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobGlzdGl0ZW0pKTtcclxuICAgICAgICBqdW1wcy5mb3JFYWNoKHBwID0+IHsgdG1wUmVzID0gdG1wUmVzW3BwXTsgfSk7XHJcblxyXG4gICAgICAgIGlmICghaGVhZGVyKSBoZWFkZXIgPSB0bXBSZXM7XHJcbiAgICAgICAgZWxzZSBoZWFkZXIgKz0gXCIgXCIgKyB0bXBSZXM7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdmFyIHZhbHVlc3BsaXQgPSB2YWx1ZW5hdmlnYXRvci5zcGxpdChcIixcIik7XHJcbiAgICAgIHZhbHVlc3BsaXQuZm9yRWFjaCgodCwgaWR4aW50ZXJuYWwpID0+IHtcclxuICAgICAgICB2YXIgbmF2aWcgPSB0LnNwbGl0KFwiLVwiKVsxXTtcclxuICAgICAgICB2YXIgZGVzYyA9IHQuc3BsaXQoXCItXCIpWzBdO1xyXG5cclxuICAgICAgICBqdW1wcyA9IG5hdmlnLnNwbGl0KFwiLlwiKTtcclxuICAgICAgICB0bXBSZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxpc3RpdGVtKSk7XHJcbiAgICAgICAganVtcHMuZm9yRWFjaChwcCA9PiB7IHRtcFJlcyA9IHRtcFJlc1twcF07IH0pO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IHRtcFJlcztcclxuXHJcbiAgICAgICAgbGV0IHByb3BuYW1lID0gcHJvcCArIGlkeC50b1N0cmluZygpICsgaWR4aW50ZXJuYWwudG9TdHJpbmcoKTtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wbmFtZSwgeyB2YWx1ZTogdmFsdWUsIHdyaXRhYmxlOiBmYWxzZSB9KTtcclxuICAgICAgICBoZWFkZXJzLnB1c2goeyBsYWJlbDogaGVhZGVyICsgXCIgXCIgKyBkZXNjLCBrZXk6IHByb3BuYW1lLCBvcmRlcjogb3JkZXIgKyBpZHgsIHR5cGU6ICdzdHJpbmcnLCBwcm9wS2V5OiBudWxsIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBjaGUgc2kgb2NjdXBhIGRlbGxhIGRlc2VyaWFsaXp6YXppb25lIGRlZ2xpIG9nZ2V0dGkgZGEgZXNwb3J0YXJlLiBNZXNzbyBhIGxpdmVsbG8gZGkgbGlicmVyaWEgaW4gbW9kbyBjaGUgcXVhbG9yYSBjaSBmb3NzZSBkYSBjYW1iaWFyZSBsaWJyZXJpYSBcclxuICAgKiB0dXR0ZSBsZSBtYW51dGVuemlvbmkgc2lhbm8gY29uY2VudHJhdGUgcXVpXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkYSBkZXNlcmlhbGl6emFyZVxyXG4gICAqIEBwYXJhbSB7YW55fSB0eXBlIFRpcG8gZGEgdXNhcmUgY29tZSBwcm90b3RpcG8gcGVyIGxhIGRlc2VyaWFsaXp6YXppb25lXHJcbiAgICogXHJcbiAgICogQHJldHVybnMge2FueX0gT2dnZXR0aSBkZXNlcmlhbGl6emF0aVxyXG4gICAqL1xyXG4gIHB1YmxpYyBkZXNlcmlhbGl6ZUZvckV4cG9ydChpdGVtczogYW55W10sIHR5cGU6IGFueSk6IGFueSB7XHJcbiAgICByZXR1cm4gRGVzZXJpYWxpemUoaXRlbXMsIHR5cGUpO1xyXG4gIH1cclxufSJdfQ==
@@ -300,8 +300,8 @@ export class MessageService {
300
300
  if (postSuccess)
301
301
  postSuccess();
302
302
  }
303
- else if (response.haserror) {
304
- this.simpleError((errorMsg ? errorMsg + ": " : "") + response.error);
303
+ else {
304
+ this.simpleError((errorMsg ? errorMsg + ": " : "") + response.haserror ? response.error : '[NO ERR.]');
305
305
  if (postFailure)
306
306
  postFailure();
307
307
  }
@@ -365,4 +365,4 @@ MessageService.ctorParameters = () => [
365
365
  { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [EXT_FANCY_ALERTS,] }] },
366
366
  { type: String, decorators: [{ type: Optional }, { type: Inject, args: [EXT_LOCALE,] }] }
367
367
  ];
368
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5tZXNzYWdlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9zcmMvbGliL3NlcnZpY2VzL2V4dGVuc2lvbnMubWVzc2FnZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPO0FBQ1AsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHekQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQWtEdkI7Ozs7T0FJRztJQUNILFlBQTJCLE1BQXFCLEVBQWdELFlBQXFCLEVBQTBDLE1BQWM7O1FBQWxKLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBZ0QsaUJBQVksR0FBWixZQUFZLENBQVM7UUFBMEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXJEN0s7O1dBRUc7UUFDSyxRQUFHLEdBQUc7WUFDVixTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEdBQUc7WUFDdkQsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxHQUFHO1lBQ3BELE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRztZQUNqRCxPQUFPLEVBQUUsRUFBRSxP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LFlBQUksTUFBTSxTQUFDLGdCQUFnQjt5Q0FBa0MsUUFBUSxZQUFJLE1BQU0sU0FBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tIFwibmd4LXRvYXN0clwiO1xyXG5pbXBvcnQgc3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcclxuXHJcbi8vIFJYSlNcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgRVhUX0xPQ0FMRSwgRVhUX0ZBTkNZX0FMRVJUUyB9IGZyb20gXCIuLi90b2tlbnNcIjtcclxuaW1wb3J0IHsgQ2FsbFJlc3VsdCB9IGZyb20gXCIuLi9tb2RlbHMvQ2FsbFJlc3VsdFwiO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgY2hlIGZvcm5pc2NlIGZ1bnppb25hbGl0w6AgZGkgYWxlcnQgbmVpIHRpcGkgZm9uZGFtZW50YWxpOiBzdWNjZXNzLCBpbmZvLCB3YXJuaW5nIGUgZGFuZ2VyXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlU2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPZ2dldHRvIHN0YXRpY28gaW4gc3VwcG9ydG8gYWxsYSBsb2NhbGl6emF6aW9uZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGxvYyA9IHtcclxuICAgICAgICAnQ29uZmlybSc6IHsgJ2VuLVVTJzogXCJDb25maXJtXCIsICdpdC1JVCc6IFwiQ29uZmVybWFcIiwgfSxcclxuICAgICAgICAnQ2FuY2VsJzogeyAnZW4tVVMnOiBcIkNhbmNlbFwiLCAnaXQtSVQnOiBcIkFubnVsbGFcIiwgfSxcclxuICAgICAgICAnQ2xvc2UnOiB7ICdlbi1VUyc6IFwiQ2xvc2VcIiwgJ2l0LUlUJzogXCJDaGl1ZGlcIiwgfSxcclxuICAgICAgICAnRXJyb3InOiB7ICdlbi1VUyc6IFwiRXJyb3JcIiwgJ2l0LUlUJzogXCJFcnJvcmVcIiwgfSxcclxuICAgICAgICAnSW5mbyc6IHsgJ2VuLVVTJzogXCJJbmZvXCIsICdpdC1JVCc6IFwiSW5mb3JtYXppb25lXCIsIH0sXHJcbiAgICAgICAgJ1N1Y2Nlc3MnOiB7ICdlbi1VUyc6IFwiU3VjY2Vzc1wiLCAnaXQtSVQnOiBcIlN1Y2Nlc3NvXCIsIH0sXHJcbiAgICAgICAgJ1dhcm5pbmcnOiB7ICdlbi1VUyc6IFwiV2FybmluZ1wiLCAnaXQtSVQnOiBcIkF0dGVuemlvbmVcIiwgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGRpIHVuIHdhcm5pbmcgY29uIHJpY2hpZXN0YSBkaSBjb25mZXJtYVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHdhcm5pbmdTd2FsV2l0aENhbmNlbDogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtcGxhdGUgZGkgdW4gd2FybmluZyBjb24gcmljaGllc3RhIGRpIGNvbmZlcm1hXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3VjY2Vzc1N3YWxXaXRoQ2FuY2VsOiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZW1wbGF0ZSBkaSB1biBlcnJvcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBlcnJvclN3YWw6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGRpIHVuIG1lc3NhZ2dpbyBkaSBzdWNjZXNzb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN1Y2Nlc3NTd2FsOiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZW1wbGF0ZSBkaSB1biBhdnZpc29cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB3YXJuaW5nU3dhbDogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtcGxhdGUgZGkgdW4gbWVzc2FnZ2lvIGluZm9ybWF0aXZvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW5mb1N3YWw6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGRpIHVuIHdhcm5pbmcgcGVyIGxhIHNlc3Npb25lIHNjYWR1dGFcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHBpcmVkU2Vzc2lvblN3YWw6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSwgQE9wdGlvbmFsKCkgQEluamVjdChFWFRfRkFOQ1lfQUxFUlRTKSBwcml2YXRlIEZBTkNZX0FMRVJUUzogYm9vbGVhbiwgQE9wdGlvbmFsKCkgQEluamVjdChFWFRfTE9DQUxFKSBwcml2YXRlIExPQ0FMRTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5leHBpcmVkU2Vzc2lvblN3YWwgPSBzd2FsLm1peGluKHtcclxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnTG9naW4nLFxyXG4gICAgICAgICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJhcHAtd3JhcFwiLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dPdXRzaWRlQ2xpY2s6IGZhbHNlLFxyXG4gICAgICAgICAgICBpY29uOiBcIndhcm5pbmdcIlxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnN1Y2Nlc3NTd2FsV2l0aENhbmNlbCA9IHN3YWwubWl4aW4oe1xyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5sb2NbXCJTdWNjZXNzXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJidG4gYnRuLXNlY29uZGFyeSBhcHAtbWFyZ2luLXJpZ2h0LTEwXCIsXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IFwiYXBwLXdyYXBcIixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMubG9jW1wiQ29uZmlybVwiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSxcclxuICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdGhpcy5sb2NbXCJDYW5jZWxcIl1bdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJ10sXHJcbiAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMud2FybmluZ1N3YWxXaXRoQ2FuY2VsID0gc3dhbC5taXhpbih7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmxvY1tcIldhcm5pbmdcIl1bdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJ10sXHJcbiAgICAgICAgICAgIGN1c3RvbUNsYXNzOiB7XHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcImJ0biBidG4tcHJpbWFyeVwiLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiBcImJ0biBidG4tc2Vjb25kYXJ5IGFwcC1tYXJnaW4tcmlnaHQtMTBcIixcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJhcHAtd3JhcFwiLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5sb2NbXCJDb25maXJtXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiB0aGlzLmxvY1tcIkNhbmNlbFwiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSxcclxuICAgICAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCJcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy53YXJuaW5nU3dhbCA9IHN3YWwubWl4aW4oe1xyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5sb2NbXCJXYXJuaW5nXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJhcHAtd3JhcFwiLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMubG9jW1wiQ2xvc2VcIl1bdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJ10sXHJcbiAgICAgICAgICAgIGljb246IFwid2FybmluZ1wiXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc1N3YWwgPSBzd2FsLm1peGluKHtcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMubG9jW1wiU3VjY2Vzc1wiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSxcclxuICAgICAgICAgICAgY3VzdG9tQ2xhc3M6IHtcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiYnRuIGJ0bi1wcmltYXJ5XCIsXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IFwiYXBwLXdyYXBcIixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiB0aGlzLmxvY1tcIkNsb3NlXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIlxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yU3dhbCA9IHN3YWwubWl4aW4oe1xyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5sb2NbXCJFcnJvclwiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSxcclxuICAgICAgICAgICAgY3VzdG9tQ2xhc3M6IHtcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiYnRuIGJ0bi1wcmltYXJ5XCIsXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IFwiYXBwLXdyYXBcIixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiB0aGlzLmxvY1tcIkNsb3NlXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBpY29uOiBcImVycm9yXCJcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pbmZvU3dhbCA9IHN3YWwubWl4aW4oe1xyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5sb2NbXCJJbmZvXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJhcHAtd3JhcFwiLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMubG9jW1wiQ2xvc2VcIl1bdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJ10sXHJcbiAgICAgICAgICAgIGljb246IFwiaW5mb1wiXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlc2VudGF6aW9uZSBkaSB1biBzZW1wbGljZSBtZXNzYWdnaW8gZGkgc3VjY2Vzc29cclxuICAgICAqIFxyXG4gICAgICogU2UgdmllbmUgY2hpYW1hdG8gY29uIGxlIGltcG9zdGF6aW9uaSBkaSBkZWZhdWx0IGUgdG9hc3RyIMOoIGFiaWxpdGF0bywgdmllbmUgbW9zdHJhdG8gYWwgY2VudHJvXHJcbiAgICAgKiBTZSB2aWVuZSBjaGlhbWF0byBjb24gb3ZlcnJpZGUgc3UgdG9hc3RyIHZ1b2wgZGlyZSBjaGUgw6ggdW5hIG5vdGlmaWNhIHNlY29uZGFyaWEgZSBhcHBhcmUgaW4gYWx0byBhIGRlc3RyYVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUZXN0byBkYSBtb3N0cmFyZVxyXG4gICAgICogQHBhcmFtIHtcInRvYXN0clwiIHwgXCJzd2FsXCIgfCBudWxsfSBzZWNvbmRhcnlOb3RpZmljYXRpb25UeXBlIFF1YWxvcmEgc2lhIHVuYSBub3RpZmljYSBzZWNvbmRhcmlhLCBuZSBpbmRpY2EgaWwgdGlwb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2ltcGxlU3VjY2Vzcyh0ZXh0OiBzdHJpbmcsIHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGU6IFwidG9hc3RyXCIgfCBcInN3YWxcIiB8IG51bGwgPSBudWxsLCBzZWNvbmRhcnlOb3RpZmljYXRpb25UaW1lb3V0OiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHRvcyA9IHRoaXMudG9hc3RyT3JTd2FsKHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGUpO1xyXG5cclxuICAgICAgICBpZiAodG9zID09IFwic3dhbFwiKSB0aGlzLnN1Y2Nlc3NTd2FsLmZpcmUoXCJcIiwgdGV4dCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnRvYXN0ci5zdWNjZXNzKHRleHQsIG51bGwsIHsgcG9zaXRpb25DbGFzczogdG9zID09IFwidG9hc3RyXCIgPyBcInRvYXN0LXRvcC1yaWdodFwiIDogXCJ0b2FzdC10b3AtY2VudGVyXCIsIHRpbWVPdXQ6IHNlY29uZGFyeU5vdGlmaWNhdGlvblRpbWVvdXQgfHwgKHRvcyA9PSBcInRvYXN0clwiID8gMCA6IDUwMDApLCBleHRlbmRlZFRpbWVPdXQ6ICB0b3MgPT0gXCJ0b2FzdHJcIiA/IDAgOiAxMDAwfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVzZW50YXppb25lIGRpIHVuIHNlbXBsaWNlIG1lc3NhZ2dpbyBkaSBpbmZvcm1hemlvbmVcclxuICAgICAqIFxyXG4gICAgICogU2UgdmllbmUgY2hpYW1hdG8gY29uIGxlIGltcG9zdGF6aW9uaSBkaSBkZWZhdWx0IGUgdG9hc3RyIMOoIGFiaWxpdGF0bywgdmllbmUgbW9zdHJhdG8gYWwgY2VudHJvXHJcbiAgICAgKiBTZSB2aWVuZSBjaGlhbWF0byBjb24gb3ZlcnJpZGUgc3UgdG9hc3RyIHZ1b2wgZGlyZSBjaGUgw6ggdW5hIG5vdGlmaWNhIHNlY29uZGFyaWEgZSBhcHBhcmUgaW4gYWx0byBhIGRlc3RyYVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUZXN0byBkYSBtb3N0cmFyZVxyXG4gICAgICogQHBhcmFtIHtcInRvYXN0clwiIHwgXCJzd2FsXCIgfCBudWxsfSBzZWNvbmRhcnlOb3RpZmljYXRpb25UeXBlIFF1YWxvcmEgc2lhIHVuYSBub3RpZmljYSBzZWNvbmRhcmlhLCBuZSBpbmRpY2EgaWwgdGlwb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2ltcGxlSW5mbyh0ZXh0OiBzdHJpbmcsIHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGU6IFwidG9hc3RyXCIgfCBcInN3YWxcIiB8IG51bGwgPSBudWxsLCBzZWNvbmRhcnlOb3RpZmljYXRpb25UaW1lb3V0OiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHRvcyA9IHRoaXMudG9hc3RyT3JTd2FsKHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGUpO1xyXG5cclxuICAgICAgICBpZiAodG9zID09IFwic3dhbFwiKSB0aGlzLmluZm9Td2FsLmZpcmUoXCJcIiwgdGV4dCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnRvYXN0ci5pbmZvKHRleHQsIG51bGwsIHsgcG9zaXRpb25DbGFzczogdG9zID09IFwidG9hc3RyXCIgPyBcInRvYXN0LXRvcC1yaWdodFwiIDogXCJ0b2FzdC10b3AtY2VudGVyXCIsIHRpbWVPdXQ6IHNlY29uZGFyeU5vdGlmaWNhdGlvblRpbWVvdXQgfHwgKHRvcyA9PSBcInRvYXN0clwiID8gMCA6IDUwMDApLCBleHRlbmRlZFRpbWVPdXQ6ICB0b3MgPT0gXCJ0b2FzdHJcIiA/IDAgOiAxMDAwIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlc2VudGF6aW9uZSBkaSB1biBzZW1wbGljZSBtZXNzYWdnaW8gZGkgZXJyb3JlXHJcbiAgICAgKiBcclxuICAgICAqIFNlIHZpZW5lIGNoaWFtYXRvIGNvbiBsZSBpbXBvc3RhemlvbmkgZGkgZGVmYXVsdCBlIHRvYXN0ciDDqCBhYmlsaXRhdG8sIHZpZW5lIG1vc3RyYXRvIGFsIGNlbnRyb1xyXG4gICAgICogU2UgdmllbmUgY2hpYW1hdG8gY29uIG92ZXJyaWRlIHN1IHRvYXN0ciB2dW9sIGRpcmUgY2hlIMOoIHVuYSBub3RpZmljYSBzZWNvbmRhcmlhIGUgYXBwYXJlIGluIGFsdG8gYSBkZXN0cmFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGVzdG8gZGEgbW9zdHJhcmVcclxuICAgICAqIEBwYXJhbSB7XCJ0b2FzdHJcIiB8IFwic3dhbFwiIHwgbnVsbH0gc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZSBRdWFsb3JhIHNpYSB1bmEgbm90aWZpY2Egc2Vjb25kYXJpYSwgbmUgaW5kaWNhIGlsIHRpcG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNpbXBsZUVycm9yKHRleHQ6IHN0cmluZywgc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZTogXCJ0b2FzdHJcIiB8IFwic3dhbFwiIHwgbnVsbCA9IG51bGwsIHNlY29uZGFyeU5vdGlmaWNhdGlvblRpbWVvdXQ6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBsZXQgdG9zID0gdGhpcy50b2FzdHJPclN3YWwoc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZSk7XHJcblxyXG4gICAgICAgIGlmICh0b3MgPT0gXCJzd2FsXCIpIHRoaXMuZXJyb3JTd2FsLmZpcmUoXCJcIiwgdGV4dCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnRvYXN0ci5lcnJvcih0ZXh0LCBudWxsLCB7IHBvc2l0aW9uQ2xhc3M6IHRvcyA9PSBcInRvYXN0clwiID8gXCJ0b2FzdC10b3AtcmlnaHRcIiA6IFwidG9hc3QtdG9wLWNlbnRlclwiLCB0aW1lT3V0OiBzZWNvbmRhcnlOb3RpZmljYXRpb25UaW1lb3V0IHx8ICh0b3MgPT0gXCJ0b2FzdHJcIiA/IDAgOiA1MDAwKSwgZXh0ZW5kZWRUaW1lT3V0OiAgdG9zID09IFwidG9hc3RyXCIgPyAwIDogMTAwMCB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXNlbnRhemlvbmUgZGkgdW4gc2VtcGxpY2UgbWVzc2FnZ2lvIGRpIGF2dmlzb1xyXG4gICAgICogXHJcbiAgICAgKiBTZSB2aWVuZSBjaGlhbWF0byBjb24gbGUgaW1wb3N0YXppb25pIGRpIGRlZmF1bHQgZSB0b2FzdHIgw6ggYWJpbGl0YXRvLCB2aWVuZSBtb3N0cmF0byBhbCBjZW50cm9cclxuICAgICAqIFNlIHZpZW5lIGNoaWFtYXRvIGNvbiBvdmVycmlkZSBzdSB0b2FzdHIgdnVvbCBkaXJlIGNoZSDDqCB1bmEgbm90aWZpY2Egc2Vjb25kYXJpYSBlIGFwcGFyZSBpbiBhbHRvIGEgZGVzdHJhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRlc3RvIGRhIG1vc3RyYXJlXHJcbiAgICAgKiBAcGFyYW0ge1widG9hc3RyXCIgfCBcInN3YWxcIiB8IG51bGx9IHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGUgUXVhbG9yYSBzaWEgdW5hIG5vdGlmaWNhIHNlY29uZGFyaWEsIG5lIGluZGljYSBpbCB0aXBvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaW1wbGVXYXJuaW5nKHRleHQ6IHN0cmluZywgc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZTogXCJ0b2FzdHJcIiB8IFwic3dhbFwiIHwgbnVsbCA9IG51bGwsIHNlY29uZGFyeU5vdGlmaWNhdGlvblRpbWVvdXQ6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBsZXQgdG9zID0gdGhpcy50b2FzdHJPclN3YWwoc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZSk7XHJcblxyXG4gICAgICAgIGlmICh0b3MgPT0gXCJzd2FsXCIpIHRoaXMud2FybmluZ1N3YWwuZmlyZShcIlwiLCB0ZXh0KTtcclxuICAgICAgICBlbHNlIHRoaXMudG9hc3RyLndhcm5pbmcodGV4dCwgbnVsbCwgeyBwb3NpdGlvbkNsYXNzOiB0b3MgPT0gXCJ0b2FzdHJcIiA/IFwidG9hc3QtdG9wLXJpZ2h0XCIgOiBcInRvYXN0LXRvcC1jZW50ZXJcIiwgdGltZU91dDogc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVGltZW91dCB8fCAodG9zID09IFwidG9hc3RyXCIgPyAwIDogNTAwMCksIGV4dGVuZGVkVGltZU91dDogIHRvcyA9PSBcInRvYXN0clwiID8gMCA6IDEwMDAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSaXB1bGlzY2UgdHV0dGkgaSBtZXNzYWdnaSBwcmVzZW50aSBpbiB1biBkYXRvIG1vbWVudG8gc3VsbG8gc2NoZXJtb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXJNZXNzYWdlcygpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5jbGVhcigpO1xyXG4gICAgICAgIHN3YWwuY2xvc2UoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3N0cmEgdW4gbWVzc2FnZ2lvIGRpIGF2dmlzbyBjb24gcmljaGllc3RhIGRpIGNvbmZlcm1hXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSBUaXRvbG8gZGVsIG1lc3NhZ2dpb1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgQ29udGVudXRvIGRlbCBtZXNzYWdnaW9cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IFJlc3RpdHVpc2NlIHVuYSBQcm9taXNlIGNvbCByaXN1bHRhdG8gc2NlbHRvIGRhbGwndXRlbnRlIChjb25mZXJtYSBvIG5vKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcHJvbWlzZVdhcm5pbmdXaXRoQ2hvaWNlKHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2FybmluZ1N3YWxXaXRoQ2FuY2VsLmZpcmUodGl0bGUsIHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW4gYmFzZSBhbGxhIGNvbmZpZ3VyYXppb25lIGF0dHVhbGUgZSBhbGwnZXZlbnR1YWxlIG92ZXJyaWRlIHBlciBsYSBjaGlhbWF0YSBkZWwgY2FzbyBpbmRpY2Egc2UgYmlzb2duYSB1dGlsaXp6YXJlIHRvYXN0ciBvIHN3ZWV0YWxlcnRcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtcInRvYXN0clwiIHwgXCJzd2FsXCIgfCBudWxsfSBwcm92aWRlck92ZXJyaWRlIE92ZXJyaWRlIGFsbGEgbW9kYWxpdMOgIGNvbmZpZ3VyYXRhXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtcInRvYXN0clwiIHwgXCJzd2FsXCJ9IEluZGljYXppb25lIHN1IGNoZSBwcm92aWRlciBkaSBtZXNzYWdnaSBkaSBhdnZpc28gZGViYmEgZXNzZXJlIHV0aWxpenphdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB0b2FzdHJPclN3YWwocHJvdmlkZXJPdmVycmlkZTogXCJ0b2FzdHJcIiB8IFwic3dhbFwiIHwgbnVsbCk6IFwidG9hc3RyXCIgfCBcInN3YWxcIiB7XHJcbiAgICAgICAgaWYgKHByb3ZpZGVyT3ZlcnJpZGUgIT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyT3ZlcnJpZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuRkFOQ1lfQUxFUlRTID09IG51bGwgPyBcInN3YWxcIiA6IHRoaXMuRkFOQ1lfQUxFUlRTID8gXCJzd2FsXCIgOiBcInRvYXN0clwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9zdHJhIHVuIG1lc3NhZ2dpbyBkaSBhdnZpc28gY29uIHJpY2hpZXN0YSBkaSBjb25mZXJtYSBlIGdlc3Rpc2NlIGlsIHJpc3VsdGF0byBjaGlhbWF0byBpIGNhbGxiYWNrICoqb25zdWNjZXNzKiogbyAqKm9uZXJyb3IqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgVGl0b2xvIGRlbCBtZXNzYWdnaW9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IENvbnRlbnV0byBkZWwgbWVzc2FnZ2lvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbnN1Y2Nlc3MgQ2FsbGJhY2sgZGEgY2hpbWFyZSBzdSBjb25mZXJtYVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25lcnJvciBDYWxsYmFjayBkYSBjaGltYXJlIHN1IGVycm9yaVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2ltcGxlV2FybmluZ1dpdGhDaG9pY2UodGl0bGU6IHN0cmluZywgdGV4dDogc3RyaW5nLCBvbnN1Y2Nlc3M6IEZ1bmN0aW9uID0gbnVsbCwgb25lcnJvcjogRnVuY3Rpb24gPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy53YXJuaW5nU3dhbFdpdGhDYW5jZWwuZmlyZSh0aXRsZSwgdGV4dCkudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUgJiYgb25zdWNjZXNzKVxyXG4gICAgICAgICAgICAgICAgb25zdWNjZXNzKCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9uZXJyb3IpXHJcbiAgICAgICAgICAgICAgICBvbmVycm9yKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3N0cmEgdW4gbWVzc2FnZ2lvIGRpIHN1Y2Nlc3MgY29uIHJpY2hpZXN0YSBkaSBjb25mZXJtYSBlIGdlc3Rpc2NlIGlsIHJpc3VsdGF0byBjaGlhbWF0byBpIGNhbGxiYWNrICoqb25jb25maXJtKiogbyAqKm9uYWJvcnQqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgVGl0b2xvIGRlbCBtZXNzYWdnaW9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IENvbnRlbnV0byBkZWwgbWVzc2FnZ2lvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbmNvbmZpcm0gQ2FsbGJhY2sgZGEgY2hpbWFyZSBzdSBjb25mZXJtYVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25hYm9ydCBDYWxsYmFjayBkYSBjaGltYXJlIHN1IGFubnVsbGFtZW50b1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpcm10ZXh0IFRlc3RvIGRlbCBwdWxzYW50ZSBkaSBhemlvbmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhYm9ydHRleHQgVGVzdG8gZGVsIHB1bHNhbnRlIGRpIGFubnVsbGFtZW50b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2ltcGxlU3VjY2Vzc1dpdGhDaG9pY2UodGl0bGU6IHN0cmluZywgdGV4dDogc3RyaW5nLCBvbmNvbmZpcm06IEZ1bmN0aW9uID0gbnVsbCwgb25hYm9ydDogRnVuY3Rpb24gPSBudWxsLCBjb25maXJtdGV4dDogc3RyaW5nID0gXCJcIiwgYWJvcnR0ZXh0OiBzdHJpbmcgPScnKSB7XHJcbiAgICAgICAgdmFyIGNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgaHRtbDogdGV4dFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbmZpcm10ZXh0KVxyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uW1wiY29uZmlybUJ1dHRvblRleHRcIl0gPSBjb25maXJtdGV4dDtcclxuICAgICAgICBpZiAoYWJvcnR0ZXh0KVxyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uW1wiY2FuY2VsQnV0dG9uVGV4dFwiXSA9IGFib3J0dGV4dDtcclxuXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU3dhbFdpdGhDYW5jZWwuZmlyZShjb25maWd1cmF0aW9uKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSAmJiBvbmNvbmZpcm0pXHJcbiAgICAgICAgICAgICAgICBvbmNvbmZpcm0oKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAob25hYm9ydClcclxuICAgICAgICAgICAgICAgIG9uYWJvcnQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vc3RyYSB1biBtZXNzYWdnaW8gZGkgYXZ2aXNvIGNvbiByaWNoaWVzdGEgZGkgY29uZmVybWEgZSBnZXN0aXNjZSBpbCByaXN1bHRhdG8gY2hpYW1hdG8gaSBjYWxsYmFjayAqKm9uc3VjY2VzcyoqIG8gKipvbmVycm9yKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIFRpdG9sbyBkZWwgbWVzc2FnZ2lvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBDb250ZW51dG8gZGVsIG1lc3NhZ2dpb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb2JzZXJ2YWJsZVNpbXBsZVdhcm5pbmdXaXRoQ2hvaWNlKHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBvZih0aGlzLndhcm5pbmdTd2FsV2l0aENhbmNlbC5maXJlKHRpdGxlLCB0ZXh0KSkucGlwZShtYXAodCA9PiAhIXQudmFsdWUpKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9zdHJhIHVuIG1lc3NhZ2dpbyBkaSBhdnZpc28gY2hlIGxhIHNlc3Npb25lIGNvcnJlbnRlIMOoIHNjYWR1dGEgZSBwcm9wb25lIGFsbCd1dGVudGUgZGkgbmF2aWdhcmUgYWwgbG9naW4uIFF1YWxvcmEgbCd1dGVudGUgZGVjaWRlc3NlIGRpIGZhcmxvIFxyXG4gICAgICogdmVycsOgIGNoaWFtYXRhIGxhIGZ1bnppb25lIGRpIGNhbGxiYWNrICoqb25uYXZpZ2F0ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgVGl0b2xvIGRlbCBtZXNzYWdnaW9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IENvbnRlbnV0byBkZWwgbWVzc2FnZ2lvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbm5hdmlnYXRlIENhbGxiYWNrIGRhIGNoaW1hcmUgc3UgbmF2aWdhemlvbmUgaW4gY29yc29cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4cGlyZWRTZXNzaW9uTWVzc2FnZSh0aXRsZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIG9ubmF2aWdhdGU6IEZ1bmN0aW9uID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZXhwaXJlZFNlc3Npb25Td2FsLmZpcmUodGl0bGUsIHRleHQpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlICYmIG9ubmF2aWdhdGUpXHJcbiAgICAgICAgICAgICAgICBvbm5hdmlnYXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gaGVscGVyIHBlciBnZXN0aXJlIGluIG1hbmllcmEgc3RhbmRhcmRpenphdGEgdW5hIHJpc3Bvc3RhIGRpIHRpcG8gKipDYWxsUmVzdWx0KipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtDYWxsUmVzdWx0fSByZXNwb25zZSBSaXNwb3N0YSByaWNldnV0YSBkYWwgc2VydmVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzc01zZyBNZXNzYWdnaW8gZGEgdmlzdWFsaXp6YXJlIGluIGNhc28gZGkgc3VjY2Vzc29cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1zZyBNZXNzYWdnaW8gZGEgdmlzdWFsaXp6YXJlIGluIGNhc28gZGkgZmFsbGltZW50b1xyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcG9zdFN1Y2Nlc3MgQ2FsbGJhY2sgZGEgY2hpbWFyZSBpbiBjYXNvIGRpIHN1Y2Nlc3NvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb3N0RmFpbHVyZSBDYWxsYmFjayBkYSBjaGltYXJlIGluIGNhc28gZGkgZmFsbGltZW50b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFuYWdlQ2FsbFJlc3VsdFJlc3BvbnNlKHJlc3BvbnNlOiBDYWxsUmVzdWx0LCBzdWNjZXNzTXNnOiBzdHJpbmcsIGVycm9yTXNnOiBzdHJpbmcsIHBvc3RTdWNjZXNzOiBGdW5jdGlvbiA9IG51bGwsIHBvc3RGYWlsdXJlOiBGdW5jdGlvbiA9IG51bGwpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzd2FybmluZylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2ltcGxlV2FybmluZyhyZXNwb25zZS53YXJuaW5nKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHN1Y2Nlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpbXBsZVN1Y2Nlc3Moc3VjY2Vzc01zZyk7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zdFN1Y2Nlc3MpIHBvc3RTdWNjZXNzKCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oYXNlcnJvcikge1xyXG4gICAgICAgICAgICB0aGlzLnNpbXBsZUVycm9yKChlcnJvck1zZyA/IGVycm9yTXNnICsgXCI6IFwiIDogXCJcIikgKyByZXNwb25zZS5lcnJvcik7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zdEZhaWx1cmUpIHBvc3RGYWlsdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGhlbHBlciBwZXIgZ2VzdGlyZSBpbiBtYW5pZXJhIHN0YW5kYXJkaXp6YXRhIHVuYSByaXNwb3N0YSBkaSB0aXBvICoqc3RyaW5nKiosIGNvbnNpZGVyYW5kbyBjaGU6XHJcbiAgICAgKiBcclxuICAgICAqIFN0cmluZ2EgdnVvdGEgLS0+IFR1dHRvIGJlbmVcclxuICAgICAqIFxyXG4gICAgICogU3RyaW5nYSBwaWVuYSAtLT4gUXVlc3RvIMOoIGlsIG1lc3NhZ2dpbyBkJ2Vycm9yZSBwZXIgY3VpIGxhIGNoaWFtYXRhIMOoIGZhbGxpdGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlc3BvbnNlIFJpc3Bvc3RhIHJpY2V2dXRhIGRhbCBzZXJ2ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzTXNnIE1lc3NhZ2dpbyBkYSB2aXN1YWxpenphcmUgaW4gY2FzbyBkaSBzdWNjZXNzb1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTXNnIE1lc3NhZ2dpbyBkYSB2aXN1YWxpenphcmUgaW4gY2FzbyBkaSBmYWxsaW1lbnRvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb3N0U3VjY2VzcyBDYWxsYmFjayBkYSBjaGltYXJlIGluIGNhc28gZGkgc3VjY2Vzc29cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHBvc3RGYWlsdXJlIENhbGxiYWNrIGRhIGNoaW1hcmUgaW4gY2FzbyBkaSBmYWxsaW1lbnRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtYW5hZ2VTdHJpbmdSZXNwb25zZShyZXNwb25zZTogc3RyaW5nLCBzdWNjZXNzTXNnOiBzdHJpbmcsIGVycm9yTXNnOiBzdHJpbmcsIHBvc3RTdWNjZXNzOiBGdW5jdGlvbiA9IG51bGwsIHBvc3RGYWlsdXJlOiBGdW5jdGlvbiA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChzdWNjZXNzTXNnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaW1wbGVTdWNjZXNzKHN1Y2Nlc3NNc2cpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBvc3RTdWNjZXNzKSBwb3N0U3VjY2VzcygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvck1zZylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2ltcGxlRXJyb3IoZXJyb3JNc2cgKyBcIjogXCIgKyByZXNwb25zZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zdEZhaWx1cmUpIHBvc3RGYWlsdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGhlbHBlciBwZXIgZ2VzdGlyZSBpbiBtYW5pZXJhIHN0YW5kYXJkaXp6YXRhIHVuYSByaXNwb3N0YSBkaSB0aXBvICoqYm9vbGVhbioqXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZXNwb25zZSBSaXNwb3N0YSByaWNldnV0YSBkYWwgc2VydmVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzc01zZyBNZXNzYWdnaW8gZGEgdmlzdWFsaXp6YXJlIGluIGNhc28gZGkgc3VjY2Vzc29cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1zZyBNZXNzYWdnaW8gZGEgdmlzdWFsaXp6YXJlIGluIGNhc28gZGkgZmFsbGltZW50b1xyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcG9zdFN1Y2Nlc3MgQ2FsbGJhY2sgZGEgY2hpbWFyZSBpbiBjYXNvIGRpIHN1Y2Nlc3NvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb3N0RmFpbHVyZSBDYWxsYmFjayBkYSBjaGltYXJlIGluIGNhc28gZGkgZmFsbGltZW50b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFuYWdlU3RyaW5nUmVzcG9uc2VCb29sKHJlc3BvbnNlOiBib29sZWFuLCBzdWNjZXNzTXNnOiBzdHJpbmcsIGVycm9yTXNnOiBzdHJpbmcsIHBvc3RTdWNjZXNzOiBGdW5jdGlvbiA9IG51bGwsIHBvc3RGYWlsdXJlOiBGdW5jdGlvbiA9IG51bGwpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpbXBsZVN1Y2Nlc3Moc3VjY2Vzc01zZyk7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zdFN1Y2Nlc3MpIHBvc3RTdWNjZXNzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGVycm9yTXNnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaW1wbGVFcnJvcihlcnJvck1zZyk7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zdEZhaWx1cmUpIHBvc3RGYWlsdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9ucy5tZXNzYWdlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9zcmMvbGliL3NlcnZpY2VzL2V4dGVuc2lvbnMubWVzc2FnZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELGlCQUFpQjtBQUNqQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzNDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPO0FBQ1AsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsVUFBVTtBQUNWLE9BQU8sRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHekQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sY0FBYztJQWtEdkI7Ozs7T0FJRztJQUNILFlBQTJCLE1BQXFCLEVBQWdELFlBQXFCLEVBQTBDLE1BQWM7O1FBQWxKLFdBQU0sR0FBTixNQUFNLENBQWU7UUFBZ0QsaUJBQVksR0FBWixZQUFZLENBQVM7UUFBMEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXJEN0s7O1dBRUc7UUFDSyxRQUFHLEdBQUc7WUFDVixTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEdBQUc7WUFDdkQsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxHQUFHO1lBQ3BELE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsR0FBRztZQUNqRCxPQUFPLEVBQUUsRUFBRSxP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OztZQWRGLGFBQWE7MENBc0VpQyxRQUFRLFlBQUksTUFBTSxTQUFDLGdCQUFnQjt5Q0FBa0MsUUFBUSxZQUFJLE1BQU0sU0FBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQW5ndWxhclxyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8vIENvbmZpZ3VyYXppb25pXHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tIFwibmd4LXRvYXN0clwiO1xyXG5pbXBvcnQgc3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcclxuXHJcbi8vIFJYSlNcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuXHJcbi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgRVhUX0xPQ0FMRSwgRVhUX0ZBTkNZX0FMRVJUUyB9IGZyb20gXCIuLi90b2tlbnNcIjtcclxuaW1wb3J0IHsgQ2FsbFJlc3VsdCB9IGZyb20gXCIuLi9tb2RlbHMvQ2FsbFJlc3VsdFwiO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpY2UgY2hlIGZvcm5pc2NlIGZ1bnppb25hbGl0w6AgZGkgYWxlcnQgbmVpIHRpcGkgZm9uZGFtZW50YWxpOiBzdWNjZXNzLCBpbmZvLCB3YXJuaW5nIGUgZGFuZ2VyXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBNZXNzYWdlU2VydmljZSB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPZ2dldHRvIHN0YXRpY28gaW4gc3VwcG9ydG8gYWxsYSBsb2NhbGl6emF6aW9uZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGxvYyA9IHtcclxuICAgICAgICAnQ29uZmlybSc6IHsgJ2VuLVVTJzogXCJDb25maXJtXCIsICdpdC1JVCc6IFwiQ29uZmVybWFcIiwgfSxcclxuICAgICAgICAnQ2FuY2VsJzogeyAnZW4tVVMnOiBcIkNhbmNlbFwiLCAnaXQtSVQnOiBcIkFubnVsbGFcIiwgfSxcclxuICAgICAgICAnQ2xvc2UnOiB7ICdlbi1VUyc6IFwiQ2xvc2VcIiwgJ2l0LUlUJzogXCJDaGl1ZGlcIiwgfSxcclxuICAgICAgICAnRXJyb3InOiB7ICdlbi1VUyc6IFwiRXJyb3JcIiwgJ2l0LUlUJzogXCJFcnJvcmVcIiwgfSxcclxuICAgICAgICAnSW5mbyc6IHsgJ2VuLVVTJzogXCJJbmZvXCIsICdpdC1JVCc6IFwiSW5mb3JtYXppb25lXCIsIH0sXHJcbiAgICAgICAgJ1N1Y2Nlc3MnOiB7ICdlbi1VUyc6IFwiU3VjY2Vzc1wiLCAnaXQtSVQnOiBcIlN1Y2Nlc3NvXCIsIH0sXHJcbiAgICAgICAgJ1dhcm5pbmcnOiB7ICdlbi1VUyc6IFwiV2FybmluZ1wiLCAnaXQtSVQnOiBcIkF0dGVuemlvbmVcIiwgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGRpIHVuIHdhcm5pbmcgY29uIHJpY2hpZXN0YSBkaSBjb25mZXJtYVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHdhcm5pbmdTd2FsV2l0aENhbmNlbDogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtcGxhdGUgZGkgdW4gd2FybmluZyBjb24gcmljaGllc3RhIGRpIGNvbmZlcm1hXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc3VjY2Vzc1N3YWxXaXRoQ2FuY2VsOiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZW1wbGF0ZSBkaSB1biBlcnJvcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBlcnJvclN3YWw6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGRpIHVuIG1lc3NhZ2dpbyBkaSBzdWNjZXNzb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHN1Y2Nlc3NTd2FsOiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZW1wbGF0ZSBkaSB1biBhdnZpc29cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB3YXJuaW5nU3dhbDogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtcGxhdGUgZGkgdW4gbWVzc2FnZ2lvIGluZm9ybWF0aXZvXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW5mb1N3YWw6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGRpIHVuIHdhcm5pbmcgcGVyIGxhIHNlc3Npb25lIHNjYWR1dGFcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBleHBpcmVkU2Vzc2lvblN3YWw6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIFxyXG4gICAgICogXHJcbiAgICAgKiBAaWdub3JlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSwgQE9wdGlvbmFsKCkgQEluamVjdChFWFRfRkFOQ1lfQUxFUlRTKSBwcml2YXRlIEZBTkNZX0FMRVJUUzogYm9vbGVhbiwgQE9wdGlvbmFsKCkgQEluamVjdChFWFRfTE9DQUxFKSBwcml2YXRlIExPQ0FMRTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5leHBpcmVkU2Vzc2lvblN3YWwgPSBzd2FsLm1peGluKHtcclxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnTG9naW4nLFxyXG4gICAgICAgICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJhcHAtd3JhcFwiLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dPdXRzaWRlQ2xpY2s6IGZhbHNlLFxyXG4gICAgICAgICAgICBpY29uOiBcIndhcm5pbmdcIlxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnN1Y2Nlc3NTd2FsV2l0aENhbmNlbCA9IHN3YWwubWl4aW4oe1xyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5sb2NbXCJTdWNjZXNzXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcclxuICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogXCJidG4gYnRuLXNlY29uZGFyeSBhcHAtbWFyZ2luLXJpZ2h0LTEwXCIsXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IFwiYXBwLXdyYXBcIixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMubG9jW1wiQ29uZmlybVwiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSxcclxuICAgICAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogdGhpcy5sb2NbXCJDYW5jZWxcIl1bdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJ10sXHJcbiAgICAgICAgICAgIGljb246IFwic3VjY2Vzc1wiXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMud2FybmluZ1N3YWxXaXRoQ2FuY2VsID0gc3dhbC5taXhpbih7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLmxvY1tcIldhcm5pbmdcIl1bdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJ10sXHJcbiAgICAgICAgICAgIGN1c3RvbUNsYXNzOiB7XHJcbiAgICAgICAgICAgICAgICBjb25maXJtQnV0dG9uOiBcImJ0biBidG4tcHJpbWFyeVwiLFxyXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiBcImJ0biBidG4tc2Vjb25kYXJ5IGFwcC1tYXJnaW4tcmlnaHQtMTBcIixcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJhcHAtd3JhcFwiLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogdGhpcy5sb2NbXCJDb25maXJtXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiB0aGlzLmxvY1tcIkNhbmNlbFwiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSxcclxuICAgICAgICAgICAgaWNvbjogXCJ3YXJuaW5nXCJcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy53YXJuaW5nU3dhbCA9IHN3YWwubWl4aW4oe1xyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5sb2NbXCJXYXJuaW5nXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJhcHAtd3JhcFwiLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMubG9jW1wiQ2xvc2VcIl1bdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJ10sXHJcbiAgICAgICAgICAgIGljb246IFwid2FybmluZ1wiXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3VjY2Vzc1N3YWwgPSBzd2FsLm1peGluKHtcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMubG9jW1wiU3VjY2Vzc1wiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSxcclxuICAgICAgICAgICAgY3VzdG9tQ2xhc3M6IHtcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiYnRuIGJ0bi1wcmltYXJ5XCIsXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IFwiYXBwLXdyYXBcIixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiB0aGlzLmxvY1tcIkNsb3NlXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBpY29uOiBcInN1Y2Nlc3NcIlxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmVycm9yU3dhbCA9IHN3YWwubWl4aW4oe1xyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5sb2NbXCJFcnJvclwiXVt0aGlzLkxPQ0FMRSA/PyAnaXQtSVQnXSxcclxuICAgICAgICAgICAgY3VzdG9tQ2xhc3M6IHtcclxuICAgICAgICAgICAgICAgIGNvbmZpcm1CdXR0b246IFwiYnRuIGJ0bi1wcmltYXJ5XCIsXHJcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IFwiYXBwLXdyYXBcIixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYnV0dG9uc1N0eWxpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXZlcnNlQnV0dG9uczogdHJ1ZSxcclxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogZmFsc2UsXHJcbiAgICAgICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiB0aGlzLmxvY1tcIkNsb3NlXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBpY29uOiBcImVycm9yXCJcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pbmZvU3dhbCA9IHN3YWwubWl4aW4oe1xyXG4gICAgICAgICAgICB0aXRsZTogdGhpcy5sb2NbXCJJbmZvXCJdW3RoaXMuTE9DQUxFID8/ICdpdC1JVCddLFxyXG4gICAgICAgICAgICBjdXN0b21DbGFzczoge1xyXG4gICAgICAgICAgICAgICAgY29uZmlybUJ1dHRvbjogXCJidG4gYnRuLXByaW1hcnlcIixcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogXCJhcHAtd3JhcFwiLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBidXR0b25zU3R5bGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxyXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSxcclxuICAgICAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6IHRoaXMubG9jW1wiQ2xvc2VcIl1bdGhpcy5MT0NBTEUgPz8gJ2l0LUlUJ10sXHJcbiAgICAgICAgICAgIGljb246IFwiaW5mb1wiXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlc2VudGF6aW9uZSBkaSB1biBzZW1wbGljZSBtZXNzYWdnaW8gZGkgc3VjY2Vzc29cclxuICAgICAqIFxyXG4gICAgICogU2UgdmllbmUgY2hpYW1hdG8gY29uIGxlIGltcG9zdGF6aW9uaSBkaSBkZWZhdWx0IGUgdG9hc3RyIMOoIGFiaWxpdGF0bywgdmllbmUgbW9zdHJhdG8gYWwgY2VudHJvXHJcbiAgICAgKiBTZSB2aWVuZSBjaGlhbWF0byBjb24gb3ZlcnJpZGUgc3UgdG9hc3RyIHZ1b2wgZGlyZSBjaGUgw6ggdW5hIG5vdGlmaWNhIHNlY29uZGFyaWEgZSBhcHBhcmUgaW4gYWx0byBhIGRlc3RyYVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUZXN0byBkYSBtb3N0cmFyZVxyXG4gICAgICogQHBhcmFtIHtcInRvYXN0clwiIHwgXCJzd2FsXCIgfCBudWxsfSBzZWNvbmRhcnlOb3RpZmljYXRpb25UeXBlIFF1YWxvcmEgc2lhIHVuYSBub3RpZmljYSBzZWNvbmRhcmlhLCBuZSBpbmRpY2EgaWwgdGlwb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2ltcGxlU3VjY2Vzcyh0ZXh0OiBzdHJpbmcsIHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGU6IFwidG9hc3RyXCIgfCBcInN3YWxcIiB8IG51bGwgPSBudWxsLCBzZWNvbmRhcnlOb3RpZmljYXRpb25UaW1lb3V0OiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHRvcyA9IHRoaXMudG9hc3RyT3JTd2FsKHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGUpO1xyXG5cclxuICAgICAgICBpZiAodG9zID09IFwic3dhbFwiKSB0aGlzLnN1Y2Nlc3NTd2FsLmZpcmUoXCJcIiwgdGV4dCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnRvYXN0ci5zdWNjZXNzKHRleHQsIG51bGwsIHsgcG9zaXRpb25DbGFzczogdG9zID09IFwidG9hc3RyXCIgPyBcInRvYXN0LXRvcC1yaWdodFwiIDogXCJ0b2FzdC10b3AtY2VudGVyXCIsIHRpbWVPdXQ6IHNlY29uZGFyeU5vdGlmaWNhdGlvblRpbWVvdXQgfHwgKHRvcyA9PSBcInRvYXN0clwiID8gMCA6IDUwMDApLCBleHRlbmRlZFRpbWVPdXQ6ICB0b3MgPT0gXCJ0b2FzdHJcIiA/IDAgOiAxMDAwfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcmVzZW50YXppb25lIGRpIHVuIHNlbXBsaWNlIG1lc3NhZ2dpbyBkaSBpbmZvcm1hemlvbmVcclxuICAgICAqIFxyXG4gICAgICogU2UgdmllbmUgY2hpYW1hdG8gY29uIGxlIGltcG9zdGF6aW9uaSBkaSBkZWZhdWx0IGUgdG9hc3RyIMOoIGFiaWxpdGF0bywgdmllbmUgbW9zdHJhdG8gYWwgY2VudHJvXHJcbiAgICAgKiBTZSB2aWVuZSBjaGlhbWF0byBjb24gb3ZlcnJpZGUgc3UgdG9hc3RyIHZ1b2wgZGlyZSBjaGUgw6ggdW5hIG5vdGlmaWNhIHNlY29uZGFyaWEgZSBhcHBhcmUgaW4gYWx0byBhIGRlc3RyYVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBUZXN0byBkYSBtb3N0cmFyZVxyXG4gICAgICogQHBhcmFtIHtcInRvYXN0clwiIHwgXCJzd2FsXCIgfCBudWxsfSBzZWNvbmRhcnlOb3RpZmljYXRpb25UeXBlIFF1YWxvcmEgc2lhIHVuYSBub3RpZmljYSBzZWNvbmRhcmlhLCBuZSBpbmRpY2EgaWwgdGlwb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2ltcGxlSW5mbyh0ZXh0OiBzdHJpbmcsIHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGU6IFwidG9hc3RyXCIgfCBcInN3YWxcIiB8IG51bGwgPSBudWxsLCBzZWNvbmRhcnlOb3RpZmljYXRpb25UaW1lb3V0OiBudW1iZXIgPSBudWxsKSB7XHJcbiAgICAgICAgbGV0IHRvcyA9IHRoaXMudG9hc3RyT3JTd2FsKHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGUpO1xyXG5cclxuICAgICAgICBpZiAodG9zID09IFwic3dhbFwiKSB0aGlzLmluZm9Td2FsLmZpcmUoXCJcIiwgdGV4dCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnRvYXN0ci5pbmZvKHRleHQsIG51bGwsIHsgcG9zaXRpb25DbGFzczogdG9zID09IFwidG9hc3RyXCIgPyBcInRvYXN0LXRvcC1yaWdodFwiIDogXCJ0b2FzdC10b3AtY2VudGVyXCIsIHRpbWVPdXQ6IHNlY29uZGFyeU5vdGlmaWNhdGlvblRpbWVvdXQgfHwgKHRvcyA9PSBcInRvYXN0clwiID8gMCA6IDUwMDApLCBleHRlbmRlZFRpbWVPdXQ6ICB0b3MgPT0gXCJ0b2FzdHJcIiA/IDAgOiAxMDAwIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlc2VudGF6aW9uZSBkaSB1biBzZW1wbGljZSBtZXNzYWdnaW8gZGkgZXJyb3JlXHJcbiAgICAgKiBcclxuICAgICAqIFNlIHZpZW5lIGNoaWFtYXRvIGNvbiBsZSBpbXBvc3RhemlvbmkgZGkgZGVmYXVsdCBlIHRvYXN0ciDDqCBhYmlsaXRhdG8sIHZpZW5lIG1vc3RyYXRvIGFsIGNlbnRyb1xyXG4gICAgICogU2UgdmllbmUgY2hpYW1hdG8gY29uIG92ZXJyaWRlIHN1IHRvYXN0ciB2dW9sIGRpcmUgY2hlIMOoIHVuYSBub3RpZmljYSBzZWNvbmRhcmlhIGUgYXBwYXJlIGluIGFsdG8gYSBkZXN0cmFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgVGVzdG8gZGEgbW9zdHJhcmVcclxuICAgICAqIEBwYXJhbSB7XCJ0b2FzdHJcIiB8IFwic3dhbFwiIHwgbnVsbH0gc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZSBRdWFsb3JhIHNpYSB1bmEgbm90aWZpY2Egc2Vjb25kYXJpYSwgbmUgaW5kaWNhIGlsIHRpcG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNpbXBsZUVycm9yKHRleHQ6IHN0cmluZywgc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZTogXCJ0b2FzdHJcIiB8IFwic3dhbFwiIHwgbnVsbCA9IG51bGwsIHNlY29uZGFyeU5vdGlmaWNhdGlvblRpbWVvdXQ6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBsZXQgdG9zID0gdGhpcy50b2FzdHJPclN3YWwoc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZSk7XHJcblxyXG4gICAgICAgIGlmICh0b3MgPT0gXCJzd2FsXCIpIHRoaXMuZXJyb3JTd2FsLmZpcmUoXCJcIiwgdGV4dCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLnRvYXN0ci5lcnJvcih0ZXh0LCBudWxsLCB7IHBvc2l0aW9uQ2xhc3M6IHRvcyA9PSBcInRvYXN0clwiID8gXCJ0b2FzdC10b3AtcmlnaHRcIiA6IFwidG9hc3QtdG9wLWNlbnRlclwiLCB0aW1lT3V0OiBzZWNvbmRhcnlOb3RpZmljYXRpb25UaW1lb3V0IHx8ICh0b3MgPT0gXCJ0b2FzdHJcIiA/IDAgOiA1MDAwKSwgZXh0ZW5kZWRUaW1lT3V0OiAgdG9zID09IFwidG9hc3RyXCIgPyAwIDogMTAwMCB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZXNlbnRhemlvbmUgZGkgdW4gc2VtcGxpY2UgbWVzc2FnZ2lvIGRpIGF2dmlzb1xyXG4gICAgICogXHJcbiAgICAgKiBTZSB2aWVuZSBjaGlhbWF0byBjb24gbGUgaW1wb3N0YXppb25pIGRpIGRlZmF1bHQgZSB0b2FzdHIgw6ggYWJpbGl0YXRvLCB2aWVuZSBtb3N0cmF0byBhbCBjZW50cm9cclxuICAgICAqIFNlIHZpZW5lIGNoaWFtYXRvIGNvbiBvdmVycmlkZSBzdSB0b2FzdHIgdnVvbCBkaXJlIGNoZSDDqCB1bmEgbm90aWZpY2Egc2Vjb25kYXJpYSBlIGFwcGFyZSBpbiBhbHRvIGEgZGVzdHJhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IFRlc3RvIGRhIG1vc3RyYXJlXHJcbiAgICAgKiBAcGFyYW0ge1widG9hc3RyXCIgfCBcInN3YWxcIiB8IG51bGx9IHNlY29uZGFyeU5vdGlmaWNhdGlvblR5cGUgUXVhbG9yYSBzaWEgdW5hIG5vdGlmaWNhIHNlY29uZGFyaWEsIG5lIGluZGljYSBpbCB0aXBvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzaW1wbGVXYXJuaW5nKHRleHQ6IHN0cmluZywgc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZTogXCJ0b2FzdHJcIiB8IFwic3dhbFwiIHwgbnVsbCA9IG51bGwsIHNlY29uZGFyeU5vdGlmaWNhdGlvblRpbWVvdXQ6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBsZXQgdG9zID0gdGhpcy50b2FzdHJPclN3YWwoc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVHlwZSk7XHJcblxyXG4gICAgICAgIGlmICh0b3MgPT0gXCJzd2FsXCIpIHRoaXMud2FybmluZ1N3YWwuZmlyZShcIlwiLCB0ZXh0KTtcclxuICAgICAgICBlbHNlIHRoaXMudG9hc3RyLndhcm5pbmcodGV4dCwgbnVsbCwgeyBwb3NpdGlvbkNsYXNzOiB0b3MgPT0gXCJ0b2FzdHJcIiA/IFwidG9hc3QtdG9wLXJpZ2h0XCIgOiBcInRvYXN0LXRvcC1jZW50ZXJcIiwgdGltZU91dDogc2Vjb25kYXJ5Tm90aWZpY2F0aW9uVGltZW91dCB8fCAodG9zID09IFwidG9hc3RyXCIgPyAwIDogNTAwMCksIGV4dGVuZGVkVGltZU91dDogIHRvcyA9PSBcInRvYXN0clwiID8gMCA6IDEwMDAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSaXB1bGlzY2UgdHV0dGkgaSBtZXNzYWdnaSBwcmVzZW50aSBpbiB1biBkYXRvIG1vbWVudG8gc3VsbG8gc2NoZXJtb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXJNZXNzYWdlcygpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5jbGVhcigpO1xyXG4gICAgICAgIHN3YWwuY2xvc2UoKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3N0cmEgdW4gbWVzc2FnZ2lvIGRpIGF2dmlzbyBjb24gcmljaGllc3RhIGRpIGNvbmZlcm1hXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSBUaXRvbG8gZGVsIG1lc3NhZ2dpb1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgQ29udGVudXRvIGRlbCBtZXNzYWdnaW9cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2V9IFJlc3RpdHVpc2NlIHVuYSBQcm9taXNlIGNvbCByaXN1bHRhdG8gc2NlbHRvIGRhbGwndXRlbnRlIChjb25mZXJtYSBvIG5vKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcHJvbWlzZVdhcm5pbmdXaXRoQ2hvaWNlKHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMud2FybmluZ1N3YWxXaXRoQ2FuY2VsLmZpcmUodGl0bGUsIHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW4gYmFzZSBhbGxhIGNvbmZpZ3VyYXppb25lIGF0dHVhbGUgZSBhbGwnZXZlbnR1YWxlIG92ZXJyaWRlIHBlciBsYSBjaGlhbWF0YSBkZWwgY2FzbyBpbmRpY2Egc2UgYmlzb2duYSB1dGlsaXp6YXJlIHRvYXN0ciBvIHN3ZWV0YWxlcnRcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtcInRvYXN0clwiIHwgXCJzd2FsXCIgfCBudWxsfSBwcm92aWRlck92ZXJyaWRlIE92ZXJyaWRlIGFsbGEgbW9kYWxpdMOgIGNvbmZpZ3VyYXRhXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtcInRvYXN0clwiIHwgXCJzd2FsXCJ9IEluZGljYXppb25lIHN1IGNoZSBwcm92aWRlciBkaSBtZXNzYWdnaSBkaSBhdnZpc28gZGViYmEgZXNzZXJlIHV0aWxpenphdG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB0b2FzdHJPclN3YWwocHJvdmlkZXJPdmVycmlkZTogXCJ0b2FzdHJcIiB8IFwic3dhbFwiIHwgbnVsbCk6IFwidG9hc3RyXCIgfCBcInN3YWxcIiB7XHJcbiAgICAgICAgaWYgKHByb3ZpZGVyT3ZlcnJpZGUgIT0gbnVsbClcclxuICAgICAgICAgICAgcmV0dXJuIHByb3ZpZGVyT3ZlcnJpZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuRkFOQ1lfQUxFUlRTID09IG51bGwgPyBcInN3YWxcIiA6IHRoaXMuRkFOQ1lfQUxFUlRTID8gXCJzd2FsXCIgOiBcInRvYXN0clwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9zdHJhIHVuIG1lc3NhZ2dpbyBkaSBhdnZpc28gY29uIHJpY2hpZXN0YSBkaSBjb25mZXJtYSBlIGdlc3Rpc2NlIGlsIHJpc3VsdGF0byBjaGlhbWF0byBpIGNhbGxiYWNrICoqb25zdWNjZXNzKiogbyAqKm9uZXJyb3IqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgVGl0b2xvIGRlbCBtZXNzYWdnaW9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IENvbnRlbnV0byBkZWwgbWVzc2FnZ2lvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbnN1Y2Nlc3MgQ2FsbGJhY2sgZGEgY2hpbWFyZSBzdSBjb25mZXJtYVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25lcnJvciBDYWxsYmFjayBkYSBjaGltYXJlIHN1IGVycm9yaVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2ltcGxlV2FybmluZ1dpdGhDaG9pY2UodGl0bGU6IHN0cmluZywgdGV4dDogc3RyaW5nLCBvbnN1Y2Nlc3M6IEZ1bmN0aW9uID0gbnVsbCwgb25lcnJvcjogRnVuY3Rpb24gPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy53YXJuaW5nU3dhbFdpdGhDYW5jZWwuZmlyZSh0aXRsZSwgdGV4dCkudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudmFsdWUgJiYgb25zdWNjZXNzKVxyXG4gICAgICAgICAgICAgICAgb25zdWNjZXNzKCk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKG9uZXJyb3IpXHJcbiAgICAgICAgICAgICAgICBvbmVycm9yKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb3N0cmEgdW4gbWVzc2FnZ2lvIGRpIHN1Y2Nlc3MgY29uIHJpY2hpZXN0YSBkaSBjb25mZXJtYSBlIGdlc3Rpc2NlIGlsIHJpc3VsdGF0byBjaGlhbWF0byBpIGNhbGxiYWNrICoqb25jb25maXJtKiogbyAqKm9uYWJvcnQqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgVGl0b2xvIGRlbCBtZXNzYWdnaW9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IENvbnRlbnV0byBkZWwgbWVzc2FnZ2lvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbmNvbmZpcm0gQ2FsbGJhY2sgZGEgY2hpbWFyZSBzdSBjb25mZXJtYVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25hYm9ydCBDYWxsYmFjayBkYSBjaGltYXJlIHN1IGFubnVsbGFtZW50b1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbmZpcm10ZXh0IFRlc3RvIGRlbCBwdWxzYW50ZSBkaSBhemlvbmVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhYm9ydHRleHQgVGVzdG8gZGVsIHB1bHNhbnRlIGRpIGFubnVsbGFtZW50b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2ltcGxlU3VjY2Vzc1dpdGhDaG9pY2UodGl0bGU6IHN0cmluZywgdGV4dDogc3RyaW5nLCBvbmNvbmZpcm06IEZ1bmN0aW9uID0gbnVsbCwgb25hYm9ydDogRnVuY3Rpb24gPSBudWxsLCBjb25maXJtdGV4dDogc3RyaW5nID0gXCJcIiwgYWJvcnR0ZXh0OiBzdHJpbmcgPScnKSB7XHJcbiAgICAgICAgdmFyIGNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aXRsZSxcclxuICAgICAgICAgICAgaHRtbDogdGV4dFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGNvbmZpcm10ZXh0KVxyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uW1wiY29uZmlybUJ1dHRvblRleHRcIl0gPSBjb25maXJtdGV4dDtcclxuICAgICAgICBpZiAoYWJvcnR0ZXh0KVxyXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uW1wiY2FuY2VsQnV0dG9uVGV4dFwiXSA9IGFib3J0dGV4dDtcclxuXHJcbiAgICAgICAgdGhpcy5zdWNjZXNzU3dhbFdpdGhDYW5jZWwuZmlyZShjb25maWd1cmF0aW9uKS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSAmJiBvbmNvbmZpcm0pXHJcbiAgICAgICAgICAgICAgICBvbmNvbmZpcm0oKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAob25hYm9ydClcclxuICAgICAgICAgICAgICAgIG9uYWJvcnQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vc3RyYSB1biBtZXNzYWdnaW8gZGkgYXZ2aXNvIGNvbiByaWNoaWVzdGEgZGkgY29uZmVybWEgZSBnZXN0aXNjZSBpbCByaXN1bHRhdG8gY2hpYW1hdG8gaSBjYWxsYmFjayAqKm9uc3VjY2VzcyoqIG8gKipvbmVycm9yKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIFRpdG9sbyBkZWwgbWVzc2FnZ2lvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBDb250ZW51dG8gZGVsIG1lc3NhZ2dpb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb2JzZXJ2YWJsZVNpbXBsZVdhcm5pbmdXaXRoQ2hvaWNlKHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBvZih0aGlzLndhcm5pbmdTd2FsV2l0aENhbmNlbC5maXJlKHRpdGxlLCB0ZXh0KSkucGlwZShtYXAodCA9PiAhIXQudmFsdWUpKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW9zdHJhIHVuIG1lc3NhZ2dpbyBkaSBhdnZpc28gY2hlIGxhIHNlc3Npb25lIGNvcnJlbnRlIMOoIHNjYWR1dGEgZSBwcm9wb25lIGFsbCd1dGVudGUgZGkgbmF2aWdhcmUgYWwgbG9naW4uIFF1YWxvcmEgbCd1dGVudGUgZGVjaWRlc3NlIGRpIGZhcmxvIFxyXG4gICAgICogdmVycsOgIGNoaWFtYXRhIGxhIGZ1bnppb25lIGRpIGNhbGxiYWNrICoqb25uYXZpZ2F0ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgVGl0b2xvIGRlbCBtZXNzYWdnaW9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IENvbnRlbnV0byBkZWwgbWVzc2FnZ2lvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbm5hdmlnYXRlIENhbGxiYWNrIGRhIGNoaW1hcmUgc3UgbmF2aWdhemlvbmUgaW4gY29yc29cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV4cGlyZWRTZXNzaW9uTWVzc2FnZSh0aXRsZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIG9ubmF2aWdhdGU6IEZ1bmN0aW9uID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZXhwaXJlZFNlc3Npb25Td2FsLmZpcmUodGl0bGUsIHRleHQpLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnZhbHVlICYmIG9ubmF2aWdhdGUpXHJcbiAgICAgICAgICAgICAgICBvbm5hdmlnYXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gaGVscGVyIHBlciBnZXN0aXJlIGluIG1hbmllcmEgc3RhbmRhcmRpenphdGEgdW5hIHJpc3Bvc3RhIGRpIHRpcG8gKipDYWxsUmVzdWx0KipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtDYWxsUmVzdWx0fSByZXNwb25zZSBSaXNwb3N0YSByaWNldnV0YSBkYWwgc2VydmVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3VjY2Vzc01zZyBNZXNzYWdnaW8gZGEgdmlzdWFsaXp6YXJlIGluIGNhc28gZGkgc3VjY2Vzc29cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1zZyBNZXNzYWdnaW8gZGEgdmlzdWFsaXp6YXJlIGluIGNhc28gZGkgZmFsbGltZW50b1xyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcG9zdFN1Y2Nlc3MgQ2FsbGJhY2sgZGEgY2hpbWFyZSBpbiBjYXNvIGRpIHN1Y2Nlc3NvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb3N0RmFpbHVyZSBDYWxsYmFjayBkYSBjaGltYXJlIGluIGNhc28gZGkgZmFsbGltZW50b1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFuYWdlQ2FsbFJlc3VsdFJlc3BvbnNlKHJlc3BvbnNlOiBDYWxsUmVzdWx0LCBzdWNjZXNzTXNnOiBzdHJpbmcsIGVycm9yTXNnOiBzdHJpbmcsIHBvc3RTdWNjZXNzOiBGdW5jdGlvbiA9IG51bGwsIHBvc3RGYWlsdXJlOiBGdW5jdGlvbiA9IG51bGwpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuaGFzd2FybmluZylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2ltcGxlV2FybmluZyhyZXNwb25zZS53YXJuaW5nKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHN1Y2Nlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpbXBsZVN1Y2Nlc3Moc3VjY2Vzc01zZyk7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zdFN1Y2Nlc3MpIHBvc3RTdWNjZXNzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaW1wbGVFcnJvcigoZXJyb3JNc2cgPyBlcnJvck1zZyArIFwiOiBcIiA6IFwiXCIpICsgcmVzcG9uc2UuaGFzZXJyb3IgPyByZXNwb25zZS5lcnJvciA6ICdbTk8gRVJSLl0nKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwb3N0RmFpbHVyZSkgcG9zdEZhaWx1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gaGVscGVyIHBlciBnZXN0aXJlIGluIG1hbmllcmEgc3RhbmRhcmRpenphdGEgdW5hIHJpc3Bvc3RhIGRpIHRpcG8gKipzdHJpbmcqKiwgY29uc2lkZXJhbmRvIGNoZTpcclxuICAgICAqIFxyXG4gICAgICogU3RyaW5nYSB2dW90YSAtLT4gVHV0dG8gYmVuZVxyXG4gICAgICogXHJcbiAgICAgKiBTdHJpbmdhIHBpZW5hIC0tPiBRdWVzdG8gw6ggaWwgbWVzc2FnZ2lvIGQnZXJyb3JlIHBlciBjdWkgbGEgY2hpYW1hdGEgw6ggZmFsbGl0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzcG9uc2UgUmlzcG9zdGEgcmljZXZ1dGEgZGFsIHNlcnZlclxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN1Y2Nlc3NNc2cgTWVzc2FnZ2lvIGRhIHZpc3VhbGl6emFyZSBpbiBjYXNvIGRpIHN1Y2Nlc3NvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZXJyb3JNc2cgTWVzc2FnZ2lvIGRhIHZpc3VhbGl6emFyZSBpbiBjYXNvIGRpIGZhbGxpbWVudG9cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHBvc3RTdWNjZXNzIENhbGxiYWNrIGRhIGNoaW1hcmUgaW4gY2FzbyBkaSBzdWNjZXNzb1xyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gcG9zdEZhaWx1cmUgQ2FsbGJhY2sgZGEgY2hpbWFyZSBpbiBjYXNvIGRpIGZhbGxpbWVudG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1hbmFnZVN0cmluZ1Jlc3BvbnNlKHJlc3BvbnNlOiBzdHJpbmcsIHN1Y2Nlc3NNc2c6IHN0cmluZywgZXJyb3JNc2c6IHN0cmluZywgcG9zdFN1Y2Nlc3M6IEZ1bmN0aW9uID0gbnVsbCwgcG9zdEZhaWx1cmU6IEZ1bmN0aW9uID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3NNc2cpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpbXBsZVN1Y2Nlc3Moc3VjY2Vzc01zZyk7XHJcblxyXG4gICAgICAgICAgICBpZiAocG9zdFN1Y2Nlc3MpIHBvc3RTdWNjZXNzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGVycm9yTXNnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaW1wbGVFcnJvcihlcnJvck1zZyArIFwiOiBcIiArIHJlc3BvbnNlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwb3N0RmFpbHVyZSkgcG9zdEZhaWx1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gaGVscGVyIHBlciBnZXN0aXJlIGluIG1hbmllcmEgc3RhbmRhcmRpenphdGEgdW5hIHJpc3Bvc3RhIGRpIHRpcG8gKipib29sZWFuKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHJlc3BvbnNlIFJpc3Bvc3RhIHJpY2V2dXRhIGRhbCBzZXJ2ZXJcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdWNjZXNzTXNnIE1lc3NhZ2dpbyBkYSB2aXN1YWxpenphcmUgaW4gY2FzbyBkaSBzdWNjZXNzb1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGVycm9yTXNnIE1lc3NhZ2dpbyBkYSB2aXN1YWxpenphcmUgaW4gY2FzbyBkaSBmYWxsaW1lbnRvXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb3N0U3VjY2VzcyBDYWxsYmFjayBkYSBjaGltYXJlIGluIGNhc28gZGkgc3VjY2Vzc29cclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IHBvc3RGYWlsdXJlIENhbGxiYWNrIGRhIGNoaW1hcmUgaW4gY2FzbyBkaSBmYWxsaW1lbnRvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtYW5hZ2VTdHJpbmdSZXNwb25zZUJvb2wocmVzcG9uc2U6IGJvb2xlYW4sIHN1Y2Nlc3NNc2c6IHN0cmluZywgZXJyb3JNc2c6IHN0cmluZywgcG9zdFN1Y2Nlc3M6IEZ1bmN0aW9uID0gbnVsbCwgcG9zdEZhaWx1cmU6IEZ1bmN0aW9uID0gbnVsbCkge1xyXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICBpZiAoc3VjY2Vzc01zZylcclxuICAgICAgICAgICAgICAgIHRoaXMuc2ltcGxlU3VjY2VzcyhzdWNjZXNzTXNnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwb3N0U3VjY2VzcykgcG9zdFN1Y2Nlc3MoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZXJyb3JNc2cpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNpbXBsZUVycm9yKGVycm9yTXNnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwb3N0RmFpbHVyZSkgcG9zdEZhaWx1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
@@ -336,8 +336,8 @@ class MessageService {
336
336
  if (postSuccess)
337
337
  postSuccess();
338
338
  }
339
- else if (response.haserror) {
340
- this.simpleError((errorMsg ? errorMsg + ": " : "") + response.error);
339
+ else {
340
+ this.simpleError((errorMsg ? errorMsg + ": " : "") + response.haserror ? response.error : '[NO ERR.]');
341
341
  if (postFailure)
342
342
  postFailure();
343
343
  }
@@ -961,8 +961,9 @@ const Export = (order, header, format = null, tableid = null) => (target, proper
961
961
  */
962
962
  const ExportAs = (order, type) => (target, propertyKey) => {
963
963
  var t = new type();
964
- for (var prop in t) {
965
- //Niente hasownproperty perché le proprietà dell'oggetto interno sono dentro al prototype
964
+ var props = t[exportList];
965
+ for (let i = 0; i < props.length; i++) {
966
+ let prop = props[i].replace(csvVisPrefix, '');
966
967
  if (typeof t[prop + csvVisPrefix] !== "undefined") {
967
968
  var toEmit = t[prop + csvVisPrefix];
968
969
  var lbl = t[prop + csvHdrPrefix];
@@ -1075,7 +1076,7 @@ class ExportService {
1075
1076
  }
1076
1077
  }
1077
1078
  }
1078
- if (!columns)
1079
+ if (!columns || columns.length == 0)
1079
1080
  return headers.sort((a, b) => a.order - b.order);
1080
1081
  else {
1081
1082
  // Se mi arriva la lista di colonne non mi dà solo la visibilità, ma anche l'ordinamento