@coolon/angular-ui-powerups 16.1.0-aplpha.48 → 16.1.0-aplpha.49

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.
@@ -79,6 +79,7 @@ export class PlaceComponent extends LoadableComponent {
79
79
  */
80
80
  installAndInitialiseBinding(initialVisit, parameterDef) {
81
81
  const model = this[parameterDef.propertyName];
82
+ assert.notNil(model);
82
83
  DebugContext.tag(model, `${this.placeDefinition.component.name}.${parameterDef.propertyName}`);
83
84
  const binding = this.registerDisposable(new Binding(this.visitModel, model, {
84
85
  toRight(visit) {
@@ -201,4 +202,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
201
202
  // initialValue: 'evaluationUnlessNil' | 'evaluate'
202
203
  // }
203
204
  })(PlaceComponent || (PlaceComponent = {}));
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2UtY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFFUCxZQUFZLEVBQ1osR0FBRyxFQUNILEtBQUssRUFFTCxJQUFJLEVBQ0osU0FBUyxFQUNULGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDaEUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM3QixPQUFPLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0FBTTNDLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRywwQkFBMEIsQ0FBQztBQUNuRSxxQkFBcUI7QUFDckIsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFHekUsd0NBQXdDO0FBQ3hDLHVLQUF1SztBQUN2SyxNQUFNO0FBQ04sRUFBRTtBQUNGLHdGQUF3RjtBQUN4RixtQkFBbUI7QUFDbkIsTUFBTTtBQUNOLElBQUk7QUFHSixNQUFNLE9B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QUFDO1NBQzdFO0lBQ0gsQ0FBQztJQVZlLDRCQUFhLGdCQVU1QixDQUFBO0lBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsS0FBb0MsRUFBRSxVQUEyQjtRQUNoRyxPQUFPLENBQUMsY0FBYyxDQUFDLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRmUsK0JBQWdCLG1CQUUvQixDQUFBO0lBRUQsNEhBQTRIO0lBRTVILHNDQUFzQztJQUN0QyxxREFBcUQ7SUFDckQsSUFBSTtBQUdOLENBQUMsRUFqQ2dCLGNBQWMsS0FBZCxjQUFjLFFBaUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGlyZWN0aXZlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgYXNzZXJ0LFxuICBCaW5kaW5nLFxuICBDb25zdHJ1Y3RhYmxlLFxuICBEZWJ1Z0NvbnRleHQsXG4gIERzbCxcbiAgR3VhcmQsXG4gIElNdXRhYmxlSGFzVmFsdWUsXG4gIGxhbmcsXG4gIExpc3RNb2RlbCxcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxcbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHtLbGFzc30gZnJvbSAnQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllcyc7XG5pbXBvcnQge01lbW9pemV9IGZyb20gJ0B0eXBlc2NyaXB0LXBsdXMvZmFzdC1tZW1vaXplLWRlY29yYXRvcic7XG5pbXBvcnQge2lzTmlsfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJztcbmltcG9ydCB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XG5pbXBvcnQge0xvYWRhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi4vY29tcG9uZW50cy9sb2FkYWJsZS1jb21wb25lbnRcIjtcbmltcG9ydCB7SW50ZXJhY3Rpb25Db250ZXh0fSBmcm9tICcuLi9pbnRlcmFjdGlvbi9pbnRlcmFjdGlvbi1jb250ZXh0JztcbmltcG9ydCB7UGxhY2VEZWZpbml0aW9ufSBmcm9tICcuL3BsYWNlLWRlZmluaXRpb24nO1xuaW1wb3J0IHtQbGFjZVJvdXRlcn0gZnJvbSBcIi4vcGxhY2Utcm91dGVyXCI7XG5pbXBvcnQge1BhcmFtZXRlckRlZmluaXRpb259IGZyb20gJy4vcm91dGUvcGFyYW1ldGVyLWRlZmluaXRpb24nO1xuaW1wb3J0IHtVcmxTbmFwc2hvdH0gZnJvbSAnLi91cmwtc25hcHNob3QnO1xuaW1wb3J0IHtWaXNpdFNlZ21lbnR9IGZyb20gJy4vdmlzaXQtc2VnbWVudCc7XG5cblxuLy8gUkFLRTogbWFraW5nIHRoaXMgU3ltYm9sKC4uLikgYnJva2UgdGhpbmdzLlxuZXhwb3J0IGNvbnN0IERFRklOSVRJT05fTUVUQV9EQVRBX0tFWSA9ICdQTEFDRV9ERUZJTklUSU9OX09QVElPTlMnO1xuLy8gdGhpcyBvbmUgc2VlbXMgb2suXG5leHBvcnQgY29uc3QgUk9VVEVfUEFSQU1FVEVSX0xJU1RfS0VZID0gU3ltYm9sKCdwbGFjZTpyb3V0ZTpwYXJhbWV0ZXJzJyk7XG5cblxuLy8gY2xhc3MgUGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3I8VD4ge1xuLy8gICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJEZWY6IFBhcmFtZXRlckRlZmluaXRpb248VD4sIG1vZGVsOiBWYWx1ZU1vZGVsPFQ+LCBjYWxsYmFjazogUGxhY2VDb21wb25lbnQuSW50ZXJjZXB0Q2FsbGJhY2s8VD4sIG9wdGlvbnM6IFBsYWNlQ29tcG9uZW50LkludGVyY2VwdE9wdGlvbnMpIHtcbi8vICAgfVxuLy9cbi8vICAgYXN5bmMgY2FuUHJvY2VlZChuZXh0U3RhdGU6IFZpc2l0U2VnbWVudCwgaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQpIHtcbi8vICAgICByZXR1cm4gdHJ1ZTtcbi8vICAgfVxuLy8gfVxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBQbGFjZUNvbXBvbmVudCBleHRlbmRzIExvYWRhYmxlQ29tcG9uZW50IHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wbGFjZVJlYWR5Q2FsbGJhY2tzOiAoKCk9PnZvaWQpW10gPSBbXTtcbiAgcHJpdmF0ZSB2aXNpdE1vZGVsID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPFZpc2l0U2VnbWVudD4oKTtcbiAgcHJpdmF0ZSBfaW5WaXNpdFVwZGF0ZSA9IG5ldyBHdWFyZCgpO1xuICBwcml2YXRlIF9hY3RpdmUgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGludGVyYWN0aW9uQ29udGV4dD86IEludGVyYWN0aW9uQ29udGV4dDtcbiAgcmVhZG9ubHkgY2hpbGRQbGFjZXMkOiBMaXN0TW9kZWw8Q29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4+O1xuICAvLyBwcml2YXRlIHJlYWRvbmx5IF9wYXJhbWV0ZXJDaGFuZ2VJbnRlcmNlcHRvcnM6IFBhcmFtZXRlckNoYW5nZUludGVyY2VwdG9yPGFueT5bXSA9IFtdO1xuXG5cbiAgY2FuRGVhY3RpdmF0ZT8oaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQpOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcblxuXG4gIHByb3RlY3RlZCByZWFkb25seSBwbGFjZVJvdXRlciA9IGluamVjdChQbGFjZVJvdXRlcik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7Y2hhaW4sIHZhbHVlT2YsIGJlZm9yZSwgd2hlbiwgYWZ0ZXIsIG9ic2VydmUsIHN3aXRjaE9ufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB3aGVuKHRoaXMuX2FjdGl2ZSkuYmVjb21lc1RydXRoeSgoKSA9PiB0aGlzLl9ub3RpZnlQbGFjZVJlYWR5KCkpO1xuICAgIHRoaXMuY2hpbGRQbGFjZXMkID0gTGlzdE1vZGVsLmNvbnN0YW50KHRoaXMucGxhY2VEZWZpbml0aW9uLmNoaWxkcmVuLm1hcChkID0+IGQuY29tcG9uZW50KSk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGlzZVZpc2l0KHZpc2l0OiBWaXNpdFNlZ21lbnQsIG5vdGlmeVZpc2l0Q2hhbmdlZDogKGN1cnJlbnQ6IFZpc2l0U2VnbWVudCwgcHJldmlvdXM6IFZpc2l0U2VnbWVudCkgPT4gdm9pZCkge1xuICAgIGFzc2VydC5pc05pbCh0aGlzLnZpc2l0TW9kZWwudmFsdWUpO1xuXG4gICAgY29uc3Qge3doZW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuXG4gICAgdGhpcy52aXNpdE1vZGVsLnZhbHVlID0gdmlzaXQ7XG4gICAgRGVidWdDb250ZXh0LmdldE9yQ3JlYXRlKHRoaXMudmlzaXRNb2RlbCkudGFnKGAke3RoaXMucGxhY2VEZWZpbml0aW9uLmNvbXBvbmVudC5uYW1lfS52aXNpdE1vZGVsYCk7XG5cbiAgICAvLyB3ZSB0cmFjayBpZiB0aGUgYW55IG9mIHRoZSBiaW5kaW5ncyB1cGRhdGVkIHRoZSByb3V0ZS4gIElmIHNvIHdlIHJlbWVtYmVyIGl0IGFuZCB1cGRhdGUgdGhlXG4gICAgLy8gcm91dGUgaW4gb25lIGdvIGF0IHRoZSBlbmQuXG4gICAgdGhpcy5wbGFjZURlZmluaXRpb25cbiAgICAgIC5nZXRWaXNpdFBhcmFtZXRlckRlZnMoKVxuICAgICAgLmZvckVhY2gocGFyYW1ldGVyRGVmID0+IHRoaXMuaW5zdGFsbEFuZEluaXRpYWxpc2VCaW5kaW5nKHZpc2l0LCBwYXJhbWV0ZXJEZWYpKTtcblxuICAgIHdoZW4odGhpcy52aXNpdE1vZGVsKS5jaGFuZ2VzKChjdXJyZW50LCBwcmV2aW91cykgPT4ge1xuICAgICAgbm90aWZ5VmlzaXRDaGFuZ2VkKGN1cnJlbnQsIHByZXZpb3VzKTtcbiAgICB9LCB7dW5sZXNzOiB0aGlzLl9pblZpc2l0VXBkYXRlfSk7XG5cbiAgICAvLyBUT0RPOiB0aGlzIG5lZWRzIHRvIGRvIGEgcmVwbGFjZSB1cmwgb3B0aW9uIHNvIHRoYXQgdGhlIG5ldyB1cmwgaXNuJ3QgcHV0IGluIHRoZSBoaXN0b3J5Li4uLiBmb3JcbiAgICAvLyAgICAgICBub3cgd2UncmUgbm90IGRvaW5nIGl0IGFzIGl0J3MgYSBmYWlyIGJpdCBvZiBlZmZvcnQgYW5kIHdpbGwgb25seSBhZmZlY3QgcGVvcGxlIGlmIHRoZXkncmVcbiAgICAvLyAgICAgICBjdXR0aW5nIGFuZCBwYXN0aW5nIHVybHMgdG8gZWFjaCBvdGhlci5cbiAgICAvLyAvLyB0aGUgYmluZGluZyBwcm9jZXNzIGNhbiB1cGRhdGUgdGhlIHZpc2l0IChlLmcuIGlmIGEgc2VsZWN0aW9uIG1vZGVsIGhhcyBhbHJlYWR5IHNlbGVjdGVkIGR1cmluZ1xuICAgIC8vIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3Rpb24pIGFuZCB0aGVyZSB3YXMgbm8gdmFsdWUgc3BlY2lmaWVkIGluIHRoZSByb3V0ZVxuICAgIC8vIGlmICh2aXNpdC5oYXNSb3V0aW5nQ2hhbmdlZEZyb20odGhpcy52aXNpdE1vZGVsLnZhbHVlKSkge1xuICAgIC8vICAgbm90aWZ5VmlzaXRDaGFuZ2VkKHRoaXMudmlzaXRNb2RlbC52YWx1ZSwgdmlzaXQpXG4gICAgLy8gfVxuICB9XG5cbiAgZ2V0IGNoaWxkUGxhY2VzKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkUGxhY2VzJC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVWaXNpdCh2aXNpdDogVmlzaXRTZWdtZW50KSB7XG4gICAgYXNzZXJ0LmlzVHJ1dGh5KHRoaXMuaXNJbml0aWFsaXNlZCgpKTtcbiAgICBhc3NlcnQubm90TmlsKHZpc2l0KTtcbiAgICB0aGlzLl9pblZpc2l0VXBkYXRlLndoaWxlVHJ1ZSgoKSA9PiB7XG4gICAgICB0aGlzLnZpc2l0TW9kZWwudmFsdWUgPSB2aXNpdDtcbiAgICB9KTtcbiAgfVxuXG4gIGlzSW5pdGlhbGlzZWQoKSB7XG4gICAgcmV0dXJuICEhdGhpcy52aXNpdE1vZGVsLnZhbHVlO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgLyoqXG4gICAqIEluaXRpYWxpc2VkIHRoZSBjb21wb25lbnQgYmluZGluZ3MuICBJZiBhbnkgYmluZGluZyBoYXMgYW4gaW5pdGlhbCBtb2RlbCB2YWx1ZSAoZS5nLiBhIHNlbGVjdGlvbiBtb2RlbFxuICAgKiBpbml0aWFsaXNlZCBkdXJpbmcgdGhlIGNvbnN0cnVjdG9yKSBhbmQgdGhlIHJvdXRlIGhhcyBub3RoaW5nLCB0aGVuIHRoZSB2aXNpdCB3aWxsIGJlIHVkcGF0ZWQgYW5kIHRoaXNcbiAgICogbWV0aG9kIHdpbGwgcmV0dXJuIHR1cmUgdG8gbm9maXkgdGhlIHRoZSB2aXNpdCBoYXMgY2hhbmdlZC5cbiAgICovXG4gIHByaXZhdGUgaW5zdGFsbEFuZEluaXRpYWxpc2VCaW5kaW5nPFQsIFM+KGluaXRpYWxWaXNpdDogVmlzaXRTZWdtZW50LCBwYXJhbWV0ZXJEZWY6IFBhcmFtZXRlckRlZmluaXRpb248VCwgUz4pIHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXNbcGFyYW1ldGVyRGVmLnByb3BlcnR5TmFtZV0gYXMgSU11dGFibGVIYXNWYWx1ZTxUPjtcbiAgICBEZWJ1Z0NvbnRleHQudGFnKG1vZGVsLCBgJHt0aGlzLnBsYWNlRGVmaW5pdGlvbi5jb21wb25lbnQubmFtZX0uJHtwYXJhbWV0ZXJEZWYucHJvcGVydHlOYW1lfWApO1xuICAgIGNvbnN0IGJpbmRpbmcgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgQmluZGluZyh0aGlzLnZpc2l0TW9kZWwsIG1vZGVsLCB7XG4gICAgICB0b1JpZ2h0KHZpc2l0OiBWaXNpdFNlZ21lbnQpOiBUIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2aXNpdC5nZXRQYXJhbWV0ZXJWYWx1ZShwYXJhbWV0ZXJEZWYpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygncHVzaCB0byBjb21wb25lbnQnLCB7IG5hbWU6IHBhcmFtZXRlckRlZi5uYW1lLCB2YWx1ZSwgdmlzaXQgfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICB0b0xlZnQodmFsdWU6IFQsIGN1cnJlbnRWaXNpdD86IFZpc2l0U2VnbWVudCk6IFZpc2l0U2VnbWVudCB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwdXNoIHRvIHJvdXRlJywgeyBuYW1lOiBwYXJhbWV0ZXJEZWYubmFtZSwgdmFsdWUsIGN1cnJlbnRWaXNpdCB9KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRWaXNpdC5yZXBsYWNlKHBhcmFtZXRlckRlZiwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pKTtcblxuICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGluaXRpYWxpc2UgdGhlIGJpbmRpbmcgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZSBhIHZhbHVlIGluIHRoZSBVcmwgdGhlbiB3ZSBzaG91bGQgYWx3YXlzIHB1c2hcbiAgICAvLyB0aGF0IHRvIHRoZSB2aWV3LiAgSWYgd2UgZG9uJ3QgYW5kIHRoZSB2aWV3IGFscmVhZHkgaGFzIGEgdmFsdWUgKGUuZy4gYSBzZWxlY3Rpb24gbW9kZWwgaGFzIGFscmVhZHkgaW5pdGlhbGlzZWQgaW4gdGhlXG4gICAgLy8gY29tcG9uZW50IGNvbnN0cnVjdG9yKSB0aGVuIHdlIHNob3VsZCBwdXNoIHRoYXQgdG8gdGhlIHJvdXRlLlxuICAgIGNvbnN0IGlzSW5WaXNpdCA9ICFpc05pbChpbml0aWFsVmlzaXQuZ2V0UGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyRGVmKSk7XG4gICAgY29uc3QgaXNJbk1vZGVsID0gIWlzTmlsKG1vZGVsLnZhbHVlKTtcbiAgICBpZiAoIWlzSW5WaXNpdCAmJiBpc0luTW9kZWwpIHtcbiAgICAgIGJpbmRpbmcud3JpdGVMZWZ0KCk7IC8vIHB1c2ggaXQgdG8gdGhlIHJvdXRlXG4gICAgfSBlbHNlIHtcbiAgICAgIGJpbmRpbmcud3JpdGVSaWdodCgpOyAvLyBwdXNoIGl0IHRvIHRoZSBtb2RlbFxuICAgIH1cbiAgfVxuXG4gIEBNZW1vaXplKClcbiAgZ2V0IHBsYWNlRGVmaW5pdGlvbigpOiBQbGFjZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBQbGFjZUNvbXBvbmVudC5nZXREZWZpbml0aW9uKHRoaXMuY29uc3RydWN0b3IgYXMgYW55IGFzIENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+KTtcbiAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gZXh0ZW5kcyBQbGFjZUNvbXBvbmVudCBidXQgZG9lc24ndCBoYXZlIEBQbGFjZSh7Li59KSBkZWNvcmF0b3IuYClcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBnZXQgYWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmUucmVhZG9ubHkkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcm91dGVyIHRvIHNlZSBpZiB0aGlzIGNvbXBvbmVudCBjYW4gZGVhY3RpdmF0ZS4gIFRoaXMgaXNuJ3QgY2FsbGVkIGZvciByb3V0ZSBwYXJhbWV0ZXIgY2hhbmdlcy5cbiAgICogQHBhcmFtIGludGVyYWN0aW9uQ29udGV4dFxuICAgKi9cbiAgYXN5bmMgX2NhbkxlYXZlUGxhY2UoaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jYW5EZWFjdGl2YXRlID8gdGhpcy5jYW5EZWFjdGl2YXRlKGludGVyYWN0aW9uQ29udGV4dCkgOiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcm91dGVyIHRvIHNlZSBpZiB0aGlzIGNvbXBvbmVudCBjYW4gZGVhY3RpdmF0ZS4gIFRoaXMgaXNuJ3QgY2FsbGVkIGZvciByb3V0ZSBwYXJhbWV0ZXIgY2hhbmdlcy5cbiAgICogQHBhcmFtIGludGVyYWN0aW9uQ29udGV4dFxuICAgKiBAcGFyYW0gbmV4dFN0YXRlXG4gICAqL1xuICBhc3luYyBfY2FuQ2hhbmdlUm91dGVQYXJhbWV0ZXJzKGludGVyYWN0aW9uQ29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0LCBuZXh0U3RhdGU6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gaWYgKHRoaXMuX3BhcmFtZXRlckNoYW5nZUludGVyY2VwdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgLy8gICBjb25zdCB2aXNpdCA9IG5leHRTdGF0ZS5jcmVhdGVWaXNpdFNlZ21lbnRGb3IodGhpcy5wbGFjZURlZmluaXRpb24pO1xuICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9wYXJhbWV0ZXJDaGFuZ2VJbnRlcmNlcHRvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSB0aGlzLl9wYXJhbWV0ZXJDaGFuZ2VJbnRlcmNlcHRvcnNbaV07XG4gICAgLy8gICAgIGNvbnN0IGtlZXBHb2luZyA9IGF3YWl0IGludGVyY2VwdG9yLmNhblByb2NlZWQodmlzaXQsIGludGVyYWN0aW9uQ29udGV4dCk7XG4gICAgLy8gICAgIGlmICgha2VlcEdvaW5nKSB7XG4gICAgLy8gICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vICAgICB9XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSByb3V0ZXIgd2hlbiB0aGUgcGxhY2UgaXMgcmVhZHkgdG8gaW50ZXJhY3QgYWZ0ZXIgYW55IGFuaW1hdGlvbnMgaGF2ZSBydW4uXG4gICAqL1xuICBfbm90aWZ5QWN0aXZlKGFjdGl2ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2FjdGl2ZS52YWx1ZSA9IGFjdGl2ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHJvdXRlciB3aGVuIHRoZSBwbGFjZSBpcyByZWFkeSB0byBpbnRlcmFjdCBhZnRlciBhbnkgYW5pbWF0aW9ucyBoYXZlIHJ1bi5cbiAgICovXG4gIF9ub3RpZnlQbGFjZVJlYWR5KCkge1xuICAgIGlmICh0aGlzLm9uUGxhY2VSZWFkeS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuX3BsYWNlUmVhZHlDYWxsYmFja3MuZm9yRWFjaChjYWxsYmFjayA9PiBjYWxsYmFjaygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKCdPdmVycmlkaW5nIFBsYWNlQ29tcG9uZW50Lm9uUGxhY2VSZWFkeSBoYXMgYmVlbiBkZXByZWNhdGVkLiAgVXNlIFBsYWNlQ29tcG9uZW50Lm9uUGxhY2VSZWFkeSgoKSA9PiB7Li4uIGRvIHN0dWZmLi4ufSkgaW5zdGVhZC4nKTtcbiAgICAgIHRoaXMub25QbGFjZVJlYWR5KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgb25QbGFjZVJlYWR5KGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fcGxhY2VSZWFkeUNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIGludGVyY2VwdFZpc2l0UGFyYW1ldGVyQ2hhbmdlPFQ+KG1vZGVsOiBWYWx1ZU1vZGVsPFQ+LCBjYWxsYmFjazogUGxhY2VDb21wb25lbnQuSW50ZXJjZXB0Q2FsbGJhY2s8VD4sIG9wdGlvbnM/OiBQbGFjZUNvbXBvbmVudC5JbnRlcmNlcHRPcHRpb25zKSB7XG4gIC8vICAgY29uc3QgcGFyYW1ldGVyRGVmID0gUGFyYW1ldGVyRGVmaW5pdGlvbi5nZXQobW9kZWwpO1xuICAvLyAgIHRoaXMuX3BhcmFtZXRlckNoYW5nZUludGVyY2VwdG9ycy5wdXNoKG5ldyBQYXJhbWV0ZXJDaGFuZ2VJbnRlcmNlcHRvcihwYXJhbWV0ZXJEZWYsIG1vZGVsLCBjYWxsYmFjaywgb3B0aW9ucykpO1xuICAvLyB9XG5cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBQbGFjZUNvbXBvbmVudCB7XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGlzUGxhY2VDb21wb25lbnRDb25zdHJ1Y3Rvcih0YXJnZXQ6IGFueSk6IHRhcmdldCBpcyBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PiB7XG4gICAgcmV0dXJuIGxhbmcuY29uc3RydWN0b3JDaGFpbih0YXJnZXQgYXMgQ29uc3RydWN0YWJsZTxhbnk+KS5pbmNsdWRlcyhQbGFjZUNvbXBvbmVudCk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Um91dGVQYXJhbWV0ZXJzKGtsYXNzOiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pik6IFBhcmFtZXRlckRlZmluaXRpb248YW55PltdIHtcbiAgICByZXR1cm4gS2xhc3MuZ2V0KGtsYXNzKS5nZXRNZXRhZGF0YUxpc3QoUk9VVEVfUEFSQU1FVEVSX0xJU1RfS0VZKSBhcyBQYXJhbWV0ZXJEZWZpbml0aW9uPGFueT5bXTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXREZWZpbml0aW9uKHNuYXBzaG90T3JDb25zdHJ1Y3RvcjogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+KTogUGxhY2VEZWZpbml0aW9uIHtcbiAgICBpZiAoc25hcHNob3RPckNvbnN0cnVjdG9yIGluc3RhbmNlb2YgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gc25hcHNob3RPckNvbnN0cnVjdG9yLmNvbXBvbmVudDtcbiAgICAgIGlmICghaXNQbGFjZUNvbXBvbmVudENvbnN0cnVjdG9yKGNvbXBvbmVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGNvbXBvbmVudCBpcyBub3QgYSBQbGFjZUNvbXBvbmVudCwgZ290ICR7Y29tcG9uZW50fWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGEoREVGSU5JVElPTl9NRVRBX0RBVEFfS0VZLCBjb21wb25lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YShERUZJTklUSU9OX01FVEFfREFUQV9LRVksIHNuYXBzaG90T3JDb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGluamVjdERlZmluaXRpb24oa2xhc3M6IENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+LCBkZWZpbml0aW9uOiBQbGFjZURlZmluaXRpb24pIHtcbiAgICBSZWZsZWN0LmRlZmluZU1ldGFkYXRhKERFRklOSVRJT05fTUVUQV9EQVRBX0tFWSwgZGVmaW5pdGlvbiwga2xhc3MpO1xuICB9XG5cbiAgLy8gZXhwb3J0IHR5cGUgSW50ZXJjZXB0Q2FsbGJhY2s8VD4gPSAoaXM6IFQsIHdhczogVCwgaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8vIGV4cG9ydCBpbnRlcmZhY2UgSW50ZXJjZXB0T3B0aW9ucyB7XG4gIC8vICAgaW5pdGlhbFZhbHVlOiAnZXZhbHVhdGlvblVubGVzc05pbCcgfCAnZXZhbHVhdGUnXG4gIC8vIH1cblxuXG59XG4iXX0=
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2UtY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFFUCxZQUFZLEVBQ1osR0FBRyxFQUNILEtBQUssRUFFTCxJQUFJLEVBQ0osU0FBUyxFQUNULGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDaEUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM3QixPQUFPLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0FBTTNDLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRywwQkFBMEIsQ0FBQztBQUNuRSxxQkFBcUI7QUFDckIsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFHekUsd0NBQXdDO0FBQ3hDLHVLQUF1SztBQUN2SyxNQUFNO0FBQ04sRUFBRTtBQUNGLHdGQUF3RjtBQUN4RixtQkFBbUI7QUFDbkIsTUFBTTtBQUNOLElBQUk7QUFHSixNQUFNLE9BQU8sY0FBZSxTQUFRLGlCQUFpQjtJQUVsQyxvQkFBb0IsR0FBaUIsRUFBRSxDQUFDO0lBQ2pELFVBQVUsR0FBRyxJQUFJLGlCQUFpQixFQUFnQixDQUFDO0lBQ25ELGNBQWMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQzdCLE9BQU8sR0FBRyxJQUFJLGlCQUFpQixDQUFVLEtBQUssQ0FBQyxDQUFDO0lBRXhELGtCQUFrQixDQUFzQjtJQUMvQixZQUFZLENBQTJDO0lBTzdDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFckQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFFTSxlQUFlLENBQUMsS0FBbUIsRUFBRSxrQkFBMkU7UUFDckgsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBDLE1BQU0sRUFBQyxJQUFJLEVBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUM5QixZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDO1FBRW5HLDhGQUE4RjtRQUM5Riw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLGVBQWU7YUFDakIscUJBQXFCLEVBQUU7YUFDdkIsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBRWxGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ2xELGtCQUFrQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4QyxDQUFDLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBQyxDQUFDLENBQUM7UUFFbEMsbUdBQW1HO1FBQ25HLG1HQUFtRztRQUNuRyxnREFBZ0Q7UUFDaEQscUdBQXFHO1FBQ3JHLDJFQUEyRTtRQUMzRSw0REFBNEQ7UUFDNUQscURBQXFEO1FBQ3JELElBQUk7SUFDTixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQW1CO1FBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVztJQUNYOzs7O09BSUc7SUFDSywyQkFBMkIsQ0FBTyxZQUEwQixFQUFFLFlBQXVDO1FBQzNHLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUF3QixDQUFDO1FBQ3JFLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDL0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFO1lBQzFFLE9BQU8sQ0FBQyxLQUFtQjtnQkFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNwRCwrRUFBK0U7Z0JBQy9FLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFRLEVBQUUsWUFBMkI7Z0JBQzFDLGtGQUFrRjtnQkFDbEYsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSiw2R0FBNkc7UUFDN0cseUhBQXlIO1FBQ3pILGdFQUFnRTtRQUNoRSxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUN2RSxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFNBQVMsSUFBSSxTQUFTLEVBQUU7WUFDM0IsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsdUJBQXVCO1NBQzdDO2FBQU07WUFDTCxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyx1QkFBdUI7U0FDOUM7SUFDSCxDQUFDO0lBRUQsSUFDSSxlQUFlO1FBQ2pCLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQW1ELENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxrRUFBa0UsQ0FBQyxDQUFBO1NBQzlHO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsa0JBQXNDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMseUJBQXlCLENBQUMsa0JBQXNDLEVBQUUsU0FBc0I7UUFDNUYsc0RBQXNEO1FBQ3RELHlFQUF5RTtRQUN6RSx5RUFBeUU7UUFDekUsZ0VBQWdFO1FBQ2hFLGlGQUFpRjtRQUNqRix3QkFBd0I7UUFDeEIsc0JBQXNCO1FBQ3RCLFFBQVE7UUFDUixNQUFNO1FBQ04sSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUdEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLE1BQWU7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQjtRQUNmLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQzNEO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLGdJQUFnSSxDQUFDLENBQUM7WUFDL0ksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsUUFBb0I7UUFDL0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO3VHQXBLVSxjQUFjOzJGQUFkLGNBQWM7O0FBc0d6QjtJQUFDLE9BQU8sRUFBRTs4QkFDYSxlQUFlOztxREFNckM7MkZBN0dVLGNBQWM7a0JBRDFCLFNBQVM7MEVBd0dKLGVBQWU7QUFzRXJCLFdBQWlCLGNBQWM7SUFFN0IsU0FBZ0IsMkJBQTJCLENBQUMsTUFBVztRQUNyRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUE0QixDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFGZSwwQ0FBMkIsOEJBRTFDLENBQUE7SUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFvQztRQUNyRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUErQixDQUFDO0lBQ2xHLENBQUM7SUFGZSxpQ0FBa0IscUJBRWpDLENBQUE7SUFFRCxTQUFnQixhQUFhLENBQUMscUJBQTZFO1FBQ3pHLElBQUkscUJBQXFCLFlBQVksc0JBQXNCLEVBQUU7WUFDM0QsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDO1lBQ2xELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDM0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsU0FBUyxFQUFFLENBQUMsQ0FBQzthQUMvRjtZQUNELE9BQU8sT0FBTyxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNqRTthQUFNO1lBQ0wsT0FBTyxPQUFPLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLHFCQUFxQixDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBVmUsNEJBQWEsZ0JBVTVCLENBQUE7SUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFvQyxFQUFFLFVBQTJCO1FBQ2hHLE9BQU8sQ0FBQyxjQUFjLENBQUMsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFGZSwrQkFBZ0IsbUJBRS9CLENBQUE7SUFFRCw0SEFBNEg7SUFFNUgsc0NBQXNDO0lBQ3RDLHFEQUFxRDtJQUNyRCxJQUFJO0FBR04sQ0FBQyxFQWpDZ0IsY0FBYyxLQUFkLGNBQWMsUUFpQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIEJpbmRpbmcsXG4gIENvbnN0cnVjdGFibGUsXG4gIERlYnVnQ29udGV4dCxcbiAgRHNsLFxuICBHdWFyZCxcbiAgSU11dGFibGVIYXNWYWx1ZSxcbiAgbGFuZyxcbiAgTGlzdE1vZGVsLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbFxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQge0tsYXNzfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7TWVtb2l6ZX0gZnJvbSAnQHR5cGVzY3JpcHQtcGx1cy9mYXN0LW1lbW9pemUtZGVjb3JhdG9yJztcbmltcG9ydCB7aXNOaWx9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHtEaXNwb3NhYmxlQ29tcG9uZW50fSBmcm9tICcuLi9jb21wb25lbnRzL2Rpc3Bvc2FibGUtY29tcG9uZW50JztcbmltcG9ydCB7TG9hZGFibGVDb21wb25lbnR9IGZyb20gXCIuLi9jb21wb25lbnRzL2xvYWRhYmxlLWNvbXBvbmVudFwiO1xuaW1wb3J0IHtJbnRlcmFjdGlvbkNvbnRleHR9IGZyb20gJy4uL2ludGVyYWN0aW9uL2ludGVyYWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHtQbGFjZURlZmluaXRpb259IGZyb20gJy4vcGxhY2UtZGVmaW5pdGlvbic7XG5pbXBvcnQge1BsYWNlUm91dGVyfSBmcm9tIFwiLi9wbGFjZS1yb3V0ZXJcIjtcbmltcG9ydCB7UGFyYW1ldGVyRGVmaW5pdGlvbn0gZnJvbSAnLi9yb3V0ZS9wYXJhbWV0ZXItZGVmaW5pdGlvbic7XG5pbXBvcnQge1VybFNuYXBzaG90fSBmcm9tICcuL3VybC1zbmFwc2hvdCc7XG5pbXBvcnQge1Zpc2l0U2VnbWVudH0gZnJvbSAnLi92aXNpdC1zZWdtZW50JztcblxuXG4vLyBSQUtFOiBtYWtpbmcgdGhpcyBTeW1ib2woLi4uKSBicm9rZSB0aGluZ3MuXG5leHBvcnQgY29uc3QgREVGSU5JVElPTl9NRVRBX0RBVEFfS0VZID0gJ1BMQUNFX0RFRklOSVRJT05fT1BUSU9OUyc7XG4vLyB0aGlzIG9uZSBzZWVtcyBvay5cbmV4cG9ydCBjb25zdCBST1VURV9QQVJBTUVURVJfTElTVF9LRVkgPSBTeW1ib2woJ3BsYWNlOnJvdXRlOnBhcmFtZXRlcnMnKTtcblxuXG4vLyBjbGFzcyBQYXJhbWV0ZXJDaGFuZ2VJbnRlcmNlcHRvcjxUPiB7XG4vLyAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlckRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxUPiwgbW9kZWw6IFZhbHVlTW9kZWw8VD4sIGNhbGxiYWNrOiBQbGFjZUNvbXBvbmVudC5JbnRlcmNlcHRDYWxsYmFjazxUPiwgb3B0aW9uczogUGxhY2VDb21wb25lbnQuSW50ZXJjZXB0T3B0aW9ucykge1xuLy8gICB9XG4vL1xuLy8gICBhc3luYyBjYW5Qcm9jZWVkKG5leHRTdGF0ZTogVmlzaXRTZWdtZW50LCBpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCkge1xuLy8gICAgIHJldHVybiB0cnVlO1xuLy8gICB9XG4vLyB9XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIFBsYWNlQ29tcG9uZW50IGV4dGVuZHMgTG9hZGFibGVDb21wb25lbnQge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3BsYWNlUmVhZHlDYWxsYmFja3M6ICgoKT0+dm9pZClbXSA9IFtdO1xuICBwcml2YXRlIHZpc2l0TW9kZWwgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8VmlzaXRTZWdtZW50PigpO1xuICBwcml2YXRlIF9pblZpc2l0VXBkYXRlID0gbmV3IEd1YXJkKCk7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxib29sZWFuPihmYWxzZSk7XG5cbiAgaW50ZXJhY3Rpb25Db250ZXh0PzogSW50ZXJhY3Rpb25Db250ZXh0O1xuICByZWFkb25seSBjaGlsZFBsYWNlcyQ6IExpc3RNb2RlbDxDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pj47XG4gIC8vIHByaXZhdGUgcmVhZG9ubHkgX3BhcmFtZXRlckNoYW5nZUludGVyY2VwdG9yczogUGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3I8YW55PltdID0gW107XG5cblxuICBjYW5EZWFjdGl2YXRlPyhpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuXG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsYWNlUm91dGVyID0gaW5qZWN0KFBsYWNlUm91dGVyKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHtjaGFpbiwgdmFsdWVPZiwgYmVmb3JlLCB3aGVuLCBhZnRlciwgb2JzZXJ2ZSwgc3dpdGNoT259ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHdoZW4odGhpcy5fYWN0aXZlKS5iZWNvbWVzVHJ1dGh5KCgpID0+IHRoaXMuX25vdGlmeVBsYWNlUmVhZHkoKSk7XG4gICAgdGhpcy5jaGlsZFBsYWNlcyQgPSBMaXN0TW9kZWwuY29uc3RhbnQodGhpcy5wbGFjZURlZmluaXRpb24uY2hpbGRyZW4ubWFwKGQgPT4gZC5jb21wb25lbnQpKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXNlVmlzaXQodmlzaXQ6IFZpc2l0U2VnbWVudCwgbm90aWZ5VmlzaXRDaGFuZ2VkOiAoY3VycmVudDogVmlzaXRTZWdtZW50LCBwcmV2aW91czogVmlzaXRTZWdtZW50KSA9PiB2b2lkKSB7XG4gICAgYXNzZXJ0LmlzTmlsKHRoaXMudmlzaXRNb2RlbC52YWx1ZSk7XG5cbiAgICBjb25zdCB7d2hlbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG5cbiAgICB0aGlzLnZpc2l0TW9kZWwudmFsdWUgPSB2aXNpdDtcbiAgICBEZWJ1Z0NvbnRleHQuZ2V0T3JDcmVhdGUodGhpcy52aXNpdE1vZGVsKS50YWcoYCR7dGhpcy5wbGFjZURlZmluaXRpb24uY29tcG9uZW50Lm5hbWV9LnZpc2l0TW9kZWxgKTtcblxuICAgIC8vIHdlIHRyYWNrIGlmIHRoZSBhbnkgb2YgdGhlIGJpbmRpbmdzIHVwZGF0ZWQgdGhlIHJvdXRlLiAgSWYgc28gd2UgcmVtZW1iZXIgaXQgYW5kIHVwZGF0ZSB0aGVcbiAgICAvLyByb3V0ZSBpbiBvbmUgZ28gYXQgdGhlIGVuZC5cbiAgICB0aGlzLnBsYWNlRGVmaW5pdGlvblxuICAgICAgLmdldFZpc2l0UGFyYW1ldGVyRGVmcygpXG4gICAgICAuZm9yRWFjaChwYXJhbWV0ZXJEZWYgPT4gdGhpcy5pbnN0YWxsQW5kSW5pdGlhbGlzZUJpbmRpbmcodmlzaXQsIHBhcmFtZXRlckRlZikpO1xuXG4gICAgd2hlbih0aGlzLnZpc2l0TW9kZWwpLmNoYW5nZXMoKGN1cnJlbnQsIHByZXZpb3VzKSA9PiB7XG4gICAgICBub3RpZnlWaXNpdENoYW5nZWQoY3VycmVudCwgcHJldmlvdXMpO1xuICAgIH0sIHt1bmxlc3M6IHRoaXMuX2luVmlzaXRVcGRhdGV9KTtcblxuICAgIC8vIFRPRE86IHRoaXMgbmVlZHMgdG8gZG8gYSByZXBsYWNlIHVybCBvcHRpb24gc28gdGhhdCB0aGUgbmV3IHVybCBpc24ndCBwdXQgaW4gdGhlIGhpc3RvcnkuLi4uIGZvclxuICAgIC8vICAgICAgIG5vdyB3ZSdyZSBub3QgZG9pbmcgaXQgYXMgaXQncyBhIGZhaXIgYml0IG9mIGVmZm9ydCBhbmQgd2lsbCBvbmx5IGFmZmVjdCBwZW9wbGUgaWYgdGhleSdyZVxuICAgIC8vICAgICAgIGN1dHRpbmcgYW5kIHBhc3RpbmcgdXJscyB0byBlYWNoIG90aGVyLlxuICAgIC8vIC8vIHRoZSBiaW5kaW5nIHByb2Nlc3MgY2FuIHVwZGF0ZSB0aGUgdmlzaXQgKGUuZy4gaWYgYSBzZWxlY3Rpb24gbW9kZWwgaGFzIGFscmVhZHkgc2VsZWN0ZWQgZHVyaW5nXG4gICAgLy8gLy8gY29tcG9uZW50IGNvbnN0cnVjdGlvbikgYW5kIHRoZXJlIHdhcyBubyB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIHJvdXRlXG4gICAgLy8gaWYgKHZpc2l0Lmhhc1JvdXRpbmdDaGFuZ2VkRnJvbSh0aGlzLnZpc2l0TW9kZWwudmFsdWUpKSB7XG4gICAgLy8gICBub3RpZnlWaXNpdENoYW5nZWQodGhpcy52aXNpdE1vZGVsLnZhbHVlLCB2aXNpdClcbiAgICAvLyB9XG4gIH1cblxuICBnZXQgY2hpbGRQbGFjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRQbGFjZXMkLnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVZpc2l0KHZpc2l0OiBWaXNpdFNlZ21lbnQpIHtcbiAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5pc0luaXRpYWxpc2VkKCkpO1xuICAgIGFzc2VydC5ub3ROaWwodmlzaXQpO1xuICAgIHRoaXMuX2luVmlzaXRVcGRhdGUud2hpbGVUcnVlKCgpID0+IHtcbiAgICAgIHRoaXMudmlzaXRNb2RlbC52YWx1ZSA9IHZpc2l0O1xuICAgIH0pO1xuICB9XG5cbiAgaXNJbml0aWFsaXNlZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLnZpc2l0TW9kZWwudmFsdWU7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICAvKipcbiAgICogSW5pdGlhbGlzZWQgdGhlIGNvbXBvbmVudCBiaW5kaW5ncy4gIElmIGFueSBiaW5kaW5nIGhhcyBhbiBpbml0aWFsIG1vZGVsIHZhbHVlIChlLmcuIGEgc2VsZWN0aW9uIG1vZGVsXG4gICAqIGluaXRpYWxpc2VkIGR1cmluZyB0aGUgY29uc3RydWN0b3IpIGFuZCB0aGUgcm91dGUgaGFzIG5vdGhpbmcsIHRoZW4gdGhlIHZpc2l0IHdpbGwgYmUgdWRwYXRlZCBhbmQgdGhpc1xuICAgKiBtZXRob2Qgd2lsbCByZXR1cm4gdHVyZSB0byBub2ZpeSB0aGUgdGhlIHZpc2l0IGhhcyBjaGFuZ2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsQW5kSW5pdGlhbGlzZUJpbmRpbmc8VCwgUz4oaW5pdGlhbFZpc2l0OiBWaXNpdFNlZ21lbnQsIHBhcmFtZXRlckRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxULCBTPikge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpc1twYXJhbWV0ZXJEZWYucHJvcGVydHlOYW1lXSBhcyBJTXV0YWJsZUhhc1ZhbHVlPFQ+O1xuICAgIGFzc2VydC5ub3ROaWwobW9kZWwpO1xuICAgIERlYnVnQ29udGV4dC50YWcobW9kZWwsIGAke3RoaXMucGxhY2VEZWZpbml0aW9uLmNvbXBvbmVudC5uYW1lfS4ke3BhcmFtZXRlckRlZi5wcm9wZXJ0eU5hbWV9YCk7XG4gICAgY29uc3QgYmluZGluZyA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBCaW5kaW5nKHRoaXMudmlzaXRNb2RlbCwgbW9kZWwsIHtcbiAgICAgIHRvUmlnaHQodmlzaXQ6IFZpc2l0U2VnbWVudCk6IFQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZpc2l0LmdldFBhcmFtZXRlclZhbHVlKHBhcmFtZXRlckRlZik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwdXNoIHRvIGNvbXBvbmVudCcsIHsgbmFtZTogcGFyYW1ldGVyRGVmLm5hbWUsIHZhbHVlLCB2aXNpdCB9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIHRvTGVmdCh2YWx1ZTogVCwgY3VycmVudFZpc2l0PzogVmlzaXRTZWdtZW50KTogVmlzaXRTZWdtZW50IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3B1c2ggdG8gcm91dGUnLCB7IG5hbWU6IHBhcmFtZXRlckRlZi5uYW1lLCB2YWx1ZSwgY3VycmVudFZpc2l0IH0pO1xuICAgICAgICByZXR1cm4gY3VycmVudFZpc2l0LnJlcGxhY2UocGFyYW1ldGVyRGVmLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgLy8gTm93IHdlIG5lZWQgdG8gaW5pdGlhbGlzZSB0aGUgYmluZGluZyBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlIGEgdmFsdWUgaW4gdGhlIFVybCB0aGVuIHdlIHNob3VsZCBhbHdheXMgcHVzaFxuICAgIC8vIHRoYXQgdG8gdGhlIHZpZXcuICBJZiB3ZSBkb24ndCBhbmQgdGhlIHZpZXcgYWxyZWFkeSBoYXMgYSB2YWx1ZSAoZS5nLiBhIHNlbGVjdGlvbiBtb2RlbCBoYXMgYWxyZWFkeSBpbml0aWFsaXNlZCBpbiB0aGVcbiAgICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IpIHRoZW4gd2Ugc2hvdWxkIHB1c2ggdGhhdCB0byB0aGUgcm91dGUuXG4gICAgY29uc3QgaXNJblZpc2l0ID0gIWlzTmlsKGluaXRpYWxWaXNpdC5nZXRQYXJhbWV0ZXJWYWx1ZShwYXJhbWV0ZXJEZWYpKTtcbiAgICBjb25zdCBpc0luTW9kZWwgPSAhaXNOaWwobW9kZWwudmFsdWUpO1xuICAgIGlmICghaXNJblZpc2l0ICYmIGlzSW5Nb2RlbCkge1xuICAgICAgYmluZGluZy53cml0ZUxlZnQoKTsgLy8gcHVzaCBpdCB0byB0aGUgcm91dGVcbiAgICB9IGVsc2Uge1xuICAgICAgYmluZGluZy53cml0ZVJpZ2h0KCk7IC8vIHB1c2ggaXQgdG8gdGhlIG1vZGVsXG4gICAgfVxuICB9XG5cbiAgQE1lbW9pemUoKVxuICBnZXQgcGxhY2VEZWZpbml0aW9uKCk6IFBsYWNlRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFBsYWNlQ29tcG9uZW50LmdldERlZmluaXRpb24odGhpcy5jb25zdHJ1Y3RvciBhcyBhbnkgYXMgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4pO1xuICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBleHRlbmRzIFBsYWNlQ29tcG9uZW50IGJ1dCBkb2Vzbid0IGhhdmUgQFBsYWNlKHsuLn0pIGRlY29yYXRvci5gKVxuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIGdldCBhY3RpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZS5yZWFkb25seSQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSByb3V0ZXIgdG8gc2VlIGlmIHRoaXMgY29tcG9uZW50IGNhbiBkZWFjdGl2YXRlLiAgVGhpcyBpc24ndCBjYWxsZWQgZm9yIHJvdXRlIHBhcmFtZXRlciBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gaW50ZXJhY3Rpb25Db250ZXh0XG4gICAqL1xuICBhc3luYyBfY2FuTGVhdmVQbGFjZShpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmNhbkRlYWN0aXZhdGUgPyB0aGlzLmNhbkRlYWN0aXZhdGUoaW50ZXJhY3Rpb25Db250ZXh0KSA6IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSByb3V0ZXIgdG8gc2VlIGlmIHRoaXMgY29tcG9uZW50IGNhbiBkZWFjdGl2YXRlLiAgVGhpcyBpc24ndCBjYWxsZWQgZm9yIHJvdXRlIHBhcmFtZXRlciBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gaW50ZXJhY3Rpb25Db250ZXh0XG4gICAqIEBwYXJhbSBuZXh0U3RhdGVcbiAgICovXG4gIGFzeW5jIF9jYW5DaGFuZ2VSb3V0ZVBhcmFtZXRlcnMoaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQsIG5leHRTdGF0ZTogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBpZiAodGhpcy5fcGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAvLyAgIGNvbnN0IHZpc2l0ID0gbmV4dFN0YXRlLmNyZWF0ZVZpc2l0U2VnbWVudEZvcih0aGlzLnBsYWNlRGVmaW5pdGlvbik7XG4gICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3BhcmFtZXRlckNoYW5nZUludGVyY2VwdG9ycy5sZW5ndGg7IGkrKykge1xuICAgIC8vICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXMuX3BhcmFtZXRlckNoYW5nZUludGVyY2VwdG9yc1tpXTtcbiAgICAvLyAgICAgY29uc3Qga2VlcEdvaW5nID0gYXdhaXQgaW50ZXJjZXB0b3IuY2FuUHJvY2VlZCh2aXNpdCwgaW50ZXJhY3Rpb25Db250ZXh0KTtcbiAgICAvLyAgICAgaWYgKCFrZWVwR29pbmcpIHtcbiAgICAvLyAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHJvdXRlciB3aGVuIHRoZSBwbGFjZSBpcyByZWFkeSB0byBpbnRlcmFjdCBhZnRlciBhbnkgYW5pbWF0aW9ucyBoYXZlIHJ1bi5cbiAgICovXG4gIF9ub3RpZnlBY3RpdmUoYWN0aXZlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYWN0aXZlLnZhbHVlID0gYWN0aXZlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gdGhlIHBsYWNlIGlzIHJlYWR5IHRvIGludGVyYWN0IGFmdGVyIGFueSBhbmltYXRpb25zIGhhdmUgcnVuLlxuICAgKi9cbiAgX25vdGlmeVBsYWNlUmVhZHkoKSB7XG4gICAgaWYgKHRoaXMub25QbGFjZVJlYWR5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5fcGxhY2VSZWFkeUNhbGxiYWNrcy5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ092ZXJyaWRpbmcgUGxhY2VDb21wb25lbnQub25QbGFjZVJlYWR5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuICBVc2UgUGxhY2VDb21wb25lbnQub25QbGFjZVJlYWR5KCgpID0+IHsuLi4gZG8gc3R1ZmYuLi59KSBpbnN0ZWFkLicpO1xuICAgICAgdGhpcy5vblBsYWNlUmVhZHkodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBvblBsYWNlUmVhZHkoY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9wbGFjZVJlYWR5Q2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgLy8gaW50ZXJjZXB0VmlzaXRQYXJhbWV0ZXJDaGFuZ2U8VD4obW9kZWw6IFZhbHVlTW9kZWw8VD4sIGNhbGxiYWNrOiBQbGFjZUNvbXBvbmVudC5JbnRlcmNlcHRDYWxsYmFjazxUPiwgb3B0aW9ucz86IFBsYWNlQ29tcG9uZW50LkludGVyY2VwdE9wdGlvbnMpIHtcbiAgLy8gICBjb25zdCBwYXJhbWV0ZXJEZWYgPSBQYXJhbWV0ZXJEZWZpbml0aW9uLmdldChtb2RlbCk7XG4gIC8vICAgdGhpcy5fcGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3JzLnB1c2gobmV3IFBhcmFtZXRlckNoYW5nZUludGVyY2VwdG9yKHBhcmFtZXRlckRlZiwgbW9kZWwsIGNhbGxiYWNrLCBvcHRpb25zKSk7XG4gIC8vIH1cblxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlQ29tcG9uZW50IHtcblxuICBleHBvcnQgZnVuY3Rpb24gaXNQbGFjZUNvbXBvbmVudENvbnN0cnVjdG9yKHRhcmdldDogYW55KTogdGFyZ2V0IGlzIENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+IHtcbiAgICByZXR1cm4gbGFuZy5jb25zdHJ1Y3RvckNoYWluKHRhcmdldCBhcyBDb25zdHJ1Y3RhYmxlPGFueT4pLmluY2x1ZGVzKFBsYWNlQ29tcG9uZW50KTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRSb3V0ZVBhcmFtZXRlcnMoa2xhc3M6IENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+KTogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W10ge1xuICAgIHJldHVybiBLbGFzcy5nZXQoa2xhc3MpLmdldE1ldGFkYXRhTGlzdChST1VURV9QQVJBTUVURVJfTElTVF9LRVkpIGFzIFBhcmFtZXRlckRlZmluaXRpb248YW55PltdO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldERlZmluaXRpb24oc25hcHNob3RPckNvbnN0cnVjdG9yOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4pOiBQbGFjZURlZmluaXRpb24ge1xuICAgIGlmIChzbmFwc2hvdE9yQ29uc3RydWN0b3IgaW5zdGFuY2VvZiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBzbmFwc2hvdE9yQ29uc3RydWN0b3IuY29tcG9uZW50O1xuICAgICAgaWYgKCFpc1BsYWNlQ29tcG9uZW50Q29uc3RydWN0b3IoY29tcG9uZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjdGl2YXRlZFJvdXRlU25hcHNob3QgY29tcG9uZW50IGlzIG5vdCBhIFBsYWNlQ29tcG9uZW50LCBnb3QgJHtjb21wb25lbnR9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YShERUZJTklUSU9OX01FVEFfREFUQV9LRVksIGNvbXBvbmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhKERFRklOSVRJT05fTUVUQV9EQVRBX0tFWSwgc25hcHNob3RPckNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaW5qZWN0RGVmaW5pdGlvbihrbGFzczogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sIGRlZmluaXRpb246IFBsYWNlRGVmaW5pdGlvbikge1xuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoREVGSU5JVElPTl9NRVRBX0RBVEFfS0VZLCBkZWZpbml0aW9uLCBrbGFzcyk7XG4gIH1cblxuICAvLyBleHBvcnQgdHlwZSBJbnRlcmNlcHRDYWxsYmFjazxUPiA9IChpczogVCwgd2FzOiBULCBpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLy8gZXhwb3J0IGludGVyZmFjZSBJbnRlcmNlcHRPcHRpb25zIHtcbiAgLy8gICBpbml0aWFsVmFsdWU6ICdldmFsdWF0aW9uVW5sZXNzTmlsJyB8ICdldmFsdWF0ZSdcbiAgLy8gfVxuXG5cbn1cbiJdfQ==
@@ -1,70 +1,74 @@
1
- import { Binding, DebugContext, Functions } from '@coolon/pectin';
2
1
  import { Klass, Opts } from '@coolon/typescript-utilities';
3
2
  import { ROUTE_PARAMETER_LIST_KEY } from '../place-component';
4
3
  import { ParameterDefinition } from './parameter-definition';
5
- function installMechanics(parameterDef, prototype, propertyKey, tagPrefix) {
6
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
7
- function getMechanics(instance, propertyName) {
8
- const key = `__mechanics_${propertyName.toString()}`;
9
- if (!instance[key]) {
10
- const backingModel = parameterDef.createBackingModel();
11
- instance[key] = {
12
- backingModel: backingModel,
13
- binding: null
14
- };
15
- const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
16
- DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
17
- }
18
- return instance[key];
19
- }
20
- Object.defineProperty(prototype, propertyKey, {
21
- get: function () {
22
- return getMechanics(this, propertyKey).backingModel;
23
- },
24
- set: function (userModel) {
25
- const mechanics = getMechanics(this, propertyKey);
26
- // This handles the scenario where we want to push an existing value model (such as a form model)
27
- // to and from the route.
28
- if (mechanics.binding) {
29
- mechanics.binding.dispose();
30
- }
31
- if (userModel) {
32
- mechanics.binding = new Binding(mechanics.backingModel, userModel, {
33
- toLeft: Functions.identity,
34
- toRight: Functions.identity
35
- });
36
- if (parameterDef.isEmptyValue(userModel.value)) {
37
- // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
38
- mechanics.binding.writeRight(); // push the visit into the user model;
39
- }
40
- else {
41
- if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
42
- console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
43
- }
44
- mechanics.binding.writeLeft(); // push the user model into the visit
45
- }
46
- }
47
- }
48
- });
49
- }
4
+ // function installMechanics<M extends HasValue<any>>(parameterDef: ParameterDefinition<any>, prototype: object, propertyKey: string | symbol, tagPrefix: string) {
5
+ //
6
+ // Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
7
+ //
8
+ // function getMechanics(instance: M, propertyName: string | symbol) {
9
+ // const key = `__mechanics_${propertyName.toString()}`;
10
+ // if (!instance[key]) {
11
+ // const backingModel = parameterDef.createBackingModel();
12
+ // instance[key] = {
13
+ // backingModel: backingModel,
14
+ // binding: null as Binding<any, any>
15
+ // };
16
+ // const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
17
+ // DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
18
+ // }
19
+ // return instance[key];
20
+ // }
21
+ //
22
+ // Object.defineProperty(prototype, propertyKey, {
23
+ // get: function() {
24
+ // return getMechanics(this, propertyKey).backingModel;
25
+ // },
26
+ // set: function(userModel: M) {
27
+ // const mechanics = getMechanics(this, propertyKey);
28
+ // // This handles the scenario where we want to push an existing value model (such as a form model)
29
+ // // to and from the route.
30
+ // if (mechanics.binding) {
31
+ // mechanics.binding.dispose();
32
+ // }
33
+ // if (userModel) {
34
+ // mechanics.binding = new Binding(mechanics.backingModel, userModel, {
35
+ // toLeft: Functions.identity,
36
+ // toRight: Functions.identity
37
+ // });
38
+ // if (parameterDef.isEmptyValue(userModel.value)) {
39
+ // // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
40
+ // mechanics.binding.writeRight(); // push the visit into the user model;
41
+ // } else {
42
+ // if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
43
+ // console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
44
+ // }
45
+ // mechanics.binding.writeLeft(); // push the user model into the visit
46
+ // }
47
+ // }
48
+ // }
49
+ // });
50
+ // }
50
51
  export function RouteId(formatter, options) {
51
52
  return (prototype, propertyKey) => {
52
53
  const parameterDef = new ParameterDefinition.RouteId(propertyKey.toString(), options, formatter);
53
- installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
54
+ // installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
55
+ Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
54
56
  };
55
57
  }
56
58
  export function VisitParameter(options) {
57
59
  const opts = Opts.get(options);
58
60
  return (prototype, propertyKey) => {
59
61
  const parameterDef = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
60
- installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
62
+ Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
63
+ // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
61
64
  };
62
65
  }
63
66
  export function VisitParameterList(options) {
64
67
  const opts = Opts.get(options);
65
68
  return (prototype, propertyKey) => {
66
69
  const parameterDef = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
67
- installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
70
+ Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
71
+ // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
68
72
  };
69
73
  }
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLWRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9wbGFjZS9yb3V0ZS9wYXJhbWV0ZXItZGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFpQixZQUFZLEVBQUUsU0FBUyxFQUFXLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQStCM0QsU0FBUyxnQkFBZ0IsQ0FBMEIsWUFBc0MsRUFBRSxTQUFpQixFQUFFLFdBQTRCLEVBQUUsU0FBaUI7SUFFM0osS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyx3QkFBd0IsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUVsRixTQUFTLFlBQVksQ0FBQyxRQUFXLEVBQUUsWUFBNkI7UUFDOUQsTUFBTSxHQUFHLEdBQUcsZUFBZSxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZELFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRztnQkFDZCxZQUFZLEVBQUUsWUFBWTtnQkFDMUIsT0FBTyxFQUFFLElBQXlCO2FBQ25DLENBQUM7WUFDRixNQUFNLEdBQUcsR0FBRyxHQUFHLFNBQVMsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FB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LENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkksZ0JBQWdCLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCaW5kaW5nLCBDb25zdHJ1Y3RhYmxlLCBEZWJ1Z0NvbnRleHQsIEZ1bmN0aW9ucywgSGFzVmFsdWV9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7S2xhc3MsIE9wdHN9IGZyb20gJ0Bjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXMnO1xuaW1wb3J0IHtST1VURV9QQVJBTUVURVJfTElTVF9LRVl9IGZyb20gJy4uL3BsYWNlLWNvbXBvbmVudCc7XG5pbXBvcnQge0Zvcm1hdHRlcn0gZnJvbSAnLi9mb3JtYXR0ZXInO1xuaW1wb3J0IHtQYXJhbWV0ZXJEZWZpbml0aW9ufSBmcm9tICcuL3BhcmFtZXRlci1kZWZpbml0aW9uJztcbmltcG9ydCB7UGFyYW1ldGVyU2FuaXRpc2VyfSBmcm9tICcuL3BhcmFtZXRlci1zYW5pdGlzZXInO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVJZE9wdGlvbnM8VD4ge1xuICBhcz86IHN0cmluZztcbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICByZW1lbWJlcj86IGJvb2xlYW47XG4gIGRlZmF1bHRWYWx1ZT86IFQ7XG4gIHNhbml0aXNlcj86IENvbnN0cnVjdGFibGU8UGFyYW1ldGVyU2FuaXRpc2VyPFQ+PiB8IFBhcmFtZXRlclNhbml0aXNlcjxUPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVBhcmFtZXRlck9wdGlvbnM8VD4ge1xuICBhcz86IHN0cmluZztcbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICByZW1lbWJlcj86IGJvb2xlYW47XG4gIGRlZmF1bHRWYWx1ZT86IFQ7XG4gIHN0b3JlSW5Vcmw/OiBGb3JtYXR0ZXI8VD5cbiAgc2FuaXRpc2VyPzogQ29uc3RydWN0YWJsZTxQYXJhbWV0ZXJTYW5pdGlzZXI8VD4+IHwgUGFyYW1ldGVyU2FuaXRpc2VyPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlTGlzdFBhcmFtZXRlck9wdGlvbnM8VD4ge1xuICBhcz86IHN0cmluZztcbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICByZW1lbWJlcj86IGJvb2xlYW47XG4gIGRlZmF1bHRWYWx1ZT86IFRbXTtcbiAgc3RvcmVJblVybD86IEZvcm1hdHRlcjxUPlxuICBzYW5pdGlzZXI/OiBDb25zdHJ1Y3RhYmxlPFBhcmFtZXRlclNhbml0aXNlcjxUW10+PiB8IFBhcmFtZXRlclNhbml0aXNlcjxUW10+O1xufVxuXG5cbmZ1bmN0aW9uIGluc3RhbGxNZWNoYW5pY3M8TSBleHRlbmRzIEhhc1ZhbHVlPGFueT4+KHBhcmFtZXRlckRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+LCBwcm90b3R5cGU6IG9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCwgdGFnUHJlZml4OiBzdHJpbmcpIHtcblxuICBLbGFzcy5nZXQocHJvdG90eXBlKS5hZGRUb093bk1ldGFkYXRhTGlzdChST1VURV9QQVJBTUVURVJfTElTVF9LRVksIHBhcmFtZXRlckRlZik7XG5cbiAgZnVuY3Rpb24gZ2V0TWVjaGFuaWNzKGluc3RhbmNlOiBNLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgIGNvbnN0IGtleSA9IGBfX21lY2hhbmljc18ke3Byb3BlcnR5TmFtZS50b1N0cmluZygpfWA7XG4gICAgaWYgKCFpbnN0YW5jZVtrZXldKSB7XG4gICAgICBjb25zdCBiYWNraW5nTW9kZWwgPSBwYXJhbWV0ZXJEZWYuY3JlYXRlQmFja2luZ01vZGVsKCk7XG4gICAgICBpbnN0YW5jZVtrZXldID0ge1xuICAgICAgICBiYWNraW5nTW9kZWw6IGJhY2tpbmdNb2RlbCxcbiAgICAgICAgYmluZGluZzogbnVsbCBhcyBCaW5kaW5nPGFueSwgYW55PlxuICAgICAgfTtcbiAgICAgIGNvbnN0IHRhZyA9IGAke3RhZ1ByZWZpeH0oJHtwcm90b3R5cGUuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleS50b1N0cmluZygpfSlgO1xuICAgICAgRGVidWdDb250ZXh0LmdldE9yQ3JlYXRlKGluc3RhbmNlW2tleV0uYmFja2luZ01vZGVsKS50YWcodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlW2tleV07XG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCBwcm9wZXJ0eUtleSwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZ2V0TWVjaGFuaWNzKHRoaXMsIHByb3BlcnR5S2V5KS5iYWNraW5nTW9kZWw7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uKHVzZXJNb2RlbDogTSkge1xuICAgICAgY29uc3QgbWVjaGFuaWNzID0gZ2V0TWVjaGFuaWNzKHRoaXMsIHByb3BlcnR5S2V5KTtcbiAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgc2NlbmFyaW8gd2hlcmUgd2Ugd2FudCB0byBwdXNoIGFuIGV4aXN0aW5nIHZhbHVlIG1vZGVsIChzdWNoIGFzIGEgZm9ybSBtb2RlbClcbiAgICAgIC8vIHRvIGFuZCBmcm9tIHRoZSByb3V0ZS5cbiAgICAgIGlmIChtZWNoYW5pY3MuYmluZGluZykge1xuICAgICAgICBtZWNoYW5pY3MuYmluZGluZy5kaXNwb3NlKCk7XG4gICAgICB9XG4gICAgICBpZiAodXNlck1vZGVsKSB7XG4gICAgICAgIG1lY2hhbmljcy5iaW5kaW5nID0gbmV3IEJpbmRpbmcobWVjaGFuaWNzLmJhY2tpbmdNb2RlbCwgdXNlck1vZGVsLCB7XG4gICAgICAgICAgdG9MZWZ0OiBGdW5jdGlvbnMuaWRlbnRpdHksXG4gICAgICAgICAgdG9SaWdodDogRnVuY3Rpb25zLmlkZW50aXR5XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGFyYW1ldGVyRGVmLmlzRW1wdHlWYWx1ZSh1c2VyTW9kZWwudmFsdWUpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coYFB1c2ggdmlzaXQgdG8gbW9kZWwgZm9yICR7dGFnfWAsIHt2YWx1ZTogbWVjaGFuaWNzLmJhY2tpbmdNb2RlbC52YWx1ZX0pO1xuICAgICAgICAgIG1lY2hhbmljcy5iaW5kaW5nLndyaXRlUmlnaHQoKTsgLy8gcHVzaCB0aGUgdmlzaXQgaW50byB0aGUgdXNlciBtb2RlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXBhcmFtZXRlckRlZi5pc0VtcHR5VmFsdWUobWVjaGFuaWNzLmJhY2tpbmdNb2RlbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignQXNzaWduaW5nIGEgdmlzaXQgbW9kZWwgd2l0aCBhbiBleGlzdGluZyB2YWx1ZSB0byBhIHZpc2l0IHBhcmFtZXRlciB3aXRoIGFuIGV4aXN0aW5nIHZhbHVlLiAgVmlzaXQgcGFyYW1ldGVyIHdpbGwgYmUgb3ZlcnJpZGRlbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtZWNoYW5pY3MuYmluZGluZy53cml0ZUxlZnQoKTsgLy8gcHVzaCB0aGUgdXNlciBtb2RlbCBpbnRvIHRoZSB2aXNpdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJvdXRlSWQ8VCBleHRlbmRzIHN0cmluZyB8IG51bWJlcj4oZm9ybWF0dGVyOiBGb3JtYXR0ZXI8VD4sIG9wdGlvbnM/OiBSb3V0ZUlkT3B0aW9uczxUPik6IFByb3BlcnR5RGVjb3JhdG9yIHtcbiAgcmV0dXJuIChwcm90b3R5cGU6IG9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckRlZiA9IG5ldyBQYXJhbWV0ZXJEZWZpbml0aW9uLlJvdXRlSWQocHJvcGVydHlLZXkudG9TdHJpbmcoKSwgb3B0aW9ucywgZm9ybWF0dGVyKTtcbiAgICBpbnN0YWxsTWVjaGFuaWNzKHBhcmFtZXRlckRlZiwgcHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgJ0BSb3V0ZUlkJyk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWaXNpdFBhcmFtZXRlcjxUPihvcHRpb25zPzogUm91dGVQYXJhbWV0ZXJPcHRpb25zPFQ+KTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICBjb25zdCBvcHRzID0gT3B0cy5nZXQob3B0aW9ucyk7XG4gIHJldHVybiAocHJvdG90eXBlOiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJEZWYgPSBuZXcgUGFyYW1ldGVyRGVmaW5pdGlvbi5WYWx1ZVBhcmFtZXRlcihwcm9wZXJ0eUtleS50b1N0cmluZygpLCBvcHRpb25zLCBvcHRzLmdldE9wdGlvbmFsKCdzdG9yZUluVXJsJywgbnVsbCkpO1xuICAgIGluc3RhbGxNZWNoYW5pY3MocGFyYW1ldGVyRGVmLCBwcm90b3R5cGUsIHByb3BlcnR5S2V5LCAnQFZpc2l0UGFyYW1ldGVyJyk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWaXNpdFBhcmFtZXRlckxpc3Q8RT4ob3B0aW9ucz86IFJvdXRlTGlzdFBhcmFtZXRlck9wdGlvbnM8RT4pOiBQcm9wZXJ0eURlY29yYXRvciB7XG4gIGNvbnN0IG9wdHMgPSBPcHRzLmdldChvcHRpb25zKTtcbiAgcmV0dXJuIChwcm90b3R5cGU6IG9iamVjdCwgcHJvcGVydHlLZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtZXRlckRlZiA9IG5ldyBQYXJhbWV0ZXJEZWZpbml0aW9uLkFycmF5UGFyYW1ldGVyKHByb3BlcnR5S2V5LnRvU3RyaW5nKCksIG9wdGlvbnMsIG9wdHMuZ2V0T3B0aW9uYWwoJ3N0b3JlSW5VcmwnLCBudWxsKSk7XG4gICAgaW5zdGFsbE1lY2hhbmljcyhwYXJhbWV0ZXJEZWYsIHByb3RvdHlwZSwgcHJvcGVydHlLZXksICdAVmlzaXRQYXJhbWV0ZXJMaXN0Jyk7XG4gIH07XG59XG4iXX0=
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLWRlY29yYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9wbGFjZS9yb3V0ZS9wYXJhbWV0ZXItZGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFVQSxPQUFPLEVBQUMsS0FBSyxFQUFFLElBQUksRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXpELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRTVELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBK0IzRCxtS0FBbUs7QUFDbkssRUFBRTtBQUNGLHVGQUF1RjtBQUN2RixFQUFFO0FBQ0Ysd0VBQXdFO0FBQ3hFLDREQUE0RDtBQUM1RCw0QkFBNEI7QUFDNUIsZ0VBQWdFO0FBQ2hFLDBCQUEwQjtBQUMxQixzQ0FBc0M7QUFDdEMsNkNBQTZDO0FBQzdDLFdBQVc7QUFDWCw2RkFBNkY7QUFDN0YsdUVBQXVFO0FBQ3ZFLFFBQVE7QUFDUiw0QkFBNEI7QUFDNUIsTUFBTTtBQUNOLEVBQUU7QUFDRixvREFBb0Q7QUFDcEQsd0JBQXdCO0FBQ3hCLDZEQUE2RDtBQUM3RCxTQUFTO0FBQ1Qsb0NBQW9DO0FBQ3BDLDJEQUEyRDtBQUMzRCwwR0FBMEc7QUFDMUcsa0NBQWtDO0FBQ2xDLGlDQUFpQztBQUNqQyx1Q0FBdUM7QUFDdkMsVUFBVTtBQUNWLHlCQUF5QjtBQUN6QiwrRUFBK0U7QUFDL0Usd0NBQXdDO0FBQ3hDLHdDQUF3QztBQUN4QyxjQUFjO0FBQ2QsNERBQTREO0FBQzVELHFHQUFxRztBQUNyRyxtRkFBbUY7QUFDbkYsbUJBQW1CO0FBQ25CLDRFQUE0RTtBQUM1RSwrSkFBK0o7QUFDL0osY0FBYztBQUNkLGlGQUFpRjtBQUNqRixZQUFZO0FBQ1osVUFBVTtBQUNWLFFBQVE7QUFDUixRQUFRO0FBQ1IsSUFBSTtBQUVKLE1BQU0sVUFBVSxPQUFPLENBQTRCLFNBQXVCLEVBQUUsT0FBMkI7SUFDckcsT0FBTyxDQUFDLFNBQWlCLEVBQUUsV0FBNEIsRUFBRSxFQUFFO1FBQ3pELE1BQU0sWUFBWSxHQUFHLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDakcsc0VBQXNFO1FBQ3RFLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsb0JBQW9CLENBQUMsd0JBQXdCLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDcEYsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUksT0FBa0M7SUFDbEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUMsU0FBaUIsRUFBRSxXQUE0QixFQUFFLEVBQUU7UUFDekQsTUFBTSxZQUFZLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25JLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsb0JBQW9CLENBQUMsd0JBQXdCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbEYsNkVBQTZFO0lBQy9FLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUksT0FBc0M7SUFDMUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixPQUFPLENBQUMsU0FBaUIsRUFBRSxXQUE0QixFQUFFLEVBQUU7UUFDekQsTUFBTSxZQUFZLEdBQUcsSUFBSSxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25JLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsb0JBQW9CLENBQUMsd0JBQXdCLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbEYsaUZBQWlGO0lBQ25GLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCaW5kaW5nLCBDYW5Qcm94eSxcbiAgQ29uc3RydWN0YWJsZSxcbiAgRGVidWdDb250ZXh0LCBEZWxlZ2F0aW5nVmFsdWVNb2RlbCxcbiAgRnVuY3Rpb25zLFxuICBIYXNWYWx1ZSxcbiAgbGFuZyxcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFByb3hpZnksIFByb3hpZnlNZWNoYW5pY3MsIFZhbHVlTW9kZWxcbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHtLbGFzcywgT3B0c30gZnJvbSAnQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllcyc7XG5pbXBvcnQge2lzTmlsfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5pbXBvcnQge1JPVVRFX1BBUkFNRVRFUl9MSVNUX0tFWX0gZnJvbSAnLi4vcGxhY2UtY29tcG9uZW50JztcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tICcuL2Zvcm1hdHRlcic7XG5pbXBvcnQge1BhcmFtZXRlckRlZmluaXRpb259IGZyb20gJy4vcGFyYW1ldGVyLWRlZmluaXRpb24nO1xuaW1wb3J0IHtQYXJhbWV0ZXJTYW5pdGlzZXJ9IGZyb20gJy4vcGFyYW1ldGVyLXNhbml0aXNlcic7XG5cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUlkT3B0aW9uczxUPiB7XG4gIGFzPzogc3RyaW5nO1xuICBvcHRpb25hbD86IGJvb2xlYW47XG4gIHJlbWVtYmVyPzogYm9vbGVhbjtcbiAgZGVmYXVsdFZhbHVlPzogVDtcbiAgc2FuaXRpc2VyPzogQ29uc3RydWN0YWJsZTxQYXJhbWV0ZXJTYW5pdGlzZXI8VD4+IHwgUGFyYW1ldGVyU2FuaXRpc2VyPFQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlUGFyYW1ldGVyT3B0aW9uczxUPiB7XG4gIGFzPzogc3RyaW5nO1xuICBvcHRpb25hbD86IGJvb2xlYW47XG4gIHJlbWVtYmVyPzogYm9vbGVhbjtcbiAgZGVmYXVsdFZhbHVlPzogVDtcbiAgc3RvcmVJblVybD86IEZvcm1hdHRlcjxUPlxuICBzYW5pdGlzZXI/OiBDb25zdHJ1Y3RhYmxlPFBhcmFtZXRlclNhbml0aXNlcjxUPj4gfCBQYXJhbWV0ZXJTYW5pdGlzZXI8VD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm91dGVMaXN0UGFyYW1ldGVyT3B0aW9uczxUPiB7XG4gIGFzPzogc3RyaW5nO1xuICBvcHRpb25hbD86IGJvb2xlYW47XG4gIHJlbWVtYmVyPzogYm9vbGVhbjtcbiAgZGVmYXVsdFZhbHVlPzogVFtdO1xuICBzdG9yZUluVXJsPzogRm9ybWF0dGVyPFQ+XG4gIHNhbml0aXNlcj86IENvbnN0cnVjdGFibGU8UGFyYW1ldGVyU2FuaXRpc2VyPFRbXT4+IHwgUGFyYW1ldGVyU2FuaXRpc2VyPFRbXT47XG59XG5cblxuLy8gZnVuY3Rpb24gaW5zdGFsbE1lY2hhbmljczxNIGV4dGVuZHMgSGFzVmFsdWU8YW55Pj4ocGFyYW1ldGVyRGVmOiBQYXJhbWV0ZXJEZWZpbml0aW9uPGFueT4sIHByb3RvdHlwZTogb2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLCB0YWdQcmVmaXg6IHN0cmluZykge1xuLy9cbi8vICAgS2xhc3MuZ2V0KHByb3RvdHlwZSkuYWRkVG9Pd25NZXRhZGF0YUxpc3QoUk9VVEVfUEFSQU1FVEVSX0xJU1RfS0VZLCBwYXJhbWV0ZXJEZWYpO1xuLy9cbi8vICAgZnVuY3Rpb24gZ2V0TWVjaGFuaWNzKGluc3RhbmNlOiBNLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyB8IHN5bWJvbCkge1xuLy8gICAgIGNvbnN0IGtleSA9IGBfX21lY2hhbmljc18ke3Byb3BlcnR5TmFtZS50b1N0cmluZygpfWA7XG4vLyAgICAgaWYgKCFpbnN0YW5jZVtrZXldKSB7XG4vLyAgICAgICBjb25zdCBiYWNraW5nTW9kZWwgPSBwYXJhbWV0ZXJEZWYuY3JlYXRlQmFja2luZ01vZGVsKCk7XG4vLyAgICAgICBpbnN0YW5jZVtrZXldID0ge1xuLy8gICAgICAgICBiYWNraW5nTW9kZWw6IGJhY2tpbmdNb2RlbCxcbi8vICAgICAgICAgYmluZGluZzogbnVsbCBhcyBCaW5kaW5nPGFueSwgYW55PlxuLy8gICAgICAgfTtcbi8vICAgICAgIGNvbnN0IHRhZyA9IGAke3RhZ1ByZWZpeH0oJHtwcm90b3R5cGUuY29uc3RydWN0b3IubmFtZX0uJHtwcm9wZXJ0eUtleS50b1N0cmluZygpfSlgO1xuLy8gICAgICAgRGVidWdDb250ZXh0LmdldE9yQ3JlYXRlKGluc3RhbmNlW2tleV0uYmFja2luZ01vZGVsKS50YWcodGFnKTtcbi8vICAgICB9XG4vLyAgICAgcmV0dXJuIGluc3RhbmNlW2tleV07XG4vLyAgIH1cbi8vXG4vLyAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUsIHByb3BlcnR5S2V5LCB7XG4vLyAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbi8vICAgICAgIHJldHVybiBnZXRNZWNoYW5pY3ModGhpcywgcHJvcGVydHlLZXkpLmJhY2tpbmdNb2RlbDtcbi8vICAgICB9LFxuLy8gICAgIHNldDogZnVuY3Rpb24odXNlck1vZGVsOiBNKSB7XG4vLyAgICAgICBjb25zdCBtZWNoYW5pY3MgPSBnZXRNZWNoYW5pY3ModGhpcywgcHJvcGVydHlLZXkpO1xuLy8gICAgICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBzY2VuYXJpbyB3aGVyZSB3ZSB3YW50IHRvIHB1c2ggYW4gZXhpc3RpbmcgdmFsdWUgbW9kZWwgKHN1Y2ggYXMgYSBmb3JtIG1vZGVsKVxuLy8gICAgICAgLy8gdG8gYW5kIGZyb20gdGhlIHJvdXRlLlxuLy8gICAgICAgaWYgKG1lY2hhbmljcy5iaW5kaW5nKSB7XG4vLyAgICAgICAgIG1lY2hhbmljcy5iaW5kaW5nLmRpc3Bvc2UoKTtcbi8vICAgICAgIH1cbi8vICAgICAgIGlmICh1c2VyTW9kZWwpIHtcbi8vICAgICAgICAgbWVjaGFuaWNzLmJpbmRpbmcgPSBuZXcgQmluZGluZyhtZWNoYW5pY3MuYmFja2luZ01vZGVsLCB1c2VyTW9kZWwsIHtcbi8vICAgICAgICAgICB0b0xlZnQ6IEZ1bmN0aW9ucy5pZGVudGl0eSxcbi8vICAgICAgICAgICB0b1JpZ2h0OiBGdW5jdGlvbnMuaWRlbnRpdHlcbi8vICAgICAgICAgfSk7XG4vLyAgICAgICAgIGlmIChwYXJhbWV0ZXJEZWYuaXNFbXB0eVZhbHVlKHVzZXJNb2RlbC52YWx1ZSkpIHtcbi8vICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgUHVzaCB2aXNpdCB0byBtb2RlbCBmb3IgJHt0YWd9YCwge3ZhbHVlOiBtZWNoYW5pY3MuYmFja2luZ01vZGVsLnZhbHVlfSk7XG4vLyAgICAgICAgICAgbWVjaGFuaWNzLmJpbmRpbmcud3JpdGVSaWdodCgpOyAvLyBwdXNoIHRoZSB2aXNpdCBpbnRvIHRoZSB1c2VyIG1vZGVsO1xuLy8gICAgICAgICB9IGVsc2Uge1xuLy8gICAgICAgICAgIGlmICghcGFyYW1ldGVyRGVmLmlzRW1wdHlWYWx1ZShtZWNoYW5pY3MuYmFja2luZ01vZGVsLnZhbHVlKSkge1xuLy8gICAgICAgICAgICAgY29uc29sZS53YXJuKCdBc3NpZ25pbmcgYSB2aXNpdCBtb2RlbCB3aXRoIGFuIGV4aXN0aW5nIHZhbHVlIHRvIGEgdmlzaXQgcGFyYW1ldGVyIHdpdGggYW4gZXhpc3RpbmcgdmFsdWUuICBWaXNpdCBwYXJhbWV0ZXIgd2lsbCBiZSBvdmVycmlkZGVuJyk7XG4vLyAgICAgICAgICAgfVxuLy8gICAgICAgICAgIG1lY2hhbmljcy5iaW5kaW5nLndyaXRlTGVmdCgpOyAvLyBwdXNoIHRoZSB1c2VyIG1vZGVsIGludG8gdGhlIHZpc2l0XG4vLyAgICAgICAgIH1cbi8vICAgICAgIH1cbi8vICAgICB9XG4vLyAgIH0pO1xuLy8gfVxuXG5leHBvcnQgZnVuY3Rpb24gUm91dGVJZDxUIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyPihmb3JtYXR0ZXI6IEZvcm1hdHRlcjxUPiwgb3B0aW9ucz86IFJvdXRlSWRPcHRpb25zPFQ+KTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICByZXR1cm4gKHByb3RvdHlwZTogb2JqZWN0LCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XG4gICAgY29uc3QgcGFyYW1ldGVyRGVmID0gbmV3IFBhcmFtZXRlckRlZmluaXRpb24uUm91dGVJZChwcm9wZXJ0eUtleS50b1N0cmluZygpLCBvcHRpb25zLCBmb3JtYXR0ZXIpO1xuICAgIC8vIGluc3RhbGxNZWNoYW5pY3MocGFyYW1ldGVyRGVmLCBwcm90b3R5cGUsIHByb3BlcnR5S2V5LCAnQFJvdXRlSWQnKTtcbiAgICBLbGFzcy5nZXQocHJvdG90eXBlKS5hZGRUb093bk1ldGFkYXRhTGlzdChST1VURV9QQVJBTUVURVJfTElTVF9LRVksIHBhcmFtZXRlckRlZik7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBWaXNpdFBhcmFtZXRlcjxUPihvcHRpb25zPzogUm91dGVQYXJhbWV0ZXJPcHRpb25zPFQ+KTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICBjb25zdCBvcHRzID0gT3B0cy5nZXQob3B0aW9ucyk7XG4gIHJldHVybiAocHJvdG90eXBlOiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJEZWYgPSBuZXcgUGFyYW1ldGVyRGVmaW5pdGlvbi5WYWx1ZVBhcmFtZXRlcihwcm9wZXJ0eUtleS50b1N0cmluZygpLCBvcHRpb25zLCBvcHRzLmdldE9wdGlvbmFsKCdzdG9yZUluVXJsJywgbnVsbCkpO1xuICAgIEtsYXNzLmdldChwcm90b3R5cGUpLmFkZFRvT3duTWV0YWRhdGFMaXN0KFJPVVRFX1BBUkFNRVRFUl9MSVNUX0tFWSwgcGFyYW1ldGVyRGVmKTtcbiAgICAvLyBpbnN0YWxsTWVjaGFuaWNzKHBhcmFtZXRlckRlZiwgcHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgJ0BWaXNpdFBhcmFtZXRlcicpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gVmlzaXRQYXJhbWV0ZXJMaXN0PEU+KG9wdGlvbnM/OiBSb3V0ZUxpc3RQYXJhbWV0ZXJPcHRpb25zPEU+KTogUHJvcGVydHlEZWNvcmF0b3Ige1xuICBjb25zdCBvcHRzID0gT3B0cy5nZXQob3B0aW9ucyk7XG4gIHJldHVybiAocHJvdG90eXBlOiBvYmplY3QsIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IHtcbiAgICBjb25zdCBwYXJhbWV0ZXJEZWYgPSBuZXcgUGFyYW1ldGVyRGVmaW5pdGlvbi5BcnJheVBhcmFtZXRlcihwcm9wZXJ0eUtleS50b1N0cmluZygpLCBvcHRpb25zLCBvcHRzLmdldE9wdGlvbmFsKCdzdG9yZUluVXJsJywgbnVsbCkpO1xuICAgIEtsYXNzLmdldChwcm90b3R5cGUpLmFkZFRvT3duTWV0YWRhdGFMaXN0KFJPVVRFX1BBUkFNRVRFUl9MSVNUX0tFWSwgcGFyYW1ldGVyRGVmKTtcbiAgICAvLyBpbnN0YWxsTWVjaGFuaWNzKHBhcmFtZXRlckRlZiwgcHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgJ0BWaXNpdFBhcmFtZXRlckxpc3QnKTtcbiAgfTtcbn1cbiJdfQ==
@@ -6990,6 +6990,7 @@ class PlaceComponent extends LoadableComponent {
6990
6990
  */
6991
6991
  installAndInitialiseBinding(initialVisit, parameterDef) {
6992
6992
  const model = this[parameterDef.propertyName];
6993
+ assert.notNil(model);
6993
6994
  DebugContext.tag(model, `${this.placeDefinition.component.name}.${parameterDef.propertyName}`);
6994
6995
  const binding = this.registerDisposable(new Binding(this.visitModel, model, {
6995
6996
  toRight(visit) {
@@ -11805,69 +11806,74 @@ var Formatter;
11805
11806
  Formatter.BOOLEAN = new BooleanType();
11806
11807
  })(Formatter || (Formatter = {}));
11807
11808
 
11808
- function installMechanics(parameterDef, prototype, propertyKey, tagPrefix) {
11809
- Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11810
- function getMechanics(instance, propertyName) {
11811
- const key = `__mechanics_${propertyName.toString()}`;
11812
- if (!instance[key]) {
11813
- const backingModel = parameterDef.createBackingModel();
11814
- instance[key] = {
11815
- backingModel: backingModel,
11816
- binding: null
11817
- };
11818
- const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
11819
- DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
11820
- }
11821
- return instance[key];
11822
- }
11823
- Object.defineProperty(prototype, propertyKey, {
11824
- get: function () {
11825
- return getMechanics(this, propertyKey).backingModel;
11826
- },
11827
- set: function (userModel) {
11828
- const mechanics = getMechanics(this, propertyKey);
11829
- // This handles the scenario where we want to push an existing value model (such as a form model)
11830
- // to and from the route.
11831
- if (mechanics.binding) {
11832
- mechanics.binding.dispose();
11833
- }
11834
- if (userModel) {
11835
- mechanics.binding = new Binding(mechanics.backingModel, userModel, {
11836
- toLeft: Functions.identity,
11837
- toRight: Functions.identity
11838
- });
11839
- if (parameterDef.isEmptyValue(userModel.value)) {
11840
- // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
11841
- mechanics.binding.writeRight(); // push the visit into the user model;
11842
- }
11843
- else {
11844
- if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
11845
- console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
11846
- }
11847
- mechanics.binding.writeLeft(); // push the user model into the visit
11848
- }
11849
- }
11850
- }
11851
- });
11852
- }
11809
+ // function installMechanics<M extends HasValue<any>>(parameterDef: ParameterDefinition<any>, prototype: object, propertyKey: string | symbol, tagPrefix: string) {
11810
+ //
11811
+ // Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11812
+ //
11813
+ // function getMechanics(instance: M, propertyName: string | symbol) {
11814
+ // const key = `__mechanics_${propertyName.toString()}`;
11815
+ // if (!instance[key]) {
11816
+ // const backingModel = parameterDef.createBackingModel();
11817
+ // instance[key] = {
11818
+ // backingModel: backingModel,
11819
+ // binding: null as Binding<any, any>
11820
+ // };
11821
+ // const tag = `${tagPrefix}(${prototype.constructor.name}.${propertyKey.toString()})`;
11822
+ // DebugContext.getOrCreate(instance[key].backingModel).tag(tag);
11823
+ // }
11824
+ // return instance[key];
11825
+ // }
11826
+ //
11827
+ // Object.defineProperty(prototype, propertyKey, {
11828
+ // get: function() {
11829
+ // return getMechanics(this, propertyKey).backingModel;
11830
+ // },
11831
+ // set: function(userModel: M) {
11832
+ // const mechanics = getMechanics(this, propertyKey);
11833
+ // // This handles the scenario where we want to push an existing value model (such as a form model)
11834
+ // // to and from the route.
11835
+ // if (mechanics.binding) {
11836
+ // mechanics.binding.dispose();
11837
+ // }
11838
+ // if (userModel) {
11839
+ // mechanics.binding = new Binding(mechanics.backingModel, userModel, {
11840
+ // toLeft: Functions.identity,
11841
+ // toRight: Functions.identity
11842
+ // });
11843
+ // if (parameterDef.isEmptyValue(userModel.value)) {
11844
+ // // console.log(`Push visit to model for ${tag}`, {value: mechanics.backingModel.value});
11845
+ // mechanics.binding.writeRight(); // push the visit into the user model;
11846
+ // } else {
11847
+ // if (!parameterDef.isEmptyValue(mechanics.backingModel.value)) {
11848
+ // console.warn('Assigning a visit model with an existing value to a visit parameter with an existing value. Visit parameter will be overridden');
11849
+ // }
11850
+ // mechanics.binding.writeLeft(); // push the user model into the visit
11851
+ // }
11852
+ // }
11853
+ // }
11854
+ // });
11855
+ // }
11853
11856
  function RouteId(formatter, options) {
11854
11857
  return (prototype, propertyKey) => {
11855
11858
  const parameterDef = new ParameterDefinition.RouteId(propertyKey.toString(), options, formatter);
11856
- installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
11859
+ // installMechanics(parameterDef, prototype, propertyKey, '@RouteId');
11860
+ Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11857
11861
  };
11858
11862
  }
11859
11863
  function VisitParameter(options) {
11860
11864
  const opts = Opts.get(options);
11861
11865
  return (prototype, propertyKey) => {
11862
11866
  const parameterDef = new ParameterDefinition.ValueParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
11863
- installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
11867
+ Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11868
+ // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameter');
11864
11869
  };
11865
11870
  }
11866
11871
  function VisitParameterList(options) {
11867
11872
  const opts = Opts.get(options);
11868
11873
  return (prototype, propertyKey) => {
11869
11874
  const parameterDef = new ParameterDefinition.ArrayParameter(propertyKey.toString(), options, opts.getOptional('storeInUrl', null));
11870
- installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
11875
+ Klass.get(prototype).addToOwnMetadataList(ROUTE_PARAMETER_LIST_KEY, parameterDef);
11876
+ // installMechanics(parameterDef, prototype, propertyKey, '@VisitParameterList');
11871
11877
  };
11872
11878
  }
11873
11879