ng-yunzai-mobile
Version:
1. 修改wechat.micro.ts
340 lines • 30 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: upload-file/yz-upload-file/yz-upload-file.component.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, EventEmitter, Inject, Input, Output } from '@angular/core';
import { ToastService } from "ng-zorro-antd-mobile";
import { BASE_CLIENT } from "../../client/base.client";
import { UploadService } from "./upload.service";
import { MatDialog } from "@angular/material/dialog";
import { FileCarouselService } from "../yz-file-carousel/file-carousel.service";
import { FileShowService } from "../yz-file-show/file-show.service";
export class YzUploadFileComponent {
/**
* @param {?} _toast
* @param {?} client
* @param {?} uploadService
* @param {?} fileCarouselService
* @param {?} fileShowService
* @param {?} dialog
*/
constructor(_toast, client, uploadService, fileCarouselService, fileShowService, dialog) {
this._toast = _toast;
this.client = client;
this.uploadService = uploadService;
this.fileCarouselService = fileCarouselService;
this.fileShowService = fileShowService;
this.dialog = dialog;
// 服务方式调用,返回文件本身的File对象;
// 组件方式调用,返回全部文件File数组;
this.type = 1;
this.disabled = false;
this.fileList = [];
this.confirmFile = new EventEmitter();
// 页面加载中
this.pageLoading = false;
// 文件的展示方式(使用组件方式调用才展示文件),若上传的文件均为图片格式,则以“square”方式显示,否则以“list”方式显示;默认为“list”
this.showType = ShowType.LIST;
// 右侧按钮组
this.rightBtnArr = [
{
text: '删除',
onPress: (/**
* @return {?}
*/
() => {
this.deleteFile();
}),
className: 'btnClass',
style: { backgroundColor: '#f4333c', color: '#fff' }
}
];
// 被删除文件
this.deleteItem = {
id: null,
index: null
};
}
/**
* @return {?}
*/
ngOnInit() {
}
/**
* @return {?}
*/
upload() {
if (!this.pageLoading) {
this.uploadService.uploadHandle({
type: this.type,
onOk: (/**
* @param {?} result
* @return {?}
*/
(result) => {
this.uploadFileStart(result);
})
});
}
}
// 上传附件
/**
* @param {?} file
* @return {?}
*/
uploadFileStart(file) {
this.pageLoading = true;
this.uploadService.uploadFile(file).subscribe((/**
* @param {?} data
* @return {?}
*/
(data) => {
this.pageLoading = false;
if (data.data) {
/** @type {?} */
let bgUrl = '';
data.data.type = data.data.type.toLowerCase();
switch (data.data.type) {
case '.xls':
case '.xlsx':
bgUrl = './assets/imgs/icon_excel.png';
break;
case '.ppt':
case '.pptx':
bgUrl = './assets/imgs/icon_ppt.png';
break;
case '.doc':
case '.docx':
bgUrl = './assets/imgs/icon_word.png';
break;
case '.pdf':
bgUrl = './assets/imgs/icon_pdf.png';
break;
case '.txt':
bgUrl = './assets/imgs/icon_text.png';
break;
case '.gif':
case '.png':
case '.jpg':
case '.jpeg':
bgUrl = this.client.gateway + '/filecenter/file/' + data.data.id;
break;
case '.mp3':
case '.mp4':
bgUrl = './assets/imgs/icon_img.png';
break;
default:
bgUrl = './assets/imgs/icon_othert.png';
}
this.fileList.push(Object.assign({ bgUrl: bgUrl, url: this.client.gateway + '/filecenter/file/' + data.data.id }, data.data));
this.isAllImg();
this.confirmFile.emit(this.fileList);
}
else {
this._toast.fail('上传失败,请重新操作!');
}
}), (/**
* @param {?} error
* @return {?}
*/
(error) => {
this.pageLoading = false;
console.log(error);
this._toast.fail('上传失败,请重新操作!');
}));
}
// 文件的展示方式
/**
* @return {?}
*/
isAllImg() {
/** @type {?} */
const allImg = this.fileList.every((/**
* @param {?} item
* @return {?}
*/
(item) => {
return item.type === '.jpg' || item.type === '.jpeg' || item.type === '.gif' || item.type === '.png';
}));
this.showType = allImg ? ShowType.SQUARE : ShowType.LIST;
}
// 删除文件
/**
* @return {?}
*/
deleteFile() {
this.pageLoading = true;
this.uploadService.deleteFile(this.deleteItem.id).subscribe((/**
* @param {?} data
* @return {?}
*/
(data) => {
this.pageLoading = false;
if (data.message.indexOf('成功') != -1) {
this.fileList.splice(this.deleteItem.index, 1);
this.isAllImg();
this.confirmFile.emit(this.fileList);
}
else {
this._toast.fail('删除失败,请重新操作!');
}
}), (/**
* @return {?}
*/
() => {
this.pageLoading = false;
this._toast.fail('删除失败,请重新操作!');
}));
}
// 删除方块中的文件
/**
* @param {?} id
* @param {?} index
* @return {?}
*/
deleteFileBySquare(id, index) {
event.stopPropagation();
this.deleteItem = {
id: id,
index: index
};
this.deleteFile();
}
// 删除list中的文件
/**
* @param {?} id
* @param {?} index
* @return {?}
*/
deleteFileBySwipe(id, index) {
this.deleteItem = {
id: id,
index: index
};
}
// 查看图片文件详情
/**
* @param {?} item
* @param {?} index
* @return {?}
*/
viewImgFile(item, index) {
this.fileCarouselService.viewImgFileCarousel({
fileList: this.fileList,
index: index
});
}
// 查看多种格式文件详情
/**
* @param {?} item
* @return {?}
*/
viewOtherFile(item) {
this.fileShowService.viewFileShow({
id: item.id
});
}
}
YzUploadFileComponent.decorators = [
{ type: Component, args: [{
selector: 'yz-upload-file',
template: "<!-- \u56FE\u7247\u683C\u5F0F\u6587\u4EF6\u7684\u5C55\u793A-->\r\n<div class=\"upload-file-box\">\r\n <ng-container *ngIf=\"fileList.length>0 && showType=='square'\">\r\n <div class=\"file-item\" *ngFor=\"let item of fileList;let i=index;\">\r\n <div class=\"file-item-cont\"\r\n [ngStyle]=\"{'background':'url('+item.bgUrl+') no-repeat center #fff','background-size': (item.type=='.gif' || item.type=='.png' || item.type=='.jpg' || item.type=='.jpeg')?'cover':'auto'}\"\r\n (click)=\"viewImgFile(item, i)\">\r\n <Icon [type]=\"'cross-circle-o'\" *ngIf=\"!disabled\"\r\n [size]=\"'xs'\"\r\n [color]=\"'rgba(0,0,0,.5)'\"\r\n (click)=\"deleteFileBySquare(item.id,i)\"\r\n ></Icon>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"file-item\" *ngIf=\"!disabled\" (click)=\"upload()\">\r\n <div class=\"file-item-cont\"\r\n [class.add-file-btn]=\"!pageLoading\"\r\n [class.add-file-loading]=\"pageLoading\">\r\n <Icon *ngIf=\"pageLoading\" [type]=\"'loading'\" [size]=\"'lg'\"></Icon>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- \u591A\u79CD\u683C\u5F0F\u6587\u4EF6\u7684\u5C55\u793A-->\r\n<List [className]=\"'file-list'\" *ngIf=\"fileList.length>0 && showType=='list'\">\r\n <SwipeAction\r\n *ngFor=\"let item of fileList;let i=index;\"\r\n [autoClose]=\"true\"\r\n [disabled]=\"disabled\"\r\n [right]=\"rightBtnArr\"\r\n (onOpen)=\"deleteFileBySwipe(item.id,i)\"\r\n >\r\n <ListItem\r\n [arrow]=\"'horizontal'\"\r\n [thumb]=\"iconTpl\"\r\n multipleLine\r\n (onClick)=\"viewOtherFile(item)\"\r\n >\r\n <ng-template #iconTpl>\r\n <ng-container [ngSwitch]=\"item.type\">\r\n <img *ngSwitchCase=\"'.xls'\" src=\"./assets/imgs/icon_excel.png\">\r\n <img *ngSwitchCase=\"'.xlsx'\" src=\"./assets/imgs/icon_excel.png\">\r\n\r\n <img *ngSwitchCase=\"'.ppt'\" src=\"./assets/imgs/icon_ppt.png\">\r\n <img *ngSwitchCase=\"'.pptx'\" src=\"./assets/imgs/icon_ppt.png\">\r\n\r\n <img *ngSwitchCase=\"'.doc'\" src=\"./assets/imgs/icon_word.png\">\r\n <img *ngSwitchCase=\"'.docx'\" src=\"./assets/imgs/icon_word.png\">\r\n\r\n <img *ngSwitchCase=\"'.pdf'\" src=\"./assets/imgs/icon_pdf.png\">\r\n\r\n <img *ngSwitchCase=\"'.txt'\" src=\"./assets/imgs/icon_text.png\">\r\n\r\n <img *ngSwitchCase=\"'.gif'\" src=\"./assets/imgs/icon_img.png\">\r\n <img *ngSwitchCase=\"'.png'\" src=\"./assets/imgs/icon_img.png\">\r\n <img *ngSwitchCase=\"'.jpg'\" src=\"./assets/imgs/icon_img.png\">\r\n <img *ngSwitchCase=\"'.jpeg'\" src=\"./assets/imgs/icon_img.png\">\r\n\r\n <img *ngSwitchCase=\"'.mp3'\" src=\"./assets/imgs/icon_mp3.png\">\r\n <img *ngSwitchCase=\"'.mp4'\" src=\"./assets/imgs/icon_mp4.png\">\r\n\r\n <img *ngSwitchDefault src=\"./assets/imgs/icon_othert.png\">\r\n </ng-container>\r\n </ng-template>\r\n {{item?.filename || 'XX'}}\r\n </ListItem>\r\n </SwipeAction>\r\n</List>\r\n",
styles: [".upload-file-box{overflow:hidden;margin-bottom:16px}.upload-file-box .file-item{width:33.3333%;position:relative;display:block;float:left}.upload-file-box .file-item::after{content:'';display:block;margin-top:100%}.upload-file-box .file-item-cont{position:absolute;left:3px;right:3px;top:3px;bottom:3px;background-color:#fff;border:1px solid #ddd;display:block}.upload-file-box .file-item-cont Icon{position:absolute;top:0;right:0;z-index:20;padding:7px}.upload-file-box .file-item-cont.add-file-btn::after,.upload-file-box .file-item-cont.add-file-btn::before{width:1px;height:25px;content:\" \";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background-color:#ccc}.upload-file-box .file-item-cont.add-file-btn::after{width:25px;height:1px}.upload-file-box .file-item-cont.add-file-btn:active{background:#f7f7f7}.upload-file-box .file-item-cont.add-file-loading{background:rgba(0,0,0,.3)}.upload-file-box .file-item-cont.add-file-loading Icon{top:50%;left:50%;margin-top:-19px;margin-left:-18px;padding:0;right:unset}"]
}] }
];
/** @nocollapse */
YzUploadFileComponent.ctorParameters = () => [
{ type: ToastService },
{ type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] },
{ type: UploadService },
{ type: FileCarouselService },
{ type: FileShowService },
{ type: MatDialog }
];
YzUploadFileComponent.propDecorators = {
type: [{ type: Input }],
disabled: [{ type: Input }],
fileList: [{ type: Input }],
confirmFile: [{ type: Output }]
};
if (false) {
/** @type {?} */
YzUploadFileComponent.prototype.type;
/** @type {?} */
YzUploadFileComponent.prototype.disabled;
/** @type {?} */
YzUploadFileComponent.prototype.fileList;
/** @type {?} */
YzUploadFileComponent.prototype.confirmFile;
/** @type {?} */
YzUploadFileComponent.prototype.pageLoading;
/** @type {?} */
YzUploadFileComponent.prototype.showType;
/** @type {?} */
YzUploadFileComponent.prototype.rightBtnArr;
/** @type {?} */
YzUploadFileComponent.prototype.deleteItem;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype._toast;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype.client;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype.uploadService;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype.fileCarouselService;
/**
* @type {?}
* @private
*/
YzUploadFileComponent.prototype.fileShowService;
/** @type {?} */
YzUploadFileComponent.prototype.dialog;
}
export class fileModel {
}
if (false) {
/** @type {?} */
fileModel.prototype.id;
/** @type {?} */
fileModel.prototype.filename;
/** @type {?} */
fileModel.prototype.length;
/** @type {?} */
fileModel.prototype.chunkSize;
/** @type {?} */
fileModel.prototype.uploadDate;
/** @type {?} */
fileModel.prototype.md5;
/** @type {?} */
fileModel.prototype.type;
/** @type {?} */
fileModel.prototype.duration;
/** @type {?} */
fileModel.prototype.storeType;
/** @type {?} */
fileModel.prototype.storeInfo;
/** @type {?} */
fileModel.prototype.url;
/** @type {?} */
fileModel.prototype.bgUrl;
}
/** @enum {string} */
const ShowType = {
LIST: "list",
SQUARE: "square",
};
export { ShowType };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXotdXBsb2FkLWZpbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbInVwbG9hZC1maWxlL3l6LXVwbG9hZC1maWxlL3l6LXVwbG9hZC1maWxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsV0FBVyxFQUFhLE1BQU0sMEJBQTBCLENBQUM7QUFDakUsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFPbEUsTUFBTSxPQUFPLHFCQUFxQjs7Ozs7Ozs7O0lBa0NoQyxZQUFvQixNQUFvQixFQUNDLE1BQWtCLEVBQ3ZDLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxlQUFnQyxFQUNqQyxNQUFpQjtRQUxoQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ0MsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUN2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNqQyxXQUFNLEdBQU4sTUFBTSxDQUFXOzs7UUFuQzNCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFDakIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixhQUFRLEdBQXFCLEVBQUUsQ0FBQztRQUMvQixnQkFBVyxHQUFtQyxJ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QUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7SUFHRCxhQUFhLENBQUMsSUFBUztRQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQztZQUNoQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDWixDQUFDLENBQUM7SUFDTCxDQUFDOzs7WUFwTEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLHlqR0FBOEM7O2FBRS9DOzs7O1lBWE8sWUFBWTs0Q0ErQ0wsTUFBTSxTQUFDLFdBQVc7WUE3Q3pCLGFBQWE7WUFFYixtQkFBbUI7WUFDbkIsZUFBZTtZQUZmLFNBQVM7OzttQkFhZCxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSzswQkFDTCxNQUFNOzs7O0lBSFAscUNBQTBCOztJQUMxQix5Q0FBbUM7O0lBQ25DLHlDQUF5Qzs7SUFDekMsNENBQTJFOztJQUczRSw0Q0FBNkI7O0lBRzdCLHlDQUFtQzs7SUFHbkMsNENBU0U7O0lBR0YsMkNBR0U7Ozs7O0lBR1UsdUNBQTRCOzs7OztJQUM1Qix1Q0FBK0M7Ozs7O0lBQy9DLDhDQUFvQzs7Ozs7SUFDcEMsb0RBQWdEOzs7OztJQUNoRCxnREFBd0M7O0lBQ3hDLHVDQUF3Qjs7QUEySXRDLE1BQU0sT0FBTyxTQUFTO0NBYXJCOzs7SUFaQyx1QkFBVzs7SUFDWCw2QkFBaUI7O0lBQ2pCLDJCQUFlOztJQUNmLDhCQUFrQjs7SUFDbEIsK0JBQWlCOztJQUNqQix3QkFBWTs7SUFDWix5QkFBYTs7SUFDYiw2QkFBYzs7SUFDZCw4QkFBa0I7O0lBQ2xCLDhCQUFrQjs7SUFDbEIsd0JBQVk7O0lBQ1osMEJBQWM7OztBQUdoQixNQUFZLFFBQVE7SUFDbEIsSUFBSSxRQUFTO0lBQ2IsTUFBTSxVQUFXO0VBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1RvYXN0U2VydmljZX0gZnJvbSBcIm5nLXpvcnJvLWFudGQtbW9iaWxlXCI7XHJcbmltcG9ydCB7QkFTRV9DTElFTlQsIEJhc2VDbGllbnR9IGZyb20gXCIuLi8uLi9jbGllbnQvYmFzZS5jbGllbnRcIjtcclxuaW1wb3J0IHtVcGxvYWRTZXJ2aWNlfSBmcm9tIFwiLi91cGxvYWQuc2VydmljZVwiO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge0ZpbGVDYXJvdXNlbFNlcnZpY2V9IGZyb20gXCIuLi95ei1maWxlLWNhcm91c2VsL2ZpbGUtY2Fyb3VzZWwuc2VydmljZVwiO1xyXG5pbXBvcnQge0ZpbGVTaG93U2VydmljZX0gZnJvbSBcIi4uL3l6LWZpbGUtc2hvdy9maWxlLXNob3cuc2VydmljZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd5ei11cGxvYWQtZmlsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3l6LXVwbG9hZC1maWxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi95ei11cGxvYWQtZmlsZS5jb21wb25lbnQubGVzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBZelVwbG9hZEZpbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIOacjeWKoeaWueW8j+iwg+eUqO+8jOi/lOWbnuaWh+S7tuacrOi6q+eahEZpbGXlr7nosaHvvJtcclxuICAvLyDnu4Tku7bmlrnlvI/osIPnlKjvvIzov5Tlm57lhajpg6jmlofku7ZGaWxl5pWw57uE77ybXHJcblxyXG4gIEBJbnB1dCgpIHR5cGU6IG51bWJlciA9IDE7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWxlTGlzdDogQXJyYXk8ZmlsZU1vZGVsPiA9IFtdO1xyXG4gIEBPdXRwdXQoKSBjb25maXJtRmlsZTogRXZlbnRFbWl0dGVyPEFycmF5PGZpbGVNb2RlbD4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyDpobXpnaLliqDovb3kuK1cclxuICBwYWdlTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDmlofku7bnmoTlsZXnpLrmlrnlvI8o5L2/55So57uE5Lu25pa55byP6LCD55So5omN5bGV56S65paH5Lu2Ke+8jOiLpeS4iuS8oOeahOaWh+S7tuWdh+S4uuWbvueJh+agvOW8j++8jOWImeS7peKAnHNxdWFyZeKAneaWueW8j+aYvuekuu+8jOWQpuWImeS7peKAnGxpc3TigJ3mlrnlvI/mmL7npLrvvJvpu5jorqTkuLrigJxsaXN04oCdXHJcbiAgc2hvd1R5cGU6IFNob3dUeXBlID0gU2hvd1R5cGUuTElTVDtcclxuXHJcbiAgLy8g5Y+z5L6n5oyJ6ZKu57uEXHJcbiAgcmlnaHRCdG5BcnIgPSBbXHJcbiAgICB7XHJcbiAgICAgIHRleHQ6ICfliKDpmaQnLFxyXG4gICAgICBvblByZXNzOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kZWxldGVGaWxlKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNsYXNzTmFtZTogJ2J0bkNsYXNzJyxcclxuICAgICAgc3R5bGU6IHtiYWNrZ3JvdW5kQ29sb3I6ICcjZjQzMzNjJywgY29sb3I6ICcjZmZmJ31cclxuICAgIH1cclxuICBdO1xyXG5cclxuICAvLyDooqvliKDpmaTmlofku7ZcclxuICBkZWxldGVJdGVtID0ge1xyXG4gICAgaWQ6IG51bGwsXHJcbiAgICBpbmRleDogbnVsbFxyXG4gIH07XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF90b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIEBJbmplY3QoQkFTRV9DTElFTlQpIHByaXZhdGUgY2xpZW50OiBCYXNlQ2xpZW50LFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGZpbGVDYXJvdXNlbFNlcnZpY2U6IEZpbGVDYXJvdXNlbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBmaWxlU2hvd1NlcnZpY2U6IEZpbGVTaG93U2VydmljZSxcclxuICAgICAgICAgICAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2cpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkKCkge1xyXG4gICAgaWYgKCF0aGlzLnBhZ2VMb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkU2VydmljZS51cGxvYWRIYW5kbGUoe1xyXG4gICAgICAgIHR5cGU6IHRoaXMudHlwZSxcclxuICAgICAgICBvbk9rOiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnVwbG9hZEZpbGVTdGFydChyZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyDkuIrkvKDpmYTku7ZcclxuICB1cGxvYWRGaWxlU3RhcnQoZmlsZSkge1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkRmlsZShmaWxlKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIGlmIChkYXRhLmRhdGEpIHtcclxuICAgICAgICBsZXQgYmdVcmwgPSAnJztcclxuICAgICAgICBkYXRhLmRhdGEudHlwZSA9IGRhdGEuZGF0YS50eXBlLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgc3dpdGNoIChkYXRhLmRhdGEudHlwZSkge1xyXG4gICAgICAgICAgY2FzZSAnLnhscyc6XHJcbiAgICAgICAgICBjYXNlICcueGxzeCc6XHJcbiAgICAgICAgICAgIGJnVXJsID0gJy4vYXNzZXRzL2ltZ3MvaWNvbl9leGNlbC5wbmcnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGNhc2UgJy5wcHQnOlxyXG4gICAgICAgICAgY2FzZSAnLnBwdHgnOlxyXG4gICAgICAgICAgICBiZ1VybCA9ICcuL2Fzc2V0cy9pbWdzL2ljb25fcHB0LnBuZyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnLmRvYyc6XHJcbiAgICAgICAgICBjYXNlICcuZG9jeCc6XHJcbiAgICAgICAgICAgIGJnVXJsID0gJy4vYXNzZXRzL2ltZ3MvaWNvbl93b3JkLnBuZyc7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnLnBkZic6XHJcbiAgICAgICAgICAgIGJnVXJsID0gJy4vYXNzZXRzL2ltZ3MvaWNvbl9wZGYucG5nJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICcudHh0JzpcclxuICAgICAgICAgICAgYmdVcmwgPSAnLi9hc3NldHMvaW1ncy9pY29uX3RleHQucG5nJztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlICcuZ2lmJzpcclxuICAgICAgICAgIGNhc2UgJy5wbmcnOlxyXG4gICAgICAgICAgY2FzZSAnLmpwZyc6XHJcbiAgICAgICAgICBjYXNlICcuanBlZyc6XHJcbiAgICAgICAgICAgIGJnVXJsID0gdGhpcy5jbGllbnQuZ2F0ZXdheSArICcvZmlsZWNlbnRlci9maWxlLycgKyBkYXRhLmRhdGEuaWQ7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgY2FzZSAnLm1wMyc6XHJcbiAgICAgICAgICBjYXNlICcubXA0JzpcclxuICAgICAgICAgICAgYmdVcmwgPSAnLi9hc3NldHMvaW1ncy9pY29uX2ltZy5wbmcnO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGJnVXJsID0gJy4vYXNzZXRzL2ltZ3MvaWNvbl9vdGhlcnQucG5nJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmlsZUxpc3QucHVzaCh7XHJcbiAgICAgICAgICBiZ1VybDogYmdVcmwsXHJcbiAgICAgICAgICB1cmw6IHRoaXMuY2xpZW50LmdhdGV3YXkgKyAnL2ZpbGVjZW50ZXIvZmlsZS8nICsgZGF0YS5kYXRhLmlkLFxyXG4gICAgICAgICAgLi4uZGF0YS5kYXRhXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXNBbGxJbWcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maXJtRmlsZS5lbWl0KHRoaXMuZmlsZUxpc3QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3RvYXN0LmZhaWwoJ+S4iuS8oOWksei0pe+8jOivt+mHjeaWsOaTjeS9nO+8gScpO1xyXG4gICAgICB9XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgdGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgIHRoaXMuX3RvYXN0LmZhaWwoJ+S4iuS8oOWksei0pe+8jOivt+mHjeaWsOaTjeS9nO+8gScpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDmlofku7bnmoTlsZXnpLrmlrnlvI9cclxuICBpc0FsbEltZygpe1xyXG4gICAgY29uc3QgYWxsSW1nID0gdGhpcy5maWxlTGlzdC5ldmVyeSgoaXRlbSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnLmpwZycgfHwgaXRlbS50eXBlID09PSAnLmpwZWcnIHx8IGl0ZW0udHlwZSA9PT0gJy5naWYnIHx8IGl0ZW0udHlwZSA9PT0gJy5wbmcnO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zaG93VHlwZSA9IGFsbEltZyA/IFNob3dUeXBlLlNRVUFSRSA6IFNob3dUeXBlLkxJU1Q7XHJcbiAgfVxyXG5cclxuICAvLyDliKDpmaTmlofku7ZcclxuICBkZWxldGVGaWxlKCkge1xyXG4gICAgdGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnVwbG9hZFNlcnZpY2UuZGVsZXRlRmlsZSh0aGlzLmRlbGV0ZUl0ZW0uaWQpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgaWYgKGRhdGEubWVzc2FnZS5pbmRleE9mKCfmiJDlip8nKSAhPSAtMSkge1xyXG4gICAgICAgIHRoaXMuZmlsZUxpc3Quc3BsaWNlKHRoaXMuZGVsZXRlSXRlbS5pbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5pc0FsbEltZygpO1xyXG4gICAgICAgIHRoaXMuY29uZmlybUZpbGUuZW1pdCh0aGlzLmZpbGVMaXN0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl90b2FzdC5mYWlsKCfliKDpmaTlpLHotKXvvIzor7fph43mlrDmk43kvZzvvIEnKTtcclxuICAgICAgfVxyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuX3RvYXN0LmZhaWwoJ+WIoOmZpOWksei0pe+8jOivt+mHjeaWsOaTjeS9nO+8gScpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDliKDpmaTmlrnlnZfkuK3nmoTmlofku7ZcclxuICBkZWxldGVGaWxlQnlTcXVhcmUoaWQsIGluZGV4KSB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuZGVsZXRlSXRlbSA9IHtcclxuICAgICAgaWQ6IGlkLFxyXG4gICAgICBpbmRleDogaW5kZXhcclxuICAgIH07XHJcbiAgICB0aGlzLmRlbGV0ZUZpbGUoKTtcclxuICB9XHJcblxyXG4gIC8vIOWIoOmZpGxpc3TkuK3nmoTmlofku7ZcclxuICBkZWxldGVGaWxlQnlTd2lwZShpZCwgaW5kZXgpIHtcclxuICAgIHRoaXMuZGVsZXRlSXRlbSA9IHtcclxuICAgICAgaWQ6IGlkLFxyXG4gICAgICBpbmRleDogaW5kZXhcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOafpeeci+WbvueJh+aWh+S7tuivpuaDhVxyXG4gIHZpZXdJbWdGaWxlKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5maWxlQ2Fyb3VzZWxTZXJ2aWNlLnZpZXdJbWdGaWxlQ2Fyb3VzZWwoe1xyXG4gICAgICBmaWxlTGlzdDogdGhpcy5maWxlTGlzdCxcclxuICAgICAgaW5kZXg6IGluZGV4XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOafpeeci+WkmuenjeagvOW8j+aWh+S7tuivpuaDhVxyXG4gIHZpZXdPdGhlckZpbGUoaXRlbTogYW55KSB7XHJcbiAgICB0aGlzLmZpbGVTaG93U2VydmljZS52aWV3RmlsZVNob3coe1xyXG4gICAgICBpZDogaXRlbS5pZFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgZmlsZU1vZGVsIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGZpbGVuYW1lOiBzdHJpbmc7XHJcbiAgbGVuZ3RoOiBudW1iZXI7XHJcbiAgY2h1bmtTaXplOiBudW1iZXI7XHJcbiAgdXBsb2FkRGF0ZTogRGF0ZTtcclxuICBtZDU6IHN0cmluZztcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgZHVyYXRpb246IGFueTtcclxuICBzdG9yZVR5cGU6IHN0cmluZztcclxuICBzdG9yZUluZm86IHN0cmluZztcclxuICB1cmw6IHN0cmluZztcclxuICBiZ1VybDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaG93VHlwZSB7XHJcbiAgTElTVCA9ICdsaXN0JyxcclxuICBTUVVBUkUgPSAnc3F1YXJlJ1xyXG59XHJcbiJdfQ==