Spaces:
Sleeping
Sleeping
added: trained tokenizer plus gradio app
Browse files- .gitignore +51 -0
- app.py +39 -4
- notebooks/train_eng.ipynb +885 -0
- notebooks/train_hindi.ipynb +0 -0
- requirements.txt +2 -2
- tokenizer/__init__.py +0 -0
- tokenizer/base.py +108 -0
- tokenizer/basic_bpe.py +73 -0
- tokenizer/regex_bpe.py +169 -0
- tokenizer/utils.py +55 -0
- tokenizer_model/hindi_sentiments_basic.model +4747 -0
- tokenizer_model/hindi_sentiments_basic.vocab +0 -0
- train.py +24 -0
.gitignore
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Python
|
| 2 |
+
*.pyc
|
| 3 |
+
__pycache__/
|
| 4 |
+
*.pyo
|
| 5 |
+
*.pyd
|
| 6 |
+
|
| 7 |
+
# Virtual Environment
|
| 8 |
+
venv/
|
| 9 |
+
env/
|
| 10 |
+
env.bak/
|
| 11 |
+
env1/
|
| 12 |
+
venv1/
|
| 13 |
+
.venv/
|
| 14 |
+
.venv1/
|
| 15 |
+
env/
|
| 16 |
+
ENV/
|
| 17 |
+
env.bak/
|
| 18 |
+
ENV.bak/
|
| 19 |
+
env1/
|
| 20 |
+
ENV1/
|
| 21 |
+
.venv/
|
| 22 |
+
.venv1/
|
| 23 |
+
env/
|
| 24 |
+
ENV/
|
| 25 |
+
env.bak/
|
| 26 |
+
ENV.bak/
|
| 27 |
+
env1/
|
| 28 |
+
ENV1/
|
| 29 |
+
.venv/
|
| 30 |
+
.venv1/
|
| 31 |
+
|
| 32 |
+
# IDE
|
| 33 |
+
.idea/
|
| 34 |
+
.vscode/
|
| 35 |
+
|
| 36 |
+
# Logs
|
| 37 |
+
*.log
|
| 38 |
+
|
| 39 |
+
# Data
|
| 40 |
+
data/
|
| 41 |
+
|
| 42 |
+
# Compiled files
|
| 43 |
+
*.exe
|
| 44 |
+
*.dll
|
| 45 |
+
*.so
|
| 46 |
+
*.dylib
|
| 47 |
+
|
| 48 |
+
# Miscellaneous
|
| 49 |
+
*.swp
|
| 50 |
+
.DS_Store
|
| 51 |
+
data/
|
app.py
CHANGED
|
@@ -1,7 +1,42 @@
|
|
| 1 |
import gradio as gr
|
|
|
|
|
|
|
| 2 |
|
| 3 |
-
|
| 4 |
-
|
|
|
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
+
import os
|
| 3 |
+
from tokenizer.basic_bpe import BasicTokenizer
|
| 4 |
|
| 5 |
+
print("Loading the model...")
|
| 6 |
+
model_path = os.path.join(os.getcwd(), "tokenizer_model")
|
| 7 |
+
model_path = os.path.join(model_path, "hindi_sentiments_basic.model")
|
| 8 |
|
| 9 |
+
basic_tokenizer = BasicTokenizer()
|
| 10 |
+
basic_tokenizer.load(model_path)
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
def test_tokenizer(text):
|
| 14 |
+
ids = basic_tokenizer.encode(text)
|
| 15 |
+
decoded = basic_tokenizer.decode(ids)
|
| 16 |
+
mapping = [(str(i), basic_tokenizer.decode([i])) for i in ids]
|
| 17 |
+
|
| 18 |
+
return ids, decoded, mapping
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
with gr.Blocks() as demo:
|
| 22 |
+
gr.HTML("<h1 align = 'center'> Token Generation for Hindi Dataset </h1>")
|
| 23 |
+
|
| 24 |
+
with gr.Row():
|
| 25 |
+
with gr.Column():
|
| 26 |
+
inputs = [
|
| 27 |
+
gr.TextArea(
|
| 28 |
+
label="Enter initial text to generate tokens in Hindi", lines=10
|
| 29 |
+
)
|
| 30 |
+
]
|
| 31 |
+
generate_btn = gr.Button(value="Generate Text")
|
| 32 |
+
with gr.Column():
|
| 33 |
+
enc = gr.Textbox(label="Encoded Tokens")
|
| 34 |
+
txt = gr.Textbox(label="Decoded Text from tokens")
|
| 35 |
+
map = gr.Textbox(label="Mapping of the tokens and respective texts")
|
| 36 |
+
outputs = [enc, txt, map]
|
| 37 |
+
|
| 38 |
+
generate_btn.click(fn=test_tokenizer, inputs=inputs, outputs=outputs)
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
if __name__ == "__main__":
|
| 42 |
+
demo.launch(share=True)
|
notebooks/train_eng.ipynb
ADDED
|
@@ -0,0 +1,885 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": 1,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [
|
| 8 |
+
{
|
| 9 |
+
"data": {
|
| 10 |
+
"application/javascript": "IPython.notebook.set_autosave_interval(300000)"
|
| 11 |
+
},
|
| 12 |
+
"metadata": {},
|
| 13 |
+
"output_type": "display_data"
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"name": "stdout",
|
| 17 |
+
"output_type": "stream",
|
| 18 |
+
"text": [
|
| 19 |
+
"Autosaving every 300 seconds\n"
|
| 20 |
+
]
|
| 21 |
+
}
|
| 22 |
+
],
|
| 23 |
+
"source": [
|
| 24 |
+
"%autosave 300\n",
|
| 25 |
+
"%reload_ext autoreload\n",
|
| 26 |
+
"%autoreload 2\n",
|
| 27 |
+
"%config Completer.use_jedi = False"
|
| 28 |
+
]
|
| 29 |
+
},
|
| 30 |
+
{
|
| 31 |
+
"cell_type": "code",
|
| 32 |
+
"execution_count": 2,
|
| 33 |
+
"metadata": {},
|
| 34 |
+
"outputs": [
|
| 35 |
+
{
|
| 36 |
+
"name": "stdout",
|
| 37 |
+
"output_type": "stream",
|
| 38 |
+
"text": [
|
| 39 |
+
"/mnt/batch/tasks/shared/LS_root/mounts/clusters/insights-model-run2/code/Users/soutrik.chowdhury/EraV2_Transformers/S20_tokenizer\n"
|
| 40 |
+
]
|
| 41 |
+
}
|
| 42 |
+
],
|
| 43 |
+
"source": [
|
| 44 |
+
"import os\n",
|
| 45 |
+
"\n",
|
| 46 |
+
"os.chdir(\n",
|
| 47 |
+
" \"/mnt/batch/tasks/shared/LS_root/mounts/clusters/insights-model-run2/code/Users/soutrik.chowdhury/EraV2_S20_tokenization\"\n",
|
| 48 |
+
")\n",
|
| 49 |
+
"print(os.getcwd())"
|
| 50 |
+
]
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"cell_type": "code",
|
| 54 |
+
"execution_count": 3,
|
| 55 |
+
"metadata": {},
|
| 56 |
+
"outputs": [],
|
| 57 |
+
"source": [
|
| 58 |
+
"from tokenizer.basic_bpe import BasicTokenizer\n",
|
| 59 |
+
"from tokenizer.regex_bpe import RegexTokenizer"
|
| 60 |
+
]
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"cell_type": "code",
|
| 64 |
+
"execution_count": 5,
|
| 65 |
+
"metadata": {},
|
| 66 |
+
"outputs": [],
|
| 67 |
+
"source": [
|
| 68 |
+
"file_name = \"tiny_shakespeare.txt\"\n",
|
| 69 |
+
"file_path = os.path.join(os.getcwd(), \"data\", file_name)\n",
|
| 70 |
+
"\n",
|
| 71 |
+
"with open(file_path, \"r\") as f:\n",
|
| 72 |
+
" text = f.read()"
|
| 73 |
+
]
|
| 74 |
+
},
|
| 75 |
+
{
|
| 76 |
+
"cell_type": "code",
|
| 77 |
+
"execution_count": 6,
|
| 78 |
+
"metadata": {},
|
| 79 |
+
"outputs": [
|
| 80 |
+
{
|
| 81 |
+
"name": "stdout",
|
| 82 |
+
"output_type": "stream",
|
| 83 |
+
"text": [
|
| 84 |
+
"The length of the text is 1115394\n"
|
| 85 |
+
]
|
| 86 |
+
}
|
| 87 |
+
],
|
| 88 |
+
"source": [
|
| 89 |
+
"print(f\"The length of the text is {len(text)}\")"
|
| 90 |
+
]
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"cell_type": "markdown",
|
| 94 |
+
"metadata": {},
|
| 95 |
+
"source": [
|
| 96 |
+
"creating the model file for basic tokenizer"
|
| 97 |
+
]
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"cell_type": "code",
|
| 101 |
+
"execution_count": 10,
|
| 102 |
+
"metadata": {},
|
| 103 |
+
"outputs": [],
|
| 104 |
+
"source": [
|
| 105 |
+
"model_path = os.path.join(os.getcwd(), \"tokenizer_model\")\n",
|
| 106 |
+
"os.makedirs(model_path, exist_ok=True)"
|
| 107 |
+
]
|
| 108 |
+
},
|
| 109 |
+
{
|
| 110 |
+
"cell_type": "code",
|
| 111 |
+
"execution_count": 9,
|
| 112 |
+
"metadata": {},
|
| 113 |
+
"outputs": [
|
| 114 |
+
{
|
| 115 |
+
"name": "stdout",
|
| 116 |
+
"output_type": "stream",
|
| 117 |
+
"text": [
|
| 118 |
+
"merge 1/256: (101, 32) -> 256 (b'e ') had 27643 occurrences\n",
|
| 119 |
+
"merge 2/256: (116, 104) -> 257 (b'th') had 22739 occurrences\n",
|
| 120 |
+
"merge 3/256: (116, 32) -> 258 (b't ') had 16508 occurrences\n",
|
| 121 |
+
"merge 4/256: (115, 32) -> 259 (b's ') had 15364 occurrences\n",
|
| 122 |
+
"merge 5/256: (100, 32) -> 260 (b'd ') had 14165 occurrences\n",
|
| 123 |
+
"merge 6/256: (44, 32) -> 261 (b', ') had 14098 occurrences\n",
|
| 124 |
+
"merge 7/256: (111, 117) -> 262 (b'ou') had 12730 occurrences\n",
|
| 125 |
+
"merge 8/256: (101, 114) -> 263 (b'er') had 11771 occurrences\n",
|
| 126 |
+
"merge 9/256: (105, 110) -> 264 (b'in') had 10606 occurrences\n",
|
| 127 |
+
"merge 10/256: (121, 32) -> 265 (b'y ') had 10283 occurrences\n",
|
| 128 |
+
"merge 11/256: (97, 110) -> 266 (b'an') had 10197 occurrences\n",
|
| 129 |
+
"merge 12/256: (58, 10) -> 267 (b':\\n') had 8762 occurrences\n",
|
| 130 |
+
"merge 13/256: (111, 114) -> 268 (b'or') had 8458 occurrences\n",
|
| 131 |
+
"merge 14/256: (111, 32) -> 269 (b'o ') had 8134 occurrences\n",
|
| 132 |
+
"merge 15/256: (101, 110) -> 270 (b'en') had 7568 occurrences\n",
|
| 133 |
+
"merge 16/256: (10, 10) -> 271 (b'\\n\\n') had 7098 occurrences\n",
|
| 134 |
+
"merge 17/256: (97, 114) -> 272 (b'ar') had 7081 occurrences\n",
|
| 135 |
+
"merge 18/256: (32, 257) -> 273 (b' th') had 6662 occurrences\n",
|
| 136 |
+
"merge 19/256: (111, 110) -> 274 (b'on') had 6435 occurrences\n",
|
| 137 |
+
"merge 20/256: (108, 108) -> 275 (b'll') had 6357 occurrences\n",
|
| 138 |
+
"merge 21/256: (104, 97) -> 276 (b'ha') had 6055 occurrences\n",
|
| 139 |
+
"merge 22/256: (44, 10) -> 277 (b',\\n') had 5501 occurrences\n",
|
| 140 |
+
"merge 23/256: (46, 271) -> 278 (b'.\\n\\n') had 5018 occurrences\n",
|
| 141 |
+
"merge 24/256: (105, 259) -> 279 (b'is ') had 4913 occurrences\n",
|
| 142 |
+
"merge 25/256: (101, 115) -> 280 (b'es') had 4878 occurrences\n",
|
| 143 |
+
"merge 26/256: (121, 262) -> 281 (b'you') had 4649 occurrences\n",
|
| 144 |
+
"merge 27/256: (32, 115) -> 282 (b' s') had 4207 occurrences\n",
|
| 145 |
+
"merge 28/256: (116, 269) -> 283 (b'to ') had 4099 occurrences\n",
|
| 146 |
+
"merge 29/256: (266, 260) -> 284 (b'and ') had 3968 occurrences\n",
|
| 147 |
+
"merge 30/256: (111, 119) -> 285 (b'ow') had 3964 occurrences\n",
|
| 148 |
+
"merge 31/256: (101, 97) -> 286 (b'ea') had 3943 occurrences\n",
|
| 149 |
+
"merge 32/256: (32, 109) -> 287 (b' m') had 3906 occurrences\n",
|
| 150 |
+
"merge 33/256: (32, 119) -> 288 (b' w') had 3854 occurrences\n",
|
| 151 |
+
"merge 34/256: (111, 102) -> 289 (b'of') had 3836 occurrences\n",
|
| 152 |
+
"merge 35/256: (32, 104) -> 290 (b' h') had 3668 occurrences\n",
|
| 153 |
+
"merge 36/256: (264, 103) -> 291 (b'ing') had 3660 occurrences\n",
|
| 154 |
+
"merge 37/256: (111, 109) -> 292 (b'om') had 3614 occurrences\n",
|
| 155 |
+
"merge 38/256: (32, 97) -> 293 (b' a') had 3124 occurrences\n",
|
| 156 |
+
"merge 39/256: (99, 104) -> 294 (b'ch') had 2974 occurrences\n",
|
| 157 |
+
"merge 40/256: (257, 256) -> 295 (b'the ') had 2967 occurrences\n",
|
| 158 |
+
"merge 41/256: (115, 116) -> 296 (b'st') had 2961 occurrences\n",
|
| 159 |
+
"merge 42/256: (32, 98) -> 297 (b' b') had 2855 occurrences\n",
|
| 160 |
+
"merge 43/256: (110, 111) -> 298 (b'no') had 2756 occurrences\n",
|
| 161 |
+
"merge 44/256: (105, 114) -> 299 (b'ir') had 2700 occurrences\n",
|
| 162 |
+
"merge 45/256: (102, 268) -> 300 (b'for') had 2698 occurrences\n",
|
| 163 |
+
"merge 46/256: (118, 256) -> 301 (b've ') had 2650 occurrences\n",
|
| 164 |
+
"merge 47/256: (101, 261) -> 302 (b'e, ') had 2591 occurrences\n",
|
| 165 |
+
"merge 48/256: (105, 257) -> 303 (b'ith') had 2421 occurrences\n",
|
| 166 |
+
"merge 49/256: (273, 256) -> 304 (b' the ') had 2397 occurrences\n",
|
| 167 |
+
"merge 50/256: (115, 101) -> 305 (b'se') had 2373 occurrences\n",
|
| 168 |
+
"merge 51/256: (108, 105) -> 306 (b'li') had 2358 occurrences\n",
|
| 169 |
+
"merge 52/256: (84, 104) -> 307 (b'Th') had 2356 occurrences\n",
|
| 170 |
+
"merge 53/256: (275, 32) -> 308 (b'll ') had 2246 occurrences\n",
|
| 171 |
+
"merge 54/256: (114, 101) -> 309 (b're') had 2164 occurrences\n",
|
| 172 |
+
"merge 55/256: (115, 258) -> 310 (b'st ') had 2125 occurrences\n",
|
| 173 |
+
"merge 56/256: (97, 258) -> 311 (b'at ') had 2124 occurrences\n",
|
| 174 |
+
"merge 57/256: (65, 110) -> 312 (b'An') had 2105 occurrences\n",
|
| 175 |
+
"merge 58/256: (73, 32) -> 313 (b'I ') had 2092 occurrences\n",
|
| 176 |
+
"merge 59/256: (101, 272) -> 314 (b'ear') had 2081 occurrences\n",
|
| 177 |
+
"merge 60/256: (105, 109) -> 315 (b'im') had 2077 occurrences\n",
|
| 178 |
+
"merge 61/256: (105, 116) -> 316 (b'it') had 2070 occurrences\n",
|
| 179 |
+
"merge 62/256: (111, 111) -> 317 (b'oo') had 2025 occurrences\n",
|
| 180 |
+
"merge 63/256: (103, 104) -> 318 (b'gh') had 1981 occurrences\n",
|
| 181 |
+
"merge 64/256: (97, 116) -> 319 (b'at') had 1977 occurrences\n",
|
| 182 |
+
"merge 65/256: (105, 115) -> 320 (b'is') had 1941 occurrences\n",
|
| 183 |
+
"merge 66/256: (108, 101) -> 321 (b'le') had 1896 occurrences\n",
|
| 184 |
+
"merge 67/256: (263, 32) -> 322 (b'er ') had 1847 occurrences\n",
|
| 185 |
+
"merge 68/256: (262, 114) -> 323 (b'our') had 1816 occurrences\n",
|
| 186 |
+
"merge 69/256: (312, 260) -> 324 (b'And ') had 1801 occurrences\n",
|
| 187 |
+
"merge 70/256: (39, 259) -> 325 (b\"'s \") had 1767 occurrences\n",
|
| 188 |
+
"merge 71/256: (101, 101) -> 326 (b'ee') had 1763 occurrences\n",
|
| 189 |
+
"merge 72/256: (298, 258) -> 327 (b'not ') had 1749 occurrences\n",
|
| 190 |
+
"merge 73/256: (109, 265) -> 328 (b'my ') had 1725 occurrences\n",
|
| 191 |
+
"merge 74/256: (59, 10) -> 329 (b';\\n') had 1688 occurrences\n",
|
| 192 |
+
"merge 75/256: (114, 97) -> 330 (b'ra') had 1667 occurrences\n",
|
| 193 |
+
"merge 76/256: (46, 10) -> 331 (b'.\\n') had 1658 occurrences\n",
|
| 194 |
+
"merge 77/256: (281, 114) -> 332 (b'your') had 1634 occurrences\n",
|
| 195 |
+
"merge 78/256: (117, 114) -> 333 (b'ur') had 1632 occurrences\n",
|
| 196 |
+
"merge 79/256: (276, 258) -> 334 (b'hat ') had 1562 occurrences\n",
|
| 197 |
+
"merge 80/256: (114, 105) -> 335 (b'ri') had 1560 occurrences\n",
|
| 198 |
+
"merge 81/256: (117, 258) -> 336 (b'ut ') had 1555 occurrences\n",
|
| 199 |
+
"merge 82/256: (108, 260) -> 337 (b'ld ') had 1545 occurrences\n",
|
| 200 |
+
"merge 83/256: (289, 32) -> 338 (b'of ') had 1494 occurrences\n",
|
| 201 |
+
"merge 84/256: (79, 267) -> 339 (b'O:\\n') had 1494 occurrences\n",
|
| 202 |
+
"merge 85/256: (101, 260) -> 340 (b'ed ') had 1479 occurrences\n",
|
| 203 |
+
"merge 86/256: (108, 97) -> 341 (b'la') had 1460 occurrences\n",
|
| 204 |
+
"merge 87/256: (105, 258) -> 342 (b'it ') had 1444 occurrences\n",
|
| 205 |
+
"merge 88/256: (114, 111) -> 343 (b'ro') had 1434 occurrences\n",
|
| 206 |
+
"merge 89/256: (263, 256) -> 344 (b'ere ') had 1397 occurrences\n",
|
| 207 |
+
"merge 90/256: (101, 259) -> 345 (b'es ') had 1385 occurrences\n",
|
| 208 |
+
"merge 91/256: (100, 261) -> 346 (b'd, ') had 1381 occurrences\n",
|
| 209 |
+
"merge 92/256: (117, 110) -> 347 (b'un') had 1374 occurrences\n",
|
| 210 |
+
"merge 93/256: (69, 78) -> 348 (b'EN') had 1373 occurrences\n",
|
| 211 |
+
"merge 94/256: (107, 256) -> 349 (b'ke ') had 1367 occurrences\n",
|
| 212 |
+
"merge 95/256: (121, 261) -> 350 (b'y, ') had 1339 occurrences\n",
|
| 213 |
+
"merge 96/256: (73, 78) -> 351 (b'IN') had 1313 occurrences\n",
|
| 214 |
+
"merge 97/256: (32, 100) -> 352 (b' d') had 1295 occurrences\n",
|
| 215 |
+
"merge 98/256: (63, 271) -> 353 (b'?\\n\\n') had 1294 occurrences\n",
|
| 216 |
+
"merge 99/256: (97, 259) -> 354 (b'as ') had 1294 occurrences\n",
|
| 217 |
+
"merge 100/256: (102, 97) -> 355 (b'fa') had 1267 occurrences\n",
|
| 218 |
+
"merge 101/256: (119, 303) -> 356 (b'with') had 1258 occurrences\n",
|
| 219 |
+
"merge 102/256: (276, 301) -> 357 (b'have ') had 1240 occurrences\n",
|
| 220 |
+
"merge 103/256: (83, 267) -> 358 (b'S:\\n') had 1230 occurrences\n",
|
| 221 |
+
"merge 104/256: (32, 99) -> 359 (b' c') had 1228 occurrences\n",
|
| 222 |
+
"merge 105/256: (87, 104) -> 360 (b'Wh') had 1226 occurrences\n",
|
| 223 |
+
"merge 106/256: (257, 311) -> 361 (b'that ') had 1222 occurrences\n",
|
| 224 |
+
"merge 107/256: (270, 116) -> 362 (b'ent') had 1221 occurrences\n",
|
| 225 |
+
"merge 108/256: (257, 101) -> 363 (b'the') had 1213 occurrences\n",
|
| 226 |
+
"merge 109/256: (99, 101) -> 364 (b'ce') had 1206 occurrences\n",
|
| 227 |
+
"merge 110/256: (115, 104) -> 365 (b'sh') had 1195 occurrences\n",
|
| 228 |
+
"merge 111/256: (109, 97) -> 366 (b'ma') had 1173 occurrences\n",
|
| 229 |
+
"merge 112/256: (32, 112) -> 367 (b' p') had 1167 occurrences\n",
|
| 230 |
+
"merge 113/256: (257, 263) -> 368 (b'ther') had 1133 occurrences\n",
|
| 231 |
+
"merge 114/256: (98, 101) -> 369 (b'be') had 1131 occurrences\n",
|
| 232 |
+
"merge 115/256: (46, 32) -> 370 (b'. ') had 1127 occurrences\n",
|
| 233 |
+
"merge 116/256: (65, 82) -> 371 (b'AR') had 1124 occurrences\n",
|
| 234 |
+
"merge 117/256: (99, 256) -> 372 (b'ce ') had 1116 occurrences\n",
|
| 235 |
+
"merge 118/256: (291, 32) -> 373 (b'ing ') had 1113 occurrences\n",
|
| 236 |
+
"merge 119/256: (97, 108) -> 374 (b'al') had 1098 occurrences\n",
|
| 237 |
+
"merge 120/256: (59, 32) -> 375 (b'; ') had 1091 occurrences\n",
|
| 238 |
+
"merge 121/256: (257, 262) -> 376 (b'thou') had 1088 occurrences\n",
|
| 239 |
+
"merge 122/256: (115, 261) -> 377 (b's, ') had 1086 occurrences\n",
|
| 240 |
+
"merge 123/256: (109, 256) -> 378 (b'me ') had 1081 occurrences\n",
|
| 241 |
+
"merge 124/256: (115, 256) -> 379 (b'se ') had 1078 occurrences\n",
|
| 242 |
+
"merge 125/256: (108, 111) -> 380 (b'lo') had 1077 occurrences\n",
|
| 243 |
+
"merge 126/256: (99, 107) -> 381 (b'ck') had 1061 occurrences\n",
|
| 244 |
+
"merge 127/256: (119, 104) -> 382 (b'wh') had 1057 occurrences\n",
|
| 245 |
+
"merge 128/256: (105, 108) -> 383 (b'il') had 1046 occurrences\n",
|
| 246 |
+
"merge 129/256: (39, 260) -> 384 (b\"'d \") had 1026 occurrences\n",
|
| 247 |
+
"merge 130/256: (73, 339) -> 385 (b'IO:\\n') had 1025 occurrences\n",
|
| 248 |
+
"merge 131/256: (110, 285) -> 386 (b'now') had 1022 occurrences\n",
|
| 249 |
+
"merge 132/256: (105, 275) -> 387 (b'ill') had 1016 occurrences\n",
|
| 250 |
+
"merge 133/256: (98, 256) -> 388 (b'be ') had 982 occurrences\n",
|
| 251 |
+
"merge 134/256: (101, 275) -> 389 (b'ell') had 982 occurrences\n",
|
| 252 |
+
"merge 135/256: (114, 286) -> 390 (b'rea') had 978 occurrences\n",
|
| 253 |
+
"merge 136/256: (32, 116) -> 391 (b' t') had 972 occurrences\n",
|
| 254 |
+
"merge 137/256: (116, 261) -> 392 (b't, ') had 971 occurrences\n",
|
| 255 |
+
"merge 138/256: (262, 337) -> 393 (b'ould ') had 970 occurrences\n",
|
| 256 |
+
"merge 139/256: (101, 10) -> 394 (b'e\\n') had 962 occurrences\n",
|
| 257 |
+
"merge 140/256: (287, 265) -> 395 (b' my ') had 959 occurrences\n",
|
| 258 |
+
"merge 141/256: (118, 263) -> 396 (b'ver') had 955 occurrences\n",
|
| 259 |
+
"merge 142/256: (99, 292) -> 397 (b'com') had 952 occurrences\n",
|
| 260 |
+
"merge 143/256: (104, 256) -> 398 (b'he ') had 929 occurrences\n",
|
| 261 |
+
"merge 144/256: (32, 283) -> 399 (b' to ') had 926 occurrences\n",
|
| 262 |
+
"merge 145/256: (32, 73) -> 400 (b' I') had 906 occurrences\n",
|
| 263 |
+
"merge 146/256: (101, 108) -> 401 (b'el') had 902 occurrences\n",
|
| 264 |
+
"merge 147/256: (85, 358) -> 402 (b'US:\\n') had 879 occurrences\n",
|
| 265 |
+
"merge 148/256: (111, 108) -> 403 (b'ol') had 871 occurrences\n",
|
| 266 |
+
"merge 149/256: (100, 105) -> 404 (b'di') had 869 occurrences\n",
|
| 267 |
+
"merge 150/256: (32, 103) -> 405 (b' g') had 864 occurrences\n",
|
| 268 |
+
"merge 151/256: (97, 265) -> 406 (b'ay ') had 849 occurrences\n",
|
| 269 |
+
"merge 152/256: (116, 263) -> 407 (b'ter') had 849 occurrences\n",
|
| 270 |
+
"merge 153/256: (97, 264) -> 408 (b'ain') had 844 occurrences\n",
|
| 271 |
+
"merge 154/256: (32, 281) -> 409 (b' you') had 844 occurrences\n",
|
| 272 |
+
"merge 155/256: (307, 256) -> 410 (b'The ') had 843 occurrences\n",
|
| 273 |
+
"merge 156/256: (108, 256) -> 411 (b'le ') had 839 occurrences\n",
|
| 274 |
+
"merge 157/256: (105, 274) -> 412 (b'ion') had 838 occurrences\n",
|
| 275 |
+
"merge 158/256: (32, 102) -> 413 (b' f') had 826 occurrences\n",
|
| 276 |
+
"merge 159/256: (114, 117) -> 414 (b'ru') had 819 occurrences\n",
|
| 277 |
+
"merge 160/256: (105, 102) -> 415 (b'if') had 817 occurrences\n",
|
| 278 |
+
"merge 161/256: (101, 109) -> 416 (b'em') had 810 occurrences\n",
|
| 279 |
+
"merge 162/256: (266, 100) -> 417 (b'and') had 801 occurrences\n",
|
| 280 |
+
"merge 163/256: (84, 269) -> 418 (b'To ') had 800 occurrences\n",
|
| 281 |
+
"merge 164/256: (105, 318) -> 419 (b'igh') had 798 occurrences\n",
|
| 282 |
+
"merge 165/256: (272, 256) -> 420 (b'are ') had 796 occurrences\n",
|
| 283 |
+
"merge 166/256: (117, 112) -> 421 (b'up') had 779 occurrences\n",
|
| 284 |
+
"merge 167/256: (277, 324) -> 422 (b',\\nAnd ') had 774 occurrences\n",
|
| 285 |
+
"merge 168/256: (104, 315) -> 423 (b'him') had 761 occurrences\n",
|
| 286 |
+
"merge 169/256: (101, 100) -> 424 (b'ed') had 751 occurrences\n",
|
| 287 |
+
"merge 170/256: (105, 308) -> 425 (b'ill ') had 743 occurrences\n",
|
| 288 |
+
"merge 171/256: (268, 100) -> 426 (b'ord') had 736 occurrences\n",
|
| 289 |
+
"merge 172/256: (105, 294) -> 427 (b'ich') had 733 occurrences\n",
|
| 290 |
+
"merge 173/256: (108, 265) -> 428 (b'ly ') had 732 occurrences\n",
|
| 291 |
+
"merge 174/256: (317, 260) -> 429 (b'ood ') had 726 occurrences\n",
|
| 292 |
+
"merge 175/256: (85, 67) -> 430 (b'UC') had 725 occurrences\n",
|
| 293 |
+
"merge 176/256: (285, 110) -> 431 (b'own') had 717 occurrences\n",
|
| 294 |
+
"merge 177/256: (104, 279) -> 432 (b'his ') had 706 occurrences\n",
|
| 295 |
+
"merge 178/256: (351, 71) -> 433 (b'ING') had 703 occurrences\n",
|
| 296 |
+
"merge 179/256: (32, 284) -> 434 (b' and ') had 701 occurrences\n",
|
| 297 |
+
"merge 180/256: (99, 274) -> 435 (b'con') had 700 occurrences\n",
|
| 298 |
+
"merge 181/256: (110, 101) -> 436 (b'ne') had 699 occurrences\n",
|
| 299 |
+
"merge 182/256: (97, 121) -> 437 (b'ay') had 697 occurrences\n",
|
| 300 |
+
"merge 183/256: (101, 278) -> 438 (b'e.\\n\\n') had 693 occurrences\n",
|
| 301 |
+
"merge 184/256: (114, 292) -> 439 (b'rom') had 690 occurrences\n",
|
| 302 |
+
"merge 185/256: (105, 100) -> 440 (b'id') had 681 occurrences\n",
|
| 303 |
+
"merge 186/256: (117, 115) -> 441 (b'us') had 679 occurrences\n",
|
| 304 |
+
"merge 187/256: (262, 110) -> 442 (b'oun') had 677 occurrences\n",
|
| 305 |
+
"merge 188/256: (65, 78) -> 443 (b'AN') had 677 occurrences\n",
|
| 306 |
+
"merge 189/256: (109, 266) -> 444 (b'man') had 675 occurrences\n",
|
| 307 |
+
"merge 190/256: (97, 103) -> 445 (b'ag') had 669 occurrences\n",
|
| 308 |
+
"merge 191/256: (69, 82) -> 446 (b'ER') had 665 occurrences\n",
|
| 309 |
+
"merge 192/256: (79, 82) -> 447 (b'OR') had 663 occurrences\n",
|
| 310 |
+
"merge 193/256: (101, 258) -> 448 (b'et ') had 657 occurrences\n",
|
| 311 |
+
"merge 194/256: (114, 280) -> 449 (b'res') had 655 occurrences\n",
|
| 312 |
+
"merge 195/256: (305, 108) -> 450 (b'sel') had 649 occurrences\n",
|
| 313 |
+
"merge 196/256: (290, 279) -> 451 (b' his ') had 647 occurrences\n",
|
| 314 |
+
"merge 197/256: (101, 277) -> 452 (b'e,\\n') had 646 occurrences\n",
|
| 315 |
+
"merge 198/256: (101, 116) -> 453 (b'et') had 643 occurrences\n",
|
| 316 |
+
"merge 199/256: (99, 97) -> 454 (b'ca') had 642 occurrences\n",
|
| 317 |
+
"merge 200/256: (32, 264) -> 455 (b' in') had 641 occurrences\n",
|
| 318 |
+
"merge 201/256: (115, 276) -> 456 (b'sha') had 636 occurrences\n",
|
| 319 |
+
"merge 202/256: (33, 10) -> 457 (b'!\\n') had 635 occurrences\n",
|
| 320 |
+
"merge 203/256: (69, 84) -> 458 (b'ET') had 628 occurrences\n",
|
| 321 |
+
"merge 204/256: (84, 334) -> 459 (b'That ') had 615 occurrences\n",
|
| 322 |
+
"merge 205/256: (112, 111) -> 460 (b'po') had 611 occurrences\n",
|
| 323 |
+
"merge 206/256: (113, 117) -> 461 (b'qu') had 609 occurrences\n",
|
| 324 |
+
"merge 207/256: (257, 265) -> 462 (b'thy ') had 596 occurrences\n",
|
| 325 |
+
"merge 208/256: (33, 271) -> 463 (b'!\\n\\n') had 594 occurrences\n",
|
| 326 |
+
"merge 209/256: (109, 268) -> 464 (b'mor') had 584 occurrences\n",
|
| 327 |
+
"merge 210/256: (117, 108) -> 465 (b'ul') had 581 occurrences\n",
|
| 328 |
+
"merge 211/256: (110, 269) -> 466 (b'no ') had 579 occurrences\n",
|
| 329 |
+
"merge 212/256: (97, 109) -> 467 (b'am') had 577 occurrences\n",
|
| 330 |
+
"merge 213/256: (273, 101) -> 468 (b' the') had 572 occurrences\n",
|
| 331 |
+
"merge 214/256: (65, 267) -> 469 (b'A:\\n') had 570 occurrences\n",
|
| 332 |
+
"merge 215/256: (118, 270) -> 470 (b'ven') had 569 occurrences\n",
|
| 333 |
+
"merge 216/256: (98, 265) -> 471 (b'by ') had 566 occurrences\n",
|
| 334 |
+
"merge 217/256: (115, 10) -> 472 (b's\\n') had 560 occurrences\n",
|
| 335 |
+
"merge 218/256: (115, 112) -> 473 (b'sp') had 556 occurrences\n",
|
| 336 |
+
"merge 219/256: (75, 433) -> 474 (b'KING') had 556 occurrences\n",
|
| 337 |
+
"merge 220/256: (290, 315) -> 475 (b' him') had 553 occurrences\n",
|
| 338 |
+
"merge 221/256: (257, 279) -> 476 (b'this ') had 552 occurrences\n",
|
| 339 |
+
"merge 222/256: (273, 279) -> 477 (b' this ') had 552 occurrences\n",
|
| 340 |
+
"merge 223/256: (104, 263) -> 478 (b'her') had 552 occurrences\n",
|
| 341 |
+
"merge 224/256: (273, 311) -> 479 (b' that ') had 542 occurrences\n",
|
| 342 |
+
"merge 225/256: (111, 257) -> 480 (b'oth') had 539 occurrences\n",
|
| 343 |
+
"merge 226/256: (63, 10) -> 481 (b'?\\n') had 539 occurrences\n",
|
| 344 |
+
"merge 227/256: (274, 103) -> 482 (b'ong') had 537 occurrences\n",
|
| 345 |
+
"merge 228/256: (66, 336) -> 483 (b'But ') had 536 occurrences\n",
|
| 346 |
+
"merge 229/256: (280, 258) -> 484 (b'est ') had 532 occurrences\n",
|
| 347 |
+
"merge 230/256: (111, 261) -> 485 (b'o, ') had 528 occurrences\n",
|
| 348 |
+
"merge 231/256: (98, 336) -> 486 (b'but ') had 526 occurrences\n",
|
| 349 |
+
"merge 232/256: (32, 289) -> 487 (b' of') had 525 occurrences\n",
|
| 350 |
+
"merge 233/256: (70, 268) -> 488 (b'For') had 522 occurrences\n",
|
| 351 |
+
"merge 234/256: (115, 117) -> 489 (b'su') had 521 occurrences\n",
|
| 352 |
+
"merge 235/256: (288, 303) -> 490 (b' with') had 517 occurrences\n",
|
| 353 |
+
"merge 236/256: (117, 116) -> 491 (b'ut') had 517 occurrences\n",
|
| 354 |
+
"merge 237/256: (274, 256) -> 492 (b'one ') had 514 occurrences\n",
|
| 355 |
+
"merge 238/256: (97, 275) -> 493 (b'all') had 512 occurrences\n",
|
| 356 |
+
"merge 239/256: (73, 67) -> 494 (b'IC') had 509 occurrences\n",
|
| 357 |
+
"merge 240/256: (270, 100) -> 495 (b'end') had 500 occurrences\n",
|
| 358 |
+
"merge 241/256: (79, 76) -> 496 (b'OL') had 497 occurrences\n",
|
| 359 |
+
"merge 242/256: (100, 269) -> 497 (b'do ') had 495 occurrences\n",
|
| 360 |
+
"merge 243/256: (73, 288) -> 498 (b'I w') had 495 occurrences\n",
|
| 361 |
+
"merge 244/256: (292, 256) -> 499 (b'ome ') had 494 occurrences\n",
|
| 362 |
+
"merge 245/256: (107, 386) -> 500 (b'know') had 493 occurrences\n",
|
| 363 |
+
"merge 246/256: (115, 277) -> 501 (b's,\\n') had 493 occurrences\n",
|
| 364 |
+
"merge 247/256: (115, 299) -> 502 (b'sir') had 493 occurrences\n",
|
| 365 |
+
"merge 248/256: (261, 284) -> 503 (b', and ') had 490 occurrences\n",
|
| 366 |
+
"merge 249/256: (99, 116) -> 504 (b'ct') had 490 occurrences\n",
|
| 367 |
+
"merge 250/256: (117, 259) -> 505 (b'us ') had 489 occurrences\n",
|
| 368 |
+
"merge 251/256: (280, 259) -> 506 (b'ess ') had 486 occurrences\n",
|
| 369 |
+
"merge 252/256: (450, 102) -> 507 (b'self') had 486 occurrences\n",
|
| 370 |
+
"merge 253/256: (282, 116) -> 508 (b' st') had 486 occurrences\n",
|
| 371 |
+
"merge 254/256: (97, 349) -> 509 (b'ake ') had 481 occurrences\n",
|
| 372 |
+
"merge 255/256: (69, 76) -> 510 (b'EL') had 481 occurrences\n",
|
| 373 |
+
"merge 256/256: (107, 291) -> 511 (b'king') had 479 occurrences\n"
|
| 374 |
+
]
|
| 375 |
+
}
|
| 376 |
+
],
|
| 377 |
+
"source": [
|
| 378 |
+
"basic_tokenizer = BasicTokenizer()\n",
|
| 379 |
+
"basic_tokenizer.train(text, vocab_size=512, verbose=True)"
|
| 380 |
+
]
|
| 381 |
+
},
|
| 382 |
+
{
|
| 383 |
+
"cell_type": "code",
|
| 384 |
+
"execution_count": 11,
|
| 385 |
+
"metadata": {},
|
| 386 |
+
"outputs": [],
|
| 387 |
+
"source": [
|
| 388 |
+
"prefix = os.path.join(model_path, \"shakespeare_basic\")\n",
|
| 389 |
+
"basic_tokenizer.save(prefix)"
|
| 390 |
+
]
|
| 391 |
+
},
|
| 392 |
+
{
|
| 393 |
+
"cell_type": "markdown",
|
| 394 |
+
"metadata": {},
|
| 395 |
+
"source": [
|
| 396 |
+
"Regex tokenizer"
|
| 397 |
+
]
|
| 398 |
+
},
|
| 399 |
+
{
|
| 400 |
+
"cell_type": "code",
|
| 401 |
+
"execution_count": 12,
|
| 402 |
+
"metadata": {},
|
| 403 |
+
"outputs": [
|
| 404 |
+
{
|
| 405 |
+
"name": "stdout",
|
| 406 |
+
"output_type": "stream",
|
| 407 |
+
"text": [
|
| 408 |
+
"merge 1/256: (32, 116) -> 256 (b' t') had 23837 occurrences\n",
|
| 409 |
+
"merge 2/256: (104, 101) -> 257 (b'he') had 18203 occurrences\n",
|
| 410 |
+
"merge 3/256: (32, 97) -> 258 (b' a') had 13541 occurrences\n",
|
| 411 |
+
"merge 4/256: (111, 117) -> 259 (b'ou') had 12730 occurrences\n",
|
| 412 |
+
"merge 5/256: (32, 115) -> 260 (b' s') had 12287 occurrences\n",
|
| 413 |
+
"merge 6/256: (32, 109) -> 261 (b' m') had 10786 occurrences\n",
|
| 414 |
+
"merge 7/256: (105, 110) -> 262 (b'in') had 10606 occurrences\n",
|
| 415 |
+
"merge 8/256: (32, 119) -> 263 (b' w') had 10546 occurrences\n",
|
| 416 |
+
"merge 9/256: (114, 101) -> 264 (b're') had 9843 occurrences\n",
|
| 417 |
+
"merge 10/256: (104, 97) -> 265 (b'ha') had 9673 occurrences\n",
|
| 418 |
+
"merge 11/256: (58, 10) -> 266 (b':\\n') had 8762 occurrences\n",
|
| 419 |
+
"merge 12/256: (110, 100) -> 267 (b'nd') had 8730 occurrences\n",
|
| 420 |
+
"merge 13/256: (256, 257) -> 268 (b' the') had 8684 occurrences\n",
|
| 421 |
+
"merge 14/256: (32, 98) -> 269 (b' b') had 8463 occurrences\n",
|
| 422 |
+
"merge 15/256: (105, 115) -> 270 (b'is') had 7526 occurrences\n",
|
| 423 |
+
"merge 16/256: (111, 114) -> 271 (b'or') had 7297 occurrences\n",
|
| 424 |
+
"merge 17/256: (10, 10) -> 272 (b'\\n\\n') had 7098 occurrences\n",
|
| 425 |
+
"merge 18/256: (32, 102) -> 273 (b' f') had 6563 occurrences\n",
|
| 426 |
+
"merge 19/256: (101, 114) -> 274 (b'er') had 6515 occurrences\n",
|
| 427 |
+
"merge 20/256: (108, 108) -> 275 (b'll') had 6357 occurrences\n",
|
| 428 |
+
"merge 21/256: (105, 116) -> 276 (b'it') had 6114 occurrences\n",
|
| 429 |
+
"merge 22/256: (111, 110) -> 277 (b'on') had 5973 occurrences\n",
|
| 430 |
+
"merge 23/256: (44, 10) -> 278 (b',\\n') had 5501 occurrences\n",
|
| 431 |
+
"merge 24/256: (32, 100) -> 279 (b' d') had 5478 occurrences\n",
|
| 432 |
+
"merge 25/256: (32, 99) -> 280 (b' c') had 5404 occurrences\n",
|
| 433 |
+
"merge 26/256: (101, 115) -> 281 (b'es') had 5202 occurrences\n",
|
| 434 |
+
"merge 27/256: (101, 110) -> 282 (b'en') had 5181 occurrences\n",
|
| 435 |
+
"merge 28/256: (32, 110) -> 283 (b' n') had 5176 occurrences\n",
|
| 436 |
+
"merge 29/256: (32, 108) -> 284 (b' l') had 5173 occurrences\n",
|
| 437 |
+
"merge 30/256: (32, 121) -> 285 (b' y') had 5140 occurrences\n",
|
| 438 |
+
"merge 31/256: (46, 272) -> 286 (b'.\\n\\n') had 5018 occurrences\n",
|
| 439 |
+
"merge 32/256: (256, 104) -> 287 (b' th') had 4940 occurrences\n",
|
| 440 |
+
"merge 33/256: (97, 114) -> 288 (b'ar') had 4884 occurrences\n",
|
| 441 |
+
"merge 34/256: (32, 104) -> 289 (b' h') had 4702 occurrences\n",
|
| 442 |
+
"merge 35/256: (32, 111) -> 290 (b' o') had 4693 occurrences\n",
|
| 443 |
+
"merge 36/256: (256, 111) -> 291 (b' to') had 4666 occurrences\n",
|
| 444 |
+
"merge 37/256: (285, 259) -> 292 (b' you') had 4587 occurrences\n",
|
| 445 |
+
"merge 38/256: (32, 112) -> 293 (b' p') had 4490 occurrences\n",
|
| 446 |
+
"merge 39/256: (265, 116) -> 294 (b'hat') had 4407 occurrences\n",
|
| 447 |
+
"merge 40/256: (32, 73) -> 295 (b' I') had 4079 occurrences\n",
|
| 448 |
+
"merge 41/256: (32, 257) -> 296 (b' he') had 4022 occurrences\n",
|
| 449 |
+
"merge 42/256: (118, 101) -> 297 (b've') had 3900 occurrences\n",
|
| 450 |
+
"merge 43/256: (111, 116) -> 298 (b'ot') had 3891 occurrences\n",
|
| 451 |
+
"merge 44/256: (115, 116) -> 299 (b'st') had 3709 occurrences\n",
|
| 452 |
+
"merge 45/256: (258, 267) -> 300 (b' and') had 3703 occurrences\n",
|
| 453 |
+
"merge 46/256: (111, 119) -> 301 (b'ow') had 3686 occurrences\n",
|
| 454 |
+
"merge 47/256: (262, 103) -> 302 (b'ing') had 3660 occurrences\n",
|
| 455 |
+
"merge 48/256: (97, 110) -> 303 (b'an') had 3635 occurrences\n",
|
| 456 |
+
"merge 49/256: (290, 102) -> 304 (b' of') had 3605 occurrences\n",
|
| 457 |
+
"merge 50/256: (111, 109) -> 305 (b'om') had 3584 occurrences\n",
|
| 458 |
+
"merge 51/256: (32, 103) -> 306 (b' g') had 3512 occurrences\n",
|
| 459 |
+
"merge 52/256: (97, 116) -> 307 (b'at') had 3357 occurrences\n",
|
| 460 |
+
"merge 53/256: (269, 101) -> 308 (b' be') had 3219 occurrences\n",
|
| 461 |
+
"merge 54/256: (115, 101) -> 309 (b'se') had 3065 occurrences\n",
|
| 462 |
+
"merge 55/256: (261, 121) -> 310 (b' my') had 2829 occurrences\n",
|
| 463 |
+
"merge 56/256: (32, 262) -> 311 (b' in') had 2746 occurrences\n",
|
| 464 |
+
"merge 57/256: (99, 101) -> 312 (b'ce') had 2740 occurrences\n",
|
| 465 |
+
"merge 58/256: (32, 265) -> 313 (b' ha') had 2713 occurrences\n",
|
| 466 |
+
"merge 59/256: (108, 101) -> 314 (b'le') had 2636 occurrences\n",
|
| 467 |
+
"merge 60/256: (97, 121) -> 315 (b'ay') had 2568 occurrences\n",
|
| 468 |
+
"merge 61/256: (108, 100) -> 316 (b'ld') had 2392 occurrences\n",
|
| 469 |
+
"merge 62/256: (105, 114) -> 317 (b'ir') had 2385 occurrences\n",
|
| 470 |
+
"merge 63/256: (101, 116) -> 318 (b'et') had 2375 occurrences\n",
|
| 471 |
+
"merge 64/256: (101, 100) -> 319 (b'ed') had 2344 occurrences\n",
|
| 472 |
+
"merge 65/256: (117, 116) -> 320 (b'ut') had 2304 occurrences\n",
|
| 473 |
+
"merge 66/256: (261, 101) -> 321 (b' me') had 2132 occurrences\n",
|
| 474 |
+
"merge 67/256: (105, 109) -> 322 (b'im') had 2125 occurrences\n",
|
| 475 |
+
"merge 68/256: (276, 104) -> 323 (b'ith') had 2089 occurrences\n",
|
| 476 |
+
"merge 69/256: (39, 115) -> 324 (b\"'s\") had 2063 occurrences\n",
|
| 477 |
+
"merge 70/256: (283, 298) -> 325 (b' not') had 2048 occurrences\n",
|
| 478 |
+
"merge 71/256: (99, 104) -> 326 (b'ch') had 2016 occurrences\n",
|
| 479 |
+
"merge 72/256: (256, 294) -> 327 (b' that') had 1962 occurrences\n",
|
| 480 |
+
"merge 73/256: (32, 270) -> 328 (b' is') had 1955 occurrences\n",
|
| 481 |
+
"merge 74/256: (103, 104) -> 329 (b'gh') had 1947 occurrences\n",
|
| 482 |
+
"merge 75/256: (65, 267) -> 330 (b'And') had 1927 occurrences\n",
|
| 483 |
+
"merge 76/256: (273, 271) -> 331 (b' for') had 1890 occurrences\n",
|
| 484 |
+
"merge 77/256: (107, 101) -> 332 (b'ke') had 1864 occurrences\n",
|
| 485 |
+
"merge 78/256: (32, 117) -> 333 (b' u') had 1850 occurrences\n",
|
| 486 |
+
"merge 79/256: (259, 114) -> 334 (b'our') had 1837 occurrences\n",
|
| 487 |
+
"merge 80/256: (263, 101) -> 335 (b' we') had 1816 occurrences\n",
|
| 488 |
+
"merge 81/256: (111, 111) -> 336 (b'oo') had 1800 occurrences\n",
|
| 489 |
+
"merge 82/256: (105, 275) -> 337 (b'ill') had 1763 occurrences\n",
|
| 490 |
+
"merge 83/256: (32, 101) -> 338 (b' e') had 1733 occurrences\n",
|
| 491 |
+
"merge 84/256: (257, 114) -> 339 (b'her') had 1710 occurrences\n",
|
| 492 |
+
"merge 85/256: (59, 10) -> 340 (b';\\n') had 1688 occurrences\n",
|
| 493 |
+
"merge 86/256: (263, 323) -> 341 (b' with') had 1676 occurrences\n",
|
| 494 |
+
"merge 87/256: (46, 10) -> 342 (b'.\\n') had 1658 occurrences\n",
|
| 495 |
+
"merge 88/256: (282, 116) -> 343 (b'ent') had 1638 occurrences\n",
|
| 496 |
+
"merge 89/256: (32, 276) -> 344 (b' it') had 1627 occurrences\n",
|
| 497 |
+
"merge 90/256: (292, 114) -> 345 (b' your') had 1610 occurrences\n",
|
| 498 |
+
"merge 91/256: (97, 100) -> 346 (b'ad') had 1598 occurrences\n",
|
| 499 |
+
"merge 92/256: (114, 105) -> 347 (b'ri') had 1545 occurrences\n",
|
| 500 |
+
"merge 93/256: (287, 259) -> 348 (b' thou') had 1496 occurrences\n",
|
| 501 |
+
"merge 94/256: (260, 116) -> 349 (b' st') had 1478 occurrences\n",
|
| 502 |
+
"merge 95/256: (39, 100) -> 350 (b\"'d\") had 1451 occurrences\n",
|
| 503 |
+
"merge 96/256: (32, 107) -> 351 (b' k') had 1438 occurrences\n",
|
| 504 |
+
"merge 97/256: (305, 101) -> 352 (b'ome') had 1436 occurrences\n",
|
| 505 |
+
"merge 98/256: (289, 270) -> 353 (b' his') had 1415 occurrences\n",
|
| 506 |
+
"merge 99/256: (329, 116) -> 354 (b'ght') had 1379 occurrences\n",
|
| 507 |
+
"merge 100/256: (69, 78) -> 355 (b'EN') had 1373 occurrences\n",
|
| 508 |
+
"merge 101/256: (271, 100) -> 356 (b'ord') had 1353 occurrences\n",
|
| 509 |
+
"merge 102/256: (105, 100) -> 357 (b'id') had 1350 occurrences\n",
|
| 510 |
+
"merge 103/256: (97, 115) -> 358 (b'as') had 1347 occurrences\n",
|
| 511 |
+
"merge 104/256: (84, 257) -> 359 (b'The') had 1345 occurrences\n",
|
| 512 |
+
"merge 105/256: (32, 264) -> 360 (b' re') had 1330 occurrences\n",
|
| 513 |
+
"merge 106/256: (313, 297) -> 361 (b' have') had 1325 occurrences\n",
|
| 514 |
+
"merge 107/256: (73, 78) -> 362 (b'IN') had 1313 occurrences\n",
|
| 515 |
+
"merge 108/256: (108, 121) -> 363 (b'ly') had 1312 occurrences\n",
|
| 516 |
+
"merge 109/256: (114, 97) -> 364 (b'ra') had 1303 occurrences\n",
|
| 517 |
+
"merge 110/256: (284, 105) -> 365 (b' li') had 1299 occurrences\n",
|
| 518 |
+
"merge 111/256: (63, 272) -> 366 (b'?\\n\\n') had 1294 occurrences\n",
|
| 519 |
+
"merge 112/256: (289, 322) -> 367 (b' him') had 1293 occurrences\n",
|
| 520 |
+
"merge 113/256: (117, 114) -> 368 (b'ur') had 1263 occurrences\n",
|
| 521 |
+
"merge 114/256: (287, 270) -> 369 (b' this') had 1261 occurrences\n",
|
| 522 |
+
"merge 115/256: (97, 108) -> 370 (b'al') had 1256 occurrences\n",
|
| 523 |
+
"merge 116/256: (73, 79) -> 371 (b'IO') had 1254 occurrences\n",
|
| 524 |
+
"merge 117/256: (260, 111) -> 372 (b' so') had 1238 occurrences\n",
|
| 525 |
+
"merge 118/256: (258, 115) -> 373 (b' as') had 1209 occurrences\n",
|
| 526 |
+
"merge 119/256: (279, 101) -> 374 (b' de') had 1202 occurrences\n",
|
| 527 |
+
"merge 120/256: (32, 277) -> 375 (b' on') had 1178 occurrences\n",
|
| 528 |
+
"merge 121/256: (111, 264) -> 376 (b'ore') had 1147 occurrences\n",
|
| 529 |
+
"merge 122/256: (114, 111) -> 377 (b'ro') had 1127 occurrences\n",
|
| 530 |
+
"merge 123/256: (65, 82) -> 378 (b'AR') had 1124 occurrences\n",
|
| 531 |
+
"merge 124/256: (104, 105) -> 379 (b'hi') had 1120 occurrences\n",
|
| 532 |
+
"merge 125/256: (259, 316) -> 380 (b'ould') had 1098 occurrences\n",
|
| 533 |
+
"merge 126/256: (336, 100) -> 381 (b'ood') had 1092 occurrences\n",
|
| 534 |
+
"merge 127/256: (99, 107) -> 382 (b'ck') had 1056 occurrences\n",
|
| 535 |
+
"merge 128/256: (97, 262) -> 383 (b'ain') had 1051 occurrences\n",
|
| 536 |
+
"merge 129/256: (118, 274) -> 384 (b'ver') had 1042 occurrences\n",
|
| 537 |
+
"merge 130/256: (281, 116) -> 385 (b'est') had 1008 occurrences\n",
|
| 538 |
+
"merge 131/256: (287, 121) -> 386 (b' thy') had 994 occurrences\n",
|
| 539 |
+
"merge 132/256: (260, 265) -> 387 (b' sha') had 993 occurrences\n",
|
| 540 |
+
"merge 133/256: (281, 115) -> 388 (b'ess') had 990 occurrences\n",
|
| 541 |
+
"merge 134/256: (101, 97) -> 389 (b'ea') had 972 occurrences\n",
|
| 542 |
+
"merge 135/256: (279, 111) -> 390 (b' do') had 968 occurrences\n",
|
| 543 |
+
"merge 136/256: (263, 337) -> 391 (b' will') had 966 occurrences\n",
|
| 544 |
+
"merge 137/256: (97, 109) -> 392 (b'am') had 954 occurrences\n",
|
| 545 |
+
"merge 138/256: (283, 111) -> 393 (b' no') had 943 occurrences\n",
|
| 546 |
+
"merge 139/256: (269, 320) -> 394 (b' but') had 912 occurrences\n",
|
| 547 |
+
"merge 140/256: (117, 115) -> 395 (b'us') had 907 occurrences\n",
|
| 548 |
+
"merge 141/256: (97, 267) -> 396 (b'and') had 897 occurrences\n",
|
| 549 |
+
"merge 142/256: (85, 83) -> 397 (b'US') had 895 occurrences\n",
|
| 550 |
+
"merge 143/256: (105, 102) -> 398 (b'if') had 894 occurrences\n",
|
| 551 |
+
"merge 144/256: (260, 101) -> 399 (b' se') had 881 occurrences\n",
|
| 552 |
+
"merge 145/256: (103, 101) -> 400 (b'ge') had 877 occurrences\n",
|
| 553 |
+
"merge 146/256: (258, 275) -> 401 (b' all') had 849 occurrences\n",
|
| 554 |
+
"merge 147/256: (84, 104) -> 402 (b'Th') had 845 occurrences\n",
|
| 555 |
+
"merge 148/256: (260, 117) -> 403 (b' su') had 830 occurrences\n",
|
| 556 |
+
"merge 149/256: (97, 332) -> 404 (b'ake') had 830 occurrences\n",
|
| 557 |
+
"merge 150/256: (84, 111) -> 405 (b'To') had 828 occurrences\n",
|
| 558 |
+
"merge 151/256: (296, 114) -> 406 (b' her') had 811 occurrences\n",
|
| 559 |
+
"merge 152/256: (114, 117) -> 407 (b'ru') had 810 occurrences\n",
|
| 560 |
+
"merge 153/256: (105, 277) -> 408 (b'ion') had 808 occurrences\n",
|
| 561 |
+
"merge 154/256: (116, 104) -> 409 (b'th') had 800 occurrences\n",
|
| 562 |
+
"merge 155/256: (258, 110) -> 410 (b' an') had 789 occurrences\n",
|
| 563 |
+
"merge 156/256: (116, 274) -> 411 (b'ter') had 786 occurrences\n",
|
| 564 |
+
"merge 157/256: (288, 100) -> 412 (b'ard') had 786 occurrences\n",
|
| 565 |
+
"merge 158/256: (284, 111) -> 413 (b' lo') had 782 occurrences\n",
|
| 566 |
+
"merge 159/256: (265, 110) -> 414 (b'han') had 779 occurrences\n",
|
| 567 |
+
"merge 160/256: (101, 275) -> 415 (b'ell') had 771 occurrences\n",
|
| 568 |
+
"merge 161/256: (101, 288) -> 416 (b'ear') had 769 occurrences\n",
|
| 569 |
+
"merge 162/256: (260, 112) -> 417 (b' sp') had 763 occurrences\n",
|
| 570 |
+
"merge 163/256: (268, 101) -> 418 (b' thee') had 751 occurrences\n",
|
| 571 |
+
"merge 164/256: (32, 334) -> 419 (b' our') had 742 occurrences\n",
|
| 572 |
+
"merge 165/256: (273, 97) -> 420 (b' fa') had 740 occurrences\n",
|
| 573 |
+
"merge 166/256: (387, 275) -> 421 (b' shall') had 740 occurrences\n",
|
| 574 |
+
"merge 167/256: (269, 121) -> 422 (b' by') had 739 occurrences\n",
|
| 575 |
+
"merge 168/256: (85, 67) -> 423 (b'UC') had 725 occurrences\n",
|
| 576 |
+
"merge 169/256: (105, 108) -> 424 (b'il') had 709 occurrences\n",
|
| 577 |
+
"merge 170/256: (258, 264) -> 425 (b' are') had 703 occurrences\n",
|
| 578 |
+
"merge 171/256: (362, 71) -> 426 (b'ING') had 703 occurrences\n",
|
| 579 |
+
"merge 172/256: (32, 67) -> 427 (b' C') had 693 occurrences\n",
|
| 580 |
+
"merge 173/256: (283, 101) -> 428 (b' ne') had 690 occurrences\n",
|
| 581 |
+
"merge 174/256: (114, 305) -> 429 (b'rom') had 690 occurrences\n",
|
| 582 |
+
"merge 175/256: (104, 111) -> 430 (b'ho') had 686 occurrences\n",
|
| 583 |
+
"merge 176/256: (351, 110) -> 431 (b' kn') had 683 occurrences\n",
|
| 584 |
+
"merge 177/256: (65, 78) -> 432 (b'AN') had 677 occurrences\n",
|
| 585 |
+
"merge 178/256: (32, 82) -> 433 (b' R') had 675 occurrences\n",
|
| 586 |
+
"merge 179/256: (84, 294) -> 434 (b'That') had 671 occurrences\n",
|
| 587 |
+
"merge 180/256: (32, 118) -> 435 (b' v') had 670 occurrences\n",
|
| 588 |
+
"merge 181/256: (69, 82) -> 436 (b'ER') had 665 occurrences\n",
|
| 589 |
+
"merge 182/256: (97, 299) -> 437 (b'ast') had 663 occurrences\n",
|
| 590 |
+
"merge 183/256: (79, 82) -> 438 (b'OR') had 663 occurrences\n",
|
| 591 |
+
"merge 184/256: (99, 116) -> 439 (b'ct') had 661 occurrences\n",
|
| 592 |
+
"merge 185/256: (259, 115) -> 440 (b'ous') had 661 occurrences\n",
|
| 593 |
+
"merge 186/256: (263, 294) -> 441 (b' what') had 655 occurrences\n",
|
| 594 |
+
"merge 187/256: (105, 354) -> 442 (b'ight') had 642 occurrences\n",
|
| 595 |
+
"merge 188/256: (260, 104) -> 443 (b' sh') had 639 occurrences\n",
|
| 596 |
+
"merge 189/256: (33, 10) -> 444 (b'!\\n') had 635 occurrences\n",
|
| 597 |
+
"merge 190/256: (117, 108) -> 445 (b'ul') had 633 occurrences\n",
|
| 598 |
+
"merge 191/256: (32, 39) -> 446 (b\" '\") had 628 occurrences\n",
|
| 599 |
+
"merge 192/256: (69, 84) -> 447 (b'ET') had 628 occurrences\n",
|
| 600 |
+
"merge 193/256: (303, 116) -> 448 (b'ant') had 627 occurrences\n",
|
| 601 |
+
"merge 194/256: (69, 83) -> 449 (b'ES') had 624 occurrences\n",
|
| 602 |
+
"merge 195/256: (333, 112) -> 450 (b' up') had 616 occurrences\n",
|
| 603 |
+
"merge 196/256: (309, 108) -> 451 (b'sel') had 614 occurrences\n",
|
| 604 |
+
"merge 197/256: (113, 117) -> 452 (b'qu') had 609 occurrences\n",
|
| 605 |
+
"merge 198/256: (66, 320) -> 453 (b'But') had 608 occurrences\n",
|
| 606 |
+
"merge 199/256: (288, 116) -> 454 (b'art') had 607 occurrences\n",
|
| 607 |
+
"merge 200/256: (306, 381) -> 455 (b' good') had 599 occurrences\n",
|
| 608 |
+
"merge 201/256: (33, 272) -> 456 (b'!\\n\\n') had 594 occurrences\n",
|
| 609 |
+
"merge 202/256: (114, 301) -> 457 (b'row') had 592 occurrences\n",
|
| 610 |
+
"merge 203/256: (307, 104) -> 458 (b'ath') had 591 occurrences\n",
|
| 611 |
+
"merge 204/256: (262, 101) -> 459 (b'ine') had 591 occurrences\n",
|
| 612 |
+
"merge 205/256: (284, 356) -> 460 (b' lord') had 589 occurrences\n",
|
| 613 |
+
"merge 206/256: (379, 326) -> 461 (b'hich') had 587 occurrences\n",
|
| 614 |
+
"merge 207/256: (110, 116) -> 462 (b'nt') had 586 occurrences\n",
|
| 615 |
+
"merge 208/256: (117, 299) -> 463 (b'ust') had 585 occurrences\n",
|
| 616 |
+
"merge 209/256: (39, 275) -> 464 (b\"'ll\") had 580 occurrences\n",
|
| 617 |
+
"merge 210/256: (277, 101) -> 465 (b'one') had 578 occurrences\n",
|
| 618 |
+
"merge 211/256: (293, 114) -> 466 (b' pr') had 577 occurrences\n",
|
| 619 |
+
"merge 212/256: (280, 305) -> 467 (b' com') had 575 occurrences\n",
|
| 620 |
+
"merge 213/256: (258, 116) -> 468 (b' at') had 574 occurrences\n",
|
| 621 |
+
"merge 214/256: (261, 303) -> 469 (b' man') had 569 occurrences\n",
|
| 622 |
+
"merge 215/256: (32, 77) -> 470 (b' M') had 567 occurrences\n",
|
| 623 |
+
"merge 216/256: (87, 294) -> 471 (b'What') had 567 occurrences\n",
|
| 624 |
+
"merge 217/256: (263, 257) -> 472 (b' whe') had 563 occurrences\n",
|
| 625 |
+
"merge 218/256: (32, 69) -> 473 (b' E') had 559 occurrences\n",
|
| 626 |
+
"merge 219/256: (75, 426) -> 474 (b'KING') had 556 occurrences\n",
|
| 627 |
+
"merge 220/256: (258, 109) -> 475 (b' am') had 554 occurrences\n",
|
| 628 |
+
"merge 221/256: (101, 267) -> 476 (b'end') had 553 occurrences\n",
|
| 629 |
+
"merge 222/256: (105, 99) -> 477 (b'ic') had 548 occurrences\n",
|
| 630 |
+
"merge 223/256: (280, 277) -> 478 (b' con') had 548 occurrences\n",
|
| 631 |
+
"merge 224/256: (98, 314) -> 479 (b'ble') had 545 occurrences\n",
|
| 632 |
+
"merge 225/256: (114, 121) -> 480 (b'ry') had 542 occurrences\n",
|
| 633 |
+
"merge 226/256: (63, 10) -> 481 (b'?\\n') had 539 occurrences\n",
|
| 634 |
+
"merge 227/256: (277, 103) -> 482 (b'ong') had 534 occurrences\n",
|
| 635 |
+
"merge 228/256: (105, 101) -> 483 (b'ie') had 533 occurrences\n",
|
| 636 |
+
"merge 229/256: (105, 297) -> 484 (b'ive') had 527 occurrences\n",
|
| 637 |
+
"merge 230/256: (273, 429) -> 485 (b' from') had 527 occurrences\n",
|
| 638 |
+
"merge 231/256: (269, 108) -> 486 (b' bl') had 527 occurrences\n",
|
| 639 |
+
"merge 232/256: (118, 282) -> 487 (b'ven') had 521 occurrences\n",
|
| 640 |
+
"merge 233/256: (32, 71) -> 488 (b' G') had 518 occurrences\n",
|
| 641 |
+
"merge 234/256: (70, 271) -> 489 (b'For') had 517 occurrences\n",
|
| 642 |
+
"merge 235/256: (260, 257) -> 490 (b' she') had 517 occurrences\n",
|
| 643 |
+
"merge 236/256: (101, 109) -> 491 (b'em') had 515 occurrences\n",
|
| 644 |
+
"merge 237/256: (306, 111) -> 492 (b' go') had 515 occurrences\n",
|
| 645 |
+
"merge 238/256: (97, 264) -> 493 (b'are') had 514 occurrences\n",
|
| 646 |
+
"merge 239/256: (261, 376) -> 494 (b' more') had 510 occurrences\n",
|
| 647 |
+
"merge 240/256: (268, 109) -> 495 (b' them') had 509 occurrences\n",
|
| 648 |
+
"merge 241/256: (259, 116) -> 496 (b'out') had 509 occurrences\n",
|
| 649 |
+
"merge 242/256: (73, 67) -> 497 (b'IC') had 509 occurrences\n",
|
| 650 |
+
"merge 243/256: (263, 358) -> 498 (b' was') had 504 occurrences\n",
|
| 651 |
+
"merge 244/256: (97, 117) -> 499 (b'au') had 504 occurrences\n",
|
| 652 |
+
"merge 245/256: (298, 339) -> 500 (b'other') had 503 occurrences\n",
|
| 653 |
+
"merge 246/256: (298, 104) -> 501 (b'oth') had 503 occurrences\n",
|
| 654 |
+
"merge 247/256: (72, 101) -> 502 (b'He') had 500 occurrences\n",
|
| 655 |
+
"merge 248/256: (260, 317) -> 503 (b' sir') had 500 occurrences\n",
|
| 656 |
+
"merge 249/256: (111, 108) -> 504 (b'ol') had 498 occurrences\n",
|
| 657 |
+
"merge 250/256: (283, 301) -> 505 (b' now') had 490 occurrences\n",
|
| 658 |
+
"merge 251/256: (32, 76) -> 506 (b' L') had 489 occurrences\n",
|
| 659 |
+
"merge 252/256: (32, 294) -> 507 (b' hat') had 488 occurrences\n",
|
| 660 |
+
"merge 253/256: (32, 398) -> 508 (b' if') had 484 occurrences\n",
|
| 661 |
+
"merge 254/256: (111, 299) -> 509 (b'ost') had 484 occurrences\n",
|
| 662 |
+
"merge 255/256: (76, 79) -> 510 (b'LO') had 481 occurrences\n",
|
| 663 |
+
"merge 256/256: (262, 100) -> 511 (b'ind') had 480 occurrences\n"
|
| 664 |
+
]
|
| 665 |
+
}
|
| 666 |
+
],
|
| 667 |
+
"source": [
|
| 668 |
+
"regex_tokenizer = RegexTokenizer()\n",
|
| 669 |
+
"regex_tokenizer.train(text, vocab_size=512, verbose=True)"
|
| 670 |
+
]
|
| 671 |
+
},
|
| 672 |
+
{
|
| 673 |
+
"cell_type": "code",
|
| 674 |
+
"execution_count": 13,
|
| 675 |
+
"metadata": {},
|
| 676 |
+
"outputs": [],
|
| 677 |
+
"source": [
|
| 678 |
+
"prefix = os.path.join(model_path, \"shakespeare_regex\")\n",
|
| 679 |
+
"regex_tokenizer.save(prefix)"
|
| 680 |
+
]
|
| 681 |
+
},
|
| 682 |
+
{
|
| 683 |
+
"cell_type": "markdown",
|
| 684 |
+
"metadata": {},
|
| 685 |
+
"source": [
|
| 686 |
+
"loading the tokenizer files and using it"
|
| 687 |
+
]
|
| 688 |
+
},
|
| 689 |
+
{
|
| 690 |
+
"cell_type": "code",
|
| 691 |
+
"execution_count": 6,
|
| 692 |
+
"metadata": {},
|
| 693 |
+
"outputs": [],
|
| 694 |
+
"source": [
|
| 695 |
+
"model_path = os.path.join(os.getcwd(), \"tokenizer_model\")\n",
|
| 696 |
+
"model_path = os.path.join(model_path, \"shakespeare_basic.model\")"
|
| 697 |
+
]
|
| 698 |
+
},
|
| 699 |
+
{
|
| 700 |
+
"cell_type": "code",
|
| 701 |
+
"execution_count": 7,
|
| 702 |
+
"metadata": {},
|
| 703 |
+
"outputs": [],
|
| 704 |
+
"source": [
|
| 705 |
+
"basic_tokenizer = BasicTokenizer()\n",
|
| 706 |
+
"basic_tokenizer.load(model_path)"
|
| 707 |
+
]
|
| 708 |
+
},
|
| 709 |
+
{
|
| 710 |
+
"cell_type": "code",
|
| 711 |
+
"execution_count": 15,
|
| 712 |
+
"metadata": {},
|
| 713 |
+
"outputs": [],
|
| 714 |
+
"source": [
|
| 715 |
+
"ids = basic_tokenizer.encode(\"Hello World\")"
|
| 716 |
+
]
|
| 717 |
+
},
|
| 718 |
+
{
|
| 719 |
+
"cell_type": "code",
|
| 720 |
+
"execution_count": 19,
|
| 721 |
+
"metadata": {},
|
| 722 |
+
"outputs": [],
|
| 723 |
+
"source": [
|
| 724 |
+
"reverse = basic_tokenizer.decode(ids)"
|
| 725 |
+
]
|
| 726 |
+
},
|
| 727 |
+
{
|
| 728 |
+
"cell_type": "code",
|
| 729 |
+
"execution_count": 20,
|
| 730 |
+
"metadata": {},
|
| 731 |
+
"outputs": [],
|
| 732 |
+
"source": [
|
| 733 |
+
"mapping = [(str(i),basic_tokenizer.decode([i])) for i in ids]"
|
| 734 |
+
]
|
| 735 |
+
},
|
| 736 |
+
{
|
| 737 |
+
"cell_type": "code",
|
| 738 |
+
"execution_count": 22,
|
| 739 |
+
"metadata": {},
|
| 740 |
+
"outputs": [],
|
| 741 |
+
"source": [
|
| 742 |
+
"def test_tokenizer(text):\n",
|
| 743 |
+
" ids = basic_tokenizer.encode(text)\n",
|
| 744 |
+
" decoded = basic_tokenizer.decode(ids)\n",
|
| 745 |
+
" mapping = [(str(i), basic_tokenizer.decode([i])) for i in ids]\n",
|
| 746 |
+
"\n",
|
| 747 |
+
" return ids, decoded, mapping"
|
| 748 |
+
]
|
| 749 |
+
},
|
| 750 |
+
{
|
| 751 |
+
"cell_type": "code",
|
| 752 |
+
"execution_count": 23,
|
| 753 |
+
"metadata": {},
|
| 754 |
+
"outputs": [
|
| 755 |
+
{
|
| 756 |
+
"data": {
|
| 757 |
+
"text/plain": [
|
| 758 |
+
"([72, 389, 269, 87, 268, 108, 100],\n",
|
| 759 |
+
" 'Hello World',\n",
|
| 760 |
+
" [('72', 'H'),\n",
|
| 761 |
+
" ('389', 'ell'),\n",
|
| 762 |
+
" ('269', 'o '),\n",
|
| 763 |
+
" ('87', 'W'),\n",
|
| 764 |
+
" ('268', 'or'),\n",
|
| 765 |
+
" ('108', 'l'),\n",
|
| 766 |
+
" ('100', 'd')])"
|
| 767 |
+
]
|
| 768 |
+
},
|
| 769 |
+
"execution_count": 23,
|
| 770 |
+
"metadata": {},
|
| 771 |
+
"output_type": "execute_result"
|
| 772 |
+
}
|
| 773 |
+
],
|
| 774 |
+
"source": [
|
| 775 |
+
"test_tokenizer(\"Hello World\")"
|
| 776 |
+
]
|
| 777 |
+
},
|
| 778 |
+
{
|
| 779 |
+
"cell_type": "code",
|
| 780 |
+
"execution_count": 12,
|
| 781 |
+
"metadata": {},
|
| 782 |
+
"outputs": [],
|
| 783 |
+
"source": [
|
| 784 |
+
"import gradio as gr"
|
| 785 |
+
]
|
| 786 |
+
},
|
| 787 |
+
{
|
| 788 |
+
"cell_type": "code",
|
| 789 |
+
"execution_count": 24,
|
| 790 |
+
"metadata": {},
|
| 791 |
+
"outputs": [],
|
| 792 |
+
"source": [
|
| 793 |
+
"with gr.Blocks() as demo:\n",
|
| 794 |
+
" gr.HTML(\"<h1 align = 'center'> Token Generation for Hindi Dataset </h1>\")\n",
|
| 795 |
+
"\n",
|
| 796 |
+
" with gr.Row():\n",
|
| 797 |
+
" with gr.Column():\n",
|
| 798 |
+
" inputs = [gr.TextArea(label = \"Enter initial text to generate tokens in Hindi\", lines = 10)]\n",
|
| 799 |
+
" generate_btn = gr.Button(value = 'Generate Text')\n",
|
| 800 |
+
" with gr.Column():\n",
|
| 801 |
+
" enc = gr.Textbox(label = \"Encoded Tokens\")\n",
|
| 802 |
+
" txt = gr.Textbox(label = \"Decoded Text from tokens\")\n",
|
| 803 |
+
" map = gr.Textbox(label = \"Mapping of the tokens and respective texts\")\n",
|
| 804 |
+
" outputs = [\n",
|
| 805 |
+
" enc,\n",
|
| 806 |
+
" txt,\n",
|
| 807 |
+
" map\n",
|
| 808 |
+
" ]\n",
|
| 809 |
+
" \n",
|
| 810 |
+
" generate_btn.click(fn = test_tokenizer, inputs= inputs, outputs = outputs)\n"
|
| 811 |
+
]
|
| 812 |
+
},
|
| 813 |
+
{
|
| 814 |
+
"cell_type": "code",
|
| 815 |
+
"execution_count": 27,
|
| 816 |
+
"metadata": {},
|
| 817 |
+
"outputs": [
|
| 818 |
+
{
|
| 819 |
+
"name": "stdout",
|
| 820 |
+
"output_type": "stream",
|
| 821 |
+
"text": [
|
| 822 |
+
"Rerunning server... use `close()` to stop if you need to change `launch()` parameters.\n",
|
| 823 |
+
"----\n",
|
| 824 |
+
"Running on public URL: https://9ce8a9238acdc2d242.gradio.live\n",
|
| 825 |
+
"\n",
|
| 826 |
+
"This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)\n"
|
| 827 |
+
]
|
| 828 |
+
},
|
| 829 |
+
{
|
| 830 |
+
"data": {
|
| 831 |
+
"text/html": [
|
| 832 |
+
"<div><iframe src=\"https://9ce8a9238acdc2d242.gradio.live\" width=\"100%\" height=\"500\" allow=\"autoplay; camera; microphone; clipboard-read; clipboard-write;\" frameborder=\"0\" allowfullscreen></iframe></div>"
|
| 833 |
+
],
|
| 834 |
+
"text/plain": [
|
| 835 |
+
"<IPython.core.display.HTML object>"
|
| 836 |
+
]
|
| 837 |
+
},
|
| 838 |
+
"metadata": {},
|
| 839 |
+
"output_type": "display_data"
|
| 840 |
+
},
|
| 841 |
+
{
|
| 842 |
+
"data": {
|
| 843 |
+
"text/plain": []
|
| 844 |
+
},
|
| 845 |
+
"execution_count": 27,
|
| 846 |
+
"metadata": {},
|
| 847 |
+
"output_type": "execute_result"
|
| 848 |
+
}
|
| 849 |
+
],
|
| 850 |
+
"source": [
|
| 851 |
+
"demo.launch(share=True)"
|
| 852 |
+
]
|
| 853 |
+
},
|
| 854 |
+
{
|
| 855 |
+
"cell_type": "code",
|
| 856 |
+
"execution_count": null,
|
| 857 |
+
"metadata": {},
|
| 858 |
+
"outputs": [],
|
| 859 |
+
"source": [
|
| 860 |
+
"demo.close()"
|
| 861 |
+
]
|
| 862 |
+
}
|
| 863 |
+
],
|
| 864 |
+
"metadata": {
|
| 865 |
+
"kernelspec": {
|
| 866 |
+
"display_name": "torch_env",
|
| 867 |
+
"language": "python",
|
| 868 |
+
"name": "python3"
|
| 869 |
+
},
|
| 870 |
+
"language_info": {
|
| 871 |
+
"codemirror_mode": {
|
| 872 |
+
"name": "ipython",
|
| 873 |
+
"version": 3
|
| 874 |
+
},
|
| 875 |
+
"file_extension": ".py",
|
| 876 |
+
"mimetype": "text/x-python",
|
| 877 |
+
"name": "python",
|
| 878 |
+
"nbconvert_exporter": "python",
|
| 879 |
+
"pygments_lexer": "ipython3",
|
| 880 |
+
"version": "3.10.14"
|
| 881 |
+
}
|
| 882 |
+
},
|
| 883 |
+
"nbformat": 4,
|
| 884 |
+
"nbformat_minor": 2
|
| 885 |
+
}
|
notebooks/train_hindi.ipynb
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
requirements.txt
CHANGED
|
@@ -1,2 +1,2 @@
|
|
| 1 |
-
|
| 2 |
-
|
|
|
|
| 1 |
+
regex==2024.5.15
|
| 2 |
+
numpy==1.19.3
|
tokenizer/__init__.py
ADDED
|
File without changes
|
tokenizer/base.py
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Base class for Tokenizers that can train a vocabulary from text, encode and decode strings into lists of integers and back.
|
| 3 |
+
The Tokenizer can also save and load its model to/from disk.
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
from tokenizer.utils import render_token
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
class Tokenizer:
|
| 10 |
+
"""Base class for Tokenizers"""
|
| 11 |
+
|
| 12 |
+
def __init__(self):
|
| 13 |
+
# default: vocab size of 256 (all bytes), no merges, no patterns
|
| 14 |
+
self.merges = {} # (int, int) -> int
|
| 15 |
+
self.pattern = "" # str
|
| 16 |
+
self.special_tokens = {} # str -> int, e.g. {'<|endoftext|>': 100257}
|
| 17 |
+
self.vocab = self._build_vocab() # int -> bytes
|
| 18 |
+
|
| 19 |
+
def train(self, text, vocab_size, verbose=False):
|
| 20 |
+
# Tokenizer can train a vocabulary of size vocab_size from text
|
| 21 |
+
raise NotImplementedError
|
| 22 |
+
|
| 23 |
+
def encode(self, text):
|
| 24 |
+
# Tokenizer can encode a string into a list of integers
|
| 25 |
+
raise NotImplementedError
|
| 26 |
+
|
| 27 |
+
def decode(self, ids):
|
| 28 |
+
# Tokenizer can decode a list of integers into a string
|
| 29 |
+
raise NotImplementedError
|
| 30 |
+
|
| 31 |
+
def _build_vocab(self):
|
| 32 |
+
# vocab is simply and deterministically derived from merges
|
| 33 |
+
vocab = {idx: bytes([idx]) for idx in range(256)}
|
| 34 |
+
for (p0, p1), idx in self.merges.items():
|
| 35 |
+
vocab[idx] = vocab[p0] + vocab[p1]
|
| 36 |
+
for special, idx in self.special_tokens.items():
|
| 37 |
+
vocab[idx] = special.encode("utf-8")
|
| 38 |
+
return vocab
|
| 39 |
+
|
| 40 |
+
def save(self, file_prefix):
|
| 41 |
+
"""
|
| 42 |
+
Saves two files: file_prefix.vocab and file_prefix.model
|
| 43 |
+
This is inspired (but not equivalent to!) sentencepiece's model saving:
|
| 44 |
+
- model file is the critical one, intended for load()
|
| 45 |
+
- vocab file is just a pretty printed version for human inspection only
|
| 46 |
+
"""
|
| 47 |
+
# write the model: to be used in load() later
|
| 48 |
+
model_file = file_prefix + ".model"
|
| 49 |
+
with open(model_file, "w") as f:
|
| 50 |
+
# write the version, pattern and merges, that's all that's needed
|
| 51 |
+
f.write("minbpe v1\n")
|
| 52 |
+
f.write(f"{self.pattern}\n")
|
| 53 |
+
# write the special tokens, first the number of them, then each one
|
| 54 |
+
f.write(f"{len(self.special_tokens)}\n")
|
| 55 |
+
for special, idx in self.special_tokens.items():
|
| 56 |
+
f.write(f"{special} {idx}\n")
|
| 57 |
+
# the merges dict
|
| 58 |
+
for idx1, idx2 in self.merges:
|
| 59 |
+
f.write(f"{idx1} {idx2}\n")
|
| 60 |
+
# write the vocab: for the human to look at
|
| 61 |
+
vocab_file = file_prefix + ".vocab"
|
| 62 |
+
inverted_merges = {idx: pair for pair, idx in self.merges.items()}
|
| 63 |
+
with open(vocab_file, "w", encoding="utf-8") as f:
|
| 64 |
+
for idx, token in self.vocab.items():
|
| 65 |
+
# note: many tokens may be partial utf-8 sequences
|
| 66 |
+
# and cannot be decoded into valid strings. Here we're using
|
| 67 |
+
# errors='replace' to replace them with the replacement char �.
|
| 68 |
+
# this also means that we couldn't possibly use .vocab in load()
|
| 69 |
+
# because decoding in this way is a lossy operation!
|
| 70 |
+
s = render_token(token)
|
| 71 |
+
# find the children of this token, if any
|
| 72 |
+
if idx in inverted_merges:
|
| 73 |
+
# if this token has children, render it nicely as a merge
|
| 74 |
+
idx0, idx1 = inverted_merges[idx]
|
| 75 |
+
s0 = render_token(self.vocab[idx0])
|
| 76 |
+
s1 = render_token(self.vocab[idx1])
|
| 77 |
+
f.write(f"[{s0}][{s1}] -> [{s}] {idx}\n")
|
| 78 |
+
else:
|
| 79 |
+
# otherwise this is leaf token, just print it
|
| 80 |
+
# (this should just be the first 256 tokens, the bytes)
|
| 81 |
+
f.write(f"[{s}] {idx}\n")
|
| 82 |
+
|
| 83 |
+
def load(self, model_file):
|
| 84 |
+
"""Inverse of save() but only for the model file"""
|
| 85 |
+
assert model_file.endswith(".model")
|
| 86 |
+
# read the model file
|
| 87 |
+
merges = {}
|
| 88 |
+
special_tokens = {}
|
| 89 |
+
idx = 256
|
| 90 |
+
with open(model_file, "r", encoding="utf-8") as f:
|
| 91 |
+
# read the version
|
| 92 |
+
version = f.readline().strip()
|
| 93 |
+
assert version == "minbpe v1"
|
| 94 |
+
# read the pattern
|
| 95 |
+
self.pattern = f.readline().strip()
|
| 96 |
+
# read the special tokens
|
| 97 |
+
num_special = int(f.readline().strip())
|
| 98 |
+
for _ in range(num_special):
|
| 99 |
+
special, special_idx = f.readline().strip().split()
|
| 100 |
+
special_tokens[special] = int(special_idx)
|
| 101 |
+
# read the merges
|
| 102 |
+
for line in f:
|
| 103 |
+
idx1, idx2 = map(int, line.split())
|
| 104 |
+
merges[(idx1, idx2)] = idx
|
| 105 |
+
idx += 1
|
| 106 |
+
self.merges = merges
|
| 107 |
+
self.special_tokens = special_tokens
|
| 108 |
+
self.vocab = self._build_vocab()
|
tokenizer/basic_bpe.py
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Basic Byte Pair Encoding (BPE) tokenizer. This is a simple tokenizer that can be trained on a text and then used to encode and decode strings.
|
| 3 |
+
The training process is based on the BPE algorithm, which merges the most common pairs of tokens iteratively to create new tokens.
|
| 4 |
+
The tokenizer can be saved to disk and loaded back later. The vocabulary and merges can be inspected in human-readable form.
|
| 5 |
+
No handling of special tokens or regex patterns.
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
from tokenizer.utils import get_stats, merge
|
| 9 |
+
from tokenizer.base import Tokenizer
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
class BasicTokenizer(Tokenizer):
|
| 13 |
+
|
| 14 |
+
def __init__(self):
|
| 15 |
+
super().__init__()
|
| 16 |
+
|
| 17 |
+
def train(self, text, vocab_size, verbose=False):
|
| 18 |
+
assert vocab_size >= 256
|
| 19 |
+
num_merges = vocab_size - 256
|
| 20 |
+
|
| 21 |
+
# input text preprocessing
|
| 22 |
+
text_bytes = text.encode("utf-8") # raw bytes
|
| 23 |
+
ids = list(text_bytes) # list of integers in range 0..255
|
| 24 |
+
|
| 25 |
+
# iteratively merge the most common pairs to create new tokens
|
| 26 |
+
merges = {} # (int, int) -> int
|
| 27 |
+
vocab = {idx: bytes([idx]) for idx in range(256)} # int -> bytes
|
| 28 |
+
for i in range(num_merges):
|
| 29 |
+
# count up the number of times every consecutive pair appears
|
| 30 |
+
stats = get_stats(ids)
|
| 31 |
+
# find the pair with the highest count
|
| 32 |
+
pair = max(stats, key=stats.get)
|
| 33 |
+
# mint a new token: assign it the next available id
|
| 34 |
+
idx = 256 + i
|
| 35 |
+
# replace all occurrences of pair in ids with idx
|
| 36 |
+
ids = merge(ids, pair, idx)
|
| 37 |
+
# save the merge
|
| 38 |
+
merges[pair] = idx
|
| 39 |
+
vocab[idx] = vocab[pair[0]] + vocab[pair[1]]
|
| 40 |
+
# prints
|
| 41 |
+
if verbose:
|
| 42 |
+
print(
|
| 43 |
+
f"merge {i+1}/{num_merges}: {pair} -> {idx} ({vocab[idx]}) had {stats[pair]} occurrences"
|
| 44 |
+
)
|
| 45 |
+
|
| 46 |
+
# save class variables
|
| 47 |
+
self.merges = merges # used in encode()
|
| 48 |
+
self.vocab = vocab # used in decode()
|
| 49 |
+
|
| 50 |
+
def decode(self, ids):
|
| 51 |
+
# given ids (list of integers), return Python string
|
| 52 |
+
text_bytes = b"".join(self.vocab[idx] for idx in ids)
|
| 53 |
+
text = text_bytes.decode("utf-8", errors="replace")
|
| 54 |
+
return text
|
| 55 |
+
|
| 56 |
+
def encode(self, text):
|
| 57 |
+
# given a string text, return the token ids
|
| 58 |
+
text_bytes = text.encode("utf-8") # raw bytes
|
| 59 |
+
ids = list(text_bytes) # list of integers in range 0..255
|
| 60 |
+
while len(ids) >= 2:
|
| 61 |
+
# find the pair with the lowest merge index
|
| 62 |
+
stats = get_stats(ids)
|
| 63 |
+
pair = min(stats, key=lambda p: self.merges.get(p, float("inf")))
|
| 64 |
+
# subtle: if there are no more merges available, the key will
|
| 65 |
+
# result in an inf for every single pair, and the min will be
|
| 66 |
+
# just the first pair in the list, arbitrarily
|
| 67 |
+
# we can detect this terminating case by a membership check
|
| 68 |
+
if pair not in self.merges:
|
| 69 |
+
break # nothing else can be merged anymore
|
| 70 |
+
# otherwise let's merge the best pair (lowest merge index)
|
| 71 |
+
idx = self.merges[pair]
|
| 72 |
+
ids = merge(ids, pair, idx)
|
| 73 |
+
return ids
|
tokenizer/regex_bpe.py
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Minimal (byte-level) Byte Pair Encoding tokenizer.
|
| 3 |
+
|
| 4 |
+
Algorithmically follows along the GPT tokenizer:
|
| 5 |
+
https://github.com/openai/gpt-2/blob/master/src/encoder.py
|
| 6 |
+
|
| 7 |
+
Unlike BasicTokenizer:
|
| 8 |
+
- RegexTokenizer handles an optional regex splitting pattern.
|
| 9 |
+
- RegexTokenizer handles optional special tokens.
|
| 10 |
+
"""
|
| 11 |
+
|
| 12 |
+
import regex as re
|
| 13 |
+
from tokenizer.utils import get_stats, merge
|
| 14 |
+
from tokenizer.base import Tokenizer
|
| 15 |
+
|
| 16 |
+
# Regex split
|
| 17 |
+
GPT2_SPLIT_PATTERN = (
|
| 18 |
+
r"""'(?:[sdmt]|ll|ve|re)| ?\p{L}+| ?\p{N}+| ?[^\s\p{L}\p{N}]+|\s+(?!\S)|\s+"""
|
| 19 |
+
)
|
| 20 |
+
GPT4_SPLIT_PATTERN = r"""'(?i:[sdmt]|ll|ve|re)|[^\r\n\p{L}\p{N}]?+\p{L}+|\p{N}{1,3}| ?[^\s\p{L}\p{N}]++[\r\n]*|\s*[\r\n]|\s+(?!\S)|\s+"""
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
class RegexTokenizer(Tokenizer):
|
| 24 |
+
|
| 25 |
+
def __init__(self, pattern=None):
|
| 26 |
+
"""
|
| 27 |
+
- pattern: optional string to override the default (GPT-4 split pattern)
|
| 28 |
+
- special_tokens: str -> int dictionary of special tokens
|
| 29 |
+
example: {'<|endoftext|>': 100257}
|
| 30 |
+
"""
|
| 31 |
+
super().__init__()
|
| 32 |
+
self.pattern = GPT4_SPLIT_PATTERN if pattern is None else pattern
|
| 33 |
+
self.compiled_pattern = re.compile(self.pattern)
|
| 34 |
+
self.special_tokens = {}
|
| 35 |
+
self.inverse_special_tokens = {}
|
| 36 |
+
|
| 37 |
+
def train(self, text, vocab_size, verbose=False):
|
| 38 |
+
assert vocab_size >= 256
|
| 39 |
+
num_merges = vocab_size - 256
|
| 40 |
+
|
| 41 |
+
# split the text up into text chunks
|
| 42 |
+
text_chunks = re.findall(self.compiled_pattern, text)
|
| 43 |
+
|
| 44 |
+
# input text preprocessing
|
| 45 |
+
ids = [list(ch.encode("utf-8")) for ch in text_chunks]
|
| 46 |
+
|
| 47 |
+
# iteratively merge the most common pairs to create new tokens
|
| 48 |
+
merges = {} # (int, int) -> int
|
| 49 |
+
vocab = {idx: bytes([idx]) for idx in range(256)} # idx -> bytes
|
| 50 |
+
for i in range(num_merges):
|
| 51 |
+
# count the number of times every consecutive pair appears
|
| 52 |
+
stats = {}
|
| 53 |
+
for chunk_ids in ids:
|
| 54 |
+
# passing in stats will update it in place, adding up counts
|
| 55 |
+
get_stats(chunk_ids, stats)
|
| 56 |
+
# find the pair with the highest count
|
| 57 |
+
pair = max(stats, key=stats.get)
|
| 58 |
+
# mint a new token: assign it the next available id
|
| 59 |
+
idx = 256 + i
|
| 60 |
+
# replace all occurrences of pair in ids with idx
|
| 61 |
+
ids = [merge(chunk_ids, pair, idx) for chunk_ids in ids]
|
| 62 |
+
# save the merge
|
| 63 |
+
merges[pair] = idx
|
| 64 |
+
vocab[idx] = vocab[pair[0]] + vocab[pair[1]]
|
| 65 |
+
# prints
|
| 66 |
+
if verbose:
|
| 67 |
+
print(
|
| 68 |
+
f"merge {i+1}/{num_merges}: {pair} -> {idx} ({vocab[idx]}) had {stats[pair]} occurrences"
|
| 69 |
+
)
|
| 70 |
+
|
| 71 |
+
# save class variables
|
| 72 |
+
self.merges = merges # used in encode()
|
| 73 |
+
self.vocab = vocab # used in decode()
|
| 74 |
+
|
| 75 |
+
def register_special_tokens(self, special_tokens):
|
| 76 |
+
# special_tokens is a dictionary of str -> int
|
| 77 |
+
# example: {"<|endoftext|>": 100257}
|
| 78 |
+
self.special_tokens = special_tokens
|
| 79 |
+
self.inverse_special_tokens = {v: k for k, v in special_tokens.items()}
|
| 80 |
+
|
| 81 |
+
def decode(self, ids):
|
| 82 |
+
# given ids (list of integers), return Python string
|
| 83 |
+
part_bytes = []
|
| 84 |
+
for idx in ids:
|
| 85 |
+
if idx in self.vocab:
|
| 86 |
+
part_bytes.append(self.vocab[idx])
|
| 87 |
+
elif idx in self.inverse_special_tokens:
|
| 88 |
+
part_bytes.append(self.inverse_special_tokens[idx].encode("utf-8"))
|
| 89 |
+
else:
|
| 90 |
+
raise ValueError(f"invalid token id: {idx}")
|
| 91 |
+
text_bytes = b"".join(part_bytes)
|
| 92 |
+
text = text_bytes.decode("utf-8", errors="replace")
|
| 93 |
+
return text
|
| 94 |
+
|
| 95 |
+
def _encode_chunk(self, text_bytes):
|
| 96 |
+
# return the token ids
|
| 97 |
+
# let's begin. first, convert all bytes to integers in range 0..255
|
| 98 |
+
ids = list(text_bytes)
|
| 99 |
+
while len(ids) >= 2:
|
| 100 |
+
# find the pair with the lowest merge index
|
| 101 |
+
stats = get_stats(ids)
|
| 102 |
+
pair = min(stats, key=lambda p: self.merges.get(p, float("inf")))
|
| 103 |
+
# subtle: if there are no more merges available, the key will
|
| 104 |
+
# result in an inf for every single pair, and the min will be
|
| 105 |
+
# just the first pair in the list, arbitrarily
|
| 106 |
+
# we can detect this terminating case by a membership check
|
| 107 |
+
if pair not in self.merges:
|
| 108 |
+
break # nothing else can be merged anymore
|
| 109 |
+
# otherwise let's merge the best pair (lowest merge index)
|
| 110 |
+
idx = self.merges[pair]
|
| 111 |
+
ids = merge(ids, pair, idx)
|
| 112 |
+
return ids
|
| 113 |
+
|
| 114 |
+
def encode_ordinary(self, text):
|
| 115 |
+
"""Encoding that ignores any special tokens."""
|
| 116 |
+
# split text into chunks of text by categories defined in regex pattern
|
| 117 |
+
text_chunks = re.findall(self.compiled_pattern, text)
|
| 118 |
+
# all chunks of text are encoded separately, then results are joined
|
| 119 |
+
ids = []
|
| 120 |
+
for chunk in text_chunks:
|
| 121 |
+
chunk_bytes = chunk.encode("utf-8") # raw bytes
|
| 122 |
+
chunk_ids = self._encode_chunk(chunk_bytes)
|
| 123 |
+
ids.extend(chunk_ids)
|
| 124 |
+
return ids
|
| 125 |
+
|
| 126 |
+
def encode(self, text, allowed_special="none_raise"):
|
| 127 |
+
"""
|
| 128 |
+
Unlike encode_ordinary, this function handles special tokens.
|
| 129 |
+
allowed_special: can be "all"|"none"|"none_raise" or a custom set of special tokens
|
| 130 |
+
if none_raise, then an error is raised if any special token is encountered in text
|
| 131 |
+
this is the default tiktoken behavior right now as well
|
| 132 |
+
any other behavior is either annoying, or a major footgun
|
| 133 |
+
"""
|
| 134 |
+
# decode the user desire w.r.t. handling of special tokens
|
| 135 |
+
special = None
|
| 136 |
+
if allowed_special == "all":
|
| 137 |
+
special = self.special_tokens
|
| 138 |
+
elif allowed_special == "none":
|
| 139 |
+
special = {}
|
| 140 |
+
elif allowed_special == "none_raise":
|
| 141 |
+
special = {}
|
| 142 |
+
assert all(token not in text for token in self.special_tokens)
|
| 143 |
+
elif isinstance(allowed_special, set):
|
| 144 |
+
special = {
|
| 145 |
+
k: v for k, v in self.special_tokens.items() if k in allowed_special
|
| 146 |
+
}
|
| 147 |
+
else:
|
| 148 |
+
raise ValueError(f"allowed_special={allowed_special} not understood")
|
| 149 |
+
if not special:
|
| 150 |
+
# shortcut: if no special tokens, just use the ordinary encoding
|
| 151 |
+
return self.encode_ordinary(text)
|
| 152 |
+
# otherwise, we have to be careful with potential special tokens in text
|
| 153 |
+
# we handle special tokens by splitting the text
|
| 154 |
+
# based on the occurrence of any exact match with any of the special tokens
|
| 155 |
+
# we can use re.split for this. note that surrounding the pattern with ()
|
| 156 |
+
# makes it into a capturing group, so the special tokens will be included
|
| 157 |
+
special_pattern = "(" + "|".join(re.escape(k) for k in special) + ")"
|
| 158 |
+
special_chunks = re.split(special_pattern, text)
|
| 159 |
+
# now all the special characters are separated from the rest of the text
|
| 160 |
+
# all chunks of text are encoded separately, then results are joined
|
| 161 |
+
ids = []
|
| 162 |
+
for part in special_chunks:
|
| 163 |
+
if part in special:
|
| 164 |
+
# this is a special token, encode it separately as a special case
|
| 165 |
+
ids.append(special[part])
|
| 166 |
+
else:
|
| 167 |
+
# this is an ordinary sequence, encode it normally
|
| 168 |
+
ids.extend(self.encode_ordinary(part))
|
| 169 |
+
return ids
|
tokenizer/utils.py
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
Some utility functions for the tokenizer (Basic and Regex)
|
| 3 |
+
"""
|
| 4 |
+
|
| 5 |
+
import unicodedata
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
def get_stats(ids, counts=None):
|
| 9 |
+
"""
|
| 10 |
+
Given a list of integers, return a dictionary of counts of consecutive pairs
|
| 11 |
+
Example: [1, 2, 3, 1, 2] -> {(1, 2): 2, (2, 3): 1, (3, 1): 1}
|
| 12 |
+
Optionally allows to update an existing dictionary of counts
|
| 13 |
+
"""
|
| 14 |
+
counts = {} if counts is None else counts
|
| 15 |
+
for pair in zip(ids, ids[1:]): # iterate consecutive elements
|
| 16 |
+
counts[pair] = counts.get(pair, 0) + 1
|
| 17 |
+
return counts
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def merge(ids, pair, idx):
|
| 21 |
+
"""
|
| 22 |
+
In the list of integers (ids), replace all consecutive occurrences
|
| 23 |
+
of pair with the new integer token idx
|
| 24 |
+
Example: ids=[1, 2, 3, 1, 2], pair=(1, 2), idx=4 -> [4, 3, 4]
|
| 25 |
+
"""
|
| 26 |
+
newids = []
|
| 27 |
+
i = 0
|
| 28 |
+
while i < len(ids):
|
| 29 |
+
# if not at the very last position AND the pair matches, replace it
|
| 30 |
+
if ids[i] == pair[0] and i < len(ids) - 1 and ids[i + 1] == pair[1]:
|
| 31 |
+
newids.append(idx)
|
| 32 |
+
i += 2
|
| 33 |
+
else:
|
| 34 |
+
newids.append(ids[i])
|
| 35 |
+
i += 1
|
| 36 |
+
return newids
|
| 37 |
+
|
| 38 |
+
|
| 39 |
+
def replace_control_characters(s: str) -> str:
|
| 40 |
+
"""Replace control characters in a string with their unicode escape"""
|
| 41 |
+
chars = []
|
| 42 |
+
for ch in s:
|
| 43 |
+
if unicodedata.category(ch)[0] != "C":
|
| 44 |
+
chars.append(ch) # this character is ok
|
| 45 |
+
else:
|
| 46 |
+
chars.append(f"\\u{ord(ch):04x}") # escape
|
| 47 |
+
return "".join(chars)
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
def render_token(t: bytes) -> str:
|
| 51 |
+
"""Pretty print a token, escaping control characters"""
|
| 52 |
+
# pretty print a token, escaping control characters
|
| 53 |
+
s = t.decode("utf-8", errors="replace")
|
| 54 |
+
s = replace_control_characters(s)
|
| 55 |
+
return s
|
tokenizer_model/hindi_sentiments_basic.model
ADDED
|
@@ -0,0 +1,4747 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
minbpe v1
|
| 2 |
+
|
| 3 |
+
0
|
| 4 |
+
224 164
|
| 5 |
+
32 256
|
| 6 |
+
224 165
|
| 7 |
+
256 190
|
| 8 |
+
258 135
|
| 9 |
+
256 176
|
| 10 |
+
258 128
|
| 11 |
+
258 141
|
| 12 |
+
257 149
|
| 13 |
+
256 191
|
| 14 |
+
256 130
|
| 15 |
+
259 256
|
| 16 |
+
263 256
|
| 17 |
+
265 256
|
| 18 |
+
260 257
|
| 19 |
+
262 257
|
| 20 |
+
258 139
|
| 21 |
+
256 168
|
| 22 |
+
256 149
|
| 23 |
+
258 136
|
| 24 |
+
261 257
|
| 25 |
+
259 257
|
| 26 |
+
185 275
|
| 27 |
+
256 185
|
| 28 |
+
256 164
|
| 29 |
+
10 36
|
| 30 |
+
266 257
|
| 31 |
+
256 184
|
| 32 |
+
256 174
|
| 33 |
+
256 178
|
| 34 |
+
269 178
|
| 35 |
+
258 129
|
| 36 |
+
266 256
|
| 37 |
+
174 260
|
| 38 |
+
268 174
|
| 39 |
+
258 130
|
| 40 |
+
257 184
|
| 41 |
+
286 290
|
| 42 |
+
264 270
|
| 43 |
+
289 282
|
| 44 |
+
281 256
|
| 45 |
+
272 257
|
| 46 |
+
256 166
|
| 47 |
+
263 261
|
| 48 |
+
171 293
|
| 49 |
+
258 164
|
| 50 |
+
264 271
|
| 51 |
+
256 170
|
| 52 |
+
267 168
|
| 53 |
+
148 276
|
| 54 |
+
260 256
|
| 55 |
+
259 261
|
| 56 |
+
256 151
|
| 57 |
+
256 175
|
| 58 |
+
261 268
|
| 59 |
+
257 168
|
| 60 |
+
277 278
|
| 61 |
+
287 256
|
| 62 |
+
257 278
|
| 63 |
+
272 266
|
| 64 |
+
279 262
|
| 65 |
+
256 156
|
| 66 |
+
257 170
|
| 67 |
+
268 175
|
| 68 |
+
271 278
|
| 69 |
+
257 295
|
| 70 |
+
264 297
|
| 71 |
+
256 172
|
| 72 |
+
269 175
|
| 73 |
+
257 172
|
| 74 |
+
226 128
|
| 75 |
+
264 277
|
| 76 |
+
267 164
|
| 77 |
+
257 166
|
| 78 |
+
256 181
|
| 79 |
+
257 156
|
| 80 |
+
268 159
|
| 81 |
+
256 159
|
| 82 |
+
257 305
|
| 83 |
+
259 276
|
| 84 |
+
316 282
|
| 85 |
+
257 300
|
| 86 |
+
257 133
|
| 87 |
+
257 185
|
| 88 |
+
256 182
|
| 89 |
+
256 154
|
| 90 |
+
273 270
|
| 91 |
+
137 273
|
| 92 |
+
135 283
|
| 93 |
+
262 264
|
| 94 |
+
256 188
|
| 95 |
+
269 168
|
| 96 |
+
288 151
|
| 97 |
+
260 264
|
| 98 |
+
257 176
|
| 99 |
+
267 181
|
| 100 |
+
256 161
|
| 101 |
+
267 175
|
| 102 |
+
256 173
|
| 103 |
+
260 274
|
| 104 |
+
272 282
|
| 105 |
+
267 178
|
| 106 |
+
270 278
|
| 107 |
+
269 149
|
| 108 |
+
257 178
|
| 109 |
+
257 174
|
| 110 |
+
265 261
|
| 111 |
+
269 164
|
| 112 |
+
326 141
|
| 113 |
+
263 364
|
| 114 |
+
267 166
|
| 115 |
+
143 274
|
| 116 |
+
256 136
|
| 117 |
+
268 164
|
| 118 |
+
264 261
|
| 119 |
+
292 270
|
| 120 |
+
267 149
|
| 121 |
+
358 266
|
| 122 |
+
258 137
|
| 123 |
+
301 32
|
| 124 |
+
306 182
|
| 125 |
+
257 164
|
| 126 |
+
184 270
|
| 127 |
+
267 174
|
| 128 |
+
257 181
|
| 129 |
+
269 184
|
| 130 |
+
280 320
|
| 131 |
+
352 346
|
| 132 |
+
262 273
|
| 133 |
+
170 299
|
| 134 |
+
173 271
|
| 135 |
+
175 279
|
| 136 |
+
267 156
|
| 137 |
+
291 261
|
| 138 |
+
258 140
|
| 139 |
+
288 166
|
| 140 |
+
279 304
|
| 141 |
+
32 44
|
| 142 |
+
268 149
|
| 143 |
+
256 171
|
| 144 |
+
267 184
|
| 145 |
+
259 264
|
| 146 |
+
257 151
|
| 147 |
+
267 185
|
| 148 |
+
280 312
|
| 149 |
+
262 280
|
| 150 |
+
258 131
|
| 151 |
+
311 336
|
| 152 |
+
343 274
|
| 153 |
+
306 150
|
| 154 |
+
133 303
|
| 155 |
+
313 155
|
| 156 |
+
257 150
|
| 157 |
+
266 264
|
| 158 |
+
170 276
|
| 159 |
+
256 150
|
| 160 |
+
273 271
|
| 161 |
+
294 172
|
| 162 |
+
261 264
|
| 163 |
+
310 182
|
| 164 |
+
269 143
|
| 165 |
+
266 283
|
| 166 |
+
362 298
|
| 167 |
+
268 184
|
| 168 |
+
268 185
|
| 169 |
+
310 166
|
| 170 |
+
10 296
|
| 171 |
+
280 373
|
| 172 |
+
281 257
|
| 173 |
+
356 295
|
| 174 |
+
168 336
|
| 175 |
+
272 285
|
| 176 |
+
314 266
|
| 177 |
+
267 143
|
| 178 |
+
273 260
|
| 179 |
+
267 135
|
| 180 |
+
324 312
|
| 181 |
+
294 184
|
| 182 |
+
269 150
|
| 183 |
+
288 159
|
| 184 |
+
176 279
|
| 185 |
+
168 270
|
| 186 |
+
273 277
|
| 187 |
+
340 319
|
| 188 |
+
415 274
|
| 189 |
+
341 268
|
| 190 |
+
258 158
|
| 191 |
+
283 270
|
| 192 |
+
10 281
|
| 193 |
+
311 270
|
| 194 |
+
291 323
|
| 195 |
+
267 165
|
| 196 |
+
271 184
|
| 197 |
+
315 322
|
| 198 |
+
268 178
|
| 199 |
+
257 289
|
| 200 |
+
269 182
|
| 201 |
+
257 173
|
| 202 |
+
262 274
|
| 203 |
+
267 172
|
| 204 |
+
343 420
|
| 205 |
+
402 439
|
| 206 |
+
287 285
|
| 207 |
+
355 347
|
| 208 |
+
271 300
|
| 209 |
+
280 277
|
| 210 |
+
318 299
|
| 211 |
+
268 181
|
| 212 |
+
260 282
|
| 213 |
+
264 272
|
| 214 |
+
442 293
|
| 215 |
+
257 134
|
| 216 |
+
178 308
|
| 217 |
+
260 279
|
| 218 |
+
262 32
|
| 219 |
+
256 163
|
| 220 |
+
294 178
|
| 221 |
+
185 272
|
| 222 |
+
265 421
|
| 223 |
+
261 279
|
| 224 |
+
185 271
|
| 225 |
+
256 143
|
| 226 |
+
280 270
|
| 227 |
+
328 320
|
| 228 |
+
354 351
|
| 229 |
+
271 305
|
| 230 |
+
257 171
|
| 231 |
+
441 155
|
| 232 |
+
418 307
|
| 233 |
+
474 376
|
| 234 |
+
268 166
|
| 235 |
+
257 344
|
| 236 |
+
318 276
|
| 237 |
+
392 271
|
| 238 |
+
265 348
|
| 239 |
+
314 296
|
| 240 |
+
264 432
|
| 241 |
+
288 156
|
| 242 |
+
271 164
|
| 243 |
+
324 259
|
| 244 |
+
259 288
|
| 245 |
+
394 299
|
| 246 |
+
355 332
|
| 247 |
+
291 284
|
| 248 |
+
354 347
|
| 249 |
+
257 182
|
| 250 |
+
291 298
|
| 251 |
+
267 136
|
| 252 |
+
257 161
|
| 253 |
+
287 261
|
| 254 |
+
316 266
|
| 255 |
+
144 283
|
| 256 |
+
339 272
|
| 257 |
+
264 265
|
| 258 |
+
284 317
|
| 259 |
+
285 372
|
| 260 |
+
281 274
|
| 261 |
+
257 367
|
| 262 |
+
317 502
|
| 263 |
+
260 284
|
| 264 |
+
272 276
|
| 265 |
+
260 32
|
| 266 |
+
267 171
|
| 267 |
+
350 279
|
| 268 |
+
360 459
|
| 269 |
+
281 283
|
| 270 |
+
456 315
|
| 271 |
+
257 154
|
| 272 |
+
257 137
|
| 273 |
+
472 416
|
| 274 |
+
277 184
|
| 275 |
+
269 181
|
| 276 |
+
298 335
|
| 277 |
+
315 302
|
| 278 |
+
287 298
|
| 279 |
+
266 280
|
| 280 |
+
348 401
|
| 281 |
+
256 167
|
| 282 |
+
485 274
|
| 283 |
+
272 308
|
| 284 |
+
259 32
|
| 285 |
+
312 296
|
| 286 |
+
283 369
|
| 287 |
+
272 341
|
| 288 |
+
365 284
|
| 289 |
+
287 274
|
| 290 |
+
258 156
|
| 291 |
+
170 261
|
| 292 |
+
338 303
|
| 293 |
+
279 285
|
| 294 |
+
294 176
|
| 295 |
+
269 170
|
| 296 |
+
326 153
|
| 297 |
+
276 134
|
| 298 |
+
269 173
|
| 299 |
+
277 151
|
| 300 |
+
288 181
|
| 301 |
+
148 414
|
| 302 |
+
133 483
|
| 303 |
+
264 407
|
| 304 |
+
264 345
|
| 305 |
+
314 281
|
| 306 |
+
268 183
|
| 307 |
+
257 386
|
| 308 |
+
262 284
|
| 309 |
+
257 135
|
| 310 |
+
337 321
|
| 311 |
+
353 261
|
| 312 |
+
314 301
|
| 313 |
+
256 157
|
| 314 |
+
510 516
|
| 315 |
+
256 162
|
| 316 |
+
433 447
|
| 317 |
+
166 440
|
| 318 |
+
166 434
|
| 319 |
+
267 182
|
| 320 |
+
333 274
|
| 321 |
+
286 540
|
| 322 |
+
272 383
|
| 323 |
+
273 349
|
| 324 |
+
262 302
|
| 325 |
+
264 349
|
| 326 |
+
262 309
|
| 327 |
+
185 313
|
| 328 |
+
267 170
|
| 329 |
+
287 273
|
| 330 |
+
360 308
|
| 331 |
+
284 261
|
| 332 |
+
552 366
|
| 333 |
+
406 412
|
| 334 |
+
304 270
|
| 335 |
+
351 514
|
| 336 |
+
315 294
|
| 337 |
+
256 165
|
| 338 |
+
287 280
|
| 339 |
+
269 159
|
| 340 |
+
326 152
|
| 341 |
+
306 156
|
| 342 |
+
334 184
|
| 343 |
+
522 342
|
| 344 |
+
329 457
|
| 345 |
+
133 500
|
| 346 |
+
133 273
|
| 347 |
+
262 261
|
| 348 |
+
280 261
|
| 349 |
+
325 273
|
| 350 |
+
306 159
|
| 351 |
+
277 172
|
| 352 |
+
389 280
|
| 353 |
+
268 182
|
| 354 |
+
267 147
|
| 355 |
+
567 346
|
| 356 |
+
327 184
|
| 357 |
+
405 274
|
| 358 |
+
271 172
|
| 359 |
+
266 274
|
| 360 |
+
164 297
|
| 361 |
+
270 410
|
| 362 |
+
268 170
|
| 363 |
+
272 261
|
| 364 |
+
267 151
|
| 365 |
+
319 366
|
| 366 |
+
375 422
|
| 367 |
+
375 296
|
| 368 |
+
374 285
|
| 369 |
+
277 156
|
| 370 |
+
302 156
|
| 371 |
+
291 303
|
| 372 |
+
385 480
|
| 373 |
+
272 340
|
| 374 |
+
181 279
|
| 375 |
+
283 261
|
| 376 |
+
272 273
|
| 377 |
+
605 273
|
| 378 |
+
271 378
|
| 379 |
+
256 183
|
| 380 |
+
511 307
|
| 381 |
+
270 184
|
| 382 |
+
288 161
|
| 383 |
+
32 39
|
| 384 |
+
451 409
|
| 385 |
+
133 285
|
| 386 |
+
174 286
|
| 387 |
+
302 184
|
| 388 |
+
413 587
|
| 389 |
+
288 154
|
| 390 |
+
262 285
|
| 391 |
+
265 391
|
| 392 |
+
257 387
|
| 393 |
+
280 259
|
| 394 |
+
265 276
|
| 395 |
+
377 274
|
| 396 |
+
377 297
|
| 397 |
+
32 466
|
| 398 |
+
375 444
|
| 399 |
+
317 549
|
| 400 |
+
279 273
|
| 401 |
+
264 276
|
| 402 |
+
339 271
|
| 403 |
+
329 440
|
| 404 |
+
551 309
|
| 405 |
+
289 409
|
| 406 |
+
275 274
|
| 407 |
+
301 296
|
| 408 |
+
306 181
|
| 409 |
+
418 335
|
| 410 |
+
498 276
|
| 411 |
+
497 547
|
| 412 |
+
185 297
|
| 413 |
+
170 328
|
| 414 |
+
331 297
|
| 415 |
+
269 174
|
| 416 |
+
270 378
|
| 417 |
+
262 294
|
| 418 |
+
494 475
|
| 419 |
+
166 457
|
| 420 |
+
257 165
|
| 421 |
+
322 172
|
| 422 |
+
413 366
|
| 423 |
+
404 270
|
| 424 |
+
344 337
|
| 425 |
+
137 283
|
| 426 |
+
166 405
|
| 427 |
+
181 357
|
| 428 |
+
279 261
|
| 429 |
+
170 389
|
| 430 |
+
663 332
|
| 431 |
+
365 309
|
| 432 |
+
170 545
|
| 433 |
+
301 422
|
| 434 |
+
300 321
|
| 435 |
+
151 368
|
| 436 |
+
266 281
|
| 437 |
+
284 260
|
| 438 |
+
406 342
|
| 439 |
+
257 175
|
| 440 |
+
363 299
|
| 441 |
+
277 305
|
| 442 |
+
319 291
|
| 443 |
+
272 333
|
| 444 |
+
427 321
|
| 445 |
+
269 166
|
| 446 |
+
173 351
|
| 447 |
+
423 296
|
| 448 |
+
173 499
|
| 449 |
+
339 313
|
| 450 |
+
275 583
|
| 451 |
+
271 295
|
| 452 |
+
271 156
|
| 453 |
+
172 469
|
| 454 |
+
435 261
|
| 455 |
+
266 296
|
| 456 |
+
284 565
|
| 457 |
+
267 167
|
| 458 |
+
274 332
|
| 459 |
+
382 296
|
| 460 |
+
361 286
|
| 461 |
+
284 464
|
| 462 |
+
257 155
|
| 463 |
+
308 276
|
| 464 |
+
260 273
|
| 465 |
+
272 264
|
| 466 |
+
280 262
|
| 467 |
+
269 156
|
| 468 |
+
617 277
|
| 469 |
+
274 276
|
| 470 |
+
317 279
|
| 471 |
+
404 271
|
| 472 |
+
271 168
|
| 473 |
+
274 558
|
| 474 |
+
287 284
|
| 475 |
+
272 284
|
| 476 |
+
280 265
|
| 477 |
+
291 285
|
| 478 |
+
292 274
|
| 479 |
+
273 534
|
| 480 |
+
257 507
|
| 481 |
+
259 302
|
| 482 |
+
446 283
|
| 483 |
+
291 276
|
| 484 |
+
318 261
|
| 485 |
+
304 260
|
| 486 |
+
171 573
|
| 487 |
+
313 161
|
| 488 |
+
301 281
|
| 489 |
+
311 506
|
| 490 |
+
174 273
|
| 491 |
+
274 369
|
| 492 |
+
260 283
|
| 493 |
+
398 368
|
| 494 |
+
652 280
|
| 495 |
+
292 332
|
| 496 |
+
261 454
|
| 497 |
+
312 281
|
| 498 |
+
172 273
|
| 499 |
+
154 399
|
| 500 |
+
279 590
|
| 501 |
+
497 384
|
| 502 |
+
597 309
|
| 503 |
+
154 285
|
| 504 |
+
700 359
|
| 505 |
+
313 150
|
| 506 |
+
271 170
|
| 507 |
+
400 281
|
| 508 |
+
539 274
|
| 509 |
+
329 260
|
| 510 |
+
257 159
|
| 511 |
+
329 405
|
| 512 |
+
331 479
|
| 513 |
+
544 412
|
| 514 |
+
428 296
|
| 515 |
+
342 679
|
| 516 |
+
496 167
|
| 517 |
+
734 604
|
| 518 |
+
262 322
|
| 519 |
+
256 160
|
| 520 |
+
277 166
|
| 521 |
+
44 520
|
| 522 |
+
563 662
|
| 523 |
+
275 443
|
| 524 |
+
370 382
|
| 525 |
+
706 330
|
| 526 |
+
777 285
|
| 527 |
+
262 341
|
| 528 |
+
390 276
|
| 529 |
+
302 164
|
| 530 |
+
339 297
|
| 531 |
+
269 183
|
| 532 |
+
260 280
|
| 533 |
+
288 172
|
| 534 |
+
350 411
|
| 535 |
+
271 437
|
| 536 |
+
264 489
|
| 537 |
+
272 283
|
| 538 |
+
168 362
|
| 539 |
+
287 303
|
| 540 |
+
580 273
|
| 541 |
+
330 455
|
| 542 |
+
275 283
|
| 543 |
+
168 651
|
| 544 |
+
144 710
|
| 545 |
+
272 368
|
| 546 |
+
291 310
|
| 547 |
+
279 283
|
| 548 |
+
569 449
|
| 549 |
+
748 668
|
| 550 |
+
300 327
|
| 551 |
+
176 411
|
| 552 |
+
264 284
|
| 553 |
+
276 184
|
| 554 |
+
266 32
|
| 555 |
+
600 384
|
| 556 |
+
268 161
|
| 557 |
+
546 623
|
| 558 |
+
462 480
|
| 559 |
+
266 301
|
| 560 |
+
310 156
|
| 561 |
+
32 264
|
| 562 |
+
264 566
|
| 563 |
+
318 389
|
| 564 |
+
411 446
|
| 565 |
+
550 353
|
| 566 |
+
596 425
|
| 567 |
+
273 578
|
| 568 |
+
403 278
|
| 569 |
+
260 45
|
| 570 |
+
259 417
|
| 571 |
+
151 401
|
| 572 |
+
606 266
|
| 573 |
+
468 400
|
| 574 |
+
262 327
|
| 575 |
+
262 298
|
| 576 |
+
284 304
|
| 577 |
+
272 303
|
| 578 |
+
356 410
|
| 579 |
+
259 611
|
| 580 |
+
307 471
|
| 581 |
+
260 285
|
| 582 |
+
283 276
|
| 583 |
+
318 328
|
| 584 |
+
316 409
|
| 585 |
+
268 165
|
| 586 |
+
310 183
|
| 587 |
+
181 319
|
| 588 |
+
282 305
|
| 589 |
+
390 261
|
| 590 |
+
359 285
|
| 591 |
+
271 185
|
| 592 |
+
45 283
|
| 593 |
+
181 452
|
| 594 |
+
289 746
|
| 595 |
+
408 304
|
| 596 |
+
395 285
|
| 597 |
+
579 136
|
| 598 |
+
257 143
|
| 599 |
+
134 280
|
| 600 |
+
367 629
|
| 601 |
+
270 156
|
| 602 |
+
303 274
|
| 603 |
+
331 328
|
| 604 |
+
302 172
|
| 605 |
+
354 271
|
| 606 |
+
271 426
|
| 607 |
+
272 292
|
| 608 |
+
809 321
|
| 609 |
+
546 696
|
| 610 |
+
275 273
|
| 611 |
+
174 390
|
| 612 |
+
301 380
|
| 613 |
+
465 292
|
| 614 |
+
292 323
|
| 615 |
+
325 335
|
| 616 |
+
572 589
|
| 617 |
+
398 477
|
| 618 |
+
393 520
|
| 619 |
+
492 296
|
| 620 |
+
413 779
|
| 621 |
+
266 279
|
| 622 |
+
261 290
|
| 623 |
+
272 279
|
| 624 |
+
615 493
|
| 625 |
+
270 172
|
| 626 |
+
184 284
|
| 627 |
+
257 553
|
| 628 |
+
135 273
|
| 629 |
+
320 296
|
| 630 |
+
176 727
|
| 631 |
+
625 452
|
| 632 |
+
278 281
|
| 633 |
+
342 295
|
| 634 |
+
511 335
|
| 635 |
+
271 174
|
| 636 |
+
264 392
|
| 637 |
+
268 168
|
| 638 |
+
258 155
|
| 639 |
+
347 515
|
| 640 |
+
345 284
|
| 641 |
+
272 274
|
| 642 |
+
306 151
|
| 643 |
+
524 283
|
| 644 |
+
277 295
|
| 645 |
+
309 535
|
| 646 |
+
277 168
|
| 647 |
+
482 573
|
| 648 |
+
370 423
|
| 649 |
+
346 293
|
| 650 |
+
162 348
|
| 651 |
+
353 285
|
| 652 |
+
301 337
|
| 653 |
+
796 490
|
| 654 |
+
495 282
|
| 655 |
+
606 282
|
| 656 |
+
264 632
|
| 657 |
+
315 327
|
| 658 |
+
263 276
|
| 659 |
+
400 296
|
| 660 |
+
166 260
|
| 661 |
+
307 280
|
| 662 |
+
262 44
|
| 663 |
+
257 160
|
| 664 |
+
334 168
|
| 665 |
+
284 363
|
| 666 |
+
338 500
|
| 667 |
+
431 284
|
| 668 |
+
133 533
|
| 669 |
+
355 419
|
| 670 |
+
345 883
|
| 671 |
+
283 348
|
| 672 |
+
262 330
|
| 673 |
+
264 484
|
| 674 |
+
338 298
|
| 675 |
+
441 154
|
| 676 |
+
277 437
|
| 677 |
+
387 337
|
| 678 |
+
302 170
|
| 679 |
+
338 285
|
| 680 |
+
277 170
|
| 681 |
+
381 419
|
| 682 |
+
299 518
|
| 683 |
+
259 327
|
| 684 |
+
306 161
|
| 685 |
+
324 656
|
| 686 |
+
262 283
|
| 687 |
+
270 295
|
| 688 |
+
267 159
|
| 689 |
+
277 436
|
| 690 |
+
628 356
|
| 691 |
+
166 284
|
| 692 |
+
287 538
|
| 693 |
+
375 281
|
| 694 |
+
144 443
|
| 695 |
+
269 155
|
| 696 |
+
135 778
|
| 697 |
+
397 265
|
| 698 |
+
181 270
|
| 699 |
+
137 303
|
| 700 |
+
725 309
|
| 701 |
+
268 167
|
| 702 |
+
265 873
|
| 703 |
+
579 143
|
| 704 |
+
456 464
|
| 705 |
+
137 298
|
| 706 |
+
526 274
|
| 707 |
+
313 182
|
| 708 |
+
154 692
|
| 709 |
+
292 261
|
| 710 |
+
274 335
|
| 711 |
+
258 343
|
| 712 |
+
356 378
|
| 713 |
+
164 274
|
| 714 |
+
303 299
|
| 715 |
+
286 268
|
| 716 |
+
331 284
|
| 717 |
+
340 357
|
| 718 |
+
171 646
|
| 719 |
+
292 349
|
| 720 |
+
259 322
|
| 721 |
+
176 388
|
| 722 |
+
276 172
|
| 723 |
+
353 298
|
| 724 |
+
166 286
|
| 725 |
+
530 486
|
| 726 |
+
338 483
|
| 727 |
+
262 296
|
| 728 |
+
331 261
|
| 729 |
+
496 154
|
| 730 |
+
274 383
|
| 731 |
+
271 344
|
| 732 |
+
684 270
|
| 733 |
+
372 307
|
| 734 |
+
902 371
|
| 735 |
+
280 369
|
| 736 |
+
790 571
|
| 737 |
+
315 640
|
| 738 |
+
374 308
|
| 739 |
+
947 285
|
| 740 |
+
261 32
|
| 741 |
+
156 720
|
| 742 |
+
431 261
|
| 743 |
+
284 273
|
| 744 |
+
274 307
|
| 745 |
+
331 323
|
| 746 |
+
264 726
|
| 747 |
+
334 172
|
| 748 |
+
373 296
|
| 749 |
+
272 542
|
| 750 |
+
701 143
|
| 751 |
+
257 167
|
| 752 |
+
261 471
|
| 753 |
+
374 284
|
| 754 |
+
45 274
|
| 755 |
+
267 183
|
| 756 |
+
280 358
|
| 757 |
+
280 260
|
| 758 |
+
300 294
|
| 759 |
+
421 613
|
| 760 |
+
280 276
|
| 761 |
+
677 274
|
| 762 |
+
481 184
|
| 763 |
+
350 388
|
| 764 |
+
470 466
|
| 765 |
+
265 310
|
| 766 |
+
430 327
|
| 767 |
+
259 281
|
| 768 |
+
535 934
|
| 769 |
+
278 296
|
| 770 |
+
264 397
|
| 771 |
+
259 282
|
| 772 |
+
317 323
|
| 773 |
+
304 277
|
| 774 |
+
705 807
|
| 775 |
+
310 165
|
| 776 |
+
264 379
|
| 777 |
+
133 298
|
| 778 |
+
150 396
|
| 779 |
+
313 159
|
| 780 |
+
637 308
|
| 781 |
+
375 10
|
| 782 |
+
32 292
|
| 783 |
+
291 333
|
| 784 |
+
311 836
|
| 785 |
+
465 368
|
| 786 |
+
182 399
|
| 787 |
+
428 281
|
| 788 |
+
269 154
|
| 789 |
+
334 174
|
| 790 |
+
798 163
|
| 791 |
+
154 469
|
| 792 |
+
1043 261
|
| 793 |
+
134 309
|
| 794 |
+
260 281
|
| 795 |
+
283 614
|
| 796 |
+
782 156
|
| 797 |
+
844 532
|
| 798 |
+
311 309
|
| 799 |
+
154 261
|
| 800 |
+
178 355
|
| 801 |
+
402 631
|
| 802 |
+
318 545
|
| 803 |
+
322 155
|
| 804 |
+
271 849
|
| 805 |
+
377 801
|
| 806 |
+
277 825
|
| 807 |
+
330 262
|
| 808 |
+
304 528
|
| 809 |
+
304 271
|
| 810 |
+
751 416
|
| 811 |
+
259 294
|
| 812 |
+
359 299
|
| 813 |
+
460 321
|
| 814 |
+
313 183
|
| 815 |
+
473 308
|
| 816 |
+
45 731
|
| 817 |
+
168 309
|
| 818 |
+
307 332
|
| 819 |
+
178 853
|
| 820 |
+
429 282
|
| 821 |
+
333 273
|
| 822 |
+
374 310
|
| 823 |
+
306 175
|
| 824 |
+
298 307
|
| 825 |
+
288 170
|
| 826 |
+
332 299
|
| 827 |
+
393 331
|
| 828 |
+
376 273
|
| 829 |
+
270 305
|
| 830 |
+
166 942
|
| 831 |
+
278 266
|
| 832 |
+
173 330
|
| 833 |
+
259 301
|
| 834 |
+
694 317
|
| 835 |
+
709 832
|
| 836 |
+
333 332
|
| 837 |
+
342 468
|
| 838 |
+
261 302
|
| 839 |
+
133 323
|
| 840 |
+
504 774
|
| 841 |
+
345 489
|
| 842 |
+
428 301
|
| 843 |
+
903 990
|
| 844 |
+
312 301
|
| 845 |
+
32 45
|
| 846 |
+
381 271
|
| 847 |
+
451 806
|
| 848 |
+
185 599
|
| 849 |
+
673 816
|
| 850 |
+
185 276
|
| 851 |
+
292 384
|
| 852 |
+
324 285
|
| 853 |
+
173 913
|
| 854 |
+
294 174
|
| 855 |
+
284 486
|
| 856 |
+
487 274
|
| 857 |
+
150 446
|
| 858 |
+
374 274
|
| 859 |
+
287 391
|
| 860 |
+
271 159
|
| 861 |
+
554 670
|
| 862 |
+
337 327
|
| 863 |
+
823 1049
|
| 864 |
+
783 309
|
| 865 |
+
380 270
|
| 866 |
+
303 450
|
| 867 |
+
300 302
|
| 868 |
+
288 167
|
| 869 |
+
423 281
|
| 870 |
+
353 308
|
| 871 |
+
176 760
|
| 872 |
+
313 181
|
| 873 |
+
134 411
|
| 874 |
+
172 752
|
| 875 |
+
408 769
|
| 876 |
+
156 261
|
| 877 |
+
285 459
|
| 878 |
+
380 279
|
| 879 |
+
291 627
|
| 880 |
+
345 484
|
| 881 |
+
609 1068
|
| 882 |
+
372 276
|
| 883 |
+
277 181
|
| 884 |
+
931 308
|
| 885 |
+
271 151
|
| 886 |
+
338 308
|
| 887 |
+
361 273
|
| 888 |
+
185 417
|
| 889 |
+
344 274
|
| 890 |
+
262 281
|
| 891 |
+
182 1060
|
| 892 |
+
544 342
|
| 893 |
+
182 299
|
| 894 |
+
310 184
|
| 895 |
+
270 170
|
| 896 |
+
309 396
|
| 897 |
+
276 166
|
| 898 |
+
277 174
|
| 899 |
+
488 172
|
| 900 |
+
303 735
|
| 901 |
+
291 283
|
| 902 |
+
408 446
|
| 903 |
+
365 279
|
| 904 |
+
397 407
|
| 905 |
+
261 274
|
| 906 |
+
882 981
|
| 907 |
+
291 274
|
| 908 |
+
173 261
|
| 909 |
+
300 322
|
| 910 |
+
330 273
|
| 911 |
+
317 333
|
| 912 |
+
264 336
|
| 913 |
+
171 591
|
| 914 |
+
505 291
|
| 915 |
+
637 351
|
| 916 |
+
620 527
|
| 917 |
+
1168 739
|
| 918 |
+
450 919
|
| 919 |
+
755 478
|
| 920 |
+
181 722
|
| 921 |
+
135 284
|
| 922 |
+
185 381
|
| 923 |
+
261 298
|
| 924 |
+
133 391
|
| 925 |
+
560 363
|
| 926 |
+
385 280
|
| 927 |
+
261 388
|
| 928 |
+
273 328
|
| 929 |
+
274 838
|
| 930 |
+
374 309
|
| 931 |
+
303 1042
|
| 932 |
+
799 396
|
| 933 |
+
257 675
|
| 934 |
+
478 955
|
| 935 |
+
742 876
|
| 936 |
+
781 475
|
| 937 |
+
261 395
|
| 938 |
+
306 172
|
| 939 |
+
453 351
|
| 940 |
+
338 531
|
| 941 |
+
460 588
|
| 942 |
+
311 349
|
| 943 |
+
137 600
|
| 944 |
+
575 922
|
| 945 |
+
512 407
|
| 946 |
+
583 304
|
| 947 |
+
133 952
|
| 948 |
+
1051 692
|
| 949 |
+
1053 268
|
| 950 |
+
273 454
|
| 951 |
+
312 424
|
| 952 |
+
926 1122
|
| 953 |
+
257 148
|
| 954 |
+
268 154
|
| 955 |
+
273 391
|
| 956 |
+
311 534
|
| 957 |
+
307 271
|
| 958 |
+
269 151
|
| 959 |
+
292 284
|
| 960 |
+
172 372
|
| 961 |
+
356 305
|
| 962 |
+
184 584
|
| 963 |
+
382 281
|
| 964 |
+
689 435
|
| 965 |
+
753 1118
|
| 966 |
+
347 420
|
| 967 |
+
967 295
|
| 968 |
+
543 395
|
| 969 |
+
458 712
|
| 970 |
+
1017 171
|
| 971 |
+
586 295
|
| 972 |
+
44 666
|
| 973 |
+
45 323
|
| 974 |
+
46 46
|
| 975 |
+
133 317
|
| 976 |
+
308 273
|
| 977 |
+
151 304
|
| 978 |
+
429 308
|
| 979 |
+
161 774
|
| 980 |
+
261 294
|
| 981 |
+
608 532
|
| 982 |
+
283 357
|
| 983 |
+
309 455
|
| 984 |
+
661 295
|
| 985 |
+
261 324
|
| 986 |
+
283 319
|
| 987 |
+
369 335
|
| 988 |
+
298 304
|
| 989 |
+
168 817
|
| 990 |
+
415 273
|
| 991 |
+
365 333
|
| 992 |
+
624 363
|
| 993 |
+
276 295
|
| 994 |
+
319 304
|
| 995 |
+
940 274
|
| 996 |
+
1247 578
|
| 997 |
+
430 525
|
| 998 |
+
171 901
|
| 999 |
+
1029 985
|
| 1000 |
+
331 775
|
| 1001 |
+
276 305
|
| 1002 |
+
863 514
|
| 1003 |
+
625 273
|
| 1004 |
+
365 280
|
| 1005 |
+
137 285
|
| 1006 |
+
323 388
|
| 1007 |
+
152 1073
|
| 1008 |
+
315 556
|
| 1009 |
+
184 682
|
| 1010 |
+
272 317
|
| 1011 |
+
133 354
|
| 1012 |
+
271 166
|
| 1013 |
+
260 435
|
| 1014 |
+
292 708
|
| 1015 |
+
267 173
|
| 1016 |
+
290 328
|
| 1017 |
+
279 284
|
| 1018 |
+
278 301
|
| 1019 |
+
257 595
|
| 1020 |
+
264 368
|
| 1021 |
+
793 741
|
| 1022 |
+
813 517
|
| 1023 |
+
275 771
|
| 1024 |
+
135 280
|
| 1025 |
+
394 280
|
| 1026 |
+
436 745
|
| 1027 |
+
660 722
|
| 1028 |
+
406 575
|
| 1029 |
+
44 331
|
| 1030 |
+
396 332
|
| 1031 |
+
314 424
|
| 1032 |
+
309 273
|
| 1033 |
+
433 379
|
| 1034 |
+
276 437
|
| 1035 |
+
45 303
|
| 1036 |
+
259 531
|
| 1037 |
+
324 277
|
| 1038 |
+
780 410
|
| 1039 |
+
310 149
|
| 1040 |
+
325 328
|
| 1041 |
+
350 760
|
| 1042 |
+
260 298
|
| 1043 |
+
291 273
|
| 1044 |
+
279 317
|
| 1045 |
+
918 309
|
| 1046 |
+
404 448
|
| 1047 |
+
506 1006
|
| 1048 |
+
1299 336
|
| 1049 |
+
185 284
|
| 1050 |
+
275 309
|
| 1051 |
+
268 151
|
| 1052 |
+
920 359
|
| 1053 |
+
288 173
|
| 1054 |
+
597 784
|
| 1055 |
+
369 515
|
| 1056 |
+
1307 357
|
| 1057 |
+
184 848
|
| 1058 |
+
1055 291
|
| 1059 |
+
168 534
|
| 1060 |
+
577 484
|
| 1061 |
+
168 379
|
| 1062 |
+
175 366
|
| 1063 |
+
492 281
|
| 1064 |
+
325 469
|
| 1065 |
+
767 270
|
| 1066 |
+
538 590
|
| 1067 |
+
462 515
|
| 1068 |
+
1064 284
|
| 1069 |
+
508 430
|
| 1070 |
+
697 319
|
| 1071 |
+
373 281
|
| 1072 |
+
307 262
|
| 1073 |
+
522 575
|
| 1074 |
+
260 417
|
| 1075 |
+
1069 792
|
| 1076 |
+
273 889
|
| 1077 |
+
182 975
|
| 1078 |
+
134 854
|
| 1079 |
+
259 266
|
| 1080 |
+
150 769
|
| 1081 |
+
1074 289
|
| 1082 |
+
494 297
|
| 1083 |
+
302 687
|
| 1084 |
+
309 329
|
| 1085 |
+
431 333
|
| 1086 |
+
308 279
|
| 1087 |
+
398 309
|
| 1088 |
+
737 327
|
| 1089 |
+
313 172
|
| 1090 |
+
657 379
|
| 1091 |
+
1342 1235
|
| 1092 |
+
270 182
|
| 1093 |
+
262 352
|
| 1094 |
+
286 394
|
| 1095 |
+
325 927
|
| 1096 |
+
172 383
|
| 1097 |
+
155 695
|
| 1098 |
+
343 1155
|
| 1099 |
+
267 152
|
| 1100 |
+
32 592
|
| 1101 |
+
334 181
|
| 1102 |
+
275 298
|
| 1103 |
+
371 543
|
| 1104 |
+
356 437
|
| 1105 |
+
845 357
|
| 1106 |
+
655 449
|
| 1107 |
+
400 509
|
| 1108 |
+
548 321
|
| 1109 |
+
264 518
|
| 1110 |
+
133 627
|
| 1111 |
+
302 166
|
| 1112 |
+
264 381
|
| 1113 |
+
434 261
|
| 1114 |
+
320 266
|
| 1115 |
+
292 1087
|
| 1116 |
+
262 317
|
| 1117 |
+
272 330
|
| 1118 |
+
176 395
|
| 1119 |
+
799 1153
|
| 1120 |
+
277 185
|
| 1121 |
+
917 1267
|
| 1122 |
+
268 156
|
| 1123 |
+
785 270
|
| 1124 |
+
753 488
|
| 1125 |
+
285 270
|
| 1126 |
+
172 768
|
| 1127 |
+
408 530
|
| 1128 |
+
385 923
|
| 1129 |
+
337 636
|
| 1130 |
+
176 427
|
| 1131 |
+
269 165
|
| 1132 |
+
337 32
|
| 1133 |
+
292 682
|
| 1134 |
+
259 393
|
| 1135 |
+
1100 297
|
| 1136 |
+
359 1277
|
| 1137 |
+
403 665
|
| 1138 |
+
314 509
|
| 1139 |
+
283 349
|
| 1140 |
+
325 427
|
| 1141 |
+
173 572
|
| 1142 |
+
330 399
|
| 1143 |
+
331 720
|
| 1144 |
+
313 157
|
| 1145 |
+
271 181
|
| 1146 |
+
670 371
|
| 1147 |
+
294 1174
|
| 1148 |
+
839 743
|
| 1149 |
+
1175 538
|
| 1150 |
+
701 134
|
| 1151 |
+
310 159
|
| 1152 |
+
1178 550
|
| 1153 |
+
361 317
|
| 1154 |
+
303 389
|
| 1155 |
+
292 954
|
| 1156 |
+
151 299
|
| 1157 |
+
428 424
|
| 1158 |
+
291 330
|
| 1159 |
+
1044 613
|
| 1160 |
+
320 281
|
| 1161 |
+
380 319
|
| 1162 |
+
280 299
|
| 1163 |
+
470 39
|
| 1164 |
+
256 135
|
| 1165 |
+
269 171
|
| 1166 |
+
878 309
|
| 1167 |
+
45 256
|
| 1168 |
+
333 261
|
| 1169 |
+
339 417
|
| 1170 |
+
184 532
|
| 1171 |
+
325 438
|
| 1172 |
+
134 477
|
| 1173 |
+
338 323
|
| 1174 |
+
150 261
|
| 1175 |
+
135 1198
|
| 1176 |
+
403 473
|
| 1177 |
+
1052 276
|
| 1178 |
+
1201 160
|
| 1179 |
+
354 499
|
| 1180 |
+
1431 265
|
| 1181 |
+
527 376
|
| 1182 |
+
276 378
|
| 1183 |
+
584 1204
|
| 1184 |
+
290 274
|
| 1185 |
+
133 330
|
| 1186 |
+
307 302
|
| 1187 |
+
624 969
|
| 1188 |
+
318 429
|
| 1189 |
+
432 296
|
| 1190 |
+
340 274
|
| 1191 |
+
166 1131
|
| 1192 |
+
134 368
|
| 1193 |
+
307 283
|
| 1194 |
+
424 344
|
| 1195 |
+
329 628
|
| 1196 |
+
133 531
|
| 1197 |
+
1324 395
|
| 1198 |
+
345 265
|
| 1199 |
+
429 786
|
| 1200 |
+
329 434
|
| 1201 |
+
370 438
|
| 1202 |
+
352 591
|
| 1203 |
+
622 429
|
| 1204 |
+
479 281
|
| 1205 |
+
377 475
|
| 1206 |
+
259 348
|
| 1207 |
+
328 312
|
| 1208 |
+
39 513
|
| 1209 |
+
467 854
|
| 1210 |
+
285 394
|
| 1211 |
+
277 579
|
| 1212 |
+
1463 134
|
| 1213 |
+
329 286
|
| 1214 |
+
332 307
|
| 1215 |
+
170 1011
|
| 1216 |
+
257 136
|
| 1217 |
+
1333 417
|
| 1218 |
+
137 1107
|
| 1219 |
+
173 345
|
| 1220 |
+
385 1148
|
| 1221 |
+
340 273
|
| 1222 |
+
161 822
|
| 1223 |
+
330 388
|
| 1224 |
+
269 161
|
| 1225 |
+
1346 458
|
| 1226 |
+
308 270
|
| 1227 |
+
283 391
|
| 1228 |
+
976 341
|
| 1229 |
+
374 333
|
| 1230 |
+
365 303
|
| 1231 |
+
338 273
|
| 1232 |
+
264 661
|
| 1233 |
+
167 1246
|
| 1234 |
+
325 607
|
| 1235 |
+
365 283
|
| 1236 |
+
824 322
|
| 1237 |
+
267 154
|
| 1238 |
+
831 273
|
| 1239 |
+
321 156
|
| 1240 |
+
821 323
|
| 1241 |
+
313 163
|
| 1242 |
+
285 324
|
| 1243 |
+
133 261
|
| 1244 |
+
294 166
|
| 1245 |
+
959 394
|
| 1246 |
+
1497 286
|
| 1247 |
+
371 156
|
| 1248 |
+
150 304
|
| 1249 |
+
943 528
|
| 1250 |
+
174 279
|
| 1251 |
+
556 489
|
| 1252 |
+
400 301
|
| 1253 |
+
151 728
|
| 1254 |
+
382 301
|
| 1255 |
+
357 831
|
| 1256 |
+
1507 265
|
| 1257 |
+
173 1007
|
| 1258 |
+
315 865
|
| 1259 |
+
374 303
|
| 1260 |
+
155 574
|
| 1261 |
+
430 302
|
| 1262 |
+
133 1373
|
| 1263 |
+
453 1088
|
| 1264 |
+
1086 359
|
| 1265 |
+
485 273
|
| 1266 |
+
714 695
|
| 1267 |
+
331 794
|
| 1268 |
+
864 506
|
| 1269 |
+
946 295
|
| 1270 |
+
271 178
|
| 1271 |
+
541 455
|
| 1272 |
+
574 271
|
| 1273 |
+
1170 921
|
| 1274 |
+
948 674
|
| 1275 |
+
260 302
|
| 1276 |
+
390 274
|
| 1277 |
+
307 277
|
| 1278 |
+
585 170
|
| 1279 |
+
318 383
|
| 1280 |
+
161 994
|
| 1281 |
+
317 280
|
| 1282 |
+
133 283
|
| 1283 |
+
563 498
|
| 1284 |
+
639 323
|
| 1285 |
+
154 541
|
| 1286 |
+
549 303
|
| 1287 |
+
277 473
|
| 1288 |
+
257 145
|
| 1289 |
+
283 280
|
| 1290 |
+
353 274
|
| 1291 |
+
960 471
|
| 1292 |
+
277 426
|
| 1293 |
+
478 612
|
| 1294 |
+
1172 371
|
| 1295 |
+
311 651
|
| 1296 |
+
159 299
|
| 1297 |
+
262 631
|
| 1298 |
+
271 687
|
| 1299 |
+
817 537
|
| 1300 |
+
261 44
|
| 1301 |
+
334 156
|
| 1302 |
+
1176 388
|
| 1303 |
+
1285 342
|
| 1304 |
+
170 376
|
| 1305 |
+
32 40
|
| 1306 |
+
265 264
|
| 1307 |
+
337 294
|
| 1308 |
+
307 270
|
| 1309 |
+
370 342
|
| 1310 |
+
655 315
|
| 1311 |
+
1048 479
|
| 1312 |
+
294 598
|
| 1313 |
+
645 327
|
| 1314 |
+
277 386
|
| 1315 |
+
344 562
|
| 1316 |
+
344 1308
|
| 1317 |
+
845 463
|
| 1318 |
+
431 285
|
| 1319 |
+
1430 1432
|
| 1320 |
+
430 674
|
| 1321 |
+
176 330
|
| 1322 |
+
44 380
|
| 1323 |
+
524 285
|
| 1324 |
+
385 1318
|
| 1325 |
+
134 1207
|
| 1326 |
+
257 147
|
| 1327 |
+
172 816
|
| 1328 |
+
261 392
|
| 1329 |
+
675 178
|
| 1330 |
+
450 275
|
| 1331 |
+
134 303
|
| 1332 |
+
324 280
|
| 1333 |
+
461 426
|
| 1334 |
+
306 154
|
| 1335 |
+
284 290
|
| 1336 |
+
151 607
|
| 1337 |
+
133 280
|
| 1338 |
+
323 486
|
| 1339 |
+
493 827
|
| 1340 |
+
1591 308
|
| 1341 |
+
330 384
|
| 1342 |
+
370 412
|
| 1343 |
+
273 273
|
| 1344 |
+
1454 490
|
| 1345 |
+
328 1455
|
| 1346 |
+
283 837
|
| 1347 |
+
292 697
|
| 1348 |
+
372 558
|
| 1349 |
+
32 296
|
| 1350 |
+
264 470
|
| 1351 |
+
271 473
|
| 1352 |
+
161 357
|
| 1353 |
+
284 357
|
| 1354 |
+
519 373
|
| 1355 |
+
303 357
|
| 1356 |
+
438 184
|
| 1357 |
+
891 602
|
| 1358 |
+
257 404
|
| 1359 |
+
32 281
|
| 1360 |
+
270 176
|
| 1361 |
+
403 170
|
| 1362 |
+
298 284
|
| 1363 |
+
1227 1336
|
| 1364 |
+
1615 660
|
| 1365 |
+
1616 1228
|
| 1366 |
+
262 276
|
| 1367 |
+
285 292
|
| 1368 |
+
445 344
|
| 1369 |
+
752 654
|
| 1370 |
+
276 426
|
| 1371 |
+
372 368
|
| 1372 |
+
271 476
|
| 1373 |
+
998 335
|
| 1374 |
+
259 370
|
| 1375 |
+
515 381
|
| 1376 |
+
150 530
|
| 1377 |
+
274 629
|
| 1378 |
+
453 345
|
| 1379 |
+
361 1234
|
| 1380 |
+
381 713
|
| 1381 |
+
570 353
|
| 1382 |
+
756 896
|
| 1383 |
+
388 793
|
| 1384 |
+
172 366
|
| 1385 |
+
464 612
|
| 1386 |
+
401 284
|
| 1387 |
+
260 261
|
| 1388 |
+
298 380
|
| 1389 |
+
680 503
|
| 1390 |
+
360 893
|
| 1391 |
+
299 286
|
| 1392 |
+
363 370
|
| 1393 |
+
318 982
|
| 1394 |
+
1350 315
|
| 1395 |
+
1646 342
|
| 1396 |
+
365 285
|
| 1397 |
+
279 643
|
| 1398 |
+
340 683
|
| 1399 |
+
285 323
|
| 1400 |
+
1082 476
|
| 1401 |
+
271 410
|
| 1402 |
+
481 151
|
| 1403 |
+
287 283
|
| 1404 |
+
492 301
|
| 1405 |
+
151 477
|
| 1406 |
+
951 897
|
| 1407 |
+
866 443
|
| 1408 |
+
334 176
|
| 1409 |
+
264 495
|
| 1410 |
+
718 281
|
| 1411 |
+
172 307
|
| 1412 |
+
262 303
|
| 1413 |
+
264 279
|
| 1414 |
+
315 872
|
| 1415 |
+
669 166
|
| 1416 |
+
453 307
|
| 1417 |
+
757 319
|
| 1418 |
+
168 349
|
| 1419 |
+
156 323
|
| 1420 |
+
622 261
|
| 1421 |
+
1672 604
|
| 1422 |
+
390 333
|
| 1423 |
+
739 346
|
| 1424 |
+
338 627
|
| 1425 |
+
586 679
|
| 1426 |
+
133 308
|
| 1427 |
+
335 295
|
| 1428 |
+
374 261
|
| 1429 |
+
44 329
|
| 1430 |
+
1254 308
|
| 1431 |
+
584 425
|
| 1432 |
+
320 301
|
| 1433 |
+
664 156
|
| 1434 |
+
957 486
|
| 1435 |
+
561 273
|
| 1436 |
+
303 285
|
| 1437 |
+
1105 578
|
| 1438 |
+
260 528
|
| 1439 |
+
173 616
|
| 1440 |
+
599 324
|
| 1441 |
+
564 281
|
| 1442 |
+
598 313
|
| 1443 |
+
810 363
|
| 1444 |
+
603 273
|
| 1445 |
+
277 553
|
| 1446 |
+
285 359
|
| 1447 |
+
277 164
|
| 1448 |
+
301 444
|
| 1449 |
+
621 958
|
| 1450 |
+
756 259
|
| 1451 |
+
1520 393
|
| 1452 |
+
133 395
|
| 1453 |
+
268 172
|
| 1454 |
+
134 533
|
| 1455 |
+
174 1523
|
| 1456 |
+
374 283
|
| 1457 |
+
156 1273
|
| 1458 |
+
256 152
|
| 1459 |
+
285 828
|
| 1460 |
+
298 647
|
| 1461 |
+
342 1343
|
| 1462 |
+
1369 643
|
| 1463 |
+
294 1171
|
| 1464 |
+
32 380
|
| 1465 |
+
260 619
|
| 1466 |
+
829 357
|
| 1467 |
+
380 874
|
| 1468 |
+
277 171
|
| 1469 |
+
166 272
|
| 1470 |
+
325 768
|
| 1471 |
+
1257 565
|
| 1472 |
+
1374 498
|
| 1473 |
+
268 378
|
| 1474 |
+
501 299
|
| 1475 |
+
561 778
|
| 1476 |
+
283 789
|
| 1477 |
+
272 414
|
| 1478 |
+
291 417
|
| 1479 |
+
311 362
|
| 1480 |
+
304 349
|
| 1481 |
+
262 641
|
| 1482 |
+
264 319
|
| 1483 |
+
350 379
|
| 1484 |
+
377 717
|
| 1485 |
+
482 901
|
| 1486 |
+
285 486
|
| 1487 |
+
316 273
|
| 1488 |
+
151 309
|
| 1489 |
+
133 834
|
| 1490 |
+
184 708
|
| 1491 |
+
657 407
|
| 1492 |
+
1395 476
|
| 1493 |
+
262 301
|
| 1494 |
+
32 1384
|
| 1495 |
+
815 1398
|
| 1496 |
+
672 262
|
| 1497 |
+
1038 697
|
| 1498 |
+
44 292
|
| 1499 |
+
1101 271
|
| 1500 |
+
671 425
|
| 1501 |
+
997 1401
|
| 1502 |
+
431 309
|
| 1503 |
+
44 361
|
| 1504 |
+
907 295
|
| 1505 |
+
998 307
|
| 1506 |
+
702 260
|
| 1507 |
+
164 1290
|
| 1508 |
+
302 367
|
| 1509 |
+
280 463
|
| 1510 |
+
143 1184
|
| 1511 |
+
275 261
|
| 1512 |
+
1413 743
|
| 1513 |
+
339 643
|
| 1514 |
+
274 299
|
| 1515 |
+
496 181
|
| 1516 |
+
1189 304
|
| 1517 |
+
288 175
|
| 1518 |
+
478 1418
|
| 1519 |
+
529 184
|
| 1520 |
+
264 1300
|
| 1521 |
+
294 385
|
| 1522 |
+
631 332
|
| 1523 |
+
181 1116
|
| 1524 |
+
271 385
|
| 1525 |
+
259 296
|
| 1526 |
+
1111 276
|
| 1527 |
+
156 963
|
| 1528 |
+
355 558
|
| 1529 |
+
1569 283
|
| 1530 |
+
1781 819
|
| 1531 |
+
172 298
|
| 1532 |
+
508 382
|
| 1533 |
+
294 134
|
| 1534 |
+
688 261
|
| 1535 |
+
350 348
|
| 1536 |
+
1008 840
|
| 1537 |
+
462 923
|
| 1538 |
+
321 181
|
| 1539 |
+
302 174
|
| 1540 |
+
168 842
|
| 1541 |
+
137 280
|
| 1542 |
+
302 387
|
| 1543 |
+
259 44
|
| 1544 |
+
182 505
|
| 1545 |
+
264 283
|
| 1546 |
+
351 333
|
| 1547 |
+
851 290
|
| 1548 |
+
1125 646
|
| 1549 |
+
1126 1127
|
| 1550 |
+
330 307
|
| 1551 |
+
294 182
|
| 1552 |
+
154 581
|
| 1553 |
+
1125 362
|
| 1554 |
+
1587 827
|
| 1555 |
+
285 274
|
| 1556 |
+
257 157
|
| 1557 |
+
357 273
|
| 1558 |
+
601 1451
|
| 1559 |
+
289 1595
|
| 1560 |
+
788 295
|
| 1561 |
+
143 1596
|
| 1562 |
+
445 184
|
| 1563 |
+
133 715
|
| 1564 |
+
408 1328
|
| 1565 |
+
660 285
|
| 1566 |
+
307 837
|
| 1567 |
+
315 568
|
| 1568 |
+
257 152
|
| 1569 |
+
311 277
|
| 1570 |
+
431 273
|
| 1571 |
+
344 270
|
| 1572 |
+
689 417
|
| 1573 |
+
512 1221
|
| 1574 |
+
372 261
|
| 1575 |
+
1139 876
|
| 1576 |
+
1462 265
|
| 1577 |
+
764 296
|
| 1578 |
+
453 261
|
| 1579 |
+
805 274
|
| 1580 |
+
501 399
|
| 1581 |
+
284 309
|
| 1582 |
+
691 366
|
| 1583 |
+
1609 1020
|
| 1584 |
+
170 450
|
| 1585 |
+
339 448
|
| 1586 |
+
170 414
|
| 1587 |
+
451 746
|
| 1588 |
+
348 260
|
| 1589 |
+
1075 283
|
| 1590 |
+
270 803
|
| 1591 |
+
333 454
|
| 1592 |
+
1220 1469
|
| 1593 |
+
310 163
|
| 1594 |
+
262 333
|
| 1595 |
+
533 304
|
| 1596 |
+
1187 274
|
| 1597 |
+
178 434
|
| 1598 |
+
448 349
|
| 1599 |
+
937 537
|
| 1600 |
+
856 1597
|
| 1601 |
+
276 300
|
| 1602 |
+
342 410
|
| 1603 |
+
264 589
|
| 1604 |
+
527 307
|
| 1605 |
+
961 399
|
| 1606 |
+
327 367
|
| 1607 |
+
258 153
|
| 1608 |
+
1627 1078
|
| 1609 |
+
406 273
|
| 1610 |
+
360 609
|
| 1611 |
+
272 352
|
| 1612 |
+
716 1216
|
| 1613 |
+
465 32
|
| 1614 |
+
895 274
|
| 1615 |
+
159 431
|
| 1616 |
+
1145 374
|
| 1617 |
+
1868 395
|
| 1618 |
+
257 343
|
| 1619 |
+
322 678
|
| 1620 |
+
172 1477
|
| 1621 |
+
580 283
|
| 1622 |
+
178 260
|
| 1623 |
+
598 505
|
| 1624 |
+
1875 616
|
| 1625 |
+
719 388
|
| 1626 |
+
1480 1047
|
| 1627 |
+
260 303
|
| 1628 |
+
262 860
|
| 1629 |
+
308 299
|
| 1630 |
+
267 137
|
| 1631 |
+
168 434
|
| 1632 |
+
270 657
|
| 1633 |
+
907 378
|
| 1634 |
+
165 1643
|
| 1635 |
+
168 550
|
| 1636 |
+
164 475
|
| 1637 |
+
341 285
|
| 1638 |
+
891 1351
|
| 1639 |
+
402 1650
|
| 1640 |
+
134 1181
|
| 1641 |
+
523 829
|
| 1642 |
+
1893 383
|
| 1643 |
+
322 1113
|
| 1644 |
+
592 323
|
| 1645 |
+
664 687
|
| 1646 |
+
392 576
|
| 1647 |
+
331 304
|
| 1648 |
+
280 780
|
| 1649 |
+
334 182
|
| 1650 |
+
275 285
|
| 1651 |
+
610 469
|
| 1652 |
+
278 688
|
| 1653 |
+
493 309
|
| 1654 |
+
561 284
|
| 1655 |
+
388 303
|
| 1656 |
+
1907 1075
|
| 1657 |
+
370 280
|
| 1658 |
+
267 163
|
| 1659 |
+
273 334
|
| 1660 |
+
261 1493
|
| 1661 |
+
535 1240
|
| 1662 |
+
1357 1668
|
| 1663 |
+
1914 298
|
| 1664 |
+
1915 463
|
| 1665 |
+
1916 388
|
| 1666 |
+
340 1640
|
| 1667 |
+
1918 1445
|
| 1668 |
+
370 430
|
| 1669 |
+
270 181
|
| 1670 |
+
318 376
|
| 1671 |
+
327 174
|
| 1672 |
+
170 868
|
| 1673 |
+
261 757
|
| 1674 |
+
513 629
|
| 1675 |
+
427 808
|
| 1676 |
+
1173 1255
|
| 1677 |
+
1686 376
|
| 1678 |
+
274 283
|
| 1679 |
+
279 1508
|
| 1680 |
+
820 301
|
| 1681 |
+
285 416
|
| 1682 |
+
271 176
|
| 1683 |
+
433 532
|
| 1684 |
+
645 281
|
| 1685 |
+
1370 1239
|
| 1686 |
+
310 154
|
| 1687 |
+
345 349
|
| 1688 |
+
349 484
|
| 1689 |
+
261 995
|
| 1690 |
+
1694 1084
|
| 1691 |
+
154 390
|
| 1692 |
+
698 449
|
| 1693 |
+
319 396
|
| 1694 |
+
276 170
|
| 1695 |
+
304 787
|
| 1696 |
+
277 468
|
| 1697 |
+
1518 448
|
| 1698 |
+
279 1023
|
| 1699 |
+
32 422
|
| 1700 |
+
161 1095
|
| 1701 |
+
839 330
|
| 1702 |
+
277 410
|
| 1703 |
+
504 1095
|
| 1704 |
+
291 352
|
| 1705 |
+
318 991
|
| 1706 |
+
1193 1707
|
| 1707 |
+
294 1167
|
| 1708 |
+
702 379
|
| 1709 |
+
1960 862
|
| 1710 |
+
843 1712
|
| 1711 |
+
501 1166
|
| 1712 |
+
455 363
|
| 1713 |
+
350 427
|
| 1714 |
+
347 397
|
| 1715 |
+
280 292
|
| 1716 |
+
564 444
|
| 1717 |
+
373 301
|
| 1718 |
+
262 323
|
| 1719 |
+
487 562
|
| 1720 |
+
32 325
|
| 1721 |
+
1383 581
|
| 1722 |
+
331 429
|
| 1723 |
+
1718 1719
|
| 1724 |
+
156 284
|
| 1725 |
+
329 284
|
| 1726 |
+
178 459
|
| 1727 |
+
428 619
|
| 1728 |
+
1514 1347
|
| 1729 |
+
272 555
|
| 1730 |
+
380 336
|
| 1731 |
+
10 256
|
| 1732 |
+
385 1638
|
| 1733 |
+
321 182
|
| 1734 |
+
318 868
|
| 1735 |
+
1225 335
|
| 1736 |
+
1276 412
|
| 1737 |
+
171 1031
|
| 1738 |
+
393 648
|
| 1739 |
+
609 276
|
| 1740 |
+
360 1375
|
| 1741 |
+
1704 1728
|
| 1742 |
+
172 1275
|
| 1743 |
+
403 638
|
| 1744 |
+
737 525
|
| 1745 |
+
325 307
|
| 1746 |
+
291 279
|
| 1747 |
+
285 403
|
| 1748 |
+
280 949
|
| 1749 |
+
170 991
|
| 1750 |
+
171 1219
|
| 1751 |
+
988 776
|
| 1752 |
+
1381 407
|
| 1753 |
+
349 407
|
| 1754 |
+
165 574
|
| 1755 |
+
154 1159
|
| 1756 |
+
989 337
|
| 1757 |
+
279 287
|
| 1758 |
+
2009 641
|
| 1759 |
+
508 400
|
| 1760 |
+
162 642
|
| 1761 |
+
1320 1515
|
| 1762 |
+
323 285
|
| 1763 |
+
403 165
|
| 1764 |
+
319 1284
|
| 1765 |
+
501 975
|
| 1766 |
+
577 368
|
| 1767 |
+
736 32
|
| 1768 |
+
172 1279
|
| 1769 |
+
302 300
|
| 1770 |
+
314 334
|
| 1771 |
+
1399 455
|
| 1772 |
+
176 341
|
| 1773 |
+
724 1551
|
| 1774 |
+
288 152
|
| 1775 |
+
300 556
|
| 1776 |
+
1282 490
|
| 1777 |
+
326 140
|
| 1778 |
+
338 952
|
| 1779 |
+
287 308
|
| 1780 |
+
1758 1555
|
| 1781 |
+
276 436
|
| 1782 |
+
653 912
|
| 1783 |
+
381 369
|
| 1784 |
+
388 273
|
| 1785 |
+
334 133
|
| 1786 |
+
261 327
|
| 1787 |
+
819 491
|
| 1788 |
+
398 586
|
| 1789 |
+
467 1181
|
| 1790 |
+
273 401
|
| 1791 |
+
597 260
|
| 1792 |
+
345 632
|
| 1793 |
+
357 689
|
| 1794 |
+
277 161
|
| 1795 |
+
676 302
|
| 1796 |
+
44 350
|
| 1797 |
+
875 274
|
| 1798 |
+
460 425
|
| 1799 |
+
1187 273
|
| 1800 |
+
623 371
|
| 1801 |
+
284 286
|
| 1802 |
+
321 387
|
| 1803 |
+
322 170
|
| 1804 |
+
256 155
|
| 1805 |
+
539 371
|
| 1806 |
+
744 332
|
| 1807 |
+
335 305
|
| 1808 |
+
882 822
|
| 1809 |
+
285 332
|
| 1810 |
+
291 317
|
| 1811 |
+
397 345
|
| 1812 |
+
288 543
|
| 1813 |
+
280 271
|
| 1814 |
+
875 363
|
| 1815 |
+
694 333
|
| 1816 |
+
325 262
|
| 1817 |
+
543 1433
|
| 1818 |
+
322 176
|
| 1819 |
+
416 333
|
| 1820 |
+
377 384
|
| 1821 |
+
398 607
|
| 1822 |
+
1298 1435
|
| 1823 |
+
320 424
|
| 1824 |
+
294 344
|
| 1825 |
+
338 391
|
| 1826 |
+
322 595
|
| 1827 |
+
478 476
|
| 1828 |
+
598 319
|
| 1829 |
+
471 1059
|
| 1830 |
+
1012 884
|
| 1831 |
+
350 351
|
| 1832 |
+
264 285
|
| 1833 |
+
271 134
|
| 1834 |
+
277 378
|
| 1835 |
+
1796 313
|
| 1836 |
+
2087 851
|
| 1837 |
+
45 298
|
| 1838 |
+
171 1580
|
| 1839 |
+
338 411
|
| 1840 |
+
283 328
|
| 1841 |
+
1800 965
|
| 1842 |
+
341 363
|
| 1843 |
+
261 283
|
| 1844 |
+
331 625
|
| 1845 |
+
171 1582
|
| 1846 |
+
392 770
|
| 1847 |
+
467 309
|
| 1848 |
+
313 154
|
| 1849 |
+
523 399
|
| 1850 |
+
396 499
|
| 1851 |
+
150 285
|
| 1852 |
+
735 278
|
| 1853 |
+
659 181
|
| 1854 |
+
270 166
|
| 1855 |
+
772 260
|
| 1856 |
+
423 301
|
| 1857 |
+
259 39
|
| 1858 |
+
274 726
|
| 1859 |
+
2110 335
|
| 1860 |
+
324 449
|
| 1861 |
+
1322 603
|
| 1862 |
+
2113 1809
|
| 1863 |
+
1449 1594
|
| 1864 |
+
392 262
|
| 1865 |
+
178 1133
|
| 1866 |
+
260 294
|
| 1867 |
+
581 642
|
| 1868 |
+
299 379
|
| 1869 |
+
325 587
|
| 1870 |
+
628 1600
|
| 1871 |
+
2122 448
|
| 1872 |
+
319 353
|
| 1873 |
+
344 1457
|
| 1874 |
+
467 303
|
| 1875 |
+
747 615
|
| 1876 |
+
519 312
|
| 1877 |
+
1826 635
|
| 1878 |
+
643 308
|
| 1879 |
+
1180 1436
|
| 1880 |
+
1045 379
|
| 1881 |
+
1468 828
|
| 1882 |
+
348 438
|
| 1883 |
+
736 395
|
| 1884 |
+
44 487
|
| 1885 |
+
306 183
|
| 1886 |
+
559 184
|
| 1887 |
+
966 324
|
| 1888 |
+
977 613
|
| 1889 |
+
1005 936
|
| 1890 |
+
314 512
|
| 1891 |
+
331 1338
|
| 1892 |
+
1066 290
|
| 1893 |
+
700 265
|
| 1894 |
+
530 308
|
| 1895 |
+
2146 530
|
| 1896 |
+
894 262
|
| 1897 |
+
181 1623
|
| 1898 |
+
452 1206
|
| 1899 |
+
2150 363
|
| 1900 |
+
521 447
|
| 1901 |
+
479 296
|
| 1902 |
+
307 274
|
| 1903 |
+
937 312
|
| 1904 |
+
156 297
|
| 1905 |
+
706 333
|
| 1906 |
+
2157 1864
|
| 1907 |
+
172 328
|
| 1908 |
+
523 390
|
| 1909 |
+
1344 680
|
| 1910 |
+
656 749
|
| 1911 |
+
311 1475
|
| 1912 |
+
1867 715
|
| 1913 |
+
2164 1869
|
| 1914 |
+
341 537
|
| 1915 |
+
133 310
|
| 1916 |
+
170 363
|
| 1917 |
+
279 518
|
| 1918 |
+
406 438
|
| 1919 |
+
170 1479
|
| 1920 |
+
467 477
|
| 1921 |
+
691 1124
|
| 1922 |
+
365 330
|
| 1923 |
+
181 381
|
| 1924 |
+
292 532
|
| 1925 |
+
1026 1028
|
| 1926 |
+
1882 634
|
| 1927 |
+
292 394
|
| 1928 |
+
702 1884
|
| 1929 |
+
698 45
|
| 1930 |
+
348 667
|
| 1931 |
+
382 707
|
| 1932 |
+
432 301
|
| 1933 |
+
284 548
|
| 1934 |
+
152 381
|
| 1935 |
+
329 1891
|
| 1936 |
+
185 396
|
| 1937 |
+
582 382
|
| 1938 |
+
461 305
|
| 1939 |
+
365 1473
|
| 1940 |
+
261 399
|
| 1941 |
+
178 609
|
| 1942 |
+
44 264
|
| 1943 |
+
916 534
|
| 1944 |
+
1306 299
|
| 1945 |
+
279 475
|
| 1946 |
+
2197 357
|
| 1947 |
+
1592 630
|
| 1948 |
+
168 1248
|
| 1949 |
+
185 447
|
| 1950 |
+
1362 528
|
| 1951 |
+
275 333
|
| 1952 |
+
269 185
|
| 1953 |
+
371 170
|
| 1954 |
+
164 1291
|
| 1955 |
+
271 738
|
| 1956 |
+
454 371
|
| 1957 |
+
172 412
|
| 1958 |
+
899 321
|
| 1959 |
+
288 150
|
| 1960 |
+
257 986
|
| 1961 |
+
370 260
|
| 1962 |
+
327 164
|
| 1963 |
+
391 376
|
| 1964 |
+
175 1913
|
| 1965 |
+
732 271
|
| 1966 |
+
798 164
|
| 1967 |
+
2218 265
|
| 1968 |
+
425 184
|
| 1969 |
+
334 151
|
| 1970 |
+
810 969
|
| 1971 |
+
570 503
|
| 1972 |
+
867 970
|
| 1973 |
+
676 294
|
| 1974 |
+
1084 319
|
| 1975 |
+
285 609
|
| 1976 |
+
458 274
|
| 1977 |
+
165 1085
|
| 1978 |
+
1495 1919
|
| 1979 |
+
397 661
|
| 1980 |
+
276 410
|
| 1981 |
+
279 897
|
| 1982 |
+
424 387
|
| 1983 |
+
164 284
|
| 1984 |
+
408 261
|
| 1985 |
+
361 279
|
| 1986 |
+
1158 274
|
| 1987 |
+
134 308
|
| 1988 |
+
1160 1152
|
| 1989 |
+
266 773
|
| 1990 |
+
487 337
|
| 1991 |
+
287 310
|
| 1992 |
+
277 176
|
| 1993 |
+
1038 1925
|
| 1994 |
+
404 277
|
| 1995 |
+
137 354
|
| 1996 |
+
292 584
|
| 1997 |
+
320 811
|
| 1998 |
+
277 182
|
| 1999 |
+
1071 479
|
| 2000 |
+
156 285
|
| 2001 |
+
270 386
|
| 2002 |
+
684 460
|
| 2003 |
+
1321 640
|
| 2004 |
+
172 602
|
| 2005 |
+
143 323
|
| 2006 |
+
453 499
|
| 2007 |
+
2258 359
|
| 2008 |
+
1929 319
|
| 2009 |
+
1405 1690
|
| 2010 |
+
1692 352
|
| 2011 |
+
765 184
|
| 2012 |
+
554 271
|
| 2013 |
+
313 167
|
| 2014 |
+
324 693
|
| 2015 |
+
294 154
|
| 2016 |
+
320 707
|
| 2017 |
+
185 414
|
| 2018 |
+
411 419
|
| 2019 |
+
361 1371
|
| 2020 |
+
264 834
|
| 2021 |
+
404 633
|
| 2022 |
+
352 808
|
| 2023 |
+
977 384
|
| 2024 |
+
398 401
|
| 2025 |
+
1162 264
|
| 2026 |
+
2277 402
|
| 2027 |
+
2278 1688
|
| 2028 |
+
304 576
|
| 2029 |
+
361 1516
|
| 2030 |
+
276 156
|
| 2031 |
+
338 261
|
| 2032 |
+
325 1163
|
| 2033 |
+
1093 295
|
| 2034 |
+
311 1517
|
| 2035 |
+
318 505
|
| 2036 |
+
388 427
|
| 2037 |
+
292 753
|
| 2038 |
+
384 277
|
| 2039 |
+
665 299
|
| 2040 |
+
393 666
|
| 2041 |
+
301 325
|
| 2042 |
+
185 362
|
| 2043 |
+
705 298
|
| 2044 |
+
426 166
|
| 2045 |
+
353 359
|
| 2046 |
+
772 812
|
| 2047 |
+
277 476
|
| 2048 |
+
327 1709
|
| 2049 |
+
184 1711
|
| 2050 |
+
390 383
|
| 2051 |
+
800 1378
|
| 2052 |
+
321 404
|
| 2053 |
+
650 274
|
| 2054 |
+
450 396
|
| 2055 |
+
182 1528
|
| 2056 |
+
2307 384
|
| 2057 |
+
450 359
|
| 2058 |
+
257 905
|
| 2059 |
+
504 286
|
| 2060 |
+
403 664
|
| 2061 |
+
582 400
|
| 2062 |
+
159 1511
|
| 2063 |
+
650 283
|
| 2064 |
+
620 924
|
| 2065 |
+
2316 739
|
| 2066 |
+
488 300
|
| 2067 |
+
292 963
|
| 2068 |
+
2319 1303
|
| 2069 |
+
325 366
|
| 2070 |
+
339 933
|
| 2071 |
+
601 353
|
| 2072 |
+
564 422
|
| 2073 |
+
159 359
|
| 2074 |
+
151 1641
|
| 2075 |
+
32 1205
|
| 2076 |
+
2327 992
|
| 2077 |
+
32 1099
|
| 2078 |
+
10 10
|
| 2079 |
+
298 290
|
| 2080 |
+
397 859
|
| 2081 |
+
414 345
|
| 2082 |
+
602 260
|
| 2083 |
+
176 696
|
| 2084 |
+
338 715
|
| 2085 |
+
379 285
|
| 2086 |
+
451 261
|
| 2087 |
+
815 1065
|
| 2088 |
+
154 357
|
| 2089 |
+
270 168
|
| 2090 |
+
815 460
|
| 2091 |
+
329 347
|
| 2092 |
+
325 1275
|
| 2093 |
+
504 1535
|
| 2094 |
+
813 536
|
| 2095 |
+
314 46
|
| 2096 |
+
335 156
|
| 2097 |
+
429 1002
|
| 2098 |
+
265 417
|
| 2099 |
+
681 1065
|
| 2100 |
+
1980 273
|
| 2101 |
+
45 325
|
| 2102 |
+
133 1269
|
| 2103 |
+
170 396
|
| 2104 |
+
331 381
|
| 2105 |
+
379 286
|
| 2106 |
+
1263 783
|
| 2107 |
+
2358 355
|
| 2108 |
+
314 773
|
| 2109 |
+
298 953
|
| 2110 |
+
277 570
|
| 2111 |
+
1725 295
|
| 2112 |
+
279 341
|
| 2113 |
+
2364 304
|
| 2114 |
+
1989 593
|
| 2115 |
+
701 136
|
| 2116 |
+
1302 307
|
| 2117 |
+
736 376
|
| 2118 |
+
325 1169
|
| 2119 |
+
173 729
|
| 2120 |
+
175 291
|
| 2121 |
+
554 277
|
| 2122 |
+
647 1202
|
| 2123 |
+
762 1035
|
| 2124 |
+
1499 617
|
| 2125 |
+
338 330
|
| 2126 |
+
718 1533
|
| 2127 |
+
2378 273
|
| 2128 |
+
133 493
|
| 2129 |
+
331 617
|
| 2130 |
+
151 586
|
| 2131 |
+
795 699
|
| 2132 |
+
174 1669
|
| 2133 |
+
264 1221
|
| 2134 |
+
465 264
|
| 2135 |
+
165 1001
|
| 2136 |
+
1205 1541
|
| 2137 |
+
812 581
|
| 2138 |
+
330 357
|
| 2139 |
+
510 615
|
| 2140 |
+
133 480
|
| 2141 |
+
267 138
|
| 2142 |
+
698 273
|
| 2143 |
+
134 283
|
| 2144 |
+
362 571
|
| 2145 |
+
261 273
|
| 2146 |
+
338 280
|
| 2147 |
+
932 429
|
| 2148 |
+
284 862
|
| 2149 |
+
835 979
|
| 2150 |
+
322 166
|
| 2151 |
+
1391 566
|
| 2152 |
+
1426 858
|
| 2153 |
+
556 284
|
| 2154 |
+
174 1498
|
| 2155 |
+
258 157
|
| 2156 |
+
168 506
|
| 2157 |
+
574 329
|
| 2158 |
+
709 273
|
| 2159 |
+
304 481
|
| 2160 |
+
170 429
|
| 2161 |
+
370 478
|
| 2162 |
+
790 1268
|
| 2163 |
+
338 283
|
| 2164 |
+
327 173
|
| 2165 |
+
167 560
|
| 2166 |
+
436 855
|
| 2167 |
+
257 723
|
| 2168 |
+
980 604
|
| 2169 |
+
385 1394
|
| 2170 |
+
150 572
|
| 2171 |
+
341 276
|
| 2172 |
+
403 166
|
| 2173 |
+
758 868
|
| 2174 |
+
367 419
|
| 2175 |
+
601 721
|
| 2176 |
+
510 1729
|
| 2177 |
+
170 725
|
| 2178 |
+
702 1720
|
| 2179 |
+
2430 744
|
| 2180 |
+
444 283
|
| 2181 |
+
262 393
|
| 2182 |
+
741 32
|
| 2183 |
+
1005 1476
|
| 2184 |
+
948 371
|
| 2185 |
+
691 336
|
| 2186 |
+
504 2014
|
| 2187 |
+
361 384
|
| 2188 |
+
2439 490
|
| 2189 |
+
1466 419
|
| 2190 |
+
436 869
|
| 2191 |
+
1355 358
|
| 2192 |
+
536 314
|
| 2193 |
+
915 1730
|
| 2194 |
+
1532 662
|
| 2195 |
+
536 292
|
| 2196 |
+
2023 371
|
| 2197 |
+
1101 2025
|
| 2198 |
+
390 395
|
| 2199 |
+
2026 838
|
| 2200 |
+
294 1752
|
| 2201 |
+
582 699
|
| 2202 |
+
756 1756
|
| 2203 |
+
541 369
|
| 2204 |
+
154 1284
|
| 2205 |
+
272 1403
|
| 2206 |
+
452 463
|
| 2207 |
+
2458 396
|
| 2208 |
+
585 1404
|
| 2209 |
+
399 362
|
| 2210 |
+
372 2035
|
| 2211 |
+
277 367
|
| 2212 |
+
1558 1406
|
| 2213 |
+
361 259
|
| 2214 |
+
391 273
|
| 2215 |
+
350 1182
|
| 2216 |
+
304 319
|
| 2217 |
+
524 1107
|
| 2218 |
+
689 409
|
| 2219 |
+
281 337
|
| 2220 |
+
1761 1183
|
| 2221 |
+
328 335
|
| 2222 |
+
311 477
|
| 2223 |
+
303 273
|
| 2224 |
+
2045 285
|
| 2225 |
+
1185 1411
|
| 2226 |
+
1110 419
|
| 2227 |
+
292 552
|
| 2228 |
+
2479 1294
|
| 2229 |
+
381 332
|
| 2230 |
+
361 390
|
| 2231 |
+
761 382
|
| 2232 |
+
135 1768
|
| 2233 |
+
399 1004
|
| 2234 |
+
339 620
|
| 2235 |
+
322 150
|
| 2236 |
+
294 367
|
| 2237 |
+
493 273
|
| 2238 |
+
150 959
|
| 2239 |
+
1112 919
|
| 2240 |
+
544 299
|
| 2241 |
+
271 173
|
| 2242 |
+
1773 728
|
| 2243 |
+
277 686
|
| 2244 |
+
960 363
|
| 2245 |
+
635 317
|
| 2246 |
+
473 730
|
| 2247 |
+
174 317
|
| 2248 |
+
284 280
|
| 2249 |
+
1779 1425
|
| 2250 |
+
2501 299
|
| 2251 |
+
2502 399
|
| 2252 |
+
2503 284
|
| 2253 |
+
1194 484
|
| 2254 |
+
406 1780
|
| 2255 |
+
1196 302
|
| 2256 |
+
307 2064
|
| 2257 |
+
2508 359
|
| 2258 |
+
172 607
|
| 2259 |
+
745 491
|
| 2260 |
+
472 609
|
| 2261 |
+
322 367
|
| 2262 |
+
1783 285
|
| 2263 |
+
292 848
|
| 2264 |
+
294 1200
|
| 2265 |
+
961 285
|
| 2266 |
+
284 655
|
| 2267 |
+
501 602
|
| 2268 |
+
2519 332
|
| 2269 |
+
957 396
|
| 2270 |
+
436 280
|
| 2271 |
+
318 396
|
| 2272 |
+
311 842
|
| 2273 |
+
2524 764
|
| 2274 |
+
965 1202
|
| 2275 |
+
1112 560
|
| 2276 |
+
298 371
|
| 2277 |
+
1311 445
|
| 2278 |
+
732 460
|
| 2279 |
+
1281 381
|
| 2280 |
+
925 449
|
| 2281 |
+
614 1774
|
| 2282 |
+
138 303
|
| 2283 |
+
184 354
|
| 2284 |
+
1793 307
|
| 2285 |
+
267 160
|
| 2286 |
+
450 405
|
| 2287 |
+
2538 819
|
| 2288 |
+
802 1115
|
| 2289 |
+
356 657
|
| 2290 |
+
569 315
|
| 2291 |
+
328 1436
|
| 2292 |
+
557 596
|
| 2293 |
+
286 614
|
| 2294 |
+
310 164
|
| 2295 |
+
398 768
|
| 2296 |
+
337 302
|
| 2297 |
+
1578 284
|
| 2298 |
+
274 571
|
| 2299 |
+
175 1124
|
| 2300 |
+
277 800
|
| 2301 |
+
1061 1062
|
| 2302 |
+
2091 369
|
| 2303 |
+
259 413
|
| 2304 |
+
322 386
|
| 2305 |
+
1799 2092
|
| 2306 |
+
325 342
|
| 2307 |
+
1581 416
|
| 2308 |
+
524 2094
|
| 2309 |
+
494 801
|
| 2310 |
+
288 165
|
| 2311 |
+
2097 340
|
| 2312 |
+
334 970
|
| 2313 |
+
677 713
|
| 2314 |
+
379 329
|
| 2315 |
+
348 357
|
| 2316 |
+
930 1571
|
| 2317 |
+
321 367
|
| 2318 |
+
1805 962
|
| 2319 |
+
391 310
|
| 2320 |
+
259 391
|
| 2321 |
+
915 789
|
| 2322 |
+
524 1806
|
| 2323 |
+
350 353
|
| 2324 |
+
1111 273
|
| 2325 |
+
501 874
|
| 2326 |
+
1589 362
|
| 2327 |
+
2578 359
|
| 2328 |
+
44 377
|
| 2329 |
+
425 164
|
| 2330 |
+
791 369
|
| 2331 |
+
168 1593
|
| 2332 |
+
339 571
|
| 2333 |
+
181 2114
|
| 2334 |
+
1447 315
|
| 2335 |
+
1448 647
|
| 2336 |
+
2115 1067
|
| 2337 |
+
2588 1450
|
| 2338 |
+
257 1325
|
| 2339 |
+
1047 1326
|
| 2340 |
+
270 150
|
| 2341 |
+
318 542
|
| 2342 |
+
424 161
|
| 2343 |
+
1812 1327
|
| 2344 |
+
269 378
|
| 2345 |
+
184 447
|
| 2346 |
+
754 302
|
| 2347 |
+
360 1817
|
| 2348 |
+
1599 953
|
| 2349 |
+
2600 1818
|
| 2350 |
+
292 447
|
| 2351 |
+
521 354
|
| 2352 |
+
1827 274
|
| 2353 |
+
976 1310
|
| 2354 |
+
325 1828
|
| 2355 |
+
517 466
|
| 2356 |
+
1461 297
|
| 2357 |
+
288 157
|
| 2358 |
+
289 806
|
| 2359 |
+
168 279
|
| 2360 |
+
678 704
|
| 2361 |
+
1332 630
|
| 2362 |
+
526 1217
|
| 2363 |
+
1608 757
|
| 2364 |
+
892 357
|
| 2365 |
+
2133 528
|
| 2366 |
+
561 280
|
| 2367 |
+
528 278
|
| 2368 |
+
292 581
|
| 2369 |
+
1143 278
|
| 2370 |
+
918 260
|
| 2371 |
+
314 521
|
| 2372 |
+
1305 1618
|
| 2373 |
+
928 367
|
| 2374 |
+
601 503
|
| 2375 |
+
313 173
|
| 2376 |
+
351 1847
|
| 2377 |
+
667 268
|
| 2378 |
+
2629 289
|
| 2379 |
+
2630 1076
|
| 2380 |
+
649 557
|
| 2381 |
+
386 133
|
| 2382 |
+
455 286
|
| 2383 |
+
754 1852
|
| 2384 |
+
1045 2144
|
| 2385 |
+
408 505
|
| 2386 |
+
2637 304
|
| 2387 |
+
312 334
|
| 2388 |
+
311 368
|
| 2389 |
+
138 641
|
| 2390 |
+
2641 1754
|
| 2391 |
+
519 1000
|
| 2392 |
+
550 616
|
| 2393 |
+
491 387
|
| 2394 |
+
151 2147
|
| 2395 |
+
1230 914
|
| 2396 |
+
1854 174
|
| 2397 |
+
1465 1310
|
| 2398 |
+
360 260
|
| 2399 |
+
2151 377
|
| 2400 |
+
133 309
|
| 2401 |
+
598 1066
|
| 2402 |
+
2653 394
|
| 2403 |
+
181 297
|
| 2404 |
+
164 717
|
| 2405 |
+
368 292
|
| 2406 |
+
912 1121
|
| 2407 |
+
385 1863
|
| 2408 |
+
2659 1629
|
| 2409 |
+
275 634
|
| 2410 |
+
518 271
|
| 2411 |
+
1825 1134
|
| 2412 |
+
270 468
|
| 2413 |
+
284 715
|
| 2414 |
+
288 171
|
| 2415 |
+
1079 1632
|
| 2416 |
+
268 171
|
| 2417 |
+
413 307
|
| 2418 |
+
2669 939
|
| 2419 |
+
294 1759
|
| 2420 |
+
681 1016
|
| 2421 |
+
320 688
|
| 2422 |
+
261 724
|
| 2423 |
+
431 274
|
| 2424 |
+
658 593
|
| 2425 |
+
445 171
|
| 2426 |
+
361 1410
|
| 2427 |
+
264 416
|
| 2428 |
+
178 1635
|
| 2429 |
+
314 666
|
| 2430 |
+
555 339
|
| 2431 |
+
438 751
|
| 2432 |
+
377 272
|
| 2433 |
+
291 611
|
| 2434 |
+
2685 265
|
| 2435 |
+
271 1195
|
| 2436 |
+
360 1635
|
| 2437 |
+
262 414
|
| 2438 |
+
345 717
|
| 2439 |
+
513 361
|
| 2440 |
+
1024 291
|
| 2441 |
+
1602 592
|
| 2442 |
+
462 1148
|
| 2443 |
+
1877 371
|
| 2444 |
+
137 383
|
| 2445 |
+
292 539
|
| 2446 |
+
2175 1239
|
| 2447 |
+
608 447
|
| 2448 |
+
335 154
|
| 2449 |
+
292 560
|
| 2450 |
+
330 265
|
| 2451 |
+
172 658
|
| 2452 |
+
2703 1881
|
| 2453 |
+
2704 2178
|
| 2454 |
+
1022 379
|
| 2455 |
+
1599 486
|
| 2456 |
+
2707 454
|
| 2457 |
+
382 521
|
| 2458 |
+
329 1242
|
| 2459 |
+
1642 1080
|
| 2460 |
+
2181 354
|
| 2461 |
+
2712 2182
|
| 2462 |
+
1439 610
|
| 2463 |
+
317 401
|
| 2464 |
+
962 305
|
| 2465 |
+
287 785
|
| 2466 |
+
2717 368
|
| 2467 |
+
261 623
|
| 2468 |
+
1886 276
|
| 2469 |
+
345 859
|
| 2470 |
+
531 458
|
| 2471 |
+
302 1634
|
| 2472 |
+
178 535
|
| 2473 |
+
168 477
|
| 2474 |
+
1054 291
|
| 2475 |
+
349 632
|
| 2476 |
+
863 274
|
| 2477 |
+
485 363
|
| 2478 |
+
2729 1352
|
| 2479 |
+
1345 324
|
| 2480 |
+
133 1027
|
| 2481 |
+
438 166
|
| 2482 |
+
424 738
|
| 2483 |
+
553 886
|
| 2484 |
+
2735 1652
|
| 2485 |
+
653 1874
|
| 2486 |
+
324 425
|
| 2487 |
+
423 659
|
| 2488 |
+
507 271
|
| 2489 |
+
1892 274
|
| 2490 |
+
273 933
|
| 2491 |
+
2742 391
|
| 2492 |
+
2743 469
|
| 2493 |
+
269 163
|
| 2494 |
+
492 688
|
| 2495 |
+
984 476
|
| 2496 |
+
329 1441
|
| 2497 |
+
610 273
|
| 2498 |
+
548 453
|
| 2499 |
+
154 284
|
| 2500 |
+
262 525
|
| 2501 |
+
181 719
|
| 2502 |
+
315 274
|
| 2503 |
+
2754 265
|
| 2504 |
+
313 637
|
| 2505 |
+
292 518
|
| 2506 |
+
172 1900
|
| 2507 |
+
926 985
|
| 2508 |
+
334 134
|
| 2509 |
+
298 286
|
| 2510 |
+
1655 862
|
| 2511 |
+
1179 924
|
| 2512 |
+
1190 283
|
| 2513 |
+
320 521
|
| 2514 |
+
361 452
|
| 2515 |
+
2766 299
|
| 2516 |
+
503 745
|
| 2517 |
+
1906 593
|
| 2518 |
+
495 322
|
| 2519 |
+
918 784
|
| 2520 |
+
388 308
|
| 2521 |
+
864 279
|
| 2522 |
+
280 704
|
| 2523 |
+
484 529
|
| 2524 |
+
1637 387
|
| 2525 |
+
337 491
|
| 2526 |
+
304 504
|
| 2527 |
+
2778 357
|
| 2528 |
+
1801 630
|
| 2529 |
+
603 581
|
| 2530 |
+
725 284
|
| 2531 |
+
789 1256
|
| 2532 |
+
438 1062
|
| 2533 |
+
343 713
|
| 2534 |
+
134 340
|
| 2535 |
+
272 631
|
| 2536 |
+
585 184
|
| 2537 |
+
134 285
|
| 2538 |
+
1218 464
|
| 2539 |
+
467 261
|
| 2540 |
+
300 1490
|
| 2541 |
+
1917 445
|
| 2542 |
+
792 557
|
| 2543 |
+
523 285
|
| 2544 |
+
524 274
|
| 2545 |
+
908 315
|
| 2546 |
+
261 366
|
| 2547 |
+
271 143
|
| 2548 |
+
531 317
|
| 2549 |
+
512 319
|
| 2550 |
+
262 39
|
| 2551 |
+
262 568
|
| 2552 |
+
165 259
|
| 2553 |
+
1316 807
|
| 2554 |
+
151 841
|
| 2555 |
+
272 652
|
| 2556 |
+
1797 1674
|
| 2557 |
+
1499 1675
|
| 2558 |
+
354 262
|
| 2559 |
+
44 462
|
| 2560 |
+
450 291
|
| 2561 |
+
277 135
|
| 2562 |
+
361 328
|
| 2563 |
+
272 565
|
| 2564 |
+
2815 286
|
| 2565 |
+
342 166
|
| 2566 |
+
1676 528
|
| 2567 |
+
2239 877
|
| 2568 |
+
537 300
|
| 2569 |
+
344 713
|
| 2570 |
+
284 379
|
| 2571 |
+
519 1238
|
| 2572 |
+
305 184
|
| 2573 |
+
1437 280
|
| 2574 |
+
402 280
|
| 2575 |
+
1872 1136
|
| 2576 |
+
259 860
|
| 2577 |
+
261 280
|
| 2578 |
+
924 531
|
| 2579 |
+
185 1680
|
| 2580 |
+
2245 847
|
| 2581 |
+
385 1889
|
| 2582 |
+
2833 363
|
| 2583 |
+
154 307
|
| 2584 |
+
878 1027
|
| 2585 |
+
164 801
|
| 2586 |
+
311 1248
|
| 2587 |
+
776 707
|
| 2588 |
+
1128 389
|
| 2589 |
+
349 566
|
| 2590 |
+
527 353
|
| 2591 |
+
598 355
|
| 2592 |
+
906 278
|
| 2593 |
+
852 818
|
| 2594 |
+
461 570
|
| 2595 |
+
2252 330
|
| 2596 |
+
765 1682
|
| 2597 |
+
325 752
|
| 2598 |
+
151 458
|
| 2599 |
+
380 719
|
| 2600 |
+
900 281
|
| 2601 |
+
893 1080
|
| 2602 |
+
763 1770
|
| 2603 |
+
308 335
|
| 2604 |
+
1685 328
|
| 2605 |
+
259 568
|
| 2606 |
+
493 272
|
| 2607 |
+
479 521
|
| 2608 |
+
133 274
|
| 2609 |
+
2136 1933
|
| 2610 |
+
419 276
|
| 2611 |
+
1090 387
|
| 2612 |
+
1334 278
|
| 2613 |
+
592 261
|
| 2614 |
+
307 319
|
| 2615 |
+
1364 290
|
| 2616 |
+
1581 541
|
| 2617 |
+
334 170
|
| 2618 |
+
1510 279
|
| 2619 |
+
1115 321
|
| 2620 |
+
265 1901
|
| 2621 |
+
467 1207
|
| 2622 |
+
1226 46
|
| 2623 |
+
166 297
|
| 2624 |
+
324 588
|
| 2625 |
+
802 624
|
| 2626 |
+
891 2203
|
| 2627 |
+
2878 1020
|
| 2628 |
+
2180 1354
|
| 2629 |
+
380 1912
|
| 2630 |
+
423 512
|
| 2631 |
+
349 1236
|
| 2632 |
+
756 972
|
| 2633 |
+
797 2272
|
| 2634 |
+
426 1512
|
| 2635 |
+
1876 264
|
| 2636 |
+
2887 439
|
| 2637 |
+
2888 303
|
| 2638 |
+
32 50
|
| 2639 |
+
260 641
|
| 2640 |
+
285 1133
|
| 2641 |
+
462 280
|
| 2642 |
+
277 178
|
| 2643 |
+
863 1698
|
| 2644 |
+
1945 614
|
| 2645 |
+
2896 298
|
| 2646 |
+
184 539
|
| 2647 |
+
151 287
|
| 2648 |
+
161 374
|
| 2649 |
+
360 642
|
| 2650 |
+
292 1222
|
| 2651 |
+
841 354
|
| 2652 |
+
339 345
|
| 2653 |
+
353 312
|
| 2654 |
+
10 274
|
| 2655 |
+
340 399
|
| 2656 |
+
1024 302
|
| 2657 |
+
2167 378
|
| 2658 |
+
795 368
|
| 2659 |
+
271 1702
|
| 2660 |
+
2911 640
|
| 2661 |
+
348 1092
|
| 2662 |
+
1370 369
|
| 2663 |
+
184 944
|
| 2664 |
+
1376 134
|
| 2665 |
+
855 373
|
| 2666 |
+
283 599
|
| 2667 |
+
32 51
|
| 2668 |
+
747 1956
|
| 2669 |
+
451 283
|
| 2670 |
+
314 375
|
| 2671 |
+
507 349
|
| 2672 |
+
443 172
|
| 2673 |
+
452 369
|
| 2674 |
+
172 1365
|
| 2675 |
+
271 182
|
| 2676 |
+
259 46
|
| 2677 |
+
370 384
|
| 2678 |
+
259 622
|
| 2679 |
+
770 178
|
| 2680 |
+
1165 264
|
| 2681 |
+
1957 1958
|
| 2682 |
+
788 378
|
| 2683 |
+
323 1705
|
| 2684 |
+
2935 291
|
| 2685 |
+
282 184
|
| 2686 |
+
1109 968
|
| 2687 |
+
302 278
|
| 2688 |
+
518 1962
|
| 2689 |
+
577 1525
|
| 2690 |
+
300 1963
|
| 2691 |
+
1842 1713
|
| 2692 |
+
403 156
|
| 2693 |
+
144 1629
|
| 2694 |
+
172 1966
|
| 2695 |
+
1098 161
|
| 2696 |
+
2947 791
|
| 2697 |
+
2948 2309
|
| 2698 |
+
2949 602
|
| 2699 |
+
2310 302
|
| 2700 |
+
2951 2257
|
| 2701 |
+
2952 938
|
| 2702 |
+
561 417
|
| 2703 |
+
980 389
|
| 2704 |
+
1952 2311
|
| 2705 |
+
2956 527
|
| 2706 |
+
2957 261
|
| 2707 |
+
665 259
|
| 2708 |
+
431 330
|
| 2709 |
+
324 621
|
| 2710 |
+
155 353
|
| 2711 |
+
704 304
|
| 2712 |
+
684 349
|
| 2713 |
+
184 1964
|
| 2714 |
+
324 949
|
| 2715 |
+
360 541
|
| 2716 |
+
393 325
|
| 2717 |
+
259 435
|
| 2718 |
+
1154 968
|
| 2719 |
+
325 383
|
| 2720 |
+
333 284
|
| 2721 |
+
159 1337
|
| 2722 |
+
2973 286
|
| 2723 |
+
2974 2320
|
| 2724 |
+
2975 635
|
| 2725 |
+
813 470
|
| 2726 |
+
311 517
|
| 2727 |
+
1034 517
|
| 2728 |
+
470 264
|
| 2729 |
+
398 1714
|
| 2730 |
+
320 685
|
| 2731 |
+
10 340
|
| 2732 |
+
2983 299
|
| 2733 |
+
2984 1841
|
| 2734 |
+
1212 448
|
| 2735 |
+
172 283
|
| 2736 |
+
544 438
|
| 2737 |
+
277 173
|
| 2738 |
+
284 1973
|
| 2739 |
+
275 1077
|
| 2740 |
+
429 32
|
| 2741 |
+
1965 2329
|
| 2742 |
+
339 396
|
| 2743 |
+
1532 498
|
| 2744 |
+
861 184
|
| 2745 |
+
2335 1976
|
| 2746 |
+
1786 379
|
| 2747 |
+
423 618
|
| 2748 |
+
1442 321
|
| 2749 |
+
1349 448
|
| 2750 |
+
291 1631
|
| 2751 |
+
1260 283
|
| 2752 |
+
314 422
|
| 2753 |
+
337 525
|
| 2754 |
+
371 134
|
| 2755 |
+
370 574
|
| 2756 |
+
171 275
|
| 2757 |
+
782 687
|
| 2758 |
+
381 274
|
| 2759 |
+
345 368
|
| 2760 |
+
337 425
|
| 2761 |
+
1721 680
|
| 2762 |
+
709 1162
|
| 2763 |
+
727 273
|
| 2764 |
+
1468 261
|
| 2765 |
+
1385 321
|
| 2766 |
+
173 1377
|
| 2767 |
+
3018 476
|
| 2768 |
+
299 284
|
| 2769 |
+
161 1535
|
| 2770 |
+
448 682
|
| 2771 |
+
184 323
|
| 2772 |
+
1678 1538
|
| 2773 |
+
375 512
|
| 2774 |
+
482 591
|
| 2775 |
+
390 340
|
| 2776 |
+
1562 465
|
| 2777 |
+
551 477
|
| 2778 |
+
761 430
|
| 2779 |
+
781 1189
|
| 2780 |
+
323 335
|
| 2781 |
+
398 304
|
| 2782 |
+
392 826
|
| 2783 |
+
1033 256
|
| 2784 |
+
1054 668
|
| 2785 |
+
3036 476
|
| 2786 |
+
1985 2357
|
| 2787 |
+
377 285
|
| 2788 |
+
303 383
|
| 2789 |
+
270 955
|
| 2790 |
+
509 380
|
| 2791 |
+
703 386
|
| 2792 |
+
495 301
|
| 2793 |
+
181 336
|
| 2794 |
+
1399 2363
|
| 2795 |
+
324 529
|
| 2796 |
+
724 651
|
| 2797 |
+
1331 393
|
| 2798 |
+
350 1110
|
| 2799 |
+
1540 273
|
| 2800 |
+
350 286
|
| 2801 |
+
3052 938
|
| 2802 |
+
350 936
|
| 2803 |
+
494 2368
|
| 2804 |
+
160 454
|
| 2805 |
+
2369 2083
|
| 2806 |
+
3057 285
|
| 2807 |
+
311 379
|
| 2808 |
+
507 1058
|
| 2809 |
+
1170 658
|
| 2810 |
+
3061 419
|
| 2811 |
+
297 295
|
| 2812 |
+
391 299
|
| 2813 |
+
621 793
|
| 2814 |
+
667 810
|
| 2815 |
+
2372 282
|
| 2816 |
+
429 648
|
| 2817 |
+
708 321
|
| 2818 |
+
892 906
|
| 2819 |
+
559 426
|
| 2820 |
+
264 1152
|
| 2821 |
+
714 1035
|
| 2822 |
+
361 381
|
| 2823 |
+
45 341
|
| 2824 |
+
360 416
|
| 2825 |
+
718 296
|
| 2826 |
+
403 436
|
| 2827 |
+
361 538
|
| 2828 |
+
496 161
|
| 2829 |
+
360 1133
|
| 2830 |
+
1998 542
|
| 2831 |
+
1953 279
|
| 2832 |
+
39 321
|
| 2833 |
+
973 2042
|
| 2834 |
+
348 299
|
| 2835 |
+
3086 593
|
| 2836 |
+
338 284
|
| 2837 |
+
1732 922
|
| 2838 |
+
302 173
|
| 2839 |
+
408 1733
|
| 2840 |
+
665 1046
|
| 2841 |
+
133 857
|
| 2842 |
+
184 791
|
| 2843 |
+
256 1141
|
| 2844 |
+
314 1224
|
| 2845 |
+
2371 869
|
| 2846 |
+
409 265
|
| 2847 |
+
338 917
|
| 2848 |
+
398 287
|
| 2849 |
+
2389 1735
|
| 2850 |
+
3101 1607
|
| 2851 |
+
292 2390
|
| 2852 |
+
403 851
|
| 2853 |
+
168 1542
|
| 2854 |
+
345 381
|
| 2855 |
+
351 439
|
| 2856 |
+
3107 274
|
| 2857 |
+
276 671
|
| 2858 |
+
184 349
|
| 2859 |
+
467 411
|
| 2860 |
+
3111 646
|
| 2861 |
+
488 2006
|
| 2862 |
+
382 811
|
| 2863 |
+
1379 322
|
| 2864 |
+
415 1104
|
| 2865 |
+
667 616
|
| 2866 |
+
576 278
|
| 2867 |
+
426 803
|
| 2868 |
+
1738 1258
|
| 2869 |
+
288 2394
|
| 2870 |
+
608 323
|
| 2871 |
+
1067 949
|
| 2872 |
+
2404 1195
|
| 2873 |
+
438 2406
|
| 2874 |
+
370 885
|
| 2875 |
+
284 1027
|
| 2876 |
+
705 1012
|
| 2877 |
+
269 172
|
| 2878 |
+
482 1219
|
| 2879 |
+
1055 2409
|
| 2880 |
+
381 285
|
| 2881 |
+
387 899
|
| 2882 |
+
1259 1072
|
| 2883 |
+
302 751
|
| 2884 |
+
151 1494
|
| 2885 |
+
171 417
|
| 2886 |
+
681 670
|
| 2887 |
+
404 1940
|
| 2888 |
+
699 676
|
| 2889 |
+
825 509
|
| 2890 |
+
178 395
|
| 2891 |
+
387 814
|
| 2892 |
+
308 1975
|
| 2893 |
+
470 592
|
| 2894 |
+
307 1824
|
| 2895 |
+
166 1388
|
| 2896 |
+
160 680
|
| 2897 |
+
306 1741
|
| 2898 |
+
1251 703
|
| 2899 |
+
329 297
|
| 2900 |
+
3151 152
|
| 2901 |
+
3152 435
|
| 2902 |
+
1575 565
|
| 2903 |
+
166 1242
|
| 2904 |
+
298 1242
|
| 2905 |
+
724 2396
|
| 2906 |
+
1543 321
|
| 2907 |
+
920 389
|
| 2908 |
+
454 463
|
| 2909 |
+
320 509
|
| 2910 |
+
430 640
|
| 2911 |
+
133 572
|
| 2912 |
+
741 370
|
| 2913 |
+
417 2410
|
| 2914 |
+
1548 658
|
| 2915 |
+
292 1177
|
| 2916 |
+
161 261
|
| 2917 |
+
438 305
|
| 2918 |
+
403 178
|
| 2919 |
+
339 1157
|
| 2920 |
+
3171 1009
|
| 2921 |
+
3172 266
|
| 2922 |
+
274 261
|
| 2923 |
+
261 342
|
| 2924 |
+
436 260
|
| 2925 |
+
344 867
|
| 2926 |
+
257 1521
|
| 2927 |
+
493 431
|
| 2928 |
+
3179 340
|
| 2929 |
+
644 843
|
| 2930 |
+
3181 357
|
| 2931 |
+
2235 571
|
| 2932 |
+
436 400
|
| 2933 |
+
259 870
|
| 2934 |
+
350 696
|
| 2935 |
+
314 870
|
| 2936 |
+
382 393
|
| 2937 |
+
866 1724
|
| 2938 |
+
1744 172
|
| 2939 |
+
3190 1927
|
| 2940 |
+
345 2306
|
| 2941 |
+
920 2016
|
| 2942 |
+
260 301
|
| 2943 |
+
1138 414
|
| 2944 |
+
339 599
|
| 2945 |
+
353 1096
|
| 2946 |
+
993 2366
|
| 2947 |
+
292 875
|
| 2948 |
+
1050 792
|
| 2949 |
+
408 396
|
| 2950 |
+
1138 1538
|
| 2951 |
+
2438 2440
|
| 2952 |
+
1540 395
|
| 2953 |
+
135 634
|
| 2954 |
+
3205 283
|
| 2955 |
+
3206 1078
|
| 2956 |
+
814 1261
|
| 2957 |
+
172 1396
|
| 2958 |
+
504 994
|
| 2959 |
+
644 1266
|
| 2960 |
+
2431 1561
|
| 2961 |
+
3212 378
|
| 2962 |
+
645 301
|
| 2963 |
+
1378 1389
|
| 2964 |
+
264 262
|
| 2965 |
+
274 394
|
| 2966 |
+
32 524
|
| 2967 |
+
1731 1268
|
| 2968 |
+
423 945
|
| 2969 |
+
944 2286
|
| 2970 |
+
795 477
|
| 2971 |
+
1605 847
|
| 2972 |
+
1387 750
|
| 2973 |
+
376 1816
|
| 2974 |
+
639 682
|
| 2975 |
+
864 794
|
| 2976 |
+
3227 260
|
| 2977 |
+
1037 32
|
| 2978 |
+
360 330
|
| 2979 |
+
430 856
|
| 2980 |
+
32 2019
|
| 2981 |
+
742 1549
|
| 2982 |
+
318 620
|
| 2983 |
+
594 837
|
| 2984 |
+
3235 363
|
| 2985 |
+
3236 906
|
| 2986 |
+
995 1549
|
| 2987 |
+
1749 294
|
| 2988 |
+
161 1552
|
| 2989 |
+
408 2450
|
| 2990 |
+
871 950
|
| 2991 |
+
275 341
|
| 2992 |
+
3243 505
|
| 2993 |
+
3244 285
|
| 2994 |
+
2028 1753
|
| 2995 |
+
173 1754
|
| 2996 |
+
840 170
|
| 2997 |
+
951 309
|
| 2998 |
+
3249 2455
|
| 2999 |
+
908 909
|
| 3000 |
+
1402 557
|
| 3001 |
+
337 577
|
| 3002 |
+
2030 1757
|
| 3003 |
+
361 2031
|
| 3004 |
+
3255 953
|
| 3005 |
+
370 400
|
| 3006 |
+
280 290
|
| 3007 |
+
330 2459
|
| 3008 |
+
260 409
|
| 3009 |
+
303 333
|
| 3010 |
+
633 584
|
| 3011 |
+
181 633
|
| 3012 |
+
171 1179
|
| 3013 |
+
3264 314
|
| 3014 |
+
3265 298
|
| 3015 |
+
1105 1287
|
| 3016 |
+
3267 2462
|
| 3017 |
+
3268 304
|
| 3018 |
+
307 758
|
| 3019 |
+
269 188
|
| 3020 |
+
3271 309
|
| 3021 |
+
529 164
|
| 3022 |
+
530 953
|
| 3023 |
+
399 390
|
| 3024 |
+
3275 285
|
| 3025 |
+
322 182
|
| 3026 |
+
639 539
|
| 3027 |
+
1405 372
|
| 3028 |
+
181 1040
|
| 3029 |
+
340 417
|
| 3030 |
+
2041 471
|
| 3031 |
+
458 323
|
| 3032 |
+
3283 458
|
| 3033 |
+
3284 1557
|
| 3034 |
+
139 631
|
| 3035 |
+
3286 2464
|
| 3036 |
+
41 622
|
| 3037 |
+
2467 292
|
| 3038 |
+
277 2043
|
| 3039 |
+
3290 400
|
| 3040 |
+
344 2470
|
| 3041 |
+
1041 279
|
| 3042 |
+
312 666
|
| 3043 |
+
468 2473
|
| 3044 |
+
174 1410
|
| 3045 |
+
543 283
|
| 3046 |
+
3297 268
|
| 3047 |
+
3298 410
|
| 3048 |
+
1412 318
|
| 3049 |
+
304 703
|
| 3050 |
+
956 184
|
| 3051 |
+
165 1046
|
| 3052 |
+
350 363
|
| 3053 |
+
39 292
|
| 3054 |
+
2480 273
|
| 3055 |
+
1104 2481
|
| 3056 |
+
3307 359
|
| 3057 |
+
337 557
|
| 3058 |
+
2051 302
|
| 3059 |
+
379 274
|
| 3060 |
+
1562 525
|
| 3061 |
+
271 155
|
| 3062 |
+
541 1295
|
| 3063 |
+
259 41
|
| 3064 |
+
3315 292
|
| 3065 |
+
334 698
|
| 3066 |
+
957 2485
|
| 3067 |
+
1190 285
|
| 3068 |
+
1417 347
|
| 3069 |
+
1770 561
|
| 3070 |
+
3321 1768
|
| 3071 |
+
478 305
|
| 3072 |
+
294 1411
|
| 3073 |
+
261 363
|
| 3074 |
+
1298 279
|
| 3075 |
+
3326 2491
|
| 3076 |
+
3327 490
|
| 3077 |
+
3328 879
|
| 3078 |
+
3329 1005
|
| 3079 |
+
3330 842
|
| 3080 |
+
3331 2492
|
| 3081 |
+
3332 2057
|
| 3082 |
+
3333 300
|
| 3083 |
+
3334 1772
|
| 3084 |
+
3335 135
|
| 3085 |
+
3336 1420
|
| 3086 |
+
3337 2058
|
| 3087 |
+
3338 490
|
| 3088 |
+
1048 328
|
| 3089 |
+
424 595
|
| 3090 |
+
1301 376
|
| 3091 |
+
507 1193
|
| 3092 |
+
671 449
|
| 3093 |
+
690 1422
|
| 3094 |
+
3345 371
|
| 3095 |
+
432 281
|
| 3096 |
+
291 589
|
| 3097 |
+
327 162
|
| 3098 |
+
1564 541
|
| 3099 |
+
3350 729
|
| 3100 |
+
557 1117
|
| 3101 |
+
335 378
|
| 3102 |
+
292 1305
|
| 3103 |
+
582 1008
|
| 3104 |
+
1777 182
|
| 3105 |
+
437 1567
|
| 3106 |
+
184 1177
|
| 3107 |
+
824 608
|
| 3108 |
+
2506 907
|
| 3109 |
+
1782 461
|
| 3110 |
+
747 1570
|
| 3111 |
+
885 1309
|
| 3112 |
+
461 638
|
| 3113 |
+
3364 881
|
| 3114 |
+
166 376
|
| 3115 |
+
964 184
|
| 3116 |
+
785 1120
|
| 3117 |
+
601 479
|
| 3118 |
+
2520 576
|
| 3119 |
+
300 425
|
| 3120 |
+
1428 1009
|
| 3121 |
+
632 315
|
| 3122 |
+
385 580
|
| 3123 |
+
172 643
|
| 3124 |
+
3375 396
|
| 3125 |
+
519 1121
|
| 3126 |
+
388 359
|
| 3127 |
+
1564 355
|
| 3128 |
+
313 147
|
| 3129 |
+
2526 2527
|
| 3130 |
+
1791 298
|
| 3131 |
+
1192 261
|
| 3132 |
+
1434 1792
|
| 3133 |
+
1572 559
|
| 3134 |
+
3385 1314
|
| 3135 |
+
463 399
|
| 3136 |
+
3387 452
|
| 3137 |
+
1123 1057
|
| 3138 |
+
2496 1315
|
| 3139 |
+
908 425
|
| 3140 |
+
2077 388
|
| 3141 |
+
321 678
|
| 3142 |
+
438 554
|
| 3143 |
+
2534 1434
|
| 3144 |
+
45 340
|
| 3145 |
+
275 280
|
| 3146 |
+
318 1011
|
| 3147 |
+
723 155
|
| 3148 |
+
333 277
|
| 3149 |
+
678 2079
|
| 3150 |
+
3401 750
|
| 3151 |
+
176 2081
|
| 3152 |
+
276 182
|
| 3153 |
+
3404 841
|
| 3154 |
+
347 309
|
| 3155 |
+
150 526
|
| 3156 |
+
3407 954
|
| 3157 |
+
1575 2539
|
| 3158 |
+
1316 2082
|
| 3159 |
+
285 733
|
| 3160 |
+
264 362
|
| 3161 |
+
308 328
|
| 3162 |
+
266 261
|
| 3163 |
+
3414 341
|
| 3164 |
+
291 2029
|
| 3165 |
+
850 330
|
| 3166 |
+
1576 265
|
| 3167 |
+
156 287
|
| 3168 |
+
884 350
|
| 3169 |
+
372 376
|
| 3170 |
+
3421 2549
|
| 3171 |
+
3422 966
|
| 3172 |
+
3423 2550
|
| 3173 |
+
3424 451
|
| 3174 |
+
3425 680
|
| 3175 |
+
1579 271
|
| 3176 |
+
594 284
|
| 3177 |
+
568 462
|
| 3178 |
+
516 305
|
| 3179 |
+
273 262
|
| 3180 |
+
2553 296
|
| 3181 |
+
2090 2554
|
| 3182 |
+
1286 638
|
| 3183 |
+
268 150
|
| 3184 |
+
350 623
|
| 3185 |
+
531 261
|
| 3186 |
+
371 2093
|
| 3187 |
+
284 967
|
| 3188 |
+
172 357
|
| 3189 |
+
886 437
|
| 3190 |
+
1295 2096
|
| 3191 |
+
3442 787
|
| 3192 |
+
1439 2561
|
| 3193 |
+
260 322
|
| 3194 |
+
385 283
|
| 3195 |
+
2563 323
|
| 3196 |
+
3447 658
|
| 3197 |
+
1051 363
|
| 3198 |
+
3449 910
|
| 3199 |
+
1301 1209
|
| 3200 |
+
265 325
|
| 3201 |
+
349 265
|
| 3202 |
+
821 256
|
| 3203 |
+
341 399
|
| 3204 |
+
2102 1584
|
| 3205 |
+
285 461
|
| 3206 |
+
1583 322
|
| 3207 |
+
166 1441
|
| 3208 |
+
272 411
|
| 3209 |
+
1128 2104
|
| 3210 |
+
44 1129
|
| 3211 |
+
1585 278
|
| 3212 |
+
2567 2568
|
| 3213 |
+
925 909
|
| 3214 |
+
181 362
|
| 3215 |
+
390 2571
|
| 3216 |
+
3467 175
|
| 3217 |
+
272 533
|
| 3218 |
+
322 137
|
| 3219 |
+
181 1320
|
| 3220 |
+
157 1807
|
| 3221 |
+
1211 290
|
| 3222 |
+
2575 445
|
| 3223 |
+
1014 539
|
| 3224 |
+
322 1588
|
| 3225 |
+
1212 1132
|
| 3226 |
+
425 386
|
| 3227 |
+
1808 1807
|
| 3228 |
+
264 2576
|
| 3229 |
+
1003 273
|
| 3230 |
+
302 790
|
| 3231 |
+
1312 322
|
| 3232 |
+
385 324
|
| 3233 |
+
759 39
|
| 3234 |
+
496 157
|
| 3235 |
+
339 667
|
| 3236 |
+
3487 496
|
| 3237 |
+
3488 182
|
| 3238 |
+
2579 369
|
| 3239 |
+
330 366
|
| 3240 |
+
330 402
|
| 3241 |
+
334 1200
|
| 3242 |
+
2536 537
|
| 3243 |
+
970 386
|
| 3244 |
+
973 2111
|
| 3245 |
+
151 2582
|
| 3246 |
+
156 381
|
| 3247 |
+
2532 1588
|
| 3248 |
+
761 423
|
| 3249 |
+
1427 2584
|
| 3250 |
+
3501 284
|
| 3251 |
+
481 2585
|
| 3252 |
+
264 886
|
| 3253 |
+
544 575
|
| 3254 |
+
1811 594
|
| 3255 |
+
503 2593
|
| 3256 |
+
608 369
|
| 3257 |
+
353 749
|
| 3258 |
+
1108 270
|
| 3259 |
+
325 542
|
| 3260 |
+
2065 165
|
| 3261 |
+
702 1135
|
| 3262 |
+
3513 1291
|
| 3263 |
+
3514 334
|
| 3264 |
+
3515 1813
|
| 3265 |
+
504 547
|
| 3266 |
+
3517 1070
|
| 3267 |
+
3518 1216
|
| 3268 |
+
260 327
|
| 3269 |
+
311 1551
|
| 3270 |
+
388 887
|
| 3271 |
+
3522 335
|
| 3272 |
+
1071 328
|
| 3273 |
+
3524 358
|
| 3274 |
+
723 951
|
| 3275 |
+
3526 1598
|
| 3276 |
+
3527 363
|
| 3277 |
+
3528 265
|
| 3278 |
+
3529 649
|
| 3279 |
+
488 1071
|
| 3280 |
+
3531 1456
|
| 3281 |
+
2123 1218
|
| 3282 |
+
311 2124
|
| 3283 |
+
276 965
|
| 3284 |
+
1072 174
|
| 3285 |
+
747 299
|
| 3286 |
+
1825 2129
|
| 3287 |
+
1460 2604
|
| 3288 |
+
3539 649
|
| 3289 |
+
666 168
|
| 3290 |
+
185 933
|
| 3291 |
+
175 2607
|
| 3292 |
+
258 152
|
| 3293 |
+
1018 367
|
| 3294 |
+
523 2466
|
| 3295 |
+
321 476
|
| 3296 |
+
341 284
|
| 3297 |
+
1223 1309
|
| 3298 |
+
361 2609
|
| 3299 |
+
276 185
|
| 3300 |
+
1831 911
|
| 3301 |
+
135 417
|
| 3302 |
+
324 397
|
| 3303 |
+
349 661
|
| 3304 |
+
1747 155
|
| 3305 |
+
621 479
|
| 3306 |
+
688 284
|
| 3307 |
+
315 525
|
| 3308 |
+
303 342
|
| 3309 |
+
717 381
|
| 3310 |
+
610 1120
|
| 3311 |
+
635 283
|
| 3312 |
+
299 602
|
| 3313 |
+
890 261
|
| 3314 |
+
311 353
|
| 3315 |
+
1141 2614
|
| 3316 |
+
3567 270
|
| 3317 |
+
633 1833
|
| 3318 |
+
1607 1834
|
| 3319 |
+
3570 330
|
| 3320 |
+
322 1467
|
| 3321 |
+
672 1019
|
| 3322 |
+
2616 302
|
| 3323 |
+
359 337
|
| 3324 |
+
367 2617
|
| 3325 |
+
2618 412
|
| 3326 |
+
136 828
|
| 3327 |
+
172 261
|
| 3328 |
+
935 626
|
| 3329 |
+
1314 467
|
| 3330 |
+
855 312
|
| 3331 |
+
32 512
|
| 3332 |
+
890 323
|
| 3333 |
+
2135 1469
|
| 3334 |
+
1142 292
|
| 3335 |
+
1611 466
|
| 3336 |
+
433 584
|
| 3337 |
+
356 1838
|
| 3338 |
+
845 2137
|
| 3339 |
+
259 442
|
| 3340 |
+
789 332
|
| 3341 |
+
279 372
|
| 3342 |
+
1145 1841
|
| 3343 |
+
645 294
|
| 3344 |
+
543 649
|
| 3345 |
+
673 768
|
| 3346 |
+
513 1614
|
| 3347 |
+
292 1843
|
| 3348 |
+
1835 271
|
| 3349 |
+
1617 445
|
| 3350 |
+
1143 1844
|
| 3351 |
+
1845 2139
|
| 3352 |
+
2624 174
|
| 3353 |
+
264 2141
|
| 3354 |
+
1112 299
|
| 3355 |
+
2627 361
|
| 3356 |
+
3607 348
|
| 3357 |
+
3608 1619
|
| 3358 |
+
3609 2628
|
| 3359 |
+
3610 39
|
| 3360 |
+
673 1621
|
| 3361 |
+
461 168
|
| 3362 |
+
1622 134
|
| 3363 |
+
3614 718
|
| 3364 |
+
44 644
|
| 3365 |
+
380 1623
|
| 3366 |
+
3617 377
|
| 3367 |
+
3618 1449
|
| 3368 |
+
3619 577
|
| 3369 |
+
3620 2634
|
| 3370 |
+
368 2143
|
| 3371 |
+
1624 1332
|
| 3372 |
+
1851 2635
|
| 3373 |
+
3624 648
|
| 3374 |
+
2636 304
|
| 3375 |
+
3626 2638
|
| 3376 |
+
287 276
|
| 3377 |
+
638 1339
|
| 3378 |
+
649 329
|
| 3379 |
+
1023 155
|
| 3380 |
+
2145 318
|
| 3381 |
+
3632 936
|
| 3382 |
+
3633 273
|
| 3383 |
+
3634 355
|
| 3384 |
+
1286 386
|
| 3385 |
+
871 182
|
| 3386 |
+
1102 181
|
| 3387 |
+
3638 2644
|
| 3388 |
+
178 416
|
| 3389 |
+
2646 2647
|
| 3390 |
+
2648 1024
|
| 3391 |
+
261 2148
|
| 3392 |
+
1197 2040
|
| 3393 |
+
2651 1290
|
| 3394 |
+
491 175
|
| 3395 |
+
3646 270
|
| 3396 |
+
133 340
|
| 3397 |
+
463 347
|
| 3398 |
+
2652 319
|
| 3399 |
+
353 537
|
| 3400 |
+
1472 1857
|
| 3401 |
+
2152 654
|
| 3402 |
+
3653 387
|
| 3403 |
+
302 1332
|
| 3404 |
+
328 299
|
| 3405 |
+
385 515
|
| 3406 |
+
1038 350
|
| 3407 |
+
3658 287
|
| 3408 |
+
3659 1859
|
| 3409 |
+
521 532
|
| 3410 |
+
1861 1016
|
| 3411 |
+
1341 2154
|
| 3412 |
+
3663 1023
|
| 3413 |
+
453 320
|
| 3414 |
+
449 1026
|
| 3415 |
+
164 307
|
| 3416 |
+
394 359
|
| 3417 |
+
325 1621
|
| 3418 |
+
1408 2661
|
| 3419 |
+
633 349
|
| 3420 |
+
2152 339
|
| 3421 |
+
536 466
|
| 3422 |
+
717 857
|
| 3423 |
+
330 353
|
| 3424 |
+
271 553
|
| 3425 |
+
1330 297
|
| 3426 |
+
1823 367
|
| 3427 |
+
601 586
|
| 3428 |
+
1002 428
|
| 3429 |
+
1120 830
|
| 3430 |
+
320 840
|
| 3431 |
+
642 311
|
| 3432 |
+
3683 363
|
| 3433 |
+
3684 347
|
| 3434 |
+
3685 361
|
| 3435 |
+
3686 541
|
| 3436 |
+
3687 376
|
| 3437 |
+
1280 1236
|
| 3438 |
+
2160 533
|
| 3439 |
+
3690 2674
|
| 3440 |
+
397 276
|
| 3441 |
+
1827 273
|
| 3442 |
+
644 325
|
| 3443 |
+
1050 277
|
| 3444 |
+
313 134
|
| 3445 |
+
404 610
|
| 3446 |
+
374 352
|
| 3447 |
+
300 1870
|
| 3448 |
+
800 143
|
| 3449 |
+
348 593
|
| 3450 |
+
370 767
|
| 3451 |
+
2684 465
|
| 3452 |
+
1237 1020
|
| 3453 |
+
849 491
|
| 3454 |
+
676 1871
|
| 3455 |
+
1872 559
|
| 3456 |
+
310 1636
|
| 3457 |
+
644 337
|
| 3458 |
+
370 711
|
| 3459 |
+
277 159
|
| 3460 |
+
355 634
|
| 3461 |
+
827 284
|
| 3462 |
+
2599 1151
|
| 3463 |
+
3714 328
|
| 3464 |
+
3715 370
|
| 3465 |
+
3716 1637
|
| 3466 |
+
323 2689
|
| 3467 |
+
181 775
|
| 3468 |
+
1859 769
|
| 3469 |
+
264 1614
|
| 3470 |
+
3721 467
|
| 3471 |
+
307 614
|
| 3472 |
+
804 357
|
| 3473 |
+
794 593
|
| 3474 |
+
308 1303
|
| 3475 |
+
331 2130
|
| 3476 |
+
914 331
|
| 3477 |
+
318 1586
|
| 3478 |
+
3729 827
|
| 3479 |
+
397 353
|
| 3480 |
+
1857 819
|
| 3481 |
+
2142 489
|
| 3482 |
+
588 174
|
| 3483 |
+
2696 304
|
| 3484 |
+
345 589
|
| 3485 |
+
267 2145
|
| 3486 |
+
462 897
|
| 3487 |
+
433 354
|
| 3488 |
+
908 1771
|
| 3489 |
+
321 154
|
| 3490 |
+
682 639
|
| 3491 |
+
2177 871
|
| 3492 |
+
1349 2161
|
| 3493 |
+
472 535
|
| 3494 |
+
173 427
|
| 3495 |
+
1325 484
|
| 3496 |
+
898 2124
|
| 3497 |
+
697 486
|
| 3498 |
+
3749 280
|
| 3499 |
+
371 1241
|
| 3500 |
+
318 280
|
| 3501 |
+
164 273
|
| 3502 |
+
524 298
|
| 3503 |
+
448 384
|
| 3504 |
+
267 378
|
| 3505 |
+
2705 2179
|
| 3506 |
+
137 443
|
| 3507 |
+
305 1883
|
| 3508 |
+
660 274
|
| 3509 |
+
365 1766
|
| 3510 |
+
3761 384
|
| 3511 |
+
2482 514
|
| 3512 |
+
315 413
|
| 3513 |
+
2119 2710
|
| 3514 |
+
950 585
|
| 3515 |
+
1316 298
|
| 3516 |
+
334 1480
|
| 3517 |
+
3768 283
|
| 3518 |
+
3769 1482
|
| 3519 |
+
766 172
|
| 3520 |
+
325 285
|
| 3521 |
+
136 340
|
| 3522 |
+
174 2718
|
| 3523 |
+
159 547
|
| 3524 |
+
1154 324
|
| 3525 |
+
315 45
|
| 3526 |
+
462 1240
|
| 3527 |
+
325 779
|
| 3528 |
+
302 176
|
| 3529 |
+
2725 2726
|
| 3530 |
+
259 409
|
| 3531 |
+
728 292
|
| 3532 |
+
959 1288
|
| 3533 |
+
3784 1407
|
| 3534 |
+
257 1647
|
| 3535 |
+
705 1040
|
| 3536 |
+
3787 274
|
| 3537 |
+
182 527
|
| 3538 |
+
537 675
|
| 3539 |
+
1243 299
|
| 3540 |
+
758 1011
|
| 3541 |
+
1350 464
|
| 3542 |
+
150 458
|
| 3543 |
+
734 389
|
| 3544 |
+
327 754
|
| 3545 |
+
1648 405
|
| 3546 |
+
577 1236
|
| 3547 |
+
1244 900
|
| 3548 |
+
1890 1245
|
| 3549 |
+
154 286
|
| 3550 |
+
3801 450
|
| 3551 |
+
370 894
|
| 3552 |
+
1649 887
|
| 3553 |
+
3804 2731
|
| 3554 |
+
3805 2185
|
| 3555 |
+
334 166
|
| 3556 |
+
821 303
|
| 3557 |
+
2714 2733
|
| 3558 |
+
339 381
|
| 3559 |
+
280 1651
|
| 3560 |
+
423 521
|
| 3561 |
+
950 690
|
| 3562 |
+
318 1354
|
| 3563 |
+
568 453
|
| 3564 |
+
171 967
|
| 3565 |
+
554 481
|
| 3566 |
+
2745 401
|
| 3567 |
+
3818 265
|
| 3568 |
+
3819 1894
|
| 3569 |
+
772 942
|
| 3570 |
+
350 2166
|
| 3571 |
+
470 50
|
| 3572 |
+
2750 330
|
| 3573 |
+
603 383
|
| 3574 |
+
2751 274
|
| 3575 |
+
3826 528
|
| 3576 |
+
563 355
|
| 3577 |
+
503 594
|
| 3578 |
+
665 910
|
| 3579 |
+
424 1647
|
| 3580 |
+
2753 309
|
| 3581 |
+
365 298
|
| 3582 |
+
285 1482
|
| 3583 |
+
3834 273
|
| 3584 |
+
540 274
|
| 3585 |
+
338 354
|
| 3586 |
+
1589 458
|
| 3587 |
+
261 382
|
| 3588 |
+
367 1487
|
| 3589 |
+
403 678
|
| 3590 |
+
656 312
|
| 3591 |
+
763 1186
|
| 3592 |
+
318 461
|
| 3593 |
+
1862 2195
|
| 3594 |
+
1899 996
|
| 3595 |
+
2758 2196
|
| 3596 |
+
448 2123
|
| 3597 |
+
3848 347
|
| 3598 |
+
3849 1155
|
| 3599 |
+
1156 1050
|
| 3600 |
+
325 2198
|
| 3601 |
+
323 455
|
| 3602 |
+
2074 1654
|
| 3603 |
+
3854 1655
|
| 3604 |
+
3855 419
|
| 3605 |
+
3856 1902
|
| 3606 |
+
3857 2759
|
| 3607 |
+
3858 1903
|
| 3608 |
+
3859 2082
|
| 3609 |
+
325 545
|
| 3610 |
+
2761 339
|
| 3611 |
+
3862 2762
|
| 3612 |
+
3863 445
|
| 3613 |
+
308 275
|
| 3614 |
+
397 886
|
| 3615 |
+
492 707
|
| 3616 |
+
1657 428
|
| 3617 |
+
1077 2067
|
| 3618 |
+
750 2768
|
| 3619 |
+
1361 271
|
| 3620 |
+
2084 614
|
| 3621 |
+
3872 273
|
| 3622 |
+
1244 776
|
| 3623 |
+
1108 277
|
| 3624 |
+
408 346
|
| 3625 |
+
3876 396
|
| 3626 |
+
272 323
|
| 3627 |
+
472 2204
|
| 3628 |
+
3879 388
|
| 3629 |
+
324 603
|
| 3630 |
+
3881 1908
|
| 3631 |
+
156 729
|
| 3632 |
+
3883 2071
|
| 3633 |
+
2771 299
|
| 3634 |
+
576 168
|
| 3635 |
+
274 285
|
| 3636 |
+
2774 941
|
| 3637 |
+
1663 454
|
| 3638 |
+
966 1080
|
| 3639 |
+
879 484
|
| 3640 |
+
3891 1106
|
| 3641 |
+
321 473
|
| 3642 |
+
663 1243
|
| 3643 |
+
686 2206
|
| 3644 |
+
1649 2207
|
| 3645 |
+
178 2208
|
| 3646 |
+
333 653
|
| 3647 |
+
344 2210
|
| 3648 |
+
345 345
|
| 3649 |
+
424 723
|
| 3650 |
+
465 340
|
| 3651 |
+
3902 452
|
| 3652 |
+
1032 2212
|
| 3653 |
+
334 1848
|
| 3654 |
+
266 424
|
| 3655 |
+
355 1487
|
| 3656 |
+
157 822
|
| 3657 |
+
134 519
|
| 3658 |
+
298 285
|
| 3659 |
+
3910 351
|
| 3660 |
+
2214 304
|
| 3661 |
+
259 1225
|
| 3662 |
+
1906 1255
|
| 3663 |
+
526 279
|
| 3664 |
+
181 1912
|
| 3665 |
+
298 299
|
| 3666 |
+
274 594
|
| 3667 |
+
170 503
|
| 3668 |
+
184 399
|
| 3669 |
+
508 2784
|
| 3670 |
+
170 2509
|
| 3671 |
+
548 322
|
| 3672 |
+
151 1024
|
| 3673 |
+
2786 590
|
| 3674 |
+
3925 2787
|
| 3675 |
+
1495 1258
|
| 3676 |
+
3927 847
|
| 3677 |
+
271 2223
|
| 3678 |
+
181 683
|
| 3679 |
+
491 367
|
| 3680 |
+
367 2224
|
| 3681 |
+
166 628
|
| 3682 |
+
1484 638
|
| 3683 |
+
1241 749
|
| 3684 |
+
2791 1305
|
| 3685 |
+
3936 359
|
| 3686 |
+
711 723
|
| 3687 |
+
592 298
|
| 3688 |
+
1447 1666
|
| 3689 |
+
519 270
|
| 3690 |
+
264 355
|
| 3691 |
+
3942 270
|
| 3692 |
+
3943 1811
|
| 3693 |
+
2192 458
|
| 3694 |
+
1470 277
|
| 3695 |
+
1855 319
|
| 3696 |
+
977 260
|
| 3697 |
+
2497 620
|
| 3698 |
+
3949 2799
|
| 3699 |
+
3950 285
|
| 3700 |
+
3951 477
|
| 3701 |
+
3952 1651
|
| 3702 |
+
327 135
|
| 3703 |
+
659 1671
|
| 3704 |
+
1821 664
|
| 3705 |
+
164 859
|
| 3706 |
+
361 1498
|
| 3707 |
+
1203 387
|
| 3708 |
+
1208 302
|
| 3709 |
+
1920 1673
|
| 3710 |
+
1642 2139
|
| 3711 |
+
369 2232
|
| 3712 |
+
1230 262
|
| 3713 |
+
569 909
|
| 3714 |
+
1259 606
|
| 3715 |
+
3966 840
|
| 3716 |
+
1312 865
|
| 3717 |
+
1803 1590
|
| 3718 |
+
673 752
|
| 3719 |
+
978 670
|
| 3720 |
+
1082 437
|
| 3721 |
+
1280 484
|
| 3722 |
+
2809 270
|
| 3723 |
+
2236 2687
|
| 3724 |
+
414 805
|
| 3725 |
+
296 344
|
| 3726 |
+
447 972
|
| 3727 |
+
2811 260
|
| 3728 |
+
3979 1157
|
| 3729 |
+
334 2238
|
| 3730 |
+
2814 910
|
| 3731 |
+
3982 386
|
| 3732 |
+
881 387
|
| 3733 |
+
467 284
|
| 3734 |
+
300 766
|
| 3735 |
+
181 317
|
| 3736 |
+
931 279
|
| 3737 |
+
3988 298
|
| 3738 |
+
536 296
|
| 3739 |
+
2819 607
|
| 3740 |
+
763 1572
|
| 3741 |
+
1678 285
|
| 3742 |
+
1802 808
|
| 3743 |
+
331 401
|
| 3744 |
+
570 586
|
| 3745 |
+
1018 1472
|
| 3746 |
+
563 939
|
| 3747 |
+
805 954
|
| 3748 |
+
167 261
|
| 3749 |
+
987 265
|
| 3750 |
+
2825 1679
|
| 3751 |
+
4002 181
|
| 3752 |
+
1402 2645
|
| 3753 |
+
1353 1322
|
| 3754 |
+
166 2243
|
| 3755 |
+
367 654
|
| 3756 |
+
148 2829
|
| 3757 |
+
1496 297
|
| 3758 |
+
156 2830
|
| 3759 |
+
280 531
|
| 3760 |
+
361 399
|
| 3761 |
+
740 2763
|
| 3762 |
+
44 672
|
| 3763 |
+
1769 1262
|
| 3764 |
+
339 1680
|
| 3765 |
+
1361 887
|
| 3766 |
+
895 713
|
| 3767 |
+
659 2832
|
| 3768 |
+
325 1157
|
| 3769 |
+
4020 261
|
| 3770 |
+
4021 335
|
| 3771 |
+
173 1088
|
| 3772 |
+
262 607
|
| 3773 |
+
463 391
|
| 3774 |
+
4025 463
|
| 3775 |
+
1556 492
|
| 3776 |
+
522 266
|
| 3777 |
+
1926 818
|
| 3778 |
+
175 356
|
| 3779 |
+
300 930
|
| 3780 |
+
681 277
|
| 3781 |
+
4032 1658
|
| 3782 |
+
2838 818
|
| 3783 |
+
1633 312
|
| 3784 |
+
488 168
|
| 3785 |
+
320 740
|
| 3786 |
+
339 1508
|
| 3787 |
+
2676 490
|
| 3788 |
+
519 382
|
| 3789 |
+
335 570
|
| 3790 |
+
2654 2250
|
| 3791 |
+
4042 874
|
| 3792 |
+
852 334
|
| 3793 |
+
635 340
|
| 3794 |
+
772 432
|
| 3795 |
+
1251 669
|
| 3796 |
+
513 419
|
| 3797 |
+
4048 966
|
| 3798 |
+
4049 744
|
| 3799 |
+
1617 327
|
| 3800 |
+
390 1077
|
| 3801 |
+
2259 1488
|
| 3802 |
+
986 1241
|
| 3803 |
+
404 345
|
| 3804 |
+
294 278
|
| 3805 |
+
2850 317
|
| 3806 |
+
2851 2756
|
| 3807 |
+
568 1922
|
| 3808 |
+
284 2049
|
| 3809 |
+
166 416
|
| 3810 |
+
4061 869
|
| 3811 |
+
523 261
|
| 3812 |
+
4063 692
|
| 3813 |
+
1352 284
|
| 3814 |
+
265 812
|
| 3815 |
+
284 420
|
| 3816 |
+
1819 318
|
| 3817 |
+
468 351
|
| 3818 |
+
1144 2260
|
| 3819 |
+
321 1309
|
| 3820 |
+
4071 519
|
| 3821 |
+
4072 711
|
| 3822 |
+
138 812
|
| 3823 |
+
453 913
|
| 3824 |
+
4075 578
|
| 3825 |
+
1502 286
|
| 3826 |
+
4077 824
|
| 3827 |
+
1355 1040
|
| 3828 |
+
4079 1644
|
| 3829 |
+
765 1404
|
| 3830 |
+
1161 1123
|
| 3831 |
+
601 328
|
| 3832 |
+
134 2211
|
| 3833 |
+
4084 529
|
| 3834 |
+
269 157
|
| 3835 |
+
896 386
|
| 3836 |
+
537 172
|
| 3837 |
+
983 736
|
| 3838 |
+
4089 280
|
| 3839 |
+
4090 528
|
| 3840 |
+
4091 1161
|
| 3841 |
+
4092 2642
|
| 3842 |
+
4093 830
|
| 3843 |
+
4094 2251
|
| 3844 |
+
154 1688
|
| 3845 |
+
2861 1117
|
| 3846 |
+
1474 334
|
| 3847 |
+
283 2862
|
| 3848 |
+
4099 1227
|
| 3849 |
+
4100 1368
|
| 3850 |
+
562 1140
|
| 3851 |
+
170 1265
|
| 3852 |
+
303 614
|
| 3853 |
+
259 1197
|
| 3854 |
+
2261 300
|
| 3855 |
+
398 1369
|
| 3856 |
+
944 2185
|
| 3857 |
+
318 2262
|
| 3858 |
+
274 1202
|
| 3859 |
+
2867 302
|
| 3860 |
+
846 1335
|
| 3861 |
+
292 328
|
| 3862 |
+
492 659
|
| 3863 |
+
167 463
|
| 3864 |
+
4115 273
|
| 3865 |
+
4116 2872
|
| 3866 |
+
353 829
|
| 3867 |
+
344 329
|
| 3868 |
+
4119 780
|
| 3869 |
+
1400 2876
|
| 3870 |
+
1794 788
|
| 3871 |
+
272 689
|
| 3872 |
+
267 162
|
| 3873 |
+
362 641
|
| 3874 |
+
742 1262
|
| 3875 |
+
325 1908
|
| 3876 |
+
328 373
|
| 3877 |
+
659 595
|
| 3878 |
+
2877 1486
|
| 3879 |
+
262 546
|
| 3880 |
+
1003 1162
|
| 3881 |
+
302 884
|
| 3882 |
+
1031 642
|
| 3883 |
+
445 1119
|
| 3884 |
+
302 182
|
| 3885 |
+
334 690
|
| 3886 |
+
405 1232
|
| 3887 |
+
165 560
|
| 3888 |
+
458 276
|
| 3889 |
+
1128 604
|
| 3890 |
+
350 2052
|
| 3891 |
+
291 445
|
| 3892 |
+
283 332
|
| 3893 |
+
390 280
|
| 3894 |
+
823 962
|
| 3895 |
+
133 611
|
| 3896 |
+
377 1856
|
| 3897 |
+
724 349
|
| 3898 |
+
2885 2886
|
| 3899 |
+
933 616
|
| 3900 |
+
4151 797
|
| 3901 |
+
749 592
|
| 3902 |
+
350 1351
|
| 3903 |
+
319 499
|
| 3904 |
+
786 885
|
| 3905 |
+
526 447
|
| 3906 |
+
2273 395
|
| 3907 |
+
850 352
|
| 3908 |
+
311 616
|
| 3909 |
+
505 270
|
| 3910 |
+
909 164
|
| 3911 |
+
167 273
|
| 3912 |
+
284 530
|
| 3913 |
+
1892 363
|
| 3914 |
+
280 384
|
| 3915 |
+
557 273
|
| 3916 |
+
2275 2708
|
| 3917 |
+
312 1224
|
| 3918 |
+
1943 611
|
| 3919 |
+
328 537
|
| 3920 |
+
823 425
|
| 3921 |
+
348 270
|
| 3922 |
+
259 740
|
| 3923 |
+
2188 2897
|
| 3924 |
+
721 170
|
| 3925 |
+
161 716
|
| 3926 |
+
1201 163
|
| 3927 |
+
262 433
|
| 3928 |
+
2279 1947
|
| 3929 |
+
281 281
|
| 3930 |
+
285 434
|
| 3931 |
+
2901 898
|
| 3932 |
+
4183 353
|
| 3933 |
+
4184 352
|
| 3934 |
+
4185 291
|
| 3935 |
+
166 581
|
| 3936 |
+
291 341
|
| 3937 |
+
4188 703
|
| 3938 |
+
277 165
|
| 3939 |
+
2284 321
|
| 3940 |
+
1231 437
|
| 3941 |
+
513 350
|
| 3942 |
+
2177 360
|
| 3943 |
+
340 743
|
| 3944 |
+
279 1701
|
| 3945 |
+
798 181
|
| 3946 |
+
719 330
|
| 3947 |
+
304 861
|
| 3948 |
+
264 1860
|
| 3949 |
+
1137 2908
|
| 3950 |
+
4201 1270
|
| 3951 |
+
1375 2909
|
| 3952 |
+
1949 2912
|
| 3953 |
+
422 175
|
| 3954 |
+
585 2254
|
| 3955 |
+
945 731
|
| 3956 |
+
2914 307
|
| 3957 |
+
4208 1164
|
| 3958 |
+
2915 1613
|
| 3959 |
+
4210 383
|
| 3960 |
+
4211 2817
|
| 3961 |
+
181 1368
|
| 3962 |
+
997 2138
|
| 3963 |
+
4214 2916
|
| 3964 |
+
259 608
|
| 3965 |
+
335 473
|
| 3966 |
+
168 2918
|
| 3967 |
+
792 314
|
| 3968 |
+
622 304
|
| 3969 |
+
2248 732
|
| 3970 |
+
2920 1265
|
| 3971 |
+
419 525
|
| 3972 |
+
2921 593
|
| 3973 |
+
292 279
|
| 3974 |
+
376 274
|
| 3975 |
+
2096 481
|
| 3976 |
+
2294 2280
|
| 3977 |
+
361 2692
|
| 3978 |
+
280 318
|
| 3979 |
+
178 330
|
| 3980 |
+
307 715
|
| 3981 |
+
835 299
|
| 3982 |
+
342 2296
|
| 3983 |
+
450 284
|
| 3984 |
+
1013 271
|
| 3985 |
+
4236 167
|
| 3986 |
+
383 274
|
| 3987 |
+
264 2880
|
| 3988 |
+
299 454
|
| 3989 |
+
1282 261
|
| 3990 |
+
656 1096
|
| 3991 |
+
444 280
|
| 3992 |
+
686 1199
|
| 3993 |
+
4244 1097
|
| 3994 |
+
4245 2929
|
| 3995 |
+
669 1167
|
| 3996 |
+
2298 273
|
| 3997 |
+
1079 2790
|
| 3998 |
+
487 1949
|
| 3999 |
+
785 1626
|
| 4000 |
+
430 1106
|
| 4001 |
+
4252 1930
|
| 4002 |
+
4253 2528
|
| 4003 |
+
1199 339
|
| 4004 |
+
337 315
|
| 4005 |
+
332 435
|
| 4006 |
+
278 840
|
| 4007 |
+
2933 1377
|
| 4008 |
+
324 272
|
| 4009 |
+
393 264
|
| 4010 |
+
501 680
|
| 4011 |
+
178 2853
|
| 4012 |
+
292 527
|
| 4013 |
+
299 395
|
| 4014 |
+
826 1709
|
| 4015 |
+
1553 260
|
| 4016 |
+
4267 430
|
| 4017 |
+
4268 285
|
| 4018 |
+
4269 495
|
| 4019 |
+
556 1860
|
| 4020 |
+
320 619
|
| 4021 |
+
1173 369
|
| 4022 |
+
283 318
|
| 4023 |
+
4274 374
|
| 4024 |
+
4275 1416
|
| 4025 |
+
4276 435
|
| 4026 |
+
2300 301
|
| 4027 |
+
1685 479
|
| 4028 |
+
811 10
|
| 4029 |
+
182 1941
|
| 4030 |
+
733 182
|
| 4031 |
+
677 342
|
| 4032 |
+
319 307
|
| 4033 |
+
1052 414
|
| 4034 |
+
382 334
|
| 4035 |
+
685 387
|
| 4036 |
+
841 1760
|
| 4037 |
+
1748 618
|
| 4038 |
+
436 270
|
| 4039 |
+
504 822
|
| 4040 |
+
397 797
|
| 4041 |
+
1273 619
|
| 4042 |
+
351 1294
|
| 4043 |
+
334 973
|
| 4044 |
+
143 435
|
| 4045 |
+
4296 299
|
| 4046 |
+
182 1166
|
| 4047 |
+
256 851
|
| 4048 |
+
325 1210
|
| 4049 |
+
1512 721
|
| 4050 |
+
280 1057
|
| 4051 |
+
312 650
|
| 4052 |
+
2275 1832
|
| 4053 |
+
432 685
|
| 4054 |
+
308 603
|
| 4055 |
+
4306 1163
|
| 4056 |
+
1234 277
|
| 4057 |
+
171 299
|
| 4058 |
+
314 619
|
| 4059 |
+
256 133
|
| 4060 |
+
257 2945
|
| 4061 |
+
596 449
|
| 4062 |
+
4313 2946
|
| 4063 |
+
4314 2950
|
| 4064 |
+
1702 568
|
| 4065 |
+
1361 1962
|
| 4066 |
+
562 184
|
| 4067 |
+
2312 2959
|
| 4068 |
+
259 472
|
| 4069 |
+
2581 2772
|
| 4070 |
+
826 1762
|
| 4071 |
+
904 294
|
| 4072 |
+
2281 523
|
| 4073 |
+
4324 1070
|
| 4074 |
+
4325 321
|
| 4075 |
+
2314 482
|
| 4076 |
+
4327 2960
|
| 4077 |
+
4328 488
|
| 4078 |
+
261 379
|
| 4079 |
+
185 974
|
| 4080 |
+
4331 307
|
| 4081 |
+
4332 555
|
| 4082 |
+
337 930
|
| 4083 |
+
2288 327
|
| 4084 |
+
4335 2840
|
| 4085 |
+
4336 271
|
| 4086 |
+
4337 2216
|
| 4087 |
+
314 945
|
| 4088 |
+
344 443
|
| 4089 |
+
172 616
|
| 4090 |
+
4341 323
|
| 4091 |
+
4342 304
|
| 4092 |
+
178 1134
|
| 4093 |
+
150 383
|
| 4094 |
+
1149 495
|
| 4095 |
+
482 1580
|
| 4096 |
+
2965 264
|
| 4097 |
+
4348 2966
|
| 4098 |
+
1176 276
|
| 4099 |
+
156 317
|
| 4100 |
+
1096 264
|
| 4101 |
+
307 369
|
| 4102 |
+
4353 359
|
| 4103 |
+
658 332
|
| 4104 |
+
2967 321
|
| 4105 |
+
1708 302
|
| 4106 |
+
166 1664
|
| 4107 |
+
4358 359
|
| 4108 |
+
2954 614
|
| 4109 |
+
653 436
|
| 4110 |
+
620 332
|
| 4111 |
+
270 178
|
| 4112 |
+
353 277
|
| 4113 |
+
134 1416
|
| 4114 |
+
4365 2972
|
| 4115 |
+
729 420
|
| 4116 |
+
536 39
|
| 4117 |
+
1274 2321
|
| 4118 |
+
4369 32
|
| 4119 |
+
32 331
|
| 4120 |
+
287 421
|
| 4121 |
+
4372 340
|
| 4122 |
+
370 471
|
| 4123 |
+
2979 888
|
| 4124 |
+
681 460
|
| 4125 |
+
383 1366
|
| 4126 |
+
618 802
|
| 4127 |
+
1081 2793
|
| 4128 |
+
370 1249
|
| 4129 |
+
271 1030
|
| 4130 |
+
271 846
|
| 4131 |
+
2988 1382
|
| 4132 |
+
4383 311
|
| 4133 |
+
4384 550
|
| 4134 |
+
481 170
|
| 4135 |
+
32 523
|
| 4136 |
+
32 465
|
| 4137 |
+
4388 1034
|
| 4138 |
+
1274 2993
|
| 4139 |
+
2331 32
|
| 4140 |
+
338 611
|
| 4141 |
+
4392 505
|
| 4142 |
+
4393 1716
|
| 4143 |
+
4394 362
|
| 4144 |
+
4395 357
|
| 4145 |
+
714 2992
|
| 4146 |
+
519 1717
|
| 4147 |
+
839 348
|
| 4148 |
+
4399 319
|
| 4149 |
+
156 273
|
| 4150 |
+
526 708
|
| 4151 |
+
423 685
|
| 4152 |
+
702 613
|
| 4153 |
+
421 538
|
| 4154 |
+
747 307
|
| 4155 |
+
4406 419
|
| 4156 |
+
971 379
|
| 4157 |
+
398 1975
|
| 4158 |
+
2940 712
|
| 4159 |
+
296 156
|
| 4160 |
+
1328 280
|
| 4161 |
+
279 277
|
| 4162 |
+
167 623
|
| 4163 |
+
1530 991
|
| 4164 |
+
1660 696
|
| 4165 |
+
350 1533
|
| 4166 |
+
320 2998
|
| 4167 |
+
262 945
|
| 4168 |
+
302 905
|
| 4169 |
+
1656 292
|
| 4170 |
+
264 1406
|
| 4171 |
+
331 272
|
| 4172 |
+
721 295
|
| 4173 |
+
327 1380
|
| 4174 |
+
1057 172
|
| 4175 |
+
487 270
|
| 4176 |
+
594 1905
|
| 4177 |
+
292 389
|
| 4178 |
+
577 1237
|
| 4179 |
+
1314 2855
|
| 4180 |
+
331 658
|
| 4181 |
+
371 184
|
| 4182 |
+
4433 317
|
| 4183 |
+
618 676
|
| 4184 |
+
468 1969
|
| 4185 |
+
2340 3002
|
| 4186 |
+
4437 270
|
| 4187 |
+
3003 1674
|
| 4188 |
+
4439 1653
|
| 4189 |
+
1018 943
|
| 4190 |
+
4441 786
|
| 4191 |
+
174 1458
|
| 4192 |
+
166 261
|
| 4193 |
+
4444 256
|
| 4194 |
+
4445 1534
|
| 4195 |
+
4446 285
|
| 4196 |
+
397 589
|
| 4197 |
+
463 2719
|
| 4198 |
+
4449 292
|
| 4199 |
+
435 744
|
| 4200 |
+
451 285
|
| 4201 |
+
276 181
|
| 4202 |
+
676 636
|
| 4203 |
+
325 280
|
| 4204 |
+
2345 992
|
| 4205 |
+
1695 32
|
| 4206 |
+
1909 517
|
| 4207 |
+
397 379
|
| 4208 |
+
32 444
|
| 4209 |
+
329 376
|
| 4210 |
+
368 257
|
| 4211 |
+
292 2903
|
| 4212 |
+
1536 443
|
| 4213 |
+
4464 1348
|
| 4214 |
+
2230 481
|
| 4215 |
+
487 443
|
| 4216 |
+
277 1537
|
| 4217 |
+
134 284
|
| 4218 |
+
155 2349
|
| 4219 |
+
800 2093
|
| 4220 |
+
4471 1722
|
| 4221 |
+
462 2350
|
| 4222 |
+
4473 547
|
| 4223 |
+
4474 285
|
| 4224 |
+
3015 3016
|
| 4225 |
+
1270 444
|
| 4226 |
+
838 330
|
| 4227 |
+
361 1698
|
| 4228 |
+
377 323
|
| 4229 |
+
264 1098
|
| 4230 |
+
171 346
|
| 4231 |
+
4482 265
|
| 4232 |
+
4483 364
|
| 4233 |
+
4484 285
|
| 4234 |
+
4485 540
|
| 4235 |
+
806 2353
|
| 4236 |
+
4487 2334
|
| 4237 |
+
1259 372
|
| 4238 |
+
4489 3020
|
| 4239 |
+
758 982
|
| 4240 |
+
4491 1715
|
| 4241 |
+
1722 2943
|
| 4242 |
+
314 2305
|
| 4243 |
+
381 304
|
| 4244 |
+
393 1982
|
| 4245 |
+
482 333
|
| 4246 |
+
1903 807
|
| 4247 |
+
3023 1724
|
| 4248 |
+
4499 2318
|
| 4249 |
+
470 45
|
| 4250 |
+
482 275
|
| 4251 |
+
4502 2053
|
| 4252 |
+
392 669
|
| 4253 |
+
2179 729
|
| 4254 |
+
264 3027
|
| 4255 |
+
371 638
|
| 4256 |
+
300 1503
|
| 4257 |
+
3032 970
|
| 4258 |
+
888 262
|
| 4259 |
+
289 285
|
| 4260 |
+
1229 349
|
| 4261 |
+
2354 2322
|
| 4262 |
+
342 1083
|
| 4263 |
+
271 543
|
| 4264 |
+
747 1070
|
| 4265 |
+
4516 762
|
| 4266 |
+
4517 291
|
| 4267 |
+
850 634
|
| 4268 |
+
386 473
|
| 4269 |
+
156 775
|
| 4270 |
+
310 161
|
| 4271 |
+
270 164
|
| 4272 |
+
312 619
|
| 4273 |
+
1984 1233
|
| 4274 |
+
4525 1977
|
| 4275 |
+
4526 2619
|
| 4276 |
+
4527 3035
|
| 4277 |
+
4528 802
|
| 4278 |
+
4529 2976
|
| 4279 |
+
4530 2356
|
| 4280 |
+
4531 2343
|
| 4281 |
+
4532 2338
|
| 4282 |
+
4533 603
|
| 4283 |
+
4534 319
|
| 4284 |
+
4535 399
|
| 4285 |
+
4536 508
|
| 4286 |
+
4537 330
|
| 4287 |
+
4538 894
|
| 4288 |
+
4539 1386
|
| 4289 |
+
4540 39
|
| 4290 |
+
4541 3037
|
| 4291 |
+
4542 2314
|
| 4292 |
+
4543 762
|
| 4293 |
+
4544 716
|
| 4294 |
+
4545 3038
|
| 4295 |
+
4546 564
|
| 4296 |
+
4547 2985
|
| 4297 |
+
4548 3039
|
| 4298 |
+
4549 3040
|
| 4299 |
+
4550 349
|
| 4300 |
+
4551 1961
|
| 4301 |
+
4552 861
|
| 4302 |
+
4553 1165
|
| 4303 |
+
2359 2160
|
| 4304 |
+
4555 323
|
| 4305 |
+
154 944
|
| 4306 |
+
1986 896
|
| 4307 |
+
672 574
|
| 4308 |
+
334 178
|
| 4309 |
+
319 356
|
| 4310 |
+
265 634
|
| 4311 |
+
259 861
|
| 4312 |
+
610 335
|
| 4313 |
+
2294 1947
|
| 4314 |
+
327 2847
|
| 4315 |
+
898 842
|
| 4316 |
+
393 361
|
| 4317 |
+
1898 1505
|
| 4318 |
+
755 280
|
| 4319 |
+
408 600
|
| 4320 |
+
4571 273
|
| 4321 |
+
4572 372
|
| 4322 |
+
300 433
|
| 4323 |
+
4574 307
|
| 4324 |
+
833 347
|
| 4325 |
+
370 324
|
| 4326 |
+
294 135
|
| 4327 |
+
4578 421
|
| 4328 |
+
4579 308
|
| 4329 |
+
4580 474
|
| 4330 |
+
762 359
|
| 4331 |
+
316 301
|
| 4332 |
+
905 559
|
| 4333 |
+
576 1021
|
| 4334 |
+
1727 647
|
| 4335 |
+
272 395
|
| 4336 |
+
3048 382
|
| 4337 |
+
277 1382
|
| 4338 |
+
400 650
|
| 4339 |
+
170 567
|
| 4340 |
+
3050 3051
|
| 4341 |
+
674 513
|
| 4342 |
+
3053 371
|
| 4343 |
+
159 384
|
| 4344 |
+
477 317
|
| 4345 |
+
4596 1146
|
| 4346 |
+
526 505
|
| 4347 |
+
185 269
|
| 4348 |
+
4599 289
|
| 4349 |
+
4600 340
|
| 4350 |
+
487 867
|
| 4351 |
+
367 332
|
| 4352 |
+
3054 324
|
| 4353 |
+
4604 297
|
| 4354 |
+
431 395
|
| 4355 |
+
690 182
|
| 4356 |
+
1654 1714
|
| 4357 |
+
4608 3059
|
| 4358 |
+
4609 298
|
| 4359 |
+
4610 660
|
| 4360 |
+
181 1873
|
| 4361 |
+
638 745
|
| 4362 |
+
2962 1490
|
| 4363 |
+
561 340
|
| 4364 |
+
4615 394
|
| 4365 |
+
307 290
|
| 4366 |
+
1448 3066
|
| 4367 |
+
1983 300
|
| 4368 |
+
508 478
|
| 4369 |
+
2043 461
|
| 4370 |
+
786 2162
|
| 4371 |
+
325 372
|
| 4372 |
+
379 2468
|
| 4373 |
+
1039 292
|
| 4374 |
+
2697 594
|
| 4375 |
+
281 264
|
| 4376 |
+
260 44
|
| 4377 |
+
503 44
|
| 4378 |
+
2274 271
|
| 4379 |
+
1264 1388
|
| 4380 |
+
1731 571
|
| 4381 |
+
776 281
|
| 4382 |
+
339 283
|
| 4383 |
+
401 292
|
| 4384 |
+
473 461
|
| 4385 |
+
569 1510
|
| 4386 |
+
403 803
|
| 4387 |
+
2376 551
|
| 4388 |
+
262 2056
|
| 4389 |
+
1789 425
|
| 4390 |
+
1100 272
|
| 4391 |
+
1995 835
|
| 4392 |
+
1058 509
|
| 4393 |
+
555 3073
|
| 4394 |
+
1443 271
|
| 4395 |
+
148 1541
|
| 4396 |
+
337 529
|
| 4397 |
+
2377 439
|
| 4398 |
+
557 311
|
| 4399 |
+
2379 337
|
| 4400 |
+
338 834
|
| 4401 |
+
294 2355
|
| 4402 |
+
1156 820
|
| 4403 |
+
1997 1987
|
| 4404 |
+
334 3083
|
| 4405 |
+
335 678
|
| 4406 |
+
636 927
|
| 4407 |
+
32 562
|
| 4408 |
+
509 531
|
| 4409 |
+
4660 287
|
| 4410 |
+
837 304
|
| 4411 |
+
2246 1543
|
| 4412 |
+
488 134
|
| 4413 |
+
319 616
|
| 4414 |
+
596 2541
|
| 4415 |
+
1568 653
|
| 4416 |
+
274 478
|
| 4417 |
+
334 671
|
| 4418 |
+
341 373
|
| 4419 |
+
445 1214
|
| 4420 |
+
562 626
|
| 4421 |
+
1272 867
|
| 4422 |
+
3088 402
|
| 4423 |
+
276 154
|
| 4424 |
+
379 729
|
| 4425 |
+
3089 321
|
| 4426 |
+
1534 848
|
| 4427 |
+
1306 824
|
| 4428 |
+
3090 262
|
| 4429 |
+
671 529
|
| 4430 |
+
1500 580
|
| 4431 |
+
4682 2219
|
| 4432 |
+
338 274
|
| 4433 |
+
4684 833
|
| 4434 |
+
430 622
|
| 4435 |
+
1263 1945
|
| 4436 |
+
737 622
|
| 4437 |
+
4688 1338
|
| 4438 |
+
610 607
|
| 4439 |
+
980 2104
|
| 4440 |
+
3095 39
|
| 4441 |
+
380 1116
|
| 4442 |
+
2385 2129
|
| 4443 |
+
2001 633
|
| 4444 |
+
185 280
|
| 4445 |
+
4696 571
|
| 4446 |
+
361 1528
|
| 4447 |
+
353 1701
|
| 4448 |
+
1238 277
|
| 4449 |
+
4700 387
|
| 4450 |
+
4701 1390
|
| 4451 |
+
329 272
|
| 4452 |
+
4703 538
|
| 4453 |
+
916 654
|
| 4454 |
+
542 349
|
| 4455 |
+
1435 271
|
| 4456 |
+
410 386
|
| 4457 |
+
184 581
|
| 4458 |
+
2297 277
|
| 4459 |
+
318 3080
|
| 4460 |
+
654 168
|
| 4461 |
+
379 1681
|
| 4462 |
+
775 172
|
| 4463 |
+
151 1025
|
| 4464 |
+
488 154
|
| 4465 |
+
4716 607
|
| 4466 |
+
2385 1134
|
| 4467 |
+
2388 337
|
| 4468 |
+
523 541
|
| 4469 |
+
271 161
|
| 4470 |
+
260 39
|
| 4471 |
+
519 745
|
| 4472 |
+
632 529
|
| 4473 |
+
733 171
|
| 4474 |
+
719 729
|
| 4475 |
+
1124 269
|
| 4476 |
+
4727 167
|
| 4477 |
+
327 2392
|
| 4478 |
+
503 311
|
| 4479 |
+
323 2393
|
| 4480 |
+
907 437
|
| 4481 |
+
1483 3108
|
| 4482 |
+
178 785
|
| 4483 |
+
490 971
|
| 4484 |
+
32 318
|
| 4485 |
+
755 645
|
| 4486 |
+
385 728
|
| 4487 |
+
174 1371
|
| 4488 |
+
699 156
|
| 4489 |
+
291 565
|
| 4490 |
+
377 299
|
| 4491 |
+
541 383
|
| 4492 |
+
951 317
|
| 4493 |
+
284 391
|
| 4494 |
+
850 1184
|
| 4495 |
+
948 647
|
| 4496 |
+
2810 1006
|
| 4497 |
+
468 277
|
| 4498 |
+
915 454
|
| 4499 |
+
741 296
|
| 4500 |
+
1036 1946
|
| 4501 |
+
305 846
|
| 4502 |
+
2737 1545
|
| 4503 |
+
691 277
|
| 4504 |
+
649 648
|
| 4505 |
+
958 1215
|
| 4506 |
+
667 2397
|
| 4507 |
+
1734 941
|
| 4508 |
+
4759 537
|
| 4509 |
+
566 278
|
| 4510 |
+
1217 613
|
| 4511 |
+
1335 557
|
| 4512 |
+
168 1517
|
| 4513 |
+
814 170
|
| 4514 |
+
1339 1019
|
| 4515 |
+
1367 292
|
| 4516 |
+
44 895
|
| 4517 |
+
1687 866
|
| 4518 |
+
361 715
|
| 4519 |
+
276 174
|
| 4520 |
+
323 366
|
| 4521 |
+
4772 2907
|
| 4522 |
+
4773 272
|
| 4523 |
+
1150 1371
|
| 4524 |
+
900 424
|
| 4525 |
+
360 405
|
| 4526 |
+
4777 273
|
| 4527 |
+
1460 2388
|
| 4528 |
+
302 1250
|
| 4529 |
+
804 3116
|
| 4530 |
+
491 156
|
| 4531 |
+
329 463
|
| 4532 |
+
488 1530
|
| 4533 |
+
4784 982
|
| 4534 |
+
4785 1810
|
| 4535 |
+
1036 1831
|
| 4536 |
+
489 657
|
| 4537 |
+
588 1167
|
| 4538 |
+
298 440
|
| 4539 |
+
1141 277
|
| 4540 |
+
325 1477
|
| 4541 |
+
3121 1072
|
| 4542 |
+
963 1206
|
| 4543 |
+
687 491
|
| 4544 |
+
171 620
|
| 4545 |
+
3122 2403
|
| 4546 |
+
151 285
|
| 4547 |
+
4798 280
|
| 4548 |
+
325 391
|
| 4549 |
+
137 1806
|
| 4550 |
+
830 3124
|
| 4551 |
+
4802 1662
|
| 4552 |
+
1871 342
|
| 4553 |
+
276 912
|
| 4554 |
+
759 466
|
| 4555 |
+
307 704
|
| 4556 |
+
339 284
|
| 4557 |
+
890 1237
|
| 4558 |
+
168 1164
|
| 4559 |
+
2816 1563
|
| 4560 |
+
347 274
|
| 4561 |
+
2106 3117
|
| 4562 |
+
419 314
|
| 4563 |
+
4814 282
|
| 4564 |
+
274 542
|
| 4565 |
+
2337 939
|
| 4566 |
+
4817 2007
|
| 4567 |
+
374 317
|
| 4568 |
+
4819 842
|
| 4569 |
+
371 993
|
| 4570 |
+
2666 1086
|
| 4571 |
+
1048 1459
|
| 4572 |
+
277 150
|
| 4573 |
+
174 328
|
| 4574 |
+
329 1388
|
| 4575 |
+
426 170
|
| 4576 |
+
4827 834
|
| 4577 |
+
989 1114
|
| 4578 |
+
302 929
|
| 4579 |
+
743 264
|
| 4580 |
+
1362 1739
|
| 4581 |
+
529 170
|
| 4582 |
+
664 1740
|
| 4583 |
+
292 2215
|
| 4584 |
+
672 1524
|
| 4585 |
+
171 3132
|
| 4586 |
+
165 1524
|
| 4587 |
+
1383 286
|
| 4588 |
+
172 1163
|
| 4589 |
+
260 438
|
| 4590 |
+
458 1648
|
| 4591 |
+
4842 291
|
| 4592 |
+
523 284
|
| 4593 |
+
355 561
|
| 4594 |
+
4845 2798
|
| 4595 |
+
487 2210
|
| 4596 |
+
381 1256
|
| 4597 |
+
436 764
|
| 4598 |
+
380 722
|
| 4599 |
+
4850 371
|
| 4600 |
+
413 372
|
| 4601 |
+
582 1359
|
| 4602 |
+
430 283
|
| 4603 |
+
1897 557
|
| 4604 |
+
3136 425
|
| 4605 |
+
2100 363
|
| 4606 |
+
408 634
|
| 4607 |
+
903 616
|
| 4608 |
+
292 303
|
| 4609 |
+
321 3137
|
| 4610 |
+
1344 2270
|
| 4611 |
+
2412 1039
|
| 4612 |
+
610 342
|
| 4613 |
+
624 1739
|
| 4614 |
+
3139 2870
|
| 4615 |
+
345 886
|
| 4616 |
+
341 347
|
| 4617 |
+
260 391
|
| 4618 |
+
1539 461
|
| 4619 |
+
929 329
|
| 4620 |
+
271 624
|
| 4621 |
+
2169 398
|
| 4622 |
+
4873 310
|
| 4623 |
+
4874 3142
|
| 4624 |
+
4875 299
|
| 4625 |
+
4876 260
|
| 4626 |
+
4877 634
|
| 4627 |
+
548 636
|
| 4628 |
+
1013 349
|
| 4629 |
+
335 278
|
| 4630 |
+
288 182
|
| 4631 |
+
284 320
|
| 4632 |
+
3145 627
|
| 4633 |
+
996 2919
|
| 4634 |
+
4885 548
|
| 4635 |
+
296 1993
|
| 4636 |
+
1139 1262
|
| 4637 |
+
596 1213
|
| 4638 |
+
835 262
|
| 4639 |
+
1119 1505
|
| 4640 |
+
893 382
|
| 4641 |
+
449 1429
|
| 4642 |
+
423 740
|
| 4643 |
+
266 639
|
| 4644 |
+
268 160
|
| 4645 |
+
764 424
|
| 4646 |
+
377 1761
|
| 4647 |
+
1928 2405
|
| 4648 |
+
325 3149
|
| 4649 |
+
2418 749
|
| 4650 |
+
2419 846
|
| 4651 |
+
170 1061
|
| 4652 |
+
361 2140
|
| 4653 |
+
279 274
|
| 4654 |
+
1536 2403
|
| 4655 |
+
709 363
|
| 4656 |
+
1836 1481
|
| 4657 |
+
267 543
|
| 4658 |
+
4909 1394
|
| 4659 |
+
533 265
|
| 4660 |
+
1513 1546
|
| 4661 |
+
181 274
|
| 4662 |
+
512 489
|
| 4663 |
+
3154 764
|
| 4664 |
+
3085 265
|
| 4665 |
+
3030 2267
|
| 4666 |
+
274 365
|
| 4667 |
+
3155 1625
|
| 4668 |
+
771 273
|
| 4669 |
+
379 1319
|
| 4670 |
+
321 626
|
| 4671 |
+
323 555
|
| 4672 |
+
360 2423
|
| 4673 |
+
763 342
|
| 4674 |
+
636 407
|
| 4675 |
+
1992 664
|
| 4676 |
+
323 348
|
| 4677 |
+
1220 3146
|
| 4678 |
+
184 3160
|
| 4679 |
+
2036 274
|
| 4680 |
+
2421 2375
|
| 4681 |
+
941 373
|
| 4682 |
+
368 283
|
| 4683 |
+
2380 2615
|
| 4684 |
+
270 742
|
| 4685 |
+
1765 1193
|
| 4686 |
+
4937 2834
|
| 4687 |
+
2222 858
|
| 4688 |
+
438 2422
|
| 4689 |
+
4940 911
|
| 4690 |
+
888 669
|
| 4691 |
+
150 328
|
| 4692 |
+
143 273
|
| 4693 |
+
1776 962
|
| 4694 |
+
426 278
|
| 4695 |
+
3164 645
|
| 4696 |
+
930 868
|
| 4697 |
+
1957 460
|
| 4698 |
+
133 3102
|
| 4699 |
+
426 570
|
| 4700 |
+
2424 1851
|
| 4701 |
+
588 168
|
| 4702 |
+
4953 1017
|
| 4703 |
+
4954 181
|
| 4704 |
+
4955 399
|
| 4705 |
+
1260 284
|
| 4706 |
+
371 1429
|
| 4707 |
+
1172 1390
|
| 4708 |
+
898 836
|
| 4709 |
+
4960 276
|
| 4710 |
+
4961 665
|
| 4711 |
+
329 1131
|
| 4712 |
+
4963 270
|
| 4713 |
+
508 730
|
| 4714 |
+
380 2013
|
| 4715 |
+
403 172
|
| 4716 |
+
185 448
|
| 4717 |
+
2013 445
|
| 4718 |
+
1287 591
|
| 4719 |
+
1972 372
|
| 4720 |
+
178 2423
|
| 4721 |
+
553 566
|
| 4722 |
+
3006 1478
|
| 4723 |
+
659 170
|
| 4724 |
+
332 1570
|
| 4725 |
+
321 134
|
| 4726 |
+
154 2686
|
| 4727 |
+
272 298
|
| 4728 |
+
278 648
|
| 4729 |
+
334 723
|
| 4730 |
+
740 273
|
| 4731 |
+
1076 298
|
| 4732 |
+
939 172
|
| 4733 |
+
2427 1278
|
| 4734 |
+
636 1098
|
| 4735 |
+
2417 271
|
| 4736 |
+
711 344
|
| 4737 |
+
342 378
|
| 4738 |
+
1446 867
|
| 4739 |
+
271 1278
|
| 4740 |
+
156 2779
|
| 4741 |
+
900 773
|
| 4742 |
+
956 2193
|
| 4743 |
+
327 168
|
| 4744 |
+
555 325
|
| 4745 |
+
323 274
|
| 4746 |
+
1135 361
|
| 4747 |
+
1223 172
|
tokenizer_model/hindi_sentiments_basic.vocab
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
train.py
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""
|
| 2 |
+
This script is used to train the tokenizer model using the combined content of the dataset.
|
| 3 |
+
The trained model is saved in the tokenizer_model directory.
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
import os
|
| 7 |
+
from tokenizer.basic_bpe import BasicTokenizer
|
| 8 |
+
|
| 9 |
+
# reading the input file
|
| 10 |
+
combined_file_path = "hindi_combined.txt"
|
| 11 |
+
combined_file_path = os.path.join(os.getcwd(), "data", combined_file_path)
|
| 12 |
+
with open(combined_file_path, "r") as file:
|
| 13 |
+
combined_content = file.read()
|
| 14 |
+
|
| 15 |
+
basic_tokenizer = BasicTokenizer()
|
| 16 |
+
print("Training the tokenizer model...")
|
| 17 |
+
basic_tokenizer.train(combined_content, vocab_size=5000, verbose=True)
|
| 18 |
+
|
| 19 |
+
print("Saving the model...")
|
| 20 |
+
model_path = os.path.join(os.getcwd(), "tokenizer_model")
|
| 21 |
+
os.makedirs(model_path, exist_ok=True)
|
| 22 |
+
prefix = os.path.join(model_path, "hindi_sentiments_basic")
|
| 23 |
+
basic_tokenizer.save(prefix)
|
| 24 |
+
print("Model saved at:", prefix)
|