From 5cd8673e68955fbe821e5c4706217cad3a12e6a4 Mon Sep 17 00:00:00 2001 From: Felipe Mosqueira Date: Mon, 2 Sep 2024 08:40:46 -0300 Subject: [PATCH 01/46] =?UTF-8?q?11008=20backup=20primera=20versi=C3=B3n?= =?UTF-8?q?=20vista=20del=20=C3=ADtem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metadata-values.component.html | 2 +- .../onebox/dynamic-onebox.component.html | 2 +- .../metadata-field-wrapper.component.html | 9 +- .../metadata-field-wrapper.component.scss | 25 +- .../metadata-field-wrapper.component.ts | 12 +- .../access-status-badge.component.ts | 12 +- src/assets/i18n/es.json5 | 9 +- src/assets/images/LAREFERENCIA.png | Bin 0 -> 29474 bytes .../badge-metadata-values.component.html | 21 + .../badge-metadata-values.component.scss | 41 ++ .../badge-metadata-values.component.ts | 37 ++ ...sedici-date-metadata-values.component.html | 3 + .../sedici-date-metadata-values.component.ts | 36 ++ ...ci-language-metadata-values.component.html | 3 + ...dici-language-metadata-values.component.ts | 34 ++ .../untyped-item/apa-citation.component.html | 12 + .../untyped-item/apa-citation.component.scss | 62 +++ .../untyped-item/apa-citation.component.ts | 95 ++++ .../untyped-item/content-files.component.html | 36 ++ .../untyped-item/content-files.component.scss | 111 ++++ .../untyped-item/content-files.component.ts | 78 +++ .../untyped-item/full-item.component.html | 48 ++ .../untyped-item/full-item.component.ts | 40 ++ .../language-switcher.component.html | 14 + .../language-switcher.component.scss | 17 + .../language-switcher.component.ts | 55 ++ .../sedici-file-download-link.component.html | 15 + .../sedici-file-download-link.component.scss | 20 + .../sedici-file-download-link.component.ts | 26 + .../tabbed-content.component.html | 28 + .../tabbed-content.component.scss | 37 ++ .../untyped-item/tabbed-content.component.ts | 29 + .../untyped-item/untyped-item.component.html | 502 ++++++++++-------- .../untyped-item/untyped-item.component.scss | 50 ++ .../untyped-item/untyped-item.component.ts | 76 ++- .../sedici-context-badge.component.html | 16 + .../sedici-context-badge.component.scss | 30 ++ .../sedici-context-badge.component.ts | 86 +++ 38 files changed, 1481 insertions(+), 248 deletions(-) create mode 100644 src/assets/images/LAREFERENCIA.png create mode 100644 src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.html create mode 100644 src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.scss create mode 100644 src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.ts create mode 100644 src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.html create mode 100644 src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.ts create mode 100644 src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.html create mode 100644 src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.html create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.scss create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.ts create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.ts create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.scss create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.ts create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts create mode 100644 src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.html create mode 100644 src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss create mode 100644 src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts diff --git a/src/app/item-page/field-components/metadata-values/metadata-values.component.html b/src/app/item-page/field-components/metadata-values/metadata-values.component.html index 44a3657fa56..78b834c9564 100644 --- a/src/app/item-page/field-components/metadata-values/metadata-values.component.html +++ b/src/app/item-page/field-components/metadata-values/metadata-values.component.html @@ -36,7 +36,7 @@ - {{value}} + diff --git a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html index 5463b068276..93280cbf4e4 100644 --- a/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html +++ b/src/app/shared/form/builder/ds-dynamic-form-ui/models/onebox/dynamic-onebox.component.html @@ -16,7 +16,7 @@ diff --git a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html index 7748e385ca4..826091aebc8 100644 --- a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html +++ b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html @@ -1,6 +1,13 @@ -
+ + +
+
{{ label }}
+
+ +
diff --git a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss index bf17d63d6c6..4c874e019f2 100644 --- a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss +++ b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss @@ -1,8 +1,23 @@ -:host { - .simple-view-element { - margin-bottom: 15px; +.simple-view-element { + h6 { + display: inline; + margin-right: 0.5em; } - .simple-view-element-header { - font-size: 1.25rem; + div { + display: inline; + } +} + +.simple-view-element-header { + font-weight: bold; +} + +.not-inline-label { + h6 { + display: block; + margin-right: 0; + } + div { + display: block; } } diff --git a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.ts b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.ts index af139e78e6f..e4548e2e24a 100644 --- a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.ts +++ b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.ts @@ -1,4 +1,4 @@ -import { NgIf } from '@angular/common'; +import { NgIf, NgClass } from '@angular/common'; import { Component, Input, @@ -13,7 +13,7 @@ import { styleUrls: ['./metadata-field-wrapper.component.scss'], templateUrl: './metadata-field-wrapper.component.html', standalone: true, - imports: [NgIf], + imports: [NgIf, NgClass], }) export class MetadataFieldWrapperComponent { @@ -23,4 +23,12 @@ export class MetadataFieldWrapperComponent { @Input() label: string; @Input() hideIfNoTextContent = true; + + @Input() inlineLabel: boolean; + + ngOnInit() { + if (this.inlineLabel === undefined) { + this.inlineLabel = true; + } + } } diff --git a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts index 5b69a7e72a9..668a0fc945b 100644 --- a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts @@ -24,6 +24,7 @@ import { Item } from '../../../../../core/shared/item.model'; import { ITEM } from '../../../../../core/shared/item.resource-type'; import { hasValue } from '../../../../empty.util'; import { AccessStatusObject } from './access-status.model'; +import { RemoteData } from 'src/app/core/data/remote-data'; @Component({ selector: 'ds-base-access-status-badge', @@ -70,12 +71,17 @@ export class AccessStatusBadgeComponent { } const item = this.object as Item; + let accessStatus$; + if (item.accessStatus == null) { // In case the access status has not been loaded, do it individually. - item.accessStatus = this.accessStatusDataService.findAccessStatusFor(item); + accessStatus$ = this.accessStatusDataService.findAccessStatusFor(item); + } else { + accessStatus$ = item.accessStatus; } - this.accessStatus$ = item.accessStatus.pipe( - map((accessStatusRD) => { + + this.accessStatus$ = accessStatus$.pipe( + map((accessStatusRD: RemoteData) => { if (accessStatusRD.statusCode !== 401 && hasValue(accessStatusRD.payload)) { return accessStatusRD.payload; } else { diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index a39271d568d..bc4867272a7 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -4104,7 +4104,7 @@ "item.preview.dc.identifier": "Identificador:", // "item.preview.dc.relation.ispartof": "Journal or Series", - "item.preview.dc.relation.ispartof": "Revista o Serie", + "item.preview.dc.relation.ispartof": "Serie/Colección", // "item.preview.dc.identifier.doi": "DOI", "item.preview.dc.identifier.doi": "DOI", @@ -8624,8 +8624,15 @@ "workflow-item.editaction.header": "Aprobando...", + // FALTAN + // workflow-item.editaction.notification.success.content + // workflow-item.editaction.notification.success.title + "workflow-item.selectCollection.header": "Elegir Coleccion", + // FALTAN + // workflow-item.selectCollection.notification.success.content + // workflow-item.selectCollection.notification.success.title //"browse.search-form.placeholder": "Search the repository", "browse.search-form.placeholder": "Buscar en el repositorio", diff --git a/src/assets/images/LAREFERENCIA.png b/src/assets/images/LAREFERENCIA.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea1f010a86895e3de10e248c4ad459141ec4185 GIT binary patch literal 29474 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 V4+uPg->(Fb5|bCL6gK?vzX1CGj + + + + + + +
+ + {{badgeLabel}} + + + {{mdValue.value}} + + {{mdValue.value}} + + + +
+
+ diff --git a/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.scss b/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.scss new file mode 100644 index 00000000000..3ca39290284 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.scss @@ -0,0 +1,41 @@ +.badge-label { + border-top-right-radius: unset; + border-bottom-right-radius: unset; + display: inline-block; +} + +.badge-content { + border-top-left-radius: unset; + border-bottom-left-radius: unset; + display: inline-block; +} + +.badge-group { + display: inline-block; +} + +.badge-group::after { + white-space: pre; + content: " "; +} + +.badge-identifier { + color: #505050; + background-color: #c3c3c3; + font-weight: inherit; +} + +.group-inline-block { + display: inline-block; +} + +::ng-deep .badge-group span { + padding: 0.4em; + padding-right: 0.5em; +} + +.copyButton { + color: #fff; + cursor: pointer; + margin-left: 5px; +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.ts b/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.ts new file mode 100644 index 00000000000..2b211a13834 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.ts @@ -0,0 +1,37 @@ +import { Component, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { MetadataValuesComponent } from 'src/app/item-page/field-components/metadata-values/metadata-values.component'; +import { MetadataFieldWrapperComponent } from 'src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component'; + +@Component({ + selector: 'ds-badge-metadata-values', + standalone: true, + templateUrl: './badge-metadata-values.component.html', + styleUrls: ['./badge-metadata-values.component.scss'], + imports: [CommonModule, MetadataFieldWrapperComponent, TranslateModule], +}) +export class BadgeMetadataValuesComponent extends MetadataValuesComponent { + @Input() badgeType: string; + @Input() badgeUrl: string; + @Input() badgeLabel: string; + @Input() badgeLabelType: string; + @Input() copyToClipboardButton: boolean = false; + + copyToClipboard(el: HTMLDivElement, id: string) { + if (navigator.clipboard) { + navigator.clipboard.writeText(el.innerText).then(() => { + document.getElementById(id).classList.remove('fa-copy'); + document.getElementById(id).classList.add('fa-check'); + setTimeout(() => { + document.getElementById(id).classList.remove('fa-check'); + document.getElementById(id).classList.add('fa-copy'); + }, 1000); + }, (error) => { + console.log(error); + }); + } else { + console.log('Browser do not support Clipboard API'); + } + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.html b/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.html new file mode 100644 index 00000000000..3b11b5e5a52 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.html @@ -0,0 +1,3 @@ + + {{ dateString }} + \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.ts b/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.ts new file mode 100644 index 00000000000..11bdda8daa8 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.ts @@ -0,0 +1,36 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { MetadataValuesComponent } from 'src/app/item-page/field-components/metadata-values/metadata-values.component'; +import { MetadataFieldWrapperComponent } from 'src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component'; +import { TranslateModule } from '@ngx-translate/core'; + +/** + * This component renders the configured 'values' into the ds-metadata-field-wrapper component. + * It puts the given 'separator' between each two values. + */ +@Component({ + selector: 'ds-sedici-date-metadata-values', + templateUrl: './sedici-date-metadata-values.component.html', + standalone: true, + imports: [ + TranslateModule, + MetadataValuesComponent, + MetadataFieldWrapperComponent, + ], +}) +export class SediciDateMetadataValuesComponent extends MetadataValuesComponent implements OnInit { + @Input() inlineLabel: boolean; + dateString: string; + + ngOnInit(): void { + const date = this.mdValues?.[0]?.value; + if (date !== undefined) { + if (date.length === 10) { + this.dateString = new Date(date).toLocaleDateString('es-AR',{ year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC' }); + } else if (date.length === 7) { + this.dateString = new Date(date).toLocaleDateString('es-AR',{ year: 'numeric', month: 'long', timeZone: 'UTC' }); + } else { + this.dateString = date; + } + } + } +} diff --git a/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.html b/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.html new file mode 100644 index 00000000000..b6fa087014b --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.html @@ -0,0 +1,3 @@ + + {{ languageString }} + \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts b/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts new file mode 100644 index 00000000000..c085ddf72b5 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts @@ -0,0 +1,34 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { MetadataValuesComponent } from 'src/app/item-page/field-components/metadata-values/metadata-values.component'; +import { MetadataFieldWrapperComponent } from 'src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component'; +import { TranslateModule } from '@ngx-translate/core'; + +/** + * This component renders the configured 'values' into the ds-metadata-field-wrapper component. + * It puts the given 'separator' between each two values. + */ +@Component({ + selector: 'ds-sedici-language-metadata-values', + templateUrl: './sedici-language-metadata-values.component.html', + standalone: true, + imports: [ + TranslateModule, + MetadataValuesComponent, + MetadataFieldWrapperComponent, + ], +}) +export class SediciLanguageMetadataValuesComponent extends MetadataValuesComponent implements OnInit { + @Input() inlineLabel: boolean; + languageString: string; + + ngOnInit(): void { + const language = this.mdValues?.[0]?.value; + if (language === 'es') { + this.languageString = 'Español'; + } else if (language === 'en') { + this.languageString = 'Inlgés'; + } else if (language === 'pt') { + this.languageString = 'Portugués'; + } + } +} diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.html new file mode 100644 index 00000000000..7a1421effd8 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.html @@ -0,0 +1,12 @@ +
+
+ +
+
+ {{ citation }} +
+
+
+ Copiar al portapapeles + +
\ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.scss new file mode 100644 index 00000000000..630bb5d0292 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.scss @@ -0,0 +1,62 @@ +.apa-citation-container { + border: 1px dashed #cccccc; + padding: 10px; + border-radius: 5px; + background-color: #f9f9f9; + font-family: Arial, sans-serif; + max-width: 300px; + max-height: 200px; // Tamaño máximo de la caja + overflow: hidden; // Ocultar el contenido que se desborda + transition: max-height 0.3s ease; // Transición para el cambio de tamaño + + &.expanded { + max-height: none; // Permitir que la caja se expanda completamente + } +} + +.apa-citation { + font-size: 14px; + color: #333333; + line-height: 1.5; + font-style: italic; + padding: 5px 0; +} + +.copy-button-container { + display: flex; + justify-content: space-between; + align-items: center; + padding-top: 5px; +} + +.copy-text { + font-size: 12px; + color: #666666; +} + +.copyButton { + cursor: pointer; + font-size: 16px; + color: #333333; + transition: color 0.3s; +} + +.copyButton:hover { + color: #007bff; +} + +.toggle-button-container { + display: flex; + justify-content: right; +} + +.toggleButton { + cursor: pointer; + font-size: 16px; + color: #333333; + transition: color 0.3s; +} + +.toggleButton:hover { + color: #007bff; +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.ts new file mode 100644 index 00000000000..01322d60b4a --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.ts @@ -0,0 +1,95 @@ +import { Component, Input, OnInit, AfterViewInit, ViewChild, ElementRef } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'ds-apa-citation', + standalone: true, + imports: [CommonModule], + templateUrl: './apa-citation.component.html', + styleUrls: ['./apa-citation.component.scss'] +}) +export class ApaCitationComponent implements OnInit { + @Input() item: any; + @ViewChild('elementContentToCopy') elementContentToCopy: ElementRef; + citation: string; + isExpanded: boolean = false; + showToggleButton: boolean = false; + + ngOnInit(): void { + this.generateCitation(); + } + + ngAfterViewInit(): void { + this.checkContentHeight(); + } + + generateCitation(): void { + const authors = this.getAuthors(); + const year = this.getYear(); + const title = this.getTitle(); + const journalTitle = this.getJournalTitle(); + const journalVolumeAndIssue = this.getJournalVolumeAndIssue(); + const pages = this.getPages(); + const source = this.getSource(); + + this.citation = `${authors} (${year}). ${title}. ${journalTitle}, ${journalVolumeAndIssue}, ${pages}. ${source}.`; + } + + getAuthors(): string { + const authors = this.item.allMetadata(['sedici.creator.person']); + return authors.map(author => author.value).join(', '); + } + + getYear(): string { + const date = this.item.firstMetadataValue('dc.date.issued'); + return date ? new Date(date).getFullYear().toString() : 's.f.'; + } + + getTitle(): string { + return this.item.firstMetadataValue('dc.title') || 'Sin título'; + } + + getJournalTitle(): string { + return this.item.firstMetadataValue('sedici.relation.journalTitle') || 'Sin journalTitle'; + } + + getJournalVolumeAndIssue(): string { + return this.item.firstMetadataValue('sedici.relation.journalVolumeAndIssue') || 'Sin journalVolumeAndIssue'; + } + + getPages(): string { + return this.item.firstMetadataValue('dc.format.extent') || 'Sin pages'; + } + + getSource(): string { + return this.item.firstMetadataValue('dc.identifier.doi') || 'Sin fuente'; + } + + copyToClipboard(el: HTMLDivElement, id: string) { + if (navigator.clipboard) { + navigator.clipboard.writeText(el.innerText).then(() => { + document.getElementById(id).classList.remove('fa-copy'); + document.getElementById(id).classList.add('fa-check'); + setTimeout(() => { + document.getElementById(id).classList.remove('fa-check'); + document.getElementById(id).classList.add('fa-copy'); + }, 1000); + }, (error) => { + console.log(error); + }); + } else { + console.log('Browser do not support Clipboard API'); + } + } + + toggleExpand(): void { + this.isExpanded = !this.isExpanded; + } + + checkContentHeight(): void { + const maxHeight = 195; // Altura máxima de la caja + if (this.elementContentToCopy.nativeElement.scrollHeight > maxHeight) { + this.showToggleButton = true; + } + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html new file mode 100644 index 00000000000..c16172a4028 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html @@ -0,0 +1,36 @@ +
+
+
+
+ .{{ getFileExtension(file.name) }} +
+
+
+ {{ getFileDescription(file) }} + {{ (file?.sizeBytes) | dsFileSize }} +
+ +
+
+
+
+
+ +
+
+ + + SOY UNA IMAGEN + + + + {{ dsoNameService.getName(selectedFile) }} + +
+ +
+ preview +
+
+
+
\ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss new file mode 100644 index 00000000000..43f30a82c8d --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss @@ -0,0 +1,111 @@ +.content-container { + display: flex; + flex-direction: row; + + .col-3 { + padding-left: 10px; + padding-right: 10px; + } + + .file-list { + flex: 1; + display: flex; + flex-direction: column; + max-height: 500px; // Ajusta este valor según el tamaño del previsualizador + overflow-y: auto; // Agrega el scrollbar vertical si el contenido excede el tamaño + + .file-item { + display: flex; + align-items: center; + padding: 5px; + cursor: pointer; + border-bottom: 1px solid #e0e0e0; + + &:hover { + background-color: #f5f5f5; + } + + .file-icon { + display: flex; + justify-content: center; + background-color: #333; + color: #fff; + border-radius: 4px; + + .file-extension { + font-size: 10px; + font-weight: bold; + } + } + + .file-info { + flex: 1; + display: flex; + flex-direction: column; + + .row { + display: flex; + align-items: center; + + .file-name { + font-weight: bold; + overflow: hidden; // Oculta el texto que se desborda + text-overflow: ellipsis; // Agrega puntos suspensivos al texto que se desborda + display: -webkit-box; // Necesario para line-clamp + -webkit-box-orient: vertical; // Necesario para line-clamp + -webkit-line-clamp: 2; // Limita el texto a 2 líneas + line-clamp: 2; // Limita el texto a 2 líneas + } + + .file-size { + text-align: right; + font-size: 14px; + } + + .download-btn { + background-color: #fff; + border: 1px solid #ccc; + padding: 5px 10px; + cursor: pointer; + border-radius: 4px; + + &:hover { + background-color: #e0e0e0; + } + } + } + + .file-preview { + font-size: 12px; + color: #888; + margin-top: 5px; + } + } + } + } + + .file-preview { + flex: 2; + position: relative; + + .preview-image { + width: 100%; + height: 500px; // Ajusta el tamaño según tus necesidades + } + + .no-preview { + width: 100%; + height: 500px; + display: flex; + justify-content: center; + align-items: center; + border: 2px solid #ccc; + background-color: #f5f5f5; + + span { + font-size: 24px; + color: #aaa; + } + } + } +} diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts new file mode 100644 index 00000000000..214e2e483d6 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts @@ -0,0 +1,78 @@ +import { Component, Input, Inject } from '@angular/core'; +import { NgFor, NgIf } from '@angular/common'; +import { Item } from 'src/app/core/shared/item.model'; +import { BitstreamDataService } from 'src/app/core/data/bitstream-data.service'; +import { APP_CONFIG, AppConfig } from 'src/config/app-config.interface'; +import { Bitstream } from 'src/app/core/shared/bitstream.model'; +import { FileSizePipe } from 'src/app/shared/utils/file-size-pipe'; +import { DSONameService } from 'src/app/core/breadcrumbs/dso-name.service'; +import { SediciFileDownloadLinkComponent } from './sedici-file-download-link.component'; + +@Component({ + selector: 'content-files', + styleUrls: ['./content-files.component.scss'], + templateUrl: './content-files.component.html', + standalone: true, + imports: [ + NgFor, + NgIf, + FileSizePipe, + SediciFileDownloadLinkComponent, + ], +}) +export class ContentFilesComponent { + @Input() object: Item; + + primaryBitsreamId: string; + + files: Bitstream[] = []; + + constructor( + protected bitstreamDataService: BitstreamDataService, + public dsoNameService: DSONameService, + @Inject(APP_CONFIG) protected appConfig: AppConfig, + ) {} + + selectedFile: Bitstream | null = null; + + selectFile(file: Bitstream) { + this.selectedFile = file; + } + + getFileExtension(fileName: string): string { + const parts = fileName.split('.'); + return parts.length > 1 ? parts.pop() : ''; + } + + isImage(file: Bitstream): boolean { + const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']; + const extension = this.getFileExtension(file.name).toLowerCase(); + return imageExtensions.includes(extension); + } + + getFileDescription(file: Bitstream): string { + return file.metadata['dc.description']?.[0]?.value || this.dsoNameService.getName(file) ; + } + + ngOnInit(): void { + this.getPrimaryBitstreamId(); + this.getAllPages(); + } + + private getPrimaryBitstreamId() { + this.bitstreamDataService.findPrimaryBitstreamByItemAndName(this.object, 'ORIGINAL', true, true).subscribe((primaryBitstream: Bitstream | null) => { + if (!primaryBitstream) { + return; + } + this.primaryBitsreamId = primaryBitstream?.id; + }); + } + + getAllPages(): void { + this.bitstreamDataService.findAllByItemAndBundleName(this.object, 'ORIGINAL', { currentPage: 0, elementsPerPage: 1000 }).subscribe((response: any) => { + if (response && response.payload && response.payload.page.length > 0) { + this.files = response.payload.page; + } + }); + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html new file mode 100644 index 00000000000..58d441a78e6 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html @@ -0,0 +1,48 @@ + + +
+ + + + + + + + + + + + + + + + +
+ + \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.ts new file mode 100644 index 00000000000..582dc07efa6 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.ts @@ -0,0 +1,40 @@ +import { Component, Input } from '@angular/core'; +import { NgFor } from '@angular/common'; +import { Item } from 'src/app/core/shared/item.model'; +import { RouterLink } from '@angular/router'; +import { getItemPageRoute } from 'src/app/item-page/item-page-routing-paths'; +import { TranslateModule } from '@ngx-translate/core'; + +import { GenericItemPageFieldComponent } from 'src/app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component'; +import { SediciDateMetadataValuesComponent } from '../../field-components/date-metadata-values/sedici-date-metadata-values.component'; +import { SediciLanguageMetadataValuesComponent } from '../../field-components/language-metadata-values/sedici-language-metadata-values.component'; +import { CollectionsComponent } from 'src/app/item-page/field-components/collections/collections.component'; + +@Component({ + selector: 'full-item', + // styleUrls: ['./full-item.component.scss'], + templateUrl: './full-item.component.html', + standalone: true, + imports: [ + NgFor, + RouterLink, + TranslateModule, + GenericItemPageFieldComponent, + SediciDateMetadataValuesComponent, + SediciLanguageMetadataValuesComponent, + CollectionsComponent, + ], +}) +export class FullItemComponent { + @Input() object: Item; + itemPageRoute: string; + + ngOnInit(): void { + this.itemPageRoute = getItemPageRoute(this.object); + } + + getMetadataEntries() { + const metadata = this.object.metadata; + return Object.keys(metadata).map(key => ({ key, value: metadata[key] })); + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html new file mode 100644 index 00000000000..9e3708f95d4 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html @@ -0,0 +1,14 @@ + +
+ + + +
+ +

+
+
\ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.scss new file mode 100644 index 00000000000..8a9908e15e0 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.scss @@ -0,0 +1,17 @@ +.container { + margin-top: 10px; + margin-bottom: 10px; +} + +button { + margin-right: 5px; +} + +button.active { + font-weight: bold; +} + +.abstract-text { + white-space: pre-wrap; + text-align: justify; +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.ts new file mode 100644 index 00000000000..889fd9cadaa --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.ts @@ -0,0 +1,55 @@ +import { Component, Input } from '@angular/core'; +import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; +import { NgIf, NgFor } from '@angular/common'; +import { MetadataFieldWrapperComponent } from 'src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { TruncatableComponent } from 'src/app/shared/truncatable/truncatable.component'; +import { TruncatablePartComponent } from 'src/app/shared/truncatable/truncatable-part/truncatable-part.component'; + +@Component({ + selector: 'language-switcher', + styleUrls: ['./language-switcher.component.scss'], + templateUrl: './language-switcher.component.html', + standalone: true, + imports: [ + NgIf, + NgFor, + MetadataFieldWrapperComponent, + TranslateModule, + TruncatableComponent, + TruncatablePartComponent, + ], +}) +export class LanguageSwitcherComponent { + @Input() item: any; + selectedLanguage: string; + availableLanguages: any[]; + + constructor(private sanitizer: DomSanitizer) {} + + ngOnInit() { + this.selectedLanguage = this.item.metadata['dc.language']?.[0]?.value || 'es'; + this.availableLanguages = this.getAvailableLanguages(); + } + + getAbstract(): SafeHtml { + const abstracts = this.item.metadata['dc.description.abstract']; + if (!abstracts) { + return this.sanitizer.bypassSecurityTrustHtml(''); + } + const abstract = abstracts.find((abstract: any) => (abstract.language || 'es') === this.selectedLanguage)?.value || ''; + return this.sanitizer.bypassSecurityTrustHtml(abstract); + } + + changeLanguage(language: string) { + this.selectedLanguage = language; + } + + getAvailableLanguages() { + const abstracts = this.item.metadata['dc.description.abstract']; + if (!abstracts) { + return []; + } + return [...new Set(abstracts.map((abstract: any) => abstract.language))]; + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html new file mode 100644 index 00000000000..a3f6fd009d8 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html @@ -0,0 +1,15 @@ + + + \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss new file mode 100644 index 00000000000..999612ca708 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss @@ -0,0 +1,20 @@ +.download-btn { + background-color: #fff; + border: 1px solid #ccc; + padding: 3px 8px; // Reducir el padding para achicar el botón + cursor: pointer; + border-radius: 4px; + font-size: 14px; // Reducir el tamaño de la letra + + &:hover { + background-color: #e0e0e0; + } + + .pr-1 { + padding-right: 5px; // Ajustar el padding del icono si es necesario + } + + i { + font-size: 12px; // Ajustar el tamaño del icono si es necesario + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts new file mode 100644 index 00000000000..af1ac0da3b0 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts @@ -0,0 +1,26 @@ +import { + AsyncPipe, + NgClass, + NgIf, +} from '@angular/common'; +import { Component, OnInit } from '@angular/core'; +import { RouterLink } from '@angular/router'; +import { TranslateModule } from '@ngx-translate/core'; +import { FileDownloadLinkComponent } from 'src/app/shared/file-download-link/file-download-link.component'; + +@Component({ + selector: 'ds-sedici-file-download-link', + templateUrl: './sedici-file-download-link.component.html', + styleUrls: ['./sedici-file-download-link.component.scss'], + standalone: true, + imports: [ + AsyncPipe, + NgClass, + NgIf, + RouterLink, + TranslateModule, + ], +}) +export class SediciFileDownloadLinkComponent extends FileDownloadLinkComponent implements OnInit { + +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html new file mode 100644 index 00000000000..5de590c1eda --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html @@ -0,0 +1,28 @@ +
+
+
+ {{ tab.label }} +
+
+
+ +
+ +
+
+ +
+
+ +
+
+ Selecciona una solapa. +
+
+
+
+ \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss new file mode 100644 index 00000000000..c47f37b0f5a --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss @@ -0,0 +1,37 @@ +.tab-container { + display: flex; + flex-direction: column; + border: 1px solid #e0e0e0; + border-radius: 4px; + overflow: hidden; + font-family: 'Arial', sans-serif; +} + +.tab-header { + display: flex; + background-color: #f8f8f8; + border-bottom: 1px solid #e0e0e0; +} + +.tab { + flex: 1; + padding: 12px 16px; + text-align: center; + cursor: pointer; + font-size: 1em; + font-weight: bold; + color: #555; + transition: background-color 0.3s ease; +} + +.tab.active { + background-color: #ffffff; + border-bottom: 2px solid #007bff; + color: #007bff; +} + +.tab-content { + padding: 16px; + background-color: #ffffff; + min-height: 500px; //AJUSTAR +} diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts new file mode 100644 index 00000000000..9195bc401a3 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts @@ -0,0 +1,29 @@ +import { Component, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { Item } from 'src/app/core/shared/item.model'; +import { ItemPageCcLicenseFieldComponent } from 'src/app/item-page/simple/field-components/specific-field/cc-license/item-page-cc-license-field.component'; +import { FullItemComponent } from './full-item.component'; +import { ContentFilesComponent } from './content-files.component'; + +@Component({ + selector: 'ds-tabbed-content', + standalone: true, + imports: [CommonModule, ItemPageCcLicenseFieldComponent, FullItemComponent, ContentFilesComponent], + templateUrl: './tabbed-content.component.html', + styleUrls: ['./tabbed-content.component.scss'] +}) +export class TabbedContentComponent { + @Input() object: Item; + + selectedTabIndex = 0; + + tabs = [ + { label: 'Contenido' }, + { label: 'Licencia' }, + { label: 'Registro completo' } + ]; + + selectTab(index: number) { + this.selectedTabIndex = index; + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 7aa21532981..60da797b752 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -1,239 +1,275 @@ - -
-
- - -
-
+
+
+
+
+
+
+ +
+

+ + +

+
+ +
+
+
+ + + + + + +
+
+
+ + + + + + + + + + + + + +
+
-
-

- -

- -
-
- - - -
-
-
- - - - - -
- + + + +
Información de la tesis
+
Información general
+ + + + + + + + + + + +
Información general
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + +
+
+
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - -
+
+ + + + + + + + \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss index e69de29bb2d..4421d20a190 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss @@ -0,0 +1,50 @@ +.badge-title-container { + display: flex; + align-items: center; +} + +.badge-title-content { + display: flex; + flex-direction: column; + + h4 { + font-size: 1.75rem; + color: #999; + margin-bottom: 0.5rem; + } +} + +.edit-menu { + margin-left: auto; +} + +.subtitle-content { + font-style: italic; + color: #555; + margin-bottom: 0.5rem; +} + +.divider { + border-top: 1px solid #999; + margin: 0.5rem 0; +} + +.section-divider { + border-bottom: 1px solid #D8E8Eb; +} + +.item-identifiers { + display: flex; + flex-wrap: wrap; + gap: 0.2em; + + div { + display: inline-block; + padding-right: 0.2em; + } +} + +.reference-image { + max-width: 100%; + height: auto; +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts index 9609ad35739..f7bf1258b23 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts @@ -1,6 +1,8 @@ import { AsyncPipe, NgIf, + NgFor, + NgStyle, } from '@angular/common'; import { ChangeDetectionStrategy, @@ -19,6 +21,7 @@ import { ThemedFileSectionComponent } from '../../../../../../../app/item-page/s import { ItemPageAbstractFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component'; import { ItemPageCcLicenseFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/cc-license/item-page-cc-license-field.component'; import { ItemPageDateFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/date/item-page-date-field.component'; +import { ItemPageAuthorFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/author/item-page-author-field.component'; import { GenericItemPageFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component'; import { ThemedItemPageTitleFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/title/themed-item-page-field.component'; import { ItemPageUriFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component'; @@ -35,6 +38,16 @@ import { FileSectionComponent } from '../../field-components/file-section/file-s import { MediaViewerComponent } from '../../../media-viewer/media-viewer.component'; import { ThumbnailComponent } from 'src/themes/custom/app/thumbnail/thumbnail.component'; import { ResultsBackButtonComponent } from 'src/themes/custom/app/shared/results-back-button/results-back-button.component'; +import { SediciContextBadgeComponent } from 'src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component'; +import { LanguageSwitcherComponent } from './language-switcher.component'; +import { ApaCitationComponent } from './apa-citation.component'; +import { MetadataValue } from 'src/app/core/shared/metadata.models'; +import { BadgeMetadataValuesComponent } from '../../field-components/badge-metadata-values/badge-metadata-values.component'; +import { TruncatableComponent } from 'src/app/shared/truncatable/truncatable.component'; +import { TruncatablePartComponent } from 'src/app/shared/truncatable/truncatable-part/truncatable-part.component'; +import { TabbedContentComponent } from './tabbed-content.component'; +import { SediciDateMetadataValuesComponent } from '../../field-components/date-metadata-values/sedici-date-metadata-values.component'; +import { SediciLanguageMetadataValuesComponent } from '../../field-components/language-metadata-values/sedici-language-metadata-values.component'; /** * Component that represents an untyped Item page */ @@ -49,6 +62,8 @@ import { ResultsBackButtonComponent } from 'src/themes/custom/app/shared/results standalone: true, imports: [ NgIf, + NgFor, + NgStyle, ThemedResultsBackButtonComponent, MiradorViewerComponent, ThemedItemPageTitleFieldComponent, @@ -73,6 +88,65 @@ import { ResultsBackButtonComponent } from 'src/themes/custom/app/shared/results MediaViewerComponent, ThumbnailComponent, ResultsBackButtonComponent, + LanguageSwitcherComponent, + ItemPageAuthorFieldComponent, + BadgeMetadataValuesComponent, + TruncatableComponent, + TruncatablePartComponent, + ApaCitationComponent, + TabbedContentComponent, + SediciDateMetadataValuesComponent, + SediciLanguageMetadataValuesComponent, + SediciContextBadgeComponent, ], }) -export class UntypedItemComponent extends BaseComponent {} +export class UntypedItemComponent extends BaseComponent { + hasMultipleLanguages: boolean; + subtype; + identifierOtherMetadataName = ['dc.identifier.uri', 'sedici.identifier.other']; + itemIdentifiers: { mdValue: MetadataValue, label: string }[]; + + ngOnInit() { + super.ngOnInit(); + const abstracts = this.object.metadata['dc.description.abstract']; + this.hasMultipleLanguages = abstracts && abstracts.length > 1; + this.subtype = this.object.metadata['sedici.subtype'][0]?.value; + this.setIdentifierOtherValues(); + } + + setIdentifierOtherValues(): void { + this.itemIdentifiers = []; + const length = this.itemIdentifiers.push({ + mdValue: new MetadataValue(), + label: 'HDL' + }); + this.itemIdentifiers[length - 1].mdValue.value = this.object?.handle; + this.object.allMetadata(this.identifierOtherMetadataName).forEach( + (mdValue, index) => { + let charIndex = -1; + let label = ''; + if (mdValue.value.includes(this.object?.handle)) { + if (mdValue.value.includes('doi')) { + label = 'DOI'; + } else { + return; + } + } else { + if (!mdValue.value.startsWith('http')) { + const splitChar = mdValue.value.includes(':') ? ':' : ' '; + charIndex = mdValue.value.indexOf(splitChar); + label = mdValue.value.substring(0, charIndex).toUpperCase(); + } else { + label = 'URL'; + } + } + const value = mdValue.value.substring(charIndex + 1).trim(); + const identifierListLength = this.itemIdentifiers.push({ + mdValue: new MetadataValue(), + label: label + }); + this.itemIdentifiers[identifierListLength - 1].mdValue.value = value; + } + ); + } +} diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.html b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.html new file mode 100644 index 00000000000..f23e7b4b6a8 --- /dev/null +++ b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.html @@ -0,0 +1,16 @@ + + + + +
+ + + + +
+ {{ getContextInfo() }} +
+
+ {{ getYear() }} +
+
diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss new file mode 100644 index 00000000000..b8cb48e7358 --- /dev/null +++ b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss @@ -0,0 +1,30 @@ +.badge-title-container { + display: flex; + align-items: center; + margin-bottom: 10px; + + .context-info, + .context-year { + font-size: 12px; + position: relative; + &:hover::after { + content: ''; + position: absolute; + left: 1.5%; + right: 1.5%; + bottom: 0; + height: 2px; + background-color: #8d8d8d; + } + } + + .context-info { + color: #8d8d8d; + margin-left: 5px; + } + + .context-year { + color: #4a90e2; + margin-left: 5px; + } +} \ No newline at end of file diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts new file mode 100644 index 00000000000..6ba11b96d53 --- /dev/null +++ b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts @@ -0,0 +1,86 @@ +import { NgIf } from '@angular/common'; +import { Component } from '@angular/core'; +import { BadgesComponent as BaseComponent } from '../badges.component'; + +import { ThemedAccessStatusBadgeComponent } from 'src/app/shared/object-collection/shared/badges/access-status-badge/themed-access-status-badge.component'; +import { ThemedMyDSpaceStatusBadgeComponent } from 'src/app/shared/object-collection/shared/badges/my-dspace-status-badge/themed-my-dspace-status-badge.component'; +import { ThemedStatusBadgeComponent } from 'src/app/shared/object-collection/shared/badges/status-badge/themed-status-badge.component'; +import { ThemedTypeBadgeComponent } from 'src/app/shared/object-collection/shared/badges/type-badge/themed-type-badge.component'; + +@Component({ + selector: 'ds-sedici-context-badge', + styleUrls: ['./sedici-context-badge.component.scss'], + templateUrl: './sedici-context-badge.component.html', + standalone: true, + imports: [ThemedStatusBadgeComponent, NgIf, ThemedMyDSpaceStatusBadgeComponent, ThemedTypeBadgeComponent, ThemedAccessStatusBadgeComponent], +}) +export class SediciContextBadgeComponent extends BaseComponent { + + getThesisInfo(): string { + const thesisDegreeName = this.object.firstMetadataValue('thesis.degree.name'); + const thesisDegreeGrantor = this.object.firstMetadataValue('thesis.degree.grantor'); + + if (thesisDegreeName && thesisDegreeGrantor) { + return `${thesisDegreeName}; ${thesisDegreeGrantor}`; + } else { + return ''; + } + } + + getJournalInfo(): string { + const journalTitle = this.object.firstMetadataValue('sedici.relation.journalTitle'); + const journalVolumeAndIssue = this.object.firstMetadataValue('sedici.relation.journalVolumeAndIssue'); + + if (journalTitle && journalVolumeAndIssue) { + return `${journalTitle}; ${journalVolumeAndIssue}`; + } else if (journalTitle) { + return journalTitle; + } else { + return ''; + } + } + + getOriginInfoPlace(): string { + let place = this.object.firstMetadataValue('mods.originInfo.place'); + if (!place) { + return ''; + } + return place; + } + + getEventInfo(): string { + let event = this.object.firstMetadataValue('sedici.relation.event'); + if (!event) { + return ''; + } + return event; + } + + getContextInfo(): string { + let thesis = this.getThesisInfo(); + let journal = this.getJournalInfo(); + let event = this.getEventInfo(); + let origin = this.getOriginInfoPlace(); + if (thesis) { + return thesis; + }; + if (journal || event) { + if (journal && event) { + return `${journal} | ${event}`; + } else if (journal) { + return journal; + } else { + return event; + }; + }; + return origin; + } + + getYear(): string { + let dateString = this.object.firstMetadataValue('dc.date.issued') || this.object.firstMetadataValue('dc.date.created'); + if (!dateString) { + return ''; + } + return dateString.split('-')[0]; + } +} From 74be601bb0bc7475199518c1548438a81f93c580 Mon Sep 17 00:00:00 2001 From: 178Pelado Date: Fri, 4 Oct 2024 09:19:09 -0300 Subject: [PATCH 02/46] =?UTF-8?q?11008=20Primera=20versi=C3=B3n=20vista=20?= =?UTF-8?q?del=20=C3=ADtem;=20cambio=20tama=C3=B1o=20font-size-base?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metadata-field-wrapper.component.html | 7 - .../metadata-field-wrapper.component.ts | 8 +- .../access-status-badge.component.ts | 14 +- src/app/shared/utils/persistent.identifier.ts | 68 ++++ src/styles/_bootstrap_variables.scss | 2 +- src/styles/_custom_variables.scss | 2 +- .../breadcrumbs/breadcrumbs.component.html | 20 ++ .../breadcrumbs/breadcrumbs.component.scss | 38 +++ .../app/breadcrumbs/breadcrumbs.component.ts | 8 +- .../badge-metadata-values.component.html | 31 +- .../badge-metadata-values.component.ts | 1 + .../sedici-date-metadata-values.component.ts | 4 +- ...dici-language-metadata-values.component.ts | 2 +- .../item-page-identifier.other-field.html | 7 + .../item-page-identifier.other-field.ts | 52 +++ .../item-page/simple/item-page.component.html | 15 + .../item-page/simple/item-page.component.ts | 8 +- .../untyped-item/apa-citation.component.html | 11 +- .../untyped-item/apa-citation.component.scss | 33 +- .../untyped-item/apa-citation.component.ts | 76 ++--- .../untyped-item/content-files.component.html | 21 +- .../untyped-item/content-files.component.scss | 29 +- .../untyped-item/content-files.component.ts | 30 +- .../untyped-item/full-item.component.html | 46 +-- .../untyped-item/full-item.component.ts | 8 +- .../language-switcher.component.html | 10 +- .../language-switcher.component.ts | 20 +- .../sedici-file-download-link.component.html | 4 +- .../sedici-file-download-link.component.scss | 12 +- .../sedici-file-download-link.component.ts | 4 + ...i-truncatable-generic-item-page-field.html | 11 + ...i-truncatable-generic-item-page-field.scss | 4 + ...ici-truncatable-generic-item-page-field.ts | 54 +++ .../tabbed-content.component.html | 3 + .../tabbed-content.component.scss | 1 - .../untyped-item/tabbed-content.component.ts | 10 +- .../untyped-item/untyped-item.component.html | 314 +++++++----------- .../untyped-item/untyped-item.component.scss | 19 +- .../untyped-item/untyped-item.component.ts | 86 +---- .../access-status-badge.component.ts | 57 +++- .../sedici-context-badge.component.scss | 2 +- .../sedici-context-badge.component.ts | 74 +++-- 42 files changed, 705 insertions(+), 521 deletions(-) create mode 100644 src/app/shared/utils/persistent.identifier.ts create mode 100644 src/themes/custom/app/item-page/simple/field-components/specific-field/identfier-other/item-page-identifier.other-field.html create mode 100644 src/themes/custom/app/item-page/simple/field-components/specific-field/identfier-other/item-page-identifier.other-field.ts create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.html create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.scss create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.ts diff --git a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html index 826091aebc8..a5b9f9851d8 100644 --- a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html +++ b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.html @@ -1,10 +1,3 @@ - -
{{ label }}
diff --git a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.ts b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.ts index e4548e2e24a..fae5b6f6b39 100644 --- a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.ts +++ b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.ts @@ -24,11 +24,5 @@ export class MetadataFieldWrapperComponent { @Input() hideIfNoTextContent = true; - @Input() inlineLabel: boolean; - - ngOnInit() { - if (this.inlineLabel === undefined) { - this.inlineLabel = true; - } - } + @Input() inlineLabel: boolean = true; } diff --git a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts index 668a0fc945b..9a84ce9df27 100644 --- a/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts +++ b/src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts @@ -24,7 +24,6 @@ import { Item } from '../../../../../core/shared/item.model'; import { ITEM } from '../../../../../core/shared/item.resource-type'; import { hasValue } from '../../../../empty.util'; import { AccessStatusObject } from './access-status.model'; -import { RemoteData } from 'src/app/core/data/remote-data'; @Component({ selector: 'ds-base-access-status-badge', @@ -61,7 +60,7 @@ export class AccessStatusBadgeComponent { * * @param {AccessStatusDataService} accessStatusDataService */ - constructor(private accessStatusDataService: AccessStatusDataService) { } + constructor(protected accessStatusDataService: AccessStatusDataService) { } ngOnInit(): void { this.showAccessStatus = environment.item.showAccessStatuses; @@ -71,17 +70,12 @@ export class AccessStatusBadgeComponent { } const item = this.object as Item; - let accessStatus$; - if (item.accessStatus == null) { // In case the access status has not been loaded, do it individually. - accessStatus$ = this.accessStatusDataService.findAccessStatusFor(item); - } else { - accessStatus$ = item.accessStatus; + item.accessStatus = this.accessStatusDataService.findAccessStatusFor(item); } - - this.accessStatus$ = accessStatus$.pipe( - map((accessStatusRD: RemoteData) => { + this.accessStatus$ = item.accessStatus.pipe( + map((accessStatusRD) => { if (accessStatusRD.statusCode !== 401 && hasValue(accessStatusRD.payload)) { return accessStatusRD.payload; } else { diff --git a/src/app/shared/utils/persistent.identifier.ts b/src/app/shared/utils/persistent.identifier.ts new file mode 100644 index 00000000000..23c5a0551c0 --- /dev/null +++ b/src/app/shared/utils/persistent.identifier.ts @@ -0,0 +1,68 @@ +import { MetadataValue } from 'src/app/core/shared/metadata.models'; +import { Item } from 'src/app/core/shared/item.model'; + +// Métodos para obtener los valores de url y urn de ['dc.identifier.uri', 'sedici.identifier.other'] +export function extractSuffix(identifier: string, prefixes: string[]): string { + for (const prefix of prefixes) { + const index = identifier.indexOf(prefix); + if (index !== -1) { + return identifier.substring(index + prefix.length).trim(); + } + } + return identifier; +} + +export function setUrl(urlBase: string, suffix: string): string { + return urlBase + suffix; +} + +export function setPersistentIdentifiers(object: Item, identifierOtherMetadataName: string[]): { mdValue: MetadataValue, label: string, url: string }[] { + let itemIdentifiers = []; + object.allMetadata(identifierOtherMetadataName).forEach( + (mdValue, index) => { + const identifierValue = mdValue.value.toLowerCase(); + let label = ''; + let url = ''; + let urn = ''; + let urlBase = ''; + + if (identifierValue.includes('doi') || identifierValue.startsWith('10.')) { + label = 'DOI'; + urn = extractSuffix(mdValue.value, ['https://doi.org/', 'http://dx.doi.org/', 'doi:', 'DOI:']); + urlBase = 'https://doi.org/'; + } else if (identifierValue.includes('hdl') || identifierValue.includes('handle')) { + label = 'HDL'; + urn = extractSuffix(mdValue.value, ['http://hdl.handle.net/', 'hdl:', '/handle/']); + urlBase = 'http://hdl.handle.net/'; + } else if (identifierValue.includes('arxiv')) { + label = 'arXiv'; + urn = extractSuffix(mdValue.value, ['/arxiv.org/abs/', '/arxiv.org/pdf/', '/archive.org/details/arxiv-', 'arxiv:', 'arXiv:']); + urlBase = 'https://arxiv.org/abs/'; + } else if (identifierValue.includes('pmcid') || identifierValue.includes('pmid')) { + label = 'PubMed'; + urn = extractSuffix(mdValue.value, ['pmid:', 'pmcid:']); + urlBase = urn.startsWith('PMC') ? 'https://www.ncbi.nlm.nih.gov/pmc/articles/' : 'https://pubmed.ncbi.nlm.nih.gov/'; + } else if (identifierValue.includes('ark')) { + label = 'ARK'; + urn = extractSuffix(mdValue.value, ['ark:']); + urlBase = 'https://n2t.net/ark:/'; // VER + } else { + return; + } + + if (identifierValue.startsWith('http')) { + url = identifierValue; + } else { + url = setUrl(urlBase, urn); + } + + const identifierListLength = itemIdentifiers.push({ + mdValue: new MetadataValue(), + label: label, + url: url, + }); + itemIdentifiers[identifierListLength - 1].mdValue.value = urn; + } + ); + return itemIdentifiers; +} \ No newline at end of file diff --git a/src/styles/_bootstrap_variables.scss b/src/styles/_bootstrap_variables.scss index 386b4b47fe3..d80b53ea088 100644 --- a/src/styles/_bootstrap_variables.scss +++ b/src/styles/_bootstrap_variables.scss @@ -15,7 +15,7 @@ /*** FONT FAMILIES AND FONT SIZES ***/ -$font-size-base: 1rem !default; // Assumes the browser default, typically `16px` +$font-size-base: 0.9rem !default; // Assumes the browser default, typically `16px` $h1-font-size: $font-size-base * 2.125 !default; $h2-font-size: $font-size-base * 1.75 !default; $h3-font-size: $font-size-base * 1.5 !default; diff --git a/src/styles/_custom_variables.scss b/src/styles/_custom_variables.scss index f261f0f400a..6796e73f2f4 100644 --- a/src/styles/_custom_variables.scss +++ b/src/styles/_custom_variables.scss @@ -105,7 +105,7 @@ --ds-breadcrumb-bg: #{$gray-200} !important; --ds-breadcrumb-link-color: #{$ds-breadcrumb-link-color}; --ds-breadcrumb-link-active-color: #{darken($ds-breadcrumb-link-color, 30%)}; - --ds-breadcrumb-max-length: 200px; + --ds-breadcrumb-max-length: 300px; --ds-slider-color: #{$ds-slider-color}; --ds-slider-handle-width: 18px; diff --git a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html index e69de29bb2d..acab8ab95b4 100644 --- a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html +++ b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html @@ -0,0 +1,20 @@ + + + + + + + + + + + + diff --git a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.scss b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.scss index e69de29bb2d..a0b9550b1d6 100644 --- a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.scss +++ b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.scss @@ -0,0 +1,38 @@ +.nav-breadcrumb { + background-color: var(--ds-breadcrumb-bg); +} + +.breadcrumb { + border-radius: 0; + padding-bottom: calc(var(--ds-content-spacing) / 2); + padding-top: calc(var(--ds-content-spacing) / 2); + background-color: var(--ds-breadcrumb-bg); +} + +li.breadcrumb-item { + display: flex; +} + +.breadcrumb-item-limiter { + display: inline-block; + max-width: var(--ds-breadcrumb-max-length); + > * { + max-width: 100%; + display: block; + } +} + +li.breadcrumb-item { + a { + color: var(--ds-breadcrumb-link-color); + } +} + +li.breadcrumb-item.active { + color: var(--ds-breadcrumb-link-active-color); +} + +.breadcrumb-item+ .breadcrumb-item::before { + display: block; + content: quote(">") !important; +} diff --git a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.ts b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.ts index c71caf9f023..b4f72f32afc 100644 --- a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.ts +++ b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.ts @@ -17,10 +17,10 @@ import { VarDirective } from '../../../../app/shared/utils/var.directive'; */ @Component({ selector: 'ds-themed-breadcrumbs', - // templateUrl: './breadcrumbs.component.html', - templateUrl: '../../../../app/breadcrumbs/breadcrumbs.component.html', - // styleUrls: ['./breadcrumbs.component.scss'] - styleUrls: ['../../../../app/breadcrumbs/breadcrumbs.component.scss'], + templateUrl: './breadcrumbs.component.html', + // templateUrl: '../../../../app/breadcrumbs/breadcrumbs.component.html', + styleUrls: ['./breadcrumbs.component.scss'], + // styleUrls: ['../../../../app/breadcrumbs/breadcrumbs.component.scss'], standalone: true, imports: [VarDirective, NgIf, NgTemplateOutlet, NgFor, RouterLink, NgbTooltipModule, AsyncPipe, TranslateModule], }) diff --git a/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.html b/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.html index 4efbb6e3824..e94183991cb 100644 --- a/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.html +++ b/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.html @@ -1,21 +1,22 @@ - - - + + + -
- - {{badgeLabel}} - - - {{mdValue.value}} - - {{mdValue.value}} - - - -
+
+ + {{badgeLabel}} + + + {{ mdValue.value }} + {{ mdValue.value }} + + {{mdValue.value}} + + + +
diff --git a/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.ts b/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.ts index 2b211a13834..fdba85e4bab 100644 --- a/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.ts +++ b/src/themes/custom/app/item-page/simple/field-components/badge-metadata-values/badge-metadata-values.component.ts @@ -17,6 +17,7 @@ export class BadgeMetadataValuesComponent extends MetadataValuesComponent { @Input() badgeLabel: string; @Input() badgeLabelType: string; @Input() copyToClipboardButton: boolean = false; + @Input() url: string; copyToClipboard(el: HTMLDivElement, id: string) { if (navigator.clipboard) { diff --git a/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.ts b/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.ts index 11bdda8daa8..5934e092f01 100644 --- a/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.ts +++ b/src/themes/custom/app/item-page/simple/field-components/date-metadata-values/sedici-date-metadata-values.component.ts @@ -18,13 +18,13 @@ import { TranslateModule } from '@ngx-translate/core'; ], }) export class SediciDateMetadataValuesComponent extends MetadataValuesComponent implements OnInit { - @Input() inlineLabel: boolean; + @Input() inlineLabel: boolean = true; dateString: string; ngOnInit(): void { const date = this.mdValues?.[0]?.value; if (date !== undefined) { - if (date.length === 10) { + if (date.length === 10 || date.includes('T')) { this.dateString = new Date(date).toLocaleDateString('es-AR',{ year: 'numeric', month: 'long', day: 'numeric', timeZone: 'UTC' }); } else if (date.length === 7) { this.dateString = new Date(date).toLocaleDateString('es-AR',{ year: 'numeric', month: 'long', timeZone: 'UTC' }); diff --git a/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts b/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts index c085ddf72b5..64483039565 100644 --- a/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts +++ b/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts @@ -18,7 +18,7 @@ import { TranslateModule } from '@ngx-translate/core'; ], }) export class SediciLanguageMetadataValuesComponent extends MetadataValuesComponent implements OnInit { - @Input() inlineLabel: boolean; + @Input() inlineLabel: boolean = true; languageString: string; ngOnInit(): void { diff --git a/src/themes/custom/app/item-page/simple/field-components/specific-field/identfier-other/item-page-identifier.other-field.html b/src/themes/custom/app/item-page/simple/field-components/specific-field/identfier-other/item-page-identifier.other-field.html new file mode 100644 index 00000000000..934552f4937 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/specific-field/identfier-other/item-page-identifier.other-field.html @@ -0,0 +1,7 @@ +
+ +
\ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/specific-field/identfier-other/item-page-identifier.other-field.ts b/src/themes/custom/app/item-page/simple/field-components/specific-field/identfier-other/item-page-identifier.other-field.ts new file mode 100644 index 00000000000..c76d04ae996 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/specific-field/identfier-other/item-page-identifier.other-field.ts @@ -0,0 +1,52 @@ +import { + Component, + Input, +} from '@angular/core'; + +import { Item } from 'src/app/core/shared/item.model'; +import { MetadataValuesComponent } from 'src/app/item-page/field-components/metadata-values/metadata-values.component'; +import { MetadataValue } from 'src/app/core/shared/metadata.models'; + +@Component({ + selector: 'ds-item-page-identifier-other-field', + templateUrl: './item-page-identifier.other-field.html', + standalone: true, + imports: [MetadataValuesComponent], +}) + +export class ItemPageIdentifierOtherFieldComponent{ + + /** + * The item to display metadata for + */ + @Input() item: Item; + + /** + * Fields (schema.element.qualifier) used to render their values. + */ + fields: string[] = ['sedici.identifier.other']; + + /** + * Label i18n key for the rendered metadata + */ + label: string = 'Otros idenfiticadores'; + + /** + * Separator string between multiple values of the metadata fields defined + * @type {string} + */ + separator = '
'; + + mdValues: MetadataValue[]; + + ngOnInit() { + this.selectNotPersistentIdentifiers(); + } + + selectNotPersistentIdentifiers(): void { + const persistentIdentifiers = ['doi', 'DOI', 'handle', 'hdl', 'arxiv', 'arXiv', 'pmcid', 'pmid', 'ark']; + this.mdValues = this.item.allMetadata(this.fields).filter(mdValue => { + return !persistentIdentifiers.some(identifier => mdValue.value.includes(identifier)); + }); + } +} diff --git a/src/themes/custom/app/item-page/simple/item-page.component.html b/src/themes/custom/app/item-page/simple/item-page.component.html index e69de29bb2d..0603a37983f 100644 --- a/src/themes/custom/app/item-page/simple/item-page.component.html +++ b/src/themes/custom/app/item-page/simple/item-page.component.html @@ -0,0 +1,15 @@ +
+
+
+ + + + + + + +
+
+ + +
diff --git a/src/themes/custom/app/item-page/simple/item-page.component.ts b/src/themes/custom/app/item-page/simple/item-page.component.ts index 7daa65287a5..90efde101e5 100644 --- a/src/themes/custom/app/item-page/simple/item-page.component.ts +++ b/src/themes/custom/app/item-page/simple/item-page.component.ts @@ -28,10 +28,10 @@ import { ViewTrackerComponent } from '../../../../../app/statistics/angulartics/ */ @Component({ selector: 'ds-themed-item-page', - // styleUrls: ['./item-page.component.scss'], - styleUrls: ['../../../../../app/item-page/simple/item-page.component.scss'], - // templateUrl: './item-page.component.html', - templateUrl: '../../../../../app/item-page/simple/item-page.component.html', + styleUrls: ['./item-page.component.scss'], + // styleUrls: ['../../../../../app/item-page/simple/item-page.component.scss'], + templateUrl: './item-page.component.html', + // templateUrl: '../../../../../app/item-page/simple/item-page.component.html', changeDetection: ChangeDetectionStrategy.OnPush, animations: [fadeInOut], standalone: true, diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.html index 7a1421effd8..d0b7f359442 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.html @@ -1,7 +1,10 @@ -
-
- -
+
+ + +
+
{{ citation }}
diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.scss index 630bb5d0292..6772bdafcf4 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.scss @@ -4,18 +4,9 @@ border-radius: 5px; background-color: #f9f9f9; font-family: Arial, sans-serif; - max-width: 300px; - max-height: 200px; // Tamaño máximo de la caja - overflow: hidden; // Ocultar el contenido que se desborda - transition: max-height 0.3s ease; // Transición para el cambio de tamaño - - &.expanded { - max-height: none; // Permitir que la caja se expanda completamente - } } .apa-citation { - font-size: 14px; color: #333333; line-height: 1.5; font-style: italic; @@ -24,9 +15,9 @@ .copy-button-container { display: flex; - justify-content: space-between; - align-items: center; - padding-top: 5px; + justify-content: flex-end; + padding-top: .25rem; + gap: .25rem; } .copy-text { @@ -36,27 +27,11 @@ .copyButton { cursor: pointer; - font-size: 16px; + font-size: 1rem; color: #333333; transition: color 0.3s; } .copyButton:hover { color: #007bff; -} - -.toggle-button-container { - display: flex; - justify-content: right; -} - -.toggleButton { - cursor: pointer; - font-size: 16px; - color: #333333; - transition: color 0.3s; -} - -.toggleButton:hover { - color: #007bff; } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.ts index 01322d60b4a..0e5f3dd8b75 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/apa-citation.component.ts @@ -12,57 +12,32 @@ export class ApaCitationComponent implements OnInit { @Input() item: any; @ViewChild('elementContentToCopy') elementContentToCopy: ElementRef; citation: string; - isExpanded: boolean = false; - showToggleButton: boolean = false; + citationType: string = 'apa'; - ngOnInit(): void { - this.generateCitation(); - } - - ngAfterViewInit(): void { - this.checkContentHeight(); - } - - generateCitation(): void { - const authors = this.getAuthors(); - const year = this.getYear(); - const title = this.getTitle(); - const journalTitle = this.getJournalTitle(); - const journalVolumeAndIssue = this.getJournalVolumeAndIssue(); - const pages = this.getPages(); - const source = this.getSource(); - - this.citation = `${authors} (${year}). ${title}. ${journalTitle}, ${journalVolumeAndIssue}, ${pages}. ${source}.`; - } - - getAuthors(): string { - const authors = this.item.allMetadata(['sedici.creator.person']); - return authors.map(author => author.value).join(', '); - } + citationOptions = [ + { value: 'apa', label: 'APA' }, + { value: 'chicago', label: 'Chicago' }, + { value: 'mla', label: 'MLA' }, + ]; - getYear(): string { - const date = this.item.firstMetadataValue('dc.date.issued'); - return date ? new Date(date).getFullYear().toString() : 's.f.'; - } - - getTitle(): string { - return this.item.firstMetadataValue('dc.title') || 'Sin título'; - } - - getJournalTitle(): string { - return this.item.firstMetadataValue('sedici.relation.journalTitle') || 'Sin journalTitle'; - } - - getJournalVolumeAndIssue(): string { - return this.item.firstMetadataValue('sedici.relation.journalVolumeAndIssue') || 'Sin journalVolumeAndIssue'; + ngOnInit(): void { + this.generateCitation(this.citationType); } - getPages(): string { - return this.item.firstMetadataValue('dc.format.extent') || 'Sin pages'; + generateCitation(type: string): void { + if (type === 'apa') { + this.citation = 'Melville, H. & Schaeffer, M. (1922) Moby Dick. New York, Dodd, Mead and company. [Pdf] Retrieved from the Library of Congress, https://www.loc.gov/item/22022440/'; + } else if (type === 'chicago') { + this.citation = 'Melville, Herman, and Mead Schaeffer. Moby Dick. New York, Dodd, Mead and company, 1922. Pdf. https://www.loc.gov/item/22022440/'; + } else { + this.citation = 'Melville, Herman, and Mead Schaeffer. Moby Dick. New York, Dodd, Mead and company, 1922. Pdf. Retrieved from the Library of Congress, '; + } } - getSource(): string { - return this.item.firstMetadataValue('dc.identifier.doi') || 'Sin fuente'; + onCitationTypeChange(event: Event): void { + const selectElement = event.target as HTMLSelectElement; + this.citationType = selectElement.value; + this.generateCitation(this.citationType); } copyToClipboard(el: HTMLDivElement, id: string) { @@ -81,15 +56,4 @@ export class ApaCitationComponent implements OnInit { console.log('Browser do not support Clipboard API'); } } - - toggleExpand(): void { - this.isExpanded = !this.isExpanded; - } - - checkContentHeight(): void { - const maxHeight = 195; // Altura máxima de la caja - if (this.elementContentToCopy.nativeElement.scrollHeight > maxHeight) { - this.showToggleButton = true; - } - } } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html index c16172a4028..ca17986d71f 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html @@ -1,14 +1,13 @@
-
+
-
- .{{ getFileExtension(file.name) }} +
+ {{ getFileExtension(file.name) }}
- {{ getFileDescription(file) }} - {{ (file?.sizeBytes) | dsFileSize }} -
+ {{ getFileDescription(file) }} +
@@ -16,11 +15,15 @@
-
+
- - SOY UNA IMAGEN +
+ {{ dsoNameService.getName(selectedFile) }} +
+ + SOY UNA IMAGEN {{ dsoNameService.getName(selectedFile) }} +
diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss index 43f30a82c8d..444d7dbc8b9 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss @@ -11,8 +11,12 @@ flex: 1; display: flex; flex-direction: column; - max-height: 500px; // Ajusta este valor según el tamaño del previsualizador - overflow-y: auto; // Agrega el scrollbar vertical si el contenido excede el tamaño + max-height: 500px; + overflow-y: auto; + + .row { + flex-wrap: nowrap; + } .file-item { display: flex; @@ -33,22 +37,20 @@ border-radius: 4px; .file-extension { - font-size: 10px; + font-size: .625rem; font-weight: bold; } } .file-info { - flex: 1; display: flex; flex-direction: column; .row { - display: flex; align-items: center; .file-name { - font-weight: bold; + font-size: .75rem; overflow: hidden; // Oculta el texto que se desborda text-overflow: ellipsis; // Agrega puntos suspensivos al texto que se desborda display: -webkit-box; // Necesario para line-clamp @@ -58,8 +60,8 @@ } .file-size { + font-size: .75rem; text-align: right; - font-size: 14px; } .download-btn { @@ -74,23 +76,18 @@ } } } - - .file-preview { - font-size: 12px; - color: #888; - margin-top: 5px; - } } } } .file-preview { - flex: 2; position: relative; + padding-right: 0px; + padding-left: 0px; .preview-image { width: 100%; - height: 500px; // Ajusta el tamaño según tus necesidades + height: 500px; } .no-preview { @@ -103,7 +100,7 @@ background-color: #f5f5f5; span { - font-size: 24px; + font-size: 1.5rem; color: #aaa; } } diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts index 214e2e483d6..a787b39c779 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts @@ -1,5 +1,5 @@ import { Component, Input, Inject } from '@angular/core'; -import { NgFor, NgIf } from '@angular/common'; +import { NgFor, NgIf, NgStyle } from '@angular/common'; import { Item } from 'src/app/core/shared/item.model'; import { BitstreamDataService } from 'src/app/core/data/bitstream-data.service'; import { APP_CONFIG, AppConfig } from 'src/config/app-config.interface'; @@ -16,6 +16,7 @@ import { SediciFileDownloadLinkComponent } from './sedici-file-download-link.com imports: [ NgFor, NgIf, + NgStyle, FileSizePipe, SediciFileDownloadLinkComponent, ], @@ -24,6 +25,7 @@ export class ContentFilesComponent { @Input() object: Item; primaryBitsreamId: string; + previewUrl: string; files: Bitstream[] = []; @@ -37,6 +39,7 @@ export class ContentFilesComponent { selectFile(file: Bitstream) { this.selectedFile = file; + this.previewUrl = file._links.content.href; // Solo para probar la vista de imágenes } getFileExtension(fileName: string): string { @@ -44,6 +47,31 @@ export class ContentFilesComponent { return parts.length > 1 ? parts.pop() : ''; } + stringToHexColor(str: string): string { + let hash = 0; + for (let i = 0; i < str.length; i++) { + hash += str.charCodeAt(i); + hash += (hash << 10); + hash ^= (hash >> 6); + } + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + + let color = '#'; + for (let i = 0; i < 3; i++) { + const value = (hash >> (i * 8)) & 0xFF; + color += ('00' + value.toString(16)).substr(-2); + } + return color; + } + + getBadgeStyle(fileName: string): { [key: string]: string } { + const extension = this.getFileExtension(fileName); + const color = this.stringToHexColor(extension); + return { 'background-color': color }; + } + isImage(file: Bitstream): boolean { const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']; const extension = this.getFileExtension(file.name).toLowerCase(); diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html index 58d441a78e6..a027e335ab7 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html @@ -1,17 +1,3 @@ - -
+ + + + + + + + + + + + + [label]="'Idioma del documento'"> - - + + + +
diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.ts index 582dc07efa6..032fd35fdfc 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.ts @@ -9,7 +9,7 @@ import { GenericItemPageFieldComponent } from 'src/app/item-page/simple/field-co import { SediciDateMetadataValuesComponent } from '../../field-components/date-metadata-values/sedici-date-metadata-values.component'; import { SediciLanguageMetadataValuesComponent } from '../../field-components/language-metadata-values/sedici-language-metadata-values.component'; import { CollectionsComponent } from 'src/app/item-page/field-components/collections/collections.component'; - +import { ItemPageIdentifierOtherFieldComponent } from '../../field-components/specific-field/identfier-other/item-page-identifier.other-field'; @Component({ selector: 'full-item', // styleUrls: ['./full-item.component.scss'], @@ -23,6 +23,7 @@ import { CollectionsComponent } from 'src/app/item-page/field-components/collect SediciDateMetadataValuesComponent, SediciLanguageMetadataValuesComponent, CollectionsComponent, + ItemPageIdentifierOtherFieldComponent, ], }) export class FullItemComponent { @@ -32,9 +33,4 @@ export class FullItemComponent { ngOnInit(): void { this.itemPageRoute = getItemPageRoute(this.object); } - - getMetadataEntries() { - const metadata = this.object.metadata; - return Object.keys(metadata).map(key => ({ key, value: metadata[key] })); - } } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html index 9e3708f95d4..88677339c83 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html @@ -1,13 +1,13 @@ - +
- +

diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.ts index 889fd9cadaa..e8b6e091b03 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.ts @@ -1,7 +1,6 @@ import { Component, Input } from '@angular/core'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; import { NgIf, NgFor } from '@angular/common'; -import { MetadataFieldWrapperComponent } from 'src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component'; import { TranslateModule } from '@ngx-translate/core'; import { TruncatableComponent } from 'src/app/shared/truncatable/truncatable.component'; import { TruncatablePartComponent } from 'src/app/shared/truncatable/truncatable-part/truncatable-part.component'; @@ -14,7 +13,6 @@ import { TruncatablePartComponent } from 'src/app/shared/truncatable/truncatable imports: [ NgIf, NgFor, - MetadataFieldWrapperComponent, TranslateModule, TruncatableComponent, TruncatablePartComponent, @@ -34,11 +32,15 @@ export class LanguageSwitcherComponent { getAbstract(): SafeHtml { const abstracts = this.item.metadata['dc.description.abstract']; - if (!abstracts) { - return this.sanitizer.bypassSecurityTrustHtml(''); + if (abstracts) { + let abstract = abstracts.find((abstract: any) => (abstract.language || 'es') === this.selectedLanguage)?.value || ''; + if (!abstract) { + abstract = abstracts[0].value; + this.selectedLanguage = abstracts[0].language; + } + return this.sanitizer.bypassSecurityTrustHtml(abstract); } - const abstract = abstracts.find((abstract: any) => (abstract.language || 'es') === this.selectedLanguage)?.value || ''; - return this.sanitizer.bypassSecurityTrustHtml(abstract); + return this.sanitizer.bypassSecurityTrustHtml(''); } changeLanguage(language: string) { @@ -47,9 +49,9 @@ export class LanguageSwitcherComponent { getAvailableLanguages() { const abstracts = this.item.metadata['dc.description.abstract']; - if (!abstracts) { - return []; + if (abstracts) { + return [...new Set(abstracts.map((abstract: any) => abstract.language))]; } - return [...new Set(abstracts.map((abstract: any) => abstract.language))]; + return []; } } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html index a3f6fd009d8..7c67b0a619a 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html @@ -1,5 +1,5 @@ - \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss index 999612ca708..cad1f3bf103 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss @@ -1,20 +1,16 @@ .download-btn { background-color: #fff; border: 1px solid #ccc; - padding: 3px 8px; // Reducir el padding para achicar el botón + padding: 3px 8px; cursor: pointer; border-radius: 4px; - font-size: 14px; // Reducir el tamaño de la letra + font-size: .625rem; &:hover { background-color: #e0e0e0; } .pr-1 { - padding-right: 5px; // Ajustar el padding del icono si es necesario - } - - i { - font-size: 12px; // Ajustar el tamaño del icono si es necesario - } + padding-right: 5px; + } } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts index af1ac0da3b0..ea01a8a110b 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts @@ -6,7 +6,9 @@ import { import { Component, OnInit } from '@angular/core'; import { RouterLink } from '@angular/router'; import { TranslateModule } from '@ngx-translate/core'; +import { FileSizePipe } from 'src/app/shared/utils/file-size-pipe'; import { FileDownloadLinkComponent } from 'src/app/shared/file-download-link/file-download-link.component'; +import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'ds-sedici-file-download-link', @@ -19,6 +21,8 @@ import { FileDownloadLinkComponent } from 'src/app/shared/file-download-link/fil NgIf, RouterLink, TranslateModule, + FileSizePipe, + NgbTooltipModule, ], }) export class SediciFileDownloadLinkComponent extends FileDownloadLinkComponent implements OnInit { diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.html new file mode 100644 index 00000000000..353251aa0ae --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.html @@ -0,0 +1,11 @@ + + + + +

+
+
+
+
diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.scss new file mode 100644 index 00000000000..10a43730a38 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.scss @@ -0,0 +1,4 @@ +.text { + white-space: pre-wrap; + text-align: justify; +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.ts new file mode 100644 index 00000000000..74956cb56f6 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.ts @@ -0,0 +1,54 @@ +import { Component, Input } from '@angular/core'; +import { Item } from 'src/app/core/shared/item.model'; +import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; +import { NgIf, NgFor } from '@angular/common'; +import { TranslateModule } from '@ngx-translate/core'; +import { MetadataFieldWrapperComponent } from 'src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component'; +import { TruncatableComponent } from 'src/app/shared/truncatable/truncatable.component'; +import { TruncatablePartComponent } from 'src/app/shared/truncatable/truncatable-part/truncatable-part.component'; + +@Component({ + selector: 'sedici-truncatable-generic-item-page-field', + styleUrls: ['./sedici-truncatable-generic-item-page-field.scss'], + templateUrl: './sedici-truncatable-generic-item-page-field.html', + standalone: true, + imports: [ + NgIf, + NgFor, + TranslateModule, + MetadataFieldWrapperComponent, + TruncatableComponent, + TruncatablePartComponent, + ], +}) +export class SediciTruncatableGenericItemPageFieldComponent { + @Input() item: Item; + @Input() fields: string[]; + @Input() label: string; + @Input() minLines: number = 4; + metadataTextValue: SafeHtml; + length: number = -1; + + constructor(private sanitizer: DomSanitizer) {} + + ngOnInit() { + this.metadataTextValue = this.getMetadataText(); + } + + getMetadataText(): SafeHtml { + let metadataArray: any[]; + metadataArray = this.item.allMetadata(this.fields); + let concat = ''; + metadataArray.forEach((metadata, index) => { + concat += metadata.value; + if (index < metadataArray.length - 1) { + concat += '\n'; + } + }); + if (concat.length > 0) { + this.length = concat.length; + return this.sanitizer.bypassSecurityTrustHtml(concat); + } + return this.sanitizer.bypassSecurityTrustHtml(''); + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html index 5de590c1eda..0072b639c4f 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html @@ -17,6 +17,9 @@
+ +
+
diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss index c47f37b0f5a..78e49946a0d 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss @@ -4,7 +4,6 @@ border: 1px solid #e0e0e0; border-radius: 4px; overflow: hidden; - font-family: 'Arial', sans-serif; } .tab-header { diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts index 9195bc401a3..2c438642cbb 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts @@ -4,11 +4,18 @@ import { Item } from 'src/app/core/shared/item.model'; import { ItemPageCcLicenseFieldComponent } from 'src/app/item-page/simple/field-components/specific-field/cc-license/item-page-cc-license-field.component'; import { FullItemComponent } from './full-item.component'; import { ContentFilesComponent } from './content-files.component'; +import { ApaCitationComponent } from './apa-citation.component'; @Component({ selector: 'ds-tabbed-content', standalone: true, - imports: [CommonModule, ItemPageCcLicenseFieldComponent, FullItemComponent, ContentFilesComponent], + imports: [ + CommonModule, + ItemPageCcLicenseFieldComponent, + FullItemComponent, + ContentFilesComponent, + ApaCitationComponent, + ], templateUrl: './tabbed-content.component.html', styleUrls: ['./tabbed-content.component.scss'] }) @@ -20,6 +27,7 @@ export class TabbedContentComponent { tabs = [ { label: 'Contenido' }, { label: 'Licencia' }, + { label: 'Cita' }, { label: 'Registro completo' } ]; diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index 60da797b752..ebbb606b1b1 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -1,73 +1,123 @@ -
-
-
-
-
-
- -
-

- - -

+ +
+
+
+
+
+
- -
-
-
+

- - + [fields]="['dc.title']"> - - -

+
-
- - + +
+
+

+ + +

+
+
+ + + + + + + + + + + + + + +
+ + [fields]="['dc.coverage.spatial']" + [label]="'Alcance geográfico'"> + [fields]="['dc.coverage.temporal']" + [label]="'Alcance temporal'"> + [fields]="['dc.coverage.spatial', 'dc.coverage.temporal']" + [separator]="', '"> + [fields]="['dc.coverage.spatial', 'dc.coverage.temporal']" + [separator]="', '" + [label]="'Alcance geográfico y temporal'"> +
+
- - + [fields]="['dc.subject']" + [separator]="'; '" + [label]="'item.page.subject'"> + +
+
+ + + + + + + + +
+
+
+ +
+
+
- - - - +
Información de la tesis
Información general
Información g [fields]="['thesis.degree.grantor']" [label]="'Institución otorgante'"> - -
Información general
- - + +
Información general
+ [fields]="['dc.title.alternative']" + [label]="'Título alternativo'"> + + - - - - - - - - - - - - - - - + [fields]="['dc.format.extent']" + [label]="'Páginas'"> + + + [fields]="['dc.audience']" + [label]="'Contexto de uso'"> + [fields]="['dc.publisher']" + [label]="subtype === ('Discurso' || 'Entrevista') ? 'Producción' : 'Editorial'"> - - - - @@ -186,90 +201,13 @@
- -
- - - - - - - - -
-
+
LA REFERENCIA -
+
+
-
- - - - - - - - \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss index 4421d20a190..5108aaaa558 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss @@ -6,18 +6,17 @@ .badge-title-content { display: flex; flex-direction: column; - - h4 { - font-size: 1.75rem; - color: #999; - margin-bottom: 0.5rem; - } + color: #999; } .edit-menu { margin-left: auto; } +.subtitle-container { + margin-top: 10px; +} + .subtitle-content { font-style: italic; color: #555; @@ -36,15 +35,11 @@ .item-identifiers { display: flex; flex-wrap: wrap; - gap: 0.2em; - - div { - display: inline-block; - padding-right: 0.2em; - } + gap: 0.2rem; } .reference-image { max-width: 100%; height: auto; + margin-bottom: 10px; } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts index f7bf1258b23..6243daf04a6 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts @@ -14,33 +14,13 @@ import { TranslateModule } from '@ngx-translate/core'; import { Context } from '../../../../../../../app/core/shared/context.model'; import { Item } from '../../../../../../../app/core/shared/item.model'; import { ViewMode } from '../../../../../../../app/core/shared/view-mode.model'; -import { CollectionsComponent } from '../../../../../../../app/item-page/field-components/collections/collections.component'; -import { ThemedMediaViewerComponent } from '../../../../../../../app/item-page/media-viewer/themed-media-viewer.component'; -import { MiradorViewerComponent } from '../../../../../../../app/item-page/mirador-viewer/mirador-viewer.component'; -import { ThemedFileSectionComponent } from '../../../../../../../app/item-page/simple/field-components/file-section/themed-file-section.component'; -import { ItemPageAbstractFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/abstract/item-page-abstract-field.component'; -import { ItemPageCcLicenseFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/cc-license/item-page-cc-license-field.component'; -import { ItemPageDateFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/date/item-page-date-field.component'; -import { ItemPageAuthorFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/author/item-page-author-field.component'; import { GenericItemPageFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/generic/generic-item-page-field.component'; -import { ThemedItemPageTitleFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/title/themed-item-page-field.component'; import { ItemPageUriFieldComponent } from '../../../../../../../app/item-page/simple/field-components/specific-field/uri/item-page-uri-field.component'; import { UntypedItemComponent as BaseComponent } from '../../../../../../../app/item-page/simple/item-types/untyped-item/untyped-item.component'; -import { ThemedMetadataRepresentationListComponent } from '../../../../../../../app/item-page/simple/metadata-representation-list/themed-metadata-representation-list.component'; import { DsoEditMenuComponent } from '../../../../../../../app/shared/dso-page/dso-edit-menu/dso-edit-menu.component'; -import { MetadataFieldWrapperComponent } from '../../../../../../../app/shared/metadata-field-wrapper/metadata-field-wrapper.component'; import { listableObjectComponent } from '../../../../../../../app/shared/object-collection/shared/listable-object/listable-object.decorator'; -import { ThemedResultsBackButtonComponent } from '../../../../../../../app/shared/results-back-button/themed-results-back-button.component'; -import { ThemedThumbnailComponent } from '../../../../../../../app/thumbnail/themed-thumbnail.component'; -import { MetadataValuesComponent } from 'src/app/item-page/field-components/metadata-values/metadata-values.component'; -import { MetadataRepresentationListComponent } from '../../metadata-representation-list/metadata-representation-list.component'; -import { FileSectionComponent } from '../../field-components/file-section/file-section.component'; -import { MediaViewerComponent } from '../../../media-viewer/media-viewer.component'; -import { ThumbnailComponent } from 'src/themes/custom/app/thumbnail/thumbnail.component'; -import { ResultsBackButtonComponent } from 'src/themes/custom/app/shared/results-back-button/results-back-button.component'; import { SediciContextBadgeComponent } from 'src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component'; import { LanguageSwitcherComponent } from './language-switcher.component'; -import { ApaCitationComponent } from './apa-citation.component'; import { MetadataValue } from 'src/app/core/shared/metadata.models'; import { BadgeMetadataValuesComponent } from '../../field-components/badge-metadata-values/badge-metadata-values.component'; import { TruncatableComponent } from 'src/app/shared/truncatable/truncatable.component'; @@ -48,6 +28,9 @@ import { TruncatablePartComponent } from 'src/app/shared/truncatable/truncatable import { TabbedContentComponent } from './tabbed-content.component'; import { SediciDateMetadataValuesComponent } from '../../field-components/date-metadata-values/sedici-date-metadata-values.component'; import { SediciLanguageMetadataValuesComponent } from '../../field-components/language-metadata-values/sedici-language-metadata-values.component'; +import { setPersistentIdentifiers } from 'src/app/shared/utils/persistent.identifier'; +import { SediciTruncatableGenericItemPageFieldComponent } from './sedici-truncatable-generic-item-page-field'; + /** * Component that represents an untyped Item page */ @@ -64,89 +47,32 @@ import { SediciLanguageMetadataValuesComponent } from '../../field-components/la NgIf, NgFor, NgStyle, - ThemedResultsBackButtonComponent, - MiradorViewerComponent, - ThemedItemPageTitleFieldComponent, DsoEditMenuComponent, - MetadataFieldWrapperComponent, - ThemedThumbnailComponent, - ThemedMediaViewerComponent, - ThemedFileSectionComponent, - ItemPageDateFieldComponent, - ThemedMetadataRepresentationListComponent, GenericItemPageFieldComponent, - ItemPageAbstractFieldComponent, ItemPageUriFieldComponent, - CollectionsComponent, RouterLink, AsyncPipe, TranslateModule, - ItemPageCcLicenseFieldComponent, - MetadataValuesComponent, - MetadataRepresentationListComponent, - FileSectionComponent, - MediaViewerComponent, - ThumbnailComponent, - ResultsBackButtonComponent, LanguageSwitcherComponent, - ItemPageAuthorFieldComponent, BadgeMetadataValuesComponent, TruncatableComponent, TruncatablePartComponent, - ApaCitationComponent, TabbedContentComponent, SediciDateMetadataValuesComponent, SediciLanguageMetadataValuesComponent, SediciContextBadgeComponent, + SediciTruncatableGenericItemPageFieldComponent, ], }) export class UntypedItemComponent extends BaseComponent { - hasMultipleLanguages: boolean; subtype; identifierOtherMetadataName = ['dc.identifier.uri', 'sedici.identifier.other']; - itemIdentifiers: { mdValue: MetadataValue, label: string }[]; + itemIdentifiers: { mdValue: MetadataValue, label: string, url: string }[]; ngOnInit() { super.ngOnInit(); const abstracts = this.object.metadata['dc.description.abstract']; - this.hasMultipleLanguages = abstracts && abstracts.length > 1; this.subtype = this.object.metadata['sedici.subtype'][0]?.value; - this.setIdentifierOtherValues(); - } - - setIdentifierOtherValues(): void { - this.itemIdentifiers = []; - const length = this.itemIdentifiers.push({ - mdValue: new MetadataValue(), - label: 'HDL' - }); - this.itemIdentifiers[length - 1].mdValue.value = this.object?.handle; - this.object.allMetadata(this.identifierOtherMetadataName).forEach( - (mdValue, index) => { - let charIndex = -1; - let label = ''; - if (mdValue.value.includes(this.object?.handle)) { - if (mdValue.value.includes('doi')) { - label = 'DOI'; - } else { - return; - } - } else { - if (!mdValue.value.startsWith('http')) { - const splitChar = mdValue.value.includes(':') ? ':' : ' '; - charIndex = mdValue.value.indexOf(splitChar); - label = mdValue.value.substring(0, charIndex).toUpperCase(); - } else { - label = 'URL'; - } - } - const value = mdValue.value.substring(charIndex + 1).trim(); - const identifierListLength = this.itemIdentifiers.push({ - mdValue: new MetadataValue(), - label: label - }); - this.itemIdentifiers[identifierListLength - 1].mdValue.value = value; - } - ); + this.itemIdentifiers = setPersistentIdentifiers(this.object, this.identifierOtherMetadataName); } } diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts index 24e0006b884..f0ceef75ff4 100644 --- a/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts +++ b/src/themes/custom/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component.ts @@ -2,9 +2,24 @@ import { AsyncPipe, NgIf, } from '@angular/common'; -import { Component } from '@angular/core'; +import { + Component, +} from '@angular/core'; import { TranslateModule } from '@ngx-translate/core'; +import { + of as observableOf, +} from 'rxjs'; +import { + catchError, + map, +} from 'rxjs/operators'; +import { environment } from 'src/environments/environment'; +import { Item } from 'src/app/core/shared/item.model'; +import { ITEM } from 'src/app/core/shared/item.resource-type'; +import { hasValue } from 'src/app/shared/empty.util'; +import { AccessStatusObject } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status.model'; import { AccessStatusBadgeComponent as BaseComponent } from 'src/app/shared/object-collection/shared/badges/access-status-badge/access-status-badge.component'; +import { RemoteData } from 'src/app/core/data/remote-data'; @Component({ selector: 'ds-themed-access-status-badge', @@ -15,4 +30,44 @@ import { AccessStatusBadgeComponent as BaseComponent } from 'src/app/shared/obje imports: [NgIf, AsyncPipe, TranslateModule], }) export class AccessStatusBadgeComponent extends BaseComponent { + + ngOnInit(): void { + this.showAccessStatus = environment.item.showAccessStatuses; + if (this.object.type.toString() !== ITEM.value || !this.showAccessStatus || this.object == null) { + // Do not show the badge if the feature is inactive or if the item is null. + return; + } + + const item = this.object as Item; + let accessStatus$; + + if (item.accessStatus == null) { + // In case the access status has not been loaded, do it individually. + accessStatus$ = this.accessStatusDataService.findAccessStatusFor(item); + } else { + accessStatus$ = item.accessStatus; + } + + this.accessStatus$ = accessStatus$.pipe( + map((accessStatusRD: RemoteData) => { + if (accessStatusRD.statusCode !== 401 && hasValue(accessStatusRD.payload)) { + return accessStatusRD.payload; + } else { + return []; + } + }), + map((accessStatus: AccessStatusObject) => hasValue(accessStatus.status) ? accessStatus.status : 'unknown'), + map((status: string) => `access-status.${status.toLowerCase()}.listelement.badge`), + catchError(() => observableOf('access-status.unknown.listelement.badge')), + ); + + // stylesheet based on the access status value + this.subs.push( + this.accessStatus$.pipe( + map((accessStatusClass: string) => accessStatusClass.replace(/\./g, '-')), + ).subscribe((accessStatusClass: string) => { + this.accessStatusClass = accessStatusClass; + }), + ); + } } diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss index b8cb48e7358..f0f3ec93a31 100644 --- a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss +++ b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss @@ -5,7 +5,7 @@ .context-info, .context-year { - font-size: 12px; + font-size: .75rem; position: relative; &:hover::after { content: ''; diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts index 6ba11b96d53..2b0a365519d 100644 --- a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts +++ b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts @@ -27,6 +27,20 @@ export class SediciContextBadgeComponent extends BaseComponent { } } + getBookInfo(): string { + const bookTitle = this.object.firstMetadataValue('sedici.relation.bookTitle'); + const isPartOf = this.object.firstMetadataValue('dc.relation.ispartof'); + + if (bookTitle && isPartOf) { + return `${bookTitle}; ${isPartOf}`; + } else if (bookTitle) { + return bookTitle; + } else if (isPartOf) { + return isPartOf; + } + return ''; + } + getJournalInfo(): string { const journalTitle = this.object.firstMetadataValue('sedici.relation.journalTitle'); const journalVolumeAndIssue = this.object.firstMetadataValue('sedici.relation.journalVolumeAndIssue'); @@ -35,35 +49,45 @@ export class SediciContextBadgeComponent extends BaseComponent { return `${journalTitle}; ${journalVolumeAndIssue}`; } else if (journalTitle) { return journalTitle; - } else { - return ''; } + return ''; } - getOriginInfoPlace(): string { - let place = this.object.firstMetadataValue('mods.originInfo.place'); - if (!place) { - return ''; + getEventInfo(): string { + const event = this.object.firstMetadataValue('sedici.relation.event'); + if (event) { + return event; } - return place; + return ''; } - getEventInfo(): string { - let event = this.object.firstMetadataValue('sedici.relation.event'); - if (!event) { - return ''; + getCicloInfo(): string { + const ciclo = this.object.firstMetadataValue('sedici.relation.ciclo'); + if (ciclo) { + return ciclo; + } + return ''; + } + + getOriginInfoPlace(): string { + let originInfo = this.object.firstMetadataValue('mods.originInfo.place'); + if (originInfo) { + return originInfo; } - return event; + return ''; } getContextInfo(): string { - let thesis = this.getThesisInfo(); - let journal = this.getJournalInfo(); - let event = this.getEventInfo(); - let origin = this.getOriginInfoPlace(); + const thesis = this.getThesisInfo(); if (thesis) { return thesis; }; + const bookTitle = this.getBookInfo(); + if (bookTitle) { + return bookTitle; + }; + const journal = this.getJournalInfo(); + const event = this.getEventInfo(); if (journal || event) { if (journal && event) { return `${journal} | ${event}`; @@ -73,14 +97,22 @@ export class SediciContextBadgeComponent extends BaseComponent { return event; }; }; - return origin; + const ciclo = this.getCicloInfo(); + if (ciclo) { + return ciclo; + }; + const originInfo = this.getOriginInfoPlace(); + if (originInfo) { + return originInfo; + }; + return ''; } getYear(): string { - let dateString = this.object.firstMetadataValue('dc.date.issued') || this.object.firstMetadataValue('dc.date.created'); - if (!dateString) { - return ''; + let dateString = this.object.firstMetadataValue('dc.date.issued') || this.object.firstMetadataValue('dc.date.created') || this.object.firstMetadataValue('sedici.date.exposure'); + if (dateString) { + return dateString.split('-')[0]; } - return dateString.split('-')[0]; + return ''; } } From e34b533862a79d230b63710ddd5fdc97f00e3495 Mon Sep 17 00:00:00 2001 From: Rafael Bertoli Date: Thu, 3 Oct 2024 12:08:41 -0300 Subject: [PATCH 03/46] Cambios en el home, header y footer --- angular.json | 5 +- package.json | 5 +- src/assets/i18n/en.json5 | 2 +- src/assets/i18n/pt-BR.json5 | 4 +- src/config/app-config.interface.ts | 1 + src/config/default-app-config.ts | 17 + src/styles/_global-styles.scss | 2 +- .../custom/app/footer/footer.component.html | 40 ++ .../custom/app/footer/footer.component.scss | 97 ++++ .../custom/app/footer/footer.component.ts | 8 +- .../header-navbar-wrapper.component.html | 4 + .../header-navbar-wrapper.component.ts | 4 +- .../custom/app/header/header.component.html | 45 ++ .../custom/app/header/header.component.scss | 46 ++ .../custom/app/header/header.component.ts | 14 +- .../home-news/home-news.component.html | 59 +++ .../home-news/home-news.component.scss | 123 +++++ .../home-news/home-news.component.ts | 12 +- .../app/home-page/home-page.component.html | 72 +++ .../app/home-page/home-page.component.scss | 95 ++++ .../app/home-page/home-page.component.ts | 154 +++++- .../home-slider.component.html | 44 ++ .../home-slider.component.scss | 86 ++++ .../home-slider.component.ts | 81 ++++ .../auth-nav-menu.component.html | 50 ++ .../auth-nav-menu.component.scss | 35 ++ .../auth-nav-menu/auth-nav-menu.component.ts | 8 +- .../lang-switch/lang-switch.component.html | 21 + .../lang-switch/lang-switch.component.scss | 36 ++ .../lang-switch/lang-switch.component.ts | 8 +- .../search-form/search-form.component.html | 19 + .../search-form/search-form.component.scss | 47 ++ .../search-form/search-form.component.ts | 8 +- .../custom/assets/images/SEDICI_2024.svg | 91 ++++ src/themes/custom/assets/images/autores.png | Bin 0 -> 1141 bytes src/themes/custom/assets/images/datos.png | Bin 0 -> 1775 bytes src/themes/custom/assets/images/eventos.png | Bin 0 -> 2181 bytes src/themes/custom/assets/images/fondo.avif | Bin 0 -> 4338 bytes src/themes/custom/assets/images/libros2.png | Bin 0 -> 3707 bytes .../custom/assets/images/publicaciones.png | Bin 0 -> 934 bytes src/themes/custom/assets/images/revistas.png | Bin 0 -> 1941 bytes .../assets/images/unidades_academicas.png | Bin 0 -> 1208 bytes src/themes/custom/assets/images/unlp.svg | 441 ++++++++++++++++++ 43 files changed, 1742 insertions(+), 42 deletions(-) create mode 100644 src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.html create mode 100644 src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.scss create mode 100644 src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.ts create mode 100644 src/themes/custom/assets/images/SEDICI_2024.svg create mode 100644 src/themes/custom/assets/images/autores.png create mode 100644 src/themes/custom/assets/images/datos.png create mode 100644 src/themes/custom/assets/images/eventos.png create mode 100644 src/themes/custom/assets/images/fondo.avif create mode 100644 src/themes/custom/assets/images/libros2.png create mode 100644 src/themes/custom/assets/images/publicaciones.png create mode 100644 src/themes/custom/assets/images/revistas.png create mode 100644 src/themes/custom/assets/images/unidades_academicas.png create mode 100644 src/themes/custom/assets/images/unlp.svg diff --git a/angular.json b/angular.json index 5f0204249b1..d37f08abba9 100644 --- a/angular.json +++ b/angular.json @@ -61,7 +61,10 @@ "bundleName": "dspace-theme" } ], - "scripts": [], + "scripts": [ + "node_modules/jquery/dist/jquery.min.js", + "node_modules/bootstrap/dist/js/bootstrap.min.js" + ], "baseHref": "/" }, "configurations": { diff --git a/package.json b/package.json index 36792085165..9365aba71c6 100644 --- a/package.json +++ b/package.json @@ -107,6 +107,7 @@ "http-proxy-middleware": "^1.0.5", "http-terminator": "^3.2.0", "isbot": "^3.6.10", + "jquery": "^3.7.1", "js-cookie": "2.2.1", "js-yaml": "^4.1.0", "json5": "^2.2.3", @@ -176,8 +177,8 @@ "deep-freeze": "0.0.1", "eslint": "^8.39.0", "eslint-plugin-deprecation": "^1.4.1", - "eslint-plugin-dspace-angular-html": "link:./lint/dist/src/rules/html", - "eslint-plugin-dspace-angular-ts": "link:./lint/dist/src/rules/ts", + "eslint-plugin-dspace-angular-html": "file:./lint/dist/src/rules/html", + "eslint-plugin-dspace-angular-ts": "file:./lint/dist/src/rules/ts", "eslint-plugin-import": "^2.27.5", "eslint-plugin-import-newlines": "^1.3.1", "eslint-plugin-jsdoc": "^45.0.0", diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 8228f0e45be..6a55c03dfe2 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -1896,7 +1896,7 @@ "file-section.error.header": "Error obtaining files for this item", - "footer.copyright": "copyright © 2002-{{ year }}", + "footer.copyright": "copyright © 2003-{{ year }}", "footer.link.dspace": "DSpace software", diff --git a/src/assets/i18n/pt-BR.json5 b/src/assets/i18n/pt-BR.json5 index c3b26a09d28..264a69c0f7a 100644 --- a/src/assets/i18n/pt-BR.json5 +++ b/src/assets/i18n/pt-BR.json5 @@ -2840,8 +2840,8 @@ // "file-section.error.header": "Error obtaining files for this item", "file-section.error.header": "Erro obtendo arquivos para este item", - // "footer.copyright": "copyright © 2002-{{ year }}", - "footer.copyright": "copyright © 2002-{{ year }}", + // "footer.copyright": "copyright © 2003-{{ year }}", + "footer.copyright": "copyright © 2003-{{ year }}", // "footer.link.dspace": "DSpace software", "footer.link.dspace": "DSpace software", diff --git a/src/config/app-config.interface.ts b/src/config/app-config.interface.ts index 9a4d56bee0f..f1fe550d6cf 100644 --- a/src/config/app-config.interface.ts +++ b/src/config/app-config.interface.ts @@ -63,6 +63,7 @@ interface AppConfig extends Config { qualityAssuranceConfig: QualityAssuranceConfig; search: SearchConfig; notifyMetrics: AdminNotifyMetricsRow[]; + highlightCollections: { id: string, type: string }[]; } /** diff --git a/src/config/default-app-config.ts b/src/config/default-app-config.ts index 3682d095cdd..f6ea4f44095 100644 --- a/src/config/default-app-config.ts +++ b/src/config/default-app-config.ts @@ -591,4 +591,21 @@ export class DefaultAppConfig implements AppConfig { ], }, ]; + + highlightCollections = [ + { id: "3ea6678e-f073-4ecc-9b58-857824b9102f", type: "com" }, + { id: "c080da2b-38b4-4238-971d-d68498f1ddb1", type: "com" }, + { id: "ca781749-741d-49e7-9465-1a0000feb78a", type: "com" }, + { id: "c080da2b-38b4-4238-971d-d68498f1ddb1", type: "com" }, + { id: "d07ae08a-2831-4235-8931-5afbf4daa9c8", type: "com" }, + { id: "c080da2b-38b4-4238-971d-d68498f1ddb1", type: "com" }, + { id: "ca781749-741d-49e7-9465-1a0000feb78a", type: "com" }, + { id: "c080da2b-38b4-4238-971d-d68498f1ddb1", type: "com" }, + { id: "3ea6678e-f073-4ecc-9b58-857824b9102f", type: "com" }, + { id: "c080da2b-38b4-4238-971d-d68498f1ddb1", type: "com" }, + { id: "c080da2b-38b4-4238-971d-d68498f1ddb1", type: "com" }, + { id: "ca781749-741d-49e7-9465-1a0000feb78a", type: "com" }, + { id: "a2d47058-1d76-4530-b1ff-461ec6ce94b5", type: "col" } + ] + } diff --git a/src/styles/_global-styles.scss b/src/styles/_global-styles.scss index 765b50ae866..147bea3e6e4 100644 --- a/src/styles/_global-styles.scss +++ b/src/styles/_global-styles.scss @@ -462,7 +462,7 @@ ngb-accordion { // Margin utility classes based on DSpace content spacing .mt-cs { margin-top: var(--ds-content-spacing); } .mb-cs { margin-bottom: var(--ds-content-spacing); } -.my-cs { margin-top: var(--ds-content-spacing); margin-bottom: var(--ds-content-spacing); } +.my-cs { margin-top: var(--ds-content-spacing); /*margin-bottom: var(--ds-content-spacing);*/ } .mt-ncs { margin-top: calc(var(--ds-content-spacing) * -1); } .mb-ncs { margin-bottom: calc(var(--ds-content-spacing) * -1); } .my-ncs { margin-top: calc(var(--ds-content-spacing) * -1); margin-bottom: calc(var(--ds-content-spacing) * -1); } diff --git a/src/themes/custom/app/footer/footer.component.html b/src/themes/custom/app/footer/footer.component.html index e69de29bb2d..8a044e19d1b 100644 --- a/src/themes/custom/app/footer/footer.component.html +++ b/src/themes/custom/app/footer/footer.component.html @@ -0,0 +1,40 @@ + diff --git a/src/themes/custom/app/footer/footer.component.scss b/src/themes/custom/app/footer/footer.component.scss index e69de29bb2d..931269f263e 100644 --- a/src/themes/custom/app/footer/footer.component.scss +++ b/src/themes/custom/app/footer/footer.component.scss @@ -0,0 +1,97 @@ +:host { + footer { + background-color: #000000; + padding: var(--ds-footer-padding); + z-index: var(--ds-footer-z-index); + border-top: var(--ds-footer-border); + padding-top: 1%; + padding-right: 2%; + + p { + margin: 0; + } + + .bottom-footer { + display: flex; + justify-content: space-between; + //align-items: center; + + .footer-left { + flex: 1; + text-align: left; + flex-direction: column; + + .footer-title { + font-size: 1.3rem; + margin-bottom: 5px; + } + + .footer-text { + font-size: 1rem; + margin: 0; + } + + } + + .footer-left img{ + padding: 20px 0px; + height: 150px; + } + + .footer-divider { + width: 1px; /* Ancho de la franja */ + background-color: #fff; /* Color de la franja */ + align-self: stretch; /* Alinea la franja para que ocupe toda la altura disponible */ + margin: 0 20px; /* Espacio alrededor de la franja */ + } + + .footer-right { + flex: 2; + display: flex; + justify-content: space-between; + text-align: left; + + .footer-icons { + display: flex; + flex-direction: column; + align-items: center; + margin-left: 1%; + } + + .footer-icons i { + font-size: 3rem; /* Mantiene la proporción de la imagen */ + margin-bottom: 15px; /* Espacio entre las imágenes */ + } + + .footer-icons a { + color: inherit; /* Hereda el color del elemento padre */ + text-decoration: none; /* Elimina el subrayado predeterminado */ + } + + .footer-section { + margin-left: 10px; + + .footer-subtitle { + font-size: 1.2rem; + text-decoration: underline; + text-underline-offset: 5px; + text-decoration-thickness: 2px; + margin-bottom: 10px; + } + + a { + display: block; + color: #fff; + text-decoration: none; + margin-bottom: 5px; + } + + a:hover { + text-decoration: underline; + } + } + } + } + } +} + diff --git a/src/themes/custom/app/footer/footer.component.ts b/src/themes/custom/app/footer/footer.component.ts index a2e782a0db6..a4fb5d40611 100644 --- a/src/themes/custom/app/footer/footer.component.ts +++ b/src/themes/custom/app/footer/footer.component.ts @@ -11,10 +11,10 @@ import { FooterComponent as BaseComponent } from '../../../../app/footer/footer. @Component({ selector: 'ds-themed-footer', - // styleUrls: ['./footer.component.scss'], - styleUrls: ['../../../../app/footer/footer.component.scss'], - // templateUrl: './footer.component.html' - templateUrl: '../../../../app/footer/footer.component.html', + styleUrls: ['./footer.component.scss'], + // styleUrls: ['../../../../app/footer/footer.component.scss'], + templateUrl: './footer.component.html', + // templateUrl: '../../../../app/footer/footer.component.html', standalone: true, imports: [NgIf, RouterLink, AsyncPipe, DatePipe, TranslateModule], }) diff --git a/src/themes/custom/app/header-nav-wrapper/header-navbar-wrapper.component.html b/src/themes/custom/app/header-nav-wrapper/header-navbar-wrapper.component.html index e69de29bb2d..70e0702487b 100644 --- a/src/themes/custom/app/header-nav-wrapper/header-navbar-wrapper.component.html +++ b/src/themes/custom/app/header-nav-wrapper/header-navbar-wrapper.component.html @@ -0,0 +1,4 @@ +
+ + +
diff --git a/src/themes/custom/app/header-nav-wrapper/header-navbar-wrapper.component.ts b/src/themes/custom/app/header-nav-wrapper/header-navbar-wrapper.component.ts index ac1ac94140f..a28ccb36993 100644 --- a/src/themes/custom/app/header-nav-wrapper/header-navbar-wrapper.component.ts +++ b/src/themes/custom/app/header-nav-wrapper/header-navbar-wrapper.component.ts @@ -15,8 +15,8 @@ import { ThemedNavbarComponent } from '../../../../app/navbar/themed-navbar.comp selector: 'ds-themed-header-navbar-wrapper', // styleUrls: ['./header-navbar-wrapper.component.scss'], styleUrls: ['../../../../app/header-nav-wrapper/header-navbar-wrapper.component.scss'], - // templateUrl: './header-navbar-wrapper.component.html', - templateUrl: '../../../../app/header-nav-wrapper/header-navbar-wrapper.component.html', + templateUrl: './header-navbar-wrapper.component.html', + // templateUrl: '../../../../app/header-nav-wrapper/header-navbar-wrapper.component.html', standalone: true, imports: [NgClass, ThemedHeaderComponent, ThemedNavbarComponent, AsyncPipe], }) diff --git a/src/themes/custom/app/header/header.component.html b/src/themes/custom/app/header/header.component.html index e69de29bb2d..d765ab543cd 100644 --- a/src/themes/custom/app/header/header.component.html +++ b/src/themes/custom/app/header/header.component.html @@ -0,0 +1,45 @@ +
+
+ + + + + +
+
+ diff --git a/src/themes/custom/app/header/header.component.scss b/src/themes/custom/app/header/header.component.scss index e69de29bb2d..dd3bbd310d0 100644 --- a/src/themes/custom/app/header/header.component.scss +++ b/src/themes/custom/app/header/header.component.scss @@ -0,0 +1,46 @@ +:host { + header { + background-color: var(--ds-header-bg); + } + + .navbar-brand img { + max-height: var(--ds-header-logo-height); + //max-width: 100%; + } + + .navbar-toggler { + border: none; + color: var(--ds-header-icon-color); + + &:hover, &:focus { + color: var(--ds-header-icon-color-hover); + } + + .toggler-icon { + width: 1.5em; + height: 1.5em; + line-height: 1.5; + } + } + + .navbar { + display: flex; + flex-grow: 1; + gap: 4%; + align-items: center; + margin-right: 20px; + } + + .botones-header{ + //padding-right: 13%; + display: flex; + flex-direction: row; + + .btn{ + white-space: nowrap; /* Asegura que el texto no se envuelva */ + width: auto; /* Asegura que el botón se ajuste al contenido */ + } + } + + +} diff --git a/src/themes/custom/app/header/header.component.ts b/src/themes/custom/app/header/header.component.ts index f6ae52de4ff..279b6fc852c 100644 --- a/src/themes/custom/app/header/header.component.ts +++ b/src/themes/custom/app/header/header.component.ts @@ -2,7 +2,7 @@ import { AsyncPipe, NgIf, } from '@angular/common'; -import { Component } from '@angular/core'; +import { Component, NgModule } from '@angular/core'; import { RouterLink } from '@angular/router'; import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; @@ -13,18 +13,20 @@ import { HeaderComponent as BaseComponent } from '../../../../app/header/header. import { ThemedSearchNavbarComponent } from '../../../../app/search-navbar/themed-search-navbar.component'; import { ThemedAuthNavMenuComponent } from '../../../../app/shared/auth-nav-menu/themed-auth-nav-menu.component'; import { ImpersonateNavbarComponent } from '../../../../app/shared/impersonate-navbar/impersonate-navbar.component'; +import { ThemedNavbarComponent } from '../../../../app/navbar/themed-navbar.component'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; /** * Represents the header with the logo and simple navigation */ @Component({ selector: 'ds-themed-header', - // styleUrls: ['header.component.scss'], - styleUrls: ['../../../../app/header/header.component.scss'], - // templateUrl: 'header.component.html', - templateUrl: '../../../../app/header/header.component.html', + styleUrls: ['header.component.scss'], + // styleUrls: ['../../../../app/header/header.component.scss'], + templateUrl: 'header.component.html', + // templateUrl: '../../../../app/header/header.component.html', standalone: true, - imports: [RouterLink, ThemedLangSwitchComponent, NgbDropdownModule, ThemedSearchNavbarComponent, ContextHelpToggleComponent, ThemedAuthNavMenuComponent, ImpersonateNavbarComponent, TranslateModule, AsyncPipe, NgIf], + imports: [RouterLink, ThemedLangSwitchComponent, NgbDropdownModule, ThemedSearchNavbarComponent, ThemedNavbarComponent, ContextHelpToggleComponent, ThemedAuthNavMenuComponent, ImpersonateNavbarComponent, TranslateModule, AsyncPipe, NgIf, NgbModule], }) export class HeaderComponent extends BaseComponent { } diff --git a/src/themes/custom/app/home-page/home-news/home-news.component.html b/src/themes/custom/app/home-page/home-news/home-news.component.html index e69de29bb2d..338d89224a4 100644 --- a/src/themes/custom/app/home-page/home-news/home-news.component.html +++ b/src/themes/custom/app/home-page/home-news/home-news.component.html @@ -0,0 +1,59 @@ +
+
+
+
+ +
+
+
+ UNLP +
+ El Servicio de Difusión de la Creación Intelectual es el Repositorio Institucional de la Universidad Nacional de La Plata, un servicio libre y gratuito creado para albergar, preservar y dar visibilidad a las producciones de las Unidades Académicas de la Universidad +
+ +
+
+
+
+
+ UNLP +
+
+

Autores

+

Profesores, investigadores, estudiantes u otros colaboradores

+
+
+
+
+ UNLP +
+
+

Publicaciones

+

Revistas, libras, informes tecincos, trabajos de conferencias, tesis ...

+
+
+
+
+ UNLP +
+
+

Unidades Academicas

+

Facultades, colegios, laboratorios, institutos, centros, unidades academicas ...

+
+
+
+
+ UNLP +
+
+

Datos

+

Conjuntos de datos recopilados, resultados de encuestas ...

+
+
+
+ + + +
diff --git a/src/themes/custom/app/home-page/home-news/home-news.component.scss b/src/themes/custom/app/home-page/home-news/home-news.component.scss index e69de29bb2d..a5769cd37a1 100644 --- a/src/themes/custom/app/home-page/home-news/home-news.component.scss +++ b/src/themes/custom/app/home-page/home-news/home-news.component.scss @@ -0,0 +1,123 @@ +:host { + display: block; + + div.background-image-container { + color: white; + position: relative; + + .background-image > img { + background-color: var(--bs-info); + position: absolute; + z-index: -1; + top: 0; + left: 0; + width: 100%; + height: 100%; + object-fit: cover; + object-position: top; + } + + .container { + position: relative; + text-shadow: 1px 1px 4px rgba(0, 0, 0, 0.6); + + &:before, &:after { + content: ''; + display: block; + width: var(--ds-banner-background-gradient-width); + height: 100%; + top: 0; + position: absolute; + } + + &:before { + background: linear-gradient(to left, var(--ds-banner-text-background), transparent); + left: calc(-1 * var(--ds-banner-background-gradient-width)); + + } + + &:after { + background: linear-gradient(to right, var(--ds-banner-text-background), transparent); + right: calc(-1 * var(--ds-banner-background-gradient-width)); + } + + background-color: var(--ds-banner-text-background); + } + + + small.credits { + a { + color: inherit; + } + + opacity: 0.3; + position: absolute; + right: var(--bs-spacer); + bottom: 0; + } + } + + .sedici-description { + display: flex; + align-items: center; + font-size: 21px; + padding-bottom: 18px; + justify-content: space-between; // Asegura que el contenido esté distribuido adecuadamente + } + + .logo-container { + display: flex; + align-items: center; // Centra verticalmente la imagen y el texto + width: 25%; + } + + .jumbotron { + background-color: transparent; + padding-bottom: 20px; + margin-bottom: 0px; + } + + a { + color: var(--ds-home-news-link-color); + + @include hover { + color: var(--ds-home-news-link-hover-color); + } + } + + .horizontal-sections { + display: flex; + justify-content: space-between; /* Espacio igual entre las secciones */ + text-align: left; /* Centra el texto dentro de cada sección */ + + .section { + flex: 1; /* Cada sección ocupa la misma cantidad de espacio */ + padding: 10px; /* Espaciado interno */ + margin: 0 10px; /* Espaciado entre las secciones */ + display: flex; + + h3 { + margin-bottom: 10px; /* Espacio debajo del título */ + font-size: 1.5rem; /* Tamaño del título */ + } + + p { + font-size: 1rem; /* Tamaño del texto pequeño */ + } + + .img-container { + margin-right: 10px; // Espacio entre la imagen y el texto + } + + } + + .section:first-child { + margin-left: 25px; /* Elimina el margen izquierdo del primer elemento */ + } + + .section:last-child { + margin-right: 15px; /* Elimina el margen derecho del último elemento */ + } + } + +} diff --git a/src/themes/custom/app/home-page/home-news/home-news.component.ts b/src/themes/custom/app/home-page/home-news/home-news.component.ts index 9827589e8b9..c428210d1f8 100644 --- a/src/themes/custom/app/home-page/home-news/home-news.component.ts +++ b/src/themes/custom/app/home-page/home-news/home-news.component.ts @@ -1,13 +1,17 @@ import { Component } from '@angular/core'; import { HomeNewsComponent as BaseComponent } from '../../../../../app/home-page/home-news/home-news.component'; +import { SearchFormComponent } from '../../shared/search-form/search-form.component'; @Component({ selector: 'ds-themed-home-news', - // styleUrls: ['./home-news.component.scss'], - styleUrls: ['../../../../../app/home-page/home-news/home-news.component.scss'], - // templateUrl: './home-news.component.html' - templateUrl: '../../../../../app/home-page/home-news/home-news.component.html', + styleUrls: ['./home-news.component.scss'], + //styleUrls: ['../../../../../app/home-page/home-news/home-news.component.scss'], + templateUrl: './home-news.component.html', + //templateUrl: '../../../../../app/home-page/home-news/home-news.component.html', + imports:[ + SearchFormComponent, + ], standalone: true, }) diff --git a/src/themes/custom/app/home-page/home-page.component.html b/src/themes/custom/app/home-page/home-page.component.html index e69de29bb2d..62fcc63d34c 100644 --- a/src/themes/custom/app/home-page/home-page.component.html +++ b/src/themes/custom/app/home-page/home-page.component.html @@ -0,0 +1,72 @@ + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+
+ +
Ayuda para investigadores
+
+
+ +
Obligación de depósito en el repositorio
+
+
+ +
Estadísticas de crecimiento
+
+
+ +
+
+
+

Aliados

+
+
+
+ SNRD Logo + La Referencia Logo + COAR Logo +
+
diff --git a/src/themes/custom/app/home-page/home-page.component.scss b/src/themes/custom/app/home-page/home-page.component.scss index e69de29bb2d..8bf68bffcc5 100644 --- a/src/themes/custom/app/home-page/home-page.component.scss +++ b/src/themes/custom/app/home-page/home-page.component.scss @@ -0,0 +1,95 @@ +.main-title { + position: relative; + text-align: center; + color: #666; /* Color grisáceo */ + margin: 20px 0; /* Espacio arriba y abajo del título */ +} + +.destacado { + display: flex; + justify-content: space-around; /* Espacio igual entre las secciones */ + align-items: center; /* Centra verticalmente las secciones */ + flex-wrap: wrap; /* Permite que las secciones se ajusten si no caben en una fila */ + text-align: center; /* Centra el texto dentro de cada sección */ + + .section { + flex: 1 1 20%; /* Ajusta la flexibilidad de las secciones */ + padding: 10px; /* Espaciado interno */ + margin: 10px; /* Espaciado entre las secciones */ + display: flex; + align-items: center; /* Centra verticalmente la imagen y el texto */ + flex-direction: column; + + img { + width: 120px; /* Anchura de la imagen */ + height: 120px; /* Altura de la imagen */ + margin-bottom: 10px; /* Espacio entre la imagen y el texto */ + } + + .text-container { + display: flex; + flex-direction: column; + align-items: center; /* Centra el texto horizontalmente */ + } + + h4 { + margin-bottom: 10px; /* Espacio debajo del título */ + font-size: 1.1rem; /* Tamaño del título */ + } + + p { + font-size: 1rem; /* Tamaño del texto pequeño */ + } + } + +} + +.help { + margin-top: 20px; + padding: 20px 10%; + height: 300px; + background-color: #cecece; /* Color de fondo similar al de la imagen */ + + i{ + font-size: 9rem; + color:#777777; + margin-bottom: 4.5%; + } +} + +h5 { + font-weight: normal; + color: #6c757d; /* Color del texto similar al gris de la imagen */ +} + +.aliados-section { + display: flex; + justify-content: space-between; + align-items: center; + height: 300px; + + .aliados-title { + flex: 1; + text-align: right; + background: linear-gradient(to left, #d1d1d1, #f7f7f7 2%,#fdfdfd 5%); + height: 100%; + padding-right: 2%; + + h2 { + font-size: 2rem; + color: #777; /* Ajusta el color según tu diseño */ + } + } + + .aliados-logos { + flex: 3; + display: flex; + justify-content: space-around; + align-items: center; + + img { + max-width: 150px; /* Ajusta el tamaño de las imágenes */ + margin: 0 10px; + } + } +} diff --git a/src/themes/custom/app/home-page/home-page.component.ts b/src/themes/custom/app/home-page/home-page.component.ts index 2b45f697544..5135f0f635c 100644 --- a/src/themes/custom/app/home-page/home-page.component.ts +++ b/src/themes/custom/app/home-page/home-page.component.ts @@ -1,11 +1,24 @@ +import { CollectionDataService } from './../../../../app/core/data/collection-data.service'; +import { CommunityDataService } from './../../../../app/core/data/community-data.service'; import { AsyncPipe, NgClass, NgIf, NgTemplateOutlet, } from '@angular/common'; -import { Component } from '@angular/core'; +import { + Component, + Inject, + ChangeDetectorRef, +} from '@angular/core'; import { TranslateModule } from '@ngx-translate/core'; +import { Observable } from 'rxjs'; +import { + filter, + map, + mergeMap, +} from 'rxjs/operators'; +import { RemoteData } from 'src/app/core/data/remote-data'; import { HomeCoarComponent } from '../../../../app/home-page/home-coar/home-coar.component'; import { ThemedHomeNewsComponent } from '../../../../app/home-page/home-news/themed-home-news.component'; @@ -17,16 +30,143 @@ import { ThemedConfigurationSearchPageComponent } from '../../../../app/search-p import { ThemedSearchFormComponent } from '../../../../app/shared/search-form/themed-search-form.component'; import { PageWithSidebarComponent } from '../../../../app/shared/sidebar/page-with-sidebar.component'; import { ViewTrackerComponent } from '../../../../app/statistics/angulartics/dspace/view-tracker.component'; - +import { HomeSliderComponent, SliderItem, SliderItem2 } from './sedici-home-slider/home-slider.component'; +import { + APP_CONFIG, + AppConfig, +} from 'src/config/app-config.interface'; +import { ActivatedRoute } from '@angular/router'; +import { getFirstSucceededRemoteDataPayload } from 'src/app/core/shared/operators'; +import { getAllSucceededRemoteDataPayload } from 'src/app/core/shared/operators'; +import { Community } from 'src/app/core/shared/community.model'; +import { ComcolPageLogoComponent } from 'src/app/shared/comcol/comcol-page-logo/comcol-page-logo.component'; +import { Bitstream } from 'src/app/core/shared/bitstream.model'; +import { Collection } from 'src/app/core/shared/collection.model'; +import { hasValue } from 'src/app/shared/empty.util'; +import { FollowLinkConfig, followLink } from 'src/app/shared/utils/follow-link-config.model'; +import { DSpaceObject } from 'src/app/core/shared/dspace-object.model'; +import { COMMUNITY_PAGE_LINKS_TO_FOLLOW } from 'src/app/community-page/community-page.resolver'; @Component({ selector: 'ds-themed-home-page', - // styleUrls: ['./home-page.component.scss'], - styleUrls: ['../../../../app/home-page/home-page.component.scss'], - // templateUrl: './home-page.component.html' - templateUrl: '../../../../app/home-page/home-page.component.html', + styleUrls: ['./home-page.component.scss'], + // styleUrls: ['../../../../app/home-page/home-page.component.scss'], + templateUrl: './home-page.component.html', + // templateUrl: '../../../../app/home-page/home-page.component.html', standalone: true, - imports: [ThemedHomeNewsComponent, NgTemplateOutlet, NgIf, ViewTrackerComponent, ThemedSearchFormComponent, ThemedTopLevelCommunityListComponent, RecentItemListComponent, AsyncPipe, TranslateModule, NgClass, SuggestionsPopupComponent, ThemedConfigurationSearchPageComponent, PageWithSidebarComponent, HomeCoarComponent], + imports: [ThemedHomeNewsComponent, ComcolPageLogoComponent, NgTemplateOutlet, NgIf, ViewTrackerComponent, ThemedSearchFormComponent, ThemedTopLevelCommunityListComponent, RecentItemListComponent, AsyncPipe, TranslateModule, NgClass, SuggestionsPopupComponent, ThemedConfigurationSearchPageComponent, PageWithSidebarComponent, HomeCoarComponent, HomeSliderComponent], }) export class HomePageComponent extends BaseComponent { + aux = 0; + numCollection = this.appConfig.highlightCollections.length; + highlightCollections: any; + collectionName: String; + logo: Bitstream; + logoRD$: Observable>; + communityRD$: Observable>; + collectionRD$: Observable>; + //linksToFollow: FollowLinkConfig[] = COMMUNITY_PAGE_LINKS_TO_FOLLOW as FollowLinkConfig[]; + comlinksToFollow: FollowLinkConfig[] = [ + followLink('logo'), + ]; + collinksToFollow: FollowLinkConfig[] = [ + followLink('logo'), + ]; + + colecciones:Array = [ + { + title: "Revistas", + img: "assets/custom/images/revistas.png", + href: "", + description: "Tesis de grado, postgrado y otros documentos", + } as SliderItem,{ + title: "Eventos", + img: "assets/custom/images/eventos.png", + href: "", + description: "Tesis de grado, postgrado y otros documentos" + } as SliderItem,{ + title: "Libros", + img: "assets/custom/images/libros2.png", + href: "", + description: "Tesis de grado, postgrado y otros documentos" + } as SliderItem,{ + title: "Tesis", + img: "assets/custom/images/tesis.png", + href: "", + description: "Tesis de grado, postgrado y otros documentos" + } as SliderItem + ]; + + carrousel2 :SliderItem2[][] = []; + + constructor( + @Inject(APP_CONFIG) protected appConfig: AppConfig, + protected route: ActivatedRoute, + protected comuds: CommunityDataService, + protected collds: CollectionDataService, + protected cdr: ChangeDetectorRef + ) { + super(appConfig, route); + this.highlightCollections = this.appConfig.highlightCollections; + } + + + ngOnInit(): void { + super.ngOnInit(); + const resultado = []; + for (let i = 0; i < this.appConfig.highlightCollections.length; i += 5) { + const subarreglo = this.appConfig.highlightCollections.slice(i, i + 5); + resultado.push(subarreglo); + } + for (const arreglo of resultado){ + const slider = []; + for (const uuid of arreglo){ + if(uuid.type == "com"){ + this.communityRD$ = this.comuds.findById( + uuid.id, + true, + true, + ...this.comlinksToFollow, + ); + this.communityRD$.pipe( + getFirstSucceededRemoteDataPayload(), + ).subscribe((community: Community) => { + slider.push( + {title: community.name, + href:"/communities/"+uuid.id, + img: community.logo}as SliderItem2 + ); + console.log(this.carrousel2); + this.logoRD$ = community.logo; + this.aux += 1; + console.log(this.aux); + this.cdr.detectChanges(); + }); + }else{ + this.collectionRD$ = this.collds.findById( + uuid.id, + true, + true, + ...this.collinksToFollow, + ); + this.collectionRD$.pipe( + getFirstSucceededRemoteDataPayload(), + ).subscribe((collection: Collection) => { + slider.push( + {title: collection.name, + href:"/collections/"+uuid.id, + img: collection.logo}as SliderItem2 + ); + console.log(this.carrousel2); + this.logoRD$ = collection.logo; + this.aux += 1; + console.log(this.aux); + this.cdr.detectChanges(); + }); + } + } + this.carrousel2.push(slider) + } + } + } diff --git a/src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.html b/src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.html new file mode 100644 index 00000000000..c53b52fd15b --- /dev/null +++ b/src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.html @@ -0,0 +1,44 @@ +
+

{{title}}

+
+
+ +
+

{{item.title}}

+

{{item.description}}

+
+
+
+ +
diff --git a/src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.scss b/src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.scss new file mode 100644 index 00000000000..4f4edf0e1e6 --- /dev/null +++ b/src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.scss @@ -0,0 +1,86 @@ +.main-tittle{ + position: relative; + text-align: center; + color: rgb(121, 121, 121); /* Color grisáceo */ + margin: 20px 0; /* Espacio arriba y abajo del título */ + font-size: 2.5rem; +} + +/* Separar los iconos de anterior y próximo de la imagen */ +.carousel-control-prev, +.carousel-control-next { + width: 5%; /* Ajusta el ancho de los controles */ +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + padding: 10px; // Opcional, para ajustar el tamaño de la flecha +} + +.carousel-control-prev-icon { + width: 40px; + height: 40px; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + width: 40px; + height: 40px; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23000' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); +} + +.carousel-control-prev { + left: -5%; /* Separa el icono de la izquierda de la imagen */ +} + +.carousel-control-next { + right: -5%; /* Separa el icono de la derecha de la imagen */ +} + +.destacado { + display: flex; + justify-content: space-around; /* Espacio igual entre las secciones */ + align-items: center; /* Centra verticalmente las secciones */ + flex-wrap: wrap; /* Permite que las secciones se ajusten si no caben en una fila */ + text-align: center; /* Centra el texto dentro de cada sección */ + + .section { + flex: 1 1 20%; /* Ajusta la flexibilidad de las secciones */ + padding: 10px; /* Espaciado interno */ + margin: 10px; /* Espaciado entre las secciones */ + display: flex; + align-items: center; /* Centra verticalmente la imagen y el texto */ + flex-direction: column; + justify-content: flex-start; + + img { + margin-bottom: 10px; /* Espacio entre la imagen y el texto */ + //max-width: 100%; + } + + .text-container { + display: flex; + flex-grow: 1; + flex-direction: column; + align-items: center; /* Centra el texto horizontalmente */ + justify-content: flex-start; // Alinea el texto hacia la parte superior + text-align: center; + } + + h4 { + margin-bottom: 10px; /* Espacio debajo del título */ + font-size: 1rem; /* Tamaño del título */ + } + } +} + +p { + font-size: 0.8rem; /* Tamaño del texto pequeño */ +} + +.image-container { + height: 150px; /* Altura fija */ + min-height: 150px; /* Asegura que la altura mínima sea 100px */ + overflow: hidden; +} + diff --git a/src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.ts b/src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.ts new file mode 100644 index 00000000000..e29668e8956 --- /dev/null +++ b/src/themes/custom/app/home-page/sedici-home-slider/home-slider.component.ts @@ -0,0 +1,81 @@ +import { Observable } from 'rxjs'; +import { ComcolPageLogoComponent } from 'src/app/shared/comcol/comcol-page-logo/comcol-page-logo.component'; +import { + AsyncPipe, + NgClass, + NgIf, + NgTemplateOutlet, + NgForOf, +} from '@angular/common'; +import { + Component, + Input } from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; +import { RemoteData } from 'src/app/core/data/remote-data'; +import { Bitstream } from 'src/app/core/shared/bitstream.model'; +import { + Router, + RouterModule, +} from '@angular/router'; + +@Component({ + selector: 'ds-home-slider', + styleUrls: ['./home-slider.component.scss'], + templateUrl: './home-slider.component.html', + standalone: true, + imports: [NgTemplateOutlet, NgIf,RouterModule, AsyncPipe, TranslateModule, NgClass, NgForOf, ComcolPageLogoComponent], +}) +export class HomeSliderComponent { + + @Input() title: string; + + @Input() slide: boolean; + + @Input() nItems: number; + + @Input() prueba: boolean; + + @Input() items: any; + + @Input() sliderItems: SliderItem2[][]; + + displayedItems: { title: string, imgUrl: Bitstream }[][] = []; + + ngOnInit(): void { + if ((this.slide)&&(this.prueba)){ + const resultado = []; + for (const arg of this.sliderItems){ + const resultado = []; + arg.forEach((item, index) => { + item.img.subscribe(imageUrl => { + resultado[index] = { + title: item.title, + imgUrl: imageUrl.payload + }; + }); + }); + this.displayedItems.push(resultado); + } + + //for (let i = 0; i < this.sliderItems.length; i += 5) { + // const subarreglo = this.sliderItems.slice(i, i + 5); + // resultado.push(subarreglo); + //} + //this.items = resultado + } + } + +} + +export class SliderItem { + title: string; + img: string; + description: string; + href: string; +} + +export class SliderItem2 { + title: string; + href: string; + img: Observable>; +} diff --git a/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.html b/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.html index e69de29bb2d..78b0dcd67d3 100644 --- a/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.html +++ b/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.html @@ -0,0 +1,50 @@ + + + + + + diff --git a/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.scss b/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.scss index e69de29bb2d..57e741178fd 100644 --- a/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.scss +++ b/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.scss @@ -0,0 +1,35 @@ +#loginDropdownMenu, #logoutDropdownMenu { + min-width: 330px; + z-index: 1002; +} + +#loginDropdownMenu { + min-height: 75px; +} + +.dropdown-item.active, .dropdown-item:active, +.dropdown-item:hover, .dropdown-item:focus { + background-color: transparent !important; +} + +.loginLink, .dropdownLogin, .logoutLink, .dropdownLogout { + color: var(--ds-header-icon-color); + + &:hover, &:focus { + color: var(--ds-header-icon-color-hover); + } +} + +.dropdownLogin, .dropdownLogout { + &:not(:focus-visible).active, + &:not(:focus-visible):active, + &:not(:focus-visible).active:focus, + &:not(:focus-visible):active:focus { + box-shadow: unset; + } +} + +.d-inline-block { + border: solid 2px gray; + padding: 10px; +} diff --git a/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.ts b/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.ts index bddca786047..14b328708e4 100644 --- a/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.ts +++ b/src/themes/custom/app/shared/auth-nav-menu/auth-nav-menu.component.ts @@ -25,10 +25,10 @@ import { BrowserOnlyPipe } from '../../../../../app/shared/utils/browser-only.pi */ @Component({ selector: 'ds-themed-auth-nav-menu', - // templateUrl: './auth-nav-menu.component.html', - templateUrl: '../../../../../app/shared/auth-nav-menu/auth-nav-menu.component.html', - // styleUrls: ['./auth-nav-menu.component.scss'], - styleUrls: ['../../../../../app/shared/auth-nav-menu/auth-nav-menu.component.scss'], + templateUrl: './auth-nav-menu.component.html', + //templateUrl: '../../../../../app/shared/auth-nav-menu/auth-nav-menu.component.html', + styleUrls: ['./auth-nav-menu.component.scss'], + //styleUrls: ['../../../../../app/shared/auth-nav-menu/auth-nav-menu.component.scss'], animations: [fadeInOut, fadeOut], standalone: true, imports: [NgClass, NgIf, NgbDropdownModule, ThemedLogInComponent, RouterLink, RouterLinkActive, ThemedUserMenuComponent, AsyncPipe, TranslateModule, BrowserOnlyPipe], diff --git a/src/themes/custom/app/shared/lang-switch/lang-switch.component.html b/src/themes/custom/app/shared/lang-switch/lang-switch.component.html index e69de29bb2d..691c4f3704d 100644 --- a/src/themes/custom/app/shared/lang-switch/lang-switch.component.html +++ b/src/themes/custom/app/shared/lang-switch/lang-switch.component.html @@ -0,0 +1,21 @@ + diff --git a/src/themes/custom/app/shared/lang-switch/lang-switch.component.scss b/src/themes/custom/app/shared/lang-switch/lang-switch.component.scss index e69de29bb2d..613274eb4c6 100644 --- a/src/themes/custom/app/shared/lang-switch/lang-switch.component.scss +++ b/src/themes/custom/app/shared/lang-switch/lang-switch.component.scss @@ -0,0 +1,36 @@ +.dropdown-toggle::after { + display:none; +} + +.dropdown-toggle { + color: var(--ds-header-icon-color); + + &:hover, &:focus { + color: var(--ds-header-icon-color-hover); + } +} + +.dropdown-item { + cursor: pointer; +} + +.text-uppercase{ + text-transform: uppercase; +} + +/* Asegúrate de que el menú desplegable no se corte */ +.dropdown-menu { + transform-origin: top right; /* Asegura que se despliegue desde la parte superior derecha */ + right: 0 !important; /* Alínea el borde derecho del menú con el contenedor */ + top: 100% !important; /* Desplaza el menú justo debajo del botón */ + transform: translateX(-85%); /* Lo mueve hacia la izquierda */ +} + + +.custom-dropdown-menu { + position: absolute; + top: 100%; /* Asegura que el menú aparezca justo debajo del botón */ + left: 0; /* Asegura que el menú aparezca alineado a la izquierda del botón */ + transform: translateY(0); /* Ajuste para evitar el corte por el borde de la pantalla */ + /* Otras propiedades que puedas necesitar */ +} diff --git a/src/themes/custom/app/shared/lang-switch/lang-switch.component.ts b/src/themes/custom/app/shared/lang-switch/lang-switch.component.ts index ce9c192723c..2b326d1bc44 100644 --- a/src/themes/custom/app/shared/lang-switch/lang-switch.component.ts +++ b/src/themes/custom/app/shared/lang-switch/lang-switch.component.ts @@ -10,10 +10,10 @@ import { LangSwitchComponent as BaseComponent } from '../../../../../app/shared/ @Component({ selector: 'ds-themed-lang-switch', - // styleUrls: ['./lang-switch.component.scss'], - styleUrls: ['../../../../../app/shared/lang-switch/lang-switch.component.scss'], - // templateUrl: './lang-switch.component.html', - templateUrl: '../../../../../app/shared/lang-switch/lang-switch.component.html', + styleUrls: ['./lang-switch.component.scss'], + //styleUrls: ['../../../../../app/shared/lang-switch/lang-switch.component.scss'], + templateUrl: './lang-switch.component.html', + //templateUrl: '../../../../../app/shared/lang-switch/lang-switch.component.html', standalone: true, imports: [NgIf, NgbDropdownModule, NgFor, TranslateModule], }) diff --git a/src/themes/custom/app/shared/search-form/search-form.component.html b/src/themes/custom/app/shared/search-form/search-form.component.html index e69de29bb2d..d3992e0afdf 100644 --- a/src/themes/custom/app/shared/search-form/search-form.component.html +++ b/src/themes/custom/app/shared/search-form/search-form.component.html @@ -0,0 +1,19 @@ +
+
+
+
+ +
+ + +
+
+
diff --git a/src/themes/custom/app/shared/search-form/search-form.component.scss b/src/themes/custom/app/shared/search-form/search-form.component.scss index e69de29bb2d..65e739444bc 100644 --- a/src/themes/custom/app/shared/search-form/search-form.component.scss +++ b/src/themes/custom/app/shared/search-form/search-form.component.scss @@ -0,0 +1,47 @@ +.search-button { + background-color: transparent; // Fondo transparente + border: none; // Sin borde + padding: 0; // Sin padding + margin-left: 10px; // Ajuste para que la lupa esté más cerca del borde del input + display: flex; + align-items: center; + justify-content: center; + //width: 40px; // Ancho fijo para el botón, ajusta según necesites + //height: 40px; // Alto fijo para el botón, ajusta según necesites + + i { + color: white; // Color blanco para la lupa + font-size: 2.7rem; // Tamaño de la lupa, ajusta según necesites + } + + &:hover { + cursor: pointer; // Cambia el cursor al pasar sobre la lupa + } +} + +.form-control { + background-color: rgba(255, 255, 255, 0.7); // Fondo blanco con transparencia + color: white; // Texto blanco + border: none; // Sin borde + border-radius: 0; // Sin bordes redondeados en el input + box-shadow: none; // Sin sombra en el input + font-size: 1.7rem; // Ajusta el tamaño del texto + //padding: 10px 15px; // Ajuste del padding interno para espaciar bien el texto + //width: 100%; // Asegura que el input ocupe todo el ancho disponible + font-style: italic; +} + +/*.input-group { + border: 2px solid rgba(255, 255, 255, 0.5); // Borde blanco con un poco de transparencia + border-radius: 10px; // Bordes redondeados + overflow: hidden; // Asegura que todo dentro del grupo de entrada se mantenga dentro del borde + background-color: transparent; // Fondo transparente para el grupo +}*/ + +/*.scope-button { + background-color: rgba(255, 255, 255, 0.3); // Fondo blanco con transparencia + color: white; // Texto blanco + border: none; // Sin borde + border-radius: 0; // Sin bordes redondeados en el botón + padding: 10px 15px; // Ajuste del padding +}*/ diff --git a/src/themes/custom/app/shared/search-form/search-form.component.ts b/src/themes/custom/app/shared/search-form/search-form.component.ts index 729a001f61c..42312bb8635 100644 --- a/src/themes/custom/app/shared/search-form/search-form.component.ts +++ b/src/themes/custom/app/shared/search-form/search-form.component.ts @@ -12,10 +12,10 @@ import { BrowserOnlyPipe } from '../../../../../app/shared/utils/browser-only.pi @Component({ selector: 'ds-themed-search-form', - // styleUrls: ['./search-form.component.scss'], - styleUrls: ['../../../../../app/shared/search-form/search-form.component.scss'], - // templateUrl: './search-form.component.html', - templateUrl: '../../../../../app/shared/search-form/search-form.component.html', + styleUrls: ['./search-form.component.scss'], + // styleUrls: ['../../../../../app/shared/search-form/search-form.component.scss'], + templateUrl: './search-form.component.html', + // templateUrl: '../../../../../app/shared/search-form/search-form.component.html', standalone: true, imports: [FormsModule, NgIf, NgbTooltipModule, AsyncPipe, TranslateModule, BrowserOnlyPipe], }) diff --git a/src/themes/custom/assets/images/SEDICI_2024.svg b/src/themes/custom/assets/images/SEDICI_2024.svg new file mode 100644 index 00000000000..9bb0fb798e6 --- /dev/null +++ b/src/themes/custom/assets/images/SEDICI_2024.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/themes/custom/assets/images/autores.png b/src/themes/custom/assets/images/autores.png new file mode 100644 index 0000000000000000000000000000000000000000..7fe1bf5ec9bdb5a9e30f4e42bddfa980b74e4c1e GIT binary patch literal 1141 zcmV-*1d98KP)iK~#7F<(dI@ z@*oU=qtAOSo~+r)iYLo28XTnr0(7o4uxj47&yr>YlbF$SkhVJ0&k$+&P0 zu-;h_EI1&_(t5q_Ek?)B zV0Z>ZtjX{?Vd_pd-*u-wvEg&+u_N9P8%!gy9`W~x)>!u^0V?n z&~b9uCxQzv$ihiEllUin0fYt;+1a4q%B)>WH8~N(u`nc_SsHw#ASd;7bZ#e};NtUv z?rmOfW^I?0GvyxJW;oQp+V>XO7|irx?p%o-@q4kDh2iR*mi*Ykd-%#2RSmY@%lw*_ zBle0#VRNY{xpFzOYo#4Qol;pyu-1Xx_)1o;KLkO7cq#JWJE4-xHOM~Pkk{neUhZzt zKczBf!@v@gBHtrRNy!<=1u%0Co;O80TdHr@HEogIgT2>uNtOybC$&jLXh1Xi24krtLBDLTJ~P^L z+QC2~a5`=NOMI&IBQ)IYBmQ`9MQswfapUlkQP2{>9V|T}-K;+(qjwr%Im7AqLy|L^ zzz#LGkB;4hmC=ns$mi0Foyyi?gP%Wg-IdWb4O`3a!Qt!a-{5hlrR0Nmk}NCAw3P_S zR4rNR`nkrR;2*p&5$Ye=aMJ()01jnXNoGw=04e|g00;m8000000Mb*F00000NkvXX Hu0mjfwRs(c literal 0 HcmV?d00001 diff --git a/src/themes/custom/assets/images/datos.png b/src/themes/custom/assets/images/datos.png new file mode 100644 index 0000000000000000000000000000000000000000..14064ab4649a93a2ab162d9b5595cd735ed83009 GIT binary patch literal 1775 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 K_X4;dh5R2DQx?wv literal 0 HcmV?d00001 diff --git a/src/themes/custom/assets/images/libros2.png b/src/themes/custom/assets/images/libros2.png new file mode 100644 index 0000000000000000000000000000000000000000..be1c225f63b2505fa4e15542abf5acf5472d3a71 GIT binary patch literal 3707 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 IM6N<$g3#EM(*OVf literal 0 HcmV?d00001 diff --git a/src/themes/custom/assets/images/revistas.png b/src/themes/custom/assets/images/revistas.png new file mode 100644 index 0000000000000000000000000000000000000000..25e98106659dc2bbdc8a7f9512325d80279dbd8e GIT binary patch literal 1941 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 W00000(o>TF0000S literal 0 HcmV?d00001 diff --git a/src/themes/custom/assets/images/unlp.svg b/src/themes/custom/assets/images/unlp.svg new file mode 100644 index 00000000000..ff0a6415aec --- /dev/null +++ b/src/themes/custom/assets/images/unlp.svg @@ -0,0 +1,441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b8679c4627431a6b5a520e128260253b3d29397b Mon Sep 17 00:00:00 2001 From: 178Pelado Date: Thu, 12 Dec 2024 09:02:07 -0300 Subject: [PATCH 04/46] 11008 Agrego el matcheo por autoridad a los links de la vista del item (autores, colaboradores y materias) --- .../metadata-values/metadata-values.component.html | 6 +++--- .../metadata-values/metadata-values.component.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/app/item-page/field-components/metadata-values/metadata-values.component.html b/src/app/item-page/field-components/metadata-values/metadata-values.component.html index 78b834c9564..46395569142 100644 --- a/src/app/item-page/field-components/metadata-values/metadata-values.component.html +++ b/src/app/item-page/field-components/metadata-values/metadata-values.component.html @@ -4,7 +4,7 @@ Choose a template. Priority: markdown, link, browse link. --> + context: {value: mdValue.value, authority: mdValue.authority, img}"> @@ -40,8 +40,8 @@ - + {{value}} + [queryParams]="getQueryParams(value, authority)">{{value}} diff --git a/src/app/item-page/field-components/metadata-values/metadata-values.component.ts b/src/app/item-page/field-components/metadata-values/metadata-values.component.ts index 1a73d692ebf..d9caf6940d5 100644 --- a/src/app/item-page/field-components/metadata-values/metadata-values.component.ts +++ b/src/app/item-page/field-components/metadata-values/metadata-values.component.ts @@ -115,8 +115,8 @@ export class MetadataValuesComponent implements OnChanges { * definition is metadata browse, or item browse * @param value the specific metadata value being linked */ - getQueryParams(value) { - const queryParams = { startsWith: value }; + getQueryParams(value, authority) { + const queryParams = { value: value, authority: authority }; // todo: should compare with type instead? // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison if (this.browseDefinition.getRenderType() === VALUE_LIST_BROWSE_DEFINITION.value) { From cd66a557aebba3eea96de7c15a806a4216ed3947 Mon Sep 17 00:00:00 2001 From: 178Pelado Date: Thu, 12 Dec 2024 09:14:05 -0300 Subject: [PATCH 05/46] =?UTF-8?q?11011=20traducciones=20metadatos=20y=20li?= =?UTF-8?q?cencias;=20vista=20del=20=C3=ADtem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/i18n/en.json5 | 178 +++++++++++++++++++++++++++++++++++ src/assets/i18n/es.json5 | 73 +++++++++++++++ src/assets/i18n/pt-BR.json5 | 179 ++++++++++++++++++++++++++++++++++++ 3 files changed, 430 insertions(+) diff --git a/src/assets/i18n/en.json5 b/src/assets/i18n/en.json5 index 6a55c03dfe2..bd0e59398a9 100644 --- a/src/assets/i18n/en.json5 +++ b/src/assets/i18n/en.json5 @@ -6745,4 +6745,182 @@ "item.page.cc.license.disclaimer": "Except where otherwised noted, this item's license is described as", "browse.search-form.placeholder": "Search the repository", + + // "sedici.item.page.sedici.creator.corporate": "Autor institucional", + "sedici.item.page.sedici.creator.corporate": "Institutional Author", + + // "sedici.item.page.sedici.creator.interprete": "Intérprete", + "sedici.item.page.sedici.creator.interprete": "Interpreter", + + // "sedici.item.page.sedici.contributor.compiler": "Compilador", + "sedici.item.page.sedici.contributor.compiler": "Compiler", + + // "sedici.item.page.sedici.contributor.translator": "Traductor", + "sedici.item.page.sedici.contributor.translator": "Translator", + + // "sedici.item.page.sedici.contributor.editor": "Editor", + "sedici.item.page.sedici.contributor.editor": "Editor", + + // "sedici.item.page.sedici.contributor.inscriber": "Firmantes", + "sedici.item.page.sedici.contributor.inscriber": "Signatories", + + // "sedici.item.page.dc.coverage.spatial": "Alcance geográfico", + "sedici.item.page.dc.coverage.spatial": "Geographic Coverage", + + // "sedici.item.page.dc.coverage.temporal": "Alcance temporal", + "sedici.item.page.dc.coverage.temporal": "Temporal Coverage", + + // "sedici.item.page.dc.subject": "Palabras clave", + "sedici.item.page.dc.subject": "Keywords", + + // "sedici.item.page.sedici.contributor.director": "Directores", + "sedici.item.page.sedici.contributor.director": "Directors", + + // "sedici.item.page.sedici.contributor.codirector": "Co-directores", + "sedici.item.page.sedici.contributor.codirector": "Co-directors", + + // "sedici.item.page.sedici.institucionDesarrollo": "Instiución de Desarrollo", + "sedici.item.page.sedici.institucionDesarrollo": "Development Institution", + + // "sedici.item.page.sedici.contributor.juror": "Jurados", + "sedici.item.page.sedici.contributor.juror": "Jurors", + + // "sedici.item.page.dc.title.alternative": "Título alternativo", + "sedici.item.page.dc.title.alternative": "Alternative Title", + + // "sedici.item.page.sedici.description.note": "Notas", + "sedici.item.page.sedici.description.note": "Notes", + + // "sedici.item.page.sedici.contributor.colaborator": "Colaboradores", + "sedici.item.page.sedici.contributor.colaborator": "Collaborators", + + // "sedici.item.page.mods.originInfo.place": "Institución de origen", + "sedici.item.page.mods.originInfo.place": "Origin Institution", + + // "sedici.item.page.dc.format": "Descripción física", + "sedici.item.page.dc.format": "Physical Description", + + // "sedici.item.page.dc.format.extent": "Páginas", + "sedici.item.page.dc.format.extent": "Pages", + + // "sedici.item.page.dc.format.medium": "Materiales/Técnicas", + "sedici.item.page.dc.format.medium": "Materials/Techniques", + + // "sedici.item.page.dc.audience": "Contexto de uso", + "sedici.item.page.dc.audience": "Usage Context", + + // "sedici.item.page.dc.publisher.production": "Producción", + "sedici.item.page.dc.publisher.production": "Production", + + // "sedici.item.page.dc.publisher.editorial": "Editorial", + "sedici.item.page.dc.publisher.editorial": "Editorial", + + // "sedici.item.page.dc.relation.ispartof": "Serie/Colección", + "sedici.item.page.dc.relation.ispartof": "Series/Collection", + + // "sedici.item.page.sedici.subject.materias": "Materias", + "sedici.item.page.sedici.subject.materias": "Subjects", + + // "sedici.item.page.sedici.identifier.uri": "Enlaces externos", + "sedici.item.page.sedici.identifier.uri": "External Links", + + // "sedici.item.page.sedici.relation.isRelatedWith": "Documentos relacionados", + "sedici.item.page.sedici.relation.isRelatedWith": "Related Documents", + + // "sedici.item.page.dc.date.issued": "Fecha de publicación", + "sedici.item.page.dc.date.issued": "Date of Publication", + + // "sedici.item.page.dc.date.created": "Fecha de creación", + "sedici.item.page.dc.date.created": "Date of Creation", + + // "sedici.item.page.sedici.date.exposure": "Fecha de exposición", + "sedici.item.page.sedici.date.exposure": "Date of Exposure", + + // "sedici.item.page.dc.description.filiation": "Filiación del autor", + "sedici.item.page.dc.description.filiation": "Author's Affiliation", + + // "sedici.item.page.sedici.identifier.expediente": "N° de expediente", + "sedici.item.page.sedici.identifier.expediente": "File Number", + + // "sedici.item.page.mods.location": "Ubicación física", + "sedici.item.page.mods.location": "Physical Location", + + // "sedici.item.page.sedici.subject.ford": "Clasificación FORD", + "sedici.item.page.sedici.subject.ford": "FORD Classification", + + // "sedici.item.page.dc.language": "Idioma del documento", + "sedici.item.page.dc.language": "Document Language", + + //"sedici.item.page.thesis.degree.name": "Grado alcanzado", + "sedici.item.page.thesis.degree.name": "Degree Achieved", + + // "sedici.item.page.thesis.degree.grantor": "Institución otorgante", + "sedici.item.page.thesis.degree.grantor": "Granting Institution", + + // "sedici.item.page.sedici.relation.event": "Evento", + "sedici.item.page.sedici.relation.event": "Event", + + // "sedici.item.page.sedici.relation.journalTitle": "Título de la revista", + "sedici.item.page.sedici.relation.journalTitle": "Journal Title", + + // "sedici.item.page.sedici.relation.journalVolumeAndIssue": "Volumen y número", + "sedici.item.page.sedici.relation.journalVolumeAndIssue": "Volume and Issue", + + // "sedici.item.page.sedici.relation.bookTitle": "Título del libro", + "sedici.item.page.sedici.relation.bookTitle": "Book Title", + + // "sedici.item.page.sedici.relation.ciclo": "Ciclo", + "sedici.item.page.sedici.relation.ciclo": "Cycle", + + // "sedici.item.page.dc.date.accessioned": "Creado el", + "sedici.item.page.dc.date.accessioned": "Created on", + + // "sedici.tabs.content": "Contenido", + "sedici.tabs.content": "Content", + + // "sedici.tabs.license": "Licencia", + "sedici.tabs.license": "License", + + // "sedici.tabs.howToCite": "Cómo citar", + "sedici.tabs.howToCite": "How to Cite", + + // "sedici.tabs.statistics": "Estadísticas", + "sedici.tabs.statistics": "Statistics", + + // "sedici.tabs.fullRecord": "Registro completo", + "sedici.tabs.fullRecord": "Full Record", + + "sedici.license.free": "You are free to:", + + "sedici.license.share": "Share", + + "sedici.license.share.description": "copy and redistribute the material in any medium or format", + + "sedici.license.adapt": "Adapt", + + "sedici.license.adapt.description": "remix, transform, and build upon the material", + + "sedici.license.description": "The licensor cannot revoke these freedoms as long as you follow the license terms.", + + "sedici.license.terms": "Under the following terms:", + + "sedici.license.attribution": "Attribution", + + "sedici.license.attribution.description": "You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.", + + "sedici.license.nonCommercial": "Non Commercial", + + "sedici.license.nonCommercial.description": "You may not use the material for commercial purposes.", + + "sedici.license.noDerivateWorks": "No Derivative Works", + + "sedici.license.noDerivateWorks.description": "If you remix, transform, or build upon the material, you may not distribute the modified material.", + + "sedici.license.shareAlike": "Share Alike", + + "sedici.license.shareAlike.description": "If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.", + + "sedici.license.restriction": "No additional restrictions", + + "sedici.license.restriction.description": "You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.", } diff --git a/src/assets/i18n/es.json5 b/src/assets/i18n/es.json5 index bc4867272a7..f5c2d177b2a 100644 --- a/src/assets/i18n/es.json5 +++ b/src/assets/i18n/es.json5 @@ -8648,4 +8648,77 @@ // "collection.page.browse.search.head": "Search", "collection.page.browse.search.head": "Buscar", + + // Vista del ítem + "sedici.item.page.sedici.creator.corporate": "Autor institucional", + "sedici.item.page.sedici.creator.interprete": "Intérprete", + "sedici.item.page.sedici.contributor.compiler": "Compilador", + "sedici.item.page.sedici.contributor.translator": "Traductor", + "sedici.item.page.sedici.contributor.editor": "Editor", + "sedici.item.page.sedici.contributor.inscriber": "Firmantes", + "sedici.item.page.dc.coverage.spatial": "Alcance geográfico", + "sedici.item.page.dc.coverage.temporal": "Alcance temporal", + "sedici.item.page.dc.subject": "Palabras clave", + "sedici.item.page.sedici.contributor.director": "Directores", + "sedici.item.page.sedici.contributor.codirector": "Co-directores", + "sedici.item.page.sedici.institucionDesarrollo": "Instiución de Desarrollo", + "sedici.item.page.sedici.contributor.juror": "Jurados", + "sedici.item.page.dc.title.alternative": "Título alternativo", + "sedici.item.page.sedici.description.note": "Notas", + "sedici.item.page.sedici.contributor.colaborator": "Colaboradores", + "sedici.item.page.mods.originInfo.place": "Institución de origen", + "sedici.item.page.dc.format": "Descripción física", + "sedici.item.page.dc.format.extent": "Páginas", + "sedici.item.page.dc.format.medium": "Materiales/Técnicas", + "sedici.item.page.dc.audience": "Contexto de uso", + "sedici.item.page.dc.publisher.production": "Producción", + "sedici.item.page.dc.publisher.editorial": "Editorial", + "sedici.item.page.dc.relation.ispartof": "Serie/Colección", + "sedici.item.page.sedici.subject.materias": "Materias", + "sedici.item.page.sedici.identifier.uri": "Enlaces externos", + "sedici.item.page.sedici.relation.isRelatedWith": "Documentos relacionados", + + // Registro completo + "sedici.item.page.dc.date.issued": "Fecha de publicación", + "sedici.item.page.dc.date.created": "Fecha de creación", + "sedici.item.page.sedici.date.exposure": "Fecha de exposición", + "sedici.item.page.dc.description.filiation": "Filiación del autor", + "sedici.item.page.sedici.identifier.expediente": "N° de expediente", + "sedici.item.page.mods.location": "Ubicación física", + "sedici.item.page.sedici.subject.ford": "Clasificación FORD", + "sedici.item.page.dc.language": "Idioma del documento", + "sedici.item.page.thesis.degree.name": "Grado alcanzado", + "sedici.item.page.thesis.degree.grantor": "Institución otorgante", + "sedici.item.page.sedici.relation.event": "Evento", + "sedici.item.page.sedici.relation.journalTitle": "Título de la revista", + "sedici.item.page.sedici.relation.journalVolumeAndIssue": "Volumen y número", + "sedici.item.page.sedici.relation.bookTitle": "Título del libro", + "sedici.item.page.sedici.relation.ciclo": "Ciclo", + "sedici.item.page.dc.date.accessioned": "Creado el", + + // Tabs + "sedici.tabs.content": "Contenido", + "sedici.tabs.license": "Licencia", + "sedici.tabs.howToCite": "Cómo citar", + "sedici.tabs.statistics": "Estadísticas", + "sedici.tabs.fullRecord": "Registro completo", + + // Licencia + "sedici.license.free": "Usted es libre de:", + "sedici.license.share": "Compartir", + "sedici.license.share.description": "copiar y redistribuir el material en cualquier medio o formato", + "sedici.license.adapt": "Adaptar", + "sedici.license.adapt.description": "remezclar, transformar y construir a partir del material", + "sedici.license.description": "La licenciante no puede revocar estas libertades en tanto usted siga los términos de la licencia.", + "sedici.license.terms": "Bajo los siguientes términos:", + "sedici.license.attribution": "Atribución", + "sedici.license.attribution.description": "Usted debe dar crédito de manera adecuada, brindar un enlace a la licencia, e indicar si se han realizado cambios. Puede hacerlo en cualquier forma razonable, pero no de forma tal que sugiera que usted o su uso tienen el apoyo de la licenciante.", + "sedici.license.nonCommercial": "No Comercial", + "sedici.license.nonCommercial.description": "Usted no puede hacer uso del material con propósitos comerciales.", + "sedici.license.noDerivateWorks": "Sin obras derivadas", + "sedici.license.noDerivateWorks.description": "Si remezcla, transforma o crea a partir del material, no podrá distribuir el material modificado.", + "sedici.license.shareAlike": "Compartir Igual", + "sedici.license.shareAlike.description": "Si remezcla, transforma o crea a partir del material, debe distribuir su contribución bajo la la misma licencia del original.", + "sedici.license.restriction": "No hay restricciones adicionales", + "sedici.license.restriction.description": "No puede aplicar términos legales ni medidas tecnológicas que restrinjan legalmente a otras a hacer cualquier uso permitido por la licencia.", } diff --git a/src/assets/i18n/pt-BR.json5 b/src/assets/i18n/pt-BR.json5 index 264a69c0f7a..c65c79b0e13 100644 --- a/src/assets/i18n/pt-BR.json5 +++ b/src/assets/i18n/pt-BR.json5 @@ -10249,4 +10249,183 @@ //"browse.search-form.placeholder": "Search the repository", "browse.search-form.placeholder": "Buscar no repositório", + + // "sedici.item.page.sedici.creator.corporate": "Autor institucional", + "sedici.item.page.sedici.creator.corporate": "Autor Institucional", + + // "sedici.item.page.sedici.creator.interprete": "Intérprete", + "sedici.item.page.sedici.creator.interprete": "Intérprete", + + // "sedici.item.page.sedici.contributor.compiler": "Compilador", + "sedici.item.page.sedici.contributor.compiler": "Compilador", + + // "sedici.item.page.sedici.contributor.translator": "Traductor", + "sedici.item.page.sedici.contributor.translator": "Tradutor", + + // "sedici.item.page.sedici.contributor.editor": "Editor", + "sedici.item.page.sedici.contributor.editor": "Editor", + + // "sedici.item.page.sedici.contributor.inscriber": "Firmantes", + "sedici.item.page.sedici.contributor.inscriber": "Signatários", + + // "sedici.item.page.dc.coverage.spatial": "Alcance geográfico", + "sedici.item.page.dc.coverage.spatial": "Cobertura Geográfica", + + // "sedici.item.page.dc.coverage.temporal": "Alcance temporal", + "sedici.item.page.dc.coverage.temporal": "Cobertura Temporal", + + // "sedici.item.page.dc.subject": "Palabras clave", + "sedici.item.page.dc.subject": "Palavras-chave", + + // "sedici.item.page.sedici.contributor.director": "Directores", + "sedici.item.page.sedici.contributor.director": "Diretores", + + // "sedici.item.page.sedici.contributor.codirector": "Co-directores", + "sedici.item.page.sedici.contributor.codirector": "Co-diretores", + + // "sedici.item.page.sedici.institucionDesarrollo": "Instiución de Desarrollo", + "sedici.item.page.sedici.institucionDesarrollo": "Instituição de Desenvolvimento", + + // "sedici.item.page.sedici.contributor.juror": "Jurados", + "sedici.item.page.sedici.contributor.juror": "Jurados", + + // "sedici.item.page.dc.title.alternative": "Título alternativo", + "sedici.item.page.dc.title.alternative": "Título Alternativo", + + // "sedici.item.page.sedici.description.note": "Notas", + "sedici.item.page.sedici.description.note": "Notas", + + // "sedici.item.page.sedici.contributor.colaborator": "Colaboradores", + "sedici.item.page.sedici.contributor.colaborator": "Colaboradores", + + // "sedici.item.page.mods.originInfo.place": "Institución de origen", + "sedici.item.page.mods.originInfo.place": "Instituição de Origem", + + // "sedici.item.page.dc.format": "Descripción física", + "sedici.item.page.dc.format": "Descrição Física", + + // "sedici.item.page.dc.format.extent": "Páginas", + "sedici.item.page.dc.format.extent": "Páginas", + + // "sedici.item.page.dc.format.medium": "Materiales/Técnicas", + "sedici.item.page.dc.format.medium": "Materiais/Técnicas", + + // "sedici.item.page.dc.audience": "Contexto de uso", + "sedici.item.page.dc.audience": "Contexto de Uso", + + // "sedici.item.page.dc.publisher.production": "Producción", + "sedici.item.page.dc.publisher.production": "Produção", + + // "sedici.item.page.dc.publisher.editorial": "Editorial", + "sedici.item.page.dc.publisher.editorial": "Editorial", + + // "sedici.item.page.dc.relation.ispartof": "Serie/Colección", + "sedici.item.page.dc.relation.ispartof": "Série/Coleção", + + // "sedici.item.page.sedici.subject.materias": "Materias", + "sedici.item.page.sedici.subject.materias": "Matérias", + + // "sedici.item.page.sedici.identifier.uri": "Enlaces externos", + "sedici.item.page.sedici.identifier.uri": "Links Externos", + + // "sedici.item.page.sedici.relation.isRelatedWith": "Documentos relacionados", + "sedici.item.page.sedici.relation.isRelatedWith": "Documentos Relacionados", + + // "sedici.item.page.dc.date.issued": "Fecha de publicación", + "sedici.item.page.dc.date.issued": "Data de Publicação", + + // "sedici.item.page.dc.date.created": "Fecha de creación", + "sedici.item.page.dc.date.created": "Data de Criação", + + // "sedici.item.page.sedici.date.exposure": "Fecha de exposición", + "sedici.item.page.sedici.date.exposure": "Data de Exposição", + + // "sedici.item.page.dc.description.filiation": "Filiación del autor", + "sedici.item.page.dc.description.filiation": "Afiliação do Autor", + + // "sedici.item.page.sedici.identifier.expediente": "N° de expediente", + "sedici.item.page.sedici.identifier.expediente": "Número do Processo", + + // "sedici.item.page.mods.location": "Ubicación física", + "sedici.item.page.mods.location": "Localização Física", + + // "sedici.item.page.sedici.subject.ford": "Clasificación FORD", + "sedici.item.page.sedici.subject.ford": "Classificação FORD", + + // "sedici.item.page.dc.language": "Idioma del documento", + "sedici.item.page.dc.language": "Idioma do Documento", + + // "sedici.item.page.thesis.degree.name": "Grado alcanzado", + "sedici.item.page.thesis.degree.name": "Grau Alcançado", + + // "sedici.item.page.thesis.degree.grantor": "Institución otorgante", + "sedici.item.page.thesis.degree.grantor": "Instituição Concedente", + + // "sedici.item.page.sedici.relation.event": "Evento", + "sedici.item.page.sedici.relation.event": "Evento", + + // "sedici.item.page.sedici.relation.journalTitle": "Título de la revista", + "sedici.item.page.sedici.relation.journalTitle": "Título da Revista", + + // "sedici.item.page.sedici.relation.journalVolumeAndIssue": "Volumen y número", + "sedici.item.page.sedici.relation.journalVolumeAndIssue": "Volume e Número", + + // "sedici.item.page.sedici.relation.bookTitle": "Título del libro", + "sedici.item.page.sedici.relation.bookTitle": "Título do Livro", + + // "sedici.item.page.sedici.relation.ciclo": "Ciclo", + "sedici.item.page.sedici.relation.ciclo": "Ciclo", + + // "sedici.item.page.dc.date.accessioned": "Creado el", + "sedici.item.page.dc.date.accessioned": "Criado em", + + // "sedici.tabs.content": "Contenido", + "sedici.tabs.content": "Conteúdo", + + // "sedici.tabs.license": "Licencia", + "sedici.tabs.license": "Licença", + + // "sedici.tabs.howToCite": "Cómo citar", + "sedici.tabs.howToCite": "Como Citar", + + // "sedici.tabs.statistics": "Estadísticas", + "sedici.tabs.statistics": "Estatísticas", + + // "sedici.tabs.fullRecord": "Registro completo", + "sedici.tabs.fullRecord": "Registro Completo", + + "sedici.license.free": "Você tem o direito de:", + + "sedici.license.share": "Compartilhar", + + "sedici.license.share.description": "copiar e redistribuir o material em qualquer suporte ou formato", + + "sedici.license.adapt": "Adaptar", + + "sedici.license.adapt.description": "remixar, transformar, e criar a partir do material", + + "sedici.license.description": "O licenciante não pode revogar estes direitos desde que você respeite os termos da licença.", + + "sedici.license.terms": "De acordo com os termos seguintes:", + + "sedici.license.attribution": "Atribuição", + + "sedici.license.attribution.description": " Você deve atribuir o devido crédito, fornecer um link para a licença, e indicar se foram feitas alterações. Você pode fazê-lo de qualquer forma razoável, mas não de uma forma que sugira que o licenciante o apoia ou aprova o seu uso.", + + "sedici.license.nonCommercial": "Não Comercial", + + "sedici.license.nonCommercial.description": "Você não pode usar o material para fins comerciais.", + + "sedici.license.noDerivateWorks": "Sem Obras Derivadas", + + "sedici.license.noDerivateWorks.description": "Se você remixar, transformar, ou criar a partir do material, não pode distribuir o material modificado.", + + "sedici.license.shareAlike": "Compartilhar Igual", + + "sedici.license.shareAlike.description": "Se você remixar, transformar, ou criar a partir do material, tem de distribuir as suas contribuições ao abrigo da mesma licença que o original.", + + "sedici.license.restriction": "Sem restrições adicionais", + + "sedici.license.restriction.description": "Você não pode aplicar termos jurídicos ou medidas de caráter tecnológico que restrinjam legalmente outros de fazerem algo que a licença permita.", + } From 93c62106ab10b497027e3b239193bcb883643ad3 Mon Sep 17 00:00:00 2001 From: 178Pelado Date: Thu, 12 Dec 2024 09:18:19 -0300 Subject: [PATCH 06/46] 11008 modifico el font-size pero directamente en los archivos theme. Cambio font-family a roboto --- src/styles/_bootstrap_variables.scss | 2 +- .../custom/styles/_theme_css_variable_overrides.scss | 1 + .../custom/styles/_theme_sass_variable_overrides.scss | 11 ++++++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/styles/_bootstrap_variables.scss b/src/styles/_bootstrap_variables.scss index d80b53ea088..386b4b47fe3 100644 --- a/src/styles/_bootstrap_variables.scss +++ b/src/styles/_bootstrap_variables.scss @@ -15,7 +15,7 @@ /*** FONT FAMILIES AND FONT SIZES ***/ -$font-size-base: 0.9rem !default; // Assumes the browser default, typically `16px` +$font-size-base: 1rem !default; // Assumes the browser default, typically `16px` $h1-font-size: $font-size-base * 2.125 !default; $h2-font-size: $font-size-base * 1.75 !default; $h3-font-size: $font-size-base * 1.5 !default; diff --git a/src/themes/custom/styles/_theme_css_variable_overrides.scss b/src/themes/custom/styles/_theme_css_variable_overrides.scss index 3ff54cbf8f8..669ece4203f 100644 --- a/src/themes/custom/styles/_theme_css_variable_overrides.scss +++ b/src/themes/custom/styles/_theme_css_variable_overrides.scss @@ -5,4 +5,5 @@ //--ds-header-logo-height-xs: 50px; //--ds-header-icon-color: #{$link-color}; //--ds-header-icon-color-hover: #{darken($link-color, 15%)}; + --ds-breadcrumb-bg: #{$white} !important; } diff --git a/src/themes/custom/styles/_theme_sass_variable_overrides.scss b/src/themes/custom/styles/_theme_sass_variable_overrides.scss index f1387aa619b..451f90854a4 100644 --- a/src/themes/custom/styles/_theme_sass_variable_overrides.scss +++ b/src/themes/custom/styles/_theme_sass_variable_overrides.scss @@ -3,11 +3,14 @@ // still uses Sass variables internally. So if you want to override bootstrap (or other sass // variables) you can do so here. Their CSS counterparts will include the changes you make here -// $font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; +@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,200;0,300;0,400;0,600;0,700;0,800;1,200;1,300;1,400;1,600;1,700;1,800&display=swap'); + +$font-family-sans-serif: Roboto, -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; // // $gray-700: #495057 !default; // Bootstrap $gray-700 // $gray-100: #f8f9fa !default; // $gray-100 // +$white: #ffffff !default; // $blue: #2B4E72 !default; // $green: #94BA65 !default; // $cyan: #006666 !default; @@ -27,3 +30,9 @@ // ) !default; // // $link-color: map-get($theme-colors, info) !default; + +/*** TOCANDO VARIABLES ***/ +$font-size-base: 0.875rem !default; // Assumes the browser default, typically `16px` +$line-height-base: 2 !default; // En lugar del 1.5 por defecto +// $badge-font-size: 75% !default; //VER si aumentar el tamaño de la fuente para los badge +// $font-family-sans-serif: SE PUEDEN MODIFICAR ARRIBA DIRECTAMENTE \ No newline at end of file From d2d4afb0773ac3e66c504c588dc9d4ad85dcba93 Mon Sep 17 00:00:00 2001 From: 178Pelado Date: Thu, 12 Dec 2024 11:25:16 -0300 Subject: [PATCH 07/46] Soluciono vista cambio de idioma DSpace --- .../custom/app/shared/lang-switch/lang-switch.component.html | 2 +- .../custom/app/shared/lang-switch/lang-switch.component.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/themes/custom/app/shared/lang-switch/lang-switch.component.html b/src/themes/custom/app/shared/lang-switch/lang-switch.component.html index 691c4f3704d..7cf6b68929b 100644 --- a/src/themes/custom/app/shared/lang-switch/lang-switch.component.html +++ b/src/themes/custom/app/shared/lang-switch/lang-switch.component.html @@ -4,7 +4,7 @@ aria-controls="language-menu-list" aria-haspopup="menu" [title]="'nav.language' | translate" - (click)="$event.preventDefault()" data-toggle="dropdown" ngbDropdownToggle + ngbDropdownToggle tabindex="0" class="text-uppercase"> {{translate.currentLang}} diff --git a/src/themes/custom/app/shared/lang-switch/lang-switch.component.scss b/src/themes/custom/app/shared/lang-switch/lang-switch.component.scss index 613274eb4c6..df1fbd9d972 100644 --- a/src/themes/custom/app/shared/lang-switch/lang-switch.component.scss +++ b/src/themes/custom/app/shared/lang-switch/lang-switch.component.scss @@ -23,7 +23,7 @@ transform-origin: top right; /* Asegura que se despliegue desde la parte superior derecha */ right: 0 !important; /* Alínea el borde derecho del menú con el contenedor */ top: 100% !important; /* Desplaza el menú justo debajo del botón */ - transform: translateX(-85%); /* Lo mueve hacia la izquierda */ + transform: translateX(-85%) !important; /* Lo mueve hacia la izquierda */ } From 5f9af2d5247c93ee82a48682b2996b69f692f506 Mon Sep 17 00:00:00 2001 From: 178Pelado Date: Thu, 12 Dec 2024 12:03:55 -0300 Subject: [PATCH 08/46] =?UTF-8?q?11008=20=20vista=20del=20=C3=ADtem;=20nue?= =?UTF-8?q?va=20ubicaci=C3=B3n=20de=20metadatos;=20maquetas=20de=20c=C3=B3?= =?UTF-8?q?mo=20citar,=20compartir=20y=20=20previsualizador=20(PDF,=20JPG,?= =?UTF-8?q?=20ZIP);=20actualizaci=C3=B3n=20licencias,=20trail,=20PID=20y?= =?UTF-8?q?=20abstract?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../metadata-uri-values.component.html | 6 +- .../metadata-uri-values.component.ts | 15 + .../file-download-link.component.ts | 2 +- .../metadata-field-wrapper.component.scss | 1 + src/assets/images/LAREFERENCIA2.png | Bin 0 -> 238297 bytes src/styles/_global-styles.scss | 2 +- .../breadcrumbs/breadcrumbs.component.html | 34 +- .../breadcrumbs/breadcrumbs.component.scss | 1 + .../app/breadcrumbs/breadcrumbs.component.ts | 16 +- .../citation/sedici-citation.component.html | 23 ++ .../citation/sedici-citation.component.scss | 32 ++ .../citation/sedici-citation.component.ts | 66 ++++ .../context/sedici-context.component.html | 3 + .../context/sedici-context.component.scss | 3 + .../context/sedici-context.component.ts | 89 +++++ ...dici-language-metadata-values.component.ts | 2 + .../sedici-share-buttons.component.html | 36 ++ .../sedici-share-buttons.component.scss | 68 ++++ .../sedici-share-buttons.component.ts | 32 ++ .../lrw-lareferencia.component.html | 1 + .../lrw-lareferencia.component.scss | 0 .../lrw-lareferencia.component.ts | 86 +++++ .../viewer/sedici-viewer.component.html | 11 + .../viewer/sedici-viewer.component.scss | 0 .../viewer/sedici-viewer.component.ts | 20 ++ .../untyped-item/content-files.component.html | 136 ++++++-- .../untyped-item/content-files.component.scss | 138 ++++---- .../untyped-item/content-files.component.ts | 128 ++++++- .../untyped-item/expandable-metadata.ts | 100 ++++++ .../untyped-item/full-item.component.html | 54 ++- .../language-switcher.component.html | 28 +- .../language-switcher.component.scss | 42 ++- .../sedici-file-download-link.component.html | 3 +- .../sedici-file-download-link.component.scss | 6 +- .../sedici-file-download-link.component.ts | 19 + .../sedici-license.component.html | 156 +++++++++ .../sedici-license.component.scss | 16 + .../untyped-item/sedici-license.component.ts | 27 ++ ...i-truncatable-generic-item-page-field.html | 22 +- ...i-truncatable-generic-item-page-field.scss | 7 +- ...ici-truncatable-generic-item-page-field.ts | 12 +- .../tabbed-content.component.html | 24 +- .../tabbed-content.component.scss | 50 ++- .../untyped-item/tabbed-content.component.ts | 29 +- .../untyped-item/untyped-item.component.html | 325 +++++++++--------- .../untyped-item/untyped-item.component.scss | 39 ++- .../untyped-item/untyped-item.component.ts | 59 +++- .../custom/app/root/root.component.html | 33 ++ src/themes/custom/app/root/root.component.ts | 4 +- .../sedici-context-badge.component.html | 11 +- .../sedici-context-badge.component.scss | 25 -- .../sedici-context-badge.component.ts | 92 ----- .../sedici-truncatable-part.component.html | 13 + .../sedici-truncatable-part.component.scss | 21 ++ .../sedici-truncatable-part.component.ts | 26 ++ 55 files changed, 1701 insertions(+), 493 deletions(-) create mode 100644 src/assets/images/LAREFERENCIA2.png create mode 100644 src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.html create mode 100644 src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.scss create mode 100644 src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.ts create mode 100644 src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.html create mode 100644 src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.scss create mode 100644 src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.ts create mode 100644 src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.html create mode 100644 src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.scss create mode 100644 src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.ts create mode 100644 src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.html create mode 100644 src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.scss create mode 100644 src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.ts create mode 100644 src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.html create mode 100644 src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.scss create mode 100644 src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.ts create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/expandable-metadata.ts create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.html create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.scss create mode 100644 src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.ts create mode 100644 src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.html create mode 100644 src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.scss create mode 100644 src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.ts diff --git a/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html index 4cef0a15920..3a8ecd49482 100644 --- a/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html +++ b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.html @@ -1,5 +1,7 @@ - - {{ linktext || mdValue.value }} + {{getDomain(mdValue.value)}}/... + diff --git a/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.ts b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.ts index 76c7defe35d..8e0fa153f7e 100644 --- a/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.ts +++ b/src/app/item-page/field-components/metadata-uri-values/metadata-uri-values.component.ts @@ -53,4 +53,19 @@ export class MetadataUriValuesComponent extends MetadataValuesComponent { * The label for this iteration of metadata values */ @Input() label: string; + + /** + * Extract the domain from a URL + * @param url The full URL + * @returns The domain of the URL + */ + getDomain(url: string): string { + try { + const parsedUrl = new URL(url); + return parsedUrl.origin; + } catch (e) { + console.error('Invalid URL:', url); + return url; + } + } } diff --git a/src/app/shared/file-download-link/file-download-link.component.ts b/src/app/shared/file-download-link/file-download-link.component.ts index 9b01cd799d4..df826471ef2 100644 --- a/src/app/shared/file-download-link/file-download-link.component.ts +++ b/src/app/shared/file-download-link/file-download-link.component.ts @@ -72,7 +72,7 @@ export class FileDownloadLinkComponent implements OnInit { canDownload$: Observable; constructor( - private authorizationService: AuthorizationDataService, + protected authorizationService: AuthorizationDataService, ) { } diff --git a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss index 4c874e019f2..a40e3d85881 100644 --- a/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss +++ b/src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component.scss @@ -1,4 +1,5 @@ .simple-view-element { + margin-bottom: .5rem; h6 { display: inline; margin-right: 0.5em; diff --git a/src/assets/images/LAREFERENCIA2.png b/src/assets/images/LAREFERENCIA2.png new file mode 100644 index 0000000000000000000000000000000000000000..dcfe12d2be9d2693a7a35b32c9a75cdc98edd875 GIT binary patch literal 238297 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
Ud0<#T zdHWEvZIOgcd|@(q38U1$!#@s%u=^NPo5;|}nSrHtWq!$K5XF?q0wkB*bhyh9Z7_67 zbHd)f!^8{-cQz~JNt_zBae`TiKq`^&GS%OFwh96)k+51a<;XdNngX;nYbUFq>&XtUQ95iR-N z>}`1>mXS5CGnor`mL7ZK0v?Mb=Kv0IIw?GkL)1`AyFPX(TAaJu1-1P{_<8L246#QGXx4tq(B7MsTU^t(pf6S!1; ze30*&$Mfr3_ASJ99)iBbHC#6EzRubdyY)c=lw~mIErb7BxKghsUn4BdYHxl`Z%Fzj zUBn7runT0n^0kKRI$zdtD1==NjHFXYC{9$X{t_KAi^r*C?G>>L)q^*n%s<2$bQ3Yi zHoe_J91R8h8X|s#T#mPqC$CV|Ekq!Xu^X3rwiCDnMQX#n{~=*>;DlQ7DsXi|Lte7; z5cLZXcWp`Y&eg#CU=}v>fQ&dK$ADpWG0clRBEeQd4iWXPv0)oOd&)A{?+e??Y#m=F z(!I#GzAh{DfW|x$YL7FcMB?Ck2jaYLf`)aUMW;d-0>uS#ksJS9QO<Kr>1!tM$=#!&q!SzrNfq5_vb`*hlt=H~+fYPCLSCpQd?icu=P z4Y=lB#4uB5k6H(-wqnApvkiNM+Wf{Wp>aV1iHJNLFC!%Be?YMPk90s!d8BEpDtBYz zW{}wV;`o3~;rU%;F)M=P9Vm&{AK-$#xQMcpxbV(rq!+dQ*B#$byW=F&ciE(GV`|oi z30w}2#Ym^8X{>E)g4YMH?DdQuaIO$HrN z9MPOeqc&mpfmJ0+qXFEUyKI2=^+3c6GI3;!x{jA#0j{}I*^ZRNAgTW#_13+k z#SthXao?oVi#TP;8_`HYAp3pU?q_5rQPpSs;96f7@Cx*R6Lk%%K7q$YZBp34xr==) zBZ}$5>p3&hk8OKUqKc%}3=adv5-PSuM^=s6zwm4o=cqWxPP+g>E6*+3`jcrA(_`@k zE;an8NOEXpt!xE`1}H>dELHIMWs{0rqLmqIUBSCieHUV*4@;gB_h3F3E% zgJkxoK9P51 zTaTaF6SUXz^VC)?Cf{`g4S?($0_g|Ja34EWUDq6kfphvwJu+_|CNS9~7Ga&}oy20-Ag7>6q4n9c_5e=2t1@G}b$?Y* z^SQLJKqO=68qS9YBqh7reUJ->LfAtpwq&R@8Vuyd$`-D;OT?v;B}iPK)jPFjG#lJ@ zjjVRM28Na$J9*SjojZw)4OufT{o0Z}TivpUB%R*r>)$u$)DJnKC6>Quxx$ zB;48AGiFJg3{7G^t%<&ch(-iHPNZF*-u~TftX(@8w6EX#@q3_(xk5-5_-*j7%qjiS zHVb?aqB?Zpl&uiXb}XV~;h1E652*5Ct{GX~6L5)Z`2cp+rWa9hyXfIn1RDV%|=4cr&-3 z+R8&{o44oX9EU*I)phA@51#Z(WqVA%zz*af87NI`zCJZ@y3lR_n{`!(t1UuT|G5QMQeaUz1xIvZsNedS zP~uV~d$W}dD)hh0b6a$*fr?kcb| z34P!%aJX-)f7PF6r$6@k_!H`Zv^XGscbpLOlZ?A8Vhqt>Cn0u=q-ESf_P!}>*c19i zJW1wgwQqdJ`VpQ8SnU~?@JQXlBXgSs^=>plU09ae7(NvjV0wmOcnYqQl80u9{o*^% z7Dv401ea%apPCcQCo+i18+B$CuAOw7@>>ztF7Zn*mO=gOq%-Vdf+(h0DZB4fK}zbb z2T?88jsw#PtZ^QZ0d3(aJCz`1Zqb?__wu0-_R#FwNGy>A_s*?bu-1V~Zfv3tV1h?& z#<}h_*PpW{=q@ET_+LSX#g><0vli)>=E4hDq<1m)Dw_mL3^#M5ncyZIEBY( zj!Yp($l!7w&R_s#Q5Q`t3UBesTf*JBf+y(?iqpVhi(`*+#b%|pzb1HHlqABRvLr1*fE$!GWuN`LFN(Y4w1{)-BM4iz#Gw&rtARcp&Dcz=Gd@ z^a%N66!flrZ=qEh&=)^c-MU*l! z-Bxc=a;C4>fA{7kaD)XWKpp&U#3*KM9{-%jkDoHv>pG=%p+CZ%!y)XnPa1ehJ494g zA?#0MI;r$%CB#SVe0~>)hs5veSvPx1-s^zS^$iW!C^YgatQ5;6JHZOJ@F4#^Xs?%RC+*|rZ_;F zCoWef)6yU!nI07D@;ufKF3dRLQuSMl<^@6)=1($DwJV5I2gDM=S8dv@%1LQ`7PH62 z<$&{w7sK^qgs?s}#?Ap`%wTY!Xs$9P2_l(Lb>nQ@3(l%$O$muv=U}uRKx@c)>7ppb zY0nl5HYO!<4_=|784`y|eAJ?~%`eA35Ft;W?3NJ&DSpf}=AQHT>BN3gYR-h0Y+mFG zzIt$qvL8U`X*oo==_s8%k5ker1Fg6zB5=Zr9U-272c&pDr@Mnp4UX5}g)^1%5?On( zyJ#aM9_Se&?l`*w6|2SbDVqAn31Qc}@k|r>I1u}3o}SfE%fxYt+>;lN4A`W&b*|;r z<^^Q>WSJ?iVERR++NOqf13TL{Gy?mr&YySmQakvj7}RUbq)x&G7cu7UHd~~o&86zKS5i22uv(E91%H8YXFi5_x-G}BaOkxPq zt2vC7oh!45frXKTICm%L$YNTE zuus?n0wga5A`KEzPk(>EO|sSWM7H3Vui$*nEUnoy272=c+Lvme;=c&9+EUrru#+e& z&tlF++{6&AQE^~!me`ob#aisOVp4O@hr8A6Y0(jNNI|Cx2E}_m~e4oG;Y;fRQLMwf07=M!dyEyjlZ)H!aGcVbL{H+&_i{25(+q7h4uJ> zb0c<{>JpB-p#UL$7qAqOII^g)(bV5hmB*0v5A_oQ501}Gj(r9CVKhPYhxQUq1Fzd> zI0QZ>ZC;hIV<9)D2&Y3so@`rm<6u5C>O@YTl-iqwSuHVenO(^&JM`I^SvRK8p&SeH zun(Q@mwwdaPzbwPAcV=Xx+y&GBNE_N;G{*E4tn^T0S`hcvWQ7Ku9wJm6GB*=lC;gl zblnz}R&;sAmZ(<>#seQ3M_zW0+iMQ35TDaUZ6`;EY!WY5vOJ<3h67n$vkgqXq%_3{ zfn7_GC3-Z+DiA8M{gI%N*Bwp)0!Jhny$Cy6{|rjo0!p#%A}T64A0c>rK2}zPTJ`NN z^{^1HeQRIeeUUvNRMjG{qdMV*2$=o#Vb?Cbj1qQigGWlG*Lqs&r8KU#!CP*Lfl!dL z3_J5RiDQ@pE{24y?dIMHBB2Q!=j49x?3akT*U+Y1Z$+ykL3ov>HnVumtgYFjxg{s; zuA-#_x)4{6u&d3opsjLW#J&CqP^4zh?)yHGG>6kO3MxP|I&qTPU=f>}nX`>`WsZWU z#|$&-^%`sYF@7HkVRwrabpVZCo?fw8B06@+1rjddhcs5DO0lAEvNS-OLque`EGq&t*Hu+g6RhRPBf7C;HXkb=pf<4WDx4#!o> z2As|o%BZbkr;U=C&ew~`0kj3Z$ z%8V^-i4qj8RV)a@zks;SL5lEJW!56kQjSt$fdQWECW;(Ejv@mh+ximXnXM%hMNdMvx#Y)0(<&-O+MLKYKjKsM zcl~kAOHRd!ufSBT6L?S7G2JX6^28pd`jdng7?If{L{eVZa`X#JNSu$mXJjPs&E`t9 z3JN+T+3$DQQ=FA%v5514AKa)Ewryx?2&*9GAakeVIXn2ee(+|c>4hwMVBjF?vOg0{ z(j|7F)LX%4W|I)YAuLVoK&K)U(y~MMayyjK=I@~pb{COAOv+e?JS0fYmYW;W(TVuP zS3XChgB{v-$%b77yPJ$LM~)uFAtCSb`Q^Xy5O9rFr^wJfrSXW5Vs!IqNL3^9CqZy zkgBE0_hz+)H>yYnfE5MtLUPwZ$N)A7b`;xr*{!?Pi4s#IU)w~sm{EkgD2_@M?QLvc zRrRVPX!0wKxVohFRnYQxA=fXCk9s6O5829$(jxG@vY%7+>)ZbodO$=CrzPQ#vD*|* z)#gU~x#)PAe!LDr6ONmQgo~t|unHd8TUd%1V$p3`$ng3&3(8S+L;Y~h1;iqc9eO`vPVfZWU8>V0o@_DvJ5EP*Mr4NbYfg_l#o6t##0ml{m>y7QP+a0 z&lTe2tggaLI$s+gj&u2k*7Lmg4~4KxnIK}LIN&pAifatIhJh87dsVmg2DFOikj=I( zf!9sM3y?nkHpjPAkppY>dQmBSaj z8YKQ_z}PIJo-Bz2h?NvJF)Po@KSc9)BH&0h!_N&0R?yU zke&`_T0p_~gve_*DznFKl!uk&RVxwQlq~JmD~5!3hu9??#Y=mHx^q0|I1Wrs2(^3Q zf10?f*dS)v1xkQXzyP}wb_hZRoARagvOUA(*p;W0r{quFEGQ>VpG4<|5Cu_6LU(r; zy3Z?uJ40LZSmem+M#Oz{9SMbqJO3QKLpTnFut$;03Zjse73|m9u83O?gj6Wg>PWhw z308@yYmm}sR}YF9h-(hzp@%GGwMMi?(rU~ck@1xg%jkKP8jIXrd;6~U_rNqSgC7}2 zEDyF#v8|gN=yhauvqqGrBJ4X@#VFdHkULI+=AW(lpq^uQPP|Ik5&7VV)hoO8E^21M z3i9(n{9hCI)_vOSPMUx;yZ@i@n#_d<}6$Kgu!c9a5*YInpPJ#>v!i3H{n8adJcwUQ``>f#y&MyUg*_&?QpA z>8#qyR;jB~t8g|#?bsF1`kT5M2s`EToV>}#CdZMuh{y%Pj+LVm^*Kzfwv{YfTTgEJ z3LVdC`LXMp4?!J>UI0jhIHm`ylqqc|*_e2Y43!7RzKOE7f_bMhD}^jc>9(Z5H#WNA zx2ocBKFZ5Vkdq7D)Y}PhC-b!vbr;3_$se(A(hbqIAO8?>kLO-$OFzG#_x4iuVLaoz zLB-YW@3kVKC^`{UMhtopJub@_@y`Y3UKb^AVtQzB?uzQDr0$9pGcnk0gLs6B8Hz>_ z2Wxx4n;5mxnLk9a68g*`+n?2ZRKYZm%QnP9HaIe9C9hjRSrgk9T@LI=pQktJmo@sTkD5+|uFJ}y~5F!u0bLTNRS+D>Jl=e?L4X1m1@ z1hXyY*deZ~*=>(%*db4`D)Ea1r17(L-v^|3J_G`rfgA6zQ#eGO!>T~Gxf#SwPS}wl zmOx_JuS=Hbb?W7Po{Cwm+C(&z!*m-tx+37Q%$*$8 zal_2pF)Yfuz-tdZa^UU+SA-)J5JW+~F(A5Sp6~({yHCh&F?s?6(|yb1`!RsQL1&(5 zj|Z$%b-5Hkrwz>u{}m>qkveU0tLb1$I&=!9KBIAPo9Kr6n& zmdvH|5P@47-l?FoZabb8~UZMc7!x?2#R9CtR)U+2O-% ztT#s#3_^HE3c0)R=UxfT7ycxb0=taSWEr=>WO$4y$kXKsEZW?O7iup|QNF9_G~pnJ zh}6o|WU!f`|Y2-RI$*t8N0imMBRdtS*NE8Ew2)sLoR zHnLR<_R;}*hRF{%+l3OSh_>4U`_M8)pjd=um${SNex-8{H66UZupk7~QRn3#pnYs3 zC5}-XY7t{?Gq=zuZ1|Q_!Zn6dRr<&_Iok|$gj8LoSKU#9?{btXG6{Q77Q5{_4@894 zbAm0-srn&*b$|I}P**v(uEkUFf7GY6hU@z7?%(Q^LpXfclC!ZoDaN$bmaDj8j>K`Q zj#uLgukvr&s0AwD(``NIiaMl36^o!m@4)>-y4zVV5K>8KG*4wQwnp5T3MRl3JUjQy zow43NqCT>-r#~H&g#-JfwzaVeQ2QKE8Bo;{#CBz4(=d>6=0^(DPCQdbhDT_oSkD)K zh`?{)$Ff0^Yc;=~?!EZ>(j^`mVV6bB9Jv7H(4(Un*VNe5NSO55c-F9u5uz~JrWcSi z=Yax@i?XKUXnz2Bd3J_u}&?` zn(%P!JJ{>H{kp30qeXqOq4BZwC-=hZ30m+&MOFyp)PqdaB%9PiR(&oIb&ufKth`tD zTHw^9j8a5X#HLdsCU!uQS?as&gEiKNd4y35e^s+DINC|DgK~}?0u>Z+fruR@Y%ioP zp{N>0|K<@Xc3?5G1GAtQGJd_yq1*9ne9U`{n+h#0=N(_LHUF_pD`737MAv2H>e5RM z7mL=5NJP6`2~h)^5IpAKC3b6z|Y!pAzh-yCk&c>=7akN^TKz-U8< zhu}+E97=5e^CV=qJh_J~t^ z0{;*ma(02faDEHUH4C$_gCcc1pR-Mg6ge~&ZjHrf9op)it|!Bx`;CW-Dxfm1q~*Dc zl5faTWC3vuFZNJRk$Xpp#5#mkTZih5{po$#SYqqn4qF0Kbq?rp+PB5nJ)U2*nPqI~ zbxC@J|H0my$4Qo5^_@2(A|v-bYsp%=s#mqt>TaPCpq5$|T9Cw8AQ>Ux^RW@0nGePz zFkWClGyd3r46~SzY!=(XV-H@yW5hD>L4X7TZAb$GsrN-y-CfnS@0FGN8X1}M{hjk} z#EZy?$c)IPs^ofAFXJuu-R0bK&pr2S7mKz-?18F~!G?O9~(y7|mdi|2J zvh3K+dKw2wB=r8yr-f){DLZ^Eo3jiAg4GzeD4D40r#x&Bsw!OTyj72M-OOr03N@C; z#${u}18*=w*ZNbS|%y}vY2IAkD&G0Lz(i$eQK z{w@d^UUC|d*SEJWN^hUMB17Q0qy7 z7*R7!Wcq~_tCeI&p6w1{2e@*rU1mw5!L(gkJq>V2G~%_eY#hYwuN#v`$z;{hT6SF{ z?)w5>pljwNrKjq`8W^}~@QQ1eITP7o>e$`U6^2;4Dy)D+F{Vjb#LErNQjr`L$7V~1 z29jZ_BdPI)TzA4%Wmz^$4yu6=i!lPlDWo>Wb}LQYQpKD5Se*5V6R(7?f9-4DPvD6h zJ?x+jdN19{(C~10{PD*z1R5w!g1$ae!bpbnNkSaxsHvIB@ci>HhDmUt4_WS8-}W}o zlRgvo@8IP(nJ~<r<}dBlXZUTVhTlIlw*2hN&vmg(!0f2dTL$7&>h8 zA#$?>6Ce@vGHqgAzs)7o&u&KudkMZqc)0_rb6AKJnYC=WodCSN&Wc@FzoNC?7&20Z zlrvIbiDQ?;!7@TSb>tFs_BuiSr3hMWbGPAy2dvDly7&|(r7jaBN%%ruXw!^g2{+=|u?~77gj9T(E+!L3K|-KBdHf<)L-(b! zD{}Ng({1x7yZE;X=1WY3pZ}B3hL3;z;}%n2=BiQRVkiTFma^;h4?i02yZ`>s*Vku# zpM%&dE1R>$f%9wal28+k6|cj~$6gFS^V2^aj=yvwyz#$zQ}|E6`m13t{tg9JkU7c8 zDZoT)(pB)Wg>&K}qxHJPUQ&F?>WVes)Z}=WK{0-ffL8f@kA=E5yJgMvs!1)jbr-?f zN>N5cfq_EWX5pA~;8q(JDuuRrTX7mh`EQpAUJAyV2-7%}zP5Vk8&2V1OlUYM%_Wv1 zES)UY(pq+fe#{Y)BhLXX}POQzGRK#^y8e#Z8RhZQ#Dy28MnKl}?&UcCrqpKXt^zPnXVoS%}QdoLn40Bnr&@pRT z&0roQ=Oq5ORk5-u9PuhNsE)oB_aS@nemIQ-9i5>E*%{H$A?(VW^08kpP?XSuVX|c0=o6*kP6JAj^=civMSnJ1P7V(7=v@cG z<8OI0_0NRM*KUMUXU~NKVv{|16TkMg4~AuA+OK)=!O+X9%m_FN)_IonmoA<66(OBJ zFgOwp9XiBHp?4To001BWNkl48)$De?( z4ywN&t@LxP9@?E}!c8d;4TBPSNjo~DE>^$GY*1nGoT!RgRW0h$n+noiF^~)~5l5EW z5ntzcmSH))irje>=b%-5P-K62@7_*!9$N^fr-keiTR7Jq$GRi8>oTgL<72G+G@`vv zMvO_SGfi72<_iJF9fGcB=wG@B;D_%^9?o5&;_W<)cB8z|9u&)ox2+jh?J#pVvM`Pqt);fZ>y(8E&{EfHe$=vS3faD{&DDNuMXEGI za0z;3CEkOKZWMWBmrNabVy$AywG6RYMNzk2w%%F=jN{=DvdY3Bhr+f)@^x_?71)t( z;ZCAWYwc+Cm6YF)zvZpr!3SSwocAC7@n^&T{VV?=T*qAOP2cud_^F@zhsK?EVLdTS z6iq3rkG=d#_@h7iOnC0uXTqh+R}hJ0!oIPC;jzaa3-5p5cZU0jPydZ$$HFIneJ!nmtKP4&xL*L2l`!q{jZ0o zpL#w#{mij&@4c@Nf9FR&9Pni^%N!>(jaqX%y@Plf+Gyp=56q9ePrDHHEwe%r;T6(v zee95TL`gDJ5U>J-UDKiR*4R-Hur54@v@){iRxypN)=Mva$@teQerj%xcu|y31Ow58 zETSJpc`Vh9G~0G)RspEe$IL_AA$=gww&mV1qg^RR)&uh>F~w$yux}U15x2Aq;>i-F zM~WA0*ma1o3x?B_DZ*aN!Qq+QU4V9Esf5brYGhU^mJ5Ocl(4d0AI4LUct)15iDFn@ zE>mt%p@}VR>qx0Os%CzY6BiQ2bV1ky6B(2$d0W|<+wo4~jM33iV*TtfG0am>e4W9* zVjSb($e!@v0}quKmO4l z4OgyR3nxyVU|`Kdv%14Hz6DP{^DMjPKtAZJ(qYbmx-T!>;(w= zGYrHGA{T|hC?J0Mt}w)=5VC?PF%@*J_3qZX_@;K3;Z`yv^dlToWYkW?nlr3|*Rbr` ziRKkq#TS5or&w4pT!cN(IPPMC&k*6s#*W}?m5ZyPEr5!0v{0Xhu*;r(wU1y1;7lGR z`q0Smx{L*v?P#|qr2@1-_~)kHo1-=BD%9kIog?f(#RdR_MdWaWSxYmQIhfQD57er= zfuRP3g@7UkSvU;YH4hLnS6q8cszucl9Q&LIEb>A~f@N<3iHtQ#1GpJr(;A7Gq=Lcj zc94w%ko4Fp*2EsHPS#j<*%n|{jsPJHRq55`T9y1AX)4|-eNrv$4y7B#$}U38b8N&b z>jgctBEBgO8X{S>Mjw|s0NRPzV+A-C;KXI&B$#Gdwogyo2!Hg4p9-JYx^$&&jy^nm_7Q^rU?(d+?Js&#rDB5HeDLYxpm-xqG zZtIj7P+iNfOxfabyLE}`YwcjX$^;YwXUC;?C!5Nhq)32~n-F<_4SEfiDviIgpfg=f*_%t055iU3d6688_Fke5hq8AYdA z)oD-(4gII(qDA+#9jIC$=2l`^d8@nhK+xQ|V`m6^s?Mg|0TRSh z@LX7end1tGBktYmA8S;BCFM7z_ocM!FJ$*GToZ?}1~&!fOD13iY^5dZOS-vFMAMB8 zP&*66u$R3LeVps)mYODX$ysTMNS#+MhUcDn3Y+$&aP-~>!$17V|0%o;**wdna0t2i z$3FHk3@#SJ)6YI1-uvEnU`6w`@CU#B$8dz%&^OQ@zWW2;6Aq4!gzJ}1hiBpL6ke)6~%L%UlMSGQq} zvoTn;Yxg3{pXd%Q6s9?)w{b8ROXD!0crXE1AOB}S48p{L2jv3bi%YAoD@-kz4JxATCMyb=5oAr+f zCL3hPJ+-H)#4xqhNcHo%mEX9~O4F{N9ZX>DaP5MO%-_UtEkg*}k-^T)OoxeyaZ`5f z-8+Uo`4Izj4=c7eJo0cDMFy{2CWz)IWvB+O?Ac{9xx|FggPEwz+-9ez!sPX9MzoLK zb6`F@7Ux(gH5M<0G9+;{IihF>})g0afjq1>Hev0LLVZ}UUrizdj#QPwdEQ;`Ek zHtx2&X~1h0;;Q|CSD_8!-X$jydJnVmcC%BzSJCC++Img&Ws!0h(R~%58%7f#;dRO zp7rVw;i6hrb4amndMEjMQ30B;iczT5XmB9zV*NiaZQX<@_&C0$+I1^jYKf{Hpri{C zmqTPcHYgFdY_Wd;Ks$Xb0-J$z*FKdi5C{1VbSiihZBm>bBi=Z^DD=P@c8dB=r&e@w ze(Ho1)skEJbat|tGrMXnb3MN}ORpl+$5KKTR@&`rj`E#xzywfbilejj8HHJ=I?=bn zZ<|AyR6d2#M$9?m*fCFMg+BylD-!={5|f2jQ*Ep)Ctaopw>(ho#A!&Zvq-Ae+aoyM zX+MKDak!)tG4wuEN4Cz&C=Vm-^y?D&XzZwl>N#=iIpL6Kh#qWLcY2jgwyxF5Elb$z z5s7L-5xZ2&RpZhDVdQw)B|=D!<`AXyS?QuvOJopG?)2Tb*SBHeAo{8@)p1zI+Hy3SDz}+T4#+~R5x{7?rXs` zK1&y18zUeC)s!jXzCuSz)+^bhHZw8jFMJV{uD5?M?AbSlP9-0XAA34{`OiKdrl;6Q z0S^6>zxi8is4!!M{P5v1f;_Q#1bCoH6kxSY4XB!xUH{06qyVa5@eDerI}V((oxw2&%-!ix!zp4>#Jh;&Yv~7^66FfO0Wk$S+yh6 zFHkAm3T=Xmg}9?yt0j7QCb~lmT!hoyO~Sr2GWIIC7MUd_W3o8KAc##6Nq!%4=C3@7VgV#O6#hAg=M}nCMbQ?=#i{_{aKowE4S~HdEU0JB5jfdVf z35tsEcjCsNVr}9y-3Xy%QI={S2nn7{0K)qN*qA^5wzr3`J^fs`F*zAN{&W9l_=~S# z9mDnW&pl_8`QD-7@YcuP9QI&ovq&Vt0is~4@6Vh*75>5B|B3LnH@`Xj$p7%)hsPfO zYvC`Ev)>rM7XID8{pIlF6MqGVwSouiUr`T2LO=-eaCGv5mG45AxO^s@ES1X1nMXBC zmhfJ4wW0ywcLH#&{YjG*F!ouTI;RF| z0xu)@tf&-&Nd^kBNOKmm8x4wtt8TJL&r7sNp%Od~+hQ_lKs)+`jQUZ?Q_+91wJo*O z@)w;llo7csr^-1{&4D3 zISM%eE|uQ6%!Y5_Bt_Kaq>@^F*e5~?5p@xFEg?mUs8B^)BehTeHY~4l@Mwji)6kE0 zeRCbNXy{mZO^es;+nRI zv7J$D#_}bW0H%TJo!6kJ%46MN9B-YmNS2NuVIFO|Y?CF5akUHfqYOB4^K$z(0$a+f zy0fb9RiAXh<@&iYO~jpD)d|pVvR7Vf^3aCWt0?qr?Eq4Uw3~bq!cZ+cuWqr`KzN%} z#c(P)46&1YDG&3qScnO$GrEoLHBMu@oWQ7&4)?q7drkPB@BRL8b*2!$?TwGx$d3|M z4V3+3W8tI!<440o54}D-i_Q7<@o@_gaOB8Qvx0f_(MQ7IAdw2`0ZoM8^MMb9k&(UO z*^?*2RVIQ1`}aXadcyF5vG8L*_Tz*qcnEI)d2pr>4jnug-uaw{$JvP9gOER17!;E5h|;2WaJ*T#B+4)s=~P1k`8S786^Ku=z^L{!?>`YTG?-<&?LVd6vc>;x?D-l2(mm-Ob#{D zl~5w_8!s5r4L8D^Jg~NtpDhuE5Fnu<=B@~iN(7-*SXLqEinszPgE%a81g<^N17#XZ zvX}8q)vv!30%VW}cXy%aVNmN!C+u(_bYPDBD3+#*pzHMf>P=!+I!O#XNr~0JdaP%f zP}j;%@D2*& zHteddYi) zjcOf)Th>*=E0G@?XH-b^!*)KBZbxxylJFo&ik6Eui7I)TxpzX?)gH&pI=QROkpQ$< z^3D);Dz%D5f&isiD#ooAVfIF~Slc?E2`wrQm8qq&TSaVj=1u3VWw>S!aq3dKh;Z0p z)3bMoi46R<#F1`AYT_%OSW>CP$|iqP+zEh!9TTS_{-N9yAZ6VmeDan%VAbO~HPMOl z9z>xkuhBeCW0Gl>k1}ou5AyU|24bb5CE8`(X2rIlXvG6jgGzM(Z}SZHJc>NYWZPub zK)?5}9icXkldU(x1cE!E094wHaK>zhKmc^7{E8FY*`eu9n<3G0I(y3-R56$t5SgQ z-gy#qvuQoERE#Y`LP zli+S6q_hE54zszrB%U^0tBfF)lq!=Y3j z9V^bq7>KoHd}@fZjorFCsyXChTFaeBK1phT@ePDaMVNSvGGn*^3k)V=PI?8hlSz{} zI>muD8)#NxwtEs8nw6K;Ga-sx-g>YtL9BdHLO4gL5>Z!Ek_MECya1Pcnt-(ux;64| z_y`h923~SGVfjAcXR8OUCYW;d8kSJ~((+Cw6SsEpCPloEcvE)l1UjgmXR5Q>{Jr6) z#5=A$b&I3Tf4-HJO%e8b%LAKqlfE|qaudxQWf8MLP%PI7i~DNaH4)I8Y7`ZcB2&&L zoor9nMwmX6#M&|n134*Ar7$5=Sv2@jRetg~;;p5LNvkViiIf@t8O&J(=h}?djKK5` z?oE3f)<0q?;(#hjm{9*}<+`#WY3O>orNhHsxSM3|;a}+^q(ilv+B( z3CURBojmH~rabDrs`c2G*N8-Y%|aqV7xbq++FyBUV~MJ1WX6KQ6tmxB$DA zMDlYXzV>S@lNb$*dbN+wlLAu7G-zV6mbVJ5Q4c*b(@xrKt@S%J=HAl1(z1cDwN=oRV_iLgu?5MEQfR(ku3I*<9rH0O*Bn#)i|+Lz4TuRpjC_%x#c}b zV`)C=sEA6~H&JNvrTie4C@-;N@`;SbLq{%-V<@`B&Bh@oJW=d!nOW8+wDodr{M`CGh0mq_cWg~Qjw_SK zd2RNsmT<8hUbGVu=Poy!%k7=6H4@UO&5>x-Ptz!cCe&>h`}GUor8frGiiV_GZ4;dn zIvdjo0p5Dm5KkCU_tU6rMF+cSYk9gXm)J5MP=LA)^nFmaRV>_kzFImMT-)*HWn<#o`!oEA*aqe7*(T;n)M>#|3WOA}{ zvs~+523}KOv?U`Q1#)+|%;IG#osK7AkvNed5!6iMYqQ8=T6Mwms&N!zaSi6G!;j zJA0)+kud2a!QIp9xnITym3hTf>wigSNn;Ns`J_Kjci#F8ZoMa^LE+6xg0N(y%XE^q%dUnuBQX&XY##xuFV$`hGId&(qZMMuwo46_0 z97;6B8j;vtCAgf``%T@XRf7(@7I;gY*Lo+$3{}2&7w@XJNquANfWJ;u6j?^(OGTEN;qAYAF zk>M*>>wMs65!+-TVM{tk-1yEd05ovbfjZ;d?eq7hP$=mm%hRS_9{7K|FJ-+wO|@K9 zmYs%?p0Sl*_b7d#uWFoiKiriU>4~Za9WJ$TC*b#`^mr18@)*5 zLc|B9sDyN?3zByczI7|$#oTg#6QXWF5&V)f;bpD5ksw77RDz=U7Fkiz`oym*SFlL| z8b{j%PE8~Viy-`v)k|W`P}0HGW+hGtDa<=GsA88O@iFRUcFi$&CP1@t#jjq{C#f z%~xvg(#s}b-TXU%f7<9XXMgK!>iWyNR_uwq-1FANSY>NEccVr*wui2^BNp?8V3 zg{{(*PJ`OwxhOV?_5~o+1j_X`eXICBa8xU1!YC6z^5B`w?!?ncK5DzLs}|^MD$Qn9 zFRx3vj!kxM(xjX7<8U=bNA2S@QK?`k*ucfEvGa4D=4%7$xOt4VxT;HP*FVCh_OHY- z?Q-n0{`3sBLC)G5-mXMLbkB5g^}JU%RpUYJLTf%%o5ZOrH#w8Zh|UFk?(-ruWusBa zznYme`OtI)R&K_8EX<;9myR7PNkGy+b)MXkrAUo7<=fS^Xum9zDI4G^iyKLPJVuw~ z`YKVKro)jWB672Jky)pRl)MfL5OR8=N1M@<1#DXZdAkdd5NMf(|6*QecxDZLM;m`-@(X3K})Y9 z9fz2P4&bhc#_bFo!9@LS0n!9-5h}iw{eK(q6Hc@-33PDLf$m57T2M}sS_lXx2@#td zgnpW6k(VxAfXK`l!4tzL-l4+UDmHL)lx}@UwGYgAKP=4O{jnE*M2QL^UMpx zJ{SHoX@>{;2tlwGy8HKr_kZt)!nZ&E7Iwq}rmVs~^ZTC)zxCVyZ@4sho%}Myp6Mh6 z@H@iyeed52qXhr5AXS!oJXG^|rXJremm=!?OV)+uwj`6)PS7JUN7g^;a68MT&x?Cj zee{gZw%66j(gJLik0vME07sJ*_qtYeoF&3h*yb!GvZ8DTOZRDuBaP3*fVwEAg-W;h z$&M3tfkWD85n*xdemGZPvtx^g=gUS6@?4{njG!mIB1SgHgp$+JM{JfBbt!MbC}WRB zukW(;Pn1?qZ8%rIj+`^kje8ebDvhp%A9kHQSod+PMeSeviag}vZc+nlr#~~itFBA! zY;M`72B)Nr<)*Z;tNUE|(wF{>$c-;p2xe_9789;w*>L#q(eTc9zS9)sOKgPkwXc6Y zdo7{pdC6u5`5x}t_%#Q9j#%r6drw?=#u zsM=41%2aa-ntfG{JjrI~W?80$n~5zwq!O@-%n6mBCIJe?I1!f+JMaHkjB*tOhZ9YJgI=;VEh#g zLC6Kx8v6vu-e(bV5DmPtx9KOmxPFHhqm6ErrK;t*~)usdrE+v*uD+3`#EXoO2 zbA_ADKiD9ppa^?`E#21OF5239jf+?QNz?4Ng=THK{o9?evaWt7qM~+K=vKj*i2#Q{ zc)#qShaL)__{6_qw>G$J{)rRMWI7<$#Nd~R4Oq+eS*x}o2>vhp(!UH3z5d~_fZWu~ z>PXYo-4Qz4JHikD?T>`FKmJ(wI}K|3a9anGN6at&fF& z@$)~=@_ae$**hA3{$G5;!up;*ecJlGt5ZsH8}i>YN5pUI3E(c~WhY$W4PO~6S>(>z zDNFsVXX2L^;MR3*N?iRDF^mYlB}kKrm^<~gojz6^>k!2-u55YDSaaQ#h`I_S#a0Ft z^_MtW_*vc@e=g z*dgpHCy7rZBCp%Xtv6YmC6C;*I6-k11(azY~K77qnq4FnN*5tsAl&xe;^c?ntQ0-J0c4i7%~ zXy_54m%@tyDU&jJ8jBE&k6#a;{p@GMwd>czLAKF*@U^dHQ;dTU@s%(-G!l9qYPTJe zWGQ3Pa?@QD!k&>4Rsw^e?ZPDEyDi*cLk`g$P2gH>_V*2kyY9NncD4UzgSrtK;h3g4 ziDQ6``-h0!@_ZY)b;DQsHm40^5`BeqA}VQ)mA#jzzuSk|B|>gYUNvE5^+x|{f;THH zZ?e^6ONXjYcDCah+gVmgVz!j^Mjvk*VULL61^O&!oREk)3aGWbI9U(Q6&JA%-c~zL z;tO$GPRuPbTf)AoE&^hXKjOqBn=Z0{rpn7&r?yz8Z8U16AS|P>n}=}ELljmZvP7&g zs^3neIPFWS)kB)0OZwR8zl{-H=-9-7F{Ctv#A1LYV{wiMk`OV;nyXRNSbI%T8d)YeeuGD@b`b>?}aN@uY`rg`LK82f$$ygcwhL@zxyNM z{`>DGowiwXlg3FbS$_6^{n>B@Fz|0f(fek}acfAUW$Yczc2&;QK0{SD=XE&%vrIDQnrjBTU}doSp}!9 z%)D=%ekiSfZ<%cVNPr+~7_-VU%HC2=n=dm-xqXB^RbK-Nf5btHOD|$Hx|Ro|x>j$Q zd_+iLi>=lg%V*j%QLM3Si!Bxd8LMnnMdrutvM=XCgngN%dxpW7T_atKu$7f_DB|kO zza@64pM|*2QU{9^C!(K0&I=cr!3v{@{jZMogiVE)rxxq`MhD52Cd$-TBVi}rd=Z!$ zOPM;XX>~HK^SDvz+wx8@Xna_YS+{t6AV^^FMR&<;oyOL*vIts z?2aTHksKGDj8=Qb90-?K;UT9#$hLSnCguVsAwjd)m+SGmD)%J6NcaVn zXez9fZ464SY}a}^LV?T#MUCJ|BqCF+tO_VSY~=vWh>LvHF2cU5v`ySPj%A?-`8763 zhw`ly=3w}`Y;s!Gww6Kyu3c%H&?X}&`nJVGFh#5+sl_*yxud`#*k~ytpvmsoAZf7L z0>CU|Nk1F`jFUz7saO-rR?3kcmUb=wl0#yPgYnpb2l7)ySP41Ic)yn!ddnS&|Cu`}KwV&u? zkG(kz3=A1J{lV}3-f-`|_k^dPelq;hzxp@f$%&R(Yn_6@OT>BHgu-~HWi z=sn@Fx4bpHh4UN7j)i~!@Bd?X_PG~Pd_Eb*ua85R5w!prZCtzx0f{&$;(qd#6XC!7 zmtPN;FJBIO#twxKe)kVyR@ooE^yM#xr=K|%{uuGjYhL?6_`nC=PYiE&M7zy^T(i1q z{511I0b?HXKTbDA*y1>?D%BkAB(6k}X&&hsR{WC$WR?|~Cflu&hU$j;1T4P?;;%y- z)O)g&Gv)!hp^bT@&uN1Rb;4eqLyPycH4B3&`d5~*x0qKGpKTk*-l$9gN-}lw|>ys?oib`%Q2-&lU$& z8w9vFeCR{p7vB4xdE2P`=-o$+D;HmI_tCq<@#AM~18d1fwH@BOzwTVim_Ov6iM+5qAB~M8cl>E~!C{oHqYR-1u6tfQ1!GbXEhJ zyE<}ghX>m?JA)AfV@kR@ZKjgeC!}Gs`O-XP#0IlthbA}!SB*2x=DNA`yF%E-Rcr9+ z(5#ppc*bK6yU}B$fuh~|!?8M}hDKq;616O#%>!I%M(1Y@AR&p7ZUv8x$zCd1~ z;&=V1u0p-e6oHjo&c5Vkk%?p)!eV@%GSLe}G5KDW?-B#4C+$V+ovAM)VOMwp?Y&u; zLEHe>E+-37_qbWMs^tSwSGWFA4firaWWu#;H^Q&|>VFQ;KmS4)MydIa{?Si{d+)mk zh2}U!`kIMEy4h(*gJy1SK78`me-p0!DO0w7db zb4Ad_U}&O{?qUT6xXk*dkk2dbkn}Yp!y{qup1o!jBTJi3CKt)srzWQ%09s|KvwiAz z0fFGH7HzG+ce~dN*Qv68OIWH4Y(ZDi9^4nm&+0 z0u)woP0PK#CawL=&_D?ddYSBdFpHIywA>dph9<91WAX@5U-jsZ>1D7re?6jZz7otJ z(&2ParWgp%YbzOUuIODM>}rr~i8TnVqxkQ$*XAmjPE`hpI-NJl4&cqr&e?!8{RD@^ zFFo|+0Oejq5!8lHw79}GiBei7f64dOh78Ut%MkV@>6x69*H}jsBXLYg*~Ft*=VXis zUF}~y8g;WZ(MFvsesg3jZfcEFu};jaGRdnkpci2BR1{dFL1bt~~)`+^~`Lcr01R>K|S-gn&=L?JBH-7Us!`_kMFuG?X z{O<4lPB?w$j49{$?b~O58Gfi02@>A2klwgrBHlhW60soM>&o0h$l}@`nH=k{GRkh8 zX@e9R8yPtEoc580Cg>2uG{e$&&OAUFuTb8K$)-Vmn|UQky*y0Bv3E;EOIy??=It;& zF@pjgX#)NbM%1Zb$uzmq;M`2Xq|pko6VqIoLYut6$`<3d$qZUZwkw2P%aGo_UW*yi zw&V@k4ji$tpA5|9;$m1{STq^CCJez#4eLf>F*48}PF$HX&P{MrQ z$HsB+Z;1gg4bfPV1q_Ub-ifGZu+J?iic}fz%hFQJJG2@Cb$ZzzYrv7WL|K%(0*AVU zb5v(>gm-F(21lLmH`B0NFwI^F=nsA5BXI1`hgV;HHGK6i{}StzuY~U24kqv{GWAEp z``-87Ff=r1%)*Di|NFz|QIdZ3Fa9FT;8^q0D=*uC(gb|u$kFh({^s8ddq(%b-A`Z@ zK`a^wiX7KgA@GYRQak9gx1yYV!yDcZe(MkZB+Q+7C4B5-|FhxCGK5}MPxs&dFlD~a zCXe!=evEy2`}IM(#?Bzfrh7gtOwWW2#7-isbPLsPyVr*;HrKv~u;=00ZFx5s` zi&fQuUk4LOZy!o`8Ig$ovfXx($j)-bf>pAU3#cP$-OXCbx3ALy6pqZ{m8 zzd-qGrLTr|93x1*>9p(z*{P= z<-PY&?9JG!TOIo4`Z=erd&e&^4{dX-La_>Rg9BdGKu&8he@xn#WM{w0y&x?XDjv#0 zr=AfL55f*H=)wt&U@Zm4&Jx`E^_itG0|&jr7+OUXF#SOs}bv8+_q6_@EAC{>$> zvWQbGpaJx5eK28Shiu`!v=ZiSOu4gPDsvmHR_QoyOS#o6dfoF?hdx`mWv6pxL*&94Pl-KaV2D`+{M*AS%8c4H8a9^B=Brd=WC{kf2zz@wLnkJVBJ8qcL0015w*Xg-<0wX1p~Ge=yrFg?mtx z{xARdABV|_i7-#-0GXH#4hPoRa{Jo$0C*i|C{80v6FJTCJZJRbw zCk*5Kq&z0*G6&^Rd2{J9_Ub#6zbE50u2A(ndF<=Rg=`oaAOfsSvDV5%skmeBC412R9zaObGmFFt45dYn>@b*OeRC%RWBJSY_A;O z+92%nq8nPBL^@<`(1$8fzl};INu5LFCfAL$Vzl4=c$BNby0!f36jSr@ju7_hlEfhQ z_7lScF~#y4jsVt8Y9GI4mdzhkf4srHbsT4rPMTr)C{C|^6gC& z7=Y^U6nmr%x%+772Onf{A*(4_K=?kp`jzQfhgsU((>G)jvfyg5dPH>aOAsvYf8hS` zy4>psGKU!)MBm4@2D%ObRy9umY)Ghls_Jta-HHX1ME8sFb)jxu9?Q+sjy-rC& zt2lr7FNsedVIcb9*x{Ycfl!uEvrBWx*j*v6u~prNTOq_A$0!5s>$T{P5oQ~=V(Ted zlu0yKu;A6-Pv9K}lr}C9u)6-_vAjc(XyVZe%vQiOYxAL}L zuAvNngrwSVV}^ln0|Gn8jBhSUQu;vH+nLA;R7~k~q`3)4me|cgScgS~N7Y=XuQ`2U zvK0U(kBf*2io`S#)snT0ot{;xJTLk7{F{P~_nZ9{Bodjgt%MvdBFZ8hisUH8TLEVi zy^%AVyien3RaazDkcpUR(5;Y8jKB)STLj2fehKx^N>J7r!Y`d>23YfmH7%D@GubWt zP;e3Vol_ezaa?2^wE?%%{F>l!Y(fc_d2X#wewEDTxEgI;Q6DLtl%-fM%BQxfjbfjI$^II=e54su4lVL*r{z7mIuQlvLTj&qM1&r-&E(s)C6LtBpkbf zbJ_3&F}0ZQS7bkyV3M(!3xw^419@QSSNmL#6zLkM=0Zf-sTXi?m_W9F8RVFUf-kEo zS_2{1&kyz^>&K){#G)3a*Ls#NsK&Jhjm44%ev-4#vs{*kplop!J4U-SS%;EF_1q>f z*Qm)3KQdEPKb@l&F?SbpW88pUB)B5dGA9#fp2c)dgj>-bb#EK7L^vBj^j{8UaF3ED z^C(Xr=_Caac5q~OnR1I z;ezM^C8!NPdaAQ%>0aiy{TOgaEa-;=%Rp#l)i~Ezzv;3abDRFG`46(lMn*ABlZ-ST zYE-L-b-Z@~niRU()h*GgQt2=)pC zeilzqEg@&Y#$}$H?-fhFu93lz0f9{}UUjrGu?Y!`s{-*MSro)T7$;a2Wn0Vy5p^Mo zkU|4u8<3;A-n(;OiRwO8iJW=}SNGoIE+N`J;QhVzp9npKI-YKCUhV|jX$$z6sUyT% z%6FY!s=gQJE<&z+oLjf|;xu{b#NDp!{&qh+29dS`1cCA1UYwX>CCH9Zz)4I*8jm6& ziftAFHt|aGK+v%1m0L>&6Qb3f%YoQ zgz#!x4;Tl7H)FDc6+)-XD_P0!CjRUWVV4*Lzz#s{d>vgzv}%A>;YIc9(!B%9O%u)HDWp$;AL9yrM$gwK(&4szphvIMU!X-1+vgM0J2$YQw!P@Dt zS>GCal9as}Sl7v6#~-`Q)4492$kYF*c$!$PBV2WA=l$>SS&s(^U=rX|luv(WAUbve zWf$RSdiUot*|ja<>s79g;U1^Pp-x!>Ner`g18#j{);=S-qXeU&(_abh*&(T*Bjp|s!^tor>9=_C?nqv8LiACp$iwY&6&2zND zO00Pe80r;FVy#omql$_3DY8An=A2AGu^OjozgYuMG_3<{|?l@srBZ`8eBAh8c1QsJv zE@uO$sxcAi>iwpZ8vwx~8}O3VVc$J@Z8EILAX$?mnaFB=1kQPwax+j&Db9@9T6a{J z7!#DAix1Xhq*KTjBhyU~Q{%dnnIx5^jPK(}y(HUb8MY#Yu`s^Q;nj%9Vw=Lo!L0&dV1e?pPD(P#S&V7BXJXh6ANeo&M{4oPvL8FjqZG`n__Xr(vx0 zx7T52jv6a4C$m?^E!Mw8eXg%bkBRl|N<$~UjbBu!merD2<@Nzt!}#u4EDVB3>V?U< za1D-K!*-t4cI!ul5XO6vaY7L7Fx;IFqdi^5+}XrKMQ2&H;*X)d3Jsht25{{te|!|w1F+&%$b!w)xlnG7@| z?C=0{Amx=S*D+yJa3?-SPNHa!`*1ATgUJ!v5@&~f{@f_{b??(i>r;|8T)^aUp%5p=}DdljYA%%#f^b_N8EE?O~Ch9!2%>!!|a zt;C(oZea*SGEzO(B0-M&nhx9Z)@vz3=Ajk(<%L|i{Y7s3{lJ;a0bl}G}ZMLjC>26mD#PO2u zezisTFT$RaVjpgOaeN}IKwM=Vqwx_r*Lv;VXxK(y6%q9n#=mwlT_q@A=P(QwR%7zY zTwsWdW8HNgz1S4>Sb-VJB72YHyI$E1pId{4_na(S*N6+$&F^SmSLkJ-pn6O4RAd6X zdhtqFSq#R^*C9h`Nzt@h9pcc#B`tPm~c4@@rw%pDVZ132< zL_^;E>}-7oZ2U~b6*dR!l-)9(WH<|5yl@#$RERodYMHr*7$Jw*>rx6w?VzINr-8T% zgM{ol)`P$DiM}?%4t9#L7qcDV61ME8A+Fl7QIQ3TBJ8~bAwM!2R#Dox-aR5p^{|ZHS^RgD1m<;omuQE~=;1s}GPV7i%o)h<)6UmlFPqQ_>lm2EyAac(7)e#B1p$l8! zEg*(jW9+m;U?sAYEHmoDTCKajmu^WbSb3ASN{3gefE~$?rE;&Ye`ZCj=rB$;JxLq?5XY zlif8|3`-F96__DmZ|jE(Wqs1}`evZygGdVYAOe=}pj*qWg&X5H!ZpOU3)(4)RYR+X z!_i5CuC=$Ryq`1BqCULs6$To^9~Uf?3Q57R)q*$pZdVAq@JC8ZHY^DPIPPdqNfGv9 zYHP9$>RIvH2%7c3ccfp5gC^#L6q$6`3dBzEY=^Kb0OCFnN}gv@o>-(%BYz@(@oY@c z{fo-)Bsg28*HjW)5`+sl42^>*vS*iJ&MF1x2}0F{mz_fSI+ZnGD5KO7JG$!eMz_LU z+LvQ+7Oqc(B?f1aFv2pak*vL*tg^cFjf%PR{`P}Fn(Gxom*2IN`pH_=37q&Ei0TZh zy%pla;5KC5+Qz%ABd`%i^>TCgs#I~Mpj|Fx4Fd}s3gE29#~k$ZBFg^>#3IXh3Y%`q zMrCV<6ImHIh=8l5gyN;;Lntrz^kF7Twt6n(hikNX9wso$D&PD}jPYsVFj&RYcjZ#3 z3Q33+s=NzkQU!Z|Byfw&VTq8n+T!~4-37vq_=Dcfx(`j*dvGue?v+Y&8KnlmZgSlf zVIjnm1uWsPfGVN~1ZPqvX3!xnT$u|uF5_;GIg?!NdqCg=Oe#kQh#NyE+D=3XOwuSS zgosC)XZ3=<)IO+tXa!8fQj<8DHv+XIWl^#Y0g)7&>?D?~yn;7i95TtIDnH{AuqUoSn zY!QNibBy_n$$i|jbPWY!7-BoYHR+^efXHr11c*5`jmfUWnlMRniefm4Cbo7YV<|`b z@>;30YVSp-c9;#xM?`3O-wgnA6n^!*j4UAX8`;foP!kz#w5=*+3BM|z6~bCOaP7dv z^6ouE3ng@dW)$hZpciY<4IkUiShhN!Y*4M%VYpGo@x8hht6!TX6{llhq$ljzKZqPk zv#HOZo6Reor*g|+)9o%oARqXlDqm!m5L$0g+Jm*&N-`)XG5?{px$1_ji4d5fHo?n>31zpj+-sX;U-gQ4h%A-x9i2dA)k9%V&s@NUY>t(R@e)Z* zRpT-OSv&3!cLC*_@+kMTH&6G*2ysfSCrdE}NLfKIGl2q8`{>&0jw3oPt;Y|;8s~fr zm&6=ZmtzYM}H^!Jhx_6Jojgrz-Ti{6ybN$Ly3-#^ZwOcB&1O+Wn3JOnvuArYWKcvY_ zu+S>KV!S1=tlx?)zu9rZZVl6EM2HK{(S3Vyw?(FAWPNKujrqIRnHM0jjJCT%n3r(! z;1mcp0>?hcG9ia-zqG`x0C+V#lL{vUQZ-c@^c&wq0P1-W&f_w&%G1Pmo&brKc&QCJ z2E;Y3|=6J<XrQ1>r_CEQ}R1x(O-JvS2mbn>t><(cUyk+vFUpjie8{!h#S%ve zIZZWYgEof^{{r^8YYOShz2~gI=`va^uM#SE?rwDm2+18c3>PGRAq<6u54dnKEW)|w z5!>a(WP*>8NI79|k+9mdA@gSE))&G5z61LdunAd64kH7Urkt;!>_3iK@}h{XHj#E} zTyrH^$?a|g^N8`Qp`UTLkI)|dJn94#7E%P-aN*3kFh_XexQBu1*2**C`s)To#!oez zb&9ZSQrv&=AY6NTZ`^VwrO{Y}1~n+EsaLy3*ki*5zX80@4j(0Du%8w%u`06U$`WicqbwKRf6E9`Q zW7iKggOiaarkMxXb1zGQNeF??VF;YIt7JTATkr`skbdd%B8rg* zDbdMpX>)_58V^K9lJF-(CKtrb-+E*Xvoi0*=O9*_x=9Z?_x=PZteZ|f}{tef>d>2DGBh!|>s zI(M1&$;sjr;*gWr($5$1w^N5p{DKmv9qqi#9#ux^+fDR*HSv$gsH()>lVb29Le+(3 z9G2$JT@D2%7`MQQ&`nyMlvzUTP1GR)*qxu-00Ie$`k=DRT1>!d7{7Qv+_-Q) zbVAg-K`w=#&^Hl}Bca+m9$LJ4?DVf=1vG^yW|g+5$FQ}( zg+t}VI{R2h^6Od6X z+gS_XMqD`}kyQ?QBtBfbtSg$_8VaFHEH}rmT{nel2b>BLuW-+3Pq=Ha11&jbftW&h zgh?rOAnlp51nJGAy6D6xyfeLI-2TH>&nrg-bS$EZ>CbDV4zsjVq&G&_LwRhL33i)5qAEm-Lj79!L6@jVlFJ6KOc(Y*RXm( zrYdbcA3MBK1R{B$ADyvX5x$$M)SW~-4uJ&SOZXBeW+TGZZ{V(akQZgmjf?2A61B*? zl90U1ubvO#%0%dw=^v}vRogyDeeX|ag=thZ(^B|vJMrr!&`SEaVu@k~hfIJAhY<0v?7%K9|aFH=q@z1EbrKo#k7|U5X zCSvU}jBNeE!-zxRXv9OQ8Pi0Nya2;BgHzNR1#P83{&$nam>7XDmPV?uNx}I>D|Gb|Xefl?+eNm2|P$^Dv#R@B->COJfM- z*Bf_ZgEmq~J5CVe*mR$K@no2XL&#F7tVD*`K=(eDNu!jTRkTNlo;&i8pJd+~u>}o^ z^_q+O&xI)v?D?~2!&O4q$p%Nu(tz1lFWz_UBLiU(7-)r{c5l=PM*I`_MBMiA=3KiR zL2M6JnU`@|WH~sOA~yBQCof|8uo&7Qm0;&ed)~Aa-2^ zomC$u14|RS%oxr2F4fPfp9p&(0_hsu>eaIs!txv*m*9xl6M2Mh+d*BVcwLf%N`H6g z!>lQ6y#=ddkg5j&UbRl-+X&twd1|>hu)U8d+W@5wiwiUv?dj`Uh z5$Zq&f{pe$9lvxnoO|^w5goNgsGO9Xqi&`&Pb+41)dKJNIe-3k-Z^dw2-w)EbDBs1q_EX0Y2rAtRj(*2)>0GaE`>$#Q8CE% z-V7J2aG;rnDv!vB={w=1n3V+)b{z7$WxGxY0bw16IOf}N?BZ3Jon?y^6Wd}}#_@9K zVfn{zY=r0oOHub|Ck74tS{PGgaaE1LECTPDLCVfj9UvVUZ z#%oYF|5`7MpeKVy*CRM14vylGs7R91Sl^^$*GeuCYk;i9Uwcnm*n9Y3=p7z36G-h@ zs>+Cyuw6(XQd?OmspGoadcwt*FWM=>u31|_LHD7^d;rUwAqZ_hP7_+HQ6$}JQu@}r z!ps*5W+cK+h=I!tpl8ot370WWk?pQFzYfHN?z{Uy=)G$!%z+4!%d712QND?TQ(~Sp z!8KVpSyh{*#etHHjgUjuzI5Swn0)yRK{>|pE|fg5%$vAe(+RxFj|0^PYkAbQ4v#xu zZYu;t*V27v6LWILf?~G`i{zBksRYDYUpjp;OhVY(;N08!P|U65<%SJP+`^&HgeNwc zaLV~^k&8v_)jJOC32n%l11scZ#bfEphHDIh=aBEuAO?{P-YsBMzK^=nM4|k6?{wTs zv2!EhUc}Q>k(&nWaQb-N0d*L4D)p(`a>PLY9FoJ%K)mc|=A?c?kY?maA~* z>K1`OHBqm=w|)m7)SuRe#;Gra!r4pV`pGk44Hy1S8y6a9oZ9_i3mt7br{q*Ns!tKa zh&%*6zjrt+!age|Oo6d|gZjL{_IGEmO|thV+I654a&=E}{| zR2Bg_%)I6?e_T98xPe(V`i5)Qew7+rF;5%loYni#whE0q-)%1hY*>(G6v3_g<-M)q zL})l|@&-YcFQceDd77C0Q`oGt4V=b=^|RMc=!)@2)J&QTD!WZ0g6a}K< zN;0}y2W|ZVH~D5)2z!jjAVd%V6-WSS1qS@>VPsz)djbLh$w~N83dN4FbAv{BZe`+B zx=;E-<>m=pFo!+&<>O}#&Sf{;Q> z1EzHt)T+pxXWIb*>+2e)W4{x8sp>Sg%=AuHP_r{(=JZ)6^^2hsv0NvFUE-N2hc|;e zn=xu)kX3vA7;{?{D^cZe7Gcy@;F^{YJ+vcV?m`R`*k4pe1dE&#Wb(wB^WixA5wGRg z8dL0*;aXCAn_Oy~)XQ-(4Z*}#hU7ju=sV@Kf~n&&QC#yVPWOaCHo3^Fj!?KILTR6V zg~^Q#MPx#uvOE{w+p@-4ocd5mmtT49D;DSq8_f5OvgZS0m^I+M!lc?JB6pLH-68BW zF0G(c9}2MTgj*XsJVYqpev8#E{1Wdh(?jd@4G^vtE|i|>d!ac?q*X!)oIidtjAQDw zD*IKO6)Yin3y@@#n(3~rycUq7=TKT^5yKP_uL_5j_&G6I2wy(_Y8YS3gJ*0!(I$^f z=h!V@>SOmMoO9e;Pt?nhOxD;|h8(Zj))vDEV$Rp&X*$M+KE}+fz*Vt1_6-!KS6HzZ z39D`K{|o|3AZC&@oW@29#^oY5btMzacFw$^F-$>m3 zYXHj(dj8bea2Z)+JIa!FAgx^p4-I#P2jDJxm~A^)y2;%-#YZ$My7s#?E#z7pg_fZc z#OFAUv(zaN++^)2Rxv&d9izix01w;@p$240P=Mo+ct!2bLG0Hw2oui6o~HA!U4yEp z`o@>ZvY2R_VQ)+1j5Ej2gf_URcIuUulRlGY z8du^EMPxF>Sr3;{n!kE3wBgUtrM|DSI#CB3x32G7sFcQ*Hm6?eLNSW(#xx?$JoelD zhYy6dt}gIfAp|nv8XUuuXU~~Pa!FeWv04?gQTM1dsB0v4Sb*QivAbw|H`Z-?*mCdw zgL?ude7D1ocZaak2sKk66_=^FEs;?5WA{0B^gzhtv{QiR(6Y`wP@O2X+J2Q_ zCCaphnR5o`j0>kPgr%uPlSdi0z=IZC;)^+|8 z@$|RlL+31(GAAyDh0~YV5^ak8F0t`vMH9I%cc>7$H&fE)>T@U6)*)a7Ep-Y%M6gW9 z0!N;Qi78yZ#>(u~uySoGbP;7Mhf|Qv2J4P8abNdp6A!dM=`2J|7GD{~U^=)zWZ2Uf zrJ2QmS)j->(~IG$bA&LU4h6hUWi8_4V-p3`NfPOZa5e`)$t<%X!71qgAv?wfyNzj+ z>7AyJSz@oBe&uXfWIxyR;TT>XvG&ejRO_txwBknNrHvR=qj;3>KXkx}x~+j-yi@NCVDJ zN=1U|pLzK-;+Sj3u`6h>?AY(c{P3ZJdl6MEAm4_)uZu|-y#a|)k zKQT$GZ5AZ6)bs^Jf)-bjgu*4o)tb;_mihGkqoRTXngo7w*A3m@*96`pa z9mTX4gO2ksFlS$3<-#mvD9xYkWLj3BQ@I{C^SJje3nidkl0?)c+S$_T->cv9-yJ9H zv1Y<8<1~bnMyy19IU#zZ5Z1A~4ul+Bs~P)i7Th8dI*HPp?WRpQqlIZWm}}>dvt#ln z@q?Tf4q(UrCOSoN+OrUKi*V555ywwy(kCCuAD0j_U5Bu~!gBO$C(l|)Uv1p0kfueJ zZn=FUA&+csg=MXtLy2v`S{x6<#?~s7W7(@9Uv>(JV44ef24l1?gg+(k0F{th@S;-W4)1DRYSS7MN(J`0Cj8$?$?! z4~)HK2>S}G!!nbA>2g{IjWato$w5G~n7DKzO1%$@l!p)FQBK~HuR}^0=OMfbQJ=Un z3GRELk+`>7y!AtJDh~;ddq(=g{<~PM5W!N`FtTfx++P-HH|y8}8QWZyMV}*Dq&aqd zEskBHicZ1{96Wj`44_e$*3Y+(+Ul(C;CC}V8TVlwL*S!R$4`XG>%?h?fU!vza=A>n zpJmkjtQztnv@Gc=k63$uS`Q)ZdD4;Tj@RT>gjmnxL zTs?}nJQ(TRMgj?w>G-J{-8pU+1e_s?{p)x1DPb|>qp)!NH2rxl^rG15Vqj(Ej3yjt zxyvH9$1#xpWhJ_Ze>E{#hVMJdij&X*dBmwqG;<)|Wfb#IUpyaPxjK$05(Z;UY?KH) zT)P|+Rj+0b;WW7DCb_f?yk14NKY|6$!*?AH2Z;kEfv!X`n#|6gx)xq~@n!7T6|Pw8 z-)%Y~7|5=`q%w>p%%QsvBYl8fr0p8N7T#bB)7MsOy5odh6)cHkxGs|jZ?*!{w_$5~ z@W>&y%|ke1L`_=vh*Vo`qRJF!gO(Z>`?JT-urxaxR^Vt92~PU?L;czC`a}DWK^H?G zby3mjdOAWR_2H&b&FnjUpCX3JZH>(}3hmwD95Tl*J$Kx=m_=mXOCq>=kQG_~0F&Di z%eqA-w~~pYl@@EW9v0R0w7MqsUtyBU$ttD;yM7B7RR91W07*naR38R^8r3>L^Z}Mj znH#g=^7F^S?8~p(7HRFIUtN~el++-nO1J(~8&nSl0DtRt3D(62nJv}LWrjEI)8)^Nsfv~jJi z@00KB8+AXEz7_}alPJIxt@U>j69(f4Wb6egM?1R0EO>nqoz}A##={LZj9%s5B;Meh z8W{myME`I%qqq(gM4AoOt2oa0O4-u51S@ zajo7(aH|_#S(j9`N|#Q*%HJ6$F2c=fp%-VveMk0(KJ9DF_M7Gy$cjb#pho3%tvq-7 z*{%@wMvXA!MGP`Vz@URD60?XcI`IfCDuzodvwEp80ba`@okAy;tQ0g$#Km*RiJ3vz zP+7=yz@hG?&%ce%d59RF`2}`XA+`G7O*9?7m2IQR#?T|_`zUIXaicf|onaL*3)9Hd zT32}P(hQaY*cjU<$iL!Yv>!l9RO=(2=1;V*qPFl)obHvQsiUX|++r z-A-LMtlheoagwj~yDsr<^q^LIHuEgqMD?G{RCS0zNI9t~c9~!KMQC-avmom&7$VuE zhjFY;UOE$I;7ogGacPHH32@88tYucEt706~gIcxelx$v|=rRfaO;@7Mwc(a>g{mp8 z`ZPqXFx(LaUw1IHj}bZmnYswOc1JojzZ$-J;!1dB95G;9FBtBD$t8D=;ifClhMOq% ztNtwws-#{vE=jFcNhdY{YyK$47k7`eyNM%jG-9q}-gxrK7r|%zHS8M~kBG3#;Z}_) znma8O!~PFxVQXx=LtLTi49Y2)t-17=s;NQjFs=pU@mkRr=^}Siw$lL<>HEzLoFYv zl0axhTFZiXtJw3Ne)$Ya)Ef|bP!9G(8(1Ca&4t%7>kq>{E8avVSxQ+Q4XI@|sOt^* zRZFXMju?&%vKdDHMp-g-yaGq{)mP4hlh{5^kuP>Sm^6U=y*;4^m*gxWnHi>m3`(ei z4bq5YEdXO30+kU~?aE8$USI__N;#Yiu52rmGMg;iwLq zSdxGCpy|U2o^V)U2;_>d3QCkx?9PW_UatL&DSBS&!WqkfstAv z8kT%Ibl4c;jA-O|tv5EXYM#~TYo^oSq_|~?UG5v`4-XMBb%?5Uk`t=ausFREP98fM zuAL`jHT99`CYEm(91(?8oAg;8YjK>!FH#?=9hiEq!Zhy1$#6en)Hazat6p)erpHJs zi`}~1S;B6JRR&c=+%)nEd=?TKq`2pSd(5ugtl2?MvvuFn;mBgBAY@Op88@yG&i5N9 z!qN<8j))!v1jTKB2~2h=_X+a#?M{F!ha- zp(xIs%?KoO*NR7RzOj=rc=#lj^r_l+=h!v~2%J%|Xd9;3Dcde5&qZx(2l2>j_h(`d zEgVB%^o>_S?#hkOp?K?dBuKYSwGt`TrVvujwqsqUFdao!f?fL%ee8#*ccK@ghKsCx zwSoI96N}-?C(eblgo<8~d7~WlY;_mwC4AO(LL8c?r_&E$kriITd@x2|i+<{XA(Xdd zCwS$_cLu|N7oL8B4eciZm$T=|T-QWtl}RI+*RQP1GSH1~c85C5tY#QJ8E+OpJ zT0OW)$IcS=)WBE2>b4{=PLlo0zNt{pwZV1%F~6MaL_7{JLVeOf^r zrQ(HH_JCh5mO#2wFP;h$m*AJREhuLvNO=$1?MILo4rNgwuE-nJiK_YPSpm9_UF>C~ z|JHt^GF7@}c(wtUi1we2ls_Z267Ru z-D|PFyzO{mfzd?R835hbJg=xeFT4`waq4J8PTI=~M`od2)L%<~-#AtQccD#acr;EM?5PL*!aFy zKc>l;1Sr~^nvemEqeY1t5F7Sl+StBlF9WB?qM6PSbNviq3%c?Qs@7@5)x80W=F1UH6Kj@GzW2QLK66%*d_1>F+rwI@Q7SJ1m$+u1wLw$} z*ws^)!^sz3b)rr^*p)HtL&x)4w$nO{G6u9n31fTGfYjnR93h+QFvDCs^z|AIRbbI2 zJmMBQdc(=7B?iLj@Z$A(whTi8LcEQ&uFjBQX*qD;-FWit4a*|zLZ+><9Hp8h7YU+@ zGZbNON15CST)OAE5$BF6nQ4Bb*O=dK{Z47bBVnowL zB<@1*dZ#xkK~~abnC;kD5^vh2@F=0LU$bY(#4vd#KH>2+xO)PT;w-uce9ZY=5_he6 z%8;pUaija#4<+I*=uufQsKa|k!``tmVy~OWNfHdr`#|r%c{%n3Vi8qztH#Dgn=DXD zJk5Z-Q|BKb>ftbU-5J?Z8+Tz}>230xJZj-b#p%q8lb9`p7oK`CTs}8p%9RdI?Y467 z$WVCn;DIp6a#L|2RIp(L41V4zy0&!#J7+=Vzon|M_%%OVlC(C!t&oQ@-> zoFOu1U~`1FnK>*ij2)Z+Pz)8WrwIUlaG`pqU*Fsl&sxKol5InENUanVXGW!l*e!*vv|?Qc197~PnY zZb?}eXBTloJQXgSIv?`rvLqhSS<;rSZ|o+Xc#R#r4jWN{4&uxo#Kf|1kXW&$c8R=i zPcLkuVhxjMeDC;C!L?IbMTZ*Pv{N}qOl|tvHtxv1M-j*1(4b&On%ViH@=PH}E7(D{ zSw_xPLfM{v=~Z)NkU>@#NIKTh79M7YqXU$0K_^vP>Sfj;`YjEhX22$npY$bYD~1eC z98mkKh-ALbc4bdrz8tOt1EQOnxF+Bp-SfcRVc;G#?&8|P-2b1w_u!7}Nb)@cC=|RW zNYHyvk&-A!sas~$-80=i^WL1d?wsATA7#((exWyKcINe%Hd4!biY-wTC3+76AUseg z6bjhiKk{bPEeC>ZNlmGB$&0GGCNnZJGBPqUjG7vXDdXcopa{>F2d+=7w8yVdaF8&N zh>(6-2=8myxl89hiP_jH%-sloDrsF724N~r-mim`NZ|3-gROKPyj9sc6ed_nAm1L33XLHc=4A0y_J@h(`QD2SC*)*^%V>at!SCz%)mf#9y>u>!- zstlbz=y*hDfLb)yrjrl?C%0|017su9xb?)RXFZ|ccdH?G>#SU=1mh4e6hlsLB;_x})g zTjeB^M!ni8rxGJ&;DvLoLgIbh(KShnTGGnSy$Q#X#d}1hT)cvl$D$1qG%VvDb`Ud@ z%`&SRS=R{$AA;(1UsLlPI8}BmSEhS8sJRfB!o4L za|y4El+NT@BzWBdvGf;j-z6d^43lT%bmkg56<5{EekoOaHD3LGe9Ozi%7&Z>MOi_q zTzNiosECYKt2p5ld%A7I!JXEE#J{yR^F#A z;7W1Ul_~As1ybKF${|t2?bMeDV{0I!8i=aj;ulMK%qCg26xg_J!h&wgq3t$&Xa{3d zW~rf`ayLljMB7Wes(uA)%ID|G4?b7Vi=K_;&n#_7oD+l`mCp$Ou^iiE zWYlA}GJ}U`79w#DB1tjfuytElRZFA3l#Wc&4x3W9FJHCWSg7=D>ml?g!~-F3VI%XY z-COK3#5y}ZZ+Suu6wnL0uKOVmy(wudX{~cP$-Y>T6B%#Wz8YDuk1yS^o&7zAnjLi! zA$+lKmse^RArF>uM#+=ju9>9N+Q^i3j*jR_S`VxmXmugMiA#8;2O^?^Y@$RASthe3 zvbuLd%(59%=z-k)oDJpXt&@Ea*}AW25X;+8T|-&1AB83@ja66dSJlv{JL?aXBYK|2ocd`H2_Sn`LvZ@nLrI^=NDljncTuiE8 z?)|Uo#oCvPY^F}LUig%q{9zJpcO1ep2x+8+#$^~(ZF{z(Q(d$C|dJ>K{n&z-%uVDDbI zWEaQBeUpC)ItVlXTX7+%JZ1wd_orClA?z0foS@iY4~#GY%80}`+)LPzrw{G74dgWy ztZg^}WmtM%`0A>iKYQNh=H`6Gp)ua1&;|NbKq>~|<0%#OV~Y$qXl zQL`r#8O2w1M|JPi6#Fe-_zRA;i0Op5=};jj$Ly$1*g^b>{l^Xw5)+35BxYaLK{%2o zBxN{>R7{h#m=bc+XZi^Zu8efq45o{iXnplLdSpb9c1)wB3K`_q6FY`&KeKWVl7f;| zlpP&{-tNKv#@ef)Qcxr|reN-u2{-V@1*~KkFle;hi?7HMc@=l_&l^x{pofkCv&szFg9C)jv429s0;Z7`w^ zndC7kN=lQgB>ZZCYGt4z)qVHru7_*H_w218zz8F(*T9u<*3KqqJ1Umu1(-UM<}4O3 z<7d9K74|i>NlLOW>x7{yuvEZiY;?H?A6ApBo?6CVL_&^iJBqAiHP)o2TR=$h4jN0 zSg9&ubtg9S`;Hv2KK25Wx$B`y{_= z2QtV}71BE{z~FA(yJvIg@QN|!g^RKj@qnkl<{Yl_l=NGKEr`P(3 z8{?4je0ygnj21m8%k(^}j1`e!YU-TgU=ha;hDXZNlGxQ9h)b9l zD}lx$YQQ2Ptp}etV(m!ltL#C|B2dg=vV9B7m$%Mex7V+bKm)DOVg{2(RHcfyj+h)y zsAw&zF%4^)JOk`f*&q}^bQzd>c6q@D_&mkR_1DJ_*nX^WM29kNSY?9w;=QwW`t=WO zc5Ie)uS^_uL-h0jm=Lkn5t3X;VO%yb$*o{marop>JNeQx*1M5RP&8NhBdVqKNW-yR z4QYA}@YcB1u(@x2=o8HTcYNYa+1Fh8AMyK;$hOH`oR? zQzww1XNbty40CS*m=+gPzL~@6Tj=3bsY$d`FI?BO2`pzWS;s7+SDjn9YWc|->mkWN z7gAj-`6gR&v{GKzCGe|YX3mdF;H7c)&A|LUwvh_hzXNx!9yC!L;FP`j7GE>_q9pV@3r-=)n{>4BfIwu zXFIgN1Ks{pd-vELB7JEEqq#^~?QXFz^(B@ta|E*s`ApTGSf5&#U}lZwVhMM8jUQ!b z!?$9>*!wVrK78V+4Qw2AVJqxK=$YijwHoyu-}?(o>}su$5~R*Rz^En^KOA$aHmL%Z zTI|}@8#X&jU=^8oN&SEnBVBhOn^L!wJFzYjD?8cE79jvhr^`r0Idqr>2GRf_4Z6ug zs#p+N)_MxXS_O>@rgBz zQdVw&{!d}{`_p|}Y!~qLE7S-Q$NXf$K6&F~JC7QsIE#;kn@E;x^N_{ys0T!HuY{ve zeG05NG2y7l_&j*>m_7S9&s)a^Qtm<5D>3Yd*Hc?T{i~_sYhPIpxTyjffBn`Z_J$KA zjVa$#%aB46qI2Xx3mF)kZzi$y*|K*dn-yDa{MKD-VhdW?VkEKqlwCERKy?YhwK$8N zBxD3a)^?G`8TKbiv1>EeC+y6dpArLOlWpHcXfSm8(zPEO?y;*oy6wiu4ZEGkVTka% z(jmH)45uasU$XhYYkV|XvU$4^0lXw4POh@-8zs*4YpfDlJG$&2j_JpM)D`r?(?E^4Lxm5szOD2(8U8Hd#7<5e*I(1DC1qw|lIN`=A zSAC|omCK6~eG7FcJ5!NOt9+h`kLZx?Oh#SXH(7=d5p85{HzHLQfF1LJurU{!%fJoz z@>POULX<|;jVVlOZt#EcDBr8bcViqk?w5LZ!eFm=r-tmDm-rcbAEMIa)*^aPFf~cu z(!nVx5)*cjG>Hp$$8G-3C?Oo~SqpnB9YosH<|x8C?JUdXK}rvBC?i+Efm&Tn{MDGy zli`}5MEZ+WeC5*l>>;XT->-n6Of zB&4MSJ)o9TQ5khkqW&{5aNSNLHvPTyrYpR~*eMSoAcH;m$i>@s`Rp~@vf%_wl+77N z#1CoD8|@tn}bQTV(;IH<3tC;9ODo1*H`vBYXjO?t6De$O;8xCmeF? zmJODLVHgvl+NeWAVwp}-(1yw>mmAeM6ug3gGu+Z&-m7}9`nOlK#^KFM+L(Mz)e+lW zSwN(*cs1ZCs2w6UWum9(po$A##QwhtPiI3y&reR-;vH<#VU7iozBG}Nu$?dg?b^Fw zwpDyUy<6@TvG|m*P`XimVvXj7#tCuGp!6X`>RV{EUz3o_rqUurve?r`(u`f!fplzr zedyYiIHL`Vt!BH)O5*)%*X^TQBQ}D0;WXiRtI!`nNtmG{GS!kaoIX9(eOaLKo@f?J zm`((S&4k%_f+X4dNO{+vS!5Lp%UWr%39>|e@zJL?h6<|*9A*fMt>%fY8Xfhk3=^FM z6@S+s3Vje6yVQw05ACz<7<4E$ummFsJ>Cp&O6-sNH8g_f+r0kmsbanXsAYwc#Tuit zwaX*5-5t5>aoPjHB$!Q8NP^dh-bQHl!I`>Q*2%FE1cS`6{M$t6+zlK0S@FU2;YArX zFBe&AUMD>2B%W^t;-s%?Gn1mE3Q;_d;F(&d;f(-E9*uHXiA1DVh0G*X%f5J)gwt)z zG8+d7>x(L?O*%g)DvKq8Of&PqvxFqrM0Wa4B&=otap{+OHBJ;VLCjs#Sd@u9oInMr zl}Pb>RdB~As+YLV+?-+X>DDoP(ogdw%bq1$RZ$WZQmLG)!p<};=5eJWbW0kpOM9#m zWcg95Cjmh)`{1d%q2W~OOTpj}-2VuW))eP^2#zCx8Nc(}pI7;uZsn7lLayM_v!VeB znpr+G*qgV22PH1?PyqMlYzaSr@h`u&1#HqYlc?FqN18>AmE|4vPpm^*`rqWCm2cRH zRD(pVobm*e`5r<`p33K08RxLJ>Lygc;GqN7Obirj>%^=Prp~JBCNREr`HubP=NIf+ zjtPL+Fd7%(h}f)xy20guN^Ul~FWgde8%%wW^CXGhe|BiE?G|GP_8!G=oM#{E?T_q( zH{Z9V8Prx^FG@YutdR4~o+VQ4iKf#$kwd!phXtNi8`LgXjw#%g$#l#PN z9|{fS)~}&nomH6nR(^ix68nR+!aIrn8X!sRes;qzod3$E7Kx)y&&xAUOzWFCw2A7; zwfW4?E!g$1F4@;enmh2a%aRdB`BMA9)N=>7+n1Q5-6ATZB$*W=+AS0A)_D%2-QjsC zpc07+X08n*?X-)*t>T!Kr`*p*Ny+iqMcXtuXdNVH%^=ZtlGKr8@YV^@Z$+Oy4yu+h zk1N33OGF1aVmi*m1*YHwpLJC*2_h>9QSYTL+@DA_5%UiEe@%2T3B+3g?C->}~hc!yfr)WWJ!rkX2jA^Sd%HpD$hP>iNd%HIJT zr}pi|6P$3?K#iLs!V4jD*f9P0-A_CVnyWB{xTL_ckhFIH)_|u;L3+qv?RI8##(F>b(mGx^j^4cmk5wic zo^K%%WtLFKgH%0*BsGI$OS>2=I(kXzuIG(lrMR@}3%H9I44-M{qASj;I7&~&2U3WS zWjQnC2fW&!Z()E+N?$>7yn>DPB4(>|th#1l=pBQ7)`f#pJD)ay9=;9p)(&u~y%QG( zQPWVCTT6A&X<))*`Wp@hxcsx;xAY^voK9ZRYY{!V>Cop#Cs5hp%*8~uGCfCJ7vh(rZjm)nizmYnRRb!oc)9vae%}xN z5BH zDPs}O(ofzxZP&iMhF3H~m(b@XmO()nD5TW#>RMC3L*M$`lytM^S%o$!GGMf7SR|bI z(AJIi`14O%AA4@f`;$k_JqHWR0;1(iicA%hhQC5%>w51~K& zq^Jl>8797k|7F;yE8&&ld4I1w+#THHo#bof^9k5`!&egeJ*-$_c&*;M_*=Tmz~dBCk&}w@zR+jG|9!fLKXrn6Wp-9vpRo%#T}<6$KA*5OU))DaBW518aNN$PK27_ompa}mcm z)RPDog(SYZ0(3R85gvM^0d%42x;K+ioxES}O+DPoKG7yN(oV1^^LLVz`!iU-^!|HFs2$k>zmrOEdu!UkrEiXDZiPOb|@yqMH4!NFk;<3v6ssPgRqFr50E zr>%WsyEA;LW;Bk@R+ZuoT*%(mdATHDzUXwbL>QD`P9O}w*7vuf znei10(ngb_4VI7cch%F*&vszW;LNf}JnfyjHqad_BL4eBN+uLC;6Gigy)+}QVI)&bG{$BdN{OvQ*S-Oj6L+18cP2m886!g+?x-dIAV7$j@e9}m=I8*OM)_$(KC9*`zT=B zZPg$6fQg8q@^6+PU|$gbdK=C+`?~j8JHf#;wzndrpW46EMzG(Wxi;zyK;*6Eu5v%R zM5BLBX+e6uA1DsH!=DhS^nEOPgT_yD6*lf%86zwG2Uo8F3-%<+3%!O0?Fi4}W9n{!ez$@Ir1YvF`HF+@Vdl3)%<3`ncSp2O&mB>45m!c)59 zCUuQRl}o-p^b`|?f#PoA*ygXYPqB;zkT$|{&(vV7ka%i`2_6ja&QsJNTEb&$_9~?Zm%i1}O4SAWOE@1(aLvXnPQ-A-~ z3>&3a?c6wR&i25*ksP9$5ujCLP&*1~5s425wO$jJbT(lDgSQA1V%|1F6sL&A^85kf z(@>E%;)T~a(%pUi>3O?z=_V=hSeeRygJrbFmE$@zIRPiawLZLxJd}3OqgrA&*~EZp z$GdgU;T;H*yRDh;OUx|k(AkwG2OKo6t?``)#M-(ae}ox3$dKd;&WbG0G-YSovjhh_ zY+13|$<=Lry`EJ>?c!%3R(!B8grhTw3+ZIn5w-9LlWDNQG& zFNR4miZHoE%#cwAz-yO@*FyM#|MK`DJ3829J$eO#%yt9&j!j0^Fkf~rE8Hs#O1j;w zRzE(J0#g@bk9uYy%ZF^NT5zcLDxlSxFto!1p>;uhRi0F^M__pTHp?!Z$)TH-nk4fQ({=_< z>omW_F89yy!|x^6-5WPKDlCjrV6X3MxuLP2;tIo=CjIUDbZ#m<`XZKG&G;5{6X(Be z_cm5V{n)RgUI0fkV(M%Wymn>WetZ79eKo}@w0pZd?Ijdb0?DD5ML~L!tOIa0?Nk*2 zdZuSzXY{0iS{< zo`OrYq<*L9ElqpX;A-{n)=O7$W= z*5sR*ftwcdMLP#k4Q$Ihd8>jTG*Q5%)kdW7B`p^zdkGiS<(pFsSn`uTe#A~}QaV8#m|$$} z>_gqwC?(G-cO$xxppD zBe=8z^K^X-v=#bxnL)2j)FoW)HMnHSq0Bt1v@4^)SXcyQl}->Tz6JG;>;KiRgn5VG z0Vc61cWx^&c7Ty!0P|QyXTGXWn0o=;c|kgKRzm6#t$3tc7hL-8Y8J}y6N5;jFk|HLzpn1+&*M~OGxP5eOXUc zsqoRw#PGO%an%0w_UATn4a*`mh{GpD0Z;<19yHb0D%%ku)MPASfE^&%2?6a034936 zz+NoQvZ$?=lhuj~T&j{{D@&@br&MzM@|}M^(u_SIFKEErP)lkK92R!&-)_gAI&9;& zZ{u|~&x{{u(J+4s&5cmq5W}Sx)N4TnqSBU-=9Z@l_SWzJXgwQy?ck}y)`j{*37$7X z3{MlM`rg7U>B=t1S&jn}KZve~&3iQ6i|r6O=z9%p=?m4IUphpRaR?^qGfC6oQS_P# zbFf7AirLHKHkhPi+g39ah(zo%MX6$i;Ts$xj&I+s~+c)-E&%qtm!Pr^pA@+;# z2;Oo`me+`C`r7$R_Qxw%?c!|SW|%NN9+R&^>i4CtmfHA$4U)m7t32pCd`L-5y=?nY zwf!A&p&sk&v_U#$m9QG^O&vCmm+RM`T(HrLuB#?Y{Z=PdA0@Dpd)4oyp7%{r zRnlul{j6&C9XsIJ+_XxLYnJ#*eT*b`>wr=X+IR8$k!I}bFd@+;NCsDv^n)O- zeW1mjc>XcFa`7uWfBGEm#WVw^Dk2OH89^$m*WYU+mBOh@G*Dzvw?g!?hFHekduDXn z-u~?yHZa_00|WcqrI{22wwEAXr*?0((TRHm@0zx8xO-lnd{n+72{LIzsF(6pMGa-t zT&M!GOq?seS%hO06NeaD8>WMwj!YuKIE z(asWPwF~Ql7Nk*0B4VI!)~C;85T~JuJTN`Jb-ygEhNsK#+^;R=rn%IWdfa_XRJM1V zPW?h^qeB4Q`$ddg{sxW(F;zVx_{D@Ut5lJdcKQs<1bwR66E`F*Nz7Ybgepsip3^ng z+;FH)sT*Y9>{?wYrmDy?}bDZ_}Wi{K>PnmE<-nTvHtO^&a*3&BH;o-WnS}_eh&NN*2=TLaX6 zD#fW$Ja+7j(F3U2-GxhiP8~G7jEs=$RH+7*NBAs1V50)lWvxE~?4moSo*0^UN9j!e3h%7@Z&I#s?EIA9!jhkS_su^qKB<%M z%5o+9d^rd;$#R8HNhq>`4$MeWxR?^S;ad8XemumRbo?hCw-F|*}w;f;^+>3^0b!h>0XRCdA`fGdtwGUCj zOn96qUDGPKhSk=uqzbS~d{x}ka)(XZB0IH*3H0^Ui_drz#2LHBvj&<5chIrBAri|bd1em4!1D8pHiDaW0n#J^27~YG>cpymKw-p5 znUFag&qyUBy-o=}a!~MQsMs)?nr-#+X3q6q`CyKRuw;n(V4^ zOKa{Vr@yD4tHNUXmVZw(c0F6t+t<9PcIb$o{MAc~PE$jGCv>_$T0cyzC|lVZ{cH(OwXS+RO%*qfQ)wR89K_D>&vOk$TCHoA(c zE=v?gd_#&d9+1SIa5D#kKQ-VuBxzXmVCqP{Q2nlci{60Bp4i-Pzdmu$j}A;WWIQWD{f+ zWV5T1r2CU91$?Xk;40EqlWfCLN8H0Ud_m4A#FuI9#4?8RWm(h=@Y&ujYeOxgkh*!6 z?m1LPYF=PW0Y*Wr6@fzzi~+m=R{*(sfYck{W!%RW2^TfYAbCs^ifZ)U<(i+#Z@uSb za6zAnoTxx?(w!)>q;Hfa<)rJ1?}d`|tMr(ENnR;`#tT*Tr7oAs2>luGP<=nvQ}23! zqWm}A^`U(UE_pfPA%uw4@6b*!*C$sw#wpkvCm|;C?CLjRT+p|FkM)y%teNy}ri@$A z@gnZqY&{xlI(zHVsQvSYs5tIU+g)aYm97moFYjRbJfk=j0ox8_<(`6HN*(q3J=_la zOM#vwWBX8GwWRVo7#qEKm+nGJ{srNIpW8WzQxZ%aQ9LUHxS3UZ<2P^F+4s-c@+|R$ z6;zNu^%rcXvGcj2-N&1B5d%nSf#q>@1sPD>gW|K{=`I>ecI( zL&ZQ)Tel_F5#7MoMyEPLN9+(00FtrP6G<8Rt0As*QfVt9be0z)V|M~8iF`?8RjA5!*uo$V&uP<3 z^@-HjdXfaszpzAAJoi?cVz6Gu26+na*;Y1ByRZq*vR{y8R?$kQnM4>_a;s)w@_7bZ z4ts2$IMiPLY51)$Vags~6Hr)nh}jFLp)bnls+e{i+VY`y)4#<$R73e+Y@r^DI&ZIs z-;t4rjllp%03zPw!K82evkX)<6#iWG>5?D)8YIA^tfZV!TDTUU)3asiP51u%qe2p- zNXNJ8;h)EIfoUt0g(7u^K2OE~Ot_heJkLAJ*r(5T03{)1yAJNR-s8t?b$FQM(!?6V zYN#NuQOdgpf?p#$(?64X?=*4MXI2T}(76F!y99$Ee5hyCGOc2C#>3^Q)ZsrHpg=Sd zaor?C1a#N!2tX?c5oqqMpU>lj#rOp_;y>BH*+T|&``Ca2$vg7Z>tEUj|KnX-AVw0D z8&*w>pC&gsRN1P%-WdU`0@mqGOq{k+kFQE8M|S>;2s;HN^G$>Yf9daDwoThNBB^VY z8}#d9?qPMNesOZCBBRO+KA|ON89xmW6~X-$J|A($o($FmQE{-v8B&>#qzccHFLZ)5 zZFg_qO_FeE5gmJBJy@&koTOIomrzdNy1Kr~T2K}P({nR!rLk%2X7uf{t7WMu?^Dzq z14BbZX@QmXiX-f6;K45hCXMCg7<6Noy7oYLcYe!qD z47WK>m6tAC-^1izt}k8gTJI&${@EXai6_mD%}y?z=*ULSgX(w4bZz$%=Wg;KEedUh*mfXJQi90k8%WTS$rxg6SpisA8 z61-IN$p~NFcf!p$VX0h=A^DpqDGWZGwgna9&kyaemrv}qEl5N1!BFh=R%Wo9UtG1f z|HoT4LNrMkn@W%?O)3eItWj+OSpv6XP6wZY!#@K3N)W?)fiMcJ{0BPhXaD6@OdJnc zYd6VZc%!tp!yDn>T1ZIOSNT2APy)tx`0vCZq$~mj2#sS#FOO0+~ybOF*BUCRtC?OEnCRZ3PJFwd}P{*-`?5T4|6ZrG!`g| zS*F9I?0k%%w6?r zfP@=*gxB*&uD@dlRcOW^fof(kL;6Mlfake6(P{|LU&2asH}Z zAq&_d@r{ZI8!HGYvekFJbzLOYgDTamy6>b=sxj&+J$w!nu@M!_M)rhWIkXEE%x>F^ z`lAgxBOejA>_n3!RKVN6dEKtS+?NM6_{*@r+-6l3=ZKRL_vUayL^ar9uY)+_(vu08UMeXUU`)rLZ!W-){8XzQ|h zT>S5j5xSNQ!6vCcI3wEE{h9PcPy@tnNj{-|eG`9{)V{E|0P|k3ex%-w8#dw004+cT z5^%dQgY0bYLOnD`M9N9t;$5QAY12~PkQKrDxwjT$FL!NhMZA)*%@h&3N+wytiwP@F z>nsj8W2_z)75}@f8yoi!EX;M)WH(v?u4eS^t-WM_M<**^fdb6EP{0#Y8`UrpEl1#B>1*saaOABQW*z^UL<;wGsOrF^xXDK4rIImh)JaETfviyNmjQ3QvKp zN*!9!lm;-D$**C@$O5T@@;h?Vwj1gEr({F>)#C^4P%mQ^y?GaH>tJ;eDG(es|{_wEYuWh|oA8E$Eb|ch55DvsH)VC4Yu!VRRcSlEU{2rN> z;GfbzN3^f^(>o(}YDK37CK_gMh!%p>#3IH%H$!Mv(unmBktvArqK#C1LaevDjl8XG zwm`6`X(IjQiE-iS>bNJy9=Un=8c85Rx_0aRt^>*$8M}WED+28|tuTQsD-j2K19RBo zkKLO=JwqlR^gpfbNbl^E#Z`kWd|KFO&EO!?jvaI-j70Y0nj~cssUv)_F7Tgac&i7X zKb#x^!tkv77^H93JlEjn{VqpP>O7ZVsLq`ffOYQP_q{srG`#;z5h z)FfK%gXjTcHTyagIy%}RVIYft3Zf%)*9H3x9UBjYk{%zEy4hC&X6f+j*Z(*+jdwNQmo>dvzSkoEb3h&7dL3rXX zr#3>1oC{bS+#HMNQRn~wAOJ~3K~$f#TUhl>EfEuijkQ+vvl3K9)5^x=`gGJpO$6U+ z9VBo9$qwd`+!xW0%HvfHQ$VR`brc{^Lz`yZp^fpbGp*`IB)53Iotmz3BF5gevVi&} zXRjRGX1_*KKS;)!0p9C`@plqaY3|mPefs(*F!hgZVq^w7WZCNiS#9C*O6{HXb_Q>v z3X+xC3K_%qJ+{wY_}ib_hHZmXiFFk~msBtmS*pj;_9J6oFP0zpxwK><;tU>&p)=4J zxaCJDdSoTzxOaODaWruU7L|#i$IkK|YfK)E?u7TlUHugdnkcjxIYH{aNh1Gk+&F9- zxAve5#YUX$L2WS0Z6tIq5_{t&$vGA=^8!#$Rv;KWHa87ZT#hnK^~l;^s5qQax|9*% za9DIPHo)U?=)O|;>6954Rx=82HZhL=ok)c&gWEcLj2ziml*!AI&;>9HmK&Bq_uk3| zYe!G7H8DBmVD1Y{oZ7VZi71&N!-64U*^U<{k zRF_#oL!DPj^)+}`_v8C(yk7TKY-g#CQfn(8_vaEMd0*<}S((W$F}co5m4@1^a{zom zgTL#r_3qnc{g1J^w`&`^bv8%oqa3S2qLO=3j5~DoCwC_8x1W7&fB5o>oh2RLRC7DJ z_AFLflnWjDgc0kJWSV?WC^>1dS{+XZu;OR>u21TIyY^o@jIgzsvkk>Ldmc5%|Mbjp z+ld3vX3T6o$19aDPcGV-KYncQ{`OrPyLu153pR6=zqF3DoChS)l`#ZD{94`^7*0t?eNcxI9c{vmWsun0t6HyqpwV!b>F<8bPF|{!+&yC$R^n zAVk(VtFe@HmOdo0XOL_E$oy^;%J7ad8L>J5GkUBBl zYyvJhyEMz3l-0;87C)`T@n}POZ^j908P%7(Tnkj_D+Tu((4K~(9%5NTCGHR-#8-nn$cCQ!G` zkqIfUK4gU@rY^=Nd+il=VOR92jS|t0L*_s=ILjSYqW^~PsA)14COL-XYUZR;g7^vh4!g@e!c!wDm#voXmEJic7V>3%<2Boqu5i}Cs z7i`6q9cdZZ-PwlkUWH&T5qMH*6>_St>Ua8)G|~BbKx0|Nt%-y|q>MPTZ06pYny|4M z)Jclljnh{*(Gumh)C`j^vIz%LNt}&i6FFD=HVoPzkt0`84a^arCXY%dOc%m}_71}4 zt@=j4#XnTHJ_E+e*sq4)?QPWNs?*!$Z#O>DWmT8k_^tY|tW{6rvO=v<-4WUfIV#M(GQbl6j` z{)7mqJz;|L&;eRHhZ+KdSB2rda5eOAfTH?)6(Enm&+ipu7rrVa`q5SO*T!Ojzzij%Y#z(?>c!vZt^NuiiuHwCok)ygLTxgSlw*iq(5eCzO%rDavFW>|s=-`R za2Ap7r4ExtPGIU`wIGL^=w+)`ILhjr;f6P$=19L+`F72tf58h$s}f-KA;wqoG=^`; zbWzMauT5=msSwNysJ;r?xF%CnGlD=Lo|uEj_FHD}b~b3b@F-QBAA-5DqQb}pFVZHv zL%_Q;m@xk9pRU<|V)1fj5*K`Vm!h6op+DS%l>W-HL*FKoMhzPMr+#O~z@lr4p`&YI zP}MelL`nUz56YR(4R7VRX?Qokew@3Ae!tAWIoKvL~rhPJ*w zd%^zmpZ?QEah7Vu#j}ZPlGc}5^(y$1#%jHzk`8L02(+)&lAMdwtiagaDNf#{Y>@6a zxXWJt+m~(YUgFWS9p=7_3N9GY;Oz_eih{r6uC}^I`pWl?u}363k*W_komdlsP$m>< z)-w>wz`&qQBZ=N6fwI)i(hVz2Xd~wLAU!2|2(TnwE@JXUwdBsMjlv}Jge4fl1F%QT z9pXk~3N2-9^U$C_Gc`3yf+M!aq}Ns!C}8)@_0HCTQk$%*D49G$P1Ph;{#{yv)@g{^ z>_s`oM5&SJrFR7{MD?3vcXb->af^JNw^?=M*xYJr?Qy$!G3*uW^H&%IS)|4$tbkhj z2duph{X9%wDw`#lN%EXR7wZ)e)Zazp)v~kKkJXGv~K-=Zliig)2-=i!w3YI%NF^cHv+|RwLq-*hYf> zvqF;T;ykM+F>|S0uHj~Sc4Ea|KYzo14|DwZ=BV9TT(&u!%~nvmtSXu)t1x*wJF^z< zc~AZm$xk0M@r>9B!cqcsXhzZxPUUqEwGjn|)2tlew5QaGq&}2cv=gjMe}P^7a|9k6 zq_R$m>CmG{>zBX0YXAP<|J|;gyG~?BHt#)LfEc@yZa@Lrpf6P`V9H1QRe81g3DKKq z8=4g-NIr|Gp!$eM|2&fVktdF#R-_&zcvlzaQR zVJPeX8U)H7|QTWeO{RTz?zYNJMFH3IVjF=FzPj67I@+h!+YS7TUx z;q6S?U8jlhQp7?E`Mjm8bzWK<8SA_o%T9kbdQ}+JKW7ns$W31p;u1vQ3|&&X5`++l ztre@Ij%}Mf=V;Ht-DEV{YDON?6*fzYtym(#;N}ocWbHDFF7NAm%l3z>Q}){nx9q*k zw@5IZBgC$B?d*y8ib|)Lq-Y^bs7lkgB(-%QCC5@6FAg6U9RC4YU8y?#M%}|Pf~um( z3bmCswJtBh)D_gL&whS{EJ!=H*ft*OrpQ)8U}wk9t? z9WrQ@Yt#h*-T~~?QT`FXRot$4RBcfifw7BLoiDJI?Aq96CtiHq+J`^s(v3hRR)%Ow5o?Ud+AP zn5vpkDmpdQ!KE%ty^vj==4{<_&!B*TRG)Jx?2^6p@9)^9(^rUtprqKX z?q?#8TGg*3#1V>&y^PNYMTD_2tl^GOpt2-?EHkD$x;pIW)5q-8FQ2mwtd1n4xSxmP zCXA+toqA>0yS6rF{_=O3&%b|%2-Ar%5~MS#&<=eKOR=IS5@=zWc=*IoVo!|NEGfSV zc(q9%EQO2?|EqHNq5&Dp4W(86)idGo^1G==n#l6*F~ao}tB2)W!N!?TK7IR)hu(ei z<>R&)qR%wrwhu*Z!eQj)0~;9uY>1JP>Q|8xzTMTyyzZm(;-zaIB5LR6zpAAr0m0JrY}a zT=Z2OzM4C*($Z!=6J94OmJA!v){B1t79#3oG1mh7D>8po(rASOxSK25CGd3?pMx*P zrtA`Gu@T}jFRXOJpgVCTz{yAvJ=InhB(xc;$ySVA@#aM($>g6fI59aX3ZuHtwKd+~ zoN1!2!cka*=wdBKR9*&Yy^ElCPi)_8|MQba>Cp|rQa8L^Qd3GxMZ*Y%j7kvL#uEL-jmZUnMV6Ol&h>X}7#~6@7Ix$>^Uvb<#HN-W)>l zf{7+3LB~PzFO;ErYui~W|9kZ1kz?#tSjR7Sl{yf4iuskUBJj0+{iW}uPv zW&Y-*eg4{~mPIeo{n9BL*fxZ88&(^t@0A@S#%S7YzsJV?{5TuFNXiS+dqe!>z(Mkp z^sWJ`7=3|weF>>w(n}`9*hu27X$r{mx1|$_v@CpbP1%=p$uEPSRTz8`SPBf*>Dhwa znY(M3?%uK8F!rN6w%H*}^7aq5+Xe~kocP+JU}7f&6lYKqWIDSsqeN9ha_Bs2rvfX0 zRr&$_lg-_mwr0W$D@k;dvd&A%qr>^BCUBlxQG6Y#O$aI5(%C`C zb2d8hIL`LAlj)093wsdRO`AXl$RVZ?P6LipZCWb;oFW^64NuAa=Fr|iE#CeFr$SLB zcJ!W}=UD)2Wg}hLg_es;zQHf6mR4xHbz#zmT9)jYU7PJ6P9CzyH?-Ig?{#s%MG;UH zsgVq4@BQvAyK(-yv9IdA(&XG+!RElNe-AVr?057tLQ@Hqzsn`zzuuwCMFb;dK9hyq zd|}3hu;4oK;!)dmd=Dx@t%OydC_S_ALIPuLr@SbFFEyn8dh!bYS}PAn{pS ziVzV&(BZW*U=WhY$a2B{?VtbEZl1f1n=>1l*bH}I7woz?sD7Cxt5iGb?%1teqm9I$?j=iP74 zTp+H;IOc3fW^9VhL*$C@A<-tgf}+w#ALNN{1#2 zoplf3sT@+}r(~<%)3ikTGSY}Ki|)ie`PkMCb_jj(UebyU0ah0!qjUmZvffYyektIT z`hZn<$r9e6nYcBDyOUNVXKju+HcPWe@_F?6I880i%_=3hFXNRs+Q+^&25E@r$>fvm zy1?MoE8_Z6f5pB?0k1xDHm@(q5pSm%yKv-cA>fXiZ({5*UW->D{EF%GoEV6bX}1u5 z!LaXdAy!KkCazfbt=LIh7kwsMbT*Yqu@#~yqCU||OZyID=4d3a_BOkMpmF}j4f~4p zi)Y6QHb&sMS*(<#n_s5glEkIZPMTobWV{@nXbiH6=bf_AsFj`)9CT?bzW=+S1cls8^{qw*vONwK4ZW9 z-~Z9|>Z{B)jw3HT;4zGidPRpxT!a$^r+QC4s@EPliT#^GluNG(bvQGo;Ozt;dg_Iz zEQe}g_SPJc42kXr!Dk?baPXiXQQAp<`js#!8gjhyqjkS6W4L~g_#K~q@F_Oz1^fAb z`#b9;AXf*2U75&mSF*>+CR03in8ZkAiXWT79h_Y==}j5bs^4{}4uF=i3=%QAM$EY` z6o39jDX|JIU4$f9w8@2eyE`*)=kMTgd*QC_L0|mzjv+fZMDEG~5`IgfWqiQeLb3$$ zUIunE!F2R5%jR|#lh1Y{N@5Ui`I#xs8Ouwmr|e9giEI&zdIIjxBIPg3JXDFQ(J@Pv zrYu)Vk=M>()#NSI2s`P?R?}Bp*;KdQb>X57&N$5l6$L|?GK-{c)533+y_#m2cn16a z46)B;df3bUK^BId<+Hh4Ub?7Pkk%D~!Iyp7FJTf?NPvPEG$y$64N$&wZ7h$#*+)2Ha5hBK^ikoWF&l z>N53MM@}j;?BeBeuWao-5Nr4HoDH)C_yyUSUOBqQ_V%~BO0J#Ng-l~}vpM_IduQyO ze|y&^NP?r>0|Ccuwo+$UEyk9lTk&Upr%_E(YhiZW!k)&CqdV*u|L{wEF9^m5>C6<$EGP{v2b(f7UKu_+4E*tc`NgXo4* zpA;E9BD!*p(sGZK#!Z|>O4#I4md&Ddxy=U2t&R`iKbGJ4`>kYKx03j3(?c8R&v6k77mBauOm#oXg;E`ip>c*hi zI*9}CIY_~ka+fN!YqLaS;SR=b^PKn~6k+g6Y_bINUm~QzGG~G7iv(b6LQT?2)WT*~ zUmC4SUnn(+25vyTa}w_>{f~!!r{m$fT2D6nB>rwkWukD*ZG2a7v?ew+TiAeWl?^{} z?Sm9fOOy-%hHqE_tujF?VZ{RVi_TE(x-_o+2RW!oLcd2|(VL@FcJ7N&Um~u8g9eHIaiA`rBC{IOcv`?!(;&kSt>nB_^LBCB@^y6(@T3jkID= z4%MZ3>&nmCfzD?8qI|wC(+OKDN)^K5G+~C)s;pB19FW zF42le9?Ke;EwbK8>aG3|d^NCCKUC+p)GXR4US`tSv}=?7>VN&U9e(C0Q7@Trh_<>c zy^;@7RiN5yAt<5OCs7?gO6+w|{TH|d@%TUQAv#5aLZ*cD(-Iqjy~J@j^|NO!hot$% zN1yrTj)z8-Xc@ba&Tm9mrRyp`&DE2)V~YbrmkJ{gx>jQ zORw6F1KY8f@enfFd$g0NWSgIR%(}Z#&s@Jv`ZDy@Y#?q&*Sr&x&+UC# z+k|eW2VG}3OkMD_fjZXTL4LyWwpCk#*R5iq2WEZ`@qB`ZuFovlmGNo22-CZX+G&jN z((_2dOL~{&(hA2b)5K`*7gz}sI7~eVDC*&|LSVi99eXg%DC4`rhky4!_32&Y-GcPn z#LBUiiF*TT!(&+W{QSsndtuiGL#1v#AVQ2?$e1Tj=|_Kf-#&QfG}(_9>DN|UA@+;v z()NV(-pb(R!hx$~9<(K~MfE==`^Xcpv%lMpKY!95d;T$keNi3Pmsx$Sr@Azq)UW0H zarFnNiV1^2!@viK_Y?zP9!e73A+AlR3!ZuD8JlA>@8(z6+0@YlQ0}n6io@^vq!;R_ zeWEezl)kc=ovrvpE6n38Qu!+Ch3Eg~lpTJO08jl$hg9B4@kci{Ti3J4YzKPlch6r( z-7x`khmj&Zi2*3aNLgQ)z}~p}1k~~aX`SDV;iYL7Xsj z)k9fLs3c@&;VUruRV#)zN$W7kCgtgjdUjWVa8sWiqCpZozg?mQY;9sn^(JW>wL!^f zS~vZkI8b=UWdm(e%6f&bODaRpz(EvI(bX!P3aYR`bxJ6XWgkJ-@-|Asm+NEGb``z( zRW`&Y@~bw5gU*uP&0_nH)T>nj$rF7g=cbAL4tVx;qoDPFQMwGwxPB+6nKv(19Pyr- zqY8vO|E`}ZF5XD4#ScwiSjnSCTd-l`P(QV8*!~7H&EuOpZ5Z(43Jk>9#MRsOAx!upZ1Zsy?0{9OA#s8$UqCUPhz{Q{A&7^FT3nF(d|28%yoINA}uE?qz#(>5uH# z-()O@j`Y6?(TM)U4${lt24mp9z2}S_2Iy)bjukux#lWtdyG%qo^vhU=9C~7(bquvx zp90Iklsd6(9zMFows!a1YiBRoncL$wTF8+cquq&Bo4%f)(V0N~!2@N;D&vy|9P#8UqP^~)TartPaF{eUD;oUus`9fQ|qBxb2N zwSDS17Q;Ln0A~f<+200iiDxGb+LmGIadDrw`fm!mQoHB4hG4Iou)AR;*2AiJ=h? zWIR#3{|tY;`1^NyGJfKVj7>#8?aI!H`odhl3 zg$`f(9puyO)84A2(q=pYC^y$xWyEeLJL0S&=%>>g)hMtSeIZA%)Nde zuGK?6wYj|j03ZNKL_t(~w|uB4q|S=vX^+O$K90LU<$^;htL9=Jg&`L8SUwFhX+A@2 zqvwgMa&jl0q~Kp_7n!ok%4P*~#yb~o+v&GIwzD6dwfscR1A4U}K&k&Vd1OVOT0PNB zuZemEN$i6PK-clZO)w?>v!P9t9q`NE3+ked!5-Up>Y$zc*;CfPvzIAF3|$JoF#c5Y&1Up(}R#R6&0mY5*ii&TRqfz_o=?H%|K@=B63`RPrl#Z7Xz zG)ctY>Cg2nX*H<5#^h7)M=8;JCSC^yUDq}tewQAceDYZT3 z^lWa!r1Kzr0g>|#sbVJ<@-{I$Z8Lc$Q!#HoXHd0FVcL=t1Lt{vNDKI8l4OKVB&+T?CgJR)avFm+Z_@>CUe#QcOO z?Q0ZKYqb~Wtph22bI+>%CYKx=3PYd`GdAp3vN$2O5RrbU z-43uP^~$eavTdZgQ&u&Z)%t2HAUxnS5@6#h!kswFS3LJ%u->nVZ~Oian6WoTolLi+ z#>he>V(xPzbN2C@AKCk_y=&vw?!r&8hVbRDh?4=}-@_ma11}KkH^ta}AZtUe70Uut z5_?bVCsyc4KKS~AeNLvRo2=_+7$ilQp=_T0lmsse z3y3>NYO0`$Fl%{31;U)R8ypY9*u7@zN*7nb;QhX&S+vc{JSEnn2?{17y}4MAbnU%} z=`w3<+=k4pg1cTJ_N8Qf+& zv^r2us9Ru!s{y9F@J!Lce6%%U49{^)ZBy(84HsWM!?u&bEwB}$gQqd56 z&Gjpsyd2czvAt!+?m8k)w`}3rWifo-cfSE%nnQ2y8>(0$DK3tr@fb8pi1XrM^yPN) zkaYU$1T{8Pua^IrcvcOiT9WVS-vLMN$W`YE@%L$m;P?AHh!ih|+zidNFp*`KbJjy# z-N&~N*{fs~dTx8KZRZu~#!0_|p8%3Ndj_{I-Lbdd`pC}UQMx*VMH2Y($x|FX4U+#T zUkKkK9v&Va64sT4tci(!35TP-hxXZvKY!VFAKKyS7x^BDnX85%fbgBlBXh5Vp4v+# zLRAwU9@g4|zq>1cb&TEniH;UAdY8e$wQ<$8xyzn<>7>oG`StN@pV$)4BVi{WMj^RT zn?-t0Z;84}L|Z}4TrU%X=)L;zr*%Csuk`yGa4MWS+LU|)<@xxf5qoFyk2cMQ=}&+C zk`3+Ngo6y5Ry?NM7ya0pZOrbqAwuWAeSuVHS8w9rLOc;F&7+Q(XKn5lA*sQ&9!a|z z-iQ629uI1B99#+dD~c^^LW60XKn}_jpm!Y7N7`fr?F!&j%pRH4~BtqDgK^17Opk9G-EqR7x>EG|H5`2+@Yc4!%}_c-BfSzm5chpfBUOr?CMb` zJ?KM(B8wTc7fvu6wh!8=SDv>5F5aJh_$d-R5&%n3sRY`Q+A=WRCC>{QN(rMlO(SWN zZa}`}@y?5p?S^M1=}AjjAY^VU)*s8`i&z_cX!pnh^~8(M+D_7>^%4^`Y0W79Y z4{CyO+%%|U9pL>C9{H=(vB#Ji8m5xKp$WqI%87*mT4=L-Uyj*t{`oid)C zy7(qBbSYPf+oHF0I3cI#ClX`0a;VORhfBd68`O0HfWEHy%PJ`x7 z8>XTP{#6waCiis!R}HfR8_(*SkM8eBFCP1MfGeNT_1`-UHVyNWXPSOyppedPOzjA< zI*m2N_}DmBDa4+TSTE@=+4PD1UHa4_P-TXq*VT#=gXE?7&&|Xrs)P6(+9b*o&!&iK zLALH=w?Z2IB0dDGOSYfLlh16&gY?)z zdx;g_0ro^CrFXE|-YRK+afMLJb9UyPGxqjx-m-Hap0g#qr87wH9(;|B=^`{$l*v}g z5~kD#srHoGR)LG~K>9InLd99eRcVq%QtuepSA4U&@xN_t)mZVmEkX<;o2h=Wn(Ie8^uMR=U$Adz_VNksWpqABho?byj@Puk(f z4_W&#@U)?-z_3^$U}q_1iu2-~N&CZ%F?;7GPEAwt1SK&8k^1BuQ$QTn3>;Y-D!5tw-(IU&wnxcpQ$stv^WKk>`Q?CHOK+InzC%8j*`~-AAVQ)nBjL zTTO4+jjykxyH3~$L$Hy8+sT@G8C{rLma3$#%oHCMAAK{+( zaA4}%4-ium(^qI*XpvdF4Mw+$^@zlf!Iov)Lpb4+dw1D!l1?1xYqeo$#UnDR7^xVE zRHgu4SH8SVcep9nns5m1*b|nrGKo5p)laBitJK;)sn^_at@=*wyTX-LYkIOs zJC-p`F5nThfykjJ@b7r)rzfqS{iG#Sr!>`tj5z1iDb2wQ$J%#O5B?y&{uN8?_4-eY z9ikEqpkI`odxr3QcP`$xKm7Y2?A*tnlOzIX50;?r?hS)PHgYOdLWX8}dL;ByO~UnR z)3qpN)t5Aq#lHxh2PCx<_KJ-}mdjX&wDon`08#7?Ah{oV;;?Prx!KyfFarY?1*%#A z7Uj&mJiS6Vf-(Dmtngou=I)Lha9Dv9n|c5}0Ia`)AuM|}fEz&^22r+R4F${@^PIig`bm`Y zf<4au($J1UOdX-^#YJnwGr8a)8AP{<`YsJ%8i2pD?>{p3sty-{_(qh>PS}8yRe)ke z-M%nl@BaQx`~2NcEjN{8i3?N5w%7HJNWLQ0up|z$lowk^nt3q#k}fysR-+{Cu2mQ; zd!!f*Y(%oofo|KfYa0$t$LtAGfb|SP@U#Q%i+ipr!~I>rx-hwD=WgA#&#&FI3lnp8 z7Y{4XLEEhoZ@;uCB${)wY7{ z)Roi&+uq)-{dVdX&)ef9sOjC*i>WWyp?}5mX(sH3`yM1!m8QTSNz8s^?3MKAx@DQu z`5=P1OL~xnh6JNYma3l+ZucV`G)8ZYc~+RV)ebhNLM%ds2NuhX$3yF)%O!+mu)JS= zOpAzhN>Y=wgvl8anwWQne4{-?f;@ckF*}0vE-$>cUOX!i%ZjLpusXIeJPao>VH-t{ z`q|i|eMI`TTceXUgK5n?(fH<=4HOo*iH%#O$Xl;8R)xaGKYwKGwYXV}v3s8frmhzy z&FYuu3YCKq8{=}&lJRFd>cD=Ssdf-p?FhQ)qnr9||Hgg-c(qzTFLm**GFi#uN@?q6 z#un_%N2l$pPtVz{udgAYV`GIN<3W?5w-Aj~;RYmJl-CXE2BZU*)i$j1%6b{QypQwE zP%9p!!=&6h_4DWLvFDD%)cbskL8iw+&#!SB&g#1BuYRka`eFb6k+G-xH@JfbhUQ8T zINLH2pcKfc4ZHGHHkWeu=I!m@y=m|L@qN2@a{`Y&maCrMlmVd~Ne#tBq?M|sd_1HW z;e#yL3j4C#P5TnY?(uCIkkq?`zq@qiTApqg9@QWR>lJU_E) z*U_V&dG8bZ{PgFxFgb_dBHes6{FTF()Qc|K1Y-c7UTW$0+hFVkY%Ft~^ESM9v;FG7 z{=FT4>Np9(*(AkGQwxVIroDnov{~Nduf*(+j2(*k!R0)yJ9^f4v68U|3CY91%EleS z?rdc}i#~E`HgE5~{+_+_yZ3D3#w5B6C5u46$uKCHz4@RJV~^sFbG16d<9@J7bPkLi za!wd~klYo?dnLoJm(L$;naW`V>Q}OgPI7K;B0JNQuRd)Dj_tONelpv$qR>9s5^AIz zOIl)F8JQt%g8hUqZq3`fpI@?T_lO-%HRDVkN}}zVd}w_Le5xVE=@Xa^A6@0|;Y#vb zA4z+Yk>;!TTK#cn>IK(8g*g#ZRuS6JXJMO_4d!QL_3q^UWeNxlNDvyh$Y~F@X4%^@V zZ+~z54;>8Tg_&aphF)YsbD1eYmv9x#U{lD}?OISPANVWy^&?}i>SPg1^`MM|;v~q@ zSE`o<^wpnY=lj-wykoa7-?pYDLd&j_1Jlzu2MNa=W-x`6JG@E_guH&{UgDW09j7Qd zEY7_YF<8zO>QUnEAZ3MTGzly*xcj%_gmUsQ=TX~vXa_;YB-zWU$;Y|}7SoWE9-a_6 z_Vu-U_TI&-_UY8Ljbgt)i_*PF>OeW7D1nh9$8F>I;;RYj6%%lYPoK#>e-J2TodE*F zKQNQl*Yd>o^>7+V7))$~uK6k_#aZ;#&*XB5H^UFE$>dL#PIApp%f^0FFX7#(X%$~0 zf})W`nyvFrRBuB>x7qqD^XS#8J$W6l=9P4N7i~}a20zMgH%(5U;VsrfvvsM5+ z`CGJ-_VrG6kXP>`+*53U6+XP3tO&T3Gn-umJhbNJu;+Cu+?Rx?Uw{_>DbmMjEtam95 zM|dYtaQIullr&*4!DJUnoSh-`z!oC)9en(N9eVtr?I6B(JGxjjFG_ynCru(l6O8`< zXYakABTJGzKSwGgG*E@oy0x5{?U`B0yW^gbYc!gXc0cfs^1XN=JtDs0;o;%I4G!4HsJi_D+wWgL zd}Q}IocIx7pi_cMGjpsd3vM(`h{H8vC$8Sb?dey2R^^oq&6r&{$ZN>U7iw6cUlBK_ zeiu-BH8Kj=(`GQ)oM}sYN`MCEt<@Qsk?_TLB2;)$x5(;c1@S|PW9f8U;$pRA^Q@^{ zT$r+-UAt@_Ttp9jv1E&6LxA1^G)vHak^x?_^yX&Up4@xHqUe`)_tQJ}@bgD(wtMVt zFF&i)yN|_LVN{YFP6jig&qJ=G0J~e%RGGPCc2@(2AAmzgX<|mZGFL^j>jV4G|HuDg zOK&eDV`qM%lUlgaVJF>@XGmVutUTYtyTyn zeX;TcwaGQkUv1m^?i3dGWK0*364&LORC>qU@QlHgi|>osMf@t)L>eeEnC(~YeIKw3 zm?@$IWv+r8&~b>JpwQQ81YO`pWf@U6^ZoF2h3B76{3&zja+U4>3$Wa0(GIzU%HriE z4hYv`=*cBJvrw{G;?eg13Y>14!Mm(I2`qkYuWsAM!*#p)*-by4>)wrfwuyMH&H9iQ zFw2}Z3mY7DA*w6gTw#>;T=tI%*p*Jkd8-L%eSlx-sJGCupJgA07D)f>fBthjd+oe6 zu(R$HJI{zjHu0NLS1FlU$EyI^mB@V;Gp`%O3|jI&~YMrxAU)v^P#B>Niz`$znF0!Mgr>#2S5;4x=; za;E2cokN)c5!N7f7(8ma)f)>lq$hhi8o)FV>UcWko@c)QXgPKPmPoD&@n7aKsw*5T z5Yo*Eb4y9F#Rrx_&<~d#bQ$IX%n9TNV!)*@PgU#`_v@&!zK_b{8*I)wJ73_qKwn95 zaf^Uan~Qw)MfT*`xVG_N&A$5VYy13@KiZ>jA6ac3jVZ)y9qb%c0Cb5p64&hFmUMYT zi}&7Bd^||A>mZI@@pO%+(e8DMQixX6Cg=+kpbdaepPaFe{^PIg*MI$MJB=2MZ%BeB zI(SA|>gKcCcbvleuGBa7efWtwjDh_K6(5|ZdT>lEyA(1t-kkHk$P%zCU!gh>q7h|4;O=LKBDC$yumNPI zWs9dzV$=E!yZFXs*M(m^y=3zkSyFI`HpO5IcIL@zh>njx^Z(1h?rh#xxtbl~9b1E^tW;!TYlQN;!B<4pfBKk-Nu}fL(W0 zhiyYQEyPRwpraXes6`n7o1#8sbZeeNLQZjCV=?qC?EPHh9N3F<6}y01%M!r_;yP(I z0WVCw%hI>jx9!fiH|_2p;LiVe%Wi#ro5Q4c8JpQy#D=8;GfVAxh#@7~kOr7u)>Dk( zlHODdT`vmk4(7h-$-o6zHyMObBeMzQM<=oU{?T9k(z*2$mri2)g>@kYHW?s`9oOV0 z*!3(oT?(h{jekc_U<~Xd2s7v$%|7c8-h26@Icx~dy&+nyz^=V@`}jA%Mf2ddwsMOD zAJCXVA=2fV&cq(!dVXM!L_BLLukIv{E#svno?#KRjR{4GViwMDp!79y@bCEH1!pgx zbPXEm$fM%!zluuWA};B&2VoGXH>Oi4Gnqhr3;XEzZr-!&pI*0b{`i%x-F(0q zq;;3FluK1M`NRw7(2(|F({ahM5h(?eJ)H_VsF(TH2yI#bq<>fc7 zaCpHLJBQZAnX4CUda>%7lsb=EQFgH1Q3qW*1@zvD>M8fyZqpvI$a;gbFz;+M?Cz7N z_7Kp2vfbp6XT&uy?M=WvPNz@uXyr;|$bNlF5~X{-?mI}0Jf+g}^TnJ(XE{w2#W{nOTm!`Gh)bwv=&V}T!luq+U0@)+v`|H6zGxTV&M(h$2=j?0*E?rF86v!(GdSmA zC7#h9U>WqPud$JAb;oXVsLHLc?_kg6TYGTlq19!-pA~SON9y|B%*dpDqb;ePJMtk7 zE!TvRLvO_AB>{VsP!!Blv41Z{_=&%(GP-Lz^+B*fT=2g(Xm|mQ< zQx{I#)i+<`zGfFMo#71DECT@1uEaEye-AAWaq_IS%9fOC&#;D!48CR$0QWn zM$OYrTdg(F)Zq|fKx>bKs2gZ;wCKof=+;4OmCoX9189!(bb85Kl}A7AK1;q=#Ei4+ z5^Fy-Jdj_c>7NGyBIwl%8DJ-MM4#aRP!q7<55G)6&=#0_ee1=K^z zbTUMSbi_6L$N&D1cKsiJZ|j)Qt)Vtp5+L~2Z4Cr;0KdFT^<4s?zK%5LCHnASu;+Tu zb4V?KY8RAgY1J3dna0@IGIHOmuV1!{aPZgOdd*I-pf|~s+O<3YD3mS$cPT*z4YUX= zZeD;7qiL(K>`%5D_F!$t?yjuby{Bt-ckL;9@}vd*nux3RFe|)^1*JRP&0Lh2>T9h`FSY9+x zq}3tASZ37>RCC8$(jQlBV_-jy`V`knJW~A==k9nY(F^TXQ|hhNntlDd z>-O9K_K$8wufwTK(t{T`qy^XnR^C~%>xTk%aec17sKrmfOp9+?c%7Uov#`2gvz)W~ z`a5shTOYnWKG;IL>4SqKn{IKLeJS?^{2y*%?o2i(}XBZ+HiC&5?XcU0rq;v33V3UV{1nLTt zfw_Ph-(GwBg0MDHuJ}HL4g-y}SEk@XCmC=iDN}`kZ=Q#fGqdQJPuViRC%8|}&DkmT z@}EYoa%Q&TTlzJ0Qxdwb%8pgN>Jx1`ygzL*?h_xi8T@zy9eT?cTR{5xr1y zL|M9JoXeSk#LZ^EDz=L7eE_?X^0w;f#o!dl2d!h^q&Q4DnrLCoEYI4X{KZH1(SP`r zU3imCN6h$CXAZFE%h$l7p9}L(vP^r_38x<-sQnk>l zZg8ZURMGa>%~WES;54#gZFaiy=0$t`?Q3=#9r?N0MJpjo@@f}>g2#9*oB4$ z@rs*Qx7IE2hYxkJ&Ia6QO*dv6)&aSv8#P-)`(|Z(*KVypwJmI;h?~()2N9UmogG<82*%m7qXk}_x_;C|$s$#&(UVWWdBof%{!a~x`YVrCls@dZ0E zH){*iRXYV}&#~w{SDCaqWZDbJQrHLPn~BgGbvx)8=^!5qrc!a#Ml~w6&0YWjv@9q# zu%`I*$+~_0#n*NhmDz{b&VP!5w$1fT1{0KJ8T|KH2rV%cC}=w1Z7j+ZT2>jLdQrVF z$9m;C_HM+aqkr13p&5<0f7(j2Ix6dnScSIb%ct$vfAy#K%fI}!&7MIGM&diocGNap z&ZJC_f&Ex3EQ@Rm>@P^w=u6R|x~If=!%r}y1OR$j&cj;dBThB?*MGnO(?5M`>uAtu z<46gBpJMlrWVwoCyf}5{$N>7m$!4ig?+Qms^>RN>*Qhs1k zL-WR=LEN);suC{+1Shic6Y4~JKsRBz7EjW8V!5WuGy{=LR-)g z0qt-;stlQ71EJ0BG}UL~*0F9Sbh;-2#o`iGW2Qu z&oVmCRq&6@qymUl83ZIER#9|I14eRjO#)P|Ub8X-n`GslSD(=-_PE+461GuPFBu@F7NEhn>+|>?h620N zq>ifE6a{@7EWS(sTnq3W0DB6$z4qbj_RIhHYkTYccdR@!={roNzb|`5VVP9KO0XXB z4a>Dt!W+Ks7(l*@at=%TRdyQ#`-{|`+M|b$h8J2WxX96ab@X%xEjoav+>?7%d-`C* zZgSk-$7s!b_378vL^d%aV3(e=IAS`ffHoFndl~$`fIVBIq#WdfJGQt7uq#gzD8%8( z0(yySKriX33y#Zd%n}#7G{?EIi)h&_*eMQrIDhFJ)AAEmg5#ZH`*?MR9jfByH7n4J z21INF5YBOnn?(c@=amNd%chM6g4C%UGa)N@&!R1=m8t^5%Ds+V1lb@FsB2q#aPCn@ zMdbEcj4i@tb1t%RWc(VoQbPxt05H=O%4yT9IwOD7v(sse_d~qK`V%Ws~ z_`2;p+!zV$5nr!;ce705{oV2T3zO&Ab=Zb484A?7OH%0+E1bA?ebT^_rJmrWi9A}! z=!YLjB!LEqILztUDVt$u>ojI%7tf!x(;VBk%tolilk--Aldr{l8X&NFih?4nKt9RhxdWqKDt)MJ1>M5f5%gmftfmwuH-+$y(* zlvIzR3_CelBhk)dH-d)jyNjynD}99z5cRxm8pWcWoQ-$_~d` zHJS_+&}f1|Tr-0bWt6cvic6XTbq$;v?IfNfm%hNx#{$N?kXs9MgI_-;U>^Y1)TVqm zQPLx>w(L)!!r7@n8_wOm^!7!2@1u9^!(Y8`r#R`T!-*cMI}NgX@+TroTgER9U81!& zCOwTvW$gSs6c_{h^H6O_80R#jZ}Jo%?z+P?XTfAk9E-XvU{C@S%B(IGHqYkXRX@FB7mOeG$6<%=zREyYoufoMmO;6ea_D^Q!rfhy;)@HaD z(4n8i+(8u?w%)4@2$MWl@L!bNBiHvm4c(%y27>IH=Td)kDW4hrvRC#SgquKLv=v95 zzByo~unLzwD{3tYHxT>m?(6{Kh<;W!t;IrbZJXzvnyoxpwe{6?z?uwa zuJ;^I%B!eCEq8%k4iEuxit4*Xz3!@RQH@>X$UPaC`^8`V!cJe-Vmi9%l1*vKL*Bie zx=uZ@XQQWnoZi_#r4}jXo>I0vFS-0CFXP{l6c_{hNYWhrLukdQ35wGVS*w24fa}N> zo9Yxi=f6oP+}doiX!gK9<&f&HG2C?j>j&22Y}E?OaIRtFon2tbjej?F%5xc+uZtRv zp4ELJ`hZ=jIkIP0LXv%sNWkW#LFSCB_0XwW7mH=fPo*-R#6fA9Keg>_ZS(`t> z0o?%q0$c0n78h^_=mGed*=eh?a9biw0c3RZ2wI)ymVql-(sWa=S|Al@ldc1_>OpxB zP*FB5T&4|NE{8{^)5(7I-a^1%<6O-KLjDH2_q)jLH#auzsZ=!AHf)=7K^p>b#3?n& z{qZYNnsd3B&D`qodaqb-qdx_9R#557J{`S)F96$qi z@gm1_Xe(tYtF335i~(_Ye)F#5=N<*dzzmHLEHcQ+y~ML?yZCNkY~-WSQjwNUcC`R%0dNaWS%acBi)mp~w!&N3pO0Jb06Pnv z;>LFX@NLvG#jR_5ybfNOVjV%Uo)#6STL4`|+#umdK?}s$Y%8iJ>MvDO9+3N{6oGQx zy!tC|`TE7lFS$KGu=kSi6g<+D(`b|4F!h0YaFtiBfk-t4?%za6L*MuU~G4 z3?3$39HyB;Y?ul0mj)rFBh$P3rT`w7-&u?ib>L$HHhtpi1NKbwD86KgXa3x;qD9@V5i;pvqUlZIC=n^66z(;Yqy#q0@Q$Yo3$dD6Be*nIpE{Nk3O_t{rRu$${Sa0 za+X0%yRN7_wP9Hh)jt*4$8S$KYqu#my=Q~FoDK%|jF28yEr|H?h3UpQe#lc`4D83y z9&-JzFSdLq+z0gdOzl(0&q>$8)#SJ(PTu3pI_Wk49&-er{N~?WC9Z?IWVI-(eS#ar z4#*nnY?Mg@#`6{>>v|49$KPipa}T+@@|QQ;E3iy-NwR!=I4CF|p@EZ4$sOSWKoh;a z%gdkQO@;48*d@mxXWRXd9wJGPKSh)PBwx4rczU*eaz475h=_Y%^0D-%-rp|zO5*jQ zD<7@Xr5i;rUbTTFy68_KizAnXeqis~$YXHUC#ND;0`}o_7z6vT8hbIfF|fZF{jz2&uEQ~=dubsx zEvBmB3$P`c(WRgC-Bp%7q(m+*g@}z!aOis9#m@GZpL}Vb{@bU%8*z(66H1t4b&U+| z%JGEzJ7=VF_`ga$rc^{J*U0OBA0`LFC}fA%LBg*)dP z&vd)Gr)Eq}I9}q3dQ*J9+K@`(TzOwbbiXN%7yyRL*n6=k{Fr0U5$=G;F|Z#%oWp+d zCQJKEz^!n;C12B1e%0h<8iR8M`T*U(^G#r0)=MCZgN7_e3jHcYdJxvN?y#VGor8$~ z9jlR#Z#`k*jwA2bz*3ajT&@cpoM$qV`biE^qRXYub#M$v`x=QkFX@1p63;mA9I)r} zC0_z|&1531hCOk8`jF!2<;089y#mb>-dPjDt{`SGGJ zA`L;=FqF9mg$Gje*Z$J*mK&sFunRwf;I0ukYAj+sJg{q>C!cCoFBuU_h?iQ;hKsUf z0B-j3qW#H#`jx%&^Y^SYU*>cp?Iw=7fh_ryWUQ@Q+Ef$08i|xtccW=A2KHesY}Ky5cE#TP#ryUK#=B-t&$D1!!oG{_zraXT0DlMdFiGr#QI>Fi zuyHp}G|_f=;lfpayR9RhbAw!>!9fE=@-zO0;B^ej`05*uLHoiU{Nav0y@zcP^xsQt*)O7zA#fLCJAudsJCnqsD(-gm>^U~t zq$~__q{;oDe2&O|&Nl=B$uI(2#3uDpHO-udty4qG{E z6LYB4((rmaP?Z8P#s5)Rboc$Zd=%;*NW}xw9e*4H`w!Lz4#Kz8IiquE>v|8^U95nI zJyi2nAFkNrn=5wX`VIT?IvhNkopk8J9%HpQ^#YrqlC6>G{Nkq+STW~--qB%rr#mR0 zha+CEgL=6R>aT~3@Rj!UEMV6Fdl1e0!7}R1NgBvs$u!4~-S+qc^n42!rq^PoJ_20Q$R_0l4zUW!}+r@gtlRU#L22 z|AjPN#=w5~T6r0Kj)DCLs)d69GXZS)iH_=ko^@26c<;9sS?Ptsc*LYu$LQ3PJCE&a z&cOWQGwgYPbIW!S(X=?sp@fKLlB4X(64fBi(Iy)mL6&vxZGh7}$Rpx*s^*R+gNP z?gDLyO~idU$0tztPQ#IOZi7R%Ww^D5$_A&JY?-e-wQv6LxqbDA>u!T)8~Y`#ZBFYc zU~r3nzVkKfv1!38i?R>g$H0EP4aDp3fGCd&>}n}mPtmSVnZ@;)9RIa2s&rb2T=w`j zjVav|XLO$JWz-gbZWmv_WK(CR-Mn!JGneV`5w*Mc*UMxtzlRgSq>y7^KcJ$&<4z`}UFwIt{l8WUj$MIc9i{|rB z{%E(pxNSR#ZQ7h_QH68Y;m7%F4D5a6_)cDq8`u*J%Qn7th^F@z<`T+mGMdH=!`#UQ zyZX-S_7QsM*WSEr6ALsK*-^(jPXY4)4d3nCyVTNBK9ee9d>sS(chV@ngGk4~{v8nY zFi}1ausgV`2WBgfibI`HJfQzNxa&7=?es3mj3EHNh8^&)Kfht0|Ne7MxWCN_PP^7Y z7rujy-jLa6a(HFl2MQoU3wa)U7H5vvOxy9pyYi4OLS(F39xVK;;>`K{DLw{Z=INDD zL1fcEUzGG02Wcl;Mo*t%b-f3j1WhzPJ;U}va6-)$};Tbska{SphHC$V>bl>^5w z1Lo(hoaf9wiE3o>H~4w48LywHAsuMa6#)%YT7Y^F+Is_lqC235pHctWST#t7@%u4R zU<~ZXM9AZeCNXANx6As{aBepNLUa`TNK`{+f-{WYls9ck@ve=Z`bN{%ImzkHjazmH zn>4HUS8VOUimjkRsWUnEWL45F6iR*%pvdqTpzmsQB#^Y-Jgtng53mTE;bUMQ-Xday zO}_{%aq;>M?Gx&V7uQUYcqM_bKphc_7B!0)k}n_|FHe^3}>+6a*x;a~^!qLx*Vy?M&*0*ef1C{S{2In_le#6N>Pwdg% zb=;B1qfsO4k~)`F$H55#x^ZXtlz=_*9iTJ@_7RnfbLJ z-Eio;tp;M2iY+ZK*~KdtxG(y#gXgZCvAGj7R-8uhTz*km)B)n!A*#3>yN3etvw%Id zpp@VAJ_h#DHT=VW83X$dUk5{T&=2kbrg^u1V2>zbT8>|J?0kO&iTyQWvpp=p9=i|a zIm<$=&B;HT4(xYttk|uuZXv3`rWm=-4(?CB<15lG$1SL&myFGWQ39 z=p2xq@vfo8`w2TrCZ4+lw$L*EsUjrCiowyh`6FT}aY~VKsP-&ie&X!1T>{LP&&D~j zr+A;5!xEz`EpjWYPB+r7Q>NWbzXn8X_@{UlI!`<4JBakdL3_t3)i2XOGcO zcIhPs5$*g~L4hz^{3lra^u-c@dJc2B=PsVJ(-+RzMRd=X&z~`Yd1;cF7dBfQ&=Iq^ zJYN5Noc0>#SI^lWzPm+kWHb@I$1_rbYCA`f}5JO^)wM3xssFWRYs=%tVu5v%VsZR6>ttv*?^ zCm0^Pd;KN{G_TpihY$S#3>_t>(}?t|gSyMubk%7>4lxeuDe){XKj9zA&0FjO4KNp= zLo;SRI_9tdXI`1Ba(G3R1HVt%IYca%u3lhA=(5c(&DrdUX*hR?r-6YVm%;mvQi)p< zpsOXw1N6@@+O=x5gH81@6xdZ)eJv+@9|r7-H2jW%9a6lc*BIDe(uz^G27$esRr*zQ zuz4++50iS&b<%BBZmO?*m5q9Zbec6feBVWWED@obc(geR*P@2m=dp);LIg= zFKz-(Se0B~U$=Yr?%D0zxA?tpPggk%WQ};XINueHzK9xKpIW5s*GRKw#O2(5-<5$) z_LKj#&ujK^h}T}Q!9Y3BgP#U-GWvag$P{gSNnA8B@Ij{#>G(LA#r0F3IN@n&33>UY z3$_F&e&W(uTST*EVUZ&M*(F+?VMRn-Ib>@va86Ls1x|?4VbKBXsyofk(m*Xh&#Zc; ztcja1#O$hz_T2(WBSyfUF7f@kLO7&GsDE+k%l`6qgXSO9u7-XH$NhDEfame2BU4}u z>_;Zq4;LU0^n>2diT?tb_b6B#*G`cvbut?DGq}MI4#aZvFm9EZb4LOsB`#GxPs&Tie=*>;Zp_O07? z@BV$b`rEd3f7?16Kn(sQQ-NBFz?^yIMdMaiR>zT`gk* z_o7{W^K~>>P9h_pwHbDVPH`I>iTrp~T_n&DCoZU#JlyHp%SRHUB$s>+<R!my8zt}Qtx_9;RWn5)Qo|BfaEX9>loNyl8ShhvjGM<2uV-AfUWPM zP*dQ6`CzTf)*E%J)#}zE&0(5cV(vnG>r@T31 zir##?Ca_1=%&t~_uOp_}-2mhtKDPCz>$bMW4e$%}Yp7W60q}LKR8HVOar;`V)w2c; z?T+1pvve?WEW%OXnB~y{CPSG%H(ngBBu0V5R#|+261L(d8Mv!;@=eb=;CX7Q>U!kW zGjld`a?VbjVqtTB-cFoYvMS&`Rjo!`3Ipit+)x!trY!c&B)Z6$ zgGe4z8S;yl8us=>z1K?4Srn3+ms&~oU6D$B3o{0qL20vtz6j8{eGm=tOUxiL5zk;` zD(|3M?tKjG2N35NK8=C>7>GEIB2R&ys3gB|>N05k%k_3`qIBF5_JI$3yJ&7?T&cMB z9k}?dt!=Aq@7nI#25Okdt+^YV$*IAhi63$GjXGSuG;=cToZ2oY0s-!_TqqHV27z=< zV#?O_?~&{4u2d>;-7IA42E4_2OPnIkyb6$)`PKU*fIT}ig9v3B5z3UcXUKFFmBSMA z2p;7xvx4kfg4(_y%^0KUjPS5KD@X#B0M>xX-XN6nnWtUI$J43<(457U2hIsJktR3; zcRyVB>L$QCfIY>g0CMqxCs&Q(i*oH@C`_ZLk4`Sh=UD~H%H;C)A=f~BgFeQi}bY9+0FS!YL9YF9eVAo;a0dY7u+ssEvW8lnvu~sH#B@*!n z07%>=A`vQeIeEanj@YNwWWkn&+gc3~4~x4I0xSlsD}Z}>vI2Mm;@kzmxqt{nB9#f! z)ncwV^_X=8$DZ=+xF#(X)DB(iNWdMXaJ_WByG?Tkwk)SAVCJhQ+m4co&-Qf%_sX9v z&Ip-8#jj-Oa+jF^4OJ=?dNM8$A=eonEx)6$UcBKa9m&+gaD8&#uW zByX6^KcvgcKl&O2`)Jx6$Coj%9|sl3aby(8U?S_a0s#j%I=PD+^pLw^S7ZP{5phbz z<+cd~gR>1F!8L!vlLKV{zn&Dg@Wz2v3%D%A3Y6o{Ll>U$m^k*XtiB6EIdM+6L;+7; zmJGxv#4&pqL29}Po4vF(C}d!+!b^432clfrJ>T2{c3+e5kD^v4)9yvw4W)%l8SH8h z-7cH%|7=A zi0sKh6i}4RT@mQr!zTW?7jGADJ)v;-;fF_$%?G32rRR9ZJYVpKaIe;#ASzKQ(XX(8aG%u7ia?{be1$eSZ`fJ=}hOc^Iek zl2hPtpq?*84>STS)3<&=i8p~+aI=}nJwO&9=>y^1i$E@Md=8e*Nz2hui|`5@PVpuC z?qA(weC$GYV4ZKd=ac)%h3|z9N4=+WXj4pCg#MGX7sD+@7=uR|H55lM>e(#8lk_2G z0CKZ5$ry%|Z4-aDVAp?hd)+?frH=Ulsa`7Iy#YcgE1Vp2GX-~2etNlfr(OXSu1fu4Qr-_y(rX|pN+QnpWi-ltejfz_1 z7+)_P1;)Vs(pAZ;oS{54ygKDbx$bhV8Q>jn2@;Se;2!))=y-6~srp{+B=c?c?0D4`}YYCD3t4@UuU#vEnHKZ#^8)L=D0 zcNdPjh9*z%fOEWo-oBum#ss)_E#RhiVZX#*x_mIm{3Y+{gY;oKET2jnM+>*j4%$ZA zgvN@h4q?ecyZ7<+a#7%w2KJYWl;hmIsuak0+~8aVdVL5tx>QGF9#W*~H>Ilge1fB& zS;7Qp(fD!yaPDaT$P%Y(-6YYD^6y!eh^NP)D-8#6cOAGgNBs;I-3^TSLa{b0X;-nt zFQiWNk-}hPzkz&(phk*0W4 zq!Q@wyY{CTdM^TX^2VP|yKEhV>%P?L-W5-7p;WM&((}BAzqEePHQCIkJV2{F`7BNp zu+oWSzqHq20kvtBHl`5}^s}F94D9>r?d5SeG_b3UL|cy08!OUm#1O9l|3FLI-#qh; zENfV~a_?`t`-!5Ibcg<|?Bs>EE{A`)8kTEObUTO|o+m{e187PZy`N5%^ z@c7}SpupjQo$PAkg@C-c$5w8pfDNkNH(1as`bYX+Q;Bxf-%vxL>)^&K>cn=4;0#!Y zcRgOc!K=hz!obqi1;}$lF9m6TT$y+ln7(Lfk30V3itpL2^sprl#O%hG1JHa7qX(p3 zuaTejgrw~HC)h=_f% zVN8KnnF0>Z+|Jt2fr^+4F4O+Y%$B9d&lYL(pA78=wSlQUc2tIhf(i*^*tt%AVA)_S>Ky5!u*zOo3ON0x@6J7JoJj z(Z6P}bAuH!D@|a$4AG3-hh6F;c`iNA4|z|_^-YhV`>sCk7Gd}|VUrw}h{2v*62sFQ zmWQ$1_e+681H0tgETLEpkbd0g*l!>1*x%p8t~MJbc3GWo0`{Hm5nKJh9d<(U1siB- zBg(8;WKfCNeeq@zYksHL9PxjCaLr0n?0`cQGYJz@l!y(LBdF6>h+q{Ha4u; z=42-6u!Gt1vG0;$_j13eQk9eri#PFjYF>KAJIGa7gl|**p;93 zbLjHj2l8^rx>Y*x+|?jBtF?^jvAxAJt}`DJ|HJj;{W%)DeAg5>G_b2d75qeXappS0 zt7O|82eZ!Rh>hZ8R?#WDT7~a{ZXd9#jT{n?d%%uHj8v^?)_Y6^bq=EhKVw+`uA9d= z{+EdYYVQ(>ghj{@$4I{3l-wJ~9Cr6-TOyj=)_;j*Qr{VbW_QmV<*$G!M(?t}Q$(j- z7!Yxdd*92{HU{%@XkbqPRp-KNUm*vvTfFEucCtlf3%GmL&Np7VZhFpvez#!_X(tmH z_V<;3WQZ*Wl2!rD7*1Q4SIrGlYJ-IuzmF;KDpDXX>mHVW^%b>w=b!;=ap5vsFQ9M3 z@N`CqCB5$r_OC%iACjQY53+F5KXW;~rp#Tj&S0cNA{jgVAQU(>u)740*5Ml@Jgcn2 z)0j%)paEd*h>J}WS;NCe$kt=hrVvTiu7>7uWbH!F`x-UhiU`;%P2$!9EnD4MEEKhh z=;Y9t6R>w}YAe3+HKxETK!JU2{YZJv`VPSE_U0x1hT-vExevV~V((vrX=HuRe-t$P zp7-YroCXEHm4)zp46BxUP9X*(9>2c~6gUE~M_sDoRiy&flG|zKY)74B!!#}5DAFo? z9(ePdyy8f4c@yEKuThCB(D7zc=VCNza)SL7)4)9pLu*<%)}?(Jn$I{7-ya18=+Q%@ zrPA#ysq;K1&Za(??|Z3Ca&!D1^6@#7`~JxF6Hn>Tz#c<-R-II|bY_d(B}Q^gLc4xz z*p=v~XyVSj0VR$ii$*_rdEdUekev!_J}a2gC@>9F^A@Q0W)Ay8jUC1m_;FGIl#MRr zJ?F<+#&M~Rg#w2Mb~PnhRe*6A11i8u7aAOCHVMZrPI^F(Hb6VVXw>&r_FT60oOIO( zOVf*r#TuUzPFNMLUCXo_-qMq?kI>zX_+FmIpK{XWf<#ZzBrEt3rf85PQUStUt-PrOW?uud0+T`f8)0wh5|&c*9brkz>awIJSy+cD))Ct@^RFMpunMlJ*v9*cdyMVe6wMDb=7{8 zC7i~HR?ur~0qnVENXzjxnPKfwfGtrBF;9T}g%&1D0d}jh)2`lPF^7S|RlItE2WJe2 zDE|mALo+nO@7Q@vfiVTf6nMEPaA;sxwgq<%d4R5T(@Xp*!KtHGZWAqOs|>OMc+&q2 zx%&k%L5NWtfdE^KyaofMQ$fgHMKh+tPCMDHk&xZ3&B?OlDDIrJ^NXyW|G_LqHgbOx zsHfk39x{g^5qac8+!exU@T@pTr8Rc{J}59)J0oiHg|ae~iFu(I4-+_FGL>quq`5eT z^rh5iQm90i?}9#uDb3i=vng;SU>9f!oPB*BaBa34Xv6Fo76x3Owp-COj%WnECg97S zBg7`7z&4Ki5_q$nS?9(~)NPktt`f&^Ks)V|bdsWNR@MM{Qs=)uHE~b5P!JWkKfNSV z>^1gY=gW5ho>N4*7M=?Qb~9^nvt|1)Z3UOzjZxQk(cwqYHRa);G@liAR5@M-_k+rn z&!5-b06L{|D-L}h2407a|4?)u$iq?N9!2k7{pH(ml*ZE-0^oyjDGr5j@7YI%^?T6s z`2D4#z>$DGAg~A8QajvZtFdm?c9$ck)_d(Hg?iqmKzOAC@7-ZWpcC1{Hb&OquosiR zx(zT(PWi~EoNwmcaPFv9%tLz4KK5R7AsL{;Yv|~wzo`rKH1~Ts8|L;>wS=EYX7X*p zK`Y-NvLU792Ypn5hxUS@fx14wi+m1EaqM^;6gV`nYxGtp=rsw| z^!HucDb0h^^}J@ySHH=(yJasPlNTlzSN5?dQOd({N;}BzO8{9KJ{!>+i@dQ(t4FAA z>|I32r590+|9(#tNR-cmbDyYA)s}A#xqJ;amG3Fb<7CDZcrFSY8rb_|&rq$;F~OW1 zy&D|sl{!}N|D*X|@0Ypc2gUySBtJttDvpDl-~Bp@>nYdkv$t^R#@Ge>@S4OtN-qoR zvk$#TCKc_mbAh74_!>@uT-y-s(b9dP>oCEOt2Zc~Ze00tcnLD*VqaY7sS(P* z1A8Xh_irr3Caz2dmAY3J&i!Q0DaSqFjSta<2FsHSDrA}Th~-}q_Pz<$_gp>{srR72 zmzD9;_d@}-4QW@U%WE`O_xT!5?JA!$Z(5oE19P0U#RL5u=A#l+(^0zFtzbQ%9+jDV zNg|=V&%v(=+>>xMfxD-b-4V<9@5@So=LGgtoP6{8o{N|o_>i`&TuC=xza{>}LF=-r zfxF9-f?rO5^QBSK9W2%UB>KA5h=S)Jn+PgoqAc48 zQpHppn!=XaHCw3c*&B0{b_$Ii*}O?ampZ46rzudMb_QYd;MzCeCwwA>L^_?W{C`Nc zC`=D@`oAl0qmEMR2FhrWXp-W}PtAv<`bs#tNKEZ31G{{!OI)W*;FxIbR3FhWh7F#{ ztA2feR9abVeFFwBUB6zpy%a|#I6&c0@zwE^3XjSy>cOE{%im53^S&ICfmPH}yXmJd zl_o3lMZe%X=CJpeNyApLHZp;4p?i2g%%C0qwQ;xroodlKNSwl?hi9Op&8b-@gc1^rxDpsCW8R&!-x1zlQD-k%{1dIj@lxP!ZP18%By_TZK%1pkR96u?pzl02P!Y!$4?yJgA z9D6E-N-(txnzA#Kl&?5MHXS9KZ;qJdS@~4hkF* z*z-+SEqPc|KK_DvDzq#8ru$i`s6qNvQmvnk;>N~gtPJkCIWf&Nbf&K(CXDMVp?Xqw zJ*%YRwhBypmBUuC;egSq^NaYUJ+)waC3PI_gB^%T+`7WL4t!j3ra^-9{t}04_|zB4 zQHO~FBBs&Q64x(qA9kr)^+lnR4~KcL1En`C)T`Egiw?AD?ECUvkw5#01qs-q*W zb&qNzyO$52=G|p`XQ_(qCH!+<@nxQizrST0cQ-lBRA(Qk&0_b76U*YXYOn36 zcdz@b_5Miee<-1UB#uW0cCTD-S!voTN{njK$48||S7}F_{yQRBIfJKu2#C&XoRqkN znQ9$YX%pdkjli8D3d{4o< z`{L^kLI1;f$q$G>o_0LE>_-Il6v@#W-|*yfu36&=;%8kWv5o_QpOv~oV<}$9$x|#N zxf`!-K1BwQX0^IcM?z+8mV#Y2mFWOm%s^w1XmmZwn zzRJ&03QMaUWa(vqeYViH8CI6&_G)%=cEWyrYSP|?J6{5>XXzF?E45YMwgm+8zqmAK zPq%jL+tr3W+}gG$%^h26zk74TI#56iLVDU`L?KHBywO&TgC0Curh zx3i_H?Z7>Up*k&`rXh4c4Hcd4eD&vj(L%7WTC=Gp9Qt(8&Q{v?=Gi%W@5-#bw^X(_ zrxE>Nw6EDj+)`#O0c)(2NCz*^nf;d!&)I|R3HxTXW}iLTv~M zw>Yc=uxb!Moi}OE1n8%TQpr5(-j%?&>ymFM%8>FZwwA6caf+g8?4Xf=iX~iNNOwm3(w`3=XPxSNL^ALv_4`OQO`0ncwBRYlT;cc{0+Gu5|H>mw-Sv|?v{fNnK zffQd#lR-9XEhX|+hC`oi?ZSamceJrN7D!J{HtfpT8N0STZSP!u&6XCXZECh^wXJpg zWMvJJ6Dz9&DC+g$DZ)Wsb6YYvPmlSDdslP>Ku!oHA`YLTObXo6X`! zqEj!e|Dk3JxwWF_Y?JFnoPfF1e@kXm{G*!Ph2m0A@lLULsRu>xg70WYpzt5p2I zJ_ayG)Lw=DILL#0FkIE3^vrsuO>A!4-qQ^hH(OT2LEFi7ZmViujS$T*e|Fn2Bd)Z* z5T7GI@l4)bB`knFa>l7oOl_OfytS9fc?>u1zgr$XM<)>~;z=RhFb001BWNkl z>6gC(E98lC!!1|(n++oUQHBrsAC>43|1YD{;eq`Ha$j<} zqR0N%0TnFPE(6JC|SHv}o(Vt~%o16zW55xSK8X zq9xl`4dgjRaqPKnmyi6Fe0GY^&eZlMSX?i#=qU5ha+A2KpIWJi`MS*0J-!PRM!|*- zhG`(`*#ppvaJ|8nh6vAV7$k}`b7?3-fUr#6>v3lHkzFotSmETZorODp`^utSyLiUt zQLEi%;q(T8e&gXI`})CC`CL*$JZRXN zTkN}7s@OFE{`?a0GQhua>8x$n&fDt!JGMAkv{S_$o2KWM0qfpzmnyMyM&y<9cw-KB zK>eM0tF044eXigGXUWw*6A!JBbV)xIO>Hh%yMW<5wNniY)`V!LeP#MpcwL1G2lMbU zO9ay-Q1*KHXw)TD+PliQSk)n@7Mt6~Io*cdp%ulOpmMvN$6TDTTgY2jwh` z2un%;Xh4_0I{ZVx-e#KW>Tzg=sN?Sf>{?t*okXEj7J;4eb}W@LG?U-2qnHh~z9N7- zgV1@RGDZ2sct~_8`V8hLM{ED68-n!MN8b3CdkKJ%n6s<6+L@FP98r1n$kZ7-knj=R~&cex`fRjIY;_y0I;S z_OCC_*_HW5;kv(! z;VwW|qoz@14NDD82Y(mffW_&m1BGl`9HD#dcI*y&8X=&a{L2&K8HW z*J%?J%%^TKv5tG~ zo0YVaRHuef)7hX~s-Tv*zHTSy=j~T#Kd?uLLRL1{?ar+=`{dTTeg0tA7eF`BiD{JP zFl_-xuEy?ltlq>7L3#1|RW)k%tW8lGY^dStG-2lu1J-S|QM22-H8wEavC~uc?X@#A z_TiaX`-lbE3Tm3{2tl;6%K|%_no6us_=Z0OEv~d6F%}E7wD%@^J2r9oa=m5$_dkAY zcVW}_CQs0Y=L6W`6hvnYT;i@>)ig8dFrfiQ)E?2^66N#XRZ58|HBe90cI-6bpTGIw zO`D%T1<=bqLXC*BTg|Wf!{LEFUs9)yIMrbdT;D{tjDS2&V??FgLO#a=&*jCcoj-BP zYILZ3>nnD5bJJGaGgjB(*l1w{^d)F}LGmjLL!t;SE#&>tg~O9(k1o3&62^;9qv+XJ z$(KFK9Kaq)s{bdBJ#p<(s)*bvgr78+xPLKdo>0gerz$0@G7wE`3f>jPD1VyeN}oYpKg`PJ_PGLk*y z=X>b6bLb@R%yJ9beAKi?4e<-JxH@(7)g8=ZAaeQQ{$u3dYj%GJ04*$_uDN7QOawF~ z<{?ywnIu-yASK2lb$LNLA|YjsKf0Aial0MBxic{ZaJN`@XxL_b*Y16@V)yPpw9cF7 zZ0X%Ac7B$Y!U8U8Hr9Xvk$A;9b=syhsXEB`txzR?DRGwE_+EQ@(e}#p^~wVMy~-?t zQfcPEKMg!(vRHtL5jcl9Gz0cNdgop;vZfk{6Wu~4pxM@PrD4;oLu@dU*rvE%h5Z#X zD&|+-{qVq^CrFpg6G_uOiWXE;W5q5^x9qQx1^(r0XYJC$oNcqB|K*dq{mZwz_VJw^ zyW50MDAN#_J|cer6t&4ZV0To^?%vn0y1gg3&=Iw$xqzm8id~?aL9vHX|#Z3Q1IzG)~Y)^F^i!1d_E4WTJG+W^r2r z1MeuYc&ei3DkbG-zri^kF~JiGD#UNQ%IlKh&Emp z(W00CSM|y3NSPOh3_wjVh!$iUMc_gKI{>Qlw9e&a^y`*8M|&qgjv(SXyF^Lu@hf^x zGDugb+X-f^nxT3-R0@RKL(H+)snHK=XwR@0mUDjTK;%a`Ve{1V348LWVgK;?efzI0 ztUmy>o)%9bLShLPAnj;V9Bn}5@Mfx3Nmvcsp2cqaAS1qxMVo}HF4G^1+D%8f(5{|t{9^0%Jv>A*#QjQSa)RO4GO_oEIc2Odl zCOY;iC)uc>kyEQMKtYEl%$$pa=yVmRpnf9xx|3YL+V*{<}8x#iR>OJNnEF zX=%|`v`r${eG&Xf9S#rd2a0rB;os)Q zLn>m^wrNCl-W%--96b%oIVZRWYDNoMC@I1bV9|s4)Ny2C9X{U^7i9M2n(`YPZ1&W+ zT<#~J1-M++FRmnDSn^^AbMMFkZ8#1Vnv{U+={SNZHF?r^wSCDDy(&}N?YvyzE&Tpd6L~L zdFp+Oa%t@&%HoUFq9$Oo)!wqbv*O*OBThJ1r7O#G^tyZky_AM!XnL zC1*fiRGhS5VAf-j@ItK8kNT}jNbn*D%WI`<4;5M8X00})hAa^h1A+RJW}O#iChYxFQ#Qrg!W}G3t|RK% zf=Ssyl+&C*<_#mZ=JYG@S928z z3fNf~WLjHh@u&n)wFTtrkc5u~ExpspP$Hi~?_8!`8sb94!Fi`pC)HF_J(>7A>W(xT ziAB)KmleDKhG=pQ@iwNnPq0x4?R|0yL0I>Kme#LG?{NJJsG z%mJE7UYp9Rb|7%cz6;dUK4~M!9(=$Tol9ybP^V664Y*d{`Y(>1*{c*>Ta72Ay~Z=) z*_7sslSs2C09J`LTG)4yKFVg*YzuM5E^AiJ4g-Fjwg~VAXh&g_%C48d+i#XPFD>t0 z7`0tJ2CySg@p5=EMK^A>0nIq~m|=JwP^O7a$m#{`GN9&dxFnMX0KC^e%ok-U);9sy zO=F9IU0~7ouirjnZ^P8x*=*U(jgH;gYBET%$V*xA<>DGyw^4u80Q=7PkkQfX9mK}V1!)C2RxbSKBz6IXg{Xwh`_F@RYiK2 zh+941pR>j@KpnN829+f1iZ$eJHR`L*3cTR1LS<+n==Iq-R`*#bq)N8x9ouQ5ZdXG! zv59IJ?QjKg#FNdZ*52N-c`EpH>wzuOz>z?cs^CJYdvnb4qRN$BYJp?$MUp2*!w=p> zT`%3vop?hR7eXU}HE03qYO|rvrN$GTUBk(q8eOKF=nFsIsS<~#PEL&K7_=y9_q6aE zGlT#RPsm9YY3k7(Jp1A1f72i5{9+d2-*tCAMCcTS|N6I_d*4TY;fi$f{*p`gyGZM3 zm3$Az8Q;2Omp`X@=05P_z@C+F(1(I}QyO)Rh%)D ze|S+#%fLMgk&2QAKb70Z5e@vbJI#s;>}V|koMq(dlZd&>><+D>2Yzw7Y40zz>}>I= z6}M4|Rci$JG4@O<8p`34k#kQJrxCG8EmB}6m{pAhM;+-W!lZ($_J_0P~X;@(nH!xD58qHE1QtUd_6cRol0OsARQ|jq zOb?p^Znj=m0c7WtH6`Ys)C{$_D$@ZPm^>wQWEzrBN9CsJtvEJ?gYy%Qrp;L5LgGrD zOC2WM)J>y%_2}n$guc#Ycq8Wappkoj*5$K;f$IP+bsirgslhZeO za9RL}Bm6ndM|?|B4*TxdaX`4>N_&}duRT)sKIqA5n0Ml(3+{vN4&@$3yCS=ThkK)L z6f_H>GV3{_S9^knnKsKrdz%I6CaQvMJ3CYI%|ss{n*8X@oL!o!TeZPD3am((g~eip zJ^s!oOEz4Au37}upe~*BA$6Ul|6Tr!q`#OAtBlP% z(Tu?c&1~7uojYTv>Hil_PTKp6OQ=BZ*&{S?Za;l$Pf)pB-Njhn))wukWHWQ~R$*sV zo3(>27`+GVqTOikpp7$2k3$bfvke+ei3X_I^&T|#{V??NB7>>V1039cTGx?)y$9hU zQ*?;vh}ruP+9^zfO1S=L*Z%&?r?z|Tf^*y0ShPE<+x9zF+i$L_Q82XyFsImLF*7}7 zb5!U;wPdI02=g;DHa9zK3-b%cSrvfpL)&76FQH|V=Kx(y5;8@^-VCX=tKi)Y+Rnkk4@KJe(5e2O;8zjvIM>`H*ugRcFV9G35x z)Q>6*aZty@F44pXg#F1xQ{z)FPyI1?jQNkl;>e=*Br?BQa~YN$AHW;QX1|9e(iF~X zj#fjnaXGY$3K;A)=jW1@&oYH6@1fqiw?%7T$3*U=y>;e4T*b3k~v+&fG7pCm;$tAmb@}!+vnzy%? z**&{J*;!qFxVmmPzP@3zFm_ikQZ`wJJz|f+O08&rdws?J<<1tHuE3DWEP2qHg;Xn< znR~@X|C9NWZM1pHh`4I($o0}?MfAG-kzYp!_MnFdlkTk1k06w~KnqSpDo6kAi%0gy z+fQwV##`^~AUEH%jXLtRCW}96vT8ZV*bA$Gc8Q&EERrs=@?J%`w}K_QlhvwS!KTIk z`r4A6JTp%lVv~f+4AsGqkg72$XZ)#Q@JJm(tKuDcAX>fl^UEwWEzH|JRNL0Dhp{7Z zPXmn;+F}D)UQPP-G=&C6p(eK1Y>wH%rR4>-TeINHY+|F{vajy1+2i_CIx&Mld6of! z5)$6QMNBn`Cn1l@qs=eAt5N=xx9nC%dmT!-?p^t}=(KX_bB$P1`|J zRb=VS;lke>K={<_41;;;h4SoBsKM-{q^18M@z=0Rv=|Qg;oIXJ7L*Ty6=`D(zm)U- zQV#dm@2WEU;&hg%2Ay91SdwQp=L?1m@Y)etVNs@o*r0>lT>GiZh+P&Z>vrw*l)ZKC zs=dn&&a?AVaPDxK$QN(kx@omK>Wfz|*xbS?#1`rUlh7ySHPY4^jw&G4hv(7}R&f~|>cIxa%I?@DxcK)jEZeoS*e06g2uXI+emHx@%JnVYVY3iX)d{kRakG`>vfX{q zvh~dkR3=G-z9;oeiDP0IikX7|zm4)i8xf8?`Ov8RWwaaKm=31WtMv6q!2Y}i+dq*LoEl1I4IMPddb4oEWmj4O%{K`#fLnC-ks zLv{UhkkU{D)X5AMvnQ_D8J2S*LIbEEIOicKNk)oDapZkb@gzs~7g6}ZeZ zoM!a)`33vMo7e31^C#@o5*vn?2R>zY=pR=$><>5Y+k>08?bPfvV76$@g_Cgj65l8v zs!!E<>x_Zh!IJaQSGt9aH_t`0w8Qca!+ulEW(mwfW&2HxWxyS3q81b+<&nENP*;OE)zTUJlm`UM6ZEDKCcx_F;7Bc9-(HNv0y44* zcHHgMI#!*Xw-qY21yHuxxTI~xSrb+lvZm~+i1KupvaA}yZA+6xmf^~XP`2o`t@4u9 z*p@8yF+aRl>7vi%mFc002^k+vh-b;UJGKs3-^B*@T~^l1D2hvUs>~E|25p_$Gs|}I z6ro;cKtUz4!2mMNW{~;DHZsvkTPW???(V8BW1qUb$bfWh)~DF_*do2sT1T6KCWjnc z4OZO0YX$)18f0dW^G##KtIP~VUsP5<*Agy7nlS+u0ugZ>A-fja}O0^)o_D_ zb{GE#ZL}#wV~1Bk_8ZT735OV4{e2{;P%B#+DoXW z4i7J@mLjKU;!1}Z&9z3N-L?U?(ty$2PrD=QHiez@t4kew3(#JinPqo98eABcTYp-I z+g!HyubgEY{=9$NgF(6VU=_P9kL=&RxoJ06*)YSRXt{=naApBzf;n0+3#QVJaU!U+ zsvnghqi>>GMxZo^Cc4P^AR2keqmcd>S1*J|J1T;%dzQF+Ope)e5NV(S!@v7fIVg@@eAJJSV8&8a~14dA(}~Y?0Y@8k8efxx8i6NTthOU-_Ry1G`F^ zsx(!rEIn@TYc~u-(0pgv7K>uvuP`U`X*fd zCQJESoW`@O6PlQwH?+Bk=L*}J&(f;q3s~2qal0&DfPtG9hr+s|7JS&~LAhGerl8@| zY$<+#jRpX1cXzPNHgq^or@_EMOk@Oj0C!m@bbBD;QlN7O9e6EjRi~=9%Tav}UMx5} zcdW6)|7d`L`=momQXl$Ny*SnNOJ1XnQ(Y-3vg}Y3Ml30^LWaO3bpfQAgrA4d+@Ym&{uC{!7_u zW7Se6l_raGnDXlboH%pM^<;riHeBl1GHKd8y5?^!P1yhS%PaQ5nQ7`2nw3u?S(v9C zv~2#wIYe}ry4~Ke&+e?*x2!Gw;qFtrk80ne8Y0Mv(=a703c?s{q3u$G_M)9vw^Nxx z-+|Hzmt7fU(vRAa1}y1&dz%X3UoS)q_TAusdKwJmmU>$^_8j3=^{$dDbzFb;todvq zEu^QssokaR|A|>h-^7loXR2)Sr+pGl^4p;7S_qW^F`pUIRyz{cuv=D!=xUQQ_9;8k zbwu#H8x32+>ZGCD-=;P`Xjhw6yWc<`7yzDF!|2e&8uu!T zSj;476jK2H0_@*8tlM2+9qXOt8G8>ace3A61Rxs{3!$aZVv09EJ7ZPMBV58xMl9Np zj^y>oS?h4=HDs-;XaY^Jihq__!s#id^=vF*=!$Ykn}A!JKBS`6VX;=a%YuE`FPSb7 zzs$2XG5iFlQY0N|~t4GFW+0FzzmGdo=Yb@hj>jXdmwpN*!#%es}w!{q2oaL~k4*&gUkgHKnAD zDhk?7Dn&Q)x0hnn|DebCu1+~gr@z29*^||?n5$snTd;w<+Z_?AjJTqm(4wH92Eu}~ zb%G)d4C2-$LQ^YhSrxJ0RAbG~Om5pR&z-mTPtVy!jQkf72{aKGRIz(Bg-G%7?gr~H z+xCb1EB3|h4STS`ECz#DjWV1ia&)glDr-+7M8F7c$J@7nTADYi#$L&l@&30FMH%9p z59bvc*JyGKi6e9B@3c98igd7cvIL-=KXpH=twB|_H+Lkg#~bfzBi^TJL&fQ3`*vs3 z{>QiU7y9H?I4tc?O>En6X060BFor@59~=&0&!$j?p1%f?*@&0bvKEM6M9&yUdo_6DLPhnI= z_Z)YXRsAZaO=T1N0y_E&@cfI+G!{5(vcRr8KQ4g*D!@crsF{7hg*UMaqYW%Y@<`i7 zE2m>~7yx_w1Zrcbd~TvHr`do`R1()CE>Z(bh(HLdBi&$2W&x(l?D9J`ClLc2A%5?% z@^qhaHEH5IPhWsjKUb~W2g_Ca6LwE8 zq7tjNvw%!*2kn;~+S`NGHT&B?+_m4WbnJG6xgK`|tDG$?MrylUQ&W~;iG48jJEMos zW^@hEcWB0c#EzOZ?XnR42(jzG+~J@P*48e~Q%8tecegeTQ}Oopl?!(1!WsMDKe~+l z`4#)u8;|V|_vo*6cCl;MxX9>Dm3GcLh|XWoW~!eOX^#Nxy^ij~UpCqX5j7=DP4s(e zb;1X)si-dhn_)({co(IUiwCBd>fC@kvK)VJOEjSApw#cs(vji+rnn66d~ndUhJE^k zsr79ZQ+KCrMm9KTbf4X&5qT}OyY1aArpP)4N}?d`Gl+cx z!mh&uyQq_03DmopQo^}fMlE&MMNW}#=eY^4rBC(ne9n83#*^w)mI8nd~J47OzkfexG4S^&-tG}~Zj=rUT zDpfoNIc+$K85VTXrWstckS?QHey15JdGD60NBqcSw*Z-+9H$#}IH-h!B|iLn)G{HtXqi?AVh;5SgQbC)TJe@=5cw|vtl@CV%_I#04 z3vtJk=LalquCDSNT`WKXye__Qv9p7`Yuzxd3kFqOB+uUFvI(LurlG9GT>hIaIOXe) z?O!lcT4oVfejn0#*WiHHCs@E`kdUqG0#obKZpTie=~G0eK8c!Jn?==Xb;G9FR{b+H zAI|*wX+%6MB6}OAu>l_H;L@HcA>t8dC@3-=hQLCr8sVwgMSBNuxLQ6zbB>k&9W3f? zvC!0%9G`Gln?>w{Y;srT5^8pt4PYOfK{JEH5L$5gZA1XmoM8XtF>3*LI5DSHWiZli zMhz-qXCpdph^@4s>cGx#^vBViA$1m~Wk$m$iz(YIRBzKTnhbgp139pZ=A!ap8%zdX z-Imq&p4y+vfFvCQa$B6G=!cpRAOU*_?c}E$OaFtSVPN-l3I>J}CN3tS$t(+WOO>X* zd8TR?PtM!r^JnbB(gKG+6XVW?J%*SK{9IrcC0Yyy8i?aLU!#sA z?$jnCFY#p*U>_+tqW5MI#qv{?bO4VJng#6wpjO5F&?mK^{b+5+R(9^&qsMD#&@9{Q zXvm#=OZ{sRaNo2q@7}j3^xdXr#;RW!CDGhPj{Asvq@2Doo}Uxgy(tdd-({KeX(=65 z&_U^GQaYmtr(5j4UUoSQ7=HIM<6k>$@YJv_bp|FidIO_n6rou6ms&As;O+Iy+0 z?yhd28$e?RL4ZSuG*Oh9=0PuGl4fi);#ZK#q!&GC_!0OKL=7aH7s_Zxlc?d4AV7d< z^ZsbAxo$ulN*&$OKX z&nVpcV5(u5kOjF#vo@wRzkgDjT4CkPNx46_btrvhj~XRy^LkMh{w+;ET~H5WLCO%T zhQG0_Mvw`>;BHvIP`+Hjg$SuQ0z!~1evDoCrK2~3KC`6+p8CIDy&h0R$%WN5%L4|! zdVPSbYxXbq&WLh;5idp}!u92qn=Kc^)KlqtnwUM8w#{9X`z)p1S`m6gQ|+FW(ngs- zwOczGs&Tq{Q!A%6yXEYqtLdUnC)z$aoQ@sQymYzZIJM~bCH6#T;fx0R3FBau?I3ntY1IZ2;f8GKF@kMC>8Kt*dKqMwAd=OIgHdz|or^zZ1i&(Q<63&>s(m zX<(AC(Jd>=3kx+Q(KZmXQ-~p@JtNDQ_a#+U4#XXoGG+0_BC}K6%@5cZz`VW4s@2i7 zMQ)g7wop|gg8z1o9q~rgHCIQHqtUS5Jex<)q^BpqCR4U1ln;3?YWB~Kn~UlH`}L`G zV{A%;NIJ(-?a`zTaGacwA79J0r_{}SN&~aopu;Nc$m^aV=@S1~)OMGrPXLlF0B{kuzSkIAF&)=HY-OWtEVP5HurYV-h#53@Q+ruWX`JFEV z8*jt%$WNsk>FKTW>Dx!QrG5K%rDvbnqw$GO+N~K=Ga8q;C`Eo;_lav#>{=;(O+BPL z+E{Ah?ofK;_7#n%=wN6~d!5nX-MvMYzHb#jHEtuHJB@XLG|KE&-^JSQhOLzlt_Znp ztZ^YK;T1*$(&l)pe0?mRnsCM1h^(*$aZ&cA;97>nPstzOz44m(NAKGgVbouCIvv+k z(b+p`UfYyhfBSs8dhJ&F>d|}Yu*N@r@U^39zg(X``_=ntR^KPJ&=BJX9 z-E+{KeYtYx=t`=>BVbf!=ZPE?XxLi8h=65G~lzhPRnA}%ZkC2b)WLTc& zMJR47aMLf|OXYFLnQ+p{zlyYvJ2{jkR3Y%H((7KC3SMopf4? z;es}w(;88o&CAY$;-`G_cgRMrH*R`y?j6eY*bM@STe~JP!WuQaHFKV;j!%Kt|<{}DI}$a%}*E&7)zLKnuWBe zUiFN|M$VsJ&{oFh)Ax?xwL^mi5B3g4vV(`+$nQ!I+?S5aR)Gtr*{umQsSPMd;UGjQ7&csgWC7 zJK_zyI2wAGdnIxlYOC4 zF^;Og*pr|xLG();P#2li;z&O*9)?Miz4%t>vwb|dXMC|~5>9oi;gO5N6{(~Hk^WaZq~ zY!10-v~cF!m7D4Gh07^vH_h$Kx3%4}e9kIkRExprwJb2_TY}G~Xwc61N}=Jyw$j#b z92z35RB7Vi5H)z7L~LR=e)H?Pe$26`Z_X#wbj1n)5%Ks(Rpe$hXh#Z`^F?ESbReWb z)uvQxc$eg&TGTU}!|mO>TU!B4rccgYN*`)){G&5h(iLrOabBx6pOWQR0ptE#aa)66WWvO9ifqJd0Gap>Xxe9gj>*w%i zgNnTfUPioF9u+~>A(RhHqz198^47{M;B`tW!@AS0mG5fbEs6sog!1uUM~UBPGYW0H zlhUxvOCT9DV4Kuhv6EZ_hO&y8pUzgo95?p&=a$mRYiHBnZM&r&>u|cE`M~F-w6ETl z)pGTMPO`t4_G`1Hr+4hqE`tZsL2Z}tyf#`oazKNv^E=axYg1|F+EpExJd(DI%F5B6 zCnK6uPtSwhDnoh7B9)@Ir6q-GpSr-e`$rb>xdNl2z%{o|DhXF&TpQ) zs5#U3(#P_%T-0=)>-VK7gzutUYH@rUqbOM0C>2?pMX6U7odL>!^kCiwl=%YzIjlT| zGO5f1dXXklj@t4QjYrNoM=zzcME`7q#2b@DSJb_XulX19P`-mQ&w+Y70ZM400r{5d z%r|e^rqiX)YOTuc({eN3yPVEnSxP^6{y^G2twwqNj(T=uK5w?;aWP6{T?bFR0|UH; zf83H>^cw~GYdc)P@g!awRP0R@gs71g5!MjM2SvP_q(uxu2uhyK-5s0d)IwE@%!9&F z^K>od)-bMCRMSBVD`s})xG&BW|hOJ1}-9PRVdhiFI*DtEg9O4 zRu9rBCnpt60`0C`pi_rgNxD(i8VOOU98}I!PC1^mz-w7 zfcwo)&Zl2|qS-FO>)x2ooQBa#C{1 z&%{@6CZagp2$uI=QLEzBMb>4vggs!8vB+f=j2lf1PtLnjiWnX$l@;$4)dR8>E34PA$WEKP>wJ~v^s6u5_ zl)HNufPli!e*T9h#;23P1{HgeHh#+upe6hf11)YwMI4Z?1*WBJ2epK^h7HI&2V2Ef zS*<2|Bmm&}>CLrXj1o3)cQn0uT9#}=Aza)E_5sS0li?`^E!Bu}QdFaCn1BZXMP;c= zDlN36J#rT0o?#w2JL@q`5@pN~)Pe?{Mn|_QpGEnMHGrzQ^OIM!%2j92?$!#vJyRFc zL2aRWSX+XB|L|1WH6>rB=7=w9Me8tg{c%fDdAuPLD{fgitJyayp9aQmCidUv7Jw}C z_A)X1GQlqfW_xKf_#Grk8x^@&XdWVg4w?zXD%}ySIbcE8s5X`AXz%l+HLr^cx3wJM zj&POl9W5ZY%#a$tr0Jt8tXHQ8G^7DI5%<>OH4UMTrCT}};;wEMjD_G)J%E|Ug*)5` zF~cREOQW-@pwhds=mg`66uF_mD0C?l2~zoMiA1uJ)R9WSw&j)oW`rC=S# zN>E_qu=iH;refzC#*STtP*M{WmZjhq)S$m{=59K=S4VR`yE|>s84k$HqOA87ZA~!3 zCWII)k_RR>py0bMdnA-!<#O9N+z*?g;9dC9%&(UwgX5x^pgs1}}Ufn}_4>jnv4R2%&CvYTln zL;xTEM_N65>s2ZMt5zAz)fb=YB*nKNOLs;KJ1*bW!6#R4rH?fbJGQt#?fdHU-Y>@+ zRDp^HsaTY=B*i|YeNI+T_RJV!Y3G>c^Q&CWqaRhC>hvn_m^O+M4w`I~6T}b9A_w+x z5%jv{D3QWt){$0!jxVHRaxd)}y_<9}y$^z3!D44-ij?`XRvFWy@m}Zb+l|*Kjd)Xh3Ye2_JRQNyElcJ}IeOeXK44Z4z21D^IH$Fgeota_Z0f zK|?6753L8yjC2EKeCoY>c*xkwiW>Vl)suM{JDN|X!+o}^ zvFGsZ`&wtBUZt$0Wy!>_RtI}frW|TwaFn|(ca;05P5Ge5!_fW#75mzZc$_iTjWEpi zKRx8XouF3Uwg%?NjeLmK614=ie5$|<4^LFn6?~;1r-GgRFiD9Re`K_t(26C*F5Z5pLlaobMNQJcB_GylHZ)g zPYgJ++EQ?+Vk~PR&k|O!@?DW)A7-aMS?If_G*wXhrf34a&h%6q!Nvqr;IR)}Ekp~2 z2eQQuCt%ed_61}`==kD2ZJjWe_U)KTd$x`1u!g77m$k3Y3pzh{eDS6|r(UOz3pN!b;>*q=H@~RyzRVf;}R*>AG^+>=&T1z z{lFG`8w!sn%=Lu}dh4gqc|F8}Sxs>Y-*u4MtI)VwGOEgq7+sMfdP^ebRp;qaXziJk z>zOh{C<4ffRhBM$e)E?iIQ|fqO%XInkB<)pWkpr)f+@L@XEbP`(1LhT3gO|G$46{s zt2z4fSokW7t&p{!tQ6vuDu8y}Q@Km>M|PyRlNMNwNU>v;FUfjeRD-}a3{;F^xkIE$ z)0cLQq<{YEeodjgqkZk=?zw(NKF<;P_pzkZTTu6R(Uz|&o~8$KBq9wGyZkYYt;51E zEzTN}LggIGz+7-HY8z$71!R&xy}Og1-L^FyKCm}Evv;qKTilga?%r0XK@FhR4-B(H zlxeNFi`3QjPJ*T(;m{&x9%0>~3>c7R#!sv*z#n7Z zO!cX-y%Es;t#Cc0qCMK940U-Se9pF%-xK^$MY`^(v9wh3hw}0b?aFJES=Rs;s*g>Y zG(e4n`Uo36vn6+Rg8q_ithi zksJ>N5>Vm{siBR;;Zh+OK`d{BGA3L~2{WXLPZq9WE1G87nmSQ(PlF(Ms+lHOpIFjT zeDnwK-(%>runJ3uy;hhdujMu>Efla7|FCA3Xg};RZIVD#;$(C)jHdegs#SR61YL)fG6as78cJohcr{gJFn7d~b?<_}m?;aQH&+DsrV! zrwK-;ZHuce!Nb_E2diE6K>IKaab|)}Zo?oLmg`PS0Tr8G0F6|@<gKPng*=}F@6ZPyd6*xLZ!cvw&+TJgc+vhjQe zrGNvFzuY;V7|%b?%|M~UVsk8WZBTZPEnMXmNm*|hB%vW-Mv1KKA$4s#szfvm^a5}U zox6THy?;Y9ZT9R*+cXgSLv7MDFZa$hEO#xex_osuy{E$z&fS%Q*EyK8+QDp#_Of|O z8*S~J(n2b2n{fNa^>qEpbsdK|p(Xx%(oP+CeC+wB(lh&ZYWw4Ds-TPMnhv&Lan<{0 z&ZmnPZlx)i*#~zjjTEatqd=R84(w2u37gCqsW_RWxK^u@fb8x`del`VU zWiG7&u8=Mdh1R{)SgWjoK;#d-JZzTNo)+tcJ=Uoj2p$li)^TJo$?-SG-${S<_WNm% zTqFl{GS%Uyb=IejJKM8+dpfpvS6Vo{oL;%}OuBgMPWt5JNuNA)K-(L?teyG}Y8m*l z_OZEeE~PW))K`!aKXmlPwC~{467VIB2h69BE}TyvpSzmgJ#{f1zi~_ZaLcWuW9bg) zl&(8k0m{)ROFA3{zc?PS-kw`8Ru40tHKpptd;Bmzqg`KVVNve?2=IqARqQv6pPKIJekUcO|89umNYIj zr&>a8X@HbT1%DE8hWD5ey}Z#VeO*bntgwmle`9%MQI(+aAdw1&7O9+38-UblT2;EDGs{NoypE9ic0bNiuNJ2Q%7lZy-9r!u% z6*Bn9a{QUGJvy!GS~`1mB>n2jwKVaeR=jG*$-~;=@;NP?7$!L!=4 z{MscQkfB3GG;e-lTnCd(E~l3#G!0SioCO`5c42Nfow=lKk~JUsql;J5$66hGT@~;i zuA&ib(4|FK8r{`yi?Xq_B?9}gvn`ru#AIRxg&ven4<`{WwW_?(t%k<#Chm0?Q6wcC z03jX48L;k5){ICUDT>mf_W)N(Zx=?c7Gy(qw*rfnPdl7_vo0Y5L1YmDmiC2K7+JPB2h+m0lAdsH=qctJ>KVD zd}%O%kFvGsP-9nPnq?L}{OlHV-CY0mfQp?03XmHsaQ&b~%tDs7QVce9Lpoyc=>F;S?5TQ<6#E_ab(dVv zNjArH&gz2V+}HU69Gb#OO$-OkGZ3Hg3?PD8r8i5M$BHrmpha=d7$${B3S^e?Fl{d) zAohu3%;kE}>%kPep)t!E_k)7)aOno2?&InT#i}AQynW#h2Sb&be48z67o7%`(WGH7 zU_~JfO8e=DTNpj7hJ`!oqN=Zn<-w6=fiBiRd)jDwV^yRfE!$tw^vH3|fVru7x3p>2 z$H(t#LDWKec5E(v@3~!R@=Md{(8PF})Dc!#{^Wk`?o#^6J15gm&uWK7iTL8U_G^*A z>zHv>B+X6NjeBNT1GuB|k80~R-OS-ZG@+?fK3#6ZOEqg=eD9@oPn1Xb+E-Lt-6^u! zW{QMze299!F>C}cB#cI5V@bQHOg=fF#+Z!NfVEp>4_??hQZi^cBBjo(l%}F(4ke3} zY@o2Ss^sdH&K3CN%57~hHkS@<*JjXLb!M<;iCxm_)zcaSx-mDZQ?n-1efJWzM#5LY z658bn01DOa*gk{RHo1N@Nz8-wZkQWzJB`YpmY@HRpWCLfr^d$(K5js<7Zz=>geNlk z>bOAezPecOaMJ$tj^CQ7KWOGZ+}`3ZhiKYOBsalx_Xq{L&WM76wesn|jFr z5`u{fMlX#;?f?KF07*naRORdT9yYRI%FQ%NPZpHLyhtV1^hp{4Mw@2!K6`&A-D7hm zogsSQ+2u63{V6488wBm&qTD~!F=!v(8%@_V?QC{TbI}C@3y9b+Ck95N*I-AI8W=Aa zDt>>aPg;2ZIk3lYS4~K$#=U+gNH1l`wY1?p_g#&^CYM{|HWIHQ1${+4jsWXh)9qoe z8j}kD%Fv1Y+q?@8Uv4|xaJmd&R&(KzPZX>W=4eFrn?e2-rKr`(OmAOV)`?8B>G}PW z>Cp0M+PPg;x~9c0%-u-0w1xAf+d8XZc`Dt}))bmV>3d#>-uN6_H4+dJ`DeU`t*{|1 za>;tWGE*i>M}|H3O>wm;om`8*b3ms;$tXg%bGnzs)qkQfsAxKXQyWn1?F9Q`hPGQx z;5ztAru(NzkYKL<4yX-SB`Dv4*D9atG(;+Qgoa-jN}$-Ka8c;`#0&wtr<@kg;wevs zgksvD?4H~-V^YeasvwJ+t3I!ltMd}}ckXD*;g8OF8UGPUB+n4qZuvp zS4EqXHMPus22#Y7>PAJ?uLyZZO5M{i?E@v0N~I^0hJTSF@EF_-26pTJJBWOBrHi}< z#fz`KvDaVzgT{1;O`w|3p9VPQ%cpx$9?BCX=@r+W5=oDkJ%%JP94xO$tlDNl)2!}O z_qS-AXg0lh`MO+(chhUn&ZQ&!wx^d5?~{_(reYevzk1`2Hrks_Gjnp~bav=8v)K8a z2?dn1q(X-@t=PR>cN0{$7sOF|UQng^@?-imrZK9KxqE47TH{r$`B3ao(1ltMF60-f z4i(={#|k@LG6S__^lxSwdAo=jePv>faQTMS3EjMt4HHVz`K_(m=HVBtTj7C+K z9-6Rkv>57U!Nm)Q@;~FzhvY_c-*|jnOYXt-@ZNB$+BLaB?z7r^=z{jhh^ zFQsGq?xt_QcrYE(YUfu*<%Ya)Jtgf9`hnJI++CK-P>1Twt4pw`x$&HANrPO|Kl-lD>KDnY3S9 zTkM{`nBF~mBVD?8F^y}r^RP}ho0Xw5qZ`)_yC<t`X8If!6kSK*k0c6EH|Uw!f^-%RSwx<& z3(*C>F3_@^dp>#(%qaV1xe-0>QD+OVnb@MHH_mC6*3J1#+A?DyedXXzxoLK#o!`<~ zxqD8fvlp*u&-YOsUAZ;g*5am*Zt0Y=%QNYgrq0aDP+|3}U5c*CQ~(O4PN@E2!>AW9 zHX*g#ARsY{E-UmUwZjHnpIgOl#PZ#STbojEi}%@v)shqqPVt&Wc)XQ3JyHkuX6!25 zT?;u&d2jx`?_|;zwpQjX-|c2%3S#)l0iEp(7UgQ;6X&lMtrfWAe&MOiJZ{Nzm7r3I z$pH*}E3j1Xu1X?0^ip`0tRMc93U_$|roa}wEKv6sQQ^?@so>O~;&Fy_Q>!TAF^|zH@Uf{f&-UeB_F^Icy~k`^uw&%V=oTsI@pNrz zD*ZxRUtD_QMEd60OX)|)4yJD$+@5r#jm`kLmv(6m{OHcfbmPFTbmqbx9ge7jfTq6Uh&>N6rcPzkuPFyBg=@LXMw1zhKs^V5n*sH#Atdf z3w$odqUilHS}v!`rrt1wMzF{Ym}H?aMGN6z3KsC0j@2)r&3vQW2+1%Qk(k92saecK zGUd-VrX-RFLM&gVpUYZn=N+8$?v;_uzX4<5PJZ4{3AYr3bA_IUS$P64iF&RQL}i|r z5OY#ez{QqNqMH&1AG-O`o6lk0)k9xn*ph#ps=x|O81&N(Evb8%Fa0G1Uo841Z#}>{KqZJeJj9v@&0rd4 zXHtC+4tM9)q+69&SCl9Kl6J+-aa@)N1$9THD1n@OO0!vNOU}iq+=HxUo8*k3EifaK zmP>M!D-r8m`Ew!wt4}#U^^@B-wSxLW+T9sXFFmy@O(?(Zn&z^gH5OYmK)P?oWSW%E z9Y-WEyB8n;LPmj*Eek|l^<1eJlvP%x0%yRQ;acZUrzT#LOgXDcAmiPPQpPJncvuV? zl@p5j!^7%gaEecLIeHCFQ}vWMrQA}ge_JqMx%#-|c0|-z(K7KRDfVUU#T}(JVeT%T zMj%*^0@1`f{qX@2TCO{!<>$jbHKnWc$Urc(DTBHs6l*Dqhj$flzQGAjYGiJPLHcS%F#t z^RMC54P9A5%Cs!c{Z{VKZcGC?EUd6{7eR7#3%mC&hrViH;{y1g5IImTG7_an<4Oe~ zl~k$Ydc~@#L9|dAvDI#=@HI}99b27JDO^>Z^+?4CmV_f0Ar+bi?D#cQQIc_R>6FRd zA?i|h7IjcHR#IMY&M|wQt)Q~pU<8O8{u|_oWQ{z)yQ8ydhcrlBXa*HV<-6@bf4$Hk zm2ah7P{qihPeYvmFc#Ykvx$|CBIJEAsQLo(ZI`oZrc^wlDy*#DrR><~EjU=RDKcSJ zazS6+o+plMi+t?L9EOXgq)Jb4uSjRG6-DzZua=!i-b;cUy@s_7U((_V@vRlf)SEbP zrsV6~vpnbeXPFP1ou<7sM%0VW5@#2%?Q>ZzWa7A4LVkzN*uk zIy&fOn`q!oEi~_aR-52)IOt7wfI04PDNL?avlFo_!634v~;<6DkED?FkW zzaz?wirAxutBtiKJ<3Sm6^Ba7{OScs*n(gNZtvGzDAy4B$gwxy@?M9Rq)kGFM(_-ee1q zn69EH^ZhNC3gggh)Mj@sjXVS^y$Lt8D0JpsvnWfqwdeW)?IwqdXwb*+;2m_M!E+4~ z@9FI#(=6tp{)J3O$-NY|3@9+54xHi9f*N?v;bqgft}ACi@fNY}ul1XW*;`tHAq*rM zPhc|!$Q%}T--RreQi$Wo4zbK5OTMMs(BSSB^_RRrj~t^-M=l<}HJ9GHbXR8vZ&RZ( zuOk*5BN0$YQ=6Q z1i@g)puCK@zSDi>aDsUS%Klq{7SzM9@(E=^SB@5LOqFkJL5C-( zNXzqptLnnr)-ZV5V?>Nn7s@78+{= zJ17Nw2%qo}KDZHrr*0B5jD>l?!SpRs7CKUP{$8TBfY$w~;GUC~kJT@gjiTWvJ5FlG zfs`X$rB~OH6&v=YW(aGGgSHFtnVi?Y?u%pU6|!A{<{#4|QqfDA#lQg_L7%qNJz*7p z2yeiyw?bp55X>CghQdIx&kG12yG=u)k3}K%dv_LYRuNsH4PBxFU4C*X_Ci=Bmo9%jPL=DuHehsY5LlotD%UV>ADv zvM~Tw)a7Si2t~5Byv%WIE?$2W=4Wk5i^WeDodcsa^U9^bNZu_DnNE?QP?LCTT*{My zA-eK3Ml2YDu{f>(dqh?Umy8Z6ldu)7{>2!}i4_?FPeVY=@E`hDmIrflIVvxX!lRM_ zp(3`kYgJ&u6D2~4lvM_n*i_H=qITC-1QeYsnx~W@8#s)@4mQZS|L=iX0b~QkIO&@T zafM@>R@DkC1{o32fUOFiKCX@w3cJK%#HAx;Ij%;01UktzD5sa3LGW``t1gfwln?M? z#f^ZRPJ&bTNjQczlPCuKR5wcfbxs4WmQTf?t5Q(sEnUb0dy^xZ@Ryaual#Y_l;fhq zAF(J|22N--gpxy<<_Zita9~J#uAnbQg~O8OY7c9<{91Ht!(g>uIx;eXOk=S_Fg1Q` z?nT3H)|;ukL=lAn0~w)$iheYy8}EJvcVSB<#8MyDy`ufNy>({j8K-Hz2ybK#ywjQ=IxPxJ zs=-=9NX5Bm6`PsxjAg1{bGZKIr~GQ=Vv=(c9v?W>0xi&zdms){f!phoF6ItnxvH2MypR@^EWdb@c2 zx>56^nlhA==E~dhf)Y;2hK7SmJNV%9uYy+X;4DPv^Qi+wDZfwxb=61<(o`_dOI-jO@T^}7Ls znHyJ=dUa^|20i;@05iq}ierfF78#Qhd<-m)h-l+Z(kR5)m3*RZ8E?g*u4;RBx#^@# z=jYVt&~b|vrk;!Jq?0&m9^-6A4avgNc)ELInSP4A1XAwW>2zsST*5F_^fBN>XOfj0 zOM!|Ui`LX}6!M7Vzz%$+@HahMcG1O3IGP(pR<~lYyJ6_D+Pf4xh!#|rlxSYtR?;#I zOWLRgoNoy$Q93$wEKLjX`$ehHk#?OlKbtT=PQl}K}VCTkbP&N6?k1k!#L zvuV42$JM)$@tSnfo%gXo*l0{#rYWmHm#tgKlo=^og!6tWfLY~tcL4E11+KCP4Ib?m8?P+;fdU_|28#)T(Rho zi!oKq2`QaP@rOz?DP$I;K$n$nRK|qI6xMY$<25A(z6Q6+2AJs;O^Wg3vr-&0vShc9 zrYXtEq%68cJCndr5m5r%4$&k6&BCBZGLBrRvEQP-!g2LY(Zbs$gBj6Xwv+Z;-6(Y{ z%2GcAZ{;OfK*96AO?i*&2stem_5l@(t|!V|vWZO0NeLpvY~kz{2xCl-Ojy96+Abxl zb;TM?lnYm3PRm6x4H%nsx|jOshFVM2i3rEN#n=Ud)1y+dG$cDDINNpPUF^Tu)I%n( z%MNu;UdVTB2-dm3oVK7Z7NoZ4@2KAC*u3TiiUJfBja-`yhAa#&@>!Iz)KTRb*JO_s z;XEXsGj1btI^NhA2W?{tiB>csH2ONIeFu#Sji{jx;-H6-WqS6_hOLbjfZ3(kalaHH zyng+9djI_oH1|>qyVW9(jce7FDvK6d>3kaPz^6SF_A37VojcPVcAVGM#T;v?W=Iye zB6s;yQw&4kN}59M82!hMpJc&mjbgff`b7Hmjf*0Jb_b+&>$^~#pvH)EY%FyX?Q`o| zIy$9pnGR-Nur)#HO&BAi?kz-x<$S|bqVFVi5V$s z{o%LrDX;`YnVS75^-&1A04o)M!CmsDQZgtu#ru^@>Alx~ozBg|ZMhG0hubTx8%w9V z<>8BGSG+qC-1+Nw(*bqgM`Vu9$^uxnUorfgG=`+&3J{yz?*mZ*@twFRc5uZSj10nJ z$M4MavZ0yV>DnhBq_?h~N~cvRMrE}zGh$APdrk%c)4ym?v3i!d#iM!2!OeLof64mM zY0cP>C1iXuFBz<_75iF5ZGH#t8n;TZD@y3XVOg$fu%!r3z4dk)JvAw1t#f33)+~xW zr_Txld@-!(t=`w_$MZUTWa|E{^t@nRlqu~kVDlJPn>Cv$=AR<24d_gla)n}7e#oe~ zq;e%E#Gh7G8@_clefZ|D(=D%~L{Umfs}3%!v6;PnCrwUGq>1Ti&EwY0A1QVweq2{? z=*F$tv|F=9wr|<416h>+B>j|{zg^T-aPz(US#J$^$s)cp&cb94nGq5a26#C?cbjD4 z&e@OB>wkYWZ68+S4Fi;h+D`-GwA3T3WvIL?%tq4{4SFu$olDPY73c!3XWu2o=P#U3 zKl|y=(&fvS(yraR)8v@WrIA&E#W*kj4|^bR^Ss2Ja|t2g#i%wI#CtcxGGA+w5ur$4 z#WASH2NWN!jpZ~Y1Se#%aD){uk8%Zrc~iMrFi`}m2Wb{xnKtB^g>vc+t}u0!|Ia!m8)1+47zY(6^@C469REUy@Ux_4jm~_!sq7%yA<`g^XHV! zN;-Jxpj}+BoBbqc#pg|HZ3Qa-96rsMzpN-#+1*fCQk@%dYIvKFy9fk1;~H~ybB6ka zUmChjNYSt<(Woi{>X@6&i{dKr!}a9+B?AmR-W${YFP$mnpXaGpbgSt^^nfE|B4^t2 zBRFkV31oLop$_knS5!>Yoh&2!Zw0S!QICr4sOk>S&!&s#&Znu#sr1yIr_$KuxKb>q z`>Oa0Bh&JK%3R=-oLmBjdB^U5wM;~r-8eWpSC-G}z2^bC1!uC1NWka;b!4GU3f^%k zpApe~7+KCUCc+j}c~y~844Qet42(I+#H-Mc4E>nO9YeB~=?n_Ai>4d%s4L0kf%Xl(s(=L%?YDG#&E!~^A^N?{0ZCPaf+ z^-GY5cL)MP-WnDfC`@Wugx0SGP_0!}E}2GJH&B9)Uu0d?)U!O8!o)lN`eDrKQWUU| zeWAYr&~9$mHloQd#(z`9Ny%!bB^3YPGYzAI+O~c z7`pMZ-qGewKe>B1J^Rcv>6_pBmUrGmR)$n*=hR~fSw^m)0~S~)_5h*e+AOmdSP+1D z`6?z^c}0;a3QZF(wq;w_P>X?UlnIR{JtBs3p*cz>V_0aebRK9^Z0138v;4+G0*X&V zW{*q_gq~=?Yp{B0Tt3+t%OAnNsn{crSj2^OjydXSk67J`TY5nkFJ4G*z4;p(C|~~a zm!+JTxg!{bJM>+YPVuvTbIlQS1<4x5Zb>K**GM##ScDeXK-}Dc;9K~=_5C5YNKTPM(pLf2iUEMx*5Cj+%G%=wr)x>1#sFmHhb9dSz z^WTHt1|+gA!WV5NLdjJG9FWYqzN<#A?^9O*oi)2)lnKg`blfFR25K@SRl0~1_D=mA zPXQTKL$_MNTIltiOeJ`(Zh9@NJG%gCloAb!6FC&dGZl>AC5^s>-%SkBH*eyv!oA=n z$6r*hgFPs=s^J`wn`Q4)Pjz>Rb6FM{!?m%i8Nd15#t*~a$e!nswACTO!JuC|H;Dz5 zz^H#gJg4n~L7A3!=uTYAO)j_}KR(3AcxpoE>?@e*VV3E0}h+fi?A%a&<% zVYj&V2_VP<6^?0*=DE@p%M7Iuvt|^S8!Ttp52S$2PyS3g*WmAZZHkr1WhAluBZJ8B z+l>gat5zeLoyZ;f(U8!~3|yAe2k(ugEpo#gkj0Jx7J7ldqA$8bz?7MD8M+Jz_*EGd zFk63%&M7nii?z{N&su79O0AYW83>EeY8Jw4}cT*_OQVt4DS7PVC1 zg@t)fmd9nl3MvxNCG19CH@xnlrZH7!LkCz z)x)BOQ06%wOLKv!&Wj-C%Gx>y8!QY9Y-x6IcNmy_>Dhu+R01dk>|G!R0#1Wv#ozpM z4Tk^#AOJ~3K~%b1rB~%iD1&r3FUoh$Sadi=ZQK(G5fImN$p8!?xIg)-62O(;$|O9YGjbeNBw(-t#}6!ln%Cei2L*EoF|(GK za_UArmlHWK))cZs{y}}p3s}gt?+S!-u%NJ8Bra#In|!cxml@P;d>fM47ZzJBf4~ac zoW}U**?f#jSE;5(8Q$FcW1ABjWIwACr+n|o+v$Mt8>9B z6-d7PQ4moVHOPoX$y7Xc=3HXi4~=cuC93!%tgghQvg=e3S8xSRtJ1aszCo;H+i#h+ zmH;=%HSg<$=m4gExF!NqZ=M02V1=I1i{hBPs=_wn`!R?m+K^u^(+ta{8$mTLUSkkf zca!3ZV(__~iZoovYmh%)6|9b@=q(H+v&aT1%B;GQEE30GrbzoLa%mxQOj(oLw(0mX zMuXLjk)nhpT(CD>BI>$;n1G1xEMJ0X744lu`9VnwRa6s)RS-paHMQ$^dbq`ph+;2H za|^7GF)uU(-$g}fL74nbS0;8`iw22>EG(gKy8tm)2|X17$naDNB5hQvT0~d`$SO@Q z{dX>Kr{JRJind^{yw$y$-nvchX=V=~L=l~e5+yfbjC}m99rTR3pdugWo3HW|kQR8V z&oz501rpz!&Uv9+8exs3eyqw<*%|GKLZV!rqs0K`DmmqxNmuS1WO->m>w6{yu(_0+ z1hKC<7fK5M`nVY+47#G%IQxaL%ul}) zl(ST#uB#|YzL&f(qyUNOutX1QGs-J)@&R0ENZE#AhbB^Nkvtc7$ud)DHP!-~&>r!d zd&S0yoXgz})9P;!rd&`&&?)o!H~I@Pnw9gX@JuHcX_(4oiYkmnU${X+aSq8C2-ivz zn&6Ym^R0$jgyNqwg&#yW(U?^w3T1E^j;PC2d3M>wN2fQhp>@bWPG)+JYE}#i9oP6y z(Roy!6ky#z4sVhX5d?WD;u7a+wk9FQy<) zLMjlyy|J1B@ocp9i19-X-bjcNvrnrUOzh20k(hUD_VTNnbkI2V`3|8C!oi%nY}nGw z7nI^_^*~N>LxY^waS#f9vadV~Ep#HxDe7YMuEtWcFrItvIWx3wP$MqcRYY>S3X1qN z@Nd9LdA^ja`5d`qKng&DH7Xt9AuLulIi-2t1is|$-%?(IFY<^l@vTIMETJZHx*D>s z9OI?Vr~jkAnZ6-cE1bw=c)5z>Lr*GxS>pxB@~f}Dnx2xoi$D}O$%zS5kSbS41e40; zIsM(RS2XMgCWka*@La!_UK&B+pAH(^-6P=$`40L4RoA$Yb4PiH+k-b^qO?#(wwyBr z&7Yz)VO!hxt|U2vA#mlSyr4}qdcYV;$om#a*<&oRm4oeXDevj&E$PJ_ zO}=Bt_ApS4LO+d$W|v}COw?OL=yuYqD)7vF9!yo<%ueb#SoPu<}QEys84bm*!uS_gGw1Gn&2Rnj zbWxtWfpZSs-O-*xyHFu^FMiz_lE2Gj$4?I>#=oeD@r)~xc+eXN;DRoWiVLlGkj8dQ|&4OC?9X^vbmnvtRwz<`9D#awsZ3vQ*X8m4M2LPhUp#4#mY@qR zW$acg@j?qVL(P1Fg)9_@1yy|VNuwSkk=sss0AD+~G^%a`79Nd74r{=y5c9YZyT8r` z{3X5JvK4xDUSJ5PN7R7g?qYnd<7vbcEnRF&viqtOdjyl2ayGK@%*+ii#-BrS3Lg=| z!&3SST7c5gs;arU@D-10!aWy*f)s`zqVShwHGvdiO#PbGR6pmA!qDxNYx=fC7un$f zs0G>SZ5Oy(WV{s*e-p}+F@Z=^QN(jea=LIt`2@JbS!1`)3lBk>60rwa=LcwPUM3Xt{w*E0lO-fdE11PeGY^c)OfT4B}FB+$4Xssi1>9Oio zic54KQ@)Gz3{b4fr_6A>uQ}aVtGs*7O+|-*CmLgwYZi+)T2}#ItcTz|E5cENl3(kc zN*<9DU;#HZ{BG10pLDtd-&P7{8kTRFFd3(yWJTTq4>@fka%sp*0%8~j!4mZ_N9M=L z`(f)*?2%Qo)j%jo76T6wP`%AAXfcK6{dSnYu5U3-Ql(I;3in~H^bsMRD?tG<;?gxn zbz6O8BGVF;XDe`s>Tf8VfPq{fIpq<5N=k=8zCbt>4ryVS{qcMQ45eu*jS$otrbqJx zl_@L}y(d$;tF|5m6BQO53SBx6#O3C7qOAw&Qbw$dLPQt;=-%)CnOMn%l>M6LP%?1x~l`irUui&ki06Y-c#bv<(?!J8H?N&K3Kg$k?&s z7wyD{Ny#XVFlaL)MUKqEnTCsZ*Y(%jrax}}w7_Q8vBd*oZ2WPmDH zkh>amy?OJdT1~CI)Ks&bJ9oG;%*k5kzIyel({10rJxxtbnRze+>#r%uY-_+O*ju-5 zIq&US0Kp=Nj$pW|aPq;z4MnMC&l>P$4nCFgNmT4qhEZ80_hn_%ZN(zFb@O(*d*`l2 z30myZ8H!kLb5c5Y?%Xl{RDS5cUHDBX-GT)4uI6U*{ocKM<_~yp*We2IEJ(RuxpGx> zyXmQZQ&W?on+9E^=-C5U%HZRJC~pwXR} zoYXYey~ z=d`HtvKy{lk~eUilx(6L=kyIa-&9?mm>N$94jiyPp+QAYTv1)7o=)e-7B`FhMOU+9lv(G@tT6Il4jK6;6^ab7EZ;ql#jchi=s=`^iyS`2ys zZYc5q)wxCzc8J zGu=&G0CXo$o;;b}edj$_W?L*0+AoP#Pe1*PE5Vy@zS%{q7hilaaiehGefM4S$CkMi z5_I_b*S~H{==kyD>8$ubI08-B@BGg1q=N?!iY(D+(<@j|_zfwhci($28e-_E3iHxS zFQp?#4qIt`^2sMI&z7&gU%z%WeeG*sbp;$7i(NRLBw9CNp|^Mc{%m?r_+2>9sy(fk z7A_2=z9w3s9NvHb{dDToDH|1YQm_~g-}&~ph2NA`246@YeDHx?X5df!7mvM|o_qE= z%Q^YZNQt0;xQ`t>mJU60$Zi%c)By?*1Lb|iJ$~Xur9`MJ6Jry~b26P&_=g{TAUV*s z0*bqD|9%hn(ujoJ8SPnd7Qs^F}?NHTgDY7OG9?}@Zt2@YhSl9 z_xkIvr;Cc?y{FXD+_-T=vi>Eff9LJD({Skn8V!=R4{7=byI@Bi|3Tzz2Cg_QH$ltI}l?GEka%1Z6*8 zO1w=Py0o9C_UNV+ysqWJtZ;ftO8iSwq_n25|MGP!4=m)G$Qj-XRM%%cUT!h9^H zj#6SZ8_V$DmH-s%^y<}Xj*D;r6P4DMfA02z&XaP5RX`OjE|pf@JHXU{1NI)s!YH5 z$A6Sif0Pa#JR}$dg(@Cy2g*d*!0T^mRVKZHpa1;l=>sV{o_8yc@o{ZFCB;Th?W`)< z1vTpQELgw>{rfA%lR|Y_$+9F*pE;e*YfFLMQs&3hC_>YBB#$WYr(_u(KXKd^;1uiEN=OLC4e@zn086z7C`TQ}49zyEzTpd;zc-@KVV z5+8Q%X4>DD(7~b)@{5)J;YT029F!6bCOq4|b$i;sZ@-k@uf+4I^ld4ktLkZe{K>~I z`)g7@>|uk_>XqlF72a@(e`>_X-Ne`dtrv#NdCA7j8#k?RF|IH?P@)G_x9QoSBT%#l zWL$i5T(T?~W#1F(EpkO;3vK9yzyA6!MUO3-nRi6;cHYL#m!t!T`?H_@%#Fr#&pw;R z)zFp;Ii!4y9Xtt_FI`TvYSd8!=niBY-9!%*tDOdytM(8?PQ&WF*lXUj1odfA!U_v6qe+|2@L@w&KDQk0~h?J*Q(Y9!q;A)A!X2Kxto>6-pgxUNj6? zkCcmnLOc{2^u2XE+zZG(4G9Jg-)`Kz5%o;Q4fDfeG0GEUsq`=%$Y`LpZ`*DhkTH}f zdI9$e^>&Zw44HBi zg-TO8J3H@Q5lS2Q+0qjnvA9u2bZu!^8RdueC~xS29}<5ey&n4?CD_mlK9Lt)Qo6Fl zMIobx=aim&$dkt6?%jK;j8D6Ppu&)ri>_;_IPm<8++tWn-~XNOdCY{1JUr9jNxh_T znDdKlAg84P1Xt*UV&!>6zHDg2_{FrWZRCm(&F7>fPyjT#m$V_?tmF&@G$mT&i^r`7 zeQ|ps)9?;HH7|NaG$7;ykLX>JmO4XY!83GZ+=Z2e@BpO-tPJ?VyXYA`sYDiB!i~+p zJj+XX(ZE3u#@EK>?zkfvrGboDa@w+3bOtZvkDeh)m!2lFjEf5z?NT`M3_Wq5(NM4{ zA!#r~2!~eXvSL@*ly;b$nZY85j?CE8*%7Kw`*D4#VGyV-R(Qi#4?4BYZk_mfyDE#_ zz_Vq59z4AWmw|p6aKbMY?vkg~RXS>A4B{R6*q~C=YQuL-HTPhM81cRo3l-<^VJWbz z0Emy$pv#27WAVUb6gJ8Tp+>pjqeq}!@gyuL8BdX-qDkRX!AOTCKqa8@!DuTIfgvh--#M7$rk*iE_BPCKRX8m;%6vck+j} z_pbfj7o;Z2RuF0pLc{&E^lqZ9Q$SukpC6D6ZA`BUa=J1qp4y?z8tY{b%rLN3M z`RvhVd%*IEU_%k!R%3Hf3XH+MVa2hzW%>k^Z8GYxLBxG5v^AQ#a_0F5cim;x`{O5$ z+qirA#g{yIIX5@!!Fya*B!RY;Q^_IYHp{BVccs+n5q%_=6^a{|4ZTh30NrYA=>l($2qTiz) z=|>-bq+ZP#E9YxBu347h)tA5gr9AtC-TGpxBZG$wp5vZmW3sP{uDIDwo>m&=iAw<& zj(zL;hvIPqyc+(ieq1f#gMG6IG%jQgrT*^wOa@r88|#qVEXDOvdLkoI$~Ih-0X#s4 z%47f(HRB-klJ9R-R&+Zqv}P{>#x zSl5T-lVm=>AH;>0KRXOY%}q9QAnCNo@63`a8KQ05Gr@QVeGQiB=%V)0Wk zuom&dAsBSSu!2zfq$xgA;vooDdV;Ou>|-V0`ZF(9G;l$3=nS40FI@6~8?F_WWHT!U zK?Fw>2nzL{Tr%K^AD3_JpyvT=`5~dncfa>N(+>J`<1@dcfg`LQ{K}N|o8SD#;~yw8 z8qH_qx5pZy(m`w7KE*=C@5wXar7?vErmrlcGLN{Fw|**o1~EnB8=96&qkmfs;cIFD z4{88;C^!1dq=F&zU@$_U11^!R+cc;rTv5&+AOA#y$h*^*)#xJo;7vUDU_@W0CZgDJ z>oD+2LxB=Hc<_Mbo(7f%hWIlYFxTLd8p%7#WCo1h8MvlbilH(={nW((=(OY>oUzpT{#E(lF(8XE zLk|-p1iItS#Xw}H9Ii54wdj$(nre+)Zr4~K^$gcB1O8a?W8*q{P`xASfE0t>% z=s(>|{9+9Lpe$%jFKWIp10pmQFalztsHik2WXYqD$OnefSRlYC4y+;?fN52-c{LJL z7)IM+EEXe;Mj7P$25tCv`2uD7Ur>q<1zWvU-y5Er;?(y_a3CeVaOG3U-PReHP2p&|GpU0o+Afh^r?lrU50{^NiATMHpAD#`<*GdTJC zzyJHP3U8!e{QMX0dg2SGB79GSYIJ#i^7lV+dV~^vMt%nl987=shks}S{_WrXohujl zqKI)nU`cf=jSyrOl>GGXe`+B?*)fm)yWjn8rGO9!lp5c#TKSHpivQBMP`;j;t*)2+ zucD7uYoS+5x0+yZ-~%*7u^^<(uReX|RQl_`{%g_Vf);EPg(>Ss%I1&$=#Sjf;XBjn zPy*of4RzVE?tl8zpW3|wPs)XWGG&pOEclYK=&{K0qdzSr@jY4gC~s&Je4(KkNw=i1 zXe9B~Q!x&!obQOnSX?v!C^X8$B6{V^uV|o~@ryi8(52X^J`j9>nlbU(-D9iK?qR;o zYmDgUzxaix>J~YkmA`jNv|^ef%7Px_KWcg%4FFR(zy9^tOe?JQH{N)|Q%9*A-bzC} zWPtRK|M-thTljNTJxf$?%#DA|{(EMAlnb7t=sx)1eNStok)+{#_0?DGLSyGi+zW5K z@hiI};Um2R&uo&Lv90lJ6W;+;e;D$uJ1sIzz5b=>jC+a;oEbm+!4H4vUea5?eJj2B z+c!PCiapzzM~+d(8j9B?fApGYOzj2~opJkp?Q37tjJj*)gU9xyGw4bF;0HfQFUYd@ z3U{k*tnX#JV*loE{(~3h;Znnh!C2g_UJ{C(MuLHGdJ<&@*bfCCvuNU?*UM8);X&e@ z6FiYW4aE*&Vo<~9Ldq9>Q*%$P0F0-6ieeOmDgzXZfZx)zEV?|~m~}vxM;1EFakt*x zACX)?44^Pt&fpw_DliMeLv*Z2R+7%x&BDM{cjc!AX66P=MfsPRATS2s9Lfl0Fhw(F z9ncX8F@I7Ndq)?kyHAp)BCTlp1KxuZ7p;3iqM>zRDz4z|MK_84I2TN(`t{QE(M8 z@0y-hnZ+}x=LtMbGDF(WQn4d|tV9O}WU{y#k)It{%pwO$7$cB@Q1;|OmXS#;cj^TV zWtlC5Zr~X{6c;RUkb5Ra&@dv`^kkZf9hx&GmxHyLZ3OL+Z)Tm`z_b7WAOJ~3K~#ao zB0yHRYyE~`BpjVZohd!)ewps3bH&sr{Gn3pW#qje2BIhn1f2_23)86JD1i|XYFtW! zy&-X#QCU#j?8iV}W5XPQ9K<6Zj&{12nZ;7}rVtkOKvkgJ3Wh8o5l%cf_f{#XJN5JOuFkRg$`#`N|_igl%>Ae@W>Ye>;X)aZyntARD5XAjD1bW zi!|^DyiG@ikw4GmWj`ZfnU3bM8($4f>wDn?afnF;9aH$M@^?d^cl$np9WB*&0WAa{ z0QF~}*n{Q_kj4z7aVZq`A_4lj+*koEvyW!wGNB=$;aZX=D&e5%4XqRao!}Qd!YzQT zdk|IWQ8YBE>@`U}hzowp9iv7Z+7-GncZ^k=H0~HnH10GU%+RR#W0>1}IK49cnJac7 zi}D_mPC$0pcL@0@V;O81I3Xp3Gp)28Sd;!%$=UdmuTJfNXKf8au- zQShQlU+9heBtUpZzTH?0rcv!}Wf`CzC?Dv>9!+fh;8`(B5WMM^>p|k23w|Phx(~C? zAQs`Hh2ts+Lnt##L>!uQnoNu=OIGXtbpvC` zi`gw!wkS!E7JWhu13NU12Ea;L^oHhCe!d}`tSz95u;&Z(rK?ZA!JC+&6!~a#D>cmb zWxZgr1m*#Qi&Yx=5Tup%RlR9((gSNUyx@*`#USDfBh zkLul}2|vJrZk7p!89()Yu*hKv?k4-N^^chog_c$TA{5HR8{SC)6k3G*lU_6)Ins7 zh7TSfqkJnCHpZa8S27$1Nc7eN6Q23bWdlh1!lc&adZYiyXHypWZWz=^Q)i-wOrsmS zPm&heI=$jW{fjitxD?=*xYpDOjkr(BW6LIBPYP(8aD4tKupZUYrjkB?m~KM+q*7ol z8T_Xqe_gX;o>W$C!u5Hfz(0*j^LgRMKTS9{We~o%JMjK#O2j7Cn-tijz$OL05ER%{ z>|Y2rZX&TsflUf*QlO^5refcehD{1=Qecw;UoZ-6D)uiJLpRacq`)QxHYu>F*f(Wh zlLDI**rdQ0i~@bLVg}9c2Jh7Xhd_A0=5s!1I`Vzcv=5r@3&z7ubk?B2rkt!npv}); zI0}6B7W?Mxq%WLMJxK_yrqrJ#I5%P0q`;%3z-O=6A0;-Md2Lc)lLDI**rb40rmyc> zYeCoga@mZvNr6X0fzs34l*>m$&&^zF3N*b4pHul-L$QP5I(;P&V4YEef+Q$ZTZ?)n zoA8S38u(dl>}P{Q`Pm@z zK&7_H{UG`7EublT8Db;i!dD~1gP~ZL)1AHm zQns`0%{^dlsg_m5K3IGC)T!S7o*AeJxMBBI` z>%&5ISdodpB>q)04lf%5-_P2$d0k1g9@t|a9K8R(%A!0~xHJ|!(bjknM{jO`nlb{M z-1-*3fsbX*c@}u$Jzjx;tNfC2#C4NLaJh5L$gIw-3g%(GOz29~|I&b_|KkQj27wg( zYL-;!Qwm_4@%%j-0Y~7iyENn!rOMf!Lyc!SvjVMS(FM$RWyUu8lI>2d9Qa~-xG|MA}!u?ZHm-qwV>XYO_ z`Q~f~Wz!Sh4*Q_QgUcM0;?oTGfevhv&9y3GtA2cBAP=g%-30)P_UYGt=?lv`jY=r! z_~M3w)E?`S>*X;W0Hc^Qx>2B@sdm7McS+y78|Q{Bb%|A$yHzkWhZW5f(o0d+lueiw zyTV6Rb~9_rHzvT+$X~}uB%QnD!#kE1m(zsaNgoYzZ|l%VSUnOs@A2>b%X6CO$oSBA z!(8e<<+s-LE@*+Yt*}oeEK25Y6Q)wMvB@v}Fa~asHX6Bz&)@E5t(i}aR)3BpY{F5V z>#%O)pfv{bii&tqC~<-@-S6uGshMwEo{>j8tnK-4gc(gdTzxZh+H-#Vp}nwkz(ZBRRXisN zeLk*IB{?Fa@HH!R3I4o-ZVQnUI^6h^^Jml9OBZxHk`B+XD8YxQDBxOpuLbX>$o76~ zrHvBw%1@zlMeknmZm5*fKOI6glvhXa@6y5S&pq>OdV0^kbYNmSO)LF~zH#Qzu$6F} z^wgJa0T5-agC#g5q+H8OL9?vSb8zmlnn1>`;>l|w+3+T>FdW964}Wt@rHz-3qR|b!uc3rG<6N=~$dx2C+l~-Em44z>8`P zz-l*#!n0nCz7|Q_DFtR-xHY16<6J)U=TkNO6$Z^X&0Io}a~hcM(#Z7?S4ZRNbVo5B zL^&U@3A}xj8DxraQN7&BR4GDLDK-h4ql$2m508WdVGI1ZidE<|A1vfq7+aOU0|TJ? zDRQXbZOM6HzQ&gv`w3qo&bLxpcPWMzLCIy71}$Ul3OKltBT?jw#b!DMYAqN%d=OQ9 z(D(pU;Alf1TPPT!k{4iBqwK@ORdQG#?sj&VYW!U=?eVcl!OP8XQHL7;-@o`}`n&hv zPj{B*)6&Ffnv-VmVU1Zy;f?1)Hf_WRJ@b$64KXkc)(4czmajislqC;yHs{yP)|%Hm z(I}L-SmYzRl~wBKSiK`#cBcQ~pa0kC*zO%^tHMUJXJuJ9aXN0u4X}$2x~bRY3}8?S z%&31n2NW(7oEr+V#yeokQM=%WUj7QaIc>Y*i;`ED`-roizbivJj!*>Qs6CWB#}*bH z6-H<`bql5(O*l8pq2c+;z?VkYp|H4)(TE#z*8JpBz}qq*2#_B=MMKh-NeRm|?TJ!o zSqC@cMHz*E=C6yFn@+^w2*7g0XfR1fjt)}ltAW<_&Di))4ld6wx)HVc+{}S+M7N}G zlD3hitBjJqe9wqB;?xQ@Dt--1oqw&^GOSHBnjlut!MrAXL@IcaShpoT68n+QU8Lwu zUkXCiM#6$s1p?VBSzmY+;ZZ-J5aIyq!4}b@F7rY13yK7Z;SF-cVbe(ma4)B~KKwAf z{`NcR7FOPt=`<@p{PIv(dUREx=}I0~z={plX8w?Mli<*Q9SnfyOWY{-oF?2pIlr8J zjcrzt3MhxH6NREWoHr{xR;1LYIuq%{mCNa`e)^NN`#=9L)A(ekWp!Z&P(PdxN>8So z+iC;Lg%%`wka3|3Gkkmt>)x>()_CXj0j`32PsvqIeWV#shTSP@o^@oc#w+5S)wZav zt>P;mT-VF;tyx#e6S=E%>dvwktAc%RxU*=znh-gHvIs*% z^>jrIow}yviUnV;4u=?XLi%d0ZEI;c(1lV^7o5EGfiobRLYQWnW@f>RB5V!v<^04b zgf_RF@tyQJod64^$a@!%PG7UA|63ctCFl57U~a;w=SHOR*o@f^NBJ7iR1HFb*cC3| zGoPwT+6LjH2@CfIhc)ASe>8bM`dotUrk)-{v70>U=AFCggOexIjFiC8vD4wCNv~w4GyQI9p(Qn`7JjlL}2sI9TDrEv5imNj;s>8O& zd}#Zq4vc^ElMmB3KY1xV_2rk+B)D|tN9xFrL$XosMP6Jz`04`mQU&my(^Yi{`7Y3e@XYfWz zbBAIy1ieIbybvgWEHupk`@K8|tx@a_5pi)9m5bV3V%DL=>v~)DrAd!I;|@Nk0Nkkd zwkW5LXhHtNZpj1;iV?Brm%(#C%gm?6=XYXaB6XN9Hase8L>@j_K4YV@8g$w^Igv3J zttoJi>bIjjMig&YH$aUH>!fh~k_P8L)6|H|ce++itFru!R#pH9f#oli^@0M&f?Qcy zNR#7&NfmWk!d^~CXJ*HW(v6Oeq{*pK#b*kfgj>{(6YBM==51KrIWFcK46St1m~iR{ zZz{r~Zg)-Pr(Iqdl|?X`W~C&~ojadqW@kN<0BdYc1Y8hRmsB1wG1$m2V#AcS5jc{$ zY6gp_G2kIuKrd(|JeQyoX;C)D+lAW?x+ECp81oW+-2W6gB*rQidqvN%jxxX-TzNMH z+);e|s(cza-KGa$EfnpyX|8KgymwrzT7rDXH%EAk7XmxzZY|ch1kQ^B@%-(Z>HX`M z()<`Av>@NRTrp66M0}9BzA_}mH+MIU-@BEz&fZDe?%ztIi+3agGpQqux@Ba{u8xj~ zI=Zaslu{1Ei&#X%wg88g#j|B8-BHcLQMr;7NfY%)amCAV6*Y-cwy24BvZj_q$3;bU zUCTE-r8{kxi^}OJ{g~u+OdnKRNGY-lA!K80G~HF456_$uHkEkkE7}B3*Vl^RMyVHB z07&2@CcUwa8#&=7xW>oE48yo^9vfF90*meDK#t}F@4V=sAWtJ5)qBVy8e>KJ10CWz zuHTM`%QG^BEaMUiMJgQiZAnv44TN%H8mhY~#!vJC1!TDvHs=G}+@Kh4UB-W?>-wfF zl(S)qs*~|n0#ijou_&5R|0-7%`AY{34@>{(J0*_keN?Rtv>4Y!f-Msr(MGt4Cf0jU zS@@3(jim|cgfWfjkUugv3S7zq7&A5o7+9?rz^yd0nHuJW5Qev-Ok5xbAppPO32r7( z9#x|r^^rP0k``rX$w3!%AVR*(Yw62kq;!H%QCZ2DmM;{H2%+Ff4cy$gaU)$iekDD% zZ(o|+vOUcS;7JMERdo&T-k(p~ckWC(rY5b}?k@;k72qja`dt>maqz?JISmAjkB_Pm zn3tT>7|f@i{p@E_npe~JzyG~-^ypC`D`IEs2xOPkn?Rt4C2(n8vy_!)X-UF1F_JD{ zxGc-;e%gKLX({@Nw5)GKV$iv>7t^fz!}}FJHr|l{X)4_OoR}e!==+jjayM0s8kVpv zEX+~wL_{%5#G;WJ76C_S#OCg&AOG)vo__onf06$6pZrPsSO4Y>7|2^jprjy&nR3Ukm^?%yrhklUOp0*}bF*q(gx9Npur*^E@rlPb`x=fr4{3;6?{X8Xf&1u z3yp5uMS2xw!LsahDRbaxOZDl6S%GK#0+gyc83=UgUCGf^$;m7gTZ(BJ1tG;cB4cFn z{+xZ1N1i^Ij_unc|MfzexqU1Br%Pwkbt&yJWw10er%Dd3;G!BhDe2DmRGM9x#R(uK zKb*$IyP3uNQF+zc56gN)jyf1BY6NCg4)g0flHUd8OJ(jzabZMo0XyF@4kXxVLb8g# zd~s3r!wNyh2?9x68g5ngMcsGjfg!FTn}{^$T!juL|4^z;hVg~Uzo7cCb<5Ut{KSd$ z^VffwPJD7Y?VR43zV-XRn+|{Jn5U19&`8;Tk5VTuDJb3ylIW_siH{qD#fnR?BEy6M zi%rEWpA2{|s=*u|Q$4k@D21j*5!oG)0>!{_T-T8>C@X_0yUPqaw1SZ35?pThxKM5g zNA*p#(I@JlU5YuKd-$kj+!*33_*_1JCjI1RKbHY1qgA{Z7XBEpFTMJ;^zutb6kphn zOjzkI&D>5aG9E`%$2-^x!W~0xQTagwcnp4_|ENC52F7jF|9R;tbPWb4Gzm9g=n5K) zdGXgY6uft3R6-~8#gM)YN#=&ok+f*O3ci^JIka_4fzqvk;3$K?{L8;gKmI@euk?FA z`ce9q|NWn&?Yo~6?hEPP{ktEh|K~scZTh$W_D|C{UVX(3gHc(a-|__{Tp^fB9GcZ~CwP#lJ}Z>c9Q(()8$fx_^H*{rR8&d3x{osq{boPycf| z_QEr6skd&ObR(fIir`RVBPG0o;>O}woDuQHr7)#%g#*14{n)pOKu*a&d*|-Gv~Bw~ z5q(bSVpM)YxG7h~Q;%Xk6g-M{v?IKwKxqJI(9|bTODhHlj(I75@?TJ;pPrshlgb~3 zvot3d#^`;75BSaBzM1~)&;Bg^>woia(jWZ64<#_6UmId<7D7)3PpGUsuePuV#ZRNf zY=Vw>Ta-qYg(vz4U1-s5*4qqmCE9xE7H>tTKIcH}g%x^aH0qL}XAT}p|Hb!yH%&=b zo%r~}^uDG-UYAlGmhvAGA7|A=^GYU}tIJBfuskPOnbUl7DIpmtQ{op&*$uYnKa4_< zd@M>KE=snLwJnp=XVNvDf13XGr+=TO#;4Q0Tldrczxem*fBE13 z*YvyJ{gz}>mc3*dWv2d%4WR|qm;ax=_kfe^sP2W&beQhRd2`O%)k?dPRym+V#(=TG zmxJ$0I(R~RdJ-!o`Xr4$`EHRRQReXFC3oEQ(1JLAo>ainzMPFstfd>%s&dV z-A6z6F^O|Jj&_WoeKHXGfA)@d$(q&gROL!p)at2qLmq?y zbCnLpMnSF$Q&x$}C59%68{3yMF&a@BNLk3fTa7-c0~^Yw^`REBE*yq3%Rv);mZmw< zldbNIb)IA>5$qHSI+~+WP6epxa%wg-I3)Y`@0Xr4XJq;6b@IyByjr#I-rgSR?Cg@B z-af4$g~p9UYUIR;6FPmZZ)%Z9U4v?g$wU%Ba%9fQ@#Dwwosn8-`4n>X_4Udm42yzj zK`ay<1ED#!Bg3`Mp94(`3>42p3yQ2-onpz9}o0Eti+ydOK{YIXQIb zkUX_}uZ+dUr52tLu~<&Jdj=#nIwTFzfHX8VW2P}Cv1C@7TUw(rs%@f&>#b6`sHYEuMSr8JKChbALW6|7tQa0_7>HS!ojuV zv7G{ex)P6%)!6-nI`N|b3ZgB@7-~W~>n>6X+Oz%U7EZP( zi-DEjG0enHpE@o3ckPj@Hg15h#`GK7WFQfjIA&1fyTwp8;_*=#O$@8Xoq}ggGqk4$ zXyBAi{b%~5x+X7m;NQlYCdtL%P8mzc7%EF(W>^D_KRq-g&Cwe0NRuQW^y5$v>QGM% zMa0n*A@F#lrdG0JF=KnGkiISf!atgQu(5MJFq-I}f$ z{`us|{{DXSi$>5fD!u)EIsnX{KVN!!dek$k34I3IN)bhBIFyuU`IHm^^1wGxn$So8 z^!0C&-+RT&pcP}5p9@G+`o*(__M{?=fi*&X?Euf|jV=1(a3`YA0AJ{5i`1h~K(>u1yvU%;Y@sdq) z;P6qHmKMrC{Lg=sKtoi1```oexqtn#904&S7|gD_?nZg%+utRZZdfZnMA`rQi(iue z_n-d>+Vf3Fb6mdit?$UzyMHC=kpWq~Vx7G9wXc^~{N5|Tz^(FyfBAy^6tkSmuf9@F z9PgBad-sE8YveE9^B%eRhU?Y7xpnJS`TXZUFGu$7lMXP{m6vUjL!GCMKlWjz zJ+*2w0d0L`c*D*hfcfwAY!g}yVUvW=GQu8FoDw=3dJuGoLb#A-Iz>d8T39(xoMmS@ zm)Vss4G-&&30>X6je@@**wGg_P*S6=L+9x_by5yudVT4d)slxYlczRKGXPCxpwZ1& zUo9(Pu6g9)`{m(nJ75y5mRm2qTyD7ha(UwMC*?ly@s*o5%XQaY2jw7&!2whHuA_3t zBU|MVgnk`_-VKPm;fkxI31*ftC=vrug66ig%kEQ1ckgfHx=mNe4O^~~Jv(>FycNsj zz;K^@>*qh!brhKKC5|?Wz^@ z1M-Pae?p#o>Ph+3r#>aCR<4vUf9Xqd#~nYB!Qmm9GiQ#x{N*o~KYYXMRZ#aqf%)ub zKP&g&cfZ7-=v=mGvknGS%-;TvcgW4R-Xb6V(1)QU_M(s7Di1#RpuGL-*UFn9N(e zLfYoeLtG59P8Vk6ga_;Sy!;iffWW?9nd!j(12Q-?2yH1UyRd=f@Ba4h6sI@8`7LtWZMUH_ zKP+GR(ii2_sZ(l7;yMEbBL|^>`PY9%T|bj8TdtJ1yyeYGgHL|q6LRM-@69C?1)xMfG61rxB!|3eun9prm77!m03ZNKL_t)n<^*U*w1b|+ zY_t~i-LP<}%z=Hq9kZyl3l~ciTK2*HPs>JVwXeM4MyZF%VHfPPM|SU$1@JL{;1cJRnPX=$N$k10EC>VTmhow5$X=dum!C6AfHNbeb`qKhNo zO#z-f;G=z&(u*C~2zK*5d21Ph*t31eALci0;VD_LV1ZnH%{9s!p8)@U{_~&HndD73 z-Dqt5;1MqHQS)BAZk_DjwNsvimd|JZ{)6(n-#w~AX&vIe_{A^EfBxrJW#h(+McuaYPf>11H58wa(_vO9seUH5NeeYF4e9v8X8JeSwC{H@t+ZEpv zC%WW`ZI7$GIfI$^J@@=pT3g!W8ua&v9(qtdgTbx=O6U9D`#!k|Ji>vBG@^{T8)bg( zbDvXL@@B}%^&2+GUZ67&G!V;AMF0TV3m>zChdeMr`?TB`QqFh-C%*q|SK>@oeki4N7g}s+9)i#kb!sdv@)XJMX*`3$V+<2(V#- zacRqX@cswX^z+}|^=|p#``#ms=u&kyPkdU<5*#>w^PAsj1AXwrACuSr(Ho$R z^vU(t-w4eDwoz!il%|})kiiZf1Vcaah}`_57s=m#@ULaXd^F}&k3rk`xUNO~{_B1p z9yv8iyEpyuAIn?+?7z#I?p`^AS;gbPkIb`Y&(pGR-vN2oyWS;#|JQ#ljbQS7fBh@@ zU!VG%S>$nAhpgvTG>j}JYZsYPM{D5A`Z$nMFmVd^^I!Z-Zn)tF%!;m369CsEXd?UI z-~0{WgQx-ho=?KvVqD&>RdG>5;luuKIlIy~1ta+x)8IG+YX)sQ1{-J`AN9JTDUvp1 zXvC!HVbF2#qKjl%+dNs^+$L$XQwId!VJHb_FjKqo`YloiyXsz;{(6relks}Qx7Enf zj`^~>xm7l=xk%bD#lG{mcga1EJuKO#8oBzC%jDJ9-VAM=gEt%lV0sAxfdidKV_n zo6s+oE?Xvzn4upya6q1bvU0_hS3W!{g+7GoY38zyx%C16<7F8YI{!+5kUsxb>EsVJ#S!@Biqh@||!0U)j9* zVuWK|5d$szAQj1F%a_Shn5}S7-2c=b>BP+ZO@I0pX>DtP9Qp<5nv&aYzfCUPbg7zQ z4j(=&k3RY+zK_U*kYya~H~_x#Rj@sEtQ zbOcOw@4dg3w_$1wqRL}2vil@FwxBRzX$^VN4zQbY(f-i! zlX3<&)--q}3mZIVfn30)o1yNKMSTtjDCpW648RW?Uc|k$X~`RmqsJL-xT*j^NDO1K zHUV5Ox@bKVsgKL{$G6MZzWptE0E*8>mbd(?|4$R zc+OhcC#Yev|5H$N;gbTn1>SOPZLOGv4ypNN@#4j@cFkHHv|6zKv<7C0d+)th@lkCQ zJlO^TdKDD7D9WJlBi0sv_5uF0c#p zo|dO}?$8mR>(s3faxAwK9bo{B9fKXS6E@5dOg-pLvS86d)$TjHI`u=(jMJEgaRHPA z0|h6iX|!+eg7(e9fJ8b5ZJX1zCTRS15WZwg3L4q~i4X-PVc38v;O#GdiR^(%<^Z&6 zA|6G3EwEp+SMS@mU(H4IQ}4nQn^Pj);*WCLQEv=`MmH9N(-=%*Sgas}(%ixYP4zzq ze4H+}G-E*+Gl}kFT@o7}Mf$89?>sKOu&K6!i8)>4;6w)C2+u(wh0&Y8t%;?rwH0<# zbY|Gz$1wGxFgbx~*znM>+Rk_)VHMp%v6!p^*zW<+>2I8&M+V&uKot(AH2?K-DpD0t4?NRkfFBAvxTscf76Y6)i=!7z0)zbC<41Kd^U~F8|~V@7ran%n+kN98yc2}ihCiueU9SE&H6hWp&S)_HJo#f%PuJwvx!EJ&t7 zW^jyTFz6<*_!h&6L~U9fasZbxra745%XVUmtCdmiHqkUrfNH$>O@Yea>@O4|_doD} zeDaf@RCDDe8#l`4%QnMIR4XT;Ri-ih*I5Gc#qqlpip#avT`NNagSyVvb)pNV*=wO7 zHS0ntJ>A&PZ@ukSdDENTB(H>`b=`GXU%37TJ;aQ{>l6mKL+G1yiDbVzdi0n=sJOB} zvn|N`2xA*?R-tF1XsehHVJhtFKw1iRnyTnJs2P2piS#o0$p1>s&%W4E-SmaZQZ%5N6R72d0_xmuojdY60;ws5*4(uLPpy}?vZF6 zwCMI0dGvvY)WmTmred2nZ_UGy&CmmRj(bgl=va_N=)F&GPhaNV!-UeGW%KQav-C=0wX)L~8 zbM-YkZTk67eu~bUfr+SE?OA6q!)QVI8~|>)%bI022GRF0YU%7Baf^apbSFBhm5$uiF^Y{+w86TAx2FC-3j>7&9 zv%~y(Qis`QO;fEbUcDTONS}<4#ANru!_p3${1%uK>#_TlymrxwRT6@YU0H;K3I5S2 zlcG6@_H;!6k*c9{Ky~mT9u_g;HOC#JN9yHe{o_I{wLfgC?Gi#bVsZqWZCfKik{p*N(0z947 z^`(6{qvsF*@DG*$XcqjBfB$#%{ZGNndA*uP@45RP?b~b*^0Drgb!np0L~-iLNn01w zkT#^r&tOXZDP+g(SiBuUe|~cNcDWwwC9UY6>^l+AgbG>&v$nOcOss+8^c$F^!*z|o z|0Rw`UszuBqMIROo{&c&BZ3$}xlXt3iS0@Q&PZ;D>6q(|Uxm`u38ioh-c%f9=^>*E z2ObVC+W2e(eCvsp{HL=@XARB=V_(6}UO{^#7b!Wlr^^xvKMxy~Uj6FdlY>W(;5?3_ zDwL_o{{7$my?o(6{zHEAYuL>&f^zl$t#5rB7D8{<{2%<_-|C{tW3aW;9)AfKg~EJr zU`RU?r)uwi|NG^?{_Cr9_uY3ZUUMMmxWI55v`sQmfEy-gLP4Fh{d2n4*w~-~YY}Dz zuX)XDL9CN94sD5CxpK`a`M~=>Aphq(-}SxJ8sV3^MiwuH7J*p+nf3;Zrtklo z56BOGey4l`E7|oJB-Vp*U;EnEsELKbnk)Dm)Ht~OE*V{b+8w4c5g&sUaKwuWMki58e!TFVf}I-j7}R5G&N@GGIv4Z>C@xvq z*L6%TTE0x;FgG0Nge@Jjqw3l^+4j_KX$oU4Y28}67#r-kd8~V|Po6;d5X^N?9Xcoh z46N5&dYN2$@g}%hCe@@EMP8a{IOx+QZWx|hG1df ziV796_rC9a^1~ngNcp}Ru6s8^kkPD3U-}RfhO83NY*}B5KC@}lC9(?({hOhjtcGx- z`!emxZ~WsoDo@=FVf`@HplI5p0|eLQ*cblfPu?PBF6_hk;;#B0=Pj9^8CK<$x_}W+hQ-$%BS6&70z}rt-uIG>Hsh92$#bA5Q5AK)}s* zV8aA7TlB%bsU2rRH^H~HDhDKCYU#tm!ALR>*QN#1fWo3^pzfi5_-CF`BpcvK(ALn5 z5v>N(PMTW+&};`)TUL7-2*z%hg7(uyUsf;^>mC~$Q9o9i3^=W6Y;A*g0DL&XL?Lvv zswk%=X&LJsSO3xGg>$3l!$UFHDEqfB28QTfTnH7U}SA-qz`8U%9q-R?6DltxkVc$7DTAPW;)WG3of7=1)SO{ z@k32Q_-(a=ay~J-BH~dd*9wBrBvqAl)L-K|rVyNyhr-Uf_TfZ;!ox5V4!RRReDt^n zq}U2O_!oZh6B$8AOK~RSJW4-2{7W-T6a#x3_*1|qgAlSQ#HX|Hj0r?>xKbWoD_OY} zv$mH(+d6=S!|!jsPkO*B!3buA;Lmz=yn65mFVEoG&sZX+i|!eeodo@AU}tZ@W~ElF zPo*$>?MeIM0G(~tHZg>OActe1nZ`CvB7!(2nW_~Bw^04BrhR;`h@ zVQ@jfGlORa`iHRK`FXi_>m%~P|M6kD{UtY}A9AJ$r2_qpURd1oLfbe^ zJyz)=?~yl?9K;|?hT;EC(+{o3wO8Y zF_7_qwr_p&>++@l{HFZ*U%g*m_xrCwm|3)>g*=IYUqLQe}7xKmc z6KSE|K){_!SRDMpL9hjKkye92%ogWDE<_>Q2(v+tcoeZzN+6O7B$ZS&1?r8*|_Ho1*;aHB3b_EUO*779i(T$C1 zJiXlvUFe-CfczN+U)G{MmcnE=2BCWZM-C`2qXUhO$Kfhlk3pkKdLf{5P&By4!PEBi z$OrHN-6^@*DUKD;uCC+i{zk!`O`65{9O6fjFONl99`l>y46j7T0<5m~t~m2>&?{nv zfI>Da4T@Bv*@04m0+oVy6hdqse6{m)DfEpXWEu)$&Qzh1DbGhh6WYjk@7|@0sGDIj z)fp*h!Pz0TZVGeytVbcRncws^<66rdlN>atiNZ3Y3;h(j>??fO=h+{~tJ>dzLuG?Q zksvP8I8>O~mwG{QW(|BeOQvImnnNM0*q^wAmKz2+a7BP8RpygeC;S~2N9i(3da$qY zxRcsi$PBha^;l-$w_ygRBm%UBv2sm;Qq=~J54A(x*Z@M%MT@KBT&Rkm z!6{7H@Z3B^_b3V~fVx9b$ zGLVSiqC752fKu2Th0!0378_4#xlF5^gNHt%Fm$K~3LlQngo{L{z_lGqYsH^}P{gRn zGd)-y;o?p{4l1-65?|}OrG?_529U%t3v5KV-W`q%-l#uc(mLLM5uF+EhB+4w`#Wzp)`$yueyXnDKHIc zItk;lXbalb>CetfIBa^B%>~kB@Q_%(Y&py^N9CcTdt{W77aC$Cgd!Ar8N{B21jc-CP_)3EpRVd+`drt0z zOYQ-rnjsXv(1DC#!cI6nnGB^+ywmPY!4-##P#%C0Ap%cf z&g;DxPGQROn1=u}o{h^X4#PNLm^foYugCO{J1HrQ$N(z1Kxm%75{5QJErQw;N75v| zm5))5rUQn0@I1bGFh95Cf_-#)N%6-)h0IEZ(hkpaJ5pSQN8Nyl0$oRJg$c;Blaip8 zs!ASH1``+?p;`Fh0w$-hI;!F!u6!6qCg)-)<7nQX5Xz%tvo3D(Vi*^VvoQ8@L732* z+{HGc@OHJV{x+xUQ45F6Aw!~04rJ6E*>Mw?0uwGyZKu|0NK6GA->jQ2Hoyr#PhXW} zU7=Yh*wG33Zp;^W$8VmGZp=#*mgHB`-q6;BbMnk^qgfGG%GV$kIY)3l%;Sgl%kCrl zWr$^gC-N99bLnyL4YrQMH4!?x4$ADnTpOw48W3kk7`W*r!8VPdvvSa=L3_|wo-+k% zZWP`$3Gp!$Hs%t=!XoB;QyIWe0od`OymqVC)0B8ojaUV$*{w_# z)w6?;-6%BV{eUV7QJAS{LZNru(&fwK&;R1x*uZxS`XrSTZgw;KMaWw$mk-SMm{z|&E$1Dfu`5~i1hZK6Tm>0=48;MT88a^?lMel z>0iQRl`$hsK@-RVLP?F8GRT@^_}vQ4{!jn=+vKKOUxI;)TDS3jqgjO-dlIrvc>)!y zi~)0TP*8h0ep6#7ebl@|S%dodO=lCBcEF^x^<(8)<@zs#bDQUfU|M2z5Pyvcz$&{6ev;6>Z2c`qxd!mH^7fE@*y z8cZT(P*-|4UKNTd1Zhj5Fm^f)2>f=Fp?LhMUnyr92fz)-IP@WT3|NJNmDlhFF@eDi zhBb5y4$N_MvWGj5%D?{l=hBDSV-lS*%K?<#6g*N*jghXTNY8`dOg-ckQ?%NnomSxh zpnk(3fU)PZQu3GKcS9@YGYU(Q-fqfk7U$vGMgfHqjn@cblh*Vj1CtquPy>#+tx2Ti zIvlg{R_wEw1GOxI5sYRe{5da zH#6)I&qkrCk7cWXwSAB29A&16UIA~GVQ9)o($AG>!cP-#_!S9@#M1$RLX@5%RDR6a zQcQ394Tj@FY0OVyt-=)1?mkyuC2=my_z9fK5L;r;TT zeViKt#lsa)N_mJDbaYOT$R9jrmz}bewp?uS9)hbGHEAQLpoP&qMGX|YKGjqOpxq$q-GNPFbzM!3|V( zh~TM`3t+p&bpt$FULRs$9{bG-?8k}n`yvVjpllh%47Ma{;q*agbq0+hBBY@St6ULN z7E3ODo0x+FY+@)wIGfhoAf!3kn6v51iFH6k+wr6LRZgZAS%K-ixGJZNDYiS?B&nAq z@PU%)NLaR=;_o7#txlyI(oIhxn%E9nBkL)NGJ@W~Q>1GJ!ETZi6WVtNOcZK~?k?Yl zW`=3q#ZK#YdCA51QsGzzr}JuHBsH9Nbpc&oGP4v(;|HY8S)l~egDYot#kmtkFCQc=1(#mA{uo`@B-T>G|Ritkjy-)K~#!pCU?XchK`o zUNO#U)iiDB$7`fSZpK-`PJw(D=oeuD37zp&X>K0U)oXY$)f(Y$NLDD!j|kdSehC=w zv@zQs9YIOqWPxc7wl)0Yw2j|7UC{=^AFpAv09oZ9R(?$eR^{C1BXnkv8m2M=Wx7zi z%~8d?XeiQrN{u>sjpe2n#nSe?xqqhs03ZNKL_t(-9r|50yV_bA7HnWw=x0Wq$>DoO zQjks2)l6rDHm5Tlx*>*TGj@D-VwdQyQz!I17M!LIk1Bd_&^~My_<18(VaDT_$1J|q zr?@Z(TiO9|&EqDhCUQEOBF5fS`tH`W%x_0DAQ|6zf+Mv$tFTZPgJ}0L&!AB5H64{lhE!6f-5hxBdOZNu4OeElh5WftXeFmuvnrf;9m*GTBrif zd>n3U6=t`Xv3ap>U3@GQYZ^>5;xR-s2d`p`&a-v`_0$>^37NQ!Mr3GN%CMVU*i2IcApA?*DF9AU0 ztwvaa)=pOitul(mzLnUEa4XI-ksUaw>-Y(^3-e-=H2uY~HpGQZu9F!5X7YnsP&I%W zQBVN7tS^{8!dTmmq%HZ(>T`VKAmhYqv|(5i!oMhmP3}}ug}nC68ZI;fU_Cz`hhyuZ zde>dDUar}&PU-_SB^eQC{oZ$2NS}-j`$*n z8Cixfbre7(kD6B3Q@q&r)SHU!3bg`<7&e}M<5L8Hzwn`*5uZZitA_7{mkD+YsS1$- zhNj%YE9$a@VVGNp+Fb0cg^ejlPZ?wdd$Cv|TzE6G$Z(ti+o6n`phmE3tE zvGK*SEB|unQ#sO+jm45ng|1V-)9S`NKtapdfOcEOVX~))g-PkAJBv0e>cu#kDC|?R z5|4uDLG-*3>Oer5UB#Q}snlLVkY+r~Q^;$e;kJv- zY-T`nXrg5~59l7Sy-b+8I4D*{)JOhFfMt{c%Sn*K@ zeAl~Ms2SqA5M+Q0L-qScW@<7H6^;8E(lFd6weT0JVMCVHIRTqO0#`~`nOdW}5LbDg zKP#n2nMwiD!6C#%!OqHzR}A)h8eG}QwR53RC!c4%PL4`AGY`W#92XvC^x}I7{j@so z3a8qk{9v6*T(Liw!ooLKUk8;axYUtVRf`Z5j~p&3Pdje8yzexP)ud6ZdBwPq4rUl` z6l3G&V4yCviPE}Qmy0|Tz%61EnG2^DJ z!Bg(srLd~PWI=M|Oc{s{d=8AxTZx{)`pX2nD-&aZovB3s5>*sn`OCx@0$LM{Cet)X z8_#jfH&1!RHr#wOnL{NP@vN3)TEyJ|gS;0|PcgtNPW2`APoDS`AgL5NG5OR(P_WLJr=H_^o6@_j(Oy0T zm}$QAMW~s=>z8jTxJ=^iIF%x1)67!fxk~}y3lNM%u?Xlp@4Fo2V2@Tno8P{HQ`jss%7F&rMR=fV#+4pv#De@ z?+bzg(-Q0@3v4CiA**|{`P3IFUJx{&Me-a|KwSYVJmgxhIJI*!fuBC&7gwRa$%6a_ zp~>>j#?Ml~O@V0%_F2-+QsDVUfti|Htev-#?DiNZo^Pa?h4%ucK#5?l#KfhzpAAc& zP2LN*1zvEdP0nTBB$-*>N~RXpq2`v!imbr4%;LAe=MDcPF%{~XB*$#@ECni3AXLuu z-h583^Wr>)d*?LHJKpi$<uy?(;m6IxW~$?;BHh3cFj&r+4Me0iEa(w+r-$B<{eO`d-FSeYMfJ%Kr^ zh{+)GDqO|EOf!2G`YeXe6x7L_Y5mG2jV5U9<$~Vg>?>b2kzZAl`DJ?L^8mpUG(JU1w$I!O9SnhWfP$QYv$Lr9l_*VrrkN3l#7u z)+5*{(VIt#rlATYP^f!nbx`z5;70@RHYt*z0z5wSIqRsisqSp@o;BdpEMO+EI!xfj zwv)@^GQqAa;|a)QjN^^)%r!N?IvMBQ3te8nU*7Vx?)RDIv&8cxpiiYQlsbJ#@EnU` zr_w!)UUKv-;GIgxJd5IIvt9rc@RP+;VaW-Lr~cE{;&$EX(9Ss%u5uO~mV7`hIRo2W z1oD`}Dk_)D5z4CvomHJau+F$nA6Q8nuc4cm`)RAbc>2`on{To@IoQr*aPw%!^AxN@ zEi|W@V^Wze&WEQQ6ktWBfMmxM)(R+Z_4;+Y?>yD%>yzh4qqD%%w@$W~7fYUvp!DXiXDg=kJfG>*;!St&nCX;1 zoAyGdfcBtDqK^^mx?Ww(A+GPuG$M+>J+uVN?5=Y^qfzS%mpWqfJG z2Jzq?-+cbGH9q5$aHNZE&gV}Rz+QZLJ^`Dp`+}!{<-LkM1w83K{LqUSr5d|eDh+o! zyKfqgNM@}FrBkfefZ>bH5?T{~oI=yi8qmPaA%3Ba<6(rkC+r(jk$yWP4IOv=Q zQ>gP2>}UF+rlp@}y5QOJE+`7npy|~;D;vaZYQtGo$!t8I!PGj5%Xu?6dKcFYXn`qw z>|vNT3lGJ#40$$;=>_lw)iN(&WZ1q|{_{8a#%d6JFJ-|Zq5OF2eDI9l()>)DmpFRi z=@ss-YbJDp#NRl@SwB@NUIod6<8WR+GzPl7@(q`7R7pIOl31ulMiDSLnwP<`5g8gElMJq& z%J9Y+3=vuwjtkccbWsWaraV`5osrD!ETaG^-^$6$1U8W$nZ5Ed&rI^o)@dnk+N4su z_|w+r;MwTBoFRuZW_e#{G@X+aZmvnvl}i`I$v^(BRD|VR{qo|c$?Er~iC=EFt+b>| zSXL~{T&YDgiI4xg>9c-Nl(vJ`flQVf?B@J!RK6kvinR+M3%}-b^4M}HD?FW^k%4(l zy?nu~Pq+{xkGrExK2`)(lOMe(qd+NBzpblKh6ArtE`s%O`}wsx9 zF4T)=yRtgndC#g&S7p`JVVTp~B1;-;r7;kaR5B?w5z-5Za6?oCH-m-7LA=30MD~xR zWao)q+1C@7Ged(COD83R6YaCONhj?H-hz!({VcgDgw%2x#D#2;> zwhVW<%vSzx%W{`n0*jNtlvljyp#liLK><(iwjxffL-!nzZ;(Epk0>D&1QqOQ4Yw3f zsv~(}5OE;TF6_iPK~5PaqJT3ZwN6(e{?>Rm5p28@$M}+be6LWaD_fz>CgerHlI_N$x`p+zm?3cJfszG5i2a5m9f2QYtF_NM%nV+<=W!P z%e9dEwMVfWEnSN$!0Lk2{$yE2Qo=ld#9rlVIu@xoGb4G#5$x#48ef&f2ZCJ{N>g&N z{8Cz3+zaJue$?;su(R;FX~krgHtw<+Zl9UvWB!@uEu|%QQYTSXQaV72CFoyoy76kc zYRMd#7sNfjS`Yf%F<|oZohRh(!#$E{=#a5UjcG7oruKFUc4CQis^1kFjDfDn8D0xS zDx@ipL(}pp1=1<7Ku()}V!rYir?!c~g%AT@X(nj&DKf5!@D>GxFAza zG58%pU=Y{4CBrq6$+2^qM>)c)849V+;SZHOGXcnH_vvJH`itom#lB;Uu)@iWJ@5UU zibsSct6QkMK`RJ81S;fCq?h0|0v9kMf&0LNN-(m?b?|iJy&7qbfy#!{CvTcfVQ%sz~wOm(4wjS-vEYFFXAkYwAfJw{KQi}+=fiH#@ zf4P%Vu$N%#Duys<`7GVOkZUN&t;Ws;J}klOOx(x><{?Ox1SLzKfR78tndY5oK845m zlu*${V=s7_&wUX+*E~sr(JBsnVcFd`AP??6BFnE@Ct=vvBl)a^9zW3~gVCs@>Kbv; zFRlfKO5m=5h1#ctfQ)c8+ysGLlF?NNv$>Elg}4hUO>2B}+=UgODFdK9pWk~4X)7e8 z&HtIM(_o9L*qFgM`SAT%hUi@ z;e@0G4)E&^hPovM+so%m`XeE7m+Mic7t~CymL1z}PQsG(WtJ-&r+EpXlh*)SR1!;o zchWIKAs;i+QlLWJntMqdhU42k@>%#?g%(gHKpuE&^76dS`()X?^4T(d>vTYJgXNIf zH=BEFA7^cP2|Ikvl5l<*$K~dGPxZ^`v8*&S2Bi*lgwDj0l0bry1a5Axj!KZXcmp$D z<4cAibC^Zb3P+rJ4KXevPyVymoD1Xd{mS)=vy}G1T(Pe7ly(!xd|60p2txb0 z2@1e`h296#LmuBsM)pH39kU=%HwRm@xu`n~yL(VV=&)uztVmp2C-YhJ4P!|!eaFY# z2g~cRp&9F%ie3L8jGTM1dYVO;o*FdYDPm}(RSAJ`+Rsf&O+beW6kdhGDVFo}aADc` zkimi8JLC~(7dww_U_?$8N{$r3k&J@yAkB72m(#Q?ty;saJTUcZcCFez_P5g09pOr2 zXl(-AzYBRi@-c@^U&x2FmJj{vwAB}^9xnJyS#C&N!0OLp98GdTymK9ti_-aERQiTv za%LnZYnvJr=g@c}i)IR=J;IVpV+=sT6xvj$efUR`vLJ<_Y_K$;)Bjt-=zh3pr9S2R z<(+B1**XouXGq&Dc!ca?g^A@ywmHK>P#oM3o5|f&`kQs*hZhJ8XL;;Q&U&F1dDcRH zs@=FvIR2>O zSH&R6L+GRRQk@M-HKckD1!QQs03fD5mjFW9EI-4}jK|vQ`JRQ{ItR}<3h*iw?hXz) zU53MdgflEh;SV9Ah$aCY1U`g41$&5>ej^EUaz6-s{%Y#dBBuU0ZuajDJV*-vd2N8Jb2Rg zndVbC{7bjdhF^+pQ^=(eMNABx-DMWz0;D4fBo~D^09I8?I-8bchQq#jCLAe10F*H_ zqxqCnq6yp;p5^any1c1?^Fpc9j~15G{L;)YZn{O2oopWadrB-;-j3z((}dr*PA{aq z!kxN3%hb+=%+OM~&>YkcGg14--Vt0)#m-lJKGqC=VwQ~m3)zHC)=^%)?GnaPv z9KtD}18}uVWsnapu5`(xm|}?qyR@;K33!6tJSfbs0qM1WzFo%7CN)sGt2ctsnd@-q(M2C`K3Qc zank~+ydBHmpGla#=;ameQ8)23CJ-i|#tOj>aTY`eX?9}XO>6AsR(DC=nK zD$pr#Q2^^#S49jpjAr>+2J7j@J(x-ZKhPos$BpW08G$^f@QUOpsAzz3<~5jIq&c8CNSb+4MGT4H zbM7fokR9lXZDiVmjb<^@5GMh@ofd-trzD<#N;zAn@(CaNZGT(d@nY^mdWYAPi`|8|$gDpt zPug&suRPs!-e+3pB>A*&DK7X!a|YE;2q=oH9Cm%@VS<2?E2G_~qyYqqwzi5iHcBcL zmuk3)28ZDPKQ^WUzX`&wYwPc{ob)x-Qnx4qjU6Hmrjja{J|H_`x~P&Ag&%f}Qz+*k zICU8^gf!^yIcyfIMp-JBF&I!|=6;ndMjXPK#{g4J50nfA2!ud(?#gFsQ zf5=iue^Q$uPgsqe9g))`tI0oCX;Z*x_Q!dp0QrT?SKt#eDqi^Rr5Lz{y{2<8aCmtF zKDL8uI*0S!`6gtTM!-z!R1h3E%BxZs`A2&of3gEZ%)<0Q8)+CFElQfD5|Tc4NCr-K zOT&hZ(y)F5%-dS)UptM;as)U25Te? z1mf7;TNQYJo_Y>OBlLAdfDKls6KzT5QA4bq(RwwSGOmIBW_1<<+JJs~^k>tXEU z5bo03Eoo@%!Np6YrKVQK5(&w5b&7Nzl|Wmww9apljhoj?vIb{6&1sP!gm_(5Si;G; zqy|o7gJxFdwl>LlC@SM9FFrU7;U1KR+B!I<1SB??z<_~zlPQ@quS4>Qq@)JVs8Db2 zn2SLoCy7{0@4p&RKsU3qvwWQMHlIZQ1Y&g$HmK-W-|5xN^Zrp~o4@ zd3zk$>RrD|U5(bi4yYDl7nT@kX$CXLHCAE9mBIQ)7V9q=n7-8Ff~Vr*sS~GPT8RUc zi=6Hx=jr!kjl}q88shU+r&ql;{9NMchQ(d433n7zCTAtkTB+MllY20#!EMKx*P9N!%-aUIDSO;({E6S~_ zm9|amW!ailvTggLB16MceaWRVcm7=IeCkQb9yu=3K1Y_k=tdbI8ImKvy-TF6O_pAE zg$(!g$neuUp~8=1)yA1S?NEOOzzw{Cad(1juwpq9FV(EeQ z-g)0v3>ug%z;!xt2C$5bNb`zIWaG8hVz!W!hkkXB$f*$w5WP}8A4iuA4@*aVy{ufc zSX!4ZlK8xo^p0g@tgTg|b=7h;;CuLvpG&TH6l=E-WV8vXFJvjdyL*AV2_|UArP=&g z;k?AzzT>XE(4R^mvi-?y0yH~<`I{>q#<~)!;)uto8a{=8AV7IXad)QaW9`TBGmRq@ zGtE2GeCMmq$tdoHk5~BF;K95!&XFVNU+2K497vm=;Uemz`cd~r?nC7Q517wo=(J~d zl=L?gGoAidNIT7Z4%9RHI;%Qqg3$u#HNqXa5b<0TgrIK5fll!SZIbDS=G)yTkubE( z?qjf&RoeuWAE=hCH-5wr6V1a z1rW%mP7O<7co2leLgmS$lBLZaT6%ij3d!PRK#3)!WdTl792t<|T^I;rgR*Gl3ONZ4 zJ%9Y5oPnKx{>Dp0P`^|+L0fN=acJUIShNkoO*)kwg~mvi#&M}hC!{75mNTQUzh^@d z!p6rlm>o1U)=8wJO_HYu0pmE<3`Qjh!5+Z(@tp_c$%nRM90^IwvenYOa5*&2u=Ea$ zN(lD#K-Cyn4V!Ub*Qe%pJJWpUqt0^;E9-OWRAzH= zAj0`Z;cikmLLPxS4X&h;cs2V48&1mD2{Y+J-JJ`9SgXW#@S3?DGTJvN>Aq7EX@v=- z_au_1rD^d3NnwRGPXjr;Pn4n%ki#4VMh2y&rCFBGYnR$+ojjF@;lQ;48G!(=?Pv$x zF-0Hh#gWN4t7p7ls;hB?GE6YR_>d$9AT-BwQXg%WFobZRrcQEW15zKTmW!9Hmho(@ z)GS;E6G*+RxZ-L_Bw-qAY?XMpR$Uu0-N2v(_e<WP) zvM9~)__2{&OFuh#b*>q(tRI)Xx}nhpV@1@VN8#P1B6pPtb|siYjY7H3`}2!P=ekj5 z>zk#(Oeo;YYMfy(7pj)#RLJl;W`dmx{SyPt3+25001BWNklj6BcdXK@CLF>!CUA65<5bT)%ri0Uiloqodar3~qV*`V z8XA3rEZ=mA%w4fUj_=+polhT-M1LgwBM&Fb}#r9n9cFO!4(T(Qn51!Bth!f1n&fb_U>>fHfd;%ZL}d&npV4DSAk!0) zg}`Q5u)R^@^)TZ!*Gjq{V-;Yofy|B&F9>jfc_$Bl>l}RHbK!)#Ui_YTnJfZ-FJA{>EKftN=lBsT#hK~6%a_q1S4?s1>B{y)E%=tvJX?*yg0e*hjOb7lGJ4hdnPh&16i?t{lvW3FE? zUs~p^l$z!)i68I8pb(X+c6hWjM6mg3NKSWlN}#`6a&s5pfGJvQaXSyaU*NBPdhY?r z4~|G37EUAU*1&`WX$(({6o#A_ExQoL$q>9W!tm6A_fDX%MRF(m<;W9{V`c%94^{mI zs2gX8kJLe!FX)iu(fxAh>Ali(_@s=$bB4C``VI_8aH&k;6f3DtNTxO^*)RmYE}qV6 z>r-LyS;0OPD$S;urNA>v0msnkvXfF^aW`iiE{=gEOW+B!Ok@~>umLu5c#Vug&;?-n zNb?+(c7#E59;jycvw#MV}TUzfHHrPG_7ARxp|AE2XZhyALT9SgJ4Cy z^Vi65<9takT1}%q(&K=FCCj82^^U@RABN{m8n*M}14D?1wRXi)nX_dx{LW$GfqfiP z21&qV6ryPcDtZ9F2QzUQuOXb6Szr(uKwMqNLTS46DjBTn!X_k?m9NF7t7e(Iehc7+ z_Ycf9wJSElO&#VY3`p@I2=T_b5?-(X;cI0yR4a*b9B9?J7$%*18OEY*6brUIV9dQn z@r*Xh^Q1849<;09T0_-K@7k5$83SXWVN%={j8%GjND%Xr_sp3P&l9X?!8`{PaJ*u0 zVqd}D3BOvd$D5mSbiH2T;L;#>C|1MWjW;OeXlHdE>lIT7cme!ie==g7uAuNn!;2ba z@Ef8X=dC25qz*|fJX4^iLXI}bSRFPBL9k~ai0h!KR}c1L4HAoxSm@-2B2qeljXa5= z5s4rSJB%byR|lJTNQUW33GbNj=pb&gib!K^i)68RX?Sc1KJVB=iY@$EY#d5OsYCfJc?gwYQ8bGm>BbgG)Hg~30});9qS!$i9vhYhc zKx+hXQqbb_*nyj>UkKm*4#d*H&&A`3Pm#70<1VBSd)g<@7z$y7S}i=P7Usv~uWsKW zH!kgvcJ#vwR%7=Y%_eK)+1cJ?6mm=mDpH)OF_>(EkL+Z{l*K!G>@;%~AeeT(XETE* zE>@6h<@86^FBOm!?RjXW=}4Qzp`p^2&H*w70m>6rctik9;*xKhuW5Co4)U@Ug4m{C zRo9BMRG5b@lsth33!{vL@Xoj3MoifA2asBKl0vf%NSn5qp0-GZ4rOJdt&*fmqXADn zQR2)~0}D4kRSnIsr^7u{o8EXmWnk+Mz;+*x0A}RO(1WE4<{d14Cb53YB~RTQiMRyp z=Y)%<^gK=u&ts7_hKra(%?RUB2%tj(0}`JxB&uq}!YT67)iD*s<|_Q=VE96Q%F$2q zpf=FV?Mi&X3U)TUBXXw21LZ`UR^}H>V%0It$Bu%=Is5D=Fp~yjjnA=0Q*gX+L8OT) z0&Pji5PBq2aAL2e5%`Ln^Fc-m$qcuvYB|*Uo$@GTA@sFXv_K~g@fk!UvFKW;(Qz9j znC3AD9k8sl723r}S29yBi|3(Xd}Em$Lo@x>6Pm`H1D}R8&%vG_(CzfIk5vdr37(qi<{^e%(1Lxo`DZC`!BPMM zu&|8)l1_!Jm9)+`-}#fK)ReJ|8TsjiGft(XlV0DQ$Nk$CT#R?5t2>A>xf$B6MFqUYGguH!Ermp8>^bR?_>kI7P2j90{64XugnK}^&z&fb}$V!h97pci*~ zg_qTSmNfLm#yex&m`DhQH zvOslJ$o`5>s|&7W?k|Nih$exL)fQ$BEN@zreC{VUZ3NjhpVPS6AtL-I&J_f>7hUdZdo`;2p0nIoQW`8zCxIjVMj4G zXW&u+IN9TV7r@Lj&CFF`LEeR!!(EH;C5T3`Ll1dyJcT(}kT<$x9-4vQFDG`qO;YD~ z$WNbZ{#G7B5O0ae(Zvjx=2qbdxhyUY4#3SS1K;ax7CyH~#4X+2+MR-m!m~00*u=rB z!g#G%75uvCo~BoK;a%$k&e*tTHq9ZV2Jb-}f)vF@6W-K5ig&ty(Hp`*0eo@3GOtYI z_V6rr8xkIK;|@;HBhG*$OPm=GT7|K(B!`p!7*5S82%~D4n@{LxjFF43Z1fA}X@S&& zSZ@Zt#Ua38S-}bh%PanDfLQH0#L=D7>Qo4JJ<5Ri=$G5J%HKA-mgilovD%iFYu}9Z zxN@8cwOE#?@vhH5A7jh&7VDUxNVrr+H~Qt!7z!zKPK>f4O3aCm2`&)RDZ{)oj=A)$ z9PA2pc~s$)X_{VzwyP`^#Q3j44v6}N!py7NOv4D*Q;@epjzU9j<|85AZUUjl~Li@U7yG;Vy$;|RDziV0B+C>i)BN$W0$@|4=Dp38$iNP1~` z_(v&1Z5}1$D4dG0|N%5sBGhskW)>cEHVzWaGha4q%^%HM0 z$EJuN4;9MtEDZ=ys2+N$7zA?=l%e1ZLz*c1{4e>7(C$bi?V{a={tx6jc`|hBQSZKF`&ocM}qqpxyd30K^}_WWILjZ z4IC8Od2GGTsbGgo8Hui=1rrc2g%*PhMJjgNp+PbuXQa2QTbk!DkT7-;a$Mtv6FzM0 zAaLU5gFNu(Py}aR#9;FZDT&uCPWKC9cV8NK2SBqlHkyPf!VdmP8+h7>f)T!;dVVifm6=8-PL z^O+HjP@W-QjU!EKA#kx}0%u)};2N<*IBR-XnpRyZ;W>*SE20udd`&*C0+s^+w{GJW zM%|b}ExiG%cui_tVqJ$pkcc!j%$H<+jf`OTT^Lt%rEr@Jub!%DZj~Hn1Ub|hr67go z9RyJW*&udSqGZ)hpb>-a6kt5s!Yumar3QlouR5#7MZ~=iJs`4cpA25SNm_2cRl?Zx zk;E*90-g6y=7^sPUR-bt?LCAYdU~Qc1`zi9YHlmXY$k%u9!Z?1ox?0Aiml|y@i+z! zY!;yq#UV`*42B`#p2n`UFs>@=du*E|$Kukk_7Z7Yv>dzq&cTEBr%(@JU<`7WraM&4 zQ@ZoivU#P>Yv}3??b&p%%7cj!4O8uw-jJE@>yGCrUZg>J&S}Z@lFWWID6i#wynEBq z-Qp${r5yf~kDY83dX=?xBi2=YG}+YjYFZUJ$bangc>DyXA4Ld)H}u{){qk9y-Q{{I zQ{_E^8^EZk1t5ngSEHDThk`gg6JfSIBiLsGwKqN!VuBRvkaDDN6oTmZuYV!Z(!K%l@+qGeKfm`2bss3G%~ za|-pQ^e8m$oD7Z*N&n6#M2_JyfqGsewm=flZsXV@-Ha3G^nz}{5kt!da7h3Mjx0`{ zqn0#|3k|yO16)JUeivROORv378s>E1TDclTmEWqyiHn`F2;83L7ZPr!b0Px z){Ofms{mITGX|PDpzZ@xbY8u_O8418Mq>~`%gwEiNG}Gf)Htpl!|8QR(8|X!cto)^ zJjz?%p}r>qb?`gJR&NMw4r);deQM)b)#_nBNn(b90Vs#tbb>frJBQID4cuEHIC&3d z76U|z+xYb^Ol)<*>3aW7W;DR&tt=rbCs`&Z9p|rg+5+6!@BwS(vQQ+-{l}9x4<#)gLH= z#d&a0S$(C2vdMk(IWY6f4e12X9K19+=t7e~^R%)^v_Rgh` zKqgc+jQ|}@X%c`vxCRFdg@$`1bNVQ5VIP!12${A^YjGX~&c;aKSkFG3gE87Ct%1c7 zhv16hj>R~x2Ma*}OY1@jHo?XmuE$AmV^R;HUkfcg(t8>Q1kucqlYX4D5z7og_~Diq ze21Y)x2K@-cArLk2q)Fm$QTYZ8mq;jM>xAWP*)>WxNx8mr^j`l!P(ciV=+BECfP-E zq@xWphv74Fs^Kz3wY8l#PDPH5>kdjpLXYHF523<5bcEY~1va2`mmryCa*<3zxEY}Za? zWprpv>e`#60jKWCD6T6TPDle5AgVd|IGW5fnsRzc0V9S#%y3XQ2A=>1F}E$Iw8O9$ zShg&yMx%VRb`GYVPiZYB$&9q{%<0{w0Z@sMA>1CYGn{zYXx)+N1rrkSI=UG>elX0a zz-Km-+C#jg3)|0$0~$F!y4MK-orzh+oKE}MI7EOq^$#CbXhS79uo@d__1L(OGm=@+LXr$D< z>q1G$7YOpcxb*DaE^RoLw51LpB}U8@UjVo{H6p`Dj>_R}xPK9*8%TaV9WJnLgDkyx zvn;?NM8k)V%l=0mQ4O6&rP{UzN%iA?NLZAm%k-4UN*e z`eJEczghBgaC|5D>09G&I-C9B9i2F^kCL>!ktan%dYI+5Y4c zGPq}-IffKxbVRG`B!OFC1eXhMdCjXNJ2oQ6p57w^`}aeTIw$Tex=7}2zFL;7XptwM z*dyr&w&5oF&9e5Em*KqXE;+g95gcKPfn^X=st8WCTe?z~UVf>}pVK7Ap4uioJ9l9R zb^}Ib*zpHYCe|n-YgfzSYi^ZBT!}Vt^q?Ggg0z4s3g#ujv8^(W^@Op6EWGX}X>@@8s!u4 zSi>=~mH)D}6sAgiz$|`r_sM4!>dLjUzGA_w-(8Igb@nBEbK@C5j5p`+m=Z&FRAGc4 zjGh2YAtD>(xze}}3tlF?cQF@&_KgcyYGJRA^_-T$9goSJ^-HCi*JMGpLd#s+cUh^fKvukAJdOt)iaC6K<{Sq9jlE#~Elz20QC5|4=BMT=#Y^d|F7ch;n<5o z9qp_lKFnmKMTKb8j2QE}np$lL#fD zBYY}W=%S^zJ~JRaNx}DucjJ~6WEzRHSZ->f!-JK^ESeg-4iKQbmOsshrF*fE!sk)m zbn+PtTm>l&OsJL7HrBrDI-dOyMi(GPWA}p01K{Ze)3ycsb^tDpJhBxO(v#|NRA|St zwYZZvCEfe?N(*jD3E}R>R1zke1O$H%wD;Z~X;{2mHr;rG1Y4Wr@Wb~@*S5!H~H^|~;i=^x1VcEa+AxYsZ={gKw<0qj3AIF`M(OS9e=3Ar#hyU+> z`Y}27@BtY;aRNt_Ld$OCIn(r4p_YJ8O%0Bf-XPsQebV*hHfdV67z_q@(y(fS+0Gp6 zgis!mdf4H&+;AO^P7TV@#~zff-I!Uxz8!*qk98k`pdW(9eZ8!|@=EE!!sV&%e)UGl zV=*+0K`vW`<5{t&nHV@OeMb+#m=lqUuDDj(v7p+0Y@h7fdY{A&KP{P!tMxK49DFUc zOP9;#H{OU_WdgF}H$RcF!w01Q_zB6+TPpnrF@penD>h##>n>g|r@K$c{`(%3QCy0g zgBdG`!72z_dk!{kUP)Gk^0=_8CS4ZK-~2HtFCd{Z91^;@QS%`{!}#LF+w#D5D%9Cw znX+O}Ap{cvP=>9To^`QE2OjfU_SeUREeCp=C|*W>MbJ(lAa0!0&V>Abqp+_JUH8 zfvHeE%UBz|vRJP}f7X&ix)5h~SgYdBa}GF0`*S=lP%&XO58*SOZFI%uDT^6oVfp}Y zBt|Mg5l4?MK%}^5JvwbS((NMxtfP7*)MXl1K`CJdu zRjQpS7+wy8p%|&=B+&0-3D3GIhE>tEF$dw8C-d zT*iXi%hPo*qXcCb*L%_LFw@W^0chK~I+#4_J5X9g!nlAS2-`6X&;kQB?AJKIxnmK^ z#-+Cn`z6>nghfP{9eB?oY}SGsVyYG`k+CLtW-OkML#Ml7vmTZd&W{cRpml?}12j_8 zJ`s*c?Yw2O7H3NDd*nemx_>7w+{L-oVayufC6gY(!PHeXm?U5ZfGfmeb#T+1kK<4G z^PWd^CfLMNqZm+N3W^f$xl7ema?v9A{(!+k!7(%xXD~4^{3x)&-~z$lP}d>RdCMh% z3kqtoxR?NDBpJe50nX*-?d^h#eS@v=AZq2cWEcio7Ry-vghZi*W(DE949ks-)m|4t&Q2wJiD(*E*_@U;926{pm^z_g+3c;8!D55L38QFj8;= zP6}UbKWEq8B+{kVI4cl-Ix_2{9!RX4Wx1(o zqWM>AVSmvyl^*2tib9^^kW?wJM;MWCJq89F;P9nWCwaKEdNW9o5;~jFM#aaKh~msa z%maY43?_(q2-y&rH;Bc{EKDR>G=zYW$E%yAX7y^R@9&rHT@Q=IV1j`F%i@}@(OfIE zXShRR@iB#k$|~5`6Q{8lns1OOF5XS@?B_b%_lU*F;o}EoK}(IqyE-K{H~@6R@P-LV zHQXlQ3xojzu8f`g^j^pOQE2cmm&jb4ISsP~8=U+@w;|*G8N%Xfy{ufhQX+$W(!Xzq zYT{7EacvnI5#}TG2uTi{Mwy2s&>WT6N!azN)Z;doP;H%L2v_io#QNc#b80SJ3{!II zWwV95{(LX3KdBS}e-y zJ_l5yrY#VZo87{>Wf0EW_h>xd;d0$N>i;S@Wsp?nq&yXJcOnd8$BPLr8X` z6ak{vj(Sa9+-m|jP)>$20PfGQe-gM7fu(ieqp}LPQp*kk29gLnSagvv419P?UJ$Os z)X+IA3GmWu;H-j98HFF)=8@Uf zKl~@X%$^rxsx&h}Q*fz`-2-@E7$%7%gLA6JO7l6IJ#a-<5T6L_z=2vBfu~5zmMzjZ zctWzUMGF{o5N#e=yH4cbF_=txN*0@flDL4kI@FBYvS6NAuvF@nuYnzWw;bEI z3+t=LWrP|$gqz@g$QbU5T(oo*?pRy^lgB>}}qBne^kf8tH`8Zm5+Z_>InAwN6g%J0$%Oz7OB?|FicV zK$4x;eedZoJ=2rJ&gPs0!V-}nkq8ka7-UKoMN6_|$#QtlvR!uBe%7m}dVVU0a+S*^ zhi5-oA{DG;%VH3-M1lkeA_EIxkvH#Rp;tDk}r>fvzq{J8-;zV9U)8a&5(1rP)7ZJW13Rb-&o zSx{($F&4LEN4NEC*kFBqFWQ@XU$pGu1D2aWdWG_|?A&f`uwSN59%1xoYl^c0b~{s~ zF(X-4M*M_!pByB2ZQW+)-+050yznAzcG$+o2RMsnaUfi9jKGA_IRYa>tg*}IfK!+^TjT>=~EM?k$%o`xU_v>6lio}?Dy}&R$ae|%n#fAy>1loK7cex4Z7sO!!xv&U`PzMM=%{2Dh z3kVXV8W58sTox8-j`HN$S(hk>^e;rcJ3x|0P?`!LF0E>pz);D^ORN_kOHo<1TM)G` zbd#rF001BWNkl+yShIE+jNKG%lBdl| zke~_jPBT#(d6xy)rOB>&F~PhXqfI3qEebv~M%=Ob_EH9_zpDH7(_8a0$3aNFMxvMa zXnyu8Rk$>^=e`e1tM`I0(pn7lOf4F&)aGCKm0#~eOLMxRnTqq6|4t>8Q;jM;Kj(`s zy2eRDlndLX6kEtaC~Q(=HoFRX#U~ zhjXMm3=zRKKlZRS0%B8bZPu}Bxt)WWF2O39mh*w`E+}+S>Ft)@b*rUUt+6H!8*#3M zbjTRzn;hJB^;+9)cUwEsH969sV1Tv3?wJ@K=RgwBPas3S5of)yM3NoLXcK@`#;oxw z(|PlqmZl7YP&#=n2n?=iDDGm{@*v5AugR7jH(9E8IV>8|(U}2kj}nWFp%k?I*1IUr z62vEA)sSCq&3en;e7j|qud;DGpyVc0SLD#yX|&vQt1Y|dKFgsLb?BXwQ0BtYd1^>o;vMCFiOpP;%8lqH{0dn~c0?H|A^PX~(;hqleI zv)1jjMkJ9YT+v}}|HcFS;<|f&sIW=Y^YBhXN`?y>X~HSWCdkqDaUPG|gU=4;xr0jp zK!Ew#d9c~s=Ef?&tnoNJS}XgNke74gzBYo0!D?MQ5OAbr&g&}A7z zO#oj;oDjxI3MIA~1Ps#B-GHqpkS=JPiJjnV39(zE2`mv(05i!LWORAUN%mWlJ5L_1 zxU?%F(Um5y6sJpoUxKupRYI5s&RQBU+AS%v{L#Z!L}4)7*5Yik1jH4aQ!C;IFQWy? zF&xO2#>BPHv0e*UBx@41Wy~OE2SBQ$Sf~T1*O|s#F{I*u} z5+k@M>KHc15Y)2)uFZ6GBWbrFN|_f018ZZlvBf4}`Am?{G~hOkOnfK#_A&q`Fkvv+ z+yNLvbMa|MF1}U%I>+IWBbhV80B_F%!h@&SUE7J#ASU(9HWU^&DyP%Zv*4D%k z+Q=!JLLn%dg2#`q$0?}vL}JV-@-{|x4!|FR51!`yp|yx8rHCJZU3nK6tV2vrKQ!gp z#K@F2jb?K9gXqxf^O_#=5i#l3&T8VW=>+*?>Qz9gS9Wa-rx&g{3Ek znAS-a5gY|$i)RY_p(lA7x7r2E?%{G&1uAR z+fp-@>pNxxFT!pdMkqiFy|U$?zGwAD>si0qCU8uBo{3s$)DD;WOaa6+M(<9ZINMYO#`q= zB*4ZF9I*U%zGJp(m35(%m+V<;xlGm?q1F@H#!`oA#&w?YB)}K-%>EXzFET&rF^Ddf zA;1}ze$1~?c#`8;?JcpTKBmicWNxPLI z<&ji&i+fZ8AJ{=pF^s0gwaIC&vnclW*_r2`M*{4y82l7~a^kqV_m11GghJwZ=CoLr zzT?oP9Sry)woWk3QKJL(O8;ornwOt3)V>xPd$nWKe_Ahl#i$&m&U~Xj8Tujvi>nc0 zU_Iw`fA_A<_Q2X6Td8qZKbv>!ji@tU-&sxRcz|}Y5lUDGB5Ya3%S!^X!`8}k1|cOX z>JSou9b>gWPiHrPTI#M`;}X}(9LI5P7Zm#hvLxrAikB>r^V_10L8&z0ls5&HJ;MNJ z=vscNi9y$8r&4Dv3)@7id4V#>WLO~qYls1v>}Wx*e#&8`n9WfJ4jWO~&%idCU}DL5 zRsz2JnC!@)WjYMy+0wh6I!xoC9WWK>Xn~+oV+?{419@0PR@+8v=xJovL3*O#WTQnk zY+CR{k9YVPEg~p3Sz3z?Uf9(gXr)fhK&^1=AIdw*yHqc}C!suC(t>giwJt?`l1Y_C zX^A!(qPF8`*tQ}5nB-K8Gb`<@`(k#?iqrY`vI*pB>X8N|3Ll_Z5V^bKdBj2Uc z?iEja28ta@zljCB$oQ6uet~&1&CXDuEQy&chqb4NPg(<%UN^*vY$uJ%lmBQUy@cuQm=t$~4V{ z6NNvc1EMC&tJwC(18i%twPY~r&atR6L4P`B=hLt!YDvaa{nyf5hIVNES%1sB- zskUw#rmYBup)wXtEvVY^!|GC{&rXkU#>(QRtu1UX?e62jaT#O!VtcbZ9qlmh`wa;eW*keaw zrEUArJ(fcWZs460cKpC01eyl?aJ^;KYFoJhwjJ8UuRaZ^0gCHx{{X^ZZFc0Py_P$2 z+|sMp+s->aXj4N2w*UEOkdSJ&E!#HR{@0+Ar3u~D%~=o9I^0`(n{7fQwq^MW8-|UE z8aDuoQXg!N6lXL2XHMDa!-vcUScE8h$A&Gi`))-`yM+aX?Ad*sJb=O+yF&(=b;8md zI&s<(9QJR&`vcb9(`0=|4_V*aEMy!4b#^YX#v#tCVD}`+r<(yff&Hc9Z|}Fs!+edYuUQhQkW9a$Z`styU@qlMGDd>e2q>g=`cogQ|qb`Ck_^3)QMLstvb&)T(76IXGoCudFfMY~hNvFW?q%5+df?R^vEtCV$*ITt4iwT=r zuWwNch63?8O&swiwK%vcwgQMUWBaMbU_*?hOzwG}PB*bQg|<^6;@dc_C`o-?p-cTl zZu&2FL%oS~iMjjYS0|3QU!8Y)Trb`NQ7-tZfqsyPp4f^-&ONj+Pq__<7CN3WwPb@8 zwr#a#Hv^U(-?hG{pR_5c`IeoV?flS5>wD}`4*WR}VR2Spjvsx^PM+LoH{W}gCCATL zasMeyYhr;gjMJMX~E$BZ5O;p6bQ z0ay_U0KayNIwUP+d#q>cN*nGc&SQT;8mG}$K}Z5=FN5IGm1d%+G0idj%Ck1PcQ5lE z8%a>x6K@{2BPbWHeCQEtkTe(UMH$U&^fLx_-NYU4qfJ=Utf9p+Yq#4l)PLJr#Ft+~ zhXkUfG=(9(0unMB4>Y&47*#**HsUc-cQAP1OTK)bzFSwEe_WJ^BDsuWmG>*}R?%vw z6BRJLtY`?`My0M@cm;?iZ5afF$aAytL*MEvN>HF3Iym5~ilS|7(aF^aXgsNT%}D?&v<=0sCIHJ>Zg?2Gzg=BBpz>(W|4RIN64V$rF&CAz0wln*gp zOiMBf0$_$Q*n^?DJ{EmLiYnE2*7^^=1f|?(Evq-!O}lqvaBjp7y!4_?9C+QPwr{j8 zYgXC5w+>oy=(Nq8K^PH{+$1};;>e&S2aqfq;!vG)rzJ}}eZkL)#Q_1dY|9Q?wQ;?j zJblXgo`2S6`p=@_3>B?K9~MuVRXznZKL8bth#FF3H`z|KyK@6)?Ufgvvx$SR*-*RK zh=|CZJB7q9JB&N-U?LPDK7#Mdri_;DYAR@d8sy^(`9uh!=-iXRSrG34wsgB%!sGJ&0xLolXHHcdH$Rs$l8xSS4P7Wdy11RPJ)NNaCu@*jt!rPLghY^Q8Zj%E;wiKzTeVkQ| zoI8fj1gsU?ed%GmU^Ul2(ZJwy#@hEhi7!$ljMMPoDW{fE`_wC95|f z*1N+pn9NuS#XgASmiF6u(kKkbmQjl}Zn@L4oA2Q4sA&Bsj=1@dyyg#+aMh-DZvNvm zESyt=gO=%CYK>CB6Dy^$(|P>`B-AE2NS$Qooa5X<=V4;~sLlmgj46ZwX0&+1R!pKa zC|w!tf2%L`g{~WEioGv^-6s{jsE&+5)0G`~A;%aZoun)hUPj%n({tH77Zoo6k2KqS zL2ubA1XzwmV+Jd%nizhB zCgs7#E?co~lcl>xk(R>o%wbqYqtmv0=@QP0TCs(P1yW2>V+0EEUCt?(L<#IcVbT@e z{;1`T9k%7^jduPZJo+K>UbYWNGish>fGIHQ$;P5-SsO%RYzll`@D+ zGl&9Wdn*kvcirdzq*kt-K*X5Q;t=(6gzxWOpD(8Lp0$90-RGJn8=o|iRsKw4YjVU+ zzV?ER9(e;|d>Fnl6goh*@8cY_z`Wfe-zkm_BVgvkZ zDMLx~lij5BF>pJE^cRv_NS|d_q33W)hqrIRipTB|y!*WP{XMI#d&4c3N7UD{M{EFI z{+qC9bok$Yn#GAltHc&GjpSL=3aIYm2kaeKG~*beLmwM<`$-+FF$c&Kw&tOuNXbz5 zO}(AA1l^9a7`4NWh&5yN_1MY7cJjm^2dZ0a>F%4Yp&cOs=2HeG!N%2Sa$}(HFbBlL z`}W(Z)3B2e>Fq!fu?b1JtKvN7JsVk789SIq;9kX!et!Zx)h$mX>K>hk`@9mk%f?0n zI4o6tooUTLouj%0y)F9{3{JMlI<#qmN{6%OD+H=Y{6nFFML>&#yc0292~R9h_sG!e z5Ler5u~@V-$jBHI-%=tdVlyNUi)WHKB?VVkyij4de9nj4#lP=^7I1Ey#+qmZK023~ z5dolqgV^3UM(oBVft7^8;;S>OjNN%cUEtKw3Bwi*E9AIRT^)zCOc_{S) zV^CH?k-tQI7O`8&eWQGrZ|uRg|5EGN)x%DK@bA2X>^bH%WT&X9$69Xvpfzp1)rJB4 zmTkLj{IxxH?idHP5?KS7HM4T;D*EAzH||7XZxBWh5-exMdq?-eI#@99@I?gjg<@Y$ z7%2Ti`;L+aEG0}*+xlHLfn?W7v5MGzOeCPzC%0JyP=p8$S z1P^kWhW!sqZob(jwVQBKEnG3-R(@~;-Msg}E<~H{i>jut`(oiP(uC5CDqp%65F;`r zz{RR#M#?%+E>qf$VmY!P=@M2z*|d;GU^^PGZAcFcoI1;v7Fl3SA7nW&nqe|ZRJGb$m!=Xp)iw0Jd#Of@H*o|U$JZ! zfnA+-Wm@4fN72G#Y=O4|bb+bXZS`!96})E!V2g-eGrV-ko{Mj+gTJP=o1unR*m)Vn z1K6|KPFwq-7E5m2YLhYrjkHz<+em4s^)YM!rJxi#x7^A`pbhF4z6Oq6Cfj?g>y|s< zQ?Ef%tl5^VTW@D19}d5|=k5<7(bbL#4m7+O>uF3wFT)eq6h`neD>k}@=ZZ&u(n=^u z<=W9kM#FRcgOAwg@gr75nJSA?T|?JWn_0Tb`d9=~u!Gj!^N@|MSOrI9)LL+Fxumy^ z^VUIjqv(C~u4R$P*v1Fjko;j+flT@`_~#{DH}*rlXIi+&XkTYXqqX)f;{f;!Y$}u! zkwI@-vDs!2om_v%UDm(mJZGY-$q$idM0p#e1PHaCLHl~`!zd8$#37IBkMdu`%GEYS znwaYIGp=Z(H2Ym1SyyI!Eie?`vsZ~nzWYY$)rq8ypn8sgkvB$ssHaltx1aJ~(KcBq z@%qzp4t7^Gp;B}4LB4ZTMn0v{jd*nYZTNdofKgjQsH{*7q_J3_7e5CV8#JLe?QeI@)!j4*?Y~pTEjS zhQ~xO%y7UeQN$)9kvl|8Bs!~ICUZfILFFkXVFP{P79AmUv;&orlXjV|0jv1rErKNw zA|ig2Kjou5p>0`2{9e*461Am_B4{K_Tn?fAFfYhMJ5}+_W&cs4p?-G7KN$#98mfnc z7-U96E+S}WRPpxImf+TMQYUTef{V%hJxCoUh`dMaz9cNm*=BTP=`s^exGszLuJ)p zfJy=R?`8L}3_%BZ&T<51J}9KIE!N#EYe!}#Je7(;qw^n)BUw!i>1p9Wq*4;#e!v#a zlN3c`(WSTalrI;I(YGGB6jzkBzCBR*j+K0-#h!6p@QN$0hvInJA^o6*8}4UAR|NKl z;k}o;98|v|kzw(*xU?kYSfKLkJf=i_df*_CP^Q%N)ECIv^DB=WS|!}x0Dsj(@4HLg zjqhpiOHoHU{L}=)^C?<)SzCAW4(lI0WasxI_Y2S}j1$#5edjZZ1cO^^T)EwDy8jM| z&Du-YhA|8o<@%3d0|q8&{|K_iTkPhKf6@xrZQ1kG_pOMT-g8G@uq9{!Hc3GUx!N7K z-)_BV`AuSqpp@;lN%*Dbi!H3SQZ^EWL7AYs0&VfW>x#t+(E^oNRhFiz1T)8Phc&+f z`06J7jzxD}!eutt+)ZBmPI#waQJPXhQ+oc1()RS?ba?1NtG+`j6=jdobT(6sOKHTf zD%P7QpE$GlTM1O$6T#zB2#*`Dj68HUrBnW47Kf~(a7sfFD%#H9YatNj?)OnXdIo`a zqg=t6b)C+-J{uu)q_&poQ&;cyilFt$%{2VKrXFlibZ}ThXUpM(29D&6VWs7#b|C1h+t{C333+IqX~Frr|xwK~Ht_dMa7Wd{Vq zUXo=jjY*~*tC4D04rIqTKy7DCWyXfA@0|lS%;;Q&SesnamDpCw;-z#_eIFe6RVeY| z-|M{vst`FqmcV@$ghQuC#0SGbqt$^p9t-i%5WvNgv&J~_SJCtMK2FQOqqg+L}^`_uP|>z+S=14%}OE*638 z2WPCit<#oa`+N+~Mz22gjH^{oW6Vensf)-Dk76OR5fi$zGx=(@(_%hXy9HtZRla3D z^z2*=YkP#N&UVqocPuHX@u|mih37AmieyCLBqfqbIaC@q3F3}BLVQ1* zSB3p|l#b$8rr|3WA7vgtS5VzoWE)bv4*z=H;)+CVpo*1O{_7doqfV;TPkMzj7@sJ5 z?>0L$AoxgGNN@ZZmxuKed}P!CXnDFx!b%xEe$x7%e!*riqSOwRzV(5RS?jv>P~w;= z#ai8Y4sXV=(@{X&aT33zqo59Iqno6MQ zzA80bojVc6ZS*J{aMq}(gR;(PDydSXT@D*ST||w5T@p2tc+r`X;%IjucA&D0ixfwV zlXS3FMsvy>76gwPJy*Pdr=bAhcXg_ITCqepAcZocC>)yQ4W})lMKzs2uv5zNx_Jaye%gP1RdhTz|gHV6Sl$uiW~s?C?wCDF6T< z07*naRM~5~%Cl9P(|1utgFi{JI0C;g78}wamUx&X%L_SC1=57Wesy!fP91pB`uAb_ zbM|@5R^c7_(`(_Z8mb?MQy?x_b~@fK|lclSipc4vj$d&Gj#vEqwviSAGFRMOoC2wu!>bXxBH8zV*e19=+47u2b3pQ zFSYesHreXiAFvaz?7@=~b~0qkqo>!FKKOB)LIGnO)4t2sZnDz4cWexK_o4HIG5G51 zw%DqhZnh#$t=(dzrf&feNUw)D{MY`a_Ke5523ItCyq%qu#dnxPx(gF848lNBmgiUX z$n}Ig^%{-9OV6~{yO3es-9SYd=O?Um=RdueCvm;YVe6z*i3uLWs}bs{ztu!=oGzO= zzv5)Q4a1{4e_>&GfGCDjr%G*ZNh|v-4mhea(Krdod18`>nY}{(<%PmCi871x^E~60n~mvl=0C1T zd!gIe63z=%J(lMMxU>hMO7+PVb#0KS3*heEPJNxYin4ki^4O!Ac?Z&!>JRQK`*Rv# z?Y-?bo7uYEdhmC87F?bfLfv`Ea%GK@d7 zA!hF`uEplZtZ2h|FXJ-KdvVzh!kAIp)-JE)`C}HEe-lB9S(WZ11F+YQf7u1QHX=rq zipE+fQ+QUykW%}WolHh-#NZHmXcQ*^4cM8$=0$SZ8f>{VA^oxpN*Z}~@gw1jH(|E7 z3AOKORJod|e_k6tN}2X4_gAzhs%Xs0HVAQM)0HqY>k_A1tKWjcQ(QhJ zqF6zx%0)Fj5}%4H##!l1;qtD~7PaHX?N$5j!6AwQ0!Egwzt);>#3UENl>8o6o0HR2cnlT%c)9tdA(f-E$->ZKXMQ;kWk zdV7wSskBlFY9XE4Eg8R?EdqCy#ho+ZwEWG6tb7%NT&-udbB>=@wj1|Kz6voH1on7E zidL?A<(oy2+0r;*N0%>dbqX4{kq75TbsfvUNhGjSDni6S9;H4fPbC)x)egeNiZAO@ zyn1oH^p}%PkJUIq@*m^PTgzom$Fck$<93GeSqe8GaBE!4QGCg|J{@x-b% z(Bp|!dvbY<+OK#K^D%3sTceB>kE*H3dRfG!D@WB>P^ZUN6mb@i=Ed-k-U3nBxU|(} zm`yaki`y;w?V0cqSeGM5U|EhFmo0=1WmTMz>s)?!RgUF8)N{p&-vc`J8mKA>{SC~;);Svhsg;1RM;}5DX<#?%SR;N+@JM1KD z@8l5xQ9GzX`7fJ0viTEi^i)vns`!P9UY+gr`8#fWfi^awRd3ml!EVNMBjSkweGxWG z5|u3tA~&+cXh{1u2WQwASxU?FDH^9Kq*~-dRSScBhsM$%g~*oLYsIt9reKzufrB+kKVy5#0s(X);`OBEv6wNz-aVrBKJDPHBDsU)`Ej8hHA~% z*|rR{Ur_WR9pZ-l1aafS%xm@8dd=F4(R@;VbE1VGQTaW&=w3yXn?C&v)ekQMwH-h` zZi6shm{0MzVIBpUno#eGV)`@`0ABi4)rRvDQ2C<5&wF>d52$~=LmQIx^9!#}m`{Ot zl<~E|o>8uWVt=>Gb-DGq;_;{`{Zs^yQvh;8+NhY{ZQw9d13V*#2(VYeKok%MS(SuS z>?{TXa_)146_uWJ8!x&TFx-S@lt?8{G(x3Z!Bd|{%1<4E!Lbq=tqR{DZ#J^$E@`bR zUiYh$f$Hkp-l#&Vv)V|%9U7_;v0SXU1uCcG#g#e4s2?vPHZLx*iwsqr=7sw&git)u zRW6yx56#~sfRmzuN+`;Cdqr&)xK^`^k7}roMxBQtu!stYxp^plD}6z-?j;r&sNVp| zd6YYfJP^DU*>$Gm_yU$7q>HEOhjP&;=3C2=jC>S`$nhaffrE9%P!1Kyo!6*fsu$%F z(1aXAcrP#S!`RT=(czy;Aq{brUFTR)eAto#C@p>pr^lW)gjb4;ynduVBj@dea4VF` zQ>my;6xJhnf#zKPm@xA$p4VDz<8bp+s!Um^7hAw~O0 zu`;fn1N)UJT6J-*mEU2=xJx^kKUGV}f1*YZgWbnh)I2h)I;U*__t}9VYP{knqsA$B z4KiK@&Pt$qLW-IhQQibf$%~B#5?4M9ZqNEUzSLIwIEY6hOfBF*AJt1!w*GawBT>*$ z`%-T8a*WGcJLbYq7fQEYOouBbAblya+nrQ_T^-}C; z3!G7vR|290(Mc^X!Q`=c%u_lqB~1r)xvf<3)s_@D_+pqpB2@m`10^ho^+t-Pq_(en z&CjcD(2IHzQS5cXs_M#7?Gnr@2T*r#kK(wZn=W7NqWkytmoMAz)%9NH{a)31G2hu1 z2q5j$IS=(oKzZh&Qssm>-GB?YKyvDh1F|lsMwziPO)F5B)$(|ulw)>Xo)&*(d&m!j zrGug80(F5eG15p*B(!G9~KLhNV*_i7KP=# z7NHnD;t{U$IqQ-9^iStjS`c!S*NxxdM$B_?^Sj!?iqN8NI3LNeYYugnU3M=S>z~}! zNYO1E9ICFKH_>HkyC`Z^cHEVwqr1vfebsyz1yVWcysz`PI`wz&x5}@Uj9arR<+#1| zEyXMeU-&2yw;^0w?EQy7xat+CD)1HmS*M|{c)p7nEVe*2%gP`sN*Q3np+*{TXX6H- zO=CYun`j}Y;4pxiVg?`w3N_(<%U$u*K{%xEb6p^gLkgYU2o%!*UWQ$1vXte6;DEwH z8QbIx>EIDBG66iioO)RK+wondgJIRAWe#YAHPBuL;g#~%>%>$M1L^gRQUwG!_qddNt!7e3M zLg!pj-YP|Wd6E381#-My2uRCuuhxx9J6qzpxki1hYIqQ}I3IPG--qi4lZq+V`-S_Y9T_nDAjx>Vy zbn8ld?vgHU>Sjo|0fTiS?hBk7Aqv1fAj_wTckQ5NOD1arGjidF?gq|hk_Zoo_ICiK z?)V%Fc*wo8jvR#pi$FYdna-AzcnJu|_DkC@v4x}W=;fn*mHZ3Y*3aNzL~1@4Md z);bXd*b``dG$936IC}S_ahhiehoYqi_rv&9zp5n3RI6DMFJ(9k41tc~iO*nyX_<|%qsSs=oShoB^zpas@RN^GwrR5s+icmVKaI;l zd2uCA?OYb@xBAdt35xTQP_(&g#JnI^=0TnEI<;ONW!$Szbfj7V>{_k-|9evKE7Kg8 zoa%elahF`uYbHY6WR=5a7R0W8F)w%cUT(aLt6`X!B5ak94nA7|&!*v%cJzf;Y~}^1 z=t-ExP|f3$BQ}0uzuDXSY|Z@-TKBf?)|i{H8L0PUs@)p0otDqQi^e&6a=71`V7oLm zH`(y112*&A_iSe6a?7+QZOQr#HZXY1Y`D)*qP9+ed+DmxHgVf-n_06Nb_xJIe%>Z< z+Aas}33daeiM-`tdgohH>>>b3d<2}8;kxs~mK{H5P18-*1m!%8vAZ00kXrC0mXv5F z<~WKxn}OO-wl$18uJ~Pg)Z2{=(rs}-H-3yGqz^MdOPy+ z4{hMoVe44F0!d#?Y@8glVz$wiZQo=|cI~i{0^nSn0DuSCS@c`x+>9N4`dK@Nd&ib- zyKL>YEjA2W<@C$1+vGWX5;P{QW%CAG!Q#;f|NF=jkJ-dX&X(SOzqRb%ZT)x(n=ZB3 zW`2*1P1@P#UbH62|5hmc9PFJ8W$k04Jd&x5jg&vn!Z?x4!_*SR8dx&bedK4ObuV5n5a5cBle*=)yce2>i>#Q- zYr7jamPUCrNva3@f^+8vYB9Bg+D2Fr+9fEE86iZaLx`q_kGH7+|a{@obhfy-$D=A9oV5_ir71L=#fQtW)cPEc*h zid8n<)MA6UMm&cBr{+yKJ73uedJo&kz;Vn*1KO}4BPl>6i0o?btKVnH@cCckTY5t=+hb=W-Gvkw>Iukm|{uI&G(4gvy7-bJxwgZRzqg z5{T!V0i$~bDf-F4o@i91=}T((#JoY@N?sTY33QEJ0{42Kg=@43?AKUVzTb*dl+Jhz zayods0WP2`u&b!LKv_COqTXGIMB;{x0I|$UAl;GS$g&mwa4I)y33$(vYd2)JT_OhK za9SFqnc0K{Oe3=C87ZSEEuyDVO|Y493WFANW46_nF6p%vBuR?Xgdu(DG|Mb?p8Grt z!DNo~(@^n}%Hg1~X~kOn4{Ws5rZtvX)dj&k1%DkkjS_>D_Gd0(hxQ(}Tz}3s@3`I8 zZ@QH-bC}z<+&Ter!|mg%co}>7#pi8ieB73_cUm(Cvuzz+*1K|*rEm=?2lA3LZ-5#{ z_R<fy58DLqmJE+rZtokGJ9NO> z5MD2FK5*_3Vc@$LhX<_h$UfS55*tr5G|R$Ar|+ks=gU+yuHv0xB{yl274v@T?Q5_u z!N}D0NG)A{W5$G{YAsL~xXZqZ06)>xY7N~hd3fB8zz%8MaVsp6q_rXvxc`+GZ0sz) zbF=se?MnM(mnRtYwR*Gv3&|}W{5%#0^m z@SRJH?F^G2<8_kx#vegGiDQ^V3%>~g+!H*NUDQG4yV zr)}4=&v1Zymc!KNEyV%n{kP&pthZz*j&q1QiZslL6LuUbdIbNz?Yr+rtZ|DK+uB%M z5Jk+RY{ZVjGEFwl;xpFVZpAg*0CE~=9QF=7m{zFnv1fm1*3xRpb!%*b1Ku*gqu&+P zTLkv^M_*s{TGX2+K_@XTPCT>p9e=KRQQwmcRa>=@*e{{(9PRV}2EnzPs$3A-M zQDoiM*{-|qMT!W8C!}mrIL&dxYB$JLK01g7oB!tWnfAzc-zdF0k+hMfB|&wUr!ikp zffP8_EW1J4Yq6RaY=JO&DyL91rWi26K6crIJlp>!6ij;BT5XtvzX?~Qcz<7!LZ%as zQc9A+EdQsug_MV^J1&E#-a6WEL#NN#=)fpcGTN10z1F#L1E8%1AZd+-ad^u8HqqB- zBOD+uUAES;@YGMAIz!k_>t44GEzXop4nyr9J7pylnp&4FLExmx&K)>vEoh9kuUcVK zuyO`YpR^{Fm^zm&wb6G@*+Abp>)5b?1Kj0+BFa*Ir)+Ad-+Gs>@;nBSm>C}%w&m-T zCmNvV&f2Ndr`SMr*xJ>rtr3yT!TvLL4zWk^<2!qo+VVB)oXvCQ)JZ7zl65UxZ|Pnf zz{_L+5-SaC9cIp+wSl9@taHgyYgx9;im-DEoGUb-J(`96lcz4n_rHR$PP=87uCx?& z$T5CGn=^pO#hS01OJ%KH-atIb z+Gg;e)QpXxEyZE`TQ{$=dsk#^wTz)H0{eB-)7MZz15o*PFe+6zz|n&k*m>h>>m2+s zX>TN8_bEwJ%!)h4PT5d{@it3XD+)R7uuRacfnN-}Bmo5u1toK|IqaqvkV;9ycSj=$ zb^N@wVGkuum^4~P!=oc`PT;-6XV#%;iu-0n3L7|_9zot)Iw>94c~MTI(2G}P_0D6i;PWNAc z2xDv?N#A3bB1jWP<>4>^77&Y$EHx5N))xitO^lBsN=!PSoyc*pOC6GOL8i{G6g23P7eAl61*afzXhuDek zygR(M{-Ju6HD3hw>#I)}OM6|mKmZlrLTd(c6*#P%Mye%&qK-5tb9@BU2`F6IR1Z5J zVxYBIM4VA}T2cVKHbDYSHxUIOCjf8-*PcKw92=mHHNhuE!={e5Z%0YZfZ1Ov|8k}wf5EN;y92QAA>1FU^3@eDI7(0T*2itq z%Oo*z1oTCKx{yFz(-$p8it8h=2lTbtC~a+BbSY4z1gCQYrBlrY3juGezZJl)##c** z#)((n&?Prkqb%08x&3fWSSJ$y-Y0RtB{PWGF*LITZAoysG-Mx{Rtq zRPFM2m`|Zk;_xh}VMxi6u?{^DJPK=Vxq-sqiC5wfF|<%9gYM_I*y5^L-6hxBZ}nc~ zD5|>mE?wY#T%D-v%VU8VCKY(Uc&BkA-l_P=qQ3K8jzN#zN`UN+)`zDptInOZUVr7XrlN zDNXyxvA5UT7e0vu=}bbtrX)ASPDtJ8vbETu(4o5=S%sDi*@bFEtFu4ikFWlf-8;Wh z3pGtB=HlP?z6C0JX$~63gEuZ=#qV;s+C3cLA_8^>lB6ZH6<27dOnob@D~?~C*G067 zm!Wq43&jqjl)r%_t{Jp`s=S%gMzhi9Ow5W@XP@hC?i?wDozjdlol`4+9JgDD?!Z)$ zj41GWm$Nu3Uq-)`oi7v>FN3nC>PG};u_$xR@lZ6+Cz|t7QLC$?h*54zq$2Thgz$J) zF*FL}?*qOFtji0PzphFv3RzCwSE<qD2bD z9SW4vBBi*~V#VDdl;ZACw75ILgS&f>;2wf|ki+x7=X~?c`j>mpp4n?Jo4u}F%iy2V z&@;WP>Sk%PHEx~&S3nr%NA`L7=vjPHLblc3Yo5I%Gg?az5+v)M;>al4zkEw8dLvr6 z1t(d)*w=KP*e;z{ab<_O+D4TuDLC~iZ^>5M`Z=;!iut~O$Y#qbW!O~UEu1gS)P&%w zy$k)&`_A2p#W;ZaSDS*yU5vGTszv+8#U@i~n#O(IP6PSu{=i>NK2i}XizLr7Qit_w zs%~rbk&;hNRjaGBgYj-FsQ00kQ#z(4-u&b#zJHnuIHb_&#|8y3u2M3e2QEGqD)YxvKJ$V`;!JYBxWOwXF!6oTf}`Za)m&Q*&V*I?y`&KKLT;G?kTg*ej}S zR34QBch?ps_$$wPtu;Hq(N#WES*-WR8MDvRGu9@f<2y6|j@~k>p6WU~j!669o95g% zdo3yr;l)oTDZ{@|@H>V=$PYMB$E8XH9WSpBLng`IQzxObeF5@CwjItDYb@t}Wf;>C z`nMBZ6keLNF&nC@-&+zRZele`t6rZjBvBGac%sKV{x>k{+xgiZ#8p=j>(oT89F5OK z(KHM+LP*8EN_^@)dHx z`OtbpZU|JLJ5!~?u&{55Qdu`nEFpnYEh^=lh&I<=&RjI)+sJRaYU0NF7R&tPNq`HK z_GytN5^yWukK7y8mke^wEu6=4IJ9o15~UU&{7Blkf>l>N4}0N@*8T@5x(ojjk4rFZ z^r!;0-2vmMBCpv29}+3Sdc2EKlnnKt%Q(uiX4=}=htXE4SIJ(+G59~kF@h)fGc${z zJa1d^)!K_<)7618#V5xEXqD%K64b#pZd3F z9&%{68=Y!X9!TeNYw(1ri^w0RvPyl-`=hUwgkn`7i>bvDJ5eHboxEGiSVZS3Ht#wa7eX!175|c#0t`T zMa0TlV$aR&5!|%ZC5=7rB~RewN_^R+E*>pk0NF%(p0X|Gc$cOHF53B)Y&Wglj*j!@ zxnsZdDo;vFw!RF|anS}qeJH-AFQ6BX{J7r5RXJ2`ZE`8szxL$t`?u@VPq1D53e$y9 zDfi^k`FzC0FTJ$~w550k4@&K7!rY|&=~qD%0mkSF?M(Kv zAqsnP2`fKy-n6~rp9PLe}BS6G;~?oK1coxAkYq>o3>tUGz)a)$NCWRU(oSvqREj{$+bf`BpJTo{kY zI5r7kk6?BV>+!+vBvJ)|CH!V+p7rAjTz|VMF2|i+yGe@dsA`7iEv}i5%g^u5;xTLA-aFi?H+Xg^ zB{aToeZ5&a_o~$0C$s@2ee*&Fx93u~iep#h?xzmzW<8E%vkP`Gi*htseYk+>vRwUC z>C?y$b!S=A;eC%wyL?6%;N2M-2@$u}R*Y!kfR5TfpvE0>lVZOap;6|$NNv<{R+9nt z=ugR`iX_pwjw`CHX2ZlV)!$)fvz3DzX;#_jY+h`%>3=~e&buRuT;+0FveZnz9v!#m zLlg~;T=mIy(xz;Z2M<$kBF}Mj@@ltP)oRe}Ev}E7OxgQg zBIj>!_XqVlcF6-znu8@?BmSz&WUi~bgnxgkNbQgnOCMHJ^=D`2u}fty+!xfSX7QBK zaC4{j^gkv2-Qyv5c~*C^GX>v&&z3W)_^(Dg_bhN(h$yfjb0^CggBZK)C+Z&b>y-+$ zDr;xN*h4G5g(4!x3b1=ymX2h1&KU`cFuxErboPl7!y$#oew@IJj%fQfFIMyM zedWKOz#cAH#}Z3}7AiPcGcZ^ZQ;wFFKzzi46jeux_S zh*jBLk?)EM(U@O)m>@eR3tSx3J68@L5cqYN_Y*Y@k_dafaNGHtdX6-wd)f*@7LM*s zt|Q4H4)MMSj%Eli5)iML>?ie?FU#WzCy07M+oMLJ^)XudU|m1r-|GlWKf(%?H(X5l zQ`Kt6HcYXrefzFCnoj>RvCb@!jLu-2OskI6DUs^FZM*^%ZAdH6ytZ|k$2(zC zTT(XW6`mM23V9WU>J7?~%%TH9qKez)LAjo}ldENtV`8_+YRZ`&pX(5KCF!0A7x9(! z??5@j@3BY5P<6TXx{x``bV>D~-cPD(Dft}PKzewXN$*GOkA~!IUQHXSt-Y00`RF@< z7Uh`|Qb=neL{(?YM|*q-TO79~$LxoxD^0AWRaW=f<;4Y_YqLWtlPN=ytiXIpIjtsT ze8pQ(UuWqEIF#}${lPd;V{VDmu!)Jlg5sF*Po|0AmrYUW@3mTQq&MYgRs7wo`uN(I{^=&XFW_bq_`%QSL5~rLO8F zj}!d#-a}Q62xjILYSS=OE}XYLAZ^O@`ZBiG^@dg4dq90q4n0I8Wf&2zXcfRdU+XZG z+$Gn1mfz&+l=61E0>;Ccbf|BK()pD;C$Hrd9@-y#{I7FUQ?yZ&@hOq$|IUhR3r}ho z3JKNJcsrx8vuOdJ=wJFIeEY-9=9qq#ek^F6aqOW^$}J?Qf5Vm>oGz1E^>g4iBV@B< zEhh4-edfo9f&vtINPt-Hf}?@8xD%U3q1Ltrx@s*{&)miNSXxI^tr(*fZ5z|Zmz^r&weE%<$2Lj!- zCZXM~64u*qB8{pm@2CBt@pD-?+4H%$4q|8niN+>Hj$ySp4boAyjmHq#VRd}}c=wHk zhNqB+tK&z44sqM|E5AoWuq{HzJXWwi>f!9BLw|eaPKnkdiY93lU29!R?Ky{Twozs+`ECpaBg_eE7L|o@>BY| zGD`fUH+WVY7;io56mXx%v9>}nP4F4x91%h4^42d%ad~@Qv}-|l|B0ehzNGaD3z7a@ zrkr3+q!F;(uWv3ls?lnZSuS@g zbQOZIDz!eLb^(}L(|b%?}%GAUBVcb zloea&*)Y-+T&^eO z@k!Rd>ay-q#}^Ed`|TT1d<6xL?i53d@JfhH`|VP@jn9KQB34=4S^`;{RbRkg{iC3m zuq&r1LgH%6>8hpuDY(vX(D#0ta7o$kYI=^Xy&$%3)J5b&rE@2jSw3XSv=Mqi-eEjn z7_z1#Anc{U-Tu4LQ)}5&rmwq)ywliS0teSBu?mLMv~jTipfR57_;Xj{VhF+CDbS=*d>=9g}%sU$r0J}*Pi zB@8ARe(CC>MZzy1+!rDuYTL_t21=Z4u@>SU>Wa&%dVEx+8a6F!Y3j$ZSmrY?JpHxG zq6KC+zL*?yZ?yXyFF&LMn9vt#STcWF9A6MLHEb|uxV7|WUHA6rQzD2!NfLr^~Drs@O z3zio@t@628CtS$XBv>SW+BJmsU5Xs~A-&oy^kL;!2c^M>?GFuH(6B^y1i9a1r7mjb zc{1cy%@Dr>pv7Pj4;(IWfi>1qRz zV>MJMHTYDT3;p7!AlUgoLP_ncdcW)A$8fa)ss`KI2l?p5wY5f@73cVeWo5rES6lrb zP1O#_a67SIt3LO#RDVXNhJHJ*wlyp;OFX__dg{}?^2&PBPfAUAxNE<6S!(v-xT+-q zI}frUsoGD5HB#<#eBv`yiRUyF!hb75ULwXH581C~)W)Gf_*T{y-ZO3@pQ>eI_p4rd zDKW%f-L5{0Eww*Y*}$47?=YFQKh%rF{@B+t*@4lrhVSb~b5uRIaDP;`>6%7?oq`GI zYRt2I$V%R$oZSER*{SqJ<+}O-MuPEOmk_$o^g&e!CkhNpJxy z;#%mZy{+TW1+Qd!I%bJI-iRZ6m^Bx-+~a*7!dJmuK5#CZ-oKG^OVxb_J_wN5<&{g=KKA%2UeQvryPmw`7`6$}SNhPV_kl4`3Sf1GW< zUhH}?x&4&Sygp$$^tU)V@?7F6&gTKH45hhVH7%X9tF83eRE0`x><$yEU9LR9C>g`| z_5QzG!!;$t3+c0x^mh39v!{3l&-=XP2toz;otU0hcT}O_wdRjpI}U@`Rndt)${<&A zqn)yos|}I$hV}X_u9EwHqmNt45DR7T%SM}pIoye@HACe^;PtZk(|y(x3EXe@&qKK1 zX(i%hlA(%-04ncm-C(m?y^!f{9o=?$mF7ClA!0qAne3z5bP3kAUb_c9tc5a{dnqJ8 z+;crfAeI}uAt!;Wfs{|pKBvQmb%wV~e(?bxdmbf+F4Hs?Wau6hTAmoLp(|osi`8y@ zh@B-(XgA$c2+VC&pC7tvUaC=9cUtWP5lI~!)pD{5_JNlg)+QTz47;j4`rVB`QXG$n zKi#gP-e-a3+pmGh(5xFg?!lQ)I|#e`ssGH&7Ycc5D?D_Aob+D}t!N^aZ;eF+1TDP}6!x^?=obM>kJ zYGb9r$OSz#i(-rt2R{cvUfD~A^`FZL?0tGM&KW3LH!M{fIsT!*#_^rq=BJ*Q+)R0! z?M$i(Ig}`_s$08b1YHCysC!h0{o;2-H@&P-Zn`= zVHU2T(wv19xd9Muf-BZ zMl5Y%wFHbm6`00z@bilr)6k6a3k&aH*2@+x@9dZ%56vZhNSqF0mUCp(%_Ye}rB)lv zuMg{=HZ`9@%MBam#2-SH7i$uS4+s9$o)nqu4gI9#A1|IZw?Q3DSUPSUwQaItzZ_i( zK5CiH^jf!ce<&0Z?0ZGaFEDkoYX@;@uvu>GQ_6q>yb6gd6DdR_gpJ)+9;C<;bP=gy zc1seE%ui5$yQQJ1O%&Z)+sJx1er+`~3e1vMopZ*O-tqhP!?$_w3gcG%l|N5=`8@6s zJ_d_jAF67}yV>(kSaY>ru;FTAWB;9Y-RltHuW!u=+$B7OK8Id*iCb* zpA5#41qcdUdsV&ohigF8LGQ2r|GA(;Eql%uI&hg@eV0b1fvLHHxS8Jxrk~N%ZTmgu zi^7E!-%S@}uEZUQh~rI>&ykY^ZlIRrUrlCO&-p>cd>X^11jRZG9;zypF+W4exgrb1ykej4y`ogP(r&ZM7O z<%VjzeD{wZYdCBSO}l}){DM42?8#j96?3*$J28B?Pfet2frFg{#*~Ax8p!siEI&&m z0bMP*q3;|7nY>!PdK3MW3S4+k@LKaUGhnHjl`3n)J{hPrhXI$67?5HkMprp!UZ__2 zNKR$_YYe(Il4mOTGATj|IO8f4kmp-)3L8RA+0-H>>Nb4RY`66?5HYC))U4jFxFIAS z3!gy0=Rpr`?YHM4LHxSJ+8zqf4!hT+`FZ|iW)=r$LGgYzu&zLvReWP=BqwuVf=gO_fW~DE3dfnxG!-d zH0=7WB!9VTx~XI%qRt}bHXOb?<6aH)t0Rj6KmYQIh*z)Oq1=bKx=CQ=@wd;e?rL58 z?fm%C-$X?rG?Q@e03L6NiYkio#(bD?6hklRIc1y$Ktrp|2&F29xj#t`7eILoi`(Gb$vMkg+3`yLZ zA~RO+ctm&UvSY)x&9yqN#oWVvt_mdr2aGVgEvd-}Dld^j0AULaAXcR(eDxD1oE*j&S^ zBC@-xHTCJ0P<}l?kjHg~_xV}%l|GlcSKC}Z=z#HV@u5XS44#7M{Ou!^L-n{i{G@v?IZc z##}L=rTyhX>>2sL=>5J3uG>fx;ORZynn~$dlkhxRG=DZ5>-%TDNZA&=W7S}TLF)`0 zEZ0w;@u*QE-P@+ssuXxKz`KDBi1G#k;AeFBp7mz76K-$<`+BDpUT9=You+~Kfd6jk zkwa-|%cw2PC*EeIb%iNAFUxy_RpfMxwFl$48rHC4lH1JySgm!v-%==APqSHy`U@zk3(lmrti*@!kIq3-H;>7MEn^E3V|vw#zvbucO;Gu+I{I zOFVjyz3#$dmj`BWzS@NvrS{Ekmfs`+jVKoK7gcaaTI@qV4&!H&Q_`E;?W}Ntd2QT; zyjPkI>O$mqtbx=ntN0l&etLHe-MTr)3r5Df+je>V&<3(4zx^u znDJz2wHj1Z{KGleS%Q&_=ks+}b>lq&O8##yHq@Xh$!|l}HL)oH+r(s89kL$-hQGt@ z?OpA|-ZJ2;G1E@WeR&&u6XOJMU;YM}>{9*Hw$WEL@CH8%#;SG1_vbBod_o^v@ZXx; z93EyZivp+IL+ZYmgx8yIhGZ-BkZf^mlO`K-V~!-tYHr`J<3Yx39FgjY zBI{G4Y=$H_s=~?^zYZmHOe1(Moj`aJ60afrVRCi;LmDwOl%JV5_1G*z?{*xgcxHc7 zTum+tu^dxxMDsAj$fbclA`400gT& zv{0fu)H-w}-$JxLzWKAt`UOugnj&4{^;PggXZ93VD1p>#09gN-mQoP>;wwL9REgtI>{4ao?dLy%z3{Wmoh-Mwe=Rm@dY zJ*fY<2(rCMX5-J+d1Gvx+ff_h{)Gf=L43%x{Ifb)(}vMk1os7Qs-)QPn}1VQ{W^S+bj*^`i_%HFU!==hwtAOCawtTcqbIzf%4-6Ovh!01LpPB$@~ll1ASwP*NJgu zxKB&Df0=WHu^IM~=8XG1GrI;^`twwU;G>G_YjMa{>4>IajP)hTBa;h6>HD9xv`Oe3hGGxGbs!; z;B)4X`elqCs#N(n;gs@@f|?{@7a3G+Z%EQI-0x`nslN<3^4#KhWPz2QNRBlFR6|bI4AjR;z6fnbF5#6TMdvf6=VZ zcEACI6?#$_1^KR@{NT}pbuz#x-3w*vi?VhrsB zgZ~S{lXdh{^v+;;tS>QG#QUW5j@$}NDb$hgg_b~}{NU;~k^P|Sd!_3qrLW3vt0LDc z3lzs1h^yrzoZWQc*~`l5!qSpqoPw6hFYHTnm?{*nnzG11Xg_Dju7)?;uwzlE{e&DP zUDj*(w|)0T?9E=mPYDiA*9W(%_Nf1m=DTxYaw+wV8ND)m{DKHl(f}i<@E4Z+Y<13qbj-BB=ETLW?HH@&R{wU> zvTd!2SxqrjXu4S_*BQx9YkpN}wUzV?I&d*nFDSFt7ji#j%7kaDl=-+u+QAB&p?+Hh z54WTpAKlalhy#{bKZn(C)w?nLvuFMc&?5i~yy@$?d!YCI8FtJyIdDvclGyfc%j{}R zpjvWtBc1c&U8eug)V%IHKf$+e=mwzAk0^?>Qk)=hb`;a`Ul)I^dlCsXe9kSApfzCD zuS!bA3U_)b71iPVQ|nZ#!FFlc0nBot%OaZY4>KET5J?D> zjJ6NCBv3^jn8k|-+XR;bsyFgQGO8s+Vb%lRT-1tdtrJ&RZrw=6Rkt{XdA~?tysn`Z zSQYB+Sg2%$qb;mU5Qu?mK_}(kd|#hSfvW>Gb0krLyPTr{P*^bk4wUuoBq}vsf~3X+Gy?2N-U~wVe$5B>Z&fYUUVq zrD%xc4YrU)CahkOrm8tlb-pY*3A_vO}ZYxnj#qoP+Pu?V3v-D#RkuY(lfJdM4 z^%b2S0m#GR23V~}=fAe`)tcu&{b^#2Y^!Vearc;1yCI>Rvf?roPT@I2Lknwk91QBa zUB&UTNna>N-8U80X6rzeKZQ9@B^L_ z@o$iF3qT|E3X;C1mYxH2l$IfW_ab(qS+`>%1$#*t%sLMh+bNAp>{mdA++B*vlh z8YMXna3Ncv3$^J5_+riXMLmSly*<+G+nnio|lfAByq-W&S%;i|tyxje&(utPEDdo}*86on(X_VZj1Zwpt@ zzC~+``Lb81f14R-SE24;j9PQb!IUOzmGOFoyTawcSZg6cyaGcDOVh=$hAGE%+I0ba zR*cgu9Z5F1qqeS5h`D(63EUNZJeznt z>^_OYe~voqKD<=d1S>VTY`cc-vQ$8BIOiXD6vPMx#)Y+u2`@`)T7wf4#ix$fXCxD= z6?LzC!toYo7RTN%n04W;`02FfZ|C3x@plmC8+T_5UnzmTgW=Jvy!n+&b;B3V|EB?RR zV157;Q7z%Cy$+3;%xIcB@E0Rn;y82XipCGUmHqulW3k`E^SpAcXbRM1LLFT_)46=# zk-H)8w%X%4LvLbw`}$q5ueN8HBIT$5k(4NmE&0Jt7z%ATj3Bxu8VtA}0uOdY=MC)i zyGIc()XdcIdCyWw_x>ER;2}utuS{n2(aI!tXd4mS&Q@2iU^BRfPrJ>9qg7*t64jZrMt32~A5L1#7!)fkSBCLWRs^$>Xim-V)(`*0H zAIH`wSu=>uGWDXgR|u_-v-qX`@ob$XL)yM+8`{_W#>f>S&A|_4oa!#rZ!`PBHB}j+ z!#6hOdWi<>sRvCNe=7_1XE~P^nB*~)Paq}c^9>50zy9CzLF*|$bwI4rn6Q&R#5@ak zCI?OI+8+M&PDFd`zWZ_dx#NJC-^PlQTM6G%h6cm6<75?2m<8-#Z za2!!-f1jn}n4bS@0rS7IVaI)R9aThTyBMh)Yzn`Vu**WlshI9RUa+cZM7^7}+b%7# zQ9X$}WKx`UrXsJ^DIhjskVBx26UnCi0vlhJEmB*RNK<2&xLhtrABuhDfyZ z(~x`QaBWVyW^RzVEGbh|#k5qxEYE0j-R=8oEOb;(RrE>3hIXf|ZmybG!!hmRT#!gf zC{jMEZw7EPmzh@2#li}3SMM+YCcLZ!Dy~YDNq-8C3F~QgT{L(Ki*;xa2CL+Y%Q2PxRrgVAoX}t&R`c zH?r<3Hky*0>L4ogcktKGjK5++C0!%nMhP+nZ0Gj8m`zH|{iMH;u_ly9N%B_ndHwd+ zH=~XC{Mh3eENKU+mThM{OQCWKq790`X4n$dPJ!;`{AECim&~b)X@B{EplIn(1ba6) zc?sL!?e{L2z2=WpiFxR^Z!@;@9gJ2%9qS)p4h;?Vaa{lFc;S@Lx-(~DU}1^1dh1V` zBm>RDk{b2X={0R;<hV&s28gQ^IFxN23BiZe9he@t8@-~R)9!DrqdJ>|`JyxACjNu{j1~RAL9_;t-!|iF?7t<8APIdZ7Ci@x-WRPD zb9ZeMb^+9OO02p*_XHSHoFai&noC5(GE!Jq}l#HA5dlHSsyuaeXV`c z5>GAUfp!mf(F6y>ZAyD7sRTuCqx7qG%)G%#T@=hmgyX(Ln_b$>w00l}nb{rmmW*;T zxvVe27~bpd_=z*S9L|yWi4qEXR=0Tm)jp-TfhX+O&5o(&AA=Sm4TP>cd!)hMt0LfG ze|cb4RUPGH+cJJMd^|{fQ)IUl#Z~WpFwxJ9+2&je%C!pSWQD8P%skdL3C?4MA*DA? zY-t~=^#2P!vZH+`aBxK%Df$e`!OrrRy-~1CKZKzr2s1;V;48Z^ee>L5;A}yD!=mw= zuc|0#N@izEiwT?f{bENBxDJ9(+$J}l-z%_sxU?ymh0;029%1VSj1}OjT@Tn`(#XPM z`{>!5Tw619(B3;L6+XW?RlZ~KMxL`O4w$nzaNW z7%giR8L3jXfK|dav*~x28d^Nx`F6woV}va6Vl;Iys`P8uIz1FOP1*cJA}N6T1%}BO zAx?syHc!?~**60_`I1Sq2{_z<9;c8=fpC6W(Kjm0$M~#(R@oB{0v6r!Xdk582_z4; zvdqDh->&ZQ?J>_^;X~CeLFS)DRXs9qn@gR4HuAOeU?-p<@TOv6c+IZX?nRnzKb#pl z4UouA%XL!?wpCbKpKIP(e1+~sT-13H@|ph_59JNrGg%X9lkL9ecPlr=k5)Xu zE^0LQ2A%S+l7?#DGT$bD?KV&Er&PF)y|3R@=IJ5Fj92x@^Hu-`>jJT%g%ziGA-pn6 zV>BYX4R{z%82uEC0wWny+~kToZ;AuNK0KHL6ei2?CLunSL1lSsWhFH!|{N&lR!%%k*v8A|6v$S<`Gt z@al(~nZYXEX*rrkc}qAJxuUi_vTX)^{ z2t@=Kb`0aOwq38NKKHgAVX{PneLWu*5q0A*AE%b^NtcjA59euM6Ceebjn*4jj2&a^ z*ZxY2bk%xq_S0N1Wl*<$x_UQ^x)H!7iO(G_Lo`$M%aj!ul;#&$7y-pYZXMSzLBoUENE_{We$dxc3h4`Vf1ibIfY3 zxw7D91aB9v!O3s?QeD`=bMSbh0%r~NKQ1Y)zzHUx!4YU0{Mz-tpIXgx{N++*9`?5x zeoJ~3WWq~a!G`Pcz*H&(zLVDuz9fFO&Q;CKyR(X0(?yI-uers4u)p{c$Xh#UB$TA9 z>lfDuG)>ccE#tn|LY2CsbyXYROSjbcX+#G)&pmuL}{7i*CX^&5_vn4 z>HBwlu5)}vV1cv!o@>2E(eL;WP)7yZlUu)PXm0~*6U~J4IN;L*ecSJ5D_hlYXKvr( zueIHd+R=`Qo{!-74g+2RZu%u2iB^y+*Fjd#n2|NJP~0~p&e0-AjrPO3D?G~&M{b17 z>Gsml2D?=wdY1TFPNe`$9+Zveu1#>a*UC99T|$DKSj>JiyrPuBkF*<%-}Muy_t>eK=b($mesUe}nf`-fh)xMBv17 z%L}s+;l7-s=K2-BcOr1yPbyzJPl4o?y5DzS~schT`J85Wt7+u2u0qV4W89={( za$@mpJ!qa|-aDzsi#|}TcV?t+J9qr`@6)_JwQEA7 zc2qmVjuwVyYdREXD}Xl4hxMYka_0XUUM^xBnwje~IT~Fvhk%=eH1OBU88Fy!=|p8l zX7(#wT6rA-W?Bf;?@iJ}Td$*>JJO>bD*YaY%grQTO`u~bv_Ia#fkxQ+!oCz=wLu%e zr@%mT%vs&lyE!UAS|{4@ZJZ*f1BBeryZRjHZ0FXpbPFO5cDIky%j*XwVX%n#(DR~r zR(fxsE_0!Q!d`Q0L)N>{#jnDt_|&YVAx z0xt}pc4|!I!d7P0wWKJx*)<*)rnA`&B4DYn;Y1|rl?gT=}5IJ0G-zA&P z6V+)@PTRsE5@L8&liZZfoavsUN&Z)_-&57AG~GgxYf9}d1M*x%DN7ZmQL_LqnBUUk zyfK>%=vR@A*5Bl$Vm7a-UmhD_?(`I!tP(dl|l0@UoyOiXE`bUoBba()Fj3mRSyZQCC z&HyS9&6*_BGTL8QPN#h9g#kV7M7AP*)IF#bps^jooDIaF#6a7qGN91=SgFPAuY*^z z<&R<6DngIn6dEjmsVv&_y8pDF?zk0w4)x0viu&)LyVP`o%~Ik&W#qKyp1H9kCEMJy z0AfR@FMFj#O5X(tlC>Os%L~-oleHB;2#!eD)mK`s;B>}On}05?ic4p($fQItXREcg zjgBg4MRoy2O|A`}@m1*n{CQ6G1V?`w5cMp&y zam=r(orxxe9z*uZnD3^ z{#Bx^7YMXjx=#eqZh1aUXFa}zoJQISN-QQZzq6nhQT~S4e6l@(BzJ#Le`1TK-^Wvg zm^!}r5Cih@Y+jaRHGuA~=>Xh>n;yoaMliS%|4{HQ%mIXobU7*ln{HoIeWsH3h1H3nDKiRmyw0O6Jr%}0QWB4i4p4^5eNCz4#s?g5wp zOqEWcXHW4vjn~sBE00$V!N-12NO3DnP@l<1xuN$NLAQj)7&*#*chl=`?Z^xu z;Vq!y*n3wbAlYBpV@R#*8Dm11jM?$?YK+VG6t_KyZo7yJ*#8`Y5ho+&;?pPzfHffK zx%mg#^{4B&>85*}*uFuoKGD)5q5Z;D49rLQ*KNl>;uC-fEyTb_n(Dt?bP3Ws4d7&I7|7&1d@QLQuk2c?y+1_1s$Npn2fXTM?Yer{j0&ZlC? zT!i0GY(Ash%uY6XSv~VOnX|lWfFd3&;fH%zzGxOPK^3u^m=ZTqjTcjj-A-9ZJxsSL z7rNq%Vk?~Z|Ei3icS|Zd6WSQ*r(KLV<*O|kB}Z~#sw^@6Q+&9C9j~mW=2{*aqzjbZwX6pU3&*i+~gu~b+@p}q4E-C?$zfgl8xBuZ74WuC@9Vyq~S!8C`JHI z;fv=OEst5Gfa;BA0AkUg12CMRN}`p3Sjesv4bI~H(Q%=Gi2ppyXX18)y!{pJb7>?J z(*9gYx+$KO+xe6N#{)*TPg-}y#-%W60qh?fjynQCvm?~D&(pWE2Nhw@3E@E;)PZY{ z`QjhY@9cetB%x7viTRq8`Ic0{b2^4UN}ruZ`+2V^_)C4`Y2BnbKJiD7d3pwx!GV~d zuuP$~&WJY!{+TXw+5yZj7S}fEp4@Ms{o*@_zIfC%{Izd}?mRcBeXVuABR^<25yhP^ zn@}7Nq(d-&%w`D=wH~NfI%Y`fZYS>M(mhxR9=D#~W24Zl$HfhQwh}(DNek^hidGul8NJqi_|=|Q%ggArO@Xq!5p4G_2zBh0WN88j9ZL&P;H(3{YUMv8|1t-S0YJC>(7niFjPz z>$q)7T9bhHrdTs5cL}om?;N*caWU_ns~?#63&to@2}cv+TxWpJO;eK4SoA zw@8uEgXk9$mPy|7Czx;4T%#f6_Y^iR|6_4(E3HgTi0#j{a~kju zCPU&uA*cv2N{%JO&h`_SvWm9T4;S7}Y&FL8YosEzch_QM#08o9{yN|?Fv+E&Z!wHZ zV?*)FA$F~qF5w58F|T2M;v?{mjVwDo!0}2ngL!r$(-2!|qlY8d}h|PAc;2Ve`T!Xi!x3E$%0!fi? zz2*|#k`Kb93D2p+?pq4W5lQp&lfXj6bJ8DQ5} zE_i;ciQl(V5$-zmxB63&ul}#>3%bhuNDjo+g_Rlz0*p2BiPP6rODsZo!O=K#ttd;a zqXC$$*L)*gAK>178_^;KmLkndioKB0Zhl&Jvrz$LscW0bGfd9_`7z7o!;0zYq0 zr?Ah*Q$`;N3x#0~;DAu}W+;YfX|T8Qx=moL!FqV!)F-I!eiylP_h`hl#c>0OS`1j)3DL;HHIJmEk@pweH15wiV!`2Mfw zgyMXut$;sa>OaL(5vQ)}>e+^pix}wL$iMM1yZY;#@nw1{4d$C7Fh7(vf0$NWo?q4A z!TmuPoKx%I<9@$j9w-LRn{6)B-r-+uvV>?X@i`Xsiyz|}``Xy0NGy;YkEHh6Jvjh7 zqh|{N7&PfhpNncT(NMR#*)ZIzPXK6u^r+!*8PqkY;6C9QT>c?I^Xc*~kE{aOGDYJ{ z#`t$eW$pkI2Z#5fcazaqh8-V)#O>54Kg_;V+j^n`jDCvsnHFbR*jJoUs^oDQ*zzFr zUwz>IM?T55!+M~_6Px9j$IF6pcuInDx<_fm2>DbvQ0N{>AXG$dL?A(cA-M4>?^Co) znM6H$`}?BO%q>%uZkoOpR1Ar;P%dSwA>A#t1U`M`ivNrYZVwDx&gH3EY?Fa@PWeTt z!@sbX4*#onWO3HO|9-lvRd@neJ75g2ZpYx>39?-HHGNg`RUf{zLXDp`I-yN~TvGh! zFjZ~5`rF0RX&)+w0SRZwUf~x1CqQSWX=6MX3U-~vz)0s2w+HOFzJ-6Ge{HlWd^F?y zNivckv=`SNc-XTq%ScvM_5&0ziZ&F3+0F^lCts8CUB*@RoQn63p$GU*cs;-kkF)zp z07o?M+_YO080Z49lbCCzU+JOM%tSf^B1F+JDBa_jvZpJZe@7+A3pYJidWVm{Hr~?h zQZh~eAAfmop{h-upsIodq}m5UkU`oaXhWq@Y#1CrSva-A25bd62v8m2F$zH3c1muv zW!coXKfK%bs53Tve`pY1?iS-GlX89cke1fKh!uD)BLgVZax~w%h0*<&hx_MY1#z-& zcxuF$zHS}eYY8?j!eE+?zcw~C2Q3`ZOz>qm+I*$I(K)d$an?jywI3K~0?-QM>j00R zJoLLpiTd`rYFg9PpmY#eO$KS-@E!^CyUCGgMtsG$CW#dzT zf>Hzmi1ZSgl+c2RfHXmbM0#&hlp>u31VMT)N=Fc-s~|n}UPU_6LsjXbpnk*idH;ZS z_lKR?Idk7$>)kb)s*TFly9G$xXkpN!A5ERZaS(OqD^=;HvmGTvN)I0eM2I zy61tlcbc~&4ez-Dtr#Z~FZ*jE>uOS8PVgc<1l( ztKdWuh~(Uo&K?$Y)>)>I1eljn>yKosn5yglyP;ASm)HJ@_j2awcp@DGQ=f^1@#zO=((Sv2Tl2B zghOhj$5pb3t`$mB&-ZqyU|(C+dk!PtW2zebO0kT<<$lOrFcL4(+F9LyS%y-Sg|^&3 zB`}K}QgyIdi51^dr3E`pK=y5AZq63e3z2OtVj3MndhD3svyGD_)e( z>hDl|H3lYx|F+evFW`ye_l*?Z2zf2@WxX1hO&hkJdB6waZz7)t&!*pF>~ z8VR^lF~{`F+~HrqJTcpdQ#bOlT>#6MtQ$rrP)7!Ja@i6^HjauM(!Rf z*d)nh^a??Up-)v{rTRGYUb5@e?iBUAmTHnw<9r4vb?cy9pAhXTp}EKyrrMLVtDbYK zrv*v!*1{Z|`MMGD=iZe8*(TlohQ`lr^I=M^gm4y?EGm$%MEXlLl$Qs4k)+G2t9!sp zI2n%dud#5gpk>LdAlzc@1r$L61D;<^?)bDCY z#Pr)W?fw7yB&Q9YvO^8=pu{j_>kM8-J{Z}r8{fiFI7Ip<7cKF6H4CS-Bsq-8;NyE2 zu$rq~Q2o2i6Xq^theWYZdi3r2H5Ied%oR3U1s}Ri71yy0sS<-TT}Q%a(!B2+*2z2^ zs&Y0V8Ihlrw#vxtIKhz_*ZJ${ zg8kAa54{N1Y&ln?N>~#>G5I3{=8mBAUI8Yub8^RCh5=k<1_;KX{QZqg^OjCa#&cgF zGreInQ43PF#(4#gK@p9Q`QQyjGypb@XahouilR;rK0rJS;HP;3#k>YNF0|w8+jQ}} zZv7PEG&phDLiz1*B^GVw7;N4%R;?v!_`Lh3!F}E+ZeVTHX73K~8ro=HqBnGRA`G8X zPT_G=g^68aC@G+1dNN7wPh2G_Sgh_;6xrI}v|(_EvGi7oyI$U_sVi1SX}Xl^`{AeVLp;PlF)X&7|#6Y|~@O#o3Yd_k2V72TpZ^!UIHB zZ@M`;%9Lg*&_GdqQcAoWa7ldID82?B3wV zki(aY3IMkwwd_ro8x(A~Xe4NoeoUrSm|)!{tf#(dg3MYj4O^n{F2lU{RDP7ft1rC05@9dzE@Je z2_;|10Lg&|ZK|>Zc@Rp=YOCc-fv4e!rDr!Id1#QJmdzw6Rv_9vJDc@!lqHMO9v<#B z0QU%-{hULrSuSqN+Ry}9<|{M-Xj8TtjePj&JqO44FVav>9xryffP(_2=H50cpreL2 zmvO~I7dtLTwz8QH(vr#+GW`+X|Na^SBBre%*awt6avdP*ormxnj56rT0)TF&0a?zVhwk_vyJAY~t z^s{g=!lsfa|3(2Zhv!%@NG2IVeWqy z|4})7_02W2a8ZDrW_AoG8KuV%q8}2&97L~i=eXJs(1|5ya2xy|+iJhNv?trA+aBP1 zNOhJ%O}dOLDm){#T<&bfKITRGQ!{;94L}vfhwblMxR;u8vB{b~p9S{M6=Pu;kp^#t zx~$^g_eIlW(jGJ*3(d;zV{=bPMAHKIgjoLSoC`{GS{?#!XCLiw@HyjvtycekC7#&b*i>Ct3{UQj}O*i*+RGf zbgIsCJ@>BFNBuypZ{={koCjed?P}7xXp(Q)_4kvmg)(=4`;4)NKgA+uQ}Jwn`UUwc zs+$uVcY_6pLaT`@#TW76{-^*Z(lxl`<-F8j#@uRyV!1~%9?9`$xXcG)@Up9BWM1-H z_`8mu$QEI*O6;X_V%azL&oCG1^lAqaQ18ZfB?NB4@gOPH6$%`sv4c+r8)}(e*zX^b ze+hnC2??-&!>T+d+1-@e@|pXb;NjqKTV{3d3SZ5*Ql zkmG_^h2tWVSEG*{shy4MW31UX5%+Qm%lSu{k+i=Ce!-vn7$t6vio)gZ+2@U6b}OS#f4f zpYh{c#@_lY!K)JD{~nL1z3=7t>Ku=$oKW*lCe30^-LlPilv1LY-vhF!pIf>*)%qr2 zU1<9wfAThi$)E9cpG|K}cKp#1*)Bt^m~RyQWG$aNFnTOuDekeAN4!+Pkwhtjcy? z91m6AoQ3^dr?v?FqJkA}CntSI61RnV^SMvzzFPJd>W6u&RJ*>_>U?%-cdAwCEn*mA zS1Jjb=+{gYU4dOYHGyD`zVfzPNO^K2wTIPZ{nSCEJW=%SU=9S z#AY(t+nSU++DDnP6EkRg5IapVAMv1jZqt`hyNyZBHy-e@UiHG@{XY(cTJn-v4qZXn z3ye~cUl*4ZI}F8&RP*S`**A}>tOn`dd5|IObTD9DCK&xH>wzkwk8AXv91em7q3vVo zjy`}|nQt2^dv)Kxv_1;@kXg~U^qLbb#EPNF?3Ru4&hsokw=1TVH1Ks+of^bgbyItP z=46=4cLrE_(`GL>4DKefiGNa6{mCd9+Z%1VuUG&om6bJ!JA0NV(RKD{;>-tQX5fF( zLz;WcSN5_8g0qkmDz*_#`5S{j5Eq$qewvG2Il8_4j>LD z>(aoh%xLwhN}Ym)Q7^-kY~E=Gq{ZvBO#fJ)wjp+$n-e9}Ph`1O5z^ji8lt%9Eu65_ zIGZ=|`3|+rw*bk*^5xDsUaGsh{bI+ANs zyDFZHBk$j5u}x&~yP}aEw{mhLTcWqS;O1CdZc@=Irq)a80#J;vYUKh@ zzR(=H(|IyQW7XE;K4DHJbOMTr!|uA&s;<5j+3$Ihdvo-wr>o2>|H-~(s(3{{HU|+h zLsjZ%j`VnU-ZYCdXokj57G!3Z9_)`!HqZA!`fHq)O7Dp=@8?<3oe%Beq@ALpqY+So zhuG7HQkm~!)cRU@2ea)V0z_p9T3EYa^>ZdD_*9ZV0Sb`&R{gGOuOmD7*7g}M0Zvkk zv(F?zo5hy&Wo#$SrEr2mI@sOLz(uFr!(f$Xn92VN;w+2OAV#Qu;B^ zFNM4L`djA1_2h&`oV zgcj$qxOe$#8KwW!(}J)yrk!z{bOh~v5jl#v3j9gFUkFm%m4YSvrJ-r z8}d59<2YV4*s<>|g*M2bOjFnp{Zg0Kj6g*INGL~>Qpg>)Y*sp34?HhtL>D!kO1v(O zhNb5AySu$A=KT`>7i=Cv$J=AEI>MpVktJ2N@KqW zP$V$D4WpU98y|))eA(oNaMO=K7mE(!jW(Dy58yq;Qgrx4JFw@Zj;iZUR zz?uTFMXOkS_bO+R(w>@|u+=PJRuDoVNP*3{{V6S)tXXmow7HirY&Qz^j(|5MW?Ohs z!q<{tK3A9^zt#(bAC;fnhWBd79laxgP{}8%4j-QPw?VOeaGf}-JCQOzmrO3$og$?! zHpJ{dh~MjEN}%)HgHKO zbvV*aT@IU5MCFl>_b!fox5Tpt+|z*ig2Yf#j56zA_Cfc9Vn8T>0?q$4u1weUKCTIN z8(@&QOlH`7DMKHTkZ=Bp5zsZ|$GqwVbT+MYz&Y0lfVwSC)O#sC5L3KI&i2cW6CeP5 zwi~7>+fguPO#GNg1)x*p$=TbX*?0fJ6ky;r6-16SGaU=MS5K+`p7M66Ir-q;9g2Pf z8Att)gX_wHz0re3nigu=Z5#w%b5{*)e;#BdzemN)uRlSaDyV>Z?FOgvPr9%|7-Saq zC%VN!+v@E#$L7g)Lji3o z7S*u(obb28oB$gjh#kPi1~%fD(xidA4qu`T(a#Qm8=!k( z@N7gC1@qSFCw_nuF$Ll|1++(@3XDul*`i*6Jb`*90pEsZ)AQX5tk0Y7V?*^DIC0dz%a>rpZ2GIfSZTtkxadLE5PKd1cB zvX0+2iFd}qSrYt2C0|I`8lC1DD(qesP@i^NPtRfxOfh1Z)`)*W{~FslD(c%A`Rq<(&R(wuP+2z5m1VflhQD|B+}I2GHxd$_ z%zF6OyJ+w`Z>zgl!u=tYV2|}1HFWvDCkDn;SP5KhLsHPUNY63>6f-+59oTWR49GG? zZogV12LMeJADWB?xVi_J9>1ZX1B0KO_1^91da^_S{n*6OOM#qGH-9Y;pz+!;Hh@xs zi~2)?no*t-4i8)7LdY$JYxjnR>ooK0H7|i&Pm`d*6OcW-Jv1XJPe3cJsVMn!%1lkb z**W2MfZ}j!`avhezn5!NowmN=$WT>jB|r9j0)o8(&C_F{- zY>Nh=lYi5bnw+Y7o!lJfV>dSxG!x@dm*FA%MZ(`W&8VlxxEih~uO-^Wf0t#39j8Rh zznF4;g)_@y{wD)EJ8fWnC=p>GeF-uj;`v3n-S6KI#pV7lVYIuLuV#TeK;xgEOoda( z=K)_=YL{Dce?KxQajt+bei4WKB~jufeQtc9fD#hoZf_7@(NaZ@WnR_bMxgUm-*JO) zytr>Z#+hqMh9lc&BLna~{=%9-BqyrBWVjskTmg(eNQ#SDQ&$?l!Vl3~NyIlb@alSV z>)?NP0Sp7GEaTSZ;_QwZ@u-r(GS!OL>Ia=isqlmtyV#u~iKK9sEe%u&?L;YtY0J=Q zk0At&alI?IziixOUB6nhmZ)pZ^1_vQBRK{aG}wVW$n)=dycOtj!GyjU6r0UT37W5z zvG~1M@ux0`EX?oQPWESu3hP+blcAZc!tmOl6u-r4t8UzYPvYa~g(|y8(an^*-#_%J zBT)3&#!H4|0)irz(emuSQjCf-to^ku2=t$Y3PrAob97NfcABi)>vzbcYXuZiG1sw!C5bf<4zX&bb~dtK((EVm(`6!rR)$4~&AZ%tU+b5FCXLBA@Du zjzv0s*%#if;s3$!Ej%D8I8sy7`CzL6v-tKvAXti~i2QEhmeYzU@O}hW-NBd}p?G4Q zTrVC+WDNYhLbxZm*cB=exy~uoKk}La?+wnR1 zTQS659Bga;Ep&FlFXuQ8dT9DGKsxPa|Fc07y#n zwu)g_ovuTYQ;JVnVe+`N3unEx^p5RRr!8U^uixsjb~p55$6dDzgr2ERFKW3t`n660 z&&54Pnlin}uOjq3a!Dj+}?nb{Yr`-TZho+kD?TTBLq5lU#gkrn^ literal 0 HcmV?d00001 diff --git a/src/styles/_global-styles.scss b/src/styles/_global-styles.scss index 147bea3e6e4..749658ad36d 100644 --- a/src/styles/_global-styles.scss +++ b/src/styles/_global-styles.scss @@ -24,7 +24,7 @@ body { } #main-content { - z-index: var(--ds-main-z-index); + // z-index: var(--ds-main-z-index); // ARREGLA HOME | VER QUÉ HACE CON EL RESTO flex: 1 1 100%; } diff --git a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html index acab8ab95b4..bb9076f9ec3 100644 --- a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html +++ b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html @@ -1,20 +1,36 @@ - - + - + diff --git a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.scss b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.scss index a0b9550b1d6..064daeaa991 100644 --- a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.scss +++ b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.scss @@ -1,5 +1,6 @@ .nav-breadcrumb { background-color: var(--ds-breadcrumb-bg); + border-top: 3px #42a5f5 solid; } .breadcrumb { diff --git a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.ts b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.ts index b4f72f32afc..c7cb7ef4586 100644 --- a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.ts +++ b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.ts @@ -4,7 +4,7 @@ import { NgIf, NgTemplateOutlet, } from '@angular/common'; -import { Component } from '@angular/core'; +import { Component, HostListener } from '@angular/core'; import { RouterLink } from '@angular/router'; import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; import { TranslateModule } from '@ngx-translate/core'; @@ -25,4 +25,18 @@ import { VarDirective } from '../../../../app/shared/utils/var.directive'; imports: [VarDirective, NgIf, NgTemplateOutlet, NgFor, RouterLink, NgbTooltipModule, AsyncPipe, TranslateModule], }) export class BreadcrumbsComponent extends BaseComponent { + isResponsive: boolean = false; + + @HostListener('window:resize', ['$event']) + onResize(event) { + this.checkResponsive(); + } + + ngOnInit() { + this.checkResponsive(); + } + + checkResponsive() { + this.isResponsive = window.innerWidth < 768; // Ajusta el ancho según tus necesidades + } } diff --git a/src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.html b/src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.html new file mode 100644 index 00000000000..e84ee4a6bd1 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.html @@ -0,0 +1,23 @@ + + diff --git a/src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.scss b/src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.scss new file mode 100644 index 00000000000..ddce8e16ff3 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.scss @@ -0,0 +1,32 @@ +.apa-citation-container { + border: 1px dashed #cccccc; + padding: 10px; + border-radius: 5px; + background-color: #f9f9f9; +} + +.apa-citation { + font-style: italic; +} + +.copy-button-container { + display: flex; + justify-content: flex-end; + padding-top: .25rem; + gap: .25rem; +} + +.copy-text { + font-size: .75rem; + color: #666666; +} + +.copyButton { + cursor: pointer; + font-size: 1rem; + transition: color 0.3s; +} + +.copyButton:hover { + color: #42a5f5; +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.ts b/src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.ts new file mode 100644 index 00000000000..52fbbc51bd1 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/citation/sedici-citation.component.ts @@ -0,0 +1,66 @@ +import { CommonModule } from '@angular/common'; +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'sedici-citation', + templateUrl: './sedici-citation.component.html', + styleUrls: ['./sedici-citation.component.scss'], + standalone: true, + imports: [CommonModule], +}) +export class SediciCitationComponent implements OnInit { + + @ViewChild('elementContentToCopy') elementContentToCopy: ElementRef; + citation: string; + citationType: string = 'apa'; + + citationOptions = [ + { value: 'apa', label: 'APA' }, + { value: 'chicago', label: 'Chicago' }, + { value: 'mla', label: 'MLA' }, + ]; + + constructor(public activeModal: NgbActiveModal) {} + + ngOnInit(): void { + this.generateCitation(this.citationType); + } + + generateCitation(type: string): void { + if (type === 'apa') { + this.citation = 'Melville, H. & Schaeffer, M. (1922) Moby Dick. New York, Dodd, Mead and company. [Pdf] Retrieved from the Library of Congress, https://www.loc.gov/item/22022440/'; + } else if (type === 'chicago') { + this.citation = 'Melville, Herman, and Mead Schaeffer. Moby Dick. New York, Dodd, Mead and company, 1922. Pdf. https://www.loc.gov/item/22022440/'; + } else { + this.citation = 'Melville, Herman, and Mead Schaeffer. Moby Dick. New York, Dodd, Mead and company, 1922. Pdf. Retrieved from the Library of Congress, '; + } + } + + onCitationTypeChange(event: Event): void { + const selectElement = event.target as HTMLSelectElement; + this.citationType = selectElement.value; + this.generateCitation(this.citationType); + } + + copyToClipboard(el: HTMLDivElement, id: string) { + if (navigator.clipboard) { + navigator.clipboard.writeText(el.innerText).then(() => { + document.getElementById(id).classList.remove('fa-copy'); + document.getElementById(id).classList.add('fa-check'); + setTimeout(() => { + document.getElementById(id).classList.remove('fa-check'); + document.getElementById(id).classList.add('fa-copy'); + }, 1000); + }, (error) => { + console.log(error); + }); + } else { + console.log('Browser do not support Clipboard API'); + } + } + + close() { + this.activeModal.close(); + } +} diff --git a/src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.html b/src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.html new file mode 100644 index 00000000000..62f8d668bee --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.html @@ -0,0 +1,3 @@ +
+ {{ getContextInfo() }} +
\ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.scss b/src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.scss new file mode 100644 index 00000000000..b43aee83505 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.scss @@ -0,0 +1,3 @@ +.context-info { + margin-bottom: .5rem; +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.ts b/src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.ts new file mode 100644 index 00000000000..cd1af459270 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/context/sedici-context.component.ts @@ -0,0 +1,89 @@ +import { Component, Input } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { DSpaceObject } from 'src/app/core/shared/dspace-object.model'; + +@Component({ + selector: 'sedici-context', + standalone: true, + imports: [CommonModule], + templateUrl: './sedici-context.component.html', + styleUrls: ['./sedici-context.component.scss'] +}) +export class SediciContextComponent { + + @Input() object: DSpaceObject; + + getThesisInfo(): string { + const thesisDegreeName = this.object.firstMetadataValue('thesis.degree.name'); + const thesisDegreeGrantor = this.object.firstMetadataValue('thesis.degree.grantor'); + + if (thesisDegreeName && thesisDegreeGrantor) { + return `${thesisDegreeName}; ${thesisDegreeGrantor}`; + } else { + return ''; + } + } + + getBookInfo(): string { + const bookTitle = this.object.firstMetadataValue('sedici.relation.bookTitle'); + if (bookTitle) { + return bookTitle; + } + return ''; + } + + getJournalInfo(): string { + const journalTitle = this.object.firstMetadataValue('sedici.relation.journalTitle'); + const journalVolumeAndIssue = this.object.firstMetadataValue('sedici.relation.journalVolumeAndIssue'); + + if (journalTitle && journalVolumeAndIssue) { + return `${journalTitle}; ${journalVolumeAndIssue}`; + } else if (journalTitle) { + return journalTitle; + } + return ''; + } + + getEventInfo(): string { + const event = this.object.firstMetadataValue('sedici.relation.event'); + if (event) { + return event; + } + return ''; + } + + getCicloInfo(): string { + const ciclo = this.object.firstMetadataValue('sedici.relation.ciclo'); + if (ciclo) { + return ciclo; + } + return ''; + } + + getContextInfo(): string { + const thesis = this.getThesisInfo(); + if (thesis) { + return thesis; + }; + const bookTitle = this.getBookInfo(); + if (bookTitle) { + return bookTitle; + }; + const journal = this.getJournalInfo(); + const event = this.getEventInfo(); + if (journal || event) { + if (journal && event) { + return `${journal} | ${event}`; + } else if (journal) { + return journal; + } else { + return event; + }; + }; + const ciclo = this.getCicloInfo(); + if (ciclo) { + return ciclo; + }; + return ''; + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts b/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts index 64483039565..75831660b47 100644 --- a/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts +++ b/src/themes/custom/app/item-page/simple/field-components/language-metadata-values/sedici-language-metadata-values.component.ts @@ -29,6 +29,8 @@ export class SediciLanguageMetadataValuesComponent extends MetadataValuesCompone this.languageString = 'Inlgés'; } else if (language === 'pt') { this.languageString = 'Portugués'; + } else if (language === 'de') { + this.languageString = 'Alemán'; } } } diff --git a/src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.html b/src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.html new file mode 100644 index 00000000000..79d02ff9e85 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.html @@ -0,0 +1,36 @@ + + + diff --git a/src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.scss b/src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.scss new file mode 100644 index 00000000000..2e6722960f7 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.scss @@ -0,0 +1,68 @@ +.share-modal-content { + padding: 20px; +} + +.link-bar { + display: flex; + align-items: center; + margin-bottom: 1rem; +} + +.share-link { + flex: 1; + padding: .25rem; + border: 1px solid #ccc; + border-radius: 4px; + outline: none; +} + +#copyButton { + margin-left: 5px; + padding: 5px 10px; + border: none; + background-color: #007bff; + color: white; + border-radius: 4px; + cursor: pointer; + outline: none; +} + +#copyButton:hover { + background-color: #0056b3; +} + +.copy-success-message { + color: green; + margin-left: 10px; +} + +.social-buttons { + display: flex; + justify-content: space-around; + padding: 10px 0; +} + +.social-icon-button { + background: none; + border: none; + cursor: pointer; + padding: 0; + outline: none; +} + +.social-icon-button i { + font-size: 3rem; + border-radius: 50%; + transition: transform 0.2s ease; +} + +.social-icon-button:hover i { + transform: scale(1.1); +} + +/* Colores específicos para cada red social */ +.fa-researchgate { color: #63e6be; } +.fa-mendeley { color: #c70039; } +.fa-whatsapp { color: #25d366; } +.fa-linkedin { color: #0077b5; } +.fa-x-twitter { color: black; } diff --git a/src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.ts b/src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.ts new file mode 100644 index 00000000000..fd3a1696228 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/share-buttons/sedici-share-buttons.component.ts @@ -0,0 +1,32 @@ +import { CommonModule } from '@angular/common'; +import { Component, ViewChild, ElementRef, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'sedici-share-buttons', + templateUrl: './sedici-share-buttons.component.html', + styleUrls: ['./sedici-share-buttons.component.scss'], + standalone: true, + imports: [CommonModule], +}) +export class SediciShareButtonsComponent { + + @ViewChild('elementContentToCopy') elementContentToCopy: ElementRef; + @Input() link: string; + copySuccess: boolean = false; + + constructor(public activeModal: NgbActiveModal) {} + + copyToClipboard(element: HTMLInputElement) { + navigator.clipboard.writeText(element.value).then(() => { + this.copySuccess = true; + setTimeout(() => this.copySuccess = false, 2000); // Ocultar el mensaje después de 2 segundos + }).catch(err => { + console.error('Error al copiar el texto: ', err); + }); + } + + close() { + this.activeModal.close(); + } +} diff --git a/src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.html b/src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.html new file mode 100644 index 00000000000..b6312181a7b --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.html @@ -0,0 +1 @@ +
\ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.scss b/src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.ts b/src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.ts new file mode 100644 index 00000000000..bf29b64acd6 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/usage-stats copy/lrw-lareferencia.component.ts @@ -0,0 +1,86 @@ +import { AfterViewInit, Component, ElementRef, Input, ViewChild } from '@angular/core'; +import { Item } from 'src/app/core/shared/item.model'; +import { of } from 'rxjs'; + +@Component({ + selector: 'lib-lrw-lareferencia', + templateUrl: './lrw-lareferencia.component.html', + styleUrls: ['./lrw-lareferencia.component.scss'], + standalone: true, +}) +export class LrwLAReferenciaComponent implements AfterViewInit { + + @Input() item!: Item; + + @ViewChild('laRefernecia') laReferencia!: ElementRef; + + @Input() version: string = '1.1.5'; + @Input() sampleIdentifierOAI! : string; + @Input() identifierHandle? : string = '/handle/[0-9.]+/([0-9]+)/?'; + @Input() nodoName! : string; + @Input() repositoryName! : string; + @Input() contryCode! : string; + @Input() identifierMetaField? : string; + @Input() nationalSource! : string; + @Input() repositorySource! : string; + + show$ = of(false); + + ngOnInit(): void { + if ( + !!this.version && + !!this.sampleIdentifierOAI && + !!this.nodoName && + !!this.repositoryName && + !!this.contryCode && + !!this.nationalSource && + !!this.repositorySource + ) { + this.show$ = of(true); + } + } + + ngAfterViewInit(): void { + + this.show$ + .subscribe(show => { + if (show) { + const script = document.createElement('script'); + script.innerHTML = ` + (function(w, d, s, o, p, f, js, fjs) { + w[o] = w[o] || function() { + (w[o][p] = w[o][p] || {}); + Object.assign(w[o][p], arguments[0] || {}); + }; + js = d.createElement(s), fjs = d.getElementsByTagName(s)[0]; + js.id = o; + js.src = f; + js.async = 1; + fjs.parentNode.insertBefore(js, fjs); + }(window, document, 'script', 'lrw', 'parameters', 'https://cdn.jsdelivr.net/gh/lareferencia/lrw@${this.version}/dist/lrw.js')); + lrw({ + widget_div_id: 'usage-stats', + identifier: '${this.sampleIdentifierOAI}:${this.item.handle}', + ${this.identifierMetaField ? 'identifier_meta_field:"' + this.identifierMetaField + '",' : ''} + identifier_prefix: '${this.sampleIdentifierOAI}/${this.item.handle}', + ${this.identifierHandle ? 'identifier_regex:"' + this.identifierHandle + '",' : ''} + event_labels: { + 'view': 'Vistas', + 'download': 'Descargas', + 'outlink': 'Enlaces' + }, + scope_labels: { + 'L': 'LA Referencia', + 'N': '${this.nodoName}', + 'R': '${this.repositoryName}' + }, + country: '${this.contryCode}', + national_source: 'SITEID::${this.nationalSource}', + repository_source: 'OPENDOAR::${this.repositorySource}' + });`; + this.laReferencia.nativeElement.appendChild(script); + } + }); + + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.html b/src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.html new file mode 100644 index 00000000000..5ff6e7edaea --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.html @@ -0,0 +1,11 @@ + + \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.scss b/src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.scss new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.ts b/src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.ts new file mode 100644 index 00000000000..bf85dec214f --- /dev/null +++ b/src/themes/custom/app/item-page/simple/field-components/viewer/sedici-viewer.component.ts @@ -0,0 +1,20 @@ +import { CommonModule } from '@angular/common'; +import { Component, OnInit, Input } from '@angular/core'; +import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; + +@Component({ + selector: 'sedici-viewer', + templateUrl: './sedici-viewer.component.html', + styleUrls: ['./sedici-viewer.component.scss'], + standalone: true, + imports: [CommonModule], +}) +export class SediciViewerComponent { + @Input() content: any; + + constructor(public activeModal: NgbActiveModal) {} + + close() { + this.activeModal.close(); + } +} diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html index ca17986d71f..c9fafd86966 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.html @@ -1,39 +1,133 @@ -
+
-
+
{{ getFileExtension(file.name) }}
-
-
- {{ getFileDescription(file) }} -
- -
-
+
+ {{ getFileDescription(file) }} +
+
+ +
+
+
-
+ + +
+
+ +
+ + +
+
+ {{ dsoNameService.getName(selectedFile) }} +
+
+

Archivos en el ZIP:

+
    + +
+ +
    +
  • + + {{ key }} + + + + + + + + + + + + + + + {{ key }} + +
  • +
+
+
+
+ {{ dsoNameService.getName(selectedFile) }} +
+
+
+ +
- -
+ +
+
+ +
+ + +
+
{{ dsoNameService.getName(selectedFile) }}
- - SOY UNA IMAGEN {{ dsoNameService.getName(selectedFile) }} - +
+

Archivos en el ZIP:

+
    + +
+ +
    +
  • + + {{ key }} + + + + + + + + + + + + + + + {{ key }} + +
  • +
+
+
+
+ {{ dsoNameService.getName(selectedFile) }} +
- - - {{ dsoNameService.getName(selectedFile) }} -
- preview + ZONA DE PREVIEW
-
\ No newline at end of file +
+ + + Lamentablemente el ítem seleccionado no tiene archivos para ver/descargar. Si lo desea, puede contactar directamente con el autor. En caso de ser el autor, es bienvenido a subir los archivos correspondientes para así poder completar el registro. + \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss index 444d7dbc8b9..d85c3fcb7b6 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.scss @@ -1,17 +1,10 @@ .content-container { - display: flex; - flex-direction: row; - - .col-3 { - padding-left: 10px; - padding-right: 10px; - } .file-list { flex: 1; display: flex; flex-direction: column; - max-height: 500px; + max-height: 85vh; overflow-y: auto; .row { @@ -19,11 +12,13 @@ } .file-item { - display: flex; align-items: center; - padding: 5px; + padding: .5rem .25rem; cursor: pointer; - border-bottom: 1px solid #e0e0e0; + + &.selected-file { + background-color: #f5f5f5; + } &:hover { background-color: #f5f5f5; @@ -32,7 +27,6 @@ .file-icon { display: flex; justify-content: center; - background-color: #333; color: #fff; border-radius: 4px; @@ -42,40 +36,23 @@ } } - .file-info { - display: flex; - flex-direction: column; - - .row { - align-items: center; - - .file-name { - font-size: .75rem; - overflow: hidden; // Oculta el texto que se desborda - text-overflow: ellipsis; // Agrega puntos suspensivos al texto que se desborda - display: -webkit-box; // Necesario para line-clamp - -webkit-box-orient: vertical; // Necesario para line-clamp - -webkit-line-clamp: 2; // Limita el texto a 2 líneas - line-clamp: 2; // Limita el texto a 2 líneas - } - - .file-size { - font-size: .75rem; - text-align: right; - } - - .download-btn { - background-color: #fff; - border: 1px solid #ccc; - padding: 5px 10px; - cursor: pointer; - border-radius: 4px; - - &:hover { - background-color: #e0e0e0; - } - } - } + .file-name { + font-size: .75rem; + overflow: hidden; // Oculta el texto que se desborda + text-overflow: ellipsis; // Agrega puntos suspensivos al texto que se desborda + display: -webkit-box; // Necesario para line-clamp + -webkit-box-orient: vertical; // Necesario para line-clamp + -webkit-line-clamp: 2; // Limita el texto a 2 líneas + line-clamp: 2; // Limita el texto a 2 líneas + } + + .download-button{ + padding-left: 10px; + padding-right: 10px; + } + + .preview-button{ + padding-left: 5px; } } } @@ -84,25 +61,62 @@ position: relative; padding-right: 0px; padding-left: 0px; + } - .preview-image { - width: 100%; - height: 500px; + .no-preview { + width: 100%; + height: 85vh; + display: flex; + justify-content: center; + align-items: center; + border: 2px solid #ccc; + background-color: #f5f5f5; + + span { + font-size: 1.5rem; + color: #aaa; } + } +} - .no-preview { - width: 100%; - height: 500px; - display: flex; - justify-content: center; - align-items: center; - border: 2px solid #ccc; - background-color: #f5f5f5; +.preview-image { + max-width: 85vh; + max-height: 85vh; - span { - font-size: 1.5rem; - color: #aaa; - } - } + @media screen and (max-width: map-get($grid-breakpoints, md)) { + width: 100%; + height: 100%; } } + +.loading-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + background-color: rgba(255, 255, 255, 0.8); + z-index: 10; +} + +.loading-spinner { + font-size: 2rem; + color: #333; +} + +ul { + list-style-type: none; + margin-left: 20px; + padding-left: 0; + + li { + margin: 5px 0; + } + + i { + margin-right: 8px; + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts index a787b39c779..d3d83a8d96f 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/content-files.component.ts @@ -1,5 +1,5 @@ import { Component, Input, Inject } from '@angular/core'; -import { NgFor, NgIf, NgStyle } from '@angular/common'; +import { NgFor, NgIf, NgStyle, NgClass, NgSwitch, NgSwitchCase, NgSwitchDefault, NgTemplateOutlet } from '@angular/common'; import { Item } from 'src/app/core/shared/item.model'; import { BitstreamDataService } from 'src/app/core/data/bitstream-data.service'; import { APP_CONFIG, AppConfig } from 'src/config/app-config.interface'; @@ -8,6 +8,14 @@ import { FileSizePipe } from 'src/app/shared/utils/file-size-pipe'; import { DSONameService } from 'src/app/core/breadcrumbs/dso-name.service'; import { SediciFileDownloadLinkComponent } from './sedici-file-download-link.component'; +import { NgxDocViewerModule } from 'ngx-doc-viewer'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { SediciViewerComponent } from '../../field-components/viewer/sedici-viewer.component'; + +import { ChangeDetectorRef } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import * as JSZip from 'jszip'; + @Component({ selector: 'content-files', styleUrls: ['./content-files.component.scss'], @@ -17,8 +25,15 @@ import { SediciFileDownloadLinkComponent } from './sedici-file-download-link.com NgFor, NgIf, NgStyle, + NgClass, + NgSwitch, + NgSwitchCase, + NgSwitchDefault, + NgTemplateOutlet, FileSizePipe, SediciFileDownloadLinkComponent, + NgxDocViewerModule, + SediciViewerComponent, ], }) export class ContentFilesComponent { @@ -27,24 +42,66 @@ export class ContentFilesComponent { primaryBitsreamId: string; previewUrl: string; + isLoading = true; + + onDocLoaded() { + this.isLoading = false; + } + + openModal(content: any) { + const modalRef = this.modalService.open(SediciViewerComponent, { size: 'lg' }); + modalRef.componentInstance.content = content; + } + files: Bitstream[] = []; constructor( protected bitstreamDataService: BitstreamDataService, public dsoNameService: DSONameService, @Inject(APP_CONFIG) protected appConfig: AppConfig, + private modalService: NgbModal, + private http: HttpClient, + private cdr: ChangeDetectorRef ) {} selectedFile: Bitstream | null = null; selectFile(file: Bitstream) { this.selectedFile = file; - this.previewUrl = file._links.content.href; // Solo para probar la vista de imágenes + const extension = this.getFileExtension(file.name); + this.isLoading = true; + + switch (extension) { + case 'jpg': + case 'jpeg': + case 'png': + case 'gif': + case 'bmp': + case 'webp': + this.previewUrl = file._links.content.href; + this.isLoading = false; + break; + case 'zip': + this.previewUrl = file._links.content.href; + this.loadZipFromUrl(this.previewUrl); + this.isLoading = false; + break; + case 'pdf': + case 'doc': + case 'docx': + case 'csv': + // Harcodeo una URL de vista previa para probar + this.previewUrl = "http://sedici.unlp.edu.ar/bitstream/handle/10915/59633/Cap%C3%ADtulo_1_-_Las_inundaciones_en_la_Regi%C3%B3n_Capital_-_Cartograf%C3%ADa_tem%C3%A1tica_para_el_planeamiento.CISAUA%2000%20Original%20Informe%20Final%20-%20PIO-%2030-3-17%20C009.pdf-PDFA.pdf?sequence=3&isAllowed=y"; + break; + default: + this.previewUrl = file._links.content.href; + break; + } } getFileExtension(fileName: string): string { const parts = fileName.split('.'); - return parts.length > 1 ? parts.pop() : ''; + return (parts.length > 1 ? parts.pop() : '').toLowerCase(); } stringToHexColor(str: string): string { @@ -72,12 +129,6 @@ export class ContentFilesComponent { return { 'background-color': color }; } - isImage(file: Bitstream): boolean { - const imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp']; - const extension = this.getFileExtension(file.name).toLowerCase(); - return imageExtensions.includes(extension); - } - getFileDescription(file: Bitstream): string { return file.metadata['dc.description']?.[0]?.value || this.dsoNameService.getName(file) ; } @@ -87,6 +138,65 @@ export class ContentFilesComponent { this.getAllPages(); } + zipContent: { name: string, type: 'file' | 'folder' }[] = []; // Lista para mostrar los archivos dentro del ZIP y su tipo + zipContentTree; + + async loadZipFromUrl(url: string) { + try { + // Descargar el archivo ZIP como Blob + const zipBlob = await this.http.get(url, { responseType: 'blob' }).toPromise(); + + // Cargar el archivo ZIP con JSZip + const loadedZip = await JSZip.loadAsync(zipBlob); + + // Obtener y listar los nombres de los archivos en el ZIP + this.zipContent = Object.keys(loadedZip.files).map(fileName => { + const file = loadedZip.files[fileName]; + return { + name: fileName, + type: fileName.endsWith('/') ? 'folder' : 'file', // Determina si es un archivo o una carpeta + }; + }); + + const files = Object.keys(loadedZip.files); + this.zipContentTree = this.buildTree(files); + + // Forzar la actualización de la vista + this.cdr.detectChanges(); + } catch (error) { + console.error('Error al cargar el archivo ZIP:', error); + } + } + + // Convierte una lista de rutas en un árbol jerárquico + buildTree(filePaths: string[]): any { + const tree: any = {}; + + filePaths.forEach((filePath) => { + const parts = filePath.split('/').filter((part) => part.trim() !== ''); + let currentLevel = tree; + + parts.forEach((part, index) => { + if (!currentLevel[part]) { + currentLevel[part] = index === parts.length - 1 ? null : {}; + } + currentLevel = currentLevel[part]; + }); + }); + + return tree; + } + + // Devuelve las claves de un objeto + objectKeys(obj: any): string[] { + return Object.keys(obj); + } + + // Determina si un nodo es una carpeta + isFolder(node: any): boolean { + return node !== null && typeof node === 'object'; + } + private getPrimaryBitstreamId() { this.bitstreamDataService.findPrimaryBitstreamByItemAndName(this.object, 'ORIGINAL', true, true).subscribe((primaryBitstream: Bitstream | null) => { if (!primaryBitstream) { diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/expandable-metadata.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/expandable-metadata.ts new file mode 100644 index 00000000000..95a56441191 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/expandable-metadata.ts @@ -0,0 +1,100 @@ +import { Component, Input, ElementRef, Renderer2, AfterViewInit, ViewChild } from '@angular/core'; +import { + NgIf, + NgClass, +} from '@angular/common'; + +@Component({ + selector: 'app-expandable-metadata', + standalone: true, + template: ` +
+ +
+ +
+
+
+ {{ expanded ? '\u2303' : '\u2304' }} +
+
+ `, + styles: [` + div.truncated { + position: relative; + overflow: hidden; + max-height: calc(2em * 10); /* Altura máxima (10 líneas) */ + } + + div.truncated::after { + content: ""; /* Degradado para dar la sensación de texto desapareciendo */ + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 2em; /* Ajusta la altura del degradado */ + background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, #e9ecef 100%); + pointer-events: none; + } + + .button-container { + display: flex; + flex-direction: column; /* Cambié de row a column para colocar la flecha debajo */ + align-items: center; /* Centra la flecha debajo de la línea */ + margin-top: .5rem; + cursor: pointer; + color: #6c757d; /* Color gris más neutro para el icono */ + } + + .button-container .line { + width: 100%; /* Asegura que la línea ocupe todo el ancho */ + height: 1px; + background-color: #ccc; /* Color gris más suave para la línea */ + } + `], + imports: [ + NgIf, + NgClass, + ], +}) +export class ExpandableMetadataComponent implements AfterViewInit { + @ViewChild('containerRef', { static: false }) containerRef!: ElementRef; + + @Input() maxLines = 10; // Número máximo de líneas + isTruncated = false; + expanded = false; + + constructor(private el: ElementRef, private renderer: Renderer2) {} + + ngAfterViewInit() { + this.checkTruncation(); + } + + checkTruncation() { + const container = this.containerRef.nativeElement; + + const lineHeight = parseFloat(getComputedStyle(container).lineHeight); + const maxHeight = lineHeight * this.maxLines; + + // Verifica si se necesita truncar + if (container.scrollHeight > maxHeight) { + this.isTruncated = true; + } + } + + toggleExpand() { + this.expanded = !this.expanded; + const container = this.containerRef.nativeElement; + this.renderer.setStyle(container, 'max-height', this.expanded ? 'none' : `calc(2em * ${this.maxLines})`); + + // Desplazarse al principio del componente cuando se cierra + if (!this.expanded) { + this.scrollToTop(); + } + } + + scrollToTop() { + // Mueve el contenedor hacia la parte superior + this.el.nativeElement.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } +} diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html index a027e335ab7..5b8ad0cdf8c 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/full-item.component.html @@ -1,49 +1,85 @@
+ [label]="'sedici.item.page.dc.date.issued'"> + [label]="'sedici.item.page.dc.date.created'"> + [label]="'sedici.item.page.sedici.date.exposure'"> + [label]="'sedici.item.page.dc.description.filiation'"> + [label]="'sedici.item.page.sedici.identifier.expediente'"> + [label]="'sedici.item.page.mods.location'"> + [separator]="'; '" + [label]="'sedici.item.page.sedici.subject.ford'"> + [label]="'sedici.item.page.dc.language'"> + + + + + + + + + + + + + + + + + + + + + + [label]="'sedici.item.page.dc.date.accessioned'"> diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html index 88677339c83..8b157751a80 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.html @@ -1,14 +1,16 @@ - -
- - - +
+
+ + +

+
+
- -

-
- \ No newline at end of file +
+ +
+
\ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.scss index 8a9908e15e0..5b481435702 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/language-switcher.component.scss @@ -1,17 +1,45 @@ -.container { - margin-top: 10px; - margin-bottom: 10px; +.language-switcher-wrapper { + display: flex; + padding-bottom: 1rem; } -button { - margin-right: 5px; +.language-sidebar { + display: flex; + flex-direction: column; + padding: 1rem 0px; } - -button.active { + +.language-sidebar button { + width: 40px; + margin-right: -40px; + background-color: #ffffff; + border: none; + color: #666666; + cursor: pointer; + transition: background-color 0.3s, color 0.3s, font-weight 0.3s; + opacity: .5; +} + +.language-sidebar button.active { + border: 1px solid #e0e0e0; + border-left: none; + color: #333333; font-weight: bold; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + opacity: 1; +} + +.language-switcher-container { + padding: 1rem 1rem 0 1rem;; + box-shadow: 0px 4px 10px rgba(0, 0, 0, 0.1); + border-radius: 0.5rem; + background-color: #ffffff; + width: 100%; } .abstract-text { + font-size: .75rem; white-space: pre-wrap; text-align: justify; } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html index 7c67b0a619a..1e369e632e2 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.html @@ -9,7 +9,6 @@ - - {{ (bitstream?.sizeBytes) | dsFileSize:0 }} + {{ adaptFileSize((bitstream?.sizeBytes) | dsFileSize:0) }} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss index cad1f3bf103..cccd53d4ba6 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.scss @@ -1,16 +1,12 @@ .download-btn { background-color: #fff; border: 1px solid #ccc; - padding: 3px 8px; cursor: pointer; border-radius: 4px; font-size: .625rem; + width: 100%; &:hover { background-color: #e0e0e0; } - - .pr-1 { - padding-right: 5px; - } } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts index ea01a8a110b..5346a0db3a9 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-file-download-link.component.ts @@ -27,4 +27,23 @@ import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap'; }) export class SediciFileDownloadLinkComponent extends FileDownloadLinkComponent implements OnInit { + adaptFileSize (size: string): string { + if (size.includes("KB")) { + const kbValue = parseFloat(size.replace("KB", "").trim()); // Extraer el valor numérico en KB + const mbValue = kbValue / 1024; // Convertir a MB y formatear a 1 decimal + const roundedMbValue = Math.round(mbValue * 10) / 10; // Redondear a 1 decimal + const formattedMbValue = roundedMbValue % 1 === 0 ? roundedMbValue.toFixed(0) : roundedMbValue.toFixed(1); // Verificar si es un valor entero + return `${formattedMbValue} MB`; + } else if (size.includes("MB")) { + const mbValue = parseFloat(size.replace("MB", "").trim()); // Extraer el valor numérico en MB + if (mbValue >= 1000) { // Si el valor en MB es mayor o igual a 1000, convertir a GB + // const gbValue = mbValue / 1000; + // const roundedGbValue = Math.round(gbValue * 10) / 10; + // const formattedGbValue = roundedGbValue % 1 === 0 ? roundedGbValue.toFixed(0) : roundedGbValue.toFixed(1); + // return `${formattedGbValue} GB`; + return "1 GB"; // Todavía en SEDICI no hay archivos que superen 1 GB, pero queda plateado a futuro el método + } + } + return size; + } } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.html new file mode 100644 index 00000000000..51de2f13c88 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.html @@ -0,0 +1,156 @@ +
+
+ +
+
+
+
+

No Copyright

+ +
+ +
+ This work has been identified as being free of known restrictions under copyright law, including all related and neighboring rights. +
+
+ +
+
+ You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission. See Other Information below. +
+
+ +

Other Information

+ +
+
+ The work may not be free of known copyright restrictions in all jurisdictions. +
+
+ +
+
+ Persons may have other rights in or related to the work, such as patent or trademark rights, and others may have rights in how the work is used, such as publicity or privacy rights. +
+
+ +
+
+ In some jurisdictions moral rights of the author may persist beyond the term of copyright. These rights may include the right to be identified as the author and the right to object to derogatory treatments. +
+
+ +
+
+ Unless expressly stated otherwise, the person who identified the work makes no warranties about the work, and disclaims liability for all uses of the work, to the fullest extent permitted by applicable law. +
+
+ +
+
+ When using or citing the work, you should not imply endorsement by the author or the person who identified the work. +
+
+
+ + +
+

No Copyright

+ +
+ +
+ The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. +
+
+ +
+
+ You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission. See Other Information below. +
+
+ +

Other Information

+ +
+
+ In no way are the patent or trademark rights of any person affected by CC0, nor are the rights that other persons may have in the work or in how the work is used, such as publicity or privacy rights. +
+
+ +
+
+ Unless expressly stated otherwise, the person who associated a work with this deed makes no warranties about the work, and disclaims liability for all uses of the work, to the fullest extent permitted by applicable law. +
+
+ +
+
+ When using or citing the work, you should not imply endorsement by the author or the affirmer. +
+
+
+
+ + +
+

{{ 'sedici.license.free' | translate }}

+ +
+
+ {{ 'sedici.license.share' | translate }} - {{ 'sedici.license.share.description' | translate }} +
+
+ +
+
+ {{ 'sedici.license.adapt' | translate }} - {{ 'sedici.license.adapt.description' | translate }} +
+
+ +
+
+ {{ 'sedici.license.description' | translate }} +
+
+ +

{{ 'sedici.license.terms' | translate }}

+ +
+ +
+ {{ 'sedici.license.attribution' | translate }} - {{ 'sedici.license.attribution.description' | translate }} +
+
+ +
+ +
+ {{ 'sedici.license.nonCommercial' | translate }} - {{ 'sedici.license.nonCommercial.description' | translate }} +
+
+ +
+ +
+ {{ 'sedici.license.noDerivateWorks' | translate }} - {{ 'sedici.license.noDerivateWorks.description' | translate }} +
+
+ +
+ +
+ {{ 'sedici.license.shareAlike' | translate }} - {{ 'sedici.license.shareAlike.description' | translate }} +
+
+ +
+
+ {{ 'sedici.license.restriction' | translate }} - {{ 'sedici.license.restriction.description' | translate }} +
+
+
+
+
+
+
\ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.scss new file mode 100644 index 00000000000..777be40b6f2 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.scss @@ -0,0 +1,16 @@ +.licencias { + h2 { + font-weight: bold; + } +} + +.licencia-item { + display: flex; + align-items: center; + margin: 15px 0; + + i { + font-size: 3rem; + margin-right: 1rem; + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.ts new file mode 100644 index 00000000000..dfa717fb7a9 --- /dev/null +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-license.component.ts @@ -0,0 +1,27 @@ +import { Component, Input } from '@angular/core'; +import { CommonModule, NgIf } from '@angular/common'; +import { Item } from 'src/app/core/shared/item.model'; +import { TranslateModule } from '@ngx-translate/core'; +import { ItemPageCcLicenseFieldComponent } from 'src/app/item-page/simple/field-components/specific-field/cc-license/item-page-cc-license-field.component'; + +@Component({ + selector: 'sedici-license', + standalone: true, + imports: [ + CommonModule, + TranslateModule, + ItemPageCcLicenseFieldComponent, + NgIf, + ], + templateUrl: './sedici-license.component.html', + styleUrls: ['./sedici-license.component.scss'] +}) +export class SediciLicenseComponent { + @Input() object: Item; + + license: string; + + ngOnInit() { + this.license = this.object?.allMetadata(['sedici.rights.license'])[0]?.value; + } +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.html index 353251aa0ae..4f247efdcd7 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.html @@ -1,11 +1,11 @@ - - - - -

-
-
-
-
+ + + +
{{ label | translate }}
+ +
+
+
\ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.scss index 10a43730a38..b3bef7c03fd 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.scss @@ -1,4 +1,5 @@ -.text { - white-space: pre-wrap; - text-align: justify; +.label { + display: inline; + margin-right: 0.5em; + font-weight: bold; } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.ts index 74956cb56f6..a3aba7fdb4f 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/sedici-truncatable-generic-item-page-field.ts @@ -1,12 +1,10 @@ import { Component, Input } from '@angular/core'; import { Item } from 'src/app/core/shared/item.model'; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; -import { NgIf, NgFor } from '@angular/common'; +import { NgIf } from '@angular/common'; import { TranslateModule } from '@ngx-translate/core'; -import { MetadataFieldWrapperComponent } from 'src/app/shared/metadata-field-wrapper/metadata-field-wrapper.component'; import { TruncatableComponent } from 'src/app/shared/truncatable/truncatable.component'; -import { TruncatablePartComponent } from 'src/app/shared/truncatable/truncatable-part/truncatable-part.component'; - +import { SediciTruncatablePartComponent } from 'src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component'; @Component({ selector: 'sedici-truncatable-generic-item-page-field', styleUrls: ['./sedici-truncatable-generic-item-page-field.scss'], @@ -14,11 +12,9 @@ import { TruncatablePartComponent } from 'src/app/shared/truncatable/truncatable standalone: true, imports: [ NgIf, - NgFor, TranslateModule, - MetadataFieldWrapperComponent, TruncatableComponent, - TruncatablePartComponent, + SediciTruncatablePartComponent, ], }) export class SediciTruncatableGenericItemPageFieldComponent { @@ -42,7 +38,7 @@ export class SediciTruncatableGenericItemPageFieldComponent { metadataArray.forEach((metadata, index) => { concat += metadata.value; if (index < metadataArray.length - 1) { - concat += '\n'; + concat += '; '; } }); if (concat.length > 0) { diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html index 0072b639c4f..dd88c4bd245 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.html @@ -1,12 +1,14 @@
-
- {{ tab.label }} -
+ +
+ {{ tab.label | translate }} +
+
@@ -14,10 +16,14 @@
- +
- +
+
+ LA REFERENCIA +
+
diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss index 78e49946a0d..d3a0b816ec9 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.scss @@ -1,36 +1,56 @@ .tab-container { display: flex; flex-direction: column; - border: 1px solid #e0e0e0; - border-radius: 4px; - overflow: hidden; } .tab-header { display: flex; - background-color: #f8f8f8; - border-bottom: 1px solid #e0e0e0; + border-bottom: 2px solid #42a5f5; } .tab { - flex: 1; - padding: 12px 16px; + padding: 10px 20px; text-align: center; cursor: pointer; - font-size: 1em; font-weight: bold; - color: #555; - transition: background-color 0.3s ease; + color: #888; + position: relative; + transition: color 0.3s ease; + white-space: nowrap; + + @media screen and (max-width: map-get($grid-breakpoints, md)) { + padding: 5px 10px; + font-size: .7rem; + } } .tab.active { - background-color: #ffffff; - border-bottom: 2px solid #007bff; - color: #007bff; + color: #42a5f5; +} + +.tab.active::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 4px; + background-color: #42a5f5; + border-radius: 2px; +} + +.tab:hover { + color: #42a5f5; } .tab-content { - padding: 16px; + padding: 1rem; background-color: #ffffff; - min-height: 500px; //AJUSTAR + min-height: 500px; } + +.reference-image { + max-width: 50%; + height: auto; + margin-bottom: 10px; +} \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts index 2c438642cbb..ff8a5ffbc8e 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/tabbed-content.component.ts @@ -1,36 +1,43 @@ -import { Component, Input } from '@angular/core'; -import { CommonModule } from '@angular/common'; +import { Component, Input, OnInit } from '@angular/core'; +import { CommonModule, NgIf } from '@angular/common'; import { Item } from 'src/app/core/shared/item.model'; -import { ItemPageCcLicenseFieldComponent } from 'src/app/item-page/simple/field-components/specific-field/cc-license/item-page-cc-license-field.component'; import { FullItemComponent } from './full-item.component'; import { ContentFilesComponent } from './content-files.component'; -import { ApaCitationComponent } from './apa-citation.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { SediciLicenseComponent } from './sedici-license.component'; @Component({ selector: 'ds-tabbed-content', standalone: true, imports: [ CommonModule, - ItemPageCcLicenseFieldComponent, + NgIf, FullItemComponent, ContentFilesComponent, - ApaCitationComponent, + SediciLicenseComponent, + TranslateModule, ], templateUrl: './tabbed-content.component.html', styleUrls: ['./tabbed-content.component.scss'] }) -export class TabbedContentComponent { +export class TabbedContentComponent implements OnInit { @Input() object: Item; selectedTabIndex = 0; tabs = [ - { label: 'Contenido' }, - { label: 'Licencia' }, - { label: 'Cita' }, - { label: 'Registro completo' } + { label: 'sedici.tabs.content', visible: true }, + { label: 'sedici.tabs.license', visible: true }, + { label: 'sedici.tabs.statistics', visible: true }, + { label: 'sedici.tabs.fullRecord', visible: true } ]; + ngOnInit() { + if (!this.object?.allMetadata(['sedici.rights.license'])[0]?.value) { + this.tabs[1].visible = false; + } + } + selectTab(index: number) { this.selectedTabIndex = index; } diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html index ebbb606b1b1..04e16f9ac25 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.html @@ -1,5 +1,4 @@ - -
+
@@ -15,11 +14,11 @@

-

+

-

+

+ [label]="'sedici.item.page.sedici.creator.corporate'"> + [label]="'sedici.item.page.sedici.creator.interprete'"> + [label]="'sedici.item.page.sedici.contributor.compiler'"> + [label]="'sedici.item.page.sedici.contributor.translator'"> + [label]="'sedici.item.page.sedici.contributor.editor'"> + [label]="'sedici.item.page.sedici.contributor.inscriber'"> -
- - - - - - - - - -
-
- - -
-
- + +
+
+ + + + + + + [badgeLabelType]="'badge-primary'" + [badgeLabel]="'ISBN'" + [copyToClipboardButton]="true"> - - - - - +
+
+ + +
-
-
-
-
-
- -
Información de la tesis
-
Información general
- - - - - - - - - - - - +
+
+
+ + + -
Información general
- - - - - - - - - - - - - - - - - - - - - - - - -
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + +
+
+
-
- LA REFERENCIA -
-
- +
+ +
+
diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss index 5108aaaa558..06929a7e74c 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.scss @@ -1,22 +1,26 @@ +.jumbotron { + padding: 1rem 0; + margin-bottom: 0; +} + .badge-title-container { display: flex; - align-items: center; } .badge-title-content { display: flex; flex-direction: column; - color: #999; + + h1 { + font-weight: bold; + margin-bottom: 0; + } } .edit-menu { margin-left: auto; } -.subtitle-container { - margin-top: 10px; -} - .subtitle-content { font-style: italic; color: #555; @@ -32,14 +36,29 @@ border-bottom: 1px solid #D8E8Eb; } +.flex-container { + display: flex; + justify-content: space-between; + align-items: center; + + @media (max-width: 992px) { + flex-direction: column; + align-items: flex-start; + } +} + .item-identifiers { display: flex; flex-wrap: wrap; gap: 0.2rem; } -.reference-image { - max-width: 100%; - height: auto; - margin-bottom: 10px; +.botones-header { + display: flex; + flex-wrap: wrap; + gap: 0.2rem; +} + +#dropdownMenuButton::after { + content: none; } \ No newline at end of file diff --git a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts index 6243daf04a6..2ecce775817 100644 --- a/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts +++ b/src/themes/custom/app/item-page/simple/item-types/untyped-item/untyped-item.component.ts @@ -3,10 +3,13 @@ import { NgIf, NgFor, NgStyle, + NgClass, } from '@angular/common'; import { ChangeDetectionStrategy, Component, + ElementRef, + ViewChild, } from '@angular/core'; import { RouterLink } from '@angular/router'; import { TranslateModule } from '@ngx-translate/core'; @@ -23,14 +26,24 @@ import { SediciContextBadgeComponent } from 'src/themes/custom/app/shared/object import { LanguageSwitcherComponent } from './language-switcher.component'; import { MetadataValue } from 'src/app/core/shared/metadata.models'; import { BadgeMetadataValuesComponent } from '../../field-components/badge-metadata-values/badge-metadata-values.component'; -import { TruncatableComponent } from 'src/app/shared/truncatable/truncatable.component'; -import { TruncatablePartComponent } from 'src/app/shared/truncatable/truncatable-part/truncatable-part.component'; import { TabbedContentComponent } from './tabbed-content.component'; import { SediciDateMetadataValuesComponent } from '../../field-components/date-metadata-values/sedici-date-metadata-values.component'; import { SediciLanguageMetadataValuesComponent } from '../../field-components/language-metadata-values/sedici-language-metadata-values.component'; import { setPersistentIdentifiers } from 'src/app/shared/utils/persistent.identifier'; import { SediciTruncatableGenericItemPageFieldComponent } from './sedici-truncatable-generic-item-page-field'; +import { SediciContextComponent } from '../../field-components/context/sedici-context.component'; +import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { SediciCitationComponent } from '../../field-components/citation/sedici-citation.component'; +import { RouteService } from 'src/app/core/services/route.service'; +import { Router } from '@angular/router'; + +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { SediciShareButtonsComponent } from '../../field-components/share-buttons/sedici-share-buttons.component'; + +import { LrwLAReferenciaComponent } from '../../field-components/usage-stats copy/lrw-lareferencia.component'; + +import { ExpandableMetadataComponent } from './expandable-metadata'; /** * Component that represents an untyped Item page */ @@ -47,6 +60,7 @@ import { SediciTruncatableGenericItemPageFieldComponent } from './sedici-truncat NgIf, NgFor, NgStyle, + NgClass, DsoEditMenuComponent, GenericItemPageFieldComponent, ItemPageUriFieldComponent, @@ -55,13 +69,17 @@ import { SediciTruncatableGenericItemPageFieldComponent } from './sedici-truncat TranslateModule, LanguageSwitcherComponent, BadgeMetadataValuesComponent, - TruncatableComponent, - TruncatablePartComponent, TabbedContentComponent, SediciDateMetadataValuesComponent, SediciLanguageMetadataValuesComponent, SediciContextBadgeComponent, SediciTruncatableGenericItemPageFieldComponent, + SediciContextComponent, + SediciCitationComponent, + NgbModule, + SediciShareButtonsComponent, + LrwLAReferenciaComponent, + ExpandableMetadataComponent, ], }) export class UntypedItemComponent extends BaseComponent { @@ -69,9 +87,40 @@ export class UntypedItemComponent extends BaseComponent { identifierOtherMetadataName = ['dc.identifier.uri', 'sedici.identifier.other']; itemIdentifiers: { mdValue: MetadataValue, label: string, url: string }[]; + @ViewChild('tabbedContent', { read: ElementRef }) tabbedContentElement: ElementRef; + @ViewChild('tabbedContent') tabbedContentComponent: TabbedContentComponent; + + constructor(private modalService: NgbModal, protected routeService: RouteService, protected router: Router) { + super(routeService, router); + } + + openModalCitation() { + this.modalService.open(SediciCitationComponent, { + centered: true, // Centra el modal + }); + } + + openModalShareButtons() { + const modalRef = this.modalService.open(SediciShareButtonsComponent, { + centered: true, // Centra el modal + }); + modalRef.componentInstance.link = this.object.firstMetadataValue('dc.identifier.uri'); + } + + get hasMetadata(): boolean { + return this.hasField('sedici.description.note') || + this.hasField('dc.format') || + this.hasField('dc.format.medium'); + } + + // Comprueba si el campo existe y tiene contenido + private hasField(field: string): boolean { + const value = this.object.metadata[field]; + return value && value.length > 0; + } + ngOnInit() { super.ngOnInit(); - const abstracts = this.object.metadata['dc.description.abstract']; this.subtype = this.object.metadata['sedici.subtype'][0]?.value; this.itemIdentifiers = setPersistentIdentifiers(this.object, this.identifierOtherMetadataName); } diff --git a/src/themes/custom/app/root/root.component.html b/src/themes/custom/app/root/root.component.html index e69de29bb2d..5a2df9391c0 100644 --- a/src/themes/custom/app/root/root.component.html +++ b/src/themes/custom/app/root/root.component.html @@ -0,0 +1,33 @@ + + +
+ +
+ + + +
+ +
+ +
+
+ +
+
+ + +
+
+ + + + +
+ +
diff --git a/src/themes/custom/app/root/root.component.ts b/src/themes/custom/app/root/root.component.ts index bac434eeb3b..dcdd247f28e 100644 --- a/src/themes/custom/app/root/root.component.ts +++ b/src/themes/custom/app/root/root.component.ts @@ -21,8 +21,8 @@ import { SystemWideAlertBannerComponent } from '../../../../app/system-wide-aler selector: 'ds-themed-root', // styleUrls: ['./root.component.scss'], styleUrls: ['../../../../app/root/root.component.scss'], - // templateUrl: './root.component.html', - templateUrl: '../../../../app/root/root.component.html', + templateUrl: './root.component.html', + // templateUrl: '../../../../app/root/root.component.html', animations: [slideSidebarPadding], standalone: true, imports: [ diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.html b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.html index f23e7b4b6a8..85edc48edb1 100644 --- a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.html +++ b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.html @@ -5,12 +5,9 @@
- + -
- {{ getContextInfo() }} -
-
- {{ getYear() }} -
+ + {{ getYear() }} +
diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss index f0f3ec93a31..3fb625a2d1d 100644 --- a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss +++ b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.scss @@ -2,29 +2,4 @@ display: flex; align-items: center; margin-bottom: 10px; - - .context-info, - .context-year { - font-size: .75rem; - position: relative; - &:hover::after { - content: ''; - position: absolute; - left: 1.5%; - right: 1.5%; - bottom: 0; - height: 2px; - background-color: #8d8d8d; - } - } - - .context-info { - color: #8d8d8d; - margin-left: 5px; - } - - .context-year { - color: #4a90e2; - margin-left: 5px; - } } \ No newline at end of file diff --git a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts index 2b0a365519d..4e80c02f319 100644 --- a/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts +++ b/src/themes/custom/app/shared/object-collection/shared/badges/sedici-context-badge/sedici-context-badge.component.ts @@ -16,98 +16,6 @@ import { ThemedTypeBadgeComponent } from 'src/app/shared/object-collection/share }) export class SediciContextBadgeComponent extends BaseComponent { - getThesisInfo(): string { - const thesisDegreeName = this.object.firstMetadataValue('thesis.degree.name'); - const thesisDegreeGrantor = this.object.firstMetadataValue('thesis.degree.grantor'); - - if (thesisDegreeName && thesisDegreeGrantor) { - return `${thesisDegreeName}; ${thesisDegreeGrantor}`; - } else { - return ''; - } - } - - getBookInfo(): string { - const bookTitle = this.object.firstMetadataValue('sedici.relation.bookTitle'); - const isPartOf = this.object.firstMetadataValue('dc.relation.ispartof'); - - if (bookTitle && isPartOf) { - return `${bookTitle}; ${isPartOf}`; - } else if (bookTitle) { - return bookTitle; - } else if (isPartOf) { - return isPartOf; - } - return ''; - } - - getJournalInfo(): string { - const journalTitle = this.object.firstMetadataValue('sedici.relation.journalTitle'); - const journalVolumeAndIssue = this.object.firstMetadataValue('sedici.relation.journalVolumeAndIssue'); - - if (journalTitle && journalVolumeAndIssue) { - return `${journalTitle}; ${journalVolumeAndIssue}`; - } else if (journalTitle) { - return journalTitle; - } - return ''; - } - - getEventInfo(): string { - const event = this.object.firstMetadataValue('sedici.relation.event'); - if (event) { - return event; - } - return ''; - } - - getCicloInfo(): string { - const ciclo = this.object.firstMetadataValue('sedici.relation.ciclo'); - if (ciclo) { - return ciclo; - } - return ''; - } - - getOriginInfoPlace(): string { - let originInfo = this.object.firstMetadataValue('mods.originInfo.place'); - if (originInfo) { - return originInfo; - } - return ''; - } - - getContextInfo(): string { - const thesis = this.getThesisInfo(); - if (thesis) { - return thesis; - }; - const bookTitle = this.getBookInfo(); - if (bookTitle) { - return bookTitle; - }; - const journal = this.getJournalInfo(); - const event = this.getEventInfo(); - if (journal || event) { - if (journal && event) { - return `${journal} | ${event}`; - } else if (journal) { - return journal; - } else { - return event; - }; - }; - const ciclo = this.getCicloInfo(); - if (ciclo) { - return ciclo; - }; - const originInfo = this.getOriginInfoPlace(); - if (originInfo) { - return originInfo; - }; - return ''; - } - getYear(): string { let dateString = this.object.firstMetadataValue('dc.date.issued') || this.object.firstMetadataValue('dc.date.created') || this.object.firstMetadataValue('sedici.date.exposure'); if (dateString) { diff --git a/src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.html b/src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.html new file mode 100644 index 00000000000..ef83cbf6448 --- /dev/null +++ b/src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.html @@ -0,0 +1,13 @@ +
+
+ +
+ + +
\ No newline at end of file diff --git a/src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.scss b/src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.scss new file mode 100644 index 00000000000..66375bf7f83 --- /dev/null +++ b/src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.scss @@ -0,0 +1,21 @@ +.content:not(.truncated) ~ button.expandButton { + display: none; +} + +.btn:focus { + box-shadow: none !important; +} + +.removeFaded.content::after { + display: none; +} + +@for $i from 1 through 10 { + .clamp-default-#{$i} { + .content { + &:after { + background: linear-gradient(to right, rgba(255, 255, 255, 0), #e9ecef 70%); + } + } + } +} \ No newline at end of file diff --git a/src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.ts b/src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.ts new file mode 100644 index 00000000000..bcbb857e711 --- /dev/null +++ b/src/themes/custom/app/shared/truncatable/truncatable-part/sedici-truncatable-part.component.ts @@ -0,0 +1,26 @@ +import { NgIf } from '@angular/common'; +import { + Component, + Input, +} from '@angular/core'; +import { TranslateModule } from '@ngx-translate/core'; + +import { DragClickDirective } from 'src/app/shared/utils/drag-click.directive'; + +import { TruncatablePartComponent } from "src/app/shared/truncatable/truncatable-part/truncatable-part.component"; + +@Component({ + selector: 'sedici-truncatable-part', + templateUrl: './sedici-truncatable-part.component.html', + styleUrls: ['./sedici-truncatable-part.component.scss'], + standalone: true, + imports: [ + NgIf, + TranslateModule, + DragClickDirective, + ], +}) + +export class SediciTruncatablePartComponent extends TruncatablePartComponent { + @Input() showCollapseButton = true; +} From 607114508b70ecce0cea0b50cb22d25d95ca95d4 Mon Sep 17 00:00:00 2001 From: 178Pelado Date: Thu, 12 Dec 2024 12:28:47 -0300 Subject: [PATCH 09/46] =?UTF-8?q?11008=20actualizaci=C3=B3n=20package.json?= =?UTF-8?q?=20(ngx-doc-viewer=20y=20jszip)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package.json b/package.json index 9365aba71c6..b6887b1bad0 100644 --- a/package.json +++ b/package.json @@ -112,6 +112,7 @@ "js-yaml": "^4.1.0", "json5": "^2.2.3", "jsonschema": "1.4.1", + "jszip": "^3.10.1", "jwt-decode": "^3.1.2", "klaro": "^0.7.18", "lodash": "^4.17.21", @@ -124,6 +125,7 @@ "ng-mocks": "^14.10.0", "ng2-file-upload": "5.0.0", "ng2-nouislider": "^2.0.0", + "ngx-doc-viewer": "^15.0.1", "ngx-infinite-scroll": "^16.0.0", "ngx-pagination": "6.0.3", "ngx-ui-switch": "^14.1.0", From d84c4ef36110b47657e15bf56cf088837b2afefa Mon Sep 17 00:00:00 2001 From: 178Pelado Date: Mon, 16 Dec 2024 12:23:19 -0300 Subject: [PATCH 10/46] =?UTF-8?q?11008=20cambio=20el=20trail=20en=20respon?= =?UTF-8?q?sive.=20solamente=20se=20muestra=20la=20comunidad=20padre=20m?= =?UTF-8?q?=C3=A1s=20cercana?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/breadcrumbs/breadcrumbs.component.ts | 2 +- .../app/breadcrumbs/breadcrumbs.component.html | 11 ++++++++--- .../app/breadcrumbs/breadcrumbs.component.ts | 14 +++++++++++++- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/app/breadcrumbs/breadcrumbs.component.ts b/src/app/breadcrumbs/breadcrumbs.component.ts index 9820d672c98..046056a3bb8 100644 --- a/src/app/breadcrumbs/breadcrumbs.component.ts +++ b/src/app/breadcrumbs/breadcrumbs.component.ts @@ -37,7 +37,7 @@ export class BreadcrumbsComponent { showBreadcrumbs$: Observable; constructor( - private breadcrumbsService: BreadcrumbsService, + protected breadcrumbsService: BreadcrumbsService, ) { this.breadcrumbs$ = breadcrumbsService.breadcrumbs$; this.showBreadcrumbs$ = breadcrumbsService.showBreadcrumbs$; diff --git a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html index bb9076f9ec3..d98010f1377 100644 --- a/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html +++ b/src/themes/custom/app/breadcrumbs/breadcrumbs.component.html @@ -1,10 +1,15 @@