471 lines
78 KiB
Plaintext
471 lines
78 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 10,
|
|
"id": "c91abe80-8d3c-42f2-a3d0-c74ad99f23b0",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"sequence_length = 2 # longitud de la ventana"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 11,
|
|
"id": "1be328c3-d3b7-4558-84b7-1a4131f58168",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"from tensorflow.keras.preprocessing.text import Tokenizer\n",
|
|
"from tensorflow.keras.preprocessing.sequence import pad_sequences\n",
|
|
"\n",
|
|
"events = []\n",
|
|
"unique_events = []\n",
|
|
"with open('events-dataset-audit.txt', 'r') as file:\n",
|
|
" # Read all lines into a list\n",
|
|
" for line in file:\n",
|
|
" event = line.rstrip()\n",
|
|
" events.append(event)\n",
|
|
" if event not in unique_events:\n",
|
|
" unique_events.append(event)\n",
|
|
"\n",
|
|
"\n",
|
|
"# Initialize the tokenizer\n",
|
|
"tokenizer = Tokenizer(num_words=10000) #len(data)) # Limit vocabulary size to 10,000 words\n",
|
|
"tokenizer.fit_on_texts(unique_events)\n",
|
|
"\n",
|
|
"# Convert data to sequences of integers\n",
|
|
"X_train_seq = tokenizer.texts_to_sequences(unique_events)\n",
|
|
"\n",
|
|
"# Pad sequences to a fixed length (e.g., 10 words)\n",
|
|
"X_train_padded = pad_sequences(X_train_seq, maxlen=10)\n",
|
|
"\n",
|
|
"#len(X_train_padded)\n",
|
|
"\n",
|
|
"#unique_values"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"id": "07059547-7de6-4987-b421-980411fa6f96",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"X = []\n",
|
|
"y = [] \n",
|
|
"encoded_events = unique_events\n",
|
|
"for i in range(len(encoded_events) - sequence_length):\n",
|
|
" X.append(encoded_events[i:i + sequence_length]) # Secuencia de entrada\n",
|
|
" y.append(encoded_events[i + sequence_length]) # Evento objetivo\n",
|
|
"\n",
|
|
"#X\n",
|
|
"#y"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 14,
|
|
"id": "dfb9b92f-75ec-4994-982c-d3dd35807a33",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"\n",
|
|
"vocab_size = len(unique_events) \n",
|
|
"\n",
|
|
"# Convertir X a one-shot encoding \n",
|
|
"X_one_hot = np.zeros((len(X), sequence_length, vocab_size))\n",
|
|
"for i, sequence in enumerate(X):\n",
|
|
" for j, event in enumerate(sequence):\n",
|
|
" X_one_hot[i, j] = 1 \n",
|
|
"\n",
|
|
"# Convertir y a one-shot encoding \n",
|
|
"y_one_hot = np.zeros((len(y), vocab_size))\n",
|
|
"for i, event in enumerate(y):\n",
|
|
" y_one_hot[i] = 1 \n",
|
|
"\n",
|
|
"#y_one_hot[0]\n",
|
|
"#X_one_hot"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 15,
|
|
"id": "8a8baab3-9a9c-4b0f-a27a-403ceee39e39",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"X_train shape: (144, 2, 146)\n",
|
|
"y_train shape: (144, 146)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"\n",
|
|
"print(\"X_train shape:\", X_one_hot.shape)\n",
|
|
"print(\"y_train shape:\", y_one_hot.shape)\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 17,
|
|
"id": "74548eef-86b7-4050-8fb9-24fd28213c1d",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stderr",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"/home/jesusperezlorenzo/anaconda3/lib/python3.12/site-packages/keras/src/layers/rnn/rnn.py:200: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n",
|
|
" super().__init__(**kwargs)\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential\"</span>\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
|
"┃<span style=\"font-weight: bold\"> Layer (type) </span>┃<span style=\"font-weight: bold\"> Output Shape </span>┃<span style=\"font-weight: bold\"> Param # </span>┃\n",
|
|
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
|
"│ lstm (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">LSTM</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">2</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">256</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">412,672</span> │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ lstm_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">LSTM</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">128</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">197,120</span> │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ dense (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>) │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">146</span>) │ <span style=\"color: #00af00; text-decoration-color: #00af00\">18,834</span> │\n",
|
|
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
|
|
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
|
|
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
|
|
"│ lstm (\u001b[38;5;33mLSTM\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m2\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m412,672\u001b[0m │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ lstm_1 (\u001b[38;5;33mLSTM\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m197,120\u001b[0m │\n",
|
|
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
|
|
"│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m146\u001b[0m) │ \u001b[38;5;34m18,834\u001b[0m │\n",
|
|
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">628,626</span> (2.40 MB)\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m628,626\u001b[0m (2.40 MB)\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">628,626</span> (2.40 MB)\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m628,626\u001b[0m (2.40 MB)\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"text/html": [
|
|
"<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
|
|
"</pre>\n"
|
|
],
|
|
"text/plain": [
|
|
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Epoch 1/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1s/step - accuracy: 0.0000e+00 - loss: 727.8144 - val_accuracy: 0.0000e+00 - val_loss: 727.9026\n",
|
|
"Epoch 2/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step - accuracy: 0.0000e+00 - loss: 727.9030 - val_accuracy: 0.0000e+00 - val_loss: 728.2988\n",
|
|
"Epoch 3/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step - accuracy: 0.0000e+00 - loss: 728.2980 - val_accuracy: 0.0000e+00 - val_loss: 729.1073\n",
|
|
"Epoch 4/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 729.1066 - val_accuracy: 0.0000e+00 - val_loss: 730.4880\n",
|
|
"Epoch 5/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 730.4852 - val_accuracy: 0.0000e+00 - val_loss: 732.5898\n",
|
|
"Epoch 6/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step - accuracy: 0.0000e+00 - loss: 732.5815 - val_accuracy: 0.0000e+00 - val_loss: 735.4796\n",
|
|
"Epoch 7/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 48ms/step - accuracy: 0.0000e+00 - loss: 735.4669 - val_accuracy: 0.0000e+00 - val_loss: 739.1130\n",
|
|
"Epoch 8/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step - accuracy: 0.0000e+00 - loss: 739.0916 - val_accuracy: 0.0000e+00 - val_loss: 743.3353\n",
|
|
"Epoch 9/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 48ms/step - accuracy: 0.0000e+00 - loss: 743.3066 - val_accuracy: 0.0000e+00 - val_loss: 747.9219\n",
|
|
"Epoch 10/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 747.9171 - val_accuracy: 0.0000e+00 - val_loss: 752.6348\n",
|
|
"Epoch 11/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 752.6017 - val_accuracy: 0.0000e+00 - val_loss: 757.2569\n",
|
|
"Epoch 12/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step - accuracy: 0.0000e+00 - loss: 757.2258 - val_accuracy: 0.0000e+00 - val_loss: 761.6079\n",
|
|
"Epoch 13/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 761.6020 - val_accuracy: 0.0000e+00 - val_loss: 765.5532\n",
|
|
"Epoch 14/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step - accuracy: 0.0000e+00 - loss: 765.4924 - val_accuracy: 0.0000e+00 - val_loss: 769.0084\n",
|
|
"Epoch 15/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step - accuracy: 0.0000e+00 - loss: 768.9764 - val_accuracy: 0.0000e+00 - val_loss: 771.9425\n",
|
|
"Epoch 16/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 771.9097 - val_accuracy: 0.0000e+00 - val_loss: 774.3696\n",
|
|
"Epoch 17/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 774.3486 - val_accuracy: 0.0000e+00 - val_loss: 776.3380\n",
|
|
"Epoch 18/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 35ms/step - accuracy: 0.0000e+00 - loss: 776.3245 - val_accuracy: 0.0000e+00 - val_loss: 777.9149\n",
|
|
"Epoch 19/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 45ms/step - accuracy: 0.0000e+00 - loss: 777.8726 - val_accuracy: 0.0000e+00 - val_loss: 779.1755\n",
|
|
"Epoch 20/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 779.1675 - val_accuracy: 0.0000e+00 - val_loss: 780.1923\n",
|
|
"Epoch 21/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 34ms/step - accuracy: 0.0000e+00 - loss: 780.2054 - val_accuracy: 0.0000e+00 - val_loss: 781.0284\n",
|
|
"Epoch 22/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 49ms/step - accuracy: 0.0000e+00 - loss: 781.0122 - val_accuracy: 0.0000e+00 - val_loss: 781.7344\n",
|
|
"Epoch 23/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step - accuracy: 0.0000e+00 - loss: 781.7183 - val_accuracy: 0.0000e+00 - val_loss: 782.3456\n",
|
|
"Epoch 24/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 782.3322 - val_accuracy: 0.0000e+00 - val_loss: 782.8824\n",
|
|
"Epoch 25/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step - accuracy: 0.0000e+00 - loss: 782.8856 - val_accuracy: 0.0000e+00 - val_loss: 783.3542\n",
|
|
"Epoch 26/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step - accuracy: 0.0000e+00 - loss: 783.3599 - val_accuracy: 0.0000e+00 - val_loss: 783.7628\n",
|
|
"Epoch 27/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 783.7398 - val_accuracy: 0.0000e+00 - val_loss: 784.1066\n",
|
|
"Epoch 28/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 32ms/step - accuracy: 0.0000e+00 - loss: 784.0988 - val_accuracy: 0.0000e+00 - val_loss: 784.3851\n",
|
|
"Epoch 29/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 33ms/step - accuracy: 0.0000e+00 - loss: 784.3781 - val_accuracy: 0.0000e+00 - val_loss: 784.6022\n",
|
|
"Epoch 30/30\n",
|
|
"\u001b[1m1/1\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 31ms/step - accuracy: 0.0000e+00 - loss: 784.5906 - val_accuracy: 0.0000e+00 - val_loss: 784.7664\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"\n",
|
|
"from tensorflow.keras.models import Sequential\n",
|
|
"from tensorflow.keras. layers import LSTM, Dense\n",
|
|
"from tensorflow.keras.optimizers import Adam\n",
|
|
"\n",
|
|
"# Parameters\n",
|
|
"input_length = 2 # Length of the sequence window (adjust if it's 3)\n",
|
|
"vocab_size = len(unique_events) #95 # Number of unique events in the vocabulary\n",
|
|
"lstm_units_1 = 256 # Depth of the first LSTM layer\n",
|
|
"lstm_units_2 = 128 # Depth of the second LSTM layer\n",
|
|
"dropout_rate = 0.2 # Recurrent dropout rate\n",
|
|
"batch_size = 256 # Batch size for training\n",
|
|
"epochs = 30 # Number of epochs\n",
|
|
"\n",
|
|
"# Model architecture|\n",
|
|
"model = Sequential([\n",
|
|
" LSTM(lstm_units_1, return_sequences=True, recurrent_dropout=dropout_rate, input_shape=(input_length, vocab_size)),\n",
|
|
" LSTM(lstm_units_2, return_sequences=False, recurrent_dropout=dropout_rate), \n",
|
|
" Dense(vocab_size, activation='softmax') # Dense layer with softmax activation\n",
|
|
"])\n",
|
|
"# Compile the model\n",
|
|
"model.compile(\n",
|
|
" optimizer=Adam(), # Adam optimizer with default parameters\n",
|
|
" loss='categorical_crossentropy', # Categorical cross-entropy loss\n",
|
|
" metrics=['accuracy']\n",
|
|
")\n",
|
|
"# Print the model summary\n",
|
|
"model.summary()\n",
|
|
"# Model training (example; you need to provide X_train and y_train as numpy arrays)\n",
|
|
"# model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.2)\n",
|
|
"X_train = X_one_hot\n",
|
|
"y_train = y_one_hot\n",
|
|
"history = model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_split=0.2)\n",
|
|
"#model.fit(X_train_padded, X_train_padded, batch_size=batch_size, epochs=epochs, validation_split=0.2)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 18,
|
|
"id": "36862d14-4bdc-44f2-a7f0-3f09693ffddf",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHFCAYAAADv8c1wAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5NklEQVR4nO3deXQUVf7//1dn6yyGBoFsrEFQiCgfSTSEjxFQCQQRUJwBlBhAQVR2/aiIsukAogIqCKMTwQWBUYTBjSHKIsoiYFiUmHGUbSSRRUmHLZDk/v7wR3+nTQLV0NBpeD7OqXPSt29Vv6so7de5davaZowxAgAAwGkF+LoAAAAAf0BoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAJwWnPmzJHNZpPNZtPKlSvLvW+MUePGjWWz2dS2bVuvfrbNZtPYsWM9Xm/nzp2y2WyaM2eO5XW2bdsmm82m4OBg5efne/yZAC5+hCYAlkRGRiorK6tc+6pVq/Tjjz8qMjLSB1V5z9/+9jdJUklJid566y0fVwOgKiI0AbCkR48eWrhwoZxOp1t7VlaWUlJSVL9+fR9Vdu6Ki4s1d+5ctWjRQnXq1NEbb7zh65IqdezYMfGToYBvEJoAWNKrVy9J0rx581xthYWFWrhwofr161fhOr/++qseeugh1alTRyEhIWrUqJFGjRql4uJit35Op1P9+/dXzZo1ddlll6ljx47617/+VeE2f/jhB919992KioqS3W5Xs2bNNGPGjHPat8WLF+vgwYO6//77lZmZqX/961/68ssvy/UrLi7W+PHj1axZM4WGhqpmzZpq166d1qxZ4+pTVlamV155Rf/zP/+jsLAwVa9eXa1atdKSJUtcfSq77NiwYUP16dPH9frUpdFly5apX79+ql27tsLDw1VcXKx///vf6tu3r5o0aaLw8HDVqVNHt99+u7Zt21Zuu4cOHdIjjzyiRo0ayW63KyoqSp06ddL3338vY4yaNGmiDh06lFvv8OHDcjgcevjhhz08osDFidAEwJJq1arprrvuchuFmTdvngICAtSjR49y/Y8fP6527drprbfe0ogRI/Txxx+rd+/emjx5su68805XP2OMunXrprfffluPPPKIFi1apFatWik9Pb3cNrdv367rr79e3377rV588UV99NFHuu222zRkyBCNGzfurPctKytLdrtd99xzj/r16yebzVbuUmRJSYnS09P1zDPPqHPnzlq0aJHmzJmj1q1ba/fu3a5+ffr00dChQ3X99ddrwYIFmj9/vrp06aKdO3eedX39+vVTcHCw3n77bb3//vsKDg7W3r17VbNmTU2aNElLly7VjBkzFBQUpOTkZOXl5bnWLSoq0o033qi//vWv6tu3rz788EPNmjVLV155pfLz82Wz2TR48GBlZ2frhx9+cPvct956S06nk9AEnGIA4DRmz55tJJkNGzaYFStWGEnm22+/NcYYc/3115s+ffoYY4y5+uqrTZs2bVzrzZo1y0gyf//7392299xzzxlJZtmyZcYYYz799FMjybz00ktu/f7yl78YSWbMmDGutg4dOpi6deuawsJCt76DBg0yoaGh5tdffzXGGLNjxw4jycyePfuM+7dz504TEBBgevbs6Wpr06aNiYiIME6n09X21ltvGUnm9ddfr3RbX3zxhZFkRo0addrP/ON+ndKgQQOTmZnpen3q2N97771n3I+SkhJz4sQJ06RJEzN8+HBX+/jx440kk52dXem6TqfTREZGmqFDh7q1JyQkmHbt2p3xs4FLBSNNACxr06aNrrjiCr3xxhvatm2bNmzYUOmlueXLlysiIkJ33XWXW/upy0+ff/65JGnFihWSpHvuucet39133+32+vjx4/r88891xx13KDw8XCUlJa6lU6dOOn78uNatW+fxPs2ePVtlZWVu+9GvXz8dOXJECxYscLV9+umnCg0NrXR/T/WR5PWRme7du5drKykp0YQJE5SQkKCQkBAFBQUpJCREP/zwg3Jzc91quvLKK3XrrbdWuv3IyEj17dtXc+bM0ZEjRyT9/u+3fft2DRo0yKv7AvgzQhMAy2w2m/r27at33nnHdYknNTW1wr4HDx5UTEyMbDabW3tUVJSCgoJ08OBBV7+goCDVrFnTrV9MTEy57ZWUlOiVV15RcHCw29KpUydJ0oEDBzzan7KyMs2ZM0dxcXFKTEzUoUOHdOjQId16662KiIhwu0S3f/9+xcXFKSCg8v9t7t+/X4GBgeVqP1exsbHl2kaMGKGnn35a3bp104cffqj169drw4YNatGihY4dO+ZWU926dc/4GYMHD1ZRUZHmzp0rSZo+fbrq1q2rrl27em9HAD8X5OsCAPiXPn36aPTo0Zo1a5b+8pe/VNqvZs2aWr9+vYwxbsFp3759KikpUa1atVz9SkpKdPDgQbfgVFBQ4La9GjVqKDAwUBkZGZWO5MTHx3u0L5999pl27drlquOP1q1bp+3btyshIUG1a9fWl19+qbKyskqDU+3atVVaWqqCgoIKg84pdru93GR4Sa4g+Ud/DJ6S9M477+jee+/VhAkT3NoPHDig6tWru9X0n//8p9JaTmncuLHS09M1Y8YMpaena8mSJRo3bpwCAwPPuC5wqWCkCYBH6tSpo//7v//T7bffrszMzEr73XLLLTp8+LAWL17s1n7qGUi33HKLJKldu3aS5BrhOOXdd991ex0eHq527dopJydH1157rZKSksotFQWf08nKylJAQIAWL16sFStWuC1vv/22JLkmvqenp+v48eOnfWDmqcnrM2fOPO3nNmzYUFu3bnVrW758uQ4fPmy5dpvNJrvd7tb28ccf6+effy5X07/+9S8tX778jNscOnSotm7dqszMTAUGBqp///6W6wEuBYw0AfDYpEmTztjn3nvv1YwZM5SZmamdO3fqmmuu0ZdffqkJEyaoU6dOrjk2aWlpuummm/TYY4/pyJEjSkpK0ldffeUKLf/tpZde0o033qjU1FQ9+OCDatiwoYqKivTvf/9bH374oaVgcMrBgwf1j3/8Qx06dKj0EtTUqVP11ltvaeLEierVq5dmz56tgQMHKi8vT+3atVNZWZnWr1+vZs2aqWfPnkpNTVVGRoaeffZZ/fLLL+rcubPsdrtycnIUHh6uwYMHS5IyMjL09NNPa/To0WrTpo22b9+u6dOny+FwWK6/c+fOmjNnjpo2baprr71WmzZt0vPPP1/uUtywYcO0YMECde3aVU888YRuuOEGHTt2TKtWrVLnzp1doVWS2rdvr4SEBK1YsUK9e/dWVFSU5XqAS4KvZ6IDqNr+++650/nj3XPGGHPw4EEzcOBAExsba4KCgkyDBg3MyJEjzfHjx936HTp0yPTr189Ur17dhIeHm/bt25vvv/++wrvMduzYYfr162fq1KljgoODTe3atU3r1q3Ns88+69ZHZ7h7btq0aUaSWbx4caV9Tt0BuHDhQmOMMceOHTOjR482TZo0MSEhIaZmzZrm5ptvNmvWrHGtU1paaqZOnWqaN29uQkJCjMPhMCkpKebDDz909SkuLjaP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ffSRsrOzdf3116tVq1aaMmWKKxRVr15dr7/+uv73f/9X1157rT7//HN9+OGHqlmzpiRp/Pjx2rlzp6644grVrl3bl7sCAIBHbMYY4+si/J3T6ZTD4VBhYaGqVavm9t7x48e1Y8cOxcfHKzQ01EcVXhw4lgAAbzrd93dF/G6k6dVXX3V9aSYmJmr16tWn7b9q1Sq3BzHOmjWr0r7z58+XzWZTt27dvFw1AADwd34VmhYsWKBhw4Zp1KhRysnJUWpqqtLT07V79+4K++/YsUOdOnVSamqqcnJy9OSTT2rIkCFauHBhub67du3So48+qtTU1PO9GwAAwA/5VWiaMmWK7rvvPt1///1q1qyZpk2bpnr16mnmzJkV9p81a5bq16+vadOmqVmzZrr//vvVr18/vfDCC279SktLdc8992jcuHFq1KjRhdgVAADgZ/wmNJ04cUKbNm1SWlqaW3taWprWrFlT4Tpr164t179Dhw7auHGjTp486WobP368ateurfvuu8/7hQMAgIuC3zxy4MCBAyotLVV0dLRbe3R0tAoKCipcp6CgoML+JSUlOnDggGJjY/XVV18pKytLmzdvtlxLcXGxiouLXa+dTucZ12G+/bnjGAIAfMlvRppOsf3hB2eNMeXaztT/VHtRUZF69+6t119/3aPnBU2cOFEOh8O11KtXr9K+p56CffSoj36k9yJy4sQJSVJgYKCPKwEAXIr8ZqSpVq1aCgwMLDeqtG/fvnKjSafExMRU2D8oKEg1a9bUd999p507d+r22293vV9WViZJCgoKUl5enq644opy2x05cqRGjBjheu10OisNToGBgapevbr27dsnSQoPDz9tyEPFysrKtH//foWHhysoyG9OWwDARcRvvn1CQkKUmJio7Oxs3XHHHa727Oxsde3atcJ1UlJS9OGHH7q1LVu2TElJSQoODnb9vMd/e+qpp1RUVKSXXnqp0iBkt9tlt9st1x4TEyNJruCEsxMQEKD69esTOgEAPuE3oUmSRowYoYyMDCUlJSklJUWvvfaadu/erYEDB0r6fQTo559/1ltvvSVJGjhwoKZPn64RI0aof//+Wrt2rbKysjRv3jxJv//AbPPmzd0+o3r16pJUrv1c2Gw2xcbGKioqym0COjwTEhKigAC/u6IMALhI+FVo6tGjhw4ePKjx48crPz9fzZs31yeffOL6CY/8/Hy3ZzbFx8frk08+0fDhwzVjxgzFxcXp5ZdfVvfu3X1Sf2BgIPNxAADwU/yMihd4+hh2AADgexf9z6gAAAD4AqEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsMDvQtOrr76q+Ph4hYaGKjExUatXrz5t/1WrVikxMVGhoaFq1KiRZs2a5fb+66+/rtTUVNWoUUM1atTQrbfeqq+//vp87gIAAPBDfhWaFixYoGHDhmnUqFHKyclRamqq0tPTtXv37gr779ixQ506dVJqaqpycnL05JNPasiQIVq4cKGrz8qVK9WrVy+tWLFCa9euVf369ZWWlqaff/75Qu0WAADwAzZjjPF1EVYlJyerZcuWmjlzpqutWbNm6tatmyZOnFiu/+OPP64lS5YoNzfX1TZw4EBt2bJFa9eurfAzSktLVaNGDU2fPl333nuvpbqcTqccDocKCwtVrVo1D/cKAAD4gqff334z0nTixAlt2rRJaWlpbu1paWlas2ZNheusXbu2XP8OHTpo48aNOnnyZIXrHD16VCdPntTll1/uncIBAMBFIcjXBVh14MABlZaWKjo62q09OjpaBQUFFa5TUFBQYf+SkhIdOHBAsbGx5dZ54oknVKdOHd16662V1lJcXKzi4mLXa6fT6cmuAAAAP+Q3I02n2Gw2t9fGmHJtZ+pfUbskTZ48WfPmzdMHH3yg0NDQSrc5ceJEORwO11KvXj1PdgEAAPghvwlNtWrVUmBgYLlRpX379pUbTTolJiamwv5BQUGqWbOmW/sLL7ygCRMmaNmyZbr22mtPW8vIkSNVWFjoWvbs2XMWewQAAPyJ34SmkJAQJSYmKjs72609OztbrVu3rnCdlJSUcv2XLVumpKQkBQcHu9qef/55PfPMM1q6dKmSkpLOWIvdble1atXcFgAAcHHzm9AkSSNGjNDf/vY3vfHGG8rNzdXw4cO1e/duDRw4UNLvI0D/fcfbwIEDtWvXLo0YMUK5ubl64403lJWVpUcffdTVZ/LkyXrqqaf0xhtvqGHDhiooKFBBQYEOHz58wfcPAABUXX4zEVySevTooYMHD2r8+PHKz89X8+bN9cknn6hBgwaSpPz8fLdnNsXHx+uTTz7R8OHDNWPGDMXFxenll19W9+7dXX1effVVnThxQnfddZfbZ40ZM0Zjx469IPsFAACqPr96TlNVxXOaAADwPxftc5oAAAB8idAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWOBxaGrYsKHGjx+v3bt3n496AAAAqiSPQ9Mjjzyif/zjH2rUqJHat2+v+fPnq7i4+HzUBgAAUGV4HJoGDx6sTZs2adOmTUpISNCQIUMUGxurQYMG6ZtvvjkfNQIAAPiczRhjzmUDJ0+e1KuvvqrHH39cJ0+eVPPmzTV06FD17dtXNpvNW3VWaU6nUw6HQ4WFhapWrZqvywEAABZ4+v0ddLYfdPLkSS1atEizZ89Wdna2WrVqpfvuu0979+7VqFGj9Nlnn+ndd989280DAABUKR6Hpm+++UazZ8/WvHnzFBgYqIyMDE2dOlVNmzZ19UlLS9NNN93k1UIBAAB8yePQdP3116t9+/aaOXOmunXrpuDg4HJ9EhIS1LNnT68UCAAAUBV4HJp++uknNWjQ4LR9IiIiNHv27LMuCgAAoKrx+O65ffv2af369eXa169fr40bN3qlKAAAgKrG49D08MMPa8+ePeXaf/75Zz388MNeKQoAAKCq8Tg0bd++XS1btizXft1112n79u1eKQoAAKCq8Tg02e12/fLLL+Xa8/PzFRR01k8wAAAAqNI8Dk3t27fXyJEjVVhY6Go7dOiQnnzySbVv396rxQEAAFQVHg8Nvfjii7rpppvUoEEDXXfddZKkzZs3Kzo6Wm+//bbXCwQAAKgKPA5NderU0datWzV37lxt2bJFYWFh6tu3r3r16lXhM5sAAAAuBmc1CSkiIkIDBgzwdi0AAABV1lnP3N6+fbt2796tEydOuLV36dLlnIsCAACoas7qieB33HGHtm3bJpvNJmOMJMlms0mSSktLvVshAABAFeDx3XNDhw5VfHy8fvnlF4WHh+u7777TF198oaSkJK1cufI8lAgAAOB7Ho80rV27VsuXL1ft2rUVEBCggIAA3XjjjZo4caKGDBminJyc81EnAACAT3k80lRaWqrLLrtMklSrVi3t3btXktSgQQPl5eV5tzoAAIAqwuORpubNm2vr1q1q1KiRkpOTNXnyZIWEhOi1115To0aNzkeNAAAAPudxaHrqqad05MgRSdKzzz6rzp07KzU1VTVr1tSCBQu8XiAAAEBVYDOnbn87B7/++qtq1KjhuoPuUuN0OuVwOFRYWKhq1ar5uhwAAGCBp9/fHs1pKikpUVBQkL799lu39ssvv/ySDUwAAODS4FFoCgoKUoMGDXz6LKZXX31V8fHxCg0NVWJiolavXn3a/qtWrVJiYqJCQ0PVqFEjzZo1q1yfhQsXKiEhQXa7XQkJCVq0aNH5Kh8AAPgpj++ee+qppzRy5Ej9+uuv56Oe01qwYIGGDRumUaNGKScnR6mpqUpPT9fu3bsr7L9jxw516tRJqampysnJ0ZNPPqkhQ4Zo4cKFrj5r165Vjx49lJGRoS1btigjI0N//vOftX79+gu1WwAAwA94PKfpuuuu07///W+dPHlSDRo0UEREhNv733zzjVcL/G/Jyclq2bKlZs6c6Wpr1qyZunXrpokTJ5br//jjj2vJkiXKzc11tQ0cOFBbtmzR2rVrJUk9evSQ0+nUp59+6urTsWNH1ahRQ/PmzbNU1/mY02TKynTsaJFXtgUAgL8LC4+ULcDjsZ7T8vT72+O757p163Y2dZ2zEydOaNOmTXriiSfc2tPS0rRmzZoK11m7dq3S0tLc2jp06KCsrCydPHlSwcHBWrt2rYYPH16uz7Rp0yqtpbi4WMXFxa7XTqfTw705s2NHixT+Qn2vbxcAAH909NHdCr/M4dMaPA5NY8aMOR91nNGBAwdUWlqq6Ohot/bo6GgVFBRUuE5BQUGF/UtKSnTgwAHFxsZW2qeybUrSxIkTNW7cuLPcEwAA4I88Dk2+9se79Iwxp71zr6L+f2z3dJsjR47UiBEjXK+dTqfq1at35uI9EBYeqaOPVjxXCwCAS01YeKSvS/A8NAUEBJw2UJyvO+tq1aqlwMDAciNA+/btKzdSdEpMTEyF/YOCglSzZs3T9qlsm5Jkt9tlt9vPZjcsswUE+HwYEgAA/D8eh6Y/3o5/8uRJ5eTk6M033zyvl6xCQkKUmJio7Oxs3XHHHa727Oxsde3atcJ1UlJS9OGHH7q1LVu2TElJSQoODnb1yc7OdpvXtGzZMrVu3fo87AUAAPBbxkvmzp1runTp4q3NVWj+/PkmODjYZGVlme3bt5thw4aZiIgIs3PnTmOMMU888YTJyMhw9f/pp59MeHi4GT58uNm+fbvJysoywcHB5v3333f1+eqrr0xgYKCZNGmSyc3NNZMmTTJBQUFm3bp1lusqLCw0kkxhYaH3dhYAAJxXnn5/e21OU3Jysvr37++tzVWoR48eOnjwoMaPH6/8/Hw1b95cn3zyiRo0aCBJys/Pd3tmU3x8vD755BMNHz5cM2bMUFxcnF5++WV1797d1ad169aaP3++nnrqKT399NO64oortGDBAiUnJ5/XfQEAAP7FK789d+zYMY0cOVKffvqp8vLyvFGXX+G35wAA8D/n/TlNf/xhXmOMioqKFB4ernfeecfTzQEAAPgFj0PT1KlT3UJTQECAateureTkZNWoUcOrxQEAAFQVHoemPn36nIcyAAAAqjaPf8Rl9uzZeu+998q1v/fee3rzzTe9UhQAAEBV43FomjRpkmrVqlWuPSoqShMmTPBKUQAAAFWNx6Fp165dio+PL9feoEEDt9v9AQAALiYeh6aoqCht3bq1XPuWLVtcP00CAABwsfE4NPXs2VNDhgzRihUrVFpaqtLSUi1fvlxDhw5Vz549z0eNAAAAPufx3XPPPvusdu3apVtuuUVBQb+vXlZWpnvvvZc5TQAA4KJ11k8E/+GHH7R582aFhYXpmmuucf2UyaWIJ4IDAOB/zvsTwU9p0qSJmjRpcrarAwAA+BWP5zTdddddmjRpUrn2559/Xn/605+8UhQAAEBV43FoWrVqlW677bZy7R07dtQXX3zhlaIAAACqGo9D0+HDhxUSElKuPTg4WE6n0ytFAQAAVDUeh6bmzZtrwYIF5drnz5+vhIQErxQFAABQ1Xg8Efzpp59W9+7d9eOPP+rmm2+WJH3++ed699139f7773u9QAAAgKrA49DUpUsXLV68WBMmTND777+vsLAwtWjRQsuXL+d2ewAAcNE66+c0nXLo0CHNnTtXWVlZ2rJli0pLS71Vm9/gOU0AAPgfT7+/PZ7TdMry5cvVu3dvxcXFafr06erUqZM2btx4tpsDAACo0jy6PPef//xHc+bM0RtvvKEjR47oz3/+s06ePKmFCxcyCRwAAFzULI80derUSQkJCdq+fbteeeUV7d27V6+88sr5rA0AAKDKsDzStGzZMg0ZMkQPPvggP58CAAAuOZZHmlavXq2ioiIlJSUpOTlZ06dP1/79+89nbQAAAFWG5dCUkpKi119/Xfn5+XrggQc0f/581alTR2VlZcrOzlZRUdH5rBMAAMCnzumRA3l5ecrKytLbb7+tQ4cOqX379lqyZIk36/MLPHIAAAD/c8EeOSBJV111lSZPnqz//Oc/mjdv3rlsCgAAoEo754dbgpEmAAD80QUdaQIAALhUEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABggd+Ept9++00ZGRlyOBxyOBzKyMjQoUOHTruOMUZjx45VXFycwsLC1LZtW3333Xeu93/99VcNHjxYV111lcLDw1W/fn0NGTJEhYWF53lvAACAv/Gb0HT33Xdr8+bNWrp0qZYuXarNmzcrIyPjtOtMnjxZU6ZM0fTp07VhwwbFxMSoffv2KioqkiTt3btXe/fu1QsvvKBt27Zpzpw5Wrp0qe67774LsUsAAMCP2IwxxtdFnElubq4SEhK0bt06JScnS5LWrVunlJQUff/997rqqqvKrWOMUVxcnIYNG6bHH39cklRcXKzo6Gg999xzeuCBByr8rPfee0+9e/fWkSNHFBQUZKk+p9Mph8OhwsJCVatW7Sz3EgAAXEiefn/7xUjT2rVr5XA4XIFJklq1aiWHw6E1a9ZUuM6OHTtUUFCgtLQ0V5vdblebNm0qXUeS68CdLjAVFxfL6XS6LQAA4OLmF6GpoKBAUVFR5dqjoqJUUFBQ6TqSFB0d7dYeHR1d6ToHDx7UM888U+ko1CkTJ050za1yOByqV6+eld0AAAB+zKehaezYsbLZbKddNm7cKEmy2Wzl1jfGVNj+3/74fmXrOJ1O3XbbbUpISNCYMWNOu82RI0eqsLDQtezZs+dMuwoAAPyctUk758mgQYPUs2fP0/Zp2LChtm7dql9++aXce/v37y83knRKTEyMpN9HnGJjY13t+/btK7dOUVGROnbsqMsuu0yLFi1ScHDwaWuy2+2y2+2n7QMAAC4uPg1NtWrVUq1atc7YLyUlRYWFhfr66691ww03SJLWr1+vwsJCtW7dusJ14uPjFRMTo+zsbF133XWSpBMnTmjVqlV67rnnXP2cTqc6dOggu92uJUuWKDQ01At7BgAALjZ+MaepWbNm6tixo/r3769169Zp3bp16t+/vzp37ux251zTpk21aNEiSb9flhs2bJgmTJigRYsW6dtvv1WfPn0UHh6uu+++W9LvI0xpaWk6cuSIsrKy5HQ6VVBQoIKCApWWlvpkXwEAQNXk05EmT8ydO1dDhgxx3Q3XpUsXTZ8+3a1PXl6e24MpH3vsMR07dkwPPfSQfvvtNyUnJ2vZsmWKjIyUJG3atEnr16+XJDVu3NhtWzt27FDDhg3P4x4BAAB/4hfPaarqeE4TAAD+56J8ThMAAICvEZoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAAYAGhCQAAwAJCEwAAgAWEJgAAAAsITQAAABYQmgAAACwgNAEAAFhAaAIAALCA0AQAAGABoQkAAMACQhMAAIAFhCYAAAALCE0AAAAWEJoAAAAsIDQBAABYQGgCAACwgNAEAABgAaEJAADAAkITAACABYQmAAAAC/wmNP3222/KyMiQw+GQw+FQRkaGDh06dNp1jDEaO3as4uLiFBYWprZt2+q7776rtG96erpsNpsWL17s/R0AAAB+zW9C0913363Nmzdr6dKlWrp0qTZv3qyMjIzTrjN58mRNmTJF06dP14YNGxQTE6P27durqKioXN9p06bJZrOdr/IBAICfC/J1AVbk5uZq6dKlWrdunZKTkyVJr7/+ulJSUpSXl6errrqq3DrGGE2bNk2jRo3SnXfeKUl68803FR0drXfffVcPPPCAq++WLVs0ZcoUbdiwQbGxsRdmpwAAgF/xi5GmtWvXyuFwuAKTJLVq1UoOh0Nr1qypcJ0dO3aooKBAaWlprja73a42bdq4rXP06FH16tVL06dPV0xMjKV6iouL5XQ63RYAAHBx84vQVFBQoKioqHLtUVFRKigoqHQdSYqOjnZrj46Odltn+PDhat26tbp27Wq5nokTJ7rmVjkcDtWrV8/yugAAwD/5NDSNHTtWNpvttMvGjRslqcL5RsaYM85D+uP7/73OkiVLtHz5ck2bNs2jukeOHKnCwkLXsmfPHo/WBwAA/senc5oGDRqknj17nrZPw4YNtXXrVv3yyy/l3tu/f3+5kaRTTl1qKygocJuntG/fPtc6y5cv148//qjq1au7rdu9e3elpqZq5cqVFW7bbrfLbreftm4AAHBx8WloqlWrlmrVqnXGfikpKSosLNTXX3+tG264QZK0fv16FRYWqnXr1hWuEx8fr5iYGGVnZ+u6666TJJ04cUKrVq3Sc889J0l64okndP/997utd80112jq1Km6/fbbz2XXAADARcYv7p5r1qyZOnbsqP79++uvf/2rJGnAgAHq3Lmz251zTZs21cSJE3XHHXfIZrNp2LBhmjBhgpo0aaImTZpowoQJCg8P19133y3p99GoiiZ/169fX/Hx8Rdm5wAAgF/wi9AkSXPnztWQIUNcd8N16dJF06dPd+uTl5enwsJC1+vHHntMx44d00MPPaTffvtNycnJWrZsmSIjIy9o7QAAwP/ZjDHG10X4O6fTKYfDocLCQlWrVs3X5QAAAAs8/f72i0cOAAAA+BqhCQAAwAJCEwAAgAWEJgAA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",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAj0AAAHFCAYAAAAZuEjoAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABnwklEQVR4nO3dd3hUZd7G8e+kF5KQXiAk9A4iHUGqFEFEFBDLglgBcRGwgA11FSyIutZ9l6LgigVBBAWJUkRUkN47SYCEEEJ6z5z3j4HBSMuEDJNyf65rrpw5c56Z34xjcnPOU0yGYRiIiIiIVHJOji5ARERE5FpQ6BEREZEqQaFHREREqgSFHhEREakSFHpERESkSlDoERERkSpBoUdERESqBIUeERERqRIUekRERKRKUOgREZvMnTsXk8mEyWRi9erVFzxuGAb16tXDZDLRrVu3Mn1tk8nE1KlTbW539OhRTCYTc+fOLdFxb775ZukKFJFyTaFHRErFx8eHWbNmXbB/zZo1HDp0CB8fHwdUJSJyaQo9IlIqw4YNY+HChaSnpxfbP2vWLDp27EitWrUcVJmIyMUp9IhIqQwfPhyAzz//3LovLS2NhQsXMmrUqIu2SUlJYcyYMdSoUQM3Nzfq1KnDM888Q15eXrHj0tPTefDBBwkMDKRatWr07duX/fv3X/Q5Dxw4wF133UVISAju7u40btyY999/v4ze5cXFxcVxzz33FHvNGTNmYDabix334Ycf0rJlS6pVq4aPjw+NGjViypQp1sezs7OZNGkStWvXxsPDg4CAANq0aVPsMxWRsuPi6AJEpGLy9fXljjvuYPbs2Tz88MOAJQA5OTkxbNgw3n777WLH5+bm0r17dw4dOsSLL75IixYt+OWXX5g2bRpbt25l2bJlgKVP0KBBg1i/fj3PP/88bdu25ddff6Vfv34X1LB79246depErVq1mDFjBmFhYaxYsYLHHnuM5ORkXnjhhTJ/36dOnaJTp07k5+fz8ssvEx0dzdKlS5k0aRKHDh3igw8+AGDBggWMGTOGcePG8eabb+Lk5MTBgwfZvXu39bkmTJjAvHnz+Ne//kWrVq3Iyspi586dnD59uszrFhHAEBGxwZw5cwzA2Lhxo7Fq1SoDMHbu3GkYhmG0bdvWGDlypGEYhtG0aVOja9eu1nYfffSRARhffvllsed77bXXDMD48ccfDcMwjB9++MEAjHfeeafYca+88ooBGC+88IJ1X58+fYyaNWsaaWlpxY599NFHDQ8PDyMlJcUwDMM4cuSIARhz5sy57Hs7d9wbb7xxyWOefvppAzD++OOPYvtHjx5tmEwmY9++fdYaqlevftnXa9asmTFo0KDLHiMiZUeXt0Sk1Lp27UrdunWZPXs2O3bsYOPGjZe8tPXzzz/j7e3NHXfcUWz/yJEjAfjpp58AWLVqFQB33313sePuuuuuYvdzc3P56aefuO222/Dy8qKwsNB6u/nmm8nNzeX3338vi7d5wfto0qQJ7dq1u+B9GIbBzz//DEC7du1ITU1l+PDhfPvttyQnJ1/wXO3ateOHH37g6aefZvXq1eTk5JR5vSJynkKPiJSayWTivvvuY/78+Xz00Uc0aNCALl26XPTY06dPExYWhslkKrY/JCQEFxcX6yWd06dP4+LiQmBgYLHjwsLCLni+wsJC/v3vf+Pq6lrsdvPNNwNcNGhcrdOnTxMeHn7B/oiICOvjAPfeey+zZ88mNjaW22+/nZCQENq3b8/KlSutbd59912eeuopFi9eTPfu3QkICGDQoEEcOHCgzOsWEYUeEblKI0eOJDk5mY8++oj77rvvkscFBgZy8uRJDMMotj8pKYnCwkKCgoKsxxUWFl7QryUxMbHYfX9/f5ydnRk5ciQbN2686O1c+ClLgYGBJCQkXLD/xIkTANb3AXDfffexfv160tLSWLZsGYZhMGDAAGJjYwHw9vbmxRdfZO/evSQmJvLhhx/y+++/c8stt5R53SKi0CMiV6lGjRo88cQT3HLLLYwYMeKSx/Xs2ZPMzEwWL15cbP+nn35qfRyge/fuAHz22WfFjvvf//5X7L6Xlxfdu3dny5YttGjRgjZt2lxw+/vZorLQs2dPdu/ezebNmy94HyaTyVr/X3l7e9OvXz+eeeYZ8vPz2bVr1wXHhIaGMnLkSIYPH86+ffvIzs4u89pFqjqN3hKRqzZ9+vQrHvOPf/yD999/nxEjRnD06FGaN2/OunXrePXVV7n55pvp1asXAL179+bGG2/kySefJCsrizZt2vDrr78yb968C57znXfeoXPnznTp0oXRo0cTHR1NRkYGBw8e5LvvvrP2r7HVjh07+Prrry/Y37ZtWx5//HE+/fRT+vfvz0svvURUVBTLli3jgw8+YPTo0TRo0ACABx98EE9PT2644QbCw8NJTExk2rRp+Pn50bZtWwDat2/PgAEDaNGiBf7+/uzZs4d58+bRsWNHvLy8SlW7iFyGgztSi0gF89fRW5fz99FbhmEYp0+fNh555BEjPDzccHFxMaKioozJkycbubm5xY5LTU01Ro0aZVSvXt3w8vIybrrpJmPv3r0XjN4yDMuIq1GjRhk1atQwXF1djeDgYKNTp07Gv/71r2LHYMPorUvdzrWPjY017rrrLiMwMNBwdXU1GjZsaLzxxhtGUVGR9bk++eQTo3v37kZoaKjh5uZmREREGEOHDjW2b99uPebpp5822rRpY/j7+xvu7u5GnTp1jMcff9xITk6+bJ0iUjomw/jbBXYRERGRSkh9ekRERKRKUOgRERGRKkGhR0RERKoEhR4RERGpEhR6REREpEpQ6BEREZEqQZMTAmazmRMnTuDj43PBukAiIiJSPhmGQUZGBhERETg5Xfk8jkIPljVzIiMjHV2GiIiIlEJ8fDw1a9a84nEKPYCPjw9g+dB8fX0dXI2IiIiURHp6OpGRkda/41ei0APWS1q+vr4KPSIiIhVMSbumqCOziIiIVAkKPSIiIlIlKPSIiIhIlaA+PTYoKiqioKDA0WVUWG5ubiUaUigiImIPCj0lYBgGiYmJpKamOrqUCs3JyYnatWvj5ubm6FJERKQKUugpgXOBJyQkBC8vL01gWArnJoBMSEigVq1a+gxFROSaU+i5gqKiImvgCQwMdHQ5FVpwcDAnTpygsLAQV1dXR5cjIiJVjDpYXMG5PjxeXl4OrqTiO3dZq6ioyMGViIhIVaTQU0K6HHP19BmKiIgjKfSIiIhIlaDQIyXWrVs3xo8f7+gyRERESkUdmSuhK11GGjFiBHPnzrX5eb/55ht1QBYRkQpLoacSSkhIsG5/8cUXPP/88+zbt8+6z9PTs9jxBQUFJQozAQEBZVekiIhUfkWFkJcOuWngFQAefg4tR6GnEgoLC7Nu+/n5YTKZrPuOHj1KeHg4X3zxBR988AG///47H374IQMHDuTRRx/ll19+ISUlhbp16zJlyhSGDx9ufa5u3bpx3XXX8fbbbwMQHR3NQw89xMGDB/nqq6/w9/fn2Wef5aGHHrqm71dEROzEMCA/E7KSITfVEl4ueUu/cF9+hvWpcvu/h0fbex33XlDosZlhGOQUOGbItaerc5mNgHrqqaeYMWMGc+bMwd3dndzcXFq3bs1TTz2Fr68vy5Yt495776VOnTq0b9/+ks8zY8YMXn75ZaZMmcLXX3/N6NGjufHGG2nUqFGZ1CkiImXIMCxhJPu0JchkJ1t+Zp26cN+5+0V5V/2y2YY7e+KTad22DN7DVVDosVFOQRFNnl/hkNfe/VIfvNzK5j/Z+PHjGTx4cLF9kyZNsm6PGzeO5cuX89VXX1029Nx8882MGTMGsASpmTNnsnr1aoUeEZFryTAsl5HSEyD9OGQkWLYzTpz/mXHSEmTMtq8hmYcbaVQj1fAizfAi3fAmHS/SDS/S8f7bTy8yzv5MN7zJwIsikwsvhjeltR3eui0UeqqoNm3aFLtfVFTE9OnT+eKLLzh+/Dh5eXnk5eXh7e192edp0aKFdfvcZbSkpCS71CwiUiUZBmSnQOpRSDsXaE787WcCFGSV+CnznLzIdPbjDL6cMvuQUOBNktmX04YPKYYvp7H8TMGyLwePYu09XJ0I9HYnwNsNf283Ar3dCPB2o9bZn/5ebgRWs2wHeLnh5+mKk5Pj52pT6LGRp6szu1/q47DXLit/DzMzZsxg5syZvP322zRv3hxvb2/Gjx9Pfn7+ZZ/n7x2gTSYTZrO5zOoUEakS8rMhNRbOxMKZoxdu52eW6GkKXH3Jcg8mxSmIBMOfo/l+HMjxIa6wOklGdU4bfqTgQx4XX/jZz9OVMF8Pwvw8aOzrQaifx9n77gRVs4ScQG93PN3K7u/RtaTQYyOTyVRml5jKk19++YVbb72Ve+65B7AsEHrgwAEaN27s4MpERCoBw7CclUk59Ldgc9RyP+vKZ8jN1cLI9Qon3TWYZFMAx4r8OZLny56sauzK8OaEuTo5uR6QcWFbkwlrmLnu7M9z90N9Lduhvh4VNsyUVOX76y2lUq9ePRYuXMj69evx9/fnrbfeIjExUaFHRMQWBTlw+hAk74fkA3D6wNntg1e+/OTuh7l6FJleNUh2CSOeEA7mB7Ijy5+NqdU4nmxcvrmLE/UDvIgK9KJWgPfZn17UCvSipr8n7i6VO9CUhEKPAPDcc89x5MgR+vTpg5eXFw899BCDBg0iLS3N0aWJiJQvhgGZSWfDzH44ffD8dmo8cIlw4uQC1aMoqh5FhkcNEp3DiDMHsy8vgC0Zfuw648TJ2EuNlLI8p7+X69kg403U2UATFeBFVKA3IT7u5aLfTHlmMgzj8tGxCkhPT8fPz4+0tDR8fX2LPZabm8uRI0eoXbs2Hh4el3gGKQl9liJS4WSnwMldllvS2Z/JBywjpS7FozoENaAosD7J7rU4bESwLTeE38/4sO9ULglpuZd9yeperkQHehMd6EV0kDe1g7wt94O88fPUrPh/dbm/3xejMz0iIiKF+ZZLUecCzrlbxomLH29ygupRENQAI7AeGdVqc+hsuNma7Mzek5kcPJxJofnceYUiINXa3MfDpViYqR3kRXSgJeBU97p4J2O5ego9IiJSdRgGZJ6EkzuLh5tT+y49f031KAhtBqFNyA9sxBGnWuzICmTXqVz2JmSw91A6Z7LPtS3eIdnHw4XGYb40CvehUZgvDUKrUTvImwBvtzKbbFZKTqFHREQqr4xEOLGl+C3r1MWPdfeFkCYQ2hRCm1IY3ISD1GJLUhHb4lPZuj2VA0mZFJlPAcWfw8kEdYKr0SjMh8bhvjQK86FRuC8Rfh4KN+WIQo+IiFQOWclwYuvZcLPZ8jMj4cLjTE4QWM8abghthhHShLiiQLYdT2dbfCrb/kxl54lUcgtSLmge4O1G47Nnbs6FnHoh1fAow7nUxD4UekREpOLJOfOXgLPFsp0Wd+FxJicIagg1roeIVpZbaFNO5Tqx/Vgq246lse3XVLYd20dq9oWXt3zcXWgR6UfLmtVpGVmdljWrE+rrrrM3FZRCj4iIlG9mMyTvg7jfLbdjGyDl8MWPDax/PtxEtIKw5hS5erMnIZ0/j6bw59ozbIn7jeOpORc0dXN2onGEL9fV9LMEnMjq1A701jDwSkShR0REypeCHMvZm7jfIO4PiP8DclMvPM4/GiL+cgYnvAV4+JGVV8jW+FT+PHCGP2N2sTn2DFn5RcWamkxQN7gaLWtW57pIS8hpFOaLm4vTNXmL4hgKPSIi4lhZyZYzOPFnz+Sc2HrhSCpXL6jRGmp1hMj2lstVXgEAJKXn8mfsGTauPMam2B3sOpFOkbn4FHQ+7i5cH+VPmyh/Wkf507ymHz4emvOmqlHoERGRa8cwLJemYtefDzqnD154XLUwqNUeIjtArQ4Q1hycXTEMg0OnMtm48wwbj8bx59EzxKVkX9C8RnVPWkf50zbanzbRATQI9cFZl6mqPIUeERGxr6xkOLIGDq2Cw6shLf7CY4IbW8JNrQ6WMzn+0ZZrUMDJ9FzWbT3JuoPJrDuYzKmM4ks1mEzQKMzXGnDaRPkTUd3T/u9LKhyFnkroSqMKRowYwdy5c0v13NHR0YwfP57x48eXqr2IVAEFOZb+OOdCTuL24o87uULNtudDTs221ktVAJl5hfyxN8kScg4kcyAps1hzD1cnWkX60+ZsyGlVqzq+ulQlJaDQUwklJJyfl+KLL77g+eefZ9++fdZ9np76F5CIlCGzGRK3WQLOoVWWy1ZFf1s4M7QZ1OkGdbpDVEdw87Y+VFhkZltsCusOnGbdwVNsiUv9y/INljM5LWr40bl+EDfUC6J1lL9WDJdSUeiphMLCwqzbfn5+mEymYvu+++47pk6dyq5du4iIiGDEiBE888wzuLhYvg5Tp05l9uzZnDx5ksDAQO644w7effddunXrRmxsLI8//jiPP/44AFqvVqSKOhMLh8+eyTm8BnL+NomfTwTU7W4JOXW6QrUQ60OGYXD4VCbrDlguV/1+6DQZeYXFmtcK8KJz/SC61AuiY91ArUclZUKhx1aGAQUXdpq7Jly9rNe4S2vFihXcc889vPvuu3Tp0oVDhw7x0EMPAfDCCy/w9ddfM3PmTBYsWEDTpk1JTExk27ZtAHzzzTe0bNmShx56iAcffPCq346IVCCGYblMtec72LMUTu0p/ribD9Tucv5sTlD9Yr+v8gvNbDiSQsyek6zcffKCeXL8PF25oV4gnesF07leELUCva7Bm5KqRqHHVgXZ8GqEY157yolip4RL45VXXuHpp59mxIgRANSpU4eXX36ZJ598khdeeIG4uDjCwsLo1asXrq6u1KpVi3bt2gEQEBCAs7MzPj4+xc4ciUglZS6yXKrau9QSdP4647HJ2dIX59zZnBrXg3PxfjVpOQWs3pdEzJ4kVu9LIiP3/NkcN2cn2kT7c0O9ILrUD6JphJ9GV4ndKfRUMZs2bWLjxo288sor1n1FRUXk5uaSnZ3NkCFDePvtt6lTpw59+/bl5ptv5pZbbrFe+hKRSq4wz3K5au93sPd7yE4+/5irF9TrCY1ugQa9wdP/gubxKdnE7DlJzJ6T/HE4pVjfnKBqbvRsFEqvJqHcUC8QLzf9XpFry6HfuOjoaGJjYy/YP2bMGN5//30yMzN5+umnWbx4MadPnyY6OprHHnuM0aNHW4/Ny8tj0qRJfP755+Tk5NCzZ08++OADatasaZ+iXb0sZ1wcwfXqT/eazWZefPFFBg8efMFjHh4eREZGsm/fPlauXElMTAxjxozhjTfeYM2aNbi6anSESKWUlwEHfrSczTmwEvIzzj/mUR0a9oNGA6BuD3Ar/nvIbDbYeSKNlbstl632JmYUe7xeSDVuahJKr8ahXBdZXWdzxKEcGno2btxIUdH5qcF37tzJTTfdxJAhQwB4/PHHWbVqFfPnzyc6Opoff/yRMWPGEBERwa233grA+PHj+e6771iwYAGBgYFMnDiRAQMGsGnTJpyd7dC732S66ktMjnT99dezb98+6tWrd8ljPD09GThwIAMHDmTs2LE0atSIHTt2cP311+Pm5lbsv5mIVFBZybDve0vQOby6+Ggrn3BLyGk8AKJuuOCyVUGRmXUHk4nZbTmjczL9fFsnE7SJDuCmxpYzOrWDKu7vS6l8HBp6goODi92fPn06devWpWvXrgD89ttvjBgxgm7dugHw0EMP8fHHH/Pnn39y6623kpaWxqxZs5g3bx69evUCYP78+URGRhITE0OfPn2u6fupCJ5//nkGDBhAZGQkQ4YMwcnJie3bt7Njxw7+9a9/MXfuXIqKimjfvj1eXl7MmzcPT09PoqKiAMvZubVr13LnnXfi7u5OUFCQg9+RiJRYUSEcjIEt82D/cjD/ZcRUYL2zQecWy3pWTheuQXUkOYsFG+NYuOkYyZn51v1ebs50bRBMr8ah9GgUgr+3RlpJ+VRuLqjm5+czf/58JkyYYJ1cr3PnzixZsoRRo0YRERHB6tWr2b9/P++88w5g6Z9SUFBA7969rc8TERFBs2bNWL9+/SVDT15eHnl55/9lkp6ebsd3Vr706dOHpUuX8tJLL/H666/j6upKo0aNeOCBBwCoXr0606dPZ8KECRQVFdG8eXO+++47AgMDAXjppZd4+OGHqVu3Lnl5eRqyLlIRnD5kCTpbP4fMxPP7w1pAk4GWPjrBDS86OjS3oIjlOxP5fEMcfxw5Pyw9qJo7fZpazuZ0rBOIh6vmzZHyr9yEnsWLF5OamsrIkSOt+959910efPBBatasiYuLC05OTvz3v/+lc+fOACQmJuLm5oa/f/HOdKGhoSQmJnIp06ZN48UXX7TL+yhvRo4cWewzBUvwuVQgHDRoEIMGDbrk83Xo0ME6hF1EyrH8bNj9rSXsxP56fr9XILQcDq3ugZDGl2y+LzGDzzfEsWjLcdJyLIt/Opmga4Ng7mxXix6NQnB11orkUrGUm9Aza9Ys+vXrR0TE+eHg7777Lr///jtLliwhKiqKtWvXMmbMGMLDw62Xsy7GMIzLLsUwefJkJkyYYL2fnp5OZGRk2bwRERFHMQw4vhm2fAo7Fp7vkGxygnq9LEGnQT9wufjlp6y8QpZuP8HnG+LZGp9q3V+juidD20QypE1NrWklFVq5CD2xsbHExMTwzTffWPfl5OQwZcoUFi1aRP/+/QFo0aIFW7du5c0336RXr16EhYWRn5/PmTNnip3tSUpKolOnTpd8PXd3d9zd3e33hkRErqWs07B9AWyZD0m7z+/3j7YEnZZ3gV+NizY1DIPtx9JYsDGeJVuPk5VvGajg4mSiV+NQ7mwXSZf6wRp1JZVCuQg9c+bMISQkxBpuAAoKCigoKMDpb53pnJ2dMZvNALRu3RpXV1dWrlzJ0KFDAcu6Uzt37uT111+/dm9ARORaMxdZ1rna8qllPh2z5RIULh7Q5FZoda9l5NVFOiSDZeLAb7ce5/MN8exJON+vsXaQN8PaRnL79TUJ9tE/DqVycXjoMZvNzJkzhxEjRhSbAM/X15euXbvyxBNPWEcPrVmzhk8//ZS33noLsKwrdf/99zNx4kQCAwMJCAhg0qRJNG/e/LKXv0REKqzCfNjxJaybCacPnt8f0cpyVqfZHeBZ/ZLNkzPz+L9fDjPvt1iyz57VcXNxol+zMO5sW4sOdQIu2z1ApCJzeOiJiYkhLi6OUaNGXfDYggULmDx5MnfffTcpKSlERUXxyiuv8Mgjj1iPmTlzJi4uLgwdOtQ6OeHcuXPLfI4ejVK6evoMRa5CQQ5snge/vgPpxyz7PPzOd0oOa37Z5knpuXy89jCf/RFLboHlbHmD0GoMb1eL21rV0IKeUiWYDP0lIj09HT8/P9LS0vD19S32WFFREfv37yckJMQ6bFtKJy0tjRMnTlCvXj3N7ixSUrnp8Ocs+O19yDpl2VctFDo+Cm3uA3efyzZPSMvh4zWH+d+GOPILLWGnZWR1/tmzHt0bhuisjlRol/v7fTEOP9NT3jk7O1O9enWSkpIA8PLy0i+JUjCbzZw6dQovLy+t4yVSElmn4Y+PYMPHkJtm2Ve9FtzwT7juHnD1uGzzY2ey+WjNIb7ceIz8orP9IKP8eaxnfW6sH6TfY1Il6a9PCZxbUfxc8JHScXJyolatWvplK3I56Qnw23vw52woyLbsC2oAnSdA8zsuWBLi7+JOZ/PB6oN8vemYdbHP9rUD+GfP+nSsG6j//6RKU+gpAZPJRHh4OCEhIRQUFDi6nArLzc3tgtF4InJWyhFLf52tn0HR2SUewltCl0mW5SGu8P/OkeQs3l91kEVbjlN0NuzcUC+QcT3q06GOLs2LgEKPTZydne2ziKmIVF1JeywjsXZ8DcbZxXxrdYIbJ0LdnhddGuKvDiZl8N7PB1my7QRnsw5dGwTzWM96tI4KsHPxIhWLQo+IiCOcPgQxL8Ce787vq9cLukyEqEtPrnrOwaRM3o7Zz7IdCZwbjtKzUQjjetbnusjq9qlZpIJT6BERuZbys+GXGbD+3bOXsUyWlc27TISI667YPCO3gHd/OsCcX49a++z0bhLKYz3r06yGn31rF6ngFHpERK4Fw7Cc1VkxBdLiLfvq9oQ+r0JIoys2N5sNFm4+xmvL95GcmQdYzuxM6tOQxuFXHqorIgo9IiL2l3wQfngSDv1kue8XCX2nWTool2A01bb4VF5Yssu6CGidIG+eu6UJ3RuG2LFokcpHoUdExF7ys2Dtm5Yh6EX54OwGnR6zXMpy87pi8+TMPN5Yvo8vN8VjGODt5sxjPetz3w21cXPRSEgRWyn0iIiUNcOAPUtg+ZTzS0bUuwn6vQaBda/YvKDIzKe/xfJ2zH4ycgsBGNyqBk/1a0So7+UnJRSRS1PoEREpS8kH4Psn4PAqy32/WtBvOjS8uUSXsn49mMzUJbs4kJQJQLMavky9pSltojX8XORqKfSIiJSFvExY+4ZljSxzATi7W5aM6Px4iS5lxadk88qyPSzflQhAgLcbT/RpyNA2kTg7aRZlkbKg0CMicjUMA3YvhhXPQPpxy776fSxndwLqXLF5Tn4RH605xEdrDpFXaMbZycS9HaJ4vFcD/Ly0MK9IWVLoEREpreSDsGwCHFljuV+9FvR7HRr2K1Hz5TsTeHnpHo6n5gDQoU4AUwc2pVGYhqCL2INCj4hIaWz93BJ4CrItl7I6Pw6dx4Or5xWbZucX8tziXSzcbOnkHOHnwTP9m3Bz8zAtCCpiRwo9IiK2yM+ydFTe+pnlfu0b4ZZ3IaB2iZofOJnBmM82cyApEycTPNK1Lo/2qIeXm34di9ib/i8TESmppD3w1Ug4tRdMTtBtsmXOHaeSLUT81Z/xPP/tLnIKigj2cefdO1vRsa5WQBe5VhR6RESuxDBgy3zLGZ7CHKgWBrf/F2p3KVHzv1/O6lI/iLeGXkewj7s9qxaRv1HoERG5nLxMWDYRti+w3K/bA277D1QLLlHz/SczGPuXy1kTbmrAmG71cNIwdJFrTqFHRORSTu6yXM5K3m+5nNX9Geg8AZxKtgTEV3/G89y3O8ktMBPi4867w1vRoY4uZ4k4ikKPiMjfGQZs/gR+eAoKc8EnAu6YBVGdStT8YpezZg67jqBqupwl4kgKPSIif5WXAUsfhx1fWe7X6wW3fQzeQSVqvv/s6KyDupwlUu4o9IiInJO4w3I56/RBMDlDz+eg0z91OUukklDoERExDPhzNiyfDEV54FsD7pgNtTqUqLkuZ4lUDAo9IlK15abDd4/BrkWW+w36wqAPwatkq5r//XLWxN4NGd21ri5niZRDCj0iUnWd2g+fD4OUw+DkAr2mQsdHoYRLQXy79ThPLdxuvZz17+GtaK/LWSLllkKPiFRNxzfB/DsgJwX8IuGOORDZtsTN//vLYf61bA+gy1kiFYVCj4hUPYdXw4K7IT8TIq6Hu78G75KdoTEMgxk/7ue9VQcBeKBzbabc3FiXs0QqAIUeEaladn8LCx+Aonyo3RXu/AzcfUrUtMhs8Py3O/nsjzgAnujTkDHd6mpldJEKQqFHRKqOTXMtc/AYZmg80LJ+lkvJLknlF5qZ8OVWlm5PwGSCVwY15672texbr4iUKYUeEan8DAPWzYSfXrTcbz0S+r9V4tXRs/MLeWT+ZtbuP4Wrs4mZw65jQIsI+9UrInah0CMilZvZDCufg9/es9zvMhF6PFfiEVqp2fmMmruRzXGpeLo689G9renaoGSLjYpI+aLQIyKVV1EhLBkH2/5nud/7Fej0aImbJ6Xncu+sDew7mYGfpytz7mvL9bX87VSsiNibQo+IVE4FOfD1KNj3vWVJiVvfh+uGl7h57Oks7pn1B/EpOYT4uDPv/vY0DCtZh2cRKZ8UekSk8slNg8+HQ+yv4OIBQ+ZCw34lbr4nIZ1/zN7AqYw8ogK9mH9/eyIDvOxXr4hcEwo9IlK5ZCbB/MGWxUPdfWH4Aoi+ocTN/zyawn1zN5KRW0jjcF8+GdWWEB8POxYsIteKQo+IVB5njsK82yzLSngHwz3fQHiLEjdftS+J0fM3kVtgpk2UP7NGtsXP09V+9YrINaXQIyKVw8ndlsCTmQjVa8G9iyGwbombf7v1OBO/3Eah2aB7w2A+uLs1nm4lG9IuIhWDQo+IVHxxf8D/hlj68oQ0sZzh8Q0vcfN5vx3l+SW7MAy49boI3hzSEldnJzsWLCKOoNAjIhXbgRj44h4ozIHI9nDXF+BZsmHlhmHw758P8tbK/QCM6BjFC7c01TpaIpWUQo+IVFyxv8GCu6AoD+rdBEM/ATfvEjd/f9X5wPPPnvUZ36u+1tESqcQUekSkYkraA58PswSehjfDkE/Axa3Ezb/cGM+bP1oCz7P9G/NAlzr2qlREygldtBaRiiftGMy/3dKHJ7I93DHbpsDz056TTF60A4Cx3esq8IhUEQo9IlKx5JyxBJ704xDU0DIPj6tniZtvjjvD2P9tpshscEfrmkzq3dCOxYpIeaLQIyIVR0GOZablU3vBJwLuWQheASVufjApk1FzN5JbYKZbw2CmDW6uPjwiVYhCj4hUDOYiWPgAxP0G7n5wz9dQPbLEzU+m5zJi9gZSswtoWdOPD+6+XsPSRaoY/R8vIuWfYcCyibB3KTi7w/D/QWjTEjdPzy1gxOwNHE/NoXaQN7NHtsXLTeM4RKoahR4RKf/WvgGb5gAmuP3/ILpziZvmFRbx0Kd/sjcxg2Afdz4d1Y7Aau72q1VEyi2Hhp7o6GhMJtMFt7FjxwJc9DGTycQbb7xhfY68vDzGjRtHUFAQ3t7eDBw4kGPHjjnqLYlIWdv0Cax6xbJ98xvQ5NYSNzWbDSZ8sY3fD6dQzd2FOSPbarV0kSrMoaFn48aNJCQkWG8rV64EYMiQIQDFHktISGD27NmYTCZuv/1263OMHz+eRYsWsWDBAtatW0dmZiYDBgygqKjIIe9JRMrQ3u9h6XjLdpdJ0O7BEjc1DIOXlu5m2Y4EXJ1NfHxva5rV8LNPnSJSIZgMwzAcXcQ548ePZ+nSpRw4cOCiIyoGDRpERkYGP/30EwBpaWkEBwczb948hg0bBsCJEyeIjIzk+++/p0+fPiV63fT0dPz8/EhLS8PX17fs3pCIlF7cH/DpQCjMhVb3wMD3wIaRVh+uPsRry/cC8O7wVgxsGWGvSkXEQWz9+11u+vTk5+czf/58Ro0addHAc/LkSZYtW8b9999v3bdp0yYKCgro3bu3dV9ERATNmjVj/fr1l3ytvLw80tPTi91EpBw5tc8y23JhLtTvAwPesSnwfL3pmDXwPDegiQKPiADlKPQsXryY1NRURo4cedHHP/nkE3x8fBg8eLB1X2JiIm5ubvj7F19cMDQ0lMTExEu+1rRp0/Dz87PeIiNLPuxVROws/YRl8sGcM1CjDQyZA84lH2m1al8STy3cDsDDN9bh/s617VWpiFQw5Sb0zJo1i379+hERcfF/kc2ePZu7774bDw+PKz6XYRiXnXBs8uTJpKWlWW/x8fGlrltEylBOKsy/A9LiIbAe3PWlTQuIbo1PZcx8y2zLt7WqwVN9G9mvVhGpcMrFRBWxsbHExMTwzTffXPTxX375hX379vHFF18U2x8WFkZ+fj5nzpwpdrYnKSmJTp06XfL13N3dcXfXkFWRcqUgFxbcDUm7oFoo3PMNeAeWuPmR5CxGzd1ITkERXeoH8drtLXBy0mzLInJeuTjTM2fOHEJCQujfv/9FH581axatW7emZcuWxfa3bt0aV1dX66gvsIz42rlz52VDj4iUM+YiWPQQxK4Dd1/L8hL+USVunpSRyz9m/0FKVj7Na/jx4T2tcXMpF7/eRKQccfiZHrPZzJw5cxgxYgQuLheWk56ezldffcWMGTMueMzPz4/777+fiRMnEhgYSEBAAJMmTaJ58+b06tXrWpQvIlfLMGD507D7W3B2gzs/g7DmJW6ekVvAfXM2Ep+SQ1SgF7NHtqWau8N/tYlIOeTw3wwxMTHExcUxatSoiz6+YMECDMNg+PDhF3185syZuLi4MHToUHJycujZsydz587F2dnZnmWLSFn542PY8B/ABLd9DLVvLHHTIrPBmM82s+tEOkHV3Ph0VDuCfXTpWkQurlzN0+MomqdHxEHiN8CcfmAuhN6vQKdHbWo+c+V+3vnpAJ6uznzxcAda1KxunzpFpFyqsPP0iEgVk3UavhppCTxNb4OOY21q/suBU7z78wEAXh3cTIFHRK5IoUdErj2zGb55ENKPW4amD/y3TZMPnkzPZfyCrRgGDG8XyW2tatqxWBGpLBR6ROTa+2UGHPoJXDxh6Kfg7lPipoVFZsb9bwuns/JpHO7LC7c0tWOhIlKZKPSIyLV1ePX5VdMHvAWhtoWWt1buZ8NRy6rpH9x9PR6uGrQgIiWj0CMi1056Aix8ADCg1b1w3V02NV+1N4kPVh8CYPrtzakdVPLZmkVEFHpE5NooKoCv74OsUxDaHG5+w6bmx1NzePzLrQCM6BjFgBZaRFREbKPQIyLXxk8vQdxv4OYDQz8BV88SN80vNPPo/zaTml1Ai5p+TOnf2I6FikhlpdAjIva393tY/65le9D7EFjXpuavL9/LlrhUfDxceP+u63F3UT8eEbGdQo+I2NeZo7D4Ect2hzHQ5Fabmv+4K5H/rjsCwIwhLYkM8CrjAkWkqlDoERH7KciFL/8BuWlQsy30etGm5nGns5n41TYAHuhcm95Nw+xRpYhUEQo9ImI/KyZDwjbwDIAhc8HFrcRN8wqLGPu/zWTkFnJ9reo81a+R/eoUkSpBoUdE7GP7V/DnbMAEt/8f+Nk2a/Kry/aw43ga/l6uvHfX9bg669eViFwd/RYRkbKXtBe++6dl+8YnoF4vm5ov3X6CT36LBeCtYdcRUb3kI71ERC5FoUdEylZepqUfT0EW1O4K3Z62qfmR5CyeXrgDgDHd6tK9YYg9qhSRKkihR0TKjmHA0scheR/4hMPts8Cp5MPLcwuKGPPZZjLzCmlXO4AJNzWwY7EiUtUo9IhI2dk0B3Z8CSZnuGMOVAu2qfmL3+1iT0I6QdXc+PfwVrioH4+IlCH9RhGRsnFiC/zwlGW71wsQ1dGm5ou2HOPzDfGYTPDOna0I9fWwQ5EiUpUp9IjI1cs5A1+OgKJ8aNgfOj1mU/MDJzOY8s1OAP7Zsz431AuyR5UiUsUp9IjI1TEM+PZRSI2F6lEw6AMwmUrcPDu/kDGfbSanoIjO9YIY16O+HYsVkapMoUdErs7W/8HepeDsZllI1LO6Tc1fWbaHA0mZhPi48/ad1+HsVPLAJCJiC4UeESm99BOwfLJlu/sUiGhlU/O1+0/x2R9xALw97DqCqrmXdYUiIlYKPSJSOoYBSx6DvDSo0Ro6jrOpeVpOAU8t3A7AyE7RdFI/HhGxM4UeESmdrZ/BwZXg7A6DPgRnF5uav7x0NwlpuUQHevFk34Z2KlJE5DyFHhGxXdrx4pe1gm0LLSt3n+TrTcdwMsGMoS3xcrMtMImIlIZCj4jYxjDgu8cgLx1qtIFOtl3WOpOVz+RvLMtMPNilDq2jAuxRpYjIBRR6RMQ2W+bDwZjzl7VsWGYC4Llvd5KcmUf9kGo8rmUmROQaUugRkZJLOwYrpli2ezwDwbaFlmXbE1i6PQFnJxMzhrbEw9W2wCQicjUUekSkZKyjtdKhZlvo+KhNzU9l5PHsYstlrbHd6tKiZnU7FCkicmkKPSJSMlvmwaGfLJe1bv3ApstahmEwZdEOzmQX0CTcl0c167KIOIBCj4hcWdoxWPGMZbvHszZf1lq05Tgrd5/E1dnEW8Na4uaiXz0icu3pN4+IXF6xy1rtoONYm5onpOXwwpJdAIzv1YBGYb72qFJE5IoUekTk8jZ/arms5eJhWUzUxstaTy3cQUZuIS0jq/PwjXXsWKiIyOUp9IjIpaXGF7+sFWRbX5zPN8Szdv8p3F2cmDGkJS7O+pUjIo6j30AicnGGAUvGQX4GRLaHDmNsah6fks0ry3YD8ESfhtQLqWaPKkVESkyhR0QubvMncHiV5bKWjaO1zGaDSV9tIyu/iHbRAdx3Q207FioiUjIKPSJyodR4WPGsZbvHcxBUz6bmn/x2lD+OpODp6swbQ1rg7GSyQ5EiIrZR6BGR4opd1uoAHUbb1PzwqUxeW74XgCn9GxMV6G2PKkVEbKbQIyLFbZr7l8ta79t0WavIbDDxq23kFpjpXC+Ie9rXsl+dIiI2UugRkfNS4+DHs5e1ej5v82Wt/6w9zJa4VHzcXXjtjhaYTLqsJSLlh0KPiFhYL2tlWi5rtX/Epub7EjOYuXI/AM/d0oQa1T3tUaWISKkp9IiIxaY5cHg1uHjaPAlhQZGZCV9uJb/ITM9GIQxpXdN+dYqIlJJCj4icvaz1nGW75/MQWNem5u+vOsiuE+n4eboybXBzXdYSkXJJoUekqjMMWDbRclmrVkebL2sdTMrgvZ8PAvDSrU0J8fWwR5UiIldNoUekqtu7DA78CE6uMPDf4FTyXwuGYfD8t7soNBv0bBTCwJYRdixUROTqKPSIVGX5WbD8acv2DY/ZvLbW0u0JrD90GncXJ6YObKrLWiJSrin0iFRla9+EtHjwqwVdJtnUNDOvkH+dXVtrTLd6RAZ42aNCEZEyo9AjUlWd2g/r/23Z7jcd3GwLLe/E7Odkeh61Arx4uGsdOxQoIlK2FHpEqiLDgO8ngbkA6veBhjfb1HxfYgazfz0KwIsDm+LhWvLh7SIijuLQ0BMdHY3JZLrgNnbsWOsxe/bsYeDAgfj5+eHj40OHDh2Ii4uzPp6Xl8e4ceMICgrC29ubgQMHcuzYMUe8HZGKY9c3cGSNZamJfq+BDX1xLJ2Xd1JkNujdJJTujULsWKiISNlxaOjZuHEjCQkJ1tvKlSsBGDJkCACHDh2ic+fONGrUiNWrV7Nt2zaee+45PDzOD4kdP348ixYtYsGCBaxbt47MzEwGDBhAUVGRQ96TSLmXmw7Lp1i2O0+AgNo2NV+y7QR/HEnBw9WJ5wY0sUOBIiL2YTIMw3B0EeeMHz+epUuXcuDAAUwmE3feeSeurq7MmzfvosenpaURHBzMvHnzGDZsGAAnTpwgMjKS77//nj59+pToddPT0/Hz8yMtLQ1fX98yez8i5dLyKfD7++BfG8b8Dq4ln1cnPbeAnjPWcCojj0m9G/BoD9tGe4mIlCVb/36Xmz49+fn5zJ8/n1GjRmEymTCbzSxbtowGDRrQp08fQkJCaN++PYsXL7a22bRpEwUFBfTu3du6LyIigmbNmrF+/fpLvlZeXh7p6enFbiJVwsld8MdHlu2b37Qp8AC8vfIApzLyiA704sEb1XlZRCqWchN6Fi9eTGpqKiNHjgQgKSmJzMxMpk+fTt++ffnxxx+57bbbGDx4MGvWrAEgMTERNzc3/P39iz1XaGgoiYmJl3ytadOm4efnZ71FRkba7X2JlBvnZl42iqDxLVC/l03N9ySk88lvRwGYOrAp7i7qvCwiFUu5CT2zZs2iX79+RERYZnQ1m80A3HrrrTz++ONcd911PP300wwYMICPPvross9lGMZlJ0mbPHkyaWlp1lt8fHzZvRGR8mrb5xD3G7h6Qd/pNjX9a+flvk3D6NZQnZdFpOIpF6EnNjaWmJgYHnjgAeu+oKAgXFxcaNKkeEfJxo0bW0dvhYWFkZ+fz5kzZ4odk5SURGho6CVfz93dHV9f32I3kUot58z5BUW7Pgl+tq2CvmjLcTYePYOnqzPP3aLOyyJSMZWL0DNnzhxCQkLo37+/dZ+bmxtt27Zl3759xY7dv38/UVFRALRu3RpXV1frqC+AhIQEdu7cSadOna5N8SIVwc//guxkCGoIHcZe+fi/SMsp4NXv9wAwrmc9alT3tEeFIiJ25+LoAsxmM3PmzGHEiBG4uBQv54knnmDYsGHceOONdO/eneXLl/Pdd9+xevVqAPz8/Lj//vuZOHEigYGBBAQEMGnSJJo3b06vXrb1VxCptE5sgY2zLNv93wQXN5uaz1y5n+TMfOoEe/NAZ3VeFpGKy+GhJyYmhri4OEaNGnXBY7fddhsfffQR06ZN47HHHqNhw4YsXLiQzp07W4+ZOXMmLi4uDB06lJycHHr27MncuXNxdlYnSxHMZkvnZQxoPgRq32hT810n0vj0bOflFwc2xc2lXJwcFhEplXI1T4+jaJ4eqbT+nANLx4O7Lzy6EXzCStzUbDYY8vFvbIo9Q//m4bx/9/X2q1NEpBQq7Dw9IlLGspIhZqplu/sUmwIPwMLNx9gUewYvN2eeHdC47OsTEbnGFHpEKquYFyA3FUKbQ9sHbWqall3A9B/2AvDPnvUJ91PnZRGp+BR6RCqjuD9gy3zLdv8Z4Gxb9703f9zH6ax86oVU474bbFubS0SkvCpV6ImPjy+2kvmGDRsYP348//nPf8qsMBEppaLCs52XgevugVrtbWq+41ga8/+IBeAldV4WkUqkVL/N7rrrLlatWgVYloK46aab2LBhA1OmTOGll14q0wJFxEYb/wsnd4BHdbjpRZuams0Gz327E8OAW1pG0KlekH1qFBFxgFKFnp07d9KuXTsAvvzyS+sCn//73/+YO3duWdYnIrbISIRVr1i2ez4P3raFlq82xbM1PhVvN2eeuVmdl0WkcilV6CkoKMDd3R2wzLMzcOBAABo1akRCQkLZVScitvnxOchLh4hW0HqkTU1Ts/OtnZcfv6kBYX62rcAuIlLelSr0NG3alI8++ohffvmFlStX0rdvXwBOnDhBYGBgmRYoIiV05BfY8SVggv5vgZNtE3S+vmIfZ7ILaBBajRGdou1SooiII5Uq9Lz22mt8/PHHdOvWjeHDh9OyZUsAlixZYr3sJSLXUFEBfD/Jst3mPqhh20SC24+l8vkGy0K+L93aDFdndV4WkcqnVMtQdOvWjeTkZNLT0/H397fuf+ihh/Dy8iqz4kSkhDbOglN7wSsQejxnU1PDMHhhyS4MA269LoIOdXS2VkQqp1L9cy4nJ4e8vDxr4ImNjeXtt99m3759hISElGmBInIF2Smwepplu8ez4BVgU/Ml206wJS4VT1dnpqjzsohUYqUKPbfeeiuffvopAKmpqbRv354ZM2YwaNAgPvzwwzItUESuYPV0y8zLIU2h1T9sappbUMRrZzsvj+lWl1BfdV4WkcqrVKFn8+bNdOnSBYCvv/6a0NBQYmNj+fTTT3n33XfLtEARuYxT+yzz8gD0fdXmmZf/b+1hTqTlEuHnwYM31rFDgSIi5UepQk92djY+Pj4A/PjjjwwePBgnJyc6dOhAbGxsmRYoIpfx47NgFEHDm6FON5uankzP5YPVhwB4ql8jPFxtG+0lIlLRlCr01KtXj8WLFxMfH8+KFSvo3bs3AElJSSVa2l1EysCBGDjwIzi5Qu9/2dz89eX7yCkoolWt6gxsGWGHAkVEypdShZ7nn3+eSZMmER0dTbt27ejYsSNgOevTqlWrMi1QRC6iqBBWTLFst38YAuva1Hz7sVQWbrasn/f8gCaYTKayrlBEpNwp1ZD1O+64g86dO5OQkGCdowegZ8+e3HbbbWVWnIhcwqY5kLwPPAPgxidsamoYBi99txuA21rVoFUt/yu0EBGpHEoVegDCwsIICwvj2LFjmEwmatSooYkJRa6FnDPn19fq8Qx4Vrep+bIdCfwZewYPVyee7Nuw7OsTESmnSnV5y2w289JLL+Hn50dUVBS1atWievXqvPzyy5jN5rKuUUT+as3rluAT3BiuH2lT09yCIqZ9bxmi/kjXuoT7edqhQBGR8qlUZ3qeeeYZZs2axfTp07nhhhswDINff/2VqVOnkpubyyuvvFLWdYoIQPIB2PAfy3YphqjPWneE46k5hPt58PCNtvUDEhGp6EoVej755BP++9//WldXB2jZsiU1atRgzJgxCj0i9vLjs2AuhAZ9oW4Pm5ompefywaqDADzVtxGebhqiLiJVS6kub6WkpNCoUaML9jdq1IiUlJSrLkpELuLgT7B/OTi5lGqI+ps/7iMrv4jrIjVEXUSqplKFnpYtW/Lee+9dsP+9996jRYsWV12UiPxNUSGseMay3e4hCKpvU/Odx9P4atPZIeq3NMHJSUPURaTqKdXlrddff53+/fsTExNDx44dMZlMrF+/nvj4eL7//vuyrlFENs+FU3vA0x+6PmlTU8MweGnpbusq6tdriLqIVFGlOtPTtWtX9u/fz2233UZqaiopKSkMHjyYXbt2MWfOnLKuUaRqy0mFn8/2k+v+jCX42GD5zkQ2HEnB3cWJJ/teeFlaRKSqMBmGYZTVk23bto3rr7+eoqKisnrKayI9PR0/Pz/S0tK0jIaUPyuegd/eg+BG8MivNo3Yyi0o4qaZa4hPyeGxHvWY0Fvz8ohI5WHr3+9SnekRkWsk+SD88ZFlu88rNg9Rn/PrUeJTcgj1defhrhqiLiJVm0KPSHm28jnLEPX6vaFeL5uansrI4/2zQ9Sf7NMIb/dST8AuIlIpKPSIlFeHVsG+78HkDL1tn/vqrZX7yMwrpEVNP25rVcMOBYqIVCw2/dNv8ODBl308NTX1amoRkXP+uop6uwchuIFNzXedSGPBxnjAsoq6hqiLiNgYevz8/K74+D/+8Y+rKkhEgC2fQtJu8KgOXZ+yqalhGLx8doj6gBbhtIkOsE+NIiIVjE2hR8PRRa6B3DT4+eyMy92ngJdtoeXH3Sf5/XAKbi5OPN1PQ9RFRM5Rnx6R8mbtG5B9GoIaQJtRNjXNKyzi1e/3APBQlzrU9PeyR4UiIhWSQo9IeXL6EPx+boj6q+DsalPzT9YfJfZ0NsE+7ozupiHqIiJ/pdAjUp6sfB7MBZbh6fVvsqlpcmYe//7p3BD1hhqiLiLyNwo9IuXFkbWwd+lVDFHfT0ZeIc1q+HL79TXtUKCISMWm0CNSHpiLYPnZIeptRkGIbR2Q9yams2BDHADPD2iqIeoiIheh0CNSHmz7HE7uAHc/6DbZpqaGYfDKsj2YDejXLIx2tTVEXUTkYhR6RBwtPwt+etmyfeMk8A60qfnq/af45UAybs4aoi4icjkKPSKOtv7fkJkI1aOg/cM2NS0sMvPKMssQ9ZE3RBMV6G2PCkVEKgWFHhFHSk+AX9+xbPeaCi7uNjX/fGM8B5My8fdyZWz3emVfn4hIJaLQI+JIP/8LCrKhZjtoeptNTdNzC5i5cj8Aj9/UAD9P2+b0ERGpahR6RBwlYTts/cyy3ecVMNk24ur9VQdJycqnbrA3w9vVskOBIiKVi0KPiCMYBvz4LGBA08EQ2c6m5vEp2cxZdxSAZ/o3xtVZ/yuLiFyJflOKOMKBH+HIGnB2g14v2Nx8+vK95BeZ6VwviO4NQ+xQoIhI5aPQI3KtFRXCj89Ztts/Av7RNjXfFJvCsu0JmEyWszwmGy+LiYhUVQo9Itfa5rmQvA88A6DLRJuams0GLy21DFEf1iaSxuG+dihQRKRyUugRuZZy02DVNMt2t8ngWd2m5t9tP8G2+FS83JyZ0LtB2dcnIlKJOTT0REdHYzKZLriNHTsWgJEjR17wWIcOHYo9R15eHuPGjSMoKAhvb28GDhzIsWPHHPF2RK7sl7cgOxkC60Ob+2xqmltQxOvL9wEwpltdQnw87FGhiEil5dDQs3HjRhISEqy3lStXAjBkyBDrMX379i12zPfff1/sOcaPH8+iRYtYsGAB69atIzMzkwEDBlBUVHRN34vIFZ2Jhd8/tGz3fhmcbZtXZ9a6IxxPzSHCz4MHutSxQ4EiIpWbiyNfPDg4uNj96dOnU7duXbp27Wrd5+7uTlhY2EXbp6WlMWvWLObNm0evXr0AmD9/PpGRkcTExNCnTx/7FS9iq59egqI8iO4CDfra1PRURh4frDoIwJN9G+Hh6myPCkVEKrVy06cnPz+f+fPnM2rUqGKjUVavXk1ISAgNGjTgwQcfJCkpyfrYpk2bKCgooHfv3tZ9ERERNGvWjPXr11/ytfLy8khPTy92E7GrY5tg59eAqVQTEb61cj9Z+UW0rOnHwJYR9qlRRKSSKzehZ/HixaSmpjJy5Ejrvn79+vHZZ5/x888/M2PGDDZu3EiPHj3Iy8sDIDExETc3N/z9/Ys9V2hoKImJiZd8rWnTpuHn52e9RUZG2uU9iQCWiQhXTLFstxwO4S1tar43MZ0vNsYB8OyAJjg5aYi6iEhpOPTy1l/NmjWLfv36ERFx/l+xw4YNs243a9aMNm3aEBUVxbJlyxg8ePAln8swjMvOXTJ58mQmTJhgvZ+enq7gI/azZwnE/w4untDzOZuaGobBK8v2YDbg5uZhtI0OsFORIiKVX7kIPbGxscTExPDNN99c9rjw8HCioqI4cOAAAGFhYeTn53PmzJliZ3uSkpLo1KnTJZ/H3d0dd3fbVrMWKZXCPFh5dsblTuPA17ZLU6v3n+KXA8m4OTvxVN9GdihQRKTqKBeXt+bMmUNISAj9+/e/7HGnT58mPj6e8PBwAFq3bo2rq6t11BdAQkICO3fuvGzoEblmNvwfnDkC1ULhhn/a1LSwyMwryywTEY68IZqoQG97VCgiUmU4/EyP2Wxmzpw5jBgxAheX8+VkZmYydepUbr/9dsLDwzl69ChTpkwhKCiI2267DQA/Pz/uv/9+Jk6cSGBgIAEBAUyaNInmzZtbR3OJOEx2Cqx93bLd41lwr2ZT8883xnMwKRN/L1fGdq9nhwJFRKoWh4eemJgY4uLiGDVqVLH9zs7O7Nixg08//ZTU1FTCw8Pp3r07X3zxBT4+PtbjZs6ciYuLC0OHDiUnJ4eePXsyd+5cnJ01pFccbM3rlhmYQ5vBdXfb1DQ9t4CZK/cD8PhNDfDztG1OHxERuZDJMAzD0UU4Wnp6On5+fqSlpeHrq7WMpAycPgTvtwNzIdy7COr2sKn5tB/28PGaw9QN9mb5+BtxdS4XV6JFRMoVW/9+6zepiD2sfN4SeOrdZHPgiU/JZs66o4BlFXUFHhGRsqHfpiJl7eivsHcpmJwsy03YaPryveQXmelcL4juDUPsUKCISNWk0CNSlsxm+PEZy/b1IyCksU3NN8WmsGx7AiaT5SzP5eabEhER2yj0iJSlHV/BiS3g5gPdp9jU1Gw2eGmpZYj6sDaRNA5X/zIRkbKk0CNSVgpyLIuKAnR5HKrZdmnqu+0n2BafipebMxN6N7BDgSIiVZtCj0hZWf9vSD8GvjWhwxibmubkF/HaD3sBGN21LiE+HvaoUESkSlPoESkL6Sdg3UzL9k0vgqunTc3/75fDnEjLpUZ1Tx68sY4dChQREYUekbIQMxUKsiGyAzS73aamiWm5fLj6EABP92uEh6sm1hQRsQeFHpGrFb8Rtn9h2e47DWwccfX68r3kFBTRJsqfAS3C7VCgiIiAQo/I1TGbYfnTlu3r7oYa19vUfGt8Kt9sOQ7A87c00RB1ERE7UugRuRo7voLjf4JbNej5vE1NDcPgpe92AXD79TVpUbO6HQoUEZFzFHpESis/y9KXB6DLBPAJs6n5km0n2BxnGaL+ZN+GZV+fiIgUo9AjUlrr3oaME1A9CjqMtanpX4eoj+lWl1BfDVEXEbE3hR6R0kiNg/XvWrZ7vwyutoWW/6w9P0T9gS4aoi4ici0o9IiUxsrnoTAXojpD44E2NU1Iy+GjNRqiLiJyrSn0iNgqdj3sWgSYSjVE/Y3l+zREXUTEARR6RGzx1yHq1/8DwlvY1HxL3BkNURcRcRCFHhFbbP0MEraBuy/0eM6mpoZh8NLS3YCGqIuIOIJCj0hJ5aafX0W965NQLdim5ku2nWCLhqiLiDiMQo9ISf0yA7KSIKAutHvYpqY5+UVM1xB1ERGHUugRKYmUw/D7B5btPq+Ai5tNzf+z9jAJGqIuIuJQCj0iJfHjc1CUD3W6Q4O+NjX96xD1yTdriLqIiKMo9IhcyeE1sHcpmJxLuYr6+SHq/ZtriLqIiKMo9IhcTlEhLJ9s2W4zCkIa29R8S9wZFmmIuohIuaDQI3I5mz+BpF3gUR26T7Gp6V+HqN/RWkPURUQcTaFH5FJyUmHVK5btbpPBK8Cm5n8dov5EHw1RFxFxNIUekUtZ8zpkn4aghtD2fpuaaoi6iEj5o9AjcjHJB2DDx5btPq+Cs6tNzT9ee0hD1EVEyhmFHpGLWfEMmAuhfm+o38umphqiLiJSPin0iPzdwRg4sAKcXCxneWz0+vJ95BaYaRutIeoiIuWJQo/IXxUVwPKzo7TaPQRB9W1qvvnsEHWTCZ4f0FRD1EVEyhGFHpG/+nM2JO8Dr0DLoqI2MAyDl747v4p685p+9qhQRERKSaFH5JyMRPj5X5bt7s+Ap79Nzb/adIyt8WdXUdcQdRGRckehR+Sc5U9DXjpEtILWI21qejozj1e/3wPAP3vWJ0RD1EVEyh2FHhGAAyth1yIwOcEt74CTbSOuXvl+D6nZBTQO92VU59p2KlJERK6GQo9IfjYsm2DZbj8awlva1Hz9wWS+2WzpvPzqbc1wddb/ViIi5ZF+O4useQ1S48C3ps3ra+UWFPHM4p0A3Nshila1bOsHJCIi145Cj1RtJ3fBb+9Ztm9+A9yr2dT8g1UHOZKcRYiPO5PUeVlEpFxT6JGqy2yG7/5pmXm50QBodLNNzQ8mZfDh2ZmXpw5siq+HbUtViIjItaXQI1XX5rlwbCO4VYN+r9vU1Gw2mPLNTgqKDHo2CqFfszD71CgiImVGoUeqpoyTsHKqZbvHs+BXw6bmX286xoajKXi6OvPirZp5WUSkIlDokappxWTIS4Pw6yzLTdggOTOPV87OyTPhpgbU9PeyQ4EiIlLWFHqk6jkQAzsXnp2T522b5+R5ddke0nIsc/Lcd0O0XUoUEZGyp9AjVUuxOXkescy+bINfDybzzdkFRacNbo6L5uQREakw9Btbqpa1b0BqLPjWKN2cPIt2APCPDlFcF1ndDgWKiIi9KPRI1XFyN6x/17Ld73Vw97Gp+QerDnL0dDahvu5M1Jw8IiIVjkKPVA1mMywdb5mTp2F/aDzApubF5uS5RXPyiIhURAo9UjVs/gTi/wBXb7j56ubk6as5eUREKiSHhp7o6GhMJtMFt7Fjx15w7MMPP4zJZOLtt98utj8vL49x48YRFBSEt7c3AwcO5NixY9foHUiFkJkEMS9Ytns8C341bWquOXlERCoHh4aejRs3kpCQYL2tXLkSgCFDhhQ7bvHixfzxxx9ERERc8Bzjx49n0aJFLFiwgHXr1pGZmcmAAQMoKiq6Ju9BKoAVUyA3DcJaaE4eEZEqzKGhJzg4mLCwMOtt6dKl1K1bl65du1qPOX78OI8++iifffYZrq7F+1GkpaUxa9YsZsyYQa9evWjVqhXz589nx44dxMTEXOu3I+XRwZ9gx1dn5+R5B5xdbGquOXlERCqPctOnJz8/n/nz5zNq1Cjr5QOz2cy9997LE088QdOmTS9os2nTJgoKCujdu7d1X0REBM2aNWP9+vWXfK28vDzS09OL3aQSKsg5PydPu4egxvU2NdecPCIilUu5+S2+ePFiUlNTGTlypHXfa6+9houLC4899thF2yQmJuLm5oa/v3+x/aGhoSQmJl7ytaZNm4afn5/1FhkZWSbvQcqZtW/AmaPgEwHdn7GpqebkERGpfMpN6Jk1axb9+vWz9tvZtGkT77zzDnPnzrW546hhGJdtM3nyZNLS0qy3+Pj4q6pdyqGkPfDrO5btm18HD1+bmv91Tp5JmpNHRKRSKBehJzY2lpiYGB544AHrvl9++YWkpCRq1aqFi4sLLi4uxMbGMnHiRKKjowEICwsjPz+fM2fOFHu+pKQkQkNDL/l67u7u+Pr6FrtJJWI2w9LHLXPyNOgHjUo/J8+LA5viozl5REQqhXIReubMmUNISAj9+/e37rv33nvZvn07W7dutd4iIiJ44oknWLFiBQCtW7fG1dXVOuoLICEhgZ07d9KpU6dr/j6knNgyD+J+Ozsnzxtgw5nCv87J06txCH2aak4eEZHKwrahLHZgNpuZM2cOI0aMwMXlfDmBgYEEBgYWO9bV1ZWwsDAaNrRcbvDz8+P+++9n4sSJBAYGEhAQwKRJk2jevDm9evW6pu9DyomMk7Dyect29ylQ3bb+Wl9timfD0RS83Jx58dZmmpNHRKQScXjoiYmJIS4ujlGjRpWq/cyZM3FxcWHo0KHk5OTQs2dP5s6di7OzcxlXKuWe2QyLR0NuKoQ1t6yiboPY01m8vNQyJ8/jvRpQo7qnHYoUERFHMRmGYTi6CEdLT0/Hz8+PtLQ09e+pyNb/G358Flw84KHVENK4xE3zC80M+Wg9246l0a52AJ8/2AFnJ53lEREpz2z9+10u+vSIXLUTWyDmRct2n1dtCjwAM1buY9uxNPw8XXl72HUKPCIilZBCj1R8eRnw9SgwF1hGarWx7VLp2v2n+HjNYQBeu70FEbqsJSJSKSn0SMX3/ZOQchh8a8DAf9s0Wis5M48JX24D4J4OtbSCuohIJabQIxXb9q9g2/8sa2sN/j/wCihxU7PZYOKX20jOzKNBaDWe7d/EjoWKiIijKfRIxZVyxDIJIcCNT0D0DTY1n/3rEdbsP4W7ixP/Hn49Hq4a8SciUpkp9EjFVFQAC++H/AyI7AA3PmlT853H03ht+V4AnhvQhIZhPvaoUkREyhGFHqmYVr0KxzeBux/c/n/gXPIppzLzChn3+RYKigz6Ng3j7va17FioiIiUFwo9UvEcXg3rZlq2B74D1W0LLS98u4sjyVlE+Hkw/fbmmnVZRKSKUOiRiiUrGb55GDDg+hHQ9Dabmi/ecpyFm4/hZIK372xFdS83+9QpIiLljkKPVByGAd+OhcxECGoAfafZ1Dz2dBbPLt4JwGM969OudslHeomISMWn0CMVx4b/wP7l4OwGd8wGN+8SN80vNPPY51vIzCukXXQAj3avZ8dCRUSkPFLokYohcYdlXS2A3v+yLChqg78uMzHzzutwcdZXX0SkqtFvfin/8rMsy0wU5UODvtDuIZua/32ZCa2eLiJSNSn0SPm3fDIk74dqYXDrB1pmQkRESkWhR8q3XYtg8yeACQZ/DN6BJW6qZSZEROSvFHqk/EqNgyX/tGx3fhzqdLOpuZaZEBGRv1LokfKpqBAWPgh5aVCjDXSfYlNzLTMhIiJ/p9Aj5dPa1yH+d3Dzgdv/C86uJW7612Um+jQN1TITIiICKPRIeXT0V1j7hmX7lrchoLZNzc8tMxHu58Frt7fQMhMiIgIo9Eh5k3IYvhoJhhla3gXN77Cp+dxfj1iXmXhHy0yIiMhfKPRI+ZFxEubdBllJENocbn7dpubfbj3O1O92AzCpT0MtMyEiIsUo9Ej5kJsGn90OZ46CfzTcsxDcS975eM3+U0w8Ox/PyE7RjO5a1z51iohIhaXQI45XkAuf32VZasI7GO5dBD6hJW6+NT6V0fM3UWg2uKVlBM8PaKJ+PCIicgGFHnEscxEsvB9i11lGat2zEALqlLj5waRM7puzgez8IrrUD2LGkJY4OSnwiIjIhRR6xHEMA5Y+DnuXWlZOH/4/CG9Z4uYJaTn8Y9YfnMkuoGVkdT66pzVuLvpKi4jIxekvhDjOqlfOLzFx+3+h9o0lbnomK597Z23gRFoudYK9mTOyLd7uLvarVUREKjyFHnGMPz4+PxfPgLegya0lbpqdX8ioTzZyMCmTMF8P5t3fngBvDU0XEZHLU+iRa2/H1/DDU5bt7s9Am1ElblpQZGb0/M1siUvFz9OVefe3o0Z1TzsVKiIilYlCj1xbB3+CRY8ABrR7CG58osRNzWaDJ77axpr9p/BwdWL2yLbUD9WaWiIiUjIKPXLtHNsEX9wL5gJoOhj6vgYlHFpuGAb/WraHxVtP4OJk4sN7WtM6yt/OBYuISGWi0CPXxqn98NkdUJAFdbrDbR+DU8m/fh+uOcTsX48A8MaQFnRvGGKvSkVEpJJS6BH7SzsO8wdDTgpEtIJh88Cl5B2PF2yI4/Xl+wB4bkATbmtV016ViohIJabQI/aVnQLzb4e0eAisB3d/bdPyEit2JTJl0Q4ARnery/2dbVtxXURE5ByFHrGf/Gz4/E44tQd8wi3LS3gHlbj574dPM+7zLZgNGNqmJk/2aWjHYkVEpLJT6BH7KCqAr0ZC/B/g4Qf3fAPVa5W4+a4TaTz4yZ/kF5q5qUkor97WXOtpiYjIVVHokbJnNsOScXBgBbh4wF1fQmiTEjePO53NiNkbycgrpF3tAP49vBUuzvqqiojI1dG8/VK28jJg8WjY8x2YnGHIJ1CrQ4mbb447w+j5m0jOzKNxuC//HdEGD1dnOxYsIiJVhUKPlJ3Th2DBXXBqLzi5wqAPoWHfEjf/3x9xvLBkJwVFBvVDqvHJfW3x9XC1Y8EiIlKVKPRI2di/AhY+CHlpUC3MMiw9sl2JmuYVFjF1yS4+3xAPQN+mYbw5tCXVtICoiIiUIf1VkatjNsMvMywrpmNAZAcY+gn4hJWoeWJaLo/M38TW+FRMJpjUuyFjutVVp2URESlzCj1Sernplv47e5da7re5H/pOL/HEgxuOpDDms80kZ+bh6+HCu8Nb0U0zLYuIiJ0o9EjpJB+w9N9J3g/ObtB/Blz/jxI1NQyDeb/H8tJ3uyk0GzQK8+Hje1sTFeht56JFRKQqU+gR2+39HhY9DHnp4BMBw+ZDzdYlappbUMQzi3aycPMxAG5pGcFrtzfHy01fRRERsS/9pZGSM5th7euweprlfq1Olv471Up2Sep4ag6PzNvEjuNpOJlgcr/GPNCltvrviIjINaHQIyWTmwbfPAz7f7Dcb/cw9HkFnEs2pHz9oWQe/d8WUrLy8fdy5b27rueGeiVfkkJERORqKfTIlZ3aZ+m/c/ogOLvDLW/DdXeVqKlhGMxad4RpP+ylyGzQNMKXj+9tTU1/L/vWLCIi8jcKPXJ5e5Za+u/kZ4JvTcv8OzWuL1HTnPwinlq4nSXbTgAwuFUNXh3cXDMsi4iIQyj0yMWZzbD6VVj7huV+VGcYMheqBZeoeXxKNg/N28SehHScnUw8178xIzpFq/+OiIg4jENXcYyOtvwR/Ptt7NixAEydOpVGjRrh7e2Nv78/vXr14o8//ij2HHl5eYwbN46goCC8vb0ZOHAgx44dc8TbqTxObIFPB54PPB3GwD8Wlyjw5BeamffbUQb8ex17EtIJqubGZw+0Z+QN6rAsIiKO5dAzPRs3bqSoqMh6f+fOndx0000MGTIEgAYNGvDee+9Rp04dcnJymDlzJr179+bgwYMEB1v+AI8fP57vvvuOBQsWEBgYyMSJExkwYACbNm3C2VmXUWxyah/8/C/Ys8Ry38UDbnkHWt55xaZFZoNFW47zdsx+jp3JAaBlTT8+urc14X6e9qxaRESkREyGYRiOLuKc8ePHs3TpUg4cOHDRswLp6en4+fkRExNDz549SUtLIzg4mHnz5jFs2DAATpw4QWRkJN9//z19+vQp0euee960tDR8fX3L9D1VCGdiYc1rsO1zMMyACVoMg25PQ0DtyzY1DIPlOxOZsXI/B5MyAQj2ceexHvUY1rYWbi4OPZkoIiKVmK1/v8tNn578/Hzmz5/PhAkTLhp48vPz+c9//oOfnx8tW7YEYNOmTRQUFNC7d2/rcRERETRr1oz169dfMvTk5eWRl5dnvZ+enl7G76aCyDgJv7wJf84Bc4FlX6MB0ONZCGl82aaGYbD2QDJvrtjHjuNpAPh5ujK6W11GdIzG001n2UREpHwpN6Fn8eLFpKamMnLkyGL7ly5dyp133kl2djbh4eGsXLmSoCDL/C6JiYm4ubnh7+9frE1oaCiJiYmXfK1p06bx4osvlvl7qDByzsCv78DvH0Gh5VIUdbpDj+dKNLPyxqMpvLFiHxuOpADg7ebM/Z1r88CNdfD1KNm8PSIiItdauQk9s2bNol+/fkRERBTb3717d7Zu3UpycjL/93//x9ChQ/njjz8ICbn0LMCGYVy20+zkyZOZMGGC9X56ejqRkZFX/ybKu7xM+OMj+PVdyLOcnaFmW+j5PNS+8YrNdx5PY8aP+1i17xQAbi5O/KNDFKO71SWwmrs9KxcREblq5SL0xMbGEhMTwzfffHPBY97e3tSrV4969erRoUMH6tevz6xZs5g8eTJhYWHk5+dz5syZYmd7kpKS6NSp0yVfz93dHXf3KvRHujDPcgnrlzchyxJYCGkKPZ+DBn3hCqOqDp3K5K2V+1m2PQEAZycTQ9tE8ljPeuqkLCIiFUa5CD1z5swhJCSE/v37X/FYwzCs/XFat26Nq6srK1euZOjQoQAkJCSwc+dOXn/9dbvWXCEUFVo6J695DdLiLfsC6kD3Z6DpYHC6fCfjY2eyeSfmAAs3H8NsWLLRwJYRjO/VgNpBWhFdREQqFoeHHrPZzJw5cxgxYgQuLufLycrK4pVXXmHgwIGEh4dz+vRpPvjgA44dO2Yd0u7n58f999/PxIkTCQwMJCAggEmTJtG8eXN69erlqLfkWIYBp/bC3mWWwHP6oGW/TwR0ewquu/uy62Xl5Bex7mAyK3YlsmTrCfKLzAD0ahzKxN4NaBxeBUe3iYhIpeDw0BMTE0NcXByjRo0qtt/Z2Zm9e/fyySefkJycTGBgIG3btuWXX36hadOm1uNmzpyJi4sLQ4cOJScnh549ezJ37tyqNUdPUSHE/Qb7foB9y+DM0fOPeQZAl4nQ9n5wvfilqOTMPH7ek8SPu0+y7uApcgvM1sc61Q1kUp+GXF/L/6JtRUREKopyNU+Po1TIeXryMuDgT7Dve9i/AnJTzz/m7A51ukGjmy2XsTyKvyfDMDh0KouVu08Ss+ckm+PO8NdvQY3qntzUJJT+LcJpGx1wTd6OiIiIrSrsPD1SAuknLCFn3w9wZC0U5Z9/zCvQ0im5YT+o2wPcive5KTIbbIo9Q8yek6zcfZIjyVnFHm9ew4+bmoRyU5NQGoX5aMkIERGpdBR6yjPDgJM7LSFn7zJI2Fr88YC6lrM5DftDZDtwKn5JLzu/kLX7k1m5+yQ/7z3JmewC62Nuzk50rBtIryah9GocolFYIiJS6Sn0lAeFeZByBE4fsHQ8Tj5o+Xn6AGSf/suBJku4aXiz5RbcAMMwSMnK50hcGodPZXE4OYsjyZkcPpXF0dNZFBSdv27l5+lKj0Yh9Gocyo0NgvDRRIIiIlKFKPRcK2YzZJw4G2oOwOlD50NOatzZNa8uwsUT6vYgv14fjgR04WCWpyXU/JzF4eRfOXwqk/Tcwku+bGSAJzc1DqNXkxDaRgfg6qy1sEREpGpS6LGj7A2fwoGVOKccxDXtCE7nlny4iHxnb1I8a3HaI4ok15okuEaS4BzBjvxQ9h8t5MS2XGDPRduaTBDh50mdYG9qB3lTJ8ib2sHVqBPkTU1/T/XPERERQaHHrrb/tpIOZ5ZY7xcYzsQZIRw2wjlshHPECOew2fLzFH6QdbFwkmnd8vN0pU6wN3WCqp0POMHeRAd64+FahYboi4iIlIJCjx3tDezJqmQ/TjjXIMG1BqddwnF1c8PdxRkPVyc8XJ3xdXGinaszHi7OuLs6Ffvp4eqEv7cbdYO9qR1UjQBvN0e/JRERkQpL8/RQQefpERERqeJs/futXq0iIiJSJSj0iIiISJWg0CMiIiJVgkKPiIiIVAkKPSIiIlIlKPSIiIhIlaDQIyIiIlWCQo+IiIhUCQo9IiIiUiUo9IiIiEiVoNAjIiIiVYJCj4iIiFQJCj0iIiJSJSj0iIiISJXg4ugCygPDMADLEvUiIiJSMZz7u33u7/iVKPQAGRkZAERGRjq4EhEREbFVRkYGfn5+VzzOZJQ0HlViZrOZEydO4OPjg8lkKrPnTU9PJzIykvj4eHx9fcvseSs7fW6lo8+tdPS52U6fWenocyudy31uhmGQkZFBREQETk5X7rGjMz2Ak5MTNWvWtNvz+/r66gteCvrcSkefW+noc7OdPrPS0edWOpf63EpyhuccdWQWERGRKkGhR0RERKoEhR47cnd354UXXsDd3d3RpVQo+txKR59b6ehzs50+s9LR51Y6Zfm5qSOziIiIVAk60yMiIiJVgkKPiIiIVAkKPSIiIlIlKPSIiIhIlaDQY0cffPABtWvXxsPDg9atW/PLL784uqRyberUqZhMpmK3sLAwR5dV7qxdu5ZbbrmFiIgITCYTixcvLva4YRhMnTqViIgIPD096datG7t27XJMseXElT6zkSNHXvDd69Chg2OKLUemTZtG27Zt8fHxISQkhEGDBrFv375ix+j7VlxJPjN93y704Ycf0qJFC+sEhB07duSHH36wPl5W3zOFHjv54osvGD9+PM888wxbtmyhS5cu9OvXj7i4OEeXVq41bdqUhIQE623Hjh2OLqncycrKomXLlrz33nsXffz111/nrbfe4r333mPjxo2EhYVx0003WdeYq4qu9JkB9O3bt9h37/vvv7+GFZZPa9asYezYsfz++++sXLmSwsJCevfuTVZWlvUYfd+KK8lnBvq+/V3NmjWZPn06f/75J3/++Sc9evTg1ltvtQabMvueGWIX7dq1Mx555JFi+xo1amQ8/fTTDqqo/HvhhReMli1bOrqMCgUwFi1aZL1vNpuNsLAwY/r06dZ9ubm5hp+fn/HRRx85oMLy5++fmWEYxogRI4xbb73VIfVUJElJSQZgrFmzxjAMfd9K4u+fmWHo+1ZS/v7+xn//+98y/Z7pTI8d5Ofns2nTJnr37l1sf+/evVm/fr2DqqoYDhw4QEREBLVr1+bOO+/k8OHDji6pQjly5AiJiYnFvnvu7u507dpV370rWL16NSEhITRo0IAHH3yQpKQkR5dU7qSlpQEQEBAA6PtWEn//zM7R9+3SioqKWLBgAVlZWXTs2LFMv2cKPXaQnJxMUVERoaGhxfaHhoaSmJjooKrKv/bt2/Ppp5+yYsUK/u///o/ExEQ6derE6dOnHV1ahXHu+6Xvnm369evHZ599xs8//8yMGTPYuHEjPXr0IC8vz9GllRuGYTBhwgQ6d+5Ms2bNAH3fruRinxno+3YpO3bsoFq1ari7u/PII4+waNEimjRpUqbfM62ybkcmk6nYfcMwLtgn5/Xr18+63bx5czp27EjdunX55JNPmDBhggMrq3j03bPNsGHDrNvNmjWjTZs2REVFsWzZMgYPHuzAysqPRx99lO3bt7Nu3boLHtP37eIu9Znp+3ZxDRs2ZOvWraSmprJw4UJGjBjBmjVrrI+XxfdMZ3rsICgoCGdn5wsSaFJS0gVJVS7N29ub5s2bc+DAAUeXUmGcG+2m797VCQ8PJyoqSt+9s8aNG8eSJUtYtWoVNWvWtO7X9+3SLvWZXYy+bxZubm7Uq1ePNm3aMG3aNFq2bMk777xTpt8zhR47cHNzo3Xr1qxcubLY/pUrV9KpUycHVVXx5OXlsWfPHsLDwx1dSoVRu3ZtwsLCin338vPzWbNmjb57Njh9+jTx8fFV/rtnGAaPPvoo33zzDT///DO1a9cu9ri+bxe60md2Mfq+XZxhGOTl5ZXt96yMOlnL3yxYsMBwdXU1Zs2aZezevdsYP3684e3tbRw9etTRpZVbEydONFavXm0cPnzY+P33340BAwYYPj4++sz+JiMjw9iyZYuxZcsWAzDeeustY8uWLUZsbKxhGIYxffp0w8/Pz/jmm2+MHTt2GMOHDzfCw8ON9PR0B1fuOJf7zDIyMoyJEyca69evN44cOWKsWrXK6Nixo1GjRo0q/ZkZhmGMHj3a8PPzM1avXm0kJCRYb9nZ2dZj9H0r7kqfmb5vFzd58mRj7dq1xpEjR4zt27cbU6ZMMZycnIwff/zRMIyy+54p9NjR+++/b0RFRRlubm7G9ddfX2zIolxo2LBhRnh4uOHq6mpEREQYgwcPNnbt2uXossqdVatWGcAFtxEjRhiGYRlG/MILLxhhYWGGu7u7ceONNxo7duxwbNEOdrnPLDs72+jdu7cRHBxsuLq6GrVq1TJGjBhhxMXFObpsh7vYZwYYc+bMsR6j71txV/rM9H27uFGjRln/XgYHBxs9e/a0Bh7DKLvvmckwDKOUZ55EREREKgz16REREZEqQaFHREREqgSFHhEREakSFHpERESkSlDoERERkSpBoUdERESqBIUeERERqRIUekREsCxmuHjxYkeXISJ2pNAjIg43cuRITCbTBbe+ffs6ujQRqURcHF2AiAhA3759mTNnTrF97u7uDqpGRCojnekRkXLB3d2dsLCwYjd/f3/Acunpww8/pF+/fnh6elK7dm2++uqrYu137NhBjx498PT0JDAwkIceeojMzMxix8yePZumTZvi7u5OeHg4jz76aLHHk5OTue222/Dy8qJ+/fosWbLE+tiZM2e4++67CQ4OxtPTk/r1618Q0kSkfFPoEZEK4bnnnuP2229n27Zt3HPPPQwfPpw9e/YAkJ2dTd++ffH392fjxo189dVXxMTEFAs1H374IWPHjuWhhx5ix44dLFmyhHr16hV7jRdffJGhQ4eyfft2br75Zu6++25SUlKsr797925++OEH9uzZw4cffkhQUNC1+wBE5OqV3RqpIiKlM2LECMPZ2dnw9vYudnvppZcMw7CsXP3II48Ua9O+fXtj9OjRhmEYxn/+8x/D39/fyMzMtD6+bNkyw8nJyUhMTDQMwzAiIiKMZ5555pI1AMazzz5rvZ+ZmWmYTCbjhx9+MAzDMG655RbjvvvuK5s3LCIOoT49IlIudO/enQ8//LDYvoCAAOt2x44diz3WsWNHtm7dCsCePXto2bIl3t7e1sdvuOEGzGYz+/btw2QyceLECXr27HnZGlq0aGHd9vb2xsfHh6SkJABGjx7N7bffzubNm+nduzeDBg2iU6dOpXqvIuIYCj0iUi54e3tfcLnpSkwmEwCGYVi3L3aMp6dniZ7P1dX1grZmsxmAfv36ERsby7Jly4iJiaFnz56MHTuWN99806aaRcRx1KdHRCqE33///YL7jRo1AqBJkyZs3bqVrKws6+O//vorTk5ONGjQAB8fH6Kjo/npp5+uqobg4GBGjhzJ/Pnzefvtt/nPf/5zVc8nIteWzvSISLmQl5dHYmJisX0uLi7WzsJfffUVbdq0oXPnznz22Wds2LCBWbNmAXD33XfzwgsvMGLECKZOncqpU6cYN24c9957L6GhoQBMnTqVRx55hJCQEPr160dGRga//vor48aNK1F9zz//PK1bt6Zp06bk5eWxdOlSGjduXIafgIjYm0KPiJQLy5cvJzw8vNi+hg0bsnfvXsAysmrBggWMGTOGsLAwPvvsM5o0aQKAl5cXK1as4J///Cdt27bFy8uL22+/nbfeesv6XCNGjCA3N5eZM2cyadIkgoKCuOOOO0pcn5ubG5MnT+bo0aN4enrSpUsXFixYUAbvXESuFZNhGIajixARuRyTycSiRYsYNGiQo0sRkQpMfXpERESkSlDoERERkSpBfXpEpNzTVXgRKQs60yMiIiJVgkKPiIiIVAkKPSIiIlIlKPSIiIhIlaDQIyIiIlWCQo+IiIhUCQo9IiIiUiUo9IiIiEiVoNAjIiIiVcL/A0HE1+GcalKZAAAAAElFTkSuQmCC",
|
|
"text/plain": [
|
|
"<Figure size 640x480 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"# Assuming `history` is the result of model.fit()\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"\n",
|
|
"# Plot training & validation accuracy values\n",
|
|
"plt.plot(history.history['accuracy'])\n",
|
|
"plt.plot(history.history['val_accuracy'])\n",
|
|
"plt.title('Model Accuracy')\n",
|
|
"plt.xlabel('Epochs')\n",
|
|
"plt.ylabel('Accuracy')\n",
|
|
"plt.legend(['Train', 'Test'], loc='upper left')\n",
|
|
"plt.show()\n",
|
|
"\n",
|
|
"# Plot training & validation loss values\n",
|
|
"plt.plot(history.history['loss'])\n",
|
|
"plt.plot(history.history['val_loss'])\n",
|
|
"plt.title('Model Loss')\n",
|
|
"plt.xlabel('Epochs')\n",
|
|
"plt.ylabel('Loss')\n",
|
|
"plt.legend(['Train', 'Test'], loc='upper left')\n",
|
|
"plt.show()\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 308,
|
|
"id": "1736c65b-a9ab-45ee-8e62-6dee44efda34",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#from tensorflow.keras.preprocessing import sequence\n",
|
|
"#review_sequence = X_one_hot[0]\n",
|
|
"#prediction = model.predict(review_sequence)\n",
|
|
"#print (y_train[2])\n",
|
|
"#print (X[5])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 434,
|
|
"id": "0d17d5da-a357-4b7d-968e-f415f2aa7168",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"X_test = [['update_mutatingwebhookconfigurations', 'patch_nodes']]\n",
|
|
"y_test = ['update_mutatingwebhookconfigurations', 'patch_nodes']\n",
|
|
"\n",
|
|
"import numpy as np\n",
|
|
"sequence_length = 2 # longitud de la ventana\n",
|
|
"\n",
|
|
"test_size = len(X_test)\n",
|
|
"\n",
|
|
"# Convertir X a one-shot encoding \n",
|
|
"X_test_one_hot = np.zeros((len(X_test), sequence_length, test_size))\n",
|
|
"\n",
|
|
"for i, sequence in enumerate(X_test):\n",
|
|
" for j, event in enumerate(sequence):\n",
|
|
" X_test_one_hot[i, j] = 1 \n",
|
|
"\n",
|
|
"# Convertir y a one-shot encoding \n",
|
|
"y_test_one_hot = np.zeros((len(y_test), test_size))\n",
|
|
"for i, event in enumerate(y_test):\n",
|
|
" y_test_one_hot[i] = 1 \n",
|
|
"#X_test_one_hot\n",
|
|
"#y_test_one_hot"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 394,
|
|
"id": "27831a1f-5e0e-4ac0-830d-6f13feec711a",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Assuming you have a trained model and a test dataset (X_test, y_test)\n",
|
|
"#loss, accuracy = model.evaluate(X_test_one_hot, y_test_one_hot)\n",
|
|
"\n",
|
|
"#print(f\"Test Loss: {loss}\")\n",
|
|
"#print(f\"Test Accuracy: {accuracy}\")\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 414,
|
|
"id": "f72d7129-29d4-4ff1-951b-73556499fcc9",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"#y_pred = model.predict(X_test_one_hot)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 426,
|
|
"id": "320dfc2c-6937-45d1-9404-ad6ce82d5e35",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"# Save the model\n",
|
|
"model.save('perfSPEC_model.keras')\n",
|
|
"\n",
|
|
"# Load the model\n",
|
|
"from keras.models import load_model\n",
|
|
"loaded_model = load_model('perfSPEC_model.keras')\n",
|
|
"\n",
|
|
"# You can now use the loaded model for further predictions or evaluation\n"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": "Python 3 (ipykernel)",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.12.2"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|