├── .gitignore ├── README.md ├── leetcode_to_notion.ipynb └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | .ipynb_checkpoints/ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # LeetCode Notion Table Template and Integration 2 | 3 | This repository contains a template for recording LeetCode problems and a notebook that automates the process of inserting an entry into a Notion table based on a LeetCode link. The notebook extracts information such as problem title, number, link, difficulty, and problem description from the LeetCode website and inserts it into the specified Notion table. 4 | 5 | ## LeetCode Template 6 | The template I have created and use is available [here](https://glacier-bell-9e7.notion.site/1ea48ceede1b4482b204f8053b036feb?v=e62ae37861394f3fbafbae51612eaf2d&pvs=4). Feel free to use it. If you prefer to use your own table, make sure the column names (Problem, Name, Link, Difficulty) are consistent with mine for the integration. If not, you may need to modify the script accordingly. 7 | 8 | ## Prerequisites 9 | If you are using Google Colab (which I recommend), there are no prerequisites other than opening this [Google Colab notebook](https://colab.research.google.com/drive/1LSwHkBYbvZmieAkK7NABZdZ4iShFgpQR?usp=sharing), making a copy, and skipping to the "Setup" section. 10 | 11 | If you prefer to run the notebook in Jupyter Notebook/VS code, make sure you have the following prerequisites installed: 12 | 13 | - Python 3.6 or above 14 | - Required Python libraries: requests, beautifulsoup4, pandas, notion (You can install them by running `pip3 install -r requirements.txt`) 15 | 16 | ## Setup 17 | 1. Follow the tutorial from the [official Notion API documentation](https://developers.notion.com/docs/create-a-notion-integration) from step 1 to step 3. 18 | 19 | 2. Make a copy of your **Notion integration token** and **database ID** of your table (copy the link of the table or just open it in the browser to view the link). 20 | 21 | 3. Open the `leetcode_to_notion.ipynb` notebook using Jupyter Notebook. 22 | 23 | 4. In the notebook, provide your Notion API token and database URL. 24 | 25 | 5. Run All, and make sure to provide the LeetCode link when prompted. 26 | 27 | 6. The notebook will extract the necessary information from the LeetCode page and insert it into the specified Notion table. 28 | 29 | 30 | Please let me know if you have any further questions or need additional assistance. 31 | -------------------------------------------------------------------------------- /leetcode_to_notion.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": null, 6 | "id": "01186ea1-7344-4d92-a810-87dedb72309f", 7 | "metadata": { 8 | "id": "01186ea1-7344-4d92-a810-87dedb72309f" 9 | }, 10 | "outputs": [], 11 | "source": [ 12 | "import requests\n", 13 | "from bs4 import BeautifulSoup\n", 14 | "import requests\n", 15 | "import json\n", 16 | "import re" 17 | ] 18 | }, 19 | { 20 | "attachments": {}, 21 | "cell_type": "markdown", 22 | "id": "ysehb82enxsY", 23 | "metadata": { 24 | "id": "ysehb82enxsY" 25 | }, 26 | "source": [ 27 | "## TODO:" 28 | ] 29 | }, 30 | { 31 | "attachments": {}, 32 | "cell_type": "markdown", 33 | "id": "xupY6riZUcnp", 34 | "metadata": { 35 | "id": "xupY6riZUcnp" 36 | }, 37 | "source": [ 38 | "\n", 39 | "\n", 40 | "1. follow [this tutorial](https://developers.notion.com/docs/create-a-notion-integration) from step 1 to step 3 to create a Notion integration and connect to your leetcode table\n", 41 | "2. Go to your notion table's page and copy the link to get the database_id:\n", 42 | "![Capture.PNG](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwAAAAFqCAYAAACtcT2bAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAImBSURBVHhe7f1ptHZnVe8JJ+R5S0tqjCpqjCocNkPlaDn0HCmPDYeCY4MCSoAgIBKE0PcSeiM90iNtlEYIEDAI0okQIEhCHyB0oW8SQiNy9Cjly3nPOR/OhyrfVfxW6r/9PzNzNXs/936e/dz7/+E37rWuZs55zeta15pz3eve+5Th//9/DyGEEEIIIYTDQRKAEEIIIYQQDhFJAEIIIYQQQjhEJAEIIYQQQgjhEJEEIIQQQgghhENEEoAQQgghhBAOEUkAQgghhBBCOEQkAQghhBBCCOEQkQQghBBCCCGEQ0QSgBBCCCGEEA4Ru0oA7vz+r+/wrf/vfwkhhBBCCCGcBHhMnwQghBBCCCGELcdj+iQAIYQQQgghbDke0ycBCCGEEEIIYcvxmD4JQAghhBBCCFuOx/RJAEIIIYQQQthyPKZPAhBCCCGEEMKW4zF9EoAQQgghhBC2HI/pkwCEEEIIIYSw5XhMnwQghBBCCCGELcdj+iQAIYQQQgghbDke0ycBCCGEEEIIYcvxmD4JQAghhBBCCFuOx/RJAEIIIYQQQthyPKZPAhBCCCGEEMKW4zF9EoAQQgghhBC2HI/pkwCEEEIIIYSw5XhMnwQghBBCCCGELcdj+iQAIYQQQgghbDke0ycBCCGEEEIIYcvxmD4JQAghhBBCCFuOx/RJAEIIwRi+uy1uik5+CCGEcCLwmD4JQAghGF0gv1c6+SGEEMKJwGP6JAAhhGB0gfxe6eSHEEIIJwKP6Y97AvDZr3xjOOue9x5+8Id+aDjllFN2zfd93/e1ckMIYRN0gfxe6eSHEEIIJwKP6Y97AvAbp99qOOV/+F+HU272+OEnH/7G4WfO+avV/PAtH5IEIISwr3SB/F7p5IcQQggnAo/pj2sC8IWv/e1w6qmnDqfc9NHDKfd66/Bzz//ycKMXf201P3635yQBOKRc/qWvDBde/N7hK//hH9v6EDZFF8jvlU5+CCGEcCLwmP64JgDv/9jlV7/Kc7sXnJQJwKWf/MxwwxvdeLjlGbcZPv/Vb7ZtwrHxt//0n4e/uuji4fa/c+bwQz/0Q8Ov3OTXhksu/ejwO3e683Cd61xnePpznt/22yuPe9JTRrkvOf+Ctv4g89W///Zw3wc+aLSf5Khrs5/gM3Tjw67+ZKUL5PdKJz+EEEI4EXhMf1wTgPd99JNXJwC3f9FxSQAIJh//5KeOQcrvP/pxw998+z8dVX/F3/7H4a73uNdYTzvae/17Pvyx4Wf/7c8NN//N04dPffmqJAB7YLdB6l+//0PDv/43/2YM/n/95r8x/PYd7zR84OOfGp7yzGcPv3CDfze85Z2XtP32ymFOAN75vkuH33vIw4ZX/PlftPVLHNQEALu4Trleu/olCNzPO++0ca+6/vWPDN/5zqljGZ+c6/dI4nu/91rD9a53ZHjYw44Mf/d3V7cV3/jH7wyvf8vbhzv+7l2GH/2xHxvX9a1u81vDK1/7+rGu0x9CCCHsBx7Tb3UCAG+88KIxSOGm+7mr/uaoOgX01POE+ct/83dH1b/8gteMdQ9++COHr//Hf0oCsAd2G6TyhJ+2XcK2HxzmBOBYx36YE4D/8X88bbjudU8b/uf/+bSrX2u0ZOAZzzgy/PM/X50AsE+wX/zbn/v54fRbnzHc6N//0ugzEoGX/dmft/pDCCGE/cBj+q1PAD72uS8PN/n1m45P8nmi73WvfsNfDj/xv/3keHOu9QSfBKEeICUB2D27DVIVlB6voDIJQBKAypoEgHrK4P/6v04ZPvCBaw0/8zNX1/13/921duqv/NY/DO/6wId3nvbz+UfP/5PRb8wdc1j1hxBCCPuBx/RbnwB87e//z+FBD334NQIdBfgkB/e63wPGep74q/6LX//WcJvb3f6oxMATgI999kvDk5/xrPF1Fb7aP+cxjx9/5Kz+wA9Wn/snLxp++VdvMsrn87xX/flok9p4EPWO93xgfO0Fveinnj+b+odPe+aYpNDuFre89fCGC98xfPP//P/tyJgCPee/5nVjH/ry1JFvOj7xhSvGepKYZ537guFmv3mLnXpeVbjk0st2ZOgJJuN+70c+PvzJS1423OCG/8fY9h73ud+OrCnWBqnyLe0cBUk1WN2tXQRevHYhX+DnN739ncNj//DJR8mdwucJ/+AndCHnbZe8b5wP5Ek+n5TzWpleJWOtkZC63I9+5ovjuui+oXLwwXNf8OKdtcSrUcivvkXfBz/+qeHBj/j9nTXDGj3nsU/YWZ9LvmYsb3/3+4d73vf+Y1/qkPXM5/3xUQGr+wR/3/v+DxyvBfpwbfCKndpyLbz0la8ex4nf6IeP8Jm/eoeNrHc9KR9t/+61RSCtNkvXBHYxPiUAa2Q6u00AxLe/ferwsz97df0v/MKR4T//5/43ALzGhh36ZrFrE0IIIWwaj+m3PgEABSp+w/30FV8dAweCHl4TIijx104UtPEbAQUyCpzgt27/2+MPVH/jFrccgx7kP+rxf7jT/zNXfm0nSPzdu95tDJIIFmn3pKf/0c4TQdl2t3veeyd41DcM6Pu1m95slI+dBHEKcgmm6m8WHAKu+5/9kFEe/bGTVxAIHD90+WfHNugmGLr7ve4zPOGpTx/HRHuCTLVRoI0v7nDm745BFHYqMGSMSlY61iYA+IvXf8647e3GtnziJxIm5mwqAVhjF34i0cFvwDzgDwJIBcKSO4XmiQCW34SgSwElMp79xy8Y58bL8SMBPnNx93vfdyxjrblckhLKn/7s503OJ4ncIx/92LGd5pIxYD+/i6BcvpW/seFh5zxqZ83Q5oEPfuhYX3191j3ueZSv5VsSQ/o/9Pf/YMev/BZDa1w+ucvd7zGOW37V9fCQR56zk+xiH+XMC2uNa4K5QK5sZ76opy9rkXaMhYQYm2iz22tijcwKwfxeEgC44ILThiNHTh3+p//ptOGyy651DdnsJfd70IOPGncIIYRwPPCY/lAkAArm/SkrN1+Chue98E/HH/gS1Hm93v/3vzrjT049iH/DW98xytKPhQlCnvHcc8d2yNeTSQIvAo+f+4VfHN7/XV9QpiBKuhQw8UkAhdy/ePOFO4ENT3exgYCLJIayCm3PffFLR5noq0+dxQc+dvn4NFXnBKo8xaXfi17+yrFMwSBlPFXWE2DZwStUvOIgGZW1CYBQoM9nV14TgDV24Wt8TtDFXxiSTL450HyuTQCQo2+ENJ+Uu2yCThItyvWtkgJ9TzKZY76dWvLhG992dYJKQsH4KGOOeepNX+TKtwTwyNI6AvmEQPmDn/j0Tnn1qRhfW/ngR476lokn9ehi3WnNyCeM3Z/ky68+LtYg35pJHteOfqD/mCc+eezLN2CMk4TCf4/DOmd+93JNLMn0toJAfq8JwBVXnDr8L//L1b8LOP/8046Si994oIC/WA+yP4QQQjgeeEx/KBIAbvy8+uIBCcG2zgma+HZA53o9iMDBg1YlAHqyq3IlENTRhiSCZKJ75UNBlwJDBVEEjP4kXbrqj5MVUGMbwY3KHR8vf+mlazMFCQv2KABXoE0CpcAXPLDntxQqr3i7/UgA1tglH3vwDQRgBJ8udwrJqK9tyC4CeQ+6Vf7Epz1jPNerPh6kqoxvB0i+1NfBRgXKzI3XXfV33955fW3Ot/7Xrrxd9ekcdY1TJp/Usev6oU6JZId+oM98MW9ce6xZfMK6rQHyXq6JJZkdBPJ7TQCuuurU8cfBaiOZ+kauJqEhhBDC8cJj+kORAHgQRdCigMif+CuYIWAhEOfJrp7oS44CEAJPf31AwaiCI7VD3hQKuqS3BrwEarVPZSrok35/WtvBU1iCoqc967nDnc662/hKk2TLnjo29fVAW2Pp2O8EYI1d6tsFo1XuFFPztLacoJhXxDypJEFZ0u3jqX8Cdcq3V3zz74fXvOkt4+sxrGO9K1/bzY39M1/5+vhXaniNiHVE4Epb9/fU2AFfex3fJvCk/jl//MIx4eF1IXxBG8bAWIB38ykD9DIOJRfYrrop6hpbktlBIL/XBIDXfnj9h78G9OY3/8srQPomQt92uL4QQgjheOAx/aFIAEBPG3mCq1cUunf+qedv0evYn/YqsF6bAPC6CDd8Xheq6EnlVBClYIf3nUleOhl6T78yZafjvxHQ++IEZwSNbs82JQCdnXN1DvWdXbsp16s8zCcBKOurfptUmfNfV0eQjUz0kOCi/wUvffn4j9WqjKmx84SagN/f2X/hy84f5bq/p8YOfMNGHZ8kmqxXzklGWHeUqw1jYCz00w+Q+U2MEgTas173ek3MyaxtgUB+rwnA85539es/3//9pw1XXnnqjkztL/VbqBBCCOF44TH9oUkA9OdAeQKo11z81RW9NsNTf/6CCfU1MJoKrGsw2r0uMcVUEKWAwb+lWIv00//iD36kbaNglKCIJ8Yqn3oFaE2g3TEXwHYoKK3+ULl07cYuBZoEjf70lSC8+wtRHVPztJty/TYAmBfWY00yK3o9rbPRf2uAb/UtA+f8BkRj3c0rQATFPKFnbfDbFpXPvQJUg1r3K9eYfoPBD4Qv/9JXdtrVV4BULj78qc+Nc0wb2h7LNSGqzK4NgfxeEoAvfOHU7/rt6vo73OHq/wXQyQ8hhBBOBB7TH5oEQIGU/lJLDRz1mhABBk86+fR3y4H29COAmEsAPBDjHXB/3YAA61V/8YadgGcqgPRA7E9f8WdH/SCT13qQ4e0d18+PevXnHxkjgSd/slF6/f1tftR6uzvc8Sh7tiEB4DUn3gOnLd/+qK2edC+NAeSvatduy0lGsIUfLjO3JGJe36EfEPM6zye/eOVYxlzyV2/0RBvf+tjpo/4+zi4B8L9AJL/670dcl/tbY3S/0pYfBKNP326gk3b+OxfWt76BUgLAutZf3IKaSOzlmliS6W0FwfxuEgD+D8Cf//m1hh/4gavrfvqn/+U/Aksm1xbfppz9sEeM43B9IYQQwvHAY/oTkwDc7gVjAvAL5x6/BAAUsABPRD0wAD2RhPpDQ1ibAFCmVzGQpVdsgFcgFPDQbipQBA/c9CcZ9ScEu/aOB/O0J+nhvesb/9Ivjzbyt+wpJ5jiTzIimyfS/A19t2cbEgDK+BOYlPFai/6MJr954Gmyt51iap52W66n4QTYzEn9qzUdBLF60q+5xHbWBGOhXL7lz52qHX++E1/gJ/21Ip8DJRbyCe/Kf/mb/2F4+B88eiwnWWZdsD7OvMtdJ18Boox1Lb+ypkB/lvPjn79i539N8Kc4eS2Oc80Tn8wRtsluXufRnwplHbOe0bnba2KNzMqaBGDqPwHzfwC+9rWr23sCgB3YzNy/77JPHKUvhBBCOB54TH/CvgG4x8s/Mbz50/84vP3z/7SKm537yeF/+NGfPaYEQK8QcCPmSWyt12tC1NfXRYDAh2BnTQIAPGnnWwcFLARJPPn1P4c4FSgKnqwSlBOk0Y5kgn9qRFDYtXf0D5D0I1D66p856UktARt1BJWc82TV7dmGBABI9vSP2wgAefWJ98Wr3Cmm5mm35W7f3N/+rxCs8icwWQfA8WWf/sI1fIt8/gQt46Qd3wDhn24OeBL9mCc+accnfGvEN2WsG5IB+lNHkI2M6m+NkX+mVtfSq9/w5qOe0JNwKokhkeAHxgTznGMbdiP3zDuftXO9TK313VwTa2U6axIAh2TgJjc5Mrz1rdcavw1Q8O8JQL4BCCGEcKLxmP64JgDv/9jl4w3zh+9z/vBf/st/2RW3et4Hx77HkgCEcKLh9xYkH3wDoD9JGw4WHsAfK538EEII4UTgMf1xTQB4/5cg/r+/6e8Pb/roN9pAf4okAOFkh6f9epd+7m//hxNLF8jvlU5+CCGEcCLwmP64JgBA4HPKaf+f4ZSfv/NwyulPW89vPikJQDgpIfHllRW9H88rMPxGpGsbTjxdIL9XOvkhhBDCicBj+uOeAPA3we953/sP3/M93zsG9LslCUA42SAB4Ee4vLNOIjD1/xvCwaAL5PdKJz+EEEI4EXhMf9wTgBBCOMh0gfxe6eSHEEIIJwKP6ZMAhBBCCCGEsOV4TJ8EIIQQQgghhC3HY/okACGEEEIIIWw5HtMnAQghhBBCCGHL8Zg+CUAIIYQQQghbjsf0SQBCCCGEEELYcjymTwIQQgghhBDCluMxfRKAEEIIIYQQthyP6ZMAhBBCCCGEsOV4TJ8EIIQQQgghhC3HY/okACGEEEIIIWw5HtMnAQghhAPO8N2teq908kIIIRw+PKZPAhBCCAecLrBfSycvhBDC4cNj+iQAIYRwwOkC+7V08kIIIRw+PKZPAhBCCAecLrBfSycvhBDC4cNj+iQAIYRwwOkC+7V08kIIIRw+PKY/FAnA4570lOEl519wjfLPf/Wbwy3PuM1w4cXvvUbdpkD2fR/4oOGrf//ttv4ggY9ueKMbD5d+8jNtvUPbk2Vcu+Fkmq8pWO/Xuc51xnG84LyXr57TKeh7p7PuNl4vXX0HfuTa2k2fvTB1bW+Kg7LOCeRvfvMjw9lnH9kJ7Dk/5ZRTjuLa1z5tuPji03baQCdPex/rZD/9dxDR2Fk7Xr7p68Y5LOt0yre7gb1jal0in73oWOcF2Zuc3xBOFjymTwKQBGBPHJQbzqY5UfOFP4/lpin2Y16WEgB0odOvI44PWgLQ2bnEQVnnCvhrAuDncN55p42JgJdXWfLDWr8dBvZ7ng/LOt0EjJsEoAvQ95IAbCppCGEb8Jg+CUASgD2xTTcc50TNF/7cVAKwCTlOEoATv84J5NckAMA3ANe97r98E1Bl7cUP285+XDfOYVmnm4BxM5aHnfOoa4wpCUAIx4bH9EkASgKgzZcnEPo6WBsQ7Wh/wevfNNbphjHXp4IMtYO5TR75arfm60qXLTtly9xYVcZnDdrQiW7J1ZjrDYdz6rvxSPcbL7zoKD/5nEh39S24H6DqkHzVu13V/roOkKU66d+Lz/a6Jmo7cBuXxu7UtsiRfYxFuij3ttUn7jM+GdtUAlD9yzFl0sun6mWH93c7uvqKt+cY3P6p9TplZ5Xp5YBsfMbaVZtq55ROl6G6Kt91z42fQH5tAlDrXA7y0dPZU8fha1Zr5/kvesn4WcfhzPmzUu2R77r108miXn2Bc6+vY0K+Xwe0cXuBcun3+fB5hKrLcZkcg/RBZ1dX7mOuY3V5HB+EdVp9q/mte/+c76ij7Se/eOXY18eJvBrMS0dnX/WZ6ij3duDjh6qX9lPj0LirT0M4aHhMnwTguxd1vYi9LX11UWsz8Yt8qY/DpnX6rc/Y2bz4vOTSy67RDrDt3Be/dOcc+ehBn7cT2OabtsamPnWsINtVxqdvishCpuppTzDIsdtTdVeku7NPfkPGlG+9rNpU5QA20pe27u/qg2q36nfrs2NZE4K2ux17R5VDW8bAWCTTb1x8ug+qDvWRDMl1qk+AY/RQTn03Ho79HNvVXmUObb1eOurcT813Zydt5q4zzuv8Uub+mNPJp7flelfb3Yy/BvXduUM59RxXWZ0fOPZ1AO5v9altKkv+dCSTNjrX/oI9vn5U5vqrbymv+2tdy9obXC9w7HNRZVNfdU3t3e43zjUW17fbdQr4dWqsyD4I67T6Vnp83qpdFWyR/GoXn54A8OlzDFV+7QNVbp0zyqnfzTiqn0I4iHhMf2gSADbHKbR5+MajvlzsevpJvW8Aa/qobK58DXN966Yr3Db6sVlprN5PZXzWDa3KFJTTlxtF3YAr0l1lSQZ20L/zrdvj/bTR+nGls1/tN+mzY1kToo4DGUtj75iTI9u9vo6Huip/yfYqAziem89OJseUeR9BmQc8AlvrHDpe39lZqXbRt84Dx3VdOK6TNnUtwG7HTyC/2wTg+tc/MnznO6deQ1b1g86rH90etalrY4lunGJuPiir68ftnOrrvp9aG914OfaxIVfzPjcvFdocj3Va29D3IKzT6lvZ4GOf6w/VFuzU3NS+Xieqbzp91MlflHdz5nbsZRwhHEQ8ps83ALZB0qZLEHQj8k1DMpb6qB1oY6K+s6dCf+RIZtUt6jhEt4F5m7pR+vimZArsZ9PEvqk2Yo19rlv16FB91++L3/jW+Nn50n1dofzyL31l0abd+kxtdrMmvI/fyJbGXstFleP2yXb3l5d19YDN3Oh8jI76uZ86v3gZx52PwOV0fb28u7Ypc3mq7+yEueuMvvShr9p3cqZ0Igd5lHl7jr29U+0Dgvr9+gZANla93k7H1dcda/ctQB5tqo/ROTff7tcKbabGBN1YOKafzl3/lC0dS3bXMrdb9XV+hMq9j9rQt/qwkzOl0/3p7Tn29k61D6pvu3noyhzKfSxaT5TTV0F31eW4v72P6pGlefJj1QPtte/BbscRwkHEY/okAHYB06Zuok63USz16ZDepYDQ630zqm0pqxscYK9sq2MFbaAq8/FNyRSyjyQA/3ZtRKcb3D7XrXp0dLLVTwlAlQsaGzJqHUyNz23q7J7zmdrsZU3UsS6NfUp27ef2dT7xsjo2Mbf2oOvX+cXLuvo5aN+Nm7FqPMhCpo/f6zs7qZu7zqivel3Okk6BXPTsdfwE8msTAJ768/RfdVVW9QM2dNeCt9NxHVdlyZ9T4DOCSsmf8o98Szn1GkNlakzQjYVjn0PXzzHt6af6Kaba+pqQ7a7P693vqtf6mWpDedXrbZZ0CunxsevY200hnXWsPpauzKG8jkXj43cBmtfqA6f6u64FH1enD2ivtbuXcYRwEPGYPgmAXcC+KdS2U/VLfebAJt+QRbex+WbkbaFuukKbJvWdzLnxT8kUkt39UKtS9Qj6aPyuW/VdGXg/PjsfLtXth8/UZsruOXxMsGbsHXNyujHXss5nS+Pp/NT18TLWc/e1+xRd+2o78jmnXG0Yi+qrnZ3d9Tqjb5VJnQKKJZ0V1XXjmYNAfm0CwJ8C5a8AXXXVqeN5lTXlh2qzj3OqjVPlQvXnHN4WGXX9uPwle+bquzqOfd27/t3MVde26kM255Srzdw6hWpfbUN9lenzt6Szstd1KrskFxvwo4+lK3M6WyX36c95/s6YKMdO94u3lXz3g9pQtzS/bsdexhHCQcRj+iQAdgFr4/ANhTb6UZtvGqpf6uPQ3zeLbvPq6qSj6nYYn9ezmfEkRxsYZcir5/5Vbh0f5/40j376kR76JEu6Oh8D8pBb7fNNt+oGjdt9VPtJt/tVP/Tr6jjW+X74DDq7qe/WhHB/ct7JqGPvQI73cfsk0+epltHe55x+9K9jdDq5nV9qWfUtn/yVGZ070uFjQ58/Na7+QZ/Xd3YiTzJV7zZWHbXPkk7/4WXVj4y14yeQX5MAcF7/GViVJTuwVWUc+7xD5xv3Q0fXZ2rtUObXhK8P+VGyAN3ur85m93etp5/2hjoWjl2X28I5da4bmd2PgCW72n2s67TaI5mU+7n3wQbZsaRzU+u09sVe7JadU2UO5a7Py7HZ55RPzl0Wur1/p4/jufmtfdaMw/0dwkHFY/okABMXNRtN3WzqprGmj6PNSu3mNguXSR826KUnaYxRstnM9CfL6qamNqrX+LvxUab2ID/WTVbtujFJL2Nw/dILnW5APnrUp/PtnF+r/W4z7IfPun5Ta0J4e/l4zdgr9K3jl32SJ/nQlbnP6Mv50tpTH9nY+aWW1fEBbdS+UttrrG47x6qnrtZXO93vlNXrjL7oJOCRXM6xZY1O6RNuy27GTyDfJQD1PwFTpnpRZUlv1VVtZRy1j9vfseRPp47f1wa2cE7/rl6478Fths7/3Vg49r7S7/qol5y5a7GOS7KrPtVTV+tlt+tx/fpzrLSTPM5P9DqtvtV68PZdmUN5tV1gc/U9x5TJtq6vxq45Rcfc/MKSzbVMPlV9CAcRj+kPRQJwWJnbSI8nSxt+CGGeGtTvhk7eQYe9ogZoIYQQjg2P6ZMAbDFJAELYDrrAfi2dvINOEoAQQtg8HtMnAdhikgCEsB10gf1aOnkHnSQAIYSweTymTwIQQggHnC6wX0snL4QQwuHDY/okACGEEEIIIWw5HtMnAQghhBBCCGHL8Zg+CUAIIYQQQghbjsf0SQBCCCGEEELYcjymTwIQQgghhBDCluMxfRKAEEIIIYQQthyP6ZMAhBBCCCGEsOV4TJ8EIIQQQgghhC3HY/okACGEEEIIIWw5HtMnAQghhBBCCGHL8Zg+CUAIIYQQQghbjsf0SQBCCCGEEELYcjymTwIQQgghhBDCluMxfRKAEEIIIYQQthyP6ZMAhBBCCCGEsOV4TJ8EIIQQQgghhC3HY/qtTwBORptDCCGEEELYJB7TJwEIIYQQQghhy/GYPglACCGEE8aV3/qH4fNf/ebwuav+5qQBe7G7G89h5GScwxNF1k44kXhMnwQghBDCCYFAqAuSThYSyJ38c3iiyNoJJwKP6ZMAhBBCOCGc7E+Nsb8b12EiT/73RtZOOBF4TJ8EIIQQwgmhC4xONrpxHSY6n4R1dP4MYT/xmD4JwEoe96SnDNe5znV2uOUZtzmwGTx2Yd+FF7+3rd8UyL/vAx80fPXvv93WHysvOf+CfZV/soAf1q45fIXP6MP58VoLm+TST35muOGNbrwzhr3A9YoMZNW6Taxb+RU9Xf1+MHU9aM6PxxzX9XWsdEHRyUY3rsNE55Owjs6fDtc0e393vbEH3emsu7V7XLiaqT1zr9T7Kfv/mvuyoN9u2u8HHtMnAVhAE14XEQtrKsA4nnQ3/7pI9wvkr724OjuX2PTFezKy2w1DftYN43ithYOGEvZu/exm3Yq99Nk0U9eD5nw/5riOW7q0vo6VLig62ejGdbKwiXXd+SSso/Onw/ywj3WxBnv7tiQAm1iHnYxNxxDHej+l327u5/uBx/RJABYgkJh6yncQAlR0Y4MvyOMV9HUX3BSdnUscBP+eaHbjY5CfFaAd5gTg6c95/jj2Gqzu1qewlz6bZup60JzvxxzXcUtX9ele6YIi8dmvfGN4/0cvH177l28dPzlX3Ytf/qrhiU99xlHtTxTduE4WNrGuO5+IT37hyuH1b3n78JfveNdw+Zeuatscb9544UXDzX/zFiO3u8Mdh79+/4fadpd9+gtjna+7JXa7Ljt/Opqfh53zqGvMUxKAo+lkbDqGSAJwDMH0ieBYbF66wOpi0GJjgyFrn3ptg/aqB/VnkdIfOXqCCVM3W+ziyYDa6SmB7MIO5Km+LtopO6bw9si/4PVvOuriqvYocZqys8oEH+saf07pdBmqc73gPu7myTkWPY7mWG3n9LpMQKd84hsaPlSZryHqtBam5pZy1Wt81f41NrsvOZatUzLqGJxqs8bs62CuP0i/xuXjoaz2r/Pr9T424Fzj8TF2bTUG4Lj6uvPlFPJDHbdskS6dy4bax22c0780bq+vfqj+rPWiC4rg45//8vCQR5wz3OTXbzo8+BG/P/zKTX59OPvhjxzLqX/uC148POJRj7lGvxNBHZN89PwXvWRnHrQGmSP5pM4LTM2Nrom5PZ2+oHPQPHmZcF3g7ejndVPzB51P4B3v+cBw05v/5vCAsx8y3O/3zh5+7aY3G8u6tscTEhHm4qL3fnC47W//zqRNL3jpy4d73e8Bwye+m8R09R27XZedPx3ml/n+5BevHOff54E1UeMTrRPNm68hydKa0zr1ea9tHHRTt+n78dw69OsFfL07UzI6m+v45Iepekf+lR2ST3vJoczt4Vz96VfnpLbZbzymTwIwA4uTC8wXeIWJ1uTxyWT6AqasTrifo+P0W58xfvpC1ALjUxeKZDrqo/agRer9dmOH5DjVDunwi4WEoNbLrs5OOPfFL520YY0/53TWMV5y6WU7bZFZ5fpYKnvVU6EcWTqvdlSQ7XZ1dnob+Zl21FVbK5TjY5dJmc/1ks0c1/6+qVWb1Gdq3NVm+vk6UL3Lq9BW9VUXcufGqz61jZ/XMenc9SAPuRoHn+7rrs8c6HIbhORITx0vc6c+tW5KppgaN+PwcdX14tfx3BrsgiJ45WteP5x557PGp7CcX/aZLw5n3uWuwwvOe8V4fjIkAO4TfO5z363hublRe5dJPWXUdf3VppY5dX6B9l62dL11PiFRu/Nd7z684s9ft1PG03HkfvKLXzmq7YkCP97+jmduNCnZrwSAueDY55tPTwD49P0GfI3U9ppXn+u59UKd78Mqc5v2ep/0cXLetaftUoxSZVSbZRPlnNOWPjoH2k75oI6JftIpWXN7o4+JsjpfxwOP6ZMAzMDE1AVVYaFo8fDpCxZ8wWiB1AmXDNX74pvqM1dfF7mXrbHDy0Dtax39Kafey4XLWxoH1Db0nfOnyhzXOWUfF15N7DiuT1PmWKNnDUt9az06a3tvAxzLtiV/Ue4bFFQZFddHv25TXvJPNwei2oycug4oQ4fOK66/ynN7psZKH18PdQy1H/XVRnA7aVN9XeXOgayurWxBFuc+dqfzeR1nZWrc7nuVSWen3/3gdEERnPvi84a73P2ewyc+f8VOGa9jvO2S943HBFo8VX74OY8efuRHfnT8huB1f/W2o9qSMPzgD/7g8PO/eIPh3Be9dPj0FV/dqeeJ4GP/8CljOfU/9dM/Pb6mQh2vfLzqtW8YZdKfQPbdH/rYTt9KHVP1B+Dfep24T5bmhmPWl8usc4es6uMpv4s6v52dXTun8wlB9W/f8U7DpZ/49E4Zr3E947nnDh++/HOjj3m1Sz7mSfxFFoiTLDzmiU8aX9EhoGIuNQd/8eYLx28V9G0QXPzBy8b14jKWYIxdAsArPHpFiG+h/BsArZunPuu545ph7bzoZa/ceU3IEwBef3r0E/5weMoznz2Z9FRfVqrffY7XzL/WInLqupRsyfC2LkPQr+5xWpdTfbCn6uvWUK2bssXlVTr5nc2UqV3XB1/Ua1HU8bos2exzoDK155P+6OBzaiz7icf0SQBm0GR1C0H4gvTFoHpfAFo8bGgV5KitL4quzKkLDOoirWVLdqhP19fLOa/jpb/Lk92dnV7ufdRmyZ8qm9Lp4/T2HHt7p9rn7FbPFFV/HWNt6/WdT7yN/FNtm7KLcupp5+WMVTLUrrN5TX8+va+owbCoNndj7sqcaj/HshO56jvlH/lR5d7H66Vjyh7vx3H1VVc2xZQO2eK24t9OV50Dob4Vyl2ndLlvvUzHnQ6XI7qgCAgWb3O724+BHsH8Z678+lH1BFqn3+qMnbqXvurVYxDJNwbjtwV3Pms4/zWvGwOz93z4Y6Msgjf1f82b3jIGnk96+h+NughUCdioe8Nb3zHc+rduO74igmxeBSEJ8IDT8fFA56MuqKCedcrx0tx067SWIUvyhOvoqPPLebce54Kizif49273vPeOTyt/ddElY4D91r9+907Cxfx94GOfGuuZX+bgvR/5+Bg8n/PYJ+zII4G4/e/ccZwnySOxeOgj/2D4zBVf2ylbgjF1CcDHPvelse7lF7z2GmNgXL/8qzcZdbM2+PyN0285JiDUKwGgD+/t+2trHdWXlTo/2KWnxsxFDd59zQnfC3098IkcfSIPGd0cA33dFpBe+qsMeb5+pRu5rC2tabUHzl22t63I/kqVAZ3NXsZxp2Mv9ybgWOOFWkY/ZJNke7vjicf0SQBmYLJ1ga2p98WgNloATHxdPJU1C6ji8lXW6fGyJTsqdZyC/hqvZPrFybHs7uxEHhfDVJu1/pzSKaSHtvShr4693RR71eN1gn5e7z6sbbv6zifeRv6RbbKdNmrvTPnCxzdnc7Wv69/ZPEe1ueu/JLPOD+1oT5nbjK5ubau9bKjjdHmc84lO9Rfej+Pq665simqDqLYKbOJmJrt2o0tUnXXctayrn6MLigSBE09Pb/Tvf2l8UkyQ2D1phQ9+/NNjMEfQrjICNIJF5vb3HvLwsY/qCOTqNwyA/Ec++rFHtSWpIAF4+7vff1RbUcfU+QAbWGfue+rXzg3lfk10Zciqa9B1dNT5reeis190PllKAB7/5KeNT9F1TpB/n/v/3pi0cV7n932XfWL4rdvfYWd+eRWM9vRjnZx1j3sdlRCsgTHNvQLUjaGWffSzXxq/ndC3T9jNtwaPevwTh/s84EGzwT9UX1a6+WBOKeN3Adq7tOZ8fQjmX2tR88gn7ZlPrZGpuRfS6/WuV+vR15vrFuiu98mqu67tNXT2dzZ7WVc/R7XL+wPHPt5aRj8lALvRu0k8pk8CsAAL2Be0UxdPt5hYMPUi9QXidPVr+/iF0l08XrYkszLVnnPKqUeujlXvF39nJ3Xu29rG5auN+3NJZ0V19O2+5p5ir3pquduusk62U+u79u4n4Fj6u7XgUE497VQmGdQt2dz5strQ6Zij2uzjU5uuzOnmQLbqx5n0rbaKOm4fM+e139QYqceWqTa78U3na6i2TtVN9Z9jadxdGePVmJfogqIKgTwBFj8IfvUb3jyW1QCRMSmYI4jntQza3+M+9xuDsVvc6tbXSAC6AJVzyusTQaCPtxV1TJ2PsI958Hn2tbE0N/Tza6Irc3liaS7q/E7ZUds5nU/wVZdgCebO56OWzc0v5+/76CfHb3UufNd7xsCfBGAp2K5UmZU1CYDWi9YGdrNWfvzHf2Jcd/7aWUf1ZaXzu9YXf+XMr/turtVWa0T7Ae/q058y+vNtBfuir9kKddUW3186W7FnSqbX1b6ye86eSqe/s9nL6LN2/4XumpOszuZaJn0kb5TPXZv7hcf0SQAW0ITXiWJCyeR08amMi98XAP28Lwug9tMPZ9YsoEpXXxdpVzZnh84d5NNfFwrt6I9ubODcbxzId190dtLGZVJHH9moc+/j/lzS6eOp+pEh21XPBqhz51j0OLVOc+J2VNDl9ejB7/KRztVmSofaVzQWX6P0XZJX62t/90/XBjn8AFznTrXZ7VGbrsxBl/TXcmzzvuip1wLt3F7a+FrVmObGiLy6blxGLavjrkiH2171cu7ruNpAu9p/at3D0ri7MnT5GgWOu3F1QREB/wvPO/8aATdPjBUUzgWIvI7Bu+O8+qP6GnB2wR3wCsnZD3vEzo+N11DH1PkI++YSAJibm25t1DI+fR1zXq/tCm18fqHa0el2Op8wB8wHT+5Vxuta977/A8dva3ilx78BkN//9BWvGs/r/NKHOVWwTpL3hKc8bQyyefWH3wyo7Vp8zXT1e00ASEbe+b5LxwTleS/8051vrTqWfEu5z4WXM7c+33zW6441Vvszv93+XPfACu29HyBL64u+e71P0rauQ8qqTXMxSicD+XX8XiY7/Bqh/17uTXVMUMvcRsly3ccDj+mTAKxEF43QpHsbLQY27aV2LksLYM0C6mBRIUcXS12k0JVN2TGFt8cm3qn18Xk9ssDtrnZS5n7Fb8iTjfTlfM6fczqlT7gt8qvXu28qe9VTYdyMn3bMBxtaHZOD7LkxU+fzoHHJhm7eHcplh2RyTj+1WbJZOtUf3e4fkB1qUzd2p9qMHNc3VeZU/UKya986h/T3fj5G6nTuOrwN1DHK1+5bL6vjngL90iF7puqrDdVGmNO3m3F7WfUn9bRTveiCIiCgI4DiHXDOedWCJ8pTfwWIMSqY4zUR3svWD4Y5v/ktTl+VAAB/gajqZg+aesJcx9T5A/uWEgD3tdDcdGujK/O557jqqLhOb+dyYG6NdD7hyTfvvz/r+S8YEzog4Nd7+jy15z1++fgt77xkfOf/4g9+ZDxXII3PCaAJpOvvMN71gQ+PvyNADq96qXwtvma6+r0mAFqXrD/+9OkFr//Lnf6VpWue8qlrhzmq1zfH2quh64vM2g9ZU3oEa4k2+30/pk8nr9ZVOhmyudroZZoD6ai+cep8uSzp78alMvrRHzmca76qjfuJx/RJADZIt9hCOMjUDWkTaNPTJhnCFF1QBASQ/IWeG9zw/xhu/Eu/PFz/f//Z8YmvAq+5BIAA89l//MLxNQz+SguBI8mDP3GeSwDQTZBDXwI4btD8EJggtraFblyHic4nwFN7gnh+NIsPefr/ocs/O9YR1PMtD+X4+Jd+5VeP+itOzC8/8iaRY/6RUQN1fWvAD4C9fAnmXsGeoyCedVXrSCBZY7tJAIDgn/EpGa10/jyoJL7ZDjymTwKwQXKBhJON/UgAuA42LTNsJ11Q5BAo8gR+Kvieg0B+t++FO+jkB8BLurtxHSY6nzgEyVP/BRjfMr/1NRkF0nPzz+8A+FOjfBNQ604WOn8eVBLfbAce0ycB2CC5QMLJxrEmAHra70/Lcg2EtXRB0clGN67DROeTY6U+SXdICngaz/+A4FuhmjycTHT+PKgkvtkOPKZPAhBCCOGEQOLZBUYnC/mWa3/mkNeB+N8OXR3v+/PazVP+6DntK1wnC1k74UTgMX0SgBBCCCeEK7/1D21wdLKA/d24DhMn+xyeKLJ2wonAY/okACGEEE4YBEIn2zcB2JsA7l84GefwRJG1E04kHtMnAQghhBBCCGHL8Zg+CUAIIYQQQghbjsf0SQBCCCGEEELYcjymTwIQQgghhBDCluMxfRKAEEIIIYQQthyP6ZMAhBBCCCGEsOV4TJ8EYAb+XBf/JfVxT3pKWx82D77mPw5yzH97vOGNbrxzHk5ejvU/Du8XB82u/bBH+xiyu/opdP35f3kWsnHT/x10zlbKXBd7RbWr7hW+n5ys7NcaxS8+l10bx+3QfwDfL98yb/sx5oqv8d1eHyGcjHhMnwTgkFBvnsfKpuWJuRu2bjrZqE88zBFz1dV1ePDQ1Z8oDppd+2EPspB5LNcNgdKdzrrbNexiHWxyH5izlTLXVfcK9fWyky0B6Pa4/VgTe5HpfWTnyeTbytxaO9HkXhf2C4/pkwAcEthINnmj3rQ8kQTg5IA5SgKwefbDnk0EOidDAgB1XSYB6Km+XIPbITtPJt9WGAdrmrXd1Z9IunUQwibwmD4JwAx1k9PN6Y0XXjSW62vnqYu027jrhS2ZklXbcwOrgZbf5NT/gte/afys/YG2kg8uDzu8Tnahw2VJj3R7n2qfMyVfuCyOofqbPvV1BI61caud6qoPkIfPn/+il4z1kl+hvJNf6+ZkgMbhZTWAquPBPt2Mfdzqv+aGUP3gMt3PPjZf495manxqr3bets61y6DO50Vt1abKdds75nR1TPmm2gXImpNddXO+VKfxsQb5rOvL++/WHvC5A7dJY1eZzpd87NT1K7AFOeyJ0l3lauxT9U611aHM+zLm6gvO/drr2kxBW+8LVR7nGkedQ9qprs4htqsOuvHVPUHyaSufqL7Khzn9jo8BND75fkqG7KBMc1p96zaAxtmtH9r6fHob5KrOdbn8qtv9xyf3xG7N1rbgY63+cT20oa3fby//4ldG+3Rt08fnTnJ8rJ0Nmoda7rJ0LBkh7BaP6ZMAzFA3OV38fhFS55uHo/baBIF+2pR0oXt9lcemoI3B26hMOqZsEOioGxBl3g97Tr/1GeNnHbvrVN8qrzInn3PkuQzas+FJp8ZGOeeySeewxoecu9yOausll142aafsmpJXZQFt5T/q60buOuq4oRu709nETUryzn3xS3fKaSNdkot/JLuzr+LjEejQmOnrc41M+YQynzPZ4LYju8p35nRV5nzjdlHu89D1rbr4ZK1wXGV5W41xya+7tUdy3VfId/+qD+dd+zUgcyoBYO1I3pR97nvaTul3W2sdZe4LZLhc97fKaps5Orvoq7I6N3WP8L70k63VLj61Ziryl4+fY3wseWrj+ub0q8ypvsQmXzOADB+vj182yLedTS5T9ZKv8ypfNrn9aju3R1X7O/kVylnTkgHYL71qgwyNU+cuV7rcHuT4nFU5wB6k9qqv9uscaDu3z4WwBo/pkwDMoIuwXvx+EVNWNxGn25h1XuugXvhdG5fR2dSBPG1GnHcbDCBXshiTxlbHWOVVluQjq9vMXP+aTZH28oWo7ZCHHOR5O2dqPFN2TrWHObt1XOfL11HtX2V4P4G86ocp0IEu9Eiu913SBUv6qgw+GRO6+fTxU0db+qjMbVTZFMfiG9mFHnQuzfWUXVM2oBf9ql+ao93a4+29jY+ZOtrQljL19fZLTI0bPVU/ZW5f1TclC9zWWldlMRaCLNGNS/73siloK58J92M3FujGwzFl1M2Nt4JsdPj4OfbgUmW+Tub0q8zpfFnHXm1xnaqTb73OZbj/XAd20R8bJZ86yeNT9kmX21dtc9liye/VR3wuXW/0YZyyE6ovoJPlvujw8dfxhbApPKZPAjBDvbB18ftF2ZU5lGtj9A2n2zSEbwTdxuYbyZJ+Qb02Mc7Vz2+gwvVxTFm1s8qrLMl3v3g/6qb8XTfFtT7kc85WcHslH6bsZA7nbi7oB46RIf11TMLH1rWpY3fm/CCwlyBCc6AxdX3XyKNO4xPqJx3uSz7Rz02xyuXc+4ga9Dhzurp2U2Ohj3zhx97G59r1ukzNmdsj8NMan8Ju7UEecpHvbeirctl25l3u2rZdw9R67/R7GcedT6bmVrZif63zMXHu1ziykFn7eZslaFvXNH1VJtuw3/VwXMcnqMNe7OZ8yRa1rfLrOvCyJf3q41AuX0pnZ5v7z3XWPnxKnvd3PX5Me4eyh53zqJ014fLAdYGXdfUwtWYF5dRLp4/P27kcoA1tVd/p73RTX9cX5z5fkiGZrieETeAxfRKAGeqF3V38XZmDDG1stEEeZXMXuG+6HNdNwzeSJf3CdXO+th+6fGMSVV5lSf5Ufx97lVF9ttaHfM7Z6jBPBBLoRf+Und0GX+uZd/rVMflNR/hYOt/NjXWuDtDtAZfbrr6yD7qyCnW+LpGJDvWpNvFJPQkA5dSrL31q2RxLupy5OqB8L3OtOZJfuzlzZMecT2G39tR5EN5XtpEA+DrYDZ0PoJs7L+vq56Ad7Ts/Vn/4daV6+U5ltc0ctK2+pG8twxf40eep6u3QPMzNQTf+Tr6XrdXv0Ee+nPO5+8/1qI/qOj+pj/TQjzXE60/1nkiZry/kVfukC7xMx9X+qTUrZI/mwm31di4H8IHr6uzrdLuPJMd95r6eGlMIx4rH9EkAZqgXdnfxd2UV+uvilyzg3DcAqBe++nkb77dGP1Dvm1u3aVW0idG3bmZVXmVJPrLrV6S1Tx2b6n2sa304Z2sHMunX2Qlrxs9NjnZ+k5Ft1S+MVe2q/aqfm+fOD9DJQofms7NnykaHOtdXz6tePrH/k1+8ciz3tqrz9TXHkq4Kbb2947r3MteyZclna3wKu7XH23sb9xF1tKEt5bvxtfA14+XIq77xsin75piaLx8TcEyZzjsf1zZzVPnAeS3zOvpMzdMUnR6hMeA3lXU+9LLd6gf6+7x146y2uM7q685G8LGqD+++U8Y57b3M+8m+qstlqayzf8omQbnvzVN+dF/RB5nyCXT2IaNeL+4Ll6l66iRDMl1PCJvAY/okADPUC7u7+LuyCpsBT9/q5sIxT4O8L7p8Y6DOnxhxzhN5bSRr9AP1dTOsskE/TKpjrxtsJ6+yRr7LRJd/21DHVm0CZC35sJ53+A+yurF7/7U+p3/32kXnl+rfqpNzfDOls/MDY6K/y9bYNHc6d592ZZXqU/T6eqDe7fV6+a/apHOgjf9w2VnSVZnzTZWFDT4u2aq+fLoc9y3lS+t9zqewW3s636HP95rah7bSUeumQNZeEoDOPmRMzS1gS51PjrtrpvqztuvaTFH7yg7Zvps9gk/+KgyfyAHK1VYyK1Uu0NfXRFc2p199HPp7e8ZVrxGfR/WRTsrcTp37uJBZ73m0d58Cx3W+XXfVBbWMvj532Iit1W8O5Z4AQPWj5Mi2eg6dfcicSwCqb5CHDyRjSmaXoISwGzymTwIwQ70Iu4u/K6tIjm96gouZjYuLH3zzEdoggWPfSNboB9kgGSpHlmR7HZ9ui/TUDarKq0zJB5cBGpd0dGPTRumb/ZIPkVfLKpIrZIPALq9f8jfIrq5t1Vd9qLGrXn96dk5v9YNkuizqCWR0c9Ic+Hi7sorLVDv3kf4knuzlk/b041y2al7qeKnT/HbM6eqY8k21C1w2uNwpOQJfeF/Vr/Ep7NYekGzVV9/Jt+qn9rR7x3s/eFTdFMjbSwLA+W7nFqqfuz74pfpTY5P+6juo9jreXvL5pA4fuRzXLb1eL5/WsUjeFNKjMXNe10Qtm9PfQV31Q7Wz1rtO6ZvzQTdn0uG2IaOOjzLpn9PlZciUbuRx3q1ZQXlNAKCuGbeVPpKtss4WZM4lADqXDsqhG4/8CEkAwrHiMX0SgOOANgjfNML2090EQggh7D/cb5VEdPUhHEY8pk8CcBwgq69POMJ2o6Rv6WlfCCGEzaIn9f5EPYSQBOC4oa/wEvwfLvQVcoL/EELYf3SvdfKNewjXxGP6JAAhhBBCCCFsOR7TJwEIIYQQQghhy/GYPglACCGEEEIIW47H9EkAQgghhBBC2HI8pk8CEEIIIYQQwpbjMX0SgBBCCCGEELYcj+mTAIQQQgghhLDleEyfBCCEEEIIIYQtx2P6JAAhhBBCCCFsOR7TJwEIIYQQQghhy/GYPglACCGEEEIIW47H9EkAQgghhBBC2HI8pk8CEEIIIYQQwpbjMX0SgBBCCCGEELYcj+mTAIQQQgghhLDleEyfBCCEEEIIIYQtx2P6JAAhhBBCCCFsOR7TJwFY4B//6Z+Gf/i7bw5//61vhBBCCCGEsHGINYk5u1h0U3hMnwRgBiaim6QQQgghhBA2zX4mAR7TJwGYIU/+QwghhBDC8YLYs4tJN4HH9EkAZugmJoQQQgghhP2ii0k3gcf0SQBm6CYlhBBCCCGE/aKLSTeBx/RJAGboJiWEEEIIIYT9ootJN4HH9EkAZugmJYQQQgghhP2ii0k3gcf0SQBm6CYlhBBCCCGE/aKLSTeBx/RJAGboJiWEEEIIIYT9ootJN4HH9EkAZugmJYQQQgghhP2ii0k3gcf0SQBm6CYlhBBCCCGE/aKLSTeBx/RJAGboJiWEEEIIIYT9ootJN4HH9EkAZugmJYQQQgghhP2ii0k3gcf0SQBm6CYlhBBCCCGE/aKLSTeBx/RJAGboJiWEEMLhY/ju7XKvdPLCPJ0f19LJC+FkootJN4HH9EkAZugmJYQQwuGjCzTX0skL83R+XEsnL4STiS4m3QQe0ycBmKGblBC2jW/9zVdHurpwsPm7v/368I2vXtHW7RZkffMbV7V14dgD0k3O1bHyza9/pS0/SHR+XAv9/8M3vzb8zdeuvIbcEE4Guph0E3hMnwRghm5Slrjii58dHvLgBw0fu+zStv5kgZvVlV/+/OSNgnLqadfVbxOM8SOXvn/42le+1NYfdP72G18d54obYq278C1/OZx5xzsMl33oA9eo2zTbcm0cJAgon/qUJw2Pe8yjFoPLuXXwuc98crjn3e82vPIVL7tGnXj2Hz1j+PMLXtnWbZJL3vWO4dF/8PsHJlgWHmB+4QunDp/61LWOKqt84APXGm5wgyPDN75x6th/zVxxjbzjwr8a3vfud43z1bU5FtjDHvrgs4fnPPuZu072WDtcu8drz5cf//mfTxkuvvi04dvfPvUo/1aqv/Hlwx7y4OHc5z0nDzjCSUcXk24Cj+mTAMzQTcoSX/r8p4ffvdOZY8DY1QPB88vP+9PJoIty6k/kU5ovfu7Tw33vc6/hs5/+RFt/3kteNLzwT57f1p1sLPmbG8lv3/52wzvfcWFbf9AhoHjso//gGjdBbuj3uuc9ZtfqJllzbYTdw1NOEqs3v/F1bb2YWgfwzKc/dbyma7nz+Mc9ZrGN89UrvzS86AXnjslFVz8Fdt7vvvc+0AnAGWccGW55yyNHlVUIWq93vSPDVVddHZDC3Fy94XWvGf7dDX5xePhDHzzc+XfvNNzpzDvu2ndLvObVrxqe8PjH7imIf9X5Lx9+74H3P27zIj8S0P/wDx8Zzj//tKP8W+n8zd5997udNXzw/e8+SnYIB50uJt0EHtMnAZihm5Ql1gQ5bKDc4LjRdfX7fQPkKc5zn/NHwxc++6m2HrhBPfEJ/Y2Cp0hnP+iBWxPIHdSAYxMQ7BH0dWuN+WOtsmZr3X6QBGD/WArO59bB0n4kdpsA7HW+D+r12AWdc3QBKXR+vOqKLw73vMfdh3e98+3jOYkCeywBu7c7VnY7hyeSzqdzdP5eu7ZDOGh0Mekm8Jg+CcAM3aQsoZseT8dv+uu/Nvzoj/7o+JWvXh/ha/Rb3OI3hn/9r396+NVf+eXhlqffYrj3ve4xPqkgML/Tmb8zllNPO+r1tTttHvHwhw5Pf9qTx/p/+29/dnxy7V8VcwO57W+dMVznOtcZ9b/5Ta+/RhB//stfOvZ/7yV/fVS54ObDV6e6GVUop17vV77ohX88vkrC8avOf9nOMTcabMfeD33wvaMdz3vus8ZjApKnPfXJwytfcd749JHzj374g8NznvXM8Zg2T3ri43d0TMHrAsjna17GxBO0V//Z+Ttj5nWHP3vly8dy5uL+97vPTuKz5G/VUwbokt4l2cwVrzG87rWvbtfBEtj/F6+5YOzLXN7ht29/1HzxZPA+977n8EM/9IPDr/zyLx01ZufjH/3Q2A57al1NAHglYG6u3nPxO8fyi972ltEudNfXh7jhPuVJTxze8uY3jgENbR7xsIeMsmtA+O53XTTenNHB+dyYkct6eNYzn77jb9aNB4nMF0/70EmbV7zsJTvXBrK5FmQ3tn3qEx/d6YucP3rG08Z1ABy77DlYLy/90xeN84td6PBvi1gTXC/UuWzgaSxPVf+3n/iJ8ckw643rWgHLkt1iKbCbWwfY0QVJ6JE/6cs+JR1Lc8Xa/83fuPk4Ltpw/fhrPXNzhR2sK15VwWe3uMVvjmuFOpjy59p67MTe7rqa4z/9p1OGm9zkyHDd6542cuaZR38D8N/+2ynDQx96ZPje773W8H3fd63hZjc7MvzYj61LACpcc+f8/iPGBED+dB+wj/z+Ix8+XPzXR+9JS1Tda2Rzz9Ie6HMopvz5gfe9+5j2dl7pwX/y92tfe/QrV2v8ja1JAMLJSBeTbgKP6ZMAzNBNyhIEObe+1S3HBIANjvO73fUuRz3JWdqUKKe+brSSTbBB8MkGe/Ob3XQn4OZ1HQKI97/3kvGcz9+6zRnjzd/lcPOush3ac/PtglX6sqn7V9h/+d1jyniFhmCPbw64mT/mUeeMQTPBOePnlRO+1iZp4YkXAQ/JBAEQda999Z+NyQuvH0mm6+7AV7/2azcZb1b4hE989MmPfWSsf9Mb/mK8KX3m8o+N9fiOQN3HP+VvxkDARF8Crzpfc7KZK3zPKxBT62AOvrImWP70Jz82+vwv3/C60XfY85UrvjC+r611gH4CJq0DhwRl6lWt97/n4jEIw/cqm5srfEofAgHWnoJTdH/+M5eP/Rk7vmTsBAKMG6jjUwkA6+I2Z9x6eOfb37qje27MkqvAgTHf/na33Qlm8An+pQ99kcHcKGljXdCeQASfMcaz7nLnUTbtCRL/4JxHjmseGO/aV9ywAV0EtcgmMMYn+HC8Jr6btL/4hX8y1uFLAmn0Myb0YBvJFf7AbuaMQA3Z1W4SbNZivTb/9EUvGBMQxuLlYm4d6OmzJ7jIp0z72OUfv+wofzO3d/yd3z5qrnhtxdeSz7fKYGmuuM5IallrBIy0Y19gf5vzJ31pz75T6xk/9Z/42IfHcfz1RW8b69/+XV3onnrV0eFd9G9969QxwLzHPY4MN7/50QnA85532vADP3BkDFwJTh/wgCPD93//addIAJbmCt76V28a/atXgLCfcTE+zvENr2gyPl0bBOAOZdRJJn2VVKgM5mRzzqtczCWvKFWZc/787Kc+fkx7Oz7k9R9+a/FTP3VkOO+8o18BWuNvfIyv8bnLDuGg08Wkm8Bj+iQAM3STskR302PzIXDRuTbsGlCKqYC0k03AJtlKAAiq2IzZ/BSEqP0auOlPBQvo4L1xv2F++IPvG28g3Aywm6CGzZ93WfkkMGXD58Zy17PuPDz5D58wPl2k/vOf/dTwyEc8bAyeKKeedoyLG4Xr7qi+4qZFUMsTWMaNLS6HgE86pmRUuvlakr00V0sQDBMA0J95ZD6ZS5ISAiWCM92ggZs4N3fdxIEg7vcecP9rvP9KQEcCh618c+B1c3OFPuoYh8viVQX5Qb7qkhH55IJXvWL8tqW2mRtzNwfofOD973fUvNGHeUAX60oBK36vdhNcMyaCEoJXnyt8/ID73Xf4+lVf3imbAh0K2IE1zzgI2lWmaxG7+GaF9thNwoxewDfUM0bq6fOExz92ZwyADOaea05loB/xMkbG43VT6wBI5Lh265Nd5JPE6BstqE+PgesAm7H/d+5w9dypTvPtZc7UXNXrkTkgiPe57/xJuRIA/KD+fBLEcowOfEp/znUdd+u14sHn2WcfnQCQHNz0pkfGIFRlU68Azc0VYAvXB3OjMt93sf0ZT3/K6gQVSN65dvkmB5953VrZdV5gzp/M27Hs7fLjd75z6nD96x+dAOzG36w/khKSZ98zQzjIdDHpJvCYPgnADN2kLNHd9NgkPUBgA63BjNNttLBGNk/9CRB4jYBNnb8moc15DdxUefpTvzUQPD3iBuEyuYk/6PceMD4RZ3P/wyc8bnwy/AfnPHK8CRAIcczX/PyQjGMCUG4KyOGVkdf/xZ+P46Cep3d8i1CDnI7qK/dt5+eubMrfYq0cL1szV3PgF54C8uPjn/+5nxu/kSHBoq6ztysjiPVXtQTBEK/ScFP0r/5haa6wn3F4Hy/r/CLwya1uefrw4z/+r8bXrvTqj5gbcyfXx0xfkhm+ESMpYE3xRB27qKes2i2Yoxve8N9d4wkqttZgqaPOa517klG+NbnH3e862kUgRHvsmksANOZqF1T/EuTzpJOkpf5xgal1AHxbQfLDNadXcMB9qzKfZ+nj9ZxHnfP74zGv/Ph6764BmJsr6qtu+YEAjvMpf0r+l7/wmXG9sob4NpB+GjvtOn9OrQ1HgSbUBKALUqcC0rm5Yqz4hP3Qy/EZ+y6JPvstgbz2aJIevpHhtTuHMj0QwGfs6+yrPqdLsp2pNTHnz2PZ2+d8uxt/k8TyzSxJ7qZ/VB3CftHFpJvAY/okADN0k7JEd9OrAYJuaPUmLrqNFjrZfLsg2Tx9IYBnQ+dmzjcB3Ci7J39T8EoOX7Ejq9ZxEyWQ0Ff1graP/e4NjWAG2/mNAZu8vubFJvoBtlNOPe2oJ6ngSRHl3BDRzzk3I9fTMRUsUM4xN1N/2sQToPq6w5S/hcv0sjnZa9bBHMjXU0v8i4/0GgQ3c77l8KdZ2MGTN82bbur1636HueZmT0CisqW5qk/SCTD8tYLOVwKf3O62vzUmFC976YvHBMRvyHNj7uTylFHzxhNOvv3idRLV42sFIhz7awD+7QJP7Ok7lfQuUefV5x4dzBWv+NT22D2XAMi3BGbqOwXzU78BgjXrgOsMG32fWPoGAHlcp0oauvXelcHSXNXr0b8BmPMnxz6vjJ1XxVjjeqLN2q0PMNaiQBOO5RuAqbkCfivDddl9M8D80I+kzf+aE9cKr+oRbDv1L5uxf7NH+OubYkq2U+cFlvzJOtnr3i4/Hus3AHXPCuFkoItJN4HH9EkAZugmZYnuplcDBN3Y/+Tc57UbJ1+TEihx8/JyZI8B1JteP54TPBFEaUMn8ORcN1Y2WZ6S1YCdr2S7vwKEXWz+3Q0CuEnwKoEHjIKx8LU1wRT28xRXwTFy/+CcR45fexO0Uk497ajnkyewlFP/4LN/b3jcYx991E0IP1F//svPm31SySfnlHPODzQJ1JE7ynjD63be/ZaMKX+LKlPMyV6zDoA5YC6YEy/nxknQg2zOFTTxiXzeoWYdoJc2BDn68TL41/oqq3jQqbKlueK1Gd7Ll6/4xol3gOee1Av3CXNIkIL/tJ7mxiy5/O6BMdOHvgrs+OaCp736VoFznuArqGRNe8KB3cjGP4yZ10YIFPSkmACYd57RxfkcdV59nMzVeI3+v9cs841vac+Y5hIA2stu+RvfENjVa5D23XvOa9ZBN2fIJ5nldS18cOWXPjeuOfmTIFbJI0E3c8e3OoxDMrCVYJ1vBlUGS3OFHfxw+KMfufoVKr4Voj2/Q5jzJ+cE/3yjod8XYBs/PtXDCPYw/YaFc+abPaXuhR0KNKEmAMA76T/+40eGK644dQxQn/a0/jcAU3MF2MweqnXoUMZ9g9/XkCTU+jWgW3521shmXlgnrBeVLflzzd4+hfzaJQBr/a21veYVrxAOEl1Mugk8pk8CMEM3KUusDfyo58er//7GNx7x1yEIjviHMdf/mZ8Z/0IGT9e5kSGb92yRz9fn1NNOATGfBAf0+Y2b32z85MmHB8zAzZu/jqG/1iC48RDge3DsIGvqaSQbLAEZGy434fqesv8OgoCOr+11k+CTMREIcM7Nut4geZLF0yuCT35EqPJ6U6rBDGPnHWF8QVBBoF+/dp/yN3PUvRqiG+ic7LXrgOSMueDJm5czDvzAq1zMJWvE/9IPetCHXvRjh88zN9ylJ53YpqDTy+fmCnkEhdiDXTe5ya+O30iob/W/U32iIJ5EANvnxiy5JLSMmTYEEwqECShe8uIXjn91Bn+w/kgm9OQP+bx+QB3XHcmqv/7EayM8meS1Ec3lmtcUoM5rHScBMPaiG7noIdj66pVfXEwAsNuvaXzCqxSsT+mDqcBuzTqYmjNswlf8IJfAkMBbOkgI2CtYu/iMBwe8xqNEUbAv/OIv/MJoN0E8CdjSXGEHQT3rjn709yRiyp8KKtnX+OaIhIT+JCq+fkkeGJOuHf4pVhdwVxSInnLKKUdBGXX8EPU2tzkyfM/3XOu7+8Rpw0/+5JHhR37kmk+kp+YK2HsZk19TDvsvvqkJ4FrmdE/Jpk/dA/V63JI/1+ztU/BE/9rXPu0a/ib5IgFY4++5/SiEg0wXk24Cj+mTAMzQTcom4SZOsFxv5oLNC3TugQUBsdc5S3IVUNVynppxE+6CBZ7e8A4lAWGtO14QDO32v1cK+i7dNKu/17JG9hzonArQkI3vp+rRSxsvw0dPffIfXuP9/kr349e1sLbm7DoWujHjI93I5/y9NBdL/uS60mtIgoCpBkCwm6DiWP01d00T+BIAE+x7+dp1gE38kLMLDKnjFZwpu5kXf82kY8rnS3MF3fqGNf5kHqdsox/9XTb7K4FtnWfWHeP0p89z/Nf/ejVeJh1Tc3W8YI79R7ubovPnEuw73QMWJb/uvznm/I1N/PahJqYhHHS6mHQTeEyfBGCGblJOJPXJYgjHyitf8bLxCelB/3GcJwBd/WGFIJ+n6Xw7thRMz8ETWr5djH+n8QBzt9B/U3N1LPBEnteyeGVL35gcVDo/roX++JhvdkmCd5OYhHAQ6GLSTeAxfRKAGbpJOZHwRGsv/1o/hDl4SkaA3dUdFHiSy6sw9fWtww5BHK/ubSLAwce82tPVhWMPSDc5V8cC+nmY1NUdJDo/roX+vIbEvbL71iyEg04Xk24Cj+mTAMzQTUoIIYQQQgj7RReTbgKP6ZMAzNBNSgghhBBCCPtFF5NuAo/pkwDM0E1KCCGEEEII+0UXk24Cj+mTAMzQTUoIIYQQQgj7RReTbgKP6ZMAzNBNSgghhBBCCPtFF5NuAo/pkwDM0E1KCCGEEEII+0UXk24Cj+mTAMzQTUoIIYQQQgj7RReTbgKP6ZMAzNBNSgghhBBCCPtFF5NuAo/pkwDM0E1KCCGEEEII+0UXk24Cj+mTAMzQTUoIIYQQQgj7RReTbgKP6ZMAzNBNSgghhBBCCPtFF5NuAo/pkwDM8A9/9812YkIIIYQQQtg0xJ5dTLoJPKZPAjDDP/7TP7WTE0IIIYQQwqYh9uxi0k3gMX0SgAWYiHwTEEIIIYQQ9gtizf0M/sFj+iQAIYQQQgghbDke0ycBCCGEEEIIYcvxmD4JQAghhBBCCFuOx/RJAEIIIYQQQthyPKZPAhBCCCGEEMKW4zF9EoAQQgghhBC2HI/pkwCEEEIIIYSw5XhMnwQghBBCCCGELcdj+iQAIYQQQgghbDke0ycBCCGEEEIIYcvxmD4JQAghhBBCCFuOx/RJAEIIIYQQQthyPKZPAhBCCCGEEMKW4zF9EoAQQgghhBC2HI/pkwCEEEIIIYSw5XhMnwQghBBCCCGELcdj+iQAIYQQQgghbDke0ycBCCEcSK781j8Mn//qN4fPXfU34QDDHDFX3RyGEEI4OHhMnwQghHDgIKDsgs1wcEkSEEIIBxuP6ZMAhBAOHHnyf/LBnHVzGUII4WDgMX0SgBDCgaMLMMPuGb67xe+VTt4S3VyGEEI4GHhMnwRggcc96SnDda5znaOgTHW3POM2x/Tk69JPfma401l325WMCy9+7zHrPch89e+/Pdz3gQ8aXnL+BW192H80B6y1rn6/6YLLsHu6wH4tnbwl6jyyv93wRjfe6LW8H/vD3J7KPi9d0l3vCX6dnOhrZxvAd/gQX3b1zl7uofuxLjvqeplaY4x3aj2tBbnI3/Z1d1jGuV94TJ8EYAHf/PeDpc2ru5lwfDIkAGtvhPhXSRWo37H4HZ1rbyDhmqydu45N+L4LLjs+c8XXRrq6cOwJwGeu/PrwyS9+5Rpyp+jm8lip62kT+0MFHbtJAPy6UDCpsmO5dk528B/3M3zS1a+lzvkc9R56kPyPbRe8/k0756yjOi7s3MT9nP4HKTDer3k4aOM82fCYPgnAAkkA9s7aDQD/JgE4WBzL5r0J33fBZeXVb3jzcNvf/p3hovd8oK2HJz71GcOLX/6qtm6ToANdXd2JRMH8P//zKcPFF582fPvbpx4V5Fc+8IFrDTe4wZHhG984dez/4cs/N9z/QQ8envqs565KtLq5PFbqetrE/lBBx14TgLVtDgP4LwnANNh6+q3P2PHPpvwFyEoCEJbwmD4JwAJzCQDl2qS02Cmjj77Kq3250HlaRB2fPB2YSgC8rdpTxsLXBaD67ubldkzd3GDKdo69HfpUBz422cR4qHvQQx/e2u7ypFdtAJlrfFn7+vi8D9RxONXH3rbWoQ+91En/81/0kvFT48NGldNHNlffcS492tBUJxvkUz5lR+fHOTtBNr3xwosm21R/alyys9bX/mLO99jhdT6flS64dC779BeGu9ztHsM7ZoJ/eMSjHjM89wUvbus6SCYY++VfuqqtnwId6OrqTiQK7Anof/iHjwznn3/aUQF/hSThetc7Mlx11dUJAJAEnHmXuw4Xvus9R8nuqPOota11tGYtOt160lpEltfX9VSvi7n1pmut2yPRob7SrfHspk0H/cDLsNvvCXPXd/UvLOnXWPmc2lckQzqrb+irOuC8lnmfpbnwvvTjPuLjnMP9VfXUcYnqN52rX50Tp45zbl1V3FbOkTWnawr6SL/GqDFwbfncaYwwN6/qj+/5VF31aWdvted1b3nb5DxUG3yesVU2UNfpkp0+LpVJpmxXPXOEnmO5B24LHtMnAViABTh1gWtRsXB88WjB8OkLXxeS6tWnLlZHbXwRcuwLWG38YuHYz91WlQn1d9s7mee++KU7djIWf5Ihm7y9ZLjtHdjW9VvyJZuE+tTx0n5qvKKbD8ms+gD5kikbaxvGgt2+ZpDlc0x7+U5y1L7a4POsMte5ZCfnskn+0WbpOmnv/lMf5HNOnddjo+RX6OP6odpUbah0waVD4H/7O545jrurF7tNAF7zprcMd7vnvYdPfuHKtn6Kg54ArKVLAPAFPsE3LrujzqPmWetoaS121PWk9errk0+/DvisT1rdjgrl1NOu1mFrvVZcTu3btZmi04su+Yf6ueu7G9eSfsqX9hU+p/bX6ls+L7n0svEYe+oT7dq+2lx1q97tm4N+HlSv8b/boPY+xz72ytx9cAlfS8Cx5ps58WtjCurdN/ge/RqT+xLZlLm9U/Oq/t4eaC95auO+nbKnm4fqa/WXDbRd8kG1AV2M2fXUcXPuciVDdsgu16s+Lncb8Jg+CcACLAhdmEILggWihd8toHoBUOf1wOL1zatSZQDH9aZAmRZ8J5PjujGLznZwmV4O1a7Ops72DvzY+a0r0wVbQQf1tOvOO5DfyZvS5T7sbAT6uM/UrvpAuqfqgbIpn3rfOTs5rzapTLajp9ZXu6Z81UEf+iKDc+zobpK1ndMFl85UAvDuD31sfFr9gz/4g8NZ97jXcJe733MnAfj0FV8dnvm8Px5+/hdvMNbf+a53H9tT99fv/9BwuzvccbjxL/3y8FM//dPDTW/+m8PNf/MWR70+RBvJRsa5L3rpKJM6dKALndQj6+IPXrbT94Mf//T4Ks2P/MiPjvKf8JSnHZVkvP4tbx9ueeurn2D9yk1+fXjVa98wfPYr3xjr+OSc8mr3ErzS82M/dmS47nVPG3nta691VMD/3/7bKcNDH3pk+N7vvdbwfd93reFmNzsytt/PBGBuLXbUdaK16X1UpjXardc5PeiodgmXJT1+P6gy1UZjnqP6x/vWMXkfXd+1f5Xh/QTlc/uKtxX0oZ529Kv3F+G2qWxuLqb0uj4v76j2LI0f3G9r2k+xpi9j01qp7fCBl0/5Qyz5njF5Xx+ntxWUy89d/w6fzzl7Ot+4PpW5DOrr2qzUMWEPeJuqG3vp43ZSpn60q/Wd/duAx/RJABbwxV6hXItZi8XbellXD3MXEHSLsFusXsaxNpxKt5jX2qZ2nbzOps72DvT6BdzZ05XVcVJPO9X5eQU7sbezbarOx9PZA5y7XslyO4XGTB/Oq73oqT4Frck1dnJebaplXX2VwSc2dvZUaOvyOO/6za39Lrh0/uqiS8ZgnFeBVPbxz395DI6f8dxzxx+uXnLpR4db/9ZtdxKAl77q1WOA/tHPfmn8ceuznv+C0U5/3WfqG4DLPvPF4cw7nzWc/5rXjQH5ez78seE2t7v9+JUy9ehAFzpJCp597gtGW7AJ+Q988MNGfehFP8nCn77i6uTifR/95JgwvOWdl4znfJ5+qzOGd33gw+P5G976jlH2Re/94Nj/BS99+Y5s6ucgwOf1n0996lrDT/3UkeG8845+Beh5zztt+IEfODImCrR9wAOODN///acdlQAw3oef8+hxTC67o85jXaNLa1FlTl1PWpv0Uxsv07Ffa2JKz9QaBb8HSLbGw+deH3wI5Gsv8LFW3wmX37VZ0k95N1Yfp9p1vpN8yrw9IJNrWv7wthXKL//SV9oxci59Xt4xdZ+aGj9UvzEO2bSksxvTnC4HH7vvfe4Fsrr5AeycsrGOaaqMY7dd8rq2Ahu9j+Z9zh75yeXJzxVdQ7SdGrtwO6VD9ji+njs7vayr7+zfBjymTwKwgC+iii8aLRZv62VTi2kuCIKuX3eReFlXP0dnO7htHHORqk21q9M5NeYKMn0T7OypZbR3feignnbdeYV+fqNaU+fj6WwEzl0vsrBzyQegTVYy6dPNo9bkGjs5rzbVMo7d/1BlCNpiY23v0Mf11XPh68vLoQsugcD+la95/XDH373L8KKXvfKoure/+/3jj4J52q6y7hUggnt0v+6v3ja251h1S68AEYDzTjx9fu8hD9+Rzae/AoQNBPX+GwUCaRIW+j7lmc/eaa8E4C/efOEoX+1IHDh+5KMfe9QYqCMBYLwqm0KB/ne+c+pw/esfnQDww+Cb3vTIGPSrrHsFCBgHCQ/JBwmM1zl1Huv6X1qLKnPq+uGTc/qpjZd19UvMrUVdbxxLtl8X1f6uzRzoftg5jxr7ua4113f1b633foLyuX1Fx96GPj5GkG5PgKrNsmVqLmp70embgr4+d0vjB9le2zBu34Mr6Jq7D66h+rnqquNxaEufWg7dmGrZ3LzO9XedbvOcPZ1vaD83r7R1+zrczjn/VzurXi/rxjEn+2TGY/okAAv4Iqr4AtJi8ba1DFl1kS0t+G4Rdn28jA1kN+8ldrYDMjU+6tz2aldnU2d7x5TsKV+io9403NbuvNLpWKpzvVNtOHe9c3o6fPNf8ukaOzmvNtWyTg/HlFGnMq+r/neq72m3qVeAPva5Lw1PeOrTx2D0TW9751F1XfDuCQBBOfW3uNWtx3Keyt/qNrcd7ZqTAQTiJBw3+fWbDve4z/2GRz3+iaOcqQRgHPOtzhif3nNOssErRXc6665jXxIYb89Tf4L66//vPzv+uPnNF1086sQO7NGTMmfNKzkK7LsEoCubSgDw3d3vdZ/hIY84Z3j/Ry8/qs6p81jX0dJaVJlT1wmfnPu6r2XdXjvH1HqXXJXXc6h9uzZz0J4EgPZ+XdUxCb/+1thToZx62qnM5bh870M97VQmsE++7vrOzcXUGDmf0ldBFzo1ns4nlTkfVXmOjxXW6KrQX+Pt/Drna+rq3IluTF7G8dy8dv29XmXV/il7Ot/MtV9TD9XObn1V3d168rJOb9WzLXhMnwRgAV/sFV9AWnDetpaxkOrTEhbY3ILv5HaLtZZht2zjnE9+1a5zRzo627T4q3zsIQiZqofO9g7qq621n5fVetnqMjp7KrTxMdNXP5CqdeAbTWcj1LFAJ0s/rMI+flTmbWU3x/jYN7cqf8nOrk8tk/98LPTX/NLG1w665hJMH4PKkOc2SCdt1cbpgkuHwJrXefw1mKVvAB7/5KeNT94JrDnvfkcwlQDwPj9P6Xn1R2UuuyYA/g0AT+x5Xekv3/7XO/Xenif9tMEuXh/imwCSBf7qDn968+yHPWJ4wXmv2Om7G+aC/d18A3DOY58w/ilQL+uo81jneWktqsyp64l2tPf1WsuYU64LX18cT603YI0urVvpqXLQq75TbeagP2vEdQEylq7vaiPnvjdXKJ/bV2S/fKk5VD39XbbbU+cblubCfeft65jcXof2XQIg+zvcTo6n9mDv09WhY87X/gNaqP1lR/X1lDyNzX1RfwTsfb1saV67/sj1vZ46xisZc/Z089C1R6/8j3xsoEz1lWonuur6QqfG1Z3XMsl0W7Fxbm5PVjymTwKwAIvAF4XjC0gL29t2ZbqAQIt46mmDUB/dCDivF0ktk27pAtqovaO2+rNXal/HrQsC6p/I6mxSOe3rTczRxSeda3ypi54+9GWjpZ523p5632wqsk9MzRW4nM5G4Nzt8PJOltsJ7kP5lLF19WLOTuhsqmU+B6A/JYds6n3u5+YSfExui8sAye7ogkunC971G4AXnnf+GEx/5FOfH9/bV5BOEMvrNATZvEr0tO8GtDe/xelHyeC3BXwr8N6PfHynDHj//jdOv+Xwtkvet3NOX08AsIfAH93Pe+GfDr99xzuNvx3glSG+seCHvLSlze9+95pXAoCvqVdyQXu+KdDvC3jliXrZxCs4XH9rfgOgwL5LAIDfAPz4jx8Zrrji1DEheNrTrvkbAH0Lwf9dcNkddR61rjTXa9Zipa4nndOvtvGyel3M6RD0n+sjPXXtapxun8sBvxYq2s+6a6KOo8pZunYrlNN+bl+Z21+9Dqo98qHLrGOofnW/U6cxqA06pvyHPfUeKn1Te5V8Rrs6X9UXFexQ23ofrNRxd7Jli9r4Gu6YstfHpLa1bG5eu/7gc6N5cBvn/Kfx+zxIj9p7He29f0dnp48LNCbVY+9SWbVr6To6WfGYPglA2LmAlzaecHxZsxluK11w6XQJgMp/+VdvMtzo3//S+AoOgbOCdP1w91//m58Zbxa8dnHGbW83vO+yT+z0Jzl4zBOfNLbhL/3QhvfyeRL/7D9+4XeD5Z8Yy0k0+CGvnoqj4wFnP2RMCpCNDSQTkvuKP3/d+HoPfUkw+P0AT/aRi04CCep+7aY3Gz+RS7ls8nrk8y4+dkn+FDzRv/a1TxtOOeWUozj77Kuf+vPD39vc5sjwPd9zre/e9E4bfvInjww/8iOb+ytAYR2s46UHQZviMO8rIayF66O+MrUNeEyfBCAkATigJAGY5tJPfHp8wk7AX+t4Av+Jz1+x86pPhSfnCq6nIOitrwEB/eaevKNTf2Wo1lFG3ZRd1PMq0FRg39VzcyLp0FMrodeY/Gn/HP/1v16Nl0kHNt/1u/I8oZmim8swj/bfqSfcmyYJQAjLcD36NwTbgsf0SQBCEoADShKAef7kJS8bfwcw96PUw44H9LuF/iQ7fCPy6Cf84WLSBN1chmn0OsnxCv4hCUAIR8O1wDXhD1GO5zV5PPGYPglACOHAwYbcBZgVnk53T+rD1XSB/Vroz28lSLCmvpVwElCGEMLBxmP6JAAhhAPHld/6hzbIDAcX5qybyxBCCAcDj+mTAIQQDiQElGu/CQgnDuYowX8IIRx8PKZPAhBCCCGEEMKW4zF9EoAQwoGmez99LZ28EEII4TDiMX0SgBDCgaYL7NfSyQshhBAOIx7TJwEIIRxousB+LZ28EEII4TDiMX0SgBDCgaYL7NfSyQshhBAOIx7TJwEIIRxousB+LZ28EEII4TDiMX0SgH2Gf9V/wxvd+Lj9l139Z8kObNB/vOO/QXb9ARnH+z9FYtt+/tvtEzGm/YY53E+fHZT/GEogf955pw3Xv/6R4TvfOXXn/JRTTrkGZ599JAlACCGE0OAxfRKAPULQRfA1F0ifaAh6a+KxJgE4Eex3ArCN7DYBwMe7+ffmBz0B8HO46qpTh+te9+jyTl4IIYRwGPGYPgnAHkkCsFmSAOyeJABHJwDAOeX6JqCTF0IIIRxGPKZPArAAQZC/RsO5XutRGceUKWC64PVvGssJtmrArUD3jRdetNO/BnFKLlT//Be9ZDyXjLXMJQDodx0uuwbj1KldbSsY/+m3PmP8VJnGIRuqHLfNdXZJimR5WZ2HOlZnU2OC6lfOp2RVvUC9yjQuzbHWkto6brPWmcuWLG+DL2s5yP7qBx8XdZoH+bnaN6XTZagOOF9T53QB/1QCUOs6eSGEEMJhxGP6JAAz1ACQz0suvWw8VuDTBTT+lLVLALyN6hV4Sa7LUJ+pAGmKGqiC9HkgRxsP3DjHBmyZ84Eju10fbe901t125J774pfuHFe5rlM2+nirv2v/ro+zqTGhhzHRR/U+V5TjW59v6VUb6lQmGXOBP9DH22i8Lps6kgL1wa66jvwc5uYEnaw711HtmNNZ5fEpPyPH11xt63QB/1wCcPHFpw3Xu96R8ZWgKiuEEEI4rHhMnwRgBoIRD2AdBW4EMiqrwREoUFM7gjAPfFSmoKkGRtDpWgMyPXgF2ePlnY0K+uZ8UPF+Oq8Bp6hj8r7Vnq59N7Y5fS7/WMaEfp1zXOdKfWRH7Q8uAzieshvUBlle7nK8fKre7eqQHvpxzmddz1O2CNc55eeqR3RzCl3Av5QA8FsAPqusEEII4bDiMX0SgBkUqPAUtAYmXRDDcQ0IazCLHAVIauNlXX2naw1dQFXt6crcBunufFAh4NNT3M5mlyU6nZ2NLq+TIyRD/cR+jMlleh/qVd618XrJnLOj8we4HC+b8gc6agIg/d5HevhEL/q9T11XUzpdtrfXeLyP6BKULuDPNwAhhBDC7vCYPgnAChSw+NNQBTcKlqALmGrw1gWEXjYXpLmuNWwiAaht6hNhx+2kjT/95Zy+sqeOyXV2Nnp7HdexzbHXMQF+7MaEzC5gpa10dXq9fs1Y0IfeaqPL4RxbGI/sq/XV3qU54dPlCV9XSzqBOvezzqVniS7gn0sA+AGw6jp5IYQQwmHEY/okALvAA6gaLEEXMNVgBxk1QPKyNTLW4oGa6GStsVG4DzpUz6frrv2q/6iXzloH1UZkzdlRcfld3ZwsdGpM3o7yOlfg7WhT9XZjpUz1lak2LgcbapJQdbtd3bn0yMfd+LzNGp2O9ElGHc8UXcA/lQDoT4FSz3knL4QQQjiMeEyfBGAGghkFQ0DwooCpC2K6gInjpeDay9Te5aKT1yMkg4Br6geTDv1qkFXt6crcHsq8rfugA1kEhWfe5a7XCAzdN+jwMblOztFRz6sPeKLstnHs584mxoTPvR+ykOl969xUO3UuWySjzlOFevffkhzNqeolw8+xaW5O+Kyv5biMJZ30lyxwP1OubwRUz4+J/Vx0AX+XAPDqz7WvfdpR/wwMeWuulRBCCGHb8Zg+CcAMCrIIgmogBAqQFMhw7gEVKChSIFSDsK5MfaRXf7JTMtYGNdir4ExUe7oyt2fJBx20qWNUueTUP226Wx8Ax6qHTqfYrzFxTrlk1aAW0K162mos9FX/Ok8dc3Ko93Hhu/pnQt2n0jc3J3xKjtpwjhzql3Qu+dnH09WLLuDnvP4XYJ788w2Agv8kACGEEMK/4DF9EoCTAAKu7h3wcPwgOF0TpIfN4wH9bunkhRBCCIcRj+mTAJwETD19DscHnoR3T/bD8aEL7NfSyQshhBAOIx7TJwE4YNRXX+ZejQj7i15hSfB/YukC+7V08kIIIYTDiMf0SQBCCAeaLrBfSycvhBBCOIx4TJ8EIIQQQgghhC3HY/okACGEEEIIIWw5HtMnAQghhONA94rSGjpZIYQQwm7xmD4JQAghHAe64H4NnawQQghht3hMnwQghBCOA11wv4ZOVgghhLBbPKZPAhBCCMeBLrhfQycrhBBC2C0e0ycBCCGE40AX3K+hkxVCCCHsFo/pkwAswD/hmvpHUPyH2IPyH3pfcv4FB+q/BR80e7YB/WMyfNvVbxrWN/+Ujn9O19VvCq6x/RzTQVmLBPM3v/mR4eyzj+wE95yfcsopR3Hta582XHzxaYsJgP/TwOO1JnbDfq6fuWtBdf7PFOv87/ea2ySaZ/zZ1Z+sMB/My0GYh/1YD8jbz38iqXWxX/8otF5jfOo6Okhzt5b9no+TBY/pkwAswMXV3UBgLwnAJpKGToZfnN52LWwmdzrrbhu7OI7VnnB8YZ6YLw8yOD5oCUBn5xIHZS1OJQB+Duedd9qYCKi8kyU/rPXbftPtH/u5fhj3mXe5azuv2IAtrpc15m33I+DbBN36ZhxJAPaXg7AeurnfLYyBsXR1xwqydQ0dhLnDT7Knqw89HtMnAViAi+npz3n+uAHXxb6XBbiJRdvJ8IvT266lu4EfC8dqTzi+ME/Ml998OE4CsDm6gL9LAIBvAK573au/Cehk7cUP+0m3f+zX+mHsDzvnUaP8bs/qEoBqXxKAE4/GehDmIQnAMr6PHoS5w0+yp6sPPR7TJwFYQBsDi61+fdQtQOr962evR5bKwS9Ur5u7aU7J0MX5xgsv2qmrtmGv99XFW8s7/d1NFd2uw9ussYdjyrp63fTo722wVf0dyqvdkq8+kilZtT3jkT8F46hlQvKf/6KXjJ++PugzpQeQq3rwcU31lf207cbr9ZzXtaj5rtR2God08Kn6qhOWxlrx9hyD24Y+1YPqpuysMr0c6M/8+FqsdlbZyFOdZKiuynfdc+PvAv6pBMDrqhzNc7VH42Q9Ui6/1fbVxtpPfb1fHbNT50vy92v9YAcJANcffetcUd8lALKFc/rIP2uoY5ScDm+Lzgte/6bRv9rbpsBuX4PyuWxf2gv3amNtW+1wP2nPU53P19x+WGXif7VHvq+BpXmpNnAs3zIOzbP0uY3C9XHs62HK351dLgfcj7IFeUtjnZp7yepwmdUnLru2rza6Lm8jP6g98qijjeuWrA4fq+uRbNXVOZLvZF9tU/3OOeXdOqsyJUPjmYtRthGP6ZMALMAC0iLnuC4oXzBarH7h0r62qYusyvULTWVOJ4M+vuB1gfkFeu6LX7qz+LHx9FufcdQF6U/IKuhCJ7r93C8ot2vJHvV3+9wPau/+pK3rc9Re9gH9FAhwjCyvr/Jcv7epZUJj6Obc+yBDftG566XvJZdettjXx9iN1/2PzDq/tb2jsVR5vimqjdu3NNYKbb1eOuinNnPrtLOTtvTReedvX4sq8zkgSJvyFZ/elrlS292M34P6GuTr3KGc+ioHOj9onHyqDDuX1n3tR1vOfV3Xeasgq+4fkqN+stn9tRv/Cdq7rT4WwIaaAFDm68hlLFF1VFm1rfuNPvRdGpOQj5CjMslwudjuNu3GxlrHp/afWifdsodyrhWOwedPttf9kGNfg7RDhtqzRlTHZ+3vqI/PndtA/zVrTvXeRzI7f6tMbTq5dZx8ak7Ufm6saqP6JdTefcGx21Sp9Zy7Tdiq67jOPW3lt053pfpZ+2b1EyBHvuKcuqV5pI3Lh93s4xq7ZKr93Ji2AY/pkwAswOLQgugWVF2gdfHQx2+MddFSXm9WtU+lyoB6AamsthOyV2NZ0gn4QhcL7ehPH8lwXy3Z043BfQH1Ylyy0e0D+uq81kH1QdfGZVTU3+t9DCpzu+fGsKavr79qL8fylx+LNWORbOC43owp07wu2asyQVkXlHS2impXZ2el2oXsuhY5dl9W3CbaoBPd3ma34yeo320CcP3rHxm+8PW/vYaszg/dOBlHnfPal34+PtX7nHRjdbpxI3+T66er57zOY5Wr8bgf5tac0/kZuv6d34C+7t85On0ao8v1ce/GRuj8Lro+nLvvHB+b7Khtp+zo2qusaw+dL3081HdrTn0oX9qDOn8D55KDTK3j2kbj8TZzY6Vdd76E2rudrr+j2sQ3aeA2a4zyg+zx8Xe6naU1Vm2UPOnic24eu/MO9MhG2vucUV7ncMl/24DH9EkAFvAFBL5ofAHWi0V0C7suYrLQjipLVBmAXUtlsqXTgf1+Y+1wvch2KGMjUf+qu5Zx7HYIXfSdP6d8LCjX3Ph4NG501j4+vxzXi5+6qQ2hk4sN3biAOrfRZa3pW8fvsrrxdnLqnAj1kWxw+V0Zx50OcDldXy+v11hnv+R1dgLjZu2ovetBdh13Jwc7XKdsQg7yKPP2HHt7p9oHBPX7/Q2Aj1Nt3LfCfT7Vz2Xj36kbOlBe9w/6b3L9qL/bCozFr9G6FqD6oK65KXzuK67T21bbO5un6HzfyfWy3dgI0kG9+8DLK24/Ors69XeZUz6Brn1X5lDuuoXuG+hBH3rVx8u6evD1MGUz5xorbXU81cZ1rRmrzqveKTqZHHdzLrBF1ylwz+bJvF6po7/kVT9QrrF1uh1v6+Vz/XwO3Heqr2WcdzqQ42tjSmZn45Td24TH9EkAFvBFCb6AfQH6heX91Z62nNdFWxflGqoMWFrMuilqLNWuKfsdtdGGQVvZQhl1ay+urt5Bjm8+U2UOsqpdlAHHXT+fX47B66mrZUJy1R/QMTefbldXN9e3jp9zzZnL7exaovNRZ4+XdfVzuI1e7nOwtE47O2mrAEAyltaiy6Ed4/B5dpuEbNvr+Anq1yYA3/nOqePTf+o6WVN+8HF2bYSPb02/6tMK5VqLKuv842Vd/RLY7Td34XKWbIVufjuQgezOhxXaVh8Afd2/c3S+72zwst3Y6Kifrh3pnvMLfqMPfTn3sXX9adf5BLr2SzZQLn1dPfa4fbXM7fV+vh7kl+pP70tb+nh9beN6u3HVMp1XvVN0MqfscjRWoTniHu76qx9oSz16O90O5Z0dc2P0OXDfqb6WcS57OJe9rndOpo9H7buybcNj+iQAC/gCEmxmfI2oHzuxWLSwa1sWm2+AddFKVrdBTlFlwNJi5tgvDNmLLM6rnR3qw3t2yOKcfl6mtkv21IuxQjn1sm+qrIIOjZVPlXPu9kH1gfp5m66fUH/XszSfc/VLfbvxY5vsruVTdndUXwDHdY68bMneSte++rDOQbVr6RyQz1qW3cikDW3Vhjqtd/rWevlV547quvHM0QX8UwkAfwqUvwJ01VWntrK6cXfj7NZB7Vv7dbKrTyvuT5XRf5Prp9MBslfztWQrzM2vU2XPMdW2+neOzveMo173XrYbGzvopzXSrRfR+R/9Gltnx5xtu20Pvn7W1ntZt+aqTvet2gD18s2UHVNt1oxV51XvFJ1M1z+F2vDXDeUHzrmHI09jqn6gH/Xo7XQ7U/4BdFUb69i7/rWMc9nTnQN6ZGPt7+NR+65s2/CYPgnAAr6AajlPnuoC9CeRaueLvS5CtXE5fJJcTC3CTsbSYu4WP/ZTzjnl1Ot8CvXzMckX3nfJHuDY5WCDfszZ2bPGRnzP3wevmzzHzM2cjdT5/HFex+poDMjx8qX5rPXo4+nLUt9u/BpvDXi68XLs5w7y61ho62umK1saqyMd7k/04WPprfJVL7s7O5EnmarvZEz1wVe+XtDl7f2HZVU/MtaOvwv4uwSAc/9nYFUOyA75BbDJbYFuHdR29byTjZy5oJryujY53uT66cbX1S3ZCuilD8e0q4Gtg811X9eaqONGpo+PNvR1u33tVWhDW9kGVUdXNmejzgVtXZbbI3u9Xu2rbbJBY+tsV3+3jXbY1rWfklHr3X/YofsGutz/tazrjy6/3jUul4Ptvkd0cmqbTu/cWLs2yJpay117jimjzts6yGQ+fHzYig+qX2lDHecuu9PtqN7lcY9Dt/RLLlS73XdqU8vqOXLn9vHavvNVV7ZteEyfBGABFnC3yHVx1MWiRSf8AgBdGF7nZQI53s/pZKxZzLSVfG6y1Lke2lNXLzxn6uKtfdbYIx/KJr9JqM71dGUV+ab6HWS79FX7wH3EMTZ3skC6aNOVSw5Um12Pj3uubzf+ufHSzuV043XUXvZwXue1lq0Zq1Pby7/uQ/dNt06rnfKLyggu/KapdYcsya2+oI3q0O82SZ9wW3cz/i7g57z+J2DKVA+dLOl1XRqnjwuW1n3t18lGxlJQLR9qfdB/U+tH7dz3Dvbp5r/GVp/f3YxN0J9y+jCeOg9qh836c5Lyr9aX2leQRd+6vl3Hkl6Y0oFMXw+1nfQLt937op9rTfVzc1Rl0qZrPydDaOySJT9Rhx7qfC5rmXS4LfhAOiWfsbke93Unx+0A17t2rPKTZHFOG9qqjej6u2+83FE/n3fNq49RslSGPNnS6a6ojfwjX1Dn6wgkV33dd1NlLl9jwR7JpMzntfb38XA+VbZteEyfBCBsFdoUfCML4SDgQf1u6GSFzcFe4cHQpiGo2E/5YbPUwPdEwtpRABvCJvCYPglA2CrYLOuTgxAOAl1wv4ZOVtgc7Bn7Fex1T1ZPNNf7V/9q5ynpQebBD39ka/9+c5ASAH9PP4RN4DF9EoCwFbBZc9NI8B8OKl1wv4ZOVjiYkEx4EFtfCwkHn4OUAISwaTymTwIQQgjHgS64X0MnK4QQQtgtHtMnAQghhBBCCGHL8Zg+CUAIIYQQQghbjsf0SQBCCCGEEELYcjymTwIQDj3de9dr6eSFEEIIJwPdfW0Nnaxw8PGYPglAOPR0m9taOnkhhBDCyUB3X1tDJyscfDymTwIQDj3d5raWTl4IIYRwMtDd19bQyQoHH4/pkwCEQ0+3ua2lkxdCCCGcDHT3tTV0ssLBx2P6JADh0NNtbmvp5IUQQggnA919bQ2drHDw8Zg+CcAMX/37bw/3feCDxv/u2NVvAv7b4EH577X6D4iPe9JT2vq9gv/wI/7s6nfL3H9qpEy65uaP/855p7PuNspiMzvvvNOG61//yPCd75y6c37KKadcg7PPPrLnTVD/rXjpP0xiG/9BdE3bg4p8360lxpT/2Ly/aA3N7V0nch6O556wKTZt84nC976u/mQg872epfm++OLThutd78hw1VVX3/s4v/a1r3n/u/nN937vq8zdmw8ivldW29fstQcJj+mTAMxwPBbptgVDjKdumpveSOc2f9c/N3++KbKZdQmAnwMb5HWve3R5lTuFbFkK6ufGdqLRGNbaRru6tncrI2yGzu/d/OwHyOda45pT2fHcEzbFpm3eC9hwrA9okgCs47DMd5cA+Dlwv+O+x/1P5Z2stWg/Ynxd/UHD98qTzfaKx/RJAGY4HhN9vG7CxwvGUzfNTW+kc5u/65+bv70kAKCNUN8EVLlTyAdLNy3sqcHSQUH+nLPf6fzfrY+w/3Rzx/Hx2Hu6NX0894RNsWmb9wI2JAHIfO+GTSQAgm8B9E1AJ2st2o8YX1d/0PC98mSzveIxfRKAGXyiuQh5eguaeC6s0299xjWCNdrSRpvUGy+8aJRT+4MWFp967UMLrcpUf69fstHbqI5jylRf26nvWtuE6wfOKUcecvGD6qoNa20E+RW7ah1l6lvH4/imyGa2NgHwuv/4H6/Vytd4Zb908Tllt9rJz+C+rr51GfLHBa9/0/gJH7r8s0eVuTzskxzNkUCu6kBjq7ZxTJn37UCe9Go+3Pa5cVU/AvW1zFGf57/oJTsyKZOPOK+217HJJ1PrZ8oG6fAx1DHrXLqqHPeH/Ka6jqn2bsvU3FGnNqrvdC7p8HVX+yJbfb2/5mnTe0Lda+V3jdXtk3zqVM+nfCE/qf2x2tzpqDYtrUWVg9blnM4qk0/maykBkD8ls9opX+g6q9cIoLfeH5GhvZDzNT7tkH2Z72Of790kAF5X5TBOt0V2akze5ovf+Nb4yZh8f6nrqPrH69fMTwf91B6wiXI+vdx1Uae507hUr7XocpbmXTKki+uIc8nYTzymTwIwg0+STy6TysKsCwGYZG1wWhhqr3rK1Ad5yEcO8iTTLxqO/Zy+tf2UjV1/NgT66VxI1m5sq9BH7VWGPOSoX/VB1QvVZkf9NV7H9XdyBb7RpsjGtpsEwDdBZPt4pVO2+fmc3YI2foNUf/cFdcyv5EgucNyVSY7PQ5UD5774pTsyqPcbeB3bGrwPcEzZmnFV34LLUJlDH8aoOac95/V6cBlcD6qT3+ZsoL/kO7UvaJwqo6+P2a/FWtfpdubaV1uqHcDx0vW9RofWmNpUqPM1DcjZjz3B55m+sk31Pn7aaQ+ovqCesirvWGxe4++5tQjI9vZLOpHl15Tayy/q49Q+gHzvwzljcb0V5KxJAOZ8OoXaZb6Pfb53kwBQRh1tqhzk+9xqPBo/ZRqP7MI/srX6n09fP9U/yNrt2qHOfYHsSy69bDyeu/ehU/3qHFS7+Jyb93oOGotk7Cce0ycBmKGbqDr5fGqiOWcCdT61IL0P7X3RS4YWG+XatFTPsS60ORu1mKirNnSon9pO2SbbVeZ09cjzi05latf16cYtKPMLznFZwHE3dpfPxrbbBIB3IflEjm8U1W50a27m7Ba00dxyTtvqO+jk+jg7XZ2subUh/0lGPV8L7RkTqG9nC/i4OK7rgn61zKl9ZLOPsc5RxX1S55c+Pj9O5/Pqsyl/dzbN6VpqX22pdgDHx7L3SEc3Hsf7qIw+df4p09xhh88jdPaIzhaVacz4XmsLaKvzzhd17RyrzZ2Oro9T14vbDEs665hrvZeLro98gT7OO19U0LMmAeh8WvVXaJ/5vrrMddYx13ovF7tNALj3cX+scqr/ZKvmW/WU69htrf2rL8D9wfFu1g7tfO3N4bZyzqd0VTsp83XH59y8uyzVV337icf0SQBmqBPdlTHJ2uTqJNaFIZYWg5dxTGbYQd0aGyWj6ql0/eZsU5lDvcamMuTNlXFcxwb1IhLoxgZ01TrXX8fjIFebIhvbXr8BqDr41AZUfTFnt6CNb1LuJ2/nsju5XVm1B+omq/H4PEiG6lzmGtTPda8ZV9emG4NT+/DJudvsc68y/OBjlk/UX+d8zt1gqs+rfj6RTzvXr/IOl7e2fbWl8wPHnR0q47iTD9R14+2gXb3xdnPrZRx3enezJ9QyPjW2apPXqT/49XGsNnc6urKptQgc+/qb0/mej3x8tM37Q7f+hdZJ7QNLvqigZ00CMOdT2jEWjUvlyPG5lWwvc99WvZ3f4bDNN+w2AaCONp0st5dPxqtP9GMfn/iv2uplOu7GSrn8r2PXX8vE1JyLTid9qPO+aifbKaOuayvZXtbZKJmSsZ94TJ8EYIY60VNlWuD1QqsLQ3CuBeALw+tV1tU7a20EzlnUvqE4td+SbSpzqNfYVIa8ubKufg7Zia5aV/UzVo3H8bliY9tNAsAPgFWHLOSjx+3SsW8mztQcYE+9QXZtfZz0YU7cH11Z9Q24f9DJjUTnPp7ufDegx8exZly0qfZ2Y3Bqn85mn3v5yW1xnwB9KetkOZ3Pp/og39cB9XPXVWWpfbWls6OT4WW71TEF7XxNQze3XtbVz9HZUsuQ9bBzHjXaQZnLnxqrr4VjtbnT4WWyd24tcuz1czopo07jF77+vRym+sCSLyroOdYEQGUV+crtrGX0z3zPzzfsJgHgvqi/BNTJki4+sQWdGoPPgWz1sXpZV1/pfNGVCddf67B37t7n81Zt0zx2bTmvZfTzOYWqbz/xmD4JwAx1oqfKmDRduD6xdWEIb7e0WFiYdRN11tookFlvxqL2W7JNZQ71yECWypA3V7YkswP/1YsIkOvlnW5wO7WxrUkA2Pj0FSjnyMKX+BSZ3HCqLsH4GCftunqo8zPlGx9nJ7cr47j6AhnI4rj6jna0l4x6vhuQ67KRsTSuzt6p+Zyq72zWfKG70+E+AdpJhvqpzul0dfPgdZprmLvOK0vtq97ONo7rHHjZbnVM4eNUWTePXtbZNkdnS1eGDqhz3OmrPjtWm7t6L+O4yq92ynadL+mkrbeHvfRZ44sK8uu81zW15FOVVZDNGGTPVBmy5DM+Vd75YM0YvayT4XT1XsZxlV/tlO06X9LZzd1Sn7UJAPdC7olzfwEPHcw5v214+nOeP5Yx19wX+aGrxiZf+1hrWTcWh3Zz8+Ntoa49h36uS7bgO87dh9VOyqjr2kqel3X1VcZ+4jF9EoAZ6kRPlTF5LHoWl0+gJtUnuy7CpcXCOQvTFzWfXEx8LtnobambuwiqrDW2Vbp65Ln9tUx6/QKkPz/K0XkFPTxB5dPL9PWryjj2zN7L1JfNbE0CwMbIP0jxfwYmmdh+5l3uepSeCmPCN25zhTZ+0+x8Q53PYSe3K+O4zgNyp+abcvexbPExclxldqDHx7BmXHz6POl8Tl+1R3rcD8jBx4yz6qQdY/YxAnYyv25vB/Wun3P5kLK5a7H2re0rc+3r/FNGWx8XdT7fXdludEzRtevWjZcBx+hXPXKm9oROR1eGr5nHugfSxr+RgWrjsdqMDvdtLavrQTahQ+2rDWt0+p4on1Q7HNr6dQdrfFGptunc7enkrJGtcbiNXRl6Mt/z870mAdCDL/9nYJ0swDYfh2x2u1TmY61ltK3rkGOdV99MlTnY5vXo4EfAyHQfIYcxSJfXVzvl464t57VM7dUf5DPJ2E88pk8CMEOd6KkyqAsLNNFkw3wywXWSlxYL59Kp/i5jjY1aXOAXYaX2W2NbxW1FL2XIo4w6tatl8tUaO4U2iKU+VTbIf8Bm1iUA9T8h6qtPbYC+CSJvyWbZ4bortKlPzdyn3Tg7uV0Zx3UemCNfO75WCPRoX2W4Dd3cdiBX60EsjQuQr3ra6s/+Temr9kiHjwEdSgDURzpkp/sE6L80vyC/S57slX73b5VX/QFud2Wu/dT800Z6OaeN/KA2XrZbHVPIx5Jd50ltvEzypXfO/50tXZnGU9eixs1eLX2yVW2O1WbpcJm1TH6Cbi26fJXP6QR0qI52nPv676A/ctRvadxTuBw+pVv2dXLWyNaYkTdXhgxkZb6n57tLAOp/Auac8u7eV0FftYlxud80Lz7WrszHAi6Ddn4+VVbBFslzO7283vv41LxVOzUfXVvOuzL1kb56n9hPPKZPArAh6oULdWGEg4lvarulkxe2D67hpRtLOPjo5l335HqDDttB5nuZ7r62hk5W2Busw/rgb7/wmD4JwAZgM6kZLyQBODnoNre1dPLCdqHruCb44eSDOewCvwSE20nme5nuvraGTlbYG/Ubkv3EY/okAMcAAT+Bfxf8gwKHJAAHm25zW0snL2wHenrIV7QJ/k9u2IOZx6mgLwHhdpH5Xk93X1tDJysso7hQr/8ACUDXdj/wmD4JQDj0dJvbWjp5IYQQwslAd19bQycrHHw8pk8CEEIIIYQQwpbjMX0SgBBCCCGEELYcj+mTAIQQQgghhLDleEyfBCCEEEIIIYQtx2P6JAAhhBBCCCFsOR7TJwEIIYQQQghhy/GYPglACCGEEEIIW47H9EkAdon+OdB+/WMg5E79YzH9c5OpfyAx9W/PQwghhBDC4cZj+iQACxBM+79o3s8EANkPO+dRw+m3PqOVP2WLkgCdJwEIIYQQQgiOx/RJABY4ngkAT/1JAN544UVH6RTVFvW501l3G/+9dBKAEEIIIYTQ4TF9EoAZeLJeX7fxBMDra0JAYM6rPFP1HbQBgvlbnnGbawTyUwkA3xjwmQQghBBCCCF0eEyfBGCBGnQryCaoV6DNp7+370E551MBvUMbnuSrD8mFXu0R1RaVITvfAIQQQgghhCk8pk8CsEANuhVke3CuMj3lp64+8ee8BvRO1eOB/VQbJRbSJTuSAIQQQgghBMdj+iQAC0wlAB7ge5mO9eqP43IqNWnovjXguMr0eulOAhBCCCGEEByP6ZMALLDXBMDrl1CwX4N78G8Nqi0V6U4CEEIIIYQQHI/pkwAssNsEgHOC9rnXfSpTgX39LUESgBBCCCGEsBc8pk8CsADBtL+LvyYBIGDnR8EeiHPcBeadvKk6+nNOeW0Lai899JtrH0IIIYQQDgce0ycBWEBBtV7HqUG5t/EygnB/lWcqEK9P+SsexCcBCCGEEEIIe8Fj+iQAIYQQQgghbDke0ycBCCGEEEIIYcvxmD4JQAghhBBCCFuOx/RJAEIIIYQQQthyPKZPAhBCCCGEEMKW4zF9EoAQQgghhBC2HI/ptz4BCCGEEEII4bDjMX0SgBBCCCGEELYcj+mTAIQQQgghhLDleEyfBCCEEEIIIYQtx2P6JAAhhBBCCCFsOR7TJwEIIYQQQghhy/GYPglACCGEEEIIW47H9EkAQgghhBBC2HI8pk8CEEIIIYQQwpbjMX0SgBBCCCGEELYcj+mTAIQQQgghhLDleEyfBCCEEEIIIYQtx2P6JAAhhBBCCCFsOR7TJwEIIYQQQghhy/GYPglACCGEEEIIW47H9EkAQgghhBBC2HI8pk8CEEIIIYQQwpbjMX0SgBBCCCGEELYcj+mTAIQQQgghhLDleEyfBCCEEEIIIYQtx2P6JAAhhBBCCCFsOR7T7yoBCCGEEEIIIZzcJAEIIYQQQgjhEJEEIIQQQgghhENEEoAQQgghhBAOEUkAQgghhBBCOEQkAQghhBBCCOHQ8H8P/w/KWNKlEX473QAAAABJRU5ErkJggg==)\n", 43 | "3. That's it! RUN ALL and paste the link to the problem!" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": null, 49 | "id": "ZJQE2scYnrQ9", 50 | "metadata": { 51 | "id": "ZJQE2scYnrQ9" 52 | }, 53 | "outputs": [], 54 | "source": [ 55 | "# Set your Notion API key\n", 56 | "api_key = \"your_secret_key_here\"\n", 57 | "# Set the database ID\n", 58 | "database_id = 'database_id_here'" 59 | ] 60 | }, 61 | { 62 | "attachments": {}, 63 | "cell_type": "markdown", 64 | "id": "MWPjKS0Rn2Oc", 65 | "metadata": { 66 | "id": "MWPjKS0Rn2Oc" 67 | }, 68 | "source": [ 69 | "## paste the link here everytime you run" 70 | ] 71 | }, 72 | { 73 | "cell_type": "code", 74 | "execution_count": null, 75 | "id": "0eOkeTLFNJkI", 76 | "metadata": { 77 | "colab": { 78 | "base_uri": "https://localhost:8080/" 79 | }, 80 | "id": "0eOkeTLFNJkI", 81 | "outputId": "c571fd26-aba6-4930-be9b-1885f0df2cda" 82 | }, 83 | "outputs": [ 84 | { 85 | "name": "stdout", 86 | "output_type": "stream", 87 | "text": [ 88 | "https://leetcode.com/problems/rotate-image/description/\n" 89 | ] 90 | } 91 | ], 92 | "source": [ 93 | "leetcode_url = input()\n" 94 | ] 95 | }, 96 | { 97 | "attachments": {}, 98 | "cell_type": "markdown", 99 | "id": "PVVojK1jn97r", 100 | "metadata": { 101 | "id": "PVVojK1jn97r" 102 | }, 103 | "source": [ 104 | "--------------------------------------------\n", 105 | "# You don't have to modifiy anything below\n", 106 | "--------------------------------------------" 107 | ] 108 | }, 109 | { 110 | "attachments": {}, 111 | "cell_type": "markdown", 112 | "id": "lNN25_28r6Ny", 113 | "metadata": { 114 | "id": "lNN25_28r6Ny" 115 | }, 116 | "source": [ 117 | "## extracting leetcode info" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "id": "96a147e8-745c-4868-8bbd-0507fe07353e", 124 | "metadata": { 125 | "id": "96a147e8-745c-4868-8bbd-0507fe07353e" 126 | }, 127 | "outputs": [], 128 | "source": [ 129 | "def remove_continuous_whitespace(text):\n", 130 | " clean_text = re.sub(r'\\n\\s*\\n+', '\\n', text)\n", 131 | " return clean_text\n", 132 | "def remove_html_tags(text):\n", 133 | " clean_text = re.sub('<.*?>', '', text)\n", 134 | " return clean_text\n", 135 | "def extract_leetcode_info(url):\n", 136 | " # Send a GET request to the provided URL\n", 137 | " response = requests.get(url)\n", 138 | "\n", 139 | " # Create a BeautifulSoup object to parse the HTML content\n", 140 | " soup = BeautifulSoup(response.content, 'html.parser')\n", 141 | " # print(soup.prettify())\n", 142 | " props_json = json.loads(soup.select(\"#__NEXT_DATA__\")[0].text)\n", 143 | " premium = False\n", 144 | " for query in props_json[\"props\"][\"pageProps\"][\"dehydratedState\"][\"queries\"]:\n", 145 | " data = query[\"state\"][\"data\"]\n", 146 | " # print(data)\n", 147 | " if \"question\" in data:\n", 148 | " if \"isPaidOnly\" in data[\"question\"]:\n", 149 | " if data[\"question\"][\"isPaidOnly\"]:\n", 150 | " premium = True\n", 151 | " if \"content\" in data[\"question\"]:\n", 152 | " problem_description = remove_continuous_whitespace(\n", 153 | " remove_html_tags(data[\"question\"][\"content\"]))\n", 154 | " if \"questionFrontendId\" in data[\"question\"]:\n", 155 | " problem_number = data[\"question\"][\"questionFrontendId\"]\n", 156 | " if \"title\" in data[\"question\"]:\n", 157 | " problem_name = data[\"question\"][\"title\"]\n", 158 | "\n", 159 | " if \"difficulty\" in data[\"question\"]:\n", 160 | " problem_difficulty = data[\"question\"][\"difficulty\"]\n", 161 | " if premium:\n", 162 | " print(\"premium problem, cannot obtain problem description\")\n", 163 | " problem_description = \"\"\n", 164 | " else:\n", 165 | " # Filter out paragraphs after the paragraph containing \"

 

\"\n", 166 | " filtered_paragraphs = []\n", 167 | " for paragraph in problem_description.split('\\n'):\n", 168 | " if paragraph == \" \":\n", 169 | " break\n", 170 | " filtered_paragraphs.append(paragraph)\n", 171 | "\n", 172 | " # # Join the filtered paragraphs into a single string\n", 173 | " problem_description = \"\\n\".join(filtered_paragraphs).strip()\n", 174 | "\n", 175 | " # Return the extracted information as a dictionary\n", 176 | " return {\n", 177 | " 'name': problem_name,\n", 178 | " 'number': problem_number,\n", 179 | " 'description': problem_description,\n", 180 | " 'difficulty': problem_difficulty.lower(),\n", 181 | " }" 182 | ] 183 | }, 184 | { 185 | "cell_type": "code", 186 | "execution_count": null, 187 | "id": "b34303b6-97b0-4dbb-a123-0a8820b259ae", 188 | "metadata": { 189 | "id": "b34303b6-97b0-4dbb-a123-0a8820b259ae" 190 | }, 191 | "outputs": [], 192 | "source": [ 193 | "# Example usage\n", 194 | "# leetcode_url = 'https://leetcode.com/problems/move-zeroes/description/'\n", 195 | "info = extract_leetcode_info(leetcode_url)\n", 196 | "problem_name = info['name']\n", 197 | "problem_number = info['number']\n", 198 | "problem_description = info['description']\n", 199 | "problem_difficulty = info['difficulty']\n", 200 | "\n", 201 | "print('Problem Name:', problem_name)\n", 202 | "print('Problem Number:', problem_number)\n", 203 | "print('Problem Description:', problem_description)\n", 204 | "print('Problem Difficulty:', problem_difficulty)" 205 | ] 206 | }, 207 | { 208 | "attachments": {}, 209 | "cell_type": "markdown", 210 | "id": "OmOMhwxZsBjF", 211 | "metadata": { 212 | "id": "OmOMhwxZsBjF" 213 | }, 214 | "source": [ 215 | "## Notion API" 216 | ] 217 | }, 218 | { 219 | "cell_type": "code", 220 | "execution_count": null, 221 | "id": "0f8bb868-41bc-4ee5-b760-9526b608d95c", 222 | "metadata": { 223 | "id": "0f8bb868-41bc-4ee5-b760-9526b608d95c" 224 | }, 225 | "outputs": [], 226 | "source": [ 227 | "\n", 228 | "# Set the Notion API endpoint for retrieving a database\n", 229 | "endpoint_database = f'https://api.notion.com/v1/databases/{database_id}'\n", 230 | "endpoint_pages = f'https://api.notion.com/v1/pages'\n", 231 | "endpoint_query = f'https://api.notion.com/v1/databases/{database_id}/query'\n", 232 | "# Set the headers with the API key and content type\n", 233 | "headers = {\n", 234 | " 'Authorization': f'Bearer {api_key}',\n", 235 | " 'Content-Type': 'application/json',\n", 236 | " 'Notion-Version': '2022-06-28'\n", 237 | "}" 238 | ] 239 | }, 240 | { 241 | "cell_type": "code", 242 | "execution_count": null, 243 | "id": "1hMAbBkgq1hk", 244 | "metadata": { 245 | "id": "1hMAbBkgq1hk" 246 | }, 247 | "outputs": [], 248 | "source": [ 249 | "exist = False\n", 250 | "payload = {\n", 251 | " 'filter': {\n", 252 | " 'property': 'Problem',\n", 253 | " 'number': {\n", 254 | " 'equals': int(problem_number)\n", 255 | " }\n", 256 | " }\n", 257 | "}\n", 258 | "response = requests.post(endpoint_query.format(database_id=database_id), headers=headers, data=json.dumps(payload))\n", 259 | "# Check the response status\n", 260 | "if response.status_code == 200:\n", 261 | " # Get the response JSON data\n", 262 | " data = response.json()\n", 263 | "\n", 264 | " # Check if any results were found\n", 265 | " if data.get('results'):\n", 266 | " # A page with the specified problem number exists\n", 267 | " print('A page with the problem number exists.')\n", 268 | " exist = True\n", 269 | " else:\n", 270 | " # No page with the specified problem number exists\n", 271 | " print('No page with the problem number exists.')\n", 272 | "else:\n", 273 | " # Query request failed\n", 274 | " print('Failed to query pages:', response.json())" 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": null, 280 | "id": "818bc4ae-8a07-4e4b-bd6b-fff05a27ff5d", 281 | "metadata": { 282 | "id": "818bc4ae-8a07-4e4b-bd6b-fff05a27ff5d" 283 | }, 284 | "outputs": [], 285 | "source": [ 286 | "\n", 287 | "option_id = ''\n", 288 | "color = ''\n", 289 | "if problem_difficulty == 'Easy':\n", 290 | " option_id = 'iui['\n", 291 | " color = 'green'\n", 292 | "elif problem_difficulty == 'Medium':\n", 293 | " option_id = 'Wk\\t'\n", 294 | " color = 'purple'\n", 295 | "elif problem_difficulty == 'Hard':\n", 296 | " option_id = 'D=mB'\n", 297 | " color = 'red'\n", 298 | "# Set the properties of the new record\n", 299 | "new_record = {\n", 300 | " 'parent': {'database_id': database_id},\n", 301 | " 'properties': {\n", 302 | " 'Problem': {'number': int(problem_number)},\n", 303 | " 'Name': {'title': [{'text': {'content': problem_name}}]},\n", 304 | " 'Link': {'url': leetcode_url},\n", 305 | " 'Difficulty': {\n", 306 | " 'select' : {\n", 307 | " 'name': problem_difficulty\n", 308 | " }\n", 309 | " }\n", 310 | " }\n", 311 | "}\n", 312 | "\n", 313 | "\n", 314 | "if not exist:\n", 315 | " # Send a POST request to create the new record\n", 316 | " response = requests.post(endpoint_pages, json=new_record, headers=headers)\n", 317 | "\n", 318 | " # Get the JSON response\n", 319 | " json_response = response.json()\n", 320 | "\n", 321 | " # Print the response\n", 322 | " # print(json_response)\n", 323 | " block_id = json_response['id']\n", 324 | "else:\n", 325 | " print('A page with the problem number exists.')" 326 | ] 327 | }, 328 | { 329 | "cell_type": "code", 330 | "execution_count": null, 331 | "id": "3d4fd32c-5b78-4fe5-a762-f3b36f30507e", 332 | "metadata": { 333 | "id": "3d4fd32c-5b78-4fe5-a762-f3b36f30507e" 334 | }, 335 | "outputs": [], 336 | "source": [ 337 | "def heading_2(title):\n", 338 | " return {\n", 339 | " 'object': 'block',\n", 340 | " 'type': 'heading_2',\n", 341 | " 'heading_2': {\n", 342 | " 'rich_text': [\n", 343 | " {\n", 344 | " 'type': 'text',\n", 345 | " 'text': {\n", 346 | " 'content': title,\n", 347 | " }\n", 348 | " }\n", 349 | " ]\n", 350 | " }\n", 351 | " }\n", 352 | "def paragraph(content):\n", 353 | " return {\n", 354 | " 'object': 'block',\n", 355 | " 'type': 'paragraph',\n", 356 | " # 'paragraph': {'rich_text': [{'type': 'text', 'text': {'content': 'Implement a Queue by linked list. Support the following basic methods:', 'link': None},\n", 357 | " 'paragraph': {\n", 358 | " 'rich_text': [\n", 359 | " {\n", 360 | " 'type': 'text',\n", 361 | " 'text': {\n", 362 | " 'content': content,\n", 363 | " }\n", 364 | " }\n", 365 | " ]\n", 366 | " }\n", 367 | " }\n", 368 | "\n", 369 | "\n", 370 | "def code():\n", 371 | " return {\n", 372 | " 'object': 'block',\n", 373 | " 'type': 'code',\n", 374 | " # 'paragraph': {'rich_text': [{'type': 'text', 'text': {'content': 'Implement a Queue by linked list. Support the following basic methods:', 'link': None},\n", 375 | " 'code': {\n", 376 | " 'caption': [\n", 377 | " {\n", 378 | " 'type': 'text',\n", 379 | " 'text': {\n", 380 | " 'content': 'O(N) time complexity',\n", 381 | " }\n", 382 | " }\n", 383 | " ],\n", 384 | " 'rich_text': [\n", 385 | " {\n", 386 | " 'type': 'text',\n", 387 | " 'text': {\n", 388 | " 'content': ''\n", 389 | " }\n", 390 | " }\n", 391 | " ],\n", 392 | " 'language': 'python'\n", 393 | " }\n", 394 | " }\n", 395 | "\n", 396 | "\n" 397 | ] 398 | }, 399 | { 400 | "cell_type": "code", 401 | "execution_count": null, 402 | "id": "7c398beb-01cf-48ea-9edc-251d9357c98e", 403 | "metadata": { 404 | "id": "7c398beb-01cf-48ea-9edc-251d9357c98e" 405 | }, 406 | "outputs": [], 407 | "source": [ 408 | "block_content = [\n", 409 | "\n", 410 | " heading_2(\"Problem\"),\n", 411 | " paragraph(problem_description),\n", 412 | " heading_2(\"Discussion\"),\n", 413 | " # paragraph(\"like in interview\"),\n", 414 | " heading_2(\"Solution\"),\n", 415 | " # paragraph(\"your solution here\"),\n", 416 | " heading_2(\"Clarification & Difficulties\"),\n", 417 | " # paragraph(\" \"),\n", 418 | " heading_2(\"Code\"),\n", 419 | " code()\n", 420 | "\n", 421 | "\n", 422 | " # Add more blocks as needed\n", 423 | "]\n", 424 | "\n", 425 | "payload = {\n", 426 | " 'children': block_content\n", 427 | "}\n", 428 | "\n", 429 | "if not exist:\n", 430 | " endpoint_page_children = f'https://api.notion.com/v1/blocks/{block_id}/children'\n", 431 | " response = requests.patch(endpoint_page_children, json=payload, headers=headers)\n", 432 | "\n", 433 | " # Get the JSON response\n", 434 | " json_response = response.json()\n", 435 | "\n", 436 | " # Print the response\n", 437 | " # print(json_response)\n", 438 | "# else:\n", 439 | "# print('A page with the problem number exists.')" 440 | ] 441 | }, 442 | { 443 | "attachments": {}, 444 | "cell_type": "markdown", 445 | "id": "yJp2IL-MsXY3", 446 | "metadata": { 447 | "id": "yJp2IL-MsXY3" 448 | }, 449 | "source": [ 450 | "## result" 451 | ] 452 | }, 453 | { 454 | "cell_type": "code", 455 | "execution_count": null, 456 | "id": "c800ab1f-d048-40f1-bf17-40c4e0c0ab4d", 457 | "metadata": { 458 | "id": "c800ab1f-d048-40f1-bf17-40c4e0c0ab4d" 459 | }, 460 | "outputs": [], 461 | "source": [ 462 | "if not exist:\n", 463 | " # Print the response\n", 464 | " print(json_response)\n", 465 | "else:\n", 466 | " print('A page with the problem number exists.')" 467 | ] 468 | } 469 | ], 470 | "metadata": { 471 | "colab": { 472 | "collapsed_sections": [ 473 | "lNN25_28r6Ny", 474 | "OmOMhwxZsBjF" 475 | ], 476 | "provenance": [] 477 | }, 478 | "kernelspec": { 479 | "display_name": "Python 3 (ipykernel)", 480 | "language": "python", 481 | "name": "python3" 482 | }, 483 | "language_info": { 484 | "codemirror_mode": { 485 | "name": "ipython", 486 | "version": 3 487 | }, 488 | "file_extension": ".py", 489 | "mimetype": "text/x-python", 490 | "name": "python", 491 | "nbconvert_exporter": "python", 492 | "pygments_lexer": "ipython3", 493 | "version": "3.8.10" 494 | } 495 | }, 496 | "nbformat": 4, 497 | "nbformat_minor": 5 498 | } 499 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | beautifulsoup4 3 | notion 4 | --------------------------------------------------------------------------------