UNPKG

ng-yunzai-mobile

Version:

1. 适配yunzai_uni_app_x

433 lines 33.4 kB
/** * @fileoverview added by tsickle * Generated from: devices/wechat.micro.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { BaseDevice } from "./base.device"; import { from } from "rxjs"; import { TokenService } from "../token/token.service"; import { UserService } from "../user/user.service"; import { HttpClient } from "@angular/common/http"; import { BASE_CLIENT } from "../client/base.client"; import { Inject, Injectable } from "@angular/core"; import { preloaderFinished } from "../auth/preloader"; import { Title } from "@angular/platform-browser"; 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 "@angular/platform-browser"; import * as i5 from "../client/base.client"; /** @type {?} */ const apis = [ "updateAppMessageShareData", "updateTimelineShareData", "onMenuShareTimeline", "onMenuShareAppMessage", "onMenuShareQQ", "onMenuShareWeibo", "onMenuShareQZone", "startRecord", "stopRecord", "onVoiceRecordEnd", "playVoice", "pauseVoice", "stopVoice", "onVoicePlayEnd", "uploadVoice", "downloadVoice", "chooseImage", "previewImage", "uploadImage", "downloadImage", "translateVoice", "getNetworkType", "openLocation", "getLocation", "hideOptionMenu", "showOptionMenu", "hideMenuItems", "showMenuItems", "hideAllNonBaseMenuItem", "showAllNonBaseMenuItem", "closeWindow", "scanQRCode", "chooseWXPay", "openProductSpecificView", "addCard", "chooseCard", "openCard", ]; /** @type {?} */ const openTags = [ 'wx-open-launch-weapp', 'wx-open-launch-app', 'wx-open-subscribe', 'wx-open-audio' ]; export class WechatMicro extends BaseDevice { /** * @param {?} tokenService * @param {?} http * @param {?} user * @param {?} title * @param {?} baseclient */ constructor(tokenService, http, user, title, baseclient) { super(); this.tokenService = tokenService; this.http = http; this.user = user; this.title = title; this.baseclient = baseclient; } /** * @return {?} */ auth() { if (this.baseclient.wechatMicro && this.baseclient.wechatMicro.auth === false) { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { preloaderFinished(); resolve(true); })); } return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { /** @type {?} */ const tokenInfo = {}; tokenInfo.account = this.getUrlParam('account'); tokenInfo.accessToken = this.getUrlParam('accessToken'); tokenInfo.userId = this.getUrlParam('userId'); tokenInfo.tokenType = 'bearer'; 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 })); this.generateWechatConfig(); // 加载结束 preloaderFinished(); resolve(true); })); })); } /** * @return {?} */ generateWechatConfig() { this.http .get(`${this.baseclient.gateway}/wechat/mp/jssdk?url=${encodeURIComponent(window.location.href)}`) .subscribe((/** * @param {?} response * @return {?} */ (response) => { wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: response.appId, // 必填,公众号的唯一标识 timestamp: response.timestamp, // 必填,生成签名的时间戳 nonceStr: response.nonceStr, // 必填,生成签名的随机串 signature: response.signature, // 必填,签名 jsApiList: apis, // 必填,需要使用的JS接口列表 openTagList: openTags // 可选,需要使用的开放标签列表,例如['wx-open-launch-app'] }); })); wx.ready((/** * @return {?} */ () => { // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作, // 所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 console.log('微信jssdk初始化完成.'); })); wx.error((/** * @param {?} res * @return {?} */ (res) => { // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 console.log('微信jssdk初始化失败:', res); })); } /** * @param {?} iwindow * @return {?} */ openWindow(iwindow) { window.location.href = iwindow.url; } /** * @param {?} ititle * @return {?} */ setTitle(ititle) { this.title.setTitle(ititle.title); } /** * @param {?} navigationBar * @return {?} */ setNavigationBar(navigationBar) { alert("小程序暂不支持放置按钮,请在APP中使用此功能!"); } /** * @param {?} ishare * @return {?} */ share(ishare) { alert("小程序暂不支持分享,请在APP中使用此功能!"); } /** * @return {?} */ getToken() { /** @type {?} */ const itoken = { accessToken: this.tokenService.get().accessToken, tokenType: null, tokenDataLine: null, scope: null, }; return itoken; } /** * @return {?} */ scanCode() { /** @type {?} */ const p = new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { wx.scanQRCode({ needResult: 1, scanType: ['qrCode', 'barCode'], success: (/** * @param {?} res * @return {?} */ (res) => { resolve(res.resultStr); }), }); })); return from(p); } /** * @return {?} */ userLocation() { /** @type {?} */ const p = new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { wx.getLocation({ type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' /** * @param {?} res * @return {?} */ success(res) { if (res.errMsg === 'getLocation:ok') { /** @type {?} */ const latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90 /** @type {?} */ const longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。 /** @type {?} */ const address = '微信无address'; resolve({ latitude, longitude, address }); } }, }); })); return from(p); } /** * @param {?} bssids * @return {?} */ validateInWifi(bssids) { alert("小程序暂不支持WIFI验证,请在APP中使用此功能!"); return undefined; } /** * @return {?} */ getWifiMac() { alert("小程序暂不支持获取MAC地址,请在APP中使用此功能!"); return undefined; } /** * @param {?} count * @return {?} */ chooseContacts(count) { alert("小程序暂不支持获取联系人,请在APP中使用此功能!"); return undefined; } /** * @param {?} targetUserId * @return {?} */ contactDetails(targetUserId) { alert("小程序暂不支持查询联系人详细信息,请在APP中使用此功能!"); return undefined; } /** * @param {?} count * @param {?} sourceType * @return {?} */ uploadImage(count, sourceType) { alert("小程序暂不支持图片上传,请在APP中使用此功能!"); return undefined; } /** * @param {?} url * @param {?} openType * @param {?} title * @param {?} id * @param {?} type * @return {?} */ openReadWithTimer(url, openType, title, id, type) { alert("小程序暂不支持读物时间统计,请在APP中使用此功能!"); return undefined; } /** * @param {?} limitMinute * @return {?} */ uploadMovie(limitMinute) { alert("小程序暂不支持视频上传,请在APP中使用此功能!"); return undefined; } /** * @param {?} url * @param {?} title * @return {?} */ fileBrowser(url, title) { alert("小程序暂不支持此功能,请在APP中使用此功能!"); return undefined; } /** * @param {?} ticket * @param {?} callback * @return {?} */ startSearchBeacons(ticket, callback) { wx.startSearchBeacons({ ticket: ticket, complete: callback, }); } /** * @param {?} callback * @return {?} */ stopSearchBeacons(callback) { wx.stopSearchBeacons({ complete: callback, }); } /** * @param {?} callback * @return {?} */ onSearchBeacons(callback) { wx.onSearchBeacons({ complete: callback, }); } // 封装方法: 获取url中的参数 /** * @private * @param {?} name * @return {?} */ getUrlParam(name) { // 构造一个含有目标参数的正则表达式对象 /** @type {?} */ const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)'); /** @type {?} */ const strings = window.location.href.split('?'); // 匹配目标参数 /** @type {?} */ const r = strings[strings.length - 1].match(reg); if (r != null) { return unescape(r[2]); } return null; } } WechatMicro.decorators = [ { type: Injectable, args: [{ providedIn: "root", },] } ]; /** @nocollapse */ WechatMicro.ctorParameters = () => [ { type: TokenService }, { type: HttpClient }, { type: UserService }, { type: Title }, { type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] } ]; /** @nocollapse */ WechatMicro.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function WechatMicro_Factory() { return new WechatMicro(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.Title), i0.ɵɵinject(i5.BASE_CLIENT)); }, token: WechatMicro, providedIn: "root" }); if (false) { /** * @type {?} * @private */ WechatMicro.prototype.tokenService; /** * @type {?} * @private */ WechatMicro.prototype.http; /** * @type {?} * @private */ WechatMicro.prototype.user; /** * @type {?} * @private */ WechatMicro.prototype.title; /** * @type {?} * @private */ WechatMicro.prototype.baseclient; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VjaGF0Lm1pY3JvLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbImRldmljZXMvd2VjaGF0Lm1pY3JvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUsSUFBSSxFQUFrQixNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7OztNQUU1QyxJQUFJLEdBQUc7SUFDWCwyQkFBMkI7SUFDM0IseUJBQXlCO0lBQ3pCLHFCQUFxQjtJQUNyQix1QkFBdUI7SUFDdkIsZUFBZTtJQUNmLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsYUFBYTtJQUNiLFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsV0FBVztJQUNYLFlBQVk7SUFDWixXQUFXO0lBQ1gsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixlQUFlO0lBQ2YsYUFBYTtJQUNiLGNBQWM7SUFDZCxhQUFhO0lBQ2IsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixlQUFlO0lBQ2Ysd0JBQXdCO0lBQ3hCLHdCQUF3QjtJ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QUM7Ozs7Ozs7SUFHTyxXQUFXLENBQUMsSUFBSTs7O2NBRWhCLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLGVBQWUsQ0FBQzs7Y0FDbEQsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7OztjQUV6QyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDYixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7O1lBck1GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQTNEUSxZQUFZO1lBRVosVUFBVTtZQURWLFdBQVc7WUFLWCxLQUFLOzRDQTREVCxNQUFNLFNBQUMsV0FBVzs7Ozs7Ozs7SUFKbkIsbUNBQWtDOzs7OztJQUNsQywyQkFBd0I7Ozs7O0lBQ3hCLDJCQUF5Qjs7Ozs7SUFDekIsNEJBQW9COzs7OztJQUNwQixpQ0FBbUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRGV2aWNlIH0gZnJvbSBcIi4vYmFzZS5kZXZpY2VcIjtcclxuaW1wb3J0IHsgSVNoYXJlLCBJVGl0bGUsIElXaW5kb3csIE5hdmlnYXRpb25CYXIsIFVzZXJMb2NhdGlvbiB9IGZyb20gXCIuL21vZGVsXCI7XHJcbmltcG9ydCB7IEl0b2tlbiB9IGZyb20gXCIuLi9hdXRoXCI7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tIFwiLi4vdXNlci91c2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBCQVNFX0NMSUVOVCwgQmFzZUNsaWVudCB9IGZyb20gXCIuLi9jbGllbnQvYmFzZS5jbGllbnRcIjtcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgcHJlbG9hZGVyRmluaXNoZWQgfSBmcm9tIFwiLi4vYXV0aC9wcmVsb2FkZXJcIjtcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5cclxuY29uc3QgYXBpcyA9IFtcclxuICBcInVwZGF0ZUFwcE1lc3NhZ2VTaGFyZURhdGFcIixcclxuICBcInVwZGF0ZVRpbWVsaW5lU2hhcmVEYXRhXCIsXHJcbiAgXCJvbk1lbnVTaGFyZVRpbWVsaW5lXCIsXHJcbiAgXCJvbk1lbnVTaGFyZUFwcE1lc3NhZ2VcIixcclxuICBcIm9uTWVudVNoYXJlUVFcIixcclxuICBcIm9uTWVudVNoYXJlV2VpYm9cIixcclxuICBcIm9uTWVudVNoYXJlUVpvbmVcIixcclxuICBcInN0YXJ0UmVjb3JkXCIsXHJcbiAgXCJzdG9wUmVjb3JkXCIsXHJcbiAgXCJvblZvaWNlUmVjb3JkRW5kXCIsXHJcbiAgXCJwbGF5Vm9pY2VcIixcclxuICBcInBhdXNlVm9pY2VcIixcclxuICBcInN0b3BWb2ljZVwiLFxyXG4gIFwib25Wb2ljZVBsYXlFbmRcIixcclxuICBcInVwbG9hZFZvaWNlXCIsXHJcbiAgXCJkb3dubG9hZFZvaWNlXCIsXHJcbiAgXCJjaG9vc2VJbWFnZVwiLFxyXG4gIFwicHJldmlld0ltYWdlXCIsXHJcbiAgXCJ1cGxvYWRJbWFnZVwiLFxyXG4gIFwiZG93bmxvYWRJbWFnZVwiLFxyXG4gIFwidHJhbnNsYXRlVm9pY2VcIixcclxuICBcImdldE5ldHdvcmtUeXBlXCIsXHJcbiAgXCJvcGVuTG9jYXRpb25cIixcclxuICBcImdldExvY2F0aW9uXCIsXHJcbiAgXCJoaWRlT3B0aW9uTWVudVwiLFxyXG4gIFwic2hvd09wdGlvbk1lbnVcIixcclxuICBcImhpZGVNZW51SXRlbXNcIixcclxuICBcInNob3dNZW51SXRlbXNcIixcclxuICBcImhpZGVBbGxOb25CYXNlTWVudUl0ZW1cIixcclxuICBcInNob3dBbGxOb25CYXNlTWVudUl0ZW1cIixcclxuICBcImNsb3NlV2luZG93XCIsXHJcbiAgXCJzY2FuUVJDb2RlXCIsXHJcbiAgXCJjaG9vc2VXWFBheVwiLFxyXG4gIFwib3BlblByb2R1Y3RTcGVjaWZpY1ZpZXdcIixcclxuICBcImFkZENhcmRcIixcclxuICBcImNob29zZUNhcmRcIixcclxuICBcIm9wZW5DYXJkXCIsXHJcbl07XHJcblxyXG5jb25zdCBvcGVuVGFncyA9IFtcclxuICAnd3gtb3Blbi1sYXVuY2gtd2VhcHAnLFxyXG4gICd3eC1vcGVuLWxhdW5jaC1hcHAnLFxyXG4gICd3eC1vcGVuLXN1YnNjcmliZScsXHJcbiAgJ3d4LW9wZW4tYXVkaW8nXHJcbl07XHJcblxyXG5kZWNsYXJlIGxldCB3eDtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFdlY2hhdE1pY3JvIGV4dGVuZHMgQmFzZURldmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRva2VuU2VydmljZTogVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgdGl0bGU6IFRpdGxlLFxyXG4gICAgQEluamVjdChCQVNFX0NMSUVOVCkgcHJpdmF0ZSBiYXNlY2xpZW50OiBCYXNlQ2xpZW50XHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgYXV0aCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuYmFzZWNsaWVudC53ZWNoYXRNaWNybyAmJiB0aGlzLmJhc2VjbGllbnQud2VjaGF0TWljcm8uYXV0aCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRva2VuSW5mbzogYW55ID0ge307XHJcbiAgICAgIHRva2VuSW5mby5hY2NvdW50ID0gdGhpcy5nZXRVcmxQYXJhbSgnYWNjb3VudCcpO1xyXG4gICAgICB0b2tlbkluZm8uYWNjZXNzVG9rZW4gPSB0aGlzLmdldFVybFBhcmFtKCdhY2Nlc3NUb2tlbicpO1xyXG4gICAgICB0b2tlbkluZm8udXNlcklkID0gdGhpcy5nZXRVcmxQYXJhbSgndXNlcklkJyk7XHJcbiAgICAgIHRva2VuSW5mby50b2tlblR5cGUgPSAnYmVhcmVyJztcclxuICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRva2VuSW5mbyBhcyBhbnkpO1xyXG4gICAgICB0aGlzLmh0dHBcclxuICAgICAgICAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgIHRoaXMudXNlci5zZXQoeyAuLi5yZXNwb25zZS5wcmluY2lwYWwsIHRlbmFudElkOiByZXNwb25zZS50ZW5hbnRJZCB9KTtcclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVXZWNoYXRDb25maWcoKTtcclxuICAgICAgICAgIC8vIOWKoOi9vee7k+adn1xyXG4gICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdlbmVyYXRlV2VjaGF0Q29uZmlnKCk6IHZvaWQge1xyXG4gICAgdGhpcy5odHRwXHJcbiAgICAgIC5nZXQoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L3dlY2hhdC9tcC9qc3Nkaz91cmw9JHtlbmNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpfWApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICB3eC5jb25maWcoe1xyXG4gICAgICAgICAgZGVidWc6IGZhbHNlLCAvLyDlvIDlkK/osIPor5XmqKHlvI8s6LCD55So55qE5omA5pyJYXBp55qE6L+U5Zue5YC85Lya5Zyo5a6i5oi356uvYWxlcnTlh7rmnaXvvIzoi6XopoHmn6XnnIvkvKDlhaXnmoTlj4LmlbDvvIzlj6/ku6XlnKhwY+err+aJk+W8gO+8jOWPguaVsOS/oeaBr+S8mumAmui/h2xvZ+aJk+WHuu+8jOS7heWcqHBj56uv5pe25omN5Lya5omT5Y2w44CCXHJcbiAgICAgICAgICBhcHBJZDogcmVzcG9uc2UuYXBwSWQsIC8vIOW/heWhq++8jOWFrOS8l+WPt+eahOWUr+S4gOagh+ivhlxyXG4gICAgICAgICAgdGltZXN0YW1wOiByZXNwb25zZS50aW1lc3RhbXAsIC8vIOW/heWhq++8jOeUn+aIkOetvuWQjeeahOaXtumXtOaIs1xyXG4gICAgICAgICAgbm9uY2VTdHI6IHJlc3BvbnNlLm5vbmNlU3RyLCAvLyDlv4XloavvvIznlJ/miJDnrb7lkI3nmoTpmo/mnLrkuLJcclxuICAgICAgICAgIHNpZ25hdHVyZTogcmVzcG9uc2Uuc2lnbmF0dXJlLCAvLyDlv4XloavvvIznrb7lkI1cclxuICAgICAgICAgIGpzQXBpTGlzdDogYXBpcywgLy8g5b+F5aGr77yM6ZyA6KaB5L2/55So55qESlPmjqXlj6PliJfooahcclxuICAgICAgICAgIG9wZW5UYWdMaXN0OiBvcGVuVGFncyAvLyDlj6/pgInvvIzpnIDopoHkvb/nlKjnmoTlvIDmlL7moIfnrb7liJfooajvvIzkvovlpoJbJ3d4LW9wZW4tbGF1bmNoLWFwcCddXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgd3gucmVhZHkoKCkgPT4ge1xyXG4gICAgICAvLyBjb25maWfkv6Hmga/pqozor4HlkI7kvJrmiafooYxyZWFkeeaWueazle+8jOaJgOacieaOpeWPo+iwg+eUqOmDveW/hemhu+WcqGNvbmZpZ+aOpeWPo+iOt+W+l+e7k+aenOS5i+WQju+8jGNvbmZpZ+aYr+S4gOS4quWuouaIt+err+eahOW8guatpeaTjeS9nO+8jFxyXG4gICAgICAvLyDmiYDku6XlpoLmnpzpnIDopoHlnKjpobXpnaLliqDovb3ml7blsLHosIPnlKjnm7jlhbPmjqXlj6PvvIzliJnpobvmiornm7jlhbPmjqXlj6PmlL7lnKhyZWFkeeWHveaVsOS4reiwg+eUqOadpeehruS/neato+ehruaJp+ihjOOAguWvueS6jueUqOaIt+inpuWPkeaXtuaJjeiwg+eUqOeahOaOpeWPo++8jOWImeWPr+S7peebtOaOpeiwg+eUqO+8jOS4jemcgOimgeaUvuWcqHJlYWR55Ye95pWw5Lit44CCXHJcbiAgICAgIGNvbnNvbGUubG9nKCflvq7kv6Fqc3Nka+WIneWni+WMluWujOaIkC4nKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHd4LmVycm9yKChyZXMpID0+IHtcclxuICAgICAgLy8gY29uZmln5L+h5oGv6aqM6K+B5aSx6LSl5Lya5omn6KGMZXJyb3Llh73mlbDvvIzlpoLnrb7lkI3ov4fmnJ/lr7zoh7Tpqozor4HlpLHotKXvvIzlhbfkvZPplJnor6/kv6Hmga/lj6/ku6XmiZPlvIBjb25maWfnmoRkZWJ1Z+aooeW8j+afpeeci++8jOS5n+WPr+S7peWcqOi/lOWbnueahHJlc+WPguaVsOS4reafpeeci++8jOWvueS6jlNQQeWPr+S7peWcqOi/memHjOabtOaWsOetvuWQjeOAglxyXG4gICAgICBjb25zb2xlLmxvZygn5b6u5L+hanNzZGvliJ3lp4vljJblpLHotKU6JywgcmVzKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb3BlbldpbmRvdyhpd2luZG93OiBJV2luZG93KTogdm9pZCB7XHJcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGl3aW5kb3cudXJsO1xyXG4gIH1cclxuXHJcbiAgc2V0VGl0bGUoaXRpdGxlOiBJVGl0bGUpOiB2b2lkIHtcclxuICAgIHRoaXMudGl0bGUuc2V0VGl0bGUoaXRpdGxlLnRpdGxlKTtcclxuICB9XHJcblxyXG4gIHNldE5hdmlnYXRpb25CYXIobmF2aWdhdGlvbkJhcjogTmF2aWdhdGlvbkJhcik6IHZvaWQge1xyXG4gICAgYWxlcnQoXCLlsI/nqIvluo/mmoLkuI3mlK/mjIHmlL7nva7mjInpkq4s6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIHNoYXJlKGlzaGFyZTogSVNoYXJlKTogdm9pZCB7XHJcbiAgICBhbGVydChcIuWwj+eoi+W6j+aaguS4jeaUr+aMgeWIhuS6qyzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9rZW4oKTogSXRva2VuIHtcclxuICAgIGNvbnN0IGl0b2tlbjogSXRva2VuID0ge1xyXG4gICAgICBhY2Nlc3NUb2tlbjogdGhpcy50b2tlblNlcnZpY2UuZ2V0KCkuYWNjZXNzVG9rZW4sXHJcbiAgICAgIHRva2VuVHlwZTogbnVsbCxcclxuICAgICAgdG9rZW5EYXRhTGluZTogbnVsbCxcclxuICAgICAgc2NvcGU6IG51bGwsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGl0b2tlbjtcclxuICB9XHJcblxyXG4gIHNjYW5Db2RlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBwID0gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHd4LnNjYW5RUkNvZGUoe1xyXG4gICAgICAgIG5lZWRSZXN1bHQ6IDEsXHJcbiAgICAgICAgc2NhblR5cGU6IFsncXJDb2RlJywgJ2JhckNvZGUnXSxcclxuICAgICAgICBzdWNjZXNzOiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJlc29sdmUocmVzLnJlc3VsdFN0cik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmcm9tKHApO1xyXG4gIH1cclxuXHJcbiAgdXNlckxvY2F0aW9uKCk6IE9ic2VydmFibGU8VXNlckxvY2F0aW9uPiB7XHJcbiAgICBjb25zdCBwID0gbmV3IFByb21pc2U8VXNlckxvY2F0aW9uPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHd4LmdldExvY2F0aW9uKHtcclxuICAgICAgICB0eXBlOiAnd2dzODQnLCAvLyDpu5jorqTkuLp3Z3M4NOeahGdwc+WdkOagh++8jOWmguaenOimgei/lOWbnuebtOaOpee7mW9wZW5Mb2NhdGlvbueUqOeahOeBq+aYn+WdkOagh++8jOWPr+S8oOWFpSdnY2owMidcclxuICAgICAgICBzdWNjZXNzKHJlczogYW55KSB7XHJcbiAgICAgICAgICBpZiAocmVzLmVyck1zZyA9PT0gJ2dldExvY2F0aW9uOm9rJykge1xyXG4gICAgICAgICAgICBjb25zdCBsYXRpdHVkZSA9IHJlcy5sYXRpdHVkZTsgLy8g57qs5bqm77yM5rWu54K55pWw77yM6IyD5Zu05Li6OTAgfiAtOTBcclxuICAgICAgICAgICAgY29uc3QgbG9uZ2l0dWRlID0gcmVzLmxvbmdpdHVkZTsgLy8g57uP5bqm77yM5rWu54K55pWw77yM6IyD5Zu05Li6MTgwIH4gLTE4MOOAglxyXG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gJ+W+ruS/oeaXoGFkZHJlc3MnO1xyXG4gICAgICAgICAgICByZXNvbHZlKHtsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhZGRyZXNzfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmcm9tKHApO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVJbldpZmkoYnNzaWRzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgYWxlcnQoXCLlsI/nqIvluo/mmoLkuI3mlK/mjIFXSUZJ6aqM6K+BLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2lmaU1hYygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgYWxlcnQoXCLlsI/nqIvluo/mmoLkuI3mlK/mjIHojrflj5ZNQUPlnLDlnYAs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBjaG9vc2VDb250YWN0cyhjb3VudDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KFwi5bCP56iL5bqP5pqC5LiN5pSv5oyB6I635Y+W6IGU57O75Lq6LOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgY29udGFjdERldGFpbHModGFyZ2V0VXNlcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgYWxlcnQoXCLlsI/nqIvluo/mmoLkuI3mlK/mjIHmn6Xor6LogZTns7vkurror6bnu4bkv6Hmga8s6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRJbWFnZShjb3VudDogbnVtYmVyLCBzb3VyY2VUeXBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgYWxlcnQoXCLlsI/nqIvluo/mmoLkuI3mlK/mjIHlm77niYfkuIrkvKAs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBvcGVuUmVhZFdpdGhUaW1lcihcclxuICAgIHVybDogYW55LFxyXG4gICAgb3BlblR5cGU6IGFueSxcclxuICAgIHRpdGxlOiBhbnksXHJcbiAgICBpZDogYW55LFxyXG4gICAgdHlwZTogYW55XHJcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KFwi5bCP56iL5bqP5pqC5LiN5pSv5oyB6K+754mp5pe26Ze057uf6K6hLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkTW92aWUobGltaXRNaW51dGU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydChcIuWwj+eoi+W6j+aaguS4jeaUr+aMgeinhumikeS4iuS8oCzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGZpbGVCcm93c2VyKHVybDogc3RyaW5nLCB0aXRsZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KFwi5bCP56iL5bqP5pqC5LiN5pSv5oyB5q2k5Yqf6IO9LOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2hCZWFjb25zKHRpY2tldDogc3RyaW5nLCBjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgd3guc3RhcnRTZWFyY2hCZWFjb25zKHtcclxuICAgICAgdGlja2V0OiB0aWNrZXQsXHJcbiAgICAgIGNvbXBsZXRlOiBjYWxsYmFjayxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzdG9wU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgd3guc3RvcFNlYXJjaEJlYWNvbnMoe1xyXG4gICAgICBjb21wbGV0ZTogY2FsbGJhY2ssXHJcbiAgICB9KTtcclxuICB9XHJcbiAgb25TZWFyY2hCZWFjb25zKGNhbGxiYWNrOiAoYXJndjogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB3eC5vblNlYXJjaEJlYWNvbnMoe1xyXG4gICAgICBjb21wbGV0ZTogY2FsbGJhY2ssXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOWwgeijheaWueazlTog6I635Y+WdXJs5Lit55qE5Y+C5pWwXHJcbiAgcHJpdmF0ZSBnZXRVcmxQYXJhbShuYW1lKTogc3RyaW5nIHtcclxuICAgIC8vIOaehOmAoOS4gOS4quWQq+acieebruagh+WPguaVsOeahOato+WImeihqOi+vuW8j+WvueixoVxyXG4gICAgY29uc3QgcmVnID0gbmV3IFJlZ0V4cCgnKF58JiknICsgbmFtZSArICc9KFteJl0qKSgmfCQpJyk7XHJcbiAgICBjb25zdCBzdHJpbmdzID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJz8nKTtcclxuICAgIC8vIOWMuemFjeebruagh+WPguaVsFxyXG4gICAgY29uc3QgciA9IHN0cmluZ3Nbc3RyaW5ncy5sZW5ndGggLSAxXS5tYXRjaChyZWcpO1xyXG4gICAgaWYgKHIgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdW5lc2NhcGUoclsyXSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIl19