ngx-amap
Version:
[][npm-badge-url] [][npm-badge-url] [][ci-url]
263 lines • 15 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: services/amap-autocomplete/amap-autocomplete.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable, NgZone } from '@angular/core';
import { ReplaySubject, Observable } from 'rxjs';
import { map, switchMap } from 'rxjs/operators';
import { AmapPluginLoaderService } from '../../shared/amap-plugin-loader.service';
import { EventBinderService } from '../../shared/event-binder.service';
import { LoggerService } from '../../shared/logger/logger.service';
import * as i0 from "@angular/core";
import * as i1 from "../../shared/amap-plugin-loader.service";
import * as i2 from "../../shared/event-binder.service";
import * as i3 from "../../shared/logger/logger.service";
/** @type {?} */
const TAG = 'AmapAutocomplete';
export var AMapAutocomplete;
(function (AMapAutocomplete) {
/**
* @record
*/
function Options() { }
AMapAutocomplete.Options = Options;
if (false) {
/**
* 输入提示时限定POI类型,多个类型用“|”分隔
* @type {?|undefined}
*/
Options.prototype.type;
/**
* 输入提示时限定城市
* @type {?|undefined}
*/
Options.prototype.city;
/**
* 返回的数据类型
* @type {?|undefined}
*/
Options.prototype.datatype;
/**
* 是否强制限制在设置的城市内搜索
* @type {?|undefined}
*/
Options.prototype.citylimit;
/**
* 指定输入框
* @type {?|undefined}
*/
Options.prototype.input;
/**
* 指定输出面板
* @type {?|undefined}
*/
Options.prototype.output;
/**
* 是否在input位于页面较下方的时候自动将输入面板显示在input上方以避免被遮挡
* @type {?|undefined}
*/
Options.prototype.outPutDirAuto;
}
/**
* @record
*/
function Tip() { }
AMapAutocomplete.Tip = Tip;
if (false) {
/**
* 名称
* @type {?}
*/
Tip.prototype.name;
/**
* 所属区域
* @type {?}
*/
Tip.prototype.district;
/**
* 区域编码
* @type {?}
*/
Tip.prototype.adcode;
/**
* 地址
* @type {?}
*/
Tip.prototype.address;
/**
* 城市
* @type {?}
*/
Tip.prototype.city;
/**
* ID
* @type {?}
*/
Tip.prototype.id;
/**
* 坐标经纬度
* @type {?}
*/
Tip.prototype.location;
/**
* 类型编码
* @type {?}
*/
Tip.prototype.typecode;
}
/**
* @record
*/
function SearchResult() { }
AMapAutocomplete.SearchResult = SearchResult;
if (false) {
/**
* 查询状态说明
* @type {?}
*/
SearchResult.prototype.info;
/**
* 输入提示条数
* @type {?}
*/
SearchResult.prototype.count;
/**
* 输入提示列表
* @type {?}
*/
SearchResult.prototype.tips;
}
})(AMapAutocomplete || (AMapAutocomplete = {}));
/**
* @record
*/
export function AutocompleteSearchResult() { }
if (false) {
/** @type {?} */
AutocompleteSearchResult.prototype.status;
/** @type {?} */
AutocompleteSearchResult.prototype.result;
}
export class AmapAutocompleteService {
/**
* @param {?} plugin
* @param {?} binder
* @param {?} logger
* @param {?} ngZone
*/
constructor(plugin, binder, logger, ngZone) {
this.plugin = plugin;
this.binder = binder;
this.logger = logger;
this.ngZone = ngZone;
this.ac$ = new ReplaySubject(1);
}
/**
* 获取插件
* @return {?}
*/
get() {
return this.ac$.asObservable();
}
/**
* 侦听事件
* @param {?} event
* @return {?}
*/
on(event) {
return this.binder.bindEvent(this.get(), event);
}
/**
* 创建插件
* @param {?} options
* @return {?}
*/
create(options) {
return this.plugin.load('AMap.Autocomplete').pipe(map((/**
* @return {?}
*/
() => {
this.ac = this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => new AMap.Autocomplete(options)));
this.logger.d(TAG, 'new autocomplete created.');
this.ac$.next(this.ac);
this.ac$.complete();
return this.ac;
})));
}
/**
* 搜索
* @param {?} address
* @return {?}
*/
search(address) {
return this.get().pipe(switchMap((/**
* @param {?} ac
* @return {?}
*/
ac => new Observable((/**
* @param {?} observer
* @return {?}
*/
(observer) => {
ac.search(address, (/**
* @param {?} status
* @param {?} result
* @return {?}
*/
(status, result) => {
observer.next({ status, result });
observer.complete();
}));
})))));
}
}
AmapAutocompleteService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root',
},] }
];
/** @nocollapse */
AmapAutocompleteService.ctorParameters = () => [
{ type: AmapPluginLoaderService },
{ type: EventBinderService },
{ type: LoggerService },
{ type: NgZone }
];
/** @nocollapse */ AmapAutocompleteService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function AmapAutocompleteService_Factory() { return new AmapAutocompleteService(i0.ɵɵinject(i1.AmapPluginLoaderService), i0.ɵɵinject(i2.EventBinderService), i0.ɵɵinject(i3.LoggerService), i0.ɵɵinject(i0.NgZone)); }, token: AmapAutocompleteService, providedIn: "root" });
if (false) {
/**
* @type {?}
* @private
*/
AmapAutocompleteService.prototype.ac;
/**
* @type {?}
* @private
*/
AmapAutocompleteService.prototype.ac$;
/**
* @type {?}
* @private
*/
AmapAutocompleteService.prototype.plugin;
/**
* @type {?}
* @private
*/
AmapAutocompleteService.prototype.binder;
/**
* @type {?}
* @private
*/
AmapAutocompleteService.prototype.logger;
/**
* @type {?}
* @private
*/
AmapAutocompleteService.prototype.ngZone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1hcC1hdXRvY29tcGxldGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1hbWFwLyIsInNvdXJjZXMiOlsic2VydmljZXMvYW1hcC1hdXRvY29tcGxldGUvYW1hcC1hdXRvY29tcGxldGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7TUFJN0QsR0FBRyxHQUFHLGtCQUFrQjtBQUU5QixNQUFNLEtBQVcsZ0JBQWdCLENBaUZoQztBQWpGRCxXQUFpQixnQkFBZ0I7Ozs7SUFFL0Isc0JBNkJDOzs7Ozs7O1FBekJDLHVCQUFjOzs7OztRQUlkLHVCQUFjOzs7OztRQUlkLDJCQUFvQjs7Ozs7UUFJcEIsNEJBQW9COzs7OztRQUlwQix3QkFBa0M7Ozs7O1FBSWxDLHlCQUFpQzs7Ozs7UUFJakMsZ0NBQXdCOzs7OztJQUUxQixrQkFpQ0M7Ozs7Ozs7UUE3QkMsbUJBQWE7Ozs7O1FBSWIsdUJBQWlCOzs7OztRQUlqQixxQkFBZTs7Ozs7UUFJZixzQkFBZ0I7Ozs7O1FBSWhCLG1CQUFZOzs7OztRQUlaLGlCQUFXOzs7OztRQUlYLHVCQUFzQjs7Ozs7UUFJdEIsdUJBQWlCOzs7OztJQUVuQiwyQkFhQzs7Ozs7OztRQVRDLDRCQUFhOzs7OztRQUliLDZCQUFjOzs7OztRQUlkLDRCQUFZOztBQUdoQixDQUFDLEVBakZnQixnQkFBZ0IsS0FBaEIsZ0JBQWdCLFFBaUZoQzs7OztBQUVELDhDQUdDOzs7SUFGQywwQ0FBc0M7O0lBQ3RDLDBDQUErQzs7QUFNakQsTUFBTSxPQUFPLHVCQUF1Qjs7Ozs7OztJQUlsQyxZQUNVLE1BQStCLEVBQy9CLE1BQTBCLEVBQzFCLE1BQXFCLEVBQ3JCLE1BQWM7UUFIZCxXQUFNLEdBQU4sTUFBTSxDQUF5QjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFvQjtRQUMxQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFOaEIsUUFBRyxHQUFHLElBQUksYUFBYSxDQUFNLENBQUMsQ0FBQyxDQUFDO0lBT3JDLENBQUM7Ozs7O0lBS0osR0FBRztRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzs7Ozs7SUFLRCxFQUFFLENBQUMsS0FBYTtRQUNkLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7Ozs7OztJQUtELE1BQU0sQ0FBQyxPQUFpQztRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsSUFBSSxDQUMvQyxHQUFHOzs7UUFBQyxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCOzs7WUFBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUMsQ0FBQztZQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDakIsQ0FBQyxFQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7Ozs7OztJQUtELE1BQU0sQ0FBQyxPQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FDcEIsU0FBUzs7OztRQUNQLEVBQUUsQ0FBQyxFQUFFLENBQ0gsSUFBSSxVQUFVOzs7O1FBQUMsQ0FBQyxRQUE4QyxFQUFFLEVBQUU7WUFDaEUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPOzs7OztZQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUNwQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDLEVBQUMsQ0FBQztRQUNMLENBQUMsRUFBQyxFQUNMLENBQ0YsQ0FBQztJQUNKLENBQUM7OztZQTFERixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFsR1EsdUJBQXVCO1lBQ3ZCLGtCQUFrQjtZQUNsQixhQUFhO1lBTEQsTUFBTTs7Ozs7Ozs7SUF1R3pCLHFDQUFnQjs7Ozs7SUFDaEIsc0NBQXdDOzs7OztJQUd0Qyx5Q0FBdUM7Ozs7O0lBQ3ZDLHlDQUFrQzs7Ozs7SUFDbEMseUNBQTZCOzs7OztJQUM3Qix5Q0FBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmliZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQW1hcFBsdWdpbkxvYWRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvYW1hcC1wbHVnaW4tbG9hZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXZlbnRCaW5kZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2V2ZW50LWJpbmRlci5zZXJ2aWNlJztcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IEdldHRlciB9IGZyb20gJy4uLy4uL2Jhc2UvaW50ZXJmYWNlcyc7XG5kZWNsYXJlIGNvbnN0IEFNYXA6IGFueTtcblxuY29uc3QgVEFHID0gJ0FtYXBBdXRvY29tcGxldGUnO1xuXG5leHBvcnQgbmFtZXNwYWNlIEFNYXBBdXRvY29tcGxldGUge1xuICBleHBvcnQgdHlwZSBEYXRhVHlwZSA9ICdhbGwnIHwgJ2J1cycgfCAncG9pJyB8ICdidXNsaW5lJztcbiAgZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgICAvKipcbiAgICAgKiDovpPlhaXmj5DnpLrml7bpmZDlrppQT0nnsbvlnovvvIzlpJrkuKrnsbvlnovnlKjigJx84oCd5YiG6ZqUXG4gICAgICovXG4gICAgdHlwZT86IHN0cmluZztcbiAgICAvKipcbiAgICAgKiDovpPlhaXmj5DnpLrml7bpmZDlrprln47luIJcbiAgICAgKi9cbiAgICBjaXR5Pzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIOi/lOWbnueahOaVsOaNruexu+Wei1xuICAgICAqL1xuICAgIGRhdGF0eXBlPzogRGF0YVR5cGU7XG4gICAgLyoqXG4gICAgICog5piv5ZCm5by65Yi26ZmQ5Yi25Zyo6K6+572u55qE5Z+O5biC5YaF5pCc57SiXG4gICAgICovXG4gICAgY2l0eWxpbWl0PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiDmjIflrprovpPlhaXmoYZcbiAgICAgKi9cbiAgICBpbnB1dD86IHN0cmluZyB8IEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgLyoqXG4gICAgICog5oyH5a6a6L6T5Ye66Z2i5p2/XG4gICAgICovXG4gICAgb3V0cHV0Pzogc3RyaW5nIHwgSFRNTERpdkVsZW1lbnQ7XG4gICAgLyoqXG4gICAgICog5piv5ZCm5ZyoaW5wdXTkvY3kuo7pobXpnaLovoPkuIvmlrnnmoTml7blgJnoh6rliqjlsIbovpPlhaXpnaLmnb/mmL7npLrlnKhpbnB1dOS4iuaWueS7pemBv+WFjeiiq+mBruaMoVxuICAgICAqL1xuICAgIG91dFB1dERpckF1dG8/OiBib29sZWFuO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgVGlwIHtcbiAgICAvKipcbiAgICAgKiDlkI3np7BcbiAgICAgKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICog5omA5bGe5Yy65Z+fXG4gICAgICovXG4gICAgZGlzdHJpY3Q6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiDljLrln5/nvJbnoIFcbiAgICAgKi9cbiAgICBhZGNvZGU6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiDlnLDlnYBcbiAgICAgKi9cbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICog5Z+O5biCXG4gICAgICovXG4gICAgY2l0eTogYW55W107XG4gICAgLyoqXG4gICAgICogSURcbiAgICAgKi9cbiAgICBpZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIOWdkOagh+e7j+e6rOW6plxuICAgICAqL1xuICAgIGxvY2F0aW9uOiBBTWFwLkxuZ0xhdDtcbiAgICAvKipcbiAgICAgKiDnsbvlnovnvJbnoIFcbiAgICAgKi9cbiAgICB0eXBlY29kZTogc3RyaW5nO1xuICB9XG4gIGV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0IHtcbiAgICAvKipcbiAgICAgKiDmn6Xor6LnirbmgIHor7TmmI5cbiAgICAgKi9cbiAgICBpbmZvOiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICog6L6T5YWl5o+Q56S65p2h5pWwXG4gICAgICovXG4gICAgY291bnQ6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiDovpPlhaXmj5DnpLrliJfooahcbiAgICAgKi9cbiAgICB0aXBzOiBUaXBbXTtcbiAgfVxuICBleHBvcnQgdHlwZSBTZWFyY2hTdGF0dXMgPSAnY29tcGxldGUnIHwgJ2Vycm9yJyB8ICdub19kYXRhJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVTZWFyY2hSZXN1bHQge1xuICBzdGF0dXM6IEFNYXBBdXRvY29tcGxldGUuU2VhcmNoU3RhdHVzO1xuICByZXN1bHQ6IHN0cmluZyB8IEFNYXBBdXRvY29tcGxldGUuU2VhcmNoUmVzdWx0O1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQW1hcEF1dG9jb21wbGV0ZVNlcnZpY2UgaW1wbGVtZW50cyBHZXR0ZXI8YW55PiB7XG4gIHByaXZhdGUgYWM6IGFueTtcbiAgcHJpdmF0ZSBhYyQgPSBuZXcgUmVwbGF5U3ViamVjdDxhbnk+KDEpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcGx1Z2luOiBBbWFwUGx1Z2luTG9hZGVyU2VydmljZSxcbiAgICBwcml2YXRlIGJpbmRlcjogRXZlbnRCaW5kZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICkge31cblxuICAvKipcbiAgICog6I635Y+W5o+S5Lu2XG4gICAqL1xuICBnZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWMkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOS+puWQrOS6i+S7tlxuICAgKi9cbiAgb24oZXZlbnQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmJpbmRlci5iaW5kRXZlbnQodGhpcy5nZXQoKSwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWIm+W7uuaPkuS7tlxuICAgKi9cbiAgY3JlYXRlKG9wdGlvbnM6IEFNYXBBdXRvY29tcGxldGUuT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbi5sb2FkKCdBTWFwLkF1dG9jb21wbGV0ZScpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLmFjID0gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gbmV3IEFNYXAuQXV0b2NvbXBsZXRlKG9wdGlvbnMpKTtcbiAgICAgICAgdGhpcy5sb2dnZXIuZChUQUcsICduZXcgYXV0b2NvbXBsZXRlIGNyZWF0ZWQuJyk7XG4gICAgICAgIHRoaXMuYWMkLm5leHQodGhpcy5hYyk7XG4gICAgICAgIHRoaXMuYWMkLmNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFjO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmkJzntKJcbiAgICovXG4gIHNlYXJjaChhZGRyZXNzOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKFxuICAgICAgICBhYyA9PlxuICAgICAgICAgIG5ldyBPYnNlcnZhYmxlKChvYnNlcnZlcjogU3Vic2NyaWJlcjxBdXRvY29tcGxldGVTZWFyY2hSZXN1bHQ+KSA9PiB7XG4gICAgICAgICAgICBhYy5zZWFyY2goYWRkcmVzcywgKHN0YXR1cywgcmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoeyBzdGF0dXMsIHJlc3VsdCB9KTtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG4iXX0=