contentoh-components-library 21.4.75 → 21.4.78

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 (34) hide show
  1. package/dist/assets/images/Icons/close.svg +8 -0
  2. package/dist/assets/images/Icons/edit.svg +8 -0
  3. package/dist/assets/images/Icons/save.svg +8 -0
  4. package/dist/components/atoms/ObservationFlag/ObservationFlag.stories.js +38 -0
  5. package/dist/components/atoms/ObservationFlag/index.js +52 -0
  6. package/dist/components/atoms/ObservationFlag/styles.js +18 -0
  7. package/dist/components/molecules/Phase/index.js +70 -16
  8. package/dist/components/molecules/ProductNameHeader/index.js +8 -3
  9. package/dist/components/organisms/DragAndDropPhases/index.js +166 -114
  10. package/dist/components/organisms/DragAndDropPhases/styles.js +1 -1
  11. package/dist/components/organisms/EditGroup/EditGroup.stories.js +5 -4
  12. package/dist/components/organisms/EditGroup/index.js +445 -127
  13. package/dist/components/organisms/EditGroup/styles.js +8 -16
  14. package/dist/components/organisms/FullProductNameHeader/index.js +3 -1
  15. package/dist/components/organisms/VersionSelector/index.js +101 -167
  16. package/dist/components/pages/RetailerProductEdition/index.js +60 -149
  17. package/package.json +2 -1
  18. package/src/assets/images/Icons/close.svg +8 -0
  19. package/src/assets/images/Icons/edit.svg +8 -0
  20. package/src/assets/images/Icons/save.svg +8 -0
  21. package/src/components/atoms/ObservationFlag/ObservationFlag.stories.js +20 -0
  22. package/src/components/atoms/ObservationFlag/index.js +33 -0
  23. package/src/components/atoms/ObservationFlag/styles.js +3 -0
  24. package/src/components/atoms/TabSection/index.js +1 -1
  25. package/src/components/molecules/Phase/index.js +112 -69
  26. package/src/components/molecules/ProductNameHeader/index.js +5 -1
  27. package/src/components/organisms/DragAndDropPhases/index.js +106 -75
  28. package/src/components/organisms/DragAndDropPhases/styles.js +27 -0
  29. package/src/components/organisms/EditGroup/EditGroup.stories.js +5 -4
  30. package/src/components/organisms/EditGroup/index.js +271 -108
  31. package/src/components/organisms/EditGroup/styles.js +102 -10
  32. package/src/components/organisms/FullProductNameHeader/index.js +2 -0
  33. package/src/components/organisms/VersionSelector/index.js +100 -99
  34. package/src/components/pages/RetailerProductEdition/index.js +18 -143
@@ -11,11 +11,9 @@ exports.DragAndDropPhases = void 0;
11
11
 
12
12
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
13
 
14
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
15
-
16
14
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2"));
17
15
 
18
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
16
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/asyncToGenerator"));
19
17
 
20
18
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
21
19
 
@@ -31,10 +29,10 @@ var _Modal = require("../Modal");
31
29
 
32
30
  var _axios = _interopRequireDefault(require("axios"));
33
31
 
34
- var _GeneralInputv = require("../../atoms/GeneralInputv2");
35
-
36
32
  var _checkv = _interopRequireDefault(require("../../../assets/images/Icons/checkv2.svg"));
37
33
 
34
+ var _material = require("@mui/material");
35
+
38
36
  var _jsxRuntime = require("react/jsx-runtime");
39
37
 
40
38
  var DragAndDropPhases = function DragAndDropPhases(_ref) {
@@ -67,7 +65,7 @@ var DragAndDropPhases = function DragAndDropPhases(_ref) {
67
65
  listPhases = _useState10[0],
68
66
  setListPhases = _useState10[1];
69
67
 
70
- var _useState11 = (0, _react.useState)(),
68
+ var _useState11 = (0, _react.useState)(""),
71
69
  _useState12 = (0, _slicedToArray2.default)(_useState11, 2),
72
70
  newPhaseName = _useState12[0],
73
71
  setNewPhaseName = _useState12[1];
@@ -80,135 +78,185 @@ var DragAndDropPhases = function DragAndDropPhases(_ref) {
80
78
  }),
81
79
  _useState14 = (0, _slicedToArray2.default)(_useState13, 2),
82
80
  modalData = _useState14[0],
83
- setModalData = _useState14[1];
84
-
85
- var onDragStart = function onDragStart(e, idx) {
86
- e.dataTransfer.effectAllowed = "move";
87
- e.dataTransfer.setData("text/html", e.target.parentNode);
88
- e.dataTransfer.setDragImage(e.target.parentNode, 20, 20);
89
- setDraggedItem(items[idx]);
81
+ setModalData = _useState14[1]; // useEffect(() => {console.log("nuevo",newPhaseName)},[newPhaseName]);
82
+
83
+
84
+ {
85
+ /*const updatePhases = async () => {
86
+ try {
87
+ console.log("listPhases:", listPhases);
88
+ const updateData = {
89
+ body: {
90
+ updateReferencesOfNodes: listPhases.map((phase) => ({
91
+ name:phase.phaseName,
92
+ isInitialPhase: phase.isInitialPhase,
93
+ phaseId: phase.phaseId,
94
+ nextPhaseIfApproved: phase.nextPhaseIfApproved,
95
+ })),
96
+ },
97
+ path: {
98
+ action: "update",
99
+ },
100
+ headers: {
101
+ Authorization: token,
102
+ },
103
+ };
104
+ console.log("updateData:", updateData);
105
+ const response = await axios.post(
106
+ `${process.env.REACT_APP_PHASES_ENDPOINT}/update`,
107
+ updateData
108
+ );
109
+ // Handle response if needed
110
+ console.log("Update response:", response.data);
111
+ } catch (error) {
112
+ console.error("Error al actualizar fases", error);
113
+ }
114
+ };*/
115
+ }
116
+
117
+ var handleInputChange = function handleInputChange(e) {
118
+ console.log("nuevo nombre", e.target.value);
119
+ setNewPhaseName(e.target.value);
90
120
  };
91
121
 
92
- var onDragOver = function onDragOver(index) {
93
- if (!draggedItem) {
94
- return;
95
- }
96
-
97
- if (draggedItem === tempItems[index]) {
98
- return;
99
- }
100
-
101
- var draggedIndex = tempItems.findIndex(function (item) {
102
- return item === draggedItem;
103
- });
104
- var updatedItems = (0, _toConsumableArray2.default)(tempItems);
105
-
106
- if (draggedIndex > index) {
107
- updatedItems[draggedIndex] = tempItems[index];
108
- updatedItems[index] = draggedItem;
109
- } else {
110
- updatedItems.splice(draggedIndex, 1);
111
- updatedItems.splice(index, 0, draggedItem);
112
- }
113
-
114
- setTempItems(updatedItems);
115
- };
122
+ var AddPhase = /*#__PURE__*/function () {
123
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
124
+ return _regenerator.default.wrap(function _callee$(_context) {
125
+ while (1) {
126
+ switch (_context.prev = _context.next) {
127
+ case 0:
128
+ try {
129
+ console.log("fase nueva", newPhaseName);
130
+ {
131
+ /*const body = {
132
+ name: phaseName,
133
+ retailerGroupsIds: [],
134
+ nextPhaseId: null
135
+ }
136
+ const response = await axios.post(
137
+ `${process.env.REACT_APP_PHASES_ENDPOINT}/create`,
138
+ body,
139
+ {
140
+ headers: {
141
+ Authorization: token,
142
+ },
143
+ }
144
+ );
145
+ const createdPhase = response.data.body;
146
+ console.log(createdPhase)*/
147
+ }
148
+ } catch (error) {
149
+ console.error("Error al agregar fase:", error);
150
+ }
116
151
 
117
- var onDragEnd = function onDragEnd() {
118
- setItems(tempItems);
119
- setDraggedItem(null);
120
- };
152
+ case 1:
153
+ case "end":
154
+ return _context.stop();
155
+ }
156
+ }
157
+ }, _callee);
158
+ }));
121
159
 
122
- (0, _react.useEffect)(function () {
123
- console.log("nuevo", newPhaseName);
124
- }, [newPhaseName]);
160
+ return function AddPhase() {
161
+ return _ref2.apply(this, arguments);
162
+ };
163
+ }();
125
164
 
126
- var handleAddPhase = function handleAddPhase() {
165
+ var handleAddPhaseButton = function handleAddPhaseButton() {
127
166
  setModalData({
128
167
  show: true,
168
+ className: "modal-add-phase",
129
169
  title: "Agregar fase de revisión",
130
170
  buttons: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonV.ButtonV2, {
131
171
  type: "white",
132
172
  label: "Cancelar",
133
173
  size: 12,
134
174
  onClick: function onClick() {
135
- handleAcceptModal();
175
+ setModalData(function (prev) {
176
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, prev), {}, {
177
+ show: false
178
+ });
179
+ });
136
180
  }
137
181
  }, "btn-Cancelar"), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonV.ButtonV2, {
138
182
  type: "pink",
139
183
  label: "Guardar",
140
184
  size: 12,
141
- onClick: function onClick() {
142
- handleAcceptModal();
143
- }
185
+ onClick: /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
186
+ return _regenerator.default.wrap(function _callee2$(_context2) {
187
+ while (1) {
188
+ switch (_context2.prev = _context2.next) {
189
+ case 0:
190
+ setModalData(function (prev) {
191
+ return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, prev), {}, {
192
+ show: false
193
+ });
194
+ });
195
+ _context2.next = 3;
196
+ return new Promise(function (resolve) {
197
+ return setTimeout(resolve, 0);
198
+ });
199
+
200
+ case 3:
201
+ AddPhase();
202
+
203
+ case 4:
204
+ case "end":
205
+ return _context2.stop();
206
+ }
207
+ }
208
+ }, _callee2);
209
+ }))
144
210
  }, "btn-Guardar")],
145
211
  customComponent: /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
146
212
  className: "container-input-name",
147
213
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)("p", {
148
214
  children: ["Las fases nuevas siempre se agregan al final.", /*#__PURE__*/(0, _jsxRuntime.jsx)("br", {}), "Puedes ordenar las fases arrastr\xE1ndolas."]
149
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GeneralInputv.GeneralInputv2, {
150
- inputType: "text",
151
- inputName: "input-phase-name",
152
- inputId: 0,
153
- inputValue: newPhaseName,
154
- inputOnChange: function inputOnChange(e) {
155
- return setNewPhaseName(e.target.value);
156
- },
157
- inputPlaceholder: "Nombre de fase"
215
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("input", {
216
+ className: "input-phases",
217
+ placeholder: "Nombre de fase",
218
+ value: newPhaseName,
219
+ onChange: handleInputChange
158
220
  })]
159
221
  })
160
222
  });
161
223
  };
162
224
 
163
- var handleAcceptModal = function handleAcceptModal() {
164
- var newPhaseData = {
165
- id: listPhases.length + 1,
166
- phaseName: newPhaseName,
167
- // Utiliza el nuevo nombre de la fase
168
- groupsAssigned: []
169
- };
170
- setListPhases(function (prevListPhases) {
171
- var updatedListPhases = [].concat((0, _toConsumableArray2.default)(prevListPhases), [newPhaseData]);
172
- console.log("actualizada", updatedListPhases);
173
- return updatedListPhases;
174
- });
175
- setModalData(function (prev) {
176
- return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, prev), {}, {
177
- show: false
178
- });
179
- });
225
+ var handleAcceptModal = function handleAcceptModal(PhaseName) {
226
+ console.log("nombre", PhaseName);
227
+ AddPhase(PhaseName);
180
228
  };
181
229
 
182
- var getPhases = /*#__PURE__*/function () {
183
- var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
230
+ var loadData = /*#__PURE__*/function () {
231
+ var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
184
232
  var response, phasesData, phasesDataArray;
185
- return _regenerator.default.wrap(function _callee$(_context) {
233
+ return _regenerator.default.wrap(function _callee3$(_context3) {
186
234
  while (1) {
187
- switch (_context.prev = _context.next) {
235
+ switch (_context3.prev = _context3.next) {
188
236
  case 0:
189
- _context.prev = 0;
190
- _context.next = 3;
237
+ _context3.prev = 0;
238
+ _context3.next = 3;
191
239
  return _axios.default.post("".concat(process.env.REACT_APP_PHASES_ENDPOINT, "/get"), {}, {
192
240
  headers: {
193
- Authorization: token
241
+ Authorization: token // Authorization: sessionStorage.getItem("jwt"),
242
+
194
243
  }
195
244
  });
196
245
 
197
246
  case 3:
198
- response = _context.sent;
199
- // console.log("response", response);
247
+ response = _context3.sent;
200
248
  phasesData = JSON.parse(response.data.body).data;
201
249
  phasesDataArray = [];
202
- phasesData.forEach(function (_ref3) {
203
- var phaseId = _ref3.phaseId,
204
- phaseName = _ref3.phaseName,
205
- isInitialPhase = _ref3.isInitialPhase,
206
- nextPhaseIfApproved = _ref3.nextPhaseIfApproved,
207
- groups = _ref3.groups;
208
- var groupsAssigned = groups.map(function (_ref4) {
209
- var id = _ref4.id,
210
- name = _ref4.name,
211
- active = _ref4.active;
250
+ phasesData.forEach(function (_ref5) {
251
+ var phaseId = _ref5.phaseId,
252
+ phaseName = _ref5.phaseName,
253
+ isInitialPhase = _ref5.isInitialPhase,
254
+ nextPhaseIfApproved = _ref5.nextPhaseIfApproved,
255
+ groups = _ref5.groups;
256
+ var groupsAssigned = groups.map(function (_ref6) {
257
+ var id = _ref6.id,
258
+ name = _ref6.name,
259
+ active = _ref6.active;
212
260
  return {
213
261
  groupId: id,
214
262
  groupName: name,
@@ -222,27 +270,27 @@ var DragAndDropPhases = function DragAndDropPhases(_ref) {
222
270
  nextPhaseIfApproved: nextPhaseIfApproved,
223
271
  groupsAssigned: groupsAssigned
224
272
  });
225
- }); // console.table("fases Array", phasesDataArray);
226
-
273
+ });
274
+ console.table("fases Array", phasesDataArray);
227
275
  setListPhases(phasesDataArray);
228
- _context.next = 13;
276
+ _context3.next = 14;
229
277
  break;
230
278
 
231
- case 10:
232
- _context.prev = 10;
233
- _context.t0 = _context["catch"](0);
234
- console.error("Error fetching fases:", _context.t0);
279
+ case 11:
280
+ _context3.prev = 11;
281
+ _context3.t0 = _context3["catch"](0);
282
+ console.error("Error al obtener fases:", _context3.t0);
235
283
 
236
- case 13:
284
+ case 14:
237
285
  case "end":
238
- return _context.stop();
286
+ return _context3.stop();
239
287
  }
240
288
  }
241
- }, _callee, null, [[0, 10]]);
289
+ }, _callee3, null, [[0, 11]]);
242
290
  }));
243
291
 
244
- return function getPhases() {
245
- return _ref2.apply(this, arguments);
292
+ return function loadData() {
293
+ return _ref4.apply(this, arguments);
246
294
  };
247
295
  }();
248
296
 
@@ -273,19 +321,23 @@ var DragAndDropPhases = function DragAndDropPhases(_ref) {
273
321
  };
274
322
 
275
323
  (0, _react.useEffect)(function () {
276
- return getPhases();
277
- }, []);
278
- (0, _react.useEffect)(function () {// console.log("fases lista", listPhases);
279
- }, [listPhases]);
324
+ return loadData();
325
+ }, []); // useEffect(() => {
326
+ // updatePhases();
327
+ // setModalData((prev) => ({ ...prev, show: false }));
328
+ // }, [listPhases]);
280
329
 
281
- var renderPhase = function renderPhase(idx, phase) {
330
+ var renderPhase = function renderPhase(phase, idx) {
282
331
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Phase.Phase, {
283
332
  id: idx,
284
333
  phases: listPhases,
285
334
  phaseName: phase.phaseName,
286
335
  nextPhase: phase.nextPhaseIfApproved,
287
336
  groups: phase.groupsAssigned,
288
- onDeletePhase: handleDeletePhase
337
+ onDeletePhase: function onDeletePhase() {
338
+ return handleDeletePhase(phase.id);
339
+ },
340
+ draggable: true
289
341
  }, idx);
290
342
  };
291
343
 
@@ -293,7 +345,7 @@ var DragAndDropPhases = function DragAndDropPhases(_ref) {
293
345
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_styles.Header, {
294
346
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
295
347
  className: "button-phase",
296
- onClick: handleAddPhase,
348
+ onClick: handleAddPhaseButton,
297
349
  children: "Agregar fase de revisi\xF3n"
298
350
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ButtonV.ButtonV2, {
299
351
  className: "button-save",
@@ -323,7 +375,7 @@ var DragAndDropPhases = function DragAndDropPhases(_ref) {
323
375
  }, "btn-Guardar")]
324
376
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)("ul", {
325
377
  children: listPhases.map(function (phase, idx) {
326
- return renderPhase(idx, phase, handleDeletePhase);
378
+ return renderPhase(phase, idx);
327
379
  })
328
380
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Modal.Modal, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, modalData), {}, {
329
381
  onClickBtnDefault: function onClickBtnDefault() {
@@ -15,7 +15,7 @@ var _variables = require("../../../global-files/variables");
15
15
 
16
16
  var _templateObject, _templateObject2;
17
17
 
18
- var Container = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\ndisplay:flex;\nflex-direction: column;\ngap:20px;\nwidth:100%;\nul{\n display:flex;\n flex-direction:column;\n width:100%;\n gap:10px;\n}\n .item{\n display:flex;\n width:100%;\n }\n .drag{\n width:100%;\n }\n .container-input-name{\n p{\n font-family: ", ", sans-serif;\n font-size: 12px;\n font-weight: 400;\n line-height: 14px;\n letter-spacing: 0em;\n text-align: left;\n color: ", ";\n margin-bottom:15px;\n }\n }\n"])), _variables.FontFamily.RobotoRegular, _variables.GlobalColors.gray);
18
+ var Container = _styledComponents.default.div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\ndisplay:flex;\nflex-direction: column;\ngap:20px;\nwidth:100%;\nul{\n display:flex;\n flex-direction:column;\n width:100%;\n gap:10px;\n}\n .item{\n display:flex;\n width:100%;\n }\n .drag{\n width:100%;\n }\n .container-input-name{\n p{\n font-family: ", ", sans-serif;\n font-size: 12px;\n font-weight: 400;\n line-height: 14px;\n letter-spacing: 0em;\n text-align: left;\n color: ", ";\n margin-bottom:15px;\n }\n .input-phases{\n width:100%;\n height: 30px;\n padding: 8px 10px;\n border-radius: 5px;\n border: 1px solid ", ";\n ::placeholder {\n font-family: ", ", sans-serif;\n font-size: 12px;\n font-weight: 400;\n line-height: 14px;\n letter-spacing: 0em;\n text-align: left;\n color: #CBCBCB;\n }\n }\n }\n .modal-add-phase {\n .contentModal{\n min-width:310px;\n }\n header .label-title{\n text-align: left;\n }\n .container-buttons{\n justify-content: flex-end;\n }\n }\n"])), _variables.FontFamily.RobotoRegular, _variables.GlobalColors.gray, _variables.GlobalColors.gray_light, _variables.FontFamily.RobotoRegular);
19
19
 
20
20
  exports.Container = Container;
21
21
 
@@ -27,13 +27,14 @@ var EditGroupDefault = Template.bind({});
27
27
  exports.EditGroupDefault = EditGroupDefault;
28
28
  EditGroupDefault.args = {
29
29
  groups: [{
30
- text: 'Impuestos',
30
+ groupName: 'Impuestos',
31
31
  editing: false
32
32
  }, {
33
- text: 'Legal',
33
+ groupName: 'Legal',
34
34
  editing: false
35
35
  }, {
36
- text: 'Datos Maestros',
36
+ groupName: 'Datos Maestros',
37
37
  editing: false
38
- }]
38
+ }],
39
+ token: "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIxZmFjNjY2Ny1hMDMzLTQ1NjAtOWU5ZC01MTQwMDc2MmI2MWYiLCJjb2duaXRvOmdyb3VwcyI6WyJ1c3VhcmlvX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiY29nbml0bzp1c2VybmFtZSI6IjFmYWM2NjY3LWEwMzMtNDU2MC05ZTlkLTUxNDAwNzYyYjYxZiIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiI4ZGIyZjdhZS01ZGFlLTQ3NDAtOGRiYS04YWYzYzQyNmIyOTkiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTcwMzc4Mzk0NywibmFtZSI6IlJhZGlvc2NoYWNrIE9uYm9hcmRpbmciLCJwaG9uZV9udW1iZXIiOiIrNTIxMjM0NTY3ODk4IiwiZXhwIjoxNzAzNzg3NTQ3LCJpYXQiOjE3MDM3ODM5NDcsImVtYWlsIjoicmFkaW9zaGFja2Ryb3BzaGlwQGFsbGZyZWVtYWlsLm5ldCJ9.kE0DTZhG3QNJCcVACjWQd4nm-QQKRU9n2jHwC9XtNC9H3Xz7T2F80qxcOUkaOU1IwuJLhxThzpJ9rMKS5XgyjSz_SO7nUQZFY4_vLXgmVowaV798kXRpP5uuUVPJ0b07BMjw12_k0QLeOiAfs4gP4micwedD8ItmsxfjJvv6OPir5NX0KgBjgd5OSlCafgH72yZX8SNmiCyzZkQIEO0MNLwEiIm2COgu4MwvFd73CnlJYYQa-WjCnhB35jgoc8gLpFUfBjgpMUSNRZU2Ndzt9CNuQ6he6RwsVmteMgm0e2Fyn_viRhOsMMxbP8wDXnA9pXwZHB2P-DqXYKhC4blsVA"
39
40
  };