com.phloxui
Version:
PhloxUI Ng2+ Framework
623 lines (622 loc) • 39.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Input, Output, EventEmitter, ApplicationRef } from '@angular/core';
import { Option } from '../../../../../decorator/Option.decorator';
import { NeedFocusService } from '../../../../../service/NeedFocusService.service';
import { FileSelector } from '../../../../../component/dataview/input/FileSelector.component';
import { I18N } from '../../../../../decorator/I18N.decorator';
var /** @type {?} */ TYPE_NAME = "material-file-selector";
var MaterialFileSelector = /** @class */ (function (_super) {
tslib_1.__extends(MaterialFileSelector, _super);
function MaterialFileSelector(elementRef, needFocusService, applicationRef) {
var _this = _super.call(this, elementRef, needFocusService) || this;
_this._applicationRef = applicationRef;
_this._bgColor = '#ededed'; //extract(@CLR_1, 7);
return _this;
}
/**
* @return {?}
*/
MaterialFileSelector.prototype.ngOnInit = /**
* @return {?}
*/
function () {
_super.prototype.ngOnInit.call(this);
};
/**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
MaterialFileSelector.prototype.onValidationEnd = /**
* @param {?} inputValue
* @param {?} results
* @return {?}
*/
function (inputValue, results) {
//! do sthing
};
/**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
MaterialFileSelector.prototype.onDataChange = /**
* @param {?} data
* @param {?} inputVal
* @return {?}
*/
function (data, inputVal) {
// throw new Error("Method not implemented.");
};
/**
* @param {?} $event
* @return {?}
*/
MaterialFileSelector.prototype.doFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
// throw new Error("Method not implemented.");
};
/**
* @param {?} $event
* @return {?}
*/
MaterialFileSelector.prototype.doLostFocus = /**
* @param {?} $event
* @return {?}
*/
function ($event) {
// throw new Error("Method not implemented.");
};
/**
* @return {?}
*/
MaterialFileSelector.prototype.getAllowMultipleSelect = /**
* @return {?}
*/
function () {
return this.allowMultipleSelect;
};
/**
* @param {?} file
* @return {?}
*/
MaterialFileSelector.prototype.handleFiles = /**
* @param {?} file
* @return {?}
*/
function (file) {
if (this.isAccept(file.files)) {
this.addFiles(file.files, event);
}
};
/**
* @return {?}
*/
MaterialFileSelector.prototype.openFileSelector = /**
* @return {?}
*/
function () {
document.getElementById('file').click();
};
/**
* @return {?}
*/
MaterialFileSelector.prototype.isSelfDataDirty = /**
* @return {?}
*/
function () {
var /** @type {?} */ d1 = FileSelector.resolveMappedData(this.field, this.originalValue);
var /** @type {?} */ d2 = this.getInputValue();
if (d1 !== d2) {
return true;
}
return false;
};
/**
* @param {?} data
* @return {?}
*/
MaterialFileSelector.prototype.selfSaveData = /**
* @param {?} data
* @return {?}
*/
function (data) {
if (data !== undefined && data !== null) {
this.originalValue = JSON.parse(JSON.stringify(data));
}
else {
this.originalValue = data;
}
};
/**
* @return {?}
*/
MaterialFileSelector.prototype.selfResetData = /**
* @return {?}
*/
function () {
this.setInputValue(this.originalValue);
};
/**
* @return {?}
*/
MaterialFileSelector.prototype.getWidth = /**
* @return {?}
*/
function () {
return this.width;
};
/**
* @param {?} width
* @return {?}
*/
MaterialFileSelector.prototype.setWidth = /**
* @param {?} width
* @return {?}
*/
function (width) {
return this.width = width;
};
/**
* @return {?}
*/
MaterialFileSelector.prototype.getHeight = /**
* @return {?}
*/
function () {
return this.height;
};
/**
* @param {?} height
* @return {?}
*/
MaterialFileSelector.prototype.setHeight = /**
* @param {?} height
* @return {?}
*/
function (height) {
return this.height = height;
};
/**
* @return {?}
*/
MaterialFileSelector.prototype.getLabel = /**
* @return {?}
*/
function () {
return this.label;
};
/**
* @param {?} label
* @return {?}
*/
MaterialFileSelector.prototype.setLabel = /**
* @param {?} label
* @return {?}
*/
function (label) {
return this.label = label;
};
/**
* @return {?}
*/
MaterialFileSelector.prototype.getDescription = /**
* @return {?}
*/
function () {
return this.description;
};
/**
* @param {?} description
* @return {?}
*/
MaterialFileSelector.prototype.setDescription = /**
* @param {?} description
* @return {?}
*/
function (description) {
return this.description = description;
};
/**
* @param {?} event
* @param {?} format
* @param {?} data
* @return {?}
*/
MaterialFileSelector.prototype.isAcceptDragData = /**
* @param {?} event
* @param {?} format
* @param {?} data
* @return {?}
*/
function (event, format, data) {
return this.isAccept(event.dataTransfer.files);
};
/**
* @param {?} event
* @return {?}
*/
MaterialFileSelector.prototype.getDragOverDataTransfer = /**
* @param {?} event
* @return {?}
*/
function (event) {
return;
};
/**
* @param {?} event
* @return {?}
*/
MaterialFileSelector.prototype.onDragEnter = /**
* @param {?} event
* @return {?}
*/
function (event) {
this._bgColor = '#d6d6d6'; //extract(@CLR_1, 5);
this._applicationRef.tick();
};
/**
* @param {?} event
* @return {?}
*/
MaterialFileSelector.prototype.onDragOver = /**
* @param {?} event
* @return {?}
*/
function (event) {
};
/**
* @param {?} event
* @return {?}
*/
MaterialFileSelector.prototype.onDragLeave = /**
* @param {?} event
* @return {?}
*/
function (event) {
this._bgColor = '#ededed'; //extract(@CLR_1, 7);
this._applicationRef.tick();
};
/**
* @param {?} event
* @return {?}
*/
MaterialFileSelector.prototype.onDrop = /**
* @param {?} event
* @return {?}
*/
function (event) {
};
/**
* @param {?} event
* @param {?} data
* @return {?}
*/
MaterialFileSelector.prototype.onDropAccepted = /**
* @param {?} event
* @param {?} data
* @return {?}
*/
function (event, data) {
var _this = this;
this._bgColor = '#ededed'; //extract(@CLR_1, 7);
this._applicationRef.tick();
event.preventDefault();
var /** @type {?} */ files = event.dataTransfer.files;
this.addFiles(files, event);
clearTimeout(this._timeout);
this._timeout = setTimeout(function () {
_this.setDefaultState();
_this._applicationRef.tick();
}, 5000);
};
/**
* @param {?} event
* @return {?}
*/
MaterialFileSelector.prototype.onDropRejected = /**
* @param {?} event
* @return {?}
*/
function (event) {
var _this = this;
this._applicationRef.tick();
event.preventDefault();
clearTimeout(this._timeout);
this._timeout = setTimeout(function () {
_this.setDefaultState();
_this._applicationRef.tick();
}, 5000);
};
MaterialFileSelector.TYPE_NAME = TYPE_NAME;
MaterialFileSelector.decorators = [
{ type: Component, args: [{
moduleId: module.id,
selector: TYPE_NAME,
template: "<div (click)=\"file.click()\" class=\"material-file-selector\" [style.background-color]=\"_bgColor\" [dropAccept]=\"'FILES'\"\n [phxDroppable]=\"this\" [style.width]=\"getWidth()\" [style.height]=\"getHeight()\">\n <div class=\"material-file-selector-box\">\n <div class=\"icon-clouds \">\n <div class=\"icon-clouds-text\">\n {{getFiles().length}}\n <div class=\"icon-clouds-text-type\">\n {{getLabel()}}\n </div>\n </div>\n </div>\n <div *ngIf=\"isAcceptStatus() && getAlertMessage() === null\">\n {{getDescription()}}\n </div>\n <div *ngIf=\"isAcceptStatus() && getAlertMessage() !== null\">\n {{getAlertMessage()}}\n </div>\n <div *ngIf=\"!isAcceptStatus() && getAlertMessage() !== null\" style=\"color: red;\">\n {{getAlertMessage()}}\n </div>\n </div>\n <input #file type=\"file\" style=\"display: none;\" [multiple]=\"getAllowMultipleSelect()\" (change)=\"handleFiles(file)\">\n</div>\n",
},] },
];
/** @nocollapse */
MaterialFileSelector.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: NeedFocusService, },
{ type: ApplicationRef, },
]; };
MaterialFileSelector.propDecorators = {
"dataParent": [{ type: Input },],
"ignoreParentData": [{ type: Input },],
"data": [{ type: Input },],
"ignoreParentDisabled": [{ type: Input },],
"delegateHistory": [{ type: Input },],
"onDisabled": [{ type: Input },],
"onEnabled": [{ type: Input },],
"loadingEnabled": [{ type: Input },],
"i18nKey": [{ type: Input },],
"bypass": [{ type: Input, args: ['i18nBypass',] },],
"options": [{ type: Input },],
"disabled": [{ type: Input },],
"field": [{ type: Input },],
"name": [{ type: Input },],
"typeOfData": [{ type: Input },],
"readOnly": [{ type: Input },],
"help": [{ type: Input },],
"maxFilesize": [{ type: Input },],
"allowMultipleSelect": [{ type: Input },],
"fileTypes": [{ type: Input },],
"label": [{ type: Input },],
"description": [{ type: Input },],
"width": [{ type: Input },],
"height": [{ type: Input },],
"loadEvent": [{ type: Output, args: ['phxLoad',] },],
"startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },],
"endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },],
"beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },],
"focusEvent": [{ type: Output, args: ['phxFocus',] },],
"beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },],
"lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },],
"beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },],
"changeEvent": [{ type: Output, args: ['phxChange',] },],
"beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },],
"selectEvent": [{ type: Output, args: ['phxSelect',] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialFileSelector.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialFileSelector.prototype, "data", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], MaterialFileSelector.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], MaterialFileSelector.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "i18nKey", void 0);
tslib_1.__decorate([
Option('i18nBypass'),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "bypass", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "disabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "field", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "name", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "typeOfData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "readOnly", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Object)
], MaterialFileSelector.prototype, "help", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Number)
], MaterialFileSelector.prototype, "maxFilesize", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], MaterialFileSelector.prototype, "allowMultipleSelect", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Array)
], MaterialFileSelector.prototype, "fileTypes", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "label", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "description", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "width", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", String)
], MaterialFileSelector.prototype, "height", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option('startValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "startValidateEvent", void 0);
tslib_1.__decorate([
Option('endValidate'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "endValidateEvent", void 0);
tslib_1.__decorate([
Option('beforeFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "beforeFocusEvent", void 0);
tslib_1.__decorate([
Option('focus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "focusEvent", void 0);
tslib_1.__decorate([
Option('beforeLostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "beforeLostFocusEvent", void 0);
tslib_1.__decorate([
Option('lostFocus'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "lostFocusEvent", void 0);
tslib_1.__decorate([
Option('beforeChange'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "beforeChangeEvent", void 0);
tslib_1.__decorate([
Option('change'),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "changeEvent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "beforeSelectEvent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", EventEmitter)
], MaterialFileSelector.prototype, "selectEvent", void 0);
return MaterialFileSelector;
}(FileSelector));
export { MaterialFileSelector };
function MaterialFileSelector_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
MaterialFileSelector.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
MaterialFileSelector.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
MaterialFileSelector.propDecorators;
/** @type {?} */
MaterialFileSelector.TYPE_NAME;
/** @type {?} */
MaterialFileSelector.prototype.dataParent;
/** @type {?} */
MaterialFileSelector.prototype.ignoreParentData;
/** @type {?} */
MaterialFileSelector.prototype.data;
/** @type {?} */
MaterialFileSelector.prototype.ignoreParentDisabled;
/** @type {?} */
MaterialFileSelector.prototype.delegateHistory;
/** @type {?} */
MaterialFileSelector.prototype.onDisabled;
/** @type {?} */
MaterialFileSelector.prototype.onEnabled;
/** @type {?} */
MaterialFileSelector.prototype.loadingEnabled;
/** @type {?} */
MaterialFileSelector.prototype.i18nKey;
/** @type {?} */
MaterialFileSelector.prototype.bypass;
/** @type {?} */
MaterialFileSelector.prototype.options;
/** @type {?} */
MaterialFileSelector.prototype.disabled;
/** @type {?} */
MaterialFileSelector.prototype.field;
/** @type {?} */
MaterialFileSelector.prototype.name;
/** @type {?} */
MaterialFileSelector.prototype.typeOfData;
/** @type {?} */
MaterialFileSelector.prototype.readOnly;
/** @type {?} */
MaterialFileSelector.prototype.help;
/** @type {?} */
MaterialFileSelector.prototype.maxFilesize;
/** @type {?} */
MaterialFileSelector.prototype.allowMultipleSelect;
/** @type {?} */
MaterialFileSelector.prototype.fileTypes;
/** @type {?} */
MaterialFileSelector.prototype.label;
/** @type {?} */
MaterialFileSelector.prototype.description;
/** @type {?} */
MaterialFileSelector.prototype.width;
/** @type {?} */
MaterialFileSelector.prototype.height;
/** @type {?} */
MaterialFileSelector.prototype.loadEvent;
/** @type {?} */
MaterialFileSelector.prototype.startValidateEvent;
/** @type {?} */
MaterialFileSelector.prototype.endValidateEvent;
/** @type {?} */
MaterialFileSelector.prototype.beforeFocusEvent;
/** @type {?} */
MaterialFileSelector.prototype.focusEvent;
/** @type {?} */
MaterialFileSelector.prototype.beforeLostFocusEvent;
/** @type {?} */
MaterialFileSelector.prototype.lostFocusEvent;
/** @type {?} */
MaterialFileSelector.prototype.beforeChangeEvent;
/** @type {?} */
MaterialFileSelector.prototype.changeEvent;
/** @type {?} */
MaterialFileSelector.prototype.beforeSelectEvent;
/** @type {?} */
MaterialFileSelector.prototype.selectEvent;
/** @type {?} */
MaterialFileSelector.prototype.originalValue;
/** @type {?} */
MaterialFileSelector.prototype._bgColor;
/** @type {?} */
MaterialFileSelector.prototype._applicationRef;
/** @type {?} */
MaterialFileSelector.prototype._timeout;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWF0ZXJpYWxGaWxlU2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvdGhlbWUvbWF0ZXJpYWwvY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L01hdGVyaWFsRmlsZVNlbGVjdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFJbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdFQUFnRSxDQUFDO0FBRTlGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUkvRCxxQkFBTSxTQUFTLEdBQVcsd0JBQXdCLENBQUM7O0lBOEJULGdEQUFZO0lBaUlsRCw4QkFBWSxVQUFzQixFQUFFLGdCQUFrQyxFQUFFLGNBQThCO1FBQXRHLFlBQ0ksa0JBQU0sVUFBVSxFQUFFLGdCQUFnQixDQUFDLFNBSXRDO1FBRkcsS0FBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7UUFDdEMsS0FBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7O0tBQzdCOzs7O0lBRU0sdUNBQVE7Ozs7UUFDWCxpQkFBTSxRQUFRLFdBQUUsQ0FBQzs7Ozs7OztJQUdYLDhDQUFlOzs7OztJQUF6QixVQUEwQixVQUFlLEVBQUUsT0FBMkI7O0tBRXJFOzs7Ozs7SUFFUywyQ0FBWTs7Ozs7SUFBdEIsVUFBdUIsSUFBUyxFQUFFLFFBQWE7O0tBRTlDOzs7OztJQUVTLHNDQUFPOzs7O0lBQWpCLFVBQWtCLE1BQWE7O0tBRTlCOzs7OztJQUVTLDBDQUFXOzs7O0lB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QUFNLEVBQUU7Ozs7UUFJUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFHUixJQUFJLEVBQUU7UUFDTixNQUFNLEVBQUU7Ozs7UUFHUixJQUFJLEVBQUU7UUFDTixNQUFNLEVBQUU7Ozs7UUFJUixNQUFNLEVBQUU7Ozs7UUFHUixNQUFNLEVBQUU7Ozs7UUFNUixNQUFNLENBQUMsTUFBTSxDQUFDOzBDQUNNLFlBQVk7OztRQUloQyxNQUFNLENBQUMsZUFBZSxDQUFDOzBDQUNNLFlBQVk7OztRQUV6QyxNQUFNLENBQUMsYUFBYSxDQUFDOzBDQUNNLFlBQVk7OztRQUV2QyxNQUFNLENBQUMsYUFBYSxDQUFDOzBDQUNNLFlBQVk7OztRQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDOzBDQUNNLFlBQVk7OztRQUVqQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7MENBQ00sWUFBWTs7O1FBRTNDLE1BQU0sQ0FBQyxXQUFXLENBQUM7MENBQ00sWUFBWTs7O1FBRXJDLE1BQU0sQ0FBQyxjQUFjLENBQUM7MENBQ00sWUFBWTs7O1FBRXhDLE1BQU0sQ0FBQyxRQUFRLENBQUM7MENBQ00sWUFBWTs7O1FBR2xDLE1BQU0sRUFBRTswQ0FDb0IsWUFBWTs7O1FBRXhDLE1BQU0sRUFBRTswQ0FDYyxZQUFZOzsrQkFwS3ZDO0VBMEMwQyxZQUFZO1NBQXpDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEFwcGxpY2F0aW9uUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZS9OZWVkRm9jdXNTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbXBvbmVudC9tb2RlbC9WYWxpZGF0aW9uUmVzdWx0JztcbmltcG9ydCB7IElEcm9wcGFibGUgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvSURyb3BwYWJsZSc7XG5pbXBvcnQgeyBEcmFnRGF0YVRyYW5zZmVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L21vZGVsL0RyYWdEYXRhVHJhbnNmZXInO1xuaW1wb3J0IHsgRmlsZVNlbGVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29tcG9uZW50L2RhdGF2aWV3L2lucHV0L0ZpbGVTZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb21wb25lbnQvSUhhc0RhdGEnO1xuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RlY29yYXRvci9JMThOLmRlY29yYXRvcic7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcIm1hdGVyaWFsLWZpbGUtc2VsZWN0b3JcIjtcblxuQENvbXBvbmVudCh7XG4gICAgbW9kdWxlSWQ6IG1vZHVsZS5pZCxcbiAgICBzZWxlY3RvcjogVFlQRV9OQU1FLFxuICAgIHRlbXBsYXRlOiBgPGRpdiAoY2xpY2spPVwiZmlsZS5jbGljaygpXCIgY2xhc3M9XCJtYXRlcmlhbC1maWxlLXNlbGVjdG9yXCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiX2JnQ29sb3JcIiBbZHJvcEFjY2VwdF09XCInRklMRVMnXCJcbiAgICBbcGh4RHJvcHBhYmxlXT1cInRoaXNcIiBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGgoKVwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SGVpZ2h0KClcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWF0ZXJpYWwtZmlsZS1zZWxlY3Rvci1ib3hcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2xvdWRzIFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2xvdWRzLXRleHRcIj5cbiAgICAgICAgICAgICAgICB7e2dldEZpbGVzKCkubGVuZ3RofX1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jbG91ZHMtdGV4dC10eXBlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Z2V0TGFiZWwoKX19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0FjY2VwdFN0YXR1cygpICYmIGdldEFsZXJ0TWVzc2FnZSgpID09PSBudWxsXCI+XG4gICAgICAgICAgICB7e2dldERlc2NyaXB0aW9uKCl9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImlzQWNjZXB0U3RhdHVzKCkgJiYgZ2V0QWxlcnRNZXNzYWdlKCkgIT09IG51bGxcIj5cbiAgICAgICAgICAgIHt7Z2V0QWxlcnRNZXNzYWdlKCl9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0FjY2VwdFN0YXR1cygpICYmIGdldEFsZXJ0TWVzc2FnZSgpICE9PSBudWxsXCIgc3R5bGU9XCJjb2xvcjogcmVkO1wiPlxuICAgICAgICAgICAge3tnZXRBbGVydE1lc3NhZ2UoKX19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxpbnB1dCAjZmlsZSB0eXBlPVwiZmlsZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBbbXVsdGlwbGVdPVwiZ2V0QWxsb3dNdWx0aXBsZVNlbGVjdCgpXCIgKGNoYW5nZSk9XCJoYW5kbGVGaWxlcyhmaWxlKVwiPlxuPC9kaXY+XG5gLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbEZpbGVTZWxlY3RvciBleHRlbmRzIEZpbGVTZWxlY3RvciBpbXBsZW1lbnRzIE9uSW5pdCwgSURyb3BwYWJsZSB7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gICAgLy8gUmUtZGVjbGFyZSBmaWVsZCB0byBkZWNsYXJlIG5nIEBJbnB1dC5cbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBkYXRhUGFyZW50OiBJSGFzRGF0YTtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREYXRhOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIGRhdGE6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBpZ25vcmVQYXJlbnREaXNhYmxlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBkZWxlZ2F0ZUhpc3Rvcnk6IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgb25EaXNhYmxlZDogRnVuY3Rpb247XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgb25FbmFibGVkOiBGdW5jdGlvbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBsb2FkaW5nRW5hYmxlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBpMThuS2V5OiBzdHJpbmc7XG4gICAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgICBAT3B0aW9uKCdpMThuQnlwYXNzJylcbiAgICBwcm90ZWN0ZWQgYnlwYXNzOiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIG9wdGlvbnM6IGFueTtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjdERhdGFWaWV3XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgZmllbGQ6IHN0cmluZztcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgdHlwZU9mRGF0YTogc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIHJlYWRPbmx5OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgQEkxOE4oKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBoZWxwOiBhbnk7XG4gICAgLy8gLS0tIGZyb20gQWJzdHJhY0ZpbGVTZWxlY3RvclxuICAgIEBJbnB1dCgpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIG1heEZpbGVzaXplOiBudW1iZXI7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgYWxsb3dNdWx0aXBsZVNlbGVjdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBmaWxlVHlwZXM6IHN0cmluZ1tdO1xuICAgIC8vIC0tLSBzZWxmXG4gICAgQEkxOE4oKVxuICAgIEBPcHRpb24oKVxuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIGxhYmVsOiBzdHJpbmc7XG4gICAgQEkxOE4oKVxuICAgIEBPcHRpb24oKVxuICAgIEBJbnB1dCgpXG4gICAgcHJvdGVjdGVkIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgd2lkdGg6IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIEBPcHRpb24oKVxuICAgIHByb3RlY3RlZCBoZWlnaHQ6IHN0cmluZztcblxuICAgIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBAT3V0cHV0LlxuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICAgIEBPdXRwdXQoJ3BoeExvYWQnKVxuICAgIEBPcHRpb24oJ2xvYWQnKVxuICAgIHByb3RlY3RlZCBsb2FkRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgICBAT3V0cHV0KCdwaHhTdGFydFZhbGlkYXRlJylcbiAgICBAT3B0aW9uKCdzdGFydFZhbGlkYXRlJylcbiAgICBwcm90ZWN0ZWQgc3RhcnRWYWxpZGF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhFbmRWYWxpZGF0ZScpXG4gICAgQE9wdGlvbignZW5kVmFsaWRhdGUnKVxuICAgIHByb3RlY3RlZCBlbmRWYWxpZGF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVGb2N1cycpXG4gICAgQE9wdGlvbignYmVmb3JlRm9jdXMnKVxuICAgIHByb3RlY3RlZCBiZWZvcmVGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhGb2N1cycpXG4gICAgQE9wdGlvbignZm9jdXMnKVxuICAgIHByb3RlY3RlZCBmb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVMb3N0Rm9jdXMnKVxuICAgIEBPcHRpb24oJ2JlZm9yZUxvc3RGb2N1cycpXG4gICAgcHJvdGVjdGVkIGJlZm9yZUxvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhMb3N0Rm9jdXMnKVxuICAgIEBPcHRpb24oJ2xvc3RGb2N1cycpXG4gICAgcHJvdGVjdGVkIGxvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVDaGFuZ2UnKVxuICAgIEBPcHRpb24oJ2JlZm9yZUNoYW5nZScpXG4gICAgcHJvdGVjdGVkIGJlZm9yZUNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhDaGFuZ2UnKVxuICAgIEBPcHRpb24oJ2NoYW5nZScpXG4gICAgcHJvdGVjdGVkIGNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICAvLyAtLS0gZnJvbSBBYnN0cmFjRmlsZVNlbGVjdG9yXG4gICAgQE91dHB1dCgncGh4QmVmb3JlU2VsZWN0JylcbiAgICBAT3B0aW9uKClcbiAgICBwcm90ZWN0ZWQgYmVmb3JlU2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeFNlbGVjdCcpXG4gICAgQE9wdGlvbigpXG4gICAgcHJvdGVjdGVkIHNlbGVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBwcm90ZWN0ZWQgb3JpZ2luYWxWYWx1ZTogYW55O1xuXG4gICAgcHVibGljIF9iZ0NvbG9yOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmO1xuICAgIHByaXZhdGUgX3RpbWVvdXQ6IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2UsIGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZikge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBuZWVkRm9jdXNTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvblJlZiA9IGFwcGxpY2F0aW9uUmVmO1xuICAgICAgICB0aGlzLl9iZ0NvbG9yID0gJyNlZGVkZWQnOy8vZXh0cmFjdChAQ0xSXzEsIDcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25WYWxpZGF0aW9uRW5kKGlucHV0VmFsdWU6IGFueSwgcmVzdWx0czogVmFsaWRhdGlvblJlc3VsdFtdKTogdm9pZCB7XG4gICAgICAgIC8vISBkbyBzdGhpbmdcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25EYXRhQ2hhbmdlKGRhdGE6IGFueSwgaW5wdXRWYWw6IGFueSk6IHZvaWQge1xuICAgICAgICAvLyB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZG9Gb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBkb0xvc3RGb2N1cygkZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxvd011bHRpcGxlU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxvd011bHRpcGxlU2VsZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVGaWxlcyhmaWxlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBY2NlcHQoZmlsZS5maWxlcykpIHsgXG4gICAgICAgICAgICB0aGlzLmFkZEZpbGVzKGZpbGUuZmlsZXMsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuRmlsZVNlbGVjdG9yKCkge1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZScpLmNsaWNrKCk7XG4gICAgfSBcblxuICAgIHB1YmxpYyBpc1NlbGZEYXRhRGlydHkoKTogYm9vbGVhbiB7IFxuICAgICAgICBsZXQgZDEgPSBGaWxlU2VsZWN0b3IucmVzb2x2ZU1hcHBlZERhdGEodGhpcy5maWVsZCwgdGhpcy5vcmlnaW5hbFZhbHVlKTtcbiAgICAgICAgbGV0IGQyID0gdGhpcy5nZXRJbnB1dFZhbHVlKCk7XG4gICAgICAgIGlmIChkMSAhPT0gZDIpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTsgXG4gICAgfVxuXG4gICAgcHVibGljIHNlbGZTYXZlRGF0YShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGRhdGEgIT09IG51bGwpe1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsVmFsdWUgPSBkYXRhO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGZSZXNldERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZSh0aGlzLm9yaWdpbmFsVmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRXaWR0aCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy53aWR0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0V2lkdGgod2lkdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhlaWdodCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5oZWlnaHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEhlaWdodChoZWlnaHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWw7XG4gICAgfVxuXG4gICAgcHVibGljIHNldExhYmVsKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWNjZXB0RHJhZ0RhdGEoZXZlbnQ6IGFueSwgZm9ybWF0OiBzdHJpbmcsIGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0FjY2VwdChldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREcmFnT3ZlckRhdGFUcmFuc2ZlcihldmVudDogYW55KTogRHJhZ0RhdGFUcmFuc2ZlciB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25EcmFnRW50ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9iZ0NvbG9yID0gJyNkNmQ2ZDYnOy8vZXh0cmFjdChAQ0xSXzEsIDUpO1xuICAgICAgICB0aGlzLl9hcHBsaWNhdGlvblJlZi50aWNrKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRHJhZ092ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRyYWdMZWF2ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JnQ29sb3IgPSAnI2VkZWRlZCc7Ly9leHRyYWN0KEBDTFJfMSwgNyk7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ecm9wKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ecm9wQWNjZXB0ZWQoZXZlbnQ6IGFueSwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2JnQ29sb3IgPSAnI2VkZWRlZCc7Ly9leHRyYWN0KEBDTFJfMSwgNyk7XG4gICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB2YXIgZmlsZXM6IEZpbGVbXSA9IGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcztcblxuICAgICAgICB0aGlzLmFkZEZpbGVzKGZpbGVzLCBldmVudCk7XG4gXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgfSwgNTAwMCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRHJvcFJlamVjdGVkKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYXBwbGljYXRpb25SZWYudGljaygpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLnRpY2soKTtcbiAgICAgICAgfSwgNTAwMCk7XG4gICAgfVxufVxuIl19