UNPKG

@openexo/design-system

Version:
310 lines 35.7 kB
/** * @fileoverview added by tsickle * Generated from: lib/avatar/avatar.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; /** @enum {string} */ var SizeAvatarEnum = { xs: "xs", sm: "sm", lg: "lg", xl: "xl", }; /** @enum {string} */ var ShapeEnum = { circle: "circle", rect: "rect", }; /** * @record */ function Certificate() { } if (false) { /** @type {?} */ Certificate.prototype.code; /** @type {?} */ Certificate.prototype.name; /** @type {?|undefined} */ Certificate.prototype.humanizedCode; } /** @enum {string} */ var CertificateEnum = { FOUNDATION: "CFO", CONSULTANT: "CCO", SPRINT_COACH: "CSC", AMBASSADOR: "CEA", TRAINER: "CTR", BOARD_ADVISOR: "CBA", }; var ExOAvatarComponent = /** @class */ (function () { function ExOAvatarComponent() { /** * By default will use SizeAvatarEnum.sm * (xs (24px), sm(48px), lg(96px), xl(144px)) */ this.size = SizeAvatarEnum.sm; /** * Shape of the avatar. By default will be circle. */ this.shape = ShapeEnum.circle; /** * Position where the tooltip will show. By default is below. */ this.tooltipPosition = 'below'; /** * In other case, will emit an event and the parent will take the control (For example, to show a menu when click) */ this.onClick = new EventEmitter(); this.sizeAvatar = SizeAvatarEnum; // If we increase a new certificate, we need add the new size of stroke. this.valuesCertification = [ 100, 47, 30, 22, 18, 15, ]; } /** * Sizes defined in the profile_picture array. * @param size Must be xs, sm, lg, xl. If you need other, talk with design. */ /** * Sizes defined in the profile_picture array. * @param {?} size Must be xs, sm, lg, xl. If you need other, talk with design. * @return {?} */ ExOAvatarComponent.parseSizeToNumber = /** * Sizes defined in the profile_picture array. * @param {?} size Must be xs, sm, lg, xl. If you need other, talk with design. * @return {?} */ function (size) { switch (size) { case SizeAvatarEnum.xs: return 24; case SizeAvatarEnum.sm: return 48; case SizeAvatarEnum.lg: return 96; case SizeAvatarEnum.xl: return 144; } }; Object.defineProperty(ExOAvatarComponent.prototype, "imageUrl", { get: /** * @return {?} */ function () { if (this.src) { return this.src; } if (this.item && this.item.profilePictures) { return this.buildPicture(this.item.profilePictures); } return undefined; }, enumerable: true, configurable: true }); /** * @param {?} profilePictures * @return {?} */ ExOAvatarComponent.prototype.buildPicture = /** * @param {?} profilePictures * @return {?} */ function (profilePictures) { var _this = this; /** @type {?} */ var picture = profilePictures.find((/** * @param {?} pic * @return {?} */ function (pic) { return pic.width === ExOAvatarComponent.parseSizeToNumber(_this.size); })); return picture ? picture.url : undefined; }; Object.defineProperty(ExOAvatarComponent.prototype, "imageAlt", { get: /** * @return {?} */ function () { if (this.alt) { return this.alt; } if (this.item) { this.buildNameItem(this.item); } return 'Avatar'; }, enumerable: true, configurable: true }); /** * Return name, fullName or shortName(in that order) from items to use in the Alt attr from image and the tooltips. */ /** * Return name, fullName or shortName(in that order) from items to use in the Alt attr from image and the tooltips. * @param {?} item * @return {?} */ ExOAvatarComponent.prototype.buildNameItem = /** * Return name, fullName or shortName(in that order) from items to use in the Alt attr from image and the tooltips. * @param {?} item * @return {?} */ function (item) { if (item.name) { return this.item.name; } if (item.fullName) { return this.item.fullName; } if (item.shortName) { return this.item.shortName; } }; Object.defineProperty(ExOAvatarComponent.prototype, "imageTooltip", { get: /** * @return {?} */ function () { if (this.tooltip) { return this.tooltip; } if (this.item) { this.buildNameItem(this.item); } return undefined; }, enumerable: true, configurable: true }); Object.defineProperty(ExOAvatarComponent.prototype, "certificateTooltip", { get: /** * @return {?} */ function () { if (this.certificates && this.certificates.length > 0) { return this.certificates.map((/** * @param {?} certificate * @return {?} */ function (certificate) { if (certificate.name) { return "" + certificate.name; } if (certificate.humanizedCode) { return "" + certificate.humanizedCode; } })).join('\n'); } }, enumerable: true, configurable: true }); /** * @return {?} */ ExOAvatarComponent.prototype.click = /** * @return {?} */ function () { this.onClick.emit(true); }; ExOAvatarComponent.decorators = [ { type: Component, args: [{ selector: 'exo-avatar', template: "<div *ngIf=\"!imageSet\">\n <figure *ngIf=\"imageUrl; else icon\"\n (click)=\"click()\"\n class=\"avatar__figure\"\n [ngClass]=\"['exo-image-' + size]\"\n >\n <img [src]=\"imageUrl\"\n [matTooltip]=\"imageTooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n [ngStyle]=\"{width: customizedSize?.width, height: customizedSize?.height}\"\n [ngClass]=\"['exo-image', 'exo-image-' + size, 'exo-image-shape-' + shape]\"\n [alt]=\"imageAlt\"\n >\n </figure>\n</div>\n<ng-template #icon>\n <div>\n <mat-icon [ngClass]=\"['icon', 'icon-size-' + size]\"\n (click)=\"click()\"\n [matTooltip]=\"imageTooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n >account_circle</mat-icon>\n </div>\n</ng-template>\n\n<div class=\"certificates\" *ngIf=\"certificates\">\n <ng-container [ngSwitch]=\"size\">\n <div *ngSwitchCase=\"sizeAvatar.sm\">\n <ng-container [ngTemplateOutlet]=\"certificateTpl\" [ngTemplateOutletContext]=\"{class: 'medium-avatar', diameter: 56, stroke: 2}\"></ng-container>\n </div>\n <div *ngSwitchCase=\"sizeAvatar.lg\">\n <ng-container [ngTemplateOutlet]=\"certificateTpl\" [ngTemplateOutletContext]=\"{class: 'big-avatar', diameter: 108, stroke: 3}\"></ng-container>\n </div>\n </ng-container>\n</div>\n\n<ng-template #certificateTpl let-class=\"class\" let-diameter=\"diameter\" let-stroke=\"stroke\">\n <div [ngClass]=\"class\" [matTooltip]=\"certificateTooltip\" matTooltipClass=\"line-breaker\">\n <mat-progress-spinner\n *ngFor=\"let certificate of certificates; let i=index;\"\n [diameter]=\"diameter\"\n [strokeWidth]=\"stroke\"\n [value]=\"valuesCertification[certificates.length - 1]\"\n [ngClass]=\"['certificate-' + i, certificate.code, 'number-certificates-' + certificates.length]\"\n ></mat-progress-spinner>\n </div>\n</ng-template>\n\n<div *ngIf=\"imageSet\" class=\"images-set\">\n <div class=\"avatars\">\n <span *ngIf=\"maxSetShowed < imageSet.length\" class=\"avatar remain\">\n <span class=\"number\">\n {{imageSet.length - maxSetShowed}}+\n </span>\n </span>\n <ng-container *ngFor=\"let item of imageSet; let i = index\">\n <span class=\"avatar\" *ngIf=\"i < maxSetShowed\">\n <figure *ngIf=\"item.src; else icon\" class=\"avatar__figure\">\n <img [src]=\"item.src\"\n [matTooltip]=\"item.tooltip\"\n [matTooltipPosition]=\"tooltipPosition\"\n [ngStyle]=\"{width: customizedSize?.width, height: customizedSize?.height}\"\n [ngClass]=\"['exo-image', 'exo-image-' + size, 'exo-image-shape-' + shape]\"\n >\n </figure>\n </span>\n </ng-container>\n </div>\n</div>\n", changeDetection: ChangeDetectionStrategy.OnPush, styles: [".certificates .medium-avatar{margin-top:-52px;margin-left:-4px;width:56px;height:56px}.certificates .medium-avatar ::ng-deep circle{stroke-linecap:round}.certificates .medium-avatar ::ng-deep .CCO circle{stroke:#6ae5d5}.certificates .medium-avatar ::ng-deep .CEA circle{stroke:#ffb05c}.certificates .medium-avatar ::ng-deep .CSC circle{stroke:#0094d4}.certificates .medium-avatar ::ng-deep .CFO circle{stroke:#46464b}.certificates .medium-avatar ::ng-deep .CTR circle{stroke:#002e58}.certificates .medium-avatar ::ng-deep .CBA circle{stroke:#6f23ff}.certificates .medium-avatar ::ng-deep.number-certificates-0.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-1.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-1.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-1.certificate-1 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-1 circle{transform:rotate(186deg)}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-2.certificate-2 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-1 circle{transform:rotate(126deg)}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-2 circle{transform:rotate(246deg)}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-3 svg{margin-top:-168px!important}.certificates .medium-avatar ::ng-deep.number-certificates-3.certificate-3 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-1 circle{transform:rotate(96deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-2 circle{transform:rotate(186deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-3 svg{margin-top:-168px!important}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-3 circle{transform:rotate(276deg)}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-4 svg{margin-top:-224px!important}.certificates .medium-avatar ::ng-deep.number-certificates-4.certificate-4 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-1 circle{transform:rotate(78deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-2 circle{transform:rotate(150deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-3 svg{margin-top:-168px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-3 circle{transform:rotate(222deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-4 svg{margin-top:-224px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-4 circle{transform:rotate(294deg)}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-5 svg{margin-top:-280px!important}.certificates .medium-avatar ::ng-deep.number-certificates-5.certificate-5 circle{transform:rotate(366deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-0 circle{transform:rotate(6deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-1 svg{margin-top:-56px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-1 circle{transform:rotate(66deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-2 svg{margin-top:-112px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-2 circle{transform:rotate(126deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-3 svg{margin-top:-168px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-3 circle{transform:rotate(186deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-4 svg{margin-top:-224px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-4 circle{transform:rotate(246deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-5 svg{margin-top:-280px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-5 circle{transform:rotate(306deg)}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-6 svg{margin-top:-336px!important}.certificates .medium-avatar ::ng-deep.number-certificates-6.certificate-6 circle{transform:rotate(366deg)}.certificates .big-avatar{margin-top:-102px;margin-left:-6px;width:108px;height:108px}.certificates .big-avatar ::ng-deep circle{stroke-linecap:round}.certificates .big-avatar ::ng-deep .CCO circle{stroke:#6ae5d5}.certificates .big-avatar ::ng-deep .CEA circle{stroke:#ffb05c}.certificates .big-avatar ::ng-deep .CSC circle{stroke:#0094d4}.certificates .big-avatar ::ng-deep .CFO circle{stroke:#46464b}.certificates .big-avatar ::ng-deep .CTR circle{stroke:#002e58}.certificates .big-avatar ::ng-deep .CBA circle{stroke:#6f23ff}.certificates .big-avatar ::ng-deep.number-certificates-0.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-1.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-1.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-1.certificate-1 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-1 circle{transform:rotate(186deg)}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-2.certificate-2 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-1 circle{transform:rotate(126deg)}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-2 circle{transform:rotate(246deg)}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-3 svg{margin-top:-324px!important}.certificates .big-avatar ::ng-deep.number-certificates-3.certificate-3 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-1 circle{transform:rotate(96deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-2 circle{transform:rotate(186deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-3 svg{margin-top:-324px!important}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-3 circle{transform:rotate(276deg)}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-4 svg{margin-top:-432px!important}.certificates .big-avatar ::ng-deep.number-certificates-4.certificate-4 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-1 circle{transform:rotate(78deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-2 circle{transform:rotate(150deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-3 svg{margin-top:-324px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-3 circle{transform:rotate(222deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-4 svg{margin-top:-432px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-4 circle{transform:rotate(294deg)}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-5 svg{margin-top:-540px!important}.certificates .big-avatar ::ng-deep.number-certificates-5.certificate-5 circle{transform:rotate(366deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-0 circle{transform:rotate(6deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-1 svg{margin-top:-108px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-1 circle{transform:rotate(66deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-2 svg{margin-top:-216px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-2 circle{transform:rotate(126deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-3 svg{margin-top:-324px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-3 circle{transform:rotate(186deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-4 svg{margin-top:-432px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-4 circle{transform:rotate(246deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-5 svg{margin-top:-540px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-5 circle{transform:rotate(306deg)}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-6 svg{margin-top:-648px!important}.certificates .big-avatar ::ng-deep.number-certificates-6.certificate-6 circle{transform:rotate(366deg)}.images-set .avatars{display:inline-flex;flex-direction:row-reverse;margin:0 0 16px 16px}.images-set .avatars .avatar{margin-left:-16px;position:relative;border:1px solid #fff;border-radius:50%;overflow:hidden;width:48px;height:48px}.images-set .avatars .avatar.remain{background-color:#3a1090;color:#fff}.images-set .avatars .avatar.remain .number{flex-direction:column;display:flex;place-content:center;align-items:center;height:100%}"] }] } ]; ExOAvatarComponent.propDecorators = { maxSetShowed: [{ type: Input }], imageSet: [{ type: Input }], src: [{ type: Input }], alt: [{ type: Input }], customizedSize: [{ type: Input }], size: [{ type: Input }], shape: [{ type: Input }], item: [{ type: Input }], tooltip: [{ type: Input }], tooltipPosition: [{ type: Input }], certificates: [{ type: Input }], onClick: [{ type: Output }] }; return ExOAvatarComponent; }()); export { ExOAvatarComponent }; if (false) { /** * Number that set the maximum of shown avatars * @type {?} */ ExOAvatarComponent.prototype.maxSetShowed; /** * Custom array to load. * You need to pass a tuple [{src, tooltip}] in array * @type {?} */ ExOAvatarComponent.prototype.imageSet; /** * Custom src to load. * If you send the user, will take from the user.profilePictures array with * the size defined on the input size. * @type {?} */ ExOAvatarComponent.prototype.src; /** * If you want add a custom alt to image. If you send the user, will take user.fullName by default. * @type {?} */ ExOAvatarComponent.prototype.alt; /** * The component has defined 4 sizes by default (xs (24px), sm(48px), lg(96px), xl(144px)), but if you need * other sizes you can send as { width: '40px', height: '40px'} and will overwrite the default sizes. * @type {?} */ ExOAvatarComponent.prototype.customizedSize; /** * By default will use SizeAvatarEnum.sm * (xs (24px), sm(48px), lg(96px), xl(144px)) * @type {?} */ ExOAvatarComponent.prototype.size; /** * Shape of the avatar. By default will be circle. * @type {?} */ ExOAvatarComponent.prototype.shape; /** * Item can be a user or group, etc... If you send a item, you will get the info from alt, src, etc from the item. * @type {?} */ ExOAvatarComponent.prototype.item; /** * Show tooltip in the image, if you send user will take the user.fullName by default. * @type {?} */ ExOAvatarComponent.prototype.tooltip; /** * Position where the tooltip will show. By default is below. * @type {?} */ ExOAvatarComponent.prototype.tooltipPosition; /** * Certificates only will work with the standards sizes, so this input can't combine with customizedSize. * In the same way, only will work with the default shape (circle). * @type {?} */ ExOAvatarComponent.prototype.certificates; /** * In other case, will emit an event and the parent will take the control (For example, to show a menu when click) * @type {?} */ ExOAvatarComponent.prototype.onClick; /** @type {?} */ ExOAvatarComponent.prototype.sizeAvatar; /** @type {?} */ ExOAvatarComponent.prototype.valuesCertification; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BvcGVuZXhvL2Rlc2lnbi1zeXN0ZW0vIiwic291cmNlcyI6WyJsaWIvYXZhdGFyL2F2YXRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU1oRyxJQUFLLGNBQWM7SUFDakIsRUFBRSxNQUFPO0lBQ1QsRUFBRSxNQUFPO0lBQ1QsRUFBRSxNQUFPO0lBQ1QsRUFBRSxNQUFPO0VBQ1Y7O0FBRUQsSUFBSyxTQUFTO0lBQ1osTUFBTSxVQUFXO0lBQ2pCLElBQUksUUFBUztFQUNkOzs7O0FBRUQsMEJBSUM7OztJQUhDLDJCQUFzQjs7SUFDdEIsMkJBQWE7O0lBQ2Isb0NBQXVCOzs7QUFHekIsSUFBSyxlQUFlO0lBQ2xCLFVBQVUsT0FBUTtJQUNsQixVQUFVLE9BQVE7SUFDbEIsWUFBWSxPQUFRO0lBQ3BCLFVBQVUsT0FBUTtJQUNsQixPQUFPLE9BQVE7SUFDZixhQUFhLE9BQVE7RUFDdEI7QUFFRDtJQUFBOzs7OztRQStDRSxTQUFJLEdBQWUsY0FBYyxDQUFDLEVBQUUsQ0FBQzs7OztRQU1yQyxVQUFLLEdBQWMsU0FBUyxDQUFDLE1BQU0sQ0FBQzs7OztRQWtCcEMsb0JBQWUsR0FBb0IsT0FBTyxDQUFDOzs7O1FBYTNDLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXRDLGVBQVUsR0FBRyxjQUFjLENBQUM7O1FBRTVCLHdCQUFtQixHQUFHO1lBQ3BCLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtTQUN4QixDQUFDO0lBaUdKLENBQUM7SUEvRkM7OztPQUdHOzs7Ozs7SUFDSSxvQ0FBaUI7Ozs7O0lBQXhCLFVBQXlCLElBQWdCO1FBQ3ZDLFFBQVEs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QUMsSUFBSSxDQUFDLENBQUM7YUFDZjtRQUNILENBQUM7OztPQUFBOzs7O0lBRUQsa0NBQUs7OztJQUFMO1FBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQzs7Z0JBekxGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsMnhGQUFzQztvQkFFdEMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2lCQUNoRDs7OytCQU1FLEtBQUs7MkJBT0wsS0FBSztzQkFRTCxLQUFLO3NCQU1MLEtBQUs7aUNBT0wsS0FBSzt1QkFPTCxLQUFLO3dCQU1MLEtBQUs7dUJBTUwsS0FBSzswQkFNTCxLQUFLO2tDQU1MLEtBQUs7K0JBT0wsS0FBSzswQkFNTCxNQUFNOztJQXdHVCx5QkFBQztDQUFBLEFBM0xELElBMkxDO1NBckxZLGtCQUFrQjs7Ozs7O0lBSzdCLDBDQUNxQjs7Ozs7O0lBTXJCLHNDQUMyQzs7Ozs7OztJQU8zQyxpQ0FDWTs7Ozs7SUFLWixpQ0FDWTs7Ozs7O0lBTVosNENBQ2tEOzs7Ozs7SUFNbEQsa0NBQ3FDOzs7OztJQUtyQyxtQ0FDb0M7Ozs7O0lBS3BDLGtDQUNVOzs7OztJQUtWLHFDQUNnQjs7Ozs7SUFLaEIsNkNBQzJDOzs7Ozs7SUFNM0MsMENBQzRCOzs7OztJQUs1QixxQ0FDc0M7O0lBRXRDLHdDQUE0Qjs7SUFFNUIsaURBRUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxudHlwZSBTaXplQXZhdGFyID0gJ3hzJyB8ICAnc20nIHwgJ2xnJyB8ICd4bCc7XG50eXBlIFNoYXBlVHlwZSA9ICdjaXJjbGUnIHwgJ3JlY3QnO1xudHlwZSBUb29sdGlwUG9zaXRpb24gPSAnbGVmdCcgfCAncmlnaHQnIHwgJ2Fib3ZlJyB8ICdiZWxvdycgfCAnYmVmb3JlJyB8ICdhZnRlcic7XG5cbmVudW0gU2l6ZUF2YXRhckVudW0ge1xuICB4cyA9ICd4cycsXG4gIHNtID0gJ3NtJyxcbiAgbGcgPSAnbGcnLFxuICB4bCA9ICd4bCcsXG59XG5cbmVudW0gU2hhcGVFbnVtIHtcbiAgY2lyY2xlID0gJ2NpcmNsZScsXG4gIHJlY3QgPSAncmVjdCcsXG59XG5cbmludGVyZmFjZSBDZXJ0aWZpY2F0ZSB7XG4gIGNvZGU6IENlcnRpZmljYXRlRW51bTtcbiAgbmFtZTogc3RyaW5nO1xuICBodW1hbml6ZWRDb2RlPzogc3RyaW5nOyAvLyBSZXZpZXcgd2l0aCBBbmEgZGlmZmVyZW5jZSB3aXRoIG5hbWVcbn1cblxuZW51bSBDZXJ0aWZpY2F0ZUVudW0ge1xuICBGT1VOREFUSU9OID0gJ0NGTycsXG4gIENPTlNVTFRBTlQgPSAnQ0NPJyxcbiAgU1BSSU5UX0NPQUNIID0gJ0NTQycsXG4gIEFNQkFTU0FET1IgPSAnQ0VBJyxcbiAgVFJBSU5FUiA9ICdDVFInLFxuICBCT0FSRF9BRFZJU09SID0gJ0NCQScsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2V4by1hdmF0YXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXZhdGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXZhdGFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFeE9BdmF0YXJDb21wb25lbnQge1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgdGhhdCBzZXQgdGhlIG1heGltdW0gb2Ygc2hvd24gYXZhdGFyc1xuICAgKi9cbiAgQElucHV0KClcbiAgbWF4U2V0U2hvd2VkOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBhcnJheSB0byBsb2FkLlxuICAgKiBZb3UgbmVlZCB0byBwYXNzIGEgdHVwbGUgW3tzcmMsIHRvb2x0aXB9XSBpbiBhcnJheVxuICAgKi9cbiAgQElucHV0KClcbiAgaW1hZ2VTZXQ6IHtzcmM6IHN0cmluZywgdG9vbHRpcDogc3RyaW5nfVtdO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gc3JjIHRvIGxvYWQuXG4gICAqIElmIHlvdSBzZW5kIHRoZSB1c2VyLCB3aWxsIHRha2UgZnJvbSB0aGUgdXNlci5wcm9maWxlUGljdHVyZXMgYXJyYXkgd2l0aFxuICAgKiB0aGUgc2l6ZSBkZWZpbmVkIG9uIHRoZSBpbnB1dCBzaXplLlxuICAgKi9cbiAgQElucHV0KClcbiAgc3JjOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHlvdSB3YW50IGFkZCBhIGN1c3RvbSBhbHQgdG8gaW1hZ2UuIElmIHlvdSBzZW5kIHRoZSB1c2VyLCB3aWxsIHRha2UgdXNlci5mdWxsTmFtZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KClcbiAgYWx0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgaGFzIGRlZmluZWQgNCBzaXplcyBieSBkZWZhdWx0ICh4cyAoMjRweCksIHNtKDQ4cHgpLCBsZyg5NnB4KSwgeGwoMTQ0cHgpKSwgYnV0IGlmIHlvdSBuZWVkXG4gICAqIG90aGVyIHNpemVzIHlvdSBjYW4gc2VuZCBhcyB7IHdpZHRoOiAnNDBweCcsIGhlaWdodDogJzQwcHgnfSBhbmQgd2lsbCBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgc2l6ZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBjdXN0b21pemVkU2l6ZTogeyB3aWR0aDogc3RyaW5nOyBoZWlnaHQ6IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHdpbGwgdXNlIFNpemVBdmF0YXJFbnVtLnNtXG4gICAqICh4cyAoMjRweCksIHNtKDQ4cHgpLCBsZyg5NnB4KSwgeGwoMTQ0cHgpKVxuICAgKi9cbiAgQElucHV0KClcbiAgc2l6ZTogU2l6ZUF2YXRhciA9IFNpemVBdmF0YXJFbnVtLnNtO1xuXG4gIC8qKlxuICAgKiBTaGFwZSBvZiB0aGUgYXZhdGFyLiBCeSBkZWZhdWx0IHdpbGwgYmUgY2lyY2xlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc2hhcGU6IFNoYXBlVHlwZSA9IFNoYXBlRW51bS5jaXJjbGU7XG5cbiAgLyoqXG4gICAqIEl0ZW0gY2FuIGJlIGEgdXNlciBvciBncm91cCwgZXRjLi4uIElmIHlvdSBzZW5kIGEgaXRlbSwgeW91IHdpbGwgZ2V0IHRoZSBpbmZvIGZyb20gYWx0LCBzcmMsIGV0YyBmcm9tIHRoZSBpdGVtLlxuICAgKi9cbiAgQElucHV0KClcbiAgaXRlbTogYW55O1xuXG4gIC8qKlxuICAgKiBTaG93IHRvb2x0aXAgaW4gdGhlIGltYWdlLCBpZiB5b3Ugc2VuZCB1c2VyIHdpbGwgdGFrZSB0aGUgdXNlci5mdWxsTmFtZSBieSBkZWZhdWx0LlxuICAgKi9cbiAgQElucHV0KClcbiAgdG9vbHRpcDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQb3NpdGlvbiB3aGVyZSB0aGUgdG9vbHRpcCB3aWxsIHNob3cuIEJ5IGRlZmF1bHQgaXMgYmVsb3cuXG4gICAqL1xuICBASW5wdXQoKVxuICB0b29sdGlwUG9zaXRpb246IFRvb2x0aXBQb3NpdGlvbiA9ICdiZWxvdyc7XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlcyBvbmx5IHdpbGwgd29yayB3aXRoIHRoZSBzdGFuZGFyZHMgc2l6ZXMsIHNvIHRoaXMgaW5wdXQgY2FuJ3QgY29tYmluZSB3aXRoIGN1c3RvbWl6ZWRTaXplLlxuICAgKiBJbiB0aGUgc2FtZSB3YXksIG9ubHkgd2lsbCB3b3JrIHdpdGggdGhlIGRlZmF1bHQgc2hhcGUgKGNpcmNsZSkuXG4gICAqL1xuICBASW5wdXQoKVxuICBjZXJ0aWZpY2F0ZXM6IENlcnRpZmljYXRlW107XG5cbiAgLyoqXG4gICAqIEluIG90aGVyIGNhc2UsIHdpbGwgZW1pdCBhbiBldmVudCBhbmQgdGhlIHBhcmVudCB3aWxsIHRha2UgdGhlIGNvbnRyb2wgKEZvciBleGFtcGxlLCB0byBzaG93IGEgbWVudSB3aGVuIGNsaWNrKVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgc2l6ZUF2YXRhciA9IFNpemVBdmF0YXJFbnVtO1xuICAvLyBJZiB3ZSBpbmNyZWFzZSBhIG5ldyBjZXJ0aWZpY2F0ZSwgd2UgbmVlZCBhZGQgdGhlIG5ldyBzaXplIG9mIHN0cm9rZS5cbiAgdmFsdWVzQ2VydGlmaWNhdGlvbiA9IFtcbiAgICAxMDAsIDQ3LCAzMCwgMjIsIDE4LCAxNSxcbiAgXTtcblxuICAvKipcbiAgICogU2l6ZXMgZGVmaW5lZCBpbiB0aGUgcHJvZmlsZV9waWN0dXJlIGFycmF5LlxuICAgKiBAcGFyYW0gc2l6ZSBNdXN0IGJlIHhzLCBzbSwgbGcsIHhsLiBJZiB5b3UgbmVlZCBvdGhlciwgdGFsayB3aXRoIGRlc2lnbi5cbiAgICovXG4gIHN0YXRpYyBwYXJzZVNpemVUb051bWJlcihzaXplOiBTaXplQXZhdGFyKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKHNpemUpIHtcbiAgICAgIGNhc2UgU2l6ZUF2YXRhckVudW0ueHM6XG4gICAgICAgIHJldHVybiAyNDtcbiAgICAgIGNhc2UgU2l6ZUF2YXRhckVudW0uc206XG4gICAgICAgIHJldHVybiA0ODtcbiAgICAgIGNhc2UgU2l6ZUF2YXRhckVudW0ubGc6XG4gICAgICAgIHJldHVybiA5NjtcbiAgICAgIGNhc2UgU2l6ZUF2YXRhckVudW0ueGw6XG4gICAgICAgIHJldHVybiAxNDQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGltYWdlVXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuc3JjKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXRlbSAmJiB0aGlzLml0ZW0ucHJvZmlsZVBpY3R1cmVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZFBpY3R1cmUodGhpcy5pdGVtLnByb2ZpbGVQaWN0dXJlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGJ1aWxkUGljdHVyZShwcm9maWxlUGljdHVyZXMpIHtcbiAgICBjb25zdCBwaWN0dXJlID0gcHJvZmlsZVBpY3R1cmVzLmZpbmQoXG4gICAgICBwaWMgPT4gcGljLndpZHRoID09PSBFeE9BdmF0YXJDb21wb25lbnQucGFyc2VTaXplVG9OdW1iZXIodGhpcy5zaXplKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHBpY3R1cmUgPyBwaWN0dXJlLnVybCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBpbWFnZUFsdCgpIHtcbiAgICBpZiAodGhpcy5hbHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmFsdDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pdGVtKSB7XG4gICAgICB0aGlzLmJ1aWxkTmFtZUl0ZW0odGhpcy5pdGVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ0F2YXRhcic7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIG5hbWUsIGZ1bGxOYW1lIG9yIHNob3J0TmFtZShpbiB0aGF0IG9yZGVyKSBmcm9tIGl0ZW1zIHRvIHVzZSBpbiB0aGUgQWx0IGF0dHIgZnJvbSBpbWFnZSBhbmQgdGhlIHRvb2x0aXBzLlxuICAgKi9cbiAgYnVpbGROYW1lSXRlbShpdGVtKSB7XG4gICAgaWYgKGl0ZW0ubmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbS5uYW1lO1xuICAgIH1cblxuICAgIGlmIChpdGVtLmZ1bGxOYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5pdGVtLmZ1bGxOYW1lO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnNob3J0TmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbS5zaG9ydE5hbWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGltYWdlVG9vbHRpcCgpIHtcbiAgICBpZiAodGhpcy50b29sdGlwKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sdGlwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLml0ZW0pIHtcbiAgICAgIHRoaXMuYnVpbGROYW1lSXRlbSh0aGlzLml0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgY2VydGlmaWNhdGVUb29sdGlwKCkge1xuICAgIGlmICh0aGlzLmNlcnRpZmljYXRlcyAmJiB0aGlzLmNlcnRpZmljYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZXJ0aWZpY2F0ZXMubWFwKChjZXJ0aWZpY2F0ZTogQ2VydGlmaWNhdGUpID0+IHtcbiAgICAgICAgaWYgKGNlcnRpZmljYXRlLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gYCR7Y2VydGlmaWNhdGUubmFtZX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZXJ0aWZpY2F0ZS5odW1hbml6ZWRDb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIGAke2NlcnRpZmljYXRlLmh1bWFuaXplZENvZGV9YDtcbiAgICAgICAgfVxuICAgICAgfSkuam9pbignXFxuJyk7XG4gICAgfVxuICB9XG5cbiAgY2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkNsaWNrLmVtaXQodHJ1ZSk7XG4gIH1cblxufVxuIl19