@devtron-labs/devtron-fe-common-lib 0.0.52-beta-3 → 0.0.52-beta-5
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.
- package/.eslintignore +17 -0
- package/.husky/pre-commit +0 -0
- package/.lintstagedrc +1 -1
- package/dist/Common/BreadCrumb/BreadCrumb.d.ts +1 -1
- package/dist/Common/BreadCrumb/BreadcrumbStore.d.ts +2 -2
- package/dist/Common/Constants.d.ts +1 -1
- package/dist/Common/CustomInput/CustomInput.d.ts +1 -1
- package/dist/Common/CustomInput/Types.d.ts +1 -2
- package/dist/Common/CustomTagSelector/ResizableTagTextArea.d.ts +1 -1
- package/dist/Common/DeleteComponentModal/DeleteComponent.d.ts +1 -1
- package/dist/Common/DevtronProgressing/DevtronProgressing.d.ts +1 -1
- package/dist/Common/Dialogs/ConfirmationDialog.d.ts +6 -6
- package/dist/Common/Dialogs/DeleteDialog.d.ts +1 -1
- package/dist/Common/Dialogs/ForceDeleteDialog.d.ts +1 -1
- package/dist/Common/Dialogs/Types.d.ts +1 -1
- package/dist/Common/EmptyState/EmptyState.d.ts +17 -20
- package/dist/Common/EmptyState/GenericEmptyState.d.ts +1 -1
- package/dist/Common/Error.d.ts +1 -2
- package/dist/Common/ErrorScreenNotFound.d.ts +1 -1
- package/dist/Common/Helper.d.ts +1 -1
- package/dist/Common/ImageTags.d.ts +1 -1
- package/dist/Common/InfoColorBar/InfoColourbar.d.ts +1 -1
- package/dist/Common/Modals/Modal.d.ts +2 -2
- package/dist/Common/Modals/OpaqueModal.d.ts +3 -3
- package/dist/Common/Modals/VisibleModal.d.ts +3 -3
- package/dist/Common/Modals/VisibleModal2.d.ts +3 -3
- package/dist/Common/MultiSelectCustomization.d.ts +1 -1
- package/dist/Common/Policy.Types.d.ts +2 -2
- package/dist/Common/PopupMenu.d.ts +5 -5
- package/dist/Common/Progressing.d.ts +2 -2
- package/dist/Common/RadioGroup/RadioGroup.d.ts +1 -1
- package/dist/Common/ResizableTextarea.d.ts +1 -1
- package/dist/Common/TippyCustomized.d.ts +1 -1
- package/dist/Common/ToastBody.d.ts +5 -5
- package/dist/index.d.ts +1 -1
- package/dist/index.js +315 -239
- package/package.json +1 -1
- package/src/Common/AddCDButton/AddCDButton.tsx +2 -1
- package/src/Common/Api.ts +25 -20
- package/src/Common/AppStatus/AppStatus.tsx +12 -12
- package/src/Common/AppStatus/utils.ts +5 -6
- package/src/Common/BreadCrumb/BreadCrumb.tsx +28 -32
- package/src/Common/BreadCrumb/BreadcrumbStore.tsx +2 -2
- package/src/Common/BreadCrumb/Types.ts +12 -11
- package/src/Common/ChartVersionAndTypeSelector.tsx +1 -1
- package/src/Common/Checkbox.tsx +19 -17
- package/src/Common/ClipboardButton/ClipboardButton.tsx +1 -1
- package/src/Common/ClipboardButton/__tests__/ClipboardButton.test.tsx +1 -0
- package/src/Common/Common.service.ts +65 -60
- package/src/Common/Constants.ts +9 -9
- package/src/Common/CustomInput/CustomInput.tsx +28 -22
- package/src/Common/CustomInput/Types.ts +3 -4
- package/src/Common/CustomInput/index.ts +1 -1
- package/src/Common/CustomTagSelector/PropagateTagInfo.tsx +18 -15
- package/src/Common/CustomTagSelector/ResizableTagTextArea.tsx +9 -9
- package/src/Common/CustomTagSelector/TagDetails.tsx +3 -9
- package/src/Common/CustomTagSelector/TagLabelSelect.tsx +9 -7
- package/src/Common/CustomTagSelector/TagLabelValueSelector.tsx +35 -31
- package/src/Common/CustomTagSelector/TagSelector.utils.ts +3 -2
- package/src/Common/CustomTagSelector/Types.ts +1 -1
- package/src/Common/CustomTagSelector/ValidationRules.ts +22 -18
- package/src/Common/CustomTagSelector/index.ts +2 -2
- package/src/Common/DebouncedSearch/DebouncedSearch.tsx +1 -2
- package/src/Common/DebouncedSearch/__tests__/DebouncedSearch.test.tsx +1 -0
- package/src/Common/DeleteComponentModal/DeleteComponent.tsx +32 -27
- package/src/Common/DeleteComponentModal/types.ts +1 -1
- package/src/Common/DevtronProgressing/DevtronProgressing.tsx +8 -5
- package/src/Common/Dialogs/ConfirmationDialog.tsx +24 -24
- package/src/Common/Dialogs/DeleteDialog.tsx +5 -3
- package/src/Common/Dialogs/DialogForm.tsx +35 -31
- package/src/Common/Dialogs/ForceDeleteDialog.tsx +7 -13
- package/src/Common/Dialogs/Types.ts +12 -12
- package/src/Common/Dialogs/index.ts +1 -1
- package/src/Common/Drawer/Drawer.tsx +1 -1
- package/src/Common/EmptyState/EmptyState.tsx +17 -13
- package/src/Common/EmptyState/GenericEmptyState.tsx +15 -25
- package/src/Common/Error.tsx +5 -5
- package/src/Common/ErrorScreenNotFound.tsx +12 -9
- package/src/Common/Grid/Grid.tsx +2 -1
- package/src/Common/Helper.tsx +37 -36
- package/src/Common/Hooks/UseClickOutside/UseClickOutside.tsx +1 -1
- package/src/Common/Hooks/UseSuperAdmin/UseSuperAdmin.tsx +1 -1
- package/src/Common/Hooks/UseWindowSize/UseWindowSize.tsx +7 -5
- package/src/Common/ImageTags.Types.ts +3 -2
- package/src/Common/ImageTags.tsx +66 -61
- package/src/Common/InfoColorBar/InfoColourbar.tsx +5 -10
- package/src/Common/Modals/Modal.tsx +3 -3
- package/src/Common/Modals/OpaqueModal.tsx +18 -25
- package/src/Common/Modals/VisibleModal.tsx +3 -7
- package/src/Common/Modals/VisibleModal2.tsx +15 -20
- package/src/Common/MultiSelectCustomization.tsx +13 -9
- package/src/Common/Policy.Types.ts +38 -38
- package/src/Common/PopupMenu.tsx +9 -10
- package/src/Common/Progressing.tsx +18 -15
- package/src/Common/RJSF/Form.tsx +1 -0
- package/src/Common/RJSF/common/FieldRow.tsx +1 -0
- package/src/Common/RJSF/config.ts +1 -0
- package/src/Common/RJSF/templates/ArrayFieldItemTemplate.tsx +1 -1
- package/src/Common/RJSF/templates/ArrayFieldTemplate.tsx +1 -0
- package/src/Common/RJSF/templates/BaseInput.tsx +1 -0
- package/src/Common/RJSF/templates/ButtonTemplates/AddButton.tsx +1 -0
- package/src/Common/RJSF/templates/ButtonTemplates/RemoveButton.tsx +1 -0
- package/src/Common/RJSF/templates/ButtonTemplates/SubmitButton.tsx +6 -1
- package/src/Common/RJSF/templates/Description.tsx +1 -0
- package/src/Common/RJSF/templates/Field.tsx +3 -14
- package/src/Common/RJSF/templates/FieldErrorTemplate.tsx +9 -6
- package/src/Common/RJSF/templates/ObjectFieldTemplate.tsx +7 -5
- package/src/Common/RJSF/templates/TitleField.tsx +1 -0
- package/src/Common/RJSF/templates/WrapIfAdditionalTemplate.tsx +1 -0
- package/src/Common/RJSF/utils.ts +57 -53
- package/src/Common/RJSF/widgets/Checkbox.tsx +2 -2
- package/src/Common/RJSF/widgets/Select.tsx +1 -0
- package/src/Common/RadioGroup/RadioGroup.tsx +23 -18
- package/src/Common/RadioGroup.tsx +23 -24
- package/src/Common/Reload.tsx +1 -0
- package/src/Common/ResizableTextarea.tsx +17 -18
- package/src/Common/Security/ScanVulnerabilitiesTable.tsx +34 -29
- package/src/Common/ServerError.ts +1 -5
- package/src/Common/TippyCustomized.tsx +38 -41
- package/src/Common/ToastBody.tsx +7 -6
- package/src/Common/Toggle/Toggle.tsx +3 -3
- package/src/Common/Types.ts +19 -19
- package/src/custom.d.ts +7 -7
- package/src/index.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -11,20 +11,20 @@ var utils = require('@rjsf/utils');
|
|
|
11
11
|
var Draggable = require('react-draggable');
|
|
12
12
|
|
|
13
13
|
function _interopNamespaceDefault(e) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
});
|
|
23
|
-
}
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
24
22
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n.default = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
@@ -50,7 +50,7 @@ var ROUTES = {
|
|
|
50
50
|
USER_CHECK_ROLE: 'user/check/roles',
|
|
51
51
|
IMAGE_TAGGING: 'app/image-tagging',
|
|
52
52
|
CD_MATERIAL_GET: 'app/cd-pipeline',
|
|
53
|
-
DEPLOYMENT_TEMPLATE_LIST: 'app/template/list'
|
|
53
|
+
DEPLOYMENT_TEMPLATE_LIST: 'app/template/list'
|
|
54
54
|
};
|
|
55
55
|
exports.KEY_VALUE = void 0;
|
|
56
56
|
(function (KEY_VALUE) {
|
|
@@ -254,9 +254,9 @@ var REGISTRY_TYPE_MAP = {
|
|
|
254
254
|
},
|
|
255
255
|
};
|
|
256
256
|
var RepositoryAction = {
|
|
257
|
-
CONTAINER:
|
|
258
|
-
CHART_PULL:
|
|
259
|
-
CHART_PUSH:
|
|
257
|
+
CONTAINER: "CONTAINER",
|
|
258
|
+
CHART_PULL: "CHART_PULL",
|
|
259
|
+
CHART_PUSH: "CHART_PUSH"
|
|
260
260
|
};
|
|
261
261
|
var MAX_Z_INDEX = 2147483647;
|
|
262
262
|
|
|
@@ -584,7 +584,7 @@ function handleServerError(contentType, response) {
|
|
|
584
584
|
status = response.statusText || responseMessages[code];
|
|
585
585
|
serverError = new ServerErrors({ code: code, errors: [] });
|
|
586
586
|
if (!(contentType !== 'application/json')) return [3 /*break*/, 1];
|
|
587
|
-
//
|
|
587
|
+
//used for better debugging,
|
|
588
588
|
status = "".concat(responseMessages[code], ". Please try again.");
|
|
589
589
|
return [3 /*break*/, 3];
|
|
590
590
|
case 1: return [4 /*yield*/, response.json()];
|
|
@@ -612,8 +612,8 @@ function fetchAPI(url, type, data, signal, preventAutoLogout, isMultipartRequest
|
|
|
612
612
|
method: type,
|
|
613
613
|
signal: signal,
|
|
614
614
|
body: data ? JSON.stringify(data) : undefined,
|
|
615
|
-
credentials: 'include',
|
|
616
615
|
};
|
|
616
|
+
options['credentials'] = 'include';
|
|
617
617
|
return [2 /*return*/, fetch("".concat(Host, "/").concat(url), !isMultipartRequest
|
|
618
618
|
? options
|
|
619
619
|
: {
|
|
@@ -646,17 +646,17 @@ function fetchAPI(url, type, data, signal, preventAutoLogout, isMultipartRequest
|
|
|
646
646
|
if (contentType === 'application/json') {
|
|
647
647
|
return [2 /*return*/, response.json().then(function (responseBody) {
|
|
648
648
|
if (responseBody.code >= 300 && responseBody.code <= 599) {
|
|
649
|
-
//
|
|
649
|
+
//Test Code in Response Body, despite successful HTTP Response Code
|
|
650
650
|
throw new ServerErrors({ code: responseBody.code, errors: responseBody.errors });
|
|
651
651
|
}
|
|
652
652
|
else {
|
|
653
|
-
//
|
|
653
|
+
//Successfull Response. Expected Response Type {code, result, status}
|
|
654
654
|
return responseBody;
|
|
655
655
|
}
|
|
656
656
|
})];
|
|
657
657
|
}
|
|
658
|
-
if (contentType === 'octet-stream' || contentType === 'application/octet-stream') {
|
|
659
|
-
//
|
|
658
|
+
else if (contentType === 'octet-stream' || contentType === 'application/octet-stream') {
|
|
659
|
+
//used in getArtifact() API only
|
|
660
660
|
return [2 /*return*/, response];
|
|
661
661
|
}
|
|
662
662
|
_a.label = 4;
|
|
@@ -664,7 +664,7 @@ function fetchAPI(url, type, data, signal, preventAutoLogout, isMultipartRequest
|
|
|
664
664
|
}
|
|
665
665
|
});
|
|
666
666
|
}); }, function (error) {
|
|
667
|
-
//
|
|
667
|
+
//Network call fails. Handle Failed to Fetch
|
|
668
668
|
var err = {
|
|
669
669
|
code: 0,
|
|
670
670
|
userMessage: error.message,
|
|
@@ -712,11 +712,15 @@ function fetchInTime(url, type, data, options, isMultipartRequest) {
|
|
|
712
712
|
}
|
|
713
713
|
});
|
|
714
714
|
}
|
|
715
|
-
var post = function (url, data, options, isMultipartRequest) {
|
|
715
|
+
var post = function (url, data, options, isMultipartRequest) {
|
|
716
|
+
return fetchInTime(url, 'POST', data, options, isMultipartRequest);
|
|
717
|
+
};
|
|
716
718
|
var put = function (url, data, options) {
|
|
717
719
|
return fetchInTime(url, 'PUT', data, options);
|
|
718
720
|
};
|
|
719
|
-
var get = function (url, options) {
|
|
721
|
+
var get = function (url, options) {
|
|
722
|
+
return fetchInTime(url, 'GET', null, options);
|
|
723
|
+
};
|
|
720
724
|
var trash = function (url, data, options) {
|
|
721
725
|
return fetchInTime(url, 'DELETE', data, options);
|
|
722
726
|
};
|
|
@@ -775,10 +779,10 @@ var SvgIcProgressing = function SvgIcProgressing(props) {
|
|
|
775
779
|
}))));
|
|
776
780
|
};
|
|
777
781
|
|
|
778
|
-
|
|
782
|
+
function EmptyState(_a) {
|
|
779
783
|
var children = _a.children, _b = _a.className, className = _b === void 0 ? '' : _b;
|
|
780
784
|
return (jsxRuntime.jsx("div", __assign({ className: "flex column empty-state w-100 h-100 ".concat(className) }, { children: children })));
|
|
781
|
-
}
|
|
785
|
+
}
|
|
782
786
|
function Image(_a) {
|
|
783
787
|
var children = _a.children;
|
|
784
788
|
return children;
|
|
@@ -787,15 +791,17 @@ function Title(_a) {
|
|
|
787
791
|
var children = _a.children;
|
|
788
792
|
return children;
|
|
789
793
|
}
|
|
790
|
-
|
|
794
|
+
function Subtitle(_a) {
|
|
791
795
|
var children = _a.children, className = _a.className;
|
|
792
|
-
return
|
|
793
|
-
}
|
|
796
|
+
return jsxRuntime.jsx("p", __assign({ className: "subtitle ".concat(className || '') }, { children: children }));
|
|
797
|
+
}
|
|
794
798
|
function Button$1(_a) {
|
|
795
799
|
var children = _a.children;
|
|
796
800
|
return children;
|
|
797
801
|
}
|
|
798
|
-
var Loading = function (props) {
|
|
802
|
+
var Loading = function (props) {
|
|
803
|
+
return jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(SvgIcProgressing, { className: "dc__block empty-state__loader" }), jsxRuntime.jsx("p", __assign({ className: "empty-state__loading-text" }, { children: props.text }))] });
|
|
804
|
+
};
|
|
799
805
|
EmptyState.Image = Image;
|
|
800
806
|
EmptyState.Title = Title;
|
|
801
807
|
EmptyState.Subtitle = Subtitle;
|
|
@@ -2229,20 +2235,22 @@ var notFound = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAFACAYAAACSgS
|
|
|
2229
2235
|
|
|
2230
2236
|
var AppNotDeployed = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAGQCAYAAABYs5LGAAAAAXNSR0IArs4c6QAAQABJREFUeAHsvQmcXFWVP37fVlW9d6fT6ewLJAYIAoqCoEDCalhEZwDFFRlBUcZt9DPjjP+f+PvPjPNzZEYUx93fiMs4YRTZVwmyyw4JMSRAyJ5O72stb/t9z3t1q169elVde1V335tUv/fucu653/fuPffc5VzGhBMICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEBAICAQEAgIBgYBAQCAgEJgZCEgzg03BpUBAICAQEAhMh8BrZ5/d0alpbXHTbFVUtkxi8hJbspolW17EbFuj9Gj040yWx23bHrBsa4/ElN1MS0ws0EMj0t13x6fLQ4Q3LgJCoDfuuxGcCQQEAgKBvAiMXHTuKt1Wjo1b9uoQs4+0GVsLiX0ks9kyVZJUPDuOXzkx3vDT1bTtMVtiuyTL/rMtyU/Lkv2KqjU91vX734/w+OI6MxDg73VmcCu4FAgIBAQCcxiBfe87q5sl1OM0SbrQtux3yTZbCgHe06wqmg2pbeAPBDSz8PML8VywyRJ0dASqssxkSIQpwzSQdrdk24+Cyq9NNfLo4ttvn8qVXvg3DgJCoDfOuxCcCAQEAgKBQAT6zjvveEmVL2TMep9ksxMVCGES2PQrRngHEvd5klAg+nRNoGOg2NJtFrP+70Brx13rbr454YsuHhsIASHQG+hlCFYEAgIBgYAXgYPnnXeSotpfxlz4+rAszycNXLcsb5Sq30cUmSUw2Y4597tsmX219457X6x6piKDkhAQAr0k2EQigYBAQCBQPQT2nnfevIgifRY6+OcxFN5Bw+j0q5cjQaFhSB4digHLNL+6Lab/dMNDDxn14kfkG4yAEOjBuAhfgYBAQCBQFwQOnHvuiarKbggr6jsT0MZpSL1RHA3FY57dNm12valb1y28777JRuFN8OHsYBAwCAQEAgIBgUAjIHBw4zlnaJLyC02WlsVqPLReaPm5th63zP8OtVifnHfzA6OFphXxqouAXF3ygrpAQCAgEBAIFILAwPnnnqxIyq+gATesMKdy0HgBjRxEZOX9iUn5+r2XXtpUSPlEnOojIAR69TEWOQgEBAICgbwI7Ny4scdk0g8xb75Eb6Ah9nxMxyHUVUn+q9DE2JfzxRNhtUNACPTaYS1yEggIBAQCgQi0MevvsYr9+KhZ2xXsgcwU4YmV70ySpb/t37jxoiKSiahVQkAsiqsSsIKsQEAgIBAoBAFsTVsnK+xP0K5aZpY4d0uHjgj2q1svTmpN61cJ63KFvPKqxREaetWgFYQFAgIBgcD0CCgKuyokSzNSmFPp3KF36fhmfery6UsrYlQTASHQq4muoC0QEAgIBPIgsPuCC7owan2aa5ctT8QGD7Ick3XSF8ffd+6CBmd1VrMnBPqsfr2icAIBgUAjI9AsG6uwtfsIsgA3kx3tlQ8r8qqJmHTFTC7HTOddCPSZ/gYF/wIBgcCMRcDSzR5YYOtsJOMxpYBJ3REc8qLA8Mz5By66qLkUGiJN+QgIgV4+hoKCQEAgIBAoCQFJkjtxclrBJ6OVlEmNEsVME8ess3dMGsbaGmUpsvEhoPqexeMcR2DXruHOzk72FtM0FVVNHac881ExTdlkbHzXrl3Pvu1tb9NnfoFECWYDAga0Wl4O2nI0kwfeiXeFSeFWZp2D2+d5ucS1dggIgV47rGdETipOgrAs4/stLS1rDaP+Zy9QI8EbuumuHOCg6UhF1XBYtB4/8sgjNyLeZh5XXAUC9UTAlqQJ+sDxX7clFmem1SLJMk5InZmOpg5wONu7wf03Z2YJZjbX1EYKJxDIQKB/cPCqSCj0o2oK9MAGK9Azg7W8D3mTIzASCbNoNHZb9xuvXyIJLT0vliKwNggcvuC806CWb2aKMtZ83tn9iRde6tb37O2UVFXJ+z3Xhr2ic6HDWyDUD4fV8Ds7brvt1aIJiARlISDm0MuCb3YmVsfkmxOJxJ80TWNkCaqSP+rB0y+LJva9ZPkFxcvjBwIYs8zxQ6sZi8Vg1YpdMLRq1Zmz882JUs00BHRTOmxbVp8ciahNq1bO6/jApU2ho9cesE0zLtG3PMMc1W0mSfMTRuKsGcb6rGBXCPRZ8RorW4iuVV0jlmV9GwIWU3yVGcShpimwecoZUNkyobvg/AuFQgrm0r+AsmEMXjiBQH0RkDRtL4T3Lrmrs0lubW2VQ1pz58UX9radd/aAHQkPMQMW3uvLYlG5U3VuUjBtx+x34n4msV5UORs1shDojfpm6swXFsXdDi39OSyMK5kTLqvpmnJez4yAVIyK3HABnroiL1Ie4vEEC2uhMwYGBmieTziBQF0RWHz77VOQe8+q8+YdwuRzhNG6FUkKNb3trUu6P/JBFl67Zg8E/qSEg1BminQ0aLSN2W95dePG+XUFdw5mLgT6HHzphRR54cKFk9DSvwPBXrTYpQRZiQI9C+GkuDhcgPNUfAQ+/YzDJCQpgoVHn927d6849pEDI651RMC6TentGXZ6nMQFfbQQ7Mr87nkd77uot+MvLh5QFi/sI8GOFasNL9h19xS2o1pte2UdQZ2TWQuBPidfe2GFnj9//m+xMO5+WkyWz3FZza+puNyDrlV0XIg7V+TFhThdg1w8HodQl8/CGoH3BYULP4FALRHoPfaExyOrj8RuL9/RLK62Hg4fvXbFvA9/sK3jL987qS5dsgsd7Slo7FiM4gr3RtPcqdphcZyqSDZtXxOuhgg02rdQw6KLrApBYGho6AJZln+POWeVFq15XeaTJyRngCdOCbeUv3dOnwQ4dz7WuHfOayikMT2ReAIdlnNoNCJnRBEgEKgyAvZjd65gurwFn3NbSkv35wmLLVgJz1hCn9L37ZuIbt02nti7b5E1MqpbhkHT1iGMOmHRp09HQ8Vw6m2ygqAj68xsY7sc83Uf/DmW9ayCvmGzB3vvukcsjisLyeISC4FeHF5zLvbOnTvD8+bNuw2Lyc5N6DnssaTlasH4kDDWMD9PSU0s/JnO0do8Favu9YSONG6GxQpxbx7UMQiFQ3p0cvLK3t7eX3rDxL1AoJYI2Pff8ReYP/9v9FZRIfBt81Y5qF5RRaAfNnvbk1MT+qHDYxDqrfrwsGH2D4wZg0NGqlMAWlJThMlNkPdNTc4iUDs6lTCjMdMaGm6xDWMR5YYOe7JGVa7UMANLHYlhGI87bdG9975cOcqCUj4E+KeTL44Im+MI9PUNnqeF5DtRQVNWrRxIghqcArEigdrW1gqlQ2ETk5OkLSNl8OdIAjwcDrOW5mYoKAk2NRVlmNvPGb9AFkigYytb4k9TE2PvXrVq1Uih6UQ8gUAlEFi//jr1oYdeC9sPXPYPTAt/BT1bMojOhsdibNveMfud6xbQpu7cWZE2zhetmkbCjuu6beq8v+ukkyD4mYwBcPwcD8u0sE3OthO6mjjcPxl7+pmJxJ59C7BFrpm09kq6MOzjoOvw496TT71Guu66ag4IVJLtGU2r9CXMDVTsvr6+XsyHfhQfZDM+X/HhQDLqJhvu6e78PgRn2ebeBgYObe5dvPh3zZGmS6PRaEXevIYhb76CvrWlhemhUFpQe9oVUlhgOAtGYSLOcHs4FGaqorIo9pTHYvGiefE2j7TiHUPvJyttHR8Coe8VTUwkEAiUgUB//+FIZJH02V19U6evWoXzTGyTReMG++nj+9n5x8wnFTc/dZpzdzrCiIaV8ZKmhiTUqyznpSOrTj2S0EGOtLU2RdYc2R3/84594/fdb7OpaEslhbpu2RIMT36o/6mnfgWeHs7iS3hUHAFP01lx2jUj2N/f34Zho3s6OjpOjWHB01x39FLjiYRt6PqFCxYsuKsSeAwPD5+BVoNoNWNRTtkkNU1lzdC4SUPnjrRu6jDEIGgdZR3tGc3/NTc3Odo5j0dXlI+Nj094vfLe52oaVZiE1Q1968ToyLtgFnY0LxERKBCoLALSORu+vPHY5e2/Oml1TyeNUr8+FJPWH9PDTlk9D6pJrq+2gkyQVo4zG0ZvvsWMbX9FhYW6ChJnDCfJwaat9chrQ8ecd+oT/14ZbaCiHM4uYrNCoNMrwb7i90E4/A9uoaQLhzlvaLyxe0ZGht67Zs2asns5mzdvVo87/vhbQ1rofOxPrwjANHfXBGEdBq/c0XhhdIq07xjMWltoaxTW0d4OLT39WknIj42PM12ffvBhuiaRhv4h1E1Tj38Cq/r/k/MhrgKBWiBg33PLSZO69MBz+yfaoNHab1/aytraI/mH2ivNGNamTD76BJt4+FFHe684eUkyUba/7b373usrTVvQy0Rg1gh0mt8dHB7+XVM4/B7aljTXHQlArHbRLdO8pKur67ZK4DE4OHgKiP4RanPAuF7hOWRM8iEZdT5oftwrtElbp7n1Jgy1U7jX5dPOpxPgXjp8JRDRx4K/rRbMVWLF++GMOOJBIFBFBMwHbv+s3Nx8Aw4OcnMhsw/eIfIq5p0ijXn2+M7X2eitt2OFavmjbym6yRuseLfR9Z4wLGnjkrvvfswfLp4rh0Ba7akczbpQgqYFEyj2jagLUa9gqAszDZApDYuriqKh0/8ZWqleCZZw9Ogz6CBsamoqzR4LCXKvMKd2i340lz02Rhp3ehU9DcWTZu4X5lSuqSkY1/I5EuT0K8j5ItOIA1bcH4s8P1xQehFJIFABBOxnntFkSX4/5nxgSAaClH61Fua8HJ6pL+5ViStpjLptxzGb0KdK9rcGLrxwSSXoChrBCMwagU7FWzBv3kOTkxN3+oVAcNFnvy+NVEBIndPRMe+DlSgtnSOOEervgO4QCdxCHBfizhWClAtxf7tlQCMfw5z4xMQE7GXk1hKmMMduJrUILpcLEuR5IlMQlv4yW1E/jc7C0kLKJeIIBMpFwBzqPwer2k/OMihTLuFS0ju7RkpJmD8N1a2wJIVRvQ5BUU8Ylv7DQ8ed25I/lQgtFYFZJdChpUPgSN/Bwqqxua6lc/kFHCRZlT65e/furlI/Em86zDM/ZRj6nTJth8njuCDnUfwCnPt7rzQ3TgviaH486OhWEvQJZx966dp4Rn54IJzIUSdBk9UjJycnLwcfs2Yqyi2d+NtoCNibNimKbH8QxhWUumnlHBRZYcbgIEYIprcHwZMUc8X4A+2eO8GwpVsxEbhMWqZ8fe8pl5Y2zFdMxnMwbv5WeQYCglXdj0CI3UxbomjB01xxXIDzKy83CUacbX5iW1vn+dyv3Cvmt//VSOiD3k4TF+CpKxjJpY1Pl38uDZ3yo7l2TCVgEXyOd8sB4FdPZtyLXz1B4JWOdTUdLf3w4cOrvGHiXiBQcQSW9ByNHuTZNVnJno95qkboKOsHDmHXXHUEOh2pCrWiFUL9Agj1rzHLvDzUOfZ3L69bl7k4Jh+fIqwgBGadQKdSy6b5Q8zHjngFTkFozMBIQcLJKUYywKaTj2yG7aDsM3/et6+7EkWEZbWXQfUXmhZydFkS4txxIc6fS7lGwpHUHnV/+jCMwbTDIE0I296cDhvPOicQLgUezU/P+2xAQ4GWvhKGOD4ptHQvMuK+kgjgW5QsXb+UaaFex5hMJYkXSwsNgzmIU1oP9ZHBh2JTFxzfQKdBY9KZyO1tlqR+wZLsK7pWrbjGFkK9YAwLiVi9N1hI7lWK097d/Tw+oE2zUUvncotfUxByD35NBZDtiQSEHztlcVvb5fDOodp6EkxzC0FqwXLbzxJ6/BD1FLgQp2s5jpLT3Lz/MBjSnt2tcm4GFIeszLXArCXGLZEqu0gcBn4tlC/TwilXsvzBsbGxIwtNI+IJBIpC4MknF8iW8VcwplBUsupExgr3/QeYOTycbQe+ghlSPSRNHe3F52kgAMfKfFa2zL85sGLZ5+xLLxWaeoWwnpUCHQLHUAzpe1i81V/LYXfKq5T8Ck3nijPfmy9YYklkLvVqCMeKnFHc2tq6BXtR/gvWogPZ8nGZ95EXgXBowslu/pEVWtw3OjaBX3pu3YmL1faOtq6mP2NOK2+GeQLpECtVCy+N68bHgFVlrWzkyVcEzR0E9OH+9+MjX8KwUqyujvrBepzFnn+xpHarWN6xC4m63i1h1fx33VD7Ub++qNn2x/eNjX1+7ymniDn1YgENiJ9uCQMCZ7LXvN55L6HR/zW0dFgzzNbgqlE2mJ91hFGx+VF8WplPV29aLpz4NcUz96BrgY72dYfDkXV9AwMfRkWqCCC6Gb8Rxl0OFLrinbPqZZ8XATw5w+hk4tXraD6dzLySi8Ms5hgEOxmd4Y5GYdrb2lhLS1NFNAziwzDIUp18NUwKH8XzEVeBQKUQUDTWAlW1AQ42l1li3wFm9MH0QoG7VsrFwCAtXZIXN6nGLydNbRf6NJeHVPbeUHfHv+4975R5aA8q0jaVy+dMTT9rBTq9EAixH0C76ytW4JTyMikPMmUKzTXn/G8uuiTEKG0LbJo7Ah2CnQu6jDRcEmZ4FvZAghEL5GRVVq7asWPH4sJS5Y8FIyy7FFX+Kay5oes9fT3Mxz6lptPX/C4ajYFvV5OhLGgubnxiCtvbJlPb1+jIyGZo663NmZ0BP61Cn+n0Nyy8W6CGQtdAwBe2P69Q4iLenEdAVtT/YjFjKwtHaC7MUVud+jN9Faocdjgfwcb0UvTFLTYqUuXoFkApgTockuVV7Zr5m0mNhTU59AEsoV0SUjpuOLxx4xEYghd1rgAcg6LMaoF+44037sDw7X9B2FZVSychTKeB0dVZiQ3BTEKa7r0ad9ALIA2T75snDZ86BCTYnLrNJSC/BhEo0I/4IFOpMLN6dHd3z8cgqCrSfBiJxM/jcf11LUcPn7NO17wO/E1BeGPbmLPinOLS3nRum5/TIX+6n0Tc0bGx5Nw6+ZJ9dxytOm1Gbtygv6SdU3LqPlDeUBY+AJPCpwXFFX4CgVIRkDZsfANf8aU4YvDHWGG+m9nyATwPYzGmK9xLJVxMOmxV07EQLvHGXmoH9Io0BkXkT0Id3ffVbZb0PzozjjqUsD+MRnrAlqyb9k+Nnf7MiSeWZY2yCFZmVdRav8eag4eDW9ZCsD4AwbmUhp2r4Uhwt8OqmV9405YxOmyE8iVhkeUgxGgbFhfoPJziOoeUlHCaGKfhv7qiCnbLIXhNy9wdj8XOWLx48W5/vFKe+/sHv6Zq6tewShzfk1vOgNLmJu2JTGUPYQyOcKHT1Kbw8+PqJURhzc1hpkgyG4PmXoyjbKkCpN4NaDmO3hXuqVOGjsOmkf5DH1m3bl0jrGBy+RN/Zw0C9suPz2OHDzYzO7SWSaGfM4UtRoORY4iugsXG9z3+8GMssX3HqDkx0YY866Lc0eEtMOp0IG7Zn1p8ePCewwt7rkKv5hoMH3xj3JZ/u+buu4Ud7yJee11eYhH8lR21p6fnFRD5STW1dBIIZOHM32Eg7Zs0bjKVSkKfhAQJEfrRis8QNHK/MKcCk5Di1tDouXIOo2sWzaWHlyPfD4LvpAQrL4eYZP9ET5g0/J4qX16KHAR+9UZG2RM4+5UWwcWc1fn5WSQcJydjbHyycGFO74sLcWIh0CGOYxJWks7v7u59S2Ac4SkQKBMBad2pQ9KGv9wnnXnRH7A/+yrMKR3CfHZ1NXUMt1vjmLJ6Y7ctd3buz2q4yixTMcl1aOpYObQ4Ikm/6FvY/dEFzXt/oljGtWgtP4NexpfEYrli0JwjJ5Nhfvr/onF+gwRsNRwJB9LGx2HhjFZkex0JZxqOJ6GO7VCpIBmachgaYJAjWvSrhiNesUdfQv5XYfSiIluzls2fvx9t0PdkWbHyadPTSXuvcCVBjf/TOi7uC4nr0ARFhyzei5MBJaT7gGfqoGHRQSvGV77wDOxuT8uMiCAQKAMB6azz72a28Rn09g9iIU4VF81hMdzuPcxWtSisyTRj2L+uc9a0UA71rwPmor5zaGL5Fyai+p/G5dYrZEV6Z2he27dff897esuAdU4lTUuYWVxsCNM9EDT/iSLajqZcpbKSsKSDQ2ge2G/tjDRx0tbpqFASQrDe5gx/+1mhb5tocA3SH17oMw2xZ/wDXaJNPzKgIsvqKklSPnXddddV5BtAef8rnohvVzHqkHLIKyXE6d7npgn2xS7+kTCkPLggd4Q//HJ1OlL8UDoCCo5GSkKasnH16tUbHA/xRyBQRQSksy66BYtBPoJKuo0pmgETaxB2FcyQaElWNPHqqzGlu6sZ5xcsQWNVyRxKYpaEOjT15rBs//9tzaGvhQYP7MMswMckWw41GYnvbj/nPRVZyFsSczMoUUUa85lQXmjPP4H2/GquxrxSZSAxQMd7wjBJxoItok+dCVrJ3pxcNBeUJw3zksAt1XEhztOTXErKJu7lXC2scIVS+qEvfvGLazICSnzA1MZBVVJ+BPORWFOG9sGVh4HUKChPcGCaQj0d2iiwI5BJ64Zz/hIIOTRxR/B7QPJ+I9Qx00LhdmyV+yxOmwseUimUORFPIFAAAtJ573mQhZveh6G0W1BRomg4XG29HLHrjEBBdMeNWPzAYVkfHArLvQvQ27WoB14O5QJKVFgU2qeOlg8G5eS/0+Z1fHtiaCjeMxX7a0zkRTs1/Yevn3WW0NSngXLOCPTly5fTfunvQ6jmHxaeBjB/MBdO/MrDyUDJJOZ1vau2eZijpSeFDfejKwmPaLTwuWBKwwV46gpGSDbxH8UJco7mGQovxDz1xyDQKvIdTCjSTbppvoxtbBlZcmz4NSOwAg+cLglmp+A5BHcKFIQ7aRCf0lBrRkl5u+bQ8fBF0yhKKHJmc3v7GR5vcSsQqBoC0qkbXmVy30dN07gKUm4L5n5iTFFNt1OKbOmjLVQM08dtmAl9bNyOjY6GjbHRMBbTSDLsN9hoqJxPv2olKY4wH01DL+Pq9u7O724xWmCNOXwtzfo3R0LXD27c2F4cxbkVuyIN+UyBDHPov8Lc9DbaHlauo0oQWBE8ASQY+FnfhcyJU9xCF8NxAc7LQbWy2JppmDrW36hX9vUNH8PplHNd0dk5bBr6d3EQg0F7wz1QlEM2Z1qiz5sjRwgXI8g9VImO27+iu2xHHS1o7U2SxT6LfISZymyIhE8VEJA2fDymnn3Rr8alMA5xsf6OmfrjyGYU2juEu2agK+r2Rr15c0Hv9lJNK6HbifEJPTo8ounRKKapYbc5rjPYkscAdzNSShP4E/zhe+nW8J7qNGnrWAH/0d5284axqSmZqcYXJNtcbsrW39tiS1vOtzGnBHpbW9thGCn5ORpoq5S5dPrq+S+FKPfg11RA+oYWV9EqeK+Fs3Soe0dCI5HIXFDnjcMFeOqK/LgQL1aQc7rUeZAlpRcL2j4HQVWRb2FRb+8mQzeec+fSva1L+ffUejllxhUDIHBkWQ9s4x53zjPdeX88Pk/Lw2AxICMe98911WHcBmL9rMOHBy9EQuEEAjVDoH3DhgFpw7tvYFHpQkjxv7T06HV2InarZFkvO3vYJTYMZhIQ+qZtWlEzCsPF41N2fGSMxUdGJTMW1xCGquLaxXDrCk5Aw7MS0mAmjka6G8tR9TZgRk6TpY+0heT/PabvHgnJob+2mH3Zofnz3+dU+cZiuSG4odZvTrnh4eFOCPWHsNf5eP82s1xAOLLDHxjo6Y+UfiYN0l0Yl7QGlw5y7iicrKJhYZkjoOiZHAlwr0t6e71KvifKdLgJaA7ZpnEO5sGfK5mYJyGOH/0rTQv/AJWvIp2EFAJglO5pjtu5cjBc9drt4SA8Fd/DE3UAaH1RqY6yon3pU1MTj/TOn38BeJgslZZIJxAoFwF782Y6krAJH6TGuiLheF/fV5SEcY1uYCzdqSDpLam8PpA3pDizhofY1B8eYq3rT2f6wb7t0Sf/dCQagvKHLcstVEB6qrIyBhWwrOgf/hyLfeuYlsjV8LvasOWLF9911+6AJHPai/Cac25gePhjYVX9GYbBZS44vSDwCuD1c+5zBmTFzPKg3nBrK0w4T7N1DlvKHKMyenLbGpdZWQRL9AgqAm2rw9z9jfv27Pni2972Nr1E0qlkL774YsvixUt/hryOwAo5125rKrScG849/2yDn7mvNydKEeTvjTPdvdMgQlG3JOvaxT09z04XX4QLBGqFQOJ3vzne0s1HYZimlY5MzumoMzwVZVMP/IFFjjmaKQsX7h/77S29+Kqrs6c3JyOFByjgGZrBaFy3Lp9QlAfbJesOeOxacMe9n0K9rmD7UjhPjRqTt4yNyl9V+MLpPt0tpnkf5tLf6h7L6WaTsxrkDCiUPbI6FnLstReSgobfSVsns6dBHY5CaPjj5CuCDC0dwmoEE/gbu7u7n/SnLeX50KFDLXEq9OhoKckbNg0WVspLliyZBF7pE2IallvB2FxB4NBN97Z0RAY2hcOh8+NQCsjxxp3X/dQzhqqi9z7AJCyKa3rH2/Xx32w6DJOMSxpZMsL2O4MRmq3NLH7OJAu9WWbyD0xNfu/CW+/aMlfecSHlbNheWSHMlxpnaXv7IE7S+jGMq9wAzTlkQoBmOF4DMjxLf1AU14xoEAXa4kYVzWsxjrT5lpZmpmmqo61jFK1owV5wERDRwvww8urUbfnLmzdvfv+GDRvKtmqDg1toSFoMSwe9dOEnEKgwAgs/et7k5KZf3Iqe+fkSzS0lGwCsYs86hRD2J5iyeCHTX32d2bohhVYekYhv3eoMx1eYrYqRSx7ocuykFfnGgpa2T/RNjm2RdeNyFHNrurQVy27GEqrIHOdMLD00rF8mDOMpfO1p9qkSJCtC2rP8u1Ao+4xvoupo4jAiMzY+4Zwexlds8xxJyGMhH4Q9tmbyeWIemONacBF8EWmBnKZIZx331reenYO08BYICAQaGgH5WdiwGILFRlpo4vxoIRy/T13RyKkrVzEJxxAf3NNvPS7NWzIGU+6elrAhS+kcvYpDbQZiE+8Kmex6LBZ47+T554u96Z631ejv0MNqZW8XLFgwoUrS9bZlGs6qzyoIcuodYIgWw+3hQOancHCLe6oXc4bXxzA87Z0CoESkrbfBwlxLM0zHgpZfsHO5zK+BGXFPHimgrDRKISlqB3rsX6Dhcp5EXAUCAoGZgQDG9LbYsrSLFrrSClBHU6fpNH5PQ4H4UaNvN7dYsa4e44/3PG18+vZD6rM61vdgF1wjO1J4YD67BcarvpRobn4F7I5NScb5jcxzrXmbswKdgIaG/CC+kXvcfen0tVfeNTdFsoQw5UKHpLjCO50vbY0axznfQaZfaYU1CXZ+ZjiXzQVxnCeyN4j4gbmJM9HzfWdBdEUkgYBAoGEQkC67LIE1N4/TKCNsQYAvUlWSUpzuoLlrqsaG45Z5/b27xr/2kiWdrI03Lwnp8j3jbWzKgvBvmNIEMxInxYNJG/Xo+DHMlh6xLeni4Jhz03dOC3QsABtLWOa/Y7gZiyfL/5RTe8RRo9x/JLh98/PJ72wKVuTImpzX0SgZLYKjc8HprG9a8e51ZIEtDG0/M5U3RvKeS2l+9UThXvzqCXLyVmHkXZbUv9m5c2fwsII3gbgXCAgEGgoBtanpD840IhoTGs1z9p5jlI+u2P7Fntkzal/1kxesH27e2/rgSFjZkYiwD7SPsIeibezhqcbX0glsBcYzNFm5BksBNuNx6cgF7+pqqJdQR2bmtEAn3Hu7ux9OGPoTjoGSEl9EWny7BGirGf9NYo6cjMrQfDl3ZDUuoedfd6YjfJwboyFicCTs6Zz0nC5ISicj5wnKIEcdEAztn97R0SF6vhnIiAeBQOMjoBj6FlthE057RhoC11Mw7P6HrYfHvvSLrfHndo1pzZCIBraq/26snZ3aPMUWKwn2m5EOR0tvdKFAzaFsS6eopulsoYmbrUc1/pupDYeN/u6qjgJ6sQZU0u9A4EZpvrpYR8KcOy7E+TNdyS8Gk67pw1pg4x37QL0C3hs/dY/KaEKDp3O+x+n0NlibI9OwJOiz3DTSOs1hVsosD+ILi/AisCH3CXQgxFx6FkLCQyDQwAgsXzAMbfwVVcN6GwhxatNstCU3P7kves1NW6V9Q/FIWHPNMmuYhH4MWvnr8RC7qH2MvRxvYg9NtjClwefSyawdirDYkpVedFj2mrK9qoHfSE1ZK16C1ZS92mQ22DV4P7Tm3xUyl861cbrSIg0uxOmaz9HWM5ofHxubcIbS/YvbKC2Xy35S1CEYxVnrtIjOWamaL7KPjp8WJZ3O0WEkOGFsQ1/foFjxPh1YIlwg0EAI3Lz9O2NQvJ/Bmb8Q5o5SYN14/y79K5te0SDZ2/w6i47IN411sjMik2xhSGf/OdLF+nS1oVe800gl9qUrOjNPQF9lLxrFFQ30CurKihDogH+NtCZu28qPMGedcy6dC3L+tqYT4Dye90ofYsI3L07hXJB74/rvYa7WPbglT+Q8QX5yeZ+JTxzDpGINzedt+3Br3sgiUCAgEGgYBC677GY61+QAzaMnTGZ/7/5dxnfueV3Bjh4MRGazSSvbt0Sb2C4jxD7UMcy2QUvfNN7R8CveaXWRYilrMPQ+IUumOCs9+WqFQE8CsWfPa09gOPteZw8n/LgAT11Jxnl+yWQlXbjg5de8RPJE4kH8mpdOkYFk5x7b2E7rH1LeX2RSEV0gIBCoIwIYct+D41nY9+9/Tb/hntdVmE6l9XCBjrxp3fh/Y/787ZEYWxOOsTsn2tkbiVBDC3Va6wNzW0diX86kZKvz7PXr56SRNP9LFQI9iQjZMIel0m/jwKIxZ/9m0p8LcT9wpTwXJXiniUzB1XJEm+bSYXdeQfmvHBoa6qhWXoKuQEAgUFkExsaH+n9w9/bx79y3C7aicgtznqsK9eUlaOavQoi/F3Pp+3B9YAoDc9VsZHjmJV6pI4JeSkS2lQmMJraynp6GPFymxOKVnEwIdA90sMr2OOwg/0bTQilt3BNc9C2XyfyalwCPxK++yNybX33BZT/SMDv/OYVHlz6BuXtVDZ0MG8pixXvZCAsCAoFaILBeveTftq76j/v2RJwTGnJo5n5OLMyl/xpa+kmRKFsSSrA7x9rYoKmmFsn749frmYqD6QM7rGCRPrMTskSc479wDgJCoHs+BCxUs0xd/1EsGh0mq2yluqKE7jSRpwkulcXUvL1Dn4YhIMD9C/Wc6QbbVKCsf27fvn3dJWcmEgoEBAK1QEBe8eajz9k9FLsOa260YqQcrWwnLf2grrCNLRPs1XiEPVTnfenEPy8DRhqssCzHNVmexCKBHVHTvA1t9A2WLG3FqveHETVRC4AbPQ8h0H1vaNGiRc9h+vj3xWxh40KXX30kMx95JH7NDM0UtL6wSjw6C96IEAlxryMN3fucvIdtaKaoyltgV/5D8OL1KyCm8BIICATqicCaYz+/VjPU70Jh7YYSWxQrVLFNKLq0je3tzZMYzrYdLT0Ov1pWesqLfhpUb9LCoWTE0DAdMpj9NG7+PWpZl9gh+YItk7H3z7/9rl/03nHPg/sPr7xBuvlm2s02510t39WMAXt4ePgEWHG7Hyrr/On2ixdVbfJEzhNUEdyc4XRQohdOeTkvnq+U4cKdnj33XPiHcUgMFgy+1GzEz25btKi/IgwJIgIBgUDFEFi79so2Qw39SLbDH7CsAFsVBeRE7UKHarLvLDzIrju8gPUZKrtx4X52fFOMJao0qs0FEOUNLdzED2ew2AZs2O7CHPlW9CueVkPyg/drLVsuE0J72rcoVgYGQNTZecNLg4Of/RkOVflyNBbDFE1a3KbvAhL6vfJEzhPkp1LSMxfG3sR8SF3ylMcbnpHGE4eOeNVCoTdHJesDiHMj6FSbfS9b4l4gIBDIj4CsK6Evypb2AcsuTZgTeRKu44bCDusyOyYUZy9gO9uWRJMj0PNnX1woF+IYPrewL96MGXRAFhuCHa3XbMt+wJKUJzsibEfT7+7aXRxlEZtjK5DwITA4OHgMLLU9iMMMeg0cpFKQyyPm8gQVRLqQSFwgU16O8OZCOUgTRxwe30+bTMz796xi2B3nphs44chaj5PqDvnTiGeBgECgPgisOfbTR1uG9EcsaO+x7bSJ6VK4oe7AtfMGWQR99v8z0MPe2TTJ/nXRQee5lDaMCxieFgvaDAhyYwqnXCq2tN1m0ham2I/FpdAfl46NvSE99FDpPZJSCjzL0ggNPccLxcEt2/r7B38Jk0mfxIbH/I5/rTliTROcI1Vp3ilBzoU5kfHeO4/5OfILcyJh0ly6oi6VLOMKPP4L+QknEBAI1BeBpUu/0GRbiS/BbgyEefmykNaM7zND7MTQFAtDqG/VI2zUVFiTilnsIopKgpzaIghwU5LBoWkZ6GsMW7BiF7etRy1TegLbYnf13HHH/iLIiqjTICAEeh6AbNv8lm1Kz017EBvvhuahVZsgzgi/VjZXnEin6Bbbf91118n4TdfNqWzmgppAQCDgR0AKd0xczOzQRyohzIm4I4ghukl40/2UKbPt8TBbrOkwdV1Yu0Ir0qGFJ2KWNYEtr3+2bfnPmCF/NhQO39c5MrJPaOGEdHWcEOh5cE0OLf86TxQRJBAQCAgE6oLAqmM/t4AZ+ldg5hVGVSrTv6ZtT52gRZOMXCPvw7x6kCh3hD+0eLqSsI/iN4a96wd1ed8x4cQNGtOfCCmR7Z133jlcF4DmYKZCoM/Bly6KLBAQCMx4BDCSbVwryepxdqFrfAooMq13PRLmX3cZYUYHt5CAH7MyDcw4ghz+NMDfB6ty+7Eafg8OdCGb8M/HIqzfUDvGJHv34e0/eBJReL8At8JVGwEh0KuN8Eygb9uoxs6cl6h8M+F9CR7nPAJrj7t2panbHw+2HlEaPKTjd2kmOwE23e8ZaHd0ftqPTgKcrqSFx2yZ9UN4b0uE2ROxZvZqVGH79RAbwTp1FRHpsBdsN+uA4dh/6X3ztS9v2XLj9tK4EalKQUAI9FJQm0VpsNJdO3z48LyDphnevXv3+Ouvvz6+YcOG8lfXzCKMRFEEAg2GgGRa5lVM0pawCmrnZFjmjKYJNoBFcC9j3pyEA2no2LfLnoTBGdK+n5+KsO3YyjaF1W1Rk/r/Ni18Y01yesgfa4+QRlkd1c1/nL/2yo8PvPKz8QbDb9ayQ50v4eYoAgcPHuwJh8NnwyreMh0CXZXlCUDxfGdn58NYoZquoXMUH1FsgUAjIrDqLZ9ZocSlh7FqfHmlRrQNCPMFmsGuX3iA3Tnezn492slwooVT/AVY4T5iKWwcC+QcIQ8tnJw71J97UE+SFUuS9b99bduP/w3RRXvioFbdP8L0a3XxbVjqBw4caFZCoYugob/VMIxurExtRY1rB8MjQpg37GsTjAkEmKRLVzBbrpgwJ0hJLC/T4mx3QmN34GAWLSnMKeygrrEYNHLaxkY23/kcOoXldVjezizlr1ev/uuj8sYTgRVDQGjoFYOyfEIQrjXrYPUNjZ0UksyLoZ3Duq0l4TdpGPKtvb1d28ovSUNTsNFhya1WNDTrgrm5jsCSoz7a3SS1PoDZ6hNoaLtSjioEHaMqoQXSIbwLEQw4ahqp8lclScIhV5Lx27Xbwx+6m303Xil+BZ1gBMQcejAuNfeFMG+CdbpjccVhQj5LMJXnxg6p6mkQ5iuhnSdwxWi7/MdwWFJGRkaO03W9kPpcea6qTBGCnDouI4B3lxDqVQZbkK8KAhGt5TRmysdXcmU7MUoV3qC/GKarZOV3LNfZ0nt3rJv8KHuZ/QTZ5O8BEDPClYxAJd9dyUyIhIz19/cv0jTtdzgS8AgI2Wm73hDADMIpCzry5y4oPBlmw0pTM34tEGwm8pMgxOnQldLPjOWZNvAVZSVw9qK8750/f76wUNXA70qwFoiAvPbNf/0702AXl2viNZB6kZ7EQyF8kJYuycarOLbxzNe2/sfeIrMR0YtAQGjoRYBVzagQMH19/f23dXV0/CM0SDlISYdAcligMLqnM9v98cjPxPmv5LzC3ZvWCcQfigtBruHHZEVZyk3EBsXlaUq5Ej0/n6XQqUQadGJ6wcvH8fsn8CW0hUqAKmjUBIEjjv/MajNunoqNYTXJb7pM3Ho9XSyo5DQ1YCmrbZb4JGOXfo0xcdTp9KiVFkMI9NJwq3gqVA7r0KFDP52cnPwIBO3RXCjny8gvKOmZtHIuPOmZHD1778mP6NOPx7U89xTudf603rCZdk9lwe9jWOH/C/C+e6bxL/iduwhIceM9Ngt1N8qCcZoYzNTQMwd8ebtBb8xpgyzl06uParvz1e3sibn7Fqtb8sbo6lW3jDOG+sKFCw9DyP4UFcHyVoZcBeDCmIfTc5AfhfvDiD4X/v40nB7ngaflzzzce80X5o1H9/64/md//Eo+Y7idYavekZjeuALlymyBKpmRoCUQqCgC62G3RTkdo24N3GbTgFf6x4fk+RVjgl0Gk7+8cuUVkYpCI4ilEBANWgqKxriZmJjoTSTi92ha6AQSPrmEbSHckqAsND2Py4UrpeN+heZF8QrJz0vXm18h+VQiDrWJ6DgdnJqaOmPZsmU7K0FT0BAIVBOBI9d9ejUmiB6zLWVBo2joJLxNTOi7QryQ0mN0TFZiWE7//p/deNldhaSYaXHWr19PLJto16hnU3MnhtxrDnn+DFtbW/sOHx78jhaSfoSPwnk/hQjJIKo8nVeABsUjPx6XX71+udJ4/b3pvP7+ez8vlI78auloZAJa+iKMFVyN/P8W+WevLqwlQyIvgcA0CCiW9WZLCkGYT7tedhpK9QzGCKJlR8Ky9KXu7sXyggUdNi33wVKe4pyaLbayfaYhmczUydrDQLGs+HPBLiHJGB39E/wP+sNq8Vw0DrVgaq7noWnzbknoI5/G1rK30YI1cl5ByAVgkBD1xuM45opH4UFhPF051yA+cuVHPOQrUzl85EpL6wfQj/jwwYODP0McHO8onECgcRHQZflMZVZ0Ow1m6tppL724+7Rzzj0OgFuY+nM79LwN4G+Bnv1+FCahvfC67DjZ6SQ5U2lIPZEy4dkthLnOFGkn/9TT9Dc08gdlIap2dJyK2EKgTw/Z7I+xa9cuzC+NMMOwf6wp9lvwUSkk8LyC13tPiNCHx/34NR9S3vj+9PnSVTOsEL4rmT8J9EgkstCyYjhL2v4qMJkVzWUlMRK0GgYBMv90SuFD2w3DdwAjEpuKxdjvb3+GnfyO1aiDsEmXKZ+dNNRGkeNX54GeSTD7BilwGAwPdq7u7lTXy2nrMDXgpZPrnlJ4w/x0XYq5/2LUD+228cjw8PDruWNVN6SBF1hUt+CNSn3VqlWxrq6ukZAqbYJ2/jQWb+VklT4++vmFofej9N57CeXy98Yp597PUzm0qpU2kUhguE/6GHYXHF2tPARdgUC5CCw+4nPYUqosb7w6la0JF1JWDUPcL2zZw17adiBw6y3RoPapkDYqU5Q7KTNYqBVmxCtp6DCnfe+aNWvGMpio4YMQ6DUEu5isSKjjI/kuhnCMXAtb6WMN+mC9ft57nr+Tjj/g6o2TqyLl8veQmXG3NJceCoUWq6HwZ4GBqAsz7g3ODYZbm6ZoCJfOWWhAly1Sp2OStOzJaIzddefTsIMB+3QQhl5Hz942iYf545G/38//7I8TFB5EP188Ht97pfjRaHQiEY3S/HndnGjE6gb99BmPj4/fDS39GTIAU6gr+EMMGudCJo6wzxEWxAPPj1+D4jSyH+0kUGXpfRgmO6aR+RS8zVkEJNPU3onV4eFGHXKHWuH553KZ3rwW/N6wPog98dRrbM/egQwDWBSb2qBC2hN/HP+zk3NmXyGYmQDfYpOR0gW+98Bw1ZYAcjXzEgK9ZlAXn9GKFSuGMdf7bfxoG0ROAt6woJ5tzoRFBEwn6IvN18tzEWxUPGpyLr0HhK9BGUR9qDjCgmA5CPT2fqQH+7hPZ41sMoEUgNQPS1FgEjb9I2GPR8+P8KD6Pz46xe6/70WmqulqR/4524bcTSCRDHQ5aSG2NyzjPpDS9J6g8Yfu7u66DbcTh2kkp+dXxKgDAtAgb4fQeZDm0vlHR1d+TyzlE6beeJVi35t/qXl703npVYrHYujEsEgHPHwIh+O8rZh0Iq5AoNoIRFr0C3GqGZaDz9Q1myTs/QLe1egNdAKeeOp1NtA/DtPTriji7QK/pvANEObZXtk+qfS48baF3ntvHLrPF+aP64lvYTT1jqDwWvoJgV5LtEvIa/HixVP4wEhLjxf7ofmzo/Tl0iCaNLzEF+uVS48qLoapmOrpsPj5rvYz8YDydKBcX9i0aVPh8xvVZkzQn9MILF/+wS7Dkj+PwxDRaZ+pAt3/CtPavAYhvmPnQbbtlb1MTQp03kb52xX/s59q4HN++R6YpBRPag+heG1vbm5+vpT0lUwjBHol0awSrdHR0QdxANtD9OGQIwHk7cHm+tjJ3xvPn64UdolmU1MTa2lpYfiAMzoIfj68eefKi9YHYPsYawU92vZBNPx0cqWtpD/NpSPfje9+97tPqiRdQUsgUCICsq3YnzZt61jvNqwSaVUtWTl1FVWdxVHvHn/iNZYIWByXj2n/lrIMjEiQ4+flzXufTTct+fPHy05JPtRuYYHt/TAKNhQco3a+QqDXDuuSc1qFrWyJhPldaOlGMR9cLoFKNIqhw+MSPa5NU2HoQ8ZH7GjrFCdXfrkKTmlI0yea5KijQPSKWQSYi3ax/rTiHR2LjoRhXLNz504sQBJOIFA/BFYdd80a3TKvVqQQiab6MVLlnDVFYo89+QqbGI85OfG2xput32+659SEvZeI5z4zPbWF6UDPbdozzx0pWfF43ESj9UfQ9e2Qz5OwSkFCoFcJ2EqTjcUm/pAwzDuxzaooYRzEBwneYoUv0SFBS0LX+9GTXwuEMAl3+rgzK0tQ7mk/ikv0vI6EOwl10tqLpeelU8o9zaWrivKXXe1dp5WSXqQRCFQCgXXs0lB8dPBL6MAvx/dYCZINS4M064GBMbZ162507gPKSo2Nt8EpsCR+y3C5kpUjzIkmtVEY3dsft6xncuVRS38h0GuJdhl5kZYeUpVv4+MZL0ZolpFlVlIStkHaM9U3EsyOsEcNyccfD+PCnD97M+NhnJ43rJr31MlRZLlZ0uS/2bx5szCLXE2wBe1cCEjRo9ovMUzzClpMpqg0WERrxGenI4GaiCXYU0/vdIRjIaXMlu8+H/+jR2oHtTc8z3xhPI7/Smnwe2FJd/def1g9noVArwfqJebZ2XnDw7BudrdfqJaibRfDAqdPduVJi+XPfho0etDW1pZXW+dpqQx8YZ2fDn+mODw+96v2lebSw6HQ6ccee+x51c5L0BcI+BFYesSHjp2YGPs6xtCgnEOYQ4NtaOcTnqXwakEFf3HrATY4OI7pt0wt3S9k/dn5w0vJv5w0mKqzoaXfVg6NSqZt8K+lkkWd+bQk6ToLH8+3dWjpNNQznUv2HqeLVnA4zTPDGhLDsaN0/GhgOuKLNGtaMEcCOajCkR9fABdIBJ4kyKnzYOFaS0f5ogzNiqJ+Anb1O2uZt8hrbiPQecIVnbqR+Aa2qK22UddUCHTofw0NCueP6o33VwzTCla4HzgwwPbtH3BttScT52o7Mmmn8XHi49Gbznufma7weP50/JnaOrSDwzAA9kfuV+/r9FKh3hyK/DMQeOmll542DeM30IbtfB8rJeIVbLp4GRnkeeB0yAY6PmIWx5XyCHKkfdNK+KA5f9qiNp12Th0GGhFIV9egXKrjh0Uu6IzIF87v6jq3OjkIqgKBTASWLr20qWV06osQ5BfQFjWqa6qiZginzBSN8sRrKLUD6R+Vwfvzhrn3af4VmIIdHJpku3YN+IPSkQLueHvEg3K1RTy80ldqw6DkPIRRvX2Vpl0qPSHQS0WuTuk2bNhgIOsf4iPq82rp/o/by141PnSiGYWmTto6ae5BjvgjTZ00dronHunalNyeFpSG/KhZoJGAavCdK0+vP+ULPtWEaX5uZPfuLm+YuBcIVByB1RvDtqpepuvWF9xvntZyaExW6SSy4A5zxXmoMkEqR74f9dxf3LLL6cQ7rFA/gfcVkrzla+M4+/nieMMy7rOz4uRyXik9fjRiev8qrG/KGbHGAUKg1xjwSmTX09PzrJ5I3IMh7VRtr0fFpzwdbX1iwqmIuXig4XXS1mlRHWnsSnKbWi4s4hhqp7nsejrKHz3wt+vh8MdQLl/TUk/ORN6zC4GrtWV250bDNL4FjbaVq6gypqtkaTavy0xr81RmMizz/HO7MPIXzTkqkV0Js31K+zaKp0MCHVOCw1NT+hOl5VmdVEKgVwfXqlNFdfgPDEkPkMZbb2dheHxycpJF8yyYI2FOQp2Eez5H2j4NedfbUecEPGtqOPzR1/r6yNa7cAKBCiNwtbbiyOHTcOLYdyHM58OSQ4q+pjbNGu08Vag8NzKG3Q8cHmfbdxyk6a6cQp2T8GrYufy8cbz3PD6/QjYX7Wh9ENb37FyyZMH2ohNXMUH9pUEVCzebSc+fP/9pfKQ/x3y0le9jrRUGJABJs56Atp5rwRzxOV0HhIR5riH8WpWF50OL8jCacEKHolwstHSOirhWBAEMsy9ZO/GumG7/wLbspc58c5IwaebudrWK5DRjiOjxBHv66Vch0LMlrN8yXNZ4vK+U+dvENP388XxEPY/URhmm/SDS11/78PAlBLoHjJl2i/nrn2LIey/1FhvF0UI2WjBH2nqxgpmGuRtBO/diiUVKEla8fxYHtyz2+ot7gUDJCKxcH1nGet5txa2fQw1fQwevkIihH3WMQ2GsOWn07WolFz53Qpi5dQzMTE3F83b8cwrhtJzOnQlCStHIvQQpf7RteiSk3uL1b4R7IdAb4S2UyAMObtluWtb/QOsN1NJzfvgl5ldIMsqTGqXptrcF0XK2qeVYYBcUvxZ+1CnBEOA65PUxlEvUl1qAPovzmL/2yrbF5pKLDT3+PZyitgyVxakvJGVowJ2GnhUlgrsCpVNDYFUZXkkx2fnaIbZ9+wFMd6WrWt52jLLGL59luMz0aV6TSYtG0F3dbj/X0dGxo+jEVU6QRq3KGQny1UHAUpTvY/vY3syP1s2LBGu9HFUWR1tPLpibjg8apicNfboh+enoVDqcMERDAy1doeNVF1WavqA3ZxCQ3/Smy+e3WPrnbFn/ETqKS0iYk3PqbvJehjBXlJm2up06Je42NXdRH5WL/5wiFvTH2b42OMGefGYHMw1350yw0E0L5WKzydTOPXQK4tCNRB0P9O0fwNN4EclqElUI9JrAXL1Mejs7X8Nn+WMs4DKDhHr1ci6QMhqqQviiSuLd3lYg9ZpEo5X8wPcYZPYhcbxqTSCfXZlgvnzV2ivXxCX5hoQevw6dxHZX4KWLSeKPxEtYg3Y+4waC0oKROsDeX1qwFybg1ZDG/rj5ZTY6OhHYuQ9qS/x+3mfvfRpt9y5TuPtDg59J4UB7EMM5LI+ANhWqoZwQ6A31OkpjBgvRfoO559dpJXmjOVrVXihffHsbDWnlq4j1KCONIGAr0dXr169fVY/8RZ4zEgFp/vz3tK1Ulrw7kZi4SU8YH8R8ORa8BMkB2D6A3XZFpeH2oPokL5wAAEAASURBVPAZWf4M4e4K+vwGZ1QsiHv19T722GN/hkB3Dz+ZtuTp/sQ07UY6YqntCwl0lOMNjCa+MC1fdYggBHodQK90lsuXL38NQ0A3gW5DaemkddO+82IcpSFjNGGctkb3pVa8YvIsJC41RjCufSQ6J1cILb0QxOZ2nJUrr4gsOeqja0KdTV9K6GM/xzjVSbYdbC6ZkCJRE1abcW2cBa61eINebZ7uqTODUyXZrXc+z6YmMxeQu21BWigXy18pGrk/DxLoEObP9Pb29vnDGuFZCPRGeAsV4GFiYvSnmLPe0Uhz0KRxk1Au1lHFbYJAJ8FO2n0jCHVqbIgP/D78nve8Z2WxZRLx5woC69WlS/9qnqHGL5F045dYwP6/mC110BxzbkfaOTqwGtlomD3aee7y5g6hekZz6c+/tIs98vifYdwpx550kuv4edsG7z3l4H3OuHeTUpSiHYQ5LUC+teiENUogBHqNgK52NitXrjyIhTY/gAA1vB9vtfPNRZ8EMQ2d53M0jE3b1NyeeXZMosGN0VBHpd7lokV+KNMKbBf8+Gw9XpX6LfamTcX3wrJf3xzzWa92LP9g17KjV5wqt5rXA8Yf2Mx6uyugqTOYGw46Ezwcaplz2nkuRGilPx2p+tv/eZwd7hsNjuYq8+7QRnCMivtSG4Q263CTbTeUdThvQfN8Zt5o4n4mIID93wsgdO7GMPdbaSFXvRwJXlrgNp1VOLIuRwI9BE2eNPJ82jwJU9rWRivh6+mcSm1ZByRNO29eW9vWevJSybxtOv89Hsdirfg8phpdTJf7mWzjWL0IWQuKsUsv1fFe57b6GAj41drKlYmWhGKvY1biCllRL4YQ76Hh9dQQu4NacnsaaJCy7owu415CPFXDFFN45h7sZxhkDEoPRKccT9O02Wc+eR77xCfOcjDzS2+ng++RYN4Ov/eeePA+ZxupKYzLcKQJxrOiv+jq6roS9OrbEOVgufFWUeVgVHhPjwDOIj+MrVW/hMb7ZnxwWi7Nd3pK5cWg09SmE+YkmElIU0WDXXpsUzFYBEI96HQ24oa0fRL4JNQpHZWt1uWjdtlEvuBxcTwWvwr5/02jVuxi3uChm25qMaTYcdgo8UkzYW+QDEVDueJMUnZKYfNPphZ+Unnw99vtW24Z3KbrU+suu6x+vcViClbFuHQ6mtWstmiSfpxp2ZdIpn4R9jbC4hvNk3P10WWAhHewho4AOcS0UBsikmSidMJxBDDCwX5365Ps9NOPYUcftRSd+XzTFjxVda7UTsFSAKy92g81cp339G+qA4SgWlsERkZGujD0fjeGq0+utTZLDRdpsK2t7kEs+UpOJmJJMHsdVRoaZqe5c6KTy5FWTz8y+lJtoZ7VxMKDeIRRkD5ItfN6u7pezMVno/vb110ns3e8o5PJ+uUA/O/QXi1Fj8VVIbkEwhXDjNBGpBdshT3OdOOu6Fji2b7OgfE15382c9VSoxe4PP7QVq5XjjjiTS0YfOoYjcfPgb2wi6FibwA2rel92DwTd282PZFGToMb/FvlGjp97+FQOzqrM9tuu2GQVcjqKKzxhMEuuuAk9r/+4RJgRVN46RrpNSZDWHqd99l7X6p2TnUeo54HJiYSZ69cufjP3rwa6T4ThUbiTPBSMgIDA8NXRJrCP9IT8Zpq6dRgkZZNAjmfI0FOw+28gfPGJT8u1Ekj91ZGbzyafyfzskZSW/eGVeI+3Wx4qHk8Q6Ewi8bjN/Z0d30ePOZevuxJXstbR1hfeozKdrdKbO9ei119Na2tSJXAvusuzHOYq7Dn+e+hd1yCedwmE52kIEWRGgkMJaMthVCy7H7TMv6oStovpxT9qeYxc0S67LJoLctW27zWq729y8Jqb7hLmoqtVtSmCyTbOAd9nDWSIjfTwUQkZLIXvXn8HNTTAp2MIRKmmtqG0Z78daW2ZS0tNxLoppk5aEPrAiri8M0pqsL++X9/iJ1zzgkYyUtXtVwCPbPNoIWsaU5KFeg04giB/ofOzs7zGrG+8xJ6isq9xHWmI4C59B58fHdAuJ5EmmwtXWtra97FcCSwx2DrnYbYMyteJpcURsPvNBefKx7RovPYK7leICXxvOwEeNLCHVjgPmwk4udgC8tL3uj1vAcmEnvo9x2Y+15uGvoqrBiWDcMeVXu63mBRAC/rMRZtlk05dqZiSV/GPMYpGMt0RztymN0lnMlhWaLTONL7MEwzrmqh2+F5F7PMBxhrGmJPPBGVrruufuOiFQH+UmX16oWqYYw3gVxEbpFXm6Z6MrOM9balnw4h3p4eGUp/GPkEepaGjlekwiJcCEPtNJA7012QQPeXKbMOF1dmHd/n8etWsH+7/krWM78d3yoWGaL+cZdJm0ZDgsPI1xvG0xdyJeUC021/P6+z8xuFxK9XnHTJ68WByLcqCBw+PPjxcFj9IRpjjRqgWjma6yYtnbTsIEcdjEkI4UI/PKJDQj0XPdL0yxXo6WbZw3Ggpycct7SYDyMEP+ns7PgMGopMFSUzak2enIVtcmIZznX8G6ZIFzHD6gTQMuRxDAyMAvNX0RI+iZUAHbZpfUKSlVaLpj2SAhsH0SAavZnMwnOB7ngjLoVSLHon6JgZtiy/ICvsN5N69M42K7qfxdumoLWnVSnEbVy3Xl25cqU6EZa1FlltlWS7V7KtNZKknGqb5mkYUl+K+tNL/Ls4UOkxu+urU8UIdEUmYd4ODAutBY2LHnGm61HgkTl9VgzHrpDNj4WOWZ9rrj6fXXPVOe7n6onuFdLee+LB+1yqdk408O7j+NTfsWDBgoY0KMPx9sDCvcR1NiDQ39/fZkvSvZFQ6JRaz6VLmP9uhhAm4e6tUDRMTnPn/sYwH97UiNJ8OnUSaNjLSy/f0H0+mt6wTNGFkCwPb+zMe+q1Q7wNYtj1wu7ubgjK+jlsNWti81vfCoD+EVr3eoBMEijNEGktVNu5F8Ih1F0hlRROGE5PxuGRksk9dOh9pB5xQ40k/aB0wgia9QJ26f4OsxF3jhqxXR0ti8elDRuqM7maLlkhd+DuOvwekldCeKuqDmtHoTBM9GtmuGU5MxKrQWQNxPRxKN1boQEuJ7i4AMd6CV8exQl0F3MXN0UOJzVz2hnow9mXy0x5LFeg+8vpreNuGNZx4BvtmdfK/u1bV7LjjluV0YZ443vvKa33uVSBTu2YbppPdnV0nA16k35+G+mZqqFwsxSB4eHhiyEM/xsNU7gYIVoJOKgiOdo15tOV5AI3Gh4vdQqAGlc+BO8IUjzTMa3USSjGBTahgZ6FUaW5dJh2/tm8efM+hTKXrqYUll1gLPvRW9vMqH2JokW+DmG+DCpTYLxAT6fsEDZoMN35YMRyBnQ8oKQkOB0baULJh/lLdAb8TqP3jKFQ3bD2auHQHbG4/t+RtvArrH9yFNveYP86PYfvT1vmM9qx9ZCQb5JWrw7LsZgqxzviSlvUUCYlOdxsKU1SWGpXlUQHNokdAUG6BiMKx6PMq6BZd6F482VZCWMJMzAg7Dxlx1P5Ah0dHtDRJIxcOfvNaX45Mw94zFhXaYEeDAS+K3zXZ522jn3j/3yMNbdE8K5of39ahHnviYb3uVRhTjRIkcDumq9iu9o/47mhX1wajWAUhe8MRgACnTa3/g96mGeVOyxdKgykXfNDV0g7d7WeUqnR4iwc4gJtnQQ5bWErxmXVxCyPYqi5cWkuHWUahRi4oHfevMeKp1B6CuQrsUceWcgSE5+yVZm20LUAmHII0qI3NJRQqjk2EHKpd+b4uZqmk0lK0CezpGf8nA4crpbEIE+1+3QjdhcW1T0aor3tLdjT3n1Mgp14IjHqWFxBI8RzS/EOD7dtIppf/7rEvoagh86QcS6v0jcwoPZGIipTo+qkYWmX/2Rr55Z94x2qZHdaktwi2Uo3VPAunHGy0LKtJRDUCzCEvsKyjaXAyLF2RGR5tm753HJmD52XK9AxgoF/qtaCvg5GmFIlnD03tRHozqdF5pfZ//eVS9j73oelH/jWSeBy570nP+9zqQKd2i/QmUL7eWFPT89mnlejXtNoNCqHgq+yEMC+9Euh0d4EIpFaa+nEODWWVCn4vXNT5h9eUVOCJg89p932hmd5eAOLv4cYQA8+ArvTE78fGxv7wJo1a2qyCpGsucEMzKpwc/s/QqN+PwlS51d8EbJTOKRQMjSYpLk7OMOP9ExXECKr5DA9T5x6F4hA74eeqXGh4cpELG5JmrITwvJFydSelCLSy6oZH2BW0+SINRUPNzeZdixqNodDqbcTlRRVmrIVPT4WkvAvnAiF4iG5LSSzHlu2FjHdWiFZbJlh20f8y3172m96Yl9zE/p6yDWMvDEXztdw0PC4q3WneARfJLi9z1QOeq6kQKcejaqG0AltIpFOOVA2s87BNAEwrs3MioGRoTcduYh994ar2JKl3Y6WzgHl7QI9Z9z7nnn8Qq40Kghh/iKUh7MXL148UEiaesbhX309eRB5VxEBCJnbMVRER/2dU8VscpLmjXvOCCUE+BviIBJZTWeWR1Cq4vxImJPT9QQdJrO+U5ZPxeNmx7OKfyDMQ6y76YSwpH4Txl/OYDZp1BUsICQxvTcSis68Og3H0zwyTctzQU7hiOeEo6xOA0oCEfecE7rSFAtGMWTFltZii9xaU9Ivs2K2rcvyGJMS+5tsaVCJ61HLUuLxKMpBI/mgo0pGE7aGNYVUpdXW2TxL1tsV3W6HAMegJ+Xt/prDCjtqEWm/mAZwGQIB4is97RAkpJ1IVfoDzlDmkO2cniZpSaWJo1KlTOtKtnZlUxWZ7dh5gN1625Ps05+6oOqlTrY1f5oJwpzAEAK96p9EfTNYtWpVDFr69dCS34VfUz209FohkNWsZHmUxwkX4ETFKz9NaA2qqnVi7+2nd+7c+Xg1tfRD997bwljiTKaEvonxx6OgPpRXqGlSO9uDMOGsYPzaEd4ytrjR/DmwdebRk+LKxSSpnXtpQsi6c9MeDY6mCkyrA1vqOmj3kUT4UeeA3pdMKBNxOrBEdvKi48FpvpQcCUsnBsJpDZ+mW2xhG2z+NysYCeBC3I3rJKjRH/Blo9sCQa6ZEmbLFexvo73YhXQ+a8Ri1bJxRzbcd1+1TDyEJayWuOXWp9h5557I1rxpMXaaZA69e6I6t05n0+9ZwDOlw4JibATR7ykgekNEccdCG4IVwUS1EICW9IhhmA/Q8OdsdNR8ZzXhWR7llTyXMOdUEwkIE1m+qKO7+yzuV+krjMG090akK1hE+ylU0mBhTlqq/1cJRkATMgr9CJgqpW2JsNolh3ESHrau0SI5ErW4cQUYSWbigXzJm8Ic574p5y/WFunQ9nUIc6wgZnHdYNgX5FwTaKDpCE0dfgbi0ApniO8UBeeGSOIHec6OnN9k9bZoTn+D5+TEqdAf4j/5D4MAENzuj4bRbUUJJbBy3dK0VjOstZmq1IQjvWEJBSWHoKsGOxUqVeXIuJ0W1BBnGoOmMtyfWyvddx5QQ0tmQEHHae/eQXbLbX9iJr6RbIGdhj07rPBsKS3m6Q9hq9qjhaeqb0wh0OuLf01yx3DRlKLIP4SBhjE+n12TjKuYSVYz4fWg+zKdowW6uqCjYZKM4r8g0tSIaaoWlkzz2r1795JRkoo5EgwQ5j2sSfoKuPgW2OohYzBZjqSnjJllTZ3CdRQrsSbQ2pH6khW1LA+QI5mlYPWvGgkxBT+1Cb8w7O2HMWdMNggcXtC8kMUwhRJQjvSHi3f3yv/ScLkbms0ZT0VXarBIq4ciD52YMQzBs0VtmrSoVXHeU3Zq8uGUc1xJ7vIf5WAzd8GemxuKAIuFrvadUOWmSVVtimpqq6Xi/HJVbpboJ7OQalvS3BvxzFPXuOae60pAl+pCEYXdesfT7M879mOgir6KtPN+7vTGS3UhdFrxVd6H9EOl0qh1urn3AdYa4QbJD/Po9wwODd0b0rRLeQVrENaKYiOwCQj0LIpsRuTptPGMyJ4Hw8DxquHwaSYzz4b37Z6gkm+do0xvv305a9W+jhGAj2AyG+2gr8C8BVPVKE662Y2x8Aeh0L4B1beHKewcCPY12EuG8zlJcPnSlswZEiZpuRo6xCZWIPudu7AOiJKWTT/KntigDgn4oY4QtesSjZ+TowttjUNEJyriGBhuT+Dnzt9LDEvsoMFjEB5xorpJGw2k1g4q3jjoUTyHNGfPIev/Q2vPCQ7vFnPqUmCFPmYUDANaIKSEpICWV1qEQD9Ehn4R15UVNsOwV5J3fyZz4NkdOSm0/JnxnG/Bg122Nu1CHAQjrZkYHhxlN+OI1aO/uhxvw12ISW+Gu/Qd9yn8SooP7BGYmqbeC9rUwZsRrpwyz4gCCibTCOzfv/9UnC9+F3w6ZtpcemZTgBJkeaTLWcqdKz5Atgy6lJRWxcYTifsH+g79xbp16yZK4YWnsZ95RmNT/UdjtfQ/QdJcCMmWzSDJFWpwLHsUauutMO36ben0i1OmaO0/3r6G2aFrIbo+jHgdiAdrOGUUkjNX7DUp/1LJIMBJ+DovEleHo5RQp/nxpKCHXH1lz4j9o82vSYOjcQyxy84wO4bqyQKonYCdOtxJozGDDU/g9D6iCGKUXenFdKikWBU3uRGgDlkiQdtR8b6q4uhduM79hNLPJk626+5sZz/5wafZUUcvxxRN5mAUddD8nx2nNd2VbGhg/nw35s/Pgmnn16aL3yjhQkNvlDdRAz4w9P7s0NDw3ZFI+P3YikFzfDXItbwssjjM8iiXfppgqXCkKdCKdx3DsPKGhQsX0hLcTfh5gwtmFmZcsRdu6J0Yxv0mFqa9NUuYOy0VSKvqJFYFbTUN68ZXRqY2+Y82lc64aCe0/C+yec3PWZL0BTkUXov4EYeRUgtccCk8Ef15oV12NTK3gXb+0sq4pCN7tY6D+t3UHJYe3THODgxF0a+hZtoR2F7NGYMX0K6BCQebJ0+SK/LCqRSZTESvAgLpd+G+0/Qz7e8/3D/K/vjoy2wtjlf1C2//czHMkfEqCPQt27Zt211MunrHzagU9WZG5F9dBNCAYn1c7PsQ5kNuY1rd/EqlTlWW/xwa/CFdl0slnSRHGmHyH2hSQ1GKAOBseZmhTpKC7j3Ux2tg2KfDG1bovb15UyszJy+BEL8Jw9mZwpxaKfopioEiDFpTsZ9i/Ply9dwLf+kX5jw/sqsunX3hz+X45AexiugWTAiPOHPt5bR4nHglr/xFeF8G1PAVC1vZyt5mFoK2HsbK9xB+Gu69PxLmwtUeAVczr1DFLJp9rKzHYoo773yWHTg4jCqR/gbKbd/QMccMj3XfhsYwXVwwMkKgFwzV7IgILf1hfOy/Qw+UVus2VKGCBKQj2SvEJRfiRI7LjlJIB/LpIWRg5a2iaqdiHu7dHu+CbmklO5NbP4WFbd/Db7Fj+Y3eE//RpKWmjkJ9eBJD8dfKTzz7Bem89+wqhLh0/mXb2IqjrsTw+9cQ/1W0gLEU3UII1CmOjAV4x6wgo4fCNR4CqFVUIerkyHLcKzv3sz89tRMjN2lxVk7LRvPnsEQ5gV1BM2a7Goc/jQD3EddZjwA09O+j99lf7xXvXDDyqwM8f+DXMt8GF+LOFTRLFeScHboGOk8EYAs5KWnxuP65oaGh4rT0kP0RrLiGTXYsobYMEMJ0MnZtYykvLLRg5bptvQyt/J9xftrl0tkbf1PscaUS7BJI6zd+B8Pul2NF2C0Yqx7Gj/b+uJ2GwMLV3/OkZW3gMSf69WdwTnKQXIjmVCoA4KkDGfdVxoYmWu698ykMaLn70csR5sQqDbej/j7T3t6+u8qsV5y8EOgVh7TxCWJf5fOxWOJWjAzXTUsPbJoDPUvDkwtynrpULYK3UZxO1jVHBDrDGdu3TjKZ/AEMwxfexmjsYeTxn1ARHkML9WesEn8FK8Cfxor1O62Y+U84qHKjcu5F35TOP39fFi9FeEhnXfQcGzc+gaW8X0Zej2MufgS9ncqs5uWdA7pWwgHjo5bPU8h8e6nvsRJsCBrZCFA9owWM3h+ve/yaIdxz1JdsykX4YP3EyzsOsF1v9EEYlyfSaNSSRi/h7sJ9da02FVHEQqOKRXGFIjXL4slh7QewT3yhoiqL7KQVrkoX0d+cU10mR9eMMB7ghJb2h5NwG5E0jVIFAKfHKcHsF1VyV0fkgfzKIyWvjjcyVjHJa+r6VTjK9lakHfZFcx5f9XnieQcGw7+4eNtt3Wqn2s10bCyfHB/fd/SlB9hqNzKMood9yUp6RF4kwH+55I6b7wlH2i5DET+OHt6b0D4WRz9bcGNy03nNIE8b0ZOujJfR0R6Wli1oZTt3j2TtO+bkxbUOCAS8U3zrmYxkVHY3iMz35nR5goLS0GFAhwdH2DPPvMaOOXoZBp5KX3FPAh3z52MowyNBeTW6nxDojf6GqsRfT2fnc8PDI3fatvwJbOl1pWwBeRVVVVCvfVU7nUPOgHSUYu5IkJfrclGgddXYFxbFwitqatIniHgy5GkpAr9PxMl6HDsOhk2vPdA3tMUTPXWrBujEdiuz+99xpoEyOXDTOSWKPvQ26YBnkjBFofybwydtxNJ8tic8MPjz5tHDVypm/JimGGzSgDTtB89yXgHuhhu2qsVgbCaO09CoRLDTLk2B/RCmD+bheDyVmUYEowxkcMdtroPoZmWU9uhsUtmRnRG27XUs7M/e7p6OKO5qioArvOkbcV9rUOZZAh6RvPXVrVbplFnCPjfpVCIDJgNffP5VNvHek5zjTmnaqxRH1jSj0eiOycnJHaWkr3caIdDr/QbqmH8sYe6RsFVIh+gge9tcEgU04Rlc8u3CGZ7JB155SQg6NLl/UOQZ4kcLbwBOf5NmN0NCd9GDFyNHJns9UuVCs2XCxLes/IOswZAJ/nF8eJRwWn/l8LvEyZYFp2kmcK4JePDEpfRefDm9kq443MXG4GKsvZ1NtLbhHJQYa5kaxW/Cbpoag+KOqXxaF4D1eFC9bZiARU8FFuksC6mkqG0aOyVTf5gZ0jaI20M4dAWL9jQcwaXhFFOzm01Fl+ObORlby87GeOZ8FLAVfBa+Hx5oa+gTrFnexuQXDrm4FNDIl4SFSFQEAmg3vJZ5ikjpjeqvEyTsvUK+EAGPQ3zYCy+9zgYHxnEKW3EDTF5eqCOAD/zRFStWBI6oeeM24r0Q6I34VmrHU0pEUPvI5Ue+tpLi5At3Flcl4zjxONHalakqOaEsGG6HlU+ciEmC1CvRSdx7Oznee1JmbTR6ZBOGXLrxcoV7WtkltFywcs2A8DwdXBGbC3TuT/TLdaAt2zjyc7xjAZts7ZYUK84i0Sk7HJ2UQjgiUzISI5HoxFOSSVMI1hbYfn1kVAlv6dywYZSKmit/7IX/FVvSusyYMv5CVeVLIdjfhLn7dsQnIHIly/Bfs7SDtTbhONYEFj9lhIiH2YZAup7QR5X5fdD+c7+TsWXtDdh33723ny1d1uMPLuiZFgljuN2wjJlzGIu/YEKg+xERzwKBPAg4sofaF08b450O5N5cUPtlVfrZjel/drLmRDx8OF7JyDRBXVWHfBzTqyiEgbO8x9uapPG2+RjKDDEjPvVKV0v4AzAlPFIMD9gLTwuMXsPvX+3Nd9+MbXeXoRifwGp+THpaEUeop8HIJo0F/ycsajXnNcny/riBgaUqY5DNgfDxI4D3VT0Lcf7M0s+OFcH0Y0qbpzWdTz+1g73zlKM9oUXfvopFw08WnapBEmR3dRqEMcFGjRFA+0jDXIW0k9SU5vqlGmZIIKd9JoKFEK1xcYvJjsrqdU7Zk8VyiuYVwLincCp7kHzicHiHFL206d6h77tSRXXfD3bbIgL9cuVBNCrnXOHuDLsjQ9g4Nzs7sdG+DCdt2PiGdOb539Qt88PQ0n+LAg+hQFD/8xDFsMeyha1yb09zarldntgiqAYIOJ+985Hne3HVZ4S0effH2Mvb93n72kVlTvPnGHJ/EInGi0rYQJHrpqFv2rRJ2dZzaX2/hAZ6EfVgxbIGUkuQnXqZrApejdPPF1ViN64/JPOZ4jkvt5DImUkb7omW12BBHB3PiXOuUX48O41ZDk552YPipP3Sd34yQSGuH//rVpt6VB40nNLrr+9Rrrtuc9ltxz8/wp67cNGOq49bufADsK73aSyIfzMOYMW8e7DDYgTp2CN72HM7ihocCCYmfCuAAK2pKG3xWQUyDySxd98Aw+4djCZFSDgHxgnypM4yjMmYcih0N+6DqmBQsobzK7tSllqiI4465Zj4sNGWkb7M47onsXYog17ygZPFSh7H8efkYxUvwfBGg46+rCIXKdIcgKTH7tHw0vYmnEutQ//zCN5AEJNp8oVRFCccf/zxUuS5FEIE0lZdf3eWjIJS6ejGE5doV8Kl6BdBjObWsB+8ORKilWnZC9ucZiNJOKMMAXlkzg26EVLYJOOn6PHyJ/35Iy8DnU5SrCs+RTqHUBwL5+JK2xO7Vr7dPK55Mh2S+246VX6TfbL9i2F7y2lN+757QvPwtQu1ybc2WXEgHuzeAhOwNwUHCd8aI8A14xpnmyc7iU1ORtnBAyNs1REL88TLDiJjMrCLvRv227dmh84cn2CJUwP+X5vo+KatKCdyQUINDTdrkWq4crQ+5M0bTu81lOxY+ZPxfhovbAntoCNovI1xFkQ8U848IlgMzRn35wnwnDp4gvvh6o3GSZAfn6PyhnuSZd1yPPwBjtDwtJIkQp/bE2qWFaBjJ7s4SExR8nVs+UIsP33+zIUT8UvDwlzo8CFmjiE9Ey3s73Y+ARLu7mIzXlJvSWh9NTkKI//pHKeRHY/zRyGcl+xYSZ8kGbrYttLjlmEa2mCPNps5ZSd+qXz8A/RmlCxvqjScLKV3kzlXb5KK3IM4zyoXvVQ4v/EwaVna2rjJfo1jaHIlz/CfTtehOqnAHvfT8UXmC/pSc01o0FrfsldehJ1vmpMvZ8Ilu25ZG4tg46BhIDDFV0aW4qFGCLhtgff91PeFUBsSiyfYwb5htnoNWU0OqnjB4NDpalgQ9xwOVdoTHGNm+HIZV3Nup4zmeZom9XAjWvxTcBoz4gYefLUvCRn+2fAGOfWc5JyeOQ1/I4INNmnnPPBpOJ4iHUx31NA7W4wcbzcn9xn3ySSUBw04ZXg48d0IlCXlkjV8jeDUOLcT3/3jpOKFS2bipLddKexy4UmQ8xYxk3S4bePUsBiY4c055YcTKGEB1OXXTy5Xp4f7B23B8tOgZ0KS2KHK5jwnAXGRS/JDLCNCCmMKdJyfNzynwnic9DX9mt10HM503m5cjgG9IYqZKhORd+inY/DsKJ5779LmuTplSz7wcnIahH+608DTeSgSY25kp8OSyoOipB54TtNfOWV+DcjRKWsyyyyC/vhZEeABlkOwxoVlxG6HLKujlkzEeQii4fejfJ2OJHo+W2NdrM+MsNMj+603hYbkNhjrgn04Nwle8LzOZnbE4k627Q1hYMaPY62fbUvH58trHepSRsPLvybOlf+Z+1fuStUpgSNUx0enwEvh+VFcaOe2YVgP4J4XqHKM1ZBS3QQ6NBhsYYRI9LUuVHVTryIJrUUeiEfHPtt2qnpnwcQbEU7Tba6pIXZD6K+MDxB6Ie5oHxEa3HRuKXpObGrlwSRNnJKjl06s0jNplSYeFLx7bDOmUCdO0B9ntTACXCpBMVw/JzyFBafHOae8p6PgpcPzSX+bPHU2GZ4XT+NeScN0HU+Z9Ej54yZNPicEfLW0i4ArsokuUSVeCEuCj+7plq4OpPSHNxCuhxvPwZpSk0OcFLKO+HR8HSIUQsFwyUvymQRR0p+ywC09ulf6xtzYzjMCHP5SMRDXD6Ab3Y2RvHdJUGcFdJN5OTlSOGGWjEdX3h5CSU1F8Ya7voX95azxr4Zn5HJCNNwakSxiIFF3xCRNITsSuoewmU2Oj7Dwq+PnhGTj5IUhGSXwQg3SkB5mtxlHyEu1Bfa7mndLa5QxFkZdI9i6WjT7LcvarZdeG4KRQ7ezG0hIeFYdAcv0Tqjgm8l4yfTAP3RiJV23XMa8Ya5PJf7SwUgTU/FUPS6EJtV5tOf9mqbcXUj8Ro5TN4EeBAoJVzQo6e8C9ZVeu/Od4IYEMYHvNpLkSx8UraHhHxbtCKY2kz4ealTcBpkaHGzAgS9sWaC/T+kdmvB1mzgnGajrSAtIKDFaWAqzki0tGTewca9AY6bmzplXpRgkNYgYLo5zCOMPaDiNP9RxKhEPTsbKujhkkiXnPDnNqsso4k9HwSVJsexkJzNDQwcdIk9FK8Zxzh26SJgWUAjh7SnRzkGUmmFn+BkFdK7JchA9Ly9079DADeVBtFOjN7inE0ooAk2uynhL9Oy8ITKKItFn7LwthwsryZjDq5OJyx3l6dDwZCzZOvii78b59pIYuXm5HUlK5KSkG/CcvieqLmU3Br1vtwPgCjsc8YAD0dwYDvYUn8pH5OHtUOL0kmTJv1TnIxVMBhnkyoOnJxYITT8rxCJ9k6mwZNmc52Rip25QWk+5gxnJ7Uv5UL9nV6KD9VtH2SeGDrOTm/tYB5uStIgiHb2kXXbEu8tobkIipHoIAHv/9rHszDK/IO93x7+1dJpkBUh7lHZH33eyw1koARputxKJp7AVc1+haRo1XgMJdDQCljVqSdIAwHLeLmlSbiPivVKTwR01xKQt8I/BVRnpw6Ef+ZIwp/gkzF3nFVHkk6ZGwh7j0E40+kvyiofCmBo0cswcgh59jGT3i8JNqFiOxsdZoAT8HrcpAnQ/rXNz4xzyxFSWolwqvlsWSkssednKR48goMrqFoVKSZxYKD9EKVdvU9T4+0hlmkWaJ9FBGCuVXdww3E82mHkYH7qTKA+utnooyUl/wsJ5N3gJNglz4iO5+IJzwM8YoWfinufhlp/4de94BwNiF7Ho+6N3S3QRhxPz8OC/tTAnxEcy+PSQq7uCJaTHeJJDl9JRrvTNOJ1Nygv/SBBSiBvuXCryZzre01+FLzuwQngRV0FxXE45x4hHOFFlcIrhhjr4EY0kExREjqd1n6b/S+lkjMjFTJk9El3E9rFO+/TQa01HN8XCK5Z2tne0hbVELP9Ot+lzETFKRcCdxuNfe6FU0l+Bf6TL21F2qfEvh9P2P3P/zCvRzaaVGcf7RHGhnDlnn+M+6LP3Rm/4+4YR6ApMY7I4+5XdLP+bkYg7b48M+GFhrXNShP9aLWTjyIgyN5KZh5NWBA34K7inK32WWtj9OGFIqwou/eET8cI+5TQb/vj+53TM4DtHhMedv54IeEb5tSx/lzrhNp2Tw+hUJePxezmJL9D1JPfee7wz4pB/rnjeNNW795aZOKGi8eLw74jnLlEAIjjlxZU/Z4TzhypfC0GtkDhVZjOD/HMT7XZ/KBb6qrZt3dJ27aquiHbmwf/X3ptASXacZaJxl9xq76reu9XqlqXW0lZbUsu7DZLxgo1XbAEeDBjws0EgPOYw4APMoYZhZljm4AGG9w5msGHePODY57x5zOOxG5kxxniwjDGWsLFsWZYt9d5day53e98XNyPz5q3Myqyq3POPqsx7b+zxxc344o/lj5IHhZ87fbsbopWHXSGAIWpoDUyT8q6iqgZqFxf7jY1mi0XsjGkYG/vJO+1CcqQV8+fXcaT0xxvjH82noSF0Vg9GUS+//V7rS6MJpeRaEBAEeo3Av1bqn6I/+L2/KfveX2DUBirBGju/vU5f4o8RiBfE9RL7xrjThL9VCo9HvbiuIp/rnNaqh7F8DtcvjkPdpsWwwZYpHsUebB4kdUFAEBhqBKw3vPXpK5vFj5v1CkOd2XHMHIa1A61Lo5F0+1lUEvyWD6bx8llXHT40jy1rneUNumQwRO98/MCBAyOrHS6J+3ARejJnci8ICAKCQAsE3Cj8uxZOYt1jBKhfI8Ri0p1PBvYyYyTwSOUKWbV0YB+1vrVNjMPtGGovBsHoHsaSLqQQehoReRYEBIGhRyAfzPwvzKua7S1Dn99xymDgQSVnddHjMJWLi1/n52bUkcMLicW7rXPIYXss0v3i+vr6J1v7Gi0XIfTRqi/JrSAgCACB7OHg69ie+Xi8Ll8g6RsCIHI/KPUtuR0lhLzdfNNRlc10NofO7WpQrvUXp06dGtIC7aj02rMQ+s4xkxCCgCAwYATWnnl8NfLDv8P854BzMkHJY9Wyj2090Ag2nIWGhP6c55zqKG8cbsewvGcHwZ93FGBEPAmhj0hFSTYFAUGgjsDjj/9xGYoRPtuobrTuLnfdRwB6MZVXKWKmmn/DZZifQj6rzt55U0cZ42Esnuc/Dr0nn+0owIh4EkIfkYqSbAoCgkAagehRKBGqDNfirHQex+QZjBn4JQxRA25tYlInkZpP1WEgFxysos6euVHddGKJw+ht80BCx0jDp/fv33++recR8iCEPkKVJVkVBASBOgJRVHwcWgWv1G3kricIgLFDqMUue5vV6A2Fkzjrn1hyT37XyZ4hemUYNxe1v+DFd6jFpbm2qgmqymR85Tg8+7w9+/cq4z2IVwi9B6BKlIKAINB7BM7ZG09CHfH5rUpGep/2JKVAdcXl8jqIst2mAkP0za9p265hiOXt+3AK3/Ofeys4OnnCYesUoML6cnF9/eHWPkbTRQh9NOtNci0ITDwCH370w5XIDR+beCB6CADPWPAq65CAqdi4hbrVlumnKbwuzVOMbvxrlOYZslPDsx9uufm4Onv2WapcadfpgMJoDLcjtY+dOHHi6U7TGBV/QuijUlOST0FAENiCQBSEH9tJ478lArFojgBAJZlXKhtYPLZRZVttSYfmYXZkyziSH5J98pl032jTLHr64cFNr/nme9X0VLbt/niO5oDQsY3e/sNm8Y26XWcb9ka9lJJ/QUAQGEcEcHpx7tN2GHho2Hkih5huIAAw4xXtmzGZa2pNRZwm9S2np+xUmmf8pOekaXw2pyTWfeD0Qkye3376hPoWEHqn2uGKxdIVy4s+VY9nfO6E0MenLqUkgsAII4BNzg/g9NYzGNd9Gp8c7l1lHyhfcvxZ1zlkb7pebt4pe04Gshy2D1cyYT5vW1/92xnrkf/nelTyDux4RLiXaDVyUT2l3fBcPXTP78jTEdS6cs48CIpIr8MMpwk+ndMthJ/20Mlzc1C//YGXqqPHljCa0H64PZvNKt/f/MwTX3/iK52kOGp+hNBHrcYkv4LAKCKwHNlnlHKvqWfcymbG8adcJyhj7BPKN4/l7Ezglwu5gj27VipNR0ftaZweP+P50T5rdmahoOxDRVXY7wfRgSAKD+AM+pyTcfcHFX9m4+Bd9sLBx6bDJ/8B3DPA5kxzDb9AgORATmZadojbEKd/kCVj+TNEx0WFcIVlAwnCGv8DMzp/0NKO86ErWM3O09T2lqEU+TaUlVGnC5t+bo8EJfI7bj+hXvnKe7AFrf1idQ63+77PjH3s3nvvNUv22yc0Qj4G+AsYIZQkq4KAINAegQciBxK2c3zla04pc9zNOWvZcuDk/Iydmbe9xfXQO5Lz549FWftg3o8O+bY6HIX+9DUvmkFTO7VRUnNBYE9hI/GMFUWzYSav1cBtYi63NhqL+VISoYXTtBxwgJPLK3/pRqW+/PeD0QJriIp85GBIwc2hX5FVzuwSJgHy65bjXMxCxagXYBAbZKk2ruYj31uMPD8b+mVfBRUnCiO2w2B8kr3pEcR3+O6u0Twbk238jehxQw1wHog81Ivfuptk09gMbk0dYbmF8FMeET6by6jv+c5XqiNH9kE6b6+9joSOw1jW8fmTVGxj8yiEPjZVKQURBPqJQGSd/bELU6szM7N+KZhxptxZv7J2DDubDvnTS/uzdvFYELmnXDu8EUo292+WgmkQVgZ05UL8c30bdGyDr200QWicuTVKKwQBpdXoxuOQL7zAzgbXQVuncvGQ5QcrlfOupabyOVU5fKO6mitQ80l7ItgrRDUWREQgCDs3paypWZWZO6iyB4+rzNIxlZs7oJyZRQjozjRI5ITmaM3XCBwGmPgNnWBzdcVbO7/qX346722sLXhrV9b89SsZ5ZdnworncVmAFfouVm9lqoAgwYbEOyhJ7B9HkCjdVSD4GeQZHY7AKWjy9kpryiutxJ0Nvae8sU/RQSJd8pIsG4uaeE6TO5wCbFV7y+tfrF772nvREWkvnTOT3H8OCf3Thw8fRu9vPI0Q+njWq5RKEOg6AmeWo2wRY99Ft7QQ2ZsHr6uZ26EN9EyQy93kVcITKnKOoCU+ENl23mcbS8maAqdunNEKkyuMCUG+/FSNab7pRRM4PNu4cTR5W6qA/cX8ZNEP4F7jbJV3GKe9sF85U3MqWLmEBzRpyXRMAnu96gyyDKBHSNx2fla5IO3c8dtV/sgp5c4dUtmZBZ2KHlyPCYkjDHqUgQ46W5DiaTL56X2ZRYiWp+5WURBV/OKqHW5etYKNNd+7dvFq+frXK+HatYXI82aiymYFJ5yFkV/mKrAMxicy0JCnoBIFAOMpof82wjJBFQE0XjHun8nYKp9zLc+eVvbUtJqfzar8/mNqbfa08kubqvj1R1Xx4peUv3ldBRtVYsdQdsQhbJ1hzg7oLA/uK0nuyEWA0Y5bbrlBfc/bvklNFfIg9Pp7tF0mSejA6g/x4XzCWBoh9LGsVimUINA9BG5ejuaul9cOX/FXb7Yy6hbHyp71w+jF0Op9DHxSAHs4IQ9JAcloEveNetDmeTDkTVdyBT8OpV0rUq4ma0jgkL7zmsQdTeL0QwldG0Rg+JV37tSCyh25WZWhBTb0MKzt+w0CXjVU58SUzCADI3FN4tmCsqb3qdwSTvQ6erMqHD2tnMIcRtrRjDJPOzi0hISsje7zWNnM1PyimpnnjLuKboj2R4GH7dWei/JUgvUrK/7matlfu4IDvDdmQj+YC4qbfhSUK5rrfDPejEy4Wce2Mw7y66ps3pmbdq2lhSlnPX9UTR24URUDkBok9PlMFgMFSs2cuktZ2Gdeuvyk2njqMVW8fl551y8qf/2aVvWKEQNUq8EzCQxBiYvQl2/ii8Lys29+Vr3ju1+hbrv12I7IHPPs6wj/P/uS3wElIoQ+IOAlWUFgqBFYjtxDan3RCsIby+HmveCHV0MWfA6Ggk94CWLVRMa54TbGUIEmZvi1NYGDyCmB41Nw6xI4SR2CZWzYkJtbc1N91heMAnAIeeHe1yjvxG1q86nPQ1K/qLziugrLWPfEzgWJgOxF9jNxNCMjutGeUjh7D5ivt0Di7tS8shdBiEdvURlIt1kMr9vZPOJinPin3tG9GE1UiAPRaWNZWXYgLOzEc7JTbmZmcSq2r7rjApL1Ia0jC9gtHnHXXmxsC+sMbTfKZx1VCePhgBU4cb2BZ2N9HorlI6ks8jyFjX6bIdLJ7lOZ2UVVuPFuFRTXVLh2SZVXzqvSlaeVd+kJVcTIh1cCnpDoSfAhOyPsvPAAcgMoMNPGXOOn3X8TV40L08CoDDp4WXRCpqfz6k2ve7F63etfCEm9Vuy26WQyGVUqlR4tFouPt/U8wh6E0Ee48iTrgkAvEDj0Y+cPZsrrt4eO/U1BaL+5pKwbwcDTbGD1ZGzQfsQy2dSyqdcSOK6cA8+BXTJooOvD6BwKJclXS8NkkhG0KSQVoGQxb81P/sRZFYB8ihe/qoJrz6hg9Qo4CFuwQPAYugarcfQgQfAmbj0cC7ZzssrKF5STnwGRQ/ref4OahvTPRW5WJh+rFiWR7UAaN0l0fK0VXg/eM7tbDI6NzSvXzRMyDKo3uDN4IQsNb6VAS+Ekc/orodp4Jc0bLp7Nh2oNp4GHXI+PcJnCrJpemlGl8k0qwFC2Xymhc7SmKpefUv61r6ni1fMYql9VUfGa8jZWIcVjVIQjInwnNMnH0rzJMtOjqZYkftjyjQ5Uys5xMTKTcVQOJ6hNY1j90IEFdfJZh3EAyyn1ilfcg2kEbD/bWUcqQu3+zQ033HA1ldRYPQqhj1V1SmEEgd0jwDnyzc3Lp8rZ/Ft95X5bEEW3Y04WrTGksQ6koWQjriVwZAXCNqRtUA5amiksZMN0rl7QpiXwagATrsZjuyiCGe62M9jADuIludOQcLAADSQPybNcVGFxRUvUIY8BBRHFBkJtdgoL3PLKBqE5WOhm52YwLz+vHEiFmo6YOXz2LI1XU9zrhZ2YZkRv4l3FekKSNrMN7kNHSqlVEDeNrlJcuYEri55UAZL6Bvo5JFXX9hUmFtQKnl3UG+b64WlKLR46gimP56mVDZxp4q2pJXVVPX1pTZVA6uH6FbV5/YoK1jEPX7yOqZKimnexah5DAX71E2JRBfSna6kbgwrMRjxKg14cydtFBl2SeNbVJL40N6f3lt98+og6deKwOnRon7rx5CF9RCrn0HdC5pw7x8r2YmRZf64THuMvIfQxrlwpmiDQKQIn3nt934a/8fxKfvZBNJavwpKqLLaUtQ0eN81VMgARcH1WFo1zDo0oF7DpeXBIWuBxPeyrWQOBqm162/h37EFHTOKIQ9oQR525/UrN40PGqvJgTMxmjBtOyC+kXoq7MVHqPGLtfS8l8R0Xrh7ASLSWjR0ClK7ThlYoA0c+9JoxF50WPBAXvSgcVxZ1o4oH+2uU5Dl6soIZFIbLMgzi99ARwEy+ToFqVq38PmXN7FMzs5iDR7gMtjasFT3lQiFNETvx7j+1qu47el6toFexDvF/fbOiitiT6KEDxdXp8SI2vGAkb0wt5KdzWNyWUbNzWLS3MKMOHpxXs1M5SOEZNTVd0P7YGTCdg3RRO3nG/PlT5XL57zrxO8p+hNBHufYk74JAFxA4vhwtepXV74ks5yEsdjul54bbEBnacc2PJAmStSZv3EyhgZ4CKWQgmpMgjKF/fraTKo3frl7BYLUFaImIsdIZBagtQNf50v7qHJ/wPYS3yD6nKGZyIOB4d58mYeJLnI2eFd6zqFOoG86dk5fxqL9YVL20AFfdj4HntepyiCwsaMcOENPRuxboDx02nCOuruLwNRO2Ap8ORkbmQcKVNVvdebOj7j49Ew/rIyzfkThzjJBJ6xzEdtVbZpretGGmE6Zcbj/Fk/C+5ZbrA0HoHzl69OjlLY5jZiGEPmYVKsURBHaCwCJWsEfBxtuxSv1nIKVh79f2jacmCCTgoFGOSdxWM2j9ZzhkCilXkzgaZkqCqXZ5J9nqg9+hz+D2GCD7JGQOlRuTQ/+kAksOqXO4XRtcUS3anqSsiRsOdCZ/Mg6MYBuKxVM8TUJ53MxITGcjpMMthPHQPYRwTebas/6KR0Q2KNnbgTo8G297Y7yMOKwxNR5b3DOapJvuBOi49/bFOLH2w8d17IfbiZQQ+t7eFwktCIwsAieXo3zF33hzoOyfQhO8LZkbAnDRQJLIZ7ARfJbSOIbTjSROP/wMOZOPbH0x4yThJM6UumnIkyRcLGRXUF2j/VGyZseKKs4r6KeR5GfzkdrEdnZ6wEJ4tQl7kryLxfE+AjJuzreTtGl0nIiI8SCIltYZL0bDa4vsGIjhiuhczEO/z0IBBM/AOzCMuxeGR6VCT8/T5VJpbJXJJHETQk+iIfeCwOQgYHn+yosClaNkvphU8pKGgI0zG3FuL5uFNL4v52KbGWR02A2/JJ4uzWg/c1677G+lP9aDkdZJyJwTRzXpq17djiCsQ+42oMoZErUWoHHvYp68AA1y66xoSutVv5Swp6DGZqPEtRHxsLuHDkQBErsmf7jzvoKOAP3iXx2e8dVcrr6GISl1J++31AITqJpt/RlPHV65XQ063z957Rq2PEyAEUKfgEqWIgoCaQRu/MmNw14UvjewsCUtTIzbpjyyjadUPoNl6fuwVH0OYh2bXtqTRMT0FwGojKlJz61S1kPvcKT0TUOuZFWRxNdQ1Zz7JumT6HnlzgPOwxt/9KyldzI0LLl3XbM1LuwUUOUuh9fpzO2HHMqnQM/FecfmPczrY7scew3bGSZWNfU7Y9OdKzsGnueBz4O/PnPmTOuXvDvJDUUsQuhDUQ2SCUGgjwjgEBXfXvsXfuS8vNWcOQmADS2lchL5fnwyuKc9P2IGg4CRwrdLHdvP63PoVY+sSz2njSu5lJI2DSV5xkmiZr2Sux2MAnBYnnYkel6NoR8saIfG39h+De60oxeOHpxaguY+PJRB8lYyINyTJhFlnKGqI+0b3JKBdnhPQsfK9qs5y/qzHQYdWe+sPzGCgCAwQQicOLNyoxfZXNWOtpPNcXNDAj8IdWKHsKXIkHlzn2LbLwTSoyKc+04ToB7+RrVieYP+0E8zw3CMjxJ7FnPiWmiGJTam1Ra98Q1Jx59cFGdi5vz8PObnb9lf0dJ6s/Rqdjqh2lPPbrj/HL2Kf5hdWnq8Z4kMWcRC6ENWIZIdQaDXCFi++yYo9H621u7VJDE20iTwQ9MZtQTJnO2vabibeBerASIwB11xmQRhUyjOQVKm0YSOMVjOj6c7AvSXgT+SNevXKF2jPzP8ruOAH/IiDf3RfzPDcMfmfHXjAobbzaq8hMfkvHirOOg96S8RfFe3IHSo34n+O+KsLvHbVTQjFUgIfaSqSzIrCOwNgVt//PPcVPQWnPyBdnUrTdOGC6cOgsgXuapKzNAiwLricLkLMbq2TQ21ymcSNvS5YOhcqXUohiEZNxg8T2GnAjYq6LeAWuMM6TMsDYmcHTusf9R+OJSehyS/9a2J47/3eAmdhObucYxbv2t70uGUvN/qc2c2XN2OufNVaCn8652FHG3fQuijXX+Se0FgRwhUsodfiL3KPLOzaTi25QtYyb6IYfZqu97Un1gOHgHWD7ekcU7bkDCHz0nghpyZy2YETIlc+4N/kkCBkjg9J0ye+9rhr4SOAdOCV61lzqRlvOrhdmxVe86x+juVlLST91t6FsmXLHlvIt/lNYs5BGg8/McrV658ZZdRjGSwdB2OZCEk04KAINABAlFkFUPntREVnjdp5WlF1Z8HprJ6b3kTLx0kIl56jUCS90jcSfJm2luk8SYZoh+qgNVqYHGPKo9ZO+GXHQUunjPxcW6e+95n4DeZBy6sO3Owog7PQV877jtdDJeUyBlfMs5ENnZ8yw4EVMVGOEf2E7fccsvqjiMY4QBC6CNceZJ1QWAnCDz/19QsDlt5biyLNdI1n6hhbH8BurVB6o2uO0lF/PYSAW494zB52pAMd9qYGxKlVM+95GlGbfUOUBudMQw7jb3qzz9Rwna2+v5z495wNT0DY9nA4A0PxseuriT0crmyhhXuf7GrCEY40E7fgREuqmRdEJhsBK6ev34TDiB5lsIhGs1MHnvN53FgRrphb+ZX7PqPACXxeF5767Y0Ej1OGm2Q1jk0zvnvpCFt8kNlMoZCybPr3FeeIGoTxvgxz7xyCL5G9vBw5lBF3XnE09J7LdJqgORwe7O4TLxprjf2u7kyTZxG9xUolfnkbsKPchgh9FGuPcm7ILADBEqWdWtoZZeatdxsbOcxd07FJekh3B0kIV57iABJjyencbHblnlspGv2mTMLrEOucqeCmKTRHQJI0lM41CVJvq3qPA/pm/EkjSFfhpnFueuvvGVdzRUSC/OqnpNkngzP+4bhdhNh2tMun5kuOid/ubi4uLLLKEY2mBD6yFadZFwQ2BkCGGq/B4Oi+M3X5CsdAZ/Yps5xVXuj084SEN8DQ4DStVHxykywPs2COZMpVq3RDIdTTbd03BAkyfE6jhy2vHF+vdlrEcL3i06V1bOPRLXOREsST5M2E+uBiaXzyEPH5Y96EP3QRymEPvRVJBkUBPaOwLl3RpnIAqG3OBa1gDFbnmHerOHee+oSQz8QSHMm6zIpeZNDS5DwcUy5ttecmiBWzs1TgjeGYa9tYGscT1EzltUrRwNuwJ7zV52u1Ib6W5I5wiTDN0jnKbdUMjt+rB6V+iSOS/3cjgOPQYBE9Y1BaaQIgoAg0AKBL08FYXiHitCipwwb7ilMtmK0XcxjietwAABAAElEQVSYI8AqNsTP+XXMstQM95lzKL+hE4BnvRK+5iuev+epbd9yR1HdsM/HSnjGClO9xA+Jb5OgsWrlz7jv4cr9577vf+rJJ58c+7PPm8GUqM5mzmInCAgC44DA+g1zh4MwWmxWFq5pL6A1307CahZO7IYXAXJmmkeTua2NxMCjuefcPPedp8Ml+Zdkz2H7+27aVN94slRfjpH0pNOuW9TvkjmI77v5zlHVa6WCVQaO8/C9997bfOXn1iyMlY0Q+lhVpxRGEGiOQKRmn4Uhd6fWele9sTFno0rtYjs/xbp5WmI7eARIylwQZ8g6nSOSLPeYc57dEC7DmPu0fz6TzB2omaVGuNfj8LKdaoVjHNvFT/e9GL7HkM6fKQfBR/cSzyiHbbKjcZSLI3kXBASBZghslP3b0eC52M6zxZlDrTLcvgWW0bboQp2aLW9UJqPJHHGexRa177irqBanQn1sqgEpKWkn74177cpeQ9Vs68942sGVEjqG3D95bGHx8R0EGyuvIqGPVXVKYQSB5ghgQP1GZZO6mxg0snaioW3iQ6xGDAGueud56M0rvH1hSOBQS6C3rDEuHuTy7KMV9dZznDcPGsh820QS71U6L+nn9rlq48OykNPoD9FR2NprbRN0XJxFQh+XmpRyCALbIFAJg6PKxf4jSFvNTNcb12aJiN3IIEAepupXqnKdzkH5/1FPveXsujq+ENUXwVVL01LSRiQN79U25L5XYPRhLL5/cXNz82/3Gtcohx8eQudkD7uCYgQBQaCrCJx756cyT6looVWktWE6/gbFCAJAgBI6Th9Vh2Yi9dKbiupVtxTVPA5g8cPa29IUpyS5N5B5ynfSX8ppV4/QCgcNdpWHjx49+tVdRTAmgYaE0FH1rH3LFkYfkxdLijE8CBRO3Txjr9sLfos96LUfHX+DQurDU3EDyAmJnK/BTC5SNy166uWni+q5N8S6XsOILo2m28TcGHtnT8xDxMUhYfhR3GOX/eSaISH0uBWx7MYRmsmtFim5INA9BC75uQUV+vsUJK600RyOVtzHR/g8jc5kPJPEaTgiPpWlVB6oe45X1MtuKeGwHh/D7nDQw+V8Q2KjSZS9v7qV3i1h3GP/tSd4q3vsdieA8ZVK5eu2nZ043e11hOO7ISH0ODPVNiWdR3kWBASBPSBQqoQLoaXmMKfVNBbOkzZZ/N7Ur1iOBwLkcBI5edrFVrQp6GRfwpD6XcdKWiK/ccHXbkFVKq/TcVx+SMTxTdqhCk/SWpN5wiJxW/W9twtXt0Mz3D9dvvzM5/cW0+iHHh5C5/shc+ij/0ZJCYYOAaxhn0PDPduKtUnzvuxCH7p662aGDP9SUCahZjFaQ9X9C4VQHZ4N1ekDZXXmcFndMBeoLFa0B1T538a0PPdcS/OJwAkGT9wmPOz9FsefP4yzz6GkdrLNkBB69S2TOfTJfhul9D1BoBJ5+yKnkFNe8+lFNvZlH19YBC9m9BHQsjO+yKskUOpnp3a3LCTxQibU55cfnvfVs/aH6qZ9njoyG4DYA718IoJETqk8PSyOTmEDMJrME+yc9J+wRhhmIrbhd7e3RzJdFLWEeP+0IYMT+jAkhK5fQayJ0+/fhFaFFFsQ6A0CWC90MEpLTYmkqL97E9pDAuWi2Y4b34Sz3A4hAnGLGWeMNcYhcJBs5OLOtR3fzYRhDgQ+i8Vt09lALYKwD0ESPzrnq2NzJTzbIPdID7frEZrq0DpjdBGPbdk1oR5W4E0rmSQsQPAJK/0Mj5CU6ZfR1Ez9Ke4o1Ibraz52f4PV7Va5XP57bFt7bPexjE/IISH0GFC+k+MDrZREEBgOBDKOc9TjRPk2hhI6Z7wozYkZPAKGTU2tsWEkT1IeZQeMHxyQp6XuHIbIs04YTmfDcF8hrMzn1ObR+XJxLufjSNxIzecDtQ+EntXqfetz59QAx0/aWJmM7t4Z+zAIHdtxqS8uzgQcUvyOfMXrM5A/K7SZu7qpv1Jcjd7gVPfU6q6hc0CCqIdnx8DzPNf31R/s2zc3cWefN4NsqAi9xZqdZvkWO0FAEOgAATbBUBGHQ1kMNTQPVAHhl4JAzdqQ8Zp7EdsuI7AFZ1YW+IqUxYVqvHcgBZMes2ipZ7FwLZ8J1LTrQ+rG0HlOQdL21IHpQC3lK9ZMDroAnTCXw8F5eTecJvmTAhGDVhBTruptJ6eSGJkOTVqi9jw/NHb0BeJELtDjQ/4MV9fyniDc2m2IJZjVeHmT7DME5mQ2eqganZbJDOysRK+yYZwAbsnzBmycrIa8edAv/xnEkUzGRD1x1+EhdL7MdkPdT1xlSIEFgW4j8G+WIyvwNw60WhBn0mMDvVbBEG3G2Mi1EwSMJG381ogOFkZOJaUaQ9KjPT+UsDNQvcH5bRI3STyL5xyGwmezvipgC9kctLTNZjwQuIJil1DNuB4kbk8PpWsiRNSMHcPkHAA3tOiAknWDynQ10fJR/8VXk5/Y3QSr2iYLhVh1eG0HOTwWxOOy0cH41VFsjade8jhurkhPmy2EbuKExyjlPzkHX9UO9wS8yXB7FdQhIfTqixC2GRdMvwnyLAgIAtsi8OE7lBv+Q3g0bva38YqWdxMnT4JW4CnVMG8TbNydNCGlWEkTHFECTCRjYsv7WBaO7ePhcEjWWISWtXyVgXvWxT3gzdoga3Sc+JnNVtQMpW3Mc8/iM4VPBmzv2rzCL0neAYsiPIerYz7loXmUnOvoB4n72BYW8EBp1/gj5TO8oVRTDuPOcCRXM8cd38exxW78jsvKvenJjkrdV/1OE3X9sSHumjXKpU0y/yZjcLASmYtTrHtkUFDG3y8tLX4tjkS+h4TQpSIEAUGgFwisfOJrjirs259cwNQsHbahJbT2RTDDNOZaY+Jo5nP87MgZpAlKzSQJEh8/MbGii0MpGs8cbuY91owpDGvr7V15TC2TcAuYx3ZwJkgBknTB8SBtx4TNVeU524P/AH6UysN9ClI2SdVQE9OsGZ0BPoG+WCnwVEmpW6VK1jintVDNbxLESA8xNyLOWoK1Gx3eEDCv5r5FxBqfRETNvW2xbUxvizMsGtJN5b+e7zgkOh4w4Z8ijIGyWZQTZSeEPlHVLYWdNASmD+fd1dVoSUXtpxh9kPkmDsmeotg5AU0kCY6cwaHuDDhhCsPbHOKmxFxwfDU/hYNJMj6GuctqBnPX+Rw282dwDjjg4UiwHiYHwTsgenYGSOg8hjZDiRrGdBSwTkzDaZ4JbbLDVIO6yncWJ7lbGBKeyXcLLzXrBnKs2pL7KN1rU004yZtgSJSNUj07Nc3zEaff3K2WeBdutkuhqkzmKla4f7QLSY1NFELoY1OVUhBBYCsClafXpvzpHKhpu+axHm6tHKpFrIxu1ZjXfY7uHQnJhZRLAp/PBerwTEUdnS2rg1B5ughVp0tYaKal6ARktVtzUyXD6qUBjEqThV8NHlo8cEi5lTH1ERMt5fsODAtKUyVmHTus9CMfNGlrD/zSJG6uJj3toL/qeYsF4vozndP+G13rsdTu2nqo+Wx6k81mValY/NixY8eeauphQi2F0Ce04qXYk4HA9NFTi+vX1rPbcEUNCDb060GowOmQUMdPSI8lS2hHwzau43Nldcehkjq9tKnmMY/NFeQcSufcsFaFC1SSZF27r93UYOveTSLuFsKxJs60W+fcGPtkMhwFSBOzIeVm0nmj385TrIOTClMta0ttc/WATe8QW4RFcX+FPDfXltQ01PhbCqGPfx1LCScYAa9SOhLZEVZRpRrUFpgEYLM17G8qTI3XcnctlWMo/CR0lN97dEXddXhdS+eEgW5cVGb0lreApufWyS1ZRlGLSZQkS2NI19hve92G+XVamtS3xtBsJToX5KWj2xpybzadlo2r20vl8lrGdSf+MJY04kLoaUTkWRAYIwRwYuphUHmTc9ZaF/J6xVf7p1wI9Z11AlrHNDwunPN+zqGievXpa+qG2ZLCQISWxIcnh8hJG7hJeM2k52ZlSO7lTrszGZJz3IHYmmizzoMhc3NNx9nPZz1/HgT/DKUyj/Yz3VFISwh9FGpJ8igI7BIB6O2ah3QOOquOcbaJh817Gevn1iuBmsMeq85CtYl0wM4cQj+9VFJvvv2S2g8lLD5HK4DIViobbEaTHai0tBqTOfKM1XfpYep4Rr2xNGkJn4WN/aGMuGdajSFgV+0w2DbmW1KGHaLYpEPFeTKu5urUAxgrXOthTVrJcqY7ISbJuIPBTNfDw+7j+/fvX01ELrdAQAhdXgNBYIwRKFbCJa3BBFrgOjU+h909Kjchndcb0U7DD5s/rEKP7r9pvXxoLor80MEWtGHL4db8WE1IlXyWJEATKqlsxdilSb+BvjUxMrLG2tXxoMrZ/YtdTHeOgPHDxZLQ9s/bhEmnRaeUF6yc39pJ0GVJeEzcxrFXC4y96LUc0QGqaAOE/ePYk3wnERBCT6Ih94LAmCGARvKQpaiIpHNCZ+u5jmF3DxunuUVrlA0HJ2ay3vVD08WPgQcq6Nds4Y3hKV8dbKvFAfXNDs/ZIo2zQNxHlzLGii7Nu2px+nq/PTbSJ+mcUcVhzHtkKwf79gIsPHAyTuR7noWV5yZIKmWtAGaLnd5PnwiRPkCISmUQ/xxq7E5sB7Sgj5ZxoP9gXcvn8/+4JUKxEAld3gFBYJwRgAbQJW6axhZpbaprq7YvMtpNKphZx570RRyanWhztw83hK4gHbVZth5dDbI/7LrKw2fizSYQwD5GxWujqdY0XpIpL7lTvtGXecLOMVUqKeVlp/EF5Tm0aGm2xmfUyLYKgmH1CJ2E28Mw/F0shMv76I3Byqp4fibr4eUUswUBeb23QCIWgsD4IBBEkHB2KZReL3lqXxZDpekx1hGCh8PHFWWvv/F5v/l1pZa3ssoIlWUSs3pxZWXODkPwubPgswfAHqmlpjZKJfQixKQRqI/xpF16/cx9EGIEAUGgZwg88KHIwfJ2EHpdxo6nJdsnyR/nJmSgEiR1M1TbPtTw+YjbfzV7YPlnKJSKGTEEHN8vgsSvcb49AqFDWmf3NGMVCvMjVpS+ZHdghI5FHwNLuy/ISiKCwIARWD+vppXt5GPFo42Z6UTo5uK4Fax2H2WxllPRmI8+fNzF1IOYkUNgfX19A2S+kh4lglaZgyNXmD5keGCkGvrBeGmu6ENlSRKCwE4Q+Mra5jSWLU3z6NRmP/R2pE4pfYWL43AU9sgOp0FEd1zn2Ezev20n2Inf4UDgxIkTG9h3vpZUdkNp3QqCI8ORw+HKRbPfeV9yiMPp/b4kJIkIAhOKwFToTYGJC2bEvRkptyP1Ish8DceqjqrhMC1WuuddZX/ryeUn8qNajknNN8i7goVwa41b8/ThMfsnFZPtyj0wQufPbLuMiZsgIAjsDYHrgVOALFMbcucPjj/49A+vHamvQNMMGtW9ZWaAoSNMHWAb9JtP5I8/b4DZkKR3iQDevWsMat5b6qxx3YwMuTfBc2CEjom5waXdBAixEgTGDYHAzk2HUTTLRXGmMWQZeZ981nawaEbs9LcBKX1zlIfduTratpdsx/rRO/9DtI/lFTM6CEBKv+z7GCVKvKBlzzs+OiXoX04HRqqWDS3TYgQBQaBnCISlypxlQUqHdK3nHRMpNSN1OifazJpvLo67jsVxoyyl8/QVJ2O/fDETvFYtx5rHagWUm6FGAERxSRN6NZd8lzHoLhJ6k1obGKFH2FHTJD9iJQgIAl1CwHfDKeVyI3l1uBwNYVIy75TUuW1tFSewVUZ4uXuEhYEggmnXtt7z0uy6LJDr0jvWj2hcy7oQwCTTwva1fcvLy8IhSVBwP0BAGuonlS15FAQEgb0iYPv+rLLqOrQ1ge+S1MuQ0lex4j3ZIdhr/vodHjtrOPR+t53N/diLf4FTEWJGAQGcqnYZvTGPkjlNiHcRXdTCgw8+KLoFUhU4MEKHsn5h9FRlyKMg0E0EbCez2DS+XZA6m9JrkNI5/D7KpE4myDjOm62o8jr1AM6JFzP0CFQqlat457x6RvUUUgHa42Q9RB0UfTcwQo/CQNTOpipDHgWBbiJgR/Y+7kFPGxKymVM35MwrGwPzbMJQKKoKRlpr3CpVaKc9Gc8jcEW7w21sc5mM+5MvfP7aLSOQ5YnP4tLS0jOU0A0QesNFpAogemhBFJNEYGCEjsU6IqEna0LuBYGuIxCC0FtvNzNDmEl+Tt6ns8PF4tdLPvoIreNMhxnGZxwRhm1s9pm8mn7o3HIkw7bDWEmJPK2srFyGPoFK3YoSuipMTU3JtEkdFH03MEKXfeipmpBHQaCLCCxjJXdoW4t6tnGbeDWpp4bgW0rqcNj0Q/3Zjvi3SW54nNAnwcEt3zk14790eDIlOWmGwKFDh4o4WnXF4gZ0GL3bwrIKm+Wg+ZRSs0gmxG5ghG5B18OEYCzFFAT6jsD/e+QRB4L0PpsSehv2Nc7myswm703maYfdX+qa3sJmbEfzyqF3SOnzdmj98JlfjoQYhrsaI6yEO28IgyNFLjTLWGFlYbiz3f/cGYz6n7KkKAgIAj1D4Moz5xy0e/M8CL0ZOacT7lRSZ2Rr0BxXRqs66o0HV72DFl4945XekMZDnocHAbybWPZgX6gt5sDKRpyTrnw/khPXUtU06r/JVHHkURAQBIjA3LSCoofoAI9KI6GbhW3boWOI31zpl/dsJIwdrxWI/peL/kifwoZixAbHPhYc993P/bkrNxgruQ4fAmEQfb1BnztGnhxHiXKZVFUJoacAkUdBYBwQWL98zUWbh6FkMDoMiZik3o7YKanrjw7V+GVInZGtQ7qtYD595A1GGpyMc7qQm33NyJdljAsQWNFl6BColRAqjXm/H/Pptdey5jjBN3WEJhgEKbogMG4I2JvlLJq8mZqWOBSQLZ/+dNAEpkm9FrYaRwWT6as4ha2DqIYaWi6wQhcGh9iotz1/OZJtUENaW3ZiDp1ZhKY4FUE//2NQKzCkWR5ItoTQBwK7JCoI9BYBZ96awcyjY7S+plNrJ6nTf5rUTRwkccpH18qh8rhCacRZPcJIAxZZnbOmS/eYMsp1uBDAu5iYQ48J3QqjQ3colRuunA42N0Log8VfUhcEeoJAEM7uw1qipr9v8q/+dEDEaVI3YRkxF8atQsF7B9H0pIzdipRb+9DBKWQt97XdilPi6S4Ctm1fwwEtoTmNgBI6Pke+9KUvFbqb0mjH1vQHP9pFktwLAoJAJqu3YuH3recaWwKyE0k9Sdy85zTmCtTBBmMwlU5Gx3DGS0/+y2uyFarl2zI4BxD6hud7mxZPCoLRhB4FhwuFgkjoiWoRQk+AIbeCwLggYNlaj3u1+WteKjaN+oOvuJls7o+2WlIH6SX9sfEo4pz09RE/tIXlo4ZcaK88eejYwgk+ixkuBDwQOvqmqyB2nTEuisN5ILPFYlEIPVFVQugJMORWEBgXBLzI36c1a3VC1iw0/SXZuhUQKVLH0iS1AkUz1VXHrUINvz0Y3c6ofbOqcmr4Mzt5ObRWVjbxjq7YUO+nDRczWraL/egyopJ4HYTQE2DIrSAwLghgFTpXbMcc3SGpk8/bcbr2kyB1Pm9odbAjfmgL5w9sO+NH1kkUScyQIbAZRUW8natG/Suzx5c7k8nIXvREXQmhJ8CQW0FgXBDA7mocXBHTc/xtntqUEJ7jXkA7f/Xh9wBb2K5jxft2B8G0iW0onKGOGqv2o+NDkRnJRAMCJ06c2MDE+ZqdmESK32tHCD2BlBB6Agy5FQTGBoHIX0pLM3pYvU0BOyV/7c9I6nhYx7GqJcynd9QZaJOHgTmD0LEvYL+ckz6wGtguYQ86A1bMHHrs0YLWwrIQegI1IfQEGHIrCIwNAqG1FCttrZcoSdbmvu5av4vJOpbU2/uLJXVItuo65tLbLKqvJzKMdyB0R0G73uHH3WHM3iTnCYsyqev1GjGodxrx7gXW4UnGJV12IfQ0IvIsCIwBApEVziZVZZoisTGsN4jGduu1RuT0v9W5ZkM3roBnQ7KG1e7lET8r3XWs+XNLN4PXxQwbAlAkczXw/Vq2+B47ri0Seg2RdBc+4SC3goAgMJoIPPChyAHJTltc6NXCaGKHW1uyZnh42s6f9oIIqdqdJ7G180v/w2io9E5FVmF987IQ+jBWkG1drFS8es7wokWhSOh1QITQk1jIvSAwFgh8+TGVA6MXqKd8O0NSp2lHwNodX+38MbkVSOk8jW1UDbdCLUwlVl6NakHGMN/ooF4IoxAievVNxGsWRcH+6EMfkg5Ytb5lyH0MX3wp0mQjUJpbzUOjVg7Hp5qmryUgOyb1bVidcZWx4n0Nc+nbeGuZl0E7MP+WCkYx64OGri/pB5nMJSRUMe9sdcFG/tJ994n612oNCKH35VWURASB/iFgRXPTVhhOaYLCVzuGMg1kW3/VImznj7L5qErpHGHAyqtCYT5xTmf/qk1SaoNAuOldRRXVJHS+azB5TC/JKXkxFnotS/VWLoKAIDAOCFhra9M4WjJPgiL5ctHadiTMMsfkH/vfDgMdD75MJyDtl+5lbF/jArlWftJhhuaZhB5FC7MrjqxyH5pKqWckiioXMOxek9Cprhem4Nu2aIurwiQSehUIuQgC44LAasWZCsMIZ3zHLR5JthNSZ/k1sbcBQsdX9dvMK6fQ13AKWzBic+kR8MLuqOnNBVvmZJtV7IDtgiC4hDUOpXo2oHg4ivJBsThft5vsOyH0ya5/Kf0YIuA5VgEt3VRyTVyN1DsQmzshdcIWx9kEQDgUseR9fdTm0imhKytfrEzPNCmVWA0YgePHj5fQMV012UB14TUPC57nyZB7FRQhdPN2yFUQGBMEXMcugJiyOGSyoUQkYP7gKa23M4bU2/mkezo62jHl65DSeXjL6Bit6c4t+iVR/zqElYb3li/TRUjpOncccnczWTcI1L4hzO5AsiSEPhDYJVFBoHcI2H5lxslkWw4b74TUmctOST1J7AxT9AO14XEYu3dl7XbMNlgjb1vP7na8El93EEAH8Zn6+xSqXDYHDcfUiiiGCAihy3sgCIwZAtCeNYft1BbGI1uWbEekDkJux8nGvd7YKsyhQ0ov4WjVUZpLh/SXzbj3tAROHAaKAGT0C2aEiW839yPgszjQTA1R4kLoQ1QZkhVBoDsI8OhUQ7GtY+yY1KtRtIvRuNdIHRablNIxn16za52d4XBBnjG08ewDyxdlHn04aqQhF5DQsTDOvGnoNELvAQ5sWcTiuLplQ4jJehBCn6z6ltJOAgKWPZ9o87YtMRsADDO3pX8dH5rMdq0m3fWn6hc72NQK1MFuM1iwbf767RhxNMG2nnVLbuH2fqct6XWAQBheSPrCojiuCTnw2GOPZZL2k3ovhD6pNS/lHl8EwmgB49zgpfYETBBiAgapt+kF0B896yvv2xgT3QaOVt0ckbl0Ejq07C26rvVKtYzDVMUMFQJOFJ1PHqEa4j1HZ3H/wYMHc0OV0QFlRl7YAQEvyQoCvUEgslzbmjVxk1Q70UxOkjYfE7bZVZM5vvS1mYeqnYmLaWspHYpmRkNKB6Hj37HUm87Nq0PbFFGcBoBAJQyv+b5Xe/8ooWP8Z7FcLmNXhxghdHkHBIExQuC+ZQUhJsI2nsYta5380DUJowfQiaTOjoIh7Xbw0d86JHTuTa+1xO0CDdA95Lys49yZL5dfP8BsSNJNEHBddyMIwiKWtmtXveAyiA5sbGzkm3ifOKtOfucTB4oUWBAYVQQ+uqicSoAh96pezFo5wKrdlNQZrx5SJ1tvY+jMdAOI5zxadTS2pXP9tIXF7u73vuznNo9tUzxx6jMC+Xx+A6/Sihl2jzDkjvfwoONMyQEtqAsh9D6/kJKcINBLBA59VbmhZYHQm6fSyQ+eJEwpvZ2kzhS03+ZJbbFdx4r3CveyMdCwGxCF41h3RfncG2QufXgqq1JxNzHMvlKT0MHuGE0pZFRZ1L+imjr5fQ9PbUpOBAFBYFsEAhsCccQ59MYh91ogkGknJEw/bBy4Ar6doZd2vujuYSh7lepgR2AyPdI9IhxBa1vveEFm8652GIh7fxDIZLwiOpqryfeSr5+VzYpyGVSBEHp/3kNJRRDoCwJT9ldd2472bUewmoC385DIKb11JKmzVaXfRNj0LXcK89CWyogomqmueH9OLp979/P+fSSEka7QATxfu3atiDUijYSO98pxHKkf1IcQ+gBeSklSEOgVAtP2FDSXqnkuKW9HsJ0Se7t4TFlMfLw2M7Qmma9BSh8Ng/PXotDOOPYbc5nwrWeWH5WV1AOuuJMnT5ZB6LU59Dg7FnZSRLIjAWAIoQ/4BZXkBYFuIhBk98+DOKFko712NkPUrQjY5Iv+OMTZaWNB/61FdQy7Y3Gcx/3eJoFhvurRhGgu46iH5gqnXzrMWZ2EvGG0KMJnRa+0TBQ49LwjiceJve30NzqxAEnBBYFRQsC1V6Elrk6VvOVT3WZrabT7dh6qQRgvG4wOvMb+Wngsaykd+9K3ZmUobbg1CmU/XXDUT3zDLxVPDWUmJyhTkW1fC7HA0rxefMdD2z44QRC0LKoQektoxEEQGD0EAis7jSHJht+1JnU0eqYBbFYquhnyb+Zu7Ejq+mMstrnq9JokSiJfw750n1uOtgk/NE7IMDBVluvcH9nuD9z1vmsLQ5O3CcyIo5wLHpW4V98eqnG3AiUSOt6Fhh/+BL4bUmRBYKwQcAOfJ08150nYNneIIdBu9LOdp2rknZK6lugZXyJO3pagPm7Dh3VVQUicgyH+5sr8KHIzjvPdC8HsW+5bjtwhzu1YZw1qeS+FfvLEH3YRg0PpjuxYg9CicELoLYARa0FgFBEIM7kFkG2CPuul0LyKr6aOVW/aD+6380OvdO/kUJeaX96kzGrFv+SH0eUW2U35HvwjV73jJLbDtmW/u5IvvWjwOZrMHHiedzmIQq/xLbengMbEL1oUQp/M34SUekwRKJUr2LJmg3C3oWQ4beMaI0M/bT3Rz7YpNaCsNdWZON2MKnrR/wjD4EM4/7I2fNoQYAgfAk4TONGZvOv+2It+KZJ520HUketexBteNq+SVj9oqdyFCxdwbPBkGyH0ya5/Kf2YIRBEzgzGsTVht6JaNoQka31tUX7TWJprC286DiOpt/PLOPQQvO1AuUx41Yrs/xoGmfeHQfg0TjhrlcRw2XN0l2vkXOcVmbD8HQ98KILQLqafCFQ2Ny9jqXslfoM5E6JTz/u+P/FrG4TQ+/kmSlqCQI8RsMOAQ+61VFqROj0Yb3XftWD6Rtvjy5B/o2vj005I3bIchVXKf1PK5D99raT+Cadl/UkcW6ucNKY16Cd9Znqk8o6beef5JytnBp2fSUt/dnb2CrQNgtBjEy9vCAtQLjPx6l+F0M1bIVdBYAwQCKlUpjqgTnqMP61pXZM6SbtF2Wv22/gxQfXwOyKshTEODVe6ByXHsf/bpWVr/dFlq2IF3u+AJC8mOyINQYbwgavesZ7vdse2v/fVD31RzuLuYx195jOfWYdQvlHrkWqdC3au6Hk4ZXCyjRD6ZNe/lH7MEMi41pyWlknADcxKIm2wqJXc2JprzaF6Q3vthq/GONM+Y3+t4tG+HRcHwYV/N533/8KEXp/P/y0GTv9HWlmIcR/KKwgdw762Y9kPlI4cE13vfayk+++/38eBLBfMu4hlDehc2VmvWBRC72M9SFKCgCDQSwSwIde1rXmyryFVXs2HSRv7dDZ04wjHVu7JsNv50f4QmRmCb0gH9nApgdL/2+d/cu6KcXvkXRa3Ff9XS0WXRmYbGzIf4eQ45PeYyrnfc/NDkUjppkL7cIUkeqH+HkYqm81arpsVQu8D9pKEICAI9AGBc+9XLtaLTxkVbLrBw5eRZOIGsDNJvd5YNmY8HWeja/2J/synZmth63bgPeNEmY/U7Ko31yz309ha/JE4r61ST4ca/DO1yNmW+/ojN6h7B5+byckBpjzOJ9Wo2I6tUBfUwTDRRobcJ7r6pfDjhEDpmUuQEkN84mW/LJuhxlbXdPk1oVY9mzBb/FQtWrkb/2ZO3TQyGKGGU3R1xi3WpHPj97P/ytrAIPYHwii6qr0Zh2G/RpDSXXXUVsG3y4r3/lUWpjuw5iKRHobdM1lnAUSftE14mIxb81ubjNJKKQWBMUbAU/k8dlThYJY6obO4uoXDl2kA4xYvltSbtX60a/S7FTQdDl/G31YfsU0cV1UHvA7UyqdS6+uXPh74wZ9w290oGXK6bYevvPSEqB/tV73hDa/NoTNNnIrHl5FHqE70NsLR+uX0622RdASBEURg2s1MI9vUmLXFGC5NX9EK1qT4dCBD1ibMFndY0M34S7snn7W0vk1a9PvI8tFNy7U+iLn0a7E0n4xheO/1uemue1M5rMhpbP2rpovx2xcnGGJlXOhHBy9dupTvXxaGLyUh9OGrE8mRILArBLwI6i8tK2c0baQj0cSMLxKwJmJ40HbbEK0h69hfOsb4Wce1nYdqMHrBYrlwHbOdzWNSqrji/i8/CP8qVjTTQaStIuqnPbewYWQkk3HeIMPufQI+CK5ieB0j73F6JHTI6QegXEYIvU9VIMkIAoJADxGwA78AhRs5tHMtU2H7p9vABFfGt7uX1JmYjjcRZ9MMxO7+8RsXa0pB0v4+uWytBpb6bUi9K6M08k4p3bGsF/3TPxePpsskz91HAAS+EgQB3qNYJtVD7ipa2tjYEELvPtwSoyAgCPQbgQ0V5EMV5drxKvNlCNj4ja/dIXUjNW0pvx4aiMrqSYVz1lqbius8jMM3/nKU5tLZhYL22oMLTuEFrUsmLt1CANriNtBxXbWrKoPZocL6kQPYj17oVhqjGI8MuY9irUmeBYEmCBQrNs5CV2jQWo5oN4TSJG4YHS6G1Bs8JR40H8NTIkjCNb41bk1JHayHhvf6R5etbQn9kz9irarA/wBG5ldGZi6dK+McK5d1K8/bAopYdB0Bz8sU8a6vJAkdWvtmsVZDCL3raEuEgoAg0HcEHNsq2LbjxgvQOkueBKyJuupdP4OyW8vqjf6bpdKa1CMVWvaFZmHSdsV87n9CAvvYSM2lQ1oMInX6zPKjE3+MZ7o+u/1cLF4ponuIDp9Z1M4TcywbQ/Fc6T6xRiT0ia16Kfi4IZC1w4KdyaJhQ+O2g1+2JmB8Gak6JnVK4oaatyKV7ARsdWXY6icRRRR4ygrDp5r5T9tRSi9HwQejKFwdqZPYoDluRd0xky6PPHcXgePHj29ijuM6OrENEeOAlkMNFhP2sIOf/YQhI8UVBEYMgamMvYA5RAxrI+PQr8G2rrG5a10g+tOfRIDYLmGRCm5IvbWPOEDcUYAvKHF3XfWlVDQtH0t+9iOBH32k1tNo6XNIHCCeg2AO3TTNA3LE9BiBCjTDrSd7rnodg20LofcYeIleEBAE+oBAEFmzmlwhoePAcaSIp3Zsm8oXvRtJnU76eZtItN9tkonDx3Hi3oMGli+kkmz5+Mh7rRWsdPoAtuGNxFw61mUBdutALhJCb1mpXXLA8HroWJxDb5RJ0Zc93KUkRjKaRjRGsgiSaUFAECACthVNx0riDI2SkOOBc9p0anToRIA4toRFKiLtgq/WPkjoUBcD7V6VzctfSQXf9nEtXP1YGIR/He9O2i6FbaPpjyOHRhw7F7r+bH8SnOxUsG3tWhQFjSCEoUjojYjIkyAgCIwcAtCxEUXQZc2M84sf8l/1w9XAO6FDHSwRII7GdA8Qb8por/hKBGnwYeHYVIT+h6/+7Ym1Boc2D4+8d3FFhcEHUZ6RmEvn2oXQsubaFEucu4BAEEVXKhW/YUQJp/Yd6ULUIxuFSOgjW3WScUGgjsAD3/ZhjD4G+6glTi+K45B7ldh5lKk2uLYi3HpM9Tv6ZVATJn2t+4zvtHvCf6O7A+HV/5T66PZb1hrDxE/XMtmPhEHw0YaWu5nHYbAD5p6nhND7UBeu617yAx/DIubN1DrdRULvA/aShCAgCPQQgcfOPOBgDh2LsZKiOZRtgNipOI4fLJeLCbre/rXNUZqk46BtJHXEmkyCe8mxWr3oVdQjbRNs4uEz77GuQ8fnb2Ib20jMpaOssm2tST122wqj7Rex0BLa4qpvG95xdEBn8J5M7Nn0QyGhswniR4wgIAjsDoGVua85jrJmNHMnosAireqT1qSFe5DxLiR1tpkmpvQ1kZy+pVSf9K9sDLcHlWeUHT2W9tvps+c7fwVFMx+HftVOg4i/MUdgaiqHM9Gtkn7fdFn1XvQsDmjZN+ZFb1m8oSD06u+fvSvh9ZZVJQ6CQGsEpr28WwkjDPVyz1psNHHjx0Uq16I5rPV99dH87oz/7a6aRvFlGk/9zM5BjeYbQ+u46Z/WDBSpf8wcnH+60VfnTx//CWvNw770UdAeh8UMXuclE5+7RQCS+FWcyeKZd5LvNuzyWCw3scplhoLQWaEcEgygiHq3lSvhBIFJRuDCM/sdnFK2T+9WSwGhdW+QxKv28Y+M+9RjxjX2qWBbHo2/rVdjsyUIuByUHwVcivzHj/+IVd7qo3Obynr2z6A69mG9wb7zYH33aTnRSt8TncAEcbLaVcdWeKfi948cgrctXw6CiZ1HHw5CR32wbUnvKZzAd1SKLAjsCoGgsOaA6GapVcbQq7nqZo5z6YiZEjXn0uM/zqvzh0f7zoz2hy8jFfE5/miXLZHo7WqB/0xk23+8xXGHFjyJzQr830L3/8pw6njXGESu61zfYdHE+y4QuHLlynW8fJu1oHjB8Z+PPO9gzW7CboaD0NnSwFj1tii2kG9BQBDoCIETvp3JgdANbW+laFA5SJ0fHiKtiVbTuuZzrXCrOSVvTT4m8Dqp00dstzWGCPPnGCb/iy+r/Ne2xrRzm1KU+6swsP5EGRXeO4+iZyFYeuyZDyzPLfYsEYm4hsCZM2cqvs/REPPeUVOfnbEcR4bcaygN4IZ8rj82dS2JEQQEgZ0ikJ0uL7o4nEX/kKrEbZq5ely0qdua7WzYwq6nvPRe9bpzPViLOx1bwj9vKfEbK733PAqedp3yr6tldNe7YDiX7pc2fhGnoFyw7CFjdWotw95oX5V3tNe+C7BMbBSZjPNlM1oUYsw9k83Zpc3KiUkFZCgkdN0woAbQux2K/EzqyyDlHl0ELHtWHxvJH5DNle3oGrN3bH5bhmRZQn2Pxo9zjjSU6knDbBBJ8qaBjF23/9bxJyOH9zqlO6riBx8Jruz/x+1j2Znr5v7pf0Je/++4IDsL20vfVCqDrYMXr173V3uZjsRdRwD63K/Wn/Duc8GIHU6sHoChIVA2Lo7tpvT4JatK7gUBQaAVAqWosgCG1lPiJLr4JiZX8naVu2vBzQp4+jUETF4mqdOYc6b1Q5svhkt3AhwcaxmF3pXIDt//+K/tbTFcOvlH3mV5gXJ+E5l9YpikdBI6ukUXP7c2LXPo6Urr0TOmkM7zXTYG5//g3Xfmsdq9bmkcJ+A6FISuoQf8YSQS+gS8c1LEHiBgu/YSidkQNxXKkNR51YSr06zfmSzQRkvo2olfVYJHRLshddO2hhwOhxRtq9lP6Ui7/LUxoz6HJTe/ZztUoB7nu8tJ7C46K3pKdbkDs7uMTEYoHJfasBWSG6VwbsvsI+oRLN6YPDMUhI42J250jKgwefUgJRYE9oSAE0b7wMAYbq9Gw98UeC7+bcVEr5+bcJ+ZS2fIBmmHQ/B6z1tnWTNR226GvfOvOt7m+7+ybJU6C70zX5TS1yvrvwvd3edxgtvOAvfCN8ANfYxvBNEXexG9xNkCAV9dTr6zIY6wxau/dOPlG/MtQoy19RD8EmJ8OdJnW7YoZBjr100K1ysEHNuZ0nFXWdVI67xqIqcjfmR1GX5rTjBMCS+mRxC78zlJ+FtDNdrEal4jqNj2f8vN7P9so2t3n8Ivz/xz5If/V3xUbHfj3mlsGu9IFde96B92Glb87x6B0A4vYGS3HgH0wWJp9ez169eF0Ouo9Pmu2gihKWlsTfqcDUlOEBhVBEphNK/3nqEA/DmRxLWpETztQef4hWmS177ow3hkh7qqbEb/DOOFcjoMnvViuTjGbb/1nHYQ/JHnqP/y6LIFPdu9M4+8H3PpYfhBSMVfHvhcegz4WsnJdXUBYO/QG4+Yy+VoHQf3+EZK9yGhQ1PfInSa6EWi41HKzksxOAl9J93+zssjPgWBiUTACq39yYKzZ6yJHVcOQupFctV59XgcvkrY1Tn2ZFiG1K6IINkxYKO53c/WcjLQ9hh+xQ9Kv/jU8nTD3GZj/N17sovZL/qh/wHLhmhWy2z34t9RTGH45UdLqi/l3lG+xthzFJWL2Iu+Vpt2oWIlx94H9a/TY1zslkUbHKFP6CrEljUhDoLAXhCwrTkjpaSj4Ta2kGSOq14kh6s+tIVkTrtqAErjNORFfrjiXXcM8KCH47VriyH4eE94MVTBL33J2fd32msfvh7+GeiOi6Lf9z3/iUFrj/NC9bfYb+/3odiSRBWB3EKuiCUU153qWg8uisP0Ux6/BZHQ+/qWRIlTJPqasCQmCIwfAl4YYO9tTMgsXf0ufojJHPckczjigu26VM0Iwdb4BsEbw/BaGucYPf5jP5redeRJSZ3SEWR3nA0T/mpl0/s9kFpPh9pNHnllXyO7+Ykny2H0f5piJN37cw907CjylfeJ/qQnqRgE1kvrJdT7CsTy2Eq/wljnbtsTeeLa4CR0FQ6ZmifzishVEBg9BLKWtZCi8Voh9JlHhuGrV66G17dUzogbfU+Wh4m/4+Ba6k9a0Fo3mpTUcQ8yx2AbaD/8HRUEv/rVn1+4Fofs3/dHl+/3VZD9Xc8PPw+1n/1LuJoSOzRYbX85Ezmf63viE57g/Pn5ohXZ15yGY3UjlXfdxUmEZnCEji7tJAIuZRYEuo4AGNV1VBYnT8Vcm0pAa46DneZfXPVAOh4iKn/RQ+XxfLqeW0+F5aPmc3xpqZzhdCqU9B3l2jaOUgs+WC5F/+4LfZo3b5JF9YlnqSfCwP9tlAFD3jrHzbz1xI7CIRZmPf50cf3rPUlAIm2JwJFzR4qgkhUeOWQMp4fwEhwzz5N0raPQ71LLkHu/EZf0xhSBF74PJ0xFUS5AQ5Zp9otO8ZshePKeXuhGyZx+0MU2GuaaQWW0yDEMyRyHvFSQ7m/YFfvnnvh3hSebhemb3bdZwYYX/j42zH0Ri6L6lizH/HH4DOBzPv64WlzvX8KSEhHAu4jDeaPrW+rc9yfyxLU+vvlbXsD+j41tyYJYCAKjj8CVVYUVvXaee9JCzpGjSK30wehhMXign1jSpqROCb1q9Dx6HEf8Hdvz3sypW3ZW+VFwzY/8f4/ldj//hZ8rPGGCD/L6937+qVIQ/natLH3IDHHBVqmNjcj+SLcOoOlDtscqCWjzWeO7n6x3PwwnUkIfnHo8tARj9VZJYQSBASEQFngGtCpo/ek2ZszB2pxSbH52ISk9bvr0pBdv2RjiqhfO6TLEz9XbeIAd7oyX88UZK/pMxQt/JfKj/+9z/2H2kvY3DF840W3qV6Lf93z/bZmMeyc2svXeABcriJ5a89f6trK/94UarRQwSnTZ86CTjC9x1TiOO2/uJ+k6OELXjQobFzGCgCCwFwTyaxdzYFo/CMprFnRfsqccsG1r8vOqN3kgfHjhEB296bVxcCRpcwSeV2N4C2keultynudk/zwflf7zdaf0mUv/9uDQDTG/5Jr62keng18PiqWfBxDo1ySW7psCdfEKHfqYd8j++ed/crbh1K8uJiFRtUHAtt0Lvu/xla+P+oZhg16GNlGMjfPACB29quTOl7EBVAoiCPQTgfvue9j96h/87BusfSdyKuNuRGaiO5mJJDtX7WO+NoNkCfZOhMNvVD/pb0xWZnOFp8K73/7TN90z98Qj3zbXD/k3kZvObpchpd/+gn8dZBePrtmOnUHemxeus+ja+kKHwa64U1Am87aeptM2IxPsAYNGVzw/8nCNCR3vrR8GB6OnnipYN9xQnCRoBkbolj5ZbZBT+JNUzVLWcUTg+PEHCk9e+J0fhiT6kLr4+YMg4JoAHmk5nfNaXLBF5TEpvtHj8Sk7+tIkbuzNlehhrhiCf+Frn8l++Oc/OJRkzlyevusH3xiVrr+n8szaQY4q0K6XBovhsCbOv/+BB5Z/+cMfXu7b/vtelmnU4s5kMhf8oFzCe671t+u3NooKFzKZWZRFCL0fFRrvF002GP1IVdIQBMYDgVPPfschr1j8UQjk3wUeP6ISE8YNpEyCBq1x4LkqcGsAYoJP//7ShF7Hih0ECOmHNsvF18H2sbrL8NzdfPaht+C8uWVMINyOhVJ1FXg9zCIXFGIS/Z7PPPr03Ujmkz1MSqJugUA2m71cLJXL+kWHH/1uRyqXmZ4+gMeLLYKNpfXAROSkNDGWyEqhBIEeIXD6znfehjHFX3Rc9/uh0/VIPBueTiwWTrlOiIK7XgNMK/NJe9fPcZimTrBEh8CFwP+yFz7wy0OmVvMB55Y7f/B7XVv9HAp4O7IaF8SUtZdXImtlFm3XZUdnewBbASv2e0IAC+J4hCo1xmnDwSm88vkrly4d3VPEIxh4YIQ+glhJlgWBgSNw6tnf98qy578Pa9m/FQS71FqdA6VvEDlaNmzV1Z89Z54tZRie++qnPn16z3F1KYIXYtrhlrMHfhgLo34G++KRr6DvbRp4BHsL7G86cecPQlufmH4jcPjw4at40csg9WrSePdDlYNq46V+52XQ6fX95R90gSV9QWAUEbjvvmX31B3veJvyrV9SUXh/FIYzHFxsbdi4xUSuJfQuTSeDNBcdx35163T753Lri3989srS0X9l286PozG/EQpoTYvev0wQZXR0HMu+MxM6d/Q1YUlMI4C6D9DBXWmAw1IZx3FwvsFkGSH0yapvKe0IInDz8x+ae/L8U/8SUsfPouF6Nqarcs3InHPn8fx5XEjOmccSOp+3I/+dgBKi9fS+5cx9D6JDMThz8syDh6PV4k9Bgc4PgcUxtNqt8u2mTOg42da040TfspvQEmbvCGAJyflkLG4mw87dxI2YCKEn3wK5FwSGDIGb7nznnf7qxi9A9vzRSAWnwND4zTYnLzPkGF8pnbMwJPkuFoqdBhWe3bhUfkkXY91RVM86+wPPhuL6/2S71jtQvqFQ8UlUoEvvW06ffudE7n/eUQX2wHM2m3nGDM+wU5vNuKpc9mQOvQdYS5SCgCCwQwSWsb/8ptve9a1WqH4NJ6i8FayMxW+GpFtHFi+CMyTO+XMzh946zI5dIjUbbK6/AvkxbeiOo9htgDP3PPjNGdv9Zce2Xwc4MEfazd7KbnOFcMiGZaubVU4NrKOzh9yPfFDsNriQLATOAmSlyBx6EhS5FwQEgf4jcPo57zn2ga994CcDy/sFP/BfjIVeUGNJku6cP410ztx3cw49ji+0Qsf+ppvv/pG+SaMc4r/17IPv9kP3l6EQ7BvBn1OaRftfPS1SZGfLKSg78waud2jhSax7hIDtOA1D7jj+DkekO7OQ1ieqLiaqsD16lyRaQaBrCNx827te6FVW32O7uW/E3vKG4eSYpFsnlZw/j1e4U3qtS/XdG3pHvGF4W7R5/U4k8Jetc9Qdl7Nn331r+Wrwg9A9+xaU8ZjCsMWQGlSR/eLLly9iNEU9NaR5HMtshWF4Idnd5cmDWCTJOXSsN6FOpMkwQuiTUc9SyiFH4LbbfmipZHnfHyj/20DG2EsdQgLdmeHwOkmdVzRwuJLQYwk9jil+ju/39h1GYa7kVZDX3hH6uXPvzKx47jeXrfDdtuWcwxjFginT3nLfm9BQZkPsT3pW9AKkIITeG5ibxmqF4XnOeRiDXSBYQxrNr62tUXvchrEf92sdgXEvqZRPEBhSBG46/c6XlF3vP9lW+B7w8d0ghl0PJydJ3Qy1xyTYPTLXMGohPXzF6dM/0JNjKrmKfaXi/DS2g/1HNNTfQDIfriH25i+TZdkZdKXeBHiSAmNzz2LbNQQ2fX8Vndja0I1WfRyphYsXL+64Y9y1TA0gIpHQBwC6JCkIEIGzZx86vhmG3xWE5QecyDqNYUKca15rk3YJUp2469JsvDCue0PuzBpHAuzjpWDtNXj4zV1mdmswzD+fvnjhFTjF7PsxCfoNwAPqO/eKydZkemWj96Tb9n233/a/3aI+/5v/3Kt0JN5GBBZnZjbW1jfWoZNgjrxepfZpqIXNNvoc7yeR0Me7fqV0Q4hAvMDrB1+/6ZX+jyjy3w1R7i7oZAeZ18l4t9kmaVNKj+Oyqwvi8LSDBXU7SDuLw1pfiYNJutJonjnznptPX738U1bGfp+yHXQUIuriHjGDsQTbOhhkM0OhfGfEwNt1dm3bLkEnwTWcuKZNhEVxsJuzfAu/q8kxIqFPTl1LSQeMAOeENzdz50qXSt+HxVP3hZY6Aa1vXLTTAxOTel1KJ6l3Nxk9rKmsl/zNI18+iZh3LY2ee/lvzG9cfvSNfhR8F1S43onG+GCc2S5nuLvFbxkbTvF0kP/XnDnz4G89+uj/PnRnxrfM+Ag7lGEwZrSCtRYohcf5c2jvs3Kb3iZ2iEyOEUKfnLqWkg4QgVvuevCu62X/gcguvhZkfgqLynC0Y/cJi8I5F8aZxXGNJN799HD++sFsNnoZoN0xod938u35S4sz37h2+bG3YVLgJZCujqGTkNEDDD3Apl/VT+yVYz8vUMGtSPORfqU7yelAGi9iSeg1B2K6NqgCjlTl3NwIjvLsviaF0HePnYQUBNog8IBz83OWzkLV95siP3y5hXlytPXbHKjSJrodOBtijzsNZgh+BxF06tWK7Irvv/Gd537jt97/yLu8ToLd/OqHctmvRS+74Fivw8jo/Y4VnUAXZKqx89FJTMPqB0e12M6CF9qvQg6F0PtQTUeOHCk98ZWvXo+nm6oJ8oXK2txCODFGCH1iqloK2i8ESFiZr6u7vajyShVEbwCdnkDbsgiVqT1ds6IlQ724mpI4F8I1LibrBWHqkQDlP/fh4iP3INFPbofxbbd991KUnXmu9XX1rYFjfwMa3yOQquZA5tsFG003gO1a6vVnz/7Yr3z2s/9xYrZNDaqy8C6Fjz/++KqVqy/n0L+CyOqb8qNBlT2ZrhB6Eg25FwT2gMDrzi1PPR5cuT/4uveaSmi9BIpQjkBj1X499kdyDXtLXJRO6kPtJHMuijNp9kZK17FG9kLJL74BCTYldCx2W/RU+bUg8W/GHOc96GscxU752ZjHTf72APwQBtXrCyz7zKq/QlWwfzqEWRy7LGEEbM2MuLNw7CgWK6Ubxq6g2xRICH0bcMRJEOgEgXPnfmJ+rbj6os+XL35nZAXPtSLnMAhrThM4GY/M1Sfeqg+1x+n2clGcxoblw7B76HkvI3E/+uj7rmp7fN1w6w8fncqrV3mW92ZbZc6gu3EQoxSJfcF9AsVkqO9XZyZj6dXuf4akx72wfUd3S4K2uux5Qd2aiKOzWbcY/zsh9PGvYylhzxBYtm+/88rLVrzV78Li2udDIrgB55VMgbSQ4jC035TYuTjIANCjPGGRAFbs33G9fJ6LwD7xunPvnHqsZL/eda1vx1zy3dDadQTqWrNYhWwyMhFX4m479n0nz7z90Fce/e1GXeMTgUC/C+lc8DyMjUFBAlPmu+/YkQy597saJD1BYNQQuO05P3Q6jM5/T6jc19uRfTKMgur54D0izQ4ASs+hs1NBCb1He9B1jkxprTCaxZ70N95257vUFzz3XRnXeSlG/I9i6DkPCb6ae3PtoDBj4CXe1mffli0scn3BH41BkYa6CJZrXQ69sIKOFNW9wkTK99WR6OGHXev++ydCn7tI6HHNy7cg0BECN9/8UM6dUW8Ng+hfWMq9B9L4UtxwM/hgCSs5hx7rcmeejFTcpbzFY/qMWBscgKGv2DaksvmZ74gc55scpgH3swAABvRJREFU5d4GXKbj01W7lG41vdG64BBP286FFf9bkW8h9B5XHk5cuxR4fhHJaEKPO7jR9Mrdd2OLqLrW4+SHIvqerrodihJKJgSBLiFw210/cNIpRD8L3l4Gr30j9pInzlseDuKK+ZaSuSHyuPCpx90jUltkF0cRIWLHzar81JzKZvNYgOTerclcOw8HJrsv7N5DalKxw1fccOv3Hd17bBLDdgjMTU1dwptfwv6OmjfcZT3PO1izGPMbIfQxr2ApXncQOH3uwZeEgfPrELneAen3RjTU2B8zvIQVSyemYTPD7sxv9/LMTgNIXBWm5pXrFtCJsGETSZvS8Mpx5YB9tJDNvbbBWh66jkAQBFfwfpeVWeqOzidWs+RCx5mYeXT58XX9tZIIxwqBBz7knH7OD32Xqti/CgJ7Oc4oX4xJkVIwS9o9guwGbhSgSbRmdXtdoGY+mWFD8ntLzcIQey4/o3K5OfRxMlUs9hbnuIbGsLuLzzefOfNAfZP0uBZ2gOXav75+DR3ZinnDq298dm11QyT0AdaLJC0IDAcC0L1++gsPfy/2t/4bEORdlMpjyddkzzQd5nmYrr3LGwRxEPmMymSmoLXcETJvU+0h9A9gNv0FFevAs9p4Fee9IHDyZBkjRGvJKLC+JRf65YlR/yoSerL25V4QqCJw8r6352+p2O/BcOlPg7FOoUWm4BsbfeUwtpF6hwc25rHe6WCmmcfuGWxD01J5NlPggq/uRTzWMeGEdNs5hM1U9491MQdcOPxAI+D8dDIbrpOxXNudS9qN8738Ise5dqVsu0KAK9mzl6d/1LYy78EQ9Y16JXcDUe4q2gEE4j503fvoQtpcse2oLCTzbBbz5ULmO8QUawsi9aYHZNh9h7jtzLvrOs+YEBwXcbMZ5QXexCxIFEI3tS9XQUAjsGw7U8Hb7IzzECSqw9ySFlWlXCOicxVtPFc9fJCZOfR47jyW0GsjC3vIrgXNOdnctMpimN3gsIfoJi8o3iPLse/9lJq7a/IK378SB553uZYaBqc4ioRFrFj3MhlmsISuWxpIELx2S5CYjHqTUvYIgZvPXn4thu3ei9fxMJOIyavx5eSQdjdIshdFYH7j/Jk888pFcrtPjWEplWezIPPBthi7L8QQhMT0zbzjZN84BFkZ1yxYrus2DLlHOM4vgvpX/CZ4UPrYm8EplonCLBZ/ogsVtzRYW6MCLxxcfsa+qqWA7RC49ew7TmGjy7+2rBwWL0GioiSuX098VU8uq0mnemoaXyRQ6D3F27t99NprJ22Kjnj7uJi3KnE382jcmH8aDj3GpF6PO5bgY3ftqfoVE3/dH60dJ6fy+Xk95L6TVf11hTvJFCb33oIqMycMX4Upnfc9/vivXZpcJHpWcqhFsC7lcjn922UqmUxWeRWf+iK4w4BKZ8baDIxA0fz9Fyvw92FIRLcevqdsz3f/ZqzRlsINNQJB4BQcx/7TKAr+PM5oqBxwHgbdt+Zbc2GVMKnLvJmfZCiIttTetr0B4W/l2FQQpMR4XBc76NKdiMb4m+S6Flfcj270T8c4i42ZcGw3h06BE4Q7054JYb6MPKQzWcvDpN1YymO3cD2a8hoBnjQgelheJwi+ENr2f6c2BIIchVwn5/zzhQsXJmJsaWCEng/cD2xkVU1kcYsbVtabbthy0MN6l6gFgS0IbF6LvpLdF/5nK3SqXFh7Pbf4bbQoKdX2xOugPVc3Rtryqax8NR3kkCTS7YOBXGlHmxVojXG36yM05CSKfKuYsQPLynQcpiGCMXyIIs9yIKJ/6bPhRKghHUQVepb1hbBSeW+w4dvhtBtaG8ryiqXyoZtOjr10Pgi8JU1BQBAQBAQBQaBnCGC+3IqWI1tfcb+8vDwR0nnPAJWIBQFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBJoh8P8DjrSpvhWYjr0AAAAASUVORK5CYII=";
|
|
2231
2237
|
|
|
2232
|
-
|
|
2238
|
+
function GenericEmptyState(_a) {
|
|
2233
2239
|
var title = _a.title, image = _a.image, subTitle = _a.subTitle, isButtonAvailable = _a.isButtonAvailable, classname = _a.classname, styles = _a.styles, heightToDeduct = _a.heightToDeduct, imageType = _a.imageType, renderButton = _a.renderButton, imageClassName = _a.imageClassName, children = _a.children, SvgImage = _a.SvgImage, noImage = _a.noImage, _b = _a.layout, layout = _b === void 0 ? 'column' : _b, _c = _a.contentClassName, contentClassName = _c === void 0 ? '' : _c;
|
|
2234
2240
|
var isRowLayout = layout === 'row';
|
|
2235
|
-
return (jsxRuntime.jsxs("div", __assign({ className: "flex ".concat(isRowLayout ? 'dc__gap-32' : 'column dc__gap-20', " empty-state ").concat(classname
|
|
2236
|
-
}
|
|
2241
|
+
return (jsxRuntime.jsxs("div", __assign({ className: "flex ".concat(isRowLayout ? 'dc__gap-32' : 'column dc__gap-20', " empty-state ").concat(classname ? classname : ''), style: styles, "data-testid": "generic-empty-state" }, (heightToDeduct >= 0 && { style: __assign(__assign({}, styles), { height: "calc(100vh - ".concat(heightToDeduct, "px)") }) }), { children: [!SvgImage ? !noImage && jsxRuntime.jsx("img", { className: imageClassName ? imageClassName : '', src: image || AppNotDeployed, width: imageType === exports.ImageType.Medium ? '200' : '250', height: imageType === exports.ImageType.Medium ? '160' : '200', alt: "empty-state" }) : jsxRuntime.jsx(SvgImage, {}), jsxRuntime.jsxs("div", __assign({ className: "flex column dc__gap-10 dc__mxw-300 ".concat(isRowLayout ? 'dc__align-start' : '', " ").concat(contentClassName) }, { children: [jsxRuntime.jsx("h4", __assign({ className: "title fw-6 cn-9 mt-0 mb-0" }, { children: title })), subTitle && jsxRuntime.jsx("p", __assign({ className: "subtitle ".concat(isRowLayout ? 'subtitle--text-start' : '') }, { children: subTitle })), isButtonAvailable && renderButton(), children] }))] })));
|
|
2242
|
+
}
|
|
2237
2243
|
|
|
2238
|
-
|
|
2244
|
+
function ErrorScreenNotFound() {
|
|
2239
2245
|
var push = reactRouterDom.useHistory().push;
|
|
2240
2246
|
var redirectToHome = function () {
|
|
2241
2247
|
push('/app/list');
|
|
2242
2248
|
};
|
|
2243
|
-
var renderGenerateButton = function () {
|
|
2249
|
+
var renderGenerateButton = function () {
|
|
2250
|
+
return (jsxRuntime.jsx("button", __assign({ className: "flex cta h-32", onClick: redirectToHome, "data-testid": "empty-screen-take-me-home" }, { children: ERROR_EMPTY_SCREEN.TAKE_BACK_HOME })));
|
|
2251
|
+
};
|
|
2244
2252
|
return (jsxRuntime.jsx(GenericEmptyState, { image: notFound, title: ERROR_EMPTY_SCREEN.PAGE_NOT_FOUND, subTitle: ERROR_EMPTY_SCREEN.PAGE_NOT_EXIST, isButtonAvailable: true, renderButton: renderGenerateButton }));
|
|
2245
|
-
}
|
|
2253
|
+
}
|
|
2246
2254
|
|
|
2247
2255
|
var ErrorScreenManager = /** @class */ (function (_super) {
|
|
2248
2256
|
__extends$1(ErrorScreenManager, _super);
|
|
@@ -2256,7 +2264,7 @@ var ErrorScreenManager = /** @class */ (function (_super) {
|
|
|
2256
2264
|
case 401:
|
|
2257
2265
|
return 'Unauthorized';
|
|
2258
2266
|
case 403:
|
|
2259
|
-
return jsxRuntime.jsx(ErrorScreenNotAuthorized, { subtitle: this.props.subtitle });
|
|
2267
|
+
return (jsxRuntime.jsx(ErrorScreenNotAuthorized, { subtitle: this.props.subtitle }));
|
|
2260
2268
|
case 404:
|
|
2261
2269
|
return jsxRuntime.jsx(ErrorScreenNotFound, {});
|
|
2262
2270
|
case 500:
|
|
@@ -11166,16 +11174,16 @@ function _areEquals(a, b) {
|
|
|
11166
11174
|
}
|
|
11167
11175
|
|
|
11168
11176
|
var core = /*#__PURE__*/Object.freeze({
|
|
11169
|
-
|
|
11170
|
-
|
|
11171
|
-
|
|
11172
|
-
|
|
11173
|
-
|
|
11174
|
-
|
|
11175
|
-
|
|
11176
|
-
|
|
11177
|
-
|
|
11178
|
-
|
|
11177
|
+
__proto__: null,
|
|
11178
|
+
JsonPatchError: JsonPatchError,
|
|
11179
|
+
_areEquals: _areEquals,
|
|
11180
|
+
applyOperation: applyOperation,
|
|
11181
|
+
applyPatch: applyPatch,
|
|
11182
|
+
applyReducer: applyReducer,
|
|
11183
|
+
deepClone: deepClone,
|
|
11184
|
+
getValueByPointer: getValueByPointer,
|
|
11185
|
+
validate: validate,
|
|
11186
|
+
validator: validator$1
|
|
11179
11187
|
});
|
|
11180
11188
|
|
|
11181
11189
|
/*!
|
|
@@ -11351,11 +11359,11 @@ function compare(tree1, tree2, invertible) {
|
|
|
11351
11359
|
}
|
|
11352
11360
|
|
|
11353
11361
|
var duplex = /*#__PURE__*/Object.freeze({
|
|
11354
|
-
|
|
11355
|
-
|
|
11356
|
-
|
|
11357
|
-
|
|
11358
|
-
|
|
11362
|
+
__proto__: null,
|
|
11363
|
+
compare: compare,
|
|
11364
|
+
generate: generate,
|
|
11365
|
+
observe: observe,
|
|
11366
|
+
unobserve: unobserve
|
|
11359
11367
|
});
|
|
11360
11368
|
|
|
11361
11369
|
Object.assign({}, core, duplex, {
|
|
@@ -11430,7 +11438,7 @@ var stopPropagation = function (event) {
|
|
|
11430
11438
|
};
|
|
11431
11439
|
function useThrottledEffect(callback, delay, deps) {
|
|
11432
11440
|
if (deps === void 0) { deps = []; }
|
|
11433
|
-
//
|
|
11441
|
+
//function will be executed only once in a given time interval.
|
|
11434
11442
|
var lastRan = React.useRef(Date.now());
|
|
11435
11443
|
React.useEffect(function () {
|
|
11436
11444
|
var handler = setTimeout(function () {
|
|
@@ -11464,20 +11472,22 @@ function getRandomColor(email) {
|
|
|
11464
11472
|
return colors$1[sum % colors$1.length];
|
|
11465
11473
|
}
|
|
11466
11474
|
var getAlphabetIcon = function (str, rootClassName) {
|
|
11467
|
-
if (rootClassName === void 0) { rootClassName =
|
|
11475
|
+
if (rootClassName === void 0) { rootClassName = ""; }
|
|
11468
11476
|
if (!str)
|
|
11469
11477
|
return null;
|
|
11470
11478
|
return (jsxRuntime.jsx("span", __assign({ className: "".concat(rootClassName, " alphabet-icon__initial fs-13 icon-dim-20 flex cn-0 mr-8"), style: { backgroundColor: getRandomColor(str) } }, { children: str[0] })));
|
|
11471
11479
|
};
|
|
11472
|
-
var getEmptyArrayOfLength = function (length) {
|
|
11480
|
+
var getEmptyArrayOfLength = function (length) {
|
|
11481
|
+
return Array.from({ length: length });
|
|
11482
|
+
};
|
|
11473
11483
|
function noop$1() {
|
|
11474
11484
|
}
|
|
11475
11485
|
function not(e) {
|
|
11476
11486
|
return !e;
|
|
11477
11487
|
}
|
|
11478
11488
|
function useEffectAfterMount(cb, dependencies) {
|
|
11479
|
-
var justMounted =
|
|
11480
|
-
|
|
11489
|
+
var justMounted = React.useRef(true);
|
|
11490
|
+
React.useEffect(function () {
|
|
11481
11491
|
if (!justMounted.current) {
|
|
11482
11492
|
return cb();
|
|
11483
11493
|
}
|
|
@@ -11488,7 +11498,7 @@ function getCookie(sKey) {
|
|
|
11488
11498
|
if (!sKey) {
|
|
11489
11499
|
return null;
|
|
11490
11500
|
}
|
|
11491
|
-
return (document.cookie.replace(new RegExp(
|
|
11501
|
+
return (document.cookie.replace(new RegExp('(?:(?:^|.*;)\\s*' + sKey.replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=\\s*([^;]*).*$)|^.*$'), '$1') || null);
|
|
11492
11502
|
}
|
|
11493
11503
|
function getLoginInfo() {
|
|
11494
11504
|
var argocdToken = getCookie(TOKEN_COOKIE_NAME);
|
|
@@ -11524,7 +11534,7 @@ function useForm(stateSchema, validationSchema, callback) {
|
|
|
11524
11534
|
// Wrapped in useCallback to cached the function to avoid intensive memory leaked
|
|
11525
11535
|
// in every re-render in component
|
|
11526
11536
|
var validateState = React.useCallback(function (state) {
|
|
11527
|
-
//
|
|
11537
|
+
//check errors in all fields
|
|
11528
11538
|
var hasErrorInState = Object.keys(validationSchema).some(function (key) {
|
|
11529
11539
|
var isInputFieldRequired = validationSchema[key].required;
|
|
11530
11540
|
var stateValue = state[key].value; // state value
|
|
@@ -11676,7 +11686,9 @@ function useAsync(func, dependencyArray, shouldRun, options) {
|
|
|
11676
11686
|
dependencies: dependencyArray,
|
|
11677
11687
|
}), 2), state = _a[0], setState = _a[1];
|
|
11678
11688
|
var mounted = React.useRef(true);
|
|
11679
|
-
var dependencies = React.useMemo(function () {
|
|
11689
|
+
var dependencies = React.useMemo(function () {
|
|
11690
|
+
return __spreadArray(__spreadArray([], __read(dependencyArray), false), [shouldRun], false);
|
|
11691
|
+
}, __spreadArray(__spreadArray([], __read(dependencyArray), false), [shouldRun], false));
|
|
11680
11692
|
var reload = function () {
|
|
11681
11693
|
function call() {
|
|
11682
11694
|
return __awaiter(this, void 0, void 0, function () {
|
|
@@ -11735,7 +11747,9 @@ var processDeployedTime = function (lastDeployed, isArgoInstalled) {
|
|
|
11735
11747
|
if (lastDeployed) {
|
|
11736
11748
|
return handleUTCTime(lastDeployed, true);
|
|
11737
11749
|
}
|
|
11738
|
-
|
|
11750
|
+
else {
|
|
11751
|
+
return isArgoInstalled ? '' : 'Not deployed';
|
|
11752
|
+
}
|
|
11739
11753
|
};
|
|
11740
11754
|
/**
|
|
11741
11755
|
* Appends search parameters to the url as a query string
|
|
@@ -11831,19 +11845,18 @@ function getLockedJSON(json, jsonPathArray) {
|
|
|
11831
11845
|
current[key] = element.value;
|
|
11832
11846
|
});
|
|
11833
11847
|
});
|
|
11834
|
-
// eslint-disable-next-line dot-notation
|
|
11835
11848
|
return resultJson['$'];
|
|
11836
11849
|
}
|
|
11837
11850
|
|
|
11838
|
-
|
|
11851
|
+
function Progressing(_a) {
|
|
11839
11852
|
var pageLoader = _a.pageLoader, size = _a.size, theme = _a.theme, styles = _a.styles, fillColor = _a.fillColor;
|
|
11840
11853
|
var loaderSize = size ? "".concat(size, "px") : pageLoader ? '48px' : '20px';
|
|
11841
11854
|
return (jsxRuntime.jsx("div", __assign({ className: "loader ".concat(theme || 'default', "-background"), style: styles, "data-testid": "progressing" }, { children: jsxRuntime.jsx("div", __assign({ style: { width: loaderSize, height: loaderSize } }, { children: jsxRuntime.jsx("svg", __assign({ xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", className: "loader__svg" }, { children: jsxRuntime.jsxs("g", __assign({ fill: "none", fillRule: "evenodd", strokeLinecap: "round" }, { children: [jsxRuntime.jsx("animateTransform", { attributeName: "transform", attributeType: "XML", dur: "0.5s", from: "0 12 12", repeatCount: "indefinite", to: "360 12 12", type: "rotate" }), jsxRuntime.jsx("path", { fill: fillColor || '#06C', fillRule: "nonzero", d: "M12 2.5A9.5 9.5 0 1 1 2.5 12a1.5 1.5 0 0 1 3 0A6.5 6.5 0 1 0 12 5.5a1.5 1.5 0 0 1 0-3z" })] })) })) })) })));
|
|
11842
|
-
}
|
|
11843
|
-
|
|
11855
|
+
}
|
|
11856
|
+
function DetailsProgressing(_a) {
|
|
11844
11857
|
var loadingText = _a.loadingText, _b = _a.size, size = _b === void 0 ? 24 : _b, _c = _a.fullHeight, fullHeight = _c === void 0 ? false : _c, styles = _a.styles, fillColor = _a.fillColor, children = _a.children;
|
|
11845
11858
|
return (jsxRuntime.jsxs("div", __assign({ className: "details-loader bcn-0 flex column fs-14 fw-6 ".concat(fullHeight ? 'h-100' : 'details-loader-height'), style: styles, "data-testid": "details-progressing" }, { children: [jsxRuntime.jsx("span", __assign({ style: { width: "".concat(size, "px"), height: "".concat(size, "px") } }, { children: jsxRuntime.jsx(Progressing, { size: size, fillColor: fillColor }) })), loadingText && jsxRuntime.jsx("span", __assign({ className: "mt-10" }, { children: loadingText })), children] })));
|
|
11846
|
-
}
|
|
11859
|
+
}
|
|
11847
11860
|
|
|
11848
11861
|
var VisibleModal = /** @class */ (function (_super) {
|
|
11849
11862
|
__extends$1(VisibleModal, _super);
|
|
@@ -11985,17 +11998,17 @@ var OpaqueModal = /** @class */ (function (_super) {
|
|
|
11985
11998
|
}
|
|
11986
11999
|
OpaqueModal.prototype.componentDidMount = function () {
|
|
11987
12000
|
if (this.props.noBackground)
|
|
11988
|
-
this.modalRef.classList.add(
|
|
12001
|
+
this.modalRef.classList.add("show");
|
|
11989
12002
|
else
|
|
11990
|
-
this.modalRef.classList.add(
|
|
12003
|
+
this.modalRef.classList.add("show-with-bg");
|
|
11991
12004
|
};
|
|
11992
12005
|
OpaqueModal.prototype.componentWillUnmount = function () {
|
|
11993
|
-
this.modalRef.classList.remove(
|
|
11994
|
-
this.modalRef.classList.remove(
|
|
12006
|
+
this.modalRef.classList.remove("show");
|
|
12007
|
+
this.modalRef.classList.remove("show-with-bg");
|
|
11995
12008
|
};
|
|
11996
12009
|
OpaqueModal.prototype.render = function () {
|
|
11997
|
-
var _a = __assign({}, this.props), _b = _a.className, className = _b === void 0 ?
|
|
11998
|
-
return ReactDOM.createPortal(jsxRuntime.jsxs("div", __assign({ className: "full-screen-modal__body-container ".concat(className) }, { children: [this.props.children, typeof onHide === 'function' &&
|
|
12010
|
+
var _a = __assign({}, this.props), _b = _a.className, className = _b === void 0 ? "" : _b, _c = _a.onHide, onHide = _c === void 0 ? null : _c;
|
|
12011
|
+
return ReactDOM.createPortal(jsxRuntime.jsxs("div", __assign({ className: "full-screen-modal__body-container ".concat(className) }, { children: [this.props.children, typeof onHide === 'function' && jsxRuntime.jsx("div", __assign({ className: "close-btn icon-dim-24", onClick: function (e) { return onHide(false); }, "data-testid": "opaque-modal-close" }, { children: jsxRuntime.jsx("img", { className: "close-img", src: close, alt: "close" }) }))] })), document.getElementById('full-screen-modal'));
|
|
11999
12012
|
};
|
|
12000
12013
|
return OpaqueModal;
|
|
12001
12014
|
}(React.Component));
|
|
@@ -12014,12 +12027,12 @@ var VisibleModal2 = /** @class */ (function (_super) {
|
|
|
12014
12027
|
}
|
|
12015
12028
|
};
|
|
12016
12029
|
VisibleModal2.prototype.componentDidMount = function () {
|
|
12017
|
-
document.addEventListener(
|
|
12018
|
-
this.modalRef.classList.add(
|
|
12030
|
+
document.addEventListener("keydown", this.escFunction);
|
|
12031
|
+
this.modalRef.classList.add("show-with-bg");
|
|
12019
12032
|
};
|
|
12020
12033
|
VisibleModal2.prototype.componentWillUnmount = function () {
|
|
12021
|
-
document.removeEventListener(
|
|
12022
|
-
this.modalRef.classList.remove(
|
|
12034
|
+
document.removeEventListener("keydown", this.escFunction);
|
|
12035
|
+
this.modalRef.classList.remove("show-with-bg");
|
|
12023
12036
|
};
|
|
12024
12037
|
VisibleModal2.prototype.render = function () {
|
|
12025
12038
|
var _a;
|
|
@@ -12048,7 +12061,7 @@ function useBreadcrumbContext() {
|
|
|
12048
12061
|
return context;
|
|
12049
12062
|
}
|
|
12050
12063
|
|
|
12051
|
-
|
|
12064
|
+
React.createContext(null);
|
|
12052
12065
|
function useBreadcrumb(props, deps) {
|
|
12053
12066
|
var sep = (props === null || props === void 0 ? void 0 : props.sep) || '/';
|
|
12054
12067
|
deps = deps || [];
|
|
@@ -12092,7 +12105,7 @@ function useBreadcrumb(props, deps) {
|
|
|
12092
12105
|
? "".concat(prefix).concat(to)
|
|
12093
12106
|
: null,
|
|
12094
12107
|
name: typeof state.alias[name] === 'object'
|
|
12095
|
-
? ((_d = state.alias[name]) === null || _d === void 0 ? void 0 : _d.component)
|
|
12108
|
+
? !!((_d = state.alias[name]) === null || _d === void 0 ? void 0 : _d.component)
|
|
12096
12109
|
? state.alias[name].component
|
|
12097
12110
|
: null
|
|
12098
12111
|
: state.alias[name] || name,
|
|
@@ -12107,7 +12120,7 @@ var BreadCrumb = function (_a) {
|
|
|
12107
12120
|
var breadcrumbs = _a.breadcrumbs, _b = _a.sep, sep = _b === void 0 ? '/' : _b, _c = _a.className, className = _c === void 0 ? 'dc__devtron-breadcrumb__item' : _c;
|
|
12108
12121
|
var url = reactRouterDom.useRouteMatch().url;
|
|
12109
12122
|
var filteredCrumbs = breadcrumbs.filter(function (crumb) { return !!crumb.name; });
|
|
12110
|
-
return (jsxRuntime.jsx(
|
|
12123
|
+
return (jsxRuntime.jsx(React.Fragment, { children: filteredCrumbs.map(function (breadcrumb, idx) { return (jsxRuntime.jsxs(React.Fragment, { children: [jsxRuntime.jsx(ConditionalWrap, __assign({ condition: !!breadcrumb.to, wrap: function (children) { return (jsxRuntime.jsx(reactRouterDom.Link, __assign({ className: "".concat(url === breadcrumb.to ? 'active' : '', " ").concat(className, " ").concat(breadcrumb.className || ''), to: breadcrumb.to }, { children: children }))); } }, { children: breadcrumb.name })), idx + 1 !== filteredCrumbs.length && breadcrumb.name && (jsxRuntime.jsx("span", __assign({ className: "".concat(className, "__separator cn-5") }, { children: sep })))] }, idx)); }) }));
|
|
12111
12124
|
};
|
|
12112
12125
|
|
|
12113
12126
|
var RadioGroupContext = React.createContext({ name: '', value: '', disabled: false, onChange: function (event) { } });
|
|
@@ -12118,7 +12131,9 @@ var RadioGroupItem = /** @class */ (function (_super) {
|
|
|
12118
12131
|
}
|
|
12119
12132
|
RadioGroupItem.prototype.render = function () {
|
|
12120
12133
|
var _this = this;
|
|
12121
|
-
return (jsxRuntime.jsx(RadioGroupContext.Consumer, { children: function (context) {
|
|
12134
|
+
return (jsxRuntime.jsx(RadioGroupContext.Consumer, { children: function (context) {
|
|
12135
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("label", __assign({ className: (_this.props.disabled || context.disabled) ? 'form__radio-item disabled' : 'form__radio-item' }, { children: [jsxRuntime.jsx("input", { type: "radio", className: "form__checkbox", name: context.name, disabled: context.disabled || _this.props.disabled, onChange: context.onChange, value: _this.props.value, checked: context.value === _this.props.value, "data-testid": _this.props.dataTestId }), jsxRuntime.jsxs("span", __assign({ className: "form__radio-item-content", "data-testid": "".concat(_this.props.dataTestId, "-span") }, { children: [jsxRuntime.jsx("span", { className: "radio__button" }), jsxRuntime.jsx("span", __assign({ className: "radio__title" }, { children: _this.props.children }))] }))] })) }));
|
|
12136
|
+
} }));
|
|
12122
12137
|
};
|
|
12123
12138
|
return RadioGroupItem;
|
|
12124
12139
|
}(React.Component));
|
|
@@ -12138,23 +12153,23 @@ var RadioGroup$1 = /** @class */ (function (_super) {
|
|
|
12138
12153
|
return RadioGroup;
|
|
12139
12154
|
}(React.Component));
|
|
12140
12155
|
|
|
12141
|
-
var PopupContext =
|
|
12156
|
+
var PopupContext = React.createContext(null);
|
|
12142
12157
|
function usePopupContext() {
|
|
12143
|
-
var context =
|
|
12158
|
+
var context = React.useContext(PopupContext);
|
|
12144
12159
|
if (!context) {
|
|
12145
12160
|
throw new Error("Select compound components cannot be rendered outside popupmenup");
|
|
12146
12161
|
}
|
|
12147
12162
|
return context;
|
|
12148
12163
|
}
|
|
12149
|
-
|
|
12164
|
+
function PopupMenu(_a) {
|
|
12150
12165
|
var _b;
|
|
12151
12166
|
var _c = _a.children, children = _c === void 0 ? null : _c, _d = _a.onToggleCallback, onToggleCallback = _d === void 0 ? null : _d, _e = _a.autoClose, autoClose = _e === void 0 ? false : _e, _f = _a.autoPosition, autoPosition = _f === void 0 ? false : _f;
|
|
12152
|
-
var _g = __read(
|
|
12153
|
-
var _h = __read(
|
|
12154
|
-
var observer =
|
|
12155
|
-
var buttonRef =
|
|
12156
|
-
var buttonWidth =
|
|
12157
|
-
|
|
12167
|
+
var _g = __read(React.useState(null), 2), popupPosition = _g[0], setPopupPosition = _g[1];
|
|
12168
|
+
var _h = __read(React.useState(0), 2), opacity = _h[0], setOpacity = _h[1];
|
|
12169
|
+
var observer = React.useRef(null);
|
|
12170
|
+
var buttonRef = React.useRef(null);
|
|
12171
|
+
var buttonWidth = React.useRef(null);
|
|
12172
|
+
React.useEffect(function () {
|
|
12158
12173
|
observer.current = window.IntersectionObserver ? new IntersectionObserver(intersectionCallback, options) : null;
|
|
12159
12174
|
return function () {
|
|
12160
12175
|
if (observer && observer.current && observer.current.disconnect)
|
|
@@ -12248,17 +12263,17 @@ var PopupMenu = function (_a) {
|
|
|
12248
12263
|
initialiseButtonWidth: initialiseButtonWidth,
|
|
12249
12264
|
buttonWidth: buttonWidth,
|
|
12250
12265
|
} }, { children: children })));
|
|
12251
|
-
}
|
|
12252
|
-
|
|
12253
|
-
var _b = _a.children, children = _b === void 0 ? null : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, _d = _a.rootClassName, rootClassName = _d === void 0 ? '' : _d, _e = _a.tabIndex, tabIndex = _e === void 0 ? 0 : _e, _f = _a.onHover, onHover = _f === void 0 ? false : _f, _g = _a.isKebab, isKebab = _g === void 0 ? false : _g, _h = _a.dataTestId, dataTestId = _h === void 0 ?
|
|
12266
|
+
}
|
|
12267
|
+
function Button(_a) {
|
|
12268
|
+
var _b = _a.children, children = _b === void 0 ? null : _b, _c = _a.disabled, disabled = _c === void 0 ? false : _c, _d = _a.rootClassName, rootClassName = _d === void 0 ? '' : _d, _e = _a.tabIndex, tabIndex = _e === void 0 ? 0 : _e, _f = _a.onHover, onHover = _f === void 0 ? false : _f, _g = _a.isKebab, isKebab = _g === void 0 ? false : _g, _h = _a.dataTestId, dataTestId = _h === void 0 ? "" : _h;
|
|
12254
12269
|
var _j = usePopupContext(), handleOpen = _j.handleOpen, popupPosition = _j.popupPosition; _j.buttonRef; var initialiseButtonWidth = _j.initialiseButtonWidth;
|
|
12255
12270
|
return (jsxRuntime.jsx("button", __assign({ ref: initialiseButtonWidth, type: "button", tabIndex: tabIndex, disabled: disabled, className: "".concat(rootClassName, " ").concat(popupPosition ? 'focused' : '', " ").concat(isKebab ? 'popup-button-kebab' : 'popup-button'), onMouseEnter: onHover ? (disabled ? null : handleOpen) : function () { }, onClick: disabled ? null : handleOpen, "data-testid": dataTestId }, { children: children })));
|
|
12256
|
-
}
|
|
12257
|
-
|
|
12271
|
+
}
|
|
12272
|
+
function Body$1(_a) {
|
|
12258
12273
|
var _b = _a.children, children = _b === void 0 ? null : _b, _c = _a.rootClassName, rootClassName = _c === void 0 ? '' : _c, _d = _a.style, style = _d === void 0 ? {} : _d, _e = _a.autoWidth, autoWidth = _e === void 0 ? false : _e, _f = _a.preventWheelDisable, preventWheelDisable = _f === void 0 ? false : _f, noBackDrop = _a.noBackDrop;
|
|
12259
12274
|
var _g = usePopupContext(), handleClose = _g.handleClose, popupPosition = _g.popupPosition, opacity = _g.opacity, callbackRef = _g.callbackRef, buttonWidth = _g.buttonWidth;
|
|
12260
12275
|
return popupPosition ? (jsxRuntime.jsx(Modal, __assign({ callbackRef: callbackRef, onClick: handleClose, rootClassName: "".concat(rootClassName, " popup-body ").concat(!children ? 'popup-body--empty' : '', " ").concat(Object.keys(popupPosition).join(' ')), style: __assign(__assign(__assign(__assign({}, popupPosition), style), (autoWidth ? { width: buttonWidth.current } : {})), { opacity: opacity }), preventWheelDisable: preventWheelDisable, noBackDrop: noBackDrop }, { children: children }))) : null;
|
|
12261
|
-
}
|
|
12276
|
+
}
|
|
12262
12277
|
PopupMenu.Button = Button;
|
|
12263
12278
|
PopupMenu.Body = Body$1;
|
|
12264
12279
|
|
|
@@ -16301,7 +16316,7 @@ styleInject(css_248z$5);
|
|
|
16301
16316
|
|
|
16302
16317
|
// This component will handle some of the new tippy designs and interactions
|
|
16303
16318
|
// So this can be updated to support further for new features or interactions
|
|
16304
|
-
|
|
16319
|
+
function TippyCustomized(props) {
|
|
16305
16320
|
var tippyRef = React.useRef(null);
|
|
16306
16321
|
var _a = __read(React.useState(false), 2), showHeadingInfo = _a[0], setShowHeadingInfo = _a[1];
|
|
16307
16322
|
var isWhiteTheme = props.theme === exports.TippyTheme.white;
|
|
@@ -16330,15 +16345,16 @@ var TippyCustomized = function (props) {
|
|
|
16330
16345
|
};
|
|
16331
16346
|
var getTippyContent = function () {
|
|
16332
16347
|
var Icon = props.Icon, iconPath = props.iconPath, iconClass = props.iconClass, iconSize = props.iconSize, onImageLoadError = props.onImageLoadError, heading = props.heading, headingInfo = props.headingInfo, infoTextHeading = props.infoTextHeading, hideHeading = props.hideHeading, infoText = props.infoText, showCloseButton = props.showCloseButton, additionalContent = props.additionalContent, documentationLink = props.documentationLink, documentationLinkText = props.documentationLinkText;
|
|
16333
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!hideHeading &&
|
|
16334
|
-
|
|
16335
|
-
|
|
16348
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!hideHeading &&
|
|
16349
|
+
jsxRuntime.jsxs("div", __assign({ className: "dc__word-break dc__hyphens-auto flex left ".concat(isWhiteTheme
|
|
16350
|
+
? "p-12 cn-9 ".concat(props.noHeadingBorder ? '' : 'dc__border-bottom-n1')
|
|
16351
|
+
: 'pt-20 pb-12 pr-20 pl-20 cn-0 top') }, { children: [iconPath ? (jsxRuntime.jsx("img", { className: "icon-dim-".concat(iconSize || 20, " mr-6 ").concat(iconClass || ''), src: iconPath, alt: "Heading", onError: onImageLoadError })) : (Icon && (jsxRuntime.jsx("div", __assign({ className: "icon-dim-".concat(iconSize || 20, " mr-6") }, { children: jsxRuntime.jsx(Icon, { className: "icon-dim-".concat(iconSize || 20, " ").concat(iconClass || '') }) })))), heading && jsxRuntime.jsx("span", __assign({ className: "fs-14 fw-6 lh-20 ".concat(showCloseButton ? 'mr-6' : '') }, { children: heading })), headingInfo && (jsxRuntime.jsx("div", __assign({ className: "icon-dim-20 cursor", onClick: toggleHeadingInfo }, { children: jsxRuntime.jsx(SvgIcHelpOutline, { className: "icon-dim-20" }) }))), showCloseButton && (jsxRuntime.jsx("div", __assign({ className: "icon-dim-16 ml-auto" }, { children: jsxRuntime.jsx(SvgIcCross, { className: "icon-dim-16 cursor ".concat(isWhiteTheme ? 'fcn-9' : 'fcn-0'), onClick: closeTippy }) })))] })), showHeadingInfo && (jsxRuntime.jsxs("div", __assign({ className: "flex left top bcv-1 fs-13 fw-4 lh-20 pt-8 pb-8 ".concat(isWhiteTheme ? 'pl-12 pr-12' : 'pl-20 pr-20') }, { children: [jsxRuntime.jsx("div", __assign({ className: "icon-dim-20 mr-8" }, { children: jsxRuntime.jsx(SvgIcHelp, { className: "icon-dim-20 fcv-5" }) })), jsxRuntime.jsx("div", __assign({ className: "dc__word-break dc__hyphens-auto" }, { children: headingInfo }))] }))), infoTextHeading && (jsxRuntime.jsx("div", __assign({ className: "dc__word-break dc__hyphens-auto fs-14 fw-6 lh-20 ".concat(isWhiteTheme ? 'pl-12 pr-12' : 'pl-20 pr-20') }, { children: infoTextHeading }))), infoText && (jsxRuntime.jsx("div", __assign({ className: "dc__word-break dc__hyphens-auto fs-13 fw-4 lh-20 ".concat(isWhiteTheme
|
|
16336
16352
|
? 'p-12'
|
|
16337
16353
|
: "pl-20 pr-20 pt-4 ".concat(additionalContent && documentationLink ? 'pb-12' : 'pb-20')) }, { children: infoText }))), additionalContent, documentationLink && (jsxRuntime.jsx("div", __assign({ className: "pl-12 pb-12" }, { children: jsxRuntime.jsx("a", __assign({ href: documentationLink, target: "_blank", rel: "noreferrer noopener", className: "fs-13 cb-5", onClick: closeTippy }, { children: documentationLinkText || 'Learn more' })) })))] }));
|
|
16338
16354
|
};
|
|
16339
16355
|
var className = props.className, placement = props.placement, arrow = props.arrow, interactive = props.interactive, showOnCreate = props.showOnCreate, trigger = props.trigger, animation = props.animation, duration = props.duration, children = props.children;
|
|
16340
16356
|
return (jsxRuntime.jsx(Tippy, __assign({ className: "".concat(isWhiteTheme ? 'tippy-white-container default-white' : 'tippy-black-container default-black', " no-content-padding tippy-shadow ").concat(className), arrow: arrow || false, interactive: interactive || false, placement: placement || 'top', content: getTippyContent(), trigger: trigger || 'mouseenter', onMount: onTippyMount, onClickOutside: closeTippy, showOnCreate: showOnCreate || false, animation: animation || 'fade', duration: duration || 300, visible: props.visible }, { children: children })));
|
|
16341
|
-
}
|
|
16357
|
+
}
|
|
16342
16358
|
|
|
16343
16359
|
var _path$a, _circle, _path2$1;
|
|
16344
16360
|
function _extends$i() { _extends$i = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$i.apply(this, arguments); }
|
|
@@ -16371,8 +16387,10 @@ var SvgInjectTag = function SvgInjectTag(props) {
|
|
|
16371
16387
|
|
|
16372
16388
|
function PropagateTagInfo(_a) {
|
|
16373
16389
|
var isCreateApp = _a.isCreateApp;
|
|
16374
|
-
var additionalInfo = function () {
|
|
16375
|
-
|
|
16390
|
+
var additionalInfo = function () {
|
|
16391
|
+
return (jsxRuntime.jsxs("div", __assign({ className: "p-12 fs-13" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "mb-20" }, { children: [jsxRuntime.jsxs("span", __assign({ className: "flex left" }, { children: ["Add a tag and click on the", jsxRuntime.jsx(SvgInjectTag, { className: "icon-dim-16 ml-4 mr-4" }), "icon to"] })), "propagate tags as labels to Kubernetes resources"] })), jsxRuntime.jsx("div", { children: "Use these tags to filter/identify resources via CLI or in other Kubernetes tools." })] })));
|
|
16392
|
+
};
|
|
16393
|
+
return (jsxRuntime.jsx(TippyCustomized, __assign({ theme: exports.TippyTheme.white, className: "w-300", placement: "top", Icon: SvgInjectTag, heading: 'Propagate tags to K8s resources', infoText: "", additionalContent: additionalInfo(), showCloseButton: true, trigger: "click", interactive: true, documentationLink: isCreateApp ? DOCUMENTATION.APP_TAGS : DOCUMENTATION.APP_OVERVIEW_TAGS, documentationLinkText: "View Documentation" }, { children: jsxRuntime.jsxs("div", __assign({ className: "flexbox cursor" }, { children: [jsxRuntime.jsx(SvgInjectTag, { className: "icon-dim-16 mt-2 mr-4" }), jsxRuntime.jsx("span", { children: "Propagate tags" }), jsxRuntime.jsx(SvgIcHelpOutline, { className: "icon-dim-16 mt-2 ml-4" })] })) })));
|
|
16376
16394
|
}
|
|
16377
16395
|
|
|
16378
16396
|
var _path$9;
|
|
@@ -16390,7 +16408,7 @@ var SvgIcInfoOutlined = function SvgIcInfoOutlined(props) {
|
|
|
16390
16408
|
})));
|
|
16391
16409
|
};
|
|
16392
16410
|
|
|
16393
|
-
|
|
16411
|
+
function ResizableTagTextArea(_a) {
|
|
16394
16412
|
var className = _a.className, minHeight = _a.minHeight, maxHeight = _a.maxHeight, value = _a.value, onChange = _a.onChange, onBlur = _a.onBlur, onFocus = _a.onFocus, placeholder = _a.placeholder, tabIndex = _a.tabIndex, refVar = _a.refVar, dependentRef = _a.dependentRef, dataTestId = _a.dataTestId, handleKeyDown = _a.handleKeyDown;
|
|
16395
16413
|
var _b = __read(React.useState(''), 2), text = _b[0], setText = _b[1];
|
|
16396
16414
|
React.useEffect(function () {
|
|
@@ -16403,9 +16421,9 @@ var ResizableTagTextArea = function (_a) {
|
|
|
16403
16421
|
var reInitHeight = function () {
|
|
16404
16422
|
if (document.activeElement !== refVar.current)
|
|
16405
16423
|
return;
|
|
16406
|
-
refVar.current.style.height =
|
|
16424
|
+
refVar.current.style.height = minHeight + 'px';
|
|
16407
16425
|
if (dependentRef) {
|
|
16408
|
-
dependentRef.current.style.height =
|
|
16426
|
+
dependentRef.current.style.height = minHeight + 'px';
|
|
16409
16427
|
}
|
|
16410
16428
|
var nextHeight = refVar.current.scrollHeight;
|
|
16411
16429
|
if (dependentRef && nextHeight < dependentRef.current.scrollHeight) {
|
|
@@ -16417,16 +16435,16 @@ var ResizableTagTextArea = function (_a) {
|
|
|
16417
16435
|
if (maxHeight && nextHeight > maxHeight) {
|
|
16418
16436
|
nextHeight = maxHeight;
|
|
16419
16437
|
}
|
|
16420
|
-
refVar.current.style.height =
|
|
16438
|
+
refVar.current.style.height = nextHeight + 'px';
|
|
16421
16439
|
if (dependentRef) {
|
|
16422
|
-
dependentRef.current.style.height =
|
|
16440
|
+
dependentRef.current.style.height = nextHeight + 'px';
|
|
16423
16441
|
}
|
|
16424
16442
|
};
|
|
16425
16443
|
useThrottledEffect(reInitHeight, 500, [text]);
|
|
16426
16444
|
var handleOnBlur = function (event) {
|
|
16427
|
-
refVar.current.style.height =
|
|
16445
|
+
refVar.current.style.height = minHeight + 'px';
|
|
16428
16446
|
if (dependentRef) {
|
|
16429
|
-
dependentRef.current.style.height =
|
|
16447
|
+
dependentRef.current.style.height = minHeight + 'px';
|
|
16430
16448
|
}
|
|
16431
16449
|
onBlur && onBlur(event);
|
|
16432
16450
|
};
|
|
@@ -16435,7 +16453,7 @@ var ResizableTagTextArea = function (_a) {
|
|
|
16435
16453
|
onFocus && onFocus(event);
|
|
16436
16454
|
};
|
|
16437
16455
|
return (jsxRuntime.jsx("textarea", { rows: 1, ref: refVar, value: text, placeholder: placeholder, className: "".concat(className || '', " lh-20"), style: { resize: 'none' }, onChange: handleChange, onBlur: handleOnBlur, onFocus: handleOnFocus, tabIndex: tabIndex, "data-testid": dataTestId, onKeyDown: handleKeyDown }));
|
|
16438
|
-
}
|
|
16456
|
+
}
|
|
16439
16457
|
|
|
16440
16458
|
var validateTagValue = function (value) {
|
|
16441
16459
|
var errorList = [];
|
|
@@ -16460,25 +16478,27 @@ var ValidationRules = /** @class */ (function () {
|
|
|
16460
16478
|
if (!key) {
|
|
16461
16479
|
errorList.push('Key is required');
|
|
16462
16480
|
}
|
|
16463
|
-
else
|
|
16464
|
-
|
|
16465
|
-
|
|
16466
|
-
|
|
16467
|
-
|
|
16468
|
-
|
|
16469
|
-
else if (noOfSlashInKey === 1) {
|
|
16470
|
-
var _b = __read(key.split('/'), 2), prefix = _b[0], name_1 = _b[1];
|
|
16471
|
-
errorList.push.apply(errorList, __spreadArray([], __read(validateTagValue(name_1).map(function (error) { return "Name: ".concat(error); })), false));
|
|
16472
|
-
if (prefix.length > 253) {
|
|
16473
|
-
errorList.push('Prefix: Can be max 253 characters');
|
|
16481
|
+
else {
|
|
16482
|
+
if (!key.startsWith("devtron.ai/")) {
|
|
16483
|
+
var re = new RegExp('/', 'g');
|
|
16484
|
+
var noOfSlashInKey = (_a = key.match(re)) === null || _a === void 0 ? void 0 : _a.length;
|
|
16485
|
+
if (noOfSlashInKey > 1) {
|
|
16486
|
+
errorList.push('Key: Max 1 ( / ) allowed');
|
|
16474
16487
|
}
|
|
16475
|
-
|
|
16476
|
-
|
|
16477
|
-
errorList.push(
|
|
16488
|
+
else if (noOfSlashInKey === 1) {
|
|
16489
|
+
var _b = __read(key.split('/'), 2), prefix = _b[0], name_1 = _b[1];
|
|
16490
|
+
errorList.push.apply(errorList, __spreadArray([], __read(validateTagValue(name_1).map(function (error) { return "Name: ".concat(error); })), false));
|
|
16491
|
+
if (prefix.length > 253) {
|
|
16492
|
+
errorList.push('Prefix: Can be max 253 characters');
|
|
16493
|
+
}
|
|
16494
|
+
var validPrefix = PATTERNS.KUBERNETES_KEY_PREFIX.test(prefix);
|
|
16495
|
+
if (!validPrefix) {
|
|
16496
|
+
errorList.push('Prefix: Must be a DNS subdomain (a series of DNS labels separated by dots (.)');
|
|
16497
|
+
}
|
|
16498
|
+
}
|
|
16499
|
+
else {
|
|
16500
|
+
errorList.push.apply(errorList, __spreadArray([], __read(validateTagValue(key).map(function (error) { return "Name: ".concat(error); })), false));
|
|
16478
16501
|
}
|
|
16479
|
-
}
|
|
16480
|
-
else {
|
|
16481
|
-
errorList.push.apply(errorList, __spreadArray([], __read(validateTagValue(key).map(function (error) { return "Name: ".concat(error); })), false));
|
|
16482
16502
|
}
|
|
16483
16503
|
}
|
|
16484
16504
|
return { isValid: errorList.length === 0, messages: errorList };
|
|
@@ -16488,8 +16508,10 @@ var ValidationRules = /** @class */ (function () {
|
|
|
16488
16508
|
if (!value) {
|
|
16489
16509
|
errorList.push('Value is required');
|
|
16490
16510
|
}
|
|
16491
|
-
else
|
|
16492
|
-
|
|
16511
|
+
else {
|
|
16512
|
+
if (!key.startsWith("devtron.ai/")) {
|
|
16513
|
+
errorList.push.apply(errorList, __spreadArray([], __read(validateTagValue(value)), false));
|
|
16514
|
+
}
|
|
16493
16515
|
}
|
|
16494
16516
|
return { isValid: errorList.length === 0, messages: errorList };
|
|
16495
16517
|
};
|
|
@@ -16560,8 +16582,12 @@ var TagLabelValueSelector = function (_a) {
|
|
|
16560
16582
|
}
|
|
16561
16583
|
return null;
|
|
16562
16584
|
};
|
|
16563
|
-
var option = function (tag, index) {
|
|
16564
|
-
|
|
16585
|
+
var option = function (tag, index) {
|
|
16586
|
+
return (jsxRuntime.jsx("div", __assign({ "data-key": tag.label, "data-propagate": tag.propagate, className: "dc__hover-n50 dc__ellipsis-right lh-20 fs-13 fw-4 pt-6 pr-8 pb-6 pl-8 cursor", onClick: onSelectValue, "data-testid": "tag-label-value-".concat(index) }, { children: tag.label }), "".concat(tag.value, "-").concat(index)));
|
|
16587
|
+
};
|
|
16588
|
+
var optionWithTippy = function (tag, index) {
|
|
16589
|
+
return (jsxRuntime.jsx(Tippy, __assign({ className: "default-tt", arrow: false, placement: "right", content: jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", __assign({ className: "mb-10 fs-12 fw-6 cn-0 dc__break-word" }, { children: tag.label })), jsxRuntime.jsx("div", __assign({ className: "fs-12 fw-4 cn-0 dc__break-word" }, { children: tag.description }))] }) }, { children: option(tag, index) })));
|
|
16590
|
+
};
|
|
16565
16591
|
var renderSuggestions = function () {
|
|
16566
16592
|
if (tagOptions === null || tagOptions === void 0 ? void 0 : tagOptions.length) {
|
|
16567
16593
|
var filteredTags = tagOptions.filter(function (tag) { return tag.label.indexOf(selectedValue) >= 0; });
|
|
@@ -16606,7 +16632,7 @@ var TagDetails = function (_a) {
|
|
|
16606
16632
|
}
|
|
16607
16633
|
setTagData(index, _tagData);
|
|
16608
16634
|
};
|
|
16609
|
-
return (jsxRuntime.jsxs("div", __assign({ className: "flexbox mb-8" }, { children: [jsxRuntime.jsx("div", __assign({ className: "dc__border h-30 pl-4 pr-4 br-4 mr-8 pointer ".concat(tagData.propagate ? 'bcn-7' : '', " ").concat(tagData.key.startsWith(
|
|
16635
|
+
return (jsxRuntime.jsxs("div", __assign({ className: "flexbox mb-8" }, { children: [jsxRuntime.jsx("div", __assign({ className: "dc__border h-30 pl-4 pr-4 br-4 mr-8 pointer ".concat(tagData.propagate ? 'bcn-7' : '', " ").concat(tagData.key.startsWith("devtron.ai/") ? 'cursor-not-allowed bcn-1' : ''), onClick: propagateTagToResource, "data-testid": "propagate-tag-".concat(index) }, { children: jsxRuntime.jsx(SvgInjectTag, { className: "icon-dim-20 mt-4 ".concat(tagData.propagate ? 'scn-0' : '') }) })), jsxRuntime.jsx(TagLabelValueSelector, { selectedTagIndex: index, tagData: tagData, setTagData: setTagData, tagInputType: exports.KEY_VALUE.KEY, placeholder: "Enter key", tabIndex: tabIndex - 1, refVar: keyRef, dependentRef: valueRef, tagOptions: suggestedTagsOptions }), jsxRuntime.jsx(TagLabelValueSelector, { selectedTagIndex: index, tagData: tagData, setTagData: setTagData, tagInputType: exports.KEY_VALUE.VALUE, placeholder: "Enter value", tabIndex: tabIndex, refVar: valueRef, dependentRef: keyRef }), jsxRuntime.jsx("div", __assign({ className: "dc__border pl-4 pr-4 dc__right-radius-4 pointer flex top", onClick: deleteTag, "data-testid": "delete-tag-".concat(index) }, { children: jsxRuntime.jsx(SvgIcCross, { className: "icon-dim-20 mt-4" }) }))] })));
|
|
16610
16636
|
};
|
|
16611
16637
|
|
|
16612
16638
|
var _path$8;
|
|
@@ -16629,7 +16655,7 @@ var TagLabelSelect = function (_a) {
|
|
|
16629
16655
|
var setTagData = function (index, tagValue) {
|
|
16630
16656
|
var _tags = __spreadArray([], __read(labelTags), false);
|
|
16631
16657
|
var _tagValue = tagValue;
|
|
16632
|
-
if (_tagValue.key.startsWith(
|
|
16658
|
+
if (_tagValue.key.startsWith("devtron.ai/")) {
|
|
16633
16659
|
_tagValue.propagate = false;
|
|
16634
16660
|
}
|
|
16635
16661
|
_tags[index] = _tagValue;
|
|
@@ -16648,22 +16674,22 @@ var TagLabelSelect = function (_a) {
|
|
|
16648
16674
|
return (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("div", __assign({ className: "flexbox dc__content-space mb-8" }, { children: [jsxRuntime.jsx("span", { children: "Tags" }), jsxRuntime.jsx(PropagateTagInfo, { isCreateApp: isCreateApp })] })), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("div", __assign({ className: "dc_width-max-content cb-5 fw-6 fs-13 flexbox mr-20 mb-8 cursor", onClick: addNewTag, "data-testid": "add-tag-button" }, { children: [jsxRuntime.jsx(SvgIcAdd, { className: "icon-dim-20 fcb-5" }), " Add tag"] })), jsxRuntime.jsx("div", __assign({ className: "mb-8", "data-testid": "tag-rows-container" }, { children: labelTags === null || labelTags === void 0 ? void 0 : labelTags.map(function (tagData, index) { return (jsxRuntime.jsx(TagDetails, { index: index, tagData: tagData, setTagData: setTagData, removeTag: removeTag, tabIndex: tabIndex + (index + 2) }, "tag-".concat(index))); }) }))] })] }));
|
|
16649
16675
|
};
|
|
16650
16676
|
|
|
16651
|
-
|
|
16677
|
+
function ConfirmationDialog(_a) {
|
|
16652
16678
|
var _b = _a.className, className = _b === void 0 ? '' : _b, children = _a.children;
|
|
16653
16679
|
return (jsxRuntime.jsx(VisibleModal2, __assign({ className: "confirmation-dialog" }, { children: jsxRuntime.jsx("div", __assign({ className: "confirmation-dialog__body ".concat(className) }, { children: children })) })));
|
|
16654
|
-
}
|
|
16655
|
-
|
|
16680
|
+
}
|
|
16681
|
+
function Icon(_a) {
|
|
16656
16682
|
var src = _a.src, _b = _a.className, className = _b === void 0 ? '' : _b;
|
|
16657
|
-
return
|
|
16658
|
-
}
|
|
16659
|
-
|
|
16683
|
+
return jsxRuntime.jsx("img", { src: src, className: "confirmation-dialog__icon ".concat(className), alt: "" });
|
|
16684
|
+
}
|
|
16685
|
+
function Body(_a) {
|
|
16660
16686
|
var title = _a.title, _b = _a.subtitle, subtitle = _b === void 0 ? null : _b, _c = _a.children, children = _c === void 0 ? null : _c;
|
|
16661
16687
|
return (jsxRuntime.jsxs("div", __assign({ className: "flex left column " }, { children: [jsxRuntime.jsx("h3", __assign({ className: "confirmation-dialog__title lh-1-5 dc__break-word w-100" }, { children: title })), subtitle && jsxRuntime.jsx("div", __assign({ className: "confirmation-dialog__subtitle" }, { children: subtitle })), children] })));
|
|
16662
|
-
}
|
|
16663
|
-
|
|
16688
|
+
}
|
|
16689
|
+
function ButtonGroup(_a) {
|
|
16664
16690
|
var children = _a.children;
|
|
16665
|
-
return
|
|
16666
|
-
}
|
|
16691
|
+
return jsxRuntime.jsx("div", __assign({ className: "flex right confirmation-dialog__button-group" }, { children: children }));
|
|
16692
|
+
}
|
|
16667
16693
|
ConfirmationDialog.Icon = Icon;
|
|
16668
16694
|
ConfirmationDialog.Body = Body;
|
|
16669
16695
|
ConfirmationDialog.ButtonGroup = ButtonGroup;
|
|
@@ -16685,10 +16711,12 @@ var DeleteDialog = function (props) {
|
|
|
16685
16711
|
};
|
|
16686
16712
|
return (jsxRuntime.jsxs(ConfirmationDialog, __assign({ className: "confirmation-dialog__body--w-400" }, { children: [jsxRuntime.jsx(ConfirmationDialog.Icon, { src: warn }), jsxRuntime.jsx(ConfirmationDialog.Body, __assign({ title: props.title }, { children: jsxRuntime.jsxs("div", __assign({ className: "fs-13 cn-7 lh-1-54 w-100" }, { children: [props.description ? props.description : null, props.children] })) })), jsxRuntime.jsx(ConfirmationDialog.ButtonGroup, { children: jsxRuntime.jsxs("div", __assign({ className: "flex right" }, { children: [jsxRuntime.jsx("button", __assign({ type: "button", className: "cta cancel cta-cd-delete-modal ml-16", onClick: handleModalClose, disabled: props.apiCallInProgress, "data-testid": "dialog-cancel" }, { children: "Cancel" })), jsxRuntime.jsx("button", __assign({ type: "button", className: "cta delete cta-cd-delete-modal ml-16", onClick: handleDelete, disabled: props.apiCallInProgress || props.disabled, "data-testid": "dialog-delete" }, { children: props.apiCallInProgress ? (jsxRuntime.jsx(Progressing, {})) : ("".concat(props.deletePrefix || '').concat(props.buttonPrimaryText ? props.buttonPrimaryText : 'Delete').concat(props.deletePostfix || '')) }))] })) })] })));
|
|
16687
16713
|
};
|
|
16688
|
-
|
|
16714
|
+
function DeleteDialogDescription(props) {
|
|
16715
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: props.children });
|
|
16716
|
+
}
|
|
16689
16717
|
DeleteDialog.Description = DeleteDialogDescription;
|
|
16690
16718
|
|
|
16691
|
-
//
|
|
16719
|
+
//TODO: may not need context
|
|
16692
16720
|
var DialogFormContext = React.createContext({ title: '', isLoading: false, close: function (event) { }, onSave: function (event) { } });
|
|
16693
16721
|
var DialogForm = /** @class */ (function (_super) {
|
|
16694
16722
|
__extends$1(DialogForm, _super);
|
|
@@ -16715,12 +16743,14 @@ var DialogForm = /** @class */ (function (_super) {
|
|
|
16715
16743
|
isLoading: this.props.isLoading,
|
|
16716
16744
|
close: this.props.close,
|
|
16717
16745
|
onSave: this.props.onSave,
|
|
16718
|
-
} }, { children: jsxRuntime.jsx(VisibleModal, __assign({ className: "" }, { children: jsxRuntime.jsxs("div", __assign({ className: "modal__body ".concat(this.props.className || '') }, { children: [jsxRuntime.jsxs("div", __assign({ className: "modal__header ".concat(this.props.headerClassName || '') }, { children: [jsxRuntime.jsx("h1", __assign({ className: "modal__title" }, { children: this.props.title })), jsxRuntime.jsxs("button", __assign({ type: "button", className: "dc__transparent", onClick: this.props.close }, { children: [' ', jsxRuntime.jsx("img", { src: close, alt: "close" })] }))] })), jsxRuntime.jsx(DialogFormContext.Consumer, { children: function (context) {
|
|
16719
|
-
|
|
16720
|
-
|
|
16721
|
-
context.
|
|
16722
|
-
|
|
16723
|
-
|
|
16746
|
+
} }, { children: jsxRuntime.jsx(VisibleModal, __assign({ className: "" }, { children: jsxRuntime.jsxs("div", __assign({ className: "modal__body ".concat(this.props.className || '') }, { children: [jsxRuntime.jsxs("div", __assign({ className: "modal__header ".concat(this.props.headerClassName || '') }, { children: [jsxRuntime.jsx("h1", __assign({ className: "modal__title" }, { children: this.props.title })), jsxRuntime.jsxs("button", __assign({ type: "button", className: "dc__transparent", onClick: this.props.close }, { children: [' ', jsxRuntime.jsx("img", { src: close, alt: "close" })] }))] })), jsxRuntime.jsx(DialogFormContext.Consumer, { children: function (context) {
|
|
16747
|
+
return (jsxRuntime.jsx("form", __assign({ noValidate: true, onSubmit: function (e) {
|
|
16748
|
+
e.preventDefault();
|
|
16749
|
+
if (!context.isLoading) {
|
|
16750
|
+
context.onSave(e);
|
|
16751
|
+
}
|
|
16752
|
+
} }, { children: _this.props.children })));
|
|
16753
|
+
} })] })) })) })));
|
|
16724
16754
|
};
|
|
16725
16755
|
return DialogForm;
|
|
16726
16756
|
}(React.Component));
|
|
@@ -16731,7 +16761,9 @@ var DialogFormSubmit = /** @class */ (function (_super) {
|
|
|
16731
16761
|
}
|
|
16732
16762
|
DialogFormSubmit.prototype.render = function () {
|
|
16733
16763
|
var _this = this;
|
|
16734
|
-
return (jsxRuntime.jsx(DialogFormContext.Consumer, { children: function (context) {
|
|
16764
|
+
return (jsxRuntime.jsx(DialogFormContext.Consumer, { children: function (context) {
|
|
16765
|
+
return (jsxRuntime.jsx("button", __assign({ type: "submit", className: "cta dc__align-right", tabIndex: _this.props.tabIndex }, { children: context.isLoading ? jsxRuntime.jsx(Progressing, {}) : _this.props.children })));
|
|
16766
|
+
} }));
|
|
16735
16767
|
};
|
|
16736
16768
|
return DialogFormSubmit;
|
|
16737
16769
|
}(React.Component));
|
|
@@ -24230,31 +24262,35 @@ var MultiValueChipContainer = function (_a) {
|
|
|
24230
24262
|
var multiSelectStyles = {
|
|
24231
24263
|
control: function (base, state) { return (__assign(__assign({}, base), { cursor: state.isDisabled ? 'not-allowed' : 'normal', border: state.isFocused ? '1px solid #06c' : '1px solid #d6dbdf', boxShadow: 'none' })); },
|
|
24232
24264
|
menu: function (base, state) { return (__assign({}, base)); },
|
|
24233
|
-
option: function (base, state) {
|
|
24265
|
+
option: function (base, state) {
|
|
24266
|
+
return __assign(__assign({}, base), { backgroundColor: state.isFocused ? 'var(--N100)' : 'white', color: 'var(--N900)', padding: '8px 12px' });
|
|
24267
|
+
},
|
|
24234
24268
|
container: function (base, state) { return (__assign(__assign({}, base), { cursor: state.isDisabled ? 'not-allowed' : 'pointer' })); },
|
|
24235
24269
|
valueContainer: function (base, state) { return (__assign(__assign({}, base), { color: state.selectProps.menuIsOpen ? 'var(--N500)' : base.color })); },
|
|
24236
24270
|
};
|
|
24237
|
-
var CustomSelect = function (props) {
|
|
24271
|
+
var CustomSelect = function (props) {
|
|
24272
|
+
return jsxRuntime.jsx(ReactSelect, __assign({}, props));
|
|
24273
|
+
};
|
|
24238
24274
|
|
|
24239
24275
|
var css_248z$4 = ".info-bar-container .info_text .success {\n background-color: var(--G100);\n}\n.info-bar-container .warn {\n background: var(--Y100);\n border: solid var(--Y200);\n}\n.info-bar-container .warn .warning-icon path:nth-child(2) {\n fill: var(--Y700);\n}\n.info-bar-container .info_bar {\n background-color: var(--B100);\n border: 1px solid var(--B200);\n}\n.info-bar-container .error_bar {\n background-color: var(--R100);\n border: 1px solid var(--R200);\n}\n.info-bar-container .question-bar {\n background-color: var(--V100);\n border: 1px solid var(--V200);\n}";
|
|
24240
24276
|
styleInject(css_248z$4);
|
|
24241
24277
|
|
|
24242
|
-
|
|
24278
|
+
function InfoColourBar(_a) {
|
|
24243
24279
|
var message = _a.message, classname = _a.classname, Icon = _a.Icon, iconClass = _a.iconClass, iconSize = _a.iconSize, renderActionButton = _a.renderActionButton, linkText = _a.linkText, redirectLink = _a.redirectLink, linkOnClick = _a.linkOnClick, linkClass = _a.linkClass, internalLink = _a.internalLink, styles = _a.styles;
|
|
24244
24280
|
var renderLink = function () {
|
|
24245
24281
|
if (!linkText) {
|
|
24246
24282
|
return null;
|
|
24247
24283
|
}
|
|
24248
|
-
if (redirectLink) {
|
|
24284
|
+
else if (redirectLink) {
|
|
24249
24285
|
if (internalLink) {
|
|
24250
24286
|
return (jsxRuntime.jsx(reactRouterDom.Link, __assign({ to: redirectLink, onClick: linkOnClick, "data-testid": "info-bar-internal-link", className: "cursor dc__link dc__underline-onhover mr-5" }, { children: linkText })));
|
|
24251
24287
|
}
|
|
24252
|
-
return (jsxRuntime.jsx("a", __assign({ href: redirectLink, target: "_blank", onClick: linkOnClick, "data-testid": "info-bar-redirectLink", className: "cursor dc__link dc__underline-onhover mr-5"
|
|
24288
|
+
return (jsxRuntime.jsx("a", __assign({ href: redirectLink, target: "_blank", onClick: linkOnClick, "data-testid": "info-bar-redirectLink", className: "cursor dc__link dc__underline-onhover mr-5" }, { children: linkText })));
|
|
24253
24289
|
}
|
|
24254
24290
|
return (linkOnClick && (jsxRuntime.jsx("div", __assign({ onClick: linkOnClick, className: "cursor dc__link dc__underline-onhover", "data-testid": "info-bar-linkText" }, { children: linkText }))));
|
|
24255
24291
|
};
|
|
24256
24292
|
return (jsxRuntime.jsx("div", __assign({ className: "info-bar-container" }, { children: jsxRuntime.jsxs("div", __assign({ className: "".concat(classname, " info_text flex dc__content-space pt-8 pb-8 pl-12 pr-12 br-4 top fs-13 fw-4"), style: styles }, { children: [jsxRuntime.jsxs("div", __assign({ className: "flex top ".concat(typeof renderActionButton === 'function' ? 'mr-5' : '') }, { children: [jsxRuntime.jsx("div", __assign({ className: "icon-dim-".concat(iconSize !== null && iconSize !== void 0 ? iconSize : '20', " mr-10") }, { children: jsxRuntime.jsx(Icon, { className: "icon-dim-".concat(iconSize !== null && iconSize !== void 0 ? iconSize : '20', " ").concat(iconClass || '', " mr-8") }) })), jsxRuntime.jsxs("div", __assign({ className: "info-bar-message-wrapper ".concat(linkClass || '') }, { children: [jsxRuntime.jsx("span", __assign({ className: linkText && redirectLink ? 'mr-5' : '' }, { children: message })), renderLink()] }))] })), typeof renderActionButton === 'function' && renderActionButton()] })) })));
|
|
24257
|
-
}
|
|
24293
|
+
}
|
|
24258
24294
|
|
|
24259
24295
|
var getTeamListMin = function () {
|
|
24260
24296
|
// ignore active field
|
|
@@ -24264,7 +24300,9 @@ var getTeamListMin = function () {
|
|
|
24264
24300
|
if (response && response.result && Array.isArray(response.result)) {
|
|
24265
24301
|
list = response.result;
|
|
24266
24302
|
}
|
|
24267
|
-
list = list.sort(function (a, b) {
|
|
24303
|
+
list = list.sort(function (a, b) {
|
|
24304
|
+
return sortCallback('name', a, b);
|
|
24305
|
+
});
|
|
24268
24306
|
return {
|
|
24269
24307
|
code: response.code,
|
|
24270
24308
|
status: response.status,
|
|
@@ -24290,7 +24328,9 @@ function setImageTags(request, pipelineId, artifactId) {
|
|
|
24290
24328
|
return post("".concat(ROUTES.IMAGE_TAGGING, "/").concat(pipelineId, "/").concat(artifactId), request);
|
|
24291
24329
|
}
|
|
24292
24330
|
var processURL = function (url, params) {
|
|
24293
|
-
var validParams = Object.keys(params).filter(function (key) {
|
|
24331
|
+
var validParams = Object.keys(params).filter(function (key) {
|
|
24332
|
+
return params[key] != null;
|
|
24333
|
+
});
|
|
24294
24334
|
if (!validParams.length) {
|
|
24295
24335
|
return url;
|
|
24296
24336
|
}
|
|
@@ -24352,22 +24392,24 @@ var cdMaterialListModal = function (artifacts, offset, artifactId, artifactStatu
|
|
|
24352
24392
|
// It is going to be null but required in type so can't remove
|
|
24353
24393
|
lastExecution: material.lastExecution,
|
|
24354
24394
|
materialInfo: material.material_info
|
|
24355
|
-
? material.material_info.map(function (mat) {
|
|
24356
|
-
|
|
24357
|
-
|
|
24358
|
-
|
|
24359
|
-
|
|
24360
|
-
|
|
24361
|
-
|
|
24362
|
-
|
|
24363
|
-
|
|
24364
|
-
|
|
24365
|
-
|
|
24366
|
-
|
|
24367
|
-
|
|
24368
|
-
|
|
24369
|
-
|
|
24370
|
-
|
|
24395
|
+
? material.material_info.map(function (mat) {
|
|
24396
|
+
return {
|
|
24397
|
+
modifiedTime: mat.modifiedTime
|
|
24398
|
+
? moment(mat.modifiedTime).format('ddd, DD MMM YYYY, hh:mm A')
|
|
24399
|
+
: '',
|
|
24400
|
+
commitLink: createGitCommitUrl(mat.url, mat.revision),
|
|
24401
|
+
author: mat.author || '',
|
|
24402
|
+
message: mat.message || '',
|
|
24403
|
+
revision: mat.revision || '',
|
|
24404
|
+
tag: mat.tag || '',
|
|
24405
|
+
webhookData: mat.webhookData || '',
|
|
24406
|
+
url: mat.url || '',
|
|
24407
|
+
branch: (material.ciConfigureSourceType === SourceTypeMap.WEBHOOK
|
|
24408
|
+
? material.ciConfigureSourceValue
|
|
24409
|
+
: mat.branch) || '',
|
|
24410
|
+
type: material.ciConfigureSourceType || '',
|
|
24411
|
+
};
|
|
24412
|
+
})
|
|
24371
24413
|
: [],
|
|
24372
24414
|
filterState: filterState,
|
|
24373
24415
|
appliedFiltersTimestamp: (_b = material.appliedFiltersTimestamp) !== null && _b !== void 0 ? _b : '',
|
|
@@ -24426,7 +24468,9 @@ var processCDMaterialServiceResponse = function (cdMaterialsResult, stage, offse
|
|
|
24426
24468
|
var metaInfo = processCDMaterialsMetaInfo(cdMaterialsResult);
|
|
24427
24469
|
// TODO: On update of service would remove from here
|
|
24428
24470
|
var filteredMaterials = filter && filter === exports.CDMaterialFilterQuery.RESOURCE
|
|
24429
|
-
? materials.filter(function (material) {
|
|
24471
|
+
? materials.filter(function (material) {
|
|
24472
|
+
return material.filterState === exports.FilterStates.ALLOWED;
|
|
24473
|
+
})
|
|
24430
24474
|
: materials;
|
|
24431
24475
|
return __assign(__assign({ materials: filteredMaterials }, approvalInfo), metaInfo);
|
|
24432
24476
|
};
|
|
@@ -24457,27 +24501,27 @@ function extractImage(image) {
|
|
|
24457
24501
|
}
|
|
24458
24502
|
function createGitCommitUrl(url, revision) {
|
|
24459
24503
|
if (!url || !revision) {
|
|
24460
|
-
return
|
|
24504
|
+
return "NA";
|
|
24461
24505
|
}
|
|
24462
|
-
if (url.indexOf(
|
|
24463
|
-
var urlpart = url.split(
|
|
24506
|
+
if (url.indexOf("gitlab") > 0 || url.indexOf("github") > 0 || url.indexOf("azure") > 0) {
|
|
24507
|
+
var urlpart = url.split("@");
|
|
24464
24508
|
if (urlpart.length > 1) {
|
|
24465
|
-
return "https://"
|
|
24509
|
+
return "https://" + urlpart[1].split(".git")[0] + "/commit/" + revision;
|
|
24466
24510
|
}
|
|
24467
24511
|
if (urlpart.length == 1) {
|
|
24468
|
-
return
|
|
24512
|
+
return urlpart[0].split(".git")[0] + "/commit/" + revision;
|
|
24469
24513
|
}
|
|
24470
24514
|
}
|
|
24471
|
-
if (url.indexOf(
|
|
24472
|
-
var urlpart = url.split(
|
|
24515
|
+
if (url.indexOf("bitbucket") > 0) {
|
|
24516
|
+
var urlpart = url.split("@");
|
|
24473
24517
|
if (urlpart.length > 1) {
|
|
24474
|
-
return "https://"
|
|
24518
|
+
return "https://" + urlpart[1].split(".git")[0] + "/commits/" + revision;
|
|
24475
24519
|
}
|
|
24476
24520
|
if (urlpart.length == 1) {
|
|
24477
|
-
return
|
|
24521
|
+
return urlpart[0].split(".git")[0] + "/commits/" + revision;
|
|
24478
24522
|
}
|
|
24479
24523
|
}
|
|
24480
|
-
return
|
|
24524
|
+
return "NA";
|
|
24481
24525
|
}
|
|
24482
24526
|
function fetchChartTemplateVersions() {
|
|
24483
24527
|
return get("".concat(ROUTES.DEPLOYMENT_TEMPLATE_LIST, "?appId=-1&envId=-1"));
|
|
@@ -24500,7 +24544,7 @@ var Checkbox$1 = /** @class */ (function (_super) {
|
|
|
24500
24544
|
Checkbox.prototype.render = function () {
|
|
24501
24545
|
var _a;
|
|
24502
24546
|
var rootClassName = "".concat(this.props.rootClassName ? this.props.rootClassName : '');
|
|
24503
|
-
return (jsxRuntime.jsxs("label", __assign({ className: "dc__position-rel flex left cursor ".concat(rootClassName), onClick: (_a = this.props) === null || _a === void 0 ? void 0 : _a.onClick }, { children: [jsxRuntime.jsx("input", { type: "checkbox", className:
|
|
24547
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("label", __assign({ className: "dc__position-rel flex left cursor ".concat(rootClassName), onClick: (_a = this.props) === null || _a === void 0 ? void 0 : _a.onClick }, { children: [jsxRuntime.jsx("input", { type: "checkbox", className: 'form__checkbox', disabled: this.props.disabled, value: this.props.value, onChange: this.props.onChange, tabIndex: this.props.tabIndex, checked: this.props.isChecked, id: this.props.id, "data-testid": this.props.dataTestId }), jsxRuntime.jsx("span", { className: "form__checkbox-container", "data-testid": "".concat(this.props.dataTestId, "-chk-span") }), jsxRuntime.jsx("span", __assign({ className: "form__checkbox-label" }, { children: this.props.children }))] })) }));
|
|
24504
24548
|
};
|
|
24505
24549
|
return Checkbox;
|
|
24506
24550
|
}(React.Component));
|
|
@@ -24541,21 +24585,23 @@ function ScanVulnerabilitiesTable(_a) {
|
|
|
24541
24585
|
window.open("https://cve.mitre.org/cgi-bin/cvename.cgi?name=".concat(vulnerability.name), '_blank');
|
|
24542
24586
|
} }, { children: [jsxRuntime.jsx("td", __assign({ className: "security-tab__cell-cve dc__cve-cell" }, { children: jsxRuntime.jsx("a", __assign({ href: "https://cve.mitre.org/cgi-bin/cvename.cgi?name=".concat(vulnerability.name), rel: "noopener noreferrer", target: "_blank" }, { children: vulnerability.name })) })), jsxRuntime.jsx("td", __assign({ className: "security-tab__cell-severity" }, { children: jsxRuntime.jsx("span", __assign({ className: "fill-".concat((_a = vulnerability.severity) === null || _a === void 0 ? void 0 : _a.toLowerCase()) }, { children: vulnerability.severity })) })), jsxRuntime.jsx("td", __assign({ className: "security-tab__cell-package" }, { children: vulnerability.package })), jsxRuntime.jsx("td", __assign({ className: "security-tab__cell-current-ver" }, { children: vulnerability.version })), jsxRuntime.jsx("td", __assign({ className: "security-tab__cell-fixed-ver" }, { children: vulnerability.fixedVersion })), jsxRuntime.jsx("td", __assign({ className: "security-tab__cell-policy security-tab__cell-policy--".concat((_b = vulnerability.policy) === null || _b === void 0 ? void 0 : _b.toLowerCase()) }, { children: (_c = vulnerability.policy) === null || _c === void 0 ? void 0 : _c.toLowerCase() }))] })));
|
|
24543
24587
|
};
|
|
24544
|
-
return (jsxRuntime.jsx("table", __assign({ className: "security-tab__table" }, { children: jsxRuntime.jsxs("tbody", { children: [jsxRuntime.jsxs("tr", __assign({ className: "security-tab__table-header" }, { children: [jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-cve" }, { children: "CVE" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-severity" }, { children: "Severity" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-package" }, { children: "Package" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-current-ver" }, { children: "Current Version" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-fixed-ver" }, { children: "Fixed In Version" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-policy" }, { children: "Policy" }))] })), vulnerabilities.map(function (vulnerability) {
|
|
24588
|
+
return (jsxRuntime.jsx("table", __assign({ className: "security-tab__table" }, { children: jsxRuntime.jsxs("tbody", { children: [jsxRuntime.jsxs("tr", __assign({ className: "security-tab__table-header" }, { children: [jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-cve" }, { children: "CVE" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-severity" }, { children: "Severity" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-package" }, { children: "Package" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-current-ver" }, { children: "Current Version" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-fixed-ver" }, { children: "Fixed In Version" })), jsxRuntime.jsx("th", __assign({ className: "security-cell-header security-tab__cell-policy" }, { children: "Policy" }))] })), vulnerabilities.map(function (vulnerability) {
|
|
24589
|
+
return renderRow(vulnerability);
|
|
24590
|
+
})] }) })));
|
|
24545
24591
|
}
|
|
24546
24592
|
|
|
24547
24593
|
var css_248z$1 = ".radio-group {\n height: 30px;\n background: white;\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 4px;\n border-radius: 4px;\n}\n.radio-group .label,\n.radio-group .radio,\n.radio-group .checkbox {\n margin: 0;\n}\n.radio-group .radio {\n height: 100%;\n width: auto;\n color: var(--N400);\n display: flex;\n align-items: center;\n}\n.radio-group .radio + .radio {\n margin-top: 0;\n}\n.radio-group input[type=checkbox] {\n display: contents;\n overflow: hidden;\n max-width: 0px;\n height: 0;\n opacity: 0;\n margin: unset;\n}\n.radio-group input + .radio__item-label {\n padding: 4px 6px;\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n transition: all 0.5s;\n cursor: pointer;\n}\n.radio-group input[type=checkbox]:checked + .radio__item-label {\n background: #2c3354;\n color: white;\n border-radius: 4px;\n}";
|
|
24548
24594
|
styleInject(css_248z$1);
|
|
24549
24595
|
|
|
24550
|
-
var RadioContext =
|
|
24596
|
+
var RadioContext = React.createContext(null);
|
|
24551
24597
|
function useRadioContext() {
|
|
24552
|
-
var context =
|
|
24598
|
+
var context = React.useContext(RadioContext);
|
|
24553
24599
|
if (!context) {
|
|
24554
24600
|
throw new Error("Radio compound components cannot be rendered outside the Toggle component");
|
|
24555
24601
|
}
|
|
24556
24602
|
return context;
|
|
24557
24603
|
}
|
|
24558
|
-
var RadioGroup =
|
|
24604
|
+
var RadioGroup = React.memo(function RadioGroup(_a) {
|
|
24559
24605
|
var name = _a.name, onChange = _a.onChange, children = _a.children, _b = _a.className, className = _b === void 0 ? '' : _b, initialTab = _a.initialTab, _c = _a.disabled, disabled = _c === void 0 ? false : _c; _a.dataTestId;
|
|
24560
24606
|
var _d = __read(React.useState(null), 2), selected = _d[0], select = _d[1];
|
|
24561
24607
|
React.useEffect(function () {
|
|
@@ -24565,7 +24611,7 @@ var RadioGroup = React__namespace.memo(function (_a) {
|
|
|
24565
24611
|
}, [initialTab]);
|
|
24566
24612
|
return (jsxRuntime.jsx(RadioContext.Provider, __assign({ value: { name: name, selected: selected, select: select, disabled: disabled, onChange: onChange } }, { children: jsxRuntime.jsx("div", __assign({ className: "".concat(className, " radio-group") }, { children: children })) })));
|
|
24567
24613
|
});
|
|
24568
|
-
|
|
24614
|
+
function Radio(_a) {
|
|
24569
24615
|
var value = _a.value, children = _a.children, _b = _a.className, className = _b === void 0 ? '' : _b, _c = _a.showTippy, showTippy = _c === void 0 ? false : _c, _d = _a.tippyContent, tippyContent = _d === void 0 ? '' : _d, _e = _a.tippyPlacement, tippyPlacement = _e === void 0 ? 'bottom' : _e, _f = _a.canSelect, canSelect = _f === void 0 ? true : _f, _g = _a.isDisabled, isDisabled = _g === void 0 ? false : _g, _h = _a.tippyClass, tippyClass = _h === void 0 ? '' : _h, dataTestId = _a.dataTestId;
|
|
24570
24616
|
var _j = useRadioContext(), name = _j.name, selected = _j.selected, select = _j.select, disabled = _j.disabled, onChange = _j.onChange;
|
|
24571
24617
|
return (jsxRuntime.jsx(ConditionalWrap, __assign({ condition: showTippy, wrap: function (children) { return (jsxRuntime.jsx(Tippy, __assign({ className: "default-tt w-250 ".concat(tippyClass), arrow: false, placement: tippyPlacement, content: tippyContent }, { children: children }))); } }, { children: jsxRuntime.jsxs("label", __assign({ className: "".concat(className, " radio ").concat(isDisabled || disabled ? 'disabled' : '') }, { children: [jsxRuntime.jsx("input", { type: "checkbox", value: value, name: name, checked: value === selected, onChange: function (e) {
|
|
@@ -24575,7 +24621,7 @@ var Radio = function (_a) {
|
|
|
24575
24621
|
}
|
|
24576
24622
|
onChange(e);
|
|
24577
24623
|
}, disabled: isDisabled || disabled }), jsxRuntime.jsx("span", __assign({ className: "radio__item-label", "data-testid": dataTestId }, { children: children }))] })) })));
|
|
24578
|
-
}
|
|
24624
|
+
}
|
|
24579
24625
|
RadioGroup.Radio = Radio;
|
|
24580
24626
|
|
|
24581
24627
|
exports.RefVariableType = void 0;
|
|
@@ -24661,7 +24707,7 @@ var SvgIcInfoFilled = function SvgIcInfoFilled(props) {
|
|
|
24661
24707
|
};
|
|
24662
24708
|
var info = "data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2032%2032%22%3E%20%20%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%20%20%20%20%20%20%20%20%3Cpath%20d%3D%22M0%200h32v32H0z%22%2F%3E%20%20%20%20%20%20%20%20%3Cpath%20fill%3D%22%2306C%22%20d%3D%22M16%202.667C8.64%202.667%202.667%208.64%202.667%2016S8.64%2029.333%2016%2029.333%2029.333%2023.36%2029.333%2016%2023.36%202.667%2016%202.667z%22%2F%3E%20%20%20%20%20%20%20%20%3Cpath%20fill%3D%22%23FFF%22%20d%3D%22M16%2014.667c.736%200%201.333.597%201.333%201.333v5.333a1.333%201.333%200%201%201-2.666%200V16c0-.736.597-1.333%201.333-1.333zm0-5.334A1.333%201.333%200%201%201%2016%2012a1.333%201.333%200%200%201%200-2.667z%22%2F%3E%20%20%20%20%3C%2Fg%3E%3C%2Fsvg%3E";
|
|
24663
24709
|
|
|
24664
|
-
|
|
24710
|
+
function DeleteComponent(_a) {
|
|
24665
24711
|
var setDeleting = _a.setDeleting, toggleConfirmation = _a.toggleConfirmation, deleteComponent = _a.deleteComponent, title = _a.title, component = _a.component, payload = _a.payload, _b = _a.confirmationDialogDescription, confirmationDialogDescription = _b === void 0 ? '' : _b, _c = _a.redirectTo, redirectTo = _c === void 0 ? false : _c, _d = _a.url, url = _d === void 0 ? '' : _d, reload = _a.reload, _e = _a.configuration, configuration = _e === void 0 ? '' : _e, closeCustomComponent = _a.closeCustomComponent;
|
|
24666
24712
|
var _f = __read(React.useState(false), 2), showCannotDeleteDialogModal = _f[0], setCannotDeleteDialogModal = _f[1];
|
|
24667
24713
|
var push = reactRouterDom.useHistory().push;
|
|
@@ -24711,10 +24757,14 @@ var DeleteComponent = function (_a) {
|
|
|
24711
24757
|
closeCustomComponent();
|
|
24712
24758
|
}
|
|
24713
24759
|
};
|
|
24714
|
-
var renderCannotDeleteDialogModal = function () {
|
|
24715
|
-
|
|
24760
|
+
var renderCannotDeleteDialogModal = function () {
|
|
24761
|
+
return (jsxRuntime.jsxs(ConfirmationDialog, __assign({ className: "confirmation-dialog__body--w-360" }, { children: [jsxRuntime.jsx(ConfirmationDialog.Icon, { src: info }), jsxRuntime.jsx(ConfirmationDialog.Body, { title: "Cannot delete ".concat(component, " '").concat(title, "'") }), jsxRuntime.jsx("p", __assign({ className: "fs-13 cn-7 " }, { children: confirmationDialogDescription })), jsxRuntime.jsx(ConfirmationDialog.ButtonGroup, { children: jsxRuntime.jsx("button", __assign({ type: "button", className: "cta", onClick: handleConfirmation }, { children: "Okay" })) })] })));
|
|
24762
|
+
};
|
|
24763
|
+
var renderDeleteDialog = function () {
|
|
24764
|
+
return (jsxRuntime.jsx(DeleteDialog, __assign({ title: "Delete ".concat(component, " '").concat(title, "'"), delete: handleDelete, closeDelete: function () { return toggleConfirmation(false); }, dataTestId: "delete-dialog" }, { children: jsxRuntime.jsx(DeleteDialog.Description, { children: jsxRuntime.jsxs("p", { children: ["Are you sure you want to delete this ", configuration ? configuration : component, "? "] }) }) })));
|
|
24765
|
+
};
|
|
24716
24766
|
return (jsxRuntime.jsxs("div", { children: [!showCannotDeleteDialogModal && renderDeleteDialog(), showCannotDeleteDialogModal && renderCannotDeleteDialogModal()] }));
|
|
24717
|
-
}
|
|
24767
|
+
}
|
|
24718
24768
|
|
|
24719
24769
|
var _path$6;
|
|
24720
24770
|
function _extends$a() { _extends$a = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$a.apply(this, arguments); }
|
|
@@ -24838,13 +24888,13 @@ var ImageTagsContainer = function (_a) {
|
|
|
24838
24888
|
var
|
|
24839
24889
|
// Setting it to zero in case of external pipeline
|
|
24840
24890
|
ciPipelineId = _a.ciPipelineId, artifactId = _a.artifactId, imageComment = _a.imageComment, imageReleaseTags = _a.imageReleaseTags, updateCurrentAppMaterial = _a.updateCurrentAppMaterial, appReleaseTagNames = _a.appReleaseTagNames, setAppReleaseTagNames = _a.setAppReleaseTagNames, tagsEditable = _a.tagsEditable, setTagsEditable = _a.setTagsEditable, toggleCardMode = _a.toggleCardMode, hideHardDelete = _a.hideHardDelete, forceReInit = _a.forceReInit, isSuperAdmin = _a.isSuperAdmin;
|
|
24841
|
-
var _b = __read(React.useState(imageReleaseTags
|
|
24891
|
+
var _b = __read(React.useState(imageReleaseTags ? imageReleaseTags : []), 2), initialTags = _b[0], setInitialTags = _b[1];
|
|
24842
24892
|
var _c = __read(React.useState(imageComment ? imageComment.comment : ''), 2), initialDescription = _c[0], setInitialDescription = _c[1];
|
|
24843
|
-
var _d = __read(React.useState(appReleaseTagNames
|
|
24893
|
+
var _d = __read(React.useState(appReleaseTagNames ? appReleaseTagNames : []), 2), existingTags = _d[0], setExistingTags = _d[1];
|
|
24844
24894
|
var _e = __read(React.useState(imageComment ? imageComment.comment : ''), 2), newDescription = _e[0], setNewDescription = _e[1];
|
|
24845
24895
|
var _f = __read(React.useState(false), 2), isEditing = _f[0], setIsEditing = _f[1];
|
|
24846
24896
|
var _g = __read(React.useState(false), 2), showTagsWarning = _g[0], setShowTagsWarning = _g[1];
|
|
24847
|
-
var _h = __read(React.useState(imageReleaseTags
|
|
24897
|
+
var _h = __read(React.useState(imageReleaseTags ? imageReleaseTags : []), 2), displayedTags = _h[0], setDisplayedTags = _h[1];
|
|
24848
24898
|
var _j = __read(React.useState(''), 2), tagErrorMessage = _j[0], setTagErrorMessage = _j[1];
|
|
24849
24899
|
var _k = __read(React.useState([]), 2), createTags = _k[0], setCreateTags = _k[1];
|
|
24850
24900
|
var _l = __read(React.useState([]), 2), softDeleteTags = _l[0], setSoftDeleteTags = _l[1];
|
|
@@ -24856,14 +24906,14 @@ var ImageTagsContainer = function (_a) {
|
|
|
24856
24906
|
reInitState();
|
|
24857
24907
|
}, [imageReleaseTags, imageComment, tagsEditable]);
|
|
24858
24908
|
React.useEffect(function () {
|
|
24859
|
-
setExistingTags(appReleaseTagNames
|
|
24909
|
+
setExistingTags(appReleaseTagNames ? appReleaseTagNames : []);
|
|
24860
24910
|
}, [appReleaseTagNames]);
|
|
24861
24911
|
var reInitState = function () {
|
|
24862
24912
|
if (forceReInit || !isEditing) {
|
|
24863
|
-
setInitialTags(imageReleaseTags
|
|
24913
|
+
setInitialTags(imageReleaseTags ? imageReleaseTags : []);
|
|
24864
24914
|
setInitialDescription(imageComment ? imageComment.comment : '');
|
|
24865
24915
|
setNewDescription(imageComment ? imageComment.comment : '');
|
|
24866
|
-
setDisplayedTags(imageReleaseTags
|
|
24916
|
+
setDisplayedTags(imageReleaseTags ? imageReleaseTags : []);
|
|
24867
24917
|
setIsEditing(false);
|
|
24868
24918
|
}
|
|
24869
24919
|
};
|
|
@@ -25046,8 +25096,12 @@ var ImageTagsContainer = function (_a) {
|
|
|
25046
25096
|
return [2 /*return*/];
|
|
25047
25097
|
});
|
|
25048
25098
|
}); };
|
|
25049
|
-
var renderInfoCard = function () {
|
|
25050
|
-
|
|
25099
|
+
var renderInfoCard = function () {
|
|
25100
|
+
return (jsxRuntime.jsx(TippyCustomized, __assign({ theme: exports.TippyTheme.white, className: "w-300 fcv-5", placement: "right", Icon: SvgIcHelp, heading: "Release tags", showCloseButton: true, trigger: "click", interactive: true, additionalContent: getBuildContextAdditionalContent() }, { children: jsxRuntime.jsx("div", __assign({ className: "flex" }, { children: jsxRuntime.jsx(SvgIcHelpOutline, { className: "fcn-5 ml-8 cursor icon-dim-16" }) })) })));
|
|
25101
|
+
};
|
|
25102
|
+
var getBuildContextAdditionalContent = function () {
|
|
25103
|
+
return (jsxRuntime.jsxs("div", __assign({ className: "h-250 fs-13 dc__overflow-scroll p-12" }, { children: [jsxRuntime.jsx("div", { children: "Release tags allow you to tag container images with readable and relatable tags eg. v1.0." }), jsxRuntime.jsxs("ul", __assign({ className: "pl-20 mt-8" }, { children: [jsxRuntime.jsx("li", { children: "A release tag can only be added if a workflow has CD pipelines deploying to Production environments." }), jsxRuntime.jsx("li", { children: "Multiple tags can be added to an image." }), jsxRuntime.jsx("li", { children: "Multiple images in an application cannot have the same tag." }), jsxRuntime.jsx("li", { children: "Tags cannot be deleted once saved. Although, you can soft delete a tag if an unwanted tag has been added." })] }))] })));
|
|
25104
|
+
};
|
|
25051
25105
|
var creatableRef = React.useRef(null);
|
|
25052
25106
|
if (newDescription === '' && displayedTags.length === 0 && !isEditing) {
|
|
25053
25107
|
return tagsEditable ? (jsxRuntime.jsx("div", __assign({ className: "bcn-0 mt-8 add-image-button" }, { children: jsxRuntime.jsx(AddImageButton, { handleEditClick: handleEditClick }) }))) : (jsxRuntime.jsx("div", {}));
|
|
@@ -25091,7 +25145,7 @@ var ImageTagsContainer = function (_a) {
|
|
|
25091
25145
|
}, disabled: loading }, { children: "Cancel" })), jsxRuntime.jsx("button", __assign({ className: "cta flex h-32 lh-32-imp ml-12", "data-testid": "save-tags-button", type: "button", onClick: function (e) {
|
|
25092
25146
|
stopPropagation(e);
|
|
25093
25147
|
onClickSave();
|
|
25094
|
-
}, disabled: loading }, { children: loading ? jsxRuntime.jsx(Progressing, {}) : 'Save' }))] }))] }))) : (jsxRuntime.jsxs("div", __assign({ className: "top br-4 bcn-0 image-tags-container flexbox" }, { children: [jsxRuntime.jsx("div", __assign({ className: "flex left image-tag-left-border w-100 mt-8 mb-8 pr-10 pl-10", "data-testid": "image-tags-container-hover" }, { children: jsxRuntime.jsxs("div", __assign({ className:
|
|
25148
|
+
}, disabled: loading }, { children: loading ? jsxRuntime.jsx(Progressing, {}) : 'Save' }))] }))] }))) : (jsxRuntime.jsxs("div", __assign({ className: "top br-4 bcn-0 image-tags-container flexbox" }, { children: [jsxRuntime.jsx("div", __assign({ className: "flex left image-tag-left-border w-100 mt-8 mb-8 pr-10 pl-10", "data-testid": "image-tags-container-hover" }, { children: jsxRuntime.jsxs("div", __assign({ className: 'w-100' }, { children: [initialDescription && jsxRuntime.jsx("div", __assign({ className: "mb-6 fs-13 lh-20 dc__word-break-all" }, { children: initialDescription })), jsxRuntime.jsx("div", __assign({ className: "flex-wrap flex left" }, { children: initialTags === null || initialTags === void 0 ? void 0 : initialTags.map(function (tag, index) { return (jsxRuntime.jsx(ImageTagButton, { text: tag === null || tag === void 0 ? void 0 : tag.tagName, isSoftDeleted: tag === null || tag === void 0 ? void 0 : tag.deleted, isEditing: isEditing, onSoftDeleteClick: function (e) {
|
|
25095
25149
|
stopPropagation(e);
|
|
25096
25150
|
handleTagSoftDelete(index);
|
|
25097
25151
|
}, onHardDeleteClick: function (e) {
|
|
@@ -25111,10 +25165,12 @@ var ImageTagButton = function (_a) {
|
|
|
25111
25165
|
if (duplicateTag) {
|
|
25112
25166
|
return 'cr-5 bcr-1 er-2';
|
|
25113
25167
|
}
|
|
25114
|
-
if (isSoftDeleted) {
|
|
25168
|
+
else if (isSoftDeleted) {
|
|
25115
25169
|
return 'cy-7 bcy-1 dc__strike-through ey-2';
|
|
25116
25170
|
}
|
|
25117
|
-
|
|
25171
|
+
else {
|
|
25172
|
+
return 'cn-9';
|
|
25173
|
+
}
|
|
25118
25174
|
};
|
|
25119
25175
|
return (jsxRuntime.jsxs("div", __assign({ className: "br-4 en-2 bw-1 mr-8 bcn-0 mb-4 pt-2 pr-8 pb-2 pl-8 tag-class dc__word-break-all flex ".concat(isEditing ? 'icon-hover' : '', " ").concat(tabColor()) }, { children: [duplicateTag ? (jsxRuntime.jsx(SvgIcErrorExclamation, { className: "icon-dim-12 mr-4" })) : (jsxRuntime.jsx(Tippy, __assign({ className: "default-tt", arrow: true, placement: "top", content: isInSoftDeleteTags ? 'Restore tag' : 'Soft delete tag' }, { children: jsxRuntime.jsx("div", __assign({ className: "action-icon mr-4 lh-16 pt-3 ".concat(isInSoftDeleteTags || (tagId !== 0 && !isSoftDeleted) ? 'show-icon' : '') }, { children: jsxRuntime.jsx(IconComponent, { className: "icon-dim-12 cursor ".concat(isSoftDeleted ? 'scn-6' : 'fcn-6', " "), "data-testid": "".concat(text, "-tag-soft-delete"), onClick: onSoftDeleteClick }) })) }))), text, jsxRuntime.jsx(Tippy, __assign({ className: "default-tt", arrow: true, placement: "top", content: "Remove tag" }, { children: jsxRuntime.jsx("div", __assign({ className: "action-icon ml-4 lh-16 pt-3 ".concat(canTagBeHardDelete ? 'show-icon' : '') }, { children: jsxRuntime.jsx(SvgIcCross, { className: "icon-dim-12 fcn-6 cursor", "data-testid": "".concat(text, "-tag-hard-delete"), onClick: onHardDeleteClick }) })) }))] })));
|
|
25120
25176
|
};
|
|
@@ -25157,7 +25213,7 @@ var ResizableTextarea = function (_a) {
|
|
|
25157
25213
|
if (maxHeight && nextHeight > maxHeight) {
|
|
25158
25214
|
nextHeight = maxHeight;
|
|
25159
25215
|
}
|
|
25160
|
-
_textRef.current.style.height =
|
|
25216
|
+
_textRef.current.style.height = nextHeight + 2 + 'px';
|
|
25161
25217
|
}, 500, [text]);
|
|
25162
25218
|
return (jsxRuntime.jsx("textarea", __assign({ "data-testid": dataTestId, ref: function (el) { return (_textRef.current = el); }, value: text, placeholder: placeholder, className: "dc__resizable-textarea ".concat(className), onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, style: { lineHeight: "".concat(lineHeight, "px"), padding: "".concat(padding, "px") }, spellCheck: false, disabled: disabled }, props)));
|
|
25163
25219
|
};
|
|
@@ -25236,7 +25292,7 @@ function DebouncedSearch(_a) {
|
|
|
25236
25292
|
// This is meant to be a reusable component that will provide a grid like dynamic layout where xs is the number of columns out of 12 that the item will take up
|
|
25237
25293
|
function Grid(_a) {
|
|
25238
25294
|
var container = _a.container, _b = _a.spacing, spacing = _b === void 0 ? 0 : _b, item = _a.item, xs = _a.xs, _c = _a.containerClass, containerClass = _c === void 0 ? '' : _c, _d = _a.itemClass, itemClass = _d === void 0 ? '' : _d, children = _a.children, containerDivProps = __rest(_a, ["container", "spacing", "item", "xs", "containerClass", "itemClass", "children"]);
|
|
25239
|
-
var containerStyles = container ? { gap:
|
|
25295
|
+
var containerStyles = container ? { gap: spacing + 'px' } : {};
|
|
25240
25296
|
if (item) {
|
|
25241
25297
|
var getColumnWidth = function () {
|
|
25242
25298
|
var percentageWidth = (xs / 12) * 100;
|
|
@@ -25333,10 +25389,12 @@ var useClickOutside = function (ref, callback) {
|
|
|
25333
25389
|
};
|
|
25334
25390
|
|
|
25335
25391
|
var timeout;
|
|
25336
|
-
var getSize = function () {
|
|
25337
|
-
|
|
25338
|
-
|
|
25339
|
-
|
|
25392
|
+
var getSize = function () {
|
|
25393
|
+
return {
|
|
25394
|
+
width: window.innerWidth,
|
|
25395
|
+
height: window.innerHeight,
|
|
25396
|
+
};
|
|
25397
|
+
};
|
|
25340
25398
|
var useWindowSize = function () {
|
|
25341
25399
|
var _a = __read(React.useState(getSize), 2), windowSize = _a[0], setWindowSize = _a[1];
|
|
25342
25400
|
function handleResize(e) {
|
|
@@ -25412,13 +25470,15 @@ var triggerStatus = function (triggerDetailStatus) {
|
|
|
25412
25470
|
if (triggerStatus === TIMELINE_STATUS.ABORTED || triggerStatus === TIMELINE_STATUS.DEGRADED) {
|
|
25413
25471
|
return 'Failed';
|
|
25414
25472
|
}
|
|
25415
|
-
if (triggerStatus === TIMELINE_STATUS.HEALTHY) {
|
|
25473
|
+
else if (triggerStatus === TIMELINE_STATUS.HEALTHY) {
|
|
25416
25474
|
return 'Succeeded';
|
|
25417
25475
|
}
|
|
25418
|
-
if (triggerStatus === TIMELINE_STATUS.INPROGRESS) {
|
|
25476
|
+
else if (triggerStatus === TIMELINE_STATUS.INPROGRESS) {
|
|
25419
25477
|
return 'Inprogress';
|
|
25420
25478
|
}
|
|
25421
|
-
|
|
25479
|
+
else {
|
|
25480
|
+
return triggerDetailStatus;
|
|
25481
|
+
}
|
|
25422
25482
|
};
|
|
25423
25483
|
|
|
25424
25484
|
function AppStatus(_a) {
|
|
@@ -25437,10 +25497,12 @@ function AppStatus(_a) {
|
|
|
25437
25497
|
if (iconClass) {
|
|
25438
25498
|
return jsxRuntime.jsx("span", { className: "dc__app-summary__icon icon-dim-16 ".concat(iconClass, " ").concat(iconClass, "--node") });
|
|
25439
25499
|
}
|
|
25440
|
-
if (isVirtualEnv) {
|
|
25500
|
+
else if (isVirtualEnv) {
|
|
25441
25501
|
return (jsxRuntime.jsx("span", { className: "dc__app-summary__icon icon-dim-16 ".concat(StatusConstants.NOT_DEPLOYED.lowerCase, " ").concat(StatusConstants.NOT_DEPLOYED.lowerCase, "--node") }));
|
|
25442
25502
|
}
|
|
25443
|
-
|
|
25503
|
+
else {
|
|
25504
|
+
return (jsxRuntime.jsx(Tippy, __assign({ className: "default-tt w-200", arrow: false, placement: "top", content: "To fetch app status for GitOps based deployments open the app detail page" }, { children: jsxRuntime.jsx(SvgIcInfoOutlined, { className: "icon-dim-16 fcn-6" }) })));
|
|
25505
|
+
}
|
|
25444
25506
|
};
|
|
25445
25507
|
return hideStatusMessage ? (iconClass || isVirtualEnv ? (jsxRuntime.jsx(Tippy, __assign({ className: "default-tt", arrow: false, placement: "top", content: textContent }, { children: jsxRuntime.jsx("div", __assign({ className: "flex" }, { children: renderIcon() })) }))) : (renderIcon())) : (jsxRuntime.jsxs("div", __assign({ className: "flex left" }, { children: [jsxRuntime.jsx("div", __assign({ className: "flex mr-6" }, { children: renderIcon() })), jsxRuntime.jsx("p", __assign({ "data-testid": "".concat(status, "-app-status"), className: "dc__truncate-text dc__first-letter-capitalize cn-6 m-0" }, { children: textContent }))] })));
|
|
25446
25508
|
}
|
|
@@ -25528,7 +25590,9 @@ var FieldErrorTemplate = function (_a) {
|
|
|
25528
25590
|
var id = utils.errorId(idSchema);
|
|
25529
25591
|
return (errors.length > 0 && (jsxRuntime.jsx("span", __assign({ id: id }, { children: errors
|
|
25530
25592
|
.filter(function (elem) { return !!elem; })
|
|
25531
|
-
.map(function (error, index) {
|
|
25593
|
+
.map(function (error, index) {
|
|
25594
|
+
return (jsxRuntime.jsxs("span", __assign({ className: "form__error" }, { children: [jsxRuntime.jsx(SvgIcWarning, { className: "form__icon form__icon--error" }), error] }), index));
|
|
25595
|
+
}) }))));
|
|
25532
25596
|
};
|
|
25533
25597
|
|
|
25534
25598
|
var Field = function (_a) {
|
|
@@ -25541,7 +25605,9 @@ var Field = function (_a) {
|
|
|
25541
25605
|
if (properties.length) {
|
|
25542
25606
|
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx(FieldRowWithLabel, __assign({ label: title, required: required, showLabel: true, id: idSchema.$id, shouldAlignCenter: false }, { children: jsxRuntime.jsx("div", { children: Properties }) })), ActionButton] }));
|
|
25543
25607
|
}
|
|
25544
|
-
|
|
25608
|
+
else {
|
|
25609
|
+
return (jsxRuntime.jsx(FieldRowWithLabel, __assign({ label: title, required: required, showLabel: true, id: idSchema.$id }, { children: ActionButton })));
|
|
25610
|
+
}
|
|
25545
25611
|
}
|
|
25546
25612
|
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [Properties, ActionButton] }));
|
|
25547
25613
|
};
|
|
@@ -28031,7 +28097,9 @@ var translateString = function (stringToTranslate, params) {
|
|
|
28031
28097
|
};
|
|
28032
28098
|
var getCommonSelectStyle = function (styleOverrides) {
|
|
28033
28099
|
if (styleOverrides === void 0) { styleOverrides = {}; }
|
|
28034
|
-
return
|
|
28100
|
+
return __assign({ menuList: function (base) { return (__assign(__assign({}, base), { paddingTop: 0, paddingBottom: 0 })); }, control: function (base, state) { return (__assign(__assign({}, base), { minHeight: '32px', boxShadow: 'none', backgroundColor: 'var(--N50)', border: state.isFocused ? '1px solid var(--B500)' : '1px solid var(--N200)', cursor: 'pointer' })); }, option: function (base, state) { return (__assign(__assign({}, base), { color: 'var(--N900)', backgroundColor: state.isFocused ? 'var(--N100)' : 'white', padding: '10px 12px' })); }, dropdownIndicator: function (base, state) { return (__assign(__assign({}, base), { color: 'var(--N400)', padding: '0 8px', transition: 'all .2s ease', transform: state.selectProps.menuIsOpen ? 'rotate(180deg)' : 'rotate(0deg)' })); }, valueContainer: function (base, state) { return (__assign(__assign({}, base), { padding: '0 8px', fontWeight: '400', color: state.selectProps.menuIsOpen ? 'var(--N500)' : base.color })); }, loadingMessage: function (base) { return (__assign(__assign({}, base), { color: 'var(--N600)' })); }, noOptionsMessage: function (base) { return (__assign(__assign({}, base), { color: 'var(--N600)' })); }, multiValue: function (base, state) {
|
|
28101
|
+
return __assign(__assign({}, base), { border: "1px solid var(--N200)", borderRadius: "4px", background: 'white', height: '28px', marginRight: '8px', padding: '2px', fontSize: '12px' });
|
|
28102
|
+
} }, styleOverrides);
|
|
28035
28103
|
};
|
|
28036
28104
|
/**
|
|
28037
28105
|
* Returns the redirection props for a url
|
|
@@ -28190,10 +28258,10 @@ var SvgIcRotateDevtron = function SvgIcRotateDevtron(props) {
|
|
|
28190
28258
|
}))));
|
|
28191
28259
|
};
|
|
28192
28260
|
|
|
28193
|
-
|
|
28261
|
+
function DevtronProgressing(_a) {
|
|
28194
28262
|
var classes = _a.classes, parentClasses = _a.parentClasses;
|
|
28195
|
-
return (jsxRuntime.jsx("div", __assign({ className: parentClasses
|
|
28196
|
-
}
|
|
28263
|
+
return (jsxRuntime.jsx("div", __assign({ className: parentClasses ? parentClasses : '' }, { children: jsxRuntime.jsx(SvgIcRotateDevtron, { className: classes ? classes : '' }) })));
|
|
28264
|
+
}
|
|
28197
28265
|
|
|
28198
28266
|
// @TODO: Generalize this component to be used in CodeEditor as Chart selector toolbar
|
|
28199
28267
|
// when the Code Editor is moved to the fe-common-lib
|
|
@@ -28242,13 +28310,13 @@ var ChartVersionAndTypeSelector = function (_a) {
|
|
|
28242
28310
|
return (jsxRuntime.jsxs("div", __assign({ className: "flex" }, { children: [jsxRuntime.jsxs("div", __assign({ className: "chart-type-options flex", "data-testid": "chart-type-options" }, { children: [jsxRuntime.jsx("span", __assign({ className: "chart-type-options-label mr-4" }, { children: "Chart Type" })), jsxRuntime.jsx(ReactSelect, { value: selectedChartType !== null && selectedChartType !== void 0 ? selectedChartType : chartTypeOptions[0], options: chartTypeOptions, onChange: handleChartTypeChange, styles: customStyles })] })), jsxRuntime.jsxs("div", __assign({ className: "chart-version-options flex", "data-testid": "chart-version-options" }, { children: [jsxRuntime.jsx("span", __assign({ className: "chart-version-options-label mr-4" }, { children: "Chart Version" })), jsxRuntime.jsx(ReactSelect, { value: selectedChartVersion !== null && selectedChartVersion !== void 0 ? selectedChartVersion : chartVersionOptions[0], options: chartVersionOptions, onChange: handleChartVersionChange, styles: customStyles })] }))] })));
|
|
28243
28311
|
};
|
|
28244
28312
|
|
|
28245
|
-
|
|
28313
|
+
function TooltipContent(_a) {
|
|
28246
28314
|
var tooltipContent = _a.tooltipContent;
|
|
28247
28315
|
if (tooltipContent) {
|
|
28248
28316
|
return (jsxRuntime.jsxs("div", __assign({ className: "dc__white-space-pre-wrap" }, { children: [jsxRuntime.jsx("p", __assign({ className: "m-0 cn-0 fs-12 fw-6 lh-18" }, { children: "Click to add" })), tooltipContent] })));
|
|
28249
28317
|
}
|
|
28250
28318
|
return jsxRuntime.jsx("div", __assign({ className: "dc__white-space-pre-wrap" }, { children: "Click to add here" }));
|
|
28251
|
-
}
|
|
28319
|
+
}
|
|
28252
28320
|
function AddCDButton(_a) {
|
|
28253
28321
|
var position = _a.position, addCDButtons = _a.addCDButtons, endNode = _a.endNode, startNode = _a.startNode, handleAddCD = _a.handleAddCD, tooltipContent = _a.tooltipContent;
|
|
28254
28322
|
var referenceNode = position === exports.AddCDPositions.RIGHT ? endNode : startNode;
|
|
@@ -28284,7 +28352,7 @@ var handleAddCD = function (_a) {
|
|
|
28284
28352
|
handleCDSelect(workflowId, ciPipelineId, pipelineType, startNode.id, isWebhookCD, endNodeId, addPipelineType);
|
|
28285
28353
|
};
|
|
28286
28354
|
|
|
28287
|
-
|
|
28355
|
+
function CustomInput(_a) {
|
|
28288
28356
|
var name = _a.name, value = _a.value, error = _a.error, onChange = _a.onChange, _b = _a.onFocus, onFocus = _b === void 0 ? function (e) { } : _b, label = _a.label, _c = _a.type, type = _c === void 0 ? 'text' : _c, _d = _a.disabled, disabled = _d === void 0 ? false : _d, _e = _a.labelClassName, labelClassName = _e === void 0 ? '' : _e, _f = _a.placeholder, placeholder = _f === void 0 ? '' : _f, _g = _a.tabIndex, tabIndex = _g === void 0 ? 1 : _g, _h = _a.dataTestid, dataTestid = _h === void 0 ? '' : _h, _j = _a.isRequiredField, isRequiredField = _j === void 0 ? false : _j, _k = _a.autoFocus, autoFocus = _k === void 0 ? false : _k, _l = _a.rootClassName, rootClassName = _l === void 0 ? '' : _l, _m = _a.autoComplete, autoComplete = _m === void 0 ? 'off' : _m, _o = _a.helperText, helperText = _o === void 0 ? '' : _o, handleOnBlur = _a.handleOnBlur, _p = _a.readOnly, readOnly = _p === void 0 ? false : _p, _q = _a.noTrim, noTrim = _q === void 0 ? false : _q, ref = _a.ref, onKeyPress = _a.onKeyPress, defaultValue = _a.defaultValue, onKeyDown = _a.onKeyDown, required = _a.required, additionalErrorInfo = _a.additionalErrorInfo;
|
|
28289
28357
|
function handleError(error) {
|
|
28290
28358
|
if (!Array.isArray(error)) {
|
|
@@ -28294,7 +28362,7 @@ var CustomInput = function (_a) {
|
|
|
28294
28362
|
}
|
|
28295
28363
|
var onBlur = function (event) {
|
|
28296
28364
|
var _a;
|
|
28297
|
-
//
|
|
28365
|
+
//NOTE: This is to prevent the input from being trimmed when the user do not want to trim the input
|
|
28298
28366
|
if (!noTrim) {
|
|
28299
28367
|
event.stopPropagation();
|
|
28300
28368
|
event.target.value = (_a = event.target.value) === null || _a === void 0 ? void 0 : _a.trim();
|
|
@@ -28304,33 +28372,41 @@ var CustomInput = function (_a) {
|
|
|
28304
28372
|
handleOnBlur(event);
|
|
28305
28373
|
}
|
|
28306
28374
|
};
|
|
28307
|
-
var renderFormErrorWithIcon = function (error) {
|
|
28375
|
+
var renderFormErrorWithIcon = function (error) {
|
|
28376
|
+
return (jsxRuntime.jsxs("div", __assign({ className: "form__error" }, { children: [jsxRuntime.jsx(SvgIcWarning, { className: "form__icon form__icon--error" }), error, typeof additionalErrorInfo === 'function' && additionalErrorInfo()] }), error));
|
|
28377
|
+
};
|
|
28308
28378
|
var getInputError = function () {
|
|
28309
28379
|
if (!(error === null || error === void 0 ? void 0 : error.length)) {
|
|
28310
28380
|
return null;
|
|
28311
28381
|
}
|
|
28312
|
-
|
|
28313
|
-
|
|
28382
|
+
else {
|
|
28383
|
+
if (typeof error === 'object') {
|
|
28384
|
+
return handleError(error).map(function (err) { return renderFormErrorWithIcon(err); });
|
|
28385
|
+
}
|
|
28386
|
+
return renderFormErrorWithIcon(error);
|
|
28314
28387
|
}
|
|
28315
|
-
return renderFormErrorWithIcon(error);
|
|
28316
28388
|
};
|
|
28317
28389
|
var renderInputLabelConditionally = function () {
|
|
28318
28390
|
if (typeof label === 'string') {
|
|
28319
28391
|
return jsxRuntime.jsx("span", __assign({ className: "".concat(isRequiredField ? 'dc__required-field' : '') }, { children: label }));
|
|
28320
28392
|
}
|
|
28321
|
-
|
|
28393
|
+
else {
|
|
28394
|
+
return label;
|
|
28395
|
+
}
|
|
28322
28396
|
};
|
|
28323
28397
|
var renderInputLabel = function () {
|
|
28324
28398
|
if (!label) {
|
|
28325
28399
|
return null;
|
|
28326
28400
|
}
|
|
28327
|
-
|
|
28401
|
+
else {
|
|
28402
|
+
return (jsxRuntime.jsx("label", __assign({ className: "form__label ".concat(labelClassName), "data-testid": "label-".concat(dataTestid) }, { children: renderInputLabelConditionally() })));
|
|
28403
|
+
}
|
|
28328
28404
|
};
|
|
28329
28405
|
return (jsxRuntime.jsxs("div", __assign({ className: "flex column left top" }, { children: [renderInputLabel(), jsxRuntime.jsx("input", { "data-testid": dataTestid, type: type, name: name, autoComplete: autoComplete, className: "form__input ".concat(rootClassName), onChange: function (e) {
|
|
28330
28406
|
e.persist();
|
|
28331
28407
|
onChange(e);
|
|
28332
28408
|
}, onBlur: onBlur, onFocus: onFocus, placeholder: placeholder, value: value, disabled: disabled, tabIndex: tabIndex, autoFocus: autoFocus, readOnly: readOnly, ref: ref, onKeyPress: onKeyPress, defaultValue: defaultValue, onKeyDown: onKeyDown, required: required }), getInputError(), helperText && (jsxRuntime.jsxs("div", __assign({ className: "form__text-field-info" }, { children: [jsxRuntime.jsx(SvgIcInfoFilled, { className: "form__icon form__icon--info" }), jsxRuntime.jsx("p", __assign({ className: "sentence-case" }, { children: helperText }))] })))] })));
|
|
28333
|
-
}
|
|
28409
|
+
}
|
|
28334
28410
|
|
|
28335
28411
|
exports.DraggablePositionVariant = void 0;
|
|
28336
28412
|
(function (DraggablePositionVariant) {
|