difenduandada
2024-12-31 34abe6963b344c882358274957f4b992456fee40
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
 
                (function() {
                    var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
                    var __module = nodeEnv ? module : {exports:{}};
                    var __filename = 'preview-scripts/assets/Scripts/mod/startower/startower_model.js';
                    var __require = nodeEnv ? function (request) {
                        return cc.require(request);
                    } : function (request) {
                        return __quick_compile_project__.require(request, __filename);
                    };
                    function __define (exports, require, module) {
                        if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
cc._RF.push(module, '2481eZrVBpP7rPNob1XwV5e', 'startower_model');
// Scripts/mod/startower/startower_model.js
 
"use strict";
 
// --------------------------------------------------------------------
// @author: xxx@syg.com(必填, 创建模块的人员)
// @description:
//      星命塔
// <br/>Create: 2019-02-27 11:03:16
// --------------------------------------------------------------------
var StartowerEvent = require("startower_event");
 
var StartowerModel = cc.Class({
  "extends": BaseClass,
  ctor: function ctor() {
    this.ctrl = require("startower_controller").getInstance();
    this.initConfig();
  },
  properties: {},
  initConfig: function initConfig() {
    // 已通关的最大层数
    this.max_tower = 0; //剩余挑战次数
 
    this.less_count = 0; //已购买次数
 
    this.buy_count = 0;
    this.reward_list = []; //通关奖励状态
  },
  setStarTowerData: function setStarTowerData(data) {
    var tempsort = {
      0: 2,
      // 0 未领取放中间
      1: 1,
      // 1 可领取放前面
      2: 3 // 2 已领取放最后
 
    };
    this.max_tower = data.max_tower || 0;
    this.less_count = data.count || 0;
    this.buy_count = data.buy_count || 0;
 
    if (Utils.next(data.award_list) != null) {
      for (var i in data.award_list) {
        var tab = {};
        tab.id = data.award_list[i].id;
        tab.status = data.award_list[i].status;
        tab.sort = tempsort[tab.status];
        this.reward_list[data.award_list[i].id - 1] = tab;
      }
    }
 
    this.reward_list.sort(Utils.tableLowerSorter(["sort", "id"]));
    this.updateRedPoint();
    gcore.GlobalEvent.fire(StartowerEvent.Update_All_Data);
  },
  setRewardData: function setRewardData(data) {
    if (!this.reward_list || !data[0]) return;
    var tempsort = {
      0: 2,
      // 0 未领取放中间
      1: 1,
      // 1 可领取放前面
      2: 3 // 2 已领取放最后
 
    };
 
    for (var i in this.reward_list) {
      if (this.reward_list[i].id == data[0].id) {
        this.reward_list[i].status = data[0].status;
        this.reward_list[i].sort = tempsort[data[0].status];
        break;
      }
    }
 
    this.reward_list.sort(Utils.tableLowerSorter(["sort", "id"]));
  },
  sortFunc: function sortFunc(data) {
    data.sort(function (objA, objB) {
      if (objA.sort != objB.sort) {
        if (objA.sort && objB.sort) {
          return objA.sort - objB.sort;
        } else {
          return false;
        }
      } else {
        return objA.id - objB.id;
      }
    });
    return data;
  },
  getRewardData: function getRewardData(id) {
    if (!this.reward_list) return;
 
    if (id == null) {
      return this.reward_list || {};
    } else {
      return this.reward_list[id] || {};
    }
  },
  updateRedPoint: function updateRedPoint() {
    RedMgr.getInstance().addCalHandler(this.checkRedPoint.bind(this), RedIds.StarTower);
  },
  checkRedPoint: function checkRedPoint() {
    var is_open = this.ctrl.checkIsOpen();
    if (!is_open) return;
    var status = false;
 
    for (var i in this.reward_list) {
      if (this.reward_list[i].status == 1) {
        status = true;
        break;
      }
    }
 
    status = status || this.less_count > 0;
 
    var SceneConst = require("scene_const");
 
    var MainSceneController = require("mainscene_controller");
 
    MainSceneController.getInstance().setBuildRedStatus(SceneConst.CenterSceneBuild.startower, {
      bid: 1,
      status: status
    });
  },
  updateMaxTower: function updateMaxTower(data) {
    if (data && data.max_tower && this.max_tower < data.max_tower) {
      this.max_tower = data.max_tower;
    }
 
    gcore.GlobalEvent.fire(StartowerEvent.Fight_Success_Event);
  },
  updateLessCount: function updateLessCount(data) {
    if (data.count != null) {
      this.less_count = data.count || 0;
      this.updateRedPoint();
    }
 
    if (data.buy_count != null) {
      this.buy_count = data.buy_count;
    }
 
    gcore.GlobalEvent.fire(StartowerEvent.Count_Change_Event);
  },
  getNowTowerId: function getNowTowerId() {
    return this.max_tower || 0;
  },
  getTowerLessCount: function getTowerLessCount() {
    return this.less_count;
  },
  getBuyCount: function getBuyCount() {
    return this.buy_count;
  }
});
 
cc._RF.pop();
                    }
                    if (nodeEnv) {
                        __define(__module.exports, __require, __module);
                    }
                    else {
                        __quick_compile_project__.registerModuleFunc(__filename, function () {
                            __define(__module.exports, __require, __module);
                        });
                    }
                })();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcbW9kXFxzdGFydG93ZXJcXHN0YXJ0b3dlcl9tb2RlbC5qcyJdLCJuYW1lcyI6WyJTdGFydG93ZXJFdmVudCIsInJlcXVpcmUiLCJTdGFydG93ZXJNb2RlbCIsImNjIiwiQ2xhc3MiLCJCYXNlQ2xhc3MiLCJjdG9yIiwiY3RybCIsImdldEluc3RhbmNlIiwiaW5pdENvbmZpZyIsInByb3BlcnRpZXMiLCJtYXhfdG93ZXIiLCJsZXNzX2NvdW50IiwiYnV5X2NvdW50IiwicmV3YXJkX2xpc3QiLCJzZXRTdGFyVG93ZXJEYXRhIiwiZGF0YSIsInRlbXBzb3J0IiwiY291bnQiLCJVdGlscyIsIm5leHQiLCJhd2FyZF9saXN0IiwiaSIsInRhYiIsImlkIiwic3RhdHVzIiwic29ydCIsInRhYmxlTG93ZXJTb3J0ZXIiLCJ1cGRhdGVSZWRQb2ludCIsImdjb3JlIiwiR2xvYmFsRXZlbnQiLCJmaXJlIiwiVXBkYXRlX0FsbF9EYXRhIiwic2V0UmV3YXJkRGF0YSIsInNvcnRGdW5jIiwib2JqQSIsIm9iakIiLCJnZXRSZXdhcmREYXRhIiwiUmVkTWdyIiwiYWRkQ2FsSGFuZGxlciIsImNoZWNrUmVkUG9pbnQiLCJiaW5kIiwiUmVkSWRzIiwiU3RhclRvd2VyIiwiaXNfb3BlbiIsImNoZWNrSXNPcGVuIiwiU2NlbmVDb25zdCIsIk1haW5TY2VuZUNvbnRyb2xsZXIiLCJzZXRCdWlsZFJlZFN0YXR1cyIsIkNlbnRlclNjZW5lQnVpbGQiLCJzdGFydG93ZXIiLCJiaWQiLCJ1cGRhdGVNYXhUb3dlciIsIkZpZ2h0X1N1Y2Nlc3NfRXZlbnQiLCJ1cGRhdGVMZXNzQ291bnQiLCJDb3VudF9DaGFuZ2VfRXZlbnQiLCJnZXROb3dUb3dlcklkIiwiZ2V0VG93ZXJMZXNzQ291bnQiLCJnZXRCdXlDb3VudCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxjQUFjLEdBQUdD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Q0MsV0FBTixDQUFrQkMsSUFBbEIsQ0FBdUIvQixjQUFjLENBQUNxRCxtQkFBdEM7QUFDSCxHQWxIeUI7QUFvSDFCQyxFQUFBQSxlQUFlLEVBQUMseUJBQVN0QyxJQUFULEVBQWM7QUFDMUIsUUFBR0EsSUFBSSxDQUFDRSxLQUFMLElBQWMsSUFBakIsRUFBc0I7QUFDbEIsV0FBS04sVUFBTCxHQUFrQkksSUFBSSxDQUFDRSxLQUFMLElBQWMsQ0FBaEM7QUFDQSxXQUFLVSxjQUFMO0FBQ0g7O0FBQ0QsUUFBR1osSUFBSSxDQUFDSCxTQUFMLElBQWtCLElBQXJCLEVBQTBCO0FBQ3RCLFdBQUtBLFNBQUwsR0FBaUJHLElBQUksQ0FBQ0gsU0FBdEI7QUFDSDs7QUFDRGdCLElBQUFBLEtBQUssQ0FBQ0MsV0FBTixDQUFrQkMsSUFBbEIsQ0FBdUIvQixjQUFjLENBQUN1RCxrQkFBdEM7QUFDSCxHQTdIeUI7QUErSDFCQyxFQUFBQSxhQUFhLEVBQUMseUJBQVU7QUFDcEIsV0FBTyxLQUFLN0MsU0FBTCxJQUFrQixDQUF6QjtBQUNILEdBakl5QjtBQW1JMUI4QyxFQUFBQSxpQkFBaUIsRUFBQyw2QkFBVTtBQUN4QixXQUFPLEtBQUs3QyxVQUFaO0FBQ0gsR0FySXlCO0FBdUkxQjhDLEVBQUFBLFdBQVcsRUFBQyx1QkFBVTtBQUNsQixXQUFPLEtBQUs3QyxTQUFaO0FBQ0g7QUF6SXlCLENBQVQsQ0FBckIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBAYXV0aG9yOiB4eHhAc3lnLmNvbSjlv4XloassIOWIm+W7uuaooeWdl+eahOS6uuWRmClcbi8vIEBkZXNjcmlwdGlvbjpcbi8vICAgICAg5pif5ZG95aGUXG4vLyA8YnIvPkNyZWF0ZTogMjAxOS0wMi0yNyAxMTowMzoxNlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbnZhciBTdGFydG93ZXJFdmVudCA9IHJlcXVpcmUoXCJzdGFydG93ZXJfZXZlbnRcIik7XG5cbnZhciBTdGFydG93ZXJNb2RlbCA9IGNjLkNsYXNzKHtcbiAgICBleHRlbmRzOiBCYXNlQ2xhc3MsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmN0cmwgPSByZXF1aXJlKFwic3RhcnRvd2VyX2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgdGhpcy5pbml0Q29uZmlnKCk7XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXM6IHtcbiAgICB9LFxuXG4gICAgaW5pdENvbmZpZzogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyDlt7LpgJrlhbPnmoTmnIDlpKflsYLmlbBcbiAgICAgICAgdGhpcy5tYXhfdG93ZXIgPSAwO1xuICAgICAgICAvL+WJqeS9meaMkeaImOasoeaVsFxuICAgICAgICB0aGlzLmxlc3NfY291bnQgPSAwO1xuICAgICAgICAvL+W3sui0reS5sOasoeaVsFxuICAgICAgICB0aGlzLmJ1eV9jb3VudCA9IDA7XG4gICAgICAgIHRoaXMucmV3YXJkX2xpc3QgPSBbXTsgIC8v6YCa5YWz5aWW5Yqx54q25oCBXG5cbiAgICB9LFxuXG4gICAgc2V0U3RhclRvd2VyRGF0YTpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgdmFyIHRlbXBzb3J0ID0ge1xuICAgICAgICAgICAgMDogMiwgIC8vIDAg5pyq6aKG5Y+W5pS+5Lit6Ze0XG4gICAgICAgICAgICAxOiAxLCAgLy8gMSDlj6/pooblj5bmlL7liY3pnaJcbiAgICAgICAgICAgIDI6IDMsICAvLyAyIOW3sumihuWPluaUvuacgOWQjlxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWF4X3Rvd2VyID0gZGF0YS5tYXhfdG93ZXIgfHwgMDtcbiAgICAgICAgdGhpcy5sZXNzX2NvdW50ID0gZGF0YS5jb3VudCB8fCAwO1xuICAgICAgICB0aGlzLmJ1eV9jb3VudCA9IGRhdGEuYnV5X2NvdW50IHx8IDA7IFxuICAgICAgICBpZihVdGlscy5uZXh0KGRhdGEuYXdhcmRfbGlzdCkhPW51bGwpe1xuICAgICAgICAgICAgZm9yKHZhciBpIGluIGRhdGEuYXdhcmRfbGlzdCl7XG4gICAgICAgICAgICAgICAgdmFyIHRhYiA9IHt9O1xuICAgICAgICAgICAgICAgIHRhYi5pZCA9IGRhdGEuYXdhcmRfbGlzdFtpXS5pZDtcbiAgICAgICAgICAgICAgICB0YWIuc3RhdHVzID0gZGF0YS5hd2FyZF9saXN0W2ldLnN0YXR1cztcbiAgICAgICAgICAgICAgICB0YWIuc29ydCA9IHRlbXBzb3J0W3RhYi5zdGF0dXNdO1xuICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkX2xpc3RbZGF0YS5hd2FyZF9saXN0W2ldLmlkLTFdID0gdGFiO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLnJld2FyZF9saXN0LnNvcnQoVXRpbHMudGFibGVMb3dlclNvcnRlcihbXCJzb3J0XCIsXCJpZFwiXSkpXG4gICAgICAgIHRoaXMudXBkYXRlUmVkUG9pbnQoKTtcbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShTdGFydG93ZXJFdmVudC5VcGRhdGVfQWxsX0RhdGEpO1xuICAgIH0sXG5cbiAgICBzZXRSZXdhcmREYXRhOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBpZighdGhpcy5yZXdhcmRfbGlzdCB8fCAhZGF0YVswXSlyZXR1cm47XG4gICAgICAgIHZhciB0ZW1wc29ydCA9IHtcbiAgICAgICAgICAgIDA6IDIsICAvLyAwIOacqumihuWPluaUvuS4remXtFxuICAgICAgICAgICAgMTogMSwgIC8vIDEg5Y+v6aKG5Y+W5pS+5YmN6Z2iXG4gICAgICAgICAgICAyOiAzLCAgLy8gMiDlt7Lpooblj5bmlL7mnIDlkI5cbiAgICAgICAgfVxuICAgICAgICBmb3IodmFyIGkgaW4gdGhpcy5yZXdhcmRfbGlzdCl7XG4gICAgICAgICAgICBpZih0aGlzLnJld2FyZF9saXN0W2ldLmlkID09IGRhdGFbMF0uaWQpe1xuICAgICAgICAgICAgICAgIHRoaXMucmV3YXJkX2xpc3RbaV0uc3RhdHVzID0gZGF0YVswXS5zdGF0dXM7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXdhcmRfbGlzdFtpXS5zb3J0ID0gdGVtcHNvcnRbZGF0YVswXS5zdGF0dXNdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLnJld2FyZF9saXN0LnNvcnQoVXRpbHMudGFibGVMb3dlclNvcnRlcihbXCJzb3J0XCIsXCJpZFwiXSkpXG4gICAgfSxcblxuICAgIHNvcnRGdW5jOmZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBkYXRhLnNvcnQoZnVuY3Rpb24ob2JqQSwgb2JqQil7XG4gICAgICAgICAgICBpZihvYmpBLnNvcnQgIT0gb2JqQi5zb3J0KXtcbiAgICAgICAgICAgICAgICBpZihvYmpBLnNvcnQgJiYgb2JqQi5zb3J0KXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iakEuc29ydCAtIG9iakIuc29ydDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmpBLmlkIC0gb2JqQi5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG4gICAgXG4gICAgZ2V0UmV3YXJkRGF0YTpmdW5jdGlvbihpZCl7XG4gICAgICAgIGlmKCF0aGlzLnJld2FyZF9saXN0KXJldHVybjtcbiAgICAgICAgaWYoaWQgPT0gbnVsbCl7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXdhcmRfbGlzdCB8fCB7fTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZXdhcmRfbGlzdFtpZF0gfHwge307XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlUmVkUG9pbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBSZWRNZ3IuZ2V0SW5zdGFuY2UoKS5hZGRDYWxIYW5kbGVyKHRoaXMuY2hlY2tSZWRQb2ludC5iaW5kKHRoaXMpLCBSZWRJZHMuU3RhclRvd2VyKTtcbiAgICB9LFxuXG4gICAgY2hlY2tSZWRQb2ludDpmdW5jdGlvbigpe1xuICAgICAgICB2YXIgaXNfb3BlbiA9IHRoaXMuY3RybC5jaGVja0lzT3BlbigpO1xuICAgICAgICBpZighaXNfb3BlbilyZXR1cm47XG4gICAgICAgIHZhciBzdGF0dXMgPSBmYWxzZTtcbiAgICAgICAgZm9yKHZhciBpIGluIHRoaXMucmV3YXJkX2xpc3Qpe1xuICAgICAgICAgICAgaWYodGhpcy5yZXdhcmRfbGlzdFtpXS5zdGF0dXMgPT0gMSl7XG4gICAgICAgICAgICAgICAgc3RhdHVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0dXMgPSBzdGF0dXMgfHwgKHRoaXMubGVzc19jb3VudCA+IDApO1xuICAgICAgICB2YXIgU2NlbmVDb25zdCA9IHJlcXVpcmUoXCJzY2VuZV9jb25zdFwiKTtcbiAgICAgICAgdmFyIE1haW5TY2VuZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFpbnNjZW5lX2NvbnRyb2xsZXJcIik7XG4gICAgICAgIE1haW5TY2VuZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5zZXRCdWlsZFJlZFN0YXR1cyhTY2VuZUNvbnN0LkNlbnRlclNjZW5lQnVpbGQuc3RhcnRvd2VyLCB7YmlkOiAxLCBzdGF0dXM6IHN0YXR1c30pIFxuICAgIH0sXG5cbiAgICB1cGRhdGVNYXhUb3dlcjpmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgaWYoZGF0YSAmJiBkYXRhLm1heF90b3dlciAmJiB0aGlzLm1heF90b3dlciA8IGRhdGEubWF4X3Rvd2VyKXtcbiAgICAgICAgICAgIHRoaXMubWF4X3Rvd2VyID0gZGF0YS5tYXhfdG93ZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ2NvcmUuR2xvYmFsRXZlbnQuZmlyZShTdGFydG93ZXJFdmVudC5GaWdodF9TdWNjZXNzX0V2ZW50KVxuICAgIH0sXG5cbiAgICB1cGRhdGVMZXNzQ291bnQ6ZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIGlmKGRhdGEuY291bnQgIT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLmxlc3NfY291bnQgPSBkYXRhLmNvdW50IHx8IDA7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJlZFBvaW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZGF0YS5idXlfY291bnQgIT0gbnVsbCl7XG4gICAgICAgICAgICB0aGlzLmJ1eV9jb3VudCA9IGRhdGEuYnV5X2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIGdjb3JlLkdsb2JhbEV2ZW50LmZpcmUoU3RhcnRvd2VyRXZlbnQuQ291bnRfQ2hhbmdlX0V2ZW50KTtcbiAgICB9LFxuXG4gICAgZ2V0Tm93VG93ZXJJZDpmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhfdG93ZXIgfHwgMDtcbiAgICB9LFxuXG4gICAgZ2V0VG93ZXJMZXNzQ291bnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMubGVzc19jb3VudDtcbiAgICB9LFxuXG4gICAgZ2V0QnV5Q291bnQ6ZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV5X2NvdW50O1xuICAgIH1cbn0pOyJdfQ==