@c8y/ngx-components 1018.0.32 → 1018.0.33
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.
- package/esm2020/ecosystem/shared/ecosystem.service.mjs +4 -1
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs +3 -0
- package/fesm2015/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs +3 -0
- package/fesm2020/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -362,6 +362,9 @@ export class EcosystemService {
|
|
|
362
362
|
else {
|
|
363
363
|
this.progress.next(this.progress.value + 10);
|
|
364
364
|
}
|
|
365
|
+
if (this.isMicroservice(app)) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
365
368
|
const manifest = await this.getCumulocityJson(archive);
|
|
366
369
|
// A user can upload an app without a Cumulocity JSON file (e.g. a react app).
|
|
367
370
|
// This is allowed and should not trigger a validation error.
|
|
@@ -616,4 +619,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
616
619
|
providedIn: 'root'
|
|
617
620
|
}]
|
|
618
621
|
}], ctorParameters: function () { return [{ type: i1.ModalService }, { type: i1.AlertService }, { type: i1.HumanizeAppNamePipe }, { type: i2.TranslateService }, { type: i3.ApplicationService }, { type: i1.AppStateService }, { type: i1.ZipService }, { type: i3.TenantService }, { type: i3.InventoryService }, { type: i1.WizardModalService }]; } });
|
|
619
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFXZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFVBQVUsRUFDWCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFFWCxNQUFNLG1CQUFtQixDQUFDOzs7OztBQUUzQixN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QUFvQixDQUFDLElBQUksRUFBRSxPQUFPO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyw0QkFBNEIsSUFBSSxPQUFPLEtBQUssZUFBZSxDQUFDLFlBQVksQ0FBQztJQUNoRyxDQUFDOzs2R0E1dEJVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCLGNBRmYsTUFBTTsyRkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25TZXJ2aWNlLFxuICBBcHBsaWNhdGlvblR5cGUsXG4gIElBcHBsaWNhdGlvbixcbiAgSUFwcGxpY2F0aW9uQmluYXJ5LFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uRGVsZXRlUGFyYW1zLFxuICBJQ3VycmVudFRlbmFudCxcbiAgSWRSZWZlcmVuY2UsXG4gIElGZXRjaFJlc3BvbnNlLFxuICBJSWRlbnRpZmllZCxcbiAgSU1hbmFnZWRPYmplY3QsXG4gIElNYW5pZmVzdCxcbiAgSW52ZW50b3J5U2VydmljZSxcbiAgSVJlc3VsdCxcbiAgSVJlc3VsdExpc3QsXG4gIElVcGxvYWRQYXJhbXNPdmVycmlkZSxcbiAgVGVuYW50U2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIEFwcFN0YXRlU2VydmljZSxcbiAgZ2V0dGV4dCxcbiAgSHVtYW5pemVBcHBOYW1lUGlwZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBQYWNrYWdlVHlwZSxcbiAgU3RhdHVzLFxuICBXaXphcmRNb2RhbFNlcnZpY2UsXG4gIFppcFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0LCBncm91cEJ5LCBrZWJhYkNhc2UsIHBpY2ssIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGd0LCBjb2VyY2UgfSBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgRWNvc3lzdGVtRXJyb3IgfSBmcm9tICcuL2Vjb3N5c3RlbS1lcnJvcic7XG5pbXBvcnQgeyBBUFBfU1RBVEUsIEVSUk9SX01FU1NBR0VTIH0gZnJvbSAnLi9lY29zeXN0ZW0uY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU3RhdGUsXG4gIEVjb3N5c3RlbVdpemFyZHMsXG4gIEVSUk9SX1RZUEUsXG4gIExpY2Vuc2VkQXBwbGljYXRpb25QbHVnaW5cbn0gZnJvbSAnLi9lY29zeXN0ZW0ubW9kZWwnO1xuXG5jb25zdCBDVU1VTE9DSVRZX0pTT04gPSAnY3VtdWxvY2l0eS5qc29uJztcbmNvbnN0IE1JQ1JPU0VSVklDRV9OQU1FX01BWF9MRU5HVEggPSAyMztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRWNvc3lzdGVtU2VydmljZSB7XG4gIGFwcERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4oKTtcbiAgcHJvZ3Jlc3M6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KG51bGwpO1xuICBwcml2YXRlIGFwcHNHcm91cGVkQnlDb250ZXh0UGF0aDogYW55W107XG4gIHByaXZhdGUgeGhyOiBYTUxIdHRwUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGh1bWFuaXplQXBwTmFtZTogSHVtYW5pemVBcHBOYW1lUGlwZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwU2VydmljZTogWmlwU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgd2l6YXJkTW9kYWxTZXJ2aWNlOiBXaXphcmRNb2RhbFNlcnZpY2VcbiAgKSB7fVxuXG4gIGdldFVuaXF1ZUFwcENvbmZpZyhzcmNBcHA6IElBcHBsaWNhdGlvbiwgZXhpc3RpbmdBcHBzOiBJQXBwbGljYXRpb25bXSk6IElBcHBsaWNhdGlvbiB7XG4gICAgbGV0IGFwcDogSUFwcGxpY2F0aW9uID0ge1xuICAgICAgbmFtZTogc3JjQXBwLm5hbWUsXG4gICAgICBrZXk6IHNyY0FwcC5rZXksXG4gICAgICBjb250ZXh0UGF0aDogc3JjQXBwLmNvbnRleHRQYXRoXG4gICAgfTtcbiAgICBmb3IgKGxldCByZXRyeU5vID0gMDsgcmV0cnlObyA8IDk7ICkge1xuICAgICAgaWYgKHRoaXMuY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKGV4aXN0aW5nQXBwcywgYXBwLCByZXRyeU5vKSkge1xuICAgICAgICByZXRyeU5vKys7XG4gICAgICAgIGFwcCA9IHtcbiAgICAgICAgICBuYW1lOiBbc3JjQXBwLm5hbWUsIHJldHJ5Tm9dLmpvaW4oJy0nKSxcbiAgICAgICAgICBrZXk6IFtzcmNBcHAua2V5LCByZXRyeU5vXS5qb2luKCctJyksXG4gICAgICAgICAgY29udGV4dFBhdGg6IFtzcmNBcHAuY29udGV4dFBhdGgsIHJldHJ5Tm9dLmpvaW4oJy0nKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21tdW5pdHkgcGx1Z2lucyBuZWVkIHRvIHZlcmlmeSB0aGUgbGljZW5zZSBhZ3JlZW1lbnQuIElmIGEgcGFja2FnZSBpcyBhIGNvbW11bml0eVxuICAgKiBwYWNrYWdlLCB0aGUgbGljZW5zZSBpcyBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpbnNUb0luc3RhbGwgVGhlIGxpc3Qgb2YgcGx1Z2lucyB0byBpbnN0YWxsLlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbnN0YWxsYXRpb24gY2FuIGNvbnRpbnVlLlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5TGljZW5zZXMocGx1Z2luc1RvSW5zdGFsbDogQXJyYXk8TGljZW5zZWRBcHBsaWNhdGlvblBsdWdpbj4pIHtcbiAgICBsZXQgX3Jlc29sdmU7XG4gICAgY29uc3QgcmVzdWx0OiBQcm9taXNlPGJvb2xlYW4+ID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBwbHVnaW5zVG9JbnN0YWxsID0gcGx1Z2luc1RvSW5zdGFsbC5maWx0ZXIocGx1Z2luID0+IHBsdWdpbi50eXBlICE9PSBQYWNrYWdlVHlwZS5DVVNUT00pO1xuXG4gICAgaWYgKHBsdWdpbnNUb0luc3RhbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogYW55ID0ge1xuICAgICAgaWQ6IEVjb3N5c3RlbVdpemFyZHMuTElDRU5TRV9DT05GSVJNLFxuICAgICAgY29tcG9uZW50SW5pdGlhbFN0YXRlOiB7XG4gICAgICAgIHBsdWdpbnNUb0luc3RhbGxcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsT3B0aW9ucyA9IHsgaW5pdGlhbFN0YXRlIH07XG4gICAgY29uc3Qgd2l6YXJkID0gdGhpcy53aXphcmRNb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbE9wdGlvbnMpO1xuXG4gICAgd2l6YXJkLmNvbnRlbnQub25DbG9zZS5zdWJzY3JpYmUoY29uZmlybWVkID0+IHtcbiAgICAgIF9yZXNvbHZlKGNvbmZpcm1lZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDb21wYXJlcyBjdXJyZW50bHkgZGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvbiB3aXRoIGFwcGxpY2F0aW9uIHZlcnNpb24gdGFnZ2VkIGFzIFwibGF0ZXN0XCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24gRGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvblxuICAgKiBAcGFyYW0ge29iamVjdH0gbGF0ZXN0QXBwIExhdGVzdCBhcHBsaWNhdGlvbiB2ZXJzaW9uIG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGxhdGVzdCB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50LCBvdGhlcndpc2UgZmFsc2VcbiAgICovXG4gIHNob3VsZFVwZ3JhZGVQYWNrYWdlKGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb246IHN0cmluZywgbGF0ZXN0QXBwOiBJQXBwbGljYXRpb25WZXJzaW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uID0gbGF0ZXN0QXBwPy52ZXJzaW9uO1xuXG4gICAgaWYgKCFsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24gfHwgIWN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3QoY29lcmNlKGxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiksIGNvZXJjZShjdXJyZW50QXBwbGljYXRpb25WZXJzaW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VhcmNoZWQgdGFnXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IGFwcGxpY2F0aW9uVmVyc2lvbnMgQXJyYXkgd2l0aCBhbGwgYXZhaWxhYmxlIHZlcnNpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFNlYXJjaGVkIHRhZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNlYXJjaGVkIHRhZ1xuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25WZXJzaW9uT2JqZWN0QnlUYWcoXG4gICAgYXBwbGljYXRpb25WZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIHRhZ05hbWU6IHN0cmluZ1xuICApOiBJQXBwbGljYXRpb25WZXJzaW9uIHtcbiAgICByZXR1cm4gYXBwbGljYXRpb25WZXJzaW9ucz8uZmluZChlbGVtZW50ID0+IGVsZW1lbnQudGFncy5pbmNsdWRlcyh0YWdOYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRBcHBsaWNhdGlvbihhcHBJZDogSWRSZWZlcmVuY2UpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGV0YWlsKGFwcElkKSkuZGF0YTtcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQXBwbGljYXRpb24+PiB7XG4gICAgY29uc3QgZmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBwYWdlU2l6ZTogMjAwMCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKGZpbHRlciwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5VGVuYW50KGN1cnJlbnRUZW5hbnQubmFtZSwgZmlsdGVyKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1pY3Jvc2VydmljZXMoKTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoKSkuZGF0YTtcbiAgICBjb25zdCBtaWNyb3NlcnZpY2VzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNNaWNyb3NlcnZpY2UoYXBwKSk7XG4gICAgcmV0dXJuIG1pY3Jvc2VydmljZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRXZWJBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcikpLmRhdGE7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzQXBwbGljYXRpb24oYXBwKSk7XG4gICAgdGhpcy5hcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGggPSBncm91cEJ5KHdlYkFwcHMsICdjb250ZXh0UGF0aCcpO1xuICAgIHJldHVybiB3ZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmVhdHVyZUFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyKSkuZGF0YTtcbiAgICBjb25zdCB3ZWJBcHBzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNGZWF0dXJlKGFwcCkpO1xuICAgIHJldHVybiB3ZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UGFja2FnZUFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IE9iamVjdC5hc3NpZ24oe30sIGN1c3RvbUZpbHRlcik7XG4gICAgY29uc3Qgc2hhcmVkRmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQsXG4gICAgICAgIHR5cGU6ICdIT1NURUQnLFxuICAgICAgICBwYWdlU2l6ZTogMjAwMFxuICAgICAgfSxcbiAgICAgIGN1c3RvbUZpbHRlclxuICAgICk7XG4gICAgY29uc3QgW3sgZGF0YTogYXBwcyB9LCB7IGRhdGE6IHNoYXJlZCB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0QXBwbGljYXRpb25zKGZpbHRlciksXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0KHNoYXJlZEZpbHRlcilcbiAgICBdKTtcbiAgICBjb25zdCB3ZWJBcHBzID0gWy4uLmFwcHMsIC4uLnNoYXJlZF0uZmlsdGVyKGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApKTtcbiAgICAvLyBhbiBhcHAgY291bGQgYmUgc3Vic2NyaWJlZCB0byBhIHRlbmFudCwgYnV0IGFsc28gaGF2ZSBpdCdzIGF2YWlsYWJpbGl0eSBzZXQgdG8gU0hBUkVELCBpbiB0aGF0IGNhc2UgaXQgd291bGQgb2NjdXIgdHdpY2UuXG4gICAgY29uc3QgdW5pcVdlYkFwcHMgPSB1bmlxQnkod2ViQXBwcywgKGFwcDogSUFwcGxpY2F0aW9uKSA9PiBhcHAuaWQpO1xuICAgIHJldHVybiB1bmlxV2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGlzTWljcm9zZXJ2aWNlSG9zdGluZ0FsbG93ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlOYW1lKCdmZWF0dXJlLW1pY3Jvc2VydmljZS1ob3N0aW5nJyk7XG4gICAgcmV0dXJuICEhYXBwcy5maWx0ZXIoYXBwID0+IGFwcC5vd25lcj8udGVuYW50Py5pZCA9PT0gJ21hbmFnZW1lbnQnKS5sZW5ndGg7XG4gIH1cblxuICBjYW5PcGVuQXBwSW5Ccm93c2VyKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNOb3RBRmVhdHVyZSA9ICF0aGlzLmlzRmVhdHVyZShhcHApO1xuICAgIGNvbnN0IGhhc1Byb3BlclR5cGUgPSBbXG4gICAgICBBcHBsaWNhdGlvblR5cGUuSE9TVEVELFxuICAgICAgQXBwbGljYXRpb25UeXBlLkVYVEVSTkFMLFxuICAgICAgQXBwbGljYXRpb25UeXBlLlJFUE9TSVRPUllcbiAgICBdLmluY2x1ZGVzKGFwcC50eXBlKTtcbiAgICBjb25zdCBpc05vdFBhY2thZ2UgPSAhdGhpcy5pc1BhY2thZ2UoYXBwKTtcbiAgICByZXR1cm4gaXNOb3RBRmVhdHVyZSAmJiBoYXNQcm9wZXJUeXBlICYmIGlzTm90UGFja2FnZTtcbiAgfVxuXG4gIG9wZW5BcHAoYXBwKSB7XG4gICAgd2luZG93Lm9wZW4odGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0SHJlZihhcHApLCAnX2JsYW5rJywgJ25vb3BlbmVyLG5vcmVmZXJyZXInKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzT3duZXIoYXBwKSAmJiAoKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKSB8fCAhdGhpcy5pc0N1cnJlbnRBcHAoYXBwKSlcbiAgICApO1xuICB9XG5cbiAgaXNPd25lcihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICBjb25zdCBhcHBPd25lciA9IGdldChhcHAsICdvd25lci50ZW5hbnQuaWQnKTtcbiAgICByZXR1cm4gY3VycmVudFRlbmFudC5uYW1lID09PSBhcHBPd25lcjtcbiAgfVxuXG4gIGlzRmVhdHVyZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWFwcC5uYW1lLm1hdGNoKC9mZWF0dXJlLS8pO1xuICB9XG5cbiAgaXNNaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLnR5cGUgPT09ICdNSUNST1NFUlZJQ0UnO1xuICB9XG5cbiAgaXNFeHRlcm5hbChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAudHlwZSA9PT0gJ0VYVEVSTkFMJztcbiAgfVxuXG4gIGlzUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAubWFuaWZlc3Q/LmlzUGFja2FnZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGlzUGx1Z2luKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC5tYW5pZmVzdD8ucGFja2FnZSA9PT0gJ3BsdWdpbic7XG4gIH1cblxuICBjYW5jZWxBcHBDcmVhdGlvbihhcHA6IElBcHBsaWNhdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9XG4gICAgaWYgKGFwcCkge1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVXBsb2FkUHJvZ3Jlc3MoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgY29uc3QgY3VycmVudFByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy52YWx1ZTtcbiAgICAgIHRoaXMucHJvZ3Jlc3MubmV4dChjdXJyZW50UHJvZ3Jlc3MgKyAoZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpICogKDk1IC0gY3VycmVudFByb2dyZXNzKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QXBwQWN0aXZlVmVyc2lvbihhcHA6IElBcHBsaWNhdGlvbiwgYWN0aXZlVmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoeyBpZDogYXBwLmlkLCBhY3RpdmVWZXJzaW9uSWQgfSk7XG4gIH1cblxuICBzZXRQYWNrYWdlVmVyc2lvblRhZyhhcHA6IElBcHBsaWNhdGlvbiwgdmVyc2lvbjogc3RyaW5nLCB0YWdzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyhhcHAsIHZlcnNpb24sIHRhZ3MpO1xuICB9XG5cbiAgZGVsZXRlUGFja2FnZVZlcnNpb24oYXBwOiBJQXBwbGljYXRpb24sIHBhcmFtczogSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShhcHAsIHBhcmFtcyk7XG4gIH1cblxuICBnZXRIdW1hbml6ZWRBcHBOYW1lKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5odW1hbml6ZUFwcE5hbWUudHJhbnNmb3JtKGFwcC5uYW1lKS5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGNyZWF0ZUNvbmZpZyhhcHA6IElBcHBsaWNhdGlvbiwgZm9ybUdyb3VwVmFsdWU6IEZvcm1Hcm91cCk6IFBhcnRpYWw8SUFwcGxpY2F0aW9uPiB7XG4gICAgY29uc3QgeyBpZCwgdHlwZSwgYXZhaWxhYmlsaXR5IH0gPSBhcHA7XG4gICAgbGV0IGNvbmZpZyA9IHBpY2soZm9ybUdyb3VwVmFsdWUsIFsnbmFtZScsICdrZXknLCAnY29udGV4dFBhdGgnXSk7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgaXNTZXR1cDogdHJ1ZSxcbiAgICAgIGlkLFxuICAgICAgdHlwZSxcbiAgICAgIGF2YWlsYWJpbGl0eVxuICAgIH07XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcE1hbmlmZXN0KFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgc291cmNlUGFja2FnZTogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8eyByZXM6IElGZXRjaFJlc3BvbnNlOyBkYXRhOiBhbnkgfT4ge1xuICAgIGNvbnN0IHsgaWQgfSA9IGFwcGxpY2F0aW9uO1xuICAgIGNvbnN0IGNsZWFuZWRBcHAgPSB0aGlzLnJlbW92ZUFwcFByb3BlcnRpZXMoYXBwbGljYXRpb24pO1xuICAgIGlmICghY2xlYW5lZEFwcC5tYW5pZmVzdCkge1xuICAgICAgY2xlYW5lZEFwcC5tYW5pZmVzdCA9IHt9O1xuICAgIH1cbiAgICBjbGVhbmVkQXBwLm1hbmlmZXN0LmlzUGFja2FnZSA9IGZhbHNlO1xuICAgIGNsZWFuZWRBcHAubWFuaWZlc3Quc291cmNlID0gc291cmNlUGFja2FnZS5pZDtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZVxuICAgICAgLmJpbmFyeShpZClcbiAgICAgIC51cGRhdGVGaWxlcyhbeyBwYXRoOiBDVU1VTE9DSVRZX0pTT04sIGNvbnRlbnRzOiBKU09OLnN0cmluZ2lmeShjbGVhbmVkQXBwKSBhcyBhbnkgfV0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdEFyY2hpdmVzKGFwcElkOiBzdHJpbmcgfCBudW1iZXIgfCBJQXBwbGljYXRpb24pOiBQcm9taXNlPElBcHBsaWNhdGlvbkJpbmFyeVtdPiB7XG4gICAgY29uc3QgZmlsdGVyID0ge1xuICAgICAgcGFnZVNpemU6IDEwMFxuICAgIH07XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwSWQpLmxpc3QoZmlsdGVyKSkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFyY2hpdmUoYXJjaGl2ZTogSUFwcGxpY2F0aW9uQmluYXJ5LCBhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGh1bWFuaXplZEFyY2hpdmVOYW1lID0gYXdhaXQgdGhpcy5nZXRIdW1hbml6ZWRBcHBOYW1lKGFyY2hpdmUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBhcmNoaXZlJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgYXJjaGl2ZSBcInt7IGh1bWFuaXplZEFyY2hpdmVOYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICksXG4gICAgICAgICAgeyBodW1hbml6ZWRBcmNoaXZlTmFtZSB9XG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgIHsgb2s6IGdldHRleHQoJ0RlbGV0ZScpLCBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpIH1cbiAgICAgICk7XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKS5kZWxldGUoYXJjaGl2ZS5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FyY2hpdmUgZGVsZXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoZ2V0KGV4LCAnZGF0YS5tZXNzYWdlJyksIGV4LmRhdGEpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5jZWxsZWQnKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcmNoaXZlTWFuYWdlZE9iamVjdChiaW5hcnlJZDogc3RyaW5nKTogUHJvbWlzZTxJTWFuYWdlZE9iamVjdD4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChiaW5hcnlJZCkpLmRhdGE7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZEFyY2hpdmUoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgYXJjaGl2ZTogUGljazxJQXBwbGljYXRpb25CaW5hcnksICduYW1lJyB8ICdpZCc+XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiaW5hcnkgPSBhd2FpdCB0aGlzLmdldEJpbmFyeShhcHAsIGFyY2hpdmUpO1xuICAgICAgY29uc3QgZmlsZUJpbmFyeSA9IG5ldyBCbG9iKFtiaW5hcnldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi94LXppcC1jb21wcmVzc2VkJyB9KTtcbiAgICAgIHNhdmVBcyhmaWxlQmluYXJ5LCBhcmNoaXZlLm5hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwKGFwcDogSUFwcGxpY2F0aW9uLCBkZWxldGVPbkZhaWx1cmUgPSBmYWxzZSk6IFByb21pc2U8SVJlc3VsdDxJQXBwbGljYXRpb24+PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoYXBwKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICAgIGlmIChkZWxldGVPbkZhaWx1cmUpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLkFQUExJQ0FUSU9OX0NSRUFUSU9OX0ZBSUxFRCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlQXBwKGFwcDogSUFwcGxpY2F0aW9uLCBzaWxlbnQgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGh1bWFuaXplZEFwcE5hbWUgPSBhd2FpdCB0aGlzLmdldEh1bWFuaXplZEFwcE5hbWUoYXBwKTtcbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYXBwbGljYXRpb24nKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBhcHBsaWNhdGlvbiBcInt7IGh1bWFuaXplZEFwcE5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7IGh1bWFuaXplZEFwcE5hbWUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9XG4gICAgICApO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGUoYXBwLmlkKTtcbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcHBsaWNhdGlvbiBkZWxldGVkLicpKTtcbiAgICB9XG4gICAgdGhpcy5hcHBEZWxldGVkLmVtaXQoYXBwKTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrSWZTdWJzY3JpYmVkKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudCA9IGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5jdXJyZW50KCk7XG4gICAgY29uc3Qgc3Vic2NyaWJlZEFwcHMgPSBjdXJyZW50VGVuYW50LmRhdGEuYXBwbGljYXRpb25zLnJlZmVyZW5jZXM7XG4gICAgcmV0dXJuIHN1YnNjcmliZWRBcHBzLnNvbWUoYXBwbGljYXRpb24gPT4gYXBwbGljYXRpb24uYXBwbGljYXRpb24uaWQgPT09IGFwcC5pZCk7XG4gIH1cblxuICBhc3luYyBzdWJzY3JpYmVBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudGVuYW50U2VydmljZS5zdWJzY3JpYmVBcHBsaWNhdGlvbihjdXJyZW50VGVuYW50LCBhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdTdWNjZXNzZnVsbHkgc3Vic2NyaWJlZCB0byBhcHBsaWNhdGlvbi4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdW5zdWJzY3JpYmVBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudGVuYW50U2VydmljZS51bnN1YnNjcmliZUFwcGxpY2F0aW9uKGN1cnJlbnRUZW5hbnQsIGFwcCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1N1Y2Nlc3NmdWxseSB1bnN1YnNjcmliZWQgZnJvbSBhcHBsaWNhdGlvbi4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaXNWYWxpZEFwcFR5cGUoYXJjaGl2ZTogRmlsZSwgYXBwVHlwZTogQXBwbGljYXRpb25UeXBlKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUeXBlID0gYXdhaXQgdGhpcy5nZXRBcHBUeXBlKGFyY2hpdmUpO1xuICAgICAgaWYgKGN1cnJlbnRUeXBlICE9PSBhcHBUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLlRZUEVfVkFMSURBVElPTik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2dyZXNzLm5leHQodGhpcy5wcm9ncmVzcy52YWx1ZSArIDEwKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLlRZUEVfVkFMSURBVElPTik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBsb2FkQXJjaGl2ZVRvQXBwKFxuICAgIGFyY2hpdmU6IEZpbGUsXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgaXNOZXdWZXJzaW9uID0gZmFsc2VcbiAgKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICBsZXQgdXBsb2FkT3ZlcnJpZGVzOiBJVXBsb2FkUGFyYW1zT3ZlcnJpZGU7XG4gICAgaWYgKGlzTmV3VmVyc2lvbikge1xuICAgICAgdXBsb2FkT3ZlcnJpZGVzID0gYXdhaXQgdGhpcy5nZXRVcGxvYWRPdmVycmlkZXMoYXJjaGl2ZSwgYXBwKTtcbiAgICB9XG4gICAgY29uc3QgYmluYXJ5U2VydmljZSA9IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApO1xuICAgIHRoaXMueGhyID0gYmluYXJ5U2VydmljZS51cGxvYWRXaXRoUHJvZ3Jlc3NYaHIoXG4gICAgICBhcmNoaXZlLFxuICAgICAgdGhpcy51cGRhdGVVcGxvYWRQcm9ncmVzcy5iaW5kKHRoaXMpLFxuICAgICAgJycsXG4gICAgICB1cGxvYWRPdmVycmlkZXNcbiAgICApO1xuXG4gICAgY29uc3QgYmluYXJ5TW8gPSBhd2FpdCBiaW5hcnlTZXJ2aWNlLmdldFhNTEh0dHBSZXNwb25zZSh0aGlzLnhocik7XG5cbiAgICAvLyBUT0RPIGNvbW1lbnRlZCBpdCBkdWUgdG86IGh0dHBzOi8vY3VtdWxvY2l0eS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9NVE0tNDg1NTNcbiAgICAvLyBBZGQgaXQgYmFjayB3aGVuIEJFIGZpeGVzIGlzc3VlcyB3aXRoIGFjdGl2ZVZlcnNpb24uXG4gICAgLy8gaWYgKGlzTmV3VmVyc2lvbikge1xuICAgIC8vICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb24oYXBwKTtcbiAgICAvLyB9XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnNldEFwcEFjdGl2ZVZlcnNpb24oYXBwLCAoYmluYXJ5TW8uYmluYXJ5SWQgfHwgYmluYXJ5TW8uaWQpIGFzIHN0cmluZykpLmRhdGE7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZUFyY2hpdmVUb0FwcENvbXBhdGliaWxpdHkoYXJjaGl2ZTogRmlsZSwgYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBhcHBUeXBlID0gYXdhaXQgdGhpcy5nZXRBcHBUeXBlKGFyY2hpdmUpO1xuICAgIGlmIChhcHBUeXBlICE9PSBhcHAudHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuSU5WQUxJRF9BUFBMSUNBVElPTik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvZ3Jlc3MubmV4dCh0aGlzLnByb2dyZXNzLnZhbHVlICsgMTApO1xuICAgIH1cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb24oYXJjaGl2ZSk7XG4gICAgLy8gQSB1c2VyIGNhbiB1cGxvYWQgYW4gYXBwIHdpdGhvdXQgYSBDdW11bG9jaXR5IEpTT04gZmlsZSAoZS5nLiBhIHJlYWN0IGFwcCkuXG4gICAgLy8gVGhpcyBpcyBhbGxvd2VkIGFuZCBzaG91bGQgbm90IHRyaWdnZXIgYSB2YWxpZGF0aW9uIGVycm9yLlxuICAgIGlmICghbWFuaWZlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZVBhY2thZ2VLZXlBbmRDb250ZXh0UGF0aChtYW5pZmVzdCwgYXBwKTtcbiAgfVxuXG4gIGFzeW5jIGdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmU6IEZpbGUpOiBQcm9taXNlPElNYW5pZmVzdCB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYzh5TWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgIHJldHVybiBjOHlNYW5pZmVzdDtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlQXBwRm9yQXJjaGl2ZShhcmNoaXZlLCBpc1BhY2thZ2VUeXBlQXJjaGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICBsZXQgaXNQYWNrYWdlID0gZmFsc2U7XG4gICAgY29uc3QgYXBwVHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICBsZXQgYXBwTW9kZWw6IGFueSA9IHt9O1xuICAgIGNvbnN0IHN1cHBvcnRlZEFwcFR5cGVzID0gW0FwcGxpY2F0aW9uVHlwZS5IT1NURUQsIEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0VdO1xuXG4gICAgaWYgKHN1cHBvcnRlZEFwcFR5cGVzLmluY2x1ZGVzKGFwcFR5cGUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhcHBNb2RlbCA9IGF3YWl0IHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb24kKGFyY2hpdmUpLnRvUHJvbWlzZSgpO1xuICAgICAgICBpc1BhY2thZ2UgPSBhcHBNb2RlbC5pc1BhY2thZ2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmcsIHdlIGFsbG93IGhhdmluZyBIT1NURUQgYXBwbGljYXRpb25zIHdpdGhvdXQgdGhlIG1hbmlmZXN0IGZpbGVcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0QmFzZU5hbWVGcm9tQXJjaGl2ZU9yQXBwTW9kZWwoYXJjaGl2ZSwgYXBwVHlwZSwgYXBwTW9kZWwpO1xuICAgIGNvbnN0IGNsZWFyZWROYW1lID0gdGhpcy5yZW1vdmVGb3JiaWRkZW5DaGFyYWN0ZXJzKG5hbWUpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXBwS2V5KGFwcE1vZGVsLCBjbGVhcmVkTmFtZSk7XG4gICAgY29uc3QgY29udGV4dFBhdGggPSB0aGlzLmdldENvbnRleHRQYXRoKGFwcE1vZGVsLCBuYW1lKTtcblxuICAgIGNvbnN0IGFwcFRvU2F2ZSA9IHtcbiAgICAgIHJlc291cmNlc1VybDogJy8nLFxuICAgICAgdHlwZTogYXBwVHlwZSxcbiAgICAgIG5hbWUsXG4gICAgICBrZXksXG4gICAgICBjb250ZXh0UGF0aFxuICAgIH07XG5cbiAgICBpZiAoaXNQYWNrYWdlVHlwZUFyY2hpdmUgJiYgIWlzUGFja2FnZSkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuSU5WQUxJRF9QQUNLQUdFKTtcbiAgICB9IGVsc2UgaWYgKCFpc1BhY2thZ2VUeXBlQXJjaGl2ZSAmJiBpc1BhY2thZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfQVBQTElDQVRJT04pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc05hbWVMZW5ndGhFeGNlZWRlZChuYW1lLCBhcHBUeXBlKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICAgIGVycm9yLm5hbWUgPSBFUlJPUl9UWVBFLk1JQ1JPU0VSVklDRV9OQU1FX1RPT19MT05HO1xuICAgICAgZXJyb3IubWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KEVSUk9SX01FU1NBR0VTW2Vycm9yLm5hbWVdLCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIG1heENoYXJzOiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKHtcbiAgICAgICAgLi4uYXBwVG9TYXZlLFxuICAgICAgICBtYW5pZmVzdDoge1xuICAgICAgICAgIGlzUGFja2FnZSxcbiAgICAgICAgICAuLi4oYXBwTW9kZWw/LnBhY2thZ2UgJiYgeyBwYWNrYWdlOiBhcHBNb2RlbC5wYWNrYWdlIH0pXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBJTWFuaWZlc3RcbiAgICAgIH0pXG4gICAgKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgcmVhY3RpdmF0ZUFyY2hpdmUoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UucmVhY3RpdmF0ZUFyY2hpdmUoYXBwLmlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gcmVhY3RpdmF0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZU9sZGVzdEFyY2hpdmUoYXBwOiBJQXBwbGljYXRpb24sIGFyY2hpdmVzOiBJQXBwbGljYXRpb25CaW5hcnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBvbGRlc3QgYXJjaGl2ZSBhbmQgY29udGludWUnKSxcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnVXAgdG8gNiBhcmNoaXZlcyBjYW4gYmUgc2F2ZWQgaW4gdGhlIHBsYXRmb3JtLiBJZiB5b3UgdXBsb2FkIGEgbmV3IGFyY2hpdmUsIHRoZSBvbGRlc3QgYXJjaGl2ZSB0aGF0IGlzIG5vdCBhY3RpdmUgd2lsbCBiZSBkZWxldGVkLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLklORk8sXG4gICAgICAgIHsgb2s6IGdldHRleHQoJ0RlbGV0ZSBhbmQgY29udGludWUnKSB9XG4gICAgICApO1xuICAgICAgY29uc3QgYXJjaGl2ZVRvRGVsZXRlID0gYXJjaGl2ZXNbYXJjaGl2ZXMubGVuZ3RoIC0gMl07XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKS5kZWxldGUoYXJjaGl2ZVRvRGVsZXRlLmlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXJjaGl2ZSBkZWxldGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICB9XG4gIH1cblxuICBnZXRBcHBTdGF0ZShhcHA6IElBcHBsaWNhdGlvbik6IEFwcGxpY2F0aW9uU3RhdGUge1xuICAgIGlmICghdGhpcy5pc093bmVyKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuU1VCU0NSSUJFRDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbnBhY2tlZChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlVOUEFDS0VEO1xuICAgIH0gZWxzZSBpZiAoYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5FWFRFUk5BTCkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5FWFRFUk5BTDtcbiAgICB9XG4gICAgcmV0dXJuIEFQUF9TVEFURS5DVVNUT007XG4gIH1cblxuICBnZXRQYWNrYWdlQ29udGVudFN0YXRlKGFwcDogSUFwcGxpY2F0aW9uKTogQXBwbGljYXRpb25TdGF0ZSB7XG4gICAgaWYgKCF0aGlzLmlzUGFja2FnZShhcHApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUGFja2FnZUJsdWVwcmludChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfQkxVRVBSSU5UO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BsdWdpbnNQYWNrYWdlKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9QTFVHSU47XG4gICAgfVxuICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9VTktOT1dOO1xuICB9XG5cbiAgaXNQYWNrYWdlQmx1ZXByaW50KGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYWNrYWdlKGFwcCkgJiYgYXBwLm1hbmlmZXN0LnBhY2thZ2UgPT09ICdibHVlcHJpbnQnO1xuICB9XG5cbiAgaXNQbHVnaW5zUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFja2FnZShhcHApICYmIGFwcC5tYW5pZmVzdC5wYWNrYWdlID09PSAncGx1Z2luJztcbiAgfVxuXG4gIGlzVW5wYWNrZWQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LnNvdXJjZTtcbiAgfVxuXG4gIGhhc0V4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LmV4cG9ydHM/Lmxlbmd0aDtcbiAgfVxuXG4gIGlzQXBwbGljYXRpb24oYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXBwLnR5cGUgIT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgJiYgIXRoaXMuaXNGZWF0dXJlKGFwcCkgJiYgIXRoaXMuaXNQYWNrYWdlKGFwcClcbiAgICApO1xuICB9XG5cbiAgaXNDdXN0b21NaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc093bmVyKGFwcCkgJiYgYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cblxuICBhc3luYyBnZXRCaW5hcnkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgYXJjaGl2ZTogSUFwcGxpY2F0aW9uQmluYXJ5IHwgSUlkZW50aWZpZWRcbiAgKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIGxldCBiaW5hcnk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRvd25sb2FkQXJjaGl2ZShhcmNoaXZlLmlkKTtcbiAgICAgIGJpbmFyeSA9IGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIobXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmFyeTtcbiAgfVxuXG4gIGFzeW5jIGlzT3ZlcndyaXR0ZW5CeUN1c3RvbUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAhdGhpcy5pc093bmVyKGFwcCkgJiYgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKTtcbiAgfVxuXG4gIGFzeW5jIGhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldFdlYkFwcGxpY2F0aW9ucygpO1xuICAgIH1cbiAgICByZXR1cm4gYXBwLmNvbnRleHRQYXRoICYmIHRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoW2FwcC5jb250ZXh0UGF0aF0/Lmxlbmd0aCA9PT0gMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgc2V0QXZhaWxhYmlsaXR5VG9Qcml2YXRlSWZOb3RTZXRBbHJlYWR5KGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBhcHAuYXZhaWxhYmlsaXR5ID0gQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuUFJJVkFURTtcbiAgICByZXR1cm4gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGFuIGVycm9yIGRpYWxvZy5cbiAgICogQHBhcmFtIGVycm9yIEVpdGhlciBhIHNlcnZlciBlcnJvciBvciBhbiBpbnRlcm5hbCBbW0Vjb3N5c3RlbUVycm9yXV0uXG4gICAqL1xuICBhbGVydEVycm9yKGVycm9yOiBFcnJvciB8IEVjb3N5c3RlbUVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWNvc3lzdGVtRXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihlcnJvci5tZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3Q6IElNYW5pZmVzdCwgYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0UGF0aCA9IGdldChtYW5pZmVzdCwgJ2NvbnRleHRQYXRoJyk7XG4gICAgY29uc3QgYXBwS2V5ID0gZ2V0KG1hbmlmZXN0LCAna2V5Jyk7XG4gICAgaWYgKGNvbnRleHRQYXRoICE9PSBhcHAuY29udGV4dFBhdGggfHwgYXBwS2V5ICE9PSBhcHAua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5LRVlfT1JfQ09OVEVYVF9QQVRIX01JU01BVENIKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFwcEtleShhcHBNb2RlbDogSUFwcGxpY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBrZXkgPSBhcHBNb2RlbD8ua2V5O1xuICAgIGlmICgha2V5KSB7XG4gICAgICBrZXkgPSBgJHtrZWJhYkNhc2UobmFtZSl9LWtleWA7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHRQYXRoKGFwcE1vZGVsOiBJQXBwbGljYXRpb24sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwcE1vZGVsPy5jb250ZXh0UGF0aCB8fCBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZvcmJpZGRlbkNoYXJhY3RlcnMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTktX10vZywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0N1cnJlbnRBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUuYXBwO1xuICAgIHJldHVybiBjdXJyZW50QXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGg7XG4gIH1cblxuICBwcml2YXRlIGdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXBTZXJ2aWNlLmdldEpzb25EYXRhKGFyY2hpdmUsIHtcbiAgICAgIGZpbGVuYW1lOiBDVU1VTE9DSVRZX0pTT05cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBwVHlwZShhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxBcHBsaWNhdGlvblR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSlcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oXG4gICAgICAgIGRhdGEgPT5cbiAgICAgICAgICBnZXQoZGF0YSwgJ3R5cGUnKSB8fFxuICAgICAgICAgIChnZXQoZGF0YSwgJ2FwaVZlcnNpb24nKSA/IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgOiBBcHBsaWNhdGlvblR5cGUuSE9TVEVEKVxuICAgICAgKVxuICAgICAgLmNhdGNoKCgpID0+IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCYXNlTmFtZUZyb21BcmNoaXZlT3JBcHBNb2RlbChcbiAgICBhcmNoaXZlOiBhbnksXG4gICAgYXBwVHlwZTogQXBwbGljYXRpb25UeXBlLFxuICAgIGFwcE1vZGVsPzogSUFwcGxpY2F0aW9uXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGJhc2VOYW1lID0gYXBwTW9kZWw/Lm5hbWUgfHwgYXJjaGl2ZS5uYW1lLnJlcGxhY2UoL1xcLnppcCQvaSwgJycpO1xuICAgIGlmIChhcHBUeXBlID09PSAnTUlDUk9TRVJWSUNFJykge1xuICAgICAgYmFzZU5hbWUgPSB0aGlzLnJlbW92ZVZlcnNpb25Gcm9tTmFtZShiYXNlTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKFxuICAgIGV4aXN0aW5nQXBwczogSUFwcGxpY2F0aW9uW10sXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcmV0cnlObzogbnVtYmVyXG4gICk6IElBcHBsaWNhdGlvbiB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQXBwcy5maW5kKFxuICAgICAgZXhpc3RpbmdBcHAgPT5cbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gYXBwLm5hbWUgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBhcHAua2V5IHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGggfHxcbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gW2FwcC5uYW1lLCByZXRyeU5vXS5qb2luKCctJykgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBbYXBwLmtleSwgcmV0cnlOb10uam9pbignLScpIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBbYXBwLmNvbnRleHRQYXRoLCByZXRyeU5vXS5qb2luKCctJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBcHBQcm9wZXJ0aWVzKGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBjb25zdCB0ZW1wQXBwID0gY2xvbmVEZWVwKGFwcCk7XG4gICAgY29uc3QgcHJvcGVydGllc1RvUmVtb3ZlID0gWydpZCcsICdvd25lcicsICdhY3RpdmVWZXJzaW9uSWQnLCAnc2VsZiddO1xuXG4gICAgcHJvcGVydGllc1RvUmVtb3ZlLmZvckVhY2gocHJvcCA9PiBkZWxldGUgdGVtcEFwcFtwcm9wXSk7XG4gICAgcmV0dXJuIHRlbXBBcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFVwbG9hZE92ZXJyaWRlcyhcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8SVVwbG9hZFBhcmFtc092ZXJyaWRlPiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBpc0luaXRpYWxQYWNrYWdlID0gYXBwLmFwcGxpY2F0aW9uVmVyc2lvbnM/Lmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdFVybDogJ3ZlcnNpb25zJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vdm5kLmNvbS5uc24uY3VtdWxvY2l0eS5hcHBsaWNhdGlvblZlcnNpb24ranNvbjtjaGFyc2V0PVVURi04O3Zlcj0wLjknXG4gICAgICB9LFxuICAgICAgYm9keUZpbGVQcm9wZXJ0eTogJ2FwcGxpY2F0aW9uQmluYXJ5JyxcbiAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgIGFwcGxpY2F0aW9uVmVyc2lvbjogeyB2ZXJzaW9uLCAuLi4oaXNJbml0aWFsUGFja2FnZSAmJiB7IHRhZ3M6IFsnbGF0ZXN0J10gfSkgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVZlcnNpb25Gcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVnRXhwID0gLy1cXGQrXFwuXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1cXGQrKT8oLiopJC87XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSh2ZXJzaW9uUmVnRXhwLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGlzTmFtZUxlbmd0aEV4Y2VlZGVkKG5hbWUsIGFwcFR5cGUpIHtcbiAgICByZXR1cm4gbmFtZS5sZW5ndGggPiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIICYmIGFwcFR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cbn1cbiJdfQ==
|
|
622
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFXZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFVBQVUsRUFDWCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFFWCxNQUFNLG1CQUFtQixDQUFDOzs7OztBQUUzQixN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QUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTztRQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsNEJBQTRCLElBQUksT0FBTyxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDaEcsQ0FBQzs7NkdBL3RCVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBJQXBwbGljYXRpb24sXG4gIElBcHBsaWNhdGlvbkJpbmFyeSxcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcyxcbiAgSUN1cnJlbnRUZW5hbnQsXG4gIElkUmVmZXJlbmNlLFxuICBJRmV0Y2hSZXNwb25zZSxcbiAgSUlkZW50aWZpZWQsXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJTWFuaWZlc3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSZXN1bHQsXG4gIElSZXN1bHRMaXN0LFxuICBJVXBsb2FkUGFyYW1zT3ZlcnJpZGUsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFja2FnZVR5cGUsXG4gIFN0YXR1cyxcbiAgV2l6YXJkTW9kYWxTZXJ2aWNlLFxuICBaaXBTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGdldCwgZ3JvdXBCeSwga2ViYWJDYXNlLCBwaWNrLCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBndCwgY29lcmNlIH0gZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IEVjb3N5c3RlbUVycm9yIH0gZnJvbSAnLi9lY29zeXN0ZW0tZXJyb3InO1xuaW1wb3J0IHsgQVBQX1NUQVRFLCBFUlJPUl9NRVNTQUdFUyB9IGZyb20gJy4vZWNvc3lzdGVtLmNvbnN0YW50cyc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvblN0YXRlLFxuICBFY29zeXN0ZW1XaXphcmRzLFxuICBFUlJPUl9UWVBFLFxuICBMaWNlbnNlZEFwcGxpY2F0aW9uUGx1Z2luXG59IGZyb20gJy4vZWNvc3lzdGVtLm1vZGVsJztcblxuY29uc3QgQ1VNVUxPQ0lUWV9KU09OID0gJ2N1bXVsb2NpdHkuanNvbic7XG5jb25zdCBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIID0gMjM7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEVjb3N5c3RlbVNlcnZpY2Uge1xuICBhcHBEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJQXBwbGljYXRpb24+KCk7XG4gIHByb2dyZXNzOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihudWxsKTtcbiAgcHJpdmF0ZSBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGg6IGFueVtdO1xuICBwcml2YXRlIHhocjogWE1MSHR0cFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodW1hbml6ZUFwcE5hbWU6IEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHppcFNlcnZpY2U6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlOiBUZW5hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIHdpemFyZE1vZGFsU2VydmljZTogV2l6YXJkTW9kYWxTZXJ2aWNlXG4gICkge31cblxuICBnZXRVbmlxdWVBcHBDb25maWcoc3JjQXBwOiBJQXBwbGljYXRpb24sIGV4aXN0aW5nQXBwczogSUFwcGxpY2F0aW9uW10pOiBJQXBwbGljYXRpb24ge1xuICAgIGxldCBhcHA6IElBcHBsaWNhdGlvbiA9IHtcbiAgICAgIG5hbWU6IHNyY0FwcC5uYW1lLFxuICAgICAga2V5OiBzcmNBcHAua2V5LFxuICAgICAgY29udGV4dFBhdGg6IHNyY0FwcC5jb250ZXh0UGF0aFxuICAgIH07XG4gICAgZm9yIChsZXQgcmV0cnlObyA9IDA7IHJldHJ5Tm8gPCA5OyApIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrSWZBcHBOYW1lS2V5UGF0aEV4aXN0cyhleGlzdGluZ0FwcHMsIGFwcCwgcmV0cnlObykpIHtcbiAgICAgICAgcmV0cnlObysrO1xuICAgICAgICBhcHAgPSB7XG4gICAgICAgICAgbmFtZTogW3NyY0FwcC5uYW1lLCByZXRyeU5vXS5qb2luKCctJyksXG4gICAgICAgICAga2V5OiBbc3JjQXBwLmtleSwgcmV0cnlOb10uam9pbignLScpLFxuICAgICAgICAgIGNvbnRleHRQYXRoOiBbc3JjQXBwLmNvbnRleHRQYXRoLCByZXRyeU5vXS5qb2luKCctJylcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhcHA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogQ29tbXVuaXR5IHBsdWdpbnMgbmVlZCB0byB2ZXJpZnkgdGhlIGxpY2Vuc2UgYWdyZWVtZW50LiBJZiBhIHBhY2thZ2UgaXMgYSBjb21tdW5pdHlcbiAgICogcGFja2FnZSwgdGhlIGxpY2Vuc2UgaXMgc2hvd24uXG4gICAqXG4gICAqIEBwYXJhbSBwbHVnaW5zVG9JbnN0YWxsIFRoZSBsaXN0IG9mIHBsdWdpbnMgdG8gaW5zdGFsbC5cbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5zdGFsbGF0aW9uIGNhbiBjb250aW51ZS5cbiAgICovXG4gIGFzeW5jIHZlcmlmeUxpY2Vuc2VzKHBsdWdpbnNUb0luc3RhbGw6IEFycmF5PExpY2Vuc2VkQXBwbGljYXRpb25QbHVnaW4+KSB7XG4gICAgbGV0IF9yZXNvbHZlO1xuICAgIGNvbnN0IHJlc3VsdDogUHJvbWlzZTxib29sZWFuPiA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgcGx1Z2luc1RvSW5zdGFsbCA9IHBsdWdpbnNUb0luc3RhbGwuZmlsdGVyKHBsdWdpbiA9PiBwbHVnaW4udHlwZSAhPT0gUGFja2FnZVR5cGUuQ1VTVE9NKTtcblxuICAgIGlmIChwbHVnaW5zVG9JbnN0YWxsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGU6IGFueSA9IHtcbiAgICAgIGlkOiBFY29zeXN0ZW1XaXphcmRzLkxJQ0VOU0VfQ09ORklSTSxcbiAgICAgIGNvbXBvbmVudEluaXRpYWxTdGF0ZToge1xuICAgICAgICBwbHVnaW5zVG9JbnN0YWxsXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBtb2RhbE9wdGlvbnMgPSB7IGluaXRpYWxTdGF0ZSB9O1xuICAgIGNvbnN0IHdpemFyZCA9IHRoaXMud2l6YXJkTW9kYWxTZXJ2aWNlLnNob3cobW9kYWxPcHRpb25zKTtcblxuICAgIHdpemFyZC5jb250ZW50Lm9uQ2xvc2Uuc3Vic2NyaWJlKGNvbmZpcm1lZCA9PiB7XG4gICAgICBfcmVzb2x2ZShjb25maXJtZWQpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogQ29tcGFyZXMgY3VycmVudGx5IGRlcGxveWVkIGFwcGxpY2F0aW9uIHZlcnNpb24gd2l0aCBhcHBsaWNhdGlvbiB2ZXJzaW9uIHRhZ2dlZCBhcyBcImxhdGVzdFwiXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXJyZW50QXBwbGljYXRpb25WZXJzaW9uIERlcGxveWVkIGFwcGxpY2F0aW9uIHZlcnNpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IGxhdGVzdEFwcCBMYXRlc3QgYXBwbGljYXRpb24gdmVyc2lvbiBvYmplY3RcbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBsYXRlc3QgdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4gY3VycmVudCwgb3RoZXJ3aXNlIGZhbHNlXG4gICAqL1xuICBzaG91bGRVcGdyYWRlUGFja2FnZShjdXJyZW50QXBwbGljYXRpb25WZXJzaW9uOiBzdHJpbmcsIGxhdGVzdEFwcDogSUFwcGxpY2F0aW9uVmVyc2lvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiA9IGxhdGVzdEFwcD8udmVyc2lvbjtcblxuICAgIGlmICghbGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uIHx8ICFjdXJyZW50QXBwbGljYXRpb25WZXJzaW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGd0KGNvZXJjZShsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24pLCBjb2VyY2UoY3VycmVudEFwcGxpY2F0aW9uVmVyc2lvbikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBHZXRzIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIHNlYXJjaGVkIHRhZ1xuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5fSBhcHBsaWNhdGlvblZlcnNpb25zIEFycmF5IHdpdGggYWxsIGF2YWlsYWJsZSB2ZXJzaW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBTZWFyY2hlZCB0YWdcbiAgICpcbiAgICogQHJldHVybnMge29iamVjdH0gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBzZWFyY2hlZCB0YWdcbiAgICovXG4gIGdldEFwcGxpY2F0aW9uVmVyc2lvbk9iamVjdEJ5VGFnKFxuICAgIGFwcGxpY2F0aW9uVmVyc2lvbnM6IElBcHBsaWNhdGlvblZlcnNpb25bXSxcbiAgICB0YWdOYW1lOiBzdHJpbmdcbiAgKTogSUFwcGxpY2F0aW9uVmVyc2lvbiB7XG4gICAgcmV0dXJuIGFwcGxpY2F0aW9uVmVyc2lvbnM/LmZpbmQoZWxlbWVudCA9PiBlbGVtZW50LnRhZ3MuaW5jbHVkZXModGFnTmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXBwbGljYXRpb24oYXBwSWQ6IElkUmVmZXJlbmNlKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRldGFpbChhcHBJZCkpLmRhdGE7XG4gIH1cblxuICBnZXRBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SVJlc3VsdExpc3Q8SUFwcGxpY2F0aW9uPj4ge1xuICAgIGNvbnN0IGZpbHRlcjogb2JqZWN0ID0ge1xuICAgICAgcGFnZVNpemU6IDIwMDAsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbihmaWx0ZXIsIGN1c3RvbUZpbHRlcik7XG4gICAgY29uc3QgY3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeVRlbmFudChjdXJyZW50VGVuYW50Lm5hbWUsIGZpbHRlcik7XG4gIH1cblxuICBhc3luYyBnZXRNaWNyb3NlcnZpY2VzKCk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKCkpLmRhdGE7XG4gICAgY29uc3QgbWljcm9zZXJ2aWNlcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzTWljcm9zZXJ2aWNlKGFwcCkpO1xuICAgIHJldHVybiBtaWNyb3NlcnZpY2VzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0V2ViQXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgYXBwcyA9IChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXIpKS5kYXRhO1xuICAgIGNvbnN0IHdlYkFwcHMgPSBhcHBzLmZpbHRlcihhcHAgPT4gdGhpcy5pc0FwcGxpY2F0aW9uKGFwcCkpO1xuICAgIHRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoID0gZ3JvdXBCeSh3ZWJBcHBzLCAnY29udGV4dFBhdGgnKTtcbiAgICByZXR1cm4gd2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZlYXR1cmVBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcikpLmRhdGE7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzRmVhdHVyZShhcHApKTtcbiAgICByZXR1cm4gd2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGdldFBhY2thZ2VBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSBPYmplY3QuYXNzaWduKHt9LCBjdXN0b21GaWx0ZXIpO1xuICAgIGNvbnN0IHNoYXJlZEZpbHRlciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIGF2YWlsYWJpbGl0eTogQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuU0hBUkVELFxuICAgICAgICB0eXBlOiAnSE9TVEVEJyxcbiAgICAgICAgcGFnZVNpemU6IDIwMDBcbiAgICAgIH0sXG4gICAgICBjdXN0b21GaWx0ZXJcbiAgICApO1xuICAgIGNvbnN0IFt7IGRhdGE6IGFwcHMgfSwgeyBkYXRhOiBzaGFyZWQgfV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmdldEFwcGxpY2F0aW9ucyhmaWx0ZXIpLFxuICAgICAgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdChzaGFyZWRGaWx0ZXIpXG4gICAgXSk7XG4gICAgY29uc3Qgd2ViQXBwcyA9IFsuLi5hcHBzLCAuLi5zaGFyZWRdLmZpbHRlcihhcHAgPT4gdGhpcy5pc1BhY2thZ2UoYXBwKSk7XG4gICAgLy8gYW4gYXBwIGNvdWxkIGJlIHN1YnNjcmliZWQgdG8gYSB0ZW5hbnQsIGJ1dCBhbHNvIGhhdmUgaXQncyBhdmFpbGFiaWxpdHkgc2V0IHRvIFNIQVJFRCwgaW4gdGhhdCBjYXNlIGl0IHdvdWxkIG9jY3VyIHR3aWNlLlxuICAgIGNvbnN0IHVuaXFXZWJBcHBzID0gdW5pcUJ5KHdlYkFwcHMsIChhcHA6IElBcHBsaWNhdGlvbikgPT4gYXBwLmlkKTtcbiAgICByZXR1cm4gdW5pcVdlYkFwcHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBpc01pY3Jvc2VydmljZUhvc3RpbmdBbGxvd2VkKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgZGF0YTogYXBwcyB9ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5TmFtZSgnZmVhdHVyZS1taWNyb3NlcnZpY2UtaG9zdGluZycpO1xuICAgIHJldHVybiAhIWFwcHMuZmlsdGVyKGFwcCA9PiBhcHAub3duZXI/LnRlbmFudD8uaWQgPT09ICdtYW5hZ2VtZW50JykubGVuZ3RoO1xuICB9XG5cbiAgY2FuT3BlbkFwcEluQnJvd3NlcihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlzTm90QUZlYXR1cmUgPSAhdGhpcy5pc0ZlYXR1cmUoYXBwKTtcbiAgICBjb25zdCBoYXNQcm9wZXJUeXBlID0gW1xuICAgICAgQXBwbGljYXRpb25UeXBlLkhPU1RFRCxcbiAgICAgIEFwcGxpY2F0aW9uVHlwZS5FWFRFUk5BTCxcbiAgICAgIEFwcGxpY2F0aW9uVHlwZS5SRVBPU0lUT1JZXG4gICAgXS5pbmNsdWRlcyhhcHAudHlwZSk7XG4gICAgY29uc3QgaXNOb3RQYWNrYWdlID0gIXRoaXMuaXNQYWNrYWdlKGFwcCk7XG4gICAgcmV0dXJuIGlzTm90QUZlYXR1cmUgJiYgaGFzUHJvcGVyVHlwZSAmJiBpc05vdFBhY2thZ2U7XG4gIH1cblxuICBvcGVuQXBwKGFwcCkge1xuICAgIHdpbmRvdy5vcGVuKHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEhyZWYoYXBwKSwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG4gIH1cblxuICBhc3luYyBjYW5EZWxldGVBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc093bmVyKGFwcCkgJiYgKChhd2FpdCB0aGlzLmhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwKSkgfHwgIXRoaXMuaXNDdXJyZW50QXBwKGFwcCkpXG4gICAgKTtcbiAgfVxuXG4gIGlzT3duZXIoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgY29uc3QgYXBwT3duZXIgPSBnZXQoYXBwLCAnb3duZXIudGVuYW50LmlkJyk7XG4gICAgcmV0dXJuIGN1cnJlbnRUZW5hbnQubmFtZSA9PT0gYXBwT3duZXI7XG4gIH1cblxuICBpc0ZlYXR1cmUoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubmFtZS5tYXRjaCgvZmVhdHVyZS0vKTtcbiAgfVxuXG4gIGlzTWljcm9zZXJ2aWNlKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC50eXBlID09PSAnTUlDUk9TRVJWSUNFJztcbiAgfVxuXG4gIGlzRXh0ZXJuYWwoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLnR5cGUgPT09ICdFWFRFUk5BTCc7XG4gIH1cblxuICBpc1BhY2thZ2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLm1hbmlmZXN0Py5pc1BhY2thZ2UgPT09IHRydWU7XG4gIH1cblxuICBpc1BsdWdpbihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAubWFuaWZlc3Q/LnBhY2thZ2UgPT09ICdwbHVnaW4nO1xuICB9XG5cbiAgY2FuY2VsQXBwQ3JlYXRpb24oYXBwOiBJQXBwbGljYXRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy54aHIpIHtcbiAgICAgIHRoaXMueGhyLmFib3J0KCk7XG4gICAgfVxuICAgIGlmIChhcHApIHtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVVwbG9hZFByb2dyZXNzKGV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3MudmFsdWU7XG4gICAgICB0aGlzLnByb2dyZXNzLm5leHQoY3VycmVudFByb2dyZXNzICsgKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKSAqICg5NSAtIGN1cnJlbnRQcm9ncmVzcykpO1xuICAgIH1cbiAgfVxuXG4gIHNldEFwcEFjdGl2ZVZlcnNpb24oYXBwOiBJQXBwbGljYXRpb24sIGFjdGl2ZVZlcnNpb25JZDogc3RyaW5nKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKHsgaWQ6IGFwcC5pZCwgYWN0aXZlVmVyc2lvbklkIH0pO1xuICB9XG5cbiAgc2V0UGFja2FnZVZlcnNpb25UYWcoYXBwOiBJQXBwbGljYXRpb24sIHZlcnNpb246IHN0cmluZywgdGFnczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoYXBwLCB2ZXJzaW9uLCB0YWdzKTtcbiAgfVxuXG4gIGRlbGV0ZVBhY2thZ2VWZXJzaW9uKGFwcDogSUFwcGxpY2F0aW9uLCBwYXJhbXM6IElBcHBsaWNhdGlvblZlcnNpb25EZWxldGVQYXJhbXMpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlVmVyc2lvblBhY2thZ2UoYXBwLCBwYXJhbXMpO1xuICB9XG5cbiAgZ2V0SHVtYW5pemVkQXBwTmFtZShhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaHVtYW5pemVBcHBOYW1lLnRyYW5zZm9ybShhcHAubmFtZSkucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBjcmVhdGVDb25maWcoYXBwOiBJQXBwbGljYXRpb24sIGZvcm1Hcm91cFZhbHVlOiBGb3JtR3JvdXApOiBQYXJ0aWFsPElBcHBsaWNhdGlvbj4ge1xuICAgIGNvbnN0IHsgaWQsIHR5cGUsIGF2YWlsYWJpbGl0eSB9ID0gYXBwO1xuICAgIGxldCBjb25maWcgPSBwaWNrKGZvcm1Hcm91cFZhbHVlLCBbJ25hbWUnLCAna2V5JywgJ2NvbnRleHRQYXRoJ10pO1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGlzU2V0dXA6IHRydWUsXG4gICAgICBpZCxcbiAgICAgIHR5cGUsXG4gICAgICBhdmFpbGFiaWxpdHlcbiAgICB9O1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBNYW5pZmVzdChcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHNvdXJjZVBhY2thZ2U6IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPHsgcmVzOiBJRmV0Y2hSZXNwb25zZTsgZGF0YTogYW55IH0+IHtcbiAgICBjb25zdCB7IGlkIH0gPSBhcHBsaWNhdGlvbjtcbiAgICBjb25zdCBjbGVhbmVkQXBwID0gdGhpcy5yZW1vdmVBcHBQcm9wZXJ0aWVzKGFwcGxpY2F0aW9uKTtcbiAgICBpZiAoIWNsZWFuZWRBcHAubWFuaWZlc3QpIHtcbiAgICAgIGNsZWFuZWRBcHAubWFuaWZlc3QgPSB7fTtcbiAgICB9XG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjbGVhbmVkQXBwLm1hbmlmZXN0LnNvdXJjZSA9IHNvdXJjZVBhY2thZ2UuaWQ7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2VcbiAgICAgIC5iaW5hcnkoaWQpXG4gICAgICAudXBkYXRlRmlsZXMoW3sgcGF0aDogQ1VNVUxPQ0lUWV9KU09OLCBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoY2xlYW5lZEFwcCkgYXMgYW55IH1dKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RBcmNoaXZlcyhhcHBJZDogc3RyaW5nIHwgbnVtYmVyIHwgSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxJQXBwbGljYXRpb25CaW5hcnlbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiAxMDBcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcElkKS5saXN0KGZpbHRlcikpLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGVBcmNoaXZlKGFyY2hpdmU6IElBcHBsaWNhdGlvbkJpbmFyeSwgYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcmNoaXZlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0SHVtYW5pemVkQXBwTmFtZShhcmNoaXZlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYXJjaGl2ZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFyY2hpdmUgXCJ7eyBodW1hbml6ZWRBcmNoaXZlTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaHVtYW5pemVkQXJjaGl2ZU5hbWUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldChleCwgJ2RhdGEubWVzc2FnZScpLCBleC5kYXRhKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXJjaGl2ZU1hbmFnZWRPYmplY3QoYmluYXJ5SWQ6IHN0cmluZyk6IFByb21pc2U8SU1hbmFnZWRPYmplY3Q+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRBcmNoaXZlKFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGFyY2hpdmU6IFBpY2s8SUFwcGxpY2F0aW9uQmluYXJ5LCAnbmFtZScgfCAnaWQnPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkoYXBwLCBhcmNoaXZlKTtcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24veC16aXAtY29tcHJlc3NlZCcgfSk7XG4gICAgICBzYXZlQXMoZmlsZUJpbmFyeSwgYXJjaGl2ZS5uYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgZGVsZXRlT25GYWlsdXJlID0gZmFsc2UpOiBQcm9taXNlPElSZXN1bHQ8SUFwcGxpY2F0aW9uPj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKGFwcCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgICBpZiAoZGVsZXRlT25GYWlsdXJlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHAuaWQpO1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5BUFBMSUNBVElPTl9DUkVBVElPTl9GQUlMRUQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgc2lsZW50ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcHBOYW1lID0gYXdhaXQgdGhpcy5nZXRIdW1hbml6ZWRBcHBOYW1lKGFwcCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFwcGxpY2F0aW9uJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgYXBwbGljYXRpb24gXCJ7eyBodW1hbml6ZWRBcHBOYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICksXG4gICAgICAgICAgeyBodW1hbml6ZWRBcHBOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gZGVsZXRlZC4nKSk7XG4gICAgfVxuICAgIHRoaXMuYXBwRGVsZXRlZC5lbWl0KGFwcCk7XG4gIH1cblxuICBhc3luYyBjaGVja0lmU3Vic2NyaWJlZChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpO1xuICAgIGNvbnN0IHN1YnNjcmliZWRBcHBzID0gY3VycmVudFRlbmFudC5kYXRhLmFwcGxpY2F0aW9ucy5yZWZlcmVuY2VzO1xuICAgIHJldHVybiBzdWJzY3JpYmVkQXBwcy5zb21lKGFwcGxpY2F0aW9uID0+IGFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uLmlkID09PSBhcHAuaWQpO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2Uuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudW5zdWJzY3JpYmVBcHBsaWNhdGlvbihjdXJyZW50VGVuYW50LCBhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzVmFsaWRBcHBUeXBlKGFyY2hpdmU6IEZpbGUsIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICAgIGlmIChjdXJyZW50VHlwZSAhPT0gYXBwVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEFyY2hpdmVUb0FwcChcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGlzTmV3VmVyc2lvbiA9IGZhbHNlXG4gICk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IHVwbG9hZE92ZXJyaWRlczogSVVwbG9hZFBhcmFtc092ZXJyaWRlO1xuICAgIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAgIHVwbG9hZE92ZXJyaWRlcyA9IGF3YWl0IHRoaXMuZ2V0VXBsb2FkT3ZlcnJpZGVzKGFyY2hpdmUsIGFwcCk7XG4gICAgfVxuICAgIGNvbnN0IGJpbmFyeVNlcnZpY2UgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKTtcbiAgICB0aGlzLnhociA9IGJpbmFyeVNlcnZpY2UudXBsb2FkV2l0aFByb2dyZXNzWGhyKFxuICAgICAgYXJjaGl2ZSxcbiAgICAgIHRoaXMudXBkYXRlVXBsb2FkUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICcnLFxuICAgICAgdXBsb2FkT3ZlcnJpZGVzXG4gICAgKTtcblxuICAgIGNvbnN0IGJpbmFyeU1vID0gYXdhaXQgYmluYXJ5U2VydmljZS5nZXRYTUxIdHRwUmVzcG9uc2UodGhpcy54aHIpO1xuXG4gICAgLy8gVE9ETyBjb21tZW50ZWQgaXQgZHVlIHRvOiBodHRwczovL2N1bXVsb2NpdHkuYXRsYXNzaWFuLm5ldC9icm93c2UvTVRNLTQ4NTUzXG4gICAgLy8gQWRkIGl0IGJhY2sgd2hlbiBCRSBmaXhlcyBpc3N1ZXMgd2l0aCBhY3RpdmVWZXJzaW9uLlxuICAgIC8vIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAvLyAgIHJldHVybiBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uKGFwcCk7XG4gICAgLy8gfVxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZXRBcHBBY3RpdmVWZXJzaW9uKGFwcCwgKGJpbmFyeU1vLmJpbmFyeUlkIHx8IGJpbmFyeU1vLmlkKSBhcyBzdHJpbmcpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVBcmNoaXZlVG9BcHBDb21wYXRpYmlsaXR5KGFyY2hpdmU6IEZpbGUsIGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXBwVHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICBpZiAoYXBwVHlwZSAhPT0gYXBwLnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfQVBQTElDQVRJT04pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2dyZXNzLm5leHQodGhpcy5wcm9ncmVzcy52YWx1ZSArIDEwKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNNaWNyb3NlcnZpY2UoYXBwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb24oYXJjaGl2ZSk7XG4gICAgLy8gQSB1c2VyIGNhbiB1cGxvYWQgYW4gYXBwIHdpdGhvdXQgYSBDdW11bG9jaXR5IEpTT04gZmlsZSAoZS5nLiBhIHJlYWN0IGFwcCkuXG4gICAgLy8gVGhpcyBpcyBhbGxvd2VkIGFuZCBzaG91bGQgbm90IHRyaWdnZXIgYSB2YWxpZGF0aW9uIGVycm9yLlxuICAgIGlmICghbWFuaWZlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZVBhY2thZ2VLZXlBbmRDb250ZXh0UGF0aChtYW5pZmVzdCwgYXBwKTtcbiAgfVxuXG4gIGFzeW5jIGdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmU6IEZpbGUpOiBQcm9taXNlPElNYW5pZmVzdCB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYzh5TWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgIHJldHVybiBjOHlNYW5pZmVzdDtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlQXBwRm9yQXJjaGl2ZShhcmNoaXZlLCBpc1BhY2thZ2VUeXBlQXJjaGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICBsZXQgaXNQYWNrYWdlID0gZmFsc2U7XG4gICAgY29uc3QgYXBwVHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICBsZXQgYXBwTW9kZWw6IGFueSA9IHt9O1xuICAgIGNvbnN0IHN1cHBvcnRlZEFwcFR5cGVzID0gW0FwcGxpY2F0aW9uVHlwZS5IT1NURUQsIEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0VdO1xuXG4gICAgaWYgKHN1cHBvcnRlZEFwcFR5cGVzLmluY2x1ZGVzKGFwcFR5cGUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhcHBNb2RlbCA9IGF3YWl0IHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb24kKGFyY2hpdmUpLnRvUHJvbWlzZSgpO1xuICAgICAgICBpc1BhY2thZ2UgPSBhcHBNb2RlbC5pc1BhY2thZ2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmcsIHdlIGFsbG93IGhhdmluZyBIT1NURUQgYXBwbGljYXRpb25zIHdpdGhvdXQgdGhlIG1hbmlmZXN0IGZpbGVcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0QmFzZU5hbWVGcm9tQXJjaGl2ZU9yQXBwTW9kZWwoYXJjaGl2ZSwgYXBwVHlwZSwgYXBwTW9kZWwpO1xuICAgIGNvbnN0IGNsZWFyZWROYW1lID0gdGhpcy5yZW1vdmVGb3JiaWRkZW5DaGFyYWN0ZXJzKG5hbWUpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXBwS2V5KGFwcE1vZGVsLCBjbGVhcmVkTmFtZSk7XG4gICAgY29uc3QgY29udGV4dFBhdGggPSB0aGlzLmdldENvbnRleHRQYXRoKGFwcE1vZGVsLCBuYW1lKTtcblxuICAgIGNvbnN0IGFwcFRvU2F2ZSA9IHtcbiAgICAgIHJlc291cmNlc1VybDogJy8nLFxuICAgICAgdHlwZTogYXBwVHlwZSxcbiAgICAgIG5hbWUsXG4gICAgICBrZXksXG4gICAgICBjb250ZXh0UGF0aFxuICAgIH07XG5cbiAgICBpZiAoaXNQYWNrYWdlVHlwZUFyY2hpdmUgJiYgIWlzUGFja2FnZSkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuSU5WQUxJRF9QQUNLQUdFKTtcbiAgICB9IGVsc2UgaWYgKCFpc1BhY2thZ2VUeXBlQXJjaGl2ZSAmJiBpc1BhY2thZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfQVBQTElDQVRJT04pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc05hbWVMZW5ndGhFeGNlZWRlZChuYW1lLCBhcHBUeXBlKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICAgIGVycm9yLm5hbWUgPSBFUlJPUl9UWVBFLk1JQ1JPU0VSVklDRV9OQU1FX1RPT19MT05HO1xuICAgICAgZXJyb3IubWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KEVSUk9SX01FU1NBR0VTW2Vycm9yLm5hbWVdLCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIG1heENoYXJzOiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKHtcbiAgICAgICAgLi4uYXBwVG9TYXZlLFxuICAgICAgICBtYW5pZmVzdDoge1xuICAgICAgICAgIGlzUGFja2FnZSxcbiAgICAgICAgICAuLi4oYXBwTW9kZWw/LnBhY2thZ2UgJiYgeyBwYWNrYWdlOiBhcHBNb2RlbC5wYWNrYWdlIH0pXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBJTWFuaWZlc3RcbiAgICAgIH0pXG4gICAgKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgcmVhY3RpdmF0ZUFyY2hpdmUoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UucmVhY3RpdmF0ZUFyY2hpdmUoYXBwLmlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gcmVhY3RpdmF0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZU9sZGVzdEFyY2hpdmUoYXBwOiBJQXBwbGljYXRpb24sIGFyY2hpdmVzOiBJQXBwbGljYXRpb25CaW5hcnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBvbGRlc3QgYXJjaGl2ZSBhbmQgY29udGludWUnKSxcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnVXAgdG8gNiBhcmNoaXZlcyBjYW4gYmUgc2F2ZWQgaW4gdGhlIHBsYXRmb3JtLiBJZiB5b3UgdXBsb2FkIGEgbmV3IGFyY2hpdmUsIHRoZSBvbGRlc3QgYXJjaGl2ZSB0aGF0IGlzIG5vdCBhY3RpdmUgd2lsbCBiZSBkZWxldGVkLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLklORk8sXG4gICAgICAgIHsgb2s6IGdldHRleHQoJ0RlbGV0ZSBhbmQgY29udGludWUnKSB9XG4gICAgICApO1xuICAgICAgY29uc3QgYXJjaGl2ZVRvRGVsZXRlID0gYXJjaGl2ZXNbYXJjaGl2ZXMubGVuZ3RoIC0gMl07XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKS5kZWxldGUoYXJjaGl2ZVRvRGVsZXRlLmlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXJjaGl2ZSBkZWxldGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICB9XG4gIH1cblxuICBnZXRBcHBTdGF0ZShhcHA6IElBcHBsaWNhdGlvbik6IEFwcGxpY2F0aW9uU3RhdGUge1xuICAgIGlmICghdGhpcy5pc093bmVyKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuU1VCU0NSSUJFRDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbnBhY2tlZChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlVOUEFDS0VEO1xuICAgIH0gZWxzZSBpZiAoYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5FWFRFUk5BTCkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5FWFRFUk5BTDtcbiAgICB9XG4gICAgcmV0dXJuIEFQUF9TVEFURS5DVVNUT007XG4gIH1cblxuICBnZXRQYWNrYWdlQ29udGVudFN0YXRlKGFwcDogSUFwcGxpY2F0aW9uKTogQXBwbGljYXRpb25TdGF0ZSB7XG4gICAgaWYgKCF0aGlzLmlzUGFja2FnZShhcHApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUGFja2FnZUJsdWVwcmludChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfQkxVRVBSSU5UO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BsdWdpbnNQYWNrYWdlKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9QTFVHSU47XG4gICAgfVxuICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9VTktOT1dOO1xuICB9XG5cbiAgaXNQYWNrYWdlQmx1ZXByaW50KGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYWNrYWdlKGFwcCkgJiYgYXBwLm1hbmlmZXN0LnBhY2thZ2UgPT09ICdibHVlcHJpbnQnO1xuICB9XG5cbiAgaXNQbHVnaW5zUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFja2FnZShhcHApICYmIGFwcC5tYW5pZmVzdC5wYWNrYWdlID09PSAncGx1Z2luJztcbiAgfVxuXG4gIGlzVW5wYWNrZWQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LnNvdXJjZTtcbiAgfVxuXG4gIGhhc0V4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LmV4cG9ydHM/Lmxlbmd0aDtcbiAgfVxuXG4gIGlzQXBwbGljYXRpb24oYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXBwLnR5cGUgIT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgJiYgIXRoaXMuaXNGZWF0dXJlKGFwcCkgJiYgIXRoaXMuaXNQYWNrYWdlKGFwcClcbiAgICApO1xuICB9XG5cbiAgaXNDdXN0b21NaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc093bmVyKGFwcCkgJiYgYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cblxuICBhc3luYyBnZXRCaW5hcnkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgYXJjaGl2ZTogSUFwcGxpY2F0aW9uQmluYXJ5IHwgSUlkZW50aWZpZWRcbiAgKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIGxldCBiaW5hcnk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRvd25sb2FkQXJjaGl2ZShhcmNoaXZlLmlkKTtcbiAgICAgIGJpbmFyeSA9IGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIobXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmFyeTtcbiAgfVxuXG4gIGFzeW5jIGlzT3ZlcndyaXR0ZW5CeUN1c3RvbUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAhdGhpcy5pc093bmVyKGFwcCkgJiYgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKTtcbiAgfVxuXG4gIGFzeW5jIGhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldFdlYkFwcGxpY2F0aW9ucygpO1xuICAgIH1cbiAgICByZXR1cm4gYXBwLmNvbnRleHRQYXRoICYmIHRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoW2FwcC5jb250ZXh0UGF0aF0/Lmxlbmd0aCA9PT0gMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgc2V0QXZhaWxhYmlsaXR5VG9Qcml2YXRlSWZOb3RTZXRBbHJlYWR5KGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBhcHAuYXZhaWxhYmlsaXR5ID0gQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuUFJJVkFURTtcbiAgICByZXR1cm4gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGFuIGVycm9yIGRpYWxvZy5cbiAgICogQHBhcmFtIGVycm9yIEVpdGhlciBhIHNlcnZlciBlcnJvciBvciBhbiBpbnRlcm5hbCBbW0Vjb3N5c3RlbUVycm9yXV0uXG4gICAqL1xuICBhbGVydEVycm9yKGVycm9yOiBFcnJvciB8IEVjb3N5c3RlbUVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWNvc3lzdGVtRXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihlcnJvci5tZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3Q6IElNYW5pZmVzdCwgYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0UGF0aCA9IGdldChtYW5pZmVzdCwgJ2NvbnRleHRQYXRoJyk7XG4gICAgY29uc3QgYXBwS2V5ID0gZ2V0KG1hbmlmZXN0LCAna2V5Jyk7XG4gICAgaWYgKGNvbnRleHRQYXRoICE9PSBhcHAuY29udGV4dFBhdGggfHwgYXBwS2V5ICE9PSBhcHAua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5LRVlfT1JfQ09OVEVYVF9QQVRIX01JU01BVENIKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFwcEtleShhcHBNb2RlbDogSUFwcGxpY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBrZXkgPSBhcHBNb2RlbD8ua2V5O1xuICAgIGlmICgha2V5KSB7XG4gICAgICBrZXkgPSBgJHtrZWJhYkNhc2UobmFtZSl9LWtleWA7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHRQYXRoKGFwcE1vZGVsOiBJQXBwbGljYXRpb24sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwcE1vZGVsPy5jb250ZXh0UGF0aCB8fCBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZvcmJpZGRlbkNoYXJhY3RlcnMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTktX10vZywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0N1cnJlbnRBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUuYXBwO1xuICAgIHJldHVybiBjdXJyZW50QXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGg7XG4gIH1cblxuICBwcml2YXRlIGdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXBTZXJ2aWNlLmdldEpzb25EYXRhKGFyY2hpdmUsIHtcbiAgICAgIGZpbGVuYW1lOiBDVU1VTE9DSVRZX0pTT05cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBwVHlwZShhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxBcHBsaWNhdGlvblR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSlcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oXG4gICAgICAgIGRhdGEgPT5cbiAgICAgICAgICBnZXQoZGF0YSwgJ3R5cGUnKSB8fFxuICAgICAgICAgIChnZXQoZGF0YSwgJ2FwaVZlcnNpb24nKSA/IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgOiBBcHBsaWNhdGlvblR5cGUuSE9TVEVEKVxuICAgICAgKVxuICAgICAgLmNhdGNoKCgpID0+IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCYXNlTmFtZUZyb21BcmNoaXZlT3JBcHBNb2RlbChcbiAgICBhcmNoaXZlOiBhbnksXG4gICAgYXBwVHlwZTogQXBwbGljYXRpb25UeXBlLFxuICAgIGFwcE1vZGVsPzogSUFwcGxpY2F0aW9uXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGJhc2VOYW1lID0gYXBwTW9kZWw/Lm5hbWUgfHwgYXJjaGl2ZS5uYW1lLnJlcGxhY2UoL1xcLnppcCQvaSwgJycpO1xuICAgIGlmIChhcHBUeXBlID09PSAnTUlDUk9TRVJWSUNFJykge1xuICAgICAgYmFzZU5hbWUgPSB0aGlzLnJlbW92ZVZlcnNpb25Gcm9tTmFtZShiYXNlTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKFxuICAgIGV4aXN0aW5nQXBwczogSUFwcGxpY2F0aW9uW10sXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcmV0cnlObzogbnVtYmVyXG4gICk6IElBcHBsaWNhdGlvbiB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQXBwcy5maW5kKFxuICAgICAgZXhpc3RpbmdBcHAgPT5cbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gYXBwLm5hbWUgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBhcHAua2V5IHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGggfHxcbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gW2FwcC5uYW1lLCByZXRyeU5vXS5qb2luKCctJykgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBbYXBwLmtleSwgcmV0cnlOb10uam9pbignLScpIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBbYXBwLmNvbnRleHRQYXRoLCByZXRyeU5vXS5qb2luKCctJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBcHBQcm9wZXJ0aWVzKGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBjb25zdCB0ZW1wQXBwID0gY2xvbmVEZWVwKGFwcCk7XG4gICAgY29uc3QgcHJvcGVydGllc1RvUmVtb3ZlID0gWydpZCcsICdvd25lcicsICdhY3RpdmVWZXJzaW9uSWQnLCAnc2VsZiddO1xuXG4gICAgcHJvcGVydGllc1RvUmVtb3ZlLmZvckVhY2gocHJvcCA9PiBkZWxldGUgdGVtcEFwcFtwcm9wXSk7XG4gICAgcmV0dXJuIHRlbXBBcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFVwbG9hZE92ZXJyaWRlcyhcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8SVVwbG9hZFBhcmFtc092ZXJyaWRlPiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBpc0luaXRpYWxQYWNrYWdlID0gYXBwLmFwcGxpY2F0aW9uVmVyc2lvbnM/Lmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdFVybDogJ3ZlcnNpb25zJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vdm5kLmNvbS5uc24uY3VtdWxvY2l0eS5hcHBsaWNhdGlvblZlcnNpb24ranNvbjtjaGFyc2V0PVVURi04O3Zlcj0wLjknXG4gICAgICB9LFxuICAgICAgYm9keUZpbGVQcm9wZXJ0eTogJ2FwcGxpY2F0aW9uQmluYXJ5JyxcbiAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgIGFwcGxpY2F0aW9uVmVyc2lvbjogeyB2ZXJzaW9uLCAuLi4oaXNJbml0aWFsUGFja2FnZSAmJiB7IHRhZ3M6IFsnbGF0ZXN0J10gfSkgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVZlcnNpb25Gcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVnRXhwID0gLy1cXGQrXFwuXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1cXGQrKT8oLiopJC87XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSh2ZXJzaW9uUmVnRXhwLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGlzTmFtZUxlbmd0aEV4Y2VlZGVkKG5hbWUsIGFwcFR5cGUpIHtcbiAgICByZXR1cm4gbmFtZS5sZW5ndGggPiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIICYmIGFwcFR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -587,6 +587,9 @@ class EcosystemService {
|
|
|
587
587
|
else {
|
|
588
588
|
this.progress.next(this.progress.value + 10);
|
|
589
589
|
}
|
|
590
|
+
if (this.isMicroservice(app)) {
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
590
593
|
const manifest = yield this.getCumulocityJson(archive);
|
|
591
594
|
// A user can upload an app without a Cumulocity JSON file (e.g. a react app).
|
|
592
595
|
// This is allowed and should not trigger a validation error.
|