@sumaris-net/ngx-components 2.4.128 → 2.4.129

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { isNilOrBlank } from '../../shared/functions';
1
+ import { isNilOrBlank, isNotNil } from '../../shared/functions';
2
2
  import { BehaviorSubject } from 'rxjs';
3
3
  import { AccountUtils } from '../services/model/account.model';
4
4
  export class MenuItems {
@@ -9,10 +9,11 @@ export class MenuItems {
9
9
  * @param otherItem
10
10
  */
11
11
  static isSame(mainItem, otherItem) {
12
- return mainItem.path === otherItem.path
13
- && mainItem.parentPath === otherItem.parentPath
14
- && mainItem.title === otherItem.title
15
- && this.isSameParams(mainItem.pathParams, otherItem.pathParams);
12
+ return (isNotNil(mainItem?.id) && mainItem.id === otherItem?.id)
13
+ || (mainItem.path === otherItem.path
14
+ && mainItem.parentPath === otherItem.parentPath
15
+ && mainItem.title === otherItem.title
16
+ && this.isSameParams(mainItem.pathParams, otherItem.pathParams));
16
17
  }
17
18
  /**
18
19
  * All key/value of the mainParams should exist (and be equals) in the other params
@@ -105,4 +106,4 @@ export class MenuItems {
105
106
  }
106
107
  export class MenuOptions {
107
108
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFXLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBNkJ4RSxNQUFNLE9BQU8sU0FBUztJQUVwQjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBa0IsRUFBRSxTQUFtQjtRQUNuRCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLElBQUk7ZUFDcEMsUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsVUFBVTtlQUM1QyxRQUFRLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxLQUFLO2VBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLFlBQVksQ0FBQyxVQUFtQyxFQUFFLFdBQW9DO1FBQzNGLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxtQ0FBbUM7SUFDbkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFjO1FBQy9CLElBQUksR0FBYTtZQUNmLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksZUFBZSxDQUFhLEVBQUUsQ0FBQztZQUNoRSxNQUFNLEVBQUUsS0FB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RSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCLENBQUMsSUFBWSxFQUFFLE1BQVk7UUFDdkQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BHLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUFFLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNqRCxPQUFPLEdBQUcsSUFBSSxJQUFHLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sV0FBVztDQUV2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVzZXJQcm9maWxlTGFiZWwgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZXJzb24ubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBJY29uUmVmIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IGlzTmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZW51UGF0aFBhcmFtIH0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWNjb3VudCwgQWNjb3VudFV0aWxzIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudUl0ZW0gZXh0ZW5kcyBJY29uUmVmIHtcbiAgaWQ/OiBudW1iZXI7IC8vIEludGVybmFsIGlkIChzZXQgYnkgbWVudS1zZXJ2aWNlKVxuICB0aXRsZTogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIC8vIEluamVjdGlvbiBwb2ludFxuICBhZnRlcj86IHN0cmluZztcbiAgYmVmb3JlPzogc3RyaW5nO1xuXG4gIGFjdGlvbj86IHN0cmluZyB8IGFueTtcbiAgcHJvZmlsZT86IFVzZXJQcm9maWxlTGFiZWw7XG4gIGV4YWN0UHJvZmlsZT86IFVzZXJQcm9maWxlTGFiZWw7XG4gIGNvbG9yPzogc3RyaW5nO1xuICBjc3NDbGFzcz86IHN0cmluZztcbiAgLy8gQSBjb25maWcgcHJvcGVydHksIHRvIGVuYWJsZSB0aGUgbWVudSBpdGVtXG4gIGlmUHJvcGVydHk/OiBzdHJpbmc7XG4gIC8vIEEgY29uZmlnIHByb3BlcnR5LCB0byBvdmVycmlkZSB0aGUgdGl0bGVcbiAgdGl0bGVQcm9wZXJ0eT86IHN0cmluZztcbiAgdGl0bGVBcmdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcGF0aFBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHBhcmVudFBhdGg/OiBzdHJpbmc7XG4gIHBhcmVudFBhdGhQYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwaW5uZWQ/OiBib29sZWFuO1xuXG4gICRjaGlsZHJlbj86IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPjtcbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVJdGVtcyB7XG5cbiAgLyoqXG4gICAqIENvbXBhcmUsIHdpdGhvdXQgY2hlY2tpbmcgdGhlIGNoaWxkcmVuXG4gICAqXG4gICAqIEBwYXJhbSBtYWluSXRlbVxuICAgKiBAcGFyYW0gb3RoZXJJdGVtXG4gICAqL1xuICBzdGF0aWMgaXNTYW1lKG1haW5JdGVtOiBNZW51SXRlbSwgb3RoZXJJdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiBtYWluSXRlbS5wYXRoID09PSBvdGhlckl0ZW0ucGF0aFxuICAgICYmIG1haW5JdGVtLnBhcmVudFBhdGggPT09IG90aGVySXRlbS5wYXJlbnRQYXRoXG4gICAgJiYgbWFpbkl0ZW0udGl0bGUgPT09IG90aGVySXRlbS50aXRsZVxuICAgICYmIHRoaXMuaXNTYW1lUGFyYW1zKG1haW5JdGVtLnBhdGhQYXJhbXMsIG90aGVySXRlbS5wYXRoUGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwga2V5L3ZhbHVlIG9mIHRoZSBtYWluUGFyYW1zIHNob3VsZCBleGlzdCAoYW5kIGJlIGVxdWFscykgaW4gdGhlIG90aGVyIHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0gbWFpblBhcmFtc1xuICAgKiBAcGFyYW0gb3RoZXJQYXJhbXNcbiAgICovXG4gIHN0YXRpYyBpc1NhbWVQYXJhbXMobWFpblBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIG90aGVyUGFyYW1zOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtYWluUGFyYW1zKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gb3RoZXJQYXJhbXNba2V5XSk7XG4gIH1cblxuICAvLyBUT0RPIDogUmVwbGFjZSB0aGlzIGJ5IGEgY2xhc3MgP1xuICBzdGF0aWMgcHJlcGFyZUl0ZW0oaXRlbTogTWVudUl0ZW0pOiBNZW51SXRlbSB7XG4gICAgaXRlbSA9IDxNZW51SXRlbT57XG4gICAgICAkY2hpbGRyZW46IGl0ZW0uJGNoaWxkcmVuIHx8IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pLFxuICAgICAgcGlubmVkOiBmYWxzZSxcbiAgICAgIC4uLml0ZW0sXG4gICAgfTtcblxuICAgIC8vIENsZWFuXG4gICAgaWYgKGl0ZW0ucGF0aCkge1xuICAgICAgY29uc3Qge3BhdGgsIHBhcmFtc30gPSBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGl0ZW0ucGF0aCk7XG4gICAgICBpdGVtLnBhdGggPSBwYXRoO1xuICAgICAgaXRlbS5wYXRoUGFyYW1zID0gey4uLml0ZW0ucGF0aFBhcmFtcywgLi4ucGFyYW1zfTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ucGFyZW50UGF0aCkge1xuICAgICAgY29uc3Qge3BhdGgsIHBhcmFtc30gPSBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGl0ZW0ucGFyZW50UGF0aCk7XG4gICAgICBpdGVtLnBhcmVudFBhdGggPSBwYXRoO1xuICAgICAgaXRlbS5wYXJlbnRQYXRoUGFyYW1zID0gey4uLml0ZW0ucGFyZW50UGF0aFBhcmFtcywgLi4ucGFyYW1zfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHN0YXRpYyBpc1BhcmVudChjaGlsZDogTWVudUl0ZW0sIHBhcmVudDogTWVudUl0ZW0gfCBNZW51UGF0aFBhcmFtKSB7XG4gICAgcmV0dXJuIGNoaWxkLnBhcmVudFBhdGggJiYgY2hpbGQucGFyZW50UGF0aCA9PT0gcGFyZW50Py5wYXRoXG4gICAgICAgICYmIHRoaXMuaXNTYW1lUGFyYW1zKGNoaWxkLnBhcmVudFBhdGhQYXJhbXMsIHBhcmVudFsncGF0aFBhcmFtcyddIHx8IHBhcmVudFsncGFyYW1zJ10pIHx8IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrSWZWaXNpYmxlKGl0ZW06IE1lbnVJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogQWNjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogQ29uZmlndXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9naW4/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1ByZWZpeD86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBib29sZWFuIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBpZiAoaXRlbS5wcm9maWxlKSB7XG4gICAgICBjb25zdCBoYXNQcm9maWxlID0gQWNjb3VudFV0aWxzLmhhc01pblByb2ZpbGUoYWNjb3VudCwgaXRlbS5wcm9maWxlKTtcbiAgICAgIGlmICghaGFzUHJvZmlsZSkge1xuICAgICAgICBpZiAob3B0cy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHtvcHRzICYmIG9wdHMubG9nUHJlZml4IHx8ICdbbWVudS1zZXJ2aWNlXSd9IEhpZGUgaXRlbSAnJHtpdGVtLnRpdGxlfSc6IG5lZWQgdGhlIG1pbiBwcm9maWxlICcke2l0ZW0ucHJvZmlsZX0nIHRvIGFjY2VzcyBwYXRoICcke2l0ZW0ucGF0aH0nYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmIChpdGVtLmV4YWN0UHJvZmlsZSkge1xuICAgICAgY29uc3QgaGFzRXhhY3RQcm9maWxlID0gQWNjb3VudFV0aWxzLmhhc0V4YWN0UHJvZmlsZShhY2NvdW50LCBpdGVtLmV4YWN0UHJvZmlsZSk7XG4gICAgICBpZiAoIWhhc0V4YWN0UHJvZmlsZSkge1xuICAgICAgICBpZiAob3B0cy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHtvcHRzICYmIG9wdHMubG9nUHJlZml4IHx8ICdbbWVudS1zZXJ2aWNlXSd9IEhpZGUgaXRlbSAnJHtpdGVtLnRpdGxlfSc6IG5lZWQgZXhhY3QgcHJvZmlsZSAnJHtpdGVtLmV4YWN0UHJvZmlsZX0nIHRvIGFjY2VzcyBwYXRoICcke2l0ZW0ucGF0aH0nYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBlbmFibGUgYnkgY29uZmlnXG4gICAgaWYgKGl0ZW0uaWZQcm9wZXJ0eSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIENoZWNraW5nIGlmIHByb3BlcnR5IGVuYWJsZSA/IFwiICsgaXRlbS5pZlByb3BlcnR5LCBjb25maWcgJiYgY29uZmlnLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgaXNFbmFibGVCeUNvbmZpZyA9IGNvbmZpZyAmJiBjb25maWcucHJvcGVydGllc1tpdGVtLmlmUHJvcGVydHldID09PSAndHJ1ZSc7XG4gICAgICBpZiAoIWlzRW5hYmxlQnlDb25maWcpIHtcbiAgICAgICAgaWYgKG9wdHMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1ttZW51LXNlcnZpY2VdIENvbmZpZyBwcm9wZXJ0eSBcXCcnICsgaXRlbS5pZlByb3BlcnR5ICsgJ1xcJyBub3QgXFwndHJ1ZVxcJyBmb3IgJywgaXRlbS5wYXRoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGlzUGlubmVkKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKGl0ZW0/LnBpbm5lZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFpdGVtPy4kY2hpbGRyZW4gfHwgaXRlbS4kY2hpbGRyZW4udmFsdWUubGVuZ3RoIDwgMSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBpdGVtLiRjaGlsZHJlbi52YWx1ZS5zb21lKGkgPT4gTWVudUl0ZW1zLmlzUGlubmVkKGkpKTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVBhdGhXaXRoUXVlcnkocGF0aFdpdGhRdWVyeTogc3RyaW5nKTogTWVudVBhdGhQYXJhbSB7XG4gICAgY29uc3QgaW5kZXggPSBwYXRoV2l0aFF1ZXJ5Lmxhc3RJbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIHtwYXRoOiBwYXRoV2l0aFF1ZXJ5LCBwYXJhbXM6IHt9fTtcbiAgICBjb25zdCBwYXRoID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoaW5kZXgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKSk7XG4gICAgcmV0dXJuIHtwYXRoLCBwYXJhbXN9O1xuICB9XG5cbiAgc3RhdGljIGdldFVybChpdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiB0aGlzLmdldFVybEZyb21QYXRoQW5kUGFyYW1zKGl0ZW0/LnBhdGgsIGl0ZW0/LnBhdGhQYXJhbXMpO1xuICB9XG5cbiAgc3RhdGljIGdldFVybEZyb21QYXRoQW5kUGFyYW1zKHBhdGg6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3QuZW50cmllcyhwYXJhbXMgfHwge30pLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YCkuam9pbignJicpO1xuICAgIGlmIChpc05pbE9yQmxhbmsocXVlcnlTdHJpbmcpKSByZXR1cm4gcGF0aCB8fCAnJztcbiAgICByZXR1cm4gYCR7cGF0aCB8fCcnfT8ke3F1ZXJ5U3RyaW5nfWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVPcHRpb25zIHtcbiAgLy8gVE9ETyBhZGQgb3B0aW9ucywgd2hlbiBuZWVkIHNwZWNpZmljIGJlaGF2aW9yIG9uIHByb2plY3RzXG59XG4iXX0=
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L21lbnUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBVyxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQTZCeEUsTUFBTSxPQUFPLFNBQVM7SUFFcEI7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQWtCLEVBQUUsU0FBbUI7UUFDbkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxDQUFDLEVBQUUsS0FBSyxTQUFTLEVBQUUsRUFBRSxDQUFDO2VBQzNELENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSTttQkFDakMsUUFBUSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsVUFBVTttQkFDNUMsUUFBUSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSzttQkFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FDaEUsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsVUFBbUMsRUFBRSxXQUFvQztRQUMzRixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLE1BQU0sQ0FBQyxX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QyxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBYztRQUMxQixPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QixDQUFDLElBQVksRUFBRSxNQUFZO1FBQ3ZELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRyxJQUFJLFlBQVksQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7UUFDakQsT0FBTyxHQUFHLElBQUksSUFBRyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUM7SUFDdkMsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLFdBQVc7Q0FFdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVc2VyUHJvZmlsZUxhYmVsIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvcGVyc29uLm1vZGVsJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgSWNvblJlZiB9IGZyb20gJy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBpc05pbE9yQmxhbmssIGlzTm90TmlsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lbnVQYXRoUGFyYW0gfSBmcm9tICcuL21lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBBY2NvdW50LCBBY2NvdW50VXRpbHMgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9hY2NvdW50Lm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBNZW51SXRlbSBleHRlbmRzIEljb25SZWYge1xuICBpZD86IG51bWJlcjsgLy8gSW50ZXJuYWwgaWQgKHNldCBieSBtZW51LXNlcnZpY2UpXG4gIHRpdGxlOiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG5cbiAgLy8gSW5qZWN0aW9uIHBvaW50XG4gIGFmdGVyPzogc3RyaW5nO1xuICBiZWZvcmU/OiBzdHJpbmc7XG5cbiAgYWN0aW9uPzogc3RyaW5nIHwgYW55O1xuICBwcm9maWxlPzogVXNlclByb2ZpbGVMYWJlbDtcbiAgZXhhY3RQcm9maWxlPzogVXNlclByb2ZpbGVMYWJlbDtcbiAgY29sb3I/OiBzdHJpbmc7XG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuICAvLyBBIGNvbmZpZyBwcm9wZXJ0eSwgdG8gZW5hYmxlIHRoZSBtZW51IGl0ZW1cbiAgaWZQcm9wZXJ0eT86IHN0cmluZztcbiAgLy8gQSBjb25maWcgcHJvcGVydHksIHRvIG92ZXJyaWRlIHRoZSB0aXRsZVxuICB0aXRsZVByb3BlcnR5Pzogc3RyaW5nO1xuICB0aXRsZUFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwYXRoUGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcGFyZW50UGF0aD86IHN0cmluZztcbiAgcGFyZW50UGF0aFBhcmFtcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHBpbm5lZD86IGJvb2xlYW47XG5cbiAgJGNoaWxkcmVuPzogQmVoYXZpb3JTdWJqZWN0PE1lbnVJdGVtW10+O1xufVxuXG5leHBvcnQgY2xhc3MgTWVudUl0ZW1zIHtcblxuICAvKipcbiAgICogQ29tcGFyZSwgd2l0aG91dCBjaGVja2luZyB0aGUgY2hpbGRyZW5cbiAgICpcbiAgICogQHBhcmFtIG1haW5JdGVtXG4gICAqIEBwYXJhbSBvdGhlckl0ZW1cbiAgICovXG4gIHN0YXRpYyBpc1NhbWUobWFpbkl0ZW06IE1lbnVJdGVtLCBvdGhlckl0ZW06IE1lbnVJdGVtKSB7XG4gICAgcmV0dXJuIChpc05vdE5pbChtYWluSXRlbT8uaWQpICYmIG1haW5JdGVtLmlkID09PSBvdGhlckl0ZW0/LmlkKVxuICAgICAgfHwgKG1haW5JdGVtLnBhdGggPT09IG90aGVySXRlbS5wYXRoXG4gICAgICAmJiBtYWluSXRlbS5wYXJlbnRQYXRoID09PSBvdGhlckl0ZW0ucGFyZW50UGF0aFxuICAgICAgJiYgbWFpbkl0ZW0udGl0bGUgPT09IG90aGVySXRlbS50aXRsZVxuICAgICAgJiYgdGhpcy5pc1NhbWVQYXJhbXMobWFpbkl0ZW0ucGF0aFBhcmFtcywgb3RoZXJJdGVtLnBhdGhQYXJhbXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwga2V5L3ZhbHVlIG9mIHRoZSBtYWluUGFyYW1zIHNob3VsZCBleGlzdCAoYW5kIGJlIGVxdWFscykgaW4gdGhlIG90aGVyIHBhcmFtc1xuICAgKlxuICAgKiBAcGFyYW0gbWFpblBhcmFtc1xuICAgKiBAcGFyYW0gb3RoZXJQYXJhbXNcbiAgICovXG4gIHN0YXRpYyBpc1NhbWVQYXJhbXMobWFpblBhcmFtczoge1trZXk6IHN0cmluZ106IHN0cmluZ30sIG90aGVyUGFyYW1zOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhtYWluUGFyYW1zKS5ldmVyeSgoW2tleSwgdmFsdWVdKSA9PiB2YWx1ZSA9PT0gb3RoZXJQYXJhbXNba2V5XSk7XG4gIH1cblxuICAvLyBUT0RPIDogUmVwbGFjZSB0aGlzIGJ5IGEgY2xhc3MgP1xuICBzdGF0aWMgcHJlcGFyZUl0ZW0oaXRlbTogTWVudUl0ZW0pOiBNZW51SXRlbSB7XG4gICAgaXRlbSA9IDxNZW51SXRlbT57XG4gICAgICAkY2hpbGRyZW46IGl0ZW0uJGNoaWxkcmVuIHx8IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pLFxuICAgICAgcGlubmVkOiBmYWxzZSxcbiAgICAgIC4uLml0ZW0sXG4gICAgfTtcblxuICAgIC8vIENsZWFuXG4gICAgaWYgKGl0ZW0ucGF0aCkge1xuICAgICAgY29uc3Qge3BhdGgsIHBhcmFtc30gPSBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGl0ZW0ucGF0aCk7XG4gICAgICBpdGVtLnBhdGggPSBwYXRoO1xuICAgICAgaXRlbS5wYXRoUGFyYW1zID0gey4uLml0ZW0ucGF0aFBhcmFtcywgLi4ucGFyYW1zfTtcbiAgICB9XG4gICAgaWYgKGl0ZW0ucGFyZW50UGF0aCkge1xuICAgICAgY29uc3Qge3BhdGgsIHBhcmFtc30gPSBNZW51SXRlbXMucGFyc2VQYXRoV2l0aFF1ZXJ5KGl0ZW0ucGFyZW50UGF0aCk7XG4gICAgICBpdGVtLnBhcmVudFBhdGggPSBwYXRoO1xuICAgICAgaXRlbS5wYXJlbnRQYXRoUGFyYW1zID0gey4uLml0ZW0ucGFyZW50UGF0aFBhcmFtcywgLi4ucGFyYW1zfTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHN0YXRpYyBpc1BhcmVudChjaGlsZDogTWVudUl0ZW0sIHBhcmVudDogTWVudUl0ZW0gfCBNZW51UGF0aFBhcmFtKSB7XG4gICAgcmV0dXJuIGNoaWxkLnBhcmVudFBhdGggJiYgY2hpbGQucGFyZW50UGF0aCA9PT0gcGFyZW50Py5wYXRoXG4gICAgICAgICYmIHRoaXMuaXNTYW1lUGFyYW1zKGNoaWxkLnBhcmVudFBhdGhQYXJhbXMsIHBhcmVudFsncGF0aFBhcmFtcyddIHx8IHBhcmVudFsncGFyYW1zJ10pIHx8IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrSWZWaXNpYmxlKGl0ZW06IE1lbnVJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudDogQWNjb3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogQ29uZmlndXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzTG9naW4/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1ByZWZpeD86IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBib29sZWFuIHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBpZiAoaXRlbS5wcm9maWxlKSB7XG4gICAgICBjb25zdCBoYXNQcm9maWxlID0gQWNjb3VudFV0aWxzLmhhc01pblByb2ZpbGUoYWNjb3VudCwgaXRlbS5wcm9maWxlKTtcbiAgICAgIGlmICghaGFzUHJvZmlsZSkge1xuICAgICAgICBpZiAob3B0cy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHtvcHRzICYmIG9wdHMubG9nUHJlZml4IHx8ICdbbWVudS1zZXJ2aWNlXSd9IEhpZGUgaXRlbSAnJHtpdGVtLnRpdGxlfSc6IG5lZWQgdGhlIG1pbiBwcm9maWxlICcke2l0ZW0ucHJvZmlsZX0nIHRvIGFjY2VzcyBwYXRoICcke2l0ZW0ucGF0aH0nYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIGlmIChpdGVtLmV4YWN0UHJvZmlsZSkge1xuICAgICAgY29uc3QgaGFzRXhhY3RQcm9maWxlID0gQWNjb3VudFV0aWxzLmhhc0V4YWN0UHJvZmlsZShhY2NvdW50LCBpdGVtLmV4YWN0UHJvZmlsZSk7XG4gICAgICBpZiAoIWhhc0V4YWN0UHJvZmlsZSkge1xuICAgICAgICBpZiAob3B0cy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHtvcHRzICYmIG9wdHMubG9nUHJlZml4IHx8ICdbbWVudS1zZXJ2aWNlXSd9IEhpZGUgaXRlbSAnJHtpdGVtLnRpdGxlfSc6IG5lZWQgZXhhY3QgcHJvZmlsZSAnJHtpdGVtLmV4YWN0UHJvZmlsZX0nIHRvIGFjY2VzcyBwYXRoICcke2l0ZW0ucGF0aH0nYCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBlbmFibGUgYnkgY29uZmlnXG4gICAgaWYgKGl0ZW0uaWZQcm9wZXJ0eSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiW21lbnVdIENoZWNraW5nIGlmIHByb3BlcnR5IGVuYWJsZSA/IFwiICsgaXRlbS5pZlByb3BlcnR5LCBjb25maWcgJiYgY29uZmlnLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgaXNFbmFibGVCeUNvbmZpZyA9IGNvbmZpZyAmJiBjb25maWcucHJvcGVydGllc1tpdGVtLmlmUHJvcGVydHldID09PSAndHJ1ZSc7XG4gICAgICBpZiAoIWlzRW5hYmxlQnlDb25maWcpIHtcbiAgICAgICAgaWYgKG9wdHMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1ttZW51LXNlcnZpY2VdIENvbmZpZyBwcm9wZXJ0eSBcXCcnICsgaXRlbS5pZlByb3BlcnR5ICsgJ1xcJyBub3QgXFwndHJ1ZVxcJyBmb3IgJywgaXRlbS5wYXRoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGlzUGlubmVkKGl0ZW06IE1lbnVJdGVtKSB7XG4gICAgaWYgKGl0ZW0/LnBpbm5lZCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFpdGVtPy4kY2hpbGRyZW4gfHwgaXRlbS4kY2hpbGRyZW4udmFsdWUubGVuZ3RoIDwgMSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBpdGVtLiRjaGlsZHJlbi52YWx1ZS5zb21lKGkgPT4gTWVudUl0ZW1zLmlzUGlubmVkKGkpKTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVBhdGhXaXRoUXVlcnkocGF0aFdpdGhRdWVyeTogc3RyaW5nKTogTWVudVBhdGhQYXJhbSB7XG4gICAgY29uc3QgaW5kZXggPSBwYXRoV2l0aFF1ZXJ5Lmxhc3RJbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIHtwYXRoOiBwYXRoV2l0aFF1ZXJ5LCBwYXJhbXM6IHt9fTtcbiAgICBjb25zdCBwYXRoID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcGF0aFdpdGhRdWVyeS5zdWJzdHJpbmcoaW5kZXgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5mcm9tRW50cmllcyhuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKSk7XG4gICAgcmV0dXJuIHtwYXRoLCBwYXJhbXN9O1xuICB9XG5cbiAgc3RhdGljIGdldFVybChpdGVtOiBNZW51SXRlbSkge1xuICAgIHJldHVybiB0aGlzLmdldFVybEZyb21QYXRoQW5kUGFyYW1zKGl0ZW0/LnBhdGgsIGl0ZW0/LnBhdGhQYXJhbXMpO1xuICB9XG5cbiAgc3RhdGljIGdldFVybEZyb21QYXRoQW5kUGFyYW1zKHBhdGg6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3QuZW50cmllcyhwYXJhbXMgfHwge30pLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9PSR7dmFsdWV9YCkuam9pbignJicpO1xuICAgIGlmIChpc05pbE9yQmxhbmsocXVlcnlTdHJpbmcpKSByZXR1cm4gcGF0aCB8fCAnJztcbiAgICByZXR1cm4gYCR7cGF0aCB8fCcnfT8ke3F1ZXJ5U3RyaW5nfWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1lbnVPcHRpb25zIHtcbiAgLy8gVE9ETyBhZGQgb3B0aW9ucywgd2hlbiBuZWVkIHNwZWNpZmljIGJlaGF2aW9yIG9uIHByb2plY3RzXG59XG4iXX0=
@@ -26,7 +26,7 @@ export class MenuService extends StartableObservableService {
26
26
  this.environment = environment;
27
27
  this.accountChanges = new BehaviorSubject(undefined);
28
28
  this._itemCounter = 0;
29
- this._logPrefix = '[menu-service]';
29
+ this._logPrefix = '[menu-service] ';
30
30
  this._$opened = new Subject();
31
31
  this._$splitPaneWhen = new BehaviorSubject(DEFAULT_MENU_SHOW_WHEN);
32
32
  this._$enabled = new BehaviorSubject(true);
@@ -92,13 +92,13 @@ export class MenuService extends StartableObservableService {
92
92
  if (!excludedItems.length)
93
93
  return; // Skip if no items detached
94
94
  if (this._debug)
95
- console.debug(`${this._logPrefix} Detached sub menus: `, excludedItems);
95
+ console.debug(`${this._logPrefix}Detached sub menus: `, excludedItems);
96
96
  // TODO Store excluded items
97
97
  // TODO Restore old excluded items
98
98
  // this.addSubMenuItems();
99
99
  }
100
100
  async ngOnStart() {
101
- console.info(`${this._logPrefix} Starting...`);
101
+ console.info(`${this._logPrefix}Starting...`);
102
102
  const [account, config] = await Promise.all([
103
103
  this.accountService.ready(),
104
104
  this.configService.ready(),
@@ -112,7 +112,7 @@ export class MenuService extends StartableObservableService {
112
112
  accountEvent$
113
113
  ]).subscribe(async ([config, account]) => {
114
114
  if (this._debug)
115
- console.debug(`${this._logPrefix} Received config or account event. Refreshing items...`, account);
115
+ console.debug(`${this._logPrefix}Received config or account event. Refreshing items...`, account);
116
116
  // Load all items
117
117
  await this._loadMenuItems(config, account);
118
118
  // Emit account changes event
@@ -136,18 +136,19 @@ export class MenuService extends StartableObservableService {
136
136
  if (opts.skipIfExists) {
137
137
  // DEBUG
138
138
  if (this._debug)
139
- console.debug(`${this._logPrefix} Skipping sub item (already exist)`, newItem);
140
- return;
139
+ console.debug(`${this._logPrefix}Skipping sub item (already exist)`, newItem);
140
+ return existingItem;
141
141
  }
142
142
  if (this._debug)
143
- console.debug(`${this._logPrefix} Updating existing sub item #`, existingItem.id);
143
+ console.debug(`${this._logPrefix}Updating existing sub item #`, existingItem.id);
144
144
  // Replace existing item, but keep the existing id
145
145
  newItem.id = existingItem.id;
146
+ newItem.$children = existingItem.$children;
146
147
  }
147
148
  const parent = this._findParent(newItem, opts?.availableParents);
148
149
  if (!parent) {
149
- console.warn(`${this._logPrefix} Unable to add sub item: no parent found`);
150
- return false;
150
+ console.warn(`${this._logPrefix}Unable to add sub item: no parent found`);
151
+ return null;
151
152
  }
152
153
  // Generate item's id (if need)
153
154
  if (isNil(newItem.id))
@@ -156,11 +157,11 @@ export class MenuService extends StartableObservableService {
156
157
  // Start listening route
157
158
  if (!this._$listenRoute.value)
158
159
  this._$listenRoute.next(true);
159
- return true;
160
+ return newItem;
160
161
  }
161
162
  async _loadMenuItems(config, account) {
162
163
  if (this._debug)
163
- console.debug(`${this._logPrefix} Loading menu items...`);
164
+ console.debug(`${this._logPrefix}Loading menu items...`);
164
165
  // Save previous children of root items
165
166
  const rootChildren = (this.data || [])
166
167
  .reduce((res, rootItem) => res.concat(rootItem?.$children?.value || []), []);
@@ -202,7 +203,7 @@ export class MenuService extends StartableObservableService {
202
203
  }, items);
203
204
  }
204
205
  catch (err) {
205
- console.error(`${this._logPrefix} Invalid value for option '${CORE_CONFIG_OPTIONS.MENU_ITEMS.key}'. Expected an array of menu item`, err);
206
+ console.error(`${this._logPrefix}Invalid value for option '${CORE_CONFIG_OPTIONS.MENU_ITEMS.key}'. Expected an array of menu item`, err);
206
207
  }
207
208
  }
208
209
  // Filter item using account rights
@@ -226,7 +227,7 @@ export class MenuService extends StartableObservableService {
226
227
  await this.addSubMenuItems(rootChildren, { skipIfExists: false, availableParents: items });
227
228
  }
228
229
  if (this._debug)
229
- console.debug(`${this._logPrefix} Found ${items.length} visible items...`);
230
+ console.debug(`${this._logPrefix}Found ${items.length} visible items...`);
230
231
  this.dataSubject.next(items);
231
232
  }
232
233
  _findExistingItem(item, items) {
@@ -283,7 +284,7 @@ export class MenuService extends StartableObservableService {
283
284
  if (!excludedItems.length)
284
285
  return; // Skip if no items detached
285
286
  if (this._debug)
286
- console.debug(`${this._logPrefix} Detached sub menus: `, excludedItems);
287
+ console.debug(`${this._logPrefix}Detached sub menus: `, excludedItems);
287
288
  // TODO Store excluded items
288
289
  // TODO Restore old excluded items
289
290
  // this.addSubMenuItems();
@@ -326,4 +327,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
326
327
  type: Inject,
327
328
  args: [APP_MENU_ITEMS]
328
329
  }] }]; } });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBUSxLQUFLLEVBQUUsUUFBUSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRyxPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSW5FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDOzs7Ozs7O0FBR3RHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFzQixJQUFJLENBQUM7QUFlOUQsTUFBTSxPQUFPLFdBQVksU0FBUSwwQkFBc0M7SUFZckUsWUFDWSxlQUFnQyxFQUNoQyxhQUE0QixFQUM1QixjQUE4QixFQUM5QixNQUFjLEVBQ08sV0FBd0IsRUFDbkIsV0FBd0I7UUFFNUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxD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RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBa0JJLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgbWVyZ2UsIG1lcmdlTWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZW51SXRlbSwgTWVudUl0ZW1zIH0gZnJvbSAnLi9tZW51Lm1vZGVsJztcbmltcG9ydCB7IEFQUF9NRU5VX0lURU1TIH0gZnJvbSAnLi9tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEFjY291bnQgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9hY2NvdW50Lm1vZGVsJztcbmltcG9ydCB7IFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1vYnNlcnZhYmxlLXNlcnZpY2UuY2xhc3MnO1xuXG5leHBvcnQgdHlwZSBTcGxpdFBhbmVTaG93V2hlbiA9IGJvb2xlYW4gfCAnbGcnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUVOVV9TSE9XX1dIRU46IFNwbGl0UGFuZVNob3dXaGVuID0gJ2xnJztcblxuZXhwb3J0IGludGVyZmFjZSBBZGRTdWJNZW51SXRlbXNPcHRpb24ge1xuICBza2lwSWZFeGlzdHM/OiBib29sZWFuO1xuICBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZW51UGF0aFBhcmFtIHtcbiAgcGF0aDogc3RyaW5nO1xuICBwYXJhbXM6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNZW51U2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlPE1lbnVJdGVtW10+IHtcblxuICByZWFkb25seSBhY2NvdW50Q2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWNjb3VudD4odW5kZWZpbmVkKTtcblxuICBwcml2YXRlIF9zdGF0aWNJdGVtczogTWVudUl0ZW1bXTtcbiAgcHJpdmF0ZSBfaXRlbUNvdW50ZXIgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dQcmVmaXggPSAnW21lbnUtc2VydmljZV0nO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kb3BlbmVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJHNwbGl0UGFuZVdoZW4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNwbGl0UGFuZVNob3dXaGVuPihERUZBVUxUX01FTlVfU0hPV19XSEVOKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfJGVuYWJsZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kbGlzdGVuUm91dGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm1TZXJ2aWNlOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9NRU5VX0lURU1TKSBzdGF0aWNJdGVtcz86IE1lbnVJdGVtW11cbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm1TZXJ2aWNlKTtcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIHRoaXMuX3N0YXRpY0l0ZW1zID0gKHN0YXRpY0l0ZW1zIHx8IFtdKS5tYXAoaSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gTWVudUl0ZW1zLnByZXBhcmVJdGVtKGkpO1xuICAgICAgaXRlbS5pZCA9IHRoaXMuX2l0ZW1Db3VudGVyKys7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBvcGVuZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRvcGVuZWQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc3BsaXRQYW5lV2hlbigpOiBPYnNlcnZhYmxlPFNwbGl0UGFuZVNob3dXaGVuPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRzcGxpdFBhbmVXaGVuLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGVuYWJsZWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuXyRlbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZW5hYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fJGVuYWJsZWQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBzZXRTcGxpdFBhbmVTaG93V2hlbih2YWx1ZTogU3BsaXRQYW5lU2hvd1doZW4pIHtcbiAgICBpZiAodGhpcy5fJHNwbGl0UGFuZVdoZW4udmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl8kc3BsaXRQYW5lV2hlbi5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVTcGxpdFBhbmVXaGVuKCkge1xuICAgIGlmICh0aGlzLl8kc3BsaXRQYW5lV2hlbi52YWx1ZSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoZmFsc2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQoREVGQVVMVF9NRU5VX1NIT1dfV0hFTik7XG4gICAgfVxuICB9XG5cbiAgX21hcmtBc09wZW5lZCgpIHtcbiAgICB0aGlzLl8kb3BlbmVkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBfbWFya0FzQ2xvc2VkKCkge1xuICAgIHRoaXMuXyRvcGVuZWQubmV4dChmYWxzZSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbXMobmV3SXRlbXM6IE1lbnVJdGVtW10sIG9wdHM/OiBBZGRTdWJNZW51SXRlbXNPcHRpb24pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIHJldHVybiBuZXdJdGVtcy5tYXAoaSA9PiB0aGlzLl9hZGRTdWJNZW51SXRlbShpLCBvcHRzKSk7XG4gIH1cblxuICBhc3luYyBhZGRTdWJNZW51SXRlbShuZXdJdGVtOiBNZW51SXRlbSwgb3B0cz86IEFkZFN1Yk1lbnVJdGVtc09wdGlvbikge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIHRoaXMuX2FkZFN1Yk1lbnVJdGVtKG5ld0l0ZW0sIG9wdHMpO1xuICB9XG5cbiAgcmVtb3ZlU3ViTWVudUl0ZW0oaXRlbTogTWVudUl0ZW0pIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kUGFyZW50KGl0ZW0pO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGNvbnN0IG5ld0NoaWxkcyA9IHBhcmVudC4kY2hpbGRyZW4udmFsdWUuZmlsdGVyKGkgPT4gIU1lbnVJdGVtcy5pc1NhbWUoaXRlbSwgaSkpO1xuICAgICAgcGFyZW50LiRjaGlsZHJlbi5uZXh0KG5ld0NoaWxkcyk7XG4gICAgfVxuICB9XG5cbiAgZGV0YWNoU3ViTWVudUl0ZW0ocGF0aFBhcmFtOiBNZW51UGF0aFBhcmFtKSB7XG4gICAgY29uc3QgZXhjbHVkZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMuX2RldGFjaFN1Yk1lbnVzKHBhdGhQYXJhbSwgdGhpcy5kYXRhLCBleGNsdWRlZEl0ZW1zKTtcbiAgICBpZiAoIWV4Y2x1ZGVkSXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIFNraXAgaWYgbm8gaXRlbXMgZGV0YWNoZWRcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9IERldGFjaGVkIHN1YiBtZW51czogYCwgZXhjbHVkZWRJdGVtcyk7XG4gICAgLy8gVE9ETyBTdG9yZSBleGNsdWRlZCBpdGVtc1xuICAgIC8vIFRPRE8gUmVzdG9yZSBvbGQgZXhjbHVkZWQgaXRlbXNcbiAgICAvLyB0aGlzLmFkZFN1Yk1lbnVJdGVtcygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpIHtcbiAgICBjb25zb2xlLmluZm8oYCR7dGhpcy5fbG9nUHJlZml4fSBTdGFydGluZy4uLmApO1xuXG4gICAgY29uc3QgW2FjY291bnQsIGNvbmZpZ10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnJlYWR5KCksXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZHkoKSxcbiAgICBdKTtcbiAgICBhd2FpdCB0aGlzLl9sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICBjb25zdCBhY2NvdW50RXZlbnQkID0gbWVyZ2UoXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4sXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnBpcGUoXG4gICAgICAgIG1hcChfID0+IG51bGwpXG4gICAgICApLFxuICAgICkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhMSwgYTIpID0+IERhdGVVdGlscy5pc1NhbWUoYTE/LnVwZGF0ZURhdGUsIGEyPy51cGRhdGVEYXRlKSksXG4gICAgICBtYXAoYWNjb3VudCA9PiBpc05vdE5pbChhY2NvdW50Py5pZCkgPyBhY2NvdW50IDogbnVsbClcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIC8vIENvbWJpbmUgY29uZmlnIGFuZCBhY2NvdW50IGV2ZW50c1xuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcsXG4gICAgICAgIGFjY291bnRFdmVudCRcbiAgICAgIF0pLnN1YnNjcmliZShhc3luYyAoW2NvbmZpZywgYWNjb3VudF0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH0gUmVjZWl2ZWQgY29uZmlnIG9yIGFjY291bnQgZXZlbnQuIFJlZnJlc2hpbmcgaXRlbXMuLi5gLCBhY2NvdW50KTtcblxuICAgICAgICAvLyBMb2FkIGFsbCBpdGVtc1xuICAgICAgICBhd2FpdCB0aGlzLl9sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICAgICAgLy8gRW1pdCBhY2NvdW50IGNoYW5nZXMgZXZlbnRcbiAgICAgICAgdGhpcy5hY2NvdW50Q2hhbmdlcy5uZXh0KGFjY291bnQpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuXyRsaXN0ZW5Sb3V0ZS5waXBlKFxuICAgICAgICBmaWx0ZXIobGlzdGVuID0+IGxpc3RlbiA9PT0gdHJ1ZSksXG4gICAgICAgIG1lcmdlTWFwKF8gPT4gdGhpcy5yb3V0ZXIuZXZlbnRzKSxcbiAgICAgICAgZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgIG1hcCgoZXZlbnQ6IE5hdmlnYXRpb25FbmQpID0+IE1lbnVJdGVtcy5wYXJzZVBhdGhXaXRoUXVlcnkoZXZlbnQudXJsKSksXG4gICAgICApLnN1YnNjcmliZShwYXRoUGFyYW0gPT4ge1xuICAgICAgICB0aGlzLmRldGFjaFN1Yk1lbnVJdGVtKHBhdGhQYXJhbSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfYWRkU3ViTWVudUl0ZW0obmV3SXRlbTogTWVudUl0ZW0sIG9wdHM/OiBBZGRTdWJNZW51SXRlbXNPcHRpb24pIHtcbiAgICBvcHRzID0ge1xuICAgICAgc2tpcElmRXhpc3RzOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICB9O1xuXG4gICAgLy8gTWFrZSBzdXJlIHBhdGggKGFuZCBwYXRoUGFyYW1zKSBhcmUgZmlsbGVkIGluIHRoZSBzYW1lIHdheVxuICAgIG5ld0l0ZW0gPSBNZW51SXRlbXMucHJlcGFyZUl0ZW0obmV3SXRlbSk7XG5cbiAgICAvLyBGaW5kIGlmIGl0ZW0gYWxyZWFkeSBleGlzdHNcbiAgICBjb25zdCBleGlzdGluZ0l0ZW0gPSB0aGlzLl9maW5kRXhpc3RpbmdJdGVtKG5ld0l0ZW0pO1xuICAgIGlmIChleGlzdGluZ0l0ZW0pIHtcbiAgICAgIGlmIChvcHRzLnNraXBJZkV4aXN0cykge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSBTa2lwcGluZyBzdWIgaXRlbSAoYWxyZWFkeSBleGlzdClgLCBuZXdJdGVtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fSBVcGRhdGluZyBleGlzdGluZyBzdWIgaXRlbSAjYCwgZXhpc3RpbmdJdGVtLmlkKTtcbiAgICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgaXRlbSwgYnV0IGtlZXAgdGhlIGV4aXN0aW5nIGlkXG4gICAgICBuZXdJdGVtLmlkID0gZXhpc3RpbmdJdGVtLmlkO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQobmV3SXRlbSwgb3B0cz8uYXZhaWxhYmxlUGFyZW50cyk7XG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHt0aGlzLl9sb2dQcmVmaXh9IFVuYWJsZSB0byBhZGQgc3ViIGl0ZW06IG5vIHBhcmVudCBmb3VuZGApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIGl0ZW0ncyBpZCAoaWYgbmVlZClcbiAgICBpZiAoaXNOaWwobmV3SXRlbS5pZCkpIG5ld0l0ZW0uaWQgPSB0aGlzLl9pdGVtQ291bnRlcisrO1xuXG4gICAgdGhpcy5fYWRkTWVudVRvUGFyZW50KHBhcmVudCwgbmV3SXRlbSk7XG5cbiAgICAvLyBTdGFydCBsaXN0ZW5pbmcgcm91dGVcbiAgICBpZiAoIXRoaXMuXyRsaXN0ZW5Sb3V0ZS52YWx1ZSkgdGhpcy5fJGxpc3RlblJvdXRlLm5leHQodHJ1ZSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBfbG9hZE1lbnVJdGVtcyhjb25maWc6IENvbmZpZ3VyYXRpb258bnVsbCwgYWNjb3VudDogQWNjb3VudHxudWxsKSB7XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH0gTG9hZGluZyBtZW51IGl0ZW1zLi4uYCk7XG5cbiAgICAvLyBTYXZlIHByZXZpb3VzIGNoaWxkcmVuIG9mIHJvb3QgaXRlbXNcbiAgICBjb25zdCByb290Q2hpbGRyZW4gPSAodGhpcy5kYXRhIHx8IFtdKVxuICAgICAgLnJlZHVjZSgocmVzLCByb290SXRlbSkgPT4gcmVzLmNvbmNhdChyb290SXRlbT8uJGNoaWxkcmVuPy52YWx1ZSB8fCBbXSksIFtdKTtcblxuICAgIC8vIFJlc2V0IGJhc2Ugcm9vdCBpdGVtcyAoY2xlYW4gaXRlbXMgYWRkZWQgYnkgY29uZmlnKVxuICAgIGxldCBpdGVtcyA9IHRoaXMuX3N0YXRpY0l0ZW1zLnNsaWNlKCk7XG5cbiAgICAvLyBDb25jYXQgY29uZmlnJ3MgaXRlbXNcbiAgICBjb25zdCBjb25maWdWYWx1ZTogc3RyaW5nID0gY29uZmlnPy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLk1FTlVfSVRFTVMpO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsoY29uZmlnVmFsdWUpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWdJdGVtcyA9IEpTT04ucGFyc2UoY29uZmlnVmFsdWUpIGFzIE1lbnVJdGVtW107XG4gICAgICAgIGl0ZW1zID0gKGNvbmZpZ0l0ZW1zIHx8IFtdKS5yZWR1Y2UoKHJlczogTWVudUl0ZW1bXSwgaXRlbSkgPT4ge1xuXG4gICAgICAgICAgLy8gTm9ybWFsaXplIHRoZSBpdGVtXG4gICAgICAgICAgaXRlbSA9IE1lbnVJdGVtcy5wcmVwYXJlSXRlbShpdGVtKTtcblxuICAgICAgICAgIC8vIFNraXAgaXMgYWxyZWFkeSBsb2FkZWRcbiAgICAgICAgICBpZiAocmVzLmZpbmQoKGkpID0+IE1lbnVJdGVtcy5pc1NhbWUoaSwgaXRlbSkpKSByZXR1cm4gcmVzO1xuXG4gICAgICAgICAgLy8gUmV1c2UgZXhpc3RpbmcgaWQsIGlmIHBvc3NpYmxlXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdJdGVtID0gdGhpcy5kYXRhPy5maW5kKChpKSA9PiBNZW51SXRlbXMuaXNTYW1lKGksIGl0ZW0pKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdJdGVtKSB7XG4gICAgICAgICAgICBpdGVtLmlkID0gZXhpc3RpbmdJdGVtLmlkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpdGVtLmFmdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcy5maW5kSW5kZXgoaSA9PiBpLnRpdGxlID09PSBpdGVtLmFmdGVyKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5zbGljZSgwLCBpbmRleCArIDEpXG4gICAgICAgICAgICAgICAgLmNvbmNhdChpdGVtKVxuICAgICAgICAgICAgICAgIC5jb25jYXQocmVzLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpdGVtLmJlZm9yZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KGkgPT4gaS50aXRsZSA9PT0gaXRlbS5iZWZvcmUpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICAgICAgICAgIC5jb25jYXQoaXRlbSlcbiAgICAgICAgICAgICAgICAuY29uY2F0KHJlcy5zbGljZShpbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzLmNvbmNhdChpdGVtKTtcbiAgICAgICAgfSwgaXRlbXMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7dGhpcy5fbG9nUHJlZml4fSBJbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gJyR7Q09SRV9DT05GSUdfT1BUSU9OUy5NRU5VX0lURU1TLmtleX0nLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBtZW51IGl0ZW1gLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbHRlciBpdGVtIHVzaW5nIGFjY291bnQgcmlnaHRzXG4gICAgY29uc3Qgb3B0cyA9IHtkZWJ1ZzogdGhpcy5fZGVidWd9O1xuICAgIGl0ZW1zID0gaXRlbXNcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBNZW51SXRlbXMuY2hlY2tJZlZpc2libGUoaXRlbSwgYWNjb3VudCwgY29uZmlnLCBvcHRzKSlcbiAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgIC8vIEdlbmVyYXRlIGl0ZW0ncyBpZCAoaWYgbmVlZClcbiAgICAgICAgaWYgKGlzTmlsKGl0ZW0uaWQpKSBpdGVtLmlkID0gdGhpcy5faXRlbUNvdW50ZXIrKztcblxuICAgICAgICAvLyBSZXBsYWNlIHRpdGxlIHVzaW5nIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhpdGVtLnRpdGxlUHJvcGVydHkpICYmIGNvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHRpdGxlID0gY29uZmlnLnByb3BlcnRpZXNbaXRlbS50aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICBpZiAodGl0bGUpIHJldHVybiB7Li4uaXRlbSwgdGl0bGV9OyAvLyBDcmVhdGUgYSBjb3B5LCB0byBrZWVwIHRoZSBvcmlnaW5hbCBpdGVtLnRpdGxlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcblxuICAgIC8vIFJlLWF0dGFjaCBzdWIgbWVudSBpdGVtc1xuICAgIGlmIChyb290Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZFN1Yk1lbnVJdGVtcyhyb290Q2hpbGRyZW4sIHtza2lwSWZFeGlzdHM6IGZhbHNlLCBhdmFpbGFibGVQYXJlbnRzOiBpdGVtc30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9IEZvdW5kICR7aXRlbXMubGVuZ3RofSB2aXNpYmxlIGl0ZW1zLi4uYCk7XG5cbiAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoaXRlbXMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9maW5kRXhpc3RpbmdJdGVtKGl0ZW06IE1lbnVJdGVtLCBpdGVtcz86IE1lbnVJdGVtW10pOiBNZW51SXRlbSB7XG4gICAgaXRlbXMgPSBpdGVtcyB8fCB0aGlzLmRhdGE7XG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7IC8vIE5vdCBmb3VuZFxuICAgIGZvciAoY29uc3QgaSBvZiBpdGVtcykge1xuICAgICAgaWYgKE1lbnVJdGVtcy5pc1NhbWUoaSwgaXRlbSkpIHJldHVybiBpO1xuICAgICAgY29uc3QgY2hpbGQgPSB0aGlzLl9maW5kRXhpc3RpbmdJdGVtKGl0ZW0sIGkuJGNoaWxkcmVuLnZhbHVlKTtcbiAgICAgIGlmIChjaGlsZCkgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBfZmluZFBhcmVudChjaGlsZEl0ZW06IE1lbnVJdGVtLCBhdmFpbGFibGVQYXJlbnRzPzogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcbiAgICBpZiAoIWNoaWxkSXRlbT8ucGF0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBhdmFpbGFibGVQYXJlbnRzID0gYXZhaWxhYmxlUGFyZW50cyB8fCB0aGlzLmRhdGE7XG5cbiAgICByZXR1cm4gYXZhaWxhYmxlUGFyZW50cy5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtPy5wYXRoKSByZXR1cm4gcmVzO1xuXG4gICAgICAvLyBBIGZvdW5kIGl0ZW0gYWxyZWFkeSBtYXRjaCB3aXRoIHRoZSBtZW51SXRlbS5wYXJlbnRQYXRoIDoga2VlcCBpdCBhcyBpdFxuICAgICAgLy8gVGhlcmUgaXMgYSBmb3VuZCBjYW5kaWRhdGUgdGhhdCBhbHJlYWR5IG1hdGNoIHRoZSBjdXJyZW50IGNhbmRpZGF0ZSA6IGtlZXAgaXRcbiAgICAgIGlmIChNZW51SXRlbXMuaXNQYXJlbnQoY2hpbGRJdGVtLCByZXMpKSByZXR1cm4gcmVzO1xuXG4gICAgICAvLyBJZiB0aGUgbWVudSBpdGVtIGhhcyBleHBsaWNpdCBwYXJlbnRQYXRoIGFuZCBpdHMgcGF0aCBhbmQgcGF0aCBwYXJhbSBhcmUgdGhlIHNhbWUgYXMgdGhlIGNhbmRpZGF0ZSAgOiB1c2UgaXQgYXMgcGFyZW50XG4gICAgICBpZiAoTWVudUl0ZW1zLmlzUGFyZW50KGNoaWxkSXRlbSwgaXRlbSkpIHJldHVybiBpdGVtO1xuXG4gICAgICBpZiAoIXJlcyAmJiBpdGVtLiRjaGlsZHJlbj8udmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kUGFyZW50KGNoaWxkSXRlbSwgaXRlbS4kY2hpbGRyZW4/LnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LCB1bmRlZmluZWQpO1xuICB9O1xuXG4gIHByb3RlY3RlZCBfYWRkTWVudVRvUGFyZW50KHBhcmVudDogTWVudUl0ZW0sIGNoaWxkOiBNZW51SXRlbSkge1xuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1BZGRpbmcgYSBzdWItbWVudSAke01lbnVJdGVtcy5nZXRVcmwoY2hpbGQpfSB0byBwYXJlbnQgbWVudSAke01lbnVJdGVtcy5nZXRVcmwocGFyZW50KX1gKTtcblxuICAgIC8vIEF2b2lkIHRvIGtlZXAgaWRlbnRpY2FsIG1lbnUgaXRlbSAod2UgcmVwbGFjZSBpdCB3aXRoIHRoZSBuZXcgY2hpbGQgbWVudSBpdGVtKVxuICAgIC8vaWYgKCFwYXJlbnQ/LiRjaGlsZHJlbikgcGFyZW50LiRjaGlsZHJlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUl0ZW1bXT4oW10pO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LiRjaGlsZHJlbi52YWx1ZSB8fCBbXTtcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KGl0ZW0gPT4gTWVudUl0ZW1zLmlzU2FtZShjaGlsZCwgaXRlbSkpO1xuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgY2hpbGRyZW5bZXhpc3RpbmdJbmRleF0gPSBjaGlsZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICB9XG4gICAgcGFyZW50LiRjaGlsZHJlbi5uZXh0KGNoaWxkcmVuKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIF9kZXRhY2hTdG9yZUFuZFJlc3RvcmUocGF0aFBhcmFtOiBNZW51UGF0aFBhcmFtKSB7XG4gICAgY29uc3QgZXhjbHVkZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMuX2RldGFjaFN1Yk1lbnVzKHBhdGhQYXJhbSwgdGhpcy5kYXRhLCBleGNsdWRlZEl0ZW1zKTtcbiAgICBpZiAoIWV4Y2x1ZGVkSXRlbXMubGVuZ3RoKSByZXR1cm47IC8vIFNraXAgaWYgbm8gaXRlbXMgZGV0YWNoZWRcblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9IERldGFjaGVkIHN1YiBtZW51czogYCwgZXhjbHVkZWRJdGVtcyk7XG4gICAgLy8gVE9ETyBTdG9yZSBleGNsdWRlZCBpdGVtc1xuICAgIC8vIFRPRE8gUmVzdG9yZSBvbGQgZXhjbHVkZWQgaXRlbXNcbiAgICAvLyB0aGlzLmFkZFN1Yk1lbnVJdGVtcygpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgX2RldGFjaFN1Yk1lbnVzKGN1cnJlbnRQYXRoUGFyYW06IE1lbnVQYXRoUGFyYW0sIGl0ZW1zPzogTWVudUl0ZW1bXSwgZXhjbHVkZWRJdGVtcz86IE1lbnVJdGVtW10pIHtcbiAgICBpdGVtcyA9IGl0ZW1zIHx8IHRoaXMuZGF0YTtcbiAgICBleGNsdWRlZEl0ZW1zID0gZXhjbHVkZWRJdGVtcyB8fCBbXTtcbiAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGlmICghaXRlbS5wYXJlbnRQYXRoKSByZXR1cm4gdHJ1ZTsgLy8gQWx3YXlzIGtlZXAgcm9vdCBpdGVtc1xuICAgICAgaWYgKE1lbnVJdGVtcy5pc1Bpbm5lZChpdGVtKSkgcmV0dXJuIHRydWU7IC8vIEFsd2F5cyBrZWVwIHBpbm5lZCBpdGVtc1xuXG4gICAgICAvLyBLZWVwIGVhY2ggbWVudSBpdGVtcyBpbiB0aGUgc2NvcGUgb2YgdGhlIGN1cnJlbnQgdXJsIHBhdGhcbiAgICAgIGlmIChjdXJyZW50UGF0aFBhcmFtLnBhdGguc3RhcnRzV2l0aChpdGVtLnBhdGgpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgLy8gRWxzZSwgZXhjbHVkZVxuICAgICAgZXhjbHVkZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2RldGFjaFN1Yk1lbnVzKGN1cnJlbnRQYXRoUGFyYW0sIGl0ZW0uJGNoaWxkcmVuLnZhbHVlIHx8IFtdLCBleGNsdWRlZEl0ZW1zKTtcbiAgICAgIGl0ZW0uJGNoaWxkcmVuLm5leHQoY2hpbGRyZW4pO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG59XG4iXX0=
330
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvbWVudS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RixPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsYUFBYSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRW5GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSW5FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTFFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDOzs7Ozs7O0FBR3RHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFzQixJQUFJLENBQUM7QUFlOUQsTUFBTSxPQUFPLFdBQVksU0FBUSwwQkFBc0M7SUFZckUsWUFDWSxlQUFnQyxFQUNoQyxhQUE0QixFQUM1QixjQUE4QixFQUM5QixNQUFjLEVBQ08sV0FBd0IsRUFDbkIsV0FBd0I7UUFFNUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxD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d0dBMVZVLFdBQVcsa0lBaUJaLFdBQVcsYUFDQyxjQUFjOzRHQWxCekIsV0FBVyxjQUZWLE1BQU07MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWtCSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1lcmdlLCBtZXJnZU1hcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVudUl0ZW0sIE1lbnVJdGVtcyB9IGZyb20gJy4vbWVudS5tb2RlbCc7XG5pbXBvcnQgeyBBUFBfTUVOVV9JVEVNUyB9IGZyb20gJy4vbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJR19PUFRJT05TIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnJztcbmltcG9ydCB7IGlzTmlsLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBBY2NvdW50IH0gZnJvbSAnLi4vc2VydmljZXMvbW9kZWwvYWNjb3VudC5tb2RlbCc7XG5pbXBvcnQgeyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtb2JzZXJ2YWJsZS1zZXJ2aWNlLmNsYXNzJztcblxuZXhwb3J0IHR5cGUgU3BsaXRQYW5lU2hvd1doZW4gPSBib29sZWFuIHwgJ2xnJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX01FTlVfU0hPV19XSEVOOiBTcGxpdFBhbmVTaG93V2hlbiA9ICdsZyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkU3ViTWVudUl0ZW1zT3B0aW9uIHtcbiAgc2tpcElmRXhpc3RzPzogYm9vbGVhbjtcbiAgYXZhaWxhYmxlUGFyZW50cz86IE1lbnVJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVudVBhdGhQYXJhbSB7XG4gIHBhdGg6IHN0cmluZztcbiAgcGFyYW1zOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfTtcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTWVudVNlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxNZW51SXRlbVtdPiB7XG5cbiAgcmVhZG9ubHkgYWNjb3VudENoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFjY291bnQ+KHVuZGVmaW5lZCk7XG5cbiAgcHJpdmF0ZSBfc3RhdGljSXRlbXM6IE1lbnVJdGVtW107XG4gIHByaXZhdGUgX2l0ZW1Db3VudGVyID0gMDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nUHJlZml4ID0gJ1ttZW51LXNlcnZpY2VdICc7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRvcGVuZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kc3BsaXRQYW5lV2hlbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U3BsaXRQYW5lU2hvd1doZW4+KERFRkFVTFRfTUVOVV9TSE9XX1dIRU4pO1xuICBwcml2YXRlIHJlYWRvbmx5IF8kZW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgXyRsaXN0ZW5Sb3V0ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybVNlcnZpY2U6IFBsYXRmb3JtU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX01FTlVfSVRFTVMpIHN0YXRpY0l0ZW1zPzogTWVudUl0ZW1bXVxuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybVNlcnZpY2UpO1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgdGhpcy5fc3RhdGljSXRlbXMgPSAoc3RhdGljSXRlbXMgfHwgW10pLm1hcChpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBNZW51SXRlbXMucHJlcGFyZUl0ZW0oaSk7XG4gICAgICBpdGVtLmlkID0gdGhpcy5faXRlbUNvdW50ZXIrKztcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IG9wZW5lZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fJG9wZW5lZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzcGxpdFBhbmVXaGVuKCk6IE9ic2VydmFibGU8U3BsaXRQYW5lU2hvd1doZW4+IHtcbiAgICByZXR1cm4gdGhpcy5fJHNwbGl0UGFuZVdoZW4uYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fJGVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBlbmFibGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl8kZW5hYmxlZC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNldFNwbGl0UGFuZVNob3dXaGVuKHZhbHVlOiBTcGxpdFBhbmVTaG93V2hlbikge1xuICAgIGlmICh0aGlzLl8kc3BsaXRQYW5lV2hlbi52YWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuXyRzcGxpdFBhbmVXaGVuLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVNwbGl0UGFuZVdoZW4oKSB7XG4gICAgaWYgKHRoaXMuXyRzcGxpdFBhbmVXaGVuLnZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5fJHNwbGl0UGFuZVdoZW4ubmV4dChmYWxzZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5fJHNwbGl0UGFuZVdoZW4ubmV4dChERUZBVUxUX01FTlVfU0hPV19XSEVOKTtcbiAgICB9XG4gIH1cblxuICBfbWFya0FzT3BlbmVkKCkge1xuICAgIHRoaXMuXyRvcGVuZWQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIF9tYXJrQXNDbG9zZWQoKSB7XG4gICAgdGhpcy5fJG9wZW5lZC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFN1Yk1lbnVJdGVtcyhuZXdJdGVtczogTWVudUl0ZW1bXSwgb3B0cz86IEFkZFN1Yk1lbnVJdGVtc09wdGlvbikge1xuICAgIGlmICghdGhpcy5zdGFydGVkKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG4gICAgcmV0dXJuIG5ld0l0ZW1zLm1hcChpID0+IHRoaXMuX2FkZFN1Yk1lbnVJdGVtKGksIG9wdHMpKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFN1Yk1lbnVJdGVtKG5ld0l0ZW06IE1lbnVJdGVtLCBvcHRzPzogQWRkU3ViTWVudUl0ZW1zT3B0aW9uKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICByZXR1cm4gdGhpcy5fYWRkU3ViTWVudUl0ZW0obmV3SXRlbSwgb3B0cyk7XG4gIH1cblxuICByZW1vdmVTdWJNZW51SXRlbShpdGVtOiBNZW51SXRlbSkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRQYXJlbnQoaXRlbSk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgY29uc3QgbmV3Q2hpbGRzID0gcGFyZW50LiRjaGlsZHJlbi52YWx1ZS5maWx0ZXIoaSA9PiAhTWVudUl0ZW1zLmlzU2FtZShpdGVtLCBpKSk7XG4gICAgICBwYXJlbnQuJGNoaWxkcmVuLm5leHQobmV3Q2hpbGRzKTtcbiAgICB9XG4gIH1cblxuICBkZXRhY2hTdWJNZW51SXRlbShwYXRoUGFyYW06IE1lbnVQYXRoUGFyYW0pIHtcbiAgICBjb25zdCBleGNsdWRlZEl0ZW1zID0gW107XG4gICAgdGhpcy5fZGV0YWNoU3ViTWVudXMocGF0aFBhcmFtLCB0aGlzLmRhdGEsIGV4Y2x1ZGVkSXRlbXMpO1xuICAgIGlmICghZXhjbHVkZWRJdGVtcy5sZW5ndGgpIHJldHVybjsgLy8gU2tpcCBpZiBubyBpdGVtcyBkZXRhY2hlZFxuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1EZXRhY2hlZCBzdWIgbWVudXM6IGAsIGV4Y2x1ZGVkSXRlbXMpO1xuICAgIC8vIFRPRE8gU3RvcmUgZXhjbHVkZWQgaXRlbXNcbiAgICAvLyBUT0RPIFJlc3RvcmUgb2xkIGV4Y2x1ZGVkIGl0ZW1zXG4gICAgLy8gdGhpcy5hZGRTdWJNZW51SXRlbXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RhcnQoKSB7XG4gICAgY29uc29sZS5pbmZvKGAke3RoaXMuX2xvZ1ByZWZpeH1TdGFydGluZy4uLmApO1xuXG4gICAgY29uc3QgW2FjY291bnQsIGNvbmZpZ10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnJlYWR5KCksXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UucmVhZHkoKSxcbiAgICBdKTtcbiAgICBhd2FpdCB0aGlzLl9sb2FkTWVudUl0ZW1zKGNvbmZpZywgYWNjb3VudCk7XG5cbiAgICBjb25zdCBhY2NvdW50RXZlbnQkID0gbWVyZ2UoXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4sXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9nb3V0LnBpcGUoXG4gICAgICAgIG1hcChfID0+IG51bGwpXG4gICAgICApLFxuICAgICkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhMSwgYTIpID0+IERhdGVVdGlscy5pc1NhbWUoYTE/LnVwZGF0ZURhdGUsIGEyPy51cGRhdGVEYXRlKSksXG4gICAgICBtYXAoYWNjb3VudCA9PiBpc05vdE5pbChhY2NvdW50Py5pZCkgPyBhY2NvdW50IDogbnVsbClcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIC8vIENvbWJpbmUgY29uZmlnIGFuZCBhY2NvdW50IGV2ZW50c1xuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuY29uZmlnU2VydmljZS5jb25maWcsXG4gICAgICAgIGFjY291bnRFdmVudCRcbiAgICAgIF0pLnN1YnNjcmliZShhc3luYyAoW2NvbmZpZywgYWNjb3VudF0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1SZWNlaXZlZCBjb25maWcgb3IgYWNjb3VudCBldmVudC4gUmVmcmVzaGluZyBpdGVtcy4uLmAsIGFjY291bnQpO1xuXG4gICAgICAgIC8vIExvYWQgYWxsIGl0ZW1zXG4gICAgICAgIGF3YWl0IHRoaXMuX2xvYWRNZW51SXRlbXMoY29uZmlnLCBhY2NvdW50KTtcblxuICAgICAgICAvLyBFbWl0IGFjY291bnQgY2hhbmdlcyBldmVudFxuICAgICAgICB0aGlzLmFjY291bnRDaGFuZ2VzLm5leHQoYWNjb3VudCk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5fJGxpc3RlblJvdXRlLnBpcGUoXG4gICAgICAgIGZpbHRlcihsaXN0ZW4gPT4gbGlzdGVuID09PSB0cnVlKSxcbiAgICAgICAgbWVyZ2VNYXAoXyA9PiB0aGlzLnJvdXRlci5ldmVudHMpLFxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAgICAgbWFwKChldmVudDogTmF2aWdhdGlvbkVuZCkgPT4gTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeShldmVudC51cmwpKSxcbiAgICAgICkuc3Vic2NyaWJlKHBhdGhQYXJhbSA9PiB7XG4gICAgICAgIHRoaXMuZGV0YWNoU3ViTWVudUl0ZW0ocGF0aFBhcmFtKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmRhdGFTdWJqZWN0LnZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9hZGRTdWJNZW51SXRlbShuZXdJdGVtOiBNZW51SXRlbSwgb3B0cz86IEFkZFN1Yk1lbnVJdGVtc09wdGlvbikge1xuICAgIG9wdHMgPSB7XG4gICAgICBza2lwSWZFeGlzdHM6IHRydWUsXG4gICAgICAuLi5vcHRzLFxuICAgIH07XG5cbiAgICAvLyBNYWtlIHN1cmUgcGF0aCAoYW5kIHBhdGhQYXJhbXMpIGFyZSBmaWxsZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgbmV3SXRlbSA9IE1lbnVJdGVtcy5wcmVwYXJlSXRlbShuZXdJdGVtKTtcblxuICAgIC8vIEZpbmQgaWYgaXRlbSBhbHJlYWR5IGV4aXN0c1xuICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IHRoaXMuX2ZpbmRFeGlzdGluZ0l0ZW0obmV3SXRlbSk7XG4gICAgaWYgKGV4aXN0aW5nSXRlbSkge1xuICAgICAgaWYgKG9wdHMuc2tpcElmRXhpc3RzKSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9U2tpcHBpbmcgc3ViIGl0ZW0gKGFscmVhZHkgZXhpc3QpYCwgbmV3SXRlbSk7XG4gICAgICAgIHJldHVybiBleGlzdGluZ0l0ZW07XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9VXBkYXRpbmcgZXhpc3Rpbmcgc3ViIGl0ZW0gI2AsIGV4aXN0aW5nSXRlbS5pZCk7XG4gICAgICAvLyBSZXBsYWNlIGV4aXN0aW5nIGl0ZW0sIGJ1dCBrZWVwIHRoZSBleGlzdGluZyBpZFxuICAgICAgbmV3SXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcbiAgICAgIG5ld0l0ZW0uJGNoaWxkcmVuID0gZXhpc3RpbmdJdGVtLiRjaGlsZHJlbjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kUGFyZW50KG5ld0l0ZW0sIG9wdHM/LmF2YWlsYWJsZVBhcmVudHMpO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7dGhpcy5fbG9nUHJlZml4fVVuYWJsZSB0byBhZGQgc3ViIGl0ZW06IG5vIHBhcmVudCBmb3VuZGApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgaXRlbSdzIGlkIChpZiBuZWVkKVxuICAgIGlmIChpc05pbChuZXdJdGVtLmlkKSkgbmV3SXRlbS5pZCA9IHRoaXMuX2l0ZW1Db3VudGVyKys7XG5cbiAgICB0aGlzLl9hZGRNZW51VG9QYXJlbnQocGFyZW50LCBuZXdJdGVtKTtcblxuICAgIC8vIFN0YXJ0IGxpc3RlbmluZyByb3V0ZVxuICAgIGlmICghdGhpcy5fJGxpc3RlblJvdXRlLnZhbHVlKSB0aGlzLl8kbGlzdGVuUm91dGUubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiBuZXdJdGVtO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9sb2FkTWVudUl0ZW1zKGNvbmZpZzogQ29uZmlndXJhdGlvbnxudWxsLCBhY2NvdW50OiBBY2NvdW50fG51bGwpIHtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUxvYWRpbmcgbWVudSBpdGVtcy4uLmApO1xuXG4gICAgLy8gU2F2ZSBwcmV2aW91cyBjaGlsZHJlbiBvZiByb290IGl0ZW1zXG4gICAgY29uc3Qgcm9vdENoaWxkcmVuID0gKHRoaXMuZGF0YSB8fCBbXSlcbiAgICAgIC5yZWR1Y2UoKHJlcywgcm9vdEl0ZW0pID0+IHJlcy5jb25jYXQocm9vdEl0ZW0/LiRjaGlsZHJlbj8udmFsdWUgfHwgW10pLCBbXSk7XG5cbiAgICAvLyBSZXNldCBiYXNlIHJvb3QgaXRlbXMgKGNsZWFuIGl0ZW1zIGFkZGVkIGJ5IGNvbmZpZylcbiAgICBsZXQgaXRlbXMgPSB0aGlzLl9zdGF0aWNJdGVtcy5zbGljZSgpO1xuXG4gICAgLy8gQ29uY2F0IGNvbmZpZydzIGl0ZW1zXG4gICAgY29uc3QgY29uZmlnVmFsdWU6IHN0cmluZyA9IGNvbmZpZz8uZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5NRU5VX0lURU1TKTtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbmZpZ1ZhbHVlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29uZmlnSXRlbXMgPSBKU09OLnBhcnNlKGNvbmZpZ1ZhbHVlKSBhcyBNZW51SXRlbVtdO1xuICAgICAgICBpdGVtcyA9IChjb25maWdJdGVtcyB8fCBbXSkucmVkdWNlKChyZXM6IE1lbnVJdGVtW10sIGl0ZW0pID0+IHtcblxuICAgICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgaXRlbVxuICAgICAgICAgIGl0ZW0gPSBNZW51SXRlbXMucHJlcGFyZUl0ZW0oaXRlbSk7XG5cbiAgICAgICAgICAvLyBTa2lwIGlzIGFscmVhZHkgbG9hZGVkXG4gICAgICAgICAgaWYgKHJlcy5maW5kKChpKSA9PiBNZW51SXRlbXMuaXNTYW1lKGksIGl0ZW0pKSkgcmV0dXJuIHJlcztcblxuICAgICAgICAgIC8vIFJldXNlIGV4aXN0aW5nIGlkLCBpZiBwb3NzaWJsZVxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSXRlbSA9IHRoaXMuZGF0YT8uZmluZCgoaSkgPT4gTWVudUl0ZW1zLmlzU2FtZShpLCBpdGVtKSk7XG4gICAgICAgICAgaWYgKGV4aXN0aW5nSXRlbSkge1xuICAgICAgICAgICAgaXRlbS5pZCA9IGV4aXN0aW5nSXRlbS5pZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXRlbS5hZnRlcikge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZmluZEluZGV4KGkgPT4gaS50aXRsZSA9PT0gaXRlbS5hZnRlcik7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMuc2xpY2UoMCwgaW5kZXggKyAxKVxuICAgICAgICAgICAgICAgIC5jb25jYXQoaXRlbSlcbiAgICAgICAgICAgICAgICAuY29uY2F0KHJlcy5zbGljZShpbmRleCArIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoaXRlbS5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcmVzLmZpbmRJbmRleChpID0+IGkudGl0bGUgPT09IGl0ZW0uYmVmb3JlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5zbGljZSgwLCBpbmRleClcbiAgICAgICAgICAgICAgICAuY29uY2F0KGl0ZW0pXG4gICAgICAgICAgICAgICAgLmNvbmNhdChyZXMuc2xpY2UoaW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlcy5jb25jYXQoaXRlbSk7XG4gICAgICAgIH0sIGl0ZW1zKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGAke3RoaXMuX2xvZ1ByZWZpeH1JbnZhbGlkIHZhbHVlIGZvciBvcHRpb24gJyR7Q09SRV9DT05GSUdfT1BUSU9OUy5NRU5VX0lURU1TLmtleX0nLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBtZW51IGl0ZW1gLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZpbHRlciBpdGVtIHVzaW5nIGFjY291bnQgcmlnaHRzXG4gICAgY29uc3Qgb3B0cyA9IHtkZWJ1ZzogdGhpcy5fZGVidWd9O1xuICAgIGl0ZW1zID0gaXRlbXNcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBNZW51SXRlbXMuY2hlY2tJZlZpc2libGUoaXRlbSwgYWNjb3VudCwgY29uZmlnLCBvcHRzKSlcbiAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgIC8vIEdlbmVyYXRlIGl0ZW0ncyBpZCAoaWYgbmVlZClcbiAgICAgICAgaWYgKGlzTmlsKGl0ZW0uaWQpKSBpdGVtLmlkID0gdGhpcy5faXRlbUNvdW50ZXIrKztcblxuICAgICAgICAvLyBSZXBsYWNlIHRpdGxlIHVzaW5nIHByb3BlcnRpZXNcbiAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhpdGVtLnRpdGxlUHJvcGVydHkpICYmIGNvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHRpdGxlID0gY29uZmlnLnByb3BlcnRpZXNbaXRlbS50aXRsZVByb3BlcnR5XTtcbiAgICAgICAgICBpZiAodGl0bGUpIHJldHVybiB7Li4uaXRlbSwgdGl0bGV9OyAvLyBDcmVhdGUgYSBjb3B5LCB0byBrZWVwIHRoZSBvcmlnaW5hbCBpdGVtLnRpdGxlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9KTtcblxuICAgIC8vIFJlLWF0dGFjaCBzdWIgbWVudSBpdGVtc1xuICAgIGlmIChyb290Q2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZFN1Yk1lbnVJdGVtcyhyb290Q2hpbGRyZW4sIHtza2lwSWZFeGlzdHM6IGZhbHNlLCBhdmFpbGFibGVQYXJlbnRzOiBpdGVtc30pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLl9sb2dQcmVmaXh9Rm91bmQgJHtpdGVtcy5sZW5ndGh9IHZpc2libGUgaXRlbXMuLi5gKTtcblxuICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dChpdGVtcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2ZpbmRFeGlzdGluZ0l0ZW0oaXRlbTogTWVudUl0ZW0sIGl0ZW1zPzogTWVudUl0ZW1bXSk6IE1lbnVJdGVtIHtcbiAgICBpdGVtcyA9IGl0ZW1zIHx8IHRoaXMuZGF0YTtcbiAgICBpZiAoIWl0ZW1zLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gTm90IGZvdW5kXG4gICAgZm9yIChjb25zdCBpIG9mIGl0ZW1zKSB7XG4gICAgICBpZiAoTWVudUl0ZW1zLmlzU2FtZShpLCBpdGVtKSkgcmV0dXJuIGk7XG4gICAgICBjb25zdCBjaGlsZCA9IHRoaXMuX2ZpbmRFeGlzdGluZ0l0ZW0oaXRlbSwgaS4kY2hpbGRyZW4udmFsdWUpO1xuICAgICAgaWYgKGNoaWxkKSByZXR1cm4gY2hpbGQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9maW5kUGFyZW50KGNoaWxkSXRlbTogTWVudUl0ZW0sIGF2YWlsYWJsZVBhcmVudHM/OiBNZW51SXRlbVtdKTogTWVudUl0ZW0ge1xuICAgIGlmICghY2hpbGRJdGVtPy5wYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGF2YWlsYWJsZVBhcmVudHMgPSBhdmFpbGFibGVQYXJlbnRzIHx8IHRoaXMuZGF0YTtcblxuICAgIHJldHVybiBhdmFpbGFibGVQYXJlbnRzLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0/LnBhdGgpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIEEgZm91bmQgaXRlbSBhbHJlYWR5IG1hdGNoIHdpdGggdGhlIG1lbnVJdGVtLnBhcmVudFBhdGggOiBrZWVwIGl0IGFzIGl0XG4gICAgICAvLyBUaGVyZSBpcyBhIGZvdW5kIGNhbmRpZGF0ZSB0aGF0IGFscmVhZHkgbWF0Y2ggdGhlIGN1cnJlbnQgY2FuZGlkYXRlIDoga2VlcCBpdFxuICAgICAgaWYgKE1lbnVJdGVtcy5pc1BhcmVudChjaGlsZEl0ZW0sIHJlcykpIHJldHVybiByZXM7XG5cbiAgICAgIC8vIElmIHRoZSBtZW51IGl0ZW0gaGFzIGV4cGxpY2l0IHBhcmVudFBhdGggYW5kIGl0cyBwYXRoIGFuZCBwYXRoIHBhcmFtIGFyZSB0aGUgc2FtZSBhcyB0aGUgY2FuZGlkYXRlICA6IHVzZSBpdCBhcyBwYXJlbnRcbiAgICAgIGlmIChNZW51SXRlbXMuaXNQYXJlbnQoY2hpbGRJdGVtLCBpdGVtKSkgcmV0dXJuIGl0ZW07XG5cbiAgICAgIGlmICghcmVzICYmIGl0ZW0uJGNoaWxkcmVuPy52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRQYXJlbnQoY2hpbGRJdGVtLCBpdGVtLiRjaGlsZHJlbj8udmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHVuZGVmaW5lZCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIF9hZGRNZW51VG9QYXJlbnQocGFyZW50OiBNZW51SXRlbSwgY2hpbGQ6IE1lbnVJdGVtKSB7XG5cbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5fbG9nUHJlZml4fUFkZGluZyBhIHN1Yi1tZW51ICR7TWVudUl0ZW1zLmdldFVybChjaGlsZCl9IHRvIHBhcmVudCBtZW51ICR7TWVudUl0ZW1zLmdldFVybChwYXJlbnQpfWApO1xuXG4gICAgLy8gQXZvaWQgdG8ga2VlcCBpZGVudGljYWwgbWVudSBpdGVtICh3ZSByZXBsYWNlIGl0IHdpdGggdGhlIG5ldyBjaGlsZCBtZW51IGl0ZW0pXG4gICAgLy9pZiAoIXBhcmVudD8uJGNoaWxkcmVuKSBwYXJlbnQuJGNoaWxkcmVuID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPihbXSk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnQuJGNoaWxkcmVuLnZhbHVlIHx8IFtdO1xuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoaXRlbSA9PiBNZW51SXRlbXMuaXNTYW1lKGNoaWxkLCBpdGVtKSk7XG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICBjaGlsZHJlbltleGlzdGluZ0luZGV4XSA9IGNoaWxkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgICBwYXJlbnQuJGNoaWxkcmVuLm5leHQoY2hpbGRyZW4pO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgX2RldGFjaFN0b3JlQW5kUmVzdG9yZShwYXRoUGFyYW06IE1lbnVQYXRoUGFyYW0pIHtcbiAgICBjb25zdCBleGNsdWRlZEl0ZW1zID0gW107XG4gICAgdGhpcy5fZGV0YWNoU3ViTWVudXMocGF0aFBhcmFtLCB0aGlzLmRhdGEsIGV4Y2x1ZGVkSXRlbXMpO1xuICAgIGlmICghZXhjbHVkZWRJdGVtcy5sZW5ndGgpIHJldHVybjsgLy8gU2tpcCBpZiBubyBpdGVtcyBkZXRhY2hlZFxuXG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMuX2xvZ1ByZWZpeH1EZXRhY2hlZCBzdWIgbWVudXM6IGAsIGV4Y2x1ZGVkSXRlbXMpO1xuICAgIC8vIFRPRE8gU3RvcmUgZXhjbHVkZWQgaXRlbXNcbiAgICAvLyBUT0RPIFJlc3RvcmUgb2xkIGV4Y2x1ZGVkIGl0ZW1zXG4gICAgLy8gdGhpcy5hZGRTdWJNZW51SXRlbXMoKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIF9kZXRhY2hTdWJNZW51cyhjdXJyZW50UGF0aFBhcmFtOiBNZW51UGF0aFBhcmFtLCBpdGVtcz86IE1lbnVJdGVtW10sIGV4Y2x1ZGVkSXRlbXM/OiBNZW51SXRlbVtdKSB7XG4gICAgaXRlbXMgPSBpdGVtcyB8fCB0aGlzLmRhdGE7XG4gICAgZXhjbHVkZWRJdGVtcyA9IGV4Y2x1ZGVkSXRlbXMgfHwgW107XG4gICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBpZiAoIWl0ZW0ucGFyZW50UGF0aCkgcmV0dXJuIHRydWU7IC8vIEFsd2F5cyBrZWVwIHJvb3QgaXRlbXNcbiAgICAgIGlmIChNZW51SXRlbXMuaXNQaW5uZWQoaXRlbSkpIHJldHVybiB0cnVlOyAvLyBBbHdheXMga2VlcCBwaW5uZWQgaXRlbXNcblxuICAgICAgLy8gS2VlcCBlYWNoIG1lbnUgaXRlbXMgaW4gdGhlIHNjb3BlIG9mIHRoZSBjdXJyZW50IHVybCBwYXRoXG4gICAgICBpZiAoY3VycmVudFBhdGhQYXJhbS5wYXRoLnN0YXJ0c1dpdGgoaXRlbS5wYXRoKSkgcmV0dXJuIHRydWU7XG5cbiAgICAgIC8vIEVsc2UsIGV4Y2x1ZGVcbiAgICAgIGV4Y2x1ZGVkSXRlbXMucHVzaChpdGVtKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9kZXRhY2hTdWJNZW51cyhjdXJyZW50UGF0aFBhcmFtLCBpdGVtLiRjaGlsZHJlbi52YWx1ZSB8fCBbXSwgZXhjbHVkZWRJdGVtcyk7XG4gICAgICBpdGVtLiRjaGlsZHJlbi5uZXh0KGNoaWxkcmVuKTtcbiAgICB9KTtcbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxufVxuIl19
@@ -1,5 +1,6 @@
1
- import { Directive, Input, } from '@angular/core';
1
+ import { Directive, Input } from '@angular/core';
2
2
  import { MenuItems } from './menu.model';
3
+ import { isNil, isNilOrBlank } from '../../shared/functions';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "./menu.service";
5
6
  import * as i2 from "@angular/material/tabs";
@@ -36,21 +37,20 @@ export class SubMenuTabDirective {
36
37
  parentPath,
37
38
  icon: 'none',
38
39
  path: this.path,
39
- pathParams
40
+ pathParams,
40
41
  });
41
42
  }
42
43
  async _addItemToMenu() {
44
+ let menuItem = this._computeMenuItem();
43
45
  if (this._menuItem) {
44
- const newItem = this._computeMenuItem();
45
- if (!MenuItems.isSame(newItem, this._menuItem))
46
- this._menuItem = newItem;
46
+ menuItem.id = this._menuItem.id;
47
47
  }
48
- else {
49
- this._menuItem = this._computeMenuItem();
50
- }
51
- if (!this._menuItem.parentPath)
52
- return; // Skip
53
- this.menuService.addSubMenuItem(this._menuItem);
48
+ if (!menuItem.parentPath)
49
+ return; // Skip if no parent
50
+ if (isNilOrBlank(menuItem.title))
51
+ return; // Skip if no title
52
+ menuItem = await this.menuService.addSubMenuItem(menuItem, { skipIfExists: isNil(menuItem.id) });
53
+ this._menuItem = menuItem;
54
54
  }
55
55
  }
56
56
  SubMenuTabDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SubMenuTabDirective, deps: [{ token: i1.MenuService }, { token: i2.MatTabGroup }, { token: i2.MatTab }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Directive });
@@ -58,7 +58,7 @@ SubMenuTabDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", ve
58
58
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SubMenuTabDirective, decorators: [{
59
59
  type: Directive,
60
60
  args: [{
61
- selector: '[appSubMenuTab]'
61
+ selector: '[appSubMenuTab]',
62
62
  }]
63
63
  }], ctorParameters: function () { return [{ type: i1.MenuService }, { type: i2.MatTabGroup }, { type: i2.MatTab }, { type: i3.Router }]; }, propDecorators: { label: [{
64
64
  type: Input
@@ -71,4 +71,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
71
71
  }], subMenuTitle: [{
72
72
  type: Input
73
73
  }] } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLW1lbnUtdGFiLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L3N1Yi1tZW51LXRhYi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEdBRU4sTUFBTSxlQUFlLENBQUM7QUFJdkIsT0FBTyxFQUFXLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFNakQsTUFBTSxPQUFPLG1CQUFtQjtJQVc5QixZQUNVLFdBQXdCLEVBQ3hCLFFBQXFCLEVBQ3JCLEdBQVcsRUFDWCxNQUFjO1FBSGQsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixRQUFHLEdBQUgsR0FBRyxDQUFRO1FBQ1gsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUV0QixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3RGLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUTtZQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDM0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLElBQUksQ0FBQyxTQUFTO29CQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3hFO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2QjtTQUNGO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsRUFBQyxDQUFDO1FBQzlELE1BQU0sVUFBVSxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDN0QsT0FBTyxTQUFTLENBQUMsV0FBVyxDQUFDO1lBQzNCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQ3RDLFVBQVU7WUFDVixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLFVBQVU7U0FDWCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLGNBQWM7UUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1NBQzFFO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVTtZQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNsRCxDQUFDOztnSEF4RFUsbUJBQW1CO29HQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFIL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1QjtzS0FHVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBJbnB1dCwgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0VGFiLCBNYXRUYWJHcm91cH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7TWVudVNlcnZpY2V9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7TWVudUl0ZW0sIE1lbnVJdGVtc30gZnJvbSAnLi9tZW51Lm1vZGVsJztcbmltcG9ydCB7ZXF1YWxzfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcFN1Yk1lbnVUYWJdJ1xufSlcbmV4cG9ydCBjbGFzcyBTdWJNZW51VGFiRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgcGFyZW50UGF0aDogc3RyaW5nO1xuICBASW5wdXQoKSBwYXRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1Yk1lbnVUaXRsZTogc3RyaW5nO1xuXG5cbiAgcHJpdmF0ZSBfbWVudUl0ZW06IE1lbnVJdGVtO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFiR3JvdXA6IE1hdFRhYkdyb3VwLFxuICAgIHByaXZhdGUgdGFiOiBNYXRUYWIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgKSB7XG4gICAgdGhpcy5wYXRoID0gTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpLnBhdGg7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLnRhYi5kaXNhYmxlZCkgdGhpcy5fYWRkSXRlbVRvTWVudSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmRpc2FibGVkIHx8IGNoYW5nZXMubGFiZWwgfHwgY2hhbmdlcy5wYXJlbnRQYXRoKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5fbWVudUl0ZW0pIHRoaXMubWVudVNlcnZpY2UucmVtb3ZlU3ViTWVudUl0ZW0odGhpcy5fbWVudUl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYWRkSXRlbVRvTWVudSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVNZW51SXRlbSgpOiBNZW51SXRlbSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggKyB0aGlzLnRhYi5wb3NpdGlvbjtcbiAgICBjb25zdCBwYXRoUGFyYW1zID0gaW5kZXggPT09IDAgPyB7fSA6IHt0YWI6IGluZGV4LnRvU3RyaW5nKCl9O1xuICAgIGNvbnN0IHBhcmVudFBhdGggPSBpbmRleCA9PT0gMCA/IHRoaXMucGFyZW50UGF0aCA6IHRoaXMucGF0aDtcbiAgICByZXR1cm4gTWVudUl0ZW1zLnByZXBhcmVJdGVtKHtcbiAgICAgIHRpdGxlOiB0aGlzLnN1Yk1lbnVUaXRsZSB8fCB0aGlzLmxhYmVsLFxuICAgICAgcGFyZW50UGF0aCxcbiAgICAgIGljb246ICdub25lJyxcbiAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgIHBhdGhQYXJhbXNcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2FkZEl0ZW1Ub01lbnUoKSB7XG4gICAgaWYgKHRoaXMuX21lbnVJdGVtKSB7XG4gICAgICBjb25zdCBuZXdJdGVtID0gdGhpcy5fY29tcHV0ZU1lbnVJdGVtKCk7XG4gICAgICBpZiAoIU1lbnVJdGVtcy5pc1NhbWUobmV3SXRlbSwgdGhpcy5fbWVudUl0ZW0pKSB0aGlzLl9tZW51SXRlbSA9IG5ld0l0ZW07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21lbnVJdGVtID0gdGhpcy5fY29tcHV0ZU1lbnVJdGVtKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fbWVudUl0ZW0ucGFyZW50UGF0aCkgcmV0dXJuOyAvLyBTa2lwXG4gICAgdGhpcy5tZW51U2VydmljZS5hZGRTdWJNZW51SXRlbSh0aGlzLl9tZW51SXRlbSk7XG4gIH1cblxufVxuIl19
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLW1lbnUtdGFiLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9tZW51L3N1Yi1tZW51LXRhYi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUkxRixPQUFPLEVBQVksU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBSzdELE1BQU0sT0FBTyxtQkFBbUI7SUFTOUIsWUFBb0IsV0FBd0IsRUFBVSxRQUFxQixFQUFVLEdBQVcsRUFBVSxNQUFjO1FBQXBHLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBVSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ3RILElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdEYsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRO1lBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUMzRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVM7b0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDeEU7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3ZCO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQzlELE1BQU0sVUFBVSxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDaEUsTUFBTSxVQUFVLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM3RCxPQUFPLFNBQVMsQ0FBQyxXQUFXLENBQUM7WUFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUs7WUFDdEMsVUFBVTtZQUNWLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsVUFBVTtTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYztRQUMxQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsUUFBUSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtZQUFFLE9BQU8sQ0FBQyxvQkFBb0I7UUFFdEQsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sQ0FBQyxtQkFBbUI7UUFFN0QsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7O2dIQW5EVSxtQkFBbUI7b0dBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQUgvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCO3NLQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYiwgTWF0VGFiR3JvdXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4vbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IE1lbnVJdGVtLCBNZW51SXRlbXMgfSBmcm9tICcuL21lbnUubW9kZWwnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXBwU3ViTWVudVRhYl0nLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJNZW51VGFiRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHBhcmVudFBhdGg6IHN0cmluZztcbiAgQElucHV0KCkgcGF0aDogc3RyaW5nO1xuICBASW5wdXQoKSBzdWJNZW51VGl0bGU6IHN0cmluZztcblxuICBwcml2YXRlIF9tZW51SXRlbTogTWVudUl0ZW07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsIHByaXZhdGUgdGFiR3JvdXA6IE1hdFRhYkdyb3VwLCBwcml2YXRlIHRhYjogTWF0VGFiLCBwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7XG4gICAgdGhpcy5wYXRoID0gTWVudUl0ZW1zLnBhcnNlUGF0aFdpdGhRdWVyeSh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpLnBhdGg7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLnRhYi5kaXNhYmxlZCkgdGhpcy5fYWRkSXRlbVRvTWVudSgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmRpc2FibGVkIHx8IGNoYW5nZXMubGFiZWwgfHwgY2hhbmdlcy5wYXJlbnRQYXRoKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5fbWVudUl0ZW0pIHRoaXMubWVudVNlcnZpY2UucmVtb3ZlU3ViTWVudUl0ZW0odGhpcy5fbWVudUl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fYWRkSXRlbVRvTWVudSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVNZW51SXRlbSgpOiBNZW51SXRlbSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYkdyb3VwLnNlbGVjdGVkSW5kZXggKyB0aGlzLnRhYi5wb3NpdGlvbjtcbiAgICBjb25zdCBwYXRoUGFyYW1zID0gaW5kZXggPT09IDAgPyB7fSA6IHsgdGFiOiBpbmRleC50b1N0cmluZygpIH07XG4gICAgY29uc3QgcGFyZW50UGF0aCA9IGluZGV4ID09PSAwID8gdGhpcy5wYXJlbnRQYXRoIDogdGhpcy5wYXRoO1xuICAgIHJldHVybiBNZW51SXRlbXMucHJlcGFyZUl0ZW0oe1xuICAgICAgdGl0bGU6IHRoaXMuc3ViTWVudVRpdGxlIHx8IHRoaXMubGFiZWwsXG4gICAgICBwYXJlbnRQYXRoLFxuICAgICAgaWNvbjogJ25vbmUnLFxuICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgcGF0aFBhcmFtcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2FkZEl0ZW1Ub01lbnUoKSB7XG4gICAgbGV0IG1lbnVJdGVtID0gdGhpcy5fY29tcHV0ZU1lbnVJdGVtKCk7XG4gICAgaWYgKHRoaXMuX21lbnVJdGVtKSB7XG4gICAgICBtZW51SXRlbS5pZCA9IHRoaXMuX21lbnVJdGVtLmlkO1xuICAgIH1cbiAgICBpZiAoIW1lbnVJdGVtLnBhcmVudFBhdGgpIHJldHVybjsgLy8gU2tpcCBpZiBubyBwYXJlbnRcblxuICAgIGlmIChpc05pbE9yQmxhbmsobWVudUl0ZW0udGl0bGUpKSByZXR1cm47IC8vIFNraXAgaWYgbm8gdGl0bGVcblxuICAgIG1lbnVJdGVtID0gYXdhaXQgdGhpcy5tZW51U2VydmljZS5hZGRTdWJNZW51SXRlbShtZW51SXRlbSwgeyBza2lwSWZFeGlzdHM6IGlzTmlsKG1lbnVJdGVtLmlkKSB9KTtcbiAgICB0aGlzLl9tZW51SXRlbSA9IG1lbnVJdGVtO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { Component, } from '@angular/core';
1
+ import { Component } from '@angular/core';
2
2
  import { MenuTestingPage } from './menu.testing';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/router";
@@ -14,6 +14,7 @@ export class OtherMenuTestingPage extends MenuTestingPage {
14
14
  router, navController, alertCtrl, translate, menuService) {
15
15
  super(route, router, navController, alertCtrl, translate, menuService);
16
16
  this.logPrefix = '[menu-testing-other] ';
17
+ this.showOtherLinks = false;
17
18
  }
18
19
  async initSubMenu() {
19
20
  const otherId = this.route.snapshot.paramMap.get('otherId');
@@ -27,9 +28,9 @@ export class OtherMenuTestingPage extends MenuTestingPage {
27
28
  }
28
29
  }
29
30
  OtherMenuTestingPage.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OtherMenuTestingPage, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.NavController }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: i4.MenuService }], target: i0.ɵɵFactoryTarget.Component });
30
- OtherMenuTestingPage.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OtherMenuTestingPage, selector: "app-testing-menu-other", usesInheritance: true, ngImport: i0, template: "<app-toolbar [defaultBackHref]=\"parentPath\">\n <ion-title>{{ title }}</ion-title>\n</app-toolbar>\n\n<ion-content>\n\n <mat-tab-group #tabGroup\n [(selectedIndex)]=\"selectedTabIndex\"\n (selectedTabChange)=\"onTabChange($event)\"\n dynamicHeight>\n\n <!-- TAB: 1 -->\n <mat-tab appSubMenuTab [subMenuTitle]=\"title\" [parentPath]=\"parentPath\" label=\"Details\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>Details</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>A first tab</p>\n\n <div class=\"ion-margin-vertical\">\n <ion-toggle #toggleThird>\n Toggle Third Tab\n </ion-toggle>\n </div>\n\n <div class=\"ion-margin-vertical\">\n <ion-button (click)=\"enableMenu(false)\" *ngIf=\"menuService.enabled|async\">\n Disable menu\n </ion-button>\n <ion-button (click)=\"enableMenu(true)\" *ngIf=\"!(menuService.enabled|async)\">\n Enable menu\n </ion-button>\n <ion-button (click)=\"toggleSplitPaneWhen()\"\n [disabled]=\"!(menuService.enabled|async)\">\n Toggle split pane\n </ion-button>\n </div>\n </div>\n\n </mat-tab>\n\n <!-- TAB: 2 -->\n <mat-tab appSubMenuTab [label]=\"secondTabTitle\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>{{secondTabTitle}}</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n A second tab<br/>\n\n <ng-container *ngIf=\"secondTabTitle=== 'Others'\">\n Navigate to : <a [routerLink]=\"childPath+'/1'\" >\n {{ childPath }}/1\n </a>\n <br/>\n Navigate to : <a [routerLink]=\"childPath+'/2'\" >\n {{ childPath }}/2\n </a>\n </ng-container>\n </div>\n\n </mat-tab>\n\n <!-- TAB: 3 -->\n <mat-tab appSubMenuTab [label]=\"thirdTabTitle\" class=\"ion-padding\" [disabled]=\"!toggleThird.checked\">\n <ng-template mat-tab-label>\n <ion-label>{{thirdTabTitle}}</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n A third tab\n </div>\n\n </mat-tab>\n </mat-tab-group>\n</ion-content>\n", styles: [".menu-item{padding-left:0 px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.SubMenuTabDirective, selector: "[appSubMenuTab]", inputs: ["label", "disabled", "parentPath", "path", "subMenuTitle"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToggle, selector: "ion-toggle", inputs: ["alignment", "checked", "color", "disabled", "enableOnOffLabels", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "directive", type: i2.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.RouterLinkWithHrefDelegate, selector: "a[routerLink],area[routerLink]", inputs: ["routerDirection", "routerAnimation"] }, { kind: "component", type: i7.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i7.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i7.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i8.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] });
31
+ OtherMenuTestingPage.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OtherMenuTestingPage, selector: "app-testing-menu-other", usesInheritance: true, ngImport: i0, template: "<app-toolbar [defaultBackHref]=\"parentPath\">\n <ion-title>{{ title }}</ion-title>\n</app-toolbar>\n\n<ion-content>\n\n <mat-tab-group #tabGroup\n [(selectedIndex)]=\"selectedTabIndex\"\n (selectedTabChange)=\"onTabChange($event)\"\n dynamicHeight>\n\n <!-- TAB: 1 -->\n <mat-tab appSubMenuTab [subMenuTitle]=\"title\" [parentPath]=\"parentPath\" label=\"Details\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>Details</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>A first tab</p>\n\n <p>\n <ion-toggle #toggleThird>\n Toggle Third Tab\n </ion-toggle>\n </p>\n\n <p>\n <ion-button (click)=\"enableMenu(false)\" *ngIf=\"menuService.enabled|async\">\n Disable menu\n </ion-button>\n <ion-button (click)=\"enableMenu(true)\" *ngIf=\"!(menuService.enabled|async)\">\n Enable menu\n </ion-button>\n <ion-button (click)=\"toggleSplitPaneWhen()\"\n [disabled]=\"!(menuService.enabled|async)\">\n Toggle split pane\n </ion-button>\n </p>\n </div>\n\n </mat-tab>\n\n <!-- TAB: 2 -->\n <mat-tab appSubMenuTab [label]=\"$secondTabTitle|async\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>{{$secondTabTitle|async}}</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>A second tab</p>\n\n <p *ngIf=\"showOtherLinks\">\n Navigate to : <a [routerLink]=\"childPath+'/1'\" >\n {{ childPath }}/1\n </a>\n <br/>\n Navigate to : <a [routerLink]=\"childPath+'/2'\" >\n {{ childPath }}/2\n </a>\n </p>\n\n <p>\n <ion-button (click)=\"secondTabTitle = secondTabTitle + '_'\">\n Change tab label\n </ion-button>\n </p>\n </div>\n\n </mat-tab>\n\n <!-- TAB: 3 -->\n <mat-tab appSubMenuTab [label]=\"thirdTabTitle\" class=\"ion-padding\" [disabled]=\"!toggleThird.checked\">\n <ng-template mat-tab-label>\n <ion-label>{{thirdTabTitle}}</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n A third tab\n </div>\n\n </mat-tab>\n </mat-tab-group>\n</ion-content>\n", styles: [".menu-item{padding-left:0 px}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.SubMenuTabDirective, selector: "[appSubMenuTab]", inputs: ["label", "disabled", "parentPath", "path", "subMenuTitle"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToggle, selector: "ion-toggle", inputs: ["alignment", "checked", "color", "disabled", "enableOnOffLabels", "justify", "labelPlacement", "legacy", "mode", "name", "value"] }, { kind: "directive", type: i2.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2.RouterLinkWithHrefDelegate, selector: "a[routerLink],area[routerLink]", inputs: ["routerDirection", "routerAnimation"] }, { kind: "component", type: i7.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i7.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i7.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i8.ToolbarComponent, selector: "app-toolbar", inputs: ["progressBarMode", "title", "color", "class", "backHref", "defaultBackHref", "hasValidate", "hasClose", "hasSearch", "canGoBack", "canShowMenu"], outputs: ["onValidate", "onClose", "onValidateAndClose", "onBackClick", "onSearch"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }] });
31
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OtherMenuTestingPage, decorators: [{
32
33
  type: Component,
33
- args: [{ selector: 'app-testing-menu-other', template: "<app-toolbar [defaultBackHref]=\"parentPath\">\n <ion-title>{{ title }}</ion-title>\n</app-toolbar>\n\n<ion-content>\n\n <mat-tab-group #tabGroup\n [(selectedIndex)]=\"selectedTabIndex\"\n (selectedTabChange)=\"onTabChange($event)\"\n dynamicHeight>\n\n <!-- TAB: 1 -->\n <mat-tab appSubMenuTab [subMenuTitle]=\"title\" [parentPath]=\"parentPath\" label=\"Details\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>Details</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>A first tab</p>\n\n <div class=\"ion-margin-vertical\">\n <ion-toggle #toggleThird>\n Toggle Third Tab\n </ion-toggle>\n </div>\n\n <div class=\"ion-margin-vertical\">\n <ion-button (click)=\"enableMenu(false)\" *ngIf=\"menuService.enabled|async\">\n Disable menu\n </ion-button>\n <ion-button (click)=\"enableMenu(true)\" *ngIf=\"!(menuService.enabled|async)\">\n Enable menu\n </ion-button>\n <ion-button (click)=\"toggleSplitPaneWhen()\"\n [disabled]=\"!(menuService.enabled|async)\">\n Toggle split pane\n </ion-button>\n </div>\n </div>\n\n </mat-tab>\n\n <!-- TAB: 2 -->\n <mat-tab appSubMenuTab [label]=\"secondTabTitle\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>{{secondTabTitle}}</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n A second tab<br/>\n\n <ng-container *ngIf=\"secondTabTitle=== 'Others'\">\n Navigate to : <a [routerLink]=\"childPath+'/1'\" >\n {{ childPath }}/1\n </a>\n <br/>\n Navigate to : <a [routerLink]=\"childPath+'/2'\" >\n {{ childPath }}/2\n </a>\n </ng-container>\n </div>\n\n </mat-tab>\n\n <!-- TAB: 3 -->\n <mat-tab appSubMenuTab [label]=\"thirdTabTitle\" class=\"ion-padding\" [disabled]=\"!toggleThird.checked\">\n <ng-template mat-tab-label>\n <ion-label>{{thirdTabTitle}}</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n A third tab\n </div>\n\n </mat-tab>\n </mat-tab-group>\n</ion-content>\n", styles: [".menu-item{padding-left:0 px}\n"] }]
34
+ args: [{ selector: 'app-testing-menu-other', template: "<app-toolbar [defaultBackHref]=\"parentPath\">\n <ion-title>{{ title }}</ion-title>\n</app-toolbar>\n\n<ion-content>\n\n <mat-tab-group #tabGroup\n [(selectedIndex)]=\"selectedTabIndex\"\n (selectedTabChange)=\"onTabChange($event)\"\n dynamicHeight>\n\n <!-- TAB: 1 -->\n <mat-tab appSubMenuTab [subMenuTitle]=\"title\" [parentPath]=\"parentPath\" label=\"Details\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>Details</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>A first tab</p>\n\n <p>\n <ion-toggle #toggleThird>\n Toggle Third Tab\n </ion-toggle>\n </p>\n\n <p>\n <ion-button (click)=\"enableMenu(false)\" *ngIf=\"menuService.enabled|async\">\n Disable menu\n </ion-button>\n <ion-button (click)=\"enableMenu(true)\" *ngIf=\"!(menuService.enabled|async)\">\n Enable menu\n </ion-button>\n <ion-button (click)=\"toggleSplitPaneWhen()\"\n [disabled]=\"!(menuService.enabled|async)\">\n Toggle split pane\n </ion-button>\n </p>\n </div>\n\n </mat-tab>\n\n <!-- TAB: 2 -->\n <mat-tab appSubMenuTab [label]=\"$secondTabTitle|async\" class=\"ion-padding\">\n <ng-template mat-tab-label>\n <ion-label>{{$secondTabTitle|async}}</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n <p>A second tab</p>\n\n <p *ngIf=\"showOtherLinks\">\n Navigate to : <a [routerLink]=\"childPath+'/1'\" >\n {{ childPath }}/1\n </a>\n <br/>\n Navigate to : <a [routerLink]=\"childPath+'/2'\" >\n {{ childPath }}/2\n </a>\n </p>\n\n <p>\n <ion-button (click)=\"secondTabTitle = secondTabTitle + '_'\">\n Change tab label\n </ion-button>\n </p>\n </div>\n\n </mat-tab>\n\n <!-- TAB: 3 -->\n <mat-tab appSubMenuTab [label]=\"thirdTabTitle\" class=\"ion-padding\" [disabled]=\"!toggleThird.checked\">\n <ng-template mat-tab-label>\n <ion-label>{{thirdTabTitle}}</ion-label>\n </ng-template>\n\n <div class=\"ion-padding\">\n A third tab\n </div>\n\n </mat-tab>\n </mat-tab-group>\n</ion-content>\n", styles: [".menu-item{padding-left:0 px}\n"] }]
34
35
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.NavController }, { type: i2.AlertController }, { type: i3.TranslateService }, { type: i4.MenuService }]; } });
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1vdGhlci50ZXN0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvdGVzdGluZy9tZW51LW90aGVyLnRlc3RpbmcudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS90ZXN0aW5nL21lbnUudGVzdGluZy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEdBQUUsTUFBTSxlQUFlLENBQUM7QUFNekMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBTy9DLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxlQUFlO0lBRXZELFlBQ0UsS0FBcUIsRUFBRSwyQkFBMkI7SUFDbEQsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLFNBQTBCLEVBQzFCLFNBQTJCLEVBQzNCLFdBQXdCO1FBRXhCLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxTQUFTLEdBQUcsdUJBQXVCLENBQUM7SUFDM0MsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksR0FBRyw4QkFBOEIsR0FBRyxPQUFPLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsNEJBQTRCLENBQUM7UUFDaEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGFBQWEsRUFBRSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7O2lIQXZCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixxRkNiakMsNndFQTZFQTsyRkRoRWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01lbnVTZXJ2aWNlfSBmcm9tICcuLi9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBbGVydENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lbnVJdGVtc30gZnJvbSAnLi4vbWVudS5tb2RlbCc7XG5pbXBvcnQge01lbnVUZXN0aW5nUGFnZX0gZnJvbSAnLi9tZW51LnRlc3RpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdGVzdGluZy1tZW51LW90aGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUudGVzdGluZy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS50ZXN0aW5nLnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgT3RoZXJNZW51VGVzdGluZ1BhZ2UgZXh0ZW5kcyBNZW51VGVzdGluZ1BhZ2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgLy8gTW9kYWwgZWRpdG9yIGdpdmUgJ251bGwnXG4gICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcixcbiAgICBhbGVydEN0cmw6IEFsZXJ0Q29udHJvbGxlcixcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIG5hdkNvbnRyb2xsZXIsIGFsZXJ0Q3RybCwgdHJhbnNsYXRlLCBtZW51U2VydmljZSk7XG4gICAgdGhpcy5sb2dQcmVmaXggPSAnW21lbnUtdGVzdGluZy1vdGhlcl0gJztcbiAgfVxuXG4gIGFzeW5jIGluaXRTdWJNZW51KCkge1xuICAgIGNvbnN0IG90aGVySWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtTWFwLmdldCgnb3RoZXJJZCcpO1xuICAgIHRoaXMudGl0bGUgPSAnT3RoZXInICsgb3RoZXJJZDtcbiAgICB0aGlzLnNlY29uZFRhYlRpdGxlID0gJ1NlY29uZCc7XG4gICAgdGhpcy5wYXJlbnRQYXRoID0gJy90ZXN0aW5nL3NoYXJlZC9tZW51P3RhYj0xJztcbiAgICB0aGlzLmNoaWxkUGF0aCA9ICcnO1xuICAgIGNvbnN0IHBhdGggPSAnL3Rlc3Rpbmcvc2hhcmVkL21lbnUvb3RoZXJzLycgKyBvdGhlcklkO1xuICAgIGNvbnN0IHBhcmVudFBhdGggPSAnL3Rlc3Rpbmcvc2hhcmVkL21lbnU/dGFiPTEnO1xuICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IFNldHVwIHdpdGhgLCB7cGF0aCwgcGFyZW50UGF0aH0pO1xuICB9XG5cbn1cbiIsIjxhcHAtdG9vbGJhciBbZGVmYXVsdEJhY2tIcmVmXT1cInBhcmVudFBhdGhcIj5cbiAgPGlvbi10aXRsZT57eyB0aXRsZSB9fTwvaW9uLXRpdGxlPlxuPC9hcHAtdG9vbGJhcj5cblxuPGlvbi1jb250ZW50PlxuXG4gIDxtYXQtdGFiLWdyb3VwICN0YWJHcm91cFxuICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkSW5kZXgpXT1cInNlbGVjdGVkVGFiSW5kZXhcIlxuICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRUYWJDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgIGR5bmFtaWNIZWlnaHQ+XG5cbiAgICA8IS0tIFRBQjogMSAtLT5cbiAgICA8bWF0LXRhYiBhcHBTdWJNZW51VGFiIFtzdWJNZW51VGl0bGVdPVwidGl0bGVcIiBbcGFyZW50UGF0aF09XCJwYXJlbnRQYXRoXCIgbGFiZWw9XCJEZXRhaWxzXCIgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgIDxpb24tbGFiZWw+RGV0YWlsczwvaW9uLWxhYmVsPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPGRpdiBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICAgIDxwPkEgZmlyc3QgdGFiPC9wPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpb24tbWFyZ2luLXZlcnRpY2FsXCI+XG4gICAgICAgICAgPGlvbi10b2dnbGUgI3RvZ2dsZVRoaXJkPlxuICAgICAgICAgICAgVG9nZ2xlIFRoaXJkIFRhYlxuICAgICAgICAgIDwvaW9uLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlvbi1tYXJnaW4tdmVydGljYWxcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZW5hYmxlTWVudShmYWxzZSlcIiAqbmdJZj1cIm1lbnVTZXJ2aWNlLmVuYWJsZWR8YXN5bmNcIj5cbiAgICAgICAgICAgIERpc2FibGUgbWVudVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiZW5hYmxlTWVudSh0cnVlKVwiICpuZ0lmPVwiIShtZW51U2VydmljZS5lbmFibGVkfGFzeW5jKVwiPlxuICAgICAgICAgICAgRW5hYmxlIG1lbnVcbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInRvZ2dsZVNwbGl0UGFuZVdoZW4oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEobWVudVNlcnZpY2UuZW5hYmxlZHxhc3luYylcIj5cbiAgICAgICAgICAgIFRvZ2dsZSBzcGxpdCBwYW5lXG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtdGFiPlxuXG4gICAgPCEtLSBUQUI6IDIgLS0+XG4gICAgPG1hdC10YWIgYXBwU3ViTWVudVRhYiBbbGFiZWxdPVwic2Vjb25kVGFiVGl0bGVcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgPGlvbi1sYWJlbD57e3NlY29uZFRhYlRpdGxlfX08L2lvbi1sYWJlbD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgICBBIHNlY29uZCB0YWI8YnIvPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWNvbmRUYWJUaXRsZT09PSAnT3RoZXJzJ1wiPlxuICAgICAgICAgIE5hdmlnYXRlIHRvIDogPGEgW3JvdXRlckxpbmtdPVwiY2hpbGRQYXRoKycvMSdcIiA+XG4gICAgICAgICAgICB7eyBjaGlsZFBhdGggfX0vMVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8YnIvPlxuICAgICAgICAgIE5hdmlnYXRlIHRvIDogPGEgW3JvdXRlckxpbmtdPVwiY2hpbGRQYXRoKycvMidcIiA+XG4gICAgICAgICAge3sgY2hpbGRQYXRoIH19LzJcbiAgICAgICAgPC9hPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtdGFiPlxuXG4gICAgPCEtLSBUQUI6IDMgLS0+XG4gICAgPG1hdC10YWIgYXBwU3ViTWVudVRhYiBbbGFiZWxdPVwidGhpcmRUYWJUaXRsZVwiIGNsYXNzPVwiaW9uLXBhZGRpbmdcIiBbZGlzYWJsZWRdPVwiIXRvZ2dsZVRoaXJkLmNoZWNrZWRcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICA8aW9uLWxhYmVsPnt7dGhpcmRUYWJUaXRsZX19PC9pb24tbGFiZWw+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgICAgQSB0aGlyZCB0YWJcbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtdGFiPlxuICA8L21hdC10YWItZ3JvdXA+XG48L2lvbi1jb250ZW50PlxuIl19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1vdGhlci50ZXN0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL21lbnUvdGVzdGluZy9tZW51LW90aGVyLnRlc3RpbmcudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvbWVudS90ZXN0aW5nL21lbnUudGVzdGluZy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBT2pELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxlQUFlO0lBQ3ZELFlBQ0UsS0FBcUIsRUFBRSwyQkFBMkI7SUFDbEQsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLFNBQTBCLEVBQzFCLFNBQTJCLEVBQzNCLFdBQXdCO1FBRXhCLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxTQUFTLEdBQUcsdUJBQXVCLENBQUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXO1FBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksR0FBRyw4QkFBOEIsR0FBRyxPQUFPLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQUcsNEJBQTRCLENBQUM7UUFDaEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7O2lIQXZCVSxvQkFBb0I7cUdBQXBCLG9CQUFvQixxRkNaakMseTFFQW1GQTsyRkR2RWEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWVudVNlcnZpY2UgfSBmcm9tICcuLi9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbGVydENvbnRyb2xsZXIsIE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNZW51VGVzdGluZ1BhZ2UgfSBmcm9tICcuL21lbnUudGVzdGluZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC10ZXN0aW5nLW1lbnUtb3RoZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS50ZXN0aW5nLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LnRlc3Rpbmcuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBPdGhlck1lbnVUZXN0aW5nUGFnZSBleHRlbmRzIE1lbnVUZXN0aW5nUGFnZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgLy8gTW9kYWwgZWRpdG9yIGdpdmUgJ251bGwnXG4gICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgbmF2Q29udHJvbGxlcjogTmF2Q29udHJvbGxlcixcbiAgICBhbGVydEN0cmw6IEFsZXJ0Q29udHJvbGxlcixcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIG5hdkNvbnRyb2xsZXIsIGFsZXJ0Q3RybCwgdHJhbnNsYXRlLCBtZW51U2VydmljZSk7XG4gICAgdGhpcy5sb2dQcmVmaXggPSAnW21lbnUtdGVzdGluZy1vdGhlcl0gJztcbiAgICB0aGlzLnNob3dPdGhlckxpbmtzID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyBpbml0U3ViTWVudSgpIHtcbiAgICBjb25zdCBvdGhlcklkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbU1hcC5nZXQoJ290aGVySWQnKTtcbiAgICB0aGlzLnRpdGxlID0gJ090aGVyJyArIG90aGVySWQ7XG4gICAgdGhpcy5zZWNvbmRUYWJUaXRsZSA9ICdTZWNvbmQnO1xuICAgIHRoaXMucGFyZW50UGF0aCA9ICcvdGVzdGluZy9zaGFyZWQvbWVudT90YWI9MSc7XG4gICAgdGhpcy5jaGlsZFBhdGggPSAnJztcbiAgICBjb25zdCBwYXRoID0gJy90ZXN0aW5nL3NoYXJlZC9tZW51L290aGVycy8nICsgb3RoZXJJZDtcbiAgICBjb25zdCBwYXJlbnRQYXRoID0gJy90ZXN0aW5nL3NoYXJlZC9tZW51P3RhYj0xJztcbiAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBTZXR1cCB3aXRoYCwgeyBwYXRoLCBwYXJlbnRQYXRoIH0pO1xuICB9XG59XG4iLCI8YXBwLXRvb2xiYXIgW2RlZmF1bHRCYWNrSHJlZl09XCJwYXJlbnRQYXRoXCI+XG4gIDxpb24tdGl0bGU+e3sgdGl0bGUgfX08L2lvbi10aXRsZT5cbjwvYXBwLXRvb2xiYXI+XG5cbjxpb24tY29udGVudD5cblxuICA8bWF0LXRhYi1ncm91cCAjdGFiR3JvdXBcbiAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZEluZGV4KV09XCJzZWxlY3RlZFRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgKHNlbGVjdGVkVGFiQ2hhbmdlKT1cIm9uVGFiQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICBkeW5hbWljSGVpZ2h0PlxuXG4gICAgPCEtLSBUQUI6IDEgLS0+XG4gICAgPG1hdC10YWIgYXBwU3ViTWVudVRhYiBbc3ViTWVudVRpdGxlXT1cInRpdGxlXCIgW3BhcmVudFBhdGhdPVwicGFyZW50UGF0aFwiIGxhYmVsPVwiRGV0YWlsc1wiIGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICA8aW9uLWxhYmVsPkRldGFpbHM8L2lvbi1sYWJlbD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgICA8cD5BIGZpcnN0IHRhYjwvcD5cblxuICAgICAgICA8cD5cbiAgICAgICAgICA8aW9uLXRvZ2dsZSAjdG9nZ2xlVGhpcmQ+XG4gICAgICAgICAgICBUb2dnbGUgVGhpcmQgVGFiXG4gICAgICAgICAgPC9pb24tdG9nZ2xlPlxuICAgICAgICA8L3A+XG5cbiAgICAgICAgPHA+XG4gICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImVuYWJsZU1lbnUoZmFsc2UpXCIgKm5nSWY9XCJtZW51U2VydmljZS5lbmFibGVkfGFzeW5jXCI+XG4gICAgICAgICAgICBEaXNhYmxlIG1lbnVcbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cImVuYWJsZU1lbnUodHJ1ZSlcIiAqbmdJZj1cIiEobWVudVNlcnZpY2UuZW5hYmxlZHxhc3luYylcIj5cbiAgICAgICAgICAgIEVuYWJsZSBtZW51XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVTcGxpdFBhbmVXaGVuKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKG1lbnVTZXJ2aWNlLmVuYWJsZWR8YXN5bmMpXCI+XG4gICAgICAgICAgICBUb2dnbGUgc3BsaXQgcGFuZVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L21hdC10YWI+XG5cbiAgICA8IS0tIFRBQjogMiAtLT5cbiAgICA8bWF0LXRhYiBhcHBTdWJNZW51VGFiIFtsYWJlbF09XCIkc2Vjb25kVGFiVGl0bGV8YXN5bmNcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gICAgICA8bmctdGVtcGxhdGUgbWF0LXRhYi1sYWJlbD5cbiAgICAgICAgPGlvbi1sYWJlbD57eyRzZWNvbmRUYWJUaXRsZXxhc3luY319PC9pb24tbGFiZWw+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgICAgICAgPHA+QSBzZWNvbmQgdGFiPC9wPlxuXG4gICAgICAgIDxwICpuZ0lmPVwic2hvd090aGVyTGlua3NcIj5cbiAgICAgICAgICBOYXZpZ2F0ZSB0byA6IDxhIFtyb3V0ZXJMaW5rXT1cImNoaWxkUGF0aCsnLzEnXCIgPlxuICAgICAgICAgICAge3sgY2hpbGRQYXRoIH19LzFcbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGJyLz5cbiAgICAgICAgICBOYXZpZ2F0ZSB0byA6IDxhIFtyb3V0ZXJMaW5rXT1cImNoaWxkUGF0aCsnLzInXCIgPlxuICAgICAgICAgICAge3sgY2hpbGRQYXRoIH19LzJcbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvcD5cblxuICAgICAgICA8cD5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwic2Vjb25kVGFiVGl0bGUgPSBzZWNvbmRUYWJUaXRsZSArICdfJ1wiPlxuICAgICAgICAgICAgQ2hhbmdlIHRhYiBsYWJlbFxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L21hdC10YWI+XG5cbiAgICA8IS0tIFRBQjogMyAtLT5cbiAgICA8bWF0LXRhYiBhcHBTdWJNZW51VGFiIFtsYWJlbF09XCJ0aGlyZFRhYlRpdGxlXCIgY2xhc3M9XCJpb24tcGFkZGluZ1wiIFtkaXNhYmxlZF09XCIhdG9nZ2xlVGhpcmQuY2hlY2tlZFwiPlxuICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgIDxpb24tbGFiZWw+e3t0aGlyZFRhYlRpdGxlfX08L2lvbi1sYWJlbD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJpb24tcGFkZGluZ1wiPlxuICAgICAgICBBIHRoaXJkIHRhYlxuICAgICAgPC9kaXY+XG5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=