├── README.md ├── dataproc ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-36.pyc │ ├── __init__.cpython-37.pyc │ ├── build_vocab.cpython-36.pyc │ ├── concat_and_split.cpython-36.pyc │ ├── extract_wvs.cpython-36.pyc │ ├── extract_wvs.cpython-37.pyc │ ├── get_discharge_summaries.cpython-36.pyc │ ├── vocab_index_descriptions.cpython-36.pyc │ └── word_embeddings.cpython-36.pyc ├── build_vocab.py ├── concat_and_split.py ├── concat_and_split_mimic4.py ├── extract_wvs.py ├── get_discharge_summaries.py ├── prepare_qualitative_evaluation.py ├── vocab_index_descriptions.py └── word_embeddings.py ├── datasets.py ├── log_reg.py ├── mimicdata ├── mimic4_icd10 │ ├── TOP_50_CODES.csv │ ├── dev_50_hadm_ids.csv │ ├── dev_full_hadm_ids.csv │ ├── test_50_hadm_ids.csv │ ├── test_full_hadm_ids.csv │ ├── top50_icd10_code_list.txt │ ├── train_50_hadm_ids.csv │ └── train_full_hadm_ids.csv └── mimic4_icd9 │ ├── TOP_50_CODES.csv │ ├── dev_50_hadm_ids.csv │ ├── dev_full_hadm_ids.csv │ ├── test_50_hadm_ids.csv │ ├── test_full_hadm_ids.csv │ ├── top50_icd9_code_list.txt │ ├── train_50_hadm_ids.csv │ ├── train_full_hadm_ids.csv │ └── vocab.csv └── notebooks ├── data_mimic_IV_concat_note_label.py ├── dataproc_mimic_IV_exploration_icd10.ipynb └── dataproc_mimic_IV_exploration_icd9.ipynb /README.md: -------------------------------------------------------------------------------- 1 | # Mimic-IV-ICD: A new benchmark for eXtreme MultiLabel Classification 2 | 3 | Official source code repository for [Mimic-IV-ICD: A new benchmark for eXtreme MultiLabel Classification](https://arxiv.org/abs/2304.13998) 4 | 5 | ```bibtex 6 | @misc{nguyen2023mimicivicd, 7 | title={Mimic-IV-ICD: A new benchmark for eXtreme MultiLabel Classification}, 8 | author={Thanh-Tung Nguyen and Viktor Schlegel and Abhinav Kashyap and Stefan Winkler and Shao-Syuan Huang and Jie-Jyun Liu and Chih-Jen Lin}, 9 | year={2023}, 10 | eprint={2304.13998}, 11 | archivePrefix={arXiv}, 12 | primaryClass={cs.AI} 13 | } 14 | ``` 15 | 16 | ## Introduction 17 | 18 | Medical coding is an important operation within the healthcare industry’s revenue cycle management process, critical to the care of patients, efficiency of payments, and integrity of operations. 19 | This paper proposes a public benchmark suite for ICD-10 coding using a large EHR dataset derived from MIMIC-IV, the most recent public EHR dataset. Moreover, we also create a new ICD-9 benchmark using MIMIC-IV data, providing more data points and a higher number of ICD codes than MIMIC-III. Our open-source code offers easy access to data processing steps, benchmark creation, and experiment replication for those with MIMIC-IV access, providing insights, guidance, and protocols to efficiently develop ICD coding models. 20 | 21 | The subsequent tables list the models currently included in our benchmark. As we continuously seek to enhance this benchmark, new models will be regularly integrated. 22 | We cordially invite individuals wishing to incorporate their model into our benchmark to get in touch with us. 23 | 24 | | Model | Paper | Original Code | Our Adaptation| 25 | | ----- | ----- | ------------- | --------------| 26 | | CAML |[Explainable Prediction of Medical Codes from Clinical Text](https://aclanthology.org/N18-1100/) | [link](https://github.com/jamesmullenbach/caml-mimic) | 27 | | LAAT | [A Label Attention Model for ICD Coding from Clinical Text](https://www.ijcai.org/proceedings/2020/461) | [link](https://github.com/aehrc/LAAT) | 28 | | MSMN | [Code Synonyms Do Matter: Multiple Synonyms Matching Network for Automatic ICD Coding](https://aclanthology.org/2022.acl-short.91) | [link](https://github.com/GanjinZero/ICD-MSMN) 29 | | PLM-ICD | [PLM-ICD: Automatic ICD Coding with Pretrained Language Models](https://aclanthology.org/2022.clinicalnlp-1.2/) | [link](https://github.com/MiuLab/PLM-ICD) | 30 | 31 | 32 | ## Data processing 33 | 34 | Our directory has the following structure: 35 | ``` 36 | mimicdata 37 | └───physionet.org/ 38 | | |files/ 39 | └───mimic4_icd9/ 40 | | | ALL_CODES.csv 41 | | | ALL_CODES_filtered.csv 42 | | | disch_9_full.csv 43 | | | disch_9_filtered.csv 44 | | | notes_labeled.csv 45 | | | *_hadm_ids.csv (already in repo) 46 | └───mimic4_icd10/ 47 | | | ALL_CODES.csv 48 | | | ALL_CODES_filtered.csv 49 | | | disch_10_full.csv 50 | | | disch_10_filtered.csv 51 | | | notes_labeled.csv 52 | | | *_hadm_ids.csv (already in repo) 53 | ``` 54 | The MIMIC-IV files can be obtained from [this website](https://physionet.org/content/mimiciv/2.2/). You can download it to the directory `mimicdata/physionet.org` 55 | 56 | Now, make sure your python path includes the base directory of this repository. Then, in Jupyter Notebook, run all cells (in the menu, click Cell -> Run All) in `notebooks/dataproc_mimic_IV_exploration_icd9.ipynb` and `notebooks/dataproc_mimic_IV_exploration_icd10.ipynb`. These will take some time. 57 | -------------------------------------------------------------------------------- /dataproc/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__init__.py -------------------------------------------------------------------------------- /dataproc/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /dataproc/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /dataproc/__pycache__/build_vocab.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__pycache__/build_vocab.cpython-36.pyc -------------------------------------------------------------------------------- /dataproc/__pycache__/concat_and_split.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__pycache__/concat_and_split.cpython-36.pyc -------------------------------------------------------------------------------- /dataproc/__pycache__/extract_wvs.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__pycache__/extract_wvs.cpython-36.pyc -------------------------------------------------------------------------------- /dataproc/__pycache__/extract_wvs.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__pycache__/extract_wvs.cpython-37.pyc -------------------------------------------------------------------------------- /dataproc/__pycache__/get_discharge_summaries.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__pycache__/get_discharge_summaries.cpython-36.pyc -------------------------------------------------------------------------------- /dataproc/__pycache__/vocab_index_descriptions.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__pycache__/vocab_index_descriptions.cpython-36.pyc -------------------------------------------------------------------------------- /dataproc/__pycache__/word_embeddings.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasnguyen92/MIMIC-IV-ICD-data-processing/076ac16b54b758701a2b1b8e2d0c2fdae945457c/dataproc/__pycache__/word_embeddings.cpython-36.pyc -------------------------------------------------------------------------------- /dataproc/build_vocab.py: -------------------------------------------------------------------------------- 1 | """ 2 | This script reads a sorted training dataset and builds a vocabulary of terms of given size 3 | Output: txt file with vocab words 4 | Drops any token not appearing in at least vocab_min notes 5 | 6 | This script could probably be replaced by using sklearn's CountVectorizer to build a vocab 7 | """ 8 | import csv 9 | import numpy as np 10 | import operator 11 | 12 | from collections import defaultdict 13 | from scipy.sparse import csr_matrix 14 | 15 | from constants import DATA_DIR, MIMIC_3_DIR 16 | 17 | def build_vocab(vocab_min, infile, vocab_filename): 18 | """ 19 | INPUTS: 20 | vocab_min: how many documents a word must appear in to be kept 21 | infile: (training) data file to build vocabulary from 22 | vocab_filename: name for the file to output 23 | """ 24 | with open(infile, 'r') as csvfile: 25 | reader = csv.reader(csvfile) 26 | #header 27 | next(reader) 28 | 29 | #0. read in data 30 | print("reading in data...") 31 | #holds number of terms in each document 32 | note_numwords = [] 33 | #indices where notes start 34 | note_inds = [0] 35 | #indices of discovered words 36 | indices = [] 37 | #holds a bunch of ones 38 | data = [] 39 | #keep track of discovered words 40 | vocab = {} 41 | #build lookup table for terms 42 | num2term = {} 43 | #preallocate array to hold number of notes each term appears in 44 | note_occur = np.zeros(400000, dtype=int) 45 | i = 0 46 | for row in reader: 47 | text = row[2] 48 | numwords = 0 49 | for term in text.split(): 50 | #put term in vocab if it's not there. else, get the index 51 | index = vocab.setdefault(term, len(vocab)) 52 | indices.append(index) 53 | num2term[index] = term 54 | data.append(1) 55 | numwords += 1 56 | #record where the next note starts 57 | note_inds.append(len(indices)) 58 | indset = set(indices[note_inds[-2]:note_inds[-1]]) 59 | #go thru all the word indices you just added, and add to the note occurrence count for each of them 60 | for ind in indset: 61 | note_occur[ind] += 1 62 | note_numwords.append(numwords) 63 | i += 1 64 | #clip trailing zeros 65 | note_occur = note_occur[note_occur>0] 66 | 67 | #turn vocab into a list so indexing doesn't get fd up when we drop rows 68 | vocab_list = np.array([word for word,ind in sorted(vocab.items(), key=operator.itemgetter(1))]) 69 | 70 | #1. create sparse document matrix 71 | C = csr_matrix((data, indices, note_inds), dtype=int).transpose() 72 | #also need the numwords array to be a sparse matrix 73 | note_numwords = csr_matrix(1. / np.array(note_numwords)) 74 | 75 | #2. remove rows with less than 3 total occurrences 76 | print("removing rare terms") 77 | #inds holds indices of rows corresponding to terms that occur in < 3 documents 78 | inds = np.nonzero(note_occur >= vocab_min)[0] 79 | print(str(len(inds)) + " terms qualify out of " + str(C.shape[0]) + " total") 80 | #drop those rows 81 | C = C[inds,:] 82 | note_occur = note_occur[inds] 83 | vocab_list = vocab_list[inds] 84 | 85 | print("writing output") 86 | with open(vocab_filename, 'w') as vocab_file: 87 | for word in vocab_list: 88 | vocab_file.write(word + "\n") 89 | 90 | -------------------------------------------------------------------------------- /dataproc/concat_and_split.py: -------------------------------------------------------------------------------- 1 | """ 2 | Concatenate the labels with the notes data and split using the saved splits 3 | """ 4 | import csv 5 | from datetime import datetime 6 | import random 7 | 8 | from constants import DATA_DIR 9 | from constants import MIMIC_3_DIR 10 | 11 | import pandas as pd 12 | 13 | DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" 14 | 15 | def concat_data(labelsfile, notes_file): 16 | """ 17 | INPUTS: 18 | labelsfile: sorted by hadm id, contains one label per line 19 | notes_file: sorted by hadm id, contains one note per line 20 | """ 21 | with open(labelsfile, 'r') as lf: 22 | print("CONCATENATING") 23 | with open(notes_file, 'r') as notesfile: 24 | outfilename = '%s/notes_labeled.csv' % MIMIC_3_DIR 25 | with open(outfilename, 'w') as outfile: 26 | w = csv.writer(outfile) 27 | w.writerow(['SUBJECT_ID', 'HADM_ID', 'TEXT', 'LABELS']) 28 | 29 | labels_gen = next_labels(lf) 30 | notes_gen = next_notes(notesfile) 31 | 32 | for i, (subj_id, text, hadm_id) in enumerate(notes_gen): 33 | if i % 10000 == 0: 34 | print(str(i) + " done") 35 | cur_subj, cur_labels, cur_hadm = next(labels_gen) 36 | 37 | if cur_hadm == hadm_id: 38 | w.writerow([subj_id, str(hadm_id), text, ';'.join(cur_labels)]) 39 | else: 40 | print("couldn't find matching hadm_id. data is probably not sorted correctly") 41 | break 42 | 43 | return outfilename 44 | 45 | def split_data(labeledfile, base_name): 46 | print("SPLITTING") 47 | #create and write headers for train, dev, test 48 | train_name = '%s_train_split.csv' % (base_name) 49 | dev_name = '%s_dev_split.csv' % (base_name) 50 | test_name = '%s_test_split.csv' % (base_name) 51 | train_file = open(train_name, 'w') 52 | dev_file = open(dev_name, 'w') 53 | test_file = open(test_name, 'w') 54 | train_file.write(','.join(['SUBJECT_ID', 'HADM_ID', 'TEXT', 'LABELS']) + "\n") 55 | dev_file.write(','.join(['SUBJECT_ID', 'HADM_ID', 'TEXT', 'LABELS']) + "\n") 56 | test_file.write(','.join(['SUBJECT_ID', 'HADM_ID', 'TEXT', 'LABELS']) + "\n") 57 | 58 | hadm_ids = {} 59 | 60 | #read in train, dev, test splits 61 | for splt in ['train', 'dev', 'test']: 62 | hadm_ids[splt] = set() 63 | with open('%s/%s_full_hadm_ids.csv' % (MIMIC_3_DIR, splt), 'r') as f: 64 | for line in f: 65 | hadm_ids[splt].add(line.rstrip()) 66 | 67 | with open(labeledfile, 'r') as lf: 68 | reader = csv.reader(lf) 69 | next(reader) 70 | i = 0 71 | cur_hadm = 0 72 | for row in reader: 73 | #filter text, write to file according to train/dev/test split 74 | if i % 10000 == 0: 75 | print(str(i) + " read") 76 | 77 | hadm_id = row[1] 78 | 79 | if hadm_id in hadm_ids['train']: 80 | train_file.write(','.join(row) + "\n") 81 | elif hadm_id in hadm_ids['dev']: 82 | dev_file.write(','.join(row) + "\n") 83 | elif hadm_id in hadm_ids['test']: 84 | test_file.write(','.join(row) + "\n") 85 | 86 | i += 1 87 | 88 | train_file.close() 89 | dev_file.close() 90 | test_file.close() 91 | return train_name, dev_name, test_name 92 | 93 | def next_labels(labelsfile): 94 | """ 95 | Generator for label sets from the label file 96 | """ 97 | labels_reader = csv.reader(labelsfile) 98 | #header 99 | next(labels_reader) 100 | 101 | first_label_line = next(labels_reader) 102 | 103 | cur_subj = int(first_label_line[0]) 104 | cur_hadm = int(first_label_line[1]) 105 | cur_labels = [first_label_line[2]] 106 | 107 | for row in labels_reader: 108 | subj_id = int(row[0]) 109 | hadm_id = int(row[1]) 110 | code = row[2] 111 | #keep reading until you hit a new hadm id 112 | if hadm_id != cur_hadm or subj_id != cur_subj: 113 | yield cur_subj, cur_labels, cur_hadm 114 | cur_labels = [code] 115 | cur_subj = subj_id 116 | cur_hadm = hadm_id 117 | else: 118 | #add to the labels and move on 119 | cur_labels.append(code) 120 | yield cur_subj, cur_labels, cur_hadm 121 | 122 | def next_notes(notesfile): 123 | """ 124 | Generator for notes from the notes file 125 | This will also concatenate discharge summaries and their addenda, which have the same subject and hadm id 126 | """ 127 | nr = csv.reader(notesfile) 128 | #header 129 | next(nr) 130 | 131 | first_note = next(nr) 132 | 133 | cur_subj = int(first_note[0]) 134 | cur_hadm = int(first_note[1]) 135 | cur_text = first_note[3] 136 | 137 | for row in nr: 138 | subj_id = int(row[0]) 139 | hadm_id = int(row[1]) 140 | text = row[3] 141 | #keep reading until you hit a new hadm id 142 | if hadm_id != cur_hadm or subj_id != cur_subj: 143 | yield cur_subj, cur_text, cur_hadm 144 | cur_text = text 145 | cur_subj = subj_id 146 | cur_hadm = hadm_id 147 | else: 148 | #concatenate to the discharge summary and move on 149 | cur_text += " " + text 150 | yield cur_subj, cur_text, cur_hadm 151 | -------------------------------------------------------------------------------- /dataproc/concat_and_split_mimic4.py: -------------------------------------------------------------------------------- 1 | """ 2 | Concatenate the labels with the notes data and split using the saved splits 3 | """ 4 | import csv 5 | from datetime import datetime 6 | import random 7 | 8 | 9 | import pandas as pd 10 | 11 | DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" 12 | 13 | def concat_data(labelsfile, notes_file, output_note_labeled_file): 14 | """ 15 | INPUTS: 16 | labelsfile: sorted by hadm id, contains one label per line 17 | notes_file: sorted by hadm id, contains one note per line 18 | """ 19 | with open(labelsfile, 'r', encoding='utf-8') as lf: 20 | print("CONCATENATING") 21 | with open(notes_file, 'r', encoding='utf-8') as notesfile: 22 | outfilename = output_note_labeled_file 23 | with open(outfilename, 'w', encoding='utf-8') as outfile: 24 | w = csv.writer(outfile) 25 | w.writerow(['subject_id', 'hadm_id', 'text', 'labels']) 26 | 27 | labels_gen = next_labels(lf) 28 | notes_gen = next_notes(notesfile) 29 | 30 | for i, (subj_id, text, hadm_id) in enumerate(notes_gen): 31 | if i % 10000 == 0: 32 | print(str(i) + " done") 33 | cur_subj, cur_labels, cur_hadm = next(labels_gen) 34 | 35 | if cur_hadm == hadm_id: 36 | w.writerow([subj_id, str(hadm_id), text, ';'.join(cur_labels)]) 37 | else: 38 | print("couldn't find matching hadm_id. data is probably not sorted correctly") 39 | break 40 | 41 | return outfilename 42 | 43 | def next_labels(labelsfile): 44 | """ 45 | Generator for label sets from the label file 46 | """ 47 | labels_reader = csv.reader(labelsfile) 48 | #header 49 | next(labels_reader) 50 | 51 | first_label_line = next(labels_reader) 52 | 53 | cur_subj = int(first_label_line[0]) 54 | cur_hadm = int(first_label_line[1]) 55 | cur_labels = [first_label_line[2]] 56 | 57 | for row in labels_reader: 58 | subj_id = int(row[0]) 59 | hadm_id = int(row[1]) 60 | code = row[2] 61 | #keep reading until you hit a new hadm id 62 | if hadm_id != cur_hadm or subj_id != cur_subj: 63 | yield cur_subj, cur_labels, cur_hadm 64 | cur_labels = [code] 65 | cur_subj = subj_id 66 | cur_hadm = hadm_id 67 | else: 68 | #add to the labels and move on 69 | cur_labels.append(code) 70 | yield cur_subj, cur_labels, cur_hadm 71 | 72 | def next_notes(notesfile): 73 | """ 74 | Generator for notes from the notes file 75 | This will also concatenate discharge summaries and their addenda, which have the same subject and hadm id 76 | """ 77 | nr = csv.reader(notesfile) 78 | #header 79 | next(nr) 80 | 81 | first_note = next(nr) 82 | 83 | cur_subj = int(first_note[0]) 84 | cur_hadm = int(first_note[1]) 85 | cur_text = first_note[3] 86 | 87 | for row in nr: 88 | subj_id = int(row[0]) 89 | hadm_id = int(row[1]) 90 | text = row[3] 91 | #keep reading until you hit a new hadm id 92 | if hadm_id != cur_hadm or subj_id != cur_subj: 93 | yield cur_subj, cur_text, cur_hadm 94 | cur_text = text 95 | cur_subj = subj_id 96 | cur_hadm = hadm_id 97 | else: 98 | #concatenate to the discharge summary and move on 99 | cur_text += " " + text 100 | yield cur_subj, cur_text, cur_hadm 101 | -------------------------------------------------------------------------------- /dataproc/extract_wvs.py: -------------------------------------------------------------------------------- 1 | """ 2 | Use the vocabulary to load a matrix of pre-trained word vectors 3 | """ 4 | import csv 5 | import os 6 | import gensim.models 7 | from tqdm import tqdm 8 | 9 | from constants import * 10 | import datasets 11 | 12 | import numpy as np 13 | 14 | def gensim_to_embeddings(wv_file, vocab_file, Y, outfile=None): 15 | model = gensim.models.Word2Vec.load(wv_file) 16 | wv = model.wv 17 | #free up memory 18 | del model 19 | 20 | vocab = set() 21 | with open(vocab_file, 'r') as vocabfile: 22 | for i,line in enumerate(vocabfile): 23 | line = line.strip() 24 | if line != '': 25 | vocab.add(line) 26 | ind2w = {i+1:w for i,w in enumerate(sorted(vocab))} 27 | 28 | W, words = build_matrix(ind2w, wv) 29 | 30 | if outfile is None: 31 | outfile = wv_file.replace('.w2v', '.embed') 32 | 33 | #smash that save button 34 | save_embeddings(W, words, outfile) 35 | 36 | def build_matrix(ind2w, wv): 37 | """ 38 | Go through vocab in order. Find vocab word in wv.index2word, then call wv.word_vec(wv.index2word[i]). 39 | Put results into one big matrix. 40 | Note: ind2w starts at 1 (saving 0 for the pad character), but gensim word vectors starts at 0 41 | """ 42 | W = np.zeros((len(ind2w)+1, len(wv.word_vec(wv.index2word[0])) )) 43 | words = [PAD_CHAR] 44 | W[0][:] = np.zeros(len(wv.word_vec(wv.index2word[0]))) 45 | for idx, word in tqdm(ind2w.items()): 46 | if idx >= W.shape[0]: 47 | break 48 | W[idx][:] = wv.word_vec(word) 49 | words.append(word) 50 | return W, words 51 | 52 | def save_embeddings(W, words, outfile): 53 | with open(outfile, 'w') as o: 54 | #pad token already included 55 | for i in range(len(words)): 56 | line = [words[i]] 57 | line.extend([str(d) for d in W[i]]) 58 | o.write(" ".join(line) + "\n") 59 | 60 | def load_embeddings(embed_file): 61 | #also normalizes the embeddings 62 | W = [] 63 | with open(embed_file) as ef: 64 | for line in ef: 65 | line = line.rstrip().split() 66 | vec = np.array(line[1:]).astype(np.float) 67 | vec = vec / float(np.linalg.norm(vec) + 1e-6) 68 | W.append(vec) 69 | #UNK embedding, gaussian randomly initialized 70 | print("adding unk embedding") 71 | vec = np.random.randn(len(W[-1])) 72 | vec = vec / float(np.linalg.norm(vec) + 1e-6) 73 | W.append(vec) 74 | W = np.array(W) 75 | return W 76 | 77 | -------------------------------------------------------------------------------- /dataproc/get_discharge_summaries.py: -------------------------------------------------------------------------------- 1 | """ 2 | Reads NOTEEVENTS file, finds the discharge summaries, preprocesses them and writes out the filtered dataset. 3 | """ 4 | import csv 5 | 6 | from nltk.tokenize import RegexpTokenizer 7 | 8 | from tqdm import tqdm 9 | 10 | from constants import MIMIC_3_DIR 11 | 12 | #retain only alphanumeric 13 | tokenizer = RegexpTokenizer(r'\w+') 14 | 15 | def write_discharge_summaries(out_file): 16 | notes_file = '%s/NOTEEVENTS.csv' % (MIMIC_3_DIR) 17 | print("processing notes file") 18 | with open(notes_file, 'r') as csvfile: 19 | with open(out_file, 'w') as outfile: 20 | print("writing to %s" % (out_file)) 21 | outfile.write(','.join(['SUBJECT_ID', 'HADM_ID', 'CHARTTIME', 'TEXT']) + '\n') 22 | notereader = csv.reader(csvfile) 23 | #header 24 | next(notereader) 25 | i = 0 26 | for line in tqdm(notereader): 27 | subj = int(line[1]) 28 | category = line[6] 29 | if category == "Discharge summary": 30 | note = line[10] 31 | #tokenize, lowercase and remove numerics 32 | tokens = [t.lower() for t in tokenizer.tokenize(note) if not t.isnumeric()] 33 | text = '"' + ' '.join(tokens) + '"' 34 | outfile.write(','.join([line[1], line[2], line[4], text]) + '\n') 35 | i += 1 36 | return out_file 37 | -------------------------------------------------------------------------------- /dataproc/prepare_qualitative_evaluation.py: -------------------------------------------------------------------------------- 1 | """ 2 | Read four files with format (HADM_ID, CODE, INDEX) 3 | These specify four choices for the most important 4-gram in a discharge summary from the test set for a given code 4 | Write these out in markdown format to be presented to physician for evaluation 5 | """ 6 | import csv 7 | from collections import Counter 8 | 9 | import numpy as np 10 | from tqdm import tqdm 11 | 12 | from constants import * 13 | import datasets 14 | 15 | CONTEXT_SIZE = 10 16 | NUM_QUESTIONS = 100 17 | FILTER_SIZE = 4 18 | MAX_CODE_OCCURRENCES = 5 19 | INSTRUCTIONS = """ 20 | We have a dataset of discharge summaries, along with ICD-9 codes associated with those summaries. You will be presented with a series of codes and their descriptions, along with four supporting texts, each drawn from the same discharge summary which has that code associated. Please make a check mark by all supporting texts that you believe adequately explain the presence of the given code. If one supporting text clearly provides the best explanation, make a double check mark by that text. 21 | """ 22 | 23 | ATTN_FILENAME = "foo" 24 | CONV_FILENAME = "bar" 25 | LR_FILENAME = "baz" 26 | SIM_FILENAME = "hax" 27 | 28 | def main(): 29 | desc_dict = datasets.load_code_descriptions() 30 | 31 | print("loading attn windows") 32 | attn_windows = {} 33 | attn_window_szs = {} 34 | with open(ATTN_FILENAME, 'r') as f: 35 | r = csv.reader(f) 36 | #header 37 | next(r) 38 | for row in r: 39 | attn_windows[(int(row[0]), row[1])] = int(row[2]) 40 | attn_window_szs[(int(row[0]), row[1])] = int(row[3]) 41 | 42 | print("loading conv windows") 43 | conv_windows = {} 44 | with open(CONV_FILENAME, 'r') as f: 45 | r = csv.reader(f) 46 | #header 47 | next(r) 48 | for row in r: 49 | conv_windows[(int(row[0]), row[1])] = int(row[2]) 50 | 51 | print("loading lr windows") 52 | lr_windows = {} 53 | with open(LR_FILENAME, 'r') as f: 54 | r = csv.reader(f) 55 | #header 56 | next(r) 57 | for row in r: 58 | lr_windows[(int(row[1]), row[2])] = int(row[3]) 59 | 60 | print("loading sim windows") 61 | sim_windows = {} 62 | sim_vals = {} 63 | with open(SIM_FILENAME, 'r') as f: 64 | r = csv.reader(f) 65 | #header 66 | next(r) 67 | for row in r: 68 | sim_windows[(int(row[1]), row[2])] = int(row[3]) 69 | sim_vals[(int(row[1]), row[2])] = float(row[-1]) 70 | 71 | attn_keys = set(attn_windows.keys()) 72 | conv_keys = set(conv_windows.keys()) 73 | lr_keys = set(lr_windows.keys()) 74 | sim_keys = set(sim_windows.keys()) 75 | valid_texts = [] 76 | print("building evaluation document") 77 | with open('%s/qualitative_eval_full.md' % (MIMIC_3_DIR), 'w') as of: 78 | with open('%s/qualitative_eval_full_key.md' % (MIMIC_3_DIR), 'w') as kf: 79 | code_counts = Counter() 80 | of.write('### Instructions\n') 81 | of.write(INSTRUCTIONS + '\n\n') 82 | with open('%s/test_full.csv' % MIMIC_3_DIR, 'r') as f: 83 | r = csv.reader(f) 84 | #header 85 | next(r) 86 | num_pairs = 0 87 | for idx,row in tqdm(enumerate(r)): 88 | codes = str(row[3]).split(';') 89 | toks = row[2].split() 90 | hadm_id = int(row[1]) 91 | for code in codes: 92 | num_pairs += 1 93 | key = (hadm_id, code) 94 | if key in conv_keys and key in lr_keys and key in sim_keys and key in attn_keys and code_counts[code] < MAX_CODE_OCCURRENCES: 95 | if sim_vals[key] == 0: 96 | continue 97 | code_counts[code] += 1 98 | valid_texts.append((key, toks)) 99 | 100 | valid_texts = np.random.permutation(valid_texts) 101 | opts = 'ABCD' 102 | for i, (key, toks) in enumerate(valid_texts[:NUM_QUESTIONS]): 103 | hadm_id, code = key 104 | of.write("### Question %d\n" % (i + 1)) 105 | kf.write("### Question %d\n" % (i + 1)) 106 | of.write("Code: %s\n" % code) 107 | kf.write("Code: %s\n" % code) 108 | of.write("Full descriptions: %s\n\n" % desc_dict[code]) 109 | kf.write("Full descriptions: %s\n\n" % desc_dict[code]) 110 | for i,(method,window) in enumerate(np.random.permutation([('attn', attn_windows[key]), ('conv', conv_windows[key]), ('lr', lr_windows[key]), ('sim', sim_windows[key])])): 111 | window = int(window) 112 | if method == 'attn': 113 | filter_size = attn_window_szs[key] 114 | else: 115 | filter_size = FILTER_SIZE 116 | pre = toks[window-(CONTEXT_SIZE/2):window] 117 | mid = toks[window:window+filter_size] 118 | post = toks[window+filter_size:window+filter_size+(CONTEXT_SIZE/2)] 119 | md_out = ' '.join(pre) + ' **' + ' '.join(mid) + '** ' + ' '.join(post) 120 | of.write('%s) %s\n\n' % (opts[i], md_out)) 121 | kf.write('%s (%s) %s\n\n' % (opts[i], method, md_out)) 122 | print("percentage of valid document-code pairs: %f" % (len(valid_texts) / float(num_pairs))) 123 | 124 | if __name__ == "__main__": 125 | main() 126 | -------------------------------------------------------------------------------- /dataproc/vocab_index_descriptions.py: -------------------------------------------------------------------------------- 1 | """ 2 | Pre-computes the vocab-indexed version of each code description 3 | """ 4 | import datasets 5 | from constants import * 6 | from nltk.corpus import stopwords 7 | from nltk.tokenize import RegexpTokenizer 8 | 9 | import csv 10 | 11 | from tqdm import tqdm 12 | 13 | def vocab_index_descriptions(vocab_file, vectors_file): 14 | #load lookups 15 | vocab = set() 16 | with open(vocab_file, 'r') as vocabfile: 17 | for i,line in enumerate(vocabfile): 18 | line = line.strip() 19 | if line != '': 20 | vocab.add(line) 21 | ind2w = {i+1:w for i,w in enumerate(sorted(vocab))} 22 | w2ind = {w:i for i,w in ind2w.items()} 23 | desc_dict = datasets.load_code_descriptions() 24 | 25 | tokenizer = RegexpTokenizer(r'\w+') 26 | 27 | with open(vectors_file, 'w') as of: 28 | w = csv.writer(of, delimiter=' ') 29 | w.writerow(["CODE", "VECTOR"]) 30 | for code, desc in tqdm(desc_dict.items()): 31 | #same preprocessing steps as in get_discharge_summaries 32 | tokens = [t.lower() for t in tokenizer.tokenize(desc) if not t.isnumeric()] 33 | inds = [w2ind[t] if t in w2ind.keys() else len(w2ind)+1 for t in tokens] 34 | w.writerow([code] + [str(i) for i in inds]) 35 | -------------------------------------------------------------------------------- /dataproc/word_embeddings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Pre-train embeddings using gensim w2v implementation (CBOW by default) 3 | """ 4 | import gensim.models.word2vec as w2v 5 | import csv 6 | 7 | from constants import * 8 | 9 | class ProcessedIter(object): 10 | 11 | def __init__(self, Y, filename): 12 | self.filename = filename 13 | 14 | def __iter__(self): 15 | with open(self.filename) as f: 16 | r = csv.reader(f) 17 | next(r) 18 | for row in r: 19 | yield (row[3].split()) 20 | 21 | def word_embeddings(Y, notes_file, embedding_size, min_count, n_iter): 22 | modelname = "processed_%s.w2v" % (Y) 23 | sentences = ProcessedIter(Y, notes_file) 24 | 25 | model = w2v.Word2Vec(size=embedding_size, min_count=min_count, workers=4, iter=n_iter) 26 | print("building word2vec vocab on %s..." % (notes_file)) 27 | 28 | model.build_vocab(sentences) 29 | print("training...") 30 | model.train(sentences, total_examples=model.corpus_count, epochs=model.iter) 31 | out_file = '/'.join(notes_file.split('/')[:-1] + [modelname]) 32 | print("writing embeddings to %s" % (out_file)) 33 | model.save(out_file) 34 | return out_file 35 | 36 | -------------------------------------------------------------------------------- /datasets.py: -------------------------------------------------------------------------------- 1 | """ 2 | Data loading methods 3 | """ 4 | from collections import defaultdict 5 | import csv 6 | import math 7 | import numpy as np 8 | import sys 9 | 10 | from constants import * 11 | 12 | class Batch: 13 | """ 14 | This class and the data_generator could probably be replaced with a PyTorch DataLoader 15 | """ 16 | def __init__(self, desc_embed): 17 | self.docs = [] 18 | self.labels = [] 19 | self.hadm_ids = [] 20 | self.code_set = set() 21 | self.length = 0 22 | self.max_length = MAX_LENGTH 23 | self.desc_embed = desc_embed 24 | self.descs = [] 25 | 26 | def add_instance(self, row, ind2c, c2ind, w2ind, dv_dict, num_labels): 27 | """ 28 | Makes an instance to add to this batch from given row data, with a bunch of lookups 29 | """ 30 | labels = set() 31 | hadm_id = int(row[1]) 32 | text = row[2] 33 | length = int(row[4]) 34 | cur_code_set = set() 35 | labels_idx = np.zeros(num_labels) 36 | labelled = False 37 | desc_vecs = [] 38 | #get codes as a multi-hot vector 39 | for l in row[3].split(';'): 40 | if l in c2ind.keys(): 41 | code = int(c2ind[l]) 42 | labels_idx[code] = 1 43 | cur_code_set.add(code) 44 | labelled = True 45 | if not labelled: 46 | return 47 | if self.desc_embed: 48 | for code in cur_code_set: 49 | l = ind2c[code] 50 | if l in dv_dict.keys(): 51 | #need to copy or description padding will get screwed up 52 | desc_vecs.append(dv_dict[l][:]) 53 | else: 54 | desc_vecs.append([len(w2ind)+1]) 55 | #OOV words are given a unique index at end of vocab lookup 56 | text = [int(w2ind[w]) if w in w2ind else len(w2ind)+1 for w in text.split()] 57 | #truncate long documents 58 | if len(text) > self.max_length: 59 | text = text[:self.max_length] 60 | 61 | #build instance 62 | self.docs.append(text) 63 | self.labels.append(labels_idx) 64 | self.hadm_ids.append(hadm_id) 65 | self.code_set = self.code_set.union(cur_code_set) 66 | if self.desc_embed: 67 | self.descs.append(pad_desc_vecs(desc_vecs)) 68 | #reset length 69 | self.length = min(self.max_length, length) 70 | 71 | def pad_docs(self): 72 | #pad all docs to have self.length 73 | padded_docs = [] 74 | for doc in self.docs: 75 | if len(doc) < self.length: 76 | doc.extend([0] * (self.length - len(doc))) 77 | padded_docs.append(doc) 78 | self.docs = padded_docs 79 | 80 | def to_ret(self): 81 | return np.array(self.docs), np.array(self.labels), np.array(self.hadm_ids), self.code_set,\ 82 | np.array(self.descs) 83 | 84 | def pad_desc_vecs(desc_vecs): 85 | #pad all description vectors in a batch to have the same length 86 | desc_len = max([len(dv) for dv in desc_vecs]) 87 | pad_vecs = [] 88 | for vec in desc_vecs: 89 | if len(vec) < desc_len: 90 | vec.extend([0] * (desc_len - len(vec))) 91 | pad_vecs.append(vec) 92 | return pad_vecs 93 | 94 | def data_generator(filename, dicts, batch_size, num_labels, desc_embed=False, version='mimic3'): 95 | """ 96 | Inputs: 97 | filename: holds data sorted by sequence length, for best batching 98 | dicts: holds all needed lookups 99 | batch_size: the batch size for train iterations 100 | num_labels: size of label output space 101 | desc_embed: true if using DR-CAML (lambda > 0) 102 | version: which (MIMIC) dataset 103 | Yields: 104 | np arrays with data for training loop. 105 | """ 106 | ind2w, w2ind, ind2c, c2ind, dv_dict = dicts['ind2w'], dicts['w2ind'], dicts['ind2c'], dicts['c2ind'], dicts['dv'] 107 | with open(filename, 'r', encoding='utf-8') as infile: 108 | r = csv.reader(infile) 109 | #header 110 | next(r) 111 | cur_inst = Batch(desc_embed) 112 | for row in r: 113 | #find the next `batch_size` instances 114 | if len(cur_inst.docs) == batch_size: 115 | cur_inst.pad_docs() 116 | yield cur_inst.to_ret() 117 | #clear 118 | cur_inst = Batch(desc_embed) 119 | cur_inst.add_instance(row, ind2c, c2ind, w2ind, dv_dict, num_labels) 120 | cur_inst.pad_docs() 121 | yield cur_inst.to_ret() 122 | 123 | def load_vocab_dict(args, vocab_file): 124 | #reads vocab_file into two lookups (word:ind) and (ind:word) 125 | vocab = set() 126 | # with open(vocab_file, 'r') as vocabfile: 127 | with open(vocab_file, 'r', encoding='utf-8') as vocabfile: 128 | for i,line in enumerate(vocabfile): 129 | line = line.rstrip() 130 | if line != '': 131 | vocab.add(line.strip()) 132 | #hack because the vocabs were created differently for these models 133 | if args.public_model and args.Y == 'full' and args.version == "mimic3" and args.model == 'conv_attn': 134 | ind2w = {i:w for i,w in enumerate(sorted(vocab))} 135 | else: 136 | ind2w = {i+1:w for i,w in enumerate(sorted(vocab))} 137 | w2ind = {w:i for i,w in ind2w.items()} 138 | return ind2w, w2ind 139 | 140 | def load_lookups(args, desc_embed=False): 141 | """ 142 | Inputs: 143 | args: Input arguments 144 | desc_embed: true if using DR-CAML 145 | Outputs: 146 | vocab lookups, ICD code lookups, description lookup, description one-hot vector lookup 147 | """ 148 | #get vocab lookups 149 | ind2w, w2ind = load_vocab_dict(args, args.vocab) 150 | 151 | #get code and description lookups 152 | if args.Y == 'full': 153 | ind2c, desc_dict = load_full_codes(args.data_path, version=args.version) 154 | else: 155 | codes = set() 156 | with open("%s/TOP_%s_CODES.csv" % (MIMIC_3_DIR, str(args.Y)), 'r') as labelfile: 157 | lr = csv.reader(labelfile) 158 | for i,row in enumerate(lr): 159 | codes.add(row[0]) 160 | ind2c = {i:c for i,c in enumerate(sorted(codes))} 161 | desc_dict = load_code_descriptions() 162 | c2ind = {c:i for i,c in ind2c.items()} 163 | 164 | #get description one-hot vector lookup 165 | if desc_embed: 166 | dv_dict = load_description_vectors(args.Y, version=args.version) 167 | else: 168 | dv_dict = None 169 | 170 | dicts = {'ind2w': ind2w, 'w2ind': w2ind, 'ind2c': ind2c, 'c2ind': c2ind, 'desc': desc_dict, 'dv': dv_dict} 171 | return dicts 172 | 173 | def load_full_codes(train_path, version='mimic3'): 174 | """ 175 | Inputs: 176 | train_path: path to train dataset 177 | version: which (MIMIC) dataset 178 | Outputs: 179 | code lookup, description lookup 180 | """ 181 | #get description lookup 182 | desc_dict = load_code_descriptions(version=version) 183 | #build code lookups from appropriate datasets 184 | if version == 'mimic2': 185 | ind2c = defaultdict(str) 186 | codes = set() 187 | with open('%s/proc_dsums.csv' % MIMIC_2_DIR, 'r') as f: 188 | r = csv.reader(f) 189 | #header 190 | next(r) 191 | for row in r: 192 | codes.update(set(row[-1].split(';'))) 193 | codes = set([c for c in codes if c != '']) 194 | ind2c = defaultdict(str, {i:c for i,c in enumerate(sorted(codes))}) 195 | else: 196 | codes = set() 197 | for split in ['train', 'dev', 'test']: 198 | # with open(train_path.replace('train', split), 'r') as f: 199 | with open(train_path.replace('train', split), 'r', encoding='utf-8') as f: 200 | lr = csv.reader(f) 201 | next(lr) 202 | for row in lr: 203 | for code in row[3].split(';'): 204 | codes.add(code) 205 | codes = set([c for c in codes if c != '']) 206 | ind2c = defaultdict(str, {i:c for i,c in enumerate(sorted(codes))}) 207 | return ind2c, desc_dict 208 | 209 | def reformat(code, is_diag): 210 | """ 211 | Put a period in the right place because the MIMIC-3 data files exclude them. 212 | Generally, procedure codes have dots after the first two digits, 213 | while diagnosis codes have dots after the first three digits. 214 | """ 215 | code = ''.join(code.split('.')) 216 | if is_diag: 217 | if code.startswith('E'): 218 | if len(code) > 4: 219 | code = code[:4] + '.' + code[4:] 220 | else: 221 | if len(code) > 3: 222 | code = code[:3] + '.' + code[3:] 223 | else: 224 | code = code[:2] + '.' + code[2:] 225 | return code 226 | 227 | def load_code_descriptions(version='mimic3'): 228 | #load description lookup from the appropriate data files 229 | desc_dict = defaultdict(str) 230 | if version == 'mimic2': 231 | with open('%s/MIMIC_ICD9_mapping' % MIMIC_2_DIR, 'r') as f: 232 | r = csv.reader(f) 233 | #header 234 | next(r) 235 | for row in r: 236 | desc_dict[str(row[1])] = str(row[2]) 237 | else: 238 | with open("%s/D_ICD_DIAGNOSES.csv" % (DATA_DIR), 'r') as descfile: 239 | r = csv.reader(descfile) 240 | #header 241 | next(r) 242 | for row in r: 243 | code = row[1] 244 | desc = row[-1] 245 | desc_dict[reformat(code, True)] = desc 246 | with open("%s/D_ICD_PROCEDURES.csv" % (DATA_DIR), 'r') as descfile: 247 | r = csv.reader(descfile) 248 | #header 249 | next(r) 250 | for row in r: 251 | code = row[1] 252 | desc = row[-1] 253 | if code not in desc_dict.keys(): 254 | desc_dict[reformat(code, False)] = desc 255 | with open('%s/ICD9_descriptions' % DATA_DIR, 'r') as labelfile: 256 | for i,row in enumerate(labelfile): 257 | row = row.rstrip().split() 258 | code = row[0] 259 | if code not in desc_dict.keys(): 260 | desc_dict[code] = ' '.join(row[1:]) 261 | return desc_dict 262 | 263 | def load_description_vectors(Y, version='mimic3'): 264 | #load description one-hot vectors from file 265 | dv_dict = {} 266 | if version == 'mimic2': 267 | data_dir = MIMIC_2_DIR 268 | else: 269 | data_dir = MIMIC_3_DIR 270 | with open("%s/description_vectors.vocab" % (data_dir), 'r') as vfile: 271 | r = csv.reader(vfile, delimiter=" ") 272 | #header 273 | next(r) 274 | for row in r: 275 | code = row[0] 276 | vec = [int(x) for x in row[1:]] 277 | dv_dict[code] = vec 278 | return dv_dict 279 | -------------------------------------------------------------------------------- /log_reg.py: -------------------------------------------------------------------------------- 1 | """ 2 | Reads (or writes) BOW-formatted notes and performs scikit-learn logistic regression 3 | """ 4 | import csv 5 | import numpy as np 6 | import os 7 | import pickle 8 | import sys 9 | import time 10 | 11 | from collections import Counter, defaultdict 12 | from scipy.sparse import csr_matrix 13 | from sklearn.linear_model import LogisticRegression 14 | from sklearn.multiclass import OneVsRestClassifier 15 | from tqdm import tqdm 16 | 17 | from constants import * 18 | import datasets 19 | import evaluation 20 | from learn import tools 21 | import persistence 22 | 23 | import nltk 24 | 25 | #Constants 26 | C = 1.0 27 | MAX_ITER = 20 28 | 29 | def main(Y, train_fname, dev_fname, vocab_file, version, n): 30 | n = int(n) 31 | 32 | #need to handle really large text fields 33 | csv.field_size_limit(sys.maxsize) 34 | 35 | #get lookups from non-BOW data 36 | data_path = train_fname.replace('_bows', '') if "_bows" in train_fname else train_fname 37 | dicts = datasets.load_lookups(data_path, vocab_file=vocab_file, Y=Y, version=version) 38 | w2ind, ind2c, c2ind = dicts['w2ind'], dicts['ind2c'], dicts['c2ind'] 39 | 40 | X, yy_tr, hids_tr = read_bows(Y, train_fname, c2ind, version) 41 | X_dv, yy_dv, hids_dv = read_bows(Y, dev_fname, c2ind, version) 42 | 43 | print("X.shape: " + str(X.shape)) 44 | print("yy_tr.shape: " + str(yy_tr.shape)) 45 | print("X_dv.shape: " + str(X_dv.shape)) 46 | print("yy_dv.shape: " + str(yy_dv.shape)) 47 | 48 | #deal with labels that don't have any positive examples 49 | #drop empty columns from yy. keep track of which columns kept 50 | #predict on test data with those columns. guess 0 on the others 51 | labels_with_examples = yy_tr.sum(axis=0).nonzero()[0] 52 | yy = yy_tr[:, labels_with_examples] 53 | 54 | # build the classifier 55 | clf = OneVsRestClassifier(LogisticRegression(C=C, max_iter=MAX_ITER, solver='sag'), n_jobs=-1) 56 | 57 | # train 58 | print("training...") 59 | clf.fit(X, yy) 60 | 61 | #predict 62 | print("predicting...") 63 | yhat = clf.predict(X_dv) 64 | yhat_raw = clf.predict_proba(X_dv) 65 | 66 | #deal with labels that don't have positive training examples 67 | print("reshaping output to deal with labels missing from train set") 68 | labels_with_examples = set(labels_with_examples) 69 | yhat_full = np.zeros(yy_dv.shape) 70 | yhat_full_raw = np.zeros(yy_dv.shape) 71 | j = 0 72 | for i in range(yhat_full.shape[1]): 73 | if i in labels_with_examples: 74 | yhat_full[:,i] = yhat[:,j] 75 | yhat_full_raw[:,i] = yhat_raw[:,j] 76 | j += 1 77 | 78 | #evaluate 79 | metrics, fpr, tpr = evaluation.all_metrics(yhat_full, yy_dv, k=[8, 15], yhat_raw=yhat_full_raw) 80 | evaluation.print_metrics(metrics) 81 | 82 | #save metric history, model, params 83 | print("saving predictions") 84 | model_dir = os.path.join(MODEL_DIR, '_'.join(["log_reg", time.strftime('%b_%d_%H:%M', time.localtime())])) 85 | os.mkdir(model_dir) 86 | preds_file = tools.write_preds(yhat_full, model_dir, hids_dv, 'test', yhat_full_raw) 87 | 88 | print("sanity check on train") 89 | yhat_tr = clf.predict(X) 90 | yhat_tr_raw = clf.predict_proba(X) 91 | 92 | #reshape output again 93 | yhat_tr_full = np.zeros(yy_tr.shape) 94 | yhat_tr_full_raw = np.zeros(yy_tr.shape) 95 | j = 0 96 | for i in range(yhat_tr_full.shape[1]): 97 | if i in labels_with_examples: 98 | yhat_tr_full[:,i] = yhat_tr[:,j] 99 | yhat_tr_full_raw[:,i] = yhat_tr_raw[:,j] 100 | j += 1 101 | 102 | #evaluate 103 | metrics_tr, fpr_tr, tpr_tr = evaluation.all_metrics(yhat_tr_full, yy_tr, k=[8, 15], yhat_raw=yhat_tr_full_raw) 104 | evaluation.print_metrics(metrics_tr) 105 | 106 | if n > 0: 107 | print("generating top important ngrams") 108 | if 'bows' in dev_fname: 109 | dev_fname = dev_fname.replace('_bows', '') 110 | print("calculating top ngrams using file %s" % dev_fname) 111 | calculate_top_ngrams(dev_fname, clf, c2ind, w2ind, labels_with_examples, n) 112 | 113 | #Commenting this out because the models are huge (11G for mimic3 full) 114 | #print("saving model") 115 | #with open("%s/model.pkl" % model_dir, 'wb') as f: 116 | # pickle.dump(clf, f) 117 | 118 | print("saving metrics") 119 | metrics_hist = defaultdict(lambda: []) 120 | metrics_hist_tr = defaultdict(lambda: []) 121 | for name in metrics.keys(): 122 | metrics_hist[name].append(metrics[name]) 123 | for name in metrics_tr.keys(): 124 | metrics_hist_tr[name].append(metrics_tr[name]) 125 | metrics_hist_all = (metrics_hist, metrics_hist, metrics_hist_tr) 126 | persistence.save_metrics(metrics_hist_all, model_dir) 127 | 128 | 129 | def write_bows(data_fname, X, hadm_ids, y, ind2c): 130 | out_name = data_fname.split('.csv')[0] + '_bows.csv' 131 | with open(out_name, 'w') as of: 132 | w = csv.writer(of) 133 | w.writerow(['HADM_ID', 'BOW', 'LABELS']) 134 | for i in range(X.shape[0]): 135 | bow = X[i].toarray()[0] 136 | inds = bow.nonzero()[0] 137 | counts = bow[inds] 138 | bow_str = ' '.join(['%d:%d' % (ind, count) for ind,count in zip(inds,counts)]) 139 | code_str = ';'.join([ind2c[ind] for ind in y[i].nonzero()[0]]) 140 | w.writerow([str(hadm_ids[i]), bow_str, code_str]) 141 | 142 | def read_bows(Y, bow_fname, c2ind, version): 143 | num_labels = len(c2ind) 144 | data = [] 145 | row_ind = [] 146 | col_ind = [] 147 | hids = [] 148 | y = [] 149 | with open(bow_fname, 'r') as f: 150 | r = csv.reader(f) 151 | #header 152 | next(r) 153 | for i,row in tqdm(enumerate(r)): 154 | hid = int(row[0]) 155 | bow_str = row[1] 156 | code_str = row[2] 157 | for pair in bow_str.split(): 158 | split = pair.split(':') 159 | ind, count = split[0], split[1] 160 | data.append(int(count)) 161 | row_ind.append(i) 162 | col_ind.append(int(ind)) 163 | label_set = set([c2ind[c] for c in code_str.split(';')]) 164 | y.append([1 if j in label_set else 0 for j in range(num_labels)]) 165 | hids.append(hid) 166 | X = csr_matrix((data, (row_ind, col_ind))) 167 | return X, np.array(y), hids 168 | 169 | 170 | def construct_X_Y(notefile, Y, w2ind, c2ind, version): 171 | """ 172 | Each row consists of text pertaining to one admission 173 | INPUTS: 174 | notefile: path to file containing note data 175 | Y: size of the output label space 176 | w2ind: dictionary from words to integers for discretizing 177 | c2ind: dictionary from labels to integers for discretizing 178 | version: which (MIMIC) dataset 179 | OUTPUTS: 180 | csr_matrix where each row is a BOW 181 | Dimension: (# instances in dataset) x (vocab size) 182 | """ 183 | Y = len(c2ind) 184 | yy = [] 185 | hadm_ids = [] 186 | with open(notefile, 'r') as notesfile: 187 | reader = csv.reader(notesfile) 188 | next(reader) 189 | i = 0 190 | 191 | subj_inds = [] 192 | indices = [] 193 | data = [] 194 | 195 | for i,row in tqdm(enumerate(reader)): 196 | label_set = set() 197 | for l in str(row[3]).split(';'): 198 | if l in c2ind.keys(): 199 | label_set.add(c2ind[l]) 200 | subj_inds.append(len(indices)) 201 | yy.append([1 if j in label_set else 0 for j in range(Y)]) 202 | text = row[2] 203 | for word in text.split(): 204 | if word in w2ind: 205 | index = w2ind[word] 206 | if index != 0: 207 | #ignore padding characters 208 | indices.append(index) 209 | data.append(1) 210 | else: 211 | #OOV 212 | indices.append(len(w2ind)) 213 | data.append(1) 214 | i += 1 215 | hadm_ids.append(int(row[1])) 216 | subj_inds.append(len(indices)) 217 | 218 | return csr_matrix((data, indices, subj_inds)), np.array(yy), hadm_ids 219 | 220 | def calculate_top_ngrams(inputfile, clf, c2ind, w2ind, labels_with_examples, n): 221 | 222 | #Reshape the coefficients matrix back into having 0's for columns of codes not in training set. 223 | labels_with_examples = set(labels_with_examples) 224 | mat = clf.coef_ 225 | mat_full = np.zeros((8922, mat.shape[1])) 226 | j = 0 227 | for i in range(mat_full.shape[0]): 228 | if i in labels_with_examples: 229 | mat_full[i,:] = mat[j,:] 230 | j += 1 231 | 232 | #write out to csv 233 | f = open("%s/top_ngrams.csv" % DATA_DIR, 'wb') 234 | writer = csv.writer(f, delimiter = ',') 235 | #write header 236 | writer.writerow(['SUBJECT_ID', 'HADM_ID', 'LABEL', 'INDEX', 'NGRAM', 'SCORE']) 237 | 238 | #get text as list of strings for each record in dev set 239 | with open("%s" % (inputfile), 'r') as notesfile: 240 | reader = csv.reader(notesfile) 241 | next(reader) 242 | 243 | all_rows = [] 244 | for i,row in tqdm(enumerate(reader)): 245 | 246 | text = row[2] 247 | hadm_id = row[1] 248 | subject_id = row[0] 249 | labels = row[3].split(';') 250 | 251 | #for each text, label pair, calculate heighest weighted n-gram in text 252 | for label in labels: 253 | myList = [] 254 | 255 | #subject id 256 | myList.append(subject_id) 257 | #hadm id 258 | myList.append(hadm_id) 259 | 260 | #augmented coefficients matrix has dims (5000, 51918) (num. labels, size vocab.) 261 | #get row corresponding to label: 262 | word_weights = mat_full[c2ind[label]] 263 | 264 | #get each set of n grams in text 265 | #get ngrams 266 | fourgrams = nltk.ngrams(text.split(), n) 267 | fourgrams_scores = [] 268 | for grams in fourgrams: 269 | #calculate score 270 | sum_weights = 0 271 | for word in grams: 272 | if word in w2ind: 273 | inx = w2ind[word] 274 | #add coeff from logistic regression matrix for given word 275 | sum_weights = sum_weights + word_weights[inx] 276 | else: 277 | #else if word not in vocab, adds 0 weight 278 | pass 279 | fourgrams_scores.append(sum_weights) 280 | 281 | #get the fourgram itself 282 | w = [word for word in text.split()][fourgrams_scores.index(max(fourgrams_scores)):fourgrams_scores.index(max(fourgrams_scores))+n] 283 | 284 | #label 285 | myList.append(label) 286 | #start index of 4-gram 287 | myList.append(fourgrams_scores.index(max(fourgrams_scores))) 288 | #4-gram 289 | myList.append(" ".join(w)) 290 | #sum weighted score (highest) 291 | myList.append(max(fourgrams_scores)) 292 | 293 | writer.writerow(myList) 294 | 295 | f.close() 296 | 297 | if __name__ == "__main__": 298 | if len(sys.argv) < 8: 299 | print("usage: python " + str(os.path.basename(__file__) + " [|Y|] [train_dataset] [dev_dataset] [vocab_file] [version] [size of ngrams (0 if do not wish to generate)]")) 300 | sys.exit(0) 301 | main(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6], sys.argv[7]) 302 | 303 | -------------------------------------------------------------------------------- /mimicdata/mimic4_icd10/TOP_50_CODES.csv: -------------------------------------------------------------------------------- 1 | J189 2 | I129 3 | G4700 4 | M109 5 | I130 6 | Z955 7 | G4733 8 | I4891 9 | E1122 10 | E039 11 | F329 12 | D62 13 | J45909 14 | J449 15 | N189 16 | I252 17 | F17210 18 | Y92230 19 | N183 20 | I480 21 | E871 22 | E119 23 | Z23 24 | E669 25 | E785 26 | N179 27 | Z7902 28 | G8929 29 | Z66 30 | N400 31 | 02HV33Z 32 | Z951 33 | K219 34 | I10 35 | E872 36 | I2510 37 | D649 38 | Z87891 39 | Z8673 40 | F419 41 | I110 42 | K5900 43 | N390 44 | D696 45 | Z86718 46 | Y92239 47 | Y929 48 | J9601 49 | Z794 50 | Z7901 51 | -------------------------------------------------------------------------------- /mimicdata/mimic4_icd10/dev_50_hadm_ids.csv: -------------------------------------------------------------------------------- 1 | 29504245 2 | 25613153 3 | 24859259 4 | 20658767 5 | 26244055 6 | 24524866 7 | 26329980 8 | 26005204 9 | 25627342 10 | 22582998 11 | 21751007 12 | 22697576 13 | 27086305 14 | 22178368 15 | 21360276 16 | 27292944 17 | 20280405 18 | 21001286 19 | 23509132 20 | 28474253 21 | 23636274 22 | 29775848 23 | 23660940 24 | 29383289 25 | 24783536 26 | 26787181 27 | 23778507 28 | 22596689 29 | 24564184 30 | 21029588 31 | 26834766 32 | 20556908 33 | 27805131 34 | 20119933 35 | 20589010 36 | 26872281 37 | 26420387 38 | 28684559 39 | 21320856 40 | 23215123 41 | 23806395 42 | 25172495 43 | 25383632 44 | 22365622 45 | 25268284 46 | 24499091 47 | 24655135 48 | 28948687 49 | 25567316 50 | 28262761 51 | 25989336 52 | 22706717 53 | 22818956 54 | 21689128 55 | 20676099 56 | 20804575 57 | 23741709 58 | 23173291 59 | 27928720 60 | 24955708 61 | 24221696 62 | 23434639 63 | 24324454 64 | 23858610 65 | 22355109 66 | 21934758 67 | 22675963 68 | 21653933 69 | 21224163 70 | 21552969 71 | 24809958 72 | 24079808 73 | 23333045 74 | 25998001 75 | 28705462 76 | 29407386 77 | 26570829 78 | 24014887 79 | 28783117 80 | 29761826 81 | 25628089 82 | 26622536 83 | 23956699 84 | 28773319 85 | 21123768 86 | 28382342 87 | 25035164 88 | 25480553 89 | 26424296 90 | 27128240 91 | 28672778 92 | 20715617 93 | 24923349 94 | 20330234 95 | 23170104 96 | 24701865 97 | 29525070 98 | 26353144 99 | 20245918 100 | 20113727 101 | 22404097 102 | 28064360 103 | 28299770 104 | 22623861 105 | 20693701 106 | 25577298 107 | 29055596 108 | 25088291 109 | 27121858 110 | 26203524 111 | 28565544 112 | 20171565 113 | 22836439 114 | 22342182 115 | 28301167 116 | 22358205 117 | 20749810 118 | 23790471 119 | 22647855 120 | 21159449 121 | 24833343 122 | 21256049 123 | 20001395 124 | 28846737 125 | 21209931 126 | 27529381 127 | 20196866 128 | 26136375 129 | 20032645 130 | 23364683 131 | 29949735 132 | 22565447 133 | 22846375 134 | 24838289 135 | 26296889 136 | 23066391 137 | 20168214 138 | 21508930 139 | 24138785 140 | 21105354 141 | 28318886 142 | 24215654 143 | 25873821 144 | 23927157 145 | 23066172 146 | 22009525 147 | 21867343 148 | 29090590 149 | 20441454 150 | 21589242 151 | 25686639 152 | 29116792 153 | 24556511 154 | 23130152 155 | 20963752 156 | 29936689 157 | 29989198 158 | 28126869 159 | 26883769 160 | 27615566 161 | 29605756 162 | 20850610 163 | 23251600 164 | 24064482 165 | 21392110 166 | 27968723 167 | 22737406 168 | 26804225 169 | 22707684 170 | 28897839 171 | 28788088 172 | 25310314 173 | 27954158 174 | 21233527 175 | 28659937 176 | 25018523 177 | 28861378 178 | 21184522 179 | 22339614 180 | 23789780 181 | 25175900 182 | 22599474 183 | 21020541 184 | 25305012 185 | 28411501 186 | 26059382 187 | 28198999 188 | 23752502 189 | 24365736 190 | 24121489 191 | 20281918 192 | 24151397 193 | 28391221 194 | 20976147 195 | 26141667 196 | 25452165 197 | 21476079 198 | 27971985 199 | 28612466 200 | 21109565 201 | 21631709 202 | 27973156 203 | 26335184 204 | 22469038 205 | 29516322 206 | 29639211 207 | 20036409 208 | 22975454 209 | 24989222 210 | 21104224 211 | 28235883 212 | 20188982 213 | 27323207 214 | 25154724 215 | 20103661 216 | 24053387 217 | 20516600 218 | 22288926 219 | 29585666 220 | 20789479 221 | 24511371 222 | 24767695 223 | 20270617 224 | 25567330 225 | 25216166 226 | 25719027 227 | 26786943 228 | 26782306 229 | 23305233 230 | 21931412 231 | 22353581 232 | 26733842 233 | 23052680 234 | 29406226 235 | 24867488 236 | 21889211 237 | 27725568 238 | 29684773 239 | 27365233 240 | 29516278 241 | 27329710 242 | 20478411 243 | 22133617 244 | 22989015 245 | 29094401 246 | 23306582 247 | 23999083 248 | 21719711 249 | 21402657 250 | 24324209 251 | 24781855 252 | 25772617 253 | 26765337 254 | 22035660 255 | 22505587 256 | 27280274 257 | 20360387 258 | 27183313 259 | 28237094 260 | 27067429 261 | 21121930 262 | 27201718 263 | 29291854 264 | 23469748 265 | 24821037 266 | 20873909 267 | 27709193 268 | 27703114 269 | 28528265 270 | 21238416 271 | 20274576 272 | 21708593 273 | 28958477 274 | 29988666 275 | 27605072 276 | 24764125 277 | 25545821 278 | 25518386 279 | 25699716 280 | 27810051 281 | 27827584 282 | 29352137 283 | 27741674 284 | 27360299 285 | 27923586 286 | 22120421 287 | 24324983 288 | 28092720 289 | 26851696 290 | 26727785 291 | 25663610 292 | 21683435 293 | 27008557 294 | 26962059 295 | 26957142 296 | 29362084 297 | 27510695 298 | 29290687 299 | 20969579 300 | 28609225 301 | 28036645 302 | 29671644 303 | 20754396 304 | 21899711 305 | 22241740 306 | 20770327 307 | 23249829 308 | 23267117 309 | 26429957 310 | 26331968 311 | 21484924 312 | 22908725 313 | 29529322 314 | 21074749 315 | 22869649 316 | 22427885 317 | 23534825 318 | 26473630 319 | 21507630 320 | 27068358 321 | 20750310 322 | 27083621 323 | 25679038 324 | 28568501 325 | 24531107 326 | 20372507 327 | 28280811 328 | 28021725 329 | 26074572 330 | 25012642 331 | 26042147 332 | 29374359 333 | 28894603 334 | 27208540 335 | 20651492 336 | 20416656 337 | 21399601 338 | 25884976 339 | 26612112 340 | 27447233 341 | 22546178 342 | 20837509 343 | 27485035 344 | 29330851 345 | 21964217 346 | 26988390 347 | 23627238 348 | 20482625 349 | 25576035 350 | 25587038 351 | 21021898 352 | 24093350 353 | 20697613 354 | 28320584 355 | 28240894 356 | 22249206 357 | 22642142 358 | 27230255 359 | 29154657 360 | 23970308 361 | 29582462 362 | 26889212 363 | 28564107 364 | 24321463 365 | 24841179 366 | 25261543 367 | 28188560 368 | 22734488 369 | 25209781 370 | 21243572 371 | 23490282 372 | 22906633 373 | 22353446 374 | 24361369 375 | 26789912 376 | 25731044 377 | 23651123 378 | 25155535 379 | 26252086 380 | 22733576 381 | 20891881 382 | 28858190 383 | 21089660 384 | 27892346 385 | 25717483 386 | 25394939 387 | 28024340 388 | 23983339 389 | 28170664 390 | 24760408 391 | 29979074 392 | 21865539 393 | 25404198 394 | 26472130 395 | 23133305 396 | 20935362 397 | 20241505 398 | 28526413 399 | 26606353 400 | 29711734 401 | 27787735 402 | 27697220 403 | 23109778 404 | 26936535 405 | 22137875 406 | 29161897 407 | 20661641 408 | 28006893 409 | 26388642 410 | 27567899 411 | 26810714 412 | 26814926 413 | 20347503 414 | 20495943 415 | 21038088 416 | 29803827 417 | 23401701 418 | 23148978 419 | 21190229 420 | 28417833 421 | 20128314 422 | 26922075 423 | 26102463 424 | 23984001 425 | 24575376 426 | 26254085 427 | 26428561 428 | 21908688 429 | 27714687 430 | 20325282 431 | 21813184 432 | 26989759 433 | 24641219 434 | 21377732 435 | 21078886 436 | 27096176 437 | 21980738 438 | 24157246 439 | 27821866 440 | 21787934 441 | 28598584 442 | 23929063 443 | 26257040 444 | 20607097 445 | 26167754 446 | 23025958 447 | 27421495 448 | 28062414 449 | 29258191 450 | 20767290 451 | 21542412 452 | 20776731 453 | 24850353 454 | 28776429 455 | 27900615 456 | 28680780 457 | 23705104 458 | 24908073 459 | 21337361 460 | 24331229 461 | 24480219 462 | 24919661 463 | 28428111 464 | 20606838 465 | 24598964 466 | 26147077 467 | 20321190 468 | 23124798 469 | 21308610 470 | 24118705 471 | 25326227 472 | 26885859 473 | 20586914 474 | 29728449 475 | 20598025 476 | 22901958 477 | 22742222 478 | 28589785 479 | 24560430 480 | 24381806 481 | 22296534 482 | 21049918 483 | 20909515 484 | 24160453 485 | 26115309 486 | 24875769 487 | 29221831 488 | 25136353 489 | 23704085 490 | 20513435 491 | 28709909 492 | 21261923 493 | 20478108 494 | 28857787 495 | 20649934 496 | 21648159 497 | 26137712 498 | 22746343 499 | 29990073 500 | 22900482 501 | 21854745 502 | 27241340 503 | 28416178 504 | 20244975 505 | 29022262 506 | 24677519 507 | 23963695 508 | 27834147 509 | 24513505 510 | 27129004 511 | 24504249 512 | 22381343 513 | 20975745 514 | 21535419 515 | 26227132 516 | 27076397 517 | 25270693 518 | 21003300 519 | 23198740 520 | 29712479 521 | 27510474 522 | 21376273 523 | 26533615 524 | 29928159 525 | 29510098 526 | 25838840 527 | 29280645 528 | 29084164 529 | 25202470 530 | 20529253 531 | 25142725 532 | 21350191 533 | 22608243 534 | 28520194 535 | 24073359 536 | 23229177 537 | 24645614 538 | 27097999 539 | 23392711 540 | 23542028 541 | 26526704 542 | 20878598 543 | 22272743 544 | 20692891 545 | 28898910 546 | 20850178 547 | 22015797 548 | 21585443 549 | 25387305 550 | 27486760 551 | 28743215 552 | 21570363 553 | 27561687 554 | 20948657 555 | 27351613 556 | 24015243 557 | 24445797 558 | 20033338 559 | 25575938 560 | 27780166 561 | 25403395 562 | 23056237 563 | 25606040 564 | 24174145 565 | 25378068 566 | 26719796 567 | 29211114 568 | 28803961 569 | 25462472 570 | 20654975 571 | 27136787 572 | 29259449 573 | 20980232 574 | 23484497 575 | 26249641 576 | 21176648 577 | 26875625 578 | 23506424 579 | 22490908 580 | 20944339 581 | 25118191 582 | 29698110 583 | 21932557 584 | 28401495 585 | 23610240 586 | 22767092 587 | 22112295 588 | 20351038 589 | 21553160 590 | 20861104 591 | 23558886 592 | 29143017 593 | 27269242 594 | 21955132 595 | 29790625 596 | 24880929 597 | 20069521 598 | 27532221 599 | 29169676 600 | 29949850 601 | 26670063 602 | 26346796 603 | 27434609 604 | 29543158 605 | 25857020 606 | 24510690 607 | 22628369 608 | 29685580 609 | 29128412 610 | 28962469 611 | 21884519 612 | 28828537 613 | 28917205 614 | 24734507 615 | 27981683 616 | 27925232 617 | 29649068 618 | 22827089 619 | 26820159 620 | 20881865 621 | 21906436 622 | 21675781 623 | 26820521 624 | 21567116 625 | 21659609 626 | 22407262 627 | 28034848 628 | 26719664 629 | 27756406 630 | 23357868 631 | 22026730 632 | 20625723 633 | 22805908 634 | 23324257 635 | 23742561 636 | 28543087 637 | 20798638 638 | 21393418 639 | 25765126 640 | 26347960 641 | 25619058 642 | 25644816 643 | 29554811 644 | 20327372 645 | 22119989 646 | 28109076 647 | 22684818 648 | 20756114 649 | 25240069 650 | 21586864 651 | 26692293 652 | 29063249 653 | 22201912 654 | 25018403 655 | 20494235 656 | 24203806 657 | 25932273 658 | 29795027 659 | 20818432 660 | 29387043 661 | 29190535 662 | 23507095 663 | 24935878 664 | 23262776 665 | 22436342 666 | 21272587 667 | 20623342 668 | 27337799 669 | 22467017 670 | 23717963 671 | 27276812 672 | 20979778 673 | 23691483 674 | 26380769 675 | 21770488 676 | 24696537 677 | 20364306 678 | 28322208 679 | 29144082 680 | 26384556 681 | 22247729 682 | 23920943 683 | 22862876 684 | 29552970 685 | 21054416 686 | 25261789 687 | 23559500 688 | 21907966 689 | 22954531 690 | 23682641 691 | 28354206 692 | 29816121 693 | 25201441 694 | 29613255 695 | 26170838 696 | 25310581 697 | 26285075 698 | 24501779 699 | 24333157 700 | 24475830 701 | 24860241 702 | 23491977 703 | 29920483 704 | 27998021 705 | 25951184 706 | 25650581 707 | 23785086 708 | 21493363 709 | 21743950 710 | 22923235 711 | 22517237 712 | 25505798 713 | 25634208 714 | 25063929 715 | 25299236 716 | 25504517 717 | 29259131 718 | 22333358 719 | 29822240 720 | 26015355 721 | 28777975 722 | 25400540 723 | 28578702 724 | 28198479 725 | 21737890 726 | 24537480 727 | 28036198 728 | 27968822 729 | 20159267 730 | 26374781 731 | 22984788 732 | 27917040 733 | 24763626 734 | 20789590 735 | 24908097 736 | 28879674 737 | 27477408 738 | 27641434 739 | 20248087 740 | 28227896 741 | 28259328 742 | 29061146 743 | 23523021 744 | 25024043 745 | 27989978 746 | 24662172 747 | 22764825 748 | 21150019 749 | 28063666 750 | 22850858 751 | 20525506 752 | 28311773 753 | 22022614 754 | 21970498 755 | 29455708 756 | 23133975 757 | 24509054 758 | 24354223 759 | 20730449 760 | 25634870 761 | 29212092 762 | 26244150 763 | 22145203 764 | 29275177 765 | 27144487 766 | 21410123 767 | 29665867 768 | 28989974 769 | 23490360 770 | 21127836 771 | 20289704 772 | 24263643 773 | 25231593 774 | 22620672 775 | 25513700 776 | 27936559 777 | 27991709 778 | 27258866 779 | 26123079 780 | 26702216 781 | 23081517 782 | 28806522 783 | 28876219 784 | 25023446 785 | 28114222 786 | 24523484 787 | 21022247 788 | 21844762 789 | 23099193 790 | 26292643 791 | 24070422 792 | 22471766 793 | 25032711 794 | 22705830 795 | 26560823 796 | 20384472 797 | 22484812 798 | 23157842 799 | 20512929 800 | 27573659 801 | 26958448 802 | 27923669 803 | 28699469 804 | 22307900 805 | 29902184 806 | 25196715 807 | 26799374 808 | 20311854 809 | 22195917 810 | 21838867 811 | 22653244 812 | 29510277 813 | 27957236 814 | 21075207 815 | 22616521 816 | 26569000 817 | 29207012 818 | 23490828 819 | 20848203 820 | 24776651 821 | 22128926 822 | 27697050 823 | 29742220 824 | 26686059 825 | 23953913 826 | 24638080 827 | 29598650 828 | 24579508 829 | 26916117 830 | 21895470 831 | 25969190 832 | 20476695 833 | 27552693 834 | 23703848 835 | 28971694 836 | 27714358 837 | 22533225 838 | 27989625 839 | 28510958 840 | 28601581 841 | 27742976 842 | 26281308 843 | 26771203 844 | 24234642 845 | 29537902 846 | 21290804 847 | 21225387 848 | 25112926 849 | 22489748 850 | 26886831 851 | 24951354 852 | 26636810 853 | 23235665 854 | 27650067 855 | 26154732 856 | 21435488 857 | 22767498 858 | 21944813 859 | 25657295 860 | 20618956 861 | 29370824 862 | 25886011 863 | 29708509 864 | 26045286 865 | 24471180 866 | 21691757 867 | 25720973 868 | 29234463 869 | 20202114 870 | 21310729 871 | 25580716 872 | 20295574 873 | 23764198 874 | 25375742 875 | 28328714 876 | 27586299 877 | 28778671 878 | 21408982 879 | 28196108 880 | 29733523 881 | 24910158 882 | 26175355 883 | 25511006 884 | 29358185 885 | 26505023 886 | 24122555 887 | 28653404 888 | 24537232 889 | 27052619 890 | 29295812 891 | 26973025 892 | 25950445 893 | 20728294 894 | 29518141 895 | 25616323 896 | 29180213 897 | 22929344 898 | 23551805 899 | 28677406 900 | 28061875 901 | 23090454 902 | 25186102 903 | 27773800 904 | 27953378 905 | 21878609 906 | 25229179 907 | 27597528 908 | 20778225 909 | 28053611 910 | 29160491 911 | 21311574 912 | 24587961 913 | 24518525 914 | 20673864 915 | 22626202 916 | 20294328 917 | 21223114 918 | 23397352 919 | 24958361 920 | 21075344 921 | 21849304 922 | 20669525 923 | 22295549 924 | 22689291 925 | 26712765 926 | 24482754 927 | 28089121 928 | 29734203 929 | 25665595 930 | 27612427 931 | 20953736 932 | 24974580 933 | 26268272 934 | 27157751 935 | 26727243 936 | 23958659 937 | 24776477 938 | 27362253 939 | 20077220 940 | 22969744 941 | 24003728 942 | 21663605 943 | 27901265 944 | 28867120 945 | 26560431 946 | 27654819 947 | 25569528 948 | 27498460 949 | 22080042 950 | 28819997 951 | 20820789 952 | 22390339 953 | 29608500 954 | 23887244 955 | 23938674 956 | 28232162 957 | 24093341 958 | 28600472 959 | 20968160 960 | 23825711 961 | 24615497 962 | 25990619 963 | 20398206 964 | 21118175 965 | 26019883 966 | 28982138 967 | 24422500 968 | 29728377 969 | 26378116 970 | 29450239 971 | 22894670 972 | 26594627 973 | 29871158 974 | 28095184 975 | 23893816 976 | 24425272 977 | 29916440 978 | 27054428 979 | 29321825 980 | 26308231 981 | 21740093 982 | 24283539 983 | 22142392 984 | 25764544 985 | 23480692 986 | 28060933 987 | 29085120 988 | 25826773 989 | 28743603 990 | 21467339 991 | 27630614 992 | 25806296 993 | 25162877 994 | 22338959 995 | 21368983 996 | 23736151 997 | 29966629 998 | 22102720 999 | 27957527 1000 | 22541760 1001 | 23783062 1002 | 29197368 1003 | 23998126 1004 | 21508006 1005 | 21429491 1006 | 20268766 1007 | 20728183 1008 | 25341184 1009 | 24078910 1010 | 21708617 1011 | 26173056 1012 | 23437357 1013 | 24131806 1014 | 20611802 1015 | 24984086 1016 | 20009544 1017 | 22861567 1018 | 23557746 1019 | 21439368 1020 | 20927745 1021 | 21119532 1022 | 26959301 1023 | 20783605 1024 | 29839757 1025 | 28343220 1026 | 23170638 1027 | 24432652 1028 | 28850931 1029 | 23349223 1030 | 28771784 1031 | 28441135 1032 | 24070673 1033 | 24982986 1034 | 20209826 1035 | 29655777 1036 | 24812661 1037 | 20132492 1038 | 27908936 1039 | 25019641 1040 | 27975545 1041 | 23000521 1042 | 23758359 1043 | 20623686 1044 | 27302106 1045 | 22367412 1046 | 24349938 1047 | 27295973 1048 | 23670383 1049 | 21993085 1050 | 25894657 1051 | 26968735 1052 | 22009838 1053 | 28748024 1054 | 29641341 1055 | 28588739 1056 | 27857915 1057 | 21404454 1058 | 24722145 1059 | 29522152 1060 | 24759243 1061 | 22646076 1062 | 20359903 1063 | 25247397 1064 | 26627376 1065 | 22929072 1066 | 29841797 1067 | 28230265 1068 | 29832963 1069 | 29207040 1070 | 21918300 1071 | 24000677 1072 | 27963659 1073 | 28033997 1074 | 20453187 1075 | 20521950 1076 | 28590698 1077 | 26044496 1078 | 20851249 1079 | 24726318 1080 | 20430313 1081 | 24816872 1082 | 26073449 1083 | 29984291 1084 | 21596326 1085 | 22140408 1086 | 29210026 1087 | 25822900 1088 | 29612261 1089 | 21725811 1090 | 20198539 1091 | 21644012 1092 | 24868025 1093 | 20492239 1094 | 27136367 1095 | 20972261 1096 | 28175202 1097 | 26141943 1098 | 28715446 1099 | 25624620 1100 | 26531028 1101 | 22712217 1102 | 24447752 1103 | 20878961 1104 | 22525517 1105 | 29111877 1106 | 22651802 1107 | 28466063 1108 | 24360479 1109 | 27164605 1110 | 29899970 1111 | 20649692 1112 | 21372728 1113 | 24197444 1114 | 25325455 1115 | 26346160 1116 | 23462552 1117 | 22493711 1118 | 26440429 1119 | 20419133 1120 | 29538364 1121 | 20715808 1122 | 28551516 1123 | 20993767 1124 | 22438197 1125 | 26007217 1126 | 29475809 1127 | 22953176 1128 | 21608512 1129 | 21121292 1130 | 29187391 1131 | 24459323 1132 | 26888851 1133 | 24355218 1134 | 21838381 1135 | 24583010 1136 | 29438205 1137 | 29951293 1138 | 26097283 1139 | 20391892 1140 | 28808969 1141 | 28294562 1142 | 27399973 1143 | 21687077 1144 | 23178771 1145 | 21160317 1146 | 20852869 1147 | 20236616 1148 | 21284477 1149 | 24330979 1150 | 26722542 1151 | 21871355 1152 | 27436254 1153 | 24787432 1154 | 25412595 1155 | 29148768 1156 | 22474799 1157 | 25313822 1158 | 24353866 1159 | 23859192 1160 | 29621572 1161 | 29487903 1162 | 29910597 1163 | 23656996 1164 | 20953785 1165 | 26184065 1166 | 29563154 1167 | 27148040 1168 | 26162238 1169 | 26622459 1170 | 20476767 1171 | 23649815 1172 | 20947071 1173 | 27096138 1174 | 21544280 1175 | 20525801 1176 | 22097524 1177 | 20024499 1178 | 29831299 1179 | 28842470 1180 | 27203457 1181 | 20440697 1182 | 24226433 1183 | 29605540 1184 | 29419692 1185 | 25544435 1186 | 25270535 1187 | 24511569 1188 | 24344831 1189 | 20363371 1190 | 21490507 1191 | 28118417 1192 | 24003538 1193 | 24378436 1194 | 23943725 1195 | 23802159 1196 | 29821385 1197 | 29708998 1198 | 24490951 1199 | 26650720 1200 | 21198710 1201 | 28700315 1202 | 26172894 1203 | 25585230 1204 | 24793872 1205 | 26525343 1206 | 27541563 1207 | 23411037 1208 | 28553730 1209 | 26899165 1210 | 29268227 1211 | 21459576 1212 | 23451487 1213 | 25731592 1214 | 21079615 1215 | 26570078 1216 | 24431802 1217 | 23209737 1218 | 26063921 1219 | 20616535 1220 | 21912593 1221 | 24404431 1222 | 28255524 1223 | 27810200 1224 | 24768641 1225 | 29762990 1226 | 22302903 1227 | 27059118 1228 | 24380504 1229 | 27493081 1230 | 29109552 1231 | 28432789 1232 | 23544897 1233 | 26570932 1234 | 29250526 1235 | 21461855 1236 | 26856765 1237 | 20186354 1238 | 21001794 1239 | 24039171 1240 | 25381393 1241 | 25255878 1242 | 29499926 1243 | 23878108 1244 | 26479009 1245 | 21630334 1246 | 22122422 1247 | 23707995 1248 | 27104105 1249 | 28621941 1250 | 21211219 1251 | 20793053 1252 | 22231007 1253 | 25991406 1254 | 28007708 1255 | 25579302 1256 | 22246063 1257 | 25157581 1258 | 23430532 1259 | 26045834 1260 | 22034473 1261 | 25880533 1262 | 26238833 1263 | 28312089 1264 | 27025474 1265 | 22698103 1266 | 23868489 1267 | 20922898 1268 | 26999973 1269 | 25862087 1270 | 23787081 1271 | 20081408 1272 | 27884528 1273 | 21071752 1274 | 24637433 1275 | 25599811 1276 | 25361276 1277 | 23189373 1278 | 29262368 1279 | 29074882 1280 | 28227799 1281 | 21912981 1282 | 20817381 1283 | 28339069 1284 | 28048820 1285 | 29032430 1286 | 29840328 1287 | 21379613 1288 | 28441629 1289 | 26678507 1290 | 22301065 1291 | 25533962 1292 | 22334290 1293 | 23004753 1294 | 24815443 1295 | 28469621 1296 | 24276794 1297 | 29527095 1298 | 26849436 1299 | 23198180 1300 | 28925756 1301 | 20168443 1302 | 20347160 1303 | 21503329 1304 | 27243356 1305 | 26360050 1306 | 21658149 1307 | 23789242 1308 | 24487370 1309 | 26605318 1310 | 20026345 1311 | 21663516 1312 | 26610405 1313 | 26219632 1314 | 22344458 1315 | 23222557 1316 | 20275428 1317 | 28578802 1318 | 25928444 1319 | 26034476 1320 | 29097012 1321 | 22614923 1322 | 23739236 1323 | 29131207 1324 | 20542187 1325 | 24327584 1326 | 26041342 1327 | 26212083 1328 | 29280806 1329 | 28984349 1330 | 23666597 1331 | 28905068 1332 | 20519139 1333 | 25123729 1334 | 26883606 1335 | 24810526 1336 | 23692772 1337 | 25436390 1338 | 28551521 1339 | 25747477 1340 | 24276866 1341 | 26523042 1342 | 27883353 1343 | 25316535 1344 | 21010568 1345 | 22062956 1346 | 28463896 1347 | 22042794 1348 | 21780565 1349 | 24420678 1350 | 23678279 1351 | 20849647 1352 | 26567819 1353 | 22995802 1354 | 26285872 1355 | 23827733 1356 | 26857944 1357 | 26077013 1358 | 26294661 1359 | 20938840 1360 | 22838362 1361 | 24078152 1362 | 27424909 1363 | 26327953 1364 | 23152148 1365 | 26855371 1366 | 25030576 1367 | 22618060 1368 | 24057597 1369 | 21710929 1370 | 26450610 1371 | 29713017 1372 | 28441105 1373 | 22355644 1374 | 29935515 1375 | 28674880 1376 | 21778733 1377 | 29427252 1378 | 26025195 1379 | 27772971 1380 | 29884987 1381 | 29474810 1382 | 25343776 1383 | 26495345 1384 | 29224818 1385 | 26282119 1386 | 23779336 1387 | 24348087 1388 | 20530249 1389 | 26983493 1390 | 28428841 1391 | 29785781 1392 | 27293277 1393 | 23606489 1394 | 29296123 1395 | 25694537 1396 | 27097631 1397 | 26723070 1398 | 27353781 1399 | 24347318 1400 | 27371245 1401 | 22041226 1402 | 27742080 1403 | 26718947 1404 | 20281904 1405 | 25202623 1406 | 20936041 1407 | 24562918 1408 | 22954974 1409 | 29412092 1410 | 25964396 1411 | 21094850 1412 | 26897004 1413 | 28190074 1414 | 23530621 1415 | 23302095 1416 | 24846722 1417 | 20591054 1418 | 21922271 1419 | 28177679 1420 | 23705968 1421 | 22523911 1422 | 23745461 1423 | 28822852 1424 | 26363804 1425 | 27982954 1426 | 21495492 1427 | 28681965 1428 | 20494438 1429 | 29376924 1430 | 21831252 1431 | 25140300 1432 | 25465425 1433 | 26345870 1434 | 25760288 1435 | 21855857 1436 | 21318218 1437 | 29229210 1438 | 27740206 1439 | 27674739 1440 | 20584002 1441 | 20954239 1442 | 23353553 1443 | 27291541 1444 | 22280709 1445 | 26346102 1446 | 22458524 1447 | 21303358 1448 | 22388817 1449 | 23417913 1450 | 28921679 1451 | 26393576 1452 | 28882262 1453 | 28256248 1454 | 26802557 1455 | 28323062 1456 | 26979828 1457 | 27318319 1458 | 21855014 1459 | 22878829 1460 | 23567251 1461 | 25144827 1462 | 26887554 1463 | 28858449 1464 | 24222129 1465 | 26407359 1466 | 24165691 1467 | 28387800 1468 | 23494296 1469 | 25521267 1470 | 20620858 1471 | 24506249 1472 | 21113027 1473 | 27695752 1474 | 21843428 1475 | 21722779 1476 | 25657107 1477 | 24965231 1478 | 29303393 1479 | 29391795 1480 | 23374859 1481 | 27852814 1482 | 28850531 1483 | 23006650 1484 | 26625457 1485 | 20204353 1486 | 25916000 1487 | 27648984 1488 | 25658400 1489 | 20533412 1490 | 24791611 1491 | 22440388 1492 | 21965768 1493 | 23753772 1494 | 28415213 1495 | 21034394 1496 | 20434486 1497 | 23771515 1498 | 20471993 1499 | 22714316 1500 | 23405094 1501 | 21498211 1502 | 28814909 1503 | 22290449 1504 | 25316252 1505 | 21557040 1506 | 22781592 1507 | 21607808 1508 | 25334013 1509 | 24644921 1510 | 22621981 1511 | 28086171 1512 | 24212894 1513 | 26893591 1514 | 25044584 1515 | 26263970 1516 | 28248924 1517 | 24478052 1518 | 21496561 1519 | 26639750 1520 | 24951444 1521 | 22229248 1522 | 24300036 1523 | 22569877 1524 | 21699931 1525 | 24747526 1526 | 24057593 1527 | 25797337 1528 | 24563254 1529 | 24797956 1530 | 20519389 1531 | 28469133 1532 | 29951141 1533 | 29504729 1534 | 24336050 1535 | 24371419 1536 | 23105149 1537 | 22744135 1538 | 24940201 1539 | 28917979 1540 | 21306583 1541 | 25538762 1542 | 26999162 1543 | 27679787 1544 | 28192667 1545 | 22396164 1546 | 22933017 1547 | 29672980 1548 | 24827299 1549 | 27303370 1550 | 28125218 1551 | 24683780 1552 | 24318433 1553 | 24281725 1554 | 20263749 1555 | 20878334 1556 | 23673711 1557 | 21789353 1558 | 25525564 1559 | 25769306 1560 | 22708939 1561 | 22914522 1562 | 23210780 1563 | 28811620 1564 | 29494650 1565 | 21632397 1566 | 24279136 1567 | 24979225 1568 | 29786720 1569 | 29001082 1570 | 20508291 1571 | 25967610 1572 | 23558394 1573 | 29559314 1574 | 25424674 1575 | 27619833 1576 | 26138147 1577 | 22487373 1578 | 21481373 1579 | 25858090 1580 | 28411972 1581 | 22542051 1582 | 25050979 1583 | 27356261 1584 | 22941580 1585 | 26211408 1586 | 25926575 1587 | 23164185 1588 | 24562732 1589 | 29967312 1590 | 27218054 1591 | 20887498 1592 | 24130604 1593 | 20483058 1594 | 27184355 1595 | 25628582 1596 | 27776170 1597 | 25537165 1598 | 29977761 1599 | 23364125 1600 | 24703174 1601 | 23997524 1602 | 23635051 1603 | 25723590 1604 | 28928017 1605 | 20877732 1606 | 23808334 1607 | 23589580 1608 | 22443934 1609 | 21831401 1610 | 29635735 1611 | 27100486 1612 | 22608488 1613 | 22644225 1614 | 24501982 1615 | 29937226 1616 | 21988570 1617 | 23580023 1618 | 21465564 1619 | 23490230 1620 | 26937439 1621 | 21159353 1622 | 28705660 1623 | 23127704 1624 | 29023571 1625 | 25183245 1626 | 23756302 1627 | 26417510 1628 | 28823314 1629 | 27311633 1630 | 22939500 1631 | 28021123 1632 | 25231391 1633 | 26150772 1634 | 24804085 1635 | 25288717 1636 | 20046045 1637 | 21294938 1638 | 20958170 1639 | 28318912 1640 | 22806117 1641 | 27163352 1642 | 29679540 1643 | 21392737 1644 | 22578905 1645 | 20855947 1646 | 26248373 1647 | 21899932 1648 | 26893024 1649 | 29639627 1650 | 21117351 1651 | 27864087 1652 | 23128440 1653 | 21475988 1654 | 25410274 1655 | 20306330 1656 | 28502848 1657 | 26179384 1658 | 26605173 1659 | 22058403 1660 | 29341103 1661 | 26425609 1662 | 22658574 1663 | 26686622 1664 | 24196251 1665 | 22167217 1666 | 29919261 1667 | 26434994 1668 | 26842916 1669 | 23374911 1670 | 21038826 1671 | 23269393 1672 | 23934447 1673 | 25914632 1674 | 28474597 1675 | 20020095 1676 | 26430573 1677 | 29625752 1678 | 24557197 1679 | 25923081 1680 | 21250437 1681 | 22279508 1682 | 20427863 1683 | 26510163 1684 | 24543933 1685 | 27969745 1686 | 24322430 1687 | 23784607 1688 | 21089314 1689 | 24865442 1690 | 28117773 1691 | 21413175 1692 | 24740490 1693 | 25688537 1694 | 22400729 1695 | 26960264 1696 | 22477953 1697 | 26840185 1698 | 24713686 1699 | 20001811 1700 | 25462989 1701 | 24235968 1702 | 29431223 1703 | 21645957 1704 | 20887182 1705 | 22017801 1706 | 29766340 1707 | 21416766 1708 | 21340193 1709 | 27785116 1710 | 20654982 1711 | 24506053 1712 | 25902218 1713 | 24112883 1714 | 22495606 1715 | 22308802 1716 | 26538417 1717 | 22026023 1718 | 20958161 1719 | 29173219 1720 | 27144087 1721 | 29509113 1722 | 25922753 1723 | 26653503 1724 | 23902955 1725 | 24311757 1726 | 20686096 1727 | 24260459 1728 | 27099123 1729 | 20602622 1730 | 21362902 1731 | 21687142 1732 | 29895791 1733 | 28943812 1734 | 22985389 1735 | 24217062 1736 | 28674044 1737 | 21665734 1738 | 26975424 1739 | 24505530 1740 | 26075412 1741 | 20735744 1742 | 20489658 1743 | 23258052 1744 | 27269114 1745 | 22886929 1746 | 21033948 1747 | 26168794 1748 | 27030289 1749 | 23676876 1750 | 21088698 1751 | 25247849 1752 | 21213674 1753 | 27645826 1754 | 23593475 1755 | 28628386 1756 | 21656435 1757 | 28484253 1758 | 26508407 1759 | 20546376 1760 | 24691990 1761 | 26564451 1762 | 27297743 1763 | 25985851 1764 | 20446603 1765 | 28366150 1766 | 23845458 1767 | 25555967 1768 | 27773075 1769 | 28061140 1770 | 27062717 1771 | 20760364 1772 | 21389970 1773 | 22577063 1774 | 25085009 1775 | 26670667 1776 | 29289048 1777 | 27881456 1778 | 28832880 1779 | 28463471 1780 | 22074751 1781 | 28743239 1782 | 28012662 1783 | 21250011 1784 | 24852430 1785 | 21315274 1786 | 28895318 1787 | 22518946 1788 | 27526116 1789 | 28806396 1790 | 22477358 1791 | 20483724 1792 | 20474375 1793 | 22361164 1794 | 27991288 1795 | 22491477 1796 | 22193042 1797 | 24997311 1798 | 28437233 1799 | 24535550 1800 | 27989682 1801 | 21633928 1802 | 26041305 1803 | 22082603 1804 | 25505983 1805 | 20730037 1806 | 20295728 1807 | 22158442 1808 | 27751192 1809 | 25555478 1810 | 25980163 1811 | 28553408 1812 | 20816438 1813 | 23768316 1814 | 26929793 1815 | 25772414 1816 | 23711795 1817 | 21260696 1818 | 20291364 1819 | 25285629 1820 | 29137091 1821 | 23177385 1822 | 25747579 1823 | 25662778 1824 | 22524486 1825 | 20726440 1826 | 29130041 1827 | 22124970 1828 | 20572769 1829 | 29795940 1830 | 28793008 1831 | 28461296 1832 | 29628674 1833 | 29625241 1834 | 23054645 1835 | 23138322 1836 | 27446873 1837 | 25297505 1838 | 29371922 1839 | 21516900 1840 | 25511420 1841 | 22178562 1842 | 27611398 1843 | 26971162 1844 | 28052869 1845 | 27258929 1846 | 22442842 1847 | 22515356 1848 | 24738659 1849 | 22488362 1850 | 26799262 1851 | 29720546 1852 | 27782205 1853 | 28575062 1854 | 24077647 1855 | 23204342 1856 | 27584484 1857 | 21004812 1858 | 20622774 1859 | 21405981 1860 | 24693844 1861 | 21546366 1862 | 20639096 1863 | 27868167 1864 | 25929077 1865 | 25060745 1866 | 22601200 1867 | 28355983 1868 | 27118235 1869 | 22316868 1870 | 28391387 1871 | 22167542 1872 | 26271577 1873 | 26898466 1874 | 21188571 1875 | 22042255 1876 | 25969667 1877 | 27958778 1878 | 28528068 1879 | 20298928 1880 | 29822633 1881 | 24862496 1882 | 25377140 1883 | 29101136 1884 | 26248516 1885 | 27747042 1886 | 23878020 1887 | 26739143 1888 | 27048470 1889 | 29160542 1890 | 21092023 1891 | 28289094 1892 | 29374595 1893 | 25014428 1894 | 23083317 1895 | 22642016 1896 | 20134224 1897 | 24131738 1898 | 23833366 1899 | 23992120 1900 | 20504421 1901 | 27613447 1902 | 20282547 1903 | 27748073 1904 | 26771723 1905 | 27074132 1906 | 29283662 1907 | 27334101 1908 | 27776037 1909 | 23192547 1910 | 21979847 1911 | 29740108 1912 | 21115484 1913 | 20997065 1914 | 29977646 1915 | 20557368 1916 | 28792982 1917 | 25773170 1918 | 28236213 1919 | 21219097 1920 | 20474896 1921 | 28459311 1922 | 25277307 1923 | 28506441 1924 | 27394628 1925 | 27993553 1926 | 20763309 1927 | 23007106 1928 | 27489927 1929 | 25416014 1930 | 27826641 1931 | 21361023 1932 | 24945050 1933 | 21791554 1934 | 29360056 1935 | 21965360 1936 | 27913494 1937 | 22324466 1938 | 28622729 1939 | 23686022 1940 | 21005127 1941 | 23970299 1942 | 23498084 1943 | 28921286 1944 | 27475740 1945 | 23940384 1946 | 28710710 1947 | 28169830 1948 | 22674643 1949 | 21192937 1950 | 23881631 1951 | 24164336 1952 | 21053833 1953 | 20445653 1954 | 21647439 1955 | 28814365 1956 | 27705655 1957 | 20455433 1958 | 24354811 1959 | 21911663 1960 | 26145774 1961 | 27076292 1962 | 28681260 1963 | 22090713 1964 | 27104668 1965 | 23167808 1966 | 22718212 1967 | 21889669 1968 | 25664924 1969 | 26534989 1970 | 21412032 1971 | 23304572 1972 | 25911131 1973 | 24036999 1974 | 29623625 1975 | 25306949 1976 | 24099179 1977 | 22514296 1978 | 29010940 1979 | 25951566 1980 | 24987313 1981 | 21542219 1982 | 25482155 1983 | 27775858 1984 | 26219826 1985 | 23005495 1986 | 22500517 1987 | 21582110 1988 | 29138171 1989 | 20682418 1990 | 22893708 1991 | 25007382 1992 | 27983916 1993 | 26972578 1994 | 26606878 1995 | 26243235 1996 | 23256237 1997 | 23943129 1998 | 27787695 1999 | 22634448 2000 | 26910934 2001 | 28462046 2002 | 21818897 2003 | 21485458 2004 | 27630026 2005 | 23421967 2006 | 20679385 2007 | 26453727 2008 | 23573002 2009 | 26200601 2010 | 29621540 2011 | 29993812 2012 | 26860653 2013 | 20009795 2014 | 29137661 2015 | 20223815 2016 | 26494969 2017 | 29519371 2018 | 29222682 2019 | 28120796 2020 | 21846157 2021 | 24362657 2022 | 26514044 2023 | 22737346 2024 | 28117750 2025 | 26910975 2026 | 24601401 2027 | 26998031 2028 | 21124406 2029 | 23487223 2030 | 22172304 2031 | 27016978 2032 | 20796006 2033 | 27589560 2034 | 28504659 2035 | 21019069 2036 | 29484530 2037 | 22517963 2038 | 26362355 2039 | 23707561 2040 | 20086887 2041 | 22924380 2042 | 21196818 2043 | 26792014 2044 | 29045680 2045 | 23045777 2046 | 24871331 2047 | 26447903 2048 | 25383012 2049 | 20337380 2050 | 21507269 2051 | 21561373 2052 | 21148860 2053 | 22871318 2054 | 21025287 2055 | 22054369 2056 | 21408710 2057 | 22175460 2058 | 29563192 2059 | 25609198 2060 | 28175486 2061 | 28680309 2062 | 26757350 2063 | 25349096 2064 | 23527215 2065 | 27387753 2066 | 22199235 2067 | 23567041 2068 | 28678759 2069 | 24885301 2070 | 20062753 2071 | 22952578 2072 | 24975738 2073 | 25994887 2074 | 28913876 2075 | 21250742 2076 | 27083222 2077 | 20392675 2078 | 21211403 2079 | 29220917 2080 | 25797368 2081 | 21109958 2082 | 24981518 2083 | 29919505 2084 | 21040474 2085 | 26573359 2086 | 21385029 2087 | 23758928 2088 | 24236591 2089 | 29736304 2090 | 24474801 2091 | 24722784 2092 | 28091968 2093 | 24385232 2094 | 23604021 2095 | 24593069 2096 | 27436918 2097 | 28910086 2098 | 25131454 2099 | 28181749 2100 | 23090401 2101 | 28611445 2102 | 21208299 2103 | 27817581 2104 | 25733813 2105 | 29322500 2106 | 25893331 2107 | 22531664 2108 | 28071242 2109 | 23107729 2110 | 20801715 2111 | 20613831 2112 | 26828992 2113 | 22149024 2114 | 28552124 2115 | 27034872 2116 | 27381045 2117 | 21858052 2118 | 29080342 2119 | 21606243 2120 | 23851406 2121 | 24886039 2122 | 21661815 2123 | 20539733 2124 | 21938707 2125 | 20864554 2126 | 27904593 2127 | 28728146 2128 | 29228672 2129 | 29138442 2130 | 25666941 2131 | 27395184 2132 | 25393907 2133 | 26271007 2134 | 26707548 2135 | 20920890 2136 | 23750849 2137 | 27435057 2138 | 29573197 2139 | 29448976 2140 | 24781925 2141 | 25389357 2142 | 29727450 2143 | 29319999 2144 | 24762009 2145 | 24548126 2146 | 21850258 2147 | 27885839 2148 | 21994733 2149 | 21246909 2150 | 26202768 2151 | 28078003 2152 | 20015409 2153 | 23393953 2154 | 27946900 2155 | 22678757 2156 | 27863856 2157 | 20121235 2158 | 26448261 2159 | 28542451 2160 | 21409723 2161 | 29705034 2162 | 26037981 2163 | 23600463 2164 | 22695562 2165 | 24229729 2166 | 25420880 2167 | 24028268 2168 | 20738158 2169 | 24855226 2170 | 24381621 2171 | 29680700 2172 | 23770178 2173 | 25389207 2174 | 22478783 2175 | 22391626 2176 | 22404085 2177 | 25634014 2178 | 26130044 2179 | 29388327 2180 | 23223968 2181 | 21056565 2182 | 20906303 2183 | 23811939 2184 | 28840819 2185 | 29211676 2186 | 23559728 2187 | 29508368 2188 | 27593295 2189 | 26086419 2190 | 22976893 2191 | 26332440 2192 | 24496146 2193 | 23493488 2194 | 23679375 2195 | 23639272 2196 | 29752307 2197 | 22296296 2198 | 21554040 2199 | 22260200 2200 | 20565810 2201 | 23927937 2202 | 28625565 2203 | 29131811 2204 | 21812606 2205 | 29237896 2206 | 26977522 2207 | 21427242 2208 | 28025785 2209 | 21723679 2210 | 22283489 2211 | 22204328 2212 | 20594552 2213 | 20476255 2214 | 25194723 2215 | 24393674 2216 | 20120713 2217 | 20581266 2218 | 28151761 2219 | 20833776 2220 | 23276846 2221 | 29597865 2222 | 26102040 2223 | 28240629 2224 | 23020379 2225 | 24567350 2226 | 27796176 2227 | 27976221 2228 | 21567181 2229 | 26352671 2230 | 20582397 2231 | 25231388 2232 | 20783870 2233 | 27622323 2234 | 20013839 2235 | 27317586 2236 | 28321639 2237 | 25218709 2238 | 29028068 2239 | 24455267 2240 | 27463306 2241 | 20066597 2242 | 28755409 2243 | 20617589 2244 | 27181431 2245 | 20683795 2246 | 21012517 2247 | 25155559 2248 | 22544641 2249 | 26978538 2250 | 20864265 2251 | 28020295 2252 | 24488579 2253 | 21881271 2254 | 21734467 2255 | 23016043 2256 | 24063376 2257 | 27019593 2258 | 28336702 2259 | 23157665 2260 | 26526115 2261 | 27130554 2262 | 23396335 2263 | 21941311 2264 | 26103576 2265 | 24029331 2266 | 22177826 2267 | 24751909 2268 | 26199514 2269 | 24507184 2270 | 20068687 2271 | 23370814 2272 | 27069605 2273 | 22212629 2274 | 26158784 2275 | 24087950 2276 | 24630582 2277 | 20389413 2278 | 27327184 2279 | 20860003 2280 | 24047543 2281 | 23087016 2282 | 22394679 2283 | 22646176 2284 | 29520812 2285 | 21029625 2286 | 29032156 2287 | 23126648 2288 | 25024449 2289 | 20285079 2290 | 22594987 2291 | 27465217 2292 | 24418220 2293 | 28884178 2294 | 22451045 2295 | 28243236 2296 | 29675100 2297 | 23914378 2298 | 29393328 2299 | 27490466 2300 | 22401016 2301 | 24152805 2302 | 24571732 2303 | 27787697 2304 | 24561701 2305 | 21052505 2306 | 27447491 2307 | 29794789 2308 | 21175592 2309 | 22136043 2310 | 27612354 2311 | 21005617 2312 | 28461159 2313 | 22808877 2314 | 29064950 2315 | 24298230 2316 | 29187852 2317 | 22977092 2318 | 28954577 2319 | 20210983 2320 | 20063875 2321 | 22710924 2322 | 20131838 2323 | 23949733 2324 | 21759601 2325 | 26210754 2326 | 28511590 2327 | 28399085 2328 | 28578405 2329 | 24898739 2330 | 28169244 2331 | 24214713 2332 | 25525962 2333 | 26751350 2334 | 29358821 2335 | 21611540 2336 | 28863712 2337 | 28261435 2338 | 28448765 2339 | 29258265 2340 | 29865517 2341 | 23442366 2342 | 25765708 2343 | 23567943 2344 | 26325106 2345 | 25748124 2346 | 28868868 2347 | 24980184 2348 | 27704318 2349 | 23763587 2350 | 20916697 2351 | 26331670 2352 | 26809563 2353 | 20098814 2354 | 29162423 2355 | 28680883 2356 | 23501654 2357 | 24157959 2358 | 26884943 2359 | 27183806 2360 | 22018361 2361 | 20198498 2362 | 23987698 2363 | 27940663 2364 | 24457260 2365 | 24858615 2366 | 26329203 2367 | 27024362 2368 | 20424554 2369 | 23683720 2370 | 20864666 2371 | 24909983 2372 | 22208191 2373 | 24176724 2374 | 23745843 2375 | 25496588 2376 | 27984463 2377 | 29157211 2378 | 22741804 2379 | 26584893 2380 | 27717240 2381 | 27939068 2382 | 24546110 2383 | 23651627 2384 | 25024443 2385 | 26320880 2386 | 29914965 2387 | 28128502 2388 | 28146637 2389 | 29726516 2390 | 28833494 2391 | 27600282 2392 | 28376411 2393 | 23933770 2394 | 24981486 2395 | 24383001 2396 | 24795534 2397 | 27949424 2398 | 26302670 2399 | 26499369 2400 | 24869263 2401 | 29674051 2402 | 27360919 2403 | 20437464 2404 | 29607818 2405 | 22083721 2406 | 25196585 2407 | 22117056 2408 | 26665551 2409 | 20343841 2410 | 27921341 2411 | 21997509 2412 | 25436800 2413 | 23291370 2414 | 20945849 2415 | 26146740 2416 | 21093546 2417 | 22008581 2418 | 25910634 2419 | 25542112 2420 | 26555267 2421 | 24061779 2422 | 28201416 2423 | 24369954 2424 | 26311470 2425 | 24257560 2426 | 29354388 2427 | 26722932 2428 | 25942445 2429 | 28781705 2430 | 22396912 2431 | 29167571 2432 | 28939657 2433 | 24764787 2434 | 29623349 2435 | 26932078 2436 | 20791988 2437 | 20277443 2438 | 22902908 2439 | 28519937 2440 | 29249777 2441 | 26396709 2442 | 26456097 2443 | 29533679 2444 | 27895771 2445 | 21798713 2446 | 20146521 2447 | 27881790 2448 | 29081505 2449 | 25936317 2450 | 21297827 2451 | 25253623 2452 | 29537033 2453 | 27083268 2454 | 28638111 2455 | 24696292 2456 | 25716013 2457 | 23567258 2458 | 22265914 2459 | 20295664 2460 | 23616136 2461 | 21952348 2462 | 23168312 2463 | 20994664 2464 | 26326547 2465 | 23250163 2466 | 21484759 2467 | 27113961 2468 | 29495725 2469 | 20212017 2470 | 27957542 2471 | 28283006 2472 | 27562334 2473 | 27083905 2474 | 25638443 2475 | 25840205 2476 | 24617497 2477 | 21321080 2478 | 24198559 2479 | 24110990 2480 | 25869923 2481 | 20137544 2482 | 25532889 2483 | 25440945 2484 | 21890594 2485 | 21398054 2486 | 20674273 2487 | 29760143 2488 | 25409633 2489 | 24724117 2490 | 24980275 2491 | 21018849 2492 | 23803123 2493 | 27778885 2494 | 22519807 2495 | 23384882 2496 | 24278279 2497 | 20313352 2498 | 27284996 2499 | 23173110 2500 | 29794772 2501 | 21214210 2502 | 21391885 2503 | 22683392 2504 | 27284446 2505 | 28319750 2506 | 23009518 2507 | 20271334 2508 | 24130049 2509 | 29043908 2510 | 23673484 2511 | 20283132 2512 | 23290951 2513 | 24277841 2514 | 28267335 2515 | 21430325 2516 | 24661612 2517 | 28278334 2518 | 25664988 2519 | 28632614 2520 | 25180688 2521 | 29597185 2522 | 23682711 2523 | 20606476 2524 | 22212406 2525 | 24618629 2526 | 22270027 2527 | 23481250 2528 | 20540501 2529 | 22241351 2530 | 24651179 2531 | 28049461 2532 | 27006362 2533 | 29542095 2534 | 22556595 2535 | 21731461 2536 | 27202919 2537 | 20712960 2538 | 28363156 2539 | 26335349 2540 | 21835630 2541 | 29407344 2542 | 28035902 2543 | 23948770 2544 | 20352168 2545 | 24724193 2546 | 25901906 2547 | 24843270 2548 | 29761340 2549 | 21587377 2550 | 24084438 2551 | 20044161 2552 | 23543884 2553 | 23247847 2554 | 24312793 2555 | 25451068 2556 | 23258182 2557 | 26104698 2558 | 23513475 2559 | 24224298 2560 | 26570859 2561 | 26112342 2562 | 23122932 2563 | 29866523 2564 | 25993606 2565 | 24749829 2566 | 25700640 2567 | 26512679 2568 | 21914456 2569 | 26407956 2570 | 21256841 2571 | 22094321 2572 | 26973878 2573 | 22816527 2574 | 24023109 2575 | 27576354 2576 | 26711659 2577 | 20970332 2578 | 25444212 2579 | 27747279 2580 | 21186138 2581 | 27708050 2582 | 28852592 2583 | 23791578 2584 | 24803405 2585 | 23122173 2586 | 24988003 2587 | 29450071 2588 | 20984832 2589 | 20420291 2590 | 20778459 2591 | 23090130 2592 | 26208030 2593 | 28599398 2594 | 25909769 2595 | 24472593 2596 | 22620338 2597 | 20587807 2598 | 23993933 2599 | 29124900 2600 | 27805449 2601 | 27213528 2602 | 28620130 2603 | 29802355 2604 | 23333218 2605 | 23099520 2606 | 20338427 2607 | 25798399 2608 | 27860391 2609 | 21511939 2610 | 26280485 2611 | 27337500 2612 | 21451466 2613 | 24486627 2614 | 22484220 2615 | 22684186 2616 | 24733611 2617 | 25689811 2618 | 26241878 2619 | 27102423 2620 | 23170248 2621 | 20088214 2622 | 23747305 2623 | 23615210 2624 | 27474818 2625 | 29537226 2626 | 29322937 2627 | 23778053 2628 | 28154882 2629 | 22451524 2630 | 22769877 2631 | 22431757 2632 | 20592922 2633 | 28006962 2634 | 29557195 2635 | 26151486 2636 | 21738528 2637 | 22489585 2638 | 27810599 2639 | 27899555 2640 | 24928373 2641 | 22355541 2642 | 29469221 2643 | 27248959 2644 | 29727965 2645 | 23322902 2646 | 25570366 2647 | 28737650 2648 | 27789635 2649 | 24820984 2650 | 25153436 2651 | 28912369 2652 | 20958300 2653 | 24090141 2654 | 27305912 2655 | 23786797 2656 | 27290238 2657 | 27677165 2658 | 21703611 2659 | 29279670 2660 | 28602136 2661 | 20450305 2662 | 27331140 2663 | 24010109 2664 | 24301598 2665 | 21163249 2666 | 29766862 2667 | 27517236 2668 | 24003466 2669 | 24476176 2670 | 21248410 2671 | 28829155 2672 | 22323657 2673 | 29915836 2674 | 21101249 2675 | 28781268 2676 | 20047807 2677 | 21105075 2678 | 25169952 2679 | 24879231 2680 | 28945620 2681 | 20768285 2682 | 26530630 2683 | 24409506 2684 | 24842719 2685 | 20858122 2686 | 23589840 2687 | 20658361 2688 | 24380932 2689 | 25772692 2690 | 24397832 2691 | 24717214 2692 | 29960683 2693 | 26688891 2694 | 24197963 2695 | 22675760 2696 | 22476125 2697 | 29932972 2698 | 21471305 2699 | 26959568 2700 | 22312296 2701 | 28281433 2702 | 29321965 2703 | 27891042 2704 | 27907456 2705 | 27977275 2706 | 21897523 2707 | 25822600 2708 | 21451070 2709 | 28766705 2710 | 29159439 2711 | 29058733 2712 | 26337950 2713 | 23654954 2714 | 21433564 2715 | 26849404 2716 | 26942049 2717 | 22336612 2718 | 20403845 2719 | 27640781 2720 | 22874908 2721 | 28155728 2722 | 25974873 2723 | 26093477 2724 | 29453718 2725 | 26618238 2726 | 25697592 2727 | 29372467 2728 | 21780934 2729 | 20324034 2730 | 20488889 2731 | 26255870 2732 | 22016286 2733 | 26114793 2734 | 28810913 2735 | 26166701 2736 | 23681694 2737 | 20238909 2738 | 24449390 2739 | 24295333 2740 | 21839731 2741 | 28546191 2742 | 23991290 2743 | 29699014 2744 | 26782860 2745 | 25824787 2746 | 26288273 2747 | 23050630 2748 | 26845868 2749 | 25010746 2750 | 22614888 2751 | 20995804 2752 | 24347519 2753 | 20294242 2754 | 23891843 2755 | 28920718 2756 | 21361796 2757 | 24565256 2758 | 23443631 2759 | 28402987 2760 | 29749178 2761 | 27133932 2762 | 29430999 2763 | 27016877 2764 | 21597560 2765 | 21223174 2766 | 28912227 2767 | 23031393 2768 | 29504388 2769 | 29213433 2770 | 20755379 2771 | 23055598 2772 | 22587786 2773 | 26248957 2774 | 26528774 2775 | 21356713 2776 | 24153921 2777 | 24174143 2778 | 23764941 2779 | 21052814 2780 | 27255262 2781 | 22401437 2782 | 24986951 2783 | 29341398 2784 | 26354864 2785 | 28881809 2786 | 26951835 2787 | 22969056 2788 | 22715389 2789 | 29294541 2790 | 24875116 2791 | 29154203 2792 | 28752717 2793 | 29550741 2794 | 28968918 2795 | 27229258 2796 | 29511147 2797 | 25598607 2798 | 29195175 2799 | 24645585 2800 | 23212121 2801 | 23816785 2802 | 28556426 2803 | 24452142 2804 | 28068231 2805 | 25702453 2806 | 22183141 2807 | 20742619 2808 | 24774234 2809 | 25626270 2810 | 23780975 2811 | 28191765 2812 | 29255648 2813 | 28029068 2814 | 21312856 2815 | 25296401 2816 | 24636063 2817 | 20769867 2818 | 25887905 2819 | 28480239 2820 | 23454398 2821 | 28909605 2822 | 25620132 2823 | 23293340 2824 | 22266354 2825 | 20220384 2826 | 22245744 2827 | 21659963 2828 | 27170524 2829 | 25012359 2830 | 28224073 2831 | 23670399 2832 | 28117919 2833 | 25932355 2834 | 27182192 2835 | 22249057 2836 | 20326464 2837 | 22827314 2838 | 21634956 2839 | 26278576 2840 | 26139470 2841 | 23903113 2842 | 26588737 2843 | 28372314 2844 | 20257823 2845 | 20038621 2846 | 29601884 2847 | 26605903 2848 | 23353899 2849 | 24084545 2850 | 20942551 2851 | 24957440 2852 | 24516626 2853 | 23436751 2854 | 21699678 2855 | 24653861 2856 | 28162788 2857 | 28684893 2858 | 23728762 2859 | 22799025 2860 | 21071482 2861 | 25535250 2862 | 28742229 2863 | 24142436 2864 | 25023745 2865 | 23948299 2866 | 26752701 2867 | 21234412 2868 | 21292510 2869 | 28600693 2870 | 22032546 2871 | 20984964 2872 | 27289211 2873 | 21074264 2874 | 27376670 2875 | 25792168 2876 | 21088976 2877 | 28277368 2878 | 27823901 2879 | 23618320 2880 | 21793626 2881 | 22369615 2882 | 27078841 2883 | 20731394 2884 | 25818503 2885 | 25667646 2886 | 24478083 2887 | 24100858 2888 | 24138162 2889 | 27582433 2890 | 25826596 2891 | 29347053 2892 | 28235206 2893 | 20758976 2894 | 20966809 2895 | 25421655 2896 | 27337066 2897 | 20287465 2898 | 29415831 2899 | 21822935 2900 | 29101609 2901 | 24466693 2902 | 28215087 2903 | 29949868 2904 | 29656694 2905 | 25673211 2906 | 29712742 2907 | 29269889 2908 | 24870553 2909 | 22330640 2910 | 27557113 2911 | 24121141 2912 | 20572107 2913 | 24571429 2914 | 21490549 2915 | 25346728 2916 | 28383824 2917 | 27071392 2918 | 24388496 2919 | 20489957 2920 | 29368678 2921 | 22269908 2922 | 27447843 2923 | 27956044 2924 | 23296647 2925 | 25766371 2926 | 21990038 2927 | 25611128 2928 | 26062354 2929 | 21551436 2930 | 27955905 2931 | 26207505 2932 | 21954602 2933 | 25734468 2934 | 26329983 2935 | 24197271 2936 | 29255055 2937 | 28624611 2938 | 27529791 2939 | 21224938 2940 | 28145367 2941 | 23938806 2942 | 29158668 2943 | 22530073 2944 | 24777840 2945 | 20279762 2946 | 20361979 2947 | 27387929 2948 | 28440567 2949 | 24681286 2950 | 20122002 2951 | 27206941 2952 | 27176396 2953 | 29410905 2954 | 22234971 2955 | 23293105 2956 | 26703796 2957 | 27571928 2958 | 22224746 2959 | 20499820 2960 | 28074105 2961 | 20436561 2962 | 25102208 2963 | 24341563 2964 | 21118237 2965 | 27016135 2966 | 21246732 2967 | 21076619 2968 | 25239067 2969 | 25774350 2970 | 28778834 2971 | 21865329 2972 | 26652704 2973 | 28384542 2974 | 21529035 2975 | 23642556 2976 | 24522197 2977 | 20995392 2978 | 27026160 2979 | 23542890 2980 | 29740493 2981 | 22411011 2982 | 20839783 2983 | 28115805 2984 | 20141749 2985 | 28105651 2986 | 23907663 2987 | 25830012 2988 | 26120176 2989 | 24378878 2990 | 23976017 2991 | 26312901 2992 | 22918907 2993 | 25599967 2994 | 24139262 2995 | 27654317 2996 | 25410184 2997 | 28196737 2998 | 29991662 2999 | 29084643 3000 | 26249248 3001 | 28098913 3002 | 25841562 3003 | 23285042 3004 | 22688082 3005 | 27650791 3006 | 29835883 3007 | 21439402 3008 | 21038697 3009 | 22559919 3010 | 21361809 3011 | 22347991 3012 | 27785191 3013 | 25113556 3014 | 28768774 3015 | 23030520 3016 | 23195396 3017 | 24227359 3018 | 27118409 3019 | 20068737 3020 | 25318934 3021 | 29325451 3022 | 21034479 3023 | 27579507 3024 | 20298521 3025 | 23472608 3026 | 28452001 3027 | 26824520 3028 | 22688736 3029 | 23952749 3030 | 23026557 3031 | 23421424 3032 | 21354240 3033 | 24469858 3034 | 29262151 3035 | 22043315 3036 | 29208258 3037 | 26393333 3038 | 27512853 3039 | 26961578 3040 | 24395286 3041 | 24922145 3042 | 27328480 3043 | 26076273 3044 | 20157946 3045 | 20658538 3046 | 23557448 3047 | 20806565 3048 | 25132563 3049 | 25719295 3050 | 27858710 3051 | 25984102 3052 | 21834389 3053 | 29927517 3054 | 25457722 3055 | 24515301 3056 | 27392996 3057 | 28356180 3058 | 27028746 3059 | 23585946 3060 | 29609210 3061 | 22888689 3062 | 23387131 3063 | 20320564 3064 | 24215782 3065 | 24206993 3066 | 22134740 3067 | 26448286 3068 | 24506737 3069 | 27169395 3070 | 21789721 3071 | 28375494 3072 | 20456898 3073 | 21488286 3074 | 25618731 3075 | 24784039 3076 | 28356361 3077 | 25389136 3078 | 26416465 3079 | 23038822 3080 | 25628119 3081 | 21982559 3082 | 27612970 3083 | 29952218 3084 | 21727027 3085 | 21638995 3086 | 20208716 3087 | 21265472 3088 | 27670850 3089 | 23969091 3090 | 21148994 3091 | 23460734 3092 | 20378492 3093 | 20134941 3094 | 28377307 3095 | 26596607 3096 | 28836398 3097 | 29743796 3098 | 24189228 3099 | 28467556 3100 | 22918141 3101 | 26531902 3102 | 28799789 3103 | 23292736 3104 | 20738710 3105 | 28703756 3106 | 24185458 3107 | 25736232 3108 | 20306911 3109 | 27832355 3110 | 26430759 3111 | 24266098 3112 | 29500306 3113 | 23831147 3114 | 24875807 3115 | 25174183 3116 | 29696103 3117 | 22079343 3118 | 22254414 3119 | 20033298 3120 | 28577607 3121 | 27844795 3122 | 24730407 3123 | 29279621 3124 | 27888948 3125 | 25493970 3126 | 26175298 3127 | 21639379 3128 | 25016422 3129 | 22780538 3130 | 27328676 3131 | 24674688 3132 | 22912858 3133 | 22566216 3134 | 23050751 3135 | 20787438 3136 | 20063237 3137 | 22305487 3138 | 26743708 3139 | 27618887 3140 | 28211809 3141 | 21806523 3142 | 28286520 3143 | 20688527 3144 | 21856815 3145 | 28131339 3146 | 26159352 3147 | 25797426 3148 | 24890142 3149 | 26971549 3150 | 24839353 3151 | 22754234 3152 | 29575056 3153 | 28073803 3154 | 28029479 3155 | 24662775 3156 | 26585275 3157 | 21951654 3158 | 23979299 3159 | 25619386 3160 | 24661657 3161 | 21519260 3162 | 29105309 3163 | 25283174 3164 | 26506612 3165 | 21899927 3166 | 21275698 3167 | 22851403 3168 | 29704030 3169 | 21608350 3170 | 20630975 3171 | 22669358 3172 | 21375906 3173 | 21856805 3174 | 21186316 3175 | 24818543 3176 | 29205973 3177 | 20901301 3178 | 24170999 3179 | 21381042 3180 | 22837503 3181 | 24745727 3182 | 25742437 3183 | 22397412 3184 | 28608949 3185 | 25211952 3186 | 28504359 3187 | 26969249 3188 | 28727555 3189 | 28417359 3190 | 22942503 3191 | 26064483 3192 | 24266321 3193 | 24333772 3194 | 27367860 3195 | 27115354 3196 | 20719339 3197 | 20146658 3198 | 26015697 3199 | 23898432 3200 | 20691315 3201 | 22325593 3202 | 27822082 3203 | 23465137 3204 | 22172687 3205 | 21873965 3206 | 22332663 3207 | 20226778 3208 | 26862834 3209 | 24576319 3210 | 27878843 3211 | 25393641 3212 | 26532625 3213 | 29971678 3214 | 21691842 3215 | 25231361 3216 | 23707983 3217 | 22085276 3218 | 24997643 3219 | 25180880 3220 | 28346333 3221 | 29323568 3222 | 22540449 3223 | 26643421 3224 | 20086698 3225 | 21788532 3226 | 23482588 3227 | 28155144 3228 | 28782322 3229 | 20462738 3230 | 21929071 3231 | 23040129 3232 | 27409307 3233 | 25309546 3234 | 23584989 3235 | 20921937 3236 | 21687332 3237 | 27974891 3238 | 27878899 3239 | 20228289 3240 | 28581158 3241 | 26545917 3242 | 29662284 3243 | 23532225 3244 | 28708815 3245 | 21357300 3246 | 23942141 3247 | 24130214 3248 | 29952857 3249 | 22636724 3250 | 22400870 3251 | 24715471 3252 | 23596616 3253 | 28882326 3254 | 26004718 3255 | 22115443 3256 | 22414965 3257 | 29529395 3258 | 28676562 3259 | 26327187 3260 | 23826964 3261 | 20729234 3262 | 25334400 3263 | 22401248 3264 | 29210183 3265 | 20389518 3266 | 25796316 3267 | 21234671 3268 | 29411194 3269 | 20062068 3270 | 26782951 3271 | 22650849 3272 | 26990916 3273 | 25893094 3274 | 28703421 3275 | 27518127 3276 | 29623163 3277 | 23298085 3278 | 25123127 3279 | 24064369 3280 | 26747882 3281 | 28990063 3282 | 26054602 3283 | 29295765 3284 | 23422253 3285 | 28770714 3286 | 28785633 3287 | 29905079 3288 | 25665942 3289 | 27321105 3290 | 20884919 3291 | 20861163 3292 | 21704355 3293 | 22279720 3294 | 25629152 3295 | 27436389 3296 | 26243767 3297 | 27064736 3298 | 21978955 3299 | 20684624 3300 | 29710886 3301 | 26772218 3302 | 23466911 3303 | 20086042 3304 | 27427961 3305 | 25531322 3306 | 27878914 3307 | 27413206 3308 | 23273238 3309 | 22669530 3310 | 27137838 3311 | 21564603 3312 | 25596038 3313 | 21698339 3314 | 28559606 3315 | 28885549 3316 | 27530682 3317 | 21988013 3318 | 23637057 3319 | 25960996 3320 | 23355892 3321 | 23174714 3322 | 23182160 3323 | 27933149 3324 | 29393126 3325 | 20318081 3326 | 21690439 3327 | 25838166 3328 | 21952094 3329 | 24194854 3330 | 25886280 3331 | 27340492 3332 | 29784292 3333 | 24445656 3334 | 28279193 3335 | 26914075 3336 | 29472041 3337 | 28584337 3338 | 23943360 3339 | 24676334 3340 | 28497875 3341 | 23148093 3342 | 26607273 3343 | 21459335 3344 | 27338264 3345 | 27451479 3346 | 20244946 3347 | 20606025 3348 | 28852013 3349 | 25156485 3350 | 24122274 3351 | 26469548 3352 | 25119104 3353 | 20118299 3354 | 29954498 3355 | 27384707 3356 | 23372007 3357 | 26041852 3358 | 20159220 3359 | 22870813 3360 | 25738338 3361 | 29167032 3362 | 20388837 3363 | 27877636 3364 | 23726824 3365 | 28676294 3366 | 22796118 3367 | 28001431 3368 | 26211781 3369 | 20842338 3370 | 21160826 3371 | 25147884 3372 | 25425509 3373 | 26763205 3374 | 27856085 3375 | 29871648 3376 | 25797292 3377 | 22106611 3378 | 20276186 3379 | 29986215 3380 | 28447612 3381 | 23879857 3382 | 20441775 3383 | 28018476 3384 | 20752231 3385 | 28560856 3386 | 25479435 3387 | 26051343 3388 | 27101141 3389 | 28971647 3390 | 27858691 3391 | 29663588 3392 | 23312304 3393 | 25868900 3394 | 25620325 3395 | 23572605 3396 | 29705653 3397 | 28978916 3398 | 26644071 3399 | 22704785 3400 | 27662949 3401 | 23428135 3402 | 24592415 3403 | 21077984 3404 | 21132374 3405 | 29070256 3406 | 26183048 3407 | 28384907 3408 | 20692627 3409 | 27131802 3410 | 25800022 3411 | 21736639 3412 | 26701037 3413 | 20486535 3414 | 23711612 3415 | 20489583 3416 | 24140894 3417 | 27973205 3418 | 20309684 3419 | 23963787 3420 | 28940899 3421 | 22588425 3422 | 21083657 3423 | 29662896 3424 | 28991580 3425 | 24761737 3426 | 24279039 3427 | 20167161 3428 | 26947515 3429 | 29086706 3430 | 25469970 3431 | 26832105 3432 | 29442614 3433 | 24616770 3434 | 26660266 3435 | 22804208 3436 | 25494666 3437 | 21819821 3438 | 28044430 3439 | 23734090 3440 | 27977490 3441 | 26827806 3442 | 20494106 3443 | 27867135 3444 | 24697857 3445 | 22053054 3446 | 23924064 3447 | 26437560 3448 | 26611552 3449 | 26809012 3450 | 28161130 3451 | 26213540 3452 | 29658293 3453 | 20562892 3454 | 24026071 3455 | 27347427 3456 | 24896167 3457 | 23498194 3458 | 27770356 3459 | 21566350 3460 | 25078461 3461 | 22602584 3462 | 29509156 3463 | 28237346 3464 | 24946598 3465 | 27552327 3466 | 24888311 3467 | 20069518 3468 | 26967733 3469 | 25601328 3470 | 23710667 3471 | 21808497 3472 | 28641077 3473 | 26948028 3474 | 29229287 3475 | 21880161 3476 | 29770758 3477 | 24267492 3478 | 26655283 3479 | 24432649 3480 | 29995433 3481 | 23013764 3482 | 21190076 3483 | 21648966 3484 | 21786525 3485 | 23016262 3486 | 22702738 3487 | 29359531 3488 | 25275090 3489 | 21841613 3490 | 27958939 3491 | 24575514 3492 | 27517563 3493 | 29008189 3494 | 25446954 3495 | 24540191 3496 | 24244121 3497 | 25590198 3498 | 25812484 3499 | 29274634 3500 | 25975039 3501 | 24292395 3502 | 28657781 3503 | 28808173 3504 | 20370714 3505 | 22197506 3506 | 20382821 3507 | 29101394 3508 | 25486748 3509 | 29078917 3510 | 28884549 3511 | 24565987 3512 | 22785442 3513 | 26793563 3514 | 26768165 3515 | 29050970 3516 | 24394777 3517 | 22807178 3518 | 24138856 3519 | 24566381 3520 | 25287295 3521 | 26176496 3522 | 20488163 3523 | 22787930 3524 | 21300170 3525 | 23278671 3526 | 23342165 3527 | 29592715 3528 | 20512722 3529 | 27530912 3530 | 20531160 3531 | 22872195 3532 | 22377705 3533 | 20502868 3534 | 23103047 3535 | 22830929 3536 | 24817190 3537 | 29126414 3538 | 26466315 3539 | 29982863 3540 | 29042389 3541 | 28526234 3542 | 25037898 3543 | 22908502 3544 | 20566066 3545 | 26090462 3546 | 20042723 3547 | 27600925 3548 | 29954155 3549 | 27917934 3550 | 23902728 3551 | 26154925 3552 | 26765152 3553 | 24843803 3554 | 27319510 3555 | 24575761 3556 | 26973971 3557 | 21061858 3558 | 29990375 3559 | 28682571 3560 | 27055246 3561 | 25624183 3562 | 27582202 3563 | 25146721 3564 | 22913204 3565 | 26433729 3566 | 21632126 3567 | 28270347 3568 | 27730861 3569 | 29687542 3570 | 23330315 3571 | 27903032 3572 | 22512297 3573 | 23355365 3574 | 21181375 3575 | 27707627 3576 | 24564664 3577 | 24517018 3578 | 25268104 3579 | 21782431 3580 | 26520491 3581 | 27939214 3582 | 23310576 3583 | 27884665 3584 | 28878404 3585 | 22082882 3586 | 20319095 3587 | 21510045 3588 | 23699745 3589 | 20778935 3590 | 28558049 3591 | 29184982 3592 | 23255944 3593 | 22289433 3594 | 21248359 3595 | 29324097 3596 | 26392734 3597 | 27446703 3598 | 25509166 3599 | 20887558 3600 | 22115145 3601 | 28193787 3602 | 26934696 3603 | 29150862 3604 | 22072278 3605 | 23604831 3606 | 29982019 3607 | 28846946 3608 | 29810830 3609 | 28743321 3610 | 23489894 3611 | 27543515 3612 | 25275098 3613 | 24242407 3614 | 20548153 3615 | 20886028 3616 | 27926633 3617 | 29721961 3618 | 27636875 3619 | 27386872 3620 | 20043675 3621 | 29359772 3622 | 25720190 3623 | 28940217 3624 | 22041378 3625 | 29393464 3626 | 24578178 3627 | 27853422 3628 | 28229065 3629 | 25571635 3630 | 25991525 3631 | 28756239 3632 | 21357975 3633 | 22418351 3634 | 24528991 3635 | 28451825 3636 | 28439163 3637 | 28146334 3638 | 24867216 3639 | 27608732 3640 | 22705630 3641 | 27093789 3642 | 25002317 3643 | 29062878 3644 | 29619050 3645 | 20892088 3646 | 22718216 3647 | 21549998 3648 | 22364802 3649 | 23895315 3650 | 26094362 3651 | 23791133 3652 | 22621569 3653 | 22266949 3654 | 21956592 3655 | 28380111 3656 | 20034788 3657 | 20181148 3658 | 26839977 3659 | 20712112 3660 | 29169123 3661 | 24367845 3662 | 20348358 3663 | 21775005 3664 | 20447611 3665 | 20909529 3666 | 23845733 3667 | 20070470 3668 | 26134277 3669 | 27142595 3670 | 23965847 3671 | 25150998 3672 | 26899817 3673 | 23091323 3674 | 21286674 3675 | 27864441 3676 | 28086055 3677 | 27329701 3678 | 25319254 3679 | 20510894 3680 | 27183359 3681 | 28818150 3682 | 20245866 3683 | 24161275 3684 | 22881399 3685 | 21502715 3686 | 27417307 3687 | 23948090 3688 | 20350605 3689 | 22799390 3690 | 26354327 3691 | 21984348 3692 | 21890007 3693 | 25154512 3694 | 28423469 3695 | 24787583 3696 | 24312037 3697 | 29329464 3698 | 20407074 3699 | 26755588 3700 | 23524434 3701 | 25184065 3702 | 25616791 3703 | 24362895 3704 | 26417830 3705 | 27017448 3706 | 29832644 3707 | 24103969 3708 | 24443594 3709 | 27904400 3710 | 20779494 3711 | 24481868 3712 | 20598825 3713 | 24315916 3714 | 27308864 3715 | 24560242 3716 | 21676486 3717 | 25200389 3718 | 28402284 3719 | 28928890 3720 | 20606244 3721 | 29787276 3722 | 29569643 3723 | 20883564 3724 | 27382676 3725 | 21552609 3726 | 27791299 3727 | 27859161 3728 | 25756600 3729 | 28303195 3730 | 23163734 3731 | 22426812 3732 | 24645526 3733 | 22950459 3734 | 26445661 3735 | 27706599 3736 | 22634923 3737 | 22723757 3738 | 25311779 3739 | 25209395 3740 | 20663793 3741 | 24568599 3742 | 21791431 3743 | 21198887 3744 | 25350793 3745 | 29894288 3746 | 22897855 3747 | 23892020 3748 | 24305531 3749 | 22146648 3750 | 28393685 3751 | 28278537 3752 | 22611016 3753 | 22505405 3754 | 22038452 3755 | 22234240 3756 | 28776865 3757 | 23172464 3758 | 27614485 3759 | 26052383 3760 | 29837296 3761 | 22317060 3762 | 22263794 3763 | 29258930 3764 | 25256515 3765 | 27691701 3766 | 27398975 3767 | 25958748 3768 | 23023014 3769 | 23374093 3770 | 26791540 3771 | 21239098 3772 | 22024889 3773 | 21292378 3774 | 23101415 3775 | 28534223 3776 | 27408374 3777 | 21098223 3778 | 27953186 3779 | 23945869 3780 | 23212476 3781 | 27576857 3782 | 20206248 3783 | 22065684 3784 | 29810802 3785 | 27163907 3786 | 27728304 3787 | 27004732 3788 | 27972658 3789 | 28699447 3790 | 20870309 3791 | 21157699 3792 | 22224019 3793 | 29440217 3794 | 24361939 3795 | 25339739 3796 | 21076908 3797 | 28161673 3798 | 22960416 3799 | 29832939 3800 | 26799284 3801 | 29896646 3802 | 24912795 3803 | 23153830 3804 | 26935539 3805 | 22834803 3806 | -------------------------------------------------------------------------------- /mimicdata/mimic4_icd10/dev_full_hadm_ids.csv: -------------------------------------------------------------------------------- 1 | 29816121 2 | 22183141 3 | 29022262 4 | 24206007 5 | 28788088 6 | 21938707 7 | 24131738 8 | 24858615 9 | 24215654 10 | 21740093 11 | 24763626 12 | 28068231 13 | 22894670 14 | 26041305 15 | 25412595 16 | 29977761 17 | 20651492 18 | 27424909 19 | 28828537 20 | 25869923 21 | 29500306 22 | 25492553 23 | 20329968 24 | 27976221 25 | 22117056 26 | 20077220 27 | 22688082 28 | 28440567 29 | 28049461 30 | 22296296 31 | 21219097 32 | 29438205 33 | 22178368 34 | 25389357 35 | 24774234 36 | 26506612 37 | 24592415 38 | 21906436 39 | 29736304 40 | 24862496 41 | 22918907 42 | 25822900 43 | 24661612 44 | 26686622 45 | 24305531 46 | 28117750 47 | 21585443 48 | 23293105 49 | 28948687 50 | 22611016 51 | 26765337 52 | 27034872 53 | 28261435 54 | 20864666 55 | 24751909 56 | 21839731 57 | 22634448 58 | 22488362 59 | 24205726 60 | 25665595 61 | 22205345 62 | 27028746 63 | 20302688 64 | 20617589 65 | 24380504 66 | 24395286 67 | 21260696 68 | 20984832 69 | 22960416 70 | 27891042 71 | 27936559 72 | 28151761 73 | 20758976 74 | 21510045 75 | 22234240 76 | 29258930 77 | 22175460 78 | 24279039 79 | 26990916 80 | 29573197 81 | 25619058 82 | 27913494 83 | 24776477 84 | 21021898 85 | 23050630 86 | 28237346 87 | 22022614 88 | 20495943 89 | 23302095 90 | 26977522 91 | 26514044 92 | 27083905 93 | 21392110 94 | 25532889 95 | 26392734 96 | 23501654 97 | 21951654 98 | 28920718 99 | 21770488 100 | 29393464 101 | 24597135 102 | 23235665 103 | 28681260 104 | 26424296 105 | 29487903 106 | 23940384 107 | 22212629 108 | 27608732 109 | 23703848 110 | 25063929 111 | 29982019 112 | 24546110 113 | 28858449 114 | 25951184 115 | 27308864 116 | 22330640 117 | 23346450 118 | 22515356 119 | 26910975 120 | 29927517 121 | 20441775 122 | 21941311 123 | 25231361 124 | 26199514 125 | 23995957 126 | 28755409 127 | 27787695 128 | 25720190 129 | 26456097 130 | 26320880 131 | 28006599 132 | 21844762 133 | 23387131 134 | 22975454 135 | 22283489 136 | 26962059 137 | 23943129 138 | 22924380 139 | 25194723 140 | 20525506 141 | 26136375 142 | 24869263 143 | 24354223 144 | 24122555 145 | 23370814 146 | 21552609 147 | 26827806 148 | 24636063 149 | 26115309 150 | 24908073 151 | 23752502 152 | 23948299 153 | 22942503 154 | 20038621 155 | 29508368 156 | 22929072 157 | 23258182 158 | 27949424 159 | 21611540 160 | 22588425 161 | 20749810 162 | 29509156 163 | 23293340 164 | 28989974 165 | 25969190 166 | 23895315 167 | 26200601 168 | 27670850 169 | 26886831 170 | 21484924 171 | 20132492 172 | 21250742 173 | 25261543 174 | 25296401 175 | 27576354 176 | 26936535 177 | 20295664 178 | 24324209 179 | 29621540 180 | 25521267 181 | 28417359 182 | 20942551 183 | 27329701 184 | 22323657 185 | 22355644 186 | 28229065 187 | 28021123 188 | 23462552 189 | 27654317 190 | 24380932 191 | 25975039 192 | 22295549 193 | 24205733 194 | 22474799 195 | 25123127 196 | 27707627 197 | 24214713 198 | 26860653 199 | 24523484 200 | 26782306 201 | 27622323 202 | 20245866 203 | 25818503 204 | 20046045 205 | 29430999 206 | 22172687 207 | 21710929 208 | 22995802 209 | 21561373 210 | 21884519 211 | 23090130 212 | 20292258 213 | 21698339 214 | 21782431 215 | 23217848 216 | 24759243 217 | 21889669 218 | 23934447 219 | 23787081 220 | 27465217 221 | 27181431 222 | 25196585 223 | 21703611 224 | 23469748 225 | 24571429 226 | 23948090 227 | 24556511 228 | 21188571 229 | 27284996 230 | 22158442 231 | 22042794 232 | 22653244 233 | 20285079 234 | 21010568 235 | 23291370 236 | 20474375 237 | 22514296 238 | 26062354 239 | 27582202 240 | 20291364 241 | 20997065 242 | 29728449 243 | 29613255 244 | 26166701 245 | 29084164 246 | 29932972 247 | 26655283 248 | 23963787 249 | 29291854 250 | 20763309 251 | 28162788 252 | 27691701 253 | 20938840 254 | 23472608 255 | 27284446 256 | 22929344 257 | 20958170 258 | 22266354 259 | 28620130 260 | 25253623 261 | 27096138 262 | 24157246 263 | 28792982 264 | 24641219 265 | 25201441 266 | 26430573 267 | 28984349 268 | 21093546 269 | 24696537 270 | 28289094 271 | 27083268 272 | 29407344 273 | 29280645 274 | 27302106 275 | 29259449 276 | 23482588 277 | 29712742 278 | 21914456 279 | 20512929 280 | 21638995 281 | 26951835 282 | 29761826 283 | 20755379 284 | 28044430 285 | 25150634 286 | 21124406 287 | 29228672 288 | 27728304 289 | 29303393 290 | 22952578 291 | 24039171 292 | 26618238 293 | 22862876 294 | 27104105 295 | 26445661 296 | 29871158 297 | 22246063 298 | 28372314 299 | 27714687 300 | 27957527 301 | 25209781 302 | 24431802 303 | 20750310 304 | 23927157 305 | 23816785 306 | 21286674 307 | 29131811 308 | 24481868 309 | 24078152 310 | 24348087 311 | 22901958 312 | 22541760 313 | 23532225 314 | 29152445 315 | 28925756 316 | 20639096 317 | 25270535 318 | 20993579 319 | 21665734 320 | 27337799 321 | 26005204 322 | 23507095 323 | 29713017 324 | 22484812 325 | 28151037 326 | 26883606 327 | 27064736 328 | 23052680 329 | 26285075 330 | 27169395 331 | 28196737 332 | 22781592 333 | 22646076 334 | 27630026 335 | 26922075 336 | 29760143 337 | 28461159 338 | 21391885 339 | 24110990 340 | 23177385 341 | 22396164 342 | 20430313 343 | 25901906 344 | 24349938 345 | 27741674 346 | 24738659 347 | 26934696 348 | 25736121 349 | 23172464 350 | 24063376 351 | 27386872 352 | 29220917 353 | 25383012 354 | 24003728 355 | 27543515 356 | 25626270 357 | 25533962 358 | 26793563 359 | 28299770 360 | 20245918 361 | 24093341 362 | 29525070 363 | 23285042 364 | 22608488 365 | 29250526 366 | 26495345 367 | 29190535 368 | 24283539 369 | 22431757 370 | 20779494 371 | 23893816 372 | 24418220 373 | 22708939 374 | 26692293 375 | 21115484 376 | 27857915 377 | 28917979 378 | 29784292 379 | 28625565 380 | 26799284 381 | 21498211 382 | 29575056 383 | 28752717 384 | 24383001 385 | 22401437 386 | 20770327 387 | 28785633 388 | 28852013 389 | 28657781 390 | 24482754 391 | 27268868 392 | 27593295 393 | 20883564 394 | 27884528 395 | 21787934 396 | 25410184 397 | 28402284 398 | 27331140 399 | 29130041 400 | 29154203 401 | 21841613 402 | 22861567 403 | 21855014 404 | 28013726 405 | 20589010 406 | 22064598 407 | 20424554 408 | 23016262 409 | 24198559 410 | 24888311 411 | 29222682 412 | 23691483 413 | 24504249 414 | 28681965 415 | 29708509 416 | 24940201 417 | 21502715 418 | 26289690 419 | 20306911 420 | 21350191 421 | 23083317 422 | 25309546 423 | 20984964 424 | 28312089 425 | 22396912 426 | 21361796 427 | 22869649 428 | 23170638 429 | 22426812 430 | 29794772 431 | 20159220 432 | 25381393 433 | 26243767 434 | 24579508 435 | 29028068 436 | 25826596 437 | 27303370 438 | 25664924 439 | 28052869 440 | 23421967 441 | 23558886 442 | 26052383 443 | 20787438 444 | 24713686 445 | 29138648 446 | 23771515 447 | 29935515 448 | 24598964 449 | 21224938 450 | 28699271 451 | 21691757 452 | 20248087 453 | 28819997 454 | 29131207 455 | 27176396 456 | 21890594 457 | 25664988 458 | 27833631 459 | 29078917 460 | 27093789 461 | 26428561 462 | 24078910 463 | 27096176 464 | 24776651 465 | 20539733 466 | 26396709 467 | 20691315 468 | 27957542 469 | 27877636 470 | 21001286 471 | 26202768 472 | 26531902 473 | 26175298 474 | 28931076 475 | 23943360 476 | 29841797 477 | 28439932 478 | 23557448 479 | 25118191 480 | 21175592 481 | 25686639 482 | 22787930 483 | 28905068 484 | 23204342 485 | 24505530 486 | 26254085 487 | 22733576 488 | 28943812 489 | 29026381 490 | 28345471 491 | 25325455 492 | 24730407 493 | 27201718 494 | 29538364 495 | 26147077 496 | 21490507 497 | 28861378 498 | 23004753 499 | 22006403 500 | 28672778 501 | 27184355 502 | 29321965 503 | 24367845 504 | 26670063 505 | 29159439 506 | 24090141 507 | 28612466 508 | 26768165 509 | 29050970 510 | 24510690 511 | 29655777 512 | 29687542 513 | 29210183 514 | 20043675 515 | 27163352 516 | 27629644 517 | 20658767 518 | 23330315 519 | 22451524 520 | 29255648 521 | 27097631 522 | 20796006 523 | 23521017 524 | 24995711 525 | 23636274 526 | 27940663 527 | 23802159 528 | 21117351 529 | 27881790 530 | 28091968 531 | 22746343 532 | 26567819 533 | 20958161 534 | 24010109 535 | 26564451 536 | 21038826 537 | 28064360 538 | 29520812 539 | 29835883 540 | 21567181 541 | 21310729 542 | 26280485 543 | 26363804 544 | 20870309 545 | 25576273 546 | 28971694 547 | 25119104 548 | 20927745 549 | 22112295 550 | 25880533 551 | 24676334 552 | 29295812 553 | 28126869 554 | 25599967 555 | 26875625 556 | 25297505 557 | 22723757 558 | 25014428 559 | 24522197 560 | 20157145 561 | 21451070 562 | 26102463 563 | 23559728 564 | 24197271 565 | 26207505 566 | 29032156 567 | 26384556 568 | 26772218 569 | 21880161 570 | 24422500 571 | 20606244 572 | 29213433 573 | 28071242 574 | 22085276 575 | 28322208 576 | 27775858 577 | 27291541 578 | 25451068 579 | 21507630 580 | 26308231 581 | 25613153 582 | 28125218 583 | 25914632 584 | 20287465 585 | 23651627 586 | 23258052 587 | 21634956 588 | 21737890 589 | 23498194 590 | 23580023 591 | 20944339 592 | 25587038 593 | 21239098 594 | 22808877 595 | 20661641 596 | 26388642 597 | 23851406 598 | 25535250 599 | 20769867 600 | 29635735 601 | 27877668 602 | 23255944 603 | 29866523 604 | 24003466 605 | 26771723 606 | 28384542 607 | 21275698 608 | 23956699 609 | 23997524 610 | 20649692 611 | 28878404 612 | 29147310 613 | 20562892 614 | 22874908 615 | 27958939 616 | 25667646 617 | 25951566 618 | 28858190 619 | 29258191 620 | 24401932 621 | 20088214 622 | 20372507 623 | 24315916 624 | 21292510 625 | 27878843 626 | 21012517 627 | 22642016 628 | 24846722 629 | 21648966 630 | 21934758 631 | 23558394 632 | 21687142 633 | 20529253 634 | 22683392 635 | 20281918 636 | 24537232 637 | 20693701 638 | 29362084 639 | 21929071 640 | 24279136 641 | 20976147 642 | 20359903 643 | 22245744 644 | 23682641 645 | 24164336 646 | 28012662 647 | 27144487 648 | 25147884 649 | 23209737 650 | 24518525 651 | 27297743 652 | 25577298 653 | 24860241 654 | 29738107 655 | 28504659 656 | 25361276 657 | 26346796 658 | 25928444 659 | 21789721 660 | 27821866 661 | 25936317 662 | 24981518 663 | 25980163 664 | 21312856 665 | 26739143 666 | 25513700 667 | 28356180 668 | 21538278 669 | 21767110 670 | 29928159 671 | 26141943 672 | 24528991 673 | 28115805 674 | 27019593 675 | 27901265 676 | 27290238 677 | 24841179 678 | 24077647 679 | 28175202 680 | 24385232 681 | 24070422 682 | 20833776 683 | 29684773 684 | 22324466 685 | 26533615 686 | 24490951 687 | 25421655 688 | 25032711 689 | 26973971 690 | 20420512 691 | 25200389 692 | 22881399 693 | 23396335 694 | 24674688 695 | 27276812 696 | 22054369 697 | 23692772 698 | 28699447 699 | 22491477 700 | 22767498 701 | 27742080 702 | 29529395 703 | 22394679 704 | 23827733 705 | 29032430 706 | 20118299 707 | 29582462 708 | 24197444 709 | 23451487 710 | 23933770 711 | 26093477 712 | 23192547 713 | 25231391 714 | 20412734 715 | 20056128 716 | 24923349 717 | 25620325 718 | 26173056 719 | 23138322 720 | 25555478 721 | 25518386 722 | 24833343 723 | 28190074 724 | 20462738 725 | 24185458 726 | 26851696 727 | 28502848 728 | 20738158 729 | 21361023 730 | 28303195 731 | 29623625 732 | 29649068 733 | 27365233 734 | 20728294 735 | 29527095 736 | 23498084 737 | 25697592 738 | 28339069 739 | 27969745 740 | 25446954 741 | 24843393 742 | 23279491 743 | 23953913 744 | 22361164 745 | 24388496 746 | 21127836 747 | 20168214 748 | 22684186 749 | 28117773 750 | 24472593 751 | 23269393 752 | 29268227 753 | 25012642 754 | 23256237 755 | 23753772 756 | 24057597 757 | 29990073 758 | 20434486 759 | 23405094 760 | 27100486 761 | 29111877 762 | 27860391 763 | 24974580 764 | 29023571 765 | 27241340 766 | 23958659 767 | 24693844 768 | 24311757 769 | 29601884 770 | 28879674 771 | 29322500 772 | 20313352 773 | 26787181 774 | 23173110 775 | 24587961 776 | 21519260 777 | 20861104 778 | 28267335 779 | 29290687 780 | 22493711 781 | 20001395 782 | 26472130 783 | 23046902 784 | 22489585 785 | 27648984 786 | 23736151 787 | 24445797 788 | 22476125 789 | 25209395 790 | 23305233 791 | 28928890 792 | 29785781 793 | 28328714 794 | 24236591 795 | 25142725 796 | 20686096 797 | 26306836 798 | 27650046 799 | 27328676 800 | 25229179 801 | 23099193 802 | 24170999 803 | 23963695 804 | 28078003 805 | 26158784 806 | 26989759 807 | 20063237 808 | 22871318 809 | 29821287 810 | 20121235 811 | 23007106 812 | 22308802 813 | 20791988 814 | 24333157 815 | 26159352 816 | 24543933 817 | 21965360 818 | 29061146 819 | 21899932 820 | 24324454 821 | 22977092 822 | 29212092 823 | 20070470 824 | 20945849 825 | 24986951 826 | 22710924 827 | 29137091 828 | 27360299 829 | 22263794 830 | 22587786 831 | 20692891 832 | 20512722 833 | 23589580 834 | 29211114 835 | 21708593 836 | 23789242 837 | 21831401 838 | 28018476 839 | 27329710 840 | 23707995 841 | 25044584 842 | 28236213 843 | 24036999 844 | 24564184 845 | 24509054 846 | 20157946 847 | 26743708 848 | 24571732 849 | 21196818 850 | 24224298 851 | 21865539 852 | 22024889 853 | 29937226 854 | 25609198 855 | 27904400 856 | 22016286 857 | 23442366 858 | 26983493 859 | 20343841 860 | 28838594 861 | 27939214 862 | 24336050 863 | 29455708 864 | 28417833 865 | 20311854 866 | 27530912 867 | 25283174 868 | 29042389 869 | 26585275 870 | 23642556 871 | 25389207 872 | 22914522 873 | 27024362 874 | 26034476 875 | 24449390 876 | 27395184 877 | 29982863 878 | 23652500 879 | 25634014 880 | 20198498 881 | 29537902 882 | 21029588 883 | 28240894 884 | 26045834 885 | 24516626 886 | 29499926 887 | 28564107 888 | 29427252 889 | 25984102 890 | 24459323 891 | 29920483 892 | 22769877 893 | 28105651 894 | 26829390 895 | 21416766 896 | 24425272 897 | 28709909 898 | 26130044 899 | 23938806 900 | 24093350 901 | 23025958 902 | 23212476 903 | 25131454 904 | 20489658 905 | 20860003 906 | 28806522 907 | 20669525 908 | 27048470 909 | 26820521 910 | 20613831 911 | 20639203 912 | 27493081 913 | 29138442 914 | 29712479 915 | 24496146 916 | 26327953 917 | 22301065 918 | 22830929 919 | 29552970 920 | 23055388 921 | 27490466 922 | 21005617 923 | 28766705 924 | 29157211 925 | 25663610 926 | 29431223 927 | 20958300 928 | 22212406 929 | 24300036 930 | 28771784 931 | 20263749 932 | 27892346 933 | 20212017 934 | 20181148 935 | 24540191 936 | 24122274 937 | 25650639 938 | 28674880 939 | 28551521 940 | 20494106 941 | 21911663 942 | 25894657 943 | 28857787 944 | 29822633 945 | 28452001 946 | 22043315 947 | 25155535 948 | 22038452 949 | 23054645 950 | 23627238 951 | 22601200 952 | 26296889 953 | 23364125 954 | 22737406 955 | 22644225 956 | 25172495 957 | 20887498 958 | 25196715 959 | 22705630 960 | 20024499 961 | 26172743 962 | 22780538 963 | 21542412 964 | 24362895 965 | 24912795 966 | 26453727 967 | 25123729 968 | 23683720 969 | 22262825 970 | 24507184 971 | 20196866 972 | 26885859 973 | 26346102 974 | 28495546 975 | 26238833 976 | 28528265 977 | 26437560 978 | 26417830 979 | 23942141 980 | 28383824 981 | 20920890 982 | 29522152 983 | 26968735 984 | 20086042 985 | 29720546 986 | 24722784 987 | 22799025 988 | 21610183 989 | 23534825 990 | 22247729 991 | 21834088 992 | 24630582 993 | 20663793 994 | 21249366 995 | 28024340 996 | 20486535 997 | 21835630 998 | 22133617 999 | 28829155 1000 | 25436390 1001 | 20047807 1002 | 25538762 1003 | 24561701 1004 | 25175900 1005 | 21488286 1006 | 24855226 1007 | 22224746 1008 | 26417510 1009 | 28884178 1010 | 25511420 1011 | 26184065 1012 | 27486760 1013 | 21211403 1014 | 22487373 1015 | 26636810 1016 | 26172894 1017 | 20530249 1018 | 26570932 1019 | 20364306 1020 | 26570078 1021 | 23750849 1022 | 23210780 1023 | 21535419 1024 | 23066172 1025 | 25797292 1026 | 20658538 1027 | 24138856 1028 | 26910934 1029 | 27295973 1030 | 27552327 1031 | 28808173 1032 | 20298521 1033 | 23493488 1034 | 25618731 1035 | 26025195 1036 | 21234671 1037 | 28355983 1038 | 25184065 1039 | 24420678 1040 | 23949733 1041 | 28565544 1042 | 21290804 1043 | 26076273 1044 | 28912227 1045 | 23887244 1046 | 20901301 1047 | 25765126 1048 | 26255870 1049 | 26849404 1050 | 20688527 1051 | 29504245 1052 | 21922271 1053 | 25688537 1054 | 22838362 1055 | 26281308 1056 | 23490360 1057 | 23739236 1058 | 22808354 1059 | 28243236 1060 | 21089314 1061 | 21507269 1062 | 29597526 1063 | 28598584 1064 | 25436800 1065 | 27810200 1066 | 23783062 1067 | 27778885 1068 | 20471993 1069 | 24803405 1070 | 23898432 1071 | 27552693 1072 | 22565447 1073 | 27939068 1074 | 27382676 1075 | 21405981 1076 | 28940217 1077 | 28799789 1078 | 29766862 1079 | 25183245 1080 | 23707561 1081 | 23858610 1082 | 28846946 1083 | 22333358 1084 | 28743215 1085 | 22332663 1086 | 25599811 1087 | 23596616 1088 | 20062753 1089 | 22608243 1090 | 21214210 1091 | 20630975 1092 | 24662775 1093 | 26077013 1094 | 26605173 1095 | 21238416 1096 | 21071752 1097 | 24562918 1098 | 24139262 1099 | 26064483 1100 | 20586914 1101 | 24244121 1102 | 24324983 1103 | 26528774 1104 | 21409723 1105 | 22984788 1106 | 24471180 1107 | 28814365 1108 | 20171565 1109 | 22344458 1110 | 27269114 1111 | 25509166 1112 | 22438197 1113 | 21490549 1114 | 28958477 1115 | 24506249 1116 | 24341563 1117 | 28061875 1118 | 21856815 1119 | 20891881 1120 | 27827584 1121 | 29321825 1122 | 29641341 1123 | 22079343 1124 | 23247847 1125 | 26407956 1126 | 24501982 1127 | 27908936 1128 | 24871331 1129 | 24014887 1130 | 25452165 1131 | 26312901 1132 | 27362253 1133 | 29295765 1134 | 22167542 1135 | 23616136 1136 | 20420291 1137 | 21608512 1138 | 29949850 1139 | 26786943 1140 | 24478052 1141 | 28025785 1142 | 22618060 1143 | 23808334 1144 | 26958448 1145 | 24476176 1146 | 28836398 1147 | 28600693 1148 | 27526116 1149 | 27350189 1150 | 25035164 1151 | 21019069 1152 | 24229729 1153 | 29874756 1154 | 21648159 1155 | 26752701 1156 | 27698330 1157 | 21984348 1158 | 26102040 1159 | 24809958 1160 | 20620858 1161 | 22954531 1162 | 29224818 1163 | 28391387 1164 | 22128926 1165 | 24957440 1166 | 29211676 1167 | 22136043 1168 | 21704355 1169 | 26530630 1170 | 23811939 1171 | 23681694 1172 | 20389518 1173 | 21567116 1174 | 27991709 1175 | 27981683 1176 | 26252086 1177 | 24747526 1178 | 21218793 1179 | 24560242 1180 | 21908688 1181 | 20168443 1182 | 21318218 1183 | 27584484 1184 | 28781705 1185 | 28484253 1186 | 25993606 1187 | 27977275 1188 | 24980184 1189 | 28448765 1190 | 20969579 1191 | 21843428 1192 | 20729234 1193 | 28770714 1194 | 24276866 1195 | 24070673 1196 | 26836605 1197 | 23434639 1198 | 29758164 1199 | 28441629 1200 | 20492239 1201 | 24560430 1202 | 21608350 1203 | 27903032 1204 | 23164185 1205 | 26015355 1206 | 24373032 1207 | 21819821 1208 | 24131806 1209 | 28520194 1210 | 24576319 1211 | 24593069 1212 | 23742561 1213 | 25601328 1214 | 26932078 1215 | 27900615 1216 | 21208661 1217 | 29010940 1218 | 26249248 1219 | 29173219 1220 | 29379512 1221 | 20360387 1222 | 22827314 1223 | 27612427 1224 | 22193042 1225 | 21632126 1226 | 29229210 1227 | 24787432 1228 | 22805757 1229 | 26971549 1230 | 29831299 1231 | 20806565 1232 | 23278671 1233 | 28559606 1234 | 29080342 1235 | 20760364 1236 | 27518127 1237 | 24651179 1238 | 27813072 1239 | 26893591 1240 | 20326464 1241 | 29554811 1242 | 21481373 1243 | 23296647 1244 | 21988013 1245 | 22744135 1246 | 27489927 1247 | 20271334 1248 | 28910086 1249 | 21639379 1250 | 26929793 1251 | 27398975 1252 | 23101415 1253 | 23649815 1254 | 22342182 1255 | 28850531 1256 | 27136787 1257 | 28575062 1258 | 28380111 1259 | 24321463 1260 | 28842470 1261 | 28808969 1262 | 23758928 1263 | 21788532 1264 | 21246732 1265 | 28321639 1266 | 24355218 1267 | 29516322 1268 | 28161673 1269 | 25310581 1270 | 28641077 1271 | 21368983 1272 | 21529035 1273 | 20398206 1274 | 23987698 1275 | 24810526 1276 | 22224019 1277 | 28715446 1278 | 26569000 1279 | 28227896 1280 | 24222129 1281 | 23324257 1282 | 28286520 1283 | 29086706 1284 | 21459576 1285 | 26998031 1286 | 24740490 1287 | 28463896 1288 | 21248410 1289 | 24827299 1290 | 29802355 1291 | 27230255 1292 | 22737346 1293 | 21337361 1294 | 20572107 1295 | 27867135 1296 | 21439402 1297 | 25155559 1298 | 25018523 1299 | 20783605 1300 | 23374859 1301 | 29360056 1302 | 25410274 1303 | 23845733 1304 | 23938674 1305 | 28737650 1306 | 21022247 1307 | 28036645 1308 | 21056565 1309 | 27017448 1310 | 25797368 1311 | 27248959 1312 | 26332440 1313 | 21897523 1314 | 20294328 1315 | 26532625 1316 | 26999162 1317 | 21357975 1318 | 22083721 1319 | 22836439 1320 | 22646176 1321 | 28768774 1322 | 27885839 1323 | 27773075 1324 | 28742229 1325 | 29954498 1326 | 24445656 1327 | 26701037 1328 | 29803827 1329 | 26434994 1330 | 23304572 1331 | 25024043 1332 | 22369615 1333 | 23993933 1334 | 25838840 1335 | 27409307 1336 | 22702738 1337 | 26510163 1338 | 26244228 1339 | 22115145 1340 | 29699014 1341 | 28466063 1342 | 22807178 1343 | 22035660 1344 | 25060745 1345 | 22804208 1346 | 25085009 1347 | 27517563 1348 | 23902955 1349 | 29679540 1350 | 26523042 1351 | 29137661 1352 | 22698103 1353 | 26723070 1354 | 21159353 1355 | 28319750 1356 | 28504359 1357 | 21865329 1358 | 22427885 1359 | 25202470 1360 | 22208191 1361 | 29734203 1362 | 26042147 1363 | 20137544 1364 | 26448286 1365 | 29207040 1366 | 21689373 1367 | 20841118 1368 | 28638111 1369 | 29169676 1370 | 25719027 1371 | 25024449 1372 | 21881271 1373 | 27434609 1374 | 25113556 1375 | 26607273 1376 | 27447491 1377 | 21659609 1378 | 24506737 1379 | 24928373 1380 | 28552124 1381 | 20684624 1382 | 20378492 1383 | 21061858 1384 | 28541043 1385 | 29415831 1386 | 26466315 1387 | 29623163 1388 | 21552969 1389 | 23087016 1390 | 21385029 1391 | 23670399 1392 | 28447612 1393 | 20525801 1394 | 23342165 1395 | 26208030 1396 | 27016877 1397 | 26112342 1398 | 21121292 1399 | 20321190 1400 | 21503694 1401 | 28526234 1402 | 21586864 1403 | 22806117 1404 | 20270617 1405 | 29612261 1406 | 21516900 1407 | 29585666 1408 | 29865517 1409 | 20730449 1410 | 27280274 1411 | 20488163 1412 | 20403845 1413 | 28945620 1414 | 22471766 1415 | 20034788 1416 | 27293277 1417 | 23182160 1418 | 20923634 1419 | 23212121 1420 | 23109778 1421 | 25231593 1422 | 28063666 1423 | 28921679 1424 | 29442614 1425 | 28519937 1426 | 24157959 1427 | 29656694 1428 | 24548126 1429 | 20864265 1430 | 29628674 1431 | 22594987 1432 | 26337950 1433 | 23803123 1434 | 24681286 1435 | 23711795 1436 | 20572769 1437 | 25544435 1438 | 29234463 1439 | 23778053 1440 | 27662949 1441 | 21184522 1442 | 29619050 1443 | 21392737 1444 | 21775005 1445 | 20557368 1446 | 28387800 1447 | 29735848 1448 | 25349096 1449 | 24955708 1450 | 23170104 1451 | 23768316 1452 | 21653933 1453 | 21656435 1454 | 23509132 1455 | 29597185 1456 | 26227132 1457 | 25505798 1458 | 25346728 1459 | 23056237 1460 | 22900482 1461 | 27258866 1462 | 28599398 1463 | 27408374 1464 | 26959301 1465 | 29727965 1466 | 25394939 1467 | 25634870 1468 | 25731044 1469 | 27347427 1470 | 29766340 1471 | 29063249 1472 | 24153921 1473 | 20968160 1474 | 29884987 1475 | 28118417 1476 | 26622459 1477 | 27183359 1478 | 26146740 1479 | 23651123 1480 | 27557113 1481 | 26292643 1482 | 23490282 1483 | 24348699 1484 | 22512297 1485 | 22544641 1486 | 27384707 1487 | 28793008 1488 | 22146648 1489 | 29116792 1490 | 20510894 1491 | 27705655 1492 | 27982954 1493 | 26430759 1494 | 27567899 1495 | 22080042 1496 | 26916117 1497 | 26889212 1498 | 29368678 1499 | 28193787 1500 | 20995804 1501 | 22897855 1502 | 29406226 1503 | 28432789 1504 | 20241505 1505 | 20980232 1506 | 24583010 1507 | 23903113 1508 | 28584337 1509 | 20244946 1510 | 21089660 1511 | 29954155 1512 | 26150772 1513 | 25627342 1514 | 25218709 1515 | 21645957 1516 | 24053387 1517 | 26643421 1518 | 29990375 1519 | 27269242 1520 | 27844795 1521 | 23859192 1522 | 25634208 1523 | 23513475 1524 | 29742220 1525 | 26751350 1526 | 20546376 1527 | 20953785 1528 | 29951141 1529 | 27356261 1530 | 24696292 1531 | 25496588 1532 | 23983339 1533 | 27183313 1534 | 27510474 1535 | 25797337 1536 | 27989625 1537 | 20361979 1538 | 29786720 1539 | 24575376 1540 | 25598607 1541 | 24138162 1542 | 24821037 1543 | 25923081 1544 | 29639211 1545 | 22270027 1546 | 24409506 1547 | 26380769 1548 | 24566381 1549 | 27730861 1550 | 27121858 1551 | 27785191 1552 | 27946900 1553 | 20508291 1554 | 27843920 1555 | 29915836 1556 | 20881865 1557 | 20778770 1558 | 21895470 1559 | 27956044 1560 | 21003300 1561 | 23654954 1562 | 26377056 1563 | 21192937 1564 | 27059118 1565 | 22008581 1566 | 21471305 1567 | 22816527 1568 | 25576035 1569 | 23000521 1570 | 23789780 1571 | 27717240 1572 | 25590198 1573 | 29274634 1574 | 21544280 1575 | 29790625 1576 | 20852869 1577 | 29775848 1578 | 22316868 1579 | 24870553 1580 | 28748024 1581 | 23741709 1582 | 26594627 1583 | 24174145 1584 | 29623349 1585 | 24221696 1586 | 21077984 1587 | 24898739 1588 | 29330851 1589 | 28621941 1590 | 22241351 1591 | 28659937 1592 | 26611552 1593 | 26244150 1594 | 29663588 1595 | 25679038 1596 | 22072278 1597 | 29352137 1598 | 23763587 1599 | 29899970 1600 | 28588739 1601 | 22325593 1602 | 25720973 1603 | 29542095 1604 | 26596607 1605 | 25319254 1606 | 25902218 1607 | 22505405 1608 | 28703756 1609 | 21186316 1610 | 29358185 1611 | 27751192 1612 | 26872281 1613 | 27394628 1614 | 28469133 1615 | 24797956 1616 | 20419133 1617 | 27917934 1618 | 25638443 1619 | 21607808 1620 | 28811620 1621 | 27709193 1622 | 22636724 1623 | 28684559 1624 | 21121930 1625 | 27213528 1626 | 28474597 1627 | 24638080 1628 | 24850353 1629 | 27853422 1630 | 24749829 1631 | 24215782 1632 | 22642142 1633 | 27957236 1634 | 24913756 1635 | 23952749 1636 | 27446703 1637 | 22258889 1638 | 24443594 1639 | 26727243 1640 | 26331968 1641 | 27447843 1642 | 29124900 1643 | 20767290 1644 | 27974891 1645 | 20499820 1646 | 21303358 1647 | 25585230 1648 | 23173291 1649 | 29605756 1650 | 21402657 1651 | 27202919 1652 | 20566066 1653 | 23126648 1654 | 21013646 1655 | 24341274 1656 | 24160453 1657 | 24365736 1658 | 28061140 1659 | 23585946 1660 | 22254414 1661 | 21597560 1662 | 24601401 1663 | 23422253 1664 | 25102208 1665 | 21508006 1666 | 28294562 1667 | 24726318 1668 | 22542051 1669 | 23292736 1670 | 21791431 1671 | 24880929 1672 | 21132374 1673 | 21899711 1674 | 26447903 1675 | 21234412 1676 | 21040474 1677 | 22599474 1678 | 22706717 1679 | 22116871 1680 | 23005495 1681 | 22707684 1682 | 29895791 1683 | 24988003 1684 | 24565080 1685 | 28177679 1686 | 24896167 1687 | 26090462 1688 | 26285872 1689 | 24130049 1690 | 24378436 1691 | 20504421 1692 | 24979225 1693 | 29625752 1694 | 20771544 1695 | 26804225 1696 | 26168794 1697 | 21408982 1698 | 23223968 1699 | 21630334 1700 | 23215123 1701 | 21233527 1702 | 25024443 1703 | 28428841 1704 | 21687077 1705 | 28048820 1706 | 20842338 1707 | 22484220 1708 | 28962469 1709 | 20606025 1710 | 20519139 1711 | 20606476 1712 | 29510098 1713 | 22241740 1714 | 22032546 1715 | 26973025 1716 | 22669358 1717 | 25796316 1718 | 24073359 1719 | 24276794 1720 | 26999973 1721 | 21644012 1722 | 20602622 1723 | 20886028 1724 | 28402987 1725 | 21292378 1726 | 22388817 1727 | 29839757 1728 | 28393685 1729 | 29085120 1730 | 23604831 1731 | 27863856 1732 | 26534989 1733 | 22167217 1734 | 28863712 1735 | 29294541 1736 | 23276846 1737 | 20858122 1738 | 27131802 1739 | 24197963 1740 | 20320564 1741 | 25616791 1742 | 25766371 1743 | 26213540 1744 | 28674044 1745 | 25211952 1746 | 25731592 1747 | 22651802 1748 | 27446873 1749 | 24061779 1750 | 26037981 1751 | 24028268 1752 | 25886280 1753 | 20591054 1754 | 28336702 1755 | 20861163 1756 | 26311470 1757 | 29055596 1758 | 26719796 1759 | 20204353 1760 | 20993767 1761 | 21542219 1762 | 22364802 1763 | 26509450 1764 | 22201912 1765 | 23023014 1766 | 26103576 1767 | 23914378 1768 | 24487370 1769 | 26660266 1770 | 22134740 1771 | 24511371 1772 | 26248957 1773 | 29665867 1774 | 26045286 1775 | 20276186 1776 | 20325282 1777 | 28728146 1778 | 27858691 1779 | 23530621 1780 | 26257040 1781 | 24466693 1782 | 27016978 1783 | 24575761 1784 | 21689128 1785 | 29259131 1786 | 24174143 1787 | 24946598 1788 | 21398054 1789 | 21699678 1790 | 24361369 1791 | 20877732 1792 | 26075412 1793 | 20674273 1794 | 29761340 1795 | 28278334 1796 | 27097999 1797 | 24242407 1798 | 21381042 1799 | 20009544 1800 | 29383289 1801 | 26883769 1802 | 24138785 1803 | 25596038 1804 | 21079615 1805 | 22469038 1806 | 29084643 1807 | 24457260 1808 | 22626202 1809 | 24206993 1810 | 20488889 1811 | 29727450 1812 | 29680700 1813 | 23357868 1814 | 27126833 1815 | 21846157 1816 | 29010706 1817 | 25494666 1818 | 24106362 1819 | 25275098 1820 | 21982559 1821 | 22602584 1822 | 27895771 1823 | 28021725 1824 | 28376411 1825 | 23726824 1826 | 20916697 1827 | 25597411 1828 | 25416014 1829 | 28912369 1830 | 23273958 1831 | 24331229 1832 | 24557197 1833 | 29967312 1834 | 29919261 1835 | 22353581 1836 | 26652704 1837 | 20548153 1838 | 26508407 1839 | 22846375 1840 | 20202114 1841 | 25571635 1842 | 29592715 1843 | 27674739 1844 | 27991288 1845 | 22620672 1846 | 28181749 1847 | 26520491 1848 | 29494650 1849 | 26703796 1850 | 28622729 1851 | 20036409 1852 | 22195917 1853 | 24381806 1854 | 26183048 1855 | 28160819 1856 | 21476079 1857 | 25932355 1858 | 25537165 1859 | 23372007 1860 | 27435057 1861 | 21699931 1862 | 25840205 1863 | 20909515 1864 | 27636875 1865 | 27353781 1866 | 20778935 1867 | 24353866 1868 | 24714387 1869 | 21812606 1870 | 22531664 1871 | 28928017 1872 | 28474253 1873 | 22908725 1874 | 25650581 1875 | 26727785 1876 | 25734468 1877 | 23999083 1878 | 28278537 1879 | 24777840 1880 | 23148978 1881 | 21725811 1882 | 22041378 1883 | 22582998 1884 | 26771203 1885 | 29391795 1886 | 27136367 1887 | 22074751 1888 | 22893708 1889 | 28510958 1890 | 21495492 1891 | 21052505 1892 | 21005127 1893 | 27859161 1894 | 24257560 1895 | 21798713 1896 | 22533225 1897 | 27773800 1898 | 21412032 1899 | 28556426 1900 | 21393418 1901 | 25826773 1902 | 21918300 1903 | 20103661 1904 | 27864087 1905 | 28818150 1906 | 28462046 1907 | 29871648 1908 | 21952094 1909 | 27083222 1910 | 27399973 1911 | 21589242 1912 | 28756239 1913 | 22969744 1914 | 25440945 1915 | 29064950 1916 | 29148768 1917 | 26967733 1918 | 23393953 1919 | 25567330 1920 | 23298085 1921 | 26765152 1922 | 23006650 1923 | 25797426 1924 | 21433564 1925 | 29557195 1926 | 21284477 1927 | 28235883 1928 | 23606489 1929 | 28589785 1930 | 28086171 1931 | 25893094 1932 | 24951354 1933 | 26203524 1934 | 25932273 1935 | 27714358 1936 | 22614923 1937 | 21511939 1938 | 20607097 1939 | 21413175 1940 | 29388327 1941 | 23584989 1942 | 27786001 1943 | 26393576 1944 | 28201416 1945 | 21362902 1946 | 23355892 1947 | 25341184 1948 | 21379613 1949 | 23527215 1950 | 26158633 1951 | 28897839 1952 | 22334290 1953 | 20502868 1954 | 29966629 1955 | 26526704 1956 | 28551516 1957 | 26855371 1958 | 27805131 1959 | 22377705 1960 | 23745843 1961 | 24940249 1962 | 27963659 1963 | 25239067 1964 | 29832644 1965 | 23009518 1966 | 22142392 1967 | 20936632 1968 | 23881631 1969 | 20226778 1970 | 27006362 1971 | 24951444 1972 | 29319999 1973 | 29671644 1974 | 21956592 1975 | 26433729 1976 | 21964217 1977 | 20474896 1978 | 22715389 1979 | 28710710 1980 | 21163249 1981 | 29787276 1982 | 21001794 1983 | 24333772 1984 | 25909769 1985 | 29187852 1986 | 27573659 1987 | 22026023 1988 | 23099520 1989 | 24890142 1990 | 21213674 1991 | 23868489 1992 | 25275090 1993 | 27923669 1994 | 22115443 1995 | 24381621 1996 | 20186354 1997 | 26610405 1998 | 20728183 1999 | 23374911 2000 | 20319095 2001 | 29910341 2002 | 20069518 2003 | 20330234 2004 | 28971647 2005 | 24474801 2006 | 20606838 2007 | 21300170 2008 | 29960683 2009 | 21248359 2010 | 22443934 2011 | 24981486 2012 | 24292395 2013 | 27148040 2014 | 21315274 2015 | 25316535 2016 | 21018849 2017 | 21849304 2018 | 20220384 2019 | 27923586 2020 | 26167754 2021 | 22837503 2022 | 24784039 2023 | 26644071 2024 | 28776865 2025 | 22647855 2026 | 22540449 2027 | 20352168 2028 | 21564603 2029 | 20134941 2030 | 22902908 2031 | 27243356 2032 | 22886929 2033 | 24298230 2034 | 20584002 2035 | 20198539 2036 | 21034394 2037 | 20798638 2038 | 20098814 2039 | 29376924 2040 | 27619833 2041 | 28382342 2042 | 25378068 2043 | 22249206 2044 | 27387929 2045 | 23222557 2046 | 21354240 2047 | 20210983 2048 | 26942049 2049 | 23991290 2050 | 28680883 2051 | 28480239 2052 | 25580716 2053 | 22458524 2054 | 27706599 2055 | 26147369 2056 | 27417307 2057 | 24724117 2058 | 21932557 2059 | 23825711 2060 | 25922753 2061 | 27562334 2062 | 27074132 2063 | 21813184 2064 | 28343220 2065 | 21119532 2066 | 25611128 2067 | 27907456 2068 | 24734507 2069 | 20437464 2070 | 20236616 2071 | 24361939 2072 | 24717214 2073 | 23764941 2074 | 25858090 2075 | 23542028 2076 | 24394777 2077 | 21691842 2078 | 28033997 2079 | 22923235 2080 | 24196251 2081 | 20719339 2082 | 23734090 2083 | 28437233 2084 | 26792014 2085 | 20440697 2086 | 23465137 2087 | 22976893 2088 | 20726440 2089 | 20445653 2090 | 29949868 2091 | 21659963 2092 | 28497875 2093 | 24404431 2094 | 25112926 2095 | 20223815 2096 | 20611802 2097 | 22150194 2098 | 25887905 2099 | 24494212 2100 | 20565810 2101 | 24922145 2102 | 27164605 2103 | 20754396 2104 | 29275177 2105 | 26335184 2106 | 28318886 2107 | 26179384 2108 | 26393333 2109 | 21778733 2110 | 23480692 2111 | 21655922 2112 | 21439368 2113 | 22082882 2114 | 20013839 2115 | 25339739 2116 | 23322902 2117 | 28175486 2118 | 20388837 2119 | 20188982 2120 | 25465425 2121 | 20042723 2122 | 28354206 2123 | 28074105 2124 | 29795940 2125 | 22477358 2126 | 27360919 2127 | 21564543 2128 | 29207012 2129 | 20887558 2130 | 29058733 2131 | 28161130 2132 | 20347160 2133 | 28006893 2134 | 26114793 2135 | 29698110 2136 | 20033298 2137 | 27311633 2138 | 20598025 2139 | 29832963 2140 | 26211408 2141 | 27366090 2142 | 29822240 2143 | 29045680 2144 | 27208540 2145 | 25174183 2146 | 27183806 2147 | 24217062 2148 | 26362355 2149 | 25019641 2150 | 25127919 2151 | 28196108 2152 | 26170838 2153 | 28885549 2154 | 20363371 2155 | 26832105 2156 | 23026557 2157 | 26450610 2158 | 23699745 2159 | 21675781 2160 | 22684818 2161 | 27067429 2162 | 21557040 2163 | 20392675 2164 | 26354327 2165 | 20489957 2166 | 22764825 2167 | 27163907 2168 | 20295728 2169 | 22265914 2170 | 24817190 2171 | 22689291 2172 | 29158668 2173 | 29160491 2174 | 29762990 2175 | 22400729 2176 | 29563154 2177 | 27416082 2178 | 28073803 2179 | 29280806 2180 | 26678507 2181 | 29993812 2182 | 24567350 2183 | 25719295 2184 | 25694537 2185 | 24662172 2186 | 25620132 2187 | 23979299 2188 | 28155728 2189 | 24655135 2190 | 24151397 2191 | 28351620 2192 | 25717483 2193 | 22530073 2194 | 27772971 2195 | 28029479 2196 | 21871355 2197 | 25969667 2198 | 21113027 2199 | 29751564 2200 | 28428111 2201 | 24064482 2202 | 23998126 2203 | 23670383 2204 | 25403395 2205 | 25002317 2206 | 22451045 2207 | 27068358 2208 | 20146658 2209 | 20032645 2210 | 24322430 2211 | 26935539 2212 | 26887554 2213 | 25624183 2214 | 21098223 2215 | 27785116 2216 | 22989015 2217 | 21786525 2218 | 28377307 2219 | 21190229 2220 | 26937439 2221 | 29504388 2222 | 26702216 2223 | 22122422 2224 | 21320856 2225 | 27321105 2226 | 26211781 2227 | 29705034 2228 | 25624620 2229 | 26448261 2230 | 28323062 2231 | 23826964 2232 | 20954239 2233 | 24393674 2234 | 20370714 2235 | 22053054 2236 | 24260459 2237 | 21020541 2238 | 28833494 2239 | 21078886 2240 | 27611398 2241 | 27218054 2242 | 27810599 2243 | 22009838 2244 | 24176724 2245 | 29563192 2246 | 22954974 2247 | 29609210 2248 | 20318081 2249 | 20279762 2250 | 26015697 2251 | 20407074 2252 | 21676486 2253 | 28898910 2254 | 29711734 2255 | 27319510 2256 | 29810802 2257 | 25007382 2258 | 29208258 2259 | 26651271 2260 | 26639750 2261 | 28209457 2262 | 26526115 2263 | 25772692 2264 | 27776170 2265 | 27968723 2266 | 26707548 2267 | 29411194 2268 | 25037898 2269 | 27004732 2270 | 21834389 2271 | 28441135 2272 | 29662284 2273 | 23965847 2274 | 20839783 2275 | 21570363 2276 | 20995392 2277 | 27884665 2278 | 23656996 2279 | 27576857 2280 | 23544897 2281 | 23013764 2282 | 29509113 2283 | 27973156 2284 | 23615210 2285 | 27858710 2286 | 28318912 2287 | 27144087 2288 | 21198887 2289 | 26019883 2290 | 20081408 2291 | 25277307 2292 | 26650720 2293 | 29733523 2294 | 27615566 2295 | 20277443 2296 | 27463306 2297 | 23567943 2298 | 20963752 2299 | 23157842 2300 | 28439163 2301 | 26653503 2302 | 24764787 2303 | 20350605 2304 | 28546191 2305 | 25868900 2306 | 22365622 2307 | 25261789 2308 | 26354864 2309 | 24277841 2310 | 23567251 2311 | 27679801 2312 | 25393907 2313 | 20731394 2314 | 20337380 2315 | 26947515 2316 | 26175355 2317 | 27071392 2318 | 27447233 2319 | 23312304 2320 | 21356713 2321 | 25736232 2322 | 21890007 2323 | 20730037 2324 | 25146721 2325 | 24278279 2326 | 28578702 2327 | 25893331 2328 | 22026730 2329 | 25409633 2330 | 29001082 2331 | 29952857 2332 | 28881809 2333 | 29347053 2334 | 26588737 2335 | 28781268 2336 | 22505587 2337 | 25305012 2338 | 24787583 2339 | 20389413 2340 | 22140408 2341 | 29293788 2342 | 24578178 2343 | 24212894 2344 | 20327372 2345 | 27600282 2346 | 22912858 2347 | 20820789 2348 | 28578405 2349 | 21955132 2350 | 24079808 2351 | 25313822 2352 | 28743603 2353 | 21793626 2354 | 25699716 2355 | 23333218 2356 | 24263643 2357 | 25154724 2358 | 25575938 2359 | 24645614 2360 | 26120176 2361 | 23124798 2362 | 21867343 2363 | 21467339 2364 | 29325451 2365 | 23249829 2366 | 20884919 2367 | 27650067 2368 | 25702453 2369 | 21954602 2370 | 24544953 2371 | 26814926 2372 | 22442842 2373 | 29167032 2374 | 29329464 2375 | 20936041 2376 | 27099123 2377 | 27612354 2378 | 27708050 2379 | 25334400 2380 | 23600463 2381 | 23764198 2382 | 21389970 2383 | 26137712 2384 | 28283006 2385 | 29550741 2386 | 22177826 2387 | 22596689 2388 | 27748073 2389 | 22411011 2390 | 25658400 2391 | 27013039 2392 | 28146334 2393 | 21850258 2394 | 24227359 2395 | 26973878 2396 | 28777975 2397 | 25386461 2398 | 29795027 2399 | 26899817 2400 | 26268272 2401 | 26499369 2402 | 25326227 2403 | 27704318 2404 | 21944813 2405 | 23392711 2406 | 29740493 2407 | 28145367 2408 | 23745461 2409 | 22018361 2410 | 23604021 2411 | 23020379 2412 | 29721961 2413 | 21209931 2414 | 23976017 2415 | 20033338 2416 | 26718947 2417 | 27376670 2418 | 24513505 2419 | 24987313 2420 | 21157699 2421 | 29569643 2422 | 24697857 2423 | 27972658 2424 | 20715808 2425 | 25964396 2426 | 23542322 2427 | 28534223 2428 | 23045777 2429 | 26512679 2430 | 21297827 2431 | 20712112 2432 | 22851403 2433 | 22178562 2434 | 27883353 2435 | 29279621 2436 | 24121141 2437 | 21663605 2438 | 28109076 2439 | 23251600 2440 | 24455267 2441 | 27485035 2442 | 27529791 2443 | 26469548 2444 | 28965607 2445 | 22818956 2446 | 20298928 2447 | 20922898 2448 | 23924064 2449 | 22941580 2450 | 26352671 2451 | 29371922 2452 | 20289704 2453 | 27805449 2454 | 23267117 2455 | 24745727 2456 | 21993085 2457 | 20953736 2458 | 21889211 2459 | 24112883 2460 | 20482625 2461 | 29914906 2462 | 24975738 2463 | 29621572 2464 | 25377140 2465 | 23153830 2466 | 28146637 2467 | 29448976 2468 | 27118235 2469 | 27645826 2470 | 24563254 2471 | 25872190 2472 | 22693585 2473 | 29708998 2474 | 25990619 2475 | 21311560 2476 | 27076292 2477 | 25967610 2478 | 22620338 2479 | 29810830 2480 | 21225387 2481 | 21399601 2482 | 26473630 2483 | 28399085 2484 | 20618956 2485 | 23984401 2486 | 27115354 2487 | 25376724 2488 | 26134277 2489 | 29412092 2490 | 22390339 2491 | 23945869 2492 | 29472041 2493 | 29902184 2494 | 27823901 2495 | 24818543 2496 | 20654975 2497 | 22908502 2498 | 23167808 2499 | 20294242 2500 | 24858477 2501 | 20683795 2502 | 26627376 2503 | 22009525 2504 | 26789912 2505 | 24520643 2506 | 29896646 2507 | 25794363 2508 | 20531160 2509 | 25150998 2510 | 28320584 2511 | 20263396 2512 | 28700315 2513 | 26325106 2514 | 28602136 2515 | 20282547 2516 | 21404454 2517 | 22355109 2518 | 23050751 2519 | 27062717 2520 | 22517237 2521 | 24945050 2522 | 24645526 2523 | 26809012 2524 | 21435488 2525 | 27413206 2526 | 27157751 2527 | 20851249 2528 | 23163734 2529 | 27561687 2530 | 28840819 2531 | 22500517 2532 | 25018403 2533 | 24371419 2534 | 21831252 2535 | 23610240 2536 | 25310314 2537 | 29341103 2538 | 21250011 2539 | 29979074 2540 | 20658361 2541 | 25316712 2542 | 29008189 2543 | 29359772 2544 | 28703421 2545 | 27605072 2546 | 28936744 2547 | 23845458 2548 | 29504729 2549 | 22296534 2550 | 24568599 2551 | 22404097 2552 | 25288717 2553 | 28001431 2554 | 27973205 2555 | 22953176 2556 | 28560856 2557 | 25169952 2558 | 22307900 2559 | 21430325 2560 | 25628582 2561 | 24812661 2562 | 21208299 2563 | 24980275 2564 | 28968918 2565 | 26809563 2566 | 29450239 2567 | 29484530 2568 | 22401248 2569 | 28053611 2570 | 23081517 2571 | 28822852 2572 | 26073449 2573 | 21632397 2574 | 24838289 2575 | 28882262 2576 | 29262368 2577 | 26094362 2578 | 28198479 2579 | 27926633 2580 | 21109958 2581 | 29370824 2582 | 28356361 2583 | 20849647 2584 | 25140300 2585 | 29187391 2586 | 29598650 2587 | 21223174 2588 | 26531028 2589 | 26347960 2590 | 20966809 2591 | 23705104 2592 | 20446603 2593 | 23506424 2594 | 26007217 2595 | 28624611 2596 | 21789353 2597 | 25748124 2598 | 23639272 2599 | 27054428 2600 | 27129004 2601 | 24896512 2602 | 27989682 2603 | 21105354 2604 | 29169123 2605 | 23430532 2606 | 22704785 2607 | 28990063 2608 | 24984086 2609 | 27512853 2610 | 22336612 2611 | 24000677 2612 | 23984001 2613 | 26084629 2614 | 24565987 2615 | 24281725 2616 | 28311773 2617 | 22767092 2618 | 26278576 2619 | 20783870 2620 | 26791540 2621 | 27083621 2622 | 25299236 2623 | 21723679 2624 | 21311574 2625 | 23786797 2626 | 27392996 2627 | 22317060 2628 | 21475988 2629 | 21722779 2630 | 21931412 2631 | 28415213 2632 | 27787735 2633 | 23273238 2634 | 27133932 2635 | 24910158 2636 | 23948770 2637 | 23610146 2638 | 28256248 2639 | 24617497 2640 | 29995433 2641 | 23090454 2642 | 24683780 2643 | 28467556 2644 | 27697220 2645 | 23929063 2646 | 26888851 2647 | 21224163 2648 | 23355365 2649 | 21094850 2650 | 28940899 2651 | 24318433 2652 | 22754234 2653 | 24047543 2654 | 23128440 2655 | 25689811 2656 | 25375742 2657 | 20692627 2658 | 24997311 2659 | 27747042 2660 | 27371245 2661 | 24783536 2662 | 20682418 2663 | 25822600 2664 | 28375494 2665 | 25343776 2666 | 29358821 2667 | 27076397 2668 | 24099179 2669 | 20228289 2670 | 20778225 2671 | 24369954 2672 | 26573359 2673 | 20441454 2674 | 26420387 2675 | 20416656 2676 | 23152148 2677 | 26074572 2678 | 23443631 2679 | 20654982 2680 | 24703174 2681 | 26711659 2682 | 28542451 2683 | 25555967 2684 | 29949735 2685 | 26249641 2686 | 25619386 2687 | 27650791 2688 | 23174714 2689 | 26538417 2690 | 26782860 2691 | 28459311 2692 | 22969056 2693 | 23747305 2694 | 28170664 2695 | 26893024 2696 | 26570859 2697 | 22675760 2698 | 27888948 2699 | 22467017 2700 | 29511147 2701 | 26326547 2702 | 25926575 2703 | 20476695 2704 | 26555267 2705 | 29322937 2706 | 25462472 2707 | 25268104 2708 | 29533679 2709 | 21074264 2710 | 26978538 2711 | 20001811 2712 | 27968822 2713 | 21448553 2714 | 23411037 2715 | 22260200 2716 | 23920943 2717 | 23401701 2718 | 26407359 2719 | 29971678 2720 | 26792524 2721 | 24867488 2722 | 26719664 2723 | 21360276 2724 | 29161897 2725 | 22199235 2726 | 22878829 2727 | 23333045 2728 | 23543884 2729 | 21459335 2730 | 21743950 2731 | 24506053 2732 | 22614888 2733 | 24023109 2734 | 26263970 2735 | 29210026 2736 | 27899555 2737 | 20850610 2738 | 27740206 2739 | 21907966 2740 | 23374093 2741 | 23490230 2742 | 22015797 2743 | 24347519 2744 | 29837296 2745 | 22102720 2746 | 27780166 2747 | 20768285 2748 | 25830012 2749 | 22231007 2750 | 22407262 2751 | 25742437 2752 | 22484228 2753 | 27977490 2754 | 22094321 2755 | 28978916 2756 | 23758359 2757 | 28035902 2758 | 25270693 2759 | 23250163 2760 | 25444212 2761 | 22621981 2762 | 22906633 2763 | 20710132 2764 | 22401703 2765 | 26470433 2766 | 27589560 2767 | 25812484 2768 | 27933149 2769 | 26282119 2770 | 22650849 2771 | 20146521 2772 | 21994733 2773 | 23311597 2774 | 24142436 2775 | 23907663 2776 | 21250437 2777 | 22266949 2778 | 25974873 2779 | 22106611 2780 | 21157218 2781 | 22477953 2782 | 27787697 2783 | 29543158 2784 | 22288926 2785 | 25144827 2786 | 28852592 2787 | 25873821 2788 | 27817581 2789 | 23053325 2790 | 21118237 2791 | 29537033 2792 | 24852430 2793 | 21606243 2794 | 20975745 2795 | 25950445 2796 | 23666597 2797 | 29770758 2798 | 20456898 2799 | 23040129 2800 | 22272743 2801 | 27351613 2802 | 24965231 2803 | 22097524 2804 | 28528068 2805 | 21690439 2806 | 27203457 2807 | 22674643 2808 | 27571928 2809 | 25136353 2810 | 26799374 2811 | 22062956 2812 | 29936689 2813 | 28982138 2814 | 22058403 2815 | 24879231 2816 | 21873965 2817 | 26897004 2818 | 22381343 2819 | 22614554 2820 | 29658293 2821 | 20994664 2822 | 20855947 2823 | 21633928 2824 | 21493363 2825 | 24312037 2826 | 25567316 2827 | 20476255 2828 | 24203806 2829 | 29143017 2830 | 27985471 2831 | 20804575 2832 | 24344831 2833 | 23673484 2834 | 23878020 2835 | 27474818 2836 | 21731461 2837 | 21780565 2838 | 24691990 2839 | 27052619 2840 | 29324097 2841 | 27436918 2842 | 20625723 2843 | 21176648 2844 | 23992120 2845 | 29977646 2846 | 20556908 2847 | 24266098 2848 | 22065684 2849 | 21979847 2850 | 21148860 2851 | 23466911 2852 | 29043908 2853 | 25050979 2854 | 24452142 2855 | 24084438 2856 | 21372728 2857 | 25772617 2858 | 22137875 2859 | 21658149 2860 | 20436561 2861 | 25716013 2862 | 27328480 2863 | 25579302 2864 | 25792168 2865 | 20489583 2866 | 26494969 2867 | 26097283 2868 | 24535550 2869 | 25628119 2870 | 28601581 2871 | 22149024 2872 | 22950459 2873 | 27323207 2874 | 28062414 2875 | 26584893 2876 | 28110327 2877 | 21181375 2878 | 22566216 2879 | 28727555 2880 | 21408710 2881 | 27334101 2882 | 28868868 2883 | 22569877 2884 | 22623861 2885 | 24816872 2886 | 20878961 2887 | 21503329 2888 | 29662896 2889 | 25030576 2890 | 20062068 2891 | 24084545 2892 | 24859259 2893 | 21587377 2894 | 29696103 2895 | 26141667 2896 | 23589840 2897 | 29150862 2898 | 28526413 2899 | 26849436 2900 | 20244975 2901 | 29726516 2902 | 20873909 2903 | 26059382 2904 | 24295333 2905 | 28215087 2906 | 20476767 2907 | 21074749 2908 | 25204918 2909 | 22742222 2910 | 28699469 2911 | 29991662 2912 | 20265645 2913 | 22678757 2914 | 26302670 2915 | 24820984 2916 | 20274576 2917 | 27030289 2918 | 29323568 2919 | 22353446 2920 | 26004718 2921 | 22289433 2922 | 20086887 2923 | 22525517 2924 | 25157581 2925 | 25824787 2926 | 27510697 2927 | 27742976 2928 | 26688891 2929 | 23637057 2930 | 28098913 2931 | 26914075 2932 | 20598825 2933 | 21738528 2934 | 24029331 2935 | 23780975 2936 | 28294060 2937 | 28776429 2938 | 24875769 2939 | 29269889 2940 | 25164119 2941 | 21912593 2942 | 20909529 2943 | 23682711 2944 | 20026345 2945 | 27630614 2946 | 21838867 2947 | 26294661 2948 | 28023470 2949 | 27586299 2950 | 22712217 2951 | 23756302 2952 | 21661815 2953 | 23460734 2954 | 28384907 2955 | 26570829 2956 | 22312296 2957 | 25255878 2958 | 25088291 2959 | 22017801 2960 | 27421495 2961 | 25311779 2962 | 28092720 2963 | 26331670 2964 | 27791299 2965 | 20384472 2966 | 24330979 2967 | 29101136 2968 | 28279193 2969 | 24165691 2970 | 27975545 2971 | 24997643 2972 | 27618887 2973 | 24724193 2974 | 29914965 2975 | 28391221 2976 | 27069605 2977 | 29160542 2978 | 26839977 2979 | 22145203 2980 | 27318319 2981 | 25772414 2982 | 21663516 2983 | 21029625 2984 | 20382821 2985 | 21306583 2986 | 23198740 2987 | 23107729 2988 | 23090401 2989 | 24378878 2990 | 21546366 2991 | 28232162 2992 | 23131360 2993 | 26733842 2994 | 20167161 2995 | 26212083 2996 | 26862834 2997 | 28611445 2998 | 24397832 2999 | 28036198 3000 | 28682571 3001 | 27810051 3002 | 23353553 3003 | 25960996 3004 | 20478108 3005 | 23779336 3006 | 28702860 3007 | 24791611 3008 | 28846737 3009 | 29639627 3010 | 25479435 3011 | 26799262 3012 | 21582110 3013 | 29516278 3014 | 27182192 3015 | 23133305 3016 | 28227799 3017 | 20972261 3018 | 20837509 3019 | 23290951 3020 | 23397352 3021 | 28277368 3022 | 28850931 3023 | 24843270 3024 | 26840185 3025 | 28608949 3026 | 21294938 3027 | 20623342 3028 | 23559500 3029 | 21566350 3030 | 29237896 3031 | 25231388 3032 | 23178771 3033 | 20519389 3034 | 27086305 3035 | 26979828 3036 | 21856805 3037 | 22124970 3038 | 25806296 3039 | 23038822 3040 | 21160826 3041 | 27113961 3042 | 22519807 3043 | 26560823 3044 | 25285629 3045 | 25662778 3046 | 21708617 3047 | 29074882 3048 | 28778671 3049 | 26440429 3050 | 29229287 3051 | 26605903 3052 | 20280405 3053 | 24234642 3054 | 24499091 3055 | 24804085 3056 | 26842916 3057 | 24564664 3058 | 23491977 3059 | 21878609 3060 | 25798399 3061 | 28154882 3062 | 22290449 3063 | 28366150 3064 | 21148994 3065 | 28095184 3066 | 27579507 3067 | 28169244 3068 | 29704030 3069 | 29283662 3070 | 23970299 3071 | 28684893 3072 | 28708815 3073 | 28280811 3074 | 21150019 3075 | 26353144 3076 | 25910634 3077 | 24677519 3078 | 23707983 3079 | 24362657 3080 | 25989336 3081 | 23618320 3082 | 29821385 3083 | 26123079 3084 | 23778507 3085 | 21687332 3086 | 22697576 3087 | 20623686 3088 | 29097012 3089 | 28628386 3090 | 26241878 3091 | 28678759 3092 | 24623258 3093 | 26605318 3094 | 28006962 3095 | 23349223 3096 | 23892020 3097 | 27679787 3098 | 28034848 3099 | 25531322 3100 | 25884976 3101 | 29058331 3102 | 29128412 3103 | 23660940 3104 | 23055598 3105 | 29138171 3106 | 29728377 3107 | 21451466 3108 | 29105309 3109 | 21272587 3110 | 21160317 3111 | 25911131 3112 | 29475809 3113 | 27289211 3114 | 27337066 3115 | 28782322 3116 | 21088976 3117 | 28469621 3118 | 22090713 3119 | 27305912 3120 | 27832355 3121 | 21025287 3122 | 21321080 3123 | 25462989 3124 | 20483724 3125 | 22495606 3126 | 20521950 3127 | 28632614 3128 | 26151486 3129 | 20935362 3130 | 23791133 3131 | 23306582 3132 | 24645585 3133 | 22229248 3134 | 23970308 3135 | 28803961 3136 | 25545821 3137 | 25162877 3138 | 26425609 3139 | 24760408 3140 | 21719711 3141 | 25765708 3142 | 26747882 3143 | 22041226 3144 | 26810714 3145 | 28783117 3146 | 24267492 3147 | 22204328 3148 | 24469858 3149 | 22542349 3150 | 21551436 3151 | 22673115 3152 | 28131339 3153 | 25504517 3154 | 23198180 3155 | 28411501 3156 | 24815443 3157 | 22279508 3158 | 23122932 3159 | 26162238 3160 | 27026160 3161 | 25942445 3162 | 27921341 3163 | 24781925 3164 | 23484497 3165 | 22358205 3166 | 23310576 3167 | 25268284 3168 | 20086698 3169 | 27782205 3170 | 22082603 3171 | 25994887 3172 | 27822082 3173 | 29986215 3174 | 24100858 3175 | 28568501 3176 | 26820159 3177 | 23567258 3178 | 20494235 3179 | 29488740 3180 | 21256841 3181 | 24839353 3182 | 29672980 3183 | 29989198 3184 | 24764125 3185 | 28705462 3186 | 27756406 3187 | 26961578 3188 | 21109565 3189 | 24637433 3190 | 20063875 3191 | 24701865 3192 | 22546178 3193 | 24266321 3194 | 20816438 3195 | 25673211 3196 | 21818897 3197 | 29262151 3198 | 25247849 3199 | 28676562 3200 | 23437357 3201 | 29255055 3202 | 28609225 3203 | 27016135 3204 | 21038697 3205 | 27856085 3206 | 27864441 3207 | 28590698 3208 | 26439153 3209 | 28743321 3210 | 27390840 3211 | 22688736 3212 | 21105075 3213 | 24140894 3214 | 22391626 3215 | 26505023 3216 | 26545917 3217 | 28248924 3218 | 20850178 3219 | 24432652 3220 | 29279670 3221 | 24015243 3222 | 29590055 3223 | 22870813 3224 | 24537480 3225 | 27697050 3226 | 27583682 3227 | 21265472 3228 | 20483058 3229 | 22616521 3230 | 21596326 3231 | 28128502 3232 | 27381045 3233 | 25469970 3234 | 21233398 3235 | 28237094 3236 | 25420880 3237 | 24842719 3238 | 25256515 3239 | 29354388 3240 | 22523911 3241 | 25425509 3242 | 25316252 3243 | 21340193 3244 | 27517236 3245 | 29450071 3246 | 29905079 3247 | 26248373 3248 | 20738710 3249 | 24616770 3250 | 27953186 3251 | 21076619 3252 | 25154512 3253 | 23170248 3254 | 20208716 3255 | 26244055 3256 | 24843803 3257 | 23031393 3258 | 24524866 3259 | 26782951 3260 | 26086419 3261 | 25256185 3262 | 27868167 3263 | 28553730 3264 | 28553408 3265 | 23635051 3266 | 20119933 3267 | 28191765 3268 | 29090590 3269 | 28506441 3270 | 29734905 3271 | 20542187 3272 | 22827089 3273 | 28600472 3274 | 25016422 3275 | 24989222 3276 | 24615497 3277 | 21101249 3278 | 22888689 3279 | 20979778 3280 | 25511006 3281 | 24082749 3282 | 23593475 3283 | 23806395 3284 | 20009795 3285 | 20533412 3286 | 20283132 3287 | 25186102 3288 | 22418351 3289 | 24130604 3290 | 23102682 3291 | 25318934 3292 | 22355541 3293 | 21755168 3294 | 26834766 3295 | 20238909 3296 | 29221831 3297 | 21327643 3298 | 24189228 3299 | 26104698 3300 | 21484759 3301 | 21736262 3302 | 24161275 3303 | 21123768 3304 | 21931619 3305 | 23436751 3306 | 27954158 3307 | 28581158 3308 | 25334013 3309 | 21190076 3310 | 20649934 3311 | 29705653 3312 | 25666941 3313 | 28120796 3314 | 20020095 3315 | 28809674 3316 | 27993553 3317 | 22796118 3318 | 21226005 3319 | 26606878 3320 | 24486627 3321 | 28913876 3322 | 24647608 3323 | 23364683 3324 | 27904593 3325 | 29126414 3326 | 27338264 3327 | 26857944 3328 | 21256049 3329 | 23421424 3330 | 27695752 3331 | 25747477 3332 | 23490828 3333 | 23573002 3334 | 27255262 3335 | 25991406 3336 | 26243235 3337 | 24157929 3338 | 26960264 3339 | 21223114 3340 | 20715617 3341 | 24767695 3342 | 22302903 3343 | 25180688 3344 | 24908097 3345 | 21554040 3346 | 20295574 3347 | 23168312 3348 | 21806523 3349 | 22339614 3350 | 26176496 3351 | 27703114 3352 | 22440388 3353 | 25886011 3354 | 25760288 3355 | 21038088 3356 | 24865442 3357 | 22578905 3358 | 28114222 3359 | 24875807 3360 | 23551805 3361 | 29794789 3362 | 24575514 3363 | 28653404 3364 | 24531107 3365 | 22034473 3366 | 20756114 3367 | 21004812 3368 | 28086055 3369 | 22850858 3370 | 27582433 3371 | 29605540 3372 | 25525962 3373 | 22400870 3374 | 20892088 3375 | 28235206 3376 | 27925232 3377 | 24565256 3378 | 28680309 3379 | 24226433 3380 | 24347318 3381 | 24885301 3382 | 20122002 3383 | 28558049 3384 | 24517018 3385 | 23785086 3386 | 21899927 3387 | 23189373 3388 | 27451479 3389 | 28882326 3390 | 24488579 3391 | 23262776 3392 | 26378116 3393 | 21211219 3394 | 29952218 3395 | 20679385 3396 | 25700640 3397 | 20159267 3398 | 20697613 3399 | 25486748 3400 | 25153436 3401 | 26051343 3402 | 20206248 3403 | 27541563 3404 | 29359531 3405 | 23103047 3406 | 20712960 3407 | 21427242 3408 | 26041852 3409 | 25480553 3410 | 29674051 3411 | 23711612 3412 | 28676294 3413 | 26828992 3414 | 20848203 3415 | 20778459 3416 | 22249057 3417 | 28807811 3418 | 26327187 3419 | 23878108 3420 | 21088698 3421 | 24473547 3422 | 21033948 3423 | 24761737 3424 | 22559919 3425 | 26983465 3426 | 23066391 3427 | 24935878 3428 | 27436389 3429 | 29518141 3430 | 26219632 3431 | 28224073 3432 | 24447752 3433 | 29393126 3434 | 29894288 3435 | 29372467 3436 | 29597865 3437 | 24235968 3438 | 24360479 3439 | 22714316 3440 | 26975424 3441 | 23454398 3442 | 21997509 3443 | 22718216 3444 | 25616323 3445 | 21076908 3446 | 27776037 3447 | 26988390 3448 | 29393328 3449 | 25862087 3450 | 27078841 3451 | 21493175 3452 | 24103969 3453 | 24301598 3454 | 22741804 3455 | 22872195 3456 | 21965768 3457 | 23572605 3458 | 25078461 3459 | 27493009 3460 | 29410905 3461 | 29387043 3462 | 21990038 3463 | 24501779 3464 | 21980738 3465 | 28262761 3466 | 27916369 3467 | 25657107 3468 | 20673864 3469 | 20676099 3470 | 24064369 3471 | 28743239 3472 | 25387305 3473 | 21614707 3474 | 25628089 3475 | 20120713 3476 | 26054602 3477 | 25929077 3478 | 22524486 3479 | 27770356 3480 | 25493970 3481 | 29749178 3482 | 29529322 3483 | 29374595 3484 | 22489748 3485 | 22785442 3486 | 25644816 3487 | 28416178 3488 | 27881456 3489 | 21053833 3490 | 20128314 3491 | 21375906 3492 | 21092023 3493 | 26210754 3494 | 21751007 3495 | 22436342 3496 | 28281433 3497 | 26360050 3498 | 26138147 3499 | 27229258 3500 | 29249777 3501 | 25738338 3502 | 26329983 3503 | 21377732 3504 | 26722932 3505 | 23770178 3506 | 24118705 3507 | 27477408 3508 | 20587807 3509 | 24414835 3510 | 24515301 3511 | 26044496 3512 | 28680780 3513 | 29101609 3514 | 20793053 3515 | 20209826 3516 | 25023745 3517 | 23133975 3518 | 20592922 3519 | 20141749 3520 | 22577063 3521 | 28301167 3522 | 29984291 3523 | 26154732 3524 | 28867120 3525 | 25156485 3526 | 23353899 3527 | 24644921 3528 | 27532221 3529 | 23016043 3530 | 24715471 3531 | 28461296 3532 | 28954577 3533 | 27984463 3534 | 23988089 3535 | 24026071 3536 | 24432649 3537 | 25723590 3538 | 24722145 3539 | 25857020 3540 | 28240629 3541 | 25023446 3542 | 29710886 3543 | 25240069 3544 | 28169830 3545 | 29988666 3546 | 20347503 3547 | 20309684 3548 | 23557746 3549 | 24087950 3550 | 20068737 3551 | 25424674 3552 | 26416465 3553 | 29743796 3554 | 26063921 3555 | 24781855 3556 | 29559314 3557 | 22517963 3558 | 24130214 3559 | 27340492 3560 | 20878598 3561 | 29184982 3562 | 25747579 3563 | 28884549 3564 | 24562732 3565 | 29162423 3566 | 21855857 3567 | 23833366 3568 | 25542112 3569 | 26547458 3570 | 22695562 3571 | 24958361 3572 | 23784607 3573 | 29537226 3574 | 21808497 3575 | 26329203 3576 | 27008557 3577 | 21376273 3578 | 28007708 3579 | 25482155 3580 | 29145554 3581 | 20427863 3582 | 20735744 3583 | 21308610 3584 | 28188560 3585 | 20906303 3586 | 25505983 3587 | 26606353 3588 | 21083657 3589 | 22347991 3590 | 25841562 3591 | 27852814 3592 | 23489894 3593 | 29419692 3594 | 28917205 3595 | 28810913 3596 | 20066597 3597 | 22397412 3598 | 29910597 3599 | 26948028 3600 | 27104668 3601 | 21049918 3602 | 20970332 3603 | 27641434 3604 | 24370257 3605 | 23542890 3606 | 25991525 3607 | 26248516 3608 | 27654819 3609 | 21508930 3610 | 21631709 3611 | 20391892 3612 | 20307703 3613 | 24209184 3614 | 23679375 3615 | 25400540 3616 | 23705968 3617 | 22621569 3618 | 20015409 3619 | 22705830 3620 | 23127704 3621 | 21952348 3622 | 27747279 3623 | 27826641 3624 | 22658574 3625 | 21647439 3626 | 22913204 3627 | 22669530 3628 | 20478411 3629 | 27025474 3630 | 25180880 3631 | 26219826 3632 | 25733813 3633 | 28806396 3634 | 22367412 3635 | 27529381 3636 | 28441105 3637 | 20582397 3638 | 25404198 3639 | 23487223 3640 | 28020295 3641 | 28814909 3642 | 22414965 3643 | 25306949 3644 | 21243572 3645 | 21054416 3646 | 24480219 3647 | 27971985 3648 | 26845868 3649 | 23417913 3650 | 25774350 3651 | 20131838 3652 | 29062878 3653 | 24618629 3654 | 27677165 3655 | 29289048 3656 | 28060933 3657 | 27789635 3658 | 23728762 3659 | 25958748 3660 | 28089121 3661 | 27917040 3662 | 27955905 3663 | 27327184 3664 | 20570356 3665 | 22404085 3666 | 24733611 3667 | 23229177 3668 | 27436254 3669 | 24354811 3670 | 24919661 3671 | 28895318 3672 | 26374781 3673 | 23195396 3674 | 26757350 3675 | 26288273 3676 | 25629152 3677 | 29495725 3678 | 21496561 3679 | 27258929 3680 | 26612112 3681 | 29752307 3682 | 28255524 3683 | 23157665 3684 | 20742619 3685 | 25998001 3686 | 29070256 3687 | 29608500 3688 | 29840328 3689 | 29144082 3690 | 22834803 3691 | 20281904 3692 | 23902728 3693 | 21683435 3694 | 26686059 3695 | 21034479 3696 | 24661657 3697 | 21727027 3698 | 27128240 3699 | 23943725 3700 | 26712765 3701 | 24121489 3702 | 20447611 3703 | 23148093 3704 | 27998021 3705 | 25010746 3706 | 23130152 3707 | 27055246 3708 | 25756600 3709 | 20540501 3710 | 28823314 3711 | 28463471 3712 | 23891843 3713 | 27498460 3714 | 21759601 3715 | 21858052 3716 | 26898466 3717 | 27983916 3718 | 24152805 3719 | 21854745 3720 | 23686022 3721 | 20348358 3722 | 23927937 3723 | 29740108 3724 | 21357300 3725 | 26335349 3726 | 20044161 3727 | 29407386 3728 | 26755588 3729 | 23030520 3730 | 25764544 3731 | 20019282 3732 | 21734467 3733 | 22305487 3734 | 26665551 3735 | 24868025 3736 | 27640781 3737 | 28346333 3738 | 28423469 3739 | 27337500 3740 | 21978955 3741 | 29109552 3742 | 27796176 3743 | 29569356 3744 | 24886039 3745 | 20450305 3746 | 20947071 3747 | 22279720 3748 | 29374359 3749 | 21465564 3750 | 26139470 3751 | 21246909 3752 | 27427961 3753 | 23879857 3754 | 27102423 3755 | 28230265 3756 | 29205973 3757 | 23091323 3758 | 24793872 3759 | 26525343 3760 | 22478783 3761 | 21461855 3762 | 25665942 3763 | 25457722 3764 | 27597528 3765 | 24653861 3766 | 27878914 3767 | 28192667 3768 | 23717963 3769 | 27530682 3770 | 29832939 3771 | 27475740 3772 | 25570366 3773 | 29625241 3774 | 21118175 3775 | 27612970 3776 | 20268766 3777 | 24511569 3778 | 27958778 3779 | 20622774 3780 | 23678279 3781 | 22034259 3782 | 22634923 3783 | 21198710 3784 | 27317586 3785 | 21970498 3786 | 26041342 3787 | 22172304 3788 | 28677406 3789 | 27834147 3790 | 27101141 3791 | 28909605 3792 | 27142595 3793 | 24762009 3794 | 29212363 3795 | 22280709 3796 | 24875116 3797 | 27928720 3798 | 21822935 3799 | 29474810 3800 | 25202623 3801 | 20616535 3802 | 21186138 3803 | 20776731 3804 | 21071482 3805 | 29685580 3806 | 22985389 3807 | 28211809 3808 | 25012359 3809 | 20817381 3810 | 27878899 3811 | 20789590 3812 | 20878334 3813 | 26429957 3814 | 28198999 3815 | 21553160 3816 | 25287295 3817 | 29195175 3818 | 20257823 3819 | 25569528 3820 | 26154925 3821 | 27440313 3822 | 27170524 3823 | 26560431 3824 | 28259328 3825 | 26625457 3826 | 23384882 3827 | 21485458 3828 | 28921286 3829 | 28029068 3830 | 20789479 3831 | 24982986 3832 | 26957142 3833 | 27137838 3834 | 28451825 3835 | 29258265 3836 | 22197506 3837 | 27387753 3838 | 29180213 3839 | 22933017 3840 | 21075207 3841 | 23567041 3842 | 26271007 3843 | 23915688 3844 | 21361809 3845 | 21410123 3846 | 20338427 3847 | 22939500 3848 | 24478083 3849 | 27989978 3850 | 26271577 3851 | 22556595 3852 | 22269908 3853 | 23494296 3854 | 29081505 3855 | 28401495 3856 | 22805908 3857 | 25132563 3858 | 20068687 3859 | 26802557 3860 | 29154657 3861 | 29094401 3862 | 24768641 3863 | 21780934 3864 | 22518946 3865 | 23704085 3866 | 26856765 3867 | 25657295 3868 | 28778834 3869 | 23524434 3870 | 26145774 3871 | 24909983 3872 | 26969249 3873 | 20513435 3874 | 27953378 3875 | 27510695 3876 | 21791554 3877 | 20752231 3878 | 26722542 3879 | 25085437 3880 | 25606040 3881 | 26971162 3882 | 22042255 3883 | 21988570 3884 | 29519371 3885 | 25916000 3886 | 24023233 3887 | 29951293 3888 | 27206941 3889 | 28773319 3890 | 20818432 3891 | 22918141 3892 | 25773170 3893 | 29101394 3894 | 29916440 3895 | 27725568 3896 | 21429491 3897 | 29296123 3898 | 26346160 3899 | 23710667 3900 | 29469221 3901 | 24312793 3902 | 22338959 3903 | 26392845 3904 | 22718212 3905 | 20627898 3906 | 22586636 3907 | 20516600 3908 | 28270347 3909 | 23969091 3910 | 27600925 3911 | 25985851 3912 | 26972578 3913 | 21159449 3914 | 24795534 3915 | 26479009 3916 | 20921937 3917 | 21912981 3918 | 21261923 3919 | 22628369 3920 | 26884943 3921 | 21838381 3922 | 28832880 3923 | 21052814 3924 | 23122173 3925 | 24867216 3926 | 29197368 3927 | 26329980 3928 | 26622536 3929 | 28577607 3930 | 22799390 3931 | 26899165 3932 | 20069521 3933 | 20783356 3934 | 20453187 3935 | 25393641 3936 | 27614485 3937 | 25216166 3938 | 26824520 3939 | 27130554 3940 | 22401016 3941 | 20864554 3942 | 28363156 3943 | 20306330 3944 | 29675100 3945 | 23791578 3946 | 24003538 3947 | 29167571 3948 | 21075344 3949 | 27118409 3950 | 20801715 3951 | 25247397 3952 | 23676876 3953 | 28894603 3954 | 27613447 3955 | 22119989 3956 | 25389136 3957 | 25525564 3958 | 27292944 3959 | 25386909 3960 | 25350793 3961 | 22120421 3962 | 25800022 3963 | 29510277 3964 | 22734488 3965 | 23523021 3966 | 26345870 3967 | 20948657 3968 | 26763205 3969 | 23831147 3970 | 29371352 3971 | 21736639 3972 | 24057593 3973 | 28991580 3974 | 20581266 3975 | 28155144 3976 | 28117919 3977 | 26959568 3978 | 22675963 3979 | 29341398 3980 | 29919505 3981 | 20113727 3982 | 23673711 3983 | 28939657 3984 | 23428135 3985 | 21104224 3986 | 26670667 3987 | 28511590 3988 | 20594552 3989 | 24475830 3990 | 29440217 3991 | 22234971 3992 | 23105149 3993 | 28705660 3994 | 28578802 3995 | 25838166 3996 | 20275428 3997 | 22490908 3998 | 27367860 3999 | 20455433 4000 | 29607818 4001 | 23481250 4002 | 23790471 4003 | 20494438 4004 | 21549998 4005 | 20887182 4006 | 20324034 4007 | 20134224 4008 | 20351038 4009 | 25383632 4010 | 29453718 4011 | 24327584 4012 | 25769306 4013 | 24194854 4014 | 28270906 4015 | 28411972 4016 | 28543087 4017 | 28876219 4018 | -------------------------------------------------------------------------------- /mimicdata/mimic4_icd10/top50_icd10_code_list.txt: -------------------------------------------------------------------------------- 1 | J189 2 | I129 3 | G4700 4 | M109 5 | I130 6 | Z955 7 | G4733 8 | I4891 9 | E1122 10 | E039 11 | F329 12 | D62 13 | J45909 14 | J449 15 | N189 16 | I252 17 | F17210 18 | Y92230 19 | N183 20 | I480 21 | E871 22 | E119 23 | Z23 24 | E669 25 | E785 26 | N179 27 | Z7902 28 | G8929 29 | Z66 30 | N400 31 | 02HV33Z 32 | Z951 33 | K219 34 | I10 35 | E872 36 | I2510 37 | D649 38 | Z87891 39 | Z8673 40 | F419 41 | I110 42 | K5900 43 | N390 44 | D696 45 | Z86718 46 | Y92239 47 | Y929 48 | J9601 49 | Z794 50 | Z7901 51 | -------------------------------------------------------------------------------- /mimicdata/mimic4_icd9/TOP_50_CODES.csv: -------------------------------------------------------------------------------- 1 | 274.9 2 | V49.86 3 | V58.67 4 | 327.23 5 | 428.32 6 | 428.0 7 | 585.6 8 | 300.00 9 | 584.9 10 | V45.82 11 | 401.9 12 | 403.90 13 | 427.31 14 | 285.1 15 | 412 16 | 96.6 17 | 38.97 18 | 530.81 19 | 427.89 20 | 585.9 21 | 272.0 22 | 338.29 23 | V15.82 24 | 285.9 25 | V58.61 26 | V45.81 27 | V12.54 28 | 599.0 29 | 278.00 30 | 414.00 31 | 486 32 | 244.9 33 | 305.1 34 | V12.51 35 | 564.00 36 | 272.4 37 | 250.00 38 | 287.5 39 | 493.90 40 | 311 41 | 276.51 42 | 357.2 43 | 414.01 44 | V58.66 45 | 38.93 46 | 276.1 47 | 276.2 48 | 600.00 49 | 496 50 | 733.00 51 | -------------------------------------------------------------------------------- /mimicdata/mimic4_icd9/top50_icd9_code_list.txt: -------------------------------------------------------------------------------- 1 | 274.9 2 | V49.86 3 | V58.67 4 | 327.23 5 | 428.32 6 | 428.0 7 | 585.6 8 | 300.00 9 | 584.9 10 | V45.82 11 | 401.9 12 | 403.90 13 | 427.31 14 | 285.1 15 | 412 16 | 96.6 17 | 38.97 18 | 530.81 19 | 427.89 20 | 585.9 21 | 272.0 22 | 338.29 23 | V15.82 24 | 285.9 25 | V58.61 26 | V45.81 27 | V12.54 28 | 599.0 29 | 278.00 30 | 414.00 31 | 486 32 | 244.9 33 | 305.1 34 | V12.51 35 | 564.00 36 | 272.4 37 | 250.00 38 | 287.5 39 | 493.90 40 | 311 41 | 276.51 42 | 357.2 43 | 414.01 44 | V58.66 45 | 38.93 46 | 276.1 47 | 276.2 48 | 600.00 49 | 496 50 | 733.00 51 | -------------------------------------------------------------------------------- /notebooks/data_mimic_IV_concat_note_label.py: -------------------------------------------------------------------------------- 1 | MIMIC_4_DIR='./mimicdata/physionet.org/files/mimiciv/2.2' 2 | MIMIC_4_SAVE_DIR='./mimicdata/mimic4_icd10' 3 | """ 4 | Concatenate the labels with the notes data and split using the saved splits 5 | """ 6 | import csv 7 | from datetime import datetime 8 | import random 9 | 10 | 11 | import pandas as pd 12 | 13 | DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" 14 | 15 | def concat_data(labelsfile, notes_file, output_note_labeled_file): 16 | """ 17 | INPUTS: 18 | labelsfile: sorted by hadm id, contains one label per line 19 | notes_file: sorted by hadm id, contains one note per line 20 | """ 21 | with open(labelsfile, 'r', encoding='utf-8') as lf: 22 | print("CONCATENATING") 23 | with open(notes_file, 'r', encoding='utf-8') as notesfile: 24 | outfilename = output_note_labeled_file 25 | with open(outfilename, 'w', encoding='utf-8') as outfile: 26 | w = csv.writer(outfile) 27 | w.writerow(['subject_id', 'hadm_id', 'text', 'labels']) 28 | 29 | labels_gen = next_labels(lf) 30 | notes_gen = next_notes(notesfile) 31 | 32 | for i, (subj_id, text, hadm_id) in enumerate(notes_gen): 33 | if i % 10000 == 0: 34 | print(str(i) + " done") 35 | cur_subj, cur_labels, cur_hadm = next(labels_gen) 36 | 37 | if cur_hadm == hadm_id: 38 | w.writerow([subj_id, str(hadm_id), text, ';'.join(cur_labels)]) 39 | else: 40 | print("couldn't find matching hadm_id. data is probably not sorted correctly") 41 | break 42 | 43 | return outfilename 44 | 45 | def next_labels(labelsfile): 46 | """ 47 | Generator for label sets from the label file 48 | """ 49 | labels_reader = csv.reader(labelsfile) 50 | #header 51 | next(labels_reader) 52 | 53 | first_label_line = next(labels_reader) 54 | 55 | cur_subj = int(first_label_line[0]) 56 | cur_hadm = int(first_label_line[1]) 57 | cur_labels = [first_label_line[2]] 58 | 59 | for row in labels_reader: 60 | subj_id = int(row[0]) 61 | hadm_id = int(row[1]) 62 | code = row[2] 63 | #keep reading until you hit a new hadm id 64 | if hadm_id != cur_hadm or subj_id != cur_subj: 65 | yield cur_subj, cur_labels, cur_hadm 66 | cur_labels = [code] 67 | cur_subj = subj_id 68 | cur_hadm = hadm_id 69 | else: 70 | #add to the labels and move on 71 | cur_labels.append(code) 72 | yield cur_subj, cur_labels, cur_hadm 73 | 74 | def next_notes(notesfile): 75 | """ 76 | Generator for notes from the notes file 77 | This will also concatenate discharge summaries and their addenda, which have the same subject and hadm id 78 | """ 79 | nr = csv.reader(notesfile) 80 | #header 81 | next(nr) 82 | 83 | first_note = next(nr) 84 | 85 | cur_subj = int(first_note[0]) 86 | cur_hadm = int(first_note[1]) 87 | cur_text = first_note[3] 88 | 89 | for row in nr: 90 | subj_id = int(row[0]) 91 | hadm_id = int(row[1]) 92 | text = row[3] 93 | #keep reading until you hit a new hadm id 94 | if hadm_id != cur_hadm or subj_id != cur_subj: 95 | yield cur_subj, cur_text, cur_hadm 96 | cur_text = text 97 | cur_subj = subj_id 98 | cur_hadm = hadm_id 99 | else: 100 | #concatenate to the discharge summary and move on 101 | cur_text += " " + text 102 | yield cur_subj, cur_text, cur_hadm 103 | 104 | 105 | run_icd9=concat_data( 106 | labelsfile=f'{MIMIC_4_SAVE_DIR}/ALL_CODES_filtered.csv', 107 | notes_file=f'{MIMIC_4_SAVE_DIR}/disch_9_filtered.csv', 108 | output_note_labeled_file=f'{MIMIC_4_SAVE_DIR}/note_labels_icd9_filtered.csv' 109 | ) 110 | 111 | run_icd10=concat_data( 112 | labelsfile=f'{MIMIC_4_SAVE_DIR}/ALL_CODES_filtered.csv', 113 | notes_file=f'{MIMIC_4_SAVE_DIR}/disch_10_filtered.csv', 114 | output_note_labeled_file=f'{MIMIC_4_SAVE_DIR}/note_labels_icd10_filtered.csv' 115 | ) 116 | --------------------------------------------------------------------------------