UNPKG

ng-yunzai-mobile

Version:

1. 修改wechat.micro.ts

530 lines 46.2 kB
/** * @fileoverview added by tsickle * Generated from: select-contacts/yz-role-select-contacts/yz-role-select-contacts.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Inject } from '@angular/core'; import { ModalService } from "ng-zorro-antd-mobile"; import { MAT_DIALOG_DATA, MatDialogRef } from "@angular/material/dialog"; import { YzSelectContactsService } from "../yz-select-contacts/yz-select-contacts.service"; import { YzRoleSelectContactsService } from "./yz-role-select-contacts.service"; import { ComponentOption } from "./groupRole.interface"; export class YzRoleSelectContactsComponent { /** * @param {?} dialogRef * @param {?} _modal * @param {?} yzContactsService * @param {?} yzRoleContactsService * @param {?} data */ constructor(dialogRef, _modal, yzContactsService, yzRoleContactsService, data) { this.dialogRef = dialogRef; this._modal = _modal; this.yzContactsService = yzContactsService; this.yzRoleContactsService = yzRoleContactsService; this.data = data; this.modalRefCpt = []; this.subscribed = []; this.dtPullToRefreshStyle = { height: window.innerHeight - 44 - 51 - 44 + 'px' }; // 总角色组数据 this.roleNodes = []; // 页面展示的角色组数据 this.groupRoleList = []; // 当前角色 this.currentRole = []; // 页面加载中 this.pageLoading = false; // 人员列表参数 this.baseUserParams = { total: 0, pageSize: 20, pageNum: 1, realName: null }; // 人员数据 this.baseUserList = []; // 是否全选人员 this.allUserCheck = false; // 已选择的联系人 this.selectedContacts = []; } /** * @return {?} */ ngOnInit() { this.initGroupRole(); } // 查询角色组 /** * @return {?} */ initGroupRole() { this.groupRoleList = []; this.roleNodes = []; this.pageLoading = true; /** @type {?} */ const $temp = this.yzRoleContactsService.getGroupRole(this.data.roleGroupCode).subscribe((/** * @param {?} role * @return {?} */ (role) => { this.pageLoading = false; this.roleNodes = role; this.roleNodes.forEach((/** * @param {?} item * @return {?} */ (item) => { /** @type {?} */ const obj = { value: item.key, label: item.title, children: [] }; if (item.children && item.children.length > 0) { item.children.forEach((/** * @param {?} role * @return {?} */ (role) => { obj.children.push({ value: role.key, label: role.title, }); })); } this.groupRoleList.push(obj); })); this.groupRoleList.unshift({ value: null, label: '全部' }); if (this.roleNodes.length > 0) { if (this.roleNodes[0].children.length > 0) { this.currentRole = [this.groupRoleList[1].children[0]]; } } this.queryDefaultContact(); this.subscribed.push($temp); }), (/** * @return {?} */ () => { this.pageLoading = false; })); } // 查询默认已被选择人员的信息 /** * @return {?} */ queryDefaultContact() { if (this.data.defaultContacts && this.data.defaultContacts.length > 0) { /** @type {?} */ const userIdsArray = []; this.data.defaultContacts.forEach((/** * @param {?} item * @return {?} */ (item) => { if (item.userId) { userIdsArray.push(item.userId); } })); this.pageLoading = true; /** @type {?} */ const $temp = this.yzContactsService.getUserByUserIds(userIdsArray).subscribe((/** * @param {?} data * @return {?} */ (data) => { this.pageLoading = false; this.selectedContacts = data; this.queryBaseUser(); this.subscribed.push($temp); }), (/** * @return {?} */ () => { this.pageLoading = false; })); } else { this.queryBaseUser(); } } // 查询人员列表 /** * @return {?} */ queryBaseUser() { this.pageLoading = true; /** @type {?} */ const $temp = this.yzRoleContactsService.getBaseUser(this.baseUserParams.pageNum, this.baseUserParams.pageSize, this.baseUserParams.realName, this.currentRole.length > 0 ? this.currentRole[this.currentRole.length - 1].value : null, this.data.userTypes).subscribe((/** * @param {?} data * @return {?} */ (data) => { this.pageLoading = false; this.baseUserParams.total = data.total; this.baseUserList.push(...data.list); this.baseUserList.forEach((/** * @param {?} item * @return {?} */ (item) => { item['checked'] = false; item['disabled'] = false; if (!item.dept) { item.dept = { deptName: '暂无部门' }; } if (!item.realName) { item.realName = '暂无姓名'; } if (!item.userCode) { item.realName = '暂无学/工号'; } if (!item.roles) { item.roles = []; item.rolesData = '暂无角色'; } else { /** @type {?} */ const roleArray = []; item.roles.forEach((/** * @param {?} value * @return {?} */ (value) => { roleArray.push(value.roleName); })); item.rolesData = roleArray.toString(); } this.selectedContacts.forEach((/** * @param {?} value * @return {?} */ (value) => { if (value.userId === item.userId) { item['checked'] = true; } })); })); this.isMaxCount(); this.subscribed.push($temp); }), (/** * @return {?} */ () => { this.pageLoading = false; })); } // 刷新回调函数 /** * @return {?} */ pullToRefresh() { if (this.baseUserList.length < this.baseUserParams.total) { this.baseUserParams.pageNum++; this.queryBaseUser(); } } // 根据用户姓名即时搜索人员 /** * @return {?} */ queryUserByRealName() { this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); } // 取消——根据用户姓名即时搜索人员 /** * @return {?} */ cancelQueUserByRealName() { this.baseUserParams.realName = null; this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); } // 切换角色 /** * @param {?} $event * @return {?} */ onChangeRole($event) { if ($event && $event.length && $event.length > 0) { this.currentRole = $event; } else { this.currentRole = [{ value: null, label: '全部' }]; } this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); } // 人员选择变化的回调 /** * @param {?} $event * @return {?} */ userCheckedChange($event) { if ($event.checked) { // 选中 this.allUserCheck = this.baseUserList.every((/** * @param {?} item * @return {?} */ (item) => { return item.checked === true; })); } else { // 取消 // 取消 /** @type {?} */ let itemIndex = 0; this.selectedContacts.forEach((/** * @param {?} value * @param {?} index * @return {?} */ (value, index) => { if (value.userId === $event.value) { itemIndex = index; } })); this.deleteContact($event.value, itemIndex); } this.addBaseUser(); } // 将人员列表中选中项添加至已选择的人员列表中 /** * @return {?} */ addBaseUser() { this.baseUserList.forEach((/** * @param {?} item * @return {?} */ (item) => { /** @type {?} */ const hasThisMen = this.selectedContacts.some((/** * @param {?} value * @return {?} */ (value) => { return value.userId === item.userId; })); if (item.checked && !hasThisMen) { this.selectedContacts.push(item); } })); this.isMaxCount(); } // 人数选择达到最大值 /** * @return {?} */ isMaxCount() { if (this.data.count > 0 && this.selectedContacts.length >= this.data.count) { this.selectedContacts.length = this.data.count; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ (item) => { /** @type {?} */ const hasThisUser = this.selectedContacts.some((/** * @param {?} value * @return {?} */ (value) => { return item.userId === value.userId; })); if (!hasThisUser) { item.checked = false; item.disabled = true; } })); } else { this.baseUserList.forEach((/** * @param {?} item * @return {?} */ (item) => { item.disabled = false; })); } if (this.baseUserList.length == 0) { this.allUserCheck = false; } else { this.allUserCheck = this.baseUserList.every((/** * @param {?} item * @return {?} */ (item) => { return item.checked === true; })); } } // 删除联系人 /** * @param {?} id * @param {?} index * @return {?} */ deleteContact(id, index) { this.selectedContacts.splice(index, 1); this.baseUserList.forEach((/** * @param {?} item * @return {?} */ (item) => { if (item.userId === id) { item.checked = false; } })); if (this.baseUserList.length == 0) { this.allUserCheck = false; } else { this.allUserCheck = this.baseUserList.every((/** * @param {?} item * @return {?} */ (item) => { return item.checked === true; })); } } // 全选 /** * @return {?} */ allSelect() { this.allUserCheck = true; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ (item) => { item.checked = true; })); this.addBaseUser(); } // 取消全选 /** * @return {?} */ cancelAllSelect() { this.allUserCheck = false; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ (item) => { /** @type {?} */ let itemIndex = 0; this.selectedContacts.forEach((/** * @param {?} value * @param {?} index * @return {?} */ (value, index) => { if (value.userId === item.userId) { itemIndex = index; } })); this.deleteContact(item.userId, itemIndex); })); } // 点“完成”按钮,完成人员选择 /** * @return {?} */ confirmSelect() { this.dialogRef.close(this.selectedContacts); } /** * @return {?} */ ngOnDestroy() { this.subscribed.forEach((/** * @param {?} sub * @return {?} */ (sub) => { sub.unsubscribe(); })); this.modalRefCpt.forEach((/** * @param {?} ref * @return {?} */ (ref) => { ref.destroy(); })); } } YzRoleSelectContactsComponent.decorators = [ { type: Component, args: [{ selector: 'yz-role-select-contacts', template: "<yz-loading-mask *ngIf=\"pageLoading\"></yz-loading-mask>\r\n<div class=\"yz-select-contacts\">\r\n <div class=\"yz-select-contacts-search\">\r\n <SearchBar [placeholder]=\"'\u8BF7\u8F93\u5165\u59D3\u540D\u2026\u2026'\"\r\n [(ngModel)]=\"baseUserParams.realName\"\r\n (onSubmit)=\"queryUserByRealName()\"\r\n (onCancel)=\"cancelQueUserByRealName()\"\r\n (onClear)=\"cancelQueUserByRealName()\"></SearchBar>\r\n </div>\r\n <div class=\"yz-select-contacts-grade\">\r\n <List [className]=\"'yz-select-contact-list'\">\r\n <ListItem\r\n Picker\r\n [extra]=\"currentRole.length>0?currentRole[currentRole.length-1].label:'\u8BF7\u9009\u62E9\u89D2\u8272\u2026\u2026'\"\r\n [arrow]=\"'horizontal'\"\r\n [data]=\"groupRoleList\"\r\n [(ngModel)]=\"currentRole\"\r\n (ngModelChange)=\"onChangeRole($event)\">\r\n \u89D2\u8272\uFF1A\r\n </ListItem>\r\n </List>\r\n </div>\r\n\r\n\r\n\r\n <PullToRefresh [ngStyle]=\"dtPullToRefreshStyle\"\r\n [direction]=\"'up'\"\r\n (onRefresh)=\"pullToRefresh()\"\r\n >\r\n\r\n <!--\u4EBA\u5458-->\r\n <List [className]=\"'contact-list'\" *ngIf=\"baseUserList.length>0\">\r\n <CheckboxItem\r\n *ngFor=\"let item of baseUserList\"\r\n [name]=\"item.realName\"\r\n [value]=\"item.userId\"\r\n [(ngModel)]=\"item.checked\"\r\n [disabled]=\"item.disabled\"\r\n (onChange)=\"userCheckedChange($event)\"\r\n >\r\n {{ item?.realName }}<small *ngIf=\"item?.userCode\">({{item.userCode}})</small> <span> {{ item?.dept?.deptName }}</span>\r\n </CheckboxItem>\r\n </List>\r\n </PullToRefresh>\r\n\r\n\r\n <div class=\"yz-select-contacts-btn\">\r\n <div class=\"count-box\">\u5DF2\u9009\u62E9\uFF1A{{selectedContacts.length}} \u4EBA</div>\r\n <div Button [type]=\"'primary'\" [size]=\"'small'\" [inline]=\"true\" (onClick)=\"confirmSelect()\">\u5B8C\u6210</div>\r\n <div Button [type]=\"'ghost'\" [size]=\"'small'\" [inline]=\"true\" *ngIf=\"!allUserCheck\" (onClick)=\"allSelect()\">\u5168\u9009</div>\r\n <div Button [type]=\"'ghost'\" [size]=\"'small'\" [inline]=\"true\" *ngIf=\"allUserCheck\" (onClick)=\"cancelAllSelect()\">\r\n \u53D6\u6D88\u5168\u9009\r\n </div>\r\n </div>\r\n\r\n</div>\r\n", styles: ["::ng-deep .yz-select-contact-list .am-list-item .am-list-line .am-list-content{font-size:15px}::ng-deep .yz-select-contact-list .am-list-item img{width:34px;height:34px}::ng-deep .contact-list .am-list-content span{font-size:14px;float:right;color:#888}::ng-deep .yz-select-contacts-search{width:100%;background:#fff}::ng-deep .yz-select-contacts-search .am-search{background:#fff}::ng-deep .yz-select-contacts-search .am-search-input{background-color:#efeff4}::ng-deep .yz-select-contacts-btn{background:#fff;border-top:1px solid #d9d9d9;position:fixed;bottom:0;left:0;width:100%;padding:10px 0;z-index:5}::ng-deep .yz-select-contacts-btn .am-button-small{display:block;float:right;margin-right:10px}::ng-deep .yz-select-contacts-btn .count-box{display:block;float:left;line-height:30px;margin-left:10px;max-width:calc(100% - 150px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .yz-role-select-contacts-panel{position:fixed!important;top:0;left:0;z-index:10;width:100%;height:100%;background:#fff;max-width:unset!important}::ng-deep .yz-role-select-contacts-panel .mat-dialog-container{padding:0;border-radius:0;transform:none!important}"] }] } ]; /** @nocollapse */ YzRoleSelectContactsComponent.ctorParameters = () => [ { type: MatDialogRef }, { type: ModalService }, { type: YzSelectContactsService }, { type: YzRoleSelectContactsService }, { type: ComponentOption, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] } ]; if (false) { /** @type {?} */ YzRoleSelectContactsComponent.prototype.modalRefCpt; /** @type {?} */ YzRoleSelectContactsComponent.prototype.subscribed; /** @type {?} */ YzRoleSelectContactsComponent.prototype.dtPullToRefreshStyle; /** @type {?} */ YzRoleSelectContactsComponent.prototype.roleNodes; /** @type {?} */ YzRoleSelectContactsComponent.prototype.groupRoleList; /** @type {?} */ YzRoleSelectContactsComponent.prototype.currentRole; /** @type {?} */ YzRoleSelectContactsComponent.prototype.pageLoading; /** @type {?} */ YzRoleSelectContactsComponent.prototype.baseUserParams; /** @type {?} */ YzRoleSelectContactsComponent.prototype.baseUserList; /** @type {?} */ YzRoleSelectContactsComponent.prototype.allUserCheck; /** @type {?} */ YzRoleSelectContactsComponent.prototype.selectedContacts; /** @type {?} */ YzRoleSelectContactsComponent.prototype.dialogRef; /** * @type {?} * @private */ YzRoleSelectContactsComponent.prototype._modal; /** * @type {?} * @private */ YzRoleSelectContactsComponent.prototype.yzContactsService; /** * @type {?} * @private */ YzRoleSelectContactsComponent.prototype.yzRoleContactsService; /** @type {?} */ YzRoleSelectContactsComponent.prototype.data; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXotcm9sZS1zZWxlY3QtY29udGFjdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbInNlbGVjdC1jb250YWN0cy95ei1yb2xlLXNlbGVjdC1jb250YWN0cy95ei1yb2xlLXNlbGVjdC1jb250YWN0cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFXLFlBQVksRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRTVELE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDdkUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDekYsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDOUUsT0FBTyxFQUFxQixlQUFlLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQVExRSxNQUFNLE9BQU8sNkJBQTZCOzs7Ozs7OztJQW9DeEMsWUFDUyxTQUFzRCxFQUNyRCxNQUFvQixFQUNwQixpQkFBMEMsRUFDMUMscUJBQWtELEVBQzFCLElBQXFCO1FBSjlDLGNBQVMsR0FBVCxTQUFTLENBQTZDO1FBQ3JELFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQUMxQywwQkFBcUIsR0FBckIscUJBQXFCLENBQTZCO1FBQzFCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBdkN2RCxnQkFBVyxHQUFvQixFQUFFLENBQUM7UUFDbEMsZUFBVSxHQUF3QixFQUFFLENBQUM7UUFDckMseUJBQW9CLEdBQUcsRUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUMsQ0FBQzs7UUFHMUUs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LENBQUM7UUFDcEIsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87Ozs7UUFBQyxDQUFDLEdBQWEsRUFBRSxFQUFFO1lBQ3pDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQixDQUFDLEVBQUMsQ0FBQztJQUNMLENBQUM7OztZQTFVRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtnQkFDbkMsNDBFQUF1RDs7YUFFeEQ7Ozs7WUFWd0IsWUFBWTtZQUZuQixZQUFZO1lBR3RCLHVCQUF1QjtZQUN2QiwyQkFBMkI7WUFDUCxlQUFlLHVCQWlEdEMsTUFBTSxTQUFDLGVBQWU7Ozs7SUF2Q3pCLG9EQUFrQzs7SUFDbEMsbURBQXFDOztJQUNyQyw2REFBMEU7O0lBRzFFLGtEQUEwQzs7SUFHMUMsc0RBQWdIOztJQUdoSCxvREFBMEQ7O0lBRzFELG9EQUE2Qjs7SUFHN0IsdURBS0U7O0lBR0YscURBQTRDOztJQUc1QyxxREFBOEI7O0lBRzlCLHlEQUFnRDs7SUFJOUMsa0RBQTZEOzs7OztJQUM3RCwrQ0FBNEI7Ozs7O0lBQzVCLDBEQUFrRDs7Ozs7SUFDbEQsOERBQTBEOztJQUMxRCw2Q0FBcUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TW9kYWxSZWYsIE1vZGFsU2VydmljZX0gZnJvbSBcIm5nLXpvcnJvLWFudGQtbW9iaWxlXCI7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XHJcbmltcG9ydCB7WXpTZWxlY3RDb250YWN0c1NlcnZpY2V9IGZyb20gXCIuLi95ei1zZWxlY3QtY29udGFjdHMveXotc2VsZWN0LWNvbnRhY3RzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtZelJvbGVTZWxlY3RDb250YWN0c1NlcnZpY2V9IGZyb20gXCIuL3l6LXJvbGUtc2VsZWN0LWNvbnRhY3RzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtHcm91cFJvbGVJbnRlcmZhY2UsIENvbXBvbmVudE9wdGlvbn0gZnJvbSBcIi4vZ3JvdXBSb2xlLmludGVyZmFjZVwiO1xyXG5pbXBvcnQge0Jhc2VVc2VySW50ZXJmYWNlfSBmcm9tIFwiLi4veXotc2VsZWN0LWNvbnRhY3RzL2RlcHQuaW50ZXJmYWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3l6LXJvbGUtc2VsZWN0LWNvbnRhY3RzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4veXotcm9sZS1zZWxlY3QtY29udGFjdHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3l6LXJvbGUtc2VsZWN0LWNvbnRhY3RzLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFl6Um9sZVNlbGVjdENvbnRhY3RzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBtb2RhbFJlZkNwdDogQXJyYXk8TW9kYWxSZWY+ID0gW107XHJcbiAgc3Vic2NyaWJlZDogQXJyYXk8U3Vic2NyaXB0aW9uPiA9IFtdO1xyXG4gIGR0UHVsbFRvUmVmcmVzaFN0eWxlID0ge2hlaWdodDogd2luZG93LmlubmVySGVpZ2h0IC0gNDQgLSA1MSAtIDQ0ICsgJ3B4J307XHJcblxyXG4gIC8vIOaAu+inkuiJsue7hOaVsOaNrlxyXG4gIHJvbGVOb2RlczogQXJyYXk8R3JvdXBSb2xlSW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuICAvLyDpobXpnaLlsZXnpLrnmoTop5LoibLnu4TmlbDmja5cclxuICBncm91cFJvbGVMaXN0OiBBcnJheTx7IHZhbHVlOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcsIGNoaWxkcmVuPzogQXJyYXk8eyB2YWx1ZTogc3RyaW5nLCBsYWJlbDogc3RyaW5nIH0+IH0+ID0gW107XHJcblxyXG4gIC8vIOW9k+WJjeinkuiJslxyXG4gIGN1cnJlbnRSb2xlOiBBcnJheTx7IHZhbHVlOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcgfT4gPSBbXTtcclxuXHJcbiAgLy8g6aG16Z2i5Yqg6L295LitXHJcbiAgcGFnZUxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8g5Lq65ZGY5YiX6KGo5Y+C5pWwXHJcbiAgYmFzZVVzZXJQYXJhbXMgPSB7XHJcbiAgICB0b3RhbDogMCxcclxuICAgIHBhZ2VTaXplOiAyMCxcclxuICAgIHBhZ2VOdW06IDEsXHJcbiAgICByZWFsTmFtZTogbnVsbFxyXG4gIH07XHJcblxyXG4gIC8vIOS6uuWRmOaVsOaNrlxyXG4gIGJhc2VVc2VyTGlzdDogQXJyYXk8QmFzZVVzZXJJbnRlcmZhY2U+ID0gW107XHJcblxyXG4gIC8vIOaYr+WQpuWFqOmAieS6uuWRmFxyXG4gIGFsbFVzZXJDaGVjazogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDlt7LpgInmi6nnmoTogZTns7vkurpcclxuICBzZWxlY3RlZENvbnRhY3RzOiBBcnJheTxCYXNlVXNlckludGVyZmFjZT4gPSBbXTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFl6Um9sZVNlbGVjdENvbnRhY3RzQ29tcG9uZW50PixcclxuICAgIHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHl6Q29udGFjdHNTZXJ2aWNlOiBZelNlbGVjdENvbnRhY3RzU2VydmljZSxcclxuICAgIHByaXZhdGUgeXpSb2xlQ29udGFjdHNTZXJ2aWNlOiBZelJvbGVTZWxlY3RDb250YWN0c1NlcnZpY2UsXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IENvbXBvbmVudE9wdGlvblxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRHcm91cFJvbGUoKTtcclxuICB9XHJcblxyXG4gIC8vIOafpeivouinkuiJsue7hFxyXG4gIGluaXRHcm91cFJvbGUoKSB7XHJcbiAgICB0aGlzLmdyb3VwUm9sZUxpc3QgPSBbXTtcclxuICAgIHRoaXMucm9sZU5vZGVzID0gW107XHJcbiAgICB0aGlzLnBhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0ICR0ZW1wID0gdGhpcy55elJvbGVDb250YWN0c1NlcnZpY2UuZ2V0R3JvdXBSb2xlKHRoaXMuZGF0YS5yb2xlR3JvdXBDb2RlKS5zdWJzY3JpYmUoKHJvbGU6IEFycmF5PEdyb3VwUm9sZUludGVyZmFjZT4pID0+IHtcclxuICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJvbGVOb2RlcyA9IHJvbGU7XHJcbiAgICAgIHRoaXMucm9sZU5vZGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICB2YWx1ZTogaXRlbS5rZXksXHJcbiAgICAgICAgICBsYWJlbDogaXRlbS50aXRsZSxcclxuICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKHJvbGUpID0+IHtcclxuICAgICAgICAgICAgb2JqLmNoaWxkcmVuLnB1c2goe1xyXG4gICAgICAgICAgICAgIHZhbHVlOiByb2xlLmtleSxcclxuICAgICAgICAgICAgICBsYWJlbDogcm9sZS50aXRsZSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdyb3VwUm9sZUxpc3QucHVzaChvYmopO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuZ3JvdXBSb2xlTGlzdC51bnNoaWZ0KHtcclxuICAgICAgICB2YWx1ZTogbnVsbCxcclxuICAgICAgICBsYWJlbDogJ+WFqOmDqCdcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5yb2xlTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmICh0aGlzLnJvbGVOb2Rlc1swXS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRSb2xlID0gW3RoaXMuZ3JvdXBSb2xlTGlzdFsxXS5jaGlsZHJlblswXV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnF1ZXJ5RGVmYXVsdENvbnRhY3QoKTtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlZC5wdXNoKCR0ZW1wKTtcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8g5p+l6K+i6buY6K6k5bey6KKr6YCJ5oup5Lq65ZGY55qE5L+h5oGvXHJcbiAgcXVlcnlEZWZhdWx0Q29udGFjdCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuZGVmYXVsdENvbnRhY3RzICYmIHRoaXMuZGF0YS5kZWZhdWx0Q29udGFjdHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCB1c2VySWRzQXJyYXk6IEFycmF5PGFueT4gPSBbXTtcclxuICAgICAgdGhpcy5kYXRhLmRlZmF1bHRDb250YWN0cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0udXNlcklkKSB7XHJcbiAgICAgICAgICB1c2VySWRzQXJyYXkucHVzaChpdGVtLnVzZXJJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIGNvbnN0ICR0ZW1wID0gdGhpcy55ekNvbnRhY3RzU2VydmljZS5nZXRVc2VyQnlVc2VySWRzKHVzZXJJZHNBcnJheSkuc3Vic2NyaWJlKChkYXRhOiBBcnJheTxCYXNlVXNlckludGVyZmFjZT4pID0+IHtcclxuICAgICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzID0gZGF0YTtcclxuICAgICAgICB0aGlzLnF1ZXJ5QmFzZVVzZXIoKTtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZWQucHVzaCgkdGVtcCk7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5xdWVyeUJhc2VVc2VyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDmn6Xor6LkurrlkZjliJfooahcclxuICBxdWVyeUJhc2VVc2VyKCkge1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCAkdGVtcCA9IHRoaXMueXpSb2xlQ29udGFjdHNTZXJ2aWNlLmdldEJhc2VVc2VyKFxyXG4gICAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnBhZ2VOdW0sXHJcbiAgICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMucGFnZVNpemUsXHJcbiAgICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMucmVhbE5hbWUsXHJcbiAgICAgIHRoaXMuY3VycmVudFJvbGUubGVuZ3RoID4gMCA/IHRoaXMuY3VycmVudFJvbGVbdGhpcy5jdXJyZW50Um9sZS5sZW5ndGgtMV0udmFsdWUgOiBudWxsLFxyXG4gICAgICB0aGlzLmRhdGEudXNlclR5cGVzXHJcbiAgICApLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5iYXNlVXNlclBhcmFtcy50b3RhbCA9IGRhdGEudG90YWw7XHJcbiAgICAgIHRoaXMuYmFzZVVzZXJMaXN0LnB1c2goLi4uZGF0YS5saXN0KTtcclxuICAgICAgdGhpcy5iYXNlVXNlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW1bJ2NoZWNrZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgIGl0ZW1bJ2Rpc2FibGVkJ10gPSBmYWxzZTtcclxuICAgICAgICBpZiAoIWl0ZW0uZGVwdCkge1xyXG4gICAgICAgICAgaXRlbS5kZXB0ID0ge2RlcHROYW1lOiAn5pqC5peg6YOo6ZeoJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpdGVtLnJlYWxOYW1lKSB7XHJcbiAgICAgICAgICBpdGVtLnJlYWxOYW1lID0gJ+aaguaXoOWnk+WQjSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghaXRlbS51c2VyQ29kZSkge1xyXG4gICAgICAgICAgaXRlbS5yZWFsTmFtZSA9ICfmmoLml6DlraYv5bel5Y+3J1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWl0ZW0ucm9sZXMpIHtcclxuICAgICAgICAgIGl0ZW0ucm9sZXMgPSBbXTtcclxuICAgICAgICAgIGl0ZW0ucm9sZXNEYXRhID0gJ+aaguaXoOinkuiJsic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHJvbGVBcnJheSA9IFtdO1xyXG4gICAgICAgICAgaXRlbS5yb2xlcy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICByb2xlQXJyYXkucHVzaCh2YWx1ZS5yb2xlTmFtZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGl0ZW0ucm9sZXNEYXRhID0gcm9sZUFycmF5LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb250YWN0cy5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbHVlLnVzZXJJZCA9PT0gaXRlbS51c2VySWQpIHtcclxuICAgICAgICAgICAgaXRlbVsnY2hlY2tlZCddID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuaXNNYXhDb3VudCgpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpYmVkLnB1c2goJHRlbXApO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOWIt+aWsOWbnuiwg+WHveaVsFxyXG4gIHB1bGxUb1JlZnJlc2goKSB7XHJcbiAgICBpZiAodGhpcy5iYXNlVXNlckxpc3QubGVuZ3RoIDwgdGhpcy5iYXNlVXNlclBhcmFtcy50b3RhbCkge1xyXG4gICAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnBhZ2VOdW0rKztcclxuICAgICAgdGhpcy5xdWVyeUJhc2VVc2VyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDmoLnmja7nlKjmiLflp5PlkI3ljbPml7bmkJzntKLkurrlkZhcclxuICBxdWVyeVVzZXJCeVJlYWxOYW1lKCkge1xyXG4gICAgdGhpcy5iYXNlVXNlclBhcmFtcy5wYWdlTnVtID0gMTtcclxuICAgIHRoaXMuYmFzZVVzZXJMaXN0ID0gW107XHJcbiAgICB0aGlzLnF1ZXJ5QmFzZVVzZXIoKTtcclxuICB9XHJcblxyXG4gIC8vIOWPlua2iOKAlOKAlOagueaNrueUqOaIt+Wnk+WQjeWNs+aXtuaQnOe0ouS6uuWRmFxyXG4gIGNhbmNlbFF1ZVVzZXJCeVJlYWxOYW1lKCkge1xyXG4gICAgdGhpcy5iYXNlVXNlclBhcmFtcy5yZWFsTmFtZSA9IG51bGw7XHJcbiAgICB0aGlzLmJhc2VVc2VyUGFyYW1zLnBhZ2VOdW0gPSAxO1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QgPSBbXTtcclxuICAgIHRoaXMucXVlcnlCYXNlVXNlcigpO1xyXG4gIH1cclxuXHJcbiAgLy8g5YiH5o2i6KeS6ImyXHJcbiAgb25DaGFuZ2VSb2xlKCRldmVudCkge1xyXG4gICAgaWYgKCRldmVudCAmJiAkZXZlbnQubGVuZ3RoICYmICRldmVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFJvbGUgPSAkZXZlbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRSb2xlID0gW3tcclxuICAgICAgICB2YWx1ZTogbnVsbCxcclxuICAgICAgICBsYWJlbDogJ+WFqOmDqCdcclxuICAgICAgfV07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iYXNlVXNlclBhcmFtcy5wYWdlTnVtID0gMTtcclxuICAgIHRoaXMuYmFzZVVzZXJMaXN0ID0gW107XHJcbiAgICB0aGlzLnF1ZXJ5QmFzZVVzZXIoKTtcclxuICB9XHJcblxyXG5cclxuICAvLyDkurrlkZjpgInmi6nlj5jljJbnmoTlm57osINcclxuICB1c2VyQ2hlY2tlZENoYW5nZSgkZXZlbnQpIHtcclxuICAgIGlmICgkZXZlbnQuY2hlY2tlZCkgeyAvLyDpgInkuK1cclxuICAgICAgdGhpcy5hbGxVc2VyQ2hlY2sgPSB0aGlzLmJhc2VVc2VyTGlzdC5ldmVyeSgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLmNoZWNrZWQgPT09IHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIH0gZWxzZSB7IC8vIOWPlua2iFxyXG4gICAgICBsZXQgaXRlbUluZGV4ID0gMDtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZS51c2VySWQgPT09ICRldmVudC52YWx1ZSkge1xyXG4gICAgICAgICAgaXRlbUluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kZWxldGVDb250YWN0KCRldmVudC52YWx1ZSwgaXRlbUluZGV4KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZEJhc2VVc2VyKCk7XHJcbiAgfVxyXG5cclxuICAvLyDlsIbkurrlkZjliJfooajkuK3pgInkuK3pobnmt7vliqDoh7Plt7LpgInmi6nnmoTkurrlkZjliJfooajkuK1cclxuICBhZGRCYXNlVXNlcigpIHtcclxuICAgIHRoaXMuYmFzZVVzZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgY29uc3QgaGFzVGhpc01lbiA9IHRoaXMuc2VsZWN0ZWRDb250YWN0cy5zb21lKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS51c2VySWQgPT09IGl0ZW0udXNlcklkXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoaXRlbS5jaGVja2VkICYmICFoYXNUaGlzTWVuKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaXNNYXhDb3VudCgpO1xyXG4gIH1cclxuXHJcbiAgLy8g5Lq65pWw6YCJ5oup6L6+5Yiw5pyA5aSn5YC8XHJcbiAgaXNNYXhDb3VudCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuY291bnQgPiAwICYmIHRoaXMuc2VsZWN0ZWRDb250YWN0cy5sZW5ndGggPj0gdGhpcy5kYXRhLmNvdW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb250YWN0cy5sZW5ndGggPSB0aGlzLmRhdGEuY291bnQ7XHJcbiAgICAgIHRoaXMuYmFzZVVzZXJMaXN0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBjb25zdCBoYXNUaGlzVXNlciA9IHRoaXMuc2VsZWN0ZWRDb250YWN0cy5zb21lKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0udXNlcklkID09PSB2YWx1ZS51c2VySWRcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFoYXNUaGlzVXNlcikge1xyXG4gICAgICAgICAgaXRlbS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICBpdGVtLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJhc2VVc2VyTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmJhc2VVc2VyTGlzdC5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLmFsbFVzZXJDaGVjayA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGxVc2VyQ2hlY2sgPSB0aGlzLmJhc2VVc2VyTGlzdC5ldmVyeSgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLmNoZWNrZWQgPT09IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5Yig6Zmk6IGU57O75Lq6XHJcbiAgZGVsZXRlQ29udGFjdChpZCwgaW5kZXgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb250YWN0cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS51c2VySWQgPT09IGlkKSB7XHJcbiAgICAgICAgaXRlbS5jaGVja2VkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuYmFzZVVzZXJMaXN0Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuYWxsVXNlckNoZWNrID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFsbFVzZXJDaGVjayA9IHRoaXMuYmFzZVVzZXJMaXN0LmV2ZXJ5KChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8g5YWo6YCJXHJcbiAgYWxsU2VsZWN0KCkge1xyXG4gICAgdGhpcy5hbGxVc2VyQ2hlY2sgPSB0cnVlO1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpdGVtLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFkZEJhc2VVc2VyKCk7XHJcbiAgfVxyXG5cclxuICAvLyDlj5bmtojlhajpgIlcclxuICBjYW5jZWxBbGxTZWxlY3QoKSB7XHJcbiAgICB0aGlzLmFsbFVzZXJDaGVjayA9IGZhbHNlO1xyXG4gICAgdGhpcy5iYXNlVXNlckxpc3QuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgaXRlbUluZGV4ID0gMDtcclxuICAgICAgdGhpcy5zZWxlY3RlZENvbnRhY3RzLmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZS51c2VySWQgPT09IGl0ZW0udXNlcklkKSB7XHJcbiAgICAgICAgICBpdGVtSW5kZXggPSBpbmRleDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRlbGV0ZUNvbnRhY3QoaXRlbS51c2VySWQsIGl0ZW1JbmRleCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyDngrnigJzlrozmiJDigJ3mjInpkq7vvIzlrozmiJDkurrlkZjpgInmi6lcclxuICBjb25maXJtU2VsZWN0KCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5zZWxlY3RlZENvbnRhY3RzKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVkLmZvckVhY2goKHN1YjogU3Vic2NyaXB0aW9uKSA9PiB7XHJcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5tb2RhbFJlZkNwdC5mb3JFYWNoKChyZWY6IE1vZGFsUmVmKSA9PiB7XHJcbiAgICAgIHJlZi5kZXN0cm95KCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19