UNPKG

io.parrots

Version:

Parrots.io App

215 lines (214 loc) 20.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Injectable } from '@angular/core'; import { ObservableManager } from 'com.phloxui'; import { PhloxAppInfoService } from 'com.phloxui'; const /** @type {?} */ TIMEOUT_TOPIC = 'user-service.session.timeout'; const /** @type {?} */ ERROR_TOPIC = 'user-service.session.error'; export class UserService { /** * @param {?} obsMgr * @param {?} phloxAppInfoService */ constructor(obsMgr, phloxAppInfoService) { this.obsMgr = obsMgr; if (phloxAppInfoService != null) { phloxAppInfoService.getAppInfo().then((result) => { this.phloxAppInfo = result; }); } } /** * @return {?} */ loadAccessibleApp() { // ! TODO: Edit this on PRODUCTION return null; } /** * @return {?} */ validateConnectionTimeout() { this.timeout = setTimeout(() => { if (this.userSession !== null && this.userSession !== undefined) { this.userSession.checkTimeout().then((result) => { if (!result) { this.obsMgr.publish(UserService.TIMEOUT_TOPIC, result); } this.validateConnectionTimeout(); }).catch((error) => { this.obsMgr.publish(UserService.ERROR_TOPIC, error); this.validateConnectionTimeout(); }); } }, this.phloxAppInfo.settings.DEFAULT_TIME_OUT_LOGIN_USER_SESSION); } /** * @return {?} */ isLoggedOn() { if (this.userSession === null || this.userSession === undefined) { return Promise.resolve(false); } return this.userSession.load().then((result) => { if (this.userSession.getSessionId() === undefined || this.userSession.getSessionId() === null || this.userSession.getSessionId() === '') { return false; } else { return this.userSession.checkTimeout().then((res) => { if (res) { if (this.timeout === null || this.timeout === undefined) { this.validateConnectionTimeout(); } return true; } else { return false; } }); } }); } /** * @return {?} */ reloadAccessibleApp() { this.accessibleApps = null; return this.getAccessibleApp(); } /** * @return {?} */ getAccessibleApp() { if (this.accessibleApps !== null && typeof this.accessibleApps !== 'undefined') { return Promise.resolve(this.accessibleApps); } else { let /** @type {?} */ prom = this.loadAccessibleApp(); if (prom !== null && prom !== undefined) { return this.loadAccessibleApp().then((result) => { this.accessibleApps = result; return Promise.resolve(this.accessibleApps); }); } else { return Promise.resolve(null); } } } /** * @param {?} requestData * @return {?} */ login(requestData) { if (this.userSession === null || this.userSession === undefined) { return Promise.reject(null); } let /** @type {?} */ state = this.userSession.login(requestData); state.then((response) => { if (response.status === 200) { if (this.timeout !== null && this.timeout !== undefined) { clearTimeout(this.timeout); this.timeout = null; } this.validateConnectionTimeout(); return Promise.resolve(response); } else { return Promise.reject(response); } }); return state; } /** * @return {?} */ logout() { if (this.userSession === null || this.userSession === undefined) { return Promise.reject(null); } let /** @type {?} */ state = this.userSession.logout(); state.then((response) => { if (response.status === 200) { if (this.timeout !== null && this.timeout !== undefined) { clearTimeout(this.timeout); this.timeout = null; } return Promise.resolve(response); } else { return Promise.reject(response); } }); return state; } /** * @return {?} */ getObservableManager() { return this.obsMgr; } /** * @param {?} session * @return {?} */ initialize(session) { if (this.timeout !== null && this.timeout !== undefined) { clearTimeout(this.timeout); this.timeout = null; } this.userSession = session; } /** * @return {?} */ deinitialize() { if (this.timeout !== null && this.timeout !== undefined) { clearTimeout(this.timeout); this.timeout = null; } this.userSession = null; } /** * @return {?} */ getUserSession() { return this.userSession; } } UserService.TIMEOUT_TOPIC = TIMEOUT_TOPIC; UserService.ERROR_TOPIC = ERROR_TOPIC; UserService.decorators = [ { type: Injectable }, ]; /** @nocollapse */ UserService.ctorParameters = () => [ { type: ObservableManager, }, { type: PhloxAppInfoService, }, ]; function UserService_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ UserService.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ UserService.ctorParameters; /** @type {?} */ UserService.TIMEOUT_TOPIC; /** @type {?} */ UserService.ERROR_TOPIC; /** @type {?} */ UserService.prototype.accessibleApps; /** @type {?} */ UserService.prototype.obsMgr; /** @type {?} */ UserService.prototype.phloxAppInfo; /** @type {?} */ UserService.prototype.userSession; /** @type {?} */ UserService.prototype.timeout; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lvLnBhcnJvdHMvIiwic291cmNlcyI6WyJsaWIvc2VydmljZS9Vc2VyU2VydmljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHbEQsdUJBQU0sYUFBYSxHQUFXLDhCQUE4QixDQUFDO0FBQzdELHVCQUFNLFdBQVcsR0FBVyw0QkFBNEIsQ0FBQztBQU96RCxNQUFNOzs7OztJQVVKLFlBQVksTUFBeUIsRUFBRSxtQkFBd0M7UUFFN0UsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsRUFBRSxDQUFDLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7YUFDNUIsQ0FBQyxDQUFDO1NBQ0o7S0FFRjs7OztJQUtPLGlCQUFpQjs7UUFFdkIsTUFBTSxDQUFDLElBQUksQ0FBQzs7Ozs7SUFJTix5QkFBeUI7UUFFL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzdCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ2xDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ1QsRUFBRSxDQUFDLENBQUMsQ0FBQyxN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O1FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN4RCxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Ozs7O0lBR25CLGNBQWM7UUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Ozs0QkE1S3FCLGFBQWE7MEJBQ2YsV0FBVzs7WUFKekQsVUFBVTs7OztZQVhGLGlCQUFpQjtZQUNqQixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQaGxveEFwcEluZm8gfSBmcm9tICdjb20ucGhsb3h1aSdcbmltcG9ydCB7IE9ic2VydmFibGVNYW5hZ2VyIH0gZnJvbSAnY29tLnBobG94dWknO1xuaW1wb3J0IHsgUGhsb3hBcHBJbmZvU2VydmljZSB9IGZyb20gJ2NvbS5waGxveHVpJztcbmltcG9ydCB7IElVc2VyU2Vzc2lvbiB9IGZyb20gJy4uL3NoYXJlL0lVc2VyU2Vzc2lvbic7XG5cbmNvbnN0IFRJTUVPVVRfVE9QSUM6IHN0cmluZyA9ICd1c2VyLXNlcnZpY2Uuc2Vzc2lvbi50aW1lb3V0JztcbmNvbnN0IEVSUk9SX1RPUElDOiBzdHJpbmcgPSAndXNlci1zZXJ2aWNlLnNlc3Npb24uZXJyb3InO1xuXG4vKlxuKiAjIyBVc2VyU2VydmljZSBpcyB0aGUgc2VydmljZSB0aGF0IHByb3ZpZGUgc2VydmljZSBvZiB1c2VyIHN1Y2ggYXMgbG9naW4sIGxvZ291dCwgbG9hZCBhY2Nlc3NpYmxlQXBwc1xuKiAjIyBmcm9tIHVzZXJTZXNzaW9uXG4qL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRJTUVPVVRfVE9QSUM6IHN0cmluZyA9IFRJTUVPVVRfVE9QSUM7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRVJST1JfVE9QSUM6IHN0cmluZyA9IEVSUk9SX1RPUElDO1xuICBwcml2YXRlIGFjY2Vzc2libGVBcHBzOiBQaGxveEFwcEluZm9bXTtcbiAgcHJpdmF0ZSBvYnNNZ3I6IE9ic2VydmFibGVNYW5hZ2VyO1xuICBwcml2YXRlIHBobG94QXBwSW5mbzogUGhsb3hBcHBJbmZvO1xuICBwcml2YXRlIHVzZXJTZXNzaW9uOiBJVXNlclNlc3Npb247XG4gIHByaXZhdGUgdGltZW91dDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKG9ic01ncjogT2JzZXJ2YWJsZU1hbmFnZXIsIHBobG94QXBwSW5mb1NlcnZpY2U6IFBobG94QXBwSW5mb1NlcnZpY2UpIHtcblxuICAgIHRoaXMub2JzTWdyID0gb2JzTWdyO1xuXG4gICAgaWYgKHBobG94QXBwSW5mb1NlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgcGhsb3hBcHBJbmZvU2VydmljZS5nZXRBcHBJbmZvKCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgIHRoaXMucGhsb3hBcHBJbmZvID0gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICAvKlxuICAqICMjIHJldHVybiBQcm9taXNlIHdoaWNoIHJlc29sdmUgQWNjZXNzaWJsZSBQaGxveEFwcEluZm9cbiAgKi9cbiAgcHJpdmF0ZSBsb2FkQWNjZXNzaWJsZUFwcCgpOiBQcm9taXNlPFBobG94QXBwSW5mb1tdPiB7XG4gICAgLy8gISBUT0RPOiBFZGl0IHRoaXMgb24gUFJPRFVDVElPTlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy9mb3IgbG9vcCB2YWxpZGF0ZUNvbm5lY3Rpb25UaW1lb3V0XG4gIHByaXZhdGUgdmFsaWRhdGVDb25uZWN0aW9uVGltZW91dCgpIHtcblxuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudXNlclNlc3Npb24gIT09IG51bGwgJiYgdGhpcy51c2VyU2Vzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudXNlclNlc3Npb24uY2hlY2tUaW1lb3V0KCkudGhlbihcbiAgICAgICAgICAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICB0aGlzLm9ic01nci5wdWJsaXNoKFVzZXJTZXJ2aWNlLlRJTUVPVVRfVE9QSUMsIHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQ29ubmVjdGlvblRpbWVvdXQoKTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vYnNNZ3IucHVibGlzaChVc2VyU2VydmljZS5FUlJPUl9UT1BJQywgZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUNvbm5lY3Rpb25UaW1lb3V0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5waGxveEFwcEluZm8uc2V0dGluZ3MuREVGQVVMVF9USU1FX09VVF9MT0dJTl9VU0VSX1NFU1NJT04pO1xuXG4gIH1cblxuICBwdWJsaWMgaXNMb2dnZWRPbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy51c2VyU2Vzc2lvbiA9PT0gbnVsbCB8fCB0aGlzLnVzZXJTZXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVzZXJTZXNzaW9uLmxvYWQoKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmICh0aGlzLnVzZXJTZXNzaW9uLmdldFNlc3Npb25JZCgpID09PSB1bmRlZmluZWQgfHwgdGhpcy51c2VyU2Vzc2lvbi5nZXRTZXNzaW9uSWQoKSA9PT0gbnVsbCB8fCB0aGlzLnVzZXJTZXNzaW9uLmdldFNlc3Npb25JZCgpID09PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VyU2Vzc2lvbi5jaGVja1RpbWVvdXQoKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0ID09PSBudWxsIHx8IHRoaXMudGltZW91dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVDb25uZWN0aW9uVGltZW91dCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkQWNjZXNzaWJsZUFwcCgpOiBQcm9taXNlPFBobG94QXBwSW5mb1tdPiB7XG4gICAgdGhpcy5hY2Nlc3NpYmxlQXBwcyA9IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRBY2Nlc3NpYmxlQXBwKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjZXNzaWJsZUFwcCgpOiBQcm9taXNlPFBobG94QXBwSW5mb1tdPiB7XG4gICAgaWYgKHRoaXMuYWNjZXNzaWJsZUFwcHMgIT09IG51bGwgJiYgdHlwZW9mIHRoaXMuYWNjZXNzaWJsZUFwcHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYWNjZXNzaWJsZUFwcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcHJvbSA9IHRoaXMubG9hZEFjY2Vzc2libGVBcHAoKTtcbiAgICAgIGlmIChwcm9tICE9PSBudWxsICYmIHByb20gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQWNjZXNzaWJsZUFwcCgpLnRoZW4oKHJlc3VsdDogUGhsb3hBcHBJbmZvW10pID0+IHtcbiAgICAgICAgICB0aGlzLmFjY2Vzc2libGVBcHBzID0gcmVzdWx0O1xuXG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmFjY2Vzc2libGVBcHBzKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBsb2dpbihyZXF1ZXN0RGF0YTogYW55KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGlmICh0aGlzLnVzZXJTZXNzaW9uID09PSBudWxsIHx8IHRoaXMudXNlclNlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgIH1cblxuICAgIGxldCBzdGF0ZSA9IHRoaXMudXNlclNlc3Npb24ubG9naW4ocmVxdWVzdERhdGEpO1xuXG4gICAgc3RhdGUudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXQgIT09IG51bGwgJiYgdGhpcy50aW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblxuICAgICAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhbGlkYXRlQ29ubmVjdGlvblRpbWVvdXQoKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZXNwb25zZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhdGU7XG5cbiAgfVxuXG4gIHB1YmxpYyBsb2dvdXQoKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIGlmICh0aGlzLnVzZXJTZXNzaW9uID09PSBudWxsIHx8IHRoaXMudXNlclNlc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG51bGwpO1xuICAgIH1cblxuICAgIGxldCBzdGF0ZSA9IHRoaXMudXNlclNlc3Npb24ubG9nb3V0KCk7XG5cbiAgICBzdGF0ZS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgaWYgKHRoaXMudGltZW91dCAhPT0gbnVsbCAmJiB0aGlzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXG4gICAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdGF0ZTtcblxuICB9XG5cbiAgcHVibGljIGdldE9ic2VydmFibGVNYW5hZ2VyKCk6IE9ic2VydmFibGVNYW5hZ2VyIHtcbiAgICByZXR1cm4gdGhpcy5vYnNNZ3I7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZShzZXNzaW9uOiBJVXNlclNlc3Npb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lb3V0ICE9PSBudWxsICYmIHRoaXMudGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblxuICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJTZXNzaW9uID0gc2Vzc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBkZWluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGltZW91dCAhPT0gbnVsbCAmJiB0aGlzLnRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cbiAgICAgIHRoaXMudGltZW91dCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy51c2VyU2Vzc2lvbiA9IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0VXNlclNlc3Npb24oKTogSVVzZXJTZXNzaW9uIHtcbiAgICByZXR1cm4gdGhpcy51c2VyU2Vzc2lvbjtcbiAgfVxufVxuIl19