@c8y/ngx-components 1017.0.261 → 1017.0.263

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.
@@ -105,6 +105,15 @@ export declare class PluginsService {
105
105
  * @returns Returns list of remotes.
106
106
  */
107
107
  getMFRemotes(application: IApplication): ApplicationRemotePlugins;
108
+ /**
109
+ * Verifies if an application is owned by management tenant.
110
+ *
111
+ * @param app The application to verify.
112
+ * @returns True if owned by management tenant.
113
+ */
114
+ isOwnedByManagement(app: IApplication): boolean;
115
+ private removeDuplicates;
116
+ private isFromCurrentTenant;
108
117
  /**
109
118
  * Modifies the list of plugins to have additional information such as id.
110
119
  * @ignore
@@ -19,7 +19,7 @@ export declare class EcosystemService {
19
19
  private inventoryService;
20
20
  appDeleted: EventEmitter<IApplication>;
21
21
  progress: BehaviorSubject<number>;
22
- private appsGroupedByContextPath;
22
+ private appsGroupedByContextPath$;
23
23
  private xhr;
24
24
  constructor(modal: ModalService, alertService: AlertService, humanizeAppName: HumanizeAppNamePipe, translateService: TranslateService, applicationService: ApplicationService, appStateService: AppStateService, zipService: ZipService, tenantService: TenantService, inventoryService: InventoryService);
25
25
  getUniqueAppConfig(srcApp: IApplication, existingApps: IApplication[]): IApplication;
@@ -68,11 +68,9 @@ export class Permissions {
68
68
  return currentUserName === data.owner;
69
69
  }
70
70
  checkWithRequest(mo) {
71
- const moName = mo.name;
72
71
  const moId = mo.id;
73
72
  const partialUpdateObject = {
74
- id: moId,
75
- name: moName
73
+ id: moId
76
74
  };
77
75
  return this.inventory
78
76
  .update(partialUpdateObject)
@@ -113,4 +111,4 @@ __decorate([
113
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: Permissions, decorators: [{
114
112
  type: Injectable
115
113
  }], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i2.InventoryService }, { type: i2.UserService }]; }, propDecorators: { checkIfOwner: [], checkWithRequest: [] } });
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL3Blcm1pc3Npb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBK0IsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7OztBQWtCMUMsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDVSxRQUF5QixFQUN6QixTQUEyQixFQUMzQixJQUFpQjtRQUZqQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFhO0lBQ3hCLENBQUM7SUFFSjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxPQUFPLENBQ0wsT0FBTyxFQUNQLEVBQWdDLEVBQ2hDLFNBQXdCO1FBQ3RCLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGdCQUFnQixFQUFFLEtBQUs7S0FDeEI7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQWM7UUFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3BELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1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QztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzt3R0FsR1UsV0FBVzs0R0FBWCxXQUFXO0FBaUV0QjtJQURDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7K0NBS3ZCO0FBR0Q7SUFEQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7O21EQWdCdkI7MkZBdkZVLFdBQVc7a0JBRHZCLFVBQVU7K0pBa0VPLFlBQVksTUFPbEIsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IElJZGVudGlmaWVkLCBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IG1lbW9pemUgfSBmcm9tICcuL21lbW9pemUuZGVjb3JhdG9yJztcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5leHBvcnQgdHlwZSBDYW5FZGl0Q29uZmlnID0ge1xuICAvKipcbiAgICogU2tpcHMgcm9sZXMgY2hlY2suXG4gICAqL1xuICBza2lwUm9sZXNDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTa2lwcyBtYW5hZ2VkIG9iamVjdCBvd25lcnNoaXAgY2hlY2suXG4gICAqL1xuICBza2lwT3duZXJDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTa2lwcyBjaGVja3Mgd2l0aCBhIHF1ZXJ5IHRvIHRoZSBpbnZlbnRvcnkgQVBJLlxuICAgKi9cbiAgc2tpcFJlcXVlc3RDaGVjaz86IGJvb2xlYW47XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnMge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyB3cml0ZSBwZXJtaXNzaW9ucyBmb3IgdGhlIGdpdmVuIG1vLlxuICAgKiAoZWl0aGVyIHRocm91Z2ggZ2xvYmFsIHJvbGUsIGluZGl2aWR1YWwgZGV2aWNlIHBlcm1pc3Npb25zIG9yIHZpYSBpbnZlbnRvcnkgcm9sZXMpLlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5fSByb2xlSWRzIEFycmF5IG9mIHJvbGVzIHdoaWNoIHRoZSBjdXJyZW50IHVzZXIgc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7SU1hbmFnZWRPYmplY3QgfCBJSWRlbnRpZmllZH0gbW8gVGhlIG1hbmFnZWQgb2JqZWN0IGZvciB3aGljaCB3ZSBhcmUgY2hlY2tpbmcgd2hldGhlciB0aGUgdXNlciBoYXMgYWNjZXNzLlxuICAgKiBAcGFyYW0ge0NhbkVkaXRDb25maWd9IGNvbmZpZyBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRoYXQgY2FuIHRha2UgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gICAqIC0gYHNraXBSb2xlc0NoZWNrYDogYGJvb2xlYW5gIC0gc2tpcHMgcm9sZXMgY2hlY2ssXG4gICAqIC0gYHNraXBPd25lckNoZWNrYDogYGJvb2xlYW5gIC0gc2tpcHMgb3duZXJzaGlwIGNoZWNrLFxuICAgKiAtIGBza2lwUmVxdWVzdENoZWNrYDogYGJvb2xlYW5gIC0gc2tpcHMgY2hlY2tzIHdpdGggYSBxdWVyeSB0byB0aGUgaW52ZW50b3J5IEFQSS5cbiAgICogICBVSSB3aWxsIG1ha2UgYSBxdWVyeSB0byBiYWNrZW5kIHdoZXRoZXIgdGhlIHVzZXIgY2FuIGVkaXQgdGhlIG1hbmFnZWQgb2JqZWN0LlxuICAgKiAgIEEgcmVqZWN0aW9uIGZyb20gQkUgaW5kaWNhdGVzIGEgbGFjayBvZiBwZXJtaXNzaW9uLlxuICAgKi9cbiAgY2FuRWRpdChcbiAgICByb2xlSWRzLFxuICAgIG1vOiBJTWFuYWdlZE9iamVjdCB8IElJZGVudGlmaWVkLFxuICAgIGNvbmZpZzogQ2FuRWRpdENvbmZpZyA9IHtcbiAgICAgIHNraXBSb2xlc0NoZWNrOiBmYWxzZSxcbiAgICAgIHNraXBPd25lckNoZWNrOiBmYWxzZSxcbiAgICAgIHNraXBSZXF1ZXN0Q2hlY2s6IGZhbHNlXG4gICAgfVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5jaGVja0lmQ2FuRWRpdChyb2xlSWRzLCBtbywgY29uZmlnKTtcbiAgfVxuXG4gIGhhc1JvbGUocm9sZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIudmFsdWU7XG4gICAgaWYgKCFjdXJyZW50VXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb2xlcyBjYW4gb25seSBiZSByZXF1ZXN0ZWQgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51c2VyLmhhc1JvbGUoY3VycmVudFVzZXIsIHJvbGVJZCk7XG4gIH1cblxuICBoYXNBbGxSb2xlcyhyb2xlSWRzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZTtcbiAgICBpZiAoIWN1cnJlbnRVc2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvbGVzIGNhbiBvbmx5IGJlIHJlcXVlc3RlZCBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVzZXIuaGFzQWxsUm9sZXMoY3VycmVudFVzZXIsIHJvbGVJZHMpO1xuICB9XG5cbiAgaGFzQW55Um9sZShyb2xlSWRzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZTtcbiAgICBpZiAoIWN1cnJlbnRVc2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvbGVzIGNhbiBvbmx5IGJlIHJlcXVlc3RlZCBpZiB0aGUgdXNlciBpcyBsb2dnZWQgaW4uJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVzZXIuaGFzQW55Um9sZShjdXJyZW50VXNlciwgcm9sZUlkcyk7XG4gIH1cblxuICBoYXNBbnlHbG9iYWxSb2xlKGdsb2JhbFJvbGVzSWRzOiBudW1iZXJbXSkge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZTtcbiAgICBpZiAoIWN1cnJlbnRVc2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbCByb2xlcyBjYW4gb25seSBiZSByZXF1ZXN0ZWQgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51c2VyLmhhc0FueUdsb2JhbFJvbGUoY3VycmVudFVzZXIsIGdsb2JhbFJvbGVzSWRzKTtcbiAgfVxuXG4gIEBtZW1vaXplKHByb3BlcnR5KCdpZCcpKVxuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tJZk93bmVyKG1vKSB7XG4gICAgY29uc3QgY3VycmVudFVzZXJOYW1lID0gYXdhaXQgdGhpcy5hcHBTdGF0ZS5jdXJyZW50VXNlci52YWx1ZS51c2VyTmFtZTtcbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChtby5pZCk7XG4gICAgcmV0dXJuIGN1cnJlbnRVc2VyTmFtZSA9PT0gZGF0YS5vd25lcjtcbiAgfVxuXG4gIEBtZW1vaXplKHByb3BlcnR5KCdpZCcpKVxuICBwcm90ZWN0ZWQgY2hlY2tXaXRoUmVxdWVzdChtbykge1xuICAgIGNvbnN0IG1vTmFtZSA9IG1vLm5hbWU7XG4gICAgY29uc3QgbW9JZCA9IG1vLmlkO1xuICAgIGNvbnN0IHBhcnRpYWxVcGRhdGVPYmplY3Q6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+ID0ge1xuICAgICAgaWQ6IG1vSWQsXG4gICAgICBuYW1lOiBtb05hbWVcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeVxuICAgICAgLnVwZGF0ZShwYXJ0aWFsVXBkYXRlT2JqZWN0KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZkNhbkVkaXQocm9sZUlkcywgbW8sIGNvbmZpZzogQ2FuRWRpdENvbmZpZykge1xuICAgIGlmICghY29uZmlnPy5za2lwUm9sZXNDaGVjayAmJiAoYXdhaXQgdGhpcy5oYXNBbnlSb2xlKHJvbGVJZHMpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghY29uZmlnPy5za2lwT3duZXJDaGVjayAmJiAoYXdhaXQgdGhpcy5jaGVja0lmT3duZXIobW8pKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghY29uZmlnPy5za2lwUmVxdWVzdENoZWNrICYmIChhd2FpdCB0aGlzLmNoZWNrV2l0aFJlcXVlc3QobW8pKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL3Blcm1pc3Npb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBK0IsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7OztBQWtCMUMsTUFBTSxPQUFPLFdBQVc7SUFDdEIsWUFDVSxRQUF5QixFQUN6QixTQUEyQixFQUMzQixJQUFpQjtRQUZqQixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixTQUFJLEdBQUosSUFBSSxDQUFhO0lBQ3hCLENBQUM7SUFFSjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxPQUFPLENBQ0wsT0FBTyxFQUNQLEVBQWdDLEVBQ2hDLFNBQXdCO1FBQ3RCLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGNBQWMsRUFBRSxLQUFLO1FBQ3JCLGdCQUFnQixFQUFFLEtBQUs7S0FDeEI7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQWM7UUFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3BELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1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QUFpRXRCO0lBREMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7OzsrQ0FLdkI7QUFHRDtJQURDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7bURBY3ZCOzJGQXJGVSxXQUFXO2tCQUR2QixVQUFVOytKQWtFTyxZQUFZLE1BT2xCLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcFN0YXRlU2VydmljZSB9IGZyb20gJy4vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBJSWRlbnRpZmllZCwgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBtZW1vaXplIH0gZnJvbSAnLi9tZW1vaXplLmRlY29yYXRvcic7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuZXhwb3J0IHR5cGUgQ2FuRWRpdENvbmZpZyA9IHtcbiAgLyoqXG4gICAqIFNraXBzIHJvbGVzIGNoZWNrLlxuICAgKi9cbiAgc2tpcFJvbGVzQ2hlY2s/OiBib29sZWFuO1xuICAvKipcbiAgICogU2tpcHMgbWFuYWdlZCBvYmplY3Qgb3duZXJzaGlwIGNoZWNrLlxuICAgKi9cbiAgc2tpcE93bmVyQ2hlY2s/OiBib29sZWFuO1xuICAvKipcbiAgICogU2tpcHMgY2hlY2tzIHdpdGggYSBxdWVyeSB0byB0aGUgaW52ZW50b3J5IEFQSS5cbiAgICovXG4gIHNraXBSZXF1ZXN0Q2hlY2s/OiBib29sZWFuO1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25zIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlcjogVXNlclNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgd3JpdGUgcGVybWlzc2lvbnMgZm9yIHRoZSBnaXZlbiBtby5cbiAgICogKGVpdGhlciB0aHJvdWdoIGdsb2JhbCByb2xlLCBpbmRpdmlkdWFsIGRldmljZSBwZXJtaXNzaW9ucyBvciB2aWEgaW52ZW50b3J5IHJvbGVzKS5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gcm9sZUlkcyBBcnJheSBvZiByb2xlcyB3aGljaCB0aGUgY3VycmVudCB1c2VyIHNob3VsZCBoYXZlLlxuICAgKiBAcGFyYW0ge0lNYW5hZ2VkT2JqZWN0IHwgSUlkZW50aWZpZWR9IG1vIFRoZSBtYW5hZ2VkIG9iamVjdCBmb3Igd2hpY2ggd2UgYXJlIGNoZWNraW5nIHdoZXRoZXIgdGhlIHVzZXIgaGFzIGFjY2Vzcy5cbiAgICogQHBhcmFtIHtDYW5FZGl0Q29uZmlnfSBjb25maWcgQSBjb25maWd1cmF0aW9uIG9iamVjdCB0aGF0IGNhbiB0YWtlIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuICAgKiAtIGBza2lwUm9sZXNDaGVja2A6IGBib29sZWFuYCAtIHNraXBzIHJvbGVzIGNoZWNrLFxuICAgKiAtIGBza2lwT3duZXJDaGVja2A6IGBib29sZWFuYCAtIHNraXBzIG93bmVyc2hpcCBjaGVjayxcbiAgICogLSBgc2tpcFJlcXVlc3RDaGVja2A6IGBib29sZWFuYCAtIHNraXBzIGNoZWNrcyB3aXRoIGEgcXVlcnkgdG8gdGhlIGludmVudG9yeSBBUEkuXG4gICAqICAgVUkgd2lsbCBtYWtlIGEgcXVlcnkgdG8gYmFja2VuZCB3aGV0aGVyIHRoZSB1c2VyIGNhbiBlZGl0IHRoZSBtYW5hZ2VkIG9iamVjdC5cbiAgICogICBBIHJlamVjdGlvbiBmcm9tIEJFIGluZGljYXRlcyBhIGxhY2sgb2YgcGVybWlzc2lvbi5cbiAgICovXG4gIGNhbkVkaXQoXG4gICAgcm9sZUlkcyxcbiAgICBtbzogSU1hbmFnZWRPYmplY3QgfCBJSWRlbnRpZmllZCxcbiAgICBjb25maWc6IENhbkVkaXRDb25maWcgPSB7XG4gICAgICBza2lwUm9sZXNDaGVjazogZmFsc2UsXG4gICAgICBza2lwT3duZXJDaGVjazogZmFsc2UsXG4gICAgICBza2lwUmVxdWVzdENoZWNrOiBmYWxzZVxuICAgIH1cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tJZkNhbkVkaXQocm9sZUlkcywgbW8sIGNvbmZpZyk7XG4gIH1cblxuICBoYXNSb2xlKHJvbGVJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgY3VycmVudFVzZXIgPSB0aGlzLmFwcFN0YXRlLmN1cnJlbnRVc2VyLnZhbHVlO1xuICAgIGlmICghY3VycmVudFVzZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9sZXMgY2FuIG9ubHkgYmUgcmVxdWVzdGVkIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXNlci5oYXNSb2xlKGN1cnJlbnRVc2VyLCByb2xlSWQpO1xuICB9XG5cbiAgaGFzQWxsUm9sZXMocm9sZUlkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIudmFsdWU7XG4gICAgaWYgKCFjdXJyZW50VXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb2xlcyBjYW4gb25seSBiZSByZXF1ZXN0ZWQgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51c2VyLmhhc0FsbFJvbGVzKGN1cnJlbnRVc2VyLCByb2xlSWRzKTtcbiAgfVxuXG4gIGhhc0FueVJvbGUocm9sZUlkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIudmFsdWU7XG4gICAgaWYgKCFjdXJyZW50VXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb2xlcyBjYW4gb25seSBiZSByZXF1ZXN0ZWQgaWYgdGhlIHVzZXIgaXMgbG9nZ2VkIGluLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy51c2VyLmhhc0FueVJvbGUoY3VycmVudFVzZXIsIHJvbGVJZHMpO1xuICB9XG5cbiAgaGFzQW55R2xvYmFsUm9sZShnbG9iYWxSb2xlc0lkczogbnVtYmVyW10pIHtcbiAgICBjb25zdCBjdXJyZW50VXNlciA9IHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIudmFsdWU7XG4gICAgaWYgKCFjdXJyZW50VXNlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHbG9iYWwgcm9sZXMgY2FuIG9ubHkgYmUgcmVxdWVzdGVkIGlmIHRoZSB1c2VyIGlzIGxvZ2dlZCBpbi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXNlci5oYXNBbnlHbG9iYWxSb2xlKGN1cnJlbnRVc2VyLCBnbG9iYWxSb2xlc0lkcyk7XG4gIH1cblxuICBAbWVtb2l6ZShwcm9wZXJ0eSgnaWQnKSlcbiAgcHJvdGVjdGVkIGFzeW5jIGNoZWNrSWZPd25lcihtbykge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyTmFtZSA9IGF3YWl0IHRoaXMuYXBwU3RhdGUuY3VycmVudFVzZXIudmFsdWUudXNlck5hbWU7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwobW8uaWQpO1xuICAgIHJldHVybiBjdXJyZW50VXNlck5hbWUgPT09IGRhdGEub3duZXI7XG4gIH1cblxuICBAbWVtb2l6ZShwcm9wZXJ0eSgnaWQnKSlcbiAgcHJvdGVjdGVkIGNoZWNrV2l0aFJlcXVlc3QobW8pIHtcbiAgICBjb25zdCBtb0lkID0gbW8uaWQ7XG4gICAgY29uc3QgcGFydGlhbFVwZGF0ZU9iamVjdDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7XG4gICAgICBpZDogbW9JZFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5XG4gICAgICAudXBkYXRlKHBhcnRpYWxVcGRhdGVPYmplY3QpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0lmQ2FuRWRpdChyb2xlSWRzLCBtbywgY29uZmlnOiBDYW5FZGl0Q29uZmlnKSB7XG4gICAgaWYgKCFjb25maWc/LnNraXBSb2xlc0NoZWNrICYmIChhd2FpdCB0aGlzLmhhc0FueVJvbGUocm9sZUlkcykpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFjb25maWc/LnNraXBPd25lckNoZWNrICYmIChhd2FpdCB0aGlzLmNoZWNrSWZPd25lcihtbykpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFjb25maWc/LnNraXBSZXF1ZXN0Q2hlY2sgJiYgKGF3YWl0IHRoaXMuY2hlY2tXaXRoUmVxdWVzdChtbykpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
@@ -4,6 +4,7 @@ import { ApplicationService } from '@c8y/ngx-components/api';
4
4
  import { cloneDeep, get, uniqBy } from 'lodash-es';
5
5
  import { coerce, compare } from 'semver';
6
6
  import { AppStateService } from '../common/ui-state.service';
7
+ import { groupBy } from 'lodash-es';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@c8y/ngx-components/api";
9
10
  import * as i2 from "../common/ui-state.service";
@@ -25,7 +26,8 @@ export class PluginsService {
25
26
  async listPackages(params = {}) {
26
27
  const apps = await this.listApplicationsByCurrentTenant(params);
27
28
  const webApps = apps.filter(app => this.isPackage(app));
28
- return webApps.sort((a, b) => a.name.localeCompare(b.name));
29
+ const uniqueWebApps = this.removeDuplicates(webApps, 'contextPath');
30
+ return uniqueWebApps.sort((a, b) => a.name.localeCompare(b.name));
29
31
  }
30
32
  /**
31
33
  * Checks if an application is a package.
@@ -161,6 +163,39 @@ export class PluginsService {
161
163
  getMFRemotes(application) {
162
164
  return application?.config?.remotes;
163
165
  }
166
+ /**
167
+ * Verifies if an application is owned by management tenant.
168
+ *
169
+ * @param app The application to verify.
170
+ * @returns True if owned by management tenant.
171
+ */
172
+ isOwnedByManagement(app) {
173
+ const appOwner = get(app, 'owner.tenant.id');
174
+ return appOwner === 'management';
175
+ }
176
+ removeDuplicates(apps, key) {
177
+ const uniqueList = [];
178
+ const groupedAppsByKey = groupBy(apps, key);
179
+ const groupedApps = Object.keys(groupedAppsByKey).map(key => groupedAppsByKey[key]);
180
+ for (const appsGroup of groupedApps) {
181
+ if (appsGroup.length < 2) {
182
+ uniqueList.push(...appsGroup);
183
+ }
184
+ else {
185
+ const appFromCurrentTenant = appsGroup.find(app => this.isFromCurrentTenant(app));
186
+ if (appFromCurrentTenant) {
187
+ uniqueList.push(appFromCurrentTenant);
188
+ continue;
189
+ }
190
+ const appNotOwnedByManagement = appsGroup.find(app => !this.isOwnedByManagement(app));
191
+ uniqueList.push(appNotOwnedByManagement);
192
+ }
193
+ }
194
+ return uniqueList;
195
+ }
196
+ isFromCurrentTenant(app) {
197
+ return app.owner.tenant.id === this.appStateService.currentTenant.value.name;
198
+ }
164
199
  /**
165
200
  * Modifies the list of plugins to have additional information such as id.
166
201
  * @ignore
@@ -247,4 +282,4 @@ PluginsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", versi
247
282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PluginsService, decorators: [{
248
283
  type: Injectable
249
284
  }], ctorParameters: function () { return [{ type: i1.ApplicationService }, { type: i2.AppStateService }]; } });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9wbHVnaW5zL3BsdWdpbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFLeEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQUk3RCxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUNVLGtCQUFzQyxFQUN0QyxlQUFnQztRQURoQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUN2QyxDQUFDO0lBRUosMEZBQTBGO0lBQzFGLHlCQUF5QjtJQUN6Qiw2RUFBNkU7SUFDN0UsNkZBQTZGO0lBQzdGLElBQUk7SUFFSjs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFjLEVBQUU7UUFDakMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFB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Q0FBQztJQUNyQyxDQUFDOzsyR0EvVFUsY0FBYzsrR0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLFxuICBJQXBwbGljYXRpb24sXG4gIElBcHBsaWNhdGlvblZlcnNpb24sXG4gIElNYW5pZmVzdFxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGdldCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvZXJjZSwgY29tcGFyZSB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblBsdWdpbiwgUGx1Z2luc0NvbmZpZyB9IGZyb20gJy4vcGx1Z2lucy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQbHVnaW5zU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZVxuICApIHt9XG5cbiAgLy8gVE9ETyBWZXJpZnkgaWYgd2Ugc2hvdWxkIGxpc3QgcGFja2FnZXMgdXNpbmcgbGlzdEJ5VGVuYW50IG9yIGJhc2VkIG9uIGFsbCBhcHBsaWNhdGlvbnMuXG4gIC8vIGFzeW5jIGxpc3RQYWNrYWdlcygpIHtcbiAgLy8gICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMjAwMCB9KTtcbiAgLy8gICByZXR1cm4gZGF0YS5maWx0ZXIoKGFwcDogYW55KSA9PiBhcHAuZXhwb3J0cyB8fCAoYXBwLm1hbmlmZXN0ICYmIGFwcC5tYW5pZmVzdC5leHBvcnRzKSk7XG4gIC8vIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhY2thZ2VzLlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgcGFja2FnZXMuXG4gICAqL1xuICBhc3luYyBsaXN0UGFja2FnZXMocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5saXN0QXBwbGljYXRpb25zQnlDdXJyZW50VGVuYW50KHBhcmFtcyk7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApKTtcbiAgICByZXR1cm4gd2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW4gYXBwbGljYXRpb24gaXMgYSBwYWNrYWdlLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXBwbGljYXRpb24gaXMgYSBwYWNrYWdlLlxuICAgKi9cbiAgaXNQYWNrYWdlKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwbGljYXRpb24ubWFuaWZlc3Q/LmlzUGFja2FnZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByZW1vdGVzIGZpZWxkIGluIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGJ5IGFkZGluZyBuZXcgcGx1Z2lucy5cbiAgICogSW1wb3J0YW50OiBpZiB0aGUgcmVtb3RlcyBvYmplY3QgaXMgbm90IHNldCBvbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QsXG4gICAqIHJlbW90ZXMgd2lsbCBub3QgYmUgYWRkZWQuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgb2JqZWN0IGV4aXN0cyBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gcGx1Z2lucyBMaXN0IG9mIHJlbW90ZXMgdG8gYmUgYWRkZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdXBkYXRlZCBhcHBsaWNhdGlvbiByZW1vdGVzLlxuICAgKi9cbiAgYXN5bmMgYWRkUmVtb3RlcyhcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luIHwgQXBwbGljYXRpb25QbHVnaW5bXVxuICApOiBQcm9taXNlPEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucz4ge1xuICAgIGNvbnN0IGFwcENvbmZpZ1JlbW90ZXMgPSAoYXBwbGljYXRpb24/LmNvbmZpZyBhcyBQbHVnaW5zQ29uZmlnKT8ucmVtb3RlcztcbiAgICBpZiAoYXBwQ29uZmlnUmVtb3Rlcykge1xuICAgICAgY29uc3QgbmV3UmVtb3RlcyA9IHRoaXMuYWRkUGx1Z2luVG9SZW1vdGVzKGFwcENvbmZpZ1JlbW90ZXMsIHBsdWdpbnMpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlUmVtb3Rlc0luQXBwQ29uZmlnKGFwcGxpY2F0aW9uLCBuZXdSZW1vdGVzKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYnkgcmVtb3ZpbmcgcGx1Z2lucy5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gcGx1Z2lucyBMaXN0IG9mIHJlbW90ZXMgdG8gYmUgcmVtb3ZlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB1cGRhdGVkIGFwcGxpY2F0aW9uIHJlbW90ZXMuXG4gICAqL1xuICBhc3luYyByZW1vdmVSZW1vdGVzKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW4gfCBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IFByb21pc2U8QXBwbGljYXRpb25SZW1vdGVQbHVnaW5zPiB7XG4gICAgY29uc3QgYXBwQ29uZmlnUmVtb3RlcyA9IChhcHBsaWNhdGlvbj8uY29uZmlnIGFzIFBsdWdpbnNDb25maWcpPy5yZW1vdGVzO1xuICAgIGNvbnN0IG5ld1JlbW90ZXMgPSB0aGlzLnJlbW92ZVBsdWdpbnNGcm9tUmVtb3RlcyhhcHBDb25maWdSZW1vdGVzLCBwbHVnaW5zKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVSZW1vdGVzSW5BcHBDb25maWcoYXBwbGljYXRpb24sIG5ld1JlbW90ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHBhcmFtIHBsdWdpbnMgTGlzdCBvZiByZW1vdGVzIHRvIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHVwZGF0ZWQgYXBwbGljYXRpb24gcmVtb3Rlcy5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVJlbW90ZXNJbkFwcENvbmZpZyhcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1xuICApOiBQcm9taXNlPEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucz4ge1xuICAgIGNvbnN0IHVwZGF0ZWRBcHBXaXRoQ29uZmlnID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlQXBwbGljYXRpb25Db25maWcoXG4gICAgICBhcHBsaWNhdGlvbixcbiAgICAgIHtcbiAgICAgICAgcmVtb3RlczogcGx1Z2luc1xuICAgICAgfSBhcyBQbHVnaW5zQ29uZmlnXG4gICAgKTtcbiAgICByZXR1cm4gdXBkYXRlZEFwcFdpdGhDb25maWc/LmNvbmZpZz8ucmVtb3RlcyB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAgICovXG4gIGFzeW5jIGdldEN1bXVsb2NpdHlKc29uRmlsZShhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgYzh5SnNvbiA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcE1hbmlmZXN0KGFwcGxpY2F0aW9uKTtcbiAgICBpZiAoIWM4eUpzb24ucmVtb3Rlcykge1xuICAgICAgYzh5SnNvbi5yZW1vdGVzID0ge307XG4gICAgfVxuICAgIHJldHVybiBjOHlKc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluaXRpYWwgc3RhdGUgb2YgcmVtb3RlcyBpbiB0aGUgY29uZmlndXJhdGlvbiAod2hlbiBpdCdzIG1pc3NpbmcpLCBiYXNlZCBvbiB0aGUgbGlzdCBvZiByZW1vdGVzIGJlaW5nIGluIHRoZSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uICBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgcmVtb3RlcyB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICovXG4gIGFzeW5jIHNldEluaXRpYWxSZW1vdGVzKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWFuaWZlc3RSZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb25GaWxlKGFwcGxpY2F0aW9uKVxuICAgICAgKT8ucmVtb3RlcztcblxuICAgICAgaWYgKG1hbmlmZXN0UmVtb3Rlcykge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyByZW1vdGVzIGluIHRoZSBjb25maWcgYWRkIHJlbW90ZXMgZnJvbSB0aGUgbWFuaWZlc3QgYXMgYW4gaW5pdGlhbCB2YWx1ZSBpZiB0aGVyZSBhcmUgc29tZS5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlUmVtb3Rlc0luQXBwQ29uZmlnKGFwcGxpY2F0aW9uLCBtYW5pZmVzdFJlbW90ZXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyB2ZXJzaW9ucyBsaXN0IG9yIGxpc3Qgb2Ygb2JqZWN0cyBieSB2ZXJzaW9uIHByb3BlcnR5XG4gICAqIEByZXR1cm5zIGxpc3Qgb2YgdmVyc2lvbnMgYXMgYXJyYXkgb2Ygc3RyaW5ncyBvciBhcnJheSBvZiBvYmplY3RzIHNvcnRlZCBieSB2ZXJzaW9uIHByb3BlcnR5XG4gICAqXG4gICAqIEBwYXJhbSB7eyBsaXN0OiBUW107IHBhdGg6IHN0cmluZ1tdIH0gfCBzdHJpbmdbXX0gc291cmNlIGRhdGEgdG8gc29ydFxuICAgKiBAcGFyYW0geydhc2MnIHwgJ2Rlc2MnfSBvcmRlciBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBvcmRlciBvZiBzb3J0aW5nXG4gICAqXG4gICAqICoqRXhhbXBsZSoqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZGF0YSA9IFsnMS41LjAnLCAnMi4wLjAnXTtcbiAgICogY29uc3Qgc29ydGVkRGF0YSA9IHBsdWdpbnNTZXJ2aWNlLnNvcnRWZXJzaW9ucyh2ZXJzaW9ucywgJ2Rlc2MnKTtcbiAgICogLy8gc29ydGVkRGF0YTpcbiAgICogLy8gWycyLjAuMCcsICcxLjUuMCddXG4gICAqIGBgYFxuICAgKlxuICAgKiAqKkV4YW1wbGUqKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRhdGEgPSBbXG4gICAqICB7YXBwOiB7YXBwVmVyc2lvbjogJzEuNS4wJ319LFxuICAgKiAge2FwcDoge2FwcFZlcnNpb246ICcyLjAuMCd9fSxcbiAgICogXTtcbiAgICogY29uc3Qgc29ydGVkRGF0YSA9IHBsdWdpbnNTZXJ2aWNlLnNvcnRWZXJzaW9ucyh7bGlzdDogZGF0YSwgcGF0aDogWydhcHAnLCAnYXBwVmVyc2lvbiddfSwgJ2Rlc2MnKTtcbiAgICogLy8gc29ydGVkRGF0YTpcbiAgICogLy8gW1xuICAgKiAvLyAge2FwcDoge2FwcFZlcnNpb246ICcyLjAuMCd9fSxcbiAgICogLy8gIHthcHA6IHthcHBWZXJzaW9uOiAnMS41LjAnfX1cbiAgICogLy8gXVxuICAgKiBgYGBcbiAgICovXG4gIHNvcnRWZXJzaW9uczxUPihzb3VyY2U6IHsgbGlzdDogVFtdOyBwYXRoOiBzdHJpbmdbXSB9LCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBUW107XG4gIHNvcnRWZXJzaW9ucyhzb3VyY2U6IHN0cmluZ1tdLCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBzdHJpbmdbXTtcbiAgc29ydFZlcnNpb25zKHNvdXJjZTogYW55LCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBhbnkge1xuICAgIGNvbnN0IHNvdXJjZUNvcHkgPSBjbG9uZURlZXAoc291cmNlKTtcbiAgICBpZiAoc291cmNlLmxpc3QgJiYgc291cmNlLnBhdGgpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBzb3VyY2VDb3B5LnBhdGguam9pbignLicpO1xuICAgICAgcmV0dXJuIHNvdXJjZUNvcHkubGlzdC5zb3J0KFxuICAgICAgICAoYSwgYikgPT4gY29tcGFyZShjb2VyY2UoZ2V0KGEsIHBhdGgpKSwgY29lcmNlKGdldChiLCBwYXRoKSkpICogKG9yZGVyID09PSAnYXNjJyA/IDEgOiAtMSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzb3VyY2VDb3B5LnNvcnQoKGEsIGIpID0+IGNvbXBhcmUoY29lcmNlKGEpLCBjb2VyY2UoYikpICogKG9yZGVyID09PSAnYXNjJyA/IDEgOiAtMSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhIGxpc3Qgb2YgZXhwb3J0ZWQgcGx1Z2lucyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBvYmplY3QuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgZXhwb3J0ZWQgcGx1Z2lucy5cbiAgICovXG4gIGdldE1GRXhwb3J0cyhhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgY29uc3QgbWFuaWZlc3Q6IFBhcnRpYWw8SU1hbmlmZXN0PiA9IGFwcGxpY2F0aW9uLm1hbmlmZXN0O1xuICAgIGlmICghbWFuaWZlc3QgfHwgIW1hbmlmZXN0LmV4cG9ydHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kUGx1Z2luc0RldGFpbHMobWFuaWZlc3QuZXhwb3J0cywgYXBwbGljYXRpb24uY29udGV4dFBhdGgsIHtcbiAgICAgIHZlcnNpb246IG1hbmlmZXN0LnZlcnNpb24sXG4gICAgICBiaW5hcnlJZDogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYSBsaXN0IG9mIGV4cG9ydHMgZnJvbSBlYWNoIGF2YWlsYWJsZSBwYWNrYWdlLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgZXhwb3J0ZWQgcGx1Z2lucy5cbiAgICovXG4gIGFzeW5jIGdldEFsbE1GRXhwb3J0cyhhbGxWZXJzaW9ucyA9IGZhbHNlKTogUHJvbWlzZTxBcHBsaWNhdGlvblBsdWdpbltdPiB7XG4gICAgY29uc3QgcGx1Z2lucyA9IG5ldyBBcnJheTxBcHBsaWNhdGlvblBsdWdpbj4oKTtcbiAgICBjb25zdCBwYWNrYWdlcyA9IGF3YWl0IHRoaXMubGlzdFBhY2thZ2VzKCk7XG4gICAgZm9yIChjb25zdCBwa2cgb2YgcGFja2FnZXMpIHtcbiAgICAgIGlmICghcGtnPy5tYW5pZmVzdD8uZXhwb3J0cykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbGxWZXJzaW9ucyAmJiBBcnJheS5pc0FycmF5KHBrZy5hcHBsaWNhdGlvblZlcnNpb25zKSkge1xuICAgICAgICBwa2cuYXBwbGljYXRpb25WZXJzaW9ucy5mb3JFYWNoKHZlcnNpb24gPT4ge1xuICAgICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAgIC4uLnRoaXMuZXh0ZW5kUGx1Z2luc0RldGFpbHMocGtnLm1hbmlmZXN0LmV4cG9ydHMsIHBrZy5jb250ZXh0UGF0aCwgdmVyc2lvbilcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAuLi50aGlzLmV4dGVuZFBsdWdpbnNEZXRhaWxzKHBrZy5tYW5pZmVzdC5leHBvcnRzLCBwa2cuY29udGV4dFBhdGgsIHtcbiAgICAgICAgICAgIHZlcnNpb246IHBrZy5tYW5pZmVzdC52ZXJzaW9uLFxuICAgICAgICAgICAgYmluYXJ5SWQ6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwbHVnaW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGEgbGlzdCBvZiByZW1vdGVzIGZyb20gdGhlIGFwcGxpY2F0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGxpc3Qgb2YgcmVtb3Rlcy5cbiAgICovXG4gIGdldE1GUmVtb3RlcyhhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICByZXR1cm4gKGFwcGxpY2F0aW9uPy5jb25maWcgYXMgUGx1Z2luc0NvbmZpZyk/LnJlbW90ZXM7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZpZXMgdGhlIGxpc3Qgb2YgcGx1Z2lucyB0byBoYXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyBpZC5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBleHRlbmRQbHVnaW5zRGV0YWlscyhcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gW10sXG4gICAgY29udGV4dFBhdGg6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIGNvbnN0IGV4dGVuZGVkUGx1Z2lucyA9IHBsdWdpbnMubWFwKHAgPT4gKHtcbiAgICAgIC4uLnAsXG4gICAgICBpZDogdGhpcy5jcmVhdGVQbHVnaW5JZChjb250ZXh0UGF0aCwgcCwgdmVyc2lvbi52ZXJzaW9uKSxcbiAgICAgIGNvbnRleHRQYXRoLFxuICAgICAgdmVyc2lvbjogdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgdGFnczogdmVyc2lvbi50YWdzIHx8IFtdXG4gICAgfSkpO1xuICAgIHJldHVybiBleHRlbmRlZFBsdWdpbnM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RBcHBsaWNhdGlvbnNCeUN1cnJlbnRUZW5hbnQocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICB0eXBlOiAnSE9TVEVEJyxcbiAgICAgICAgcGFnZVNpemU6IDIwMDAsXG4gICAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGFyYW1zXG4gICAgKTtcbiAgICBjb25zdCBzaGFyZWRGaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRCxcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBhcmFtc1xuICAgICk7XG5cbiAgICBjb25zdCB0ZW5hbnROYW1lID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lO1xuICAgIGNvbnN0IFtyZXN1bHRBcHBzT3duZWRCeVRlbmFudCwgcmVzdWx0U2hhcmVkQXBwc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlUZW5hbnQodGVuYW50TmFtZSwgZmlsdGVyKSxcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3Qoc2hhcmVkRmlsdGVyKVxuICAgIF0pO1xuICAgIGNvbnN0IHsgZGF0YTogYXBwc093bmVkQnlUZW5hbnQgfSA9IHJlc3VsdEFwcHNPd25lZEJ5VGVuYW50O1xuICAgIGNvbnN0IHsgZGF0YTogc2hhcmVkQXBwcyB9ID0gcmVzdWx0U2hhcmVkQXBwcztcbiAgICBjb25zdCB3ZWJBcHBzID0gWy4uLmFwcHNPd25lZEJ5VGVuYW50LCAuLi5zaGFyZWRBcHBzXTtcbiAgICByZXR1cm4gdW5pcUJ5KHdlYkFwcHMsIChhcHA6IElBcHBsaWNhdGlvbikgPT4gYXBwLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUGx1Z2luVG9SZW1vdGVzKFxuICAgIHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICBpZiAoIXBsdWdpbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3Rlc0NvcHkgPSBjbG9uZURlZXAocmVtb3Rlcyk7XG4gICAgY29uc3QgdGVtcCA9IEFycmF5LmlzQXJyYXkocGx1Z2lucykgPyBwbHVnaW5zIDogW3BsdWdpbnNdO1xuXG4gICAgdGVtcC5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRleHRQYXRoLCBtb2R1bGVOYW1lIH0gPSB0aGlzLnBhcnNlUGx1Z2luSWQocGx1Z2luLmlkKTtcbiAgICAgIGlmICghY29udGV4dFBhdGggfHwgIW1vZHVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdPy5sZW5ndGggPj0gMFxuICAgICAgICA/IHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXS5wdXNoKG1vZHVsZU5hbWUpXG4gICAgICAgIDogKHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IFtdKS5wdXNoKG1vZHVsZU5hbWUpO1xuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdID0gWy4uLm5ldyBTZXQocmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdKV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlbW90ZXNDb3B5O1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQbHVnaW5zRnJvbVJlbW90ZXMoXG4gICAgcmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luIHwgQXBwbGljYXRpb25QbHVnaW5bXVxuICApIHtcbiAgICBpZiAoIXJlbW90ZXMgfHwgIXBsdWdpbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3Rlc0NvcHkgPSBjbG9uZURlZXAocmVtb3Rlcyk7XG4gICAgY29uc3QgdGVtcCA9IEFycmF5LmlzQXJyYXkocGx1Z2lucykgPyBwbHVnaW5zIDogW3BsdWdpbnNdO1xuXG4gICAgdGVtcC5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRleHRQYXRoLCBtb2R1bGVOYW1lIH0gPSB0aGlzLnBhcnNlUGx1Z2luSWQocGx1Z2luLmlkKTtcbiAgICAgIGlmICghY29udGV4dFBhdGggfHwgIW1vZHVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdID0gcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdLmZpbHRlcihwID0+IHAgIT09IG1vZHVsZU5hbWUpO1xuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdID0gWy4uLm5ldyBTZXQocmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdKV07XG4gICAgICBpZiAocmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZW1vdGVzQ29weTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGx1Z2luSWQoY29udGV4dFBhdGg6IHN0cmluZywgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgdmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y29udGV4dFBhdGh9QCR7dmVyc2lvbn0vJHtwbHVnaW4ubW9kdWxlfWA7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUGx1Z2luSWQoaWQ6IHN0cmluZyk6IHsgY29udGV4dFBhdGg6IHN0cmluZzsgbW9kdWxlTmFtZTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IFtjb250ZXh0UGF0aCwgbW9kdWxlTmFtZV0gPSBpZC5zcGxpdCgnLycpO1xuICAgIHJldHVybiB7IGNvbnRleHRQYXRoLCBtb2R1bGVOYW1lIH07XG4gIH1cbn1cbiJdfQ==
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9wbHVnaW5zL3BsdWdpbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFLeEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7O0FBSXBDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ1Usa0JBQXNDLEVBQ3RDLGVBQWdDO1FBRGhDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSiwwRkFBMEY7SUFDMUYseUJBQXlCO0lBQ3pCLDZFQUE2RTtJQUM3RSw2RkFBNkY7SUFDN0YsSUFBSTtJQUVKOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQWMsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0Is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QUFDO0lBRU8sY0FBYyxDQUFDLFdBQW1CLEVBQUUsTUFBeUIsRUFBRSxPQUFlO1FBQ3BGLE9BQU8sR0FBRyxXQUFXLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRU8sYUFBYSxDQUFDLEVBQVU7UUFDOUIsTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDckMsQ0FBQzs7MkdBcldVLGNBQWM7K0dBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJTWFuaWZlc3Rcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBnZXQsIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb2VyY2UsIGNvbXBhcmUgfSBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ3JvdXBCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblBsdWdpbiwgUGx1Z2luc0NvbmZpZyB9IGZyb20gJy4vcGx1Z2lucy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQbHVnaW5zU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZVxuICApIHt9XG5cbiAgLy8gVE9ETyBWZXJpZnkgaWYgd2Ugc2hvdWxkIGxpc3QgcGFja2FnZXMgdXNpbmcgbGlzdEJ5VGVuYW50IG9yIGJhc2VkIG9uIGFsbCBhcHBsaWNhdGlvbnMuXG4gIC8vIGFzeW5jIGxpc3RQYWNrYWdlcygpIHtcbiAgLy8gICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMjAwMCB9KTtcbiAgLy8gICByZXR1cm4gZGF0YS5maWx0ZXIoKGFwcDogYW55KSA9PiBhcHAuZXhwb3J0cyB8fCAoYXBwLm1hbmlmZXN0ICYmIGFwcC5tYW5pZmVzdC5leHBvcnRzKSk7XG4gIC8vIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhY2thZ2VzLlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgcGFja2FnZXMuXG4gICAqL1xuICBhc3luYyBsaXN0UGFja2FnZXMocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5saXN0QXBwbGljYXRpb25zQnlDdXJyZW50VGVuYW50KHBhcmFtcyk7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApKTtcbiAgICBjb25zdCB1bmlxdWVXZWJBcHBzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzKHdlYkFwcHMsICdjb250ZXh0UGF0aCcpO1xuICAgIHJldHVybiB1bmlxdWVXZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbiBhcHBsaWNhdGlvbiBpcyBhIHBhY2thZ2UuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBhIHBhY2thZ2UuXG4gICAqL1xuICBpc1BhY2thZ2UoYXBwbGljYXRpb246IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHBsaWNhdGlvbi5tYW5pZmVzdD8uaXNQYWNrYWdlID09PSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYnkgYWRkaW5nIG5ldyBwbHVnaW5zLlxuICAgKiBJbXBvcnRhbnQ6IGlmIHRoZSByZW1vdGVzIG9iamVjdCBpcyBub3Qgc2V0IG9uIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCxcbiAgICogcmVtb3RlcyB3aWxsIG5vdCBiZSBhZGRlZC4gTWFrZSBzdXJlIHRoYXQgdGhpcyBvYmplY3QgZXhpc3RzIGluIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBwbHVnaW5zIExpc3Qgb2YgcmVtb3RlcyB0byBiZSBhZGRlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB1cGRhdGVkIGFwcGxpY2F0aW9uIHJlbW90ZXMuXG4gICAqL1xuICBhc3luYyBhZGRSZW1vdGVzKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW4gfCBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IFByb21pc2U8QXBwbGljYXRpb25SZW1vdGVQbHVnaW5zPiB7XG4gICAgY29uc3QgYXBwQ29uZmlnUmVtb3RlcyA9IChhcHBsaWNhdGlvbj8uY29uZmlnIGFzIFBsdWdpbnNDb25maWcpPy5yZW1vdGVzO1xuICAgIGlmIChhcHBDb25maWdSZW1vdGVzKSB7XG4gICAgICBjb25zdCBuZXdSZW1vdGVzID0gdGhpcy5hZGRQbHVnaW5Ub1JlbW90ZXMoYXBwQ29uZmlnUmVtb3RlcywgcGx1Z2lucyk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVSZW1vdGVzSW5BcHBDb25maWcoYXBwbGljYXRpb24sIG5ld1JlbW90ZXMpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVtb3RlcyBmaWVsZCBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBieSByZW1vdmluZyBwbHVnaW5zLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBwbHVnaW5zIExpc3Qgb2YgcmVtb3RlcyB0byBiZSByZW1vdmVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHVwZGF0ZWQgYXBwbGljYXRpb24gcmVtb3Rlcy5cbiAgICovXG4gIGFzeW5jIHJlbW92ZVJlbW90ZXMoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogUHJvbWlzZTxBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnM+IHtcbiAgICBjb25zdCBhcHBDb25maWdSZW1vdGVzID0gKGFwcGxpY2F0aW9uPy5jb25maWcgYXMgUGx1Z2luc0NvbmZpZyk/LnJlbW90ZXM7XG4gICAgY29uc3QgbmV3UmVtb3RlcyA9IHRoaXMucmVtb3ZlUGx1Z2luc0Zyb21SZW1vdGVzKGFwcENvbmZpZ1JlbW90ZXMsIHBsdWdpbnMpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnVwZGF0ZVJlbW90ZXNJbkFwcENvbmZpZyhhcHBsaWNhdGlvbiwgbmV3UmVtb3Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVtb3RlcyBmaWVsZCBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gcGx1Z2lucyBMaXN0IG9mIHJlbW90ZXMgdG8gYmUgYWRkZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdXBkYXRlZCBhcHBsaWNhdGlvbiByZW1vdGVzLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlUmVtb3Rlc0luQXBwQ29uZmlnKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zXG4gICk6IFByb21pc2U8QXBwbGljYXRpb25SZW1vdGVQbHVnaW5zPiB7XG4gICAgY29uc3QgdXBkYXRlZEFwcFdpdGhDb25maWcgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGVBcHBsaWNhdGlvbkNvbmZpZyhcbiAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAge1xuICAgICAgICByZW1vdGVzOiBwbHVnaW5zXG4gICAgICB9IGFzIFBsdWdpbnNDb25maWdcbiAgICApO1xuICAgIHJldHVybiB1cGRhdGVkQXBwV2l0aENvbmZpZz8uY29uZmlnPy5yZW1vdGVzIHx8IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0LlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0LlxuICAgKi9cbiAgYXN5bmMgZ2V0Q3VtdWxvY2l0eUpzb25GaWxlKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBjOHlKc29uID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0QXBwTWFuaWZlc3QoYXBwbGljYXRpb24pO1xuICAgIGlmICghYzh5SnNvbi5yZW1vdGVzKSB7XG4gICAgICBjOHlKc29uLnJlbW90ZXMgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIGM4eUpzb247XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiByZW1vdGVzIGluIHRoZSBjb25maWd1cmF0aW9uICh3aGVuIGl0J3MgbWlzc2luZyksIGJhc2VkIG9uIHRoZSBsaXN0IG9mIHJlbW90ZXMgYmVpbmcgaW4gdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0LlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgbGlzdCBvZiByZW1vdGVzIHRoYXQgaGFzIGJlZW4gYXNzaWduZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKi9cbiAgYXN5bmMgc2V0SW5pdGlhbFJlbW90ZXMoYXBwbGljYXRpb246IElBcHBsaWNhdGlvbikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtYW5pZmVzdFJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbkZpbGUoYXBwbGljYXRpb24pXG4gICAgICApPy5yZW1vdGVzO1xuXG4gICAgICBpZiAobWFuaWZlc3RSZW1vdGVzKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHJlbW90ZXMgaW4gdGhlIGNvbmZpZyBhZGQgcmVtb3RlcyBmcm9tIHRoZSBtYW5pZmVzdCBhcyBhbiBpbml0aWFsIHZhbHVlIGlmIHRoZXJlIGFyZSBzb21lLlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVSZW1vdGVzSW5BcHBDb25maWcoYXBwbGljYXRpb24sIG1hbmlmZXN0UmVtb3Rlcyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHZlcnNpb25zIGxpc3Qgb3IgbGlzdCBvZiBvYmplY3RzIGJ5IHZlcnNpb24gcHJvcGVydHlcbiAgICogQHJldHVybnMgbGlzdCBvZiB2ZXJzaW9ucyBhcyBhcnJheSBvZiBzdHJpbmdzIG9yIGFycmF5IG9mIG9iamVjdHMgc29ydGVkIGJ5IHZlcnNpb24gcHJvcGVydHlcbiAgICpcbiAgICogQHBhcmFtIHt7IGxpc3Q6IFRbXTsgcGF0aDogc3RyaW5nW10gfSB8IHN0cmluZ1tdfSBzb3VyY2UgZGF0YSB0byBzb3J0XG4gICAqIEBwYXJhbSB7J2FzYycgfCAnZGVzYyd9IG9yZGVyIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyIG9mIHNvcnRpbmdcbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkYXRhID0gWycxLjUuMCcsICcyLjAuMCddO1xuICAgKiBjb25zdCBzb3J0ZWREYXRhID0gcGx1Z2luc1NlcnZpY2Uuc29ydFZlcnNpb25zKHZlcnNpb25zLCAnZGVzYycpO1xuICAgKiAvLyBzb3J0ZWREYXRhOlxuICAgKiAvLyBbJzIuMC4wJywgJzEuNS4wJ11cbiAgICogYGBgXG4gICAqXG4gICAqICoqRXhhbXBsZSoqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZGF0YSA9IFtcbiAgICogIHthcHA6IHthcHBWZXJzaW9uOiAnMS41LjAnfX0sXG4gICAqICB7YXBwOiB7YXBwVmVyc2lvbjogJzIuMC4wJ319LFxuICAgKiBdO1xuICAgKiBjb25zdCBzb3J0ZWREYXRhID0gcGx1Z2luc1NlcnZpY2Uuc29ydFZlcnNpb25zKHtsaXN0OiBkYXRhLCBwYXRoOiBbJ2FwcCcsICdhcHBWZXJzaW9uJ119LCAnZGVzYycpO1xuICAgKiAvLyBzb3J0ZWREYXRhOlxuICAgKiAvLyBbXG4gICAqIC8vICB7YXBwOiB7YXBwVmVyc2lvbjogJzIuMC4wJ319LFxuICAgKiAvLyAge2FwcDoge2FwcFZlcnNpb246ICcxLjUuMCd9fVxuICAgKiAvLyBdXG4gICAqIGBgYFxuICAgKi9cbiAgc29ydFZlcnNpb25zPFQ+KHNvdXJjZTogeyBsaXN0OiBUW107IHBhdGg6IHN0cmluZ1tdIH0sIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IFRbXTtcbiAgc29ydFZlcnNpb25zKHNvdXJjZTogc3RyaW5nW10sIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IHN0cmluZ1tdO1xuICBzb3J0VmVyc2lvbnMoc291cmNlOiBhbnksIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IGFueSB7XG4gICAgY29uc3Qgc291cmNlQ29weSA9IGNsb25lRGVlcChzb3VyY2UpO1xuICAgIGlmIChzb3VyY2UubGlzdCAmJiBzb3VyY2UucGF0aCkge1xuICAgICAgY29uc3QgcGF0aCA9IHNvdXJjZUNvcHkucGF0aC5qb2luKCcuJyk7XG4gICAgICByZXR1cm4gc291cmNlQ29weS5saXN0LnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBjb21wYXJlKGNvZXJjZShnZXQoYSwgcGF0aCkpLCBjb2VyY2UoZ2V0KGIsIHBhdGgpKSkgKiAob3JkZXIgPT09ICdhc2MnID8gMSA6IC0xKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNvdXJjZUNvcHkuc29ydCgoYSwgYikgPT4gY29tcGFyZShjb2VyY2UoYSksIGNvZXJjZShiKSkgKiAob3JkZXIgPT09ICdhc2MnID8gMSA6IC0xKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGEgbGlzdCBvZiBleHBvcnRlZCBwbHVnaW5zIGZyb20gdGhlIGFwcGxpY2F0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgbGlzdCBvZiBleHBvcnRlZCBwbHVnaW5zLlxuICAgKi9cbiAgZ2V0TUZFeHBvcnRzKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBtYW5pZmVzdDogUGFydGlhbDxJTWFuaWZlc3Q+ID0gYXBwbGljYXRpb24ubWFuaWZlc3Q7XG4gICAgaWYgKCFtYW5pZmVzdCB8fCAhbWFuaWZlc3QuZXhwb3J0cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leHRlbmRQbHVnaW5zRGV0YWlscyhtYW5pZmVzdC5leHBvcnRzLCBhcHBsaWNhdGlvbi5jb250ZXh0UGF0aCwge1xuICAgICAgdmVyc2lvbjogbWFuaWZlc3QudmVyc2lvbixcbiAgICAgIGJpbmFyeUlkOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhIGxpc3Qgb2YgZXhwb3J0cyBmcm9tIGVhY2ggYXZhaWxhYmxlIHBhY2thZ2UuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBsaXN0IG9mIGFsbCBleHBvcnRlZCBwbHVnaW5zLlxuICAgKi9cbiAgYXN5bmMgZ2V0QWxsTUZFeHBvcnRzKGFsbFZlcnNpb25zID0gZmFsc2UpOiBQcm9taXNlPEFwcGxpY2F0aW9uUGx1Z2luW10+IHtcbiAgICBjb25zdCBwbHVnaW5zID0gbmV3IEFycmF5PEFwcGxpY2F0aW9uUGx1Z2luPigpO1xuICAgIGNvbnN0IHBhY2thZ2VzID0gYXdhaXQgdGhpcy5saXN0UGFja2FnZXMoKTtcbiAgICBmb3IgKGNvbnN0IHBrZyBvZiBwYWNrYWdlcykge1xuICAgICAgaWYgKCFwa2c/Lm1hbmlmZXN0Py5leHBvcnRzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGFsbFZlcnNpb25zICYmIEFycmF5LmlzQXJyYXkocGtnLmFwcGxpY2F0aW9uVmVyc2lvbnMpKSB7XG4gICAgICAgIHBrZy5hcHBsaWNhdGlvblZlcnNpb25zLmZvckVhY2godmVyc2lvbiA9PiB7XG4gICAgICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAgICAgLi4udGhpcy5leHRlbmRQbHVnaW5zRGV0YWlscyhwa2cubWFuaWZlc3QuZXhwb3J0cywgcGtnLmNvbnRleHRQYXRoLCB2ZXJzaW9uKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAgIC4uLnRoaXMuZXh0ZW5kUGx1Z2luc0RldGFpbHMocGtnLm1hbmlmZXN0LmV4cG9ydHMsIHBrZy5jb250ZXh0UGF0aCwge1xuICAgICAgICAgICAgdmVyc2lvbjogcGtnLm1hbmlmZXN0LnZlcnNpb24sXG4gICAgICAgICAgICBiaW5hcnlJZDogdW5kZWZpbmVkXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBsdWdpbnM7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYSBsaXN0IG9mIHJlbW90ZXMgZnJvbSB0aGUgYXBwbGljYXRpb24gb2JqZWN0LlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFJldHVybnMgbGlzdCBvZiByZW1vdGVzLlxuICAgKi9cbiAgZ2V0TUZSZW1vdGVzKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMge1xuICAgIHJldHVybiAoYXBwbGljYXRpb24/LmNvbmZpZyBhcyBQbHVnaW5zQ29uZmlnKT8ucmVtb3RlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiBhbiBhcHBsaWNhdGlvbiBpcyBvd25lZCBieSBtYW5hZ2VtZW50IHRlbmFudC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCBUaGUgYXBwbGljYXRpb24gdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIG93bmVkIGJ5IG1hbmFnZW1lbnQgdGVuYW50LlxuICAgKi9cbiAgaXNPd25lZEJ5TWFuYWdlbWVudChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFwcE93bmVyID0gZ2V0KGFwcCwgJ293bmVyLnRlbmFudC5pZCcpO1xuICAgIHJldHVybiBhcHBPd25lciA9PT0gJ21hbmFnZW1lbnQnO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEdXBsaWNhdGVzKGFwcHM6IElBcHBsaWNhdGlvbltdLCBrZXk6IHN0cmluZyk6IElBcHBsaWNhdGlvbltdIHtcbiAgICBjb25zdCB1bmlxdWVMaXN0OiBJQXBwbGljYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IGdyb3VwZWRBcHBzQnlLZXk6IFJlY29yZDxzdHJpbmcsIElBcHBsaWNhdGlvbltdPiA9IGdyb3VwQnkoYXBwcywga2V5KTtcbiAgICBjb25zdCBncm91cGVkQXBwczogSUFwcGxpY2F0aW9uW11bXSA9IE9iamVjdC5rZXlzKGdyb3VwZWRBcHBzQnlLZXkpLm1hcChcbiAgICAgIGtleSA9PiBncm91cGVkQXBwc0J5S2V5W2tleV1cbiAgICApO1xuICAgIGZvciAoY29uc3QgYXBwc0dyb3VwIG9mIGdyb3VwZWRBcHBzKSB7XG4gICAgICBpZiAoYXBwc0dyb3VwLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgdW5pcXVlTGlzdC5wdXNoKC4uLmFwcHNHcm91cCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhcHBGcm9tQ3VycmVudFRlbmFudCA9IGFwcHNHcm91cC5maW5kKGFwcCA9PiB0aGlzLmlzRnJvbUN1cnJlbnRUZW5hbnQoYXBwKSk7XG4gICAgICAgIGlmIChhcHBGcm9tQ3VycmVudFRlbmFudCkge1xuICAgICAgICAgIHVuaXF1ZUxpc3QucHVzaChhcHBGcm9tQ3VycmVudFRlbmFudCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwTm90T3duZWRCeU1hbmFnZW1lbnQgPSBhcHBzR3JvdXAuZmluZChhcHAgPT4gIXRoaXMuaXNPd25lZEJ5TWFuYWdlbWVudChhcHApKTtcbiAgICAgICAgdW5pcXVlTGlzdC5wdXNoKGFwcE5vdE93bmVkQnlNYW5hZ2VtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuaXF1ZUxpc3Q7XG4gIH1cblxuICBwcml2YXRlIGlzRnJvbUN1cnJlbnRUZW5hbnQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLm93bmVyLnRlbmFudC5pZCA9PT0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBsaXN0IG9mIHBsdWdpbnMgdG8gaGF2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgaWQuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZXh0ZW5kUGx1Z2luc0RldGFpbHMoXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IFtdLFxuICAgIGNvbnRleHRQYXRoOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogSUFwcGxpY2F0aW9uVmVyc2lvblxuICApOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBleHRlbmRlZFBsdWdpbnMgPSBwbHVnaW5zLm1hcChwID0+ICh7XG4gICAgICAuLi5wLFxuICAgICAgaWQ6IHRoaXMuY3JlYXRlUGx1Z2luSWQoY29udGV4dFBhdGgsIHAsIHZlcnNpb24udmVyc2lvbiksXG4gICAgICBjb250ZXh0UGF0aCxcbiAgICAgIHZlcnNpb246IHZlcnNpb24udmVyc2lvbixcbiAgICAgIHRhZ3M6IHZlcnNpb24udGFncyB8fCBbXVxuICAgIH0pKTtcbiAgICByZXR1cm4gZXh0ZW5kZWRQbHVnaW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0QXBwbGljYXRpb25zQnlDdXJyZW50VGVuYW50KHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBhcmFtc1xuICAgICk7XG4gICAgY29uc3Qgc2hhcmVkRmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQsXG4gICAgICAgIHR5cGU6ICdIT1NURUQnLFxuICAgICAgICBwYWdlU2l6ZTogMjAwMCxcbiAgICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICAgIH0sXG4gICAgICBwYXJhbXNcbiAgICApO1xuXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWUubmFtZTtcbiAgICBjb25zdCBbcmVzdWx0QXBwc093bmVkQnlUZW5hbnQsIHJlc3VsdFNoYXJlZEFwcHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5VGVuYW50KHRlbmFudE5hbWUsIGZpbHRlciksXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0KHNoYXJlZEZpbHRlcilcbiAgICBdKTtcbiAgICBjb25zdCB7IGRhdGE6IGFwcHNPd25lZEJ5VGVuYW50IH0gPSByZXN1bHRBcHBzT3duZWRCeVRlbmFudDtcbiAgICBjb25zdCB7IGRhdGE6IHNoYXJlZEFwcHMgfSA9IHJlc3VsdFNoYXJlZEFwcHM7XG4gICAgY29uc3Qgd2ViQXBwcyA9IFsuLi5hcHBzT3duZWRCeVRlbmFudCwgLi4uc2hhcmVkQXBwc107XG4gICAgcmV0dXJuIHVuaXFCeSh3ZWJBcHBzLCAoYXBwOiBJQXBwbGljYXRpb24pID0+IGFwcC5pZCk7XG4gIH1cblxuICBwcml2YXRlIGFkZFBsdWdpblRvUmVtb3RlcyhcbiAgICByZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW4gfCBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgaWYgKCFwbHVnaW5zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbW90ZXNDb3B5ID0gY2xvbmVEZWVwKHJlbW90ZXMpO1xuICAgIGNvbnN0IHRlbXAgPSBBcnJheS5pc0FycmF5KHBsdWdpbnMpID8gcGx1Z2lucyA6IFtwbHVnaW5zXTtcblxuICAgIHRlbXAuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgY29uc3QgeyBjb250ZXh0UGF0aCwgbW9kdWxlTmFtZSB9ID0gdGhpcy5wYXJzZVBsdWdpbklkKHBsdWdpbi5pZCk7XG4gICAgICBpZiAoIWNvbnRleHRQYXRoIHx8ICFtb2R1bGVOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXT8ubGVuZ3RoID49IDBcbiAgICAgICAgPyByZW1vdGVzQ29weVtjb250ZXh0UGF0aF0ucHVzaChtb2R1bGVOYW1lKVxuICAgICAgICA6IChyZW1vdGVzQ29weVtjb250ZXh0UGF0aF0gPSBbXSkucHVzaChtb2R1bGVOYW1lKTtcbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IFsuLi5uZXcgU2V0KHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSldO1xuICAgIH0pO1xuICAgIHJldHVybiByZW1vdGVzQ29weTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUGx1Z2luc0Zyb21SZW1vdGVzKFxuICAgIHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKSB7XG4gICAgaWYgKCFyZW1vdGVzIHx8ICFwbHVnaW5zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbW90ZXNDb3B5ID0gY2xvbmVEZWVwKHJlbW90ZXMpO1xuICAgIGNvbnN0IHRlbXAgPSBBcnJheS5pc0FycmF5KHBsdWdpbnMpID8gcGx1Z2lucyA6IFtwbHVnaW5zXTtcblxuICAgIHRlbXAuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgY29uc3QgeyBjb250ZXh0UGF0aCwgbW9kdWxlTmFtZSB9ID0gdGhpcy5wYXJzZVBsdWdpbklkKHBsdWdpbi5pZCk7XG4gICAgICBpZiAoIWNvbnRleHRQYXRoIHx8ICFtb2R1bGVOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXS5maWx0ZXIocCA9PiBwICE9PSBtb2R1bGVOYW1lKTtcbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IFsuLi5uZXcgU2V0KHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSldO1xuICAgICAgaWYgKHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVtb3Rlc0NvcHk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBsdWdpbklkKGNvbnRleHRQYXRoOiBzdHJpbmcsIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NvbnRleHRQYXRofUAke3ZlcnNpb259LyR7cGx1Z2luLm1vZHVsZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVBsdWdpbklkKGlkOiBzdHJpbmcpOiB7IGNvbnRleHRQYXRoOiBzdHJpbmc7IG1vZHVsZU5hbWU6IHN0cmluZyB9IHtcbiAgICBjb25zdCBbY29udGV4dFBhdGgsIG1vZHVsZU5hbWVdID0gaWQuc3BsaXQoJy8nKTtcbiAgICByZXR1cm4geyBjb250ZXh0UGF0aCwgbW9kdWxlTmFtZSB9O1xuICB9XG59XG4iXX0=
@@ -4,8 +4,8 @@ import { AlertService, AppStateService, gettext, HumanizeAppNamePipe, ModalServi
4
4
  import { TranslateService } from '@ngx-translate/core';
5
5
  import { saveAs } from 'file-saver';
6
6
  import { cloneDeep, get, groupBy, kebabCase, pick, uniqBy } from 'lodash-es';
7
- import { BehaviorSubject } from 'rxjs';
8
- import { debounceTime, take } from 'rxjs/operators';
7
+ import { BehaviorSubject, defer } from 'rxjs';
8
+ import { debounceTime, take, map, shareReplay } from 'rxjs/operators';
9
9
  import { gt, coerce } from 'semver';
10
10
  import { EcosystemError } from './ecosystem-error';
11
11
  import { APP_STATE, ERROR_MESSAGES } from './ecosystem.constants';
@@ -29,6 +29,7 @@ export class EcosystemService {
29
29
  this.inventoryService = inventoryService;
30
30
  this.appDeleted = new EventEmitter();
31
31
  this.progress = new BehaviorSubject(null);
32
+ this.appsGroupedByContextPath$ = defer(() => this.getWebApplications()).pipe(map(webApps => groupBy(webApps, 'contextPath')), shareReplay({ bufferSize: 1, refCount: true }));
32
33
  }
33
34
  getUniqueAppConfig(srcApp, existingApps) {
34
35
  let app = {
@@ -99,7 +100,6 @@ export class EcosystemService {
99
100
  async getWebApplications(customFilter = {}) {
100
101
  const apps = (await this.getApplications(customFilter)).data;
101
102
  const webApps = apps.filter(app => this.isApplication(app));
102
- this.appsGroupedByContextPath = groupBy(webApps, 'contextPath');
103
103
  return webApps.sort((a, b) => a.name.localeCompare(b.name));
104
104
  }
105
105
  async getFeatureApplications(customFilter = {}) {
@@ -141,7 +141,7 @@ export class EcosystemService {
141
141
  window.open(this.applicationService.getHref(app), '_blank', 'noopener,noreferrer');
142
142
  }
143
143
  async canDeleteApp(app) {
144
- return (this.isOwner(app) && ((await this.hasSubscribedAppParent(app)) || !this.isCurrentApp(app)));
144
+ return (this.isOwner(app) && (!this.isCurrentApp(app) || (await this.hasSubscribedAppParent(app))));
145
145
  }
146
146
  isOwner(app) {
147
147
  const currentTenant = this.appStateService.currentTenant.value;
@@ -472,10 +472,8 @@ export class EcosystemService {
472
472
  return !this.isOwner(app) && (await this.hasSubscribedAppParent(app));
473
473
  }
474
474
  async hasSubscribedAppParent(app) {
475
- if (!this.appsGroupedByContextPath) {
476
- await this.getWebApplications();
477
- }
478
- return app.contextPath && this.appsGroupedByContextPath[app.contextPath]?.length === 2;
475
+ const appsGroupedByContextPath = await this.appsGroupedByContextPath$.pipe(take(1)).toPromise();
476
+ return app.contextPath && appsGroupedByContextPath[app.contextPath]?.length === 2;
479
477
  }
480
478
  /**
481
479
  * @deprecated
@@ -583,4 +581,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
583
581
  providedIn: 'root'
584
582
  }]
585
583
  }], 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 }]; } });
586
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFXZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFvQixVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFFakUsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7QUFDMUMsTUFB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QUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sb0JBQW9CLENBQUMsSUFBSSxFQUFFLE9BQU87UUFDeEMsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLDRCQUE0QixJQUFJLE9BQU8sS0FBSyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQ2hHLENBQUM7OzZHQXJyQlUsZ0JBQWdCO2lIQUFoQixnQkFBZ0IsY0FGZixNQUFNOzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LFxuICBBcHBsaWNhdGlvblNlcnZpY2UsXG4gIEFwcGxpY2F0aW9uVHlwZSxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25CaW5hcnksXG4gIElBcHBsaWNhdGlvblZlcnNpb24sXG4gIElBcHBsaWNhdGlvblZlcnNpb25EZWxldGVQYXJhbXMsXG4gIElDdXJyZW50VGVuYW50LFxuICBJZFJlZmVyZW5jZSxcbiAgSUZldGNoUmVzcG9uc2UsXG4gIElJZGVudGlmaWVkLFxuICBJTWFuYWdlZE9iamVjdCxcbiAgSU1hbmlmZXN0LFxuICBJbnZlbnRvcnlTZXJ2aWNlLFxuICBJUmVzdWx0LFxuICBJUmVzdWx0TGlzdCxcbiAgSVVwbG9hZFBhcmFtc092ZXJyaWRlLFxuICBUZW5hbnRTZXJ2aWNlXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBIdW1hbml6ZUFwcE5hbWVQaXBlLFxuICBNb2RhbFNlcnZpY2UsXG4gIFN0YXR1cyxcbiAgWmlwU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBnZXQsIGdyb3VwQnksIGtlYmFiQ2FzZSwgcGljaywgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ3QsIGNvZXJjZSB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBFY29zeXN0ZW1FcnJvciB9IGZyb20gJy4vZWNvc3lzdGVtLWVycm9yJztcbmltcG9ydCB7IEFQUF9TVEFURSwgRVJST1JfTUVTU0FHRVMgfSBmcm9tICcuL2Vjb3N5c3RlbS5jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TdGF0ZSwgRVJST1JfVFlQRSB9IGZyb20gJy4vZWNvc3lzdGVtLm1vZGVsJztcblxuY29uc3QgQ1VNVUxPQ0lUWV9KU09OID0gJ2N1bXVsb2NpdHkuanNvbic7XG5jb25zdCBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIID0gMjM7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEVjb3N5c3RlbVNlcnZpY2Uge1xuICBhcHBEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJQXBwbGljYXRpb24+KCk7XG4gIHByb2dyZXNzOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihudWxsKTtcbiAgcHJpdmF0ZSBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGg6IGFueVtdO1xuICBwcml2YXRlIHhocjogWE1MSHR0cFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbDogTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodW1hbml6ZUFwcE5hbWU6IEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHppcFNlcnZpY2U6IFppcFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRTZXJ2aWNlOiBUZW5hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZVxuICApIHt9XG5cbiAgZ2V0VW5pcXVlQXBwQ29uZmlnKHNyY0FwcDogSUFwcGxpY2F0aW9uLCBleGlzdGluZ0FwcHM6IElBcHBsaWNhdGlvbltdKTogSUFwcGxpY2F0aW9uIHtcbiAgICBsZXQgYXBwOiBJQXBwbGljYXRpb24gPSB7XG4gICAgICBuYW1lOiBzcmNBcHAubmFtZSxcbiAgICAgIGtleTogc3JjQXBwLmtleSxcbiAgICAgIGNvbnRleHRQYXRoOiBzcmNBcHAuY29udGV4dFBhdGhcbiAgICB9O1xuICAgIGZvciAobGV0IHJldHJ5Tm8gPSAwOyByZXRyeU5vIDwgOTsgKSB7XG4gICAgICBpZiAodGhpcy5jaGVja0lmQXBwTmFtZUtleVBhdGhFeGlzdHMoZXhpc3RpbmdBcHBzLCBhcHAsIHJldHJ5Tm8pKSB7XG4gICAgICAgIHJldHJ5Tm8rKztcbiAgICAgICAgYXBwID0ge1xuICAgICAgICAgIG5hbWU6IFtzcmNBcHAubmFtZSwgcmV0cnlOb10uam9pbignLScpLFxuICAgICAgICAgIGtleTogW3NyY0FwcC5rZXksIHJldHJ5Tm9dLmpvaW4oJy0nKSxcbiAgICAgICAgICBjb250ZXh0UGF0aDogW3NyY0FwcC5jb250ZXh0UGF0aCwgcmV0cnlOb10uam9pbignLScpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDb21wYXJlcyBjdXJyZW50bHkgZGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvbiB3aXRoIGFwcGxpY2F0aW9uIHZlcnNpb24gdGFnZ2VkIGFzIFwibGF0ZXN0XCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24gRGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvblxuICAgKiBAcGFyYW0ge29iamVjdH0gbGF0ZXN0QXBwIExhdGVzdCBhcHBsaWNhdGlvbiB2ZXJzaW9uIG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGxhdGVzdCB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50LCBvdGhlcndpc2UgZmFsc2VcbiAgICovXG4gIHNob3VsZFVwZ3JhZGVQYWNrYWdlKGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb246IHN0cmluZywgbGF0ZXN0QXBwOiBJQXBwbGljYXRpb25WZXJzaW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uID0gbGF0ZXN0QXBwPy52ZXJzaW9uO1xuXG4gICAgaWYgKCFsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24gfHwgIWN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3QoY29lcmNlKGxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiksIGNvZXJjZShjdXJyZW50QXBwbGljYXRpb25WZXJzaW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VhcmNoZWQgdGFnXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IGFwcGxpY2F0aW9uVmVyc2lvbnMgQXJyYXkgd2l0aCBhbGwgYXZhaWxhYmxlIHZlcnNpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFNlYXJjaGVkIHRhZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNlYXJjaGVkIHRhZ1xuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25WZXJzaW9uT2JqZWN0QnlUYWcoXG4gICAgYXBwbGljYXRpb25WZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIHRhZ05hbWU6IHN0cmluZ1xuICApOiBJQXBwbGljYXRpb25WZXJzaW9uIHtcbiAgICByZXR1cm4gYXBwbGljYXRpb25WZXJzaW9ucz8uZmluZChlbGVtZW50ID0+IGVsZW1lbnQudGFncy5pbmNsdWRlcyh0YWdOYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRBcHBsaWNhdGlvbihhcHBJZDogSWRSZWZlcmVuY2UpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGV0YWlsKGFwcElkKSkuZGF0YTtcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQXBwbGljYXRpb24+PiB7XG4gICAgY29uc3QgZmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBwYWdlU2l6ZTogMjAwMCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKGZpbHRlciwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5VGVuYW50KGN1cnJlbnRUZW5hbnQubmFtZSwgZmlsdGVyKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1pY3Jvc2VydmljZXMoKTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoKSkuZGF0YTtcbiAgICBjb25zdCBtaWNyb3NlcnZpY2VzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNNaWNyb3NlcnZpY2UoYXBwKSk7XG4gICAgcmV0dXJuIG1pY3Jvc2VydmljZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRXZWJBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcikpLmRhdGE7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzQXBwbGljYXRpb24oYXBwKSk7XG4gICAgdGhpcy5hcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGggPSBncm91cEJ5KHdlYkFwcHMsICdjb250ZXh0UGF0aCcpO1xuICAgIHJldHVybiB3ZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0RmVhdHVyZUFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyKSkuZGF0YTtcbiAgICBjb25zdCB3ZWJBcHBzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNGZWF0dXJlKGFwcCkpO1xuICAgIHJldHVybiB3ZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UGFja2FnZUFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IE9iamVjdC5hc3NpZ24oe30sIGN1c3RvbUZpbHRlcik7XG4gICAgY29uc3Qgc2hhcmVkRmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQsXG4gICAgICAgIHR5cGU6ICdIT1NURUQnLFxuICAgICAgICBwYWdlU2l6ZTogMjAwMFxuICAgICAgfSxcbiAgICAgIGN1c3RvbUZpbHRlclxuICAgICk7XG4gICAgY29uc3QgW3sgZGF0YTogYXBwcyB9LCB7IGRhdGE6IHNoYXJlZCB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0QXBwbGljYXRpb25zKGZpbHRlciksXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0KHNoYXJlZEZpbHRlcilcbiAgICBdKTtcbiAgICBjb25zdCB3ZWJBcHBzID0gWy4uLmFwcHMsIC4uLnNoYXJlZF0uZmlsdGVyKGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApKTtcbiAgICAvLyBhbiBhcHAgY291bGQgYmUgc3Vic2NyaWJlZCB0byBhIHRlbmFudCwgYnV0IGFsc28gaGF2ZSBpdCdzIGF2YWlsYWJpbGl0eSBzZXQgdG8gU0hBUkVELCBpbiB0aGF0IGNhc2UgaXQgd291bGQgb2NjdXIgdHdpY2UuXG4gICAgY29uc3QgdW5pcVdlYkFwcHMgPSB1bmlxQnkod2ViQXBwcywgKGFwcDogSUFwcGxpY2F0aW9uKSA9PiBhcHAuaWQpO1xuICAgIHJldHVybiB1bmlxV2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGlzTWljcm9zZXJ2aWNlSG9zdGluZ0FsbG93ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlOYW1lKCdmZWF0dXJlLW1pY3Jvc2VydmljZS1ob3N0aW5nJyk7XG4gICAgcmV0dXJuICEhYXBwcy5maWx0ZXIoYXBwID0+IGFwcC5vd25lcj8udGVuYW50Py5pZCA9PT0gJ21hbmFnZW1lbnQnKS5sZW5ndGg7XG4gIH1cblxuICBjYW5PcGVuQXBwSW5Ccm93c2VyKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNOb3RBRmVhdHVyZSA9ICF0aGlzLmlzRmVhdHVyZShhcHApO1xuICAgIGNvbnN0IGhhc1Byb3BlclR5cGUgPSBbXG4gICAgICBBcHBsaWNhdGlvblR5cGUuSE9TVEVELFxuICAgICAgQXBwbGljYXRpb25UeXBlLkVYVEVSTkFMLFxuICAgICAgQXBwbGljYXRpb25UeXBlLlJFUE9TSVRPUllcbiAgICBdLmluY2x1ZGVzKGFwcC50eXBlKTtcbiAgICBjb25zdCBpc05vdEFQYWNrYWdlID0gIXRoaXMuaXNQYWNrYWdlKGFwcCk7XG4gICAgcmV0dXJuIGlzTm90QUZlYXR1cmUgJiYgaGFzUHJvcGVyVHlwZSAmJiBpc05vdEFQYWNrYWdlO1xuICB9XG5cbiAgb3BlbkFwcChhcHApIHtcbiAgICB3aW5kb3cub3Blbih0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5nZXRIcmVmKGFwcCksICdfYmxhbmsnLCAnbm9vcGVuZXIsbm9yZWZlcnJlcicpO1xuICB9XG5cbiAgYXN5bmMgY2FuRGVsZXRlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuaXNPd25lcihhcHApICYmICgoYXdhaXQgdGhpcy5oYXNTdWJzY3JpYmVkQXBwUGFyZW50KGFwcCkpIHx8ICF0aGlzLmlzQ3VycmVudEFwcChhcHApKVxuICAgICk7XG4gIH1cblxuICBpc093bmVyKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIGNvbnN0IGFwcE93bmVyID0gZ2V0KGFwcCwgJ293bmVyLnRlbmFudC5pZCcpO1xuICAgIHJldHVybiBjdXJyZW50VGVuYW50Lm5hbWUgPT09IGFwcE93bmVyO1xuICB9XG5cbiAgaXNGZWF0dXJlKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhYXBwLm5hbWUubWF0Y2goL2ZlYXR1cmUtLyk7XG4gIH1cblxuICBpc01pY3Jvc2VydmljZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAudHlwZSA9PT0gJ01JQ1JPU0VSVklDRSc7XG4gIH1cblxuICBpc0V4dGVybmFsKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC50eXBlID09PSAnRVhURVJOQUwnO1xuICB9XG5cbiAgaXNQYWNrYWdlKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC5tYW5pZmVzdD8uaXNQYWNrYWdlID09PSB0cnVlO1xuICB9XG5cbiAgaXNQbHVnaW4oYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLm1hbmlmZXN0Py5wYWNrYWdlID09PSAncGx1Z2luJztcbiAgfVxuXG4gIGNhbmNlbEFwcENyZWF0aW9uKGFwcDogSUFwcGxpY2F0aW9uKTogdm9pZCB7XG4gICAgaWYgKHRoaXMueGhyKSB7XG4gICAgICB0aGlzLnhoci5hYm9ydCgpO1xuICAgIH1cbiAgICBpZiAoYXBwKSB7XG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGUoYXBwKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVVcGxvYWRQcm9ncmVzcyhldmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICBjb25zdCBjdXJyZW50UHJvZ3Jlc3MgPSB0aGlzLnByb2dyZXNzLnZhbHVlO1xuICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KGN1cnJlbnRQcm9ncmVzcyArIChldmVudC5sb2FkZWQgLyBldmVudC50b3RhbCkgKiAoOTUgLSBjdXJyZW50UHJvZ3Jlc3MpKTtcbiAgICB9XG4gIH1cblxuICBzZXRBcHBBY3RpdmVWZXJzaW9uKGFwcDogSUFwcGxpY2F0aW9uLCBhY3RpdmVWZXJzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnVwZGF0ZSh7IGlkOiBhcHAuaWQsIGFjdGl2ZVZlcnNpb25JZCB9KTtcbiAgfVxuXG4gIHNldFBhY2thZ2VWZXJzaW9uVGFnKGFwcDogSUFwcGxpY2F0aW9uLCB2ZXJzaW9uOiBzdHJpbmcsIHRhZ3M6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKGFwcCwgdmVyc2lvbiwgdGFncyk7XG4gIH1cblxuICBkZWxldGVQYWNrYWdlVmVyc2lvbihhcHA6IElBcHBsaWNhdGlvbiwgcGFyYW1zOiBJQXBwbGljYXRpb25WZXJzaW9uRGVsZXRlUGFyYW1zKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZVZlcnNpb25QYWNrYWdlKGFwcCwgcGFyYW1zKTtcbiAgfVxuXG4gIGdldEh1bWFuaXplZEFwcE5hbWUoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmh1bWFuaXplQXBwTmFtZS50cmFuc2Zvcm0oYXBwLm5hbWUpLnBpcGUoZGVib3VuY2VUaW1lKDI1MCksIHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgY3JlYXRlQ29uZmlnKGFwcDogSUFwcGxpY2F0aW9uLCBmb3JtR3JvdXBWYWx1ZTogRm9ybUdyb3VwKTogUGFydGlhbDxJQXBwbGljYXRpb24+IHtcbiAgICBjb25zdCB7IGlkLCB0eXBlLCBhdmFpbGFiaWxpdHkgfSA9IGFwcDtcbiAgICBsZXQgY29uZmlnID0gcGljayhmb3JtR3JvdXBWYWx1ZSwgWyduYW1lJywgJ2tleScsICdjb250ZXh0UGF0aCddKTtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBpc1NldHVwOiB0cnVlLFxuICAgICAgaWQsXG4gICAgICB0eXBlLFxuICAgICAgYXZhaWxhYmlsaXR5XG4gICAgfTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwTWFuaWZlc3QoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBzb3VyY2VQYWNrYWdlOiBJQXBwbGljYXRpb25cbiAgKTogUHJvbWlzZTx7IHJlczogSUZldGNoUmVzcG9uc2U7IGRhdGE6IGFueSB9PiB7XG4gICAgY29uc3QgeyBpZCB9ID0gYXBwbGljYXRpb247XG4gICAgY29uc3QgY2xlYW5lZEFwcCA9IHRoaXMucmVtb3ZlQXBwUHJvcGVydGllcyhhcHBsaWNhdGlvbik7XG4gICAgaWYgKCFjbGVhbmVkQXBwLm1hbmlmZXN0KSB7XG4gICAgICBjbGVhbmVkQXBwLm1hbmlmZXN0ID0ge307XG4gICAgfVxuICAgIGNsZWFuZWRBcHAubWFuaWZlc3QuaXNQYWNrYWdlID0gZmFsc2U7XG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdC5zb3VyY2UgPSBzb3VyY2VQYWNrYWdlLmlkO1xuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlXG4gICAgICAuYmluYXJ5KGlkKVxuICAgICAgLnVwZGF0ZUZpbGVzKFt7IHBhdGg6IENVTVVMT0NJVFlfSlNPTiwgY29udGVudHM6IEpTT04uc3RyaW5naWZ5KGNsZWFuZWRBcHApIGFzIGFueSB9XSk7XG4gIH1cblxuICBhc3luYyBsaXN0QXJjaGl2ZXMoYXBwSWQ6IHN0cmluZyB8IG51bWJlciB8IElBcHBsaWNhdGlvbik6IFByb21pc2U8SUFwcGxpY2F0aW9uQmluYXJ5W10+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSB7XG4gICAgICBwYWdlU2l6ZTogMTAwXG4gICAgfTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHBJZCkubGlzdChmaWx0ZXIpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQXJjaGl2ZShhcmNoaXZlOiBJQXBwbGljYXRpb25CaW5hcnksIGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaHVtYW5pemVkQXJjaGl2ZU5hbWUgPSBhd2FpdCB0aGlzLmdldEh1bWFuaXplZEFwcE5hbWUoYXJjaGl2ZSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFyY2hpdmUnKSxcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBhcmNoaXZlIFwie3sgaHVtYW5pemVkQXJjaGl2ZU5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICAgKSxcbiAgICAgICAgICB7IGh1bWFuaXplZEFyY2hpdmVOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRlbGV0ZShhcmNoaXZlLmlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXJjaGl2ZSBkZWxldGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4KSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihnZXQoZXgsICdkYXRhLm1lc3NhZ2UnKSwgZXguZGF0YSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbmNlbGxlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFyY2hpdmVNYW5hZ2VkT2JqZWN0KGJpbmFyeUlkOiBzdHJpbmcpOiBQcm9taXNlPElNYW5hZ2VkT2JqZWN0PiB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmludmVudG9yeVNlcnZpY2UuZGV0YWlsKGJpbmFyeUlkKSkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkQXJjaGl2ZShcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICBhcmNoaXZlOiBQaWNrPElBcHBsaWNhdGlvbkJpbmFyeSwgJ25hbWUnIHwgJ2lkJz5cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJpbmFyeSA9IGF3YWl0IHRoaXMuZ2V0QmluYXJ5KGFwcCwgYXJjaGl2ZSk7XG4gICAgICBjb25zdCBmaWxlQmluYXJ5ID0gbmV3IEJsb2IoW2JpbmFyeV0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL3gtemlwLWNvbXByZXNzZWQnIH0pO1xuICAgICAgc2F2ZUFzKGZpbGVCaW5hcnksIGFyY2hpdmUubmFtZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZW1wdHlcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHAoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgZGVsZXRlT25GYWlsdXJlOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxJUmVzdWx0PElBcHBsaWNhdGlvbj4+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnVwZGF0ZShhcHApO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgICAgaWYgKGRlbGV0ZU9uRmFpbHVyZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGUoYXBwLmlkKTtcbiAgICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuQVBQTElDQVRJT05fQ1JFQVRJT05fRkFJTEVEKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBkZWxldGVBcHAoYXBwOiBJQXBwbGljYXRpb24sIHNpbGVudCA9IGZhbHNlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaHVtYW5pemVkQXBwTmFtZSA9IGF3YWl0IHRoaXMuZ2V0SHVtYW5pemVkQXBwTmFtZShhcHApO1xuICAgIGlmICghc2lsZW50KSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBhcHBsaWNhdGlvbicpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFwcGxpY2F0aW9uIFwie3sgaHVtYW5pemVkQXBwTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaHVtYW5pemVkQXBwTmFtZSB9XG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5EQU5HRVIsXG4gICAgICAgIHsgb2s6IGdldHRleHQoJ0RlbGV0ZScpLCBjYW5jZWw6IGdldHRleHQoJ0NhbmNlbCcpIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHAuaWQpO1xuICAgIGlmICghc2lsZW50KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FwcGxpY2F0aW9uIGRlbGV0ZWQuJykpO1xuICAgIH1cbiAgICB0aGlzLmFwcERlbGV0ZWQuZW1pdChhcHApO1xuICB9XG5cbiAgYXN5bmMgY2hlY2tJZlN1YnNjcmliZWQoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLmN1cnJlbnQoKTtcbiAgICBjb25zdCBzdWJzY3JpYmVkQXBwcyA9IGN1cnJlbnRUZW5hbnQuZGF0YS5hcHBsaWNhdGlvbnMucmVmZXJlbmNlcztcbiAgICByZXR1cm4gc3Vic2NyaWJlZEFwcHMuc29tZShhcHBsaWNhdGlvbiA9PiBhcHBsaWNhdGlvbi5hcHBsaWNhdGlvbi5pZCA9PT0gYXBwLmlkKTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLnN1YnNjcmliZUFwcGxpY2F0aW9uKGN1cnJlbnRUZW5hbnQsIGFwcCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1N1Y2Nlc3NmdWxseSBzdWJzY3JpYmVkIHRvIGFwcGxpY2F0aW9uLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1bnN1YnNjcmliZUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy50ZW5hbnRTZXJ2aWNlLnVuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHVuc3Vic2NyaWJlZCBmcm9tIGFwcGxpY2F0aW9uLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc1ZhbGlkQXBwVHlwZShhcmNoaXZlOiBGaWxlLCBhcHBUeXBlOiBBcHBsaWNhdGlvblR5cGUpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3VycmVudFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgICBpZiAoY3VycmVudFR5cGUgIT09IGFwcFR5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuVFlQRV9WQUxJREFUSU9OKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3MubmV4dCh0aGlzLnByb2dyZXNzLnZhbHVlICsgMTApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuVFlQRV9WQUxJREFUSU9OKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGxvYWRBcmNoaXZlVG9BcHAoXG4gICAgYXJjaGl2ZTogRmlsZSxcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICBpc05ld1ZlcnNpb246IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIGxldCB1cGxvYWRPdmVycmlkZXM6IElVcGxvYWRQYXJhbXNPdmVycmlkZTtcbiAgICBpZiAoaXNOZXdWZXJzaW9uKSB7XG4gICAgICB1cGxvYWRPdmVycmlkZXMgPSBhd2FpdCB0aGlzLmdldFVwbG9hZE92ZXJyaWRlcyhhcmNoaXZlLCBhcHApO1xuICAgIH1cbiAgICBjb25zdCBiaW5hcnlTZXJ2aWNlID0gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCk7XG4gICAgdGhpcy54aHIgPSBiaW5hcnlTZXJ2aWNlLnVwbG9hZFdpdGhQcm9ncmVzc1hocihcbiAgICAgIGFyY2hpdmUsXG4gICAgICB0aGlzLnVwZGF0ZVVwbG9hZFByb2dyZXNzLmJpbmQodGhpcyksXG4gICAgICAnJyxcbiAgICAgIHVwbG9hZE92ZXJyaWRlc1xuICAgICk7XG5cbiAgICBjb25zdCBiaW5hcnlNbyA9IGF3YWl0IGJpbmFyeVNlcnZpY2UuZ2V0WE1MSHR0cFJlc3BvbnNlKHRoaXMueGhyKTtcblxuICAgIC8vIFRPRE8gY29tbWVudGVkIGl0IGR1ZSB0bzogaHR0cHM6Ly9jdW11bG9jaXR5LmF0bGFzc2lhbi5uZXQvYnJvd3NlL01UTS00ODU1M1xuICAgIC8vIEFkZCBpdCBiYWNrIHdoZW4gQkUgZml4ZXMgaXNzdWVzIHdpdGggYWN0aXZlVmVyc2lvbi5cbiAgICAvLyBpZiAoaXNOZXdWZXJzaW9uKSB7XG4gICAgLy8gICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbihhcHApO1xuICAgIC8vIH1cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2V0QXBwQWN0aXZlVmVyc2lvbihhcHAsIChiaW5hcnlNby5iaW5hcnlJZCB8fCBiaW5hcnlNby5pZCkgYXMgc3RyaW5nKSkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQXJjaGl2ZVRvQXBwQ29tcGF0aWJpbGl0eShhcmNoaXZlOiBGaWxlLCBhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgaWYgKGFwcFR5cGUgIT09IGFwcC50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTWljcm9zZXJ2aWNlKGFwcCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmUpO1xuICAgIC8vIEEgdXNlciBjYW4gdXBsb2FkIGFuIGFwcCB3aXRob3V0IGEgQ3VtdWxvY2l0eSBKU09OIGZpbGUgKGUuZy4gYSByZWFjdCBhcHApLlxuICAgIC8vIFRoaXMgaXMgYWxsb3dlZCBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgdmFsaWRhdGlvbiBlcnJvci5cbiAgICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3QsIGFwcCk7XG4gIH1cblxuICBhc3luYyBnZXRDdW11bG9jaXR5SnNvbihhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxJTWFuaWZlc3QgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGM4eU1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSkudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gYzh5TWFuaWZlc3Q7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFwcEZvckFyY2hpdmUoYXJjaGl2ZSwgaXNQYWNrYWdlVHlwZUFyY2hpdmUgPSBmYWxzZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IGlzUGFja2FnZSA9IGZhbHNlO1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgbGV0IGFwcE1vZGVsOiBhbnkgPSB7fTtcbiAgICBjb25zdCBzdXBwb3J0ZWRBcHBUeXBlcyA9IFtBcHBsaWNhdGlvblR5cGUuSE9TVEVELCBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFXTtcblxuICAgIGlmIChzdXBwb3J0ZWRBcHBUeXBlcy5pbmNsdWRlcyhhcHBUeXBlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwTW9kZWwgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgICAgaXNQYWNrYWdlID0gYXBwTW9kZWwuaXNQYWNrYWdlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCB3ZSBhbGxvdyBoYXZpbmcgSE9TVEVEIGFwcGxpY2F0aW9ucyB3aXRob3V0IHRoZSBtYW5pZmVzdCBmaWxlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEJhc2VOYW1lRnJvbUFyY2hpdmVPckFwcE1vZGVsKGFyY2hpdmUsIGFwcFR5cGUsIGFwcE1vZGVsKTtcbiAgICBjb25zdCBjbGVhcmVkTmFtZSA9IHRoaXMucmVtb3ZlRm9yYmlkZGVuQ2hhcmFjdGVycyhuYW1lKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEFwcEtleShhcHBNb2RlbCwgY2xlYXJlZE5hbWUpO1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGhpcy5nZXRDb250ZXh0UGF0aChhcHBNb2RlbCwgbmFtZSk7XG5cbiAgICBjb25zdCBhcHBUb1NhdmUgPSB7XG4gICAgICByZXNvdXJjZXNVcmw6ICcvJyxcbiAgICAgIHR5cGU6IGFwcFR5cGUsXG4gICAgICBuYW1lLFxuICAgICAga2V5LFxuICAgICAgY29udGV4dFBhdGhcbiAgICB9O1xuXG4gICAgaWYgKGlzUGFja2FnZVR5cGVBcmNoaXZlICYmICFpc1BhY2thZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfUEFDS0FHRSk7XG4gICAgfSBlbHNlIGlmICghaXNQYWNrYWdlVHlwZUFyY2hpdmUgJiYgaXNQYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNOYW1lTGVuZ3RoRXhjZWVkZWQobmFtZSwgYXBwVHlwZSkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICBlcnJvci5uYW1lID0gRVJST1JfVFlQRS5NSUNST1NFUlZJQ0VfTkFNRV9UT09fTE9ORztcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChFUlJPUl9NRVNTQUdFU1tlcnJvci5uYW1lXSwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBtYXhDaGFyczogTUlDUk9TRVJWSUNFX05BTUVfTUFYX0xFTkdUSFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIC4uLmFwcFRvU2F2ZSxcbiAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICBpc1BhY2thZ2UsXG4gICAgICAgICAgLi4uKGFwcE1vZGVsPy5wYWNrYWdlICYmIHsgcGFja2FnZTogYXBwTW9kZWwucGFja2FnZSB9KVxuICAgICAgICB9IGFzIHVua25vd24gYXMgSU1hbmlmZXN0XG4gICAgICB9KVxuICAgICkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHJlYWN0aXZhdGVBcmNoaXZlKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnJlYWN0aXZhdGVBcmNoaXZlKGFwcC5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FwcGxpY2F0aW9uIHJlYWN0aXZhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVPbGRlc3RBcmNoaXZlKGFwcDogSUFwcGxpY2F0aW9uLCBhcmNoaXZlczogSUFwcGxpY2F0aW9uQmluYXJ5W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgb2xkZXN0IGFyY2hpdmUgYW5kIGNvbnRpbnVlJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1VwIHRvIDYgYXJjaGl2ZXMgY2FuIGJlIHNhdmVkIGluIHRoZSBwbGF0Zm9ybS4gSWYgeW91IHVwbG9hZCBhIG5ldyBhcmNoaXZlLCB0aGUgb2xkZXN0IGFyY2hpdmUgdGhhdCBpcyBub3QgYWN0aXZlIHdpbGwgYmUgZGVsZXRlZC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5JTkZPLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUgYW5kIGNvbnRpbnVlJykgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFyY2hpdmVUb0RlbGV0ZSA9IGFyY2hpdmVzW2FyY2hpdmVzLmxlbmd0aCAtIDJdO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmVUb0RlbGV0ZS5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FyY2hpdmUgZGVsZXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBwU3RhdGUoYXBwOiBJQXBwbGljYXRpb24pOiBBcHBsaWNhdGlvblN0YXRlIHtcbiAgICBpZiAoIXRoaXMuaXNPd25lcihhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlNVQlNDUklCRUQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVW5wYWNrZWQoYXBwKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5VTlBBQ0tFRDtcbiAgICB9IGVsc2UgaWYgKGFwcC50eXBlID09PSBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUwpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuRVhURVJOQUw7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUGFja2FnZUJsdWVwcmludChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfQkxVRVBSSU5UO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc1BsdWdpbnNQYWNrYWdlKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9QTFVHSU47XG4gICAgfVxuICAgIHJldHVybiBBUFBfU1RBVEUuQ1VTVE9NO1xuICB9XG5cbiAgaXNQYWNrYWdlQmx1ZXByaW50KGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYWNrYWdlKGFwcCkgJiYgYXBwLm1hbmlmZXN0LnBhY2thZ2UgPT09ICdibHVlcHJpbnQnO1xuICB9XG5cbiAgaXNQbHVnaW5zUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFja2FnZShhcHApICYmIGFwcC5tYW5pZmVzdC5wYWNrYWdlID09PSAncGx1Z2luJztcbiAgfVxuXG4gIGlzVW5wYWNrZWQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LnNvdXJjZTtcbiAgfVxuXG4gIGhhc0V4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LmV4cG9ydHM/Lmxlbmd0aDtcbiAgfVxuXG4gIGlzQXBwbGljYXRpb24oYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXBwLnR5cGUgIT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgJiYgIXRoaXMuaXNGZWF0dXJlKGFwcCkgJiYgIXRoaXMuaXNQYWNrYWdlKGFwcClcbiAgICApO1xuICB9XG5cbiAgaXNDdXN0b21NaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc093bmVyKGFwcCkgJiYgYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cblxuICBhc3luYyBnZXRCaW5hcnkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgYXJjaGl2ZTogSUFwcGxpY2F0aW9uQmluYXJ5IHwgSUlkZW50aWZpZWRcbiAgKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIGxldCBiaW5hcnk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRvd25sb2FkQXJjaGl2ZShhcmNoaXZlLmlkKTtcbiAgICAgIGJpbmFyeSA9IGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIobXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmFyeTtcbiAgfVxuXG4gIGFzeW5jIGlzT3ZlcndyaXR0ZW5CeUN1c3RvbUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAhdGhpcy5pc093bmVyKGFwcCkgJiYgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKTtcbiAgfVxuXG4gIGFzeW5jIGhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoKSB7XG4gICAgICBhd2FpdCB0aGlzLmdldFdlYkFwcGxpY2F0aW9ucygpO1xuICAgIH1cbiAgICByZXR1cm4gYXBwLmNvbnRleHRQYXRoICYmIHRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoW2FwcC5jb250ZXh0UGF0aF0/Lmxlbmd0aCA9PT0gMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgc2V0QXZhaWxhYmlsaXR5VG9Qcml2YXRlSWZOb3RTZXRBbHJlYWR5KGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBhcHAuYXZhaWxhYmlsaXR5ID0gQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuUFJJVkFURTtcbiAgICByZXR1cm4gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGFuIGVycm9yIGRpYWxvZy5cbiAgICogQHBhcmFtIGVycm9yIEVpdGhlciBhIHNlcnZlciBlcnJvciBvciBhbiBpbnRlcm5hbCBbW0Vjb3N5c3RlbUVycm9yXV0uXG4gICAqL1xuICBhbGVydEVycm9yKGVycm9yOiBFcnJvciB8IEVjb3N5c3RlbUVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWNvc3lzdGVtRXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihlcnJvci5tZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3Q6IElNYW5pZmVzdCwgYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0UGF0aCA9IGdldChtYW5pZmVzdCwgJ2NvbnRleHRQYXRoJyk7XG4gICAgY29uc3QgYXBwS2V5ID0gZ2V0KG1hbmlmZXN0LCAna2V5Jyk7XG4gICAgaWYgKGNvbnRleHRQYXRoICE9PSBhcHAuY29udGV4dFBhdGggfHwgYXBwS2V5ICE9PSBhcHAua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5LRVlfT1JfQ09OVEVYVF9QQVRIX01JU01BVENIKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFwcEtleShhcHBNb2RlbDogSUFwcGxpY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBrZXkgPSBhcHBNb2RlbD8ua2V5O1xuICAgIGlmICgha2V5KSB7XG4gICAgICBrZXkgPSBgJHtrZWJhYkNhc2UobmFtZSl9LWtleWA7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHRQYXRoKGFwcE1vZGVsOiBJQXBwbGljYXRpb24sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwcE1vZGVsPy5jb250ZXh0UGF0aCB8fCBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZvcmJpZGRlbkNoYXJhY3RlcnMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTktX10vZywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0N1cnJlbnRBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUuYXBwO1xuICAgIHJldHVybiBjdXJyZW50QXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGg7XG4gIH1cblxuICBwcml2YXRlIGdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXBTZXJ2aWNlLmdldEpzb25EYXRhKGFyY2hpdmUsIHtcbiAgICAgIGZpbGVuYW1lOiBDVU1VTE9DSVRZX0pTT05cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBwVHlwZShhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxBcHBsaWNhdGlvblR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSlcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oXG4gICAgICAgIGRhdGEgPT5cbiAgICAgICAgICBnZXQoZGF0YSwgJ3R5cGUnKSB8fFxuICAgICAgICAgIChnZXQoZGF0YSwgJ2FwaVZlcnNpb24nKSA/IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgOiBBcHBsaWNhdGlvblR5cGUuSE9TVEVEKVxuICAgICAgKVxuICAgICAgLmNhdGNoKCgpID0+IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCYXNlTmFtZUZyb21BcmNoaXZlT3JBcHBNb2RlbChcbiAgICBhcmNoaXZlOiBhbnksXG4gICAgYXBwVHlwZTogQXBwbGljYXRpb25UeXBlLFxuICAgIGFwcE1vZGVsPzogSUFwcGxpY2F0aW9uXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGJhc2VOYW1lID0gYXBwTW9kZWw/Lm5hbWUgfHwgYXJjaGl2ZS5uYW1lLnJlcGxhY2UoL1xcLnppcCQvaSwgJycpO1xuICAgIGlmIChhcHBUeXBlID09PSAnTUlDUk9TRVJWSUNFJykge1xuICAgICAgYmFzZU5hbWUgPSB0aGlzLnJlbW92ZVZlcnNpb25Gcm9tTmFtZShiYXNlTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKFxuICAgIGV4aXN0aW5nQXBwczogSUFwcGxpY2F0aW9uW10sXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcmV0cnlObzogbnVtYmVyXG4gICk6IElBcHBsaWNhdGlvbiB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQXBwcy5maW5kKFxuICAgICAgZXhpc3RpbmdBcHAgPT5cbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gYXBwLm5hbWUgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBhcHAua2V5IHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGggfHxcbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gW2FwcC5uYW1lLCByZXRyeU5vXS5qb2luKCctJykgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBbYXBwLmtleSwgcmV0cnlOb10uam9pbignLScpIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBbYXBwLmNvbnRleHRQYXRoLCByZXRyeU5vXS5qb2luKCctJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBcHBQcm9wZXJ0aWVzKGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBjb25zdCB0ZW1wQXBwID0gY2xvbmVEZWVwKGFwcCk7XG4gICAgY29uc3QgcHJvcGVydGllc1RvUmVtb3ZlID0gWydpZCcsICdvd25lcicsICdhY3RpdmVWZXJzaW9uSWQnLCAnc2VsZiddO1xuXG4gICAgcHJvcGVydGllc1RvUmVtb3ZlLmZvckVhY2gocHJvcCA9PiBkZWxldGUgdGVtcEFwcFtwcm9wXSk7XG4gICAgcmV0dXJuIHRlbXBBcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFVwbG9hZE92ZXJyaWRlcyhcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8SVVwbG9hZFBhcmFtc092ZXJyaWRlPiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBpc0luaXRpYWxQYWNrYWdlID0gYXBwLmFwcGxpY2F0aW9uVmVyc2lvbnM/Lmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdFVybDogJ3ZlcnNpb25zJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vdm5kLmNvbS5uc24uY3VtdWxvY2l0eS5hcHBsaWNhdGlvblZlcnNpb24ranNvbjtjaGFyc2V0PVVURi04O3Zlcj0wLjknXG4gICAgICB9LFxuICAgICAgYm9keUZpbGVQcm9wZXJ0eTogJ2FwcGxpY2F0aW9uQmluYXJ5JyxcbiAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgIGFwcGxpY2F0aW9uVmVyc2lvbjogeyB2ZXJzaW9uLCAuLi4oaXNJbml0aWFsUGFja2FnZSAmJiB7IHRhZ3M6IFsnbGF0ZXN0J10gfSkgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVZlcnNpb25Gcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVnRXhwID0gLy1cXGQrXFwuXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1cXGQrKT8oLiopJC87XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSh2ZXJzaW9uUmVnRXhwLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGlzTmFtZUxlbmd0aEV4Y2VlZGVkKG5hbWUsIGFwcFR5cGUpIHtcbiAgICByZXR1cm4gbmFtZS5sZW5ndGggPiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIICYmIGFwcFR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cbn1cbiJdfQ==
584
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFXZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLE1BQU0sRUFDTixVQUFVLEVBQ1gsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFvQixVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7QUFFakUsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUM7QUFDMUMsTUFBTSw0QkFBNEIsR0FBRyxFQUFFLENBQUM7QUFLeEMsTUFBTSxPQUFPLGdCQUFnQjtJQU0zQixZQUNVLEtBQW1CLEVBQ25CLFlBQTBCLEVBQzFCLGVBQW9DLEVBQ3BDLGdCQUFrQyxFQUNsQyxrQkFBc0MsRUFDdEMsZUFBZ0MsRUFDaEMsVUFBc0IsRUFDdEIsYUFBNEIsRUFDNUIsZ0JBQWtDO1FBUmxDLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsb0JBQWUsR0FBZixlQUFlLENBQXFCO1FBQ3BDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQUN0QyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBZDVDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUM5QyxhQUFRLEdBQTRCLElBQUksZUFBZSxDQUFTLElBQUksQ0FBQyxDQUFDO1FBZXBFLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFDL0MsV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FDL0MsQ0FBQztJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFvQixFQUFFLFlBQTRCO1FBQ25FLElBQUksR0FBRyxHQUFpQjtZQUN0QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHO1lBQ2YsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1NBQ2hDLENBQUM7UUFDRixLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxHQUFJO1lBQ25DLElBQUksSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ2hFLE9BQU8sRUFBRSxDQUFDO2dCQUNWLEdBQUcsR0FBRztvQkFDSixJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQ3RDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztvQkFDcEMsV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2lCQUNyRCxDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsT0FBTyxHQUFHLENBQUM7YUFDWjtTQUNGO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxvQkFBb0IsQ0FBQyx5QkFBaUMsRUFBRSxTQUE4QjtRQUNwRixNQUFNLHdCQUF3QixHQUFHLFNBQVMsRUFBRSxPQUFPLENBQUM7UUFFcEQsSUFBSSxDQUFDLHdCQUF3QixJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDM0QsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsZ0NBQWdDLENBQzlCLG1CQUEwQyxFQUMxQyxPQUFlO1FBRWYsT0FBTyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQWtCO1FBQ3JDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUVELGVBQWUsQ0FBQyxlQUFvQixFQUFFO1FBQ3BDLE1BQU0sTUFBTSxHQUFXO1lBQ3JCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsY0FBYyxFQUFFLElBQUk7U0FDckIsQ0FBQztRQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUMvRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQjtRQUNwQixNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkUsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxlQUFvQixFQUFFO1FBQzdDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxlQUFvQixFQUFFO1FBQ2pELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxlQUFvQixFQUFFO1FBQ2pELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ2hDO1lBQ0UsWUFBWSxFQUFFLHVCQUF1QixDQUFDLE1BQU07WUFDNUMsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsSUFBSTtTQUNmLEVBQ0QsWUFBWSxDQUNiLENBQUM7UUFDRixNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDM0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDM0MsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RSw0SEFBNEg7UUFDNUgsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRSxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsS0FBSyxDQUFDLDRCQUE0QjtRQUNoQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2hHLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEtBQUssWUFBWSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzdFLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxHQUFpQjtRQUNuQyxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0MsTUFBTSxhQUFhLEdBQUc7WUFDcEIsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLFFBQVE7WUFDeEIsZUFBZSxDQUFDLFVBQVU7U0FDM0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPLGFBQWEsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDO0lBQ3pELENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRztRQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFpQjtRQUNsQyxPQUFPLENBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBaUI7UUFDdkIsTUFBTSxhQUFhLEdBQW1CLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUMvRSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsT0FBTyxhQUFhLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQztJQUN6QyxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQWlCO1FBQ3pCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxjQUFjLENBQUMsR0FBaUI7UUFDOUIsT0FBTyxHQUFHLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQWlCO1FBQzFCLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFpQjtRQUN6QixPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxLQUFLLElBQUksQ0FBQztJQUMxQyxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQWlCO1FBQ3hCLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLEtBQUssUUFBUSxDQUFDO0lBQzVDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFpQjtRQUNqQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2xCO1FBQ0QsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQUs7UUFDeEIsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztTQUM3RjtJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxHQUFpQixFQUFFLGVBQXVCO1FBQzVELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQWlCLEVBQUUsT0FBZSxFQUFFLElBQWM7UUFDckUsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBaUIsRUFBRSxNQUF1QztRQUM3RSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQWlCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDL0YsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFpQixFQUFFLGNBQXlCO1FBQ3ZELE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUN2QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sR0FBRztZQUNQLEdBQUcsTUFBTTtZQUNULE9BQU8sRUFBRSxJQUFJO1lBQ2IsRUFBRTtZQUNGLElBQUk7WUFDSixZQUFZO1NBQ2IsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQ3JCLFdBQXlCLEVBQ3pCLGFBQTJCO1FBRTNCLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQ3hCLFVBQVUsQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1NBQzFCO1FBQ0QsVUFBVSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFFOUMsT0FBTyxNQUFNLElBQUksQ0FBQyxrQkFBa0I7YUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQzthQUNWLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFxQztRQUN0RCxNQUFNLE1BQU0sR0FBRztZQUNiLFFBQVEsRUFBRSxHQUFHO1NBQ2QsQ0FBQztRQUNGLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQTJCLEVBQUUsR0FBaUI7UUFDaEUsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDdEIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQzNCLE9BQU8sQ0FDTCx1RkFBdUYsQ0FDeEYsRUFDRCxFQUFFLG9CQUFvQixFQUFFLENBQ3pCLEVBQ0QsTUFBTSxDQUFDLE1BQU0sRUFDYixFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUNyRCxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUQ7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxRQUFnQjtRQUM1QyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzdELENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUNuQixHQUFpQixFQUNqQixPQUFnRDtRQUVoRCxJQUFJO1lBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFLENBQUMsQ0FBQztZQUNoRixNQUFNLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsUUFBUTtTQUNUO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxTQUFTLENBQ2IsR0FBaUIsRUFDakIsa0JBQTJCLEtBQUs7UUFFaEMsSUFBSTtZQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2xEO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLElBQUksZUFBZSxFQUFFO2dCQUNuQixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxNQUFNLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2FBQ2xFO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFpQixFQUFFLE1BQU0sR0FBRyxLQUFLO1FBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3RCLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUMzQixPQUFPLENBQ0wsdUZBQXVGLENBQ3hGLEVBQ0QsRUFBRSxnQkFBZ0IsRUFBRSxDQUNyQixFQUNELE1BQU0sQ0FBQyxNQUFNLEVBQ2IsRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FDckQsQ0FBQztTQUNIO1FBQ0QsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztTQUM1RDtRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBaUI7UUFDdkMsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3pELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUNsRSxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBaUI7UUFDbEMsTUFBTSxhQUFhLEdBQW1CLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUMvRSxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMseUNBQXlDLENBQUMsQ0FBQyxDQUFDO1NBQy9FO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBaUI7UUFDcEMsTUFBTSxhQUFhLEdBQW1CLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUMvRSxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsNkNBQTZDLENBQUMsQ0FBQyxDQUFDO1NBQ25GO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBYSxFQUFFLE9BQXdCO1FBQzFELElBQUk7WUFDRixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkQsSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFO2dCQUMzQixNQUFNLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUN0RDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxNQUFNLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQ3RCLE9BQWEsRUFDYixHQUFpQixFQUNqQixlQUF3QixLQUFLO1FBRTdCLElBQUksZUFBc0MsQ0FBQztRQUMzQyxJQUFJLFlBQVksRUFBRTtZQUNoQixlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsQ0FDNUMsT0FBTyxFQUNQLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3BDLEVBQUUsRUFDRixlQUFlLENBQ2hCLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbEUsOEVBQThFO1FBQzlFLHVEQUF1RDtRQUN2RCxzQkFBc0I7UUFDdEIsMkNBQTJDO1FBQzNDLElBQUk7UUFDSixPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRyxDQUFDO0lBRUQsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLE9BQWEsRUFBRSxHQUFpQjtRQUN0RSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxPQUFPLEtBQUssR0FBRyxDQUFDLElBQUksRUFBRTtZQUN4QixNQUFNLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQzFEO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QixPQUFPO1NBQ1I7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCw4RUFBOEU7UUFDOUUsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFDRCxNQUFNLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFhO1FBQ25DLElBQUk7WUFDRixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN2RSxPQUFPLFdBQVcsQ0FBQztTQUNwQjtRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLG9CQUFvQixHQUFHLEtBQUs7UUFDN0QsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxJQUFJLFFBQVEsR0FBUSxFQUFFLENBQUM7UUFDdkIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWpGLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3ZDLElBQUk7Z0JBQ0YsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM5RCxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQzthQUNoQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLDRFQUE0RTthQUM3RTtTQUNGO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0UsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXhELE1BQU0sU0FBUyxHQUFHO1lBQ2hCLFlBQVksRUFBRSxHQUFHO1lBQ2pCLElBQUksRUFBRSxPQUFPO1lBQ2IsSUFBSTtZQUNKLEdBQUc7WUFDSCxXQUFXO1NBQ1osQ0FBQztRQUVGLElBQUksb0JBQW9CLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdEMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDdEQ7YUFBTSxJQUFJLENBQUMsb0JBQW9CLElBQUksU0FBUyxFQUFFO1lBQzdDLE1BQU0sSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDMUQ7YUFBTSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUMxQixLQUFLLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQztZQUNuRCxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEUsSUFBSTtnQkFDSixRQUFRLEVBQUUsNEJBQTRCO2FBQ3ZDLENBQUMsQ0FBQztZQUNILE1BQU0sS0FBSyxDQUFDO1NBQ2I7UUFDRCxPQUFPLENBQ0wsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1lBQ25DLEdBQUcsU0FBUztZQUNaLFFBQVEsRUFBRTtnQkFDUixTQUFTO2dCQUNULEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNoQztTQUMxQixDQUFDLENBQ0gsQ0FBQyxJQUFJLENBQUM7SUFDVCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQWlCO1FBQ3ZDLElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsR0FBaUIsRUFBRSxRQUE4QjtRQUN6RSxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDdEIsT0FBTyxDQUFDLG9DQUFvQyxDQUFDLEVBQzdDLE9BQU8sQ0FDTCw0SkFBNEosQ0FDN0osRUFDRCxNQUFNLENBQUMsSUFBSSxFQUNYLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQ3ZDLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0RCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1NBQ3hEO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxHQUFpQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QixPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUM7U0FDN0I7YUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0IsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO1NBQzNCO2FBQU0sSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxRQUFRLEVBQUU7WUFDaEQsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO1NBQzNCO2FBQU0sSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkMsT0FBTyxTQUFTLENBQUMsaUJBQWlCLENBQUM7U0FDcEM7YUFBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyQyxPQUFPLFNBQVMsQ0FBQyxjQUFjLENBQUM7U0FDakM7UUFDRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQWlCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUM7SUFDckUsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQWlCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUM7SUFDbEUsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFpQjtRQUMxQixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEdBQWlCO1FBQzFCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQWlCO1FBQzdCLE9BQU8sQ0FDTCxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FDMUYsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFpQjtRQUNwQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsWUFBWSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUNiLEdBQWlCLEVBQ2pCLE9BQXlDO1FBRXpDLElBQUksTUFBTSxDQUFDO1FBQ1gsSUFBSTtZQUNGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNsQztRQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1gsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLEdBQWlCO1FBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEdBQWlCO1FBQzVDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2hHLE9BQU8sR0FBRyxDQUFDLFdBQVcsSUFBSSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQ7O09BRUc7SUFDSCx1Q0FBdUMsQ0FBQyxHQUFpQjtRQUN2RCxHQUFHLENBQUMsWUFBWSxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQztRQUNuRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCxVQUFVLENBQUMsS0FBNkI7UUFDdEMsSUFBSSxLQUFLLFlBQVksY0FBYyxFQUFFO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN6QzthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0NBQWdDLENBQUMsUUFBbUIsRUFBRSxHQUFpQjtRQUMzRSxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxXQUFXLEtBQUssR0FBRyxDQUFDLFdBQVcsSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUN6RCxNQUFNLElBQUksY0FBYyxDQUFDLFVBQVUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxRQUFzQixFQUFFLElBQVk7UUFDcEQsSUFBSSxHQUFHLEdBQUcsUUFBUSxFQUFFLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDaEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTyxjQUFjLENBQUMsUUFBc0IsRUFBRSxJQUFZO1FBQ3pELE9BQU8sUUFBUSxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVPLHlCQUF5QixDQUFDLEdBQVc7UUFDM0MsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyxZQUFZLENBQUMsR0FBaUI7UUFDcEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ2xELE9BQU8sVUFBVSxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQ3BELENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxPQUFhO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQzFDLFFBQVEsRUFBRSxlQUFlO1NBQzFCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBYTtRQUM5QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7YUFDcEMsU0FBUyxFQUFFO2FBQ1gsSUFBSSxDQUNILElBQUksQ0FBQyxFQUFFLENBQ0wsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7WUFDakIsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQ3BGO2FBQ0EsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sZ0NBQWdDLENBQ3RDLE9BQVksRUFDWixPQUF3QixFQUN4QixRQUF1QjtRQUV2QixJQUFJLFFBQVEsR0FBRyxRQUFRLEVBQUUsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRSxJQUFJLE9BQU8sS0FBSyxjQUFjLEVBQUU7WUFDOUIsUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFTywyQkFBMkIsQ0FDakMsWUFBNEIsRUFDNUIsR0FBaUIsRUFDakIsT0FBZTtRQUVmLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FDdEIsV0FBVyxDQUFDLEVBQUUsQ0FDWixXQUFXLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJO1lBQzdCLFdBQVcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUc7WUFDM0IsV0FBVyxDQUFDLFdBQVcsS0FBSyxHQUFHLENBQUMsV0FBVztZQUMzQyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ2xELFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDaEQsV0FBVyxDQUFDLFdBQVcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVPLG1CQUFtQixDQUFDLEdBQWlCO1FBQzNDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV0RSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQzlCLE9BQWEsRUFDYixHQUFpQjtRQUVqQixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUMvRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLFVBQVU7WUFDbkIsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxrRkFBa0Y7YUFDM0Y7WUFDRCxnQkFBZ0IsRUFBRSxtQkFBbUI7WUFDckMsV0FBVyxFQUFFO2dCQUNYLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTthQUMvRTtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBWTtRQUN4QyxNQUFNLGFBQWEsR0FBRyxvQ0FBb0MsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTztRQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsNEJBQTRCLElBQUksT0FBTyxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDaEcsQ0FBQzs7NkdBdnJCVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBJQXBwbGljYXRpb24sXG4gIElBcHBsaWNhdGlvbkJpbmFyeSxcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcyxcbiAgSUN1cnJlbnRUZW5hbnQsXG4gIElkUmVmZXJlbmNlLFxuICBJRmV0Y2hSZXNwb25zZSxcbiAgSUlkZW50aWZpZWQsXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJTWFuaWZlc3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSZXN1bHQsXG4gIElSZXN1bHRMaXN0LFxuICBJVXBsb2FkUGFyYW1zT3ZlcnJpZGUsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gIE1vZGFsU2VydmljZSxcbiAgU3RhdHVzLFxuICBaaXBTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGdldCwgZ3JvdXBCeSwga2ViYWJDYXNlLCBwaWNrLCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBkZWZlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlLCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ3QsIGNvZXJjZSB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBFY29zeXN0ZW1FcnJvciB9IGZyb20gJy4vZWNvc3lzdGVtLWVycm9yJztcbmltcG9ydCB7IEFQUF9TVEFURSwgRVJST1JfTUVTU0FHRVMgfSBmcm9tICcuL2Vjb3N5c3RlbS5jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TdGF0ZSwgRVJST1JfVFlQRSB9IGZyb20gJy4vZWNvc3lzdGVtLm1vZGVsJztcblxuY29uc3QgQ1VNVUxPQ0lUWV9KU09OID0gJ2N1bXVsb2NpdHkuanNvbic7XG5jb25zdCBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIID0gMjM7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEVjb3N5c3RlbVNlcnZpY2Uge1xuICBhcHBEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxJQXBwbGljYXRpb24+KCk7XG4gIHByb2dyZXNzOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihudWxsKTtcbiAgcHJpdmF0ZSBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGgkOiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIElBcHBsaWNhdGlvbltdPj47XG4gIHByaXZhdGUgeGhyOiBYTUxIdHRwUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGh1bWFuaXplQXBwTmFtZTogSHVtYW5pemVBcHBOYW1lUGlwZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBsaWNhdGlvblNlcnZpY2U6IEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGFwcFN0YXRlU2VydmljZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgemlwU2VydmljZTogWmlwU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlTZXJ2aWNlOiBJbnZlbnRvcnlTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoJCA9IGRlZmVyKCgpID0+IHRoaXMuZ2V0V2ViQXBwbGljYXRpb25zKCkpLnBpcGUoXG4gICAgICBtYXAod2ViQXBwcyA9PiBncm91cEJ5KHdlYkFwcHMsICdjb250ZXh0UGF0aCcpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0VW5pcXVlQXBwQ29uZmlnKHNyY0FwcDogSUFwcGxpY2F0aW9uLCBleGlzdGluZ0FwcHM6IElBcHBsaWNhdGlvbltdKTogSUFwcGxpY2F0aW9uIHtcbiAgICBsZXQgYXBwOiBJQXBwbGljYXRpb24gPSB7XG4gICAgICBuYW1lOiBzcmNBcHAubmFtZSxcbiAgICAgIGtleTogc3JjQXBwLmtleSxcbiAgICAgIGNvbnRleHRQYXRoOiBzcmNBcHAuY29udGV4dFBhdGhcbiAgICB9O1xuICAgIGZvciAobGV0IHJldHJ5Tm8gPSAwOyByZXRyeU5vIDwgOTsgKSB7XG4gICAgICBpZiAodGhpcy5jaGVja0lmQXBwTmFtZUtleVBhdGhFeGlzdHMoZXhpc3RpbmdBcHBzLCBhcHAsIHJldHJ5Tm8pKSB7XG4gICAgICAgIHJldHJ5Tm8rKztcbiAgICAgICAgYXBwID0ge1xuICAgICAgICAgIG5hbWU6IFtzcmNBcHAubmFtZSwgcmV0cnlOb10uam9pbignLScpLFxuICAgICAgICAgIGtleTogW3NyY0FwcC5rZXksIHJldHJ5Tm9dLmpvaW4oJy0nKSxcbiAgICAgICAgICBjb250ZXh0UGF0aDogW3NyY0FwcC5jb250ZXh0UGF0aCwgcmV0cnlOb10uam9pbignLScpXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDb21wYXJlcyBjdXJyZW50bHkgZGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvbiB3aXRoIGFwcGxpY2F0aW9uIHZlcnNpb24gdGFnZ2VkIGFzIFwibGF0ZXN0XCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24gRGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvblxuICAgKiBAcGFyYW0ge29iamVjdH0gbGF0ZXN0QXBwIExhdGVzdCBhcHBsaWNhdGlvbiB2ZXJzaW9uIG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGxhdGVzdCB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50LCBvdGhlcndpc2UgZmFsc2VcbiAgICovXG4gIHNob3VsZFVwZ3JhZGVQYWNrYWdlKGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb246IHN0cmluZywgbGF0ZXN0QXBwOiBJQXBwbGljYXRpb25WZXJzaW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uID0gbGF0ZXN0QXBwPy52ZXJzaW9uO1xuXG4gICAgaWYgKCFsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24gfHwgIWN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3QoY29lcmNlKGxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiksIGNvZXJjZShjdXJyZW50QXBwbGljYXRpb25WZXJzaW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VhcmNoZWQgdGFnXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IGFwcGxpY2F0aW9uVmVyc2lvbnMgQXJyYXkgd2l0aCBhbGwgYXZhaWxhYmxlIHZlcnNpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFNlYXJjaGVkIHRhZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNlYXJjaGVkIHRhZ1xuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25WZXJzaW9uT2JqZWN0QnlUYWcoXG4gICAgYXBwbGljYXRpb25WZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIHRhZ05hbWU6IHN0cmluZ1xuICApOiBJQXBwbGljYXRpb25WZXJzaW9uIHtcbiAgICByZXR1cm4gYXBwbGljYXRpb25WZXJzaW9ucz8uZmluZChlbGVtZW50ID0+IGVsZW1lbnQudGFncy5pbmNsdWRlcyh0YWdOYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRBcHBsaWNhdGlvbihhcHBJZDogSWRSZWZlcmVuY2UpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGV0YWlsKGFwcElkKSkuZGF0YTtcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQXBwbGljYXRpb24+PiB7XG4gICAgY29uc3QgZmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBwYWdlU2l6ZTogMjAwMCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKGZpbHRlciwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5VGVuYW50KGN1cnJlbnRUZW5hbnQubmFtZSwgZmlsdGVyKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1pY3Jvc2VydmljZXMoKTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoKSkuZGF0YTtcbiAgICBjb25zdCBtaWNyb3NlcnZpY2VzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNNaWNyb3NlcnZpY2UoYXBwKSk7XG4gICAgcmV0dXJuIG1pY3Jvc2VydmljZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRXZWJBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcikpLmRhdGE7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzQXBwbGljYXRpb24oYXBwKSk7XG4gICAgcmV0dXJuIHdlYkFwcHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRGZWF0dXJlQXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgYXBwcyA9IChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXIpKS5kYXRhO1xuICAgIGNvbnN0IHdlYkFwcHMgPSBhcHBzLmZpbHRlcihhcHAgPT4gdGhpcy5pc0ZlYXR1cmUoYXBwKSk7XG4gICAgcmV0dXJuIHdlYkFwcHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRQYWNrYWdlQXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbih7fSwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBzaGFyZWRGaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRCxcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwXG4gICAgICB9LFxuICAgICAgY3VzdG9tRmlsdGVyXG4gICAgKTtcbiAgICBjb25zdCBbeyBkYXRhOiBhcHBzIH0sIHsgZGF0YTogc2hhcmVkIH1dID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5nZXRBcHBsaWNhdGlvbnMoZmlsdGVyKSxcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3Qoc2hhcmVkRmlsdGVyKVxuICAgIF0pO1xuICAgIGNvbnN0IHdlYkFwcHMgPSBbLi4uYXBwcywgLi4uc2hhcmVkXS5maWx0ZXIoYXBwID0+IHRoaXMuaXNQYWNrYWdlKGFwcCkpO1xuICAgIC8vIGFuIGFwcCBjb3VsZCBiZSBzdWJzY3JpYmVkIHRvIGEgdGVuYW50LCBidXQgYWxzbyBoYXZlIGl0J3MgYXZhaWxhYmlsaXR5IHNldCB0byBTSEFSRUQsIGluIHRoYXQgY2FzZSBpdCB3b3VsZCBvY2N1ciB0d2ljZS5cbiAgICBjb25zdCB1bmlxV2ViQXBwcyA9IHVuaXFCeSh3ZWJBcHBzLCAoYXBwOiBJQXBwbGljYXRpb24pID0+IGFwcC5pZCk7XG4gICAgcmV0dXJuIHVuaXFXZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgYXN5bmMgaXNNaWNyb3NlcnZpY2VIb3N0aW5nQWxsb3dlZCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGRhdGE6IGFwcHMgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3RCeU5hbWUoJ2ZlYXR1cmUtbWljcm9zZXJ2aWNlLWhvc3RpbmcnKTtcbiAgICByZXR1cm4gISFhcHBzLmZpbHRlcihhcHAgPT4gYXBwLm93bmVyPy50ZW5hbnQ/LmlkID09PSAnbWFuYWdlbWVudCcpLmxlbmd0aDtcbiAgfVxuXG4gIGNhbk9wZW5BcHBJbkJyb3dzZXIoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBpc05vdEFGZWF0dXJlID0gIXRoaXMuaXNGZWF0dXJlKGFwcCk7XG4gICAgY29uc3QgaGFzUHJvcGVyVHlwZSA9IFtcbiAgICAgIEFwcGxpY2F0aW9uVHlwZS5IT1NURUQsXG4gICAgICBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUwsXG4gICAgICBBcHBsaWNhdGlvblR5cGUuUkVQT1NJVE9SWVxuICAgIF0uaW5jbHVkZXMoYXBwLnR5cGUpO1xuICAgIGNvbnN0IGlzTm90QVBhY2thZ2UgPSAhdGhpcy5pc1BhY2thZ2UoYXBwKTtcbiAgICByZXR1cm4gaXNOb3RBRmVhdHVyZSAmJiBoYXNQcm9wZXJUeXBlICYmIGlzTm90QVBhY2thZ2U7XG4gIH1cblxuICBvcGVuQXBwKGFwcCkge1xuICAgIHdpbmRvdy5vcGVuKHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEhyZWYoYXBwKSwgJ19ibGFuaycsICdub29wZW5lcixub3JlZmVycmVyJyk7XG4gIH1cblxuICBhc3luYyBjYW5EZWxldGVBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5pc093bmVyKGFwcCkgJiYgKCF0aGlzLmlzQ3VycmVudEFwcChhcHApIHx8IChhd2FpdCB0aGlzLmhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwKSkpXG4gICAgKTtcbiAgfVxuXG4gIGlzT3duZXIoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50OiBJQ3VycmVudFRlbmFudCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWU7XG4gICAgY29uc3QgYXBwT3duZXIgPSBnZXQoYXBwLCAnb3duZXIudGVuYW50LmlkJyk7XG4gICAgcmV0dXJuIGN1cnJlbnRUZW5hbnQubmFtZSA9PT0gYXBwT3duZXI7XG4gIH1cblxuICBpc0ZlYXR1cmUoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubmFtZS5tYXRjaCgvZmVhdHVyZS0vKTtcbiAgfVxuXG4gIGlzTWljcm9zZXJ2aWNlKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC50eXBlID09PSAnTUlDUk9TRVJWSUNFJztcbiAgfVxuXG4gIGlzRXh0ZXJuYWwoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLnR5cGUgPT09ICdFWFRFUk5BTCc7XG4gIH1cblxuICBpc1BhY2thZ2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLm1hbmlmZXN0Py5pc1BhY2thZ2UgPT09IHRydWU7XG4gIH1cblxuICBpc1BsdWdpbihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAubWFuaWZlc3Q/LnBhY2thZ2UgPT09ICdwbHVnaW4nO1xuICB9XG5cbiAgY2FuY2VsQXBwQ3JlYXRpb24oYXBwOiBJQXBwbGljYXRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy54aHIpIHtcbiAgICAgIHRoaXMueGhyLmFib3J0KCk7XG4gICAgfVxuICAgIGlmIChhcHApIHtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVVwbG9hZFByb2dyZXNzKGV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRQcm9ncmVzcyA9IHRoaXMucHJvZ3Jlc3MudmFsdWU7XG4gICAgICB0aGlzLnByb2dyZXNzLm5leHQoY3VycmVudFByb2dyZXNzICsgKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsKSAqICg5NSAtIGN1cnJlbnRQcm9ncmVzcykpO1xuICAgIH1cbiAgfVxuXG4gIHNldEFwcEFjdGl2ZVZlcnNpb24oYXBwOiBJQXBwbGljYXRpb24sIGFjdGl2ZVZlcnNpb25JZDogc3RyaW5nKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKHsgaWQ6IGFwcC5pZCwgYWN0aXZlVmVyc2lvbklkIH0pO1xuICB9XG5cbiAgc2V0UGFja2FnZVZlcnNpb25UYWcoYXBwOiBJQXBwbGljYXRpb24sIHZlcnNpb246IHN0cmluZywgdGFnczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcoYXBwLCB2ZXJzaW9uLCB0YWdzKTtcbiAgfVxuXG4gIGRlbGV0ZVBhY2thZ2VWZXJzaW9uKGFwcDogSUFwcGxpY2F0aW9uLCBwYXJhbXM6IElBcHBsaWNhdGlvblZlcnNpb25EZWxldGVQYXJhbXMpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlVmVyc2lvblBhY2thZ2UoYXBwLCBwYXJhbXMpO1xuICB9XG5cbiAgZ2V0SHVtYW5pemVkQXBwTmFtZShhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaHVtYW5pemVBcHBOYW1lLnRyYW5zZm9ybShhcHAubmFtZSkucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBjcmVhdGVDb25maWcoYXBwOiBJQXBwbGljYXRpb24sIGZvcm1Hcm91cFZhbHVlOiBGb3JtR3JvdXApOiBQYXJ0aWFsPElBcHBsaWNhdGlvbj4ge1xuICAgIGNvbnN0IHsgaWQsIHR5cGUsIGF2YWlsYWJpbGl0eSB9ID0gYXBwO1xuICAgIGxldCBjb25maWcgPSBwaWNrKGZvcm1Hcm91cFZhbHVlLCBbJ25hbWUnLCAna2V5JywgJ2NvbnRleHRQYXRoJ10pO1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGlzU2V0dXA6IHRydWUsXG4gICAgICBpZCxcbiAgICAgIHR5cGUsXG4gICAgICBhdmFpbGFiaWxpdHlcbiAgICB9O1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBNYW5pZmVzdChcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHNvdXJjZVBhY2thZ2U6IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPHsgcmVzOiBJRmV0Y2hSZXNwb25zZTsgZGF0YTogYW55IH0+IHtcbiAgICBjb25zdCB7IGlkIH0gPSBhcHBsaWNhdGlvbjtcbiAgICBjb25zdCBjbGVhbmVkQXBwID0gdGhpcy5yZW1vdmVBcHBQcm9wZXJ0aWVzKGFwcGxpY2F0aW9uKTtcbiAgICBpZiAoIWNsZWFuZWRBcHAubWFuaWZlc3QpIHtcbiAgICAgIGNsZWFuZWRBcHAubWFuaWZlc3QgPSB7fTtcbiAgICB9XG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjbGVhbmVkQXBwLm1hbmlmZXN0LnNvdXJjZSA9IHNvdXJjZVBhY2thZ2UuaWQ7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2VcbiAgICAgIC5iaW5hcnkoaWQpXG4gICAgICAudXBkYXRlRmlsZXMoW3sgcGF0aDogQ1VNVUxPQ0lUWV9KU09OLCBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoY2xlYW5lZEFwcCkgYXMgYW55IH1dKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RBcmNoaXZlcyhhcHBJZDogc3RyaW5nIHwgbnVtYmVyIHwgSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxJQXBwbGljYXRpb25CaW5hcnlbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiAxMDBcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcElkKS5saXN0KGZpbHRlcikpLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGVBcmNoaXZlKGFyY2hpdmU6IElBcHBsaWNhdGlvbkJpbmFyeSwgYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcmNoaXZlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0SHVtYW5pemVkQXBwTmFtZShhcmNoaXZlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYXJjaGl2ZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFyY2hpdmUgXCJ7eyBodW1hbml6ZWRBcmNoaXZlTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaHVtYW5pemVkQXJjaGl2ZU5hbWUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldChleCwgJ2RhdGEubWVzc2FnZScpLCBleC5kYXRhKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXJjaGl2ZU1hbmFnZWRPYmplY3QoYmluYXJ5SWQ6IHN0cmluZyk6IFByb21pc2U8SU1hbmFnZWRPYmplY3Q+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRBcmNoaXZlKFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGFyY2hpdmU6IFBpY2s8SUFwcGxpY2F0aW9uQmluYXJ5LCAnbmFtZScgfCAnaWQnPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkoYXBwLCBhcmNoaXZlKTtcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24veC16aXAtY29tcHJlc3NlZCcgfSk7XG4gICAgICBzYXZlQXMoZmlsZUJpbmFyeSwgYXJjaGl2ZS5uYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcChcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICBkZWxldGVPbkZhaWx1cmU6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPElSZXN1bHQ8SUFwcGxpY2F0aW9uPj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKGFwcCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgICBpZiAoZGVsZXRlT25GYWlsdXJlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHAuaWQpO1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5BUFBMSUNBVElPTl9DUkVBVElPTl9GQUlMRUQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgc2lsZW50ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcHBOYW1lID0gYXdhaXQgdGhpcy5nZXRIdW1hbml6ZWRBcHBOYW1lKGFwcCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFwcGxpY2F0aW9uJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgYXBwbGljYXRpb24gXCJ7eyBodW1hbml6ZWRBcHBOYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICksXG4gICAgICAgICAgeyBodW1hbml6ZWRBcHBOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gZGVsZXRlZC4nKSk7XG4gICAgfVxuICAgIHRoaXMuYXBwRGVsZXRlZC5lbWl0KGFwcCk7XG4gIH1cblxuICBhc3luYyBjaGVja0lmU3Vic2NyaWJlZChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpO1xuICAgIGNvbnN0IHN1YnNjcmliZWRBcHBzID0gY3VycmVudFRlbmFudC5kYXRhLmFwcGxpY2F0aW9ucy5yZWZlcmVuY2VzO1xuICAgIHJldHVybiBzdWJzY3JpYmVkQXBwcy5zb21lKGFwcGxpY2F0aW9uID0+IGFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uLmlkID09PSBhcHAuaWQpO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2Uuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudW5zdWJzY3JpYmVBcHBsaWNhdGlvbihjdXJyZW50VGVuYW50LCBhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzVmFsaWRBcHBUeXBlKGFyY2hpdmU6IEZpbGUsIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICAgIGlmIChjdXJyZW50VHlwZSAhPT0gYXBwVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEFyY2hpdmVUb0FwcChcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGlzTmV3VmVyc2lvbjogYm9vbGVhbiA9IGZhbHNlXG4gICk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IHVwbG9hZE92ZXJyaWRlczogSVVwbG9hZFBhcmFtc092ZXJyaWRlO1xuICAgIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAgIHVwbG9hZE92ZXJyaWRlcyA9IGF3YWl0IHRoaXMuZ2V0VXBsb2FkT3ZlcnJpZGVzKGFyY2hpdmUsIGFwcCk7XG4gICAgfVxuICAgIGNvbnN0IGJpbmFyeVNlcnZpY2UgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKTtcbiAgICB0aGlzLnhociA9IGJpbmFyeVNlcnZpY2UudXBsb2FkV2l0aFByb2dyZXNzWGhyKFxuICAgICAgYXJjaGl2ZSxcbiAgICAgIHRoaXMudXBkYXRlVXBsb2FkUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICcnLFxuICAgICAgdXBsb2FkT3ZlcnJpZGVzXG4gICAgKTtcblxuICAgIGNvbnN0IGJpbmFyeU1vID0gYXdhaXQgYmluYXJ5U2VydmljZS5nZXRYTUxIdHRwUmVzcG9uc2UodGhpcy54aHIpO1xuXG4gICAgLy8gVE9ETyBjb21tZW50ZWQgaXQgZHVlIHRvOiBodHRwczovL2N1bXVsb2NpdHkuYXRsYXNzaWFuLm5ldC9icm93c2UvTVRNLTQ4NTUzXG4gICAgLy8gQWRkIGl0IGJhY2sgd2hlbiBCRSBmaXhlcyBpc3N1ZXMgd2l0aCBhY3RpdmVWZXJzaW9uLlxuICAgIC8vIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAvLyAgIHJldHVybiBhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9uKGFwcCk7XG4gICAgLy8gfVxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5zZXRBcHBBY3RpdmVWZXJzaW9uKGFwcCwgKGJpbmFyeU1vLmJpbmFyeUlkIHx8IGJpbmFyeU1vLmlkKSBhcyBzdHJpbmcpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVBcmNoaXZlVG9BcHBDb21wYXRpYmlsaXR5KGFyY2hpdmU6IEZpbGUsIGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYXBwVHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICBpZiAoYXBwVHlwZSAhPT0gYXBwLnR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfQVBQTElDQVRJT04pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2dyZXNzLm5leHQodGhpcy5wcm9ncmVzcy52YWx1ZSArIDEwKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNNaWNyb3NlcnZpY2UoYXBwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb24oYXJjaGl2ZSk7XG4gICAgLy8gQSB1c2VyIGNhbiB1cGxvYWQgYW4gYXBwIHdpdGhvdXQgYSBDdW11bG9jaXR5IEpTT04gZmlsZSAoZS5nLiBhIHJlYWN0IGFwcCkuXG4gICAgLy8gVGhpcyBpcyBhbGxvd2VkIGFuZCBzaG91bGQgbm90IHRyaWdnZXIgYSB2YWxpZGF0aW9uIGVycm9yLlxuICAgIGlmICghbWFuaWZlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZVBhY2thZ2VLZXlBbmRDb250ZXh0UGF0aChtYW5pZmVzdCwgYXBwKTtcbiAgfVxuXG4gIGFzeW5jIGdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmU6IEZpbGUpOiBQcm9taXNlPElNYW5pZmVzdCB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYzh5TWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgIHJldHVybiBjOHlNYW5pZmVzdDtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlQXBwRm9yQXJjaGl2ZShhcmNoaXZlLCBpc1BhY2thZ2VUeXBlQXJjaGl2ZSA9IGZhbHNlKTogUHJvbWlzZTxJQXBwbGljYXRpb24+IHtcbiAgICBsZXQgaXNQYWNrYWdlID0gZmFsc2U7XG4gICAgY29uc3QgYXBwVHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICBsZXQgYXBwTW9kZWw6IGFueSA9IHt9O1xuICAgIGNvbnN0IHN1cHBvcnRlZEFwcFR5cGVzID0gW0FwcGxpY2F0aW9uVHlwZS5IT1NURUQsIEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0VdO1xuXG4gICAgaWYgKHN1cHBvcnRlZEFwcFR5cGVzLmluY2x1ZGVzKGFwcFR5cGUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhcHBNb2RlbCA9IGF3YWl0IHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb24kKGFyY2hpdmUpLnRvUHJvbWlzZSgpO1xuICAgICAgICBpc1BhY2thZ2UgPSBhcHBNb2RlbC5pc1BhY2thZ2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmcsIHdlIGFsbG93IGhhdmluZyBIT1NURUQgYXBwbGljYXRpb25zIHdpdGhvdXQgdGhlIG1hbmlmZXN0IGZpbGVcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0QmFzZU5hbWVGcm9tQXJjaGl2ZU9yQXBwTW9kZWwoYXJjaGl2ZSwgYXBwVHlwZSwgYXBwTW9kZWwpO1xuICAgIGNvbnN0IGNsZWFyZWROYW1lID0gdGhpcy5yZW1vdmVGb3JiaWRkZW5DaGFyYWN0ZXJzKG5hbWUpO1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXBwS2V5KGFwcE1vZGVsLCBjbGVhcmVkTmFtZSk7XG4gICAgY29uc3QgY29udGV4dFBhdGggPSB0aGlzLmdldENvbnRleHRQYXRoKGFwcE1vZGVsLCBuYW1lKTtcblxuICAgIGNvbnN0IGFwcFRvU2F2ZSA9IHtcbiAgICAgIHJlc291cmNlc1VybDogJy8nLFxuICAgICAgdHlwZTogYXBwVHlwZSxcbiAgICAgIG5hbWUsXG4gICAgICBrZXksXG4gICAgICBjb250ZXh0UGF0aFxuICAgIH07XG5cbiAgICBpZiAoaXNQYWNrYWdlVHlwZUFyY2hpdmUgJiYgIWlzUGFja2FnZSkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuSU5WQUxJRF9QQUNLQUdFKTtcbiAgICB9IGVsc2UgaWYgKCFpc1BhY2thZ2VUeXBlQXJjaGl2ZSAmJiBpc1BhY2thZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfQVBQTElDQVRJT04pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc05hbWVMZW5ndGhFeGNlZWRlZChuYW1lLCBhcHBUeXBlKSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICAgIGVycm9yLm5hbWUgPSBFUlJPUl9UWVBFLk1JQ1JPU0VSVklDRV9OQU1FX1RPT19MT05HO1xuICAgICAgZXJyb3IubWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KEVSUk9SX01FU1NBR0VTW2Vycm9yLm5hbWVdLCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIG1heENoYXJzOiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKHtcbiAgICAgICAgLi4uYXBwVG9TYXZlLFxuICAgICAgICBtYW5pZmVzdDoge1xuICAgICAgICAgIGlzUGFja2FnZSxcbiAgICAgICAgICAuLi4oYXBwTW9kZWw/LnBhY2thZ2UgJiYgeyBwYWNrYWdlOiBhcHBNb2RlbC5wYWNrYWdlIH0pXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBJTWFuaWZlc3RcbiAgICAgIH0pXG4gICAgKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgcmVhY3RpdmF0ZUFyY2hpdmUoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UucmVhY3RpdmF0ZUFyY2hpdmUoYXBwLmlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gcmVhY3RpdmF0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlbW92ZU9sZGVzdEFyY2hpdmUoYXBwOiBJQXBwbGljYXRpb24sIGFyY2hpdmVzOiBJQXBwbGljYXRpb25CaW5hcnlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ0RlbGV0ZSBvbGRlc3QgYXJjaGl2ZSBhbmQgY29udGludWUnKSxcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnVXAgdG8gNiBhcmNoaXZlcyBjYW4gYmUgc2F2ZWQgaW4gdGhlIHBsYXRmb3JtLiBJZiB5b3UgdXBsb2FkIGEgbmV3IGFyY2hpdmUsIHRoZSBvbGRlc3QgYXJjaGl2ZSB0aGF0IGlzIG5vdCBhY3RpdmUgd2lsbCBiZSBkZWxldGVkLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkPydcbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLklORk8sXG4gICAgICAgIHsgb2s6IGdldHRleHQoJ0RlbGV0ZSBhbmQgY29udGludWUnKSB9XG4gICAgICApO1xuICAgICAgY29uc3QgYXJjaGl2ZVRvRGVsZXRlID0gYXJjaGl2ZXNbYXJjaGl2ZXMubGVuZ3RoIC0gMl07XG4gICAgICBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKS5kZWxldGUoYXJjaGl2ZVRvRGVsZXRlLmlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXJjaGl2ZSBkZWxldGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICB9XG4gIH1cblxuICBnZXRBcHBTdGF0ZShhcHA6IElBcHBsaWNhdGlvbik6IEFwcGxpY2F0aW9uU3RhdGUge1xuICAgIGlmICghdGhpcy5pc093bmVyKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuU1VCU0NSSUJFRDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbnBhY2tlZChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlVOUEFDS0VEO1xuICAgIH0gZWxzZSBpZiAoYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5FWFRFUk5BTCkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5FWFRFUk5BTDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNQYWNrYWdlQmx1ZXByaW50KGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9CTFVFUFJJTlQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzUGx1Z2luc1BhY2thZ2UoYXBwKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5QQUNLQUdFX1BMVUdJTjtcbiAgICB9XG4gICAgcmV0dXJuIEFQUF9TVEFURS5DVVNUT007XG4gIH1cblxuICBpc1BhY2thZ2VCbHVlcHJpbnQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhY2thZ2UoYXBwKSAmJiBhcHAubWFuaWZlc3QucGFja2FnZSA9PT0gJ2JsdWVwcmludCc7XG4gIH1cblxuICBpc1BsdWdpbnNQYWNrYWdlKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYWNrYWdlKGFwcCkgJiYgYXBwLm1hbmlmZXN0LnBhY2thZ2UgPT09ICdwbHVnaW4nO1xuICB9XG5cbiAgaXNVbnBhY2tlZChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWFwcC5tYW5pZmVzdD8uc291cmNlO1xuICB9XG5cbiAgaGFzRXhwb3J0cyhhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWFwcC5tYW5pZmVzdD8uZXhwb3J0cz8ubGVuZ3RoO1xuICB9XG5cbiAgaXNBcHBsaWNhdGlvbihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBhcHAudHlwZSAhPT0gQXBwbGljYXRpb25UeXBlLk1JQ1JPU0VSVklDRSAmJiAhdGhpcy5pc0ZlYXR1cmUoYXBwKSAmJiAhdGhpcy5pc1BhY2thZ2UoYXBwKVxuICAgICk7XG4gIH1cblxuICBpc0N1c3RvbU1pY3Jvc2VydmljZShhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIHJldHVybiB0aGlzLmlzT3duZXIoYXBwKSAmJiBhcHAudHlwZSA9PT0gQXBwbGljYXRpb25UeXBlLk1JQ1JPU0VSVklDRTtcbiAgfVxuXG4gIGFzeW5jIGdldEJpbmFyeShcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICBhcmNoaXZlOiBJQXBwbGljYXRpb25CaW5hcnkgfCBJSWRlbnRpZmllZFxuICApOiBQcm9taXNlPEFycmF5QnVmZmVyPiB7XG4gICAgbGV0IGJpbmFyeTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZG93bmxvYWRBcmNoaXZlKGFyY2hpdmUuaWQpO1xuICAgICAgYmluYXJ5ID0gYXdhaXQgcmVzLmFycmF5QnVmZmVyKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0NvdWxkIG5vdCBnZXQgdGhlIGJpbmFyeS4nKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihtc2cpO1xuICAgIH1cbiAgICByZXR1cm4gYmluYXJ5O1xuICB9XG5cbiAgYXN5bmMgaXNPdmVyd3JpdHRlbkJ5Q3VzdG9tQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuICF0aGlzLmlzT3duZXIoYXBwKSAmJiAoYXdhaXQgdGhpcy5oYXNTdWJzY3JpYmVkQXBwUGFyZW50KGFwcCkpO1xuICB9XG5cbiAgYXN5bmMgaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCA9IGF3YWl0IHRoaXMuYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoJC5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xuICAgIHJldHVybiBhcHAuY29udGV4dFBhdGggJiYgYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoW2FwcC5jb250ZXh0UGF0aF0/Lmxlbmd0aCA9PT0gMjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgc2V0QXZhaWxhYmlsaXR5VG9Qcml2YXRlSWZOb3RTZXRBbHJlYWR5KGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBhcHAuYXZhaWxhYmlsaXR5ID0gQXBwbGljYXRpb25BdmFpbGFiaWxpdHkuUFJJVkFURTtcbiAgICByZXR1cm4gYXBwO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGFuIGVycm9yIGRpYWxvZy5cbiAgICogQHBhcmFtIGVycm9yIEVpdGhlciBhIHNlcnZlciBlcnJvciBvciBhbiBpbnRlcm5hbCBbW0Vjb3N5c3RlbUVycm9yXV0uXG4gICAqL1xuICBhbGVydEVycm9yKGVycm9yOiBFcnJvciB8IEVjb3N5c3RlbUVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRWNvc3lzdGVtRXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihlcnJvci5tZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3Q6IElNYW5pZmVzdCwgYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0UGF0aCA9IGdldChtYW5pZmVzdCwgJ2NvbnRleHRQYXRoJyk7XG4gICAgY29uc3QgYXBwS2V5ID0gZ2V0KG1hbmlmZXN0LCAna2V5Jyk7XG4gICAgaWYgKGNvbnRleHRQYXRoICE9PSBhcHAuY29udGV4dFBhdGggfHwgYXBwS2V5ICE9PSBhcHAua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5LRVlfT1JfQ09OVEVYVF9QQVRIX01JU01BVENIKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEFwcEtleShhcHBNb2RlbDogSUFwcGxpY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBrZXkgPSBhcHBNb2RlbD8ua2V5O1xuICAgIGlmICgha2V5KSB7XG4gICAgICBrZXkgPSBgJHtrZWJhYkNhc2UobmFtZSl9LWtleWA7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHRQYXRoKGFwcE1vZGVsOiBJQXBwbGljYXRpb24sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwcE1vZGVsPy5jb250ZXh0UGF0aCB8fCBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZvcmJpZGRlbkNoYXJhY3RlcnMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTktX10vZywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0N1cnJlbnRBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUuYXBwO1xuICAgIHJldHVybiBjdXJyZW50QXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGg7XG4gIH1cblxuICBwcml2YXRlIGdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXBTZXJ2aWNlLmdldEpzb25EYXRhKGFyY2hpdmUsIHtcbiAgICAgIGZpbGVuYW1lOiBDVU1VTE9DSVRZX0pTT05cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBwVHlwZShhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxBcHBsaWNhdGlvblR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSlcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oXG4gICAgICAgIGRhdGEgPT5cbiAgICAgICAgICBnZXQoZGF0YSwgJ3R5cGUnKSB8fFxuICAgICAgICAgIChnZXQoZGF0YSwgJ2FwaVZlcnNpb24nKSA/IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgOiBBcHBsaWNhdGlvblR5cGUuSE9TVEVEKVxuICAgICAgKVxuICAgICAgLmNhdGNoKCgpID0+IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCYXNlTmFtZUZyb21BcmNoaXZlT3JBcHBNb2RlbChcbiAgICBhcmNoaXZlOiBhbnksXG4gICAgYXBwVHlwZTogQXBwbGljYXRpb25UeXBlLFxuICAgIGFwcE1vZGVsPzogSUFwcGxpY2F0aW9uXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGJhc2VOYW1lID0gYXBwTW9kZWw/Lm5hbWUgfHwgYXJjaGl2ZS5uYW1lLnJlcGxhY2UoL1xcLnppcCQvaSwgJycpO1xuICAgIGlmIChhcHBUeXBlID09PSAnTUlDUk9TRVJWSUNFJykge1xuICAgICAgYmFzZU5hbWUgPSB0aGlzLnJlbW92ZVZlcnNpb25Gcm9tTmFtZShiYXNlTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKFxuICAgIGV4aXN0aW5nQXBwczogSUFwcGxpY2F0aW9uW10sXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcmV0cnlObzogbnVtYmVyXG4gICk6IElBcHBsaWNhdGlvbiB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQXBwcy5maW5kKFxuICAgICAgZXhpc3RpbmdBcHAgPT5cbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gYXBwLm5hbWUgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBhcHAua2V5IHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGggfHxcbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gW2FwcC5uYW1lLCByZXRyeU5vXS5qb2luKCctJykgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBbYXBwLmtleSwgcmV0cnlOb10uam9pbignLScpIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBbYXBwLmNvbnRleHRQYXRoLCByZXRyeU5vXS5qb2luKCctJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVBcHBQcm9wZXJ0aWVzKGFwcDogSUFwcGxpY2F0aW9uKTogSUFwcGxpY2F0aW9uIHtcbiAgICBjb25zdCB0ZW1wQXBwID0gY2xvbmVEZWVwKGFwcCk7XG4gICAgY29uc3QgcHJvcGVydGllc1RvUmVtb3ZlID0gWydpZCcsICdvd25lcicsICdhY3RpdmVWZXJzaW9uSWQnLCAnc2VsZiddO1xuXG4gICAgcHJvcGVydGllc1RvUmVtb3ZlLmZvckVhY2gocHJvcCA9PiBkZWxldGUgdGVtcEFwcFtwcm9wXSk7XG4gICAgcmV0dXJuIHRlbXBBcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFVwbG9hZE92ZXJyaWRlcyhcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8SVVwbG9hZFBhcmFtc092ZXJyaWRlPiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBpc0luaXRpYWxQYWNrYWdlID0gYXBwLmFwcGxpY2F0aW9uVmVyc2lvbnM/Lmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdFVybDogJ3ZlcnNpb25zJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vdm5kLmNvbS5uc24uY3VtdWxvY2l0eS5hcHBsaWNhdGlvblZlcnNpb24ranNvbjtjaGFyc2V0PVVURi04O3Zlcj0wLjknXG4gICAgICB9LFxuICAgICAgYm9keUZpbGVQcm9wZXJ0eTogJ2FwcGxpY2F0aW9uQmluYXJ5JyxcbiAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgIGFwcGxpY2F0aW9uVmVyc2lvbjogeyB2ZXJzaW9uLCAuLi4oaXNJbml0aWFsUGFja2FnZSAmJiB7IHRhZ3M6IFsnbGF0ZXN0J10gfSkgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVZlcnNpb25Gcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVnRXhwID0gLy1cXGQrXFwuXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1cXGQrKT8oLiopJC87XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSh2ZXJzaW9uUmVnRXhwLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGlzTmFtZUxlbmd0aEV4Y2VlZGVkKG5hbWUsIGFwcFR5cGUpIHtcbiAgICByZXR1cm4gbmFtZS5sZW5ndGggPiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIICYmIGFwcFR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cbn1cbiJdfQ==