angular-material-datatransfer-lib
Version:
A HTML5 datatransfer UI for handling upload and download of multiple simultaneous files.
165 lines • 15.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/models/progress-container.model.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ReflectiveInjector } from '@angular/core';
import { DateUtil } from '../utils/date.util';
import { SizeContainer } from './size-container.model';
import { DecimalByteUnit } from '../enums/decimal-byte-unit.enum';
/**
* @record
*/
export function IProgressContainer() { }
if (false) {
/** @type {?} */
IProgressContainer.prototype.total;
/** @type {?} */
IProgressContainer.prototype.progressTimestamp;
/** @type {?} */
IProgressContainer.prototype.bitrateTimestamp;
/** @type {?} */
IProgressContainer.prototype.bitrate;
/** @type {?} */
IProgressContainer.prototype.percent;
/** @type {?} */
IProgressContainer.prototype.displayBitrate;
/** @type {?} */
IProgressContainer.prototype.displayTimeLeft;
/** @type {?} */
IProgressContainer.prototype.loadedSizeContainer;
/** @type {?} */
IProgressContainer.prototype.totalSizeContainer;
/**
* @param {?} total
* @return {?}
*/
IProgressContainer.prototype.reset = function (total) { };
/**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
IProgressContainer.prototype.updateProgress = function (now, loaded, interval) { };
/**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
IProgressContainer.prototype.updateBitrate = function (now, loaded, interval) { };
}
export class ProgressContainer {
/**
* @param {?} total
*/
constructor(total) {
/** @type {?} */
const injector = ReflectiveInjector.resolveAndCreate([DateUtil]);
this.dateUtil = injector.get(DateUtil);
this.bitrateSizeContainer = new SizeContainer();
this.loadedSizeContainer = new SizeContainer();
this.totalSizeContainer = new SizeContainer();
this.reset(total);
}
/**
* @param {?} total
* @return {?}
*/
reset(total) {
this.progressTimestamp = this.dateUtil.now();
this.bitrateTimestamp = this.dateUtil.now();
this.loaded = 0;
this.bitrate = 0;
this.percent = 0;
this.total = total;
this.displayBitrate = undefined;
this.displayTimeLeft = undefined;
this.bitrateSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.bitrate);
this.loadedSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.loaded);
this.totalSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.total);
}
/**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
updateProgress(now, loaded, interval) {
/** @type {?} */
const timeDiff = now - this.progressTimestamp;
// console.log('loaded: ' + loaded + ' total: ' + this.total);
if (!this.percent || timeDiff > interval) {
this.percent = Number((loaded / this.total * 100).toFixed(2));
this.loaded = loaded;
this.loadedSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.loaded);
this.progressTimestamp = now;
if (this.bitrate > 0) {
this.displayTimeLeft = this.dateUtil.format((this.total - this.loaded) * 8 / this.bitrate);
}
else {
this.displayTimeLeft = this.dateUtil.format(0);
}
}
else if (loaded >= this.total) {
this.percent = 100;
this.loaded = this.total;
}
}
/**
* @param {?} now
* @param {?} loaded
* @param {?} interval
* @return {?}
*/
updateBitrate(now, loaded, interval) {
/** @type {?} */
const timeDiff = now - this.bitrateTimestamp;
if (!this.bitrate || timeDiff > interval) {
this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8;
if (this.bitrate === Number.POSITIVE_INFINITY || this.bitrate === Number.NEGATIVE_INFINITY) {
this.bitrate = 0;
}
this.bitrateSizeContainer.updateDecimal(DecimalByteUnit.Byte, this.bitrate / 8);
this.displayBitrate = this.bitrateSizeContainer.displaySize + ' ' + this.bitrateSizeContainer.displayUnit + '/s';
this.bitrateTimestamp = now;
}
}
}
if (false) {
/**
* @type {?}
* @private
*/
ProgressContainer.prototype.dateUtil;
/**
* @type {?}
* @private
*/
ProgressContainer.prototype.loaded;
/**
* @type {?}
* @private
*/
ProgressContainer.prototype.bitrateSizeContainer;
/** @type {?} */
ProgressContainer.prototype.total;
/** @type {?} */
ProgressContainer.prototype.progressTimestamp;
/** @type {?} */
ProgressContainer.prototype.bitrateTimestamp;
/** @type {?} */
ProgressContainer.prototype.bitrate;
/** @type {?} */
ProgressContainer.prototype.percent;
/** @type {?} */
ProgressContainer.prototype.displayBitrate;
/** @type {?} */
ProgressContainer.prototype.displayTimeLeft;
/** @type {?} */
ProgressContainer.prototype.loadedSizeContainer;
/** @type {?} */
ProgressContainer.prototype.totalSizeContainer;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtY29udGFpbmVyLm1vZGVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tYXRlcmlhbC1kYXRhdHJhbnNmZXItbGliLyIsInNvdXJjZXMiOlsibGliL21vZGVscy9wcm9ncmVzcy1jb250YWluZXIubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBa0IsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBRWxFLHdDQWFDOzs7SUFaRyxtQ0FBYzs7SUFDZCwrQ0FBMEI7O0lBQzFCLDhDQUF5Qjs7SUFDekIscUNBQWdCOztJQUNoQixxQ0FBZ0I7O0lBQ2hCLDRDQUF1Qjs7SUFDdkIsNkNBQXdCOztJQUN4QixpREFBb0M7O0lBQ3BDLGdEQUFtQzs7Ozs7SUFDbkMsMERBQTJCOzs7Ozs7O0lBQzNCLG1GQUFvRTs7Ozs7OztJQUNwRSxrRkFBbUU7O0FBR3ZFLE1BQU0sT0FBTyxpQkFBaUI7Ozs7SUFlMUIsWUFBbUIsS0FBYTs7Y0FDdEIsUUFBUSxHQUFHLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQzs7Ozs7SUFFTSxLQUFLLENBQUMsS0FBYTtRQUN0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDOzs7Ozs7O0lBRU0sY0FBYyxDQUFDLEdBQVcsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7O2NBQ3pELFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQjtRQUM3Qyw4REFBOEQ7UUFDOUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksUUFBUSxHQUFHLFFBQVEsRUFBRTtZQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztZQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM5RjtpQkFBTTtnQkFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xEO1NBQ0o7YUFBTSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUM1QjtJQUNMLENBQUM7Ozs7Ozs7SUFFTSxhQUFhLENBQUMsR0FBVyxFQUFFLE1BQWMsRUFBRSxRQUFnQjs7Y0FDeEQsUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsR0FBRyxRQUFRLEVBQUU7WUFDdEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlELElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ3hGLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2FBQ3BCO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUNqSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztDQUNKOzs7Ozs7SUFyRUcscUNBQTJCOzs7OztJQUMzQixtQ0FBdUI7Ozs7O0lBQ3ZCLGlEQUE2Qzs7SUFFN0Msa0NBQXFCOztJQUNyQiw4Q0FBaUM7O0lBQ2pDLDZDQUFnQzs7SUFDaEMsb0NBQXVCOztJQUN2QixvQ0FBdUI7O0lBQ3ZCLDJDQUE4Qjs7SUFDOUIsNENBQStCOztJQUMvQixnREFBMkM7O0lBQzNDLCtDQUEwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlZmxlY3RpdmVJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRlVXRpbCB9IGZyb20gJy4uL3V0aWxzL2RhdGUudXRpbCc7XHJcbmltcG9ydCB7IElTaXplQ29udGFpbmVyLCBTaXplQ29udGFpbmVyIH0gZnJvbSAnLi9zaXplLWNvbnRhaW5lci5tb2RlbCc7XHJcbmltcG9ydCB7IERlY2ltYWxCeXRlVW5pdCB9IGZyb20gJy4uL2VudW1zL2RlY2ltYWwtYnl0ZS11bml0LmVudW0nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUHJvZ3Jlc3NDb250YWluZXIge1xyXG4gICAgdG90YWw6IG51bWJlcjsgLy8gYnl0ZXNcclxuICAgIHByb2dyZXNzVGltZXN0YW1wOiBudW1iZXI7IC8vIG1pbGxpc2Vjb25kc1xyXG4gICAgYml0cmF0ZVRpbWVzdGFtcDogbnVtYmVyOyAvLyBtaWxsaXNlY29uZHNcclxuICAgIGJpdHJhdGU6IG51bWJlcjsgLy8gYml0L3NcclxuICAgIHBlcmNlbnQ6IG51bWJlcjsgLy8gMC0xMDBcclxuICAgIGRpc3BsYXlCaXRyYXRlOiBzdHJpbmc7XHJcbiAgICBkaXNwbGF5VGltZUxlZnQ6IHN0cmluZztcclxuICAgIGxvYWRlZFNpemVDb250YWluZXI6IElTaXplQ29udGFpbmVyO1xyXG4gICAgdG90YWxTaXplQ29udGFpbmVyOiBJU2l6ZUNvbnRhaW5lcjtcclxuICAgIHJlc2V0KHRvdGFsOiBudW1iZXIpOiB2b2lkO1xyXG4gICAgdXBkYXRlUHJvZ3Jlc3Mobm93OiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCBpbnRlcnZhbDogbnVtYmVyKTogdm9pZDtcclxuICAgIHVwZGF0ZUJpdHJhdGUobm93OiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCBpbnRlcnZhbDogbnVtYmVyKTogdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQ29udGFpbmVyIGltcGxlbWVudHMgSVByb2dyZXNzQ29udGFpbmVyIHtcclxuICAgIHByaXZhdGUgZGF0ZVV0aWw6IERhdGVVdGlsO1xyXG4gICAgcHJpdmF0ZSBsb2FkZWQ6IG51bWJlcjsgLy8gYnl0ZXNcclxuICAgIHByaXZhdGUgYml0cmF0ZVNpemVDb250YWluZXI6IElTaXplQ29udGFpbmVyO1xyXG5cclxuICAgIHB1YmxpYyB0b3RhbDogbnVtYmVyO1xyXG4gICAgcHVibGljIHByb2dyZXNzVGltZXN0YW1wOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgYml0cmF0ZVRpbWVzdGFtcDogbnVtYmVyO1xyXG4gICAgcHVibGljIGJpdHJhdGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwZXJjZW50OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGlzcGxheUJpdHJhdGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBkaXNwbGF5VGltZUxlZnQ6IHN0cmluZztcclxuICAgIHB1YmxpYyBsb2FkZWRTaXplQ29udGFpbmVyOiBJU2l6ZUNvbnRhaW5lcjtcclxuICAgIHB1YmxpYyB0b3RhbFNpemVDb250YWluZXI6IElTaXplQ29udGFpbmVyO1xyXG5cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcih0b3RhbDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBSZWZsZWN0aXZlSW5qZWN0b3IucmVzb2x2ZUFuZENyZWF0ZShbRGF0ZVV0aWxdKTtcclxuICAgICAgICB0aGlzLmRhdGVVdGlsID0gaW5qZWN0b3IuZ2V0KERhdGVVdGlsKTtcclxuXHJcbiAgICAgICAgdGhpcy5iaXRyYXRlU2l6ZUNvbnRhaW5lciA9IG5ldyBTaXplQ29udGFpbmVyKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkZWRTaXplQ29udGFpbmVyID0gbmV3IFNpemVDb250YWluZXIoKTtcclxuICAgICAgICB0aGlzLnRvdGFsU2l6ZUNvbnRhaW5lciA9IG5ldyBTaXplQ29udGFpbmVyKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldCh0b3RhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlc2V0KHRvdGFsOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzVGltZXN0YW1wID0gdGhpcy5kYXRlVXRpbC5ub3coKTtcclxuICAgICAgICB0aGlzLmJpdHJhdGVUaW1lc3RhbXAgPSB0aGlzLmRhdGVVdGlsLm5vdygpO1xyXG4gICAgICAgIHRoaXMubG9hZGVkID0gMDtcclxuICAgICAgICB0aGlzLmJpdHJhdGUgPSAwO1xyXG4gICAgICAgIHRoaXMucGVyY2VudCA9IDA7XHJcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUJpdHJhdGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5VGltZUxlZnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5iaXRyYXRlU2l6ZUNvbnRhaW5lci51cGRhdGVEZWNpbWFsKERlY2ltYWxCeXRlVW5pdC5CeXRlLCB0aGlzLmJpdHJhdGUpO1xyXG4gICAgICAgIHRoaXMubG9hZGVkU2l6ZUNvbnRhaW5lci51cGRhdGVEZWNpbWFsKERlY2ltYWxCeXRlVW5pdC5CeXRlLCB0aGlzLmxvYWRlZCk7XHJcbiAgICAgICAgdGhpcy50b3RhbFNpemVDb250YWluZXIudXBkYXRlRGVjaW1hbChEZWNpbWFsQnl0ZVVuaXQuQnl0ZSwgdGhpcy50b3RhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVByb2dyZXNzKG5vdzogbnVtYmVyLCBsb2FkZWQ6IG51bWJlciwgaW50ZXJ2YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRpbWVEaWZmID0gbm93IC0gdGhpcy5wcm9ncmVzc1RpbWVzdGFtcDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZygnbG9hZGVkOiAnICsgbG9hZGVkICsgJyB0b3RhbDogJyArIHRoaXMudG90YWwpO1xyXG4gICAgICAgIGlmICghdGhpcy5wZXJjZW50IHx8IHRpbWVEaWZmID4gaW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgdGhpcy5wZXJjZW50ID0gTnVtYmVyKChsb2FkZWQgLyB0aGlzLnRvdGFsICogMTAwKS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSBsb2FkZWQ7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkU2l6ZUNvbnRhaW5lci51cGRhdGVEZWNpbWFsKERlY2ltYWxCeXRlVW5pdC5CeXRlLCB0aGlzLmxvYWRlZCk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NUaW1lc3RhbXAgPSBub3c7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmJpdHJhdGUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlUaW1lTGVmdCA9IHRoaXMuZGF0ZVV0aWwuZm9ybWF0KCh0aGlzLnRvdGFsIC0gdGhpcy5sb2FkZWQpICogOCAvIHRoaXMuYml0cmF0ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlUaW1lTGVmdCA9IHRoaXMuZGF0ZVV0aWwuZm9ybWF0KDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChsb2FkZWQgPj0gdGhpcy50b3RhbCkge1xyXG4gICAgICAgICAgICB0aGlzLnBlcmNlbnQgPSAxMDA7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gdGhpcy50b3RhbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJpdHJhdGUobm93OiBudW1iZXIsIGxvYWRlZDogbnVtYmVyLCBpbnRlcnZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdGltZURpZmYgPSBub3cgLSB0aGlzLmJpdHJhdGVUaW1lc3RhbXA7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJpdHJhdGUgfHwgdGltZURpZmYgPiBpbnRlcnZhbCkge1xyXG4gICAgICAgICAgICB0aGlzLmJpdHJhdGUgPSAobG9hZGVkIC0gdGhpcy5sb2FkZWQpICogKDEwMDAgLyB0aW1lRGlmZikgKiA4O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5iaXRyYXRlID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHwgdGhpcy5iaXRyYXRlID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYml0cmF0ZSA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5iaXRyYXRlU2l6ZUNvbnRhaW5lci51cGRhdGVEZWNpbWFsKERlY2ltYWxCeXRlVW5pdC5CeXRlLCB0aGlzLmJpdHJhdGUgLyA4KTtcclxuICAgICAgICAgICAgdGhpcy5kaXNwbGF5Qml0cmF0ZSA9IHRoaXMuYml0cmF0ZVNpemVDb250YWluZXIuZGlzcGxheVNpemUgKyAnICcgKyB0aGlzLmJpdHJhdGVTaXplQ29udGFpbmVyLmRpc3BsYXlVbml0ICsgJy9zJztcclxuICAgICAgICAgICAgdGhpcy5iaXRyYXRlVGltZXN0YW1wID0gbm93O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=