cpyte 4.2.5__tar.gz → 4.2.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. {cpyte-4.2.5/source/cpyte.egg-info → cpyte-4.2.7}/PKG-INFO +1 -1
  2. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/__init__.py +1 -1
  3. cpyte-4.2.7/source/cpyte/_bignum_bc.py +355 -0
  4. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/astparse.py +71 -8
  5. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/bignum.c +5 -4
  6. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/bytecoding.py +404 -25
  7. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/clib.py +9 -1
  8. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/compiling.py +92 -1
  9. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/formatter.py +4 -1
  10. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/gc_runtime.c +9 -9
  11. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/lexar.py +1 -0
  12. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/lsp_server.py +2 -0
  13. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/mainpie.py +26 -3
  14. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/package_manifest.py +4 -1
  15. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/semantic_analasis.py +300 -25
  16. {cpyte-4.2.5 → cpyte-4.2.7/source/cpyte.egg-info}/PKG-INFO +1 -1
  17. {cpyte-4.2.5 → cpyte-4.2.7}/test/test_bignum_jit.py +29 -1
  18. cpyte-4.2.5/source/cpyte/_bignum_bc.py +0 -289
  19. {cpyte-4.2.5 → cpyte-4.2.7}/MANIFEST.in +0 -0
  20. {cpyte-4.2.5 → cpyte-4.2.7}/pyproject.toml +0 -0
  21. {cpyte-4.2.5 → cpyte-4.2.7}/readme.md +0 -0
  22. {cpyte-4.2.5 → cpyte-4.2.7}/setup.cfg +0 -0
  23. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/__main__.py +0 -0
  24. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/_runtime_bc.py +0 -0
  25. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/extension_hooks.py +0 -0
  26. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/generate_bc.py +0 -0
  27. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/linker.py +0 -0
  28. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/optimizations.py +0 -0
  29. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/runtime.c +0 -0
  30. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/runtime_scorpion.c +0 -0
  31. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/sef.py +0 -0
  32. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/ugc.h +0 -0
  33. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/ui.py +0 -0
  34. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/update_check.py +0 -0
  35. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/winjit_patch.py +0 -0
  36. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte/winjit_stubs.c +0 -0
  37. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte.egg-info/SOURCES.txt +0 -0
  38. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte.egg-info/dependency_links.txt +0 -0
  39. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte.egg-info/entry_points.txt +0 -0
  40. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte.egg-info/requires.txt +0 -0
  41. {cpyte-4.2.5 → cpyte-4.2.7}/source/cpyte.egg-info/top_level.txt +0 -0
  42. {cpyte-4.2.5 → cpyte-4.2.7}/test/test_fuzz_del_has.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cpyte
3
- Version: 4.2.5
3
+ Version: 4.2.7
4
4
  Summary: The Cpyte programming language compiler
5
5
  Author: Hoang Duy Tung
6
6
  License: MIT
@@ -1,4 +1,4 @@
1
- __version__ = "4.2.5"
1
+ __version__ = "4.2.7"
2
2
 
3
3
  # ---------------------------------------------------------------------------
4
4
  # Public library API.
@@ -0,0 +1,355 @@
1
+ import base64
2
+ import zlib
3
+ from llvmlite import binding
4
+
5
+
6
+ _B64 = (
7
+ "eJzsvQ1YU1f2N7pPTj4OISQnfBkgwEkEjBQ1oCjfPSGg0dppRNtia2tAsGj9CGgVLXVOcoBEpTY61GLH"
8
+ "tkGppY7TRut06Iyvk0C0UamlttOhlrEB0VLHWrSdDu04M3fvE4JY2v99773P+97/+zy1GE/WWdln7b3X"
9
+ "+q2PvUIvuSeFAvgnEv417AfgP/BPod59KRMSBJBWLtEmLVh68tDaf/7ugdBFzEIM0lQSAOYmAhDKUwEe"
10
+ "fK+Gf0WWybt1Pv58IZmRvQerlyQLiJgE/s5yRlHMK9wTWuglMyKzCMV94oxyu8FVodI32vnzlBmFSdU+"
11
+ "Qp40lW5sIu/DMirqiT1KavJc+xUQk17Ij0nVpDoWLaMmv0M3SmK6ROeiYsqbmpJEMRnladk+h3yyL9wu"
12
+ "jc+pKJrnI9X6ubyYWLCdAiAZybSSTx4rtG6Xl8CX3dWdRoM4JGXuaUFheQpxnrlKOPqIPZMN+6h7rCeI"
13
+ "W5QG0/KM9fyWyaBBDe6TAycRahQCcJWwZqSFLtnBJ6KrdgHJWS1Gyw+9LgGu5rIXGXXS4pi9lfsmg+0Z"
14
+ "VS8+ZK9cule9kJaHt0eGgLQerdUVyePrXPwzNC1euBh0EZ18sEgBwKtw2Lih5BG0zpjDqiWIDQ6bucpW"
15
+ "U4XX1to2mkVbNaItoK8/vq81rLdV2elRgs74S61hQ7qETizBr4rv61dedMZ3WhJ6MKdoS7utBti3OG1m"
16
+ "he0pOILDttlpq1GIttaKtlTh1e2iDVpbjcM2u8W2sQdyDgNqSKUc7FeetSRcNCn9rQmMmRHVmuDT2U12"
17
+ "nIHjOGwbNKKtVfgGjc3stG112GpaRKawzlblVUvYx5Sy15LQp0s87UnoNYV5LQkXINGkPG1R+gMXqngf"
18
+ "lghvnS5T+jHEc7o//iK8wBL7WhMucjyDZUpI96nih+BbRnnJkuDXJVyyIGK3Jb4Tzg7S3VC2sE5dwkVP"
19
+ "wjDDvVVJr7vhrXjEhiUM9cdf8HAjuJXXINHDMUBOOv5qmfKSJ/46Gjz+aisatq8VUeCFXwWZE3rgLZBw"
20
+ "VpfQ3Ro/StclnLUoBwNzpBM6y5DkUE4/J+qghRPJlODlXnvgAjKjF1e5C3+r8jQcoSwB7tGFMuUQx3ZV"
21
+ "x43mThh2hw1QaJzrmKyPlnYGiVfHiMwd4rUgsRPrNRHAAdpc2PJGpCuJYDFIcsp+VpifFeanFMZMYrTY"
22
+ "kl0UZzoUgBetgOZ9TzkEalfDJL6ORD8CNdyR+EtlyotuZWdr/AVL/C2symY2iTbV2qrBz6r1s2r9qGo5"
23
+ "FBgZCqbyr4I11C5ANYSFhIM2sAQp20jyd6PK5o8E9yKM4j1KBJRNZ6S6oaq0xp9tDfMHVqlVOYiZbZvN"
24
+ "ttlwownRBkBsrrXNhspDiGoZqHK2DXD3CdFWWsQkDLYmnMWoqxa4CMqPW8O4rYFTU8IFH2wN87YmdHuU"
25
+ "cOkumhIu6BLPYu7xOsNWM7atAGmpBT39okoKrAlwE8+3Kodaw7qhMlsSrnELxWQSSK9ml7LQCraaRc8o"
26
+ "RE+b2ExStNWAiNUKUQ0TuLBtpER18JbCVo0UFV1sroIXojqzbWsVx+OwVUM6ZdvohG/xmlrRVka0pVZU"
27
+ "A4la0SYCzg7RNzC22QQ0CtHTbjzwNsuFw1ubOLZap22zQbSZG2FDOySKAgzw7VMttupa0WYXurWpxYaG"
28
+ "NdvgUzbDC8ZmbkfrBm/VQrPV2jaN0kVbNKIaR2CO+BbCtgUSoZwMJ6pDVMNJvoXkXmm4gPjoRQt3wSAT"
29
+ "3qKxbYF7ZLBVOzm2FlE1NxqUf44drhub6RLlmfFsIkhsuUPMGSO2B4mEyNTVyh9Vp2hOnSIC6nTb09gm"
30
+ "ByXgsFv5b1NXP8czLIrbNQ8YVFrbvb0OmkeL6agW/XHVjn9Drfsl+AU2jPtlIKQdR4oHgorXSxt4blHc"
31
+ "nvnAgLXzNoDZsz5CWipzTwXbgIFO5L9NWSkC/Thd/e08Rop4yGhs2NO47Z3AyLcBg0ae6mooDQsM20BJ"
32
+ "eJ3KQZXyYqvyIki4BAHQgowXbIZLXYVvgjClFTFQvatwCFYIzeA+ZtlmQ4B1ijYCaJLXWpWgPAHi3umy"
33
+ "eDjCYD+yiNOWhEtQjWnlNY8SaibU7auq+G8gZx4gtkI9ybLVOG2zFaLadhHFQVkrQt2B8fjpVp5VQcVO"
34
+ "QLiBQU3WcLtMiDY5RZt7bNWcwlQ7bRsD2kuNam+1QVTjHlXy2oCS19o2MaJNbtHmdhvSRrj1Ck6TDaKt"
35
+ "nGJDtUTATnHKabKZs2yjSlvFQtPbBDc38NaO50INNAW0HboAzpugW7at0NcEGOBbo20LNCIzZ3EmG1RU"
36
+ "yL9ZgyhIjQnbVrhunG7XOEQbqoJ0qMwUp5OcJpsDig2nwIm6heJEgirKvW4kRNmjF7bARa3GVs2ZA9yj"
37
+ "jQpOqhbbFpIbDWksmzWmsY4xNWbv6LbzDjGo26wZzFYqzMM8hcTbuOVMUH8cP/vTn/3pj/pT48yLHBwx"
38
+ "QTg65uBvGEYkvSk0jQhAk7gIon7uia6s45bsen1uG547iPdI+93S68PSy4C8Ssn6e6RXeoTDw9Iv/NJv"
39
+ "jNJboKMrt0Mf59Jn17PZoD73hD6uh82rx/Pc+pyOruzjutx6PN+J07JbRtkVQH5Ny/q10r/BESjZV7Ts"
40
+ "ilb6zbD0Vo9wwCi7apJeoWRrtbIvnJDTj9E9+ixfV3Yznn/ck+XW54N+IBt2o6d/SYqATtZPyT43Sr/p"
41
+ "EV41Svtp2d8pOJrMHVuvz+7G447o4ETyO9iCJjbf5Ym14/ltkOjJasKz3YELfY4DL4C3mrqy3Hged5F7"
42
+ "HF7gBR36/OMcj68rC9Id+pwe+BbLPoHnu9m8E3g2JLbgufVwdpBuyXbr4+rZvONsvh8LvIVqDW/lcmx5"
43
+ "PV25bWxuD8f5ESSyHAPizOnuyjrB5vaiwXO79WjYDn02pMALtz7rI7Ru8FZeM5vXos8dpbN5zXi2LzBH"
44
+ "S159F5IcyunmRPXhnEiePDv36oQLiI1edHMXbn12ExyhKw/uUVtXVg/H1s1mcaPl+y1xXh0apxdP6LAo"
45
+ "64PE7jEiFj9G/ChIrMdduuVvBxLGDCCheG0/+6yffdZP+aykZcDBMwquDq815GCUwCnu7v9UO/NSEJrC"
46
+ "e0SWNMKjvI0I8t7O0NGQiSeHgC39Sitda5JCCPrCLf0OHNePghWohxaRdVyffRzLOwFhB8+HJgNuDEtv"
47
+ "9AivQ3AwSUG/9Kse4TcQviCGOKQ3zNK1PQg0hgA0hI/02cCbB9GmqSsHjuDryu2BZoLnn4BGbcn6iM1u"
48
+ "0cPx47r1OUOQsxaQ35DSW2bpFRqClXTYKKM5ANEjrPOORy1LdrM+q0efz1mrS9hvlH7tFj5JSq/TshtO"
49
+ "2WWTbI1LOEDLvoBErfQyLR0OXDikgwy6dRkODriLYemXQHadkd0wyr7keG5ppZA+6JB+A9/SUgikHJwi"
50
+ "4lW3tN8sRWwm6XCPEILklyZZbeAtCSN7eItjA7JvAhjO3fo7RPgAA3zrlH6tlX7ll34Lr93Sr42I/4YR"
51
+ "UeDFMCn9O1w3eAvIIFxf7QnSIfzS0luBOcJ11iLJoZzDnKi3aE4krWyAex0ipTXBiw3cxbBRepkDcLhH"
52
+ "X2g5qbSyryluNCi/X1hNonG+ZUTrKFF/kLhhjEjfIT4VJPbDUL8Ag6H+VzwhUqd7f/ZfP/uvH/Vf/QQO"
53
+ "9cStZMK+VgdUBcZIRT+jys+o8qOo0nLaj5RE5I9kNsKcawSnedfAEOuOpgOlADJytqKCC61xv4g5rprK"
54
+ "As7TYb3DLZ47NYHbGIU9Q/byxKM+rrPxquROhQHVUV0N8tEiakNYSCyf5vXoTFJ3Y1IYn8IOI3VtiOUc"
55
+ "JdkdGDZuRybgZQI2jB/H0UFWXNNsApSA8yb8shCjxe4YPhbehv3eUssGArZVep4oQF9FrtEMcPOymaRI"
56
+ "jP/0mn064Cgk+XG7sklQQlhNuE6E0+I4ew4FSnpNvRboys3CuF25QPo4ENBJs5NqSdAG9kN54/bkkei5"
57
+ "cFphtgR+YHz628C6MRKGcAAwXwFg7AZARD3dQkm8/FZtisRiXqjgYfuopLN8dWnLSp487fxMC8Hnv0gV"
58
+ "XYAUsqqTpD6stxw+EuJtUPXwVXSK5JOahYpZ/S3UmnfrVaWOkCKX+a/8zoim9Z1A+O4ci2/vZEkKUW5e"
59
+ "SJw2ddLC+2IWkt3+Fno/FttmyVT1pkhWu4Tv1jNhKfwntaqsFP5arcrMhnTGuT31KulF/6+1Xs/N+zWX"
60
+ "aOlVRnrNZO0RbtK21uLZI0NOaQp/M7rO8+E57WzIqTi/R9mji19ISnNbjCdgAojFf+Th94+k8LdqdUZ2"
61
+ "RecwlEfXy+IRLi4GxHNgMDiWLhM2GFRucYuyXfgcBv6wYa8ZEZxsHZauBbIaswjGxhso0VatqAY5H9Fm"
62
+ "krvmiAEGeL2JhnGaaGOP8Av4yr1d65CiONYpQq89whvaUba12tAA5ZBfCkdYICPke3SNTZEx2KzClv0f"
63
+ "e36TM+Pc529uyvpym+7rFRtLLzWe/ezarZaCXz628y9/uf3YC8+dezM974EZf/J+8dYfL216drORUUlm"
64
+ "7eYDAH+ABQNu6VltY2vKHgAYSKC0APTq0oXpvUXhAJCQwhcCkKs5o2n8tYEH0IEu4wbAJGqIOc1EzAeA"
65
+ "hiwk1I7rzhN8Eg2BCEACwCbjE1ql/hdJGADwhzYBoG0rwQUYoEBgYEhgVFHxaeLAqByFwSSv/5sxMkAB"
66
+ "AgLCoUyGTLEM50ahOIoJ6FOXOiAHATgq/IMrSnZ3fQiAEQSoACjcjtUJEhEB8FGRgBs0LvnOCbVYCbgn"
67
+ "wj9CbVtsyKsYcI4X6cH7NDJulDsirSvcAoBhvEhR0WdxQPPGiXT4d1VqijsoB0GR+htuAeAYL9KCWU4R"
68
+ "YATjRTrWCkXSjhdpIGw+j+fEggNBkZ5/WgMHlo4XaZhdBKArGidSsXqegI/e3hEpKl1BcefvY6t0ijhA"
69
+ "uSks8DEaiZQ670UhYELGi7TyWF5glDGRdvyqgQfc2PiNeyUNrlLIeJF+UQxXyXnXKt1zDucaBe5s3ONL"
70
+ "EwAIHy/SS+cmrNLj0lCCEd+1cTVGGpSOF4m3b4DH8/PGb9wZUkEizbkjUsmhMwzwje0JFKly5nkhnxYG"
71
+ "KUikY6uyKJgOj9u4U2EfYBjagTGRDq+LlhFMWJAHieT8sIIGFWMfgyKtfukazmPw8Rs3klcG7n7c4ZHt"
72
+ "XgAapaMUHhpKHbkdA5L4URIfSb7SF44DRc4oiUBSvbo7WQi0G0dJJHri95PvkwDT0CiJQhN88L59CuDu"
73
+ "GVUfbovPvpSRDpjWUcEYJNif5y8tB0AvGv0khgR7+dgEwTZUThCs5NwEwf61d4Jgh980/FCwyvLdPxTs"
74
+ "2mn1DwWLerF4gmB5OycIdjh6gmCbpk0Q7OijST8U7NrvJwh2pWaiYJ9PFKxvomA9EwU7NmmCYKdnTBDs"
75
+ "g+UTBEv1UBPYPjGRE0Y7r7VPeGitomiCbEskE6bw/HThhJmujmcnLMip53QTxFt9hp647xUTxfNnTBSv"
76
+ "NWaCeKmfTBTvz7XCF34o3oJ72QkaHnXQM0HfCj/0TxRvlXmCeGsyOyaI92XsRPF+GTZRvHMTV0+8ZuLq"
77
+ "Rf1+4uqF/3Xi5r63buLq+eZMXL2/x00UL0KaNEE/paI9E1bvWXz+hM191zJBvJorpgniNWygJ4h3Lds5"
78
+ "Qbyp8caJSCJNEvyAbX28YaL5TJzFn9dMnMXhExNn8dRnE2ex4OZEFf2yduIi9+ZNXORnEiYu8sOyiTrw"
79
+ "5kTxUi9NFC/z1kTxDn83UbyXnqEmiHerwDFBvN8kTly9S7KJq/fPHxGPL5goHmudiD963QTx/to6UbyS"
80
+ "RT8UL2k2ETn7HwD4eNh0SMlIaKFi5AsdTSEp807z9Y/MBeIDtLjxkFpjKdTYayhdZvX3+zd9+Cfzlov3"
81
+ "/8XSuebbpyUZtg+vZ+wT/tX7xYaL9//nwmefZT/2Bt7wyfV/KCqkr31SmSGPFT1V/b3k8B/PVL6z718n"
82
+ "/0bfunXi/CH20sqeE9MPnetasfX7L4Wvfk5t/k556LUvK1Obw197f9Wcx0Titz75Kt2n/MVb5yoyPhql"
83
+ "7Xmh684TpZnGGzm/fkldk6a7BxyFkcNVKP9MglF6+5UrI7F8uz6rvqupkDul39BSLYFJ85ek9BtGOlNS"
84
+ "mNDpiT/fqlypFXBsbFw3DhP9/CY8v7u2aaNZ9DSBjsTNZtFWM76p1mambDHdcul1hxRmxuu0MpjTw5R3"
85
+ "JumNv6RS9qriO8sSVmq3o9JLjz77OJ53AlW2cruHIzeZRE9Xieagc0LRHAYd06F+HI1o04gADruZsS2H"
86
+ "+YjCVtNi29JiSUM1Dz+XzWvxch8qvQcK8Mq+MlRQ91riz5YJP3agekagqpHd0ZXVrM+y47nNXTPgQ29b"
87
+ "c1HpqEvy7iqbudRWY2Y3oi4G20aFbaPTFnN+sewGkMEsf9AhvUzL+inpdTgLShPf50ENFBdUyj5LQp9f"
88
+ "Odgffw1LWKlYlOXS5+xnc7uNSaMTMdk214pqWxYt/MaBkv6ZCau5rg0VOpHbhqF6f7cqfrhMuKSBzeru"
89
+ "ynXp8+GC3O7MG9Tn2uHbrqZTYjhT22YoD4GOTGtaLMsuk6jkfMUo/Vo72XNBlzDYP6m3P/4SFMAQk+ti"
90
+ "84+zcfVdWU367O6uvA5Ptq8LzjGv23C8mkANFNVwAUttMZ+ell43yb70c5UMLaptfGuUriOll7VS+PZr"
91
+ "v/ALv3TQKB3RTh64XqbstMT39k+6roq/qor3quLhDg6pEldSL+We0Od34NnNbHZ36Qm4+3CyW6GcBtTV"
92
+ "EnPuc+lXWlm/X/oFzZUetV0YauKAc1neAlUFrTA6rW2x1Ouy/V1w6fLhTnXTXmf82dZ4dFjqUa5MWqHl"
93
+ "Tvm0si9QUVOvYp9SiDYYbMudtjoGfvZoM5bX1JXX3JXVo8+B6tQNV0xiUEUVliVAUc974ksskSsXPqGV"
94
+ "fkXJvvILvzLKvkFDSa/4haM1V+1Bmt1UJdpC2GJKYju6cqEetumzuuEa4tkONq8bz4OL2dwlmRt2WoX6"
95
+ "xc62KrdZEm5hcB9PHxVCDYTjwL2YGT5bgY6MtrZzJxstnuO60UOA27z8E105zVC2qj6KOyVWxZ+GC+gJ"
96
+ "Q7tf1vi1cMgo7Qey0cPMwEzBFiqQJuxJMFB6uyQmpKLCd4ayNPEz5s6dG2EpdDpuen1EdmFjUzl/Nwzc"
97
+ "d+5RvhcHum8VeR2l0dC2FxfdRz1UWbNh1fp1m1dUldUs37Bqa6Vxvp5aWLmpcs1TmzeWla+pXFlTtrZy"
98
+ "mnn9qnUbK2t0ZvOaSmrFmrJ1T1CbAp+kMtKna6drKQ1HnZaRrtVOT0f/adOnmtOpNeshK3opW7eFGh1l"
99
+ "/dp1q8zrN1au20ihxy5etRaNqp+hv+ceakmhTofYIePYR9es2bR2+pr1683T1z61YaO5Zv0TNZUbNtyh"
100
+ "rtqwqXLFxvU1UPqKO9Sn1tWsX7Nmes1T6zauWls5vWLVBjSd00sCKK21at/xEryYQS/R+U34ZCJiYRO1"
101
+ "MD3dqj0DCQcg4dyCJiotLd3qOu6N5M0RLSb+quzWGjyzuuiQP0vYTMNMySTde9plgky9qZtMmykRx5hm"
102
+ "SuajFzt6WYhe7ocvSe/GmKocrZa9wk8lbOx+bHaXvxm+uIVrmPe0TiwWsq12cPecutldTmGV8z1tsw5+"
103
+ "kP++hFf0Hlk0T8gonBaF/cd+SqNj4RDwZ8Qa57TEdYz+nDpjMFkzyle89eSGVU9P/s2KezakrwjN/XXc"
104
+ "q0MnZJJOKmr27D/OfmHWsYw5f1jESwfgdagLc+CahIprNBA/RVtLzS3QZpG5Zfd0Wa8qTwd6LjzItAO4"
105
+ "FD3rskn6uRGdAwzSwdMAF2NBij3aHRnAolLz/q6s41huG5vf3MV7EgK7sq9f2Ueh3gf4OsR1q/W0Kn0B"
106
+ "ACnzYKje2Q9tkJGG2gOGLHifK9VDcO6CMJLbxJWifXhumgZ+5AIcrcxTJL1CIvj9wiTrh69cnftrh+xL"
107
+ "SvqVm3PMH8CkGCWdou68NjZ3PwR3PN/J5kGgd3Sh4KBMA4AK/juZ2OGiQSBjPx5J3j8Z8Hclkxg2Gb7X"
108
+ "S8Qz+B4mJqRQyBvhqRTldB1FCMv9UrNdhwlVhHDhfEUG5Z5Dekh8ANdpSbaWuWmhl72qMMRklFhZr6iw"
109
+ "7HlK9R5B4tx3BR5tTDay0/AIl2dva8hF07lh/jpON5Esck6WRk4WJB+/CYASwj2Fj8WADK+TYEk+/mqK"
110
+ "VSVsUNRTCk2mLssisGOBasCjQpUxmHOjsbK4sZq5sdAaRDaBnhK6wZiVTPcQAE2xieMdnZ9uu/6u+QGZ"
111
+ "2Y5loPntuY84u8hXqbcpIk2k1eQ+Uq9meXVset4BolFBJhJWi6IHb5LVH9B/FnGFMshjB/ZsprqCi/E0"
112
+ "XAxznWCqIUQ5sAeL2qmgitKd5cfIfM1ZlWOENnY6+bLtsvpkyQKt4zQfTiaEW6MpaI0iT3j2esQfmc6Z"
113
+ "Betdlb282b0ZGzHlmpiT7rA78/yf3D/VD/bPObZ/TT/cv01o/0xo/yID+1f9P7t/8zEky0UqjeRqf2jN"
114
+ "mx9aGqWYlmyki43CqIeIhsUpUYtw/rOgZxaPvhiJZRaD8Duy9pcFvk9yDz+3hY3qjO/2iDHZVVODQ7QB"
115
+ "HBMjPThqpfDQuk65JF1zAirD1ZSkmEh/nN1kx25aKIUdK3CrhAKkHNps3Rk/WF7G10vsMr6HlnyLnRbx"
116
+ "jgrRtC4yzbTqpsXYroOb0muy6/ob4AfyLWdMWOKesQ/QPGk6fZqCl7Gh/b854FFaOofrL0TcV0cxnqst"
117
+ "IzSBn0/Hc1IeM/pMKraCFpk03nLx9ieFSwBvw6wkwirxAqgVOsnjlwm4BxmETmu+ZnXoEphjBpwUdJ4W"
118
+ "Wd8SfbW7PijvmmphRo9bVBzcBryFSQ43yP/NNFsm7wrrSRfO9LpBISk55iIuUILVAJ9qZOMU5UaAtnAZ"
119
+ "PwPgw/cv0XqZEZqUeP0ppnf4JeFWr6gzU5xsx0uEi6k3Yo2YYklpi4fZ0dDa2SmBgoqjoldqnTxTu0vL"
120
+ "Qt0samiIkbQDKjWt20SfGpByzGJaCm/jUzt4I2lpVCG5xGUQDwN+BRXqn8lqCeE8rmfS1c1T5M0IFS5J"
121
+ "m9QY/WdmR2XnRwd2LK8vpjyFS5zF4mFa+FBrMR3OUxg9vCsEEf4teNjlph9ZgvEqaMtXnbwlR3k+EPHK"
122
+ "xwK9RAKXnJocpooyusVzvG4NMvr7Mo/TwgPg5LOhOxRrKuw6lTCdEC5Ye1yUtoVyHBPyq/8K5YzMsMYZ"
123
+ "j9oLD5nxVLDIR66jBZR4X2dYe2mRiu0YKSbd0NaqLzFi5otl/bHGo9qX7lkGOQ9taHiSFrg3vmGGnC3n"
124
+ "o97AosBH73RmOstV7Pmo6TVCndGjnjokIB3e/PoSt828Ue8M7cTZGQojZnxZIIRDnOlywwXrrJUrJO1M"
125
+ "5JsYO0m4kpS0lyZo/bL19KljjGXw1IzCJIdJpVHQQt5SwtJu2r7RjfN9JvW8OeQQmacdscINyC3tnePk"
126
+ "aUNCZSfhu/mltcNh7WBhZycLB7FO3qus07hFDkxVkK5hTXYLBtWmYlj1ES4e7m9UKFZCcDJ9YpP73PHu"
127
+ "OcIKMvLhLB/JFkrKSUkzeUZeelZHXYkmBs6aaAHdgOmg3NGpksgM+3K+aqpFvz9GMgSaMhwNsrQjWPzO"
128
+ "RcJjw5aGTCduPEtHF7hcwo1gYcyIRxT9MbOrYSq+dMTdGduD0ZVAnFhaiudEvymp6O+KuKeANGHJBpIf"
129
+ "08EfOe8Un51OFoVP1Z3MpFlKTUbvMa/SOsvLeqhFrL2Y5IWnFQkrsYLMUhbINVixkqfG95HLY4/oIKh+"
130
+ "b4xO7hBB46RFlLrxmSOWZ4qmIQQCYEYA6+0IH9s9e1XiXtM5SrDWVenkzenNaNaRokeFsxzXTOdokSV2"
131
+ "Tcw1ysROY+P5kIFooMPelhwgIapaInlZkLnQLXy0sZQYMJ1zhWJxa2I6VYg527DJVemwIeavEXNZIkJe"
132
+ "RxEcuXEfAR9nikDMmwr/AGV4lL/aVVm10w+Za+QQEy0zrHDkkYZ6KMaHiNkZiyC7VH/xbckb8g5sDCvL"
133
+ "OKy8ymGlOOifeIIlRKURb1gsRxC5BJ8M2u6XM3zLipAi2h2oQiOMFP04RroKe9hsxBMupkNC/KHS/pAa"
134
+ "chQpU1KUMeQ4pNTljiHlTOyMezxS+hFSLuKQ8jzTTKmmS19WUqdJtjNUpzWtKd+j450sCrnj+pTlTJMO"
135
+ "XnojOqPyb1oc+7CQlPBEIjbWYVLXEO4ReriX4YdCH/d+mMHl+P2aUySOQzD0rSwnjEAIR3lPaWiVuv+h"
136
+ "9YzeWFdO4JH1nrB0DYMgPo0XU+V/cn9QcMt8d0ZIm4Jf/T4jdkujO3d3JzAPWKH1nFMUjQxDoztNXbDN"
137
+ "E4aNtGmo9cAxUkwIoaIJHiGzgeG2mi8KiT7Am/bxgWI6g6cweACeWkptk6tf4/N0XXF+cbTC8EECzUjc"
138
+ "oC4yEg7mHriJV9Gn1NHPxdIlCvzW/UvouRh1PrbnKLUntfQwGTZUSr5+zGkQV9InxaH2qcD7GLSrJ7Ye"
139
+ "gfY7K/+h22olFhJt5fEqKMfNnbSwOER4oD75wgdiksKzQWKlADL/ditEnJ0P5z98Wz1rHLM/yFwdCpnz"
140
+ "QeImxJzlvI6gy401LMswi4ZXLWWEjzMjxS78AP8kvX82xKwMwU5Z/YOMLZzwnrIkCRaB5e8KjkXOtSj/"
141
+ "6gwdJrO0CuPRyJfvW5PRIRq2WCZRKiXThtMDk1SkwUUek4Lty+udELST5Myb/4RANTgk3OC3uS0eZtf8"
142
+ "y/XPZebEONnsP1hgDqn4K+qA8YqsdHhSqaGOqu+ab1Alu+cJy6DKaeHOsWvyG7fSuvw+kuXBbTV9O9lh"
143
+ "yWUekJymgjGIK861n6V36Mh5CEQ/A3i5BLq+VSEIGNKxgpkalskCKimtjIU70VMvOQvCKvodX0k+pqhw"
144
+ "ehki9rVJOkEY9DrmEmF8rHdGpwpibGqPept8j5UfusgS/bceNSXgSZImE1hUGvknImoxz+LsTzILQvlO"
145
+ "U8os3SwMy3C7nxBWIbge9EuOzYLr4/LELFkFmZ+nrQ3t9M7iKrmjnuIvcdG31U1YCRygNYUbgEqblV4O"
146
+ "B6jFh1/XxfJvWkDEU4usWdSusAFclXL9AL+GTlC6MCX0qUQm+TF93rOUkUkvUnaifjYZ+jlC4Keq2MEw"
147
+ "dbSOgKsfc1swcglIeUVtgsgkKsMcevMdTMm/IBvkwb2LyJJDe5ouhUBcd+BmiLJlR7pzRWfEswz+SDpc"
148
+ "NOpZuN9nPIwUPC7dHNKUVaVjYH4zb1ws6UJYCeM1l2Cdq3IIYSWjAxCk0gm/6RzgsHKAqoXwl4AQzc8y"
149
+ "ENG2kRBhsUgEf/sRVgofQsBKhiLmdSo07Az+GlclsCHmQeoTyByPmF16xFzruAFDVxnCym9VDBx5PhqZ"
150
+ "3o6Yp8rhyGXJiPl4vXdtzBo1ZNCXIgaSA9OVcjcUeBovszejvdgJYfr3BAyE6UlotBtqBNPL0aOpsBDZ"
151
+ "25J2hLyeTDRaT2MznNSnaFKOOIS83smIeQvfDB8tW/VpxpF5fijbCNE3Lld4lIuhnVwMLRrLFSqNxFiu"
152
+ "MBaigpIQCJwNk2Ai0F6kZrE6S3pe2VgiYIdoaGQgGmJd4Tsl4mF5cTAicypNdRT5+FRhiVBLJdPQYCIf"
153
+ "C4kceHkzdSoY8G1k9BJHOjQVR1UnczK5gDzwHMJNfpGkjRb6V+wJuvyU9CJNyzoYvSPwni33+bFXjo2B"
154
+ "9wAWPY86RdlXwPDOxJChHwBr+PVGBfUEjA6GX/JS/IfqqKLVRmsDjOtfEya12CVao2AxNOMrwmTSXp8z"
155
+ "nPkA3dzgY6Tuz/N0qryBlw/BDCuc06MUuOEsivv7UdxPIj1yIzfapIP7I8wgLsHdFiLV+JhCmxnHhwx2"
156
+ "1g03cyOJPiXlzRm35rO5Nd/7k3nLBYJeRfhDyf6wQq3XScIokF2ZIn1t1J0Jk6Uw8J+8Y8wrzBhzZ6m7"
157
+ "fX7wSvXYinQid+Z5vpyqHDaERELPdOohXmPWlakh8FI6z7rd58Ye1BareBleN42e8vmUlNcj+dVnmXDa"
158
+ "oPXk9IBVnC0F8jINWgNkS2XIloxoDXzIlswWqJcnxudlf+Tmd4KbX8g4/y5sWEzclQIZyKy9NJ/LRpFv"
159
+ "x8f7dhgj3Aop/I5QhfPiy421KNtemJWhcT/B74poHHPl2eNduR8kLhqbe89drpxLehy6kNiBP9xRO3bD"
160
+ "mNpt6nQlTSkgtTOhA4AIpsfD0/gCHOYQncISMz6cPl8bSEEyWhTayDVzvE70RuEiYAj/wFKYlUMtMlHC"
161
+ "r8F9SY5y0psOMT2TtgtUn4Wl0xdQHlUYWiaxTisgD2VrLIUVK0T+gy/SGZvB3LTCD/LOyg2xoL4No/tm"
162
+ "OsuPil7bPjCpjIDAKN8feZQ4DYHY6fwX6kTS6OllzZI5DIip8B98GUbd5eHvKwwQSZtrC7YnIci/ubOH"
163
+ "TCq1i48bMBUm3+mnuDfGHdHzCRMlEPLbTZYaPj9kE3NPKUUVtwIswwhTpxJK9ChYzhew2Xsz25cU/m17"
164
+ "mpr0+WX7YRrgaUh9JwjR13kj06fRXg2tYxkfHeV9oswSWYdt/IQRG5I12E4Zv3RIEL4wqYAs759k0Moj"
165
+ "JcpE4iAlTSZ9f3t7cgG5pkxp0O4eoTsaaihPkVFrrqPaeDnNNPXG5C1w9OP4SMd0zZk08i+ZD6Fod+qP"
166
+ "4LcW6VwPsjszgrceCt7Vx/LXuyprWSB9W/IUwmyPFAHnNzoU396LolCtuCR+TcxCFN/qUxFwVjUgGH4L"
167
+ "GSY2KSkXegMOs2sQcJqkF96uLLUhy/2S7IAMCUjFu/UQOBu3En2mc4wMqfs33Gj3jsv/V/OQzlepxuX/"
168
+ "UOcrjXSmUd5gzBIojPxxer9QLllMMLS/lCcntbxgbEv8F7Ftqeq6B7Xt1IgLs0OgTTwzNxjeHkpRQzz4"
169
+ "gU34kE0YclWlsplQV1muXpASoxwHG1gOjE+pC85IfGpXrCNcAzdOPEvj0felQa0/JISaI5k9HH8/ncfA"
170
+ "uCLDjg+r7odgNAzVvsU1VEFaZiwaU/svgE1BrYAoS73UQAnjZo8+cWVaQcxC/6MtY0/MRU+8xj0x3hFe"
171
+ "ip6Yo/HM7UsLljTSTtPCSSP7pwSjJHKsElXyKFFFCh+vo9qxBCjPrRD3JJ2lnn/rsSUwrZqalF5bMSzy"
172
+ "/7ENhKwGfCkI/xNhgXZD5nBxryAkWr0d1H0Q6SukPiuGabZYi4KyYau0ghH6f3MkKJ9nPpSvZUmrEZ+K"
173
+ "3+MIP4JBB5QatQCIvO/x+nEm77rEHYjmz0VVCEL9545TBeSxhzWe4j5FMOybPj2f9iQGw765kx0eJbP+"
174
+ "8thCTcd2TnHUkHDieY9osHm+qaBo6iNZGY6Xp8Lg8ATME5sWmT9jdggiT/AlQbMb4Y24TRIYGfEik6mM"
175
+ "KsHNZ8pIg0pJT4ExFLV3qF5rl9UvBSLO8qp0yqDlmY3I8n7dkJEF4WxSt4UfAWfzGA35IK69K7LGH9GH"
176
+ "8AdWltGnBuKWKRweZkdxfAcraXYWi6v6eT09oTAIfCwQBC7hx2m/oYjGBH4ZU2/iYkGnDsWCFrKCf9Qq"
177
+ "4FXg4f6/+ShqLRTXzh/pNkVbj+3Dq98ijxKbTKFyC3kcD4mGPsaIfEz7vbyn6CNuKYU3g1dinbogsP6d"
178
+ "HMAE35rh7kC8ZD54jhZeAydnGdkx7VntxqKYtfsxi1Cj/BarGA73b2AzYfihoAmrLjqRV+B0JgZDA1W4"
179
+ "j0pwvytcC40E7hIfTzeHaeJfBK/En9BRr7xI2BSR8FOWOYkWFt8nnY2dzGJYEy1wnrBs7dDdEk0V9qHI"
180
+ "df8c6iqE2cIp64ff091WEzeMPIvBMqUwKs0yoGLU/+LvHhyO8B/EswliIUh6yRuNvyGFAXkbT/Q+/Hjp"
181
+ "QoH05Wz78vpH0T5GMp5WZ+9IsX1HOMGXyw9dTqFo4b/ByawW+OBT1nuqh/+s86oZS14Rv7AnOllBHBC9"
182
+ "DOa7i9utyT0k80dUo3rHp1signC/cTf7qnRgUqsYDetFwy5pEfC9Mwrj+PBzqbOa9QbmOek1Cj46k9ke"
183
+ "PiLQpbdGz/GCpWj5H5h3kU6wHtXUDE+CCjPonkEsA/x9RY/2kXh9GNyHkwkx9e40dXSr9BdqNcn7QIOt"
184
+ "IpvDq7EbcGbgqknUQSMRso/ipU4kU5loNS3SkGqI+rzMNmes/1M8L7gnp1O6ljnBjOCe1IX7mGnuF0Rb"
185
+ "x/aElpeuK0QR26dwKOaNPqxVRPTvjCtn2lBSXZTauZz/lDyRyL4Zm2z0xQkKaChWmZqn8odyaa3BN5ue"
186
+ "J4Ze613ZkvLIrepINQ/Dwv6B5NMOs/zIMcclHKHLInlFLcLIFCrDGHbzXzoNHzLNHsJ5kcRxMoYRjRSV"
187
+ "RVpHaEPoZxrdKnKOGH8k+sIneM4QnhRJLnL+22TXyREKid/p7SRZtQSuU2TNzQG8bLab5QzrIikbNSze"
188
+ "suZ5IXy17FOwPK27EIKTSlCgMGGC32EaLW5fzjcjkaKqdvM+6QBLvaKRha2RVjut2cTyQ6sPQXb5AuwZ"
189
+ "g07wSNLkXhBp94wCS9jD1r7adrN4BTSp6/6OJTBT63lu6hFdqs8m9RWnkcNLsOh6uB3/3t8Z09bJ7Gj4"
190
+ "5S/KJCWqbfJv6EAZsoQXYi/ln+LeCNTn9Q8eKA7nKQxFJC+11ElhuvlP+8XRBO0N/KMnV12TEQ5PKiOL"
191
+ "KlFRlUji1lnT9pD1jDhas5okp/aJvjOVRVk/Fx+hxPKdrvC1/sctLk/h/nug3jseJB+BuFI+7zek8LdM"
192
+ "PRAr+fwGz3aGbcCiQhOPFv5DDBf/3vKG61HqaEzOLYf8T8RJI5e/lsc/wm+DdhAp0Tqtgh3hZJKLeMNk"
193
+ "sQwOEnyfX+n+i/hNUjJU6sOivO4ony5qYBKmNLTyebtfBVP8f8NLCHsWTKFreAVLWxqcR6zPknNC8cMg"
194
+ "PrXIfvSVRa5XSl2JS12J6a5XMlyJM12J57addgqwcuhXt3C1NRTj6lG8oUPxBo3ijQ4Ub1Sh2P5tFDas"
195
+ "RjFGWRiX6ul6YNgwB0UFZhEKSGiUF7IaFGMouILbq1zwH5m07hzgEsdyrsiWhipyzgYUY7zNZZmT0Gjf"
196
+ "FKKUdANK9cxSD4wxLnCJYw7KC1u4LPMfJMoLE9vWnvNzQQitNrPTugwo19BuR6Np5B1cZokiliIU/7yE"
197
+ "4h8QjeKfTpQ44ksRM70TjXYEJY7YbPTo7rkoy+xDzD1xXDFQfwyuwxY0EfNziPlrLsssaIPBkn8eGvlf"
198
+ "HHMimlRREhy5qwnJ6dyN8teccCinZx6XOs9HzJkhMLLqSYGRVe2v0GgbwqGcqgeQnNfno5T03hC4hsZU"
199
+ "9OiHkpGcb3K59QuI+fNwtIaPJeX1ZrjvQ6NtDYGPds1AzHQKWs8ziNmwDzHPQDmaZWUbZO5biJj37/7G"
200
+ "dM45EzFvTTHjd3KUG1yO4uVqkONzFLzBKIzSBVLfzP8HOcqdeAyVG8fHY55pP5mjbPzRHEU50AnzXQsC"
201
+ "HFmp6S8kfhABc8JRwjVCE+edfDkMQbCwBdTu0WT8Oj+FFdWJwoOwOiLI8oIYFIFNTeOvCzt8pwzZFQat"
202
+ "LZvvX7yHDudl/0H1NOvOxFP3lpeRMb3YyIvJtFUBdDgDXQkFjbGINy56EkfA6GnenGZPAv+NmJ70Vdvd"
203
+ "HVY1O1M7b063JbppXe8QDadUFmlwOUbo3oU6cTs46QsZdQSHoruUTpM06Ai2yn3uMPc/6LFTt18yyRJ+"
204
+ "icTaUUUL/KFh2CmRtVOMAlATVverSFJEeTH7b6BjXSl/XpccaquLjCZDqPOxxqOuhm8ehFjye8fJ1G3y"
205
+ "XQw/kAM5AjlQqT0am0qaqBgdAfOekeL2vdDzhr2Gch8gOOb8Yp+AcGDCk6+L4cir6cc+hqgpbT+3Y3l9"
206
+ "KoeSp1KPE4ZChI/UNvlpv8ZC9xhDO2C0YwTSF/eaYRZ2AhuZfg+c9YNOW7gXq15aRx0pzG+mpb6/ZWQp"
207
+ "jBj5AnMmWysafuoRUk6spaTr4oxH29m9ZvlOio8mdxurWzaJKoyH8Ltbl2tf/zfogNoFv9RgOeTroYPg"
208
+ "5PuhvumgYtTzLNgOlUaMUlXjgvpJfVM2e5TuSUITST4OfKMeqTkCrndkOQzDnfsNMzq0ih7MOVc3KfEx"
209
+ "RhfK83I9ED+VU7mRKVYhTPGi+gUeg0pGZhZBmBlBmIrLqbq5nCrH0TGNTUQMBg7jDqNzAk8UQklvIaqG"
210
+ "LOUgjMO7WoR3XVyhTMtB2HXqz1xOBaGhl0u6tjmumyCcIfQsRHUwdgEHOttROqdVrX1UuA/BqzECjbZJ"
211
+ "PXrKjezXydnv8XE1FGMIyq6CKdUtonDLD+wymbzbLlPH7PKeVt9ddrkM2eUHqG4yEqibCB7mNXakFZAJ"
212
+ "z/FDd3vwkwdD7HySO8QBBW1o2R8nrNjiiGaJejh5QbDuZYr2w0QAbU3Lr10VWsv6srFE4G1wGbcY2BJJ"
213
+ "m+RJeoEJpsWaHidfUf0JieOcsR/zv60SCmOhcHkrPqi+aSFdGLRDVlp3PoLkobRechXU9UZ4RbwYb+DQ"
214
+ "oVIrSmqxK3nDukW0gslaM3q0u8oizNDgw/MXB6Wi4sek+p0Rj9mPjbSnBvMtt1RbQNoLNKfos25hG381"
215
+ "PYC3+tlwFxZTbjoOYzLPwUnNOikDF7QTFTVinjWh80ionmerqAvl+PBjD9HTx+5OHbu7YJXphnoSDZep"
216
+ "DGlny9zRqhZ+apb2hbB2oCXC9quExVxjw2vofNuLPp/9bHclvgAs09CWsuk57kdICvUyqH5Kh11IAyuQ"
217
+ "nhxHmlaFPKuK89PtnJ+ejRSJ5Pz0EFc4iEea5uOKdE+jVN8jQ0p+hNPhhzj3JtZBi3hcBb2sPg25Nxen"
218
+ "8H8g27E7fuTP3FkWzeX95F21LqM80yg9iEUtXhT18LbR3N9f5Yb62ZR825PYrXI0LHBk7yXBihC3di8p"
219
+ "CTRlIB+D5nkPkduCvqoVKAXwZFedUq6BNSPUPUnhGT2Rqunc4wEFd2qw7bxgDfatiJa7a7BRqAa71rjD"
220
+ "0twfZgiJHbgNfUXebMpTBFP557Kto66kvmEKK6gzjLmSIehKgsm8mxaGjTQnj3WJcLqSg3TFLGrjR1Vv"
221
+ "gzKsNIqQbnaDpFUA2sdg5kVty4qQWc+bt5bHBop43Y84LZLU4XzjmJUox/TxbaiPy/w728Yqm9moYPBv"
222
+ "VDBg4xzhdd7vghP3HwircFqeOzxmUNfGShCfNJCiVlp406KF/6BaL08nLtEKhisfCmaaxxUDQLAhmGl6"
223
+ "dtJwMidDQ4OL2I2n7UAnM0gzF7aqtZ0ioAtJgPnRIBLy5HFFvT8M2kVZQ3gazKD+zUTBlPtz0WivCfZs"
224
+ "gcMSOz7n/xoEu2fspxN9TJj7L1vG+hxQhwzdUzhVWNK4iEp24qhCm9bsl/pGp7lwRWQFEPn/6b5zbjRW"
225
+ "EQl/knjNHLoVyvy6OZQ7hiL/QAkeB4kx9WM59Z8Uv8AErwdnWv0sLawFBemKsZxaN999gEAHihVaJ88h"
226
+ "0lKnGR+PNg6IYbaYjbLFr2YIVZqGEbrK28oFEI+QgUIDVQP9YZLSiY+cd0rgVIVwfo7X5yq7eeLV/Y1c"
227
+ "co0djLNIDFjdSrNwXF8Hngqep/ADEkf8YGdYOt0H5fIvDmuV8krtBB+b5IPpmhfP+oOqpSGvtpYRepgd"
228
+ "yYnX3VkwPzTm91ry93sYMXUMX4II7pxeSyIk7LiivO5OPA+irjgzfKLh3+piIY43zYGusvbqQaotPdT/"
229
+ "KJ5J+DBHEGL+PQYxN2Xe36KDo0J8cpgk02G7F+bNvZTDfq8DnVXR83M0JT26l+JgTmNoC7vlDhMuYSzL"
230
+ "j+s+F7bL1eXyI5SatG6Gclvi1bwyk81OU70Wkorxke1stoOXhMfwNtGicqaC0vul12ipQ1JB+C3xwow8"
231
+ "X46kwrBrk8LHKG5oHf2aS2V2DwqN6rE68lyeJD0L5Xxau6yw1aYSiuDaksJbuqS/a71+tK2dpgLCmyDM"
232
+ "IL8zyl4V+2hhYeL11iVYjI++3pXfnErhMcQ2t61EkFSdj2EZI+5/CNeREj3jLjysUzAzpH4KZo+9vDh7"
233
+ "J5rYwoawpjnmzcNDtNRvok/t6bZM9+q86l4dtB2fP809R7SRpHgptHC2qiDbyZroMwMp1fQ9T/pTNrh9"
234
+ "cGMvc+4q43U2x7GJDve/xeYQvvixsOXsr8fClkt82f54Q/kUWi0O3Y0tYw7G8fYpEhKcOpj0Lr0BJOjp"
235
+ "JX2Ywg2f3myFTw8sA/7G3EYw5SxJLrnN94EZ7kmizaSkHRguS7JyYZDlOx0zxMYbylLcr4m2kA6M0kt2"
236
+ "oOqe8XaSotxoR3WEgSn1H7LBvrltvFBD0keFlf5J/k/xAgL5t53hjKC6DtpR43JU6awNHf67J5GfhBHI"
237
+ "4V4AryTehiIK6F81zE2KOjPc5v7eRJ8bTN35G8ON3e8s6E99Bn6ycFUzTd2QCTeCxxNr60wjowHX/T9y"
238
+ "dkQhXwW40KoMhVY6iXU26t2AyV/jTBQ5MUKUrFxHLqqLc1Fu1gmZW1HyZ4lCLup44TB0UaXcoWAo8mdr"
239
+ "kIvqykIuiuLCrCvkcfg4JYrqTuhRWvkMYnbJUFp5m0tSDSiAo7isMQVljZYU5CmbuOPGPyLn5+COG79F"
240
+ "WaOeO26kn0UjH+YaPbjjxo65KBzsRceiLi5rdKNGjyvodFOXz51u2irgpEa4GnwiNyn9H6Cc2zg5d6NH"
241
+ "T0GZoq6Y87sGNJoiZPzZ5FwuxtvPxXgo8jv+USArQ+0gF+Ciw/jO+owu4oROMYBjRyEMx1D+IeGgeFlE"
242
+ "IvHsXOv2E1a6wg0VbXaK+f46ik4ISVHvBHU2uWEyb94cRhfZkVJApmVwJz79GTgM56TYSHiSo57etc59"
243
+ "njJ3MzteNbbohetAwdwQRw+G3cmMJKjErNNZGwxqsPwY/xjp+yCsQiuyrBBuXBirTjviMNyQuOuFhUTT"
244
+ "OgXPk4k/kpKl5c+VEYvIKixwPi3l6g2T0cZx2bAYnS0IzKPnGw7uXHEmWrrAueIF1MvTFWtQgnHrs4tb"
245
+ "n8Pc+nB9NJG9BJiWbMQbSoRRi0bPG4yPCB6KbLtfblzMp3SBRpofy2MzxO5JBHSvPCm05xyHNnTeKVEn"
246
+ "nzsljR6W67WBFlT2bEr0PK+o80HufCBtOGoePYs7HzDhwzHzgkyHpxyAkTWELeN3RYOajVV7rOtw6BSq"
247
+ "kRNkiik8ZFyEwQjse28EbzYV02cBNGHHTGjCI+WFROP0AnLHQX4lCQEW4K+hrhRqKltFnypMLiPDrpbW"
248
+ "vzol9nnT/nreTBhMGK3hR3RmuQ6abQH47Dh/heY8+gUFPTyTAaY2IKcXQDURL9DyX2/HvjswBaJgkuNK"
249
+ "UVphBJoAjBB0ixh7Noj5yDLyskZhPGbY9a7hOX6YZmmfpzXkdDz1efVZqBC/6jbFGI9WhP8i7R7UX7He"
250
+ "jMt3MvLAoVuRC9PLrECwSQtzTKcS0/ESCLW11MPDfVMFDst05v3dYw28J6phiOIUlsM1Y9Ca/WKGNeif"
251
+ "TnqEu8pRUSqKww+uysOVVEI+Qj2n0BaHkcXUc/1emaiFy81hxlUKdYYlIIYhfNWnGYx1CWRYjJTILUYM"
252
+ "Fbpj+Hj9oTj9sY71HM+KEnC6gXRJPc/nWCT08mXw2pxOLX9kyeI5y5dvmDt/YTGIE+Zq8TVdZtFmBhtM"
253
+ "ARletwOFiNcSGplBPgzzFevhZpr7ceRnr0I/C7pshNCOcTr3qJDqgPhD9o2LoQ9wcrjunBdDPaZXfVDC"
254
+ "yzRqKo3y4tFOhLuU+MdrMe7NAh1n6dFW3tyS4TVumBsjhW7ZR1SYmQcUY1GZE1SqLM9peTVYPczodLHM"
255
+ "m1preYWqgJT8hr/UPKmkPa7c6A0E0hZJwnC8YSx9iqJuwhmDMq6YntzItA/gZasW+Bug99e+gBQUTEVt"
256
+ "UzyhQUGz2dG6myFzk6MntbrZEZqxhjt0ZnJ+tBrPBa+0jVdQTwxUUB9UUA+noHbsO4pT0Of+HFTQERwG"
257
+ "zYw9E8Qct4woOQV99veGXd9INEvrWtO3n5qU8G71GaigO7tppKC7F2g4BV39YwpaHVTQTmVQQb/AHZ40"
258
+ "5s3tYwr6O4vQIPk3s1vJhw7ukDYUIcH31BJP+JC0hzJSYyv7ZwIdvf26fSxoL6C3NPFGjqRq8Hv4T4S1"
259
+ "l645cCs0FaYK0N6/94c1KqgnUT/G3xvIWe2knChcbC0lgk7bd1nWhxovQ9yJ4ndXczgZy9kAKoXqI9Dp"
260
+ "Lir+kYJqV2ULajZcg7DxBCV9W/IE6Q3me25kGI05XAei6MLb0BhehwwHuUJGFGI4YYWOSfgISgiBVAcd"
261
+ "6HmV/af653+8P2NcDrbwgOOuHMyNBXMwNtx2Vw5mkqIc7BHUB7OrGaBiX0Wy0X5fEsvMyLbCGHt2+MIi"
262
+ "YVi7dapY7ggm/wWq4lcpGNvzTbR1u4/mLbfCgGoHKlJ8h/NgRnjCGiYZRB5F/FN9Ki4UBVSg2s7byOU+"
263
+ "5heOzXMGN89dd+b5EdBl0ovDmkDgUPoWQW8hqHBesceT2sKP8u5aR2ovx1hIrnkEZladl3ebVDWEew5h"
264
+ "SeLXbMS/EZxHLXb8CJ9b4n6CxMJTKUWwv+4AlrRNbrVCYysCJ1uJCpXjYFxHJrE/3VlRiNMR9TxZY/Sd"
265
+ "7wAkMaOY1xr4DgAKgxDmVSEYy9o+ro7rGVcHGqvj0oKHeAKFUd6wGLWUBnPvscN2hB388Tl2F4SPeNQ7"
266
+ "WhgScqffpGkh/cN+E0vCWM1oluruWu734LSIV8bVcntGa7nNuhDFwLFxbU4FY/0mtZ0dB2D0cSzQb6K7"
267
+ "D0YfFaM9TlPT+TctruOWyEugbnu4V1R4WZhM2c+N1lJTIviNvOujKdbkaIt4b7NVcLIh5E4JIO1DWlxC"
268
+ "lguBaiUg3+mDri7F2LlnR2l4vA7ui6GZVOGzqA/I6zv3g/tXOW9AsLDXzxQ9cFuthdDJb0XhrBLuLSmq"
269
+ "ByEqupBwkLykmzu1yTctZFshTEK3QA59AiQG71PWRUXaHcRcuafqtrpJF5VI6KZBlDWKYQ7eXKgiSxrZ"
270
+ "SA+VrDGcrcF4FS6LbCvvO6FypE2j6Dk6VHxwUlMCLd0pq8/3N4T7sN01TrH/rUMwtbpIRSkzneU629TX"
271
+ "gyd5DnzkcBpdn0rreGq2lEysFNRLIZhuBJ89L7hpMYmvGq0PUdPjjEfzWqJPzSiM58O8+La614N6aEw9"
272
+ "I8VD+EE+b75oBs1IFmB14dGzSrnG6hn/970mgbpoHNfxzKJDjnWovtQfxjlirj9wUaDXBCmo4U6viZHr"
273
+ "NfkNwh4Lhz0fccyPcpEd13ht5mqk0w1PuSoJGyp7DnHM8ejRHezxtTGXOIY8dHLTwUX333EMXGf2bbZC"
274
+ "dMcWHONsgRizhWRjFjrTWPTjdsAb9aHIpC6EFH7BxdRjNVPhD84ysPgx/c/4wVnGDaT/Ok7/u0f1vwnp"
275
+ "f0YzlfMH7I/Nmys6RxHT3LlHhxckjansEBbsox6MKFxZDJX/VSwkOjyR6IuFjm/0WxHsdpVdVn85rI0U"
276
+ "+Rfvhb4kPEuD6ZbNHq10vEjlRG4MtmUdIyocludWjTn718DOyY4a0rvopsX/kS4kXB2RAV75hi+30PUW"
277
+ "Vrgk7eNfFQWL8t+DukXR1AEJKsp7Yu2yPbxjaUXCVnByaugArvonG+7Eqj9hdpxKejHsV9jck2fFhniA"
278
+ "gM3CD63+mNlR3G6y7jk992RoqCEB0XkwuqjuhfSOjZ2FlqM3dzrTk0nD6hHAq6CE/g3tJjqMkgqmKY5R"
279
+ "ZzqTQnek0Vynf/xP6eMIUor60Vzx7t5VPB5ldL1c7+ovuYPCyLa15yhOHxdy+WEqp7ycPh5DymuJRho0"
280
+ "yOnj445r4H+rHil/Uo+u/r/Wo97/1Xp08L+JHnn+D9GjWVxt/Dx1V22cjlokhCkqdM8mrjQuaTBuO4hd"
281
+ "CbbHGbcJFKNl8m5Ve6BCTox+Y3GsRy7ot73Ib3/k2YHJrjLShyRbtCLuFzocG18j31r+q7vis76x+Ozr"
282
+ "iJfuis9oGYrPqlGNvExqCIke6KZ3eLCTgwSM8CWDDAxdLPHMDB0PuVZP4bIM5wo5uSVr0EPrbAtagOAF"
283
+ "aUDXG6d9RAvDx1XKGfHY9ymXEWt7RMvqqBO6RKiSx4YKo9J27wFCIw05qTZKsBh81sUf1VT9TlWYUSsK"
284
+ "KuMJosJvebN6TBl/h5SxnPTm46ng3lJinuC+A3zZOju2h2uXq5LUkUcszR+BplL+gT1kGvOVtXGKcBFd"
285
+ "iFGaX+P3rzWfcov3Eo6oaY739/AeTNuXs6gDi9QyVlUFJR586xBY+5rzsuIa3d9gkVjifZ6sxlxjXRml"
286
+ "Z0Qb/e1YVGjVwmfosHaA17Z0MjuW1xugSVFKGMfYG0ZoRamFpFR8A4GFFzJ8+XuqzuyiPBsxRN6iCqki"
287
+ "Qz2x20zpi5yddKPVAIcXtIrxGHF5FKlPK7cXS47aVbPL5R/TO4l6KlHN0xlsdlrhayWJqV26HSZHeGTS"
288
+ "ln8BLIPChx9copX0LxLFiFeCk++LhRvTktS7DYPiPzO7ThUlRWxvOmvxROBNUiIfFO3lzXe8eY6XnLbv"
289
+ "EV3COiCoA1VEofAWffIXoT2pfaz6oVLRU59C65p3PL3XaJY1Pa5iRopN1g6a+F41neTX2UPrscQBnsUt"
290
+ "KmTqRye3x15sFCSrSd6v7ARflaTmlRHbYQ5YeIAMmYoX7jA7whVJxagA63S/u9bCt4nrynsEeE70B74i"
291
+ "fDF+fgueutcTkRPp4ntn8BQoUPGq+zpRg9lAmnuK8HGts9zSkMrDY9oEI15KYsWi7uMLXSaYT0VrGcE9"
292
+ "2+SbdDB0NLpDbbzyD9yhiqPEgLnZRIX0hxAOTx7zFc5S5fILlgR1tKrXFp7l3Q6Du0H8sWZTgn2/7UXq"
293
+ "lZgmHcy+vqSjd0kgcl1LF86PKUqzkijT9IcOP2+J4du1oRoDXcFED0zGZxLCZlBe4rArHIYYBxEDo9Ke"
294
+ "SclDIRfqQToA2T+Se9ColtWBwiMTgo6zXPwUj6CjnYufnHc6XwLQ8RgKiQLfRfNz8VMeip8cXMTzNYp4"
295
+ "PAltOb0ZI3pUGeO+i6blvotWxZUo70fMvdz3K/JQibJ1Chp5hOuCcaEzZkc0Yv6YY37UsNlV6eS6YLYE"
296
+ "vriGuktuFyMxPuC+PhGLmB+ZjLKQJw2f7tXNvqt//zrnH7vv7h2B/hEmG3LBQ5IrDzNY5mjNAl2PYZdg"
297
+ "Qs5xhBw2SUGJeBxeVfDuPtNrGcMrfcSeu/CKCkN4tRLhlUm9TjL4VCCPdJ9HUOWJRVB1DJU3qs8wu4rp"
298
+ "2n6/ABdEp5bxIg2xiUQ5QCd1abya0XPiCpUwo939D03XuH7dxDEnvVInzOhw/yVrrGXjXnRy5dfBXNaa"
299
+ "Qa2TJETK7+RBwe8Or97JC7vh1L8bDkPzIUvkCKiroIJfcv16OxZmZIRBcPs9scTVFukGdRFRwcKgVlD6"
300
+ "oqX5ILWqBldQGwAZlRZzlLAm3zMLLPpY+GKPf4clKk0+nKqlkprFgx8eoaqfMuMaGmTqfCap77XHsMPD"
301
+ "dPxsZzm288kudbQlRM1TMQ12mqRValJYQI3CEzTm7cv507bL6sEkODEawZdhPNhknoBgU+t+ocyShhN1"
302
+ "+6MlQ6V0F+/ZBZKM30NT3HV/jzq6NdTgcsxy86AhW2PIZIU9shfU9UVDlFY260P6GMMcp2D4ed2kIr41"
303
+ "1mf9Glqbvyd5uVdNcCf6m8BnDwsxdQUmDidjrltHTmQQkMOmYERRR4k1yB5XjQgIul7JSIosEIKFutvq"
304
+ "btTcnJUOc22iDCSaGGk2neT1tNK9KMM5xOftPqthnsNRQys1qeG+LOggTmiqOqfyDNy3zaLJ7eYV6CvQ"
305
+ "WXL5CqhjmAHixhsSaOB5HnmFOyLxgVqY6tUXhZy3zFLRqJd9xjj7Rl8KFaNGecFqZN/QyGpRftTLHanH"
306
+ "oV78Ee5ww4naQnSRCAD83HdNl3H1GM6+NyH7xrOQyRKcfQ8g+y5TotFa2CUwKtnENa5x358a1B2DzPlc"
307
+ "VMIx/4eLSpJgVEKHI4YlnE0vRKO1hHwBE6jZyKbLpqAY53bRaLmDs1sBZ7f8Sdzxn9BD3xT9mvnJe7b/"
308
+ "4t5/9bn/FWP+LMvPn/vv/Ln/3ff+T1mXnz/33+Nz/51k+S8/99J/8bn9/5/vyUbvOcBYm8RKdbBNIiOi"
309
+ "c/RXZkQ6ekIUqNmO+91CjdRdv1vo//81+vlzP3/uxz9XTQHwBPw3Q0qq60U3J9np7Rbxa4oOcpdFUh8z"
310
+ "NHzCIjuWQNwcscjfTdToFNbI4eRSbJs12jrVvvs9a0zrNJ/8b9b4D6cPVf/HmnhUS6ilrOrVDE1NLjv5"
311
+ "zCzDrfVs+pdZGv1z7Mx/Zhkmt7CZ27Or8H3snBey7Zf3sdmvZrd3vcjmvpXtO/hrNt+TPcTuZ+99P5uo"
312
+ "eInV/TVbU/Qyq/9btiHpFbb4u+wqfjs7z5ZjH2xn5z+f0+59nb3vYI6v7TB7/9GcofrfsA/8KYeoPMIu"
313
+ "ei9HU/xbdvGnOYbkN9gHv8ipErzJPvyPHPuVN9mlDbntpzrYR3+V63v1Hfax1tyhhj+wy9/MJVb+kS37"
314
+ "H7mauSfYFedyDSn/g638JLdKeJJ94vNc+9WT7Kq/57af/hP7JJvnO+Rj1+7OG2o8w65/JY944ixb/ds8"
315
+ "zefn2A2n8gzvdrNPfZhX9dp77Ob+PLvtPLvlq7z2J95nn/5Xnm9eL/vMzvyhKZ+wv9yXTyjARdaCvZav"
316
+ "Ufgvsiz2u3yDwv0p24B15VcpnH2sDfsg365g/spuxz7LD+BIJUwqHoSgEo43t6Pftsr1BRCBvteFINCL"
317
+ "UDqKOejfHfCvIfj9csiHfjX+FvhvJgh8Boy7D0b50Z83IA/6n7engkBPA/d/mUgC4B0i8B3dWSBwP0g/"
318
+ "RQR0614QOB9EdDuknyUC9Us9CGBokP8ipEfA9yUg8Avdg/QvR/krfsD/LyLwOxY2jMqN6ASk80MCcmz5"
319
+ "gZyyUTr7A3rsKP3ZH9CTR+kv/ICuHaX/X33dW4wTVRgH8BaWhXZZYAW5RGOIRhcVuu3MtLvLJbxolIsI"
320
+ "iYBBybF0u0u17dReoBhEIiHKA2CM4oMSFI1GjQGCJBgfdHkwGkOiEBOMGhKRhPgAkkg0XhLPzPnOXP7f"
321
+ "1A3MzvzmzHfOnDlz5tumad8CX5JQ70P6UP7v1e1ZGIutoPKnofwjCfU5dWdi6vy0F6n8OShfS6j++THQ"
322
+ "P078PVT+KpQ/kFDt+DOmro/21xPqdd+uuOo/3W9vJ9R2T9zvT+d6fZBQr8v00efXu3HSsdhJOt95cf98"
323
+ "nfjjCVXfXfHweDhLngH/nnwp+GU6rwfi4fP6jcqvg/L/kD8OPiWpfAx8VlKdTx364dakOv8d4LeT746r"
324
+ "ca19QVJt743749zxRUnVP/vi4fGwJKnG8aG42q99JZV/B8o/SvFPQPzNdF6nAufllC9RnM8hznbps+X2"
325
+ "2bh6L5T2/Uk1/n6O+/eX44eTapxdj6tx6vbb/FjsGPmECWEflz5Hbs+coOrRfoH8bvBr5MvBu3vU+1TW"
326
+ "S58X8PnkVfDFPSrOCxBnHflh8K3kJ8GfI/8K/BD5RfCPelQ/3IB++Iy8e2LYvyWfA36JfAH4DfJh8MlT"
327
+ "la8En0f+GPi95GXwZeTPgj9MfgA8T34EvEF+HHwv+Tj4a+TnwN8nvwT+Kfnv4GfJJ3WF/SL5bPDr5P3g"
328
+ "E3uVD4HfTL4CvJ98E/gw+VPgq8h3gm/uVfP5/q7A8056jcofgfLPkx8Hf4V8HPxd8nPgp3vVM/9SlxrX"
329
+ "2r8h/wv8CnnfpLA7k4zjC8Dnki8HT5NvAH9wmmpnZVK4nZvId4GXyQ+C7yJ/E/wl8hPgR8nPgH9Mfh78"
330
+ "C/JfwC+Q3wD/dZq6vt3d4ev7L/lc8BnTld8Dfgf5UvCcdOfrgdZ0q/3aV05X83u+W+3XLshb4E3yfeD7"
331
+ "qN7DUO8b5MfAj5GPg58hPw/+Hfll8Cvkf4D/TZ6YHPZpM9T2LZPD/T+ffCG4Qb4M/D7yNeAbZqh6BdRb"
332
+ "In8afCf5HvCD5K+CHyV/D/wU+SfgX5J/Df4D+U/gV8mvgcf7lMenhH0W+UzwfvI7wReTD4I/RL4C/Ik+"
333
+ "/T1Ifp7pTAxbybvBa+RTwdvkN4HvJp8L/mKfyiNvi6l81vEpcq57uU/lV/0x9beTLu/8bJaVlrrcv60G"
334
+ "V8ntVKNZTxnu0nKXWXeZc5fOO7qbI8V6vSa3tpScD2EX1eJ2WhutF4vOf2/Trgi5EtxsybWcFRQZSP4r"
335
+ "F6uE+ZERL/AYrTVaW2it0irT2khpm/tR7oVm+ZlUyYtZsfXho2XbrjvFaLtmb3cPqBQrjWIzVUsHjipU"
336
+ "arpUXS5rrabzufOVfLlsF8SWqhjNl3S9TdtpcstvWcuPoVfz1RG9antF2/5qY2vZX63Xi249cTEq6204"
337
+ "i0KxXWq6jW1V8m2nnbRRqqZKGWPI3RqVUZxdzkEu5BuNVqUYKEmHyRMu1HY4J6zO2T96m+F3gbyMqYJd"
338
+ "HkllEAy4nuFiYY0ua/IhEBEkuMOAIRJR3NPosmak4tBTmvXHXrgiDwwEE8FCyHr9OIYdOxYO6oGJYPnD"
339
+ "LBzDAx1D3hjhEh6wEiaCrkXeK+EYHhgIJgKLkUXIIQwiDCEMs4al/dscTteGK+WBieCNAT1BwOAKsxHN"
340
+ "ZjR3iJ2NZt0lcmoKt8EDA8FEsBCyCKyWQYQhhGHWsDQT1tYMa2zGa22dzRtqHu1sRoSZgWmXjmRiMDED"
341
+ "0zIc5YnBhB9l+XM6hNFgIJgIVuBpAEHaLEqbhWmzOM40Dj2hxWBiMgnEwfZ4YjAxmfA4WSY5w0hlUmn5"
342
+ "XM1Zi/LOF8UsquQLdqNt5JwviBlY3yjWGwOVfKk6sHaH+/xdW7efLBaajYGN928caNiteqE4IB9lzeKA"
343
+ "jF1tyYe/8B9WetXJQNQCnkWhbfWwCZEcZkKlIprlXO5XMCb8gaVX5RSqV+VNLUIJiVfG9oJ4t78GeacI"
344
+ "npTovTKj8ArW3aXKSwQlJjoz0YXUrSICN4C37oQKDGjhj0sRGFsiMD4C63VBKYrKUNxlQTg5igglKSKc"
345
+ "pYhQmiLcQwOJighlKiIyVRGQqwQuN41WJgZedigI+Uo0mxFjJSpOKGXBwRR1gD+9RbMZzWyg0j0WGKhQ"
346
+ "m5+5MDGZWEyygXHPenoMIvv5CxMrcNNAHH/GDtxNUMZPYpiYTLy6/Ec6E4OJyYTHyTLJMRlkMsRkmLcw"
347
+ "HZgm8ORtvIR+TsPEHyGQ1XRwo4ObHbxT/GwH9zrITwaYGExMJhaTLBNe1yCTISbDvIVpTrzVGd7sjN/u"
348
+ "QKITnpb/B40oNAVPdjgZnEzB8x1OBqeIAy3Bch4mBhOTiSV43sPJ4GRysgTPfTgZnExOwVisXX4CxMnk"
349
+ "FBEryym3WqhXWOi3Rb+z9FvvHxTeSy2rnUER0z//AbZvH7E="
350
+ )
351
+
352
+
353
+ def load_bignum_bc():
354
+ data = zlib.decompress(base64.b64decode(_B64))
355
+ return binding.parse_bitcode(data)
@@ -114,12 +114,20 @@ class FString(Node):
114
114
 
115
115
 
116
116
  class Variable(Node):
117
- __slots__ = ("_token", "const_value", "dynamic", "inferred_type", "name")
117
+ __slots__ = (
118
+ "_token",
119
+ "const_value",
120
+ "dynamic",
121
+ "inferred_type",
122
+ "name",
123
+ "_dunder_via",
124
+ )
118
125
 
119
126
  def __init__(self, name: str, token=None):
120
127
  self.name = name
121
128
  self._token = token
122
129
  self.const_value = None
130
+ self._dunder_via = None
123
131
 
124
132
  def __repr__(self):
125
133
  return f"Variable({self.name})"
@@ -489,6 +497,17 @@ def _try_parse_cast_type(tokens, pos):
489
497
  def _parse_atom(tokens: list[Token], pos: int):
490
498
  tok = tokens[pos]
491
499
 
500
+ for hook in _get_all_parser_hooks(True):
501
+ if (
502
+ hasattr(hook, "should_handle_expression")
503
+ and hook.should_handle_expression(tokens, pos)
504
+ ):
505
+ return hook.parse_expression(
506
+ tokens,
507
+ pos,
508
+ _make_parser_ctx(tokens, pos),
509
+ )
510
+
492
511
  if tok.type == TokenType.KEYWORD and tok.value == "borrow":
493
512
  pos += 1
494
513
  mutable = False
@@ -618,7 +637,23 @@ def _parse_atom(tokens: list[Token], pos: int):
618
637
  if m is not None:
619
638
  type_str = m.group(1)
620
639
  size = Number(m.group(2), token=tok)
621
- return NewExpr(type_str, size, token=tok), pos
640
+ args = None
641
+ if pos < len(tokens) and tokens[pos].type == TokenType.LPAREN:
642
+ # `new X(a, b, ...)` — constructor arguments for a class type.
643
+ pos += 1
644
+ args = []
645
+ if pos < len(tokens) and tokens[pos].type != TokenType.RPAREN:
646
+ while True:
647
+ arg, pos = parse_expression(tokens, pos)
648
+ args.append(arg)
649
+ if pos < len(tokens) and tokens[pos].type == TokenType.COMMA:
650
+ pos += 1
651
+ continue
652
+ break
653
+ if pos >= len(tokens) or tokens[pos].type != TokenType.RPAREN:
654
+ raise ParseError("Expected ')' after constructor arguments", tok)
655
+ pos += 1
656
+ return NewExpr(type_str, size, token=tok, args=args), pos
622
657
 
623
658
  if tok.type == TokenType.KEYWORD and tok.value == "asm":
624
659
  return parse_inline_asm(tokens, pos)
@@ -1173,6 +1208,16 @@ def _parse_standard_statement(tokens: list[Token], pos: int):
1173
1208
  "override",
1174
1209
  ):
1175
1210
  node, pos = parse_decorated_def(tokens, pos)
1211
+ elif tok.type == TokenType.KEYWORD and tok.value == "sealed":
1212
+ # `sealed class X:` — a closed, monomorphic class (no vtable).
1213
+ pos += 1
1214
+ if pos >= len(tokens) or (
1215
+ tokens[pos].type != TokenType.KEYWORD or tokens[pos].value != "class"
1216
+ ):
1217
+ raise ParseError(
1218
+ 'Expected "class" after "sealed"', tokens[pos] if pos < len(tokens) else None
1219
+ )
1220
+ node, pos = parse_class(tokens, pos, sealed=True)
1176
1221
  elif tok.type == TokenType.KEYWORD and tok.value == "class":
1177
1222
  node, pos = parse_class(tokens, pos)
1178
1223
  elif tok.type == TokenType.KEYWORD and tok.value == "struct":
@@ -1338,7 +1383,7 @@ def parse_decorated_def(tokens: list[Token], pos: int):
1338
1383
  return _parse_func_with_visibility(tokens, pos, visibility, tok)
1339
1384
 
1340
1385
 
1341
- def parse_class(tokens: list[Token], pos: int):
1386
+ def parse_class(tokens: list[Token], pos: int, sealed: bool = False):
1342
1387
  tok = tokens[pos]
1343
1388
  pos += 1
1344
1389
  if pos >= len(tokens) or tokens[pos].type != TokenType.IDENTIFIER:
@@ -1378,6 +1423,7 @@ def parse_class(tokens: list[Token], pos: int):
1378
1423
  fields=fields,
1379
1424
  methods=methods,
1380
1425
  generic_params=generic_params,
1426
+ sealed=sealed,
1381
1427
  token=tok,
1382
1428
  ), pos
1383
1429
 
@@ -1882,15 +1928,21 @@ class Raise(Node):
1882
1928
 
1883
1929
 
1884
1930
  class NewExpr(Node):
1885
- __slots__ = ("_token", "size", "type_expr")
1931
+ __slots__ = ("_token", "size", "type_expr", "args")
1886
1932
 
1887
- def __init__(self, type_expr, size=None, token=None):
1933
+ def __init__(self, type_expr, size=None, token=None, args=None):
1888
1934
  self.type_expr = type_expr
1889
1935
  self.size = size
1936
+ self.args = args
1890
1937
  self._token = token
1891
1938
 
1892
1939
  def __repr__(self):
1893
- return f"NewExpr({self.type_expr}, {self.size})"
1940
+ extra = ""
1941
+ if self.size is not None:
1942
+ extra += f"[{self.size}]"
1943
+ if self.args:
1944
+ extra += f"({', '.join(repr(a) for a in self.args)})"
1945
+ return f"NewExpr({self.type_expr}{extra})"
1894
1946
 
1895
1947
 
1896
1948
  class Deref(Node):
@@ -2068,7 +2120,15 @@ class InlineAsm(Node):
2068
2120
 
2069
2121
 
2070
2122
  class ClassDef(Node):
2071
- __slots__ = ("_token", "base", "fields", "generic_params", "methods", "name")
2123
+ __slots__ = (
2124
+ "_token",
2125
+ "base",
2126
+ "fields",
2127
+ "generic_params",
2128
+ "methods",
2129
+ "name",
2130
+ "sealed",
2131
+ )
2072
2132
 
2073
2133
  def __init__(
2074
2134
  self,
@@ -2077,6 +2137,7 @@ class ClassDef(Node):
2077
2137
  fields: list | None = None,
2078
2138
  methods: list | None = None,
2079
2139
  generic_params: list | None = None,
2140
+ sealed: bool = False,
2080
2141
  token=None,
2081
2142
  ):
2082
2143
  self.name = name
@@ -2084,10 +2145,12 @@ class ClassDef(Node):
2084
2145
  self.fields = fields or []
2085
2146
  self.methods = methods or []
2086
2147
  self.generic_params = generic_params or []
2148
+ self.sealed = sealed
2087
2149
  self._token = token
2088
2150
 
2089
2151
  def __repr__(self):
2090
- return f"ClassDef({self.name}, base={self.base}, fields={self.fields}, methods={self.methods})"
2152
+ seal = "sealed " if self.sealed else ""
2153
+ return f"ClassDef({seal}{self.name}, base={self.base}, fields={self.fields}, methods={self.methods})"
2091
2154
 
2092
2155
 
2093
2156
  def parse_ccode(tokens: list[Token], pos: int):
@@ -305,7 +305,7 @@ void* bigint_div(void* a, void* b) {
305
305
  }
306
306
  v->limbs[y->used] = carry;
307
307
  v->used = y->used + (carry ? 1 : 0);
308
-
308
+
309
309
  carry = 0;
310
310
  u->limbs[0] = 0; // leading zero for Knuth-D
311
311
  for (size_t i = 0; i < x->used; i++) {
@@ -331,7 +331,7 @@ void* bigint_div(void* a, void* b) {
331
331
  r->used = q_len;
332
332
 
333
333
  uint64_t v_top = v->limbs[v->used - 1];
334
-
334
+
335
335
  for (size_t j = q_len; j > 0; j--) {
336
336
  size_t idx = j - 1;
337
337
  size_t u_idx = idx + v->used;
@@ -514,10 +514,11 @@ int bigint_cmp(void* a, void* b) {
514
514
 
515
515
  void bigint_print(void* p) {
516
516
  BigNum* b = (BigNum*)p;
517
- if (!b) { printf("(null)"); return; }
517
+ if (!b) { printf("(null)\n"); return; }
518
518
  if (b->negative) putchar('-');
519
519
  if (b->used == 1 && b->limbs[0] == 0) {
520
520
  putchar('0');
521
+ printf("\n");
521
522
  return;
522
523
  }
523
524
  size_t max_digits = b->used * 20 + 1;
@@ -544,7 +545,7 @@ void bigint_print(void* p) {
544
545
  _bn_trim(&tmp);
545
546
  }
546
547
  free(tmp.limbs);
547
- printf("%s", buf + pos);
548
+ printf("%s\n", buf + pos);
548
549
  free(buf);
549
550
  }
550
551