homebridge-easy-mqtt 1.4.0-beta.2 → 1.4.0-beta.21

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 (125) hide show
  1. package/CHANGELOG.md +21 -3
  2. package/README.md +271 -24
  3. package/config.schema.json +2309 -342
  4. package/dist/accessory/abstract/base.js +5 -5
  5. package/dist/accessory/abstract/base.js.map +1 -1
  6. package/dist/accessory/abstract/common.d.ts +42 -0
  7. package/dist/accessory/abstract/common.js +169 -0
  8. package/dist/accessory/abstract/common.js.map +1 -0
  9. package/dist/accessory/abstract/helper.d.ts +1 -0
  10. package/dist/accessory/abstract/helper.js +25 -0
  11. package/dist/accessory/abstract/helper.js.map +1 -1
  12. package/dist/accessory/abstract/mqtt.d.ts +15 -26
  13. package/dist/accessory/abstract/mqtt.js +29 -148
  14. package/dist/accessory/abstract/mqtt.js.map +1 -1
  15. package/dist/accessory/addons/addon.d.ts +24 -0
  16. package/dist/accessory/addons/addon.js +52 -0
  17. package/dist/accessory/addons/addon.js.map +1 -0
  18. package/dist/accessory/addons/filter.d.ts +11 -0
  19. package/dist/accessory/addons/filter.js +37 -0
  20. package/dist/accessory/addons/filter.js.map +1 -0
  21. package/dist/accessory/climate/active.d.ts +11 -0
  22. package/dist/accessory/climate/active.js +44 -0
  23. package/dist/accessory/climate/active.js.map +1 -0
  24. package/dist/accessory/climate/fan2.d.ts +20 -0
  25. package/dist/accessory/climate/fan2.js +122 -0
  26. package/dist/accessory/climate/fan2.js.map +1 -0
  27. package/dist/accessory/climate/heaterCooler.d.ts +2 -6
  28. package/dist/accessory/climate/heaterCooler.js +7 -39
  29. package/dist/accessory/climate/heaterCooler.js.map +1 -1
  30. package/dist/accessory/climate/purifier.d.ts +19 -0
  31. package/dist/accessory/climate/purifier.js +114 -0
  32. package/dist/accessory/climate/purifier.js.map +1 -0
  33. package/dist/accessory/climate/{climate.d.ts → temperatureControl.d.ts} +4 -3
  34. package/dist/accessory/climate/temperatureControl.js +35 -0
  35. package/dist/accessory/climate/temperatureControl.js.map +1 -0
  36. package/dist/accessory/climate/thermostat.d.ts +2 -2
  37. package/dist/accessory/climate/thermostat.js +11 -10
  38. package/dist/accessory/climate/thermostat.js.map +1 -1
  39. package/dist/accessory/garage.d.ts +17 -0
  40. package/dist/accessory/garage.js +110 -0
  41. package/dist/accessory/garage.js.map +1 -0
  42. package/dist/accessory/lock.d.ts +2 -2
  43. package/dist/accessory/lock.js +3 -3
  44. package/dist/accessory/lock.js.map +1 -1
  45. package/dist/accessory/onoff/lightbulb.js +4 -4
  46. package/dist/accessory/onoff/lightbulb.js.map +1 -1
  47. package/dist/accessory/onoff/onoff.js +1 -1
  48. package/dist/accessory/onoff/onoff.js.map +1 -1
  49. package/dist/accessory/onoff/outlet.js +1 -1
  50. package/dist/accessory/onoff/outlet.js.map +1 -1
  51. package/dist/accessory/position/blind.d.ts +10 -0
  52. package/dist/accessory/position/blind.js +22 -0
  53. package/dist/accessory/position/blind.js.map +1 -0
  54. package/dist/accessory/position/position.d.ts +14 -0
  55. package/dist/accessory/position/position.js +80 -0
  56. package/dist/accessory/position/position.js.map +1 -0
  57. package/dist/accessory/security.js +4 -4
  58. package/dist/accessory/security.js.map +1 -1
  59. package/dist/accessory/sensor/air.d.ts +14 -0
  60. package/dist/accessory/sensor/air.js +96 -0
  61. package/dist/accessory/sensor/air.js.map +1 -0
  62. package/dist/accessory/sensor/carbonDioxide.js +3 -3
  63. package/dist/accessory/sensor/carbonDioxide.js.map +1 -1
  64. package/dist/accessory/sensor/carbonMonoxide.js +3 -3
  65. package/dist/accessory/sensor/carbonMonoxide.js.map +1 -1
  66. package/dist/accessory/sensor/contact.js +1 -1
  67. package/dist/accessory/sensor/contact.js.map +1 -1
  68. package/dist/accessory/sensor/humidity.js +1 -1
  69. package/dist/accessory/sensor/humidity.js.map +1 -1
  70. package/dist/accessory/sensor/leak.js +1 -1
  71. package/dist/accessory/sensor/leak.js.map +1 -1
  72. package/dist/accessory/sensor/light.d.ts +9 -0
  73. package/dist/accessory/sensor/light.js +13 -0
  74. package/dist/accessory/sensor/light.js.map +1 -0
  75. package/dist/accessory/sensor/motion.js +1 -1
  76. package/dist/accessory/sensor/motion.js.map +1 -1
  77. package/dist/accessory/sensor/occupancy.js +1 -1
  78. package/dist/accessory/sensor/occupancy.js.map +1 -1
  79. package/dist/accessory/sensor/sensor.js +4 -4
  80. package/dist/accessory/sensor/sensor.js.map +1 -1
  81. package/dist/accessory/sensor/smoke.js +1 -1
  82. package/dist/accessory/sensor/smoke.js.map +1 -1
  83. package/dist/accessory/sensor/temperature.js +1 -1
  84. package/dist/accessory/sensor/temperature.js.map +1 -1
  85. package/dist/accessory/valve.d.ts +14 -0
  86. package/dist/accessory/valve.js +71 -0
  87. package/dist/accessory/valve.js.map +1 -0
  88. package/dist/homebridge/platform.js +5 -3
  89. package/dist/homebridge/platform.js.map +1 -1
  90. package/dist/homebridge-ui/public/index.html +1 -1
  91. package/dist/homebridge-ui/public/ui.js +1 -1
  92. package/dist/i18n/en.d.ts +203 -0
  93. package/dist/i18n/en.js +226 -23
  94. package/dist/i18n/en.js.map +1 -1
  95. package/dist/i18n/fr.d.ts +468 -0
  96. package/dist/i18n/fr.js +265 -0
  97. package/dist/i18n/fr.js.map +1 -1
  98. package/dist/i18n/i18n.d.ts +206 -1
  99. package/dist/i18n/i18n.js +12 -0
  100. package/dist/i18n/i18n.js.map +1 -1
  101. package/dist/i18n/ro.d.ts +889 -0
  102. package/dist/i18n/ro.js +381 -0
  103. package/dist/i18n/ro.js.map +1 -0
  104. package/dist/i18n/template.d.ts +205 -2
  105. package/dist/i18n/template.js +3 -3
  106. package/dist/i18n/template.js.map +1 -1
  107. package/dist/i18n/vi.d.ts +1034 -0
  108. package/dist/i18n/vi.js +526 -0
  109. package/dist/i18n/vi.js.map +1 -0
  110. package/dist/model/enums.d.ts +49 -5
  111. package/dist/model/enums.js +50 -5
  112. package/dist/model/enums.js.map +1 -1
  113. package/dist/model/mqtt.d.ts +5 -4
  114. package/dist/model/mqtt.js +41 -25
  115. package/dist/model/mqtt.js.map +1 -1
  116. package/dist/model/types.d.ts +141 -24
  117. package/dist/tools/properties.d.ts +11 -0
  118. package/dist/tools/properties.js +73 -0
  119. package/dist/tools/properties.js.map +1 -0
  120. package/dist/tools/temperature.d.ts +7 -3
  121. package/dist/tools/temperature.js +20 -9
  122. package/dist/tools/temperature.js.map +1 -1
  123. package/package.json +1 -1
  124. package/dist/accessory/climate/climate.js +0 -31
  125. package/dist/accessory/climate/climate.js.map +0 -1
@@ -1,4 +1,4 @@
1
- declare const REPLACE_THIS_WITH_ISO_CODE: {
1
+ declare const TODO_REPLACE_THIS_WITH_ISO_CODE: {
2
2
  accessory: {
3
3
  batteryLevel: string;
4
4
  batteryLow: string;
@@ -9,6 +9,7 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
9
9
  };
10
10
  characteristic: {
11
11
  badValue: string;
12
+ outOfRange: string;
12
13
  updated: string;
13
14
  };
14
15
  climate: {
@@ -26,20 +27,27 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
26
27
  support: string;
27
28
  thankYou: string;
28
29
  description: {
30
+ broker: string;
29
31
  options: string;
30
32
  topics: string;
33
+ values: string;
31
34
  verbose: string;
32
35
  };
33
36
  enumNames: {
37
+ airPurifier: string;
38
+ airQualitySensor: string;
34
39
  carbonDioxideSensor: string;
35
40
  carbonMonoxideSensor: string;
36
41
  celsius: string;
37
42
  contactSensor: string;
38
43
  fahrenheit: string;
44
+ fanv2: string;
45
+ garageDoorOpener: string;
39
46
  heaterCooler: string;
40
47
  humiditySensor: string;
41
48
  leakSensor: string;
42
49
  lightbulb: string;
50
+ lightSensor: string;
43
51
  lockMechanism: string;
44
52
  motionSensor: string;
45
53
  occupancySensor: string;
@@ -49,6 +57,12 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
49
57
  switch: string;
50
58
  temperatureSensor: string;
51
59
  thermostat: string;
60
+ valve: string;
61
+ valveGeneric: string;
62
+ valveIrrigation: string;
63
+ valveShower: string;
64
+ valveFaucet: string;
65
+ windowCovering: string;
52
66
  };
53
67
  title: {
54
68
  accessory: string;
@@ -58,8 +72,10 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
58
72
  name: string;
59
73
  options: string;
60
74
  password: string;
75
+ resetOnRestart: string;
61
76
  sourceUnits: string;
62
77
  topicGetActive: string;
78
+ topicGetAirQuality: string;
63
79
  topicGetBatteryLevel: string;
64
80
  topicGetBatteryLow: string;
65
81
  topicGetBrightness: string;
@@ -72,21 +88,39 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
72
88
  topicGetColorTemperature: string;
73
89
  topicGetContactSensorState: string;
74
90
  topicGetCoolingThresholdTemperature: string;
91
+ topicGetCurrentAmbientLightLevel: string;
92
+ topicGetCurrentDoorState: string;
93
+ topicGetCurrentFanState: string;
75
94
  topicGetCurrentHeaterCoolerState: string;
76
95
  topicGetCurrentHeatingCoolingState: string;
96
+ topicGetCurrentHorizontalTiltAngle: string;
97
+ topicGetCurrentPurifierState: string;
77
98
  topicGetCurrentLockState: string;
99
+ topicGetCurrentLockStateOptional: string;
100
+ topicGetCurrentPosition: string;
78
101
  topicGetCurrentRelativeHumidity: string;
79
102
  topicGetCurrentRelativeHumidityOptional: string;
80
103
  topicGetCurrentSecurityState: string;
81
104
  topicGetCurrentTemperature: string;
105
+ topicGetCurrentVerticalTiltAngle: string;
106
+ topicGetFilterChangeIndication: string;
107
+ topicGetFilterLifeLevel: string;
82
108
  topicGetHeatingThresholdTemperature: string;
83
109
  topicGetHue: string;
84
110
  topicGetLeakDetected: string;
85
111
  topicGetLockPhysicalControls: string;
86
112
  topicGetMotionDetected: string;
113
+ topicGetNitrogenDioxideDensity: string;
114
+ topicGetObstructionDetected: string;
115
+ topicGetObstructionDetectedOptional: string;
87
116
  topicGetOccupancyDetected: string;
88
117
  topicGetOn: string;
89
118
  topicGetOutletInUse: string;
119
+ topicGetOzoneDensity: string;
120
+ topicGetPM10Density: string;
121
+ topicGetPM2_5Density: string;
122
+ topicGetPositionState: string;
123
+ topicGetRotationDirection: string;
90
124
  topicGetRotationSpeed: string;
91
125
  topicGetSaturation: string;
92
126
  topicGetSmokeDetected: string;
@@ -94,60 +128,120 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
94
128
  topicGetStatusActive: string;
95
129
  topicGetStatusFault: string;
96
130
  topicGetStatusTampered: string;
131
+ topicGetSulphurDioxideDensity: string;
132
+ topicGetTargetDoorState: string;
133
+ topicGetTargetFanState: string;
97
134
  topicGetTargetHeaterCoolerState: string;
98
135
  topicGetTargetHeatingCoolingState: string;
136
+ topicGetTargetHorizontalTiltAngle: string;
137
+ topicGetTargetPosition: string;
138
+ topicGetTargetPurifierState: string;
99
139
  topicGetTargetLockState: string;
140
+ topicGetTargetLockStateOptional: string;
100
141
  topicGetTargetRelativeHumidity: string;
101
142
  topicGetTargetSecurityState: string;
102
143
  topicGetTargetTemperature: string;
144
+ topicGetTargetVerticalTiltAngle: string;
145
+ topicGetValveActive: string;
146
+ topicGetValveInUse: string;
147
+ topicGetValveIsConfigured: string;
148
+ topicGetValveRemainingDuration: string;
149
+ topicGetValveSetDuration: string;
150
+ topicGetVOCDensity: string;
151
+ topicResetFilterIndication: string;
103
152
  topicSetActive: string;
104
153
  topicSetBrightness: string;
105
154
  topicSetColorTemperature: string;
106
155
  topicSetCoolingThresholdTemperature: string;
107
156
  topicSetHeatingThresholdTemperature: string;
157
+ topicSetHoldPosition: string;
108
158
  topicSetHue: string;
109
159
  topicSetLockPhysicalControls: string;
110
160
  topicSetOn: string;
161
+ topicSetRotationDirection: string;
111
162
  topicSetRotationSpeed: string;
112
163
  topicSetSaturation: string;
113
164
  topicSetSwingMode: string;
165
+ topicSetTargetDoorState: string;
166
+ topicSetTargetFanState: string;
114
167
  topicSetTargetHeaterCoolerState: string;
115
168
  topicSetTargetHeatingCoolingState: string;
169
+ topicSetTargetHorizontalTiltAngle: string;
170
+ topicSetTargetPosition: string;
171
+ topicSetTargetPurifierState: string;
116
172
  topicSetTargetLockState: string;
173
+ topicSetTargetLockStateOptional: string;
117
174
  topicSetTargetRelativeHumidity: string;
118
175
  topicSetTargetSecurityState: string;
119
176
  topicSetTargetTemperature: string;
177
+ topicSetTargetVerticalTiltAngle: string;
178
+ topicSetValveActive: string;
179
+ topicSetValveIsConfigured: string;
180
+ topicSetValveSetDuration: string;
120
181
  topics: string;
121
182
  type: string;
122
183
  username: string;
184
+ valveType: string;
185
+ valueActive: string;
123
186
  valueAlarmTriggered: string;
187
+ valueAQExcellent: string;
188
+ valueAQFair: string;
189
+ valueAQGood: string;
190
+ valueAQInferior: string;
191
+ valueAQPoor: string;
192
+ valueAQUnknown: string;
124
193
  valueArmAway: string;
125
194
  valueArmNight: string;
126
195
  valueArmStay: string;
127
196
  valueBatteryLow: string;
128
197
  valueCarbonDioxideDetected: string;
129
198
  valueCarbonMonoxideDetected: string;
199
+ valueConfigured: string;
130
200
  valueContactDetected: string;
131
201
  valueControlLock: string;
132
202
  valueControlUnlock: string;
203
+ valueDirectionClockwise: string;
204
+ valueDirectionCounterClockwise: string;
133
205
  valueDisarm: string;
206
+ valueDoorObstructed: string;
207
+ valueDoorStateClosed: string;
208
+ valueDoorStateClosing: string;
209
+ valueDoorStateOpen: string;
210
+ valueDoorStateOpening: string;
211
+ valueDoorStateStopped: string;
134
212
  valueFault: string;
213
+ valueFilterChange: string;
214
+ valueFilterReset: string;
215
+ valueInactive: string;
216
+ valueInUse: string;
135
217
  valueLeakDetected: string;
136
218
  valueLockStateJammed: string;
137
219
  valueLockStateSecured: string;
220
+ valueLockStateSecuredOptional: string;
138
221
  valueLockStateUnsecured: string;
222
+ valueLockStateUnsecuredOptional: string;
139
223
  valueModeAuto: string;
224
+ valueModeBlowing: string;
140
225
  valueModeCool: string;
141
226
  valueModeHeat: string;
142
227
  valueModeIdle: string;
143
228
  valueModeInactive: string;
229
+ valueModeManual: string;
144
230
  valueModeOff: string;
231
+ valueModePurifying: string;
145
232
  valueMotionDetected: string;
233
+ valueNotConfigured: string;
146
234
  valueOccupancyDetected: string;
147
235
  valueOff: string;
148
236
  valueOn: string;
149
237
  valueOutletInUse: string;
150
238
  valueOutletNotInUse: string;
239
+ valuePositionHold: string;
240
+ valuePositionDecreasing: string;
241
+ valuePositionIncreasing: string;
242
+ valuePositionObstructed: string;
243
+ valuePositionResume: string;
244
+ valuePositionStopped: string;
151
245
  valueSmokeDetected: string;
152
246
  valueStateActive: string;
153
247
  valueStateInactive: string;
@@ -165,6 +259,44 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
165
259
  noFault: string;
166
260
  notTampered: string;
167
261
  };
262
+ fanv2: {
263
+ badValue: string;
264
+ clockwise: string;
265
+ counterClockwise: string;
266
+ noCurrentStateValues: string;
267
+ noTargetStateValues: string;
268
+ setDirectionClockwise: string;
269
+ setDirectionCounterClockwise: string;
270
+ stateAuto: string;
271
+ stateBlowing: string;
272
+ stateIdle: string;
273
+ stateInactive: string;
274
+ stateManual: string;
275
+ stateUnknown: string;
276
+ unknownValue: string;
277
+ };
278
+ filter: {
279
+ change: string;
280
+ level: string;
281
+ ok: string;
282
+ reset: string;
283
+ };
284
+ garage: {
285
+ badValue: string;
286
+ noCurrentStateValues: string;
287
+ noTargetStateValues: string;
288
+ obstructed: string;
289
+ stateClosed: string;
290
+ stateClosedFuture: string;
291
+ stateClosing: string;
292
+ stateOpen: string;
293
+ stateOpenFuture: string;
294
+ stateOpening: string;
295
+ stateStopped: string;
296
+ stateUnknown: string;
297
+ unknownValue: string;
298
+ unobstructed: string;
299
+ };
168
300
  heaterCooler: {
169
301
  active: string;
170
302
  activeSet: string;
@@ -213,6 +345,7 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
213
345
  };
214
346
  mqttClient: {
215
347
  badOptions: string;
348
+ badMessages: string;
216
349
  connected: string;
217
350
  connectionClosed: string;
218
351
  error: string;
@@ -238,6 +371,41 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
238
371
  inUse: string;
239
372
  notInUse: string;
240
373
  };
374
+ position: {
375
+ blind: {
376
+ currentHorizontal: string;
377
+ currentVertical: string;
378
+ targetHorizontal: string;
379
+ targetHorizontalSet: string;
380
+ targetVertical: string;
381
+ targetVerticalSet: string;
382
+ };
383
+ current: string;
384
+ hold: string;
385
+ noPositionValues: string;
386
+ obstructed: string;
387
+ resume: string;
388
+ stateDecreasing: string;
389
+ stateIncreasing: string;
390
+ stateStopped: string;
391
+ stateUnknown: string;
392
+ target: string;
393
+ targetSet: string;
394
+ unknownValue: string;
395
+ unobstructed: string;
396
+ };
397
+ purifier: {
398
+ badValue: string;
399
+ noCurrentStateValues: string;
400
+ noTargetStateValues: string;
401
+ stateAuto: string;
402
+ stateIdle: string;
403
+ stateInactive: string;
404
+ stateManual: string;
405
+ statePurifying: string;
406
+ stateUnknown: string;
407
+ unknownValue: string;
408
+ };
241
409
  security: {
242
410
  badValue: string;
243
411
  noStateValues: string;
@@ -254,6 +422,22 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
254
422
  unknownValue: string;
255
423
  };
256
424
  sensor: {
425
+ air: {
426
+ noStateValues: string;
427
+ densityNitrogen: string;
428
+ densityOzone: string;
429
+ densityPM10: string;
430
+ densityPM2_5: string;
431
+ densitySulphur: string;
432
+ densityVOC: string;
433
+ qualityExcellent: string;
434
+ qualityFair: string;
435
+ qualityGood: string;
436
+ qualityInferior: string;
437
+ qualityPoor: string;
438
+ qualityUnknown: string;
439
+ unknownValue: string;
440
+ };
257
441
  carbonDioxide: {
258
442
  active: string;
259
443
  inactive: string;
@@ -274,6 +458,9 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
274
458
  active: string;
275
459
  inactive: string;
276
460
  };
461
+ light: {
462
+ level: string;
463
+ };
277
464
  motion: {
278
465
  active: string;
279
466
  inactive: string;
@@ -311,5 +498,21 @@ declare const REPLACE_THIS_WITH_ISO_CODE: {
311
498
  temperatureTargetFuture: string;
312
499
  unknownValue: string;
313
500
  };
501
+ valve: {
502
+ active: string;
503
+ activeSet: string;
504
+ badValveType: string;
505
+ configured: string;
506
+ configuredFuture: string;
507
+ durationRemaining: string;
508
+ inactive: string;
509
+ inactiveSet: string;
510
+ inUse: string;
511
+ notConfigured: string;
512
+ notConfiguredFuture: string;
513
+ notInUse: string;
514
+ setDuration: string;
515
+ setDurationFuture: string;
516
+ };
314
517
  };
315
- export default REPLACE_THIS_WITH_ISO_CODE;
518
+ export default TODO_REPLACE_THIS_WITH_ISO_CODE;
@@ -1,8 +1,8 @@
1
1
  import merge from 'lodash.merge';
2
2
  import en from './en.js';
3
3
  const overrides = {
4
- // Copy strings from en.js to here and translate
4
+ // TODO copy strings from en.js to here and translate
5
5
  };
6
- const REPLACE_THIS_WITH_ISO_CODE = merge({}, en, overrides);
7
- export default REPLACE_THIS_WITH_ISO_CODE;
6
+ const TODO_REPLACE_THIS_WITH_ISO_CODE = merge({}, en, overrides);
7
+ export default TODO_REPLACE_THIS_WITH_ISO_CODE;
8
8
  //# sourceMappingURL=template.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/i18n/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,SAAS,GAAG;AAEhB,gDAAgD;CAEjD,CAAC;AAEF,MAAM,0BAA0B,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AAE5D,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/i18n/template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,cAAc,CAAC;AAEjC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,MAAM,SAAS,GAAG;AAEhB,qDAAqD;CAEtD,CAAC;AAEF,MAAM,+BAA+B,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AAEjE,eAAe,+BAA+B,CAAC"}