com.phloxui
Version:
PhloxUI Ng2+ Framework
134 lines (133 loc) • 13.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { PhloxAppInfo } from '../component/model/PhloxAppInfo';
/**
* <p style="text-indent: 2em;">
* An abstract base class of <code>PhloxUI</code> application's <code>page</code>. All component classes extending this class can be
* added into [[PhloxApp]] component and can be navigated via its <code>router</code>.
* </p>
*
* @author shiorin, tee4cute
* @see [[PhloxApp]]
* @abstract
*/
export class AbstractPage {
/**
* This constructor will automatically add <code><b>this</b></code> <code>page</code> instance into the given [[PhloxApp]] <code>application</code> (<code><b>app</b></code>).
* @param {?} phloxAppService
* @param {?} name
* @param {?} bgProcessMgr
*/
constructor(phloxAppService, name, bgProcessMgr) {
this.PAGE_LOOP_TIMEOUT = 5;
this.name = name;
this.bgProcessMgr = bgProcessMgr;
if (phloxAppService !== null && typeof phloxAppService !== 'undefined') {
this.phloxAppService = phloxAppService;
if (this.app !== null && typeof this.app !== 'undefined') {
// Add this page instance to app
this.app.addItem(this);
}
}
}
/**
* A [[PhloxApp]] component in which this <code>page</code> is associated with.
* @return {?}
*/
get app() {
if (this.phloxAppService === null || typeof this.phloxAppService === 'undefined') {
return null;
}
return this.phloxAppService.getInstance();
}
/**
* @return {?}
*/
ngOnInit() {
if (this.bgProcessMgr !== null && typeof this.bgProcessMgr !== 'undefined') {
this.bgProcessMgr.execute(() => {
return new Promise((resolve, reject) => {
let /** @type {?} */ timeout = PhloxAppInfo.DEFAULT_PAGE_LOAD_TIMEOUT;
if (this.app !== null && typeof this.app !== 'undefined') {
let /** @type {?} */ info = this.app.getAppInfo();
if (info !== null && typeof info !== 'undefined' && info.settings.PAGE_LOAD_TIMEOUT !== null && typeof info.settings.PAGE_LOAD_TIMEOUT !== 'undefined') {
timeout = info.settings.PAGE_LOAD_TIMEOUT;
}
}
let /** @type {?} */ startTime = null;
let /** @type {?} */ handler = () => {
if (startTime === null) {
startTime = (new Date()).getTime();
}
let /** @type {?} */ currentTime = (new Date()).getTime();
if (this.isPageLoaded()) {
resolve();
}
else if ((currentTime - startTime) >= timeout) {
reject();
}
else {
setTimeout(handler, this.PAGE_LOOP_TIMEOUT);
}
};
handler();
});
}, {
type: "connection.page"
});
}
}
/**
* <p style="text-indent: 1em;">
* Get an <code>application</code> instance in which this <code>page</code> is associated with.
* </p>
* @return {?}
*/
getApplication() {
return this.app;
}
/**
* <p style="text-indent: 1em;">
* Get a name of this <code>page</code>. This must be also a <code>router</code>'s uri path.
* </p>
* @return {?}
*/
getName() {
return this.name;
}
/**
* <p style="text-indent: 1em;">
* To check that this <code>page</code> is being showed or displayed by [[PhloxApp]] component or not.
* </p>
* @return {?}
*/
isActive() {
return this.active;
}
}
function AbstractPage_tsickle_Closure_declarations() {
/** @type {?} */
AbstractPage.prototype.PAGE_LOOP_TIMEOUT;
/** @type {?} */
AbstractPage.prototype.phloxAppService;
/** @type {?} */
AbstractPage.prototype.bgProcessMgr;
/**
* A flag indicating that this <code>page</code> is being showed or displayed by [[PhloxApp]] component or not.
* @type {?}
*/
AbstractPage.prototype.active;
/**
* A name of this <code>page</code>. This must be also a <code>router</code>'s uri path.
* @type {?}
*/
AbstractPage.prototype.name;
/**
* @abstract
* @return {?}
*/
AbstractPage.prototype.isPageLoaded = function () { };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RQYWdlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0UGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBT0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7OztBQVcvRCxNQUFNOzs7Ozs7O0lBNkJGLFlBQVksZUFBZ0MsRUFBRSxJQUFZLEVBQUUsWUFBc0M7aUNBM0I5RCxDQUFDO1FBNEJqQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUVqQyxFQUFFLENBQUMsQ0FBQyxlQUFlLEtBQUssSUFBSSxJQUFJLE9BQU8sZUFBZSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFFdkMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7O2dCQUV2RCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQjtTQUNKO0tBQ0o7Ozs7O1FBaENXLEdBQUc7UUFDWCxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxlQUFlLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMvRSxNQUFNLENBQUMsSUFBSSxDQUFDO1NBQ2Y7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7Ozs7SUE4QnZDLFFBQVE7UUFDYixFQUFFLENBQUEsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssV0FBVyxDQUFDLENBQUEsQ0FBQztZQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQzdCLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtvQkFFckMscUJBQUksT0FBTyxHQUFHLFlBQVksQ0FBQyx5QkFBeUIsQ0FBQztvQkFDckQsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7d0JBQ3pELHFCQUFJLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUNqQyxFQUFFLENBQUEsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixLQUFLLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEtBQUssV0FBVyxDQUFDLENBQUEsQ0FBQzs0QkFDckosT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUM7eUJBQzNDO3FCQUNGO29CQUVELHFCQUFJLFNBQVMsR0FBUSxJQUFJLENBQUM7b0JBQzFCLHFCQUFJLE9BQU8sR0FBYSxHQUFHLEVBQUU7d0JBRTNCLEVBQUUsQ0FBQSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQSxDQUFDOzRCQUNyQixTQUFTLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQ3BDO3dCQUNELHFCQUFJLFdBQVcsR0FBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzt3QkFDOUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQzs0QkFDeEIsT0FBTyxFQUFFLENBQUM7eUJBQ1g7d0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7NEJBQ2hELE1BQU0sRUFBRSxDQUFDO3lCQUNWO3dCQUFDLElBQUksQ0FBQyxDQUFDOzRCQUNOLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7eUJBQzdDO3FCQUVGLENBQUM7b0JBRUYsT0FBTyxFQUFFLENBQUM7aUJBQ1gsQ0FBQyxDQUFDO2FBQ0osRUFBRTtnQkFDQyxJQUFJLEVBQUUsaUJBQWlCO2FBQzFCLENBQUMsQ0FBQztTQUNOOzs7Ozs7OztJQVFJLGNBQWM7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7O0lBUWIsT0FBTztRQUNWLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOzs7Ozs7OztJQVFkLFFBQVE7UUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Q0FJMUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBobG94QXBwIH0gZnJvbSAnLi9QaGxveEFwcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU5hdmlnYXRlZSB9IGZyb20gJy4vSU5hdmlnYXRlZSc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb25Bd2FyZSB9IGZyb20gJy4vSUFwcGxpY2F0aW9uQXdhcmUnO1xuaW1wb3J0IHsgSVBhZ2VMb2FkIH0gZnJvbSAnLi4vc2hhcmUvSVBhZ2VMb2FkJztcbmltcG9ydCB7IFBobG94QXBwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvUGhsb3hBcHBTZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyIH0gZnJvbSAnLi4vc2VydmljZS9CYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm8gfSBmcm9tICcuLi9jb21wb25lbnQvbW9kZWwvUGhsb3hBcHBJbmZvJztcblxuLyoqXG4gKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAyZW07XCI+XG4gKiBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIG9mIDxjb2RlPlBobG94VUk8L2NvZGU+IGFwcGxpY2F0aW9uJ3MgPGNvZGU+cGFnZTwvY29kZT4uIEFsbCBjb21wb25lbnQgY2xhc3NlcyBleHRlbmRpbmcgdGhpcyBjbGFzcyBjYW4gYmVcbiAqIGFkZGVkIGludG8gW1tQaGxveEFwcF1dIGNvbXBvbmVudCBhbmQgY2FuIGJlIG5hdmlnYXRlZCB2aWEgaXRzIDxjb2RlPnJvdXRlcjwvY29kZT4uXG4gKiA8L3A+XG4gKlxuICogQGF1dGhvciBzaGlvcmluLCB0ZWU0Y3V0ZVxuICogQHNlZSBbW1BobG94QXBwXV1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0UGFnZSBpbXBsZW1lbnRzIElOYXZpZ2F0ZWUsIElBcHBsaWNhdGlvbkF3YXJlLCBPbkluaXQsIElQYWdlTG9hZCB7XG5cbiAgICBwcml2YXRlIFBBR0VfTE9PUF9USU1FT1VUOiBudW1iZXIgPSA1O1xuICAgIHByb3RlY3RlZCBwaGxveEFwcFNlcnZpY2U6IFBobG94QXBwU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgYmdQcm9jZXNzTWdyOiBCYWNrZ3JvdW5kUHJvY2Vzc01hbmFnZXI7XG5cbiAgICAvKipcbiAgICAgKiBBIFtbUGhsb3hBcHBdXSBjb21wb25lbnQgaW4gd2hpY2ggdGhpcyA8Y29kZT5wYWdlPC9jb2RlPiBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXQgYXBwKCk6IFBobG94QXBwIHtcbiAgICAgICAgaWYgKHRoaXMucGhsb3hBcHBTZXJ2aWNlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLnBobG94QXBwU2VydmljZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBobG94QXBwU2VydmljZS5nZXRJbnN0YW5jZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhpcyA8Y29kZT5wYWdlPC9jb2RlPiBpcyBiZWluZyBzaG93ZWQgb3IgZGlzcGxheWVkIGJ5IFtbUGhsb3hBcHBdXSBjb21wb25lbnQgb3Igbm90LlxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBBIG5hbWUgb2YgdGhpcyA8Y29kZT5wYWdlPC9jb2RlPi4gVGhpcyBtdXN0IGJlIGFsc28gYSA8Y29kZT5yb3V0ZXI8L2NvZGU+J3MgdXJpIHBhdGguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoaXMgY29uc3RydWN0b3Igd2lsbCBhdXRvbWF0aWNhbGx5IGFkZCA8Y29kZT48Yj50aGlzPC9iPjwvY29kZT4gPGNvZGU+cGFnZTwvY29kZT4gaW5zdGFuY2UgaW50byB0aGUgZ2l2ZW4gW1tQaGxveEFwcF1dIDxjb2RlPmFwcGxpY2F0aW9uPC9jb2RlPiAoPGNvZGU+PGI+YXBwPC9iPjwvY29kZT4pLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHBobG94QXBwU2VydmljZTogUGhsb3hBcHBTZXJ2aWNlLCBuYW1lOiBzdHJpbmcsIGJnUHJvY2Vzc01ncjogQmFja2dyb3VuZFByb2Nlc3NNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuYmdQcm9jZXNzTWdyID0gYmdQcm9jZXNzTWdyO1xuXG4gICAgICAgIGlmIChwaGxveEFwcFNlcnZpY2UgIT09IG51bGwgJiYgdHlwZW9mIHBobG94QXBwU2VydmljZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMucGhsb3hBcHBTZXJ2aWNlID0gcGhsb3hBcHBTZXJ2aWNlO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hcHAgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuYXBwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHBhZ2UgaW5zdGFuY2UgdG8gYXBwXG4gICAgICAgICAgICAgICAgdGhpcy5hcHAuYWRkSXRlbSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgIGlmKHRoaXMuYmdQcm9jZXNzTWdyICE9PSBudWxsICYmIHR5cGVvZiB0aGlzLmJnUHJvY2Vzc01nciAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICAgIHRoaXMuYmdQcm9jZXNzTWdyLmV4ZWN1dGUoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICAgICAgICBsZXQgdGltZW91dCA9IFBobG94QXBwSW5mby5ERUZBVUxUX1BBR0VfTE9BRF9USU1FT1VUO1xuICAgICAgICAgICAgICBpZiAodGhpcy5hcHAgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuYXBwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGxldCBpbmZvID0gdGhpcy5hcHAuZ2V0QXBwSW5mbygpO1xuICAgICAgICAgICAgICAgIGlmKGluZm8gIT09IG51bGwgJiYgdHlwZW9mIGluZm8gIT09ICd1bmRlZmluZWQnICYmIGluZm8uc2V0dGluZ3MuUEFHRV9MT0FEX1RJTUVPVVQgIT09IG51bGwgJiYgdHlwZW9mIGluZm8uc2V0dGluZ3MuUEFHRV9MT0FEX1RJTUVPVVQgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBpbmZvLnNldHRpbmdzLlBBR0VfTE9BRF9USU1FT1VUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxldCBzdGFydFRpbWU6IGFueSA9IG51bGw7XG4gICAgICAgICAgICAgIGxldCBoYW5kbGVyOiBGdW5jdGlvbiA9ICgpID0+IHtcblxuICAgICAgICAgICAgICAgIGlmKHN0YXJ0VGltZSA9PT0gbnVsbCl7XG4gICAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSAobmV3IERhdGUoKSkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudFRpbWU6IGFueSA9IChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNQYWdlTG9hZGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjdXJyZW50VGltZSAtIHN0YXJ0VGltZSkgPj0gdGltZW91dCkge1xuICAgICAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoaGFuZGxlciwgdGhpcy5QQUdFX0xPT1BfVElNRU9VVCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgaGFuZGxlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgICB0eXBlOiBcImNvbm5lY3Rpb24ucGFnZVwiXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogPHAgc3R5bGU9XCJ0ZXh0LWluZGVudDogMWVtO1wiPlxuICAgICAqIEdldCBhbiA8Y29kZT5hcHBsaWNhdGlvbjwvY29kZT4gaW5zdGFuY2UgaW4gd2hpY2ggdGhpcyA8Y29kZT5wYWdlPC9jb2RlPiBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAgICogPC9wPlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRBcHBsaWNhdGlvbigpOiBQaGxveEFwcCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAxZW07XCI+XG4gICAgICogR2V0IGEgbmFtZSBvZiB0aGlzIDxjb2RlPnBhZ2U8L2NvZGU+LiBUaGlzIG11c3QgYmUgYWxzbyBhIDxjb2RlPnJvdXRlcjwvY29kZT4ncyB1cmkgcGF0aC5cbiAgICAgKiA8L3A+XG4gICAgICovXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAxZW07XCI+XG4gICAgICogVG8gY2hlY2sgdGhhdCB0aGlzIDxjb2RlPnBhZ2U8L2NvZGU+IGlzIGJlaW5nIHNob3dlZCBvciBkaXNwbGF5ZWQgYnkgW1tQaGxveEFwcF1dIGNvbXBvbmVudCBvciBub3QuXG4gICAgICogPC9wPlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBpc1BhZ2VMb2FkZWQoKTogYm9vbGVhbjtcbn1cbiJdfQ==