From aa6c434302ab893cbdcb714271e4470adafaf8e2 Mon Sep 17 00:00:00 2001 From: zyc Date: Wed, 12 Feb 2020 23:21:28 +0800 Subject: [PATCH 1/4] debug the saving process --- blue_plus/biosses_dataset/biosses.yml | 28 +++++++ blue_plus/dataset.py | 110 +++++++++++++++++++++++++- blue_plus/rowdata/biosses/biosses.yml | 31 ++++++++ requirements.txt | 2 + 4 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 blue_plus/biosses_dataset/biosses.yml create mode 100644 blue_plus/rowdata/biosses/biosses.yml diff --git a/blue_plus/biosses_dataset/biosses.yml b/blue_plus/biosses_dataset/biosses.yml new file mode 100644 index 0000000..bd3091e --- /dev/null +++ b/blue_plus/biosses_dataset/biosses.yml @@ -0,0 +1,28 @@ +# dataset name +name: BIOSSES + +# description of this dataset. +description: A corpus of sentence pairs selected from the Biomedical Summarization Track Training + Dataset in the biomedical domain. + +version: 1.0d + +# The citation to use for this dataset. +citation: "Sogancioglu G, Ozturk H, Ozgur A. BIOSSES: a semantic sentence similarity estimation + system for the biomedical domain. Bioinformatics. 2017 Jul 12;33(14):i49-58." + +# Homepages of the dataset +links: + # original dataset + train.tsv: http://pengyifan.com/tmp/BIOSSES/train.tsv + dev.tsv: http://pengyifan.com/tmp/BIOSSES/dev.tsv + test.tsv: http://pengyifan.com/tmp/BIOSSES/test.tsv + test_results.tsv: http://pengyifan.com/tmp/BIOSSES/test_results.tsv + # license information + # license.txt + # BERT version + # bert_train: bert_train.csv + # bert_dev: bert_dev.csv + # bert_test: bert_test.csv + # bert_test_results: bert_test_results.csv + diff --git a/blue_plus/dataset.py b/blue_plus/dataset.py index 829aa1f..5d59eae 100644 --- a/blue_plus/dataset.py +++ b/blue_plus/dataset.py @@ -1,11 +1,15 @@ import yaml - +import urllib +import pandas as pd +from sklearn.model_selection import KFold +from sklearn.model_selection import train_test_split +import numpy as np +import os class BaseDataset(object): """Abstract dataset class""" def __init__(self, config_file): - print(config_file) with open(config_file, encoding='utf8') as fp: self.config = yaml.load(fp) self.name = self.config['name'] if 'name' in self.config else '' @@ -50,3 +54,105 @@ def evaluate(self, test_file, prediction_file, output_file): results: string or pandas DataFrame that containing the evaluation results. """ raise NotImplementedError + + +class form_tsv(object): + def __init__(self, config_file="/rowdata/biosses/biosses.yml"): + config_file = os.getcwd()+config_file + with open(config_file, encoding='utf8') as fp: + self.config = yaml.load(fp) + self.save_path = self.config['save_path'] if 'save_path' in self.config else '' + self.description = self.config['description'] if 'description' in self.config else '' + self.path_pair = self.config['links'].get('path_pair') if 'links' in self.config else "" + self.path_score = self.config['links'].get('path_score') if 'links' in self.config else "" + self.data = None + def biosses_format_data(self, col_index_pair=["index", "s1", 's2'], + col_index_score=['index', 'score1', 'score2', 'score3', 'score4', 'score5']): + """ + + self.path_pair: the path for pairs.xls + self.path_score: the path for scores.xls + :param col_index_pair: column index for pairs.xls + :param col_index_score: column index for scores.xls + :return: all formatted data in pandas frame + """ + if self.path_score is '': + raise FileNotFoundError("path_score doesn't exit,please check yml configuration file") + if self.path_pair is '': + raise FileNotFoundError("path_pair doesn't exit,please check yml configuration file") + + new_col_index = ['index', 'genre', 'filename', 'year', 'old_index', 'source1', 'source2', 'sentence1', + 'sentence2', 'score'] + # drop the first line + data = pd.read_excel(os.getcwd()+self.path_pair, header=0, drop=True) + data.columns = col_index_pair + index = [i for i in range(data.count()[0])] + data['index'] = index + + score = pd.read_excel(os.getcwd()+self.path_score, header=0, drop=True) + score.columns = col_index_score + score['index'] = index + score = score[score.columns[1:]].mean(axis=1) + + rtn = pd.DataFrame(index=index, columns=new_col_index) + + rtn['index'] = index + rtn['gener'] = 'GENRE' + rtn['filename'] = 'BIOSSES' + rtn['year'] = 1997 + rtn['old_index'] = index + rtn['source1'] = 'BIOSSES' + rtn['source2'] = 'BIOSSES' + rtn['sentence1'] = data[data.columns[1]] + rtn['sentence2'] = data[data.columns[2]] + rtn['score'] = score + self.data = rtn + return self.data + + def data_split(self, data, p_train=0.7, p_test=0.14): + """ + + :param data: all formatted data returned by biosses_format_data function + :param p_train: percentage for training data + :param p_test: percentage for testing data + note: p_train + p_test < 1 + :return: train data, test data, dev data + """ + assert p_train + p_test < 1, "the percentages of training and testing data should be less than 100%" + data = data.sample(frac=1.0) + + data_count = data.count() + train_count = np.floor(data_count * p_train) + test_count = train_count + np.floor(data_count * p_test) + + data = data.reset_index() + + train = data.iloc[0:data_count] + train = train.reset_index() + + test = data.iloc[data_count:test_count] + test = test.reset_index() + + dev = data.iloc[test_count:] + dev = dev.reset_index() + + test_results = test['score'].copy() + return train, test, dev, test_results + + def save_files(self): + data = self.biosses_format_data() + splited_data = self.data_split(data,p_train= 0.7,p_test= 0.14) + #train,test,dev,test_results + + for i,name in enumerate(self.save_path): + path = self.save_path[name] + if not os.path.exists(path): + splited_data[i].to_csv(path_or_buf= path, sep='\t') + else: + print(path,"exits! ") + break + +fm = form_tsv() + +fm.save_files() + diff --git a/blue_plus/rowdata/biosses/biosses.yml b/blue_plus/rowdata/biosses/biosses.yml new file mode 100644 index 0000000..7bb960c --- /dev/null +++ b/blue_plus/rowdata/biosses/biosses.yml @@ -0,0 +1,31 @@ +# dataset name +name: BIOSSES_row_data + +# description of this dataset. +description: the yml is used for configuration of row data processing + +version: 1.0 + + +# Homepages of the dataset +links: + # original dataset + train.tsv: /rowdata/biosses/train.tsv + dev.tsv: /rowdata/biosses/dev.tsv + test.tsv: /rowdata/biosses/test.tsv + test_results.tsv: /rowdata/biosses/test_results.tsv + path_pair: /rowdata/biosses/pairs.xls + path_score: /rowdata/biosses/scores.xls + # license information + # license.txt + # BERT version + # bert_train: bert_train.csv + # bert_dev: bert_dev.csv + # bert_test: bert_test.csv + # bert_test_results: bert_test_results.csv + +save_path: + train: /rowdata/biosses/train.tsv + test: /rowdata/biosses/test.tsv + dev: /rowdata/biosses/dev.tsv + test_results: /rowdata/biosses/test_results.tsv diff --git a/requirements.txt b/requirements.txt index 3e571f0..094db23 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,3 @@ +pandas +scipy pyyaml==5.1 \ No newline at end of file From 49c82e3b2494bcda30510e37b129af84798d5317 Mon Sep 17 00:00:00 2001 From: zyc Date: Wed, 12 Feb 2020 23:41:55 +0800 Subject: [PATCH 2/4] adjust the index --- blue_plus/dataset.py | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/blue_plus/dataset.py b/blue_plus/dataset.py index 5d59eae..74ad695 100644 --- a/blue_plus/dataset.py +++ b/blue_plus/dataset.py @@ -66,8 +66,8 @@ def __init__(self, config_file="/rowdata/biosses/biosses.yml"): self.path_pair = self.config['links'].get('path_pair') if 'links' in self.config else "" self.path_score = self.config['links'].get('path_score') if 'links' in self.config else "" self.data = None - def biosses_format_data(self, col_index_pair=["index", "s1", 's2'], - col_index_score=['index', 'score1', 'score2', 'score3', 'score4', 'score5']): + def biosses_format_data(self, col_index_pair=[ "s1", 's2'], + col_index_score=[ 'score1', 'score2', 'score3', 'score4', 'score5']): """ self.path_pair: the path for pairs.xls @@ -81,26 +81,31 @@ def biosses_format_data(self, col_index_pair=["index", "s1", 's2'], if self.path_pair is '': raise FileNotFoundError("path_pair doesn't exit,please check yml configuration file") - new_col_index = ['index', 'genre', 'filename', 'year', 'old_index', 'source1', 'source2', 'sentence1', + new_col_index = ['genre', 'filename', 'year', 'old_index', 'source1', 'source2', 'sentence1', 'sentence2', 'score'] # drop the first line - data = pd.read_excel(os.getcwd()+self.path_pair, header=0, drop=True) + data = pd.read_excel(os.getcwd()+self.path_pair,index_col=0, header=0, drop=True) data.columns = col_index_pair - index = [i for i in range(data.count()[0])] - data['index'] = index - score = pd.read_excel(os.getcwd()+self.path_score, header=0, drop=True) + # index = [i for i in range(data.count()[0])] + # data.index = index + data = data.reset_index(drop=True) + + score = pd.read_excel(os.getcwd()+self.path_score, index_col=0, header=0, drop=True) score.columns = col_index_score - score['index'] = index - score = score[score.columns[1:]].mean(axis=1) + score = score.reset_index(drop=True) + # score.index = index + print(score[score.columns[0]]) + score = score.mean(axis=1) - rtn = pd.DataFrame(index=index, columns=new_col_index) - rtn['index'] = index + rtn = pd.DataFrame(columns=new_col_index) + rtn = rtn.reset_index() + # rtn['index'] = index rtn['gener'] = 'GENRE' rtn['filename'] = 'BIOSSES' rtn['year'] = 1997 - rtn['old_index'] = index + rtn['old_index'] = data.index rtn['source1'] = 'BIOSSES' rtn['source2'] = 'BIOSSES' rtn['sentence1'] = data[data.columns[1]] From 72138f5bfe60052a054cb6b7815bcc8e6e75e35f Mon Sep 17 00:00:00 2001 From: zyc Date: Sat, 15 Feb 2020 10:12:08 +0800 Subject: [PATCH 3/4] adjust the index --- blue_plus/dataset.py | 44 +++++++++++--------- blue_plus/example_dataset/biosses_dataset.py | 4 ++ blue_plus/rowdata/biosses/biosses.yml | 8 ++-- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/blue_plus/dataset.py b/blue_plus/dataset.py index 74ad695..895aefc 100644 --- a/blue_plus/dataset.py +++ b/blue_plus/dataset.py @@ -95,23 +95,25 @@ def biosses_format_data(self, col_index_pair=[ "s1", 's2'], score.columns = col_index_score score = score.reset_index(drop=True) # score.index = index - print(score[score.columns[0]]) + score = score.mean(axis=1) - rtn = pd.DataFrame(columns=new_col_index) - rtn = rtn.reset_index() + rtn = pd.DataFrame(columns=new_col_index,dtype= str) + # rtn = rtn.reset_index(drop=True) # rtn['index'] = index - rtn['gener'] = 'GENRE' + + rtn['genre'] = ['GENRE' for _ in range(100)] rtn['filename'] = 'BIOSSES' - rtn['year'] = 1997 + rtn['year'] = '1997' rtn['old_index'] = data.index rtn['source1'] = 'BIOSSES' rtn['source2'] = 'BIOSSES' - rtn['sentence1'] = data[data.columns[1]] - rtn['sentence2'] = data[data.columns[2]] + rtn['sentence1'] = data[data.columns[0]] + rtn['sentence2'] = data[data.columns[1]] rtn['score'] = score self.data = rtn + return self.data def data_split(self, data, p_train=0.7, p_test=0.14): @@ -126,20 +128,27 @@ def data_split(self, data, p_train=0.7, p_test=0.14): assert p_train + p_test < 1, "the percentages of training and testing data should be less than 100%" data = data.sample(frac=1.0) - data_count = data.count() - train_count = np.floor(data_count * p_train) - test_count = train_count + np.floor(data_count * p_test) + data_count = data.shape[0] - data = data.reset_index() + train_count = int(np.floor(data_count * p_train)) + # print(train_count) + test_count = int(train_count + np.floor(data_count * p_test)) - train = data.iloc[0:data_count] - train = train.reset_index() + data = data.reset_index(drop=True) + # print(data['old_index']) + + train = data.iloc[0:train_count] + train = train.reset_index(drop=True) + # print(train) + # print(train['old_index']) + + # print(train_count," ", test_count) + test = data.iloc[train_count:test_count] + test = test.reset_index(drop=True) - test = data.iloc[data_count:test_count] - test = test.reset_index() dev = data.iloc[test_count:] - dev = dev.reset_index() + dev = dev.reset_index(drop=True) test_results = test['score'].copy() return train, test, dev, test_results @@ -157,7 +166,4 @@ def save_files(self): print(path,"exits! ") break -fm = form_tsv() - -fm.save_files() diff --git a/blue_plus/example_dataset/biosses_dataset.py b/blue_plus/example_dataset/biosses_dataset.py index 3e567a2..fffe5b4 100644 --- a/blue_plus/example_dataset/biosses_dataset.py +++ b/blue_plus/example_dataset/biosses_dataset.py @@ -48,12 +48,16 @@ def prepare_bert_format(self, input_file, output_file): def main(): logging.basicConfig(level=logging.INFO) dir = os.path.dirname(os.path.abspath(__file__)) + + print("dir:",dir) + d = BIOSSES_Dataset(os.path.join(dir, 'biosses.yml')) print('Name: ', d.full_name) print('Description:', d.description) print('Citation: ', d.citation) dir = Path('blue_plus_data') / d.full_name + print("dir:",dir) dir.mkdir(parents=True, exist_ok=True) d.download(override=True) d.evaluate(dir / 'test.tsv', dir / 'test_results.tsv', dir / 'test_results.txt') diff --git a/blue_plus/rowdata/biosses/biosses.yml b/blue_plus/rowdata/biosses/biosses.yml index 7bb960c..73ac371 100644 --- a/blue_plus/rowdata/biosses/biosses.yml +++ b/blue_plus/rowdata/biosses/biosses.yml @@ -25,7 +25,7 @@ links: # bert_test_results: bert_test_results.csv save_path: - train: /rowdata/biosses/train.tsv - test: /rowdata/biosses/test.tsv - dev: /rowdata/biosses/dev.tsv - test_results: /rowdata/biosses/test_results.tsv + train: rowdata/biosses/train.tsv + test: rowdata/biosses/test.tsv + dev: rowdata/biosses/dev.tsv + test_results: rowdata/biosses/test_results.tsv From 71d91234a74702127cdba85d2b65d0d011dd5516 Mon Sep 17 00:00:00 2001 From: zyc Date: Mon, 17 Feb 2020 17:05:34 +0800 Subject: [PATCH 4/4] add resources --- blue_plus/rowdata/biosses/dev.tsv | 17 +++++ blue_plus/rowdata/biosses/pairs.xls | Bin 0 -> 84992 bytes blue_plus/rowdata/biosses/scores.xls | Bin 0 -> 25600 bytes blue_plus/rowdata/biosses/test.tsv | 15 +++++ blue_plus/rowdata/biosses/test_dict.py | 19 ++++++ blue_plus/rowdata/biosses/test_pandas.py | 50 +++++++++++++++ blue_plus/rowdata/biosses/test_results.tsv | 15 +++++ blue_plus/rowdata/biosses/train.tsv | 71 +++++++++++++++++++++ blue_plus/rowdata/test_dict.py | 24 +++++++ 9 files changed, 211 insertions(+) create mode 100644 blue_plus/rowdata/biosses/dev.tsv create mode 100755 blue_plus/rowdata/biosses/pairs.xls create mode 100755 blue_plus/rowdata/biosses/scores.xls create mode 100644 blue_plus/rowdata/biosses/test.tsv create mode 100644 blue_plus/rowdata/biosses/test_dict.py create mode 100644 blue_plus/rowdata/biosses/test_pandas.py create mode 100644 blue_plus/rowdata/biosses/test_results.tsv create mode 100644 blue_plus/rowdata/biosses/train.tsv create mode 100644 blue_plus/rowdata/test_dict.py diff --git a/blue_plus/rowdata/biosses/dev.tsv b/blue_plus/rowdata/biosses/dev.tsv new file mode 100644 index 0000000..f977383 --- /dev/null +++ b/blue_plus/rowdata/biosses/dev.tsv @@ -0,0 +1,17 @@ + genre filename year old_index source1 source2 sentence1 sentence2 score +0 GENRE BIOSSES 1997 78 BIOSSES BIOSSES In lung tumors, TRAF6 levels can become elevated by several mechanisms: "GATA2lox/lox Sporadic infection of lung cells with Adeno-Cre virus GATA2 loss induces regression of established tumors" 1.4 +1 GENRE BIOSSES 1997 56 BIOSSES BIOSSES Alterations in Oct-4 expression promote differentiation and leads to the specification of ectodermal, endodermal or mesodermal primitive progenitors. Additionally, expression of OCT4 and SOX2 has been shown to affect early differentiation genes such as SOX-17 expression. 1.8 +2 GENRE BIOSSES 1997 97 BIOSSES BIOSSES Three programs, PicTar, miRanda, and TargetScan , were used to predict the targets of miR-21. The genes that decreased 2-fold or more were further screened for possible miR-372/3 target sites using a local version of the TargetScan algorithm. 2.4 +3 GENRE BIOSSES 1997 20 BIOSSES BIOSSES Up-regulation of miR-24 has been observed in a number of cancers, including OSCC. In addition, miR-24 is one of the most abundant miRNAs in cervical cancer cells, and is reportedly up-regulated in solid stomach cancers. 3.0 +4 GENRE BIOSSES 1997 87 BIOSSES BIOSSES Centrosomes increase both in size and in microtubule-nucleating capacity just before mitotic entry. Functional studies showed that, when introduced into cell lines, miR-146a was found to promote cell proliferation in cervical cancer cells, which suggests that miR-146a works as an oncogenic miRNA in these cancers. 0.0 +5 GENRE BIOSSES 1997 57 BIOSSES BIOSSES T47D, MCF-7, Skbr3, HeLa, and Caco-2 cells were transfected by electroporation as described previously. MCF7 or HeLa cells were electroporated as described previously to more than 95% efficiency with pSuper constructs against the various targets, and 72 hr later, protein expression was analyzed by SDS-PAGE and Western blotting. 3.0 +6 GENRE BIOSSES 1997 81 BIOSSES BIOSSES Third, human Wts2 is a phosphorylation target of Aurora-A kinase, and this phosphorylation plays a role in regulating centrosomal localization of hWts2 ( Toji et al., 2004) Similarly to PLK1, Aurora-A activity is required for the enrichment or localisation of multiple centrosomal factors which have roles in maturation, including LATS2 [ 22] and CDK5RAP2/Cnn [ 23] (see [ 10] for a review) 1.2 +7 GENRE BIOSSES 1997 0 BIOSSES BIOSSES It has recently been shown that Craf is essential for Kras G12D-induced NSCLC. It has recently become evident that Craf is essential for the onset of Kras-driven non-small cell lung cancer. 4.0 +8 GENRE BIOSSES 1997 92 BIOSSES BIOSSES The cyclin-dependent kinase (CDK) inhibitor roscovitine has been reported to down-regulate the anti-apoptotic protein Mcl-1 Recent work in model systems and acute myelogenous leukemia has suggested that expression of MCL-1 is a key determinant of resistance to ABT-737 2.0 +9 GENRE BIOSSES 1997 46 BIOSSES BIOSSES miR-Vec constructs were described before, and Dnd1 open-reading frames were cloned as described into a pCS2-based CMV expression vector to contain a double carboxy-terminal HA tag. The pMSCV-blast-miR plasmids, containing either hsa-miR-376a1 human miRNA or control miRNA (hTR-human telomerase RNA), were constructed as described previously. 1.0 +10 GENRE BIOSSES 1997 49 BIOSSES BIOSSES Consequently miRNAs have been demonstrated to act either as oncogenes (e.g., miR-155, miR-17−5p and miR-21) or tumor suppressors (e.g., miR-34, miR-15a, miR-16−1 and let-7) Given the extensive involvement of miRNA in physiology, dysregulation of miRNA expression can be associated with cancer pathobiology including oncogenesis], proliferation, epithelial-mesenchymal transition, metastasis, aberrations in metabolism, and angiogenesis, among others 2.8 +11 GENRE BIOSSES 1997 23 BIOSSES BIOSSES miR-223 regulates granulopoiesis by a feedback mechanism and is modulated competitively by the transcription factors nuclear factor I/A (NFI-A) and CCAAT/enhancer binding protein-α (C/EBPα) There is growing evidence from animal systems that miRNA-regulated transcription factors frequently regulate the transcription of their cognate miRNAs. 1.8 +12 GENRE BIOSSES 1997 86 BIOSSES BIOSSES In PC9 cells, loss of GATA6 and/or HOPX did not alter cell growth, whereas reduction of GATA2 and EGFR inhibited cell viability as previously reported. Aurora-A is required for the correct localisation and function of centrosomal components like centrosomin, NDEL1, LATS and TACC proteins 0.2 +13 GENRE BIOSSES 1997 6 BIOSSES BIOSSES Recently, it was reported that expression of IDH1R132H suppresses TET2 activity and the mutations of IDH1 and IDH2 genes occur in a mutual exclusive manner with that of TET2 gene in AML the mechanism was clarified by yet another genomic survey, this time involving acute myelogenous leukemia (AML). 1.6 +14 GENRE BIOSSES 1997 73 BIOSSES BIOSSES Finally, researchers combined available inhibitors selective for two of the pathways regulated by GATA2 to treat mice with Kras-driven NSCLCs. In PC9 cells, loss of GATA6 and/or HOPX did not alter cell growth, whereas reduction of GATA2 and EGFR inhibited cell viability as previously reported. 1.8 +15 GENRE BIOSSES 1997 3 BIOSSES BIOSSES More recently, IDH mutations and resultant 2-hydroxyglutarate (2HG) production in leukemia cells were reported to induce global DNA hypermethylation through impaired TET2 catalytic function. It has also been recently reported that mutations of the isocitrate dehydrogenase genes IDH1 and IDH2 can lead to the aberrant production of 2-hydroxyglutarate (2-HG), a metabolite that inhibits TET2 enzymatic activity, resulting in a hypermethylated promoter phenotype in acute myeloid leukemia (AML) tumors carrying IDH1/2 mutations. 3.2 diff --git a/blue_plus/rowdata/biosses/pairs.xls b/blue_plus/rowdata/biosses/pairs.xls new file mode 100755 index 0000000000000000000000000000000000000000..98381f796bf24537411f5607dec289c15730b6a8 GIT binary patch literal 84992 zcmeI537}O~_5aTWgolcv0wM@L5ET#}^W+4N2M96>PtY6z5zr?Pph9VqLuHynmUCvA zX_lI1qncx>Wxq@_wNW#tEVX|1Gt1(?KKpyt+vl8n?vt!v|KIQb@4|Wa-hI~Dd(CU@ zwf8yq(eLl@%%^Vc^=wjj9gwt7{?5A z9Qdo@d9BHe_YU^Hl^w{ulO1(-bhcw_JGQZ7TRXbgv7H^;+hHn@>|n=^cI;$FH#@r9 z(Zi0N?dWO8E_U>?qqiNq+R?|3zINx-W3(M(>=~?AX_i{p{G^jsxtNXvZWw z8ts^DN0S{>?3ilDG&>HoW4awP>^R7dnRd*wW40Z0?3ioEJUb4yW4;{=>}a;*5IYvy zvB-`??KsSiciC~c9Y@%4q#Z}uakL%B*s<7-C3Y;e<5)YE*>Rj5%k5ZU$4Wbnx8npm zTI@K{j#YN7wquPQ@3v#D9qa5^Z^ub?oNUJ_c5JX?qaE+D@_RJHNPub^t zI;eS(jlR~XTN3bq%D?ZmW74kTW{v@gY0TvE##boNLE>-u~_s{@xOx?hJqT57EeC*ZfEOj5i1}mP6Z33UD6@fBT2O z+u7er^3`z7k3-7{i(juB{N~dy#GuUz+Evaye8F7Wd9}88c&F_RY5#YEx{a}YrP=Ho zwysO+EvhUtuU#KJGPb|UVw+zPFxsLkx+Oog&O0a7G<2}*$0lLy9BsgFT>?*g*Bb40 zHQL9N^gpDHaclLnQ;q)1@L$nJ|J#OsDpm9zP^14HYP5GQp$q;@ENyRR*-th9f$vrW zpD{Jy>k9q%?Xb5+jGdB7|K$12{Vi!4V#n^52<@AwDe;N zIF77w;W*0xcd5Rx!N#gJn$Gp@&}h!0Z|zIl9@#rtX<6UMq;hmppCUNeK1IrC-`A3; z?Abi+Wf1+1JN?5|x^`0d+_%FbOEU*)uv){=UTXl()#`eqiD;kNbcozCT=Rp~hSR_k zO%-D=PSsx-y8ih8ku%-#w`uVM%;eN`p*FM_3}CZ$HAg-M7O8)68Dw zmqZ<@b@9HYoxO_}JJRK&>a50|Y9rUTb$MGD#EzaxW5XXeTNG`5-BV9{#lDC3Klq8Z z+X)I~@U`0MwG96M<@QRLb3!36@ss&s;De{MY5O(?5!!E0l1cTG>XQzggIsp<_K)qb z!=>9?x=qqySZHT{S=JA8(6aXG{(FRe$gcC_4o&;tyR@H9Rq*O(M{hU%3HZ0t+qtx# zo;BdN^Y*KD*rCTZJ&fL70iWt|#RoJw;9nTGbB*>LYP9cMqrHo_|1dGBOfs}3$GRHr z)p!mG__yMzetLL6)$pRr07RF`{qEiF-p%!4+f2LkL3+}?wf(r`1V1i}TP^p&p}l(C zF`<1I@8^ffF-C7M$J0ItpC2ZRC)E#c6QLew~No6s_+!ws@q4^7`ImcqPM!Au{HXs#fP2&zPg_YHTsb~R>P~^$TeSY+F0Me ze_e;V4oN%d^H!nVw0eAf|4F6o{p;&GOlpOg;Oi%qwnz9=>$)YUVlb_*sman$ zp76qHb&bhsxpu6xebT|=QTt@sag5=wE}<<Pp%`ivBh~a(QciAVu56i6^(VrAQSi!#J`j$cvZg5J3cHYJ;i z7o1iYVOP7LW2+QzyY05t3tWoXHkV?y&83)aYn9^WM_T)b(_gLwOsf1t%z|Ph3+pkqeEvp~4 zVqAm7VYyB=zj9UU1y15s%igw=;jNvJUSu;5XZ9A5Ga}PTxjQs~)>jR3MjC*Nec5qk zPG}1-8I|eeky-DslhK(@mK|3X=C%NnF_}&tne`4k8Jp=u%evMOUM?N~&U+2Uj1bZa)R&cLR_Bp!!c^_Q1=R{MdjNH^QVAUP0Mz=9WHCB5WR&8COp*q=qmr7E3^~jIb z^~{r1>AksTK_wZRd@x zcD~f|or|jZwzct%GwPzBZO~~GJ0w?>-hei-BQT>NU2IXPLsIFq;zn6R z`<-k9lArZUtV)+ujyw0D<_|6#vb^e&cH7t`epZ)sHhnW%>8Fa;_S+k+oDt~uNk1!h zRGvHMI~VPBjQX$7qttH9=B<)=-jV7b=@?N$N7q(5NNhymdq5YW%|WVMM6@+@LAq)lwdlIXf~vKIoo_<}!| z7SugWtryb@! z4x`6*7Y?0M)njE>>ya}8?Pq?jO^%K!;b=pf93?e|uI{$BS;bMzqR7!cRUCCw=x2g! z6T31i>)R%FvFlNET|0i1b-kN)-PRS()6s2Xjan70v45LbyNdO*4U}zSUDoyPZDQ?R zcee;uB`(}gQCxdeiObzkciYxk)djAn*u|i#F5KPpvt6NWO1#XI4Q`WnvFizK^RBGx zz1!rScir9g5L6M4|)pZ(RJ+vrL61W)^%G~xQ*{$ zO*l@tNce~5vG_8nMtwq2WZemRMEf3X&^e#NpAmkp~8!}_OSB4jsfs|&rIuDkjhb;^ZLk6U`jz^O}a`|izm{8!R+ zRjtPF+5{?0XF#`s(Ya4!OSf4L_c~>$irq zJo{kx7hc}b^Wob+vePeSJhblM({_L2!n1Gs^3Upj^yR&u==a)?pB?q}0mtuu?tzP5 zdi;$+znuEY-g|D{Zv0;>5E#*()#s8&e_~aWdRtb3c~xkS0O8*rHhXpNab54)`K8kj z{moq$9sA1eBl~yy$^pOJ^W+_;9Q5H`KX>Hum+o-N*XsxE`;G1o-#Y32pI-TcneYGk zdj|fvtD#@&dDQ9? zPkN=tQD?3_bzPTV-1zDre?8QoM(pwO`YuPFIQpx1ocqKj7k0k3)0_==9K74@U)lP_ zncbS34m2uzBFTOdi{zo79;dxirjeq#q2k*YR-%~rxyycdo-}=*^zcuQ$Kc0L2^%q?I$pilU z{2zYz+~WsMeDRw@?r;CGX`g-e^RM0gr@#DU?p=3ZecBtpet6NUJBR=7?#+LAdiCA! zd%5F%2fSsDjjX7oK>lPmWmoII5 z`^8^7;^d_*Ke%)D!GjMzYr&BH|9IZ)5hs7))dTu1JmP}s_gsF=PA~s#ub&^#|35A~ z@1ds#f9AR$RA$rojPfcAr{>As7^U5}zFF$|yvZE$GF!^gOtKNO+Ef@Wvcl~a!-oD!p zHZIxy>jM^C`u(N{E<5Kpx2_yFZN>}tZ8xLWl}}ypt!@W(+xXSX*WY`=Wp_3G@RWzz zA2jZ>f9ZSg!f$-P#~F8AbJd>LEqnhBdyRVaq36du@`XS5`Hz=7EWT-E{ckQgYOewN zFSzqRclr5uPk!(h&pq((_=mstI^%`l-p1bkJou7W<;Zv`?{O8?feZJj|ug|~shE2;p`;!m9^6lq8 z_r&wpoqYbR!v~zV_DeHfdg!ITdoJnr%TMp~#7i4j+`01RpM3XY@A^aYzz-kVbM(6| z-TaYnO)(3ekDt|cH6SQ-Zc8NlTZHMlV^P61HXUwlrQz{ z-sfB0{&UxxueeX*huV=^4@A9K5( zFB&yv-P5Cn9&+%JkKeT9N86q|_KQ1y_uMfX&wQf)1CKU*Z@W*K1aOZiSy!Mr=ukF|KhnHM@*bloschW8kuQ>9&AK$g~)_X?X@QLeZ^t|yGM||zb za}Ixc_p2Vi_nEWznfTOA3x{qyyT^+M^;!AX`_F!JoA$jYCck^>-aCG}%g6igT-W8t zf9+H|-VqazUc0PiU5JS>WL)>7>tFnaof})x-A;mO0P^e$zJL7v!?*q5YiHke<_}Ig z__6zY?s4+4>n>~>cI|1&vjb0G(ZBakdcX3Mxes>S`i{D@KJ(fepWFX$H=q0Fvmbl0 zzQ+|ecD(%nczCC!BY!?(#f`n{_Idf^ z@4n*R6TkMG^C!*kG3T78_dWKD$DDEg>T$pAzWkz@1846!VE({{5tpsqZm)wbzUt8r zH@~^*=JD5Fu<%#?ul;P}Lw7tn{f(1OyXJRSR!;rafV-A-eeV;=E|<)^V)K{&I=)Pv$q=f>2E*s%>h^f~j0ewu@YAQ> z^U&o3dOZBpZPy?2mp5iT);#%!`W`Jqo__A@FK#&E<~N?Z=H#9i|7Y{dha9!y>|;-R z?uO6*;V&-?y5ot#Bj&X~bFVM_p>pw2PhPt7^DlHAKIrAoHotuJgrDwmamxj}f99v1 z27K=J1J1wawvT+G^Dz^zXwMu8(os3>*8p+3JpKWPZ@1 znHq39==j!af);N1V00nXZtEKIWW7LefE`(LXzNN$O)swOZP|PF%5pM`rpNW-?ab2a zOAS#-MS&Hw;@Ig{X5m?+!sn197yBqq2x1>pe5(4$Ob_PG+$spUv#sw;H0xRs6yZF( z0qMNLgy#IZLzD9}Z5LY4JJ`QwTh?A;w?Qtmo95Qrjf#Al9d2V-8E&E*X}4sqwA&xK zp)o?tvbN=R&(eCU7mZDhsj#AdwyE*gaBE4&$^tvL%>Hqn_D6^Sx%QEveaiS^`>5m! ztNCA%!4wEyG@WNv)`j-(-b$SvcI({ecF9}GZuQ@>b6>Y(>%@lUma6sP?^63)Zzz;D zkF?u^Dl-hS-jH1!?iX5X@La?7Eyj#`V+~}ivQO&_YPH=>#OL+l3a)IjI}8`w-G%kW z5bikQzN2+%4=e3Vi?!+A!+N{l6s#SK!$Vp+;W9`fwV{((-729N0 z!&O^`-cm!08=e^aWb5$Qboh6QCdAPjH%USYWUdY*Isrp%jI}n>$zh~=g9CP`L35K; zOCTCH>Qjr6$31TKMkKdjab~TN*R4`%PKTOojV;!}NCSc+E9~zQJJwsrYpt!(?k8@x z^W$u#Yg`KBT!Wv;ZF%?$_jP}#BfZZ0Xt6f9yFREieR5TOK!*cROt*P*4hy2HX3ZcYluWNXfVhxwc&;MYP*41$nzbtq|JF1a>CZ-7#>H1k;}{~ zzy(z*GEaS%;{>Zv4TLC{B%2hA*MuIIT959(>kUJxOiQ3iHXFr@f7oC>3KKUI_z1pk z@w~gjV2;OG|0migQgi&wiNPsimQu=NjXIf$b8(qnb)2;=wVvfAbamde8 zHd%ipHP&?_N_#rduERgTa&ap#c!qV)z{dub`bnhjL%WeWa>rRm7`MYJh!w@M&Y)zv zGW)3WkV8a*9Gsx6NT}Cadl5~n4us_nNo96G1BB6yqKj&a zY-hL(@+3nV`N4>K(~Y6Vx{XHiTI+v^EzCk7kkU;Tof8i` zPO>LLU`aTP=#kMoA`Li*f}-QZ`N165dK3q7EU|uC?A#Q~SsLvfY;jkJg!shw7K4en z&<2huj^fLSK`bl7=m=NL$L$a+;RcSw6||cDb1Rh@b~+|-TtL9jCT>Nsl#@vmp{Fwa zlqYo;fDd172;%*sC~!SdV6rWDLT+g=yDbw|g5cUKZHE>g8BY&`WdUGYE_C6$$1m1c8bFcMTEql@thwu%vA=t^_2=sBc-y3RG*`}!cw6M`-+HK)mJ$0vRwC@Vgt z2YH5PZ6z`o53we&KQanoL_6of6~w9N5S2ZGA1O645d0KTw^Rti5OpChgMm?GIPjuy zHJ>C4(h#*6_Xf+%OA>tg(H$J$n=_Sq`Z#hz4apPeH#rodWpA^nvWm(RCqu;vf)Ze3=Ar2 zWQ@nkUJ)BigJEc_X5T&|MwdKGkl4x-p>HRZM!Oi5)a*)gF^|_&=^)XkGO@;xWhpA{ zE_ZR5FLDLqLcW^PYgV?>CdU$*$RjI*5KIT7P?7?pJs{!6HIauYz{BpW-fD6{i>f5b zEx?F=VtFqgE`&wId_|ay%(uTqCG)y4LigIf=*w~j^H>nT zR$@VjBTgZNo3jCuVoD}Q7^e)ftYOAxB|>Wqha!x-E86keJ5?&p>F{xmjWj{r`3J9= zp}4#E8H(4VIj3tp(xM&ZSG`?@k0lC7;xA0z@pMJbJ z1(q^v&S9M}L-QsdQLYQiAp3M{lS`0LvbL}3i`t7UcZbJF)dE3#Ww9uV7k9Hthb68v z9Em`}TR@LmgT*5xx13u;Mq}3O{;uOE6*0N0$P#LGbO$e3#C$sI$FF7QDzX$ z#wRWfR&c8{2hBl34vu7$QR*+9O1H#)hJz7BS!U4#9nV0ebFl|iAF@8z5yH@anpEZ) zGV*SIUmPF`f!H;_(>J)UnB%IWG(cQswGeK)kBQ3Q z(yCsdj;cceMIMZ;1Z2U>tv^Uov}3kUFv99IgIQ{D3N|o{lw)pEnPv#H$RPrhuZiI3 zRK1%xrFZv+gTpP8ntKxMdN9jUkY?MPFftGbYd}&6#$3=dAt6dQ_gMl8W;*ZPWS6kK zjjp45#dMFl8FEv434)%IdM1N`DOZaAO7$x;Y#AYb5BNM%4K>gT86IaLejlpSN^!5aL1Sw-teLz1}A>)dL^uHQaWqDbYVZU@o%td#2IBNb>Ueqg)VhaJ~XOL83h-v*^A^X z;x$PtBiaoO@)UKVT%2)vmUOF!QA2H0$`qUFkG3koSo^ldWH;8#U`}Xj3^Q3mlGeJ4 z3oS8G%4&p^9kIYh<&)01m;$uTygQ}(3_Rb4$0IPch}AtD8=b=p6}5oC8rRqrOH##_ zcfed=j0y)*VJe0sTsTDtgn^VIvYCbJgZxc(sVzTtenS>^Pc-&vAY%ZJ7P=m~;RxgE z3>DR(2LxC>O^hMJb5YD!E?xO@3{4USToA=s<;!NVc%9pm%52k8BpMyDEZj8-GHQz? z8j=`CCJFIe!4^y0fbv#Pmf2QlPukFy$dTxbzwu^YJ){=$rGk^*vW70#OVA+u5?%L@==zTjXXA%w?##aM)I~8$i?jNQZ6IP53DDkilgdGa%W@Kjtd?p5Jk31&D=1OL_%#q_RKRj-BucGWiI!D$)ra>E-gBJLmT?ma0JB*F0 zDAUjaD-59mC7(!<2a&|yG+)J-huS%ZWg2>{!D$UBtC>pH!9j@}H0Uaof(co`SC5pX z+iAfHHwNx7UfGpL2AXRt5F9~yiBl+N7FV5X%g%s+4h%q+jN@Bc(vS1H)=eD;CzV62 ztF}Xo>-9+U)|#-P^|9hZYKf|8wH=1Yen_p#%8OZImG}X#oHnjf%?-EKaAVCmNo7Xh zQrWiXJaY1i@Ki2>@|;KSn86X&vRgsiljCC{P3X66l*mjPl+Rs-LDt>jw$P&TXrA@e z#BkgdEW|BI-({6~rZw0u;#QY1(!$TEa0z8tX15R>=NHH!>qjA1br)YJ^kkyhqA*wI zT?*_Vwo?{Dp)eT=UE1H~G4e|CG1Y>Vp0Ci%hnq7u5h*PtZAjN;5$`)y!Fai?Kh zIbAeE>7qLxWmM=29s+!z2;*Cs<_Go3uJv54K*PimtwbEGiub9PNC-WM-+PhJYK_{K zxU)(l)16~lKf~0oF<_@+Rg-fDLR!v67Cg7aha>=Z^3 zylAu0y|!f^*{LfIuB|9TL^#$Hp6G$|(Ut_T=uTh)h{wFl=U60|$_J{^&pR9?_6R9o zf>$+_8MHhc1qU1hA<>J#jO`{2Zg|TE`vKL8a;hvcnzJyA)OsbnEh9;q;(O#I0X!BH zyO?frr4Q^;JTi`KitX247$&?ewJXYlnMP!0t2Hyq`#ukW!Q>)Z*d!SFp1RshiJ0Mi zRok%|VY7Wf32?=9bX;)k?rOdC2uHJVE}x#l0H$G@rd8_)H4W``jAlWPam4~AGJT6H zwF6tVYJ^QP$5aVLHy!6SFUx*EGup1zOd4$@b@j5AXp|9@ivX;mX~!%U-343rjIFXC zvaYYMsH6i3-i6s2YMy6BgE6VH$WFVdVhspax3$GC=pPGWd=;OgJhH`={F^Znp z!LNiuDU6ht5;L~s>W2({t%3}_CEym_8|p*#fTTB@T6+IQL(PO z%IJ3HicusvnmK341VBjxGo%;Mut-#?+7_9YqP}RmDyr`9)lR;`I)w5VtyVIQI~FGl zHma~lPNHl-YYHrsDbWN9CTfb(Xnpf!g6NHvG^;Skgk`CXg-A5Z;`Xs-tE)6x*=K0z zMWc#lQoOeAo67oiHhs>s8`0p3`wW$yRFR%zso?0$S*4!Y*^qeZ96+0;Ofr*yzN*CO zgVlWxF$Ttr92;03G!?apeki{pFNcOT#Xt%1zzg;HmRHXU^*DFXY8hn^tXgmu<8_7M zPC$u>>%Al|HIWiXu@H+GIN!FZ%&~ohCB13%XO55d7DEyeb4ru2$+&Oc$oCzqr zd=5)%T+g*AD81v&vScBE>;|f=@@Lzf^g$u)Dw!*0#j&~&6ED~nvkR#V-m^aBC)6O> z`GdltiPhf8>sR0z^Bs*ZAv5D-TcXn}lh=v@S1~#XV~eRsWww10J5;v-A!Um&P43vu zhl>d-3IPa7X;(H`guMzpQNUS^R~TYi3(4dgGR3STC)E@Y*(or@q0`aCU0YogVJAjg z#Tl)s7h_aRkEa^RC*-8BmXQHT;&b-)(d=4cc>)eIwMPsVM;S%KhE@59iK$A*VLw_5 zi(s~YhQTn83OlJu+$YwMOiC(q?Sza+0bfM}I#pUhXXT8TYP_9UAfJ{Z`RGBGc%K}C zc0=;Dq*6PV5oM^AN}BFUH8c*3Fi>`*1=M?>s`aR(_$i%YBAtSEw^fk1LE} zddF2tG0Axx+p=<$VLOGI26?c}T8R7`Nj!cL$--SoMai{>u7qT!5!Yx-5^`Yq@Y-bO@UgI?_`Igc z>A42`0q{z*af@Nf2B_wmC%oEEf{JAyN~Z07I05Z_Mx~hK;`${sje|+{ROB+QB7DEoe(%iazLhwIN3%*GyU=wJnn? zciB;YHR?JWJ^wtmtOn2gpQ$7b=7uYC+cXOj1o-UX2d<)<=({2YX+m_l*#)fz3u=|g zW?$2+a4;%dD0bi0eyDXK)z!qEC3`I&Xkrr6hbSx~L_wY`(lDOv-beT#JyOpUFAmF^w#;!KJ26Roq+q&vdyMh8x@m_%JDu(CiZ=5$m=6!8^)Bf;7FjEV+YYJ~+p zHO@Y=MHz+XV@1Nt*`rklr3jinWmnU(j3i0Ibtt<$(5hJT?7NDWVZ+*tz(Z}$fyj+^ zfs^KwKu!I!&jCgK^K<;XAIE*E7aXV*y4+ooNF8Wefqak-M3oUu-pF=v965{xZkm0@ z=`)jL{DIb!^e($lm?fI>n`fPhK@!S5>jApsqZ8+B zRaqGXUY^-VwsuO3KS|A%RL^9CZ0&DCi#*z)RgmslD3qfUc7`-0&%{Wg`izPOu{uW@ ztX%@gfi5&<_nLfk20k3gF3LovQk_+nZ$0vIt+Gq0CKF2HeD$^}*|L|^%IEvA0EQOR za5+tA@i{(>D%UN{j_KbyP_Z4z`3^t;w zh6*rHLit7F^sDBX9?ml@+>}&M)V$#Mt__SHL{-rAnxoGW%h)9GF_%XNSu(){U=s$+ z^sSs-{|KZ0F&2CPEv~g-;m-i`SVY9|U6sz$11)k;7owyF>s&XOvHHGr`K)@o_j0It zffkbqYig`|D#!9EI3}q{J8o9-iSIrK^#?+;X-VZr0=y@hKJ6sw%T_X&wqt+se)ee2 z@eIYuhQxML;XbFCdhkqAE=78-IK(W5E8EzQ!s=0&xKefO*G&%_QnJGmQqd%O&t}jV zJ|?5vSEX};f;seC6qa%bu91#09nj7!<;u>y;`HYqbti;}d3GaCqwO0Rlys?7SnVU1 za4F*dwf#Wx4svCi=m}O0(((e3UEI#)%!?ie6T+~Dwra#+(>qfL z43Ase`<62#J70o2utEu-lTgE2hg1Yr!Eu0Jap9XQtLccmk`p2o!cU4yU#*lwq8<0) zcIWdxco;3j6;ElUk{_`3Yva-g(Fp9d<|_YKtXMdWa%VoW%Oz`X(4E~xF9nor!Zx7h zR25_!Fbo7x0eadUedY;CaumKB(+K8os{iOHEi zx>6DItNk%a54--9imL?2)?KVbBw?elTZ^GZP1H^bG|1f*SA{(So?^Vue)Vv?{T_4H zF?cxOS@n%pI@EL6dCK3c(87a7N7yH%L)RYE>4P2MOi$KYpkP-jywRGnyB%(&@m;NG z6T~UOC6r*!%GR@smT(_P+>*PbYT~#a2h(714S}K&cDt2+JDNVxI>%O;i_^)jHH(3y zGcs{{lm@Z&2SddwmW}xv1r0vig2|<;<&=%$bM+RuVIdJXtYG z%(6eq9$>)Ttul$~{xsv~Nj2_Rvb{xqZ<(!P2rjfD-y0HJ2W~W`W(RQgD&V}`aOj{< ze-vC|;;%^qHUQi4mV(IIrnHol4etvBJ;cZY;);vgk3558j3p{8yYk^LzzXJ}=Y+rf zJv53+(8*}ooom8CKA!?e*`z|%QQdrn@Vo+q57Qk5E!HoQ4ZivVhvYA!h0+VuO6{3+(FE6%k_%!&^$MhY$Y85 zG5rCftm)(vg#0GeayJl@FK3^`>(LAMhblo8l}%g!%(BD1W7ea1#FQ7(rHbr%LbG9~ z+QwllK7*phmZ4_*UWpjo#JJEfUTPOQDkwaQC5pwdd|saLQe?$(}+z+pBSI~Lk|o|!)H zVcrRyin8iUT)=GTA3sDAM(*qLFSK>7ebY}%u;mC1Rs5A6Pq%0-(_3y@kXip&W9aZ3 zRSN@}?zyouL_vl&@ZWJOub2j5PpN`LaZ(HoLoE0t*}!VBzu zgAwMHC0(G|hMbrJvPflX>Tt{MVB{P_n7nee5j4^e&&M=vKIL{7rRNZb$MBkwJP>~o z2%1BZ!elgiLmhWz4h_0YtaO3GvaIvOYie)7O}`HRoMut#$dHRRdMBYFCw+dbH4~vZjD8($`wCG2jt^D zyGk=p&5wOnQfUezk8#{t>TW>H(`6#VyLI)+{@$4*FyDq}F$F=DFG)v=1@u4K=U`O zjuGPrvC0iA=rHaP_KB^?_q!TMkJ0gL84@3?T?5&vWSqq)5klt_im(vR;}{irW<%gW zgKV%CO`0`6_xu;{br@mJY{&j%%+8{wIy6sc!d~5-y_IQz#Wu2Ec|OmoRFbtyTF<1|wiS z8NGryZ7u>af)s8~0hGXmLvroS<3KO@DuM^rx5t2c~9Gqhx+fc8T%E>15L8XkI?73NqCU`pyhHy=ttZs?n$->zNpPU0bq8l zN5+uX;COUb8%wV|?l-%qs4NaBpp*wHY!rM|EyKRhe{H3#4%C81({P8H)T}UgErvR7 z!kg4rg)R^4MYqX3LC>?Ot+D7i_Uvw0d#kt;2fpF_wE(IgXp>h!JYaY9Qs#4H zMXJ(d?F2PJO7SXEWX2{6>MFTSMxp|l4F^C8Mj=K?jWmKp>ye}~Bki2a^KL+wIxta- z?uwDfv$k@fDhWW4Jj6uqQaM*XcB#w~6|S~*{9}>KS5(_l)vP1*LKyH;NYrgh@cc(3 zpFIy}u6a#TQR)u9vJz(^qwE|B1*rmhBWqXUp3n3V93Gv>>5B(kKrwNJP9NccK;uaY{Y8c={lkFh-LLT;eTwh& zcz6JoNe62m%sl-U0Hc^Rx$&uuaA*FUUu||Hl48oZzyjrxDN;FRR4BFIL~Ax(1bt>s z>Kwrcy)|Z;+2XK>peV$q9%_@L?YeB)Xr4`e=UWQ`U@DpQAMxo0t^^2asX_ZMaJpUP zi%*OsTUcXL>RDk#_BX&vRFJwd{==QMCPt`cyp7Ps(6;FK91Tc8O4l54NkKH=@qR zQfa)iK04L7tRv^(_9EeNmHqm$Yft$M!1XA~TN^MG+Cc>k(RMI+D^!Gd+~CCUaX#%V z;=LAw$ma;ZL+$-I`&+hoLR%u(G0K{QMwaoE?JM><3Zue)#fm7Zq9`P&GUi7HvlXRm zYer=7$2Xap;`3ceEHuev1w! z6n<*J^N8{}8IlvPToqY6lUoHzm%HW=|Z-D|lV>lZ;tVM*dOH{ z4ZtO$jg&(TLBYZ{NCO*;h@RlIlcFjnlT6xNi3vCK;3c89XWS%3$_yNfay`gnaZys4 z7RZrhsQSYLu-Vo++LnEZ4U$v2&mc8I2jm4oo`^)%%x^s;MWGs~bQ>=yWMc-2=1C8EvaYnGmMMto<#Kjn z&^y$q1MI<1j1F6mnR%vMY-?h zCnb{L;Yj{!T(lGv9;1#!%~!FZp1W1OJc6QLAO?w`1QZJNYY#6_)4M2z!DwX}Vjp6kM*6 zcCKf6+n(jqXqOXv9HDGbX{*jM*KDdeFwx0hVEe!iHQg+mH2Z!N*)6UnUm90}tS|*O zZLvG+;ql+NCHjNy!htmirXFSZH<**FfcQ9@Il$rBMhMTv&`ym7wiTY7a#T1s-MW}% zUCZz_Z^s1js;n&GU*o2lm>gt{T#{9a;5&`n9}^^0wU3(Wq?E;Ig};2or6Ktxo7+VO zR7*J=^;#&(#_$SxB!sBAxuqz$x+^bq|A1cbdw1QT}&Xx6GQvBqRa zLaUi?`9zAq;|nE(IX5pn1p&(|1KAmCKDJXXLO(Gd%0qG!h_@I6%5*1&UueTpHnu*r zOrl+2O0~dLV_sOroofBMbu2Q<@OjV&Us!#`!C-fIbL$j8722E2>=q7SX~ne6aGD{Ou_X+~Yv>YBIT@ z@x^q8Hc}eOpIgREWURiINIX*o0zHM}2kk7cBC2|YZQz+u> zuJw6w*P=$dVfxgUE13L2ttV5L;Q`g?yEco`D^Tx@WRa-$HegyxtIJ@tU5XyC9LR@XDFV(Y9D$8d@qxYKlN{ zh6-#Dp&Q?pS{vihGlY8v6Z2V|g#qwMNA6mg3)^lG25Xi#YZ-U&~7)7=iW=NjBPhLhDUf4J3V`Nl<=(1r8@sQLLf)#6|7UVy9CP+Xm_yG}Pk#rg7i1=&i zEcAKuiO#Ct%qZ`KeRrer443}_CY*_a7B}#5-p!sN^BUusu@Ls(6q1%_^`qS3=AZTj zaUMh)jghQVy;D5&Gz{S}+gN>~IbE%(MxCoI05FO5ktlTM12L584=Iio9%Lc3GsTg0 zC|`_rLTg@s&qykhgF}F^y6@7Z>I`s(%rJ-(ESW_(z({wpTP^U4=%R;2l}xkS&Xpmd zsW>XxiAw95-IeFjQRAcvDjzVKe#1IXR1~3Nm1e!Z_9LH;1>(lQgMCE@$1Q`-VaQh6 zl{bmjjBRaJ~=R@HD>Z;9;V&hMD%!$@)?m@lvI0ZFSHxB!>E9#=~KBxfUm zEwJlx6_c$O=?G&HNAQurDCv+{$8`{X94&@ek4K(0aRWaIH#-DaL!~!rrL%34Hq{hn zlodOPYs?cV!BNZBCTJoNQz~tXl=Z*9&m}d8IN9&9)Kx$V{zn@s1PpE+} zV-eKnm0f*HRo&7X5-Wq_zFGq6=!7atEg|#|G}py$O-H0HhGYrGO<;xDr|-B`p>N0! z3ngt<*5)?kh(%YZG4;@zJVBoLNL$c8vDaD4x402Q=z(WyJeVHtR;d32xp zp<$ryY>{`)XJr~r@hPrudytPwC-Oj67%n~X-5>ve_eNLHM`;azomDs{;!SlLLIl8f z=M#^H6|3i?O1Q|vvuMXV@1<&>to2L(UR=uqf~qxa5Db!| zgdp9Ze~smLnkpY60<_q%jbgF~e9ShUASF*IK)c8*P$`l!-KGFq5n5=IN$P_#1vaY+F(D80K!-l6 zwLw}^8$p=wMLJzAoufBh>&7N$ssshIMlk4GZT3K^@(PR((Srw(6x(S#%eLSBlv80v zqX9&s_ zC^38zjjSBe6IKcR*ahjU_?caD^lP%|IDS3$#!iQVFLeFOfO0ENB%%bSdr>7}qFmiS&xfAG_VVmio9381Tj)^Ou6MC0Tb5N7g@u27m%@&lrf5Sb9y zFd2-HnO}C_7=(eg@(eV7x*hK!FOAP&O5zbA`zRJXyp|c)%`i+Gn+=}q+Koq z*@c`dj@2#2A3TEbq6~}(yLhD8Yd)KiTMNm}XjIkNObI#e6q zIEPkrsg8Yd-wWOhF;V>IvuKFt-F@Y;Z7^J6&@~%6PbT6b@>!DlDduAwfFEiiT%h zNkj6*q|y{XeP)AEd7#2yxuHaq7?w_O)Z(Ov!)({lO96x0%79oW)%Wc3j207tl;knE zxDsBrl|syyNA$W)G`%vs2&NuheAz*MPHCoW1~y}w3Te_3bW_?44enOp6g03?M{WSY z$SDyBHK`2`SE7)gl_iWqGa#2TC}hZENt>#(Q*|vv!i2KLS9~PJbFm-yPS3F1SG$~; z{FD436GrJNR8gDUG^BUvBZMMka2}en0&fK2u2q_MVPcf0VyGZ}J=FfqvR1Cw12|mA zVYe$&42o`Xb1XHbuiBBy^$a!1Y_^TB(Lc45VImHEX;a4$3Ou{2@;zKrx_dZ z%GnSa<$c`DJM{Zx;;k#UbYy$mbi2`eYaA~X0|0OzU03I$o%@AW?FmY5G>X=GHU|Lr2 zF%aNMp_uceMh(gLlS-ov0P{GEtmG7%rD?i#L%RDAx4u+QGU;k%FMm&z?H#s5oln{j+(-a(jiBM?y|njXNYb4 zGM-0(`=C~(WI6ApZf zRnG9+gU!ZIf`kZ($&0V!svxTS!=w+{Nmy2gqW6(JloR06K{Y1U`CHLd$;jX2f`yPt z5>F8nrX7D>A`;0t^qu=cSK24W)r>|Hf#T*O_Ji>hI5vf6sc;Ly#OEiK`Nj}8Z%?C@ zqn9tQy9YclNMdoAF_5S**Tn(*^O<~K8#520qZ@3IP~<8Z$08lljm!?I1fGaz)MAIS z8+j7e$s4RPlc`}-U%4KDeCqd~4ER-9^2(oiKNlfG`Uh38< zJSta#0d)y!o#Hbl;FWM$yRK(G4)*SY+>DsI@xwZ#NNiP~X;rOJ;ajt<%lVl_c1AGK z?{bBEo5^PEcp#FNVK(*R2@xSx#%$yPPBCdBYZylYfMdg(K)kkWdYb49ZjK^kMD#u8 z!7Q;C<#$&~->^lbOMCLEadfW0$o*@AMM|paJ?)+^(F)#-5iyL>FYj;gS)QhYi(Gxy zb!ax^w1KTFMHG!N;~f2A9Yj|+ro4~RHlW~u+)vPmXFFtBXx(yvx2Jv zK{U2%c9V#5-fOLBUv%CG*GWP!oXw*OBfu*rGr~Yi08y*T>_^K>^cj6xt*L)Be!P_Z zVDO9}<^P+>EQa#GC7rz>sbI3pLV>8<4@Sd_xk-!+@;32l2Pm!7nIBl3Yd!)k$gY=V zGZY}1a#!n4cHe;>@yeE=S~{c=V=QzNQ;hUYgg6HLb6IRHH}EY=1^$0Cv-PesE@@^> zXaMdD7mXuR5FlbI)FWeQLabwXHljHkvOyDZyVZ3Fyor9dg4zpHV%6V^OB~ePsFix= z1|G_m6hULucWod`&;*W&xo(M;`)x>UgP6>ttj6eZE2=yMM8bXY1KFT}lHwN2)UVk{ zX3G}71Cruo!%ZZbq1c4u^gFZYRg8d0W^Kx|RJ_q@PFXgr8ZoKHdyJ*H-6htO2YF_l z^hz$>V(pyw8d{cl9`{Hqv&Bp$S1~5)F#@hM%qS2|Hh*(RfT3$P`@y6#BRF&xBvp0F z#~l@k$gCI+B9#|8lVCnXP=SC=$_3RLvwCTZG?X6YH_&5xm7W%7si6L^FG#i|745=N zwZStid=T0t7oN>rqDj^wT@uoy0Ta-sKG!>Uo?@0X3b~Q@xGbI77^XXP%+GyI$H6zW3o@Bl2ug&(l~XL`zkuRxE2Finl)=s zo>Jj?s%#B^4I)GdM-zGB#UaGY`W{xL@Y#?i(xmhRFyHUWXP7D75T^7h_M$7rotuJL zug3^z0_E~T@jM0>=Mm_+7*o3limQ@^dBI5cr&8BruIe*e5;m=bxb=t`NQ_iYi4^-g zeYwk#j`MG~NCnqo1qYpo6F}HTV&2%bs|$nElAh=nB;ev&%`MNQoilgy6Hz zIZts6HR%uWcS9-tvGE+*+QInRb)8KCPCB@H5v%#r<+{G?qu3(*qvMf-)+4`f6Gb}f}t z*B15-L6r7z#pWPmHd!F?Y^`)r;LJ#Cb-zXMYU^%1q!1BQqs6=O=FA8;XZ)?!!I7o*!*Hxc#RMFNDhQW{ED7e|L_ zoGli7vyWFg++ar9za#D4t&hi=&9wO?iR3&x$E|p)>|ee8TsP380`x!=8dG7l^20Fn z;anrfgQxJB9cqJ;0hLOVv5rCTVp-JnJiQSn+p%^&B7%TpmrDO#82|5HKZmdtqNz4vZiI7902Y+-K5cpV6fwS8W=mq;=+7!o& z`MaxIxu15srvk$(lhvi{=V2{ac@cPyMDimxBp*#GWTVUq>4@NnXnh6~b5B`c zR^LGpkzCjZ%BNCGdUFij7F+0|+9B(lweBMF}~94JU| zeXVx2*~wEG`yv|%r_5|%okT&ZiB7*=ta6Ktq&J(7S!+&;U*U2bt8qKre9HLLjj=+) zsyEXmo|%cr^J%4f5@?lBBX95yN|==#LLV3y15Y)(!%CB9W|%(cG1w{n_!Dfcd?apGzup4HN)0C0k;3-obke zAAV*hA0X(KfZS!6LK9|jon(UN!!jU4TKjH`T0GUBWu^JnDoqDk*TGiMj$5}}!-`Xs zyjUPPe?KBZV{|jnhEfC?Onm-K*Fa5CMHin}bG-=JBRDSJ3U^8|rBF&y1&QGFfkfa!BAVdJ+1wFd9L zDKdste187JjWHI;mL`>^Ds*CUmbWn~ZkU2A2#WL`yE+ae`JhlzRaA(IFy_H?=GeQT zssZehmx76;GpZxw^p7_<;YjW}!1aJwx1uaz@5Q+Y-BoUcZRc0F5OSkg0`k$c7}gf}bi zt4U3eCP>LGQEQTEi9xQ$BLi!JRV)JO=p*FVK+{wANKouS8tcNOhXcdBhPwdB-h=@o zxbea$WmfK_br$!kA6{@RjLJaDjw4uM1fG{vngji{<}5xj%+7E;+~!HF)*WRUWv(`x zH@ves0(z{dqB;PED073b;{3v8O0n5l*S2;x*wnI>HDx5Y8?D74Hz~}UiIjH1Abqqa z%Ye2KLG@!$Ln*(URQ_F7z&)dXvf+1HR&ZUYRZ3{Eh*X&qWJXGp{V5ZM27xGF6gj&$ zU1c)t5sPEeO&w5ih};0w6+g1;6SU@6J{rtnXOM6`k7i6vaKA^H*~>msvKTK2VXPtY zS7;~-smSD!C+<=4NDt}wO|FXBV}56+NKh=p&Eehgt6Zo2L$Zp=H&CdvJ!5``(X2d) z)D{lJTblSL_YcZSfI&ni9g~$jXD3m_HY%*@>;S3yroiM!7 zHsdnk9A^`_ai%qu|J%6-$konJ8@T0sNuKU#;eFPL zzFpzS15|dgqio9##*hz*F>}PT(hnG-xcL-a6@M!7!V8w*9oJczsWQth)T+lYGjV?1 z%flYQjadP1bh#Z&gksF}2MmTW6VJ^yQbX@NUZ7 zp~n|0eMpdv&o!@h86cr;>C}qE8MzfK3`c+*rT5sGeo#Q(R#C>a1MlxQuLwTMLvuzY zFD@6CIJko)m>`?zo*c3oYcOo9XpiP*H*8R3#r@$pwIL~*x?{|S z52&RN=QD)?L{FWM80(4nI@=B*f*lJ{(bVSIhL=NZ!Dm`pLC6|~ zsz)+{=wg**;fNrE14P`_X3?ZCSWtWz0eHc-wjX6cuA?jodtn@n!e#?ZU*_d_RgbS3 zuro40=ayZ?8dtV(=siL`)m$(ww;)8r;uy-*kbEqIIPIV1(BHTJ>`K-c$ zFC-xP>?fjMaU~vN#*V)#A{J?taOobKYuE;PBSVn@A zm-Qol^N>$Ph;evcWzXd0m>shzkE?B=UG&rD zf3GB0)$M6VIQcez4zWJ!ET@BG_UaC`9m03|pS2)t`$gKh-nhE4q0TP`Al97Py86Z0bNOTj(jsX&_1QINO+%-UU3Xo_g zkevb~dI=;r0a+g)>jEVD31nS>L^FW|Um*Jj$j$*04F$4ufJ8Te1bZL{1W0(_l%S(P z!r!Lg9f5>0AomQA+XP577szb_BsvQubOJdrKyDi#(On?%-%SZx3nV-Ma&Um`5+KoD zAo2H233>}89077jfZQ%XqQ5|H7a-AGAmJ8}4FPid0Eq?ziKlEz&|M(m9gxEVWY++R z4g=XWK-SwgAmJ;JBLd_O0kWTc2a+h%WD!7+a2d#v0dmIxxqAw^V}KlxLLvbmM+L~8 z0^}Yk6OCgalkP`yrE&+0Q z3b{*w9FamIe<1e>ki7!r$P}_yfaE%4gf;-VZ-DF_AV;N;y#wUv6cSAVa=!q%Yk(Y+ zLhc$M$EJ|z4Uqc>$UXsbTngDIK#or#(J3Gg2#|eqkbMK>gcK4D19D=3+$})vW8aa{ zZUJ&%`}U;4+-a_%rQM#%;D6vBIY7PjSBx)cZ?O#>F1De&#kK(@ZD?*04*e~*p{d0- zG_=@;o)+8C&te-|T5Ll*i*4v=u?^iUwxOZLHZ-i*hJF^?(92>Q8dz*Y4~uQ+U$G4> zEViM2#Wr-X*oL+h+t9LN8@g6(+pnZ;|B|)?O4=qC+OW)eYeVBF1&yx{8qXMLe0|V( zdIu7%G{{YY>=z&z1;~B@lKz22SLw4c^w~c^PO|Sn_79Ma_6eY=akUrzyLWjg&Y_lXQhx>5q%1BP=K7BLJkU$b5clb zi$14@J_iTLxhW*`sU|Cf3r{SLJ_WgVfIK*bWX{DNEkR<3^f@i`IV3=G4t@>^kPA{s ztdl+kIW#~vr;tMf>QNc<6f&I)~w50J;FkmCd72`MCAiarH7 zAwagIkP`yri76z$i#}(EKKBWbt5V2)0_5rx5|2iog4{Piu1O*H4Uq3nA@M=eIpOJrxSU=KavFu4)gv=)?d-r<0Xr2c*kNJKC;*boy9ghWU&p;SZu=w z7TfTI#Wp-(u?;_1Y{UN*+wg+LHoRZ44Ifx+!}k^2@PNfOJYTU5A6IO{(-qtBaK$$K zT(J%RR&2w|72EJ`#Ws9gu?^o=Y{SD9+wg3~HvC($4Zl`w!@FhMh;Wmv4V{@6Y-3W; z`1ja%;=!b#@$a>7K%$ifIZ2Sz37V2qQ^>{ud0GmIu3|-koE#wEmqJbsknX$DV1v9z zkWB&d^c0e6LsPQJzA?H%h2!9W=ac~X{uFXbfIK6GMB5E|k|3uB$TL&OsR8n=6cQUS z$W4Nr79h_~A*Th%52TP-hC$vVNV`qiF#BK%d0>G2Pzs5?7-TX(;5j`&o|8gO50D>D zA+aKZoFvE@0rK1waz=nWFNMUmz*CS11;~%2kOu|G^HWGH4m<^EyU+~J3sT6L0rJ8W z5<3LX1p&`l0rH|0a#n!+XbOpSf~O#72gr+4$k_q%V<{vy3!Z|U6CgjHLe2@0m!yzb zGI$DdZh*Wrg`688FH0e@Z}4mmc-peRQFM6$110+|X$p;6>D^o~( zft}eTNPCW(^?6kaIX^&tB89|5800;Iv_)-$ygG$k5FkI9LgF_V?T~;t=w2gom^koY<9Tomv;B0zEuijD}7H>HqxKkyXf zkpc4N6!ORbc}oh3PXtdv9+kuMr~vuJ6cSGfo`O6&K;CL?jLv#SlRZlNpPL69WBp}) zGc|(6C2dPe+Lo5I9b0Ha^Nz7LqbfNx@bs8K)e8F#RmTLXzGUBkWMqS!B*?`9vL%IF z93XE`A;HHWHwkh{fb5$>E(wrdP9ee4Any^R?aDVUekFxm8X&)#LLMu~`s z&G&y`?eV{x?-J2J_7_2$X_+TWk`8ukWk*Llh+0@$XFL98HnxquW2arx@7voumbHT& zJEm>e;=f=2yEuT)taMDazoOj}h&;&rFWWb?YrOgVzf4Vx7E_RWHgo1*{~iWSJ<&57 z|LPYV5BE^{^GOOvv)A8@W>!dxFU0iB*`NIV zn{!um{rp9B$=-W?>FMFt_K+Rm!ujcT*lW`~`-5D_l<`^X?Z8)EXb1j^nF2oQ20Q%4 zh+njecCz;lcF}J3j<3_*6wAYQrp30$hgVzYCfWH-y|*6ut!JL7@HttvfBkFrnQQQw zi!9q&knpR4{tGM1fNFi!q96R)J@LIKu4?Gr_2Ns7{vmJPJjL3!Dzu$vZSVp5;mJTd z?6nDAG5&Zvy4o?xjv~#R-^wyPp8LR#L+xN%5I(bmkS93Iu-!=7%aq-?Y8R$2Dv?=_ z=k0C1Z)YcMThc%6_4khdPa8Px=zsh8=mD?G>_Crrp+|^_S)IK$9czEkpB6i4=QFl5 z)3lr4%wS`lZeLk%`$f2|haHIvO{dlxRJHD5ALI@^KgYHQ+U~m%_OBrv!|i>7Z3Z1> MfB*gZ@8!V%0hFtwKL7v# literal 0 HcmV?d00001 diff --git a/blue_plus/rowdata/biosses/scores.xls b/blue_plus/rowdata/biosses/scores.xls new file mode 100755 index 0000000000000000000000000000000000000000..e8e821c467334c08a421761bae29a5adfb7c642d GIT binary patch literal 25600 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