Merge branch 'develop' of https://gitlab.verizon.com/BPHV_MIPS/vds_ios into vasavk/carousel

# Conflicts:
#	VDS.xcodeproj/project.pbxproj
This commit is contained in:
vasavk 2024-06-11 15:34:59 +05:30
commit e8e0e7fed2
45 changed files with 1263 additions and 1122 deletions

View File

@ -8,16 +8,12 @@
/* Begin PBXBuildFile section */
1808BEBC2BA41C3200129230 /* CarouselScrollbar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1808BEBB2BA41C3200129230 /* CarouselScrollbar.swift */; };
1808BEC02BA456B700129230 /* CarouselScrollbarChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 1808BEBF2BA456B700129230 /* CarouselScrollbarChangeLog.txt */; };
1832AC572BA0791D008AE476 /* BreadcrumbCellItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1832AC562BA0791D008AE476 /* BreadcrumbCellItem.swift */; };
1842B1DF2BECE28B0021AFCA /* CalendarDateViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1842B1DE2BECE28B0021AFCA /* CalendarDateViewCell.swift */; };
1842B1E12BECE7B70021AFCA /* CalendarHeaderReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1842B1E02BECE7B70021AFCA /* CalendarHeaderReusableView.swift */; };
1842B1E32BECF0A20021AFCA /* CalendarFooterReusableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1842B1E22BECF0A10021AFCA /* CalendarFooterReusableView.swift */; };
18450CF12BA1B19C009FDF2A /* BreadcrumbsChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 18450CF02BA1B19C009FDF2A /* BreadcrumbsChangeLog.txt */; };
1855EC662BAABF2A002ACAC2 /* BreadcrumbItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1855EC652BAABF2A002ACAC2 /* BreadcrumbItemModel.swift */; };
186B2A8A2B88DA7F001AB71F /* TextAreaChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 186B2A892B88DA7F001AB71F /* TextAreaChangeLog.txt */; };
186D13CB2BBA8B1500986B53 /* DropdownSelect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 186D13CA2BBA8B1500986B53 /* DropdownSelect.swift */; };
186D13CF2BBC36EF00986B53 /* DropdownSelectChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 186D13CE2BBC36EE00986B53 /* DropdownSelectChangeLog.txt */; };
18792A902B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18792A8F2B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift */; };
18A3F12A2BD9298900498E4A /* Calendar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A3F1292BD9298900498E4A /* Calendar.swift */; };
18A65A022B96E848006602CC /* Breadcrumbs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18A65A012B96E848006602CC /* Breadcrumbs.swift */; };
@ -30,20 +26,18 @@
18BDEE822B75316E00452358 /* ButtonIconChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 18BDEE812B75316E00452358 /* ButtonIconChangeLog.txt */; };
18FEA1AD2BDD137500A56439 /* CalendarIndicatorModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18FEA1AC2BDD137500A56439 /* CalendarIndicatorModel.swift */; };
18FEA1B52BE0E63600A56439 /* Date+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18FEA1B42BE0E63600A56439 /* Date+Extension.swift */; };
18FEA1B92BE1301700A56439 /* CalendarChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 18FEA1B82BE1301700A56439 /* CalendarChangeLog.txt */; };
445BA07829C07B3D0036A7C5 /* Notification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 445BA07729C07B3D0036A7C5 /* Notification.swift */; };
44604AD429CE186A00E62B51 /* NotificationButtonModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44604AD329CE186A00E62B51 /* NotificationButtonModel.swift */; };
44604AD729CE196600E62B51 /* Line.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44604AD629CE196600E62B51 /* Line.swift */; };
44A952D92BE384C40009F874 /* TableItemModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A952D82BE384C40009F874 /* TableItemModel.swift */; };
44A952DD2BE3DA820009F874 /* TableFlowLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44A952DC2BE3DA820009F874 /* TableFlowLayout.swift */; };
44BD43B62C04866600644F87 /* TableRowModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44BD43B52C04866600644F87 /* TableRowModel.swift */; };
5F21D7BF28DCEB3D003E7CD6 /* Useable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5F21D7BE28DCEB3D003E7CD6 /* Useable.swift */; };
5FC35BE328D51405004EBEAC /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FC35BE228D51405004EBEAC /* Button.swift */; };
710607952B91A99500F2863F /* TitleletChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 710607942B91A99500F2863F /* TitleletChangeLog.txt */; };
7115BD3C2B84C0C200E0A610 /* TileContainerChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 7115BD3B2B84C0C200E0A610 /* TileContainerChangeLog.txt */; };
71ACE89C2BA0451200FB6ADC /* PaginationContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71ACE89B2BA0451200FB6ADC /* PaginationContainer.swift */; };
71ACE89E2BA1CC1700FB6ADC /* TiletEyebrowModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71ACE89D2BA1CC1700FB6ADC /* TiletEyebrowModel.swift */; };
71B23C2D2B91FA690027F7D9 /* Pagination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71B23C2C2B91FA690027F7D9 /* Pagination.swift */; };
71B5FCBB2B95A0CA00269BCC /* PaginationChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 71B5FCBA2B95A0CA00269BCC /* PaginationChangeLog.txt */; };
71BFA70A2B7F70E6000DCE33 /* DropShadowable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71BFA7092B7F70E6000DCE33 /* DropShadowable.swift */; };
71C02B382B7BD98F00E93E66 /* NotificationChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = 71C02B372B7BD98F00E93E66 /* NotificationChangeLog.txt */; };
71FC86DA2B96F44C00700965 /* PaginationButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71FC86D92B96F44C00700965 /* PaginationButton.swift */; };
71FC86DC2B96F4C800700965 /* PaginationCellItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71FC86DB2B96F4C800700965 /* PaginationCellItem.swift */; };
71FC86DE2B9738B900700965 /* SurfaceConfigurationValue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71FC86DD2B9738B900700965 /* SurfaceConfigurationValue.swift */; };
@ -102,7 +96,6 @@
EA5E3058295105A40082B959 /* Tilelet.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5E3057295105A40082B959 /* Tilelet.swift */; };
EA5E305A29510F8B0082B959 /* EnumSubset.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5E305929510F8B0082B959 /* EnumSubset.swift */; };
EA5F86C82A1BD99100BC83E4 /* TabModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5F86C72A1BD99100BC83E4 /* TabModel.swift */; };
EA5F86CC2A1D28B500BC83E4 /* ReleaseNotes.txt in Resources */ = {isa = PBXBuildFile; fileRef = EA5F86CB2A1D28B500BC83E4 /* ReleaseNotes.txt */; };
EA5F86D02A1F936100BC83E4 /* TabsContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA5F86CF2A1F936100BC83E4 /* TabsContainer.swift */; };
EA6642952BCEBF9500D81DC4 /* TextLinkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6642942BCEBF9500D81DC4 /* TextLinkModel.swift */; };
EA6F330E2B911E9000BACAB9 /* TextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA6F330D2B911E9000BACAB9 /* TextView.swift */; };
@ -163,7 +156,6 @@
EAC58C162BED0E0300BA39FA /* InlineAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C152BED0E0300BA39FA /* InlineAction.swift */; };
EAC58C182BED0E2300BA39FA /* SecurityCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C172BED0E2300BA39FA /* SecurityCode.swift */; };
EAC58C232BF2824200BA39FA /* DatePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C222BF2824200BA39FA /* DatePicker.swift */; };
EAC58C252BF2A7FB00BA39FA /* DatePickerChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAC58C242BF2A7FB00BA39FA /* DatePickerChangeLog.txt */; };
EAC58C272BF4116200BA39FA /* DatePickerCalendarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C262BF4116200BA39FA /* DatePickerCalendarModel.swift */; };
EAC58C292BF4118C00BA39FA /* DatePickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC58C282BF4118C00BA39FA /* DatePickerViewController.swift */; };
EAC71A1D2A2E155A00E47A9F /* Checkbox.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAC71A1C2A2E155A00E47A9F /* Checkbox.swift */; };
@ -181,20 +173,8 @@
EAD068942A560C13002E3A2D /* LoaderLaunchable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD068932A560C13002E3A2D /* LoaderLaunchable.swift */; };
EAD8D2C128BFDE8B006EB6A6 /* UIGestureRecognizer+Publisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD8D2C028BFDE8B006EB6A6 /* UIGestureRecognizer+Publisher.swift */; };
EAE785312BA0A438009428EA /* UIImage+Helper.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAE785302BA0A438009428EA /* UIImage+Helper.swift */; };
EAEEEC922B1F807300531FC2 /* BadgeChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEEC912B1F807300531FC2 /* BadgeChangeLog.txt */; };
EAEEEC962B1F893B00531FC2 /* ButtonChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEEC952B1F893B00531FC2 /* ButtonChangeLog.txt */; };
EAEEEC982B1F8DD100531FC2 /* LineChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEEC972B1F8DD100531FC2 /* LineChangeLog.txt */; };
EAEEEC9A2B1F8E4400531FC2 /* TextLinkChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEEC992B1F8E4400531FC2 /* TextLinkChangeLog.txt */; };
EAEEEC9C2B1F8F0700531FC2 /* TextLinkCaretChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEEC9B2B1F8F0700531FC2 /* TextLinkCaretChangeLog.txt */; };
EAEEEC9E2B1F8F7700531FC2 /* ButtonGroupChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEEC9D2B1F8F7700531FC2 /* ButtonGroupChangeLog.txt */; };
EAEEECA02B1F908200531FC2 /* BadgeIndicatorChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEEC9F2B1F908200531FC2 /* BadgeIndicatorChangeLog.txt */; };
EAEEECA22B1F92AD00531FC2 /* LabelChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEECA12B1F92AD00531FC2 /* LabelChangeLog.txt */; };
EAEEECA42B1F934600531FC2 /* IconChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEECA32B1F934600531FC2 /* IconChangeLog.txt */; };
EAEEECA72B1F952000531FC2 /* TabsChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEECA62B1F952000531FC2 /* TabsChangeLog.txt */; };
EAEEECA92B1F969700531FC2 /* TooltipChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEECA82B1F969700531FC2 /* TooltipChangeLog.txt */; };
EAEEECAB2B1FBF2A00531FC2 /* ToggleChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEECAA2B1FBF2900531FC2 /* ToggleChangeLog.txt */; };
EAEEECAD2B1FC1A600531FC2 /* TitleLockupChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEECAC2B1FC1A600531FC2 /* TitleLockupChangeLog.txt */; };
EAEEECAF2B1FC2BA00531FC2 /* ToggleViewChangeLog.txt in Resources */ = {isa = PBXBuildFile; fileRef = EAEEECAE2B1FC2BA00531FC2 /* ToggleViewChangeLog.txt */; };
EAF193422C134F3400C68D18 /* Table.swift in Sources */ = {isa = PBXBuildFile; fileRef = 440B84C92BD8E0E9004A732A /* Table.swift */; };
EAF193432C134F3800C68D18 /* TableCellItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 443DBAF92BDA303F0021497E /* TableCellItem.swift */; };
EAF1FE9929D4850E00101452 /* Clickable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF1FE9829D4850E00101452 /* Clickable.swift */; };
EAF1FE9B29DB1A6000101452 /* Changeable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF1FE9A29DB1A6000101452 /* Changeable.swift */; };
EAF7F0952899861000B287F5 /* CheckboxItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAF7F0932899861000B287F5 /* CheckboxItem.swift */; };
@ -250,9 +230,15 @@
18FEA1AC2BDD137500A56439 /* CalendarIndicatorModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarIndicatorModel.swift; sourceTree = "<group>"; };
18FEA1B42BE0E63600A56439 /* Date+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Date+Extension.swift"; sourceTree = "<group>"; };
18FEA1B82BE1301700A56439 /* CalendarChangeLog.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CalendarChangeLog.txt; sourceTree = "<group>"; };
440B84C92BD8E0E9004A732A /* Table.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Table.swift; sourceTree = "<group>"; };
443DBAF92BDA303F0021497E /* TableCellItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableCellItem.swift; sourceTree = "<group>"; };
445BA07729C07B3D0036A7C5 /* Notification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Notification.swift; sourceTree = "<group>"; };
44604AD329CE186A00E62B51 /* NotificationButtonModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationButtonModel.swift; sourceTree = "<group>"; };
44604AD629CE196600E62B51 /* Line.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Line.swift; sourceTree = "<group>"; };
44A952D82BE384C40009F874 /* TableItemModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableItemModel.swift; sourceTree = "<group>"; };
44A952DC2BE3DA820009F874 /* TableFlowLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableFlowLayout.swift; sourceTree = "<group>"; };
44BD43B52C04866600644F87 /* TableRowModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableRowModel.swift; sourceTree = "<group>"; };
44CCF4942C0493A1005C9C5E /* TableChangeLog.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TableChangeLog.txt; sourceTree = "<group>"; };
5F21D7BE28DCEB3D003E7CD6 /* Useable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Useable.swift; sourceTree = "<group>"; };
5FC35BE228D51405004EBEAC /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = "<group>"; };
710607942B91A99500F2863F /* TitleletChangeLog.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = TitleletChangeLog.txt; sourceTree = "<group>"; };
@ -327,6 +313,8 @@
EA6642942BCEBF9500D81DC4 /* TextLinkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkModel.swift; sourceTree = "<group>"; };
EA6F330D2B911E9000BACAB9 /* TextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextView.swift; sourceTree = "<group>"; };
EA78C7952C00CAC200430AD1 /* Groupable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Groupable.swift; sourceTree = "<group>"; };
EA78C7A12C0E63D200430AD1 /* vds-dev.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "vds-dev.xcconfig"; sourceTree = "<group>"; };
EA78C7A22C0E63DD00430AD1 /* vds.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = vds.xcconfig; sourceTree = "<group>"; };
EA81410A2A0E8E3C004F60D2 /* ButtonIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonIcon.swift; sourceTree = "<group>"; };
EA81410F2A127066004F60D2 /* UIColor+VDSColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+VDSColor.swift"; sourceTree = "<group>"; };
EA89200328AECF4B006B9984 /* UITextField+Publisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UITextField+Publisher.swift"; sourceTree = "<group>"; };
@ -512,6 +500,19 @@
path = Carousel;
sourceTree = "<group>";
};
440B84C82BD8E0CE004A732A /* Table */ = {
isa = PBXGroup;
children = (
440B84C92BD8E0E9004A732A /* Table.swift */,
443DBAF92BDA303F0021497E /* TableCellItem.swift */,
44A952DC2BE3DA820009F874 /* TableFlowLayout.swift */,
44BD43B52C04866600644F87 /* TableRowModel.swift */,
44A952D82BE384C40009F874 /* TableItemModel.swift */,
44CCF4942C0493A1005C9C5E /* TableChangeLog.txt */,
);
path = Table;
sourceTree = "<group>";
};
445BA07629C07ABA0036A7C5 /* Notification */ = {
isa = PBXGroup;
children = (
@ -681,6 +682,7 @@
71B23C2B2B91FA510027F7D9 /* Pagination */,
EA89200B28B530F0006B9984 /* RadioBox */,
EAF7F11428A1470D00B287F5 /* RadioButton */,
440B84C82BD8E0CE004A732A /* Table */,
EA596ABB2A16B4D500300C4B /* Tabs */,
EAC925852911C9DE00091998 /* TextFields */,
EA5E304A294CBDBB0082B959 /* TileContainer */,
@ -790,6 +792,8 @@
EA3361FF2891E14C0071C351 /* Fonts */,
EAA5EEB828ECD24B003B3210 /* Icons.xcassets */,
EA5F86CB2A1D28B500BC83E4 /* ReleaseNotes.txt */,
EA78C7A12C0E63D200430AD1 /* vds-dev.xcconfig */,
EA78C7A22C0E63DD00430AD1 /* vds.xcconfig */,
);
path = SupportingFiles;
sourceTree = "<group>";
@ -1100,6 +1104,7 @@
EA336168288B19200071C351 /* Sources */,
EA336169288B19200071C351 /* Frameworks */,
EA33616A288B19200071C351 /* Resources */,
EA78C79E2C0E4FFB00430AD1 /* Add ChangeLog.txt Files */,
);
buildRules = (
);
@ -1170,39 +1175,12 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
EAEEECA42B1F934600531FC2 /* IconChangeLog.txt in Resources */,
7115BD3C2B84C0C200E0A610 /* TileContainerChangeLog.txt in Resources */,
EA3362042891E14D0071C351 /* VerizonNHGeTX-Bold.otf in Resources */,
71C02B382B7BD98F00E93E66 /* NotificationChangeLog.txt in Resources */,
EAEEECA72B1F952000531FC2 /* TabsChangeLog.txt in Resources */,
186B2A8A2B88DA7F001AB71F /* TextAreaChangeLog.txt in Resources */,
EAEEEC962B1F893B00531FC2 /* ButtonChangeLog.txt in Resources */,
710607952B91A99500F2863F /* TitleletChangeLog.txt in Resources */,
EA5F86CC2A1D28B500BC83E4 /* ReleaseNotes.txt in Resources */,
EAEEEC982B1F8DD100531FC2 /* LineChangeLog.txt in Resources */,
EAEEECA22B1F92AD00531FC2 /* LabelChangeLog.txt in Resources */,
EA3362072891E14D0071C351 /* VerizonNHGeDS-Regular.otf in Resources */,
EAEEEC9A2B1F8E4400531FC2 /* TextLinkChangeLog.txt in Resources */,
1808BEC02BA456B700129230 /* CarouselScrollbarChangeLog.txt in Resources */,
18AE87542C06FE610075F181 /* CarouselChangeLog.txt in Resources */,
EAEEECAF2B1FC2BA00531FC2 /* ToggleViewChangeLog.txt in Resources */,
EAEEEC922B1F807300531FC2 /* BadgeChangeLog.txt in Resources */,
EAEEEC9E2B1F8F7700531FC2 /* ButtonGroupChangeLog.txt in Resources */,
18BDEE822B75316E00452358 /* ButtonIconChangeLog.txt in Resources */,
EA3362062891E14D0071C351 /* VerizonNHGeTX-Regular.otf in Resources */,
EA3362052891E14D0071C351 /* VerizonNHGeDS-Bold.otf in Resources */,
18450CF12BA1B19C009FDF2A /* BreadcrumbsChangeLog.txt in Resources */,
EAEEECA02B1F908200531FC2 /* BadgeIndicatorChangeLog.txt in Resources */,
EAA5EEB928ECD24B003B3210 /* Icons.xcassets in Resources */,
EAEEECA92B1F969700531FC2 /* TooltipChangeLog.txt in Resources */,
186D13CF2BBC36EF00986B53 /* DropdownSelectChangeLog.txt in Resources */,
18FEA1B92BE1301700A56439 /* CalendarChangeLog.txt in Resources */,
EAEEEC9C2B1F8F0700531FC2 /* TextLinkCaretChangeLog.txt in Resources */,
EAA5EEE428F5B855003B3210 /* VerizonNHGDS-Light.otf in Resources */,
EAC58C252BF2A7FB00BA39FA /* DatePickerChangeLog.txt in Resources */,
71B5FCBB2B95A0CA00269BCC /* PaginationChangeLog.txt in Resources */,
EAEEECAD2B1FC1A600531FC2 /* TitleLockupChangeLog.txt in Resources */,
EAEEECAB2B1FBF2A00531FC2 /* ToggleChangeLog.txt in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1215,6 +1193,28 @@
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
EA78C79E2C0E4FFB00430AD1 /* Add ChangeLog.txt Files */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Add ChangeLog.txt Files";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\necho \"TARGET_BUILD_DIR: ${TARGET_BUILD_DIR}\"\necho \"UNLOCALIZED_RESOURCES_FOLDER_PATH: ${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\necho \"Build Directory: ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n\nif [ $VDS_ADD_CHANGELOG_FILES -eq 1 ]; then \n echo \"Adding ChangeLog.txt files...\"\n \n # Find all files matching the pattern recursively\n TXT_FILES=$(find \"${SRCROOT}\" -name \"*ChangeLog.txt\")\n\n # Add each file \n for FILE in $TXT_FILES; do \n cp \"$FILE\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n echo \"Added $FILE to ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n done\n\n TXT_FILES=$(find \"${SRCROOT}\" -name \"ReleaseNotes.txt\")\n\n # Add each file \n for FILE in $TXT_FILES; do \n cp \"$FILE\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n echo \"Added $FILE to ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}\"\n done\n\nelse \n echo \"Skipping adding of ChangeLog.txt files\"\nfi\n";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
EA336168288B19200071C351 /* Sources */ = {
isa = PBXSourcesBuildPhase;
@ -1266,7 +1266,9 @@
EAC58BFD2BE935C300BA39FA /* TitleLockupTextColor.swift in Sources */,
EAACB89A2B927108006A3869 /* Valuing.swift in Sources */,
EAE785312BA0A438009428EA /* UIImage+Helper.swift in Sources */,
EAF193422C134F3400C68D18 /* Table.swift in Sources */,
EAB5FEF5292D371F00998C17 /* ButtonBase.swift in Sources */,
44A952D92BE384C40009F874 /* TableItemModel.swift in Sources */,
EA978EC5291D6AFE00ACC883 /* AnyLabelAttribute.swift in Sources */,
71ACE89C2BA0451200FB6ADC /* PaginationContainer.swift in Sources */,
EAC71A1F2A2E173D00E47A9F /* RadioButton.swift in Sources */,
@ -1299,6 +1301,7 @@
18B9763F2C11BA4A009271DF /* CarouselPaginationModel.swift in Sources */,
EAB1D2EA28AE84AA00DAE764 /* UIControlPublisher.swift in Sources */,
EAD068922A560B65002E3A2D /* LoaderViewController.swift in Sources */,
44BD43B62C04866600644F87 /* TableRowModel.swift in Sources */,
71FC86DA2B96F44C00700965 /* PaginationButton.swift in Sources */,
EABFEB642A26473700C4C106 /* NSAttributedString.swift in Sources */,
EAF7F13328A2A16500B287F5 /* AttachmentLabelAttributeModel.swift in Sources */,
@ -1315,6 +1318,7 @@
EAC58C0A2BED004E00BA39FA /* FieldType.swift in Sources */,
EA471F3A2A95587500CE9E58 /* LayoutConstraintable.swift in Sources */,
EAC58C292BF4118C00BA39FA /* DatePickerViewController.swift in Sources */,
EAF193432C134F3800C68D18 /* TableCellItem.swift in Sources */,
EAB1D2CF28ABEF2B00DAE764 /* Typography+Base.swift in Sources */,
EA0D1C3B2A6AD51B00E5C127 /* Typogprahy+Styles.swift in Sources */,
EAF7F09A2899B17200B287F5 /* CATransaction.swift in Sources */,
@ -1352,6 +1356,7 @@
EA985BF02968A93600F2FF2E /* TitleLockupEyebrowModel.swift in Sources */,
EA5E30532950DDA60082B959 /* TitleLockup.swift in Sources */,
EAD062B02A3B873E0015965D /* BadgeIndicator.swift in Sources */,
44A952DD2BE3DA820009F874 /* TableFlowLayout.swift in Sources */,
EAA5EEB528ECBFB4003B3210 /* ImageLabelAttribute.swift in Sources */,
18792A902B7431F2008C0D29 /* ButtonIconBadgeIndicatorModel.swift in Sources */,
EA0B18062A9E2D2D00F2D0CD /* SelectorItemBase.swift in Sources */,
@ -1413,6 +1418,7 @@
/* Begin XCBuildConfiguration section */
EA33617E288B19210071C351 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = EA78C7A12C0E63D200430AD1 /* vds-dev.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@ -1476,6 +1482,7 @@
};
EA33617F288B19210071C351 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = EA78C7A22C0E63DD00430AD1 /* vds.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
@ -1533,11 +1540,12 @@
};
EA336181288B19210071C351 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = EA78C7A12C0E63D200430AD1 /* vds-dev.xcconfig */;
buildSettings = {
BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 64;
CURRENT_PROJECT_VERSION = 66;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
@ -1570,11 +1578,12 @@
};
EA336182288B19210071C351 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = EA78C7A22C0E63DD00430AD1 /* vds.xcconfig */;
buildSettings = {
BUILD_LIBRARY_FOR_DISTRIBUTION = YES;
CODE_SIGN_IDENTITY = "";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 64;
CURRENT_PROJECT_VERSION = 66;
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
@ -1607,6 +1616,7 @@
};
EA336184288B19210071C351 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = EA78C7A12C0E63D200430AD1 /* vds-dev.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;
@ -1624,6 +1634,7 @@
};
EA336185288B19210071C351 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = EA78C7A22C0E63DD00430AD1 /* vds.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_STYLE = Automatic;

View File

@ -161,7 +161,8 @@ open class SelectorItemBase<Selector: SelectorControlable>: Control, Errorable,
/// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations.
open override func setup() {
super.setup()
selectorView.isAccessibilityElement = false
isAccessibilityElement = true
accessibilityTraits = .button
addSubview(mainStackView)

View File

@ -13,78 +13,14 @@ final class BreadcrumbCellItem: UICollectionViewCell {
///Identifier for the BreadcrumbCellItem
static let identifier: String = String(describing: BreadcrumbCellItem.self)
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
internal var stackView: UIStackView = {
return UIStackView().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.axis = .horizontal
$0.distribution = .fill
$0.alignment = .fill
$0.spacing = VDSLayout.space1X
$0.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
$0.setContentHuggingPriority(.defaultHigh, for: .horizontal)
}
}()
internal var breadCrumbItem: BreadcrumbItem?
///separator label
private var separator: Label = Label().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.textAlignment = .left
$0.numberOfLines = 1
$0.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
$0.setContentHuggingPriority(.defaultHigh, for: .horizontal)
$0.text = "/"
}
private let textColorConfiguration = SurfaceColorConfiguration(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark)
//--------------------------------------------------
// MARK: - Initializers
//--------------------------------------------------
override init(frame: CGRect) {
super.init(frame: frame)
setUp()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setUp()
}
///Configuring the cell with default setup
private func setUp() {
separator.textColorConfiguration = textColorConfiguration.eraseToAnyColorable()
contentView.addSubview(stackView)
stackView.pinToSuperView()
separator.backgroundColor = .clear
}
///Updating the breadCrumbItem and UI based on the selected flag along with the surface
func update(surface: Surface, hideSlash: Bool, breadCrumbItem: BreadcrumbItem) {
//update surface
separator.surface = surface
breadCrumbItem.surface = surface
func update(breadCrumbItem: BreadcrumbItem) {
contentView.subviews.forEach{$0.removeFromSuperview()}
contentView.addSubview(breadCrumbItem)
breadCrumbItem.pinToSuperView()
breadCrumbItem.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
breadCrumbItem.setContentHuggingPriority(.defaultLow, for: .horizontal)
//remove previous views
stackView.arrangedSubviews.forEach { $0.removeFromSuperview() }
//add to stack
stackView.addArrangedSubview(separator)
stackView.addArrangedSubview(breadCrumbItem)
stackView.setCustomSpacing(VDSLayout.space1X, after: separator)
//update separator
separator.textColor = textColorConfiguration.getColor(surface)
separator.isHidden = hideSlash
self.breadCrumbItem = breadCrumbItem
setNeedsLayout()
}
}

View File

@ -42,23 +42,28 @@ open class BreadcrumbItem: ButtonBase {
textColorConfiguration.getColor(self)
}
/// The natural size for the receiving view, considering only properties of the view itself.
open override var intrinsicContentSize: CGSize {
guard let titleLabel else { return super.intrinsicContentSize }
// Calculate the titleLabel's intrinsic content size
let labelSize = titleLabel.sizeThatFits(CGSize(width: self.frame.width, height: CGFloat.greatestFiniteMagnitude))
// Adjust the size if needed (add any additional padding if your design requires)
let adjustedSize = CGSize(width: labelSize.width + contentEdgeInsets.left + contentEdgeInsets.right,
height: labelSize.height + contentEdgeInsets.top + contentEdgeInsets.bottom)
return adjustedSize
/// Determines if a slash is predended or not.
open var hideSlash: Bool = false { didSet { setNeedsUpdate() } }
private var slashText = "/ "
open override var textAttributes: [any LabelAttributeModel]? {
hideSlash
? nil
: [ColorLabelAttribute(location: 0,
length: 1,
color: surface == .light ? VDSColor.elementsPrimaryOnlight : VDSColor.elementsPrimaryOndark),
TextStyleLabelAttribute(location: 0,
length: 1,
textStyle: .bodySmall)
]
}
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
private var textColorConfiguration = ControlColorConfiguration().with {
$0.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forState: .normal)
$0.setSurfaceColors(VDSColor.interactiveActiveOnlight, VDSColor.interactiveActiveOndark, forState: .disabled)
$0.setSurfaceColors(VDSColor.interactiveActiveOnlight, VDSColor.interactiveActiveOndark, forState: .highlighted)
$0.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forState: .selected)
}
@ -69,15 +74,51 @@ open class BreadcrumbItem: ButtonBase {
/// Called once when a view is initialized and is used to Setup additional UI or other constants and configurations.
open override func setup() {
super.setup()
titleLabel?.numberOfLines = 0
titleLabel?.lineBreakMode = .byWordWrapping
contentHorizontalAlignment = .left
isAccessibilityElement = true
accessibilityTraits = .link
contentHorizontalAlignment = .leading
}
/// Used to make changes to the View based off a change events or from local properties.
open override func updateView() {
//always call last so the label is rendered
super.updateView()
//clear the arrays holding actions
accessibilityCustomActions = []
if let text, !text.isEmpty {
var updatedText = text
if updatedText.hasPrefix(slashText) && hideSlash {
updatedText = String(updatedText.dropFirst(slashText.count))
} else if !hideSlash, !updatedText.hasPrefix(slashText) {
updatedText = slashText + updatedText
}
//create the primary string
let mutableText = NSMutableAttributedString.mutableText(for: updatedText,
textStyle: textStyle,
useScaledFont: useScaledFont,
textColor: textColor,
alignment: titleLabel?.textAlignment ?? .center,
lineBreakMode: titleLabel?.lineBreakMode ?? .byTruncatingTail)
//apply any attributes
if let attributes = textAttributes {
mutableText.apply(attributes: attributes)
}
//set the attributed text
setAttributedTitle(mutableText, for: .normal)
setAttributedTitle(mutableText, for: .highlighted)
invalidateIntrinsicContentSize()
} else {
setAttributedTitle(nil, for: .normal)
setAttributedTitle(nil, for: .highlighted)
titleLabel?.text = nil
}
}

View File

@ -12,9 +12,6 @@ extension Breadcrumbs {
///Text that goes in the breadcrumb item
public var text: String
/// Whether the Item can be clicked.
public var enabled: Bool
/// The Breadcrumb link to links to its respective page.
public var selected: Bool
@ -22,9 +19,8 @@ extension Breadcrumbs {
///Click event when you click on a breadcrumb item
public var onClick: ((BreadcrumbItem) -> Void)?
public init(text: String, enabeled: Bool = true, selected: Bool = false, onClick: ((BreadcrumbItem) -> Void)? = nil) {
public init(text: String, selected: Bool = false, onClick: ((BreadcrumbItem) -> Void)? = nil) {
self.text = text
self.enabled = enabeled
self.selected = selected
self.onClick = onClick
}

View File

@ -32,13 +32,6 @@ open class Breadcrumbs: View {
}
}
/// Current Surface and this is used to pass down to child objects that implement Surfacable
override open var surface: Surface {
didSet {
breadcrumbs.forEach { $0.surface = surface }
}
}
open override var accessibilityElements: [Any]? {
get {
return [containerView, breadcrumbs]
@ -99,7 +92,6 @@ open class Breadcrumbs: View {
breadcrumbs = breadcrumbModels.compactMap({ model in
let breadcrumbItem = BreadcrumbItem()
breadcrumbItem.text = model.text
breadcrumbItem.isEnabled = model.enabled
breadcrumbItem.isSelected = model.selected
breadcrumbItem.onClick = { [weak self] breadcrumb in
guard let self, breadcrumb.isEnabled else { return }
@ -166,17 +158,22 @@ extension Breadcrumbs: UICollectionViewDelegate, UICollectionViewDataSource, But
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: BreadcrumbCellItem.identifier, for: indexPath) as? BreadcrumbCellItem else { return UICollectionViewCell() }
let hideSlash = indexPath.row == 0
cell.update(surface: surface, hideSlash: hideSlash, breadCrumbItem: breadcrumbs[indexPath.row])
let breadcrumb = breadcrumbs[indexPath.row]
breadcrumb.hideSlash = breadcrumb == breadcrumbs.first
breadcrumb.surface = surface
cell.update(breadCrumbItem: breadcrumb)
return cell
}
public func collectionView(_ collectionView: UICollectionView, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize {
let breadcrumb = breadcrumbs[indexPath.row]
let intrinsicSize = breadcrumb.intrinsicContentSize
let separatorFullWidth: CGFloat = indexPath.row == 0 ? 0 : VDSLayout.space1X + separatorWidth
let cellwidth = intrinsicSize.width + separatorFullWidth
return .init(width: min(cellwidth, collectionView.frame.width), height: intrinsicSize.height)
breadcrumb.hideSlash = breadcrumb == breadcrumbs.first
let maxWidth = frame.width
let intrinsicSize = breadcrumb.titleLabel!.sizeThatFits(.init(width: maxWidth, height: CGFloat.greatestFiniteMagnitude))
let cellwidth = min(maxWidth, intrinsicSize.width)
return .init(width: cellwidth, height: intrinsicSize.height)
}
public func collectionView(_ collectionView: UICollectionView, buttonBaseAtIndexPath indexPath: IndexPath) -> ButtonBase {

View File

@ -67,15 +67,20 @@ open class CalendarBase: Control, Changeable {
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
internal var containerSize: CGSize { CGSize(width: 328, height: 336) }
internal var containerSize: CGSize { CGSize(width: widthDefault, height: 336) }
internal var calendar = Calendar.current
private let cellItemSize = CGSize(width: 40, height: 40)
private let headerHeight = 88.0
private let footerHeight = 40.0
private let calendarWidth = 304.0
private let screenThreeSixty = 360.0
private let widthDefault = 328.0
private let widthTight = 320.0
private var heightConstraint: NSLayoutConstraint?
private var collectionViewLeadingConstraint: NSLayoutConstraint?
private var collectionViewHeightConstraint: NSLayoutConstraint?
private var containerWidthConstraint: NSLayoutConstraint?
private var containerHeightConstraint: NSLayoutConstraint?
private var selectedIndexPath : IndexPath?
private var dates: [Date] = []
@ -115,7 +120,7 @@ open class CalendarBase: Control, Changeable {
//--------------------------------------------------
internal var containerBorderColorConfiguration = SurfaceColorConfiguration(VDSColor.elementsPrimaryOnlight , VDSColor.elementsPrimaryOndark)
internal var backgroundColorConfiguration = SurfaceColorConfiguration(VDSFormControlsColor.backgroundOnlight, VDSFormControlsColor.backgroundOndark)
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
@ -133,21 +138,16 @@ open class CalendarBase: Control, Changeable {
.pinTop()
.pinBottom()
.pinLeadingGreaterThanOrEqualTo()
.pinTrailingLessThanOrEqualTo()
.width(containerSize.width)
.heightGreaterThanEqualTo(containerSize.height)
containerView.centerXAnchor.constraint(equalTo: centerXAnchor).activate()
// Calendar View
containerView.addSubview(collectionView)
let calendarHeight = containerSize.height - (2 * VDSLayout.space4X)
let spacing = (containerSize.width - calendarWidth) / 2
collectionView
.pinTop(VDSLayout.space4X)
.pinBottom(VDSLayout.space4X)
.pinLeading(spacing)
.pinTrailing(spacing)
.width(calendarWidth)
.heightGreaterThanEqualTo(calendarHeight)
@ -163,16 +163,14 @@ open class CalendarBase: Control, Changeable {
displayDate = fallsBetween ? displayDate : minDate
fetchDates(with: displayDate)
}
containerView.layer.backgroundColor = backgroundColorConfiguration.getColor(self).cgColor
containerView.backgroundColor = transparentBackground ? .clear : backgroundColorConfiguration.getColor(self)
containerView.layer.cornerRadius = VDSFormControls.borderRadius
if hideContainerBorder {
containerView.layer.borderColor = nil
containerView.layer.borderWidth = 0
containerView.layer.cornerRadius = 0
} else {
containerView.layer.borderColor = containerBorderColorConfiguration.getColor(self).cgColor
containerView.layer.borderWidth = VDSFormControls.borderWidth
containerView.layer.cornerRadius = VDSFormControls.borderRadius
}
}
@ -191,8 +189,6 @@ open class CalendarBase: Control, Changeable {
// MARK: - Private Methods
//--------------------------------------------------
func fetchDates(with aDate: Date) {
heightConstraint?.isActive = false
containerHeightConstraint?.isActive = false
days.removeAll()
dates = aDate.calendarDisplayDays
@ -204,17 +200,35 @@ open class CalendarBase: Control, Changeable {
days.append(date.getDay())
}
}
updateViewConstraints()
}
func updateViewConstraints() {
collectionView.reloadData()
// container width && collection view leading
collectionViewLeadingConstraint?.isActive = false
containerWidthConstraint?.isActive = false
var width = containerView.frame.size.width
width = ((width > 0) && (width < screenThreeSixty)) ? ((width > widthTight) && (width < screenThreeSixty)) ? widthTight : containerView.frame.size.width : widthDefault
let spacing = (width - calendarWidth) / 2
collectionViewLeadingConstraint = collectionView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: spacing)
containerWidthConstraint = containerView.widthAnchor.constraint(equalToConstant: calendarWidth + ( 2 * spacing))
collectionViewLeadingConstraint?.isActive = true
containerWidthConstraint?.isActive = true
// container height && collection view height
collectionViewHeightConstraint?.isActive = false
containerHeightConstraint?.isActive = false
var height = collectionView.collectionViewLayout.collectionViewContentSize.height
height = height > 0 ? height : containerSize.height
heightConstraint = collectionView.heightAnchor.constraint(equalToConstant: height)
containerHeightConstraint = containerView.heightAnchor.constraint(equalToConstant: height + (2 * VDSLayout.space4X))
heightConstraint?.isActive = true
collectionViewHeightConstraint = collectionView.heightAnchor.constraint(equalToConstant: height)
containerHeightConstraint?.isActive = true
collectionViewHeightConstraint?.isActive = true
layoutIfNeeded()
}
}
}
extension CalendarBase: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

View File

@ -147,12 +147,7 @@ open class DatePicker: EntryFieldBase, DatePickerViewControllerDelegate, UIPopov
open override func updateAccessibility() {
super.updateAccessibility()
let label = "Date Picker, \(isReadOnly ? ", read only" : "")"
if let errorText, showError {
fieldStackView.accessibilityLabel = "\(label) ,error, \(errorText)"
} else {
fieldStackView.accessibilityLabel = label
}
fieldStackView.accessibilityLabel = "Date Picker, \(accessibilityLabelText)"
fieldStackView.accessibilityHint = isReadOnly || !isEnabled ? "" : "Double tap to open."
fieldStackView.accessibilityValue = value
}

View File

@ -278,12 +278,7 @@ open class DropdownSelect: EntryFieldBase {
open override func updateAccessibility() {
super.updateAccessibility()
let label = "Dropdown Select, \(isReadOnly ? ", read only" : "")"
if let errorText, showError {
fieldStackView.accessibilityLabel = "\(label) ,error, \(errorText)"
} else {
fieldStackView.accessibilityLabel = label
}
fieldStackView.accessibilityLabel = "Dropdown Select, \(accessibilityLabelText)"
fieldStackView.accessibilityHint = isReadOnly || !isEnabled ? "" : "Double tap to open."
fieldStackView.accessibilityValue = value
}

View File

@ -314,8 +314,11 @@ open class Label: UILabel, ViewProtocol, UserInfoable {
super.text = newValue
return
}
//clear out accessibility
accessibilityElements?.removeAll()
accessibilityCustomActions = []
//create the primary string
let mutableText = NSMutableAttributedString.mutableText(for: newValue,
textStyle: textStyle,
@ -337,6 +340,10 @@ open class Label: UILabel, ViewProtocol, UserInfoable {
return
}
//clear out accessibility
accessibilityElements?.removeAll()
accessibilityCustomActions = []
let mutableText = NSMutableAttributedString(attributedString: newValue)
applyAttributes(mutableText)
@ -348,7 +355,7 @@ open class Label: UILabel, ViewProtocol, UserInfoable {
private func applyAttributes(_ mutableAttributedString: NSMutableAttributedString) {
actions = []
if let attributes = attributes {
if let attributes {
mutableAttributedString.apply(attributes: attributes)
}
}
@ -359,7 +366,7 @@ open class Label: UILabel, ViewProtocol, UserInfoable {
let mutableAttributedString = NSMutableAttributedString(attributedString: attributedText)
if let attributes = attributes {
if let attributes {
//loop through the models attributes
for attribute in attributes {

View File

@ -243,6 +243,11 @@ open class RadioBoxItem: Control, Changeable, FormFieldable, Groupable {
open override func updateAccessibility() {
super.updateAccessibility()
setAccessibilityLabel(for: [textLabel, subTextLabel, subTextRightLabel])
if let currentAccessibilityLabel = accessibilityLabel {
accessibilityLabel = "Radiobox, \(currentAccessibilityLabel)"
} else {
accessibilityLabel = "Radiobox"
}
if let accessibilityValueText {
accessibilityValue = strikethrough
? "\(strikethroughAccessibilityText), \(accessibilityValueText)"

View File

@ -0,0 +1,165 @@
//
// Table.swift
// VDS
//
// Created by Nadigadda, Sumanth on 24/04/24.
//
import Foundation
import UIKit
import VDSTokens
///Table is view composed of rows and columns, which takes any view into each cell and resizes based on the highest cell height.
@objc(VDSTable)
open class Table: View {
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
/// CollectionView to show the rows and columns
private lazy var matrixView = SelfSizingCollectionView(frame: .zero, collectionViewLayout: flowLayout).with {
$0.register(TableCellItem.self, forCellWithReuseIdentifier: TableCellItem.Identifier)
$0.dataSource = self
$0.delegate = self
$0.translatesAutoresizingMaskIntoConstraints = false
$0.allowsSelection = false
$0.showsVerticalScrollIndicator = false
$0.showsHorizontalScrollIndicator = false
$0.isAccessibilityElement = true
$0.backgroundColor = .clear
}
/// Custom flow layout to manage the height of the cells
private lazy var flowLayout = MatrixFlowLayout().with {
$0.delegate = self
$0.scrollDirection = .horizontal
}
/// Array of ``TableItemModel`` by combining Header & Row items
private var tableData: [TableRowModel] {
return tableHeader + tableRows
}
//--------------------------------------------------
// MARK: - Enums
//--------------------------------------------------
/// Enums used to define the padding for the cell edge spacing.
public enum Padding: String, CaseIterable {
case standard, compact
func horizontalValue() -> CGFloat {
switch self {
case .standard:
return UIDevice.isIPad ? VDSLayout.space8X : VDSLayout.space6X
case .compact:
return UIDevice.isIPad ? VDSLayout.space8X : VDSLayout.space6X
}
}
func verticalValue() -> CGFloat {
switch self {
case .standard:
return UIDevice.isIPad ? VDSLayout.space8X : VDSLayout.space6X
case .compact:
return UIDevice.isIPad ? VDSLayout.space4X : VDSLayout.space3X
}
}
}
//--------------------------------------------------
// MARK: - Public Properties
//--------------------------------------------------
/// Parameter to set striped status for the table
open var striped: Bool = false { didSet { setNeedsUpdate() } }
/// Parameter to set the padding for the cell
open var padding: Padding = .standard { didSet { setNeedsUpdate() } }
/// Parameter to show the table header row
open var tableHeader: [TableRowModel] = [] { didSet { setNeedsUpdate() } }
/// Parameter to show the all table rows
open var tableRows: [TableRowModel] = [] { didSet { setNeedsUpdate() } }
open var fillContainer: Bool = true { didSet { setNeedsUpdate() } }
open var columnWidths: [CGFloat]? { didSet { setNeedsUpdate() } }
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
///Called upon initializing the table view
open override func initialSetup() {
super.initialSetup()
addSubview(matrixView)
matrixView.pinToSuperView()
}
/// Will update the table view, when called becasue of any changes in component parameters
open override func updateView() {
super.updateView()
if fillContainer == true || (fillContainer == false && columnWidths == nil) {
columnWidths = calculateColumnWidths()
}
flowLayout.layoutPadding = padding
matrixView.reloadData()
matrixView.collectionViewLayout.invalidateLayout()
}
/// Resets to default settings.
open override func reset() {
super.reset()
striped = false
padding = .standard
tableHeader = []
tableRows = []
fillContainer = true
columnWidths = nil
setNeedsUpdate()
}
func calculateColumnWidths() -> [CGFloat] {
guard let noOfColumns = tableData.first?.columnsCount else { return [] }
let itemWidth = floor(matrixView.safeAreaLayoutGuide.layoutFrame.width / CGFloat(noOfColumns))
return Array(repeating: itemWidth, count: noOfColumns)
}
}
extension Table: UICollectionViewDelegate, UICollectionViewDataSource, TableCollectionViewLayoutDataDelegate {
//--------------------------------------------------
// MARK: - UICollectionViewDelegate & UICollectionViewDataSource
//--------------------------------------------------
public func numberOfSections(in collectionView: UICollectionView) -> Int {
return tableData.count
}
public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return tableData[section].columnsCount
}
public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: TableCellItem.Identifier, for: indexPath) as? TableCellItem else { return UICollectionViewCell() }
let currentItem = tableData[indexPath.section].columns[indexPath.row]
let shouldStrip = striped ? (indexPath.section % 2 != 0) : false
cell.updateCell(content: currentItem, surface: surface, striped: shouldStrip, padding: padding)
return cell
}
//--------------------------------------------------
// MARK: - TableCollectionViewLayoutDataDelegate
//--------------------------------------------------
func collectionView(_ collectionView: UICollectionView, dataForItemAt indexPath: IndexPath) -> TableItemModel {
return tableData[indexPath.section].columns[indexPath.row]
}
func collectionView(_ collectionView: UICollectionView, widthForItemAt indexPath: IndexPath) -> CGFloat {
return columnWidths?[indexPath.row] ?? 0.0
}
}

View File

@ -0,0 +1,92 @@
//
// TableCellItem.swift
// VDS
//
// Created by Nadigadda, Sumanth on 25/04/24.
//
import Foundation
import UIKit
import VDSTokens
final class TableCellItem: UICollectionViewCell {
/// Identifier for TableCellItem
static let Identifier: String = String(describing: TableCellItem.self)
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
/// Main view which holds the content of the cell
private let containerView = View()
/// Line seperator for cell
private let separator: Line = Line()
/// Color configuration for default background color
private let backgroundColorConfiguration = SurfaceColorConfiguration(VDSColor.backgroundPrimaryLight, VDSColor.backgroundPrimaryDark)
/// Color configuration for striped background color
private let stripedColorConfiguration = SurfaceColorConfiguration(VDSColor.backgroundSecondaryLight, VDSColor.backgroundSecondaryDark)
/// Padding parameter to maintain the edge spacing of the containerView
private var padding: Table.Padding = .standard
//--------------------------------------------------
// MARK: - Initializers
//--------------------------------------------------
override init(frame: CGRect) {
super.init(frame: frame)
setupCell()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupCell()
}
private func setupCell() {
contentView.backgroundColor = .clear
addSubview(containerView)
containerView.pinToSuperView()
}
//--------------------------------------------------
// MARK: - Public Methods
//--------------------------------------------------
/// Updates the cell content with ``TableItemModel`` and styling/padding attributes from other parameters
public func updateCell(content: TableItemModel, surface: Surface, striped: Bool = false, padding: Table.Padding = .standard) {
containerView.subviews.forEach({ $0.removeFromSuperview() })
self.padding = padding
containerView.surface = surface
containerView.backgroundColor = striped ? stripedColorConfiguration.getColor(surface) : backgroundColorConfiguration.getColor(surface)
containerView.addSubview(separator)
separator.pinLeading().pinTrailing().pinBottom()
separator.style = content.bottomLine ?? .primary
separator.isHidden = content.bottomLine == nil
separator.surface = surface
guard let component = content.component else { return }
containerView.addSubview(component)
if var surfacedView = component as? Surfaceable {
surfacedView.surface = surface
}
NSLayoutConstraint.activate([
component.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: VDSLayout.space1X),
component.topAnchor.constraint(greaterThanOrEqualTo: containerView.topAnchor, constant: padding.verticalValue()),
containerView.bottomAnchor.constraint(greaterThanOrEqualTo: component.bottomAnchor, constant: padding.verticalValue()),
containerView.trailingAnchor.constraint(greaterThanOrEqualTo: component.trailingAnchor, constant: padding.horizontalValue()),
containerView.centerYAnchor.constraint(equalTo: component.centerYAnchor)
])
}
}

View File

@ -0,0 +1,33 @@
03/31/2022
----------------
- Initial Brand 3.0 handoff
08/02/2022
----------------
- Included a VDS Note about the Padding prop name rationale
08/10/2022
----------------
- Updated default and inverted prop to light and dark surface.
08/29/2022
----------------
- Noted that Striped style is set to false as default. Clarified Anatomy description of line elements to say that both are configurable at both group and item level via bottomLine prop.
09/02/2022
----------------
- Added dev note enhancment to fix vertical 1px height jumping
09/13/2022
----------------
- Updated Anatomy element names per decisions made for design/dev docs.
10/04/2022
----------------
- Added dev note to Viewport > Striped > Compact padding to specify that auto-indent also applies to striped tables with default padding.
12/16/2022
----------------
- Updated border color values to use element tokens.
- Removed Line section from first position of Configurations.
- Replaced spacing values with tokens.

View File

@ -0,0 +1,139 @@
//
// TableFlowLayout.swift
// VDS
//
// Created by Nadigadda, Sumanth on 02/05/24.
//
import UIKit
import VDSTokens
protocol TableCollectionViewLayoutDataDelegate: AnyObject {
func collectionView(_ collectionView: UICollectionView, dataForItemAt indexPath: IndexPath) -> TableItemModel
func collectionView(_ collectionView: UICollectionView, widthForItemAt indexPath: IndexPath) -> CGFloat
}
class MatrixFlowLayout : UICollectionViewFlowLayout {
//--------------------------------------------------
// MARK: - Private Properties
//--------------------------------------------------
///Spacing between the pagination cells
private let defaultLeadingPadding: CGFloat = VDSLayout.space1X
/// Parameter to store the layout attributes of cell, while calculate the size & position of the cell
private var itemCache: [UICollectionViewLayoutAttributes] = []
/// Parameter to store the total height of the collectionView
private var layoutHeight: CGFloat = 0.0
/// Parameter to store the total width of the collectionView
private var layoutWidth: CGFloat = 0.0
//--------------------------------------------------
// MARK: - Internal Properties
//--------------------------------------------------
weak var delegate: TableCollectionViewLayoutDataDelegate?
///padding type to be set from Table component, which is used to calculate the size & position of the cell.
var layoutPadding: Table.Padding = .standard
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
/// Calculates the layout attribute properties & total height of the collectionView
override func prepare() {
super.prepare()
itemCache.removeAll()
layoutHeight = 0.0
guard let collectionView, let delegate else { return }
let sections = collectionView.numberOfSections
var yPos: CGFloat = 0.0
///Looping through all the sections of the collectionView, visually these are rows
for currentSection in 0..<sections {
/// Reset the layout width after each row's calculation
layoutWidth = 0.0
let items = collectionView.numberOfItems(inSection: currentSection)
///Looping through all the items in section, visually these are each column in the row
for currentItem in 0..<items {
let indexPath = IndexPath(row: currentItem, section: currentSection)
/// Dividing the colletionView width by number of items(columns) in the row to determine width of each cell
let itemWidth = delegate.collectionView(collectionView, widthForItemAt: indexPath)
let selectedItem = delegate.collectionView(collectionView, dataForItemAt: indexPath)
///Calculate the estimated height of the cell
let itemHeight = estimateHeightFor(item: selectedItem, with: itemWidth)
layoutWidth += itemWidth
let attribute = UICollectionViewLayoutAttributes(forCellWith: indexPath)
let origin = CGPoint(x: itemWidth * CGFloat(indexPath.row), y: yPos)
let size = CGSize(width: itemWidth, height: itemHeight)
attribute.frame = CGRect(origin: origin, size: size)
itemCache.append(attribute)
}
///Determines the highest height from all the cells(columns) in the row
let highestHeightForSection = itemCache.filter({$0.indexPath.section == currentSection}).sorted(by: {$0.frame.size.height > $1.frame.size.height }).first?.frame.size.height ?? 0.0
///Set the highest height as height to all the cells in the row to make the row in uniform height.
itemCache.filter({$0.indexPath.section == currentSection}).forEach { attributes in
attributes.frame.size.height = highestHeightForSection
}
///Adds the height to y position for the next section
yPos += highestHeightForSection
}
layoutHeight = yPos
}
/// Fetches estimated height by calling the cell's component estimated height and adding padding
private func estimateHeightFor(item: TableItemModel, with width: CGFloat) -> CGFloat {
let itemWidth = width - layoutPadding.horizontalValue() - defaultLeadingPadding
let maxSize = CGSize(width: itemWidth, height: CGFloat.greatestFiniteMagnitude)
let estItemSize = item.component?.systemLayoutSizeFitting(maxSize, withHorizontalFittingPriority: .required, verticalFittingPriority: .fittingSizeLevel) ?? CGSize(width: itemWidth, height: item.defaultHeight)
return estItemSize.height + (2 * layoutPadding.verticalValue())
}
///This will return the layout attributes for the elements in the defined rect
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
var visibleLayoutAttributes: [UICollectionViewLayoutAttributes] = []
for attributes in itemCache {
if attributes.frame.intersects(rect) {
visibleLayoutAttributes.append(attributes)
}
}
return visibleLayoutAttributes
}
///This will return the layout attributes at particular indexPath
override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
return itemCache.filter({ $0.indexPath == indexPath}).first
}
///Returns the collectionview content size
override var collectionViewContentSize: CGSize {
return CGSize(width: layoutWidth, height: layoutHeight)
}
}

View File

@ -0,0 +1,26 @@
//
// TableItemModel.swift
// VDS
//
// Created by Nadigadda, Sumanth on 02/05/24.
//
import Foundation
import UIKit
import VDSTokens
/// Model that represent the content of each cell of Table component
public struct TableItemModel {
public let defaultHeight: CGFloat = 50.0
public var bottomLine: Line.Style?
/// Component to be show in the Table cell
public var component: UIView?
public init(bottomLine: Line.Style? = nil, component: UIView? = nil) {
self.bottomLine = bottomLine
self.component = component
}
}

View File

@ -0,0 +1,21 @@
//
// TableRowModel.swift
// VDS
//
// Created by Sumanth Nadigadda on 27/05/24.
//
import Foundation
public struct TableRowModel {
public var columns: [TableItemModel]
public var columnsCount: Int {
return columns.count
}
public init(columns: [TableItemModel]) {
self.columns = columns
}
}

View File

@ -241,6 +241,23 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
open var rules = [AnyRule<String>]()
open var accessibilityLabelText: String {
var accessibilityLabels = [String]()
if let text = titleLabel.text {
accessibilityLabels.append(text)
}
if isReadOnly {
accessibilityLabels.append("read only")
}
if !isEnabled {
accessibilityLabels.append("dimmed")
}
if let errorText, showError {
accessibilityLabels.append("error, \(errorText)")
}
return accessibilityLabels.joined(separator: ", ")
}
//--------------------------------------------------
// MARK: - Overrides
//--------------------------------------------------
@ -376,7 +393,7 @@ open class EntryFieldBase: Control, Changeable, FormFieldInternalValidatable {
if isEnabled {
let optionColorAttr = ColorLabelAttribute(location: oldText.count + 1,
length: 8,
color: VDSColor.elementsSecondaryOnlight)
color: secondaryColorConfiguration.getColor(self))
attributes.append(optionColorAttr)
}

View File

@ -9,7 +9,20 @@ import Foundation
import UIKit
extension InputField {
public class CreditCardNumberRule: Rule, Withable {
public var cardType: CreditCardType?
public var errorMessage: String = "You have exceeded the character limit."
public func isValid(value: String?) -> Bool {
guard let count = value?.count, let min = cardType?.minLength, let max = cardType?.maxLength else { return true }
if min == max {
return count == max
} else {
return count >= min && count <= max
}
}
}
public enum CreditCardType: String, CaseIterable {
case generic
case visa
@ -19,6 +32,7 @@ extension InputField {
case dinersClub
case jcb
case unionPay
case placeholder
public func imageName(surface: Surface) -> String {
func getImageName(_ surface: Surface, name: String) -> String {
@ -29,22 +43,30 @@ extension InputField {
case .mastercard: return "mastercard"
case .amex: return "amex"
case .discover: return "discover"
case .dinersClub: return "dinersClub"//getImageName(surface, name: "dinersClub")
case .dinersClub: return getImageName(surface, name: "dinersClub")
case .jcb: return "jcb"
case .unionPay: return getImageName(surface, name: "unionPay")
default: return getImageName(surface, name: "generic")
case .generic: return getImageName(surface, name: "generic")
default: return getImageName(surface, name: "placeholder")
}
}
var separatorIndices: [Int] {
func separatorIndices(_ length: Int) -> [Int] {
var indices: [Int] = [4, 8, 12]
switch self {
case .dinersClub:
return [4, 10]
case .amex, .dinersClub:
indices = [4, 10]
case .unionPay:
if length == 19 {
indices = [5]
}
default:
return [4, 8, 12]
break
}
return indices
}
var securityCodeLength: Int {
if self == .amex {
return 4
@ -53,9 +75,21 @@ extension InputField {
}
}
var minLength: Int {
switch self {
case .visa: return 13
case .amex: return 15
case .dinersClub: return 14
default: return 16
}
}
var maxLength: Int {
switch self {
case .visa: return 19
case .amex: return 15
case .dinersClub: return 14
case .unionPay: return 19
default: return 16
}
}
@ -129,9 +163,8 @@ extension InputField {
override func appendRules(_ inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = inputField.cardType.maxLength
$0.compareType = .equals
let rule = CreditCardNumberRule().copyWith {
$0.cardType = inputField.cardType
$0.errorMessage = "Enter a valid credit card."
}
inputField.rules.append(.init(rule))
@ -141,7 +174,7 @@ extension InputField {
override func textFieldDidBeginEditing(_ inputField: InputField, textField: UITextField) {
//reset the textField when you start editing
value = nil
inputField.cardType = .generic
inputField.cardType = .placeholder
textField.text = ""
inputField.validate()
updateLeftImage(inputField)
@ -203,8 +236,8 @@ extension InputField {
/// Private
internal func formatCreditCardNumber(_ cardType: CreditCardType, number: String) -> String {
let formattedInput = number.filter { $0.isNumber } // Remove any existing slashes
return String.format(formattedInput, indices: cardType.separatorIndices, with: " ")
let rawNumber = number.filter { $0.isNumber } // Remove any existing slashes
return String.format(rawNumber, indices: cardType.separatorIndices(rawNumber.count), with: " ")
}
internal func updateCardTypeIcon(_ inputField: InputField, rawNumber: String) {
@ -222,9 +255,8 @@ extension InputField {
guard rawNumber.count == cardType.maxLength else { return formatCreditCardNumber(cardType, number: number) }
let lastFourDigits = rawNumber.suffix(4)
let maskedSection = String(repeating: "", count: 12)
let formattedMaskSection = String.format(maskedSection, indices: cardType.separatorIndices, with: " ")
let formattedMaskSection = String.format(maskedSection, indices: cardType.separatorIndices(rawNumber.count), with: " ")
return formattedMaskSection + " " + lastFourDigits
}
}
}

View File

@ -10,6 +10,18 @@ import UIKit
extension InputField {
public class DateRule: Rule, Withable {
public var dateFormat: DateFormat?
public var errorMessage: String = "Enter a valid date"
private let dateFormatter = DateFormatter()
public func isValid(value: String?) -> Bool {
guard let value, let dateFormat, !value.isEmpty else { return true }
dateFormatter.dateFormat = dateFormat.formatString
return dateFormatter.date(from: value) != nil
}
}
public enum DateFormat: String, CaseIterable {
case mmyy
case mmddyy
@ -46,6 +58,102 @@ extension InputField {
case .mmddyyyy: [2,4]
}
}
public func isValid(_ date: String) -> Bool {
let allowedCharacters = CharacterSet(charactersIn: "0123456789/")
// Check if the input contains only allowed characters
if date.rangeOfCharacter(from: allowedCharacters.inverted) != nil || date.isEmpty {
return false
}
let components = date.split(separator: "/")
func isMonth(_ month: String) -> Bool {
switch month.count {
case 1:
guard let month = Int(month), (0...1).contains(month) else { return false }
return true
case 2:
guard let month = Int(month), (1...12).contains(month) else { return false }
return true
default:
return false
}
}
func isDay(_ day: String) -> Bool {
switch day.count {
case 1:
guard let day = Int(day),(1...3).contains(day) else { return false }
return true
case 2:
guard let day = Int(day), (1...31).contains(day) else { return false }
return true
default:
return false
}
}
func isYear(_ year: String, max: Int) -> Bool {
guard year.count <= max else {
return false
}
return true
}
switch self {
case .mmyy:
if components.count > 2 {
return false
}
// Validate month part
if components.count > 0, let monthPart = components.first {
if !isMonth(String(monthPart)) {
return false
}
}
// Validate year part
if components.count > 1, let yearPart = components.last {
if !isYear(String(yearPart), max: 2) {
return false
}
}
case .mmddyy, .mmddyyyy:
if components.count > 3 {
return false
}
// Validate month part
if components.count > 0, let monthPart = components.first {
if !isMonth(String(monthPart)) {
return false
}
}
// Validate day part
if components.count > 1 {
let dayPart = components[1]
if !isDay(String(dayPart)) {
return false
}
}
// Validate year part
if components.count > 2, let yearPart = components.last {
if !isYear(String(yearPart), max: self == .mmddyy ? 2 : 4) {
return false
}
}
}
return true
}
}
class DateHandler: FieldTypeHandler {
@ -58,16 +166,15 @@ extension InputField {
override func updateView(_ inputField: InputField) {
minWidth = 114.0
placeholderText = inputField.dateFormat.placeholderText
//placeholderText = inputField.dateFormat.placeholderText
inputField.textField.formatText = inputField.dateFormat.placeholderText
super.updateView(inputField)
}
override func appendRules(_ inputField: InputField) {
if let text = inputField.textField.text, text.count > 0 {
let rule = CharacterCountRule().copyWith {
$0.maxLength = inputField.dateFormat.maxLength
$0.compareType = .equals
let rule = DateRule().copyWith {
$0.dateFormat = inputField.dateFormat
$0.errorMessage = "Enter a valid date."
}
inputField.rules.append(.init(rule))
@ -86,9 +193,13 @@ extension InputField {
if newText.count > inputField.dateFormat.maxLength {
return false
}
if newText.count <= inputField.dateFormat.maxLength {
textField.text = String.format(newText, indices: inputField.dateFormat.separatorIndices, with: "/")
let rawNumber = newText.filter { $0.isNumber }
let formatted = String.format(rawNumber, indices: inputField.dateFormat.separatorIndices, with: "/")
if inputField.dateFormat.isValid(formatted) || formatted.isEmpty {
textField.text = formatted
}
return false
} else {
return true

View File

@ -68,7 +68,11 @@ open class InputField: EntryFieldBase {
//--------------------------------------------------
// MARK: - CreditCard/SecurityCode
//--------------------------------------------------
open var cardType: CreditCardType = .generic { didSet { setNeedsUpdate() } }
open var cardType: CreditCardType = .placeholder {
didSet {
setNeedsUpdate()
}
}
//--------------------------------------------------
// MARK: - Password
//--------------------------------------------------
@ -97,7 +101,7 @@ open class InputField: EntryFieldBase {
/// UITextField shown in the InputField.
open var textField = TextField().with {
$0.translatesAutoresizingMaskIntoConstraints = false
$0.font = TextStyle.bodyLarge.font
$0.textStyle = TextStyle.bodyLarge
}
/// Color configuration for the textField.
@ -186,9 +190,11 @@ open class InputField: EntryFieldBase {
successLabel.textColorConfiguration = primaryColorConfiguration.eraseToAnyColorable()
backgroundColorConfiguration.setSurfaceColors(VDSColor.feedbackSuccessBackgroundOnlight, VDSColor.feedbackSuccessBackgroundOndark, forState: .success)
borderColorConfiguration.setSurfaceColors(VDSColor.feedbackSuccessOnlight, VDSColor.feedbackSuccessOndark, forState: .success)
backgroundColorConfiguration.setSurfaceColors(VDSColor.feedbackSuccessBackgroundOnlight, VDSColor.feedbackSuccessBackgroundOndark, forState: [.success, .focused])
borderColorConfiguration.setSurfaceColors(VDSColor.feedbackSuccessOnlight, VDSColor.feedbackSuccessOndark, forState: .success)
textField.textColorConfiguration = textFieldTextColorConfiguration
}
open override func getFieldContainer() -> UIView {
@ -217,19 +223,14 @@ open class InputField: EntryFieldBase {
super.updateView()
textField.surface = surface
textField.isEnabled = isEnabled
textField.isUserInteractionEnabled = isEnabled && !isReadOnly
textField.textColor = textFieldTextColorConfiguration.getColor(self)
}
open override func updateAccessibility() {
super.updateAccessibility()
let label = "\(isReadOnly ? "read only" : "")"
if let errorText, showError {
textField.accessibilityLabel = "\(label) ,error, \(errorText)"
} else {
textField.accessibilityLabel = label
}
textField.accessibilityLabel = accessibilityLabelText
textField.accessibilityHint = isReadOnly || !isEnabled ? "" : "Double tap to open."
}
@ -247,9 +248,9 @@ open class InputField: EntryFieldBase {
successLabel.isHidden = false
errorLabel.isHidden = true
statusIcon.name = .checkmarkAlt
statusIcon.color = VDSColor.paletteBlack
statusIcon.color = iconColorConfiguration.getColor(self)
statusIcon.surface = surface
statusIcon.isHidden = !isEnabled
statusIcon.isHidden = !isEnabled || state.contains(.focused)
} else {
successLabel.isHidden = true
}
@ -304,6 +305,7 @@ extension InputField: UITextFieldDelegate {
public func textFieldDidBeginEditing(_ textField: UITextField) {
fieldType.handler().textFieldDidBeginEditing(self, textField: textField)
updateContainerView()
updateErrorLabel()
}
public func textFieldDidEndEditing(_ textField: UITextField) {

View File

@ -8,6 +8,7 @@
import Foundation
import UIKit
import Combine
import VDSTokens
@objc(VDSTextField)
open class TextField: UITextField, ViewProtocol, Errorable {
@ -46,6 +47,23 @@ open class TextField: UITextField, ViewProtocol, Errorable {
//--------------------------------------------------
// MARK: - Properties
//--------------------------------------------------
private var formatLabel = Label().with {
$0.tag = 999
$0.textColorConfiguration = ViewColorConfiguration().with {
$0.setSurfaceColors(VDSColor.interactiveDisabledOnlight, VDSColor.interactiveDisabledOndark, forDisabled: true)
$0.setSurfaceColors(VDSColor.elementsSecondaryOnlight, VDSColor.elementsSecondaryOndark, forDisabled: false)
}.eraseToAnyColorable()
}
/// Format String similar to placeholder
open var formatText: String?
/// TextStyle used on the titleLabel.
open var textStyle: TextStyle = .defaultStyle { didSet { setNeedsUpdate() } }
/// Will determine if a scaled font should be used for the titleLabel font.
open var useScaledFont: Bool = false { didSet { setNeedsUpdate() } }
/// Key of whether or not updateView() is called in setNeedsUpdate()
open var shouldUpdateView: Bool = true
@ -55,6 +73,22 @@ open class TextField: UITextField, ViewProtocol, Errorable {
open var errorText: String? { didSet { setNeedsUpdate() } }
open var lineBreakMode: NSLineBreakMode = .byClipping { didSet { setNeedsUpdate() } }
open override var isEnabled: Bool { didSet { setNeedsUpdate() } }
open var textColorConfiguration: AnyColorable = ViewColorConfiguration().with {
$0.setSurfaceColors(VDSColor.interactiveDisabledOnlight, VDSColor.interactiveDisabledOndark, forDisabled: true)
$0.setSurfaceColors(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark, forDisabled: false)
}.eraseToAnyColorable(){ didSet { setNeedsUpdate() }}
open override var textColor: UIColor? {
get { textColorConfiguration.getColor(self) }
set { }
}
override public var text: String! { didSet { setNeedsUpdate() } }
//--------------------------------------------------
// MARK: - Lifecycle
//--------------------------------------------------
@ -63,6 +97,8 @@ open class TextField: UITextField, ViewProtocol, Errorable {
initialSetupPerformed = true
backgroundColor = .clear
translatesAutoresizingMaskIntoConstraints = false
setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
clipsToBounds = true
setup()
setNeedsUpdate()
}
@ -84,10 +120,43 @@ open class TextField: UITextField, ViewProtocol, Errorable {
@objc func doneButtonAction() {
// Resigns the first responder status when 'Done' is tapped
resignFirstResponder()
let _ = resignFirstResponder()
}
open func updateView() {}
open func updateView() {
updateLabel()
updateFormat()
}
open func updateFormat() {
guard let formatText else {
formatLabel.text = ""
return
}
if viewWithTag(999) == nil {
addSubview(formatLabel)
formatLabel.pinToSuperView()
}
var attributes: [any LabelAttributeModel]?
var finalFormatText = formatText
if let text, !text.isEmpty {
//make the color of the matching text clear
attributes = [ColorLabelAttribute(location: 0, length: text.count, color: .clear)]
let startIndex = formatText.index(formatText.startIndex, offsetBy: text.count)
if startIndex < formatText.endIndex {
finalFormatText = text + formatText[startIndex...]
}
}
//set the label
formatLabel.surface = surface
formatLabel.text = finalFormatText
formatLabel.attributes = attributes
}
open func updateAccessibility() {
if let errorText, showError {
@ -139,6 +208,28 @@ open class TextField: UITextField, ViewProtocol, Errorable {
}
return success
}
//--------------------------------------------------
// MARK: - Private Methods
//--------------------------------------------------
private func updateLabel() {
//clear the arrays holding actions
accessibilityCustomActions = []
if let text, !text.isEmpty {
//create the primary string
let mutableText = NSMutableAttributedString.mutableText(for: text,
textStyle: textStyle,
useScaledFont: useScaledFont,
textColor: textColor!,
alignment: .left,
lineBreakMode: lineBreakMode)
attributedText = mutableText
} else {
attributedText = nil
}
}
}
extension UITextField {

View File

@ -195,12 +195,7 @@ open class TextArea: EntryFieldBase {
open override func updateAccessibility() {
super.updateAccessibility()
let label = "\(isReadOnly ? "read only" : "")"
if let errorText, showError {
textView.accessibilityLabel = "\(label) ,error, \(errorText)"
} else {
textView.accessibilityLabel = label
}
textView.accessibilityLabel = accessibilityLabelText
textView.accessibilityHint = isReadOnly || !isEnabled ? "" : "Double tap to open."
}

View File

@ -108,7 +108,7 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
$0.clipsToBounds = true
}
private var containerView = View()
internal var containerView = View()
//--------------------------------------------------
// MARK: - Public Properties
@ -342,9 +342,6 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
containerView.isAccessibilityElement = onClickSubscriber != nil
containerView.accessibilityHint = "Double tap to open."
containerView.accessibilityLabel = nil
if let views = accessibilityElements?.compactMap({ $0 as? UIView }), !views.isEmpty {
containerView.setAccessibilityLabel(for: views)
}
}
open override var accessibilityElements: [Any]? {
@ -358,10 +355,18 @@ open class TileContainerBase<PaddingType: DefaultValuing>: Control where Padding
}
items.append(containerView)
}
items.append(contentsOf: contentView.subviews.filter({ $0.isAccessibilityElement == true }))
let elements = gatherAccessibilityElements(from: contentView)
let views = elements.compactMap({ $0 as? UIView })
//update accessibilityLabel
containerView.setAccessibilityLabel(for: views)
//append all children that are accessible
items.append(contentsOf: elements)
return items
}
set {}
}

View File

@ -415,29 +415,37 @@ open class Tilelet: TileContainerBase<Tilelet.Padding> {
/// Used to update any Accessibility properties.
open override var accessibilityElements: [Any]? {
get {
var elements = [Any]()
if let superElements = super.accessibilityElements {
elements.append(contentsOf: superElements)
}
var views = [UIView]()
// grab the available views in order
if badgeModel != nil {
elements.append(badge)
views.append(badge)
}
if titleModel != nil || subTitleModel != nil || eyebrowModel != nil {
elements.append(titleLockup)
views.append(titleLockup)
}
if descriptiveIconModel != nil {
elements.append(descriptiveIcon)
containerView.setAccessibilityLabel(for: views)
// get the views to return
var items = [Any]()
if containerView.isAccessibilityElement {
if !accessibilityTraits.contains(.button) && !accessibilityTraits.contains(.link) {
containerView.accessibilityTraits = .button
} else {
containerView.accessibilityTraits = accessibilityTraits
}
items.append(containerView)
}
if directionalIconModel != nil {
elements.append(directionalIcon)
}
return elements
//append all other accessible views to traverse
items.append(contentsOf: views)
return items
}
set {}
}
//--------------------------------------------------
@ -532,7 +540,9 @@ open class Tilelet: TileContainerBase<Tilelet.Padding> {
var showIconContainerView = false
if let descriptiveIconModel {
descriptiveIcon.name = descriptiveIconModel.name
descriptiveIcon.colorConfiguration = descriptiveIconModel.colorConfiguration
if let color = descriptiveIconModel.iconColor?.uiColor {
descriptiveIcon.color = color
}
descriptiveIcon.size = descriptiveIconModel.size
descriptiveIcon.surface = backgroundColorSurface
showIconContainerView = true
@ -540,7 +550,9 @@ open class Tilelet: TileContainerBase<Tilelet.Padding> {
if let directionalIconModel {
directionalIcon.name = directionalIconModel.iconType.iconName
directionalIcon.colorConfiguration = directionalIconModel.colorConfiguration
if let color = directionalIconModel.iconColor?.uiColor {
directionalIcon.color = color
}
directionalIcon.size = directionalIconModel.size.value
directionalIcon.surface = backgroundColorSurface
showIconContainerView = true

View File

@ -11,13 +11,33 @@ import VDSTokens
extension Tilelet {
public enum IconColor: Equatable {
case token(UIColor.VDSColor)
case custom(UIColor)
private var reflectedValue: String { String(reflecting: self) }
public static func == (lhs: Self, rhs: Self) -> Bool {
lhs.reflectedValue == rhs.reflectedValue
}
public var uiColor: UIColor {
switch self {
case .token(let color):
return color.uiColor
case .custom(let color):
return color
}
}
}
/// Model that represents the options available for the descriptive icon.
public struct DescriptiveIcon {
/// A representation that will be used to render the icon with corresponding name.
public var name: Icon.Name
/// Color of the icon.
public var colorConfiguration: SurfaceColorConfiguration
public var iconColor: IconColor?
/// Enum for a preset height and width for the icon.
public var size: Icon.Size
@ -26,12 +46,12 @@ extension Tilelet {
public var accessibleText: String
public init(name: Icon.Name = .multipleDocuments,
colorConfiguration: SurfaceColorConfiguration = .init(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark),
iconColor: IconColor? = nil,
size: Icon.Size = .medium,
accessibleText: String? = nil) {
self.name = name
self.colorConfiguration = colorConfiguration
self.iconColor = iconColor
self.accessibleText = accessibleText ?? name.rawValue
self.size = size
}
@ -57,7 +77,7 @@ extension Tilelet {
}
/// Color of the icon.
public var colorConfiguration: SurfaceColorConfiguration
public var iconColor: IconColor?
/// Accessible Text for the Icon
public var accessibleText: String
@ -68,13 +88,13 @@ extension Tilelet {
/// Enum for a preset height and width for the icon.
public var size: IconSize
public init(iconType: IconType = .rightArrow,
colorConfiguration: SurfaceColorConfiguration = .init(VDSColor.elementsPrimaryOnlight, VDSColor.elementsPrimaryOndark),
public init(iconType: IconType = .rightArrow,
iconColor: IconColor? = nil,
size: IconSize = .medium,
accessibleText: String? = nil) {
self.iconType = iconType
self.colorConfiguration = colorConfiguration
self.iconColor = iconColor
self.accessibleText = accessibleText ?? iconType.iconName.rawValue
self.size = size
}

View File

@ -385,8 +385,8 @@ open class TitleLockup: View {
}
//pin the last view to the bottom of this view
previousView?.pinBottom(0)
previousView?.pinBottom(anchor: bottomAnchor, priority: UILayoutPriority(700))
//debugging for borders
eyebrowLabel.debugBorder(show: hasDebugBorder, color: .green)
titleLabel.debugBorder(show: hasDebugBorder, color: .green)

View File

@ -17,7 +17,8 @@ extension TitleLockup {
public enum TextColor: Equatable {
case primary
case secondary
case custom(UIColor, UIColor)
case token(UIColor.VDSColor)
case custom(UIColor)
private var reflectedValue: String { String(reflecting: self) }
@ -31,15 +32,18 @@ extension TitleLockup {
TitleLockup.textColorPrimaryConfiguration
case .secondary:
TitleLockup.textColorSecondaryConfiguration
case .custom(let lightColor, let darkColor):
SurfaceColorConfiguration(lightColor, darkColor).eraseToAnyColorable()
case .token(let color):
SurfaceColorConfiguration(color.uiColor, color.uiColor).eraseToAnyColorable()
case .custom(let color):
SurfaceColorConfiguration(color, color).eraseToAnyColorable()
}
}
}
public enum TitleTextColor: Equatable {
case primary
case custom(UIColor, UIColor)
case token(UIColor.VDSColor)
case custom(UIColor)
private var reflectedValue: String { String(reflecting: self) }
@ -51,8 +55,10 @@ extension TitleLockup {
switch self {
case .primary:
TitleLockup.textColorPrimaryConfiguration
case .custom(let lightColor, let darkColor):
SurfaceColorConfiguration(lightColor, darkColor).eraseToAnyColorable()
case .token(let color):
SurfaceColorConfiguration(color.uiColor, color.uiColor).eraseToAnyColorable()
case .custom(let color):
SurfaceColorConfiguration(color, color).eraseToAnyColorable()
}
}
}

View File

@ -50,4 +50,16 @@ extension UIView {
return isIntersecting
}
public func gatherAccessibilityElements(from view: UIView) -> [Any] {
var elements: [Any] = []
for subview in view.subviews {
if subview.isAccessibilityElement && subview.isVisibleOnScreen {
elements.append(subview)
}
elements.append(contentsOf: gatherAccessibilityElements(from: subview))
}
return elements
}
}

View File

@ -48,7 +48,7 @@ public enum Font: FontProtocol {
/// - size: Size of the font
/// - Returns: UIFont for the fontName and Size.
public func font(ofSize size: CGFloat) -> UIFont{
DispatchQueue.once(block: { self.register() })
DispatchQueue.once(block: { Self.register() })
switch self {
case .custom(let font):
return font

View File

@ -18,7 +18,7 @@ public protocol FontProtocol {
extension FontProtocol {
/// Registers the fonts used in the VDS Framework.
public func register() {
public static func register() {
guard let bundle = Bundle(identifier: "com.vzw.vds") else { return }
Self.allCases.forEach{ font in
if let url = bundle.url(forResource: font.fontName, withExtension: font.fontFileExtension){
@ -51,7 +51,7 @@ extension FontProtocol {
/// - size: Size of the font
/// - Returns: UIFont for the fontName and Size.
public func font(ofSize size: CGFloat) -> UIFont{
DispatchQueue.once(block: { self.register() })
DispatchQueue.once(block: { Self.register() })
guard let found = UIFont(name: self.fontName, size: size) else { return .systemFont(ofSize: size) }
return found
}

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "DCI_Horizontal-2_onlight.svg",
"filename" : "DCI_Horizontal-2_ondark-2.svg",
"idiom" : "universal"
}
],

View File

@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 33.100002288818359 23.099998474121094">
<defs>
<style>
.cls-1 {
fill: none;
}
.cls-1, .cls-2, .cls-3 {
stroke-width: 0px;
}
.cls-2 {
fill: #0069aa;
}
.cls-3 {
fill: #fff;
}
</style>
</defs>
<g>
<path class="cls-1" d="M10.600000381469727,20.5h-.199999809265137v1.100000381469727h.199999809265137c.399999618530273,0,.600000381469727-.100000381469727.600000381469727-.600000381469727s-.199999809265137-.5-.5-.5h-.100000381469727Z"/>
<polygon class="cls-1" points="16.200000762939453 21.799999237060547 16.899999618530273 21.799999237060547 16.5 20.799999237060547 16.200000762939453 21.799999237060547"/>
<path class="cls-1" d="M12.300000190734863,16.5c0-.399999618530273-.199999809265137-.600000381469727-.600000381469727-.600000381469727s-.699999809265137.299999237060547-.800000190734863.799999237060547h1.199999809265137q.199999809265137,0,.199999809265137-.200000762939453l.000000953674316.000001907348633Z"/>
<path class="cls-1" d="M2.099999904632568,18.600000381469727c1.5,0,2-1.100000381469727,2-2.200000762939453s-.799999952316284-2.199999809265137-2.200000047683716-2.199999809265137-.399999976158142,0-.5,0v3.800000190734863c0,.5.399999976158142.600000381469727.700000047683716.600000381469727h0Z"/>
<path class="cls-1" d="M23.200000762939453,20.5c-.600000381469727,0-.899999618530273.600000381469727-.899999618530273,1.100000381469727s.299999237060547,1.299999237060547.899999618530273,1.299999237060547.899999618530273-.600000381469727.899999618530273-1.200000762939453-.299999237060547-1.200000762939453-.899999618530273-1.200000762939453v.000001907348633Z"/>
<path class="cls-1" d="M30.899999618530273,18.700000762939453c.799999237060547,0,1.100000381469727-.700000762939453,1.100000381469727-1.399999618530273s-.600000381469727-1.399999618530273-1.100000381469727-1.399999618530273-.5.200000762939453-.700000762939453.299999237060547v1.700000762939453c0,.299999237060547.200000762939453.700000762939453.700000762939453.700000762939453h0v.099998474121094Z"/>
<polygon class="cls-1" points="28.600000381469727 21.799999237060547 29.299999237060547 21.799999237060547 29 20.799999237060547 28.600000381469727 21.799999237060547"/>
<path class="cls-1" d="M32.700000762939453,20.299999237060547c-.200000762939453,0-.299999237060547.100000381469727-.299999237060547.299999237060547s.099998474121094.299999237060547.299999237060547.299999237060547.299999237060547-.100000381469727.299999237060547-.299999237060547-.099998474121094-.299999237060547-.299999237060547-.299999237060547ZM32.900001525878906,20.899999618530273h0l-.099998474121094-.200000762939453h0v.200000762939453h-.200000762939453v-.299999237060547h.200000762939453s.099998474121094,0,.099998474121094.100000381469727v.100000381469727h0v.200000762939453h0v-.100002288818359Z"/>
<path class="cls-3" d="M2,18.799999237060547c2.5,0,2.900000095367432-1.700000762939453,2.900000095367432-2.399999618530273,0-1.199999809265137-1-2.399999618530273-2.799999952316284-2.399999618530273s-.899999976158142,0-1.200000047683716,0H.100000083446503v.199999809265137c.300000011920929,0,.600000023841858,0,.600000023841858.600000381469727v3.40000057220459c0,.5-.199999988079071.5-.600000023841858.5v.200000762939453h1.899999916553497v-.100002288818359ZM1.399999976158142,14.199999809265137h.600000023841858c1.400000095367432,0,2.199999809265137.899999618530273,2.199999809265137,2.199999809265137,0,1.30000114440918-.5,2.200000762939453-2,2.200000762939453s-.700000047683716,0-.700000047683716-.600000381469727v-3.800000190734863h-.099999785423279Z"/>
<path class="cls-3" d="M5.800000190734863,14.5c.199999809265137,0,.300000190734863-.199999809265137.300000190734863-.399999618530273s-.199999809265137-.300000190734863-.300000190734863-.300000190734863-.300000190734863.199999809265137-.300000190734863.300000190734863.199999809265137.399999618530273.300000190734863.399999618530273Z"/>
<path class="cls-3" d="M6.599999904632568,18.799999237060547v-.200000762939453h-.099999904632568c-.199999809265137,0-.300000190734863,0-.300000190734863-.200000762939453v-2.800000190734863h-.099999904632568s-.400000095367432.100000381469727-.800000190734863.199999809265137h0c.300000190734863.199999809265137.400000095367432.299999237060547.400000095367432.600000381469727v1.899999618530273c0,.200000762939453-.099999904632568.200000762939453-.300000190734863.200000762939453h-.099999904632568v.200000762939453h1.5l-.199999809265137.100000381469727Z"/>
<path class="cls-3" d="M10.300000190734863,18.600000381469727h-.100000381469727c-.199999809265137,0-.399999618530273,0-.399999618530273-.200000762939453v-1.799999237060547c0-.5-.199999809265137-1-.800000190734863-1s-.800000190734863.199999809265137-1.199999809265137.5v-.5h0c-.300000190734863.100000381469727-.599999904632568.199999809265137-.900000095367432.300000190734863h0c.300000190734863.300000190734863.400000095367432.300000190734863.400000095367432.59999942779541v1.899999618530273c0,.200000762939453-.099999904632568.200000762939453-.300000190734863.200000762939453h-.099999904632568v.200000762939453h1.500000476837158v-.200000762939453h-.100000381469727c-.199999809265137,0-.300000190734863,0-.300000190734863-.200000762939453v-2.100000381469727c.199999809265137-.100000381469727.600000381469727-.300000190734863.800000190734863-.300000190734863.399999618530273,0,.600000381469727.199999809265137.600000381469727.59999942779541v1.799999237060547c0,.200000762939453-.100000381469727.200000762939453-.300000190734863.200000762939453h-.100000381469727v.200000762939453h1.5v-.200000762939453h0l-.199999809265137.000001907348633Z"/>
<path class="cls-3" d="M11.600000381469727,18.899999618530273c.600000381469727,0,1-.399999618530273,1.300000190734863-.799999237060547h-.100000381469727c-.300000190734863.200000762939453-.600000381469727.399999618530273-.899999618530273.399999618530273-.600000381469727,0-1-.5-1-1.200000762939453v-.399999618530273h2v-.200000762939453c0-.699999809265137-.600000381469727-1.100000381469727-1.199999809265137-1.100000381469727s-1.399999618530273.399999618530273-1.399999618530273,1.799999237060547.199999809265137,1.5,1.300000190734863,1.5l-.000000953674316.000001907348633ZM11.699999809265137,15.800000190734863c.399999618530273,0,.600000381469727.300000190734863.600000381469727.59999942779541s0,.200000762939453-.199999809265137.200000762939453h-1.199999809265137c0-.5.399999618530273-.800000190734863.800000190734863-.800000190734863h-.000000953674316Z"/>
<path class="cls-3" d="M14.899999618530273,18.799999237060547v-.200000762939453h-.399999618530273c-.199999809265137,0-.300000190734863,0-.300000190734863-.200000762939453v-1.600000381469727c0-.399999618530273.399999618530273-.600000381469727.5-.600000381469727.199999809265137,0,.199999809265137.200000762939453.5.200000762939453s.300000190734863-.200000762939453.300000190734863-.399999618530273-.199999809265137-.399999618530273-.399999618530273-.399999618530273c-.399999618530273,0-.699999809265137.5-.899999618530273.700000762939453h0v-.600000381469727h0s-.300000190734863.199999809265137-.899999618530273.399999618530273h0c.100000381469727.200000762939453.399999618530273.200000762939453.399999618530273.399999618530273v2c0,.200000762939453-.100000381469727.200000762939453-.300000190734863.200000762939453h-.199999809265137v.200000762939453h1.800000190734863l-.100001335144043-.100000381469727Z"/>
<path class="cls-3" d="M16.600000381469727,18.700000762939453c-.5,0-.800000190734863-.399999618530273-.899999618530273-.899999618530273h-.100000381469727v.899999618530273c.199999809265137.100000381469727.600000381469727.200000762939453.899999618530273.200000762939453.799999237060547,0,1.200000762939453-.5,1.200000762939453-1,0-1.100000381469727-1.600000381469727-.899999618530273-1.600000381469727-1.700000762939453s.299999237060547-.5.5-.5c.5,0,.700000762939453.299999237060547.799999237060547.700000762939453h.200000762939453v-.699999809265137c-.299999237060547-.100000381469727-.600000381469727-.199999809265137-.799999237060547-.199999809265137-.799999237060547,0-1.100000381469727.5-1.100000381469727.899999618530273,0,1.100000381469727,1.5.899999618530273,1.5,1.700000762939453s-.100000381469727.5-.600000381469727.5h0v.099998474121094Z"/>
<path class="cls-3" d="M23.899999618530273,18.5l.200000762939453-1h-.200000762939453c-.100000381469727.700000762939453-.700000762939453,1.200000762939453-1.399999618530273,1.200000762939453-1.100000381469727,0-2.100000381469727-1-2.100000381469727-2.399999618530273s1.200000762939453-2.199999809265137,2-2.199999809265137,1.399999618530273.300000190734863,1.5,1.100000381469727h.200000762939453v-1c-.600000381469727-.199999809265137-1.100000381469727-.399999618530273-1.700000762939453-.399999618530273-1.399999618530273,0-2.600000381469727,1-2.600000381469727,2.500000953674316,0,1.5,1,2.600000381469727,2.700000762939453,2.600000381469727s1.200000762939453-.200000762939453,1.5-.399999618530273h0l-.100000381469727-.000003814697266Z"/>
<path class="cls-3" d="M25.799999237060547,18.799999237060547v-.200000762939453h-.100000381469727c-.200000762939453,0-.399999618530273,0-.399999618530273-.200000762939453v-4.90000057220459h-.100000381469727c-.100000381469727,0-.399999618530273.199999809265137-.700000762939453.300000190734863h0c.299999237060547.199999809265137.399999618530273.199999809265137.399999618530273.699999809265137v3.90000057220459c0,.200000762939453-.100000381469727.200000762939453-.299999237060547.200000762939453h-.100000381469727v.200000762939453h1.5-.19999885559082Z"/>
<path class="cls-3" d="M26.200000762939453,16.299999237060547v1.799999237060547c0,.600000381469727.399999618530273.799999237060547.799999237060547.799999237060547s.799999237060547-.200000762939453,1.200000762939453-.600000381469727v.600000381469727h0c.100000381469727,0,.700000762939453-.200000762939453,1-.200000762939453h0c0-.100000381469727-.200000762939453-.100000381469727-.299999237060547-.100000381469727-.100000381469727,0-.200000762939453,0-.200000762939453-.100000381469727v-2.700000762939453s-.5,0-1.100000381469727.100000381469727h0c.200000762939453.200000762939453.600000381469727.299999237060547.600000381469727.399999618530273v1.899999618530273c-.299999237060547.200000762939453-.600000381469727.399999618530273-.899999618530273.399999618530273-.600000381469727,0-.600000381469727-.600000381469727-.600000381469727-.799999237060547v-2h-.899999618530273c.399999618530273.199999809265137.399999618530273.299999237060547.399999618530273.5v.000003814697266Z"/>
<path class="cls-3" d="M29.600000381469727,14.5v3c0,.399999618530273,0,.799999237060547-.100000381469727,1.200000762939453h.30000114440918c.200000762939453,0,.5.200000762939453,1,.200000762939453,1,0,1.69999885559082-.899999618530273,1.69999885559082-1.799999237060547s-.5-1.5-1.299999237060547-1.5-.799999237060547.300000190734863-1,.5v-2.700000762939453h-.100000381469727c-.100000381469727,0-.399999618530273.199999809265137-.700000762939453.300000190734863h0c.299999237060547.199999809265137.399999618530273.199999809265137.399999618530273.699999809265137h0l-.19999885559082.099998474121094ZM30.200000762939453,16.299999237060547c.200000762939453-.200000762939453.399999618530273-.300000190734863.700000762939453-.300000190734863.5,0,1.099998474121094.59999942779541,1.099998474121094,1.40000057220459s-.299999237060547,1.399999618530273-1.100000381469727,1.399999618530273-.700000762939453-.5-.700000762939453-.700000762939453v-1.700000762939453h0l.000001907348633-.099998474121094Z"/>
<path class="cls-3" d="M.600000023841858,20.299999237060547h-.600000023841858v.200000762939453c.100000001490116,0,.300000011920929,0,.300000011920929.200000762939453v2c0,.200000762939453-.099999994039536.200000762939453-.300000011920929.200000762939453h0v.099998474121094h1.200000047683716v-.100000381469727c-.100000023841858,0-.300000011920929,0-.300000011920929-.200000762939453v-2c0-.200000762939453.099999964237213-.200000762939453.300000011920929-.200000762939453h0v-.100000381469727h-.600000023841858v-.099998474121094Z"/>
<path class="cls-3" d="M3.900000095367432,20.299999237060547h-.5v.100000381469727c.099999904632568,0,.299999952316284,0,.299999952316284.299999237060547v1.399999618530273l-1.700000047683716-1.899999618530273h-.799999952316284v.100000381469727c.200000047683716,0,.299999952316284.100000381469727.299999952316284.299999237060547v1.600000381469727c0,.299999237060547,0,.5-.299999952316284.5h0v.100000381469727h1v-.100000381469727c-.299999952316284,0-.299999952316284-.100000381469727-.299999952316284-.399999618530273v-1.5l1.900000095367432,2.100000381469727h.199999809265137v-2.100000381469727c0-.5.199999809265137-.5.300000190734863-.5h0v-.100000381469727h-.5l.099999904632568.100000381469727Z"/>
<path class="cls-3" d="M7,20.200000762939453h0q0,.100000381469727-.199999809265137.100000381469727h-2s-.199999809265137,0-.199999809265137-.100000381469727h0v.599998474121094h.099999904632568q0-.299999237060547.300000190734863-.399999618530273h.599999904632568v2q0,.299999237060547-.300000190734863.299999237060547h0v.100000381469727h1.199999809265137v-.100000381469727c-.199999809265137,0-.300000190734863,0-.300000190734863-.299999237060547v-2h.599999904632568c.199999809265137,0,.300000190734863.200000762939453.300000190734863.399999618530273h.099999904632568v-.599998474121094h-.199999809265137Z"/>
<path class="cls-3" d="M9.300000190734863,22.399999618530273h0c-.100000381469727.5-.300000190734863.5-.800000190734863.5s-.399999618530273,0-.399999618530273-.200000762939453v-.899999618530273h.399999618530273c.199999809265137,0,.199999809265137.100000381469727.300000190734863.399999618530273h.100000381469727v-1h-.100000381469727c0,.200000762939453,0,.299999237060547-.300000190734863.299999237060547h-.399999618530273v-1h.5c.399999618530273,0,.399999618530273.200000762939453.399999618530273.399999618530273h.100000381469727v-.600000381469727h-1.900000095367432v.100000381469727c.099999904632568,0,.300000190734863,0,.300000190734863.200000762939453v2c0,.200000762939453-.099999904632568.200000762939453-.300000190734863.200000762939453h0v.100000381469727h2.000000476837158c0-.200000762939453,0-.399999618530273.100000381469727-.600000381469727h-.100000381469727l.09999942779541.100000381469727Z"/>
<path class="cls-3" d="M11.899999618530273,22.600000381469727l-.600000381469727-1c.300000190734863-.100000381469727.5-.299999237060547.5-.700000762939453,0-.5-.399999618530273-.700000762939453-.899999618530273-.700000762939453h-1.200000762939453v.100000381469727c.100000381469727,0,.199999809265137,0,.199999809265137.299999237060547v1.899999618530273c0,.100000381469727-.100000381469727.200000762939453-.199999809265137.200000762939453h0v.100000381469727h1.300000190734863v-.100000381469727c-.199999809265137,0-.300000190734863,0-.300000190734863-.299999237060547v-.799999237060547h.199999809265137c.199999809265137.399999618530273.5.799999237060547.800000190734863,1.200000762939453h.799999237060547v-.100000381469727q-.199999809265137,0-.399999618530273-.200000762939453h0l-.19999885559082.100000381469727ZM10.600000381469727,21.600000381469727h-.199999809265137v-1.100000381469727h.199999809265137c.300000190734863,0,.5.200000762939453.5.5s-.199999809265137.600000381469727-.600000381469727.600000381469727h.100000381469727Z"/>
<path class="cls-3" d="M15.399999618530273,20.5h0v-.100000381469727h-1c0,.100000381469727.100000381469727.100000381469727.100000381469727.100000381469727.100000381469727,0,.300000190734863,0,.300000190734863.299999237060547v1.399999618530273l-1.699999809265137-1.899999618530273h-.799999237060547v.100000381469727c.199999809265137,0,.300000190734863.100000381469727.300000190734863.299999237060547v1.600000381469727c0,.299999237060547,0,.5-.300000190734863.5h0v.100000381469727h1v-.100000381469727c-.300000190734863,0-.300000190734863-.100000381469727-.300000190734863-.399999618530273v-1.5l1.899999618530273,2.100000381469727h.199999809265137v-2.100000381469727c0-.5.199999809265137-.5.300000190734863-.5h0l-.000000953674316.100000381469727Z"/>
<path class="cls-3" d="M17.799999237060547,22.700000762939453c0-.100000381469727,0-.200000762939453-.100000381469727-.399999618530273l-.700000762939453-2v-.100000381469727h0s-.200000762939453.100000381469727-.399999618530273.200000762939453c0,.100000381469727-.100000381469727.299999237060547-.100000381469727.5l-.600000381469727,1.799999237060547c0,.100000381469727-.199999809265137.200000762939453-.300000190734863.200000762939453h0v.100000381469727h.899998664855957v-.100000381469727c-.100000381469727,0-.299999237060547,0-.299999237060547-.100000381469727v-.69999885559082h1v.399999618530273c.200000762939453.100000381469727.200000762939453.200000762939453.200000762939453.299999237060547h-.200000762939453v.100000381469727h1.100000381469727v-.100000381469727c-.100000381469727,0-.200000762939453,0-.200000762939453-.100000381469727h-.299997329711914ZM16.200000762939453,21.799999237060547l.299999237060547-1,.299999237060547,1h-.700000762939453.100002288818359Z"/>
<path class="cls-3" d="M20.299999237060547,20.200000762939453h0q0,.100000381469727-.200000762939453.100000381469727h-2c-.100000381469727,0-.200000762939453,0-.200000762939453-.100000381469727h-.100000381469727v.599998474121094h.100000381469727q0-.299999237060547.299999237060547-.399999618530273h.600000381469727v2q0,.299999237060547-.299999237060547.299999237060547h0v.100000381469727h1.200000762939453v-.100000381469727c-.200000762939453,0-.299999237060547,0-.299999237060547-.299999237060547v-2h.600000381469727c.200000762939453,0,.299999237060547.200000762939453.299999237060547.399999618530273h.100000381469727v-.599998474121094h-.100000381469727Z"/>
<path class="cls-3" d="M21.100000381469727,20.299999237060547h-.600000381469727v.100000381469727c.100000381469727,0,.299999237060547,0,.299999237060547.200000762939453v2c0,.200000762939453-.100000381469727.200000762939453-.299999237060547.200000762939453h0v.100000381469727h1.200000762939453v-.100000381469727c-.100000381469727,0-.299999237060547,0-.299999237060547-.200000762939453v-2c0-.200000762939453.100000381469727-.200000762939453.299999237060547-.200000762939453h0v-.100000381469727h-.600000381469727Z"/>
<path class="cls-3" d="M23.200000762939453,20.299999237060547c-.799999237060547,0-1.399999618530273.600000381469727-1.399999618530273,1.399999618530273s.600000381469727,1.399999618530273,1.399999618530273,1.399999618530273,1.5-.600000381469727,1.5-1.5c0-.799999237060547-.700000762939453-1.299999237060547-1.5-1.299999237060547h0ZM23.299999237060547,22.899999618530273c-.600000381469727,0-.899999618530273-.600000381469727-.899999618530273-1.299999237060547s.200000762939453-1.100000381469727.899999618530273-1.100000381469727.899999618530273.700000762939453.899999618530273,1.200000762939453-.100000381469727,1.200000762939453-.899999618530273,1.200000762939453v-.000001907348633Z"/>
<path class="cls-3" d="M27.799999237060547,20.5h0v-.100000381469727h-1c0,.100000381469727.100000381469727.100000381469727.100000381469727.100000381469727.100000381469727,0,.299999237060547,0,.299999237060547.299999237060547v1.399999618530273l-1.700000762939453-1.899999618530273h-.799999237060547v.100000381469727c.200000762939453,0,.299999237060547.100000381469727.299999237060547.299999237060547v1.600000381469727c0,.299999237060547,0,.5-.299999237060547.5h0v.100000381469727h1v-.100000381469727c-.299999237060547,0-.299999237060547-.100000381469727-.299999237060547-.399999618530273v-1.5l1.899999618530273,2.100000381469727h.200000762939453v-2.100000381469727c0-.5.200000762939453-.5.299999237060547-.5h0v.100000381469727Z"/>
<path class="cls-3" d="M30.200000762939453,22.700000762939453c0-.100000381469727-.100000381469727-.200000762939453-.100000381469727-.399999618530273l-.700000762939453-2v-.100000381469727h0s-.200000762939453.100000381469727-.399999618530273.200000762939453c0,.100000381469727-.100000381469727.299999237060547-.100000381469727.5l-.600000381469727,1.799999237060547c0,.100000381469727-.200000762939453.200000762939453-.299999237060547.200000762939453h0v.100000381469727h.899999618530273v-.100000381469727c-.100000381469727,0-.299999237060547,0-.299999237060547-.100000381469727v-.69999885559082h1v.399999618530273c.200000762939453.100000381469727.200000762939453.200000762939453.200000762939453.299999237060547h-.200000762939453v.100000381469727h1.100000381469727v-.100000381469727c-.100000381469727,0-.200000762939453,0-.200000762939453-.100000381469727h-.299999237060547ZM28.700000762939453,21.799999237060547l.299999237060547-1,.299999237060547,1h-.700000762939453.100002288818359Z"/>
<path class="cls-3" d="M32.599998474121094,22.299999237060547h0c0,.100000381469727,0,.200000762939453-.099998474121094.299999237060547,0,0-.200000762939453.200000762939453-.299999237060547.200000762939453h-.5c-.100000381469727,0-.200000762939453,0-.200000762939453-.200000762939453v-2c0-.200000762939453.100000381469727-.200000762939453.200000762939453-.200000762939453h.100000381469727v-.100000381469727h-1.200000762939453v.100000381469727c.100000381469727,0,.299999237060547,0,.299999237060547.200000762939453v2c0,.200000762939453-.100000381469727.200000762939453-.299999237060547.200000762939453h0v.100000381469727h1.999998092651367c0-.200000762939453,0-.399999618530273.099998474121094-.700000762939453h-.099998474121094v.100000381469727Z"/>
<path class="cls-3" d="M32.700000762939453,20.200000762939453c-.200000762939453,0-.400001525878906.200000762939453-.400001525878906.399999618530273s.200000762939453.399999618530273.400001525878906.399999618530273.400001525878906-.200000762939453.400001525878906-.399999618530273-.200000762939453-.399999618530273-.400001525878906-.399999618530273ZM32.700000762939453,21c-.200000762939453,0-.299999237060547-.100000381469727-.299999237060547-.299999237060547s.099998474121094-.299999237060547.299999237060547-.299999237060547.299999237060547.100000381469727.299999237060547.299999237060547-.099998474121094.299999237060547-.299999237060547.299999237060547Z"/>
<path class="cls-3" d="M32.700000762939453,20.600000381469727v-.100000381469727q0-.100000381469727-.099998474121094-.100000381469727h-.200000762939453v.299999237060547h.200000762939453v-.100000381469727c0,.100000381469727.099998474121094.200000762939453.099998474121094.200000762939453h0v-.100000381469727h0v-.099998474121094ZM32.700000762939453,20.600000381469727h0v-.200000762939453h0v.100000381469727h0v.100000381469727Z"/>
</g>
<g>
<path class="cls-3" d="M8.920000076293945,6.800000190734863C8.920000076293945,3.230000019073486,11.810000419616699.349999994039536,15.369999885559082.349999994039536c3.560000419616699,0,6.449999809265137,2.890000015497208,6.449999809265137,6.44999971985817,0,3.559999942779541-2.889999389648438,6.450000286102295-6.449999809265137,6.450000286102295s-6.449999809265137-2.890000343322754-6.449999809265137-6.449999809265137"/>
<path class="cls-2" d="M15.380000114440918,13.359999656677246c-3.699999809265137.020000457763672-6.739999771118164-2.980000495910645-6.739999771118164-6.619999885559082,0-3.989999771118164,3.039999961853027-6.739999771118164,6.739999771118164-6.739999771118164h1.730000495910645c3.649999618530273,0,6.989999771118164,2.75,6.989999771118164,6.739999771118164,0,3.640000343322754-3.329999923706055,6.619999885559082-6.989999771118164,6.619999885559082h-1.730000495910645ZM15.40000057220459.549999237060547c-3.380000114440918,0-6.109999656677246,2.740000009536743-6.109999656677246,6.119999885559082,0,3.380000114440918,2.739999771118164,6.109999656677246,6.110000610351562,6.109999656677246,3.380001068115234,0,6.119998931884766-2.739999771118164,6.119998931884766-6.110000133514404,0-3.380000114440918-2.739999771118164-6.110000133514404-6.119999885559082-6.119999885559082M14.010000228881836,10.279998779296875V3.049999952316284c-1.449999809265137.559999942779541-2.479999542236328,1.970000028610229-2.489999771118164,3.620000123977661,0,1.649999618530273,1.029999732971191,3.059999465942383,2.489999771118164,3.619999885559082M19.280000686645508,6.670000076293945c0-1.650000095367432-1.039999008178711-3.059999942779541-2.489999771118164-3.619999885559082v7.239999771118164c1.450000762939453-.560000419616699,2.489999771118164-1.970000267028809,2.489999771118164-3.619999885559082"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,819 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
<!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
<!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
<!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
<!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
<!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
<!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
<!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
]>
<svg version="1.1" id="Layer_1" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 34 23.7"
style="enable-background:new 0 0 34 23.7;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
.st1{fill:#FFFFFF;}
.st2{fill:#0069AA;}
</style>
<switch>
<foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
<i:aipgfRef xlink:href="#adobe_illustrator_pgf">
</i:aipgfRef>
</foreignObject>
<g i:extraneous="self">
<g>
<g>
<path class="st0" d="M11.1,20.8c-0.1,0-0.2,0-0.2,0v1.1H11c0.4,0,0.6-0.1,0.6-0.6C11.6,21,11.4,20.8,11.1,20.8z"/>
<polygon class="st0" points="16.6,22.1 17.3,22.1 17,21.1 "/>
<path class="st0" d="M12.7,16.7c0-0.4-0.2-0.6-0.6-0.6c-0.4,0-0.7,0.3-0.8,0.8h1.2C12.7,16.9,12.7,16.8,12.7,16.7z"/>
<path class="st0" d="M2.5,18.9c1.5,0,2-1.1,2-2.2c0-1.3-0.8-2.3-2.2-2.3c-0.3,0-0.4,0-0.5,0v3.8C1.8,18.8,2.1,18.9,2.5,18.9z"/>
<path class="st0" d="M23.6,20.7c-0.7,0-0.8,0.6-0.8,1.1c0,0.7,0.3,1.3,0.9,1.3c0.7,0,0.9-0.6,0.9-1.2
C24.5,21.4,24.2,20.7,23.6,20.7z"/>
<path class="st0" d="M31.3,19c0.7,0,1.1-0.7,1.1-1.4c0-0.8-0.6-1.4-1.1-1.4c-0.3,0-0.5,0.2-0.7,0.3v1.7
C30.6,18.6,30.9,19,31.3,19z"/>
<path class="st0" d="M33.1,20.7L33.1,20.7l0,0.2h0C33.1,20.9,33.2,20.9,33.1,20.7C33.2,20.7,33.1,20.7,33.1,20.7z"/>
<polygon class="st0" points="29,22.1 29.7,22.1 29.4,21.1 "/>
<path class="st0" d="M33.1,20.6c-0.2,0-0.3,0.2-0.3,0.3c0,0.2,0.1,0.3,0.3,0.3c0.2,0,0.3-0.2,0.3-0.3
C33.4,20.7,33.3,20.6,33.1,20.6z M33.3,21.1L33.3,21.1c-0.1,0-0.1-0.1-0.2-0.2h0v0.1c0,0,0,0,0.1,0v0h-0.2v0c0,0,0.1,0,0.1,0
v-0.3c0,0,0-0.1-0.1-0.1v0h0.2c0.1,0,0.1,0,0.1,0.1c0,0.1,0,0.1-0.1,0.1l0.1,0.1C33.2,21,33.3,21.1,33.3,21.1L33.3,21.1z"/>
<path class="st1" d="M2.4,19.1c2.5,0,2.9-1.7,2.9-2.4c0-1.2-1-2.4-2.8-2.4c-0.5,0-0.9,0-1.2,0c-0.3,0-0.6,0-0.8,0v0.2
c0.3,0,0.6,0,0.6,0.6v3.4c0,0.5-0.2,0.5-0.6,0.5v0.2c0.3,0,0.6,0,0.9,0C1.7,19.1,2,19.1,2.4,19.1z M1.8,14.4c0.1,0,0.3,0,0.5,0
c1.4,0,2.2,0.9,2.2,2.3c0,1-0.5,2.2-2,2.2c-0.3,0-0.7-0.1-0.7-0.6V14.4z"/>
<path class="st1" d="M6.3,14.8c0.2,0,0.3-0.2,0.3-0.3c0-0.2-0.2-0.3-0.3-0.3c-0.2,0-0.3,0.2-0.3,0.3C5.9,14.6,6.1,14.8,6.3,14.8
z"/>
<path class="st1" d="M7,19.1v-0.2H6.9c-0.2,0-0.3,0-0.3-0.2V16c0-0.1,0-0.1,0-0.1c0,0-0.1,0-0.1,0c0,0-0.4,0.2-0.7,0.3v0.1
C5.9,16.4,6,16.5,6,16.8v1.9c0,0.2-0.1,0.2-0.3,0.2H5.5v0.2c0.3,0,0.5,0,0.8,0S6.8,19.1,7,19.1z"/>
<path class="st1" d="M10.7,18.9h-0.1c-0.2,0-0.3,0-0.3-0.2v-1.8c0-0.5-0.2-1-0.8-1c-0.5,0-0.8,0.2-1.2,0.5v-0.5
c0-0.1,0-0.1,0-0.1c-0.3,0.1-0.6,0.2-0.9,0.3v0.1c0.3,0.1,0.4,0.2,0.4,0.5v1.9c0,0.2-0.1,0.2-0.3,0.2H7.2v0.2c0.3,0,0.5,0,0.8,0
c0.3,0,0.5,0,0.7,0v-0.2H8.6c-0.2,0-0.4,0-0.4-0.2v-2.1c0.2-0.2,0.6-0.3,0.8-0.3c0.4,0,0.6,0.2,0.6,0.6v1.8
c0,0.2-0.1,0.2-0.3,0.2H9.2v0.2c0.3,0,0.5,0,0.8,0c0.3,0,0.5,0,0.7,0V18.9z"/>
<path class="st1" d="M12,19.2c0.6,0,1-0.4,1.3-0.8l-0.1-0.1c-0.3,0.3-0.6,0.5-0.9,0.5c-0.6,0-1-0.5-1-1.2c0-0.2,0-0.3,0-0.4h2
l0.1,0c0,0,0-0.1,0-0.1c0-0.7-0.6-1.1-1.2-1.1c-0.5,0-1.4,0.4-1.4,1.8C10.7,18.1,10.9,19.2,12,19.2z M12.1,16.1
c0.4,0,0.6,0.3,0.6,0.6c0,0.1,0,0.2-0.2,0.2h-1.2C11.4,16.4,11.7,16.1,12.1,16.1z"/>
<path class="st1" d="M15.3,19.1v-0.2h-0.4c-0.2,0-0.3,0-0.3-0.2V17c0-0.4,0.4-0.6,0.5-0.6c0.2,0,0.2,0.2,0.5,0.2
c0.2,0,0.3-0.2,0.3-0.4c0-0.3-0.2-0.4-0.4-0.4c-0.4,0-0.7,0.4-0.9,0.7h0V16c0-0.1,0-0.1-0.1-0.1c-0.1,0-0.3,0.2-0.9,0.4v0.1
c0.1,0.1,0.4,0.1,0.4,0.3v2c0,0.2-0.1,0.2-0.3,0.2h-0.2v0.2c0.3,0,0.5,0,0.8,0C14.6,19.1,14.9,19.1,15.3,19.1z"/>
<path class="st1" d="M17,19c-0.5,0-0.8-0.4-0.9-0.9l-0.1,0l0.1,0.8c0.2,0.1,0.6,0.2,0.9,0.2c0.8,0,1.2-0.5,1.2-1
c0-1.1-1.6-0.8-1.6-1.7c0-0.3,0.3-0.5,0.5-0.5c0.4,0,0.7,0.3,0.8,0.7H18l0-0.7c-0.3-0.1-0.6-0.2-0.8-0.2c-0.8,0-1.1,0.5-1.1,0.9
c0,1.1,1.5,0.9,1.5,1.7C17.6,18.7,17.4,19,17,19z"/>
<path class="st1" d="M24.3,18.8l0.2-1l-0.2,0c-0.1,0.7-0.7,1.2-1.4,1.2c-1.1,0-2.1-1-2.1-2.4c0-1.7,1.2-2.2,2-2.2
c0.8,0,1.4,0.3,1.5,1.1h0.2l-0.1-1c-0.5-0.2-1.1-0.4-1.7-0.4c-1.4,0-2.7,1-2.7,2.5c0,1.6,1,2.6,2.7,2.6
C23.2,19.2,24,19,24.3,18.8z"/>
<path class="st1" d="M26.2,19.1v-0.2h-0.1c-0.2,0-0.4,0-0.4-0.2v-4.8c0-0.1,0-0.1-0.1-0.1c0,0-0.1,0-0.2,0.1
c-0.1,0.1-0.4,0.2-0.7,0.3v0.1c0.3,0.1,0.4,0.1,0.4,0.5v3.9c0,0.2-0.1,0.2-0.3,0.2h-0.1v0.2c0.3,0,0.5,0,0.8,0
C25.7,19.1,26,19.1,26.2,19.1z"/>
<path class="st1" d="M26.6,16.6v1.8c0,0.6,0.4,0.8,0.8,0.8c0.5,0,0.8-0.2,1.2-0.6v0.6l0,0c0.1,0,0.7-0.2,1-0.2v-0.1
c-0.1,0-0.2,0-0.3,0c-0.1,0-0.2,0-0.2-0.1v-2.6c0-0.1,0-0.1-0.1-0.1c-0.1,0-0.5,0.1-1.1,0.1v0.1c0.3,0.1,0.6,0.1,0.6,0.3v1.9
c-0.3,0.2-0.6,0.4-0.8,0.4c-0.6,0-0.6-0.6-0.6-0.8v-1.8c0-0.2,0-0.2-0.1-0.2c-0.1,0-0.6,0-0.9,0v0.1
C26.6,16.2,26.6,16.4,26.6,16.6z"/>
<path class="st1" d="M30.1,14.8v3c0,0.4,0,0.8-0.1,1.2l0.1,0.1l0.2-0.2c0.2,0.1,0.5,0.2,1,0.2c1,0,1.7-0.9,1.7-1.8
c0-0.8-0.5-1.5-1.3-1.5c-0.4,0-0.8,0.3-1,0.5v-2.6c0-0.1,0-0.1-0.1-0.1c0,0-0.1,0-0.2,0.1c-0.1,0.1-0.4,0.2-0.7,0.3v0.1
C29.9,14.3,30.1,14.3,30.1,14.8z M30.6,16.6c0.2-0.2,0.4-0.3,0.7-0.3c0.5,0,1.1,0.6,1.1,1.4c0,0.6-0.3,1.4-1.1,1.4
c-0.5,0-0.7-0.4-0.7-0.7V16.6z"/>
<path class="st1" d="M1,20.6c-0.2,0-0.4,0-0.6,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.2v2c0,0.2-0.1,0.2-0.3,0.2H0.4h0v0v0.1v0h0
c0.1,0,0.4,0,0.6,0c0.2,0,0.4,0,0.6,0h0v-0.1v0H1.5c-0.1,0-0.3,0-0.3-0.2v-2c0-0.2,0.1-0.2,0.3-0.2h0.1h0v-0.1v0h0
C1.4,20.6,1.2,20.6,1,20.6z"/>
<path class="st1" d="M4.3,20.6c-0.2,0-0.4,0-0.5,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.3v1.4l-1.7-1.9c-0.1,0-0.2,0-0.4,0
c-0.1,0-0.3,0-0.4,0h0v0.1v0h0.1c0.2,0,0.3,0.1,0.3,0.3v1.6c0,0.3-0.1,0.5-0.3,0.5H1.7h0v0.1v0h0c0.2,0,0.3,0,0.5,0
c0.2,0,0.3,0,0.5,0h0v-0.1v0H2.7c-0.3,0-0.3-0.1-0.3-0.4v-1.5l1.9,2.2l0.2,0h0l0,0c0-0.1,0-0.2,0-0.4v-1.7
c0-0.4,0.2-0.5,0.3-0.5h0.1h0v-0.1v0h0C4.6,20.6,4.5,20.6,4.3,20.6z"/>
<path class="st1" d="M7.4,20.5L7.4,20.5c0,0.1-0.1,0.1-0.2,0.1h-2h0c-0.1,0-0.2,0-0.2-0.1l0,0H5h0v0c0,0.1,0,0.2,0,0.3
c0,0.1,0,0.2,0,0.3l0,0H5h0l0,0c0.1-0.3,0.1-0.3,0.3-0.3H6v2c0,0.3-0.1,0.3-0.3,0.3H5.6h0v0.1v0h0c0.2,0,0.4,0,0.6,0
c0.2,0,0.5,0,0.6,0h0v-0.1v0H6.8c-0.2,0-0.3,0-0.3-0.3v-2h0.6c0.2,0,0.3,0.2,0.3,0.4l0,0l0.1,0l0,0v0c0-0.1,0-0.2,0-0.3
c0-0.1,0-0.2,0-0.3l0,0L7.4,20.5L7.4,20.5z"/>
<path class="st1" d="M9.7,22.6L9.7,22.6c-0.1,0.4-0.3,0.5-0.8,0.5c-0.2,0-0.4,0-0.4-0.2V22l0.4,0c0.3,0,0.3,0.1,0.3,0.4l0,0
l0.1,0l0,0v0c0-0.1,0-0.3,0-0.4c0-0.1,0-0.3,0-0.4v0H9.2h0l0,0c0,0.2-0.1,0.3-0.3,0.3H8.5v-1H9c0.4,0,0.4,0.2,0.4,0.4l0,0l0.1,0
l0,0v0c0-0.1,0-0.3,0-0.4c0-0.1,0-0.1,0-0.2v0h0c-0.3,0-0.7,0-1,0c-0.3,0-0.7,0-0.9,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.2v2
c0,0.2-0.1,0.2-0.3,0.2H7.7h0v0v0.1v0h0c0.2,0,0.7,0,1,0c0.3,0,0.8,0,1,0h0l0,0c0-0.2,0.1-0.4,0.1-0.6l0,0L9.7,22.6L9.7,22.6z"
/>
<path class="st1" d="M12.3,22.9l-0.6-1c0.3-0.1,0.5-0.3,0.5-0.7c0-0.6-0.4-0.7-0.9-0.7c-0.2,0-0.4,0-0.6,0c-0.2,0-0.5,0-0.6,0h0
v0.1v0h0.1c0.1,0,0.3,0,0.3,0.3v1.9c0,0.1-0.1,0.2-0.3,0.2H10h0v0.1v0h0c0.2,0,0.4,0,0.6,0c0.2,0,0.4,0,0.7,0h0v-0.1v0h-0.1
c-0.2,0-0.3,0-0.3-0.3V22h0.2c0.2,0.4,0.5,0.8,0.8,1.2c0.1,0,0.3,0,0.4,0c0.1,0,0.2,0,0.4,0h0v-0.1v0l0,0
C12.4,23.1,12.4,23.1,12.3,22.9z M11,21.9h-0.2v-1.1c0,0,0.1,0,0.2,0c0.3,0,0.5,0.2,0.5,0.5C11.6,21.7,11.4,21.9,11,21.9z"/>
<path class="st1" d="M15.8,20.7v-0.1v0h0c-0.2,0-0.3,0-0.5,0c-0.2,0-0.4,0-0.5,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.3v1.4l-1.7-1.9
c-0.1,0-0.2,0-0.3,0c-0.1,0-0.3,0-0.4,0h0v0.1v0h0.1c0.2,0,0.3,0.1,0.3,0.3v1.6c0,0.3-0.1,0.5-0.3,0.5h-0.1h0v0.1v0h0
c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0h0v-0.1v0h-0.1c-0.3,0-0.3-0.1-0.3-0.4v-1.5l1.9,2.2l0.2,0h0l0,0c0-0.1,0-0.2,0-0.4v-1.7
C15.4,20.8,15.6,20.7,15.8,20.7L15.8,20.7L15.8,20.7z"/>
<path class="st1" d="M18.2,23c0-0.1-0.1-0.3-0.1-0.4l-0.7-2c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0,0,0,0,0,0c-0.1,0-0.2,0.1-0.3,0.2
c0,0.2-0.1,0.3-0.2,0.5l-0.6,1.7c-0.1,0.2-0.2,0.2-0.3,0.2h0h0v0.1v0l0,0c0.1,0,0.3,0,0.4,0c0.2,0,0.3,0,0.5,0l0,0v-0.1v0h-0.1
c-0.1,0-0.3,0-0.3-0.1c0-0.1,0-0.2,0.1-0.3l0.1-0.4h0.8l0.1,0.4c0,0.1,0.1,0.2,0.1,0.3c0,0.1-0.1,0.1-0.2,0.1h0h0v0.1v0l0,0
c0.2,0,0.4,0,0.6,0c0.2,0,0.4,0,0.5,0l0,0v-0.1v0h0C18.3,23.1,18.2,23.1,18.2,23z M16.6,22.1l0.3-1l0.3,1H16.6z"/>
<path class="st1" d="M20.7,20.5L20.7,20.5c0,0.1-0.1,0.1-0.2,0.1h-2h0c-0.1,0-0.2,0-0.2-0.1l0,0h-0.1h0v0c0,0.1,0,0.2,0,0.3
c0,0.1,0,0.2,0,0.3l0,0h0.1h0l0,0c0.1-0.3,0.1-0.3,0.3-0.3h0.6v2c0,0.3-0.1,0.3-0.3,0.3h-0.1h0v0.1v0h0c0.2,0,0.4,0,0.6,0
c0.2,0,0.5,0,0.6,0h0v-0.1v0H20c-0.2,0-0.3,0-0.3-0.3v-2h0.6c0.2,0,0.3,0.2,0.3,0.4v0l0.1,0l0,0v0c0-0.1,0-0.2,0-0.3
c0-0.1,0-0.2,0-0.3l0,0L20.7,20.5L20.7,20.5z"/>
<path class="st1" d="M21.5,20.6c-0.2,0-0.4,0-0.6,0h0v0.1v0H21c0.1,0,0.3,0,0.3,0.2v2c0,0.2-0.1,0.2-0.3,0.2h-0.1h0v0v0.1v0h0
c0.1,0,0.4,0,0.6,0c0.2,0,0.4,0,0.6,0h0v-0.1v0H22c-0.1,0-0.3,0-0.3-0.2v-2c0-0.2,0.1-0.2,0.3-0.2h0.1h0v-0.1v0h0
C21.9,20.6,21.7,20.6,21.5,20.6z"/>
<path class="st1" d="M23.6,20.5c-0.8,0-1.4,0.6-1.4,1.4c0,0.8,0.6,1.4,1.4,1.4c0.8,0,1.5-0.6,1.5-1.5
C25.1,21,24.4,20.5,23.6,20.5z M23.7,23.1c-0.6,0-0.9-0.6-0.9-1.3c0-0.5,0.2-1.1,0.8-1.1c0.6,0,0.9,0.7,0.9,1.2
C24.5,22.5,24.4,23.1,23.7,23.1z"/>
<path class="st1" d="M28.2,20.7v-0.1v0h0c-0.2,0-0.3,0-0.5,0c-0.2,0-0.4,0-0.5,0h0v0.1v0h0.1c0.1,0,0.3,0,0.3,0.3v1.4l-1.7-1.9
c-0.1,0-0.2,0-0.4,0c-0.1,0-0.3,0-0.4,0h0v0.1v0h0.1c0.2,0,0.3,0.1,0.3,0.3v1.6c0,0.3-0.1,0.5-0.3,0.5h-0.1h0v0.1v0h0
c0.2,0,0.3,0,0.5,0c0.2,0,0.3,0,0.5,0h0v-0.1v0h-0.1c-0.3,0-0.3-0.1-0.3-0.4v-1.5l1.9,2.2l0.2,0h0l0,0c0-0.1,0-0.2,0-0.4v-1.7
C27.8,20.8,28,20.7,28.2,20.7L28.2,20.7L28.2,20.7z"/>
<path class="st1" d="M30.6,23c0-0.1-0.1-0.3-0.1-0.4l-0.7-2c0,0,0-0.1,0-0.1c0,0,0,0,0,0c0,0,0,0,0,0c-0.1,0-0.2,0.1-0.3,0.2
c0,0.2-0.1,0.3-0.2,0.5l-0.6,1.7c-0.1,0.2-0.2,0.2-0.3,0.2h0h0v0.1v0l0,0c0.1,0,0.3,0,0.4,0c0.2,0,0.3,0,0.5,0l0,0v-0.1v0H29
c-0.1,0-0.3,0-0.3-0.1c0-0.1,0-0.2,0.1-0.3l0.1-0.4h0.8l0.1,0.4C30,22.9,30,23,30,23c0,0.1-0.1,0.1-0.2,0.1h0h0v0.1v0l0,0
c0.2,0,0.4,0,0.6,0c0.2,0,0.4,0,0.5,0l0,0v-0.1v0h0C30.7,23.1,30.6,23.1,30.6,23z M29,22.1l0.3-1l0.3,1H29z"/>
<path class="st1" d="M33,22.6L33,22.6c0,0.1-0.1,0.2-0.1,0.3c-0.1,0.1-0.2,0.2-0.4,0.2c-0.1,0-0.2,0-0.3,0c-0.1,0-0.1,0-0.2,0
c-0.1,0-0.2-0.1-0.2-0.2v-2c0-0.2,0.1-0.2,0.2-0.2h0.1h0v-0.1v0h0c-0.2,0-0.4,0-0.6,0c-0.2,0-0.4,0-0.6,0h0v0.1v0H31
c0.1,0,0.3,0,0.3,0.2v2c0,0.2-0.1,0.2-0.3,0.2H31h0v0.1v0h0c0.3,0,0.7,0,1,0c0.3,0,0.7,0,1,0h0l0,0c0-0.2,0.1-0.4,0.1-0.6l0,0
H33L33,22.6z"/>
<path class="st1" d="M33.1,20.5c-0.2,0-0.4,0.2-0.4,0.4c0,0.2,0.2,0.4,0.4,0.4c0.2,0,0.4-0.2,0.4-0.4
C33.5,20.7,33.3,20.5,33.1,20.5z M33.1,21.2c-0.2,0-0.3-0.2-0.3-0.3c0-0.2,0.1-0.3,0.3-0.3c0.2,0,0.3,0.2,0.3,0.3
C33.4,21.1,33.3,21.2,33.1,21.2z"/>
<path class="st1" d="M33.1,20.9c0.1,0,0.1-0.1,0.1-0.1c0-0.1-0.1-0.1-0.1-0.1h-0.2v0c0.1,0,0.1,0,0.1,0.1v0.3c0,0,0,0-0.1,0v0
h0.2v0c0,0-0.1,0-0.1,0v-0.1L33.1,20.9c0,0.1,0,0.2,0.1,0.2h0.1v0C33.3,21.1,33.2,21,33.1,20.9L33.1,20.9z M33.1,20.9L33.1,20.9
l0-0.2h0c0,0,0.1,0,0.1,0.1C33.2,20.9,33.1,20.9,33.1,20.9z"/>
</g>
<g>
<path class="st1" d="M9.3,7.1c0-3.6,2.9-6.4,6.4-6.4s6.4,2.9,6.4,6.4s-2.9,6.4-6.4,6.4S9.3,10.6,9.3,7.1"/>
<path class="st2" d="M15.8,13.6c-3.7,0-6.7-3-6.7-6.6c0-4,3-6.7,6.7-6.7h1.7c3.7,0,7,2.8,7,6.7c0,3.6-3.3,6.6-7,6.6H15.8z
M15.8,0.8c-3.4,0-6.1,2.7-6.1,6.1c0,3.4,2.7,6.1,6.1,6.1c3.4,0,6.1-2.7,6.1-6.1C21.9,3.6,19.2,0.8,15.8,0.8 M14.4,10.5V3.3
c-1.5,0.6-2.5,2-2.5,3.6C11.9,8.6,13,10,14.4,10.5 M19.7,6.9c0-1.7-1-3.1-2.5-3.6v7.2C18.6,10,19.7,8.6,19.7,6.9"/>
</g>
</g>
</g>
</switch>
<i:aipgf id="adobe_illustrator_pgf" i:pgfEncoding="zstd/base64" i:pgfVersion="24">
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
VO3sNnSxORaNAEKrMvoyRiA3C6lYwzxsZzvkIpNZTBCPwBKONgQfwSM0qQwgqDy2PLVEFVlAQ1RJ
2CpLNjnblHQbVhBFAlYbsNs0DZGAbkvYCLQyE23Qbd2GMFGsqTDQbSFUVFceosAUiiDqwsKBGEm8
BEFrcUe3GUQau6Iq2JQWDyyCLaan4VpKjWv0kSrf64I2Bl7W7IWRpcESNfkA9Qx4PDXb+OAzEaZu
m2RQ6AOJcbCQILOpaLoEdBgQyYuPBh4LCFjoaIwUxINIWjQQMobSWL5NK20wM9HniUBpHB4QDiwM
kBGFT0AY1bUEnXq0saG/wnRsXNtria/pNpOmHGjOWRmxeLZHwWgIDFaWip1FLASnS0IG23oJOZrT
dK9ByAjdU+AL3Y1EgJHDjsq75YAZ+hyTTMzGPIwH5ghkLLmGAiAsxwwU9W4DHxC6TWaAwRLsSLcH
7rYZ54G77WHBuafMQkV8K/VAFEi8BBGQMPAaHl4RRMOh4CG6zYFhcskdTk5hE2XGKmYlX5aCr9Mq
lYJQdQlGCeljPBR4mcF7h0jCbmuJuk0MI7fbuo0A7TaXZNVtpnTsNk+3YWox0Ou2bnNsIJQGLp26
XiKgqxbAUXgaQtZo8TXgVnyN5SwFZoIxGZOKANqINYxAKhEQQHAyLXs+UDB48SsEn4mWQqicmkNW
OB8YI3ebaa68uzAPdoUzeTC/hRu53TYa8CyEk01GnQoaI8UWtgFRzKKEAHK6rdtGMU9A5TakKE2C
QK0YnNBtqAsCImQoTG4wSkPLmANLbGCzwTBgFp+AbgO7zTyBFbYBXzP0q9iFzbEwmErkBixBCgEO
E4czE1n5zK9wcOZCwngawhOxOZYPJf0qINIlIUO6tb3BNZ/5BAqC1KXbLgKcY6lwzrH8kKhh0l0U
U+ycVUYBkhFvRA6jD6KqBpWXLOBez9dple6IeGxBJyuwIMQorTTxs6OI7rb9yQ2IIL2klDRSjNa6
3G2nUaNUSX20shLLpMRMRXSIXEe3jVSj7dzTBXcbXsxcEMSZUDqwvBRgXgZVcNADGwKW3KEuiGhC
Oc9XAU9lEAcpStNtnYFPqTKWGj3m3eoZLItg1EACtNsMHI7YBTZmJpURaNJtlcojgiCZQhHEKVl5
iE8M9BCgxidBgGa0CEJA0YAQaHAEcakrD/EVCB4InjI0oMi9k1a31A/Fy7/i2Nxy5DD6ui1FfauL
AClkpRPQoVUqp5YqpROIVtpgtzHAAIqX+KBcDSYUVthtoMNtWYU1fSwoyJRZztMGP5QGgkIAPVzT
gPcTYWHFodaALzILR1cY5nJJjAaFyToYy2ehVS5MxMkwOIQHFhQmzBMGWmZSWSw46HWbTz0UKY4N
0Aehb2Bh8rGOz0DbqFVKzKgwYZ4oZowWxiAS0G0YxGnJp5NjVmimRqlyMjSwsGJWGDISAYcixbGV
8aB4joipw3Foal0E4wWAMKopBSsMVigMnJhGAwIdoQYtzEJjDiwgAVeBRcGJoDSqcqAVnqlRxXQb
6sUQUIGgVvjRAaluRJMYMvcsu9fHITe0qqEIVBKOGsni4QsdjOMh4MCS2hujaaiICi4lBrWeIsWx
ZWiDHshCaNnuNPBZb0GCwZATAQqorBKxz54GPhs2mN0rwVLI1IYoZkAjDq2/EDWSJXb+MQBt9Iph
KBuxSxjOFNxnf8kPlOaz3SaRrbrc+CyQu8CMr+9iBiUGeghbVx6CwaCUIEAS9kA4SLwEEblAHohQ
gyMIgrryHg4FD+FhoSIIjSY9RLdVHAoegqDxSRB4hImkskfMNryDbilAKO0KpAAsLbPZQnI3BJdY
pUw5hD7Ew2FXCCwLIwtHg0DJ3WZwFiTE2wA7EZKOJoFqPIbMfWCAuiTDMHIaAb5vfuvHfWPtP8hi
XnvnuH6c7+8f14+3Fa4fc7vbX7W3dtePLf9b2D+vH//9c/24b4w9qO+qtzDfurnsd8bV41873la1
49uzrZ3n36vOdctyv7Xv/LfmlWPsf924bvwzrhv73v2vGnfc+bfcV41v3xakNf/V/1s31pnrjL/1
9u6PMa8/Y4591Thjfbu9deP6udz1rhtz/uvPmNeNsfW8brytcre2142tvVn3ujG3u/4btD+2v/4t
3L1ujO/9deNub+WY47Dn67PHtmqcse69YpxvvVhfbnnd1t/aMa8e21stznhb6d0rxlrz+nGuGXNd
P+ex95z7mnHH9XMZY78tKPPdQ+6rxv56fqvGfpW19RXja7Gu3/9fL97X++q3lccW1+59r5vzvlrc
ffb1Yq3zvr9iXDOu+2b/6wbpX3fHXleNN5nFv+qNca4a46yx1rXfj/PGtu66K7/c7r5uvn/l+etc
e+V3Z+5z5Xdb1f4//z3Xfr3+vte+ref9a97vBsq6Y2urv1v4d/6V137x5h33Xvv1e3O8ve+29nsv
/phv/3vl+PbOtef81o73313nyiv//+/KtxWuO/N9q797+1773Va88vtt17xqnnWu/HZ//66b89hW
frfw6mt97vpWfje/ddufceX3+7srv5vs2tx71R/b2u/W2sJvva/6dr8997hqj/P/v+brLdcd8207
yOe8teYZlG3mvf+a88X6317z1xnbrC+v+ea/bee/d6/xrfpuq6u+2+p6z/XdVd/sd7768g7y94Zc
76qvttriXnXW+tqrdd3X68svr/tyG+vcvc6+7ot9t93fu+u+W1+N719pW/fFfmebf9U339otvvlz
7POu+ub9s/Wd5+6rvjx72c35b47rxqstbG2r/P/91d6Oed3byn6vu628a6517fzzaq+9Fd+s++ad
V3xrX22b7+2V13y5/5xXrjHvmP/LPQhjnLffGO98Nf79Vu6t5hvXe++um8v943qv37hrr7XHFd9f
tf791t33vv1/bX3WdXMbf4xrvluoc90153x/1VzW29qar+f3dssrvpus6mwrvq0NFNqbcbX3a8ux
//X//LPvuv4NBOIY17+F3OtdP2gLM//dV45/x5fv7nn92ypza7W29Vvsq//Y5o9r30D2cp+v7T7r
j/2ufgu597ZXn7mu/lp/cfXb6tfe9e2156sz5rr2DaQ3B9mLe84c5107aAuxzRj/yq3X1t+sscad
145r33/XvoH+xz5vof387tr55xzX3vmuXXPba9fb176F//J8L9ae++xBWmfftzB3nGvPuHrr9eW1
65t59V5v3X/120r7rr3FPttqr64dhD/uvnLsNa722o6tBvm/tedW417tx1trC7/Vn/fKtxXuuHJ8
vcW2cvw973VvINDeQmuz5nhfbr3Pvm7QFv7Mf+W349r79v3Xra++uXafdfd1b6Cfuc1bb+Hmu/at
L6+b2/1nzmvXPutf9++1651z5VuYf7/+Z54rz/tu7Wu3H19ducd668q3lf9eV47x9rXf/rfGu3K8
vb0exLvevfYtxNpzW/f92edd+edaY+995RvIW86zl3G75253t7b2u7W2Ve+ad1s57zj7b7fu+/66
+97Z28q3VeeX12+/tlpXrj/X2+p3fL+t3/LK7d/Wa135JtP32vyrx5UjQLbWBgo3GYazrW3V98a2
Yr0/r3dbaWs7z/Xi3jmvOvuqvfbV4u+r/t1vIJ7r3sL8Me/V447xz/V3W6/duf6dQVuI9bW92qs9
5tf/ardVv9jrjevFu36vd72/3m3V/+6b64o/93nXv3vHVW+r7ce5+m31va2d858r57ju++/fvupN
9vvOevOqPd78+lzxvQiQrdxA4eWZa423xzb3ivX1GPuKs9cVW1xz9jp7X3HWv+LLr635Y41rzndf
bXfHtmZ9O/YYY/9vtjVzu1/e+7U1a7x3/+Hvf/+Kr/0V5w2kcdbc8qy/rTnz/7Xu2W9ta/a+a7s7
B4Ub/9y79RV/jm2322LLNe7+grzWGH/Pb8a84o5t9ncrtxWu2e/cr645e9x/xzXnbeW/3RVvq96t
rRn7XnG+v+b+L7YWw90apNxA/etv/cX9Z59BHvPb68ebDHN+Na/X1o/DvO/Ft+Zse/5W+9x9xX/f
mvPueeebva05Y/v/9zr7ikE825rzJsvY1lwzv5xv7qvN/vp8f78gzfXdeGtd9xZqv7/Wt/Zq8+5b
c3s/tr7azDH+19abt9X/Xf+O681X285117VzPuvcO9b5buzrzd9+rT23nH9vK9d1c9lm/H+uOOe8
tbcV501WNeet1nfnXG/2Gf+L8cVV45wr3l133+vl/Na2f8s5xxnXa73dVev8sc9V423Vdf+7Wp59
37xmfLG//++acd9/74zr/X9rzr3Puev7a+9aX6yz7RZ377nuFWNb8/bX6l8x3mT9Wltz9jn/XTNe
4X151rd/q3/VoM65ztbrurdQ65tx97h+rvvP2O9efe764/q5jfnm/Vu7va/334v7tRVvq40tx9rm
iv/1+ub6Ofb8681r5rn6bWUxt7Vv76+tvGec9ddVX921/7/mTaa7vZb77qvmds/af287x9zristt
1b21v/Kc9eccdHneX1d8t3Bbe33lXN78ft5xvdfajvXNtXMeY3t5rvfefffmH+t9va34esxr5zK3
mvO9Lc5dV3wx1rn2vbX/lV/9v+cV663cQKCrrb+cV8ztnv/21nu8f+V3A2W+Ocbdaqw9rv1usuut
t5rXy218eeV3Qy1c3spt5b3ePfN9d965e+xzvdvyrTvvFfvN/99Wn1+Nd9YVe935/Xlv/H+9nM/f
3u77zd7vevu9+/9/+cVf//7z7p5rmzHPF9t67wayOOd9sd++3i3U/Pp7ed+dd+7v9tVebuOb9+c9
X875r5jbmNufrf3V3py73l7/au8m69Zmv/uvmPP+dp453vpuWy9q4bbdatto4e4GABNnNwtnN1S3
BaSnBWW5x0VxEw7TQUhPy4fqtoyFu1sJ4h6Xc2wqEGc5uznL7Y05jy/3+z3HAIggVplB3buBA0Al
BA6FQreVoQ12W7d13VbDvS3utg9XSQR7OG/w9MLQgObkr9vw/VIca7/6SSKf94m+8LNJoAqOI91m
I1+kgCLWTofDoJJfNRKJRFKPSLdd+3hUSbd1m/dwPL4v9hdZ7AULNQYSikmVEa9hgeJ4iI2GIsVJ
USjDBr2MQhtqyXTBkeqwud0WwSTEexcCGFkSwJC5MXOA3DhgG4vIZNJAzA0FTCQ4+fQdmJOhLEIv
A4s8Sii2hAlEgcbcFRRloQ14tMRSIafUQe8j2KD3TWabe2IcFK/bJAQb9CTVwSOADGwoHhvOIrd+
Nuh1wM/SRhVw1oWR+0mVNnI/jJCzwe7jKFSHza20v8gVzgY9WzJdMEOE4032Q++KdhtDlIB9MZMp
CppaqASzZZShYE+DkKEREAEwIAGzEgAgGDQaD0pG0wk1vQMUgAJBOihKTlAyNB6TiUPCSCgMB8RY
jMIojqIojMSYYgoyGwSkR/Kee3NPFKU5hZEjM/pEUy6JdOamZYAn2yq3jHGxdNF+9w==
]]>
<![CDATA[
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
]]>
<![CDATA[
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
]]>
<![CDATA[
uY14CQ71m1LlESsQ/+Ss4sj0z3Is8Tm/P5Y3g5syavMSdsUhw5wN8eG28G87XmGnLqWxIj2HPpjD
9Ws9SHLbwwMGnxp5DwX0JVRQisGgC0o54bcEuG7GAeGMoENKOUWFe56xDSnyRDlFQ7khaWY6HC/U
7mlToAPvUAtlJe752cKe+tyNGSK3Sw0/tNkYt49hmaX7z/iSa8sHA16Iqb+guJJENSPLPxm76TOd
4WXfQG4qU7URXfq3LD3nccYBnZsh4mkC1VqMFFkyJKXDixe3EofumdfITSN1AU8Qtsp3Bfq30lFt
3F0CwmhuahzV/ghkgn/X/ERyBgaGVL4TE9WbydwUuXo+Cf71mOZNzE3jrwTeI8H5+DcGXflIEhYB
XduR8eLf7E/DGYpW149p6l+8XZO1LDf1r3bki+K65ZZhmfiXP/a/Yd9j4F8PdENn8bmqf0FeNmFE
zu08jIecpvvBiN+YiMK/IIwpH9G/zAFMkpwvCPujf6tuH7O+XxX8m4TANnWQKZMC/LvRztRM9O8O
OmVkgX9LDFMj+jqUBGLEvzGpfyuQl9h5GovcJ1KT+aBdCBEPM5MWskFWkpF4Ca4R4QTWdqqP1xej
WxBTb5L6H2wdYMEoc3139FuIyoXqe1fxdsjYZlMQ7DxxjCm6nw1uZfsGXFMrCTVUkXVu+2ryHGZ7
ZiVF8grjFrkFq2/cLvN4yO7K6WLOrdDQwuG7j+uUUJQjNkRXTtk4Fh1a1iS6FbVkpd39EZyMLwY6
x1l0jNOP+Q9cDPOAk+Yc4R9hvNpVqTC6WBHsU8bsTNejgF0xc/O9QBv2wd7ADA2dKHKu4tyFZESU
zdhHqp7yodZ+rePWztZiUBRqB9xmVKA90k/Wtg7C7wtIzkq5nXB6V3iqG5Z1llOLB5lOzYNTjpOv
giPPJB4K/GN7vI3zb2sGx3su6r3DY1qhTLPFQimkTajqLxVV2z8sOgQkH4eLGNKWl1zM6gpZ9UWC
p5oABt9ShAFZtje5FZiwFZLYlhAFFYEwLEpSPsU8HMRd8wOUviogGvtkRikwDnQGp2Y0h9m34d2B
yiJ8UIg902Z0MtTauXVgEm7ypPjLqXJLyFyyDkxyE0YLp7SQIzNvQ71X9z9DPUQkC6AM6uV0N9FR
76bCOm2v+4NKpKHjW4ZBUO9VyLd1KvF8Zo+gXprqniOqUKNkMaSGNgVG7DcZ1Ef0XTIWq5wC9boW
nKHGzQzyH3dw0ARMzZQcxXa9YoBYBLNvxeUMoNT4YrDxMdXOp+wenuOgEI2ezjYVBz9kxUFmTRCi
MEhsMM8pe1z5HiGzmNuvOFr2bcFz4/IvoOPE+rV8xIkXLpP5OWE1ta0DcceLcSueRB2Aa56VnZAN
4/2XCUziqYQtvFz2W4+9oGB1c1ZDafnr9x7i+IGVYdkyIPG5Yq9FXpkIUZRku0oY2eyK4ScCE4Mc
sQcrpumWkYpwUVKq+E+ceS5y3foAL3kYWGA+5TFL3aajLLdk02V8IW8MFaRY6eV0ruF+l+ihJRs8
nFBg9sHl8Pxr9VLEMXO6QixBZTd21rop49BpA8XIGYLOvQB+s/CTA69Q/wScFy0DeuXyZWUdBefv
C326poz7n14NBWzUJksBUcHPdPS/4SIYdhDGlOB8tkmeTn4urWE7U7Cjh75N8pQkdO1kOUsYsM76
qRhrOpwcZ36te+rqPb1QrBGEgkdV77BOn78qCQwmDmhCdayBENi8e5Z39aalzSlio1JMq7Xjs6sX
GneL2t5JVZC6j1/xj/Pw6qXXVHNrrqnoS0Gto9VEYInFMu+Vv4wp4ZIlrat39Fo0GsliFiz7f0X+
ThYpVa16jQ/Yk65e+vwZ1zCjD6IZ9tPDqL/qPQJ1RqDHbHvmKgIjWtVbzuaYMU1pE5PGsSLI79CY
YbVdDfQnAlIW5Mw5zjABQ86aaObiwv6hS87QLHYwxyWimqmxaNmdY6I8Fu16o5pN93wRZT7fZVPf
EOhGtjLe25WIYcZBph9KnZNKyfI2lNulmKkLN3KOAYQ387RTgs0HPItYnzCTYutwjJtKdwFcUfn4
xg40Z8jHG3LKvMDZ9zZlsTOkhufdr2Mf0uP73iWW2BUOfQF6W7cTVx25PBSr1yb10CZyGbj9cszK
AhOD+PJdZ23hS4NjMDx7Ba8FYh3j4QvIKr1Y4HUVbpLyI+CfaJdvIedc9tSEiJ27zd9yB+iT1OJq
JnKlV0o03D5MLoNJtp/0In1UGfwEiUT4xz1bPL5Syv0vJQrLqOCJDADCq34R0N9h+HpoVlAKckJl
dmUf43cgkwyen+mT5ALtei0bDneYgrha00sjD0ZV2zRwvOt0fnnFiPdMUehnldVgbHTgDMa7Cn0J
xfzuKospM98SIlEQNGrpZUeGp+wPREh5CalZq/vx8L27PUcZqedSRQB6yCJnDZbce7wLNaybEnkJ
h8u7a+pV6KgCtIdZ5yfCd6mDbZsa75L2sCgbHG2rnvsTgoRdvMsp12y9C1BDXRSYLTQqdV4WMHXe
Xa3FsN+g1NVYmoU9Pnb+7qaGrrpk4l2DL0eOgmVAXXz34Gx7btXBZFQJPTPLuIQwMgx6YAG791X8
03G5lvDBtN7ACyPn209uWsWZVDg0dLm6Dx1pQjqM1Wdad155v/Fq+RFFkcCooMaIs8ZtbBlD1LKp
wY90RfaIdMVv+CcGe6nBoCjB0VVODhEc07J+P+Es8wKNJ14yi1WJ3Z2QRmHbiA80Xl6JCCTWNx3K
u+DgcfPy4mSU2bHj6bgUnTNha3XpYTWW8FsG6XBa7kRgivPDX2hNMluxgZnQwgOdoaErHC6riWN6
lC0Gf8nT/Y9UpnnPasrBlzr8sLyDy/hbbvEdWZmWMOl15f0qG87bwpNwr5trO8JAHTIdmONC/B26
hVKkNZTl3tLabsuDaGe48DYjBIDhuHtSrmJdXCQ/JsGWi6PWdyNUYcjgOd6jmQIYK6+Ps2fbr3U+
MyAevyzDJM9FhzBRiBM9qXrF4MGjHPKcOsR/jjADn0YAVigt7w4bGBtiL7T73YgO4w+b/7LSi3Ie
TFJvZNS5xkKgJKrVGQEIwYSro9y+g54NT5E0RGCXgN6Tm+ZP+yv60737jX3s1nyaVsngL+jkDSyl
gm5BHJnBIUydNdnWlM6SRgJgLRd8ZhfDWKlKgyEXC2/Ado5BBMyKHCwic1cD4dqMDlgdkxa6aUO4
ZEkdgC5gkYSf5kBT71fxHMAQ0DukTZoemcIlRuuOU3fSMZvoxzMJRopO38cdx1W7uJA19OO4RYnY
ayo7uiIUjx6jejSC8qPrLXwixpvnFsPWr3E/atM8hNflKlL5Z+0H930XiW6Su/6txKIbyirN8eju
loSjz/oGHdTZ8er++/jIcdFN3AqFbXawxi5doOgaY3qP7t6Jjf+yy3eJAgNW9H+a0DksRmE3jROQ
dbEsHO0x9IhsnQydnmX/YlQaYgEnFIMk23azDGJW1N3gB3hRvCAU/6ZBK/5O5ERt0QGM9BWZjWU8
/xCmwm4MxCkQOqhTMiA2Wv5LsdUws1ekRzHnOK9eqZkCgXTceVvMnVC3UA17FUOZAHZeq49EYyha
3QRw9XM3sq9k5RFqge6lhVcBiAaGkYRYeRkp9w5HN8rV3l/L/fBO8L96jsQiMOX+E+PaCD9LcK2g
OWZ+QrQ/qQRB9Jl5xiytzE9Tv2xBdftDKDkVP3Zkkl/oI3Qr693tXYaZd9WbMaYLO4WEcpYp0ecB
TfuwJmuYjSdHGuy1PItsReIp/dOZtKU+w2jqEZXSLziJCm6Au1uXWd8ImUDdpfCW+Ux2KMJYCXmr
FxG/bBTs7k0+XxpxWM7CAe0Avf/46mRVoHm1RSErdUrO0AyFWNdLWIqnbpwd9slm+X5YMzTOoHTV
XyZt3pq9we59gl/xgSxAULr2mOoKphuF3vINXx0On2a9VLrlqIDpNqS0HRqIMt3NQpWnMOzY00Zi
utv/dwt2I4ilasTzjE05Sk4WsWW63j94njzIq5/ADqbLTBz3MvdoHawxXRZAMEuQkphOKN2bEFqB
NCKcLQYZZh59yvteTO3B6RogOCzI95XqEof7IaIy3us1rIp2MP/jHLWGPvGg+OyFxEfErYxMXMYg
8TrvgKshWeJgvJA4UqN0zqbDITqu6vZr9qC21ZyZ1Tex6FgZ4MjVvkXmrrizXI54gfyd8BBKIuQp
PhHBhl+9Vc4bXCrD/cCoNnXA8j1QQjZQ917kZfBQXebz+sRqZFT5gnmlkcgu3X9UUzDMrINz4pGx
5PsrZMm8O7maltHkwqp5jO5Sft0o3ux0ZfvWnVQzS3iPztgjJOkuHUWPDUmGep09zjDml3fxI+6i
6w+6WBwXEuWqtGPaOX/gxfo+iZP/v1eegnQpGGIN2O8Jm8hmrbCsTF6pARTgg2fSeiTtXlJ2v3zO
vcZyT+qD8Bossz2p8M/qRb5O+Mdwyyfe2IUVC3KtanWTIROBYuOtEb5AISBfRSBFWK0oOZuh6JDI
hYZfQU5zQe02ID1CHm2LbG7rJ4MoiwKBkmJ27qvxN8+1hwmYnyj36ppnoOB4nC0Min+oKgzzYp0F
QdnEaniIM0py9qozmD2uPHzP4syXrabK4eLZyCk6e+TnWwkA9opFM2DTspS+cTas+Tz9rWR2ukgI
Ow1WTcWyl3HF9veZvuoB/vIqQfcuaUtTb3KuOuzopW6XokkMqmLNv3CDJLQaVAocuFqKlZqmgMmw
qOS8xRbQJ8qOaDpD5JpvDJDquFZEGUNVjzQu8w3NoTES7I2ALHd6clYKD+CW7/kn20dqMLuemR8G
FztgxeVBoAa6ttk3KfXIwyE5t/lQpNk+0TDkXOdJznlTUVx2Ft2h38WPip7Xkg3/eAWro81sV5qp
e9ksGtpfRLZq5cCf2rLkrZLHJB3ummt6Gd6uexx+9MScsbZwpvMq4EeIbGZjP3el+AhVu3XovLof
ia2UuFe22VVMw/AYlolbpHbmdv83XjKbwv74XXoTIULCZ/zbXMCg0M012enuUpwjNpQHBoPuyhFL
nN2tQrBFttVlvgBs28TgK6p89RR5yLvsxXgRsgCyRi0dQxl/ps2zszgqjGtMyVqiczpSklSgecHA
d0uqE1eB12QR64tQZAkYgwiD3ZDd0FvAosjRahE79+L8+O5mLjWnKG8HQERdsXbcqzU2yi0lqZ8R
ANadmBUB7i+OcGev0AUGu2KPZW0RQMD54WPOOU9TAMF8DyhW3/Znj7vua8etz5tuTyzutHbd2nMw
vpHW9YyUtr5Tvj8FeFOxvrtms7f63jdvk+5eN+DkRkywq+o57Oy0JXw7oLMa8NQobHpRDM4fDL/X
3dr4/2EQIcMJzaGyyxlGwwS7oALkjEKHYNx36REWTgVGKmrHSwF4RaoXr6QArqgZM4O7c8oAh0Lm
3l+PTjlhX90zJLDSp/S4lfx6tdkbfpkmBRsSsX0NqWaM3cTDXlOZ023hE1x3JSXy9A==
]]>
<![CDATA[
hEuHWsllWblLvXaMYQ6rwlEwuHB5zE7TFdZdX5vFcQgO7RZM+2ZIditqdLOqfmrNU/Uh/m5A1/BO
78prTGHsL6Dvwj3+Gyd8788DiuoXHk6OaIIsUYGkJk4qhox9inVQe/wfXBUr1odX1beCoq5mLKUk
IBHr3MPtbMRimQScLUGCApsdUhEBf0YxWJJxZbjJTD6VcEtg2RyGdaC7YB35vHz5ZB7W6h1xfbNg
ogWM6Y4YFZep+hYSvrmB2/g8GQriXDPI2cN6CtDGZ1Jc9K4wI/bu+E8x1v0IaFC/qx+yP6hHdZUX
opywF+NK6C4i+G3v/QXAoeX2IIwibULJDUz5WRo8na1qQCvgmjMV/QMyQivUU6uDRafCAC5a4Rm+
WtI6syNyC4IBIJn356jIThbbjJzv4+zybnP2EnMqSOFePhzXA+MCeLSexJd2JHQqi9D53ixO+Ot0
8qkRK3uE/MZCyKVGFhMZEDwIyBv+wyf0B6oRGROomoWWRRqr8FSSjbfbTbzNlvRSwS0AphpRqnFD
92W0RqUDM4JO31uVi0OAn+Ygj07xRM6qKSYdcGBMZvFlCNBWjqJxNhuqMAyyKjpEWnFvVF8ol/d7
k6D6XmTml85XmBl/l5lGlt+evNhZV4AwJKCsFoqi4iej4b1WHlcDjt/RcHNlHvLgiuPzzUy8wc21
yH+0MxcIcEtzhi/2vaufvOlr5p3qwPzPaoBdrGWmu5r7d3nW3z5LxK7IGJNNEvbj1aIA8wsxJyD5
VhH3pV83kcaILvorWzLA8jHC7Bv64gG1uVRqqWFoZ8K5sGGoN0Y+g+EPOuqwiyfPROyG5WQ2Qs06
s2DcRICQZwAUCRoMgJrycDsJPMQ2A3a1WX1e1UcYNc4MKkcHhNDqFHQ6UCLYVOlTWU9yaqnLfqZe
2wqKnhycgcb22/I8ahcHDLao3ZbJoHh/euGdwt9aligWW/vDc6sKBGFZWcpj5S7iejsfqTuZwBSr
fIJGIlqaBg2j1KAcx2HkZ5rosa1YJO1Cy2Q+4sKNe7mZPDrDIHiZLyKjNl4QkNnURJl/wkEBKEtz
bJPrxnrFv7afsqIz9miScolsL+Aqxz+OlmmzCTVJ+EcdKmfmD1sEDFVz1BAx+AGSysJp6UGMAV43
LvPSsEGuNU72kkAuaXHvI93B4ruXNiuONduZzkv/J3UCQzCvf0lGvjdV4tdkiODAYYXqygYJdCXj
YJhLjxMn2h9aVacwOInPCyXI4WURKKn90YCQ/2mwfh/2YqgM7sRylnst5Yh4M+/QgqvcfFya5hGn
dqTzrUWKJI6j1pzsr6u9khWKwBiTPq85soBwM56CnTyTm0XbCfxrDI1Eh3koLzv/GZX7Lq7gXLOG
iLIPYmXHQqgECccPS7yY6sbPa2qmjqxm2GAr5Yuf5/x+2PmY6MtzPbYOvMyEFBHo+vpoR5UGikDD
/ef65qIxOyjVWYvGaR8bmHBSNeWmrJb1y3Ej97f11MiYHvOjYT90lW4xmHOiCHAxaMf/JsbrmIEI
M7Gwxoq63u9BdzeB3nJTH07Ml8p3/jqD3XDZ3yht4y6p0oDMPBFlclk/JlgzQd1Lhe0Wsf2qgC43
0yqMGwLqZqaHYxC7UByOGqEspqD7r1WTmcAVZWC9trSZ0Syx+2Jf+9/997yL7ZCNncbSmJbayqu6
uebfVTPEW94TGZOXUSkycZs5XTbN4oXipwy4O+aMGClqLgpvQkAEBM1gjZ4TH9BjxCN3CfQgRbyN
ACBfaq9yBPYZTLonnlGJmkXqfQ9+PqrI3HsqRdMFUZ6cp+HwDk6qQVsJ3NdUOYqu5nUbr7r40rhp
MjBrTr70ln1+GeCfYersoTg8l8HgF0DQq16SsenM/iVjW8b9vhaC3SM/7Bw2gCmZKQsHGOxbKkUW
7Dfa0cayu+8wRgTIBrUPC04/brCHjw0CTG6IiorBmt+pB/oMh121Ywp1Z/CqqFYYpawVRmaePQV9
KM1Dn/di0Y/U/e8xGE71pZbOAaMfBOENDxWSeEuFrGF+MlsnGLVz2fXpuTlTW0XUFr3iZDiKkc50
8rjQYaFkX2H08xji4sz1BJzZDnwTet05FRyYRmK61i3N94dw7ezQvLzFX7ESdi1YahUYru840XFm
LB2wKbAaL2I7c9iXRibGqXTUY487ITdc7t2ImB8HIc06kys8mmCEUTAQweQZ8U/F+H2SMhAe3WDk
45nRVWvJnVX13p/2Uorax+NeiUkgUQDvKZinvu4FBItlfPvpVAVDJZViNjzi7swtHQxUuss6VZQt
N4uJGgZJ4eSzzkiQFMwXd4W3jywjdH0ubOe4q4tM+aRg3GQ+1IFlyZgAsuX1wTiEprbPDIz/bIF1
oQ/1CIzmBQJs13ahPdghrXFJGxyb5i4KS8HtMDzuNADdIiEfQyyN1HibrPzT4vjyNekConqZMuAQ
dq+MLji4dP19mV5TaqiMBrWAKF09kLkibMXqUDlcdjbYtdIllU4e3qqfkUpOqdZpnIEgCHDGX1Hb
pxUcdOMLb9RqcnpM6NvK0+UZAEdJuvDKz5R/XZ5hoq9cgNGThCTt3VRYfK+B+LdgEINFFqCaYYPx
wkPO0TnspBMvilsdAXdACt+JxtTHLFTo4XrM59yAw6dDZlfiS+hzlhGkGYTfZvTwtwE43EilJhgH
soTUyx89awke0FwMmyCdWi3b5qMLxvph0MqmRznh3avwCAOrIH45mnjm+AQT6GpNOAjET0kkUl8M
LQ39ynvDT2lj1rtfCNHrd7SosfYaZGn96Tv/p0fVQ2Jl0XcUfuCSJerFbPDyqUbj0u3KH+tVw7oD
qqf00sASSonqmzLDYe9FuPDUFEhlKdR8jzr7Vt43JNMXkVrzlM2fYhC+AN8JwJ3cdKJTCBAbr/o1
EEy+dixWkvz32CWcDBXffF6Y4m2Ppnmgw9QfPXLRdUitU+0C1d83jyIcE22kAjyGcrh06+bGib4A
W7KDDte9l5uVmDv+EjbXbYXA+qzSCrW9OC9yzXHJwDuxEyC25PhvPJyRlq2lHPx4DIhfxmQtSNQn
mIsX7ARxm361kWQipHQyPqRoGbtG80kZmtzru10G97bwNR2D1ONHJoU9byrjgTvGBO7InptTYFYQ
ubdh8NjArfhzuhwq2M3037W0497Ukk1nvoBRDWstZ/8RAtGgCzPTsFjwB28GkhNyzL+g0JrJLetY
xAiDyMNiQOnnl9JmebSLMPBK71Itu2+AWsS4OXmin330J67CD7KfiOXwFpqUv7MXsUmMxRf+GMDU
ZwGxo0VDcZGIi7OPhd8ULYk7FyAaVgeoZbiul5D3ixdlw9b+rH4T/cqDYSjghFX2+xg/0zIG9qDW
fnfZ3vBVFbr9kJuMHAlnT0gJO3caO7m/J3SDogZOgAYVnmgmZlU+Qe4GBE/QlBJEuoZOLOqNsPJu
gIIEbSYK7ayTOIUy3wxcvCN5SO21qHB5AktCLk9nR2sbcFdmsRNcUWvCPPaC+zwmftUJI6ZrKBXY
H7epSa/wbvabpPfHwxo4BidyxBtZ//QKiR/C5YCjOJtLeJJ/R4ZWE0drqhC+7qzTTSNBme6NUwod
GfCzoLOCdhlmAbNURe4oqRCkWhf4dyR8SqiaJl11oTo/XVu9xyG7hEcH02Or5PcuMxk16ugB3Wa2
O+XspTLnO/8mc4QAgwTG8vmMyXP3vKG0Cz8KaOOX89LCBUSCF4qKaFR/c+v9fQ8S6bFMtmO7gZbS
Vk6ELpkOmmFhq0lk0px0vIzz6zc4BWVYLLcQmEGzVOSCjTbe7FIR43EwTnr4P9+ulBkpD4uDZ2ye
akz+qhDyhR3xPN55fN5lhLz14tvnVaSN27xuSuAo/nsJEUWW9txsBvaY/22qixy2cGY+Kj/VysRZ
C8CahGodC9xfju2/NujG1Tz28B3BoGeic6E49wWSnkfzbbofYpKEaaaU4X3vdHvNzP8Jh0kuYe5h
2t4SlSA6xU3m/Y5AEb4BEP0o8je0NtRTPm6qV+QBQZCD73eSa60LB2NBRvxraWuk04tJZcQ658g5
Z6y/oaiGAXyyi9qzNChGErtul3/w/SYjKg01+nA37bMQTXeAqvKjOge6bqEkgTw4+xJEFCNITKLE
KhSoo8qkh46nL+dmeOI5CB84CMRGh9UC4cW8hNa1uEtsSMKKK+/plbHpdU3wFR6tommQQ9QCyNF6
u4f7eu/SvAfXy5hGfSl4lZu9IFRM+30yqGbni78t/k0jS6pjXoKhkoHqHvi3GtRpGw27LcZMj9Jc
NsfSEyxpQL5fyonl6hi6iWPdkxXJ+CKpLcu81BlfRUg0a9OZoZY/rFIFqsEwAXXAzWFiIvj4evTg
Sse9cEkNdTXR6KPDdpUX0LJAXVCRLUynGu0FKAiOBJUuLmEfAOwllrXPIPHXKtVB/nG27+FIH1SC
VX2+Eds0H9MsYy3Hs25QdIpp1SsY5oXcdixu36gboKN21GUg5FLj2yhr6WCJeK3a9b0oDhMIYWC7
R60VRC5L1NbWoErx3xTVARSIhBMbaLYXblvDExQApxQzmySRBdhwqZeJAk5tJotv+vp89jUBGT2N
ZPpiq+3HFOQ6/RFRuSslZC0HqhMCjgQ4/3GIZXrNY49aiNNW+dh4XOwk4mv1MjZiLKXOVRrYYf4N
WUe+/Xh65nuAmSKDNpe59MCHeUrVKoIi5Sh2niIbmXRqH/aqvYSa1hFY71rvzDd9M30xJ2gL1hjU
NqjQq4w3hHsXTh1IaBR6Bze/+uPw1zXQldYHRmQus9Eoj0nrZcMKQwyXgMTIiqs/vko7ltuCfWAs
u7C3sXZF8x5rYk2DiHfGaOUULxwwgYWt/YgD3EIzW5el7YwUBV3N4Ta+xuht4OVrjL78xBUI0jk4
kOeJ4xYyqt1LsiAc+VpGiknaxjdRba46d+MFqpUBwEjfz//BqqDKdencVTNncdTNuAJieWdOZA0V
vszYr7lPMd+AQl4xPQD6IyBii8rThVXthLqOGLiB2fiL269AobGULwM/2kjGOZa5aAJD/y+RpWGI
6YDrYRjhC7wQWSh6XaYB+QGzZUsQjEAZcTu6GMFbhb/1HwlAD5AIc6M42E62erzg/qVVh0JJvQy3
vIiUoD7Sgem6FrBGIamIn8HOaGihNiNGmbLdUTPFapiduG16ji2rzDrJZ39QtX61rmhp42TG3f82
3qJTnZcbWbmux4vSMw7LlAD/+UP/nwkg5u/ywJ5gohVokswlcBOCrAQyiDWAfcRASMQQ9CD8cOgh
enCXoESQHTGFVeHLGAlckc4WpCtpyVUPZTka57g1vxwHrIafpfvKmYJEfr7K+zLCbLoyriSsXUIs
0bJaPLZ9H59uP4ujO2G4RgPpfpALDy8iAlmuh6Tw+kvt/dDQxSa15TQefJQgZgq1mvyndNKuoi4q
KCVeEXY6E+9cCNXfZYo+agMYq95vGSKZEHE6gUlFReqH+EAYHgUDgT+Ny/hAkd6h6A==
]]>
<![CDATA[
EkDWfCXxIK7OJ3FKPFsvHjHc4cqlaioLV/JQFsIAU02pIoMusuzjEa40t0cIU+jK2sXBTqO3Rzjj
XzHF9OudUTnBDW90W1lcWck18CATErMby9TJfxN+CPndOU3g7vvxiXeyuPHPc0A65wpamIuA5o9v
K+yJX5KoieB7vbWzVbKV0RWpGSev/YXtXcjPdQi4f/AkRRE9F6nWtM2/dHBnUa3YfXfofcLeqpn/
0sj9SOm/e11FmCSwEF8z0r+n3ckC1hCirVRqaWpP1ARq4hE86LRp2gjbXq7TVfKyEaF2gYPrLsOX
ZSXAesk89+5RqJnmJ7tcA4psQzGp/R6UW8UNAlLG+J8wzb8E6OTPrKA/m4bdCIUCAcr4vB4dQDNI
ig2DAg3qjje/rles2JTd3TtlWUFUxLCTlG/bAdkBzAEj4tswQS3iMIxjQYw4xiA2nXP0HBltZcGx
oce9CE4NXTRllBta7jaKNjNCoUeLj+Lg7xdv70ehKqFgF/NRweEQ9U6DmDmEgm1ilpT/nGUmZS/m
KXjchSWUmhOFMLg8XRhlfEUhFF4UuoYiV0cTVT80oVBXJB9GGLXCsPdXoRCGMJlCGIaOB3s+fUTy
0xPEELvN4PZTNKEwrxpaaEIDJWLa9NlAMjJEhRX7IIYfdDFkKF1RekTKaIrSZNWQc7EDkYstl7Hx
unRVmT5NGMq7qEMThpsxSyj8QhPXslLIjicMjaFSxRMK/Ej5ijqeQqCAosSnTJWtufxAGAgF1yq9
s8MO9LthCQWyDWt3tiSqLKEBsdeOcTAVxRAZEZth3CAGSRAjbkqMwRhX9L0YR9uL0Zs7l/zGMLUw
pCSLGsaZ2RWDQEG8/Iwdo1DgXfnkeOZRb8SztO5uPDP+YPzDOKEBG5thXCKIcbsC2fyM4fIQ+/pk
5o/Vi4rxgylXixK3qX4+9yeKH43SHM9kl9O6NRifoWaOQ4HNPsG4FFgfVjU+NISCiViWsxJSmcsa
ZFgF6+9FdB6OBFE4YmosuzPlo0zQbHfRIovPOVRRIpqtjxnfYycPqaD5YOroUTR7TBcB1SrtCi9O
x1PDqbUXwimjl184tZMKpzbmlL/4+d6I+KFeNHx79xC+UcH3cjYUX6u7uLKYRvnW9KOr6IGmay+V
5/vyr93EyunUrqzeGMJR5SMrCiV8Tks47ekdKLiEcVoYKDAhYpxu6b69oWM6E7pFd0v3jtq7GIPt
wXjMvsKIPTPGPxbE6BhJ2Y7NYJ/ROZqqGYZVndFBRsKM+vy4YoyLPrCJn1GfUbmjGa1gDMcjFCri
fhk1Rq2+iJpl2+AJDXRa+jov3ZGIY+PYEga2BAoYB/axfESuZcMs6PIYj1AQ47WMYXdEDCNhDDRX
hUoUr6puhGcHj9DAFdEiShinidkwMrxRYhCGEwrFsqPtWA8bK8JAMcQQ64xVtJP8aDyaB38OCp7Q
gFj8fHclN0O0KYhX/9BvGydFwiMUOjSR8GwReeVIrZQ1eIQhajjWcrRjTeUFTZOFLpxpKd0ImtCA
SVwUeTSlEFbqvCMMRnX2TiY2zBP7FHtXXhVNsSc5GmGYYgkFRgyNSjFDjE/UfYpxPMIQZYMCuy3e
EB4gDGR+xPxpWISCTWlYUS4/JMMiNEDhsVXrpH4QTe6wxm7oocmuYZ20aAq5yyIUyr3aDGqJRL0i
jc1QIBLFNEgnJQH3YN1+ToGYEOPUYvxOdsanjBMVb+hQFeiMZ/KUg3HLHc8TczeF8Xw0O2o0t+KG
4J3N89Fsmmv5UFqYZptmshgxaJahuZ7ybJ6PzLPFeRaezybEsw3xHEXmaX6fVtU8zzyfFM+l4vkk
jFcM4zMVIkUzzQ8hY5nEWGb5HAcZhzRDSSYUSvLdzVzEieH4QxWHM5aiz/AafXrm2DecS43DMcvx
oa66D0sqjmUrBc00U3DTGiBQMFah+EdiF1PBqYbJ7oz5HIPQQGkfjG1o67wWYRENOI4dhkJPxdqM
ddAXtAkFC9p2xvqOohoGY10tW8fwMXxXnVkTKJibsB6OrhiuYrgK4VNJMfywHbZpauRn+FepiPFs
HAwPZZhQsAuGW0IDvV7sqkbrjVaKo5VaXmOgCfNKKFh7Wk2rBI2IaW1pvUurVE1qpfXsSuvEaaXV
7GSwDsPDMMNFDD9AaCBq2phptRDanIU2ph2r7Dys3i6s1p2jCt2wng+JFaqQbKpOatVajJKwKdFP
SC2pD1Iposep1Ks8TM0Vpz9OZ+xWn8aGdpFKP6pIvYWRGneklpfaarNqVn8yz8+cWS0rX3Fbb8fP
KqHwslaqoHWMcXCbghOpBAMOKAAAAAAAgOAABAxYsEEFEWBw4MAFFWSAgQMXQHDgAAQMWOBABgwc
OKABAxhAQLjAgQkkYOACBAYYYDCAUOj9NTOVlGMr208hxRMmOOjRWYvGwqpjV/WoHgj147ppkF1Z
iNaDxsSZVRyvxxQFlZOrIt7B0MkjprcUf1A08ZNyLBa9s5GiU3SkLDN13XxsD1pWQw+hGuP1oO7u
v5QwwQFJxVZD4Z+IfDI3h+/q07hCMYBQKLvOxe6SMjIhu1OPNZXLelFm1ahPpHWEe2PEqNCM3N3Y
wrdCYlR1d1YrqvnSelVVz6VolQ1J3ExuChma8i11kd8spd6dzK8oAQc9mCGpR2PIgr/zzdyHSix0
kVbEqsiECe6oyPexzt1ZUDXKUyRyBzZkuXvsLYZNLOToJA0r2dXE6nT+UdiUnG7iHFKLCtfQzdRW
ISFkrZgbH8RBa26zaRzQUIyQY8YdCsbBmTRu5CQPmyOTzpxMj2QAodCa9TajB76as99RtHypFxE6
MrJp/8SIbKJOhtyql+dKLrJ71gv/TErXD5nDj5FzkdVORm6nwAIHAgRwcAkMw0DBUBiGggtDYQgK
zPwLoss/fbCSyt91QSQMhzX8kwwR+xeKfYnBKFtUz86RNRiP/sP+ccV+oE9VGf+mjZDBFkb/x55Q
EGJM0Beqln7tSqYvc/oM+i+y324e+zGoAYnFqMRyB8TRLKsVaRrYEAATEQAQACCScDQWjoel5vYY
FAAFWSIMNDZQVEg+LA6R67IaGgEIAARGhjYBSIH9TZ104Z+SUGeWnANf99TSk/SqJbxX/bLobtEv
vWiZkDpru52M5VIeqC6Rj52PmspmsfpvtRtVLEhXzzK1WJQAl2iaGWjLJy6KS0T8/piIKYVuiB9c
lk0+Mx3eZCHVql6nleRXuvOnJE8LEQQHFAH8G1uW5/nCO4XCklLnGm08g9GUjK0qlUuAkxhgepH/
lQnofLRCbEsvIjAU0QBDi6FMiXBoGP4gWSqDnF5y5XKj4lAQmegNlQhaPgIxqHdB0AtiqWJ2cJmn
dfxoKPDNtXiXuhxtm4CRaPCyf6TUAhGIvo01e3SpNaIUwV8u4bvhrFHV0SABWt4hYmRQa9Ismewl
xwGDtGtlmBqJYYEx0QM/0ivloX8+Zn9GRKeaHdBThbjBE4hBTaa/qSBK5vwIyI5OptKOruQF96Ta
J4Dd8fDVW6nOHIXfPTH089dJBWjZce750aUieaGThX+qVDQND6KY+k/771663soFw8njiQRRPynf
WRD08ga9bSyVAMtMf/FR3jgBarl7Nsvv4EyeWS+/mkOQNMS4H70mIpgVBESXBDRUxQFrOFRsiS7+
bCJCVN15zQI78sNqd0hrvfGj5h8o+Qq2zrppDoJc6PxSeGf/dC4bncWY0GfFUtGQXMEjXJ+FJPM5
t7aEsbXoeVRqbaPSWmXIOXKa7lN9GCwy9WUkNVUHI5p0VmI/8C9hB1TsO631m0G/9tZtSa39peU1
r2+g9LkIE7sU03It5hA9P064fLJxOaFceTeevYotWJQ2auE5DUDLALn9DCHfLHtRLuyeB//nDsvF
pF+53teVG7aVfwlYji0rB7dd5Sc6k6qqH4KMqKkiJSoQn9+JihGPIaV4OMBST6qfwOHqkpPXKXRW
DQuR8tJl62Lz/qUoNlYE2HmHiVmIprYsgLNad9KWJAb4c2ktegEnbVGyztJi72Xc0WKHeRmomgiF
H1CnHmaLQtmwJN87DSm5kb79+yT2eGQaOlA8zOY8MQVQMbOBbmWVp8JkU5Mw0fiNiQDzUr7Mx1fl
hmt98ZdSWRWAu8WZ4M0G8EQZHJVJKMiQ8eLXXborgXhx6NYXmJKXXVgr0lHDMLCizgyC7Qx9BmpX
spgLCv+VP9C0lZYZ0gxKo6FOWibuAiKaCRdL8LA+D6Q21KiJvM8GNPCRVWezalmhcOIkUxZ81giJ
LSpcfAA2hFwk6QL0asQ3tpEQs7a9xWrsjcsOPp2hQNK54CACpmNffGqF1aJrhxwg9HI2Dnz508q0
loIVHZitMmOIcHNItBitki4mp0JSJLmGlyZGheC7IOx28MPCxFggL8vmnpAqbLi0BlcfICOZQbeo
JYTA38T7Gfv+hBv00Pc8G7Znqhh7Iq3JsK+wtFXeCvtCGwP6uCQ7c8j0EMVM0qSMvGtP5d5aIEEf
y4AnThalSvLkauQHUXMCGWfEt5vGyvKrTKgRNGf9KMZj97LsYO9hWNVn56heMoxy30MkSGHMHx6l
xKGb5cFQibICz8AkikBZXM8rF7Tl6uVt5mol+DGv/lscITcl1f6ppBwy6szPlJ4TGJmrVYf33B5W
NFFqhfedzXpiAZTj98Ew+aXAidWrlp8Z3u9CCYruBaaPnuEDUTozKQGzJqiTKxlCASCMZ/wgVebr
Ecf2x9H0HI1EF4xwoZYo0/MuKu5h234xjRM1VHDd46G7+gXH4Va+TxQJlNRL2I/MmunpWGCBOGQk
tUOMUp+HU48zeJzEZzqjuBwxnJEEUHis1QGKG5Ou/qSZbHJrr2wSABvRAj5Gsi8Kc7OCMIUZ2Dro
6SRYjZBlllL0593CtxZhAqoWjAP0fI4RwQiSVs2exAqMMpzkKn9llILvUEZyyy8+1fU4gDKNbF+0
LtVZWzXui5wdZoztX65mht78SHhIVvwiwyN6yzVvMugbpa+awzEbDOvDzf0mPeopuJE1FUsPQodX
lNmqk05WmTi8RbNe0r0CQArzts5ynAmGsVZ+IsWr6vUjStbGb9sUsWZ6C+jTX6ACoc06J+ipLtHU
g6V2n4784P6mKl8814+jD7HRTmzV+bTehREqRxy1IIHDZuSkJAFJoJmD8dtLHBcd8JwA9vIjW0k8
WqYYe93eqBemEy9Q0wt+d1uiq79kwfCkq0YFqaliuPTSAbCDDjKJzfbv6EHVRucysuNHz15CBC8R
gEblS5vmoMmbENYDEqVOnJTNiIxB4QZdX+S3m3uPaRIO6Jjb9YV3c6LpykISKn0JAPR8N7sK802C
HY+b+Tj2RS0fdzCMERAlkVGfjk6ocJAA+9KlOn1rNqxz9UH+cuJD85XhiylY2l8qQUWicKGziVPJ
1GCBPxssh+aKh7+CLRfcpSuzwYVAG+2ssCFgsGcv/AvaqoiVd2rplyd4LPn1wMnmDg==
]]>
<![CDATA[
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
]]>
<![CDATA[
uvP4yBXo0j25QJPwb5+Pzh6f8fOH0Wodi9ATsgv5XNZQa66AbTT1a7GFPN+zCvNIuBmPq1vtj6Mj
fjueOWcMhZ8I0AmiB3pmzCK3WXIzTr/qA5EyIJuQDj0hUAnfmqfoCUVGMS7muMg9L8GaT2NjYnqh
jeGDcuSfLzEM5P67Vfz/FPVYQ0o+mnC9B9YCWtcVX8rZGUCPgiGX0RwB4UqsOqcw8GKaYj4+cj1w
FOIwBHcFhe1Ak5tKeCxq2KM0BCi7Qa3ut4rrKcviKKirmjBfYQ9/eEnxnbrJpM+Ien5WoZIFgP8j
+410HTwBDjtSSkSz0LpYrVxJ5p+Eufx7G6vxsZp1wm21shXK6cRxCnLfWbYCpD6uM9miaUAYAaSq
nZAvJmbhgTI1ioIVwVo5kyXVSpkceZchOjb4I6Jy4ETW2w+vYpqBSa5T6JBnJV/i5kTloJOXT0eO
zzBg3UkNHuRBDfK3NKwD
]]>
</i:aipgf>
</svg>

Before

Width:  |  Height:  |  Size: 62 KiB

View File

@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "generic-inverted.svg",
"filename" : "generic_inverted.svg",
"idiom" : "universal"
}
],

View File

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 32 20" style="enable-background:new 0 0 32 20;" xml:space="preserve">
<path stroke="#FFFFFF" d="M1,0.5h30c0.3,0,0.5,0.2,0.5,0.5v18c0,0.3-0.2,0.5-0.5,0.5H1c-0.3,0-0.5-0.2-0.5-0.5V1C0.5,0.7,0.7,0.5,1,0.5z"
/>
<rect x="4" y="4" fill="#FFFFFF" width="24" height="2"/>
<rect x="23" y="14" fill="#FFFFFF" width="2" height="2"/>
<rect x="26" y="14" fill="#FFFFFF" width="2" height="2"/>
</svg>

Before

Width:  |  Height:  |  Size: 663 B

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 34 22.4" style="enable-background:new 0 0 34 22.4;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
.st1{fill:#FFFFFF;}
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M31.6,21.9H2.4c-1.1,0-1.9-0.9-1.9-2V2.5c0-1.1,0.9-2,1.9-2h29.1c1.1,0,1.9,0.9,1.9,2v17.4
C33.5,21,32.6,21.9,31.6,21.9z"/>
<path class="st1" d="M31.6,21.9v-0.5H2.4c-0.8,0-1.5-0.7-1.5-1.5V2.5C1,1.7,1.6,1,2.4,1l29.1,0C32.4,1,33,1.7,33,2.5v17.4
c0,0.8-0.7,1.5-1.5,1.5V21.9v0.5c1.3,0,2.4-1.1,2.4-2.5V2.5C34,1.1,32.9,0,31.6,0L2.4,0C1.1,0,0,1.1,0,2.5v17.4
c0,1.4,1.1,2.5,2.4,2.5h29.1V21.9z"/>
<rect x="4.4" y="4.4" class="st2" width="25.3" height="2"/>
<rect x="27.7" y="16.4" class="st2" width="1.9" height="2"/>
<rect x="24.8" y="16.4" class="st2" width="1.9" height="2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,17 +1,19 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 20">
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 34 22.4" style="enable-background:new 0 0 34 22.4;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
.st1{fill-rule:evenodd;clip-rule:evenodd;}
</style>
<g>
<g>
<path d="M30.5,20h-29C0.7,20,0,19.3,0,18.5v-17C0,0.7,0.7,0,1.5,0h29C31.3,0,32,0.7,32,1.5v17C32,19.3,31.3,20,30.5,20z M1.5,1
C1.2,1,1,1.2,1,1.5v17C1,18.8,1.2,19,1.5,19h29c0.3,0,0.5-0.2,0.5-0.5v-17C31,1.2,30.8,1,30.5,1H1.5z"/>
</g>
<g>
<rect x="4" y="4" fill-rule="evenodd" clip-rule="evenodd" width="24" height="2"/>
</g>
<g>
<rect x="23" y="14" fill-rule="evenodd" clip-rule="evenodd" width="2" height="2"/>
</g>
<g>
<rect x="26" y="14" fill-rule="evenodd" clip-rule="evenodd" width="2" height="2"/>
</g>
<path class="st0" d="M31.6,21.9H2.4c-1.1,0-1.9-0.9-1.9-2V2.5c0-1.1,0.9-2,1.9-2h29.1c1.1,0,1.9,0.9,1.9,2v17.4
C33.5,21,32.6,21.9,31.6,21.9z"/>
<path d="M31.6,21.9v-0.5H2.4c-0.8,0-1.5-0.7-1.5-1.5V2.5C1,1.7,1.6,1,2.4,1l29.1,0C32.4,1,33,1.7,33,2.5v17.4
c0,0.8-0.7,1.5-1.5,1.5V21.9v0.5c1.3,0,2.4-1.1,2.4-2.5V2.5C34,1.1,32.9,0,31.6,0L2.4,0C1.1,0,0,1.1,0,2.5v17.4
c0,1.4,1.1,2.5,2.4,2.5h29.1V21.9z"/>
<rect x="4.4" y="4.4" class="st1" width="25.3" height="2"/>
<rect x="27.7" y="16.4" class="st1" width="1.9" height="2"/>
<rect x="24.8" y="16.4" class="st1" width="1.9" height="2"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 605 B

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "placeholder-Inverted.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 34 22.4" style="enable-background:new 0 0 34 22.4;" xml:space="preserve">
<style type="text/css">
.st0{fill:#333333;}
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#333333;}
</style>
<g>
<path d="M31.6,21.9H2.4c-1.1,0-1.9-0.9-1.9-2V2.5c0-1.1,0.9-2,1.9-2h29.1c1.1,0,1.9,0.9,1.9,2v17.4C33.5,21,32.6,21.9,31.6,21.9z"
/>
<path class="st0" d="M31.6,21.9v-0.5H2.4c-0.8,0-1.5-0.7-1.5-1.5V2.5C1,1.7,1.6,1,2.4,1l29.1,0C32.4,1,33,1.7,33,2.5v17.4
c0,0.8-0.7,1.5-1.5,1.5V21.9v0.5c1.3,0,2.4-1.1,2.4-2.5V2.5C34,1.1,32.9,0,31.6,0L2.4,0C1.1,0,0,1.1,0,2.5v17.4
c0,1.4,1.1,2.5,2.4,2.5h29.1V21.9z"/>
<rect x="4.4" y="4.4" class="st1" width="25.3" height="2"/>
<rect x="27.7" y="16.4" class="st1" width="1.9" height="2"/>
<rect x="24.8" y="16.4" class="st1" width="1.9" height="2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "placeholder.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 27.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 34 22.4" style="enable-background:new 0 0 34 22.4;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#DBDADA;}
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#DBDADA;}
</style>
<g>
<path class="st0" d="M31.6,21.9H2.4c-1.1,0-1.9-0.9-1.9-2V2.5c0-1.1,0.9-2,1.9-2h29.1c1.1,0,1.9,0.9,1.9,2v17.4
C33.5,21,32.6,21.9,31.6,21.9z"/>
<path class="st1" d="M31.6,21.9v-0.5H2.4c-0.8,0-1.5-0.7-1.5-1.5V2.5C1,1.7,1.6,1,2.4,1l29.1,0C32.4,1,33,1.7,33,2.5v17.4
c0,0.8-0.7,1.5-1.5,1.5V21.9v0.5c1.3,0,2.4-1.1,2.4-2.5V2.5C34,1.1,32.9,0,31.6,0L2.4,0C1.1,0,0,1.1,0,2.5v17.4
c0,1.4,1.1,2.5,2.4,2.5h29.1V21.9z"/>
<rect x="4.4" y="4.4" class="st2" width="25.3" height="2"/>
<rect x="27.7" y="16.4" class="st2" width="1.9" height="2"/>
<rect x="24.8" y="16.4" class="st2" width="1.9" height="2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -1,3 +1,20 @@
1.0.66
----------------
- ONEAPP-6325 - Table - Development finished
- CXTDT-565087 - InputField - Text - OnDark colors
- CXTDT-565112 - InputField - Credit Card icons
- CXTDT-565117 - InputField - Overflow not clipped
- CXTDT-565105 - InputField - Date - Typeover text not working
- CXTDT-565115 - InputField - CreditCard - China UnionPay does not allow longer numbers
- CXTDT-560823 TextArea Accessibility Labels/Error/ReadyOnly/Disabled
- CXTDT-553663 - DropdownSelect Accessibility
- CXTDT-544662 - Breadcrumbs - Text Wrapping
- CXTDT-568398 - Calendar - Saturday missing (on smaller screen size devices)
- CXTDT-568402 - Calendar - Extra row (on smaller screen size devices)
- CXTDT-568409 - Calendar - Width control missing
- CXTDT-568419 - Calendar - When hideContainerBorder=true, corner radius disappears
- CXTDT-568413 - Calendar - Missing option for Transparent Background
1.0.65
----------------
- CXTDT-556996 - RadioboxGroup Accessibility - Voice over does not render the group position
@ -7,6 +24,7 @@
- CXTDT-563189 - Dropdown Select Readonly Border color
- CXTDT-555854 - Dropdown Select - spacing issues
- CXTDT-563194 - Dropdown Select - missing transparentBackground option
- CXTDT-552834 TileContainer Voice over is not rendering the information.
1.0.64
----------------

View File

@ -0,0 +1,11 @@
//
// vds-dev.xcconfig
// VDS
//
// Created by Matt Bruce on 6/3/24.
//
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
#include? "../../../workspaceSettings.xcconfig"

View File

@ -0,0 +1,11 @@
//
// vds.xcconfig
// VDS
//
// Created by Matt Bruce on 6/3/24.
//
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
#include? "../../../workspaceSettings.xcconfig"