com.phloxui
Version:
PhloxUI Ng2+ Framework
782 lines (781 loc) • 80.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { EventEmitter } from '@angular/core';
import { AbstractInputDataView } from './AbstractInputDataView';
import { DataUtils } from '../../../share/utils/DataUtils';
import { Option } from '../../../decorator/Option.decorator';
import { I18N } from '../../../decorator/I18N.decorator';
import { EventUtils } from '../../../share/utils/EventUtils';
import { BEFORE_SELECT_EVENT, SELECT_EVENT, DATA_CHANGE_EVENT, BEFORE_DATA_CHANGE_EVENT } from '../../../share/CustomEventType';
/**
* @abstract
*/
export class AbstractSelectItems extends AbstractInputDataView {
/**
* @param {?} elementRef
* @param {?} needFocusService
*/
constructor(elementRef, needFocusService) {
super(elementRef, needFocusService);
this.beforeSelectEvent = new EventEmitter();
this.selectEvent = new EventEmitter();
this.selectedItems = [];
this.items = [];
this._load = false;
this._isSetOriginal = false;
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
// recall setData to do some function
this.setData(this.data);
}
/**
* @param {?} items
* @return {?}
*/
_setSelectedItems(items) {
this.selectedItems = items;
}
/**
* @param {?} data
* @return {?}
*/
parseDataToSelectItems(data) {
let /** @type {?} */ valueArray = [];
let /** @type {?} */ selectedItemList = [];
let /** @type {?} */ isMappingMode = AbstractSelectItems.isFieldMappingEnable(this.field, data);
if (isMappingMode) {
// field not null && data is object or array of object
if (Array.isArray(data)) {
if (data.length > 0) {
// only resolve selected items from data at index 0.
data = data[0];
}
else {
data = undefined;
}
}
if (data !== null && data !== undefined) {
let /** @type {?} */ parseData = DataUtils.getDataValue(this.field, data);
if (parseData !== null && parseData !== undefined) {
if (Array.isArray(parseData)) {
valueArray = parseData.concat([]);
}
else {
valueArray.push(parseData);
}
}
}
}
else {
// data is not object or object with no field or array of primitive aka. data == selectedItem value.
if (Array.isArray(data)) {
for (let /** @type {?} */ r of data) {
valueArray.push(r);
}
}
else {
valueArray.push(data);
}
}
for (let /** @type {?} */ val of valueArray) {
let /** @type {?} */ index = this.getItemIndexFromValue(val);
if (index >= 0 && index < this.items.length) {
selectedItemList.push(this.items[index]);
}
}
return selectedItemList;
}
/**
* @param {?} selectedItems
* @param {?=} isSaveToData
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
_setSelectedItemsSaveData(selectedItems, isSaveToData = true, $event, fireEvent = true) {
// update inner data and set to super data to chainging
let /** @type {?} */ finalSelectedItems = [];
// only value in items are allow
if (selectedItems !== null && typeof selectedItems !== 'undefined') {
for (let /** @type {?} */ item of selectedItems) {
if (this.items.indexOf(item) >= 0) {
finalSelectedItems.push(item);
}
}
}
this._setSelectedItems(finalSelectedItems);
let /** @type {?} */ parseValues = this.getSelectedData();
if (isSaveToData) {
super.setInputValue(parseValues, $event, fireEvent);
}
if (!this._isSetOriginal) {
this.originalData = undefined;
if (Array.isArray(this.data)) {
this.originalData = [];
for (let /** @type {?} */ d of this.data) {
if (typeof this.data === 'object') {
this.originalData.push(JSON.parse(JSON.stringify(d)));
}
else {
this.originalData.push(d);
}
}
}
else {
if (typeof this.data === 'object') {
this.originalData = JSON.parse(JSON.stringify(this.data));
}
else {
this.originalData = this.data;
}
}
this._isSetOriginal = true;
}
super.setData(this.data);
}
/**
* @param {?} data
* @param {?=} isSaveToData
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
_setData(data, isSaveToData = true, $event, fireEvent) {
let /** @type {?} */ selectedItemList = this.parseDataToSelectItems(data);
super.setData(data);
if (this._preloadData === undefined) {
this._preloadData = data;
}
this._setSelectedItemsSaveData(selectedItemList, isSaveToData, $event, fireEvent);
}
/**
* @param {?} oldValue
* @param {?} newValue
* @param {?} valueChange
* @param {?=} $event
* @return {?}
*/
emitBeforeChangeEvent(oldValue, newValue, valueChange, $event) {
let /** @type {?} */ oldIndex = this.getItemIndexFromValue(oldValue);
let /** @type {?} */ newIndex = this.getItemIndexFromValue(newValue);
let /** @type {?} */ eventData = {
data: this.data,
oldValue: oldValue,
newValue: newValue,
oldIndex: oldIndex,
newIndex: newIndex,
valueChange: valueChange
};
// emit event
let /** @type {?} */ data = eventData;
let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_DATA_CHANGE_EVENT, this, data, $event);
// We've to emitBeforeChangeEvent() on parent first since it might be prevented from parent.
// In this case, the child change event should be prevented also.
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && parent !== undefined) {
if (typeof parent.getBeforeChangeEvent === 'function') {
// In most cases, we'll emitBeforeChangeEvent() on parent with the same event object ("ev").
// to make it preventable from parent.
parent.getBeforeChangeEvent().emit(ev);
}
else if (typeof parent.emitBeforeChangeEvent === 'function') {
// Fall back method if parent doesn't have getBeforeChangeEvent() method.
parent.emitBeforeChangeEvent(oldValue, newValue, $event);
}
}
if (this.beforeChangeEvent !== null && this.beforeChangeEvent !== undefined) {
this.beforeChangeEvent.emit(ev);
}
}
/**
* @param {?} oldValue
* @param {?} newValue
* @param {?} valueChange
* @param {?=} $event
* @return {?}
*/
emitChangeEvent(oldValue, newValue, valueChange, $event) {
let /** @type {?} */ oldIndex = this.getItemIndexFromValue(oldValue);
let /** @type {?} */ newIndex = this.getItemIndexFromValue(newValue);
let /** @type {?} */ eventData = {
data: this.data,
oldValue: oldValue,
newValue: newValue,
oldIndex: oldIndex,
newIndex: newIndex,
valueChange: valueChange
};
// emit event
let /** @type {?} */ data = eventData;
let /** @type {?} */ ev = EventUtils.newCustomEvent(DATA_CHANGE_EVENT, this, data, $event);
if (this.changeEvent !== null && this.changeEvent !== undefined) {
this.changeEvent.emit(ev);
}
let /** @type {?} */ parent = /** @type {?} */ (this.getDataParent());
if (parent !== null && parent !== undefined) {
if (typeof parent.getChangeEvent === 'function') {
// In most cases, we'll emitChangeEvent() on parent with the same event object ("ev").
parent.getChangeEvent().emit(ev);
}
else if (typeof parent.emitChangeEvent === 'function') {
// Fall back method if parent doesn't have getChangeEvent() method.
parent.emitChangeEvent(oldValue, newValue, $event);
}
}
}
/**
* @param {?} oldIndices
* @param {?} newIndices
* @param {?} $event
* @return {?}
*/
emitBeforeSelectEvent(oldIndices, newIndices, $event) {
let /** @type {?} */ oItems = [];
if (oldIndices !== null && oldIndices !== undefined) {
for (let /** @type {?} */ oldIndex of oldIndices) {
let /** @type {?} */ oItem = this.getItemAtIndex(oldIndex);
oItems.push(oItem);
}
}
let /** @type {?} */ nItems = [];
if (newIndices !== null && newIndices !== undefined) {
for (let /** @type {?} */ newIndex of newIndices) {
let /** @type {?} */ nItem = this.getItemAtIndex(newIndex);
nItems.push(nItem);
}
}
let /** @type {?} */ data = {
item: nItems && nItems.length > 0 ? nItems[0] : null,
items: nItems,
index: newIndices && newIndices.length > 0 ? newIndices[0] : -1,
indices: newIndices,
oldItem: oItems && oItems.length > 0 ? oItems[0] : null,
oldItems: oItems,
oldIndex: oldIndices && oldIndices.length > 0 ? oldIndices[0] : -1,
oldIndices: oldIndices
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_SELECT_EVENT, this, data, $event);
this.beforeSelectEvent.emit(ev);
}
/**
* @param {?} oldIndices
* @param {?} newIndices
* @param {?} $event
* @return {?}
*/
emitSelectEvent(oldIndices, newIndices, $event) {
let /** @type {?} */ oItems = [];
if (oldIndices !== null && oldIndices !== undefined) {
for (let /** @type {?} */ oldIndex of oldIndices) {
let /** @type {?} */ oItem = this.getItemAtIndex(oldIndex);
oItems.push(oItem);
}
}
let /** @type {?} */ nItems = [];
if (newIndices !== null && newIndices !== undefined) {
for (let /** @type {?} */ newIndex of newIndices) {
let /** @type {?} */ nItem = this.getItemAtIndex(newIndex);
nItems.push(nItem);
}
}
let /** @type {?} */ data = {
item: nItems && nItems.length > 0 ? nItems[0] : null,
items: nItems,
index: newIndices && newIndices.length > 0 ? newIndices[0] : -1,
indices: newIndices,
oldItem: oItems && oItems.length > 0 ? oItems[0] : null,
oldItems: oItems,
oldIndex: oldIndices && oldIndices.length > 0 ? oldIndices[0] : -1,
oldIndices: oldIndices
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(SELECT_EVENT, this, data, $event);
this.selectEvent.emit(ev);
}
/**
* @param {?} items
* @return {?}
*/
parseData(items) {
let /** @type {?} */ result = [];
if (items !== null && typeof items !== 'undefined') {
for (let /** @type {?} */ item of items) {
result.push(item.getValue());
}
}
return result;
}
/**
* @param {?} o1
* @param {?} o2
* @return {?}
*/
equalData(o1, o2) {
if (this.dataComparator !== null && typeof this.dataComparator !== 'undefined') {
return this.dataComparator.equals(o1, o2);
}
else {
try {
return JSON.stringify(o1) === JSON.stringify(o2);
}
catch (/** @type {?} */ e) {
return (o1 === o2);
}
}
}
/**
* @param {?} o1
* @param {?} o2
* @return {?}
*/
compareData(o1, o2) {
if (this.dataComparator !== null && typeof this.dataComparator !== 'undefined') {
return this.dataComparator.compare(o1, o2);
}
return -1;
}
/**
* @param {?} index
* @return {?}
*/
getItemAtIndex(index) {
if (index >= 0) {
if (this.items !== null && typeof this.items !== 'undefined') {
if (index < this.items.length) {
return this.items[index];
}
}
}
return null;
}
/**
* @return {?}
*/
loadedItems() {
if (this._load) {
return;
}
this._load = true;
this._isSetOriginal = false;
this._setData(this._preloadData, true, null, false);
}
/**
* @param {?} data
* @return {?}
*/
setPreloadData(data) {
this._preloadData = data;
}
/**
* @return {?}
*/
getSelectedData() {
return this.parseData(this.getSelectedItems());
}
/**
* @return {?}
*/
unload() {
this._preloadData = null;
this._load = false;
}
/**
* @return {?}
*/
getItems() {
return this.items;
}
/**
* @param {?} items
* @return {?}
*/
setItems(items) {
this.items = items;
// recall setData to do some function
this.setData(this.data);
}
/**
* @return {?}
*/
getSelectedValues() {
let /** @type {?} */ result = [];
if (this.selectedItems !== null && typeof this.selectedItems !== 'undefined') {
for (let /** @type {?} */ item of this.selectedItems) {
result.push(item.getValue());
}
}
return result;
}
/**
* @param {?} index
* @return {?}
*/
isIndexSelected(index) {
if (this.getSelectedIndexes().indexOf(index) == -1 || index === null || typeof index !== 'number') {
return false;
}
else {
return true;
}
}
/**
* @param {?} item
* @return {?}
*/
isItemSelected(item) {
if (this.getSelectedItems().indexOf(item) == -1 || item === null || typeof item === 'undefined') {
return false;
}
else {
return true;
}
}
/**
* @return {?}
*/
getSelectedItems() {
return this.selectedItems;
}
/**
* @return {?}
*/
getSelectedIndexes() {
let /** @type {?} */ indexes = [];
if (this.selectedItems !== null && typeof this.selectedItems !== 'undefined' &&
this.items !== null && typeof this.items !== 'undefined' && Array.isArray(this.items)) {
for (let /** @type {?} */ selected of this.selectedItems) {
let /** @type {?} */ sIndex = this.items.indexOf(selected);
if (sIndex <= -1) {
continue;
}
if (indexes.indexOf(sIndex) <= -1) {
indexes.push(sIndex);
}
}
}
return indexes;
}
/**
* @param {?} selectedItems
* @param {?=} $event
* @param {?=} fireEvent
* @param {?=} fireChangeEvent
* @return {?}
*/
setSelectedItems(selectedItems, $event, fireEvent, fireChangeEvent) {
if (selectedItems === null || selectedItems === undefined || !Array.isArray(selectedItems)) {
selectedItems = [];
}
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
let /** @type {?} */ sItems = [];
let /** @type {?} */ newIndices = [];
for (let /** @type {?} */ item of selectedItems) {
let /** @type {?} */ idx = this.getItemIndex(item);
if (idx >= 0) {
newIndices.push(idx);
sItems.push(item);
}
}
// Only allow "item" which actually exists.
selectedItems = sItems;
let /** @type {?} */ oldIndex = this.getSelectedIndexes();
EventUtils.handleBrowserEvent(this, 'beforeSelectEvent', $event, fireEvent, ($event) => {
// doEvent
this._setSelectedItemsSaveData(selectedItems, true, $event, fireChangeEvent);
}, ($event) => {
// emitBeforeEvent
this.emitBeforeSelectEvent(oldIndex, newIndices, $event);
}, ($event, result) => {
// emitAfterEvent
this.emitSelectEvent(oldIndex, newIndices, $event);
}, ($event) => {
// doPrevented
});
}
/**
* @param {?} indices
* @param {?=} $event
* @param {?=} fireEvent
* @param {?=} fireChangeEvent
* @return {?}
*/
setSelectedIndexes(indices, $event, fireEvent, fireChangeEvent) {
if (indices === null || indices === undefined || !Array.isArray(indices)) {
indices = [];
}
if (fireEvent === null || fireEvent === undefined) {
fireEvent = true;
}
let /** @type {?} */ sItems = [];
if (indices !== null && typeof indices !== 'undefined' && Array.isArray(indices)) {
if (this.items !== null && typeof this.items !== 'undefined' && Array.isArray(this.items)) {
for (let /** @type {?} */ index of indices) {
if (index < 0 || index < this.items.length) {
let /** @type {?} */ item = this.items[index];
if (sItems.indexOf(item) >= 0) {
continue;
}
sItems.push(item);
}
}
}
}
this.setSelectedItems(sItems, $event, fireEvent, fireChangeEvent);
}
/**
* @param {?} inputVal
* @param {?=} $event
* @param {?=} fireEvent
* @return {?}
*/
setInputValue(inputVal, $event, fireEvent) {
// should be array if not wrap into array
let /** @type {?} */ valContainer = [];
if (!Array.isArray(inputVal)) {
valContainer.push(inputVal);
}
else {
valContainer = inputVal;
}
let /** @type {?} */ selectIndexes = [];
for (let /** @type {?} */ value of valContainer) {
let /** @type {?} */ index = this.getItemIndexFromValue(value);
if (index <= -1) {
continue;
}
selectIndexes.push(index);
}
if (selectIndexes.length > 0) {
this.setSelectedIndexes(selectIndexes);
}
if (!this.isMappingEnable() && this._preloadData === undefined) {
this._preloadData = inputVal;
}
}
/**
* @param {?} data
* @return {?}
*/
setData(data) {
this._setData(data, true, null, true);
}
/**
* @return {?}
*/
isSelfDataDirty() {
if (Array.isArray(this.originalData) && Array.isArray(this.data)) {
if (this.originalData.length !== this.data.length) {
return true;
}
// one of data not match return true;
for (let /** @type {?} */ d of this.data) {
let /** @type {?} */ parseData = d;
if (this.field !== null && typeof this.field !== 'undefined' && typeof parseData === 'object') {
parseData = DataUtils.getDataValue(this.field, parseData);
}
for (let /** @type {?} */ ori of this.originalData) {
let /** @type {?} */ oriParseData = ori;
if (this.field !== null && typeof this.field !== 'undefined' && typeof oriParseData === 'object') {
oriParseData = DataUtils.getDataValue(this.field, oriParseData);
}
if (!this.equalData(parseData, oriParseData)) {
return true;
}
}
}
}
else if ((typeof this.originalData === 'undefined' || this.originalData === null) && (typeof this.data === 'undefined' || this.data === null)) {
return false;
}
else {
let /** @type {?} */ parseData = this.data;
if (this.field !== null && typeof this.field !== 'undefined' && typeof parseData === 'object') {
parseData = DataUtils.getDataValue(this.field, parseData);
}
let /** @type {?} */ oriParseData = this.originalData;
if (this.field !== null && typeof this.field !== 'undefined' && typeof oriParseData === 'object') {
oriParseData = DataUtils.getDataValue(this.field, oriParseData);
}
return (!this.equalData(parseData, oriParseData));
}
return false;
}
/**
* @param {?} data
* @return {?}
*/
selfSaveData(data) {
if (typeof this.data === 'object') {
this.originalData = JSON.parse(JSON.stringify(this.data));
}
else {
this.originalData = this.data;
}
}
/**
* @return {?}
*/
selfResetData() {
let /** @type {?} */ selectedItemList = this.parseDataToSelectItems(this.originalData);
this.setSelectedItems(selectedItemList);
}
/**
* @return {?}
*/
resetOriginalData() {
this._isSetOriginal = false;
this.originalData = undefined;
}
/**
* @param {?} value
* @return {?}
*/
containsItemValue(value) {
let /** @type {?} */ index = this.getItemIndexFromValue(value);
return index > -1;
}
/**
* @param {?} item
* @return {?}
*/
getItemIndex(item) {
if (item === null || typeof item === 'undefined') {
return -1;
}
if (this.items !== null && typeof this.items !== 'undefined') {
for (let /** @type {?} */ i = 0; i < this.items.length; i++) {
if (item === this.items[i]) {
return i;
}
}
}
return -1;
}
/**
* @param {?} value
* @return {?}
*/
getItemIndexFromValue(value) {
let /** @type {?} */ indices = this.getItemIndexesFromValue(value);
if (indices !== null && indices !== undefined && indices.length > 0) {
// Return the first item's index found.
return indices[0];
}
// Return -1 if not found.
return -1;
}
/**
* @param {?} value
* @return {?}
*/
getItemIndexesFromValue(value) {
let /** @type {?} */ re = [];
if (this.items !== null && typeof this.items !== 'undefined') {
for (let /** @type {?} */ i = 0; i < this.items.length; i++) {
let /** @type {?} */ item = this.items[i];
// Use equalData() to check equal using comparator (if available).
let /** @type {?} */ equal = this.equalData(item.getValue(), value);
if (equal) {
re.push(i);
}
}
}
return re;
}
/**
* @return {?}
*/
doPreload() { return new Promise((resolve, reject) => { resolve(null); }); }
/**
* @return {?}
*/
doLoaded() {
}
/**
* @return {?}
*/
getBeforeSelectEvent() {
return this.beforeSelectEvent;
}
/**
* @param {?} event
* @return {?}
*/
setBeforeSelectEvent(event) {
this.beforeSelectEvent = event;
}
/**
* @return {?}
*/
getSelectEvent() {
return this.selectEvent;
}
/**
* @param {?} event
* @return {?}
*/
setSelectEvent(event) {
this.selectEvent = event;
}
/**
* @return {?}
*/
getDataComparator() {
return this.dataComparator;
}
/**
* @param {?} dataComp
* @return {?}
*/
setDataComparator(dataComp) {
this.dataComparator = dataComp;
}
}
tslib_1.__decorate([
Option('comparator'),
tslib_1.__metadata("design:type", Object)
], AbstractSelectItems.prototype, "dataComparator", void 0);
tslib_1.__decorate([
I18N(),
Option(),
tslib_1.__metadata("design:type", Array)
], AbstractSelectItems.prototype, "items", void 0);
tslib_1.__decorate([
Option('beforeSelect'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractSelectItems.prototype, "beforeSelectEvent", void 0);
tslib_1.__decorate([
Option('select'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractSelectItems.prototype, "selectEvent", void 0);
function AbstractSelectItems_tsickle_Closure_declarations() {
/** @type {?} */
AbstractSelectItems.prototype.dataComparator;
/** @type {?} */
AbstractSelectItems.prototype.items;
/** @type {?} */
AbstractSelectItems.prototype.beforeSelectEvent;
/** @type {?} */
AbstractSelectItems.prototype.selectEvent;
/** @type {?} */
AbstractSelectItems.prototype.data;
/** @type {?} */
AbstractSelectItems.prototype.selectedItems;
/** @type {?} */
AbstractSelectItems.prototype._preloadData;
/** @type {?} */
AbstractSelectItems.prototype._load;
/** @type {?} */
AbstractSelectItems.prototype._isSetOriginal;
/** @type {?} */
AbstractSelectItems.prototype.originalData;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTZWxlY3RJdGVtcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9BYnN0cmFjdFNlbGVjdEl0ZW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUE2QixZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFFTCxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQy9FLE1BQU0sZ0NBQWdDLENBQUM7Ozs7QUFFeEMsTUFBTSwwQkFBb0MsU0FBUSxxQkFBcUI7Ozs7O0lBa0JyRSxZQUFZLFVBQXNCLEVBQUUsZ0JBQWtDO1FBQ3BFLEtBQUssQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUVwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7S0FDN0I7Ozs7SUFFTSxRQUFRO1FBQ2IsS0FBSyxDQUFDLFFBQVEsRUFB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