@esfaenza/es-table 11.2.38-beta1 → 11.2.39

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.
@@ -46,7 +46,7 @@ export class RowGroupingHandler {
46
46
  this.est.BaseItemsCount = view.objectcount;
47
47
  }
48
48
  else {
49
- // 2) Se viene richiesto il dettaglio di un qualsiasi gruppo diverso dall'ultimo vuol dire che devo aggiungere
49
+ // 2) Se viene richiesto il dettaglio di un qualsiasi gruppo diverso dall'ultimo vuol dire che devo aggiungere
50
50
  // dopo al gruppo che ho cliccato la lista dei gruppi tirata fuori questa volta (intermediateGroup = true)
51
51
  /*
52
52
  * GruppoA GruppoA
@@ -57,7 +57,7 @@ export class RowGroupingHandler {
57
57
  * GruppoD
58
58
  * GruppoE
59
59
  */
60
- // 3) se i gruppi richiesti dalla view sono uguali ai gruppi presenti vuol dire che sto prendendo gli oggetti veri e propri, sono in
60
+ // 3) se i gruppi richiesti dalla view sono uguali ai gruppi presenti vuol dire che sto prendendo gli oggetti veri e propri, sono in
61
61
  // view.items e quindi in TMPBoundSource, ho inoltre le informazioni di paginazione **per il singolo sottogruppo** (intermediateGroup = false)
62
62
  /*
63
63
  * GruppoA GruppoA
@@ -131,15 +131,20 @@ export class RowGroupingHandler {
131
131
  itemsCacheReference.push(itm);
132
132
  }
133
133
  });
134
- // Elimino gli oggetti vecchi
134
+ // Elimino gli oggetti vecchi
135
135
  // 1) Ricerca intermedia, stato salvato - Elimino tutti gli item e tutti i gruppi la cui route è più lunga della corrente, tutti gli item relativi alla path corrente, e tutte
136
136
  // le cache di ricerca effettuate su una path più profonda dell'attuale
137
137
  // 2) Ricerca finale o ricerca intermedia senza stato salvato - Elimino tutti gli item relativi alla path corrente
138
- // Per "stato salvato" si intendono ricerche vecchie salvate per poter essere rieffettuate in caso di ordinamenti su colonne di interesse
138
+ // Per "stato salvato" si intendono ricerche vecchie salvate per poter essere rieffettuate in caso di ordinamenti su colonne di interesse
139
139
  if (intermediateGroup && view.savedstate) {
140
140
  this.est.boundSource = this.est.boundSource.filter(t => !(t._item || t._thisRoute.length > groupRoute.length));
141
141
  this.est.groupSearchRequestsCache = this.est.groupSearchRequestsCache.filter(t => !(t.route.length > groupRoute.length));
142
142
  }
143
+ else if (intermediateGroup) {
144
+ // Se invece lo stato non è salvato vuol dire che c'è stato un cambio di pagina interno ad un gruppo già aperto:
145
+ // - Elimino tutti gli elementi riconducibili a questo gruppo che erano già presenti
146
+ this.est.boundSource = this.est.boundSource.filter(t => !(t._item || (t._thisKey.startsWith(groupKey) && t._thisKey != groupKey)));
147
+ }
143
148
  this.est.boundSource = this.est.boundSource.filter(t => !(t._parent == groupKey));
144
149
  let thisGroup = this.est.boundSource[insertIndex];
145
150
  if (intermediateGroup)
@@ -275,7 +280,7 @@ export class RowGroupingHandler {
275
280
  anygp._thisKey = parent._thisKey + gp.value;
276
281
  anygp._grouplevel = parent._grouplevel + 1;
277
282
  }
278
- // Pusho il gruppo, tutti i gruppi del livello sotto, o gli item se io sono l'ultimo gruppo.
283
+ // Pusho il gruppo, tutti i gruppi del livello sotto, o gli item se io sono l'ultimo gruppo.
279
284
  // La visibilità è solo per il gruppo a livello 0, tutti gli altri gruppi saranno mostrati o nascosti di conseguenza
280
285
  if (currentIndex == 0)
281
286
  anygp._visible = true;
@@ -470,4 +475,4 @@ export class RowGroupingHandler {
470
475
  return value;
471
476
  }
472
477
  }
473
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm93R3JvdXBpbmdIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL2NsYXNzZXMvUm93R3JvdXBpbmdIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLFVBQVU7QUFDVixPQUFPLEVBQTBCLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFLckosaUVBQWlFO0FBQ2pFLE1BQU0sT0FBTyxrQkFBa0I7SUFTM0IsMEJBQTBCO0lBQzFCLFlBQW9CLEdBQXFCLEVBQVUsU0FBMkIsRUFBVSxRQUFxQjtRQUF6RixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQVI3RyxxRkFBcUY7UUFDOUUsaUJBQVksR0FBdUIsSUFBSSxHQUFHLEVBQWlCLENBQUM7UUFDbkUsNkdBQTZHO1FBQ3RHLGdCQUFXLEdBQXVCLElBQUksR0FBRyxFQUFpQixDQUFDO1FBQ2xFLDZHQUE2RztRQUN0Ryx1QkFBa0IsR0FBeUIsSUFBSSxHQUFHLEVBQW1CLENBQUM7SUFHb0MsQ0FBQztJQUVsSDs7Ozs7Ozs7O09BU0c7SUFDSSwwQkFBMEIsQ0FBQyxJQUFvQixFQUFFLFlBQW9COztRQUN4RSx3SUFBd0k7UUFDeEksOEVBQThFO1FBQzlFLElBQUksQ0FBQyxPQUFBLElBQUksQ0FBQyxlQUFlLDBDQUFFLE1BQU0sS0FBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztZQUM3QyxJ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TyxFQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQztRQUVyRixnR0FBZ0c7UUFDaEcsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGlicmVyaWVcclxuaW1wb3J0IHsgRGF0ZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vIERpcmV0dGl2ZSAvIENvbXBvbmVudGlcclxuaW1wb3J0IHsgRXNUaCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL2VzLXRoL2VzX3RoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBFc1RoRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGguZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBcHBPcmRlcmluZywgQXBwU2VhcmNoLCBHcm91cCwgR3JvdXBBZ2dyZWdhdGlvbiwgR3JvdXBPckFnZ3JlZ2F0aW9uLCBHcm91cFBhZ2VyLCBHcm91cFJvdXRlRnJhZ21lbnQsIFRoQWdncmVnYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluXCI7XHJcblxyXG4vLyBVdGlsaXRpZXNcclxuaW1wb3J0IHsgVXRpbGl0aWVzSGFuZGxlciB9IGZyb20gXCIuL1V0aWxpdGllc0hhbmRsZXJcIjtcclxuXHJcbi8qKiBDbGFzc2UgY2hlIGdlc3Rpc2NlIGxhIG1vZGFsaXTDoCBSb3cgR3JvdXBpbmcgZGVsbCdlcy10YWJsZSAqL1xyXG5leHBvcnQgY2xhc3MgUm93R3JvdXBpbmdIYW5kbGVyIHtcclxuXHJcbiAgICAvKiogQ2FjaGUgcGVyIHNhbHZhcmUgcGVyIG9nbmkgY2hpYXZlIGRpIG9nbmkgZ3J1cHBvIGNoaSDDqCBpbCBncnVwcG8gcmFwcHJlc2VudGF0byAqL1xyXG4gICAgcHVibGljIHJnR3JvdXBDYWNoZTogTWFwPHN0cmluZywgR3JvdXA+ID0gbmV3IE1hcDxzdHJpbmcsIEdyb3VwPigpO1xyXG4gICAgLyoqIENhY2hlIHBlciBzYWx2YXJlIHBlciBvZ25pIGNoaWF2ZSBkaSBvZ25pIGdydXBwbyBjaGkgc29ubyBnbGkgb2dnZXR0aSBzb3R0b3N0YW50aSwgbm9uIGRlaSBzb3R0b2dydXBwaSAqL1xyXG4gICAgcHVibGljIHJnSXRlbUNhY2hlOiBNYXA8c3RyaW5nLCBhbnlbXT4gPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XHJcbiAgICAvKiogQ2FjaGUgcGVyIHNhbHZhcmUgcGVyIG9nbmkgY2hpYXZlIGRpIG9nbmkgZ3J1cHBvIGNoaSBzb25vIGdsaSBvZ2dldHRpIHNvdHRvc3RhbnRpLCBub24gZGVpIHNvdHRvZ3J1cHBpICovXHJcbiAgICBwdWJsaWMgcmdDaGlsZEdyb3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBHcm91cFtdPiA9IG5ldyBNYXA8c3RyaW5nLCBHcm91cFtdPigpO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVzdDogRXNUYWJsZUNvbXBvbmVudCwgcHJpdmF0ZSB1dGlsaXRpZXM6IFV0aWxpdGllc0hhbmRsZXIsIHByaXZhdGUgZGF0ZUV4dHM6IERhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluIG1vZGFsaXTDoCByb3dncm91cGluZyBxdWFuZG8gbWkgYXJyaXZhIHVuIG51b3ZvIGJsb2NjbyBkaSBvZ2dldHRpIGRldm8gYWdnaXVuZ2VybG8gYWxsYSB2aXN0YSBhdHR1YWxlOlxyXG4gICAgICpcclxuICAgICAqIDEpIFNlIG5vbiB2aWVuZSByaWNoaWVzdG8gaWwgZGV0dGFnbGlvIGRpIGFsY3VuIGdydXBwbyBzaWduaWZpY2EgY2hlIGRldm8gY29uc2lkZXJhcmUgbWkgc2lhbm8gYXJyaXZhdGkgdHV0dGkgaSBncnVwcGkgcHJpbmNpcGFsaVxyXG4gICAgICogMikgU2UgdmllbmUgcmljaGllc3RvIGlsIGRldHRhZ2xpbyBkaSB1biBncnVwcG8gZGl2ZXJzbyBkYWxsJ3VsdGltbyBkZXZvIGFnZ2l1bmdlcmUgZG9wbyBhbCBncnVwcG8gY2xpY2NhdG8gbGEgbGlzdGEgZGVpIHNvdHRvZ3J1cHBpXHJcbiAgICAgKiAyKSBTZSB2aWVuZSByaWNoaWVzdG8gaWwgZGV0dGFnbGlvIGRlbGwndWx0aW1vIGdydXBwbyBkZXZvIGFnZ2l1bmdlcmUgZG9wbyBhbCBncnVwcG8gY2xpY2NhdG8gbGEgbGlzdGEgZGVnbGkgb2dnZXR0aVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSB2aWV3IEFwcFNlYXJjaDxUPiBkYSBjdWkgc29ubyBhcnJpdmF0aSBnbGkgb2dnZXR0aVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGdyb3VwaW5nS2V5cyBMaXZlbGxpIGRpIHJhZ2dydXBwYW1lbnRvIGRhIGFzcGV0dGFyc2kgc3VpIGRhdGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGhhbmRsZU5ld0RhdGFPblJvd0dyb3VwaW5nKHZpZXc6IEFwcFNlYXJjaDxhbnk+LCBncm91cGluZ0tleXM6IG51bWJlcikge1xyXG4gICAgICAgIC8vIDEpIFNlIG5vbiB2aWVuZSByaWNoaWVzdG8gaWwgZGV0dGFnbGlvIGRpIGFsY3VuIGdydXBwbyBzaWduaWZpY2EgY2hlIGxhIGNoaWFtYXRhIHJlc3RpdHVpc2NlIGxhIGxpc3RhIHBhZ2luYXRhIGRlaSBncnVwcGkgcHJpbmNpcGFsaS5cclxuICAgICAgICAvLyAgICBMaSB0cmF0dG8gY29tZSBzZSBmb3NzZSB1bmEgcXVhbHNpYXNpIGFsdHJhIHF1ZXJ5IHBhZ2luYXRhIHN1IE4gZWxlbWVudGlcclxuICAgICAgICBpZiAoKHZpZXcucmVxdWVzdGVkZ3JvdXBzPy5sZW5ndGggfHwgMCkgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5ib3VuZFNvdXJjZSA9IHRoaXMuZXN0LlRNUEJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICB0aGlzLnJnR3JvdXBDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBHcm91cD4oKTtcclxuICAgICAgICAgICAgdGhpcy5yZ0l0ZW1DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcclxuICAgICAgICAgICAgdGhpcy5yZ0NoaWxkR3JvdXBzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgR3JvdXBbXT4oKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlRNUEJvdW5kU291cmNlLmZvckVhY2goaXRtID0+IHtcclxuICAgICAgICAgICAgICAgIGl0bS5fdGhpc1JvdXRlID0gaXRtLl9ncm91cCA/IFt7IGNvbHVtbjogKDxHcm91cD5pdG0pLmNvbHVtbiwgdmFsdWU6ICg8R3JvdXA+aXRtKS52YWx1ZSB9XSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgaXRtLl90aGlzS2V5ID0gaXRtLl9ncm91cCA/ICg8R3JvdXA+aXRtKS52YWx1ZSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpdG0uX2dyb3VwbGV2ZWwgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmdHcm91cENhY2hlLnNldChpdG0uX3RoaXNLZXksIGl0bSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVzZXR0byBsYSByaWNlcmNhIGFsbGEgY2FjaGUgZGkgcXVlc3RhIFwic2Vzc2lvbmVcIlxyXG4gICAgICAgICAgICBsZXQgZmlyc3RJdGVtID0gdGhpcy5lc3QuVE1QQm91bmRTb3VyY2VbMF07XHJcbiAgICAgICAgICAgIHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcgPSBPYmplY3QuYXNzaWduKHt9LCB2aWV3KTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlID0gW3sgcGF0aDogJycsIHJvdXRlOiBbeyBjb2x1bW46ICg8R3JvdXA+Zmlyc3RJdGVtKS5jb2x1bW4sIHZhbHVlOiAoPEdyb3VwPmZpcnN0SXRlbSkudmFsdWUgfV0sIHZpZXc6IHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcsIGdyb3VwX2NvbHVtbjogKDxHcm91cD50aGlzLmVzdC5UTVBCb3VuZFNvdXJjZVswXSkuY29sdW1uIH1dO1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5CYXNlSXRlbXNDb3VudCA9IHZpZXcub2JqZWN0Y291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAyKSBTZSB2aWVuZSByaWNoaWVzdG8gaWwgZGV0dGFnbGlvIGRpIHVuIHF1YWxzaWFzaSBncnVwcG8gZGl2ZXJzbyBkYWxsJ3VsdGltbyB2dW9sIGRpcmUgY2hlIGRldm8gYWdnaXVuZ2VyZSBcclxuICAgICAgICAgICAgLy8gICAgZG9wbyBhbCBncnVwcG8gY2hlIGhvIGNsaWNjYXRvIGxhIGxpc3RhIGRlaSBncnVwcGkgdGlyYXRhIGZ1b3JpIHF1ZXN0YSB2b2x0YSAoaW50ZXJtZWRpYXRlR3JvdXAgPSB0cnVlKVxyXG4gICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAqICAgR3J1cHBvQSAgICAgICAgICAgICAgICAgICAgICBHcnVwcG9BXHJcbiAgICAgICAgICAgICogICBHcnVwcG9CICAgICAgICAgICAgICAgICAgICAgIEdydXBwb0JcclxuICAgICAgICAgICAgKiAgIEdydXBwb0MgPC0gQ2xpY2NvIHF1aSAgICAgICAgR3J1cHBvQ1xyXG4gICAgICAgICAgICAqICAgR3J1cHBvRCAgICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvQzFcclxuICAgICAgICAgICAgKiAgIEdydXBwb0UgICAgICAgICAgICAgICAgICAgICAgICAgIEdydXBwb0MyXHJcbiAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdydXBwb0RcclxuICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvRVxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAvLyAzKSBzZSBpIGdydXBwaSByaWNoaWVzdGkgZGFsbGEgdmlldyBzb25vIHVndWFsaSBhaSBncnVwcGkgcHJlc2VudGkgdnVvbCBkaXJlIGNoZSBzdG8gcHJlbmRlbmRvIGdsaSBvZ2dldHRpIHZlcmkgZSBwcm9wcmksIHNvbm8gaW4gXHJcbiAgICAgICAgICAgIC8vIHZpZXcuaXRlbXMgZSBxdWluZGkgaW4gVE1QQm91bmRTb3VyY2UsIGhvIGlub2x0cmUgbGUgaW5mb3JtYXppb25pIGRpIHBhZ2luYXppb25lICoqcGVyIGlsIHNpbmdvbG8gc290dG9ncnVwcG8qKiAoaW50ZXJtZWRpYXRlR3JvdXAgPSBmYWxzZSlcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgKiAgIEdydXBwb0EgICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvQVxyXG4gICAgICAgICAgICAqICAgICAgIEdydXBwb0MxICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvQzFcclxuICAgICAgICAgICAgKiAgIEdydXBwb0IgICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvQlxyXG4gICAgICAgICAgICAqICAgR3J1cHBvQyAgICAgICAgICAgICAgICAgICAgICAgICBHcnVwcG9DXHJcbiAgICAgICAgICAgICogICAgICAgR3J1cHBvQzEgPC0tIENsaWNjbyBxdWkgICAgICAgICBHcnVwcG9DMVxyXG4gICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9nZ2V0dG8xXHJcbiAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2dnZXR0bzJcclxuICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZ2dldHRvM1xyXG4gICAgICAgICAgICAqICAgICAgIEdydXBwb0MyICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvQzJcclxuICAgICAgICAgICAgKiAgIEdydXBwb0QgICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvRFxyXG4gICAgICAgICAgICAqICAgR3J1cHBvRSAgICAgICAgICAgICAgICAgICAgICAgICBHcnVwcG9FXHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGxldCBpbnRlcm1lZGlhdGVHcm91cCA9IHZpZXcucmVxdWVzdGVkZ3JvdXBzLmxlbmd0aCAhPSBncm91cGluZ0tleXM7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLmVzdC5ib3VuZFNvdXJjZTtcclxuICAgICAgICAgICAgbGV0IGluc2VydEluZGV4ID0gMDtcclxuICAgICAgICAgICAgbGV0IGluc2VydEdyb3VwID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IGdyb3VwS2V5OiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBsZXQgZ3JvdXBSb3V0ZTogR3JvdXBSb3V0ZUZyYWdtZW50W10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIE5hdmlnbyBsYSBzdHV0dHVyYSBkZWkgZ3J1cHBpIGlnbm9yYW5kbyByaWNvcnNpdmFtZW50ZSB0dXR0aSBnbGkgaW5kaWNpIGZpbm8gYWkgZ3J1cHBpIGNoZSBtaSBpbnRlcmVzc2FubyBpbiBtb2RvIGRhIG5vbiBiZWNjYXJlIGlsIHByaW1vIFwiR3J1cHBvQzFcIiBkZWwgY2FzbyBzb3ByYVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpZXcucmVxdWVzdGVkZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmcgPSB2aWV3LnJlcXVlc3RlZGdyb3Vwc1tpXTtcclxuICAgICAgICAgICAgICAgIGdyb3VwS2V5ICs9IHJnLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBSb3V0ZS5wdXNoKHsgY29sdW1uOiByZy5jb2x1bW4sIHZhbHVlOiByZy52YWx1ZSB9KTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBpbnNlcnRJbmRleDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBpbnNlcnRJbmRleCAmJiB0Ll9ncm91cCAmJiB0LmNvbHVtbiA9PSByZy5jb2x1bW4gJiYgdC52YWx1ZSA9PSByZy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRJbmRleCA9IGk7IGluc2VydEdyb3VwID0gdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG8gbWFyY28gZXhwYW5kZWQgZGF0byBjaGUgcXVlc3RvIGNsaWNrIHN1bCBncnVwcG8gcG90cmViYmUgbm9uIGVzc2VyZSBzdGF0byBmYXR0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRHcm91cC5fZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpdGVtc0NhY2hlUmVmZXJlbmNlO1xyXG4gICAgICAgICAgICBsZXQgY2hpbGRHcm91cHNDYWNoZVJlZmVyZW5jZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIG5vbiDDqCB1biBncnVwcG8gaW50ZXJtZWRpbyBkZXZvIHJpcHVsaXJlIGxhIGNhY2hlIGRlbCBncnVwcG8gc3UgY3VpIGhvIGF0dHVhbG1lbnRlIGNsaWNjYXRvLiBHbGkgb2dnZXR0aSBzYXJhbm5vIHJpYWdnaXVudGkgZG9wb1xyXG4gICAgICAgICAgICBpZiAoIWludGVybWVkaWF0ZUdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJnSXRlbUNhY2hlLnNldChncm91cEtleSwgW10pO1xyXG4gICAgICAgICAgICAgICAgaXRlbXNDYWNoZVJlZmVyZW5jZSA9IHRoaXMucmdJdGVtQ2FjaGUuZ2V0KGdyb3VwS2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFNlIGludmVjZSDDqCB1biBncnVwcG8gaW50ZXJtZWRpbyBkZXZvIHJpcHVsaXJlIHNpYSB0dXR0aSBpIGNoaWxkIGdyb3VwIHJpY29yc2l2YW1lbnRlLCBzaWEgdHV0dGkgZ2xpIGl0ZW1cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiB0aGlzLnJnQ2hpbGRHcm91cHNDYWNoZS5rZXlzKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGdyb3VwS2V5KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZ0NoaWxkR3JvdXBzQ2FjaGUuZGVsZXRlKGtleSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIHRoaXMucmdJdGVtQ2FjaGUua2V5cygpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChncm91cEtleSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmdJdGVtQ2FjaGUuZGVsZXRlKGtleSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZ0NoaWxkR3JvdXBzQ2FjaGUuc2V0KGdyb3VwS2V5LCBbXSk7XHJcbiAgICAgICAgICAgICAgICBjaGlsZEdyb3Vwc0NhY2hlUmVmZXJlbmNlID0gdGhpcy5yZ0NoaWxkR3JvdXBzQ2FjaGUuZ2V0KGdyb3VwS2V5KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQXNzZWdubyB1biBsaXZlbGxvIGFpIHZhbG9yaSBjaGUgYXJyaXZhbm8gZGEgdXNhcmUgcGVyIGZvcm1hdHRhcmUgbGEgcGFydGUgZ3JhZmljYS4gSWwgcHJpbW8gZ3J1cHBvIGNsaWNjYXRvIHNhcsOgIGEgbGl2ZWxsbyAxLFxyXG4gICAgICAgICAgICAvLyBpbCBzZWNvbmRvIHNhcsOgIGEgbGl2ZWxsbyAyIGUgY29zw6wgdmlhLi4uXHJcbiAgICAgICAgICAgIC8vIExpIG1hcmNvIGlub2x0cmUgY29uIGlsIHBhcmVudCBpbiBtb2RvIGRhIHBvdGVyIGVsaW1pbmFyZSBpIHZlY2NoaSBxdWFsb3JhIHNlcnZpc3NlXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlRNUEJvdW5kU291cmNlLmZvckVhY2goaXRtID0+IHtcclxuICAgICAgICAgICAgICAgIGl0bS5fcGFyZW50ID0gZ3JvdXBLZXk7XHJcbiAgICAgICAgICAgICAgICBpdG0uX3BhcmVudFJvdXRlID0gZ3JvdXBSb3V0ZTtcclxuICAgICAgICAgICAgICAgIGl0bS5fdGhpc1JvdXRlID0gaXRtLl9ncm91cCA/IFsuLi5ncm91cFJvdXRlLCBuZXcgR3JvdXBSb3V0ZUZyYWdtZW50KCg8R3JvdXA+aXRtKS5jb2x1bW4sICg8R3JvdXA+aXRtKS52YWx1ZSldIDogW107XHJcbiAgICAgICAgICAgICAgICBpdG0uX3RoaXNLZXkgPSBpdG0uX2dyb3VwID8gZ3JvdXBLZXkgKyAoPEdyb3VwPml0bSkudmFsdWUgOiBncm91cEtleTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBQZXIgbGUgcmljZXJjYSBpbnRlcm1lZGllIG1ldHRvIGkgZ3J1cHBpIG5lbGxhIGNhY2hlIGRlaSBncnVwcGlcclxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm1lZGlhdGVHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0bS5fZ3JvdXBsZXZlbCA9IHZpZXcucmVxdWVzdGVkZ3JvdXBzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJnR3JvdXBDYWNoZS5zZXQoaXRtLl90aGlzS2V5LCBpdG0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkR3JvdXBzQ2FjaGVSZWZlcmVuY2UucHVzaChpdG0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTWV0dG8gYW5jaGUgZ2xpIG9nZ2V0dGkgbmVsbGEgY2FjaGUgbm9uIHJpY29yc2l2YVxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zQ2FjaGVSZWZlcmVuY2UucHVzaChpdG0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIEVsaW1pbm8gZ2xpIG9nZ2V0dGkgdmVjY2hpIFxyXG4gICAgICAgICAgICAvLyAxKSBSaWNlcmNhIGludGVybWVkaWEsIHN0YXRvIHNhbHZhdG8gLSBFbGltaW5vIHR1dHRpIGdsaSBpdGVtIGUgdHV0dGkgaSBncnVwcGkgbGEgY3VpIHJvdXRlIMOoIHBpw7kgbHVuZ2EgZGVsbGEgY29ycmVudGUsIHR1dHRpIGdsaSBpdGVtIHJlbGF0aXZpIGFsbGEgcGF0aCBjb3JyZW50ZSwgZSB0dXR0ZVxyXG4gICAgICAgICAgICAvLyAgICBsZSBjYWNoZSBkaSByaWNlcmNhIGVmZmV0dHVhdGUgc3UgdW5hIHBhdGggcGnDuSBwcm9mb25kYSBkZWxsJ2F0dHVhbGVcclxuICAgICAgICAgICAgLy8gMikgUmljZXJjYSBmaW5hbGUgbyByaWNlcmNhIGludGVybWVkaWEgc2VuemEgc3RhdG8gc2FsdmF0byAtIEVsaW1pbm8gdHV0dGkgZ2xpIGl0ZW0gcmVsYXRpdmkgYWxsYSBwYXRoIGNvcnJlbnRlXHJcbiAgICAgICAgICAgIC8vIFBlciBcInN0YXRvIHNhbHZhdG9cIiBzaSBpbnRlbmRvbm8gcmljZXJjaGUgdmVjY2hpZSBzYWx2YXRlIHBlciBwb3RlciBlc3NlcmUgcmllZmZldHR1YXRlIGluIGNhc28gZGkgb3JkaW5hbWVudGkgc3UgY29sb25uZSBkaSBpbnRlcmVzc2UgXHJcbiAgICAgICAgICAgIGlmIChpbnRlcm1lZGlhdGVHcm91cCAmJiB2aWV3LnNhdmVkc3RhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LmJvdW5kU291cmNlID0gdGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gISh0Ll9pdGVtIHx8IHQuX3RoaXNSb3V0ZS5sZW5ndGggPiBncm91cFJvdXRlLmxlbmd0aCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlID0gdGhpcy5lc3QuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlLmZpbHRlcih0ID0+ICEodC5yb3V0ZS5sZW5ndGggPiBncm91cFJvdXRlLmxlbmd0aCkpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVzdC5ib3VuZFNvdXJjZSA9IHRoaXMuZXN0LmJvdW5kU291cmNlLmZpbHRlcih0ID0+ICEodC5fcGFyZW50ID09IGdyb3VwS2V5KSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGhpc0dyb3VwID0gdGhpcy5lc3QuYm91bmRTb3VyY2VbaW5zZXJ0SW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoaW50ZXJtZWRpYXRlR3JvdXApXHJcbiAgICAgICAgICAgICAgICB0aGlzR3JvdXAuX2dyb3Vwc2NvdW50ID0gKDxBcHBTZWFyY2g8YW55Pj50aGlzLmVzdC5WaWV3KT8uZ3JvdXBjb3VudDtcclxuXHJcbiAgICAgICAgICAgIC8vIExpIHNvc3RpdHVpc2NvIGNvaSBudW92aSBkaSBxdWVzdGEgcmljZXJjYVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5ib3VuZFNvdXJjZS5zcGxpY2UoaW5zZXJ0SW5kZXggKyAxLCAwLCAuLi50aGlzLmVzdC5UTVBCb3VuZFNvdXJjZSk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZ2dpdW5nbyB1biBzZXBhcmF0b3JlIGFsbGEgZmluZSBvIGFsbCdpbml6aW8gZGkgcXVlc3RpIGdydXBwaSBjaGUgZG92csOgIG9jY3VwYXJzaSBkaSBjYXJpY2FyZSBBTFRSSSBncnVwcGkgbyBvZ2dldHRpIChzZSBzb25vIGFsbCd1bHRpbW8gZ3J1cHBvKVxyXG4gICAgICAgICAgICBsZXQgYWRkTGFzdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5ib3VuZFNvdXJjZS5zcGxpY2UoaW5zZXJ0SW5kZXggKyAxICsgKGFkZExhc3QgPyB0aGlzLmVzdC5UTVBCb3VuZFNvdXJjZS5sZW5ndGggOiAwKSwgMCwgdGhpcy5nZXRHcm91cFNlcGFyYXRvcih2aWV3LCBncm91cEtleSwgZ3JvdXBSb3V0ZSwgdmlldy5yZXF1ZXN0ZWRncm91cHMubGVuZ3RoLCBpbnRlcm1lZGlhdGVHcm91cCA/ICdncm91cHMnIDogJ2l0ZW1zJykpO1xyXG5cclxuICAgICAgICAgICAgLy8gQWdnaXVuZ28gbGEgcmljZXJjYSBhbGxhIGNhY2hlIGRpIHF1ZXN0YSBcInNlc3Npb25lXCJcclxuICAgICAgICAgICAgbGV0IHRvQWRkID0geyBwYXRoOiBncm91cEtleSwgcm91dGU6IGdyb3VwUm91dGUsIHZpZXc6IE9iamVjdC5hc3NpZ24oe30sIHZpZXcpLCBncm91cF9jb2x1bW46IGludGVybWVkaWF0ZUdyb3VwID8gKDxHcm91cD50aGlzLmVzdC5UTVBCb3VuZFNvdXJjZVswXSkuY29sdW1uIDogJycgfTtcclxuICAgICAgICAgICAgbGV0IHByZXYgPSB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUuZmluZEluZGV4KHQgPT4gdC5wYXRoID09IHRvQWRkLnBhdGggJiYgdC5ncm91cF9jb2x1bW4gPT0gdG9BZGQuZ3JvdXBfY29sdW1uKTtcclxuICAgICAgICAgICAgaWYgKHByZXYgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUucHVzaCh0b0FkZCk7XHJcblxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUuc3BsaWNlKHByZXYsIDEsIHRvQWRkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZSBpbiBtb2RhbGl0w6AgYXJyYXkgYXBwbGljYSBpIHJhZ2dydXBwYW1lbnRpIGRlZmluaXRpIGxhdG8gcm93LWdyb3VwaW5nXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHt0aHM6IEVzVGhEaXJlY3RpdmVbXX0gdGhzIEhlYWRlclxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXJyYXlNb2RlUmV2aWV3R3JvdXBpbmdzKHRoczogRXNUaERpcmVjdGl2ZVtdKSB7XHJcbiAgICAgICAgaWYgKHRocy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgaGVhZGVyR3JvdXBzOiBHcm91cFtdID0gW107XHJcbiAgICAgICAgbGV0IGhlYWRlckFnZ3JlZ2F0aW9uczogR3JvdXBPckFnZ3JlZ2F0aW9uW10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldIGFzIEVzVGhEaXJlY3RpdmU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGgudGhHcm91cClcclxuICAgICAgICAgICAgICAgIGhlYWRlckdyb3Vwcy5wdXNoKG5ldyBHcm91cCh0aC50aCwgMCwgXCJcIikpO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh0aC50aEFnZ3JlZ2F0aW9uKVxyXG4gICAgICAgICAgICAgICAgaGVhZGVyQWdncmVnYXRpb25zID0gWy4uLmhlYWRlckFnZ3JlZ2F0aW9ucywgLi4udGhpcy5nZXRHcm91cEFnZ3JlZ2F0aW9ucyh0aCldO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGhlYWRlckdyb3Vwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIFB1bGl6aWEgZGVsbGUgY2FjaGVcclxuICAgICAgICAgICAgdGhpcy5yZ0dyb3VwQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy5yZ0l0ZW1DYWNoZS5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLnJnQ2hpbGRHcm91cHNDYWNoZS5jbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5lc3QuQXJyYXlHcm91cGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmJvdW5kU291cmNlID0gdGhpcy5nZXRHcm91cHNSZWN1cnNpdmUoaGVhZGVyR3JvdXBzLCAwLCB0aGlzLmVzdC5ib3VuZFNvdXJjZSwgaGVhZGVyQWdncmVnYXRpb25zLCBudWxsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIHVuYSBkaXJldHRpdmEgRXNUaCByZXN0aXR1aXNjZSBsYSBsaXN0YSBkZWxsZSBhZ2dyZWdhemlvbmkgcmljaGllc3RhIHBlciBxdWVzdGEgY29sb25uYSBvIGlsIGdydXBwbyBjaGUgcmFwcHJlc2VudGFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmV9IHRoIERpcmV0dGl2YVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtHcm91cE9yQWdncmVnYXRpb25bXX0gTGlzdGEgZGVpIGdydXBwaSBvIGFnZ3JlZ2F6aW9uaSByZWxhdGl2aSBhbGxhIERpcmV0dGl2YSBwYXNzYXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRHcm91cEFnZ3JlZ2F0aW9ucyh0aDogRXNUaERpcmVjdGl2ZSk6IEdyb3VwT3JBZ2dyZWdhdGlvbltdIHtcclxuICAgICAgICBsZXQgcmV0ID0gW107XHJcbiAgICAgICAgLy8gRXM6ICd7bWluOmRkL01NL3l5eXl9IC0ge21heDpkZC9NTS95eXl5fSdcclxuICAgICAgICBpZiAodGgudGhBZ2dyZWdhdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmdldEVzVGhEaXJlY3RpdmVMaXN0T2ZBZ2dyZWdhdGlvbnModGgpLmZvckVhY2goKGFnZzogVGhBZ2dyZWdhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGlzZGF0ZSA9IGFnZy5mb3JtYXQgJiYgWydzbWFsbCcsICdsb25nJywgJ3Zlcnlsb25nJ10uaW5jbHVkZXMoYWdnLmZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNudW1iZXIgPSBhZ2cuZm9ybWF0ICYmIGFnZy5mb3JtYXQuc3RhcnRzV2l0aChcIkZcIikgJiYgIU51bWJlci5pc05hTihhZ2cuZm9ybWF0LmNoYXJBdCgxKSkgJiYgYWdnLmZvcm1hdC5sZW5ndGggPT0gMjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzZGF0ZSAmJiAhaXNudW1iZXIgJiYgYWdnLmZvcm1hdClcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBcIkxlIGFnZ2VyZ2F6aW9uaSBzdXBwb3J0YXRlIGRhbGwnZXMtdGFibGUgc29ubyBzb2xvICdzbWFsbCcsICdsb25nJywgJ3Zlcnlsb25nJyBwZXIgbGUgZGF0ZSBlICdGMC05JyBwZXIgaSBudW1lcmlcIjtcclxuXHJcbiAgICAgICAgICAgICAgICByZXQucHVzaChuZXcgR3JvdXBPckFnZ3JlZ2F0aW9uKHRoLnRoLCBhZ2cuZnVuYywgaXNkYXRlID8gJ2RhdGUnIDogaXNudW1iZXIgPyAnbnVtYmVyJyA6ICdzdHJpbmcnKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aC50aEdyb3VwKVxyXG4gICAgICAgICAgICByZXQucHVzaChuZXcgR3JvdXBPckFnZ3JlZ2F0aW9uKHRoLnRoLCBudWxsKSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBEYXRhIHVuYSBkaXJldHRpdmEgY29uIHVuIGZvcm1hdG8gcmVzdGl0dWlzY2UgdHV0dGUgbGUgY29wcGllIEZ1bnppb25lIGRpIEFnZ3JlZ2F6aW9uZSAtIEZvcm1hdG9cclxuICAgICpcclxuICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlfSB0aCBEaXJldHRpdmEgRXNUaCBkaSBjdWkgY2FsY29sYXJlIGxlIGZ1bnppb25pIGRpIGFnZ3JlZ2F6aW9uZSB1c2F0ZVxyXG4gICAgKlxyXG4gICAgKiBAcmV0dXJucyB7eyBmdW5jOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nIH1bXX0gTGlzdGEgZGVsbGUgZnVuemlvbmkgZGkgYWdncmVnYXppb25lIHJpbGV2YXRlXHJcbiAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRFc1RoRGlyZWN0aXZlTGlzdE9mQWdncmVnYXRpb25zKHRoOiBFc1RoRGlyZWN0aXZlKTogVGhBZ2dyZWdhdGlvbltdIHtcclxuICAgICAgICBpZiAoIXRoLnRoQWdncmVnYXRpb24pXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuXHJcbiAgICAgICAgLy8gU2UgaG8gZ2nDoCBlZmZldHR1YXRvIHF1ZXN0byBjYWxjb2xvIHBlciBxdWVzdG8gdGggcmVzdGl0dWlzY28gbGEgdmVyc2lvbmUgaW4gY2FjaGVcclxuICAgICAgICBpZiAodGguX3RoQWdncmVnYXRpb25zKVxyXG4gICAgICAgICAgICByZXR1cm4gdGguX3RoQWdncmVnYXRpb25zO1xyXG5cclxuICAgICAgICBsZXQgcmV0ID0gW107XHJcbiAgICAgICAgbGV0IGRpc3BsYXkgPSB0aC50aEFnZ3JlZ2F0aW9uO1xyXG4gICAgICAgIHZhciBtYXRjaGVzID0gZGlzcGxheS5tYXRjaCgve1thLXpBLVowLTlcXC86XSp9L2dpKTtcclxuICAgICAgICBpZiAoIW1hdGNoZXMpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICBtYXRjaGVzLmZvckVhY2gobSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBzcGxpdCA9IG0uc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgICAgICBsZXQgZnVuYyA9IG0sIGZvcm1hdCA9IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChzcGxpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBFc2NsdWRvIHByaW1vIGUgdWx0aW1vIGNhcmF0dGVyZSAobGUgZ3JhZmZlKVxyXG4gICAgICAgICAgICAgICAgZnVuYyA9IHNwbGl0WzBdLnN1YnN0cigxKTtcclxuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHNwbGl0WzFdLnN1YnN0cigwLCBzcGxpdFsxXS5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0LnB1c2goeyBmdW5jOiA8J21pbicgfCAnbWF4JyB8ICdzdW0nPmZ1bmMsIGZvcm1hdDogZm9ybWF0LCBtYXRjaDogbSB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGguX3RoQWdncmVnYXRpb25zID0gcmV0O1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGRlZmluaXppb25lIGRlaSBncnVwcGkgZGEgZ2VuZXJhcmUgZGEgdW5hIGxpc3RhIGRpIG9nZ2V0dGksIHN1ZGRpdmlkZSBnbGkgb2dnZXR0aSBwYXNzYXRpIGluIGdydXBwaSBlIHNvdHRvZ3J1cHBpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtHcm91cFtdfSBncnBzIERlZmluaXppb25lIGRlaSBncnVwcGlcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjdXJyZW50SW5kZXggSW5kaWNlIGRpIGVsYWJvcmF6aW9uZS4gQWwgbGl2ZWxsbyAwIGhvIHR1dHRpIGdsaSBvZ2dldHRpIGUgZGV2byBnZW5lcmFyZSBpIHByaW1pIGdydXBwaSwgYSBsaXZlbGxvIDEgaG8gdHV0dGkgaSBncnVwcGkgcHJpbmNpcGFsaSBlIGRldm9cclxuICAgICAqIGVsYWJvcmFyZSBpIHNvdHRvZ3J1cHBpLCBlIGNvc8OsIHZpYSByaWNvcnNpdmFtZW50ZS4uLlxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkYSByYWdncnVwcGFyZVxyXG4gICAgICogQHBhcmFtIHtHcm91cE9yQWdncmVnYXRpb25bXX0gYWdncmVnYXRpb25zIEluZm8gZGkgYWdncmVnYXppb25lXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gcGFyZW50IFJpZmVyaW1lbnRvIGFsIGdydXBwbyBwYWRyZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEdyb3Vwc1JlY3Vyc2l2ZShncnBzOiBHcm91cFtdLCBjdXJyZW50SW5kZXg6IG51bWJlciwgaXRlbXM6IGFueVtdLCBhZ2dyZWdhdGlvbnM6IEdyb3VwT3JBZ2dyZWdhdGlvbltdLCBwYXJlbnQ/OiBhbnkpOiBhbnlbXSB7XHJcbiAgICAgICAgLy8gU2UgbCdpbmRpY2Ugw6ggMCBkZXZvIHNpY3VyYW1lbnRlIG5hc2NvbmRlcmUgdHV0dGkgZ2xpIG9nZ2V0dGkuIFNvbG8gaSBncnVwcGkgc2FyYW5ubyB2aXN1YWxpenphdGlcclxuICAgICAgICBpZiAoY3VycmVudEluZGV4ID09IDApXHJcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goaSA9PiBpLl92aXNpYmxlID0gZmFsc2UpO1xyXG5cclxuICAgICAgICBsZXQgZ3JwID0gZ3Jwc1tjdXJyZW50SW5kZXhdO1xyXG4gICAgICAgIGxldCByZXQ6IGFueVtdID0gW107XHJcbiAgICAgICAgbGV0IGxhc3QgPSBncnBzLmxlbmd0aCA9PSBjdXJyZW50SW5kZXggKyAxO1xyXG4gICAgICAgIGxldCBncm91cHMgPSB0aGlzLnV0aWxpdGllcy5ncm91cEJ5KGl0ZW1zLCBncnAuY29sdW1uKTtcclxuICAgICAgICBmb3IgKGxldCBwcm9wIGluIGdyb3Vwcykge1xyXG4gICAgICAgICAgICBsZXQgaXRtcyA9IGdyb3Vwc1twcm9wXTtcclxuICAgICAgICAgICAgbGV0IGdwID0gbmV3IEdyb3VwKGdycC5jb2x1bW4sIGl0bXMubGVuZ3RoLCBwcm9wKTtcclxuICAgICAgICAgICAgZ3AuYWdncmVnYXRpb25zID0gdGhpcy5nZW5lcmF0ZUFnZ3JlZ2F0aW9ucyhpdG1zLCBhZ2dyZWdhdGlvbnMpO1xyXG5cclxuICAgICAgICAgICAgbGV0IGFueWdwID0gKDxhbnk+Z3ApO1xyXG4gICAgICAgICAgICBhbnlncC5fZ3JvdXAgPSB0cnVlO1xyXG4gICAgICAgICAgICBhbnlncC5fZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCFwYXJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGFueWdwLl90aGlzUm91dGUgPSBbeyBjb2x1bW46IGdwLmNvbHVtbiwgdmFsdWU6IGdwLnZhbHVlIH1dO1xyXG4gICAgICAgICAgICAgICAgYW55Z3AuX3RoaXNLZXkgPSBncC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFueWdwLl9ncm91cGxldmVsID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFueWdwLl9wYXJlbnQgPSBwYXJlbnQuX3RoaXNLZXk7XHJcbiAgICAgICAgICAgICAgICBhbnlncC5fcGFyZW50Um91dGUgPSBwYXJlbnQuX3RoaXNSb3V0ZTtcclxuICAgICAgICAgICAgICAgIGFueWdwLl90aGlzUm91dGUgPSBbLi4ucGFyZW50Ll90aGlzUm91dGUsIHsgY29sdW1uOiBncC5jb2x1bW4sIHZhbHVlOiBncC52YWx1ZSB9XTtcclxuICAgICAgICAgICAgICAgIGFueWdwLl90aGlzS2V5ID0gcGFyZW50Ll90aGlzS2V5ICsgZ3AudmFsdWU7XHJcbiAgICAgICAgICAgICAgICBhbnlncC5fZ3JvdXBsZXZlbCA9IHBhcmVudC5fZ3JvdXBsZXZlbCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFB1c2hvIGlsIGdydXBwbywgdHV0dGkgaSBncnVwcGkgZGVsIGxpdmVsbG8gc290dG8sIG8gZ2xpIGl0ZW0gc2UgaW8gc29ubyBsJ3VsdGltbyBncnVwcG8uIFxyXG4gICAgICAgICAgICAvLyBMYSB2aXNpYmlsaXTDoCDDqCBzb2xvIHBlciBpbCBncnVwcG8gYSBsaXZlbGxvIDAsIHR1dHRpIGdsaSBhbHRyaSBncnVwcGkgc2FyYW5ubyBtb3N0cmF0aSBvIG5hc2Nvc3RpIGRpIGNvbnNlZ3VlbnphXHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggPT0gMClcclxuICAgICAgICAgICAgICAgIGFueWdwLl92aXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmNhbGN1bGF0ZUhhc2goW2FueWdwXSk7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbGl0aWVzLmNhY2hlQWdncmVnYXRpb25zKGFueWdwKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGlsIGdydXBwbyBwYWRyZVxyXG4gICAgICAgICAgICByZXQucHVzaChhbnlncCk7XHJcbiAgICAgICAgICAgIHRoaXMucmdHcm91cENhY2hlLnNldChhbnlncC5fdGhpc0tleSwgYW55Z3ApO1xyXG4gICAgICAgICAgICBpZiAoIWxhc3QpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvL0RhbCBncnVwcG8gcGFkcmUsIHNlIG5vbiDDqCBsJ3VsdGltbyBncnVwcG8gZGVsbGEgY2F0ZW5hLCBjYWxjb2xvIHJpY29yc2l2YW1lbnRlIHR1dHRhIGxhIGNhdGVuYSBzb3R0b1xyXG4gICAgICAgICAgICAgICAgbGV0IHN1Ykdyb3Vwc0FuZEl0ZW1zID0gdGhpcy5nZXRHcm91cHNSZWN1cnNpdmUoZ3JwcywgY3VycmVudEluZGV4ICsgMSwgaXRtcywgYWdncmVnYXRpb25zLCBhbnlncCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hpbGRncm91cHMgPSBzdWJHcm91cHNBbmRJdGVtcy5maWx0ZXIodCA9PiB0Ll9ncm91cCAmJiB0Ll9wYXJlbnQgPT0gYW55Z3AuX3RoaXNLZXkpO1xyXG4gICAgICAgICAgICAgICAgYW55Z3AuX2dyb3Vwc2NvdW50ID0gY2hpbGRncm91cHMubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEFnZ2l1bmdvIGxhIGNhdGVuYSBkZWwgZ3J1cHBvIHNvdHRvLCBhZ2dpdW5nZW5kbyBhbGxhIGNhY2hlIHNvbG8gaSBncnVwcGkgcGFkcmVcclxuICAgICAgICAgICAgICAgIHJldC5wdXNoKC4uLnN1Ykdyb3Vwc0FuZEl0ZW1zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmdDaGlsZEdyb3Vwc0NhY2hlLnNldChhbnlncC5fdGhpc0tleSwgY2hpbGRncm91cHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gQWwgZ3J1cHBvIHBhZHJlLCBzZSDDqCBsJ3VsdGltbyBhc3NlZ25vIHR1dHRlIGxlIGZvZ2xpZSBhc3NlZ25hbmRvZ2xpIGFuY2hlIGxhIGNoaWF2ZSBkZWwgZ3J1cHBvXHJcbiAgICAgICAgICAgICAgICBpdG1zLmZvckVhY2goaSA9PiBpLl90aGlzS2V5ID0gYW55Z3AuX3RoaXNLZXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldC5wdXNoKC4uLml0bXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZ0l0ZW1DYWNoZS5zZXQoYW55Z3AuX3RoaXNLZXksIGl0bXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIHVuYSBsaXN0YSBkaSBvZ2dldHRpIGdlbmVyYSBsZSBhZ2dyZWdhemlvbmkgc3BlY2lmaWNhdGUuIFNpIGNvbnNpZGVyYSBkaSBhdmVyZSB0dXR0aSBnbGkgb2dnZXR0aVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGkgY3VpIGNhbGNvbGFyZSBsZSBhZ2dyZWdhemlvbmVcclxuICAgICAqIEBwYXJhbSB7R3JvdXBPckFnZ3JlZ2F0aW9uW119IGFnZ3JlZ2F0aW9ucyBBZ2dlcmdhemlvbmkgZGEgZ2VuZXJhcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUFnZ3JlZ2F0aW9ucyhpdGVtczogYW55W10sIGFnZ3JlZ2F0aW9uczogR3JvdXBPckFnZ3JlZ2F0aW9uW10pOiBHcm91cEFnZ3JlZ2F0aW9uW10ge1xyXG4gICAgICAgIGxldCByZXRzOiBHcm91cEFnZ3JlZ2F0aW9uW10gPSBbXTtcclxuICAgICAgICBsZXQgYWdncmVnYXRpb25WYWx1ZSA9IFwiXCIsIGZlRmllbGQgPSBudWxsLCBzdHJpbmdBZ2cgPSBudWxsLCBkYXRlQWdnID0gbnVsbCwgbnVtYmVyQWdnID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZ2dyZWdhdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGFnZyA9IGFnZ3JlZ2F0aW9uc1tpXTtcclxuICAgICAgICAgICAgZmVGaWVsZCA9IGFnZy5jb2x1bW47XHJcbiAgICAgICAgICAgIGlmICghZmVGaWVsZClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChhZ2cuZGF0YXR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6IHN0cmluZ0FnZyA9IGl0ZW1zLm1hcChpID0+IGlbZmVGaWVsZF0udG9TdHJpbmcoKSk7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6IGRhdGVBZ2cgPSBpdGVtcy5tYXAoaSA9PiBuZXcgRGF0ZShpW2ZlRmllbGRdKS5nZXRUaW1lKCkpOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6IG51bWJlckFnZyA9IGl0ZW1zLm1hcChpID0+IHBhcnNlRmxvYXQoaVtmZUZpZWxkXSkpOyBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChhZ2cuYWdncmVnYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ21heCc6XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhZ2cuZGF0YXR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzogYWdncmVnYXRpb25WYWx1ZSA9IHN0cmluZ0FnZy5zb3J0KCkucmV2ZXJzZSgpWzBdOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6IGFnZ3JlZ2F0aW9uVmFsdWUgPSBuZXcgRGF0ZShNYXRoLm1heCguLi5kYXRlQWdnKSkudG9TdHJpbmcoKTsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6IGFnZ3JlZ2F0aW9uVmFsdWUgPSBNYXRoLm1heCguLi5udW1iZXJBZ2cpLnRvU3RyaW5nKCk7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbic6XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhZ2cuZGF0YXR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzogYWdncmVnYXRpb25WYWx1ZSA9IHN0cmluZ0FnZy5zb3J0KClbMF07IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzogYWdncmVnYXRpb25WYWx1ZSA9IG5ldyBEYXRlKE1hdGgubWluKC4uLmRhdGVBZ2cpKS50b1N0cmluZygpOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzogYWdncmVnYXRpb25WYWx1ZSA9IE1hdGgubWluKC4uLm51bWJlckFnZykudG9TdHJpbmcoKTsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnc3VtJzpcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFnZy5kYXRhdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOiBhZ2dyZWdhdGlvblZhbHVlID0gc3RyaW5nQWdnLmpvaW4oXCIsIFwiKTsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiBhZ2dyZWdhdGlvblZhbHVlID0gXCJcIjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6IGFnZ3JlZ2F0aW9uVmFsdWUgPSBudW1iZXJBZ2cucmVkdWNlKChwcmUsIGN1cnIpID0+IHByZSArIGN1cnIsIDApLnRvU3RyaW5nKCk7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRzLnB1c2gobmV3IEdyb3VwQWdncmVnYXRpb24oYWdnLmNvbHVtbiwgYWdnLmFnZ3JlZ2F0aW9uLCBhZ2dyZWdhdGlvblZhbHVlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmV0cztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogT3R0aWVuZSB1biBlbGVtZW50byBkaSBzZXBhcmF6aW9uZSBmcmEgR3J1cHBpIGNoZSBzZXJ2ZSBwZXIgcGFnaW5hcmUgbGUgcmljZXJjaGUgYWxsJ2ludGVybm8gZGkgb2duaSBzaW5nb2xvIGdydXBwb1xyXG4gICAgKlxyXG4gICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSB2aWV3IFZpZXcgdXRpbGl6emF0YSBwZXIgbGEgcmljZXJjYS4gTWUgbmUgc2Fsdm8gaSBwYXJhbWV0cmkgbmVsIHNlcGFyYXRvcmUgYXR0dWFsZSBkYXRvIGNoZSBuZSBobyBiaXNvZ25vIHBlciBjYXJpY2FyZSBhbHRyaSBlbGVtZW50aVxyXG4gICAgKiBmYWNlbnRpIHJpZmVyaW1lbnRvIGFsbG8gc3Rlc3NvIGNvbnRlc3RvXHJcbiAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnQgUGFyZW50IHBhdGggY2hlIHJhcHByZXNlbnRhIGEgcXVhbGUgZ3J1cHBvIMOoIGFmZmliYmlhdG8gcXVlc3RvIHNlcGFyYXRvcmVcclxuICAgICogQHBhcmFtIHtHcm91cFJvdXRlRnJhZ21lbnRbXX0gcm91dGUgUm91dGUgcGF0aCBjaGUgcmFwcHJlc2VudGEgYSBxdWFsZSBncnVwcG8gw6ggYWZmaWJiaWF0byBxdWVzdG8gc2VwYXJhdG9yZVxyXG4gICAgKiBAcGFyYW0ge251bWJlcn0gbGV2ZWwgTGl2ZWxsbyBkZWwgZ3J1cHBvIGRpIGN1aSBxdWVzdG8gZWxlbWVudG8gw6ggc2VwYXJhdG9yZSwgdmllbmUgdXNhdG8gcGVyIGFwcGxpY2FyZSBsYSBjbGFzc2UgXCJlc3QtbHZsLXt7bGV2ZWx9fVwiXHJcbiAgICAqXHJcbiAgICAqIEByZXR1cm5zIHthbnl9IEVsZW1lbnRvIGRpIHNlcGFyYXppb25lIGNvbnRlbmVudGUgdHV0dGkgaSBiaW5kIHBlciBwcmVzZW50YXJlIHVuYSBwYWdpbmF6aW9uZSBzb3R0byBxdWVzdG8gZ3J1cHBvIGxhdG8gaW50ZXJmYWNjaWFcclxuICAgICovXHJcbiAgICBwdWJsaWMgZ2V0R3JvdXBTZXBhcmF0b3IodmlldzogQXBwU2VhcmNoPGFueT4sIHBhcmVudDogc3RyaW5nLCByb3V0ZTogR3JvdXBSb3V0ZUZyYWdtZW50W10sIGxldmVsOiBudW1iZXIsIHNlYXJjaGVzOiAnZ3JvdXBzJyB8ICdpdGVtcycpOiBHcm91cFBhZ2VyIHtcclxuICAgICAgICBsZXQgaXRlbSA9IG5ldyBHcm91cFBhZ2VyKGxldmVsLCByb3V0ZSwgcGFyZW50LCBPYmplY3QuYXNzaWduKHt9LCB2aWV3KSwgc2VhcmNoZXMpO1xyXG4gICAgICAgIGl0ZW0uYnV0dG9ucyA9IHRoaXMudXRpbGl0aWVzLmdldFBhZ2VzQXJyYXkoNiwgdmlldy5wYWdlLCB2aWV3LnBhZ2VzKTtcclxuICAgICAgICB0aGlzLnV0aWxpdGllcy5jYWxjdWxhdGVIYXNoKFtpdGVtXSk7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0YSB1bmEgY29sb25uYSBlZmZldHR1YSBsYSByaWVtaXNzaW9uZSBkaSB0dXR0ZSBsZSByaWNlcmNoZSByZWxhdGl2ZS5cclxuICAgICAqXHJcbiAgICAgKiBFcy4gSG8gMiBjYW1waSBkaSBncnVwcG8gZSBobyBlc3BhbnNvIGZpbm8gYSB2ZWRlcmUgaSB2YWxvcmkgZmlubyBhZCB1biBsaXZlbGxvIHF1YWxzaWFzaS5cclxuICAgICAqIENsaWNjbyBsJ29yZGluYW1lbnRvIHN1bCBzZWNvbmRvIGdydXBwby5cclxuICAgICAqIFR1dHRlIGxlIHJpY2VyY2hlIHJlbGF0aXZlIGFpIHByaW1pIGdydXBwaSBkZXZvbm8gZXNzZXJlIHJpZXNlZ3VpdGUuIFF1YW5kbyBpIHJpc3VsdGF0aSBhcnJpdmVyYW5ubyBjaSBwZW5zZXLDoCBpbCBtZXRvZG8gKipiaW5kRGlzcGxheVRvTG9hZGVkSXRlbXNPckdyb3VwcyoqXHJcbiAgICAgKiBhIHRhZ2xpYXJlIHZpYSBnbGkgb2dnZXR0aSBub24gcGnDuSB2aXN1YWxpenphdGlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uIENvbG9ubmEgc3UgY3VpIHNpIMOoIGVmZmV0dHVhdGEgdW4nb3BlcmF6aW9uZSBkaSBvcmRpbmFtZW50b1xyXG4gICAgICogQHBhcmFtIHtBcHBPcmRlcmluZ1tdfSBvcmRlcmluZ3MgRGlyZXR0aXZlIGRpIG9yZGluYW1lbnRvIGRhIGFwcGxpY2FyZSBhbGxlIHZhcmllIHNvdHRvcmljZXJjaGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGVtaXRSb3dHcm91cGluZ1NlYXJjaGVzKGNvbHVtbjogc3RyaW5nLCBvcmRlcmluZ3M6IEFwcE9yZGVyaW5nW10pIHtcclxuICAgICAgICAvLyBQZXIgdHV0dGUgbGUgcmljZXJjaGUgaW50ZXJtZWRpZSBjaGUgZGV2byByaXZhbHV0YXJlIGxlIHJlLWVtaXR0byBpbiBtb2RvIGRhIGFnZ2lvcm5hcmdsaSBpIGRhdGlcclxuICAgICAgICB2YXIgbWVhbmluZ2Z1bEFwcFNlYXJjaGVzID0gdGhpcy5lc3QuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlLmZpbHRlcih0ID0+IHQuZ3JvdXBfY29sdW1uID09IGNvbHVtbikubWFwKHQgPT4gdC52aWV3KTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIG5lIHRyb3ZvIHNpZ25pZmljYSBjaGUgaG8gZmF0dG8gbCdvcmRpbmFtZW50byBvIHN1Z2xpIGl0ZW0sIG8gc3UgY29sb25uZSByZWxhdGl2ZSBhIHVuIHNvdHRvZ3J1cHBvIG5vbiBjYXJpY2F0b1xyXG4gICAgICAgIGlmICghbWVhbmluZ2Z1bEFwcFNlYXJjaGVzIHx8IG1lYW5pbmdmdWxBcHBTZWFyY2hlcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgbWVhbmluZ2Z1bEFwcFNlYXJjaGVzID0gdGhpcy5lc3QuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlLmZpbHRlcih0ID0+ICF0Lmdyb3VwX2NvbHVtbikubWFwKHQgPT4gdC52aWV3KTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIG5lIHRyb3ZvIHF1aSBzaWduaWZpY2EgY2hlIHN0byBvcmRpbmFuZG8gc3UgY29sb25uZSByZWxhdGl2ZSBhIHVuIHNvdHRvZ3J1cHBvIG5vbiBjYXJpY2F0b1xyXG4gICAgICAgIGlmICghbWVhbmluZ2Z1bEFwcFNlYXJjaGVzIHx8IG1lYW5pbmdmdWxBcHBTZWFyY2hlcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBtZWFuaW5nZnVsQXBwU2VhcmNoZXMuZm9yRWFjaChhcyA9PiB7XHJcbiAgICAgICAgICAgIC8vIE92dmlhbWVudGUgZ2xpIG9yaWRuYW1lbnRpIGRldm9ubyBlc3NlcmUgcXVlbGxpIGFwcGVuYSBnZW5lcmF0aVxyXG4gICAgICAgICAgICBhcy5vcmRlcnMgPSBvcmRlcmluZ3M7XHJcbiAgICAgICAgICAgIGFzLnNhdmVkc3RhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5lbWl0U2VhcmNoUmVxdWVzdChmYWxzZSwgYXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIGNoZSBjYWxjb2xhIGlsIGNvbnRlbnV0byBkaSB1bmEgY2VsbGEgcmVsYXRpdmEgYSB1biBncnVwcG8gcmlnYSwgdGVuZW5kbyBjb250byBkZWwgZm9ybWF0byBkZWxsZSBldmVudHVhbGkgYWdncmVnYXppb25pXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtHcm91cH0gZ3JwIEdydXBwbyBkaSBjdWkgbW9zdHJhcmUgbGUgY2VsbGVcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjZWxsIENlbGxhIGF0dHVhbGUgZGkgY3VpIGNhbGNvbGFyZSBpbCB0ZXN0b1xyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlfSBoZWFkZXIgSGVhZGVyIHJlbGF0aXZvIGFsbGEgY2VsbGEgYXR0dWFsZSwgdXRpbGl6emF0YSBwZXIgaWRlbnRpZmljYXJlIGxlIGluZm9ybWF6aW9uaSBkaSBhZ2dyZWdhemlvbmVcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUZXN0byBmaW5hbGUgY2FsY29sYXRvIHBlciBsYSAqKmNlbGwqKiBjb3JyZW50ZSwgaW4gYmFzZSBhbGxlIGFnZ3JlZ2F6aW9uaSBkaSAqKmhlYWRlcioqXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRHcm91cENlbGxEaXNwbGF5KGdycDogR3JvdXAsIGNlbGw6IHN0cmluZywgaGVhZGVyOiBFc1RoRGlyZWN0aXZlKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoKDxhbnk+Z3JwKS5fc2VwKVxyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICBsZXQgZGlzcGxheSA9IGhlYWRlci50aEFnZ3JlZ2F0aW9uO1xyXG4gICAgICAgIGlmIChncnAuY29sdW1uID09IGNlbGwpIHtcclxuICAgICAgICAgICAgbGV0IGdyb3Vwc1BhcnQgPSAoPGFueT5ncnApLl9ncm91cHNjb3VudCA/IFwiIC0gXCIgKyAoPGFueT5ncnApLl9ncm91cHNjb3VudCArIFwiIFwiICsgdGhpcy5lc3QubGMubG9jKFwiR3JvdXBzXCIpIDogXCJcIjtcclxuICAgICAgICAgICAgcmV0dXJuIGdycC52YWx1ZSArIFwiIChcIiArIGdycC5jb3VudCArIGdyb3Vwc1BhcnQgKyBcIilcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBsZXQgYWdnID0gKDxNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+Pj4oPGFueT5ncnApLl9hZ2dyZWdhdGlvbnNDYWNoZSkuZ2V0KGNlbGwpO1xyXG4gICAgICAgICAgICBpZiAoIWFnZylcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRFc1RoRGlyZWN0aXZlTGlzdE9mQWdncmVnYXRpb25zKGhlYWRlcikuZm9yRWFjaCgoaXRtOiBUaEFnZ3JlZ2F0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5ID0gZGlzcGxheS5yZXBsYWNlKGl0bS5tYXRjaCwgdGhpcy5mb3JtYXRBZ2dyZWdhdGlvblZhbHVlKGFnZy5nZXQoaXRtLmZ1bmMpLCBpdG0uZm9ybWF0KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGRpc3BsYXk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgY2hlIGRhdG8gdW4gdmFsb3JlIGxvIGZvcm1hdHRhIGluIGJhc2UgYWwgdGlwb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVmFsb3JlIGNoZSBnZW5lcmFsZW1udGUgcHXDsiBlc3NlcmUgdW5hIGRhdGEgbyB1biBudW1lcm9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tYXQgRm9ybWF0byBzdSBjdWkgZm9ybWF0dGFyZSBpbCB2YWxvcmUuIFB1w7IgZXNzZXJlIGFkIGVzZW1waW8gXCJzbWFsbFwiLCBcImxvbmdcIiBcInZlcnlsb25nXCIgcGVyIGxlIGRhdGUgbyBGezAtOX0gcGVyIGkgbnVtZXJpIGRlY2ltYWxpXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbG9yZSBkZWxsJ2FnZ3JlZ2F6aW9uZSBmb3JtYXR0YXRvIGNvbWUgc2kgZGV2ZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGZvcm1hdEFnZ3JlZ2F0aW9uVmFsdWUodmFsdWU6IHN0cmluZywgZm9ybWF0Pzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAoIWZvcm1hdClcclxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG5cclxuICAgICAgICBsZXQgaXNOdW1iZXIgPSAhTnVtYmVyLmlzTmFOKHZhbHVlKSAmJiAoIWZvcm1hdCB8fCBmb3JtYXQuc3RhcnRzV2l0aChcIkZcIikpO1xyXG5cclxuICAgICAgICBpZiAoaXNOdW1iZXIgJiYgZm9ybWF0LnN0YXJ0c1dpdGgoXCJGXCIpICYmICFOdW1iZXIuaXNOYU4oZm9ybWF0LnN1YnN0cigxKSkpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKS50b0ZpeGVkKHBhcnNlSW50KGZvcm1hdC5zdWJzdHIoMSkpKTtcclxuXHJcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgICAgIC8vIEFsY3VuZSB2ZXJzaW9uZSBkaSBleHRlbnNpb25zIHJpc2NoaWFubyBkaSBjcmFzaGFyZSBjb24gY29zZSBub24gZGF0ZS4uLiDDqCBzdGF0byByaXNvbHRvIGRvcG8gcXVpbmRpIHF1ZXN0byB0cnkgLSBjYXRjaCBpbiByZWFsdMOgXHJcbiAgICAgICAgLy8gdG9ybmEgdXRpbGUgc29sbyBjb24gdmVyc2lvbmkgdmVjY2hpZS9kZXByZWNhdGUgZGVsbGEgbGlicmVyaWEgQGVzZmFlbnphL2V4dGVuc2lvbnNcclxuICAgICAgICB0cnkgeyBkYXRlID0gdGhpcy5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbih2YWx1ZSk7IH0gY2F0Y2ggeyB9XHJcblxyXG4gICAgICAgIGlmIChkYXRlKVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlRXh0cy5nZXRGb3JtYXR0ZWQoZGF0ZSwgZm9ybWF0ID09ICdzbWFsbCcsIGZvcm1hdCA9PSAndmVyeWxvbmcnKTtcclxuXHJcbiAgICAgICAgLy8gUXVpIGNpIGZpbmlzY28gc2lhIHBlciBpbnB1dCBjaGUgbm9uIHNvbm8gbsOpIGRhdGUgbsOpIG51bWVyaSwgc2lhIHBlciBmb3JtYXRpIG5vbiByaWNvbm9zY2l1dGlcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbn0iXX0=
478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm93R3JvdXBpbmdIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb3JlL2hhbmRsZXJzL2NsYXNzZXMvUm93R3JvdXBpbmdIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLFVBQVU7QUFDVixPQUFPLEVBQTBCLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7QUFLckosaUVBQWlFO0FBQ2pFLE1BQU0sT0FBTyxrQkFBa0I7SUFTM0IsMEJBQTBCO0lBQzFCLFlBQW9CLEdBQXFCLEVBQVUsU0FBMkIsRUFBVSxRQUFxQjtRQUF6RixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQVI3RyxxRkFBcUY7UUFDOUUsaUJBQVksR0FBdUIsSUFBSSxHQUFHLEVBQWlCLENBQUM7UUFDbkUsNkdBQTZHO1FBQ3RHLGdCQUFXLEdBQXVCLElBQUksR0FBRyxFQUFpQixDQUFDO1FBQ2xFLDZHQUE2RztRQUN0Ryx1QkFBa0IsR0FBeUIsSUFBSSxHQUFHLEVBQW1CLENBQUM7SUFHb0MsQ0FBQztJQUVsSDs7Ozs7Ozs7O09BU0c7SUFDSSwwQkFBMEIsQ0FBQyxJQUFvQixFQUFFLFlBQW9COztRQUN4RSx3SUFBd0k7UUFDeEksOEVBQThFO1FBQzlFLElBQUksQ0FBQyxPQUFBLElBQUksQ0FBQyxlQUFlLDBDQUFFLE1BQU0sS0FBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7WUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBaUIsQ0FBQztZQUM3QyxJ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Q0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVqRSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsb0lBQW9JO1FBQ3BJLHNGQUFzRjtRQUN0RixJQUFJO1lBQUUsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FBRTtRQUFDLFdBQU0sR0FBRztRQUVoRSxJQUFJLElBQUk7WUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksT0FBTyxFQUFFLE1BQU0sSUFBSSxVQUFVLENBQUMsQ0FBQztRQUVyRixnR0FBZ0c7UUFDaEcsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGlicmVyaWVcclxuaW1wb3J0IHsgRGF0ZVNlcnZpY2UgfSBmcm9tIFwiQGVzZmFlbnphL2V4dGVuc2lvbnNcIjtcclxuXHJcbi8vIERpcmV0dGl2ZSAvIENvbXBvbmVudGlcclxuaW1wb3J0IHsgRXNUaCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL2VzLXRoL2VzX3RoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBFc1RoRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGguZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5cclxuLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBcHBPcmRlcmluZywgQXBwU2VhcmNoLCBHcm91cCwgR3JvdXBBZ2dyZWdhdGlvbiwgR3JvdXBPckFnZ3JlZ2F0aW9uLCBHcm91cFBhZ2VyLCBHcm91cFJvdXRlRnJhZ21lbnQsIFRoQWdncmVnYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vZG9tYWluXCI7XHJcblxyXG4vLyBVdGlsaXRpZXNcclxuaW1wb3J0IHsgVXRpbGl0aWVzSGFuZGxlciB9IGZyb20gXCIuL1V0aWxpdGllc0hhbmRsZXJcIjtcclxuXHJcbi8qKiBDbGFzc2UgY2hlIGdlc3Rpc2NlIGxhIG1vZGFsaXTDoCBSb3cgR3JvdXBpbmcgZGVsbCdlcy10YWJsZSAqL1xyXG5leHBvcnQgY2xhc3MgUm93R3JvdXBpbmdIYW5kbGVyIHtcclxuXHJcbiAgICAvKiogQ2FjaGUgcGVyIHNhbHZhcmUgcGVyIG9nbmkgY2hpYXZlIGRpIG9nbmkgZ3J1cHBvIGNoaSDDqCBpbCBncnVwcG8gcmFwcHJlc2VudGF0byAqL1xyXG4gICAgcHVibGljIHJnR3JvdXBDYWNoZTogTWFwPHN0cmluZywgR3JvdXA+ID0gbmV3IE1hcDxzdHJpbmcsIEdyb3VwPigpO1xyXG4gICAgLyoqIENhY2hlIHBlciBzYWx2YXJlIHBlciBvZ25pIGNoaWF2ZSBkaSBvZ25pIGdydXBwbyBjaGkgc29ubyBnbGkgb2dnZXR0aSBzb3R0b3N0YW50aSwgbm9uIGRlaSBzb3R0b2dydXBwaSAqL1xyXG4gICAgcHVibGljIHJnSXRlbUNhY2hlOiBNYXA8c3RyaW5nLCBhbnlbXT4gPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XHJcbiAgICAvKiogQ2FjaGUgcGVyIHNhbHZhcmUgcGVyIG9nbmkgY2hpYXZlIGRpIG9nbmkgZ3J1cHBvIGNoaSBzb25vIGdsaSBvZ2dldHRpIHNvdHRvc3RhbnRpLCBub24gZGVpIHNvdHRvZ3J1cHBpICovXHJcbiAgICBwdWJsaWMgcmdDaGlsZEdyb3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBHcm91cFtdPiA9IG5ldyBNYXA8c3RyaW5nLCBHcm91cFtdPigpO1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVzdDogRXNUYWJsZUNvbXBvbmVudCwgcHJpdmF0ZSB1dGlsaXRpZXM6IFV0aWxpdGllc0hhbmRsZXIsIHByaXZhdGUgZGF0ZUV4dHM6IERhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluIG1vZGFsaXTDoCByb3dncm91cGluZyBxdWFuZG8gbWkgYXJyaXZhIHVuIG51b3ZvIGJsb2NjbyBkaSBvZ2dldHRpIGRldm8gYWdnaXVuZ2VybG8gYWxsYSB2aXN0YSBhdHR1YWxlOlxyXG4gICAgICpcclxuICAgICAqIDEpIFNlIG5vbiB2aWVuZSByaWNoaWVzdG8gaWwgZGV0dGFnbGlvIGRpIGFsY3VuIGdydXBwbyBzaWduaWZpY2EgY2hlIGRldm8gY29uc2lkZXJhcmUgbWkgc2lhbm8gYXJyaXZhdGkgdHV0dGkgaSBncnVwcGkgcHJpbmNpcGFsaVxyXG4gICAgICogMikgU2UgdmllbmUgcmljaGllc3RvIGlsIGRldHRhZ2xpbyBkaSB1biBncnVwcG8gZGl2ZXJzbyBkYWxsJ3VsdGltbyBkZXZvIGFnZ2l1bmdlcmUgZG9wbyBhbCBncnVwcG8gY2xpY2NhdG8gbGEgbGlzdGEgZGVpIHNvdHRvZ3J1cHBpXHJcbiAgICAgKiAyKSBTZSB2aWVuZSByaWNoaWVzdG8gaWwgZGV0dGFnbGlvIGRlbGwndWx0aW1vIGdydXBwbyBkZXZvIGFnZ2l1bmdlcmUgZG9wbyBhbCBncnVwcG8gY2xpY2NhdG8gbGEgbGlzdGEgZGVnbGkgb2dnZXR0aVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55fSB2aWV3IEFwcFNlYXJjaDxUPiBkYSBjdWkgc29ubyBhcnJpdmF0aSBnbGkgb2dnZXR0aVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGdyb3VwaW5nS2V5cyBMaXZlbGxpIGRpIHJhZ2dydXBwYW1lbnRvIGRhIGFzcGV0dGFyc2kgc3VpIGRhdGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGhhbmRsZU5ld0RhdGFPblJvd0dyb3VwaW5nKHZpZXc6IEFwcFNlYXJjaDxhbnk+LCBncm91cGluZ0tleXM6IG51bWJlcikge1xyXG4gICAgICAgIC8vIDEpIFNlIG5vbiB2aWVuZSByaWNoaWVzdG8gaWwgZGV0dGFnbGlvIGRpIGFsY3VuIGdydXBwbyBzaWduaWZpY2EgY2hlIGxhIGNoaWFtYXRhIHJlc3RpdHVpc2NlIGxhIGxpc3RhIHBhZ2luYXRhIGRlaSBncnVwcGkgcHJpbmNpcGFsaS5cclxuICAgICAgICAvLyAgICBMaSB0cmF0dG8gY29tZSBzZSBmb3NzZSB1bmEgcXVhbHNpYXNpIGFsdHJhIHF1ZXJ5IHBhZ2luYXRhIHN1IE4gZWxlbWVudGlcclxuICAgICAgICBpZiAoKHZpZXcucmVxdWVzdGVkZ3JvdXBzPy5sZW5ndGggfHwgMCkgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5ib3VuZFNvdXJjZSA9IHRoaXMuZXN0LlRNUEJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICB0aGlzLnJnR3JvdXBDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBHcm91cD4oKTtcclxuICAgICAgICAgICAgdGhpcy5yZ0l0ZW1DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnlbXT4oKTtcclxuICAgICAgICAgICAgdGhpcy5yZ0NoaWxkR3JvdXBzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgR3JvdXBbXT4oKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LlRNUEJvdW5kU291cmNlLmZvckVhY2goaXRtID0+IHtcclxuICAgICAgICAgICAgICAgIGl0bS5fdGhpc1JvdXRlID0gaXRtLl9ncm91cCA/IFt7IGNvbHVtbjogKDxHcm91cD5pdG0pLmNvbHVtbiwgdmFsdWU6ICg8R3JvdXA+aXRtKS52YWx1ZSB9XSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgaXRtLl90aGlzS2V5ID0gaXRtLl9ncm91cCA/ICg8R3JvdXA+aXRtKS52YWx1ZSA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpdG0uX2dyb3VwbGV2ZWwgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmdHcm91cENhY2hlLnNldChpdG0uX3RoaXNLZXksIGl0bSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVzZXR0byBsYSByaWNlcmNhIGFsbGEgY2FjaGUgZGkgcXVlc3RhIFwic2Vzc2lvbmVcIlxyXG4gICAgICAgICAgICBsZXQgZmlyc3RJdGVtID0gdGhpcy5lc3QuVE1QQm91bmRTb3VyY2VbMF07XHJcbiAgICAgICAgICAgIHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcgPSBPYmplY3QuYXNzaWduKHt9LCB2aWV3KTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlID0gW3sgcGF0aDogJycsIHJvdXRlOiBbeyBjb2x1bW46ICg8R3JvdXA+Zmlyc3RJdGVtKS5jb2x1bW4sIHZhbHVlOiAoPEdyb3VwPmZpcnN0SXRlbSkudmFsdWUgfV0sIHZpZXc6IHRoaXMuZXN0Lk1haW5Hcm91cFZpZXcsIGdyb3VwX2NvbHVtbjogKDxHcm91cD50aGlzLmVzdC5UTVBCb3VuZFNvdXJjZVswXSkuY29sdW1uIH1dO1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5CYXNlSXRlbXNDb3VudCA9IHZpZXcub2JqZWN0Y291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAyKSBTZSB2aWVuZSByaWNoaWVzdG8gaWwgZGV0dGFnbGlvIGRpIHVuIHF1YWxzaWFzaSBncnVwcG8gZGl2ZXJzbyBkYWxsJ3VsdGltbyB2dW9sIGRpcmUgY2hlIGRldm8gYWdnaXVuZ2VyZVxyXG4gICAgICAgICAgICAvLyAgICBkb3BvIGFsIGdydXBwbyBjaGUgaG8gY2xpY2NhdG8gbGEgbGlzdGEgZGVpIGdydXBwaSB0aXJhdGEgZnVvcmkgcXVlc3RhIHZvbHRhIChpbnRlcm1lZGlhdGVHcm91cCA9IHRydWUpXHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICogICBHcnVwcG9BICAgICAgICAgICAgICAgICAgICAgIEdydXBwb0FcclxuICAgICAgICAgICAgKiAgIEdydXBwb0IgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvQlxyXG4gICAgICAgICAgICAqICAgR3J1cHBvQyA8LSBDbGljY28gcXVpICAgICAgICBHcnVwcG9DXHJcbiAgICAgICAgICAgICogICBHcnVwcG9EICAgICAgICAgICAgICAgICAgICAgICAgICBHcnVwcG9DMVxyXG4gICAgICAgICAgICAqICAgR3J1cHBvRSAgICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvQzJcclxuICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvRFxyXG4gICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcnVwcG9FXHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIC8vIDMpIHNlIGkgZ3J1cHBpIHJpY2hpZXN0aSBkYWxsYSB2aWV3IHNvbm8gdWd1YWxpIGFpIGdydXBwaSBwcmVzZW50aSB2dW9sIGRpcmUgY2hlIHN0byBwcmVuZGVuZG8gZ2xpIG9nZ2V0dGkgdmVyaSBlIHByb3ByaSwgc29ubyBpblxyXG4gICAgICAgICAgICAvLyB2aWV3Lml0ZW1zIGUgcXVpbmRpIGluIFRNUEJvdW5kU291cmNlLCBobyBpbm9sdHJlIGxlIGluZm9ybWF6aW9uaSBkaSBwYWdpbmF6aW9uZSAqKnBlciBpbCBzaW5nb2xvIHNvdHRvZ3J1cHBvKiogKGludGVybWVkaWF0ZUdyb3VwID0gZmFsc2UpXHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICogICBHcnVwcG9BICAgICAgICAgICAgICAgICAgICAgICAgIEdydXBwb0FcclxuICAgICAgICAgICAgKiAgICAgICBHcnVwcG9DMSAgICAgICAgICAgICAgICAgICAgICAgIEdydXBwb0MxXHJcbiAgICAgICAgICAgICogICBHcnVwcG9CICAgICAgICAgICAgICAgICAgICAgICAgIEdydXBwb0JcclxuICAgICAgICAgICAgKiAgIEdydXBwb0MgICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvQ1xyXG4gICAgICAgICAgICAqICAgICAgIEdydXBwb0MxIDwtLSBDbGljY28gcXVpICAgICAgICAgR3J1cHBvQzFcclxuICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPZ2dldHRvMVxyXG4gICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9nZ2V0dG8yXHJcbiAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2dnZXR0bzNcclxuICAgICAgICAgICAgKiAgICAgICBHcnVwcG9DMiAgICAgICAgICAgICAgICAgICAgICAgIEdydXBwb0MyXHJcbiAgICAgICAgICAgICogICBHcnVwcG9EICAgICAgICAgICAgICAgICAgICAgICAgIEdydXBwb0RcclxuICAgICAgICAgICAgKiAgIEdydXBwb0UgICAgICAgICAgICAgICAgICAgICAgICAgR3J1cHBvRVxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBsZXQgaW50ZXJtZWRpYXRlR3JvdXAgPSB2aWV3LnJlcXVlc3RlZGdyb3Vwcy5sZW5ndGggIT0gZ3JvdXBpbmdLZXlzO1xyXG5cclxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5lc3QuYm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIGxldCBpbnNlcnRJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIGxldCBpbnNlcnRHcm91cCA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBncm91cEtleTogc3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgbGV0IGdyb3VwUm91dGU6IEdyb3VwUm91dGVGcmFnbWVudFtdID0gW107XHJcblxyXG4gICAgICAgICAgICAvLyBOYXZpZ28gbGEgc3R1dHR1cmEgZGVpIGdydXBwaSBpZ25vcmFuZG8gcmljb3JzaXZhbWVudGUgdHV0dGkgZ2xpIGluZGljaSBmaW5vIGFpIGdydXBwaSBjaGUgbWkgaW50ZXJlc3Nhbm8gaW4gbW9kbyBkYSBub24gYmVjY2FyZSBpbCBwcmltbyBcIkdydXBwb0MxXCIgZGVsIGNhc28gc29wcmFcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aWV3LnJlcXVlc3RlZGdyb3Vwcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHJnID0gdmlldy5yZXF1ZXN0ZWRncm91cHNbaV07XHJcbiAgICAgICAgICAgICAgICBncm91cEtleSArPSByZy52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGdyb3VwUm91dGUucHVzaCh7IGNvbHVtbjogcmcuY29sdW1uLCB2YWx1ZTogcmcudmFsdWUgfSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gaW5zZXJ0SW5kZXg7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gaW5zZXJ0SW5kZXggJiYgdC5fZ3JvdXAgJiYgdC5jb2x1bW4gPT0gcmcuY29sdW1uICYmIHQudmFsdWUgPT0gcmcudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0SW5kZXggPSBpOyBpbnNlcnRHcm91cCA9IHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIExvIG1hcmNvIGV4cGFuZGVkIGRhdG8gY2hlIHF1ZXN0byBjbGljayBzdWwgZ3J1cHBvIHBvdHJlYmJlIG5vbiBlc3NlcmUgc3RhdG8gZmF0dG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0R3JvdXAuX2V4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgaXRlbXNDYWNoZVJlZmVyZW5jZTtcclxuICAgICAgICAgICAgbGV0IGNoaWxkR3JvdXBzQ2FjaGVSZWZlcmVuY2U7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBub24gw6ggdW4gZ3J1cHBvIGludGVybWVkaW8gZGV2byByaXB1bGlyZSBsYSBjYWNoZSBkZWwgZ3J1cHBvIHN1IGN1aSBobyBhdHR1YWxtZW50ZSBjbGljY2F0by4gR2xpIG9nZ2V0dGkgc2FyYW5ubyByaWFnZ2l1bnRpIGRvcG9cclxuICAgICAgICAgICAgaWYgKCFpbnRlcm1lZGlhdGVHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZ0l0ZW1DYWNoZS5zZXQoZ3JvdXBLZXksIFtdKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zQ2FjaGVSZWZlcmVuY2UgPSB0aGlzLnJnSXRlbUNhY2hlLmdldChncm91cEtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTZSBpbnZlY2Ugw6ggdW4gZ3J1cHBvIGludGVybWVkaW8gZGV2byByaXB1bGlyZSBzaWEgdHV0dGkgaSBjaGlsZCBncm91cCByaWNvcnNpdmFtZW50ZSwgc2lhIHR1dHRpIGdsaSBpdGVtXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgb2YgdGhpcy5yZ0NoaWxkR3JvdXBzQ2FjaGUua2V5cygpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChncm91cEtleSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmdDaGlsZEdyb3Vwc0NhY2hlLmRlbGV0ZShrZXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiB0aGlzLnJnSXRlbUNhY2hlLmtleXMoKSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoZ3JvdXBLZXkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJnSXRlbUNhY2hlLmRlbGV0ZShrZXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmdDaGlsZEdyb3Vwc0NhY2hlLnNldChncm91cEtleSwgW10pO1xyXG4gICAgICAgICAgICAgICAgY2hpbGRHcm91cHNDYWNoZVJlZmVyZW5jZSA9IHRoaXMucmdDaGlsZEdyb3Vwc0NhY2hlLmdldChncm91cEtleSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEFzc2Vnbm8gdW4gbGl2ZWxsbyBhaSB2YWxvcmkgY2hlIGFycml2YW5vIGRhIHVzYXJlIHBlciBmb3JtYXR0YXJlIGxhIHBhcnRlIGdyYWZpY2EuIElsIHByaW1vIGdydXBwbyBjbGljY2F0byBzYXLDoCBhIGxpdmVsbG8gMSxcclxuICAgICAgICAgICAgLy8gaWwgc2Vjb25kbyBzYXLDoCBhIGxpdmVsbG8gMiBlIGNvc8OsIHZpYS4uLlxyXG4gICAgICAgICAgICAvLyBMaSBtYXJjbyBpbm9sdHJlIGNvbiBpbCBwYXJlbnQgaW4gbW9kbyBkYSBwb3RlciBlbGltaW5hcmUgaSB2ZWNjaGkgcXVhbG9yYSBzZXJ2aXNzZVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5UTVBCb3VuZFNvdXJjZS5mb3JFYWNoKGl0bSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdG0uX3BhcmVudCA9IGdyb3VwS2V5O1xyXG4gICAgICAgICAgICAgICAgaXRtLl9wYXJlbnRSb3V0ZSA9IGdyb3VwUm91dGU7XHJcbiAgICAgICAgICAgICAgICBpdG0uX3RoaXNSb3V0ZSA9IGl0bS5fZ3JvdXAgPyBbLi4uZ3JvdXBSb3V0ZSwgbmV3IEdyb3VwUm91dGVGcmFnbWVudCgoPEdyb3VwPml0bSkuY29sdW1uLCAoPEdyb3VwPml0bSkudmFsdWUpXSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgaXRtLl90aGlzS2V5ID0gaXRtLl9ncm91cCA/IGdyb3VwS2V5ICsgKDxHcm91cD5pdG0pLnZhbHVlIDogZ3JvdXBLZXk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUGVyIGxlIHJpY2VyY2EgaW50ZXJtZWRpZSBtZXR0byBpIGdydXBwaSBuZWxsYSBjYWNoZSBkZWkgZ3J1cHBpXHJcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJtZWRpYXRlR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICBpdG0uX2dyb3VwbGV2ZWwgPSB2aWV3LnJlcXVlc3RlZGdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZ0dyb3VwQ2FjaGUuc2V0KGl0bS5fdGhpc0tleSwgaXRtKTtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZEdyb3Vwc0NhY2hlUmVmZXJlbmNlLnB1c2goaXRtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE1ldHRvIGFuY2hlIGdsaSBvZ2dldHRpIG5lbGxhIGNhY2hlIG5vbiByaWNvcnNpdmFcclxuICAgICAgICAgICAgICAgICAgICBpdGVtc0NhY2hlUmVmZXJlbmNlLnB1c2goaXRtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBFbGltaW5vIGdsaSBvZ2dldHRpIHZlY2NoaVxyXG4gICAgICAgICAgICAvLyAxKSBSaWNlcmNhIGludGVybWVkaWEsIHN0YXRvIHNhbHZhdG8gLSBFbGltaW5vIHR1dHRpIGdsaSBpdGVtIGUgdHV0dGkgaSBncnVwcGkgbGEgY3VpIHJvdXRlIMOoIHBpw7kgbHVuZ2EgZGVsbGEgY29ycmVudGUsIHR1dHRpIGdsaSBpdGVtIHJlbGF0aXZpIGFsbGEgcGF0aCBjb3JyZW50ZSwgZSB0dXR0ZVxyXG4gICAgICAgICAgICAvLyAgICBsZSBjYWNoZSBkaSByaWNlcmNhIGVmZmV0dHVhdGUgc3UgdW5hIHBhdGggcGnDuSBwcm9mb25kYSBkZWxsJ2F0dHVhbGVcclxuICAgICAgICAgICAgLy8gMikgUmljZXJjYSBmaW5hbGUgbyByaWNlcmNhIGludGVybWVkaWEgc2VuemEgc3RhdG8gc2FsdmF0byAtIEVsaW1pbm8gdHV0dGkgZ2xpIGl0ZW0gcmVsYXRpdmkgYWxsYSBwYXRoIGNvcnJlbnRlXHJcbiAgICAgICAgICAgIC8vIFBlciBcInN0YXRvIHNhbHZhdG9cIiBzaSBpbnRlbmRvbm8gcmljZXJjaGUgdmVjY2hpZSBzYWx2YXRlIHBlciBwb3RlciBlc3NlcmUgcmllZmZldHR1YXRlIGluIGNhc28gZGkgb3JkaW5hbWVudGkgc3UgY29sb25uZSBkaSBpbnRlcmVzc2VcclxuICAgICAgICAgICAgaWYgKGludGVybWVkaWF0ZUdyb3VwICYmIHZpZXcuc2F2ZWRzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3QuYm91bmRTb3VyY2UgPSB0aGlzLmVzdC5ib3VuZFNvdXJjZS5maWx0ZXIodCA9PiAhKHQuX2l0ZW0gfHwgdC5fdGhpc1JvdXRlLmxlbmd0aCA+IGdyb3VwUm91dGUubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUgPSB0aGlzLmVzdC5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUuZmlsdGVyKHQgPT4gISh0LnJvdXRlLmxlbmd0aCA+IGdyb3VwUm91dGUubGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaW50ZXJtZWRpYXRlR3JvdXApXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIC8vIFNlIGludmVjZSBsbyBzdGF0byBub24gw6ggc2FsdmF0byB2dW9sIGRpcmUgY2hlIGMnw6ggc3RhdG8gdW4gY2FtYmlvIGRpIHBhZ2luYSBpbnRlcm5vIGFkIHVuIGdydXBwbyBnacOgIGFwZXJ0bzpcclxuICAgICAgICAgICAgICAgIC8vIC0gRWxpbWlubyB0dXR0aSBnbGkgZWxlbWVudGkgcmljb25kdWNpYmlsaSBhIHF1ZXN0byBncnVwcG8gY2hlIGVyYW5vIGdpw6AgcHJlc2VudGlcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LmJvdW5kU291cmNlID0gdGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gISh0Ll9pdGVtIHx8ICh0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXBLZXkpICYmIHQuX3RoaXNLZXkgIT0gZ3JvdXBLZXkpKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmJvdW5kU291cmNlID0gdGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gISh0Ll9wYXJlbnQgPT0gZ3JvdXBLZXkpKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB0aGlzR3JvdXAgPSB0aGlzLmVzdC5ib3VuZFNvdXJjZVtpbnNlcnRJbmRleF07XHJcbiAgICAgICAgICAgIGlmIChpbnRlcm1lZGlhdGVHcm91cClcclxuICAgICAgICAgICAgICAgIHRoaXNHcm91cC5fZ3JvdXBzY291bnQgPSAoPEFwcFNlYXJjaDxhbnk+PnRoaXMuZXN0LlZpZXcpPy5ncm91cGNvdW50O1xyXG5cclxuICAgICAgICAgICAgLy8gTGkgc29zdGl0dWlzY28gY29pIG51b3ZpIGRpIHF1ZXN0YSByaWNlcmNhXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmJvdW5kU291cmNlLnNwbGljZShpbnNlcnRJbmRleCArIDEsIDAsIC4uLnRoaXMuZXN0LlRNUEJvdW5kU291cmNlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFnZ2l1bmdvIHVuIHNlcGFyYXRvcmUgYWxsYSBmaW5lIG8gYWxsJ2luaXppbyBkaSBxdWVzdGkgZ3J1cHBpIGNoZSBkb3Zyw6Agb2NjdXBhcnNpIGRpIGNhcmljYXJlIEFMVFJJIGdydXBwaSBvIG9nZ2V0dGkgKHNlIHNvbm8gYWxsJ3VsdGltbyBncnVwcG8pXHJcbiAgICAgICAgICAgIGxldCBhZGRMYXN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmJvdW5kU291cmNlLnNwbGljZShpbnNlcnRJbmRleCArIDEgKyAoYWRkTGFzdCA/IHRoaXMuZXN0LlRNUEJvdW5kU291cmNlLmxlbmd0aCA6IDApLCAwLCB0aGlzLmdldEdyb3VwU2VwYXJhdG9yKHZpZXcsIGdyb3VwS2V5LCBncm91cFJvdXRlLCB2aWV3LnJlcXVlc3RlZGdyb3Vwcy5sZW5ndGgsIGludGVybWVkaWF0ZUdyb3VwID8gJ2dyb3VwcycgOiAnaXRlbXMnKSk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZ2dpdW5nbyBsYSByaWNlcmNhIGFsbGEgY2FjaGUgZGkgcXVlc3RhIFwic2Vzc2lvbmVcIlxyXG4gICAgICAgICAgICBsZXQgdG9BZGQgPSB7IHBhdGg6IGdyb3VwS2V5LCByb3V0ZTogZ3JvdXBSb3V0ZSwgdmlldzogT2JqZWN0LmFzc2lnbih7fSwgdmlldyksIGdyb3VwX2NvbHVtbjogaW50ZXJtZWRpYXRlR3JvdXAgPyAoPEdyb3VwPnRoaXMuZXN0LlRNUEJvdW5kU291cmNlWzBdKS5jb2x1bW4gOiAnJyB9O1xyXG4gICAgICAgICAgICBsZXQgcHJldiA9IHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZS5maW5kSW5kZXgodCA9PiB0LnBhdGggPT0gdG9BZGQucGF0aCAmJiB0Lmdyb3VwX2NvbHVtbiA9PSB0b0FkZC5ncm91cF9jb2x1bW4pO1xyXG4gICAgICAgICAgICBpZiAocHJldiA9PSAtMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZS5wdXNoKHRvQWRkKTtcclxuXHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZS5zcGxpY2UocHJldiwgMSwgdG9BZGQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlIGluIG1vZGFsaXTDoCBhcnJheSBhcHBsaWNhIGkgcmFnZ3J1cHBhbWVudGkgZGVmaW5pdGkgbGF0byByb3ctZ3JvdXBpbmdcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3RoczogRXNUaERpcmVjdGl2ZVtdfSB0aHMgSGVhZGVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhcnJheU1vZGVSZXZpZXdHcm91cGluZ3ModGhzOiBFc1RoRGlyZWN0aXZlW10pIHtcclxuICAgICAgICBpZiAodGhzLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBoZWFkZXJHcm91cHM6IEdyb3VwW10gPSBbXTtcclxuICAgICAgICBsZXQgaGVhZGVyQWdncmVnYXRpb25zOiBHcm91cE9yQWdncmVnYXRpb25bXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV0gYXMgRXNUaERpcmVjdGl2ZTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aC50aEdyb3VwKVxyXG4gICAgICAgICAgICAgICAgaGVhZGVyR3JvdXBzLnB1c2gobmV3IEdyb3VwKHRoLnRoLCAwLCBcIlwiKSk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoLnRoQWdncmVnYXRpb24pXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJBZ2dyZWdhdGlvbnMgPSBbLi4uaGVhZGVyQWdncmVnYXRpb25zLCAuLi50aGlzLmdldEdyb3VwQWdncmVnYXRpb25zKHRoKV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaGVhZGVyR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gUHVsaXppYSBkZWxsZSBjYWNoZVxyXG4gICAgICAgICAgICB0aGlzLnJnR3JvdXBDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLnJnSXRlbUNhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMucmdDaGlsZEdyb3Vwc0NhY2hlLmNsZWFyKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVzdC5BcnJheUdyb3VwaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuYm91bmRTb3VyY2UgPSB0aGlzLmdldEdyb3Vwc1JlY3Vyc2l2ZShoZWFkZXJHcm91cHMsIDAsIHRoaXMuZXN0LmJvdW5kU291cmNlLCBoZWFkZXJBZ2dyZWdhdGlvbnMsIG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgdW5hIGRpcmV0dGl2YSBFc1RoIHJlc3RpdHVpc2NlIGxhIGxpc3RhIGRlbGxlIGFnZ3JlZ2F6aW9uaSByaWNoaWVzdGEgcGVyIHF1ZXN0YSBjb2xvbm5hIG8gaWwgZ3J1cHBvIGNoZSByYXBwcmVzZW50YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZX0gdGggRGlyZXR0aXZhXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge0dyb3VwT3JBZ2dyZWdhdGlvbltdfSBMaXN0YSBkZWkgZ3J1cHBpIG8gYWdncmVnYXppb25pIHJlbGF0aXZpIGFsbGEgRGlyZXR0aXZhIHBhc3NhdGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEdyb3VwQWdncmVnYXRpb25zKHRoOiBFc1RoRGlyZWN0aXZlKTogR3JvdXBPckFnZ3JlZ2F0aW9uW10ge1xyXG4gICAgICAgIGxldCByZXQgPSBbXTtcclxuICAgICAgICAvLyBFczogJ3ttaW46ZGQvTU0veXl5eX0gLSB7bWF4OmRkL01NL3l5eXl9J1xyXG4gICAgICAgIGlmICh0aC50aEFnZ3JlZ2F0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RXNUaERpcmVjdGl2ZUxpc3RPZkFnZ3JlZ2F0aW9ucyh0aCkuZm9yRWFjaCgoYWdnOiBUaEFnZ3JlZ2F0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXNkYXRlID0gYWdnLmZvcm1hdCAmJiBbJ3NtYWxsJywgJ2xvbmcnLCAndmVyeWxvbmcnXS5pbmNsdWRlcyhhZ2cuZm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIGxldCBpc251bWJlciA9IGFnZy5mb3JtYXQgJiYgYWdnLmZvcm1hdC5zdGFydHNXaXRoKFwiRlwiKSAmJiAhTnVtYmVyLmlzTmFOKGFnZy5mb3JtYXQuY2hhckF0KDEpKSAmJiBhZ2cuZm9ybWF0Lmxlbmd0aCA9PSAyO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghaXNkYXRlICYmICFpc251bWJlciAmJiBhZ2cuZm9ybWF0KVxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IFwiTGUgYWdnZXJnYXppb25pIHN1cHBvcnRhdGUgZGFsbCdlcy10YWJsZSBzb25vIHNvbG8gJ3NtYWxsJywgJ2xvbmcnLCAndmVyeWxvbmcnIHBlciBsZSBkYXRlIGUgJ0YwLTknIHBlciBpIG51bWVyaVwiO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldC5wdXNoKG5ldyBHcm91cE9yQWdncmVnYXRpb24odGgudGgsIGFnZy5mdW5jLCBpc2RhdGUgPyAnZGF0ZScgOiBpc251bWJlciA/ICdudW1iZXInIDogJ3N0cmluZycpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoLnRoR3JvdXApXHJcbiAgICAgICAgICAgIHJldC5wdXNoKG5ldyBHcm91cE9yQWdncmVnYXRpb24odGgudGgsIG51bGwpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAqIERhdGEgdW5hIGRpcmV0dGl2YSBjb24gdW4gZm9ybWF0byByZXN0aXR1aXNjZSB0dXR0ZSBsZSBjb3BwaWUgRnVuemlvbmUgZGkgQWdncmVnYXppb25lIC0gRm9ybWF0b1xyXG4gICAgKlxyXG4gICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmV9IHRoIERpcmV0dGl2YSBFc1RoIGRpIGN1aSBjYWxjb2xhcmUgbGUgZnVuemlvbmkgZGkgYWdncmVnYXppb25lIHVzYXRlXHJcbiAgICAqXHJcbiAgICAqIEByZXR1cm5zIHt7IGZ1bmM6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcgfVtdfSBMaXN0YSBkZWxsZSBmdW56aW9uaSBkaSBhZ2dyZWdhemlvbmUgcmlsZXZhdGVcclxuICAgICovXHJcbiAgICBwcml2YXRlIGdldEVzVGhEaXJlY3RpdmVMaXN0T2ZBZ2dyZWdhdGlvbnModGg6IEVzVGhEaXJlY3RpdmUpOiBUaEFnZ3JlZ2F0aW9uW10ge1xyXG4gICAgICAgIGlmICghdGgudGhBZ2dyZWdhdGlvbilcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG5cclxuICAgICAgICAvLyBTZSBobyBnacOgIGVmZmV0dHVhdG8gcXVlc3RvIGNhbGNvbG8gcGVyIHF1ZXN0byB0aCByZXN0aXR1aXNjbyBsYSB2ZXJzaW9uZSBpbiBjYWNoZVxyXG4gICAgICAgIGlmICh0aC5fdGhBZ2dyZWdhdGlvbnMpXHJcbiAgICAgICAgICAgIHJldHVybiB0aC5fdGhBZ2dyZWdhdGlvbnM7XHJcblxyXG4gICAgICAgIGxldCByZXQgPSBbXTtcclxuICAgICAgICBsZXQgZGlzcGxheSA9IHRoLnRoQWdncmVnYXRpb247XHJcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBkaXNwbGF5Lm1hdGNoKC97W2EtekEtWjAtOVxcLzpdKn0vZ2kpO1xyXG4gICAgICAgIGlmICghbWF0Y2hlcylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIG1hdGNoZXMuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgICAgbGV0IHNwbGl0ID0gbS5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgICAgIGxldCBmdW5jID0gbSwgZm9ybWF0ID0gXCJcIjtcclxuICAgICAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIEVzY2x1ZG8gcHJpbW8gZSB1bHRpbW8gY2FyYXR0ZXJlIChsZSBncmFmZmUpXHJcbiAgICAgICAgICAgICAgICBmdW5jID0gc3BsaXRbMF0uc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gc3BsaXRbMV0uc3Vic3RyKDAsIHNwbGl0WzFdLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXQucHVzaCh7IGZ1bmM6IDwnbWluJyB8ICdtYXgnIHwgJ3N1bSc+ZnVuYywgZm9ybWF0OiBmb3JtYXQsIG1hdGNoOiBtIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aC5fdGhBZ2dyZWdhdGlvbnMgPSByZXQ7XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgbGEgZGVmaW5pemlvbmUgZGVpIGdydXBwaSBkYSBnZW5lcmFyZSBkYSB1bmEgbGlzdGEgZGkgb2dnZXR0aSwgc3VkZGl2aWRlIGdsaSBvZ2dldHRpIHBhc3NhdGkgaW4gZ3J1cHBpIGUgc290dG9ncnVwcGlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0dyb3VwW119IGdycHMgRGVmaW5pemlvbmUgZGVpIGdydXBwaVxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGN1cnJlbnRJbmRleCBJbmRpY2UgZGkgZWxhYm9yYXppb25lLiBBbCBsaXZlbGxvIDAgaG8gdHV0dGkgZ2xpIG9nZ2V0dGkgZSBkZXZvIGdlbmVyYXJlIGkgcHJpbWkgZ3J1cHBpLCBhIGxpdmVsbG8gMSBobyB0dXR0aSBpIGdydXBwaSBwcmluY2lwYWxpIGUgZGV2b1xyXG4gICAgICogZWxhYm9yYXJlIGkgc290dG9ncnVwcGksIGUgY29zw6wgdmlhIHJpY29yc2l2YW1lbnRlLi4uXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIHJhZ2dydXBwYXJlXHJcbiAgICAgKiBAcGFyYW0ge0dyb3VwT3JBZ2dyZWdhdGlvbltdfSBhZ2dyZWdhdGlvbnMgSW5mbyBkaSBhZ2dyZWdhemlvbmVcclxuICAgICAqIEBwYXJhbSB7YW55fSBwYXJlbnQgUmlmZXJpbWVudG8gYWwgZ3J1cHBvIHBhZHJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBzUmVjdXJzaXZlKGdycHM6IEdyb3VwW10sIGN1cnJlbnRJbmRleDogbnVtYmVyLCBpdGVtczogYW55W10sIGFnZ3JlZ2F0aW9uczogR3JvdXBPckFnZ3JlZ2F0aW9uW10sIHBhcmVudD86IGFueSk6IGFueVtdIHtcclxuICAgICAgICAvLyBTZSBsJ2luZGljZSDDqCAwIGRldm8gc2ljdXJhbWVudGUgbmFzY29uZGVyZSB0dXR0aSBnbGkgb2dnZXR0aS4gU29sbyBpIGdydXBwaSBzYXJhbm5vIHZpc3VhbGl6emF0aVxyXG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPT0gMClcclxuICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChpID0+IGkuX3Zpc2libGUgPSBmYWxzZSk7XHJcblxyXG4gICAgICAgIGxldCBncnAgPSBncnBzW2N1cnJlbnRJbmRleF07XHJcbiAgICAgICAgbGV0IHJldDogYW55W10gPSBbXTtcclxuICAgICAgICBsZXQgbGFzdCA9IGdycHMubGVuZ3RoID09IGN1cnJlbnRJbmRleCArIDE7XHJcbiAgICAgICAgbGV0IGdyb3VwcyA9IHRoaXMudXRpbGl0aWVzLmdyb3VwQnkoaXRlbXMsIGdycC5jb2x1bW4pO1xyXG4gICAgICAgIGZvciAobGV0IHByb3AgaW4gZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgIGxldCBpdG1zID0gZ3JvdXBzW3Byb3BdO1xyXG4gICAgICAgICAgICBsZXQgZ3AgPSBuZXcgR3JvdXAoZ3JwLmNvbHVtbiwgaXRtcy5sZW5ndGgsIHByb3ApO1xyXG4gICAgICAgICAgICBncC5hZ2dyZWdhdGlvbnMgPSB0aGlzLmdlbmVyYXRlQWdncmVnYXRpb25zKGl0bXMsIGFnZ3JlZ2F0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICBsZXQgYW55Z3AgPSAoPGFueT5ncCk7XHJcbiAgICAgICAgICAgIGFueWdwLl9ncm91cCA9IHRydWU7XHJcbiAgICAgICAgICAgIGFueWdwLl9leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXBhcmVudCkge1xyXG4gICAgICAgICAgICAgICAgYW55Z3AuX3RoaXNSb3V0ZSA9IFt7IGNvbHVtbjogZ3AuY29sdW1uLCB2YWx1ZTogZ3AudmFsdWUgfV07XHJcbiAgICAgICAgICAgICAgICBhbnlncC5fdGhpc0tleSA9IGdwLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYW55Z3AuX2dyb3VwbGV2ZWwgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYW55Z3AuX3BhcmVudCA9IHBhcmVudC5fdGhpc0tleTtcclxuICAgICAgICAgICAgICAgIGFueWdwLl9wYXJlbnRSb3V0ZSA9IHBhcmVudC5fdGhpc1JvdXRlO1xyXG4gICAgICAgICAgICAgICAgYW55Z3AuX3RoaXNSb3V0ZSA9IFsuLi5wYXJlbnQuX3RoaXNSb3V0ZSwgeyBjb2x1bW46IGdwLmNvbHVtbiwgdmFsdWU6IGdwLnZhbHVlIH1dO1xyXG4gICAgICAgICAgICAgICAgYW55Z3AuX3RoaXNLZXkgPSBwYXJlbnQuX3RoaXNLZXkgKyBncC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGFueWdwLl9ncm91cGxldmVsID0gcGFyZW50Ll9ncm91cGxldmVsICsgMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gUHVzaG8gaWwgZ3J1cHBvLCB0dXR0aSBpIGdydXBwaSBkZWwgbGl2ZWxsbyBzb3R0bywgbyBnbGkgaXRlbSBzZSBpbyBzb25vIGwndWx0aW1vIGdydXBwby5cclxuICAgICAgICAgICAgLy8gTGEgdmlzaWJpbGl0w6Agw6ggc29sbyBwZXIgaWwgZ3J1cHBvIGEgbGl2ZWxsbyAwLCB0dXR0aSBnbGkgYWx0cmkgZ3J1cHBpIHNhcmFubm8gbW9zdHJhdGkgbyBuYXNjb3N0aSBkaSBjb25zZWd1ZW56YVxyXG4gICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID09IDApXHJcbiAgICAgICAgICAgICAgICBhbnlncC5fdmlzaWJsZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5jYWxjdWxhdGVIYXNoKFthbnlncF0pO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWxpdGllcy5jYWNoZUFnZ3JlZ2F0aW9ucyhhbnlncCk7XHJcblxyXG4gICAgICAgICAgICAvLyBBZ2dpdW5nbyBpbCBncnVwcG8gcGFkcmVcclxuICAgICAgICAgICAgcmV0LnB1c2goYW55Z3ApO1xyXG4gICAgICAgICAgICB0aGlzLnJnR3JvdXBDYWNoZS5zZXQoYW55Z3AuX3RoaXNLZXksIGFueWdwKTtcclxuICAgICAgICAgICAgaWYgKCFsYXN0KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9EYWwgZ3J1cHBvIHBhZHJlLCBzZSBub24gw6ggbCd1bHRpbW8gZ3J1cHBvIGRlbGxhIGNhdGVuYSwgY2FsY29sbyByaWNvcnNpdmFtZW50ZSB0dXR0YSBsYSBjYXRlbmEgc290dG9cclxuICAgICAgICAgICAgICAgIGxldCBzdWJHcm91cHNBbmRJdGVtcyA9IHRoaXMuZ2V0R3JvdXBzUmVjdXJzaXZlKGdycHMsIGN1cnJlbnRJbmRleCArIDEsIGl0bXMsIGFnZ3JlZ2F0aW9ucywgYW55Z3ApO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkZ3JvdXBzID0gc3ViR3JvdXBzQW5kSXRlbXMuZmlsdGVyKHQgPT4gdC5fZ3JvdXAgJiYgdC5fcGFyZW50ID09IGFueWdwLl90aGlzS2V5KTtcclxuICAgICAgICAgICAgICAgIGFueWdwLl9ncm91cHNjb3VudCA9IGNoaWxkZ3JvdXBzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBBZ2dpdW5nbyBsYSBjYXRlbmEgZGVsIGdydXBwbyBzb3R0bywgYWdnaXVuZ2VuZG8gYWxsYSBjYWNoZSBzb2xvIGkgZ3J1cHBpIHBhZHJlXHJcbiAgICAgICAgICAgICAgICByZXQucHVzaCguLi5zdWJHcm91cHNBbmRJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJnQ2hpbGRHcm91cHNDYWNoZS5zZXQoYW55Z3AuX3RoaXNLZXksIGNoaWxkZ3JvdXBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIEFsIGdydXBwbyBwYWRyZSwgc2Ugw6ggbCd1bHRpbW8gYXNzZWdubyB0dXR0ZSBsZSBmb2dsaWUgYXNzZWduYW5kb2dsaSBhbmNoZSBsYSBjaGlhdmUgZGVsIGdydXBwb1xyXG4gICAgICAgICAgICAgICAgaXRtcy5mb3JFYWNoKGkgPT4gaS5fdGhpc0tleSA9IGFueWdwLl90aGlzS2V5KTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXQucHVzaCguLi5pdG1zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmdJdGVtQ2FjaGUuc2V0KGFueWdwLl90aGlzS2V5LCBpdG1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0YSB1bmEgbGlzdGEgZGkgb2dnZXR0aSBnZW5lcmEgbGUgYWdncmVnYXppb25pIHNwZWNpZmljYXRlLiBTaSBjb25zaWRlcmEgZGkgYXZlcmUgdHV0dGkgZ2xpIG9nZ2V0dGlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRpIGN1aSBjYWxjb2xhcmUgbGUgYWdncmVnYXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0dyb3VwT3JBZ2dyZWdhdGlvbltdfSBhZ2dyZWdhdGlvbnMgQWdnZXJnYXppb25pIGRhIGdlbmVyYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVBZ2dyZWdhdGlvbnMoaXRlbXM6IGFueVtdLCBhZ2dyZWdhdGlvbnM6IEdyb3VwT3JBZ2dyZWdhdGlvbltdKTogR3JvdXBBZ2dyZWdhdGlvbltdIHtcclxuICAgICAgICBsZXQgcmV0czogR3JvdXBBZ2dyZWdhdGlvbltdID0gW107XHJcbiAgICAgICAgbGV0IGFnZ3JlZ2F0aW9uVmFsdWUgPSBcIlwiLCBmZUZpZWxkID0gbnVsbCwgc3RyaW5nQWdnID0gbnVsbCwgZGF0ZUFnZyA9IG51bGwsIG51bWJlckFnZyA9IG51bGw7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWdncmVnYXRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBhZ2cgPSBhZ2dyZWdhdGlvbnNbaV07XHJcbiAgICAgICAgICAgIGZlRmllbGQgPSBhZ2cuY29sdW1uO1xyXG4gICAgICAgICAgICBpZiAoIWZlRmllbGQpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoYWdnLmRhdGF0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOiBzdHJpbmdBZ2cgPSBpdGVtcy5tYXAoaSA9PiBpW2ZlRmllbGRdLnRvU3RyaW5nKCkpOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiBkYXRlQWdnID0gaXRlbXMubWFwKGkgPT4gbmV3IERhdGUoaVtmZUZpZWxkXSkuZ2V0VGltZSgpKTsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOiBudW1iZXJBZ2cgPSBpdGVtcy5tYXAoaSA9PiBwYXJzZUZsb2F0KGlbZmVGaWVsZF0pKTsgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoYWdnLmFnZ3JlZ2F0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdtYXgnOlxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWdnLmRhdGF0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6IGFnZ3JlZ2F0aW9uVmFsdWUgPSBzdHJpbmdBZ2cuc29ydCgpLnJldmVyc2UoKVswXTsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOiBhZ2dyZWdhdGlvblZhbHVlID0gbmV3IERhdGUoTWF0aC5tYXgoLi4uZGF0ZUFnZykpLnRvU3RyaW5nKCk7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOiBhZ2dyZWdhdGlvblZhbHVlID0gTWF0aC5tYXgoLi4ubnVtYmVyQWdnKS50b1N0cmluZygpOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlICdtaW4nOlxyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWdnLmRhdGF0eXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6IGFnZ3JlZ2F0aW9uVmFsdWUgPSBzdHJpbmdBZ2cuc29ydCgpWzBdOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZSc6IGFnZ3JlZ2F0aW9uVmFsdWUgPSBuZXcgRGF0ZShNYXRoLm1pbiguLi5kYXRlQWdnKSkudG9TdHJpbmcoKTsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6IGFnZ3JlZ2F0aW9uVmFsdWUgPSBNYXRoLm1pbiguLi5udW1iZXJBZ2cpLnRvU3RyaW5nKCk7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgJ3N1bSc6XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhZ2cuZGF0YXR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzogYWdncmVnYXRpb25WYWx1ZSA9IHN0cmluZ0FnZy5qb2luKFwiLCBcIik7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzogYWdncmVnYXRpb25WYWx1ZSA9IFwiXCI7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOiBhZ2dyZWdhdGlvblZhbHVlID0gbnVtYmVyQWdnLnJlZHVjZSgocHJlLCBjdXJyKSA9PiBwcmUgKyBjdXJyLCAwKS50b1N0cmluZygpOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0cy5wdXNoKG5ldyBHcm91cEFnZ3JlZ2F0aW9uKGFnZy5jb2x1bW4sIGFnZy5hZ2dyZWdhdGlvbiwgYWdncmVnYXRpb25WYWx1ZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJldHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIE90dGllbmUgdW4gZWxlbWVudG8gZGkgc2VwYXJhemlvbmUgZnJhIEdydXBwaSBjaGUgc2VydmUgcGVyIHBhZ2luYXJlIGxlIHJpY2VyY2hlIGFsbCdpbnRlcm5vIGRpIG9nbmkgc2luZ29sbyBncnVwcG9cclxuICAgICpcclxuICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBWaWV3IHV0aWxpenphdGEgcGVyIGxhIHJpY2VyY2EuIE1lIG5lIHNhbHZvIGkgcGFyYW1ldHJpIG5lbCBzZXBhcmF0b3JlIGF0dHVhbGUgZGF0byBjaGUgbmUgaG8gYmlzb2dubyBwZXIgY2FyaWNhcmUgYWx0cmkgZWxlbWVudGlcclxuICAgICogZmFjZW50aSByaWZlcmltZW50byBhbGxvIHN0ZXNzbyBjb250ZXN0b1xyXG4gICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50IFBhcmVudCBwYXRoIGNoZSByYXBwcmVzZW50YSBhIHF1YWxlIGdydXBwbyDDqCBhZmZpYmJpYXRvIHF1ZXN0byBzZXBhcmF0b3JlXHJcbiAgICAqIEBwYXJhbSB7R3JvdXBSb3V0ZUZyYWdtZW50W119IHJvdXRlIFJvdXRlIHBhdGggY2hlIHJhcHByZXNlbnRhIGEgcXVhbGUgZ3J1cHBvIMOoIGFmZmliYmlhdG8gcXVlc3RvIHNlcGFyYXRvcmVcclxuICAgICogQHBhcmFtIHtudW1iZXJ9IGxldmVsIExpdmVsbG8gZGVsIGdydXBwbyBkaSBjdWkgcXVlc3RvIGVsZW1lbnRvIMOoIHNlcGFyYXRvcmUsIHZpZW5lIHVzYXRvIHBlciBhcHBsaWNhcmUgbGEgY2xhc3NlIFwiZXN0LWx2bC17e2xldmVsfX1cIlxyXG4gICAgKlxyXG4gICAgKiBAcmV0dXJucyB7YW55fSBFbGVtZW50byBkaSBzZXBhcmF6aW9uZSBjb250ZW5lbnRlIHR1dHRpIGkgYmluZCBwZXIgcHJlc2VudGFyZSB1bmEgcGFnaW5hemlvbmUgc290dG8gcXVlc3RvIGdydXBwbyBsYXRvIGludGVyZmFjY2lhXHJcbiAgICAqL1xyXG4gICAgcHVibGljIGdldEdyb3VwU2VwYXJhdG9yKHZpZXc6IEFwcFNlYXJjaDxhbnk+LCBwYXJlbnQ6IHN0cmluZywgcm91dGU6IEdyb3VwUm91dGVGcmFnbWVudFtdLCBsZXZlbDogbnVtYmVyLCBzZWFyY2hlczogJ2dyb3VwcycgfCAnaXRlbXMnKTogR3JvdXBQYWdlciB7XHJcbiAgICAgICAgbGV0IGl0ZW0gPSBuZXcgR3JvdXBQYWdlcihsZXZlbCwgcm91dGUsIHBhcmVudCwgT2JqZWN0LmFzc2lnbih7fSwgdmlldyksIHNlYXJjaGVzKTtcclxuICAgICAgICBpdGVtLmJ1dHRvbnMgPSB0aGlzLnV0aWxpdGllcy5nZXRQYWdlc0FycmF5KDYsIHZpZXcucGFnZSwgdmlldy5wYWdlcyk7XHJcbiAgICAgICAgdGhpcy51dGlsaXRpZXMuY2FsY3VsYXRlSGFzaChbaXRlbV0pO1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgdW5hIGNvbG9ubmEgZWZmZXR0dWEgbGEgcmllbWlzc2lvbmUgZGkgdHV0dGUgbGUgcmljZXJjaGUgcmVsYXRpdmUuXHJcbiAgICAgKlxyXG4gICAgICogRXMuIEhvIDIgY2FtcGkgZGkgZ3J1cHBvIGUgaG8gZXNwYW5zbyBmaW5vIGEgdmVkZXJlIGkgdmFsb3JpIGZpbm8gYWQgdW4gbGl2ZWxsbyBxdWFsc2lhc2kuXHJcbiAgICAgKiBDbGljY28gbCdvcmRpbmFtZW50byBzdWwgc2Vjb25kbyBncnVwcG8uXHJcbiAgICAgKiBUdXR0ZSBsZSByaWNlcmNoZSByZWxhdGl2ZSBhaSBwcmltaSBncnVwcGkgZGV2b25vIGVzc2VyZSByaWVzZWd1aXRlLiBRdWFuZG8gaSByaXN1bHRhdGkgYXJyaXZlcmFubm8gY2kgcGVuc2Vyw6AgaWwgbWV0b2RvICoqYmluZERpc3BsYXlUb0xvYWRlZEl0ZW1zT3JHcm91cHMqKlxyXG4gICAgICogYSB0YWdsaWFyZSB2aWEgZ2xpIG9nZ2V0dGkgbm9uIHBpw7kgdmlzdWFsaXp6YXRpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbiBDb2xvbm5hIHN1IGN1aSBzaSDDqCBlZmZldHR1YXRhIHVuJ29wZXJhemlvbmUgZGkgb3JkaW5hbWVudG9cclxuICAgICAqIEBwYXJhbSB7QXBwT3JkZXJpbmdbXX0gb3JkZXJpbmdzIERpcmV0dGl2ZSBkaSBvcmRpbmFtZW50byBkYSBhcHBsaWNhcmUgYWxsZSB2YXJpZSBzb3R0b3JpY2VyY2hlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbWl0Um93R3JvdXBpbmdTZWFyY2hlcyhjb2x1bW46IHN0cmluZywgb3JkZXJpbmdzOiBBcHBPcmRlcmluZ1tdKSB7XHJcbiAgICAgICAgLy8gUGVyIHR1dHRlIGxlIHJpY2VyY2hlIGludGVybWVkaWUgY2hlIGRldm8gcml2YWx1dGFyZSBsZSByZS1lbWl0dG8gaW4gbW9kbyBkYSBhZ2dpb3JuYXJnbGkgaSBkYXRpXHJcbiAgICAgICAgdmFyIG1lYW5pbmdmdWxBcHBTZWFyY2hlcyA9IHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZS5maWx0ZXIodCA9PiB0Lmdyb3VwX2NvbHVtbiA9PSBjb2x1bW4pLm1hcCh0ID0+IHQudmlldyk7XHJcblxyXG4gICAgICAgIC8vIFNlIG5vbiBuZSB0cm92byBzaWduaWZpY2EgY2hlIGhvIGZhdHRvIGwnb3JkaW5hbWVudG8gbyBzdWdsaSBpdGVtLCBvIHN1IGNvbG9ubmUgcmVsYXRpdmUgYSB1biBzb3R0b2dydXBwbyBub24gY2FyaWNhdG9cclxuICAgICAgICBpZiAoIW1lYW5pbmdmdWxBcHBTZWFyY2hlcyB8fCBtZWFuaW5nZnVsQXBwU2VhcmNoZXMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIG1lYW5pbmdmdWxBcHBTZWFyY2hlcyA9IHRoaXMuZXN0Lmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZS5maWx0ZXIodCA9PiAhdC5ncm91cF9jb2x1bW4pLm1hcCh0ID0+IHQudmlldyk7XHJcblxyXG4gICAgICAgIC8vIFNlIG5vbiBuZSB0cm92byBxdWkgc2lnbmlmaWNhIGNoZSBzdG8gb3JkaW5hbmRvIHN1IGNvbG9ubmUgcmVsYXRpdmUgYSB1biBzb3R0b2dydXBwbyBub24gY2FyaWNhdG9cclxuICAgICAgICBpZiAoIW1lYW5pbmdmdWxBcHBTZWFyY2hlcyB8fCBtZWFuaW5nZnVsQXBwU2VhcmNoZXMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbWVhbmluZ2Z1bEFwcFNlYXJjaGVzLmZvckVhY2goYXMgPT4ge1xyXG4gICAgICAgICAgICAvLyBPdnZpYW1lbnRlIGdsaSBvcmlkbmFtZW50aSBkZXZvbm8gZXNzZXJlIHF1ZWxsaSBhcHBlbmEgZ2VuZXJhdGlcclxuICAgICAgICAgICAgYXMub3JkZXJzID0gb3JkZXJpbmdzO1xyXG4gICAgICAgICAgICBhcy5zYXZlZHN0YXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UsIGFzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBjaGUgY2FsY29sYSBpbCBjb250ZW51dG8gZGkgdW5hIGNlbGxhIHJlbGF0aXZhIGEgdW4gZ3J1cHBvIHJpZ2EsIHRlbmVuZG8gY29udG8gZGVsIGZvcm1hdG8gZGVsbGUgZXZlbnR1YWxpIGFnZ3JlZ2F6aW9uaVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7R3JvdXB9IGdycCBHcnVwcG8gZGkgY3VpIG1vc3RyYXJlIGxlIGNlbGxlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY2VsbCBDZWxsYSBhdHR1YWxlIGRpIGN1aSBjYWxjb2xhcmUgaWwgdGVzdG9cclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZX0gaGVhZGVyIEhlYWRlciByZWxhdGl2byBhbGxhIGNlbGxhIGF0dHVhbGUsIHV0aWxpenphdGEgcGVyIGlkZW50aWZpY2FyZSBsZSBpbmZvcm1hemlvbmkgZGkgYWdncmVnYXppb25lXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGVzdG8gZmluYWxlIGNhbGNvbGF0byBwZXIgbGEgKipjZWxsKiogY29ycmVudGUsIGluIGJhc2UgYWxsZSBhZ2dyZWdhemlvbmkgZGkgKipoZWFkZXIqKlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0R3JvdXBDZWxsRGlzcGxheShncnA6IEdyb3VwLCBjZWxsOiBzdHJpbmcsIGhlYWRlcjogRXNUaERpcmVjdGl2ZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCg8YW55PmdycCkuX3NlcClcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgbGV0IGRpc3BsYXkgPSBoZWFkZXIudGhBZ2dyZWdhdGlvbjtcclxuICAgICAgICBpZiAoZ3JwLmNvbHVtbiA9PSBjZWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBncm91cHNQYXJ0ID0gKDxhbnk+Z3JwKS5fZ3JvdXBzY291bnQgPyBcIiAtIFwiICsgKDxhbnk+Z3JwKS5fZ3JvdXBzY291bnQgKyBcIiBcIiArIHRoaXMuZXN0LmxjLmxvYyhcIkdyb3Vwc1wiKSA6IFwiXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBncnAudmFsdWUgKyBcIiAoXCIgKyBncnAuY291bnQgKyBncm91cHNQYXJ0ICsgXCIpXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgbGV0IGFnZyA9ICg8TWFwPHN0cmluZywgTWFwPHN0cmluZywgc3RyaW5nPj4+KDxhbnk+Z3JwKS5fYWdncmVnYXRpb25zQ2FjaGUpLmdldChjZWxsKTtcclxuICAgICAgICAgICAgaWYgKCFhZ2cpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RXNUaERpcmVjdGl2ZUxpc3RPZkFnZ3JlZ2F0aW9ucyhoZWFkZXIpLmZvckVhY2goKGl0bTogVGhBZ2dyZWdhdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkucmVwbGFjZShpdG0ubWF0Y2gsIHRoaXMuZm9ybWF0QWdncmVnYXRpb25WYWx1ZShhZ2cuZ2V0KGl0bS5mdW5jKSwgaXRtLmZvcm1hdCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBkaXNwbGF5O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bnppb25lIGNoZSBkYXRvIHVuIHZhbG9yZSBsbyBmb3JtYXR0YSBpbiBiYXNlIGFsIHRpcG9cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUgVmFsb3JlIGNoZSBnZW5lcmFsZW1udGUgcHXDsiBlc3NlcmUgdW5hIGRhdGEgbyB1biBudW1lcm9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tYXQgRm9ybWF0byBzdSBjdWkgZm9ybWF0dGFyZSBpbCB2YWxvcmUuIFB1w7IgZXNzZXJlIGFkIGVzZW1waW8gXCJzbWFsbFwiLCBcImxvbmdcIiBcInZlcnlsb25nXCIgcGVyIGxlIGRhdGUgbyBGezAtOX0gcGVyIGkgbnVtZXJpIGRlY2ltYWxpXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVmFsb3JlIGRlbGwnYWdncmVnYXppb25lIGZvcm1hdHRhdG8gY29tZSBzaSBkZXZlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZm9ybWF0QWdncmVnYXRpb25WYWx1ZSh2YWx1ZTogc3RyaW5nLCBmb3JtYXQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghZm9ybWF0KVxyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcblxyXG4gICAgICAgIGxldCBpc051bWJlciA9ICFOdW1iZXIuaXNOYU4odmFsdWUpICYmICghZm9ybWF0IHx8IGZvcm1hdC5zdGFydHNXaXRoKFwiRlwiKSk7XHJcblxyXG4gICAgICAgIGlmIChpc051bWJlciAmJiBmb3JtYXQuc3RhcnRzV2l0aChcIkZcIikgJiYgIU51bWJlci5pc05hTihmb3JtYXQuc3Vic3RyKDEpKSlcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpLnRvRml4ZWQocGFyc2VJbnQoZm9ybWF0LnN1YnN0cigxKSkpO1xyXG5cclxuICAgICAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gQWxjdW5lIHZlcnNpb25lIGRpIGV4dGVuc2lvbnMgcmlzY2hpYW5vIGRpIGNyYXNoYXJlIGNvbiBjb3NlIG5vbiBkYXRlLi4uIMOoIHN0YXRvIHJpc29sdG8gZG9wbyBxdWluZGkgcXVlc3RvIHRyeSAtIGNhdGNoIGluIHJlYWx0w6BcclxuICAgICAgICAvLyB0b3JuYSB1dGlsZSBzb2xvIGNvbiB2ZXJzaW9uaSB2ZWNjaGllL2RlcHJlY2F0ZSBkZWxsYSBsaWJyZXJpYSBAZXNmYWVuemEvZXh0ZW5zaW9uc1xyXG4gICAgICAgIHRyeSB7IGRhdGUgPSB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKTsgfSBjYXRjaCB7IH1cclxuXHJcbiAgICAgICAgaWYgKGRhdGUpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVFeHRzLmdldEZvcm1hdHRlZChkYXRlLCBmb3JtYXQgPT0gJ3NtYWxsJywgZm9ybWF0ID09ICd2ZXJ5bG9uZycpO1xyXG5cclxuICAgICAgICAvLyBRdWkgY2kgZmluaXNjbyBzaWEgcGVyIGlucHV0IGNoZSBub24gc29ubyBuw6kgZGF0ZSBuw6kgbnVtZXJpLCBzaWEgcGVyIGZvcm1hdGkgbm9uIHJpY29ub3NjaXV0aVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxufSJdfQ==
@@ -16,6 +16,7 @@ export class GroupPager {
16
16
  this.searches = searches;
17
17
  this._sep = true;
18
18
  this.buttons = [];
19
+ this._thisKey = _parent + "_sep";
19
20
  }
20
21
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JvdXBQYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvZG9tYWluL2ludGVybmFscy9jbGFzc2VzL0dyb3VwUGFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsa0pBQWtKO0FBQ2xKLE1BQU0sT0FBTyxVQUFVO0lBRW5COzs7Ozs7O09BT0c7SUFDSCxZQUNXLFdBQW1CLEVBQ25CLFVBQWdDLEVBQ2hDLE9BQWUsRUFDZixJQUFvQixFQUNwQixRQUE0QjtRQUo1QixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNoQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFFbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztDQU1KIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwU2VhcmNoLCBHcm91cFJvdXRlRnJhZ21lbnQgfSBmcm9tIFwiLi4vLi5cIjtcclxuXHJcbi8qKiBDbGFzc2UgY2hlIHJhcHByZXNlbnRhIHVuIHNlcGFyYXRvcmUgZGEgaW5zZXJpcmUgZnJhIGdsaSBvZ2dldHRpIGRlbGwnZXMtdGFibGUgcGVyIGxlIG9wZXJhemlvbmkgZGkgcGFnaW5hemlvbmUgZGVpIHJhZ2dydXBwYW1lbnRpIHBlciByaWdhICovXHJcbmV4cG9ydCBjbGFzcyBHcm91cFBhZ2VyIHtcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb3N0cnV0dG9yZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZ3JvdXBMZXZlbCBMaXZlbGxvIGRlbCBncnVwcG8gYSBjdWkgcXVlc3RvIHNlcGFyYXRvcmUgZmEgcmlmZXJpbWVudG9cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRLZXkgQ2hpYXZlIGRlbCBncnVwcG8gcGFyZW50IHNlIGVzaXN0ZVxyXG4gICAgICogQHBhcmFtIHtBcHBTZWFyY2g8YW55Pn0gdmlldyBWaXN0YSBkaSByaWNlcmNhIGNvbGxlZ2F0YSBhIHF1ZXN0byBlbGVtZW50b1xyXG4gICAgICogQHBhcmFtIHsnZ3JvdXBzJyB8ICdpdGVtcyd9IHNlYXJjaGVzIEluZGljYSBjaGUgY29zYSBjZXJjYSBxdWVzdG8gc2VwYXJhdG9yZSwgc2Ugc290dG9ncnVwcGkgbyBvZ2dldHRpXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBfZ3JvdXBsZXZlbDogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBfdGhpc1JvdXRlOiBHcm91cFJvdXRlRnJhZ21lbnRbXSxcclxuICAgICAgICBwdWJsaWMgX3BhcmVudDogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyB2aWV3OiBBcHBTZWFyY2g8YW55PixcclxuICAgICAgICBwdWJsaWMgc2VhcmNoZXM6ICdncm91cHMnIHwgJ2l0ZW1zJykge1xyXG5cclxuICAgICAgICB0aGlzLl9zZXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYnV0dG9ucyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIMOoIHVuIHNlcGFyYXRvcmUsIHNlbXByZSBpbXBvc3RhdG8gYSAqKnRydWUqKiAqL1xyXG4gICAgcHVibGljIF9zZXA6IGJvb2xlYW47XHJcbiAgICAvKiogQXJyYXkgZGVpIHB1bHNhbnRpIGRhIGNvbGxlZ2FyZSBsYXRvIGludGVyZmFjY2lhIHBlciBsZSBwYWdpbmF6aW9uZSAqL1xyXG4gICAgcHVibGljIGJ1dHRvbnM6IGFueVtdO1xyXG59Il19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JvdXBQYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvZG9tYWluL2ludGVybmFscy9jbGFzc2VzL0dyb3VwUGFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsa0pBQWtKO0FBQ2xKLE1BQU0sT0FBTyxVQUFVO0lBRW5COzs7Ozs7O09BT0c7SUFDSCxZQUNXLFdBQW1CLEVBQ25CLFVBQWdDLEVBQ2hDLE9BQWUsRUFDZixJQUFvQixFQUNwQixRQUE0QjtRQUo1QixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFzQjtRQUNoQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBb0I7UUFFbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3JDLENBQUM7Q0FRSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcFNlYXJjaCwgR3JvdXBSb3V0ZUZyYWdtZW50IH0gZnJvbSBcIi4uLy4uXCI7XHJcblxyXG4vKiogQ2xhc3NlIGNoZSByYXBwcmVzZW50YSB1biBzZXBhcmF0b3JlIGRhIGluc2VyaXJlIGZyYSBnbGkgb2dnZXR0aSBkZWxsJ2VzLXRhYmxlIHBlciBsZSBvcGVyYXppb25pIGRpIHBhZ2luYXppb25lIGRlaSByYWdncnVwcGFtZW50aSBwZXIgcmlnYSAqL1xyXG5leHBvcnQgY2xhc3MgR3JvdXBQYWdlciB7XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQ29zdHJ1dHRvcmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGdyb3VwTGV2ZWwgTGl2ZWxsbyBkZWwgZ3J1cHBvIGEgY3VpIHF1ZXN0byBzZXBhcmF0b3JlIGZhIHJpZmVyaW1lbnRvXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50S2V5IENoaWF2ZSBkZWwgZ3J1cHBvIHBhcmVudCBzZSBlc2lzdGVcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXcgVmlzdGEgZGkgcmljZXJjYSBjb2xsZWdhdGEgYSBxdWVzdG8gZWxlbWVudG9cclxuICAgICAqIEBwYXJhbSB7J2dyb3VwcycgfCAnaXRlbXMnfSBzZWFyY2hlcyBJbmRpY2EgY2hlIGNvc2EgY2VyY2EgcXVlc3RvIHNlcGFyYXRvcmUsIHNlIHNvdHRvZ3J1cHBpIG8gb2dnZXR0aVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgX2dyb3VwbGV2ZWw6IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgX3RoaXNSb3V0ZTogR3JvdXBSb3V0ZUZyYWdtZW50W10sXHJcbiAgICAgICAgcHVibGljIF9wYXJlbnQ6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgdmlldzogQXBwU2VhcmNoPGFueT4sXHJcbiAgICAgICAgcHVibGljIHNlYXJjaGVzOiAnZ3JvdXBzJyB8ICdpdGVtcycpIHtcclxuXHJcbiAgICAgICAgdGhpcy5fc2VwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmJ1dHRvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLl90aGlzS2V5ID0gX3BhcmVudCArIFwiX3NlcFwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbmRpY2EgY2hlIMOoIHVuIHNlcGFyYXRvcmUsIHNlbXByZSBpbXBvc3RhdG8gYSAqKnRydWUqKiAqL1xyXG4gICAgcHVibGljIF9zZXA6IGJvb2xlYW47XHJcbiAgICAvKiogQXJyYXkgZGVpIHB1bHNhbnRpIGRhIGNvbGxlZ2FyZSBsYXRvIGludGVyZmFjY2lhIHBlciBsZSBwYWdpbmF6aW9uZSAqL1xyXG4gICAgcHVibGljIGJ1dHRvbnM6IGFueVtdO1xyXG4gICAgLyoqIENoaWF2ZSBkZWwgc2VwYXJhdG9yZSwgw6ggc2VtcHJlICoqcGFyZW50KiogKyBcIl9zZXBcIiAqL1xyXG4gICAgcHVibGljIF90aGlzS2V5OiBzdHJpbmc7XHJcbn0iXX0=