gamelet-cli 0.3.20 → 0.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/assets/package.json.twig +4 -4
  2. package/build/package.json +2 -1
  3. package/package.json +2 -1
  4. package/build/src/gamelet/download.js +0 -730
  5. package/build/src/gamelet/merges.js +0 -106
  6. package/build/src/gamelet/prepare.js +0 -275
  7. package/build/src/gamelet/upload.js +0 -279
  8. package/build/src/index.js +0 -86
  9. package/build/src/server/Constant.js +0 -10
  10. package/build/src/server/entities/Client.js +0 -57
  11. package/build/src/server/entities/ClientOwner.js +0 -67
  12. package/build/src/server/entities/ClientProject.js +0 -68
  13. package/build/src/server/entities/Gameroom.js +0 -88
  14. package/build/src/server/entities/GameroomBase.js +0 -244
  15. package/build/src/server/entities/Gamezone.js +0 -73
  16. package/build/src/server/entities/ListFilter.js +0 -193
  17. package/build/src/server/entities/Monitor.js +0 -81
  18. package/build/src/server/entities/Player.js +0 -132
  19. package/build/src/server/managers/ClientManager.js +0 -61
  20. package/build/src/server/managers/Database.js +0 -586
  21. package/build/src/server/managers/GameroomManager.js +0 -392
  22. package/build/src/server/managers/ManagerBase.js +0 -17
  23. package/build/src/server/managers/MonitorManager.js +0 -73
  24. package/build/src/server/managers/PlayerManager.js +0 -104
  25. package/build/src/server/managers/SocketManager.js +0 -50
  26. package/build/src/server/managers/UserManager.js +0 -58
  27. package/build/src/server/messages/Message.js +0 -141
  28. package/build/src/server/server.js +0 -110
  29. package/build/src/server/services/ServiceBase.js +0 -25
  30. package/build/src/server/services/clientService.js +0 -16
  31. package/build/src/server/services/gameroomService.js +0 -122
  32. package/build/src/server/services/gltserver.service.js +0 -24
  33. package/build/src/server/services/playerService.js +0 -30
  34. package/build/src/server/startServer.js +0 -31
  35. package/build/src/server/types/BadgeStatus.js +0 -25
  36. package/build/src/server/types/OrderType.js +0 -38
  37. package/build/src/server/types/SubmitType.js +0 -24
  38. package/build/src/server/types/TimeRange.js +0 -26
  39. package/build/src/server/utils/ArrayUtil.js +0 -126
  40. package/build/src/server/utils/IntUtil.js +0 -10
  41. package/build/src/server/utils/ObjectUtil.js +0 -191
  42. package/build/src/server/utils/StringUtil.js +0 -37
  43. package/build/src/server/vo/Database.js +0 -1
  44. package/build/src/server/vo/Gameroom.js +0 -1
  45. package/build/src/server/vo/Gamezone.js +0 -1
  46. package/build/src/server/vo/Player.js +0 -1
  47. package/build/src/server/vo/Response.js +0 -1
  48. package/build/src/server/vo/System.js +0 -1
  49. package/build/src/utils/cli.js +0 -49
  50. package/build/src/utils/file.js +0 -327
  51. package/build/src/utils/init.js +0 -42
  52. package/build/src/utils/log.js +0 -17
  53. package/build/src/utils/net.js +0 -39
@@ -1,586 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.database = exports.Database = void 0;
4
- const TimeRange_1 = require("./../types/TimeRange");
5
- const SubmitType_1 = require("./../types/SubmitType");
6
- const file_1 = require("../../utils/file");
7
- const Constant_1 = require("../Constant");
8
- const UserManager_1 = require("./UserManager");
9
- function getServerTimestamp(add = 0) {
10
- return Math.floor((Date.now() + add) / 1000);
11
- }
12
- class Database {
13
- constructor() {
14
- this._userItems = {};
15
- this._userBadges = {};
16
- // key = username|scoreKey
17
- this._userScores = {};
18
- // username / category / key
19
- this._userStates = {};
20
- this._login = {};
21
- this._gltPoints = 100;
22
- }
23
- _initialize(folder) {
24
- this.importBadges(folder + '/static/json/badges.json');
25
- this.importItems(folder + '/static/json/items.json');
26
- this.importScoreModes(folder + '/static/json/score_modes.json');
27
- }
28
- importBadges(file) {
29
- file_1.getFileJson(file)
30
- .then(json => {
31
- this._badges = json.list;
32
- });
33
- }
34
- importItems(file) {
35
- file_1.getFileJson(file)
36
- .then(json => {
37
- this._items = json.list;
38
- });
39
- }
40
- importScoreModes(file) {
41
- file_1.getFileJson(file)
42
- .then(json => {
43
- this._scoreModes = json.list;
44
- });
45
- }
46
- requireLogin(user) {
47
- return user;
48
- }
49
- getUserState(username, category, key) {
50
- let uState = this._userStates[username] = this._userStates[username] || {};
51
- let cState = uState[category] = uState[category] || {};
52
- let kState = cState[key] = cState[key] || {
53
- username: username,
54
- category: category,
55
- key: key,
56
- time: getServerTimestamp(),
57
- value: '',
58
- };
59
- return kState;
60
- }
61
- listScoreModes() {
62
- return Promise.resolve(this._scoreModes);
63
- }
64
- listGameBadges() {
65
- return Promise.resolve(this._badges);
66
- }
67
- getGameBadge(badgeCode) {
68
- return this.listGameBadges().then(list => list.find(b => b.code == badgeCode));
69
- }
70
- getUserBadge(username, badgeCode) {
71
- let list = this._userBadges[username];
72
- return list && list.find(ub => ub.gameBadge.code == badgeCode);
73
- }
74
- addUserBadge(userBadge) {
75
- let list = this._userBadges[userBadge.user.username];
76
- if (!list) {
77
- list = this._userBadges[userBadge.user.username] = [];
78
- }
79
- list.push(userBadge);
80
- }
81
- listGameItems() {
82
- return Promise.resolve(this._items);
83
- }
84
- getGameItem(itemCode) {
85
- return this.listGameItems().then(list => list.find(i => i.code == itemCode));
86
- }
87
- getUserItem(username, itemCode) {
88
- let list = this._userItems[username];
89
- return list && list.find(ui => ui.itemCode == itemCode);
90
- }
91
- addUserItem(userItem) {
92
- let list = this._userItems[userItem.user.username];
93
- if (!list) {
94
- list = this._userItems[userItem.user.username] = [];
95
- }
96
- list.push(userItem);
97
- }
98
- getUserScoreMap(username, scoreKey) {
99
- let key = `${username}|${scoreKey}`;
100
- let userScoreMap = this._userScores[key];
101
- if (!userScoreMap) {
102
- userScoreMap = this._userScores[key] = {
103
- scoreKey: scoreKey,
104
- };
105
- }
106
- return userScoreMap;
107
- }
108
- getUserScore(username, scoreKey, timeRange) {
109
- let userScoreMap = this.getUserScoreMap(username, scoreKey);
110
- return userScoreMap[timeRange.value];
111
- }
112
- submitUserScore(user, scoreKey, timeRange, submitType, score) {
113
- let userScoreMap = this.getUserScoreMap(user.username, scoreKey);
114
- let userScore = userScoreMap[timeRange.value];
115
- if (!userScore) {
116
- userScore = {
117
- user: user,
118
- score: score,
119
- time: getServerTimestamp(),
120
- };
121
- userScoreMap[timeRange.value] = userScore;
122
- }
123
- else {
124
- let currentScore = userScore.score;
125
- let newScore = currentScore;
126
- let time = getServerTimestamp();
127
- if (submitType == SubmitType_1.SubmitType.KEEP_HIGHEST) {
128
- if (score > currentScore) {
129
- newScore = score;
130
- }
131
- }
132
- else if (submitType == SubmitType_1.SubmitType.KEEP_LOWEST) {
133
- if (score < currentScore) {
134
- newScore = score;
135
- }
136
- }
137
- else if (submitType == SubmitType_1.SubmitType.OVERWRITE) {
138
- newScore = score;
139
- }
140
- else if (submitType == SubmitType_1.SubmitType.ADD) {
141
- newScore = currentScore + score;
142
- }
143
- else if (submitType == SubmitType_1.SubmitType.ADD_SINCE) {
144
- newScore = currentScore + score;
145
- time = userScore.time;
146
- }
147
- if (newScore != currentScore) {
148
- userScore.time = time;
149
- userScore.score = newScore;
150
- }
151
- }
152
- return userScore;
153
- }
154
- executeCommand(user, command) {
155
- let key = [command.service, command.method].join('__');
156
- let func = this[key];
157
- if (func) {
158
- return Promise.resolve()
159
- .then(() => {
160
- return func.apply(this, [user].concat(JSON.parse(command.params)));
161
- })
162
- .then(result => {
163
- if (result && result._result_) {
164
- return result._result_;
165
- }
166
- else {
167
- return [result];
168
- }
169
- });
170
- }
171
- else {
172
- return Promise.reject(`${key} is not implemneted in offline database.`);
173
- }
174
- }
175
- // system service----------------
176
- system__echo(user, message) {
177
- return [message];
178
- }
179
- system__debugReport(user, subject, content) {
180
- return [1];
181
- }
182
- // badge service ----------------
183
- badge__listGameBadgesByStatus(user, pcode, statusList) {
184
- return this.listGameBadges()
185
- .then(list => list.filter(badge => statusList.find(status => status.value == badge.status)));
186
- }
187
- badge__listGameBadgesByCodes(user, pcode, badgeCodes) {
188
- return this.listGameBadges()
189
- .then(list => list.filter(badge => badgeCodes.includes(badge.code)));
190
- }
191
- badge__getUserBadge(user, pcode, username, badgeCode) {
192
- let list = this._userBadges[username];
193
- let badge = list && list.find(ub => ub.gameBadge.code == badgeCode);
194
- return this.getUserBadge(username, badgeCode);
195
- }
196
- badge__awardBadge(user, pcode, badgeCode) {
197
- return this.getGameBadge(badgeCode)
198
- .then(badge => {
199
- if (!badge) {
200
- return Promise.reject('Badge not found');
201
- }
202
- let me = this.requireLogin(user);
203
- let userBadge = this.getUserBadge(me.username, badgeCode);
204
- if (userBadge && userBadge.count && !badge.repeatable) {
205
- return Promise.reject('The user already has the badge');
206
- }
207
- if (!userBadge) {
208
- userBadge = {
209
- user: me,
210
- gameBadge: badge,
211
- count: 0,
212
- createTime: getServerTimestamp(),
213
- modifyTime: 0,
214
- };
215
- this.addUserBadge(userBadge);
216
- }
217
- badge.aquired++;
218
- userBadge.count++;
219
- userBadge.modifyTime = getServerTimestamp();
220
- return userBadge;
221
- });
222
- }
223
- badge__removeUserBadge(user, pcode, badgeCode) {
224
- return this.getGameBadge(badgeCode)
225
- .then(badge => {
226
- if (!badge) {
227
- return Promise.reject('Badge not found');
228
- }
229
- let me = this.requireLogin(user);
230
- let userBadge = this.getUserBadge(me.username, badgeCode);
231
- if (!userBadge || !userBadge.count) {
232
- throw new Error('The user does not have the badge');
233
- }
234
- badge.aquired -= userBadge.count;
235
- userBadge.count = 0;
236
- return Promise.resolve();
237
- });
238
- }
239
- badge__listUserBadgesByUser(user, pcode, username) {
240
- return (this._userBadges[username] || []);
241
- }
242
- badge__listUserBadgesByBadge(user, pcode, badgeCode, start, length) {
243
- let list = [];
244
- for (let uname in this._userBadges) {
245
- let ubadges = this._userBadges[uname];
246
- let ubadge = ubadges.find(ub => ub.gameBadge.code == badgeCode);
247
- if (ubadge) {
248
- list.push(ubadge);
249
- }
250
- }
251
- if (start < list.length) {
252
- return list.slice(start, length);
253
- }
254
- return [];
255
- }
256
- // client service ----------------------
257
- client__getMsgServerUrl(user, pcode) {
258
- return 'http://localhost:' + Constant_1.Constant.ServerPort;
259
- }
260
- client__isAllowGltDollar(user, pcode) {
261
- return true;
262
- }
263
- // item service ------------------------
264
- item__awardItem(user, pcode, itemCode, count) {
265
- return this.getGameItem(itemCode)
266
- .then(item => {
267
- if (!item) {
268
- return Promise.reject('Item not found');
269
- }
270
- if (count <= 0) {
271
- return Promise.reject('count is 0 or less');
272
- }
273
- let me = this.requireLogin(user);
274
- let userItem = this.getUserItem(me.username, itemCode);
275
- if (userItem) {
276
- if (item.validDays) {
277
- if (userItem.count >= 1) {
278
- return Promise.reject('A user can have only one of this item.');
279
- }
280
- }
281
- else if (userItem.count >= item.limitPerUser) {
282
- return Promise.reject('The amount of the item exceeded its limit');
283
- }
284
- }
285
- else {
286
- userItem = {
287
- user: me,
288
- itemCode: itemCode,
289
- count: 0,
290
- expireTime: 0,
291
- };
292
- this.addUserItem(userItem);
293
- }
294
- userItem.count++;
295
- let validDays = item.validDays ? item.validDays : 3650;
296
- userItem.expireTime = getServerTimestamp(validDays * Constant_1.Constant.ONE_DAY);
297
- return userItem;
298
- });
299
- }
300
- item__consumeItem(user, pcode, itemCode, count) {
301
- return this.getGameItem(itemCode)
302
- .then(item => {
303
- if (!item) {
304
- return Promise.reject('Item not found');
305
- }
306
- if (count < 0) {
307
- return Promise.reject('count is a negative number');
308
- }
309
- let me = this.requireLogin(user);
310
- let userItem = this.getUserItem(me.username, itemCode);
311
- if (!userItem || !userItem.count) {
312
- return Promise.reject('The user does not have the item');
313
- }
314
- let newCount = userItem.count - count;
315
- if (newCount < 0) {
316
- return Promise.reject('The user does not have enough of the item to consume');
317
- }
318
- userItem.count = newCount;
319
- return userItem;
320
- });
321
- }
322
- item__listGameItems(user, pcode) {
323
- return this.listGameItems();
324
- }
325
- item__listGameItemsByStatus(user, pcode, statusCodes) {
326
- return this.listGameItems()
327
- .then(list => list.filter(item => statusCodes.includes(item.status)));
328
- }
329
- item__listGameItemsByCodes(user, pcode, itemCodes) {
330
- return this.listGameItems()
331
- .then(list => list.filter(item => itemCodes.includes(item.code)));
332
- }
333
- item__getUserItem(user, pcode, itemCode) {
334
- let me = this.requireLogin(user);
335
- let userItem = this.getUserItem(me.username, itemCode);
336
- if (userItem && userItem.count > 0) {
337
- return userItem;
338
- }
339
- else {
340
- return null;
341
- }
342
- }
343
- item__requireUserItem(user, pcode, itemCode, count) {
344
- let me = this.requireLogin(user);
345
- let userItem = this.getUserItem(me.username, itemCode);
346
- if (count > 0) {
347
- if (!userItem || userItem.count < count) {
348
- throw new Error('Insufficient amount of the item');
349
- }
350
- }
351
- return userItem;
352
- }
353
- item__requireOneOfUserItems(user, pcode, itemCodes, counts) {
354
- let me = this.requireLogin(user);
355
- return itemCodes.map((itemCode, index) => {
356
- let userItem = this.getUserItem(me.username, itemCode);
357
- let count = counts[index];
358
- if (count > 0) {
359
- if (!userItem || userItem.count < counts[index]) {
360
- throw new Error('Insufficient amount of an item');
361
- }
362
- }
363
- return userItem;
364
- });
365
- }
366
- item__listUserItemsByCodesAndClient(user, pcode, clientCode, itemCodes) {
367
- if (clientCode == pcode) {
368
- return this.item__listUserItems(user, pcode, 0, 1000).filter(ui => itemCodes.includes(ui.itemCode));
369
- }
370
- return [];
371
- }
372
- item__listUserItems(user, pcode, start, length) {
373
- let me = this.requireLogin(user);
374
- let list = this._userItems[me.username] || [];
375
- return list;
376
- }
377
- // score service
378
- score__submitScore(user, pcode, scoreKey, score, submitTypeValue) {
379
- let me = this.requireLogin(user);
380
- let submitType = SubmitType_1.SubmitType.getByValue(submitTypeValue);
381
- TimeRange_1.TimeRange.listAll().forEach(timeRange => {
382
- this.submitUserScore(me, scoreKey, timeRange, submitType, score);
383
- });
384
- return this.getUserScoreMap(me.username, scoreKey);
385
- }
386
- score__submitScores(user, pcode, submits) {
387
- let list = submits.map(submit => {
388
- return this.score__submitScore(user, pcode, submit[0], submit[1], submit[2]);
389
- });
390
- return list;
391
- }
392
- score__getScore(user, pcode, scoreKey, timeRange) {
393
- let me = this.requireLogin(user);
394
- return this.getUserScore(me.username, scoreKey, TimeRange_1.TimeRange.getByValue(timeRange)) || {
395
- user: me,
396
- score: 0,
397
- time: 0,
398
- };
399
- }
400
- score__getScoreAndRank(user, pcode, scoreKey, timeRange, orderType, timestamp) {
401
- let me = user;
402
- let userScore = me && this.getUserScore(me.username, scoreKey, TimeRange_1.TimeRange.getByValue(timeRange));
403
- if (!userScore) {
404
- return {
405
- _result_: [null, 0, getServerTimestamp()]
406
- };
407
- }
408
- return [userScore, 1, getServerTimestamp()];
409
- }
410
- score__listScores(user, pcode, scoreKey, timeRange, orderType, timestamp, start, length) {
411
- let me = user;
412
- let userScore = me && this.getUserScore(me.username, scoreKey, TimeRange_1.TimeRange.getByValue(timeRange));
413
- return {
414
- scores: [userScore],
415
- rankStart: 1,
416
- periodStart: getServerTimestamp(),
417
- };
418
- }
419
- score__listScoresAndRankAroundUser(user, pcode, scoreKey, timeRange, orderType, timestamp, start, length) {
420
- return this.score__listScores(user, pcode, scoreKey, timeRange, orderType, timestamp, start, length);
421
- }
422
- score__getScoresTotal(user, pcode, scoreKey, timeRange) {
423
- let me = user;
424
- let userScore = me && this.getUserScore(me.username, scoreKey, TimeRange_1.TimeRange.getByValue(timeRange));
425
- return userScore ? 1 : 0;
426
- }
427
- score__listScoresByUsernames(user, pcode, scoreKey, usernames, timeRange, timestamp) {
428
- let me = user;
429
- let userScore = me && this.getUserScore(me.username, scoreKey, TimeRange_1.TimeRange.getByValue(timeRange));
430
- if (userScore && usernames.includes(userScore.user.username)) {
431
- let scoreMap = {};
432
- scoreMap[userScore.user.username] = userScore;
433
- return {
434
- _result_: [[userScore], scoreMap]
435
- };
436
- }
437
- else {
438
- return {
439
- _result_: [[], {}]
440
- };
441
- }
442
- }
443
- score__listScoresHistory(user, pcode, scoreKey, timeRange, startTime, endTime) {
444
- let me = user;
445
- let userScore = me && this.getUserScore(me.username, scoreKey, TimeRange_1.TimeRange.getByValue(timeRange));
446
- return userScore ? [userScore] : [];
447
- }
448
- score__listCurrencyScores(user, pcode) {
449
- let me = this.requireLogin(user);
450
- return this.listScoreModes()
451
- .then(modes => modes.filter(mode => mode.toDollarRate))
452
- .then(modes => {
453
- let list = [];
454
- modes.forEach(mode => {
455
- let userScore = this.getUserScore(me.username, mode.key, TimeRange_1.TimeRange.HISTORY);
456
- if (userScore) {
457
- let scoreWithMode = Object.assign({
458
- scoreMode: mode,
459
- }, userScore);
460
- list.push(scoreWithMode);
461
- }
462
- });
463
- return list;
464
- });
465
- }
466
- score__submitGameDollar(user, pcode, scoreKey, score, meta) {
467
- let me = this.requireLogin(user);
468
- return this.listScoreModes()
469
- .then(modes => modes.find(m => m.key == scoreKey))
470
- .then(mode => {
471
- if (!mode || !mode.toDollarRate) {
472
- return Promise.reject('score key is not a currency key');
473
- }
474
- TimeRange_1.TimeRange.listAll().forEach(timeRange => this.submitUserScore(me, scoreKey, timeRange, SubmitType_1.SubmitType.ADD_SINCE, score));
475
- return this.getUserScoreMap(me.username, scoreKey);
476
- });
477
- }
478
- score__submitGameDollars(user, pcode, submits, meta) {
479
- return Promise.all(submits.map(submit => this.score__submitGameDollar(user, pcode, submit[0], submit[1], meta)));
480
- }
481
- // state service
482
- state__getState(user, pcode, username, category, key) {
483
- let userState = this.getUserState(username, category, key);
484
- return userState.time ? userState : null;
485
- }
486
- state__getMyState(user, pcode, category, key) {
487
- let me = this.requireLogin(user);
488
- return this.state__getState(user, pcode, me.username, category, key);
489
- }
490
- state__getMyStateByClient(user, pcode, clientCode, category, key) {
491
- return pcode == clientCode && this.state__getMyState(user, pcode, category, key);
492
- }
493
- state__setState(user, pcode, username, cateogry, key, value) {
494
- let userState = this.getUserState(username, cateogry, key);
495
- userState.value = value;
496
- userState.time = getServerTimestamp();
497
- return userState;
498
- }
499
- state__setMyState(user, pcode, cateogry, key, value) {
500
- let me = this.requireLogin(user);
501
- return this.state__setState(user, pcode, me.username, cateogry, key, value);
502
- }
503
- state__removeState(user, pcode, username, cateogry, key) {
504
- let userState = this.getUserState(username, cateogry, key);
505
- if (userState.time) {
506
- delete userState.value;
507
- delete userState.time;
508
- return 1;
509
- }
510
- else {
511
- return 0;
512
- }
513
- }
514
- state__removeMyState(user, pcode, category, key) {
515
- let me = this.requireLogin(user);
516
- return this.state__removeState(user, pcode, me.username, category, key);
517
- }
518
- state__getStates(user, pcode, usernames, categories, keys) {
519
- let list = [];
520
- for (let uname of usernames) {
521
- for (let cat of categories) {
522
- for (let key of keys) {
523
- let userState = this.getUserState(uname, cat, key);
524
- if (userState.time) {
525
- list.push(userState);
526
- }
527
- }
528
- }
529
- }
530
- return list;
531
- }
532
- state__getMyStates(user, pcode, categories, keys) {
533
- let me = this.requireLogin(user);
534
- return this.state__getStates(user, pcode, [me.username], categories, keys);
535
- }
536
- state__getMyStatesByClient(user, pcode, clientCode, categories, keys) {
537
- return pcode == clientCode ? this.state__getMyStates(user, pcode, categories, keys) : [];
538
- }
539
- state__removeStates(user, pcode, usernames, categories, keys) {
540
- let removed = 0;
541
- for (let uname of usernames) {
542
- for (let cat of categories) {
543
- for (let key of keys) {
544
- let userState = this.getUserState(uname, cat, key);
545
- if (userState.time) {
546
- delete userState.value;
547
- delete userState.time;
548
- ++removed;
549
- }
550
- }
551
- }
552
- }
553
- return removed;
554
- }
555
- // user service
556
- user__getByUsername(user, pcode, username) {
557
- return UserManager_1.userManager.getByUsername(username);
558
- }
559
- user__listByUsernames(user, pcode, usernames) {
560
- return UserManager_1.userManager.listByUsernames(usernames);
561
- }
562
- user__getWallet(user, pcode) {
563
- let me = this.requireLogin(user);
564
- return this.score__listCurrencyScores(user, pcode)
565
- .then(userScores => {
566
- let dollars = 0;
567
- userScores.forEach(uscore => {
568
- dollars += uscore.score * uscore.scoreMode.toDollarRate;
569
- });
570
- return {
571
- _result_: [
572
- userScores,
573
- me,
574
- dollars,
575
- this._gltPoints,
576
- ]
577
- };
578
- });
579
- }
580
- user__getReview(user, pcode) {
581
- return null;
582
- }
583
- }
584
- exports.Database = Database;
585
- exports.database = new Database();
586
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmVyL21hbmFnZXJzL0RhdGFiYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLG9EQUFpRDtBQUNqRCxzREFBbUQ7QUFDbkQsMkNBQStDO0FBQy9DLDBDQUF1QztBQUN2QywrQ0FBNEM7QUFHNUMsU0FBUyxrQkFBa0IsQ0FBQyxNQUFjLENBQUM7SUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFhLFFBQVE7SUFBckI7UUFNWSxlQUFVLEdBQXFDLEVBQUUsQ0FBQztRQUNsRCxnQkFBVyxHQUFzQyxFQUFFLENBQUM7UUFDNUQsMEJBQTBCO1FBQ2xCLGdCQUFXLEdBQXVDLEVBQUUsQ0FBQztRQUM3RCw0QkFBNEI7UUFDcEIsZ0JBQVcsR0FBMEUsRUFBRSxDQUFDO1FBRXhGLFdBQU0sR0FBb0QsRUFBRSxDQUFDO1FBRTdELGVBQVUsR0FBVyxHQUFHLENBQUM7SUF1akJyQyxDQUFDO0lBcmpCRyxXQUFXLENBQUMsTUFBYztRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxDQUFBO1FBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLHlCQUF5QixDQUFDLENBQUE7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRywrQkFBK0IsQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFDTyxZQUFZLENBQUMsSUFBWTtRQUM3QixrQkFBVyxDQUFDLElBQUksQ0FBQzthQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNULElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQTtJQUNWLENB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