UNPKG

ng-yunzai-mobile

Version:

1. 修改wechat.micro.ts

797 lines 63 kB
/** * @fileoverview added by tsickle * Generated from: select-contacts/yz-select-contacts/yz-select-contacts.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, Inject } from '@angular/core'; import { ModalService } from "ng-zorro-antd-mobile"; import { ComponentOption } from "./dept.interface"; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { YzSelectContactsService } from './yz-select-contacts.service'; var YzSelectContactsComponent = /** @class */ (function () { function YzSelectContactsComponent(dialogRef, _modal, yzContactsService, data) { this.dialogRef = dialogRef; this._modal = _modal; this.yzContactsService = yzContactsService; this.data = data; this.modalRefCpt = []; this.subscribed = []; this.dtPullToRefreshStyle = { height: window.innerHeight - 44 - 51 + 'px' }; // 总部门数据 this.deptNodes = []; // 页面展示的部门数据 this.deptList = []; // 面包屑 this.deptBarList = []; // 页面加载中 this.pageLoading = false; // 人员列表参数 this.baseUserParams = { total: 0, pageSize: 20, pageNum: 1, deptId: null, realName: null, userTypes: null }; // 人员数据 this.baseUserList = []; // 是否全选人员 this.allUserCheck = false; // 已选择的联系人 this.selectedContacts = []; // 年级数据 this.gradeList = []; this.gradeParams = []; } /** * @return {?} */ YzSelectContactsComponent.prototype.ngOnInit = /** * @return {?} */ function () { if (this.data.onlyStudent === true) { this.baseUserParams.userTypes = '2,3'; this.dtPullToRefreshStyle = { height: window.innerHeight - 44 - 51 - 44 + 'px' }; this.initDeptOnlyStu(); this.queryGrade(); } else { this.baseUserParams.userTypes = this.data.userTypes; this.dtPullToRefreshStyle = { height: window.innerHeight - 44 - 51 + 'px' }; this.initDept(); } }; // 查询部门树 // 查询部门树 /** * @return {?} */ YzSelectContactsComponent.prototype.initDept = // 查询部门树 /** * @return {?} */ function () { var _this = this; this.deptList = []; this.deptNodes = []; this.pageLoading = true; /** @type {?} */ var $temp = this.yzContactsService.getDeptTree(this.data.includeClass, this.data.includeHisClass).subscribe((/** * @param {?} dept * @return {?} */ function (dept) { _this.pageLoading = false; _this.deptNodes = dept; _this.deptList = JSON.parse(JSON.stringify(_this.deptNodes)); _this.queryDefaultContact(); _this.blDeptTree(_this.deptList); _this.blDeptTree(_this.deptNodes); _this.subscribed.push($temp); }), (/** * @return {?} */ function () { _this.pageLoading = false; })); }; // 查询部门->只选学生 // 查询部门->只选学生 /** * @return {?} */ YzSelectContactsComponent.prototype.initDeptOnlyStu = // 查询部门->只选学生 /** * @return {?} */ function () { var _this = this; this.deptList = []; this.deptNodes = []; this.pageLoading = true; /** @type {?} */ var gradeId = null; if (this.gradeParams.length > 0) { gradeId = this.gradeParams[0].value; } /** @type {?} */ var $temp = this.yzContactsService.getDeptTreeOnlyStu(gradeId, this.data.includeClass, this.data.includeHisClass).subscribe((/** * @param {?} dept * @return {?} */ function (dept) { _this.pageLoading = false; _this.deptNodes = dept; _this.deptList = JSON.parse(JSON.stringify(_this.deptNodes)); _this.queryDefaultContact(); _this.blDeptTree(_this.deptList); _this.blDeptTree(_this.deptNodes); _this.subscribed.push($temp); }), (/** * @return {?} */ function () { _this.pageLoading = false; })); }; // 查询年级 // 查询年级 /** * @return {?} */ YzSelectContactsComponent.prototype.queryGrade = // 查询年级 /** * @return {?} */ function () { var _this = this; this.gradeList = []; this.pageLoading = true; /** @type {?} */ var $temp = this.yzContactsService.getGrade().subscribe((/** * @param {?} data * @return {?} */ function (data) { _this.pageLoading = false; _this.gradeList = []; data.forEach((/** * @param {?} item * @return {?} */ function (item) { if (item.enable !== 0 && item.enable !== null) { _this.gradeList.push({ value: item.openId, label: item.name }); } })); _this.gradeList.unshift({ value: null, label: '全部' }); _this.subscribed.push($temp); }), (/** * @return {?} */ function () { _this.pageLoading = false; _this.gradeList.unshift({ value: null, label: '全部' }); })); }; // 遍历部门树,确定叶子节点 // 遍历部门树,确定叶子节点 /** * @param {?} tree * @return {?} */ YzSelectContactsComponent.prototype.blDeptTree = // 遍历部门树,确定叶子节点 /** * @param {?} tree * @return {?} */ function (tree) { var _this = this; if (tree && tree.length && tree.length > 0) { tree.forEach((/** * @param {?} item * @return {?} */ function (item) { item.expanded = true; if (item.children === null || item.children.length === 0) { item['isLeaf'] = true; } else { item['isLeaf'] = false; } _this.blDeptTree(item.children); })); } }; // 查询默认已被选择人员的信息 // 查询默认已被选择人员的信息 /** * @return {?} */ YzSelectContactsComponent.prototype.queryDefaultContact = // 查询默认已被选择人员的信息 /** * @return {?} */ function () { var _this = this; if (this.data.defaultContacts && this.data.defaultContacts.length > 0) { /** @type {?} */ var userIdsArray_1 = []; this.data.defaultContacts.forEach((/** * @param {?} item * @return {?} */ function (item) { if (item.userId) { userIdsArray_1.push(item.userId); } })); this.pageLoading = true; /** @type {?} */ var $temp_1 = this.yzContactsService.getUserByUserIds(userIdsArray_1).subscribe((/** * @param {?} data * @return {?} */ function (data) { _this.pageLoading = false; _this.selectedContacts = data; _this.queryBaseUser(); _this.subscribed.push($temp_1); }), (/** * @return {?} */ function () { _this.pageLoading = false; })); } else { this.queryBaseUser(); } }; // 查询人员列表 // 查询人员列表 /** * @return {?} */ YzSelectContactsComponent.prototype.queryBaseUser = // 查询人员列表 /** * @return {?} */ function () { var _this = this; this.pageLoading = true; /** @type {?} */ var $temp = this.yzContactsService.getBaseUser(this.baseUserParams.pageNum, this.baseUserParams.pageSize, this.baseUserParams.realName, this.baseUserParams.deptId, this.baseUserParams.userTypes).subscribe((/** * @param {?} data * @return {?} */ function (data) { var _a; _this.pageLoading = false; _this.baseUserParams.total = data.total; (_a = _this.baseUserList).push.apply(_a, tslib_1.__spread(data.list)); _this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (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 {?} */ var roleArray_1 = []; item.roles.forEach((/** * @param {?} value * @return {?} */ function (value) { roleArray_1.push(value.roleName); })); item.rolesData = roleArray_1.toString(); } _this.selectedContacts.forEach((/** * @param {?} value * @return {?} */ function (value) { if (value.userId === item.userId) { item['checked'] = true; } })); })); _this.isMaxCount(); _this.subscribed.push($temp); }), (/** * @return {?} */ function () { _this.pageLoading = false; })); }; // 刷新回调函数 // 刷新回调函数 /** * @return {?} */ YzSelectContactsComponent.prototype.pullToRefresh = // 刷新回调函数 /** * @return {?} */ function () { if (this.baseUserList.length < this.baseUserParams.total) { this.baseUserParams.pageNum++; this.queryBaseUser(); } }; // 根据用户姓名即时搜索人员 // 根据用户姓名即时搜索人员 /** * @return {?} */ YzSelectContactsComponent.prototype.queryUserByRealName = // 根据用户姓名即时搜索人员 /** * @return {?} */ function () { this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); }; // 取消——根据用户姓名即时搜索人员 // 取消——根据用户姓名即时搜索人员 /** * @return {?} */ YzSelectContactsComponent.prototype.cancelQueUserByRealName = // 取消——根据用户姓名即时搜索人员 /** * @return {?} */ function () { this.baseUserParams.realName = null; this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); }; // 查询全部人员 // 查询全部人员 /** * @return {?} */ YzSelectContactsComponent.prototype.viewAllList = // 查询全部人员 /** * @return {?} */ function () { this.deptList = JSON.parse(JSON.stringify(this.deptNodes)); this.deptBarList = []; this.baseUserParams.deptId = ''; this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); }; // 顶部面包屑查看部门详细 // 顶部面包屑查看部门详细 /** * @param {?} item * @param {?} index * @return {?} */ YzSelectContactsComponent.prototype.deptBarviewList = // 顶部面包屑查看部门详细 /** * @param {?} item * @param {?} index * @return {?} */ function (item, index) { if (index != this.deptBarList.length - 1) { this.deptList = item.children; this.deptBarList.length = index + 1; this.baseUserParams.deptId = item.key; this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); } }; // 查看子部门 -> 查询当前部门人员 // 查看子部门 -> 查询当前部门人员 /** * @param {?} item * @return {?} */ YzSelectContactsComponent.prototype.viewDeptChildrenList = // 查看子部门 -> 查询当前部门人员 /** * @param {?} item * @return {?} */ function (item) { if (item.isLeaf) { // 是叶子节点,无子部门 this.deptList = []; } else { this.deptList = item.children; } this.deptBarList.push(item); this.baseUserParams.deptId = item.key; this.baseUserParams.pageNum = 1; this.baseUserList = []; this.queryBaseUser(); }; // 人员选择变化的回调 // 人员选择变化的回调 /** * @param {?} $event * @return {?} */ YzSelectContactsComponent.prototype.userCheckedChange = // 人员选择变化的回调 /** * @param {?} $event * @return {?} */ function ($event) { if ($event.checked) { // 选中 this.allUserCheck = this.baseUserList.every((/** * @param {?} item * @return {?} */ function (item) { return item.checked === true; })); } else { // 取消 // 取消 /** @type {?} */ var itemIndex_1 = 0; this.selectedContacts.forEach((/** * @param {?} value * @param {?} index * @return {?} */ function (value, index) { if (value.userId === $event.value) { itemIndex_1 = index; } })); this.deleteContact($event.value, itemIndex_1); } this.addBaseUser(); }; // 将人员列表中选中项添加至已选择的人员列表中 // 将人员列表中选中项添加至已选择的人员列表中 /** * @return {?} */ YzSelectContactsComponent.prototype.addBaseUser = // 将人员列表中选中项添加至已选择的人员列表中 /** * @return {?} */ function () { var _this = this; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var hasThisMen = _this.selectedContacts.some((/** * @param {?} value * @return {?} */ function (value) { return value.userId === item.userId; })); if (item.checked && !hasThisMen) { _this.selectedContacts.push(item); } })); this.isMaxCount(); }; // 人数选择达到最大值 // 人数选择达到最大值 /** * @return {?} */ YzSelectContactsComponent.prototype.isMaxCount = // 人数选择达到最大值 /** * @return {?} */ function () { var _this = this; if (this.data.count > 0 && this.selectedContacts.length >= this.data.count) { this.selectedContacts.length = this.data.count; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var hasThisUser = _this.selectedContacts.some((/** * @param {?} value * @return {?} */ function (value) { return item.userId === value.userId; })); if (!hasThisUser) { item.checked = false; item.disabled = true; } })); } else { this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { item.disabled = false; })); } if (this.baseUserList.length == 0) { this.allUserCheck = false; } else { this.allUserCheck = this.baseUserList.every((/** * @param {?} item * @return {?} */ function (item) { return item.checked === true; })); } }; // 删除联系人 // 删除联系人 /** * @param {?} id * @param {?} index * @return {?} */ YzSelectContactsComponent.prototype.deleteContact = // 删除联系人 /** * @param {?} id * @param {?} index * @return {?} */ function (id, index) { this.selectedContacts.splice(index, 1); this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (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 {?} */ function (item) { return item.checked === true; })); } }; // 全选 // 全选 /** * @return {?} */ YzSelectContactsComponent.prototype.allSelect = // 全选 /** * @return {?} */ function () { this.allUserCheck = true; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { item.checked = true; })); this.addBaseUser(); }; // 取消全选 // 取消全选 /** * @return {?} */ YzSelectContactsComponent.prototype.cancelAllSelect = // 取消全选 /** * @return {?} */ function () { var _this = this; this.allUserCheck = false; this.baseUserList.forEach((/** * @param {?} item * @return {?} */ function (item) { /** @type {?} */ var itemIndex = 0; _this.selectedContacts.forEach((/** * @param {?} value * @param {?} index * @return {?} */ function (value, index) { if (value.userId === item.userId) { itemIndex = index; } })); _this.deleteContact(item.userId, itemIndex); })); }; // 切换年级 // 切换年级 /** * @param {?} $event * @return {?} */ YzSelectContactsComponent.prototype.onChangeGrade = // 切换年级 /** * @param {?} $event * @return {?} */ function ($event) { if ($event && $event.length && $event.length > 0) { this.gradeParams = $event; } else { this.gradeParams = [{ value: null, label: '全部' }]; } this.deptBarList = []; this.baseUserParams.deptId = ''; this.baseUserParams.pageNum = 1; this.baseUserList = []; this.initDeptOnlyStu(); }; // 点“完成”按钮,完成人员选择 // 点“完成”按钮,完成人员选择 /** * @return {?} */ YzSelectContactsComponent.prototype.confirmSelect = // 点“完成”按钮,完成人员选择 /** * @return {?} */ function () { this.dialogRef.close(this.selectedContacts); }; /** * @return {?} */ YzSelectContactsComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this.subscribed.forEach((/** * @param {?} sub * @return {?} */ function (sub) { sub.unsubscribe(); })); this.modalRefCpt.forEach((/** * @param {?} ref * @return {?} */ function (ref) { ref.destroy(); })); }; YzSelectContactsComponent.decorators = [ { type: Component, args: [{ selector: 'yz-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\" *ngIf=\"data.onlyStudent\">\r\n <List [className]=\"'yz-select-contact-list'\">\r\n <ListItem\r\n Picker\r\n [extra]=\"gradeParams.length>0?gradeParams[0].label:'\u8BF7\u9009\u62E9\u5E74\u7EA7\u2026\u2026'\"\r\n [arrow]=\"'horizontal'\"\r\n [data]=\"gradeList\"\r\n [(ngModel)]=\"gradeParams\"\r\n (ngModelChange)=\"onChangeGrade($event)\">\r\n \u5E74\u7EA7\uFF1A\r\n </ListItem>\r\n </List>\r\n </div>\r\n\r\n\r\n <PullToRefresh [ngStyle]=\"dtPullToRefreshStyle\"\r\n [direction]=\"'up'\"\r\n (onRefresh)=\"pullToRefresh()\"\r\n >\r\n <div class=\"yz-select-contact-dept-bar\">\r\n <a (click)=\"viewAllList()\">\u5168\u90E8</a>\r\n <ng-container *ngFor=\"let item of deptBarList;let i=index;\">\r\n <a (click)=\"deptBarviewList(item, i)\">>{{item?.title}}</a>\r\n </ng-container>\r\n </div>\r\n\r\n <!--\u90E8\u95E8-->\r\n <List [className]=\"'yz-select-contact-list'\" *ngIf=\"deptList.length>0\">\r\n <ListItem multipleLine [arrow]=\"'horizontal'\"\r\n [thumb]=\"'./assets/imgs/icon_dept.png'\"\r\n *ngFor=\"let item of deptList\"\r\n (onClick)=\"viewDeptChildrenList(item)\">\r\n {{item?.title || '--'}}\r\n </ListItem>\r\n </List>\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>\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}.yz-select-contact-dept-bar{background:#efeff4;padding:9px 8px}.yz-select-contact-dept-bar a{display:inline-block;color:#1e90ff;margin-bottom:3px;letter-spacing:2px}.yz-select-contact-dept-bar a:last-child{color:#444}::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-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-select-contacts-panel .mat-dialog-container{padding:0;border-radius:0;transform:none!important}"] }] } ]; /** @nocollapse */ YzSelectContactsComponent.ctorParameters = function () { return [ { type: MatDialogRef }, { type: ModalService }, { type: YzSelectContactsService }, { type: ComponentOption, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] } ]; }; return YzSelectContactsComponent; }()); export { YzSelectContactsComponent }; if (false) { /** @type {?} */ YzSelectContactsComponent.prototype.modalRefCpt; /** @type {?} */ YzSelectContactsComponent.prototype.subscribed; /** @type {?} */ YzSelectContactsComponent.prototype.dtPullToRefreshStyle; /** @type {?} */ YzSelectContactsComponent.prototype.deptNodes; /** @type {?} */ YzSelectContactsComponent.prototype.deptList; /** @type {?} */ YzSelectContactsComponent.prototype.deptBarList; /** @type {?} */ YzSelectContactsComponent.prototype.pageLoading; /** @type {?} */ YzSelectContactsComponent.prototype.baseUserParams; /** @type {?} */ YzSelectContactsComponent.prototype.baseUserList; /** @type {?} */ YzSelectContactsComponent.prototype.allUserCheck; /** @type {?} */ YzSelectContactsComponent.prototype.selectedContacts; /** @type {?} */ YzSelectContactsComponent.prototype.gradeList; /** @type {?} */ YzSelectContactsComponent.prototype.gradeParams; /** @type {?} */ YzSelectContactsComponent.prototype.dialogRef; /** * @type {?} * @private */ YzSelectContactsComponent.prototype._modal; /** * @type {?} * @private */ YzSelectContactsComponent.prototype.yzContactsService; /** @type {?} */ YzSelectContactsComponent.prototype.data; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXotc2VsZWN0LWNvbnRhY3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXl1bnphaS1tb2JpbGUvIiwic291cmNlcyI6WyJzZWxlY3QtY29udGFjdHMveXotc2VsZWN0LWNvbnRhY3RzL3l6LXNlbGVjdC1jb250YWN0cy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBVyxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUU1RCxPQUFPLEVBQW9CLGVBQWUsRUFBZ0IsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRixPQUFPLEVBQUMsZUFBZSxFQUFFLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRXJFO0lBOENFLG1DQUNTLFNBQWtELEVBQ2pELE1BQW9CLEVBQ3BCLGlCQUEwQyxFQUNsQixJQUFxQjtRQUg5QyxjQUFTLEdBQVQsU0FBUyxDQUF5QztRQUNqRCxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBeUI7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUEzQ3ZELGdCQUFXLEdBQW9CLEVBQUUsQ0FBQztRQUNsQyxlQUFVLEdBQXdCLEVBQUUsQ0FBQztRQUNyQyx5QkFBb0IsR0FBRyxFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFDLENBQUM7O1FBR3JFLGNBQVMsR0FBeUIsRUFBRSxDQUFDOztRQUdyQyxhQUFRLEdBQXlCLEVBQUUsQ0FBQzs7UUFHcEMsZ0JBQVcsR0FBeUIsRUFBRSxDQUFDOztRQUd2QyxnQkFBVyxHQUFZLEtBQUssQ0FBQzs7UUFHN0IsbUJBQWMsR0FBRztZQUNmLEtBQUssRUFB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QywrQ0FBcUM7O0lBQ3JDLHlEQUFxRTs7SUFHckUsOENBQXFDOztJQUdyQyw2Q0FBb0M7O0lBR3BDLGdEQUF1Qzs7SUFHdkMsZ0RBQTZCOztJQUc3QixtREFPRTs7SUFHRixpREFBNEM7O0lBRzVDLGlEQUE4Qjs7SUFHOUIscURBQWdEOztJQUdoRCw4Q0FBd0Q7O0lBQ3hELGdEQUEwRDs7SUFHeEQsOENBQXlEOzs7OztJQUN6RCwyQ0FBNEI7Ozs7O0lBQzVCLHNEQUFrRDs7SUFDbEQseUNBQXFEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01vZGFsUmVmLCBNb2RhbFNlcnZpY2V9IGZyb20gXCJuZy16b3Jyby1hbnRkLW1vYmlsZVwiO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtCYXNlVXNlckludGVyZmFjZSwgQ29tcG9uZW50T3B0aW9uLCBEZXB0SW50ZXJmYWNlfSBmcm9tIFwiLi9kZXB0LmludGVyZmFjZVwiO1xyXG5pbXBvcnQge01BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge1l6U2VsZWN0Q29udGFjdHNTZXJ2aWNlfSBmcm9tICcuL3l6LXNlbGVjdC1jb250YWN0cy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAneXotc2VsZWN0LWNvbnRhY3RzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4veXotc2VsZWN0LWNvbnRhY3RzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi95ei1zZWxlY3QtY29udGFjdHMuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgWXpTZWxlY3RDb250YWN0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgbW9kYWxSZWZDcHQ6IEFycmF5PE1vZGFsUmVmPiA9IFtdO1xyXG4gIHN1YnNjcmliZWQ6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcclxuICBkdFB1bGxUb1JlZnJlc2hTdHlsZSA9IHtoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCAtIDQ0IC0gNTEgKyAncHgnfTtcclxuXHJcbiAgLy8g5oC76YOo6Zeo5pWw5o2uXHJcbiAgZGVwdE5vZGVzOiBBcnJheTxEZXB0SW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuICAvLyDpobXpnaLlsZXnpLrnmoTpg6jpl6jmlbDmja5cclxuICBkZXB0TGlzdDogQXJyYXk8RGVwdEludGVyZmFjZT4gPSBbXTtcclxuXHJcbiAgLy8g6Z2i5YyF5bGRXHJcbiAgZGVwdEJhckxpc3Q6IEFycmF5PERlcHRJbnRlcmZhY2U+ID0gW107XHJcblxyXG4gIC8vIOmhtemdouWKoOi9veS4rVxyXG4gIHBhZ2VMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOS6uuWRmOWIl+ihqOWPguaVsFxyXG4gIGJhc2VVc2VyUGFyYW1zID0ge1xyXG4gICAgdG90YWw6IDAsXHJcbiAgICBwYWdlU2l6ZTogMjAsXHJcbiAgICBwYWdlTnVtOiAxLFxyXG4gICAgZGVwdElkOiBudWxsLFxyXG4gICAgcmVhbE5hbWU6IG51bGwsXHJcbiAgICB1c2VyVHlwZXM6IG51bGxcclxuICB9O1xyXG5cclxuICAvLyDkurrlkZjmlbDmja5cclxuICBiYXNlVXNlckxpc3Q6IEFycmF5PEJhc2VVc2VySW50ZXJmYWNlPiA9IFtdO1xyXG5cclxuICAvLyDmmK/lkKblhajpgInkurrlkZhcclxuICBhbGxVc2VyQ2hlY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8g5bey6YCJ5oup55qE6IGU57O75Lq6XHJcbiAgc2VsZWN0ZWRDb250YWN0czogQXJyYXk8QmFzZVVzZXJJbnRlcmZhY2U+ID0gW107XHJcblxyXG4gIC8vIOW5tOe6p+aVsOaNrlxyXG4gIGdyYWRlTGlzdDogQXJyYXk8eyB2YWx1ZTogc3RyaW5nLCBsYWJlbDogc3RyaW5nIH0+ID0gW107XHJcbiAgZ3JhZGVQYXJhbXM6IEFycmF5PHsgdmFsdWU6IHN0cmluZywgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxZelNlbGVjdENvbnRhY3RzQ29tcG9uZW50PixcclxuICAgIHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHl6Q29udGFjdHNTZXJ2aWNlOiBZelNlbGVjdENvbnRhY3RzU2VydmljZSxcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogQ29tcG9uZW50T3B0aW9uXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEub25seVN0dWRlbnQgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5iYXNlVXNlclBhcmFtcy51c2VyVHlwZXMgPSAnMiwzJztcclxuICAgICAgdGhpcy5kdFB1bGxUb1JlZnJlc2hTdHlsZSA9IHtoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCAtIDQ0IC0gNTEgLSA0NCArICdweCd9O1xyXG4gICAgICB0aGlzLmluaXREZXB0T25seVN0dSgpO1xyXG4gICAgICB0aGlzLnF1ZXJ5R3JhZGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYmFzZVVzZXJQYXJhbXMudXNlclR5cGVzID0gdGhpcy5kYXRhLnVzZXJUeXBlcztcclxuICAgICAgdGhpcy5kdFB1bGxUb1JlZnJlc2hTdHlsZSA9IHtoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCAtIDQ0IC0gNTEgKyAncHgnfTtcclxuICAgICAgdGhpcy5pbml0RGVwdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5p+l6K+i6YOo6Zeo5qCRXHJcbiAgaW5pdERlcHQoKSB7XHJcbiAgICB0aGlzLmRlcHRMaXN0ID0gW107XHJcbiAgICB0aGlzLmRlcHROb2RlcyA9IFtdO1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCAkdGVtcCA9IHRoaXMueXpDb250YWN0c1NlcnZpY2UuZ2V0RGVwdFRyZWUodGhpcy5kYXRhLmluY2x1ZGVDbGFzcywgdGhpcy5kYXRhLmluY2x1ZGVIaXNDbGFzcykuc3Vic2NyaWJlKChkZXB0OiBBcnJheTxEZXB0SW50ZXJmYWNlPikgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZGVwdE5vZGVzID0gZGVwdDtcclxuICAgICAgdGhpcy5kZXB0TGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5kZXB0Tm9kZXMpKTtcclxuXHJcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0Q29udGFjdCgpO1xyXG5cclxuICAgICAgdGhpcy5ibERlcHRUcmVlKHRoaXMuZGVwdExpc3QpO1xyXG4gICAgICB0aGlzLmJsRGVwdFRyZWUodGhpcy5kZXB0Tm9kZXMpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZWQucHVzaCgkdGVtcCk7XHJcbiAgICB9LCAoKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5p+l6K+i6YOo6ZeoLT7lj6rpgInlrabnlJ9cclxuICBpbml0RGVwdE9ubHlTdHUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlcHRMaXN0ID0gW107XHJcbiAgICB0aGlzLmRlcHROb2RlcyA9IFtdO1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBsZXQgZ3JhZGVJZCA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5ncmFkZVBhcmFtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGdyYWRlSWQgPSB0aGlzLmdyYWRlUGFyYW1zWzBdLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0ICR0ZW1wID0gdGhpcy55ekNvbnRhY3RzU2VydmljZS5nZXREZXB0VHJlZU9ubHlTdHUoZ3JhZGVJZCwgdGhpcy5kYXRhLmluY2x1ZGVDbGFzcywgdGhpcy5kYXRhLmluY2x1ZGVIaXNDbGFzcykuc3Vic2NyaWJlKChkZXB0OiBBcnJheTxEZXB0SW50ZXJmYWNlPikgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB0aGlzLmRlcHROb2RlcyA9IGRlcHQ7XHJcbiAgICAgIHRoaXMuZGVwdExpc3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGVwdE5vZGVzKSk7XHJcbiAgICAgIHRoaXMucXVlcnlEZWZhdWx0Q29udGFjdCgpO1xyXG5cclxuICAgICAgdGhpcy5ibERlcHRUcmVlKHRoaXMuZGVwdExpc3QpO1xyXG4gICAgICB0aGlzLmJsRGVwdFRyZWUodGhpcy5kZXB0Tm9kZXMpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpYmVkLnB1c2goJHRlbXApO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOafpeivouW5tOe6p1xyXG4gIHF1ZXJ5R3JhZGUoKSB7XHJcbiAgICB0aGlzLmdyYWRlTGlzdCA9IFtdO1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCAkdGVtcCA9IHRoaXMueXpDb250YWN0c1NlcnZpY2UuZ2V0R3JhZGUoKS5zdWJzY3JpYmUoKGRhdGE6IEFycmF5PGFueT4pID0+IHtcclxuICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmdyYWRlTGlzdCA9IFtdO1xyXG4gICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpZihpdGVtLmVuYWJsZSAhPT0gMCAmJiBpdGVtLmVuYWJsZSAhPT0gbnVsbCl7XHJcbiAgICAgICAgIC