UNPKG

angular-material-datatransfer-lib

Version:

A HTML5 datatransfer UI for handling upload and download of multiple simultaneous files.

371 lines 26.1 kB
/** * @fileoverview added by tsickle * Generated from: lib/io/datatransfer.io.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ConfigService } from '../services/config.service'; import { StreamHashContainer } from '../models/hash-container.model'; import { HashTypeImplementation, HashTypeExtensions } from '../enums/hash-type.enum'; import { EncodingTypeImplementation, EncodingTypeExtensions } from '../enums/encoding-type.enum'; /** * @record */ export function IDatatransfer() { } if (false) { /** * @param {?} event * @param {?} callback * @return {?} */ IDatatransfer.prototype.on = function (event, callback) { }; /** * @return {?} */ IDatatransfer.prototype.isWorking = function () { }; /** * @return {?} */ IDatatransfer.prototype.startAll = function () { }; /** * @return {?} */ IDatatransfer.prototype.pauseAll = function () { }; /** * @return {?} */ IDatatransfer.prototype.removeAll = function () { }; /** * @param {?} item * @return {?} */ IDatatransfer.prototype.addItem = function (item) { }; /** * @param {?} item * @return {?} */ IDatatransfer.prototype.removeItem = function (item) { }; /** * @param {?} item * @return {?} */ IDatatransfer.prototype.retryItem = function (item) { }; } /** * @abstract */ var /** * @abstract */ BaseDatatransfer = /** @class */ (function () { function BaseDatatransfer(logger, guidUtil, cryptoService) { this.logger = logger; this.guidUtil = guidUtil; this.cryptoService = cryptoService; this.events = []; this._isWorking = false; } /** * @param {?} event * @param {?} callback * @return {?} */ BaseDatatransfer.prototype.on = /** * @param {?} event * @param {?} callback * @return {?} */ function (event, callback) { this.events.push(event.toLowerCase(), callback); }; /** * @protected * @param {...?} args * @return {?} */ BaseDatatransfer.prototype.fire = /** * @protected * @param {...?} args * @return {?} */ function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } /** @type {?} */ var event = args[0].toLowerCase(); // Find event listeners, and support pseudo-event `catchAll` for (var i = 0; i <= this.events.length; i += 2) { if (this.events[i] === event) { this.events[i + 1].apply(this, args.slice(1)); } if (this.events[i] === 'catchall') { this.events[i + 1].apply(null, args); } } }; /** * @protected * @return {?} */ BaseDatatransfer.prototype.updateZone = /** * @protected * @return {?} */ function () { this.fire('zoneUpdated'); }; /** * @protected * @param {?} item * @param {?} status * @param {?=} message * @return {?} */ BaseDatatransfer.prototype.changeItemStatus = /** * @protected * @param {?} item * @param {?} status * @param {?=} message * @return {?} */ function (item, status, message) { this.fire('itemStatusChanged', item, status, message); }; /** * @protected * @param {?} item * @param {?} progress * @return {?} */ BaseDatatransfer.prototype.updateItemProgress = /** * @protected * @param {?} item * @param {?} progress * @return {?} */ function (item, progress) { this.fire('itemProgressUpdated', item, progress); }; /** * @protected * @param {?} transferType * @param {?} progress * @return {?} */ BaseDatatransfer.prototype.updateOverallProgress = /** * @protected * @param {?} transferType * @param {?} progress * @return {?} */ function (transferType, progress) { this.fire('overallProgressUpdated', transferType, progress); }; /** * @protected * @param {?} size * @return {?} */ BaseDatatransfer.prototype.updateOverallSize = /** * @protected * @param {?} size * @return {?} */ function (size) { this.fire('overallSizeUpdated', size); }; /** * @return {?} */ BaseDatatransfer.prototype.isWorking = /** * @return {?} */ function () { return this._isWorking; }; /** * @param {?} item * @return {?} */ BaseDatatransfer.prototype.addItem = /** * @param {?} item * @return {?} */ function (item) { this.fire('itemAdded', item); }; /** * @protected * @return {?} */ BaseDatatransfer.prototype.generateUniqueIdentifier = /** * @protected * @return {?} */ function () { return this.guidUtil.createGuid(); }; /** * @protected * @param {?} item * @param {?} file * @param {?} continueCallback * @param {?} cancelCallback * @return {?} */ BaseDatatransfer.prototype.preprocessHash = /** * @protected * @param {?} item * @param {?} file * @param {?} continueCallback * @param {?} cancelCallback * @return {?} */ function (item, file, continueCallback, cancelCallback) { /** @type {?} */ var successCallback = (/** * @param {?} container * @return {?} */ function (container) { /** @type {?} */ var that = (/** @type {?} */ (this)); if (container.hashString) { // const seconds = (container.endDate.getTime() - container.startDate.getTime()) / 1000; // console.log('file hashing took ' + seconds + ' seconds'); /** @type {?} */ var xhr_1 = new XMLHttpRequest(); /** @type {?} */ var responseHandler = (/** * @param {?} e * @return {?} */ function (e) { // ignore response if container has been cancelled if (!container.isCancelled()) { if (xhr_1.status === 200) { item.message = xhr_1.responseText; cancelCallback(); } else { continueCallback(); } } }); xhr_1.addEventListener('load', responseHandler, false); xhr_1.addEventListener('error', responseHandler, false); xhr_1.addEventListener('timeout', responseHandler, false); /** @type {?} */ var params = []; params = params.concat([ [ConfigService.settings.core.preprocessHashParameterName, container.hashString], [ConfigService.settings.core.preprocessHashFileNameParameterName, item.name] ] .map((/** * @param {?} pair * @return {?} */ function (pair) { return [ pair[0], encodeURIComponent(pair[1]) ].join('='); }))); xhr_1.open(ConfigService.settings.core.preprocessHashMethod, ConfigService.settings.core.getTarget('preprocessHash', params)); xhr_1.send(null); } else { continueCallback(); } }).bind(this); /** @type {?} */ var errorCallback = (/** * @param {?} event * @param {?} container * @return {?} */ function (event, container) { console.log(event); continueCallback(); }); if (!item.preprocessContainer.isCancelled() && item.preprocessContainer instanceof StreamHashContainer) { // continue } else { /** @type {?} */ var hashType = HashTypeExtensions.toEnum(HashTypeImplementation.Internal, ConfigService.settings.core.preprocessHashFunctionName); /** @type {?} */ var encodingType = EncodingTypeExtensions.toEnum(EncodingTypeImplementation.Internal, ConfigService.settings.core.preprocessHashEncodingName); /** @type {?} */ var inputEncodingType = EncodingTypeExtensions.toEnum(EncodingTypeImplementation.Internal, ConfigService.settings.core.preprocessHashInputEncodingName); item.preprocessContainer = this.cryptoService.createStreamHashContainer(file, hashType, encodingType, inputEncodingType, successCallback, errorCallback); } // wait for the initial mat-progress-spinner animation to complete setTimeout((/** * @return {?} */ function () { item.preprocessContainer.run(); }), 1000); }; return BaseDatatransfer; }()); /** * @abstract */ export { BaseDatatransfer }; if (false) { /** * @type {?} * @private */ BaseDatatransfer.prototype.events; /** * @type {?} * @protected */ BaseDatatransfer.prototype._isWorking; /** * @type {?} * @protected */ BaseDatatransfer.prototype.logger; /** * @type {?} * @protected */ BaseDatatransfer.prototype.guidUtil; /** * @type {?} * @protected */ BaseDatatransfer.prototype.cryptoService; /** * @abstract * @return {?} */ BaseDatatransfer.prototype.startAll = function () { }; /** * @abstract * @return {?} */ BaseDatatransfer.prototype.pauseAll = function () { }; /** * @abstract * @return {?} */ BaseDatatransfer.prototype.removeAll = function () { }; /** * @abstract * @param {?} item * @return {?} */ BaseDatatransfer.prototype.removeItem = function (item) { }; /** * @abstract * @param {?} item * @return {?} */ BaseDatatransfer.prototype.retryItem = function (item) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRyYW5zZmVyLmlvLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1tYXRlcmlhbC1kYXRhdHJhbnNmZXItbGliLyIsInNvdXJjZXMiOlsibGliL2lvL2RhdGF0cmFuc2Zlci5pby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU0zRCxPQUFPLEVBQXdCLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7QUFFakcsbUNBU0M7Ozs7Ozs7SUFSRyw0REFBNEM7Ozs7SUFDNUMsb0RBQXFCOzs7O0lBQ3JCLG1EQUFpQjs7OztJQUNqQixtREFBaUI7Ozs7SUFDakIsb0RBQWtCOzs7OztJQUNsQixzREFBdUM7Ozs7O0lBQ3ZDLHlEQUEwQzs7Ozs7SUFDMUMsd0RBQXlDOzs7OztBQUc3Qzs7OztJQUtJLDBCQUFzQixNQUFxQixFQUNyQixRQUFrQixFQUNsQixhQUE0QjtRQUY1QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFMMUMsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNWLGVBQVUsR0FBRyxLQUFLLENBQUM7SUFLN0IsQ0FBQzs7Ozs7O0lBRU0sNkJBQUU7Ozs7O0lBQVQsVUFBVSxLQUFhLEVBQUUsUUFBa0I7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7Ozs7OztJQUVTLCtCQUFJOzs7OztJQUFkO1FBQWUsY0FBYzthQUFkLFVBQWMsRUFBZCxxQkFBYyxF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Ozs7O0lBRWpDLHVEQUFrQzs7Ozs7O0lBTWxDLDREQUEwRDs7Ozs7O0lBRTFELDJEQUF5RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEYXRhdHJhbnNmZXJJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGF0cmFuc2Zlci1pdGVtLm1vZGVsJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR3VpZFV0aWwgfSBmcm9tICcuLi91dGlscy9ndWlkLnV0aWwnO1xyXG5pbXBvcnQgeyBDcnlwdG9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY3J5cHRvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2ZlclN0YXR1cyB9IGZyb20gJy4uL2VudW1zL3RyYW5zZmVyLXN0YXR1cy5lbnVtJztcclxuaW1wb3J0IHsgVHJhbnNmZXJUeXBlIH0gZnJvbSAnLi4vZW51bXMvdHJhbnNmZXItdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgSVN0cmVhbUhhc2hDb250YWluZXIsIFN0cmVhbUhhc2hDb250YWluZXIgfSBmcm9tICcuLi9tb2RlbHMvaGFzaC1jb250YWluZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBIYXNoVHlwZUltcGxlbWVudGF0aW9uLCBIYXNoVHlwZUV4dGVuc2lvbnMgfSBmcm9tICcuLi9lbnVtcy9oYXNoLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IEVuY29kaW5nVHlwZUltcGxlbWVudGF0aW9uLCBFbmNvZGluZ1R5cGVFeHRlbnNpb25zIH0gZnJvbSAnLi4vZW51bXMvZW5jb2RpbmctdHlwZS5lbnVtJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURhdGF0cmFuc2ZlciB7XHJcbiAgICBvbihldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkO1xyXG4gICAgaXNXb3JraW5nKCk6IGJvb2xlYW47XHJcbiAgICBzdGFydEFsbCgpOiB2b2lkO1xyXG4gICAgcGF1c2VBbGwoKTogdm9pZDtcclxuICAgIHJlbW92ZUFsbCgpOiB2b2lkO1xyXG4gICAgYWRkSXRlbShpdGVtOiBJRGF0YXRyYW5zZmVySXRlbSk6IHZvaWQ7XHJcbiAgICByZW1vdmVJdGVtKGl0ZW06IElEYXRhdHJhbnNmZXJJdGVtKTogdm9pZDtcclxuICAgIHJldHJ5SXRlbShpdGVtOiBJRGF0YXRyYW5zZmVySXRlbSk6IHZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGF0YXRyYW5zZmVyIGltcGxlbWVudHMgSURhdGF0cmFuc2ZlciB7XHJcblxyXG4gICAgcHJpdmF0ZSBldmVudHMgPSBbXTtcclxuICAgIHByb3RlY3RlZCBfaXNXb3JraW5nID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBndWlkVXRpbDogR3VpZFV0aWwsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgY3J5cHRvU2VydmljZTogQ3J5cHRvU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbihldmVudDogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKGV2ZW50LnRvTG93ZXJDYXNlKCksIGNhbGxiYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZmlyZSguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gYXJnc1swXS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIC8vIEZpbmQgZXZlbnQgbGlzdGVuZXJzLCBhbmQgc3VwcG9ydCBwc2V1ZG8tZXZlbnQgYGNhdGNoQWxsYFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHRoaXMuZXZlbnRzLmxlbmd0aDsgaSArPSAyKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmV2ZW50c1tpXSA9PT0gZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW2kgKyAxXS5hcHBseSh0aGlzLCBhcmdzLnNsaWNlKDEpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5ldmVudHNbaV0gPT09ICdjYXRjaGFsbCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRzW2kgKyAxXS5hcHBseShudWxsLCBhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlWm9uZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ3pvbmVVcGRhdGVkJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNoYW5nZUl0ZW1TdGF0dXMoaXRlbTogSURhdGF0cmFuc2Zlckl0ZW0sIHN0YXR1czogVHJhbnNmZXJTdGF0dXMsIG1lc3NhZ2U/OiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ2l0ZW1TdGF0dXNDaGFuZ2VkJywgaXRlbSwgc3RhdHVzLCBtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlSXRlbVByb2dyZXNzKGl0ZW06IElEYXRhdHJhbnNmZXJJdGVtLCBwcm9ncmVzczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdpdGVtUHJvZ3Jlc3NVcGRhdGVkJywgaXRlbSwgcHJvZ3Jlc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB1cGRhdGVPdmVyYWxsUHJvZ3Jlc3ModHJhbnNmZXJUeXBlOiBUcmFuc2ZlclR5cGUsIHByb2dyZXNzOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZpcmUoJ292ZXJhbGxQcm9ncmVzc1VwZGF0ZWQnLCB0cmFuc2ZlclR5cGUsIHByb2dyZXNzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgdXBkYXRlT3ZlcmFsbFNpemUoc2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdvdmVyYWxsU2l6ZVVwZGF0ZWQnLCBzaXplKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNXb3JraW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1dvcmtpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IHN0YXJ0QWxsKCk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IHBhdXNlQWxsKCk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IHJlbW92ZUFsbCgpOiB2b2lkO1xyXG5cclxuICAgIHB1YmxpYyBhZGRJdGVtKGl0ZW06IElEYXRhdHJhbnNmZXJJdGVtKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJlKCdpdGVtQWRkZWQnLCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgcmVtb3ZlSXRlbShpdGVtOiBJRGF0YXRyYW5zZmVySXRlbSk6IHZvaWQ7XHJcblxyXG4gICAgcHVibGljIGFic3RyYWN0IHJldHJ5SXRlbShpdGVtOiBJRGF0YXRyYW5zZmVySXRlbSk6IHZvaWQ7XHJcblxyXG4gICAgcHJvdGVjdGVkIGdlbmVyYXRlVW5pcXVlSWRlbnRpZmllcigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmd1aWRVdGlsLmNyZWF0ZUd1aWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgcHJlcHJvY2Vzc0hhc2goaXRlbTogSURhdGF0cmFuc2Zlckl0ZW0sIGZpbGU6IEZpbGUsIGNvbnRpbnVlQ2FsbGJhY2s6IEZ1bmN0aW9uLCBjYW5jZWxDYWxsYmFjazogRnVuY3Rpb24pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzdWNjZXNzQ2FsbGJhY2sgPSBmdW5jdGlvbihjb250YWluZXI6IElTdHJlYW1IYXNoQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRoYXQgPSB0aGlzIGFzIEJhc2VEYXRhdHJhbnNmZXI7XHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXIuaGFzaFN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc3Qgc2Vjb25kcyA9IChjb250YWluZXIuZW5kRGF0ZS5nZXRUaW1lKCkgLSBjb250YWluZXIuc3RhcnREYXRlLmdldFRpbWUoKSkgLyAxMDAwO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2ZpbGUgaGFzaGluZyB0b29rICcgKyBzZWNvbmRzICsgJyBzZWNvbmRzJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VIYW5kbGVyID0gZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSByZXNwb25zZSBpZiBjb250YWluZXIgaGFzIGJlZW4gY2FuY2VsbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250YWluZXIuaXNDYW5jZWxsZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm1lc3NhZ2UgPSB4aHIucmVzcG9uc2VUZXh0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlQ2FsbGJhY2soKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlc3BvbnNlSGFuZGxlciwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgcmVzcG9uc2VIYW5kbGVyLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigndGltZW91dCcsIHJlc3BvbnNlSGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwYXJhbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5jb25jYXQoXHJcbiAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBbQ29uZmlnU2VydmljZS5zZXR0aW5ncy5jb3JlLnByZXByb2Nlc3NIYXNoUGFyYW1ldGVyTmFtZSwgY29udGFpbmVyLmhhc2hTdHJpbmddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbQ29uZmlnU2VydmljZS5zZXR0aW5ncy5jb3JlLnByZXByb2Nlc3NIYXNoRmlsZU5hbWVQYXJhbWV0ZXJOYW1lLCBpdGVtLm5hbWVdXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKHBhaXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpclswXSwgZW5jb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLmpvaW4oJz0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oQ29uZmlnU2VydmljZS5zZXR0aW5ncy5jb3JlLnByZXByb2Nlc3NIYXNoTWV0aG9kLCBDb25maWdTZXJ2aWNlLnNldHRpbmdzLmNvcmUuZ2V0VGFyZ2V0KCdwcmVwcm9jZXNzSGFzaCcsIHBhcmFtcykpO1xyXG4gICAgICAgICAgICAgICAgeGhyLnNlbmQobnVsbCk7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGludWVDYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIGNvbnN0IGVycm9yQ2FsbGJhY2sgPSBmdW5jdGlvbihldmVudDogYW55LCBjb250YWluZXI6IElTdHJlYW1IYXNoQ29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgICAgICAgICAgY29udGludWVDYWxsYmFjaygpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmICghaXRlbS5wcmVwcm9jZXNzQ29udGFpbmVyLmlzQ2FuY2VsbGVkKCkgJiYgaXRlbS5wcmVwcm9jZXNzQ29udGFpbmVyIGluc3RhbmNlb2YgU3RyZWFtSGFzaENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAvLyBjb250aW51ZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc2hUeXBlID0gSGFzaFR5cGVFeHRlbnNpb25zLnRvRW51bShcclxuICAgICAgICAgICAgICAgIEhhc2hUeXBlSW1wbGVtZW50YXRpb24uSW50ZXJuYWwsIENvbmZpZ1NlcnZpY2Uuc2V0dGluZ3MuY29yZS5wcmVwcm9jZXNzSGFzaEZ1bmN0aW9uTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kaW5nVHlwZSA9IEVuY29kaW5nVHlwZUV4dGVuc2lvbnMudG9FbnVtKFxyXG4gICAgICAgICAgICAgICAgRW5jb2RpbmdUeXBlSW1wbGVtZW50YXRpb24uSW50ZXJuYWwsIENvbmZpZ1NlcnZpY2Uuc2V0dGluZ3MuY29yZS5wcmVwcm9jZXNzSGFzaEVuY29kaW5nTmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RW5jb2RpbmdUeXBlID0gRW5jb2RpbmdUeXBlRXh0ZW5zaW9ucy50b0VudW0oXHJcbiAgICAgICAgICAgICAgICBFbmNvZGluZ1R5cGVJbXBsZW1lbnRhdGlvbi5JbnRlcm5hbCwgQ29uZmlnU2VydmljZS5zZXR0aW5ncy5jb3JlLnByZXByb2Nlc3NIYXNoSW5wdXRFbmNvZGluZ05hbWUpO1xyXG5cclxuICAgICAgICAgICAgaXRlbS5wcmVwcm9jZXNzQ29udGFpbmVyID0gdGhpcy5jcnlwdG9TZXJ2aWNlLmNyZWF0ZVN0cmVhbUhhc2hDb250YWluZXIoXHJcbiAgICAgICAgICAgICAgICBmaWxlLCBoYXNoVHlwZSwgZW5jb2RpbmdUeXBlLCBpbnB1dEVuY29kaW5nVHlwZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHdhaXQgZm9yIHRoZSBpbml0aWFsIG1hdC1wcm9ncmVzcy1zcGlubmVyIGFuaW1hdGlvbiB0byBjb21wbGV0ZVxyXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGl0ZW0ucHJlcHJvY2Vzc0NvbnRhaW5lci5ydW4oKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxufVxyXG4iXX0=