UNPKG

ng-yunzai-mobile

Version:

1. 适配yunzai_uni_app_x

545 lines 38.1 kB
/** * @fileoverview added by tsickle * Generated from: devices/android.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { BaseDevice } from "./base.device"; import { HttpClient } from "@angular/common/http"; import { Inject, Injectable } from "@angular/core"; import { BASE_CLIENT } from "../client/base.client"; import { preloaderFinished } from "../auth/preloader"; import { from } from "rxjs"; import { TokenService } from "../token/token.service"; import { UserService } from "../user/user.service"; import * as i0 from "@angular/core"; import * as i1 from "../token/token.service"; import * as i2 from "@angular/common/http"; import * as i3 from "../user/user.service"; import * as i4 from "../client/base.client"; export class Android extends BaseDevice { /** * @param {?} tokenService * @param {?} http * @param {?} user * @param {?} baseclient */ constructor(tokenService, http, user, baseclient) { super(); this.tokenService = tokenService; this.http = http; this.user = user; this.baseclient = baseclient; /* * @type {any[]} 暂存被选中联系人数据集合 * */ this.checkboxTrue = []; /* * @type {any[]} 页面上的被选中联系人列表数据集合 * */ this.checkboxName = []; } /** * 手机网页认证 * @return {?} */ auth() { if (this.baseclient.android && this.baseclient.android.auth === false) { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { preloaderFinished(); resolve(true); })); } if (null === this.baseclient.mobileVersion || this.baseclient.mobileVersion === "V6") { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { // 设置token this.tokenService.set((/** @type {?} */ (this.getToken()))); // 发送/user请求 this.http .get(`${this.baseclient.gateway}/auth/user`) .subscribe((/** * @param {?} response * @return {?} */ (response) => { // 设置user this.user.set(Object.assign({}, response.principal, { tenantId: response.tenantId })); // 加载结束 preloaderFinished(); resolve(true); })); })); } else if (null !== this.baseclient.mobileVersion && this.baseclient.mobileVersion === "V5") { /** @type {?} */ const userInfo = yz.getUserInfoSync(); /** @type {?} */ const formData = new FormData(); const { account, password } = userInfo; formData.set("username", account); formData.set("password", password); formData.set("grant_type", "password"); formData.set("client_id", "webapp"); formData.set("scope", "webapp"); formData.set("client_secret", "123456"); return new Promise(((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { this.http.post(`${this.baseclient.gateway}/auth/oauth/token`, formData).subscribe((/** * @param {?} response * @return {?} */ (response) => { /** @type {?} */ let tokenInfo = {}; tokenInfo['accessToken'] = response.access_token; tokenInfo['tokenType'] = response.token_type; tokenInfo['refreshToken'] = response.refresh_token; tokenInfo['expiresIn'] = response.expires_in; tokenInfo['scope'] = response.scope; this.tokenService.set((/** @type {?} */ (tokenInfo))); this.http.get(`${this.baseclient.gateway}/auth/user`).subscribe((/** * @param {?} response * @return {?} */ (response) => { // 设置user this.user.set(Object.assign({}, response.principal, { tenantId: response.tenantId })); // 加载结束 preloaderFinished(); resolve(true); })); })); }))); } } /** * @return {?} */ getToken() { return yz.getTokenSync(); } /** * @param {?} window * @return {?} */ openWindow(window) { yz.navigationOpenWindow(window); if (window.listener) { yz.listener.nBack(window.listener); } } /** * @return {?} */ scanCode() { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.scanCode({ /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject("error"); } }); }))); } /** * @param {?} navigationBar * @return {?} */ setNavigationBar(navigationBar) { yz.setNavigationBarRightItems({ showMenu: navigationBar.showMenu, shareFlag: navigationBar.shareFlag, items: navigationBar.items, onClick: navigationBar.onClick, success: navigationBar.success, fial: navigationBar.fial, complete: navigationBar.complete }); } /** * @param {?} ititle * @return {?} */ setTitle(ititle) { yz.setNavigationBarTitle(ititle); } /** * @param {?} ishare * @return {?} */ share(ishare) { yz.setWebCanShare(ishare); } /** * @return {?} */ userLocation() { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.userLocation({ /** * @param {?} data * @return {?} */ success(data) { resolve((/** @type {?} */ ({ address: data.address, latitude: data.latitude, longitude: data.longitude }))); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject(errMsg); } }); }))); } /** * @param {?} bssids * @return {?} */ validateInWifi(bssids) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.userLocationContainAp({ bssids, /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject(errMsg); } }); }))); } /** * @return {?} */ getWifiMac() { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.getMac({ /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errorMsg * @return {?} */ fail(errorMsg) { reject(errorMsg); } }); }))); } /** * @param {?} count * @return {?} */ chooseContacts(count) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.chooseContacts({ count, /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject(errMsg); } }); }))); } /** * @param {?} targetUserId * @return {?} */ contactDetails(targetUserId) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.ContactDetails({ targetUserId, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} count * @param {?} sourceType * @return {?} */ uploadImage(count, sourceType) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.uploadImage({ count, sourceType, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} limitMinute * @return {?} */ uploadMovie(limitMinute) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.uploadMovie({ limitMinute, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} url * @param {?} openType * @param {?} title * @param {?} id * @param {?} type * @return {?} */ openReadWithTimer(url, openType, title, id, type) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.openReadWithTimer({ url, openType, title, id, type, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} url * @param {?} title * @return {?} */ fileBrowser(url, title) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.fileBrowser({ url, title, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} ticket * @param {?} callback * @return {?} */ startSearchBeacons(ticket, callback) { throw new Error("Method not implemented."); } /** * @param {?} callback * @return {?} */ stopSearchBeacons(callback) { throw new Error("Method not implemented."); } /** * @param {?} callback * @return {?} */ onSearchBeacons(callback) { throw new Error("Method not implemented."); } } Android.decorators = [ { type: Injectable, args: [{ providedIn: "root" },] } ]; /** @nocollapse */ Android.ctorParameters = () => [ { type: TokenService }, { type: HttpClient }, { type: UserService }, { type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] } ]; /** @nocollapse */ Android.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function Android_Factory() { return new Android(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT)); }, token: Android, providedIn: "root" }); if (false) { /** @type {?} */ Android.prototype.checkboxTrue; /** @type {?} */ Android.prototype.checkboxName; /** * @type {?} * @private */ Android.prototype.tokenService; /** * @type {?} * @private */ Android.prototype.http; /** * @type {?} * @private */ Android.prototype.user; /** * @type {?} * @private */ Android.prototype.baseclient; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5kcm9pZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXl1bnphaS1tb2JpbGUvIiwic291cmNlcyI6WyJkZXZpY2VzL2FuZHJvaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHdEQsT0FBTyxFQUFjLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUt4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFPbkQsTUFBTSxPQUFPLE9BQVEsU0FBUSxVQUFVOzs7Ozs7O0lBV3JDLFlBQ1UsWUFBMEIsRUFDMUIsSUFBZ0IsRUFDaEIsSUFBaUIsRUFDSSxVQUFzQjtRQUVuRCxLQUFLLEVBQUUsQ0FBQztRQUxBLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNJLGVBQVUsR0FBVixVQUFVLENBQVk7Ozs7UUFWckQsaUJBQVksR0FBVSxFQUFFLENBQUM7Ozs7UUFJekIsaUJBQVksR0FBVSxFQUFFLENBQUM7SUFTekIsQ0FBQzs7Ozs7SUFLRCxJQUFJO1FBQ0YsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO1lBQ3JFLE9BQU8sSUFBSSxPQUFPOzs7OztZ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QUFDO0lBQ0osQ0FBQzs7Ozs7O0lBRUQsa0JBQWtCLENBQUMsTUFBYyxFQUFFLFFBQTZCO1FBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7OztJQUNELGlCQUFpQixDQUFDLFFBQTZCO1FBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7OztJQUNELGVBQWUsQ0FBQyxRQUE2QjtRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7O1lBbFNGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQVBRLFlBQVk7WUFYWixVQUFVO1lBWVYsV0FBVzs0Q0FzQmYsTUFBTSxTQUFDLFdBQVc7Ozs7O0lBVnJCLCtCQUF5Qjs7SUFJekIsK0JBQXlCOzs7OztJQUd2QiwrQkFBa0M7Ozs7O0lBQ2xDLHVCQUF3Qjs7Ozs7SUFDeEIsdUJBQXlCOzs7OztJQUN6Qiw2QkFBbUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRGV2aWNlIH0gZnJvbSBcIi4vYmFzZS5kZXZpY2VcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCQVNFX0NMSUVOVCwgQmFzZUNsaWVudCB9IGZyb20gXCIuLi9jbGllbnQvYmFzZS5jbGllbnRcIjtcclxuaW1wb3J0IHsgcHJlbG9hZGVyRmluaXNoZWQgfSBmcm9tIFwiLi4vYXV0aC9wcmVsb2FkZXJcIjtcclxuaW1wb3J0IHsgSXRva2VuIH0gZnJvbSBcIi4uL2F1dGgvaXRva2VuXCI7XHJcbmltcG9ydCB7IElXaW5kb3cgfSBmcm9tIFwiLi9tb2RlbC93aW5kb3dcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZnJvbSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25CYXIgfSBmcm9tIFwiLi9tb2RlbC9uYXZpZ2F0aW9uYmFyXCI7XHJcbmltcG9ydCB7IElUaXRsZSB9IGZyb20gXCIuL21vZGVsL3RpdGxlXCI7XHJcbmltcG9ydCB7IElTaGFyZSB9IGZyb20gXCIuL21vZGVsL3NoYXJlXCI7XHJcbmltcG9ydCB7IFVzZXJMb2NhdGlvbiB9IGZyb20gXCIuL21vZGVsL2xvY2F0aW9uXCI7XHJcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3VzZXIvdXNlci5zZXJ2aWNlXCI7XHJcblxyXG5kZWNsYXJlIGxldCB5ejtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5kcm9pZCBleHRlbmRzIEJhc2VEZXZpY2Uge1xyXG5cclxuICAvKlxyXG4gICAqICBAdHlwZSB7YW55W119IOaaguWtmOiiq+mAieS4reiBlOezu+S6uuaVsOaNrumbhuWQiFxyXG4gICAqICovXHJcbiAgY2hlY2tib3hUcnVlOiBhbnlbXSA9IFtdO1xyXG4gIC8qXHJcbiAgICogIEB0eXBlIHthbnlbXX0g6aG16Z2i5LiK55qE6KKr6YCJ5Lit6IGU57O75Lq65YiX6KGo5pWw5o2u6ZuG5ZCIXHJcbiAgICogKi9cclxuICBjaGVja2JveE5hbWU6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgdXNlcjogVXNlclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJBU0VfQ0xJRU5UKSBwcml2YXRlIGJhc2VjbGllbnQ6IEJhc2VDbGllbnRcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiYvmnLrnvZHpobXorqTor4FcclxuICAgKi9cclxuICBhdXRoKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5iYXNlY2xpZW50LmFuZHJvaWQgJiYgdGhpcy5iYXNlY2xpZW50LmFuZHJvaWQuYXV0aCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobnVsbCA9PT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gfHwgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjZcIikge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgLy8g6K6+572udG9rZW5cclxuICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodGhpcy5nZXRUb2tlbigpIGFzIGFueSk7XHJcbiAgICAgICAgLy8g5Y+R6YCBL3VzZXLor7fmsYJcclxuICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgIC5nZXQoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvdXNlcmApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgICAgdGhpcy51c2VyLnNldCh7IC4uLnJlc3BvbnNlLnByaW5jaXBhbCwgdGVuYW50SWQ6IHJlc3BvbnNlLnRlbmFudElkIH0pO1xyXG4gICAgICAgICAgICAvLyDliqDovb3nu5PmnZ9cclxuICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAobnVsbCAhPT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gJiYgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjVcIikge1xyXG4gICAgICBjb25zdCB1c2VySW5mbyA9IHl6LmdldFVzZXJJbmZvU3luYygpO1xyXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBjb25zdCB7IGFjY291bnQsIHBhc3N3b3JkIH0gPSB1c2VySW5mbztcclxuICAgICAgZm9ybURhdGEuc2V0KFwidXNlcm5hbWVcIiwgYWNjb3VudCk7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcInBhc3N3b3JkXCIsIHBhc3N3b3JkKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwiZ3JhbnRfdHlwZVwiLCBcInBhc3N3b3JkXCIpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJjbGllbnRfaWRcIiwgXCJ3ZWJhcHBcIik7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcInNjb3BlXCIsIFwid2ViYXBwXCIpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJjbGllbnRfc2VjcmV0XCIsIFwiMTIzNDU2XCIpO1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL29hdXRoL3Rva2VuYCwgZm9ybURhdGEpLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCB0b2tlbkluZm8gPSB7fTtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWydhY2Nlc3NUb2tlbiddID0gcmVzcG9uc2UuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ3Rva2VuVHlwZSddID0gcmVzcG9uc2UudG9rZW5fdHlwZTtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWydyZWZyZXNoVG9rZW4nXSA9IHJlc3BvbnNlLnJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1snZXhwaXJlc0luJ10gPSByZXNwb25zZS5leHBpcmVzX2luO1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ3Njb3BlJ10gPSByZXNwb25zZS5zY29wZTtcclxuICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRva2VuSW5mbyBhcyBhbnkpXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvdXNlcmApLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8g6K6+572udXNlclxyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyLnNldCh7IC4uLnJlc3BvbnNlLnByaW5jaXBhbCwgdGVuYW50SWQ6IHJlc3BvbnNlLnRlbmFudElkIH0pO1xyXG4gICAgICAgICAgICAgICAgLy8g5Yqg6L2957uT5p2fXHJcbiAgICAgICAgICAgICAgICBwcmVsb2FkZXJGaW5pc2hlZCgpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRva2VuKCk6IEl0b2tlbiB7XHJcbiAgICByZXR1cm4geXouZ2V0VG9rZW5TeW5jKCk7XHJcbiAgfVxyXG5cclxuICBvcGVuV2luZG93KHdpbmRvdzogSVdpbmRvdyk6IHZvaWQge1xyXG4gICAgeXoubmF2aWdhdGlvbk9wZW5XaW5kb3cod2luZG93KTtcclxuICAgIGlmICh3aW5kb3cubGlzdGVuZXIpIHtcclxuICAgICAgeXoubGlzdGVuZXIubkJhY2sod2luZG93Lmxpc3RlbmVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNjYW5Db2RlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXouc2NhbkNvZGUoe1xyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJNc2cpIHtcclxuICAgICAgICAgICAgcmVqZWN0KFwiZXJyb3JcIik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0TmF2aWdhdGlvbkJhcihuYXZpZ2F0aW9uQmFyOiBOYXZpZ2F0aW9uQmFyKTogdm9pZCB7XHJcbiAgICB5ei5zZXROYXZpZ2F0aW9uQmFyUmlnaHRJdGVtcyh7XHJcbiAgICAgIHNob3dNZW51OiBuYXZpZ2F0aW9uQmFyLnNob3dNZW51LFxyXG4gICAgICBzaGFyZUZsYWc6IG5hdmlnYXRpb25CYXIuc2hhcmVGbGFnLFxyXG4gICAgICBpdGVtczogbmF2aWdhdGlvbkJhci5pdGVtcyxcclxuICAgICAgb25DbGljazogbmF2aWdhdGlvbkJhci5vbkNsaWNrLFxyXG4gICAgICBzdWNjZXNzOiBuYXZpZ2F0aW9uQmFyLnN1Y2Nlc3MsXHJcbiAgICAgIGZpYWw6IG5hdmlnYXRpb25CYXIuZmlhbCxcclxuICAgICAgY29tcGxldGU6IG5hdmlnYXRpb25CYXIuY29tcGxldGVcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0VGl0bGUoaXRpdGxlOiBJVGl0bGUpOiB2b2lkIHtcclxuICAgIHl6LnNldE5hdmlnYXRpb25CYXJUaXRsZShpdGl0bGUpO1xyXG4gIH1cclxuXHJcbiAgc2hhcmUoaXNoYXJlOiBJU2hhcmUpOiB2b2lkIHtcclxuICAgIHl6LnNldFdlYkNhblNoYXJlKGlzaGFyZSk7XHJcbiAgfVxyXG5cclxuICB1c2VyTG9jYXRpb24oKTogT2JzZXJ2YWJsZTxVc2VyTG9jYXRpb24gfCBhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoudXNlckxvY2F0aW9uKHtcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YTogYW55KSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgIGFkZHJlc3M6IGRhdGEuYWRkcmVzcyxcclxuICAgICAgICAgICAgICBsYXRpdHVkZTogZGF0YS5sYXRpdHVkZSxcclxuICAgICAgICAgICAgICBsb25naXR1ZGU6IGRhdGEubG9uZ2l0dWRlXHJcbiAgICAgICAgICAgIH0gYXMgVXNlckxvY2F0aW9uKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVyck1zZzogYW55KSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlSW5XaWZpKGJzc2lkczogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8Ym9vbGVhbiB8IGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei51c2VyTG9jYXRpb25Db250YWluQXAoe1xyXG4gICAgICAgICAgYnNzaWRzLFxyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBib29sZWFuKSB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJNc2c6IGFueSkge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRXaWZpTWFjKCk6IE9ic2VydmFibGU8c3RyaW5nIHwgYW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LmdldE1hYyh7XHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGE6IGFueSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyb3JNc2cpIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVycm9yTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjaG9vc2VDb250YWN0cyhjb3VudDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXouY2hvb3NlQ29udGFjdHMoe1xyXG4gICAgICAgICAgY291bnQsXHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGE6IGFueSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29udGFjdERldGFpbHModGFyZ2V0VXNlcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5Db250YWN0RGV0YWlscyh7XHJcbiAgICAgICAgICB0YXJnZXRVc2VySWQsXHJcbiAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsOiBlcnJNc2cgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdXBsb2FkSW1hZ2UoY291bnQ6IG51bWJlciwgc291cmNlVHlwZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoudXBsb2FkSW1hZ2Uoe1xyXG4gICAgICAgICAgY291bnQsXHJcbiAgICAgICAgICBzb3VyY2VUeXBlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIHVwbG9hZE1vdmllKGxpbWl0TWludXRlOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei51cGxvYWRNb3ZpZSh7XHJcbiAgICAgICAgICBsaW1pdE1pbnV0ZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9wZW5SZWFkV2l0aFRpbWVyKHVybDogYW55LCBvcGVuVHlwZTogYW55LCB0aXRsZTogYW55LCBpZDogYW55LCB0eXBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5vcGVuUmVhZFdpdGhUaW1lcih7XHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICBvcGVuVHlwZSxcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIGZpbGVCcm93c2VyKHVybDogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXouZmlsZUJyb3dzZXIoe1xyXG4gICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsOiBlcnJNc2cgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdGFydFNlYXJjaEJlYWNvbnModGlja2V0OiBzdHJpbmcsIGNhbGxiYWNrOiAoYXJndjogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICB9XHJcbiAgc3RvcFNlYXJjaEJlYWNvbnMoY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxuICBvblNlYXJjaEJlYWNvbnMoY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxufVxyXG4iXX0=